diff --git a/.gitattributes b/.gitattributes
index 1e33416f7a20fff0c21ed7e95f24c0a624a9668a..b13a7ebea79877ea78730a19a50c793cacf3c25f 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -7,8 +7,11 @@
*.h text
# Declare files that will always have CRLF line endings on checkout.
+*.c text eol=lf
+*.h text eol=lf
*.py text eol=lf
+
# Denote all files that are truly binary and should not be modified.
*.png binary
*.jpg binary
\ No newline at end of file
diff --git a/Kconfig b/Kconfig
index 1ea89052497f9849211da9ce6c3ad8fde9d5fbcc..e9a6a158e9a221a7e91115768f5bbed7adfd1a31 100644
--- a/Kconfig
+++ b/Kconfig
@@ -27,6 +27,10 @@ menu "Component Configuration"
source "$(FREERTOS_SDK_ROOT)/drivers/Kconfig"
endmenu
-menu "FreeRTOS Setting"
+menu "Third-Party Configuration"
source "$(FREERTOS_SDK_ROOT)/third-party/Kconfig"
+endmenu
+
+menu "Kernel Configuration"
+ source "$(FREERTOS_SDK_ROOT)/third-party/freertos/Kconfig"
endmenu
\ No newline at end of file
diff --git a/README.md b/README.md
index 9d887122089d9c9fefad73f7c70fb993b9cbdc22..0ca96c381a03d4d093ca9e84ec042071785d7789 100644
--- a/README.md
+++ b/README.md
@@ -66,9 +66,8 @@ FT-2000/4 是一款面向桌面应用的高性能通用 4 核处理器。每 2
- 集成 34 Lane PCIE3.0 接口:2 个 X16(每个可拆分成 2 个 X8),2 个 X1
- 集成 2 个 GMAC,RGMII 接口,支持 10/100/1000 自适应
- 集成 1 个 SD 卡控制器,兼容 SD 2.0 规范
-- 集成 1 个 HDAudio,支持音频输出,可同时支持最多 4 个 Codec
-- 集成 SM2、SM3、SM4 模块
-- 集成 4 个 UART,1 个 LPC,32 个 GPIO,4 个 I2C,1 个 QSPI,2 个通 用 SPI,2 个 WDT,16 个外部中断(和 GPIO 共用 IO)
+- 集成 加密计算单元
+- 集成 4 个 UART,32 个 GPIO,4 个 I2C,1 个 QSPI,2 个通 用 SPI,2 个 WDT,16 个外部中断(和 GPIO 共用 IO)
- 集成温度传感器
### 3.2 D2000
@@ -84,38 +83,55 @@ D2000 是一款面向桌面应用的高性能通用 8 核处理器。每 2 个
- 集成 1 个 SD 卡控制器,兼容 SD 2.0 规范
- 集成 1 个 HDAudio,支持音频输出,可同时支持最多 4 个 Codec
- 集成 SM2、SM3、SM4、SM9 模块
-- 集成 4 个 UART,1 个 LPC,32 个 GPIO,4 个 I2C,1 个 QSPI,2 个通用 SPI,2 个 WDT,16 个外部中断(和 GPIO 共用 IO)
+- 集成 4 个 UART,32 个 GPIO,4 个 I2C,1 个 QSPI,2 个通用 SPI,2 个 WDT,16 个外部中断(和 GPIO 共用 IO)
- 集成 2 个温度传感器
-### 3.3 E2000D
+### 3.3 E2000Q
-- E2000D 1个cluster有2个cpu,共两核。主要技术特征如下:
+- E2000Q 集成2个FTC664核和2个FTC310核。主要技术特征如下:
- 兼容ARM v8 64 位指令系统,兼容32 位指令
+- 集成 1 路 16 通道 General DMA 和 1 路 8 通道 Device DMA
- 支持单精度、双精度浮点运算指令
-- L1有32KB,L2有256KB
-- 集成1个DDR4 通道,可对DDR 存储数据进行实时加密
+- 两个 FTC664 核各包含 1MB 私有 L2 Cache,由两个 FTC310 核组成的Cluster 内含 256KB 共享的 L2 Cache
+- 集成1个DDR4 通道
+- 集成6Lane PCIE3.0 接口(X4+2*X1 、X2+4*X2、6*X1)
+- 集成4个1000M以太网控制器,支持2路SGMII接口和2路SGMII/RGMII接口
+- 集成3路USB2.0(OTG)和2路USB3.0(兼容 2.0)
+- 集成2路SATA3.0模块
+- 2路 DisplayPort1.4 接口
+- 集成常用低速接口:WDT、QSPI、PWM、Nand、SD/SDIO/eMMC 、SPI_M、UART、I2C、I2S、MIO、CAN-FD、GPIO、LocalBus、Timer
+
+### 3.4 E2000D
+
+- E2000D 集成 2 个 FTC310 核。主要技术特征如下:
+
+- 兼容ARM v8 64 位指令系统,兼容32 位指令
+- 集成 1 路 16 通道 General DMA 和 1 路 8 通道 Device DMA
+- 支持单精度、双精度浮点运算指令
+- L2 Cache 有256KB
+- 集成1个DDR4 通道
- 集成4 Lane PCIE3.0 接口(4X1)
-- 集成网络接口4x1000M SGMII,1路支持RGMII/RMII,支持1路TSN
-- 集成2个USB2.0(OTG)接口
-- 集成1个HDAudio,支持音频输出;2路DP显示接口
+- 集成4个1000M以太网控制器,支持 2 路 SGMII 接口和 2 路 SGMII/RGMII 接口
+- 集成3路USB2.0(OTG)和2路USB3.0(兼容 2.0)
- 集成2路SATA3.0模块
-- 集成常用低速接口:WDT,DMAC,QSPI,PWM,Nand,SD/SDIO/eMMC ,SPI_M,UART,I2C,MIO,CAN, LPC_M_S,GPIO,LBC,Timer
+- 2路 DisplayPort1.4 接口
+- 集成常用低速接口:WDT,QSPI,PWM,Nand,SD/SDIO/eMMC ,SPI_M,UART,I2C,MIO,CAN-FD,GPIO,LocalBus,Timer
-### 3.4 E2000S
+### 3.5 E2000S
-- E2000S 1个cluster有1个cpu,单核结构。主要技术特征如下:
+- E2000S 集成 1 个 FTC310 核,单核结构。主要技术特征如下:
- 兼容ARM v8 64 位指令系统,兼容32 位指令
+- 集成 1 路 16 通道 General DMA 和 1 路 8 通道 Device DMA
- 支持单精度、双精度浮点运算指令
-- L1有32KB,L2有256KB
-- 集成1个DDR4 通道,可对DDR 存储数据进行实时加密
+- L2 Cache 有256KB
+- 集成1个DDR4 通道
- 集成2 Lane PCIE3.0 接口(2X1)
-- 集成网络接口2x1000M SGMII/RGMII/RMII,支持2路NCSI
-- 集成2个USB2.0(OTG)接口
-- 集成1个HDAudio,支持音频输出;2路DP显示接口
-- 集成JPEG Encoder模块
-- 集成常用低速接口:WDT,DMAC,PWM,QSPI,SD/SDIO/eMMC,SPI_M,UART,I2C,MIO,I3C,PMBUS, LPC_M_S,GPIO,oneWire,Timer
+- 集成3个1000M以太网控制器,支持1路SGMII接口和2路RGMII/RMII接口
+- 集成1路USB2.0(Device)和2路USB2.0(OTG)
+- 2路 DisplayPort1.4 接口
+- 集成常用低速接口:WDT、DMAC、PWM、QSPI、SD/SDIO/eMMC、SPI Master、UART、I2C、MIO、I3C、PMBUS、GPIO、SGPIO、One-Wire、Timer、One-Wire
---
@@ -141,12 +157,12 @@ D2000 是一款面向桌面应用的高性能通用 8 核处理器。每 2 个
| LWIP 2.1.2 | FT2000/4
D2000
E2000 | | lwip-2.1.2 |
| Letter shell 3.1 | FT2000/4
D2000
E2000 | | letter-shell-3.1 |
| Sfud 1.1.0 | FT2000/4
D2000
E2000 | | sfud-1.1.0 |
-| Fatfs (RAMSATA) | FT2000/4
D2000
E2000 | | fatfs-0.1.3 |
+| Fatfs (RAMSATA) | FT2000/4
D2000
E2000 | | fatfs-0.1.4 |
| OpenAMP | FT2000/4
D2000
E2000 | | openamp |
| SPIFFS-0.3.7 | FT2000/4
D2000
E2000 | | spiffs-0.3.7 |
| TLSF-3.1.0 | FT2000/4
D2000
E2000 | | tlsf-3.1.0 |
| Sdmmc-1.0 | E2000 | | sdmmc-1.0 |
-| CherryUSB-0.6.0 | E2000 | | cherryusb-0.5.2 |
+| CherryUSB-0.6.0 | E2000 | | cherryusb-0.6.0 |
---
## 5. 参考资料
@@ -166,6 +182,14 @@ wangxiaodong1030@phytium.com.cn
liushengming1118@phytium.com.cn
+wangzongqiang1322@phytium.com.cn
+
+liqiaozhong1404@phytium.com.cn
+
+liuzhihong1235@phytium.com.cn
+
+zhangyan1491@phytium.com.cn
+
---
## 7. 许可协议
diff --git a/docs/ChangeLog.md b/docs/ChangeLog.md
index 7a59ee87e406d6cf13de7b4b0c30109ee7e42155..7202322739e57444e765a66238e8f7943f192a0b 100644
--- a/docs/ChangeLog.md
+++ b/docs/ChangeLog.md
@@ -1,4 +1,156 @@
-# Phytium FreeRTOS SDK 2022-11-11 ChangeLog
+# Phytium FreeRTOS SDK 2023-2-9 0.4.0 ChangeLog
+
+Change Log sinc 2023-2-6
+
+## example
+- freertos_feature/queue readme update
+- peripheral/spi readme update
+- peripheral/spi e2000d_aarch32_eg_configs update(CONFIG_SFUD_CTRL_FSPIM=y)
+
+# Phytium FreeRTOS SDK 2023-2-8 ChangeLog
+
+Change Log sinc 2023-2-5
+
+## example
+- modify qspi_spiffs example
+- modify qspi example
+
+## driver
+- modify can example
+
+# Phytium FreeRTOS SDK 2023-2-6 ChangeLog
+
+Change Log sinc 2023-1-30
+
+## driver
+- add developer information in file header
+- add file description in file header
+- all .c .h file format update
+- print interface check
+- print statement syntax checking and punctuation supplementation
+## example
+- all example xxxx_eg_configs update
+- all example sdkconfig sdkconfig.h update
+- add developer information in file header
+- add file description in file header
+- all .c .h file format update
+- print interface check
+- print statement syntax checking and punctuation supplementation
+## third-party
+- add developer information in file header
+- add file description in file header
+- all .c .h file format update
+- third-party/lwip-2.1.2/ports/arch/cc.h modified
+- print interface check
+- print statement syntax checking and punctuation supplementation
+## install.py
+- modefiy the standalone_sdk_v、standalone_branche、standalone_remote value
+- add script statements which can delete standalone/third-party/lwip-2.1.2/ports/arch dir
+# Phytium FreeRTOS SDK 2023-1-6 ChangeLog
+
+Change Log sinc 2023-1-5
+
+## third-party
+
+add lvgl and modify the third-party.mk and the Kconfig
+
+## example
+## driver
+
+add the media example and driver,modify the corresponding config
+
+# Phytium FreeRTOS SDK 2023-1-5 ChangeLog
+
+Change Log sinc 2023-1-3
+
+## example
+- network part adjust. add new example lwip_startup
+- delete xmac_lwip_test.
+- delete gmac_lwip_test.
+
+## third-party
+- lwip-2.1.2 ports part adjust.
+- delete lwip-2.1.2/api.
+- delete lwip-2.1.2/apps.
+- delete lwip-2.1.2/core.
+
+## drivers
+- add fgmac_os.
+- add fxmac_os.
+
+# Phytium FreeRTOS SDK 2023-1-3 ChangeLog
+
+Change Log sinc 2022-12-28
+
+## third-party
+
+- Fix freertos interrupt priority get and mask function in port.c
+
+# Phytium FreeRTOS SDK 2022-12-28 ChangeLog
+
+- add sata fatfs_0.1.4 port
+- delete fatfs_0.1.3 content
+- delete storage/sata_fatfs content
+
+# Phytium FreeRTOS SDK 2022-12-7 ChangeLog
+
+Change Log sinc 2022-12-6
+
+## third-party
+
+- Add FPU support by configUSE_TASK_FPU_SUPPORT in kernel configuration
+
+# Phytium FreeRTOS SDK 2022-12-6 ChangeLog
+
+Change Log sinc 2022-12-6
+
+## example
+## driver
+
+- Adapt fparameters.h in standalone sdk
+
+# Phytium FreeRTOS SDK 2022-11-28 ChangeLog
+
+Change Log since 2022-11-25
+
+## example
+
+- add fatfs tests (usb/sdio)
+
+## driver
+
+- remove mmc driver, its implementation has been moved to sdmmc ports
+
+## third-party
+
+- add fatfs 0.1.4 freertos port
+- add sdmmc 1.0 freertos port
+
+# Phytium FreeRTOS SDK 2022-11-25 ChangeLog
+
+Change Log sinc 2022-11-17
+
+## example
+
+- add i2c example
+- add timer_tacho example
+
+## driver
+
+- add i2c os driver
+- add timer_tacho driver
+
+# Phytium FreeRTOS SDK 2022-11-17 ChangeLog
+
+Change Log sinc 2022-11-16
+
+## third-party
+
+- Add kernel configuration in menuconfig
+- Rename the "FreeRTOS Setting" to "Third-Party Configuration" in menuconfig
+- Rename cmd_os_stats.c to cmd_ps.c
+
+# Phytium FreeRTOS SDK 2022-11-11 0.3.0 ChangeLog
Change Log sinc 2022-11-11
diff --git a/drivers/Kconfig b/drivers/Kconfig
index b7b47d228e45d5103fd35dff7e21b47bfbd2976e..01d83bad3e78b64029dd8bd566f789acb3eeee2f 100644
--- a/drivers/Kconfig
+++ b/drivers/Kconfig
@@ -34,9 +34,16 @@ endmenu
menu "Freertos Eth Drivers"
config FREERTOS_USE_XMAC
+ select ENABLE_FXMAC
bool
prompt "Use Freertos xmac driver"
default n
+
+ config FREERTOS_USE_GMAC
+ select ENABLE_FGMAC
+ bool
+ prompt "Use Freertos gmac driver"
+ default n
endmenu
menu "Freertos Gpio Drivers"
@@ -67,13 +74,6 @@ menu "Freertos DMA Drivers"
default n
endmenu
-menu "Freertos MMC Drivers"
- config FREERTOS_USE_FSDIO
- bool
- prompt "Use Freertos sdio driver"
- default n
-endmenu
-
menu "Freertos Adc Drivers"
config FREERTOS_USE_ADC
bool
@@ -90,4 +90,26 @@ menu "Freertos Can Drivers"
default n
select USE_CAN
select USE_FCAN
-endmenu
\ No newline at end of file
+endmenu
+
+menu "Freertos I2c Drivers"
+ config FREERTOS_USE_I2C
+ bool
+ prompt "Use Freertos i2c driver"
+ default n
+endmenu
+
+menu "Freertos Mio Drivers"
+ config FREERTOS_USE_MIO
+ bool
+ prompt "Use Freertos mio driver"
+ default n
+endmenu
+
+menu "Freertos Timer Drivers"
+ config FREERTOS_USE_TIMER
+ bool
+ prompt "Use Freertos timer driver"
+ default n
+endmenu
+
diff --git a/drivers/adc/fadc_os.c b/drivers/adc/fadc_os.c
index 4678a9fee4b795a539f6fa3fa293c834a8aec39f..5c1e72172c6d4d35f32ff15d2d26e4e3ddda65b0 100644
--- a/drivers/adc/fadc_os.c
+++ b/drivers/adc/fadc_os.c
@@ -1,24 +1,26 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: fadc_os.c
* Date: 2022-08-24 16:50:19
* LastEditTime: 2022-08-26 16:59:51
- * Description: This file is for
- *
- * Modify History:
+ * Description: This file is for required function implementations of adc driver used in FreeRTOS.
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2022/08/31 first commit
+ * 1.1 wangxiaodong 2022/11/01 file name adaptation
*/
#include
#include
@@ -50,7 +52,7 @@
#define FREERTOS_ADC_CTRL_INTR_ENABLE (8) /* enable adc interrupt */
#define FREERTOS_ADC_CTRL_INTR_DISABLE (9) /* disable adc interrupt */
-static FFreeRTOSAdc os_adc[FADC_INSTANCE_NUM] = {0};
+static FFreeRTOSAdc os_adc[FADC_NUM] = {0};
/**
* @name: FFreeRTOSAdcControl
@@ -64,16 +66,16 @@ static FError FFreeRTOSAdcControl(FFreeRTOSAdc *os_adc_p, int cmd, void *arg)
{
FError ret = FADC_SUCCESS;
FFreeRTOSAdcConfig *configuration = (FFreeRTOSAdcConfig *)arg;
-
+
/* New contrl can be performed only after current one is finished */
if (pdFALSE == xSemaphoreTake(os_adc_p->adc_semaphore, portMAX_DELAY))
{
- FADC_ERROR("Adc xSemaphoreTake failed\r\n");
+ FADC_ERROR("Adc xSemaphoreTake failed.");
/* We could not take the semaphore, exit with 0 data received */
return FREERTOS_ADC_SEM_ERROR;
}
- switch (cmd)
+ switch (cmd)
{
case FREERTOS_ADC_CTRL_SET:
ret = FAdcVariableConfig(&os_adc_p->adc_ctrl, &configuration->convert_config);
@@ -102,7 +104,7 @@ static FError FFreeRTOSAdcControl(FFreeRTOSAdc *os_adc_p, int cmd, void *arg)
case FREERTOS_ADC_CTRL_READ:
ret = FAdcReadConvertResult(&os_adc_p->adc_ctrl, configuration->channel, &configuration->value);
break;
-
+
case FREERTOS_ADC_CTRL_INTR_ENABLE:
ret = FAdcInterruptEnable(&os_adc_p->adc_ctrl, configuration->channel, configuration->event_type);
break;
@@ -112,7 +114,7 @@ static FError FFreeRTOSAdcControl(FFreeRTOSAdc *os_adc_p, int cmd, void *arg)
break;
default:
- FADC_ERROR("invalid cmd.");
+ FADC_ERROR("Invalid cmd.");
ret = FADC_ERR_NOT_SUPPORT;
break;
}
@@ -121,7 +123,7 @@ static FError FFreeRTOSAdcControl(FFreeRTOSAdc *os_adc_p, int cmd, void *arg)
if (pdFALSE == xSemaphoreGive(os_adc_p->adc_semaphore))
{
/* We could not post the semaphore, exit with error */
- FADC_ERROR("Adc xSemaphoreGive failed\r\n");
+ FADC_ERROR("Adc xSemaphoreGive failed.");
return FREERTOS_ADC_SEM_ERROR;
}
@@ -163,7 +165,7 @@ static FError FFreeRTOSAdcConvertStart(FFreeRTOSAdc *os_adc_p, boolean state)
FASSERT(os_adc_p->adc_semaphore != NULL);
FError ret = FADC_SUCCESS;
- if (state==TRUE)
+ if (state == TRUE)
{
ret = FFreeRTOSAdcControl(os_adc_p, FREERTOS_ADC_CTRL_START, NULL);
}
@@ -195,7 +197,7 @@ static FError FFreeRTOSAdcChannelThresholdSet(FFreeRTOSAdc *os_adc_p, FAdcChanne
configuration.threshold_config = *threshold_config_p;
ret = FFreeRTOSAdcControl(os_adc_p, FREERTOS_ADC_CTRL_CHANNEL_THRESHOLD_SET, &configuration);
-
+
return ret;
}
@@ -218,7 +220,7 @@ static FError FFreeRTOSAdcChannelEnable(FFreeRTOSAdc *os_adc_p, FAdcChannel chan
memset(&configuration, 0, sizeof(configuration));
configuration.channel = channel;
- if (state==TRUE)
+ if (state == TRUE)
{
ret = FFreeRTOSAdcControl(os_adc_p, FREERTOS_ADC_CTRL_CHANNEL_ENABLE, &configuration);
}
@@ -226,7 +228,7 @@ static FError FFreeRTOSAdcChannelEnable(FFreeRTOSAdc *os_adc_p, FAdcChannel chan
{
ret = FFreeRTOSAdcControl(os_adc_p, FREERTOS_ADC_CTRL_CHANNEL_DISABLE, &configuration);
}
-
+
return ret;
}
@@ -251,7 +253,7 @@ static FError FFreeRTOSAdcInterruptEnable(FFreeRTOSAdc *os_adc_p, FAdcChannel ch
configuration.channel = channel;
configuration.event_type = event_type;
- if (state==TRUE)
+ if (state == TRUE)
{
ret = FFreeRTOSAdcControl(os_adc_p, FREERTOS_ADC_CTRL_INTR_ENABLE, &configuration);
}
@@ -271,7 +273,7 @@ static FError FFreeRTOSAdcInterruptEnable(FFreeRTOSAdc *os_adc_p, FAdcChannel ch
*/
FFreeRTOSAdc *FFreeRTOSAdcInit(u32 instance_id)
{
- FASSERT(instance_id < FADC_INSTANCE_NUM);
+ FASSERT(instance_id < FADC_NUM);
FASSERT(FT_COMPONENT_IS_READY != os_adc[instance_id].adc_ctrl.is_ready);
FAdcConfig pconfig;
@@ -280,7 +282,7 @@ FFreeRTOSAdc *FFreeRTOSAdcInit(u32 instance_id)
FASSERT(FAdcCfgInitialize(&os_adc[instance_id].adc_ctrl, &pconfig) == FT_SUCCESS);
FASSERT((os_adc[instance_id].adc_semaphore = xSemaphoreCreateMutex()) != NULL);
-
+
return (&os_adc[instance_id]);
}
@@ -296,12 +298,12 @@ FError FFreeRTOSAdcDeinit(FFreeRTOSAdc *os_adc_p)
FASSERT(os_adc_p->adc_semaphore != NULL);
/* stop adc convert */
- FFreeRTOSAdcConvertStart(os_adc_p, FALSE);
+ FFreeRTOSAdcConvertStart(os_adc_p, FALSE);
FAdcDeInitialize(&os_adc_p->adc_ctrl);
vSemaphoreDelete(os_adc_p->adc_semaphore);
memset(os_adc_p, 0, sizeof(*os_adc_p));
-
+
return FADC_SUCCESS;
}
@@ -325,7 +327,7 @@ FError FFreeRTOSAdcRead(FFreeRTOSAdc *os_adc_p, FAdcChannel channel, u16 *val)
configuration.channel = channel;
ret = FFreeRTOSAdcControl(os_adc_p, FREERTOS_ADC_CTRL_READ, &configuration);
- if(ret == FADC_SUCCESS)
+ if (ret == FADC_SUCCESS)
{
*val = configuration.value;
}
@@ -349,42 +351,42 @@ FError FFreeRTOSAdcSet(FFreeRTOSAdc *os_adc_p, FFreeRTOSAdcConfig *adc_cfg_p)
FASSERT(channel < FADC_CHANNEL_NUM);
ret = FFreeRTOSAdcControllerSet(os_adc_p, &adc_cfg_p->convert_config);
- if (FADC_SUCCESS != ret)
- {
- FADC_ERROR("FFreeRTOSAdcControllerSet failed\n");
- return FADC_ERR_CMD_FAILED;
- }
+ if (FADC_SUCCESS != ret)
+ {
+ FADC_ERROR("FFreeRTOSAdcControllerSet failed.");
+ return FADC_ERR_CMD_FAILED;
+ }
ret = FFreeRTOSAdcChannelThresholdSet(os_adc_p, channel, &adc_cfg_p->threshold_config);
- if (FADC_SUCCESS != ret)
- {
- FADC_ERROR("FAdcChannelThresholdSet failed\n");
+ if (FADC_SUCCESS != ret)
+ {
+ FADC_ERROR("FAdcChannelThresholdSet failed.");
return FADC_ERR_CMD_FAILED;
- }
+ }
/* enable adc channel */
- ret = FFreeRTOSAdcChannelEnable(os_adc_p, channel, TRUE);
+ ret = FFreeRTOSAdcChannelEnable(os_adc_p, channel, TRUE);
if (FADC_SUCCESS != ret)
- {
- FADC_ERROR("FFreeRTOSAdcChannelEnable failed\n");
+ {
+ FADC_ERROR("FFreeRTOSAdcChannelEnable failed.");
return FADC_ERR_CMD_FAILED;
- }
+ }
- /* enable adc convert finish interrupt to know whether the convert is completed */
- ret = FFreeRTOSAdcInterruptEnable(os_adc_p, channel, adc_cfg_p->event_type, TRUE);
+ /* enable adc convert finish interrupt to know whether the convert is completed */
+ ret = FFreeRTOSAdcInterruptEnable(os_adc_p, channel, adc_cfg_p->event_type, TRUE);
if (FADC_SUCCESS != ret)
- {
- FADC_ERROR("FFreeRTOSAdcInterruptEnable failed\n");
+ {
+ FADC_ERROR("FFreeRTOSAdcInterruptEnable failed.");
return FADC_ERR_CMD_FAILED;
- }
+ }
- /* start adc convert */
+ /* start adc convert */
ret = FFreeRTOSAdcConvertStart(os_adc_p, TRUE);
if (FADC_SUCCESS != ret)
- {
- FADC_ERROR("FFreeRTOSAdcConvertStart failed\n");
+ {
+ FADC_ERROR("FFreeRTOSAdcConvertStart failed.");
return FADC_ERR_CMD_FAILED;
- }
-
+ }
+
return ret;
}
\ No newline at end of file
diff --git a/drivers/adc/fadc_os.h b/drivers/adc/fadc_os.h
index c3c98e9e40d3e994922fa7eead8ea3e1943fbe76..37f6a28a001a1b920ad7f61d525c8b1b9dffb837 100644
--- a/drivers/adc/fadc_os.h
+++ b/drivers/adc/fadc_os.h
@@ -1,28 +1,30 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: fadc_os.h
* Date: 2022-08-24 16:42:19
* LastEditTime: 2022-08-26 17:59:12
- * Description: This file is for
- *
- * Modify History:
+ * Description: This file is for providing function related definitions of adc driver used in FreeRTOS.
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2022/08/31 first commit
+ * 1.1 wangxiaodong 2022/11/01 file name adaptation
*/
-#ifndef DRIVERS_FADC_OS_H
-#define DRIVERS_FADC_OS_H
+#ifndef FADC_OS_H
+#define FADC_OS_H
#include
#include
@@ -31,6 +33,11 @@
#include "ftypes.h"
#include "fparameters.h"
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
/* freertos adc error */
#define FREERTOS_ADC_SEM_ERROR FT_CODE_ERR(ErrModBsp, ErrBspAdc, 10)
@@ -39,12 +46,12 @@
typedef struct
{
- FAdcChannel channel;
+ FAdcChannel channel;
u16 value;
FAdcConvertConfig convert_config; /* adc convert config */
FAdcThresholdConfig threshold_config; /* adc channel threshold config */
FAdcIntrEventType event_type; /* adc interrupt event type */
-}FFreeRTOSAdcConfig;
+} FFreeRTOSAdcConfig;
typedef struct
{
@@ -64,5 +71,8 @@ FError FFreeRTOSAdcSet(FFreeRTOSAdc *os_adc_p, FFreeRTOSAdcConfig *adc_cfg_p);
/* adc channel convert result read */
FError FFreeRTOSAdcRead(FFreeRTOSAdc *os_adc_p, FAdcChannel channel, u16 *val);
+#ifdef __cplusplus
+}
+#endif
#endif // !
diff --git a/drivers/can/fcan_os.c b/drivers/can/fcan_os.c
index 79ccc47dd274af805b90c3f8959d528de40a05ce..ef068d2117a97234949d6ce4df3fde29e1326d97 100644
--- a/drivers/can/fcan_os.c
+++ b/drivers/can/fcan_os.c
@@ -1,24 +1,27 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: fcan_os.c
* Date: 2022-09-15 14:20:19
* LastEditTime: 2022-09-21 16:59:51
- * Description: This file is for
- *
- * Modify History:
+ * Description: This file is for required function implementations of can driver used in FreeRTOS.
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2022/09/23 first commit
+ * 1.1 wangxiaodong 2022/11/01 file name adaptation
+ * 1.2 zhangyan 2023/2/7 improve functions
*/
#include
#include
@@ -39,7 +42,7 @@
#define FCAN_INFO(format, ...) FT_DEBUG_PRINT_I(FCAN_DEBUG_TAG, format, ##__VA_ARGS__)
#define FCAN_DEBUG(format, ...) FT_DEBUG_PRINT_D(FCAN_DEBUG_TAG, format, ##__VA_ARGS__)
-static FFreeRTOSCan os_can[FCAN_INSTANCE_NUM] = {0};
+static FFreeRTOSCan os_can[FCAN_NUM] = {0};
/**
* @name: FFreeRTOSCanInit
@@ -49,7 +52,7 @@ static FFreeRTOSCan os_can[FCAN_INSTANCE_NUM] = {0};
*/
FFreeRTOSCan *FFreeRTOSCanInit(u32 instance_id)
{
- FASSERT(instance_id < FCAN_INSTANCE_NUM);
+ FASSERT(instance_id < FCAN_NUM);
FASSERT(FT_COMPONENT_IS_READY != os_can[instance_id].can_ctrl.is_ready);
FCanConfig pconfig;
@@ -96,16 +99,17 @@ FError FFreeRTOSCanControl(FFreeRTOSCan *os_can_p, int cmd, void *arg)
FCanIdMaskConfig *id_mask_p;
FCanIntrEventConfig *intr_event_p;
boolean use_canfd;
+ u32 *tran_mode;
/* New contrl can be performed only after current one is finished */
if (pdFALSE == xSemaphoreTake(os_can_p->can_semaphore, portMAX_DELAY))
{
- FCAN_ERROR("Can xSemaphoreTake failed\r\n");
+ FCAN_ERROR("Can xSemaphoreTake failed.");
/* We could not take the semaphore, exit with 0 data received */
return FREERTOS_CAN_SEM_ERROR;
}
- switch (cmd)
+ switch (cmd)
{
case FREERTOS_CAN_CTRL_ENABLE:
FCanEnable(&os_can_p->can_ctrl, TRUE);
@@ -133,6 +137,11 @@ FError FFreeRTOSCanControl(FFreeRTOSCan *os_can_p, int cmd, void *arg)
case FREERTOS_CAN_CTRL_ID_MASK_ENABLE:
FCanIdMaskFilterEnable(&os_can_p->can_ctrl);
break;
+
+ case FREERTOS_CAN_CTRL_MODE_SET:
+ tran_mode = (u32*)arg;
+ FCanSetMode(&os_can_p->can_ctrl, *tran_mode);
+ break;
case FREERTOS_CAN_CTRL_INTR_SET:
intr_event_p = (FCanIntrEventConfig *)arg;
@@ -145,7 +154,7 @@ FError FFreeRTOSCanControl(FFreeRTOSCan *os_can_p, int cmd, void *arg)
FCanFdEnable(&os_can_p->can_ctrl, use_canfd);
break;
default:
- FCAN_ERROR("invalid cmd.");
+ FCAN_ERROR("Invalid cmd.");
ret = FCAN_INVAL_PARAM;
break;
}
@@ -154,7 +163,7 @@ FError FFreeRTOSCanControl(FFreeRTOSCan *os_can_p, int cmd, void *arg)
if (pdFALSE == xSemaphoreGive(os_can_p->can_semaphore))
{
/* We could not post the semaphore, exit with error */
- FCAN_ERROR("Can xSemaphoreGive failed\r\n");
+ FCAN_ERROR("Can xSemaphoreGive failed.");
return FREERTOS_CAN_SEM_ERROR;
}
@@ -180,7 +189,7 @@ FError FFreeRTOSCanSend(FFreeRTOSCan *os_can_p, FCanFrame *frame_p)
/* New contrl can be performed only after current one is finished */
if (pdFALSE == xSemaphoreTake(os_can_p->can_semaphore, portMAX_DELAY))
{
- FCAN_ERROR("Can xSemaphoreTake failed\r\n");
+ FCAN_ERROR("Can xSemaphoreTake failed.");
/* We could not take the semaphore, exit with 0 data received */
return FREERTOS_CAN_SEM_ERROR;
}
@@ -188,14 +197,14 @@ FError FFreeRTOSCanSend(FFreeRTOSCan *os_can_p, FCanFrame *frame_p)
ret = FCanSend(&os_can_p->can_ctrl, frame_p);
if (ret != FCAN_SUCCESS)
{
- FCAN_ERROR("Can send failed\r\n");
+ FCAN_ERROR("Can send failed.");
}
/* Enable next contrl. Current one is finished */
if (pdFALSE == xSemaphoreGive(os_can_p->can_semaphore))
{
/* We could not post the semaphore, exit with error */
- FCAN_ERROR("Can xSemaphoreGive failed\r\n");
+ FCAN_ERROR("Can xSemaphoreGive failed.");
return FREERTOS_CAN_SEM_ERROR;
}
@@ -221,7 +230,7 @@ FError FFreeRTOSCanRecv(FFreeRTOSCan *os_can_p, FCanFrame *frame_p)
/* New contrl can be performed only after current one is finished */
if (pdFALSE == xSemaphoreTake(os_can_p->can_semaphore, portMAX_DELAY))
{
- FCAN_ERROR("Can xSemaphoreTake failed\r\n");
+ FCAN_ERROR("Can xSemaphoreTake failed.");
/* We could not take the semaphore, exit with 0 data received */
return FREERTOS_CAN_SEM_ERROR;
}
@@ -229,14 +238,14 @@ FError FFreeRTOSCanRecv(FFreeRTOSCan *os_can_p, FCanFrame *frame_p)
ret = FCanRecv(&os_can_p->can_ctrl, frame_p);
if (ret != FCAN_SUCCESS)
{
- FCAN_ERROR("Can recv failed\r\n");
+ FCAN_ERROR("Can recv failed.");
}
/* Enable next contrl. Current one is finished */
if (pdFALSE == xSemaphoreGive(os_can_p->can_semaphore))
{
/* We could not post the semaphore, exit with error */
- FCAN_ERROR("Can xSemaphoreGive failed\r\n");
+ FCAN_ERROR("Can xSemaphoreGive failed.");
return FREERTOS_CAN_SEM_ERROR;
}
diff --git a/drivers/can/fcan_os.h b/drivers/can/fcan_os.h
index 19d85a00144c289cc083b97316bf9a58c66ba6e2..c829e89f288149ab58983580334b059942248735 100644
--- a/drivers/can/fcan_os.h
+++ b/drivers/can/fcan_os.h
@@ -1,28 +1,31 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: fcan_os.h
* Date: 2022-09-16 11:40:19
* LastEditTime: 2022-09-21 16:59:58
- * Description: This file is for
- *
- * Modify History:
+ * Description: This file is for providing function related definitions of can driver used in FreeRTOS.
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2022/09/23 first commit
+ * 1.1 wangxiaodong 2022/11/01 file name adaptation
+ * 1.2 zhangyan 2023/2/7 improve functions
*/
-#ifndef DRIVERS_FCAN_OS_H
-#define DRIVERS_FCAN_OS_H
+#ifndef FCAN_OS_H
+#define FCAN_OS_H
#include
#include
@@ -30,6 +33,11 @@
#include "fcan.h"
#include "ftypes.h"
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
/* freertos can error */
#define FREERTOS_CAN_OK FT_SUCCESS
#define FREERTOS_CAN_SEM_ERROR FT_CODE_ERR(ErrModBsp, ErrBspCan, 10)
@@ -49,6 +57,7 @@ enum
FREERTOS_CAN_CTRL_INTR_SET, /* set can interrupt handler */
FREERTOS_CAN_CTRL_INTR_ENABLE, /* enable can interrupt */
FREERTOS_CAN_CTRL_FD_ENABLE, /* set can fd enable */
+ FREERTOS_CAN_CTRL_MODE_SET, /* set can transmit mode */
FREERTOS_CAN_CTRL_NUM
};
@@ -73,5 +82,8 @@ FError FFreeRTOSCanSend(FFreeRTOSCan *os_can_p, FCanFrame *frame_p);
/* can receive frame */
FError FFreeRTOSCanRecv(FFreeRTOSCan *os_can_p, FCanFrame *frame_p);
+#ifdef __cplusplus
+}
+#endif
#endif // !
diff --git a/drivers/dma/fddma/fddma_os.c b/drivers/dma/fddma/fddma_os.c
index a25648b5dbd59f5fd32a4329d33f3c0b44f0f44a..2f1ef000fc8df7084447499c2dde0ac1686662db 100644
--- a/drivers/dma/fddma/fddma_os.c
+++ b/drivers/dma/fddma/fddma_os.c
@@ -1,22 +1,22 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: fddma_os.c
* Date: 2022-07-18 08:51:25
* LastEditTime: 2022-07-18 08:51:25
- * Description: This files is for
- *
- * Modify History:
+ * Description: This file is for required function implementations of ddma driver used in FreeRTOS.
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
* 1.0 zhugengyu 2022/7/27 init commit
@@ -50,10 +50,10 @@ static FFreeRTOSDdma ddma[FDDMA_INSTANCE_NUM];
/************************** Function Prototypes ******************************/
static inline FError FDdmaOsTakeSema(SemaphoreHandle_t locker)
{
- FASSERT_MSG((NULL != locker), "locker not exists");
+ FASSERT_MSG((NULL != locker), "Locker not exists.");
if (pdFALSE == xSemaphoreTake(locker, portMAX_DELAY))
{
- FDDMA_ERROR("failed to give locker !!!");
+ FDDMA_ERROR("Failed to give locker!!!");
return FFREERTOS_DDMA_SEMA_ERR;
}
@@ -62,10 +62,10 @@ static inline FError FDdmaOsTakeSema(SemaphoreHandle_t locker)
static inline void FDdmaOsGiveSema(SemaphoreHandle_t locker)
{
- FASSERT_MSG((NULL != locker), "locker not exists");
+ FASSERT_MSG((NULL != locker), "Locker not exists.");
if (pdFALSE == xSemaphoreGive(locker))
{
- FDDMA_ERROR("failed to give locker !!!");
+ FDDMA_ERROR("Failed to give locker!!!");
}
return;
@@ -74,7 +74,7 @@ static inline void FDdmaOsGiveSema(SemaphoreHandle_t locker)
/*****************************************************************************/
static void FDdmaOsSetupInterrupt(FDdma *const instance)
{
- FASSERT(instance);
+ FASSERT(instance);
FDdmaConfig *config = &instance->config;
uintptr base_addr = config->base_addr;
u32 cpu_id = 0;
@@ -85,15 +85,15 @@ static void FDdmaOsSetupInterrupt(FDdma *const instance)
InterruptSetPriority(config->irq_num, config->irq_prority);
/* register intr callback */
- InterruptInstall(config->irq_num,
- FDdmaIrqHandler,
- instance,
+ InterruptInstall(config->irq_num,
+ FDdmaIrqHandler,
+ instance,
NULL);
/* enable ddma0 irq */
InterruptUmask(config->irq_num);
- FDDMA_INFO("ddma interrupt setup done !!!");
+ FDDMA_INFO("ddma interrupt setup done!!!");
return;
}
@@ -127,12 +127,12 @@ FFreeRTOSDdma *FFreeRTOSDdmaInit(u32 id, const FFreeRTOSDdmaConfig *input_config
err = FDdmaCfgInitialization(ctrl, &config);
if (FDDMA_SUCCESS != err)
{
- FDDMA_ERROR("init ddma-%d failed, err: 0x%x !!!", id, err);
+ FDDMA_ERROR("Init ddma-%d failed, err: 0x%x!!!", id, err);
goto err_exit;
}
- FASSERT_MSG(NULL == instance->locker, "locker exists !!!");
- FASSERT_MSG((instance->locker = xSemaphoreCreateMutex()) != NULL, "create mutex failed !!!");
+ FASSERT_MSG(NULL == instance->locker, "Locker exists!!!");
+ FASSERT_MSG((instance->locker = xSemaphoreCreateMutex()) != NULL, "Create mutex failed!!!");
FDdmaOsSetupInterrupt(ctrl);
@@ -156,14 +156,14 @@ FError FFreeRTOSDdmaDeinit(FFreeRTOSDdma *const instance)
if (FT_COMPONENT_IS_READY != ctrl->is_ready)
{
- FDDMA_ERROR("ddma-%d not yet init !!!", ctrl->config.id);
+ FDDMA_ERROR("ddma-%d not yet init!!!", ctrl->config.id);
return FFREERTOS_DDMA_NOT_INIT;
}
/* no scheduler during deinit */
- taskENTER_CRITICAL();
+ taskENTER_CRITICAL();
- FASSERT_MSG(NULL != instance->locker, "locker not exists !!!");
+ FASSERT_MSG(NULL != instance->locker, "Locker not exists!!!");
/* disable ddma irq */
FDdmaStop(ctrl);
@@ -199,31 +199,33 @@ FError FFreeRTOSDdmaSetupChannel(FFreeRTOSDdma *const instance, u32 chan_id, con
err = FDdmaOsTakeSema(instance->locker);
if (FFREERTOS_DDMA_OK != err)
+ {
return err;
+ }
/* parpare channel configs */
chan_config->id = chan_id;
chan_config->slave_id = request->slave_id;
- FASSERT_MSG((0 != request->mem_addr), "invaild memory address");
+ FASSERT_MSG((0 != request->mem_addr), "Invaild memory address.");
chan_config->ddr_addr = request->mem_addr;
chan_config->dev_addr = request->dev_addr;
chan_config->req_mode = request->is_rx ? FDDMA_CHAN_REQ_RX : FDDMA_CHAN_REQ_TX;
chan_config->timeout = 0xffff;
- chan_config->trans_len = request->trans_len;
+ chan_config->trans_len = request->trans_len;
FDDMA_INFO("channel: %d, slave id: %d, ddr: 0x%x, dev: 0x%x, req mode: %s, trans len: %d",
- chan_config->id,
- chan_config->slave_id,
- chan_config->ddr_addr,
- chan_config->dev_addr,
- (FDDMA_CHAN_REQ_TX == chan_config->req_mode) ? "mem=>dev" : "dev=>mem",
- chan_config->trans_len);
+ chan_config->id,
+ chan_config->slave_id,
+ chan_config->ddr_addr,
+ chan_config->dev_addr,
+ (FDDMA_CHAN_REQ_TX == chan_config->req_mode) ? "mem=>dev" : "dev=>mem",
+ chan_config->trans_len);
/* allocate channel */
err = FDdmaAllocateChan(ctrl, chan, chan_config);
if (FDDMA_SUCCESS != err)
{
- FDDMA_ERROR("channel bind failed: 0x%x", err);
+ FDDMA_ERROR("Channel bind failed: 0x%x", err);
goto err_exit;
}
@@ -252,25 +254,27 @@ FError FFreeRTOSDdmaRevokeChannel(FFreeRTOSDdma *const instance, u32 chan_id)
err = FDdmaOsTakeSema(instance->locker);
if (FFREERTOS_DDMA_OK != err)
+ {
return err;
+ }
err = FDdmaDeactiveChan(chan); /* deactive channel in use */
if (FDDMA_SUCCESS != err)
{
- FDDMA_ERROR("channel deactive failed: 0x%x", err);
+ FDDMA_ERROR("Channel deactive failed: 0x%x", err);
goto err_exit;
}
err = FDdmaDellocateChan(chan); /* free channel resource */
if (FDDMA_SUCCESS != err)
{
- FDDMA_ERROR("channel deallocate failed: 0x%x", err);
+ FDDMA_ERROR("Channel deallocate failed: 0x%x", err);
goto err_exit;
}
err_exit:
FDdmaOsGiveSema(instance->locker);
- return err;
+ return err;
}
/**
@@ -289,7 +293,9 @@ FError FFreeRTOSDdmaStartChannel(FFreeRTOSDdma *const instance, u32 chan_id)
err = FDdmaOsTakeSema(instance->locker);
if (FFREERTOS_DDMA_OK != err)
+ {
return err;
+ }
/* active all channel allocated */
chan = ctrl->chan[chan_id];
@@ -298,21 +304,21 @@ FError FFreeRTOSDdmaStartChannel(FFreeRTOSDdma *const instance, u32 chan_id)
err = FDdmaActiveChan(chan); /* active channel if in use */
if (FDDMA_SUCCESS != err)
{
- FDDMA_ERROR("channel start failed: 0x%x", err);
+ FDDMA_ERROR("Channel start failed: 0x%x", err);
goto err_exit;
- }
+ }
}
err = FDdmaStart(ctrl); /* start ddma controller */
if (FDDMA_SUCCESS != err)
{
- FDDMA_ERROR("start ddma failed: 0x%x", err);
+ FDDMA_ERROR("Start ddma failed: 0x%x", err);
goto err_exit;
- }
+ }
err_exit:
FDdmaOsGiveSema(instance->locker);
- return err;
+ return err;
}
FError FFreeRTOSDdmaStopChannel(FFreeRTOSDdma *const instance, u32 chan_id)
@@ -325,7 +331,9 @@ FError FFreeRTOSDdmaStopChannel(FFreeRTOSDdma *const instance, u32 chan_id)
err = FDdmaOsTakeSema(instance->locker);
if (FFREERTOS_DDMA_OK != err)
+ {
return err;
+ }
/* deactive all channel allocated */
chan = ctrl->chan[chan_id];
@@ -334,14 +342,14 @@ FError FFreeRTOSDdmaStopChannel(FFreeRTOSDdma *const instance, u32 chan_id)
err = FDdmaDeactiveChan(chan); /* deactive channel if in use */
if (FDDMA_SUCCESS != err)
{
- FDDMA_ERROR("channel start failed: 0x%x", err);
+ FDDMA_ERROR("Channel start failed: 0x%x", err);
goto err_exit;
- }
+ }
}
err_exit:
FDdmaOsGiveSema(instance->locker);
- return err;
+ return err;
}
/**
@@ -361,16 +369,18 @@ FError FFreeRTOSDdmaStop(FFreeRTOSDdma *const instance)
err = FDdmaOsTakeSema(instance->locker);
if (FFREERTOS_DDMA_OK != err)
+ {
return err;
+ }
err = FDdmaStop(ctrl); /* stop ddma controller */
if (FDDMA_SUCCESS != err)
{
- FDDMA_ERROR("stop ddma failed: 0x%x", err);
+ FDDMA_ERROR("Stop ddma failed: 0x%x", err);
goto err_exit;
}
err_exit:
FDdmaOsGiveSema(instance->locker);
- return err;
+ return err;
}
\ No newline at end of file
diff --git a/drivers/dma/fddma/fddma_os.h b/drivers/dma/fddma/fddma_os.h
index c6595646b1c00f5e1a0b775e2fc209d05c05e3bf..5334e86f95cc9bda4f35e95a58ab0c9bf22f1e2b 100644
--- a/drivers/dma/fddma/fddma_os.h
+++ b/drivers/dma/fddma/fddma_os.h
@@ -1,34 +1,29 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: fddma_os.h
* Date: 2022-07-20 09:15:37
* LastEditTime: 2022-07-20 09:15:38
- * Description: This files is for
- *
- * Modify History:
+ * Description: This files is for providing function related definitions of ddma driver used in FreeRTOS.
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
* 1.0 zhugengyu 2022/7/27 init commit
*/
-#ifndef DRIVERS_FDDMA_OS_H
-#define DRIVERS_FDDMA_OS_H
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
+#ifndef FDDMA_OS_H
+#define FDDMA_OS_H
/***************************** Include Files *********************************/
#include
#include
@@ -36,8 +31,12 @@ extern "C"
#include "fparameters.h"
#include "fddma.h"
-
/************************** Constant Definitions *****************************/
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
#define FFREERTOS_DDMA_OK FT_SUCCESS
#define FFREERTOS_DDMA_NOT_INIT FT_CODE_ERR(ErrModPort, ErrDdma, 0)
#define FFREERTOS_DDMA_SEMA_ERR FT_CODE_ERR(ErrModPort, ErrDdma, 1)
@@ -50,7 +49,7 @@ extern "C"
typedef struct
{
-
+
} FFreeRTOSDdmaConfig; /* freertos ddma config, reserved for future use */
typedef struct
diff --git a/drivers/dma/fgdma/fgdma_os.c b/drivers/dma/fgdma/fgdma_os.c
index 99c2f92ed263c4b45267f869d2d92b2c80d01d1f..8a14cbf38378db53e89c40e712435ad4bbf15f1f 100644
--- a/drivers/dma/fgdma/fgdma_os.c
+++ b/drivers/dma/fgdma/fgdma_os.c
@@ -1,22 +1,22 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: fgdma_os.c
* Date: 2022-07-20 10:54:31
* LastEditTime: 2022-07-20 10:54:31
- * Description: This files is for
- *
- * Modify History:
+ * Description: This file is for required function implementations of gdma driver used in FreeRTOS.
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
* 1.0 zhugengyu 2022/7/27 init commit
@@ -56,10 +56,10 @@ static FFreeRTOSGdma gdma[FGDMA_INSTANCE_NUM];
/*****************************************************************************/
static inline FError FGdmaOsTakeSema(SemaphoreHandle_t locker)
{
- FASSERT_MSG((NULL != locker), "locker not exists");
+ FASSERT_MSG((NULL != locker), "Locker not exists.");
if (pdFALSE == xSemaphoreTake(locker, portMAX_DELAY))
{
- FGDMA_ERROR("failed to take locker !!!");
+ FGDMA_ERROR("Failed to take locker!!!");
return FFREERTOS_GDMA_SEMA_ERR;
}
@@ -68,10 +68,10 @@ static inline FError FGdmaOsTakeSema(SemaphoreHandle_t locker)
static inline void FGdmaOsGiveSema(SemaphoreHandle_t locker)
{
- FASSERT_MSG((NULL != locker), "locker not exists");
+ FASSERT_MSG((NULL != locker), "Locker not exists.");
if (pdFALSE == xSemaphoreGive(locker))
{
- FGDMA_ERROR("failed to give locker !!!");
+ FGDMA_ERROR("Failed to give locker!!!");
}
return;
@@ -79,7 +79,7 @@ static inline void FGdmaOsGiveSema(SemaphoreHandle_t locker)
static void FGdmaOsSetupInterrupt(FGdma *const ctrl)
{
- FASSERT(ctrl);
+ FASSERT(ctrl);
FGdmaConfig *config = &ctrl->config;
uintptr base_addr = config->base_addr;
u32 cpu_id = 0;
@@ -92,21 +92,21 @@ static void FGdmaOsSetupInterrupt(FGdma *const ctrl)
InterruptSetPriority(config->irq_num, config->irq_prority);
/* register intr callback */
- InterruptInstall(config->irq_num,
- FGdmaIrqHandler,
- ctrl,
+ InterruptInstall(config->irq_num,
+ FGdmaIrqHandler,
+ ctrl,
NULL);
/* enable gdma irq */
InterruptUmask(config->irq_num);
- FGDMA_INFO("gdma interrupt setup done !!!");
- return;
+ FGDMA_INFO("gdma interrupt setup done!!!");
+ return;
}
FFreeRTOSGdma *FFreeRTOSGdmaInit(u32 id)
{
- FASSERT_MSG(id < FGDMA_INSTANCE_NUM, "invalid gdma id");
+ FASSERT_MSG(id < FGDMA_INSTANCE_NUM, "Invalid gdma id.");
FFreeRTOSGdma *instance = &gdma[id];
FGdma *const ctrl = &instance->ctrl;
FGdmaConfig config;
@@ -117,40 +117,40 @@ FFreeRTOSGdma *FFreeRTOSGdmaInit(u32 id)
if (FT_COMPONENT_IS_READY == ctrl->is_ready)
{
- FGDMA_WARN("gdma ctrl %d already inited !!!", id);
+ FGDMA_WARN("gdma ctrl %d already inited!!!", id);
return instance;
}
/* no scheduler during init */
- taskENTER_CRITICAL();
+ taskENTER_CRITICAL();
config = *FGdmaLookupConfig(id);
config.irq_prority = FFREERTOS_GDMA_IRQ_PRIORITY;
err = FGdmaCfgInitialize(ctrl, &config);
if (FGDMA_SUCCESS != err)
- {
- FGDMA_ERROR("init gdma-%d failed, 0x%x", id, err);
+ {
+ FGDMA_ERROR("Init gdma-%d failed, 0x%x", id, err);
goto err_exit;
}
FGdmaOsSetupInterrupt(ctrl);
-
+
err = FMempInit(memp, memp_buf_beg, memp_buf_end);
- if (FMEMP_SUCCESS != err)
- {
- FGDMA_ERROR("init memp failed, 0x%x", err);
+ if (FMEMP_SUCCESS != err)
+ {
+ FGDMA_ERROR("Init memp failed, 0x%x", err);
goto err_exit;
- }
+ }
- FASSERT_MSG(NULL == instance->locker, "locker exists !!!");
- FASSERT_MSG((instance->locker = xSemaphoreCreateMutex()) != NULL, "create mutex failed !!!");
+ FASSERT_MSG(NULL == instance->locker, "Locker exists!!!");
+ FASSERT_MSG((instance->locker = xSemaphoreCreateMutex()) != NULL, "Create mutex failed!!!");
/* start gdma first, then config gdma channel */
- err = FGdmaStart(ctrl);
+ err = FGdmaStart(ctrl);
err_exit:
taskEXIT_CRITICAL(); /* allow schedule after init */
- return (FT_SUCCESS == err) ? instance : NULL; /* exit with NULL if failed */
+ return (FT_SUCCESS == err) ? instance : NULL; /* exit with NULL if failed */
}
FError FFreeRTOSGdmaDeInit(FFreeRTOSGdma *const instance)
@@ -163,7 +163,7 @@ FError FFreeRTOSGdmaDeInit(FFreeRTOSGdma *const instance)
if (FT_COMPONENT_IS_READY != ctrl->is_ready)
{
- FGDMA_ERROR("gdma ctrl %d not yet init !!!", ctrl->config.instance_id);
+ FGDMA_ERROR("Gdma ctrl %d not yet init!!!", ctrl->config.instance_id);
return FFREERTOS_GDMA_NOT_INIT;
}
@@ -171,13 +171,13 @@ FError FFreeRTOSGdmaDeInit(FFreeRTOSGdma *const instance)
err = FGdmaStop(ctrl);
FMempDeinit(memp);
- FGdmaDeInitialize(ctrl);
+ FGdmaDeInitialize(ctrl);
- vSemaphoreDelete(instance->locker);
+ vSemaphoreDelete(instance->locker);
instance->locker = NULL;
taskEXIT_CRITICAL(); /* allow schedule after deinit */
- return err;
+ return err;
}
FError FFreeRTOSGdmaSetupChannel(FFreeRTOSGdma *const instance, u32 chan_id, const FFreeRTOSGdmaRequest *req)
@@ -193,14 +193,16 @@ FError FFreeRTOSGdmaSetupChannel(FFreeRTOSGdma *const instance, u32 chan_id, con
err = FGdmaOsTakeSema(instance->locker);
if (FFREERTOS_GDMA_OK != err)
+ {
return err;
+ }
chan_os->bdl_list = FMempMallocAlign(memp, sizeof(FGdmaBdlDesc) * req->valid_trans_num, FGDMA_ADDR_ALIGMENT);
if (NULL == chan_os->bdl_list)
{
- FGDMA_ERROR("allocate buffer failed !!!");
+ FGDMA_ERROR("Allocate buffer failed!!!");
err = FFREERTOS_GDMA_ALLOCATE_FAIL;
- goto err_exit;
+ goto err_exit;
}
chan_config = &chan_os->chan.config;
@@ -208,7 +210,7 @@ FError FFreeRTOSGdmaSetupChannel(FFreeRTOSGdma *const instance, u32 chan_id, con
err = FGdmaAllocateChan(ctrl, &chan_os->chan, chan_config);
if (FGDMA_SUCCESS != err)
{
- FGDMA_ERROR("allocate chan failed !!!");
+ FGDMA_ERROR("Allocate chan failed!!!");
goto err_exit;
}
@@ -223,18 +225,18 @@ FError FFreeRTOSGdmaSetupChannel(FFreeRTOSGdma *const instance, u32 chan_id, con
trans = &req->trans[buf_idx];
/* append bdl entry */
- err = FGdmaAppendBDLEntry(&chan_os->chan, (uintptr)trans->src_buf,
- (uintptr)trans->dst_buf, trans->data_len);
+ err = FGdmaAppendBDLEntry(&chan_os->chan, (uintptr)trans->src_buf,
+ (uintptr)trans->dst_buf, trans->data_len);
if (FGDMA_SUCCESS != err)
{
- FGDMA_ERROR("setup bdl entry failed !!!");
+ FGDMA_ERROR("Setup bdl entry failed!!!");
goto err_exit;
- }
+ }
}
err_exit:
FGdmaOsGiveSema(instance->locker);
- return err;
+ return err;
}
FError FFreeRTOSGdmaRevokeChannel(FFreeRTOSGdma *const instance, u32 chan_id)
@@ -248,25 +250,27 @@ FError FFreeRTOSGdmaRevokeChannel(FFreeRTOSGdma *const instance, u32 chan_id)
err = FGdmaOsTakeSema(instance->locker);
if (FFREERTOS_GDMA_OK != err)
+ {
return err;
+ }
/* free dynamic memroy allocated for bdl */
if (chan_os->bdl_list)
{
FMempFree(memp, chan_os->bdl_list);
chan_os->bdl_list = NULL;
- }
+ }
/* deallocate channel */
err = FGdmaDellocateChan(&chan_os->chan);
if (FGDMA_SUCCESS != err)
{
- FGDMA_ERROR("dellocate chan %d failed", chan_id);
+ FGDMA_ERROR("Dellocate chan %d failed.", chan_id);
}
err_exit:
FGdmaOsGiveSema(instance->locker);
- return err;
+ return err;
}
FError FFreeRTOSGdmaStart(FFreeRTOSGdma *const instance, u32 chan_id)
@@ -278,15 +282,17 @@ FError FFreeRTOSGdmaStart(FFreeRTOSGdma *const instance, u32 chan_id)
err = FGdmaOsTakeSema(instance->locker);
if (FFREERTOS_GDMA_OK != err)
+ {
return err;
-
+ }
+
err = FGdmaBDLTransfer(&chan_os->chan); /* start transfer of each channel */
if (FGDMA_SUCCESS != err)
{
goto err_exit;
- }
+ }
- /* you may wait memcpy end in other task */
+ /* you may wait memcpy end in other task */
err_exit:
FGdmaOsGiveSema(instance->locker);
diff --git a/drivers/dma/fgdma/fgdma_os.h b/drivers/dma/fgdma/fgdma_os.h
index ad8a246b69b85378cfcf54093d6306a2f78808fd..cd5e7b3931510ed3327f0b14b9101b1140f3ef2a 100644
--- a/drivers/dma/fgdma/fgdma_os.h
+++ b/drivers/dma/fgdma/fgdma_os.h
@@ -1,34 +1,28 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: fgdma_os.h
* Date: 2022-07-20 10:54:37
* LastEditTime: 2022-07-20 10:54:37
- * Description: This files is for
- *
- * Modify History:
+ * Description: This file is for providing function related definitions of gdma driver used in FreeRTOS.
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
* 1.0 zhugengyu 2022/7/27 init commit
*/
-#ifndef DRIVERS_FGDMA_OS_H
-#define DRIVERS_FGDMA_OS_H
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
+#ifndef FGDMA_OS_H
+#define FGDMA_OS_H
/***************************** Include Files *********************************/
#include
#include
@@ -38,6 +32,11 @@ extern "C"
#include "fgdma.h"
#include "fmemory_pool.h"
/************************** Constant Definitions *****************************/
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
#define FFREERTOS_GDMA_OK FT_SUCCESS
#define FFREERTOS_GDMA_NOT_INIT FT_CODE_ERR(ErrModPort, ErrGdma, 0)
#define FFREERTOS_GDMA_SEMA_ERR FT_CODE_ERR(ErrModPort, ErrGdma, 1)
@@ -51,7 +50,7 @@ extern "C"
typedef struct
{
FGdmaChan chan;
- FGdmaBdlDesc *bdl_list; /* descriptor of every chan, dynamic allocated */
+ FGdmaBdlDesc *bdl_list; /* descriptor of every chan, dynamic allocated */
} FFreeRTOSGdmaChan; /* instance of gdma channel in FreeRTOS */
typedef struct
diff --git a/drivers/drivers.mk b/drivers/drivers.mk
index b169cfe0a90b548d111dae666db2e2fe36ee74db..d5080f21979dafc78b1cfd53f34fcd3eed02f539 100644
--- a/drivers/drivers.mk
+++ b/drivers/drivers.mk
@@ -25,6 +25,26 @@ ifdef CONFIG_FREERTOS_USE_XMAC
INC_DIR += $(OS_DRIVER_CUR_DIR)/eth/xmac
endif
+ifdef CONFIG_FREERTOS_USE_GMAC
+ SRC_DIR += $(OS_DRIVER_CUR_DIR)/eth/gmac
+ INC_DIR += $(OS_DRIVER_CUR_DIR)/eth/gmac
+endif
+
+ifdef CONFIG_FREERTOS_USE_I2C
+ SRC_DIR += $(OS_DRIVER_CUR_DIR)/i2c
+ INC_DIR += $(OS_DRIVER_CUR_DIR)/i2c
+endif
+
+ifdef CONFIG_FREERTOS_USE_MIO
+ SRC_DIR += $(OS_DRIVER_CUR_DIR)/mio
+ INC_DIR += $(OS_DRIVER_CUR_DIR)/mio
+endif
+
+ifdef CONFIG_FREERTOS_USE_TIMER
+ SRC_DIR += $(OS_DRIVER_CUR_DIR)/timer
+ INC_DIR += $(OS_DRIVER_CUR_DIR)/timer
+endif
+
ifdef CONFIG_FREERTOS_USE_GPIO
SRC_DIR += $(OS_DRIVER_CUR_DIR)/gpio/fgpio
INC_DIR += $(OS_DRIVER_CUR_DIR)/gpio/fgpio
diff --git a/drivers/eth/gmac/fgmac_os.c b/drivers/eth/gmac/fgmac_os.c
new file mode 100644
index 0000000000000000000000000000000000000000..baa24fa4b847382b8284d035967fc786e48b0fc5
--- /dev/null
+++ b/drivers/eth/gmac/fgmac_os.c
@@ -0,0 +1,641 @@
+/*
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * All Rights Reserved.
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the Phytium Public License for more details.
+ *
+ *
+ * FilePath: fgmac_os.c
+ * Date: 2022-02-24 13:42:19
+ * LastEditTime: 2022-03-25 09:16:57
+ * Description: This file is for gmac driver.Functions in this file are the minimum required functions for drivers.
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 huanghe 2022/11/15 first release
+ */
+
+
+#include
+#include
+#include
+#include
+#include
+#include "fgmac_os.h"
+#include "fgmac_os.h"
+#include "fassert.h"
+#include "fio.h"
+#include "fassert.h"
+#include "finterrupt.h"
+#include "list.h"
+#include "fcpu_info.h"
+#include "sys_arch.h"
+#include "fdebug.h"
+#include "lwip_port.h"
+#include "fparameters.h"
+
+#define OS_MAC_DEBUG_TAG "OS_MAC"
+#define OS_MAC_DEBUG_D(format, ...) FT_DEBUG_PRINT_D(OS_MAC_DEBUG_TAG, format, ##__VA_ARGS__)
+#define OS_MAC_DEBUG_I(format, ...) FT_DEBUG_PRINT_I(OS_MAC_DEBUG_TAG, format, ##__VA_ARGS__)
+#define OS_MAC_DEBUG_E(format, ...) FT_DEBUG_PRINT_E(OS_MAC_DEBUG_TAG, format, ##__VA_ARGS__)
+#define OS_MAC_DEBUG_W(format, ...) FT_DEBUG_PRINT_W(OS_MAC_DEBUG_TAG, format, ##__VA_ARGS__)
+
+extern void sys_sem_signal(sys_sem_t *sem);
+static FGmacOs fgmac_os_instace[FGMAC_NUM] = {0};
+
+static void EthLinkPhyStatusChecker(void *param)
+{
+ FASSERT(param != NULL);
+ FGmac *instance_p = (FGmac *)param;
+ uintptr base_addr = instance_p->config.base_addr;
+
+ u32 status = FGMAC_READ_REG32(base_addr, FGMAC_MAC_PHY_STATUS);
+
+ if (FGMAC_RGSMIIIS_LNKSTS_UP == (FGMAC_RGSMIIIS_LNKSTS & status))
+ {
+ FGmacPhyCfgInitialize(instance_p);
+ OS_MAC_DEBUG_I("Link is up.");
+ }
+ else
+ {
+ OS_MAC_DEBUG_I("Link is down.");
+ }
+
+ return;
+}
+
+static void EthLinkDmaErrChecker(void *param)
+{
+ FASSERT(param != NULL);
+ FGmac *instance_p = (FGmac *)param;
+ uintptr base_addr = instance_p->config.base_addr;
+
+ u32 reg_val = FGMAC_READ_REG32(base_addr, FGMAC_DMA_INTR_OFFSET);
+ u32 status = FGMAC_READ_REG32(base_addr, FGMAC_DMA_STATUS_OFFSET);
+
+ if ((FGMAC_DMA_STATUS_TPS & status) && (FGMAC_DMA_INTR_ENA_TSE & reg_val))
+ {
+ OS_MAC_DEBUG_E("Transmit process stopped.");
+ }
+
+ if ((FGMAC_DMA_STATUS_TU & status) && (FGMAC_DMA_INTR_ENA_TUE & reg_val))
+ {
+ OS_MAC_DEBUG_E("Transmit buffer unavailable.");
+ }
+
+ if ((FGMAC_DMA_STATUS_TJT & status) && (FGMAC_DMA_INTR_ENA_THE & reg_val))
+ {
+ OS_MAC_DEBUG_E("Transmit jabber timeout.");
+ }
+
+ if ((FGMAC_DMA_STATUS_OVF & status) && (FGMAC_DMA_INTR_ENA_OVE & reg_val))
+ {
+ OS_MAC_DEBUG_E("Receive overflow.");
+ }
+
+ if ((FGMAC_DMA_STATUS_UNF & status) && (FGMAC_DMA_INTR_ENA_UNE & reg_val))
+ {
+ OS_MAC_DEBUG_E("Transmit underflow.");
+ }
+
+ if ((FGMAC_DMA_STATUS_RU & status) && (FGMAC_DMA_INTR_ENA_RUE & reg_val))
+ {
+ OS_MAC_DEBUG_E("Receive buffer unavailable.");
+ }
+
+ if ((FGMAC_DMA_STATUS_RPS & status) && (FGMAC_DMA_INTR_ENA_RSE & reg_val))
+ {
+ OS_MAC_DEBUG_E("Receive process stopped.");
+ }
+
+ if ((FGMAC_DMA_STATUS_RWT & status) && (FGMAC_DMA_INTR_ENA_RWE & reg_val))
+ {
+ OS_MAC_DEBUG_E("Receive watchdog timeout.");
+ }
+
+ if ((FGMAC_DMA_STATUS_ETI & status) && (FGMAC_DMA_INTR_ENA_ETE & reg_val))
+ {
+ OS_MAC_DEBUG_E("Early transmit interrupt.");
+ }
+
+ if ((FGMAC_DMA_STATUS_FBI & status) && (FGMAC_DMA_INTR_ENA_FBE & reg_val))
+ {
+ OS_MAC_DEBUG_E("Fatal bus error.");
+ }
+
+ return;
+}
+
+static void EthLinkStatusChecker(void *param)
+{
+ FASSERT(param);
+ FGmac *instance_p = (FGmac *)param;
+ uintptr base_addr = instance_p->config.base_addr;
+ u32 status = FGMAC_READ_REG32(base_addr, FGMAC_MAC_PHY_STATUS);
+ u32 speed_status, duplex_status;
+ u32 speed, duplex;
+
+ /* Check the link status */
+ if (FGMAC_RGSMIIIS_LNKSTS_UP == (FGMAC_RGSMIIIS_LNKSTS & status))
+ {
+ speed_status = FGMAC_RGSMIIIS_SPEED & status;
+ duplex_status = FGMAC_RGSMIIIS_LNKMODE & status;
+
+ if (FGMAC_RGSMIIIS_SPEED_125MHZ == speed_status)
+ {
+ speed = FGMAC_PHY_SPEED_1000;
+ }
+ else if (FGMAC_RGSMIIIS_SPEED_25MHZ == speed_status)
+ {
+ speed = FGMAC_PHY_SPEED_100;
+ }
+ else
+ {
+ speed = FGMAC_PHY_SPEED_10;
+ }
+
+ if (FGMAC_RGSMIIIS_LNKMODE_HALF == duplex_status)
+ {
+ duplex = FGMAC_PHY_MODE_HALFDUPLEX;
+ }
+ else
+ {
+ duplex = FGMAC_PHY_MODE_FULLDUPLEX;
+ }
+
+ OS_MAC_DEBUG_I("Link is up --- %d/%s",
+ speed, (FGMAC_PHY_MODE_FULLDUPLEX == duplex) ? "full" : "half");
+ }
+ else
+ {
+ OS_MAC_DEBUG_I("Link is down ---");
+ }
+}
+
+static void EthLinkTransDoneCallback(void *param)
+{
+ FASSERT(param);
+ FGmac *instance_p = (FGmac *)param;
+
+ FGmacResumeDmaSend(instance_p->config.base_addr);
+ OS_MAC_DEBUG_I("Resume trans.");
+ return;
+}
+
+static void GmacReceiveCallBack(void *args)
+{
+ LWIP_ASSERT("args != NULL", (args != NULL));
+ struct LwipPort *gmac_netif_p;
+ FGmacOs *instance_p = (FGmacOs *)args;
+ gmac_netif_p = (struct LwipPort *)instance_p->stack_pointer;
+ sys_sem_signal(&gmac_netif_p->sem_rx_data_available);
+}
+
+
+static int FGmacSetupIsr(FGmac *gmac_p)
+{
+ LWIP_ASSERT("gmac_p != NULL", (gmac_p != NULL));
+ FGmacConfig *config_p = &gmac_p->config;
+ u32 irq_num = config_p->irq_num;
+ u32 cpu_id;
+
+ u32 irq_priority = IRQ_PRIORITY_VALUE_12 ;
+
+ /* gic initialize */
+ GetCpuId(&cpu_id);
+ InterruptSetTargetCpus(irq_num, cpu_id);
+
+ /* disable all gmac & dma intr */
+ FGmacSetInterruptMask(gmac_p, FGMAC_CTRL_INTR, FGMAC_ISR_MASK_ALL_BITS);
+ FGmacSetInterruptMask(gmac_p, FGMAC_DMA_INTR, FGMAC_DMA_INTR_ENA_ALL_MASK);
+
+ InterruptSetPriority(irq_num, irq_priority);
+ InterruptInstall(irq_num, FGmacInterruptHandler, gmac_p, "GMAC-IRQ");
+
+ /* register intr callback */
+ FGmacRegisterEvtHandler(gmac_p, FGMAC_PHY_STATUS_EVT, EthLinkPhyStatusChecker);
+ FGmacRegisterEvtHandler(gmac_p, FGMAC_DMA_ERR_EVT, EthLinkDmaErrChecker);
+ FGmacRegisterEvtHandler(gmac_p, FGMAC_LINK_STATUS_EVT, EthLinkStatusChecker);
+ FGmacRegisterEvtHandler(gmac_p, FGMAC_TX_COMPLETE_EVT, EthLinkTransDoneCallback);
+ /* Set Receive Callback */
+ FGmacRegisterEvtHandler(gmac_p, FGMAC_RX_COMPLETE_EVT, GmacReceiveCallBack);
+
+
+ /* enable some interrupts */
+ FGmacSetInterruptUmask(gmac_p, FGMAC_CTRL_INTR, FGMAC_ISR_MASK_RSIM);
+ FGmacSetInterruptUmask(gmac_p, FGMAC_DMA_INTR,
+ FGMAC_DMA_INTR_ENA_NIE | FGMAC_DMA_INTR_ENA_RIE | FGMAC_DMA_INTR_ENA_AIE);
+
+ /* umask intr */
+ InterruptUmask(irq_num);
+
+ OS_MAC_DEBUG_I("Gmac interrupt setup done.");
+ return 0;
+}
+
+/* step 1: initialize instance */
+/* step 2: depend on config set some options : JUMBO / IGMP */
+/* step 3: FGmacSelectClk */
+/* step 4: FGmacInitInterface */
+/* step 5: initialize phy */
+/* step 6: initialize dma */
+/* step 7: initialize interrupt */
+/* step 8: start mac */
+
+/* step1 :get driver config */
+/* step2 :depend on config set some options :phy */
+/* step3 :FGmacCfgInitialize*/
+/* step4 :initialize dma */
+/* step5 :initialize interrupt */
+/* step6 :start mac */
+FError FGmacOsInit(FGmacOs *instance_p)
+{
+ FGmacConfig mac_config;
+ const FGmacConfig *mac_config_p;
+ FGmac *gmac_p ;
+ FError status;
+
+ gmac_p = &instance_p->instance;
+ OS_MAC_DEBUG_I("instance_id IS %d", instance_p->mac_config.instance_id);
+ mac_config_p = FGmacLookupConfig(instance_p->mac_config.instance_id);
+ if (mac_config_p == NULL)
+ {
+ OS_MAC_DEBUG_E("FGmacLookupConfig is error , instance_id is %d", instance_p->mac_config.instance_id);
+ return FREERTOS_GMAC_INIT_ERROR;
+ }
+ mac_config = *mac_config_p;
+
+ if (instance_p->mac_config.autonegotiation)
+ {
+ mac_config.en_auto_negtiation = 1;
+ }
+ else
+ {
+ mac_config.en_auto_negtiation = 0;
+ }
+
+ switch (instance_p->mac_config.phy_speed)
+ {
+ case FGMAC_PHY_SPEED_10M:
+ mac_config.speed = 10;
+ break;
+ case FGMAC_PHY_SPEED_100M:
+ mac_config.speed = 100;
+ break;
+ case FGMAC_PHY_SPEED_1000M:
+ mac_config.speed = 1000;
+ break;
+ default:
+ OS_MAC_DEBUG_E("Setting speed is not valid , speed is %d", instance_p->mac_config.phy_speed);
+ return FREERTOS_GMAC_INIT_ERROR;
+ }
+
+ switch (instance_p->mac_config.phy_duplex)
+ {
+ case FGMAC_PHY_HALF_DUPLEX:
+ mac_config.duplex_mode = 0 ;
+ break;
+ case FGMAC_PHY_FULL_DUPLEX:
+ mac_config.duplex_mode = 1 ;
+ break;
+ }
+
+ status = FGmacCfgInitialize(gmac_p, &mac_config);
+ if (status != FGMAC_SUCCESS)
+ {
+ OS_MAC_DEBUG_W("In %s:EmacPs Configuration Failed....", __func__);
+ }
+
+ FGmacSetMacAddr(instance_p->instance.config.base_addr, (void *)(instance_p->hwaddr));
+
+ /* initialize phy */
+ status = FGmacPhyCfgInitialize(gmac_p);
+ if (status != FGMAC_SUCCESS)
+ {
+ OS_MAC_DEBUG_W("FGmacPhyCfgInitialize: init phy failed.");
+ }
+
+ /* Initialize Rx Description list : ring Mode */
+ status = FGmacSetupRxDescRing(gmac_p, (FGmacDmaDesc *)(instance_p->rx_desc), instance_p->rx_buf, FGMAC_MAX_PACKET_SIZE, GMAC_RX_DESCNUM);
+ if (FT_SUCCESS != status)
+ {
+ OS_MAC_DEBUG_E("Gmac setup rx return err code %d", status);
+ FASSERT(FT_SUCCESS == status);
+ }
+
+ /* Initialize Tx Description list : ring Mode */
+ status = FGmacSetupTxDescRing(gmac_p, (FGmacDmaDesc *)(instance_p->tx_desc), instance_p->tx_buf, FGMAC_MAX_PACKET_SIZE, GMAC_TX_DESCNUM);
+ if (FT_SUCCESS != status)
+ {
+ OS_MAC_DEBUG_E("Gmac setup tx return err code %d", status);
+ FASSERT(FT_SUCCESS == status);
+ }
+
+ /* initialize interrupt */
+ FGmacSetupIsr(gmac_p);
+
+
+
+ return FT_SUCCESS ;
+}
+
+
+FGmacOs *FGmacOsGetInstancePointer(FtOsGmacPhyControl *config_p)
+{
+ FGmacOs *instance_p;
+ FASSERT(config_p != NULL);
+ FASSERT(config_p->instance_id < FGMAC_NUM);
+ FASSERT_MSG(config_p->autonegotiation <= 1, "config_p->autonegotiation %d is over 1", config_p->autonegotiation);
+ FASSERT_MSG(config_p->phy_speed <= FGMAC_PHY_SPEED_1000M, "config_p->phy_speed %d is over 1000", config_p->phy_speed);
+ FASSERT_MSG(config_p->phy_duplex <= FGMAC_PHY_FULL_DUPLEX, "config_p->phy_duplex %d is over FGMAC_PHY_FULL_DUPLEX", config_p->phy_duplex);
+
+ instance_p = &fgmac_os_instace[config_p->instance_id];
+ memcpy(&instance_p->mac_config, config_p, sizeof(FtOsGmacPhyControl));
+ return instance_p;
+}
+
+
+
+FError FGmacOsConfig(FGmacOs *instance_p, int cmd, void *arg)
+{
+ return FT_SUCCESS;
+}
+
+
+void *FGmacOsRx(FGmacOs *instance_p)
+{
+ struct pbuf *p = NULL;
+ struct pbuf *q = NULL;
+ u16 length = 0;
+ u8 *buffer;
+ volatile FGmacDmaDesc *dma_rx_desc;
+ u32 buffer_offset = 0;
+ u32 pay_load_offset = 0;
+ u32 bytes_left_to_copy = 0;
+
+ u32 desc_buffer_index; /* For Current Desc buffer buf position */
+ FGmacOs *os_gmac;
+ FGmac *gmac_p;
+
+ gmac_p = &instance_p->instance;
+
+ /* get received frame */
+ if (FGmacRecvFrame(gmac_p) != FT_SUCCESS)
+ {
+ return NULL;
+ }
+
+ desc_buffer_index = gmac_p->rx_ring.desc_buf_idx;
+ length = (gmac_p->rx_desc[desc_buffer_index].status & FGMAC_DMA_RDES0_FRAME_LEN_MASK) >> FGMAC_DMA_RDES0_FRAME_LEN_SHIFT;
+ buffer = (u8 *)(intptr)(gmac_p->rx_desc[desc_buffer_index].buf_addr);
+
+#if ETH_PAD_SIZE
+ length += ETH_PAD_SIZE; /* allow room for Ethernet padding */
+#endif
+
+ if (length > 0)
+ {
+ /* We allocate a pbuf chain of pbufs from the Lwip buffer pool */
+ p = pbuf_alloc(PBUF_RAW, length, PBUF_POOL);
+ }
+
+#ifdef RAW_DATA_PRINT
+ dump_hex(Buffer, (u32)length);
+#endif
+ if (p != NULL)
+ {
+#if ETH_PAD_SIZE
+ pbuf_header(p, -ETH_PAD_SIZE); /* drop the padding word */
+#endif
+ dma_rx_desc = &gmac_p->rx_desc[desc_buffer_index];
+ buffer_offset = 0;
+ for (q = p; q != NULL; q = q->next)
+ {
+ bytes_left_to_copy = q->len;
+ pay_load_offset = 0;
+ /* Check if the length of bytes to copy in current pbuf is bigger than Rx buffer size*/
+ while ((bytes_left_to_copy + buffer_offset) > FGMAC_MAX_PACKET_SIZE)
+ {
+ /* Copy data to pbuf */
+ memcpy((u8 *)((u8 *)q->payload + pay_load_offset), (u8 *)((u8 *)buffer + buffer_offset), (FGMAC_MAX_PACKET_SIZE - buffer_offset));
+
+ /* Point to next descriptor */
+ FGMAC_DMA_INC_DESC(desc_buffer_index, gmac_p->rx_ring.desc_max_num);
+ if (desc_buffer_index == gmac_p->rx_ring.desc_idx)
+ {
+ break;
+ }
+
+ dma_rx_desc = &gmac_p->rx_desc[desc_buffer_index];
+ buffer = (u8 *)(intptr)(dma_rx_desc->buf_addr);
+
+ bytes_left_to_copy = bytes_left_to_copy - (FGMAC_MAX_PACKET_SIZE - buffer_offset);
+ pay_load_offset = pay_load_offset + (FGMAC_MAX_PACKET_SIZE - buffer_offset);
+ buffer_offset = 0;
+ }
+ /* Copy remaining data in pbuf */
+ memcpy((u8 *)((u8 *)q->payload + pay_load_offset), (u8 *)((u8 *)buffer + buffer_offset), bytes_left_to_copy);
+ buffer_offset = buffer_offset + bytes_left_to_copy;
+ }
+
+#if ETH_PAD_SIZE
+ pbuf_header(p, ETH_PAD_SIZE); /* reclaim the padding word */
+#endif
+ }
+ else
+ {
+ OS_MAC_DEBUG_E("Error malloc is %d", length);
+ }
+
+ /* Release descriptors to DMA */
+ /* Point to first descriptor */
+ dma_rx_desc = &gmac_p->rx_desc[desc_buffer_index];
+ /* Set Own bit in Rx descriptors: gives the buffers back to DMA */
+ for (desc_buffer_index = gmac_p->rx_ring.desc_buf_idx; desc_buffer_index != gmac_p->rx_ring.desc_idx; FGMAC_DMA_INC_DESC(desc_buffer_index, gmac_p->rx_ring.desc_max_num))
+ {
+ dma_rx_desc->status |= FGMAC_DMA_RDES0_OWN;
+ dma_rx_desc = &gmac_p->rx_desc[desc_buffer_index];
+ }
+
+ /* Sync index */
+ gmac_p->rx_ring.desc_buf_idx = gmac_p->rx_ring.desc_idx;
+
+ FGmacResumeDmaRecv(gmac_p->config.base_addr);
+
+ return p;
+
+}
+
+FError FGmacOsTx(FGmacOs *instance_p, void *tx_buf)
+{
+ FASSERT(instance_p != NULL);
+ FASSERT(tx_buf != NULL);
+ err_t errval = ERR_OK;
+ struct pbuf *q;
+ struct pbuf *p = tx_buf;
+ FError ret;
+ u8 *buffer = NULL;
+ volatile FGmacDmaDesc *dma_tx_desc;
+ u32 frame_length = 0;
+ u32 buffer_offset = 0;
+ u32 bytes_left_to_copy = 0;
+ u32 pay_load_offset = 0;
+ FGmac *gmac_p;
+
+ gmac_p = &instance_p->instance;
+ dma_tx_desc = &gmac_p->tx_desc[gmac_p->tx_ring.desc_buf_idx];
+ buffer = (u8 *)(intptr)(dma_tx_desc->buf_addr);
+
+ if (buffer == NULL)
+ {
+ OS_MAC_DEBUG_I("Error buffer is 0.");
+ return ERR_VAL;
+ }
+
+#if ETH_PAD_SIZE
+ pbuf_header(p, -ETH_PAD_SIZE); /* drop the padding word */
+#endif
+
+ for (q = p; q != NULL; q = q->next)
+ {
+ /* Is this buffer available? If not, goto error */
+ if ((dma_tx_desc->status & FGMAC_DMA_TDES0_OWN) != 0)
+ {
+ errval = ERR_USE;
+ OS_MAC_DEBUG_I("Error errval = ERR_USE;");
+ goto error;
+ }
+
+ /* Get bytes in current lwIP buffer */
+ bytes_left_to_copy = q->len;
+ pay_load_offset = 0;
+
+ /* Check if the length of data to copy is bigger than Tx buffer size*/
+ while ((bytes_left_to_copy + buffer_offset) > FGMAC_MAX_PACKET_SIZE)
+ {
+ /* Copy data to Tx buffer*/
+ memcpy((u8 *)((u8 *)buffer + buffer_offset), (u8 *)((u8 *)q->payload + pay_load_offset), (FGMAC_MAX_PACKET_SIZE - buffer_offset));
+ FGMAC_DMA_INC_DESC(gmac_p->tx_ring.desc_buf_idx, gmac_p->tx_ring.desc_max_num);
+ /* Point to next descriptor */
+ dma_tx_desc = &gmac_p->tx_desc[gmac_p->tx_ring.desc_buf_idx];
+
+ /* Check if the Bufferis available */
+ if ((dma_tx_desc->status & FGMAC_DMA_TDES0_OWN) != (u32)0)
+ {
+ errval = ERR_USE;
+ OS_MAC_DEBUG_I("Check if the Bufferis available.");
+ goto error;
+ }
+
+ buffer = (u8 *)(intptr)(dma_tx_desc->buf_addr);
+ bytes_left_to_copy = bytes_left_to_copy - (FGMAC_MAX_PACKET_SIZE - buffer_offset);
+ pay_load_offset = pay_load_offset + (FGMAC_MAX_PACKET_SIZE - buffer_offset);
+ frame_length = frame_length + (FGMAC_MAX_PACKET_SIZE - buffer_offset);
+ buffer_offset = 0;
+
+ if (buffer == NULL)
+ {
+ OS_MAC_DEBUG_I("Error Buffer is 0.");
+ return ERR_VAL;
+ }
+ }
+
+ /* Copy the remaining bytes */
+ memcpy((u8 *)((u8 *)buffer + buffer_offset), (u8 *)((u8 *)q->payload + pay_load_offset), bytes_left_to_copy);
+ buffer_offset = buffer_offset + bytes_left_to_copy;
+ frame_length = frame_length + bytes_left_to_copy;
+ }
+
+ FGMAC_DMA_INC_DESC(gmac_p->tx_ring.desc_buf_idx, gmac_p->tx_ring.desc_max_num);
+
+#if ETH_PAD_SIZE
+ pbuf_header(p, ETH_PAD_SIZE); /* reclaim the padding word */
+#endif
+
+ ret = FGmacSendFrame(gmac_p, frame_length);
+
+ if (ret != FGMAC_SUCCESS)
+ {
+ errval = ERR_USE;
+ OS_MAC_DEBUG_I("Error errval = ERR_USE; FGmacSendFrame.");
+ goto error;
+ }
+
+error:
+ FGmacResmuDmaUnderflow(gmac_p->config.base_addr);
+
+ return errval;
+}
+
+
+static u32 FGmacPhyLinkDetect(FGmac *instance_p, u32 phy_addr)
+{
+ u16 status;
+
+ /* Read Phy Status register twice to get the confirmation of the current
+ * link status.
+ */
+ FGmacReadPhyReg(instance_p, instance_p->phy_addr, FGMAC_PHY_MII_STATUS_REG, &status);
+
+ if (status & FGMAC_PHY_MII_SR_LSTATUS)
+ {
+ return 1;
+ }
+ return 0;
+}
+
+
+
+enum lwip_port_link_status FGmacPhyStatus(struct LwipPort *gmac_netif_p)
+{
+ FGmac *gmac_p;
+ FGmacOs *instance_p;
+ u32 phy_link_status;
+ FASSERT(gmac_netif_p != NULL);
+ FASSERT(gmac_netif_p->state != NULL);
+
+ instance_p = (FGmacOs *)(gmac_netif_p->state);
+
+ gmac_p = &instance_p->instance;
+
+ if (gmac_p->is_ready != FT_COMPONENT_IS_READY)
+ {
+ OS_MAC_DEBUG_E("instance_p is not ready.");
+ return ETH_LINK_DOWN;
+ }
+
+ /* read gmac phy link status */
+ phy_link_status = FGmacPhyLinkDetect(gmac_p, gmac_p->phy_addr);
+
+ if (phy_link_status)
+ {
+ return ETH_LINK_UP;
+ }
+ else
+ {
+ return ETH_LINK_DOWN;
+ }
+}
+
+void FGmacOsStart(FGmacOs *instance_p)
+{
+ FASSERT(instance_p != NULL);
+
+ /* start mac */
+ FGmacStartTrans(&instance_p->instance);
+}
+
+
+void FGmacOsStop(FGmacOs *instance_p)
+{
+ FASSERT(instance_p != NULL);
+ /* step 1 close mac controler */
+ FGmacStopTrans(&instance_p->instance);
+}
diff --git a/third-party/lwip-2.1.2/ports/fgmac/ft_os_gmac.h b/drivers/eth/gmac/fgmac_os.h
similarity index 37%
rename from third-party/lwip-2.1.2/ports/fgmac/ft_os_gmac.h
rename to drivers/eth/gmac/fgmac_os.h
index cb54b88fe310e2818e270735be7d2c913d4f1d00..120e7a3894306acfaadb2af17faa5bd0e68f0450 100644
--- a/third-party/lwip-2.1.2/ports/fgmac/ft_os_gmac.h
+++ b/drivers/eth/gmac/fgmac_os.h
@@ -1,29 +1,29 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
- * FilePath: ft_os_gmac.h
+ * See the Phytium Public License for more details.
+ *
+ *
+ * FilePath: fgmac_os.h
* Date: 2022-02-24 13:42:19
* LastEditTime: 2022-03-25 09:16:53
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
+ * Description: This file is for gmac driver.Functions in this file are the minimum required functions for drivers.
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 huanghe 2022/11/15 first release
*/
-
-#ifndef FT_OS_GMAC_H
-#define FT_OS_GMAC_H
+#ifndef FGMAC_OS_H
+#define FGMAC_OS_H
#include
#include
@@ -34,10 +34,22 @@
#include "fgmac_phy.h"
#include "fparameters.h"
#include "lwip/netif.h"
-#include "ethernetif.h"
-#define FT_OS_GMAC0_ID GMAC_INSTANCE_0
-#define FT_OS_GMAC1_ID GMAC_INSTANCE_1
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/* error code */
+
+#define FREERTOS_GMAC_INIT_ERROR FT_CODE_ERR(ErrModPort, 0, 0x1)
+#define FREERTOS_GMAC_PARAM_ERROR FT_CODE_ERR(ErrModPort, 0, 0x2)
+#define FREERTOS_GMAC_NO_VALID_SPACE FT_CODE_ERR(ErrModPort, 0, 0x3)
+
+#define FGMAX_MAX_HARDWARE_ADDRESS_LENGTH 6
+
+#define FT_OS_GMAC0_ID FGMAC0_ID
+#define FT_OS_GMAC1_ID FGMAC1_ID
#define FT_NETIF_LINKUP 0x1U
#define FT_NETIF_DOWN 0x2U
@@ -54,47 +66,57 @@
#define PHY_INTERRUPT_ENABLE_OFFSET ((u16)0x12)
#define PHY_INTERRUPT_ENABLE_LINK_FAIL BIT(11) /* Link fail interrupt, 0 Interrupt disable , 1 Interrupt enable */
-struct Ipv4Address
-{
- u8 ip_address[4];
- u8 netmask_address[4];
- u8 gateWay_address[4];
-};
-struct GmacThread
-{
- const char *thread_name;
- u16 stack_depth; /* The number of words the stack */
- u32 priority; /* Defines the priority at which the task will execute. */
- TaskHandle_t thread_handle;
-};
+/* Phy */
+#define FGMAC_PHY_SPEED_10M 10
+#define FGMAC_PHY_SPEED_100M 100
+#define FGMAC_PHY_SPEED_1000M 1000
+
+#define FGMAC_PHY_HALF_DUPLEX 0
+#define FGMAC_PHY_FULL_DUPLEX 1
+
+
+/* dma */
+
+#define GMAC_RX_DESCNUM 128
+#define GMAC_TX_DESCNUM 128
typedef struct
{
- u32 gmac_instance; /* select Gmac global object */
- u32 isr_priority; /* irq Priority */
- struct Ipv4Address address;
- /* Gmac input thread */
- struct GmacThread mac_input_thread;
-} FtOsGmacConfig;
+ u32 instance_id;
+ u32 autonegotiation; /* 1 is autonegotiation ,0 is manually set */
+ u32 phy_speed; /* FXMAC_PHY_SPEED_XXX */
+ u32 phy_duplex; /* FXMAC_PHY_XXX_DUPLEX */
+} FtOsGmacPhyControl;
typedef struct
{
- FGmac gmac;
- struct netif netif_object;
- FtOsGmacConfig config;
- u8 *rx_buffer; /* Buffer for RxDesc */
- u8 *tx_buffer; /* Buffer for TxDesc */
+ FGmac instance;
+ FtOsGmacPhyControl mac_config;
+
+ u8 tx_buf[GMAC_TX_DESCNUM * FGMAC_MAX_PACKET_SIZE] __aligned(FGMAC_DMA_MIN_ALIGN);
+ u8 rx_buf[GMAC_RX_DESCNUM * FGMAC_MAX_PACKET_SIZE] __aligned(FGMAC_DMA_MIN_ALIGN);
+ u8 tx_desc[GMAC_TX_DESCNUM * sizeof(FGmacDmaDesc)] __aligned(FGMAC_DMA_MIN_ALIGN);
+ u8 rx_desc[GMAC_RX_DESCNUM * sizeof(FGmacDmaDesc)] __aligned(FGMAC_DMA_MIN_ALIGN);
+
u8 is_ready; /* Ft_Os_Gmac Object first need Init use Ft_Os_GmacObjec_Init */
SemaphoreHandle_t s_semaphore; /* Semaphore to signal incoming packets */
EventGroupHandle_t s_status_event; /* Event Group to show netif's status ,follow FT_NETIF_XX*/
-} FtOsGmac;
-
-
-void FtOsGmacObjectInit(FtOsGmac *os_gmac, FtOsGmacConfig *config);
-FError FtOsGmacInit(FtOsGmac *os_gmac, netif_config *netif_config_p);
-void FtOsGmacStart(FtOsGmac *os_gmac);
-void FtOsGmacStop(FtOsGmac *os_gmac);
-int FtOsGmacSetupInterrupt(FGmac *instance_p);
+ struct LwipPort *stack_pointer; /* Docking data stack data structure */
+ u8 hwaddr[FGMAX_MAX_HARDWARE_ADDRESS_LENGTH];
+} FGmacOs;
+
+
+FError FGmacOsInit(FGmacOs *instance_p);
+FGmacOs *FGmacOsGetInstancePointer(FtOsGmacPhyControl *config_p);
+FError FGmacOsConfig(FGmacOs *instance_p, int cmd, void *arg);
+void *FGmacOsRx(FGmacOs *instance_p);
+FError FGmacOsTx(FGmacOs *instance_p, void *tx_buf);
+enum lwip_port_link_status FGmacPhyStatus(struct LwipPort *gmac_netif_p);
+void FGmacOsStart(FGmacOs *instance_p);
+
+#ifdef __cplusplus
+}
+#endif
#endif // ! FT_OS_GMAC_H
diff --git a/drivers/eth/xmac/ft_os_xmac.c b/drivers/eth/xmac/ft_os_xmac.c
deleted file mode 100644
index 8f3f5c11b6484bfe0f62ec28d7a7328ef78a839c..0000000000000000000000000000000000000000
--- a/drivers/eth/xmac/ft_os_xmac.c
+++ /dev/null
@@ -1,1341 +0,0 @@
-/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
- * All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
- * FilePath: ft_os_xmac.c
- * Date: 2022-07-15 16:33:13
- * LastEditTime: 2022-07-15 16:33:13
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
- */
-
-
-#include "fparameters.h"
-#include "fassert.h"
-#include "ft_os_xmac.h"
-#include "fxmac.h"
-#include "fcache.h"
-#include "fxmac_bdring.h"
-#include "lwip_port.h"
-#include "eth_ieee_reg.h"
-#include "fcpu_info.h"
-
-#ifdef __aarch64__
-#include "faarch64.h"
-#else
-#include "fcp15.h"
-#endif
-
-#include "FreeRTOS.h"
-#include "semphr.h"
-
-#include "fdebug.h"
-
-#define FXMAC_OS_XMAC_DEBUG_TAG "FXMAC_OS_XMAC"
-#define FXMAC_OS_XMAC_PRINT_E(format, ...) FT_DEBUG_PRINT_E(FXMAC_OS_XMAC_DEBUG_TAG, format, ##__VA_ARGS__)
-#define FXMAC_OS_XMAC_PRINT_I(format, ...) FT_DEBUG_PRINT_I(FXMAC_OS_XMAC_DEBUG_TAG, format, ##__VA_ARGS__)
-#define FXMAC_OS_XMAC_PRINT_D(format, ...) FT_DEBUG_PRINT_D(FXMAC_OS_XMAC_DEBUG_TAG, format, ##__VA_ARGS__)
-#define FXMAC_OS_XMAC_PRINT_W(format, ...) FT_DEBUG_PRINT_W(FXMAC_OS_XMAC_DEBUG_TAG, format, ##__VA_ARGS__)
-
-#define FXMAC_BD_TO_INDEX(ringptr, bdptr) \
- (((uintptr)bdptr - (uintptr)(ringptr)->base_bd_addr) / (ringptr)->separation)
-
-static void FXmacInitOnError(FXmacOs *instance_p);
-static void FXmacSetupIsr(FXmacOs *instance_p);
-extern void sys_sem_signal(sys_sem_t *sem);
-static FXmacOs fxmac_os_instace[FT_XMAC_NUM] =
- {
- [FT_XMAC0_ID] = {
- .config =( 0)
- },
- [FT_XMAC1_ID] = {
- .config =( 0)
- },
- [FT_XMAC2_ID] = {
- .config =( 0)
- },
- [FT_XMAC3_ID] = {
- .config =( 0 )
- },
-};
-
-int isr_calling_flg = 0;
-
-/* queue */
-
-void FXmacQueueInit(PqQueue *q)
-{
- FASSERT(q != NULL);
- q->head = q->tail = q->len = 0;
-}
-
-int FXmacPqEnqueue(PqQueue *q, void *p)
-{
- if (q->len == PQ_QUEUE_SIZE)
- return -1;
-
- q->data[q->head] = (uintptr)p;
- q->head = (q->head + 1)%PQ_QUEUE_SIZE;
- q->len++;
-
- return 0;
-}
-
-void* FXmacPqDequeue(PqQueue *q)
-{
- int ptail;
-
- if (q->len == 0)
- return NULL;
-
- ptail = q->tail;
- q->tail = (q->tail + 1)%PQ_QUEUE_SIZE;
- q->len--;
-
- return (void* )q->data[ptail];
-}
-
-int FXmacPqQlength(PqQueue *q)
-{
- return q->len;
-}
-
-/* dma */
-
-/**
- * @name: IsTxSpaceAvailable
- * @msg: 获取当前bdring 剩余计数
- * @param {ethernetif} *ethernetif_p
- * @return {*} 返回
- */
-static u32 IsTxSpaceAvailable(FXmacOs *instance_p)
-{
- FXmacBdRing *txring;
- u32 freecnt = 0;
- FASSERT(instance_p != NULL);
-
- txring = &(FXMAC_GET_TXRING(instance_p->instance));
-
- /* tx space is available as long as there are valid BD's */
- freecnt = FXMAC_BD_RING_GET_FREE_CNT(txring);
- return freecnt;
-}
-
-/**
- * @name: FXmacProcessSentBds
- * @msg: 释放发送队列q参数
- * @return {*}
- * @param {ethernetif} *ethernetif_p
- * @param {FXmacBdRing} *txring
- */
-void FXmacProcessSentBds(FXmacOs *instance_p, FXmacBdRing *txring)
-{
- FXmacBd *txbdset;
- FXmacBd *curbdpntr;
- u32 n_bds;
- FError status;
- u32 n_pbufs_freed = 0;
- u32 bdindex;
- struct pbuf *p;
- u32 *temp;
-
- while (1)
- {
- /* obtain processed BD's */
- n_bds = FXmacBdRingFromHwTx(txring, FXMAX_TX_PBUFS_LENGTH, &txbdset);
- if (n_bds == 0)
- {
- return;
- }
- /* free the processed BD's */
- n_pbufs_freed = n_bds;
- curbdpntr = txbdset;
- while (n_pbufs_freed > 0)
- {
- bdindex = FXMAC_BD_TO_INDEX(txring, curbdpntr);
- temp = (u32 *)curbdpntr;
- *temp = 0; /* Word 0 */
- temp++;
- if (bdindex == (FXMAX_TX_PBUFS_LENGTH - 1))
- {
- *temp = 0xC0000000; /* Word 1 ,used/Wrap – marks last descriptor in transmit buffer descriptor list.*/
- }
- else
- {
- *temp = 0x80000000; /* Word 1 , Used – must be zero for GEM to read data to the transmit buffer.*/
- }
- DSB();
-
- p = (struct pbuf *)instance_p->buffer.tx_pbufs_storage[bdindex];
-
- if (p != NULL)
- {
- pbuf_free(p);
- }
-
- instance_p->buffer.tx_pbufs_storage[bdindex] = (uintptr)NULL;
- curbdpntr = FXMAC_BD_RING_NEXT(txring, curbdpntr);
- n_pbufs_freed--;
- DSB();
- }
-
- status = FXmacBdRingFree(txring, n_bds, txbdset);
- if (status != FT_SUCCESS)
- {
- FXMAC_OS_XMAC_PRINT_I("Failure while freeing in Tx Done ISR\r\n");
- }
- }
- return;
-}
-
-
-void FXmacSendHandler(void *arg)
-{
- FXmacOs *instance_p;
- FXmacBdRing *txringptr;
- u32 regval;
-
- instance_p = (FXmacOs *)arg;
- txringptr = &(FXMAC_GET_TXRING(instance_p->instance));
- regval = FXMAC_READREG32(instance_p->instance.config.base_address, FXMAC_TXSR_OFFSET);
- FXMAC_WRITEREG32(instance_p->instance.config.base_address,FXMAC_TXSR_OFFSET, regval); /* 清除中断状态位来停止中断 */
-
- /* If Transmit done interrupt is asserted, process completed BD's */
- FXmacProcessSentBds(instance_p, txringptr);
-}
-
-FError FXmacSgsend(FXmacOs *instance_p, struct pbuf *p)
-{
- struct pbuf *q;
- u32 n_pbufs;
- FXmacBd *txbdset, *txbd, *last_txbd = NULL;
- FXmacBd *temp_txbd;
- FError status;
- FXmacBdRing *txring;
- u32 bdindex;
- u32 lev;
- u32 max_fr_size;
-
- lev = MFCPSR();
- MTCPSR(lev | 0xC0); /* Mask IRQ and FIQ interrupts in cpsr */
-
- txring = &(FXMAC_GET_TXRING(instance_p->instance));
-
- /* first count the number of pbufs */
- for (q = p, n_pbufs = 0; q != NULL; q = q->next)
- n_pbufs++;
-
- /* obtain as many BD's */
- status = FXmacBdRingAlloc(txring, n_pbufs, &txbdset);
- if (status != FT_SUCCESS)
- {
- MTCPSR(lev);
- FXMAC_OS_XMAC_PRINT_I("sgsend: Error allocating TxBD\r\n");
- return ERR_GENERAL;
- }
-
- for(q = p, txbd = txbdset; q != NULL; q = q->next)
- {
- bdindex = FXMAC_BD_TO_INDEX(txring, txbd);
-
- if(instance_p->buffer.tx_pbufs_storage[bdindex])
- {
- MTCPSR(lev);
- FXMAC_OS_XMAC_PRINT_I("PBUFS not available\r\n");
- return ERR_GENERAL;
- }
-
- /* Send the data from the pbuf to the interface, one pbuf at a
- time. The size of the data in each pbuf is kept in the ->len
- variable. */
- FCacheDCacheFlushRange((uintptr)q->payload, (uintptr)q->len);
- FXMAC_BD_SET_ADDRESS_TX(txbd, (uintptr)q->payload);
-
- if(instance_p->config & FXMAC_OS_CONFIG_JUMBO)
- {
- max_fr_size = FXMAC_MAX_FRAME_SIZE_JUMBO - 18;
- }
- else
- {
- max_fr_size = FXMAC_MAX_FRAME_SIZE - 18;
- }
-
- if (q->len > max_fr_size)
- FXMAC_BD_SET_LENGTH(txbd, max_fr_size & 0x3FFF);
- else
- FXMAC_BD_SET_LENGTH(txbd, q->len & 0x3FFF);
-
- instance_p->buffer.tx_pbufs_storage[bdindex] = (uintptr)q;
-
- pbuf_ref(q);
- last_txbd = txbd;
- FXMAC_BD_CLEAR_LAST(txbd);
- txbd = FXMAC_BD_RING_NEXT(txring, txbd);
- }
- FXMAC_BD_SET_LAST(last_txbd);
- /* For fragmented packets, remember the 1st BD allocated for the 1st
- packet fragment. The used bit for this BD should be cleared at the end
- after clearing out used bits for other fragments. For packets without
- just remember the allocated BD. */
- temp_txbd = txbdset;
- txbd = txbdset;
- txbd = FXMAC_BD_RING_NEXT(txring, txbd);
- q = p->next;
- for(; q != NULL; q = q->next)
- {
- FXMAC_BD_CLEAR_TX_USED(txbd);
- DSB();
- txbd = FXMAC_BD_RING_NEXT(txring, txbd);
- }
- FXMAC_BD_CLEAR_TX_USED(temp_txbd);
- DSB();
-
- status = FXmacBdRingToHw(txring, n_pbufs, txbdset);
- if (status != FT_SUCCESS)
- {
- MTCPSR(lev);
- FXMAC_OS_XMAC_PRINT_I("sgsend: Error submitting TxBD\r\n");
- return ERR_GENERAL;
- }
- /* Start transmit */
- FXMAC_WRITEREG32((instance_p->instance).config.base_address,
- FXMAC_NWCTRL_OFFSET,
- (FXMAC_READREG32(instance_p->instance.config.base_address,
- FXMAC_NWCTRL_OFFSET) | FXMAC_NWCTRL_STARTTX_MASK));
-
- MTCPSR(lev);
-
- return status;
-}
-
-
-void SetupRxBds(FXmacOs *instance_p, FXmacBdRing *rxring)
-{
- FXmacBd *rxbd;
- FError status;
- struct pbuf *p;
- u32 freebds;
- u32 bdindex;
- u32 *temp;
- freebds = FXMAC_BD_RING_GET_FREE_CNT(rxring);
- while (freebds > 0)
- {
- freebds--;
-
- if(instance_p->config & FXMAC_OS_CONFIG_JUMBO)
- {
- p = pbuf_alloc(PBUF_RAW, FXMAC_MAX_FRAME_SIZE_JUMBO, PBUF_POOL);
- }
- else
- {
- p = pbuf_alloc(PBUF_RAW, FXMAC_MAX_FRAME_SIZE, PBUF_POOL);
- }
-
- if (!p)
- {
-#if LINK_STATS
- lwip_stats.link.memerr++;
- lwip_stats.link.drop++;
-#endif
- FXMAC_OS_XMAC_PRINT_I("unable to alloc pbuf in recv_handler\r\n");
- return;
- }
- status = FXmacBdRingAlloc(rxring, 1, &rxbd);
- if (status != FT_SUCCESS)
- {
- FXMAC_OS_XMAC_PRINT_I("SetupRxBds: Error allocating RxBD\r\n");
- pbuf_free(p);
- return;
- }
- status = FXmacBdRingToHw(rxring, 1, rxbd);
- if (status != FT_SUCCESS)
- {
- FXMAC_OS_XMAC_PRINT_I("Error committing RxBD to hardware: ");
- if (status == FXMAC_ERR_SG_LIST)
- {
- FXMAC_OS_XMAC_PRINT_I("XST_DMA_SG_LIST_ERROR: this function was called out of sequence with FXmacBdRingAlloc()\r\n");
- }
- else
- {
- FXMAC_OS_XMAC_PRINT_I("set of BDs was rejected because the first BD did not have its start-of-packet bit set, or the last BD did not have its end-of-packet bit set, or any one of the BD set has 0 as length value\r\n");
- }
-
- pbuf_free(p);
- FXmacBdRingUnAlloc(rxring, 1, rxbd);
- return;
- }
-
- if(instance_p->config & FXMAC_OS_CONFIG_JUMBO)
- {
- FCacheDCacheInvalidateRange((uintptr)p->payload, (uintptr)MAX_FRAME_SIZE_JUMBO);
- }
- else
- {
- FCacheDCacheInvalidateRange((uintptr)p->payload, (uintptr)FXMAC_MAX_FRAME_SIZE);
- }
-
-
- bdindex = FXMAC_BD_TO_INDEX(rxring, rxbd);
- temp = (u32 *)rxbd;
- if (bdindex == (FXMAX_RX_PBUFS_LENGTH - 1))
- {
- *temp = 0x00000002;
- }
- else
- {
- *temp = 0;
- }
- temp++;
- *temp = 0;
- DSB();
-
- FXMAC_BD_SET_ADDRESS_RX(rxbd, (uintptr)p->payload);
- instance_p->buffer.rx_pbufs_storage[bdindex] = (uintptr)p;
- }
-}
-
-
-
-void FXmacRecvHandler(void *arg)
-{
- struct pbuf *p;
- FXmacBd *rxbdset, *curbdptr;
- struct LwipPort *xmac_netif_p;
- FXmacBdRing *rxring;
- volatile u32 bd_processed;
- u32 rx_bytes, k;
- u32 bdindex;
- u32 regval;
- u32 index;
- u32 gigeversion;
- FXmacOs *instance_p;
- FASSERT(arg != NULL);
-
- instance_p = (FXmacOs *)arg ;
- xmac_netif_p = (struct LwipPort *)instance_p->stack_pointer;
- rxring = &FXMAC_GET_RXRING(instance_p->instance);
-
- /* If Reception done interrupt is asserted, call RX call back function
- to handle the processed BDs and then raise the according flag.*/
- regval = FXMAC_READREG32(instance_p->instance.config.base_address, FXMAC_RXSR_OFFSET);
- FXMAC_WRITEREG32(instance_p->instance.config.base_address, FXMAC_RXSR_OFFSET, regval);
-
- while(1)
- {
- bd_processed = FXmacBdRingFromHwRx(rxring, FXMAX_RX_PBUFS_LENGTH, &rxbdset);
- if (bd_processed <= 0)
- {
- break;
- }
-
- for (k = 0, curbdptr=rxbdset; k < bd_processed; k++)
- {
-
- bdindex = FXMAC_BD_TO_INDEX(rxring, curbdptr);
- p = (struct pbuf *)instance_p->buffer.rx_pbufs_storage[bdindex];
- /*
- * Adjust the buffer size to the actual number of bytes received.
- */
- if(instance_p->config & FXMAC_OS_CONFIG_JUMBO)
- {
- rx_bytes = FXMAC_GET_RX_FRAME_SIZE(&(instance_p->instance), curbdptr);
- }
- else
- {
- rx_bytes = FXMAC_BD_GET_LENGTH(curbdptr);
- }
- pbuf_realloc(p, rx_bytes);
-
- /* Invalidate RX frame before queuing to handle
- * L1 cache prefetch conditions on any architecture.
- */
- FCacheDCacheInvalidateRange((uintptr)p->payload, rx_bytes);
-
- /* store it in the receive queue,
- * where it'll be processed by a different handler
- */
- if (FXmacPqEnqueue(&instance_p->recv_q, (void*)p) < 0)
- {
-#if LINK_STATS
- lwip_stats.link.memerr++;
- lwip_stats.link.drop++;
-#endif
- pbuf_free(p);
- }
- curbdptr = FXMAC_BD_RING_NEXT( rxring, curbdptr);
- }
-
- /* free up the BD's */
- FXmacBdRingFree(rxring, bd_processed, rxbdset);
- SetupRxBds(instance_p, rxring);
-#if !NO_SYS
- sys_sem_signal(&xmac_netif_p->sem_rx_data_available);
-#endif
- }
-
- return;
-}
-
-void CleanDmaTxdescs(FXmacOs *instance_p)
-{
- FXmacBd bdtemplate;
- FXmacBdRing *txringptr;
-
- txringptr = &FXMAC_GET_TXRING((instance_p->instance));
- FXMAC_BD_CLEAR(&bdtemplate);
- FXMAC_BD_SET_STATUS(&bdtemplate, FXMAC_TXBUF_USED_MASK);
-
- FXmacBdRingCreate(txringptr, (uintptr) instance_p->buffer.tx_bdspace,
- (uintptr) instance_p->buffer.tx_bdspace, BD_ALIGNMENT,
- sizeof(instance_p->buffer.tx_bdspace));
-
- FXmacBdRingClone(txringptr, &bdtemplate, FXMAC_SEND);
-}
-
-
-
-FError FXmacInitDma(FXmacOs *instance_p)
-{
- FXmacBd bdtemplate;
- FXmacBdRing *rxringptr, *txringptr;
- FXmacBd *rxbd;
- struct pbuf *p;
- FError status;
- int i;
- u32 bdindex;
- volatile uintptr tempaddress;
- u32 gigeversion;
- FXmacBd *bdtxterminate;
- FXmacBd *bdrxterminate;
- u32 *temp;
-
- /*
- * The BDs need to be allocated in uncached memory. Hence the 1 MB
- * address range allocated for Bd_Space is made uncached
- * by setting appropriate attributes in the translation table.
- * The Bd_Space is aligned to 1MB and has a size of 1 MB. This ensures
- * a reserved uncached area used only for BDs.
- */
-
- rxringptr = &FXMAC_GET_RXRING(instance_p->instance);
- txringptr = &FXMAC_GET_TXRING(instance_p->instance);
- FXMAC_OS_XMAC_PRINT_I( "rxringptr: 0x%08x\r\n", rxringptr);
- FXMAC_OS_XMAC_PRINT_I( "txringptr: 0x%08x\r\n", txringptr);
-
- FXMAC_OS_XMAC_PRINT_I("rx_bdspace: %p \r\n", instance_p->buffer.rx_bdspace);
- FXMAC_OS_XMAC_PRINT_I("tx_bdspace: %p \r\n", instance_p->buffer.tx_bdspace);
-
- /* Setup RxBD space. */
- FXMAC_BD_CLEAR(&bdtemplate);
-
- /* Create the RxBD ring */
- status = FXmacBdRingCreate(rxringptr, (uintptr) instance_p->buffer.rx_bdspace,
- (uintptr) instance_p->buffer.rx_bdspace, BD_ALIGNMENT,
- FXMAX_RX_PBUFS_LENGTH);
-
- if(status != FT_SUCCESS)
- {
- FXMAC_OS_XMAC_PRINT_I("Error setting up RxBD space\r\n");
- return ERR_IF;
- }
-
- status = FXmacBdRingClone(rxringptr, &bdtemplate, FXMAC_RECV);
- if(status != FT_SUCCESS)
- {
- FXMAC_OS_XMAC_PRINT_I("Error initializing RxBD space\r\n");
- return ERR_IF;
- }
-
- FXMAC_BD_CLEAR(&bdtemplate);
- FXMAC_BD_SET_STATUS(&bdtemplate, FXMAC_TXBUF_USED_MASK);
-
- /* Create the TxBD ring */
- status = FXmacBdRingCreate(txringptr, (uintptr) instance_p->buffer.tx_bdspace,
- (uintptr) instance_p->buffer.tx_bdspace, BD_ALIGNMENT,
- FXMAX_TX_PBUFS_LENGTH);
-
- if (status != FT_SUCCESS)
- {
- return ERR_IF;
- }
-
- /* We reuse the bd template, as the same one will work for both rx and tx. */
- status = FXmacBdRingClone(txringptr, &bdtemplate, FXMAC_SEND);
- if (status != FT_SUCCESS)
- {
- return ERR_IF;
- }
-
- /*
- * Allocate RX descriptors, 1 RxBD at a time.
- */
- printf("Allocate RX descriptors, 1 RxBD at a time. \r\n");
- for (i = 0; i < FXMAX_RX_PBUFS_LENGTH; i++)
- {
- if(instance_p->config & FXMAC_OS_CONFIG_JUMBO)
- {
- p = pbuf_alloc(PBUF_RAW, FXMAC_MAX_FRAME_SIZE_JUMBO, PBUF_POOL);
- }
- else
- {
- p = pbuf_alloc(PBUF_RAW, FXMAC_MAX_FRAME_SIZE, PBUF_POOL);
- }
-
- if (!p)
- {
-#if LINK_STATS
- lwip_stats.link.memerr++;
- lwip_stats.link.drop++;
-#endif
- FXMAC_OS_XMAC_PRINT_E("unable to alloc pbuf in InitDma\r\n");
- return ERR_IF;
- }
- status = FXmacBdRingAlloc(rxringptr, 1, &rxbd);
- if (status != FT_SUCCESS)
- {
- FXMAC_OS_XMAC_PRINT_E("InitDma: Error allocating RxBD\r\n");
- pbuf_free(p);
- return ERR_IF;
- }
- /* Enqueue to HW */
- status = FXmacBdRingToHw(rxringptr, 1, rxbd);
- if (status != FT_SUCCESS)
- {
- FXMAC_OS_XMAC_PRINT_E("Error: committing RxBD to HW\r\n");
- pbuf_free(p);
- FXmacBdRingUnAlloc(rxringptr, 1, rxbd);
- return ERR_IF;
- }
-
- bdindex = FXMAC_BD_TO_INDEX(rxringptr, rxbd);
- temp = (u32 *)rxbd;
- *temp = 0;
- if (bdindex == (FXMAX_RX_PBUFS_LENGTH - 1))
- {
- *temp = 0x00000002;
- }
- temp++;
- *temp = 0;
- DSB();
-
-
- if(instance_p->config & FXMAC_OS_CONFIG_JUMBO)
- {
- FCacheDCacheInvalidateRange((uintptr)p->payload, (uintptr)MAX_FRAME_SIZE_JUMBO);
- }
- else
- {
- FCacheDCacheInvalidateRange((uintptr)p->payload, (uintptr)FXMAC_MAX_FRAME_SIZE);
- }
- FXMAC_BD_SET_ADDRESS_RX(rxbd, (uintptr)p->payload);
-
- instance_p->buffer.rx_pbufs_storage[bdindex] = (uintptr)p;
- }
-
- FXmacSetQueuePtr(&(instance_p->instance), instance_p->instance.tx_bd_queue.bdring.base_bd_addr, 0, (u16)FXMAC_SEND);
- FXmacSetQueuePtr(&(instance_p->instance), instance_p->instance.rx_bd_queue.bdring.base_bd_addr, 0, (u16)FXMAC_RECV);
-
- return 0;
-}
-
-
-static void FreeTxRxPbufs(FXmacOs *instance_p)
-{
- u32 index;
- struct pbuf *p;
-
- for (index = 0; index < (0 + sizeof(instance_p->buffer.tx_pbufs_storage)); index++)
- {
- if(instance_p->buffer.tx_pbufs_storage[index] != 0)
- {
- p = (struct pbuf *)instance_p->buffer.tx_pbufs_storage[index];
- pbuf_free(p);
- instance_p->buffer.tx_pbufs_storage[index] = 0;
- }
- }
-
- for (index = 0; index < (0 + sizeof(instance_p->buffer.rx_pbufs_storage)); index++)
- {
- p = (struct pbuf *)instance_p->buffer.rx_pbufs_storage[index];
- pbuf_free(p);
- }
-}
-
-static void FreeOnlyTxPbufs(FXmacOs *instance_p)
-{
- u32 index;
- u32 index1;
- struct pbuf *p;
-
- for (index = 0; index < (0 + sizeof(instance_p->buffer.tx_pbufs_storage)); index++)
- {
- if(instance_p->buffer.tx_pbufs_storage[index] != 0)
- {
- p = (struct pbuf *)instance_p->buffer.tx_pbufs_storage[index];
- pbuf_free(p);
- instance_p->buffer.tx_pbufs_storage[index] = 0;
- }
- }
-}
-
-static void ResetDma(FXmacOs *instance_p)
-{
- u8 txqueuenum;
- u32 gigeversion;
-
- FXmacBdRing *txringptr = &FXMAC_GET_TXRING(instance_p->instance);
- FXmacBdRing *rxringptr = &FXMAC_GET_RXRING(instance_p->instance);
-
- FXmacBdringPtrReset(txringptr, instance_p->buffer.tx_bdspace);
- FXmacBdringPtrReset(rxringptr, instance_p->buffer.rx_bdspace);
-
- FXmacSetQueuePtr(&(instance_p->instance), instance_p->instance.tx_bd_queue.bdring.base_bd_addr, 0, (u16)FXMAC_SEND);
- FXmacSetQueuePtr(&(instance_p->instance), instance_p->instance.rx_bd_queue.bdring.base_bd_addr, 0, (u16)FXMAC_RECV);
-
-}
-
-
-/* interrupt */
-static void FXmacHandleDmaTxError(FXmacOs *instance_p)
-{
- s32_t status = FT_SUCCESS;
- u32 dmacrreg;
-
- FreeTxRxPbufs(instance_p);
- status = FXmacCfgInitialize(&instance_p->instance, &instance_p->instance.config);
-
- if (status != FT_SUCCESS)
- {
- FXMAC_OS_XMAC_PRINT_E("In %s:EmacPs Configuration Failed....\r\n", __func__);
- }
-
- /* initialize the mac */
- FXmacInitOnError(instance_p); /* need to set mac filter address */
- dmacrreg = FXMAC_READREG32(instance_p->instance.config.base_address, FXMAC_DMACR_OFFSET);
- dmacrreg = dmacrreg | (FXMAC_DMACR_ORCE_DISCARD_ON_ERR_MASK); /* force_discard_on_err */
- FXMAC_WRITEREG32(instance_p->instance.config.base_address, FXMAC_DMACR_OFFSET, dmacrreg);
- FXmacSetupIsr(instance_p);
- FXmacInitDma(instance_p);
-
- FXmacStart(&instance_p->instance);
-}
-
-
-void FXmacHandleTxErrors(FXmacOs *instance_p)
-{
- u32 netctrlreg;
-
- netctrlreg = FXMAC_READREG32(instance_p->instance.config.base_address,
- FXMAC_NWCTRL_OFFSET);
- netctrlreg = netctrlreg & (~FXMAC_NWCTRL_TXEN_MASK);
- FXMAC_WRITEREG32(instance_p->instance.config.base_address,
- FXMAC_NWCTRL_OFFSET, netctrlreg);
- FreeOnlyTxPbufs(instance_p);
-
- CleanDmaTxdescs(instance_p);
- netctrlreg = FXMAC_READREG32(instance_p->instance.config.base_address, FXMAC_NWCTRL_OFFSET);
- netctrlreg = netctrlreg | (FXMAC_NWCTRL_TXEN_MASK);
- FXMAC_WRITEREG32(instance_p->instance.config.base_address, FXMAC_NWCTRL_OFFSET, netctrlreg);
-
-}
-
-void FXmacErrorHandler(void *arg,u8 direction, u32 error_word)
-{
- FXmacBdRing *rxring;
- FXmacBdRing *txring;
- FXmacOs *instance_p;
-
- instance_p = (FXmacOs *)(arg);
- rxring = &FXMAC_GET_RXRING((instance_p->instance));
- txring = &FXMAC_GET_TXRING((instance_p->instance));
-
- if (error_word != 0)
- {
- switch (direction)
- {
- case FXMAC_RECV:
- if (error_word & FXMAC_RXSR_HRESPNOK_MASK)
- {
- FXMAC_OS_XMAC_PRINT_I("Receive DMA error\r\n");
- FXmacHandleDmaTxError(instance_p);
- }
- if (error_word & FXMAC_RXSR_RXOVR_MASK)
- {
- FXMAC_OS_XMAC_PRINT_I("Receive over run\r\n");
- FXmacRecvHandler(instance_p);
- SetupRxBds(instance_p, rxring);
- }
- if (error_word & FXMAC_RXSR_BUFFNA_MASK)
- {
- FXMAC_OS_XMAC_PRINT_I("Receive buffer not available\r\n");
- FXmacRecvHandler(arg);
- SetupRxBds(instance_p, rxring);
- }
- break;
- case FXMAC_SEND:
- if (error_word & FXMAC_TXSR_HRESPNOK_MASK)
- {
- FXMAC_OS_XMAC_PRINT_I("Transmit DMA error\r\n");
- FXmacHandleDmaTxError(instance_p);
- }
- if (error_word & FXMAC_TXSR_URUN_MASK)
- {
- FXMAC_OS_XMAC_PRINT_I("Transmit under run\r\n");
- FXmacHandleTxErrors(instance_p);
- }
- if (error_word & FXMAC_TXSR_BUFEXH_MASK)
- {
- FXMAC_OS_XMAC_PRINT_I("Transmit buffer exhausted\r\n");
- FXmacHandleTxErrors(instance_p);
- }
- if (error_word & FXMAC_TXSR_RXOVR_MASK)
- {
- FXMAC_OS_XMAC_PRINT_I("Transmit retry excessed limits\r\n");
- FXmacHandleTxErrors(instance_p);
- }
- if (error_word & FXMAC_TXSR_FRAMERX_MASK)
- {
- FXMAC_OS_XMAC_PRINT_I("Transmit collision\r\n");
- FXmacProcessSentBds(instance_p, txring);
- }
- break;
- }
- }
-}
-
-
-
-void FXmacLinkChange(void *args)
-{
- u32 ctrl;
- u32 link,link_status;
- u32 speed;
- u32 speed_bit;
- u32 duplex;
- u32 status = FT_SUCCESS;
-
- FXmac *xmac_p;
- FXmacOs *instance_p;
-
- instance_p = (FXmacOs *)args;
- xmac_p = &instance_p->instance;
-
- if(xmac_p->config.interface == FXMAC_PHY_INTERFACE_MODE_SGMII)
- {
- FXMAC_OS_XMAC_PRINT_I("xmac_p->config.base_address is %p \r\n",xmac_p->config.base_address);
- ctrl = FXMAC_READREG32(xmac_p->config.base_address, FXMAC_PCS_AN_LP_OFFSET);
- link = (ctrl & FXMAC_PCS_LINK_PARTNER_NEXT_PAGE_STATUS) >> 15 ;
- FXMAC_OS_XMAC_PRINT_I("link status is 0x%x\r\n", link);
-
- switch(link)
- {
- case 0:
- link_status = FXMAC_LINKDOWN;
- break;
- case 1:
- link_status = FXMAC_LINKUP;
- break;
- default:
- FXMAC_OS_XMAC_PRINT_E("link status is error 0x%x \r\n",link);
- return;
- }
-
- if (xmac_p->config.auto_neg == 0)
- {
- if(link_status == FXMAC_LINKUP)
- {
- FXMAC_OS_XMAC_PRINT_I("No neg link up (%d/%s)\r\n",xmac_p->config.speed ,xmac_p->config.duplex == 1 ?"FULL":"Half");
- xmac_p->link_status = FXMAC_NEGOTIATING;
- }
- else
- {
- FXMAC_OS_XMAC_PRINT_I("No neg link down \r\n");
- xmac_p->link_status = FXMAC_LINKDOWN;
- }
- }
-
- /* read sgmii reg to get status */
- ctrl = FXMAC_READREG32(xmac_p->config.base_address, FXMAC_PCS_AN_LP_OFFSET);
- speed_bit =(ctrl&FXMAC_PCS_AN_LP_SPEED)>> FXMAC_PCS_AN_LP_SPEED_OFFSET ;
- duplex =(ctrl&FXMAC_PCS_AN_LP_DUPLEX)>> FXMAC_PCS_AN_LP_DUPLEX_OFFSET ;
-
- if(speed_bit == 2)
- {
- speed = FXMAC_SPEED_1000;
- }
- else if(speed_bit == 1)
- {
- speed = FXMAC_SPEED_100;
- }
- else
- {
- speed = FXMAC_SPEED_10;
- }
-
- if(link_status != xmac_p->link_status)
- {
- FXMAC_OS_XMAC_PRINT_I("sgmii link_status has changed \r\n");
- }
-
- /* add erase NCFGR config */
- if((speed != xmac_p->config.speed) || (duplex != xmac_p->config.duplex) )
- {
- FXMAC_OS_XMAC_PRINT_I("sgmii link_status has changed \r\n");
- FXMAC_OS_XMAC_PRINT_I("new speed is %d, duplex is %d\r\n", speed, duplex);
- }
-
- if(link_status == FXMAC_LINKUP)
- {
- if(link_status != xmac_p->link_status)
- {
- xmac_p->link_status = FXMAC_NEGOTIATING;
- FXMAC_OS_XMAC_PRINT_I("need NEGOTIATING");
- }
- }
- else
- {
- xmac_p->link_status = link_status;
- FXMAC_OS_XMAC_PRINT_I("change status is 0x%x",link_status);
- }
- }
-}
-
-
-/* phy */
-
-/**
- * @name: phy_link_detect
- * @msg: 获取当前link status
- * @note:
- * @param {FXmac} *fxmac_p
- * @param {u32} phy_addr
- * @return {*} 1 is link up , 0 is link down
- */
-static u32 phy_link_detect(FXmac *xmac_p, u32 phy_addr)
-{
- u16 status;
-
- /* Read Phy Status register twice to get the confirmation of the current
- * link status.
- */
-
- FXmacPhyRead(xmac_p, phy_addr, PHY_STATUS_REG_OFFSET, &status);
-
- if (status & PHY_STAT_LINK_STATUS)
- return 1;
- return 0;
-}
-
-static u32 phy_autoneg_status(FXmac *xmac_p, u32 phy_addr)
-{
- u16 status;
-
- /* Read Phy Status register twice to get the confirmation of the current
- * link status.
- */
- FXmacPhyRead(xmac_p, phy_addr, PHY_STATUS_REG_OFFSET, &status);
-
- if (status & PHY_STATUS_AUTONEGOTIATE_COMPLETE)
- return 1;
- return 0;
-}
-
-enum ethernet_link_status FXmacLwipPortLinkDetect(FXmacOs *instance_p)
-{
- u32 link_speed, phy_link_status;
- FXmac *xmac_p = &instance_p->instance;
-
- if (xmac_p->is_ready != (u32)FT_COMPONENT_IS_READY)
- {
- return ETH_LINK_UNDEFINED;
- }
-
- phy_link_status = phy_link_detect(xmac_p, xmac_p->phy_address);
-
- if ((xmac_p->link_status == FXMAC_LINKUP) && (!phy_link_status))
- xmac_p->link_status = FXMAC_LINKDOWN;
-
- switch (xmac_p->link_status)
- {
- case FXMAC_LINKUP:
- return ETH_LINK_UP;
- case FXMAC_LINKDOWN:
- xmac_p->link_status = FXMAC_NEGOTIATING;
- FXMAC_OS_XMAC_PRINT_D("Ethernet Link down");
- return ETH_LINK_DOWN;
- case FXMAC_NEGOTIATING:
- if ((phy_link_status == FXMAC_LINKUP) && phy_autoneg_status(xmac_p, xmac_p->phy_address))
- {
- err_t phy_ret;
- phy_ret = FXmacPhyInit(xmac_p,xmac_p->config.speed,xmac_p->config.duplex,xmac_p->config.auto_neg);
-
- if (phy_ret != FT_SUCCESS)
- {
- FXMAC_OS_XMAC_PRINT_E("FXmacPhyInit is error \r\n");
- return ETH_LINK_DOWN;
- }
- FXmacSelectClk(xmac_p);
- FXmacInitInterface(xmac_p);
-
- /* Initiate Phy setup to get link speed */
- xmac_p->link_status = FXMAC_LINKUP;
- FXMAC_OS_XMAC_PRINT_D("Ethernet Link up");
- return ETH_LINK_UP;
- }
- return ETH_LINK_DOWN;
- default:
- return ETH_LINK_DOWN;
-
- }
-}
-
-enum ethernet_link_status FXmacPhyReconnect(struct LwipPort *xmac_netif_p)
-{
- FXmac *xmac_p;
- FXmacOs *instance_p;
- // ethernetif *ethernetif_p;
- FASSERT(xmac_netif_p != NULL);
- FASSERT(xmac_netif_p->state != NULL);
-
- instance_p = (FXmacOs *)(xmac_netif_p->state);
-
- xmac_p = &instance_p->instance;
-
- if(xmac_p->config.interface == FXMAC_PHY_INTERFACE_MODE_SGMII)
- {
- InterruptMask(xmac_p->config.queue_irq_num[0]);
- if(xmac_p->link_status == FXMAC_NEGOTIATING )
- {
- /* 重新自协商 */
- err_t phy_ret;
- phy_ret = FXmacPhyInit(xmac_p,xmac_p->config.speed,xmac_p->config.duplex,xmac_p->config.auto_neg);
- if (phy_ret != FT_SUCCESS)
- {
- FXMAC_OS_XMAC_PRINT_I("FXmacPhyInit is error \r\n");
- InterruptUmask(xmac_p->config.queue_irq_num[0]);
- return ETH_LINK_DOWN;
- }
- FXmacSelectClk(xmac_p);
- FXmacInitInterface(xmac_p);
- xmac_p->link_status = FXMAC_LINKUP;
- }
-
- InterruptUmask(xmac_p->config.queue_irq_num[0]);
-
- switch (xmac_p->link_status)
- {
- case FXMAC_LINKDOWN:
- return ETH_LINK_DOWN;
- case FXMAC_LINKUP:
- return ETH_LINK_UP;
- default:
- return ETH_LINK_DOWN;
- }
- }
- else if((xmac_p->config.interface == FXMAC_PHY_INTERFACE_MODE_RMII)||(xmac_p->config.interface == FXMAC_PHY_INTERFACE_MODE_RGMII ))
- {
- return FXmacLwipPortLinkDetect(instance_p);
- }
- else
- {
- switch (xmac_p->link_status)
- {
- case FXMAC_LINKDOWN:
- return ETH_LINK_DOWN;
- case FXMAC_LINKUP:
- return ETH_LINK_UP;
- default:
- return ETH_LINK_DOWN;
- }
- }
-}
-
-static void FxmacOsIntrHandler(s32 vector, void *args)
-{
- isr_calling_flg++;
- FXmacIntrHandler(vector,args);
- isr_calling_flg--;
-}
-
-
-static void FXmacSetupIsr(FXmacOs *instance_p)
-{
- u32 cpu_id;
- GetCpuId(&cpu_id);
- InterruptSetTargetCpus(instance_p->instance.config.queue_irq_num[0],cpu_id);
- /* Setup callbacks */
- FXmacSetHandler(&instance_p->instance, FXMAC_HANDLER_DMASEND, FXmacSendHandler, instance_p);
- FXmacSetHandler(&instance_p->instance, FXMAC_HANDLER_DMARECV, FXmacRecvHandler, instance_p);
- FXmacSetHandler(&instance_p->instance, FXMAC_HANDLER_ERROR, FXmacErrorHandler, instance_p);
- FXmacSetHandler(&instance_p->instance, FXMAC_HANDLER_LINKCHANGE, FXmacLinkChange, instance_p);
-
- InterruptSetPriority(instance_p->instance.config.queue_irq_num[0], IRQ_PRIORITY_VALUE_12);
- InterruptInstall(instance_p->instance.config.queue_irq_num[0], FxmacOsIntrHandler, &instance_p->instance, "fxmac");
- InterruptUmask(instance_p->instance.config.queue_irq_num[0]);
-}
-
-/* init fxmac instance */
-
-static void FXmacInitOnError(FXmacOs *instance_p)
-{
- FXmac *xmac_p;
- u32 status = FT_SUCCESS;
- xmac_p = &instance_p->instance;
-
- /* set mac address */
- status = FXmacSetMacAddress(xmac_p, (void*)(instance_p->hwaddr), 1);
- if (status != FT_SUCCESS)
- {
- FXMAC_OS_XMAC_PRINT_E("In %s:Emac Mac Address set failed...\r\n",__func__);
- }
-}
-
-
-
-/* step 1: initialize instance */
-/* step 2: depend on config set some options : JUMBO / IGMP */
-/* step 3: FXmacSelectClk */
-/* step 4: FXmacInitInterface */
-/* step 5: initialize phy */
-/* step 6: initialize dma */
-/* step 7: initialize interrupt */
-/* step 8: start mac */
-
-FError FXmacOsInit(FXmacOs *instance_p)
-{
- FXmacConfig mac_config;
- const FXmacConfig *mac_config_p;
- FXmacPhyInterface interface = FXMAC_PHY_INTERFACE_MODE_SGMII;
- FXmac *xmac_p;
- u32 dmacrreg;
- FError status;
- FASSERT(instance_p != NULL);
- FASSERT( instance_p->mac_config.instance_id < FT_XMAC_NUM);
-
- xmac_p = &instance_p->instance;
- FXMAC_OS_XMAC_PRINT_I("instance_id IS %d \r\n",instance_p->mac_config.instance_id);
- mac_config_p = FXmacLookupConfig(instance_p->mac_config.instance_id);
- if(mac_config_p == NULL)
- {
- FXMAC_OS_XMAC_PRINT_E("FXmacLookupConfig is error , instance_id is %d",instance_p->mac_config.instance_id);
- return FREERTOS_XMAC_INIT_ERROR;
- }
- mac_config = *mac_config_p;
- switch (instance_p->mac_config.interface)
- {
- case FXMAC_OS_INTERFACE_SGMII:
- interface = FXMAC_PHY_INTERFACE_MODE_SGMII;
- FXMAC_OS_XMAC_PRINT_I("SGMII select");
- break;
- case FXMAC_OS_INTERFACE_RMII:
- interface = FXMAC_PHY_INTERFACE_MODE_RMII;
- FXMAC_OS_XMAC_PRINT_I("RMII select");
- break;
- case FXMAC_OS_INTERFACE_RGMII:
- FXMAC_OS_XMAC_PRINT_I("RGMII select");
- interface = FXMAC_PHY_INTERFACE_MODE_RGMII;
- break;
- default:
- FXMAC_OS_XMAC_PRINT_E("update interface is error , interface is %d",instance_p->mac_config.instance_id);
- return FREERTOS_XMAC_INIT_ERROR;
- }
- mac_config.interface = interface;
-
- if(instance_p->mac_config.autonegotiation)
- {
- mac_config.auto_neg = 1;
- }
- else
- {
- mac_config.auto_neg = 0;
- }
-
- switch (instance_p->mac_config.phy_speed)
- {
- case FXMAC_PHY_SPEED_10M:
- mac_config.speed = FXMAC_SPEED_10;
- break;
- case FXMAC_PHY_SPEED_100M:
- mac_config.speed = FXMAC_SPEED_100;
- break;
- case FXMAC_PHY_SPEED_1000M:
- mac_config.speed = FXMAC_SPEED_1000;
- break;
- default:
- FXMAC_OS_XMAC_PRINT_E("setting speed is not valid , speed is %d",instance_p->mac_config.phy_speed);
- return FREERTOS_XMAC_INIT_ERROR;
- }
-
- status = FXmacCfgInitialize(xmac_p, &mac_config);
- if (status != FT_SUCCESS)
- {
- FXMAC_OS_XMAC_PRINT_E("In %s:EmacPs Configuration Failed....\r\n", __func__);
- }
-
- if(instance_p->config & FXMAC_OS_CONFIG_JUMBO)
- {
- printf("FXMAC_JUMBO_ENABLE_OPTION is ok \r\n");
- FXmacSetOptions(xmac_p, FXMAC_JUMBO_ENABLE_OPTION, 0);
- }
-
- if(instance_p->config & FXMAC_OS_CONFIG_MULTICAST_ADDRESS_FILITER)
- {
- FXmacSetOptions(xmac_p, FXMAC_MULTICAST_OPTION,0);
- }
-
- /* enable copy all frames */
- if(instance_p->config & FXMAC_OS_CONFIG_COPY_ALL_FRAMES)
- {
- FXmacSetOptions(xmac_p, FXMAC_PROMISC_OPTION,0);
- }
-
- status = FXmacSetMacAddress(xmac_p, (void*)(instance_p->hwaddr), 0);
- if (status != FT_SUCCESS)
- {
- FXMAC_OS_XMAC_PRINT_E("In %s:Emac Mac Address set failed...\r\n",__func__);
- }
-
- /* close fcs check */
- if(instance_p->config & FXMAC_OS_CONFIG_CLOSE_FCS_CHECK)
- {
- FXmacSetOptions(xmac_p, FXMAC_FCS_STRIP_OPTION,0);
- }
-
- /* initialize phy */
- status = FXmacPhyInit(xmac_p,xmac_p->config.speed,xmac_p->config.duplex,xmac_p->config.auto_neg);
- if (status != FT_SUCCESS)
- {
- FXMAC_OS_XMAC_PRINT_W("FXmacPhyInit is error \r\n");
- }
-
- FXmacSelectClk(xmac_p);
- FXmacInitInterface(xmac_p);
-
- /* initialize dma */
- dmacrreg = FXMAC_READREG32(xmac_p->config.base_address, FXMAC_DMACR_OFFSET);
- dmacrreg & ~(FXMAC_DMACR_BLENGTH_MASK);
- dmacrreg = dmacrreg | FXMAC_DMACR_INCR16_AHB_AXI_BURST; /* Attempt to use bursts of up to 16. */
- FXMAC_WRITEREG32(xmac_p->config.base_address, FXMAC_DMACR_OFFSET, dmacrreg);
- FXmacInitDma(instance_p);
-
- /* initialize interrupt */
- FXmacSetupIsr(instance_p);
-
- /* start mac */
- FXmacStart(&instance_p->instance);
- return FT_SUCCESS;
-}
-
-
-FError FXmacOsConfig(FXmacOs *instance_p,int cmd ,void *arg)
-{
- return FT_SUCCESS;
-}
-
-/**
- * @name: FXmacOsRx
- * @msg: void *FXmacOsRx(FXmacOs *instance_p)
- * @note:
- * @param {FXmacOs} *instance_p
- * @return {*}
- */
-void *FXmacOsRx(FXmacOs *instance_p)
-{
- FASSERT(instance_p != NULL);
- struct pbuf *p;
-
- /* see if there is data to process */
- if (FXmacPqQlength(&instance_p->recv_q) == 0)
- return NULL;
- /* return one packet from receive q */
- p = (struct pbuf *)FXmacPqDequeue(&instance_p->recv_q);
-
- return p;
-}
-
-static FError FXmacOsOutput(FXmacOs *instance_p, struct pbuf *p)
-{
- FError status = 0;
- status = FXmacSgsend(instance_p, p);
- if (status != FT_SUCCESS)
- {
-#if LINK_STATS
- lwip_stats.link.drop++;
-#endif
- }
-
-
-#if LINK_STATS
- lwip_stats.link.xmit++;
-#endif /* LINK_STATS */
-
- return status;
-}
-
-FError FXmacOsTx(FXmacOs *instance_p,void *tx_buf)
-{
- u32 freecnt;
- FXmacBdRing *txring;
- FError ret = FT_SUCCESS;
- struct pbuf *p;
- FASSERT(instance_p != NULL);
- if(tx_buf == NULL)
- {
- FXMAC_OS_XMAC_PRINT_E("tx_buf is null \r\n");
- return FREERTOS_XMAC_PARAM_ERROR;
- }
-
- p = tx_buf;
-
- /* check if space is available to send */
- freecnt = IsTxSpaceAvailable(instance_p);
-
- if (freecnt <= 5)
- {
- txring = &(FXMAC_GET_TXRING(instance_p->instance));
- FXmacProcessSentBds(instance_p, txring);
- }
-
- if (IsTxSpaceAvailable(instance_p))
- {
- FXmacOsOutput(instance_p, p);
- ret = FT_SUCCESS;
- }
- else
- {
-#if LINK_STATS
- lwip_stats.link.drop++;
-#endif
- FXMAC_OS_XMAC_PRINT_E("pack dropped, no space\r\n");
- ret = FREERTOS_XMAC_NO_VALID_SPACE;
- }
-
- return ret ;
-}
-
-FXmacOs *FXmacOsGetInstancePointer(FXmacOsControl *config_p)
-{
- FXmacOs *instance_p;
- FASSERT(config_p != NULL);
- FASSERT(config_p->instance_id < FT_XMAC_NUM);
- FASSERT_MSG(config_p->interface < FXMAC_OS_INTERFACE_LENGTH ,"config_p->interface %d is over %d",config_p->interface ,FXMAC_OS_INTERFACE_LENGTH);
- FASSERT_MSG(config_p->autonegotiation <= 1 ,"config_p->autonegotiation %d is over 1",config_p->autonegotiation );
- FASSERT_MSG(config_p->phy_speed <= FXMAC_PHY_SPEED_1000M ,"config_p->phy_speed %d is over 1000",config_p->phy_speed );
- FASSERT_MSG(config_p->phy_duplex <= FXMAC_PHY_FULL_DUPLEX ,"config_p->phy_duplex %d is over FXMAC_PHY_FULL_DUPLEX",config_p->phy_duplex );
-
- instance_p = &fxmac_os_instace[config_p->instance_id];
- memcpy(&instance_p->mac_config,config_p,sizeof(FXmacOsControl));
- return instance_p;
-}
\ No newline at end of file
diff --git a/drivers/eth/xmac/fxmac_os.c b/drivers/eth/xmac/fxmac_os.c
new file mode 100644
index 0000000000000000000000000000000000000000..817a0fe753f0e1df31037146a38a46e47c3220a5
--- /dev/null
+++ b/drivers/eth/xmac/fxmac_os.c
@@ -0,0 +1,1383 @@
+/*
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * All Rights Reserved.
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the Phytium Public License for more details.
+ *
+ *
+ * FilePath: fxmac_os.c
+ * Date: 2022-07-15 16:33:13
+ * LastEditTime: 2022-07-15 16:33:13
+ * Description: This file is for xmac driver.Functions in this file are the minimum required functions for drivers.
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 huanghe 2022/11/15 first release
+ */
+
+#include "fparameters.h"
+#include "fassert.h"
+#include "fxmac_os.h"
+#include "fxmac.h"
+#include "fcache.h"
+#include "fxmac_bdring.h"
+#include "lwip_port.h"
+#include "eth_ieee_reg.h"
+#include "fcpu_info.h"
+
+#ifdef __aarch64__
+ #include "faarch64.h"
+#else
+ #include "fcp15.h"
+#endif
+
+#include "FreeRTOS.h"
+#include "semphr.h"
+
+#include "fdebug.h"
+
+#define FXMAC_OS_XMAC_DEBUG_TAG "FXMAC_OS_XMAC"
+#define FXMAC_OS_XMAC_PRINT_E(format, ...) FT_DEBUG_PRINT_E(FXMAC_OS_XMAC_DEBUG_TAG, format, ##__VA_ARGS__)
+#define FXMAC_OS_XMAC_PRINT_I(format, ...) FT_DEBUG_PRINT_I(FXMAC_OS_XMAC_DEBUG_TAG, format, ##__VA_ARGS__)
+#define FXMAC_OS_XMAC_PRINT_D(format, ...) FT_DEBUG_PRINT_D(FXMAC_OS_XMAC_DEBUG_TAG, format, ##__VA_ARGS__)
+#define FXMAC_OS_XMAC_PRINT_W(format, ...) FT_DEBUG_PRINT_W(FXMAC_OS_XMAC_DEBUG_TAG, format, ##__VA_ARGS__)
+
+#define FXMAC_BD_TO_INDEX(ringptr, bdptr) \
+ (((uintptr)bdptr - (uintptr)(ringptr)->base_bd_addr) / (ringptr)->separation)
+
+static void FXmacInitOnError(FXmacOs *instance_p);
+static void FXmacSetupIsr(FXmacOs *instance_p);
+extern void sys_sem_signal(sys_sem_t *sem);
+static FXmacOs fxmac_os_instace[FXMAC_NUM] =
+{
+ [FXMAC0_ID] = {.config = (0)},
+ [FXMAC1_ID] = {.config = (0)},
+ [FXMAC2_ID] = {.config = (0)},
+ [FXMAC3_ID] = {.config = (0)},
+};
+
+int isr_calling_flg = 0;
+
+/* queue */
+
+void FXmacQueueInit(PqQueue *q)
+{
+ FASSERT(q != NULL);
+ q->head = q->tail = q->len = 0;
+}
+
+int FXmacPqEnqueue(PqQueue *q, void *p)
+{
+ if (q->len == PQ_QUEUE_SIZE)
+ {
+ return -1;
+ }
+
+ q->data[q->head] = (uintptr)p;
+ q->head = (q->head + 1) % PQ_QUEUE_SIZE;
+ q->len++;
+
+ return 0;
+}
+
+void *FXmacPqDequeue(PqQueue *q)
+{
+ int ptail;
+
+ if (q->len == 0)
+ {
+ return NULL;
+ }
+
+ ptail = q->tail;
+ q->tail = (q->tail + 1) % PQ_QUEUE_SIZE;
+ q->len--;
+
+ return (void *)q->data[ptail];
+}
+
+int FXmacPqQlength(PqQueue *q)
+{
+ return q->len;
+}
+
+/* dma */
+
+/**
+ * @name: IsTxSpaceAvailable
+ * @msg: 获取当前bdring 剩余计数
+ * @param {ethernetif} *ethernetif_p
+ * @return {*} 返回
+ */
+static u32 IsTxSpaceAvailable(FXmacOs *instance_p)
+{
+ FXmacBdRing *txring;
+ u32 freecnt = 0;
+ FASSERT(instance_p != NULL);
+
+ txring = &(FXMAC_GET_TXRING(instance_p->instance));
+
+ /* tx space is available as long as there are valid BD's */
+ freecnt = FXMAC_BD_RING_GET_FREE_CNT(txring);
+ return freecnt;
+}
+
+/**
+ * @name: FXmacProcessSentBds
+ * @msg: 释放发送队列q参数
+ * @return {*}
+ * @param {ethernetif} *ethernetif_p
+ * @param {FXmacBdRing} *txring
+ */
+void FXmacProcessSentBds(FXmacOs *instance_p, FXmacBdRing *txring)
+{
+ FXmacBd *txbdset;
+ FXmacBd *curbdpntr;
+ u32 n_bds;
+ FError status;
+ u32 n_pbufs_freed = 0;
+ u32 bdindex;
+ struct pbuf *p;
+ u32 *temp;
+
+ while (1)
+ {
+ /* obtain processed BD's */
+ n_bds = FXmacBdRingFromHwTx(txring, FXMAX_TX_PBUFS_LENGTH, &txbdset);
+ if (n_bds == 0)
+ {
+ return;
+ }
+ /* free the processed BD's */
+ n_pbufs_freed = n_bds;
+ curbdpntr = txbdset;
+ while (n_pbufs_freed > 0)
+ {
+ bdindex = FXMAC_BD_TO_INDEX(txring, curbdpntr);
+ temp = (u32 *)curbdpntr;
+ *temp = 0; /* Word 0 */
+ temp++;
+ if (bdindex == (FXMAX_TX_PBUFS_LENGTH - 1))
+ {
+ *temp = 0xC0000000; /* Word 1 ,used/Wrap – marks last descriptor in transmit buffer descriptor list.*/
+ }
+ else
+ {
+ *temp = 0x80000000; /* Word 1 , Used – must be zero for GEM to read data to the transmit buffer.*/
+ }
+ DSB();
+
+ p = (struct pbuf *)instance_p->buffer.tx_pbufs_storage[bdindex];
+
+ if (p != NULL)
+ {
+ pbuf_free(p);
+ }
+ instance_p->buffer.tx_pbufs_storage[bdindex] = (uintptr)NULL;
+ curbdpntr = FXMAC_BD_RING_NEXT(txring, curbdpntr);
+ n_pbufs_freed--;
+ DSB();
+ }
+
+ status = FXmacBdRingFree(txring, n_bds, txbdset);
+ if (status != FT_SUCCESS)
+ {
+ FXMAC_OS_XMAC_PRINT_I("Failure while freeing in Tx Done ISR.");
+ }
+ }
+ return;
+}
+
+void FXmacSendHandler(void *arg)
+{
+ FXmacOs *instance_p;
+ FXmacBdRing *txringptr;
+ u32 regval;
+
+ instance_p = (FXmacOs *)arg;
+ txringptr = &(FXMAC_GET_TXRING(instance_p->instance));
+ regval = FXMAC_READREG32(instance_p->instance.config.base_address, FXMAC_TXSR_OFFSET);
+ FXMAC_WRITEREG32(instance_p->instance.config.base_address, FXMAC_TXSR_OFFSET, regval); /* 清除中断状态位来停止中断 */
+
+ /* If Transmit done interrupt is asserted, process completed BD's */
+ FXmacProcessSentBds(instance_p, txringptr);
+}
+
+FError FXmacSgsend(FXmacOs *instance_p, struct pbuf *p)
+{
+ struct pbuf *q;
+ u32 n_pbufs;
+ FXmacBd *txbdset, *txbd, *last_txbd = NULL;
+ FXmacBd *temp_txbd;
+ FError status;
+ FXmacBdRing *txring;
+ u32 bdindex;
+ u32 lev;
+ u32 max_fr_size;
+
+ lev = MFCPSR();
+ MTCPSR(lev | 0xC0); /* Mask IRQ and FIQ interrupts in cpsr */
+
+ txring = &(FXMAC_GET_TXRING(instance_p->instance));
+
+ /* first count the number of pbufs */
+ for (q = p, n_pbufs = 0; q != NULL; q = q->next)
+ {
+ n_pbufs++;
+ }
+
+ /* obtain as many BD's */
+ status = FXmacBdRingAlloc(txring, n_pbufs, &txbdset);
+ if (status != FT_SUCCESS)
+ {
+ MTCPSR(lev);
+ FXMAC_OS_XMAC_PRINT_I("sgsend: Error allocating TxBD.");
+ return ERR_GENERAL;
+ }
+
+ for (q = p, txbd = txbdset; q != NULL; q = q->next)
+ {
+ bdindex = FXMAC_BD_TO_INDEX(txring, txbd);
+
+ if (instance_p->buffer.tx_pbufs_storage[bdindex])
+ {
+ MTCPSR(lev);
+ FXMAC_OS_XMAC_PRINT_I("txbd %p, txring->base_bd_addr %p", txbd, txring->base_bd_addr);
+ FXMAC_OS_XMAC_PRINT_I("PBUFS not available bdindex is %d ", bdindex);
+ FXMAC_OS_XMAC_PRINT_I("instance_p->buffer.tx_pbufs_storage[bdindex] %p ", instance_p->buffer.tx_pbufs_storage[bdindex]);
+ return ERR_GENERAL;
+ }
+
+ /* Send the data from the pbuf to the interface, one pbuf at a
+ time. The size of the data in each pbuf is kept in the ->len
+ variable. */
+ FCacheDCacheFlushRange((uintptr)q->payload, (uintptr)q->len);
+ FXMAC_BD_SET_ADDRESS_TX(txbd, (uintptr)q->payload);
+
+ if (instance_p->config & FXMAC_OS_CONFIG_JUMBO)
+ {
+ max_fr_size = FXMAC_MAX_FRAME_SIZE_JUMBO - 18;
+ }
+ else
+ {
+ max_fr_size = FXMAC_MAX_FRAME_SIZE - 18;
+ }
+
+ if (q->len > max_fr_size)
+ {
+ FXMAC_BD_SET_LENGTH(txbd, max_fr_size & 0x3FFF);
+ }
+ else
+ {
+ FXMAC_BD_SET_LENGTH(txbd, q->len & 0x3FFF);
+ }
+
+ instance_p->buffer.tx_pbufs_storage[bdindex] = (uintptr)q;
+
+ pbuf_ref(q);
+ last_txbd = txbd;
+ FXMAC_BD_CLEAR_LAST(txbd);
+ txbd = FXMAC_BD_RING_NEXT(txring, txbd);
+ }
+ FXMAC_BD_SET_LAST(last_txbd);
+ /* For fragmented packets, remember the 1st BD allocated for the 1st
+ packet fragment. The used bit for this BD should be cleared at the end
+ after clearing out used bits for other fragments. For packets without
+ just remember the allocated BD. */
+ temp_txbd = txbdset;
+ txbd = txbdset;
+ txbd = FXMAC_BD_RING_NEXT(txring, txbd);
+ q = p->next;
+ for (; q != NULL; q = q->next)
+ {
+ FXMAC_BD_CLEAR_TX_USED(txbd);
+ DSB();
+ txbd = FXMAC_BD_RING_NEXT(txring, txbd);
+ }
+ FXMAC_BD_CLEAR_TX_USED(temp_txbd);
+ DSB();
+
+ status = FXmacBdRingToHw(txring, n_pbufs, txbdset);
+ if (status != FT_SUCCESS)
+ {
+ MTCPSR(lev);
+ FXMAC_OS_XMAC_PRINT_I("sgsend: Error submitting TxBD.");
+ return ERR_GENERAL;
+ }
+ /* Start transmit */
+ FXMAC_WRITEREG32((instance_p->instance).config.base_address,
+ FXMAC_NWCTRL_OFFSET,
+ (FXMAC_READREG32(instance_p->instance.config.base_address,
+ FXMAC_NWCTRL_OFFSET) |
+ FXMAC_NWCTRL_STARTTX_MASK));
+
+ MTCPSR(lev);
+
+ return status;
+}
+
+void SetupRxBds(FXmacOs *instance_p, FXmacBdRing *rxring)
+{
+ FXmacBd *rxbd;
+ FError status;
+ struct pbuf *p;
+ u32 freebds;
+ u32 bdindex;
+ u32 *temp;
+ freebds = FXMAC_BD_RING_GET_FREE_CNT(rxring);
+ while (freebds > 0)
+ {
+ freebds--;
+
+ if (instance_p->config & FXMAC_OS_CONFIG_JUMBO)
+ {
+ p = pbuf_alloc(PBUF_RAW, FXMAC_MAX_FRAME_SIZE_JUMBO, PBUF_POOL);
+ }
+ else
+ {
+ p = pbuf_alloc(PBUF_RAW, FXMAC_MAX_FRAME_SIZE, PBUF_POOL);
+ }
+
+ if (!p)
+ {
+#if LINK_STATS
+ lwip_stats.link.memerr++;
+ lwip_stats.link.drop++;
+#endif
+ FXMAC_OS_XMAC_PRINT_I("Unable to alloc pbuf in recv_handler.");
+ return;
+ }
+ status = FXmacBdRingAlloc(rxring, 1, &rxbd);
+ if (status != FT_SUCCESS)
+ {
+ FXMAC_OS_XMAC_PRINT_I("SetupRxBds: Error allocating RxBD.");
+ pbuf_free(p);
+ return;
+ }
+ status = FXmacBdRingToHw(rxring, 1, rxbd);
+ if (status != FT_SUCCESS)
+ {
+ FXMAC_OS_XMAC_PRINT_I("Error committing RxBD to hardware: ");
+ if (status == FXMAC_ERR_SG_LIST)
+ {
+ FXMAC_OS_XMAC_PRINT_I("XST_DMA_SG_LIST_ERROR: this function was called out of sequence with FXmacBdRingAlloc().");
+ }
+ else
+ {
+ FXMAC_OS_XMAC_PRINT_I("Set of BDs was rejected because the first BD did not have its start-of-packet bit set, or the last BD did not have its end-of-packet bit set, or any one of the BD set has 0 as length value.");
+ }
+
+ pbuf_free(p);
+ FXmacBdRingUnAlloc(rxring, 1, rxbd);
+ return;
+ }
+
+ if (instance_p->config & FXMAC_OS_CONFIG_JUMBO)
+ {
+ FCacheDCacheInvalidateRange((uintptr)p->payload, (uintptr)MAX_FRAME_SIZE_JUMBO);
+ }
+ else
+ {
+ FCacheDCacheInvalidateRange((uintptr)p->payload, (uintptr)FXMAC_MAX_FRAME_SIZE);
+ }
+
+ bdindex = FXMAC_BD_TO_INDEX(rxring, rxbd);
+ temp = (u32 *)rxbd;
+ if (bdindex == (FXMAX_RX_PBUFS_LENGTH - 1))
+ {
+ *temp = 0x00000002;
+ }
+ else
+ {
+ *temp = 0;
+ }
+ temp++;
+ *temp = 0;
+ DSB();
+
+ FXMAC_BD_SET_ADDRESS_RX(rxbd, (uintptr)p->payload);
+ instance_p->buffer.rx_pbufs_storage[bdindex] = (uintptr)p;
+ }
+}
+
+void FXmacRecvHandler(void *arg)
+{
+ struct pbuf *p;
+ FXmacBd *rxbdset, *curbdptr;
+ struct LwipPort *xmac_netif_p;
+ FXmacBdRing *rxring;
+ volatile u32 bd_processed;
+ u32 rx_bytes, k;
+ u32 bdindex;
+ u32 regval;
+ u32 index;
+ u32 gigeversion;
+ FXmacOs *instance_p;
+ FASSERT(arg != NULL);
+
+ instance_p = (FXmacOs *)arg;
+ xmac_netif_p = (struct LwipPort *)instance_p->stack_pointer;
+ rxring = &FXMAC_GET_RXRING(instance_p->instance);
+
+ /* If Reception done interrupt is asserted, call RX call back function
+ to handle the processed BDs and then raise the according flag.*/
+ regval = FXMAC_READREG32(instance_p->instance.config.base_address, FXMAC_RXSR_OFFSET);
+ FXMAC_WRITEREG32(instance_p->instance.config.base_address, FXMAC_RXSR_OFFSET, regval);
+
+ while (1)
+ {
+ bd_processed = FXmacBdRingFromHwRx(rxring, FXMAX_RX_PBUFS_LENGTH, &rxbdset);
+ if (bd_processed <= 0)
+ {
+ break;
+ }
+
+ for (k = 0, curbdptr = rxbdset; k < bd_processed; k++)
+ {
+
+ bdindex = FXMAC_BD_TO_INDEX(rxring, curbdptr);
+ p = (struct pbuf *)instance_p->buffer.rx_pbufs_storage[bdindex];
+ /*
+ * Adjust the buffer size to the actual number of bytes received.
+ */
+ if (instance_p->config & FXMAC_OS_CONFIG_JUMBO)
+ {
+ rx_bytes = FXMAC_GET_RX_FRAME_SIZE(&(instance_p->instance), curbdptr);
+ }
+ else
+ {
+ rx_bytes = FXMAC_BD_GET_LENGTH(curbdptr);
+ }
+ pbuf_realloc(p, rx_bytes);
+
+ /* Invalidate RX frame before queuing to handle
+ * L1 cache prefetch conditions on any architecture.
+ */
+ FCacheDCacheInvalidateRange((uintptr)p->payload, rx_bytes);
+
+ /* store it in the receive queue,
+ * where it'll be processed by a different handler
+ */
+ if (FXmacPqEnqueue(&instance_p->recv_q, (void *)p) < 0)
+ {
+#if LINK_STATS
+ lwip_stats.link.memerr++;
+ lwip_stats.link.drop++;
+#endif
+ pbuf_free(p);
+ }
+ instance_p->buffer.rx_pbufs_storage[bdindex] = (uintptr)NULL;
+ curbdptr = FXMAC_BD_RING_NEXT(rxring, curbdptr);
+ }
+
+ /* free up the BD's */
+ FXmacBdRingFree(rxring, bd_processed, rxbdset);
+ SetupRxBds(instance_p, rxring);
+#if !NO_SYS
+ sys_sem_signal(&xmac_netif_p->sem_rx_data_available);
+#endif
+ }
+
+ return;
+}
+
+void CleanDmaTxdescs(FXmacOs *instance_p)
+{
+ FXmacBd bdtemplate;
+ FXmacBdRing *txringptr;
+
+ txringptr = &FXMAC_GET_TXRING((instance_p->instance));
+ FXMAC_BD_CLEAR(&bdtemplate);
+ FXMAC_BD_SET_STATUS(&bdtemplate, FXMAC_TXBUF_USED_MASK);
+
+ FXmacBdRingCreate(txringptr, (uintptr)instance_p->buffer.tx_bdspace,
+ (uintptr)instance_p->buffer.tx_bdspace, BD_ALIGNMENT,
+ sizeof(instance_p->buffer.tx_bdspace));
+
+ FXmacBdRingClone(txringptr, &bdtemplate, FXMAC_SEND);
+}
+
+FError FXmacInitDma(FXmacOs *instance_p)
+{
+ FXmacBd bdtemplate;
+ FXmacBdRing *rxringptr, *txringptr;
+ FXmacBd *rxbd;
+ struct pbuf *p;
+ FError status;
+ int i;
+ u32 bdindex;
+ volatile uintptr tempaddress;
+ u32 gigeversion;
+ FXmacBd *bdtxterminate;
+ FXmacBd *bdrxterminate;
+ u32 *temp;
+
+
+ /*
+ * The BDs need to be allocated in uncached memory. Hence the 1 MB
+ * address range allocated for Bd_Space is made uncached
+ * by setting appropriate attributes in the translation table.
+ * The Bd_Space is aligned to 1MB and has a size of 1 MB. This ensures
+ * a reserved uncached area used only for BDs.
+ */
+
+ rxringptr = &FXMAC_GET_RXRING(instance_p->instance);
+ txringptr = &FXMAC_GET_TXRING(instance_p->instance);
+ FXMAC_OS_XMAC_PRINT_I("rxringptr: 0x%08x", rxringptr);
+ FXMAC_OS_XMAC_PRINT_I("txringptr: 0x%08x", txringptr);
+
+ FXMAC_OS_XMAC_PRINT_I("rx_bdspace: %p ", instance_p->buffer.rx_bdspace);
+ FXMAC_OS_XMAC_PRINT_I("tx_bdspace: %p ", instance_p->buffer.tx_bdspace);
+
+ /* Setup RxBD space. */
+ FXMAC_BD_CLEAR(&bdtemplate);
+
+ /* Create the RxBD ring */
+ status = FXmacBdRingCreate(rxringptr, (uintptr)instance_p->buffer.rx_bdspace,
+ (uintptr)instance_p->buffer.rx_bdspace, BD_ALIGNMENT,
+ FXMAX_RX_PBUFS_LENGTH);
+
+ if (status != FT_SUCCESS)
+ {
+ FXMAC_OS_XMAC_PRINT_I("Error setting up RxBD space.");
+ return ERR_IF;
+ }
+
+ status = FXmacBdRingClone(rxringptr, &bdtemplate, FXMAC_RECV);
+ if (status != FT_SUCCESS)
+ {
+ FXMAC_OS_XMAC_PRINT_I("Error initializing RxBD space.");
+ return ERR_IF;
+ }
+
+ FXMAC_BD_CLEAR(&bdtemplate);
+ FXMAC_BD_SET_STATUS(&bdtemplate, FXMAC_TXBUF_USED_MASK);
+
+ /* Create the TxBD ring */
+ status = FXmacBdRingCreate(txringptr, (uintptr)instance_p->buffer.tx_bdspace,
+ (uintptr)instance_p->buffer.tx_bdspace, BD_ALIGNMENT,
+ FXMAX_TX_PBUFS_LENGTH);
+
+ if (status != FT_SUCCESS)
+ {
+ return ERR_IF;
+ }
+
+ /* We reuse the bd template, as the same one will work for both rx and tx. */
+ status = FXmacBdRingClone(txringptr, &bdtemplate, FXMAC_SEND);
+ if (status != FT_SUCCESS)
+ {
+ return ERR_IF;
+ }
+
+ /*
+ * Allocate RX descriptors, 1 RxBD at a time.
+ */
+ for (i = 0; i < FXMAX_RX_PBUFS_LENGTH; i++)
+ {
+ if (instance_p->config & FXMAC_OS_CONFIG_JUMBO)
+ {
+ p = pbuf_alloc(PBUF_RAW, FXMAC_MAX_FRAME_SIZE_JUMBO, PBUF_POOL);
+ }
+ else
+ {
+ p = pbuf_alloc(PBUF_RAW, FXMAC_MAX_FRAME_SIZE, PBUF_POOL);
+ }
+
+ if (!p)
+ {
+#if LINK_STATS
+ lwip_stats.link.memerr++;
+ lwip_stats.link.drop++;
+#endif
+ FXMAC_OS_XMAC_PRINT_E("Unable to alloc pbuf in InitDma.");
+ return ERR_IF;
+ }
+ status = FXmacBdRingAlloc(rxringptr, 1, &rxbd);
+ if (status != FT_SUCCESS)
+ {
+ FXMAC_OS_XMAC_PRINT_E("InitDma: Error allocating RxBD.");
+ pbuf_free(p);
+ return ERR_IF;
+ }
+ /* Enqueue to HW */
+ status = FXmacBdRingToHw(rxringptr, 1, rxbd);
+ if (status != FT_SUCCESS)
+ {
+ FXMAC_OS_XMAC_PRINT_E("Error: committing RxBD to HW.");
+ pbuf_free(p);
+ FXmacBdRingUnAlloc(rxringptr, 1, rxbd);
+ return ERR_IF;
+ }
+
+ bdindex = FXMAC_BD_TO_INDEX(rxringptr, rxbd);
+ temp = (u32 *)rxbd;
+ *temp = 0;
+ if (bdindex == (FXMAX_RX_PBUFS_LENGTH - 1))
+ {
+ *temp = 0x00000002;
+ }
+ temp++;
+ *temp = 0;
+ DSB();
+
+ if (instance_p->config & FXMAC_OS_CONFIG_JUMBO)
+ {
+ FCacheDCacheInvalidateRange((uintptr)p->payload, (uintptr)MAX_FRAME_SIZE_JUMBO);
+ }
+ else
+ {
+ FCacheDCacheInvalidateRange((uintptr)p->payload, (uintptr)FXMAC_MAX_FRAME_SIZE);
+ }
+ FXMAC_BD_SET_ADDRESS_RX(rxbd, (uintptr)p->payload);
+
+ instance_p->buffer.rx_pbufs_storage[bdindex] = (uintptr)p;
+ }
+
+ FXmacSetQueuePtr(&(instance_p->instance), instance_p->instance.tx_bd_queue.bdring.base_bd_addr, 0, (u16)FXMAC_SEND);
+ FXmacSetQueuePtr(&(instance_p->instance), instance_p->instance.rx_bd_queue.bdring.base_bd_addr, 0, (u16)FXMAC_RECV);
+
+ return 0;
+}
+
+static void FreeOnlyTxPbufs(FXmacOs *instance_p)
+{
+ u32 index;
+ struct pbuf *p;
+
+ for (index = 0; index < (FXMAX_TX_PBUFS_LENGTH); index++)
+ {
+ if (instance_p->buffer.tx_pbufs_storage[index] != 0)
+ {
+ p = (struct pbuf *)instance_p->buffer.tx_pbufs_storage[index];
+ pbuf_free(p);
+ instance_p->buffer.tx_pbufs_storage[index] = (uintptr)NULL;
+ }
+ instance_p->buffer.tx_pbufs_storage[index] = (uintptr)0;
+ }
+}
+
+
+static void FreeOnlyRxPbufs(FXmacOs *instance_p)
+{
+ u32 index;
+ struct pbuf *p;
+
+ for (index = 0; index < (FXMAX_RX_PBUFS_LENGTH); index++)
+ {
+ if (instance_p->buffer.rx_pbufs_storage[index] != 0)
+ {
+ p = (struct pbuf *)instance_p->buffer.rx_pbufs_storage[index];
+ pbuf_free(p);
+ instance_p->buffer.rx_pbufs_storage[index] = (uintptr)0;
+ }
+ }
+}
+
+
+static void FreeTxRxPbufs(FXmacOs *instance_p)
+{
+ u32 rx_queue_len = 0;
+ struct pbuf *p;
+ /* first :free PqQueue data */
+ rx_queue_len = FXmacPqQlength(&instance_p->recv_q);
+
+ while (rx_queue_len)
+ {
+ /* return one packet from receive q */
+ p = (struct pbuf *)FXmacPqDequeue(&instance_p->recv_q);
+ pbuf_free(p);
+ FXMAC_OS_XMAC_PRINT_E("Delete queue %p", p);
+ rx_queue_len--;
+ }
+ FreeOnlyTxPbufs(instance_p);
+ FreeOnlyRxPbufs(instance_p);
+
+}
+
+
+
+static void ResetDma(FXmacOs *instance_p)
+{
+ u8 txqueuenum;
+ u32 gigeversion;
+
+ FXmacBdRing *txringptr = &FXMAC_GET_TXRING(instance_p->instance);
+ FXmacBdRing *rxringptr = &FXMAC_GET_RXRING(instance_p->instance);
+
+ FXmacBdringPtrReset(txringptr, instance_p->buffer.tx_bdspace);
+ FXmacBdringPtrReset(rxringptr, instance_p->buffer.rx_bdspace);
+
+ FXmacSetQueuePtr(&(instance_p->instance), instance_p->instance.tx_bd_queue.bdring.base_bd_addr, 0, (u16)FXMAC_SEND);
+ FXmacSetQueuePtr(&(instance_p->instance), instance_p->instance.rx_bd_queue.bdring.base_bd_addr, 0, (u16)FXMAC_RECV);
+}
+
+/* interrupt */
+static void FXmacHandleDmaTxError(FXmacOs *instance_p)
+{
+ s32_t status = FT_SUCCESS;
+ u32 dmacrreg;
+
+ FreeTxRxPbufs(instance_p);
+ status = FXmacCfgInitialize(&instance_p->instance, &instance_p->instance.config);
+
+ if (status != FT_SUCCESS)
+ {
+ FXMAC_OS_XMAC_PRINT_E("In %s:EmacPs Configuration Failed....", __func__);
+ }
+
+ /* initialize the mac */
+ FXmacInitOnError(instance_p); /* need to set mac filter address */
+ dmacrreg = FXMAC_READREG32(instance_p->instance.config.base_address, FXMAC_DMACR_OFFSET);
+ dmacrreg = dmacrreg | (FXMAC_DMACR_ORCE_DISCARD_ON_ERR_MASK); /* force_discard_on_err */
+ FXMAC_WRITEREG32(instance_p->instance.config.base_address, FXMAC_DMACR_OFFSET, dmacrreg);
+ FXmacSetupIsr(instance_p);
+ FXmacInitDma(instance_p);
+
+ FXmacStart(&instance_p->instance);
+}
+
+void FXmacHandleTxErrors(FXmacOs *instance_p)
+{
+ u32 netctrlreg;
+
+ netctrlreg = FXMAC_READREG32(instance_p->instance.config.base_address,
+ FXMAC_NWCTRL_OFFSET);
+ netctrlreg = netctrlreg & (~FXMAC_NWCTRL_TXEN_MASK);
+ FXMAC_WRITEREG32(instance_p->instance.config.base_address,
+ FXMAC_NWCTRL_OFFSET, netctrlreg);
+ FreeOnlyTxPbufs(instance_p);
+
+ CleanDmaTxdescs(instance_p);
+ netctrlreg = FXMAC_READREG32(instance_p->instance.config.base_address, FXMAC_NWCTRL_OFFSET);
+ netctrlreg = netctrlreg | (FXMAC_NWCTRL_TXEN_MASK);
+ FXMAC_WRITEREG32(instance_p->instance.config.base_address, FXMAC_NWCTRL_OFFSET, netctrlreg);
+}
+
+void FXmacErrorHandler(void *arg, u8 direction, u32 error_word)
+{
+ FXmacBdRing *rxring;
+ FXmacBdRing *txring;
+ FXmacOs *instance_p;
+
+ instance_p = (FXmacOs *)(arg);
+ rxring = &FXMAC_GET_RXRING(instance_p->instance);
+ txring = &FXMAC_GET_TXRING(instance_p->instance);
+
+ if (error_word != 0)
+ {
+ switch (direction)
+ {
+ case FXMAC_RECV:
+ if (error_word & FXMAC_RXSR_HRESPNOK_MASK)
+ {
+ FXMAC_OS_XMAC_PRINT_I("Receive DMA error.");
+ FXmacHandleDmaTxError(instance_p);
+ }
+ if (error_word & FXMAC_RXSR_RXOVR_MASK)
+ {
+ FXMAC_OS_XMAC_PRINT_I("Receive over run.");
+ FXmacRecvHandler(instance_p);
+ SetupRxBds(instance_p, rxring);
+ }
+ if (error_word & FXMAC_RXSR_BUFFNA_MASK)
+ {
+ FXMAC_OS_XMAC_PRINT_I("Receive buffer not available.");
+ FXmacRecvHandler(arg);
+ SetupRxBds(instance_p, rxring);
+ }
+ break;
+ case FXMAC_SEND:
+ if (error_word & FXMAC_TXSR_HRESPNOK_MASK)
+ {
+ FXMAC_OS_XMAC_PRINT_I("Transmit DMA error.");
+ FXmacHandleDmaTxError(instance_p);
+ }
+ if (error_word & FXMAC_TXSR_URUN_MASK)
+ {
+ FXMAC_OS_XMAC_PRINT_I("Transmit under run.");
+ FXmacHandleTxErrors(instance_p);
+ }
+ if (error_word & FXMAC_TXSR_BUFEXH_MASK)
+ {
+ FXMAC_OS_XMAC_PRINT_I("Transmit buffer exhausted.");
+ FXmacHandleTxErrors(instance_p);
+ }
+ if (error_word & FXMAC_TXSR_RXOVR_MASK)
+ {
+ FXMAC_OS_XMAC_PRINT_I("Transmit retry excessed limits.");
+ FXmacHandleTxErrors(instance_p);
+ }
+ if (error_word & FXMAC_TXSR_FRAMERX_MASK)
+ {
+ FXMAC_OS_XMAC_PRINT_I("Transmit collision.");
+ FXmacProcessSentBds(instance_p, txring);
+ }
+ break;
+ }
+ }
+}
+
+void FXmacLinkChange(void *args)
+{
+ u32 ctrl;
+ u32 link, link_status;
+ u32 speed;
+ u32 speed_bit;
+ u32 duplex;
+ u32 status = FT_SUCCESS;
+
+ FXmac *xmac_p;
+ FXmacOs *instance_p;
+
+ instance_p = (FXmacOs *)args;
+ xmac_p = &instance_p->instance;
+
+ if (xmac_p->config.interface == FXMAC_PHY_INTERFACE_MODE_SGMII)
+ {
+ FXMAC_OS_XMAC_PRINT_I("xmac_p->config.base_address is %p", xmac_p->config.base_address);
+ ctrl = FXMAC_READREG32(xmac_p->config.base_address, FXMAC_PCS_AN_LP_OFFSET);
+ link = (ctrl & FXMAC_PCS_LINK_PARTNER_NEXT_PAGE_STATUS) >> 15;
+ FXMAC_OS_XMAC_PRINT_I("Link status is 0x%x", link);
+
+ switch (link)
+ {
+ case 0:
+ link_status = FXMAC_LINKDOWN;
+ break;
+ case 1:
+ link_status = FXMAC_LINKUP;
+ break;
+ default:
+ FXMAC_OS_XMAC_PRINT_E("Link status is error 0x%x ", link);
+ return;
+ }
+
+ if (xmac_p->config.auto_neg == 0)
+ {
+ if (link_status == FXMAC_LINKUP)
+ {
+ FXMAC_OS_XMAC_PRINT_I("No neg link up (%d/%s)", xmac_p->config.speed, xmac_p->config.duplex == 1 ? "FULL" : "Half");
+ xmac_p->link_status = FXMAC_NEGOTIATING;
+ }
+ else
+ {
+ FXMAC_OS_XMAC_PRINT_I("No neg link down.");
+ xmac_p->link_status = FXMAC_LINKDOWN;
+ }
+ }
+
+ /* read sgmii reg to get status */
+ ctrl = FXMAC_READREG32(xmac_p->config.base_address, FXMAC_PCS_AN_LP_OFFSET);
+ speed_bit = (ctrl & FXMAC_PCS_AN_LP_SPEED) >> FXMAC_PCS_AN_LP_SPEED_OFFSET;
+ duplex = (ctrl & FXMAC_PCS_AN_LP_DUPLEX) >> FXMAC_PCS_AN_LP_DUPLEX_OFFSET;
+
+ if (speed_bit == 2)
+ {
+ speed = FXMAC_SPEED_1000;
+ }
+ else if (speed_bit == 1)
+ {
+ speed = FXMAC_SPEED_100;
+ }
+ else
+ {
+ speed = FXMAC_SPEED_10;
+ }
+
+ if (link_status != xmac_p->link_status)
+ {
+ FXMAC_OS_XMAC_PRINT_I("Sgmii link_status has changed.");
+ }
+
+ /* add erase NCFGR config */
+ if ((speed != xmac_p->config.speed) || (duplex != xmac_p->config.duplex))
+ {
+ FXMAC_OS_XMAC_PRINT_I("Sgmii link_status has changed.");
+ FXMAC_OS_XMAC_PRINT_I("New speed is %d, duplex is %d", speed, duplex);
+ }
+
+ if (link_status == FXMAC_LINKUP)
+ {
+ if (link_status != xmac_p->link_status)
+ {
+ xmac_p->link_status = FXMAC_NEGOTIATING;
+ FXMAC_OS_XMAC_PRINT_I("Need NEGOTIATING.");
+ }
+ }
+ else
+ {
+ xmac_p->link_status = link_status;
+ FXMAC_OS_XMAC_PRINT_I("Change status is 0x%x", link_status);
+ }
+ }
+}
+
+/* phy */
+
+/**
+ * @name: FXmacPhyLinkDetect
+ * @msg: 获取当前link status
+ * @note:
+ * @param {FXmac} *fxmac_p
+ * @param {u32} phy_addr
+ * @return {*} 1 is link up , 0 is link down
+ */
+static u32 FXmacPhyLinkDetect(FXmac *xmac_p, u32 phy_addr)
+{
+ u16 status;
+
+ /* Read Phy Status register twice to get the confirmation of the current
+ * link status.
+ */
+
+ FXmacPhyRead(xmac_p, phy_addr, PHY_STATUS_REG_OFFSET, &status);
+
+ if (status & PHY_STAT_LINK_STATUS)
+ {
+ return 1;
+ }
+ return 0;
+}
+
+static u32 FXmacPhyAutonegStatus(FXmac *xmac_p, u32 phy_addr)
+{
+ u16 status;
+
+ /* Read Phy Status register twice to get the confirmation of the current
+ * link status.
+ */
+ FXmacPhyRead(xmac_p, phy_addr, PHY_STATUS_REG_OFFSET, &status);
+
+ if (status & PHY_STATUS_AUTONEGOTIATE_COMPLETE)
+ {
+ return 1;
+ }
+ return 0;
+}
+
+enum lwip_port_link_status FXmacLwipPortLinkDetect(FXmacOs *instance_p)
+{
+ u32 link_speed, phy_link_status;
+ FXmac *xmac_p = &instance_p->instance;
+
+ if (xmac_p->is_ready != (u32)FT_COMPONENT_IS_READY)
+ {
+ return ETH_LINK_UNDEFINED;
+ }
+
+ phy_link_status = FXmacPhyLinkDetect(xmac_p, xmac_p->phy_address);
+
+ if ((xmac_p->link_status == FXMAC_LINKUP) && (!phy_link_status))
+ {
+ xmac_p->link_status = FXMAC_LINKDOWN;
+ }
+
+ switch (xmac_p->link_status)
+ {
+ case FXMAC_LINKUP:
+ return ETH_LINK_UP;
+ case FXMAC_LINKDOWN:
+ xmac_p->link_status = FXMAC_NEGOTIATING;
+ FXMAC_OS_XMAC_PRINT_D("Ethernet Link down.");
+ return ETH_LINK_DOWN;
+ case FXMAC_NEGOTIATING:
+ if ((phy_link_status == FXMAC_LINKUP) && FXmacPhyAutonegStatus(xmac_p, xmac_p->phy_address))
+ {
+ err_t phy_ret;
+ phy_ret = FXmacPhyInit(xmac_p, xmac_p->config.speed, xmac_p->config.duplex, xmac_p->config.auto_neg);
+
+ if (phy_ret != FT_SUCCESS)
+ {
+ FXMAC_OS_XMAC_PRINT_E("FXmacPhyInit is error.");
+ return ETH_LINK_DOWN;
+ }
+ FXmacSelectClk(xmac_p);
+ FXmacInitInterface(xmac_p);
+
+ /* Initiate Phy setup to get link speed */
+ xmac_p->link_status = FXMAC_LINKUP;
+ FXMAC_OS_XMAC_PRINT_D("Ethernet Link up.");
+ return ETH_LINK_UP;
+ }
+ return ETH_LINK_DOWN;
+ default:
+ return ETH_LINK_DOWN;
+ }
+}
+
+enum lwip_port_link_status FXmacPhyReconnect(struct LwipPort *xmac_netif_p)
+{
+ FXmac *xmac_p;
+ FXmacOs *instance_p;
+
+ FASSERT(xmac_netif_p != NULL);
+ FASSERT(xmac_netif_p->state != NULL);
+
+ instance_p = (FXmacOs *)(xmac_netif_p->state);
+
+ xmac_p = &instance_p->instance;
+
+ if (xmac_p->config.interface == FXMAC_PHY_INTERFACE_MODE_SGMII)
+ {
+ InterruptMask(xmac_p->config.queue_irq_num[0]);
+ if (xmac_p->link_status == FXMAC_NEGOTIATING)
+ {
+ /* 重新自协商 */
+ err_t phy_ret;
+ phy_ret = FXmacPhyInit(xmac_p, xmac_p->config.speed, xmac_p->config.duplex, xmac_p->config.auto_neg);
+ if (phy_ret != FT_SUCCESS)
+ {
+ FXMAC_OS_XMAC_PRINT_I("FXmacPhyInit is error.");
+ InterruptUmask(xmac_p->config.queue_irq_num[0]);
+ return ETH_LINK_DOWN;
+ }
+ FXmacSelectClk(xmac_p);
+ FXmacInitInterface(xmac_p);
+ xmac_p->link_status = FXMAC_LINKUP;
+ }
+
+ InterruptUmask(xmac_p->config.queue_irq_num[0]);
+
+ switch (xmac_p->link_status)
+ {
+ case FXMAC_LINKDOWN:
+ return ETH_LINK_DOWN;
+ case FXMAC_LINKUP:
+ return ETH_LINK_UP;
+ default:
+ return ETH_LINK_DOWN;
+ }
+ }
+ else if ((xmac_p->config.interface == FXMAC_PHY_INTERFACE_MODE_RMII) || (xmac_p->config.interface == FXMAC_PHY_INTERFACE_MODE_RGMII))
+ {
+ return FXmacLwipPortLinkDetect(instance_p);
+ }
+ else
+ {
+ switch (xmac_p->link_status)
+ {
+ case FXMAC_LINKDOWN:
+ return ETH_LINK_DOWN;
+ case FXMAC_LINKUP:
+ return ETH_LINK_UP;
+ default:
+ return ETH_LINK_DOWN;
+ }
+ }
+}
+
+static void FxmacOsIntrHandler(s32 vector, void *args)
+{
+ isr_calling_flg++;
+ FXmacIntrHandler(vector, args);
+ isr_calling_flg--;
+}
+
+static void FXmacDeinitIsr(FXmacOs *instance_p)
+{
+ InterruptMask(instance_p->instance.config.queue_irq_num[0]);
+}
+
+static void FXmacSetupIsr(FXmacOs *instance_p)
+{
+ u32 cpu_id;
+ GetCpuId(&cpu_id);
+ InterruptSetTargetCpus(instance_p->instance.config.queue_irq_num[0], cpu_id);
+ /* Setup callbacks */
+ FXmacSetHandler(&instance_p->instance, FXMAC_HANDLER_DMASEND, FXmacSendHandler, instance_p);
+ FXmacSetHandler(&instance_p->instance, FXMAC_HANDLER_DMARECV, FXmacRecvHandler, instance_p);
+ FXmacSetHandler(&instance_p->instance, FXMAC_HANDLER_ERROR, FXmacErrorHandler, instance_p);
+ FXmacSetHandler(&instance_p->instance, FXMAC_HANDLER_LINKCHANGE, FXmacLinkChange, instance_p);
+
+ InterruptSetPriority(instance_p->instance.config.queue_irq_num[0], IRQ_PRIORITY_VALUE_12);
+ InterruptInstall(instance_p->instance.config.queue_irq_num[0], FxmacOsIntrHandler, &instance_p->instance, "fxmac");
+ InterruptUmask(instance_p->instance.config.queue_irq_num[0]);
+}
+
+/* init fxmac instance */
+
+static void FXmacInitOnError(FXmacOs *instance_p)
+{
+ FXmac *xmac_p;
+ u32 status = FT_SUCCESS;
+ xmac_p = &instance_p->instance;
+
+ /* set mac address */
+ status = FXmacSetMacAddress(xmac_p, (void *)(instance_p->hwaddr), 1);
+ if (status != FT_SUCCESS)
+ {
+ FXMAC_OS_XMAC_PRINT_E("In %s:Emac Mac Address set failed...", __func__);
+ }
+}
+
+/* step 1: initialize instance */
+/* step 2: depend on config set some options : JUMBO / IGMP */
+/* step 3: FXmacSelectClk */
+/* step 4: FXmacInitInterface */
+/* step 5: initialize phy */
+/* step 6: initialize dma */
+/* step 7: initialize interrupt */
+/* step 8: start mac */
+
+FError FXmacOsInit(FXmacOs *instance_p)
+{
+ FXmacConfig mac_config;
+ const FXmacConfig *mac_config_p;
+ FXmacPhyInterface interface = FXMAC_PHY_INTERFACE_MODE_SGMII;
+ FXmac *xmac_p;
+ u32 dmacrreg;
+ FError status;
+ FASSERT(instance_p != NULL);
+ FASSERT(instance_p->mac_config.instance_id < FXMAC_NUM);
+
+ xmac_p = &instance_p->instance;
+ FXMAC_OS_XMAC_PRINT_I("instance_id IS %d", instance_p->mac_config.instance_id);
+ mac_config_p = FXmacLookupConfig(instance_p->mac_config.instance_id);
+ if (mac_config_p == NULL)
+ {
+ FXMAC_OS_XMAC_PRINT_E("FXmacLookupConfig is error , instance_id is %d", instance_p->mac_config.instance_id);
+ return FREERTOS_XMAC_INIT_ERROR;
+ }
+ mac_config = *mac_config_p;
+ switch (instance_p->mac_config.interface)
+ {
+ case FXMAC_OS_INTERFACE_SGMII:
+ interface = FXMAC_PHY_INTERFACE_MODE_SGMII;
+ FXMAC_OS_XMAC_PRINT_I("SGMII select.");
+ break;
+ case FXMAC_OS_INTERFACE_RMII:
+ interface = FXMAC_PHY_INTERFACE_MODE_RMII;
+ FXMAC_OS_XMAC_PRINT_I("RMII select.");
+ break;
+ case FXMAC_OS_INTERFACE_RGMII:
+ FXMAC_OS_XMAC_PRINT_I("RGMII select.");
+ interface = FXMAC_PHY_INTERFACE_MODE_RGMII;
+ break;
+ default:
+ FXMAC_OS_XMAC_PRINT_E("Update interface is error , interface is %d", instance_p->mac_config.instance_id);
+ return FREERTOS_XMAC_INIT_ERROR;
+ }
+ mac_config.interface = interface;
+
+ if (instance_p->mac_config.autonegotiation)
+ {
+ mac_config.auto_neg = 1;
+ }
+ else
+ {
+ mac_config.auto_neg = 0;
+ }
+
+ switch (instance_p->mac_config.phy_speed)
+ {
+ case FXMAC_PHY_SPEED_10M:
+ mac_config.speed = FXMAC_SPEED_10;
+ break;
+ case FXMAC_PHY_SPEED_100M:
+ mac_config.speed = FXMAC_SPEED_100;
+ break;
+ case FXMAC_PHY_SPEED_1000M:
+ mac_config.speed = FXMAC_SPEED_1000;
+ break;
+ default:
+ FXMAC_OS_XMAC_PRINT_E("Setting speed is not valid , speed is %d", instance_p->mac_config.phy_speed);
+ return FREERTOS_XMAC_INIT_ERROR;
+ }
+
+ switch (instance_p->mac_config.phy_duplex)
+ {
+ case FXMAC_PHY_HALF_DUPLEX:
+ mac_config.duplex = 0;
+ break;
+ case FXMAC_PHY_FULL_DUPLEX:
+ mac_config.duplex = 1;
+ break;
+ }
+
+ status = FXmacCfgInitialize(xmac_p, &mac_config);
+ if (status != FT_SUCCESS)
+ {
+ FXMAC_OS_XMAC_PRINT_E("In %s:EmacPs Configuration Failed....", __func__);
+ }
+
+ if (instance_p->config & FXMAC_OS_CONFIG_JUMBO)
+ {
+ FXmacSetOptions(xmac_p, FXMAC_JUMBO_ENABLE_OPTION, 0);
+ }
+
+ if (instance_p->config & FXMAC_OS_CONFIG_MULTICAST_ADDRESS_FILITER)
+ {
+ FXmacSetOptions(xmac_p, FXMAC_MULTICAST_OPTION, 0);
+ }
+
+ /* enable copy all frames */
+ if (instance_p->config & FXMAC_OS_CONFIG_COPY_ALL_FRAMES)
+ {
+ FXmacSetOptions(xmac_p, FXMAC_PROMISC_OPTION, 0);
+ }
+
+ status = FXmacSetMacAddress(xmac_p, (void *)(instance_p->hwaddr), 0);
+ if (status != FT_SUCCESS)
+ {
+ FXMAC_OS_XMAC_PRINT_E("In %s:Emac Mac Address set failed...", __func__);
+ }
+
+ /* close fcs check */
+ if (instance_p->config & FXMAC_OS_CONFIG_CLOSE_FCS_CHECK)
+ {
+ FXmacSetOptions(xmac_p, FXMAC_FCS_STRIP_OPTION, 0);
+ }
+
+ /* initialize phy */
+ status = FXmacPhyInit(xmac_p, xmac_p->config.speed, xmac_p->config.duplex, xmac_p->config.auto_neg);
+ if (status != FT_SUCCESS)
+ {
+ FXMAC_OS_XMAC_PRINT_W("FXmacPhyInit is error.");
+ }
+
+ FXmacSelectClk(xmac_p);
+ FXmacInitInterface(xmac_p);
+
+ /* initialize dma */
+ dmacrreg = FXMAC_READREG32(xmac_p->config.base_address, FXMAC_DMACR_OFFSET);
+ dmacrreg & ~(FXMAC_DMACR_BLENGTH_MASK);
+ dmacrreg = dmacrreg | FXMAC_DMACR_INCR16_AHB_AXI_BURST; /* Attempt to use bursts of up to 16. */
+ FXMAC_WRITEREG32(xmac_p->config.base_address, FXMAC_DMACR_OFFSET, dmacrreg);
+ FXmacInitDma(instance_p);
+
+
+ /* initialize interrupt */
+ FXmacSetupIsr(instance_p);
+
+ return FT_SUCCESS;
+}
+
+FError FXmacOsConfig(FXmacOs *instance_p, int cmd, void *arg)
+{
+ return FT_SUCCESS;
+}
+
+/**
+ * @name: FXmacOsRx
+ * @msg: void *FXmacOsRx(FXmacOs *instance_p)
+ * @note:
+ * @param {FXmacOs} *instance_p
+ * @return {*}
+ */
+void *FXmacOsRx(FXmacOs *instance_p)
+{
+ FASSERT(instance_p != NULL);
+ struct pbuf *p;
+
+ /* see if there is data to process */
+ if (FXmacPqQlength(&instance_p->recv_q) == 0)
+ {
+ return NULL;
+ }
+ /* return one packet from receive q */
+ p = (struct pbuf *)FXmacPqDequeue(&instance_p->recv_q);
+
+ return p;
+}
+
+static FError FXmacOsOutput(FXmacOs *instance_p, struct pbuf *p)
+{
+ FError status = 0;
+ status = FXmacSgsend(instance_p, p);
+ if (status != FT_SUCCESS)
+ {
+#if LINK_STATS
+ lwip_stats.link.drop++;
+#endif
+ }
+
+#if LINK_STATS
+ lwip_stats.link.xmit++;
+#endif /* LINK_STATS */
+
+ return status;
+}
+
+FError FXmacOsTx(FXmacOs *instance_p, void *tx_buf)
+{
+ u32 freecnt;
+ FXmacBdRing *txring;
+ FError ret = FT_SUCCESS;
+ struct pbuf *p;
+ FASSERT(instance_p != NULL);
+ if (tx_buf == NULL)
+ {
+ FXMAC_OS_XMAC_PRINT_E("tx_buf is null.");
+ return FREERTOS_XMAC_PARAM_ERROR;
+ }
+
+ p = tx_buf;
+
+ /* check if space is available to send */
+ freecnt = IsTxSpaceAvailable(instance_p);
+
+ if (freecnt <= 5)
+ {
+ txring = &(FXMAC_GET_TXRING(instance_p->instance));
+ FXmacProcessSentBds(instance_p, txring);
+ }
+
+ if (IsTxSpaceAvailable(instance_p))
+ {
+ FXmacOsOutput(instance_p, p);
+ ret = FT_SUCCESS;
+ }
+ else
+ {
+#if LINK_STATS
+ lwip_stats.link.drop++;
+#endif
+ FXMAC_OS_XMAC_PRINT_E("Pack dropped, no space.");
+ ret = FREERTOS_XMAC_NO_VALID_SPACE;
+ }
+
+ return ret;
+}
+
+FXmacOs *FXmacOsGetInstancePointer(FXmacOsControl *config_p)
+{
+ FXmacOs *instance_p;
+ FASSERT(config_p != NULL);
+ FASSERT(config_p->instance_id < FXMAC_NUM);
+ FASSERT_MSG(config_p->interface < FXMAC_OS_INTERFACE_LENGTH, "config_p->interface %d is over %d", config_p->interface, FXMAC_OS_INTERFACE_LENGTH);
+ FASSERT_MSG(config_p->autonegotiation <= 1, "config_p->autonegotiation %d is over 1", config_p->autonegotiation);
+ FASSERT_MSG(config_p->phy_speed <= FXMAC_PHY_SPEED_1000M, "config_p->phy_speed %d is over 1000", config_p->phy_speed);
+ FASSERT_MSG(config_p->phy_duplex <= FXMAC_PHY_FULL_DUPLEX, "config_p->phy_duplex %d is over FXMAC_PHY_FULL_DUPLEX", config_p->phy_duplex);
+
+ instance_p = &fxmac_os_instace[config_p->instance_id];
+ memcpy(&instance_p->mac_config, config_p, sizeof(FXmacOsControl));
+ return instance_p;
+}
+
+
+void FXmacOsStop(FXmacOs *instance_p)
+{
+ FASSERT(instance_p != NULL);
+ /* step 1 close interrupt */
+ FXmacDeinitIsr(instance_p);
+ /* step 2 close mac controler */
+ FXmacStop(&instance_p->instance);
+ /* step 3 free all pbuf */
+ FreeTxRxPbufs(instance_p);
+}
+
+void FXmacOsStart(FXmacOs *instance_p)
+{
+ FASSERT(instance_p != NULL);
+
+ /* start mac */
+ FXmacStart(&instance_p->instance);
+}
\ No newline at end of file
diff --git a/drivers/eth/xmac/ft_os_xmac.h b/drivers/eth/xmac/fxmac_os.h
similarity index 63%
rename from drivers/eth/xmac/ft_os_xmac.h
rename to drivers/eth/xmac/fxmac_os.h
index 9a1b357e6a06a293a4d07ada7ebf44e055afebf7..82fda05596c9ad36786ce6edf88a2beda4dd5e94 100644
--- a/drivers/eth/xmac/ft_os_xmac.h
+++ b/drivers/eth/xmac/fxmac_os.h
@@ -1,30 +1,29 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
- * FilePath: ft_os_xmac.h
+ * See the Phytium Public License for more details.
+ *
+ *
+ * FilePath: fxmac_os.h
* Date: 2022-07-15 16:33:19
* LastEditTime: 2022-07-15 16:33:19
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
+ * Description: This file is for xmac driver.Functions in this file are the minimum required functions for drivers.
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 huanghe 2022/11/15 first release
*/
-
-
-#ifndef DRIVERS_OS_XMAC_H
-#define DRIVERS_OS_XMAC_H
+#ifndef FXMAC_OS_H
+#define FXMAC_OS_H
#include
#include
@@ -33,15 +32,13 @@
#include "fkernel.h"
#include "ferror_code.h"
-#define FREERTOS_XMAC_INIT_ERROR FT_CODE_ERR(ErrModPort, 0, 0x1)
-#define FREERTOS_XMAC_PARAM_ERROR FT_CODE_ERR(ErrModPort, 0, 0x2)
-#define FREERTOS_XMAC_NO_VALID_SPACE FT_CODE_ERR(ErrModPort, 0, 0x3)
-
-
#ifdef __cplusplus
extern "C" {
#endif
+#define FREERTOS_XMAC_INIT_ERROR FT_CODE_ERR(ErrModPort, 0, 0x1)
+#define FREERTOS_XMAC_PARAM_ERROR FT_CODE_ERR(ErrModPort, 0, 0x2)
+#define FREERTOS_XMAC_NO_VALID_SPACE FT_CODE_ERR(ErrModPort, 0, 0x3)
#define FXMAX_RX_BDSPACE_LENGTH 0x20000 /* default set 64KB*/
#define FXMAX_TX_BDSPACE_LENGTH 0x20000 /* default set 64KB*/
@@ -73,29 +70,29 @@ extern "C" {
/* frame queue */
#define PQ_QUEUE_SIZE 4096
- typedef struct
- {
- uintptr data[PQ_QUEUE_SIZE];
- int head, tail, len;
- } PqQueue;
+typedef struct
+{
+ uintptr data[PQ_QUEUE_SIZE];
+ int head, tail, len;
+} PqQueue;
- typedef enum
- {
- FXMAC_OS_INTERFACE_SGMII = 0 ,
- FXMAC_OS_INTERFACE_RMII ,
- FXMAC_OS_INTERFACE_RGMII ,
- FXMAC_OS_INTERFACE_LENGTH
- }FXmacFreeRtosInterface;
+typedef enum
+{
+ FXMAC_OS_INTERFACE_SGMII = 0,
+ FXMAC_OS_INTERFACE_RMII,
+ FXMAC_OS_INTERFACE_RGMII,
+ FXMAC_OS_INTERFACE_LENGTH
+} FXmacFreeRtosInterface;
typedef struct
{
- u8 rx_bdspace[FXMAX_RX_BDSPACE_LENGTH] __attribute__((aligned(128))); /* 接收bd 缓冲区 */
- u8 tx_bdspace[FXMAX_RX_BDSPACE_LENGTH] __attribute__((aligned(128))); /* 发送bd 缓冲区 */
+ u8 rx_bdspace[FXMAX_RX_BDSPACE_LENGTH] __attribute__((aligned(128))); /* 接收bd 缓冲区 */
+ u8 tx_bdspace[FXMAX_RX_BDSPACE_LENGTH] __attribute__((aligned(128))); /* 发送bd 缓冲区 */
+
+ uintptr rx_pbufs_storage[FXMAX_RX_PBUFS_LENGTH];
+ uintptr tx_pbufs_storage[FXMAX_TX_PBUFS_LENGTH];
- uintptr rx_pbufs_storage[FXMAX_RX_PBUFS_LENGTH];
- uintptr tx_pbufs_storage[FXMAX_TX_PBUFS_LENGTH];
-
} FXmacNetifBuffer;
typedef struct
@@ -115,21 +112,24 @@ typedef struct
FXmacNetifBuffer buffer;
/* queue to store overflow packets */
- PqQueue recv_q;
- PqQueue send_q;
+ PqQueue recv_q;
+ PqQueue send_q;
/* configuration */
u32 config;
struct LwipPort *stack_pointer; /* Docking data stack data structure */
u8 hwaddr[FXMAX_MAX_HARDWARE_ADDRESS_LENGTH];
-}FXmacOs;
+} FXmacOs;
FXmacOs *FXmacOsGetInstancePointer(FXmacOsControl *config_p);
FError FXmacOsInit(FXmacOs *instance_p);
-FError FXmacOsConfig(FXmacOs *instance_p,int cmd ,void *arg);
+FError FXmacOsConfig(FXmacOs *instance_p, int cmd, void *arg);
void *FXmacOsRx(FXmacOs *instance_p);
-FError FXmacOsTx(FXmacOs *instance_p,void *tx_buf);
+FError FXmacOsTx(FXmacOs *instance_p, void *tx_buf);
+void FXmacOsStop(FXmacOs *instance_p);
+void FXmacOsStart(FXmacOs *instance_p);
+enum lwip_port_link_status FXmacPhyReconnect(struct LwipPort *xmac_netif_p);
#ifdef __cplusplus
}
diff --git a/drivers/gpio/fgpio/fgpio_os.c b/drivers/gpio/fgpio/fgpio_os.c
index 292546f27c69075b188094034d07e8a01c0e358d..a6f4a1ca74b89dbee8bc13363c24a4844d678655 100644
--- a/drivers/gpio/fgpio/fgpio_os.c
+++ b/drivers/gpio/fgpio/fgpio_os.c
@@ -1,22 +1,22 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: fgpio_os.c
* Date: 2022-07-22 11:33:51
* LastEditTime: 2022-07-22 11:33:51
- * Description: This files is for
- *
- * Modify History:
+ * Description: This file is for required function implementations of gpio driver used in FreeRTOS.
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
* 1.0 zhugengyu 2022/7/27 init commit
@@ -52,10 +52,10 @@ static FFreeRTOSFGpio gpio[FGPIO_NUM]; /* instance of all gpio ctrl */
/*****************************************************************************/
static inline FError FGpioOsTakeSema(SemaphoreHandle_t locker)
{
- FASSERT_MSG((NULL != locker), "locker not exists");
+ FASSERT_MSG((NULL != locker), "Locker not exists.");
if (pdFALSE == xSemaphoreTake(locker, portMAX_DELAY))
{
- FGPIO_ERROR("failed to give locker !!!");
+ FGPIO_ERROR("Failed to give locker!!!");
return FFREERTOS_GPIO_SEMA_ERR;
}
@@ -64,10 +64,10 @@ static inline FError FGpioOsTakeSema(SemaphoreHandle_t locker)
static inline void FGpioOsGiveSema(SemaphoreHandle_t locker)
{
- FASSERT_MSG((NULL != locker), "locker not exists");
+ FASSERT_MSG((NULL != locker), "Locker not exists.");
if (pdFALSE == xSemaphoreGive(locker))
{
- FGPIO_ERROR("failed to give locker !!!");
+ FGPIO_ERROR("Failed to give locker!!!");
}
return;
@@ -81,7 +81,7 @@ static inline void FGpioOsGetId(u32 pin_idx, FGpioPinId *pin_id)
pin_id->ctrl = FFREERTOS_GPIO_PIN_CTRL_ID(pin_idx);
pin_id->port = FFREERTOS_GPIO_PIN_PORT_ID(pin_idx);
pin_id->pin = FFREERTOS_GPIO_PIN_ID(pin_idx);
- FGPIO_INFO("pin index = 0x%x", pin_idx);
+ FGPIO_INFO("Pin index = 0x%x", pin_idx);
FGPIO_INFO("is gpio-%d-%d-%d", pin_id->ctrl, pin_id->port, pin_id->pin);
}
@@ -94,18 +94,18 @@ static void FGpioOsSetupCtrlIRQ(FFreeRTOSFGpio *const instance)
GetCpuId(&cpu_id);
FGPIO_INFO("cpu_id is cpu_id %d", cpu_id);
- InterruptSetTargetCpus(irq_num, cpu_id);
+ InterruptSetTargetCpus(irq_num, cpu_id);
- /* setup interrupt */
- InterruptSetPriority(irq_num, FFREERTOS_GPIO_IRQ_PRIORITY);
+ /* setup interrupt */
+ InterruptSetPriority(irq_num, FFREERTOS_GPIO_IRQ_PRIORITY);
- /* register intr handler */
- InterruptInstall(irq_num,
- FGpioInterruptHandler,
- ctrl,
- NULL);
+ /* register intr handler */
+ InterruptInstall(irq_num,
+ FGpioInterruptHandler,
+ ctrl,
+ NULL);
- InterruptUmask(irq_num);
+ InterruptUmask(irq_num);
return;
}
@@ -119,7 +119,7 @@ static void FGpioOsSetupCtrlIRQ(FFreeRTOSFGpio *const instance)
*/
FFreeRTOSFGpio *FFreeRTOSGpioInit(u32 id, const FFreeRTOSGpioConfig *input_config)
{
- FASSERT_MSG(id < FGPIO_NUM, "invalid gpio id");
+ FASSERT_MSG(id < FGPIO_NUM, "Invalid gpio id.");
FFreeRTOSFGpio *instance = &gpio[id];
FGpio *ctrl = &instance->ctrl;
FGpioConfig *config = &ctrl->config;
@@ -127,7 +127,7 @@ FFreeRTOSFGpio *FFreeRTOSGpioInit(u32 id, const FFreeRTOSGpioConfig *input_confi
if (FT_COMPONENT_IS_READY == ctrl->is_ready)
{
- FGPIO_WARN("gpio-%d already init", config->instance_id);
+ FGPIO_WARN("gpio-%d already init.", config->instance_id);
return instance;
}
@@ -136,8 +136,8 @@ FFreeRTOSFGpio *FFreeRTOSGpioInit(u32 id, const FFreeRTOSGpioConfig *input_confi
*config = *FGpioLookupConfig(id);
err = FGpioCfgInitialize(ctrl, config);
- if (FGPIO_SUCCESS != err)
- {
+ if (FGPIO_SUCCESS != err)
+ {
goto err_exit;
}
@@ -153,12 +153,12 @@ FFreeRTOSFGpio *FFreeRTOSGpioInit(u32 id, const FFreeRTOSGpioConfig *input_confi
FGpioOsSetupCtrlIRQ(instance);
}
- FASSERT_MSG(NULL == instance->locker, "locker exists !!!");
- FASSERT_MSG((instance->locker = xSemaphoreCreateMutex()) != NULL, "create mutex failed !!!");
+ FASSERT_MSG(NULL == instance->locker, "Locker exists!!!");
+ FASSERT_MSG((instance->locker = xSemaphoreCreateMutex()) != NULL, "Create mutex failed!!!");
err_exit:
taskEXIT_CRITICAL(); /* allow schedule after init */
- return (FT_SUCCESS == err) ? instance : NULL; /* exit with NULL if failed */
+ return (FT_SUCCESS == err) ? instance : NULL; /* exit with NULL if failed */
}
/**
@@ -175,7 +175,7 @@ FError FFreeRTOSGpioDeInit(FFreeRTOSFGpio *const instance)
if (FT_COMPONENT_IS_READY != ctrl->is_ready)
{
- FGPIO_WARN("gpio-%d not yet init", ctrl->config.instance_id);
+ FGPIO_WARN("gpio-%d not yet init.", ctrl->config.instance_id);
return FFREERTOS_GPIO_NOT_INIT;
}
@@ -184,12 +184,12 @@ FError FFreeRTOSGpioDeInit(FFreeRTOSFGpio *const instance)
FGpioDeInitialize(ctrl);
- FASSERT_MSG(NULL != instance->locker, "locker not exists !!!");
+ FASSERT_MSG(NULL != instance->locker, "Locker not exists!!!");
vSemaphoreDelete(instance->locker);
instance->locker = NULL;
taskEXIT_CRITICAL(); /* allow schedule after init */
- return err;
+ return err;
}
/* setup gpio pin interrupt */
@@ -204,11 +204,11 @@ static void FGpioOSSetupPinIRQ(FFreeRTOSFGpio *const instance, FGpioPin *const p
InterruptSetTargetCpus(irq_num, cpu_id);
- /* setup interrupt */
- InterruptSetPriority(irq_num, FFREERTOS_GPIO_IRQ_PRIORITY);
+ /* setup interrupt */
+ InterruptSetPriority(irq_num, FFREERTOS_GPIO_IRQ_PRIORITY);
- /* register intr handler */
- InterruptInstall(irq_num, config->irq_handler, config->irq_args, NULL);
+ /* register intr handler */
+ InterruptInstall(irq_num, config->irq_handler, config->irq_args, NULL);
InterruptUmask(irq_num);
@@ -229,14 +229,16 @@ FError FFreeRTOSSetupPin(FFreeRTOSFGpio *const instance, const FFreeRTOSGpioPinC
FGpioPinId pin_id;
FGpioOsGetId(config->pin_idx, &pin_id); /* convert pin id */
u32 ctrl_id = ctrl->config.instance_id;
- FASSERT_MSG((ctrl_id == pin_id.ctrl), "invalid instance for pin");
+ FASSERT_MSG((ctrl_id == pin_id.ctrl), "Invalid instance for pin.");
FGpioPin *const pin = &instance->pins[pin_id.port][pin_id.pin];
FError err = FT_SUCCESS;
boolean irq_one_time = TRUE;
err = FGpioOsTakeSema(instance->locker);
if (FFREERTOS_GPIO_OK != err)
+ {
return err;
+ }
/* set io pad */
FIOPadSetGpioMux(ctrl_id, pin_id.pin);
@@ -249,22 +251,22 @@ FError FFreeRTOSSetupPin(FFreeRTOSFGpio *const instance, const FFreeRTOSGpioPinC
/* init pin */
err = FGpioPinInitialize(ctrl, pin, pin_id);
- if (FGPIO_SUCCESS != err)
- {
- FGPIO_ERROR("init pin %d-%d failed, err: 0x%x",
- pin_id.port,
- pin_id.pin,
- err);
+ if (FGPIO_SUCCESS != err)
+ {
+ FGPIO_ERROR("Init pin %d-%d failed, err: 0x%x",
+ pin_id.port,
+ pin_id.pin,
+ err);
goto err_exit;
- }
+ }
/* setup pin direction */
FGpioSetDirection(pin, config->mode);
- FGPIO_INFO("Set GPIO-%d-%c-%d direction %s",
- pin_id.ctrl,
- (FGPIO_PORT_A == pin_id.port) ? 'a' : 'b',
- pin_id.pin,
- (FGPIO_DIR_INPUT == config->mode) ? "IN" : "OUT");
+ FGPIO_INFO("Set GPIO-%d-%c-%d direction %s",
+ pin_id.ctrl,
+ (FGPIO_PORT_A == pin_id.port) ? 'a' : 'b',
+ pin_id.pin,
+ (FGPIO_DIR_INPUT == config->mode) ? "IN" : "OUT");
/* setup input-pin irq */
if (TRUE == config->en_irq)
@@ -280,7 +282,7 @@ FError FFreeRTOSSetupPin(FFreeRTOSFGpio *const instance, const FFreeRTOSGpioPinC
err_exit:
FGpioOsGiveSema(instance->locker);
- return err;
+ return err;
}
/**
@@ -298,18 +300,20 @@ FError FFreeRTOSSetIRQ(FFreeRTOSFGpio *const instance, u32 pin_idx, boolean en_i
FGpioOsGetId(pin_idx, &pin_id); /* convert pin id */
FGpio *ctrl = &instance->ctrl;
u32 ctrl_id = ctrl->config.instance_id;
- FASSERT_MSG((ctrl_id == pin_id.ctrl), "invalid instance for pin");
+ FASSERT_MSG((ctrl_id == pin_id.ctrl), "Invalid instance for pin.");
FGpioPin *const pin = &instance->pins[pin_id.port][pin_id.pin];
FError err = FT_SUCCESS;
err = FGpioOsTakeSema(instance->locker);
if (FFREERTOS_GPIO_OK != err)
+ {
return err;
+ }
FGpioSetInterruptMask(pin, en_irq);
FGpioOsGiveSema(instance->locker);
- return err;
+ return err;
}
/**
@@ -327,24 +331,26 @@ FError FFreeRTOSPinWrite(FFreeRTOSFGpio *const instance, u32 pin_idx, u32 value)
FGpioOsGetId(pin_idx, &pin_id); /* convert pin id */
FGpio *ctrl = &instance->ctrl;
u32 ctrl_id = ctrl->config.instance_id;
- FASSERT_MSG((ctrl_id == pin_id.ctrl), "invalid instance for pin");
+ FASSERT_MSG((ctrl_id == pin_id.ctrl), "Invalid instance for pin.");
FGpioPin *const pin = &instance->pins[pin_id.port][pin_id.pin];
FError err = FT_SUCCESS;
err = FGpioOsTakeSema(instance->locker);
if (FFREERTOS_GPIO_OK != err)
+ {
return err;
+ }
err = FGpioSetOutputValue(pin, (FGpioPinVal)value);
FGpioOsGiveSema(instance->locker);
- return err;
+ return err;
}
/**
* @name: FFreeRTOSPinRead
* @msg: get input pin value
- * @return {u32} level input by pin
+ * @return {u32} level input by pin
* @param {FFreeRTOSFGpio} *instance, freertos gpio instance
* @param {u32} pin_idx, index of gpio pin
*/
@@ -355,17 +361,19 @@ u32 FFreeRTOSPinRead(FFreeRTOSFGpio *const instance, u32 pin_idx)
FGpioPinId pin_id;
FGpioOsGetId(pin_idx, &pin_id); /* convert pin id */
u32 ctrl_id = ctrl->config.instance_id;
- FASSERT_MSG((ctrl_id == pin_id.ctrl), "invalid instance for pin");
+ FASSERT_MSG((ctrl_id == pin_id.ctrl), "Invalid instance for pin.");
FGpioPin *const pin = &instance->pins[pin_id.port][pin_id.pin];
FError err = FT_SUCCESS;
FGpioPinVal val = FGPIO_PIN_LOW;
err = FGpioOsTakeSema(instance->locker);
if (FFREERTOS_GPIO_OK != err)
+ {
return val;
+ }
val = FGpioGetInputValue(pin);
FGpioOsGiveSema(instance->locker);
- return val;
+ return val;
}
\ No newline at end of file
diff --git a/drivers/gpio/fgpio/fgpio_os.h b/drivers/gpio/fgpio/fgpio_os.h
index 9fd6e0b53da6295a0989d8cd1d483ce9d878082f..0db068c6a347ad22c0d2482c294af9b0f1437153 100644
--- a/drivers/gpio/fgpio/fgpio_os.h
+++ b/drivers/gpio/fgpio/fgpio_os.h
@@ -1,34 +1,29 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: fgpio_os.h
* Date: 2022-07-22 11:33:45
* LastEditTime: 2022-07-22 11:33:45
- * Description: This files is for
- *
- * Modify History:
+ * Description: This file is for providing function related definitions of gpio driver used in FreeRTOS.
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
* 1.0 zhugengyu 2022/7/27 init commit
*/
-#ifndef DRIVERS_FGPIO_OS_H
-#define DRIVERS_FGPIO_OS_H
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
+#ifndef FGPIO_OS_H
+#define FGPIO_OS_H
/***************************** Include Files *********************************/
#include
#include
@@ -37,8 +32,12 @@ extern "C"
#include "fkernel.h"
#include "fparameters.h"
#include "fgpio.h"
-
/************************** Constant Definitions *****************************/
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
#define FFREERTOS_GPIO_OK FT_SUCCESS
#define FFREERTOS_GPIO_NOT_INIT FT_CODE_ERR(ErrModPort, ErrBspGpio, 0)
#define FFREERTOS_GPIO_SEMA_ERR FT_CODE_ERR(ErrModPort, ErrBspGpio, 1)
diff --git a/drivers/i2c/fi2c_os.c b/drivers/i2c/fi2c_os.c
new file mode 100644
index 0000000000000000000000000000000000000000..da03c593affa0b665035cfe963f53960f4e58a81
--- /dev/null
+++ b/drivers/i2c/fi2c_os.c
@@ -0,0 +1,384 @@
+/*
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * All Rights Reserved.
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the Phytium Public License for more details.
+ *
+ *
+ * FilePath: fi2c_os.c
+ * Date: 2022-07-15 10:43:29
+ * LastEditTime: 2022-07-15 10:43:29
+ * Description: This file is for required function implementations of i2c driver used in FreeRTOS.
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 liushengming 2022/11/25 first commit
+ */
+
+#include
+#include
+#include "fi2c_os.h"
+#include "finterrupt.h"
+#include "ftypes.h"
+#include "sdkconfig.h"
+#include "fcpu_info.h"
+#include "fparameters.h"
+#include "fi2c.h"
+#include "fi2c_hw.h"
+#include "fdebug.h"
+#include "fpinctrl.h"
+#if defined(CONFIG_TARGET_E2000)
+ #include "fmio_hw.h"
+ #include "fmio.h"
+ #include "fiopad.h"
+#endif
+
+#if defined(CONFIG_TARGET_E2000)
+static FMioCtrl i2c_master;
+static FMioCtrl i2c_slave;
+static FFreeRTOSI2c os_i2c[FMIO_NUM] = {0};
+#endif
+
+#if defined(CONFIG_TARGET_D2000) || defined(CONFIG_TARGET_F2000_4)
+static FFreeRTOSI2c os_i2c[FI2C_NUM] = {0};
+#endif
+/* virtual eeprom memory */
+
+
+static void FI2cMasterSlaveSetIoMux(u32 instance_id)
+{
+ /* D2000 use */
+#if defined(CONFIG_TARGET_D2000)
+ switch (instance_id)
+ {
+ case FI2C0_ID:
+ FPinSetFunc(FIOCTRL_I2C0_SCL_PAD, FPIN_FUNC0);
+ FPinSetFunc(FIOCTRL_I2C0_SDA_PAD, FPIN_FUNC0);
+ break;
+ case FI2C1_ID:
+ FPinSetFunc(FIOCTRL_ALL_PLL_LOCK_PAD, FPIN_FUNC2);
+ FPinSetFunc(FIOCTRL_CRU_CLK_OBV_PAD, FPIN_FUNC2);
+ break;
+ case FI2C2_ID:
+ FPinSetFunc(FIOCTRL_SWDO_SWJ_PAD, FPIN_FUNC2);
+ FPinSetFunc(FIOCTRL_TDO_SWJ_IN_PAD, FPIN_FUNC2);
+ break;
+ case FI2C3_ID:
+ FPinSetFunc(FIOCTRL_HDT_MB_DONE_STATE_PAD, FPIN_FUNC2);
+ FPinSetFunc(FIOCTRL_HDT_MB_FAIL_STATE_PAD, FPIN_FUNC2);
+ break;
+ default:
+ FASSERT(0);
+ break;
+ }
+#endif
+#if defined(CONFIG_TARGET_F2000_4)
+ FPinIndex sclpad_off, sdapad_off;
+ FPinFunc scl_fun, sda_fun;
+ switch (instance_id)
+ {
+ case FI2C0_ID:
+ sclpad_off = FIOCTRL_I2C0_SCL_PAD; /* i2c0-scl: func 0 */
+ sdapad_off = FIOCTRL_I2C0_SDA_PAD; /* i2c0-sda: func 0 */
+ scl_fun = FPIN_FUNC0;
+ sda_fun = FPIN_FUNC0;
+ break;
+ case FI2C1_ID:
+ sclpad_off = FIOCTRL_ALL_PLL_LOCK_PAD; /* i2c1-scl: func 2 */
+ sdapad_off = FIOCTRL_CRU_CLK_OBV_PAD; /* i2c1-sda: func 2 */
+ scl_fun = FPIN_FUNC2;
+ sda_fun = FPIN_FUNC2;
+ break;
+ case FI2C2_ID:
+ sclpad_off = FIOCTRL_SWDO_SWJ_PAD; /* i2c2-scl: func 2 */
+ sdapad_off = FIOCTRL_TDO_SWJ_IN_PAD; /* i2c2-sda: func 2 */
+ scl_fun = FPIN_FUNC2;
+ sda_fun = FPIN_FUNC2;
+ break;
+ case FI2C3_ID:
+ sclpad_off = FIOCTRL_HDT_MB_DONE_STATE_PAD; /* i2c3-scl: func 2 */
+ sdapad_off = FIOCTRL_HDT_MB_FAIL_STATE_PAD; /* i2c3-sda: func 2 */
+ scl_fun = FPIN_FUNC2;
+ sda_fun = FPIN_FUNC2;
+ break;
+ default:
+ FASSERT(0);
+ break;
+ }
+ FPinSetFunc(sclpad_off, scl_fun);
+ FPinSetFunc(sdapad_off, sda_fun);
+#endif
+}
+
+
+/**
+ * @name: FI2cOsSetupInterrupt
+ * @msg: 设置i2c中断
+ * @return {*}
+ * @param {FI2c} *pctrl
+ */
+static void FI2cOsSetupInterrupt(FI2c *pctrl)
+{
+ FASSERT(pctrl);
+ FI2cConfig *pconfig = &pctrl->config;
+ u32 cpu_id;
+ FError err = FREERTOS_I2C_SUCCESS;
+
+ GetCpuId(&cpu_id);
+ vPrintf("cpu_id is %d \r\n", cpu_id);
+ InterruptSetTargetCpus(pconfig->irq_num, cpu_id);
+
+ /* interrupt init */
+ /* umask i2c irq */
+ InterruptSetPriority(pconfig->irq_num, pconfig->irq_prority);
+ /* enable irq */
+ InterruptUmask(pconfig->irq_num);
+}
+
+static void FI2cOsResetInterrupt(FI2c *pctrl)
+{
+ FASSERT(pctrl);
+ /* disable irq */
+ InterruptMask(pctrl->config.irq_num);
+}
+
+/**
+ * @name: FFreeRTOSI2cInit
+ * @msg: init freeRTOS i2c instance
+ * @return {FFreeRTOSI2c *}pointer to os i2c instance
+ * @param {u32} instance_id,i2c instance_id
+ */
+FFreeRTOSI2c *FFreeRTOSI2cInit(u32 instance_id, u32 work_mode, u32 slave_address, u32 speed_rate)
+{
+ FASSERT((os_i2c[instance_id].wr_semaphore = xSemaphoreCreateMutex()) != NULL);
+ FASSERT((os_i2c[instance_id].trx_event = xEventGroupCreate()) != NULL);
+
+ FError err = FREERTOS_I2C_SUCCESS;
+
+ FI2cConfig i2c_config;
+
+ /* E2000 use MIO -> I2C */
+#if defined(CONFIG_TARGET_E2000)
+ FASSERT(instance_id < FMIO_NUM);
+
+ if (FT_COMPONENT_IS_READY == os_i2c[instance_id].i2c_device.is_ready)
+ {
+ vPrintf("I2c device %d is already initialized.\r\n", instance_id);
+ return NULL;
+ }
+
+ const FMioConfig *mio_config_p ;
+ FMioCtrl *pctrl;
+ if (work_mode == FI2C_MASTER)
+ {
+ pctrl = &i2c_master;
+ }
+ else
+ {
+ pctrl = &i2c_slave;
+ }
+
+ i2c_config = *FI2cLookupConfig(0);
+ /* Setup iomux */
+ mio_config_p = FMioLookupConfig(instance_id);
+ if (NULL == mio_config_p)
+ {
+ vPrintf("Config of mio_i2c instance %d non found.\r\n", instance_id);
+ return NULL;
+ }
+
+
+ pctrl->config = *mio_config_p;
+
+ err = FMioFuncInit(pctrl, FMIO_FUNC_SET_I2C);
+ if (err != FREERTOS_I2C_SUCCESS)
+ {
+ vPrintf("Mio I2c initialize is error.\r\n ");
+ return NULL;
+ }
+
+ /* Modify configuration */
+ i2c_config.work_mode = work_mode;
+ i2c_config.slave_addr = slave_address;
+ i2c_config.speed_rate = speed_rate;
+
+ if (work_mode == FI2C_MASTER)/* 主机中断优先级低于从机接收 */
+ {
+ i2c_config.instance_id = i2c_master.config.instance_id;
+ i2c_config.base_addr = i2c_master.config.func_base_addr;
+ i2c_config.irq_num = i2c_master.config.irq_num;
+ i2c_config.irq_prority = I2C_MASTER_IRQ_PRORITY;
+ }
+ else
+ {
+ i2c_config.instance_id = i2c_slave.config.instance_id;
+ i2c_config.base_addr = i2c_slave.config.func_base_addr;
+ i2c_config.irq_num = i2c_slave.config.irq_num;
+ i2c_config.irq_prority = I2C_SLAVE_IRQ_PRORITY;
+ }
+ FIOPadSetMioMux(i2c_config.instance_id);
+#endif
+#if defined(CONFIG_TARGET_D2000)
+ FASSERT(instance_id < FI2C_NUM);
+
+ if (FT_COMPONENT_IS_READY == os_i2c[instance_id].i2c_device.is_ready)
+ {
+ vPrintf("I2c device %d is already initialized.\r\n", instance_id);
+ return NULL;
+ }
+
+ i2c_config = *FI2cLookupConfig(instance_id);
+ if (work_mode == FI2C_MASTER) /* 主机中断优先级低于从机接收 */
+ {
+ i2c_config.irq_prority = I2C_MASTER_IRQ_PRORITY;
+ }
+ else
+ {
+ i2c_config.irq_prority = I2C_SLAVE_IRQ_PRORITY;
+ }
+ /* Modify configuration */
+ i2c_config.work_mode = work_mode;
+ i2c_config.slave_addr = slave_address;
+ i2c_config.speed_rate = speed_rate;
+ /* Setup iomux */
+ FI2cMasterSlaveSetIoMux(instance_id);
+#endif
+ err = FI2cCfgInitialize(&os_i2c[instance_id].i2c_device, &i2c_config);
+ if (err != FREERTOS_I2C_SUCCESS)
+ {
+ vPrintf("I2c Init failed.\r\n");
+ return NULL;
+ }
+ /* 从机模式,开中断接收数据 */
+ if (work_mode == FI2C_SLAVE)
+ {
+ FI2cOsSetupInterrupt(&os_i2c[instance_id].i2c_device);
+ }
+ return (&os_i2c[instance_id]);
+}
+
+/**
+ * @name: FFreeRTOSI2cDeinit
+ * @msg: deinit freeRTOS i2c instance, include deinit i2c and delete mutex semaphore
+ * @return {*}无
+ * @param {FFreeRTOSI2c} *os_i2c_p,pointer to os i2c instance
+ */
+void FFreeRTOSI2cDeinit(FFreeRTOSI2c *os_i2c_p)
+{
+ FASSERT(os_i2c_p);
+ FASSERT(os_i2c_p->wr_semaphore != NULL);
+#if defined(CONFIG_TARGET_E2000)
+ FMioCtrl *pctrl = &i2c_master;
+ FMioFuncDeinit(pctrl);
+#endif
+ /* 避免没有关闭中断,存在触发 */
+ InterruptMask(os_i2c_p->i2c_device.config.irq_num);
+ FI2cDeInitialize(&os_i2c_p->i2c_device);
+
+ FASSERT_MSG(NULL != os_i2c_p->wr_semaphore, "Semaphore not exists!!!");
+ vSemaphoreDelete(os_i2c_p->wr_semaphore);
+ os_i2c_p->wr_semaphore = NULL;
+
+ FASSERT_MSG(NULL != os_i2c_p->trx_event, "Event group not exists!!!");
+ vEventGroupDelete(os_i2c_p->trx_event);
+ os_i2c_p->trx_event = NULL;
+}
+
+/**
+ * @name: FFreeRTOSI2cTransfer
+ * @msg: tranfer i2c mesage
+ * @return {*}
+ * @param {u32} instance_id
+ * @param {FFreeRTOSI2cMessage} *message
+ * @param {u8} mode
+ */
+FError FFreeRTOSI2cTransfer(FFreeRTOSI2c *os_i2c_p, FFreeRTOSI2cMessage *message)
+{
+ FASSERT(os_i2c_p);
+ FASSERT(message);
+ FASSERT(os_i2c_p->wr_semaphore != NULL);
+ FASSERT(message->mode < FI2C_READ_DATA_MODE_NUM);
+
+ if (pdFALSE == xSemaphoreTake(os_i2c_p->wr_semaphore, portMAX_DELAY))
+ {
+ vPrintf("I2c xSemaphoreTake failed.\r\n");
+ return FREERTOS_I2C_MESG_ERROR;
+ }
+
+ FError ret = FREERTOS_I2C_SUCCESS;
+ FI2c *instance_p = &os_i2c_p->i2c_device;
+ EventBits_t ev;
+
+ /* Judge whether the slave address has changed */
+ if (instance_p->config.slave_addr != message->slave_addr)
+ {
+ instance_p->config.slave_addr = message->slave_addr;
+ }
+
+ if (message->mode == FI2C_READ_DATA_POLL)
+ {
+ memset(message->buf, 0, message->buf_length);
+ ret = FI2cMasterReadPoll(instance_p, message->mem_addr, message->mem_byte_len, message->buf, message->buf_length);
+ }
+ else if (message->mode == FI2C_READ_DATA_INTR)
+ {
+ FI2cOsSetupInterrupt(instance_p);
+ memset(message->buf, 0, message->buf_length);
+ ret = FI2cMasterReadIntr(instance_p, message->mem_addr, message->mem_byte_len, message->buf, message->buf_length);
+ ev = xEventGroupWaitBits(os_i2c_p->trx_event, RTOS_I2C_TRANS_ABORTED | RTOS_I2C_READ_DONE, pdTRUE, pdFALSE, portMAX_DELAY);
+ if (ev & RTOS_I2C_TRANS_ABORTED)
+ {
+ vPrintf("RTOS_I2C_TRANS_ABORTED ");
+ ret = FREERTOS_I2C_TASK_ERROR;
+ }
+ else if (ev & RTOS_I2C_READ_DONE)
+ {
+ vPrintf("RTOS_I2C_READ_DONE,data_lenth:0d%d.\r\n", message->buf_length);
+ }
+ FI2cOsResetInterrupt(instance_p);
+ }
+ else if (message->mode == FI2C_WRITE_DATA_POLL)
+ {
+ ret = FI2cMasterWritePoll(instance_p, message->mem_addr, message->mem_byte_len, message->buf, message->buf_length);
+ }
+ else if (message->mode == FI2C_WRITE_DATA_INTR)
+ {
+ FI2cOsSetupInterrupt(instance_p);
+ ret = FI2cMasterWriteIntr(instance_p, message->mem_addr, message->mem_byte_len, message->buf, message->buf_length);
+ /* wait intr is finish */
+ ev = xEventGroupWaitBits(os_i2c_p->trx_event, RTOS_I2C_TRANS_ABORTED | RTOS_I2C_WRITE_DONE, pdTRUE, pdFALSE, portMAX_DELAY);
+ if (ev & RTOS_I2C_TRANS_ABORTED)
+ {
+ vPrintf("RTOS_I2C_TRANS_ABORTED ");
+ ret = FREERTOS_I2C_TASK_ERROR;
+ }
+ else if (ev & RTOS_I2C_WRITE_DONE)
+ {
+ vPrintf("RTOS_I2C_WRITE_DONE,data_lenth:0d%d.\r\n", message->buf_length);
+ }
+ FI2cOsResetInterrupt(instance_p);
+ }
+
+ /* Enable next transfer. Current one is finished */
+ if (pdFALSE == xSemaphoreGive(os_i2c_p->wr_semaphore))
+ {
+ /* We could not post the semaphore, exit with error */
+ vPrintf("FFreeRTOSI2cTransfer function xSemaphoreGive failed.\r\n");
+ return FREERTOS_I2C_MESG_ERROR;
+ }
+
+ if (ret != FREERTOS_I2C_SUCCESS)
+ {
+ vPrintf("FFreeRTOSI2cTransfer error,id:%d.\r\n", instance_p->config.instance_id);
+ return FREERTOS_I2C_TASK_ERROR;
+ }
+ return ret;
+}
+
diff --git a/drivers/i2c/fi2c_os.h b/drivers/i2c/fi2c_os.h
new file mode 100644
index 0000000000000000000000000000000000000000..58a32087037929481f6fa754a73c87f587def35a
--- /dev/null
+++ b/drivers/i2c/fi2c_os.h
@@ -0,0 +1,119 @@
+/*
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * All Rights Reserved.
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the Phytium Public License for more details.
+ *
+ *
+ * FilePath: fi2c_os.h
+ * Date: 2022-07-15 10:43:51
+ * LastEditTime: 2022-07-15 10:43:51
+ * Description: This file is for providing function related definitions of i2c driver used in FreeRTOS.
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 liushengming 2022/07/15 init
+ */
+
+#ifndef FI2C_OS_H
+#define FI2C_OS_H
+/***************************** Include Files *********************************/
+#include
+#include
+#include
+#include "ferror_code.h"
+#include "fi2c.h"
+#include "fi2c_hw.h"
+#include "ftypes.h"
+/************************** Constant Definitions *****************************/
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*Error code from standalone i2c driver*/
+#define FREERTOS_I2C_SUCCESS FI2C_SUCCESS
+#define FREERTOS_I2C_INVAILD_PARAM_ERROR FI2C_ERR_INVAL_PARM
+#define FREERTOS_I2C_NOT_READY_ERROR FI2C_ERR_NOT_READY
+#define FREERTOS_I2C_TIMEOUT_ERROR FI2C_ERR_TIMEOUT
+#define FREERTOS_I2C_NOT_SUPPORT_ERROR FI2C_ERR_NOT_SUPPORT
+#define FREERTOS_I2C_INVAL_STATE_ERROR FI2C_ERR_INVAL_STATE
+
+/*Error code depend on OS standard*/
+#define FREERTOS_I2C_TASK_ERROR FT_CODE_ERR(ErrModPort, ErrBspI2c, 0x1)
+#define FREERTOS_I2C_MESG_ERROR FT_CODE_ERR(ErrModPort, ErrBspI2c, 0x2)
+#define FREERTOS_I2C_TIME_ERROR FT_CODE_ERR(ErrModPort, ErrBspI2c, 0x3)
+#define FREERTOS_I2C_MEMY_ERROR FT_CODE_ERR(ErrModPort, ErrBspI2c, 0x4)
+
+/*!
+* @cond RTOS_PRIVATE
+* @name I2C FreeRTOS handler
+*
+* These are the only valid states for txEvent and rxEvent
+*/
+/*@{*/
+/*! @brief Event flag - transfer complete. */
+#define RTOS_I2C_READ_DONE 0x1
+/*! @brief Event flag - hardware buffer overrun. */
+#define RTOS_I2C_WRITE_DONE 0x2
+/*! @brief Event flag Receive is error */
+#define RTOS_I2C_TRANS_ABORTED 0x4
+
+#define I2C_MASTER_IRQ_PRORITY 0xc
+#define I2C_SLAVE_IRQ_PRORITY 0xb
+
+#define IO_BUF_LEN 256
+
+/************************** Variable Definitions *****************************/
+/**
+ * iic message structure
+ */
+typedef struct
+{
+ void *buf; /* i2c read or write buffer */
+ size_t buf_length; /* i2c read or write buffer length */
+ u32 slave_addr; /* i2c slave addr,you can change slave_addr to send different device in the bus*/
+ u32 mem_addr; /* i2c slave address offset to read or write */
+ u8 mem_byte_len; /* sizeof slave address */
+ volatile u8 mode; /* transport mode */
+} FFreeRTOSI2cMessage;
+
+typedef struct
+{
+ FI2c i2c_device;
+ SemaphoreHandle_t wr_semaphore; /* i2c read and write semaphore for resource sharing */
+ EventGroupHandle_t trx_event; /* i2c TX/RX completion event */
+} FFreeRTOSI2c;
+
+enum /*选择操作I2C的方式*/
+{
+ FI2C_READ_DATA_POLL,
+ FI2C_READ_DATA_INTR,
+ FI2C_WRITE_DATA_POLL,
+ FI2C_WRITE_DATA_INTR,
+
+ FI2C_READ_DATA_MODE_NUM
+};
+
+/************************** Function Prototypes ******************************/
+/* init freeRTOS i2c instance */
+FFreeRTOSI2c *FFreeRTOSI2cInit(u32 instance_id, u32 work_mode, u32 slave_address, u32 speed_rate);
+
+/* deinit freeRTOS i2c instance */
+void FFreeRTOSI2cDeinit(FFreeRTOSI2c *os_i2c_p);
+
+/* tranfer i2c mesage */
+FError FFreeRTOSI2cTransfer(FFreeRTOSI2c *os_i2c_p, FFreeRTOSI2cMessage *message);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/drivers/mmc/fsdio/fsdio_os.c b/drivers/mmc/fsdio/fsdio_os.c
deleted file mode 100644
index 762aa7a9f943a198f18774935305250cc9b119ac..0000000000000000000000000000000000000000
--- a/drivers/mmc/fsdio/fsdio_os.c
+++ /dev/null
@@ -1,633 +0,0 @@
-/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
- * All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
- * FilePath: fsdio_os.c
- * Date: 2022-07-25 09:14:40
- * LastEditTime: 2022-07-25 09:14:40
- * Description: This files is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
- * 1.0 zhugengyu 2022/7/27 init commit
- */
-
-/***************************** Include Files *********************************/
-#include
-#include
-#include
-
-#include "finterrupt.h"
-#include "fparameters.h"
-#include "fdebug.h"
-#include "fassert.h"
-#include "fsleep.h"
-#include "fcpu_info.h"
-#include "fiopad.h"
-
-#include "fsdio_os.h"
-#include "fsdio_hw.h"
-#include "sdmmc_cmd.h"
-#include "sdmmc_defs.h"
-
-/************************** Constant Definitions *****************************/
-
-/**************************** Type Definitions *******************************/
-typedef struct
-{
- sdmmc_card_t card; /* instance of card in sdmmc */
- sdmmc_host_t host; /* instance of host in sdmmc */
-} FSdioOSHost; /* instance to support sdmmc commands */
-
-/************************** Variable Definitions *****************************/
-static FFreeRTOSSdio sdio[FSDIO_HOST_INSTANCE_NUM];
-static FSdioOSHost sdmmc_host[FSDIO_HOST_INSTANCE_NUM];
-
-/***************** Macros (Inline Functions) Definitions *********************/
-#define FSDIO_DEBUG_TAG "FSDIO-OS"
-#define FSDIO_ERROR(format, ...) FT_DEBUG_PRINT_E(FSDIO_DEBUG_TAG, format, ##__VA_ARGS__)
-#define FSDIO_WARN(format, ...) FT_DEBUG_PRINT_W(FSDIO_DEBUG_TAG, format, ##__VA_ARGS__)
-#define FSDIO_INFO(format, ...) FT_DEBUG_PRINT_I(FSDIO_DEBUG_TAG, format, ##__VA_ARGS__)
-#define FSDIO_DEBUG(format, ...) FT_DEBUG_PRINT_D(FSDIO_DEBUG_TAG, format, ##__VA_ARGS__)
-
-/************************** Function Prototypes ******************************/
-
-/*****************************************************************************/
-static inline FError FSdioOsTakeSema(SemaphoreHandle_t locker)
-{
- FASSERT_MSG((NULL != locker), "locker not exists");
- if (pdFALSE == xSemaphoreTake(locker, portMAX_DELAY))
- {
- FSDIO_ERROR("failed to give locker !!!");
- return FFREERTOS_SDIO_SEMA_ERR;
- }
-
- return FFREERTOS_SDIO_OK;
-}
-
-static inline void FSdioOsGiveSema(SemaphoreHandle_t locker)
-{
- FASSERT_MSG((NULL != locker), "locker not exists");
- if (pdFALSE == xSemaphoreGive(locker))
- {
- FSDIO_ERROR("failed to give locker !!!");
- }
-
- return;
-}
-
-static void FSdioOSSetupInterrupt(FSdio *ctrl)
-{
- uintptr base_addr = ctrl->config.base_addr;
- u32 cpu_id = 0;
-
- GetCpuId(&cpu_id);
- FSDIO_INFO("cpu_id is cpu_id %d", cpu_id);
- InterruptSetTargetCpus(ctrl->config.irq_num, cpu_id);
- InterruptSetPriority(ctrl->config.irq_num, FFREERTOS_SDIO_IRQ_PRIORITY);
-
- /* register intr callback */
- InterruptInstall(ctrl->config.irq_num,
- FSdioInterruptHandler,
- ctrl,
- NULL);
-
- /* enable sdio irq */
- InterruptUmask(ctrl->config.irq_num);
-
- FSDIO_INFO("sdio interrupt setup done !!!");
- return;
-}
-
-/* init sdmmc host */
-static sdmmc_err_t FSdioOsHostInit(int slot)
-{
- FASSERT((slot >= 0) && (slot < FSDIO_HOST_INSTANCE_NUM));
- return SDMMC_OK;
-}
-
-/* sdmmc host set bus width */
-static sdmmc_err_t FSdioOsHostSetBusWidth(int slot, size_t width)
-{
- FASSERT((slot >= 0) && (slot < FSDIO_HOST_INSTANCE_NUM));
- FFreeRTOSSdio *instance = &sdio[slot];
- FSdio *ctrl = &instance->ctrl;
- uintptr base_addr = ctrl->config.base_addr;
- FSDIO_INFO("set bus width as %d", width);
- FSdioSetBusWidth(base_addr, width);
- return SDMMC_OK;
-}
-
-/* sdmmc host get bus width */
-static size_t FSdioOsHostGetBusWidth(int slot)
-{
- FASSERT((slot >= 0) && (slot < FSDIO_HOST_INSTANCE_NUM));
- FFreeRTOSSdio *instance = &sdio[slot];
- FSdio *ctrl = &instance->ctrl;
- uintptr base_addr = ctrl->config.base_addr;
- size_t bus_width = (size_t)FSdioGetBusWidth(base_addr);
- FSDIO_INFO("get bus width as %d", bus_width);
- return bus_width;
-}
-
-/* sdmmc host set ddr mode */
-static sdmmc_err_t FSdioOsHostSetDDRMode(int slot, bool ddr_enabled)
-{
- FASSERT((slot >= 0) && (slot < FSDIO_HOST_INSTANCE_NUM));
- FSDIO_ERROR("sdio_host_set_bus_ddr_mode not supported !!!");
- return SDMMC_OK;
-}
-
-/* sdmmc host change card clock freq */
-static sdmmc_err_t FSdioOsHostSetCardClock(int slot, u32 freq_khz)
-{
- FASSERT((slot >= 0) && (slot < FSDIO_HOST_INSTANCE_NUM));
- FFreeRTOSSdio *instance = &sdio[slot];
- FSdio *ctrl = &instance->ctrl;
- FSDIO_INFO("set clk rate as %dKHz", freq_khz);
- FError err = FSdioSetClkFreq(ctrl, freq_khz * 1000);
- return (FSDIO_SUCCESS == err) ? SDMMC_OK : SDMMC_FAIL;
-}
-
-/* convert command info from sdmmc_command_t to FSdioCmdData */
-static void FSdioOsConvertCmdInfo(sdmmc_command_t *cmdinfo, FSdioCmdData *cmd_data)
-{
- if (MMC_GO_IDLE_STATE == cmdinfo->opcode)
- {
- cmd_data->flag |= FSDIO_CMD_FLAG_NEED_INIT;
- }
-
- if (SCF_RSP_CRC & cmdinfo->flags)
- {
- cmd_data->flag |= FSDIO_CMD_FLAG_NEED_RESP_CRC;
- }
-
- if (SCF_RSP_PRESENT & cmdinfo->flags)
- {
- cmd_data->flag |= FSDIO_CMD_FLAG_EXP_RESP;
-
- if (SCF_RSP_136 & cmdinfo->flags)
- {
- cmd_data->flag |= FSDIO_CMD_FLAG_EXP_LONG_RESP;
- }
- }
-
- if (cmdinfo->data)
- {
- FASSERT_MSG(cmd_data->data_p, "data buffer shall be assigned");
- cmd_data->flag |= FSDIO_CMD_FLAG_EXP_DATA;
-
- if (SCF_CMD_READ & cmdinfo->flags)
- {
- cmd_data->flag |= FSDIO_CMD_FLAG_READ_DATA;
- }
- else
- {
- cmd_data->flag |= FSDIO_CMD_FLAG_WRITE_DATA;
- }
-
- cmd_data->data_p->buf = cmdinfo->data;
- cmd_data->data_p->blksz = cmdinfo->blklen;
- cmd_data->data_p->datalen = cmdinfo->datalen;
- FSDIO_INFO("buf@%p, blksz: %d, datalen: %d",
- cmd_data->data_p->buf,
- cmd_data->data_p->blksz,
- cmd_data->data_p->datalen);
- }
-
- cmd_data->cmdidx = cmdinfo->opcode;
- cmd_data->cmdarg = cmdinfo->arg;
-
- return;
-}
-
-/* send signal sdio error from interrupt */
-static void FSdioOsHandleError(FSdio *const ctrl, void *args)
-{
- FASSERT(ctrl);
- FSDIO_ERROR("sdio error occur ...");
-
- FFreeRTOSSdio *instance = (FFreeRTOSSdio *)args;
- BaseType_t xhigher_priority_task_woken = pdFALSE;
- BaseType_t x_result = pdFALSE;
-
- FASSERT(instance->evt);
- x_result = xEventGroupSetBitsFromISR(instance->evt, FFREERTOS_SDIO_ERROR_OCCURRED,
- &xhigher_priority_task_woken);
-}
-
-/* send signal sdio command done from interrupt */
-static void FSdioOsAckCmdDone(FSdio *const ctrl, void *args)
-{
- FASSERT(args);
- FFreeRTOSSdio *instance = (FFreeRTOSSdio *)args;
- BaseType_t xhigher_priority_task_woken = pdFALSE;
- BaseType_t x_result = pdFALSE;
-
- FSDIO_DEBUG("ack cmd and data trans done");
- FASSERT(instance->evt);
- x_result = xEventGroupSetBitsFromISR(instance->evt, FFREERTOS_SDIO_CMD_TRANS_DONE,
- &xhigher_priority_task_woken);
-
- return;
-}
-
-/* send signal sdio data over from interrupt */
-static void FSdioOsAckDataDone(FSdio *const ctrl, void *args)
-{
- FASSERT(args);
- FFreeRTOSSdio *instance = (FFreeRTOSSdio *)args;
- BaseType_t xhigher_priority_task_woken = pdFALSE;
- BaseType_t x_result = pdFALSE;
-
- FSDIO_DEBUG("ack cmd and data trans done");
- FASSERT(instance->evt);
- x_result = xEventGroupSetBitsFromISR(instance->evt, FFREERTOS_SDIO_DAT_TRANS_DONE,
- &xhigher_priority_task_woken);
-
- return;
-}
-
-/* wait sdio command done / data over / error occurred from task */
-static FError FSdioOsWaitCmdDataDone(FFreeRTOSSdio *const instance)
-{
- const TickType_t wait_delay = pdMS_TO_TICKS(FFREERTOS_SDIO_CMD_TIMEOUT); /* wait for 5000 ms */
- EventBits_t ev;
- FError err = FFREERTOS_SDIO_OK;
- u32 evt_bits = FFREERTOS_SDIO_CMD_TRANS_DONE; /* command done */
- u32 err_bits = FFREERTOS_SDIO_ERROR_OCCURRED; /* error occurred */
- FSdioCmdData *cmd_data = &instance->cmd_data;
- FSdio *ctrl = &instance->ctrl;
-
- if (cmd_data->data_p)
- {
- evt_bits |= FFREERTOS_SDIO_DAT_TRANS_DONE; /* need to wait data over */
- }
-
- /* block task to wait finish signal */
- FASSERT_MSG(instance->evt, "evt not exists");
- ev = xEventGroupWaitBits(instance->evt, evt_bits,
- pdTRUE, pdTRUE, wait_delay); /* wait for cmd/data done */
- if (ev & evt_bits == evt_bits)
- {
- FSDIO_DEBUG("trans done");
- err = FSdioGetCmdResponse(ctrl, cmd_data); /* check for response data */
- }
- else if (ev & err_bits)
- {
- /* restart controller in interrupt is not a good idea */
- FSdioDumpRegister(ctrl->config.base_addr);
- FSDIO_WARN("restart controller from error state !!!");
- err = FSdioRestart(ctrl); /* update clock otherwise next command will also fail */
- }
- else
- {
- FSDIO_ERROR("trans timeout, ev: 0x%x != 0x%x", ev, evt_bits);
- err = FFREERTOS_SDIO_EVT_ERR;
- }
-
- return err;
-}
-
-/* sdmmc do cmd and data transaction */
-static sdmmc_err_t FSdioOsHostDoTransaction(int slot, sdmmc_command_t *cmdinfo)
-{
- FASSERT((slot >= 0) && (slot < FSDIO_HOST_INSTANCE_NUM));
- FFreeRTOSSdio *instance = &sdio[slot];
- FSdio *ctrl = &instance->ctrl;
- sdmmc_err_t ret = SDMMC_OK;
- FSdioCmdData *cmd_data = &instance->cmd_data;
- FSdioData *trans_data = &instance->trans_data;
- FError err = FSDIO_SUCCESS;
-
- /* use static structure attached at instance to forward command & data */
- memset(cmd_data, 0, sizeof(*cmd_data));
- if (cmdinfo->data)
- {
- memset(trans_data, 0, sizeof(*trans_data));
- cmd_data->data_p = trans_data;
- }
-
- FSdioOsConvertCmdInfo(cmdinfo, cmd_data); /* prepare command data */
-
- if (instance->config.en_dma) /* DMA mode */
- {
- err = FSdioDMATransfer(ctrl, cmd_data);
- if (FSDIO_SUCCESS != err)
- {
- ret = SDMMC_FAIL;
- goto err_exit;
- }
- }
- else /* non-DMA, PIO mode */
- {
- err = FSdioPIOTransfer(ctrl, cmd_data);
- if (FSDIO_SUCCESS != err)
- {
- ret = SDMMC_FAIL;
- goto err_exit;
- }
- }
-
- /* wait command / data over signal */
- err = FSdioOsWaitCmdDataDone(instance);
- if (FSDIO_SUCCESS != err)
- {
- ret = SDMMC_FAIL;
- goto err_exit;
- }
-
- /* success, copy response out */
- if (SCF_RSP_PRESENT & cmdinfo->flags)
- {
- cmdinfo->response[0] = cmd_data->response[0];
-
- if (SCF_RSP_136 & cmdinfo->flags)
- {
- cmdinfo->response[1] = cmd_data->response[1];
- cmdinfo->response[2] = cmd_data->response[2];
- cmdinfo->response[3] = cmd_data->response[3];
- }
- }
-
-err_exit:
- return ret;
-}
-
-/* sdmmc host deinit */
-static sdmmc_err_t FSdioOsHostDeinit(void)
-{
- sdmmc_err_t err = SDMMC_OK;
- return err;
-}
-
-static sdmmc_err_t FSdioOsHostEnableIOInt(int slot)
-{
- FASSERT((slot >= 0) && (slot < FSDIO_HOST_INSTANCE_NUM));
- FSDIO_ERROR("sdio_host_io_int_enable not supported !!!");
- return SDMMC_OK;
-}
-
-static sdmmc_err_t FSdioOsHostWaitIOInt(int slot, TickType_t timeout_ticks)
-{
- FASSERT((slot >= 0) && (slot < FSDIO_HOST_INSTANCE_NUM));
- FSDIO_ERROR("sdio_host_io_int_wait not supported !!!");
- return SDMMC_OK;
-}
-
-/* setup sdmmc host */
-static FError FSdioOsSetupHost(FFreeRTOSSdio *const instance)
-{
- FSdio *ctrl = &instance->ctrl;
- int slot = (int)ctrl->config.instance_id;
- FSdioOSHost *const sdmmc = &sdmmc_host[slot];
- sdmmc_host_t *host_p = &sdmmc->host; /* host */
- sdmmc_card_t *card_p = &sdmmc->card; /* card */
- sdmmc_err_t sd_err = SDMMC_OK;
- static boolean sdmmc_inited = FALSE;
-
- if (TRUE != sdmmc_inited)
- {
- /* init sdmmc, which is shared by all instance, and init only one time */
- sd_err = sdmmc_port_init();
- if (SDMMC_OK != sd_err)
- goto err_exit;
-
- sdmmc_inited = TRUE;
- }
-
- instance->host_data = sdmmc;
-
- /* set sdmmc host parameters */
- host_p->slot = slot;
- host_p->flags |= SDMMC_HOST_FLAG_4BIT; /* bus width = 4 bit */
- host_p->flags &= ~SDMMC_HOST_FLAG_DDR; /* not support DDR mode */
- host_p->flags &= ~SDMMC_HOST_FLAG_SPI; /* not support SPI mode */
- host_p->max_freq_khz = SDMMC_FREQ_50M; /* max freq 50MHz */
- host_p->io_voltage = 3.3f; /* 3.3v */
- host_p->command_timeout_ms = FFREERTOS_SDIO_CMD_TIMEOUT; /* 5000ms timeout */
-
- FSDIO_INFO("slot: %d, flags: 0x%x, freq: %dkHz",
- host_p->slot, host_p->flags, host_p->max_freq_khz);
-
- /* register host ops */
- host_p->init = FSdioOsHostInit;
- host_p->set_bus_width = FSdioOsHostSetBusWidth;
- host_p->get_bus_width = FSdioOsHostGetBusWidth;
- host_p->set_bus_ddr_mode = FSdioOsHostSetDDRMode;
- host_p->set_card_clk = FSdioOsHostSetCardClock;
- host_p->do_transaction = FSdioOsHostDoTransaction;
- host_p->deinit = FSdioOsHostDeinit;
- host_p->io_int_enable = FSdioOsHostEnableIOInt;
- host_p->io_int_wait = FSdioOsHostWaitIOInt;
-
- /* set clock as 400kHz to probe card */
- sd_err = FSdioOsHostSetCardClock(slot, SDMMC_FREQ_PROBING);
- if (SDMMC_OK != sd_err)
- {
- FSDIO_ERROR("sdio ctrl setup 400kHz clock failed");
- goto err_exit;
- }
-
- /* probe eMMC or tf card */
- if (FFREERTOS_SDIO_MEDIUM_EMMC == instance->config.medium_type)
- {
- sd_err = sdmmc_init_emmc(host_p, card_p);
- }
- else if (FFREERTOS_SDIO_MEDIUM_TF == instance->config.medium_type)
- {
- sd_err = sdmmc_init_tf_card(host_p, card_p);
- }
-
- if (SDMMC_OK == sd_err)
- {
- sdmmc_card_print_info(stdout, card_p); /* print card info is success */
- }
- else
- {
- FSDIO_ERROR("card init failed: 0x%x", sd_err);
- }
-
-err_exit:
- return (SDMMC_OK != sd_err) ? FFREERTOS_SDIO_HOST_ERR : FFREERTOS_SDIO_OK;
-}
-
-/**
- * @name: FFreeRTOSSdioInit
- * @msg: init and get sdio instance
- * @return {FFreeRTOSSdio *} NULL if failed
- * @param {u32} id, instance id of sdio
- * @param {FFreeRTOSSdioConifg} *input_config, input config of sdio
- */
-FFreeRTOSSdio *FFreeRTOSSdioInit(u32 id, const FFreeRTOSSdioConifg *input_config)
-{
- FASSERT(input_config);
- FASSERT_MSG(id < FSDIO_HOST_INSTANCE_NUM, "invalid sdio id");
- FFreeRTOSSdio *instance = &sdio[id];
- FSdio *ctrl = &instance->ctrl;
- FSdioConfig sdio_config;
- FError err = FFREERTOS_SDIO_OK;
- sdmmc_err_t sd_err = SDMMC_OK;
-
- if (FT_COMPONENT_IS_READY == ctrl->is_ready)
- {
- FSDIO_ERROR("sdio-%d already init", id);
- return instance;
- }
-
- taskENTER_CRITICAL(); /* no scheduler during init */
-
- instance->config = *input_config;
- sdio_config = *FSdioLookupConfig(id);
- sdio_config.trans_mode = (instance->config.en_dma) ? FSDIO_IDMA_TRANS_MODE : FSDIO_PIO_TRANS_MODE;
- if (FFREERTOS_SDIO_MEDIUM_EMMC == instance->config.medium_type)
- sdio_config.non_removable = TRUE;
- else
- sdio_config.non_removable = FALSE;
-
- err = FSdioCfgInitialize(ctrl, &sdio_config);
- if (FSDIO_SUCCESS != err)
- {
- FSDIO_ERROR("init sdio-%d failed, err: 0x%x !!!", id, err);
- taskEXIT_CRITICAL(); /* allow schedule after init */
- return NULL;
- }
-
- if (instance->config.en_dma)
- {
- /* setup dma list */
- err = FSdioSetIDMAList(ctrl, instance->rw_desc, FFREERTOS_SDIO_MAX_TRANS_BLOCK);
- if (FSDIO_SUCCESS != err)
- {
- FSDIO_ERROR("set sdio-%d dma list, err: 0x%x !!!", id, err);
- taskEXIT_CRITICAL(); /* allow schedule after init */
- return NULL;
- }
- }
-
- FSdioOSSetupInterrupt(ctrl);
-
- if (instance->config.card_detect_handler)
- {
- FSdioRegisterEvtHandler(ctrl, FSDIO_EVT_CARD_DETECTED,
- instance->config.card_detect_handler,
- instance->config.card_detect_args);
- }
-
- /* restart controller if error */
- FSdioRegisterEvtHandler(ctrl, FSDIO_EVT_ERR_OCCURE, FSdioOsHandleError, instance);
-
- /* transfer may end up with cmd over or cmd and data over */
- FSdioRegisterEvtHandler(ctrl, FSDIO_EVT_CMD_DONE, FSdioOsAckCmdDone, instance);
- FSdioRegisterEvtHandler(ctrl, FSDIO_EVT_DATA_DONE, FSdioOsAckDataDone, instance);
-
- FASSERT_MSG(NULL == instance->locker, "locker exists !!!");
- FASSERT_MSG((instance->locker = xSemaphoreCreateMutex()) != NULL, "create mutex failed !!!");
-
- FASSERT_MSG(NULL == instance->evt, "event group exists !!!");
- FASSERT_MSG((instance->evt = xEventGroupCreate()) != NULL, "create event group failed !!!");
-
- taskEXIT_CRITICAL(); /* allow schedule after init */
-
- /* take locker to protect instead disable scheduler,
- since card probe is time-consuming */
- err = FSdioOsTakeSema(instance->locker);
- if (FFREERTOS_SDIO_OK != err)
- return NULL;
-
- /* including card probe process, which could be time consuming */
- err = FSdioOsSetupHost(instance);
-
-err_exit:
- FSdioOsGiveSema(instance->locker);
- return (FFREERTOS_SDIO_OK == err) ? instance : NULL; /* exit with NULL if failed */
-}
-
-/**
- * @name: FFreeRTOSSdioDeInit
- * @msg: deinit sdio instance
- * @return {FError} FFREERTOS_SDIO_OK if success
- * @param {FFreeRTOSSdio} *instance, freertos sdio instance
- */
-FError FFreeRTOSSdioDeInit(FFreeRTOSSdio *const instance)
-{
- FASSERT(instance);
- FSdio *ctrl = &instance->ctrl;
- FError err = FFREERTOS_SDIO_OK;
-
- /* no scheduler during deinit */
- taskENTER_CRITICAL();
-
- /* disable sdio irq */
- InterruptMask(ctrl->config.irq_num);
-
- FSdioDeInitialize(ctrl);
-
- instance->host_data = NULL;
-
- FASSERT_MSG(NULL != instance->locker, "locker not exists !!!");
- vSemaphoreDelete(instance->locker);
- instance->locker = NULL;
-
- FASSERT_MSG(NULL != instance->evt, "event group not exists !!!");
- vEventGroupDelete(instance->evt);
- instance->evt = NULL;
-
- taskEXIT_CRITICAL(); /* allow schedule after deinit */
-
- return err;
-}
-
-/**
- * @name: FFreeRTOSSdioTransfer
- * @msg: start sdio transfer and wait transfer done in this function
- * @return {FError} FFREERTOS_SDIO_OK if transfer success
- * @param {FFreeRTOSSdio} *instance, freertos sdio instance
- * @param {FFreeRTOSSdioMessage} *message, sdio transfer message
- */
-FError FFreeRTOSSdioTransfer(FFreeRTOSSdio *const instance, const FFreeRTOSSdioMessage *message)
-{
- FASSERT(instance);
- FSdio *ctrl = &instance->ctrl;
- sdmmc_err_t sd_err = SDMMC_OK;
- FError err = FFREERTOS_SDIO_OK;
- FSdioOSHost *sdmmc = (FSdioOSHost *)instance->host_data;
-
- err = FSdioOsTakeSema(instance->locker);
- if (FFREERTOS_SDIO_OK != err)
- return err;
-
- FASSERT_MSG(message->buf_len >= message->block_num * FSDIO_DEFAULT_BLOCK_SZ, "buffer not enough !!!");
- if (FFREERTOS_SDIO_TRANS_READ == message->trans_type)
- {
- sd_err = sdmmc_read_sectors(&sdmmc->card, (void *)message->buf,
- message->start_block, message->block_num);
- if (SDMMC_OK != sd_err)
- {
- err = FFREERTOS_SDIO_READ_ERR;
- }
- }
- else
- {
- sd_err = sdmmc_write_sectors(&sdmmc->card, (const void *)message->buf,
- message->start_block, message->block_num);
- if (SDMMC_OK != sd_err)
- {
- err = FFREERTOS_SDIO_WRITE_ERR;
- }
- }
-
-err_exit:
- FSdioOsGiveSema(instance->locker);
- return err;
-}
\ No newline at end of file
diff --git a/drivers/mmc/fsdio/fsdio_os.h b/drivers/mmc/fsdio/fsdio_os.h
deleted file mode 100644
index 52836e70363230d1315753125eb47936a6a083a7..0000000000000000000000000000000000000000
--- a/drivers/mmc/fsdio/fsdio_os.h
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
- * All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
- * FilePath: fsdio_os.h
- * Date: 2022-07-25 09:14:34
- * LastEditTime: 2022-07-25 09:14:34
- * Description: This files is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
- * 1.0 zhugengyu 2022/7/27 init commit
- */
-#ifndef DRIVERS_FSDIO_OS_H
-#define DRIVERS_FSDIO_OS_H
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/***************************** Include Files *********************************/
-#include
-#include
-#include
-
-#include "fkernel.h"
-#include "fparameters.h"
-#include "fsdio.h"
-
-/************************** Constant Definitions *****************************/
-#define FFREERTOS_SDIO_OK FT_SUCCESS
-#define FFREERTOS_SDIO_SEMA_ERR FT_CODE_ERR(ErrModPort, ErrBspMmc, 1)
-#define FFREERTOS_SDIO_HOST_ERR FT_CODE_ERR(ErrModPort, ErrBspMmc, 2)
-#define FFREERTOS_SDIO_EVT_ERR FT_CODE_ERR(ErrModPort, ErrBspMmc, 3)
-#define FFREERTOS_SDIO_READ_ERR FT_CODE_ERR(ErrModPort, ErrBspMmc, 4)
-#define FFREERTOS_SDIO_WRITE_ERR FT_CODE_ERR(ErrModPort, ErrBspMmc, 5)
-
-#define FFREERTOS_SDIO_IRQ_PRIORITY IRQ_PRIORITY_VALUE_12
-
-#define FFREERTOS_SDIO_MEDIUM_TF 0U /* sdio medium is tf card */
-#define FFREERTOS_SDIO_MEDIUM_EMMC 1U /* sdio medium is emmc */
-
-#define FFREERTOS_SDIO_TRANS_READ 0U /* sdio trans direction is read */
-#define FFREERTOS_SDIO_TRANS_WRITE 1U /* sdio trans direction is write */
-
-#define FFREERTOS_SDIO_MAX_TRANS_BLOCK 64U /* max num of block involved in one transfer */
-#define FFREERTOS_SDIO_BLOCK_SIZE FSDIO_DEFAULT_BLOCK_SZ
-
-#define FFREERTOS_SDIO_CMD_TIMEOUT 5000U
-/**************************** Type Definitions *******************************/
-typedef struct
-{
- boolean en_dma; /* TRUE: data transfer in DMA mode, FALSE: PIO mode */
- u32 medium_type; /* use FFREERTOS_SDIO_MEDIUM_* */
- FSdioEvtHandler card_detect_handler; /* callback for card detect status change */
- void *card_detect_args;
-} FFreeRTOSSdioConifg; /* freertos sdio config */
-
-typedef struct
-{
- FSdio ctrl;
- FFreeRTOSSdioConifg config;
- SemaphoreHandle_t locker;
- EventGroupHandle_t evt;
-#define FFREERTOS_SDIO_CMD_TRANS_DONE (0x1 << 0) /* evt bit when command / data finished */
-#define FFREERTOS_SDIO_DAT_TRANS_DONE (0x1 << 1)
-#define FFREERTOS_SDIO_ERROR_OCCURRED (0x1 << 2) /* evt bit when ctrl in error occurred */
- void *host_data; /* store private data of card and host */
- volatile FSdioIDmaDesc rw_desc[FFREERTOS_SDIO_MAX_TRANS_BLOCK]; /* dma descriptor entry */
- FSdioCmdData cmd_data; /* command information */
- FSdioData trans_data; /* data information */
-} FFreeRTOSSdio; /* freertos sdio instance */
-
-typedef struct
-{
- uintptr start_block; /* block to start read/write */
- fsize_t block_num; /* num of block to read/write */
- u8 *buf; /* buffer read from / write to */
- fsize_t buf_len; /* bytes of buffer contents */
- u32 trans_type; /* use FFREERTOS_SDIO_TRANS_* */
-} FFreeRTOSSdioMessage; /* freertos sdio transfer message */
-
-/************************** Variable Definitions *****************************/
-
-/***************** Macros (Inline Functions) Definitions *********************/
-
-/************************** Function Prototypes ******************************/
-
-/*****************************************************************************/
-/* init and get sdio instance */
-FFreeRTOSSdio *FFreeRTOSSdioInit(u32 instance_id, const FFreeRTOSSdioConifg *config);
-
-/* deinit sdio instance */
-FError FFreeRTOSSdioDeInit(FFreeRTOSSdio *const instance);
-
-/* start sdio transfer and wait transfer done in this function */
-FError FFreeRTOSSdioTransfer(FFreeRTOSSdio *const instance, const FFreeRTOSSdioMessage *message);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
\ No newline at end of file
diff --git a/drivers/pwm/fpwm_os.c b/drivers/pwm/fpwm_os.c
index 37f42fef2eb91d83d79203d63d9312d212f8367d..84da8c4e2f685780bd49c208b19d229fdf628bc9 100644
--- a/drivers/pwm/fpwm_os.c
+++ b/drivers/pwm/fpwm_os.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: fpwm_os.c
* Date: 2022-08-15 14:20:19
* LastEditTime: 2022-08-25 16:59:51
- * Description: This file is for
- *
- * Modify History:
+ * Description: This file is for required function implementations of pwm driver used in FreeRTOS.
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2022/08/26 first commit
*/
#include
#include
@@ -39,7 +40,7 @@
#define FPWM_INFO(format, ...) FT_DEBUG_PRINT_I(FPWM_DEBUG_TAG, format, ##__VA_ARGS__)
#define FPWM_DEBUG(format, ...) FT_DEBUG_PRINT_D(FPWM_DEBUG_TAG, format, ##__VA_ARGS__)
-static FFreeRTOSPwm os_pwm[FPWM_INSTANCE_NUM] = {0};
+static FFreeRTOSPwm os_pwm[FPWM_NUM] = {0};
/**
* @name: FFreeRTOSPwmInit
@@ -49,7 +50,7 @@ static FFreeRTOSPwm os_pwm[FPWM_INSTANCE_NUM] = {0};
*/
FFreeRTOSPwm *FFreeRTOSPwmInit(u32 instance_id)
{
- FASSERT(instance_id < FPWM_INSTANCE_NUM);
+ FASSERT(instance_id < FPWM_NUM);
FASSERT(FT_COMPONENT_IS_READY != os_pwm[instance_id].pwm_ctrl.is_ready);
FPwmConfig pconfig;
@@ -59,7 +60,7 @@ FFreeRTOSPwm *FFreeRTOSPwmInit(u32 instance_id)
FASSERT(FPwmCfgInitialize(&os_pwm[instance_id].pwm_ctrl, &pconfig) == FT_SUCCESS);
FASSERT((os_pwm[instance_id].pwm_semaphore = xSemaphoreCreateMutex()) != NULL);
-
+
return (&os_pwm[instance_id]);
}
@@ -73,11 +74,11 @@ FError FFreeRTOSPwmDeinit(FFreeRTOSPwm *os_pwm_p)
{
FASSERT(os_pwm_p);
FASSERT(os_pwm_p->pwm_semaphore != NULL);
-
+
FPwmDeInitialize(&os_pwm_p->pwm_ctrl);
vSemaphoreDelete(os_pwm_p->pwm_semaphore);
memset(os_pwm_p, 0, sizeof(*os_pwm_p));
-
+
return FPWM_SUCCESS;
}
@@ -97,12 +98,12 @@ static FError FFreeRTOSPwmControl(FFreeRTOSPwm *os_pwm_p, int cmd, void *arg)
/* New contrl can be performed only after current one is finished */
if (pdFALSE == xSemaphoreTake(os_pwm_p->pwm_semaphore, portMAX_DELAY))
{
- FPWM_ERROR("Pwm xSemaphoreTake failed\r\n");
+ FPWM_ERROR("Pwm xSemaphoreTake failed.");
/* We could not take the semaphore, exit with 0 data received */
return FREERTOS_PWM_SEM_ERROR;
}
- switch (cmd)
+ switch (cmd)
{
case FREERTOS_PWM_CTRL_SET:
ret = FPwmVariableSet(&os_pwm_p->pwm_ctrl, configuration->channel, &configuration->pwm_cfg);
@@ -133,7 +134,7 @@ static FError FFreeRTOSPwmControl(FFreeRTOSPwm *os_pwm_p, int cmd, void *arg)
break;
default:
- FPWM_ERROR("invalid cmd.");
+ FPWM_ERROR("Invalid cmd.");
ret = FPWM_ERR_NOT_SUPPORT;
break;
}
@@ -142,7 +143,7 @@ static FError FFreeRTOSPwmControl(FFreeRTOSPwm *os_pwm_p, int cmd, void *arg)
if (pdFALSE == xSemaphoreGive(os_pwm_p->pwm_semaphore))
{
/* We could not post the semaphore, exit with error */
- FPWM_ERROR("Pwm xSemaphoreGive failed\r\n");
+ FPWM_ERROR("Pwm xSemaphoreGive failed.");
return FREERTOS_PWM_SEM_ERROR;
}
@@ -188,9 +189,9 @@ FError FFreeRTOSPwmGet(FFreeRTOSPwm *os_pwm_p, FPwmChannel channel, FPwmVariable
FError ret = FPWM_SUCCESS;
FFreeRTOSPwmConfig configuration = {0};
configuration.channel = channel;
-
+
ret = FFreeRTOSPwmControl(os_pwm_p, FREERTOS_PWM_CTRL_GET, &configuration);
- if(ret == FPWM_SUCCESS)
+ if (ret == FPWM_SUCCESS)
{
*pwm_cfg_p = configuration.pwm_cfg;
}
@@ -210,12 +211,12 @@ FError FFreeRTOSPwmEnable(FFreeRTOSPwm *os_pwm_p, FPwmChannel channel, boolean s
FASSERT(os_pwm_p);
FASSERT(os_pwm_p->pwm_semaphore != NULL);
FASSERT(channel < FPWM_CHANNEL_NUM);
-
+
FError ret = FPWM_SUCCESS;
FFreeRTOSPwmConfig configuration = {0};
configuration.channel = channel;
- if (state==TRUE)
+ if (state == TRUE)
{
ret = FFreeRTOSPwmControl(os_pwm_p, FREERTOS_PWM_CTRL_ENABLE, &configuration);
}
@@ -223,7 +224,7 @@ FError FFreeRTOSPwmEnable(FFreeRTOSPwm *os_pwm_p, FPwmChannel channel, boolean s
{
ret = FFreeRTOSPwmControl(os_pwm_p, FREERTOS_PWM_CTRL_DISABLE, &configuration);
}
-
+
return ret;
}
@@ -250,7 +251,7 @@ FError FFreeRTOSPwmDbSet(FFreeRTOSPwm *os_pwm_p, FPwmDbVariableConfig *db_cfg_p)
* @name: FFreeRTOSPwmDbGet
* @msg: get pwm db config, include polarity, input source, delay time.
* @param {FFreeRTOSPwm} *os_pwm_p, pointer to os pwm instance
- * @param {FPwmDbVariableConfig} db_cfg_p, pwm db config parameters
+ * @param {FPwmDbVariableConfig} db_cfg_p, pwm db config parameters
* @return err code information, FPWM_SUCCESS indicates success,others indicates failed
*/
FError FFreeRTOSPwmDbGet(FFreeRTOSPwm *os_pwm_p, FPwmDbVariableConfig *db_cfg_p)
@@ -260,9 +261,9 @@ FError FFreeRTOSPwmDbGet(FFreeRTOSPwm *os_pwm_p, FPwmDbVariableConfig *db_cfg_p)
FASSERT(db_cfg_p != NULL);
FError ret = FPWM_SUCCESS;
FFreeRTOSPwmConfig configuration = {0};
-
+
ret = FFreeRTOSPwmControl(os_pwm_p, FREERTOS_PWM_CTRL_DB_GET, &configuration);
- if(ret == FPWM_SUCCESS)
+ if (ret == FPWM_SUCCESS)
{
*db_cfg_p = configuration.db_cfg;
}
diff --git a/drivers/pwm/fpwm_os.h b/drivers/pwm/fpwm_os.h
index 18054a238b66149ec33404c3a5c45f1e9f16ca5e..0344d17e9aeb1eeff754f58db41b7f021c7b6b95 100644
--- a/drivers/pwm/fpwm_os.h
+++ b/drivers/pwm/fpwm_os.h
@@ -1,28 +1,29 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: fpwm_os.h
* Date: 2022-02-24 13:42:19
* LastEditTime: 2022-03-21 16:59:58
- * Description: This file is for
- *
- * Modify History:
+ * Description: This file is for providing function related definitions of pwm driver used in FreeRTOS.
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2022/08/26 first commit
*/
-#ifndef DRIVERS_FPWM_OS_H
-#define DRIVERS_FPWM_OS_H
+#ifndef FPWM_OS_H
+#define FPWM_OS_H
#include
#include
@@ -30,6 +31,11 @@
#include "fpwm.h"
#include "ftypes.h"
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
/* freertos pwm error */
#define FREERTOS_PWM_SEM_ERROR FT_CODE_ERR(ErrModBsp, ErrBspPwm, 10)
@@ -50,7 +56,7 @@ typedef struct
u32 channel; /* 0-1 */
FPwmVariableConfig pwm_cfg;
FPwmDbVariableConfig db_cfg;
-}FFreeRTOSPwmConfig;
+} FFreeRTOSPwmConfig;
typedef struct
{
@@ -82,5 +88,8 @@ FError FFreeRTOSPwmDbGet(FFreeRTOSPwm *os_pwm_p, FPwmDbVariableConfig *db_cfg_p)
/* set pwm channel pulse */
FError FFreeRTOSPwmPulseSet(FFreeRTOSPwm *os_pwm_p, FPwmChannel channel, u16 pulse);
+#ifdef __cplusplus
+}
+#endif
#endif // !
diff --git a/drivers/qspi/fqspi_os.c b/drivers/qspi/fqspi_os.c
index 25b97b86562b74930c93349dad21528890fea020..a05198a632fd9f586f15fe9363466dcd3c27afd3 100644
--- a/drivers/qspi/fqspi_os.c
+++ b/drivers/qspi/fqspi_os.c
@@ -1,24 +1,26 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: fqspi_os.c
* Date: 2022-02-24 13:42:19
* LastEditTime: 2022-03-21 16:59:51
- * Description: This file is for
- *
- * Modify History:
+ * Description: This file is for required function implementations of qspi driver used in FreeRTOS.
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2022/08/09 first commit
+ * 1.1 wangxiaodong 2022/11/09 qspi sfud perfection
*/
#include
#include
@@ -26,23 +28,30 @@
#include
#include "task.h"
#include "ftypes.h"
+#include "fdebug.h"
#include "fassert.h"
#include "fqspi_os.h"
#include "fqspi.h"
#include "fqspi_hw.h"
#include "fqspi_flash.h"
-static FFreeRTOSQspi os_qspi[FQSPI_INSTANCE_NUM] = {0};
+#define FQSPI_DEBUG_TAG "FFreeRTOSQspi"
+#define FQSPI_ERROR(format, ...) FT_DEBUG_PRINT_E(FQSPI_DEBUG_TAG, format, ##__VA_ARGS__)
+#define FQSPI_WARN(format, ...) FT_DEBUG_PRINT_W(FQSPI_DEBUG_TAG, format, ##__VA_ARGS__)
+#define FQSPI_INFO(format, ...) FT_DEBUG_PRINT_I(FQSPI_DEBUG_TAG, format, ##__VA_ARGS__)
+#define FQSPI_DEBUG(format, ...) FT_DEBUG_PRINT_D(FQSPI_DEBUG_TAG, format, ##__VA_ARGS__)
+
+static FFreeRTOSQspi os_qspi[FQSPI_NUM] = {0};
/**
* @name: FFreeRTOSQspiInit
* @msg: init freertos qspi instance, include init qspi and create mutex
- * @param {u32} instance_id, qspi instance id, such as FQSPI_INSTANCE_0
+ * @param {u32} instance_id, qspi instance id, such as FQSPI0_ID
* @return {FFreeRTOSQspi *} pointer to os qspi instance
*/
FFreeRTOSQspi *FFreeRTOSQspiInit(u32 instance_id)
{
- FASSERT(instance_id < FQSPI_INSTANCE_NUM);
+ FASSERT(instance_id < FQSPI_NUM);
FASSERT(FT_COMPONENT_IS_READY != os_qspi[instance_id].qspi_ctrl.is_ready);
/* qspi initialize */
@@ -50,11 +59,11 @@ FFreeRTOSQspi *FFreeRTOSQspiInit(u32 instance_id)
qspi_config = *FQspiLookupConfig(instance_id);
FASSERT(FQspiCfgInitialize(&os_qspi[instance_id].qspi_ctrl, &qspi_config) == FT_SUCCESS);
/* detect connected flash infomation */
- FASSERT_MSG(FQspiFlashDetect(&os_qspi[instance_id].qspi_ctrl) == FT_SUCCESS, "flash detect failed.");
+ FASSERT_MSG(FQspiFlashDetect(&os_qspi[instance_id].qspi_ctrl) == FT_SUCCESS, "Flash detect failed.");
/* qspi wr_semaphore initialize */
FASSERT((os_qspi[instance_id].wr_semaphore = xSemaphoreCreateMutex()) != NULL);
-
+
return (&os_qspi[instance_id]);
}
@@ -94,7 +103,7 @@ FError FFreeRTOSQspiTransfer(FFreeRTOSQspi *os_qspi_p, FFreeRTOSQspiMessage *mes
u8 cmd = message->cmd;
u8 cs = message->cs;
FASSERT(cs < FQSPI_CS_NUM);
-
+
static u8 cs_bak = 0;
static u8 read_cmd_bak = 0;
size_t read_len = 0;
@@ -102,17 +111,17 @@ FError FFreeRTOSQspiTransfer(FFreeRTOSQspi *os_qspi_p, FFreeRTOSQspiMessage *mes
/* New transfer can be performed only after current one is finished */
if (pdFALSE == xSemaphoreTake(os_qspi_p->wr_semaphore, portMAX_DELAY))
{
- printf("Qspi xSemaphoreTake failed\r\n");
+ FQSPI_ERROR("Qspi xSemaphoreTake failed.");
/* We could not take the semaphore, exit with 0 data received */
return FREERTOS_QSPI_SEM_ERROR;
}
/* set qspi cs number if the value is changed */
- if(cs != cs_bak)
+ if (cs != cs_bak)
{
FQspiChannelSet(pctrl, cs);
cs_bak = cs;
}
- switch(cmd)
+ switch (cmd)
{
case FQSPI_FLASH_CMD_PP:
{
@@ -122,13 +131,13 @@ FError FFreeRTOSQspiTransfer(FFreeRTOSQspi *os_qspi_p, FFreeRTOSQspiMessage *mes
ret = FQspiFlashWriteData(pctrl, cmd, flash_addr, write_buf, length);
if (FQSPI_SUCCESS != ret)
{
- printf("Qspi failed to write mem, result 0x%x\r\n", ret);
+ FQSPI_ERROR("Qspi failed to write mem, result 0x%x", ret);
goto transfer_exit;
}
}
else
{
- printf("Qspi Transfer cmd %x write_buf is null\r\n", cmd);
+ FQSPI_ERROR("Qspi Transfer cmd %x write_buf is null.", cmd);
ret = FQSPI_INVAL_PARAM;
goto transfer_exit;
}
@@ -136,20 +145,20 @@ FError FFreeRTOSQspiTransfer(FFreeRTOSQspi *os_qspi_p, FFreeRTOSQspiMessage *mes
break;
case FQSPI_FLASH_CMD_READ:
- case FQSPI_FLASH_CMD_DUAL_READ:
- case FQSPI_FLASH_CMD_QIOR:
+ case FQSPI_FLASH_CMD_DUAL_READ:
+ case FQSPI_FLASH_CMD_QIOR:
case FQSPI_FLASH_CMD_4QIOR:
{
if (NULL != read_buf)
{
/* read norflash data */
- if(cmd != read_cmd_bak)
+ if (cmd != read_cmd_bak)
{
ret |= FQspiFlashReadDataConfig(pctrl, cmd);
read_cmd_bak = cmd;
if (FQSPI_SUCCESS != ret)
{
- printf("Qspi read config failed\r\n");
+ FQSPI_ERROR("Qspi read config failed.");
goto transfer_exit;
}
}
@@ -157,15 +166,15 @@ FError FFreeRTOSQspiTransfer(FFreeRTOSQspi *os_qspi_p, FFreeRTOSQspiMessage *mes
read_len = FQspiFlashReadData(pctrl, flash_addr, read_buf, length);
if (read_len != length)
{
- printf("Qspi failed to read mem, read len = %d\r\n", read_len);
+ FQSPI_ERROR("Qspi failed to read mem, read len = %d", read_len);
ret = FQSPI_NOT_SUPPORT;
goto transfer_exit;
}
-
+
}
else
{
- printf("Qspi Transfer cmd %x read_buf is null\r\n", cmd);
+ FQSPI_ERROR("Qspi Transfer cmd %x read_buf is null.", cmd);
ret = FQSPI_INVAL_PARAM;
goto transfer_exit;
}
@@ -175,38 +184,38 @@ FError FFreeRTOSQspiTransfer(FFreeRTOSQspi *os_qspi_p, FFreeRTOSQspiMessage *mes
case FQSPI_FLASH_CMD_RDID:
case FQSPI_FLASH_CMD_RDSR1:
ret = FQspiFlashSpecialInstruction(pctrl, cmd, read_buf, length);
- break;
+ break;
case FQSPI_FLASH_CMD_SFDP:
ret = FQspiFlashReadSfdp(pctrl, flash_addr, read_buf, length);
- break;
+ break;
case FQSPI_CMD_ENABLE_RESET:
case FQSPI_CMD_RESET:
case FQSPI_FLASH_CMD_WRR:
ret = FQspiFlashWriteReg(pctrl, cmd, NULL, 0);
- break;
+ break;
case FQSPI_FLASH_CMD_WREN:
ret = FQspiFlashEnableWrite(pctrl);
- break;
+ break;
case FQSPI_FLASH_CMD_WRDI:
ret = FQspiFlashDisableWrite(pctrl);
- break;
+ break;
- case FQSPI_FLASH_CMD_SE:
+ case FQSPI_FLASH_CMD_SE:
case FQSPI_FLASH_CMD_4SE:
case FQSPI_FLASH_CMD_4BE:
case FQSPI_FLASH_CMD_P4E:
ret = FQspiFlashErase(pctrl, cmd, flash_addr);
- break;
+ break;
default:
- printf("Qspi Transfer cmd invalid\r\n");
+ FQSPI_ERROR("Qspi Transfer cmd invalid.");
ret = FQSPI_INVAL_PARAM;
goto transfer_exit;
-
+
}
transfer_exit:
@@ -214,7 +223,7 @@ transfer_exit:
if (pdFALSE == xSemaphoreGive(os_qspi_p->wr_semaphore))
{
/* We could not post the semaphore, exit with error */
- printf("Qspi xSemaphoreGive failed\r\n");
+ FQSPI_ERROR("Qspi xSemaphoreGive failed.");
ret |= FREERTOS_QSPI_SEM_ERROR;
}
diff --git a/drivers/qspi/fqspi_os.h b/drivers/qspi/fqspi_os.h
index 8c59a75dda3ed9b94c2ddf7bb6fdce80c5fa4ef1..fb0b596cdd7c5dfd08bff01d9ff734101f59fd8f 100644
--- a/drivers/qspi/fqspi_os.h
+++ b/drivers/qspi/fqspi_os.h
@@ -1,28 +1,30 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: fqspi_os.h
* Date: 2022-02-24 13:42:19
* LastEditTime: 2022-03-21 16:59:58
- * Description: This file is for
- *
- * Modify History:
+ * Description: This file is for providing function related definitions of qspi driver used in FreeRTOS.
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2022/08/09 first commit
+ * 1.1 wangxiaodong 2022/11/09 qspi sfud perfection
*/
-#ifndef DRIVERS_FQSPI_OS_H
-#define DRIVERS_FQSPI_OS_H
+#ifndef FQSPI_OS_H
+#define FQSPI_OS_H
#include
#include
@@ -31,12 +33,17 @@
#include "fqspi_hw.h"
#include "ftypes.h"
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
#define FREERTOS_QSPI_SEM_ERROR FT_CODE_ERR(ErrModBsp, ErrBspQSpi, 10)
/**
* QSPI message structure
*/
-typedef struct
+typedef struct
{
const void *write_buf; /* qspi write buffer */
void *read_buf; /* qspi read buffer */
@@ -44,7 +51,7 @@ typedef struct
u32 addr; /* qspi flash address to read or write */
u8 cmd; /* qspi operate command */
u8 cs; /* qspi cs channel */
-}FFreeRTOSQspiMessage;
+} FFreeRTOSQspiMessage;
typedef struct
{
@@ -61,4 +68,8 @@ void FFreeRTOSQspiDeinit(FFreeRTOSQspi *os_qspi_p);
/* tranfer qspi mesage */
FError FFreeRTOSQspiTransfer(FFreeRTOSQspi *os_qspi_p, FFreeRTOSQspiMessage *message);
+#ifdef __cplusplus
+}
+#endif
+
#endif // !
diff --git a/drivers/serial/fpl011/fpl011_os.c b/drivers/serial/fpl011/fpl011_os.c
index 3d231df9962c748a4515a2256860c070cc3ad913..bf25ebd4203d84992bdbe9e8cfc6908715acef54 100644
--- a/drivers/serial/fpl011/fpl011_os.c
+++ b/drivers/serial/fpl011/fpl011_os.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: fpl011_os.c
* Date: 2022-02-24 13:42:19
* LastEditTime: 2022-03-21 16:59:51
- * Description: This file is for
- *
- * Modify History:
+ * Description: This file is for required function implementations of pl011 driver used in FreeRTOS.
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
+ * 1.0 huanghe 2022/04/21 first commit
*/
#include "fpl011_os.h"
@@ -27,10 +28,17 @@
#include "finterrupt.h"
#include "ftypes.h"
#include "fassert.h"
+#include "fdebug.h"
#include "sdkconfig.h"
#include "fcpu_info.h"
#include
+#define FPL011_DEBUG_TAG "FFreeRTOSPl001"
+#define FPL011_ERROR(format, ...) FT_DEBUG_PRINT_E(FPL011_DEBUG_TAG, format, ##__VA_ARGS__)
+#define FPL011_WARN(format, ...) FT_DEBUG_PRINT_W(FPL011_DEBUG_TAG, format, ##__VA_ARGS__)
+#define FPL011_INFO(format, ...) FT_DEBUG_PRINT_I(FPL011_DEBUG_TAG, format, ##__VA_ARGS__)
+#define FPL011_DEBUG(format, ...) FT_DEBUG_PRINT_D(FPL011_DEBUG_TAG, format, ##__VA_ARGS__)
+
/* Callback events */
static void FPl011IrqClearReciveTimeOut(FPl011 *uart_p)
{
@@ -101,7 +109,7 @@ void FtFreertosUartInit(FtFreertosUart *uart_p, FtFreertosUartConfig *config_p)
bsp_uart_p = &uart_p->bsp_uart;
uart_p->config = *config_p;
driver_config = *FPl011LookupConfig(config_p->uart_instance);
-
+
driver_config.baudrate = config_p->uart_baudrate;
ret = FPl011CfgInitialize(bsp_uart_p, &driver_config);
FASSERT(FT_SUCCESS == ret);
@@ -115,10 +123,10 @@ void FtFreertosUartInit(FtFreertosUart *uart_p, FtFreertosUartConfig *config_p)
GetCpuId(&cpu_id);
InterruptSetTargetCpus(bsp_uart_p->config.irq_num, cpu_id);
- FPl011SetRxFifoThreadhold(bsp_uart_p,FPL011IFLS_RXIFLSEL_1_4);
- FPl011SetTxFifoThreadHold(bsp_uart_p,FPL011IFLS_TXIFLSEL_1_2);
+ FPl011SetRxFifoThreadhold(bsp_uart_p, FPL011IFLS_RXIFLSEL_1_4);
+ FPl011SetTxFifoThreadHold(bsp_uart_p, FPL011IFLS_TXIFLSEL_1_2);
intr_mask = config_p->isr_event_mask;
- FPl011SetInterruptMask(bsp_uart_p,intr_mask);
+ FPl011SetInterruptMask(bsp_uart_p, intr_mask);
FPl011SetOptions(bsp_uart_p, FPL011_OPTION_UARTEN | FPL011_OPTION_RXEN | FPL011_OPTION_TXEN | FPL011_OPTION_FIFOEN);
InterruptSetPriority(bsp_uart_p->config.irq_num, config_p->isr_priority);
@@ -136,7 +144,7 @@ FError FtFreertosUartReceiveBuffer(FtFreertosUart *uart_p, u8 *buffer, u32 lengt
FASSERT(NULL != buffer);
bsp_uart_p = &uart_p->bsp_uart;
- if(length == 0)
+ if (length == 0)
{
*received_length = 0;
return FT_SUCCESS;
@@ -151,7 +159,7 @@ FError FtFreertosUartReceiveBuffer(FtFreertosUart *uart_p, u8 *buffer, u32 lengt
- if(uart_p->config.isr_event_mask & (RTOS_UART_ISR_RTIM_MASK|RTOS_UART_ISR_RXIM_MASK) )
+ if (uart_p->config.isr_event_mask & (RTOS_UART_ISR_RTIM_MASK | RTOS_UART_ISR_RXIM_MASK))
{
get_length = FPl011Receive(bsp_uart_p, buffer, length);
if (get_length > 0)
@@ -164,8 +172,8 @@ FError FtFreertosUartReceiveBuffer(FtFreertosUart *uart_p, u8 *buffer, u32 lengt
FPl011IrqEnableReciveTimeOut(bsp_uart_p);
ev = xEventGroupWaitBits(uart_p->rx_event,
- RTOS_UART_COMPLETE | RTOS_UART_HARDWARE_BUFFER_OVERRUN | RTOS_UART_RECV_ERROR,
- pdTRUE, pdFALSE, portMAX_DELAY);
+ RTOS_UART_COMPLETE | RTOS_UART_HARDWARE_BUFFER_OVERRUN | RTOS_UART_RECV_ERROR,
+ pdTRUE, pdFALSE, portMAX_DELAY);
if (ev & RTOS_UART_HARDWARE_BUFFER_OVERRUN)
{
@@ -200,7 +208,7 @@ FError FtFreertosUartReceiveBuffer(FtFreertosUart *uart_p, u8 *buffer, u32 lengt
if (pdFALSE == xSemaphoreGive(uart_p->rx_semaphore))
{
/* We could not post the semaphore, exit with error */
- printf("FST_FAILURE xSemaphoreGive \r\n");
+ FPL011_ERROR("FST_FAILURE xSemaphoreGive.");
ret = FREERTOS_UART_RECV_ERROR;
}
@@ -222,10 +230,10 @@ FError FtFreertosUartBlcokingSend(FtFreertosUart *uart_p, u8 *buffer, u32 length
return FREERTOS_UART_SEM_ERROR;
}
- if(uart_p->config.isr_event_mask & RTOS_UART_ISR_TXIM_MASK)
+ if (uart_p->config.isr_event_mask & RTOS_UART_ISR_TXIM_MASK)
{
send_length = FPl011Send(bsp_uart_p, buffer, length);
- if(send_length != length)
+ if (send_length != length)
{
ev = xEventGroupWaitBits(uart_p->tx_event, RTOS_UART_COMPLETE, pdTRUE, pdFALSE, portMAX_DELAY);
if (!(ev & RTOS_UART_COMPLETE))
@@ -236,7 +244,7 @@ FError FtFreertosUartBlcokingSend(FtFreertosUart *uart_p, u8 *buffer, u32 length
}
else
{
- FPl011BlockSend(bsp_uart_p,buffer,length);
+ FPl011BlockSend(bsp_uart_p, buffer, length);
}
if (pdFALSE == xSemaphoreGive(uart_p->tx_semaphore))
diff --git a/drivers/serial/fpl011/fpl011_os.h b/drivers/serial/fpl011/fpl011_os.h
index f6826f4abee057d786a44735b063407574defc9b..27b57954d8f2805b937a3a4cb7ad8724ae27f49a 100644
--- a/drivers/serial/fpl011/fpl011_os.h
+++ b/drivers/serial/fpl011/fpl011_os.h
@@ -1,29 +1,29 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: fpl011_os.h
* Date: 2022-02-24 13:42:19
* LastEditTime: 2022-03-21 16:59:58
- * Description: This file is for
- *
- * Modify History:
+ * Description: This file is for providing function related definitions of pl011 driver used in FreeRTOS.
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
+ * 1.0 huanghe 2022/04/21 first commit
*/
-
-#ifndef DRIVERS_SERIAL_FPL011_H
-#define DRIVERS_SERIAL_FPL011_H
+#ifndef FPL011_OS_H
+#define FPL011_OS_H
#include
#include
@@ -33,6 +33,11 @@
#include "ftypes.h"
#include "ferror_code.h"
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
#define FREERTOS_UART_SEM_ERROR FT_CODE_ERR(ErrModPort, 0, 0x1)
#define FREERTOS_UART_EVENT_ERROR FT_CODE_ERR(ErrModPort, 0, 0x2)
#define FREERTOS_UART_FIFO_ERROR FT_CODE_ERR(ErrModPort, 0, 0x3)
@@ -48,7 +53,7 @@
* @cond RTOS_PRIVATE
* @name UART FreeRTOS handler
*
-* These are the only valid states for txEvent and rxEvent
+* These are the only valid states for txEvent and rxEvent
*/
/*@{*/
/*! @brief Event flag - transfer complete. */
@@ -91,4 +96,8 @@ void FtFreertosUartInit(FtFreertosUart *uart_p, FtFreertosUartConfig *config_p);
FError FtFreertosUartBlcokingSend(FtFreertosUart *uart_p, u8 *buffer, u32 length);
FError FtFreertosUartReceiveBuffer(FtFreertosUart *uart_p, u8 *buffer, u32 length, u32 *received_length);
+#ifdef __cplusplus
+}
+#endif
+
#endif // !
diff --git a/drivers/spi/fspim/fspim_os.c b/drivers/spi/fspim/fspim_os.c
index e5bd91b3cd5ea46645807719922e0a93437a90fb..bc5e02883b05ec7cfcc0c7282b91ef2005697fa2 100644
--- a/drivers/spi/fspim/fspim_os.c
+++ b/drivers/spi/fspim/fspim_os.c
@@ -1,22 +1,22 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: fspim_os.c
* Date: 2022-07-18 09:05:53
* LastEditTime: 2022-07-18 09:05:53
- * Description: This files is for
- *
- * Modify History:
+ * Description: This file is for required function implementations of spi master driver used in FreeRTOS.
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
* 1.0 zhugengyu 2022/7/27 init commit
@@ -42,7 +42,7 @@
/**************************** Type Definitions *******************************/
/************************** Variable Definitions *****************************/
-static FFreeRTOSSpim spim[FSPI_DEVICE_NUM];
+static FFreeRTOSSpim spim[FSPI_NUM];
/***************** Macros (Inline Functions) Definitions *********************/
#define FSPIM_DEBUG_TAG "FSPIM-OS"
@@ -58,10 +58,10 @@ static void FSpimOsAckTransDone(void *instance_p, void *param);
static inline FError FSpimOsTakeSema(SemaphoreHandle_t locker)
{
- FASSERT_MSG((NULL != locker), "locker not exists");
+ FASSERT_MSG((NULL != locker), "Locker not exists.");
if (pdFALSE == xSemaphoreTake(locker, portMAX_DELAY))
{
- FSPIM_ERROR("failed to give locker !!!");
+ FSPIM_ERROR("Failed to give locker!!!");
return FFREERTOS_SPIM_SEMA_ERR;
}
@@ -70,10 +70,10 @@ static inline FError FSpimOsTakeSema(SemaphoreHandle_t locker)
static inline void FSpimOsGiveSema(SemaphoreHandle_t locker)
{
- FASSERT_MSG((NULL != locker), "locker not exists");
+ FASSERT_MSG((NULL != locker), "Locker not exists.");
if (pdFALSE == xSemaphoreGive(locker))
{
- FSPIM_ERROR("failed to give locker !!!");
+ FSPIM_ERROR("Failed to give locker!!!");
}
return;
@@ -94,9 +94,9 @@ static void FSpimOSSetupInterrupt(FSpim *ctrl)
InterruptSetPriority(config_p->irq_num, config_p->irq_prority);
/* register intr callback */
- InterruptInstall(config_p->irq_num,
- FSpimInterruptHandler,
- ctrl,
+ InterruptInstall(config_p->irq_num,
+ FSpimInterruptHandler,
+ ctrl,
NULL);
/* disable spi irq */
@@ -111,14 +111,14 @@ static void FSpimOSSetupInterrupt(FSpim *ctrl)
/**
* @name: FFreeRTOSSpimInit
* @msg: init and get spi instance
- * @return {FFreeRTOSSpim *} return
+ * @return {FFreeRTOSSpim *} return
* @param {u32} id, spim instance id
* @param {FFreeRTOSSpimConifg} *input_config, freertos spim config
*/
FFreeRTOSSpim *FFreeRTOSSpimInit(u32 id, const FFreeRTOSSpimConifg *input_config)
{
FASSERT(input_config);
- FASSERT_MSG(id < FSPI_DEVICE_NUM, "invalid spim id");
+ FASSERT_MSG(id < FSPI_NUM, "Invalid spim id.");
FFreeRTOSSpim *instance = &spim[id];
FSpim *ctrl = &instance->ctrl;
FSpimConfig config;
@@ -126,7 +126,7 @@ FFreeRTOSSpim *FFreeRTOSSpimInit(u32 id, const FFreeRTOSSpimConifg *input_config
if (FT_COMPONENT_IS_READY == ctrl->is_ready)
{
- FSPIM_ERROR("spi-%d already init", id);
+ FSPIM_ERROR("spi-%d already init.", id);
return instance;
}
@@ -136,7 +136,7 @@ FFreeRTOSSpim *FFreeRTOSSpimInit(u32 id, const FFreeRTOSSpimConifg *input_config
instance->config = *input_config;
config = *FSpimLookupConfig(id);
config.slave_dev_id = FSPIM_SLAVE_DEV_0;
-
+
if (FFREERTOS_SPIM_MODE_0 == instance->config.spi_mode) /* mode 0 */
{
config.cpha = FSPIM_CPHA_1_EDGE;
@@ -145,7 +145,7 @@ FFreeRTOSSpim *FFreeRTOSSpimInit(u32 id, const FFreeRTOSSpimConifg *input_config
else if (FFREERTOS_SPIM_MODE_1 == instance->config.spi_mode) /* mode 1 */
{
config.cpha = FSPIM_CPHA_2_EDGE;
- config.cpol = FSPIM_CPOL_LOW;
+ config.cpol = FSPIM_CPOL_LOW;
}
else if (FFREERTOS_SPIM_MODE_2 == instance->config.spi_mode) /* mode 2 */
{
@@ -156,34 +156,34 @@ FFreeRTOSSpim *FFreeRTOSSpimInit(u32 id, const FFreeRTOSSpimConifg *input_config
{
config.cpha = FSPIM_CPHA_2_EDGE;
config.cpol = FSPIM_CPOL_HIGH;
- }
+ }
config.n_bytes = FSPIM_1_BYTE;
config.en_test = instance->config.inner_loopback;
config.en_dma = instance->config.en_dma;
config.irq_prority = FFREERTOS_SPIM_IRQ_PRIORITY;
- config.max_freq_hz = FSPIM_OS_MAX_SPEED;
+ config.max_freq_hz = FSPIM_OS_MAX_SPEED;
FIOPadSetSpimMux(id);
FSPIM_INFO("init spi-%d @ 0x%x", config.instance_id, config.base_addr);
err = FSpimCfgInitialize(ctrl, &config);
if (FSPIM_SUCCESS != err)
- {
- FSPIM_ERROR("init spim-%d failed, err: 0x%x !!!", id, err);
+ {
+ FSPIM_ERROR("Init spim-%d failed, err: 0x%x!!!", id, err);
goto err_exit;
- }
+ }
- FASSERT_MSG(NULL == instance->locker, "locker exists !!!");
- FASSERT_MSG((instance->locker = xSemaphoreCreateMutex()) != NULL, "create mutex failed !!!");
+ FASSERT_MSG(NULL == instance->locker, "Locker exists!!!");
+ FASSERT_MSG((instance->locker = xSemaphoreCreateMutex()) != NULL, "Create mutex failed!!!");
- FASSERT_MSG(NULL == instance->evt, "event group exists !!!");
- FASSERT_MSG((instance->evt = xEventGroupCreate()) != NULL, "create event group failed !!!");
+ FASSERT_MSG(NULL == instance->evt, "Event group exists!!!");
+ FASSERT_MSG((instance->evt = xEventGroupCreate()) != NULL, "Create event group failed!!!");
FSpimOSSetupInterrupt(ctrl);
FSpimRegisterIntrruptHandler(ctrl, FSPIM_INTR_EVT_RX_DONE, FSpimOsAckTransDone, instance);
- FSPIM_INFO("init spi-%d success !!!", id);
+ FSPIM_INFO("Init spi-%d success!!!", id);
err_exit:
taskEXIT_CRITICAL(); /* allow schedule after init */
@@ -204,20 +204,20 @@ FError FFreeRTOSSpimDeInit(FFreeRTOSSpim *const instance)
if (FT_COMPONENT_IS_READY != ctrl->is_ready)
{
- FSPIM_ERROR("ddma-%d already init");
+ FSPIM_ERROR("ddma-%d already init.");
return FFREERTOS_SPIM_NOT_INIT;
}
/* no scheduler during deinit */
- taskENTER_CRITICAL();
+ taskENTER_CRITICAL();
FSpimDeInitialize(ctrl);
- FASSERT_MSG(NULL != instance->locker, "locker not exists !!!");
+ FASSERT_MSG(NULL != instance->locker, "Locker not exists!!!");
vSemaphoreDelete(instance->locker);
instance->locker = NULL;
- FASSERT_MSG(NULL != instance->evt, "event group not exists !!!");
+ FASSERT_MSG(NULL != instance->evt, "Event group not exists!!!");
vEventGroupDelete(instance->evt);
instance->evt = NULL;
@@ -227,7 +227,7 @@ FError FFreeRTOSSpimDeInit(FFreeRTOSSpim *const instance)
}
/* ack transfer finish from interrupt */
-static void FSpimOsAckTransDone(void *instance_p, void *param)
+static void FSpimOsAckTransDone(void *instance_p, void *param)
{
FASSERT(param);
FFreeRTOSSpim *instance = (FFreeRTOSSpim *)param;
@@ -243,23 +243,23 @@ static void FSpimOsAckTransDone(void *instance_p, void *param)
}
/* wait transfer finish ack from task */
-static FError FSpimOsWaitTransDone(FFreeRTOSSpim *const instance)
+static FError FSpimOsWaitTransDone(FFreeRTOSSpim *const instance)
{
const TickType_t wait_delay = pdMS_TO_TICKS(5000UL); /* wait for 5 seconds */
EventBits_t ev;
FError err = FFREERTOS_SPIM_OK;
/* block task to wait finish signal */
- FASSERT_MSG(instance->evt, "evt not exists");
+ FASSERT_MSG(instance->evt, "Evt not exists.");
ev = xEventGroupWaitBits(instance->evt, FFREERTOS_TRANS_DONE,
pdTRUE, pdFALSE, wait_delay); /* wait for trans done */
- if ((ev & FFREERTOS_TRANS_DONE))
- {
- FSPIM_DEBUG("trans done");
- }
- else
+ if ((ev & FFREERTOS_TRANS_DONE))
{
- FSPIM_ERROR("trans timeout");
+ FSPIM_DEBUG("Trans done.");
+ }
+ else
+ {
+ FSPIM_ERROR("Trans timeout.");
err = FFREERTOS_SPIM_WAIT_EVT_TIMOUT;
}
@@ -275,7 +275,7 @@ static FError FSpimOsTx(FFreeRTOSSpim *const instance, const u8 *tx_buf, fsize_t
err = FSpimTransferByInterrupt(ctrl, tx_buf, NULL, tx_len); /* start transfer */
if (FSPIM_SUCCESS != err)
{
- FSPIM_ERROR("spim transfer failed: 0x%x", err);
+ FSPIM_ERROR("Spim transfer failed: 0x%x", err);
}
else
{
@@ -295,7 +295,7 @@ static FError FSpimOsRx(FFreeRTOSSpim *const instance, u8 *rx_buf, fsize_t rx_le
err = FSpimTransferByInterrupt(ctrl, NULL, rx_buf, rx_len); /* start transfer */
if (FSPIM_SUCCESS != err)
{
- FSPIM_ERROR("spim transfer failed: 0x%x", err);
+ FSPIM_ERROR("Spim transfer failed: 0x%x", err);
}
else
{
@@ -322,19 +322,21 @@ FError FFreeRTOSSpimTransfer(FFreeRTOSSpim *const instance, const FFreeRTOSSpiMe
err = FSpimOsTakeSema(instance->locker); /* in case other tasks try to do transfer */
if (FFREERTOS_SPIM_OK != err)
+ {
return err;
+ }
FSpimSetChipSelection(ctrl, TRUE); /* toggle on chip selection */
- FSPIM_INFO("tx_buf@%p, len: %d, rx_buf@%p, len: %d",
- message->tx_buf, message->tx_len, message->rx_buf, message->rx_len);
+ FSPIM_INFO("tx_buf@%p, len: %d, rx_buf@%p, len: %d",
+ message->tx_buf, message->tx_len, message->rx_buf, message->rx_len);
if (instance->config.en_dma) /* dma-mode */
{
- FSPIM_INFO("start DMA tx: %d, rx: %d", message->tx_len, message->rx_len);
+ FSPIM_INFO("Start DMA tx: %d, rx: %d", message->tx_len, message->rx_len);
err = FSpimTransferDMA(ctrl, (0U != message->tx_len), (0U != message->rx_len));
if (FSPIM_SUCCESS != err)
{
- FSPIM_ERROR("spim DMA transfer failed: 0x%x", err);
+ FSPIM_ERROR("Spim DMA transfer failed: 0x%x", err);
}
}
@@ -358,5 +360,5 @@ FError FFreeRTOSSpimTransfer(FFreeRTOSSpim *const instance, const FFreeRTOSSpiMe
err_exit:
FSpimOsGiveSema(instance->locker);
- return err;
+ return err;
}
\ No newline at end of file
diff --git a/drivers/spi/fspim/fspim_os.h b/drivers/spi/fspim/fspim_os.h
index 31b974e9d903392c0e9f712382b20c1ac1935b3c..951f63409afcb90f6cc8daf8a60bc75b320a08c2 100644
--- a/drivers/spi/fspim/fspim_os.h
+++ b/drivers/spi/fspim/fspim_os.h
@@ -1,34 +1,29 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: fspim_os.h
* Date: 2022-07-18 09:05:48
* LastEditTime: 2022-07-18 09:05:48
- * Description: This files is for
- *
- * Modify History:
+ * Description: This file is for providing function related definitions of spi master driver used in FreeRTOS.
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
* 1.0 zhugengyu 2022/7/27 init commit
*/
-#ifndef DRIVERS_FSPIM_OS_H
-#define DRIVERS_FSPIM_OS_H
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
+#ifndef FSPIM_OS_H
+#define FSPIM_OS_H
/***************************** Include Files *********************************/
#include
#include
@@ -37,6 +32,10 @@ extern "C"
#include "fparameters.h"
#include "fspim.h"
+#ifdef __cplusplus
+extern "C"
+{
+#endif
/************************** Constant Definitions *****************************/
#define FFREERTOS_SPIM_OK FT_SUCCESS
#define FFREERTOS_SPIM_NOT_INIT FT_CODE_ERR(ErrModPort, ErrBspSpi, 0)
@@ -49,7 +48,7 @@ extern "C"
#define FFREERTOS_SPIM_MODE_0 0U /* CPOL = 0, CPHA = 0 */
#define FFREERTOS_SPIM_MODE_1 1U /* CPOL = 1, CPHA = 0 */
-#define FFREERTOS_SPIM_MODE_2 1U /* CPOL = 0, CPHA = 1 */
+#define FFREERTOS_SPIM_MODE_2 2U /* CPOL = 0, CPHA = 1 */
#define FFREERTOS_SPIM_MODE_3 3U /* CPOL = 1, CPHA = 1 */
/**************************** Type Definitions *******************************/
@@ -90,7 +89,7 @@ FFreeRTOSSpim *FFreeRTOSSpimInit(u32 instance_id, const FFreeRTOSSpimConifg *con
/* deinit spi instance */
FError FFreeRTOSSpimDeInit(FFreeRTOSSpim *const instance);
-/* for NON-DMA transfer, start spi transfer and wait transfer done in this function,
+/* for NON-DMA transfer, start spi transfer and wait transfer done in this function,
for DMA transfer, start DMA channel first, then call this function and wait DMA channel end later */
FError FFreeRTOSSpimTransfer(FFreeRTOSSpim *const instance, const FFreeRTOSSpiMessage *message);
diff --git a/drivers/timer/ftimer_tacho_os.c b/drivers/timer/ftimer_tacho_os.c
new file mode 100644
index 0000000000000000000000000000000000000000..fd86589e730804bcc4ac92ef83801e75d67b7e54
--- /dev/null
+++ b/drivers/timer/ftimer_tacho_os.c
@@ -0,0 +1,486 @@
+/*
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * All Rights Reserved.
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the Phytium Public License for more details.
+ *
+ *
+ * FilePath: ftimer_tacho_os.c
+ * Date: 2022-08-23 17:20:51
+ * LastEditTime: 2022-08-23 17:20:51
+ * Description: This file is for required function implementations of timer tacho driver used in FreeRTOS.
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 liushengming 2022/11/25 first commit
+ */
+
+#include
+#include "fkernel.h"
+#include "ftimer_tacho.h"
+#include "ftimer_tacho_os.h"
+#include "fparameters.h"
+#include "finterrupt.h"
+#include "fsleep.h"
+#include "fassert.h"
+#include "fpinctrl.h"
+#include "fpinctrl.h"
+
+#define FTACHO_OS_DEBUG_TAG "FFreeRTOSTacho"
+#define FTACHO_OS_ERROR(format, ...) FT_DEBUG_PRINT_E(FTACHO_OS_DEBUG_TAG, format, ##__VA_ARGS__)
+#define FTACHO_OS_WARN(format, ...) FT_DEBUG_PRINT_W(FTACHO_OS_DEBUG_TAG, format, ##__VA_ARGS__)
+#define FTACHO_OS_INFO(format, ...) FT_DEBUG_PRINT_I(FTACHO_OS_DEBUG_TAG, format, ##__VA_ARGS__)
+#define FTACHO_OS_DEBUG(format, ...) FT_DEBUG_PRINT_D(FTACHO_OS_DEBUG_TAG, format, ##__VA_ARGS__)
+
+#define FTIMER_OS_DEBUG_TAG "FFreeRTOSTimer"
+#define FTIMER_OS_ERROR(format, ...) FT_DEBUG_PRINT_E(FTIMER_OS_DEBUG_TAG, format, ##__VA_ARGS__)
+#define FTIMER_OS_WARN(format, ...) FT_DEBUG_PRINT_W(FTIMER_OS_DEBUG_TAG, format, ##__VA_ARGS__)
+#define FTIMER_OS_INFO(format, ...) FT_DEBUG_PRINT_I(FTIMER_OS_DEBUG_TAG, format, ##__VA_ARGS__)
+#define FTIMER_OS_DEBUG(format, ...) FT_DEBUG_PRINT_D(FTIMER_OS_DEBUG_TAG, format, ##__VA_ARGS__)
+
+/************************** Constant Definitions *****************************/
+/*Notice:timer are 38U,tacho nums only FTACHO_NUM = 16U,but they use the same controller num 0~15. */
+static FFreeRTOSTimerTacho os_timer_tacho[38] = {0};
+
+#define MAX_32_VAL GENMASK(31, 0)
+#define MAX_64_VAL GENMASK_ULL(63, 0)
+#define TACHO_MAX 10000
+#define TACHO_MIN 10
+#define TACHO_PERIOD 1000000 /* 1000000/50000000 = 0.02s 20ms ticks period at 50Mhz pclk*/
+
+#define US2TICKS(us) ((FTIMER_CLK_FREQ_HZ * (us) / 1000000ULL ) + 1ULL)
+#define MS2TICKS(ms) (US2TICKS(1000ULL) * (ms))
+
+/************************** Variable Definitions *****************************/
+
+typedef struct
+{
+ u32 id; /* id of tacho */
+ boolean work_mode; /*tacho or capture*/
+ boolean bits32; /*otherwise 64 bit*/
+ boolean restart_mode; /*otherwise free-run*/
+ u8 edge_mode; /* rising falling or double edge*/
+ u8 jitter_level; /* anti_jitter_number 0~3 */
+ u32 plus_num; /* plus_num of period to calculate rpm */
+} FFreeRTOSTachoConfigs;
+
+typedef struct
+{
+ u32 id; /* id of timer */
+ boolean bits32; /*otherwise 64 bit*/
+ boolean restartmode; /*otherwise free-run*/
+ boolean cyc_cmp; /*otherwise once cmp*/
+ boolean clear_cnt; /*otherwise not clear*/
+ boolean forceload; /*otherwise not force-load*/
+ u32 startcnt; /*start cnt num*/
+ u32 cmptick32; /*32bit cnt num*/
+ u64 cmptick64; /*64bit cnt num*/
+} FFreeRTOSTimerConfigs;
+
+static FFreeRTOSTimerConfigs timercfg;
+static FFreeRTOSTachoConfigs tachocfg;
+
+/************************** Function Prototypes ******************************/
+
+/**
+ * @name: FTimerCfgInit
+ * @msg: 加载转换后配置项,并完成初始化操作,定时器处于就绪状态
+ * @return {FError} 驱动初始化的错误码信息,FTIMER_TACHO_SUCCESS 表示初始化成功,其它返回值表示初始化失败
+ * @param {TimerTestConfigs} *timercfg_p 可操作的配置参数结构体
+ */
+static FError FTimerCfgInit(const FFreeRTOSTimerConfigs *timercfg_p, FTimerTachoCtrl *timer)
+{
+ FASSERT(timercfg_p);
+ FASSERT(timer);
+ FError ret = FREERTOS_TIMER_TACHO_SUCCESS;
+
+ FTimerTachoConfig *pconfig = &timer->config;
+
+ FTimerGetDefConfig(timercfg_p->id, pconfig);
+
+ if (timercfg_p->restartmode)
+ {
+ pconfig->timer_mode = FTIMER_RESTART;
+ }
+ else
+ {
+ pconfig->timer_mode = FTIMER_FREE_RUN;
+ }
+
+ if (timercfg_p->bits32)
+ {
+ pconfig->timer_bits = FTIMER_32_BITS;
+ }
+ else
+ {
+ pconfig->timer_bits = FTIMER_64_BITS;
+ }
+
+ if (timercfg_p->cyc_cmp)
+ {
+ pconfig->cmp_type = FTIMER_CYC_CMP;
+ }
+ else
+ {
+ pconfig->cmp_type = FTIMER_ONCE_CMP;
+ }
+
+ ret = FTimerInit(timer, pconfig);
+ if (FREERTOS_TIMER_TACHO_SUCCESS != ret)
+ {
+ return ret;
+ }
+
+ /*将时间参数us装换成计时器的ticks,我们设置StartTick,将CmpTick设置为最大*/
+ ret = FTimerSetStartVal(timer, timercfg.startcnt);
+ if (FREERTOS_TIMER_TACHO_SUCCESS != ret)
+ {
+ return ret;
+ }
+
+ if (timercfg_p->bits32)
+ {
+ ret |= FTimerSetPeriod32(timer, timercfg.cmptick32);
+ }
+ else
+ {
+ ret |= FTimerSetPeriod64(timer, timercfg.cmptick64);
+ }
+
+ FTIMER_OS_INFO("Timer Init finished.");
+
+ return ret;
+}
+
+/**
+ * @name: FTimerFunctionInit
+ * @msg: timer init.
+ * @param {u8}id :use 0~37 timer
+ * @param {boolean}timer_mode:单次定时还是循环定时
+ * @param {u64}times:定时时间,单位us
+ * @return {FFreeRTOSSpim *} return
+ */
+FFreeRTOSTimerTacho *FFreeRTOSTimerInit(u32 id, boolean timer_mode, u64 times)
+{
+ FASSERT_MSG(id < FTIMER_NUM, "Invalid timer id.");
+ FASSERT_MSG(FT_COMPONENT_IS_READY != os_timer_tacho[id].ctrl.isready, "timer_tacho ready.");
+ FFreeRTOSTimerTacho *instance = &os_timer_tacho[id];
+
+ FASSERT(FT_COMPONENT_IS_READY != os_timer_tacho[id].ctrl.isready);
+ FASSERT((instance->locker = xSemaphoreCreateMutex()) != NULL);
+
+ u64 cnttick = 0;
+ FTimerTachoCtrl *timer = &instance->ctrl;
+ timercfg.id = id;
+ timercfg.cyc_cmp = timer_mode;
+ cnttick = US2TICKS(times);
+ FTIMER_OS_INFO("\n***cnttick:%llu.", cnttick);
+ if (cnttick > 0xffffffff)
+ {
+ timercfg.bits32 = FALSE;
+ timercfg.startcnt = MAX_64_VAL - cnttick;
+ }
+ else
+ {
+ timercfg.bits32 = TRUE;
+ timercfg.startcnt = MAX_32_VAL - cnttick;
+ }
+ /* Set CmpTick max value ,that we can easy to trigger RolloverIntr. */
+ timercfg.cmptick32 = MAX_32_VAL;
+ timercfg.cmptick64 = MAX_64_VAL;
+
+ if (FREERTOS_TIMER_TACHO_SUCCESS != FTimerCfgInit(&timercfg, timer))
+ {
+ FTIMER_OS_ERROR("Timer config init failed.");
+ return NULL;
+ }
+ return (&os_timer_tacho[id]);
+}
+
+/**
+ * @name: FFTimerStartTest
+ * @msg: start timer.
+ * @param {u64 times,boolean forceLoad}
+ * @return {FError}
+ */
+FError FFreeRTOSTimerStart(FFreeRTOSTimerTacho *os_timer_p)
+{
+ FASSERT(NULL != os_timer_p->locker);
+ FError ret = FREERTOS_TIMER_TACHO_SUCCESS;
+
+ FTimerTachoCtrl *timer = &os_timer_p->ctrl;
+
+ if (pdFALSE == xSemaphoreTake(os_timer_p->locker, portMAX_DELAY))
+ {
+ FTIMER_OS_ERROR("Timer xSemaphoreTake failed.");
+ /* We could not take the semaphore, exit with 0 data received */
+ return FREERTOS_TIMER_TACHO_SEMA_ERROR;
+ }
+
+ ret = FTimerStart(timer);
+ if (FREERTOS_TIMER_TACHO_SUCCESS != ret)
+ {
+ return ret;
+ }
+ return ret;
+}
+
+
+/**
+ * @name: FFreeRTOSTimerStop
+ * @msg:
+ * @return {*}
+ * @param {FFreeRTOSTimerTacho} *os_timer_p
+ */
+FError FFreeRTOSTimerStop(FFreeRTOSTimerTacho *os_timer_p)
+{
+ FASSERT(NULL != os_timer_p->locker);
+
+ if (pdFALSE == xSemaphoreGive(os_timer_p->locker))
+ {
+ /* We could not post the semaphore, exit with error */
+ FTIMER_OS_ERROR("Timer xSemaphoreGive failed.");
+ return FREERTOS_TIMER_TACHO_SEMA_ERROR;
+ }
+ FTimerTachoCtrl *timer = &os_timer_p->ctrl;
+
+ return FTimerStop(timer);
+}
+
+
+/**
+ * @name: FFreeRTOSTimerDeinit
+ * @msg:
+ * @return {*} void
+ * @param {FFreeRTOSTimerTacho} *os_timer_p
+ */
+void FFreeRTOSTimerDeinit(FFreeRTOSTimerTacho *os_timer_p)
+{
+ FASSERT(NULL != os_timer_p->locker);
+
+ FTimerDeInit(&os_timer_p->ctrl);
+ vSemaphoreDelete(os_timer_p->locker);
+ memset(os_timer_p, 0, sizeof(*os_timer_p));
+ return;
+}
+
+
+/**
+ * @name: FFreeRTOSTimerDebug
+ * @msg: Dump timer reg message
+ * @return {*}
+ * @param {FFreeRTOSTimerTacho} *os_timer_p
+ */
+void FFreeRTOSTimerDebug(FFreeRTOSTimerTacho *os_timer_p)
+{
+ FASSERT(NULL != os_timer_p);
+ FTimeSettingDump(&os_timer_p->ctrl);
+ return;
+}
+
+
+
+/**********************************************************************************************************/
+/***********************************************tacho******************************************************/
+/**********************************************************************************************************/
+
+/**
+ * @name: FTachoCfgInit
+ * @msg: 添加配置
+ * @return {*}
+ * @param {FFreeRTOSTachoConfigs} *tachocfg_p
+ * @param {FTimerTachoCtrl} *tacho
+ */
+static FError FTachoCfgInit(const FFreeRTOSTachoConfigs *tachocfg_p, FTimerTachoCtrl *tacho)
+{
+ FASSERT(tachocfg_p);
+ FASSERT(tacho);
+ FError ret = FREERTOS_TIMER_TACHO_SUCCESS;
+
+ FTimerTachoConfig *pconfig = &tacho->config;
+ memset(tacho, 0, sizeof(tacho));
+ /* tacho */
+ FTachoGetDefConfig(tachocfg_p->id, pconfig);
+
+ if (tachocfg_p->work_mode == FTIMER_WORK_MODE_TACHO)
+ {
+ pconfig->work_mode = FTIMER_WORK_MODE_TACHO;
+
+ if (tachocfg_p->bits32 == FTIMER_32_BITS)
+ {
+ pconfig->timer_bits = FTIMER_32_BITS;
+ }
+ else
+ {
+ pconfig->timer_bits = FTIMER_64_BITS;
+ }
+
+ if (tachocfg_p->restart_mode)
+ {
+ pconfig->timer_mode = FTIMER_RESTART;
+ }
+ else
+ {
+ pconfig->timer_mode = FTIMER_FREE_RUN;
+ }
+ }
+ else
+ {
+ pconfig->work_mode = FTIMER_WORK_MODE_CAPTURE;
+ pconfig->captue_cnt = 0x7f;/* 边沿检测计数默认值 */
+ }
+
+ if (tachocfg_p->edge_mode == FTACHO_RISING_EDGE)
+ {
+ pconfig->edge_mode = FTACHO_RISING_EDGE;
+ }
+ else if (tachocfg_p->edge_mode == FTACHO_FALLING_EDGE)
+ {
+ pconfig->edge_mode = FTACHO_FALLING_EDGE;
+ }
+ else
+ {
+ pconfig->edge_mode = FTACHO_DOUBLE_EDGE;
+ }
+
+ switch (tachocfg_p->jitter_level)
+ {
+ case FTACHO_JITTER_LEVEL0:
+ pconfig->jitter_level = FTACHO_JITTER_LEVEL0;
+ break;
+ case FTACHO_JITTER_LEVEL1:
+ pconfig->jitter_level = FTACHO_JITTER_LEVEL1;
+ break;
+ case FTACHO_JITTER_LEVEL2:
+ pconfig->jitter_level = FTACHO_JITTER_LEVEL2;
+ break;
+ case FTACHO_JITTER_LEVEL3:
+ pconfig->jitter_level = FTACHO_JITTER_LEVEL3;
+ break;
+ default:
+ pconfig->jitter_level = FTACHO_JITTER_LEVEL0;
+ break;
+ }
+
+ if (tachocfg_p->plus_num != 0)
+ {
+ pconfig->plus_num = tachocfg_p->plus_num;
+ }
+
+ ret = FTachoInit(tacho, pconfig);
+}
+
+/**
+ * @name: FFreeRTOSTachoInit
+ * @msg: tacho or capture init function
+ * @return {*}
+ * @param {u32} id
+ * @param {boolean} tacho_mode
+ */
+FFreeRTOSTimerTacho *FFreeRTOSTachoInit(u32 id, boolean tacho_mode)
+{
+ FASSERT_MSG(id < FTACHO_NUM, "Invalid timer id.");
+ FASSERT_MSG(FT_COMPONENT_IS_READY != os_timer_tacho[id].ctrl.isready, "timer_tacho ready.");
+
+ FFreeRTOSTimerTacho *instance = &os_timer_tacho[id];
+ FTimerTachoCtrl *tacho = &os_timer_tacho[id].ctrl;
+
+ FASSERT((instance->locker = xSemaphoreCreateMutex()) != NULL);
+
+ FError ret = FREERTOS_TIMER_TACHO_SUCCESS;
+ tachocfg.id = id;
+ tachocfg.edge_mode = FTACHO_RISING_EDGE;/* Not open operation interface for cmd */
+ tachocfg.jitter_level = FTACHO_JITTER_LEVEL0;/* Not open operation interface for cmd */
+ tachocfg.bits32 = FTIMER_32_BITS;/* Use capture mode, Not open operation interface for cmd.*/
+ tachocfg.restart_mode = FTIMER_RESTART;/* Use capture mode, Not open operation interface for cmd.*/
+ tachocfg.plus_num = TACHO_PERIOD;
+ if (tacho_mode == FTIMER_WORK_MODE_TACHO)
+ {
+ tachocfg.work_mode = FTIMER_WORK_MODE_TACHO;
+ }
+ else
+ {
+ tachocfg.work_mode = FTIMER_WORK_MODE_CAPTURE;
+ }
+
+ FIOPadSetTachoMux(tachocfg.id);
+
+ ret = FTachoCfgInit(&tachocfg, tacho);
+ if (ret != FREERTOS_TIMER_TACHO_SUCCESS)
+ {
+ FTACHO_OS_ERROR("Tacho config init failed.");
+ return NULL;
+ }
+
+ if (tacho_mode == FTIMER_WORK_MODE_TACHO)
+ {
+ /* Not open operation interface for cmd */
+ FTachoSetOverLimit(tacho, TACHO_MAX);
+ FTachoSetUnderLimit(tacho, TACHO_MIN);
+ }
+
+ return (&os_timer_tacho[id]);
+}
+
+/**
+ * @name: FFreeRTOSTachoGetRPM
+ * @msg: get tacho RPM
+ * @return {*}
+ * @param {FFreeRTOSTimerTacho} *os_tacho_p
+ * @param {u32} *rpm
+ */
+FError FFreeRTOSTachoGetRPM(FFreeRTOSTimerTacho *os_tacho_p, u32 *rpm)
+{
+ FASSERT(NULL != os_tacho_p->locker);
+ FError ret = FREERTOS_TIMER_TACHO_SUCCESS;
+
+ FTimerTachoCtrl *tacho = &os_tacho_p->ctrl;
+
+
+ ret = FTachoGetFanRPM(tacho, rpm);
+ if (ret != FREERTOS_TIMER_TACHO_SUCCESS)
+ {
+ FTIMER_OS_ERROR("Tachometer get error,please check init.");
+ return ret;
+ }
+ return ret;
+}
+
+/**
+ * @name: FFreeRTOSTachoGetCNT
+ * @msg: get capture value
+ * @return {*}
+ * @param {FFreeRTOSTimerTacho} *os_tacho_p
+ */
+u32 FFreeRTOSTachoGetCNT(FFreeRTOSTimerTacho *os_tacho_p)
+{
+ FASSERT(NULL != os_tacho_p->locker);
+
+ FTimerTachoCtrl *tacho = &os_tacho_p->ctrl;
+
+ return FTachoGetCaptureCnt(tacho);
+}
+
+/**
+ * @name: FFreeRTOSTachoDeinit
+ * @msg: deinit tacho or capture
+ * @return {*}
+ * @param {FFreeRTOSTimerTacho} *os_tacho_p
+ */
+void FFreeRTOSTachoDeinit(FFreeRTOSTimerTacho *os_tacho_p)
+{
+ FASSERT(NULL != os_tacho_p->locker);
+
+ FTachoDeInit(&os_tacho_p->ctrl);
+ vSemaphoreDelete(os_tacho_p->locker);
+ memset(os_tacho_p, 0, sizeof(*os_tacho_p));
+ return;
+}
+
diff --git a/third-party/sdmmc-1.0/port/fsdio/sdmmc_port.c b/drivers/timer/ftimer_tacho_os.h
similarity index 31%
rename from third-party/sdmmc-1.0/port/fsdio/sdmmc_port.c
rename to drivers/timer/ftimer_tacho_os.h
index 82056595f93b42a989816c50ca9f68d14bf24294..6414b99f1336e3fea5f588491c6e61749d20af99 100644
--- a/third-party/sdmmc-1.0/port/fsdio/sdmmc_port.c
+++ b/drivers/timer/ftimer_tacho_os.h
@@ -1,117 +1,86 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
- * FilePath: sdmmc_port.c
- * Date: 2022-07-25 09:58:29
- * LastEditTime: 2022-07-25 09:58:30
- * Description: This files is for
- *
- * Modify History:
+ * See the Phytium Public License for more details.
+ *
+ *
+ * FilePath: ftimer_tacho_os.h
+ * Date: 2022-08-23 17:20:58
+ * LastEditTime: 2022-08-23 17:20:58
+ * Description: This file is for providing function related definitions of timer tacho driver used in FreeRTOS.
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
+ * 1.0 liushengming 2022/08/24 init
*/
+#ifndef FTIMER_TACHO_OS_H
+#define FTIMER_TACHO_OS_H
/***************************** Include Files *********************************/
#include
#include
#include
-#include "fmemory_pool.h"
#include "fparameters.h"
-
-#include "sdmmc_port.h"
-#include "sdmmc_cmd.h"
-#include "sdmmc_defs.h"
-
+#include "ftimer_tacho.h"
+#include "ftimer_tacho_hw.h"
+#include "ftypes.h"
/************************** Constant Definitions *****************************/
-#define SDMMC_ALIGNMENT 32U
-#define SDMMC_DMA_BUF_SIZE 512U
-
-/* reserve more bytes for 64-bit */
-#if defined(__aarch64__)
-#define SDMMC_MEM_BUF_SIZE 8192U * 2U
-#else
-#define SDMMC_MEM_BUF_SIZE 8192U
+#ifdef __cplusplus
+extern "C"
+{
#endif
-/**************************** Type Definitions *******************************/
+
+/*Error code from standalone tacho driver*/
+#define FREERTOS_TIMER_TACHO_SUCCESS FTIMER_TACHO_SUCCESS
+#define FREERTOS_TIMER_TACHO_INVAILD_PARAM_ERROR FTIMER_TACHO_ERR_INVAL_PARM
+#define FREERTOS_TIMER_TACHO_NOT_READY_ERROR FTIMER_TACHO_ERR_NOT_READY
+#define FREERTOS_TIMER_TACHO_TIMEOUT_ERROR FTIMER_TACHO_ERR_INIT_FAILED
+#define FREERTOS_TIMER_TACHO_NOT_SUPPORT_ERROR FTIMER_TACHO_ERR_NOT_SUPPORT
+#define FREERTOS_TIMER_TACHO_IS_READ_ERROR FTIMER_TACHO_ERR_IS_READ
+#define FREERTOS_TIMER_TACHO_ABORT_ERROR FTIMER_TACHO_ERR_ABORT
+#define FREERTOS_TIMER_TACHO_FAILED_ERROR FTIMER_TACHO_ERR_FAILED
+
+/*Error code depend on OS standard*/
+#define FREERTOS_TIMER_TACHO_TASK_ERROR FT_CODE_ERR(ErrModPort, ErrBspTimer, 0x1)
+#define FREERTOS_TIMER_TACHO_MESG_ERROR FT_CODE_ERR(ErrModPort, ErrBspTimer, 0x2)
+#define FREERTOS_TIMER_TACHO_TIME_ERROR FT_CODE_ERR(ErrModPort, ErrBspTimer, 0x3)
+#define FREERTOS_TIMER_TACHO_MEMY_ERROR FT_CODE_ERR(ErrModPort, ErrBspTimer, 0x4)
+#define FREERTOS_TIMER_TACHO_SEMA_ERROR FT_CODE_ERR(ErrModPort, ErrBspTimer, 0x5)
/************************** Variable Definitions *****************************/
-static FMemp sdmmc_mem_pool;
-static u8 mem_buf[SDMMC_MEM_BUF_SIZE];
+typedef struct
+{
+ FTimerTachoCtrl ctrl;
+ SemaphoreHandle_t locker;
+} FFreeRTOSTimerTacho;
+
/***************** Macros (Inline Functions) Definitions *********************/
/************************** Function Prototypes ******************************/
+/*timer*/
+FFreeRTOSTimerTacho *FFreeRTOSTimerInit(u32 id, boolean timer_mode, u64 times);
+FError FFreeRTOSTimerStart(FFreeRTOSTimerTacho *os_timer_p);
+FError FFreeRTOSTimerStop(FFreeRTOSTimerTacho *os_timer_p);
+void FFreeRTOSTimerDeinit(FFreeRTOSTimerTacho *os_timer_p);
+void FFreeRTOSTimerDebug(FFreeRTOSTimerTacho *os_timer_p);
+/*tacho*/
+FFreeRTOSTimerTacho *FFreeRTOSTachoInit(u32 id, boolean tacho_mode);
+FError FFreeRTOSTachoGetRPM(FFreeRTOSTimerTacho *os_timer_p, u32 *rpm);
+u32 FFreeRTOSTachoGetCNT(FFreeRTOSTimerTacho *os_timer_p);
+void FFreeRTOSTachoDeinit(FFreeRTOSTimerTacho *os_timer_p);
/*****************************************************************************/
-sdmmc_err_t sdmmc_port_init(void)
-{
- FError err = FT_SUCCESS;
- if (FT_COMPONENT_IS_READY == sdmmc_mem_pool.is_ready)
- return err;
-
- taskENTER_CRITICAL(); /* no schedule when init */
-
- err = FMempInit(&sdmmc_mem_pool, mem_buf, mem_buf + sizeof(mem_buf)); /* init memory pool */;
-
- taskEXIT_CRITICAL(); /* allow schedule after init */
-
- return (FT_SUCCESS == err) ? SDMMC_OK : SDMMC_FAIL;
-}
-
-sdmmc_err_t sdmmc_port_deinit(void)
-{
- FError err = FT_SUCCESS;
- if (FT_COMPONENT_IS_READY != sdmmc_mem_pool.is_ready)
- return err;
-
- taskENTER_CRITICAL(); /* no schedule when deinit */
-
- FMempDeinit(&sdmmc_mem_pool); /* remove memroy pool */
-
- taskEXIT_CRITICAL(); /* allow schedule after deinit */
-
- return (FT_SUCCESS == err) ? SDMMC_OK : SDMMC_FAIL;
-}
-
-void *sdmmc_port_align_malloc(size_t want_size, boolean dma_capable)
-{
- void *pv = NULL;
- FASSERT(FT_COMPONENT_IS_READY == sdmmc_mem_pool.is_ready);
-
- if (dma_capable)
- {
- if (want_size < SDMMC_DMA_BUF_SIZE) /* if allocated memory is needed by DMA, allocate at leaset 512 bytes */
- {
- want_size = SDMMC_DMA_BUF_SIZE;
- }
- else if (want_size % SDMMC_DMA_BUF_SIZE) /* round up size to 512 */
- {
- want_size = roundup(want_size, (size_t)SDMMC_DMA_BUF_SIZE);
- }
- }
-
- pv = FMempMallocAlign(&sdmmc_mem_pool, want_size, SDMMC_ALIGNMENT); /* allocate aligned memory */
- return pv;
-}
-
-void sdmmc_port_align_free(void *pv)
-{
- FASSERT(FT_COMPONENT_IS_READY == sdmmc_mem_pool.is_ready);
-
- FMempFree(&sdmmc_mem_pool, pv);
+#ifdef __cplusplus
}
+#endif
-boolean sdmmc_port_is_aligned_memory(const void *buf_p)
-{
- return ((uintptr)buf_p % SDMMC_ALIGNMENT == 0);
-}
\ No newline at end of file
+#endif
\ No newline at end of file
diff --git a/drivers/wdt/fwdt_os.c b/drivers/wdt/fwdt_os.c
index 906d7f6e878f14fb22e0897bbf5d47fc9f506665..b17ac8ccbcb28eaa462f8c8b177463f217b13378 100644
--- a/drivers/wdt/fwdt_os.c
+++ b/drivers/wdt/fwdt_os.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: fwdt_os.c
* Date: 2022-07-14 13:42:19
* LastEditTime: 2022-07-25 16:59:51
- * Description: This file is for
- *
- * Modify History:
+ * Description: This file is for required function implementations of wdt driver used in FreeRTOS.
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2022/08/09 first commit
*/
#include
#include
@@ -40,7 +41,7 @@
#define FWDT_INFO(format, ...) FT_DEBUG_PRINT_I(FWDT_DEBUG_TAG, format, ##__VA_ARGS__)
#define FWDT_DEBUG(format, ...) FT_DEBUG_PRINT_D(FWDT_DEBUG_TAG, format, ##__VA_ARGS__)
-static FFreeRTOSWdt os_wdt[FWDT_INSTANCE_NUM] = {0};
+static FFreeRTOSWdt os_wdt[FWDT_NUM] = {0};
/**
* @name: FFreeRTOSWdtInit
@@ -50,7 +51,7 @@ static FFreeRTOSWdt os_wdt[FWDT_INSTANCE_NUM] = {0};
*/
FFreeRTOSWdt *FFreeRTOSWdtInit(u32 instance_id)
{
- FASSERT(instance_id < FWDT_INSTANCE_NUM);
+ FASSERT(instance_id < FWDT_NUM);
FASSERT(FT_COMPONENT_IS_READY != os_wdt[instance_id].wdt_ctrl.is_ready);
FWdtConfig pconfig;
@@ -59,7 +60,7 @@ FFreeRTOSWdt *FFreeRTOSWdtInit(u32 instance_id)
FASSERT(FWdtCfgInitialize(&os_wdt[instance_id].wdt_ctrl, &pconfig) == FT_SUCCESS);
FASSERT((os_wdt[instance_id].wdt_semaphore = xSemaphoreCreateMutex()) != NULL);
-
+
return (&os_wdt[instance_id]);
}
@@ -73,11 +74,11 @@ FError FFreeRTOSWdtDeinit(FFreeRTOSWdt *os_wdt_p)
{
FASSERT(os_wdt_p);
FASSERT(os_wdt_p->wdt_semaphore != NULL);
-
+
FWdtDeInitialize(&os_wdt_p->wdt_ctrl);
vSemaphoreDelete(os_wdt_p->wdt_semaphore);
memset(os_wdt_p, 0, sizeof(*os_wdt_p));
-
+
return FWDT_SUCCESS;
}
@@ -101,40 +102,40 @@ FError FFreeRTOSWdtControl(FFreeRTOSWdt *os_wdt_p, int cmd, void *args)
/* New contrl can be performed only after current one is finished */
if (pdFALSE == xSemaphoreTake(os_wdt_p->wdt_semaphore, portMAX_DELAY))
{
- FWDT_ERROR("Wdt xSemaphoreTake failed\r\n");
+ FWDT_ERROR("Wdt xSemaphoreTake failed.");
/* We could not take the semaphore, exit with 0 data received */
return FREERTOS_WDT_SEM_ERROR;
}
-
- switch(cmd)
+
+ switch (cmd)
{
case FREERTOS_WDT_CTRL_GET_TIMEOUT:
- *((u32*)args) = os_wdt_p->timeout_value;
+ *((u32 *)args) = os_wdt_p->timeout_value;
break;
case FREERTOS_WDT_CTRL_SET_TIMEOUT:
- os_wdt_p->timeout_value = *((u32*)args);
- if(os_wdt_p->timeout_value >= FWDT_MAX_TIMEOUT)
+ os_wdt_p->timeout_value = *((u32 *)args);
+ if (os_wdt_p->timeout_value >= FWDT_MAX_TIMEOUT)
{
goto control_exit;
}
ret = FWdtSetTimeout(pctrl, os_wdt_p->timeout_value);
if (FWDT_SUCCESS != ret)
{
- FWDT_ERROR("FFreeRTOSWdtControl FWdtSetTimeout failed\n");
+ FWDT_ERROR("FFreeRTOSWdtControl FWdtSetTimeout failed.");
goto control_exit;
}
break;
-
+
case FREERTOS_WDT_CTRL_GET_TIMELEFT:
- *((u32*)args) = FWdtGetTimeleft(pctrl);
+ *((u32 *)args) = FWdtGetTimeleft(pctrl);
break;
case FREERTOS_WDT_CTRL_KEEPALIVE:
ret = FWdtRefresh(pctrl);
if (FWDT_SUCCESS != ret)
{
- FWDT_ERROR("FFreeRTOSWdtControl FWdtRefresh failed\n");
+ FWDT_ERROR("FFreeRTOSWdtControl FWdtRefresh failed.");
goto control_exit;
}
break;
@@ -143,22 +144,22 @@ FError FFreeRTOSWdtControl(FFreeRTOSWdt *os_wdt_p, int cmd, void *args)
ret = FWdtStart(pctrl);
if (FWDT_SUCCESS != ret)
{
- FWDT_ERROR("FFreeRTOSWdtControl FWdtStart failed\n");
+ FWDT_ERROR("FFreeRTOSWdtControl FWdtStart failed.");
goto control_exit;
}
break;
-
+
case FREERTOS_WDT_CTRL_STOP:
ret = FWdtStop(pctrl);
if (FWDT_SUCCESS != ret)
{
- FWDT_ERROR("FFreeRTOSWdtControl FWdtStop failed\n");
+ FWDT_ERROR("FFreeRTOSWdtControl FWdtStop failed.");
goto control_exit;
}
break;
default:
- FWDT_ERROR("control cmd is invalid \r\n");
+ FWDT_ERROR("Control cmd is invalid.");
break;
}
@@ -168,7 +169,7 @@ control_exit:
if (pdFALSE == xSemaphoreGive(os_wdt_p->wdt_semaphore))
{
/* We could not post the semaphore, exit with error */
- FWDT_ERROR("Wdt xSemaphoreGive failed\r\n");
+ FWDT_ERROR("Wdt xSemaphoreGive failed.");
return FREERTOS_WDT_SEM_ERROR;
}
diff --git a/drivers/wdt/fwdt_os.h b/drivers/wdt/fwdt_os.h
index 826d4ba6e787951fa92e5ba9523d8f72875ebbdf..dd281199342b2fd90f8e03e1aaec342f0dd7a419 100644
--- a/drivers/wdt/fwdt_os.h
+++ b/drivers/wdt/fwdt_os.h
@@ -1,28 +1,29 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: fwdt_os.h
* Date: 2022-02-24 13:42:19
* LastEditTime: 2022-03-21 16:59:58
- * Description: This file is for
- *
- * Modify History:
+ * Description: This file is for providing function related definitions of wdt driver used in FreeRTOS.
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2022/08/09 first commit
*/
-#ifndef DRIVERS_FWDT_OS_H
-#define DRIVERS_FWDT_OS_H
+#ifndef FWDT_OS_H
+#define FWDT_OS_H
#include
#include
@@ -30,6 +31,11 @@
#include "fwdt.h"
#include "ftypes.h"
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
/* freertos wdt error */
#define FREERTOS_WDT_SEM_ERROR FT_CODE_ERR(ErrModBsp, ErrBspWdt, 10)
@@ -59,4 +65,8 @@ FError FFreeRTOSWdtDeinit(FFreeRTOSWdt *os_wdt_p);
/* control freertos wdt instance */
FError FFreeRTOSWdtControl(FFreeRTOSWdt *os_wdt_p, int cmd, void *args);
+#ifdef __cplusplus
+}
+#endif
+
#endif // !
diff --git a/example/amp/openamp/core0/configs/d2000_aarch32_eg_configs b/example/amp/openamp/core0/configs/d2000_aarch32_eg_configs
index f834bd72420687bd47e841c249987cd0e2b17df5..9d801308759622fb0cf12639ce6c986e49de5a87 100644
--- a/example/amp/openamp/core0/configs/d2000_aarch32_eg_configs
+++ b/example/amp/openamp/core0/configs/d2000_aarch32_eg_configs
@@ -72,6 +72,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_CAN is not set
# CONFIG_USE_I2C is not set
# CONFIG_USE_TIMER is not set
+# CONFIG_USE_MIO is not set
# CONFIG_USE_SDMMC is not set
# CONFIG_USE_PCIE is not set
# CONFIG_USE_WDT is not set
@@ -83,6 +84,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -127,6 +129,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
# CONFIG_OUTPUT_BINARY is not set
# end of Compiler Options
# end of Building Option
@@ -136,17 +147,94 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
#
-# Freertos Drivers
+# Freertos Uart Drivers
#
CONFIG_FREERTOS_USE_UART=y
-# end of Freertos Drivers
+# end of Freertos Uart Drivers
+
+#
+# Freertos Pwm Drivers
+#
+# CONFIG_FREERTOS_USE_PWM is not set
+# end of Freertos Pwm Drivers
+
+#
+# Freertos Qspi Drivers
+#
+# CONFIG_FREERTOS_USE_QSPI is not set
+# end of Freertos Qspi Drivers
+
+#
+# Freertos Wdt Drivers
+#
+# CONFIG_FREERTOS_USE_WDT is not set
+# end of Freertos Wdt Drivers
+
+#
+# Freertos Eth Drivers
+#
+# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
+# end of Freertos Eth Drivers
+
+#
+# Freertos Gpio Drivers
+#
+# CONFIG_FREERTOS_USE_GPIO is not set
+# end of Freertos Gpio Drivers
+
+#
+# Freertos Spim Drivers
+#
+# CONFIG_FREERTOS_USE_FSPIM is not set
+# end of Freertos Spim Drivers
+
+#
+# Freertos DMA Drivers
+#
+# CONFIG_FREERTOS_USE_FDDMA is not set
+# CONFIG_FREERTOS_USE_FGDMA is not set
+# end of Freertos DMA Drivers
+
+#
+# Freertos Adc Drivers
+#
+# CONFIG_FREERTOS_USE_ADC is not set
+# end of Freertos Adc Drivers
+
+#
+# Freertos Can Drivers
+#
+# CONFIG_FREERTOS_USE_CAN is not set
+# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
+# CONFIG_USE_FATFS_0_1_4 is not set
+# CONFIG_USE_SFUD is not set
+# CONFIG_USE_SPIFFS is not set
CONFIG_USE_AMP=y
CONFIG_USE_LIBMETAL=y
@@ -182,4 +270,31 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set
# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set
# end of Letter Shell Configuration
-# end of FreeRTOS Setting
+
+# CONFIG_USE_TLSF is not set
+# CONFIG_USE_SDMMC_CMD is not set
+# CONFIG_USE_CHERRY_USB is not set
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/amp/openamp/core0/configs/d2000_aarch64_eg_configs b/example/amp/openamp/core0/configs/d2000_aarch64_eg_configs
index c8b7f68b570af7b2683b63d48daf7be065d2947d..773eab98147850110521a03cb49fd879b1e6b2c7 100644
--- a/example/amp/openamp/core0/configs/d2000_aarch64_eg_configs
+++ b/example/amp/openamp/core0/configs/d2000_aarch64_eg_configs
@@ -72,6 +72,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_CAN is not set
# CONFIG_USE_I2C is not set
# CONFIG_USE_TIMER is not set
+# CONFIG_USE_MIO is not set
# CONFIG_USE_SDMMC is not set
# CONFIG_USE_PCIE is not set
# CONFIG_USE_WDT is not set
@@ -83,6 +84,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -123,6 +125,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
# CONFIG_OUTPUT_BINARY is not set
# end of Compiler Options
# end of Building Option
@@ -132,17 +143,94 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
#
-# Freertos Drivers
+# Freertos Uart Drivers
#
CONFIG_FREERTOS_USE_UART=y
-# end of Freertos Drivers
+# end of Freertos Uart Drivers
+
+#
+# Freertos Pwm Drivers
+#
+# CONFIG_FREERTOS_USE_PWM is not set
+# end of Freertos Pwm Drivers
+
+#
+# Freertos Qspi Drivers
+#
+# CONFIG_FREERTOS_USE_QSPI is not set
+# end of Freertos Qspi Drivers
+
+#
+# Freertos Wdt Drivers
+#
+# CONFIG_FREERTOS_USE_WDT is not set
+# end of Freertos Wdt Drivers
+
+#
+# Freertos Eth Drivers
+#
+# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
+# end of Freertos Eth Drivers
+
+#
+# Freertos Gpio Drivers
+#
+# CONFIG_FREERTOS_USE_GPIO is not set
+# end of Freertos Gpio Drivers
+
+#
+# Freertos Spim Drivers
+#
+# CONFIG_FREERTOS_USE_FSPIM is not set
+# end of Freertos Spim Drivers
+
+#
+# Freertos DMA Drivers
+#
+# CONFIG_FREERTOS_USE_FDDMA is not set
+# CONFIG_FREERTOS_USE_FGDMA is not set
+# end of Freertos DMA Drivers
+
+#
+# Freertos Adc Drivers
+#
+# CONFIG_FREERTOS_USE_ADC is not set
+# end of Freertos Adc Drivers
+
+#
+# Freertos Can Drivers
+#
+# CONFIG_FREERTOS_USE_CAN is not set
+# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
+# CONFIG_USE_FATFS_0_1_4 is not set
+# CONFIG_USE_SFUD is not set
+# CONFIG_USE_SPIFFS is not set
CONFIG_USE_AMP=y
CONFIG_USE_LIBMETAL=y
@@ -178,4 +266,31 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set
# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set
# end of Letter Shell Configuration
-# end of FreeRTOS Setting
+
+# CONFIG_USE_TLSF is not set
+# CONFIG_USE_SDMMC_CMD is not set
+# CONFIG_USE_CHERRY_USB is not set
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/amp/openamp/core0/configs/ft2004_aarch32_eg_configs b/example/amp/openamp/core0/configs/ft2004_aarch32_eg_configs
index 435638022be7be3a0fca5603a01879d33ffb1114..5c260bfe59bf08b930dc2347735824ad4ae1cee5 100644
--- a/example/amp/openamp/core0/configs/ft2004_aarch32_eg_configs
+++ b/example/amp/openamp/core0/configs/ft2004_aarch32_eg_configs
@@ -72,6 +72,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_CAN is not set
# CONFIG_USE_I2C is not set
# CONFIG_USE_TIMER is not set
+# CONFIG_USE_MIO is not set
# CONFIG_USE_SDMMC is not set
# CONFIG_USE_PCIE is not set
# CONFIG_USE_WDT is not set
@@ -83,6 +84,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -127,6 +129,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
# CONFIG_OUTPUT_BINARY is not set
# end of Compiler Options
# end of Building Option
@@ -136,17 +147,94 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
#
-# Freertos Drivers
+# Freertos Uart Drivers
#
CONFIG_FREERTOS_USE_UART=y
-# end of Freertos Drivers
+# end of Freertos Uart Drivers
+
+#
+# Freertos Pwm Drivers
+#
+# CONFIG_FREERTOS_USE_PWM is not set
+# end of Freertos Pwm Drivers
+
+#
+# Freertos Qspi Drivers
+#
+# CONFIG_FREERTOS_USE_QSPI is not set
+# end of Freertos Qspi Drivers
+
+#
+# Freertos Wdt Drivers
+#
+# CONFIG_FREERTOS_USE_WDT is not set
+# end of Freertos Wdt Drivers
+
+#
+# Freertos Eth Drivers
+#
+# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
+# end of Freertos Eth Drivers
+
+#
+# Freertos Gpio Drivers
+#
+# CONFIG_FREERTOS_USE_GPIO is not set
+# end of Freertos Gpio Drivers
+
+#
+# Freertos Spim Drivers
+#
+# CONFIG_FREERTOS_USE_FSPIM is not set
+# end of Freertos Spim Drivers
+
+#
+# Freertos DMA Drivers
+#
+# CONFIG_FREERTOS_USE_FDDMA is not set
+# CONFIG_FREERTOS_USE_FGDMA is not set
+# end of Freertos DMA Drivers
+
+#
+# Freertos Adc Drivers
+#
+# CONFIG_FREERTOS_USE_ADC is not set
+# end of Freertos Adc Drivers
+
+#
+# Freertos Can Drivers
+#
+# CONFIG_FREERTOS_USE_CAN is not set
+# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
+# CONFIG_USE_FATFS_0_1_4 is not set
+# CONFIG_USE_SFUD is not set
+# CONFIG_USE_SPIFFS is not set
CONFIG_USE_AMP=y
CONFIG_USE_LIBMETAL=y
@@ -182,4 +270,31 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set
# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set
# end of Letter Shell Configuration
-# end of FreeRTOS Setting
+
+# CONFIG_USE_TLSF is not set
+# CONFIG_USE_SDMMC_CMD is not set
+# CONFIG_USE_CHERRY_USB is not set
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/amp/openamp/core0/configs/ft2004_aarch64_eg_configs b/example/amp/openamp/core0/configs/ft2004_aarch64_eg_configs
index 92d97b6791d3fc05e0560fcb04a2ac3fb490063d..86647827880671272e8e70f695af095e6ed26d25 100644
--- a/example/amp/openamp/core0/configs/ft2004_aarch64_eg_configs
+++ b/example/amp/openamp/core0/configs/ft2004_aarch64_eg_configs
@@ -72,6 +72,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_CAN is not set
# CONFIG_USE_I2C is not set
# CONFIG_USE_TIMER is not set
+# CONFIG_USE_MIO is not set
# CONFIG_USE_SDMMC is not set
# CONFIG_USE_PCIE is not set
# CONFIG_USE_WDT is not set
@@ -83,6 +84,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -123,6 +125,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
# CONFIG_OUTPUT_BINARY is not set
# end of Compiler Options
# end of Building Option
@@ -132,17 +143,94 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
#
-# Freertos Drivers
+# Freertos Uart Drivers
#
CONFIG_FREERTOS_USE_UART=y
-# end of Freertos Drivers
+# end of Freertos Uart Drivers
+
+#
+# Freertos Pwm Drivers
+#
+# CONFIG_FREERTOS_USE_PWM is not set
+# end of Freertos Pwm Drivers
+
+#
+# Freertos Qspi Drivers
+#
+# CONFIG_FREERTOS_USE_QSPI is not set
+# end of Freertos Qspi Drivers
+
+#
+# Freertos Wdt Drivers
+#
+# CONFIG_FREERTOS_USE_WDT is not set
+# end of Freertos Wdt Drivers
+
+#
+# Freertos Eth Drivers
+#
+# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
+# end of Freertos Eth Drivers
+
+#
+# Freertos Gpio Drivers
+#
+# CONFIG_FREERTOS_USE_GPIO is not set
+# end of Freertos Gpio Drivers
+
+#
+# Freertos Spim Drivers
+#
+# CONFIG_FREERTOS_USE_FSPIM is not set
+# end of Freertos Spim Drivers
+
+#
+# Freertos DMA Drivers
+#
+# CONFIG_FREERTOS_USE_FDDMA is not set
+# CONFIG_FREERTOS_USE_FGDMA is not set
+# end of Freertos DMA Drivers
+
+#
+# Freertos Adc Drivers
+#
+# CONFIG_FREERTOS_USE_ADC is not set
+# end of Freertos Adc Drivers
+
+#
+# Freertos Can Drivers
+#
+# CONFIG_FREERTOS_USE_CAN is not set
+# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
+# CONFIG_USE_FATFS_0_1_4 is not set
+# CONFIG_USE_SFUD is not set
+# CONFIG_USE_SPIFFS is not set
CONFIG_USE_AMP=y
CONFIG_USE_LIBMETAL=y
@@ -178,4 +266,31 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set
# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set
# end of Letter Shell Configuration
-# end of FreeRTOS Setting
+
+# CONFIG_USE_TLSF is not set
+# CONFIG_USE_SDMMC_CMD is not set
+# CONFIG_USE_CHERRY_USB is not set
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/amp/openamp/core0/main.c b/example/amp/openamp/core0/main.c
index 54f9f899664dad1bcdf9ccff425d6b978ab17b23..1428fc6b8ec40e25f3b25a329db0a3469f7abeff 100644
--- a/example/amp/openamp/core0/main.c
+++ b/example/amp/openamp/core0/main.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: main.c
* Date: 2022-02-24 16:56:46
* LastEditTime: 2022-03-21 17:00:56
- * Description: This file is for
- *
- * Modify History:
+ * Description: This file is for AMP example that running rpmsg_echo_task and open scheduler
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
+ * 1.0 huanghe 2022/03/25 first commit
*/
@@ -46,14 +47,16 @@ int main(void)
BaseType_t ret;
ret = LSUserShellTask() ;
- if(ret != pdPASS)
+ if (ret != pdPASS)
+ {
goto FAIL_EXIT;
+ }
- vTaskStartScheduler(); /* 启动任务,开启调度 */
+ vTaskStartScheduler(); /* 启动任务,开启调度 */
while (1); /* 正常不会执行到这里 */
FAIL_EXIT:
- printf("failed 0x%x \r\n", ret);
+ printf("Failed 0x%x \r\n", ret);
return 0;
}
@@ -65,14 +68,14 @@ extern int rpmsg_echo_task(int argc, char *argv[]);
int main(void)
{
BaseType_t ret;
- f_printk("freertos %s ,%s \r\n",__DATE__, __TIME__) ;
+ f_printk("Freertos %s ,%s \r\n", __DATE__, __TIME__) ;
rpmsg_echo_task(0, NULL);
vTaskStartScheduler(); /* 启动任务,开启调度 */
while (1); /* 正常不会执行到这里 */
FAIL_EXIT:
- printf("failed 0x%x \r\n", ret);
+ printf("Failed 0x%x. \r\n", ret);
return 0;
}
diff --git a/example/amp/openamp/core0/rpmsg-echo_os.c b/example/amp/openamp/core0/rpmsg-echo_os.c
index 6888eba3d65e230e3ce8ed6fdf954180fa195ee2..ae8e7624b698e1380fb3ba2319e6098d4e18e234 100644
--- a/example/amp/openamp/core0/rpmsg-echo_os.c
+++ b/example/amp/openamp/core0/rpmsg-echo_os.c
@@ -1,27 +1,6 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
- * All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
- * FilePath: rpmsg-echo_os.c
- * Date: 2022-02-25 09:12:07
- * LastEditTime: 2022-02-25 09:12:19
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
+ * SPDX-License-Identifier: BSD-3-Clause
*/
-
-
/* This is a sample demonstration application that showcases usage of rpmsg
This application is meant to run on the remote CPU running baremetal code.
This application echoes back data that was sent to it by the master core. */
@@ -45,18 +24,10 @@ This application echoes back data that was sent to it by the master core. */
#include "fpsci.h"
-/************************** Constant Definitions *****************************/
-
-/**************************** Type Definitions *******************************/
-
-/************************** Variable Definitions *****************************/
+#define SHUTDOWN_MSG 0xEF56A55A
-/***************** Macros (Inline Functions) Definitions *********************/
-
-#define SHUTDOWN_MSG 0xEF56A55A
-
-#define LPRINTF(format, ...) printf(format, ##__VA_ARGS__)
-#define LPERROR(format, ...) LPRINTF("ERROR: " format, ##__VA_ARGS__)
+#define LPRINTF(format, ...) printf(format, ##__VA_ARGS__)
+#define LPERROR(format, ...) LPRINTF("ERROR: " format, ##__VA_ARGS__)
static struct rpmsg_endpoint lept;
static int shutdown_req = 0;
@@ -68,31 +39,34 @@ static int shutdown_req = 0;
*-----------------------------------------------------------------------------*/
static int rpmsg_endpoint_cb(struct rpmsg_endpoint *ept, void *data, size_t len, uint32_t src, void *priv)
{
- (void)priv;
- (void)src;
- /* On reception of a shutdown we signal the application to terminate */
- if ((*(unsigned int *)data) == SHUTDOWN_MSG) {
- LPRINTF("shutdown message is received.\r\n");
- shutdown_req = 1;
- return RPMSG_SUCCESS;
- }
+ (void)priv;
+ (void)src;
+ /* On reception of a shutdown we signal the application to terminate */
+ if ((*(unsigned int *)data) == SHUTDOWN_MSG)
+ {
+ LPRINTF("Shutdown message is received.\r\n");
+ shutdown_req = 1;
+ return RPMSG_SUCCESS;
+ }
#ifdef CONFIG_MEM_NORMAL
- FCacheDCacheInvalidateRange((intptr)data, len);
+ FCacheDCacheInvalidateRange((intptr)data, len);
#endif
-
- /* Send data back to master */
- if (rpmsg_send(ept, data, len) < 0)
- LPERROR("rpmsg_send failed\r\n");
- return RPMSG_SUCCESS;
+ /* Send data back to master */
+ if (rpmsg_send(ept, data, len) < 0)
+ {
+ LPERROR("Rpmsg_send failed.\r\n");
+ }
+
+ return RPMSG_SUCCESS;
}
static void rpmsg_service_unbind(struct rpmsg_endpoint *ept)
{
- (void)ept;
- LPRINTF("unexpected Remote endpoint destroy\r\n");
- shutdown_req = 1;
+ (void)ept;
+ LPRINTF("Unexpected Remote endpoint destroy.\r\n");
+ shutdown_req = 1;
}
/*-----------------------------------------------------------------------------*
@@ -100,30 +74,33 @@ static void rpmsg_service_unbind(struct rpmsg_endpoint *ept)
*-----------------------------------------------------------------------------*/
int app(struct rpmsg_device *rdev, void *priv)
{
- int ret;
+ int ret;
- /* Initialize RPMSG framework */
- LPRINTF("Try to create rpmsg endpoint.\r\n");
+ /* Initialize RPMSG framework */
+ LPRINTF("Try to create rpmsg endpoint.\r\n");
- ret = rpmsg_create_ept(&lept, rdev, RPMSG_SERVICE_NAME, 0, RPMSG_ADDR_ANY, rpmsg_endpoint_cb, rpmsg_service_unbind);
- if (ret) {
- LPERROR("Failed to create endpoint. %d \r\n", ret);
- return -1;
- }
+ ret = rpmsg_create_ept(&lept, rdev, RPMSG_SERVICE_NAME, 0, RPMSG_ADDR_ANY, rpmsg_endpoint_cb, rpmsg_service_unbind);
+ if (ret)
+ {
+ LPERROR("Failed to create endpoint. %d \r\n", ret);
+ return -1;
+ }
- LPRINTF("Successfully created rpmsg endpoint.\r\n");
+ LPRINTF("Successfully created rpmsg endpoint.\r\n");
- while (1)
- {
- platform_poll(priv);
+ while (1)
+ {
+ platform_poll(priv);
/* we got a shutdown request, exit */
if (shutdown_req)
- break;
- }
+ {
+ break;
+ }
+ }
- rpmsg_destroy_ept(&lept);
+ rpmsg_destroy_ept(&lept);
- return 0;
+ return 0;
}
@@ -133,52 +110,58 @@ int app(struct rpmsg_device *rdev, void *priv)
*-----------------------------------------------------------------------------*/
int rpmsg_echo(int argc, char *argv[])
{
- void *platform;
- struct rpmsg_device *rpdev;
- int ret;
-
- LPRINTF("openamp lib version: %s (", openamp_version());
- LPRINTF("Major: %d, ", openamp_version_major());
- LPRINTF("Minor: %d, ", openamp_version_minor());
- LPRINTF("Patch: %d)\r\n", openamp_version_patch());
-
- LPRINTF("libmetal lib version: %s (", metal_ver());
- LPRINTF("Major: %d, ", metal_ver_major());
- LPRINTF("Minor: %d, ", metal_ver_minor());
- LPRINTF("Patch: %d)\r\n", metal_ver_patch());
-
- LPRINTF("Starting application...\r\n");
-
- /* Initialize platform */
- ret = platform_init(argc, argv, &platform);
- if (ret) {
- LPERROR("Failed to initialize platform.\r\n");
- ret = -1;
- } else {
- #ifdef CONFIG_DEBUG_CODE
- LPERROR("CONFIG_TARGET_CPU_ID is %x \r\n",CONFIG_TARGET_CPU_ID);
- PsciCpuOn(CONFIG_TARGET_CPU_ID,(uintptr_t)0xe0100000) ;
- #endif
- rpdev = platform_create_rpmsg_vdev(platform, 0, VIRTIO_DEV_SLAVE, NULL, NULL);
- if (!rpdev) {
- LPERROR("Failed to create rpmsg virtio device.\r\n");
- ret = -1;
- } else {
- app(rpdev, platform);
-
- platform_release_rpmsg_vdev(rpdev, platform);
- ret = 0;
- }
- }
-
- LPRINTF("Stopping application...\r\n");
- platform_cleanup(platform);
+ void *platform;
+ struct rpmsg_device *rpdev;
+ int ret;
+
+ LPRINTF("openamp lib version: %s (", openamp_version());
+ LPRINTF("Major: %d, ", openamp_version_major());
+ LPRINTF("Minor: %d, ", openamp_version_minor());
+ LPRINTF("Patch: %d).\r\n", openamp_version_patch());
+
+ LPRINTF("libmetal lib version: %s (", metal_ver());
+ LPRINTF("Major: %d, ", metal_ver_major());
+ LPRINTF("Minor: %d, ", metal_ver_minor());
+ LPRINTF("Patch: %d).\r\n", metal_ver_patch());
+
+ LPRINTF("Starting application...\r\n");
+
+ /* Initialize platform */
+ ret = platform_init(argc, argv, &platform);
+ if (ret)
+ {
+ LPERROR("Failed to initialize platform.\r\n");
+ ret = -1;
+ }
+ else
+ {
+#ifdef CONFIG_DEBUG_CODE
+ LPERROR("CONFIG_TARGET_CPU_ID is %x \r\n", CONFIG_TARGET_CPU_ID);
+ PsciCpuOn(CONFIG_TARGET_CPU_ID, (uintptr_t)0xe0100000) ;
+#endif
+ rpdev = platform_create_rpmsg_vdev(platform, 0, VIRTIO_DEV_SLAVE, NULL, NULL);
+ if (!rpdev)
+ {
+ LPERROR("Failed to create rpmsg virtio device.\r\n");
+ ret = -1;
+ }
+ else
+ {
+ app(rpdev, platform);
+
+ platform_release_rpmsg_vdev(rpdev, platform);
+ ret = 0;
+ }
+ }
+
+ LPRINTF("Stopping application...\r\n");
+ platform_cleanup(platform);
return ret;
}
-void RpmsgEchoTask( void * args )
+void RpmsgEchoTask(void *args)
{
rpmsg_echo(0, NULL);
vTaskDelete(NULL);
@@ -186,19 +169,19 @@ void RpmsgEchoTask( void * args )
int rpmsg_echo_task(int argc, char *argv[])
{
- BaseType_t ret;
-
- ret = xTaskCreate((TaskFunction_t )RpmsgEchoTask, /* 任务入口函数 */
- (const char* )"RpmsgEchoTask",/* 任务名字 */
- (uint16_t )4096, /* 任务栈大小 */
- (void* )NULL,/* 任务入口函数参数 */
- (UBaseType_t )1, /* 任务的优先级 */
- NULL); /* 任务控制块指针 */
-
- if(ret != pdPASS)
+ BaseType_t ret;
+
+ ret = xTaskCreate((TaskFunction_t)RpmsgEchoTask, /* 任务入口函数 */
+ (const char *)"RpmsgEchoTask",/* 任务名字 */
+ (uint16_t)4096, /* 任务栈大小 */
+ (void *)NULL,/* 任务入口函数参数 */
+ (UBaseType_t)1, /* 任务的优先级 */
+ NULL); /* 任务控制块指针 */
+
+ if (ret != pdPASS)
{
// task_is_valid = 0;
- LPERROR("Failed to create a rpmsg_echo task ");
+ LPERROR("Failed to create a rpmsg_echo task.\r\n");
return -1;
}
diff --git a/example/amp/openamp/core0/sdkconfig b/example/amp/openamp/core0/sdkconfig
index 435638022be7be3a0fca5603a01879d33ffb1114..5c260bfe59bf08b930dc2347735824ad4ae1cee5 100644
--- a/example/amp/openamp/core0/sdkconfig
+++ b/example/amp/openamp/core0/sdkconfig
@@ -72,6 +72,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_CAN is not set
# CONFIG_USE_I2C is not set
# CONFIG_USE_TIMER is not set
+# CONFIG_USE_MIO is not set
# CONFIG_USE_SDMMC is not set
# CONFIG_USE_PCIE is not set
# CONFIG_USE_WDT is not set
@@ -83,6 +84,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -127,6 +129,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
# CONFIG_OUTPUT_BINARY is not set
# end of Compiler Options
# end of Building Option
@@ -136,17 +147,94 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
#
-# Freertos Drivers
+# Freertos Uart Drivers
#
CONFIG_FREERTOS_USE_UART=y
-# end of Freertos Drivers
+# end of Freertos Uart Drivers
+
+#
+# Freertos Pwm Drivers
+#
+# CONFIG_FREERTOS_USE_PWM is not set
+# end of Freertos Pwm Drivers
+
+#
+# Freertos Qspi Drivers
+#
+# CONFIG_FREERTOS_USE_QSPI is not set
+# end of Freertos Qspi Drivers
+
+#
+# Freertos Wdt Drivers
+#
+# CONFIG_FREERTOS_USE_WDT is not set
+# end of Freertos Wdt Drivers
+
+#
+# Freertos Eth Drivers
+#
+# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
+# end of Freertos Eth Drivers
+
+#
+# Freertos Gpio Drivers
+#
+# CONFIG_FREERTOS_USE_GPIO is not set
+# end of Freertos Gpio Drivers
+
+#
+# Freertos Spim Drivers
+#
+# CONFIG_FREERTOS_USE_FSPIM is not set
+# end of Freertos Spim Drivers
+
+#
+# Freertos DMA Drivers
+#
+# CONFIG_FREERTOS_USE_FDDMA is not set
+# CONFIG_FREERTOS_USE_FGDMA is not set
+# end of Freertos DMA Drivers
+
+#
+# Freertos Adc Drivers
+#
+# CONFIG_FREERTOS_USE_ADC is not set
+# end of Freertos Adc Drivers
+
+#
+# Freertos Can Drivers
+#
+# CONFIG_FREERTOS_USE_CAN is not set
+# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
+# CONFIG_USE_FATFS_0_1_4 is not set
+# CONFIG_USE_SFUD is not set
+# CONFIG_USE_SPIFFS is not set
CONFIG_USE_AMP=y
CONFIG_USE_LIBMETAL=y
@@ -182,4 +270,31 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set
# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set
# end of Letter Shell Configuration
-# end of FreeRTOS Setting
+
+# CONFIG_USE_TLSF is not set
+# CONFIG_USE_SDMMC_CMD is not set
+# CONFIG_USE_CHERRY_USB is not set
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/amp/openamp/core0/sdkconfig.h b/example/amp/openamp/core0/sdkconfig.h
index 3734019cf9d48d4b45806d4098577b6abdbbb153..3c8cd8c5d27bfe605479a9fe654b6cf39a87d32a 100644
--- a/example/amp/openamp/core0/sdkconfig.h
+++ b/example/amp/openamp/core0/sdkconfig.h
@@ -64,6 +64,7 @@
/* CONFIG_USE_CAN is not set */
/* CONFIG_USE_I2C is not set */
/* CONFIG_USE_TIMER is not set */
+/* CONFIG_USE_MIO is not set */
/* CONFIG_USE_SDMMC is not set */
/* CONFIG_USE_PCIE is not set */
/* CONFIG_USE_WDT is not set */
@@ -75,6 +76,7 @@
/* CONFIG_USE_ADC is not set */
/* CONFIG_USE_PWM is not set */
/* CONFIG_USE_IPC is not set */
+/* CONFIG_USE_MEDIA is not set */
/* end of Components Configuration */
#define CONFIG_USE_NEW_LIBC
/* end of Standalone Setting */
@@ -115,22 +117,93 @@
/* Compiler Options */
+/* Cross-Compiler Setting */
+
+#define CONFIG_GCC_OPTIMIZE_LEVEL 0
+/* CONFIG_USE_EXT_COMPILER is not set */
+/* CONFIG_USE_KLIN_SYS is not set */
+/* end of Cross-Compiler Setting */
/* CONFIG_OUTPUT_BINARY is not set */
/* end of Compiler Options */
/* end of Building Option */
/* Component Configuration */
-/* Freertos Drivers */
+/* Freertos Uart Drivers */
#define CONFIG_FREERTOS_USE_UART
-/* end of Freertos Drivers */
+/* end of Freertos Uart Drivers */
+
+/* Freertos Pwm Drivers */
+
+/* CONFIG_FREERTOS_USE_PWM is not set */
+/* end of Freertos Pwm Drivers */
+
+/* Freertos Qspi Drivers */
+
+/* CONFIG_FREERTOS_USE_QSPI is not set */
+/* end of Freertos Qspi Drivers */
+
+/* Freertos Wdt Drivers */
+
+/* CONFIG_FREERTOS_USE_WDT is not set */
+/* end of Freertos Wdt Drivers */
+
+/* Freertos Eth Drivers */
+
+/* CONFIG_FREERTOS_USE_XMAC is not set */
+/* CONFIG_FREERTOS_USE_GMAC is not set */
+/* end of Freertos Eth Drivers */
+
+/* Freertos Gpio Drivers */
+
+/* CONFIG_FREERTOS_USE_GPIO is not set */
+/* end of Freertos Gpio Drivers */
+
+/* Freertos Spim Drivers */
+
+/* CONFIG_FREERTOS_USE_FSPIM is not set */
+/* end of Freertos Spim Drivers */
+
+/* Freertos DMA Drivers */
+
+/* CONFIG_FREERTOS_USE_FDDMA is not set */
+/* CONFIG_FREERTOS_USE_FGDMA is not set */
+/* end of Freertos DMA Drivers */
+
+/* Freertos Adc Drivers */
+
+/* CONFIG_FREERTOS_USE_ADC is not set */
+/* end of Freertos Adc Drivers */
+
+/* Freertos Can Drivers */
+
+/* CONFIG_FREERTOS_USE_CAN is not set */
+/* end of Freertos Can Drivers */
+
+/* Freertos I2c Drivers */
+
+/* CONFIG_FREERTOS_USE_I2C is not set */
+/* end of Freertos I2c Drivers */
+
+/* Freertos Mio Drivers */
+
+/* CONFIG_FREERTOS_USE_MIO is not set */
+/* end of Freertos Mio Drivers */
+
+/* Freertos Timer Drivers */
+
+/* CONFIG_FREERTOS_USE_TIMER is not set */
+/* end of Freertos Timer Drivers */
/* end of Component Configuration */
-/* FreeRTOS Setting */
+/* Third-Party Configuration */
/* CONFIG_USE_LWIP is not set */
#define CONFIG_USE_BACKTRACE
+/* CONFIG_USE_FATFS_0_1_4 is not set */
+/* CONFIG_USE_SFUD is not set */
+/* CONFIG_USE_SPIFFS is not set */
#define CONFIG_USE_AMP
#define CONFIG_USE_LIBMETAL
@@ -162,6 +235,31 @@
/* CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set */
/* CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set */
/* end of Letter Shell Configuration */
-/* end of FreeRTOS Setting */
+/* CONFIG_USE_TLSF is not set */
+/* CONFIG_USE_SDMMC_CMD is not set */
+/* CONFIG_USE_CHERRY_USB is not set */
+/* end of Third-Party Configuration */
+
+/* Kernel Configuration */
+
+#define CONFIG_FREERTOS_OPTIMIZED_SCHEDULER
+#define CONFIG_FREERTOS_HZ 1000
+#define CONFIG_FREERTOS_MAX_PRIORITIES 32
+#define CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES 13
+#define CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES 11
+#define CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS 1
+#define CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE 1024
+#define CONFIG_FREERTOS_MAX_TASK_NAME_LEN 32
+#define CONFIG_FREERTOS_TIMER_TASK_PRIORITY 1
+#define CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH 2048
+#define CONFIG_FREERTOS_TIMER_QUEUE_LENGTH 10
+#define CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE 0
+#define CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS
+#define CONFIG_FREERTOS_USE_TRACE_FACILITY
+#define CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS
+/* CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set */
+#define CONFIG_FREERTOS_TOTAL_HEAP_SIZE 10240
+#define CONFIG_FREERTOS_TASK_FPU_SUPPORT 1
+/* end of Kernel Configuration */
#endif
diff --git a/example/amp/openamp/core1/configs/d2000_aarch32_eg_configs b/example/amp/openamp/core1/configs/d2000_aarch32_eg_configs
index 3797f2dca650a4367081e4cb192e9696baf7d78c..2a16392bae0ca74877295ba46db47c21f62ba450 100644
--- a/example/amp/openamp/core1/configs/d2000_aarch32_eg_configs
+++ b/example/amp/openamp/core1/configs/d2000_aarch32_eg_configs
@@ -71,6 +71,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_CAN is not set
# CONFIG_USE_I2C is not set
# CONFIG_USE_TIMER is not set
+# CONFIG_USE_MIO is not set
# CONFIG_USE_SDMMC is not set
# CONFIG_USE_PCIE is not set
# CONFIG_USE_WDT is not set
@@ -82,6 +83,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -126,6 +128,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
# CONFIG_OUTPUT_BINARY is not set
# end of Compiler Options
# end of Building Option
@@ -135,17 +146,94 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
#
-# Freertos Drivers
+# Freertos Uart Drivers
#
CONFIG_FREERTOS_USE_UART=y
-# end of Freertos Drivers
+# end of Freertos Uart Drivers
+
+#
+# Freertos Pwm Drivers
+#
+# CONFIG_FREERTOS_USE_PWM is not set
+# end of Freertos Pwm Drivers
+
+#
+# Freertos Qspi Drivers
+#
+# CONFIG_FREERTOS_USE_QSPI is not set
+# end of Freertos Qspi Drivers
+
+#
+# Freertos Wdt Drivers
+#
+# CONFIG_FREERTOS_USE_WDT is not set
+# end of Freertos Wdt Drivers
+
+#
+# Freertos Eth Drivers
+#
+# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
+# end of Freertos Eth Drivers
+
+#
+# Freertos Gpio Drivers
+#
+# CONFIG_FREERTOS_USE_GPIO is not set
+# end of Freertos Gpio Drivers
+
+#
+# Freertos Spim Drivers
+#
+# CONFIG_FREERTOS_USE_FSPIM is not set
+# end of Freertos Spim Drivers
+
+#
+# Freertos DMA Drivers
+#
+# CONFIG_FREERTOS_USE_FDDMA is not set
+# CONFIG_FREERTOS_USE_FGDMA is not set
+# end of Freertos DMA Drivers
+
+#
+# Freertos Adc Drivers
+#
+# CONFIG_FREERTOS_USE_ADC is not set
+# end of Freertos Adc Drivers
+
+#
+# Freertos Can Drivers
+#
+# CONFIG_FREERTOS_USE_CAN is not set
+# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
+# CONFIG_USE_FATFS_0_1_4 is not set
+# CONFIG_USE_SFUD is not set
+# CONFIG_USE_SPIFFS is not set
CONFIG_USE_AMP=y
CONFIG_USE_LIBMETAL=y
@@ -172,4 +260,30 @@ CONFIG_MEM_NO_CACHE=y
# end of OpenAmp
# CONFIG_USE_LETTER_SHELL is not set
-# end of FreeRTOS Setting
+# CONFIG_USE_TLSF is not set
+# CONFIG_USE_SDMMC_CMD is not set
+# CONFIG_USE_CHERRY_USB is not set
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/amp/openamp/core1/configs/d2000_aarch64_eg_configs b/example/amp/openamp/core1/configs/d2000_aarch64_eg_configs
index 8892fb446bb05c70b8938f585598892c9574b5bb..bffa9a71cc61ce0d73836d0963486036dac710f4 100644
--- a/example/amp/openamp/core1/configs/d2000_aarch64_eg_configs
+++ b/example/amp/openamp/core1/configs/d2000_aarch64_eg_configs
@@ -71,6 +71,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_CAN is not set
# CONFIG_USE_I2C is not set
# CONFIG_USE_TIMER is not set
+# CONFIG_USE_MIO is not set
# CONFIG_USE_SDMMC is not set
# CONFIG_USE_PCIE is not set
# CONFIG_USE_WDT is not set
@@ -82,6 +83,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -122,6 +124,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
# CONFIG_OUTPUT_BINARY is not set
# end of Compiler Options
# end of Building Option
@@ -131,17 +142,94 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
#
-# Freertos Drivers
+# Freertos Uart Drivers
#
CONFIG_FREERTOS_USE_UART=y
-# end of Freertos Drivers
+# end of Freertos Uart Drivers
+
+#
+# Freertos Pwm Drivers
+#
+# CONFIG_FREERTOS_USE_PWM is not set
+# end of Freertos Pwm Drivers
+
+#
+# Freertos Qspi Drivers
+#
+# CONFIG_FREERTOS_USE_QSPI is not set
+# end of Freertos Qspi Drivers
+
+#
+# Freertos Wdt Drivers
+#
+# CONFIG_FREERTOS_USE_WDT is not set
+# end of Freertos Wdt Drivers
+
+#
+# Freertos Eth Drivers
+#
+# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
+# end of Freertos Eth Drivers
+
+#
+# Freertos Gpio Drivers
+#
+# CONFIG_FREERTOS_USE_GPIO is not set
+# end of Freertos Gpio Drivers
+
+#
+# Freertos Spim Drivers
+#
+# CONFIG_FREERTOS_USE_FSPIM is not set
+# end of Freertos Spim Drivers
+
+#
+# Freertos DMA Drivers
+#
+# CONFIG_FREERTOS_USE_FDDMA is not set
+# CONFIG_FREERTOS_USE_FGDMA is not set
+# end of Freertos DMA Drivers
+
+#
+# Freertos Adc Drivers
+#
+# CONFIG_FREERTOS_USE_ADC is not set
+# end of Freertos Adc Drivers
+
+#
+# Freertos Can Drivers
+#
+# CONFIG_FREERTOS_USE_CAN is not set
+# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
+# CONFIG_USE_FATFS_0_1_4 is not set
+# CONFIG_USE_SFUD is not set
+# CONFIG_USE_SPIFFS is not set
CONFIG_USE_AMP=y
CONFIG_USE_LIBMETAL=y
@@ -168,4 +256,30 @@ CONFIG_MEM_NO_CACHE=y
# end of OpenAmp
# CONFIG_USE_LETTER_SHELL is not set
-# end of FreeRTOS Setting
+# CONFIG_USE_TLSF is not set
+# CONFIG_USE_SDMMC_CMD is not set
+# CONFIG_USE_CHERRY_USB is not set
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/amp/openamp/core1/configs/ft2004_aarch32_eg_configs b/example/amp/openamp/core1/configs/ft2004_aarch32_eg_configs
index 4bd8309b8754711de58d7c9c429c12378eba38f8..e8ec985a86937d0c10b55770b979cc9cdf498ff0 100644
--- a/example/amp/openamp/core1/configs/ft2004_aarch32_eg_configs
+++ b/example/amp/openamp/core1/configs/ft2004_aarch32_eg_configs
@@ -71,6 +71,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_CAN is not set
# CONFIG_USE_I2C is not set
# CONFIG_USE_TIMER is not set
+# CONFIG_USE_MIO is not set
# CONFIG_USE_SDMMC is not set
# CONFIG_USE_PCIE is not set
# CONFIG_USE_WDT is not set
@@ -82,6 +83,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -126,6 +128,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
# CONFIG_OUTPUT_BINARY is not set
# end of Compiler Options
# end of Building Option
@@ -135,17 +146,94 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
#
-# Freertos Drivers
+# Freertos Uart Drivers
#
CONFIG_FREERTOS_USE_UART=y
-# end of Freertos Drivers
+# end of Freertos Uart Drivers
+
+#
+# Freertos Pwm Drivers
+#
+# CONFIG_FREERTOS_USE_PWM is not set
+# end of Freertos Pwm Drivers
+
+#
+# Freertos Qspi Drivers
+#
+# CONFIG_FREERTOS_USE_QSPI is not set
+# end of Freertos Qspi Drivers
+
+#
+# Freertos Wdt Drivers
+#
+# CONFIG_FREERTOS_USE_WDT is not set
+# end of Freertos Wdt Drivers
+
+#
+# Freertos Eth Drivers
+#
+# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
+# end of Freertos Eth Drivers
+
+#
+# Freertos Gpio Drivers
+#
+# CONFIG_FREERTOS_USE_GPIO is not set
+# end of Freertos Gpio Drivers
+
+#
+# Freertos Spim Drivers
+#
+# CONFIG_FREERTOS_USE_FSPIM is not set
+# end of Freertos Spim Drivers
+
+#
+# Freertos DMA Drivers
+#
+# CONFIG_FREERTOS_USE_FDDMA is not set
+# CONFIG_FREERTOS_USE_FGDMA is not set
+# end of Freertos DMA Drivers
+
+#
+# Freertos Adc Drivers
+#
+# CONFIG_FREERTOS_USE_ADC is not set
+# end of Freertos Adc Drivers
+
+#
+# Freertos Can Drivers
+#
+# CONFIG_FREERTOS_USE_CAN is not set
+# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
+# CONFIG_USE_FATFS_0_1_4 is not set
+# CONFIG_USE_SFUD is not set
+# CONFIG_USE_SPIFFS is not set
CONFIG_USE_AMP=y
CONFIG_USE_LIBMETAL=y
@@ -172,4 +260,30 @@ CONFIG_MEM_NO_CACHE=y
# end of OpenAmp
# CONFIG_USE_LETTER_SHELL is not set
-# end of FreeRTOS Setting
+# CONFIG_USE_TLSF is not set
+# CONFIG_USE_SDMMC_CMD is not set
+# CONFIG_USE_CHERRY_USB is not set
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/amp/openamp/core1/configs/ft2004_aarch64_eg_configs b/example/amp/openamp/core1/configs/ft2004_aarch64_eg_configs
index e4c5ab4b2e336aacec7bd578aa856fecfa4dab59..cf0752a3ed0be40d1436515997ba8f4a7e8ba17e 100644
--- a/example/amp/openamp/core1/configs/ft2004_aarch64_eg_configs
+++ b/example/amp/openamp/core1/configs/ft2004_aarch64_eg_configs
@@ -71,6 +71,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_CAN is not set
# CONFIG_USE_I2C is not set
# CONFIG_USE_TIMER is not set
+# CONFIG_USE_MIO is not set
# CONFIG_USE_SDMMC is not set
# CONFIG_USE_PCIE is not set
# CONFIG_USE_WDT is not set
@@ -82,6 +83,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -122,6 +124,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
# CONFIG_OUTPUT_BINARY is not set
# end of Compiler Options
# end of Building Option
@@ -131,17 +142,94 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
#
-# Freertos Drivers
+# Freertos Uart Drivers
#
CONFIG_FREERTOS_USE_UART=y
-# end of Freertos Drivers
+# end of Freertos Uart Drivers
+
+#
+# Freertos Pwm Drivers
+#
+# CONFIG_FREERTOS_USE_PWM is not set
+# end of Freertos Pwm Drivers
+
+#
+# Freertos Qspi Drivers
+#
+# CONFIG_FREERTOS_USE_QSPI is not set
+# end of Freertos Qspi Drivers
+
+#
+# Freertos Wdt Drivers
+#
+# CONFIG_FREERTOS_USE_WDT is not set
+# end of Freertos Wdt Drivers
+
+#
+# Freertos Eth Drivers
+#
+# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
+# end of Freertos Eth Drivers
+
+#
+# Freertos Gpio Drivers
+#
+# CONFIG_FREERTOS_USE_GPIO is not set
+# end of Freertos Gpio Drivers
+
+#
+# Freertos Spim Drivers
+#
+# CONFIG_FREERTOS_USE_FSPIM is not set
+# end of Freertos Spim Drivers
+
+#
+# Freertos DMA Drivers
+#
+# CONFIG_FREERTOS_USE_FDDMA is not set
+# CONFIG_FREERTOS_USE_FGDMA is not set
+# end of Freertos DMA Drivers
+
+#
+# Freertos Adc Drivers
+#
+# CONFIG_FREERTOS_USE_ADC is not set
+# end of Freertos Adc Drivers
+
+#
+# Freertos Can Drivers
+#
+# CONFIG_FREERTOS_USE_CAN is not set
+# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
+# CONFIG_USE_FATFS_0_1_4 is not set
+# CONFIG_USE_SFUD is not set
+# CONFIG_USE_SPIFFS is not set
CONFIG_USE_AMP=y
CONFIG_USE_LIBMETAL=y
@@ -168,4 +256,30 @@ CONFIG_MEM_NO_CACHE=y
# end of OpenAmp
# CONFIG_USE_LETTER_SHELL is not set
-# end of FreeRTOS Setting
+# CONFIG_USE_TLSF is not set
+# CONFIG_USE_SDMMC_CMD is not set
+# CONFIG_USE_CHERRY_USB is not set
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/amp/openamp/core1/main.c b/example/amp/openamp/core1/main.c
index ad9278e22c6de920d3a792e58c3bb192c00d44f4..eef1326918f4a02049456a4b964409ec8222b230 100644
--- a/example/amp/openamp/core1/main.c
+++ b/example/amp/openamp/core1/main.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: main.c
* Date: 2022-02-25 13:25:14
* LastEditTime: 2022-03-21 17:01:03
- * Description: This file is for
- *
- * Modify History:
+ * Description: This file is for AMP example that running rpmsg_echo_task and open scheduler
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
+ * 1.0 huanghe 2022/03/25 first commit
*/
@@ -43,16 +44,13 @@ int main(void)
{
BaseType_t ret;
- // ret = LSUserShellTask() ;
- // if(ret != pdPASS)
- // goto FAIL_EXIT;
rpmsg_echo_task();
- vTaskStartScheduler(); /* 启动任务,开启调度 */
+ vTaskStartScheduler(); /* 启动任务,开启调度 */
while (1); /* 正常不会执行到这里 */
FAIL_EXIT:
- printf("failed 0x%x \r\n", ret);
+ printf("Failed 0x%x. \r\n", ret);
return 0;
}
diff --git a/example/amp/openamp/core1/rpmsg-ping_os.c b/example/amp/openamp/core1/rpmsg-ping_os.c
index f6f9964eac95c7ad2cd001893e2473923c8fb19b..44ce93c011e6b80e66e7d17f97e5405446079fdc 100644
--- a/example/amp/openamp/core1/rpmsg-ping_os.c
+++ b/example/amp/openamp/core1/rpmsg-ping_os.c
@@ -1,13 +1,29 @@
/*
- * SPDX-License-Identifier: BSD-3-Clause
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * All Rights Reserved.
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the Phytium Public License for more details.
+ *
+ *
+ * FilePath: rpmsg-ping_os.c
+ * Date: 2022-02-25 09:12:07
+ * LastEditTime: 2022-02-25 09:12:19
+ * Description: This file is for a sample demonstration application that showcases usage of rpmsg.
+ * This application is meant to run on the remote CPU running baremetal code.
+ * This application echoes back data that was sent to it by the master core.
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 huanghe 2022/03/25 first commit
*/
-/* This is a sample demonstration application that showcases usage of rpmsg
-This application is meant to run on the remote CPU running baremetal code.
-This application echoes back data that was sent to it by the master core. */
-
-/***************************** Include Files *********************************/
-
#include
#include
#include
@@ -27,16 +43,17 @@ This application echoes back data that was sent to it by the master core. */
/**************************** Type Definitions *******************************/
-struct _payload {
- unsigned long num;
- unsigned long size;
- unsigned char data[];
+struct _payload
+{
+ unsigned long num;
+ unsigned long size;
+ unsigned char data[];
};
static int err_cnt;
static char flg_cnt;
-#define PAYLOAD_MIN_SIZE 1
+#define PAYLOAD_MIN_SIZE 1
/************************** Variable Definitions *****************************/
@@ -54,166 +71,182 @@ static int ept_deleted = 0;
* RPMSG endpoint callbacks
*-----------------------------------------------------------------------------*/
static int rpmsg_endpoint_cb(struct rpmsg_endpoint *ept, void *data, size_t len,
- uint32_t src, void *priv)
+ uint32_t src, void *priv)
{
- int i;
- struct _payload *r_payload = (struct _payload *)data;
+ int i;
+ struct _payload *r_payload = (struct _payload *)data;
- (void)ept;
- (void)src;
- (void)priv;
+ (void)ept;
+ (void)src;
+ (void)priv;
#ifdef CONFIG_MEM_NORMAL
- FCacheDCacheInvalidateRange((intptr)data, len);
+ FCacheDCacheInvalidateRange((intptr)data, len);
#endif
- if (r_payload->size == 0) {
- LPERROR(" Invalid size of package is received.\r\n");
- err_cnt++;
- return RPMSG_SUCCESS;
- }
- /* Validate data buffer integrity. */
- for (i = 0; i < (int)r_payload->size; i++) {
- if (r_payload->data[i] != flg_cnt) {
- LPRINTF("Data corruption at index %d\r\n", i);
- LPRINTF("Want data is %d\r\n", flg_cnt);
- LPRINTF("Get data is %d\r\n", r_payload->data[i]);
- err_cnt++;
- break;
- }
- }
- rnum = r_payload->num + 1;
- return RPMSG_SUCCESS;
+ if (r_payload->size == 0)
+ {
+ LPERROR(" Invalid size of package is received.\r\n");
+ err_cnt++;
+ return RPMSG_SUCCESS;
+ }
+ /* Validate data buffer integrity. */
+ for (i = 0; i < (int)r_payload->size; i++)
+ {
+ if (r_payload->data[i] != flg_cnt)
+ {
+ LPRINTF("Data corruption at index %d.\r\n", i);
+ LPRINTF("Want data is %d.\r\n", flg_cnt);
+ LPRINTF("Get data is %d.\r\n", r_payload->data[i]);
+ err_cnt++;
+ break;
+ }
+ }
+ rnum = r_payload->num + 1;
+ return RPMSG_SUCCESS;
}
static void rpmsg_service_unbind(struct rpmsg_endpoint *ept)
{
- (void)ept;
- rpmsg_destroy_ept(&lept);
- LPRINTF("echo test: service is destroyed\r\n");
- ept_deleted = 1;
+ (void)ept;
+ rpmsg_destroy_ept(&lept);
+ LPRINTF("Echo test: service is destroyed.\r\n");
+ ept_deleted = 1;
}
static void rpmsg_name_service_bind_cb(struct rpmsg_device *rdev,
- const char *name, uint32_t dest)
+ const char *name, uint32_t dest)
{
- LPRINTF("new endpoint notification is received.\r\n");
- if (strcmp(name, RPMSG_SERVICE_NAME))
- LPERROR("Unexpected name service %s.\r\n", name);
- else
- (void)rpmsg_create_ept(&lept, rdev, RPMSG_SERVICE_NAME,
- RPMSG_ADDR_ANY, dest,
- rpmsg_endpoint_cb,
- rpmsg_service_unbind);
+ LPRINTF("New endpoint notification is received.\r\n");
+ if (strcmp(name, RPMSG_SERVICE_NAME))
+ {
+ LPERROR("Unexpected name service %s.\r\n", name);
+ }
+ else
+ (void)rpmsg_create_ept(&lept, rdev, RPMSG_SERVICE_NAME,
+ RPMSG_ADDR_ANY, dest,
+ rpmsg_endpoint_cb,
+ rpmsg_service_unbind);
}
/*-----------------------------------------------------------------------------*
* Application
*-----------------------------------------------------------------------------*/
-int app (struct rpmsg_device *rdev, void *priv)
+int app(struct rpmsg_device *rdev, void *priv)
{
- int ret;
- int i;
- int size, max_size, num_payloads;
- int expect_rnum = 0;
-
- LPRINTF(" 1 - Send data to remote core, retrieve the echo");
- LPRINTF(" and validate its integrity ..\r\n");
-
- max_size = rpmsg_virtio_get_buffer_size(rdev);
- if (max_size < 0) {
- LPERROR("No avaiable buffer size.\r\n");
- return -1;
- }
- max_size -= sizeof(struct _payload);
- num_payloads = max_size - PAYLOAD_MIN_SIZE + 1;
- i_payload =
- (struct _payload *)metal_allocate_memory(2 * sizeof(unsigned long) +
- max_size);
-
- if (!i_payload) {
- LPERROR("memory allocation failed.\r\n");
- return -1;
- }
-
- /* Create RPMsg endpoint */
- ret = rpmsg_create_ept(&lept, rdev, RPMSG_SERVICE_NAME,
- RPMSG_ADDR_ANY, RPMSG_ADDR_ANY,
- rpmsg_endpoint_cb, rpmsg_service_unbind);
-
- if (ret) {
- LPERROR("Failed to create RPMsg endpoint.\r\n");
- metal_free_memory(i_payload);
- return ret;
- }
- while (!is_rpmsg_ept_ready(&lept))
- platform_poll(priv);
-
- LPRINTF("RPMSG endpoint is binded with remote.\r\n");
- for (i = 0, size = PAYLOAD_MIN_SIZE; i < num_payloads; i++, size++) {
- i_payload->num = i;
- i_payload->size = size;
- flg_cnt++;
- /* Mark the data buffer. */
- memset(&(i_payload->data[0]), flg_cnt, size);
-
- ret = rpmsg_send(&lept, i_payload,
- (2 * sizeof(unsigned long)) + size);
-
- if (ret < 0) {
- LPERROR("Failed to send data...\r\n");
- break;
- }
-
- expect_rnum++;
- do {
- platform_poll(priv);
- } while ((rnum < expect_rnum) && !err_cnt && !ept_deleted);
-
- }
-
- LPRINTF("**********************************\r\n");
- LPRINTF(" Test Results: Error count = %d \r\n", err_cnt);
- LPRINTF("**********************************\r\n");
- /* Destroy the RPMsg endpoint */
- rpmsg_destroy_ept(&lept);
- LPRINTF("Quitting application .. Echo test end\r\n");
-
- metal_free_memory(i_payload);
- return 0;
+ int ret;
+ int i;
+ int size, max_size, num_payloads;
+ int expect_rnum = 0;
+
+ LPRINTF(" 1 - Send data to remote core, retrieve the echo");
+ LPRINTF(" and validate its integrity ..\r\n");
+
+ max_size = rpmsg_virtio_get_buffer_size(rdev);
+ if (max_size < 0)
+ {
+ LPERROR("No avaiable buffer size.\r\n");
+ return -1;
+ }
+ max_size -= sizeof(struct _payload);
+ num_payloads = max_size - PAYLOAD_MIN_SIZE + 1;
+ i_payload =
+ (struct _payload *)metal_allocate_memory(2 * sizeof(unsigned long) +
+ max_size);
+
+ if (!i_payload)
+ {
+ LPERROR("Memory allocation failed.\r\n");
+ return -1;
+ }
+
+ /* Create RPMsg endpoint */
+ ret = rpmsg_create_ept(&lept, rdev, RPMSG_SERVICE_NAME,
+ RPMSG_ADDR_ANY, RPMSG_ADDR_ANY,
+ rpmsg_endpoint_cb, rpmsg_service_unbind);
+
+ if (ret)
+ {
+ LPERROR("Failed to create RPMsg endpoint.\r\n");
+ metal_free_memory(i_payload);
+ return ret;
+ }
+ while (!is_rpmsg_ept_ready(&lept))
+ {
+ platform_poll(priv);
+ }
+
+ LPRINTF("RPMSG endpoint is binded with remote.\r\n");
+ for (i = 0, size = PAYLOAD_MIN_SIZE; i < num_payloads; i++, size++)
+ {
+ i_payload->num = i;
+ i_payload->size = size;
+ flg_cnt++;
+ /* Mark the data buffer. */
+ memset(&(i_payload->data[0]), flg_cnt, size);
+
+ ret = rpmsg_send(&lept, i_payload,
+ (2 * sizeof(unsigned long)) + size);
+
+ if (ret < 0)
+ {
+ LPERROR("Failed to send data...\r\n");
+ break;
+ }
+
+ expect_rnum++;
+ do
+ {
+ platform_poll(priv);
+ }
+ while ((rnum < expect_rnum) && !err_cnt && !ept_deleted);
+
+ }
+
+ LPRINTF("**********************************\r\n");
+ LPRINTF(" Test Results: Error count = %d. \r\n", err_cnt);
+ LPRINTF("**********************************\r\n");
+ /* Destroy the RPMsg endpoint */
+ rpmsg_destroy_ept(&lept);
+ LPRINTF("Quitting application .. Echo test end.\r\n");
+
+ metal_free_memory(i_payload);
+ return 0;
}
static void rpmsg_ping(void *args)
{
- void *platform;
- struct rpmsg_device *rpdev;
- int ret = 0;
- /* Initialize platform */
- ret = platform_init(0, NULL, &platform);
- if (ret) {
- LPERROR("Failed to initialize platform.\r\n");
- }
- else
- {
- rpdev = platform_create_rpmsg_vdev(platform, 0,
- VIRTIO_DEV_MASTER,
- NULL,
- rpmsg_name_service_bind_cb);
- if (!rpdev) {
- LPERROR("Failed to create platform_create_rpmsg_vdev\r\n");
- }
- else
- {
- app(rpdev, platform);
- platform_release_rpmsg_vdev(rpdev, platform);
- }
- }
-
- LPRINTF("Stopping application...\r\n");
- platform_cleanup(platform);
- // PsciCpuOff();
- vTaskDelete(NULL);
+ void *platform;
+ struct rpmsg_device *rpdev;
+ int ret = 0;
+ /* Initialize platform */
+ ret = platform_init(0, NULL, &platform);
+ if (ret)
+ {
+ LPERROR("Failed to initialize platform.\r\n");
+ }
+ else
+ {
+ rpdev = platform_create_rpmsg_vdev(platform, 0,
+ VIRTIO_DEV_MASTER,
+ NULL,
+ rpmsg_name_service_bind_cb);
+ if (!rpdev)
+ {
+ LPERROR("Failed to create platform_create_rpmsg_vdev.\r\n");
+ }
+ else
+ {
+ app(rpdev, platform);
+ platform_release_rpmsg_vdev(rpdev, platform);
+ }
+ }
+
+ LPRINTF("Stopping application...\r\n");
+ platform_cleanup(platform);
+ // PsciCpuOff();
+ vTaskDelete(NULL);
}
@@ -221,18 +254,18 @@ static void rpmsg_ping(void *args)
int rpmsg_echo_task(void)
{
- BaseType_t ret;
-
- ret = xTaskCreate((TaskFunction_t )rpmsg_ping, /* 任务入口函数 */
- (const char* )"rpmsg_ping",/* 任务名字 */
- (uint16_t )4096, /* 任务栈大小 */
- (void* )NULL,/* 任务入口函数参数 */
- (UBaseType_t )1, /* 任务的优先级 */
- NULL); /* 任务控制块指针 */
-
- if(ret != pdPASS)
+ BaseType_t ret;
+
+ ret = xTaskCreate((TaskFunction_t)rpmsg_ping, /* 任务入口函数 */
+ (const char *)"rpmsg_ping",/* 任务名字 */
+ (uint16_t)4096, /* 任务栈大小 */
+ (void *)NULL,/* 任务入口函数参数 */
+ (UBaseType_t)1, /* 任务的优先级 */
+ NULL); /* 任务控制块指针 */
+
+ if (ret != pdPASS)
{
- LPERROR("Failed to create a rpmsg_echo task ");
+ LPERROR("Failed to create a rpmsg_echo task. \r\n");
return -1;
}
diff --git a/example/amp/openamp/core1/sdkconfig b/example/amp/openamp/core1/sdkconfig
index 4bd8309b8754711de58d7c9c429c12378eba38f8..e8ec985a86937d0c10b55770b979cc9cdf498ff0 100644
--- a/example/amp/openamp/core1/sdkconfig
+++ b/example/amp/openamp/core1/sdkconfig
@@ -71,6 +71,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_CAN is not set
# CONFIG_USE_I2C is not set
# CONFIG_USE_TIMER is not set
+# CONFIG_USE_MIO is not set
# CONFIG_USE_SDMMC is not set
# CONFIG_USE_PCIE is not set
# CONFIG_USE_WDT is not set
@@ -82,6 +83,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -126,6 +128,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
# CONFIG_OUTPUT_BINARY is not set
# end of Compiler Options
# end of Building Option
@@ -135,17 +146,94 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
#
-# Freertos Drivers
+# Freertos Uart Drivers
#
CONFIG_FREERTOS_USE_UART=y
-# end of Freertos Drivers
+# end of Freertos Uart Drivers
+
+#
+# Freertos Pwm Drivers
+#
+# CONFIG_FREERTOS_USE_PWM is not set
+# end of Freertos Pwm Drivers
+
+#
+# Freertos Qspi Drivers
+#
+# CONFIG_FREERTOS_USE_QSPI is not set
+# end of Freertos Qspi Drivers
+
+#
+# Freertos Wdt Drivers
+#
+# CONFIG_FREERTOS_USE_WDT is not set
+# end of Freertos Wdt Drivers
+
+#
+# Freertos Eth Drivers
+#
+# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
+# end of Freertos Eth Drivers
+
+#
+# Freertos Gpio Drivers
+#
+# CONFIG_FREERTOS_USE_GPIO is not set
+# end of Freertos Gpio Drivers
+
+#
+# Freertos Spim Drivers
+#
+# CONFIG_FREERTOS_USE_FSPIM is not set
+# end of Freertos Spim Drivers
+
+#
+# Freertos DMA Drivers
+#
+# CONFIG_FREERTOS_USE_FDDMA is not set
+# CONFIG_FREERTOS_USE_FGDMA is not set
+# end of Freertos DMA Drivers
+
+#
+# Freertos Adc Drivers
+#
+# CONFIG_FREERTOS_USE_ADC is not set
+# end of Freertos Adc Drivers
+
+#
+# Freertos Can Drivers
+#
+# CONFIG_FREERTOS_USE_CAN is not set
+# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
+# CONFIG_USE_FATFS_0_1_4 is not set
+# CONFIG_USE_SFUD is not set
+# CONFIG_USE_SPIFFS is not set
CONFIG_USE_AMP=y
CONFIG_USE_LIBMETAL=y
@@ -172,4 +260,30 @@ CONFIG_MEM_NO_CACHE=y
# end of OpenAmp
# CONFIG_USE_LETTER_SHELL is not set
-# end of FreeRTOS Setting
+# CONFIG_USE_TLSF is not set
+# CONFIG_USE_SDMMC_CMD is not set
+# CONFIG_USE_CHERRY_USB is not set
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/amp/openamp/core1/sdkconfig.h b/example/amp/openamp/core1/sdkconfig.h
index 08fe8d08c0b332bad4ca6d26e5019623ca41d249..0d2a25e2a20376b6821ae770974c9299edfba433 100644
--- a/example/amp/openamp/core1/sdkconfig.h
+++ b/example/amp/openamp/core1/sdkconfig.h
@@ -63,6 +63,7 @@
/* CONFIG_USE_CAN is not set */
/* CONFIG_USE_I2C is not set */
/* CONFIG_USE_TIMER is not set */
+/* CONFIG_USE_MIO is not set */
/* CONFIG_USE_SDMMC is not set */
/* CONFIG_USE_PCIE is not set */
/* CONFIG_USE_WDT is not set */
@@ -74,6 +75,7 @@
/* CONFIG_USE_ADC is not set */
/* CONFIG_USE_PWM is not set */
/* CONFIG_USE_IPC is not set */
+/* CONFIG_USE_MEDIA is not set */
/* end of Components Configuration */
#define CONFIG_USE_NEW_LIBC
/* end of Standalone Setting */
@@ -114,22 +116,93 @@
/* Compiler Options */
+/* Cross-Compiler Setting */
+
+#define CONFIG_GCC_OPTIMIZE_LEVEL 0
+/* CONFIG_USE_EXT_COMPILER is not set */
+/* CONFIG_USE_KLIN_SYS is not set */
+/* end of Cross-Compiler Setting */
/* CONFIG_OUTPUT_BINARY is not set */
/* end of Compiler Options */
/* end of Building Option */
/* Component Configuration */
-/* Freertos Drivers */
+/* Freertos Uart Drivers */
#define CONFIG_FREERTOS_USE_UART
-/* end of Freertos Drivers */
+/* end of Freertos Uart Drivers */
+
+/* Freertos Pwm Drivers */
+
+/* CONFIG_FREERTOS_USE_PWM is not set */
+/* end of Freertos Pwm Drivers */
+
+/* Freertos Qspi Drivers */
+
+/* CONFIG_FREERTOS_USE_QSPI is not set */
+/* end of Freertos Qspi Drivers */
+
+/* Freertos Wdt Drivers */
+
+/* CONFIG_FREERTOS_USE_WDT is not set */
+/* end of Freertos Wdt Drivers */
+
+/* Freertos Eth Drivers */
+
+/* CONFIG_FREERTOS_USE_XMAC is not set */
+/* CONFIG_FREERTOS_USE_GMAC is not set */
+/* end of Freertos Eth Drivers */
+
+/* Freertos Gpio Drivers */
+
+/* CONFIG_FREERTOS_USE_GPIO is not set */
+/* end of Freertos Gpio Drivers */
+
+/* Freertos Spim Drivers */
+
+/* CONFIG_FREERTOS_USE_FSPIM is not set */
+/* end of Freertos Spim Drivers */
+
+/* Freertos DMA Drivers */
+
+/* CONFIG_FREERTOS_USE_FDDMA is not set */
+/* CONFIG_FREERTOS_USE_FGDMA is not set */
+/* end of Freertos DMA Drivers */
+
+/* Freertos Adc Drivers */
+
+/* CONFIG_FREERTOS_USE_ADC is not set */
+/* end of Freertos Adc Drivers */
+
+/* Freertos Can Drivers */
+
+/* CONFIG_FREERTOS_USE_CAN is not set */
+/* end of Freertos Can Drivers */
+
+/* Freertos I2c Drivers */
+
+/* CONFIG_FREERTOS_USE_I2C is not set */
+/* end of Freertos I2c Drivers */
+
+/* Freertos Mio Drivers */
+
+/* CONFIG_FREERTOS_USE_MIO is not set */
+/* end of Freertos Mio Drivers */
+
+/* Freertos Timer Drivers */
+
+/* CONFIG_FREERTOS_USE_TIMER is not set */
+/* end of Freertos Timer Drivers */
/* end of Component Configuration */
-/* FreeRTOS Setting */
+/* Third-Party Configuration */
/* CONFIG_USE_LWIP is not set */
#define CONFIG_USE_BACKTRACE
+/* CONFIG_USE_FATFS_0_1_4 is not set */
+/* CONFIG_USE_SFUD is not set */
+/* CONFIG_USE_SPIFFS is not set */
#define CONFIG_USE_AMP
#define CONFIG_USE_LIBMETAL
@@ -153,6 +226,31 @@
/* end of Baremetal config */
/* end of OpenAmp */
/* CONFIG_USE_LETTER_SHELL is not set */
-/* end of FreeRTOS Setting */
+/* CONFIG_USE_TLSF is not set */
+/* CONFIG_USE_SDMMC_CMD is not set */
+/* CONFIG_USE_CHERRY_USB is not set */
+/* end of Third-Party Configuration */
+
+/* Kernel Configuration */
+
+#define CONFIG_FREERTOS_OPTIMIZED_SCHEDULER
+#define CONFIG_FREERTOS_HZ 1000
+#define CONFIG_FREERTOS_MAX_PRIORITIES 32
+#define CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES 13
+#define CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES 11
+#define CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS 1
+#define CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE 1024
+#define CONFIG_FREERTOS_MAX_TASK_NAME_LEN 32
+#define CONFIG_FREERTOS_TIMER_TASK_PRIORITY 1
+#define CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH 2048
+#define CONFIG_FREERTOS_TIMER_QUEUE_LENGTH 10
+#define CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE 0
+#define CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS
+#define CONFIG_FREERTOS_USE_TRACE_FACILITY
+#define CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS
+/* CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set */
+#define CONFIG_FREERTOS_TOTAL_HEAP_SIZE 10240
+#define CONFIG_FREERTOS_TASK_FPU_SUPPORT 1
+/* end of Kernel Configuration */
#endif
diff --git a/example/freertos_feature/eventgroup/configs/d2000_aarch32_eg_configs b/example/freertos_feature/eventgroup/configs/d2000_aarch32_eg_configs
index 464a31af9bb3111d91fad1699c91b41de9317519..a16785ad54af36153e37c6b401b31d847493f42d 100644
--- a/example/freertos_feature/eventgroup/configs/d2000_aarch32_eg_configs
+++ b/example/freertos_feature/eventgroup/configs/d2000_aarch32_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -111,6 +112,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -147,6 +157,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -168,12 +179,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -185,14 +190,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -210,4 +233,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/eventgroup/configs/d2000_aarch64_eg_configs b/example/freertos_feature/eventgroup/configs/d2000_aarch64_eg_configs
index 64e6b4b7a6ae1664e07af0d9c84a440dabc972c1..4731ef2f28f88014b15fe54b9662689cee32274f 100644
--- a/example/freertos_feature/eventgroup/configs/d2000_aarch64_eg_configs
+++ b/example/freertos_feature/eventgroup/configs/d2000_aarch64_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -107,6 +108,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -143,6 +153,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -164,12 +175,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -181,14 +186,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -206,4 +229,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/eventgroup/configs/e2000d_aarch32_eg_configs b/example/freertos_feature/eventgroup/configs/e2000d_aarch32_eg_configs
index fc31cd0b27be11b5e09995278c509299162fa4e9..229022705bc103e6f867abfbce05526a6d480085 100644
--- a/example/freertos_feature/eventgroup/configs/e2000d_aarch32_eg_configs
+++ b/example/freertos_feature/eventgroup/configs/e2000d_aarch32_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -111,6 +112,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -147,6 +157,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -168,12 +179,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -185,14 +190,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -210,4 +233,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/eventgroup/configs/e2000d_aarch64_eg_configs b/example/freertos_feature/eventgroup/configs/e2000d_aarch64_eg_configs
index 7e2efa4fba523e780f910a826b7f13a9552e4bbe..f3181d358e9c6ec7c5452447c06782bac1a30a91 100644
--- a/example/freertos_feature/eventgroup/configs/e2000d_aarch64_eg_configs
+++ b/example/freertos_feature/eventgroup/configs/e2000d_aarch64_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -107,6 +108,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -143,6 +153,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -164,12 +175,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -181,14 +186,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -206,4 +229,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/eventgroup/configs/e2000q_aarch32_eg_configs b/example/freertos_feature/eventgroup/configs/e2000q_aarch32_eg_configs
index 1b53ed9171a1fca357a6362a54b3f83039f9a6fd..eea9646fc3246d363566729b218841d271b99ec9 100644
--- a/example/freertos_feature/eventgroup/configs/e2000q_aarch32_eg_configs
+++ b/example/freertos_feature/eventgroup/configs/e2000q_aarch32_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -111,6 +112,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -147,6 +157,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -168,12 +179,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -185,14 +190,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -210,4 +233,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/eventgroup/configs/e2000q_aarch64_eg_configs b/example/freertos_feature/eventgroup/configs/e2000q_aarch64_eg_configs
index 506efc21145e3c62ebe1b565aaebe9ed68d02d8b..d15841303d8e54adec3651db1614fb584f5d698f 100644
--- a/example/freertos_feature/eventgroup/configs/e2000q_aarch64_eg_configs
+++ b/example/freertos_feature/eventgroup/configs/e2000q_aarch64_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -107,6 +108,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -143,6 +153,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -164,12 +175,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -181,14 +186,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -206,4 +229,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/eventgroup/configs/ft2004_aarch32_eg_configs b/example/freertos_feature/eventgroup/configs/ft2004_aarch32_eg_configs
index 4c5b2c49d6edae2d8456f3d083606aa9f62a3361..f0510b59527c3bb025d72f8ccca16b539ea7c56c 100644
--- a/example/freertos_feature/eventgroup/configs/ft2004_aarch32_eg_configs
+++ b/example/freertos_feature/eventgroup/configs/ft2004_aarch32_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -111,6 +112,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -147,6 +157,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -168,12 +179,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -185,14 +190,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -210,4 +233,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/eventgroup/configs/ft2004_aarch64_eg_configs b/example/freertos_feature/eventgroup/configs/ft2004_aarch64_eg_configs
index da9c1f8182b98ecf314c436f79ccbf0a31c79673..d99e8ace055af1b9260a237f1ce8ba6374d9f8e3 100644
--- a/example/freertos_feature/eventgroup/configs/ft2004_aarch64_eg_configs
+++ b/example/freertos_feature/eventgroup/configs/ft2004_aarch64_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -107,6 +108,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -143,6 +153,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -164,12 +175,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -181,14 +186,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -206,4 +229,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/eventgroup/inc/feature_eventgroup.h b/example/freertos_feature/eventgroup/inc/feature_eventgroup.h
index 323a5163587730a621970634e804501b341f6ae5..300d1dc22da8991ba5dea8d8927efb9e5f1e66e0 100644
--- a/example/freertos_feature/eventgroup/inc/feature_eventgroup.h
+++ b/example/freertos_feature/eventgroup/inc/feature_eventgroup.h
@@ -1,30 +1,36 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: feature_eventgroup.h
* Date: 2022-06-17 10:42:40
* LastEditTime: 2022-06-17 10:42:40
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
+ * Description: This file is for task function define
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2022/08/09 first commit
*/
#ifndef FEATURE_EVENTGROUP_H
#define FEATURE_EVENTGROUP_H
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
/* event group Management task */
void CreateManagementTasks(void);
void DeleteManagementTasks(void);
@@ -33,6 +39,8 @@ void DeleteManagementTasks(void);
void CreateSyncTasks(void);
void DeleteSyncTasks(void);
-
+#ifdef __cplusplus
+}
+#endif
#endif // !
\ No newline at end of file
diff --git a/example/freertos_feature/eventgroup/main.c b/example/freertos_feature/eventgroup/main.c
index f376d838205fdb1a0ea7cf3bf6d192350dc0ad4f..fa9cccdffe6808a34d07fbffcc6faba76dfd6398 100644
--- a/example/freertos_feature/eventgroup/main.c
+++ b/example/freertos_feature/eventgroup/main.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: main.c
* Date: 2022-06-17 08:17:59
* LastEditTime: 2022-06-17 08:17:59
- * Description: This file is for
- *
- * Modify History:
+ * Description: This file is for eventgroup example that running shell task and open scheduler
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2022/08/09 first commit
*/
#include "shell.h"
@@ -30,13 +31,15 @@ int main(void)
BaseType_t ret;
ret = LSUserShellTask() ;
- if(ret != pdPASS)
+ if (ret != pdPASS)
+ {
goto FAIL_EXIT;
+ }
- vTaskStartScheduler(); /* 启动任务,开启调度 */
+ vTaskStartScheduler(); /* 启动任务,开启调度 */
while (1); /* 正常不会执行到这里 */
-
+
FAIL_EXIT:
- printf("failed 0x%x \r\n", ret);
+ printf("Failed 0x%x. \r\n", ret);
return 0;
}
diff --git a/example/freertos_feature/eventgroup/sdkconfig b/example/freertos_feature/eventgroup/sdkconfig
index 506efc21145e3c62ebe1b565aaebe9ed68d02d8b..d15841303d8e54adec3651db1614fb584f5d698f 100644
--- a/example/freertos_feature/eventgroup/sdkconfig
+++ b/example/freertos_feature/eventgroup/sdkconfig
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -107,6 +108,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -143,6 +153,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -164,12 +175,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -181,14 +186,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -206,4 +229,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/eventgroup/sdkconfig.h b/example/freertos_feature/eventgroup/sdkconfig.h
index 2ccaa5366aa6f3e1d5c66ad7cf530e14cd54c5cb..e5bce45231514698b1bbd71959b7dfbf790d0d72 100644
--- a/example/freertos_feature/eventgroup/sdkconfig.h
+++ b/example/freertos_feature/eventgroup/sdkconfig.h
@@ -62,6 +62,7 @@
/* CONFIG_USE_ADC is not set */
/* CONFIG_USE_PWM is not set */
/* CONFIG_USE_IPC is not set */
+/* CONFIG_USE_MEDIA is not set */
/* end of Components Configuration */
#define CONFIG_USE_NEW_LIBC
/* end of Standalone Setting */
@@ -98,6 +99,12 @@
/* Compiler Options */
+/* Cross-Compiler Setting */
+
+#define CONFIG_GCC_OPTIMIZE_LEVEL 0
+/* CONFIG_USE_EXT_COMPILER is not set */
+/* CONFIG_USE_KLIN_SYS is not set */
+/* end of Cross-Compiler Setting */
#define CONFIG_OUTPUT_BINARY
/* end of Compiler Options */
/* end of Building Option */
@@ -127,6 +134,7 @@
/* Freertos Eth Drivers */
/* CONFIG_FREERTOS_USE_XMAC is not set */
+/* CONFIG_FREERTOS_USE_GMAC is not set */
/* end of Freertos Eth Drivers */
/* Freertos Gpio Drivers */
@@ -145,11 +153,6 @@
/* CONFIG_FREERTOS_USE_FGDMA is not set */
/* end of Freertos DMA Drivers */
-/* Freertos MMC Drivers */
-
-/* CONFIG_FREERTOS_USE_FSDIO is not set */
-/* end of Freertos MMC Drivers */
-
/* Freertos Adc Drivers */
/* CONFIG_FREERTOS_USE_ADC is not set */
@@ -159,13 +162,28 @@
/* CONFIG_FREERTOS_USE_CAN is not set */
/* end of Freertos Can Drivers */
+
+/* Freertos I2c Drivers */
+
+/* CONFIG_FREERTOS_USE_I2C is not set */
+/* end of Freertos I2c Drivers */
+
+/* Freertos Mio Drivers */
+
+/* CONFIG_FREERTOS_USE_MIO is not set */
+/* end of Freertos Mio Drivers */
+
+/* Freertos Timer Drivers */
+
+/* CONFIG_FREERTOS_USE_TIMER is not set */
+/* end of Freertos Timer Drivers */
/* end of Component Configuration */
-/* FreeRTOS Setting */
+/* Third-Party Configuration */
/* CONFIG_USE_LWIP is not set */
#define CONFIG_USE_BACKTRACE
-/* CONFIG_USE_FATFS is not set */
+/* CONFIG_USE_FATFS_0_1_4 is not set */
/* CONFIG_USE_SFUD is not set */
/* CONFIG_USE_SPIFFS is not set */
/* CONFIG_USE_AMP is not set */
@@ -181,6 +199,28 @@
#define CONFIG_USE_TLSF
/* CONFIG_USE_SDMMC_CMD is not set */
/* CONFIG_USE_CHERRY_USB is not set */
-/* end of FreeRTOS Setting */
+/* end of Third-Party Configuration */
+
+/* Kernel Configuration */
+
+#define CONFIG_FREERTOS_OPTIMIZED_SCHEDULER
+#define CONFIG_FREERTOS_HZ 1000
+#define CONFIG_FREERTOS_MAX_PRIORITIES 32
+#define CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES 13
+#define CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES 11
+#define CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS 1
+#define CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE 1024
+#define CONFIG_FREERTOS_MAX_TASK_NAME_LEN 32
+#define CONFIG_FREERTOS_TIMER_TASK_PRIORITY 1
+#define CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH 2048
+#define CONFIG_FREERTOS_TIMER_QUEUE_LENGTH 10
+#define CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE 0
+#define CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS
+#define CONFIG_FREERTOS_USE_TRACE_FACILITY
+#define CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS
+/* CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set */
+#define CONFIG_FREERTOS_TOTAL_HEAP_SIZE 10240
+#define CONFIG_FREERTOS_TASK_FPU_SUPPORT 1
+/* end of Kernel Configuration */
#endif
diff --git a/example/freertos_feature/eventgroup/src/eventgroup_cmd.c b/example/freertos_feature/eventgroup/src/eventgroup_cmd.c
index 68a7e3bd15497b4413d421694cbf0f8255d25454..173ee67bebacd0ea7a7656fc93db21cfff9d2ffc 100644
--- a/example/freertos_feature/eventgroup/src/eventgroup_cmd.c
+++ b/example/freertos_feature/eventgroup/src/eventgroup_cmd.c
@@ -1,3 +1,26 @@
+/*
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * All Rights Reserved.
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the Phytium Public License for more details.
+ *
+ *
+ * FilePath: eventgroup_cmd.c
+ * Date: 2022-06-17 10:42:40
+ * LastEditTime: 2022-06-17 10:42:40
+ * Description: This file is for eventgroup command interface
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2022/08/09 first commit
+ */
#include "shell.h"
#include
@@ -13,15 +36,15 @@ typedef enum
static void EventTasksCmdUsage(void)
{
- printf("usage:\r\n");
+ printf("Usage:\r\n");
printf(" event manage_cre \r\n");
- printf(" -- create manage tasks now\r\n");
+ printf(" -- Create manage tasks now.\r\n");
printf(" event manage_del \r\n");
- printf(" -- del manage tasks now\r\n");
+ printf(" -- Del manage tasks now.\r\n");
printf(" event sync_cre \r\n");
- printf(" -- create sync tasks now\r\n");
+ printf(" -- Create sync tasks now.\r\n");
printf(" event sync_del \r\n");
- printf(" -- del sync tasks now\r\n");
+ printf(" -- Del sync tasks now.\r\n");
}
@@ -37,55 +60,55 @@ int CreateEventCmd(int argc, char *argv[])
if (!strcmp(argv[1], "manage_cre"))
{
- if(create_flg[MANAGE_TASK_INDEX] == 0)
+ if (create_flg[MANAGE_TASK_INDEX] == 0)
{
CreateManagementTasks();
create_flg[MANAGE_TASK_INDEX] = 1;
}
else
{
- printf("Please use manage_del cmd first \r\n");
+ printf("Please use manage_del cmd first. \r\n");
}
}
else if (!strcmp(argv[1], "manage_del"))
{
- if(create_flg[MANAGE_TASK_INDEX] == 1)
+ if (create_flg[MANAGE_TASK_INDEX] == 1)
{
DeleteManagementTasks();
create_flg[MANAGE_TASK_INDEX] = 0;
- }
+ }
else
{
- printf("Please use manage_cre cmd first \r\n");
+ printf("Please use manage_cre cmd first. \r\n");
}
}
else if (!strcmp(argv[1], "sync_cre"))
{
- if(create_flg[SYNC_TASK_INDEX] == 0)
+ if (create_flg[SYNC_TASK_INDEX] == 0)
{
CreateSyncTasks();
create_flg[SYNC_TASK_INDEX] = 1;
}
else
{
- printf("Please use sync_del cmd first \r\n");
+ printf("Please use sync_del cmd first. \r\n");
}
}
else if (!strcmp(argv[1], "sync_del"))
{
- if(create_flg[SYNC_TASK_INDEX] == 1)
+ if (create_flg[SYNC_TASK_INDEX] == 1)
{
DeleteSyncTasks();
create_flg[SYNC_TASK_INDEX] = 0;
- }
+ }
else
{
- printf("Please use sync_cre cmd first \r\n");
+ printf("Please use sync_cre cmd first. \r\n");
}
}
else
{
- printf("Error: Invalid arguments \r\n");
+ printf("Error: Invalid arguments. \r\n");
EventTasksCmdUsage();
}
return 0;
diff --git a/example/freertos_feature/eventgroup/src/management.c b/example/freertos_feature/eventgroup/src/management.c
index 422a1a8b31cbc7e57b936905eac6c0a9adfb85cf..0c4491eff705148ea660f618fae744962ef08a0a 100644
--- a/example/freertos_feature/eventgroup/src/management.c
+++ b/example/freertos_feature/eventgroup/src/management.c
@@ -1,9 +1,9 @@
/*
-This example demonstrates how to:
- Create an event group.
- Set bits in an event group from an interrupt service routine.
- Set bits in an event group from a task.
- Block on an event group.
+This example demonstrates how to:
+ Create an event group.
+ Set bits in an event group from an interrupt service routine.
+ Set bits in an event group from a task.
+ Block on an event group.
*/
#include "FreeRTOS.h"
#include "task.h"
@@ -16,31 +16,31 @@ static xTaskHandle xtask1_handle;
static xTaskHandle xtask2_handle;
static xTaskHandle xtask3_handle;
-#define TASK_STACK_SIZE 1024
+#define TASK_STACK_SIZE 1024
/* The interrupt number to use for the software interrupt generation. This
could be any unused number. In this case the first chip level (non system)
interrupt is used */
-#define INTERRUPT_ID 0
+#define INTERRUPT_ID 0
/* The priority of the software interrupt. The interrupt service routine uses
an (interrupt safe) FreeRTOS API function, so the priority of the interrupt must
be equal to or lower than the priority set by configMAX_SYSCALL_INTERRUPT_PRIORITY. */
-#define INTERRUPT_PRIORITY IRQ_PRIORITY_VALUE_12
+#define INTERRUPT_PRIORITY IRQ_PRIORITY_VALUE_12
/* Definitions for the event bits in the event group. */
-#define FIRST_TASK_BIT ( 1UL << 0UL ) /* Event bit 0, which is set by a task. */
-#define SECOND_TASK_BIT ( 1UL << 1UL ) /* Event bit 1, which is set by a task. */
-#define ISR_BIT ( 1UL << 2UL ) /* Event bit 2, which is set by an ISR. */
+#define FIRST_TASK_BIT ( 1UL << 0UL ) /* Event bit 0, which is set by a task. */
+#define SECOND_TASK_BIT ( 1UL << 1UL ) /* Event bit 1, which is set by a task. */
+#define ISR_BIT ( 1UL << 2UL ) /* Event bit 2, which is set by an ISR. */
/* The tasks to be created. */
-static void vIntegerGenerator( void *pvParameters );
-static void vEventBitSettingTask( void *pvParameters );
-static void vEventBitReadingTask( void *pvParameters );
+static void vIntegerGenerator(void *pvParameters);
+static void vEventBitSettingTask(void *pvParameters);
+static void vEventBitReadingTask(void *pvParameters);
/* A function that can be deferred to run in the RTOS daemon task. The function
prints out the string passed to it using the pvParameter1 parameter. */
-void vPrintStringFromDaemonTask( void *pvParameter1, uint32_t ulParameter2 );
+void vPrintStringFromDaemonTask(void *pvParameter1, uint32_t ulParameter2);
/* The service routine for the (simulated) interrupt. This is the interrupt
that sets an event bit in the event group. */
@@ -56,205 +56,205 @@ static u32 cpu_id = 0;
/* Declare the event group in which bits are set from both a task and an ISR. */
static EventGroupHandle_t xEventGroup;
-void CreateManagementTasks( void )
+void CreateManagementTasks(void)
{
- /* Before an event group can be used it must first be created. */
- xEventGroup = xEventGroupCreate();
- vSetupSoftwareInterrupt();
+ /* Before an event group can be used it must first be created. */
+ xEventGroup = xEventGroupCreate();
+ vSetupSoftwareInterrupt();
- /* Create the task that sets event bits in the event group. */
- xTaskCreate( vEventBitSettingTask, "Manage BitSetter", TASK_STACK_SIZE, NULL, 1, &xtask1_handle );
+ /* Create the task that sets event bits in the event group. */
+ xTaskCreate(vEventBitSettingTask, "Manage BitSetter", TASK_STACK_SIZE, NULL, 1, &xtask1_handle);
- /* Create the task that waits for event bits to get set in the event
- group. */
- xTaskCreate( vEventBitReadingTask, "Manage BitReader", TASK_STACK_SIZE, NULL, 2, &xtask2_handle );
+ /* Create the task that waits for event bits to get set in the event
+ group. */
+ xTaskCreate(vEventBitReadingTask, "Manage BitReader", TASK_STACK_SIZE, NULL, 2, &xtask2_handle);
- /* Create the task that is used to periodically generate a software
- interrupt. */
- xTaskCreate( vIntegerGenerator, "Manage IntGen", TASK_STACK_SIZE, NULL, 3, &xtask3_handle );
+ /* Create the task that is used to periodically generate a software
+ interrupt. */
+ xTaskCreate(vIntegerGenerator, "Manage IntGen", TASK_STACK_SIZE, NULL, 3, &xtask3_handle);
- /* Install the handler for the software interrupt. The syntax necessary
- to do this is dependent on the FreeRTOS port being used. */
+ /* Install the handler for the software interrupt. The syntax necessary
+ to do this is dependent on the FreeRTOS port being used. */
}
void DeleteManagementTasks(void)
{
- if(xtask1_handle)
+ if (xtask1_handle)
{
vTaskDelete(xtask1_handle);
vPrintString("Eventgroup management BitSetter deletion");
}
- if(xtask2_handle)
+ if (xtask2_handle)
{
vTaskDelete(xtask2_handle);
vPrintString("Eventgroup management BitReader deletion");
}
- if(xtask3_handle)
+ if (xtask3_handle)
{
vTaskDelete(xtask3_handle);
vPrintString("Eventgroup management IntGen deletion");
}
-
+
}
/*-----------------------------------------------------------*/
-static void vEventBitSettingTask( void *pvParameters )
+static void vEventBitSettingTask(void *pvParameters)
{
- const TickType_t xDelay = pdMS_TO_TICKS( 5000UL ), xDontBlock = 0;
-
- for( ;; )
- {
- /* Delay for a short while before starting the next loop. */
- vTaskDelay( xDelay );
-
- /* Print out a message to say event bit 0 is about to be set by the
- task, then set event bit 0. */
- vPrintString( "Manage Bit setting task -\t about to set bit 0." );
- xEventGroupSetBits( xEventGroup, FIRST_TASK_BIT );
-
- /* Delay for a short while before setting the other bit set within this
- task. */
- vTaskDelay( xDelay );
-
- /* Print out a message to say event bit 1 is about to be set by the
- task, then set event bit 1. */
- vPrintString( "Manage Bit setting task -\t about to set bit 1." );
- xEventGroupSetBits( xEventGroup, SECOND_TASK_BIT );
- }
+ const TickType_t xDelay = pdMS_TO_TICKS(5000UL), xDontBlock = 0;
+
+ for (;;)
+ {
+ /* Delay for a short while before starting the next loop. */
+ vTaskDelay(xDelay);
+
+ /* Print out a message to say event bit 0 is about to be set by the
+ task, then set event bit 0. */
+ vPrintString("Manage Bit setting task -\t about to set bit 0.");
+ xEventGroupSetBits(xEventGroup, FIRST_TASK_BIT);
+
+ /* Delay for a short while before setting the other bit set within this
+ task. */
+ vTaskDelay(xDelay);
+
+ /* Print out a message to say event bit 1 is about to be set by the
+ task, then set event bit 1. */
+ vPrintString("Manage Bit setting task -\t about to set bit 1.");
+ xEventGroupSetBits(xEventGroup, SECOND_TASK_BIT);
+ }
}
/*-----------------------------------------------------------*/
static void ulEventBitSettingISR(s32 vector, void *param)
{
- BaseType_t xHigherPriorityTaskWoken;
- /* The string is not printed within the interrupt service, but is instead
- sent to the RTOS daemon task for printing. It is therefore declared static to
- ensure the compiler does not allocate the string on the stack of the ISR (as the
- ISR's stack frame will not exist when the string is printed from the daemon
- task. */
- static const char *pcString = "Manage Bit setting ISR -\t about to set bit 2.";
-
- /* As always, xHigherPriorityTaskWoken is initialized to pdFALSE. */
- xHigherPriorityTaskWoken = pdFALSE;
-
- /* Print out a message to say bit 2 is about to be set. Messages cannot be
- printed from an ISR, so defer the actual output to the RTOS daemon task by
- pending a function call to run in the context of the RTOS daemon task. */
- xTimerPendFunctionCallFromISR( vPrintStringFromDaemonTask, ( void * ) pcString, 0, &xHigherPriorityTaskWoken );
-
- /* Set bit 2 in the event group. */
- xEventGroupSetBitsFromISR( xEventGroup, ISR_BIT, &xHigherPriorityTaskWoken );
-
- /* xEventGroupSetBitsFromISR() writes to the timer command queue. If
- writing to the timer command queue results in the RTOS daemon task leaving
- the Blocked state, and if the priority of the RTOS daemon task is higher
- than the priority of the currently executing task (the task this interrupt
- interrupted) then xHigherPriorityTaskWoken will have been set to pdTRUE
- inside xEventGroupSetBitsFromISR().
-
- xHigherPriorityTaskWoken is used as the parameter to portYIELD_FROM_ISR().
- If xHigherPriorityTaskWoken equals pdTRUE then calling portYIELD_FROM_ISR()
+ BaseType_t xHigherPriorityTaskWoken;
+ /* The string is not printed within the interrupt service, but is instead
+ sent to the RTOS daemon task for printing. It is therefore declared static to
+ ensure the compiler does not allocate the string on the stack of the ISR (as the
+ ISR's stack frame will not exist when the string is printed from the daemon
+ task. */
+ static const char *pcString = "Manage Bit setting ISR -\t about to set bit 2.";
+
+ /* As always, xHigherPriorityTaskWoken is initialized to pdFALSE. */
+ xHigherPriorityTaskWoken = pdFALSE;
+
+ /* Print out a message to say bit 2 is about to be set. Messages cannot be
+ printed from an ISR, so defer the actual output to the RTOS daemon task by
+ pending a function call to run in the context of the RTOS daemon task. */
+ xTimerPendFunctionCallFromISR(vPrintStringFromDaemonTask, (void *) pcString, 0, &xHigherPriorityTaskWoken);
+
+ /* Set bit 2 in the event group. */
+ xEventGroupSetBitsFromISR(xEventGroup, ISR_BIT, &xHigherPriorityTaskWoken);
+
+ /* xEventGroupSetBitsFromISR() writes to the timer command queue. If
+ writing to the timer command queue results in the RTOS daemon task leaving
+ the Blocked state, and if the priority of the RTOS daemon task is higher
+ than the priority of the currently executing task (the task this interrupt
+ interrupted) then xHigherPriorityTaskWoken will have been set to pdTRUE
+ inside xEventGroupSetBitsFromISR().
+
+ xHigherPriorityTaskWoken is used as the parameter to portYIELD_FROM_ISR().
+ If xHigherPriorityTaskWoken equals pdTRUE then calling portYIELD_FROM_ISR()
will request a context switch. If xHigherPriorityTaskWoken is still pdFALSE
- then calling portYIELD_FROM_ISR() will have no effect.
+ then calling portYIELD_FROM_ISR() will have no effect.
- The implementation of portYIELD_FROM_ISR() used by the Windows port includes
- a return statement, which is why this function does not explicitly return a
- value. */
- portYIELD_FROM_ISR( xHigherPriorityTaskWoken );
+ The implementation of portYIELD_FROM_ISR() used by the Windows port includes
+ a return statement, which is why this function does not explicitly return a
+ value. */
+ portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
}
/*-----------------------------------------------------------*/
-static void vEventBitReadingTask( void *pvParameters )
+static void vEventBitReadingTask(void *pvParameters)
{
- const EventBits_t xBitsToWaitFor = ( FIRST_TASK_BIT | SECOND_TASK_BIT | ISR_BIT );
- EventBits_t xEventGroupValue;
-
- for( ;; )
- {
- /* Block to wait for event bits to become set within the event group. */
- xEventGroupValue = xEventGroupWaitBits( /* The event group to read. */
- xEventGroup,
-
- /* Bits to test. */
- xBitsToWaitFor,
-
- /* Clear bits on exit if the
- unblock condition is met. */
- pdTRUE,
-
- /* Don't wait for all bits. */
- pdFALSE,
-
- /* Don't time out. */
- portMAX_DELAY );
-
- /* Print a message for each bit that was set. */
- if( ( xEventGroupValue & FIRST_TASK_BIT ) != 0 )
- {
- vPrintString( "Manage Bit reading task -\t event bit 0 was set" );
- }
-
- if( ( xEventGroupValue & SECOND_TASK_BIT ) != 0 )
- {
- vPrintString( "Manage Bit reading task -\t event bit 1 was set" );
- }
-
- if( ( xEventGroupValue & ISR_BIT ) != 0 )
- {
- vPrintString( "Manage Bit reading task -\t event bit 2 was set" );
- }
- }
+ const EventBits_t xBitsToWaitFor = (FIRST_TASK_BIT | SECOND_TASK_BIT | ISR_BIT);
+ EventBits_t xEventGroupValue;
+
+ for (;;)
+ {
+ /* Block to wait for event bits to become set within the event group. */
+ xEventGroupValue = xEventGroupWaitBits( /* The event group to read. */
+ xEventGroup,
+
+ /* Bits to test. */
+ xBitsToWaitFor,
+
+ /* Clear bits on exit if the
+ unblock condition is met. */
+ pdTRUE,
+
+ /* Don't wait for all bits. */
+ pdFALSE,
+
+ /* Don't time out. */
+ portMAX_DELAY);
+
+ /* Print a message for each bit that was set. */
+ if ((xEventGroupValue & FIRST_TASK_BIT) != 0)
+ {
+ vPrintString("Manage Bit reading task -\t event bit 0 was set");
+ }
+
+ if ((xEventGroupValue & SECOND_TASK_BIT) != 0)
+ {
+ vPrintString("Manage Bit reading task -\t event bit 1 was set");
+ }
+
+ if ((xEventGroupValue & ISR_BIT) != 0)
+ {
+ vPrintString("Manage Bit reading task -\t event bit 2 was set");
+ }
+ }
}
/*-----------------------------------------------------------*/
-void vPrintStringFromDaemonTask( void *pvParameter1, uint32_t ulParameter2 )
+void vPrintStringFromDaemonTask(void *pvParameter1, uint32_t ulParameter2)
{
- /* The string to print is passed into this function using the pvParameter1
- parameter. */
- vPrintString( ( const char * ) pvParameter1 );
+ /* The string to print is passed into this function using the pvParameter1
+ parameter. */
+ vPrintString((const char *) pvParameter1);
}
/*-----------------------------------------------------------*/
-static void vIntegerGenerator( void *pvParameters )
+static void vIntegerGenerator(void *pvParameters)
{
- TickType_t xLastExecutionTime;
- const TickType_t xDelay = pdMS_TO_TICKS( 5000UL );
+ TickType_t xLastExecutionTime;
+ const TickType_t xDelay = pdMS_TO_TICKS(5000UL);
- /* Initialize the variable used by the call to vTaskDelayUntil(). */
- xLastExecutionTime = xTaskGetTickCount();
+ /* Initialize the variable used by the call to vTaskDelayUntil(). */
+ xLastExecutionTime = xTaskGetTickCount();
- for( ;; )
- {
- /* This is a periodic task. Block until it is time to run again.
- The task will execute every 500ms. */
- vTaskDelayUntil( &xLastExecutionTime, xDelay );
+ for (;;)
+ {
+ /* This is a periodic task. Block until it is time to run again.
+ The task will execute every 500ms. */
+ vTaskDelayUntil(&xLastExecutionTime, xDelay);
- /* Generate the interrupt that will set a bit in the event group. */
- vTriggerInterrupt();
- }
+ /* Generate the interrupt that will set a bit in the event group. */
+ vTriggerInterrupt();
+ }
}
static void vSetupSoftwareInterrupt(void)
{
-
- GetCpuId(&cpu_id);
+
+ GetCpuId(&cpu_id);
vPrintf("cpu_id is %d \r\n", cpu_id);
- /* The interrupt service routine uses an (interrupt safe) FreeRTOS API
- function so the interrupt priority must be at or below the priority defined
- by configSYSCALL_INTERRUPT_PRIORITY. */
- InterruptSetPriority(INTERRUPT_ID, INTERRUPT_PRIORITY );
+ /* The interrupt service routine uses an (interrupt safe) FreeRTOS API
+ function so the interrupt priority must be at or below the priority defined
+ by configSYSCALL_INTERRUPT_PRIORITY. */
+ InterruptSetPriority(INTERRUPT_ID, INTERRUPT_PRIORITY);
- InterruptInstall(INTERRUPT_ID, ulEventBitSettingISR, NULL, NULL);
+ InterruptInstall(INTERRUPT_ID, ulEventBitSettingISR, NULL, NULL);
- /* Enable the interrupt. */
- InterruptUmask( INTERRUPT_ID );
+ /* Enable the interrupt. */
+ InterruptUmask(INTERRUPT_ID);
}
/* Macro to force an interrupt. */
static void vTriggerInterrupt(void)
{
- InterruptCoreInterSend(INTERRUPT_ID, (1 << cpu_id));
+ InterruptCoreInterSend(INTERRUPT_ID, (1 << cpu_id));
}
diff --git a/example/freertos_feature/eventgroup/src/synchronization.c b/example/freertos_feature/eventgroup/src/synchronization.c
index 4ed91ec9cd15949270c370c975002a921d630b18..6d2afbac4a570b3b3947b0de509891a939f21fe7 100644
--- a/example/freertos_feature/eventgroup/src/synchronization.c
+++ b/example/freertos_feature/eventgroup/src/synchronization.c
@@ -1,7 +1,7 @@
/*
This example demonstrates how to:
-uses xEventGroupSync() to synchronize three instances of a single task implementation.
-The task parameter is used to pass into each instance the event bit the task will
+uses xEventGroupSync() to synchronize three instances of a single task implementation.
+The task parameter is used to pass into each instance the event bit the task will
set when it calls xEventGroupSync().
*/
#include
@@ -13,20 +13,20 @@ static xTaskHandle xtask1_handle;
static xTaskHandle xtask2_handle;
static xTaskHandle xtask3_handle;
-#define TASK_STACK_SIZE 1024
+#define TASK_STACK_SIZE 1024
/* Definitions for the event bits in the event group. */
-#define FIRST_TASK_BIT ( 1UL << 0UL ) /* Event bit 0, which is set by the first task. */
-#define SECOND_TASK_BIT ( 1UL << 1UL ) /* Event bit 1, which is set by the second task. */
-#define THIRD_TASK_BIT ( 1UL << 2UL ) /* Event bit 2, which is set by the third task. */
+#define FIRST_TASK_BIT ( 1UL << 0UL ) /* Event bit 0, which is set by the first task. */
+#define SECOND_TASK_BIT ( 1UL << 1UL ) /* Event bit 1, which is set by the second task. */
+#define THIRD_TASK_BIT ( 1UL << 2UL ) /* Event bit 2, which is set by the third task. */
/* Pseudo random number generation functions - implemented in this file as the
MSVC rand() function has unexpected consequences. */
-static uint32_t prvRand( void );
-static void prvSRand( uint32_t ulSeed );
+static uint32_t prvRand(void);
+static void prvSRand(uint32_t ulSeed);
/* Three instances of this task are created. */
-static void vSyncingTask( void *pvParameters );
+static void vSyncingTask(void *pvParameters);
/*-----------------------------------------------------------*/
@@ -36,123 +36,123 @@ static uint32_t ulNextRand;
/* Declare the event group used to synchronize the three tasks. */
static EventGroupHandle_t xEventGroup;
-void CreateSyncTasks( void )
+void CreateSyncTasks(void)
{
- /* The tasks created in this example block for a random time. The block
- time is generated using rand() - seed the random number generator. */
- prvSRand( ( uint32_t ) time( NULL ) );
-
- /* Before an event group can be used it must first be created. */
- xEventGroup = xEventGroupCreate();
-
- /* Create three instances of the task. Each task is given a different name,
- which is later printed out to give a visual indication of which task is
- executing. The event bit to use when the task reaches its synchronization
- point is passed into the task using the task parameter. */
- xTaskCreate( vSyncingTask, "Sync Task 1", TASK_STACK_SIZE, ( void * ) FIRST_TASK_BIT, 1, &xtask1_handle );
- xTaskCreate( vSyncingTask, "Sync Task 2", TASK_STACK_SIZE, ( void * ) SECOND_TASK_BIT, 1, &xtask2_handle );
- xTaskCreate( vSyncingTask, "Sync Task 3", TASK_STACK_SIZE, ( void * ) THIRD_TASK_BIT, 1, &xtask3_handle );
+ /* The tasks created in this example block for a random time. The block
+ time is generated using rand() - seed the random number generator. */
+ prvSRand((uint32_t) time(NULL));
+
+ /* Before an event group can be used it must first be created. */
+ xEventGroup = xEventGroupCreate();
+
+ /* Create three instances of the task. Each task is given a different name,
+ which is later printed out to give a visual indication of which task is
+ executing. The event bit to use when the task reaches its synchronization
+ point is passed into the task using the task parameter. */
+ xTaskCreate(vSyncingTask, "Sync Task 1", TASK_STACK_SIZE, (void *) FIRST_TASK_BIT, 1, &xtask1_handle);
+ xTaskCreate(vSyncingTask, "Sync Task 2", TASK_STACK_SIZE, (void *) SECOND_TASK_BIT, 1, &xtask2_handle);
+ xTaskCreate(vSyncingTask, "Sync Task 3", TASK_STACK_SIZE, (void *) THIRD_TASK_BIT, 1, &xtask3_handle);
}
void DeleteSyncTasks(void)
{
- if(xtask1_handle)
+ if (xtask1_handle)
{
vTaskDelete(xtask1_handle);
vPrintString("Eventgroup Sync Task 1 deletion \r\n");
}
- if(xtask2_handle)
+ if (xtask2_handle)
{
vTaskDelete(xtask2_handle);
vPrintString("Eventgroup Sync Task 2 deletion \r\n");
}
- if(xtask3_handle)
+ if (xtask3_handle)
{
vTaskDelete(xtask3_handle);
vPrintString("Eventgroup Sync Task 3 deletion \r\n");
}
-
+
}
/*-----------------------------------------------------------*/
-static void vSyncingTask( void *pvParameters )
+static void vSyncingTask(void *pvParameters)
{
- const EventBits_t uxAllSyncBits = ( FIRST_TASK_BIT | SECOND_TASK_BIT | THIRD_TASK_BIT );
- const TickType_t xMaxDelay = pdMS_TO_TICKS( 500UL );
- const TickType_t xMinDelay = pdMS_TO_TICKS( 4000UL );
- TickType_t xDelayTime;
- EventBits_t uxThisTasksSyncBit;
-
- /* Three instances of this task are created - each task uses a different
- event bit in the synchronization. The event bit to use by this task
- instance is passed into the task using the task's parameter. Store it in
- the uxThisTasksSyncBit variable. */
- uxThisTasksSyncBit = ( EventBits_t ) pvParameters;
-
- for( ;; )
- {
- /* Simulate this task taking some time to perform an action by delaying
- for a pseudo random time. This prevents all three instances of this
- task from reaching the synchronization point at the same time, and
- allows the example's behavior to be observed more easily. */
- xDelayTime = ( prvRand() % xMaxDelay ) + xMinDelay;
- vTaskDelay( xDelayTime );
-
- /* Print out a message to show this task has reached its synchronization
- point. pcTaskGetTaskName() is an API function that returns the name
- assigned to the task when the task was created. */
- vPrintString( pcTaskGetTaskName( NULL ) );
- vPrintString( " reached sync point\n");
-
- /* Wait for all the tasks to have reached their respective
- synchronization points. */
- xEventGroupSync( /* The event group used to synchronize. */
- xEventGroup,
-
- /* The bit set by this task to indicate it has reached
- the synchronization point. */
- uxThisTasksSyncBit,
-
- /* The bits to wait for, one bit for each task taking
- part in the synchronization. */
- uxAllSyncBits,
-
- /* Wait indefinitely for all three tasks to reach the
- synchronization point. */
- portMAX_DELAY );
-
- /* Print out a message to show this task has passed its synchronization
- point. As an indefinite delay was used the following line will only be
- reached after all the tasks reached their respective synchronization
- points. */
- vPrintString( pcTaskGetTaskName( NULL ) );
- vPrintString( " exited sync point\n");
-
- }
+ const EventBits_t uxAllSyncBits = (FIRST_TASK_BIT | SECOND_TASK_BIT | THIRD_TASK_BIT);
+ const TickType_t xMaxDelay = pdMS_TO_TICKS(500UL);
+ const TickType_t xMinDelay = pdMS_TO_TICKS(4000UL);
+ TickType_t xDelayTime;
+ EventBits_t uxThisTasksSyncBit;
+
+ /* Three instances of this task are created - each task uses a different
+ event bit in the synchronization. The event bit to use by this task
+ instance is passed into the task using the task's parameter. Store it in
+ the uxThisTasksSyncBit variable. */
+ uxThisTasksSyncBit = (EventBits_t) pvParameters;
+
+ for (;;)
+ {
+ /* Simulate this task taking some time to perform an action by delaying
+ for a pseudo random time. This prevents all three instances of this
+ task from reaching the synchronization point at the same time, and
+ allows the example's behavior to be observed more easily. */
+ xDelayTime = (prvRand() % xMaxDelay) + xMinDelay;
+ vTaskDelay(xDelayTime);
+
+ /* Print out a message to show this task has reached its synchronization
+ point. pcTaskGetTaskName() is an API function that returns the name
+ assigned to the task when the task was created. */
+ vPrintString(pcTaskGetTaskName(NULL));
+ vPrintString(" reached sync point\n");
+
+ /* Wait for all the tasks to have reached their respective
+ synchronization points. */
+ xEventGroupSync( /* The event group used to synchronize. */
+ xEventGroup,
+
+ /* The bit set by this task to indicate it has reached
+ the synchronization point. */
+ uxThisTasksSyncBit,
+
+ /* The bits to wait for, one bit for each task taking
+ part in the synchronization. */
+ uxAllSyncBits,
+
+ /* Wait indefinitely for all three tasks to reach the
+ synchronization point. */
+ portMAX_DELAY);
+
+ /* Print out a message to show this task has passed its synchronization
+ point. As an indefinite delay was used the following line will only be
+ reached after all the tasks reached their respective synchronization
+ points. */
+ vPrintString(pcTaskGetTaskName(NULL));
+ vPrintString(" exited sync point\n");
+
+ }
}
/*-----------------------------------------------------------*/
-static uint32_t prvRand( void )
+static uint32_t prvRand(void)
{
- const uint32_t ulMultiplier = 0x015a4e35UL, ulIncrement = 1UL;
- uint32_t ulReturn;
-
- /* Utility function to generate a pseudo random number as the MSVC rand()
- function has unexpected consequences. */
- taskENTER_CRITICAL();
- ulNextRand = ( ulMultiplier * ulNextRand ) + ulIncrement;
- ulReturn = ( ulNextRand >> 16UL ) & 0x7fffUL;
- taskEXIT_CRITICAL();
- return ulReturn;
+ const uint32_t ulMultiplier = 0x015a4e35UL, ulIncrement = 1UL;
+ uint32_t ulReturn;
+
+ /* Utility function to generate a pseudo random number as the MSVC rand()
+ function has unexpected consequences. */
+ taskENTER_CRITICAL();
+ ulNextRand = (ulMultiplier * ulNextRand) + ulIncrement;
+ ulReturn = (ulNextRand >> 16UL) & 0x7fffUL;
+ taskEXIT_CRITICAL();
+ return ulReturn;
}
/*-----------------------------------------------------------*/
-static void prvSRand( uint32_t ulSeed )
+static void prvSRand(uint32_t ulSeed)
{
- /* Utility function to seed the pseudo random number generator. */
- ulNextRand = ulSeed;
+ /* Utility function to seed the pseudo random number generator. */
+ ulNextRand = ulSeed;
}
/*-----------------------------------------------------------*/
diff --git a/example/freertos_feature/interrupt/configs/d2000_aarch32_eg_configs b/example/freertos_feature/interrupt/configs/d2000_aarch32_eg_configs
index 464a31af9bb3111d91fad1699c91b41de9317519..a16785ad54af36153e37c6b401b31d847493f42d 100644
--- a/example/freertos_feature/interrupt/configs/d2000_aarch32_eg_configs
+++ b/example/freertos_feature/interrupt/configs/d2000_aarch32_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -111,6 +112,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -147,6 +157,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -168,12 +179,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -185,14 +190,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -210,4 +233,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/interrupt/configs/d2000_aarch64_eg_configs b/example/freertos_feature/interrupt/configs/d2000_aarch64_eg_configs
index 64e6b4b7a6ae1664e07af0d9c84a440dabc972c1..4731ef2f28f88014b15fe54b9662689cee32274f 100644
--- a/example/freertos_feature/interrupt/configs/d2000_aarch64_eg_configs
+++ b/example/freertos_feature/interrupt/configs/d2000_aarch64_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -107,6 +108,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -143,6 +153,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -164,12 +175,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -181,14 +186,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -206,4 +229,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/interrupt/configs/e2000d_aarch32_eg_configs b/example/freertos_feature/interrupt/configs/e2000d_aarch32_eg_configs
index fc31cd0b27be11b5e09995278c509299162fa4e9..22df4f8b68161ebffeeff055523bd84017f6024c 100644
--- a/example/freertos_feature/interrupt/configs/e2000d_aarch32_eg_configs
+++ b/example/freertos_feature/interrupt/configs/e2000d_aarch32_eg_configs
@@ -17,7 +17,7 @@ CONFIG_TARGET_ARMV8_AARCH32=y
# CONFIG_TARGET_ARMV8_AARCH64 is not set
CONFIG_USE_CACHE=y
CONFIG_USE_MMU=y
-# CONFIG_USE_SYS_TICK is not set
+CONFIG_USE_SYS_TICK=y
CONFIG_USE_AARCH64_L1_TO_AARCH32=y
# end of Arch Configuration
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -77,9 +78,9 @@ CONFIG_USE_NEW_LIBC=y
#
# CONFIG_LOG_VERBOS is not set
# CONFIG_LOG_DEBUG is not set
-# CONFIG_LOG_INFO is not set
+CONFIG_LOG_INFO=y
# CONFIG_LOG_WARN is not set
-CONFIG_LOG_ERROR=y
+# CONFIG_LOG_ERROR is not set
# CONFIG_LOG_NONE is not set
CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y
CONFIG_INTERRUPT_ROLE_MASTER=y
@@ -95,7 +96,7 @@ CONFIG_AARCH32_RAM_LD=y
# CONFIG_USER_DEFINED_LD is not set
CONFIG_LINK_SCRIPT_ROM=y
CONFIG_ROM_START_UP_ADDR=0x80100000
-CONFIG_ROM_SIZE_MB=2
+CONFIG_ROM_SIZE_MB=1
CONFIG_LINK_SCRIPT_RAM=y
CONFIG_RAM_START_UP_ADDR=0x81000000
CONFIG_RAM_SIZE_MB=64
@@ -111,6 +112,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -147,6 +157,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -168,12 +179,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -185,14 +190,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -207,7 +230,30 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set
# end of Letter Shell Configuration
-CONFIG_USE_TLSF=y
+# CONFIG_USE_TLSF is not set
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=12
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/interrupt/configs/e2000d_aarch64_eg_configs b/example/freertos_feature/interrupt/configs/e2000d_aarch64_eg_configs
index 7e2efa4fba523e780f910a826b7f13a9552e4bbe..a4715cf0c4cf0610dc98790055909e853688b010 100644
--- a/example/freertos_feature/interrupt/configs/e2000d_aarch64_eg_configs
+++ b/example/freertos_feature/interrupt/configs/e2000d_aarch64_eg_configs
@@ -17,7 +17,7 @@ CONFIG_USE_FREERTOS=y
CONFIG_TARGET_ARMV8_AARCH64=y
CONFIG_USE_CACHE=y
CONFIG_USE_MMU=y
-# CONFIG_USE_SYS_TICK is not set
+CONFIG_USE_SYS_TICK=y
# CONFIG_MMU_DEBUG_PRINTS is not set
# end of Arch Configuration
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -77,9 +78,9 @@ CONFIG_USE_NEW_LIBC=y
#
# CONFIG_LOG_VERBOS is not set
# CONFIG_LOG_DEBUG is not set
-# CONFIG_LOG_INFO is not set
+CONFIG_LOG_INFO=y
# CONFIG_LOG_WARN is not set
-CONFIG_LOG_ERROR=y
+# CONFIG_LOG_ERROR is not set
# CONFIG_LOG_NONE is not set
CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y
CONFIG_INTERRUPT_ROLE_MASTER=y
@@ -95,7 +96,7 @@ CONFIG_AARCH64_RAM_LD=y
# CONFIG_USER_DEFINED_LD is not set
CONFIG_LINK_SCRIPT_ROM=y
CONFIG_ROM_START_UP_ADDR=0x80100000
-CONFIG_ROM_SIZE_MB=2
+CONFIG_ROM_SIZE_MB=1
CONFIG_LINK_SCRIPT_RAM=y
CONFIG_RAM_START_UP_ADDR=0x81000000
CONFIG_RAM_SIZE_MB=64
@@ -107,6 +108,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -143,6 +153,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -164,12 +175,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -181,14 +186,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -203,7 +226,30 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set
# end of Letter Shell Configuration
-CONFIG_USE_TLSF=y
+# CONFIG_USE_TLSF is not set
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=12
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/interrupt/configs/e2000q_aarch32_eg_configs b/example/freertos_feature/interrupt/configs/e2000q_aarch32_eg_configs
index 2fe965a523e72eb1736dfda348ff99451b89d666..a786509e156f1440be7e9837485af11a833f9e5d 100644
--- a/example/freertos_feature/interrupt/configs/e2000q_aarch32_eg_configs
+++ b/example/freertos_feature/interrupt/configs/e2000q_aarch32_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -111,6 +112,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -147,6 +157,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -168,12 +179,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -185,14 +190,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -210,4 +233,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
# CONFIG_USE_TLSF is not set
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/interrupt/configs/e2000q_aarch64_eg_configs b/example/freertos_feature/interrupt/configs/e2000q_aarch64_eg_configs
index 9c50f2b0368b0cb7549298c291755806fc32ae00..9183d77b6ebf704e132f641e17c7fdfd254ec12d 100644
--- a/example/freertos_feature/interrupt/configs/e2000q_aarch64_eg_configs
+++ b/example/freertos_feature/interrupt/configs/e2000q_aarch64_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -107,6 +108,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -143,6 +153,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -164,12 +175,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -181,14 +186,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -206,4 +229,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
# CONFIG_USE_TLSF is not set
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/interrupt/configs/ft2004_aarch32_eg_configs b/example/freertos_feature/interrupt/configs/ft2004_aarch32_eg_configs
index 4c5b2c49d6edae2d8456f3d083606aa9f62a3361..f0510b59527c3bb025d72f8ccca16b539ea7c56c 100644
--- a/example/freertos_feature/interrupt/configs/ft2004_aarch32_eg_configs
+++ b/example/freertos_feature/interrupt/configs/ft2004_aarch32_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -111,6 +112,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -147,6 +157,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -168,12 +179,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -185,14 +190,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -210,4 +233,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/interrupt/configs/ft2004_aarch64_eg_configs b/example/freertos_feature/interrupt/configs/ft2004_aarch64_eg_configs
index da9c1f8182b98ecf314c436f79ccbf0a31c79673..d99e8ace055af1b9260a237f1ce8ba6374d9f8e3 100644
--- a/example/freertos_feature/interrupt/configs/ft2004_aarch64_eg_configs
+++ b/example/freertos_feature/interrupt/configs/ft2004_aarch64_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -107,6 +108,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -143,6 +153,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -164,12 +175,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -181,14 +186,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -206,4 +229,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/interrupt/inc/feature_interrupt.h b/example/freertos_feature/interrupt/inc/feature_interrupt.h
index 5e275bb873f6712896058cc6030dff1452738bb3..a9da368833a82b4a034abdc4be12ff3c4a46c29f 100644
--- a/example/freertos_feature/interrupt/inc/feature_interrupt.h
+++ b/example/freertos_feature/interrupt/inc/feature_interrupt.h
@@ -1,30 +1,36 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: feature_interrupt.h
* Date: 2022-06-17 10:42:40
* LastEditTime: 2022-06-17 10:42:40
- * Description: This file is for
- *
- * Modify History:
+ * Description: This file is for task function define
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2022/08/09 first commit
*/
#ifndef FEATURE_INTERRUPT_H
#define FEATURE_INTERRUPT_H
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
/* interrupt task */
void CreateBinarySemTasks(void);
void DeleteBinarySemTasks(void);
@@ -35,4 +41,8 @@ void DeleteCountSemTasks(void);
void CreateQueueTasks(void);
void DeleteQueueTasks(void);
+#ifdef __cplusplus
+}
+#endif
+
#endif // !
\ No newline at end of file
diff --git a/example/freertos_feature/interrupt/main.c b/example/freertos_feature/interrupt/main.c
index f376d838205fdb1a0ea7cf3bf6d192350dc0ad4f..481070c3c3b588bb2910f649ecb50d9328719c7a 100644
--- a/example/freertos_feature/interrupt/main.c
+++ b/example/freertos_feature/interrupt/main.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: main.c
* Date: 2022-06-17 08:17:59
* LastEditTime: 2022-06-17 08:17:59
- * Description: This file is for
- *
- * Modify History:
+ * Description: This file is for interrupt example that running shell task and open scheduler
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
+ *
*/
#include "shell.h"
@@ -30,13 +31,15 @@ int main(void)
BaseType_t ret;
ret = LSUserShellTask() ;
- if(ret != pdPASS)
+ if (ret != pdPASS)
+ {
goto FAIL_EXIT;
+ }
- vTaskStartScheduler(); /* 启动任务,开启调度 */
+ vTaskStartScheduler(); /* 启动任务,开启调度 */
while (1); /* 正常不会执行到这里 */
-
+
FAIL_EXIT:
- printf("failed 0x%x \r\n", ret);
+ printf("Failed 0x%x. \r\n", ret);
return 0;
}
diff --git a/example/freertos_feature/interrupt/sdkconfig b/example/freertos_feature/interrupt/sdkconfig
index 9c50f2b0368b0cb7549298c291755806fc32ae00..9183d77b6ebf704e132f641e17c7fdfd254ec12d 100644
--- a/example/freertos_feature/interrupt/sdkconfig
+++ b/example/freertos_feature/interrupt/sdkconfig
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -107,6 +108,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -143,6 +153,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -164,12 +175,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -181,14 +186,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -206,4 +229,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
# CONFIG_USE_TLSF is not set
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/interrupt/sdkconfig.h b/example/freertos_feature/interrupt/sdkconfig.h
index 2e55f772e76d53ec6d106cb6e89fa66f67702aa0..80305baca3d75744267bea25bbc372f9e03b7902 100644
--- a/example/freertos_feature/interrupt/sdkconfig.h
+++ b/example/freertos_feature/interrupt/sdkconfig.h
@@ -62,6 +62,7 @@
/* CONFIG_USE_ADC is not set */
/* CONFIG_USE_PWM is not set */
/* CONFIG_USE_IPC is not set */
+/* CONFIG_USE_MEDIA is not set */
/* end of Components Configuration */
#define CONFIG_USE_NEW_LIBC
/* end of Standalone Setting */
@@ -98,6 +99,12 @@
/* Compiler Options */
+/* Cross-Compiler Setting */
+
+#define CONFIG_GCC_OPTIMIZE_LEVEL 0
+/* CONFIG_USE_EXT_COMPILER is not set */
+/* CONFIG_USE_KLIN_SYS is not set */
+/* end of Cross-Compiler Setting */
#define CONFIG_OUTPUT_BINARY
/* end of Compiler Options */
/* end of Building Option */
@@ -127,6 +134,7 @@
/* Freertos Eth Drivers */
/* CONFIG_FREERTOS_USE_XMAC is not set */
+/* CONFIG_FREERTOS_USE_GMAC is not set */
/* end of Freertos Eth Drivers */
/* Freertos Gpio Drivers */
@@ -145,11 +153,6 @@
/* CONFIG_FREERTOS_USE_FGDMA is not set */
/* end of Freertos DMA Drivers */
-/* Freertos MMC Drivers */
-
-/* CONFIG_FREERTOS_USE_FSDIO is not set */
-/* end of Freertos MMC Drivers */
-
/* Freertos Adc Drivers */
/* CONFIG_FREERTOS_USE_ADC is not set */
@@ -159,13 +162,28 @@
/* CONFIG_FREERTOS_USE_CAN is not set */
/* end of Freertos Can Drivers */
+
+/* Freertos I2c Drivers */
+
+/* CONFIG_FREERTOS_USE_I2C is not set */
+/* end of Freertos I2c Drivers */
+
+/* Freertos Mio Drivers */
+
+/* CONFIG_FREERTOS_USE_MIO is not set */
+/* end of Freertos Mio Drivers */
+
+/* Freertos Timer Drivers */
+
+/* CONFIG_FREERTOS_USE_TIMER is not set */
+/* end of Freertos Timer Drivers */
/* end of Component Configuration */
-/* FreeRTOS Setting */
+/* Third-Party Configuration */
/* CONFIG_USE_LWIP is not set */
#define CONFIG_USE_BACKTRACE
-/* CONFIG_USE_FATFS is not set */
+/* CONFIG_USE_FATFS_0_1_4 is not set */
/* CONFIG_USE_SFUD is not set */
/* CONFIG_USE_SPIFFS is not set */
/* CONFIG_USE_AMP is not set */
@@ -181,6 +199,28 @@
/* CONFIG_USE_TLSF is not set */
/* CONFIG_USE_SDMMC_CMD is not set */
/* CONFIG_USE_CHERRY_USB is not set */
-/* end of FreeRTOS Setting */
+/* end of Third-Party Configuration */
+
+/* Kernel Configuration */
+
+#define CONFIG_FREERTOS_OPTIMIZED_SCHEDULER
+#define CONFIG_FREERTOS_HZ 1000
+#define CONFIG_FREERTOS_MAX_PRIORITIES 32
+#define CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES 13
+#define CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES 11
+#define CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS 1
+#define CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE 1024
+#define CONFIG_FREERTOS_MAX_TASK_NAME_LEN 32
+#define CONFIG_FREERTOS_TIMER_TASK_PRIORITY 1
+#define CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH 2048
+#define CONFIG_FREERTOS_TIMER_QUEUE_LENGTH 10
+#define CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE 0
+#define CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS
+#define CONFIG_FREERTOS_USE_TRACE_FACILITY
+#define CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS
+/* CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set */
+#define CONFIG_FREERTOS_TOTAL_HEAP_SIZE 10240
+#define CONFIG_FREERTOS_TASK_FPU_SUPPORT 1
+/* end of Kernel Configuration */
#endif
diff --git a/example/freertos_feature/interrupt/src/binary_semaphore.c b/example/freertos_feature/interrupt/src/binary_semaphore.c
index 6752e0ee3cd0896b979a01e221d4d489c8315fbe..51ba48973755a34c117109cc5c6a38c05b50697e 100644
--- a/example/freertos_feature/interrupt/src/binary_semaphore.c
+++ b/example/freertos_feature/interrupt/src/binary_semaphore.c
@@ -11,12 +11,12 @@
static xTaskHandle xtask1_handle;
static xTaskHandle xtask2_handle;
-#define TASK_STACK_SIZE 1024
+#define TASK_STACK_SIZE 1024
/* The interrupt number to use for the software interrupt generation. This
could be any unused number. In this case the first chip level (non system)
interrupt is used */
-#define INTERRUPT_ID 0
+#define INTERRUPT_ID 0
/* The priority of the software interrupt. The interrupt service routine uses
an (interrupt safe) FreeRTOS API function, so the priority of the interrupt must
@@ -24,7 +24,7 @@ be equal to or lower than the priority set by
configMAX_SYSCALL_INTERRUPT_PRIORITY - remembering that on the Cortex M3 high
numeric values represent low priority values, which can be confusing as it is
counter intuitive. */
-#define INTERRUPT_PRIORITY IRQ_PRIORITY_VALUE_12
+#define INTERRUPT_PRIORITY IRQ_PRIORITY_VALUE_12
/* Macro to force an interrupt. */
static void vTriggerInterrupt(void);
@@ -35,82 +35,82 @@ xSemaphoreHandle xBinarySemaphore;
void vPeriodicTask(void *pvParameters)
{
- for (;;)
- {
- vTaskDelay(5000 / portTICK_RATE_MS);
- printf("Bin Periodic task - Generate an interrupt.\n");
- vTriggerInterrupt();
- }
+ for (;;)
+ {
+ vTaskDelay(5000 / portTICK_RATE_MS);
+ printf("Bin Periodic task - Generate an interrupt.\n");
+ vTriggerInterrupt();
+ }
}
void vSemTakeTask(void *pvParameters)
{
- xSemaphoreTake(xBinarySemaphore, 0);
- for (;;)
- {
- xSemaphoreTake(xBinarySemaphore, portMAX_DELAY);
- printf("Bin Handler task - Processing event.\n");
- }
+ xSemaphoreTake(xBinarySemaphore, 0);
+ for (;;)
+ {
+ xSemaphoreTake(xBinarySemaphore, portMAX_DELAY);
+ printf("Bin Handler task - Processing event.\n");
+ }
}
static void vInterruptHandler(s32 vector, void *param)
{
- portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
-
- xSemaphoreGiveFromISR(xBinarySemaphore, &xHigherPriorityTaskWoken);
+ portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
+
+ xSemaphoreGiveFromISR(xBinarySemaphore, &xHigherPriorityTaskWoken);
- /* never call taskYIELD() form ISR! */
- portEND_SWITCHING_ISR(xHigherPriorityTaskWoken);
+ /* never call taskYIELD() form ISR! */
+ portEND_SWITCHING_ISR(xHigherPriorityTaskWoken);
}
static void prvSetupSoftwareInterrupt()
{
- GetCpuId(&cpu_id);
+ GetCpuId(&cpu_id);
vPrintf("cpu_id is %d \r\n", cpu_id);
- /* The interrupt service routine uses an (interrupt safe) FreeRTOS API
- function so the interrupt priority must be at or below the priority defined
- by configSYSCALL_INTERRUPT_PRIORITY. */
- InterruptSetPriority(INTERRUPT_ID, INTERRUPT_PRIORITY );
+ /* The interrupt service routine uses an (interrupt safe) FreeRTOS API
+ function so the interrupt priority must be at or below the priority defined
+ by configSYSCALL_INTERRUPT_PRIORITY. */
+ InterruptSetPriority(INTERRUPT_ID, INTERRUPT_PRIORITY);
- InterruptInstall(INTERRUPT_ID, vInterruptHandler, NULL, NULL);
+ InterruptInstall(INTERRUPT_ID, vInterruptHandler, NULL, NULL);
- /* Enable the interrupt. */
- InterruptUmask(INTERRUPT_ID );
+ /* Enable the interrupt. */
+ InterruptUmask(INTERRUPT_ID);
}
/* Macro to force an interrupt. */
static void vTriggerInterrupt(void)
{
- InterruptCoreInterSend(INTERRUPT_ID, (1 << cpu_id));
+ InterruptCoreInterSend(INTERRUPT_ID, (1 << cpu_id));
}
void CreateBinarySemTasks(void)
{
- vSemaphoreCreateBinary(xBinarySemaphore);
-
- if (xBinarySemaphore != NULL)
- {
- prvSetupSoftwareInterrupt();
- xTaskCreate(vSemTakeTask, "BinHandler", TASK_STACK_SIZE, NULL, 3, &xtask1_handle);
- xTaskCreate(vPeriodicTask, "BinPeriodic", TASK_STACK_SIZE, NULL, 1, &xtask2_handle);
- }
-
+ vSemaphoreCreateBinary(xBinarySemaphore);
+
+ if (xBinarySemaphore != NULL)
+ {
+ prvSetupSoftwareInterrupt();
+ xTaskCreate(vSemTakeTask, "BinHandler", TASK_STACK_SIZE, NULL, 3, &xtask1_handle);
+ xTaskCreate(vPeriodicTask, "BinPeriodic", TASK_STACK_SIZE, NULL, 1, &xtask2_handle);
+ }
+
}
void DeleteBinarySemTasks(void)
{
- if(xtask1_handle)
+ if (xtask1_handle)
{
vTaskDelete(xtask1_handle);
printf("Bin Handler deletion \r\n");
}
- if(xtask2_handle)
+ if (xtask2_handle)
{
vTaskDelete(xtask2_handle);
printf("Bin Periodic deletion \r\n");
}
-
+
}
\ No newline at end of file
diff --git a/example/freertos_feature/interrupt/src/counting_semaphore.c b/example/freertos_feature/interrupt/src/counting_semaphore.c
index 38a9c61db554a770ab20b5f660fa8a0ebf1135a1..30bf69b16a88fdc29a33eec3c4792d86d4cf9bc0 100644
--- a/example/freertos_feature/interrupt/src/counting_semaphore.c
+++ b/example/freertos_feature/interrupt/src/counting_semaphore.c
@@ -1,4 +1,3 @@
-
#include
#include "FreeRTOSConfig.h"
#include "FreeRTOS.h"
@@ -12,12 +11,12 @@
static xTaskHandle xtask1_handle;
static xTaskHandle xtask2_handle;
-#define TASK_STACK_SIZE 1024
+#define TASK_STACK_SIZE 1024
/* The interrupt number to use for the software interrupt generation. This
could be any unused number. In this case the first chip level (non system)
interrupt is used */
-#define INTERRUPT_ID 0
+#define INTERRUPT_ID 0
/* The priority of the software interrupt. The interrupt service routine uses
an (interrupt safe) FreeRTOS API function, so the priority of the interrupt must
@@ -25,7 +24,7 @@ be equal to or lower than the priority set by
configMAX_SYSCALL_INTERRUPT_PRIORITY - remembering that on the Cortex M3 high
numeric values represent low priority values, which can be confusing as it is
counter intuitive. */
-#define INTERRUPT_PRIORITY IRQ_PRIORITY_VALUE_12
+#define INTERRUPT_PRIORITY IRQ_PRIORITY_VALUE_12
/* Macro to force an interrupt. */
static void vTriggerInterrupt(void);
@@ -36,85 +35,85 @@ xSemaphoreHandle xCountingSemaphore;
static void vPeriodicTask(void *pvParameters)
{
- for (;;)
- {
- vTaskDelay(5000 / portTICK_RATE_MS);
- printf("Count Periodic task - About to generate an interrupt.\n");
- vTriggerInterrupt();
- printf("Count Periodic task - Interrupt generated.\n\n");
+ for (;;)
+ {
+ vTaskDelay(5000 / portTICK_RATE_MS);
+ printf("Count Periodic task - About to generate an interrupt.\n");
+ vTriggerInterrupt();
+ printf("Count Periodic task - Interrupt generated.\n\n");
}
}
static void vSemTakeTask(void *pvParameters)
{
- xSemaphoreTake(xCountingSemaphore, 0);
+ xSemaphoreTake(xCountingSemaphore, 0);
- for (;;)
- {
- xSemaphoreTake(xCountingSemaphore, portMAX_DELAY);
- printf("Count Handler task - Processing event, sem_count: %d\n", uxSemaphoreGetCount(xCountingSemaphore));
- }
+ for (;;)
+ {
+ xSemaphoreTake(xCountingSemaphore, portMAX_DELAY);
+ printf("Count Handler task - Processing event, sem_count: %d\n", uxSemaphoreGetCount(xCountingSemaphore));
+ }
}
-static void vInterruptHandler(s32 vector, void *param)
+static void vInterruptHandler(s32 vector, void *param)
{
- portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
+ portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
- /* simulating multiple interrupts */
- xSemaphoreGiveFromISR(xCountingSemaphore, &xHigherPriorityTaskWoken);
- xSemaphoreGiveFromISR(xCountingSemaphore, &xHigherPriorityTaskWoken);
- xSemaphoreGiveFromISR(xCountingSemaphore, &xHigherPriorityTaskWoken);
+ /* simulating multiple interrupts */
+ xSemaphoreGiveFromISR(xCountingSemaphore, &xHigherPriorityTaskWoken);
+ xSemaphoreGiveFromISR(xCountingSemaphore, &xHigherPriorityTaskWoken);
+ xSemaphoreGiveFromISR(xCountingSemaphore, &xHigherPriorityTaskWoken);
- /* never call taskYIELD() form ISR! */
- portEND_SWITCHING_ISR(xHigherPriorityTaskWoken);
+ /* never call taskYIELD() form ISR! */
+ portEND_SWITCHING_ISR(xHigherPriorityTaskWoken);
}
static void prvSetupSoftwareInterrupt(void)
{
- GetCpuId(&cpu_id);
+ GetCpuId(&cpu_id);
vPrintf("cpu_id is %d \r\n", cpu_id);
-
- InterruptSetPriority(INTERRUPT_ID, INTERRUPT_PRIORITY );
- InterruptInstall(INTERRUPT_ID, vInterruptHandler, NULL, NULL);
+ InterruptSetPriority(INTERRUPT_ID, INTERRUPT_PRIORITY);
- /* Enable the interrupt. */
- InterruptUmask( INTERRUPT_ID );
+ InterruptInstall(INTERRUPT_ID, vInterruptHandler, NULL, NULL);
+
+ /* Enable the interrupt. */
+ InterruptUmask(INTERRUPT_ID);
}
/* Macro to force an interrupt. */
static void vTriggerInterrupt(void)
{
- InterruptCoreInterSend(INTERRUPT_ID, (1 << cpu_id));
+ InterruptCoreInterSend(INTERRUPT_ID, (1 << cpu_id));
}
void CreateCountSemTasks(void)
{
- xCountingSemaphore = xSemaphoreCreateCounting(10, 0);
+ xCountingSemaphore = xSemaphoreCreateCounting(10, 0);
- if (xCountingSemaphore != NULL)
- {
- prvSetupSoftwareInterrupt();
+ if (xCountingSemaphore != NULL)
+ {
+ prvSetupSoftwareInterrupt();
- xTaskCreate(vSemTakeTask, "CountHandler", TASK_STACK_SIZE, NULL, 3, &xtask1_handle);
- xTaskCreate(vPeriodicTask, "CountPeriodic", TASK_STACK_SIZE, NULL, 1, &xtask2_handle);
- }
+ xTaskCreate(vSemTakeTask, "CountHandler", TASK_STACK_SIZE, NULL, 3, &xtask1_handle);
+ xTaskCreate(vPeriodicTask, "CountPeriodic", TASK_STACK_SIZE, NULL, 1, &xtask2_handle);
+ }
}
void DeleteCountSemTasks(void)
{
- if(xtask1_handle)
+ if (xtask1_handle)
{
vTaskDelete(xtask1_handle);
printf("Count Handler deletion \r\n");
}
- if(xtask2_handle)
+ if (xtask2_handle)
{
vTaskDelete(xtask2_handle);
printf("Count Periodic deletion \r\n");
}
-
+
}
diff --git a/example/freertos_feature/interrupt/src/interrupt_cmd.c b/example/freertos_feature/interrupt/src/interrupt_cmd.c
index 8916b292256bf279d3434e85f9a67c4269604da1..3eef59acbf0b402eee5769097c01876de1853d16 100644
--- a/example/freertos_feature/interrupt/src/interrupt_cmd.c
+++ b/example/freertos_feature/interrupt/src/interrupt_cmd.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: interrupt_cmd.c
* Date: 2022-06-17 10:41:45
* LastEditTime: 2022-06-17 10:41:45
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
+ * Description: This file is for interrupt command interface
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2022/08/09 first commit
*/
#include "shell.h"
#include
@@ -35,19 +36,19 @@ typedef enum
static void CreateIntrCmdUsage(void)
{
- printf("usage:\r\n");
+ printf("Usage:\r\n");
printf(" intr bin_cre \r\n");
- printf(" -- create intr binary sem tasks now\r\n");
+ printf(" -- Create intr binary sem tasks now.\r\n");
printf(" intr bin_del \r\n");
- printf(" -- del intr binary sem tasks now\r\n");
+ printf(" -- Del intr binary sem tasks now.\r\n");
printf(" intr count_cre \r\n");
- printf(" -- create counting sem tasks now\r\n");
+ printf(" -- Create counting sem tasks now.\r\n");
printf(" intr count_del \r\n");
- printf(" -- del counting sem tasks now\r\n");
+ printf(" -- Del counting sem tasks now.\r\n");
printf(" intr queue_cre \r\n");
- printf(" -- create queue tasks now\r\n");
+ printf(" -- Create queue tasks now.\r\n");
printf(" intr queue_del \r\n");
- printf(" -- del queue tasks now\r\n");
+ printf(" -- Del queue tasks now.\r\n");
}
int CreateIntrCmd(int argc, char *argv[])
@@ -62,79 +63,79 @@ int CreateIntrCmd(int argc, char *argv[])
if (!strcmp(argv[1], "bin_cre"))
{
- if(create_flg[BINARY_SEM_TASK_INDEX] == 0)
+ if (create_flg[BINARY_SEM_TASK_INDEX] == 0)
{
CreateBinarySemTasks();
create_flg[BINARY_SEM_TASK_INDEX] = 1;
}
else
{
- printf("Please use bin_del cmd first \r\n");
+ printf("Please use bin_del cmd first. \r\n");
}
}
else if (!strcmp(argv[1], "bin_del"))
{
- if(create_flg[BINARY_SEM_TASK_INDEX] == 1)
+ if (create_flg[BINARY_SEM_TASK_INDEX] == 1)
{
DeleteBinarySemTasks();
create_flg[BINARY_SEM_TASK_INDEX] = 0;
- }
+ }
else
{
- printf("Please use bin_cre cmd first \r\n");
+ printf("Please use bin_cre cmd first. \r\n");
}
}
else if (!strcmp(argv[1], "count_cre"))
{
- if(create_flg[COUNT_SEM_TASK_INDEX] == 0)
+ if (create_flg[COUNT_SEM_TASK_INDEX] == 0)
{
CreateCountSemTasks();
create_flg[COUNT_SEM_TASK_INDEX] = 1;
}
else
{
- printf("Please use count_del cmd first \r\n");
+ printf("Please use count_del cmd first. \r\n");
}
}
else if (!strcmp(argv[1], "count_del"))
{
- if(create_flg[COUNT_SEM_TASK_INDEX] == 1)
+ if (create_flg[COUNT_SEM_TASK_INDEX] == 1)
{
DeleteCountSemTasks();
create_flg[COUNT_SEM_TASK_INDEX] = 0;
- }
+ }
else
{
- printf("Please use count_cre cmd first \r\n");
+ printf("Please use count_cre cmd first. \r\n");
}
}
else if (!strcmp(argv[1], "queue_cre"))
{
- if(create_flg[QUEUE_TASK_INDEX] == 0)
+ if (create_flg[QUEUE_TASK_INDEX] == 0)
{
CreateQueueTasks();
create_flg[QUEUE_TASK_INDEX] = 1;
}
else
{
- printf("Please use queue_del cmd first \r\n");
+ printf("Please use queue_del cmd first. \r\n");
}
}
else if (!strcmp(argv[1], "queue_del"))
{
- if(create_flg[QUEUE_TASK_INDEX] == 1)
+ if (create_flg[QUEUE_TASK_INDEX] == 1)
{
DeleteQueueTasks();
create_flg[QUEUE_TASK_INDEX] = 0;
- }
+ }
else
{
- printf("Please use queue_cre cmd first \r\n");
+ printf("Please use queue_cre cmd first. \r\n");
}
}
else
{
- printf("Error: Invalid arguments \r\n");
+ printf("Error: Invalid arguments. \r\n");
CreateIntrCmdUsage();
}
return 0;
diff --git a/example/freertos_feature/interrupt/src/queue_from_interrupt.c b/example/freertos_feature/interrupt/src/queue_from_interrupt.c
index c504a690f94d59443a12d825a543c4bdfde1f775..079f48f12c4aa34ff057074fb4aabae0def67dd8 100644
--- a/example/freertos_feature/interrupt/src/queue_from_interrupt.c
+++ b/example/freertos_feature/interrupt/src/queue_from_interrupt.c
@@ -11,12 +11,12 @@
static xTaskHandle xtask1_handle;
static xTaskHandle xtask2_handle;
-#define TASK_STACK_SIZE 1024
+#define TASK_STACK_SIZE 1024
/* The interrupt number to use for the software interrupt generation. This
could be any unused number. In this case the first chip level (non system)
interrupt is used */
-#define INTERRUPT_ID 0
+#define INTERRUPT_ID 0
/* The priority of the software interrupt. The interrupt service routine uses
an (interrupt safe) FreeRTOS API function, so the priority of the interrupt must
@@ -24,7 +24,7 @@ be equal to or lower than the priority set by
configMAX_SYSCALL_INTERRUPT_PRIORITY - remembering that on the Cortex M3 high
numeric values represent low priority values, which can be confusing as it is
counter intuitive. */
-#define INTERRUPT_PRIORITY IRQ_PRIORITY_VALUE_12
+#define INTERRUPT_PRIORITY IRQ_PRIORITY_VALUE_12
/* Macro to force an interrupt. */
static void vTriggerInterrupt(void);
@@ -36,106 +36,106 @@ static xQueueHandle xStringQueue;
static void vIntegerGenerator(void *pvParameters)
{
- portTickType xLastExecutionTime;
- unsigned long ulValueToSend = 0;
- int i;
+ portTickType xLastExecutionTime;
+ unsigned long ulValueToSend = 0;
+ int i;
- xLastExecutionTime = xTaskGetTickCount();
+ xLastExecutionTime = xTaskGetTickCount();
- for (;;)
- {
- vTaskDelayUntil(&xLastExecutionTime, 5000 / portTICK_RATE_MS);
+ for (;;)
+ {
+ vTaskDelayUntil(&xLastExecutionTime, 5000 / portTICK_RATE_MS);
- for (i = 0; i < 5; ++i)
- {
- xQueueSendToBack(xIntegerQueue, &ulValueToSend, 0);
- ++ulValueToSend;
- }
+ for (i = 0; i < 5; ++i)
+ {
+ xQueueSendToBack(xIntegerQueue, &ulValueToSend, 0);
+ ++ulValueToSend;
+ }
- vPrintf("Queue Periodic task - About to generate an interrupt.\n");
- vTriggerInterrupt();
- vPrintf("Queue Periodic task - Interrupt generated.\n\n");
+ vPrintf("Queue Periodic task - About to generate an interrupt.\n");
+ vTriggerInterrupt();
+ vPrintf("Queue Periodic task - Interrupt generated.\n\n");
}
}
-static void vInterruptHandler(s32 vector, void *param)
+static void vInterruptHandler(s32 vector, void *param)
{
- portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
- static unsigned long ulReceivedNumber;
-
- static const char* pcStrings[] =
- {
- "String 0\n",
- "String 1\n",
- "String 2\n",
- "String 3\n"
- };
-
- while (xQueueReceiveFromISR(xIntegerQueue, &ulReceivedNumber,
- &xHigherPriorityTaskWoken) != errQUEUE_EMPTY)
- {
-
- // last 2 bits: values 0-3
- ulReceivedNumber &= 0x03;
- xQueueSendToBackFromISR(xStringQueue, &pcStrings[ulReceivedNumber],
- &xHigherPriorityTaskWoken);
- }
-
- // never call taskYIELD() form ISR!
- portEND_SWITCHING_ISR(xHigherPriorityTaskWoken);
+ portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
+ static unsigned long ulReceivedNumber;
+
+ static const char *pcStrings[] =
+ {
+ "String 0\n",
+ "String 1\n",
+ "String 2\n",
+ "String 3\n"
+ };
+
+ while (xQueueReceiveFromISR(xIntegerQueue, &ulReceivedNumber,
+ &xHigherPriorityTaskWoken) != errQUEUE_EMPTY)
+ {
+
+ // last 2 bits: values 0-3
+ ulReceivedNumber &= 0x03;
+ xQueueSendToBackFromISR(xStringQueue, &pcStrings[ulReceivedNumber],
+ &xHigherPriorityTaskWoken);
+ }
+
+ // never call taskYIELD() form ISR!
+ portEND_SWITCHING_ISR(xHigherPriorityTaskWoken);
}
-static void vStringPrinter(void * pvParameters)
+static void vStringPrinter(void *pvParameters)
{
- char *pcString;
+ char *pcString;
- for (;;)
- {
- xQueueReceive(xStringQueue, &pcString, portMAX_DELAY);
- vPrintf("pcString = %s\n", pcString);
- }
+ for (;;)
+ {
+ xQueueReceive(xStringQueue, &pcString, portMAX_DELAY);
+ vPrintf("pcString = %s\n", pcString);
+ }
}
static void prvSetupSoftwareInterrupt(void)
{
- GetCpuId(&cpu_id);
+ GetCpuId(&cpu_id);
vPrintf("cpu_id is %d \r\n", cpu_id);
-
- InterruptSetPriority(INTERRUPT_ID, INTERRUPT_PRIORITY );
- InterruptInstall(INTERRUPT_ID, vInterruptHandler, NULL, NULL);
+ InterruptSetPriority(INTERRUPT_ID, INTERRUPT_PRIORITY);
+
+ InterruptInstall(INTERRUPT_ID, vInterruptHandler, NULL, NULL);
- /* Enable the interrupt. */
- InterruptUmask( INTERRUPT_ID );
+ /* Enable the interrupt. */
+ InterruptUmask(INTERRUPT_ID);
}
/* Macro to force an interrupt. */
static void vTriggerInterrupt(void)
{
- InterruptCoreInterSend(INTERRUPT_ID, (1 << cpu_id));
+ InterruptCoreInterSend(INTERRUPT_ID, (1 << cpu_id));
}
void CreateQueueTasks(void)
{
- xIntegerQueue = xQueueCreate(10, sizeof(unsigned long));
- xStringQueue = xQueueCreate(10, sizeof(char*));
+ xIntegerQueue = xQueueCreate(10, sizeof(unsigned long));
+ xStringQueue = xQueueCreate(10, sizeof(char *));
- prvSetupSoftwareInterrupt();
+ prvSetupSoftwareInterrupt();
- xTaskCreate(vIntegerGenerator, "QueueIntGen", TASK_STACK_SIZE, NULL, 1, &xtask1_handle);
- xTaskCreate(vStringPrinter, "QueueString", TASK_STACK_SIZE, NULL, 2, &xtask2_handle);
+ xTaskCreate(vIntegerGenerator, "QueueIntGen", TASK_STACK_SIZE, NULL, 1, &xtask1_handle);
+ xTaskCreate(vStringPrinter, "QueueString", TASK_STACK_SIZE, NULL, 2, &xtask2_handle);
}
void DeleteQueueTasks(void)
{
- if(xtask1_handle)
+ if (xtask1_handle)
{
vTaskDelete(xtask1_handle);
printf("Queue IntGen deletion \r\n");
}
- if(xtask2_handle)
+ if (xtask2_handle)
{
vTaskDelete(xtask2_handle);
printf("Queue String deletion \r\n");
diff --git a/example/freertos_feature/queue/README.md b/example/freertos_feature/queue/README.md
index ecbfe7c2c84bb5e0eb79ea68836b5d9c98a15966..318ce632cefde4aedca46e7c1c42a1eeb07956c7 100644
--- a/example/freertos_feature/queue/README.md
+++ b/example/freertos_feature/queue/README.md
@@ -133,12 +133,12 @@ bootelf -p 0x90100000
- 输入```queue struct_cre```,启动queue的struct类型数据的收发任务测试
- 输入```queue struct_del```,删除queue的struct类型数据的收发任务测试
-
+
- 输入```queue set_cre```,启动queue的set函数使用,收发任务测试
- 输入```queue set_del```,删除queue的set函数使用,收发任务测试
-
+
- 测试任务能够能正常创建和删除,输入```ps```查看任务状态正常,即测试正常
diff --git a/example/freertos_feature/queue/configs/d2000_aarch32_eg_configs b/example/freertos_feature/queue/configs/d2000_aarch32_eg_configs
index 464a31af9bb3111d91fad1699c91b41de9317519..a16785ad54af36153e37c6b401b31d847493f42d 100644
--- a/example/freertos_feature/queue/configs/d2000_aarch32_eg_configs
+++ b/example/freertos_feature/queue/configs/d2000_aarch32_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -111,6 +112,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -147,6 +157,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -168,12 +179,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -185,14 +190,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -210,4 +233,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/queue/configs/d2000_aarch64_eg_configs b/example/freertos_feature/queue/configs/d2000_aarch64_eg_configs
index 64e6b4b7a6ae1664e07af0d9c84a440dabc972c1..4731ef2f28f88014b15fe54b9662689cee32274f 100644
--- a/example/freertos_feature/queue/configs/d2000_aarch64_eg_configs
+++ b/example/freertos_feature/queue/configs/d2000_aarch64_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -107,6 +108,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -143,6 +153,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -164,12 +175,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -181,14 +186,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -206,4 +229,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/queue/configs/e2000d_aarch32_eg_configs b/example/freertos_feature/queue/configs/e2000d_aarch32_eg_configs
index fc31cd0b27be11b5e09995278c509299162fa4e9..229022705bc103e6f867abfbce05526a6d480085 100644
--- a/example/freertos_feature/queue/configs/e2000d_aarch32_eg_configs
+++ b/example/freertos_feature/queue/configs/e2000d_aarch32_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -111,6 +112,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -147,6 +157,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -168,12 +179,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -185,14 +190,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -210,4 +233,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/queue/configs/e2000d_aarch64_eg_configs b/example/freertos_feature/queue/configs/e2000d_aarch64_eg_configs
index 7e2efa4fba523e780f910a826b7f13a9552e4bbe..f3181d358e9c6ec7c5452447c06782bac1a30a91 100644
--- a/example/freertos_feature/queue/configs/e2000d_aarch64_eg_configs
+++ b/example/freertos_feature/queue/configs/e2000d_aarch64_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -107,6 +108,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -143,6 +153,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -164,12 +175,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -181,14 +186,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -206,4 +229,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/queue/configs/e2000q_aarch32_eg_configs b/example/freertos_feature/queue/configs/e2000q_aarch32_eg_configs
index 2fe965a523e72eb1736dfda348ff99451b89d666..a786509e156f1440be7e9837485af11a833f9e5d 100644
--- a/example/freertos_feature/queue/configs/e2000q_aarch32_eg_configs
+++ b/example/freertos_feature/queue/configs/e2000q_aarch32_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -111,6 +112,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -147,6 +157,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -168,12 +179,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -185,14 +190,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -210,4 +233,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
# CONFIG_USE_TLSF is not set
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/queue/configs/e2000q_aarch64_eg_configs b/example/freertos_feature/queue/configs/e2000q_aarch64_eg_configs
index 9c50f2b0368b0cb7549298c291755806fc32ae00..9183d77b6ebf704e132f641e17c7fdfd254ec12d 100644
--- a/example/freertos_feature/queue/configs/e2000q_aarch64_eg_configs
+++ b/example/freertos_feature/queue/configs/e2000q_aarch64_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -107,6 +108,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -143,6 +153,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -164,12 +175,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -181,14 +186,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -206,4 +229,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
# CONFIG_USE_TLSF is not set
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/queue/configs/ft2004_aarch32_eg_configs b/example/freertos_feature/queue/configs/ft2004_aarch32_eg_configs
index 4c5b2c49d6edae2d8456f3d083606aa9f62a3361..f0510b59527c3bb025d72f8ccca16b539ea7c56c 100644
--- a/example/freertos_feature/queue/configs/ft2004_aarch32_eg_configs
+++ b/example/freertos_feature/queue/configs/ft2004_aarch32_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -111,6 +112,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -147,6 +157,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -168,12 +179,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -185,14 +190,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -210,4 +233,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/queue/configs/ft2004_aarch64_eg_configs b/example/freertos_feature/queue/configs/ft2004_aarch64_eg_configs
index da9c1f8182b98ecf314c436f79ccbf0a31c79673..d99e8ace055af1b9260a237f1ce8ba6374d9f8e3 100644
--- a/example/freertos_feature/queue/configs/ft2004_aarch64_eg_configs
+++ b/example/freertos_feature/queue/configs/ft2004_aarch64_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -107,6 +108,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -143,6 +153,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -164,12 +175,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -181,14 +186,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -206,4 +229,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/queue/inc/feature_queue.h b/example/freertos_feature/queue/inc/feature_queue.h
index 378f9cca44750397a2744201c498f3fca1d7b5f8..7eb5872ccf487abf08f3d54d3ad7e380cd4c670d 100644
--- a/example/freertos_feature/queue/inc/feature_queue.h
+++ b/example/freertos_feature/queue/inc/feature_queue.h
@@ -1,30 +1,36 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: feature_queue.h
* Date: 2022-06-17 10:42:40
* LastEditTime: 2022-06-17 10:42:40
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
+ * Description: This file is for task function define
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2022/08/09 first commit
*/
#ifndef FEATURE_QUEUE_H
#define FEATURE_QUEUE_H
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
/* queue task */
void CreateIntTasks(void);
void DeleteIntTasks(void);
@@ -35,4 +41,8 @@ void DeleteStructTasks(void);
void CreateQueueSetTasks(void);
void DeleteQueueSetTasks(void);
+#ifdef __cplusplus
+}
+#endif
+
#endif // !
\ No newline at end of file
diff --git a/example/freertos_feature/queue/main.c b/example/freertos_feature/queue/main.c
index f376d838205fdb1a0ea7cf3bf6d192350dc0ad4f..7e219b2eae3ee415a34d3c9fb22d95b286820e60 100644
--- a/example/freertos_feature/queue/main.c
+++ b/example/freertos_feature/queue/main.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: main.c
* Date: 2022-06-17 08:17:59
* LastEditTime: 2022-06-17 08:17:59
- * Description: This file is for
- *
- * Modify History:
+ * Description: This file is for queue example that running shell task and open scheduler
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2022/06/20 first commit
*/
#include "shell.h"
@@ -30,13 +31,15 @@ int main(void)
BaseType_t ret;
ret = LSUserShellTask() ;
- if(ret != pdPASS)
+ if (ret != pdPASS)
+ {
goto FAIL_EXIT;
+ }
- vTaskStartScheduler(); /* 启动任务,开启调度 */
+ vTaskStartScheduler(); /* 启动任务,开启调度 */
while (1); /* 正常不会执行到这里 */
-
+
FAIL_EXIT:
- printf("failed 0x%x \r\n", ret);
+ printf("Failed 0x%x. \r\n", ret);
return 0;
}
diff --git a/example/freertos_feature/queue/sdkconfig b/example/freertos_feature/queue/sdkconfig
index 9c50f2b0368b0cb7549298c291755806fc32ae00..9183d77b6ebf704e132f641e17c7fdfd254ec12d 100644
--- a/example/freertos_feature/queue/sdkconfig
+++ b/example/freertos_feature/queue/sdkconfig
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -107,6 +108,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -143,6 +153,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -164,12 +175,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -181,14 +186,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -206,4 +229,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
# CONFIG_USE_TLSF is not set
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/queue/sdkconfig.h b/example/freertos_feature/queue/sdkconfig.h
index 2e55f772e76d53ec6d106cb6e89fa66f67702aa0..80305baca3d75744267bea25bbc372f9e03b7902 100644
--- a/example/freertos_feature/queue/sdkconfig.h
+++ b/example/freertos_feature/queue/sdkconfig.h
@@ -62,6 +62,7 @@
/* CONFIG_USE_ADC is not set */
/* CONFIG_USE_PWM is not set */
/* CONFIG_USE_IPC is not set */
+/* CONFIG_USE_MEDIA is not set */
/* end of Components Configuration */
#define CONFIG_USE_NEW_LIBC
/* end of Standalone Setting */
@@ -98,6 +99,12 @@
/* Compiler Options */
+/* Cross-Compiler Setting */
+
+#define CONFIG_GCC_OPTIMIZE_LEVEL 0
+/* CONFIG_USE_EXT_COMPILER is not set */
+/* CONFIG_USE_KLIN_SYS is not set */
+/* end of Cross-Compiler Setting */
#define CONFIG_OUTPUT_BINARY
/* end of Compiler Options */
/* end of Building Option */
@@ -127,6 +134,7 @@
/* Freertos Eth Drivers */
/* CONFIG_FREERTOS_USE_XMAC is not set */
+/* CONFIG_FREERTOS_USE_GMAC is not set */
/* end of Freertos Eth Drivers */
/* Freertos Gpio Drivers */
@@ -145,11 +153,6 @@
/* CONFIG_FREERTOS_USE_FGDMA is not set */
/* end of Freertos DMA Drivers */
-/* Freertos MMC Drivers */
-
-/* CONFIG_FREERTOS_USE_FSDIO is not set */
-/* end of Freertos MMC Drivers */
-
/* Freertos Adc Drivers */
/* CONFIG_FREERTOS_USE_ADC is not set */
@@ -159,13 +162,28 @@
/* CONFIG_FREERTOS_USE_CAN is not set */
/* end of Freertos Can Drivers */
+
+/* Freertos I2c Drivers */
+
+/* CONFIG_FREERTOS_USE_I2C is not set */
+/* end of Freertos I2c Drivers */
+
+/* Freertos Mio Drivers */
+
+/* CONFIG_FREERTOS_USE_MIO is not set */
+/* end of Freertos Mio Drivers */
+
+/* Freertos Timer Drivers */
+
+/* CONFIG_FREERTOS_USE_TIMER is not set */
+/* end of Freertos Timer Drivers */
/* end of Component Configuration */
-/* FreeRTOS Setting */
+/* Third-Party Configuration */
/* CONFIG_USE_LWIP is not set */
#define CONFIG_USE_BACKTRACE
-/* CONFIG_USE_FATFS is not set */
+/* CONFIG_USE_FATFS_0_1_4 is not set */
/* CONFIG_USE_SFUD is not set */
/* CONFIG_USE_SPIFFS is not set */
/* CONFIG_USE_AMP is not set */
@@ -181,6 +199,28 @@
/* CONFIG_USE_TLSF is not set */
/* CONFIG_USE_SDMMC_CMD is not set */
/* CONFIG_USE_CHERRY_USB is not set */
-/* end of FreeRTOS Setting */
+/* end of Third-Party Configuration */
+
+/* Kernel Configuration */
+
+#define CONFIG_FREERTOS_OPTIMIZED_SCHEDULER
+#define CONFIG_FREERTOS_HZ 1000
+#define CONFIG_FREERTOS_MAX_PRIORITIES 32
+#define CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES 13
+#define CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES 11
+#define CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS 1
+#define CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE 1024
+#define CONFIG_FREERTOS_MAX_TASK_NAME_LEN 32
+#define CONFIG_FREERTOS_TIMER_TASK_PRIORITY 1
+#define CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH 2048
+#define CONFIG_FREERTOS_TIMER_QUEUE_LENGTH 10
+#define CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE 0
+#define CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS
+#define CONFIG_FREERTOS_USE_TRACE_FACILITY
+#define CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS
+/* CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set */
+#define CONFIG_FREERTOS_TOTAL_HEAP_SIZE 10240
+#define CONFIG_FREERTOS_TASK_FPU_SUPPORT 1
+/* end of Kernel Configuration */
#endif
diff --git a/example/freertos_feature/queue/src/queue_cmd.c b/example/freertos_feature/queue/src/queue_cmd.c
index c796edcdab834c12aa57301dbbcf2c0c2c3da1bc..e94725325f6565d6241affbd91ec805d49efb3ff 100644
--- a/example/freertos_feature/queue/src/queue_cmd.c
+++ b/example/freertos_feature/queue/src/queue_cmd.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: queue_cmd.c
* Date: 2022-06-17 10:41:45
* LastEditTime: 2022-06-17 10:41:45
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
+ * Description: This file is for queue command interface
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2022/08/09 first commit
*/
#include "shell.h"
#include
@@ -35,19 +36,19 @@ typedef enum
static void CreateQueueCmdUsage(void)
{
- printf("usage:\r\n");
+ printf("Usage:\r\n");
printf(" queue int_cre \r\n");
- printf(" -- create int queue send and receive tasks now\r\n");
+ printf(" -- Create int queue send and receive tasks now.\r\n");
printf(" queue int_del \r\n");
- printf(" -- del int queue send and receive tasks now\r\n");
+ printf(" -- Del int queue send and receive tasks now.\r\n");
printf(" queue struct_cre \r\n");
- printf(" -- create struct queue send and receive tasks now\r\n");
+ printf(" -- Create struct queue send and receive tasks now.\r\n");
printf(" queue struct_del \r\n");
- printf(" -- del struct queue send and receive tasks now\r\n");
+ printf(" -- Cel struct queue send and receive tasks now.\r\n");
printf(" queue set_cre \r\n");
- printf(" -- use queue set function, create send and receive tasks now\r\n");
+ printf(" -- Use queue set function, create send and receive tasks now.\r\n");
printf(" queue set_del \r\n");
- printf(" -- del queue set, send and receive tasks now\r\n");
+ printf(" -- Del queue set, send and receive tasks now.\r\n");
}
int CreateQueueCmd(int argc, char *argv[])
@@ -62,79 +63,79 @@ int CreateQueueCmd(int argc, char *argv[])
if (!strcmp(argv[1], "int_cre"))
{
- if(create_flg[INT_TASK_INDEX] == 0)
+ if (create_flg[INT_TASK_INDEX] == 0)
{
CreateIntTasks();
create_flg[INT_TASK_INDEX] = 1;
}
else
{
- printf("Please use int_del cmd first \r\n");
+ printf("Please use int_del cmd first. \r\n");
}
}
else if (!strcmp(argv[1], "int_del"))
{
- if(create_flg[INT_TASK_INDEX] == 1)
+ if (create_flg[INT_TASK_INDEX] == 1)
{
DeleteIntTasks();
create_flg[INT_TASK_INDEX] = 0;
- }
+ }
else
{
- printf("Please use int_cre cmd first \r\n");
+ printf("Please use int_cre cmd first. \r\n");
}
}
else if (!strcmp(argv[1], "struct_cre"))
{
- if(create_flg[STRUCT_TASK_INDEX] == 0)
+ if (create_flg[STRUCT_TASK_INDEX] == 0)
{
CreateStructTasks();
create_flg[STRUCT_TASK_INDEX] = 1;
}
else
{
- printf("Please use struct_del cmd first \r\n");
+ printf("Please use struct_del cmd first. \r\n");
}
}
else if (!strcmp(argv[1], "struct_del"))
{
- if(create_flg[STRUCT_TASK_INDEX] == 1)
+ if (create_flg[STRUCT_TASK_INDEX] == 1)
{
DeleteStructTasks();
create_flg[STRUCT_TASK_INDEX] = 0;
- }
+ }
else
{
- printf("Please use struct_cre cmd first \r\n");
+ printf("Please use struct_cre cmd first. \r\n");
}
}
else if (!strcmp(argv[1], "set_cre"))
{
- if(create_flg[SET_TASK_INDEX] == 0)
+ if (create_flg[SET_TASK_INDEX] == 0)
{
CreateQueueSetTasks();
create_flg[SET_TASK_INDEX] = 1;
}
else
{
- printf("Please use set_del cmd first \r\n");
+ printf("Please use set_del cmd first. \r\n");
}
}
else if (!strcmp(argv[1], "set_del"))
{
- if(create_flg[SET_TASK_INDEX] == 1)
+ if (create_flg[SET_TASK_INDEX] == 1)
{
DeleteQueueSetTasks();
create_flg[SET_TASK_INDEX] = 0;
- }
+ }
else
{
- printf("Please use set_cre cmd first \r\n");
+ printf("Please use set_cre cmd first. \r\n");
}
}
else
{
- printf("Error: Invalid arguments \r\n");
+ printf("Error: Invalid arguments. \r\n");
CreateQueueCmdUsage();
}
return 0;
diff --git a/example/freertos_feature/queue/src/queue_int_send_recv.c b/example/freertos_feature/queue/src/queue_int_send_recv.c
index a4d19569b59245bf9222abe567c394bec00958c9..a51206b7a34fa63a3ff7e2621dc345477bcc4800 100644
--- a/example/freertos_feature/queue/src/queue_int_send_recv.c
+++ b/example/freertos_feature/queue/src/queue_int_send_recv.c
@@ -1,7 +1,7 @@
/*
-This example demonstrates a queue being created, data being sent to the queue from multiple
-tasks, and data being received from the queue. The queue is created to hold data items of
-type int. The tasks that send to the queue do not specify a block time, whereas the task
+This example demonstrates a queue being created, data being sent to the queue from multiple
+tasks, and data being received from the queue. The queue is created to hold data items of
+type int. The tasks that send to the queue do not specify a block time, whereas the task
that receives from the queue does.
*/
#include "FreeRTOSConfig.h"
@@ -9,7 +9,7 @@ that receives from the queue does.
#include "task.h"
#include "queue.h"
-#define TASK_STACK_SIZE 2048
+#define TASK_STACK_SIZE 2048
static xTaskHandle xtask1_handle;
static xTaskHandle xtask2_handle;
@@ -17,8 +17,8 @@ static xTaskHandle xtask3_handle;
/* The tasks to be created. Two instances are created of the sender task while
only a single instance is created of the receiver task. */
-static void vSenderTask( void *pvParameters );
-static void vReceiverTask( void *pvParameters );
+static void vSenderTask(void *pvParameters);
+static void vReceiverTask(void *pvParameters);
/*-----------------------------------------------------------*/
@@ -29,45 +29,45 @@ static QueueHandle_t xQueue;
void CreateIntTasks(void)
{
/* The queue is created to hold a maximum of 5 int values. */
- xQueue = xQueueCreate( 5, sizeof( int ) );
-
- if( xQueue != NULL )
- {
- /* Create two instances of the task that will write to the queue. The
- parameter is used to pass the value that the task should write to the queue,
- so one task will continuously write 100 to the queue while the other task
- will continuously write 200 to the queue. Both tasks are created at
- priority 1. */
- xTaskCreate( vSenderTask, "Queue Sender1", TASK_STACK_SIZE, ( void * ) 100, 2, &xtask1_handle );
- xTaskCreate( vSenderTask, "Queue Sender2", TASK_STACK_SIZE, ( void * ) 200, 2, &xtask2_handle );
-
- /* Create the task that will read from the queue. The task is created with
- priority 2, so above the priority of the sender tasks. */
- xTaskCreate( vReceiverTask, "Queue Receiver", TASK_STACK_SIZE, NULL, 3, &xtask3_handle );
-
- }
- else
- {
- /* The queue could not be created. */
- }
+ xQueue = xQueueCreate(5, sizeof(int));
+
+ if (xQueue != NULL)
+ {
+ /* Create two instances of the task that will write to the queue. The
+ parameter is used to pass the value that the task should write to the queue,
+ so one task will continuously write 100 to the queue while the other task
+ will continuously write 200 to the queue. Both tasks are created at
+ priority 1. */
+ xTaskCreate(vSenderTask, "Queue Sender1", TASK_STACK_SIZE, (void *) 100, 2, &xtask1_handle);
+ xTaskCreate(vSenderTask, "Queue Sender2", TASK_STACK_SIZE, (void *) 200, 2, &xtask2_handle);
+
+ /* Create the task that will read from the queue. The task is created with
+ priority 2, so above the priority of the sender tasks. */
+ xTaskCreate(vReceiverTask, "Queue Receiver", TASK_STACK_SIZE, NULL, 3, &xtask3_handle);
+
+ }
+ else
+ {
+ /* The queue could not be created. */
+ }
}
void DeleteIntTasks(void)
{
- if(xtask1_handle)
+ if (xtask1_handle)
{
vTaskDelete(xtask1_handle);
- vPrintString("Int Sender 1 deletion \r\n");
+ vPrintString("Int Sender 1 deletion \r\n");
}
- if(xtask2_handle)
+ if (xtask2_handle)
{
vTaskDelete(xtask2_handle);
vPrintString("Int Sender 2 deletion \r\n");
}
- if(xtask3_handle)
+ if (xtask3_handle)
{
vTaskDelete(xtask3_handle);
vPrintString("Int Receiver deletion \r\n");
@@ -75,87 +75,87 @@ void DeleteIntTasks(void)
}
/*-----------------------------------------------------------*/
-static void vSenderTask( void *pvParameters )
+static void vSenderTask(void *pvParameters)
{
- int lValueToSend;
- BaseType_t xStatus;
-
- /* Two instances are created of this task so the value that is sent to the
- queue is passed in via the task parameter rather than be hard coded. This way
- each instance can use a different value. Cast the parameter to the required
- type. */
- lValueToSend = (int)(uintptr)pvParameters;
-
- /* As per most tasks, this task is implemented within an infinite loop. */
- for( ;; )
- {
- /* The first parameter is the queue to which data is being sent. The
- queue was created before the scheduler was started, so before this task
- started to execute.
-
- The second parameter is the address of the data to be sent.
-
- The third parameter is the Block time – the time the task should be kept
- in the Blocked state to wait for space to become available on the queue
- should the queue already be full. In this case we don’t specify a block
- time because there should always be space in the queue. */
- xStatus = xQueueSendToBack( xQueue, &lValueToSend, 0 );
-
- if( xStatus != pdPASS )
- {
- /* We could not write to the queue because it was full – this must
- be an error as the queue should never contain more than one item! */
- vPrintString( "Could not send to the queue.\r\n" );
- }
-
- vTaskDelay(3000);
- }
+ int lValueToSend;
+ BaseType_t xStatus;
+
+ /* Two instances are created of this task so the value that is sent to the
+ queue is passed in via the task parameter rather than be hard coded. This way
+ each instance can use a different value. Cast the parameter to the required
+ type. */
+ lValueToSend = (int)(uintptr)pvParameters;
+
+ /* As per most tasks, this task is implemented within an infinite loop. */
+ for (;;)
+ {
+ /* The first parameter is the queue to which data is being sent. The
+ queue was created before the scheduler was started, so before this task
+ started to execute.
+
+ The second parameter is the address of the data to be sent.
+
+ The third parameter is the Block time – the time the task should be kept
+ in the Blocked state to wait for space to become available on the queue
+ should the queue already be full. In this case we don’t specify a block
+ time because there should always be space in the queue. */
+ xStatus = xQueueSendToBack(xQueue, &lValueToSend, 0);
+
+ if (xStatus != pdPASS)
+ {
+ /* We could not write to the queue because it was full – this must
+ be an error as the queue should never contain more than one item! */
+ vPrintString("Could not send to the queue.\r\n");
+ }
+
+ vTaskDelay(3000);
+ }
}
/*-----------------------------------------------------------*/
-static void vReceiverTask( void *pvParameters )
+static void vReceiverTask(void *pvParameters)
{
- /* Declare the variable that will hold the values received from the queue. */
- int32_t lReceivedValue;
- BaseType_t xStatus;
- const TickType_t xTicksToWait = pdMS_TO_TICKS( 5000UL );
-
- /* This task is also defined within an infinite loop. */
- for( ;; )
- {
- /* As this task unblocks immediately that data is written to the queue this
- call should always find the queue empty. */
- if( uxQueueMessagesWaiting( xQueue ) != 0 )
- {
- vPrintString( "Queue should have been empty!\r\n" );
- }
-
- /* The first parameter is the queue from which data is to be received. The
- queue is created before the scheduler is started, and therefore before this
- task runs for the first time.
-
- The second parameter is the buffer into which the received data will be
- placed. In this case the buffer is simply the address of a variable that
- has the required size to hold the received data.
-
- the last parameter is the block time – the maximum amount of time that the
- task should remain in the Blocked state to wait for data to be available should
- the queue already be empty. */
- xStatus = xQueueReceive( xQueue, &lReceivedValue, xTicksToWait );
-
- if( xStatus == pdPASS )
- {
- /* Data was successfully received from the queue, print out the received
- value. */
- vPrintStringAndNumber( "Received = ", lReceivedValue );
- }
- else
- {
- /* We did not receive anything from the queue even after waiting for 100ms.
- This must be an error as the sending tasks are free running and will be
- continuously writing to the queue. */
- vPrintString( "Could not receive from the queue.\r\n" );
- }
-
- }
+ /* Declare the variable that will hold the values received from the queue. */
+ int32_t lReceivedValue;
+ BaseType_t xStatus;
+ const TickType_t xTicksToWait = pdMS_TO_TICKS(5000UL);
+
+ /* This task is also defined within an infinite loop. */
+ for (;;)
+ {
+ /* As this task unblocks immediately that data is written to the queue this
+ call should always find the queue empty. */
+ if (uxQueueMessagesWaiting(xQueue) != 0)
+ {
+ vPrintString("Queue should have been empty!\r\n");
+ }
+
+ /* The first parameter is the queue from which data is to be received. The
+ queue is created before the scheduler is started, and therefore before this
+ task runs for the first time.
+
+ The second parameter is the buffer into which the received data will be
+ placed. In this case the buffer is simply the address of a variable that
+ has the required size to hold the received data.
+
+ the last parameter is the block time – the maximum amount of time that the
+ task should remain in the Blocked state to wait for data to be available should
+ the queue already be empty. */
+ xStatus = xQueueReceive(xQueue, &lReceivedValue, xTicksToWait);
+
+ if (xStatus == pdPASS)
+ {
+ /* Data was successfully received from the queue, print out the received
+ value. */
+ vPrintStringAndNumber("Received = ", lReceivedValue);
+ }
+ else
+ {
+ /* We did not receive anything from the queue even after waiting for 100ms.
+ This must be an error as the sending tasks are free running and will be
+ continuously writing to the queue. */
+ vPrintString("Could not receive from the queue.\r\n");
+ }
+
+ }
}
\ No newline at end of file
diff --git a/example/freertos_feature/queue/src/queue_set.c b/example/freertos_feature/queue/src/queue_set.c
index 6f390e1aec5443d8b8bb297801c9b5b27d04a351..1ef8af7943566d458659af88aa802d4b0ddec7e7 100644
--- a/example/freertos_feature/queue/src/queue_set.c
+++ b/example/freertos_feature/queue/src/queue_set.c
@@ -1,14 +1,14 @@
/*
-This example creates two sending tasks and one receiving task. The sending tasks send data
-to the receiving task on two separate queues, one queue for each task. The two queues are
-added to a queue set, and the receiving task reads from the queue set to determine which of
+This example creates two sending tasks and one receiving task. The sending tasks send data
+to the receiving task on two separate queues, one queue for each task. The two queues are
+added to a queue set, and the receiving task reads from the queue set to determine which of
the two queues contain data.
*/
#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"
-#define TASK_STACK_SIZE 2048
+#define TASK_STACK_SIZE 2048
static xTaskHandle xtask1_handle;
static xTaskHandle xtask2_handle;
@@ -16,12 +16,12 @@ static xTaskHandle xtask3_handle;
/* The three sender task. */
-static void vSenderTask1( void *pvParameters );
-static void vSenderTask2( void *pvParameters );
+static void vSenderTask1(void *pvParameters);
+static void vSenderTask2(void *pvParameters);
/* The receiver task. The receiver blocks on the queue set to received data
from both sender task. */
-static void vReceiverTask( void *pvParameters );
+static void vReceiverTask(void *pvParameters);
/*-----------------------------------------------------------*/
@@ -33,47 +33,47 @@ static QueueHandle_t xQueue1 = NULL, xQueue2 = NULL;
the two queues are added. */
static QueueSetHandle_t xQueueSet = NULL;
-void CreateQueueSetTasks( void )
+void CreateQueueSetTasks(void)
{
- /* Create the two queues. Each queue sends character pointers. The
- priority of the receiving task is above the priority of the sending tasks so
- the queues will never have more than one item in them at any one time. */
- xQueue1 = xQueueCreate( 1, sizeof( char * ) );
- xQueue2 = xQueueCreate( 1, sizeof( char * ) );
+ /* Create the two queues. Each queue sends character pointers. The
+ priority of the receiving task is above the priority of the sending tasks so
+ the queues will never have more than one item in them at any one time. */
+ xQueue1 = xQueueCreate(1, sizeof(char *));
+ xQueue2 = xQueueCreate(1, sizeof(char *));
- /* Create the queue set. There are two queues both of which can contain
- 1 item, so the maximum number of queue handle the queue set will ever have
- to hold is 2 (1 item multiplied by 2 sets). */
- xQueueSet = xQueueCreateSet( 1 * 2 );
+ /* Create the queue set. There are two queues both of which can contain
+ 1 item, so the maximum number of queue handle the queue set will ever have
+ to hold is 2 (1 item multiplied by 2 sets). */
+ xQueueSet = xQueueCreateSet(1 * 2);
- /* Add the two queues to the set. */
- xQueueAddToSet( xQueue1, xQueueSet );
- xQueueAddToSet( xQueue2, xQueueSet );
+ /* Add the two queues to the set. */
+ xQueueAddToSet(xQueue1, xQueueSet);
+ xQueueAddToSet(xQueue2, xQueueSet);
- /* Create the tasks that send to the queues. */
- xTaskCreate( vSenderTask1, "QueueSet Sender1", TASK_STACK_SIZE, NULL, 2, &xtask1_handle );
- xTaskCreate( vSenderTask2, "QueueSet Sender2", TASK_STACK_SIZE, NULL, 2, &xtask2_handle );
+ /* Create the tasks that send to the queues. */
+ xTaskCreate(vSenderTask1, "QueueSet Sender1", TASK_STACK_SIZE, NULL, 2, &xtask1_handle);
+ xTaskCreate(vSenderTask2, "QueueSet Sender2", TASK_STACK_SIZE, NULL, 2, &xtask2_handle);
- /* Create the receiver task. */
- xTaskCreate( vReceiverTask, "QueueSet Receiver", TASK_STACK_SIZE, NULL, 3, &xtask3_handle );
+ /* Create the receiver task. */
+ xTaskCreate(vReceiverTask, "QueueSet Receiver", TASK_STACK_SIZE, NULL, 3, &xtask3_handle);
}
void DeleteQueueSetTasks(void)
{
- if(xtask1_handle)
+ if (xtask1_handle)
{
- vTaskDelete(xtask1_handle);
- vPrintString("QueueSet Sender 1 deletion \r\n");
+ vTaskDelete(xtask1_handle);
+ vPrintString("QueueSet Sender 1 deletion \r\n");
}
- if(xtask2_handle)
+ if (xtask2_handle)
{
vTaskDelete(xtask2_handle);
vPrintString("QueueSet Sender 2 deletion \r\n");
}
- if(xtask3_handle)
+ if (xtask3_handle)
{
vTaskDelete(xtask3_handle);
vPrintString("QueueSet Receiver deletion \r\n");
@@ -81,77 +81,77 @@ void DeleteQueueSetTasks(void)
}
/*-----------------------------------------------------------*/
-static void vSenderTask1( void *pvParameters )
+static void vSenderTask1(void *pvParameters)
{
- const TickType_t xBlockTime = pdMS_TO_TICKS( 5000 );
- const char * const pcMessage = "Message from vSenderTask1\r\n";
-
- /* As per most tasks, this task is implemented within an infinite loop. */
- for( ;; )
- {
- /* Block for 100ms. */
- vTaskDelay( xBlockTime );
-
- /* Send this task's string to xQueue1. It is not necessary to use a
- block time, even though the queue can only hold one item. This is
- because the priority of the task that reads from the queue is higher
- than the priority of this task; as soon as this task writes to the queue
- it will be pre-empted by the task that reads from the queue, so the
- queue will already be empty again by the time the call to xQueueSend()
- returns. The block time is set to 0. */
- xQueueSend( xQueue1, &pcMessage, 0 );
- }
+ const TickType_t xBlockTime = pdMS_TO_TICKS(5000);
+ const char *const pcMessage = "Message from vSenderTask1\r\n";
+
+ /* As per most tasks, this task is implemented within an infinite loop. */
+ for (;;)
+ {
+ /* Block for 100ms. */
+ vTaskDelay(xBlockTime);
+
+ /* Send this task's string to xQueue1. It is not necessary to use a
+ block time, even though the queue can only hold one item. This is
+ because the priority of the task that reads from the queue is higher
+ than the priority of this task; as soon as this task writes to the queue
+ it will be pre-empted by the task that reads from the queue, so the
+ queue will already be empty again by the time the call to xQueueSend()
+ returns. The block time is set to 0. */
+ xQueueSend(xQueue1, &pcMessage, 0);
+ }
}
/*-----------------------------------------------------------*/
-static void vSenderTask2( void *pvParameters )
+static void vSenderTask2(void *pvParameters)
{
- const TickType_t xBlockTime = pdMS_TO_TICKS( 5000 );
- const char * const pcMessage = "Message from vSenderTask2\r\n";
-
- /* As per most tasks, this task is implemented within an infinite loop. */
- for( ;; )
- {
- /* Block for 200ms. */
- vTaskDelay( xBlockTime );
-
- /* Send this task's string to xQueue1. It is not necessary to use a
- block time, even though the queue can only hold one item. This is
- because the priority of the task that reads from the queue is higher
- than the priority of this task; as soon as this task writes to the queue
- it will be pre-empted by the task that reads from the queue, so the
- queue will already be empty again by the time the call to xQueueSend()
- returns. The block time is set to 0. */
- xQueueSend( xQueue2, &pcMessage, 0 );
- }
+ const TickType_t xBlockTime = pdMS_TO_TICKS(5000);
+ const char *const pcMessage = "Message from vSenderTask2\r\n";
+
+ /* As per most tasks, this task is implemented within an infinite loop. */
+ for (;;)
+ {
+ /* Block for 200ms. */
+ vTaskDelay(xBlockTime);
+
+ /* Send this task's string to xQueue1. It is not necessary to use a
+ block time, even though the queue can only hold one item. This is
+ because the priority of the task that reads from the queue is higher
+ than the priority of this task; as soon as this task writes to the queue
+ it will be pre-empted by the task that reads from the queue, so the
+ queue will already be empty again by the time the call to xQueueSend()
+ returns. The block time is set to 0. */
+ xQueueSend(xQueue2, &pcMessage, 0);
+ }
}
/*-----------------------------------------------------------*/
-static void vReceiverTask( void *pvParameters )
+static void vReceiverTask(void *pvParameters)
{
- QueueHandle_t xQueueThatContainsData;
- char *pcReceivedString;
-
- /* As per most tasks, this task is implemented within an infinite loop. */
- for( ;; )
- {
- /* Block on the queue set to wait for one of the queues in the set to
- contain data. Cast the QueueSetMemberHandle_t values returned from
- xQueueSelectFromSet() to a QueueHandle_t as it is known that all the
- items in the set are queues (as opposed to semaphores, which can also be
- members of a queue set). */
- xQueueThatContainsData = ( QueueHandle_t ) xQueueSelectFromSet( xQueueSet, portMAX_DELAY );
-
- /* An indefinite block time was used when reading from the set so
- xQueueSelectFromSet() will not have returned unless one of the queues in
- the set contained data, and xQueueThatContansData must be valid. Read
- from the queue. It is not necessary to specify a block time because it
- is known that the queue contains data. The block time is set to 0. */
- xQueueReceive( xQueueThatContainsData, &pcReceivedString, 0 );
-
- /* Print the string received from the queue. */
- vPrintString( pcReceivedString );
-
- }
+ QueueHandle_t xQueueThatContainsData;
+ char *pcReceivedString;
+
+ /* As per most tasks, this task is implemented within an infinite loop. */
+ for (;;)
+ {
+ /* Block on the queue set to wait for one of the queues in the set to
+ contain data. Cast the QueueSetMemberHandle_t values returned from
+ xQueueSelectFromSet() to a QueueHandle_t as it is known that all the
+ items in the set are queues (as opposed to semaphores, which can also be
+ members of a queue set). */
+ xQueueThatContainsData = (QueueHandle_t) xQueueSelectFromSet(xQueueSet, portMAX_DELAY);
+
+ /* An indefinite block time was used when reading from the set so
+ xQueueSelectFromSet() will not have returned unless one of the queues in
+ the set contained data, and xQueueThatContansData must be valid. Read
+ from the queue. It is not necessary to specify a block time because it
+ is known that the queue contains data. The block time is set to 0. */
+ xQueueReceive(xQueueThatContainsData, &pcReceivedString, 0);
+
+ /* Print the string received from the queue. */
+ vPrintString(pcReceivedString);
+
+ }
}
diff --git a/example/freertos_feature/queue/src/queue_struct_send_recv.c b/example/freertos_feature/queue/src/queue_struct_send_recv.c
index 2457b90f022cfb22e6f4d669bc7b37ead3d3ab0c..77a9c30a23eaf29318c61c7b1600b472b337ef69 100644
--- a/example/freertos_feature/queue/src/queue_struct_send_recv.c
+++ b/example/freertos_feature/queue/src/queue_struct_send_recv.c
@@ -1,5 +1,5 @@
/*
-This example is similar to queue_int_send_recv, but the task priorities are reversed, so the receiving task
+This example is similar to queue_int_send_recv, but the task priorities are reversed, so the receiving task
has a lower priority than the sending tasks. Also, the queue is used to pass structures, rather than integers.
*/
#include "FreeRTOSConfig.h"
@@ -7,7 +7,7 @@ has a lower priority than the sending tasks. Also, the queue is used to pass str
#include "task.h"
#include "queue.h"
-#define TASK_STACK_SIZE 2048
+#define TASK_STACK_SIZE 2048
#define mainSENDER_1 0
#define mainSENDER_2 1
@@ -16,15 +16,16 @@ static xTaskHandle xtask1_handle;
static xTaskHandle xtask2_handle;
static xTaskHandle xtask3_handle;
-typedef struct {
- unsigned char ucValue;
- unsigned char ucSource;
+typedef struct
+{
+ unsigned char ucValue;
+ unsigned char ucSource;
} xData;
-static const xData xStructsToSend[2] =
+static const xData xStructsToSend[2] =
{
- {1, mainSENDER_1},/* Used by Sender1. */
- {2, mainSENDER_2} /* Used by Sender2. */
+ {1, mainSENDER_1},/* Used by Sender1. */
+ {2, mainSENDER_2} /* Used by Sender2. */
};
/* Declare a variable of type QueueHandle_t. This is used to store the queue
@@ -33,137 +34,137 @@ static QueueHandle_t xQueue;
static void vSenderTask(void *pvParameters)
{
- portBASE_TYPE xStatus;
- const portTickType xTicksToWait = 100 / portTICK_RATE_MS;
-
- /* As per most tasks, this task is implemented within an infinite loop. */
+ portBASE_TYPE xStatus;
+ const portTickType xTicksToWait = 100 / portTICK_RATE_MS;
+
+ /* As per most tasks, this task is implemented within an infinite loop. */
for (;;)
{
- /* The first parameter is the queue to which data is being sent. The
- queue was created before the scheduler was started, so before this task
- started to execute.
-
- The second parameter is the address of the structure being sent. The
- address is passed in as the task parameter.
-
- The third parameter is the Block time - the time the task should be kept
- in the Blocked state to wait for space to become available on the queue
- should the queue already be full. A block time is specified as the queue
- will become full. Items will only be removed from the queue when both
- sending tasks are in the Blocked state.. */
- xStatus = xQueueSendToBack(xQueue, pvParameters, xTicksToWait);
-
- /* We could not write to the queue because it was full - this must
- be an error as the receiving task should make space in the queue
- as soon as both sending tasks are in the Blocked state. */
- if (xStatus != pdPASS)
- {
- vPrintString("Could not send to the queue!\n");
- }
-
- vTaskDelay(5000);
+ /* The first parameter is the queue to which data is being sent. The
+ queue was created before the scheduler was started, so before this task
+ started to execute.
+
+ The second parameter is the address of the structure being sent. The
+ address is passed in as the task parameter.
+
+ The third parameter is the Block time - the time the task should be kept
+ in the Blocked state to wait for space to become available on the queue
+ should the queue already be full. A block time is specified as the queue
+ will become full. Items will only be removed from the queue when both
+ sending tasks are in the Blocked state.. */
+ xStatus = xQueueSendToBack(xQueue, pvParameters, xTicksToWait);
+
+ /* We could not write to the queue because it was full - this must
+ be an error as the receiving task should make space in the queue
+ as soon as both sending tasks are in the Blocked state. */
+ if (xStatus != pdPASS)
+ {
+ vPrintString("Could not send to the queue!\n");
+ }
+
+ vTaskDelay(5000);
}
}
static void vReceiverTask(void *pvParameters)
{
- /* Declare the structure that will hold the values received from the queue. */
- xData xReceivedStructure;
- portBASE_TYPE xStatus;
-
- /* This task is also defined within an infinite loop. */
- for (;;)
- {
- /* As this task only runs when the sending tasks are in the Blocked state,
- and the sending tasks only block when the queue is full, this task should
- always find the queue to be full. 3 is the queue length. */
- if (uxQueueMessagesWaiting(xQueue) == 3)
- {
- vPrintString("Queue should is full!\n");
- }
-
- /* The first parameter is the queue from which data is to be received. The
- queue is created before the scheduler is started, and therefore before this
- task runs for the first time.
-
- The second parameter is the buffer into which the received data will be
- placed. In this case the buffer is simply the address of a variable that
- has the required size to hold the received structure.
-
- The last parameter is the block time - the maximum amount of time that the
- task should remain in the Blocked state to wait for data to be available
- should the queue already be empty. A block time is not necessary as this
- task will only run when the queue is full so data will always be available. */
- xStatus = xQueueReceive(xQueue, &xReceivedStructure, /*0*/portMAX_DELAY);
-
- /* Data was successfully received from the queue, print out the received
- value and the source of the value. */
- if (xStatus == pdPASS)
- {
- if (xReceivedStructure.ucSource == mainSENDER_1)
- {
- vPrintStringAndNumber("Received From Sender 1 = ", xReceivedStructure.ucValue);
- }
- else
- {
- vPrintStringAndNumber("Received From Sender 2 = ", xReceivedStructure.ucValue);
- }
- }
- else
- {
- /* We did not receive anything from the queue. This must be an error
- as this task should only run when the queue is full. */
- vPrintString("Could not receive from the queue!\n");
- }
- }
+ /* Declare the structure that will hold the values received from the queue. */
+ xData xReceivedStructure;
+ portBASE_TYPE xStatus;
+
+ /* This task is also defined within an infinite loop. */
+ for (;;)
+ {
+ /* As this task only runs when the sending tasks are in the Blocked state,
+ and the sending tasks only block when the queue is full, this task should
+ always find the queue to be full. 3 is the queue length. */
+ if (uxQueueMessagesWaiting(xQueue) == 3)
+ {
+ vPrintString("Queue should is full!\n");
+ }
+
+ /* The first parameter is the queue from which data is to be received. The
+ queue is created before the scheduler is started, and therefore before this
+ task runs for the first time.
+
+ The second parameter is the buffer into which the received data will be
+ placed. In this case the buffer is simply the address of a variable that
+ has the required size to hold the received structure.
+
+ The last parameter is the block time - the maximum amount of time that the
+ task should remain in the Blocked state to wait for data to be available
+ should the queue already be empty. A block time is not necessary as this
+ task will only run when the queue is full so data will always be available. */
+ xStatus = xQueueReceive(xQueue, &xReceivedStructure, /*0*/portMAX_DELAY);
+
+ /* Data was successfully received from the queue, print out the received
+ value and the source of the value. */
+ if (xStatus == pdPASS)
+ {
+ if (xReceivedStructure.ucSource == mainSENDER_1)
+ {
+ vPrintStringAndNumber("Received From Sender 1 = ", xReceivedStructure.ucValue);
+ }
+ else
+ {
+ vPrintStringAndNumber("Received From Sender 2 = ", xReceivedStructure.ucValue);
+ }
+ }
+ else
+ {
+ /* We did not receive anything from the queue. This must be an error
+ as this task should only run when the queue is full. */
+ vPrintString("Could not receive from the queue!\n");
+ }
+ }
}
void CreateStructTasks(void)
{
BaseType_t ret;
- /* The queue is created to hold a maximum of 3 structures of type xData. */
- xQueue = xQueueCreate(3, sizeof(xData));
- if (xQueue != NULL)
- {
- ret = xTaskCreate(vReceiverTask, "Struct Receiver", TASK_STACK_SIZE, NULL, 2, &xtask1_handle);
- if(ret != pdPASS)
- {
- xtask1_handle = NULL;
- vPrintStringAndNumber("Receiver creation failed: ", ret);
- }
-
- ret = xTaskCreate(vSenderTask, "Struct Sender 1", TASK_STACK_SIZE, (void*)&(xStructsToSend[0]), 2, &xtask2_handle);
- if(ret != pdPASS)
- {
- xtask2_handle = NULL;
- vPrintStringAndNumber("Sender 1 creation failed: ", ret);
- }
-
- ret = xTaskCreate(vSenderTask, "Struct Sender 2", TASK_STACK_SIZE, (void*)&(xStructsToSend[1]), 2, &xtask3_handle);
- if(ret != pdPASS)
- {
- xtask3_handle = NULL;
- vPrintStringAndNumber("Sender 2 creation failed: ", ret);
- }
- }
+ /* The queue is created to hold a maximum of 3 structures of type xData. */
+ xQueue = xQueueCreate(3, sizeof(xData));
+ if (xQueue != NULL)
+ {
+ ret = xTaskCreate(vReceiverTask, "Struct Receiver", TASK_STACK_SIZE, NULL, 2, &xtask1_handle);
+ if (ret != pdPASS)
+ {
+ xtask1_handle = NULL;
+ vPrintStringAndNumber("Receiver creation failed: ", ret);
+ }
+
+ ret = xTaskCreate(vSenderTask, "Struct Sender 1", TASK_STACK_SIZE, (void *) & (xStructsToSend[0]), 2, &xtask2_handle);
+ if (ret != pdPASS)
+ {
+ xtask2_handle = NULL;
+ vPrintStringAndNumber("Sender 1 creation failed: ", ret);
+ }
+
+ ret = xTaskCreate(vSenderTask, "Struct Sender 2", TASK_STACK_SIZE, (void *) & (xStructsToSend[1]), 2, &xtask3_handle);
+ if (ret != pdPASS)
+ {
+ xtask3_handle = NULL;
+ vPrintStringAndNumber("Sender 2 creation failed: ", ret);
+ }
+ }
}
void DeleteStructTasks(void)
{
- if(xtask1_handle)
+ if (xtask1_handle)
{
vTaskDelete(xtask1_handle);
vPrintString("Struct Receiver deletion \r\n");
}
- if(xtask2_handle)
+ if (xtask2_handle)
{
vTaskDelete(xtask2_handle);
vPrintString("Struct Sender 1 deletion \r\n");
}
- if(xtask3_handle)
+ if (xtask3_handle)
{
vTaskDelete(xtask3_handle);
vPrintString("Struct Sender 2 deletion \r\n");
diff --git a/example/freertos_feature/resource/configs/d2000_aarch32_eg_configs b/example/freertos_feature/resource/configs/d2000_aarch32_eg_configs
index 464a31af9bb3111d91fad1699c91b41de9317519..a16785ad54af36153e37c6b401b31d847493f42d 100644
--- a/example/freertos_feature/resource/configs/d2000_aarch32_eg_configs
+++ b/example/freertos_feature/resource/configs/d2000_aarch32_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -111,6 +112,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -147,6 +157,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -168,12 +179,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -185,14 +190,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -210,4 +233,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/resource/configs/d2000_aarch64_eg_configs b/example/freertos_feature/resource/configs/d2000_aarch64_eg_configs
index 64e6b4b7a6ae1664e07af0d9c84a440dabc972c1..4731ef2f28f88014b15fe54b9662689cee32274f 100644
--- a/example/freertos_feature/resource/configs/d2000_aarch64_eg_configs
+++ b/example/freertos_feature/resource/configs/d2000_aarch64_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -107,6 +108,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -143,6 +153,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -164,12 +175,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -181,14 +186,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -206,4 +229,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/resource/configs/e2000d_aarch32_eg_configs b/example/freertos_feature/resource/configs/e2000d_aarch32_eg_configs
index fc31cd0b27be11b5e09995278c509299162fa4e9..229022705bc103e6f867abfbce05526a6d480085 100644
--- a/example/freertos_feature/resource/configs/e2000d_aarch32_eg_configs
+++ b/example/freertos_feature/resource/configs/e2000d_aarch32_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -111,6 +112,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -147,6 +157,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -168,12 +179,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -185,14 +190,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -210,4 +233,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/resource/configs/e2000d_aarch64_eg_configs b/example/freertos_feature/resource/configs/e2000d_aarch64_eg_configs
index 7e2efa4fba523e780f910a826b7f13a9552e4bbe..f3181d358e9c6ec7c5452447c06782bac1a30a91 100644
--- a/example/freertos_feature/resource/configs/e2000d_aarch64_eg_configs
+++ b/example/freertos_feature/resource/configs/e2000d_aarch64_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -107,6 +108,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -143,6 +153,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -164,12 +175,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -181,14 +186,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -206,4 +229,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/resource/configs/e2000q_aarch32_eg_configs b/example/freertos_feature/resource/configs/e2000q_aarch32_eg_configs
index 2fe965a523e72eb1736dfda348ff99451b89d666..a786509e156f1440be7e9837485af11a833f9e5d 100644
--- a/example/freertos_feature/resource/configs/e2000q_aarch32_eg_configs
+++ b/example/freertos_feature/resource/configs/e2000q_aarch32_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -111,6 +112,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -147,6 +157,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -168,12 +179,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -185,14 +190,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -210,4 +233,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
# CONFIG_USE_TLSF is not set
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/resource/configs/e2000q_aarch64_eg_configs b/example/freertos_feature/resource/configs/e2000q_aarch64_eg_configs
index 9c50f2b0368b0cb7549298c291755806fc32ae00..9183d77b6ebf704e132f641e17c7fdfd254ec12d 100644
--- a/example/freertos_feature/resource/configs/e2000q_aarch64_eg_configs
+++ b/example/freertos_feature/resource/configs/e2000q_aarch64_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -107,6 +108,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -143,6 +153,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -164,12 +175,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -181,14 +186,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -206,4 +229,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
# CONFIG_USE_TLSF is not set
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/resource/configs/ft2004_aarch32_eg_configs b/example/freertos_feature/resource/configs/ft2004_aarch32_eg_configs
index 4c5b2c49d6edae2d8456f3d083606aa9f62a3361..f0510b59527c3bb025d72f8ccca16b539ea7c56c 100644
--- a/example/freertos_feature/resource/configs/ft2004_aarch32_eg_configs
+++ b/example/freertos_feature/resource/configs/ft2004_aarch32_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -111,6 +112,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -147,6 +157,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -168,12 +179,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -185,14 +190,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -210,4 +233,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/resource/configs/ft2004_aarch64_eg_configs b/example/freertos_feature/resource/configs/ft2004_aarch64_eg_configs
index da9c1f8182b98ecf314c436f79ccbf0a31c79673..d99e8ace055af1b9260a237f1ce8ba6374d9f8e3 100644
--- a/example/freertos_feature/resource/configs/ft2004_aarch64_eg_configs
+++ b/example/freertos_feature/resource/configs/ft2004_aarch64_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -107,6 +108,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -143,6 +153,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -164,12 +175,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -181,14 +186,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -206,4 +229,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/resource/inc/feature_resource.h b/example/freertos_feature/resource/inc/feature_resource.h
index f90c3ef245e9e46d10a614d7792330c2b1da2080..83d1408819eecfa85d366dc9edfd4350704b1c07 100644
--- a/example/freertos_feature/resource/inc/feature_resource.h
+++ b/example/freertos_feature/resource/inc/feature_resource.h
@@ -1,30 +1,35 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: feature_resource.h
* Date: 2022-06-17 10:42:40
* LastEditTime: 2022-06-17 10:42:40
- * Description: This file is for
- *
- * Modify History:
+ * Description: This file is for task function define
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2022/08/09 first commit
*/
-
#ifndef FEATURE_RESOURCE_H
#define FEATURE_RESOURCE_H
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
/* mutex task */
void CreateResourceTasks(void);
void DeleteResourceTasks(void);
@@ -33,4 +38,8 @@ void DeleteResourceTasks(void);
void CreateGatekeeperTasks(void);
void DeleteGatekeeperTasks(void);
+#ifdef __cplusplus
+}
+#endif
+
#endif // !
\ No newline at end of file
diff --git a/example/freertos_feature/resource/main.c b/example/freertos_feature/resource/main.c
index f376d838205fdb1a0ea7cf3bf6d192350dc0ad4f..9c8c87a20aa6ccf31c999e4e3dfc2dd7b1e49d3b 100644
--- a/example/freertos_feature/resource/main.c
+++ b/example/freertos_feature/resource/main.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: main.c
* Date: 2022-06-17 08:17:59
* LastEditTime: 2022-06-17 08:17:59
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
+ * Description: This file is for resource example that running shell task and open scheduler
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2022/08/09 first commit
*/
#include "shell.h"
@@ -30,13 +31,15 @@ int main(void)
BaseType_t ret;
ret = LSUserShellTask() ;
- if(ret != pdPASS)
+ if (ret != pdPASS)
+ {
goto FAIL_EXIT;
+ }
- vTaskStartScheduler(); /* 启动任务,开启调度 */
+ vTaskStartScheduler(); /* 启动任务,开启调度 */
while (1); /* 正常不会执行到这里 */
-
+
FAIL_EXIT:
- printf("failed 0x%x \r\n", ret);
+ printf("failed 0x%x. \r\n", ret);
return 0;
}
diff --git a/example/freertos_feature/resource/sdkconfig b/example/freertos_feature/resource/sdkconfig
index 9c50f2b0368b0cb7549298c291755806fc32ae00..9183d77b6ebf704e132f641e17c7fdfd254ec12d 100644
--- a/example/freertos_feature/resource/sdkconfig
+++ b/example/freertos_feature/resource/sdkconfig
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -107,6 +108,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -143,6 +153,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -164,12 +175,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -181,14 +186,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -206,4 +229,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
# CONFIG_USE_TLSF is not set
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/resource/sdkconfig.h b/example/freertos_feature/resource/sdkconfig.h
index 2e55f772e76d53ec6d106cb6e89fa66f67702aa0..80305baca3d75744267bea25bbc372f9e03b7902 100644
--- a/example/freertos_feature/resource/sdkconfig.h
+++ b/example/freertos_feature/resource/sdkconfig.h
@@ -62,6 +62,7 @@
/* CONFIG_USE_ADC is not set */
/* CONFIG_USE_PWM is not set */
/* CONFIG_USE_IPC is not set */
+/* CONFIG_USE_MEDIA is not set */
/* end of Components Configuration */
#define CONFIG_USE_NEW_LIBC
/* end of Standalone Setting */
@@ -98,6 +99,12 @@
/* Compiler Options */
+/* Cross-Compiler Setting */
+
+#define CONFIG_GCC_OPTIMIZE_LEVEL 0
+/* CONFIG_USE_EXT_COMPILER is not set */
+/* CONFIG_USE_KLIN_SYS is not set */
+/* end of Cross-Compiler Setting */
#define CONFIG_OUTPUT_BINARY
/* end of Compiler Options */
/* end of Building Option */
@@ -127,6 +134,7 @@
/* Freertos Eth Drivers */
/* CONFIG_FREERTOS_USE_XMAC is not set */
+/* CONFIG_FREERTOS_USE_GMAC is not set */
/* end of Freertos Eth Drivers */
/* Freertos Gpio Drivers */
@@ -145,11 +153,6 @@
/* CONFIG_FREERTOS_USE_FGDMA is not set */
/* end of Freertos DMA Drivers */
-/* Freertos MMC Drivers */
-
-/* CONFIG_FREERTOS_USE_FSDIO is not set */
-/* end of Freertos MMC Drivers */
-
/* Freertos Adc Drivers */
/* CONFIG_FREERTOS_USE_ADC is not set */
@@ -159,13 +162,28 @@
/* CONFIG_FREERTOS_USE_CAN is not set */
/* end of Freertos Can Drivers */
+
+/* Freertos I2c Drivers */
+
+/* CONFIG_FREERTOS_USE_I2C is not set */
+/* end of Freertos I2c Drivers */
+
+/* Freertos Mio Drivers */
+
+/* CONFIG_FREERTOS_USE_MIO is not set */
+/* end of Freertos Mio Drivers */
+
+/* Freertos Timer Drivers */
+
+/* CONFIG_FREERTOS_USE_TIMER is not set */
+/* end of Freertos Timer Drivers */
/* end of Component Configuration */
-/* FreeRTOS Setting */
+/* Third-Party Configuration */
/* CONFIG_USE_LWIP is not set */
#define CONFIG_USE_BACKTRACE
-/* CONFIG_USE_FATFS is not set */
+/* CONFIG_USE_FATFS_0_1_4 is not set */
/* CONFIG_USE_SFUD is not set */
/* CONFIG_USE_SPIFFS is not set */
/* CONFIG_USE_AMP is not set */
@@ -181,6 +199,28 @@
/* CONFIG_USE_TLSF is not set */
/* CONFIG_USE_SDMMC_CMD is not set */
/* CONFIG_USE_CHERRY_USB is not set */
-/* end of FreeRTOS Setting */
+/* end of Third-Party Configuration */
+
+/* Kernel Configuration */
+
+#define CONFIG_FREERTOS_OPTIMIZED_SCHEDULER
+#define CONFIG_FREERTOS_HZ 1000
+#define CONFIG_FREERTOS_MAX_PRIORITIES 32
+#define CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES 13
+#define CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES 11
+#define CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS 1
+#define CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE 1024
+#define CONFIG_FREERTOS_MAX_TASK_NAME_LEN 32
+#define CONFIG_FREERTOS_TIMER_TASK_PRIORITY 1
+#define CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH 2048
+#define CONFIG_FREERTOS_TIMER_QUEUE_LENGTH 10
+#define CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE 0
+#define CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS
+#define CONFIG_FREERTOS_USE_TRACE_FACILITY
+#define CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS
+/* CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set */
+#define CONFIG_FREERTOS_TOTAL_HEAP_SIZE 10240
+#define CONFIG_FREERTOS_TASK_FPU_SUPPORT 1
+/* end of Kernel Configuration */
#endif
diff --git a/example/freertos_feature/resource/src/gatekeeper.c b/example/freertos_feature/resource/src/gatekeeper.c
index 238b39f61de52a3899f1479b589f5667072d9658..befeb2a9fac206f46aa752c176e818ca65d08447 100644
--- a/example/freertos_feature/resource/src/gatekeeper.c
+++ b/example/freertos_feature/resource/src/gatekeeper.c
@@ -1,5 +1,5 @@
/*
-This example demonstrates:
+This example demonstrates:
Re-writing vPrintString() to use a gatekeeper task.
*/
#include
@@ -10,7 +10,7 @@ Re-writing vPrintString() to use a gatekeeper task.
#include "task.h"
#include "queue.h"
-#define TASK_STACK_SIZE 1024
+#define TASK_STACK_SIZE 1024
static xTaskHandle xtask1_handle;
static xTaskHandle xtask2_handle;
@@ -18,85 +18,85 @@ static xTaskHandle xtask3_handle;
#define MAX_MSG_LEN 100
-static char *pcStringsToPrint[] =
+static char *pcStringsToPrint[] =
{
- "Gatekeeper Task 1 *********************************\n",
- "Gatekeeper Task 2 =================================\n"
- "Gatekeep Message printed from the tick hook #####\n"
+ "Gatekeeper Task 1 *********************************\n",
+ "Gatekeeper Task 2 =================================\n"
+ "Gatekeep Message printed from the tick hook #####\n"
};
xQueueHandle xPrintQueue;
-static void prvStdioGatekeeperTask(void* pvParameters)
+static void prvStdioGatekeeperTask(void *pvParameters)
{
- char* pcMessageToPrint;
- static char cBuffer[MAX_MSG_LEN];
-
- for (;;)
- {
- xQueueReceive(xPrintQueue, &pcMessageToPrint, portMAX_DELAY);
- strncpy(cBuffer, pcMessageToPrint, MAX_MSG_LEN);
- vPrintString(cBuffer);
- }
+ char *pcMessageToPrint;
+ static char cBuffer[MAX_MSG_LEN];
+
+ for (;;)
+ {
+ xQueueReceive(xPrintQueue, &pcMessageToPrint, portMAX_DELAY);
+ strncpy(cBuffer, pcMessageToPrint, MAX_MSG_LEN);
+ vPrintString(cBuffer);
+ }
}
-static void prvPrintTask(void *pvParameters)
+static void prvPrintTask(void *pvParameters)
{
- int iIndexToString;
- iIndexToString = (int)(uintptr)pvParameters;
+ int iIndexToString;
+ iIndexToString = (int)(uintptr)pvParameters;
- for (;;)
- {
- xQueueSendToBack(xPrintQueue, &(pcStringsToPrint[iIndexToString]), 0);
+ for (;;)
+ {
+ xQueueSendToBack(xPrintQueue, &(pcStringsToPrint[iIndexToString]), 0);
- vTaskDelay(5000);
- }
+ vTaskDelay(5000);
+ }
}
-static void vApplicationTickHook(void)
+static void vApplicationTickHook(void)
{
- static int iCount = 0;
- portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
-
- iCount++;
- if (iCount >= 2000)
- {
- xQueueSendToFrontFromISR(xPrintQueue,
- &(pcStringsToPrint[2]),
- &xHigherPriorityTaskWoken); // not needed
- iCount = 0;
- }
+ static int iCount = 0;
+ portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
+
+ iCount++;
+ if (iCount >= 2000)
+ {
+ xQueueSendToFrontFromISR(xPrintQueue,
+ &(pcStringsToPrint[2]),
+ &xHigherPriorityTaskWoken); // not needed
+ iCount = 0;
+ }
}
void CreateGatekeeperTasks(void)
{
- xPrintQueue = xQueueCreate(5, sizeof(char*));
+ xPrintQueue = xQueueCreate(5, sizeof(char *));
- srand(0x42);
+ srand(0x42);
- if (xPrintQueue != NULL)
- {
- xTaskCreate(prvPrintTask, "Gatekeeper Print1", TASK_STACK_SIZE, (void*)0, 1, &xtask1_handle);
- xTaskCreate(prvPrintTask, "Gatekeeper Print2", TASK_STACK_SIZE, (void*)1, 2, &xtask2_handle);
- xTaskCreate(prvStdioGatekeeperTask, "Gatekeeper", TASK_STACK_SIZE, NULL, 0, &xtask3_handle);
- }
+ if (xPrintQueue != NULL)
+ {
+ xTaskCreate(prvPrintTask, "Gatekeeper Print1", TASK_STACK_SIZE, (void *)0, 1, &xtask1_handle);
+ xTaskCreate(prvPrintTask, "Gatekeeper Print2", TASK_STACK_SIZE, (void *)1, 2, &xtask2_handle);
+ xTaskCreate(prvStdioGatekeeperTask, "Gatekeeper", TASK_STACK_SIZE, NULL, 0, &xtask3_handle);
+ }
}
void DeleteGatekeeperTasks(void)
{
- if(xtask1_handle)
+ if (xtask1_handle)
{
vTaskDelete(xtask1_handle);
vPrintString("Gatekeeper Print1 deletion \r\n");
}
- if(xtask2_handle)
+ if (xtask2_handle)
{
vTaskDelete(xtask2_handle);
vPrintString("Gatekeeper Print2 deletion \r\n");
}
- if(xtask3_handle)
+ if (xtask3_handle)
{
vTaskDelete(xtask3_handle);
vPrintString("Gatekeeper deletion \r\n");
diff --git a/example/freertos_feature/resource/src/mutex.c b/example/freertos_feature/resource/src/mutex.c
index 754c3e821f6fee5eb6c21248edd744888e7c3f27..fc5dc5b3dfa5b8585d504488f893e0bb93c2c8de 100644
--- a/example/freertos_feature/resource/src/mutex.c
+++ b/example/freertos_feature/resource/src/mutex.c
@@ -1,5 +1,5 @@
/*
-This example demonstrates:
+This example demonstrates:
Rewriting vPrintString() to use a mutex semaphore.
*/
#include
@@ -11,60 +11,60 @@ Rewriting vPrintString() to use a mutex semaphore.
#include "semphr.h"
#include "croutine.h"
-#define TASK_STACK_SIZE 1024
+#define TASK_STACK_SIZE 1024
static xTaskHandle xtask1_handle;
static xTaskHandle xtask2_handle;
static xSemaphoreHandle xMutex;
-static void prvNewPrintString(const char* pcString)
+static void prvNewPrintString(const char *pcString)
{
- xSemaphoreTake(xMutex, portMAX_DELAY);
- printf("Mutex pcString = %s\n", pcString);
- xSemaphoreGive(xMutex);
+ xSemaphoreTake(xMutex, portMAX_DELAY);
+ printf("Mutex pcString = %s\n", pcString);
+ xSemaphoreGive(xMutex);
}
-static void prvPrintTask(void *pvParameters)
+static void prvPrintTask(void *pvParameters)
{
- char *pcStringToPrint;
- pcStringToPrint = (char*)pvParameters;
+ char *pcStringToPrint;
+ pcStringToPrint = (char *)pvParameters;
- for (;;)
- {
- prvNewPrintString(pcStringToPrint);
+ for (;;)
+ {
+ prvNewPrintString(pcStringToPrint);
- /* Just delay with random time,
- Don't use rand() in secure applications. It's not reentrant!*/
- vTaskDelay(/*rand() & 0x3FF*/5000);
- }
+ /* Just delay with random time,
+ Don't use rand() in secure applications. It's not reentrant!*/
+ vTaskDelay(/*rand() & 0x3FF*/5000);
+ }
}
void CreateResourceTasks(void)
{
- xMutex = xSemaphoreCreateMutex();
+ xMutex = xSemaphoreCreateMutex();
- if (xMutex != NULL)
- {
+ if (xMutex != NULL)
+ {
- xTaskCreate(prvPrintTask, "Mutex Print1", TASK_STACK_SIZE,
- "Task 1 ******************************\n", 1, &xtask1_handle);
- xTaskCreate(prvPrintTask, "Mutex Print2", TASK_STACK_SIZE,
- "Task 2 ==============================\n", 2, &xtask2_handle);
- }
+ xTaskCreate(prvPrintTask, "Mutex Print1", TASK_STACK_SIZE,
+ "Task 1 ******************************\n", 1, &xtask1_handle);
+ xTaskCreate(prvPrintTask, "Mutex Print2", TASK_STACK_SIZE,
+ "Task 2 ==============================\n", 2, &xtask2_handle);
+ }
}
void DeleteResourceTasks(void)
{
- if(xtask1_handle)
+ if (xtask1_handle)
{
vTaskDelete(xtask1_handle);
printf("Resource Task1 deletion \r\n");
}
- if(xtask2_handle)
+ if (xtask2_handle)
{
vTaskDelete(xtask2_handle);
printf("Resource Task2 deletion \r\n");
diff --git a/example/freertos_feature/resource/src/resource_cmd.c b/example/freertos_feature/resource/src/resource_cmd.c
index 926287887c067078c160c9cd6a62866b8c383411..0d2e009aa6e605d7418d93bf4453ea11587fd290 100644
--- a/example/freertos_feature/resource/src/resource_cmd.c
+++ b/example/freertos_feature/resource/src/resource_cmd.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: resource_cmd.c
* Date: 2022-06-17 10:41:45
* LastEditTime: 2022-06-17 10:41:45
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
+ * Description: This file is for resource command interface
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2022/08/09 first commit
*/
#include "shell.h"
#include "feature_resource.h"
@@ -34,16 +35,16 @@ typedef enum
static void ResourceTasksCmdUsage(void)
{
- printf("usage:\r\n");
+ printf("Usage:\r\n");
printf(" resource mutex_cre \r\n");
- printf(" -- create mutex tasks now \r\n");
+ printf(" -- Create mutex tasks now. \r\n");
printf(" resource mutex_del \r\n");
- printf(" -- del mutex tasks now \r\n");
+ printf(" -- Del mutex tasks now. \r\n");
printf(" resource gate_cre \r\n");
- printf(" -- create gatekeeper tasks now \r\n");
+ printf(" -- Create gatekeeper tasks now. \r\n");
printf(" resource gate_del \r\n");
- printf(" -- del gatekeeper tasks now \r\n");
-
+ printf(" -- Del gatekeeper tasks now. \r\n");
+
}
int ResourceTasksCmd(int argc, char *argv[])
@@ -58,55 +59,55 @@ int ResourceTasksCmd(int argc, char *argv[])
if (!strcmp(argv[1], "mutex_cre"))
{
- if(create_flg[MUTEX_TASK_INDEX] == 0)
+ if (create_flg[MUTEX_TASK_INDEX] == 0)
{
CreateResourceTasks();
create_flg[MUTEX_TASK_INDEX] = 1;
}
else
{
- printf("Please use mutex_del cmd first \r\n");
+ printf("Please use mutex_del cmd first. \r\n");
}
}
else if (!strcmp(argv[1], "mutex_del"))
{
- if(create_flg[MUTEX_TASK_INDEX] == 1)
+ if (create_flg[MUTEX_TASK_INDEX] == 1)
{
DeleteResourceTasks();
create_flg[MUTEX_TASK_INDEX] = 0;
- }
+ }
else
{
- printf("Please use mutex_cre cmd first \r\n");
+ printf("Please use mutex_cre cmd first. \r\n");
}
}
else if (!strcmp(argv[1], "gate_cre"))
{
- if(create_flg[GATEKEEPER_TEST_INDEX] == 0)
+ if (create_flg[GATEKEEPER_TEST_INDEX] == 0)
{
CreateGatekeeperTasks();
create_flg[GATEKEEPER_TEST_INDEX] = 1;
}
else
{
- printf("Please use gate_del cmd first \r\n");
+ printf("Please use gate_del cmd first. \r\n");
}
}
else if (!strcmp(argv[1], "gate_del"))
{
- if(create_flg[GATEKEEPER_TEST_INDEX] == 1)
+ if (create_flg[GATEKEEPER_TEST_INDEX] == 1)
{
DeleteGatekeeperTasks();
create_flg[GATEKEEPER_TEST_INDEX] = 0;
- }
+ }
else
{
- printf("Please use gate_cre cmd first \r\n");
+ printf("Please use gate_cre cmd first. \r\n");
}
}
else
{
- printf("Error: Invalid arguments \r\n");
+ printf("Error: Invalid arguments. \r\n");
ResourceTasksCmdUsage();
}
return 0;
diff --git a/example/freertos_feature/software_timer/configs/d2000_aarch32_eg_configs b/example/freertos_feature/software_timer/configs/d2000_aarch32_eg_configs
index 464a31af9bb3111d91fad1699c91b41de9317519..a16785ad54af36153e37c6b401b31d847493f42d 100644
--- a/example/freertos_feature/software_timer/configs/d2000_aarch32_eg_configs
+++ b/example/freertos_feature/software_timer/configs/d2000_aarch32_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -111,6 +112,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -147,6 +157,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -168,12 +179,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -185,14 +190,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -210,4 +233,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/software_timer/configs/d2000_aarch64_eg_configs b/example/freertos_feature/software_timer/configs/d2000_aarch64_eg_configs
index 64e6b4b7a6ae1664e07af0d9c84a440dabc972c1..4731ef2f28f88014b15fe54b9662689cee32274f 100644
--- a/example/freertos_feature/software_timer/configs/d2000_aarch64_eg_configs
+++ b/example/freertos_feature/software_timer/configs/d2000_aarch64_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -107,6 +108,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -143,6 +153,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -164,12 +175,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -181,14 +186,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -206,4 +229,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/software_timer/configs/e2000d_aarch32_eg_configs b/example/freertos_feature/software_timer/configs/e2000d_aarch32_eg_configs
index fc31cd0b27be11b5e09995278c509299162fa4e9..229022705bc103e6f867abfbce05526a6d480085 100644
--- a/example/freertos_feature/software_timer/configs/e2000d_aarch32_eg_configs
+++ b/example/freertos_feature/software_timer/configs/e2000d_aarch32_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -111,6 +112,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -147,6 +157,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -168,12 +179,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -185,14 +190,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -210,4 +233,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/software_timer/configs/e2000d_aarch64_eg_configs b/example/freertos_feature/software_timer/configs/e2000d_aarch64_eg_configs
index 7e2efa4fba523e780f910a826b7f13a9552e4bbe..f3181d358e9c6ec7c5452447c06782bac1a30a91 100644
--- a/example/freertos_feature/software_timer/configs/e2000d_aarch64_eg_configs
+++ b/example/freertos_feature/software_timer/configs/e2000d_aarch64_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -107,6 +108,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -143,6 +153,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -164,12 +175,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -181,14 +186,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -206,4 +229,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/software_timer/configs/e2000q_aarch32_eg_configs b/example/freertos_feature/software_timer/configs/e2000q_aarch32_eg_configs
index 2fe965a523e72eb1736dfda348ff99451b89d666..a786509e156f1440be7e9837485af11a833f9e5d 100644
--- a/example/freertos_feature/software_timer/configs/e2000q_aarch32_eg_configs
+++ b/example/freertos_feature/software_timer/configs/e2000q_aarch32_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -111,6 +112,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -147,6 +157,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -168,12 +179,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -185,14 +190,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -210,4 +233,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
# CONFIG_USE_TLSF is not set
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/software_timer/configs/e2000q_aarch64_eg_configs b/example/freertos_feature/software_timer/configs/e2000q_aarch64_eg_configs
index 9c50f2b0368b0cb7549298c291755806fc32ae00..9183d77b6ebf704e132f641e17c7fdfd254ec12d 100644
--- a/example/freertos_feature/software_timer/configs/e2000q_aarch64_eg_configs
+++ b/example/freertos_feature/software_timer/configs/e2000q_aarch64_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -107,6 +108,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -143,6 +153,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -164,12 +175,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -181,14 +186,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -206,4 +229,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
# CONFIG_USE_TLSF is not set
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/software_timer/configs/ft2004_aarch32_eg_configs b/example/freertos_feature/software_timer/configs/ft2004_aarch32_eg_configs
index 4c5b2c49d6edae2d8456f3d083606aa9f62a3361..f0510b59527c3bb025d72f8ccca16b539ea7c56c 100644
--- a/example/freertos_feature/software_timer/configs/ft2004_aarch32_eg_configs
+++ b/example/freertos_feature/software_timer/configs/ft2004_aarch32_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -111,6 +112,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -147,6 +157,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -168,12 +179,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -185,14 +190,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -210,4 +233,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/software_timer/configs/ft2004_aarch64_eg_configs b/example/freertos_feature/software_timer/configs/ft2004_aarch64_eg_configs
index da9c1f8182b98ecf314c436f79ccbf0a31c79673..d99e8ace055af1b9260a237f1ce8ba6374d9f8e3 100644
--- a/example/freertos_feature/software_timer/configs/ft2004_aarch64_eg_configs
+++ b/example/freertos_feature/software_timer/configs/ft2004_aarch64_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -107,6 +108,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -143,6 +153,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -164,12 +175,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -181,14 +186,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -206,4 +229,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/software_timer/inc/feature_software_timer.h b/example/freertos_feature/software_timer/inc/feature_software_timer.h
index b0ed31b96787b31c4712a797bdc4b2b0ca28007a..2dfd3f03a3e193a5577451d78dd9e0586795722b 100644
--- a/example/freertos_feature/software_timer/inc/feature_software_timer.h
+++ b/example/freertos_feature/software_timer/inc/feature_software_timer.h
@@ -1,30 +1,36 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: feature_software_timer.h
* Date: 2022-06-17 10:42:40
* LastEditTime: 2022-06-17 10:42:40
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
+ * Description: This file is for task function define
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2022/08/09 first commit
*/
#ifndef FEATURE_SOFTWARE_TIMER_H
#define FEATURE_SOFTWARE_TIMER_H
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
/* software timer create and start */
void CreateTimerTasks(void);
void DeleteTimerTasks(void);
@@ -32,4 +38,8 @@ void DeleteTimerTasks(void);
void CreateTimerResetTasks(void);
void DeleteTimerResetTasks(void);
+#ifdef __cplusplus
+}
+#endif
+
#endif // !
\ No newline at end of file
diff --git a/example/freertos_feature/software_timer/main.c b/example/freertos_feature/software_timer/main.c
index f376d838205fdb1a0ea7cf3bf6d192350dc0ad4f..c1ab62ef8c4a1f2306608d66af9aa35394a22390 100644
--- a/example/freertos_feature/software_timer/main.c
+++ b/example/freertos_feature/software_timer/main.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: main.c
* Date: 2022-06-17 08:17:59
* LastEditTime: 2022-06-17 08:17:59
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
+ * Description: This file is for software_timer example that running shell task and open scheduler
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2022/08/09 first commit
*/
#include "shell.h"
@@ -30,13 +31,15 @@ int main(void)
BaseType_t ret;
ret = LSUserShellTask() ;
- if(ret != pdPASS)
+ if (ret != pdPASS)
+ {
goto FAIL_EXIT;
+ }
- vTaskStartScheduler(); /* 启动任务,开启调度 */
+ vTaskStartScheduler(); /* 启动任务,开启调度 */
while (1); /* 正常不会执行到这里 */
-
+
FAIL_EXIT:
- printf("failed 0x%x \r\n", ret);
+ printf("failed 0x%x. \r\n", ret);
return 0;
}
diff --git a/example/freertos_feature/software_timer/sdkconfig b/example/freertos_feature/software_timer/sdkconfig
index 9c50f2b0368b0cb7549298c291755806fc32ae00..9183d77b6ebf704e132f641e17c7fdfd254ec12d 100644
--- a/example/freertos_feature/software_timer/sdkconfig
+++ b/example/freertos_feature/software_timer/sdkconfig
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -107,6 +108,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -143,6 +153,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -164,12 +175,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -181,14 +186,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -206,4 +229,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
# CONFIG_USE_TLSF is not set
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/software_timer/sdkconfig.h b/example/freertos_feature/software_timer/sdkconfig.h
index 2e55f772e76d53ec6d106cb6e89fa66f67702aa0..80305baca3d75744267bea25bbc372f9e03b7902 100644
--- a/example/freertos_feature/software_timer/sdkconfig.h
+++ b/example/freertos_feature/software_timer/sdkconfig.h
@@ -62,6 +62,7 @@
/* CONFIG_USE_ADC is not set */
/* CONFIG_USE_PWM is not set */
/* CONFIG_USE_IPC is not set */
+/* CONFIG_USE_MEDIA is not set */
/* end of Components Configuration */
#define CONFIG_USE_NEW_LIBC
/* end of Standalone Setting */
@@ -98,6 +99,12 @@
/* Compiler Options */
+/* Cross-Compiler Setting */
+
+#define CONFIG_GCC_OPTIMIZE_LEVEL 0
+/* CONFIG_USE_EXT_COMPILER is not set */
+/* CONFIG_USE_KLIN_SYS is not set */
+/* end of Cross-Compiler Setting */
#define CONFIG_OUTPUT_BINARY
/* end of Compiler Options */
/* end of Building Option */
@@ -127,6 +134,7 @@
/* Freertos Eth Drivers */
/* CONFIG_FREERTOS_USE_XMAC is not set */
+/* CONFIG_FREERTOS_USE_GMAC is not set */
/* end of Freertos Eth Drivers */
/* Freertos Gpio Drivers */
@@ -145,11 +153,6 @@
/* CONFIG_FREERTOS_USE_FGDMA is not set */
/* end of Freertos DMA Drivers */
-/* Freertos MMC Drivers */
-
-/* CONFIG_FREERTOS_USE_FSDIO is not set */
-/* end of Freertos MMC Drivers */
-
/* Freertos Adc Drivers */
/* CONFIG_FREERTOS_USE_ADC is not set */
@@ -159,13 +162,28 @@
/* CONFIG_FREERTOS_USE_CAN is not set */
/* end of Freertos Can Drivers */
+
+/* Freertos I2c Drivers */
+
+/* CONFIG_FREERTOS_USE_I2C is not set */
+/* end of Freertos I2c Drivers */
+
+/* Freertos Mio Drivers */
+
+/* CONFIG_FREERTOS_USE_MIO is not set */
+/* end of Freertos Mio Drivers */
+
+/* Freertos Timer Drivers */
+
+/* CONFIG_FREERTOS_USE_TIMER is not set */
+/* end of Freertos Timer Drivers */
/* end of Component Configuration */
-/* FreeRTOS Setting */
+/* Third-Party Configuration */
/* CONFIG_USE_LWIP is not set */
#define CONFIG_USE_BACKTRACE
-/* CONFIG_USE_FATFS is not set */
+/* CONFIG_USE_FATFS_0_1_4 is not set */
/* CONFIG_USE_SFUD is not set */
/* CONFIG_USE_SPIFFS is not set */
/* CONFIG_USE_AMP is not set */
@@ -181,6 +199,28 @@
/* CONFIG_USE_TLSF is not set */
/* CONFIG_USE_SDMMC_CMD is not set */
/* CONFIG_USE_CHERRY_USB is not set */
-/* end of FreeRTOS Setting */
+/* end of Third-Party Configuration */
+
+/* Kernel Configuration */
+
+#define CONFIG_FREERTOS_OPTIMIZED_SCHEDULER
+#define CONFIG_FREERTOS_HZ 1000
+#define CONFIG_FREERTOS_MAX_PRIORITIES 32
+#define CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES 13
+#define CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES 11
+#define CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS 1
+#define CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE 1024
+#define CONFIG_FREERTOS_MAX_TASK_NAME_LEN 32
+#define CONFIG_FREERTOS_TIMER_TASK_PRIORITY 1
+#define CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH 2048
+#define CONFIG_FREERTOS_TIMER_QUEUE_LENGTH 10
+#define CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE 0
+#define CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS
+#define CONFIG_FREERTOS_USE_TRACE_FACILITY
+#define CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS
+/* CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set */
+#define CONFIG_FREERTOS_TOTAL_HEAP_SIZE 10240
+#define CONFIG_FREERTOS_TASK_FPU_SUPPORT 1
+/* end of Kernel Configuration */
#endif
diff --git a/example/freertos_feature/software_timer/src/create_start.c b/example/freertos_feature/software_timer/src/create_start.c
index b00d501785c5f507d682436981e0ef5ca370c498..ffccee0386bdd06ffd4b90b28098a7b5243026fc 100644
--- a/example/freertos_feature/software_timer/src/create_start.c
+++ b/example/freertos_feature/software_timer/src/create_start.c
@@ -1,5 +1,5 @@
/*
-This example demonstrates:
+This example demonstrates:
creates and starts a one-shot timer and an auto-reload timer in diffirent period.
*/
#include "FreeRTOS.h"
@@ -7,8 +7,8 @@ creates and starts a one-shot timer and an auto-reload timer in diffirent period
#include "timers.h"
/* The periods assigned to the one-shot and auto-reload timers respectively. */
-#define ONE_SHOT_TIMER_PERIOD ( pdMS_TO_TICKS( 3000UL ) )
-#define AUTO_RELOAD_TIMER_PERIOD ( pdMS_TO_TICKS( 3000UL ) )
+#define ONE_SHOT_TIMER_PERIOD ( pdMS_TO_TICKS( 3000UL ) )
+#define AUTO_RELOAD_TIMER_PERIOD ( pdMS_TO_TICKS( 3000UL ) )
/*-----------------------------------------------------------*/
@@ -16,108 +16,108 @@ creates and starts a one-shot timer and an auto-reload timer in diffirent period
* The callback functions used by the one-shot and auto-reload timers
* respectively.
*/
-static void prvOneShotTimerCallback( TimerHandle_t xTimer );
-static void prvAutoReloadTimerCallback( TimerHandle_t xTimer );
+static void prvOneShotTimerCallback(TimerHandle_t xTimer);
+static void prvAutoReloadTimerCallback(TimerHandle_t xTimer);
/*-----------------------------------------------------------*/
static TimerHandle_t xAutoReloadTimer, xOneShotTimer;
-void CreateTimerTasks( void )
+void CreateTimerTasks(void)
{
- BaseType_t xTimer1Started, xTimer2Started;
-
- /* Create the one shot software timer, storing the handle to the created
- software timer in xOneShotTimer. */
- xOneShotTimer = xTimerCreate( "Create OneShot", /* Text name for the software timer - not used by FreeRTOS. */
- ONE_SHOT_TIMER_PERIOD, /* The software timer's period in ticks. */
- pdFALSE, /* Setting uxAutoRealod to pdFALSE creates a one-shot software timer. */
- 0, /* This example does not use the timer id. */
- prvOneShotTimerCallback ); /* The callback function to be used by the software timer being created. */
-
- /* Create the auto-reload software timer, storing the handle to the created
- software timer in xAutoReloadTimer. */
- xAutoReloadTimer = xTimerCreate( "Create AutoReload", /* Text name for the software timer - not used by FreeRTOS. */
- AUTO_RELOAD_TIMER_PERIOD, /* The software timer's period in ticks. */
- pdTRUE, /* Set uxAutoRealod to pdTRUE to create an auto-reload software timer. */
- 0, /* This example does not use the timer id. */
- prvAutoReloadTimerCallback ); /* The callback function to be used by the software timer being created. */
-
- /* Check the timers were created. */
- if( ( xOneShotTimer != NULL ) && ( xAutoReloadTimer != NULL ) )
- {
- /* Start the software timers, using a block time of 0 (no block time).
- The scheduler has not been started yet so any block time specified here
- would be ignored anyway. */
- xTimer1Started = xTimerStart( xOneShotTimer, 0 );
- xTimer2Started = xTimerStart( xAutoReloadTimer, 0 );
-
- /* The implementation of xTimerStart() uses the timer command queue, and
- xTimerStart() will fail if the timer command queue gets full. The timer
- service task does not get created until the scheduler is started, so all
- commands sent to the command queue will stay in the queue until after
- the scheduler has been started. Check both calls to xTimerStart()
- passed. */
- if( ( xTimer1Started != pdPASS ) || ( xTimer2Started != pdPASS ) )
- {
- vPrintf("CreateSoftwareTimerTasks xTimerStart failed \r\n");
- }
- }
- else
- {
- vPrintf("CreateSoftwareTimerTasks xTimerCreate failed \r\n");
- }
+ BaseType_t xTimer1Started, xTimer2Started;
+
+ /* Create the one shot software timer, storing the handle to the created
+ software timer in xOneShotTimer. */
+ xOneShotTimer = xTimerCreate("Create OneShot", /* Text name for the software timer - not used by FreeRTOS. */
+ ONE_SHOT_TIMER_PERIOD, /* The software timer's period in ticks. */
+ pdFALSE, /* Setting uxAutoRealod to pdFALSE creates a one-shot software timer. */
+ 0, /* This example does not use the timer id. */
+ prvOneShotTimerCallback); /* The callback function to be used by the software timer being created. */
+
+ /* Create the auto-reload software timer, storing the handle to the created
+ software timer in xAutoReloadTimer. */
+ xAutoReloadTimer = xTimerCreate("Create AutoReload", /* Text name for the software timer - not used by FreeRTOS. */
+ AUTO_RELOAD_TIMER_PERIOD, /* The software timer's period in ticks. */
+ pdTRUE, /* Set uxAutoRealod to pdTRUE to create an auto-reload software timer. */
+ 0, /* This example does not use the timer id. */
+ prvAutoReloadTimerCallback); /* The callback function to be used by the software timer being created. */
+
+ /* Check the timers were created. */
+ if ((xOneShotTimer != NULL) && (xAutoReloadTimer != NULL))
+ {
+ /* Start the software timers, using a block time of 0 (no block time).
+ The scheduler has not been started yet so any block time specified here
+ would be ignored anyway. */
+ xTimer1Started = xTimerStart(xOneShotTimer, 0);
+ xTimer2Started = xTimerStart(xAutoReloadTimer, 0);
+
+ /* The implementation of xTimerStart() uses the timer command queue, and
+ xTimerStart() will fail if the timer command queue gets full. The timer
+ service task does not get created until the scheduler is started, so all
+ commands sent to the command queue will stay in the queue until after
+ the scheduler has been started. Check both calls to xTimerStart()
+ passed. */
+ if ((xTimer1Started != pdPASS) || (xTimer2Started != pdPASS))
+ {
+ vPrintf("CreateSoftwareTimerTasks xTimerStart failed \r\n");
+ }
+ }
+ else
+ {
+ vPrintf("CreateSoftwareTimerTasks xTimerCreate failed \r\n");
+ }
}
void DeleteTimerTasks(void)
{
- BaseType_t xReturn = pdFAIL;
- xReturn = xTimerDelete(xOneShotTimer, 0);
- if(xReturn != pdPASS)
- {
- vPrintf("DeleteSoftwareTimerTasks xTimerDelete OneShot failed.\r\n");
- }
- else
- {
- vPrintf("DeleteSoftwareTimerTasks xTimerDelete OneShot success.\r\n");
- }
-
- xReturn = xTimerDelete(xAutoReloadTimer, 0);
- if(xReturn != pdPASS)
- {
- vPrintf("DeleteSoftwareTimerTasks xTimerDelete AutoReload failed.\r\n");
- }
- else
- {
- vPrintf("DeleteSoftwareTimerTasks xTimerDelete AutoReload success.\r\n");
- }
+ BaseType_t xReturn = pdFAIL;
+ xReturn = xTimerDelete(xOneShotTimer, 0);
+ if (xReturn != pdPASS)
+ {
+ vPrintf("DeleteSoftwareTimerTasks xTimerDelete OneShot failed.\r\n");
+ }
+ else
+ {
+ vPrintf("DeleteSoftwareTimerTasks xTimerDelete OneShot success.\r\n");
+ }
+
+ xReturn = xTimerDelete(xAutoReloadTimer, 0);
+ if (xReturn != pdPASS)
+ {
+ vPrintf("DeleteSoftwareTimerTasks xTimerDelete AutoReload failed.\r\n");
+ }
+ else
+ {
+ vPrintf("DeleteSoftwareTimerTasks xTimerDelete AutoReload success.\r\n");
+ }
}
/*-----------------------------------------------------------*/
-static void prvOneShotTimerCallback( TimerHandle_t xTimer )
+static void prvOneShotTimerCallback(TimerHandle_t xTimer)
{
- static TickType_t xTimeNow;
+ static TickType_t xTimeNow;
- /* Obtain the current tick count. */
- xTimeNow = xTaskGetTickCount();
+ /* Obtain the current tick count. */
+ xTimeNow = xTaskGetTickCount();
- /* Output a string to show the time at which the callback was executed. */
- vPrintf( "One-shot timer callback executing %d ticks.\r\n", xTimeNow );
+ /* Output a string to show the time at which the callback was executed. */
+ vPrintf("One-shot timer callback executing %d ticks.\r\n", xTimeNow);
}
/*-----------------------------------------------------------*/
-static void prvAutoReloadTimerCallback( TimerHandle_t xTimer )
+static void prvAutoReloadTimerCallback(TimerHandle_t xTimer)
{
- static TickType_t xTimeNow;
+ static TickType_t xTimeNow;
- /* Obtain the current tick count. */
- xTimeNow = xTaskGetTickCount();
+ /* Obtain the current tick count. */
+ xTimeNow = xTaskGetTickCount();
- /* Output a string to show the time at which the callback was executed. */
- vPrintf( "Auto-reload timer callback executing %d ticks.\r\n", xTimeNow );
+ /* Output a string to show the time at which the callback was executed. */
+ vPrintf("Auto-reload timer callback executing %d ticks.\r\n", xTimeNow);
}
/*-----------------------------------------------------------*/
diff --git a/example/freertos_feature/software_timer/src/software_timer_cmd.c b/example/freertos_feature/software_timer/src/software_timer_cmd.c
index dbd12cbaf115bb613f9c2b850500061bf70ec138..c5e0904ac5b98e2f5fd53a8b8d7a4e8ea2e3e0ef 100644
--- a/example/freertos_feature/software_timer/src/software_timer_cmd.c
+++ b/example/freertos_feature/software_timer/src/software_timer_cmd.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: software_timer_cmd.c
* Date: 2022-06-17 10:41:45
* LastEditTime: 2022-06-17 10:41:45
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
+ * Description: This file is for software timer command interface
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2022/08/09 first commit
*/
#include "shell.h"
#include
@@ -34,15 +35,15 @@ typedef enum
static void SoftwareTimerCmdUsage(void)
{
- printf("usage:\r\n");
+ printf("Usage:\r\n");
printf(" timer cre \r\n");
- printf(" -- create and starts a one-shot timer and an auto-reload timer\r\n");
+ printf(" -- Create and starts a one-shot timer and an auto-reload timer.\r\n");
printf(" timer del \r\n");
- printf(" -- delete and starts a one-shot timer and an auto-reload timer\r\n");
+ printf(" -- Delete and starts a one-shot timer and an auto-reload timer.\r\n");
printf(" timer reset_cre \r\n");
- printf(" -- create software timer use timer id and reset timer\r\n");
+ printf(" -- Create software timer use timer id and reset timer.\r\n");
printf(" timer reset_del \r\n");
- printf(" -- del software timer use timer id and reset timer\r\n");
+ printf(" -- Del software timer use timer id and reset timer.\r\n");
}
@@ -58,55 +59,55 @@ int SoftwareTimerCmd(int argc, char *argv[])
if (!strcmp(argv[1], "cre"))
{
- if(create_flg[CREATE_START_TASK_INDEX] == 0)
+ if (create_flg[CREATE_START_TASK_INDEX] == 0)
{
CreateTimerTasks();
create_flg[CREATE_START_TASK_INDEX] = 1;
}
else
{
- printf("Please use del cmd first \r\n");
+ printf("Please use del cmd first. \r\n");
}
}
else if (!strcmp(argv[1], "del"))
{
- if(create_flg[CREATE_START_TASK_INDEX] == 1)
+ if (create_flg[CREATE_START_TASK_INDEX] == 1)
{
DeleteTimerTasks();
create_flg[CREATE_START_TASK_INDEX] = 0;
- }
+ }
else
{
- printf("Please use cre cmd first \r\n");
+ printf("Please use cre cmd first. \r\n");
}
}
else if (!strcmp(argv[1], "reset_cre"))
{
- if(create_flg[TIMER_ID_TASK_INDEX] == 0)
+ if (create_flg[TIMER_ID_TASK_INDEX] == 0)
{
CreateTimerResetTasks();
create_flg[TIMER_ID_TASK_INDEX] = 1;
}
else
{
- printf("Please use reset_del cmd first \r\n");
+ printf("Please use reset_del cmd first. \r\n");
}
}
else if (!strcmp(argv[1], "reset_del"))
{
- if(create_flg[TIMER_ID_TASK_INDEX] == 1)
+ if (create_flg[TIMER_ID_TASK_INDEX] == 1)
{
DeleteTimerResetTasks();
create_flg[TIMER_ID_TASK_INDEX] = 0;
- }
+ }
else
{
- printf("Please use reset_cre cmd first \r\n");
+ printf("Please use reset_cre cmd first. \r\n");
}
}
else
{
- printf("Error: Invalid arguments \r\n");
+ printf("Error: Invalid arguments. \r\n");
SoftwareTimerCmdUsage();
}
return 0;
diff --git a/example/freertos_feature/software_timer/src/timer_id_and_reset.c b/example/freertos_feature/software_timer/src/timer_id_and_reset.c
index f52c51204f4f83c9c2dc8da3f38a978cd11b6a1d..bbd32f442f42d33ec5231b66f86e3aa3eefc4d56 100644
--- a/example/freertos_feature/software_timer/src/timer_id_and_reset.c
+++ b/example/freertos_feature/software_timer/src/timer_id_and_reset.c
@@ -1,8 +1,8 @@
/*
-This example demonstrates:
+This example demonstrates:
how to use the software timer ID as timer specific storage;
each software timer keeps a count of the number of times it has expired in its own ID;
-Auto reload timer will stop after it has executed 5 times which period is 1000,
+Auto reload timer will stop after it has executed 5 times which period is 1000,
when the one shot timer is run after 9333 ticks, it will reset auto reload timer.
*/
#include "FreeRTOS.h"
@@ -10,15 +10,15 @@ when the one shot timer is run after 9333 ticks, it will reset auto reload timer
#include "timers.h"
/* The periods assigned to the one-shot and auto-reload timers respectively. */
-#define ONE_SHOT_TIMER_PERIOD ( pdMS_TO_TICKS( 12000UL ) )
-#define AUTO_RELOAD_TIMER_PERIOD ( pdMS_TO_TICKS( 3000UL ) )
+#define ONE_SHOT_TIMER_PERIOD ( pdMS_TO_TICKS( 12000UL ) )
+#define AUTO_RELOAD_TIMER_PERIOD ( pdMS_TO_TICKS( 3000UL ) )
/*-----------------------------------------------------------*/
/*
* The callback function that is used by both timers.
*/
-static void prvTimerCallback( TimerHandle_t xTimer );
+static void prvTimerCallback(TimerHandle_t xTimer);
/*-----------------------------------------------------------*/
@@ -26,122 +26,122 @@ static void prvTimerCallback( TimerHandle_t xTimer );
given file scope. */
static TimerHandle_t xAutoReloadTimer, xOneShotTimer;
-void CreateTimerResetTasks( void )
+void CreateTimerResetTasks(void)
{
-BaseType_t xTimer1Started, xTimer2Started;
-
- /* Create the one shot timer, storing the handle to the created timer in
- xOneShotTimer. */
- xOneShotTimer = xTimerCreate( "Reset OneShot", /* Text name for the timer - not used by FreeRTOS. */
- ONE_SHOT_TIMER_PERIOD, /* The timer's period in ticks. */
- pdFALSE, /* Set uxAutoRealod to pdFALSE to create a one-shot timer. */
- 0, /* The timer ID is initialised to 0. */
- prvTimerCallback ); /* The callback function to be used by the timer being created. */
-
- /* Create the auto-reload, storing the handle to the created timer in
- xAutoReloadTimer. */
- xAutoReloadTimer = xTimerCreate( "Reset AutoReload", /* Text name for the timer - not used by FreeRTOS. */
- AUTO_RELOAD_TIMER_PERIOD, /* The timer's period in ticks. */
- pdTRUE, /* Set uxAutoRealod to pdTRUE to create an auto-reload timer. */
- 0, /* The timer ID is initialised to 0. */
- prvTimerCallback ); /* The callback function to be used by the timer being created. */
-
- /* Check the timers were created. */
- if( ( xOneShotTimer != NULL ) && ( xAutoReloadTimer != NULL ) )
- {
- /* Start the timers, using a block time of 0 (no block time). The
- scheduler has not been started yet so any block time specified here
- would be ignored anyway. */
- xTimer1Started = xTimerStart( xOneShotTimer, 0 );
- xTimer2Started = xTimerStart( xAutoReloadTimer, 0 );
-
- /* The implementation of xTimerStart() uses the timer command queue, and
- xTimerStart() will fail if the timer command queue gets full. The timer
- service task does not get created until the scheduler is started, so all
- commands sent to the command queue will stay in the queue until after
- the scheduler has been started. Check both calls to xTimerStart()
- passed. */
- if( ( xTimer1Started != pdPASS ) || ( xTimer2Started != pdPASS ) )
- {
- vPrintString("CreateSoftwareTimerTasks xTimerStart failed \r\n");
- }
- }
- else
- {
- vPrintString("CreateSoftwareTimerTasks xTimerCreate failed \r\n");
- }
+ BaseType_t xTimer1Started, xTimer2Started;
+
+ /* Create the one shot timer, storing the handle to the created timer in
+ xOneShotTimer. */
+ xOneShotTimer = xTimerCreate("Reset OneShot", /* Text name for the timer - not used by FreeRTOS. */
+ ONE_SHOT_TIMER_PERIOD, /* The timer's period in ticks. */
+ pdFALSE, /* Set uxAutoRealod to pdFALSE to create a one-shot timer. */
+ 0, /* The timer ID is initialised to 0. */
+ prvTimerCallback); /* The callback function to be used by the timer being created. */
+
+ /* Create the auto-reload, storing the handle to the created timer in
+ xAutoReloadTimer. */
+ xAutoReloadTimer = xTimerCreate("Reset AutoReload", /* Text name for the timer - not used by FreeRTOS. */
+ AUTO_RELOAD_TIMER_PERIOD, /* The timer's period in ticks. */
+ pdTRUE, /* Set uxAutoRealod to pdTRUE to create an auto-reload timer. */
+ 0, /* The timer ID is initialised to 0. */
+ prvTimerCallback); /* The callback function to be used by the timer being created. */
+
+ /* Check the timers were created. */
+ if ((xOneShotTimer != NULL) && (xAutoReloadTimer != NULL))
+ {
+ /* Start the timers, using a block time of 0 (no block time). The
+ scheduler has not been started yet so any block time specified here
+ would be ignored anyway. */
+ xTimer1Started = xTimerStart(xOneShotTimer, 0);
+ xTimer2Started = xTimerStart(xAutoReloadTimer, 0);
+
+ /* The implementation of xTimerStart() uses the timer command queue, and
+ xTimerStart() will fail if the timer command queue gets full. The timer
+ service task does not get created until the scheduler is started, so all
+ commands sent to the command queue will stay in the queue until after
+ the scheduler has been started. Check both calls to xTimerStart()
+ passed. */
+ if ((xTimer1Started != pdPASS) || (xTimer2Started != pdPASS))
+ {
+ vPrintString("CreateSoftwareTimerTasks xTimerStart failed \r\n");
+ }
+ }
+ else
+ {
+ vPrintString("CreateSoftwareTimerTasks xTimerCreate failed \r\n");
+ }
}
void DeleteTimerResetTasks(void)
{
- BaseType_t xReturn = pdFAIL;
- xReturn = xTimerDelete(xOneShotTimer, 0);
- if(xReturn != pdPASS)
- {
- vPrintString("DeleteTimerResetTasks xTimerDelete OneShot failed.\r\n");
- }
- else
- {
- vPrintString("DeleteTimerResetTasks xTimerDelete OneShot success.\r\n");
- }
-
- xReturn = xTimerDelete(xAutoReloadTimer, 0);
- if(xReturn != pdPASS)
- {
- vPrintString("DeleteTimerResetTasks xTimerDelete AutoReload failed.\r\n");
- }
- else
- {
- vPrintString("DeleteTimerResetTasks xTimerDelete AutoReload success.\r\n");
- }
+ BaseType_t xReturn = pdFAIL;
+ xReturn = xTimerDelete(xOneShotTimer, 0);
+ if (xReturn != pdPASS)
+ {
+ vPrintString("DeleteTimerResetTasks xTimerDelete OneShot failed.\r\n");
+ }
+ else
+ {
+ vPrintString("DeleteTimerResetTasks xTimerDelete OneShot success.\r\n");
+ }
+
+ xReturn = xTimerDelete(xAutoReloadTimer, 0);
+ if (xReturn != pdPASS)
+ {
+ vPrintString("DeleteTimerResetTasks xTimerDelete AutoReload failed.\r\n");
+ }
+ else
+ {
+ vPrintString("DeleteTimerResetTasks xTimerDelete AutoReload success.\r\n");
+ }
}
/*-----------------------------------------------------------*/
-static void prvTimerCallback( TimerHandle_t xTimer )
+static void prvTimerCallback(TimerHandle_t xTimer)
{
- TickType_t xTimeNow;
- uint32_t ulExecutionCount;
+ TickType_t xTimeNow;
+ uint32_t ulExecutionCount;
- /* The count of the number of times this software timer has expired is
- stored in the timer's ID. Obtain the ID, increment it, then save it as the
- new ID value. The ID is a void pointer, so is cast to a uint32_t. */
- ulExecutionCount = ( uint32_t )(uintptr) pvTimerGetTimerID( xTimer );
- vPrintStringAndNumber( "pvTimerGetTimerID = ", ulExecutionCount );
- ulExecutionCount++;
- vTimerSetTimerID( xTimer, ( void * )(uintptr)ulExecutionCount );
+ /* The count of the number of times this software timer has expired is
+ stored in the timer's ID. Obtain the ID, increment it, then save it as the
+ new ID value. The ID is a void pointer, so is cast to a uint32_t. */
+ ulExecutionCount = (uint32_t)(uintptr) pvTimerGetTimerID(xTimer);
+ vPrintStringAndNumber("pvTimerGetTimerID = ", ulExecutionCount);
+ ulExecutionCount++;
+ vTimerSetTimerID(xTimer, (void *)(uintptr)ulExecutionCount);
- /* Obtain the current tick count. */
- xTimeNow = xTaskGetTickCount();
+ /* Obtain the current tick count. */
+ xTimeNow = xTaskGetTickCount();
/* The handle of the one-shot timer was stored in xOneShotTimer when the
- timer was created. Compare the handle passed into this function with
- xOneShotTimer to determine if it was the one-shot or auto-reload timer that
- expired, then output a string to show the time at which the callback was
- executed. */
- if( xTimer == xOneShotTimer )
- {
- vPrintStringAndNumber( "One-shot timer callback executing", xTimeNow );
- vPrintString( "One-shot timer reset Auto-reload timer ");
- xTimerReset( xAutoReloadTimer, 0 );
- }
- else
- {
+ timer was created. Compare the handle passed into this function with
+ xOneShotTimer to determine if it was the one-shot or auto-reload timer that
+ expired, then output a string to show the time at which the callback was
+ executed. */
+ if (xTimer == xOneShotTimer)
+ {
+ vPrintStringAndNumber("One-shot timer callback executing", xTimeNow);
+ vPrintString("One-shot timer reset Auto-reload timer ");
+ xTimerReset(xAutoReloadTimer, 0);
+ }
+ else
+ {
/* xTimer did not equal xOneShotTimer, so it must be the auto-reload
- timer that expired. */
- vPrintStringAndNumber( "Auto-reload timer callback executing", xTimeNow );
-
- if( ulExecutionCount == 3 )
- {
- /* Stop the auto-reload timer after it has executed 5 times. This
- callback function executes in the context of the RTOS daemon task so
- must not call any functions that might place the daemon task into
- the Blocked state. Therefore a block time of 0 is used. */
- xTimerStop( xTimer, 0 );
- vPrintString( "Auto-reload timer stopped!!! ");
- }
- }
+ timer that expired. */
+ vPrintStringAndNumber("Auto-reload timer callback executing", xTimeNow);
+
+ if (ulExecutionCount == 3)
+ {
+ /* Stop the auto-reload timer after it has executed 5 times. This
+ callback function executes in the context of the RTOS daemon task so
+ must not call any functions that might place the daemon task into
+ the Blocked state. Therefore a block time of 0 is used. */
+ xTimerStop(xTimer, 0);
+ vPrintString("Auto-reload timer stopped!!! ");
+ }
+ }
}
/*-----------------------------------------------------------*/
diff --git a/example/freertos_feature/task/configs/d2000_aarch32_eg_configs b/example/freertos_feature/task/configs/d2000_aarch32_eg_configs
index 464a31af9bb3111d91fad1699c91b41de9317519..a16785ad54af36153e37c6b401b31d847493f42d 100644
--- a/example/freertos_feature/task/configs/d2000_aarch32_eg_configs
+++ b/example/freertos_feature/task/configs/d2000_aarch32_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -111,6 +112,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -147,6 +157,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -168,12 +179,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -185,14 +190,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -210,4 +233,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/task/configs/d2000_aarch64_eg_configs b/example/freertos_feature/task/configs/d2000_aarch64_eg_configs
index 64e6b4b7a6ae1664e07af0d9c84a440dabc972c1..4731ef2f28f88014b15fe54b9662689cee32274f 100644
--- a/example/freertos_feature/task/configs/d2000_aarch64_eg_configs
+++ b/example/freertos_feature/task/configs/d2000_aarch64_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -107,6 +108,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -143,6 +153,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -164,12 +175,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -181,14 +186,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -206,4 +229,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/task/configs/e2000d_aarch32_eg_configs b/example/freertos_feature/task/configs/e2000d_aarch32_eg_configs
index fc31cd0b27be11b5e09995278c509299162fa4e9..229022705bc103e6f867abfbce05526a6d480085 100644
--- a/example/freertos_feature/task/configs/e2000d_aarch32_eg_configs
+++ b/example/freertos_feature/task/configs/e2000d_aarch32_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -111,6 +112,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -147,6 +157,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -168,12 +179,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -185,14 +190,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -210,4 +233,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/task/configs/e2000d_aarch64_eg_configs b/example/freertos_feature/task/configs/e2000d_aarch64_eg_configs
index 7e2efa4fba523e780f910a826b7f13a9552e4bbe..f3181d358e9c6ec7c5452447c06782bac1a30a91 100644
--- a/example/freertos_feature/task/configs/e2000d_aarch64_eg_configs
+++ b/example/freertos_feature/task/configs/e2000d_aarch64_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -107,6 +108,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -143,6 +153,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -164,12 +175,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -181,14 +186,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -206,4 +229,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/task/configs/e2000q_aarch32_eg_configs b/example/freertos_feature/task/configs/e2000q_aarch32_eg_configs
index 1b53ed9171a1fca357a6362a54b3f83039f9a6fd..17921f8f2b4437fb5589033a3fed0b99fdb9a1fd 100644
--- a/example/freertos_feature/task/configs/e2000q_aarch32_eg_configs
+++ b/example/freertos_feature/task/configs/e2000q_aarch32_eg_configs
@@ -2,7 +2,7 @@
#
# Freertos Configuration
#
-CONFIG_TARGET_NAME="e2000d_freertos_a32"
+CONFIG_TARGET_NAME="e2000q_freertos_a32"
# end of Freertos Configuration
#
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -111,6 +112,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -147,6 +157,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -168,12 +179,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -185,14 +190,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -210,4 +233,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/task/configs/e2000q_aarch64_eg_configs b/example/freertos_feature/task/configs/e2000q_aarch64_eg_configs
index 506efc21145e3c62ebe1b565aaebe9ed68d02d8b..b76f48eeb64d212ce5d619d92de1456e5506e1db 100644
--- a/example/freertos_feature/task/configs/e2000q_aarch64_eg_configs
+++ b/example/freertos_feature/task/configs/e2000q_aarch64_eg_configs
@@ -2,7 +2,7 @@
#
# Freertos Configuration
#
-CONFIG_TARGET_NAME="e2000d_freertos_a64"
+CONFIG_TARGET_NAME="e2000q_freertos_a64"
# end of Freertos Configuration
#
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -107,6 +108,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -143,6 +153,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -164,12 +175,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -181,14 +186,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -206,4 +229,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/task/configs/ft2004_aarch32_eg_configs b/example/freertos_feature/task/configs/ft2004_aarch32_eg_configs
index 4c5b2c49d6edae2d8456f3d083606aa9f62a3361..f0510b59527c3bb025d72f8ccca16b539ea7c56c 100644
--- a/example/freertos_feature/task/configs/ft2004_aarch32_eg_configs
+++ b/example/freertos_feature/task/configs/ft2004_aarch32_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -111,6 +112,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -147,6 +157,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -168,12 +179,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -185,14 +190,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -210,4 +233,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/task/configs/ft2004_aarch64_eg_configs b/example/freertos_feature/task/configs/ft2004_aarch64_eg_configs
index da9c1f8182b98ecf314c436f79ccbf0a31c79673..d99e8ace055af1b9260a237f1ce8ba6374d9f8e3 100644
--- a/example/freertos_feature/task/configs/ft2004_aarch64_eg_configs
+++ b/example/freertos_feature/task/configs/ft2004_aarch64_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -107,6 +108,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -143,6 +153,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -164,12 +175,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -181,14 +186,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -206,4 +229,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/task/inc/feature_task.h b/example/freertos_feature/task/inc/feature_task.h
index 71ee9dd933e744b1c30d0c081d72f463c9fc4d7c..764ad76013847b1a05cc22b9e2d8f5b03407f54d 100644
--- a/example/freertos_feature/task/inc/feature_task.h
+++ b/example/freertos_feature/task/inc/feature_task.h
@@ -1,30 +1,36 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: feature_task.h
* Date: 2022-06-17 10:42:40
* LastEditTime: 2022-06-17 10:42:40
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
+ * Description: This file is for task function define
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2022/08/09 first commit
*/
#ifndef FEATURE_TASK_H
#define FEATURE_TASK_H
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
/* creating task */
void CreateTasks(void);
void DeleteTasks(void);
@@ -60,4 +66,8 @@ void DeleteTasksForForIdleTask(void);
void CreateTasksForChangePriorityTest(void);
void DeleteTasksForChangePriorityTest(void);
+#ifdef __cplusplus
+}
+#endif
+
#endif // !
\ No newline at end of file
diff --git a/example/freertos_feature/task/main.c b/example/freertos_feature/task/main.c
index f376d838205fdb1a0ea7cf3bf6d192350dc0ad4f..f065deb7d9630ee7a295a70368e884973fa76077 100644
--- a/example/freertos_feature/task/main.c
+++ b/example/freertos_feature/task/main.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: main.c
* Date: 2022-06-17 08:17:59
* LastEditTime: 2022-06-17 08:17:59
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
+ * Description: This file is for task example that running shell task and open scheduler
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2022/08/09 first commit
*/
#include "shell.h"
@@ -30,13 +31,15 @@ int main(void)
BaseType_t ret;
ret = LSUserShellTask() ;
- if(ret != pdPASS)
+ if (ret != pdPASS)
+ {
goto FAIL_EXIT;
+ }
- vTaskStartScheduler(); /* 启动任务,开启调度 */
+ vTaskStartScheduler(); /* 启动任务,开启调度 */
while (1); /* 正常不会执行到这里 */
-
+
FAIL_EXIT:
- printf("failed 0x%x \r\n", ret);
+ printf("failed 0x%x. \r\n", ret);
return 0;
}
diff --git a/example/freertos_feature/task/sdkconfig b/example/freertos_feature/task/sdkconfig
index 506efc21145e3c62ebe1b565aaebe9ed68d02d8b..b76f48eeb64d212ce5d619d92de1456e5506e1db 100644
--- a/example/freertos_feature/task/sdkconfig
+++ b/example/freertos_feature/task/sdkconfig
@@ -2,7 +2,7 @@
#
# Freertos Configuration
#
-CONFIG_TARGET_NAME="e2000d_freertos_a64"
+CONFIG_TARGET_NAME="e2000q_freertos_a64"
# end of Freertos Configuration
#
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -107,6 +108,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -143,6 +153,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -164,12 +175,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -181,14 +186,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -206,4 +229,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/task/sdkconfig.h b/example/freertos_feature/task/sdkconfig.h
index 2ccaa5366aa6f3e1d5c66ad7cf530e14cd54c5cb..0bbbb8929b8671f89d0292101840924d50219176 100644
--- a/example/freertos_feature/task/sdkconfig.h
+++ b/example/freertos_feature/task/sdkconfig.h
@@ -3,7 +3,7 @@
/* Freertos Configuration */
-#define CONFIG_TARGET_NAME "e2000d_freertos_a64"
+#define CONFIG_TARGET_NAME "e2000q_freertos_a64"
/* end of Freertos Configuration */
/* Standalone Setting */
@@ -62,6 +62,7 @@
/* CONFIG_USE_ADC is not set */
/* CONFIG_USE_PWM is not set */
/* CONFIG_USE_IPC is not set */
+/* CONFIG_USE_MEDIA is not set */
/* end of Components Configuration */
#define CONFIG_USE_NEW_LIBC
/* end of Standalone Setting */
@@ -98,6 +99,12 @@
/* Compiler Options */
+/* Cross-Compiler Setting */
+
+#define CONFIG_GCC_OPTIMIZE_LEVEL 0
+/* CONFIG_USE_EXT_COMPILER is not set */
+/* CONFIG_USE_KLIN_SYS is not set */
+/* end of Cross-Compiler Setting */
#define CONFIG_OUTPUT_BINARY
/* end of Compiler Options */
/* end of Building Option */
@@ -127,6 +134,7 @@
/* Freertos Eth Drivers */
/* CONFIG_FREERTOS_USE_XMAC is not set */
+/* CONFIG_FREERTOS_USE_GMAC is not set */
/* end of Freertos Eth Drivers */
/* Freertos Gpio Drivers */
@@ -145,11 +153,6 @@
/* CONFIG_FREERTOS_USE_FGDMA is not set */
/* end of Freertos DMA Drivers */
-/* Freertos MMC Drivers */
-
-/* CONFIG_FREERTOS_USE_FSDIO is not set */
-/* end of Freertos MMC Drivers */
-
/* Freertos Adc Drivers */
/* CONFIG_FREERTOS_USE_ADC is not set */
@@ -159,13 +162,28 @@
/* CONFIG_FREERTOS_USE_CAN is not set */
/* end of Freertos Can Drivers */
+
+/* Freertos I2c Drivers */
+
+/* CONFIG_FREERTOS_USE_I2C is not set */
+/* end of Freertos I2c Drivers */
+
+/* Freertos Mio Drivers */
+
+/* CONFIG_FREERTOS_USE_MIO is not set */
+/* end of Freertos Mio Drivers */
+
+/* Freertos Timer Drivers */
+
+/* CONFIG_FREERTOS_USE_TIMER is not set */
+/* end of Freertos Timer Drivers */
/* end of Component Configuration */
-/* FreeRTOS Setting */
+/* Third-Party Configuration */
/* CONFIG_USE_LWIP is not set */
#define CONFIG_USE_BACKTRACE
-/* CONFIG_USE_FATFS is not set */
+/* CONFIG_USE_FATFS_0_1_4 is not set */
/* CONFIG_USE_SFUD is not set */
/* CONFIG_USE_SPIFFS is not set */
/* CONFIG_USE_AMP is not set */
@@ -181,6 +199,28 @@
#define CONFIG_USE_TLSF
/* CONFIG_USE_SDMMC_CMD is not set */
/* CONFIG_USE_CHERRY_USB is not set */
-/* end of FreeRTOS Setting */
+/* end of Third-Party Configuration */
+
+/* Kernel Configuration */
+
+#define CONFIG_FREERTOS_OPTIMIZED_SCHEDULER
+#define CONFIG_FREERTOS_HZ 1000
+#define CONFIG_FREERTOS_MAX_PRIORITIES 32
+#define CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES 13
+#define CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES 11
+#define CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS 1
+#define CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE 1024
+#define CONFIG_FREERTOS_MAX_TASK_NAME_LEN 32
+#define CONFIG_FREERTOS_TIMER_TASK_PRIORITY 1
+#define CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH 2048
+#define CONFIG_FREERTOS_TIMER_QUEUE_LENGTH 10
+#define CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE 0
+#define CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS
+#define CONFIG_FREERTOS_USE_TRACE_FACILITY
+#define CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS
+/* CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set */
+#define CONFIG_FREERTOS_TOTAL_HEAP_SIZE 10240
+#define CONFIG_FREERTOS_TASK_FPU_SUPPORT 1
+/* end of Kernel Configuration */
#endif
diff --git a/example/freertos_feature/task/src/block_state.c b/example/freertos_feature/task/src/block_state.c
index 5c243172748ea211e0e9c7a6e3ab7b6400e4f263..0b9ccb2460aa17e84c0ab4d3ece5060d3119ea9a 100644
--- a/example/freertos_feature/task/src/block_state.c
+++ b/example/freertos_feature/task/src/block_state.c
@@ -1,18 +1,18 @@
/*
-This example demonstrates:
+This example demonstrates:
how to make task block state;
*/
#include "FreeRTOSConfig.h"
#include "FreeRTOS.h"
#include "task.h"
-#define TASK_STACK_SIZE 1024
+#define TASK_STACK_SIZE 1024
static xTaskHandle xtask1_handle;
static xTaskHandle xtask2_handle;
/* The task function. */
-static void vTaskFunction( void *pvParameters );
+static void vTaskFunction(void *pvParameters);
/* Define the strings that will be passed in as the task parameters. These are
defined const and off the stack to ensure they remain valid when the tasks are
@@ -22,28 +22,28 @@ static const char *pcTextForTask2 = "Block Task 2 is running\r\n";
/*-----------------------------------------------------------*/
-void CreateTasksForBlockTest( void )
+void CreateTasksForBlockTest(void)
{
- /* Create the first task at priority 1... */
- xTaskCreate( vTaskFunction, "Block Task 1", TASK_STACK_SIZE, (void*)pcTextForTask1, 1, &xtask1_handle );
+ /* Create the first task at priority 1... */
+ xTaskCreate(vTaskFunction, "Block Task 1", TASK_STACK_SIZE, (void *)pcTextForTask1, 1, &xtask1_handle);
+
+ /* ... and the second task at priority 2. The priority is the second to
+ last parameter. */
+ xTaskCreate(vTaskFunction, "Block Task 2", TASK_STACK_SIZE, (void *)pcTextForTask2, 2, &xtask2_handle);
- /* ... and the second task at priority 2. The priority is the second to
- last parameter. */
- xTaskCreate( vTaskFunction, "Block Task 2", TASK_STACK_SIZE, (void*)pcTextForTask2, 2, &xtask2_handle );
-
}
void DeleteTasksForBlockTest(void)
{
- if(xtask1_handle)
+ if (xtask1_handle)
{
vTaskDelete(xtask1_handle);
vPrintString("DeleteTasksForBlockTest Task parameter 1 deletion \r\n");
}
- if(xtask2_handle)
+ if (xtask2_handle)
{
vTaskDelete(xtask2_handle);
vPrintString("DeleteTasksForBlockTest Task parameter 2 deletion \r\n");
@@ -52,27 +52,27 @@ void DeleteTasksForBlockTest(void)
/*-----------------------------------------------------------*/
-static void vTaskFunction( void *pvParameters )
+static void vTaskFunction(void *pvParameters)
{
char *pcTaskName;
- const TickType_t xDelay = pdMS_TO_TICKS( 3000UL );
-
- /* The string to print out is passed in via the parameter. Cast this to a
- character pointer. */
- pcTaskName = ( char * ) pvParameters;
-
- /* As per most tasks, this task is implemented in an infinite loop. */
- for( ;; )
- {
- /* Print out the name of this task. */
- vPrintString( pcTaskName );
-
- /* Delay for a period. This time a call to vTaskDelay() is used which
- places the task into the Blocked state until the delay period has
- expired. The parameter takes a time specified in 'ticks', and the
- pdMS_TO_TICKS() macro is used (where the xDelay constant is
- declared) to convert 3000 milliseconds into an equivalent time in
- ticks. */
- vTaskDelay( xDelay);
- }
+ const TickType_t xDelay = pdMS_TO_TICKS(3000UL);
+
+ /* The string to print out is passed in via the parameter. Cast this to a
+ character pointer. */
+ pcTaskName = (char *) pvParameters;
+
+ /* As per most tasks, this task is implemented in an infinite loop. */
+ for (;;)
+ {
+ /* Print out the name of this task. */
+ vPrintString(pcTaskName);
+
+ /* Delay for a period. This time a call to vTaskDelay() is used which
+ places the task into the Blocked state until the delay period has
+ expired. The parameter takes a time specified in 'ticks', and the
+ pdMS_TO_TICKS() macro is used (where the xDelay constant is
+ declared) to convert 3000 milliseconds into an equivalent time in
+ ticks. */
+ vTaskDelay(xDelay);
+ }
}
diff --git a/example/freertos_feature/task/src/change_priority.c b/example/freertos_feature/task/src/change_priority.c
index cf86ab80699bbb3a8f499b1b59e7e419c7322df5..d62ead9d334b340df4e712f72239da08af6174b6 100644
--- a/example/freertos_feature/task/src/change_priority.c
+++ b/example/freertos_feature/task/src/change_priority.c
@@ -1,15 +1,15 @@
/*
-This example demonstrates:
+This example demonstrates:
how to change task priority;
*/
#include "FreeRTOS.h"
#include "task.h"
-#define TASK_STACK_SIZE 1024
+#define TASK_STACK_SIZE 1024
/* The two task functions. */
-static void vTask1( void *pvParameters );
-static void vTask2( void *pvParameters );
+static void vTask1(void *pvParameters);
+static void vTask2(void *pvParameters);
/* Used to hold the handle. */
TaskHandle_t xtask1_handle;
@@ -17,32 +17,32 @@ TaskHandle_t xtask2_handle;
/*-----------------------------------------------------------*/
-void CreateTasksForChangePriorityTest( void )
+void CreateTasksForChangePriorityTest(void)
{
- /* Create the first task at priority 2. This time the task parameter is
- not used and is set to NULL. The task handle is also not used so likewise
- is also set to NULL. */
- xTaskCreate( vTask1, "ChangePriority Task 1", TASK_STACK_SIZE, NULL, 2, &xtask1_handle );
- /* The task is created at priority 2 ^. */
-
- /* Create the second task at priority 1 - which is lower than the priority
- given to Task1. Again the task parameter is not used so is set to NULL -
- BUT this time we want to obtain a handle to the task so pass in the address
- of the xtask2_handle variable. */
- xTaskCreate( vTask2, "ChangePriority Task 2", TASK_STACK_SIZE, NULL, 1, &xtask2_handle );
- /* The task handle is the last parameter ^^^^^^^^^^^^^ */
+ /* Create the first task at priority 2. This time the task parameter is
+ not used and is set to NULL. The task handle is also not used so likewise
+ is also set to NULL. */
+ xTaskCreate(vTask1, "ChangePriority Task 1", TASK_STACK_SIZE, NULL, 2, &xtask1_handle);
+ /* The task is created at priority 2 ^. */
+
+ /* Create the second task at priority 1 - which is lower than the priority
+ given to Task1. Again the task parameter is not used so is set to NULL -
+ BUT this time we want to obtain a handle to the task so pass in the address
+ of the xtask2_handle variable. */
+ xTaskCreate(vTask2, "ChangePriority Task 2", TASK_STACK_SIZE, NULL, 1, &xtask2_handle);
+ /* The task handle is the last parameter ^^^^^^^^^^^^^ */
}
void DeleteTasksForChangePriorityTest(void)
{
- if(xtask1_handle)
+ if (xtask1_handle)
{
vTaskDelete(xtask1_handle);
vPrintString("ChangePriority Task1 deletion \r\n");
}
- if(xtask2_handle)
+ if (xtask2_handle)
{
vTaskDelete(xtask2_handle);
vPrintString("ChangePriority Task2 deletion \r\n");
@@ -50,66 +50,66 @@ void DeleteTasksForChangePriorityTest(void)
}
/*-----------------------------------------------------------*/
-void vTask1( void *pvParameters )
+void vTask1(void *pvParameters)
{
- UBaseType_t uxPriority;
-
- /* This task will always run before Task2 as it has the higher priority.
- Neither Task1 nor Task2 ever block so both will always be in either the
- Running or the Ready state.
-
- Query the priority at which this task is running - passing in NULL means
- "return our own priority". */
- uxPriority = uxTaskPriorityGet( NULL );
-
- for( ;; )
- {
- /* Print out the name of this task. */
- vPrintf( "ChangePriority Task1 is running, Task1 Priority=%d\r\n", uxPriority );
-
- /* Setting the Task2 priority above the Task1 priority will cause
- Task2 to immediately start running (as then Task2 will have the higher
- priority of the two created tasks). */
- vPrintString( "ChangePriority About to raise the Task2 priority\r\n" );
- vTaskPrioritySet( xtask2_handle, ( uxPriority + 1 ) );
-
- /* Task1 will only run when it has a priority higher than Task2.
- Therefore, for this task to reach this point Task2 must already have
- executed and set its priority back down to 0. */
- vTaskDelay(3000);
- }
+ UBaseType_t uxPriority;
+
+ /* This task will always run before Task2 as it has the higher priority.
+ Neither Task1 nor Task2 ever block so both will always be in either the
+ Running or the Ready state.
+
+ Query the priority at which this task is running - passing in NULL means
+ "return our own priority". */
+ uxPriority = uxTaskPriorityGet(NULL);
+
+ for (;;)
+ {
+ /* Print out the name of this task. */
+ vPrintf("ChangePriority Task1 is running, Task1 Priority=%d\r\n", uxPriority);
+
+ /* Setting the Task2 priority above the Task1 priority will cause
+ Task2 to immediately start running (as then Task2 will have the higher
+ priority of the two created tasks). */
+ vPrintString("ChangePriority About to raise the Task2 priority\r\n");
+ vTaskPrioritySet(xtask2_handle, (uxPriority + 1));
+
+ /* Task1 will only run when it has a priority higher than Task2.
+ Therefore, for this task to reach this point Task2 must already have
+ executed and set its priority back down to 0. */
+ vTaskDelay(3000);
+ }
}
/*-----------------------------------------------------------*/
-void vTask2( void *pvParameters )
+void vTask2(void *pvParameters)
{
- UBaseType_t uxPriority;
-
- /* Task1 will always run before this task as Task1 has the higher priority.
- Neither Task1 nor Task2 ever block so will always be in either the
- Running or the Ready state.
-
- Query the priority at which this task is running - passing in NULL means
- "return our own priority". */
- uxPriority = uxTaskPriorityGet( NULL );
-
- for( ;; )
- {
- /* For this task to reach this point Task1 must have already run and
- set the priority of this task higher than its own.
-
- Print out the name of this task. */
- vPrintf( "ChangePriority Task2 is running, Task2 Priority=%d\r\n", uxPriority);
-
- /* Set our priority back down to its original value. Passing in NULL
- as the task handle means "change our own priority". Setting the
- priority below that of Task1 will cause Task1 to immediately start
- running again. */
- vPrintString( "ChangePriority About to lower the Task2 priority\r\n" );
- vTaskPrioritySet( NULL, ( uxPriority - 2 ) );
- vTaskDelay(3000);
- }
+ UBaseType_t uxPriority;
+
+ /* Task1 will always run before this task as Task1 has the higher priority.
+ Neither Task1 nor Task2 ever block so will always be in either the
+ Running or the Ready state.
+
+ Query the priority at which this task is running - passing in NULL means
+ "return our own priority". */
+ uxPriority = uxTaskPriorityGet(NULL);
+
+ for (;;)
+ {
+ /* For this task to reach this point Task1 must have already run and
+ set the priority of this task higher than its own.
+
+ Print out the name of this task. */
+ vPrintf("ChangePriority Task2 is running, Task2 Priority=%d\r\n", uxPriority);
+
+ /* Set our priority back down to its original value. Passing in NULL
+ as the task handle means "change our own priority". Setting the
+ priority below that of Task1 will cause Task1 to immediately start
+ running again. */
+ vPrintString("ChangePriority About to lower the Task2 priority\r\n");
+ vTaskPrioritySet(NULL, (uxPriority - 2));
+ vTaskDelay(3000);
+ }
}
/*-----------------------------------------------------------*/
diff --git a/example/freertos_feature/task/src/creating_tasks.c b/example/freertos_feature/task/src/creating_tasks.c
index c1d9d1c80c0414ae139f8d827820dd2cf5aa65c2..a38668699515a33e2fa7ea493537755076f0e244 100644
--- a/example/freertos_feature/task/src/creating_tasks.c
+++ b/example/freertos_feature/task/src/creating_tasks.c
@@ -1,47 +1,47 @@
/*
-This example demonstrates:
+This example demonstrates:
how to create and delete tasks;
*/
#include "FreeRTOSConfig.h"
#include "FreeRTOS.h"
#include "task.h"
-#define DELAY_LOOP_COUNT ( 0x1fffffff )
-#define TASK_STACK_SIZE 1024
+#define DELAY_LOOP_COUNT ( 0x1fffffff )
+#define TASK_STACK_SIZE 1024
static xTaskHandle xtask1_handle;
static xTaskHandle xtask2_handle;
/* The task functions. */
-static void vTask1( void *pvParameters );
-static void vTask2( void *pvParameters );
+static void vTask1(void *pvParameters);
+static void vTask2(void *pvParameters);
/*-----------------------------------------------------------*/
-void CreateTasks( void )
+void CreateTasks(void)
{
- /* Create one of the two tasks. */
- xTaskCreate( vTask1, /* Pointer to the function that implements the task. */
- "Create Task 1", /* Text name for the task. This is to facilitate debugging only. */
- TASK_STACK_SIZE, /* Stack depth - most small microcontrollers will use much less stack than this. */
- NULL, /* We are not using the task parameter. */
- 1, /* This task will run at priority 1. */
- &xtask1_handle ); /* We are using the task handle to delete this task. */
+ /* Create one of the two tasks. */
+ xTaskCreate(vTask1, /* Pointer to the function that implements the task. */
+ "Create Task 1", /* Text name for the task. This is to facilitate debugging only. */
+ TASK_STACK_SIZE, /* Stack depth - most small microcontrollers will use much less stack than this. */
+ NULL, /* We are not using the task parameter. */
+ 1, /* This task will run at priority 1. */
+ &xtask1_handle); /* We are using the task handle to delete this task. */
- /* Create the other task in exactly the same way. */
- xTaskCreate( vTask2, "Create Task 2", TASK_STACK_SIZE, NULL, 1, &xtask2_handle );
+ /* Create the other task in exactly the same way. */
+ xTaskCreate(vTask2, "Create Task 2", TASK_STACK_SIZE, NULL, 1, &xtask2_handle);
}
void DeleteTasks(void)
{
- if(xtask1_handle)
+ if (xtask1_handle)
{
vTaskDelete(xtask1_handle);
vPrintString("DeleteTasks Task1 deletion \r\n");
}
- if(xtask2_handle)
+ if (xtask2_handle)
{
vTaskDelete(xtask2_handle);
vPrintString("DeleteTasks Task2 deletion \r\n");
@@ -50,45 +50,45 @@ void DeleteTasks(void)
/*-----------------------------------------------------------*/
-static void vTask1( void *pvParameters )
+static void vTask1(void *pvParameters)
{
- const char *pcTaskName = "Create Task 1 is running\r\n";
- volatile uint32_t ul;
-
- /* As per most tasks, this task is implemented in an infinite loop. */
- for( ;; )
- {
- /* Print out the name of this task. */
- vPrintString( pcTaskName );
-
- /* Delay for a period. */
- for( ul = 0; ul < DELAY_LOOP_COUNT; ul++ )
- {
- /* This loop is just a very crude delay implementation. There is
- nothing to do in here. Later exercises will replace this crude
- loop with a proper delay/sleep function. */
- }
- }
+ const char *pcTaskName = "Create Task 1 is running\r\n";
+ volatile uint32_t ul;
+
+ /* As per most tasks, this task is implemented in an infinite loop. */
+ for (;;)
+ {
+ /* Print out the name of this task. */
+ vPrintString(pcTaskName);
+
+ /* Delay for a period. */
+ for (ul = 0; ul < DELAY_LOOP_COUNT; ul++)
+ {
+ /* This loop is just a very crude delay implementation. There is
+ nothing to do in here. Later exercises will replace this crude
+ loop with a proper delay/sleep function. */
+ }
+ }
}
/*-----------------------------------------------------------*/
-static void vTask2( void *pvParameters )
+static void vTask2(void *pvParameters)
{
const char *pcTaskName = "Create Task 2 is running\r\n";
volatile uint32_t ul;
- /* As per most tasks, this task is implemented in an infinite loop. */
- for( ;; )
- {
- /* Print out the name of this task. */
- vPrintString( pcTaskName );
-
- /* Delay for a period. */
- for( ul = 0; ul < DELAY_LOOP_COUNT; ul++ )
- {
- /* This loop is just a very crude delay implementation. There is
- nothing to do in here. Later exercises will replace this crude
- loop with a proper delay/sleep function. */
- }
- }
+ /* As per most tasks, this task is implemented in an infinite loop. */
+ for (;;)
+ {
+ /* Print out the name of this task. */
+ vPrintString(pcTaskName);
+
+ /* Delay for a period. */
+ for (ul = 0; ul < DELAY_LOOP_COUNT; ul++)
+ {
+ /* This loop is just a very crude delay implementation. There is
+ nothing to do in here. Later exercises will replace this crude
+ loop with a proper delay/sleep function. */
+ }
+ }
}
\ No newline at end of file
diff --git a/example/freertos_feature/task/src/idle_task_hook.c b/example/freertos_feature/task/src/idle_task_hook.c
index 27b1bdc691bdce5a6580f0d5cfb85edeaf182e25..01f9e5ba0ae71b64e8a0efe1ab39fa310ec451b7 100644
--- a/example/freertos_feature/task/src/idle_task_hook.c
+++ b/example/freertos_feature/task/src/idle_task_hook.c
@@ -2,13 +2,13 @@
#include "FreeRTOS.h"
#include "task.h"
-#define TASK_STACK_SIZE 1024
+#define TASK_STACK_SIZE 1024
static xTaskHandle xtask1_handle;
static xTaskHandle xtask2_handle;
/* The task function. */
-static void vTaskFunction( void *pvParameters );
+static void vTaskFunction(void *pvParameters);
/* A variable that is incremented by the idle task hook function. */
static uint32_t ulIdleCycleCount = 0UL;
@@ -25,35 +25,35 @@ void CreateTasksForIdleTask(void)
{
BaseType_t ret;
- /* Create the first task at priority 1... */
- ret = xTaskCreate( vTaskFunction, "Idle Task 1",
- TASK_STACK_SIZE, (void*)pcTextForTask1, 1, &xtask1_handle );
- if(ret != pdPASS)
+ /* Create the first task at priority 1... */
+ ret = xTaskCreate(vTaskFunction, "Idle Task 1",
+ TASK_STACK_SIZE, (void *)pcTextForTask1, 1, &xtask1_handle);
+ if (ret != pdPASS)
{
xtask1_handle = NULL;
vPrintStringAndNumber("Idle Task 1 create failed: ", ret);
}
- /* ... and the second task at priority 2. The priority is the second to
- last parameter. */
- ret = xTaskCreate( vTaskFunction, "Idle Task 2",
- TASK_STACK_SIZE, (void*)pcTextForTask2, 2, &xtask2_handle );
- if(ret != pdPASS)
+ /* ... and the second task at priority 2. The priority is the second to
+ last parameter. */
+ ret = xTaskCreate(vTaskFunction, "Idle Task 2",
+ TASK_STACK_SIZE, (void *)pcTextForTask2, 2, &xtask2_handle);
+ if (ret != pdPASS)
{
xtask1_handle = NULL;
vPrintStringAndNumber("Idle Task 2 create failed: ", ret);
}
-
+
}
void DeleteTasksForForIdleTask(void)
{
- if(xtask1_handle)
+ if (xtask1_handle)
{
vTaskDelete(xtask1_handle);
vPrintString("Idle Task 1 deletion \r\n");
}
- if(xtask2_handle)
+ if (xtask2_handle)
{
vTaskDelete(xtask2_handle);
vPrintString("Idle Task 2 deletion \r\n");
@@ -62,34 +62,34 @@ void DeleteTasksForForIdleTask(void)
/*-----------------------------------------------------------*/
-static void vTaskFunction( void *pvParameters )
+static void vTaskFunction(void *pvParameters)
{
char *pcTaskName;
- const TickType_t xDelay = pdMS_TO_TICKS( 5000UL );
+ const TickType_t xDelay = pdMS_TO_TICKS(5000UL);
- /* The string to print out is passed in via the parameter. Cast this to a
- character pointer. */
- pcTaskName = ( char * ) pvParameters;
+ /* The string to print out is passed in via the parameter. Cast this to a
+ character pointer. */
+ pcTaskName = (char *) pvParameters;
- /* As per most tasks, this task is implemented in an infinite loop. */
- for( ;; )
- {
- /* Print out the name of this task AND the number of times ulIdleCycleCount
+ /* As per most tasks, this task is implemented in an infinite loop. */
+ for (;;)
+ {
+ /* Print out the name of this task AND the number of times ulIdleCycleCount
has been incremented. */
- vPrintf( "%s, count: %lu\n", pcTaskName, ulIdleCycleCount);
+ vPrintf("%s, count: %lu\n", pcTaskName, ulIdleCycleCount);
- /* Delay for a period. This time we use a call to vTaskDelay() which
- puts the task into the Blocked state until the delay period has expired.
- The delay period is specified in 'ticks'. */
- vTaskDelay( xDelay );
- }
+ /* Delay for a period. This time we use a call to vTaskDelay() which
+ puts the task into the Blocked state until the delay period has expired.
+ The delay period is specified in 'ticks'. */
+ vTaskDelay(xDelay);
+ }
}
/*-----------------------------------------------------------*/
/* Idle hook functions MUST be called vApplicationIdleHook(), take no parameters,
and return void. */
-void vApplicationIdleHook( void )
+void vApplicationIdleHook(void)
{
- /* This hook function does nothing but increment a counter. */
- ulIdleCycleCount++;
+ /* This hook function does nothing but increment a counter. */
+ ulIdleCycleCount++;
}
diff --git a/example/freertos_feature/task/src/priority_task.c b/example/freertos_feature/task/src/priority_task.c
index 37b79caa3ce700c3223ac1a9219d70b383ccb03b..c9a5d42c91e01b49c26777e44d9ff1b25af703dd 100644
--- a/example/freertos_feature/task/src/priority_task.c
+++ b/example/freertos_feature/task/src/priority_task.c
@@ -1,5 +1,5 @@
/*
-This example demonstrates:
+This example demonstrates:
how to create and delete tasks use priority;
*/
#include "FreeRTOSConfig.h"
@@ -7,15 +7,15 @@ how to create and delete tasks use priority;
#include "task.h"
/* Used as a loop counter to create a very crude delay. */
-#define DELAY_LOOP_COUNT ( 0x1fffffff )
+#define DELAY_LOOP_COUNT ( 0x1fffffff )
-#define TASK_STACK_SIZE 1024
+#define TASK_STACK_SIZE 1024
static xTaskHandle xtask1_handle;
static xTaskHandle xtask2_handle;
/* The task function. */
-static void vTaskFunction( void *pvParameters );
+static void vTaskFunction(void *pvParameters);
/* Define the strings that will be passed in as the task parameters. These are
defined const and off the stack to ensure they remain valid when the tasks are
@@ -27,23 +27,23 @@ static const char *pcTextForTask2 = "Priority Task 2 is running\r\n";
void CreateTasksForPriorityTest(void)
{
- /* Create the first task at priority 1... */
- xTaskCreate( vTaskFunction, "Priority Task 1", TASK_STACK_SIZE, (void*)pcTextForTask1, 1, &xtask1_handle );
+ /* Create the first task at priority 1... */
+ xTaskCreate(vTaskFunction, "Priority Task 1", TASK_STACK_SIZE, (void *)pcTextForTask1, 1, &xtask1_handle);
- /* ... and the second task at priority 2. The priority is the second to
- last parameter. */
- xTaskCreate( vTaskFunction, "Priority Task 2", TASK_STACK_SIZE, (void*)pcTextForTask2, 2, &xtask2_handle );
+ /* ... and the second task at priority 2. The priority is the second to
+ last parameter. */
+ xTaskCreate(vTaskFunction, "Priority Task 2", TASK_STACK_SIZE, (void *)pcTextForTask2, 2, &xtask2_handle);
}
void DeleteTasksForPriorityTest(void)
{
- if(xtask1_handle)
+ if (xtask1_handle)
{
vTaskDelete(xtask1_handle);
vPrintString("DeleteTasksForPriorityTest Task priority 1 deletion \r\n");
}
- if(xtask2_handle)
+ if (xtask2_handle)
{
vTaskDelete(xtask2_handle);
vPrintString("DeleteTasksForPriorityTest Task priority 2 deletion \r\n");
@@ -52,27 +52,27 @@ void DeleteTasksForPriorityTest(void)
}
/*-----------------------------------------------------------*/
-static void vTaskFunction( void *pvParameters )
+static void vTaskFunction(void *pvParameters)
{
- char *pcTaskName;
- volatile uint32_t ul;
+ char *pcTaskName;
+ volatile uint32_t ul;
- /* The string to print out is passed in via the parameter. Cast this to a
- character pointer. */
- pcTaskName = ( char * ) pvParameters;
+ /* The string to print out is passed in via the parameter. Cast this to a
+ character pointer. */
+ pcTaskName = (char *) pvParameters;
- /* As per most tasks, this task is implemented in an infinite loop. */
- for( ;; )
- {
- /* Print out the name of this task. */
- vPrintString( pcTaskName );
+ /* As per most tasks, this task is implemented in an infinite loop. */
+ for (;;)
+ {
+ /* Print out the name of this task. */
+ vPrintString(pcTaskName);
- /* Delay for a period. */
- for( ul = 0; ul < DELAY_LOOP_COUNT; ul++ )
- {
- /* This loop is just a very crude delay implementation. There is
- nothing to do in here. Later exercises will replace this crude
- loop with a proper delay/sleep function. */
- }
- }
+ /* Delay for a period. */
+ for (ul = 0; ul < DELAY_LOOP_COUNT; ul++)
+ {
+ /* This loop is just a very crude delay implementation. There is
+ nothing to do in here. Later exercises will replace this crude
+ loop with a proper delay/sleep function. */
+ }
+ }
}
diff --git a/example/freertos_feature/task/src/task_cmd.c b/example/freertos_feature/task/src/task_cmd.c
index 7a0256a8f138b1569a03170541484fd47765d637..f943b688d7567b571b29adfaf3875933f4be2195 100644
--- a/example/freertos_feature/task/src/task_cmd.c
+++ b/example/freertos_feature/task/src/task_cmd.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: task_cmd.c
* Date: 2022-06-17 10:41:45
* LastEditTime: 2022-06-17 10:41:45
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
+ * Description: This file is for task example command interface
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2022/08/09 first commit
*/
#include "shell.h"
#include "feature_task.h"
@@ -28,51 +29,51 @@
typedef enum
{
CREATING_TASK_INDEX = 0,
- PARAMETERS_TEST_INDEX = 1 ,
- PRIORITY_TEST_INDEX ,
- BLOCK_STATE_TEST_INDEX ,
- DELAY_UNTIL_TEST_INDEX ,
+ PARAMETERS_TEST_INDEX = 1,
+ PRIORITY_TEST_INDEX,
+ BLOCK_STATE_TEST_INDEX,
+ DELAY_UNTIL_TEST_INDEX,
BLOCKING_NON_BLOCKING_INDEX,
- IDLE_TEST_INDEX ,
- CHANGE_PRIORITY_TEST_INDEX ,
+ IDLE_TEST_INDEX,
+ CHANGE_PRIORITY_TEST_INDEX,
TASK_FEATURE_LENGTH
} FreeRtosTaskFeatureSelect;
static void CreateTasksCmdUsage(void)
{
- printf("usage:\r\n");
+ printf("Usage:\r\n");
printf(" task cre \r\n");
- printf(" -- create tasks now \r\n");
+ printf(" -- Create tasks now. \r\n");
printf(" task del \r\n");
- printf(" -- del tasks now \r\n");
+ printf(" -- Del tasks now. \r\n");
printf(" task para_cre \r\n");
- printf(" -- create parameter test tasks now \r\n");
+ printf(" -- Create parameter test tasks now. \r\n");
printf(" task para_del \r\n");
- printf(" -- del parameter test tasks now \r\n");
+ printf(" -- Del parameter test tasks now. \r\n");
printf(" task pri_cre \r\n");
- printf(" -- create priority test tasks now \r\n");
+ printf(" -- Create priority test tasks now. \r\n");
printf(" task pri_del \r\n");
- printf(" -- del priority test tasks now \r\n");
+ printf(" -- Del priority test tasks now. \r\n");
printf(" task blo_cre \r\n");
- printf(" -- create block state test tasks now \r\n");
+ printf(" -- Create block state test tasks now. \r\n");
printf(" task blo_del \r\n");
- printf(" -- del block state test tasks now \r\n");
+ printf(" -- Del block state test tasks now. \r\n");
printf(" task dn_cre \r\n");
- printf(" -- create task until test tasks now \r\n");
+ printf(" -- Create task until test tasks now. \r\n");
printf(" task dn_del \r\n");
- printf(" -- del task until test tasks now \r\n");
+ printf(" -- Del task until test tasks now. \r\n");
printf(" task bn_cre \r\n");
- printf(" -- create task combining blocking non blocking tasks now \r\n");
+ printf(" -- Create task combining blocking non blocking tasks now. \r\n");
printf(" task bn_del \r\n");
- printf(" -- del task combining blocking non blocking tasks now \r\n");
+ printf(" -- Del task combining blocking non blocking tasks now. \r\n");
printf(" task idle_cre \r\n");
- printf(" -- create task idle tasks now \r\n");
+ printf(" -- Create task idle tasks now. \r\n");
printf(" task idle_del \r\n");
- printf(" -- del task idle tasks now \r\n");
+ printf(" -- Del task idle tasks now \r\n");
printf(" task cha_cre \r\n");
- printf(" -- create task change priority tasks now \r\n");
+ printf(" -- Create task change priority tasks now. \r\n");
printf(" task cha_del \r\n");
- printf(" -- del task change priority tasks now \r\n");
+ printf(" -- Del task change priority tasks now. \r\n");
}
@@ -88,199 +89,199 @@ int CreateTasksCmd(int argc, char *argv[])
if (!strcmp(argv[1], "cre"))
{
- if(create_flg[CREATING_TASK_INDEX] == 0)
+ if (create_flg[CREATING_TASK_INDEX] == 0)
{
CreateTasks();
create_flg[CREATING_TASK_INDEX] = 1;
}
else
{
- printf("Please use del cmd first \r\n");
+ printf("Please use del cmd first. \r\n");
}
}
else if (!strcmp(argv[1], "del"))
{
- if(create_flg[CREATING_TASK_INDEX] == 1)
+ if (create_flg[CREATING_TASK_INDEX] == 1)
{
DeleteTasks();
create_flg[CREATING_TASK_INDEX] = 0;
- }
+ }
else
{
- printf("Please use cre cmd first \r\n");
+ printf("Please use cre cmd first. \r\n");
}
}
else if (!strcmp(argv[1], "para_cre"))
{
- if(create_flg[PARAMETERS_TEST_INDEX] == 0)
+ if (create_flg[PARAMETERS_TEST_INDEX] == 0)
{
CreateTasksForParamterTest();
create_flg[PARAMETERS_TEST_INDEX] = 1;
}
else
{
- printf("Please use task para_del cmd first \r\n");
+ printf("Please use task para_del cmd first. \r\n");
}
}
else if (!strcmp(argv[1], "para_del"))
{
- if(create_flg[PARAMETERS_TEST_INDEX] == 1)
+ if (create_flg[PARAMETERS_TEST_INDEX] == 1)
{
DeleteTasksForParamterTest();
create_flg[PARAMETERS_TEST_INDEX] = 0;
- }
+ }
else
{
- printf("Please use task para_cre cmd first \r\n");
+ printf("Please use task para_cre cmd first. \r\n");
}
}
else if (!strcmp(argv[1], "pri_cre"))
{
- if(create_flg[PRIORITY_TEST_INDEX] == 0)
+ if (create_flg[PRIORITY_TEST_INDEX] == 0)
{
CreateTasksForPriorityTest();
create_flg[PRIORITY_TEST_INDEX] = 1;
}
else
{
- printf("Please use task pri_del cmd first \r\n");
+ printf("Please use task pri_del cmd first. \r\n");
}
}
else if (!strcmp(argv[1], "pri_del"))
{
- if(create_flg[PRIORITY_TEST_INDEX] == 1)
+ if (create_flg[PRIORITY_TEST_INDEX] == 1)
{
DeleteTasksForPriorityTest();
create_flg[PRIORITY_TEST_INDEX] = 0;
- }
+ }
else
{
- printf("Please use task pri_cre cmd first \r\n");
+ printf("Please use task pri_cre cmd first. \r\n");
}
}
else if (!strcmp(argv[1], "blo_cre"))
{
- if(create_flg[BLOCK_STATE_TEST_INDEX] == 0)
+ if (create_flg[BLOCK_STATE_TEST_INDEX] == 0)
{
CreateTasksForBlockTest();
create_flg[BLOCK_STATE_TEST_INDEX] = 1;
}
else
{
- printf("Please use task blo_del cmd first \r\n");
+ printf("Please use task blo_del cmd first. \r\n");
}
}
else if (!strcmp(argv[1], "blo_del"))
{
- if(create_flg[BLOCK_STATE_TEST_INDEX] == 1)
+ if (create_flg[BLOCK_STATE_TEST_INDEX] == 1)
{
DeleteTasksForBlockTest();
create_flg[BLOCK_STATE_TEST_INDEX] = 0;
- }
+ }
else
{
- printf("Please use task blo_cre cmd first \r\n");
+ printf("Please use task blo_cre cmd first. \r\n");
}
}
else if (!strcmp(argv[1], "dn_cre"))
{
- if(create_flg[DELAY_UNTIL_TEST_INDEX] == 0)
+ if (create_flg[DELAY_UNTIL_TEST_INDEX] == 0)
{
CreateTasksForDelayUntilTest();
create_flg[DELAY_UNTIL_TEST_INDEX] = 1;
}
else
{
- printf("Please use task dn_del cmd first \r\n");
+ printf("Please use task dn_del cmd first. \r\n");
}
}
else if (!strcmp(argv[1], "dn_del"))
{
- if(create_flg[DELAY_UNTIL_TEST_INDEX] == 1)
+ if (create_flg[DELAY_UNTIL_TEST_INDEX] == 1)
{
DeleteTasksForDelayUntilTest();
create_flg[DELAY_UNTIL_TEST_INDEX] = 0;
- }
+ }
else
{
- printf("Please use task dn_cre cmd first \r\n");
+ printf("Please use task dn_cre cmd first. \r\n");
}
}
else if (!strcmp(argv[1], "bn_cre"))
{
- if(create_flg[BLOCKING_NON_BLOCKING_INDEX] == 0)
+ if (create_flg[BLOCKING_NON_BLOCKING_INDEX] == 0)
{
CreateTasksForBlockingOrNone();
create_flg[BLOCKING_NON_BLOCKING_INDEX] = 1;
}
else
{
- printf("Please use task bn_del cmd first \r\n");
+ printf("Please use task bn_del cmd first. \r\n");
}
}
else if (!strcmp(argv[1], "bn_del"))
{
- if(create_flg[BLOCKING_NON_BLOCKING_INDEX] == 1)
+ if (create_flg[BLOCKING_NON_BLOCKING_INDEX] == 1)
{
DeleteTasksForBlockingOrNone();
create_flg[BLOCKING_NON_BLOCKING_INDEX] = 0;
- }
+ }
else
{
- printf("Please use task bn_cre cmd first \r\n");
+ printf("Please use task bn_cre cmd first. \r\n");
}
}
else if (!strcmp(argv[1], "idle_cre"))
{
- if(create_flg[IDLE_TEST_INDEX] == 0)
+ if (create_flg[IDLE_TEST_INDEX] == 0)
{
CreateTasksForIdleTask();
create_flg[IDLE_TEST_INDEX] = 1;
}
else
{
- printf("Please use task idle_del cmd first \r\n");
+ printf("Please use task idle_del cmd first. \r\n");
}
}
else if (!strcmp(argv[1], "idle_del"))
{
- if(create_flg[IDLE_TEST_INDEX] == 1)
+ if (create_flg[IDLE_TEST_INDEX] == 1)
{
DeleteTasksForForIdleTask();
create_flg[IDLE_TEST_INDEX] = 0;
- }
+ }
else
{
- printf("Please use task idle_cre cmd first \r\n");
+ printf("Please use task idle_cre cmd first. \r\n");
}
}
else if (!strcmp(argv[1], "cha_cre"))
{
- if(create_flg[CHANGE_PRIORITY_TEST_INDEX] == 0)
+ if (create_flg[CHANGE_PRIORITY_TEST_INDEX] == 0)
{
CreateTasksForChangePriorityTest();
create_flg[CHANGE_PRIORITY_TEST_INDEX] = 1;
}
else
{
- printf("Please use task cha_del cmd first \r\n");
+ printf("Please use task cha_del cmd first. \r\n");
}
}
else if (!strcmp(argv[1], "cha_del"))
{
- if(create_flg[CHANGE_PRIORITY_TEST_INDEX] == 1)
+ if (create_flg[CHANGE_PRIORITY_TEST_INDEX] == 1)
{
DeleteTasksForChangePriorityTest();
create_flg[CHANGE_PRIORITY_TEST_INDEX] = 0;
- }
+ }
else
{
- printf("Please use task cha_cre cmd first \r\n");
+ printf("Please use task cha_cre cmd first. \r\n");
}
}
else
{
- printf("Error: Invalid arguments \r\n");
+ printf("Error: Invalid arguments. \r\n");
CreateTasksCmdUsage();
}
return 0;
diff --git a/example/freertos_feature/task/src/task_combining_blocking_non_blocking.c b/example/freertos_feature/task/src/task_combining_blocking_non_blocking.c
index 4618c7ec567e3cb1c2c786d01336c3110e84d3ab..d17cbab95aea9798d3e8109852def11525574151 100644
--- a/example/freertos_feature/task/src/task_combining_blocking_non_blocking.c
+++ b/example/freertos_feature/task/src/task_combining_blocking_non_blocking.c
@@ -2,11 +2,11 @@
#include "FreeRTOS.h"
#include "task.h"
-#define TASK_STACK_SIZE 1024
+#define TASK_STACK_SIZE 1024
/* The task functions. */
-static void vContinuousProcessingTask( void *pvParameters );
-static void vPeriodicTask( void *pvParameters );
+static void vContinuousProcessingTask(void *pvParameters);
+static void vPeriodicTask(void *pvParameters);
static xTaskHandle xtask1_handle;
static xTaskHandle xtask2_handle;
@@ -22,33 +22,33 @@ static const char *pcTextForPeriodicTask = "BlockingOrNone Periodic task is runn
/*-----------------------------------------------------------*/
void CreateTasksForBlockingOrNone(void)
{
- /* Create two instances of the continuous processing task, both at priority 1. */
- xTaskCreate( vContinuousProcessingTask, "BlockingOrNone Task 1",
- TASK_STACK_SIZE, (void*)pcTextForTask1, 1, &xtask1_handle );
+ /* Create two instances of the continuous processing task, both at priority 1. */
+ xTaskCreate(vContinuousProcessingTask, "BlockingOrNone Task 1",
+ TASK_STACK_SIZE, (void *)pcTextForTask1, 1, &xtask1_handle);
- xTaskCreate( vContinuousProcessingTask, "BlockingOrNone Task 2",
- TASK_STACK_SIZE, (void*)pcTextForTask2, 1, &xtask2_handle );
+ xTaskCreate(vContinuousProcessingTask, "BlockingOrNone Task 2",
+ TASK_STACK_SIZE, (void *)pcTextForTask2, 1, &xtask2_handle);
- /* Create one instance of the periodic task at priority 2. */
- xTaskCreate( vPeriodicTask, "BlockingOrNone Task 3",
- TASK_STACK_SIZE, (void*)pcTextForPeriodicTask, 2, &xtask3_handle );
+ /* Create one instance of the periodic task at priority 2. */
+ xTaskCreate(vPeriodicTask, "BlockingOrNone Task 3",
+ TASK_STACK_SIZE, (void *)pcTextForPeriodicTask, 2, &xtask3_handle);
}
void DeleteTasksForBlockingOrNone(void)
{
- if(xtask1_handle)
+ if (xtask1_handle)
{
vTaskDelete(xtask1_handle);
vPrintString("BlockingOrNone Task 1 deletion \r\n");
}
- if(xtask2_handle)
+ if (xtask2_handle)
{
vTaskDelete(xtask2_handle);
vPrintString("BlockingOrNone Task 2 deletion \r\n");
}
- if(xtask3_handle)
+ if (xtask3_handle)
{
vTaskDelete(xtask3_handle);
vPrintString("BlockingOrNone Task 3 deletion \r\n");
@@ -56,43 +56,43 @@ void DeleteTasksForBlockingOrNone(void)
}
/*-----------------------------------------------------------*/
-void vContinuousProcessingTask( void *pvParameters )
+void vContinuousProcessingTask(void *pvParameters)
{
- char *pcTaskName;
- /* The string to print out is passed in via the parameter. Cast this to a
- character pointer. */
- pcTaskName = ( char * ) pvParameters;
-
- /* As per most tasks, this task is implemented in an infinite loop. */
- for( ;; )
- {
- /* Print out the name of this task. This task just does this repeatedly
- without ever blocking or delaying. */
- vPrintString( pcTaskName );
- vTaskDelay(5000);
-
- }
+ char *pcTaskName;
+ /* The string to print out is passed in via the parameter. Cast this to a
+ character pointer. */
+ pcTaskName = (char *) pvParameters;
+
+ /* As per most tasks, this task is implemented in an infinite loop. */
+ for (;;)
+ {
+ /* Print out the name of this task. This task just does this repeatedly
+ without ever blocking or delaying. */
+ vPrintString(pcTaskName);
+ vTaskDelay(5000);
+
+ }
}
/*-----------------------------------------------------------*/
-void vPeriodicTask( void *pvParameters )
+void vPeriodicTask(void *pvParameters)
{
TickType_t xLastWakeTime;
- const TickType_t xDelay = pdMS_TO_TICKS( 5000UL );
-
- /* The xLastWakeTime variable needs to be initialized with the current tick
- count. Note that this is the only time we access this variable. From this
- point on xLastWakeTime is managed automatically by the vTaskDelayUntil()
- API function. */
- xLastWakeTime = xTaskGetTickCount();
-
- /* As per most tasks, this task is implemented in an infinite loop. */
- for( ;; )
- {
- /* Print out the name of this task. */
- vPrintString( "Periodic task is running\r\n" );
-
- /* We want this task to execute exactly every 100 milliseconds. */
- vTaskDelayUntil( &xLastWakeTime, xDelay );
- }
+ const TickType_t xDelay = pdMS_TO_TICKS(5000UL);
+
+ /* The xLastWakeTime variable needs to be initialized with the current tick
+ count. Note that this is the only time we access this variable. From this
+ point on xLastWakeTime is managed automatically by the vTaskDelayUntil()
+ API function. */
+ xLastWakeTime = xTaskGetTickCount();
+
+ /* As per most tasks, this task is implemented in an infinite loop. */
+ for (;;)
+ {
+ /* Print out the name of this task. */
+ vPrintString("Periodic task is running\r\n");
+
+ /* We want this task to execute exactly every 100 milliseconds. */
+ vTaskDelayUntil(&xLastWakeTime, xDelay);
+ }
}
\ No newline at end of file
diff --git a/example/freertos_feature/task/src/task_delay_until.c b/example/freertos_feature/task/src/task_delay_until.c
index 8233504744168f7561b6139217bb5ba742480a03..dacba9eb334e5d2af6161ea947596ee448f06ded 100644
--- a/example/freertos_feature/task/src/task_delay_until.c
+++ b/example/freertos_feature/task/src/task_delay_until.c
@@ -1,18 +1,18 @@
/*
-This example demonstrates:
+This example demonstrates:
how to use delay until in tasks;
*/
#include "FreeRTOSConfig.h"
#include "FreeRTOS.h"
#include "task.h"
-#define TASK_STACK_SIZE 1024
+#define TASK_STACK_SIZE 1024
static xTaskHandle xtask1_handle;
static xTaskHandle xtask2_handle;
/* The task function. */
-static void vTaskFunction( void *pvParameters );
+static void vTaskFunction(void *pvParameters);
/* Define the strings that will be passed in as the task parameters. These are
defined const and off the stack to ensure they remain valid when the tasks are
@@ -25,23 +25,23 @@ static const char *pcTextForTask2 = "Delay Until Task 2 is running\r\n";
void CreateTasksForDelayUntilTest(void)
{
- /* Create the first task at priority 1... */
- xTaskCreate( vTaskFunction, "Delay Until Task 1", TASK_STACK_SIZE, (void*)pcTextForTask1, 1, &xtask1_handle );
+ /* Create the first task at priority 1... */
+ xTaskCreate(vTaskFunction, "Delay Until Task 1", TASK_STACK_SIZE, (void *)pcTextForTask1, 1, &xtask1_handle);
- /* ... and the second task at priority 2. The priority is the second to
- last parameter. */
- xTaskCreate( vTaskFunction, "Delay Until Task 2", TASK_STACK_SIZE, (void*)pcTextForTask2, 2, &xtask2_handle );
+ /* ... and the second task at priority 2. The priority is the second to
+ last parameter. */
+ xTaskCreate(vTaskFunction, "Delay Until Task 2", TASK_STACK_SIZE, (void *)pcTextForTask2, 2, &xtask2_handle);
}
void DeleteTasksForDelayUntilTest(void)
{
- if(xtask1_handle)
+ if (xtask1_handle)
{
vTaskDelete(xtask1_handle);
vPrintString("Delay Until Task parameter 1 deletion \r\n");
}
- if(xtask2_handle)
+ if (xtask2_handle)
{
vTaskDelete(xtask2_handle);
vPrintString("Delay Until Task parameter 2 deletion \r\n");
@@ -49,33 +49,33 @@ void DeleteTasksForDelayUntilTest(void)
}
/*-----------------------------------------------------------*/
-static void vTaskFunction( void *pvParameters )
+static void vTaskFunction(void *pvParameters)
{
char *pcTaskName;
TickType_t xLastWakeTime;
- const TickType_t xDelay = pdMS_TO_TICKS( 3000UL );
+ const TickType_t xDelay = pdMS_TO_TICKS(3000UL);
- /* The string to print out is passed in via the parameter. Cast this to a
- character pointer. */
- pcTaskName = ( char * ) pvParameters;
+ /* The string to print out is passed in via the parameter. Cast this to a
+ character pointer. */
+ pcTaskName = (char *) pvParameters;
- /* The xLastWakeTime variable needs to be initialized with the current tick
- count. Note that this is the only time we access this variable. From this
- point on xLastWakeTime is managed automatically by the vTaskDelayUntil()
- API function. */
- xLastWakeTime = xTaskGetTickCount();
+ /* The xLastWakeTime variable needs to be initialized with the current tick
+ count. Note that this is the only time we access this variable. From this
+ point on xLastWakeTime is managed automatically by the vTaskDelayUntil()
+ API function. */
+ xLastWakeTime = xTaskGetTickCount();
- /* As per most tasks, this task is implemented in an infinite loop. */
- for( ;; )
- {
- /* Print out the name of this task. */
- vPrintString( pcTaskName );
+ /* As per most tasks, this task is implemented in an infinite loop. */
+ for (;;)
+ {
+ /* Print out the name of this task. */
+ vPrintString(pcTaskName);
- /* We want this task to execute exactly every 1000 milliseconds. As per
- the vTaskDelay() function, time is measured in ticks, and the
- pdMS_TO_TICKS() macro is used to convert this to milliseconds.
- xLastWakeTime is automatically updated within vTaskDelayUntil() so does not
- have to be updated by this task code. */
- vTaskDelayUntil( &xLastWakeTime, xDelay );
- }
+ /* We want this task to execute exactly every 1000 milliseconds. As per
+ the vTaskDelay() function, time is measured in ticks, and the
+ pdMS_TO_TICKS() macro is used to convert this to milliseconds.
+ xLastWakeTime is automatically updated within vTaskDelayUntil() so does not
+ have to be updated by this task code. */
+ vTaskDelayUntil(&xLastWakeTime, xDelay);
+ }
}
diff --git a/example/freertos_feature/task/src/using_task_parameter.c b/example/freertos_feature/task/src/using_task_parameter.c
index 43762ba7eb523174eb151aa79d2931c3dbd53af2..10847638da9ad79d973addfd7e0a130bc443a8c8 100644
--- a/example/freertos_feature/task/src/using_task_parameter.c
+++ b/example/freertos_feature/task/src/using_task_parameter.c
@@ -1,5 +1,5 @@
/*
-This example demonstrates:
+This example demonstrates:
how to create and delete tasks use parameters;
*/
@@ -8,17 +8,17 @@ how to create and delete tasks use parameters;
#include "task.h"
/* Used as a loop counter to create a very crude delay. */
-#define DELAY_LOOP_COUNT ( 0x1fffffff )
+#define DELAY_LOOP_COUNT ( 0x1fffffff )
/* task stack size set. */
-#define TASK_STACK_SIZE 1024
+#define TASK_STACK_SIZE 1024
static xTaskHandle xtask1_handle;
static xTaskHandle xtask2_handle;
/* The task function. */
-static void vTaskFunction( void *pvParameters );
+static void vTaskFunction(void *pvParameters);
/* Define the strings that will be passed in as the task parameters. These are
defined const and off the stack to ensure they remain valid when the tasks are
@@ -28,32 +28,32 @@ const char *pcTextForTask2 = "Parameter Task 2 is running\r\n";
/*-----------------------------------------------------------*/
-void CreateTasksForParamterTest( void )
+void CreateTasksForParamterTest(void)
{
- /* Create one of the two tasks. */
- xTaskCreate( vTaskFunction, /* Pointer to the function that implements the task. */
- "Parameter Task 1", /* Text name for the task. This is to facilitate debugging only. */
- TASK_STACK_SIZE, /* Stack depth - most small microcontrollers will use much less stack than this. */
- (void*)pcTextForTask1, /* Pass the text to be printed in as the task parameter. */
- 1, /* This task will run at priority 1. */
- &xtask1_handle ); /* We are not using the task handle. */
-
- /* Create the other task in exactly the same way. Note this time that we
- are creating the SAME task, but passing in a different parameter. We are
- creating two instances of a single task implementation. */
- xTaskCreate( vTaskFunction, "Parameter Task 2", TASK_STACK_SIZE, (void*)pcTextForTask2, 1, &xtask2_handle );
+ /* Create one of the two tasks. */
+ xTaskCreate(vTaskFunction, /* Pointer to the function that implements the task. */
+ "Parameter Task 1", /* Text name for the task. This is to facilitate debugging only. */
+ TASK_STACK_SIZE, /* Stack depth - most small microcontrollers will use much less stack than this. */
+ (void *)pcTextForTask1, /* Pass the text to be printed in as the task parameter. */
+ 1, /* This task will run at priority 1. */
+ &xtask1_handle); /* We are not using the task handle. */
+
+ /* Create the other task in exactly the same way. Note this time that we
+ are creating the SAME task, but passing in a different parameter. We are
+ creating two instances of a single task implementation. */
+ xTaskCreate(vTaskFunction, "Parameter Task 2", TASK_STACK_SIZE, (void *)pcTextForTask2, 1, &xtask2_handle);
}
void DeleteTasksForParamterTest(void)
{
- if(xtask1_handle)
+ if (xtask1_handle)
{
vTaskDelete(xtask1_handle);
vPrintString("DeleteTasksForParamterTest Task parameter 1 deletion \r\n");
}
- if(xtask2_handle)
+ if (xtask2_handle)
{
vTaskDelete(xtask2_handle);
vPrintString("DeleteTasksForParamterTest Task parameter 2 deletion \r\n");
@@ -62,27 +62,27 @@ void DeleteTasksForParamterTest(void)
}
/*-----------------------------------------------------------*/
-static void vTaskFunction( void *pvParameters )
+static void vTaskFunction(void *pvParameters)
{
- char *pcTaskName;
- volatile uint32_t ul;
-
- /* The string to print out is passed in via the parameter. Cast this to a
- character pointer. */
- pcTaskName = ( char * ) pvParameters;
-
- /* As per most tasks, this task is implemented in an infinite loop. */
- for( ;; )
- {
- /* Print out the name of this task. */
- vPrintString( pcTaskName );
-
- /* Delay for a period. */
- for( ul = 0; ul < DELAY_LOOP_COUNT; ul++ )
- {
- /* This loop is just a very crude delay implementation. There is
- nothing to do in here. Later exercises will replace this crude
- loop with a proper delay/sleep function. */
- }
- }
+ char *pcTaskName;
+ volatile uint32_t ul;
+
+ /* The string to print out is passed in via the parameter. Cast this to a
+ character pointer. */
+ pcTaskName = (char *) pvParameters;
+
+ /* As per most tasks, this task is implemented in an infinite loop. */
+ for (;;)
+ {
+ /* Print out the name of this task. */
+ vPrintString(pcTaskName);
+
+ /* Delay for a period. */
+ for (ul = 0; ul < DELAY_LOOP_COUNT; ul++)
+ {
+ /* This loop is just a very crude delay implementation. There is
+ nothing to do in here. Later exercises will replace this crude
+ loop with a proper delay/sleep function. */
+ }
+ }
}
\ No newline at end of file
diff --git a/example/freertos_feature/task_notify/configs/d2000_aarch32_eg_configs b/example/freertos_feature/task_notify/configs/d2000_aarch32_eg_configs
index 464a31af9bb3111d91fad1699c91b41de9317519..a16785ad54af36153e37c6b401b31d847493f42d 100644
--- a/example/freertos_feature/task_notify/configs/d2000_aarch32_eg_configs
+++ b/example/freertos_feature/task_notify/configs/d2000_aarch32_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -111,6 +112,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -147,6 +157,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -168,12 +179,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -185,14 +190,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -210,4 +233,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/task_notify/configs/d2000_aarch64_eg_configs b/example/freertos_feature/task_notify/configs/d2000_aarch64_eg_configs
index 64e6b4b7a6ae1664e07af0d9c84a440dabc972c1..4731ef2f28f88014b15fe54b9662689cee32274f 100644
--- a/example/freertos_feature/task_notify/configs/d2000_aarch64_eg_configs
+++ b/example/freertos_feature/task_notify/configs/d2000_aarch64_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -107,6 +108,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -143,6 +153,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -164,12 +175,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -181,14 +186,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -206,4 +229,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/task_notify/configs/e2000d_aarch32_eg_configs b/example/freertos_feature/task_notify/configs/e2000d_aarch32_eg_configs
index fc31cd0b27be11b5e09995278c509299162fa4e9..229022705bc103e6f867abfbce05526a6d480085 100644
--- a/example/freertos_feature/task_notify/configs/e2000d_aarch32_eg_configs
+++ b/example/freertos_feature/task_notify/configs/e2000d_aarch32_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -111,6 +112,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -147,6 +157,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -168,12 +179,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -185,14 +190,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -210,4 +233,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/task_notify/configs/e2000d_aarch64_eg_configs b/example/freertos_feature/task_notify/configs/e2000d_aarch64_eg_configs
index 7e2efa4fba523e780f910a826b7f13a9552e4bbe..f3181d358e9c6ec7c5452447c06782bac1a30a91 100644
--- a/example/freertos_feature/task_notify/configs/e2000d_aarch64_eg_configs
+++ b/example/freertos_feature/task_notify/configs/e2000d_aarch64_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -107,6 +108,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -143,6 +153,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -164,12 +175,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -181,14 +186,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -206,4 +229,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/task_notify/configs/e2000q_aarch32_eg_configs b/example/freertos_feature/task_notify/configs/e2000q_aarch32_eg_configs
index 1b53ed9171a1fca357a6362a54b3f83039f9a6fd..eea9646fc3246d363566729b218841d271b99ec9 100644
--- a/example/freertos_feature/task_notify/configs/e2000q_aarch32_eg_configs
+++ b/example/freertos_feature/task_notify/configs/e2000q_aarch32_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -111,6 +112,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -147,6 +157,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -168,12 +179,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -185,14 +190,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -210,4 +233,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/task_notify/configs/e2000q_aarch64_eg_configs b/example/freertos_feature/task_notify/configs/e2000q_aarch64_eg_configs
index 9c50f2b0368b0cb7549298c291755806fc32ae00..9183d77b6ebf704e132f641e17c7fdfd254ec12d 100644
--- a/example/freertos_feature/task_notify/configs/e2000q_aarch64_eg_configs
+++ b/example/freertos_feature/task_notify/configs/e2000q_aarch64_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -107,6 +108,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -143,6 +153,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -164,12 +175,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -181,14 +186,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -206,4 +229,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
# CONFIG_USE_TLSF is not set
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/task_notify/configs/ft2004_aarch32_eg_configs b/example/freertos_feature/task_notify/configs/ft2004_aarch32_eg_configs
index 4c5b2c49d6edae2d8456f3d083606aa9f62a3361..f0510b59527c3bb025d72f8ccca16b539ea7c56c 100644
--- a/example/freertos_feature/task_notify/configs/ft2004_aarch32_eg_configs
+++ b/example/freertos_feature/task_notify/configs/ft2004_aarch32_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -111,6 +112,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -147,6 +157,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -168,12 +179,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -185,14 +190,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -210,4 +233,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/task_notify/configs/ft2004_aarch64_eg_configs b/example/freertos_feature/task_notify/configs/ft2004_aarch64_eg_configs
index da9c1f8182b98ecf314c436f79ccbf0a31c79673..d99e8ace055af1b9260a237f1ce8ba6374d9f8e3 100644
--- a/example/freertos_feature/task_notify/configs/ft2004_aarch64_eg_configs
+++ b/example/freertos_feature/task_notify/configs/ft2004_aarch64_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -107,6 +108,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -143,6 +153,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -164,12 +175,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -181,14 +186,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -206,4 +229,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/task_notify/inc/feature_task_notify.h b/example/freertos_feature/task_notify/inc/feature_task_notify.h
index b5d06d4d7dab1ebd9b6448fa01be13de0a13d2bd..9e3496932e4521ecd5b6851be8b63ff3fe86b678 100644
--- a/example/freertos_feature/task_notify/inc/feature_task_notify.h
+++ b/example/freertos_feature/task_notify/inc/feature_task_notify.h
@@ -1,30 +1,36 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: feature_task_notify.h
* Date: 2022-06-17 10:42:40
* LastEditTime: 2022-06-17 10:42:40
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
+ * Description: This file is for task function define
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2022/08/09 first commit
*/
#ifndef FEATURE_EVENTGROUP_H
#define FEATURE_EVENTGROUP_H
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
/* task notify use true */
void CreateNotifyTakeTrueTasks(void);
void DeleteNotifyTakeTrueTasks(void);
@@ -33,4 +39,8 @@ void DeleteNotifyTakeTrueTasks(void);
void CreateNotifyTakeFalseTasks(void);
void DeleteNotifyTakeFalseTasks(void);
+#ifdef __cplusplus
+}
+#endif
+
#endif // !
\ No newline at end of file
diff --git a/example/freertos_feature/task_notify/main.c b/example/freertos_feature/task_notify/main.c
index f376d838205fdb1a0ea7cf3bf6d192350dc0ad4f..b20740a55cbb4e3e24a1b368d44d7d1229b28f7d 100644
--- a/example/freertos_feature/task_notify/main.c
+++ b/example/freertos_feature/task_notify/main.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: main.c
* Date: 2022-06-17 08:17:59
* LastEditTime: 2022-06-17 08:17:59
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
+ * Description: This file is for task_notify example that running shell task and open scheduler
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2022/08/09 first commit
*/
#include "shell.h"
@@ -30,13 +31,15 @@ int main(void)
BaseType_t ret;
ret = LSUserShellTask() ;
- if(ret != pdPASS)
+ if (ret != pdPASS)
+ {
goto FAIL_EXIT;
+ }
- vTaskStartScheduler(); /* 启动任务,开启调度 */
+ vTaskStartScheduler(); /* 启动任务,开启调度 */
while (1); /* 正常不会执行到这里 */
-
+
FAIL_EXIT:
- printf("failed 0x%x \r\n", ret);
+ printf("failed 0x%x. \r\n", ret);
return 0;
}
diff --git a/example/freertos_feature/task_notify/sdkconfig b/example/freertos_feature/task_notify/sdkconfig
index 9c50f2b0368b0cb7549298c291755806fc32ae00..9183d77b6ebf704e132f641e17c7fdfd254ec12d 100644
--- a/example/freertos_feature/task_notify/sdkconfig
+++ b/example/freertos_feature/task_notify/sdkconfig
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -107,6 +108,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -143,6 +153,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -164,12 +175,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -181,14 +186,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -206,4 +229,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
# CONFIG_USE_TLSF is not set
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/freertos_feature/task_notify/sdkconfig.h b/example/freertos_feature/task_notify/sdkconfig.h
index 2e55f772e76d53ec6d106cb6e89fa66f67702aa0..80305baca3d75744267bea25bbc372f9e03b7902 100644
--- a/example/freertos_feature/task_notify/sdkconfig.h
+++ b/example/freertos_feature/task_notify/sdkconfig.h
@@ -62,6 +62,7 @@
/* CONFIG_USE_ADC is not set */
/* CONFIG_USE_PWM is not set */
/* CONFIG_USE_IPC is not set */
+/* CONFIG_USE_MEDIA is not set */
/* end of Components Configuration */
#define CONFIG_USE_NEW_LIBC
/* end of Standalone Setting */
@@ -98,6 +99,12 @@
/* Compiler Options */
+/* Cross-Compiler Setting */
+
+#define CONFIG_GCC_OPTIMIZE_LEVEL 0
+/* CONFIG_USE_EXT_COMPILER is not set */
+/* CONFIG_USE_KLIN_SYS is not set */
+/* end of Cross-Compiler Setting */
#define CONFIG_OUTPUT_BINARY
/* end of Compiler Options */
/* end of Building Option */
@@ -127,6 +134,7 @@
/* Freertos Eth Drivers */
/* CONFIG_FREERTOS_USE_XMAC is not set */
+/* CONFIG_FREERTOS_USE_GMAC is not set */
/* end of Freertos Eth Drivers */
/* Freertos Gpio Drivers */
@@ -145,11 +153,6 @@
/* CONFIG_FREERTOS_USE_FGDMA is not set */
/* end of Freertos DMA Drivers */
-/* Freertos MMC Drivers */
-
-/* CONFIG_FREERTOS_USE_FSDIO is not set */
-/* end of Freertos MMC Drivers */
-
/* Freertos Adc Drivers */
/* CONFIG_FREERTOS_USE_ADC is not set */
@@ -159,13 +162,28 @@
/* CONFIG_FREERTOS_USE_CAN is not set */
/* end of Freertos Can Drivers */
+
+/* Freertos I2c Drivers */
+
+/* CONFIG_FREERTOS_USE_I2C is not set */
+/* end of Freertos I2c Drivers */
+
+/* Freertos Mio Drivers */
+
+/* CONFIG_FREERTOS_USE_MIO is not set */
+/* end of Freertos Mio Drivers */
+
+/* Freertos Timer Drivers */
+
+/* CONFIG_FREERTOS_USE_TIMER is not set */
+/* end of Freertos Timer Drivers */
/* end of Component Configuration */
-/* FreeRTOS Setting */
+/* Third-Party Configuration */
/* CONFIG_USE_LWIP is not set */
#define CONFIG_USE_BACKTRACE
-/* CONFIG_USE_FATFS is not set */
+/* CONFIG_USE_FATFS_0_1_4 is not set */
/* CONFIG_USE_SFUD is not set */
/* CONFIG_USE_SPIFFS is not set */
/* CONFIG_USE_AMP is not set */
@@ -181,6 +199,28 @@
/* CONFIG_USE_TLSF is not set */
/* CONFIG_USE_SDMMC_CMD is not set */
/* CONFIG_USE_CHERRY_USB is not set */
-/* end of FreeRTOS Setting */
+/* end of Third-Party Configuration */
+
+/* Kernel Configuration */
+
+#define CONFIG_FREERTOS_OPTIMIZED_SCHEDULER
+#define CONFIG_FREERTOS_HZ 1000
+#define CONFIG_FREERTOS_MAX_PRIORITIES 32
+#define CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES 13
+#define CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES 11
+#define CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS 1
+#define CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE 1024
+#define CONFIG_FREERTOS_MAX_TASK_NAME_LEN 32
+#define CONFIG_FREERTOS_TIMER_TASK_PRIORITY 1
+#define CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH 2048
+#define CONFIG_FREERTOS_TIMER_QUEUE_LENGTH 10
+#define CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE 0
+#define CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS
+#define CONFIG_FREERTOS_USE_TRACE_FACILITY
+#define CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS
+/* CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set */
+#define CONFIG_FREERTOS_TOTAL_HEAP_SIZE 10240
+#define CONFIG_FREERTOS_TASK_FPU_SUPPORT 1
+/* end of Kernel Configuration */
#endif
diff --git a/example/freertos_feature/task_notify/src/notify_take_false.c b/example/freertos_feature/task_notify/src/notify_take_false.c
index a5b1d60a1a215ffaafa218e14d137c93ec0d6c21..1c5dd259cc0571af7d423c7ffa8139aa09b829dc 100644
--- a/example/freertos_feature/task_notify/src/notify_take_false.c
+++ b/example/freertos_feature/task_notify/src/notify_take_false.c
@@ -1,9 +1,9 @@
/*
-This example demonstrates:
+This example demonstrates:
the ulTaskNotifyTake() xClearOnExit parameter was set to pdFALSE.
-When xClearOnExit is pdFALSE, calling ulTaskNotifyTake() will only decrement
-(reduce by one) the calling task’s notification value, instead of clearing it to zero.
-The notification count is therefore the difference between the number of events
+When xClearOnExit is pdFALSE, calling ulTaskNotifyTake() will only decrement
+(reduce by one) the calling task’s notification value, instead of clearing it to zero.
+The notification count is therefore the difference between the number of events
that have occurred, and the number of events that have been processed.
*/
#include
@@ -13,12 +13,12 @@ that have occurred, and the number of events that have been processed.
#include "finterrupt.h"
#include "fcpu_info.h"
-#define TASK_STACK_SIZE 1024
+#define TASK_STACK_SIZE 1024
/* The interrupt number to use for the software interrupt generation. This
could be any unused number. In this case the first chip level (non system)
interrupt is used */
-#define INTERRUPT_ID 0
+#define INTERRUPT_ID 0
/* The priority of the software interrupt. The interrupt service routine uses
an (interrupt safe) FreeRTOS API function, so the priority of the interrupt must
@@ -26,21 +26,21 @@ be equal to or lower than the priority set by
configMAX_SYSCALL_INTERRUPT_PRIORITY - remembering that on the Cortex M3 high
numeric values represent low priority values, which can be confusing as it is
counter intuitive. */
-#define INTERRUPT_PRIORITY IRQ_PRIORITY_VALUE_12
+#define INTERRUPT_PRIORITY IRQ_PRIORITY_VALUE_12
/* Macro to force an interrupt. */
static void vTriggerInterrupt(void);
/* The tasks to be created. */
-static void vHandlerTask( void *pvParameters );
-static void vPeriodicTask( void *pvParameters );
+static void vHandlerTask(void *pvParameters);
+static void vPeriodicTask(void *pvParameters);
/* The service routine for the (simulated) interrupt. This is the interrupt
that the task will be synchronized with. */
static void vSetupSoftwareInterrupt(void);
/* The rate at which the periodic task generates software interrupts. */
-static const TickType_t xInterruptFrequency = pdMS_TO_TICKS( 5000UL );
+static const TickType_t xInterruptFrequency = pdMS_TO_TICKS(5000UL);
/* Stores the handle of the task to which interrupt processing is deferred. */
static xTaskHandle xtask1_handle = NULL;
@@ -50,38 +50,38 @@ static u32 cpu_id = 0;
/*-----------------------------------------------------------*/
-void CreateNotifyTakeFalseTasks( void )
+void CreateNotifyTakeFalseTasks(void)
{
- /* Install the handler for the software interrupt. The syntax necessary
- to do this is dependent on the FreeRTOS port being used. The syntax
- shown here can only be used with the FreeRTOS Windows port, where such
- interrupts are only simulated. */
- vSetupSoftwareInterrupt( );
-
- /* Create the 'handler' task, which is the task to which interrupt
- processing is deferred, and so is the task that will be synchronized
- with the interrupt. The handler task is created with a high priority to
- ensure it runs immediately after the interrupt exits. In this case a
- priority of 3 is chosen. The handle of the task is saved for use by the
- ISR. */
- xTaskCreate( vHandlerTask, "Notify False Handler", TASK_STACK_SIZE, NULL, 3, &xtask1_handle );
-
- /* Create the task that will periodically generate a software interrupt.
- This is created with a priority below the handler task to ensure it will
- get preempted each time the handler task exits the Blocked state. */
- xTaskCreate( vPeriodicTask, "Notify False Periodic", TASK_STACK_SIZE, NULL, 1, &xtask2_handle );
+ /* Install the handler for the software interrupt. The syntax necessary
+ to do this is dependent on the FreeRTOS port being used. The syntax
+ shown here can only be used with the FreeRTOS Windows port, where such
+ interrupts are only simulated. */
+ vSetupSoftwareInterrupt();
+
+ /* Create the 'handler' task, which is the task to which interrupt
+ processing is deferred, and so is the task that will be synchronized
+ with the interrupt. The handler task is created with a high priority to
+ ensure it runs immediately after the interrupt exits. In this case a
+ priority of 3 is chosen. The handle of the task is saved for use by the
+ ISR. */
+ xTaskCreate(vHandlerTask, "Notify False Handler", TASK_STACK_SIZE, NULL, 3, &xtask1_handle);
+
+ /* Create the task that will periodically generate a software interrupt.
+ This is created with a priority below the handler task to ensure it will
+ get preempted each time the handler task exits the Blocked state. */
+ xTaskCreate(vPeriodicTask, "Notify False Periodic", TASK_STACK_SIZE, NULL, 1, &xtask2_handle);
}
void DeleteNotifyTakeFalseTasks(void)
{
- if(xtask1_handle)
+ if (xtask1_handle)
{
vTaskDelete(xtask1_handle);
vPrintString("Task notify false Handler deletion");
}
- if(xtask2_handle)
+ if (xtask2_handle)
{
vTaskDelete(xtask2_handle);
vPrintString("Task notify false Periodic deletion");
@@ -89,111 +89,111 @@ void DeleteNotifyTakeFalseTasks(void)
}
/*-----------------------------------------------------------*/
-static void vHandlerTask( void *pvParameters )
+static void vHandlerTask(void *pvParameters)
{
- /* xMaxExpectedBlockTime is set to be a little longer than the maximum expected
- time between events. */
- const TickType_t xMaxExpectedBlockTime = xInterruptFrequency + pdMS_TO_TICKS( 10 );
- uint32_t ulNotificationValue = 0;
-
- /* As per most tasks, this task is implemented within an infinite loop. */
- for( ;; )
- {
- /* Wait to receive a notification sent directly to this task from the
- interrupt handler. The xClearCountOnExit parameter is now pdFALSE, so
- the task's notification will be decremented when ulTaskNotifyTake()
- returns having received a notification. */
- ulNotificationValue = ulTaskNotifyTake(pdFALSE, xMaxExpectedBlockTime);
- if( ulNotificationValue != 0 )
- {
- /* To get here the event must have occurred. Process the event (in
- this case just print out a message). */
- vPrintString( "Task Notify False Handler task - Processing event.\r\n" );
- vPrintStringAndNumber("Task Notify False ulNotificationValue= ", ulNotificationValue);
- }
- else
- {
- /* If this part of the function is reached then an interrupt did not
- arrive within the expected time, and (in a real application) it may
- be necessary to perform some error recovery operations. */
- }
- }
+ /* xMaxExpectedBlockTime is set to be a little longer than the maximum expected
+ time between events. */
+ const TickType_t xMaxExpectedBlockTime = xInterruptFrequency + pdMS_TO_TICKS(10);
+ uint32_t ulNotificationValue = 0;
+
+ /* As per most tasks, this task is implemented within an infinite loop. */
+ for (;;)
+ {
+ /* Wait to receive a notification sent directly to this task from the
+ interrupt handler. The xClearCountOnExit parameter is now pdFALSE, so
+ the task's notification will be decremented when ulTaskNotifyTake()
+ returns having received a notification. */
+ ulNotificationValue = ulTaskNotifyTake(pdFALSE, xMaxExpectedBlockTime);
+ if (ulNotificationValue != 0)
+ {
+ /* To get here the event must have occurred. Process the event (in
+ this case just print out a message). */
+ vPrintString("Task Notify False Handler task - Processing event.\r\n");
+ vPrintStringAndNumber("Task Notify False ulNotificationValue= ", ulNotificationValue);
+ }
+ else
+ {
+ /* If this part of the function is reached then an interrupt did not
+ arrive within the expected time, and (in a real application) it may
+ be necessary to perform some error recovery operations. */
+ }
+ }
}
/*-----------------------------------------------------------*/
static void ulExampleInterruptHandler(s32 vector, void *param)
{
- BaseType_t xHigherPriorityTaskWoken;
-
- /* The xHigherPriorityTaskWoken parameter must be initialized to pdFALSE as
- it will get set to pdTRUE inside the interrupt safe API function if a
- context switch is required. */
- xHigherPriorityTaskWoken = pdFALSE;
-
- /* Send a notification to the handler task multiple times. The first will
- unblock the task, the following 'gives' are to demonstrate that the
- receiving task's notification value is being used to latch events - allowing
- the task to process the events in turn. */
- vTaskNotifyGiveFromISR( xtask1_handle, &xHigherPriorityTaskWoken );
- vTaskNotifyGiveFromISR( xtask1_handle, &xHigherPriorityTaskWoken );
- vTaskNotifyGiveFromISR( xtask1_handle, &xHigherPriorityTaskWoken );
-
- /* Pass the xHigherPriorityTaskWoken value into portYIELD_FROM_ISR(). If
- xHigherPriorityTaskWoken was set to pdTRUE inside vTaskNotifyGiveFromISR()
- then calling portYIELD_FROM_ISR() will request a context switch. If
- xHigherPriorityTaskWoken is still pdFALSE then calling
- portYIELD_FROM_ISR() will have no effect. The implementation of
- portYIELD_FROM_ISR() used by the Windows port includes a return statement,
- which is why this function does not explicitly return a value. */
- portYIELD_FROM_ISR( xHigherPriorityTaskWoken );
+ BaseType_t xHigherPriorityTaskWoken;
+
+ /* The xHigherPriorityTaskWoken parameter must be initialized to pdFALSE as
+ it will get set to pdTRUE inside the interrupt safe API function if a
+ context switch is required. */
+ xHigherPriorityTaskWoken = pdFALSE;
+
+ /* Send a notification to the handler task multiple times. The first will
+ unblock the task, the following 'gives' are to demonstrate that the
+ receiving task's notification value is being used to latch events - allowing
+ the task to process the events in turn. */
+ vTaskNotifyGiveFromISR(xtask1_handle, &xHigherPriorityTaskWoken);
+ vTaskNotifyGiveFromISR(xtask1_handle, &xHigherPriorityTaskWoken);
+ vTaskNotifyGiveFromISR(xtask1_handle, &xHigherPriorityTaskWoken);
+
+ /* Pass the xHigherPriorityTaskWoken value into portYIELD_FROM_ISR(). If
+ xHigherPriorityTaskWoken was set to pdTRUE inside vTaskNotifyGiveFromISR()
+ then calling portYIELD_FROM_ISR() will request a context switch. If
+ xHigherPriorityTaskWoken is still pdFALSE then calling
+ portYIELD_FROM_ISR() will have no effect. The implementation of
+ portYIELD_FROM_ISR() used by the Windows port includes a return statement,
+ which is why this function does not explicitly return a value. */
+ portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
}
/*-----------------------------------------------------------*/
-static void vPeriodicTask( void *pvParameters )
+static void vPeriodicTask(void *pvParameters)
{
- /* As per most tasks, this task is implemented within an infinite loop. */
- for( ;; )
- {
- /* This task is just used to 'simulate' an interrupt. This is done by
- periodically generating a simulated software interrupt. Block until it
- is time to generate the software interrupt again. */
- vTaskDelay( xInterruptFrequency );
-
- /* Generate the interrupt, printing a message both before and after
- the interrupt has been generated so the sequence of execution is evident
- from the output.
-
- The syntax used to generate a software interrupt is dependent on the
- FreeRTOS port being used. The syntax used below can only be used with
- the FreeRTOS Windows port, in which such interrupts are only
- simulated. */
- vPrintString( "Task Notify False Periodic task - About to generate an interrupt." );
- vTriggerInterrupt();
- vPrintString( "Task Notify False Periodic task - Interrupt generated." );
-
-
- }
+ /* As per most tasks, this task is implemented within an infinite loop. */
+ for (;;)
+ {
+ /* This task is just used to 'simulate' an interrupt. This is done by
+ periodically generating a simulated software interrupt. Block until it
+ is time to generate the software interrupt again. */
+ vTaskDelay(xInterruptFrequency);
+
+ /* Generate the interrupt, printing a message both before and after
+ the interrupt has been generated so the sequence of execution is evident
+ from the output.
+
+ The syntax used to generate a software interrupt is dependent on the
+ FreeRTOS port being used. The syntax used below can only be used with
+ the FreeRTOS Windows port, in which such interrupts are only
+ simulated. */
+ vPrintString("Task Notify False Periodic task - About to generate an interrupt.");
+ vTriggerInterrupt();
+ vPrintString("Task Notify False Periodic task - Interrupt generated.");
+
+
+ }
}
static void vSetupSoftwareInterrupt(void)
{
- GetCpuId(&cpu_id);
+ GetCpuId(&cpu_id);
vPrintf("cpu_id is %d \r\n", cpu_id);
- /* The interrupt service routine uses an (interrupt safe) FreeRTOS API
- function so the interrupt priority must be at or below the priority defined
- by configSYSCALL_INTERRUPT_PRIORITY. */
- InterruptSetPriority(INTERRUPT_ID, INTERRUPT_PRIORITY );
+ /* The interrupt service routine uses an (interrupt safe) FreeRTOS API
+ function so the interrupt priority must be at or below the priority defined
+ by configSYSCALL_INTERRUPT_PRIORITY. */
+ InterruptSetPriority(INTERRUPT_ID, INTERRUPT_PRIORITY);
- InterruptInstall(INTERRUPT_ID, ulExampleInterruptHandler, NULL, NULL);
+ InterruptInstall(INTERRUPT_ID, ulExampleInterruptHandler, NULL, NULL);
- /* Enable the interrupt. */
- InterruptUmask(INTERRUPT_ID );
+ /* Enable the interrupt. */
+ InterruptUmask(INTERRUPT_ID);
}
/* Macro to force an interrupt. */
static void vTriggerInterrupt(void)
{
- InterruptCoreInterSend(INTERRUPT_ID, (1 << cpu_id));
+ InterruptCoreInterSend(INTERRUPT_ID, (1 << cpu_id));
}
diff --git a/example/freertos_feature/task_notify/src/notify_take_true.c b/example/freertos_feature/task_notify/src/notify_take_true.c
index 3e931a795ad3d547ed9cbcbb45ed4b2d99357837..dbd5c43fd1f42d2eafabe7f728066a9d1bac9840 100644
--- a/example/freertos_feature/task_notify/src/notify_take_true.c
+++ b/example/freertos_feature/task_notify/src/notify_take_true.c
@@ -1,7 +1,7 @@
/*
-This example demonstrates:
-uses task notification to unblock a task from within an interrupt
-service routine—effectively synchronizing the task with the interrupt.
+This example demonstrates:
+uses task notification to unblock a task from within an interrupt
+service routine—effectively synchronizing the task with the interrupt.
the ulTaskNotifyTake() xClearOnExit parameter was set to pdTRUE.
*/
@@ -14,12 +14,12 @@ the ulTaskNotifyTake() xClearOnExit parameter was set to pdTRUE.
static xTaskHandle xtask1_handle = NULL;
static xTaskHandle xtask2_handle = NULL;
-#define TASK_STACK_SIZE 1024
+#define TASK_STACK_SIZE 1024
/* The interrupt number to use for the software interrupt generation. This
could be any unused number. In this case the first chip level (non system)
interrupt is used */
-#define INTERRUPT_ID 0
+#define INTERRUPT_ID 0
/* The priority of the software interrupt. The interrupt service routine uses
an (interrupt safe) FreeRTOS API function, so the priority of the interrupt must
@@ -27,58 +27,58 @@ be equal to or lower than the priority set by
configMAX_SYSCALL_INTERRUPT_PRIORITY - remembering that on the Cortex M3 high
numeric values represent low priority values, which can be confusing as it is
counter intuitive. */
-#define INTERRUPT_PRIORITY IRQ_PRIORITY_VALUE_12
+#define INTERRUPT_PRIORITY IRQ_PRIORITY_VALUE_12
/* Macro to force an interrupt. */
static void vTriggerInterrupt(void);
/* The tasks to be created. */
-static void vHandlerTask( void *pvParameters );
-static void vPeriodicTask( void *pvParameters );
+static void vHandlerTask(void *pvParameters);
+static void vPeriodicTask(void *pvParameters);
/* The service routine for the (simulated) interrupt. This is the interrupt
that sets an event bit in the event group. */
static void vSetupSoftwareInterrupt(void);
/* The rate at which the periodic task generates software interrupts. */
-static const TickType_t xInterruptFrequency = pdMS_TO_TICKS( 5000UL );
+static const TickType_t xInterruptFrequency = pdMS_TO_TICKS(5000UL);
static u32 cpu_id = 0;
/*-----------------------------------------------------------*/
-void CreateNotifyTakeTrueTasks( void )
+void CreateNotifyTakeTrueTasks(void)
{
- /* Install the handler for the software interrupt. The syntax necessary
- to do this is dependent on the FreeRTOS port being used. The syntax
- shown here can only be used with the FreeRTOS Windows port, where such
- interrupts are only simulated. */
- vSetupSoftwareInterrupt();
-
- /* Create the 'handler' task, which is the task to which interrupt
- processing is deferred, and so is the task that will be synchronized
- with the interrupt. The handler task is created with a high priority to
- ensure it runs immediately after the interrupt exits. In this case a
- priority of 3 is chosen. The handle of the task is saved for use by the
- ISR. */
- xTaskCreate( vHandlerTask, "Notify True Handler", TASK_STACK_SIZE, NULL, 3, &xtask1_handle );
-
- /* Create the task that will periodically generate a software interrupt.
- This is created with a priority below the handler task to ensure it will
- get preempted each time the handler task exits the Blocked state. */
- xTaskCreate( vPeriodicTask, "Notify True Periodic", TASK_STACK_SIZE, NULL, 1, &xtask2_handle );
+ /* Install the handler for the software interrupt. The syntax necessary
+ to do this is dependent on the FreeRTOS port being used. The syntax
+ shown here can only be used with the FreeRTOS Windows port, where such
+ interrupts are only simulated. */
+ vSetupSoftwareInterrupt();
+
+ /* Create the 'handler' task, which is the task to which interrupt
+ processing is deferred, and so is the task that will be synchronized
+ with the interrupt. The handler task is created with a high priority to
+ ensure it runs immediately after the interrupt exits. In this case a
+ priority of 3 is chosen. The handle of the task is saved for use by the
+ ISR. */
+ xTaskCreate(vHandlerTask, "Notify True Handler", TASK_STACK_SIZE, NULL, 3, &xtask1_handle);
+
+ /* Create the task that will periodically generate a software interrupt.
+ This is created with a priority below the handler task to ensure it will
+ get preempted each time the handler task exits the Blocked state. */
+ xTaskCreate(vPeriodicTask, "Notify True Periodic", TASK_STACK_SIZE, NULL, 1, &xtask2_handle);
}
void DeleteNotifyTakeTrueTasks(void)
{
- if(xtask1_handle)
+ if (xtask1_handle)
{
vTaskDelete(xtask1_handle);
vPrintString("Task notify True Handler deletion \r\n");
}
- if(xtask2_handle)
+ if (xtask2_handle)
{
vTaskDelete(xtask2_handle);
vPrintString("Task notify True Periodic deletion \r\n");
@@ -86,114 +86,114 @@ void DeleteNotifyTakeTrueTasks(void)
}
/*-----------------------------------------------------------*/
-static void vHandlerTask( void *pvParameters )
+static void vHandlerTask(void *pvParameters)
{
- /* xMaxExpectedBlockTime is set to be a little longer than the maximum expected
- time between events. */
- const TickType_t xMaxExpectedBlockTime = xInterruptFrequency + pdMS_TO_TICKS( 10 );
- uint32_t ulEventsToProcess;
-
- /* As per most tasks, this task is implemented within an infinite loop. */
- for( ;; )
- {
- /* Wait to receive a notification sent directly to this task from the
- interrupt handler. */
- ulEventsToProcess = ulTaskNotifyTake( pdTRUE, xMaxExpectedBlockTime );
- if( ulEventsToProcess != 0 )
- {
- /* To get here at least one event must have occurred. Loop here
- until all the pending events have been processed (in this case, just
- print out a message for each event). */
- while( ulEventsToProcess > 0 )
- {
- vPrintString( "Task notify True Handler task - Processing event." );
- ulEventsToProcess--;
- }
- }
- else
- {
- /* If this part of the function is reached then an interrupt did not
- arrive within the expected time, and (in a real application) it may
- be necessary to perform some error recovery operations. */
- }
- }
+ /* xMaxExpectedBlockTime is set to be a little longer than the maximum expected
+ time between events. */
+ const TickType_t xMaxExpectedBlockTime = xInterruptFrequency + pdMS_TO_TICKS(10);
+ uint32_t ulEventsToProcess;
+
+ /* As per most tasks, this task is implemented within an infinite loop. */
+ for (;;)
+ {
+ /* Wait to receive a notification sent directly to this task from the
+ interrupt handler. */
+ ulEventsToProcess = ulTaskNotifyTake(pdTRUE, xMaxExpectedBlockTime);
+ if (ulEventsToProcess != 0)
+ {
+ /* To get here at least one event must have occurred. Loop here
+ until all the pending events have been processed (in this case, just
+ print out a message for each event). */
+ while (ulEventsToProcess > 0)
+ {
+ vPrintString("Task notify True Handler task - Processing event.");
+ ulEventsToProcess--;
+ }
+ }
+ else
+ {
+ /* If this part of the function is reached then an interrupt did not
+ arrive within the expected time, and (in a real application) it may
+ be necessary to perform some error recovery operations. */
+ }
+ }
}
/*-----------------------------------------------------------*/
static void ulExampleInterruptHandler(s32 vector, void *param)
{
- BaseType_t xHigherPriorityTaskWoken;
-
- /* The xHigherPriorityTaskWoken parameter must be initialized to pdFALSE as
- it will get set to pdTRUE inside the interrupt safe API function if a
- context switch is required. */
- xHigherPriorityTaskWoken = pdFALSE;
-
- /* Send a notification directly to the handler task. */
- vTaskNotifyGiveFromISR( /* The handle of the task to which the notification
- is being sent. The handle was saved when the task
- was created. */
- xtask1_handle,
-
- /* xHigherPriorityTaskWoken is used in the usual
- way. */
- &xHigherPriorityTaskWoken );
-
- /* Pass the xHigherPriorityTaskWoken value into portYIELD_FROM_ISR(). If
- xHigherPriorityTaskWoken was set to pdTRUE inside vTaskNotifyGiveFromISR()
- then calling portYIELD_FROM_ISR() will request a context switch. If
- xHigherPriorityTaskWoken is still pdFALSE then calling
- portYIELD_FROM_ISR() will have no effect. The implementation of
- portYIELD_FROM_ISR() used by the Windows port includes a return statement,
- which is why this function does not explicitly return a value. */
- portYIELD_FROM_ISR( xHigherPriorityTaskWoken );
+ BaseType_t xHigherPriorityTaskWoken;
+
+ /* The xHigherPriorityTaskWoken parameter must be initialized to pdFALSE as
+ it will get set to pdTRUE inside the interrupt safe API function if a
+ context switch is required. */
+ xHigherPriorityTaskWoken = pdFALSE;
+
+ /* Send a notification directly to the handler task. */
+ vTaskNotifyGiveFromISR(/* The handle of the task to which the notification
+ is being sent. The handle was saved when the task
+ was created. */
+ xtask1_handle,
+
+ /* xHigherPriorityTaskWoken is used in the usual
+ way. */
+ &xHigherPriorityTaskWoken);
+
+ /* Pass the xHigherPriorityTaskWoken value into portYIELD_FROM_ISR(). If
+ xHigherPriorityTaskWoken was set to pdTRUE inside vTaskNotifyGiveFromISR()
+ then calling portYIELD_FROM_ISR() will request a context switch. If
+ xHigherPriorityTaskWoken is still pdFALSE then calling
+ portYIELD_FROM_ISR() will have no effect. The implementation of
+ portYIELD_FROM_ISR() used by the Windows port includes a return statement,
+ which is why this function does not explicitly return a value. */
+ portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
}
/*-----------------------------------------------------------*/
-static void vPeriodicTask( void *pvParameters )
+static void vPeriodicTask(void *pvParameters)
{
- /* As per most tasks, this task is implemented within an infinite loop. */
- for( ;; )
- {
- /* This task is just used to 'simulate' an interrupt. This is done by
- periodically generating a simulated software interrupt. Block until it
- is time to generate the software interrupt again. */
- vTaskDelay( xInterruptFrequency );
-
- /* Generate the interrupt, printing a message both before and after
- the interrupt has been generated so the sequence of execution is evident
- from the output.
-
- The syntax used to generate a software interrupt is dependent on the
- FreeRTOS port being used. The syntax used below can only be used with
- the FreeRTOS Windows port, in which such interrupts are only
- simulated. */
- vPrintString( "Task Notify True Periodic task - About to generate an interrupt." );
- vTriggerInterrupt();
- vPrintString( "Task Notify True Periodic task - Interrupt generated." );
- }
+ /* As per most tasks, this task is implemented within an infinite loop. */
+ for (;;)
+ {
+ /* This task is just used to 'simulate' an interrupt. This is done by
+ periodically generating a simulated software interrupt. Block until it
+ is time to generate the software interrupt again. */
+ vTaskDelay(xInterruptFrequency);
+
+ /* Generate the interrupt, printing a message both before and after
+ the interrupt has been generated so the sequence of execution is evident
+ from the output.
+
+ The syntax used to generate a software interrupt is dependent on the
+ FreeRTOS port being used. The syntax used below can only be used with
+ the FreeRTOS Windows port, in which such interrupts are only
+ simulated. */
+ vPrintString("Task Notify True Periodic task - About to generate an interrupt.");
+ vTriggerInterrupt();
+ vPrintString("Task Notify True Periodic task - Interrupt generated.");
+ }
}
static void vSetupSoftwareInterrupt(void)
{
- GetCpuId(&cpu_id);
+ GetCpuId(&cpu_id);
vPrintf("cpu_id is %d \r\n", cpu_id);
- /* The interrupt service routine uses an (interrupt safe) FreeRTOS API
- function so the interrupt priority must be at or below the priority defined
- by configSYSCALL_INTERRUPT_PRIORITY. */
- InterruptSetPriority(INTERRUPT_ID, INTERRUPT_PRIORITY );
+ /* The interrupt service routine uses an (interrupt safe) FreeRTOS API
+ function so the interrupt priority must be at or below the priority defined
+ by configSYSCALL_INTERRUPT_PRIORITY. */
+ InterruptSetPriority(INTERRUPT_ID, INTERRUPT_PRIORITY);
- InterruptInstall(INTERRUPT_ID, ulExampleInterruptHandler, NULL, NULL);
+ InterruptInstall(INTERRUPT_ID, ulExampleInterruptHandler, NULL, NULL);
- /* Enable the interrupt. */
- InterruptUmask(INTERRUPT_ID );
+ /* Enable the interrupt. */
+ InterruptUmask(INTERRUPT_ID);
}
/* Macro to force an interrupt. */
static void vTriggerInterrupt(void)
{
- InterruptCoreInterSend(INTERRUPT_ID, (1 << cpu_id));
+ InterruptCoreInterSend(INTERRUPT_ID, (1 << cpu_id));
}
diff --git a/example/freertos_feature/task_notify/src/task_notify_cmd.c b/example/freertos_feature/task_notify/src/task_notify_cmd.c
index fe601ba33c6fd65bc3f9386a863d00c3b5eb2a7e..820e8bafb35a55c64b938a7042a1361f678af2fa 100644
--- a/example/freertos_feature/task_notify/src/task_notify_cmd.c
+++ b/example/freertos_feature/task_notify/src/task_notify_cmd.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: task_notify_cmd.c
* Date: 2022-06-17 10:41:45
* LastEditTime: 2022-06-17 10:41:45
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
+ * Description: This file is for task notifiy command interface
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2022/08/09 first commit
*/
#include "shell.h"
#include
@@ -34,15 +35,15 @@ typedef enum
static void TaskNotifyCmdUsage(void)
{
- printf("usage:\r\n");
+ printf("Usage:\r\n");
printf(" notify true_cre \r\n");
- printf(" -- create task notify test now, use notify take true\r\n");
+ printf(" -- Create task notify test now, use notify take true.\r\n");
printf(" notify true_del \r\n");
- printf(" -- del notify take true tasks now\r\n");
+ printf(" -- Del notify take true tasks now.\r\n");
printf(" notify false_cre \r\n");
- printf(" -- create task notify test now, use notify take false\r\n");
+ printf(" -- Create task notify test now, use notify take false.\r\n");
printf(" notify false_del \r\n");
- printf(" -- del notify take false tasks now\r\n");
+ printf(" -- Del notify take false tasks now.\r\n");
}
@@ -58,55 +59,55 @@ int TaskNotifyCmd(int argc, char *argv[])
if (!strcmp(argv[1], "true_cre"))
{
- if(create_flg[NOTIFY_TAKE_TRUE_TASK_INDEX] == 0)
+ if (create_flg[NOTIFY_TAKE_TRUE_TASK_INDEX] == 0)
{
CreateNotifyTakeTrueTasks();
create_flg[NOTIFY_TAKE_TRUE_TASK_INDEX] = 1;
}
else
{
- printf("Please use true_del cmd first \r\n");
+ printf("Please use true_del cmd first. \r\n");
}
}
else if (!strcmp(argv[1], "true_del"))
{
- if(create_flg[NOTIFY_TAKE_TRUE_TASK_INDEX] == 1)
+ if (create_flg[NOTIFY_TAKE_TRUE_TASK_INDEX] == 1)
{
DeleteNotifyTakeTrueTasks();
create_flg[NOTIFY_TAKE_TRUE_TASK_INDEX] = 0;
- }
+ }
else
{
- printf("Please use true_cre cmd first \r\n");
+ printf("Please use true_cre cmd first. \r\n");
}
}
else if (!strcmp(argv[1], "false_cre"))
{
- if(create_flg[NOTIFY_TAKE_FALSE_TASK_INDEX] == 0)
+ if (create_flg[NOTIFY_TAKE_FALSE_TASK_INDEX] == 0)
{
CreateNotifyTakeFalseTasks();
create_flg[NOTIFY_TAKE_FALSE_TASK_INDEX] = 1;
}
else
{
- printf("Please use false_del cmd first \r\n");
+ printf("Please use false_del cmd first. \r\n");
}
}
else if (!strcmp(argv[1], "false_del"))
{
- if(create_flg[NOTIFY_TAKE_FALSE_TASK_INDEX] == 1)
+ if (create_flg[NOTIFY_TAKE_FALSE_TASK_INDEX] == 1)
{
DeleteNotifyTakeFalseTasks();
create_flg[NOTIFY_TAKE_FALSE_TASK_INDEX] = 0;
- }
+ }
else
{
- printf("Please use false_cre cmd first \r\n");
+ printf("Please use false_cre cmd first. \r\n");
}
}
else
{
- printf("Error: Invalid arguments \r\n");
+ printf("Error: Invalid arguments. \r\n");
TaskNotifyCmdUsage();
}
return 0;
diff --git a/example/makefile b/example/makefile
deleted file mode 100644
index 84072e2873535a6238b437d0e5977a6952fe8bb5..0000000000000000000000000000000000000000
--- a/example/makefile
+++ /dev/null
@@ -1,18 +0,0 @@
-# Compiling all examples
-TOPTARGETS := all clean
-
-#SUBDIRS := $(wildcard */.)
-SUBDIRS := freertos_feature \
- hello_world \
- start_up \
- lwip_test \
- template
-
-$(TOPTARGETS): $(SUBDIRS)
- @for i in $(SUBDIRS); do \
- echo -e "\033[44;37;1m +++ Compiling $$i...\033[0m"; \
- $(MAKE) -C $$i $(MAKECMDGOALS) > /dev/null || exit $$?; \
- echo -e "\033[44;37;1m +++ Compiled OK $$i...\033[0m"; \
- done
-
-.PHONY: $(TOPTARGETS) $(SUBDIRS)
\ No newline at end of file
diff --git a/example/network/gmac_lwip_test/Kconfig b/example/network/gmac_lwip_test/Kconfig
deleted file mode 100644
index 836a5a319d0f60edd4bbdf620513ce949c60de7f..0000000000000000000000000000000000000000
--- a/example/network/gmac_lwip_test/Kconfig
+++ /dev/null
@@ -1,41 +0,0 @@
-mainmenu "Phytium FreeRTOS Configuration"
-
- menu "Project Configuration"
-
- config TARGET_NAME
- string "Build Target Name"
- default "freertos"
- help
- Build Target name for the demo
-
- choice
- prompt "choice lwip config"
- default LWIP_IPV4_TEST
- config LWIP_IPV4_TEST
- bool "test lwip ipv4"
- config LWIP_IPV4_DHCP_TEST
- bool "test lwip ipv4 and dhcp"
- config LWIP_IPV6_TEST
- bool "test lwip ipv6"
- endchoice
-
- config GMAC_RX_DESCNUM
- int "receive description number"
- default "16"
- help
- receive description number for the demo
-
- config GMAC_TX_DESCNUM
- int "transmit description number"
- default "16"
- help
- transmit description number for the demo
-
- config GMAC_IRQ_PRIORITY
- int "gmac irq priority, 0~15"
- default "12"
- help
- gmac irq priority for the demo
- endmenu
-
-source "$(FREERTOS_SDK_ROOT)/Kconfig"
diff --git a/example/network/gmac_lwip_test/configs/d2000_aarch32_eg_configs b/example/network/gmac_lwip_test/configs/d2000_aarch32_eg_configs
deleted file mode 100644
index a0b4722fc0ba86d5336a9b9c072c99f41747c489..0000000000000000000000000000000000000000
--- a/example/network/gmac_lwip_test/configs/d2000_aarch32_eg_configs
+++ /dev/null
@@ -1,411 +0,0 @@
-
-#
-# Project Configuration
-#
-CONFIG_TARGET_NAME="d2000_freertos_a32"
-CONFIG_LWIP_IPV4_TEST=y
-# CONFIG_LWIP_IPV4_DHCP_TEST is not set
-# CONFIG_LWIP_IPV6_TEST is not set
-CONFIG_GMAC_RX_DESCNUM=16
-CONFIG_GMAC_TX_DESCNUM=16
-CONFIG_GMAC_IRQ_PRIORITY=12
-# end of Project Configuration
-
-#
-# Standalone Setting
-#
-CONFIG_USE_FREERTOS=y
-
-#
-# Arch Configuration
-#
-CONFIG_TARGET_ARMV8_AARCH32=y
-# CONFIG_TARGET_ARMV8_AARCH64 is not set
-CONFIG_USE_CACHE=y
-CONFIG_USE_L3CACHE=y
-CONFIG_USE_MMU=y
-CONFIG_USE_SYS_TICK=y
-CONFIG_USE_AARCH64_L1_TO_AARCH32=y
-# end of Arch Configuration
-
-#
-# Board Configuration
-#
-# CONFIG_TARGET_F2000_4 is not set
-CONFIG_TARGET_D2000=y
-# CONFIG_TARGET_E2000Q is not set
-# CONFIG_TARGET_E2000D is not set
-# CONFIG_TARGET_E2000S is not set
-CONFIG_DEFAULT_DEBUG_PRINT_UART1=y
-# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set
-# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set
-# end of Board Configuration
-
-#
-# Components Configuration
-#
-# CONFIG_USE_SPI is not set
-# CONFIG_USE_QSPI is not set
-CONFIG_USE_GIC=y
-CONFIG_ENABLE_GICV3=y
-CONFIG_USE_SERIAL=y
-
-#
-# Usart Configuration
-#
-CONFIG_ENABLE_Pl011_UART=y
-# end of Usart Configuration
-
-# CONFIG_USE_GPIO is not set
-CONFIG_USE_ETH=y
-
-#
-# Eth Configuration
-#
-# CONFIG_ENABLE_FXMAC is not set
-CONFIG_ENABLE_FGMAC=y
-CONFIG_FGMAC_PHY_COMMON=y
-# CONFIG_FGMAC_PHY_AR803X is not set
-# end of Eth Configuration
-
-# CONFIG_USE_CAN is not set
-# CONFIG_USE_I2C is not set
-# CONFIG_USE_TIMER is not set
-# CONFIG_USE_MIO is not set
-# CONFIG_USE_SDMMC is not set
-# CONFIG_USE_PCIE is not set
-# CONFIG_USE_WDT is not set
-# CONFIG_USE_DMA is not set
-# CONFIG_USE_NAND is not set
-# CONFIG_USE_RTC is not set
-# CONFIG_USE_SATA is not set
-# CONFIG_USE_USB is not set
-# CONFIG_USE_ADC is not set
-# CONFIG_USE_PWM is not set
-# CONFIG_USE_IPC is not set
-# end of Components Configuration
-
-CONFIG_USE_NEW_LIBC=y
-# end of Standalone Setting
-
-#
-# Building Option
-#
-# CONFIG_LOG_VERBOS is not set
-# CONFIG_LOG_DEBUG is not set
-CONFIG_LOG_INFO=y
-# CONFIG_LOG_WARN is not set
-# CONFIG_LOG_ERROR is not set
-# CONFIG_LOG_NONE is not set
-CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y
-CONFIG_INTERRUPT_ROLE_MASTER=y
-# CONFIG_INTERRUPT_ROLE_SLAVE is not set
-# CONFIG_LOG_EXTRA_INFO is not set
-# CONFIG_BOOTUP_DEBUG_PRINTS is not set
-
-#
-# Linker Options
-#
-CONFIG_AARCH32_RAM_LD=y
-# CONFIG_AARCH64_RAM_LD is not set
-# CONFIG_USER_DEFINED_LD is not set
-CONFIG_LINK_SCRIPT_ROM=y
-CONFIG_ROM_START_UP_ADDR=0x80100000
-CONFIG_ROM_SIZE_MB=1
-CONFIG_LINK_SCRIPT_RAM=y
-CONFIG_RAM_START_UP_ADDR=0x81000000
-CONFIG_RAM_SIZE_MB=64
-CONFIG_HEAP_SIZE=1
-CONFIG_SVC_STACK_SIZE=0x1000
-CONFIG_SYS_STACK_SIZE=0x1000
-CONFIG_IRQ_STACK_SIZE=0x1000
-CONFIG_ABORT_STACK_SIZE=0x1000
-CONFIG_FIQ_STACK_SIZE=0x1000
-CONFIG_UNDEF_STACK_SIZE=0x1000
-# end of Linker Options
-
-#
-# Compiler Options
-#
-# CONFIG_OUTPUT_BINARY is not set
-# end of Compiler Options
-# end of Building Option
-
-#
-# Component Configuration
-#
-
-#
-# Freertos Uart Drivers
-#
-CONFIG_FREERTOS_USE_UART=y
-# end of Freertos Uart Drivers
-
-#
-# Freertos Pwm Drivers
-#
-# CONFIG_FREERTOS_USE_PWM is not set
-# end of Freertos Pwm Drivers
-
-#
-# Freertos Qspi Drivers
-#
-# CONFIG_FREERTOS_USE_QSPI is not set
-# end of Freertos Qspi Drivers
-
-#
-# Freertos Wdt Drivers
-#
-# CONFIG_FREERTOS_USE_WDT is not set
-# end of Freertos Wdt Drivers
-
-#
-# Freertos Eth Drivers
-#
-# CONFIG_FREERTOS_USE_XMAC is not set
-# end of Freertos Eth Drivers
-
-#
-# Freertos Gpio Drivers
-#
-# CONFIG_FREERTOS_USE_GPIO is not set
-# end of Freertos Gpio Drivers
-
-#
-# Freertos Spim Drivers
-#
-# CONFIG_FREERTOS_USE_FSPIM is not set
-# end of Freertos Spim Drivers
-
-#
-# Freertos DMA Drivers
-#
-# CONFIG_FREERTOS_USE_FDDMA is not set
-# CONFIG_FREERTOS_USE_FGDMA is not set
-# end of Freertos DMA Drivers
-
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
-#
-# Freertos Adc Drivers
-#
-# CONFIG_FREERTOS_USE_ADC is not set
-# end of Freertos Adc Drivers
-
-#
-# Freertos Can Drivers
-#
-# CONFIG_FREERTOS_USE_CAN is not set
-# end of Freertos Can Drivers
-# end of Component Configuration
-
-#
-# FreeRTOS Setting
-#
-CONFIG_USE_LWIP=y
-
-#
-# LWIP Configuration
-#
-
-#
-# LWIP Port Configuration
-#
-CONFIG_LWIP_FGMAC=y
-# CONFIG_LWIP_FXMAC is not set
-# end of LWIP Port Configuration
-
-CONFIG_LWIP_LOCAL_HOSTNAME="phytium"
-
-#
-# memory configuration
-#
-CONFIG_LWIP_USE_MEM_POOL=y
-# CONFIG_LWIP_USE_MEM_HEAP is not set
-CONFIG_MEMP_NUM_PBUF=64
-CONFIG_MEM_ALIGNMENT=64
-# end of memory configuration
-
-#
-# NETWORK_INTERFACE_OPTIONS
-#
-# CONFIG_LWIP_NETIF_API is not set
-# CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set
-# end of NETWORK_INTERFACE_OPTIONS
-
-#
-# LOOPIF
-#
-CONFIG_LWIP_NETIF_LOOPBACK=y
-CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8
-# end of LOOPIF
-
-#
-# SLIPIF
-#
-# CONFIG_LWIP_SLIP_SUPPORT is not set
-# end of SLIPIF
-
-#
-# Pbuf options
-#
-CONFIG_PBUF_POOL_BUFSIZE=2
-# end of Pbuf options
-
-#
-# Internal Memory Pool Sizes
-#
-CONFIG_PBUF_POOL_SIZE=1
-# end of Internal Memory Pool Sizes
-
-CONFIG_LWIP_MAX_SOCKETS=10
-
-#
-# LWIP RAW API
-#
-CONFIG_LWIP_MAX_RAW_PCBS=16
-# end of LWIP RAW API
-
-#
-# TCP
-#
-CONFIG_LWIP_MAX_ACTIVE_TCP=16
-CONFIG_LWIP_MAX_LISTENING_TCP=16
-CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y
-CONFIG_LWIP_TCP_MAXRTX=12
-CONFIG_LWIP_TCP_SYNMAXRTX=12
-CONFIG_LWIP_TCP_MSS=1440
-CONFIG_LWIP_TCP_TMR_INTERVAL=250
-CONFIG_LWIP_TCP_MSL=60000
-CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5744
-CONFIG_LWIP_TCP_WND_DEFAULT=5744
-CONFIG_LWIP_TCP_RECVMBOX_SIZE=6
-CONFIG_LWIP_TCP_QUEUE_OOSEQ=y
-# CONFIG_LWIP_TCP_SACK_OUT is not set
-CONFIG_LWIP_TCP_OVERSIZE_MSS=y
-# CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set
-# CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set
-# end of TCP
-
-#
-# UDP
-#
-CONFIG_LWIP_MAX_UDP_PCBS=16
-CONFIG_LWIP_UDP_RECVMBOX_SIZE=6
-# CONFIG_LWIP_NETBUF_RECVINFO is not set
-# end of UDP
-
-#
-# IPv4
-#
-# CONFIG_USE_IPV4_ONLY is not set
-# CONFIG_LWIP_IP4_REASSEMBLY is not set
-CONFIG_LWIP_IP4_FRAG=y
-# CONFIG_LWIP_IP_FORWARD is not set
-CONFIG_IP_REASS_MAX_PBUFS=16
-# end of IPv4
-
-#
-# ICMP
-#
-CONFIG_LWIP_ICMP=y
-# CONFIG_LWIP_MULTICAST_PING is not set
-# CONFIG_LWIP_BROADCAST_PING is not set
-# end of ICMP
-
-#
-# DHCP
-#
-# CONFIG_LWIP_DHCP_ENABLE is not set
-CONFIG_LWIP_DHCP_DOES_ARP_CHECK=y
-# CONFIG_LWIP_DHCP_GET_NTP_SRV is not set
-# CONFIG_LWIP_DHCP_DISABLE_CLIENT_ID is not set
-# CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set
-CONFIG_LWIP_DHCP_OPTIONS_LEN=68
-CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y
-# end of DHCP
-
-#
-# AUTOIP
-#
-# CONFIG_LWIP_AUTOIP is not set
-# end of AUTOIP
-
-#
-# DNS
-#
-CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y
-# end of DNS
-
-#
-# TCP options
-#
-CONFIG_LWIP_TCP_RTO_TIME=1500
-# end of TCP options
-
-# CONFIG_LWIP_TCPIP_CORE_LOCKING is not set
-
-#
-# socket
-#
-# CONFIG_LWIP_SO_LINGER is not set
-CONFIG_LWIP_SO_REUSE=y
-CONFIG_LWIP_SO_REUSE_RXTOALL=y
-# end of socket
-
-# CONFIG_LWIP_STATS is not set
-
-#
-# PPP
-#
-# CONFIG_LWIP_PPP_SUPPORT is not set
-CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3
-CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5
-# end of PPP
-
-#
-# Checksums
-#
-# CONFIG_LWIP_CHECKSUM_CHECK_IP is not set
-# CONFIG_LWIP_CHECKSUM_CHECK_UDP is not set
-CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y
-# end of Checksums
-
-#
-# ipv6
-#
-CONFIG_LWIP_IPV6=y
-# CONFIG_LWIP_IPV6_AUTOCONFIG is not set
-CONFIG_LWIP_IPV6_NUM_ADDRESSES=3
-# CONFIG_LWIP_IPV6_FORWARD is not set
-CONFIG_LWIP_IP6_FRAG=y
-# CONFIG_LWIP_IP6_REASSEMBLY is not set
-# end of ipv6
-
-# CONFIG_LWIP_DEBUG is not set
-# end of LWIP Configuration
-
-CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
-# CONFIG_USE_SFUD is not set
-# CONFIG_USE_SPIFFS is not set
-# CONFIG_USE_AMP is not set
-CONFIG_USE_LETTER_SHELL=y
-
-#
-# Letter Shell Configuration
-#
-CONFIG_LS_PL011_UART=y
-CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
-# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set
-# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set
-# end of Letter Shell Configuration
-
-CONFIG_USE_TLSF=y
-# CONFIG_USE_SDMMC_CMD is not set
-# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
diff --git a/example/network/gmac_lwip_test/configs/d2000_aarch64_eg_configs b/example/network/gmac_lwip_test/configs/d2000_aarch64_eg_configs
deleted file mode 100644
index b4dd0538e9dd1f344d719faa6d2faf2beef027f6..0000000000000000000000000000000000000000
--- a/example/network/gmac_lwip_test/configs/d2000_aarch64_eg_configs
+++ /dev/null
@@ -1,407 +0,0 @@
-
-#
-# Project Configuration
-#
-CONFIG_TARGET_NAME="d2000_freertos_a64"
-CONFIG_LWIP_IPV4_TEST=y
-# CONFIG_LWIP_IPV4_DHCP_TEST is not set
-# CONFIG_LWIP_IPV6_TEST is not set
-CONFIG_GMAC_RX_DESCNUM=16
-CONFIG_GMAC_TX_DESCNUM=16
-CONFIG_GMAC_IRQ_PRIORITY=12
-# end of Project Configuration
-
-#
-# Standalone Setting
-#
-CONFIG_USE_FREERTOS=y
-
-#
-# Arch Configuration
-#
-# CONFIG_TARGET_ARMV8_AARCH32 is not set
-CONFIG_TARGET_ARMV8_AARCH64=y
-CONFIG_USE_CACHE=y
-CONFIG_USE_L3CACHE=y
-CONFIG_USE_MMU=y
-CONFIG_USE_SYS_TICK=y
-# CONFIG_MMU_DEBUG_PRINTS is not set
-# end of Arch Configuration
-
-#
-# Board Configuration
-#
-# CONFIG_TARGET_F2000_4 is not set
-CONFIG_TARGET_D2000=y
-# CONFIG_TARGET_E2000Q is not set
-# CONFIG_TARGET_E2000D is not set
-# CONFIG_TARGET_E2000S is not set
-CONFIG_DEFAULT_DEBUG_PRINT_UART1=y
-# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set
-# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set
-# end of Board Configuration
-
-#
-# Components Configuration
-#
-# CONFIG_USE_SPI is not set
-# CONFIG_USE_QSPI is not set
-CONFIG_USE_GIC=y
-CONFIG_ENABLE_GICV3=y
-CONFIG_USE_SERIAL=y
-
-#
-# Usart Configuration
-#
-CONFIG_ENABLE_Pl011_UART=y
-# end of Usart Configuration
-
-# CONFIG_USE_GPIO is not set
-CONFIG_USE_ETH=y
-
-#
-# Eth Configuration
-#
-# CONFIG_ENABLE_FXMAC is not set
-CONFIG_ENABLE_FGMAC=y
-CONFIG_FGMAC_PHY_COMMON=y
-# CONFIG_FGMAC_PHY_AR803X is not set
-# end of Eth Configuration
-
-# CONFIG_USE_CAN is not set
-# CONFIG_USE_I2C is not set
-# CONFIG_USE_TIMER is not set
-# CONFIG_USE_MIO is not set
-# CONFIG_USE_SDMMC is not set
-# CONFIG_USE_PCIE is not set
-# CONFIG_USE_WDT is not set
-# CONFIG_USE_DMA is not set
-# CONFIG_USE_NAND is not set
-# CONFIG_USE_RTC is not set
-# CONFIG_USE_SATA is not set
-# CONFIG_USE_USB is not set
-# CONFIG_USE_ADC is not set
-# CONFIG_USE_PWM is not set
-# CONFIG_USE_IPC is not set
-# end of Components Configuration
-
-CONFIG_USE_NEW_LIBC=y
-# end of Standalone Setting
-
-#
-# Building Option
-#
-# CONFIG_LOG_VERBOS is not set
-# CONFIG_LOG_DEBUG is not set
-CONFIG_LOG_INFO=y
-# CONFIG_LOG_WARN is not set
-# CONFIG_LOG_ERROR is not set
-# CONFIG_LOG_NONE is not set
-CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y
-CONFIG_INTERRUPT_ROLE_MASTER=y
-# CONFIG_INTERRUPT_ROLE_SLAVE is not set
-# CONFIG_LOG_EXTRA_INFO is not set
-# CONFIG_BOOTUP_DEBUG_PRINTS is not set
-
-#
-# Linker Options
-#
-# CONFIG_AARCH32_RAM_LD is not set
-CONFIG_AARCH64_RAM_LD=y
-# CONFIG_USER_DEFINED_LD is not set
-CONFIG_LINK_SCRIPT_ROM=y
-CONFIG_ROM_START_UP_ADDR=0x80100000
-CONFIG_ROM_SIZE_MB=1
-CONFIG_LINK_SCRIPT_RAM=y
-CONFIG_RAM_START_UP_ADDR=0x81000000
-CONFIG_RAM_SIZE_MB=64
-CONFIG_HEAP_SIZE=1
-CONFIG_STACK_SIZE=0x100000
-CONFIG_FPU_STACK_SIZE=0x1000
-# end of Linker Options
-
-#
-# Compiler Options
-#
-# CONFIG_OUTPUT_BINARY is not set
-# end of Compiler Options
-# end of Building Option
-
-#
-# Component Configuration
-#
-
-#
-# Freertos Uart Drivers
-#
-CONFIG_FREERTOS_USE_UART=y
-# end of Freertos Uart Drivers
-
-#
-# Freertos Pwm Drivers
-#
-# CONFIG_FREERTOS_USE_PWM is not set
-# end of Freertos Pwm Drivers
-
-#
-# Freertos Qspi Drivers
-#
-# CONFIG_FREERTOS_USE_QSPI is not set
-# end of Freertos Qspi Drivers
-
-#
-# Freertos Wdt Drivers
-#
-# CONFIG_FREERTOS_USE_WDT is not set
-# end of Freertos Wdt Drivers
-
-#
-# Freertos Eth Drivers
-#
-# CONFIG_FREERTOS_USE_XMAC is not set
-# end of Freertos Eth Drivers
-
-#
-# Freertos Gpio Drivers
-#
-# CONFIG_FREERTOS_USE_GPIO is not set
-# end of Freertos Gpio Drivers
-
-#
-# Freertos Spim Drivers
-#
-# CONFIG_FREERTOS_USE_FSPIM is not set
-# end of Freertos Spim Drivers
-
-#
-# Freertos DMA Drivers
-#
-# CONFIG_FREERTOS_USE_FDDMA is not set
-# CONFIG_FREERTOS_USE_FGDMA is not set
-# end of Freertos DMA Drivers
-
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
-#
-# Freertos Adc Drivers
-#
-# CONFIG_FREERTOS_USE_ADC is not set
-# end of Freertos Adc Drivers
-
-#
-# Freertos Can Drivers
-#
-# CONFIG_FREERTOS_USE_CAN is not set
-# end of Freertos Can Drivers
-# end of Component Configuration
-
-#
-# FreeRTOS Setting
-#
-CONFIG_USE_LWIP=y
-
-#
-# LWIP Configuration
-#
-
-#
-# LWIP Port Configuration
-#
-CONFIG_LWIP_FGMAC=y
-# CONFIG_LWIP_FXMAC is not set
-# end of LWIP Port Configuration
-
-CONFIG_LWIP_LOCAL_HOSTNAME="phytium"
-
-#
-# memory configuration
-#
-CONFIG_LWIP_USE_MEM_POOL=y
-# CONFIG_LWIP_USE_MEM_HEAP is not set
-CONFIG_MEMP_NUM_PBUF=64
-CONFIG_MEM_ALIGNMENT=64
-# end of memory configuration
-
-#
-# NETWORK_INTERFACE_OPTIONS
-#
-# CONFIG_LWIP_NETIF_API is not set
-# CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set
-# end of NETWORK_INTERFACE_OPTIONS
-
-#
-# LOOPIF
-#
-CONFIG_LWIP_NETIF_LOOPBACK=y
-CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8
-# end of LOOPIF
-
-#
-# SLIPIF
-#
-# CONFIG_LWIP_SLIP_SUPPORT is not set
-# end of SLIPIF
-
-#
-# Pbuf options
-#
-CONFIG_PBUF_POOL_BUFSIZE=2
-# end of Pbuf options
-
-#
-# Internal Memory Pool Sizes
-#
-CONFIG_PBUF_POOL_SIZE=1
-# end of Internal Memory Pool Sizes
-
-CONFIG_LWIP_MAX_SOCKETS=10
-
-#
-# LWIP RAW API
-#
-CONFIG_LWIP_MAX_RAW_PCBS=16
-# end of LWIP RAW API
-
-#
-# TCP
-#
-CONFIG_LWIP_MAX_ACTIVE_TCP=16
-CONFIG_LWIP_MAX_LISTENING_TCP=16
-CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y
-CONFIG_LWIP_TCP_MAXRTX=12
-CONFIG_LWIP_TCP_SYNMAXRTX=12
-CONFIG_LWIP_TCP_MSS=1440
-CONFIG_LWIP_TCP_TMR_INTERVAL=250
-CONFIG_LWIP_TCP_MSL=60000
-CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5744
-CONFIG_LWIP_TCP_WND_DEFAULT=5744
-CONFIG_LWIP_TCP_RECVMBOX_SIZE=6
-CONFIG_LWIP_TCP_QUEUE_OOSEQ=y
-# CONFIG_LWIP_TCP_SACK_OUT is not set
-CONFIG_LWIP_TCP_OVERSIZE_MSS=y
-# CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set
-# CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set
-# end of TCP
-
-#
-# UDP
-#
-CONFIG_LWIP_MAX_UDP_PCBS=16
-CONFIG_LWIP_UDP_RECVMBOX_SIZE=6
-# CONFIG_LWIP_NETBUF_RECVINFO is not set
-# end of UDP
-
-#
-# IPv4
-#
-# CONFIG_USE_IPV4_ONLY is not set
-# CONFIG_LWIP_IP4_REASSEMBLY is not set
-CONFIG_LWIP_IP4_FRAG=y
-# CONFIG_LWIP_IP_FORWARD is not set
-CONFIG_IP_REASS_MAX_PBUFS=16
-# end of IPv4
-
-#
-# ICMP
-#
-CONFIG_LWIP_ICMP=y
-# CONFIG_LWIP_MULTICAST_PING is not set
-# CONFIG_LWIP_BROADCAST_PING is not set
-# end of ICMP
-
-#
-# DHCP
-#
-# CONFIG_LWIP_DHCP_ENABLE is not set
-CONFIG_LWIP_DHCP_DOES_ARP_CHECK=y
-# CONFIG_LWIP_DHCP_GET_NTP_SRV is not set
-# CONFIG_LWIP_DHCP_DISABLE_CLIENT_ID is not set
-# CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set
-CONFIG_LWIP_DHCP_OPTIONS_LEN=68
-CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y
-# end of DHCP
-
-#
-# AUTOIP
-#
-# CONFIG_LWIP_AUTOIP is not set
-# end of AUTOIP
-
-#
-# DNS
-#
-CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y
-# end of DNS
-
-#
-# TCP options
-#
-CONFIG_LWIP_TCP_RTO_TIME=1500
-# end of TCP options
-
-# CONFIG_LWIP_TCPIP_CORE_LOCKING is not set
-
-#
-# socket
-#
-# CONFIG_LWIP_SO_LINGER is not set
-CONFIG_LWIP_SO_REUSE=y
-CONFIG_LWIP_SO_REUSE_RXTOALL=y
-# end of socket
-
-# CONFIG_LWIP_STATS is not set
-
-#
-# PPP
-#
-# CONFIG_LWIP_PPP_SUPPORT is not set
-CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3
-CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5
-# end of PPP
-
-#
-# Checksums
-#
-# CONFIG_LWIP_CHECKSUM_CHECK_IP is not set
-# CONFIG_LWIP_CHECKSUM_CHECK_UDP is not set
-CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y
-# end of Checksums
-
-#
-# ipv6
-#
-CONFIG_LWIP_IPV6=y
-# CONFIG_LWIP_IPV6_AUTOCONFIG is not set
-CONFIG_LWIP_IPV6_NUM_ADDRESSES=3
-# CONFIG_LWIP_IPV6_FORWARD is not set
-CONFIG_LWIP_IP6_FRAG=y
-# CONFIG_LWIP_IP6_REASSEMBLY is not set
-# end of ipv6
-
-# CONFIG_LWIP_DEBUG is not set
-# end of LWIP Configuration
-
-CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
-# CONFIG_USE_SFUD is not set
-# CONFIG_USE_SPIFFS is not set
-# CONFIG_USE_AMP is not set
-CONFIG_USE_LETTER_SHELL=y
-
-#
-# Letter Shell Configuration
-#
-CONFIG_LS_PL011_UART=y
-CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
-# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set
-# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set
-# end of Letter Shell Configuration
-
-CONFIG_USE_TLSF=y
-# CONFIG_USE_SDMMC_CMD is not set
-# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
diff --git a/example/network/gmac_lwip_test/configs/ft2004_aarch32_eg_configs b/example/network/gmac_lwip_test/configs/ft2004_aarch32_eg_configs
deleted file mode 100644
index 366e33e6ed3e018163a1e1ea359632d030429b0b..0000000000000000000000000000000000000000
--- a/example/network/gmac_lwip_test/configs/ft2004_aarch32_eg_configs
+++ /dev/null
@@ -1,411 +0,0 @@
-
-#
-# Project Configuration
-#
-CONFIG_TARGET_NAME="ft2004_freertos_a32"
-CONFIG_LWIP_IPV4_TEST=y
-# CONFIG_LWIP_IPV4_DHCP_TEST is not set
-# CONFIG_LWIP_IPV6_TEST is not set
-CONFIG_GMAC_RX_DESCNUM=256
-CONFIG_GMAC_TX_DESCNUM=256
-CONFIG_GMAC_IRQ_PRIORITY=12
-# end of Project Configuration
-
-#
-# Standalone Setting
-#
-CONFIG_USE_FREERTOS=y
-
-#
-# Arch Configuration
-#
-CONFIG_TARGET_ARMV8_AARCH32=y
-# CONFIG_TARGET_ARMV8_AARCH64 is not set
-CONFIG_USE_CACHE=y
-CONFIG_USE_L3CACHE=y
-CONFIG_USE_MMU=y
-CONFIG_USE_SYS_TICK=y
-CONFIG_USE_AARCH64_L1_TO_AARCH32=y
-# end of Arch Configuration
-
-#
-# Board Configuration
-#
-CONFIG_TARGET_F2000_4=y
-# CONFIG_TARGET_D2000 is not set
-# CONFIG_TARGET_E2000Q is not set
-# CONFIG_TARGET_E2000D is not set
-# CONFIG_TARGET_E2000S is not set
-CONFIG_DEFAULT_DEBUG_PRINT_UART1=y
-# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set
-# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set
-# end of Board Configuration
-
-#
-# Components Configuration
-#
-# CONFIG_USE_SPI is not set
-# CONFIG_USE_QSPI is not set
-CONFIG_USE_GIC=y
-CONFIG_ENABLE_GICV3=y
-CONFIG_USE_SERIAL=y
-
-#
-# Usart Configuration
-#
-CONFIG_ENABLE_Pl011_UART=y
-# end of Usart Configuration
-
-# CONFIG_USE_GPIO is not set
-CONFIG_USE_ETH=y
-
-#
-# Eth Configuration
-#
-# CONFIG_ENABLE_FXMAC is not set
-CONFIG_ENABLE_FGMAC=y
-CONFIG_FGMAC_PHY_COMMON=y
-# CONFIG_FGMAC_PHY_AR803X is not set
-# end of Eth Configuration
-
-# CONFIG_USE_CAN is not set
-# CONFIG_USE_I2C is not set
-# CONFIG_USE_TIMER is not set
-# CONFIG_USE_MIO is not set
-# CONFIG_USE_SDMMC is not set
-# CONFIG_USE_PCIE is not set
-# CONFIG_USE_WDT is not set
-# CONFIG_USE_DMA is not set
-# CONFIG_USE_NAND is not set
-# CONFIG_USE_RTC is not set
-# CONFIG_USE_SATA is not set
-# CONFIG_USE_USB is not set
-# CONFIG_USE_ADC is not set
-# CONFIG_USE_PWM is not set
-# CONFIG_USE_IPC is not set
-# end of Components Configuration
-
-CONFIG_USE_NEW_LIBC=y
-# end of Standalone Setting
-
-#
-# Building Option
-#
-# CONFIG_LOG_VERBOS is not set
-CONFIG_LOG_DEBUG=y
-# CONFIG_LOG_INFO is not set
-# CONFIG_LOG_WARN is not set
-# CONFIG_LOG_ERROR is not set
-# CONFIG_LOG_NONE is not set
-CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y
-CONFIG_INTERRUPT_ROLE_MASTER=y
-# CONFIG_INTERRUPT_ROLE_SLAVE is not set
-# CONFIG_LOG_EXTRA_INFO is not set
-# CONFIG_BOOTUP_DEBUG_PRINTS is not set
-
-#
-# Linker Options
-#
-CONFIG_AARCH32_RAM_LD=y
-# CONFIG_AARCH64_RAM_LD is not set
-# CONFIG_USER_DEFINED_LD is not set
-CONFIG_LINK_SCRIPT_ROM=y
-CONFIG_ROM_START_UP_ADDR=0xa0100000
-CONFIG_ROM_SIZE_MB=1
-CONFIG_LINK_SCRIPT_RAM=y
-CONFIG_RAM_START_UP_ADDR=0xa1000000
-CONFIG_RAM_SIZE_MB=64
-CONFIG_HEAP_SIZE=1
-CONFIG_SVC_STACK_SIZE=0x1000
-CONFIG_SYS_STACK_SIZE=0x1000
-CONFIG_IRQ_STACK_SIZE=0x1000
-CONFIG_ABORT_STACK_SIZE=0x1000
-CONFIG_FIQ_STACK_SIZE=0x1000
-CONFIG_UNDEF_STACK_SIZE=0x1000
-# end of Linker Options
-
-#
-# Compiler Options
-#
-# CONFIG_OUTPUT_BINARY is not set
-# end of Compiler Options
-# end of Building Option
-
-#
-# Component Configuration
-#
-
-#
-# Freertos Uart Drivers
-#
-CONFIG_FREERTOS_USE_UART=y
-# end of Freertos Uart Drivers
-
-#
-# Freertos Pwm Drivers
-#
-# CONFIG_FREERTOS_USE_PWM is not set
-# end of Freertos Pwm Drivers
-
-#
-# Freertos Qspi Drivers
-#
-# CONFIG_FREERTOS_USE_QSPI is not set
-# end of Freertos Qspi Drivers
-
-#
-# Freertos Wdt Drivers
-#
-# CONFIG_FREERTOS_USE_WDT is not set
-# end of Freertos Wdt Drivers
-
-#
-# Freertos Eth Drivers
-#
-# CONFIG_FREERTOS_USE_XMAC is not set
-# end of Freertos Eth Drivers
-
-#
-# Freertos Gpio Drivers
-#
-# CONFIG_FREERTOS_USE_GPIO is not set
-# end of Freertos Gpio Drivers
-
-#
-# Freertos Spim Drivers
-#
-# CONFIG_FREERTOS_USE_FSPIM is not set
-# end of Freertos Spim Drivers
-
-#
-# Freertos DMA Drivers
-#
-# CONFIG_FREERTOS_USE_FDDMA is not set
-# CONFIG_FREERTOS_USE_FGDMA is not set
-# end of Freertos DMA Drivers
-
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
-#
-# Freertos Adc Drivers
-#
-# CONFIG_FREERTOS_USE_ADC is not set
-# end of Freertos Adc Drivers
-
-#
-# Freertos Can Drivers
-#
-# CONFIG_FREERTOS_USE_CAN is not set
-# end of Freertos Can Drivers
-# end of Component Configuration
-
-#
-# FreeRTOS Setting
-#
-CONFIG_USE_LWIP=y
-
-#
-# LWIP Configuration
-#
-
-#
-# LWIP Port Configuration
-#
-CONFIG_LWIP_FGMAC=y
-# CONFIG_LWIP_FXMAC is not set
-# end of LWIP Port Configuration
-
-CONFIG_LWIP_LOCAL_HOSTNAME="phytium"
-
-#
-# memory configuration
-#
-CONFIG_LWIP_USE_MEM_POOL=y
-# CONFIG_LWIP_USE_MEM_HEAP is not set
-CONFIG_MEMP_NUM_PBUF=64
-CONFIG_MEM_ALIGNMENT=64
-# end of memory configuration
-
-#
-# NETWORK_INTERFACE_OPTIONS
-#
-# CONFIG_LWIP_NETIF_API is not set
-# CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set
-# end of NETWORK_INTERFACE_OPTIONS
-
-#
-# LOOPIF
-#
-CONFIG_LWIP_NETIF_LOOPBACK=y
-CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8
-# end of LOOPIF
-
-#
-# SLIPIF
-#
-# CONFIG_LWIP_SLIP_SUPPORT is not set
-# end of SLIPIF
-
-#
-# Pbuf options
-#
-CONFIG_PBUF_POOL_BUFSIZE=2
-# end of Pbuf options
-
-#
-# Internal Memory Pool Sizes
-#
-CONFIG_PBUF_POOL_SIZE=1
-# end of Internal Memory Pool Sizes
-
-CONFIG_LWIP_MAX_SOCKETS=10
-
-#
-# LWIP RAW API
-#
-CONFIG_LWIP_MAX_RAW_PCBS=16
-# end of LWIP RAW API
-
-#
-# TCP
-#
-CONFIG_LWIP_MAX_ACTIVE_TCP=16
-CONFIG_LWIP_MAX_LISTENING_TCP=16
-CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y
-CONFIG_LWIP_TCP_MAXRTX=12
-CONFIG_LWIP_TCP_SYNMAXRTX=12
-CONFIG_LWIP_TCP_MSS=1440
-CONFIG_LWIP_TCP_TMR_INTERVAL=250
-CONFIG_LWIP_TCP_MSL=60000
-CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5744
-CONFIG_LWIP_TCP_WND_DEFAULT=5744
-CONFIG_LWIP_TCP_RECVMBOX_SIZE=6
-CONFIG_LWIP_TCP_QUEUE_OOSEQ=y
-# CONFIG_LWIP_TCP_SACK_OUT is not set
-CONFIG_LWIP_TCP_OVERSIZE_MSS=y
-# CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set
-# CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set
-# end of TCP
-
-#
-# UDP
-#
-CONFIG_LWIP_MAX_UDP_PCBS=16
-CONFIG_LWIP_UDP_RECVMBOX_SIZE=6
-# CONFIG_LWIP_NETBUF_RECVINFO is not set
-# end of UDP
-
-#
-# IPv4
-#
-# CONFIG_USE_IPV4_ONLY is not set
-# CONFIG_LWIP_IP4_REASSEMBLY is not set
-CONFIG_LWIP_IP4_FRAG=y
-# CONFIG_LWIP_IP_FORWARD is not set
-CONFIG_IP_REASS_MAX_PBUFS=16
-# end of IPv4
-
-#
-# ICMP
-#
-CONFIG_LWIP_ICMP=y
-# CONFIG_LWIP_MULTICAST_PING is not set
-# CONFIG_LWIP_BROADCAST_PING is not set
-# end of ICMP
-
-#
-# DHCP
-#
-# CONFIG_LWIP_DHCP_ENABLE is not set
-CONFIG_LWIP_DHCP_DOES_ARP_CHECK=y
-# CONFIG_LWIP_DHCP_GET_NTP_SRV is not set
-# CONFIG_LWIP_DHCP_DISABLE_CLIENT_ID is not set
-# CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set
-CONFIG_LWIP_DHCP_OPTIONS_LEN=68
-CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y
-# end of DHCP
-
-#
-# AUTOIP
-#
-# CONFIG_LWIP_AUTOIP is not set
-# end of AUTOIP
-
-#
-# DNS
-#
-CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y
-# end of DNS
-
-#
-# TCP options
-#
-CONFIG_LWIP_TCP_RTO_TIME=1500
-# end of TCP options
-
-# CONFIG_LWIP_TCPIP_CORE_LOCKING is not set
-
-#
-# socket
-#
-# CONFIG_LWIP_SO_LINGER is not set
-CONFIG_LWIP_SO_REUSE=y
-CONFIG_LWIP_SO_REUSE_RXTOALL=y
-# end of socket
-
-# CONFIG_LWIP_STATS is not set
-
-#
-# PPP
-#
-# CONFIG_LWIP_PPP_SUPPORT is not set
-CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3
-CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5
-# end of PPP
-
-#
-# Checksums
-#
-# CONFIG_LWIP_CHECKSUM_CHECK_IP is not set
-# CONFIG_LWIP_CHECKSUM_CHECK_UDP is not set
-CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y
-# end of Checksums
-
-#
-# ipv6
-#
-CONFIG_LWIP_IPV6=y
-# CONFIG_LWIP_IPV6_AUTOCONFIG is not set
-CONFIG_LWIP_IPV6_NUM_ADDRESSES=3
-# CONFIG_LWIP_IPV6_FORWARD is not set
-CONFIG_LWIP_IP6_FRAG=y
-# CONFIG_LWIP_IP6_REASSEMBLY is not set
-# end of ipv6
-
-# CONFIG_LWIP_DEBUG is not set
-# end of LWIP Configuration
-
-CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
-# CONFIG_USE_SFUD is not set
-# CONFIG_USE_SPIFFS is not set
-# CONFIG_USE_AMP is not set
-CONFIG_USE_LETTER_SHELL=y
-
-#
-# Letter Shell Configuration
-#
-CONFIG_LS_PL011_UART=y
-CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
-# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set
-# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set
-# end of Letter Shell Configuration
-
-CONFIG_USE_TLSF=y
-# CONFIG_USE_SDMMC_CMD is not set
-# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
diff --git a/example/network/gmac_lwip_test/configs/ft2004_aarch64_eg_configs b/example/network/gmac_lwip_test/configs/ft2004_aarch64_eg_configs
deleted file mode 100644
index da6f3c910bdebccaec96c5e09c8997c38c85381f..0000000000000000000000000000000000000000
--- a/example/network/gmac_lwip_test/configs/ft2004_aarch64_eg_configs
+++ /dev/null
@@ -1,407 +0,0 @@
-
-#
-# Project Configuration
-#
-CONFIG_TARGET_NAME="ft2004_freertos_a64"
-CONFIG_LWIP_IPV4_TEST=y
-# CONFIG_LWIP_IPV4_DHCP_TEST is not set
-# CONFIG_LWIP_IPV6_TEST is not set
-CONFIG_GMAC_RX_DESCNUM=256
-CONFIG_GMAC_TX_DESCNUM=256
-CONFIG_GMAC_IRQ_PRIORITY=12
-# end of Project Configuration
-
-#
-# Standalone Setting
-#
-CONFIG_USE_FREERTOS=y
-
-#
-# Arch Configuration
-#
-# CONFIG_TARGET_ARMV8_AARCH32 is not set
-CONFIG_TARGET_ARMV8_AARCH64=y
-CONFIG_USE_CACHE=y
-# CONFIG_USE_L3CACHE is not set
-CONFIG_USE_MMU=y
-CONFIG_USE_SYS_TICK=y
-# CONFIG_MMU_DEBUG_PRINTS is not set
-# end of Arch Configuration
-
-#
-# Board Configuration
-#
-CONFIG_TARGET_F2000_4=y
-# CONFIG_TARGET_D2000 is not set
-# CONFIG_TARGET_E2000Q is not set
-# CONFIG_TARGET_E2000D is not set
-# CONFIG_TARGET_E2000S is not set
-CONFIG_DEFAULT_DEBUG_PRINT_UART1=y
-# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set
-# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set
-# end of Board Configuration
-
-#
-# Components Configuration
-#
-# CONFIG_USE_SPI is not set
-# CONFIG_USE_QSPI is not set
-CONFIG_USE_GIC=y
-CONFIG_ENABLE_GICV3=y
-CONFIG_USE_SERIAL=y
-
-#
-# Usart Configuration
-#
-CONFIG_ENABLE_Pl011_UART=y
-# end of Usart Configuration
-
-# CONFIG_USE_GPIO is not set
-CONFIG_USE_ETH=y
-
-#
-# Eth Configuration
-#
-# CONFIG_ENABLE_FXMAC is not set
-CONFIG_ENABLE_FGMAC=y
-CONFIG_FGMAC_PHY_COMMON=y
-# CONFIG_FGMAC_PHY_AR803X is not set
-# end of Eth Configuration
-
-# CONFIG_USE_CAN is not set
-# CONFIG_USE_I2C is not set
-# CONFIG_USE_TIMER is not set
-# CONFIG_USE_MIO is not set
-# CONFIG_USE_SDMMC is not set
-# CONFIG_USE_PCIE is not set
-# CONFIG_USE_WDT is not set
-# CONFIG_USE_DMA is not set
-# CONFIG_USE_NAND is not set
-# CONFIG_USE_RTC is not set
-# CONFIG_USE_SATA is not set
-# CONFIG_USE_USB is not set
-# CONFIG_USE_ADC is not set
-# CONFIG_USE_PWM is not set
-# CONFIG_USE_IPC is not set
-# end of Components Configuration
-
-CONFIG_USE_NEW_LIBC=y
-# end of Standalone Setting
-
-#
-# Building Option
-#
-# CONFIG_LOG_VERBOS is not set
-CONFIG_LOG_DEBUG=y
-# CONFIG_LOG_INFO is not set
-# CONFIG_LOG_WARN is not set
-# CONFIG_LOG_ERROR is not set
-# CONFIG_LOG_NONE is not set
-CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y
-CONFIG_INTERRUPT_ROLE_MASTER=y
-# CONFIG_INTERRUPT_ROLE_SLAVE is not set
-# CONFIG_LOG_EXTRA_INFO is not set
-# CONFIG_BOOTUP_DEBUG_PRINTS is not set
-
-#
-# Linker Options
-#
-# CONFIG_AARCH32_RAM_LD is not set
-CONFIG_AARCH64_RAM_LD=y
-# CONFIG_USER_DEFINED_LD is not set
-CONFIG_LINK_SCRIPT_ROM=y
-CONFIG_ROM_START_UP_ADDR=0xa0100000
-CONFIG_ROM_SIZE_MB=1
-CONFIG_LINK_SCRIPT_RAM=y
-CONFIG_RAM_START_UP_ADDR=0xa1000000
-CONFIG_RAM_SIZE_MB=64
-CONFIG_HEAP_SIZE=1
-CONFIG_STACK_SIZE=0x100000
-CONFIG_FPU_STACK_SIZE=0x1000
-# end of Linker Options
-
-#
-# Compiler Options
-#
-# CONFIG_OUTPUT_BINARY is not set
-# end of Compiler Options
-# end of Building Option
-
-#
-# Component Configuration
-#
-
-#
-# Freertos Uart Drivers
-#
-CONFIG_FREERTOS_USE_UART=y
-# end of Freertos Uart Drivers
-
-#
-# Freertos Pwm Drivers
-#
-# CONFIG_FREERTOS_USE_PWM is not set
-# end of Freertos Pwm Drivers
-
-#
-# Freertos Qspi Drivers
-#
-# CONFIG_FREERTOS_USE_QSPI is not set
-# end of Freertos Qspi Drivers
-
-#
-# Freertos Wdt Drivers
-#
-# CONFIG_FREERTOS_USE_WDT is not set
-# end of Freertos Wdt Drivers
-
-#
-# Freertos Eth Drivers
-#
-# CONFIG_FREERTOS_USE_XMAC is not set
-# end of Freertos Eth Drivers
-
-#
-# Freertos Gpio Drivers
-#
-# CONFIG_FREERTOS_USE_GPIO is not set
-# end of Freertos Gpio Drivers
-
-#
-# Freertos Spim Drivers
-#
-# CONFIG_FREERTOS_USE_FSPIM is not set
-# end of Freertos Spim Drivers
-
-#
-# Freertos DMA Drivers
-#
-# CONFIG_FREERTOS_USE_FDDMA is not set
-# CONFIG_FREERTOS_USE_FGDMA is not set
-# end of Freertos DMA Drivers
-
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
-#
-# Freertos Adc Drivers
-#
-# CONFIG_FREERTOS_USE_ADC is not set
-# end of Freertos Adc Drivers
-
-#
-# Freertos Can Drivers
-#
-# CONFIG_FREERTOS_USE_CAN is not set
-# end of Freertos Can Drivers
-# end of Component Configuration
-
-#
-# FreeRTOS Setting
-#
-CONFIG_USE_LWIP=y
-
-#
-# LWIP Configuration
-#
-
-#
-# LWIP Port Configuration
-#
-CONFIG_LWIP_FGMAC=y
-# CONFIG_LWIP_FXMAC is not set
-# end of LWIP Port Configuration
-
-CONFIG_LWIP_LOCAL_HOSTNAME="phytium"
-
-#
-# memory configuration
-#
-CONFIG_LWIP_USE_MEM_POOL=y
-# CONFIG_LWIP_USE_MEM_HEAP is not set
-CONFIG_MEMP_NUM_PBUF=64
-CONFIG_MEM_ALIGNMENT=64
-# end of memory configuration
-
-#
-# NETWORK_INTERFACE_OPTIONS
-#
-# CONFIG_LWIP_NETIF_API is not set
-# CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set
-# end of NETWORK_INTERFACE_OPTIONS
-
-#
-# LOOPIF
-#
-CONFIG_LWIP_NETIF_LOOPBACK=y
-CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8
-# end of LOOPIF
-
-#
-# SLIPIF
-#
-# CONFIG_LWIP_SLIP_SUPPORT is not set
-# end of SLIPIF
-
-#
-# Pbuf options
-#
-CONFIG_PBUF_POOL_BUFSIZE=2
-# end of Pbuf options
-
-#
-# Internal Memory Pool Sizes
-#
-CONFIG_PBUF_POOL_SIZE=1
-# end of Internal Memory Pool Sizes
-
-CONFIG_LWIP_MAX_SOCKETS=10
-
-#
-# LWIP RAW API
-#
-CONFIG_LWIP_MAX_RAW_PCBS=16
-# end of LWIP RAW API
-
-#
-# TCP
-#
-CONFIG_LWIP_MAX_ACTIVE_TCP=16
-CONFIG_LWIP_MAX_LISTENING_TCP=16
-CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y
-CONFIG_LWIP_TCP_MAXRTX=12
-CONFIG_LWIP_TCP_SYNMAXRTX=12
-CONFIG_LWIP_TCP_MSS=1440
-CONFIG_LWIP_TCP_TMR_INTERVAL=250
-CONFIG_LWIP_TCP_MSL=60000
-CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5744
-CONFIG_LWIP_TCP_WND_DEFAULT=5744
-CONFIG_LWIP_TCP_RECVMBOX_SIZE=6
-CONFIG_LWIP_TCP_QUEUE_OOSEQ=y
-# CONFIG_LWIP_TCP_SACK_OUT is not set
-CONFIG_LWIP_TCP_OVERSIZE_MSS=y
-# CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set
-# CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set
-# end of TCP
-
-#
-# UDP
-#
-CONFIG_LWIP_MAX_UDP_PCBS=16
-CONFIG_LWIP_UDP_RECVMBOX_SIZE=6
-# CONFIG_LWIP_NETBUF_RECVINFO is not set
-# end of UDP
-
-#
-# IPv4
-#
-# CONFIG_USE_IPV4_ONLY is not set
-# CONFIG_LWIP_IP4_REASSEMBLY is not set
-CONFIG_LWIP_IP4_FRAG=y
-# CONFIG_LWIP_IP_FORWARD is not set
-CONFIG_IP_REASS_MAX_PBUFS=16
-# end of IPv4
-
-#
-# ICMP
-#
-CONFIG_LWIP_ICMP=y
-# CONFIG_LWIP_MULTICAST_PING is not set
-# CONFIG_LWIP_BROADCAST_PING is not set
-# end of ICMP
-
-#
-# DHCP
-#
-# CONFIG_LWIP_DHCP_ENABLE is not set
-CONFIG_LWIP_DHCP_DOES_ARP_CHECK=y
-# CONFIG_LWIP_DHCP_GET_NTP_SRV is not set
-# CONFIG_LWIP_DHCP_DISABLE_CLIENT_ID is not set
-# CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set
-CONFIG_LWIP_DHCP_OPTIONS_LEN=68
-CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y
-# end of DHCP
-
-#
-# AUTOIP
-#
-# CONFIG_LWIP_AUTOIP is not set
-# end of AUTOIP
-
-#
-# DNS
-#
-CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y
-# end of DNS
-
-#
-# TCP options
-#
-CONFIG_LWIP_TCP_RTO_TIME=1500
-# end of TCP options
-
-# CONFIG_LWIP_TCPIP_CORE_LOCKING is not set
-
-#
-# socket
-#
-# CONFIG_LWIP_SO_LINGER is not set
-CONFIG_LWIP_SO_REUSE=y
-CONFIG_LWIP_SO_REUSE_RXTOALL=y
-# end of socket
-
-# CONFIG_LWIP_STATS is not set
-
-#
-# PPP
-#
-# CONFIG_LWIP_PPP_SUPPORT is not set
-CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3
-CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5
-# end of PPP
-
-#
-# Checksums
-#
-# CONFIG_LWIP_CHECKSUM_CHECK_IP is not set
-# CONFIG_LWIP_CHECKSUM_CHECK_UDP is not set
-CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y
-# end of Checksums
-
-#
-# ipv6
-#
-CONFIG_LWIP_IPV6=y
-# CONFIG_LWIP_IPV6_AUTOCONFIG is not set
-CONFIG_LWIP_IPV6_NUM_ADDRESSES=3
-# CONFIG_LWIP_IPV6_FORWARD is not set
-CONFIG_LWIP_IP6_FRAG=y
-# CONFIG_LWIP_IP6_REASSEMBLY is not set
-# end of ipv6
-
-# CONFIG_LWIP_DEBUG is not set
-# end of LWIP Configuration
-
-CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
-# CONFIG_USE_SFUD is not set
-# CONFIG_USE_SPIFFS is not set
-# CONFIG_USE_AMP is not set
-CONFIG_USE_LETTER_SHELL=y
-
-#
-# Letter Shell Configuration
-#
-CONFIG_LS_PL011_UART=y
-CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
-# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set
-# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set
-# end of Letter Shell Configuration
-
-CONFIG_USE_TLSF=y
-# CONFIG_USE_SDMMC_CMD is not set
-# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
diff --git a/example/network/gmac_lwip_test/pic/gmac_dhcp_menuconfig.png b/example/network/gmac_lwip_test/pic/gmac_dhcp_menuconfig.png
deleted file mode 100644
index e55d4680896c8e3b4dc20b143ddd0f4ca260e492..0000000000000000000000000000000000000000
Binary files a/example/network/gmac_lwip_test/pic/gmac_dhcp_menuconfig.png and /dev/null differ
diff --git a/example/network/gmac_lwip_test/pic/gmac_ipv4_menuconfig.png b/example/network/gmac_lwip_test/pic/gmac_ipv4_menuconfig.png
deleted file mode 100644
index 1a50ea64e91afb611dcdcb345a5d9954447d6478..0000000000000000000000000000000000000000
Binary files a/example/network/gmac_lwip_test/pic/gmac_ipv4_menuconfig.png and /dev/null differ
diff --git a/example/network/gmac_lwip_test/pic/gmac_ipv6_menuconfig.png b/example/network/gmac_lwip_test/pic/gmac_ipv6_menuconfig.png
deleted file mode 100644
index 18defa998a975736c4323d5d930c958a5b5ccaec..0000000000000000000000000000000000000000
Binary files a/example/network/gmac_lwip_test/pic/gmac_ipv6_menuconfig.png and /dev/null differ
diff --git a/example/network/gmac_lwip_test/pic/gmac_probe.png b/example/network/gmac_lwip_test/pic/gmac_probe.png
deleted file mode 100644
index 6efa8c328199ce3c1ec97954370bc8076d6f8ff1..0000000000000000000000000000000000000000
Binary files a/example/network/gmac_lwip_test/pic/gmac_probe.png and /dev/null differ
diff --git a/example/network/gmac_lwip_test/pic/gmac_probe_dhcp0.png b/example/network/gmac_lwip_test/pic/gmac_probe_dhcp0.png
deleted file mode 100644
index daba5719bb78d4b64dd37570ddefdcb40a2ef329..0000000000000000000000000000000000000000
Binary files a/example/network/gmac_lwip_test/pic/gmac_probe_dhcp0.png and /dev/null differ
diff --git a/example/network/gmac_lwip_test/pic/gmac_probe_dhcp1.png b/example/network/gmac_lwip_test/pic/gmac_probe_dhcp1.png
deleted file mode 100644
index 85564c5066bb6f8a3a2e6b89cd2c3b79b4e00b00..0000000000000000000000000000000000000000
Binary files a/example/network/gmac_lwip_test/pic/gmac_probe_dhcp1.png and /dev/null differ
diff --git a/example/network/gmac_lwip_test/pic/gmac_probe_ipv6.png b/example/network/gmac_lwip_test/pic/gmac_probe_ipv6.png
deleted file mode 100644
index 25296e3ff182234eeea10312039a493b07915c0b..0000000000000000000000000000000000000000
Binary files a/example/network/gmac_lwip_test/pic/gmac_probe_ipv6.png and /dev/null differ
diff --git a/example/network/gmac_lwip_test/pic/ping_ipv6.png b/example/network/gmac_lwip_test/pic/ping_ipv6.png
deleted file mode 100644
index fd893dd34d44a2d6582de5bb436c1f9f076a5a33..0000000000000000000000000000000000000000
Binary files a/example/network/gmac_lwip_test/pic/ping_ipv6.png and /dev/null differ
diff --git a/example/network/gmac_lwip_test/sdkconfig b/example/network/gmac_lwip_test/sdkconfig
deleted file mode 100644
index b4dd0538e9dd1f344d719faa6d2faf2beef027f6..0000000000000000000000000000000000000000
--- a/example/network/gmac_lwip_test/sdkconfig
+++ /dev/null
@@ -1,407 +0,0 @@
-
-#
-# Project Configuration
-#
-CONFIG_TARGET_NAME="d2000_freertos_a64"
-CONFIG_LWIP_IPV4_TEST=y
-# CONFIG_LWIP_IPV4_DHCP_TEST is not set
-# CONFIG_LWIP_IPV6_TEST is not set
-CONFIG_GMAC_RX_DESCNUM=16
-CONFIG_GMAC_TX_DESCNUM=16
-CONFIG_GMAC_IRQ_PRIORITY=12
-# end of Project Configuration
-
-#
-# Standalone Setting
-#
-CONFIG_USE_FREERTOS=y
-
-#
-# Arch Configuration
-#
-# CONFIG_TARGET_ARMV8_AARCH32 is not set
-CONFIG_TARGET_ARMV8_AARCH64=y
-CONFIG_USE_CACHE=y
-CONFIG_USE_L3CACHE=y
-CONFIG_USE_MMU=y
-CONFIG_USE_SYS_TICK=y
-# CONFIG_MMU_DEBUG_PRINTS is not set
-# end of Arch Configuration
-
-#
-# Board Configuration
-#
-# CONFIG_TARGET_F2000_4 is not set
-CONFIG_TARGET_D2000=y
-# CONFIG_TARGET_E2000Q is not set
-# CONFIG_TARGET_E2000D is not set
-# CONFIG_TARGET_E2000S is not set
-CONFIG_DEFAULT_DEBUG_PRINT_UART1=y
-# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set
-# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set
-# end of Board Configuration
-
-#
-# Components Configuration
-#
-# CONFIG_USE_SPI is not set
-# CONFIG_USE_QSPI is not set
-CONFIG_USE_GIC=y
-CONFIG_ENABLE_GICV3=y
-CONFIG_USE_SERIAL=y
-
-#
-# Usart Configuration
-#
-CONFIG_ENABLE_Pl011_UART=y
-# end of Usart Configuration
-
-# CONFIG_USE_GPIO is not set
-CONFIG_USE_ETH=y
-
-#
-# Eth Configuration
-#
-# CONFIG_ENABLE_FXMAC is not set
-CONFIG_ENABLE_FGMAC=y
-CONFIG_FGMAC_PHY_COMMON=y
-# CONFIG_FGMAC_PHY_AR803X is not set
-# end of Eth Configuration
-
-# CONFIG_USE_CAN is not set
-# CONFIG_USE_I2C is not set
-# CONFIG_USE_TIMER is not set
-# CONFIG_USE_MIO is not set
-# CONFIG_USE_SDMMC is not set
-# CONFIG_USE_PCIE is not set
-# CONFIG_USE_WDT is not set
-# CONFIG_USE_DMA is not set
-# CONFIG_USE_NAND is not set
-# CONFIG_USE_RTC is not set
-# CONFIG_USE_SATA is not set
-# CONFIG_USE_USB is not set
-# CONFIG_USE_ADC is not set
-# CONFIG_USE_PWM is not set
-# CONFIG_USE_IPC is not set
-# end of Components Configuration
-
-CONFIG_USE_NEW_LIBC=y
-# end of Standalone Setting
-
-#
-# Building Option
-#
-# CONFIG_LOG_VERBOS is not set
-# CONFIG_LOG_DEBUG is not set
-CONFIG_LOG_INFO=y
-# CONFIG_LOG_WARN is not set
-# CONFIG_LOG_ERROR is not set
-# CONFIG_LOG_NONE is not set
-CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y
-CONFIG_INTERRUPT_ROLE_MASTER=y
-# CONFIG_INTERRUPT_ROLE_SLAVE is not set
-# CONFIG_LOG_EXTRA_INFO is not set
-# CONFIG_BOOTUP_DEBUG_PRINTS is not set
-
-#
-# Linker Options
-#
-# CONFIG_AARCH32_RAM_LD is not set
-CONFIG_AARCH64_RAM_LD=y
-# CONFIG_USER_DEFINED_LD is not set
-CONFIG_LINK_SCRIPT_ROM=y
-CONFIG_ROM_START_UP_ADDR=0x80100000
-CONFIG_ROM_SIZE_MB=1
-CONFIG_LINK_SCRIPT_RAM=y
-CONFIG_RAM_START_UP_ADDR=0x81000000
-CONFIG_RAM_SIZE_MB=64
-CONFIG_HEAP_SIZE=1
-CONFIG_STACK_SIZE=0x100000
-CONFIG_FPU_STACK_SIZE=0x1000
-# end of Linker Options
-
-#
-# Compiler Options
-#
-# CONFIG_OUTPUT_BINARY is not set
-# end of Compiler Options
-# end of Building Option
-
-#
-# Component Configuration
-#
-
-#
-# Freertos Uart Drivers
-#
-CONFIG_FREERTOS_USE_UART=y
-# end of Freertos Uart Drivers
-
-#
-# Freertos Pwm Drivers
-#
-# CONFIG_FREERTOS_USE_PWM is not set
-# end of Freertos Pwm Drivers
-
-#
-# Freertos Qspi Drivers
-#
-# CONFIG_FREERTOS_USE_QSPI is not set
-# end of Freertos Qspi Drivers
-
-#
-# Freertos Wdt Drivers
-#
-# CONFIG_FREERTOS_USE_WDT is not set
-# end of Freertos Wdt Drivers
-
-#
-# Freertos Eth Drivers
-#
-# CONFIG_FREERTOS_USE_XMAC is not set
-# end of Freertos Eth Drivers
-
-#
-# Freertos Gpio Drivers
-#
-# CONFIG_FREERTOS_USE_GPIO is not set
-# end of Freertos Gpio Drivers
-
-#
-# Freertos Spim Drivers
-#
-# CONFIG_FREERTOS_USE_FSPIM is not set
-# end of Freertos Spim Drivers
-
-#
-# Freertos DMA Drivers
-#
-# CONFIG_FREERTOS_USE_FDDMA is not set
-# CONFIG_FREERTOS_USE_FGDMA is not set
-# end of Freertos DMA Drivers
-
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
-#
-# Freertos Adc Drivers
-#
-# CONFIG_FREERTOS_USE_ADC is not set
-# end of Freertos Adc Drivers
-
-#
-# Freertos Can Drivers
-#
-# CONFIG_FREERTOS_USE_CAN is not set
-# end of Freertos Can Drivers
-# end of Component Configuration
-
-#
-# FreeRTOS Setting
-#
-CONFIG_USE_LWIP=y
-
-#
-# LWIP Configuration
-#
-
-#
-# LWIP Port Configuration
-#
-CONFIG_LWIP_FGMAC=y
-# CONFIG_LWIP_FXMAC is not set
-# end of LWIP Port Configuration
-
-CONFIG_LWIP_LOCAL_HOSTNAME="phytium"
-
-#
-# memory configuration
-#
-CONFIG_LWIP_USE_MEM_POOL=y
-# CONFIG_LWIP_USE_MEM_HEAP is not set
-CONFIG_MEMP_NUM_PBUF=64
-CONFIG_MEM_ALIGNMENT=64
-# end of memory configuration
-
-#
-# NETWORK_INTERFACE_OPTIONS
-#
-# CONFIG_LWIP_NETIF_API is not set
-# CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set
-# end of NETWORK_INTERFACE_OPTIONS
-
-#
-# LOOPIF
-#
-CONFIG_LWIP_NETIF_LOOPBACK=y
-CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8
-# end of LOOPIF
-
-#
-# SLIPIF
-#
-# CONFIG_LWIP_SLIP_SUPPORT is not set
-# end of SLIPIF
-
-#
-# Pbuf options
-#
-CONFIG_PBUF_POOL_BUFSIZE=2
-# end of Pbuf options
-
-#
-# Internal Memory Pool Sizes
-#
-CONFIG_PBUF_POOL_SIZE=1
-# end of Internal Memory Pool Sizes
-
-CONFIG_LWIP_MAX_SOCKETS=10
-
-#
-# LWIP RAW API
-#
-CONFIG_LWIP_MAX_RAW_PCBS=16
-# end of LWIP RAW API
-
-#
-# TCP
-#
-CONFIG_LWIP_MAX_ACTIVE_TCP=16
-CONFIG_LWIP_MAX_LISTENING_TCP=16
-CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y
-CONFIG_LWIP_TCP_MAXRTX=12
-CONFIG_LWIP_TCP_SYNMAXRTX=12
-CONFIG_LWIP_TCP_MSS=1440
-CONFIG_LWIP_TCP_TMR_INTERVAL=250
-CONFIG_LWIP_TCP_MSL=60000
-CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5744
-CONFIG_LWIP_TCP_WND_DEFAULT=5744
-CONFIG_LWIP_TCP_RECVMBOX_SIZE=6
-CONFIG_LWIP_TCP_QUEUE_OOSEQ=y
-# CONFIG_LWIP_TCP_SACK_OUT is not set
-CONFIG_LWIP_TCP_OVERSIZE_MSS=y
-# CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set
-# CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set
-# end of TCP
-
-#
-# UDP
-#
-CONFIG_LWIP_MAX_UDP_PCBS=16
-CONFIG_LWIP_UDP_RECVMBOX_SIZE=6
-# CONFIG_LWIP_NETBUF_RECVINFO is not set
-# end of UDP
-
-#
-# IPv4
-#
-# CONFIG_USE_IPV4_ONLY is not set
-# CONFIG_LWIP_IP4_REASSEMBLY is not set
-CONFIG_LWIP_IP4_FRAG=y
-# CONFIG_LWIP_IP_FORWARD is not set
-CONFIG_IP_REASS_MAX_PBUFS=16
-# end of IPv4
-
-#
-# ICMP
-#
-CONFIG_LWIP_ICMP=y
-# CONFIG_LWIP_MULTICAST_PING is not set
-# CONFIG_LWIP_BROADCAST_PING is not set
-# end of ICMP
-
-#
-# DHCP
-#
-# CONFIG_LWIP_DHCP_ENABLE is not set
-CONFIG_LWIP_DHCP_DOES_ARP_CHECK=y
-# CONFIG_LWIP_DHCP_GET_NTP_SRV is not set
-# CONFIG_LWIP_DHCP_DISABLE_CLIENT_ID is not set
-# CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set
-CONFIG_LWIP_DHCP_OPTIONS_LEN=68
-CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y
-# end of DHCP
-
-#
-# AUTOIP
-#
-# CONFIG_LWIP_AUTOIP is not set
-# end of AUTOIP
-
-#
-# DNS
-#
-CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y
-# end of DNS
-
-#
-# TCP options
-#
-CONFIG_LWIP_TCP_RTO_TIME=1500
-# end of TCP options
-
-# CONFIG_LWIP_TCPIP_CORE_LOCKING is not set
-
-#
-# socket
-#
-# CONFIG_LWIP_SO_LINGER is not set
-CONFIG_LWIP_SO_REUSE=y
-CONFIG_LWIP_SO_REUSE_RXTOALL=y
-# end of socket
-
-# CONFIG_LWIP_STATS is not set
-
-#
-# PPP
-#
-# CONFIG_LWIP_PPP_SUPPORT is not set
-CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3
-CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5
-# end of PPP
-
-#
-# Checksums
-#
-# CONFIG_LWIP_CHECKSUM_CHECK_IP is not set
-# CONFIG_LWIP_CHECKSUM_CHECK_UDP is not set
-CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y
-# end of Checksums
-
-#
-# ipv6
-#
-CONFIG_LWIP_IPV6=y
-# CONFIG_LWIP_IPV6_AUTOCONFIG is not set
-CONFIG_LWIP_IPV6_NUM_ADDRESSES=3
-# CONFIG_LWIP_IPV6_FORWARD is not set
-CONFIG_LWIP_IP6_FRAG=y
-# CONFIG_LWIP_IP6_REASSEMBLY is not set
-# end of ipv6
-
-# CONFIG_LWIP_DEBUG is not set
-# end of LWIP Configuration
-
-CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
-# CONFIG_USE_SFUD is not set
-# CONFIG_USE_SPIFFS is not set
-# CONFIG_USE_AMP is not set
-CONFIG_USE_LETTER_SHELL=y
-
-#
-# Letter Shell Configuration
-#
-CONFIG_LS_PL011_UART=y
-CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
-# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set
-# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set
-# end of Letter Shell Configuration
-
-CONFIG_USE_TLSF=y
-# CONFIG_USE_SDMMC_CMD is not set
-# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
diff --git a/example/network/gmac_lwip_test/src/lwip_test.c b/example/network/gmac_lwip_test/src/lwip_test.c
deleted file mode 100644
index fa4bbc18cd064287ad7fe673076ccdbc9462f70a..0000000000000000000000000000000000000000
--- a/example/network/gmac_lwip_test/src/lwip_test.c
+++ /dev/null
@@ -1,293 +0,0 @@
-/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
- * All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
- * FilePath: lwip_test.c
- * Date: 2022-06-06 22:57:08
- * LastEditTime: 2022-06-06 22:57:08
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
- */
-
-#include
-#include
-#include "strto.h"
-#include "sdkconfig.h"
-#include "FreeRTOS.h"
-#include "task.h"
-#include "ftypes.h"
-#include "fparameters.h"
-
-#ifndef SDK_CONFIG_H__
- #error "Please include sdkconfig.h first"
-#endif
-
-
-
-#include "lwip_port.h"
-#include "lwip/ip4_addr.h"
-#include "lwip/init.h"
-#include "netif/ethernet.h"
-#include "ethernetif.h"
-#include "lwip/netif.h"
-#include "lwip/tcpip.h"
-#include "../src/shell.h"
-
-
-
-#if LWIP_IPV6
-#include "lwip/ip.h"
-#include "lwip/ip6_addr.h"
-#else
-#if LWIP_DHCP
-#include "lwip/dhcp.h"
-#endif
-#endif
-
-#if defined(CONFIG_ENABLE_FGMAC)
-#include "ft_os_gmac.h"
-
-static FtOsGmac os_gmac[GMAC_INSTANCE_NUM] = {0};
-static u32 gmac_id = FT_OS_GMAC0_ID;
-
-/* the mac address of the board. this should be unique per board */
- unsigned char mac_ethernet_address[GMAC_INSTANCE_NUM][NETIF_MAX_HWADDR_LEN] = {
- {0x0, 0x0, 0x1, 0x11, 0x1, 0x21},
- {0x0, 0x0, 0x2, 0x22, 0x2, 0x23}
- };
-
-#if !LWIP_IPV6
-ip4_addr_t ipaddr[GMAC_INSTANCE_NUM], netmask[GMAC_INSTANCE_NUM], gw[GMAC_INSTANCE_NUM];
-#if LWIP_DHCP
-static TaskHandle_t appTaskCreateHandle = NULL;
-void LwipDhcpTest(FtOsGmac *os_gmac)
-{
- int mscnt = 0;
- dhcp_start(&(os_gmac->netif_object));
- printf("LwipDhcpTest is start \r\n");
- while (1)
- {
- vTaskDelay(DHCP_FINE_TIMER_MSECS / portTICK_RATE_MS);
- dhcp_fine_tmr();
- mscnt += DHCP_FINE_TIMER_MSECS;
- if (mscnt >= DHCP_COARSE_TIMER_SECS*1000)
- {
- dhcp_coarse_tmr();
- mscnt = 0;
- }
- }
-}
-#endif
-#endif
-
-void LwipRawInit(FtOsGmac *os_gmac)
-{
- BaseType_t ret = pdPASS;/* 定义一个创建信息返回值,默认为 pdPASS */
- static boolean init_flag = FALSE;
-
-#if !LWIP_IPV6
-
- memset(&ipaddr[gmac_id], 0, sizeof(ip4_addr_t));
- memset(&netmask[gmac_id], 0, sizeof(ip4_addr_t));
- memset(&gw[gmac_id], 0, sizeof(ip4_addr_t));
-
-#if LWIP_DHCP
- ipaddr[gmac_id].addr = 0;
- gw[gmac_id].addr = 0;
- netmask[gmac_id].addr = 0;
-#else
- /* initialize IP addresses to be used */
- IP4_ADDR(&ipaddr[gmac_id],
- os_gmac->config.address.ip_address[0],
- os_gmac->config.address.ip_address[1],
- os_gmac->config.address.ip_address[2],
- os_gmac->config.address.ip_address[3]);
- IP4_ADDR(&netmask[gmac_id],
- os_gmac->config.address.netmask_address[0],
- os_gmac->config.address.netmask_address[1],
- os_gmac->config.address.netmask_address[2],
- os_gmac->config.address.netmask_address[3]);
- IP4_ADDR(&gw[gmac_id],
- os_gmac->config.address.netmask_address[0],
- os_gmac->config.address.netmask_address[1],
- os_gmac->config.address.netmask_address[2],
- os_gmac->config.address.netmask_address[3]);
-#endif
-
-#endif
-
- /* 初始化LwIP堆 */
- if(init_flag == FALSE)
- {
- tcpip_init(NULL, NULL);
- init_flag = TRUE;
- }
-
- /* 添加网络接口 (IPv4/IPv6) */
-
-#if !LWIP_IPV6
- /* Add network interface to the netif_list, and set it as default */
- if (!lwip_port_add(&os_gmac->netif_object, &ipaddr[gmac_id], &netmask[gmac_id], &gw[gmac_id],
- mac_ethernet_address[gmac_id], gmac_id))
- {
- printf("Error adding N/W interface\n\r");
- return ;
- }
- printf("lwip_port_add is over \n\r");
-#else
-
- if (!lwip_port_add(&os_gmac->netif_object, NULL, NULL, NULL, mac_ethernet_address[gmac_id], gmac_id))
- {
- printf("Error adding N/W interface\n\r");
- return ;
- }
-
- os_gmac->netif_object.ip6_autoconfig_enabled = 1;
-
- netif_create_ip6_linklocal_address(&os_gmac->netif_object, 1);
- netif_ip6_addr_set_state(&os_gmac->netif_object, 0, IP6_ADDR_VALID);
-
- printf("Board IPv6 address %x:%x:%x:%x:%x:%x:%x:%x\n\r",
- IP6_ADDR_BLOCK1(&os_gmac->netif_object.ip6_addr[0]),
- IP6_ADDR_BLOCK2(&os_gmac->netif_object.ip6_addr[0]),
- IP6_ADDR_BLOCK3(&os_gmac->netif_object.ip6_addr[0]),
- IP6_ADDR_BLOCK4(&os_gmac->netif_object.ip6_addr[0]),
- IP6_ADDR_BLOCK5(&os_gmac->netif_object.ip6_addr[0]),
- IP6_ADDR_BLOCK6(&os_gmac->netif_object.ip6_addr[0]),
- IP6_ADDR_BLOCK7(&os_gmac->netif_object.ip6_addr[0]),
- IP6_ADDR_BLOCK8(&os_gmac->netif_object.ip6_addr[0]));
-
-#endif
-
-
- /* 注册默认网络接口 */
- netif_set_default(&os_gmac->netif_object);
-
- if (netif_is_link_up(&os_gmac->netif_object))
- {
- /* 当netif完全配置好时,必须调用该函数 */
- netif_set_up(&os_gmac->netif_object);
- }
- else
- {
- /* 当netif链接关闭时,必须调用该函数 */
- netif_set_down(&os_gmac->netif_object);
- }
-
-#if LWIP_DHCP && LWIP_IPV4
- /* Create a new DHCP client for this interface.
- * Note: you must call dhcp_fine_tmr() and dhcp_coarse_tmr() at
- * the predefined regular intervals after starting the client.
- */
- printf("dhcp_start...\r\n");
-
- ret = xTaskCreate((TaskFunction_t )LwipDhcpTest, /* 任务入口函数 */
- (const char* )"LwipDhcpTest",/* 任务名字 */
- (uint16_t )4096, /* 任务栈大小 */
- (void* )(os_gmac),/* 任务入口函数参数 */
- (UBaseType_t )configMAX_PRIORITIES-1, /* 任务的优先级 */
- (TaskHandle_t* )&appTaskCreateHandle); /* 任务控制 */
- if (pdPASS == ret)
- {
- printf("create lwip dhcp task success!\r\n");
- }
-
-#endif
-
-}
-
-
-void LwipTestCreate(void * args)
-{
- FtOsGmacConfig os_config[GMAC_INSTANCE_NUM] =
- {
- {
- .gmac_instance = 0,
- .isr_priority = 0, /* irq Priority */
- .address =
- {
- {192, 168, 4, 10},
- {255, 255, 255, 0},
- {192, 168, 4, 1}
- },
- .mac_input_thread =
- {
- .thread_name = "gmac0",
- .stack_depth = 4096, /* The number of words the stack */
- .priority = configMAX_PRIORITIES-1, /* Defines the priority at which the task will execute. */
- .thread_handle = NULL,
- }, /* Gmac input thread */
- },
- {
- .gmac_instance = 1,
- .isr_priority = 0, /* irq Priority */
- .address =
- {
- {192, 168, 4, 20},
- {255, 255, 255, 0},
- {192, 168, 4, 1}
- },
- .mac_input_thread =
- {
- .thread_name = "gmac1",
- .stack_depth = 4096, /* The number of words the stack */
- .priority = configMAX_PRIORITIES-1, /* Defines the priority at which the task will execute. */
- .thread_handle = NULL,
- }, /* Gmac input thread */
- },
- };
-
- /* !!! make sure eth in-place before init gmac */
- FtOsGmacObjectInit(&os_gmac[gmac_id], &os_config[gmac_id]);
-
- LwipRawInit(&os_gmac[gmac_id]);
-
- vTaskDelete(NULL);
-}
-
-void LwipTest(void)
-{
- BaseType_t ret;
- ret = xTaskCreate((TaskFunction_t)LwipTestCreate, /* 任务入口函数 */
- (const char *)"LwipTestCreate", /* 任务名字 */
- (uint16_t)2048, /* 任务栈大小 */
- (void *)NULL, /* 任务入口函数参数 */
- (UBaseType_t)configMAX_PRIORITIES-1,/* 任务的优先级 */
- NULL); /* 任务控制块指针 */
-
- FASSERT_MSG(ret == pdPASS,"LwipTestCreate Task create is failed");
-
-}
-
-static int GmacIdSet(int argc, char *argv[])
-{
-
- if (!strcmp(argv[1], "probe"))
- {
- if (argc >= 3)
- {
- gmac_id = (u32)simple_strtoul(argv[2], NULL, 10);
- }
- else
- {
- gmac_id = FT_OS_GMAC0_ID;
- }
- LwipTest();
- }
-
- return 0;
-}
-SHELL_EXPORT_CMD(SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN), gmac, GmacIdSet, set the gmac id);
-#endif
\ No newline at end of file
diff --git a/example/network/xmac_lwip_test/Kconfig b/example/network/lwip_startup/Kconfig
similarity index 81%
rename from example/network/xmac_lwip_test/Kconfig
rename to example/network/lwip_startup/Kconfig
index 8e44e63b2cf553fbd61647c9ae7e786b724646c5..8f6fa712515950ce26b7485c6473e1d9061a8975 100644
--- a/example/network/xmac_lwip_test/Kconfig
+++ b/example/network/lwip_startup/Kconfig
@@ -8,10 +8,8 @@ mainmenu "Phytium FreeRTOS Configuration"
help
Build Target name for the demo
- if TARGET_E2000
- source "./src/Kconfig"
- endif
-
+ source "./src/Kconfig"
+
endmenu
source "$(FREERTOS_SDK_ROOT)/Kconfig"
diff --git a/example/network/xmac_lwip_test/README.md b/example/network/lwip_startup/README.md
similarity index 53%
rename from example/network/xmac_lwip_test/README.md
rename to example/network/lwip_startup/README.md
index 6de8488711c4708a3fc09978c6809c2dd23d56a8..934b0d4ba85159c3117fee53fb103161e86ac656 100644
--- a/example/network/xmac_lwip_test/README.md
+++ b/example/network/lwip_startup/README.md
@@ -26,13 +26,13 @@
## 1. 例程介绍
-本例程示范了freertos环境下的lwip移植。
-本例程目前支持在freertos下,移植lwip,使网络能够ping通,shell能够正常运行。
+- 本例程示范了freertos环境下的lwip移植。
+- 并且介绍了开发者如何在我方sdk下如何正常初始化网络控制器
## 2. 如何使用例程
本例程需要用到
-- Phytium开发板(E2000)
+- Phytium开发板(E2000/D2000/FT2004)
- [Phytium freeRTOS SDK](https://gitee.com/phytium_embedded/phytium-free-rtos-sdk)
- [Phytium standalone SDK](https://gitee.com/phytium_embedded/phytium-standalone-sdk)
### 2.1 硬件配置方法
@@ -40,11 +40,15 @@
本例程支持的硬件平台包括
- E2000D/Q
+- FT2004
+- D2000
对应的配置项是,
- CONFIG_TARGET_E2000D
- CONFIG_TARGET_E2000Q
+- CONFIG_TARGET_F2000_4
+- CONFIG_TARGET_D2000
### 2.2 SDK配置方法
@@ -65,6 +69,10 @@
- make load_e2000d_aarch32 将预设32bit e2000d 下的配置加载至工程中
- make load_e2000q_aarch64 将预设64bit e2000q 下的配置加载至工程中
- make load_e2000q_aarch32 将预设32bit e2000q 下的配置加载至工程中
+- make load_d2000_aarch64 将预设64bit d2000 下的配置加载至工程中
+- make load_d2000_aarch32 将预设32bit d2000 下的配置加载至工程中
+- make load_ft2004_aarch64 将预设64bit ft2004 下的配置加载至工程中
+- make load_ft2004_aarch32 将预设32bit ft2004 下的配置加载至工程中
- make menuconfig 配置目录下的参数变量
- make backup_kconfig 将目录下的sdkconfig 备份到./configs下
@@ -119,129 +127,62 @@ bootelf -p 0x90100000
- 启动进入后,根据连接的xmac口,输入指令完成网口初始化
-#### 2.4.1 ipv4下的probe
+### 2.4.1 如何配置demo 程序
-- 输入以下命令
+- 本程序默认支持ipv4,开发者使用"make menuconfig"在以下配置选项中打开
-```
-make menuconfig
-```
-
-- 将此项选择上
-
-
-
-- 输入以下命令,初始化LWIP网络协议栈, 依次配置ip地址,子网掩码,网关地址和退出时间,运行完成退出后LWIP协议栈会被暂时去使能
-
-```
-xmac probe [device id] [interface id]
-```
-
-- 其中device id 为控制器id
-- interface id ,0 为rgmii ,1 为sgmii
-
-
-
-
+
+- 如上图所示,开发者可以通过勾选 Enable IPv6 开启IPv6 的功能,通过勾选Enable DHCP 开启 dhcp client 功能
-#### 2.4.2 ipv6下的probe
+### 2.4.2 如何进行实验
-- 先将配置恢复到初始配置状态,以E2000D 为例
+- 当开发者配置好程序之后,通过2.3.1/2.3.2的方式将编译好的镜像文件拷贝至开发板中。
+- 以E2000D/Q demo 板为例,开发者输入以下命令则可以初始化网卡:
-```shell
- make load_e2000d_aarch32
```
-
-- 输入以下命令
-
-```
-make menuconfig
+lwip probe 0 1 1 192.168.4.10 192.168.4.1 255.255.255.0
```
-- 将此项选择上
-
-
-
-- 输入以下命令,初始化LWIP网络协议栈, 依次配置ip地址,子网掩码,网关地址和退出时间,运行完成退出后LWIP协议栈会被暂时去使能
-
-```
-xmac probe [device id] [interface id]
-```
-
-- 其中device id 为控制器id
-- interface id ,0 为rgmii ,1 为sgmii
-
-
+- 命令定义为:"lwip probe "
+- 为mac控制器
+- 为gmii 控制器类型,0 is rgmii ,1 is sgmii
+- 1为使能dhcp 功能,0为关闭dhcp 功能
+- 为ipv4 地址,示例为: 192.168.4.10
+- 为网关 ,示例为: 192.168.4.1
+- 为子网掩码,示例为255.255.255.0
-
+- 效果图如下
-#### 2.4.3 ipv4 dhcp
+
-- 先将配置恢复到初始配置状态,以E2000D 为例
-```shell
- make load_e2000d_aarch32
-```
-
-- 输入以下命令
-
-```
-make menuconfig
-```
+### 2.4.3 ipv4 实验效果
-- 将此项选择上
+- 在ipv4 工作模式下,可以使用ping 的方式测试当前程序是否正常工作,如下图所示:
+
+
-
+### 2.4.4 ipv6 实验效果
-- 输入以下命令,初始化LWIP网络协议栈, 并且会默认打开dhcp 线程
+- 在ipv6 工作模式下,可以使用ping 的方式测试当前程序是否正常工作,如下图所示:
+
+
-```
-xmac probe [device id] [interface id]
-```
-- 其中device id 为控制器id
-- interface id ,0 为rgmii ,1 为sgmii
+### 2.4.4 dhcp 实验效果
-
+- 打开dhcp功能之后,如下图所示:
+
+
-
#### 2.4.2 提供
## 3. 如何解决问题
-Q: 程序运行过程中queue.c的debug信息报错
-
-A: 考虑自身任务创建时分配的栈空间大小,考虑tcpip_thread任务的栈空间大小TCPIP_THREAD_STACKSIZE
-
-Q: 程序运行过程中ping大包异常
-
-A: 考虑以下两个宏的大小:PBUF_POOL_SIZE定义缓冲池的个数,PBUF_POOL_BUFSIZE定义单个缓冲区的大小
-
-Q: 如何选择demo板的配置
-
-A: 开发者在编译终端下使用以下命令
-```shell
- make menuconfig
-```
-
-
-
-
-Q: 如果开发者使用E2000 demo板应该如何进行实验:
-
-A: 开发者在串口终端上输入以下命令对控制器进行初始化
-
-
-
-
-```shell
- xmac probe 0 1
-```
-
## 4. 修改历史记录
v0.2.0 重构lwip
diff --git a/example/network/lwip_startup/configs/d2000_aarch32_eg_configs b/example/network/lwip_startup/configs/d2000_aarch32_eg_configs
new file mode 100644
index 0000000000000000000000000000000000000000..807857dee6de7d9733e76ac6cf9c752cf06d2e24
--- /dev/null
+++ b/example/network/lwip_startup/configs/d2000_aarch32_eg_configs
@@ -0,0 +1,505 @@
+
+#
+# Project Configuration
+#
+CONFIG_TARGET_NAME="d2000_freertos_a32"
+
+#
+# Lwip startup test configuration
+#
+CONFIG_LWIP_IPV6_TEST=y
+CONFIG_LWIP_DHCP_TEST=y
+# end of Lwip startup test configuration
+# end of Project Configuration
+
+#
+# Standalone Setting
+#
+CONFIG_USE_FREERTOS=y
+
+#
+# Arch Configuration
+#
+CONFIG_TARGET_ARMV8_AARCH32=y
+# CONFIG_TARGET_ARMV8_AARCH64 is not set
+CONFIG_USE_CACHE=y
+# CONFIG_USE_L3CACHE is not set
+CONFIG_USE_MMU=y
+CONFIG_USE_SYS_TICK=y
+CONFIG_USE_AARCH64_L1_TO_AARCH32=y
+# end of Arch Configuration
+
+#
+# Board Configuration
+#
+# CONFIG_TARGET_F2000_4 is not set
+CONFIG_TARGET_D2000=y
+# CONFIG_TARGET_E2000Q is not set
+# CONFIG_TARGET_E2000D is not set
+# CONFIG_TARGET_E2000S is not set
+CONFIG_DEFAULT_DEBUG_PRINT_UART1=y
+# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set
+# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set
+# end of Board Configuration
+
+#
+# Components Configuration
+#
+# CONFIG_USE_SPI is not set
+# CONFIG_USE_QSPI is not set
+CONFIG_USE_GIC=y
+CONFIG_ENABLE_GICV3=y
+CONFIG_USE_SERIAL=y
+
+#
+# Usart Configuration
+#
+CONFIG_ENABLE_Pl011_UART=y
+# end of Usart Configuration
+
+# CONFIG_USE_GPIO is not set
+CONFIG_USE_ETH=y
+
+#
+# Eth Configuration
+#
+# CONFIG_ENABLE_FXMAC is not set
+CONFIG_ENABLE_FGMAC=y
+CONFIG_FGMAC_PHY_COMMON=y
+# CONFIG_FGMAC_PHY_AR803X is not set
+# end of Eth Configuration
+
+# CONFIG_USE_CAN is not set
+# CONFIG_USE_I2C is not set
+# CONFIG_USE_TIMER is not set
+# CONFIG_USE_MIO is not set
+# CONFIG_USE_SDMMC is not set
+# CONFIG_USE_PCIE is not set
+# CONFIG_USE_WDT is not set
+# CONFIG_USE_DMA is not set
+# CONFIG_USE_NAND is not set
+# CONFIG_USE_RTC is not set
+# CONFIG_USE_SATA is not set
+# CONFIG_USE_USB is not set
+# CONFIG_USE_ADC is not set
+# CONFIG_USE_PWM is not set
+# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
+# end of Components Configuration
+
+CONFIG_USE_NEW_LIBC=y
+# end of Standalone Setting
+
+#
+# Building Option
+#
+# CONFIG_LOG_VERBOS is not set
+# CONFIG_LOG_DEBUG is not set
+# CONFIG_LOG_INFO is not set
+# CONFIG_LOG_WARN is not set
+CONFIG_LOG_ERROR=y
+# CONFIG_LOG_NONE is not set
+CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y
+CONFIG_INTERRUPT_ROLE_MASTER=y
+# CONFIG_INTERRUPT_ROLE_SLAVE is not set
+# CONFIG_LOG_EXTRA_INFO is not set
+# CONFIG_BOOTUP_DEBUG_PRINTS is not set
+
+#
+# Linker Options
+#
+CONFIG_AARCH32_RAM_LD=y
+# CONFIG_AARCH64_RAM_LD is not set
+# CONFIG_USER_DEFINED_LD is not set
+CONFIG_LINK_SCRIPT_ROM=y
+CONFIG_ROM_START_UP_ADDR=0x80100000
+CONFIG_ROM_SIZE_MB=1
+CONFIG_LINK_SCRIPT_RAM=y
+CONFIG_RAM_START_UP_ADDR=0x80500000
+CONFIG_RAM_SIZE_MB=64
+CONFIG_HEAP_SIZE=1
+CONFIG_SVC_STACK_SIZE=0x1000
+CONFIG_SYS_STACK_SIZE=0x1000
+CONFIG_IRQ_STACK_SIZE=0x1000
+CONFIG_ABORT_STACK_SIZE=0x1000
+CONFIG_FIQ_STACK_SIZE=0x1000
+CONFIG_UNDEF_STACK_SIZE=0x1000
+# end of Linker Options
+
+#
+# Compiler Options
+#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
+CONFIG_OUTPUT_BINARY=y
+# end of Compiler Options
+# end of Building Option
+
+#
+# Component Configuration
+#
+
+#
+# Freertos Uart Drivers
+#
+CONFIG_FREERTOS_USE_UART=y
+# end of Freertos Uart Drivers
+
+#
+# Freertos Pwm Drivers
+#
+# CONFIG_FREERTOS_USE_PWM is not set
+# end of Freertos Pwm Drivers
+
+#
+# Freertos Qspi Drivers
+#
+# CONFIG_FREERTOS_USE_QSPI is not set
+# end of Freertos Qspi Drivers
+
+#
+# Freertos Wdt Drivers
+#
+# CONFIG_FREERTOS_USE_WDT is not set
+# end of Freertos Wdt Drivers
+
+#
+# Freertos Eth Drivers
+#
+# CONFIG_FREERTOS_USE_XMAC is not set
+CONFIG_FREERTOS_USE_GMAC=y
+# end of Freertos Eth Drivers
+
+#
+# Freertos Gpio Drivers
+#
+# CONFIG_FREERTOS_USE_GPIO is not set
+# end of Freertos Gpio Drivers
+
+#
+# Freertos Spim Drivers
+#
+# CONFIG_FREERTOS_USE_FSPIM is not set
+# end of Freertos Spim Drivers
+
+#
+# Freertos DMA Drivers
+#
+# CONFIG_FREERTOS_USE_FDDMA is not set
+# CONFIG_FREERTOS_USE_FGDMA is not set
+# end of Freertos DMA Drivers
+
+#
+# Freertos Adc Drivers
+#
+# CONFIG_FREERTOS_USE_ADC is not set
+# end of Freertos Adc Drivers
+
+#
+# Freertos Can Drivers
+#
+# CONFIG_FREERTOS_USE_CAN is not set
+# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
+# end of Component Configuration
+
+#
+# Third-Party Configuration
+#
+CONFIG_USE_LWIP=y
+
+#
+# LWIP Freertos Port Configuration
+#
+# CONFIG_LWIP_FXMAC is not set
+CONFIG_LWIP_FGMAC=y
+
+#
+# LWIP Configuration
+#
+
+#
+# LWIP Port Configuration
+#
+# CONFIG_LWIP_PORT_DEBUG_EN is not set
+# end of LWIP Port Configuration
+
+# CONFIG_LWIP_NO_SYS is not set
+CONFIG_LWIP_LOCAL_HOSTNAME="phytium"
+
+#
+# Memory configuration
+#
+# CONFIG_LWIP_USE_MEM_POOL is not set
+CONFIG_LWIP_USE_MEM_HEAP=y
+CONFIG_MEM_SIZE=2
+CONFIG_MEM_ALIGNMENT=64
+# end of Memory configuration
+
+#
+# Pbuf options
+#
+CONFIG_PBUF_POOL_BUFSIZE=2
+CONFIG_PBUF_POOL_SIZE=1
+# end of Pbuf options
+
+#
+# ARP
+#
+CONFIG_ARP_QUEUEING_EN=y
+# end of ARP
+
+#
+# IPV4
+#
+# CONFIG_USE_IPV4_ONLY is not set
+CONFIG_LWIP_IP4_REASSEMBLY=y
+CONFIG_LWIP_IP4_FRAG=y
+# CONFIG_LWIP_IP_FORWARD is not set
+CONFIG_IP_REASS_MAX_PBUFS=16
+# end of IPV4
+
+#
+# ICMP
+#
+CONFIG_LWIP_ICMP=y
+CONFIG_LWIP_MULTICAST_PING=y
+CONFIG_LWIP_BROADCAST_PING=y
+# end of ICMP
+
+#
+# LWIP RAW API
+#
+CONFIG_LWIP_RAW_API_EN=y
+CONFIG_LWIP_MAX_RAW_PCBS=16
+# end of LWIP RAW API
+
+#
+# DHCP
+#
+CONFIG_LWIP_DHCP_ENABLE=y
+# CONFIG_LWIP_DHCP_DOES_ARP_CHECK is not set
+# CONFIG_LWIP_DHCP_GET_NTP_SRV is not set
+# CONFIG_LWIP_DHCP_DISABLE_CLIENT_ID is not set
+# CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set
+CONFIG_LWIP_DHCP_OPTIONS_LEN=68
+CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y
+# end of DHCP
+
+#
+# AUTOIP
+#
+# CONFIG_LWIP_AUTOIP is not set
+# end of AUTOIP
+
+#
+# IGMP
+#
+CONFIG_LWIP_IGMP_EN=y
+# end of IGMP
+
+#
+# DNS
+#
+CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y
+# end of DNS
+
+#
+# UDP
+#
+CONFIG_LWIP_MAX_UDP_PCBS=16
+CONFIG_LWIP_UDP_RECVMBOX_SIZE=6
+# CONFIG_LWIP_NETBUF_RECVINFO is not set
+# end of UDP
+
+#
+# TCP
+#
+CONFIG_LWIP_TCP_WND_DEFAULT=5744
+CONFIG_LWIP_TCP_MAXRTX=12
+CONFIG_LWIP_TCP_SYNMAXRTX=12
+CONFIG_LWIP_TCP_QUEUE_OOSEQ=y
+# CONFIG_LWIP_TCP_SACK_OUT is not set
+CONFIG_LWIP_TCP_MSS=1440
+CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5744
+CONFIG_LWIP_TCP_OVERSIZE_MSS=y
+# CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set
+# CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set
+CONFIG_LWIP_TCP_TMR_INTERVAL=250
+CONFIG_LWIP_TCP_MSL=60000
+CONFIG_LWIP_TCP_RTO_TIME=1500
+CONFIG_LWIP_MAX_ACTIVE_TCP=16
+CONFIG_LWIP_MAX_LISTENING_TCP=16
+CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y
+CONFIG_LWIP_TCP_RECVMBOX_SIZE=6
+# end of TCP
+
+#
+# Network_Interface
+#
+# CONFIG_LWIP_NETIF_API is not set
+# CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set
+# end of Network_Interface
+
+#
+# LOOPIF
+#
+CONFIG_LWIP_NETIF_LOOPBACK=y
+CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8
+# end of LOOPIF
+
+#
+# SLIPIF
+#
+# CONFIG_LWIP_SLIP_SUPPORT is not set
+# end of SLIPIF
+
+CONFIG_LWIP_TCPIP_CORE_LOCKING=y
+
+#
+# Socket
+#
+CONFIG_LWIP_MAX_SOCKETS=10
+# CONFIG_LWIP_SO_LINGER is not set
+CONFIG_LWIP_SO_REUSE=y
+CONFIG_LWIP_SO_REUSE_RXTOALL=y
+# end of Socket
+
+# CONFIG_LWIP_STATS is not set
+
+#
+# PPP
+#
+# CONFIG_LWIP_PPP_SUPPORT is not set
+CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3
+CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5
+# end of PPP
+
+#
+# Checksums
+#
+# CONFIG_LWIP_CHECKSUM_CHECK_IP is not set
+# CONFIG_LWIP_CHECKSUM_CHECK_UDP is not set
+CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y
+# end of Checksums
+
+#
+# IPV6
+#
+CONFIG_LWIP_IPV6=y
+# CONFIG_LWIP_IPV6_AUTOCONFIG is not set
+CONFIG_LWIP_IPV6_NUM_ADDRESSES=3
+# CONFIG_LWIP_IPV6_FORWARD is not set
+CONFIG_LWIP_IP6_FRAG=y
+# CONFIG_LWIP_IP6_REASSEMBLY is not set
+# end of IPV6
+
+CONFIG_LWIP_DEBUG=y
+# CONFIG_LWIP_DEBUG_ESP_LOG is not set
+CONFIG_LWIP_NETIF_DEBUG=y
+# CONFIG_LWIP_PBUF_DEBUG is not set
+# CONFIG_LWIP_ETHARP_DEBUG is not set
+# CONFIG_LWIP_API_LIB_DEBUG is not set
+# CONFIG_LWIP_SOCKETS_DEBUG is not set
+# CONFIG_LWIP_IP_DEBUG is not set
+# CONFIG_LWIP_ICMP_DEBUG is not set
+# CONFIG_LWIP_DHCP_STATE_DEBUG is not set
+# CONFIG_LWIP_DHCP_DEBUG is not set
+# CONFIG_LWIP_IP6_DEBUG is not set
+# CONFIG_LWIP_ICMP6_DEBUG is not set
+# CONFIG_LWIP_TCP_DEBUG is not set
+# CONFIG_LWIP_UDP_DEBUG is not set
+# CONFIG_LWIP_SNTP_DEBUG is not set
+# CONFIG_LWIP_DNS_DEBUG is not set
+# end of LWIP Configuration
+
+#
+# Tcp/ip task resource configuration
+#
+CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=3072
+CONFIG_LWIP_TCPIP_TASK_PRIO=6
+CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=32
+# end of Tcp/ip task resource configuration
+
+#
+# lwip port thread Configuration
+#
+CONFIG_LWIP_PORT_USE_RECEIVE_THREAD=y
+CONFIG_LWIP_PORT_RECEIVE_THREAD_STACKSIZE=1024
+CONFIG_LWIP_PORT_RECEIVE_THREAD_PRIORITY=5
+CONFIG_LWIP_PORT_USE_LINK_DETECT_THREAD=y
+CONFIG_LWIP_PORT_LINK_DETECT_STACKSIZE=1024
+CONFIG_LWIP_PORT_LINK_DETECT_PRIORITY=5
+CONFIG_LWIP_PORT_DHCP_THREAD=y
+CONFIG_LWIP_PORT_DHCP_STACKSIZE=2048
+CONFIG_LWIP_PORT_DHCP_PRIORITY=5
+# end of lwip port thread Configuration
+# end of LWIP Freertos Port Configuration
+
+CONFIG_USE_BACKTRACE=y
+# CONFIG_USE_FATFS_0_1_4 is not set
+# CONFIG_USE_SFUD is not set
+# CONFIG_USE_SPIFFS is not set
+# CONFIG_USE_AMP is not set
+CONFIG_USE_LETTER_SHELL=y
+
+#
+# Letter Shell Configuration
+#
+CONFIG_LS_PL011_UART=y
+CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
+# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set
+# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set
+# end of Letter Shell Configuration
+
+CONFIG_USE_TLSF=y
+# CONFIG_USE_SDMMC_CMD is not set
+# CONFIG_USE_CHERRY_USB is not set
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/network/lwip_startup/configs/d2000_aarch64_eg_configs b/example/network/lwip_startup/configs/d2000_aarch64_eg_configs
new file mode 100644
index 0000000000000000000000000000000000000000..7cc036af3d92ca872c74c1bfeb5af9fadfff6401
--- /dev/null
+++ b/example/network/lwip_startup/configs/d2000_aarch64_eg_configs
@@ -0,0 +1,501 @@
+
+#
+# Project Configuration
+#
+CONFIG_TARGET_NAME="d2000_freertos_a64"
+
+#
+# Lwip startup test configuration
+#
+CONFIG_LWIP_IPV6_TEST=y
+CONFIG_LWIP_DHCP_TEST=y
+# end of Lwip startup test configuration
+# end of Project Configuration
+
+#
+# Standalone Setting
+#
+CONFIG_USE_FREERTOS=y
+
+#
+# Arch Configuration
+#
+# CONFIG_TARGET_ARMV8_AARCH32 is not set
+CONFIG_TARGET_ARMV8_AARCH64=y
+CONFIG_USE_CACHE=y
+# CONFIG_USE_L3CACHE is not set
+CONFIG_USE_MMU=y
+CONFIG_USE_SYS_TICK=y
+# CONFIG_MMU_DEBUG_PRINTS is not set
+# end of Arch Configuration
+
+#
+# Board Configuration
+#
+# CONFIG_TARGET_F2000_4 is not set
+CONFIG_TARGET_D2000=y
+# CONFIG_TARGET_E2000Q is not set
+# CONFIG_TARGET_E2000D is not set
+# CONFIG_TARGET_E2000S is not set
+CONFIG_DEFAULT_DEBUG_PRINT_UART1=y
+# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set
+# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set
+# end of Board Configuration
+
+#
+# Components Configuration
+#
+# CONFIG_USE_SPI is not set
+# CONFIG_USE_QSPI is not set
+CONFIG_USE_GIC=y
+CONFIG_ENABLE_GICV3=y
+CONFIG_USE_SERIAL=y
+
+#
+# Usart Configuration
+#
+CONFIG_ENABLE_Pl011_UART=y
+# end of Usart Configuration
+
+# CONFIG_USE_GPIO is not set
+CONFIG_USE_ETH=y
+
+#
+# Eth Configuration
+#
+# CONFIG_ENABLE_FXMAC is not set
+CONFIG_ENABLE_FGMAC=y
+CONFIG_FGMAC_PHY_COMMON=y
+# CONFIG_FGMAC_PHY_AR803X is not set
+# end of Eth Configuration
+
+# CONFIG_USE_CAN is not set
+# CONFIG_USE_I2C is not set
+# CONFIG_USE_TIMER is not set
+# CONFIG_USE_MIO is not set
+# CONFIG_USE_SDMMC is not set
+# CONFIG_USE_PCIE is not set
+# CONFIG_USE_WDT is not set
+# CONFIG_USE_DMA is not set
+# CONFIG_USE_NAND is not set
+# CONFIG_USE_RTC is not set
+# CONFIG_USE_SATA is not set
+# CONFIG_USE_USB is not set
+# CONFIG_USE_ADC is not set
+# CONFIG_USE_PWM is not set
+# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
+# end of Components Configuration
+
+CONFIG_USE_NEW_LIBC=y
+# end of Standalone Setting
+
+#
+# Building Option
+#
+# CONFIG_LOG_VERBOS is not set
+# CONFIG_LOG_DEBUG is not set
+# CONFIG_LOG_INFO is not set
+# CONFIG_LOG_WARN is not set
+CONFIG_LOG_ERROR=y
+# CONFIG_LOG_NONE is not set
+CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y
+CONFIG_INTERRUPT_ROLE_MASTER=y
+# CONFIG_INTERRUPT_ROLE_SLAVE is not set
+# CONFIG_LOG_EXTRA_INFO is not set
+# CONFIG_BOOTUP_DEBUG_PRINTS is not set
+
+#
+# Linker Options
+#
+# CONFIG_AARCH32_RAM_LD is not set
+CONFIG_AARCH64_RAM_LD=y
+# CONFIG_USER_DEFINED_LD is not set
+CONFIG_LINK_SCRIPT_ROM=y
+CONFIG_ROM_START_UP_ADDR=0x80100000
+CONFIG_ROM_SIZE_MB=1
+CONFIG_LINK_SCRIPT_RAM=y
+CONFIG_RAM_START_UP_ADDR=0x80500000
+CONFIG_RAM_SIZE_MB=64
+CONFIG_HEAP_SIZE=1
+CONFIG_STACK_SIZE=0x100000
+CONFIG_FPU_STACK_SIZE=0x1000
+# end of Linker Options
+
+#
+# Compiler Options
+#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
+CONFIG_OUTPUT_BINARY=y
+# end of Compiler Options
+# end of Building Option
+
+#
+# Component Configuration
+#
+
+#
+# Freertos Uart Drivers
+#
+CONFIG_FREERTOS_USE_UART=y
+# end of Freertos Uart Drivers
+
+#
+# Freertos Pwm Drivers
+#
+# CONFIG_FREERTOS_USE_PWM is not set
+# end of Freertos Pwm Drivers
+
+#
+# Freertos Qspi Drivers
+#
+# CONFIG_FREERTOS_USE_QSPI is not set
+# end of Freertos Qspi Drivers
+
+#
+# Freertos Wdt Drivers
+#
+# CONFIG_FREERTOS_USE_WDT is not set
+# end of Freertos Wdt Drivers
+
+#
+# Freertos Eth Drivers
+#
+# CONFIG_FREERTOS_USE_XMAC is not set
+CONFIG_FREERTOS_USE_GMAC=y
+# end of Freertos Eth Drivers
+
+#
+# Freertos Gpio Drivers
+#
+# CONFIG_FREERTOS_USE_GPIO is not set
+# end of Freertos Gpio Drivers
+
+#
+# Freertos Spim Drivers
+#
+# CONFIG_FREERTOS_USE_FSPIM is not set
+# end of Freertos Spim Drivers
+
+#
+# Freertos DMA Drivers
+#
+# CONFIG_FREERTOS_USE_FDDMA is not set
+# CONFIG_FREERTOS_USE_FGDMA is not set
+# end of Freertos DMA Drivers
+
+#
+# Freertos Adc Drivers
+#
+# CONFIG_FREERTOS_USE_ADC is not set
+# end of Freertos Adc Drivers
+
+#
+# Freertos Can Drivers
+#
+# CONFIG_FREERTOS_USE_CAN is not set
+# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
+# end of Component Configuration
+
+#
+# Third-Party Configuration
+#
+CONFIG_USE_LWIP=y
+
+#
+# LWIP Freertos Port Configuration
+#
+# CONFIG_LWIP_FXMAC is not set
+CONFIG_LWIP_FGMAC=y
+
+#
+# LWIP Configuration
+#
+
+#
+# LWIP Port Configuration
+#
+# CONFIG_LWIP_PORT_DEBUG_EN is not set
+# end of LWIP Port Configuration
+
+# CONFIG_LWIP_NO_SYS is not set
+CONFIG_LWIP_LOCAL_HOSTNAME="phytium"
+
+#
+# Memory configuration
+#
+# CONFIG_LWIP_USE_MEM_POOL is not set
+CONFIG_LWIP_USE_MEM_HEAP=y
+CONFIG_MEM_SIZE=2
+CONFIG_MEM_ALIGNMENT=64
+# end of Memory configuration
+
+#
+# Pbuf options
+#
+CONFIG_PBUF_POOL_BUFSIZE=2
+CONFIG_PBUF_POOL_SIZE=1
+# end of Pbuf options
+
+#
+# ARP
+#
+CONFIG_ARP_QUEUEING_EN=y
+# end of ARP
+
+#
+# IPV4
+#
+# CONFIG_USE_IPV4_ONLY is not set
+CONFIG_LWIP_IP4_REASSEMBLY=y
+CONFIG_LWIP_IP4_FRAG=y
+# CONFIG_LWIP_IP_FORWARD is not set
+CONFIG_IP_REASS_MAX_PBUFS=16
+# end of IPV4
+
+#
+# ICMP
+#
+CONFIG_LWIP_ICMP=y
+CONFIG_LWIP_MULTICAST_PING=y
+CONFIG_LWIP_BROADCAST_PING=y
+# end of ICMP
+
+#
+# LWIP RAW API
+#
+CONFIG_LWIP_RAW_API_EN=y
+CONFIG_LWIP_MAX_RAW_PCBS=16
+# end of LWIP RAW API
+
+#
+# DHCP
+#
+CONFIG_LWIP_DHCP_ENABLE=y
+# CONFIG_LWIP_DHCP_DOES_ARP_CHECK is not set
+# CONFIG_LWIP_DHCP_GET_NTP_SRV is not set
+# CONFIG_LWIP_DHCP_DISABLE_CLIENT_ID is not set
+# CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set
+CONFIG_LWIP_DHCP_OPTIONS_LEN=68
+CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y
+# end of DHCP
+
+#
+# AUTOIP
+#
+# CONFIG_LWIP_AUTOIP is not set
+# end of AUTOIP
+
+#
+# IGMP
+#
+CONFIG_LWIP_IGMP_EN=y
+# end of IGMP
+
+#
+# DNS
+#
+CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y
+# end of DNS
+
+#
+# UDP
+#
+CONFIG_LWIP_MAX_UDP_PCBS=16
+CONFIG_LWIP_UDP_RECVMBOX_SIZE=6
+# CONFIG_LWIP_NETBUF_RECVINFO is not set
+# end of UDP
+
+#
+# TCP
+#
+CONFIG_LWIP_TCP_WND_DEFAULT=5744
+CONFIG_LWIP_TCP_MAXRTX=12
+CONFIG_LWIP_TCP_SYNMAXRTX=12
+CONFIG_LWIP_TCP_QUEUE_OOSEQ=y
+# CONFIG_LWIP_TCP_SACK_OUT is not set
+CONFIG_LWIP_TCP_MSS=1440
+CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5744
+CONFIG_LWIP_TCP_OVERSIZE_MSS=y
+# CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set
+# CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set
+CONFIG_LWIP_TCP_TMR_INTERVAL=250
+CONFIG_LWIP_TCP_MSL=60000
+CONFIG_LWIP_TCP_RTO_TIME=1500
+CONFIG_LWIP_MAX_ACTIVE_TCP=16
+CONFIG_LWIP_MAX_LISTENING_TCP=16
+CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y
+CONFIG_LWIP_TCP_RECVMBOX_SIZE=6
+# end of TCP
+
+#
+# Network_Interface
+#
+# CONFIG_LWIP_NETIF_API is not set
+# CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set
+# end of Network_Interface
+
+#
+# LOOPIF
+#
+CONFIG_LWIP_NETIF_LOOPBACK=y
+CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8
+# end of LOOPIF
+
+#
+# SLIPIF
+#
+# CONFIG_LWIP_SLIP_SUPPORT is not set
+# end of SLIPIF
+
+CONFIG_LWIP_TCPIP_CORE_LOCKING=y
+
+#
+# Socket
+#
+CONFIG_LWIP_MAX_SOCKETS=10
+# CONFIG_LWIP_SO_LINGER is not set
+CONFIG_LWIP_SO_REUSE=y
+CONFIG_LWIP_SO_REUSE_RXTOALL=y
+# end of Socket
+
+# CONFIG_LWIP_STATS is not set
+
+#
+# PPP
+#
+# CONFIG_LWIP_PPP_SUPPORT is not set
+CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3
+CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5
+# end of PPP
+
+#
+# Checksums
+#
+# CONFIG_LWIP_CHECKSUM_CHECK_IP is not set
+# CONFIG_LWIP_CHECKSUM_CHECK_UDP is not set
+CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y
+# end of Checksums
+
+#
+# IPV6
+#
+CONFIG_LWIP_IPV6=y
+# CONFIG_LWIP_IPV6_AUTOCONFIG is not set
+CONFIG_LWIP_IPV6_NUM_ADDRESSES=3
+# CONFIG_LWIP_IPV6_FORWARD is not set
+CONFIG_LWIP_IP6_FRAG=y
+# CONFIG_LWIP_IP6_REASSEMBLY is not set
+# end of IPV6
+
+CONFIG_LWIP_DEBUG=y
+# CONFIG_LWIP_DEBUG_ESP_LOG is not set
+CONFIG_LWIP_NETIF_DEBUG=y
+# CONFIG_LWIP_PBUF_DEBUG is not set
+# CONFIG_LWIP_ETHARP_DEBUG is not set
+# CONFIG_LWIP_API_LIB_DEBUG is not set
+# CONFIG_LWIP_SOCKETS_DEBUG is not set
+# CONFIG_LWIP_IP_DEBUG is not set
+# CONFIG_LWIP_ICMP_DEBUG is not set
+# CONFIG_LWIP_DHCP_STATE_DEBUG is not set
+# CONFIG_LWIP_DHCP_DEBUG is not set
+# CONFIG_LWIP_IP6_DEBUG is not set
+# CONFIG_LWIP_ICMP6_DEBUG is not set
+# CONFIG_LWIP_TCP_DEBUG is not set
+# CONFIG_LWIP_UDP_DEBUG is not set
+# CONFIG_LWIP_SNTP_DEBUG is not set
+# CONFIG_LWIP_DNS_DEBUG is not set
+# end of LWIP Configuration
+
+#
+# Tcp/ip task resource configuration
+#
+CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=3072
+CONFIG_LWIP_TCPIP_TASK_PRIO=6
+CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=32
+# end of Tcp/ip task resource configuration
+
+#
+# lwip port thread Configuration
+#
+CONFIG_LWIP_PORT_USE_RECEIVE_THREAD=y
+CONFIG_LWIP_PORT_RECEIVE_THREAD_STACKSIZE=1024
+CONFIG_LWIP_PORT_RECEIVE_THREAD_PRIORITY=5
+CONFIG_LWIP_PORT_USE_LINK_DETECT_THREAD=y
+CONFIG_LWIP_PORT_LINK_DETECT_STACKSIZE=1024
+CONFIG_LWIP_PORT_LINK_DETECT_PRIORITY=5
+CONFIG_LWIP_PORT_DHCP_THREAD=y
+CONFIG_LWIP_PORT_DHCP_STACKSIZE=2048
+CONFIG_LWIP_PORT_DHCP_PRIORITY=5
+# end of lwip port thread Configuration
+# end of LWIP Freertos Port Configuration
+
+CONFIG_USE_BACKTRACE=y
+# CONFIG_USE_FATFS_0_1_4 is not set
+# CONFIG_USE_SFUD is not set
+# CONFIG_USE_SPIFFS is not set
+# CONFIG_USE_AMP is not set
+CONFIG_USE_LETTER_SHELL=y
+
+#
+# Letter Shell Configuration
+#
+CONFIG_LS_PL011_UART=y
+CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
+# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set
+# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set
+# end of Letter Shell Configuration
+
+CONFIG_USE_TLSF=y
+# CONFIG_USE_SDMMC_CMD is not set
+# CONFIG_USE_CHERRY_USB is not set
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/network/xmac_lwip_test/configs/e2000d_aarch32_eg_configs b/example/network/lwip_startup/configs/e2000d_aarch32_eg_configs
similarity index 71%
rename from example/network/xmac_lwip_test/configs/e2000d_aarch32_eg_configs
rename to example/network/lwip_startup/configs/e2000d_aarch32_eg_configs
index c11555f1df43eacd2383ebb7c837d2b7215c5a25..c49acffb84e9af90318891f02dd6a3769ae6345e 100644
--- a/example/network/xmac_lwip_test/configs/e2000d_aarch32_eg_configs
+++ b/example/network/lwip_startup/configs/e2000d_aarch32_eg_configs
@@ -2,19 +2,18 @@
#
# Project Configuration
#
-CONFIG_TARGET_NAME="e2000d_lwip_echo"
+CONFIG_TARGET_NAME="e2000d_freertos_a32"
#
-# E2000 board Configuration
+# Lwip startup test configuration
#
-CONFIG_LWIP_IPV4_TEST=y
-# CONFIG_LWIP_IPV4_DHCP_TEST is not set
# CONFIG_LWIP_IPV6_TEST is not set
+# CONFIG_LWIP_DHCP_TEST is not set
# CONFIG_BOARD_TYPE_B is not set
# CONFIG_BOARD_TYPE_C is not set
# CONFIG_BOARD_TYPE_A is not set
CONFIG_BOARD_TYPE_DEMO=y
-# end of E2000 board Configuration
+# end of Lwip startup test configuration
# end of Project Configuration
#
@@ -89,6 +88,7 @@ CONFIG_FXMAC_PHY_COMMON=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -98,9 +98,9 @@ CONFIG_USE_NEW_LIBC=y
# Building Option
#
# CONFIG_LOG_VERBOS is not set
-# CONFIG_LOG_DEBUG is not set
+CONFIG_LOG_DEBUG=y
# CONFIG_LOG_INFO is not set
-CONFIG_LOG_WARN=y
+# CONFIG_LOG_WARN is not set
# CONFIG_LOG_ERROR is not set
# CONFIG_LOG_NONE is not set
CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y
@@ -133,6 +133,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -169,6 +178,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
CONFIG_FREERTOS_USE_XMAC=y
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -190,12 +200,6 @@ CONFIG_FREERTOS_USE_XMAC=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -207,113 +211,81 @@ CONFIG_FREERTOS_USE_XMAC=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
-# end of Component Configuration
#
-# FreeRTOS Setting
+# Freertos I2c Drivers
#
-CONFIG_USE_LWIP=y
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
#
-# LWIP Configuration
+# Freertos Mio Drivers
#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
#
-# LWIP Port Configuration
-#
-# CONFIG_LWIP_FGMAC is not set
-CONFIG_LWIP_FXMAC=y
-# end of LWIP Port Configuration
-
-CONFIG_LWIP_LOCAL_HOSTNAME="phytium"
-
+# Freertos Timer Drivers
#
-# memory configuration
-#
-# CONFIG_LWIP_USE_MEM_POOL is not set
-CONFIG_LWIP_USE_MEM_HEAP=y
-CONFIG_MEM_SIZE=1
-CONFIG_MEM_ALIGNMENT=64
-# end of memory configuration
-
-#
-# NETWORK_INTERFACE_OPTIONS
-#
-# CONFIG_LWIP_NETIF_API is not set
-# CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set
-# end of NETWORK_INTERFACE_OPTIONS
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
+# end of Component Configuration
#
-# LOOPIF
+# Third-Party Configuration
#
-CONFIG_LWIP_NETIF_LOOPBACK=y
-CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8
-# end of LOOPIF
+CONFIG_USE_LWIP=y
#
-# SLIPIF
+# LWIP Freertos Port Configuration
#
-# CONFIG_LWIP_SLIP_SUPPORT is not set
-# end of SLIPIF
+CONFIG_LWIP_FXMAC=y
+# CONFIG_LWIP_FGMAC is not set
#
-# Pbuf options
+# LWIP Configuration
#
-CONFIG_PBUF_POOL_BUFSIZE=2
-# end of Pbuf options
#
-# Internal Memory Pool Sizes
+# LWIP Port Configuration
#
-CONFIG_PBUF_POOL_SIZE=1
-# end of Internal Memory Pool Sizes
+# CONFIG_LWIP_PORT_DEBUG_EN is not set
+# end of LWIP Port Configuration
-CONFIG_LWIP_MAX_SOCKETS=10
+# CONFIG_LWIP_NO_SYS is not set
+CONFIG_LWIP_LOCAL_HOSTNAME="phytium"
#
-# LWIP RAW API
+# Memory configuration
#
-CONFIG_LWIP_MAX_RAW_PCBS=16
-# end of LWIP RAW API
+# CONFIG_LWIP_USE_MEM_POOL is not set
+CONFIG_LWIP_USE_MEM_HEAP=y
+CONFIG_MEM_SIZE=2
+CONFIG_MEM_ALIGNMENT=64
+# end of Memory configuration
#
-# TCP
+# Pbuf options
#
-CONFIG_LWIP_MAX_ACTIVE_TCP=16
-CONFIG_LWIP_MAX_LISTENING_TCP=16
-CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y
-CONFIG_LWIP_TCP_MAXRTX=12
-CONFIG_LWIP_TCP_SYNMAXRTX=12
-CONFIG_LWIP_TCP_MSS=1440
-CONFIG_LWIP_TCP_TMR_INTERVAL=250
-CONFIG_LWIP_TCP_MSL=60000
-CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5744
-CONFIG_LWIP_TCP_WND_DEFAULT=5744
-CONFIG_LWIP_TCP_RECVMBOX_SIZE=6
-CONFIG_LWIP_TCP_QUEUE_OOSEQ=y
-# CONFIG_LWIP_TCP_SACK_OUT is not set
-CONFIG_LWIP_TCP_OVERSIZE_MSS=y
-# CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set
-# CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set
-# end of TCP
+CONFIG_PBUF_POOL_BUFSIZE=2
+CONFIG_PBUF_POOL_SIZE=1
+# end of Pbuf options
#
-# UDP
+# ARP
#
-CONFIG_LWIP_MAX_UDP_PCBS=16
-CONFIG_LWIP_UDP_RECVMBOX_SIZE=6
-# CONFIG_LWIP_NETBUF_RECVINFO is not set
-# end of UDP
+CONFIG_ARP_QUEUEING_EN=y
+# end of ARP
#
-# IPv4
+# IPV4
#
-CONFIG_USE_IPV4_ONLY=y
+# CONFIG_USE_IPV4_ONLY is not set
CONFIG_LWIP_IP4_REASSEMBLY=y
CONFIG_LWIP_IP4_FRAG=y
# CONFIG_LWIP_IP_FORWARD is not set
CONFIG_IP_REASS_MAX_PBUFS=16
-# end of IPv4
+# end of IPV4
#
# ICMP
@@ -323,16 +295,17 @@ CONFIG_LWIP_MULTICAST_PING=y
CONFIG_LWIP_BROADCAST_PING=y
# end of ICMP
+#
+# LWIP RAW API
+#
+CONFIG_LWIP_RAW_API_EN=y
+CONFIG_LWIP_MAX_RAW_PCBS=16
+# end of LWIP RAW API
+
#
# DHCP
#
# CONFIG_LWIP_DHCP_ENABLE is not set
-# CONFIG_LWIP_DHCP_DOES_ARP_CHECK is not set
-# CONFIG_LWIP_DHCP_GET_NTP_SRV is not set
-# CONFIG_LWIP_DHCP_DISABLE_CLIENT_ID is not set
-# CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set
-CONFIG_LWIP_DHCP_OPTIONS_LEN=68
-CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y
# end of DHCP
#
@@ -341,6 +314,12 @@ CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y
# CONFIG_LWIP_AUTOIP is not set
# end of AUTOIP
+#
+# IGMP
+#
+CONFIG_LWIP_IGMP_EN=y
+# end of IGMP
+
#
# DNS
#
@@ -348,20 +327,65 @@ CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y
# end of DNS
#
-# TCP options
+# UDP
#
+CONFIG_LWIP_MAX_UDP_PCBS=16
+CONFIG_LWIP_UDP_RECVMBOX_SIZE=6
+# CONFIG_LWIP_NETBUF_RECVINFO is not set
+# end of UDP
+
+#
+# TCP
+#
+CONFIG_LWIP_TCP_WND_DEFAULT=5744
+CONFIG_LWIP_TCP_MAXRTX=12
+CONFIG_LWIP_TCP_SYNMAXRTX=12
+CONFIG_LWIP_TCP_QUEUE_OOSEQ=y
+# CONFIG_LWIP_TCP_SACK_OUT is not set
+CONFIG_LWIP_TCP_MSS=1440
+CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5744
+CONFIG_LWIP_TCP_OVERSIZE_MSS=y
+# CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set
+# CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set
+CONFIG_LWIP_TCP_TMR_INTERVAL=250
+CONFIG_LWIP_TCP_MSL=60000
CONFIG_LWIP_TCP_RTO_TIME=1500
-# end of TCP options
+CONFIG_LWIP_MAX_ACTIVE_TCP=16
+CONFIG_LWIP_MAX_LISTENING_TCP=16
+CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y
+CONFIG_LWIP_TCP_RECVMBOX_SIZE=6
+# end of TCP
+
+#
+# Network_Interface
+#
+# CONFIG_LWIP_NETIF_API is not set
+# CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set
+# end of Network_Interface
+
+#
+# LOOPIF
+#
+CONFIG_LWIP_NETIF_LOOPBACK=y
+CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8
+# end of LOOPIF
+
+#
+# SLIPIF
+#
+# CONFIG_LWIP_SLIP_SUPPORT is not set
+# end of SLIPIF
CONFIG_LWIP_TCPIP_CORE_LOCKING=y
#
-# socket
+# Socket
#
+CONFIG_LWIP_MAX_SOCKETS=10
# CONFIG_LWIP_SO_LINGER is not set
CONFIG_LWIP_SO_REUSE=y
CONFIG_LWIP_SO_REUSE_RXTOALL=y
-# end of socket
+# end of Socket
# CONFIG_LWIP_STATS is not set
@@ -369,8 +393,6 @@ CONFIG_LWIP_SO_REUSE_RXTOALL=y
# PPP
#
# CONFIG_LWIP_PPP_SUPPORT is not set
-CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3
-CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5
# end of PPP
#
@@ -382,17 +404,13 @@ CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y
# end of Checksums
#
-# ipv6
+# IPV6
#
-CONFIG_LWIP_IPV6=y
-# CONFIG_LWIP_IPV6_AUTOCONFIG is not set
-CONFIG_LWIP_IPV6_NUM_ADDRESSES=3
-# CONFIG_LWIP_IPV6_FORWARD is not set
-CONFIG_LWIP_IP6_FRAG=y
-# CONFIG_LWIP_IP6_REASSEMBLY is not set
-# end of ipv6
+# CONFIG_LWIP_IPV6 is not set
+# end of IPV6
CONFIG_LWIP_DEBUG=y
+# CONFIG_LWIP_DEBUG_ESP_LOG is not set
CONFIG_LWIP_NETIF_DEBUG=y
# CONFIG_LWIP_PBUF_DEBUG is not set
# CONFIG_LWIP_ETHARP_DEBUG is not set
@@ -400,16 +418,41 @@ CONFIG_LWIP_NETIF_DEBUG=y
# CONFIG_LWIP_SOCKETS_DEBUG is not set
# CONFIG_LWIP_IP_DEBUG is not set
# CONFIG_LWIP_ICMP_DEBUG is not set
+# CONFIG_LWIP_DHCP_STATE_DEBUG is not set
# CONFIG_LWIP_DHCP_DEBUG is not set
# CONFIG_LWIP_IP6_DEBUG is not set
# CONFIG_LWIP_ICMP6_DEBUG is not set
# CONFIG_LWIP_TCP_DEBUG is not set
+# CONFIG_LWIP_UDP_DEBUG is not set
# CONFIG_LWIP_SNTP_DEBUG is not set
# CONFIG_LWIP_DNS_DEBUG is not set
# end of LWIP Configuration
+#
+# Tcp/ip task resource configuration
+#
+CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=3072
+CONFIG_LWIP_TCPIP_TASK_PRIO=6
+CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=32
+# end of Tcp/ip task resource configuration
+
+#
+# lwip port thread Configuration
+#
+CONFIG_LWIP_PORT_USE_RECEIVE_THREAD=y
+CONFIG_LWIP_PORT_RECEIVE_THREAD_STACKSIZE=1024
+CONFIG_LWIP_PORT_RECEIVE_THREAD_PRIORITY=5
+CONFIG_LWIP_PORT_USE_LINK_DETECT_THREAD=y
+CONFIG_LWIP_PORT_LINK_DETECT_STACKSIZE=1024
+CONFIG_LWIP_PORT_LINK_DETECT_PRIORITY=5
+CONFIG_LWIP_PORT_DHCP_THREAD=y
+CONFIG_LWIP_PORT_DHCP_STACKSIZE=2048
+CONFIG_LWIP_PORT_DHCP_PRIORITY=5
+# end of lwip port thread Configuration
+# end of LWIP Freertos Port Configuration
+
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -427,4 +470,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/network/xmac_lwip_test/configs/e2000d_aarch64_eg_configs b/example/network/lwip_startup/configs/e2000d_aarch64_eg_configs
similarity index 70%
rename from example/network/xmac_lwip_test/configs/e2000d_aarch64_eg_configs
rename to example/network/lwip_startup/configs/e2000d_aarch64_eg_configs
index 31ac52cbc6d0513a5fbcf778956ff1aca3154ae8..c1d1d4560a4122bde9f09a13f6aa23388594d2ad 100644
--- a/example/network/xmac_lwip_test/configs/e2000d_aarch64_eg_configs
+++ b/example/network/lwip_startup/configs/e2000d_aarch64_eg_configs
@@ -2,19 +2,18 @@
#
# Project Configuration
#
-CONFIG_TARGET_NAME="e2000d_freertos_a32"
+CONFIG_TARGET_NAME="e2000d_freertos_a64"
#
-# E2000 board Configuration
+# Lwip startup test configuration
#
-CONFIG_LWIP_IPV4_TEST=y
-# CONFIG_LWIP_IPV4_DHCP_TEST is not set
# CONFIG_LWIP_IPV6_TEST is not set
+# CONFIG_LWIP_DHCP_TEST is not set
# CONFIG_BOARD_TYPE_B is not set
# CONFIG_BOARD_TYPE_C is not set
# CONFIG_BOARD_TYPE_A is not set
CONFIG_BOARD_TYPE_DEMO=y
-# end of E2000 board Configuration
+# end of Lwip startup test configuration
# end of Project Configuration
#
@@ -89,6 +88,7 @@ CONFIG_FXMAC_PHY_COMMON=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -98,9 +98,9 @@ CONFIG_USE_NEW_LIBC=y
# Building Option
#
# CONFIG_LOG_VERBOS is not set
-# CONFIG_LOG_DEBUG is not set
+CONFIG_LOG_DEBUG=y
# CONFIG_LOG_INFO is not set
-CONFIG_LOG_WARN=y
+# CONFIG_LOG_WARN is not set
# CONFIG_LOG_ERROR is not set
# CONFIG_LOG_NONE is not set
CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y
@@ -129,6 +129,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -165,6 +174,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
CONFIG_FREERTOS_USE_XMAC=y
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -186,12 +196,6 @@ CONFIG_FREERTOS_USE_XMAC=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -203,113 +207,81 @@ CONFIG_FREERTOS_USE_XMAC=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
-# end of Component Configuration
#
-# FreeRTOS Setting
+# Freertos I2c Drivers
#
-CONFIG_USE_LWIP=y
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
#
-# LWIP Configuration
+# Freertos Mio Drivers
#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
#
-# LWIP Port Configuration
-#
-# CONFIG_LWIP_FGMAC is not set
-CONFIG_LWIP_FXMAC=y
-# end of LWIP Port Configuration
-
-CONFIG_LWIP_LOCAL_HOSTNAME="phytium"
-
+# Freertos Timer Drivers
#
-# memory configuration
-#
-# CONFIG_LWIP_USE_MEM_POOL is not set
-CONFIG_LWIP_USE_MEM_HEAP=y
-CONFIG_MEM_SIZE=1
-CONFIG_MEM_ALIGNMENT=64
-# end of memory configuration
-
-#
-# NETWORK_INTERFACE_OPTIONS
-#
-# CONFIG_LWIP_NETIF_API is not set
-# CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set
-# end of NETWORK_INTERFACE_OPTIONS
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
+# end of Component Configuration
#
-# LOOPIF
+# Third-Party Configuration
#
-CONFIG_LWIP_NETIF_LOOPBACK=y
-CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8
-# end of LOOPIF
+CONFIG_USE_LWIP=y
#
-# SLIPIF
+# LWIP Freertos Port Configuration
#
-# CONFIG_LWIP_SLIP_SUPPORT is not set
-# end of SLIPIF
+CONFIG_LWIP_FXMAC=y
+# CONFIG_LWIP_FGMAC is not set
#
-# Pbuf options
+# LWIP Configuration
#
-CONFIG_PBUF_POOL_BUFSIZE=2
-# end of Pbuf options
#
-# Internal Memory Pool Sizes
+# LWIP Port Configuration
#
-CONFIG_PBUF_POOL_SIZE=1
-# end of Internal Memory Pool Sizes
+# CONFIG_LWIP_PORT_DEBUG_EN is not set
+# end of LWIP Port Configuration
-CONFIG_LWIP_MAX_SOCKETS=10
+# CONFIG_LWIP_NO_SYS is not set
+CONFIG_LWIP_LOCAL_HOSTNAME="phytium"
#
-# LWIP RAW API
+# Memory configuration
#
-CONFIG_LWIP_MAX_RAW_PCBS=16
-# end of LWIP RAW API
+# CONFIG_LWIP_USE_MEM_POOL is not set
+CONFIG_LWIP_USE_MEM_HEAP=y
+CONFIG_MEM_SIZE=2
+CONFIG_MEM_ALIGNMENT=64
+# end of Memory configuration
#
-# TCP
+# Pbuf options
#
-CONFIG_LWIP_MAX_ACTIVE_TCP=16
-CONFIG_LWIP_MAX_LISTENING_TCP=16
-CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y
-CONFIG_LWIP_TCP_MAXRTX=12
-CONFIG_LWIP_TCP_SYNMAXRTX=12
-CONFIG_LWIP_TCP_MSS=1440
-CONFIG_LWIP_TCP_TMR_INTERVAL=250
-CONFIG_LWIP_TCP_MSL=60000
-CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5744
-CONFIG_LWIP_TCP_WND_DEFAULT=5744
-CONFIG_LWIP_TCP_RECVMBOX_SIZE=6
-CONFIG_LWIP_TCP_QUEUE_OOSEQ=y
-# CONFIG_LWIP_TCP_SACK_OUT is not set
-CONFIG_LWIP_TCP_OVERSIZE_MSS=y
-# CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set
-# CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set
-# end of TCP
+CONFIG_PBUF_POOL_BUFSIZE=2
+CONFIG_PBUF_POOL_SIZE=1
+# end of Pbuf options
#
-# UDP
+# ARP
#
-CONFIG_LWIP_MAX_UDP_PCBS=16
-CONFIG_LWIP_UDP_RECVMBOX_SIZE=6
-# CONFIG_LWIP_NETBUF_RECVINFO is not set
-# end of UDP
+CONFIG_ARP_QUEUEING_EN=y
+# end of ARP
#
-# IPv4
+# IPV4
#
-CONFIG_USE_IPV4_ONLY=y
+# CONFIG_USE_IPV4_ONLY is not set
CONFIG_LWIP_IP4_REASSEMBLY=y
CONFIG_LWIP_IP4_FRAG=y
# CONFIG_LWIP_IP_FORWARD is not set
CONFIG_IP_REASS_MAX_PBUFS=16
-# end of IPv4
+# end of IPV4
#
# ICMP
@@ -319,16 +291,17 @@ CONFIG_LWIP_MULTICAST_PING=y
CONFIG_LWIP_BROADCAST_PING=y
# end of ICMP
+#
+# LWIP RAW API
+#
+CONFIG_LWIP_RAW_API_EN=y
+CONFIG_LWIP_MAX_RAW_PCBS=16
+# end of LWIP RAW API
+
#
# DHCP
#
# CONFIG_LWIP_DHCP_ENABLE is not set
-# CONFIG_LWIP_DHCP_DOES_ARP_CHECK is not set
-# CONFIG_LWIP_DHCP_GET_NTP_SRV is not set
-# CONFIG_LWIP_DHCP_DISABLE_CLIENT_ID is not set
-# CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set
-CONFIG_LWIP_DHCP_OPTIONS_LEN=68
-CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y
# end of DHCP
#
@@ -337,6 +310,12 @@ CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y
# CONFIG_LWIP_AUTOIP is not set
# end of AUTOIP
+#
+# IGMP
+#
+CONFIG_LWIP_IGMP_EN=y
+# end of IGMP
+
#
# DNS
#
@@ -344,20 +323,65 @@ CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y
# end of DNS
#
-# TCP options
+# UDP
#
+CONFIG_LWIP_MAX_UDP_PCBS=16
+CONFIG_LWIP_UDP_RECVMBOX_SIZE=6
+# CONFIG_LWIP_NETBUF_RECVINFO is not set
+# end of UDP
+
+#
+# TCP
+#
+CONFIG_LWIP_TCP_WND_DEFAULT=5744
+CONFIG_LWIP_TCP_MAXRTX=12
+CONFIG_LWIP_TCP_SYNMAXRTX=12
+CONFIG_LWIP_TCP_QUEUE_OOSEQ=y
+# CONFIG_LWIP_TCP_SACK_OUT is not set
+CONFIG_LWIP_TCP_MSS=1440
+CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5744
+CONFIG_LWIP_TCP_OVERSIZE_MSS=y
+# CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set
+# CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set
+CONFIG_LWIP_TCP_TMR_INTERVAL=250
+CONFIG_LWIP_TCP_MSL=60000
CONFIG_LWIP_TCP_RTO_TIME=1500
-# end of TCP options
+CONFIG_LWIP_MAX_ACTIVE_TCP=16
+CONFIG_LWIP_MAX_LISTENING_TCP=16
+CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y
+CONFIG_LWIP_TCP_RECVMBOX_SIZE=6
+# end of TCP
+
+#
+# Network_Interface
+#
+# CONFIG_LWIP_NETIF_API is not set
+# CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set
+# end of Network_Interface
+
+#
+# LOOPIF
+#
+CONFIG_LWIP_NETIF_LOOPBACK=y
+CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8
+# end of LOOPIF
+
+#
+# SLIPIF
+#
+# CONFIG_LWIP_SLIP_SUPPORT is not set
+# end of SLIPIF
CONFIG_LWIP_TCPIP_CORE_LOCKING=y
#
-# socket
+# Socket
#
+CONFIG_LWIP_MAX_SOCKETS=10
# CONFIG_LWIP_SO_LINGER is not set
CONFIG_LWIP_SO_REUSE=y
CONFIG_LWIP_SO_REUSE_RXTOALL=y
-# end of socket
+# end of Socket
# CONFIG_LWIP_STATS is not set
@@ -365,8 +389,6 @@ CONFIG_LWIP_SO_REUSE_RXTOALL=y
# PPP
#
# CONFIG_LWIP_PPP_SUPPORT is not set
-CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3
-CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5
# end of PPP
#
@@ -378,17 +400,13 @@ CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y
# end of Checksums
#
-# ipv6
+# IPV6
#
-CONFIG_LWIP_IPV6=y
-# CONFIG_LWIP_IPV6_AUTOCONFIG is not set
-CONFIG_LWIP_IPV6_NUM_ADDRESSES=3
-# CONFIG_LWIP_IPV6_FORWARD is not set
-CONFIG_LWIP_IP6_FRAG=y
-# CONFIG_LWIP_IP6_REASSEMBLY is not set
-# end of ipv6
+# CONFIG_LWIP_IPV6 is not set
+# end of IPV6
CONFIG_LWIP_DEBUG=y
+# CONFIG_LWIP_DEBUG_ESP_LOG is not set
CONFIG_LWIP_NETIF_DEBUG=y
# CONFIG_LWIP_PBUF_DEBUG is not set
# CONFIG_LWIP_ETHARP_DEBUG is not set
@@ -396,16 +414,41 @@ CONFIG_LWIP_NETIF_DEBUG=y
# CONFIG_LWIP_SOCKETS_DEBUG is not set
# CONFIG_LWIP_IP_DEBUG is not set
# CONFIG_LWIP_ICMP_DEBUG is not set
+# CONFIG_LWIP_DHCP_STATE_DEBUG is not set
# CONFIG_LWIP_DHCP_DEBUG is not set
# CONFIG_LWIP_IP6_DEBUG is not set
# CONFIG_LWIP_ICMP6_DEBUG is not set
# CONFIG_LWIP_TCP_DEBUG is not set
+# CONFIG_LWIP_UDP_DEBUG is not set
# CONFIG_LWIP_SNTP_DEBUG is not set
# CONFIG_LWIP_DNS_DEBUG is not set
# end of LWIP Configuration
+#
+# Tcp/ip task resource configuration
+#
+CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=3072
+CONFIG_LWIP_TCPIP_TASK_PRIO=6
+CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=32
+# end of Tcp/ip task resource configuration
+
+#
+# lwip port thread Configuration
+#
+CONFIG_LWIP_PORT_USE_RECEIVE_THREAD=y
+CONFIG_LWIP_PORT_RECEIVE_THREAD_STACKSIZE=1024
+CONFIG_LWIP_PORT_RECEIVE_THREAD_PRIORITY=5
+CONFIG_LWIP_PORT_USE_LINK_DETECT_THREAD=y
+CONFIG_LWIP_PORT_LINK_DETECT_STACKSIZE=1024
+CONFIG_LWIP_PORT_LINK_DETECT_PRIORITY=5
+CONFIG_LWIP_PORT_DHCP_THREAD=y
+CONFIG_LWIP_PORT_DHCP_STACKSIZE=2048
+CONFIG_LWIP_PORT_DHCP_PRIORITY=5
+# end of lwip port thread Configuration
+# end of LWIP Freertos Port Configuration
+
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -423,4 +466,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/network/xmac_lwip_test/configs/e2000q_aarch32_eg_configs b/example/network/lwip_startup/configs/e2000q_aarch32_eg_configs
similarity index 71%
rename from example/network/xmac_lwip_test/configs/e2000q_aarch32_eg_configs
rename to example/network/lwip_startup/configs/e2000q_aarch32_eg_configs
index 04aefcdc045fb2a23782d7edd7beb862c0bc3893..601c5045bb164fffcd762afd8bba22343b9e73e9 100644
--- a/example/network/xmac_lwip_test/configs/e2000q_aarch32_eg_configs
+++ b/example/network/lwip_startup/configs/e2000q_aarch32_eg_configs
@@ -2,19 +2,18 @@
#
# Project Configuration
#
-CONFIG_TARGET_NAME="e2000d_lwip_echo"
+CONFIG_TARGET_NAME="e2000q_freertos_a32"
#
-# E2000 board Configuration
+# Lwip startup test configuration
#
-CONFIG_LWIP_IPV4_TEST=y
-# CONFIG_LWIP_IPV4_DHCP_TEST is not set
# CONFIG_LWIP_IPV6_TEST is not set
+# CONFIG_LWIP_DHCP_TEST is not set
# CONFIG_BOARD_TYPE_B is not set
# CONFIG_BOARD_TYPE_C is not set
# CONFIG_BOARD_TYPE_A is not set
CONFIG_BOARD_TYPE_DEMO=y
-# end of E2000 board Configuration
+# end of Lwip startup test configuration
# end of Project Configuration
#
@@ -89,6 +88,7 @@ CONFIG_FXMAC_PHY_COMMON=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -98,9 +98,9 @@ CONFIG_USE_NEW_LIBC=y
# Building Option
#
# CONFIG_LOG_VERBOS is not set
-# CONFIG_LOG_DEBUG is not set
+CONFIG_LOG_DEBUG=y
# CONFIG_LOG_INFO is not set
-CONFIG_LOG_WARN=y
+# CONFIG_LOG_WARN is not set
# CONFIG_LOG_ERROR is not set
# CONFIG_LOG_NONE is not set
CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y
@@ -133,6 +133,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -169,6 +178,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
CONFIG_FREERTOS_USE_XMAC=y
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -190,12 +200,6 @@ CONFIG_FREERTOS_USE_XMAC=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -207,113 +211,81 @@ CONFIG_FREERTOS_USE_XMAC=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
-# end of Component Configuration
#
-# FreeRTOS Setting
+# Freertos I2c Drivers
#
-CONFIG_USE_LWIP=y
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
#
-# LWIP Configuration
+# Freertos Mio Drivers
#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
#
-# LWIP Port Configuration
-#
-# CONFIG_LWIP_FGMAC is not set
-CONFIG_LWIP_FXMAC=y
-# end of LWIP Port Configuration
-
-CONFIG_LWIP_LOCAL_HOSTNAME="phytium"
-
+# Freertos Timer Drivers
#
-# memory configuration
-#
-# CONFIG_LWIP_USE_MEM_POOL is not set
-CONFIG_LWIP_USE_MEM_HEAP=y
-CONFIG_MEM_SIZE=1
-CONFIG_MEM_ALIGNMENT=64
-# end of memory configuration
-
-#
-# NETWORK_INTERFACE_OPTIONS
-#
-# CONFIG_LWIP_NETIF_API is not set
-# CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set
-# end of NETWORK_INTERFACE_OPTIONS
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
+# end of Component Configuration
#
-# LOOPIF
+# Third-Party Configuration
#
-CONFIG_LWIP_NETIF_LOOPBACK=y
-CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8
-# end of LOOPIF
+CONFIG_USE_LWIP=y
#
-# SLIPIF
+# LWIP Freertos Port Configuration
#
-# CONFIG_LWIP_SLIP_SUPPORT is not set
-# end of SLIPIF
+CONFIG_LWIP_FXMAC=y
+# CONFIG_LWIP_FGMAC is not set
#
-# Pbuf options
+# LWIP Configuration
#
-CONFIG_PBUF_POOL_BUFSIZE=2
-# end of Pbuf options
#
-# Internal Memory Pool Sizes
+# LWIP Port Configuration
#
-CONFIG_PBUF_POOL_SIZE=1
-# end of Internal Memory Pool Sizes
+# CONFIG_LWIP_PORT_DEBUG_EN is not set
+# end of LWIP Port Configuration
-CONFIG_LWIP_MAX_SOCKETS=10
+# CONFIG_LWIP_NO_SYS is not set
+CONFIG_LWIP_LOCAL_HOSTNAME="phytium"
#
-# LWIP RAW API
+# Memory configuration
#
-CONFIG_LWIP_MAX_RAW_PCBS=16
-# end of LWIP RAW API
+# CONFIG_LWIP_USE_MEM_POOL is not set
+CONFIG_LWIP_USE_MEM_HEAP=y
+CONFIG_MEM_SIZE=2
+CONFIG_MEM_ALIGNMENT=64
+# end of Memory configuration
#
-# TCP
+# Pbuf options
#
-CONFIG_LWIP_MAX_ACTIVE_TCP=16
-CONFIG_LWIP_MAX_LISTENING_TCP=16
-CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y
-CONFIG_LWIP_TCP_MAXRTX=12
-CONFIG_LWIP_TCP_SYNMAXRTX=12
-CONFIG_LWIP_TCP_MSS=1440
-CONFIG_LWIP_TCP_TMR_INTERVAL=250
-CONFIG_LWIP_TCP_MSL=60000
-CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5744
-CONFIG_LWIP_TCP_WND_DEFAULT=5744
-CONFIG_LWIP_TCP_RECVMBOX_SIZE=6
-CONFIG_LWIP_TCP_QUEUE_OOSEQ=y
-# CONFIG_LWIP_TCP_SACK_OUT is not set
-CONFIG_LWIP_TCP_OVERSIZE_MSS=y
-# CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set
-# CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set
-# end of TCP
+CONFIG_PBUF_POOL_BUFSIZE=2
+CONFIG_PBUF_POOL_SIZE=1
+# end of Pbuf options
#
-# UDP
+# ARP
#
-CONFIG_LWIP_MAX_UDP_PCBS=16
-CONFIG_LWIP_UDP_RECVMBOX_SIZE=6
-# CONFIG_LWIP_NETBUF_RECVINFO is not set
-# end of UDP
+CONFIG_ARP_QUEUEING_EN=y
+# end of ARP
#
-# IPv4
+# IPV4
#
-CONFIG_USE_IPV4_ONLY=y
+# CONFIG_USE_IPV4_ONLY is not set
CONFIG_LWIP_IP4_REASSEMBLY=y
CONFIG_LWIP_IP4_FRAG=y
# CONFIG_LWIP_IP_FORWARD is not set
CONFIG_IP_REASS_MAX_PBUFS=16
-# end of IPv4
+# end of IPV4
#
# ICMP
@@ -323,16 +295,17 @@ CONFIG_LWIP_MULTICAST_PING=y
CONFIG_LWIP_BROADCAST_PING=y
# end of ICMP
+#
+# LWIP RAW API
+#
+CONFIG_LWIP_RAW_API_EN=y
+CONFIG_LWIP_MAX_RAW_PCBS=16
+# end of LWIP RAW API
+
#
# DHCP
#
# CONFIG_LWIP_DHCP_ENABLE is not set
-# CONFIG_LWIP_DHCP_DOES_ARP_CHECK is not set
-# CONFIG_LWIP_DHCP_GET_NTP_SRV is not set
-# CONFIG_LWIP_DHCP_DISABLE_CLIENT_ID is not set
-# CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set
-CONFIG_LWIP_DHCP_OPTIONS_LEN=68
-CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y
# end of DHCP
#
@@ -341,6 +314,12 @@ CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y
# CONFIG_LWIP_AUTOIP is not set
# end of AUTOIP
+#
+# IGMP
+#
+CONFIG_LWIP_IGMP_EN=y
+# end of IGMP
+
#
# DNS
#
@@ -348,20 +327,65 @@ CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y
# end of DNS
#
-# TCP options
+# UDP
#
+CONFIG_LWIP_MAX_UDP_PCBS=16
+CONFIG_LWIP_UDP_RECVMBOX_SIZE=6
+# CONFIG_LWIP_NETBUF_RECVINFO is not set
+# end of UDP
+
+#
+# TCP
+#
+CONFIG_LWIP_TCP_WND_DEFAULT=5744
+CONFIG_LWIP_TCP_MAXRTX=12
+CONFIG_LWIP_TCP_SYNMAXRTX=12
+CONFIG_LWIP_TCP_QUEUE_OOSEQ=y
+# CONFIG_LWIP_TCP_SACK_OUT is not set
+CONFIG_LWIP_TCP_MSS=1440
+CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5744
+CONFIG_LWIP_TCP_OVERSIZE_MSS=y
+# CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set
+# CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set
+CONFIG_LWIP_TCP_TMR_INTERVAL=250
+CONFIG_LWIP_TCP_MSL=60000
CONFIG_LWIP_TCP_RTO_TIME=1500
-# end of TCP options
+CONFIG_LWIP_MAX_ACTIVE_TCP=16
+CONFIG_LWIP_MAX_LISTENING_TCP=16
+CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y
+CONFIG_LWIP_TCP_RECVMBOX_SIZE=6
+# end of TCP
+
+#
+# Network_Interface
+#
+# CONFIG_LWIP_NETIF_API is not set
+# CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set
+# end of Network_Interface
+
+#
+# LOOPIF
+#
+CONFIG_LWIP_NETIF_LOOPBACK=y
+CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8
+# end of LOOPIF
+
+#
+# SLIPIF
+#
+# CONFIG_LWIP_SLIP_SUPPORT is not set
+# end of SLIPIF
CONFIG_LWIP_TCPIP_CORE_LOCKING=y
#
-# socket
+# Socket
#
+CONFIG_LWIP_MAX_SOCKETS=10
# CONFIG_LWIP_SO_LINGER is not set
CONFIG_LWIP_SO_REUSE=y
CONFIG_LWIP_SO_REUSE_RXTOALL=y
-# end of socket
+# end of Socket
# CONFIG_LWIP_STATS is not set
@@ -369,8 +393,6 @@ CONFIG_LWIP_SO_REUSE_RXTOALL=y
# PPP
#
# CONFIG_LWIP_PPP_SUPPORT is not set
-CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3
-CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5
# end of PPP
#
@@ -382,17 +404,13 @@ CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y
# end of Checksums
#
-# ipv6
+# IPV6
#
-CONFIG_LWIP_IPV6=y
-# CONFIG_LWIP_IPV6_AUTOCONFIG is not set
-CONFIG_LWIP_IPV6_NUM_ADDRESSES=3
-# CONFIG_LWIP_IPV6_FORWARD is not set
-CONFIG_LWIP_IP6_FRAG=y
-# CONFIG_LWIP_IP6_REASSEMBLY is not set
-# end of ipv6
+# CONFIG_LWIP_IPV6 is not set
+# end of IPV6
CONFIG_LWIP_DEBUG=y
+# CONFIG_LWIP_DEBUG_ESP_LOG is not set
CONFIG_LWIP_NETIF_DEBUG=y
# CONFIG_LWIP_PBUF_DEBUG is not set
# CONFIG_LWIP_ETHARP_DEBUG is not set
@@ -400,16 +418,41 @@ CONFIG_LWIP_NETIF_DEBUG=y
# CONFIG_LWIP_SOCKETS_DEBUG is not set
# CONFIG_LWIP_IP_DEBUG is not set
# CONFIG_LWIP_ICMP_DEBUG is not set
+# CONFIG_LWIP_DHCP_STATE_DEBUG is not set
# CONFIG_LWIP_DHCP_DEBUG is not set
# CONFIG_LWIP_IP6_DEBUG is not set
# CONFIG_LWIP_ICMP6_DEBUG is not set
# CONFIG_LWIP_TCP_DEBUG is not set
+# CONFIG_LWIP_UDP_DEBUG is not set
# CONFIG_LWIP_SNTP_DEBUG is not set
# CONFIG_LWIP_DNS_DEBUG is not set
# end of LWIP Configuration
+#
+# Tcp/ip task resource configuration
+#
+CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=3072
+CONFIG_LWIP_TCPIP_TASK_PRIO=6
+CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=32
+# end of Tcp/ip task resource configuration
+
+#
+# lwip port thread Configuration
+#
+CONFIG_LWIP_PORT_USE_RECEIVE_THREAD=y
+CONFIG_LWIP_PORT_RECEIVE_THREAD_STACKSIZE=1024
+CONFIG_LWIP_PORT_RECEIVE_THREAD_PRIORITY=5
+CONFIG_LWIP_PORT_USE_LINK_DETECT_THREAD=y
+CONFIG_LWIP_PORT_LINK_DETECT_STACKSIZE=1024
+CONFIG_LWIP_PORT_LINK_DETECT_PRIORITY=5
+CONFIG_LWIP_PORT_DHCP_THREAD=y
+CONFIG_LWIP_PORT_DHCP_STACKSIZE=2048
+CONFIG_LWIP_PORT_DHCP_PRIORITY=5
+# end of lwip port thread Configuration
+# end of LWIP Freertos Port Configuration
+
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -427,4 +470,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/network/xmac_lwip_test/configs/e2000q_aarch64_eg_configs b/example/network/lwip_startup/configs/e2000q_aarch64_eg_configs
similarity index 70%
rename from example/network/xmac_lwip_test/configs/e2000q_aarch64_eg_configs
rename to example/network/lwip_startup/configs/e2000q_aarch64_eg_configs
index 9ee6c5008e326b2075a1eebac6ecb39c42005d05..02d465499e2c9d7df753f43e78b70701fa4d4bcb 100644
--- a/example/network/xmac_lwip_test/configs/e2000q_aarch64_eg_configs
+++ b/example/network/lwip_startup/configs/e2000q_aarch64_eg_configs
@@ -2,19 +2,18 @@
#
# Project Configuration
#
-CONFIG_TARGET_NAME="e2000d_lwip_echo"
+CONFIG_TARGET_NAME="e2000q_freertos_a64"
#
-# E2000 board Configuration
+# Lwip startup test configuration
#
-CONFIG_LWIP_IPV4_TEST=y
-# CONFIG_LWIP_IPV4_DHCP_TEST is not set
# CONFIG_LWIP_IPV6_TEST is not set
+# CONFIG_LWIP_DHCP_TEST is not set
# CONFIG_BOARD_TYPE_B is not set
# CONFIG_BOARD_TYPE_C is not set
# CONFIG_BOARD_TYPE_A is not set
CONFIG_BOARD_TYPE_DEMO=y
-# end of E2000 board Configuration
+# end of Lwip startup test configuration
# end of Project Configuration
#
@@ -89,6 +88,7 @@ CONFIG_FXMAC_PHY_COMMON=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -98,9 +98,9 @@ CONFIG_USE_NEW_LIBC=y
# Building Option
#
# CONFIG_LOG_VERBOS is not set
-# CONFIG_LOG_DEBUG is not set
+CONFIG_LOG_DEBUG=y
# CONFIG_LOG_INFO is not set
-CONFIG_LOG_WARN=y
+# CONFIG_LOG_WARN is not set
# CONFIG_LOG_ERROR is not set
# CONFIG_LOG_NONE is not set
CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y
@@ -129,6 +129,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -165,6 +174,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
CONFIG_FREERTOS_USE_XMAC=y
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -186,12 +196,6 @@ CONFIG_FREERTOS_USE_XMAC=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -203,113 +207,81 @@ CONFIG_FREERTOS_USE_XMAC=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
-# end of Component Configuration
#
-# FreeRTOS Setting
+# Freertos I2c Drivers
#
-CONFIG_USE_LWIP=y
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
#
-# LWIP Configuration
+# Freertos Mio Drivers
#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
#
-# LWIP Port Configuration
-#
-# CONFIG_LWIP_FGMAC is not set
-CONFIG_LWIP_FXMAC=y
-# end of LWIP Port Configuration
-
-CONFIG_LWIP_LOCAL_HOSTNAME="phytium"
-
+# Freertos Timer Drivers
#
-# memory configuration
-#
-# CONFIG_LWIP_USE_MEM_POOL is not set
-CONFIG_LWIP_USE_MEM_HEAP=y
-CONFIG_MEM_SIZE=1
-CONFIG_MEM_ALIGNMENT=64
-# end of memory configuration
-
-#
-# NETWORK_INTERFACE_OPTIONS
-#
-# CONFIG_LWIP_NETIF_API is not set
-# CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set
-# end of NETWORK_INTERFACE_OPTIONS
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
+# end of Component Configuration
#
-# LOOPIF
+# Third-Party Configuration
#
-CONFIG_LWIP_NETIF_LOOPBACK=y
-CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8
-# end of LOOPIF
+CONFIG_USE_LWIP=y
#
-# SLIPIF
+# LWIP Freertos Port Configuration
#
-# CONFIG_LWIP_SLIP_SUPPORT is not set
-# end of SLIPIF
+CONFIG_LWIP_FXMAC=y
+# CONFIG_LWIP_FGMAC is not set
#
-# Pbuf options
+# LWIP Configuration
#
-CONFIG_PBUF_POOL_BUFSIZE=2
-# end of Pbuf options
#
-# Internal Memory Pool Sizes
+# LWIP Port Configuration
#
-CONFIG_PBUF_POOL_SIZE=1
-# end of Internal Memory Pool Sizes
+# CONFIG_LWIP_PORT_DEBUG_EN is not set
+# end of LWIP Port Configuration
-CONFIG_LWIP_MAX_SOCKETS=10
+# CONFIG_LWIP_NO_SYS is not set
+CONFIG_LWIP_LOCAL_HOSTNAME="phytium"
#
-# LWIP RAW API
+# Memory configuration
#
-CONFIG_LWIP_MAX_RAW_PCBS=16
-# end of LWIP RAW API
+# CONFIG_LWIP_USE_MEM_POOL is not set
+CONFIG_LWIP_USE_MEM_HEAP=y
+CONFIG_MEM_SIZE=2
+CONFIG_MEM_ALIGNMENT=64
+# end of Memory configuration
#
-# TCP
+# Pbuf options
#
-CONFIG_LWIP_MAX_ACTIVE_TCP=16
-CONFIG_LWIP_MAX_LISTENING_TCP=16
-CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y
-CONFIG_LWIP_TCP_MAXRTX=12
-CONFIG_LWIP_TCP_SYNMAXRTX=12
-CONFIG_LWIP_TCP_MSS=1440
-CONFIG_LWIP_TCP_TMR_INTERVAL=250
-CONFIG_LWIP_TCP_MSL=60000
-CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5744
-CONFIG_LWIP_TCP_WND_DEFAULT=5744
-CONFIG_LWIP_TCP_RECVMBOX_SIZE=6
-CONFIG_LWIP_TCP_QUEUE_OOSEQ=y
-# CONFIG_LWIP_TCP_SACK_OUT is not set
-CONFIG_LWIP_TCP_OVERSIZE_MSS=y
-# CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set
-# CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set
-# end of TCP
+CONFIG_PBUF_POOL_BUFSIZE=2
+CONFIG_PBUF_POOL_SIZE=1
+# end of Pbuf options
#
-# UDP
+# ARP
#
-CONFIG_LWIP_MAX_UDP_PCBS=16
-CONFIG_LWIP_UDP_RECVMBOX_SIZE=6
-# CONFIG_LWIP_NETBUF_RECVINFO is not set
-# end of UDP
+CONFIG_ARP_QUEUEING_EN=y
+# end of ARP
#
-# IPv4
+# IPV4
#
-CONFIG_USE_IPV4_ONLY=y
+# CONFIG_USE_IPV4_ONLY is not set
CONFIG_LWIP_IP4_REASSEMBLY=y
CONFIG_LWIP_IP4_FRAG=y
# CONFIG_LWIP_IP_FORWARD is not set
CONFIG_IP_REASS_MAX_PBUFS=16
-# end of IPv4
+# end of IPV4
#
# ICMP
@@ -319,16 +291,17 @@ CONFIG_LWIP_MULTICAST_PING=y
CONFIG_LWIP_BROADCAST_PING=y
# end of ICMP
+#
+# LWIP RAW API
+#
+CONFIG_LWIP_RAW_API_EN=y
+CONFIG_LWIP_MAX_RAW_PCBS=16
+# end of LWIP RAW API
+
#
# DHCP
#
# CONFIG_LWIP_DHCP_ENABLE is not set
-# CONFIG_LWIP_DHCP_DOES_ARP_CHECK is not set
-# CONFIG_LWIP_DHCP_GET_NTP_SRV is not set
-# CONFIG_LWIP_DHCP_DISABLE_CLIENT_ID is not set
-# CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set
-CONFIG_LWIP_DHCP_OPTIONS_LEN=68
-CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y
# end of DHCP
#
@@ -337,6 +310,12 @@ CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y
# CONFIG_LWIP_AUTOIP is not set
# end of AUTOIP
+#
+# IGMP
+#
+CONFIG_LWIP_IGMP_EN=y
+# end of IGMP
+
#
# DNS
#
@@ -344,20 +323,65 @@ CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y
# end of DNS
#
-# TCP options
+# UDP
#
+CONFIG_LWIP_MAX_UDP_PCBS=16
+CONFIG_LWIP_UDP_RECVMBOX_SIZE=6
+# CONFIG_LWIP_NETBUF_RECVINFO is not set
+# end of UDP
+
+#
+# TCP
+#
+CONFIG_LWIP_TCP_WND_DEFAULT=5744
+CONFIG_LWIP_TCP_MAXRTX=12
+CONFIG_LWIP_TCP_SYNMAXRTX=12
+CONFIG_LWIP_TCP_QUEUE_OOSEQ=y
+# CONFIG_LWIP_TCP_SACK_OUT is not set
+CONFIG_LWIP_TCP_MSS=1440
+CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5744
+CONFIG_LWIP_TCP_OVERSIZE_MSS=y
+# CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set
+# CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set
+CONFIG_LWIP_TCP_TMR_INTERVAL=250
+CONFIG_LWIP_TCP_MSL=60000
CONFIG_LWIP_TCP_RTO_TIME=1500
-# end of TCP options
+CONFIG_LWIP_MAX_ACTIVE_TCP=16
+CONFIG_LWIP_MAX_LISTENING_TCP=16
+CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y
+CONFIG_LWIP_TCP_RECVMBOX_SIZE=6
+# end of TCP
+
+#
+# Network_Interface
+#
+# CONFIG_LWIP_NETIF_API is not set
+# CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set
+# end of Network_Interface
+
+#
+# LOOPIF
+#
+CONFIG_LWIP_NETIF_LOOPBACK=y
+CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8
+# end of LOOPIF
+
+#
+# SLIPIF
+#
+# CONFIG_LWIP_SLIP_SUPPORT is not set
+# end of SLIPIF
CONFIG_LWIP_TCPIP_CORE_LOCKING=y
#
-# socket
+# Socket
#
+CONFIG_LWIP_MAX_SOCKETS=10
# CONFIG_LWIP_SO_LINGER is not set
CONFIG_LWIP_SO_REUSE=y
CONFIG_LWIP_SO_REUSE_RXTOALL=y
-# end of socket
+# end of Socket
# CONFIG_LWIP_STATS is not set
@@ -365,8 +389,6 @@ CONFIG_LWIP_SO_REUSE_RXTOALL=y
# PPP
#
# CONFIG_LWIP_PPP_SUPPORT is not set
-CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3
-CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5
# end of PPP
#
@@ -378,17 +400,13 @@ CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y
# end of Checksums
#
-# ipv6
+# IPV6
#
-CONFIG_LWIP_IPV6=y
-# CONFIG_LWIP_IPV6_AUTOCONFIG is not set
-CONFIG_LWIP_IPV6_NUM_ADDRESSES=3
-# CONFIG_LWIP_IPV6_FORWARD is not set
-CONFIG_LWIP_IP6_FRAG=y
-# CONFIG_LWIP_IP6_REASSEMBLY is not set
-# end of ipv6
+# CONFIG_LWIP_IPV6 is not set
+# end of IPV6
CONFIG_LWIP_DEBUG=y
+# CONFIG_LWIP_DEBUG_ESP_LOG is not set
CONFIG_LWIP_NETIF_DEBUG=y
# CONFIG_LWIP_PBUF_DEBUG is not set
# CONFIG_LWIP_ETHARP_DEBUG is not set
@@ -396,16 +414,41 @@ CONFIG_LWIP_NETIF_DEBUG=y
# CONFIG_LWIP_SOCKETS_DEBUG is not set
# CONFIG_LWIP_IP_DEBUG is not set
# CONFIG_LWIP_ICMP_DEBUG is not set
+# CONFIG_LWIP_DHCP_STATE_DEBUG is not set
# CONFIG_LWIP_DHCP_DEBUG is not set
# CONFIG_LWIP_IP6_DEBUG is not set
# CONFIG_LWIP_ICMP6_DEBUG is not set
# CONFIG_LWIP_TCP_DEBUG is not set
+# CONFIG_LWIP_UDP_DEBUG is not set
# CONFIG_LWIP_SNTP_DEBUG is not set
# CONFIG_LWIP_DNS_DEBUG is not set
# end of LWIP Configuration
+#
+# Tcp/ip task resource configuration
+#
+CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=3072
+CONFIG_LWIP_TCPIP_TASK_PRIO=6
+CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=32
+# end of Tcp/ip task resource configuration
+
+#
+# lwip port thread Configuration
+#
+CONFIG_LWIP_PORT_USE_RECEIVE_THREAD=y
+CONFIG_LWIP_PORT_RECEIVE_THREAD_STACKSIZE=1024
+CONFIG_LWIP_PORT_RECEIVE_THREAD_PRIORITY=5
+CONFIG_LWIP_PORT_USE_LINK_DETECT_THREAD=y
+CONFIG_LWIP_PORT_LINK_DETECT_STACKSIZE=1024
+CONFIG_LWIP_PORT_LINK_DETECT_PRIORITY=5
+CONFIG_LWIP_PORT_DHCP_THREAD=y
+CONFIG_LWIP_PORT_DHCP_STACKSIZE=2048
+CONFIG_LWIP_PORT_DHCP_PRIORITY=5
+# end of lwip port thread Configuration
+# end of LWIP Freertos Port Configuration
+
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -423,4 +466,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/network/lwip_startup/configs/ft2004_aarch32_eg_configs b/example/network/lwip_startup/configs/ft2004_aarch32_eg_configs
new file mode 100644
index 0000000000000000000000000000000000000000..e0fd87208cc7dc58ffe0684a5811c3a907b471ac
--- /dev/null
+++ b/example/network/lwip_startup/configs/ft2004_aarch32_eg_configs
@@ -0,0 +1,505 @@
+
+#
+# Project Configuration
+#
+CONFIG_TARGET_NAME="ft2004_freertos_a32"
+
+#
+# Lwip startup test configuration
+#
+CONFIG_LWIP_IPV6_TEST=y
+CONFIG_LWIP_DHCP_TEST=y
+# end of Lwip startup test configuration
+# end of Project Configuration
+
+#
+# Standalone Setting
+#
+CONFIG_USE_FREERTOS=y
+
+#
+# Arch Configuration
+#
+CONFIG_TARGET_ARMV8_AARCH32=y
+# CONFIG_TARGET_ARMV8_AARCH64 is not set
+CONFIG_USE_CACHE=y
+# CONFIG_USE_L3CACHE is not set
+CONFIG_USE_MMU=y
+CONFIG_USE_SYS_TICK=y
+CONFIG_USE_AARCH64_L1_TO_AARCH32=y
+# end of Arch Configuration
+
+#
+# Board Configuration
+#
+CONFIG_TARGET_F2000_4=y
+# CONFIG_TARGET_D2000 is not set
+# CONFIG_TARGET_E2000Q is not set
+# CONFIG_TARGET_E2000D is not set
+# CONFIG_TARGET_E2000S is not set
+CONFIG_DEFAULT_DEBUG_PRINT_UART1=y
+# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set
+# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set
+# end of Board Configuration
+
+#
+# Components Configuration
+#
+# CONFIG_USE_SPI is not set
+# CONFIG_USE_QSPI is not set
+CONFIG_USE_GIC=y
+CONFIG_ENABLE_GICV3=y
+CONFIG_USE_SERIAL=y
+
+#
+# Usart Configuration
+#
+CONFIG_ENABLE_Pl011_UART=y
+# end of Usart Configuration
+
+# CONFIG_USE_GPIO is not set
+CONFIG_USE_ETH=y
+
+#
+# Eth Configuration
+#
+# CONFIG_ENABLE_FXMAC is not set
+CONFIG_ENABLE_FGMAC=y
+CONFIG_FGMAC_PHY_COMMON=y
+# CONFIG_FGMAC_PHY_AR803X is not set
+# end of Eth Configuration
+
+# CONFIG_USE_CAN is not set
+# CONFIG_USE_I2C is not set
+# CONFIG_USE_TIMER is not set
+# CONFIG_USE_MIO is not set
+# CONFIG_USE_SDMMC is not set
+# CONFIG_USE_PCIE is not set
+# CONFIG_USE_WDT is not set
+# CONFIG_USE_DMA is not set
+# CONFIG_USE_NAND is not set
+# CONFIG_USE_RTC is not set
+# CONFIG_USE_SATA is not set
+# CONFIG_USE_USB is not set
+# CONFIG_USE_ADC is not set
+# CONFIG_USE_PWM is not set
+# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
+# end of Components Configuration
+
+CONFIG_USE_NEW_LIBC=y
+# end of Standalone Setting
+
+#
+# Building Option
+#
+# CONFIG_LOG_VERBOS is not set
+# CONFIG_LOG_DEBUG is not set
+# CONFIG_LOG_INFO is not set
+# CONFIG_LOG_WARN is not set
+CONFIG_LOG_ERROR=y
+# CONFIG_LOG_NONE is not set
+CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y
+CONFIG_INTERRUPT_ROLE_MASTER=y
+# CONFIG_INTERRUPT_ROLE_SLAVE is not set
+# CONFIG_LOG_EXTRA_INFO is not set
+# CONFIG_BOOTUP_DEBUG_PRINTS is not set
+
+#
+# Linker Options
+#
+CONFIG_AARCH32_RAM_LD=y
+# CONFIG_AARCH64_RAM_LD is not set
+# CONFIG_USER_DEFINED_LD is not set
+CONFIG_LINK_SCRIPT_ROM=y
+CONFIG_ROM_START_UP_ADDR=0x80100000
+CONFIG_ROM_SIZE_MB=1
+CONFIG_LINK_SCRIPT_RAM=y
+CONFIG_RAM_START_UP_ADDR=0x80500000
+CONFIG_RAM_SIZE_MB=64
+CONFIG_HEAP_SIZE=1
+CONFIG_SVC_STACK_SIZE=0x1000
+CONFIG_SYS_STACK_SIZE=0x1000
+CONFIG_IRQ_STACK_SIZE=0x1000
+CONFIG_ABORT_STACK_SIZE=0x1000
+CONFIG_FIQ_STACK_SIZE=0x1000
+CONFIG_UNDEF_STACK_SIZE=0x1000
+# end of Linker Options
+
+#
+# Compiler Options
+#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
+CONFIG_OUTPUT_BINARY=y
+# end of Compiler Options
+# end of Building Option
+
+#
+# Component Configuration
+#
+
+#
+# Freertos Uart Drivers
+#
+CONFIG_FREERTOS_USE_UART=y
+# end of Freertos Uart Drivers
+
+#
+# Freertos Pwm Drivers
+#
+# CONFIG_FREERTOS_USE_PWM is not set
+# end of Freertos Pwm Drivers
+
+#
+# Freertos Qspi Drivers
+#
+# CONFIG_FREERTOS_USE_QSPI is not set
+# end of Freertos Qspi Drivers
+
+#
+# Freertos Wdt Drivers
+#
+# CONFIG_FREERTOS_USE_WDT is not set
+# end of Freertos Wdt Drivers
+
+#
+# Freertos Eth Drivers
+#
+# CONFIG_FREERTOS_USE_XMAC is not set
+CONFIG_FREERTOS_USE_GMAC=y
+# end of Freertos Eth Drivers
+
+#
+# Freertos Gpio Drivers
+#
+# CONFIG_FREERTOS_USE_GPIO is not set
+# end of Freertos Gpio Drivers
+
+#
+# Freertos Spim Drivers
+#
+# CONFIG_FREERTOS_USE_FSPIM is not set
+# end of Freertos Spim Drivers
+
+#
+# Freertos DMA Drivers
+#
+# CONFIG_FREERTOS_USE_FDDMA is not set
+# CONFIG_FREERTOS_USE_FGDMA is not set
+# end of Freertos DMA Drivers
+
+#
+# Freertos Adc Drivers
+#
+# CONFIG_FREERTOS_USE_ADC is not set
+# end of Freertos Adc Drivers
+
+#
+# Freertos Can Drivers
+#
+# CONFIG_FREERTOS_USE_CAN is not set
+# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
+# end of Component Configuration
+
+#
+# Third-Party Configuration
+#
+CONFIG_USE_LWIP=y
+
+#
+# LWIP Freertos Port Configuration
+#
+# CONFIG_LWIP_FXMAC is not set
+CONFIG_LWIP_FGMAC=y
+
+#
+# LWIP Configuration
+#
+
+#
+# LWIP Port Configuration
+#
+# CONFIG_LWIP_PORT_DEBUG_EN is not set
+# end of LWIP Port Configuration
+
+# CONFIG_LWIP_NO_SYS is not set
+CONFIG_LWIP_LOCAL_HOSTNAME="phytium"
+
+#
+# Memory configuration
+#
+# CONFIG_LWIP_USE_MEM_POOL is not set
+CONFIG_LWIP_USE_MEM_HEAP=y
+CONFIG_MEM_SIZE=2
+CONFIG_MEM_ALIGNMENT=64
+# end of Memory configuration
+
+#
+# Pbuf options
+#
+CONFIG_PBUF_POOL_BUFSIZE=2
+CONFIG_PBUF_POOL_SIZE=1
+# end of Pbuf options
+
+#
+# ARP
+#
+CONFIG_ARP_QUEUEING_EN=y
+# end of ARP
+
+#
+# IPV4
+#
+# CONFIG_USE_IPV4_ONLY is not set
+CONFIG_LWIP_IP4_REASSEMBLY=y
+CONFIG_LWIP_IP4_FRAG=y
+# CONFIG_LWIP_IP_FORWARD is not set
+CONFIG_IP_REASS_MAX_PBUFS=16
+# end of IPV4
+
+#
+# ICMP
+#
+CONFIG_LWIP_ICMP=y
+CONFIG_LWIP_MULTICAST_PING=y
+CONFIG_LWIP_BROADCAST_PING=y
+# end of ICMP
+
+#
+# LWIP RAW API
+#
+CONFIG_LWIP_RAW_API_EN=y
+CONFIG_LWIP_MAX_RAW_PCBS=16
+# end of LWIP RAW API
+
+#
+# DHCP
+#
+CONFIG_LWIP_DHCP_ENABLE=y
+# CONFIG_LWIP_DHCP_DOES_ARP_CHECK is not set
+# CONFIG_LWIP_DHCP_GET_NTP_SRV is not set
+# CONFIG_LWIP_DHCP_DISABLE_CLIENT_ID is not set
+# CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set
+CONFIG_LWIP_DHCP_OPTIONS_LEN=68
+CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y
+# end of DHCP
+
+#
+# AUTOIP
+#
+# CONFIG_LWIP_AUTOIP is not set
+# end of AUTOIP
+
+#
+# IGMP
+#
+CONFIG_LWIP_IGMP_EN=y
+# end of IGMP
+
+#
+# DNS
+#
+CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y
+# end of DNS
+
+#
+# UDP
+#
+CONFIG_LWIP_MAX_UDP_PCBS=16
+CONFIG_LWIP_UDP_RECVMBOX_SIZE=6
+# CONFIG_LWIP_NETBUF_RECVINFO is not set
+# end of UDP
+
+#
+# TCP
+#
+CONFIG_LWIP_TCP_WND_DEFAULT=5744
+CONFIG_LWIP_TCP_MAXRTX=12
+CONFIG_LWIP_TCP_SYNMAXRTX=12
+CONFIG_LWIP_TCP_QUEUE_OOSEQ=y
+# CONFIG_LWIP_TCP_SACK_OUT is not set
+CONFIG_LWIP_TCP_MSS=1440
+CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5744
+CONFIG_LWIP_TCP_OVERSIZE_MSS=y
+# CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set
+# CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set
+CONFIG_LWIP_TCP_TMR_INTERVAL=250
+CONFIG_LWIP_TCP_MSL=60000
+CONFIG_LWIP_TCP_RTO_TIME=1500
+CONFIG_LWIP_MAX_ACTIVE_TCP=16
+CONFIG_LWIP_MAX_LISTENING_TCP=16
+CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y
+CONFIG_LWIP_TCP_RECVMBOX_SIZE=6
+# end of TCP
+
+#
+# Network_Interface
+#
+# CONFIG_LWIP_NETIF_API is not set
+# CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set
+# end of Network_Interface
+
+#
+# LOOPIF
+#
+CONFIG_LWIP_NETIF_LOOPBACK=y
+CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8
+# end of LOOPIF
+
+#
+# SLIPIF
+#
+# CONFIG_LWIP_SLIP_SUPPORT is not set
+# end of SLIPIF
+
+CONFIG_LWIP_TCPIP_CORE_LOCKING=y
+
+#
+# Socket
+#
+CONFIG_LWIP_MAX_SOCKETS=10
+# CONFIG_LWIP_SO_LINGER is not set
+CONFIG_LWIP_SO_REUSE=y
+CONFIG_LWIP_SO_REUSE_RXTOALL=y
+# end of Socket
+
+# CONFIG_LWIP_STATS is not set
+
+#
+# PPP
+#
+# CONFIG_LWIP_PPP_SUPPORT is not set
+CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3
+CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5
+# end of PPP
+
+#
+# Checksums
+#
+# CONFIG_LWIP_CHECKSUM_CHECK_IP is not set
+# CONFIG_LWIP_CHECKSUM_CHECK_UDP is not set
+CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y
+# end of Checksums
+
+#
+# IPV6
+#
+CONFIG_LWIP_IPV6=y
+# CONFIG_LWIP_IPV6_AUTOCONFIG is not set
+CONFIG_LWIP_IPV6_NUM_ADDRESSES=3
+# CONFIG_LWIP_IPV6_FORWARD is not set
+CONFIG_LWIP_IP6_FRAG=y
+# CONFIG_LWIP_IP6_REASSEMBLY is not set
+# end of IPV6
+
+CONFIG_LWIP_DEBUG=y
+# CONFIG_LWIP_DEBUG_ESP_LOG is not set
+CONFIG_LWIP_NETIF_DEBUG=y
+# CONFIG_LWIP_PBUF_DEBUG is not set
+# CONFIG_LWIP_ETHARP_DEBUG is not set
+# CONFIG_LWIP_API_LIB_DEBUG is not set
+# CONFIG_LWIP_SOCKETS_DEBUG is not set
+# CONFIG_LWIP_IP_DEBUG is not set
+# CONFIG_LWIP_ICMP_DEBUG is not set
+# CONFIG_LWIP_DHCP_STATE_DEBUG is not set
+# CONFIG_LWIP_DHCP_DEBUG is not set
+# CONFIG_LWIP_IP6_DEBUG is not set
+# CONFIG_LWIP_ICMP6_DEBUG is not set
+# CONFIG_LWIP_TCP_DEBUG is not set
+# CONFIG_LWIP_UDP_DEBUG is not set
+# CONFIG_LWIP_SNTP_DEBUG is not set
+# CONFIG_LWIP_DNS_DEBUG is not set
+# end of LWIP Configuration
+
+#
+# Tcp/ip task resource configuration
+#
+CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=3072
+CONFIG_LWIP_TCPIP_TASK_PRIO=6
+CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=32
+# end of Tcp/ip task resource configuration
+
+#
+# lwip port thread Configuration
+#
+CONFIG_LWIP_PORT_USE_RECEIVE_THREAD=y
+CONFIG_LWIP_PORT_RECEIVE_THREAD_STACKSIZE=1024
+CONFIG_LWIP_PORT_RECEIVE_THREAD_PRIORITY=5
+CONFIG_LWIP_PORT_USE_LINK_DETECT_THREAD=y
+CONFIG_LWIP_PORT_LINK_DETECT_STACKSIZE=1024
+CONFIG_LWIP_PORT_LINK_DETECT_PRIORITY=5
+CONFIG_LWIP_PORT_DHCP_THREAD=y
+CONFIG_LWIP_PORT_DHCP_STACKSIZE=2048
+CONFIG_LWIP_PORT_DHCP_PRIORITY=5
+# end of lwip port thread Configuration
+# end of LWIP Freertos Port Configuration
+
+CONFIG_USE_BACKTRACE=y
+# CONFIG_USE_FATFS_0_1_4 is not set
+# CONFIG_USE_SFUD is not set
+# CONFIG_USE_SPIFFS is not set
+# CONFIG_USE_AMP is not set
+CONFIG_USE_LETTER_SHELL=y
+
+#
+# Letter Shell Configuration
+#
+CONFIG_LS_PL011_UART=y
+CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
+# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set
+# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set
+# end of Letter Shell Configuration
+
+CONFIG_USE_TLSF=y
+# CONFIG_USE_SDMMC_CMD is not set
+# CONFIG_USE_CHERRY_USB is not set
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/network/lwip_startup/configs/ft2004_aarch64_eg_configs b/example/network/lwip_startup/configs/ft2004_aarch64_eg_configs
new file mode 100644
index 0000000000000000000000000000000000000000..90b82d86d68859f29e51b9b68d41cbea69aa2fee
--- /dev/null
+++ b/example/network/lwip_startup/configs/ft2004_aarch64_eg_configs
@@ -0,0 +1,501 @@
+
+#
+# Project Configuration
+#
+CONFIG_TARGET_NAME="ft20004_freertos_a64"
+
+#
+# Lwip startup test configuration
+#
+CONFIG_LWIP_IPV6_TEST=y
+CONFIG_LWIP_DHCP_TEST=y
+# end of Lwip startup test configuration
+# end of Project Configuration
+
+#
+# Standalone Setting
+#
+CONFIG_USE_FREERTOS=y
+
+#
+# Arch Configuration
+#
+# CONFIG_TARGET_ARMV8_AARCH32 is not set
+CONFIG_TARGET_ARMV8_AARCH64=y
+CONFIG_USE_CACHE=y
+# CONFIG_USE_L3CACHE is not set
+CONFIG_USE_MMU=y
+CONFIG_USE_SYS_TICK=y
+# CONFIG_MMU_DEBUG_PRINTS is not set
+# end of Arch Configuration
+
+#
+# Board Configuration
+#
+CONFIG_TARGET_F2000_4=y
+# CONFIG_TARGET_D2000 is not set
+# CONFIG_TARGET_E2000Q is not set
+# CONFIG_TARGET_E2000D is not set
+# CONFIG_TARGET_E2000S is not set
+CONFIG_DEFAULT_DEBUG_PRINT_UART1=y
+# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set
+# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set
+# end of Board Configuration
+
+#
+# Components Configuration
+#
+# CONFIG_USE_SPI is not set
+# CONFIG_USE_QSPI is not set
+CONFIG_USE_GIC=y
+CONFIG_ENABLE_GICV3=y
+CONFIG_USE_SERIAL=y
+
+#
+# Usart Configuration
+#
+CONFIG_ENABLE_Pl011_UART=y
+# end of Usart Configuration
+
+# CONFIG_USE_GPIO is not set
+CONFIG_USE_ETH=y
+
+#
+# Eth Configuration
+#
+# CONFIG_ENABLE_FXMAC is not set
+CONFIG_ENABLE_FGMAC=y
+CONFIG_FGMAC_PHY_COMMON=y
+# CONFIG_FGMAC_PHY_AR803X is not set
+# end of Eth Configuration
+
+# CONFIG_USE_CAN is not set
+# CONFIG_USE_I2C is not set
+# CONFIG_USE_TIMER is not set
+# CONFIG_USE_MIO is not set
+# CONFIG_USE_SDMMC is not set
+# CONFIG_USE_PCIE is not set
+# CONFIG_USE_WDT is not set
+# CONFIG_USE_DMA is not set
+# CONFIG_USE_NAND is not set
+# CONFIG_USE_RTC is not set
+# CONFIG_USE_SATA is not set
+# CONFIG_USE_USB is not set
+# CONFIG_USE_ADC is not set
+# CONFIG_USE_PWM is not set
+# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
+# end of Components Configuration
+
+CONFIG_USE_NEW_LIBC=y
+# end of Standalone Setting
+
+#
+# Building Option
+#
+# CONFIG_LOG_VERBOS is not set
+# CONFIG_LOG_DEBUG is not set
+# CONFIG_LOG_INFO is not set
+# CONFIG_LOG_WARN is not set
+CONFIG_LOG_ERROR=y
+# CONFIG_LOG_NONE is not set
+CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y
+CONFIG_INTERRUPT_ROLE_MASTER=y
+# CONFIG_INTERRUPT_ROLE_SLAVE is not set
+# CONFIG_LOG_EXTRA_INFO is not set
+# CONFIG_BOOTUP_DEBUG_PRINTS is not set
+
+#
+# Linker Options
+#
+# CONFIG_AARCH32_RAM_LD is not set
+CONFIG_AARCH64_RAM_LD=y
+# CONFIG_USER_DEFINED_LD is not set
+CONFIG_LINK_SCRIPT_ROM=y
+CONFIG_ROM_START_UP_ADDR=0x80100000
+CONFIG_ROM_SIZE_MB=1
+CONFIG_LINK_SCRIPT_RAM=y
+CONFIG_RAM_START_UP_ADDR=0x80500000
+CONFIG_RAM_SIZE_MB=64
+CONFIG_HEAP_SIZE=1
+CONFIG_STACK_SIZE=0x100000
+CONFIG_FPU_STACK_SIZE=0x1000
+# end of Linker Options
+
+#
+# Compiler Options
+#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
+CONFIG_OUTPUT_BINARY=y
+# end of Compiler Options
+# end of Building Option
+
+#
+# Component Configuration
+#
+
+#
+# Freertos Uart Drivers
+#
+CONFIG_FREERTOS_USE_UART=y
+# end of Freertos Uart Drivers
+
+#
+# Freertos Pwm Drivers
+#
+# CONFIG_FREERTOS_USE_PWM is not set
+# end of Freertos Pwm Drivers
+
+#
+# Freertos Qspi Drivers
+#
+# CONFIG_FREERTOS_USE_QSPI is not set
+# end of Freertos Qspi Drivers
+
+#
+# Freertos Wdt Drivers
+#
+# CONFIG_FREERTOS_USE_WDT is not set
+# end of Freertos Wdt Drivers
+
+#
+# Freertos Eth Drivers
+#
+# CONFIG_FREERTOS_USE_XMAC is not set
+CONFIG_FREERTOS_USE_GMAC=y
+# end of Freertos Eth Drivers
+
+#
+# Freertos Gpio Drivers
+#
+# CONFIG_FREERTOS_USE_GPIO is not set
+# end of Freertos Gpio Drivers
+
+#
+# Freertos Spim Drivers
+#
+# CONFIG_FREERTOS_USE_FSPIM is not set
+# end of Freertos Spim Drivers
+
+#
+# Freertos DMA Drivers
+#
+# CONFIG_FREERTOS_USE_FDDMA is not set
+# CONFIG_FREERTOS_USE_FGDMA is not set
+# end of Freertos DMA Drivers
+
+#
+# Freertos Adc Drivers
+#
+# CONFIG_FREERTOS_USE_ADC is not set
+# end of Freertos Adc Drivers
+
+#
+# Freertos Can Drivers
+#
+# CONFIG_FREERTOS_USE_CAN is not set
+# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
+# end of Component Configuration
+
+#
+# Third-Party Configuration
+#
+CONFIG_USE_LWIP=y
+
+#
+# LWIP Freertos Port Configuration
+#
+# CONFIG_LWIP_FXMAC is not set
+CONFIG_LWIP_FGMAC=y
+
+#
+# LWIP Configuration
+#
+
+#
+# LWIP Port Configuration
+#
+# CONFIG_LWIP_PORT_DEBUG_EN is not set
+# end of LWIP Port Configuration
+
+# CONFIG_LWIP_NO_SYS is not set
+CONFIG_LWIP_LOCAL_HOSTNAME="phytium"
+
+#
+# Memory configuration
+#
+# CONFIG_LWIP_USE_MEM_POOL is not set
+CONFIG_LWIP_USE_MEM_HEAP=y
+CONFIG_MEM_SIZE=2
+CONFIG_MEM_ALIGNMENT=64
+# end of Memory configuration
+
+#
+# Pbuf options
+#
+CONFIG_PBUF_POOL_BUFSIZE=2
+CONFIG_PBUF_POOL_SIZE=1
+# end of Pbuf options
+
+#
+# ARP
+#
+CONFIG_ARP_QUEUEING_EN=y
+# end of ARP
+
+#
+# IPV4
+#
+# CONFIG_USE_IPV4_ONLY is not set
+CONFIG_LWIP_IP4_REASSEMBLY=y
+CONFIG_LWIP_IP4_FRAG=y
+# CONFIG_LWIP_IP_FORWARD is not set
+CONFIG_IP_REASS_MAX_PBUFS=16
+# end of IPV4
+
+#
+# ICMP
+#
+CONFIG_LWIP_ICMP=y
+CONFIG_LWIP_MULTICAST_PING=y
+CONFIG_LWIP_BROADCAST_PING=y
+# end of ICMP
+
+#
+# LWIP RAW API
+#
+CONFIG_LWIP_RAW_API_EN=y
+CONFIG_LWIP_MAX_RAW_PCBS=16
+# end of LWIP RAW API
+
+#
+# DHCP
+#
+CONFIG_LWIP_DHCP_ENABLE=y
+# CONFIG_LWIP_DHCP_DOES_ARP_CHECK is not set
+# CONFIG_LWIP_DHCP_GET_NTP_SRV is not set
+# CONFIG_LWIP_DHCP_DISABLE_CLIENT_ID is not set
+# CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set
+CONFIG_LWIP_DHCP_OPTIONS_LEN=68
+CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y
+# end of DHCP
+
+#
+# AUTOIP
+#
+# CONFIG_LWIP_AUTOIP is not set
+# end of AUTOIP
+
+#
+# IGMP
+#
+CONFIG_LWIP_IGMP_EN=y
+# end of IGMP
+
+#
+# DNS
+#
+CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y
+# end of DNS
+
+#
+# UDP
+#
+CONFIG_LWIP_MAX_UDP_PCBS=16
+CONFIG_LWIP_UDP_RECVMBOX_SIZE=6
+# CONFIG_LWIP_NETBUF_RECVINFO is not set
+# end of UDP
+
+#
+# TCP
+#
+CONFIG_LWIP_TCP_WND_DEFAULT=5744
+CONFIG_LWIP_TCP_MAXRTX=12
+CONFIG_LWIP_TCP_SYNMAXRTX=12
+CONFIG_LWIP_TCP_QUEUE_OOSEQ=y
+# CONFIG_LWIP_TCP_SACK_OUT is not set
+CONFIG_LWIP_TCP_MSS=1440
+CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5744
+CONFIG_LWIP_TCP_OVERSIZE_MSS=y
+# CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set
+# CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set
+CONFIG_LWIP_TCP_TMR_INTERVAL=250
+CONFIG_LWIP_TCP_MSL=60000
+CONFIG_LWIP_TCP_RTO_TIME=1500
+CONFIG_LWIP_MAX_ACTIVE_TCP=16
+CONFIG_LWIP_MAX_LISTENING_TCP=16
+CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y
+CONFIG_LWIP_TCP_RECVMBOX_SIZE=6
+# end of TCP
+
+#
+# Network_Interface
+#
+# CONFIG_LWIP_NETIF_API is not set
+# CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set
+# end of Network_Interface
+
+#
+# LOOPIF
+#
+CONFIG_LWIP_NETIF_LOOPBACK=y
+CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8
+# end of LOOPIF
+
+#
+# SLIPIF
+#
+# CONFIG_LWIP_SLIP_SUPPORT is not set
+# end of SLIPIF
+
+CONFIG_LWIP_TCPIP_CORE_LOCKING=y
+
+#
+# Socket
+#
+CONFIG_LWIP_MAX_SOCKETS=10
+# CONFIG_LWIP_SO_LINGER is not set
+CONFIG_LWIP_SO_REUSE=y
+CONFIG_LWIP_SO_REUSE_RXTOALL=y
+# end of Socket
+
+# CONFIG_LWIP_STATS is not set
+
+#
+# PPP
+#
+# CONFIG_LWIP_PPP_SUPPORT is not set
+CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3
+CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5
+# end of PPP
+
+#
+# Checksums
+#
+# CONFIG_LWIP_CHECKSUM_CHECK_IP is not set
+# CONFIG_LWIP_CHECKSUM_CHECK_UDP is not set
+CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y
+# end of Checksums
+
+#
+# IPV6
+#
+CONFIG_LWIP_IPV6=y
+# CONFIG_LWIP_IPV6_AUTOCONFIG is not set
+CONFIG_LWIP_IPV6_NUM_ADDRESSES=3
+# CONFIG_LWIP_IPV6_FORWARD is not set
+CONFIG_LWIP_IP6_FRAG=y
+# CONFIG_LWIP_IP6_REASSEMBLY is not set
+# end of IPV6
+
+CONFIG_LWIP_DEBUG=y
+# CONFIG_LWIP_DEBUG_ESP_LOG is not set
+CONFIG_LWIP_NETIF_DEBUG=y
+# CONFIG_LWIP_PBUF_DEBUG is not set
+# CONFIG_LWIP_ETHARP_DEBUG is not set
+# CONFIG_LWIP_API_LIB_DEBUG is not set
+# CONFIG_LWIP_SOCKETS_DEBUG is not set
+# CONFIG_LWIP_IP_DEBUG is not set
+# CONFIG_LWIP_ICMP_DEBUG is not set
+# CONFIG_LWIP_DHCP_STATE_DEBUG is not set
+# CONFIG_LWIP_DHCP_DEBUG is not set
+# CONFIG_LWIP_IP6_DEBUG is not set
+# CONFIG_LWIP_ICMP6_DEBUG is not set
+# CONFIG_LWIP_TCP_DEBUG is not set
+# CONFIG_LWIP_UDP_DEBUG is not set
+# CONFIG_LWIP_SNTP_DEBUG is not set
+# CONFIG_LWIP_DNS_DEBUG is not set
+# end of LWIP Configuration
+
+#
+# Tcp/ip task resource configuration
+#
+CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=3072
+CONFIG_LWIP_TCPIP_TASK_PRIO=6
+CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=32
+# end of Tcp/ip task resource configuration
+
+#
+# lwip port thread Configuration
+#
+CONFIG_LWIP_PORT_USE_RECEIVE_THREAD=y
+CONFIG_LWIP_PORT_RECEIVE_THREAD_STACKSIZE=1024
+CONFIG_LWIP_PORT_RECEIVE_THREAD_PRIORITY=5
+CONFIG_LWIP_PORT_USE_LINK_DETECT_THREAD=y
+CONFIG_LWIP_PORT_LINK_DETECT_STACKSIZE=1024
+CONFIG_LWIP_PORT_LINK_DETECT_PRIORITY=5
+CONFIG_LWIP_PORT_DHCP_THREAD=y
+CONFIG_LWIP_PORT_DHCP_STACKSIZE=2048
+CONFIG_LWIP_PORT_DHCP_PRIORITY=5
+# end of lwip port thread Configuration
+# end of LWIP Freertos Port Configuration
+
+CONFIG_USE_BACKTRACE=y
+# CONFIG_USE_FATFS_0_1_4 is not set
+# CONFIG_USE_SFUD is not set
+# CONFIG_USE_SPIFFS is not set
+# CONFIG_USE_AMP is not set
+CONFIG_USE_LETTER_SHELL=y
+
+#
+# Letter Shell Configuration
+#
+CONFIG_LS_PL011_UART=y
+CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
+# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set
+# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set
+# end of Letter Shell Configuration
+
+CONFIG_USE_TLSF=y
+# CONFIG_USE_SDMMC_CMD is not set
+# CONFIG_USE_CHERRY_USB is not set
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/network/xmac_lwip_test/main.c b/example/network/lwip_startup/main.c
similarity index 70%
rename from example/network/xmac_lwip_test/main.c
rename to example/network/lwip_startup/main.c
index c9b71b6c7b079af6aa3696da14eca1d95916e71f..663fae270a3a0a9be43339ab7a26229118110c8c 100644
--- a/example/network/xmac_lwip_test/main.c
+++ b/example/network/lwip_startup/main.c
@@ -1,22 +1,22 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: main.c
* Date: 2022-02-24 13:42:19
* LastEditTime: 2022-03-21 17:01:57
- * Description: This file is for
- *
- * Modify History:
+ * Description: This file is for running shell and open OS task schedule
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
*/
@@ -30,14 +30,16 @@ int main()
BaseType_t ret = pdPASS;
ret = LSUserShellTask();
- if(ret != pdPASS)
+ if (ret != pdPASS)
+ {
goto FAIL_EXIT;
-
- vTaskStartScheduler(); /* 启动任务,开启调度 */
+ }
+
+ vTaskStartScheduler(); /* 启动任务,开启调度 */
while (1); /* 正常不会执行到这里 */
-
+
FAIL_EXIT:
- printf("failed 0x%x \r\n", ret);
+ printf("Failed 0x%x.\r\n", ret);
return 0;
}
\ No newline at end of file
diff --git a/example/network/xmac_lwip_test/makefile b/example/network/lwip_startup/makefile
similarity index 100%
rename from example/network/xmac_lwip_test/makefile
rename to example/network/lwip_startup/makefile
diff --git a/example/network/lwip_startup/pic/dhcp_test.png b/example/network/lwip_startup/pic/dhcp_test.png
new file mode 100644
index 0000000000000000000000000000000000000000..1c0daf1f46c587e1c117dbc5fb524aa25a2df1ea
Binary files /dev/null and b/example/network/lwip_startup/pic/dhcp_test.png differ
diff --git "a/example/network/xmac_lwip_test/pic/e2000demo\346\235\277\345\205\250\350\262\214.jpg" "b/example/network/lwip_startup/pic/e2000demo\346\235\277\345\205\250\350\262\214.jpg"
similarity index 100%
rename from "example/network/xmac_lwip_test/pic/e2000demo\346\235\277\345\205\250\350\262\214.jpg"
rename to "example/network/lwip_startup/pic/e2000demo\346\235\277\345\205\250\350\262\214.jpg"
diff --git a/example/network/lwip_startup/pic/ipv4_test.png b/example/network/lwip_startup/pic/ipv4_test.png
new file mode 100644
index 0000000000000000000000000000000000000000..813c88d5dd7c450b5a896325bc48023272cf0a4b
Binary files /dev/null and b/example/network/lwip_startup/pic/ipv4_test.png differ
diff --git a/example/network/lwip_startup/pic/ipv6_test.png b/example/network/lwip_startup/pic/ipv6_test.png
new file mode 100644
index 0000000000000000000000000000000000000000..a1373011a0c9d6ca1192f219dd49c997547a317c
Binary files /dev/null and b/example/network/lwip_startup/pic/ipv6_test.png differ
diff --git a/example/network/lwip_startup/pic/lwip_probe.png b/example/network/lwip_startup/pic/lwip_probe.png
new file mode 100644
index 0000000000000000000000000000000000000000..161a2bd48fa544932252825ec705056b83d75734
Binary files /dev/null and b/example/network/lwip_startup/pic/lwip_probe.png differ
diff --git a/example/network/lwip_startup/pic/network_demo_config.png b/example/network/lwip_startup/pic/network_demo_config.png
new file mode 100644
index 0000000000000000000000000000000000000000..3d0898f038d215446cb9c262f13e711f652908f4
Binary files /dev/null and b/example/network/lwip_startup/pic/network_demo_config.png differ
diff --git a/example/network/gmac_lwip_test/pic/ping.png b/example/network/lwip_startup/pic/ping.png
similarity index 100%
rename from example/network/gmac_lwip_test/pic/ping.png
rename to example/network/lwip_startup/pic/ping.png
diff --git a/example/network/xmac_lwip_test/pic/ping_ipv6.png b/example/network/lwip_startup/pic/ping_ipv6.png
similarity index 100%
rename from example/network/xmac_lwip_test/pic/ping_ipv6.png
rename to example/network/lwip_startup/pic/ping_ipv6.png
diff --git a/example/network/xmac_lwip_test/pic/select_demo.png b/example/network/lwip_startup/pic/select_demo.png
similarity index 100%
rename from example/network/xmac_lwip_test/pic/select_demo.png
rename to example/network/lwip_startup/pic/select_demo.png
diff --git a/example/network/xmac_lwip_test/pic/xmac_dhcp_menuconfig.png b/example/network/lwip_startup/pic/xmac_dhcp_menuconfig.png
similarity index 100%
rename from example/network/xmac_lwip_test/pic/xmac_dhcp_menuconfig.png
rename to example/network/lwip_startup/pic/xmac_dhcp_menuconfig.png
diff --git a/example/network/xmac_lwip_test/pic/xmac_ipv4_menuconfig.png b/example/network/lwip_startup/pic/xmac_ipv4_menuconfig.png
similarity index 100%
rename from example/network/xmac_lwip_test/pic/xmac_ipv4_menuconfig.png
rename to example/network/lwip_startup/pic/xmac_ipv4_menuconfig.png
diff --git a/example/network/xmac_lwip_test/pic/xmac_ipv6_menuconfig.png b/example/network/lwip_startup/pic/xmac_ipv6_menuconfig.png
similarity index 100%
rename from example/network/xmac_lwip_test/pic/xmac_ipv6_menuconfig.png
rename to example/network/lwip_startup/pic/xmac_ipv6_menuconfig.png
diff --git a/example/network/xmac_lwip_test/sdkconfig b/example/network/lwip_startup/sdkconfig
similarity index 70%
rename from example/network/xmac_lwip_test/sdkconfig
rename to example/network/lwip_startup/sdkconfig
index 9ee6c5008e326b2075a1eebac6ecb39c42005d05..02d465499e2c9d7df753f43e78b70701fa4d4bcb 100644
--- a/example/network/xmac_lwip_test/sdkconfig
+++ b/example/network/lwip_startup/sdkconfig
@@ -2,19 +2,18 @@
#
# Project Configuration
#
-CONFIG_TARGET_NAME="e2000d_lwip_echo"
+CONFIG_TARGET_NAME="e2000q_freertos_a64"
#
-# E2000 board Configuration
+# Lwip startup test configuration
#
-CONFIG_LWIP_IPV4_TEST=y
-# CONFIG_LWIP_IPV4_DHCP_TEST is not set
# CONFIG_LWIP_IPV6_TEST is not set
+# CONFIG_LWIP_DHCP_TEST is not set
# CONFIG_BOARD_TYPE_B is not set
# CONFIG_BOARD_TYPE_C is not set
# CONFIG_BOARD_TYPE_A is not set
CONFIG_BOARD_TYPE_DEMO=y
-# end of E2000 board Configuration
+# end of Lwip startup test configuration
# end of Project Configuration
#
@@ -89,6 +88,7 @@ CONFIG_FXMAC_PHY_COMMON=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -98,9 +98,9 @@ CONFIG_USE_NEW_LIBC=y
# Building Option
#
# CONFIG_LOG_VERBOS is not set
-# CONFIG_LOG_DEBUG is not set
+CONFIG_LOG_DEBUG=y
# CONFIG_LOG_INFO is not set
-CONFIG_LOG_WARN=y
+# CONFIG_LOG_WARN is not set
# CONFIG_LOG_ERROR is not set
# CONFIG_LOG_NONE is not set
CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y
@@ -129,6 +129,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -165,6 +174,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
CONFIG_FREERTOS_USE_XMAC=y
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -186,12 +196,6 @@ CONFIG_FREERTOS_USE_XMAC=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -203,113 +207,81 @@ CONFIG_FREERTOS_USE_XMAC=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
-# end of Component Configuration
#
-# FreeRTOS Setting
+# Freertos I2c Drivers
#
-CONFIG_USE_LWIP=y
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
#
-# LWIP Configuration
+# Freertos Mio Drivers
#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
#
-# LWIP Port Configuration
-#
-# CONFIG_LWIP_FGMAC is not set
-CONFIG_LWIP_FXMAC=y
-# end of LWIP Port Configuration
-
-CONFIG_LWIP_LOCAL_HOSTNAME="phytium"
-
+# Freertos Timer Drivers
#
-# memory configuration
-#
-# CONFIG_LWIP_USE_MEM_POOL is not set
-CONFIG_LWIP_USE_MEM_HEAP=y
-CONFIG_MEM_SIZE=1
-CONFIG_MEM_ALIGNMENT=64
-# end of memory configuration
-
-#
-# NETWORK_INTERFACE_OPTIONS
-#
-# CONFIG_LWIP_NETIF_API is not set
-# CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set
-# end of NETWORK_INTERFACE_OPTIONS
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
+# end of Component Configuration
#
-# LOOPIF
+# Third-Party Configuration
#
-CONFIG_LWIP_NETIF_LOOPBACK=y
-CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8
-# end of LOOPIF
+CONFIG_USE_LWIP=y
#
-# SLIPIF
+# LWIP Freertos Port Configuration
#
-# CONFIG_LWIP_SLIP_SUPPORT is not set
-# end of SLIPIF
+CONFIG_LWIP_FXMAC=y
+# CONFIG_LWIP_FGMAC is not set
#
-# Pbuf options
+# LWIP Configuration
#
-CONFIG_PBUF_POOL_BUFSIZE=2
-# end of Pbuf options
#
-# Internal Memory Pool Sizes
+# LWIP Port Configuration
#
-CONFIG_PBUF_POOL_SIZE=1
-# end of Internal Memory Pool Sizes
+# CONFIG_LWIP_PORT_DEBUG_EN is not set
+# end of LWIP Port Configuration
-CONFIG_LWIP_MAX_SOCKETS=10
+# CONFIG_LWIP_NO_SYS is not set
+CONFIG_LWIP_LOCAL_HOSTNAME="phytium"
#
-# LWIP RAW API
+# Memory configuration
#
-CONFIG_LWIP_MAX_RAW_PCBS=16
-# end of LWIP RAW API
+# CONFIG_LWIP_USE_MEM_POOL is not set
+CONFIG_LWIP_USE_MEM_HEAP=y
+CONFIG_MEM_SIZE=2
+CONFIG_MEM_ALIGNMENT=64
+# end of Memory configuration
#
-# TCP
+# Pbuf options
#
-CONFIG_LWIP_MAX_ACTIVE_TCP=16
-CONFIG_LWIP_MAX_LISTENING_TCP=16
-CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y
-CONFIG_LWIP_TCP_MAXRTX=12
-CONFIG_LWIP_TCP_SYNMAXRTX=12
-CONFIG_LWIP_TCP_MSS=1440
-CONFIG_LWIP_TCP_TMR_INTERVAL=250
-CONFIG_LWIP_TCP_MSL=60000
-CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5744
-CONFIG_LWIP_TCP_WND_DEFAULT=5744
-CONFIG_LWIP_TCP_RECVMBOX_SIZE=6
-CONFIG_LWIP_TCP_QUEUE_OOSEQ=y
-# CONFIG_LWIP_TCP_SACK_OUT is not set
-CONFIG_LWIP_TCP_OVERSIZE_MSS=y
-# CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set
-# CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set
-# end of TCP
+CONFIG_PBUF_POOL_BUFSIZE=2
+CONFIG_PBUF_POOL_SIZE=1
+# end of Pbuf options
#
-# UDP
+# ARP
#
-CONFIG_LWIP_MAX_UDP_PCBS=16
-CONFIG_LWIP_UDP_RECVMBOX_SIZE=6
-# CONFIG_LWIP_NETBUF_RECVINFO is not set
-# end of UDP
+CONFIG_ARP_QUEUEING_EN=y
+# end of ARP
#
-# IPv4
+# IPV4
#
-CONFIG_USE_IPV4_ONLY=y
+# CONFIG_USE_IPV4_ONLY is not set
CONFIG_LWIP_IP4_REASSEMBLY=y
CONFIG_LWIP_IP4_FRAG=y
# CONFIG_LWIP_IP_FORWARD is not set
CONFIG_IP_REASS_MAX_PBUFS=16
-# end of IPv4
+# end of IPV4
#
# ICMP
@@ -319,16 +291,17 @@ CONFIG_LWIP_MULTICAST_PING=y
CONFIG_LWIP_BROADCAST_PING=y
# end of ICMP
+#
+# LWIP RAW API
+#
+CONFIG_LWIP_RAW_API_EN=y
+CONFIG_LWIP_MAX_RAW_PCBS=16
+# end of LWIP RAW API
+
#
# DHCP
#
# CONFIG_LWIP_DHCP_ENABLE is not set
-# CONFIG_LWIP_DHCP_DOES_ARP_CHECK is not set
-# CONFIG_LWIP_DHCP_GET_NTP_SRV is not set
-# CONFIG_LWIP_DHCP_DISABLE_CLIENT_ID is not set
-# CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set
-CONFIG_LWIP_DHCP_OPTIONS_LEN=68
-CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y
# end of DHCP
#
@@ -337,6 +310,12 @@ CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y
# CONFIG_LWIP_AUTOIP is not set
# end of AUTOIP
+#
+# IGMP
+#
+CONFIG_LWIP_IGMP_EN=y
+# end of IGMP
+
#
# DNS
#
@@ -344,20 +323,65 @@ CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y
# end of DNS
#
-# TCP options
+# UDP
#
+CONFIG_LWIP_MAX_UDP_PCBS=16
+CONFIG_LWIP_UDP_RECVMBOX_SIZE=6
+# CONFIG_LWIP_NETBUF_RECVINFO is not set
+# end of UDP
+
+#
+# TCP
+#
+CONFIG_LWIP_TCP_WND_DEFAULT=5744
+CONFIG_LWIP_TCP_MAXRTX=12
+CONFIG_LWIP_TCP_SYNMAXRTX=12
+CONFIG_LWIP_TCP_QUEUE_OOSEQ=y
+# CONFIG_LWIP_TCP_SACK_OUT is not set
+CONFIG_LWIP_TCP_MSS=1440
+CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5744
+CONFIG_LWIP_TCP_OVERSIZE_MSS=y
+# CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set
+# CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set
+CONFIG_LWIP_TCP_TMR_INTERVAL=250
+CONFIG_LWIP_TCP_MSL=60000
CONFIG_LWIP_TCP_RTO_TIME=1500
-# end of TCP options
+CONFIG_LWIP_MAX_ACTIVE_TCP=16
+CONFIG_LWIP_MAX_LISTENING_TCP=16
+CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y
+CONFIG_LWIP_TCP_RECVMBOX_SIZE=6
+# end of TCP
+
+#
+# Network_Interface
+#
+# CONFIG_LWIP_NETIF_API is not set
+# CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set
+# end of Network_Interface
+
+#
+# LOOPIF
+#
+CONFIG_LWIP_NETIF_LOOPBACK=y
+CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8
+# end of LOOPIF
+
+#
+# SLIPIF
+#
+# CONFIG_LWIP_SLIP_SUPPORT is not set
+# end of SLIPIF
CONFIG_LWIP_TCPIP_CORE_LOCKING=y
#
-# socket
+# Socket
#
+CONFIG_LWIP_MAX_SOCKETS=10
# CONFIG_LWIP_SO_LINGER is not set
CONFIG_LWIP_SO_REUSE=y
CONFIG_LWIP_SO_REUSE_RXTOALL=y
-# end of socket
+# end of Socket
# CONFIG_LWIP_STATS is not set
@@ -365,8 +389,6 @@ CONFIG_LWIP_SO_REUSE_RXTOALL=y
# PPP
#
# CONFIG_LWIP_PPP_SUPPORT is not set
-CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3
-CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5
# end of PPP
#
@@ -378,17 +400,13 @@ CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y
# end of Checksums
#
-# ipv6
+# IPV6
#
-CONFIG_LWIP_IPV6=y
-# CONFIG_LWIP_IPV6_AUTOCONFIG is not set
-CONFIG_LWIP_IPV6_NUM_ADDRESSES=3
-# CONFIG_LWIP_IPV6_FORWARD is not set
-CONFIG_LWIP_IP6_FRAG=y
-# CONFIG_LWIP_IP6_REASSEMBLY is not set
-# end of ipv6
+# CONFIG_LWIP_IPV6 is not set
+# end of IPV6
CONFIG_LWIP_DEBUG=y
+# CONFIG_LWIP_DEBUG_ESP_LOG is not set
CONFIG_LWIP_NETIF_DEBUG=y
# CONFIG_LWIP_PBUF_DEBUG is not set
# CONFIG_LWIP_ETHARP_DEBUG is not set
@@ -396,16 +414,41 @@ CONFIG_LWIP_NETIF_DEBUG=y
# CONFIG_LWIP_SOCKETS_DEBUG is not set
# CONFIG_LWIP_IP_DEBUG is not set
# CONFIG_LWIP_ICMP_DEBUG is not set
+# CONFIG_LWIP_DHCP_STATE_DEBUG is not set
# CONFIG_LWIP_DHCP_DEBUG is not set
# CONFIG_LWIP_IP6_DEBUG is not set
# CONFIG_LWIP_ICMP6_DEBUG is not set
# CONFIG_LWIP_TCP_DEBUG is not set
+# CONFIG_LWIP_UDP_DEBUG is not set
# CONFIG_LWIP_SNTP_DEBUG is not set
# CONFIG_LWIP_DNS_DEBUG is not set
# end of LWIP Configuration
+#
+# Tcp/ip task resource configuration
+#
+CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=3072
+CONFIG_LWIP_TCPIP_TASK_PRIO=6
+CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=32
+# end of Tcp/ip task resource configuration
+
+#
+# lwip port thread Configuration
+#
+CONFIG_LWIP_PORT_USE_RECEIVE_THREAD=y
+CONFIG_LWIP_PORT_RECEIVE_THREAD_STACKSIZE=1024
+CONFIG_LWIP_PORT_RECEIVE_THREAD_PRIORITY=5
+CONFIG_LWIP_PORT_USE_LINK_DETECT_THREAD=y
+CONFIG_LWIP_PORT_LINK_DETECT_STACKSIZE=1024
+CONFIG_LWIP_PORT_LINK_DETECT_PRIORITY=5
+CONFIG_LWIP_PORT_DHCP_THREAD=y
+CONFIG_LWIP_PORT_DHCP_STACKSIZE=2048
+CONFIG_LWIP_PORT_DHCP_PRIORITY=5
+# end of lwip port thread Configuration
+# end of LWIP Freertos Port Configuration
+
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -423,4 +466,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/network/xmac_lwip_test/sdkconfig.h b/example/network/lwip_startup/sdkconfig.h
similarity index 70%
rename from example/network/xmac_lwip_test/sdkconfig.h
rename to example/network/lwip_startup/sdkconfig.h
index ae529bef514c0ae173f6b978a218eea045ef33e8..71611377573e05404513b83c8c28785a9ae09103 100644
--- a/example/network/xmac_lwip_test/sdkconfig.h
+++ b/example/network/lwip_startup/sdkconfig.h
@@ -3,18 +3,17 @@
/* Project Configuration */
-#define CONFIG_TARGET_NAME "e2000d_lwip_echo"
+#define CONFIG_TARGET_NAME "e2000q_freertos_a64"
-/* E2000 board Configuration */
+/* Lwip startup test configuration */
-#define CONFIG_LWIP_IPV4_TEST
-/* CONFIG_LWIP_IPV4_DHCP_TEST is not set */
/* CONFIG_LWIP_IPV6_TEST is not set */
+/* CONFIG_LWIP_DHCP_TEST is not set */
/* CONFIG_BOARD_TYPE_B is not set */
/* CONFIG_BOARD_TYPE_C is not set */
/* CONFIG_BOARD_TYPE_A is not set */
#define CONFIG_BOARD_TYPE_DEMO
-/* end of E2000 board Configuration */
+/* end of Lwip startup test configuration */
/* end of Project Configuration */
/* Standalone Setting */
@@ -81,6 +80,7 @@
/* CONFIG_USE_ADC is not set */
/* CONFIG_USE_PWM is not set */
/* CONFIG_USE_IPC is not set */
+/* CONFIG_USE_MEDIA is not set */
/* end of Components Configuration */
#define CONFIG_USE_NEW_LIBC
/* end of Standalone Setting */
@@ -88,9 +88,9 @@
/* Building Option */
/* CONFIG_LOG_VERBOS is not set */
-/* CONFIG_LOG_DEBUG is not set */
+#define CONFIG_LOG_DEBUG
/* CONFIG_LOG_INFO is not set */
-#define CONFIG_LOG_WARN
+/* CONFIG_LOG_WARN is not set */
/* CONFIG_LOG_ERROR is not set */
/* CONFIG_LOG_NONE is not set */
#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG
@@ -117,6 +117,12 @@
/* Compiler Options */
+/* Cross-Compiler Setting */
+
+#define CONFIG_GCC_OPTIMIZE_LEVEL 0
+/* CONFIG_USE_EXT_COMPILER is not set */
+/* CONFIG_USE_KLIN_SYS is not set */
+/* end of Cross-Compiler Setting */
#define CONFIG_OUTPUT_BINARY
/* end of Compiler Options */
/* end of Building Option */
@@ -146,6 +152,7 @@
/* Freertos Eth Drivers */
#define CONFIG_FREERTOS_USE_XMAC
+/* CONFIG_FREERTOS_USE_GMAC is not set */
/* end of Freertos Eth Drivers */
/* Freertos Gpio Drivers */
@@ -164,11 +171,6 @@
/* CONFIG_FREERTOS_USE_FGDMA is not set */
/* end of Freertos DMA Drivers */
-/* Freertos MMC Drivers */
-
-/* CONFIG_FREERTOS_USE_FSDIO is not set */
-/* end of Freertos MMC Drivers */
-
/* Freertos Adc Drivers */
/* CONFIG_FREERTOS_USE_ADC is not set */
@@ -178,97 +180,68 @@
/* CONFIG_FREERTOS_USE_CAN is not set */
/* end of Freertos Can Drivers */
+
+/* Freertos I2c Drivers */
+
+/* CONFIG_FREERTOS_USE_I2C is not set */
+/* end of Freertos I2c Drivers */
+
+/* Freertos Mio Drivers */
+
+/* CONFIG_FREERTOS_USE_MIO is not set */
+/* end of Freertos Mio Drivers */
+
+/* Freertos Timer Drivers */
+
+/* CONFIG_FREERTOS_USE_TIMER is not set */
+/* end of Freertos Timer Drivers */
/* end of Component Configuration */
-/* FreeRTOS Setting */
+/* Third-Party Configuration */
#define CONFIG_USE_LWIP
+/* LWIP Freertos Port Configuration */
+
+#define CONFIG_LWIP_FXMAC
+/* CONFIG_LWIP_FGMAC is not set */
+
/* LWIP Configuration */
/* LWIP Port Configuration */
-/* CONFIG_LWIP_FGMAC is not set */
-#define CONFIG_LWIP_FXMAC
+/* CONFIG_LWIP_PORT_DEBUG_EN is not set */
/* end of LWIP Port Configuration */
+/* CONFIG_LWIP_NO_SYS is not set */
#define CONFIG_LWIP_LOCAL_HOSTNAME "phytium"
-/* memory configuration */
+/* Memory configuration */
/* CONFIG_LWIP_USE_MEM_POOL is not set */
#define CONFIG_LWIP_USE_MEM_HEAP
-#define CONFIG_MEM_SIZE 1
+#define CONFIG_MEM_SIZE 2
#define CONFIG_MEM_ALIGNMENT 64
-/* end of memory configuration */
-
-/* NETWORK_INTERFACE_OPTIONS */
-
-/* CONFIG_LWIP_NETIF_API is not set */
-/* CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set */
-/* end of NETWORK_INTERFACE_OPTIONS */
-
-/* LOOPIF */
-
-#define CONFIG_LWIP_NETIF_LOOPBACK
-#define CONFIG_LWIP_LOOPBACK_MAX_PBUFS 8
-/* end of LOOPIF */
-
-/* SLIPIF */
-
-/* CONFIG_LWIP_SLIP_SUPPORT is not set */
-/* end of SLIPIF */
+/* end of Memory configuration */
/* Pbuf options */
#define CONFIG_PBUF_POOL_BUFSIZE 2
-/* end of Pbuf options */
-
-/* Internal Memory Pool Sizes */
-
#define CONFIG_PBUF_POOL_SIZE 1
-/* end of Internal Memory Pool Sizes */
-#define CONFIG_LWIP_MAX_SOCKETS 10
-
-/* LWIP RAW API */
-
-#define CONFIG_LWIP_MAX_RAW_PCBS 16
-/* end of LWIP RAW API */
-
-/* TCP */
-
-#define CONFIG_LWIP_MAX_ACTIVE_TCP 16
-#define CONFIG_LWIP_MAX_LISTENING_TCP 16
-#define CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION
-#define CONFIG_LWIP_TCP_MAXRTX 12
-#define CONFIG_LWIP_TCP_SYNMAXRTX 12
-#define CONFIG_LWIP_TCP_MSS 1440
-#define CONFIG_LWIP_TCP_TMR_INTERVAL 250
-#define CONFIG_LWIP_TCP_MSL 60000
-#define CONFIG_LWIP_TCP_SND_BUF_DEFAULT 5744
-#define CONFIG_LWIP_TCP_WND_DEFAULT 5744
-#define CONFIG_LWIP_TCP_RECVMBOX_SIZE 6
-#define CONFIG_LWIP_TCP_QUEUE_OOSEQ
-/* CONFIG_LWIP_TCP_SACK_OUT is not set */
-#define CONFIG_LWIP_TCP_OVERSIZE_MSS
-/* CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set */
-/* CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set */
-/* end of TCP */
+/* end of Pbuf options */
-/* UDP */
+/* ARP */
-#define CONFIG_LWIP_MAX_UDP_PCBS 16
-#define CONFIG_LWIP_UDP_RECVMBOX_SIZE 6
-/* CONFIG_LWIP_NETBUF_RECVINFO is not set */
-/* end of UDP */
+#define CONFIG_ARP_QUEUEING_EN
+/* end of ARP */
-/* IPv4 */
+/* IPV4 */
-#define CONFIG_USE_IPV4_ONLY
+/* CONFIG_USE_IPV4_ONLY is not set */
#define CONFIG_LWIP_IP4_REASSEMBLY
#define CONFIG_LWIP_IP4_FRAG
/* CONFIG_LWIP_IP_FORWARD is not set */
#define CONFIG_IP_REASS_MAX_PBUFS 16
-/* end of IPv4 */
+/* end of IPV4 */
/* ICMP */
@@ -277,15 +250,15 @@
#define CONFIG_LWIP_BROADCAST_PING
/* end of ICMP */
+/* LWIP RAW API */
+
+#define CONFIG_LWIP_RAW_API_EN
+#define CONFIG_LWIP_MAX_RAW_PCBS 16
+/* end of LWIP RAW API */
+
/* DHCP */
/* CONFIG_LWIP_DHCP_ENABLE is not set */
-/* CONFIG_LWIP_DHCP_DOES_ARP_CHECK is not set */
-/* CONFIG_LWIP_DHCP_GET_NTP_SRV is not set */
-/* CONFIG_LWIP_DHCP_DISABLE_CLIENT_ID is not set */
-/* CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set */
-#define CONFIG_LWIP_DHCP_OPTIONS_LEN 68
-#define CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID
/* end of DHCP */
/* AUTOIP */
@@ -293,30 +266,74 @@
/* CONFIG_LWIP_AUTOIP is not set */
/* end of AUTOIP */
+/* IGMP */
+
+#define CONFIG_LWIP_IGMP_EN
+/* end of IGMP */
+
/* DNS */
#define CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES
/* end of DNS */
-/* TCP options */
+/* UDP */
+
+#define CONFIG_LWIP_MAX_UDP_PCBS 16
+#define CONFIG_LWIP_UDP_RECVMBOX_SIZE 6
+/* CONFIG_LWIP_NETBUF_RECVINFO is not set */
+/* end of UDP */
+
+/* TCP */
+#define CONFIG_LWIP_TCP_WND_DEFAULT 5744
+#define CONFIG_LWIP_TCP_MAXRTX 12
+#define CONFIG_LWIP_TCP_SYNMAXRTX 12
+#define CONFIG_LWIP_TCP_QUEUE_OOSEQ
+/* CONFIG_LWIP_TCP_SACK_OUT is not set */
+#define CONFIG_LWIP_TCP_MSS 1440
+#define CONFIG_LWIP_TCP_SND_BUF_DEFAULT 5744
+#define CONFIG_LWIP_TCP_OVERSIZE_MSS
+/* CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set */
+/* CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set */
+#define CONFIG_LWIP_TCP_TMR_INTERVAL 250
+#define CONFIG_LWIP_TCP_MSL 60000
#define CONFIG_LWIP_TCP_RTO_TIME 1500
-/* end of TCP options */
+#define CONFIG_LWIP_MAX_ACTIVE_TCP 16
+#define CONFIG_LWIP_MAX_LISTENING_TCP 16
+#define CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION
+#define CONFIG_LWIP_TCP_RECVMBOX_SIZE 6
+/* end of TCP */
+
+/* Network_Interface */
+
+/* CONFIG_LWIP_NETIF_API is not set */
+/* CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set */
+/* end of Network_Interface */
+
+/* LOOPIF */
+
+#define CONFIG_LWIP_NETIF_LOOPBACK
+#define CONFIG_LWIP_LOOPBACK_MAX_PBUFS 8
+/* end of LOOPIF */
+
+/* SLIPIF */
+
+/* CONFIG_LWIP_SLIP_SUPPORT is not set */
+/* end of SLIPIF */
#define CONFIG_LWIP_TCPIP_CORE_LOCKING
-/* socket */
+/* Socket */
+#define CONFIG_LWIP_MAX_SOCKETS 10
/* CONFIG_LWIP_SO_LINGER is not set */
#define CONFIG_LWIP_SO_REUSE
#define CONFIG_LWIP_SO_REUSE_RXTOALL
-/* end of socket */
+/* end of Socket */
/* CONFIG_LWIP_STATS is not set */
/* PPP */
/* CONFIG_LWIP_PPP_SUPPORT is not set */
-#define CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE 3
-#define CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS 5
/* end of PPP */
/* Checksums */
@@ -326,16 +343,12 @@
#define CONFIG_LWIP_CHECKSUM_CHECK_ICMP
/* end of Checksums */
-/* ipv6 */
+/* IPV6 */
-#define CONFIG_LWIP_IPV6
-/* CONFIG_LWIP_IPV6_AUTOCONFIG is not set */
-#define CONFIG_LWIP_IPV6_NUM_ADDRESSES 3
-/* CONFIG_LWIP_IPV6_FORWARD is not set */
-#define CONFIG_LWIP_IP6_FRAG
-/* CONFIG_LWIP_IP6_REASSEMBLY is not set */
-/* end of ipv6 */
+/* CONFIG_LWIP_IPV6 is not set */
+/* end of IPV6 */
#define CONFIG_LWIP_DEBUG
+/* CONFIG_LWIP_DEBUG_ESP_LOG is not set */
#define CONFIG_LWIP_NETIF_DEBUG
/* CONFIG_LWIP_PBUF_DEBUG is not set */
/* CONFIG_LWIP_ETHARP_DEBUG is not set */
@@ -343,15 +356,38 @@
/* CONFIG_LWIP_SOCKETS_DEBUG is not set */
/* CONFIG_LWIP_IP_DEBUG is not set */
/* CONFIG_LWIP_ICMP_DEBUG is not set */
+/* CONFIG_LWIP_DHCP_STATE_DEBUG is not set */
/* CONFIG_LWIP_DHCP_DEBUG is not set */
/* CONFIG_LWIP_IP6_DEBUG is not set */
/* CONFIG_LWIP_ICMP6_DEBUG is not set */
/* CONFIG_LWIP_TCP_DEBUG is not set */
+/* CONFIG_LWIP_UDP_DEBUG is not set */
/* CONFIG_LWIP_SNTP_DEBUG is not set */
/* CONFIG_LWIP_DNS_DEBUG is not set */
/* end of LWIP Configuration */
+
+/* Tcp/ip task resource configuration */
+
+#define CONFIG_LWIP_TCPIP_TASK_STACK_SIZE 3072
+#define CONFIG_LWIP_TCPIP_TASK_PRIO 6
+#define CONFIG_LWIP_TCPIP_RECVMBOX_SIZE 32
+/* end of Tcp/ip task resource configuration */
+
+/* lwip port thread Configuration */
+
+#define CONFIG_LWIP_PORT_USE_RECEIVE_THREAD
+#define CONFIG_LWIP_PORT_RECEIVE_THREAD_STACKSIZE 1024
+#define CONFIG_LWIP_PORT_RECEIVE_THREAD_PRIORITY 5
+#define CONFIG_LWIP_PORT_USE_LINK_DETECT_THREAD
+#define CONFIG_LWIP_PORT_LINK_DETECT_STACKSIZE 1024
+#define CONFIG_LWIP_PORT_LINK_DETECT_PRIORITY 5
+#define CONFIG_LWIP_PORT_DHCP_THREAD
+#define CONFIG_LWIP_PORT_DHCP_STACKSIZE 2048
+#define CONFIG_LWIP_PORT_DHCP_PRIORITY 5
+/* end of lwip port thread Configuration */
+/* end of LWIP Freertos Port Configuration */
#define CONFIG_USE_BACKTRACE
-/* CONFIG_USE_FATFS is not set */
+/* CONFIG_USE_FATFS_0_1_4 is not set */
/* CONFIG_USE_SFUD is not set */
/* CONFIG_USE_SPIFFS is not set */
/* CONFIG_USE_AMP is not set */
@@ -367,6 +403,28 @@
#define CONFIG_USE_TLSF
/* CONFIG_USE_SDMMC_CMD is not set */
/* CONFIG_USE_CHERRY_USB is not set */
-/* end of FreeRTOS Setting */
+/* end of Third-Party Configuration */
+
+/* Kernel Configuration */
+
+#define CONFIG_FREERTOS_OPTIMIZED_SCHEDULER
+#define CONFIG_FREERTOS_HZ 1000
+#define CONFIG_FREERTOS_MAX_PRIORITIES 32
+#define CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES 11
+#define CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES 11
+#define CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS 1
+#define CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE 1024
+#define CONFIG_FREERTOS_MAX_TASK_NAME_LEN 32
+#define CONFIG_FREERTOS_TIMER_TASK_PRIORITY 1
+#define CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH 2048
+#define CONFIG_FREERTOS_TIMER_QUEUE_LENGTH 10
+#define CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE 0
+#define CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS
+#define CONFIG_FREERTOS_USE_TRACE_FACILITY
+#define CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS
+/* CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set */
+#define CONFIG_FREERTOS_TOTAL_HEAP_SIZE 10240
+#define CONFIG_FREERTOS_TASK_FPU_SUPPORT 1
+/* end of Kernel Configuration */
#endif
diff --git a/example/network/xmac_lwip_test/src/Kconfig b/example/network/lwip_startup/src/Kconfig
similarity index 38%
rename from example/network/xmac_lwip_test/src/Kconfig
rename to example/network/lwip_startup/src/Kconfig
index 52c6ba8b5a0069dcb8096b2e5eb9e6a30c5c7685..f2315ae3d74c59dd40a41510d795462923b0c76a 100644
--- a/example/network/xmac_lwip_test/src/Kconfig
+++ b/example/network/lwip_startup/src/Kconfig
@@ -1,46 +1,17 @@
-menu " E2000 board Configuration"
-
- choice EXAMPLE_IP_MODE
- prompt "choice lwip config"
- help
- Example can multicast IPV4, IPV6, or both.
-
- default LWIP_IPV4_TEST
- config LWIP_IPV4_TEST
- bool "test lwip ipv4"
- config LWIP_IPV4_DHCP_TEST
- bool "test lwip ipv4 and dhcp"
- config LWIP_IPV6_TEST
- bool "test lwip ipv6"
- endchoice
-
- config LWIP_IPV4_TEST
- bool
- select LWIP_ICMP
- select USE_IPV4_ONLY
- select LWIP_NETIF_DEBUG
-
- config LWIP_IPV4_DHCP_TEST
- bool
- select LWIP_DHCP_ENABLE
- select LWIP_ICMP
- select USE_IPV4_ONLY
- select LWIP_NETIF_DEBUG
- # select LWIP_DHCP_DEBUG
+menu " Lwip startup test configuration"
config LWIP_IPV6_TEST
- bool
+ bool "Enable IPv6"
select LWIP_IPV6
- select LWIP_NETIF_DEBUG
-
+ default n
- config TARGET_NAME
- string "Build Target Name"
- default "eth test"
- help
- Build Target name for the demo
+ config LWIP_DHCP_TEST
+ bool "Enable DHCP"
+ select LWIP_DHCP_ENABLE
+ default n
+if TARGET_E2000
choice EVALUATION_BOARD_TYPE
prompt "Select evaluation board"
default BOARD_TYPE_B
@@ -55,5 +26,6 @@ menu " E2000 board Configuration"
config BOARD_TYPE_DEMO
bool "evaluation board demo"
endchoice # BUILD_TARGET_ARCH_TYPE
+endif
endmenu
diff --git a/example/network/lwip_startup/src/e2000_gpio_config.c b/example/network/lwip_startup/src/e2000_gpio_config.c
new file mode 100644
index 0000000000000000000000000000000000000000..6f50a3dd0406a7a365b1fe54aef8967caa6bb10c
--- /dev/null
+++ b/example/network/lwip_startup/src/e2000_gpio_config.c
@@ -0,0 +1,159 @@
+/*
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * All Rights Reserved.
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the Phytium Public License for more details.
+ *
+ *
+ * FilePath: e2000_gpio_config.c
+ * Date: 2022-10-28 14:22:53
+ * LastEditTime: 2022-10-28 14:22:53
+ * Description: This file is for PHY gpio initialization
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2022/08/09 first commit
+ * 1.1 liuzhihong 2023/01/12 driver and application restructure
+ */
+#include "ftypes.h"
+#include "fpinctrl.h"
+#include "fparameters.h"
+#include "sdkconfig.h"
+int FXmacPhyGpioInit(u32 instance_id, u32 interface_type)
+{
+#if defined(CONFIG_TARGET_E2000Q)
+#if defined(CONFIG_BOARD_TYPE_B)
+ if (instance_id == 3)
+ {
+ if (interface_type == PHY_INTERRUPTFACE_RGMII)
+ {
+ FPinSetConfig(FIOPAD_J37, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_rgmii_txd1_0
+ */
+ FPinSetConfig(FIOPAD_J39, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_rgmii_txd1_1
+ */
+ FPinSetConfig(FIOPAD_G41, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_rgmii_rxd1_0
+ */
+ FPinSetConfig(FIOPAD_E43, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_rgmii_rxd1_1
+ */
+ FPinSetConfig(FIOPAD_L43, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_rgmii_tx_ctl1 */
+ FPinSetConfig(FIOPAD_C43, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_rgmii_rxd1_2 */
+ FPinSetConfig(FIOPAD_E41, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_rgmii_rxd1_3 */
+ FPinSetConfig(FIOPAD_L45, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_rgmii_rx_clk1 */
+ FPinSetConfig(FIOPAD_J43, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_rgmii_rx_ctl1 */
+ FPinSetConfig(FIOPAD_J41, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_rgmii_tx_clk1 */
+ FPinSetDelay(FIOPAD_J41_DELAY, FPIN_OUTPUT_DELAY, FPIN_DELAY_FINE_TUNING, FPIN_DELAY_7);
+ FPinSetDelay(FIOPAD_J41_DELAY, FPIN_OUTPUT_DELAY, FPIN_DELAY_COARSE_TUNING, FPIN_DELAY_5);
+ FPinSetDelayEn(FIOPAD_J41_DELAY, FPIN_OUTPUT_DELAY, 1);
+
+ FPinSetConfig(FIOPAD_L39, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_rgmii_txd1_2 */
+ FPinSetConfig(FIOPAD_E37, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_rgmii_txd1_3 */
+ FPinSetConfig(FIOPAD_E35, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_mdc_mac3 */
+ FPinSetConfig(FIOPAD_G35, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_mdio_mac3 */
+ }
+ else if (interface_type == PHY_INTERRUPTFACE_SGMII)
+ {
+ FPinSetConfig(FIOPAD_E35, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_mdc_mac3 */
+ FPinSetConfig(FIOPAD_G35, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_mdio_mac3 */
+ }
+ else
+ {
+ printf("Interface_type 0x%x is not support.\r\n");
+ return -1;
+ }
+ }
+#elif defined(CONFIG_BOARD_TYPE_C)
+ if (instance_id == 1)
+ {
+ FPinSetConfig(FIOPAD_AJ53, FPIN_FUNC3, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_mdc_mac1 */
+ FPinSetConfig(FIOPAD_AL49, FPIN_FUNC3, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_mdio_mac1 */
+ }
+ else if (instance_id == 2)
+ {
+ FPinSetConfig(FIOPAD_E29, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_mdc_mac2 */
+ FPinSetConfig(FIOPAD_G29, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_mdio_mac2 */
+ }
+ else if (instance_id == 3)
+ {
+ FPinSetConfig(FIOPAD_E35, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_mdc_mac3 */
+ FPinSetConfig(FIOPAD_G35, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_mdio_mac3 */
+ }
+ else
+ {
+ printf("Interface_type 0x%x is not support.\r\n");
+ return -1;
+ }
+#endif
+#elif defined(CONFIG_TARGET_E2000D) || defined(CONFIG_TARGET_E2000S)
+
+#if defined(CONFIG_BOARD_TYPE_B)
+ if (instance_id == 3)
+ {
+ if (interface_type == PHY_INTERRUPTFACE_RGMII)
+ {
+ FPinSetConfig(FIOPAD_J33, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_rgmii_txd1_0
+ */
+ FPinSetConfig(FIOPAD_J35, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_rgmii_txd1_1
+ */
+ FPinSetConfig(FIOPAD_G37, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_rgmii_rxd1_0
+ */
+ FPinSetConfig(FIOPAD_E39, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_rgmii_rxd1_1
+ */
+ FPinSetConfig(FIOPAD_L39, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_rgmii_tx_ctl1 */
+ FPinSetConfig(FIOPAD_C39, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_rgmii_rxd1_2 */
+ FPinSetConfig(FIOPAD_E37, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_rgmii_rxd1_3 */
+ FPinSetConfig(FIOPAD_L41, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_rgmii_rx_clk1 */
+ FPinSetConfig(FIOPAD_J39, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_rgmii_rx_ctl1 */
+ FPinSetConfig(FIOPAD_J37, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_rgmii_tx_clk1 */
+ FPinSetDelay(FIOPAD_J37_DELAY, FPIN_OUTPUT_DELAY, FPIN_DELAY_COARSE_TUNING, FPIN_DELAY_5);
+ FPinSetDelay(FIOPAD_J37_DELAY, FPIN_OUTPUT_DELAY, FPIN_DELAY_FINE_TUNING, FPIN_DELAY_7);
+ FPinSetDelayEn(FIOPAD_J37_DELAY, FPIN_OUTPUT_DELAY, 1);
+ FPinSetConfig(FIOPAD_L35, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_rgmii_txd1_2 */
+ FPinSetConfig(FIOPAD_E33, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_rgmii_txd1_3 */
+ FPinSetConfig(FIOPAD_E31, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_mdc_mac3 */
+ FPinSetConfig(FIOPAD_G31, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_mdio_mac3 */
+ }
+ else if (interface_type == PHY_INTERRUPTFACE_SGMII)
+ {
+ FPinSetConfig(FIOPAD_E31, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_mdc_mac3 */
+ FPinSetConfig(FIOPAD_G31, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_mdio_mac3 */
+ }
+ else
+ {
+ printf("Interface_type 0x%x is not support.\r\n");
+ return -1;
+ }
+ }
+#elif defined(CONFIG_BOARD_TYPE_C)
+ if (instance_id == 1)
+ {
+ FPinSetConfig(FIOPAD_AJ49, FPIN_FUNC3, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_mdc_mac1 */
+ FPinSetConfig(FIOPAD_AL45, FPIN_FUNC3, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_mdio_mac1 */
+ }
+ else if (instance_id == 2)
+ {
+ FPinSetConfig(FIOPAD_E25, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_mdc_mac2 */
+ FPinSetConfig(FIOPAD_G25, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_mdio_mac2 */
+ }
+ else if (instance_id == 3)
+ {
+ FPinSetConfig(FIOPAD_E31, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_mdc_mac3 */
+ FPinSetConfig(FIOPAD_G31, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_mdio_mac3 */
+ }
+ else
+ {
+ printf("Interface_type 0x%x is not support.\r\n");
+ return -1;
+ }
+#endif
+
+#endif
+
+
+}
\ No newline at end of file
diff --git a/example/network/lwip_startup/src/lwip_test.c b/example/network/lwip_startup/src/lwip_test.c
new file mode 100644
index 0000000000000000000000000000000000000000..1c6e818d28eacbf9e87e114771877c0c2333857b
--- /dev/null
+++ b/example/network/lwip_startup/src/lwip_test.c
@@ -0,0 +1,310 @@
+/*
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * All Rights Reserved.
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the Phytium Public License for more details.
+ *
+ *
+ * FilePath: lwip_test.c
+ * Date: 2022-06-06 22:57:08
+ * LastEditTime: 2022-06-06 22:57:08
+ * Description: This file is for lwip test example
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2022/08/09 first commit
+ * 1.1 liuzhihong 2023/01/12 driver and application restructure
+ */
+
+#include
+#include
+#include "strto.h"
+#include "sdkconfig.h"
+#include "FreeRTOS.h"
+#include "task.h"
+#include "ftypes.h"
+#include "fassert.h"
+#include "fparameters.h"
+#ifndef SDK_CONFIG_H__
+ #error "Please include sdkconfig.h first"
+#endif
+
+
+#include "lwipopts.h"
+#include "lwip_port.h"
+#include "lwip/ip4_addr.h"
+#include "lwip/init.h"
+#include "netif/ethernet.h"
+#include "lwip/netif.h"
+#include "lwip/tcpip.h"
+#include "lwip/inet.h"
+#include "../src/shell.h"
+
+
+#if defined(CONFIG_TARGET_E2000)
+ extern int FXmacPhyGpioInit(u32 instance_id, u32 interface_type);
+#endif
+
+#if LWIP_IPV6
+ #include "lwip/ip.h"
+ #include "lwip/ip6_addr.h"
+#else
+ #if LWIP_DHCP
+ #include "lwip/dhcp.h"
+ #endif
+#endif
+
+typedef struct
+{
+ const char *ipaddr;
+ const char *gateway;
+ const char *netmask;
+} InputAddress;
+
+typedef struct
+{
+ UserConfig lwip_mac_config;
+ InputAddress input_address;
+ u32 dhcp_en;
+} InputConfig;
+
+static InputConfig input_config = {0};
+
+#if !LWIP_IPV6
+#if LWIP_DHCP
+static TaskHandle_t appTaskCreateHandle = NULL;
+void LwipDhcpTest(struct netif *echo_netif)
+{
+ int mscnt = 0;
+ dhcp_start(echo_netif);
+ printf("LwipDhcpTest is start.\r\n");
+ while (1)
+ {
+ vTaskDelay(DHCP_FINE_TIMER_MSECS / portTICK_RATE_MS);
+ dhcp_fine_tmr();
+ mscnt += DHCP_FINE_TIMER_MSECS;
+ if (mscnt >= DHCP_COARSE_TIMER_SECS * 1000)
+ {
+ dhcp_coarse_tmr();
+ mscnt = 0;
+ }
+ }
+}
+#endif
+#endif
+
+void LwipTestCreate(void *args)
+{
+ FASSERT(args != NULL);
+ struct netif *netif_p = NULL;
+ static boolean init_flag = FALSE;
+ InputConfig *input_conf = (InputConfig *)args;
+ ip_addr_t ipaddr = {0}, netmask = {0}, gw = {0};
+ BaseType_t ret = pdPASS;
+ /* the mac address of the board. this should be unique per board */
+ unsigned char mac_address[6] =
+ {0x98, 0x0e, 0x24, 0x00, 0x11, 0};
+
+ netif_p = pvPortMalloc(sizeof(struct netif)); /* 暂未回收内存 */
+ if (netif_p == NULL)
+ {
+ printf("Malloc netif is error.\r\n");
+ goto exit;
+ }
+ printf("netif_p is %p.\r\n", netif_p);
+ mac_address[5] = input_conf->lwip_mac_config.mac_instance;
+
+
+ /* convert string to a binary address */
+ if (input_conf->input_address.ipaddr)
+ {
+ if (inet_aton(input_conf->input_address.ipaddr, &ipaddr) == 0)
+ {
+ goto failed;
+ }
+ }
+
+ if (input_conf->input_address.gateway)
+ {
+ if (inet_aton(input_conf->input_address.gateway, &gw) == 0)
+ {
+ goto failed;
+ }
+ }
+
+ if (input_conf->input_address.netmask)
+ {
+ if (inet_aton(input_conf->input_address.netmask, &netmask) == 0)
+ {
+ goto failed;
+ }
+ }
+ if (LwipPortGetByName(input_conf->lwip_mac_config.name))
+ {
+ printf("Netif already exists!\r\n");
+ goto failed;
+ }
+ /* 初始化LwIP堆 */
+ if (init_flag == FALSE)
+ {
+ tcpip_init(NULL, NULL);
+ init_flag = TRUE;
+ }
+
+ /* Add network interface to the netif_list, and set it as default */
+ if (!LwipPortAdd(netif_p, &ipaddr, &netmask,
+ &gw, mac_address,
+ (UserConfig *)args, 0))
+ {
+ printf("Error adding N/W interface.\n\r");
+ return ;
+ }
+ printf("LwipPortAdd is over.\n\r");
+
+#if (LWIP_IPV6)
+ netif_p->ip6_autoconfig_enabled = 1;
+ netif_create_ip6_linklocal_address(netif_p, 1);
+ netif_ip6_addr_set_state(netif_p, 0, IP6_ADDR_VALID);
+#endif
+
+ netif_set_default(netif_p);
+
+ if (netif_is_link_up(netif_p))
+ {
+ /* 当netif完全配置好时,必须调用该函数 */
+ netif_set_up(netif_p);
+ if (input_conf->dhcp_en)
+ {
+ LwipPortDhcpSet(netif_p, TRUE);
+ }
+ }
+ else
+ {
+ /* 当netif链接关闭时,必须调用该函数 */
+ netif_set_down(netif_p);
+ }
+
+ printf("Network setup complete.\r\n");
+
+ goto exit ;
+failed:
+ vPortFree(netif_p);
+exit:
+ vTaskDelete(NULL);
+}
+
+void LwipTest(void *args)
+{
+ BaseType_t ret;
+ ret = xTaskCreate((TaskFunction_t)LwipTestCreate, /* 任务入口函数 */
+ (const char *)"LwipTestCreate", /* 任务名字 */
+ (uint16_t)2048, /* 任务栈大小 */
+ (void *)args, /* 任务入口函数参数 */
+ (UBaseType_t)configMAX_PRIORITIES - 1, /* 任务的优先级 */
+ NULL); /* 任务控制块指针 */
+
+ FASSERT_MSG(ret == pdPASS, "LwipTestCreate Task create is failed");
+}
+
+
+
+static int LwipDeviceSet(int argc, char *argv[])
+{
+ u32 id = 0, type = 0;
+ const char *ipaddr = NULL;
+ const char *gateway = NULL;
+ const char *netmask = NULL;
+ memset(&input_config, 0, sizeof(input_config));
+ LWIP_PORT_CONFIG_DEFAULT_INIT(input_config.lwip_mac_config);
+
+ if (!strcmp(argv[1], "probe"))
+ {
+ switch (argc)
+ {
+ case 8:
+ netmask = argv[7];
+ case 7:
+ gateway = argv[6];
+ case 6:
+ ipaddr = argv[5];
+ input_config.input_address.ipaddr = ipaddr;
+ input_config.input_address.gateway = gateway;
+ input_config.input_address.netmask = netmask;
+ case 5:
+ input_config.dhcp_en = (u32)simple_strtoul(argv[4], NULL, 10);
+ case 4:
+ type = (u32)simple_strtoul(argv[3], NULL, 10);
+ case 3:
+ id = (u32)simple_strtoul(argv[2], NULL, 10);
+ break;
+ default:
+ break;
+ }
+ printf("types %d.\r\n", type);
+ printf("id %d.\r\n", id);
+
+#if defined(CONFIG_TARGET_E2000)
+ FXmacPhyGpioInit(id, type);
+#endif
+ input_config.lwip_mac_config.mac_instance = id;
+ input_config.lwip_mac_config.name[0] = 'e';
+ itoa(id, &input_config.lwip_mac_config.name[1], 10);
+ if (type == 0)
+ {
+ input_config.lwip_mac_config.mii_interface = LWIP_PORT_INTERFACE_RGMII;
+ }
+ else
+ {
+ input_config.lwip_mac_config.mii_interface = LWIP_PORT_INTERFACE_SGMII;
+ }
+
+ LwipTest(&input_config);
+ }
+ else if (!strcmp(argv[1], "deinit"))
+ {
+ if (argc <= 1)
+ {
+ printf("Please enter lwip deinit \r\n") ;
+ printf(" -- use name to deinit neitf object \r\n");
+ printf(" -- is netif name \r\n");
+ return -1;
+ }
+ struct netif *netif_p = NULL;
+ netif_p = LwipPortGetByName(argv[2]);
+ if (netif_p == NULL)
+ {
+ printf("netif %s is not invalid.\r\n", argv[2]);
+ return -1;
+ }
+
+ /* close rx thread */
+ vPortEnterCritical();
+ LwipPortStop(netif_p);
+ vPortFree(netif_p);
+ vPortExitCritical();
+ }
+ else
+ {
+ printf("Please enter lwip probe \r\n") ;
+ printf(" -- device id is mac instance number \r\n");
+ printf(" -- interface id is media independent interface , 0 is rgmii ,1 is sgmii \r\n");
+ printf(" -- dhcp_en is dhcp function set ,1 is enable ,0 is disable .But this depends on whether the protocol stack supports it ");
+ printf(" -- Ip address of netif \r\n");
+ printf(" -- Gateway of netif \r\n");
+ printf(" -- Netmask of netif \r\n");
+ printf("Please enter lwip deinit \r\n") ;
+ printf(" -- use name to deinit neitf object \r\n");
+ printf(" -- is netif name \r\n");
+ }
+ return 0;
+}
+
+SHELL_EXPORT_CMD(SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN), lwip, LwipDeviceSet, Setup LWIP device test);
+
diff --git a/example/network/sockets/udp_multicast/Kconfig b/example/network/sockets/udp_multicast/Kconfig
index efe6358f3e8474cd6ad7e71489490ab2ffe2ee5a..ddcb0b6cb1d327686d1c0b9bebb96e15da8a4143 100644
--- a/example/network/sockets/udp_multicast/Kconfig
+++ b/example/network/sockets/udp_multicast/Kconfig
@@ -9,9 +9,8 @@ mainmenu "Phytium FreeRTOS Configuration"
Build Target name for the demo
- if TARGET_E2000
+
source "./src/Kconfig"
- endif
endmenu
diff --git a/example/network/sockets/udp_multicast/README.md b/example/network/sockets/udp_multicast/README.md
index 9853b9bd42cc9542b569d890d3157ed9fd81b77a..09856eeed3e79c885572bcf5fa5d07205aedb81a 100644
--- a/example/network/sockets/udp_multicast/README.md
+++ b/example/network/sockets/udp_multicast/README.md
@@ -123,73 +123,64 @@ bootelf -p 0x90100000
- 启动进入后,根据连接的xmac口,输入指令完成网口初始化
+### 2.4.1 如何进行实验
+- 当开发者配置好程序之后,通过2.3.1/2.3.2的方式将编译好的镜像文件拷贝至开发板中。
+- 以E2000D/Q demo 板为例,开发者输入以下命令则可以初始化网卡:
-#### 2.4.1 基于IPv4下初始化
-
-- 输入以下命令
-
```
-make menuconfig
+lwip probe 0 1 1 192.168.4.10 192.168.4.1 255.255.255.0
```
-- 需将Multicast IP type 选为 IPV4
-
-
+- 命令定义为:"lwip probe "
+- 为mac控制器
+- 为gmii 控制器类型,0 is rgmii ,1 is sgmii
+- 1为使能dhcp 功能,0为关闭dhcp 功能
+- 为ipv4 地址,示例为: 192.168.4.10
+- 为网关 ,示例为: 192.168.4.1
+- 为子网掩码,示例为255.255.255.0
-- 输入以下命令,初始化LWIP网络协议栈, 依次配置ip地址,子网掩码,网关地址和退出时间,运行完成退出后LWIP协议栈会被暂时去使能
+- 效果图如下
-- 关闭IPv6 选项
-
+
-```
-xmac probe [device id] [interface id]
-```
-
-- 其中device id 为控制器id
-- interface id ,0 为rgmii ,1 为sgmii
-
-
-
-
-#### 2.4.2 IPv6下初始化
+#### 2.4.2 基于IPv4下初始化
- 输入以下命令
-
+
```
make menuconfig
```
-- 需将Multicast IP type 选为 IPV6
+- 需将Multicast IP type 选为 IPV4
-
+
-- 关闭仅仅使用IPv4 选项
-
-
+#### 2.4.3 IPv4$IPv6 共存的模式
-- 输入以下命令,初始化LWIP网络协议栈, 依次配置ip地址,子网掩码,网关地址和退出时间,运行完成退出后LWIP协议栈会被暂时去使能
+- 输入以下命令
```
-xmac probe [device id] [interface id]
+make menuconfig
```
-- 其中device id 为控制器id
-- interface id ,0 为rgmii ,1 为sgmii
+- 需将Multicast IP type 选为 IPV4 & IPV6
+
+
-
-
-
+- 关闭仅仅使用IPv4 选项
+
+
-#### 2.4.3 进行multicast 测试
+#### 2.4.4 进行multicast 测试
-- 完成2.4.1 / 2.4.2 之后 ,可以进行multcast 的相关实验 ,以下以ipv6 的实验为例
+- 完成2.4.1 / 2.4.2 /2.4.3 之后 ,可以进行multcast 的相关实验 ,以下以ipv6 的实验为例
- 在串口终端上输入以下指令
```
multicast
@@ -227,7 +218,7 @@ multicast
- 开发者在串口终端上请输入以下命令对控制器进行初始化
```shell
- xmac probe 0 1
+ lwip probe 0 1 1 192.168.4.10 192.168.4.1 255.255.255.0
```
## 4. 修改历史记录
diff --git a/example/network/sockets/udp_multicast/configs/d2000_aarch32_eg_configs b/example/network/sockets/udp_multicast/configs/d2000_aarch32_eg_configs
new file mode 100644
index 0000000000000000000000000000000000000000..1f34331a616d1ebb1017ba46c0f1b824a749049d
--- /dev/null
+++ b/example/network/sockets/udp_multicast/configs/d2000_aarch32_eg_configs
@@ -0,0 +1,514 @@
+
+#
+# Project Configuration
+#
+CONFIG_TARGET_NAME="d2000_freertos_a32"
+
+#
+# Example Configuration
+#
+CONFIG_EXAMPLE_IPV4_V6=y
+# CONFIG_EXAMPLE_IPV4_ONLY is not set
+CONFIG_EXAMPLE_IPV4=y
+CONFIG_EXAMPLE_IPV6=y
+CONFIG_EXAMPLE_MULTICAST_IPV4_ADDR="232.10.12.10"
+CONFIG_EXAMPLE_MULTICAST_IPV6_ADDR="FF02::FD"
+CONFIG_EXAMPLE_PORT=6750
+# CONFIG_EXAMPLE_LOOPBACK is not set
+CONFIG_EXAMPLE_MULTICAST_TTL=1
+# CONFIG_EXAMPLE_MULTICAST_LISTEN_ALL_IF is not set
+CONFIG_EXAMPLE_MULTICAST_LISTEN_DEFAULT_IF=y
+# end of Example Configuration
+# end of Project Configuration
+
+#
+# Standalone Setting
+#
+CONFIG_USE_FREERTOS=y
+
+#
+# Arch Configuration
+#
+CONFIG_TARGET_ARMV8_AARCH32=y
+# CONFIG_TARGET_ARMV8_AARCH64 is not set
+CONFIG_USE_CACHE=y
+# CONFIG_USE_L3CACHE is not set
+CONFIG_USE_MMU=y
+CONFIG_USE_SYS_TICK=y
+CONFIG_USE_AARCH64_L1_TO_AARCH32=y
+# end of Arch Configuration
+
+#
+# Board Configuration
+#
+# CONFIG_TARGET_F2000_4 is not set
+CONFIG_TARGET_D2000=y
+# CONFIG_TARGET_E2000Q is not set
+# CONFIG_TARGET_E2000D is not set
+# CONFIG_TARGET_E2000S is not set
+CONFIG_DEFAULT_DEBUG_PRINT_UART1=y
+# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set
+# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set
+# end of Board Configuration
+
+#
+# Components Configuration
+#
+# CONFIG_USE_SPI is not set
+# CONFIG_USE_QSPI is not set
+CONFIG_USE_GIC=y
+CONFIG_ENABLE_GICV3=y
+CONFIG_USE_SERIAL=y
+
+#
+# Usart Configuration
+#
+CONFIG_ENABLE_Pl011_UART=y
+# end of Usart Configuration
+
+# CONFIG_USE_GPIO is not set
+CONFIG_USE_ETH=y
+
+#
+# Eth Configuration
+#
+# CONFIG_ENABLE_FXMAC is not set
+CONFIG_ENABLE_FGMAC=y
+CONFIG_FGMAC_PHY_COMMON=y
+# CONFIG_FGMAC_PHY_AR803X is not set
+# end of Eth Configuration
+
+# CONFIG_USE_CAN is not set
+# CONFIG_USE_I2C is not set
+# CONFIG_USE_TIMER is not set
+# CONFIG_USE_MIO is not set
+# CONFIG_USE_SDMMC is not set
+# CONFIG_USE_PCIE is not set
+# CONFIG_USE_WDT is not set
+# CONFIG_USE_DMA is not set
+# CONFIG_USE_NAND is not set
+# CONFIG_USE_RTC is not set
+# CONFIG_USE_SATA is not set
+# CONFIG_USE_USB is not set
+# CONFIG_USE_ADC is not set
+# CONFIG_USE_PWM is not set
+# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
+# end of Components Configuration
+
+CONFIG_USE_NEW_LIBC=y
+# end of Standalone Setting
+
+#
+# Building Option
+#
+# CONFIG_LOG_VERBOS is not set
+# CONFIG_LOG_DEBUG is not set
+# CONFIG_LOG_INFO is not set
+# CONFIG_LOG_WARN is not set
+CONFIG_LOG_ERROR=y
+# CONFIG_LOG_NONE is not set
+CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y
+CONFIG_INTERRUPT_ROLE_MASTER=y
+# CONFIG_INTERRUPT_ROLE_SLAVE is not set
+# CONFIG_LOG_EXTRA_INFO is not set
+# CONFIG_BOOTUP_DEBUG_PRINTS is not set
+
+#
+# Linker Options
+#
+CONFIG_AARCH32_RAM_LD=y
+# CONFIG_AARCH64_RAM_LD is not set
+# CONFIG_USER_DEFINED_LD is not set
+CONFIG_LINK_SCRIPT_ROM=y
+CONFIG_ROM_START_UP_ADDR=0x80100000
+CONFIG_ROM_SIZE_MB=1
+CONFIG_LINK_SCRIPT_RAM=y
+CONFIG_RAM_START_UP_ADDR=0x80500000
+CONFIG_RAM_SIZE_MB=64
+CONFIG_HEAP_SIZE=1
+CONFIG_SVC_STACK_SIZE=0x1000
+CONFIG_SYS_STACK_SIZE=0x1000
+CONFIG_IRQ_STACK_SIZE=0x1000
+CONFIG_ABORT_STACK_SIZE=0x1000
+CONFIG_FIQ_STACK_SIZE=0x1000
+CONFIG_UNDEF_STACK_SIZE=0x1000
+# end of Linker Options
+
+#
+# Compiler Options
+#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
+CONFIG_OUTPUT_BINARY=y
+# end of Compiler Options
+# end of Building Option
+
+#
+# Component Configuration
+#
+
+#
+# Freertos Uart Drivers
+#
+CONFIG_FREERTOS_USE_UART=y
+# end of Freertos Uart Drivers
+
+#
+# Freertos Pwm Drivers
+#
+# CONFIG_FREERTOS_USE_PWM is not set
+# end of Freertos Pwm Drivers
+
+#
+# Freertos Qspi Drivers
+#
+# CONFIG_FREERTOS_USE_QSPI is not set
+# end of Freertos Qspi Drivers
+
+#
+# Freertos Wdt Drivers
+#
+# CONFIG_FREERTOS_USE_WDT is not set
+# end of Freertos Wdt Drivers
+
+#
+# Freertos Eth Drivers
+#
+# CONFIG_FREERTOS_USE_XMAC is not set
+CONFIG_FREERTOS_USE_GMAC=y
+# end of Freertos Eth Drivers
+
+#
+# Freertos Gpio Drivers
+#
+# CONFIG_FREERTOS_USE_GPIO is not set
+# end of Freertos Gpio Drivers
+
+#
+# Freertos Spim Drivers
+#
+# CONFIG_FREERTOS_USE_FSPIM is not set
+# end of Freertos Spim Drivers
+
+#
+# Freertos DMA Drivers
+#
+# CONFIG_FREERTOS_USE_FDDMA is not set
+# CONFIG_FREERTOS_USE_FGDMA is not set
+# end of Freertos DMA Drivers
+
+#
+# Freertos Adc Drivers
+#
+# CONFIG_FREERTOS_USE_ADC is not set
+# end of Freertos Adc Drivers
+
+#
+# Freertos Can Drivers
+#
+# CONFIG_FREERTOS_USE_CAN is not set
+# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
+# end of Component Configuration
+
+#
+# Third-Party Configuration
+#
+CONFIG_USE_LWIP=y
+
+#
+# LWIP Freertos Port Configuration
+#
+# CONFIG_LWIP_FXMAC is not set
+CONFIG_LWIP_FGMAC=y
+
+#
+# LWIP Configuration
+#
+
+#
+# LWIP Port Configuration
+#
+# CONFIG_LWIP_PORT_DEBUG_EN is not set
+# end of LWIP Port Configuration
+
+# CONFIG_LWIP_NO_SYS is not set
+CONFIG_LWIP_LOCAL_HOSTNAME="phytium"
+
+#
+# Memory configuration
+#
+# CONFIG_LWIP_USE_MEM_POOL is not set
+CONFIG_LWIP_USE_MEM_HEAP=y
+CONFIG_MEM_SIZE=2
+CONFIG_MEM_ALIGNMENT=64
+# end of Memory configuration
+
+#
+# Pbuf options
+#
+CONFIG_PBUF_POOL_BUFSIZE=2
+CONFIG_PBUF_POOL_SIZE=1
+# end of Pbuf options
+
+#
+# ARP
+#
+CONFIG_ARP_QUEUEING_EN=y
+# end of ARP
+
+#
+# IPV4
+#
+# CONFIG_USE_IPV4_ONLY is not set
+CONFIG_LWIP_IP4_REASSEMBLY=y
+CONFIG_LWIP_IP4_FRAG=y
+# CONFIG_LWIP_IP_FORWARD is not set
+CONFIG_IP_REASS_MAX_PBUFS=16
+# end of IPV4
+
+#
+# ICMP
+#
+CONFIG_LWIP_ICMP=y
+CONFIG_LWIP_MULTICAST_PING=y
+CONFIG_LWIP_BROADCAST_PING=y
+# end of ICMP
+
+#
+# LWIP RAW API
+#
+CONFIG_LWIP_RAW_API_EN=y
+CONFIG_LWIP_MAX_RAW_PCBS=16
+# end of LWIP RAW API
+
+#
+# DHCP
+#
+CONFIG_LWIP_DHCP_ENABLE=y
+# CONFIG_LWIP_DHCP_DOES_ARP_CHECK is not set
+# CONFIG_LWIP_DHCP_GET_NTP_SRV is not set
+# CONFIG_LWIP_DHCP_DISABLE_CLIENT_ID is not set
+# CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set
+CONFIG_LWIP_DHCP_OPTIONS_LEN=68
+CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y
+# end of DHCP
+
+#
+# AUTOIP
+#
+# CONFIG_LWIP_AUTOIP is not set
+# end of AUTOIP
+
+#
+# IGMP
+#
+CONFIG_LWIP_IGMP_EN=y
+# end of IGMP
+
+#
+# DNS
+#
+CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y
+# end of DNS
+
+#
+# UDP
+#
+CONFIG_LWIP_MAX_UDP_PCBS=16
+CONFIG_LWIP_UDP_RECVMBOX_SIZE=6
+# CONFIG_LWIP_NETBUF_RECVINFO is not set
+# end of UDP
+
+#
+# TCP
+#
+CONFIG_LWIP_TCP_WND_DEFAULT=5744
+CONFIG_LWIP_TCP_MAXRTX=12
+CONFIG_LWIP_TCP_SYNMAXRTX=12
+CONFIG_LWIP_TCP_QUEUE_OOSEQ=y
+# CONFIG_LWIP_TCP_SACK_OUT is not set
+CONFIG_LWIP_TCP_MSS=1440
+CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5744
+CONFIG_LWIP_TCP_OVERSIZE_MSS=y
+# CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set
+# CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set
+CONFIG_LWIP_TCP_TMR_INTERVAL=250
+CONFIG_LWIP_TCP_MSL=60000
+CONFIG_LWIP_TCP_RTO_TIME=1500
+CONFIG_LWIP_MAX_ACTIVE_TCP=16
+CONFIG_LWIP_MAX_LISTENING_TCP=16
+CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y
+CONFIG_LWIP_TCP_RECVMBOX_SIZE=6
+# end of TCP
+
+#
+# Network_Interface
+#
+# CONFIG_LWIP_NETIF_API is not set
+# CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set
+# end of Network_Interface
+
+#
+# LOOPIF
+#
+CONFIG_LWIP_NETIF_LOOPBACK=y
+CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8
+# end of LOOPIF
+
+#
+# SLIPIF
+#
+# CONFIG_LWIP_SLIP_SUPPORT is not set
+# end of SLIPIF
+
+CONFIG_LWIP_TCPIP_CORE_LOCKING=y
+
+#
+# Socket
+#
+CONFIG_LWIP_MAX_SOCKETS=10
+# CONFIG_LWIP_SO_LINGER is not set
+CONFIG_LWIP_SO_REUSE=y
+CONFIG_LWIP_SO_REUSE_RXTOALL=y
+# end of Socket
+
+# CONFIG_LWIP_STATS is not set
+
+#
+# PPP
+#
+# CONFIG_LWIP_PPP_SUPPORT is not set
+CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3
+CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5
+# end of PPP
+
+#
+# Checksums
+#
+# CONFIG_LWIP_CHECKSUM_CHECK_IP is not set
+# CONFIG_LWIP_CHECKSUM_CHECK_UDP is not set
+CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y
+# end of Checksums
+
+#
+# IPV6
+#
+CONFIG_LWIP_IPV6=y
+# CONFIG_LWIP_IPV6_AUTOCONFIG is not set
+CONFIG_LWIP_IPV6_NUM_ADDRESSES=3
+# CONFIG_LWIP_IPV6_FORWARD is not set
+CONFIG_LWIP_IP6_FRAG=y
+# CONFIG_LWIP_IP6_REASSEMBLY is not set
+# end of IPV6
+
+CONFIG_LWIP_DEBUG=y
+# CONFIG_LWIP_DEBUG_ESP_LOG is not set
+CONFIG_LWIP_NETIF_DEBUG=y
+# CONFIG_LWIP_PBUF_DEBUG is not set
+# CONFIG_LWIP_ETHARP_DEBUG is not set
+# CONFIG_LWIP_API_LIB_DEBUG is not set
+# CONFIG_LWIP_SOCKETS_DEBUG is not set
+# CONFIG_LWIP_IP_DEBUG is not set
+# CONFIG_LWIP_ICMP_DEBUG is not set
+# CONFIG_LWIP_DHCP_STATE_DEBUG is not set
+# CONFIG_LWIP_DHCP_DEBUG is not set
+# CONFIG_LWIP_IP6_DEBUG is not set
+# CONFIG_LWIP_ICMP6_DEBUG is not set
+# CONFIG_LWIP_TCP_DEBUG is not set
+# CONFIG_LWIP_UDP_DEBUG is not set
+# CONFIG_LWIP_SNTP_DEBUG is not set
+# CONFIG_LWIP_DNS_DEBUG is not set
+# end of LWIP Configuration
+
+#
+# Tcp/ip task resource configuration
+#
+CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=3072
+CONFIG_LWIP_TCPIP_TASK_PRIO=6
+CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=32
+# end of Tcp/ip task resource configuration
+
+#
+# lwip port thread Configuration
+#
+CONFIG_LWIP_PORT_USE_RECEIVE_THREAD=y
+CONFIG_LWIP_PORT_RECEIVE_THREAD_STACKSIZE=1024
+CONFIG_LWIP_PORT_RECEIVE_THREAD_PRIORITY=5
+CONFIG_LWIP_PORT_USE_LINK_DETECT_THREAD=y
+CONFIG_LWIP_PORT_LINK_DETECT_STACKSIZE=1024
+CONFIG_LWIP_PORT_LINK_DETECT_PRIORITY=5
+CONFIG_LWIP_PORT_DHCP_THREAD=y
+CONFIG_LWIP_PORT_DHCP_STACKSIZE=2048
+CONFIG_LWIP_PORT_DHCP_PRIORITY=5
+# end of lwip port thread Configuration
+# end of LWIP Freertos Port Configuration
+
+CONFIG_USE_BACKTRACE=y
+# CONFIG_USE_FATFS_0_1_4 is not set
+# CONFIG_USE_SFUD is not set
+# CONFIG_USE_SPIFFS is not set
+# CONFIG_USE_AMP is not set
+CONFIG_USE_LETTER_SHELL=y
+
+#
+# Letter Shell Configuration
+#
+CONFIG_LS_PL011_UART=y
+CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
+# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set
+# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set
+# end of Letter Shell Configuration
+
+CONFIG_USE_TLSF=y
+# CONFIG_USE_SDMMC_CMD is not set
+# CONFIG_USE_CHERRY_USB is not set
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/network/sockets/udp_multicast/configs/d2000_aarch64_eg_configs b/example/network/sockets/udp_multicast/configs/d2000_aarch64_eg_configs
new file mode 100644
index 0000000000000000000000000000000000000000..df0279b9a43c095cc934f51ea5666ff05204b527
--- /dev/null
+++ b/example/network/sockets/udp_multicast/configs/d2000_aarch64_eg_configs
@@ -0,0 +1,510 @@
+
+#
+# Project Configuration
+#
+CONFIG_TARGET_NAME="d2000_freertos_a64"
+
+#
+# Example Configuration
+#
+CONFIG_EXAMPLE_IPV4_V6=y
+# CONFIG_EXAMPLE_IPV4_ONLY is not set
+CONFIG_EXAMPLE_IPV4=y
+CONFIG_EXAMPLE_IPV6=y
+CONFIG_EXAMPLE_MULTICAST_IPV4_ADDR="232.10.12.10"
+CONFIG_EXAMPLE_MULTICAST_IPV6_ADDR="FF02::FD"
+CONFIG_EXAMPLE_PORT=6750
+# CONFIG_EXAMPLE_LOOPBACK is not set
+CONFIG_EXAMPLE_MULTICAST_TTL=1
+# CONFIG_EXAMPLE_MULTICAST_LISTEN_ALL_IF is not set
+CONFIG_EXAMPLE_MULTICAST_LISTEN_DEFAULT_IF=y
+# end of Example Configuration
+# end of Project Configuration
+
+#
+# Standalone Setting
+#
+CONFIG_USE_FREERTOS=y
+
+#
+# Arch Configuration
+#
+# CONFIG_TARGET_ARMV8_AARCH32 is not set
+CONFIG_TARGET_ARMV8_AARCH64=y
+CONFIG_USE_CACHE=y
+# CONFIG_USE_L3CACHE is not set
+CONFIG_USE_MMU=y
+CONFIG_USE_SYS_TICK=y
+# CONFIG_MMU_DEBUG_PRINTS is not set
+# end of Arch Configuration
+
+#
+# Board Configuration
+#
+# CONFIG_TARGET_F2000_4 is not set
+CONFIG_TARGET_D2000=y
+# CONFIG_TARGET_E2000Q is not set
+# CONFIG_TARGET_E2000D is not set
+# CONFIG_TARGET_E2000S is not set
+CONFIG_DEFAULT_DEBUG_PRINT_UART1=y
+# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set
+# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set
+# end of Board Configuration
+
+#
+# Components Configuration
+#
+# CONFIG_USE_SPI is not set
+# CONFIG_USE_QSPI is not set
+CONFIG_USE_GIC=y
+CONFIG_ENABLE_GICV3=y
+CONFIG_USE_SERIAL=y
+
+#
+# Usart Configuration
+#
+CONFIG_ENABLE_Pl011_UART=y
+# end of Usart Configuration
+
+# CONFIG_USE_GPIO is not set
+CONFIG_USE_ETH=y
+
+#
+# Eth Configuration
+#
+# CONFIG_ENABLE_FXMAC is not set
+CONFIG_ENABLE_FGMAC=y
+CONFIG_FGMAC_PHY_COMMON=y
+# CONFIG_FGMAC_PHY_AR803X is not set
+# end of Eth Configuration
+
+# CONFIG_USE_CAN is not set
+# CONFIG_USE_I2C is not set
+# CONFIG_USE_TIMER is not set
+# CONFIG_USE_MIO is not set
+# CONFIG_USE_SDMMC is not set
+# CONFIG_USE_PCIE is not set
+# CONFIG_USE_WDT is not set
+# CONFIG_USE_DMA is not set
+# CONFIG_USE_NAND is not set
+# CONFIG_USE_RTC is not set
+# CONFIG_USE_SATA is not set
+# CONFIG_USE_USB is not set
+# CONFIG_USE_ADC is not set
+# CONFIG_USE_PWM is not set
+# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
+# end of Components Configuration
+
+CONFIG_USE_NEW_LIBC=y
+# end of Standalone Setting
+
+#
+# Building Option
+#
+# CONFIG_LOG_VERBOS is not set
+# CONFIG_LOG_DEBUG is not set
+# CONFIG_LOG_INFO is not set
+# CONFIG_LOG_WARN is not set
+CONFIG_LOG_ERROR=y
+# CONFIG_LOG_NONE is not set
+CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y
+CONFIG_INTERRUPT_ROLE_MASTER=y
+# CONFIG_INTERRUPT_ROLE_SLAVE is not set
+# CONFIG_LOG_EXTRA_INFO is not set
+# CONFIG_BOOTUP_DEBUG_PRINTS is not set
+
+#
+# Linker Options
+#
+# CONFIG_AARCH32_RAM_LD is not set
+CONFIG_AARCH64_RAM_LD=y
+# CONFIG_USER_DEFINED_LD is not set
+CONFIG_LINK_SCRIPT_ROM=y
+CONFIG_ROM_START_UP_ADDR=0x80100000
+CONFIG_ROM_SIZE_MB=1
+CONFIG_LINK_SCRIPT_RAM=y
+CONFIG_RAM_START_UP_ADDR=0x80500000
+CONFIG_RAM_SIZE_MB=64
+CONFIG_HEAP_SIZE=1
+CONFIG_STACK_SIZE=0x100000
+CONFIG_FPU_STACK_SIZE=0x1000
+# end of Linker Options
+
+#
+# Compiler Options
+#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
+CONFIG_OUTPUT_BINARY=y
+# end of Compiler Options
+# end of Building Option
+
+#
+# Component Configuration
+#
+
+#
+# Freertos Uart Drivers
+#
+CONFIG_FREERTOS_USE_UART=y
+# end of Freertos Uart Drivers
+
+#
+# Freertos Pwm Drivers
+#
+# CONFIG_FREERTOS_USE_PWM is not set
+# end of Freertos Pwm Drivers
+
+#
+# Freertos Qspi Drivers
+#
+# CONFIG_FREERTOS_USE_QSPI is not set
+# end of Freertos Qspi Drivers
+
+#
+# Freertos Wdt Drivers
+#
+# CONFIG_FREERTOS_USE_WDT is not set
+# end of Freertos Wdt Drivers
+
+#
+# Freertos Eth Drivers
+#
+# CONFIG_FREERTOS_USE_XMAC is not set
+CONFIG_FREERTOS_USE_GMAC=y
+# end of Freertos Eth Drivers
+
+#
+# Freertos Gpio Drivers
+#
+# CONFIG_FREERTOS_USE_GPIO is not set
+# end of Freertos Gpio Drivers
+
+#
+# Freertos Spim Drivers
+#
+# CONFIG_FREERTOS_USE_FSPIM is not set
+# end of Freertos Spim Drivers
+
+#
+# Freertos DMA Drivers
+#
+# CONFIG_FREERTOS_USE_FDDMA is not set
+# CONFIG_FREERTOS_USE_FGDMA is not set
+# end of Freertos DMA Drivers
+
+#
+# Freertos Adc Drivers
+#
+# CONFIG_FREERTOS_USE_ADC is not set
+# end of Freertos Adc Drivers
+
+#
+# Freertos Can Drivers
+#
+# CONFIG_FREERTOS_USE_CAN is not set
+# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
+# end of Component Configuration
+
+#
+# Third-Party Configuration
+#
+CONFIG_USE_LWIP=y
+
+#
+# LWIP Freertos Port Configuration
+#
+# CONFIG_LWIP_FXMAC is not set
+CONFIG_LWIP_FGMAC=y
+
+#
+# LWIP Configuration
+#
+
+#
+# LWIP Port Configuration
+#
+# CONFIG_LWIP_PORT_DEBUG_EN is not set
+# end of LWIP Port Configuration
+
+# CONFIG_LWIP_NO_SYS is not set
+CONFIG_LWIP_LOCAL_HOSTNAME="phytium"
+
+#
+# Memory configuration
+#
+# CONFIG_LWIP_USE_MEM_POOL is not set
+CONFIG_LWIP_USE_MEM_HEAP=y
+CONFIG_MEM_SIZE=2
+CONFIG_MEM_ALIGNMENT=64
+# end of Memory configuration
+
+#
+# Pbuf options
+#
+CONFIG_PBUF_POOL_BUFSIZE=2
+CONFIG_PBUF_POOL_SIZE=1
+# end of Pbuf options
+
+#
+# ARP
+#
+CONFIG_ARP_QUEUEING_EN=y
+# end of ARP
+
+#
+# IPV4
+#
+# CONFIG_USE_IPV4_ONLY is not set
+CONFIG_LWIP_IP4_REASSEMBLY=y
+CONFIG_LWIP_IP4_FRAG=y
+# CONFIG_LWIP_IP_FORWARD is not set
+CONFIG_IP_REASS_MAX_PBUFS=16
+# end of IPV4
+
+#
+# ICMP
+#
+CONFIG_LWIP_ICMP=y
+CONFIG_LWIP_MULTICAST_PING=y
+CONFIG_LWIP_BROADCAST_PING=y
+# end of ICMP
+
+#
+# LWIP RAW API
+#
+CONFIG_LWIP_RAW_API_EN=y
+CONFIG_LWIP_MAX_RAW_PCBS=16
+# end of LWIP RAW API
+
+#
+# DHCP
+#
+CONFIG_LWIP_DHCP_ENABLE=y
+# CONFIG_LWIP_DHCP_DOES_ARP_CHECK is not set
+# CONFIG_LWIP_DHCP_GET_NTP_SRV is not set
+# CONFIG_LWIP_DHCP_DISABLE_CLIENT_ID is not set
+# CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set
+CONFIG_LWIP_DHCP_OPTIONS_LEN=68
+CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y
+# end of DHCP
+
+#
+# AUTOIP
+#
+# CONFIG_LWIP_AUTOIP is not set
+# end of AUTOIP
+
+#
+# IGMP
+#
+CONFIG_LWIP_IGMP_EN=y
+# end of IGMP
+
+#
+# DNS
+#
+CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y
+# end of DNS
+
+#
+# UDP
+#
+CONFIG_LWIP_MAX_UDP_PCBS=16
+CONFIG_LWIP_UDP_RECVMBOX_SIZE=6
+# CONFIG_LWIP_NETBUF_RECVINFO is not set
+# end of UDP
+
+#
+# TCP
+#
+CONFIG_LWIP_TCP_WND_DEFAULT=5744
+CONFIG_LWIP_TCP_MAXRTX=12
+CONFIG_LWIP_TCP_SYNMAXRTX=12
+CONFIG_LWIP_TCP_QUEUE_OOSEQ=y
+# CONFIG_LWIP_TCP_SACK_OUT is not set
+CONFIG_LWIP_TCP_MSS=1440
+CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5744
+CONFIG_LWIP_TCP_OVERSIZE_MSS=y
+# CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set
+# CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set
+CONFIG_LWIP_TCP_TMR_INTERVAL=250
+CONFIG_LWIP_TCP_MSL=60000
+CONFIG_LWIP_TCP_RTO_TIME=1500
+CONFIG_LWIP_MAX_ACTIVE_TCP=16
+CONFIG_LWIP_MAX_LISTENING_TCP=16
+CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y
+CONFIG_LWIP_TCP_RECVMBOX_SIZE=6
+# end of TCP
+
+#
+# Network_Interface
+#
+# CONFIG_LWIP_NETIF_API is not set
+# CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set
+# end of Network_Interface
+
+#
+# LOOPIF
+#
+CONFIG_LWIP_NETIF_LOOPBACK=y
+CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8
+# end of LOOPIF
+
+#
+# SLIPIF
+#
+# CONFIG_LWIP_SLIP_SUPPORT is not set
+# end of SLIPIF
+
+CONFIG_LWIP_TCPIP_CORE_LOCKING=y
+
+#
+# Socket
+#
+CONFIG_LWIP_MAX_SOCKETS=10
+# CONFIG_LWIP_SO_LINGER is not set
+CONFIG_LWIP_SO_REUSE=y
+CONFIG_LWIP_SO_REUSE_RXTOALL=y
+# end of Socket
+
+# CONFIG_LWIP_STATS is not set
+
+#
+# PPP
+#
+# CONFIG_LWIP_PPP_SUPPORT is not set
+CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3
+CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5
+# end of PPP
+
+#
+# Checksums
+#
+# CONFIG_LWIP_CHECKSUM_CHECK_IP is not set
+# CONFIG_LWIP_CHECKSUM_CHECK_UDP is not set
+CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y
+# end of Checksums
+
+#
+# IPV6
+#
+CONFIG_LWIP_IPV6=y
+# CONFIG_LWIP_IPV6_AUTOCONFIG is not set
+CONFIG_LWIP_IPV6_NUM_ADDRESSES=3
+# CONFIG_LWIP_IPV6_FORWARD is not set
+CONFIG_LWIP_IP6_FRAG=y
+# CONFIG_LWIP_IP6_REASSEMBLY is not set
+# end of IPV6
+
+CONFIG_LWIP_DEBUG=y
+# CONFIG_LWIP_DEBUG_ESP_LOG is not set
+CONFIG_LWIP_NETIF_DEBUG=y
+# CONFIG_LWIP_PBUF_DEBUG is not set
+# CONFIG_LWIP_ETHARP_DEBUG is not set
+# CONFIG_LWIP_API_LIB_DEBUG is not set
+# CONFIG_LWIP_SOCKETS_DEBUG is not set
+# CONFIG_LWIP_IP_DEBUG is not set
+# CONFIG_LWIP_ICMP_DEBUG is not set
+# CONFIG_LWIP_DHCP_STATE_DEBUG is not set
+# CONFIG_LWIP_DHCP_DEBUG is not set
+# CONFIG_LWIP_IP6_DEBUG is not set
+# CONFIG_LWIP_ICMP6_DEBUG is not set
+# CONFIG_LWIP_TCP_DEBUG is not set
+# CONFIG_LWIP_UDP_DEBUG is not set
+# CONFIG_LWIP_SNTP_DEBUG is not set
+# CONFIG_LWIP_DNS_DEBUG is not set
+# end of LWIP Configuration
+
+#
+# Tcp/ip task resource configuration
+#
+CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=3072
+CONFIG_LWIP_TCPIP_TASK_PRIO=6
+CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=32
+# end of Tcp/ip task resource configuration
+
+#
+# lwip port thread Configuration
+#
+CONFIG_LWIP_PORT_USE_RECEIVE_THREAD=y
+CONFIG_LWIP_PORT_RECEIVE_THREAD_STACKSIZE=1024
+CONFIG_LWIP_PORT_RECEIVE_THREAD_PRIORITY=5
+CONFIG_LWIP_PORT_USE_LINK_DETECT_THREAD=y
+CONFIG_LWIP_PORT_LINK_DETECT_STACKSIZE=1024
+CONFIG_LWIP_PORT_LINK_DETECT_PRIORITY=5
+CONFIG_LWIP_PORT_DHCP_THREAD=y
+CONFIG_LWIP_PORT_DHCP_STACKSIZE=2048
+CONFIG_LWIP_PORT_DHCP_PRIORITY=5
+# end of lwip port thread Configuration
+# end of LWIP Freertos Port Configuration
+
+CONFIG_USE_BACKTRACE=y
+# CONFIG_USE_FATFS_0_1_4 is not set
+# CONFIG_USE_SFUD is not set
+# CONFIG_USE_SPIFFS is not set
+# CONFIG_USE_AMP is not set
+CONFIG_USE_LETTER_SHELL=y
+
+#
+# Letter Shell Configuration
+#
+CONFIG_LS_PL011_UART=y
+CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
+# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set
+# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set
+# end of Letter Shell Configuration
+
+CONFIG_USE_TLSF=y
+# CONFIG_USE_SDMMC_CMD is not set
+# CONFIG_USE_CHERRY_USB is not set
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/network/sockets/udp_multicast/configs/e2000d_aarch32_eg_configs b/example/network/sockets/udp_multicast/configs/e2000d_aarch32_eg_configs
index 6417f2c5c476931ee6317cf7dcaffab3b2f0d8de..b353d2aa762d6e2cdf41150e4a4b87417139b6cd 100644
--- a/example/network/sockets/udp_multicast/configs/e2000d_aarch32_eg_configs
+++ b/example/network/sockets/udp_multicast/configs/e2000d_aarch32_eg_configs
@@ -2,15 +2,17 @@
#
# Project Configuration
#
-CONFIG_TARGET_NAME="e2000_lwip_multicast"
+CONFIG_TARGET_NAME="e2000d_freertos_a32"
#
# Example Configuration
#
-CONFIG_EXAMPLE_IPV4_ONLY=y
-# CONFIG_EXAMPLE_IPV6_ONLY is not set
+CONFIG_EXAMPLE_IPV4_V6=y
+# CONFIG_EXAMPLE_IPV4_ONLY is not set
CONFIG_EXAMPLE_IPV4=y
+CONFIG_EXAMPLE_IPV6=y
CONFIG_EXAMPLE_MULTICAST_IPV4_ADDR="232.10.12.10"
+CONFIG_EXAMPLE_MULTICAST_IPV6_ADDR="FF02::FD"
CONFIG_EXAMPLE_PORT=6750
# CONFIG_EXAMPLE_LOOPBACK is not set
CONFIG_EXAMPLE_MULTICAST_TTL=255
@@ -100,6 +102,7 @@ CONFIG_FXMAC_PHY_COMMON=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -144,6 +147,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -180,6 +192,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
CONFIG_FREERTOS_USE_XMAC=y
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -201,12 +214,6 @@ CONFIG_FREERTOS_USE_XMAC=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -218,13 +225,37 @@ CONFIG_FREERTOS_USE_XMAC=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
CONFIG_USE_LWIP=y
+#
+# LWIP Freertos Port Configuration
+#
+CONFIG_LWIP_FXMAC=y
+# CONFIG_LWIP_FGMAC is not set
+
#
# LWIP Configuration
#
@@ -232,99 +263,43 @@ CONFIG_USE_LWIP=y
#
# LWIP Port Configuration
#
-# CONFIG_LWIP_FGMAC is not set
-CONFIG_LWIP_FXMAC=y
+# CONFIG_LWIP_PORT_DEBUG_EN is not set
# end of LWIP Port Configuration
+# CONFIG_LWIP_NO_SYS is not set
CONFIG_LWIP_LOCAL_HOSTNAME="phytium"
#
-# memory configuration
+# Memory configuration
#
# CONFIG_LWIP_USE_MEM_POOL is not set
CONFIG_LWIP_USE_MEM_HEAP=y
CONFIG_MEM_SIZE=1
CONFIG_MEM_ALIGNMENT=64
-# end of memory configuration
-
-#
-# NETWORK_INTERFACE_OPTIONS
-#
-# CONFIG_LWIP_NETIF_API is not set
-# CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set
-# end of NETWORK_INTERFACE_OPTIONS
-
-#
-# LOOPIF
-#
-CONFIG_LWIP_NETIF_LOOPBACK=y
-CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8
-# end of LOOPIF
-
-#
-# SLIPIF
-#
-# CONFIG_LWIP_SLIP_SUPPORT is not set
-# end of SLIPIF
+# end of Memory configuration
#
# Pbuf options
#
CONFIG_PBUF_POOL_BUFSIZE=2
-# end of Pbuf options
-
-#
-# Internal Memory Pool Sizes
-#
CONFIG_PBUF_POOL_SIZE=1
-# end of Internal Memory Pool Sizes
-
-CONFIG_LWIP_MAX_SOCKETS=10
-
-#
-# LWIP RAW API
-#
-CONFIG_LWIP_MAX_RAW_PCBS=16
-# end of LWIP RAW API
-
-#
-# TCP
-#
-CONFIG_LWIP_MAX_ACTIVE_TCP=16
-CONFIG_LWIP_MAX_LISTENING_TCP=16
-CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y
-CONFIG_LWIP_TCP_MAXRTX=12
-CONFIG_LWIP_TCP_SYNMAXRTX=12
-CONFIG_LWIP_TCP_MSS=1440
-CONFIG_LWIP_TCP_TMR_INTERVAL=250
-CONFIG_LWIP_TCP_MSL=60000
-CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5744
-CONFIG_LWIP_TCP_WND_DEFAULT=5744
-CONFIG_LWIP_TCP_RECVMBOX_SIZE=6
-CONFIG_LWIP_TCP_QUEUE_OOSEQ=y
-# CONFIG_LWIP_TCP_SACK_OUT is not set
-CONFIG_LWIP_TCP_OVERSIZE_MSS=y
-# CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set
-# CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set
-# end of TCP
+# end of Pbuf options
#
-# UDP
+# ARP
#
-CONFIG_LWIP_MAX_UDP_PCBS=16
-CONFIG_LWIP_UDP_RECVMBOX_SIZE=6
-# CONFIG_LWIP_NETBUF_RECVINFO is not set
-# end of UDP
+CONFIG_ARP_QUEUEING_EN=y
+# end of ARP
#
-# IPv4
+# IPV4
#
-CONFIG_USE_IPV4_ONLY=y
+# CONFIG_USE_IPV4_ONLY is not set
CONFIG_LWIP_IP4_REASSEMBLY=y
CONFIG_LWIP_IP4_FRAG=y
# CONFIG_LWIP_IP_FORWARD is not set
CONFIG_IP_REASS_MAX_PBUFS=45
-# end of IPv4
+# end of IPV4
#
# ICMP
@@ -334,10 +309,17 @@ CONFIG_LWIP_MULTICAST_PING=y
# CONFIG_LWIP_BROADCAST_PING is not set
# end of ICMP
+#
+# LWIP RAW API
+#
+CONFIG_LWIP_RAW_API_EN=y
+CONFIG_LWIP_MAX_RAW_PCBS=16
+# end of LWIP RAW API
+
#
# DHCP
#
-# CONFIG_LWIP_DHCP_ENABLE is not set
+CONFIG_LWIP_DHCP_ENABLE=y
# CONFIG_LWIP_DHCP_DOES_ARP_CHECK is not set
# CONFIG_LWIP_DHCP_GET_NTP_SRV is not set
# CONFIG_LWIP_DHCP_DISABLE_CLIENT_ID is not set
@@ -352,6 +334,12 @@ CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y
# CONFIG_LWIP_AUTOIP is not set
# end of AUTOIP
+#
+# IGMP
+#
+CONFIG_LWIP_IGMP_EN=y
+# end of IGMP
+
#
# DNS
#
@@ -359,20 +347,65 @@ CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y
# end of DNS
#
-# TCP options
+# UDP
#
+CONFIG_LWIP_MAX_UDP_PCBS=16
+CONFIG_LWIP_UDP_RECVMBOX_SIZE=6
+# CONFIG_LWIP_NETBUF_RECVINFO is not set
+# end of UDP
+
+#
+# TCP
+#
+CONFIG_LWIP_TCP_WND_DEFAULT=5744
+CONFIG_LWIP_TCP_MAXRTX=12
+CONFIG_LWIP_TCP_SYNMAXRTX=12
+CONFIG_LWIP_TCP_QUEUE_OOSEQ=y
+# CONFIG_LWIP_TCP_SACK_OUT is not set
+CONFIG_LWIP_TCP_MSS=1440
+CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5744
+CONFIG_LWIP_TCP_OVERSIZE_MSS=y
+# CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set
+# CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set
+CONFIG_LWIP_TCP_TMR_INTERVAL=250
+CONFIG_LWIP_TCP_MSL=60000
CONFIG_LWIP_TCP_RTO_TIME=1500
-# end of TCP options
+CONFIG_LWIP_MAX_ACTIVE_TCP=16
+CONFIG_LWIP_MAX_LISTENING_TCP=16
+CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y
+CONFIG_LWIP_TCP_RECVMBOX_SIZE=6
+# end of TCP
+
+#
+# Network_Interface
+#
+# CONFIG_LWIP_NETIF_API is not set
+# CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set
+# end of Network_Interface
+
+#
+# LOOPIF
+#
+CONFIG_LWIP_NETIF_LOOPBACK=y
+CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8
+# end of LOOPIF
+
+#
+# SLIPIF
+#
+# CONFIG_LWIP_SLIP_SUPPORT is not set
+# end of SLIPIF
CONFIG_LWIP_TCPIP_CORE_LOCKING=y
#
-# socket
+# Socket
#
+CONFIG_LWIP_MAX_SOCKETS=10
# CONFIG_LWIP_SO_LINGER is not set
CONFIG_LWIP_SO_REUSE=y
CONFIG_LWIP_SO_REUSE_RXTOALL=y
-# end of socket
+# end of Socket
# CONFIG_LWIP_STATS is not set
@@ -380,6 +413,8 @@ CONFIG_LWIP_SO_REUSE_RXTOALL=y
# PPP
#
# CONFIG_LWIP_PPP_SUPPORT is not set
+CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3
+CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5
# end of PPP
#
@@ -391,12 +426,18 @@ CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y
# end of Checksums
#
-# ipv6
+# IPV6
#
-# CONFIG_LWIP_IPV6 is not set
-# end of ipv6
+CONFIG_LWIP_IPV6=y
+# CONFIG_LWIP_IPV6_AUTOCONFIG is not set
+CONFIG_LWIP_IPV6_NUM_ADDRESSES=3
+# CONFIG_LWIP_IPV6_FORWARD is not set
+CONFIG_LWIP_IP6_FRAG=y
+# CONFIG_LWIP_IP6_REASSEMBLY is not set
+# end of IPV6
CONFIG_LWIP_DEBUG=y
+# CONFIG_LWIP_DEBUG_ESP_LOG is not set
CONFIG_LWIP_NETIF_DEBUG=y
# CONFIG_LWIP_PBUF_DEBUG is not set
# CONFIG_LWIP_ETHARP_DEBUG is not set
@@ -404,16 +445,41 @@ CONFIG_LWIP_NETIF_DEBUG=y
# CONFIG_LWIP_SOCKETS_DEBUG is not set
# CONFIG_LWIP_IP_DEBUG is not set
# CONFIG_LWIP_ICMP_DEBUG is not set
+# CONFIG_LWIP_DHCP_STATE_DEBUG is not set
# CONFIG_LWIP_DHCP_DEBUG is not set
# CONFIG_LWIP_IP6_DEBUG is not set
# CONFIG_LWIP_ICMP6_DEBUG is not set
# CONFIG_LWIP_TCP_DEBUG is not set
+# CONFIG_LWIP_UDP_DEBUG is not set
# CONFIG_LWIP_SNTP_DEBUG is not set
# CONFIG_LWIP_DNS_DEBUG is not set
# end of LWIP Configuration
+#
+# Tcp/ip task resource configuration
+#
+CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=3072
+CONFIG_LWIP_TCPIP_TASK_PRIO=6
+CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=32
+# end of Tcp/ip task resource configuration
+
+#
+# lwip port thread Configuration
+#
+CONFIG_LWIP_PORT_USE_RECEIVE_THREAD=y
+CONFIG_LWIP_PORT_RECEIVE_THREAD_STACKSIZE=1024
+CONFIG_LWIP_PORT_RECEIVE_THREAD_PRIORITY=5
+CONFIG_LWIP_PORT_USE_LINK_DETECT_THREAD=y
+CONFIG_LWIP_PORT_LINK_DETECT_STACKSIZE=1024
+CONFIG_LWIP_PORT_LINK_DETECT_PRIORITY=5
+CONFIG_LWIP_PORT_DHCP_THREAD=y
+CONFIG_LWIP_PORT_DHCP_STACKSIZE=2048
+CONFIG_LWIP_PORT_DHCP_PRIORITY=5
+# end of lwip port thread Configuration
+# end of LWIP Freertos Port Configuration
+
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -431,4 +497,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/network/sockets/udp_multicast/configs/e2000d_aarch64_eg_configs b/example/network/sockets/udp_multicast/configs/e2000d_aarch64_eg_configs
index beb1c22b80c9daa166ed9f4da8dd5565f40fa9f4..001c0d9741e03b836f2435f71888487d76c2c8d6 100644
--- a/example/network/sockets/udp_multicast/configs/e2000d_aarch64_eg_configs
+++ b/example/network/sockets/udp_multicast/configs/e2000d_aarch64_eg_configs
@@ -2,18 +2,21 @@
#
# Project Configuration
#
-CONFIG_TARGET_NAME="e2000_lwip_multicast"
+CONFIG_TARGET_NAME="e2000d_freertos_a64"
#
# Example Configuration
#
+CONFIG_EXAMPLE_IPV4_V6=y
# CONFIG_EXAMPLE_IPV4_ONLY is not set
-CONFIG_EXAMPLE_IPV6_ONLY=y
+CONFIG_EXAMPLE_IPV4=y
CONFIG_EXAMPLE_IPV6=y
+CONFIG_EXAMPLE_MULTICAST_IPV4_ADDR="232.10.12.10"
CONFIG_EXAMPLE_MULTICAST_IPV6_ADDR="FF02::FD"
CONFIG_EXAMPLE_PORT=6750
# CONFIG_EXAMPLE_LOOPBACK is not set
CONFIG_EXAMPLE_MULTICAST_TTL=255
+# CONFIG_EXAMPLE_MULTICAST_LISTEN_ALL_IF is not set
CONFIG_EXAMPLE_MULTICAST_LISTEN_DEFAULT_IF=y
# end of Example Configuration
@@ -99,6 +102,7 @@ CONFIG_FXMAC_PHY_COMMON=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -139,6 +143,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -175,6 +188,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
CONFIG_FREERTOS_USE_XMAC=y
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -196,12 +210,6 @@ CONFIG_FREERTOS_USE_XMAC=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -213,13 +221,37 @@ CONFIG_FREERTOS_USE_XMAC=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
CONFIG_USE_LWIP=y
+#
+# LWIP Freertos Port Configuration
+#
+CONFIG_LWIP_FXMAC=y
+# CONFIG_LWIP_FGMAC is not set
+
#
# LWIP Configuration
#
@@ -227,99 +259,43 @@ CONFIG_USE_LWIP=y
#
# LWIP Port Configuration
#
-# CONFIG_LWIP_FGMAC is not set
-CONFIG_LWIP_FXMAC=y
+# CONFIG_LWIP_PORT_DEBUG_EN is not set
# end of LWIP Port Configuration
+# CONFIG_LWIP_NO_SYS is not set
CONFIG_LWIP_LOCAL_HOSTNAME="phytium"
#
-# memory configuration
+# Memory configuration
#
# CONFIG_LWIP_USE_MEM_POOL is not set
CONFIG_LWIP_USE_MEM_HEAP=y
CONFIG_MEM_SIZE=1
CONFIG_MEM_ALIGNMENT=64
-# end of memory configuration
-
-#
-# NETWORK_INTERFACE_OPTIONS
-#
-# CONFIG_LWIP_NETIF_API is not set
-# CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set
-# end of NETWORK_INTERFACE_OPTIONS
-
-#
-# LOOPIF
-#
-CONFIG_LWIP_NETIF_LOOPBACK=y
-CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8
-# end of LOOPIF
-
-#
-# SLIPIF
-#
-# CONFIG_LWIP_SLIP_SUPPORT is not set
-# end of SLIPIF
+# end of Memory configuration
#
# Pbuf options
#
CONFIG_PBUF_POOL_BUFSIZE=2
-# end of Pbuf options
-
-#
-# Internal Memory Pool Sizes
-#
CONFIG_PBUF_POOL_SIZE=1
-# end of Internal Memory Pool Sizes
-
-CONFIG_LWIP_MAX_SOCKETS=10
-
-#
-# LWIP RAW API
-#
-CONFIG_LWIP_MAX_RAW_PCBS=16
-# end of LWIP RAW API
-
-#
-# TCP
-#
-CONFIG_LWIP_MAX_ACTIVE_TCP=16
-CONFIG_LWIP_MAX_LISTENING_TCP=16
-CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y
-CONFIG_LWIP_TCP_MAXRTX=12
-CONFIG_LWIP_TCP_SYNMAXRTX=12
-CONFIG_LWIP_TCP_MSS=1440
-CONFIG_LWIP_TCP_TMR_INTERVAL=250
-CONFIG_LWIP_TCP_MSL=60000
-CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5744
-CONFIG_LWIP_TCP_WND_DEFAULT=5744
-CONFIG_LWIP_TCP_RECVMBOX_SIZE=6
-CONFIG_LWIP_TCP_QUEUE_OOSEQ=y
-# CONFIG_LWIP_TCP_SACK_OUT is not set
-CONFIG_LWIP_TCP_OVERSIZE_MSS=y
-# CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set
-# CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set
-# end of TCP
+# end of Pbuf options
#
-# UDP
+# ARP
#
-CONFIG_LWIP_MAX_UDP_PCBS=16
-CONFIG_LWIP_UDP_RECVMBOX_SIZE=6
-# CONFIG_LWIP_NETBUF_RECVINFO is not set
-# end of UDP
+CONFIG_ARP_QUEUEING_EN=y
+# end of ARP
#
-# IPv4
+# IPV4
#
# CONFIG_USE_IPV4_ONLY is not set
CONFIG_LWIP_IP4_REASSEMBLY=y
CONFIG_LWIP_IP4_FRAG=y
# CONFIG_LWIP_IP_FORWARD is not set
CONFIG_IP_REASS_MAX_PBUFS=45
-# end of IPv4
+# end of IPV4
#
# ICMP
@@ -329,10 +305,17 @@ CONFIG_LWIP_MULTICAST_PING=y
# CONFIG_LWIP_BROADCAST_PING is not set
# end of ICMP
+#
+# LWIP RAW API
+#
+CONFIG_LWIP_RAW_API_EN=y
+CONFIG_LWIP_MAX_RAW_PCBS=16
+# end of LWIP RAW API
+
#
# DHCP
#
-# CONFIG_LWIP_DHCP_ENABLE is not set
+CONFIG_LWIP_DHCP_ENABLE=y
# CONFIG_LWIP_DHCP_DOES_ARP_CHECK is not set
# CONFIG_LWIP_DHCP_GET_NTP_SRV is not set
# CONFIG_LWIP_DHCP_DISABLE_CLIENT_ID is not set
@@ -347,6 +330,12 @@ CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y
# CONFIG_LWIP_AUTOIP is not set
# end of AUTOIP
+#
+# IGMP
+#
+CONFIG_LWIP_IGMP_EN=y
+# end of IGMP
+
#
# DNS
#
@@ -354,20 +343,65 @@ CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y
# end of DNS
#
-# TCP options
+# UDP
#
+CONFIG_LWIP_MAX_UDP_PCBS=16
+CONFIG_LWIP_UDP_RECVMBOX_SIZE=6
+# CONFIG_LWIP_NETBUF_RECVINFO is not set
+# end of UDP
+
+#
+# TCP
+#
+CONFIG_LWIP_TCP_WND_DEFAULT=5744
+CONFIG_LWIP_TCP_MAXRTX=12
+CONFIG_LWIP_TCP_SYNMAXRTX=12
+CONFIG_LWIP_TCP_QUEUE_OOSEQ=y
+# CONFIG_LWIP_TCP_SACK_OUT is not set
+CONFIG_LWIP_TCP_MSS=1440
+CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5744
+CONFIG_LWIP_TCP_OVERSIZE_MSS=y
+# CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set
+# CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set
+CONFIG_LWIP_TCP_TMR_INTERVAL=250
+CONFIG_LWIP_TCP_MSL=60000
CONFIG_LWIP_TCP_RTO_TIME=1500
-# end of TCP options
+CONFIG_LWIP_MAX_ACTIVE_TCP=16
+CONFIG_LWIP_MAX_LISTENING_TCP=16
+CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y
+CONFIG_LWIP_TCP_RECVMBOX_SIZE=6
+# end of TCP
+
+#
+# Network_Interface
+#
+# CONFIG_LWIP_NETIF_API is not set
+# CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set
+# end of Network_Interface
+
+#
+# LOOPIF
+#
+CONFIG_LWIP_NETIF_LOOPBACK=y
+CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8
+# end of LOOPIF
+
+#
+# SLIPIF
+#
+# CONFIG_LWIP_SLIP_SUPPORT is not set
+# end of SLIPIF
CONFIG_LWIP_TCPIP_CORE_LOCKING=y
#
-# socket
+# Socket
#
+CONFIG_LWIP_MAX_SOCKETS=10
# CONFIG_LWIP_SO_LINGER is not set
CONFIG_LWIP_SO_REUSE=y
CONFIG_LWIP_SO_REUSE_RXTOALL=y
-# end of socket
+# end of Socket
# CONFIG_LWIP_STATS is not set
@@ -388,7 +422,7 @@ CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y
# end of Checksums
#
-# ipv6
+# IPV6
#
CONFIG_LWIP_IPV6=y
# CONFIG_LWIP_IPV6_AUTOCONFIG is not set
@@ -396,9 +430,10 @@ CONFIG_LWIP_IPV6_NUM_ADDRESSES=3
# CONFIG_LWIP_IPV6_FORWARD is not set
CONFIG_LWIP_IP6_FRAG=y
CONFIG_LWIP_IP6_REASSEMBLY=y
-# end of ipv6
+# end of IPV6
CONFIG_LWIP_DEBUG=y
+# CONFIG_LWIP_DEBUG_ESP_LOG is not set
CONFIG_LWIP_NETIF_DEBUG=y
# CONFIG_LWIP_PBUF_DEBUG is not set
# CONFIG_LWIP_ETHARP_DEBUG is not set
@@ -406,16 +441,41 @@ CONFIG_LWIP_NETIF_DEBUG=y
# CONFIG_LWIP_SOCKETS_DEBUG is not set
# CONFIG_LWIP_IP_DEBUG is not set
# CONFIG_LWIP_ICMP_DEBUG is not set
+# CONFIG_LWIP_DHCP_STATE_DEBUG is not set
# CONFIG_LWIP_DHCP_DEBUG is not set
# CONFIG_LWIP_IP6_DEBUG is not set
# CONFIG_LWIP_ICMP6_DEBUG is not set
# CONFIG_LWIP_TCP_DEBUG is not set
+# CONFIG_LWIP_UDP_DEBUG is not set
# CONFIG_LWIP_SNTP_DEBUG is not set
# CONFIG_LWIP_DNS_DEBUG is not set
# end of LWIP Configuration
+#
+# Tcp/ip task resource configuration
+#
+CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=3072
+CONFIG_LWIP_TCPIP_TASK_PRIO=6
+CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=32
+# end of Tcp/ip task resource configuration
+
+#
+# lwip port thread Configuration
+#
+CONFIG_LWIP_PORT_USE_RECEIVE_THREAD=y
+CONFIG_LWIP_PORT_RECEIVE_THREAD_STACKSIZE=2048
+CONFIG_LWIP_PORT_RECEIVE_THREAD_PRIORITY=5
+CONFIG_LWIP_PORT_USE_LINK_DETECT_THREAD=y
+CONFIG_LWIP_PORT_LINK_DETECT_STACKSIZE=2048
+CONFIG_LWIP_PORT_LINK_DETECT_PRIORITY=5
+CONFIG_LWIP_PORT_DHCP_THREAD=y
+CONFIG_LWIP_PORT_DHCP_STACKSIZE=4096
+CONFIG_LWIP_PORT_DHCP_PRIORITY=5
+# end of lwip port thread Configuration
+# end of LWIP Freertos Port Configuration
+
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -433,4 +493,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/network/sockets/udp_multicast/configs/e2000q_aarch32_eg_configs b/example/network/sockets/udp_multicast/configs/e2000q_aarch32_eg_configs
index c82eb6f4cddf1e3f57172cba5e774e10ba7580ae..8af9bc78d75315e186f9aa0cac49aa0f1ab5fdb5 100644
--- a/example/network/sockets/udp_multicast/configs/e2000q_aarch32_eg_configs
+++ b/example/network/sockets/udp_multicast/configs/e2000q_aarch32_eg_configs
@@ -2,20 +2,22 @@
#
# Project Configuration
#
-CONFIG_TARGET_NAME="e2000_lwip_multicast"
+CONFIG_TARGET_NAME="e2000q_freertos_a32"
#
# Example Configuration
#
-CONFIG_EXAMPLE_IPV4_ONLY=y
-# CONFIG_EXAMPLE_IPV6_ONLY is not set
+CONFIG_EXAMPLE_IPV4_V6=y
+# CONFIG_EXAMPLE_IPV4_ONLY is not set
CONFIG_EXAMPLE_IPV4=y
+CONFIG_EXAMPLE_IPV6=y
CONFIG_EXAMPLE_MULTICAST_IPV4_ADDR="232.10.12.10"
+CONFIG_EXAMPLE_MULTICAST_IPV6_ADDR="FF02::FD"
CONFIG_EXAMPLE_PORT=6750
# CONFIG_EXAMPLE_LOOPBACK is not set
CONFIG_EXAMPLE_MULTICAST_TTL=255
-CONFIG_EXAMPLE_MULTICAST_LISTEN_ALL_IF=y
-# CONFIG_EXAMPLE_MULTICAST_LISTEN_DEFAULT_IF is not set
+# CONFIG_EXAMPLE_MULTICAST_LISTEN_ALL_IF is not set
+CONFIG_EXAMPLE_MULTICAST_LISTEN_DEFAULT_IF=y
# end of Example Configuration
#
@@ -100,6 +102,7 @@ CONFIG_FXMAC_PHY_COMMON=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -144,6 +147,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -180,6 +192,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
CONFIG_FREERTOS_USE_XMAC=y
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -201,12 +214,6 @@ CONFIG_FREERTOS_USE_XMAC=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -218,13 +225,37 @@ CONFIG_FREERTOS_USE_XMAC=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
CONFIG_USE_LWIP=y
+#
+# LWIP Freertos Port Configuration
+#
+CONFIG_LWIP_FXMAC=y
+# CONFIG_LWIP_FGMAC is not set
+
#
# LWIP Configuration
#
@@ -232,99 +263,43 @@ CONFIG_USE_LWIP=y
#
# LWIP Port Configuration
#
-# CONFIG_LWIP_FGMAC is not set
-CONFIG_LWIP_FXMAC=y
+# CONFIG_LWIP_PORT_DEBUG_EN is not set
# end of LWIP Port Configuration
+# CONFIG_LWIP_NO_SYS is not set
CONFIG_LWIP_LOCAL_HOSTNAME="phytium"
#
-# memory configuration
+# Memory configuration
#
# CONFIG_LWIP_USE_MEM_POOL is not set
CONFIG_LWIP_USE_MEM_HEAP=y
CONFIG_MEM_SIZE=1
CONFIG_MEM_ALIGNMENT=64
-# end of memory configuration
-
-#
-# NETWORK_INTERFACE_OPTIONS
-#
-# CONFIG_LWIP_NETIF_API is not set
-# CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set
-# end of NETWORK_INTERFACE_OPTIONS
-
-#
-# LOOPIF
-#
-CONFIG_LWIP_NETIF_LOOPBACK=y
-CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8
-# end of LOOPIF
-
-#
-# SLIPIF
-#
-# CONFIG_LWIP_SLIP_SUPPORT is not set
-# end of SLIPIF
+# end of Memory configuration
#
# Pbuf options
#
CONFIG_PBUF_POOL_BUFSIZE=2
-# end of Pbuf options
-
-#
-# Internal Memory Pool Sizes
-#
CONFIG_PBUF_POOL_SIZE=1
-# end of Internal Memory Pool Sizes
-
-CONFIG_LWIP_MAX_SOCKETS=10
-
-#
-# LWIP RAW API
-#
-CONFIG_LWIP_MAX_RAW_PCBS=16
-# end of LWIP RAW API
-
-#
-# TCP
-#
-CONFIG_LWIP_MAX_ACTIVE_TCP=16
-CONFIG_LWIP_MAX_LISTENING_TCP=16
-CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y
-CONFIG_LWIP_TCP_MAXRTX=12
-CONFIG_LWIP_TCP_SYNMAXRTX=12
-CONFIG_LWIP_TCP_MSS=1440
-CONFIG_LWIP_TCP_TMR_INTERVAL=250
-CONFIG_LWIP_TCP_MSL=60000
-CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5744
-CONFIG_LWIP_TCP_WND_DEFAULT=5744
-CONFIG_LWIP_TCP_RECVMBOX_SIZE=6
-CONFIG_LWIP_TCP_QUEUE_OOSEQ=y
-# CONFIG_LWIP_TCP_SACK_OUT is not set
-CONFIG_LWIP_TCP_OVERSIZE_MSS=y
-# CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set
-# CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set
-# end of TCP
+# end of Pbuf options
#
-# UDP
+# ARP
#
-CONFIG_LWIP_MAX_UDP_PCBS=16
-CONFIG_LWIP_UDP_RECVMBOX_SIZE=6
-# CONFIG_LWIP_NETBUF_RECVINFO is not set
-# end of UDP
+CONFIG_ARP_QUEUEING_EN=y
+# end of ARP
#
-# IPv4
+# IPV4
#
-CONFIG_USE_IPV4_ONLY=y
+# CONFIG_USE_IPV4_ONLY is not set
CONFIG_LWIP_IP4_REASSEMBLY=y
CONFIG_LWIP_IP4_FRAG=y
# CONFIG_LWIP_IP_FORWARD is not set
CONFIG_IP_REASS_MAX_PBUFS=45
-# end of IPv4
+# end of IPV4
#
# ICMP
@@ -334,10 +309,17 @@ CONFIG_LWIP_MULTICAST_PING=y
# CONFIG_LWIP_BROADCAST_PING is not set
# end of ICMP
+#
+# LWIP RAW API
+#
+CONFIG_LWIP_RAW_API_EN=y
+CONFIG_LWIP_MAX_RAW_PCBS=16
+# end of LWIP RAW API
+
#
# DHCP
#
-# CONFIG_LWIP_DHCP_ENABLE is not set
+CONFIG_LWIP_DHCP_ENABLE=y
# CONFIG_LWIP_DHCP_DOES_ARP_CHECK is not set
# CONFIG_LWIP_DHCP_GET_NTP_SRV is not set
# CONFIG_LWIP_DHCP_DISABLE_CLIENT_ID is not set
@@ -352,6 +334,12 @@ CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y
# CONFIG_LWIP_AUTOIP is not set
# end of AUTOIP
+#
+# IGMP
+#
+CONFIG_LWIP_IGMP_EN=y
+# end of IGMP
+
#
# DNS
#
@@ -359,20 +347,65 @@ CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y
# end of DNS
#
-# TCP options
+# UDP
#
+CONFIG_LWIP_MAX_UDP_PCBS=16
+CONFIG_LWIP_UDP_RECVMBOX_SIZE=6
+# CONFIG_LWIP_NETBUF_RECVINFO is not set
+# end of UDP
+
+#
+# TCP
+#
+CONFIG_LWIP_TCP_WND_DEFAULT=5744
+CONFIG_LWIP_TCP_MAXRTX=12
+CONFIG_LWIP_TCP_SYNMAXRTX=12
+CONFIG_LWIP_TCP_QUEUE_OOSEQ=y
+# CONFIG_LWIP_TCP_SACK_OUT is not set
+CONFIG_LWIP_TCP_MSS=1440
+CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5744
+CONFIG_LWIP_TCP_OVERSIZE_MSS=y
+# CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set
+# CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set
+CONFIG_LWIP_TCP_TMR_INTERVAL=250
+CONFIG_LWIP_TCP_MSL=60000
CONFIG_LWIP_TCP_RTO_TIME=1500
-# end of TCP options
+CONFIG_LWIP_MAX_ACTIVE_TCP=16
+CONFIG_LWIP_MAX_LISTENING_TCP=16
+CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y
+CONFIG_LWIP_TCP_RECVMBOX_SIZE=6
+# end of TCP
+
+#
+# Network_Interface
+#
+# CONFIG_LWIP_NETIF_API is not set
+# CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set
+# end of Network_Interface
+
+#
+# LOOPIF
+#
+CONFIG_LWIP_NETIF_LOOPBACK=y
+CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8
+# end of LOOPIF
+
+#
+# SLIPIF
+#
+# CONFIG_LWIP_SLIP_SUPPORT is not set
+# end of SLIPIF
CONFIG_LWIP_TCPIP_CORE_LOCKING=y
#
-# socket
+# Socket
#
+CONFIG_LWIP_MAX_SOCKETS=10
# CONFIG_LWIP_SO_LINGER is not set
CONFIG_LWIP_SO_REUSE=y
CONFIG_LWIP_SO_REUSE_RXTOALL=y
-# end of socket
+# end of Socket
# CONFIG_LWIP_STATS is not set
@@ -393,7 +426,7 @@ CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y
# end of Checksums
#
-# ipv6
+# IPV6
#
CONFIG_LWIP_IPV6=y
# CONFIG_LWIP_IPV6_AUTOCONFIG is not set
@@ -401,9 +434,10 @@ CONFIG_LWIP_IPV6_NUM_ADDRESSES=3
# CONFIG_LWIP_IPV6_FORWARD is not set
CONFIG_LWIP_IP6_FRAG=y
# CONFIG_LWIP_IP6_REASSEMBLY is not set
-# end of ipv6
+# end of IPV6
CONFIG_LWIP_DEBUG=y
+# CONFIG_LWIP_DEBUG_ESP_LOG is not set
CONFIG_LWIP_NETIF_DEBUG=y
# CONFIG_LWIP_PBUF_DEBUG is not set
# CONFIG_LWIP_ETHARP_DEBUG is not set
@@ -411,16 +445,41 @@ CONFIG_LWIP_NETIF_DEBUG=y
# CONFIG_LWIP_SOCKETS_DEBUG is not set
# CONFIG_LWIP_IP_DEBUG is not set
# CONFIG_LWIP_ICMP_DEBUG is not set
+# CONFIG_LWIP_DHCP_STATE_DEBUG is not set
# CONFIG_LWIP_DHCP_DEBUG is not set
# CONFIG_LWIP_IP6_DEBUG is not set
# CONFIG_LWIP_ICMP6_DEBUG is not set
# CONFIG_LWIP_TCP_DEBUG is not set
+# CONFIG_LWIP_UDP_DEBUG is not set
# CONFIG_LWIP_SNTP_DEBUG is not set
# CONFIG_LWIP_DNS_DEBUG is not set
# end of LWIP Configuration
+#
+# Tcp/ip task resource configuration
+#
+CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=3072
+CONFIG_LWIP_TCPIP_TASK_PRIO=6
+CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=32
+# end of Tcp/ip task resource configuration
+
+#
+# lwip port thread Configuration
+#
+CONFIG_LWIP_PORT_USE_RECEIVE_THREAD=y
+CONFIG_LWIP_PORT_RECEIVE_THREAD_STACKSIZE=1024
+CONFIG_LWIP_PORT_RECEIVE_THREAD_PRIORITY=5
+CONFIG_LWIP_PORT_USE_LINK_DETECT_THREAD=y
+CONFIG_LWIP_PORT_LINK_DETECT_STACKSIZE=1024
+CONFIG_LWIP_PORT_LINK_DETECT_PRIORITY=5
+CONFIG_LWIP_PORT_DHCP_THREAD=y
+CONFIG_LWIP_PORT_DHCP_STACKSIZE=2048
+CONFIG_LWIP_PORT_DHCP_PRIORITY=5
+# end of lwip port thread Configuration
+# end of LWIP Freertos Port Configuration
+
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -438,4 +497,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/network/sockets/udp_multicast/configs/e2000q_aarch64_eg_configs b/example/network/sockets/udp_multicast/configs/e2000q_aarch64_eg_configs
index 553b290de3e358200acc919572597c3a8fd36b8d..f19c54f76bf3477f1fa31b8f10a20ec1ca5f0bdb 100644
--- a/example/network/sockets/udp_multicast/configs/e2000q_aarch64_eg_configs
+++ b/example/network/sockets/udp_multicast/configs/e2000q_aarch64_eg_configs
@@ -2,18 +2,21 @@
#
# Project Configuration
#
-CONFIG_TARGET_NAME="e2000_lwip_multicast"
+CONFIG_TARGET_NAME="e2000q_freertos_a64"
#
# Example Configuration
#
+CONFIG_EXAMPLE_IPV4_V6=y
# CONFIG_EXAMPLE_IPV4_ONLY is not set
-CONFIG_EXAMPLE_IPV6_ONLY=y
+CONFIG_EXAMPLE_IPV4=y
CONFIG_EXAMPLE_IPV6=y
+CONFIG_EXAMPLE_MULTICAST_IPV4_ADDR="232.10.12.10"
CONFIG_EXAMPLE_MULTICAST_IPV6_ADDR="FF02::FD"
CONFIG_EXAMPLE_PORT=6750
# CONFIG_EXAMPLE_LOOPBACK is not set
CONFIG_EXAMPLE_MULTICAST_TTL=255
+# CONFIG_EXAMPLE_MULTICAST_LISTEN_ALL_IF is not set
CONFIG_EXAMPLE_MULTICAST_LISTEN_DEFAULT_IF=y
# end of Example Configuration
@@ -99,6 +102,7 @@ CONFIG_FXMAC_PHY_COMMON=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -139,6 +143,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -175,6 +188,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
CONFIG_FREERTOS_USE_XMAC=y
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -196,12 +210,6 @@ CONFIG_FREERTOS_USE_XMAC=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -213,13 +221,37 @@ CONFIG_FREERTOS_USE_XMAC=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
CONFIG_USE_LWIP=y
+#
+# LWIP Freertos Port Configuration
+#
+CONFIG_LWIP_FXMAC=y
+# CONFIG_LWIP_FGMAC is not set
+
#
# LWIP Configuration
#
@@ -227,99 +259,43 @@ CONFIG_USE_LWIP=y
#
# LWIP Port Configuration
#
-# CONFIG_LWIP_FGMAC is not set
-CONFIG_LWIP_FXMAC=y
+# CONFIG_LWIP_PORT_DEBUG_EN is not set
# end of LWIP Port Configuration
+# CONFIG_LWIP_NO_SYS is not set
CONFIG_LWIP_LOCAL_HOSTNAME="phytium"
#
-# memory configuration
+# Memory configuration
#
# CONFIG_LWIP_USE_MEM_POOL is not set
CONFIG_LWIP_USE_MEM_HEAP=y
CONFIG_MEM_SIZE=1
CONFIG_MEM_ALIGNMENT=64
-# end of memory configuration
-
-#
-# NETWORK_INTERFACE_OPTIONS
-#
-# CONFIG_LWIP_NETIF_API is not set
-# CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set
-# end of NETWORK_INTERFACE_OPTIONS
-
-#
-# LOOPIF
-#
-CONFIG_LWIP_NETIF_LOOPBACK=y
-CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8
-# end of LOOPIF
-
-#
-# SLIPIF
-#
-# CONFIG_LWIP_SLIP_SUPPORT is not set
-# end of SLIPIF
+# end of Memory configuration
#
# Pbuf options
#
CONFIG_PBUF_POOL_BUFSIZE=2
-# end of Pbuf options
-
-#
-# Internal Memory Pool Sizes
-#
CONFIG_PBUF_POOL_SIZE=1
-# end of Internal Memory Pool Sizes
-
-CONFIG_LWIP_MAX_SOCKETS=10
-
-#
-# LWIP RAW API
-#
-CONFIG_LWIP_MAX_RAW_PCBS=16
-# end of LWIP RAW API
-
-#
-# TCP
-#
-CONFIG_LWIP_MAX_ACTIVE_TCP=16
-CONFIG_LWIP_MAX_LISTENING_TCP=16
-CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y
-CONFIG_LWIP_TCP_MAXRTX=12
-CONFIG_LWIP_TCP_SYNMAXRTX=12
-CONFIG_LWIP_TCP_MSS=1440
-CONFIG_LWIP_TCP_TMR_INTERVAL=250
-CONFIG_LWIP_TCP_MSL=60000
-CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5744
-CONFIG_LWIP_TCP_WND_DEFAULT=5744
-CONFIG_LWIP_TCP_RECVMBOX_SIZE=6
-CONFIG_LWIP_TCP_QUEUE_OOSEQ=y
-# CONFIG_LWIP_TCP_SACK_OUT is not set
-CONFIG_LWIP_TCP_OVERSIZE_MSS=y
-# CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set
-# CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set
-# end of TCP
+# end of Pbuf options
#
-# UDP
+# ARP
#
-CONFIG_LWIP_MAX_UDP_PCBS=16
-CONFIG_LWIP_UDP_RECVMBOX_SIZE=6
-# CONFIG_LWIP_NETBUF_RECVINFO is not set
-# end of UDP
+CONFIG_ARP_QUEUEING_EN=y
+# end of ARP
#
-# IPv4
+# IPV4
#
# CONFIG_USE_IPV4_ONLY is not set
CONFIG_LWIP_IP4_REASSEMBLY=y
CONFIG_LWIP_IP4_FRAG=y
# CONFIG_LWIP_IP_FORWARD is not set
CONFIG_IP_REASS_MAX_PBUFS=45
-# end of IPv4
+# end of IPV4
#
# ICMP
@@ -329,10 +305,17 @@ CONFIG_LWIP_MULTICAST_PING=y
# CONFIG_LWIP_BROADCAST_PING is not set
# end of ICMP
+#
+# LWIP RAW API
+#
+CONFIG_LWIP_RAW_API_EN=y
+CONFIG_LWIP_MAX_RAW_PCBS=16
+# end of LWIP RAW API
+
#
# DHCP
#
-# CONFIG_LWIP_DHCP_ENABLE is not set
+CONFIG_LWIP_DHCP_ENABLE=y
# CONFIG_LWIP_DHCP_DOES_ARP_CHECK is not set
# CONFIG_LWIP_DHCP_GET_NTP_SRV is not set
# CONFIG_LWIP_DHCP_DISABLE_CLIENT_ID is not set
@@ -347,6 +330,12 @@ CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y
# CONFIG_LWIP_AUTOIP is not set
# end of AUTOIP
+#
+# IGMP
+#
+CONFIG_LWIP_IGMP_EN=y
+# end of IGMP
+
#
# DNS
#
@@ -354,20 +343,65 @@ CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y
# end of DNS
#
-# TCP options
+# UDP
#
+CONFIG_LWIP_MAX_UDP_PCBS=16
+CONFIG_LWIP_UDP_RECVMBOX_SIZE=6
+# CONFIG_LWIP_NETBUF_RECVINFO is not set
+# end of UDP
+
+#
+# TCP
+#
+CONFIG_LWIP_TCP_WND_DEFAULT=5744
+CONFIG_LWIP_TCP_MAXRTX=12
+CONFIG_LWIP_TCP_SYNMAXRTX=12
+CONFIG_LWIP_TCP_QUEUE_OOSEQ=y
+# CONFIG_LWIP_TCP_SACK_OUT is not set
+CONFIG_LWIP_TCP_MSS=1440
+CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5744
+CONFIG_LWIP_TCP_OVERSIZE_MSS=y
+# CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set
+# CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set
+CONFIG_LWIP_TCP_TMR_INTERVAL=250
+CONFIG_LWIP_TCP_MSL=60000
CONFIG_LWIP_TCP_RTO_TIME=1500
-# end of TCP options
+CONFIG_LWIP_MAX_ACTIVE_TCP=16
+CONFIG_LWIP_MAX_LISTENING_TCP=16
+CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y
+CONFIG_LWIP_TCP_RECVMBOX_SIZE=6
+# end of TCP
+
+#
+# Network_Interface
+#
+# CONFIG_LWIP_NETIF_API is not set
+# CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set
+# end of Network_Interface
+
+#
+# LOOPIF
+#
+CONFIG_LWIP_NETIF_LOOPBACK=y
+CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8
+# end of LOOPIF
+
+#
+# SLIPIF
+#
+# CONFIG_LWIP_SLIP_SUPPORT is not set
+# end of SLIPIF
CONFIG_LWIP_TCPIP_CORE_LOCKING=y
#
-# socket
+# Socket
#
+CONFIG_LWIP_MAX_SOCKETS=10
# CONFIG_LWIP_SO_LINGER is not set
CONFIG_LWIP_SO_REUSE=y
CONFIG_LWIP_SO_REUSE_RXTOALL=y
-# end of socket
+# end of Socket
# CONFIG_LWIP_STATS is not set
@@ -388,7 +422,7 @@ CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y
# end of Checksums
#
-# ipv6
+# IPV6
#
CONFIG_LWIP_IPV6=y
# CONFIG_LWIP_IPV6_AUTOCONFIG is not set
@@ -396,9 +430,10 @@ CONFIG_LWIP_IPV6_NUM_ADDRESSES=3
# CONFIG_LWIP_IPV6_FORWARD is not set
CONFIG_LWIP_IP6_FRAG=y
CONFIG_LWIP_IP6_REASSEMBLY=y
-# end of ipv6
+# end of IPV6
CONFIG_LWIP_DEBUG=y
+# CONFIG_LWIP_DEBUG_ESP_LOG is not set
CONFIG_LWIP_NETIF_DEBUG=y
# CONFIG_LWIP_PBUF_DEBUG is not set
# CONFIG_LWIP_ETHARP_DEBUG is not set
@@ -406,16 +441,41 @@ CONFIG_LWIP_NETIF_DEBUG=y
# CONFIG_LWIP_SOCKETS_DEBUG is not set
# CONFIG_LWIP_IP_DEBUG is not set
# CONFIG_LWIP_ICMP_DEBUG is not set
+# CONFIG_LWIP_DHCP_STATE_DEBUG is not set
# CONFIG_LWIP_DHCP_DEBUG is not set
# CONFIG_LWIP_IP6_DEBUG is not set
# CONFIG_LWIP_ICMP6_DEBUG is not set
# CONFIG_LWIP_TCP_DEBUG is not set
+# CONFIG_LWIP_UDP_DEBUG is not set
# CONFIG_LWIP_SNTP_DEBUG is not set
# CONFIG_LWIP_DNS_DEBUG is not set
# end of LWIP Configuration
+#
+# Tcp/ip task resource configuration
+#
+CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=3072
+CONFIG_LWIP_TCPIP_TASK_PRIO=6
+CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=32
+# end of Tcp/ip task resource configuration
+
+#
+# lwip port thread Configuration
+#
+CONFIG_LWIP_PORT_USE_RECEIVE_THREAD=y
+CONFIG_LWIP_PORT_RECEIVE_THREAD_STACKSIZE=2048
+CONFIG_LWIP_PORT_RECEIVE_THREAD_PRIORITY=5
+CONFIG_LWIP_PORT_USE_LINK_DETECT_THREAD=y
+CONFIG_LWIP_PORT_LINK_DETECT_STACKSIZE=2048
+CONFIG_LWIP_PORT_LINK_DETECT_PRIORITY=5
+CONFIG_LWIP_PORT_DHCP_THREAD=y
+CONFIG_LWIP_PORT_DHCP_STACKSIZE=4096
+CONFIG_LWIP_PORT_DHCP_PRIORITY=5
+# end of lwip port thread Configuration
+# end of LWIP Freertos Port Configuration
+
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -433,4 +493,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/network/sockets/udp_multicast/configs/ft2004_aarch32_eg_configs b/example/network/sockets/udp_multicast/configs/ft2004_aarch32_eg_configs
new file mode 100644
index 0000000000000000000000000000000000000000..d68e3ccda0b7045096256b8832bafa8f4a7461bf
--- /dev/null
+++ b/example/network/sockets/udp_multicast/configs/ft2004_aarch32_eg_configs
@@ -0,0 +1,514 @@
+
+#
+# Project Configuration
+#
+CONFIG_TARGET_NAME="ft2004_freertos_a32"
+
+#
+# Example Configuration
+#
+CONFIG_EXAMPLE_IPV4_V6=y
+# CONFIG_EXAMPLE_IPV4_ONLY is not set
+CONFIG_EXAMPLE_IPV4=y
+CONFIG_EXAMPLE_IPV6=y
+CONFIG_EXAMPLE_MULTICAST_IPV4_ADDR="232.10.12.10"
+CONFIG_EXAMPLE_MULTICAST_IPV6_ADDR="FF02::FD"
+CONFIG_EXAMPLE_PORT=6750
+# CONFIG_EXAMPLE_LOOPBACK is not set
+CONFIG_EXAMPLE_MULTICAST_TTL=1
+# CONFIG_EXAMPLE_MULTICAST_LISTEN_ALL_IF is not set
+CONFIG_EXAMPLE_MULTICAST_LISTEN_DEFAULT_IF=y
+# end of Example Configuration
+# end of Project Configuration
+
+#
+# Standalone Setting
+#
+CONFIG_USE_FREERTOS=y
+
+#
+# Arch Configuration
+#
+CONFIG_TARGET_ARMV8_AARCH32=y
+# CONFIG_TARGET_ARMV8_AARCH64 is not set
+CONFIG_USE_CACHE=y
+# CONFIG_USE_L3CACHE is not set
+CONFIG_USE_MMU=y
+CONFIG_USE_SYS_TICK=y
+CONFIG_USE_AARCH64_L1_TO_AARCH32=y
+# end of Arch Configuration
+
+#
+# Board Configuration
+#
+CONFIG_TARGET_F2000_4=y
+# CONFIG_TARGET_D2000 is not set
+# CONFIG_TARGET_E2000Q is not set
+# CONFIG_TARGET_E2000D is not set
+# CONFIG_TARGET_E2000S is not set
+CONFIG_DEFAULT_DEBUG_PRINT_UART1=y
+# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set
+# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set
+# end of Board Configuration
+
+#
+# Components Configuration
+#
+# CONFIG_USE_SPI is not set
+# CONFIG_USE_QSPI is not set
+CONFIG_USE_GIC=y
+CONFIG_ENABLE_GICV3=y
+CONFIG_USE_SERIAL=y
+
+#
+# Usart Configuration
+#
+CONFIG_ENABLE_Pl011_UART=y
+# end of Usart Configuration
+
+# CONFIG_USE_GPIO is not set
+CONFIG_USE_ETH=y
+
+#
+# Eth Configuration
+#
+# CONFIG_ENABLE_FXMAC is not set
+CONFIG_ENABLE_FGMAC=y
+CONFIG_FGMAC_PHY_COMMON=y
+# CONFIG_FGMAC_PHY_AR803X is not set
+# end of Eth Configuration
+
+# CONFIG_USE_CAN is not set
+# CONFIG_USE_I2C is not set
+# CONFIG_USE_TIMER is not set
+# CONFIG_USE_MIO is not set
+# CONFIG_USE_SDMMC is not set
+# CONFIG_USE_PCIE is not set
+# CONFIG_USE_WDT is not set
+# CONFIG_USE_DMA is not set
+# CONFIG_USE_NAND is not set
+# CONFIG_USE_RTC is not set
+# CONFIG_USE_SATA is not set
+# CONFIG_USE_USB is not set
+# CONFIG_USE_ADC is not set
+# CONFIG_USE_PWM is not set
+# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
+# end of Components Configuration
+
+CONFIG_USE_NEW_LIBC=y
+# end of Standalone Setting
+
+#
+# Building Option
+#
+# CONFIG_LOG_VERBOS is not set
+# CONFIG_LOG_DEBUG is not set
+# CONFIG_LOG_INFO is not set
+# CONFIG_LOG_WARN is not set
+CONFIG_LOG_ERROR=y
+# CONFIG_LOG_NONE is not set
+CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y
+CONFIG_INTERRUPT_ROLE_MASTER=y
+# CONFIG_INTERRUPT_ROLE_SLAVE is not set
+# CONFIG_LOG_EXTRA_INFO is not set
+# CONFIG_BOOTUP_DEBUG_PRINTS is not set
+
+#
+# Linker Options
+#
+CONFIG_AARCH32_RAM_LD=y
+# CONFIG_AARCH64_RAM_LD is not set
+# CONFIG_USER_DEFINED_LD is not set
+CONFIG_LINK_SCRIPT_ROM=y
+CONFIG_ROM_START_UP_ADDR=0x80100000
+CONFIG_ROM_SIZE_MB=1
+CONFIG_LINK_SCRIPT_RAM=y
+CONFIG_RAM_START_UP_ADDR=0x80500000
+CONFIG_RAM_SIZE_MB=64
+CONFIG_HEAP_SIZE=1
+CONFIG_SVC_STACK_SIZE=0x1000
+CONFIG_SYS_STACK_SIZE=0x1000
+CONFIG_IRQ_STACK_SIZE=0x1000
+CONFIG_ABORT_STACK_SIZE=0x1000
+CONFIG_FIQ_STACK_SIZE=0x1000
+CONFIG_UNDEF_STACK_SIZE=0x1000
+# end of Linker Options
+
+#
+# Compiler Options
+#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
+CONFIG_OUTPUT_BINARY=y
+# end of Compiler Options
+# end of Building Option
+
+#
+# Component Configuration
+#
+
+#
+# Freertos Uart Drivers
+#
+CONFIG_FREERTOS_USE_UART=y
+# end of Freertos Uart Drivers
+
+#
+# Freertos Pwm Drivers
+#
+# CONFIG_FREERTOS_USE_PWM is not set
+# end of Freertos Pwm Drivers
+
+#
+# Freertos Qspi Drivers
+#
+# CONFIG_FREERTOS_USE_QSPI is not set
+# end of Freertos Qspi Drivers
+
+#
+# Freertos Wdt Drivers
+#
+# CONFIG_FREERTOS_USE_WDT is not set
+# end of Freertos Wdt Drivers
+
+#
+# Freertos Eth Drivers
+#
+# CONFIG_FREERTOS_USE_XMAC is not set
+CONFIG_FREERTOS_USE_GMAC=y
+# end of Freertos Eth Drivers
+
+#
+# Freertos Gpio Drivers
+#
+# CONFIG_FREERTOS_USE_GPIO is not set
+# end of Freertos Gpio Drivers
+
+#
+# Freertos Spim Drivers
+#
+# CONFIG_FREERTOS_USE_FSPIM is not set
+# end of Freertos Spim Drivers
+
+#
+# Freertos DMA Drivers
+#
+# CONFIG_FREERTOS_USE_FDDMA is not set
+# CONFIG_FREERTOS_USE_FGDMA is not set
+# end of Freertos DMA Drivers
+
+#
+# Freertos Adc Drivers
+#
+# CONFIG_FREERTOS_USE_ADC is not set
+# end of Freertos Adc Drivers
+
+#
+# Freertos Can Drivers
+#
+# CONFIG_FREERTOS_USE_CAN is not set
+# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
+# end of Component Configuration
+
+#
+# Third-Party Configuration
+#
+CONFIG_USE_LWIP=y
+
+#
+# LWIP Freertos Port Configuration
+#
+# CONFIG_LWIP_FXMAC is not set
+CONFIG_LWIP_FGMAC=y
+
+#
+# LWIP Configuration
+#
+
+#
+# LWIP Port Configuration
+#
+# CONFIG_LWIP_PORT_DEBUG_EN is not set
+# end of LWIP Port Configuration
+
+# CONFIG_LWIP_NO_SYS is not set
+CONFIG_LWIP_LOCAL_HOSTNAME="phytium"
+
+#
+# Memory configuration
+#
+# CONFIG_LWIP_USE_MEM_POOL is not set
+CONFIG_LWIP_USE_MEM_HEAP=y
+CONFIG_MEM_SIZE=2
+CONFIG_MEM_ALIGNMENT=64
+# end of Memory configuration
+
+#
+# Pbuf options
+#
+CONFIG_PBUF_POOL_BUFSIZE=2
+CONFIG_PBUF_POOL_SIZE=1
+# end of Pbuf options
+
+#
+# ARP
+#
+CONFIG_ARP_QUEUEING_EN=y
+# end of ARP
+
+#
+# IPV4
+#
+# CONFIG_USE_IPV4_ONLY is not set
+CONFIG_LWIP_IP4_REASSEMBLY=y
+CONFIG_LWIP_IP4_FRAG=y
+# CONFIG_LWIP_IP_FORWARD is not set
+CONFIG_IP_REASS_MAX_PBUFS=16
+# end of IPV4
+
+#
+# ICMP
+#
+CONFIG_LWIP_ICMP=y
+CONFIG_LWIP_MULTICAST_PING=y
+CONFIG_LWIP_BROADCAST_PING=y
+# end of ICMP
+
+#
+# LWIP RAW API
+#
+CONFIG_LWIP_RAW_API_EN=y
+CONFIG_LWIP_MAX_RAW_PCBS=16
+# end of LWIP RAW API
+
+#
+# DHCP
+#
+CONFIG_LWIP_DHCP_ENABLE=y
+# CONFIG_LWIP_DHCP_DOES_ARP_CHECK is not set
+# CONFIG_LWIP_DHCP_GET_NTP_SRV is not set
+# CONFIG_LWIP_DHCP_DISABLE_CLIENT_ID is not set
+# CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set
+CONFIG_LWIP_DHCP_OPTIONS_LEN=68
+CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y
+# end of DHCP
+
+#
+# AUTOIP
+#
+# CONFIG_LWIP_AUTOIP is not set
+# end of AUTOIP
+
+#
+# IGMP
+#
+CONFIG_LWIP_IGMP_EN=y
+# end of IGMP
+
+#
+# DNS
+#
+CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y
+# end of DNS
+
+#
+# UDP
+#
+CONFIG_LWIP_MAX_UDP_PCBS=16
+CONFIG_LWIP_UDP_RECVMBOX_SIZE=6
+# CONFIG_LWIP_NETBUF_RECVINFO is not set
+# end of UDP
+
+#
+# TCP
+#
+CONFIG_LWIP_TCP_WND_DEFAULT=5744
+CONFIG_LWIP_TCP_MAXRTX=12
+CONFIG_LWIP_TCP_SYNMAXRTX=12
+CONFIG_LWIP_TCP_QUEUE_OOSEQ=y
+# CONFIG_LWIP_TCP_SACK_OUT is not set
+CONFIG_LWIP_TCP_MSS=1440
+CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5744
+CONFIG_LWIP_TCP_OVERSIZE_MSS=y
+# CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set
+# CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set
+CONFIG_LWIP_TCP_TMR_INTERVAL=250
+CONFIG_LWIP_TCP_MSL=60000
+CONFIG_LWIP_TCP_RTO_TIME=1500
+CONFIG_LWIP_MAX_ACTIVE_TCP=16
+CONFIG_LWIP_MAX_LISTENING_TCP=16
+CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y
+CONFIG_LWIP_TCP_RECVMBOX_SIZE=6
+# end of TCP
+
+#
+# Network_Interface
+#
+# CONFIG_LWIP_NETIF_API is not set
+# CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set
+# end of Network_Interface
+
+#
+# LOOPIF
+#
+CONFIG_LWIP_NETIF_LOOPBACK=y
+CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8
+# end of LOOPIF
+
+#
+# SLIPIF
+#
+# CONFIG_LWIP_SLIP_SUPPORT is not set
+# end of SLIPIF
+
+CONFIG_LWIP_TCPIP_CORE_LOCKING=y
+
+#
+# Socket
+#
+CONFIG_LWIP_MAX_SOCKETS=10
+# CONFIG_LWIP_SO_LINGER is not set
+CONFIG_LWIP_SO_REUSE=y
+CONFIG_LWIP_SO_REUSE_RXTOALL=y
+# end of Socket
+
+# CONFIG_LWIP_STATS is not set
+
+#
+# PPP
+#
+# CONFIG_LWIP_PPP_SUPPORT is not set
+CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3
+CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5
+# end of PPP
+
+#
+# Checksums
+#
+# CONFIG_LWIP_CHECKSUM_CHECK_IP is not set
+# CONFIG_LWIP_CHECKSUM_CHECK_UDP is not set
+CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y
+# end of Checksums
+
+#
+# IPV6
+#
+CONFIG_LWIP_IPV6=y
+# CONFIG_LWIP_IPV6_AUTOCONFIG is not set
+CONFIG_LWIP_IPV6_NUM_ADDRESSES=3
+# CONFIG_LWIP_IPV6_FORWARD is not set
+CONFIG_LWIP_IP6_FRAG=y
+# CONFIG_LWIP_IP6_REASSEMBLY is not set
+# end of IPV6
+
+CONFIG_LWIP_DEBUG=y
+# CONFIG_LWIP_DEBUG_ESP_LOG is not set
+CONFIG_LWIP_NETIF_DEBUG=y
+# CONFIG_LWIP_PBUF_DEBUG is not set
+# CONFIG_LWIP_ETHARP_DEBUG is not set
+# CONFIG_LWIP_API_LIB_DEBUG is not set
+# CONFIG_LWIP_SOCKETS_DEBUG is not set
+# CONFIG_LWIP_IP_DEBUG is not set
+# CONFIG_LWIP_ICMP_DEBUG is not set
+# CONFIG_LWIP_DHCP_STATE_DEBUG is not set
+# CONFIG_LWIP_DHCP_DEBUG is not set
+# CONFIG_LWIP_IP6_DEBUG is not set
+# CONFIG_LWIP_ICMP6_DEBUG is not set
+# CONFIG_LWIP_TCP_DEBUG is not set
+# CONFIG_LWIP_UDP_DEBUG is not set
+# CONFIG_LWIP_SNTP_DEBUG is not set
+# CONFIG_LWIP_DNS_DEBUG is not set
+# end of LWIP Configuration
+
+#
+# Tcp/ip task resource configuration
+#
+CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=3072
+CONFIG_LWIP_TCPIP_TASK_PRIO=6
+CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=32
+# end of Tcp/ip task resource configuration
+
+#
+# lwip port thread Configuration
+#
+CONFIG_LWIP_PORT_USE_RECEIVE_THREAD=y
+CONFIG_LWIP_PORT_RECEIVE_THREAD_STACKSIZE=1024
+CONFIG_LWIP_PORT_RECEIVE_THREAD_PRIORITY=5
+CONFIG_LWIP_PORT_USE_LINK_DETECT_THREAD=y
+CONFIG_LWIP_PORT_LINK_DETECT_STACKSIZE=1024
+CONFIG_LWIP_PORT_LINK_DETECT_PRIORITY=5
+CONFIG_LWIP_PORT_DHCP_THREAD=y
+CONFIG_LWIP_PORT_DHCP_STACKSIZE=2048
+CONFIG_LWIP_PORT_DHCP_PRIORITY=5
+# end of lwip port thread Configuration
+# end of LWIP Freertos Port Configuration
+
+CONFIG_USE_BACKTRACE=y
+# CONFIG_USE_FATFS_0_1_4 is not set
+# CONFIG_USE_SFUD is not set
+# CONFIG_USE_SPIFFS is not set
+# CONFIG_USE_AMP is not set
+CONFIG_USE_LETTER_SHELL=y
+
+#
+# Letter Shell Configuration
+#
+CONFIG_LS_PL011_UART=y
+CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
+# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set
+# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set
+# end of Letter Shell Configuration
+
+CONFIG_USE_TLSF=y
+# CONFIG_USE_SDMMC_CMD is not set
+# CONFIG_USE_CHERRY_USB is not set
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/network/sockets/udp_multicast/configs/ft2004_aarch64_eg_configs b/example/network/sockets/udp_multicast/configs/ft2004_aarch64_eg_configs
new file mode 100644
index 0000000000000000000000000000000000000000..2d64127109c2f82e41cd30f9d3e1092c7e868ba5
--- /dev/null
+++ b/example/network/sockets/udp_multicast/configs/ft2004_aarch64_eg_configs
@@ -0,0 +1,510 @@
+
+#
+# Project Configuration
+#
+CONFIG_TARGET_NAME="ft20004_freertos_a64"
+
+#
+# Example Configuration
+#
+CONFIG_EXAMPLE_IPV4_V6=y
+# CONFIG_EXAMPLE_IPV4_ONLY is not set
+CONFIG_EXAMPLE_IPV4=y
+CONFIG_EXAMPLE_IPV6=y
+CONFIG_EXAMPLE_MULTICAST_IPV4_ADDR="232.10.12.10"
+CONFIG_EXAMPLE_MULTICAST_IPV6_ADDR="FF02::FD"
+CONFIG_EXAMPLE_PORT=6750
+# CONFIG_EXAMPLE_LOOPBACK is not set
+CONFIG_EXAMPLE_MULTICAST_TTL=1
+# CONFIG_EXAMPLE_MULTICAST_LISTEN_ALL_IF is not set
+CONFIG_EXAMPLE_MULTICAST_LISTEN_DEFAULT_IF=y
+# end of Example Configuration
+# end of Project Configuration
+
+#
+# Standalone Setting
+#
+CONFIG_USE_FREERTOS=y
+
+#
+# Arch Configuration
+#
+# CONFIG_TARGET_ARMV8_AARCH32 is not set
+CONFIG_TARGET_ARMV8_AARCH64=y
+CONFIG_USE_CACHE=y
+# CONFIG_USE_L3CACHE is not set
+CONFIG_USE_MMU=y
+CONFIG_USE_SYS_TICK=y
+# CONFIG_MMU_DEBUG_PRINTS is not set
+# end of Arch Configuration
+
+#
+# Board Configuration
+#
+CONFIG_TARGET_F2000_4=y
+# CONFIG_TARGET_D2000 is not set
+# CONFIG_TARGET_E2000Q is not set
+# CONFIG_TARGET_E2000D is not set
+# CONFIG_TARGET_E2000S is not set
+CONFIG_DEFAULT_DEBUG_PRINT_UART1=y
+# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set
+# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set
+# end of Board Configuration
+
+#
+# Components Configuration
+#
+# CONFIG_USE_SPI is not set
+# CONFIG_USE_QSPI is not set
+CONFIG_USE_GIC=y
+CONFIG_ENABLE_GICV3=y
+CONFIG_USE_SERIAL=y
+
+#
+# Usart Configuration
+#
+CONFIG_ENABLE_Pl011_UART=y
+# end of Usart Configuration
+
+# CONFIG_USE_GPIO is not set
+CONFIG_USE_ETH=y
+
+#
+# Eth Configuration
+#
+# CONFIG_ENABLE_FXMAC is not set
+CONFIG_ENABLE_FGMAC=y
+CONFIG_FGMAC_PHY_COMMON=y
+# CONFIG_FGMAC_PHY_AR803X is not set
+# end of Eth Configuration
+
+# CONFIG_USE_CAN is not set
+# CONFIG_USE_I2C is not set
+# CONFIG_USE_TIMER is not set
+# CONFIG_USE_MIO is not set
+# CONFIG_USE_SDMMC is not set
+# CONFIG_USE_PCIE is not set
+# CONFIG_USE_WDT is not set
+# CONFIG_USE_DMA is not set
+# CONFIG_USE_NAND is not set
+# CONFIG_USE_RTC is not set
+# CONFIG_USE_SATA is not set
+# CONFIG_USE_USB is not set
+# CONFIG_USE_ADC is not set
+# CONFIG_USE_PWM is not set
+# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
+# end of Components Configuration
+
+CONFIG_USE_NEW_LIBC=y
+# end of Standalone Setting
+
+#
+# Building Option
+#
+# CONFIG_LOG_VERBOS is not set
+# CONFIG_LOG_DEBUG is not set
+# CONFIG_LOG_INFO is not set
+# CONFIG_LOG_WARN is not set
+CONFIG_LOG_ERROR=y
+# CONFIG_LOG_NONE is not set
+CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y
+CONFIG_INTERRUPT_ROLE_MASTER=y
+# CONFIG_INTERRUPT_ROLE_SLAVE is not set
+# CONFIG_LOG_EXTRA_INFO is not set
+# CONFIG_BOOTUP_DEBUG_PRINTS is not set
+
+#
+# Linker Options
+#
+# CONFIG_AARCH32_RAM_LD is not set
+CONFIG_AARCH64_RAM_LD=y
+# CONFIG_USER_DEFINED_LD is not set
+CONFIG_LINK_SCRIPT_ROM=y
+CONFIG_ROM_START_UP_ADDR=0x80100000
+CONFIG_ROM_SIZE_MB=1
+CONFIG_LINK_SCRIPT_RAM=y
+CONFIG_RAM_START_UP_ADDR=0x80500000
+CONFIG_RAM_SIZE_MB=64
+CONFIG_HEAP_SIZE=1
+CONFIG_STACK_SIZE=0x100000
+CONFIG_FPU_STACK_SIZE=0x1000
+# end of Linker Options
+
+#
+# Compiler Options
+#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
+CONFIG_OUTPUT_BINARY=y
+# end of Compiler Options
+# end of Building Option
+
+#
+# Component Configuration
+#
+
+#
+# Freertos Uart Drivers
+#
+CONFIG_FREERTOS_USE_UART=y
+# end of Freertos Uart Drivers
+
+#
+# Freertos Pwm Drivers
+#
+# CONFIG_FREERTOS_USE_PWM is not set
+# end of Freertos Pwm Drivers
+
+#
+# Freertos Qspi Drivers
+#
+# CONFIG_FREERTOS_USE_QSPI is not set
+# end of Freertos Qspi Drivers
+
+#
+# Freertos Wdt Drivers
+#
+# CONFIG_FREERTOS_USE_WDT is not set
+# end of Freertos Wdt Drivers
+
+#
+# Freertos Eth Drivers
+#
+# CONFIG_FREERTOS_USE_XMAC is not set
+CONFIG_FREERTOS_USE_GMAC=y
+# end of Freertos Eth Drivers
+
+#
+# Freertos Gpio Drivers
+#
+# CONFIG_FREERTOS_USE_GPIO is not set
+# end of Freertos Gpio Drivers
+
+#
+# Freertos Spim Drivers
+#
+# CONFIG_FREERTOS_USE_FSPIM is not set
+# end of Freertos Spim Drivers
+
+#
+# Freertos DMA Drivers
+#
+# CONFIG_FREERTOS_USE_FDDMA is not set
+# CONFIG_FREERTOS_USE_FGDMA is not set
+# end of Freertos DMA Drivers
+
+#
+# Freertos Adc Drivers
+#
+# CONFIG_FREERTOS_USE_ADC is not set
+# end of Freertos Adc Drivers
+
+#
+# Freertos Can Drivers
+#
+# CONFIG_FREERTOS_USE_CAN is not set
+# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
+# end of Component Configuration
+
+#
+# Third-Party Configuration
+#
+CONFIG_USE_LWIP=y
+
+#
+# LWIP Freertos Port Configuration
+#
+# CONFIG_LWIP_FXMAC is not set
+CONFIG_LWIP_FGMAC=y
+
+#
+# LWIP Configuration
+#
+
+#
+# LWIP Port Configuration
+#
+# CONFIG_LWIP_PORT_DEBUG_EN is not set
+# end of LWIP Port Configuration
+
+# CONFIG_LWIP_NO_SYS is not set
+CONFIG_LWIP_LOCAL_HOSTNAME="phytium"
+
+#
+# Memory configuration
+#
+# CONFIG_LWIP_USE_MEM_POOL is not set
+CONFIG_LWIP_USE_MEM_HEAP=y
+CONFIG_MEM_SIZE=2
+CONFIG_MEM_ALIGNMENT=64
+# end of Memory configuration
+
+#
+# Pbuf options
+#
+CONFIG_PBUF_POOL_BUFSIZE=2
+CONFIG_PBUF_POOL_SIZE=1
+# end of Pbuf options
+
+#
+# ARP
+#
+CONFIG_ARP_QUEUEING_EN=y
+# end of ARP
+
+#
+# IPV4
+#
+# CONFIG_USE_IPV4_ONLY is not set
+CONFIG_LWIP_IP4_REASSEMBLY=y
+CONFIG_LWIP_IP4_FRAG=y
+# CONFIG_LWIP_IP_FORWARD is not set
+CONFIG_IP_REASS_MAX_PBUFS=16
+# end of IPV4
+
+#
+# ICMP
+#
+CONFIG_LWIP_ICMP=y
+CONFIG_LWIP_MULTICAST_PING=y
+CONFIG_LWIP_BROADCAST_PING=y
+# end of ICMP
+
+#
+# LWIP RAW API
+#
+CONFIG_LWIP_RAW_API_EN=y
+CONFIG_LWIP_MAX_RAW_PCBS=16
+# end of LWIP RAW API
+
+#
+# DHCP
+#
+CONFIG_LWIP_DHCP_ENABLE=y
+# CONFIG_LWIP_DHCP_DOES_ARP_CHECK is not set
+# CONFIG_LWIP_DHCP_GET_NTP_SRV is not set
+# CONFIG_LWIP_DHCP_DISABLE_CLIENT_ID is not set
+# CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set
+CONFIG_LWIP_DHCP_OPTIONS_LEN=68
+CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y
+# end of DHCP
+
+#
+# AUTOIP
+#
+# CONFIG_LWIP_AUTOIP is not set
+# end of AUTOIP
+
+#
+# IGMP
+#
+CONFIG_LWIP_IGMP_EN=y
+# end of IGMP
+
+#
+# DNS
+#
+CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y
+# end of DNS
+
+#
+# UDP
+#
+CONFIG_LWIP_MAX_UDP_PCBS=16
+CONFIG_LWIP_UDP_RECVMBOX_SIZE=6
+# CONFIG_LWIP_NETBUF_RECVINFO is not set
+# end of UDP
+
+#
+# TCP
+#
+CONFIG_LWIP_TCP_WND_DEFAULT=5744
+CONFIG_LWIP_TCP_MAXRTX=12
+CONFIG_LWIP_TCP_SYNMAXRTX=12
+CONFIG_LWIP_TCP_QUEUE_OOSEQ=y
+# CONFIG_LWIP_TCP_SACK_OUT is not set
+CONFIG_LWIP_TCP_MSS=1440
+CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5744
+CONFIG_LWIP_TCP_OVERSIZE_MSS=y
+# CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set
+# CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set
+CONFIG_LWIP_TCP_TMR_INTERVAL=250
+CONFIG_LWIP_TCP_MSL=60000
+CONFIG_LWIP_TCP_RTO_TIME=1500
+CONFIG_LWIP_MAX_ACTIVE_TCP=16
+CONFIG_LWIP_MAX_LISTENING_TCP=16
+CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y
+CONFIG_LWIP_TCP_RECVMBOX_SIZE=6
+# end of TCP
+
+#
+# Network_Interface
+#
+# CONFIG_LWIP_NETIF_API is not set
+# CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set
+# end of Network_Interface
+
+#
+# LOOPIF
+#
+CONFIG_LWIP_NETIF_LOOPBACK=y
+CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8
+# end of LOOPIF
+
+#
+# SLIPIF
+#
+# CONFIG_LWIP_SLIP_SUPPORT is not set
+# end of SLIPIF
+
+CONFIG_LWIP_TCPIP_CORE_LOCKING=y
+
+#
+# Socket
+#
+CONFIG_LWIP_MAX_SOCKETS=10
+# CONFIG_LWIP_SO_LINGER is not set
+CONFIG_LWIP_SO_REUSE=y
+CONFIG_LWIP_SO_REUSE_RXTOALL=y
+# end of Socket
+
+# CONFIG_LWIP_STATS is not set
+
+#
+# PPP
+#
+# CONFIG_LWIP_PPP_SUPPORT is not set
+CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3
+CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5
+# end of PPP
+
+#
+# Checksums
+#
+# CONFIG_LWIP_CHECKSUM_CHECK_IP is not set
+# CONFIG_LWIP_CHECKSUM_CHECK_UDP is not set
+CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y
+# end of Checksums
+
+#
+# IPV6
+#
+CONFIG_LWIP_IPV6=y
+# CONFIG_LWIP_IPV6_AUTOCONFIG is not set
+CONFIG_LWIP_IPV6_NUM_ADDRESSES=3
+# CONFIG_LWIP_IPV6_FORWARD is not set
+CONFIG_LWIP_IP6_FRAG=y
+# CONFIG_LWIP_IP6_REASSEMBLY is not set
+# end of IPV6
+
+CONFIG_LWIP_DEBUG=y
+# CONFIG_LWIP_DEBUG_ESP_LOG is not set
+CONFIG_LWIP_NETIF_DEBUG=y
+# CONFIG_LWIP_PBUF_DEBUG is not set
+# CONFIG_LWIP_ETHARP_DEBUG is not set
+# CONFIG_LWIP_API_LIB_DEBUG is not set
+# CONFIG_LWIP_SOCKETS_DEBUG is not set
+# CONFIG_LWIP_IP_DEBUG is not set
+# CONFIG_LWIP_ICMP_DEBUG is not set
+# CONFIG_LWIP_DHCP_STATE_DEBUG is not set
+# CONFIG_LWIP_DHCP_DEBUG is not set
+# CONFIG_LWIP_IP6_DEBUG is not set
+# CONFIG_LWIP_ICMP6_DEBUG is not set
+# CONFIG_LWIP_TCP_DEBUG is not set
+# CONFIG_LWIP_UDP_DEBUG is not set
+# CONFIG_LWIP_SNTP_DEBUG is not set
+# CONFIG_LWIP_DNS_DEBUG is not set
+# end of LWIP Configuration
+
+#
+# Tcp/ip task resource configuration
+#
+CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=3072
+CONFIG_LWIP_TCPIP_TASK_PRIO=6
+CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=32
+# end of Tcp/ip task resource configuration
+
+#
+# lwip port thread Configuration
+#
+CONFIG_LWIP_PORT_USE_RECEIVE_THREAD=y
+CONFIG_LWIP_PORT_RECEIVE_THREAD_STACKSIZE=1024
+CONFIG_LWIP_PORT_RECEIVE_THREAD_PRIORITY=5
+CONFIG_LWIP_PORT_USE_LINK_DETECT_THREAD=y
+CONFIG_LWIP_PORT_LINK_DETECT_STACKSIZE=1024
+CONFIG_LWIP_PORT_LINK_DETECT_PRIORITY=5
+CONFIG_LWIP_PORT_DHCP_THREAD=y
+CONFIG_LWIP_PORT_DHCP_STACKSIZE=2048
+CONFIG_LWIP_PORT_DHCP_PRIORITY=5
+# end of lwip port thread Configuration
+# end of LWIP Freertos Port Configuration
+
+CONFIG_USE_BACKTRACE=y
+# CONFIG_USE_FATFS_0_1_4 is not set
+# CONFIG_USE_SFUD is not set
+# CONFIG_USE_SPIFFS is not set
+# CONFIG_USE_AMP is not set
+CONFIG_USE_LETTER_SHELL=y
+
+#
+# Letter Shell Configuration
+#
+CONFIG_LS_PL011_UART=y
+CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
+# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set
+# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set
+# end of Letter Shell Configuration
+
+CONFIG_USE_TLSF=y
+# CONFIG_USE_SDMMC_CMD is not set
+# CONFIG_USE_CHERRY_USB is not set
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/network/sockets/udp_multicast/main.c b/example/network/sockets/udp_multicast/main.c
index c9b71b6c7b079af6aa3696da14eca1d95916e71f..a4837f6ea9746159011de084d5361061664d518a 100644
--- a/example/network/sockets/udp_multicast/main.c
+++ b/example/network/sockets/udp_multicast/main.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: main.c
* Date: 2022-02-24 13:42:19
* LastEditTime: 2022-03-21 17:01:57
- * Description: This file is for
- *
- * Modify History:
+ * Description: This file is for running shell and open OS task schedule
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
+ * 1.0 huanghe 2022/10/21 init
*/
#include
#include "FreeRTOS.h"
@@ -30,14 +31,16 @@ int main()
BaseType_t ret = pdPASS;
ret = LSUserShellTask();
- if(ret != pdPASS)
+ if (ret != pdPASS)
+ {
goto FAIL_EXIT;
-
- vTaskStartScheduler(); /* 启动任务,开启调度 */
+ }
+
+ vTaskStartScheduler(); /* 启动任务,开启调度 */
while (1); /* 正常不会执行到这里 */
-
+
FAIL_EXIT:
- printf("failed 0x%x \r\n", ret);
+ printf("Failed 0x%x.\r\n", ret);
return 0;
}
\ No newline at end of file
diff --git a/example/network/sockets/udp_multicast/pic/ipv4_ipv6_config.png b/example/network/sockets/udp_multicast/pic/ipv4_ipv6_config.png
new file mode 100644
index 0000000000000000000000000000000000000000..f978edf22c490f78addc90c8253b4dcf47d7a25c
Binary files /dev/null and b/example/network/sockets/udp_multicast/pic/ipv4_ipv6_config.png differ
diff --git a/example/network/sockets/udp_multicast/pic/lwip_probe.png b/example/network/sockets/udp_multicast/pic/lwip_probe.png
new file mode 100644
index 0000000000000000000000000000000000000000..161a2bd48fa544932252825ec705056b83d75734
Binary files /dev/null and b/example/network/sockets/udp_multicast/pic/lwip_probe.png differ
diff --git a/example/network/sockets/udp_multicast/pic/xmac_probe.png b/example/network/sockets/udp_multicast/pic/xmac_probe.png
deleted file mode 100644
index 59f8c2f556710120cfcd0a7943a34054665da3ba..0000000000000000000000000000000000000000
Binary files a/example/network/sockets/udp_multicast/pic/xmac_probe.png and /dev/null differ
diff --git a/example/network/sockets/udp_multicast/pic/xmac_probe_ipv4.png b/example/network/sockets/udp_multicast/pic/xmac_probe_ipv4.png
deleted file mode 100644
index 584686e115481cc7156df9172e83256fde15088a..0000000000000000000000000000000000000000
Binary files a/example/network/sockets/udp_multicast/pic/xmac_probe_ipv4.png and /dev/null differ
diff --git a/example/network/sockets/udp_multicast/pic/xmac_probe_ipv4_2.png b/example/network/sockets/udp_multicast/pic/xmac_probe_ipv4_2.png
deleted file mode 100644
index 0e8fd18bc82ef2a5b2474492133fb47d8fbe2086..0000000000000000000000000000000000000000
Binary files a/example/network/sockets/udp_multicast/pic/xmac_probe_ipv4_2.png and /dev/null differ
diff --git a/example/network/sockets/udp_multicast/pic/xmac_probe_ipv6.png b/example/network/sockets/udp_multicast/pic/xmac_probe_ipv6.png
deleted file mode 100644
index 33b748ed3bdcca04e59f44cb0d00ef9967041f55..0000000000000000000000000000000000000000
Binary files a/example/network/sockets/udp_multicast/pic/xmac_probe_ipv6.png and /dev/null differ
diff --git a/example/network/sockets/udp_multicast/pic/xmac_probe_ipv6_2.png b/example/network/sockets/udp_multicast/pic/xmac_probe_ipv6_2.png
deleted file mode 100644
index 7dca5c3e883fbde10d9818d8854e3b1ed344d56e..0000000000000000000000000000000000000000
Binary files a/example/network/sockets/udp_multicast/pic/xmac_probe_ipv6_2.png and /dev/null differ
diff --git a/example/network/sockets/udp_multicast/sdkconfig b/example/network/sockets/udp_multicast/sdkconfig
index 553b290de3e358200acc919572597c3a8fd36b8d..f19c54f76bf3477f1fa31b8f10a20ec1ca5f0bdb 100644
--- a/example/network/sockets/udp_multicast/sdkconfig
+++ b/example/network/sockets/udp_multicast/sdkconfig
@@ -2,18 +2,21 @@
#
# Project Configuration
#
-CONFIG_TARGET_NAME="e2000_lwip_multicast"
+CONFIG_TARGET_NAME="e2000q_freertos_a64"
#
# Example Configuration
#
+CONFIG_EXAMPLE_IPV4_V6=y
# CONFIG_EXAMPLE_IPV4_ONLY is not set
-CONFIG_EXAMPLE_IPV6_ONLY=y
+CONFIG_EXAMPLE_IPV4=y
CONFIG_EXAMPLE_IPV6=y
+CONFIG_EXAMPLE_MULTICAST_IPV4_ADDR="232.10.12.10"
CONFIG_EXAMPLE_MULTICAST_IPV6_ADDR="FF02::FD"
CONFIG_EXAMPLE_PORT=6750
# CONFIG_EXAMPLE_LOOPBACK is not set
CONFIG_EXAMPLE_MULTICAST_TTL=255
+# CONFIG_EXAMPLE_MULTICAST_LISTEN_ALL_IF is not set
CONFIG_EXAMPLE_MULTICAST_LISTEN_DEFAULT_IF=y
# end of Example Configuration
@@ -99,6 +102,7 @@ CONFIG_FXMAC_PHY_COMMON=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -139,6 +143,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -175,6 +188,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
CONFIG_FREERTOS_USE_XMAC=y
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -196,12 +210,6 @@ CONFIG_FREERTOS_USE_XMAC=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -213,13 +221,37 @@ CONFIG_FREERTOS_USE_XMAC=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
CONFIG_USE_LWIP=y
+#
+# LWIP Freertos Port Configuration
+#
+CONFIG_LWIP_FXMAC=y
+# CONFIG_LWIP_FGMAC is not set
+
#
# LWIP Configuration
#
@@ -227,99 +259,43 @@ CONFIG_USE_LWIP=y
#
# LWIP Port Configuration
#
-# CONFIG_LWIP_FGMAC is not set
-CONFIG_LWIP_FXMAC=y
+# CONFIG_LWIP_PORT_DEBUG_EN is not set
# end of LWIP Port Configuration
+# CONFIG_LWIP_NO_SYS is not set
CONFIG_LWIP_LOCAL_HOSTNAME="phytium"
#
-# memory configuration
+# Memory configuration
#
# CONFIG_LWIP_USE_MEM_POOL is not set
CONFIG_LWIP_USE_MEM_HEAP=y
CONFIG_MEM_SIZE=1
CONFIG_MEM_ALIGNMENT=64
-# end of memory configuration
-
-#
-# NETWORK_INTERFACE_OPTIONS
-#
-# CONFIG_LWIP_NETIF_API is not set
-# CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set
-# end of NETWORK_INTERFACE_OPTIONS
-
-#
-# LOOPIF
-#
-CONFIG_LWIP_NETIF_LOOPBACK=y
-CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8
-# end of LOOPIF
-
-#
-# SLIPIF
-#
-# CONFIG_LWIP_SLIP_SUPPORT is not set
-# end of SLIPIF
+# end of Memory configuration
#
# Pbuf options
#
CONFIG_PBUF_POOL_BUFSIZE=2
-# end of Pbuf options
-
-#
-# Internal Memory Pool Sizes
-#
CONFIG_PBUF_POOL_SIZE=1
-# end of Internal Memory Pool Sizes
-
-CONFIG_LWIP_MAX_SOCKETS=10
-
-#
-# LWIP RAW API
-#
-CONFIG_LWIP_MAX_RAW_PCBS=16
-# end of LWIP RAW API
-
-#
-# TCP
-#
-CONFIG_LWIP_MAX_ACTIVE_TCP=16
-CONFIG_LWIP_MAX_LISTENING_TCP=16
-CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y
-CONFIG_LWIP_TCP_MAXRTX=12
-CONFIG_LWIP_TCP_SYNMAXRTX=12
-CONFIG_LWIP_TCP_MSS=1440
-CONFIG_LWIP_TCP_TMR_INTERVAL=250
-CONFIG_LWIP_TCP_MSL=60000
-CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5744
-CONFIG_LWIP_TCP_WND_DEFAULT=5744
-CONFIG_LWIP_TCP_RECVMBOX_SIZE=6
-CONFIG_LWIP_TCP_QUEUE_OOSEQ=y
-# CONFIG_LWIP_TCP_SACK_OUT is not set
-CONFIG_LWIP_TCP_OVERSIZE_MSS=y
-# CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set
-# CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set
-# end of TCP
+# end of Pbuf options
#
-# UDP
+# ARP
#
-CONFIG_LWIP_MAX_UDP_PCBS=16
-CONFIG_LWIP_UDP_RECVMBOX_SIZE=6
-# CONFIG_LWIP_NETBUF_RECVINFO is not set
-# end of UDP
+CONFIG_ARP_QUEUEING_EN=y
+# end of ARP
#
-# IPv4
+# IPV4
#
# CONFIG_USE_IPV4_ONLY is not set
CONFIG_LWIP_IP4_REASSEMBLY=y
CONFIG_LWIP_IP4_FRAG=y
# CONFIG_LWIP_IP_FORWARD is not set
CONFIG_IP_REASS_MAX_PBUFS=45
-# end of IPv4
+# end of IPV4
#
# ICMP
@@ -329,10 +305,17 @@ CONFIG_LWIP_MULTICAST_PING=y
# CONFIG_LWIP_BROADCAST_PING is not set
# end of ICMP
+#
+# LWIP RAW API
+#
+CONFIG_LWIP_RAW_API_EN=y
+CONFIG_LWIP_MAX_RAW_PCBS=16
+# end of LWIP RAW API
+
#
# DHCP
#
-# CONFIG_LWIP_DHCP_ENABLE is not set
+CONFIG_LWIP_DHCP_ENABLE=y
# CONFIG_LWIP_DHCP_DOES_ARP_CHECK is not set
# CONFIG_LWIP_DHCP_GET_NTP_SRV is not set
# CONFIG_LWIP_DHCP_DISABLE_CLIENT_ID is not set
@@ -347,6 +330,12 @@ CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y
# CONFIG_LWIP_AUTOIP is not set
# end of AUTOIP
+#
+# IGMP
+#
+CONFIG_LWIP_IGMP_EN=y
+# end of IGMP
+
#
# DNS
#
@@ -354,20 +343,65 @@ CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y
# end of DNS
#
-# TCP options
+# UDP
#
+CONFIG_LWIP_MAX_UDP_PCBS=16
+CONFIG_LWIP_UDP_RECVMBOX_SIZE=6
+# CONFIG_LWIP_NETBUF_RECVINFO is not set
+# end of UDP
+
+#
+# TCP
+#
+CONFIG_LWIP_TCP_WND_DEFAULT=5744
+CONFIG_LWIP_TCP_MAXRTX=12
+CONFIG_LWIP_TCP_SYNMAXRTX=12
+CONFIG_LWIP_TCP_QUEUE_OOSEQ=y
+# CONFIG_LWIP_TCP_SACK_OUT is not set
+CONFIG_LWIP_TCP_MSS=1440
+CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5744
+CONFIG_LWIP_TCP_OVERSIZE_MSS=y
+# CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set
+# CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set
+CONFIG_LWIP_TCP_TMR_INTERVAL=250
+CONFIG_LWIP_TCP_MSL=60000
CONFIG_LWIP_TCP_RTO_TIME=1500
-# end of TCP options
+CONFIG_LWIP_MAX_ACTIVE_TCP=16
+CONFIG_LWIP_MAX_LISTENING_TCP=16
+CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y
+CONFIG_LWIP_TCP_RECVMBOX_SIZE=6
+# end of TCP
+
+#
+# Network_Interface
+#
+# CONFIG_LWIP_NETIF_API is not set
+# CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set
+# end of Network_Interface
+
+#
+# LOOPIF
+#
+CONFIG_LWIP_NETIF_LOOPBACK=y
+CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8
+# end of LOOPIF
+
+#
+# SLIPIF
+#
+# CONFIG_LWIP_SLIP_SUPPORT is not set
+# end of SLIPIF
CONFIG_LWIP_TCPIP_CORE_LOCKING=y
#
-# socket
+# Socket
#
+CONFIG_LWIP_MAX_SOCKETS=10
# CONFIG_LWIP_SO_LINGER is not set
CONFIG_LWIP_SO_REUSE=y
CONFIG_LWIP_SO_REUSE_RXTOALL=y
-# end of socket
+# end of Socket
# CONFIG_LWIP_STATS is not set
@@ -388,7 +422,7 @@ CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y
# end of Checksums
#
-# ipv6
+# IPV6
#
CONFIG_LWIP_IPV6=y
# CONFIG_LWIP_IPV6_AUTOCONFIG is not set
@@ -396,9 +430,10 @@ CONFIG_LWIP_IPV6_NUM_ADDRESSES=3
# CONFIG_LWIP_IPV6_FORWARD is not set
CONFIG_LWIP_IP6_FRAG=y
CONFIG_LWIP_IP6_REASSEMBLY=y
-# end of ipv6
+# end of IPV6
CONFIG_LWIP_DEBUG=y
+# CONFIG_LWIP_DEBUG_ESP_LOG is not set
CONFIG_LWIP_NETIF_DEBUG=y
# CONFIG_LWIP_PBUF_DEBUG is not set
# CONFIG_LWIP_ETHARP_DEBUG is not set
@@ -406,16 +441,41 @@ CONFIG_LWIP_NETIF_DEBUG=y
# CONFIG_LWIP_SOCKETS_DEBUG is not set
# CONFIG_LWIP_IP_DEBUG is not set
# CONFIG_LWIP_ICMP_DEBUG is not set
+# CONFIG_LWIP_DHCP_STATE_DEBUG is not set
# CONFIG_LWIP_DHCP_DEBUG is not set
# CONFIG_LWIP_IP6_DEBUG is not set
# CONFIG_LWIP_ICMP6_DEBUG is not set
# CONFIG_LWIP_TCP_DEBUG is not set
+# CONFIG_LWIP_UDP_DEBUG is not set
# CONFIG_LWIP_SNTP_DEBUG is not set
# CONFIG_LWIP_DNS_DEBUG is not set
# end of LWIP Configuration
+#
+# Tcp/ip task resource configuration
+#
+CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=3072
+CONFIG_LWIP_TCPIP_TASK_PRIO=6
+CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=32
+# end of Tcp/ip task resource configuration
+
+#
+# lwip port thread Configuration
+#
+CONFIG_LWIP_PORT_USE_RECEIVE_THREAD=y
+CONFIG_LWIP_PORT_RECEIVE_THREAD_STACKSIZE=2048
+CONFIG_LWIP_PORT_RECEIVE_THREAD_PRIORITY=5
+CONFIG_LWIP_PORT_USE_LINK_DETECT_THREAD=y
+CONFIG_LWIP_PORT_LINK_DETECT_STACKSIZE=2048
+CONFIG_LWIP_PORT_LINK_DETECT_PRIORITY=5
+CONFIG_LWIP_PORT_DHCP_THREAD=y
+CONFIG_LWIP_PORT_DHCP_STACKSIZE=4096
+CONFIG_LWIP_PORT_DHCP_PRIORITY=5
+# end of lwip port thread Configuration
+# end of LWIP Freertos Port Configuration
+
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -433,4 +493,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/network/sockets/udp_multicast/sdkconfig.h b/example/network/sockets/udp_multicast/sdkconfig.h
index be41343683618852a3345e70976c59bb7c67120b..6872aa074b469b58dd0bcbcd071a57844a314f16 100644
--- a/example/network/sockets/udp_multicast/sdkconfig.h
+++ b/example/network/sockets/udp_multicast/sdkconfig.h
@@ -3,17 +3,20 @@
/* Project Configuration */
-#define CONFIG_TARGET_NAME "e2000_lwip_multicast"
+#define CONFIG_TARGET_NAME "e2000q_freertos_a64"
/* Example Configuration */
+#define CONFIG_EXAMPLE_IPV4_V6
/* CONFIG_EXAMPLE_IPV4_ONLY is not set */
-#define CONFIG_EXAMPLE_IPV6_ONLY
+#define CONFIG_EXAMPLE_IPV4
#define CONFIG_EXAMPLE_IPV6
+#define CONFIG_EXAMPLE_MULTICAST_IPV4_ADDR "232.10.12.10"
#define CONFIG_EXAMPLE_MULTICAST_IPV6_ADDR "FF02::FD"
#define CONFIG_EXAMPLE_PORT 6750
/* CONFIG_EXAMPLE_LOOPBACK is not set */
#define CONFIG_EXAMPLE_MULTICAST_TTL 255
+/* CONFIG_EXAMPLE_MULTICAST_LISTEN_ALL_IF is not set */
#define CONFIG_EXAMPLE_MULTICAST_LISTEN_DEFAULT_IF
/* end of Example Configuration */
@@ -90,6 +93,7 @@
/* CONFIG_USE_ADC is not set */
/* CONFIG_USE_PWM is not set */
/* CONFIG_USE_IPC is not set */
+/* CONFIG_USE_MEDIA is not set */
/* end of Components Configuration */
#define CONFIG_USE_NEW_LIBC
/* end of Standalone Setting */
@@ -126,6 +130,12 @@
/* Compiler Options */
+/* Cross-Compiler Setting */
+
+#define CONFIG_GCC_OPTIMIZE_LEVEL 0
+/* CONFIG_USE_EXT_COMPILER is not set */
+/* CONFIG_USE_KLIN_SYS is not set */
+/* end of Cross-Compiler Setting */
#define CONFIG_OUTPUT_BINARY
/* end of Compiler Options */
/* end of Building Option */
@@ -155,6 +165,7 @@
/* Freertos Eth Drivers */
#define CONFIG_FREERTOS_USE_XMAC
+/* CONFIG_FREERTOS_USE_GMAC is not set */
/* end of Freertos Eth Drivers */
/* Freertos Gpio Drivers */
@@ -173,11 +184,6 @@
/* CONFIG_FREERTOS_USE_FGDMA is not set */
/* end of Freertos DMA Drivers */
-/* Freertos MMC Drivers */
-
-/* CONFIG_FREERTOS_USE_FSDIO is not set */
-/* end of Freertos MMC Drivers */
-
/* Freertos Adc Drivers */
/* CONFIG_FREERTOS_USE_ADC is not set */
@@ -187,97 +193,68 @@
/* CONFIG_FREERTOS_USE_CAN is not set */
/* end of Freertos Can Drivers */
+
+/* Freertos I2c Drivers */
+
+/* CONFIG_FREERTOS_USE_I2C is not set */
+/* end of Freertos I2c Drivers */
+
+/* Freertos Mio Drivers */
+
+/* CONFIG_FREERTOS_USE_MIO is not set */
+/* end of Freertos Mio Drivers */
+
+/* Freertos Timer Drivers */
+
+/* CONFIG_FREERTOS_USE_TIMER is not set */
+/* end of Freertos Timer Drivers */
/* end of Component Configuration */
-/* FreeRTOS Setting */
+/* Third-Party Configuration */
#define CONFIG_USE_LWIP
+/* LWIP Freertos Port Configuration */
+
+#define CONFIG_LWIP_FXMAC
+/* CONFIG_LWIP_FGMAC is not set */
+
/* LWIP Configuration */
/* LWIP Port Configuration */
-/* CONFIG_LWIP_FGMAC is not set */
-#define CONFIG_LWIP_FXMAC
+/* CONFIG_LWIP_PORT_DEBUG_EN is not set */
/* end of LWIP Port Configuration */
+/* CONFIG_LWIP_NO_SYS is not set */
#define CONFIG_LWIP_LOCAL_HOSTNAME "phytium"
-/* memory configuration */
+/* Memory configuration */
/* CONFIG_LWIP_USE_MEM_POOL is not set */
#define CONFIG_LWIP_USE_MEM_HEAP
#define CONFIG_MEM_SIZE 1
#define CONFIG_MEM_ALIGNMENT 64
-/* end of memory configuration */
-
-/* NETWORK_INTERFACE_OPTIONS */
-
-/* CONFIG_LWIP_NETIF_API is not set */
-/* CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set */
-/* end of NETWORK_INTERFACE_OPTIONS */
-
-/* LOOPIF */
-
-#define CONFIG_LWIP_NETIF_LOOPBACK
-#define CONFIG_LWIP_LOOPBACK_MAX_PBUFS 8
-/* end of LOOPIF */
-
-/* SLIPIF */
-
-/* CONFIG_LWIP_SLIP_SUPPORT is not set */
-/* end of SLIPIF */
+/* end of Memory configuration */
/* Pbuf options */
#define CONFIG_PBUF_POOL_BUFSIZE 2
-/* end of Pbuf options */
-
-/* Internal Memory Pool Sizes */
-
#define CONFIG_PBUF_POOL_SIZE 1
-/* end of Internal Memory Pool Sizes */
-#define CONFIG_LWIP_MAX_SOCKETS 10
-
-/* LWIP RAW API */
-
-#define CONFIG_LWIP_MAX_RAW_PCBS 16
-/* end of LWIP RAW API */
-
-/* TCP */
-
-#define CONFIG_LWIP_MAX_ACTIVE_TCP 16
-#define CONFIG_LWIP_MAX_LISTENING_TCP 16
-#define CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION
-#define CONFIG_LWIP_TCP_MAXRTX 12
-#define CONFIG_LWIP_TCP_SYNMAXRTX 12
-#define CONFIG_LWIP_TCP_MSS 1440
-#define CONFIG_LWIP_TCP_TMR_INTERVAL 250
-#define CONFIG_LWIP_TCP_MSL 60000
-#define CONFIG_LWIP_TCP_SND_BUF_DEFAULT 5744
-#define CONFIG_LWIP_TCP_WND_DEFAULT 5744
-#define CONFIG_LWIP_TCP_RECVMBOX_SIZE 6
-#define CONFIG_LWIP_TCP_QUEUE_OOSEQ
-/* CONFIG_LWIP_TCP_SACK_OUT is not set */
-#define CONFIG_LWIP_TCP_OVERSIZE_MSS
-/* CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set */
-/* CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set */
-/* end of TCP */
+/* end of Pbuf options */
-/* UDP */
+/* ARP */
-#define CONFIG_LWIP_MAX_UDP_PCBS 16
-#define CONFIG_LWIP_UDP_RECVMBOX_SIZE 6
-/* CONFIG_LWIP_NETBUF_RECVINFO is not set */
-/* end of UDP */
+#define CONFIG_ARP_QUEUEING_EN
+/* end of ARP */
-/* IPv4 */
+/* IPV4 */
/* CONFIG_USE_IPV4_ONLY is not set */
#define CONFIG_LWIP_IP4_REASSEMBLY
#define CONFIG_LWIP_IP4_FRAG
/* CONFIG_LWIP_IP_FORWARD is not set */
#define CONFIG_IP_REASS_MAX_PBUFS 45
-/* end of IPv4 */
+/* end of IPV4 */
/* ICMP */
@@ -286,9 +263,15 @@
/* CONFIG_LWIP_BROADCAST_PING is not set */
/* end of ICMP */
+/* LWIP RAW API */
+
+#define CONFIG_LWIP_RAW_API_EN
+#define CONFIG_LWIP_MAX_RAW_PCBS 16
+/* end of LWIP RAW API */
+
/* DHCP */
-/* CONFIG_LWIP_DHCP_ENABLE is not set */
+#define CONFIG_LWIP_DHCP_ENABLE
/* CONFIG_LWIP_DHCP_DOES_ARP_CHECK is not set */
/* CONFIG_LWIP_DHCP_GET_NTP_SRV is not set */
/* CONFIG_LWIP_DHCP_DISABLE_CLIENT_ID is not set */
@@ -302,23 +285,69 @@
/* CONFIG_LWIP_AUTOIP is not set */
/* end of AUTOIP */
+/* IGMP */
+
+#define CONFIG_LWIP_IGMP_EN
+/* end of IGMP */
+
/* DNS */
#define CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES
/* end of DNS */
-/* TCP options */
+/* UDP */
+
+#define CONFIG_LWIP_MAX_UDP_PCBS 16
+#define CONFIG_LWIP_UDP_RECVMBOX_SIZE 6
+/* CONFIG_LWIP_NETBUF_RECVINFO is not set */
+/* end of UDP */
+
+/* TCP */
+#define CONFIG_LWIP_TCP_WND_DEFAULT 5744
+#define CONFIG_LWIP_TCP_MAXRTX 12
+#define CONFIG_LWIP_TCP_SYNMAXRTX 12
+#define CONFIG_LWIP_TCP_QUEUE_OOSEQ
+/* CONFIG_LWIP_TCP_SACK_OUT is not set */
+#define CONFIG_LWIP_TCP_MSS 1440
+#define CONFIG_LWIP_TCP_SND_BUF_DEFAULT 5744
+#define CONFIG_LWIP_TCP_OVERSIZE_MSS
+/* CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set */
+/* CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set */
+#define CONFIG_LWIP_TCP_TMR_INTERVAL 250
+#define CONFIG_LWIP_TCP_MSL 60000
#define CONFIG_LWIP_TCP_RTO_TIME 1500
-/* end of TCP options */
+#define CONFIG_LWIP_MAX_ACTIVE_TCP 16
+#define CONFIG_LWIP_MAX_LISTENING_TCP 16
+#define CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION
+#define CONFIG_LWIP_TCP_RECVMBOX_SIZE 6
+/* end of TCP */
+
+/* Network_Interface */
+
+/* CONFIG_LWIP_NETIF_API is not set */
+/* CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set */
+/* end of Network_Interface */
+
+/* LOOPIF */
+
+#define CONFIG_LWIP_NETIF_LOOPBACK
+#define CONFIG_LWIP_LOOPBACK_MAX_PBUFS 8
+/* end of LOOPIF */
+
+/* SLIPIF */
+
+/* CONFIG_LWIP_SLIP_SUPPORT is not set */
+/* end of SLIPIF */
#define CONFIG_LWIP_TCPIP_CORE_LOCKING
-/* socket */
+/* Socket */
+#define CONFIG_LWIP_MAX_SOCKETS 10
/* CONFIG_LWIP_SO_LINGER is not set */
#define CONFIG_LWIP_SO_REUSE
#define CONFIG_LWIP_SO_REUSE_RXTOALL
-/* end of socket */
+/* end of Socket */
/* CONFIG_LWIP_STATS is not set */
/* PPP */
@@ -335,7 +364,7 @@
#define CONFIG_LWIP_CHECKSUM_CHECK_ICMP
/* end of Checksums */
-/* ipv6 */
+/* IPV6 */
#define CONFIG_LWIP_IPV6
/* CONFIG_LWIP_IPV6_AUTOCONFIG is not set */
@@ -343,8 +372,9 @@
/* CONFIG_LWIP_IPV6_FORWARD is not set */
#define CONFIG_LWIP_IP6_FRAG
#define CONFIG_LWIP_IP6_REASSEMBLY
-/* end of ipv6 */
+/* end of IPV6 */
#define CONFIG_LWIP_DEBUG
+/* CONFIG_LWIP_DEBUG_ESP_LOG is not set */
#define CONFIG_LWIP_NETIF_DEBUG
/* CONFIG_LWIP_PBUF_DEBUG is not set */
/* CONFIG_LWIP_ETHARP_DEBUG is not set */
@@ -352,15 +382,38 @@
/* CONFIG_LWIP_SOCKETS_DEBUG is not set */
/* CONFIG_LWIP_IP_DEBUG is not set */
/* CONFIG_LWIP_ICMP_DEBUG is not set */
+/* CONFIG_LWIP_DHCP_STATE_DEBUG is not set */
/* CONFIG_LWIP_DHCP_DEBUG is not set */
/* CONFIG_LWIP_IP6_DEBUG is not set */
/* CONFIG_LWIP_ICMP6_DEBUG is not set */
/* CONFIG_LWIP_TCP_DEBUG is not set */
+/* CONFIG_LWIP_UDP_DEBUG is not set */
/* CONFIG_LWIP_SNTP_DEBUG is not set */
/* CONFIG_LWIP_DNS_DEBUG is not set */
/* end of LWIP Configuration */
+
+/* Tcp/ip task resource configuration */
+
+#define CONFIG_LWIP_TCPIP_TASK_STACK_SIZE 3072
+#define CONFIG_LWIP_TCPIP_TASK_PRIO 6
+#define CONFIG_LWIP_TCPIP_RECVMBOX_SIZE 32
+/* end of Tcp/ip task resource configuration */
+
+/* lwip port thread Configuration */
+
+#define CONFIG_LWIP_PORT_USE_RECEIVE_THREAD
+#define CONFIG_LWIP_PORT_RECEIVE_THREAD_STACKSIZE 2048
+#define CONFIG_LWIP_PORT_RECEIVE_THREAD_PRIORITY 5
+#define CONFIG_LWIP_PORT_USE_LINK_DETECT_THREAD
+#define CONFIG_LWIP_PORT_LINK_DETECT_STACKSIZE 2048
+#define CONFIG_LWIP_PORT_LINK_DETECT_PRIORITY 5
+#define CONFIG_LWIP_PORT_DHCP_THREAD
+#define CONFIG_LWIP_PORT_DHCP_STACKSIZE 4096
+#define CONFIG_LWIP_PORT_DHCP_PRIORITY 5
+/* end of lwip port thread Configuration */
+/* end of LWIP Freertos Port Configuration */
#define CONFIG_USE_BACKTRACE
-/* CONFIG_USE_FATFS is not set */
+/* CONFIG_USE_FATFS_0_1_4 is not set */
/* CONFIG_USE_SFUD is not set */
/* CONFIG_USE_SPIFFS is not set */
/* CONFIG_USE_AMP is not set */
@@ -376,6 +429,28 @@
#define CONFIG_USE_TLSF
/* CONFIG_USE_SDMMC_CMD is not set */
/* CONFIG_USE_CHERRY_USB is not set */
-/* end of FreeRTOS Setting */
+/* end of Third-Party Configuration */
+
+/* Kernel Configuration */
+
+#define CONFIG_FREERTOS_OPTIMIZED_SCHEDULER
+#define CONFIG_FREERTOS_HZ 1000
+#define CONFIG_FREERTOS_MAX_PRIORITIES 32
+#define CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES 11
+#define CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES 11
+#define CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS 1
+#define CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE 1024
+#define CONFIG_FREERTOS_MAX_TASK_NAME_LEN 32
+#define CONFIG_FREERTOS_TIMER_TASK_PRIORITY 1
+#define CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH 2048
+#define CONFIG_FREERTOS_TIMER_QUEUE_LENGTH 10
+#define CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE 0
+#define CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS
+#define CONFIG_FREERTOS_USE_TRACE_FACILITY
+#define CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS
+/* CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set */
+#define CONFIG_FREERTOS_TOTAL_HEAP_SIZE 10240
+#define CONFIG_FREERTOS_TASK_FPU_SUPPORT 1
+/* end of Kernel Configuration */
#endif
diff --git a/example/network/sockets/udp_multicast/src/Kconfig b/example/network/sockets/udp_multicast/src/Kconfig
index d9d1bde0627c6c29f8ab724506a48c0ccfe055b1..d7f2672303538a8ae38f0ab0e6b66f6f4cf73031 100644
--- a/example/network/sockets/udp_multicast/src/Kconfig
+++ b/example/network/sockets/udp_multicast/src/Kconfig
@@ -2,28 +2,30 @@ menu "Example Configuration"
choice EXAMPLE_IP_MODE
prompt "Multicast IP type"
+ default EXAMPLE_IPV4_V6
help
Example can multicast IPV4, IPV6, or both.
+ config EXAMPLE_IPV4_V6
+ bool "IPV4 & IPV6"
+ select EXAMPLE_IPV4
+ select EXAMPLE_IPV6
+
config EXAMPLE_IPV4_ONLY
bool "IPV4"
select EXAMPLE_IPV4
select USE_IPV4_ONLY
-
- config EXAMPLE_IPV6_ONLY
- bool "IPV6"
- select EXAMPLE_IPV6
-
endchoice
-
+
config EXAMPLE_IPV4
bool
select LWIP_ICMP
-
+ default n
config EXAMPLE_IPV6
bool
select LWIP_IPV6
-
+ default n
+
config EXAMPLE_MULTICAST_IPV4_ADDR
string "Multicast IPV4 Address (send & receive)"
default "232.10.12.10"
@@ -71,7 +73,7 @@ menu "Example Configuration"
config EXAMPLE_MULTICAST_LISTEN_ALL_IF
bool "All interfaces (IPV4 only)"
- depends on !EXAMPLE_IPV6_ONLY
+
config EXAMPLE_MULTICAST_LISTEN_DEFAULT_IF
bool "Default interface"
@@ -80,7 +82,7 @@ menu "Example Configuration"
endmenu
-
+if TARGET_E2000
menu "E2000 board Configuration"
config TARGET_NAME
string "Build Target Name"
@@ -104,4 +106,4 @@ menu "E2000 board Configuration"
endchoice # BUILD_TARGET_ARCH_TYPE
endmenu
-
+endif
diff --git a/example/network/sockets/udp_multicast/src/e2000_board.c b/example/network/sockets/udp_multicast/src/e2000_board.c
new file mode 100644
index 0000000000000000000000000000000000000000..70262245cf2514ef61adac72deed76efc368fbad
--- /dev/null
+++ b/example/network/sockets/udp_multicast/src/e2000_board.c
@@ -0,0 +1,160 @@
+/*
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * All Rights Reserved.
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the Phytium Public License for more details.
+ *
+ *
+ * FilePath: e2000_board.c
+ * Date: 2022-11-07 09:04:21
+ * LastEditTime: 2022-11-07 09:04:21
+ * Description: This file is for lwip e2000 board pin define
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2022/10/21 init
+ * 1.1 liuzhihong 2023/01/12 driver and application restructure
+ */
+
+#include "ftypes.h"
+#include "fpinctrl.h"
+#include "fparameters.h"
+
+int FXmacPhyGpioInit(u32 instance_id, u32 interface_type)
+{
+#if defined(CONFIG_TARGET_E2000Q)
+#if defined(CONFIG_BOARD_TYPE_B)
+ if (instance_id == 3)
+ {
+ if (interface_type == PHY_INTERRUPTFACE_RGMII)
+ {
+ FPinSetConfig(FIOPAD_J37, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_rgmii_txd1_0
+ */
+ FPinSetConfig(FIOPAD_J39, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_rgmii_txd1_1
+ */
+ FPinSetConfig(FIOPAD_G41, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_rgmii_rxd1_0
+ */
+ FPinSetConfig(FIOPAD_E43, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_rgmii_rxd1_1
+ */
+ FPinSetConfig(FIOPAD_L43, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_rgmii_tx_ctl1 */
+ FPinSetConfig(FIOPAD_C43, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_rgmii_rxd1_2 */
+ FPinSetConfig(FIOPAD_E41, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_rgmii_rxd1_3 */
+ FPinSetConfig(FIOPAD_L45, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_rgmii_rx_clk1 */
+ FPinSetConfig(FIOPAD_J43, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_rgmii_rx_ctl1 */
+ FPinSetConfig(FIOPAD_J41, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_rgmii_tx_clk1 */
+ FPinSetDelay(FIOPAD_J41_DELAY, FPIN_OUTPUT_DELAY, FPIN_DELAY_FINE_TUNING, FPIN_DELAY_7);
+ FPinSetDelay(FIOPAD_J41_DELAY, FPIN_OUTPUT_DELAY, FPIN_DELAY_COARSE_TUNING, FPIN_DELAY_5);
+ FPinSetDelayEn(FIOPAD_J41_DELAY, FPIN_OUTPUT_DELAY, 1);
+
+ FPinSetConfig(FIOPAD_L39, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_rgmii_txd1_2 */
+ FPinSetConfig(FIOPAD_E37, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_rgmii_txd1_3 */
+ FPinSetConfig(FIOPAD_E35, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_mdc_mac3 */
+ FPinSetConfig(FIOPAD_G35, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_mdio_mac3 */
+ }
+ else if (interface_type == PHY_INTERRUPTFACE_SGMII)
+ {
+ FPinSetConfig(FIOPAD_E35, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_mdc_mac3 */
+ FPinSetConfig(FIOPAD_G35, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_mdio_mac3 */
+ }
+ else
+ {
+ printf("Interface_type 0x%x is not support.\r\n");
+ return -1;
+ }
+ }
+#elif defined(CONFIG_BOARD_TYPE_C)
+ if (instance_id == 1)
+ {
+ FPinSetConfig(FIOPAD_AJ53, FPIN_FUNC3, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_mdc_mac1 */
+ FPinSetConfig(FIOPAD_AL49, FPIN_FUNC3, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_mdio_mac1 */
+ }
+ else if (instance_id == 2)
+ {
+ FPinSetConfig(FIOPAD_E29, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_mdc_mac2 */
+ FPinSetConfig(FIOPAD_G29, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_mdio_mac2 */
+ }
+ else if (instance_id == 3)
+ {
+ FPinSetConfig(FIOPAD_E35, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_mdc_mac3 */
+ FPinSetConfig(FIOPAD_G35, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_mdio_mac3 */
+ }
+ else
+ {
+ printf("Interface_type 0x%x is not support.\r\n");
+ return -1;
+ }
+#endif
+#elif defined(CONFIG_TARGET_E2000D) || defined(CONFIG_TARGET_E2000S)
+
+#if defined(CONFIG_BOARD_TYPE_B)
+ if (instance_id == 3)
+ {
+ if (interface_type == PHY_INTERRUPTFACE_RGMII)
+ {
+ FPinSetConfig(FIOPAD_J33, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_rgmii_txd1_0
+ */
+ FPinSetConfig(FIOPAD_J35, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_rgmii_txd1_1
+ */
+ FPinSetConfig(FIOPAD_G37, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_rgmii_rxd1_0
+ */
+ FPinSetConfig(FIOPAD_E39, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_rgmii_rxd1_1
+ */
+ FPinSetConfig(FIOPAD_L39, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_rgmii_tx_ctl1 */
+ FPinSetConfig(FIOPAD_C39, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_rgmii_rxd1_2 */
+ FPinSetConfig(FIOPAD_E37, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_rgmii_rxd1_3 */
+ FPinSetConfig(FIOPAD_L41, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_rgmii_rx_clk1 */
+ FPinSetConfig(FIOPAD_J39, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_rgmii_rx_ctl1 */
+ FPinSetConfig(FIOPAD_J37, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_rgmii_tx_clk1 */
+ FPinSetDelay(FIOPAD_J37_DELAY, FPIN_OUTPUT_DELAY, FPIN_DELAY_COARSE_TUNING, FPIN_DELAY_5);
+ FPinSetDelay(FIOPAD_J37_DELAY, FPIN_OUTPUT_DELAY, FPIN_DELAY_FINE_TUNING, FPIN_DELAY_7);
+ FPinSetDelayEn(FIOPAD_J37_DELAY, FPIN_OUTPUT_DELAY, 1);
+ FPinSetConfig(FIOPAD_L35, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_rgmii_txd1_2 */
+ FPinSetConfig(FIOPAD_E33, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_rgmii_txd1_3 */
+ FPinSetConfig(FIOPAD_E31, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_mdc_mac3 */
+ FPinSetConfig(FIOPAD_G31, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_mdio_mac3 */
+ }
+ else if (interface_type == PHY_INTERRUPTFACE_SGMII)
+ {
+ FPinSetConfig(FIOPAD_E31, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_mdc_mac3 */
+ FPinSetConfig(FIOPAD_G31, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_mdio_mac3 */
+ }
+ else
+ {
+ printf("Interface_type 0x%x is not support.\r\n");
+ return -1;
+ }
+ }
+#elif defined(CONFIG_BOARD_TYPE_C)
+ if (instance_id == 1)
+ {
+ FPinSetConfig(FIOPAD_AJ49, FPIN_FUNC3, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_mdc_mac1 */
+ FPinSetConfig(FIOPAD_AL45, FPIN_FUNC3, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_mdio_mac1 */
+ }
+ else if (instance_id == 2)
+ {
+ FPinSetConfig(FIOPAD_E25, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_mdc_mac2 */
+ FPinSetConfig(FIOPAD_G25, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_mdio_mac2 */
+ }
+ else if (instance_id == 3)
+ {
+ FPinSetConfig(FIOPAD_E31, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_mdc_mac3 */
+ FPinSetConfig(FIOPAD_G31, FPIN_FUNC1, FPIN_PULL_NONE, FPIN_DRV4); /* gsd_gmu_mdio_mac3 */
+ }
+ else
+ {
+ printf("Interface_type 0x%x is not support.\r\n");
+ return -1;
+ }
+#endif
+
+#endif
+
+
+}
\ No newline at end of file
diff --git a/example/network/sockets/udp_multicast/src/lwip_test.c b/example/network/sockets/udp_multicast/src/lwip_test.c
index 80206a378fba5df92460445fc83d2a61e5a13c6d..dc88a18402036a40c363dbdb461265020712cdeb 100644
--- a/example/network/sockets/udp_multicast/src/lwip_test.c
+++ b/example/network/sockets/udp_multicast/src/lwip_test.c
@@ -1,27 +1,28 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: lwip_test.c
- * Date: 2022-09-15 10:24:38
- * LastEditTime: 2022-09-15 10:24:38
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
+ * Date: 2022-06-06 22:57:08
+ * LastEditTime: 2022-06-06 22:57:08
+ * Description: This file is for lwip test example
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 huanghe 2022/10/21 init
+ * 1.1 liuzhihong 2023/01/12 driver and application restructure
*/
-
#include
#include
#include "strto.h"
@@ -29,41 +30,52 @@
#include "FreeRTOS.h"
#include "task.h"
#include "ftypes.h"
-#include "fpinctrl.h"
+#include "fassert.h"
+#include "fparameters.h"
#ifndef SDK_CONFIG_H__
- #error "Please include sdkconfig.h first"
+ #error "Please include sdkconfig.h first"
#endif
+
#include "lwipopts.h"
#include "lwip_port.h"
#include "lwip/ip4_addr.h"
#include "lwip/init.h"
#include "netif/ethernet.h"
-#include "ethernetif.h"
#include "lwip/netif.h"
#include "lwip/tcpip.h"
+#include "lwip/inet.h"
#include "../src/shell.h"
#if defined(CONFIG_TARGET_E2000)
-#define PHY_INTERRUPTFACE_RGMII 0
-#define PHY_INTERRUPTFACE_SGMII 1
+ extern int FXmacPhyGpioInit(u32 instance_id, u32 interface_type);
#endif
-
#if LWIP_IPV6
-#include "lwip/ip.h"
-#include "lwip/ip6_addr.h"
+ #include "lwip/ip.h"
+ #include "lwip/ip6_addr.h"
#else
-#if LWIP_DHCP
-#include "lwip/dhcp.h"
+ #if LWIP_DHCP
+ #include "lwip/dhcp.h"
+ #endif
#endif
-#endif
-
+typedef struct
+{
+ const char *ipaddr;
+ const char *gateway;
+ const char *netmask;
+} InputAddress;
-user_config lwip_mac_config = {0};
+typedef struct
+{
+ UserConfig lwip_mac_config;
+ InputAddress input_address;
+ u32 dhcp_en;
+} InputConfig;
+static InputConfig input_config = {0};
#if !LWIP_IPV6
#if LWIP_DHCP
@@ -72,140 +84,114 @@ void LwipDhcpTest(struct netif *echo_netif)
{
int mscnt = 0;
dhcp_start(echo_netif);
- printf("LwipDhcpTest is start \r\n");
+ printf("LwipDhcpTest is start.\r\n");
while (1)
{
- vTaskDelay(DHCP_FINE_TIMER_MSECS / portTICK_RATE_MS);
- dhcp_fine_tmr();
- mscnt += DHCP_FINE_TIMER_MSECS;
- if (mscnt >= DHCP_COARSE_TIMER_SECS*1000)
+ vTaskDelay(DHCP_FINE_TIMER_MSECS / portTICK_RATE_MS);
+ dhcp_fine_tmr();
+ mscnt += DHCP_FINE_TIMER_MSECS;
+ if (mscnt >= DHCP_COARSE_TIMER_SECS * 1000)
{
- dhcp_coarse_tmr();
- mscnt = 0;
- }
- }
+ dhcp_coarse_tmr();
+ mscnt = 0;
+ }
+ }
}
#endif
#endif
-void LwipTestCreate(void * args)
+void LwipTestCreate(void *args)
{
- struct netif *echo_netif;
+ FASSERT(args != NULL);
+ struct netif *netif_p = NULL;
static boolean init_flag = FALSE;
+ InputConfig *input_conf = (InputConfig *)args;
+ ip_addr_t ipaddr = {0}, netmask = {0}, gw = {0};
BaseType_t ret = pdPASS;
/* the mac address of the board. this should be unique per board */
- unsigned char mac_ethernet_address[] =
- {0x98, 0x0e, 0x24, 0x00, 0x11, 0x22};
+ unsigned char mac_address[6] =
+ {0x98, 0x0e, 0x24, 0x00, 0x11, 0};
- echo_netif = pvPortMalloc(sizeof(struct netif));
- if(echo_netif == NULL)
+ netif_p = pvPortMalloc(sizeof(struct netif)); /* 暂未回收内存 */
+ if (netif_p == NULL)
{
- printf("malloc netif is error \r\n");
+ printf("Malloc netif is error.\r\n");
goto exit;
}
+ printf("netif_p is %p .\r\n", netif_p);
+ mac_address[5] = input_conf->lwip_mac_config.mac_instance;
-#if !LWIP_IPV6
- ip_addr_t ipaddr, netmask, gw;
-#if LWIP_DHCP
- ipaddr.addr = 0;
- gw.addr = 0;
- netmask.addr = 0;
-#else
- /* initialize IP addresses to be used */
- IP4_ADDR(&ipaddr, 192, 168, 4, 10);
- IP4_ADDR(&netmask, 255, 255, 255, 0);
- IP4_ADDR(&gw, 192, 168, 4, 1);
-#endif
-#endif
+
+ /* convert string to a binary address */
+ if (input_conf->input_address.ipaddr)
+ {
+ if (inet_aton(input_conf->input_address.ipaddr, &ipaddr) == 0)
+ {
+ goto failed;
+ }
+ }
+
+ if (input_conf->input_address.gateway)
+ {
+ if (inet_aton(input_conf->input_address.gateway, &gw) == 0)
+ {
+ goto failed;
+ }
+ }
+
+ if (input_conf->input_address.netmask)
+ {
+ if (inet_aton(input_conf->input_address.netmask, &netmask) == 0)
+ {
+ goto failed;
+ }
+ }
/* 初始化LwIP堆 */
- if(init_flag == FALSE)
+ if (init_flag == FALSE)
{
tcpip_init(NULL, NULL);
init_flag = TRUE;
}
-#if !LWIP_IPV6
- /* Add network interface to the netif_list, and set it as default */
- if (!lwip_port_add(echo_netif, &ipaddr, &netmask,
- &gw, mac_ethernet_address,
- (user_config *)args))
- {
- printf("Error adding N/W interface\n\r");
- return ;
- }
- printf("lwip_port_add is over \n\r");
-#else
- /* Add network interface to the netif_list, and set it as default */
- if (!lwip_port_add(echo_netif, NULL, NULL, NULL, mac_ethernet_address, (user_config *)args))
- {
- printf("Error adding N/W interface\n\r");
- return ;
- }
- echo_netif->ip6_autoconfig_enabled = 1;
-
- netif_create_ip6_linklocal_address(echo_netif, 1);
- netif_ip6_addr_set_state(echo_netif, 0, IP6_ADDR_VALID);
-
- printf("Board IPv6 address %x:%x:%x:%x:%x:%x:%x:%x\n\r",
- IP6_ADDR_BLOCK1(&echo_netif->ip6_addr[0].u_addr.ip6),
- IP6_ADDR_BLOCK2(&echo_netif->ip6_addr[0].u_addr.ip6),
- IP6_ADDR_BLOCK3(&echo_netif->ip6_addr[0].u_addr.ip6),
- IP6_ADDR_BLOCK4(&echo_netif->ip6_addr[0].u_addr.ip6),
- IP6_ADDR_BLOCK5(&echo_netif->ip6_addr[0].u_addr.ip6),
- IP6_ADDR_BLOCK6(&echo_netif->ip6_addr[0].u_addr.ip6),
- IP6_ADDR_BLOCK7(&echo_netif->ip6_addr[0].u_addr.ip6),
- IP6_ADDR_BLOCK8(&echo_netif->ip6_addr[0].u_addr.ip6));
+ /* Add network interface to the netif_list, and set it as default */
+ if (!LwipPortAdd(netif_p, &ipaddr, &netmask,
+ &gw, mac_address,
+ (UserConfig *)args, 0))
+ {
+ printf("Error adding N/W interface.\r\n");
+ return ;
+ }
+ printf("LwipPortAdd is over.\r\n");
+#if (LWIP_IPV6 == 1)
+ netif_p->ip6_autoconfig_enabled = 1;
+ netif_create_ip6_linklocal_address(netif_p, 1);
+ netif_ip6_addr_set_state(netif_p, 0, IP6_ADDR_VALID);
#endif
- netif_set_default(echo_netif);
+ netif_set_default(netif_p);
- if (netif_is_link_up(echo_netif))
+ if (netif_is_link_up(netif_p))
{
/* 当netif完全配置好时,必须调用该函数 */
- netif_set_up(echo_netif);
+ netif_set_up(netif_p);
+ if (input_conf->dhcp_en)
+ {
+ LwipPortDhcpSet(netif_p, TRUE);
+ }
}
else
{
/* 当netif链接关闭时,必须调用该函数 */
- netif_set_down(echo_netif);
+ netif_set_down(netif_p);
}
- printf("neftwork setup complete\n");
-
- if (xTaskCreate((TaskFunction_t )lwip_port_input_thread,
- "recv_echo",
- 8192,
- echo_netif,
- 4,
- NULL) != pdPASS)
- {
- printf("xTaskCreate is Error %s\r\n", "recv_echo");
- FASSERT(0);
- }
-
-#if LWIP_DHCP && LWIP_IPV4
- /* Create a new DHCP client for this interface.
- * Note: you must call dhcp_fine_tmr() and dhcp_coarse_tmr() at
- * the predefined regular intervals after starting the client.
- */
- printf("dhcp_start...\r\n");
-
- ret = xTaskCreate((TaskFunction_t )LwipDhcpTest, /* 任务入口函数 */
- (const char* )"LwipDhcpTest",/* 任务名字 */
- (uint16_t )4096, /* 任务栈大小 */
- (void* )(echo_netif),/* 任务入口函数参数 */
- (UBaseType_t )configMAX_PRIORITIES-1, /* 任务的优先级 */
- (TaskHandle_t* )&appTaskCreateHandle); /* 任务控制 */
-
- if (pdPASS == ret)
- {
- printf("create lwip dhcp task success!\r\n");
- }
-
-#endif
+ printf("Network setup complete.\r\n");
+ goto exit ;
+failed:
+ vPortFree(netif_p);
exit:
vTaskDelete(NULL);
}
@@ -217,169 +203,40 @@ void LwipTest(void *args)
(const char *)"LwipTestCreate", /* 任务名字 */
(uint16_t)2048, /* 任务栈大小 */
(void *)args, /* 任务入口函数参数 */
- (UBaseType_t)configMAX_PRIORITIES-1,/* 任务的优先级 */
+ (UBaseType_t)configMAX_PRIORITIES - 1, /* 任务的优先级 */
NULL); /* 任务控制块指针 */
- FASSERT_MSG(ret == pdPASS,"LwipTestCreate Task create is failed");
-
+ FASSERT_MSG(ret == pdPASS, "LwipTestCreate Task create is failed");
}
-int FXmacPhyGpioInit(u32 instance_id,u32 interface_type)
-{
-#if defined(CONFIG_TARGET_E2000Q)
-#if defined(CONFIG_BOARD_TYPE_B)
- if(instance_id == 3)
- {
- if(interface_type == PHY_INTERRUPTFACE_RGMII)
- {
- FPinSetConfig(FIOPAD_J37,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_rgmii_txd1_0
- */
- FPinSetConfig(FIOPAD_J39,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_rgmii_txd1_1
- */
- FPinSetConfig(FIOPAD_G41,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_rgmii_rxd1_0
- */
- FPinSetConfig(FIOPAD_E43,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_rgmii_rxd1_1
- */
- FPinSetConfig(FIOPAD_L43,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_rgmii_tx_ctl1 */
- FPinSetConfig(FIOPAD_C43,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_rgmii_rxd1_2 */
- FPinSetConfig(FIOPAD_E41,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_rgmii_rxd1_3 */
- FPinSetConfig(FIOPAD_L45,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_rgmii_rx_clk1 */
- FPinSetConfig(FIOPAD_J43,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_rgmii_rx_ctl1 */
- FPinSetConfig(FIOPAD_J41,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_rgmii_tx_clk1 */
- FPinSetDelay(FIOPAD_J41_DELAY,FPIN_OUTPUT_DELAY,FPIN_DELAY_FINE_TUNING,FPIN_DELAY_7);
- FPinSetDelay(FIOPAD_J41_DELAY,FPIN_OUTPUT_DELAY,FPIN_DELAY_COARSE_TUNING,FPIN_DELAY_5);
- FPinSetDelayEn(FIOPAD_J41_DELAY,FPIN_OUTPUT_DELAY,1);
-
- FPinSetConfig(FIOPAD_L39,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_rgmii_txd1_2 */
- FPinSetConfig(FIOPAD_E37,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_rgmii_txd1_3 */
- FPinSetConfig(FIOPAD_E35,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_mdc_mac3 */
- FPinSetConfig(FIOPAD_G35,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_mdio_mac3 */
- }
- else if(interface_type == PHY_INTERRUPTFACE_SGMII)
- {
- FPinSetConfig(FIOPAD_E35,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_mdc_mac3 */
- FPinSetConfig(FIOPAD_G35,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_mdio_mac3 */
- }
- else
- {
- printf("interface_type 0x%x is not support \r\n");
- return -1;
- }
- }
-#elif defined(CONFIG_BOARD_TYPE_C)
- if(instance_id == 1)
- {
- FPinSetConfig(FIOPAD_AJ53,FPIN_FUNC3,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_mdc_mac1 */
- FPinSetConfig(FIOPAD_AL49,FPIN_FUNC3,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_mdio_mac1 */
- }
- else if(instance_id == 2)
- {
- FPinSetConfig(FIOPAD_E29,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_mdc_mac2 */
- FPinSetConfig(FIOPAD_G29,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_mdio_mac2 */
- }
- else if(instance_id == 3)
- {
- FPinSetConfig(FIOPAD_E35,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_mdc_mac3 */
- FPinSetConfig(FIOPAD_G35,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_mdio_mac3 */
- }
- else
- {
- printf("interface_type 0x%x is not support \r\n");
- return -1;
- }
-#endif
-#elif defined(CONFIG_TARGET_E2000D) || defined(CONFIG_TARGET_E2000S)
-
-#if defined(CONFIG_BOARD_TYPE_B)
- if(instance_id == 3)
- {
- if(interface_type == PHY_INTERRUPTFACE_RGMII)
- {
- FPinSetConfig(FIOPAD_J33,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_rgmii_txd1_0
- */
- FPinSetConfig(FIOPAD_J35,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_rgmii_txd1_1
- */
- FPinSetConfig(FIOPAD_G37,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_rgmii_rxd1_0
- */
- FPinSetConfig(FIOPAD_E39,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_rgmii_rxd1_1
- */
- FPinSetConfig(FIOPAD_L39,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_rgmii_tx_ctl1 */
- FPinSetConfig(FIOPAD_C39,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_rgmii_rxd1_2 */
- FPinSetConfig(FIOPAD_E37,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_rgmii_rxd1_3 */
- FPinSetConfig(FIOPAD_L41,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_rgmii_rx_clk1 */
- FPinSetConfig(FIOPAD_J39,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_rgmii_rx_ctl1 */
- FPinSetConfig(FIOPAD_J37,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_rgmii_tx_clk1 */
- FPinSetDelay(FIOPAD_J37_DELAY,FPIN_OUTPUT_DELAY,FPIN_DELAY_COARSE_TUNING,FPIN_DELAY_5);
- FPinSetDelay(FIOPAD_J37_DELAY,FPIN_OUTPUT_DELAY,FPIN_DELAY_FINE_TUNING,FPIN_DELAY_7);
- FPinSetDelayEn(FIOPAD_J37_DELAY,FPIN_OUTPUT_DELAY,1);
- FPinSetConfig(FIOPAD_L35,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_rgmii_txd1_2 */
- FPinSetConfig(FIOPAD_E33,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_rgmii_txd1_3 */
- FPinSetConfig(FIOPAD_E31,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_mdc_mac3 */
- FPinSetConfig(FIOPAD_G31,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_mdio_mac3 */
- }
- else if(interface_type == PHY_INTERRUPTFACE_SGMII)
- {
- FPinSetConfig(FIOPAD_E31,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_mdc_mac3 */
- FPinSetConfig(FIOPAD_G31,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_mdio_mac3 */
- }
- else
- {
- printf("interface_type 0x%x is not support \r\n");
- return -1;
- }
- }
-#elif defined(CONFIG_BOARD_TYPE_C)
- if(instance_id == 1)
- {
- FPinSetConfig(FIOPAD_AJ49,FPIN_FUNC3,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_mdc_mac1 */
- FPinSetConfig(FIOPAD_AL45,FPIN_FUNC3,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_mdio_mac1 */
- }
- else if(instance_id == 2)
- {
- FPinSetConfig(FIOPAD_E25,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_mdc_mac2 */
- FPinSetConfig(FIOPAD_G25,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_mdio_mac2 */
- }
- else if(instance_id == 3)
- {
- FPinSetConfig(FIOPAD_E31,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_mdc_mac3 */
- FPinSetConfig(FIOPAD_G31,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_mdio_mac3 */
- }
- else
- {
- printf("interface_type 0x%x is not support \r\n");
- return -1;
- }
-
-#endif
-
-#endif
-
-}
-
-
static int LwipDeviceSet(int argc, char *argv[])
{
- u32 id = 0,type = 0;
-
- static int probe_flg = 0;
- LWIP_PORT_CONFIG_DEFAULT_INIT(lwip_mac_config);
+ u32 id = 0, type = 0;
+ const char *ipaddr = NULL;
+ const char *gateway = NULL;
+ const char *netmask = NULL;
+ memset(&input_config, 0, sizeof(input_config));
+ LWIP_PORT_CONFIG_DEFAULT_INIT(input_config.lwip_mac_config);
if (!strcmp(argv[1], "probe"))
{
- if(probe_flg == 1)
- {
- printf("The initialization of the instance is complete. Do not repeat this process \r\n") ;
- return -1;
- }
-
- switch(argc)
+ switch (argc)
{
+ case 8:
+ netmask = argv[7];
+ case 7:
+ gateway = argv[6];
+ case 6:
+ ipaddr = argv[5];
+ input_config.input_address.ipaddr = ipaddr;
+ input_config.input_address.gateway = gateway;
+ input_config.input_address.netmask = netmask;
+ case 5:
+ input_config.dhcp_en = (u32)simple_strtoul(argv[4], NULL, 10);
case 4:
type = (u32)simple_strtoul(argv[3], NULL, 10);
- id = (u32)simple_strtoul(argv[2], NULL, 10);
- break;
case 3:
id = (u32)simple_strtoul(argv[2], NULL, 10);
break;
@@ -388,29 +245,62 @@ static int LwipDeviceSet(int argc, char *argv[])
}
printf("types %d\n", type);
printf("id %d\n", id);
- FXmacPhyGpioInit(id,type);
- lwip_mac_config.mac_instance = id;
- if(type == 0)
+
+#if defined(CONFIG_TARGET_E2000)
+ FXmacPhyGpioInit(id, type);
+#endif
+ input_config.lwip_mac_config.mac_instance = id;
+ input_config.lwip_mac_config.name[0] = 'e';
+ itoa(id, &input_config.lwip_mac_config.name[1], 10);
+ if (type == 0)
{
- lwip_mac_config.mii_interface = LWIP_PORT_INTERFACE_RGMII;
+ input_config.lwip_mac_config.mii_interface = LWIP_PORT_INTERFACE_RGMII;
}
else
{
- lwip_mac_config.mii_interface = LWIP_PORT_INTERFACE_SGMII;
+ input_config.lwip_mac_config.mii_interface = LWIP_PORT_INTERFACE_SGMII;
+ }
+
+ LwipTest(&input_config);
+ }
+ else if (!strcmp(argv[1], "deinit"))
+ {
+ if (argc <= 1)
+ {
+ printf("Please enter lwip deinit \r\n") ;
+ printf(" -- use name to deinit neitf object \r\n");
+ printf(" -- is netif name \r\n");
+ return -1;
+ }
+ struct netif *netif_p = NULL;
+ netif_p = LwipPortGetByName(argv[2]);
+ if (netif_p == NULL)
+ {
+ printf("Netif %s is not invalid \r\n", argv[2]);
+ return -1;
}
- LwipTest(&lwip_mac_config);
- probe_flg = 1;
+ /* close rx thread */
+ vPortEnterCritical();
+ LwipPortStop(netif_p);
+ vPortFree(netif_p);
+ vPortExitCritical();
}
else
{
- printf("Please enter xmac probe \r\n") ;
+ printf("Please enter lwip probe \r\n") ;
printf(" -- device id is mac instance number \r\n");
printf(" -- interface id is media independent interface , 0 is rgmii ,1 is sgmii \r\n");
+ printf(" -- dhcp_en is dhcp function set ,1 is enable ,0 is disable .But this depends on whether the protocol stack supports it ");
+ printf(" -- Ip address of netif \r\n");
+ printf(" -- Gateway of netif \r\n");
+ printf(" -- Netmask of netif \r\n");
+ printf("Please enter lwip deinit \r\n") ;
+ printf(" -- use name to deinit neitf object \r\n");
+ printf(" -- is netif name \r\n");
}
-
return 0;
}
-SHELL_EXPORT_CMD(SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN), xmac, LwipDeviceSet, Setup LWIP device test);
+SHELL_EXPORT_CMD(SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN), lwip, LwipDeviceSet, Setup LWIP device test);
diff --git a/example/network/sockets/udp_multicast/src/multicast.c b/example/network/sockets/udp_multicast/src/multicast.c
index 809fa1c7bed71b3afbca363424b5620c7b76f5ef..9822bc02d61241a19f61ec08888b8c3c6ea09f41 100644
--- a/example/network/sockets/udp_multicast/src/multicast.c
+++ b/example/network/sockets/udp_multicast/src/multicast.c
@@ -1,24 +1,26 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: multicast.c
* Date: 2022-09-15 10:19:11
* LastEditTime: 2022-09-15 10:19:11
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
+ * Description: This file is for running multicast example task
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 huanghe 2022/10/21 init
+ * 1.1 liuzhihong 2023/01/12 driver and application restructure
*/
#include
@@ -27,14 +29,15 @@
#include "task.h"
#include "event_groups.h"
#include "err.h"
+
+#include "netif.h"
#include "sockets.h"
#include "sockets_ext.h"
-#include "sys.h"
-#include "netif.h"
#include
+#include "lwip_port.h"
+
#include "ftypes.h"
#include "shell.h"
-
#include "fdebug.h"
#define MULTICAST_DEBUG_TAG "MULTICAST"
@@ -60,9 +63,9 @@
#define UDP_PORT CONFIG_EXAMPLE_PORT
#if defined(CONFIG_EXAMPLE_LOOPBACK)
-#define MULTICAST_LOOPBACK 1
+ #define MULTICAST_LOOPBACK 1
#else
-#define MULTICAST_LOOPBACK 0
+ #define MULTICAST_LOOPBACK 0
#endif
#define MULTICAST_TTL CONFIG_EXAMPLE_MULTICAST_TTL
@@ -71,12 +74,15 @@
#define MULTICAST_IPV6_ADDR CONFIG_EXAMPLE_MULTICAST_IPV6_ADDR
#if defined(EXAMPLE_MULTICAST_LISTEN_ALL_IF)
-#define LISTEN_ALL_IF 1
+ #define LISTEN_ALL_IF 1
#else
-#define LISTEN_ALL_IF 0
+ #define LISTEN_ALL_IF 0
#endif
-
+char eth_name[2] = {0};
+static int multicast_sock = 0;
+TaskHandle_t multicast_handle = NULL;
+static struct netif *netif_p = NULL;
#ifdef CONFIG_EXAMPLE_IPV4
/* Add a socket, either IPV4-only or IPV6 dual mode, to the IPV4
@@ -94,53 +100,58 @@ static int socket_add_ipv4_multicast_group(int sock, boolean assign_source_if)
ip_addr_t ipaddr;
/* use default netif */
- extern struct netif *netif_default;
- if(netif_default == NULL)
+ extern struct netif *netif_default;
+ if (netif_default == NULL)
{
- printf("default netif not set \n");
+ printf("default netif not set.\r\n");
goto err;
}
+
inet_addr_from_ip4addr(&iaddr, netif_ip4_addr(netif_default));
-
+
#endif /* LISTEN_ALL_IF */
/* Configure multicast address to listen to */
err = inet_aton(MULTICAST_IPV4_ADDR, &imreq.imr_multiaddr.s_addr);
- if (err != 1) {
+ if (err != 1)
+ {
IPV4_PRINT_E("Configured IPV4 multicast address '%s' is invalid.", MULTICAST_IPV4_ADDR);
- // Errors in the return value have to be negative
err = -1;
goto err;
}
- MULTICAST_PRINT_I( "Configured IPV4 Multicast address %s", inet_ntoa(imreq.imr_multiaddr.s_addr));
- if (!IP_MULTICAST(ntohl(imreq.imr_multiaddr.s_addr))) {
- IPV4_PRINT_W( "Configured IPV4 multicast address '%s' is not a valid multicast address. This will probably not work.", MULTICAST_IPV4_ADDR);
+ MULTICAST_PRINT_I("Configured IPV4 Multicast address %s", inet_ntoa(imreq.imr_multiaddr.s_addr));
+ if (!IP_MULTICAST(ntohl(imreq.imr_multiaddr.s_addr)))
+ {
+ IPV4_PRINT_W("Configured IPV4 multicast address '%s' is not a valid multicast address. This will probably not work.", MULTICAST_IPV4_ADDR);
}
- if (assign_source_if) {
+ if (assign_source_if)
+ {
/* Assign the IPv4 multicast source interface, via its IP
(only necessary if this socket is IPV4 only) */
err = setsockopt(sock, IPPROTO_IP, IP_MULTICAST_IF, &iaddr,
sizeof(struct in_addr));
- if (err < 0) {
+ if (err < 0)
+ {
IPV4_PRINT_E("Failed to set IP_MULTICAST_IF. Error %d", errno);
goto err;
}
}
err = setsockopt(sock, IPPROTO_IP, IP_ADD_MEMBERSHIP,
- &imreq, sizeof(struct ip_mreq));
- if (err < 0) {
+ &imreq, sizeof(struct ip_mreq));
+ if (err < 0)
+ {
IPV4_PRINT_E("Failed to set IP_ADD_MEMBERSHIP. Error %d", errno);
goto err;
}
- err:
+err:
return err;
}
#endif /* CONFIG_EXAMPLE_IPV4 */
#ifdef CONFIG_EXAMPLE_IPV6
-static int create_multicast_ipv6_socket(void)
+static int create_multicast_ipv6_socket(struct netif *netif_test)
{
struct sockaddr_in6 saddr = { 0 };
int netif_index;
@@ -151,8 +162,9 @@ static int create_multicast_ipv6_socket(void)
int err = 0;
sock = socket(PF_INET6, SOCK_DGRAM, IPPROTO_IPV6);
- if (sock < 0) {
- IPV6_PRINT_E( "Failed to create socket. Error %d", errno);
+ if (sock < 0)
+ {
+ IPV6_PRINT_E("Failed to create socket. Error %d", errno);
return -1;
}
@@ -161,8 +173,9 @@ static int create_multicast_ipv6_socket(void)
saddr.sin6_port = htons(UDP_PORT);
bzero(&saddr.sin6_addr.un, sizeof(saddr.sin6_addr.un));
err = bind(sock, (struct sockaddr *)&saddr, sizeof(struct sockaddr_in6));
- if (err < 0) {
- IPV6_PRINT_E( "Failed to bind socket. Error %d", errno);
+ if (err < 0)
+ {
+ IPV6_PRINT_E("Failed to bind socket. Error %d", errno);
goto err;
}
@@ -174,39 +187,36 @@ static int create_multicast_ipv6_socket(void)
/* Read interface adapter link-local address and use it
to bind the multicast IF to this socket.*/
- extern struct netif *netif_default;
- if(netif_default == NULL)
- {
- printf("default netif not set \n");
- goto err;
- }
- memcpy(&if_ipaddr, &netif_default->ip6_addr[0], sizeof(ip6_addr_t));
+ memcpy(&if_ipaddr, &netif_test->ip6_addr[0], sizeof(ip6_addr_t));
inet6_addr_from_ip6addr(&if_inaddr, &if_ipaddr);
- inet6_ntoa_r(if_inaddr, addrbuf, sizeof(addrbuf)-1);
- printf("addrbuf is %s \r\n",addrbuf);
+ inet6_ntoa_r(if_inaddr, addrbuf, sizeof(addrbuf) - 1);
+ printf("addrbuf is %s .\r\n", addrbuf);
#endif /* LISTEN_ALL_IF */
/* search for netif index */
- netif_index = netif_get_index(netif_default);
- if(netif_index < 0) {
- IPV6_PRINT_E( "Failed to get netif index");
+ netif_index = netif_get_index(netif_test);
+ if (netif_index < 0)
+ {
+ IPV6_PRINT_E("Failed to get netif index");
goto err;
}
-
+
/* Assign the multicast source interface, via its IP */
- err = setsockopt(sock, IPPROTO_IPV6, IPV6_MULTICAST_IF, &netif_index,sizeof(uint8_t));
- if (err < 0) {
- IPV6_PRINT_E( "Failed to set IPV6_MULTICAST_IF. Error %d", errno);
+ err = setsockopt(sock, IPPROTO_IPV6, IPV6_MULTICAST_IF, &netif_index, sizeof(uint8_t));
+ if (err < 0)
+ {
+ IPV6_PRINT_E("Failed to set IPV6_MULTICAST_IF. Error %d", errno);
goto err;
}
/* Assign multicast TTL (set separately from normal interface TTL) */
uint8_t ttl = MULTICAST_TTL;
setsockopt(sock, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, &ttl, sizeof(uint8_t));
- if (err < 0) {
- IPV6_PRINT_E( "Failed to set IPV6_MULTICAST_HOPS. Error %d", errno);
+ if (err < 0)
+ {
+ IPV6_PRINT_E("Failed to set IPV6_MULTICAST_HOPS. Error %d", errno);
goto err;
}
@@ -216,8 +226,9 @@ static int create_multicast_ipv6_socket(void)
uint8_t loopback_val = MULTICAST_LOOPBACK;
err = setsockopt(sock, IPPROTO_IPV6, IPV6_MULTICAST_LOOP,
&loopback_val, sizeof(uint8_t));
- if (err < 0) {
- IPV6_PRINT_E( "Failed to set IPV6_MULTICAST_LOOP. Error %d", errno);
+ if (err < 0)
+ {
+ IPV6_PRINT_E("Failed to set IPV6_MULTICAST_LOOP. Error %d", errno);
goto err;
}
#endif
@@ -227,22 +238,25 @@ static int create_multicast_ipv6_socket(void)
#ifdef CONFIG_EXAMPLE_IPV6
/* Configure multicast address to listen to */
err = inet6_aton(MULTICAST_IPV6_ADDR, &v6imreq.ipv6mr_multiaddr);
- if (err != 1) {
- IPV6_PRINT_E( "Configured IPV6 multicast address '%s' is invalid.", MULTICAST_IPV6_ADDR);
+ if (err != 1)
+ {
+ IPV6_PRINT_E("Configured IPV6 multicast address '%s' is invalid.", MULTICAST_IPV6_ADDR);
goto err;
}
- MULTICAST_PRINT_I( "Configured IPV6 Multicast address %s", inet6_ntoa(v6imreq.ipv6mr_multiaddr));
+ MULTICAST_PRINT_I("Configured IPV6 Multicast address %s", inet6_ntoa(v6imreq.ipv6mr_multiaddr));
ip6_addr_t multi_addr;
inet6_addr_to_ip6addr(&multi_addr, &v6imreq.ipv6mr_multiaddr);
- if (!ip6_addr_ismulticast(&multi_addr)) {
- MULTICAST_PRINT_W( "Configured IPV6 multicast address '%s' is not a valid multicast address. This will probably not work.", MULTICAST_IPV6_ADDR);
+ if (!ip6_addr_ismulticast(&multi_addr))
+ {
+ MULTICAST_PRINT_W("Configured IPV6 multicast address '%s' is not a valid multicast address. This will probably not work.", MULTICAST_IPV6_ADDR);
}
/* Configure source interface */
v6imreq.ipv6mr_interface = (unsigned int)netif_index;
err = setsockopt(sock, IPPROTO_IPV6, IPV6_ADD_MEMBERSHIP,
&v6imreq, sizeof(struct ipv6_mreq));
- if (err < 0) {
- IPV6_PRINT_E( "Failed to set IPV6_ADD_MEMBERSHIP. Error %d", errno);
+ if (err < 0)
+ {
+ IPV6_PRINT_E("Failed to set IPV6_ADD_MEMBERSHIP. Error %d", errno);
goto err;
}
#endif
@@ -250,11 +264,11 @@ static int create_multicast_ipv6_socket(void)
int only = 1; /* IPV6-only socket */
err = setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, &only, sizeof(int));
- if (err < 0) {
- IPV6_PRINT_E( "Failed to set IPV6_V6ONLY. Error %d", errno);
+ if (err < 0)
+ {
+ IPV6_PRINT_E("Failed to set IPV6_V6ONLY. Error %d", errno);
goto err;
}
- MULTICAST_PRINT_I( "Socket set IPV6-only");
/* All set, socket is configured for sending and receiving */
return sock;
@@ -273,7 +287,8 @@ static int create_multicast_ipv4_socket(void)
int err = 0;
sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP);
- if (sock < 0) {
+ if (sock < 0)
+ {
IPV4_PRINT_E("Failed to create socket. Error %d", errno);
return -1;
}
@@ -283,7 +298,8 @@ static int create_multicast_ipv4_socket(void)
saddr.sin_port = htons(UDP_PORT);
saddr.sin_addr.s_addr = htonl(INADDR_ANY);
err = bind(sock, (struct sockaddr *)&saddr, sizeof(struct sockaddr_in));
- if (err < 0) {
+ if (err < 0)
+ {
IPV4_PRINT_E("Failed to bind socket. Error %d", errno);
goto err;
}
@@ -292,7 +308,8 @@ static int create_multicast_ipv4_socket(void)
/* Assign multicast TTL (set separately from normal interface TTL) */
uint8_t ttl = MULTICAST_TTL;
setsockopt(sock, IPPROTO_IP, IP_MULTICAST_TTL, &ttl, sizeof(uint8_t));
- if (err < 0) {
+ if (err < 0)
+ {
IPV4_PRINT_E("Failed to set IP_MULTICAST_TTL. Error %d", errno);
goto err;
}
@@ -303,7 +320,8 @@ static int create_multicast_ipv4_socket(void)
uint8_t loopback_val = MULTICAST_LOOPBACK;
err = setsockopt(sock, IPPROTO_IP, IP_MULTICAST_LOOP,
&loopback_val, sizeof(uint8_t));
- if (err < 0) {
+ if (err < 0)
+ {
IPV4_PRINT_E("Failed to set IP_MULTICAST_LOOP. Error %d", errno);
goto err;
}
@@ -312,7 +330,8 @@ static int create_multicast_ipv4_socket(void)
/* this is also a listening socket, so add it to the multicast
group for listening... */
err = socket_add_ipv4_multicast_group(sock, TRUE);
- if (err < 0) {
+ if (err < 0)
+ {
goto err;
}
@@ -325,31 +344,37 @@ err:
}
#endif /* CONFIG_EXAMPLE_IPV4_ONLY */
-static void MulticastExampleTask(void *pvParameters)
+static void MulticastExampleTask(void *args)
{
- while (1) {
- int sock;
+ struct netif *netif_test = (struct netif *)args;
+ while (1)
+ {
+ int multicast_sock;
#ifdef CONFIG_EXAMPLE_IPV4_ONLY
- sock = create_multicast_ipv4_socket();
- if (sock < 0) {
- MULTICAST_PRINT_E( "Failed to create IPv4 multicast socket");
+ multicast_sock = create_multicast_ipv4_socket();
+ if (multicast_sock < 0)
+ {
+ MULTICAST_PRINT_E("Failed to create IPv4 multicast socket");
}
#else
- sock = create_multicast_ipv6_socket();
- if (sock < 0) {
- MULTICAST_PRINT_E( "Failed to create IPv6 multicast socket");
+ multicast_sock = create_multicast_ipv6_socket(netif_test);
+ if (multicast_sock < 0)
+ {
+ MULTICAST_PRINT_E("Failed to create IPv6 multicast socket");
}
#endif
- if (sock < 0) {
+ if (multicast_sock < 0)
+ {
vTaskDelay(5 / portTICK_PERIOD_MS);
continue;
}
#ifdef CONFIG_EXAMPLE_IPV4
/* set destination multicast addresses for sending from these sockets */
- struct sockaddr_in sdestv4 = {
+ struct sockaddr_in sdestv4 =
+ {
.sin_family = PF_INET,
.sin_port = htons(UDP_PORT),
};
@@ -358,7 +383,8 @@ static void MulticastExampleTask(void *pvParameters)
#endif
#ifdef CONFIG_EXAMPLE_IPV6
- struct sockaddr_in6 sdestv6 = {
+ struct sockaddr_in6 sdestv6 =
+ {
.sin6_family = PF_INET6,
.sin6_port = htons(UDP_PORT),
};
@@ -369,70 +395,81 @@ static void MulticastExampleTask(void *pvParameters)
/* Loop waiting for UDP received, and sending UDP packets if we don't
see any. */
int err = 1;
- while (err > 0) {
- struct timeval tv = {
+ while (err > 0)
+ {
+ struct timeval tv =
+ {
.tv_sec = 2,
.tv_usec = 0,
};
fd_set rfds;
FD_ZERO(&rfds);
- FD_SET(sock, &rfds);
+ FD_SET(multicast_sock, &rfds);
/* 等待数据接收事件 */
- int s = select(sock + 1, &rfds, NULL, NULL, &tv);
- if (s < 0) {
- MULTICAST_PRINT_E( "Select failed: errno %d", errno);
+ int s = select(multicast_sock + 1, &rfds, NULL, NULL, &tv);
+ if (s < 0)
+ {
+ MULTICAST_PRINT_E("Select failed: errno %d", errno);
err = -1;
break;
}
- else if (s > 0) {
- if (FD_ISSET(sock, &rfds)) {
+ else if (s > 0)
+ {
+ if (FD_ISSET(multicast_sock, &rfds))
+ {
/* Incoming datagram received */
char recvbuf[48];
char raddr_name[32] = { 0 };
struct sockaddr_storage raddr; /* Large enough for both IPv4 or IPv6 */
socklen_t socklen = sizeof(raddr);
- int len = recvfrom(sock, recvbuf, sizeof(recvbuf)-1, 0,
+ int len = recvfrom(multicast_sock, recvbuf, sizeof(recvbuf) - 1, 0,
(struct sockaddr *)&raddr, &socklen);
- if (len < 0) {
- MULTICAST_PRINT_E( "multicast recvfrom failed: errno %d", errno);
+ if (len < 0)
+ {
+ MULTICAST_PRINT_E("multicast recvfrom failed: errno %d", errno);
err = -1;
break;
}
/* Get the sender's address as a string */
#ifdef CONFIG_EXAMPLE_IPV4
- if (raddr.ss_family == PF_INET) {
+ if (raddr.ss_family == PF_INET)
+ {
inet_ntoa_r(((struct sockaddr_in *)&raddr)->sin_addr,
- raddr_name, sizeof(raddr_name)-1);
+ raddr_name, sizeof(raddr_name) - 1);
}
#endif
#ifdef CONFIG_EXAMPLE_IPV6
- if (raddr.ss_family== PF_INET6) {
- inet6_ntoa_r(((struct sockaddr_in6 *)&raddr)->sin6_addr, raddr_name, sizeof(raddr_name)-1);
+ if (raddr.ss_family == PF_INET6)
+ {
+ inet6_ntoa_r(((struct sockaddr_in6 *)&raddr)->sin6_addr, raddr_name, sizeof(raddr_name) - 1);
}
#endif
- MULTICAST_PRINT_I( "received %d bytes from %s:", len, raddr_name);
+ MULTICAST_PRINT_I("received %d bytes from %s:", len, raddr_name);
recvbuf[len] = 0; /* Null-terminate whatever we received and treat like a string... */
- MULTICAST_PRINT_I( "%s", recvbuf);
+ MULTICAST_PRINT_I("%s", recvbuf);
}
}
- else { /* s == 0 */
+ else /* s == 0 */
+ {
/* Timeout passed with no incoming data, so send something! */
static int send_count;
const char sendfmt[] = "Multicast #%d sent by Phytium\n";
char sendbuf[48];
char addrbuf[32] = { 0 };
size_t len = snprintf(sendbuf, sizeof(sendbuf), sendfmt, send_count++);
- if (len > sizeof(sendbuf)) {
- MULTICAST_PRINT_E( "Overflowed multicast sendfmt buffer!!");
+ if (len > sizeof(sendbuf))
+ {
+ MULTICAST_PRINT_E("Overflowed multicast sendfmt buffer!!");
send_count = 0;
err = -1;
break;
}
- struct addrinfo hints = {
+ struct addrinfo hints =
+ {
.ai_flags = AI_PASSIVE,
.ai_socktype = SOCK_DGRAM,
};
@@ -447,27 +484,30 @@ static void MulticastExampleTask(void *pvParameters)
NULL,
&hints,
&res);
- if (err < 0) {
- MULTICAST_PRINT_E( "getaddrinfo() failed for IPV4 destination address. error: %d", err);
+ if (err < 0)
+ {
+ MULTICAST_PRINT_E("getaddrinfo() failed for IPV4 destination address. error: %d", err);
break;
}
- if (res == 0) {
- MULTICAST_PRINT_E( "getaddrinfo() did not return any addresses");
+ if (res == 0)
+ {
+ MULTICAST_PRINT_E("getaddrinfo() did not return any addresses");
break;
}
#ifdef CONFIG_EXAMPLE_IPV4_ONLY
((struct sockaddr_in *)res->ai_addr)->sin_port = htons(UDP_PORT);
- inet_ntoa_r(((struct sockaddr_in *)res->ai_addr)->sin_addr, addrbuf, sizeof(addrbuf)-1);
- MULTICAST_PRINT_I( "Sending to IPV4 multicast address %s:%d...", addrbuf, UDP_PORT);
+ inet_ntoa_r(((struct sockaddr_in *)res->ai_addr)->sin_addr, addrbuf, sizeof(addrbuf) - 1);
+ MULTICAST_PRINT_I("Sending to IPV4 multicast address %s:%d...", addrbuf, UDP_PORT);
#else
((struct sockaddr_in6 *)res->ai_addr)->sin6_port = htons(UDP_PORT);
- inet6_ntoa_r(((struct sockaddr_in6 *)res->ai_addr)->sin6_addr, addrbuf, sizeof(addrbuf)-1);
- MULTICAST_PRINT_I( "Sending to IPV6 (V4 mapped) multicast address %s port %d (%s)...", addrbuf, UDP_PORT, CONFIG_EXAMPLE_MULTICAST_IPV4_ADDR);
+ inet6_ntoa_r(((struct sockaddr_in6 *)res->ai_addr)->sin6_addr, addrbuf, sizeof(addrbuf) - 1);
+ MULTICAST_PRINT_I("Sending to IPV6 (V4 mapped) multicast address %s port %d (%s)...", addrbuf, UDP_PORT, CONFIG_EXAMPLE_MULTICAST_IPV4_ADDR);
#endif
- err = sendto(sock, sendbuf, len, 0, res->ai_addr, res->ai_addrlen);
+ err = sendto(multicast_sock, sendbuf, len, 0, res->ai_addr, res->ai_addrlen);
freeaddrinfo(res);
- if (err < 0) {
- MULTICAST_PRINT_E( "IPV4 sendto failed. errno: %d", errno);
+ if (err < 0)
+ {
+ MULTICAST_PRINT_E("IPV4 sendto failed. errno: %d", errno);
break;
}
#endif
@@ -478,55 +518,73 @@ static void MulticastExampleTask(void *pvParameters)
NULL,
&hints,
&res);
- if (err < 0) {
- MULTICAST_PRINT_E( "getaddrinfo() failed for IPV6 destination address. error: %d", err);
+ if (err < 0)
+ {
+ MULTICAST_PRINT_E("getaddrinfo() failed for IPV6 destination address. error: %d", err);
break;
}
struct sockaddr_in6 *s6addr = (struct sockaddr_in6 *)res->ai_addr;
s6addr->sin6_port = htons(UDP_PORT);
- inet6_ntoa_r(s6addr->sin6_addr, addrbuf, sizeof(addrbuf)-1);
- MULTICAST_PRINT_I( "Sending to IPV6 multicast address %s port %d...", addrbuf, UDP_PORT);
- err = sendto(sock, sendbuf, len, 0, res->ai_addr, res->ai_addrlen);
+ inet6_ntoa_r(s6addr->sin6_addr, addrbuf, sizeof(addrbuf) - 1);
+ MULTICAST_PRINT_I("Sending to IPV6 multicast address %s port %d...", addrbuf, UDP_PORT);
+ err = sendto(multicast_sock, sendbuf, len, 0, res->ai_addr, res->ai_addrlen);
freeaddrinfo(res);
- if (err < 0) {
- MULTICAST_PRINT_E( "IPV6 sendto failed. errno: %d", errno);
+ if (err < 0)
+ {
+ MULTICAST_PRINT_E("IPV6 sendto failed. errno: %d", errno);
break;
}
#endif
}
}
- MULTICAST_PRINT_E( "Shutting down socket and restarting...");
- shutdown(sock, 0);
- close(sock);
+ MULTICAST_PRINT_E("Shutting down socket and restarting...");
+ shutdown(multicast_sock, 0);
+ close(multicast_sock);
}
-
+ vTaskDelete(NULL);
}
-
static int MulticastMain(int argc, char *argv[])
{
static int create_flg = 0;
BaseType_t task_ret;
- if(create_flg == 0)
- {
- create_flg++;
- }
- else
+
+ /* prase multicast */
+
+ if (argc > 1)
{
- MULTICAST_PRINT_E( "The multicast task has been created. Do not create it again ");
- return -1;
- }
+ /* first find netif */
+ netif_p = LwipPortGetByName(argv[1]);
+ if (netif_p == NULL)
+ {
+ printf("netif %s is not invalid.\r\n", argv[1]);
+ return -1;
+ }
- /* step 1: Create multicast task */
- task_ret = xTaskCreate(&MulticastExampleTask, "mcast_task", 4096, NULL, 5, NULL);
+ if (create_flg == 0)
+ {
+ /* step 1: Create multicast task */
+ task_ret = xTaskCreate(&MulticastExampleTask, "mcast_task", 4096, netif_p, 5, &multicast_handle);
- if(task_ret != pdPASS)
+ if (task_ret != pdPASS)
+ {
+ create_flg = 0;
+ MULTICAST_PRINT_E("Failed to create multicast task ");
+ return -1;
+ }
+ create_flg++;
+ }
+ else
+ {
+ printf("Multicast task is already created,do not repeat the creation \r\n");
+ }
+ }
+ else
{
- create_flg = 0;
- MULTICAST_PRINT_E("Failed to create multicast task ");
- return -1;
+ printf("Please enter multicast \r\n") ;
+ printf(" -- netif_name is netif name \r\n");
}
return 0;
diff --git a/example/network/sockets/udp_multicast/test/multicast_server_ipv4.c b/example/network/sockets/udp_multicast/test/multicast_server_ipv4.c
index 5357787f3fad741b5d1d2a672905855325ccb624..c4e2210466de1825e38acec0da17eb56a8da0b68 100644
--- a/example/network/sockets/udp_multicast/test/multicast_server_ipv4.c
+++ b/example/network/sockets/udp_multicast/test/multicast_server_ipv4.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: multicast_server_ipv4.c
* Date: 2022-09-16 09:15:47
* LastEditTime: 2022-09-16 09:15:47
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
+ * Description: This file is for multicast ipv4 server
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 huanghe 2022/10/21 init
*/
#include
@@ -32,7 +33,7 @@
-#if defined(CONFIG_EXAMPLE_IPV4_ONLY)
+#if defined(CONFIG_EXAMPLE_IPV4_ONLY) || defined(CONFIG_EXAMPLE_IPV4_V6)
#define GROUP_IP CONFIG_EXAMPLE_MULTICAST_IPV4_ADDR
#define TEST_PORT CONFIG_EXAMPLE_PORT
@@ -42,47 +43,47 @@ int main()
{
// 1. 创建通信的套接字
int fd = socket(AF_INET, SOCK_DGRAM, 0);
- if(fd == -1)
+ if (fd == -1)
{
perror("socket");
exit(0);
}
- printf("addr is %s \r\n",GROUP_IP);
- printf("TEST_PORT is %d \r\n",TEST_PORT);
+ printf("addr is %s \r\n", GROUP_IP);
+ printf("TEST_PORT is %d \r\n", TEST_PORT);
// 2. 通信的套接字和本地的IP与端口绑定
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(TEST_PORT); // 大端
addr.sin_addr.s_addr = htonl(INADDR_ANY); // 0.0.0.0
- int ret = bind(fd, (struct sockaddr*)&addr, sizeof(addr));
- if(ret == -1)
+ int ret = bind(fd, (struct sockaddr *)&addr, sizeof(addr));
+ if (ret == -1)
{
perror("bind");
exit(0);
}
printf("加入到多播组 \r\n");
// 3. 加入到多播组
- struct ip_mreq mreq; // 多播地址结构体
- mreq.imr_multiaddr.s_addr=inet_addr(GROUP_IP);
- mreq.imr_interface.s_addr = htonl(INADDR_ANY);
- ret=setsockopt(fd,IPPROTO_IP,IP_ADD_MEMBERSHIP,&mreq,sizeof(mreq));
+ struct ip_mreq mreq; // 多播地址结构体
+ mreq.imr_multiaddr.s_addr = inet_addr(GROUP_IP);
+ mreq.imr_interface.s_addr = htonl(INADDR_ANY);
+ ret = setsockopt(fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq));
char buf[1024];
- char sendaddrbuf[64];
- socklen_t len = sizeof(struct sockaddr_in);
- struct sockaddr_in sendaddr;
- printf("通信 \r\n");
+ char sendaddrbuf[64];
+ socklen_t len = sizeof(struct sockaddr_in);
+ struct sockaddr_in sendaddr;
+ printf("通信 \r\n");
// 3. 通信
- while(1)
+ while (1)
{
// 接收广播消息
memset(buf, 0, sizeof(buf));
// 阻塞等待数据达到
-
+
recvfrom(fd, buf, sizeof(buf), 0, (struct sockaddr *)&sendaddr, &len);
- printf("sendaddr:%s, port:%d\n", inet_ntop(AF_INET, &sendaddr.sin_addr.s_addr, sendaddrbuf, sizeof(sendaddrbuf)), sendaddr.sin_port);
+ printf("sendaddr:%s, port:%d\n", inet_ntop(AF_INET, &sendaddr.sin_addr.s_addr, sendaddrbuf, sizeof(sendaddrbuf)), sendaddr.sin_port);
printf("接收到的组播消息: %s\n", buf);
- sendto(fd, buf, strlen(buf)+1, 0, (struct sockaddr *)&sendaddr, len);
+ sendto(fd, buf, strlen(buf) + 1, 0, (struct sockaddr *)&sendaddr, len);
}
close(fd);
return 0;
diff --git a/example/network/sockets/udp_multicast/test/multicast_server_ipv6.c b/example/network/sockets/udp_multicast/test/multicast_server_ipv6.c
index 6f474dcfc1d7c9240de3eecd78b901b529bfeb64..aac314d223d90cdd4d19bd99078ed92f0d4261a5 100644
--- a/example/network/sockets/udp_multicast/test/multicast_server_ipv6.c
+++ b/example/network/sockets/udp_multicast/test/multicast_server_ipv6.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: multicast_server_ipv6.c
* Date: 2022-09-23 14:28:25
* LastEditTime: 2022-09-23 14:28:25
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
+ * Description: This file is for multicast ipv4 server
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 huanghe 2022/10/21 init
*/
@@ -29,40 +30,40 @@
#include
#include "../sdkconfig.h"
-#if defined(CONFIG_EXAMPLE_IPV6_ONLY)
+#if defined(CONFIG_EXAMPLE_IPV4_V6)
int main()
{
//创建套接字
int fd = socket(AF_INET6, SOCK_DGRAM, 0);
- printf("multicast address is %s ,port is %d \r\n",CONFIG_EXAMPLE_MULTICAST_IPV6_ADDR,CONFIG_EXAMPLE_PORT);
+ printf("multicast address is %s ,port is %d \r\n", CONFIG_EXAMPLE_MULTICAST_IPV6_ADDR, CONFIG_EXAMPLE_PORT);
//绑定本地网络信息
struct sockaddr_in6 address = {AF_INET6, htons(CONFIG_EXAMPLE_PORT)};
- bind(fd, (struct sockaddr*)&address, sizeof address);
+ bind(fd, (struct sockaddr *)&address, sizeof address);
//ipv6_mreq结构提供了用于IPv6地址的多播组的信息。
struct ipv6_mreq group;
//将接口索引指定为0,则使用默认的多播接口。
- group.ipv6mr_interface = 0;
+ group.ipv6mr_interface = 0;
//IPv6组播组的地址。
- inet_pton(AF_INET6, CONFIG_EXAMPLE_MULTICAST_IPV6_ADDR, &group.ipv6mr_multiaddr);
+ inet_pton(AF_INET6, CONFIG_EXAMPLE_MULTICAST_IPV6_ADDR, &group.ipv6mr_multiaddr);
//将套接字加入到指定接口上提供的多播组。此选项仅对数据报和原始套接字有效(套接字类>型必须为SOCK_DGRAM或SOCK_RAW)。
setsockopt(fd, IPPROTO_IPV6, IPV6_ADD_MEMBERSHIP, &group, sizeof(group));
char buf[1024];
- char sendaddrbuf[64];
- socklen_t len = sizeof(struct sockaddr_in);
- struct sockaddr_in sendaddr;
+ char sendaddrbuf[64];
+ socklen_t len = sizeof(struct sockaddr_in);
+ struct sockaddr_in sendaddr;
// 3. 通信
- while(1)
+ while (1)
{
// 接收广播消息
memset(buf, 0, sizeof(buf));
// 阻塞等待数据达到
recvfrom(fd, buf, sizeof(buf), 0, (struct sockaddr *)&sendaddr, &len);
- printf("sendaddr:%s, port:%d\n", inet_ntop(AF_INET6, &sendaddr.sin_addr.s_addr, sendaddrbuf, sizeof(sendaddrbuf)), sendaddr.sin_port);
+ printf("sendaddr:%s, port:%d\n", inet_ntop(AF_INET6, &sendaddr.sin_addr.s_addr, sendaddrbuf, sizeof(sendaddrbuf)), sendaddr.sin_port);
printf("接收到的组播消息: %s\n", buf);
- sendto(fd, buf, strlen(buf)+1, 0, (struct sockaddr *)&sendaddr, len);
+ sendto(fd, buf, strlen(buf) + 1, 0, (struct sockaddr *)&sendaddr, len);
}
close(fd);
return 0;
diff --git a/example/network/xmac_lwip_test/pic/ping.png b/example/network/xmac_lwip_test/pic/ping.png
deleted file mode 100644
index 4df451934d172b9bd0870228ad29d0d6c45937eb..0000000000000000000000000000000000000000
Binary files a/example/network/xmac_lwip_test/pic/ping.png and /dev/null differ
diff --git a/example/network/xmac_lwip_test/pic/xmac_probe.png b/example/network/xmac_lwip_test/pic/xmac_probe.png
deleted file mode 100644
index 59f8c2f556710120cfcd0a7943a34054665da3ba..0000000000000000000000000000000000000000
Binary files a/example/network/xmac_lwip_test/pic/xmac_probe.png and /dev/null differ
diff --git a/example/network/xmac_lwip_test/pic/xmac_probe_dhcp0.png b/example/network/xmac_lwip_test/pic/xmac_probe_dhcp0.png
deleted file mode 100644
index c85d0fe369663cf9086edc18fd9e094553d2f6da..0000000000000000000000000000000000000000
Binary files a/example/network/xmac_lwip_test/pic/xmac_probe_dhcp0.png and /dev/null differ
diff --git a/example/network/xmac_lwip_test/pic/xmac_probe_dhcp1.png b/example/network/xmac_lwip_test/pic/xmac_probe_dhcp1.png
deleted file mode 100644
index 1c6c66b2e46f9926fced1c5757c72d2bf120c3ad..0000000000000000000000000000000000000000
Binary files a/example/network/xmac_lwip_test/pic/xmac_probe_dhcp1.png and /dev/null differ
diff --git a/example/network/xmac_lwip_test/pic/xmac_probe_ipv4.png b/example/network/xmac_lwip_test/pic/xmac_probe_ipv4.png
deleted file mode 100644
index 584686e115481cc7156df9172e83256fde15088a..0000000000000000000000000000000000000000
Binary files a/example/network/xmac_lwip_test/pic/xmac_probe_ipv4.png and /dev/null differ
diff --git a/example/network/xmac_lwip_test/pic/xmac_probe_ipv6.png b/example/network/xmac_lwip_test/pic/xmac_probe_ipv6.png
deleted file mode 100644
index 43c8fe8eb1663750a2322b469b8ff289e9380e5e..0000000000000000000000000000000000000000
Binary files a/example/network/xmac_lwip_test/pic/xmac_probe_ipv6.png and /dev/null differ
diff --git a/example/network/xmac_lwip_test/src/lwip_test.c b/example/network/xmac_lwip_test/src/lwip_test.c
deleted file mode 100644
index b8245fbfd8b78260a96655964cf74b7564b72b52..0000000000000000000000000000000000000000
--- a/example/network/xmac_lwip_test/src/lwip_test.c
+++ /dev/null
@@ -1,416 +0,0 @@
-/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
- * All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
- * FilePath: lwip_test.c
- * Date: 2022-06-06 22:57:08
- * LastEditTime: 2022-06-06 22:57:08
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
- */
-
-#include
-#include
-#include "strto.h"
-#include "sdkconfig.h"
-#include "FreeRTOS.h"
-#include "task.h"
-#include "ftypes.h"
-#include "fpinctrl.h"
-#ifndef SDK_CONFIG_H__
- #error "Please include sdkconfig.h first"
-#endif
-
-#include "lwipopts.h"
-#include "lwip_port.h"
-#include "lwip/ip4_addr.h"
-#include "lwip/init.h"
-#include "netif/ethernet.h"
-#include "ethernetif.h"
-#include "lwip/netif.h"
-#include "lwip/tcpip.h"
-#include "../src/shell.h"
-
-
-#if defined(CONFIG_TARGET_E2000)
-#define PHY_INTERRUPTFACE_RGMII 0
-#define PHY_INTERRUPTFACE_SGMII 1
-#endif
-
-
-#if LWIP_IPV6
-#include "lwip/ip.h"
-#include "lwip/ip6_addr.h"
-#else
-#if LWIP_DHCP
-#include "lwip/dhcp.h"
-#endif
-#endif
-
-
-
-user_config lwip_mac_config = {0};
-
-
-#if !LWIP_IPV6
-#if LWIP_DHCP
-static TaskHandle_t appTaskCreateHandle = NULL;
-void LwipDhcpTest(struct netif *echo_netif)
-{
- int mscnt = 0;
- dhcp_start(echo_netif);
- printf("LwipDhcpTest is start \r\n");
- while (1)
- {
- vTaskDelay(DHCP_FINE_TIMER_MSECS / portTICK_RATE_MS);
- dhcp_fine_tmr();
- mscnt += DHCP_FINE_TIMER_MSECS;
- if (mscnt >= DHCP_COARSE_TIMER_SECS*1000)
- {
- dhcp_coarse_tmr();
- mscnt = 0;
- }
- }
-}
-#endif
-#endif
-
-void LwipTestCreate(void * args)
-{
- struct netif *echo_netif;
- static boolean init_flag = FALSE;
- BaseType_t ret = pdPASS;
- /* the mac address of the board. this should be unique per board */
- unsigned char mac_ethernet_address[] =
- {0x98, 0x0e, 0x24, 0x00, 0x11, 0x22};
-
- echo_netif = pvPortMalloc(sizeof(struct netif));
- if(echo_netif == NULL)
- {
- printf("malloc netif is error \r\n");
- goto exit;
- }
-
-#if !LWIP_IPV6
- ip_addr_t ipaddr, netmask, gw;
-#if LWIP_DHCP
- ipaddr.addr = 0;
- gw.addr = 0;
- netmask.addr = 0;
-#else
- /* initialize IP addresses to be used */
- IP4_ADDR(&ipaddr, 192, 168, 4, 10);
- IP4_ADDR(&netmask, 255, 255, 255, 0);
- IP4_ADDR(&gw, 192, 168, 4, 1);
-#endif
-#endif
-
- /* 初始化LwIP堆 */
- if(init_flag == FALSE)
- {
- tcpip_init(NULL, NULL);
- init_flag = TRUE;
- }
-
-#if !LWIP_IPV6
- /* Add network interface to the netif_list, and set it as default */
- if (!lwip_port_add(echo_netif, &ipaddr, &netmask,
- &gw, mac_ethernet_address,
- (user_config *)args))
- {
- printf("Error adding N/W interface\n\r");
- return ;
- }
- printf("lwip_port_add is over \n\r");
-#else
- /* Add network interface to the netif_list, and set it as default */
- if (!lwip_port_add(echo_netif, NULL, NULL, NULL, mac_ethernet_address, (user_config *)args))
- {
- printf("Error adding N/W interface\n\r");
- return ;
- }
- echo_netif->ip6_autoconfig_enabled = 1;
-
- netif_create_ip6_linklocal_address(echo_netif, 1);
- netif_ip6_addr_set_state(echo_netif, 0, IP6_ADDR_VALID);
-
- printf("Board IPv6 address %x:%x:%x:%x:%x:%x:%x:%x\n\r",
- IP6_ADDR_BLOCK1(&echo_netif->ip6_addr[0].u_addr.ip6),
- IP6_ADDR_BLOCK2(&echo_netif->ip6_addr[0].u_addr.ip6),
- IP6_ADDR_BLOCK3(&echo_netif->ip6_addr[0].u_addr.ip6),
- IP6_ADDR_BLOCK4(&echo_netif->ip6_addr[0].u_addr.ip6),
- IP6_ADDR_BLOCK5(&echo_netif->ip6_addr[0].u_addr.ip6),
- IP6_ADDR_BLOCK6(&echo_netif->ip6_addr[0].u_addr.ip6),
- IP6_ADDR_BLOCK7(&echo_netif->ip6_addr[0].u_addr.ip6),
- IP6_ADDR_BLOCK8(&echo_netif->ip6_addr[0].u_addr.ip6));
-
-
-#endif
-
- netif_set_default(echo_netif);
-
- if (netif_is_link_up(echo_netif))
- {
- /* 当netif完全配置好时,必须调用该函数 */
- netif_set_up(echo_netif);
- }
- else
- {
- /* 当netif链接关闭时,必须调用该函数 */
- netif_set_down(echo_netif);
- }
-
- printf("network setup complete\n");
-
- if (xTaskCreate((TaskFunction_t )lwip_port_input_thread,
- "recv_echo",
- 8192,
- echo_netif,
- 4,
- NULL) != pdPASS)
- {
- printf("xTaskCreate is Error %s\r\n", "recv_echo");
- FASSERT(0);
- }
-
-#if LWIP_DHCP && LWIP_IPV4
- /* Create a new DHCP client for this interface.
- * Note: you must call dhcp_fine_tmr() and dhcp_coarse_tmr() at
- * the predefined regular intervals after starting the client.
- */
- printf("dhcp_start...\r\n");
-
- ret = xTaskCreate((TaskFunction_t )LwipDhcpTest, /* 任务入口函数 */
- (const char* )"LwipDhcpTest",/* 任务名字 */
- (uint16_t )8192, /* 任务栈大小 */
- (void* )(echo_netif),/* 任务入口函数参数 */
- (UBaseType_t )configMAX_PRIORITIES-1, /* 任务的优先级 */
- (TaskHandle_t* )&appTaskCreateHandle); /* 任务控制 */
-
- if (pdPASS == ret)
- {
- printf("create lwip dhcp task success!\r\n");
- }
-
-#endif
-
-exit:
- vTaskDelete(NULL);
-}
-
-void LwipTest(void *args)
-{
- BaseType_t ret;
- ret = xTaskCreate((TaskFunction_t)LwipTestCreate, /* 任务入口函数 */
- (const char *)"LwipTestCreate", /* 任务名字 */
- (uint16_t)2048, /* 任务栈大小 */
- (void *)args, /* 任务入口函数参数 */
- (UBaseType_t)configMAX_PRIORITIES-1,/* 任务的优先级 */
- NULL); /* 任务控制块指针 */
-
- FASSERT_MSG(ret == pdPASS,"LwipTestCreate Task create is failed");
-
-}
-
-
-
-int FXmacPhyGpioInit(u32 instance_id,u32 interface_type)
-{
-#if defined(CONFIG_TARGET_E2000Q)
-#if defined(CONFIG_BOARD_TYPE_B)
- if(instance_id == 3)
- {
- if(interface_type == PHY_INTERRUPTFACE_RGMII)
- {
- FPinSetConfig(FIOPAD_J37,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_rgmii_txd1_0
- */
- FPinSetConfig(FIOPAD_J39,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_rgmii_txd1_1
- */
- FPinSetConfig(FIOPAD_G41,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_rgmii_rxd1_0
- */
- FPinSetConfig(FIOPAD_E43,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_rgmii_rxd1_1
- */
- FPinSetConfig(FIOPAD_L43,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_rgmii_tx_ctl1 */
- FPinSetConfig(FIOPAD_C43,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_rgmii_rxd1_2 */
- FPinSetConfig(FIOPAD_E41,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_rgmii_rxd1_3 */
- FPinSetConfig(FIOPAD_L45,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_rgmii_rx_clk1 */
- FPinSetConfig(FIOPAD_J43,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_rgmii_rx_ctl1 */
- FPinSetConfig(FIOPAD_J41,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_rgmii_tx_clk1 */
- FPinSetDelay(FIOPAD_J41_DELAY,FPIN_OUTPUT_DELAY,FPIN_DELAY_FINE_TUNING,FPIN_DELAY_7);
- FPinSetDelay(FIOPAD_J41_DELAY,FPIN_OUTPUT_DELAY,FPIN_DELAY_COARSE_TUNING,FPIN_DELAY_5);
- FPinSetDelayEn(FIOPAD_J41_DELAY,FPIN_OUTPUT_DELAY,1);
-
- FPinSetConfig(FIOPAD_L39,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_rgmii_txd1_2 */
- FPinSetConfig(FIOPAD_E37,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_rgmii_txd1_3 */
- FPinSetConfig(FIOPAD_E35,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_mdc_mac3 */
- FPinSetConfig(FIOPAD_G35,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_mdio_mac3 */
- }
- else if(interface_type == PHY_INTERRUPTFACE_SGMII)
- {
- FPinSetConfig(FIOPAD_E35,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_mdc_mac3 */
- FPinSetConfig(FIOPAD_G35,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_mdio_mac3 */
- }
- else
- {
- printf("interface_type 0x%x is not support \r\n");
- return -1;
- }
- }
-#elif defined(CONFIG_BOARD_TYPE_C)
- if(instance_id == 1)
- {
- FPinSetConfig(FIOPAD_AJ53,FPIN_FUNC3,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_mdc_mac1 */
- FPinSetConfig(FIOPAD_AL49,FPIN_FUNC3,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_mdio_mac1 */
- }
- else if(instance_id == 2)
- {
- FPinSetConfig(FIOPAD_E29,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_mdc_mac2 */
- FPinSetConfig(FIOPAD_G29,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_mdio_mac2 */
- }
- else if(instance_id == 3)
- {
- FPinSetConfig(FIOPAD_E35,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_mdc_mac3 */
- FPinSetConfig(FIOPAD_G35,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_mdio_mac3 */
- }
- else
- {
- printf("interface_type 0x%x is not support \r\n");
- return -1;
- }
-#endif
-#elif defined(CONFIG_TARGET_E2000D) || defined(CONFIG_TARGET_E2000S)
-
-#if defined(CONFIG_BOARD_TYPE_B)
- if(instance_id == 3)
- {
- if(interface_type == PHY_INTERRUPTFACE_RGMII)
- {
- FPinSetConfig(FIOPAD_J33,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_rgmii_txd1_0
- */
- FPinSetConfig(FIOPAD_J35,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_rgmii_txd1_1
- */
- FPinSetConfig(FIOPAD_G37,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_rgmii_rxd1_0
- */
- FPinSetConfig(FIOPAD_E39,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_rgmii_rxd1_1
- */
- FPinSetConfig(FIOPAD_L39,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_rgmii_tx_ctl1 */
- FPinSetConfig(FIOPAD_C39,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_rgmii_rxd1_2 */
- FPinSetConfig(FIOPAD_E37,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_rgmii_rxd1_3 */
- FPinSetConfig(FIOPAD_L41,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_rgmii_rx_clk1 */
- FPinSetConfig(FIOPAD_J39,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_rgmii_rx_ctl1 */
- FPinSetConfig(FIOPAD_J37,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_rgmii_tx_clk1 */
- FPinSetDelay(FIOPAD_J37_DELAY,FPIN_OUTPUT_DELAY,FPIN_DELAY_COARSE_TUNING,FPIN_DELAY_5);
- FPinSetDelay(FIOPAD_J37_DELAY,FPIN_OUTPUT_DELAY,FPIN_DELAY_FINE_TUNING,FPIN_DELAY_7);
- FPinSetDelayEn(FIOPAD_J37_DELAY,FPIN_OUTPUT_DELAY,1);
- FPinSetConfig(FIOPAD_L35,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_rgmii_txd1_2 */
- FPinSetConfig(FIOPAD_E33,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_rgmii_txd1_3 */
- FPinSetConfig(FIOPAD_E31,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_mdc_mac3 */
- FPinSetConfig(FIOPAD_G31,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_mdio_mac3 */
- }
- else if(interface_type == PHY_INTERRUPTFACE_SGMII)
- {
- FPinSetConfig(FIOPAD_E31,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_mdc_mac3 */
- FPinSetConfig(FIOPAD_G31,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_mdio_mac3 */
- }
- else
- {
- printf("interface_type 0x%x is not support \r\n");
- return -1;
- }
- }
-#elif defined(CONFIG_BOARD_TYPE_C)
- if(instance_id == 1)
- {
- FPinSetConfig(FIOPAD_AJ49,FPIN_FUNC3,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_mdc_mac1 */
- FPinSetConfig(FIOPAD_AL45,FPIN_FUNC3,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_mdio_mac1 */
- }
- else if(instance_id == 2)
- {
- FPinSetConfig(FIOPAD_E25,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_mdc_mac2 */
- FPinSetConfig(FIOPAD_G25,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_mdio_mac2 */
- }
- else if(instance_id == 3)
- {
- FPinSetConfig(FIOPAD_E31,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_mdc_mac3 */
- FPinSetConfig(FIOPAD_G31,FPIN_FUNC1,FPIN_PULL_NONE,FPIN_DRV4); /* gsd_gmu_mdio_mac3 */
- }
- else
- {
- printf("interface_type 0x%x is not support \r\n");
- return -1;
- }
-#endif
-
-#endif
-
-
-}
-
-
-static int LwipDeviceSet(int argc, char *argv[])
-{
- u32 id = 0,type = 0;
-
- static int probe_flg = 0;
- LWIP_PORT_CONFIG_DEFAULT_INIT(lwip_mac_config);
-
- if (!strcmp(argv[1], "probe"))
- {
- if(probe_flg == 1)
- {
- printf("The initialization of the instance is complete. Do not repeat this process \r\n") ;
- return -1;
- }
-
- switch(argc)
- {
- case 4:
- type = (u32)simple_strtoul(argv[3], NULL, 10);
- id = (u32)simple_strtoul(argv[2], NULL, 10);
- break;
- case 3:
- id = (u32)simple_strtoul(argv[2], NULL, 10);
- break;
- default:
- break;
- }
- printf("types %d\n", type);
- printf("id %d\n", id);
- FXmacPhyGpioInit(id,type);
- lwip_mac_config.mac_instance = id;
- if(type == 0)
- {
- lwip_mac_config.mii_interface = LWIP_PORT_INTERFACE_RGMII;
- }
- else
- {
- lwip_mac_config.mii_interface = LWIP_PORT_INTERFACE_SGMII;
- }
-
- LwipTest(&lwip_mac_config);
- probe_flg = 1;
- }
- else
- {
- printf("Please enter xmac probe \r\n") ;
- printf(" -- device id is mac instance number \r\n");
- printf(" -- interface id is media independent interface , 0 is rgmii ,1 is sgmii \r\n");
- }
-
- return 0;
-}
-
-SHELL_EXPORT_CMD(SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN), xmac, LwipDeviceSet, Setup LWIP device test);
-
diff --git a/example/peripheral/adc/configs/e2000d_aarch32_eg_configs b/example/peripheral/adc/configs/e2000d_aarch32_eg_configs
index f0bf9f4afc2ae2fc03c9731fa7ddb95ce5083701..5b7f05812f64bdeb8b1e1bfe92d9f64128fd35c9 100644
--- a/example/peripheral/adc/configs/e2000d_aarch32_eg_configs
+++ b/example/peripheral/adc/configs/e2000d_aarch32_eg_configs
@@ -74,6 +74,7 @@ CONFIG_USE_FADC=y
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -118,6 +119,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -154,6 +164,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -175,12 +186,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -192,14 +197,32 @@ CONFIG_FREERTOS_USE_ADC=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -217,4 +240,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
# CONFIG_USE_TLSF is not set
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/adc/configs/e2000d_aarch64_eg_configs b/example/peripheral/adc/configs/e2000d_aarch64_eg_configs
index 4e2e0dfec4ef3a32f2dbeba38ca8486a12998648..b3f9414f296189ad1525d080dd80b9e6047b97ab 100644
--- a/example/peripheral/adc/configs/e2000d_aarch64_eg_configs
+++ b/example/peripheral/adc/configs/e2000d_aarch64_eg_configs
@@ -74,6 +74,7 @@ CONFIG_USE_FADC=y
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -114,6 +115,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -150,6 +160,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -171,12 +182,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -188,14 +193,32 @@ CONFIG_FREERTOS_USE_ADC=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -213,4 +236,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
# CONFIG_USE_TLSF is not set
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/adc/inc/adc_example.h b/example/peripheral/adc/inc/adc_example.h
index a62aa6cc925cae701f5c597d594b6e027748734f..2bd61f423cd8ac79aee6c5a7ca000a75be96446b 100644
--- a/example/peripheral/adc/inc/adc_example.h
+++ b/example/peripheral/adc/inc/adc_example.h
@@ -1,30 +1,41 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: adc_example.h
* Date: 2022-08-25 16:22:40
* LastEditTime: 2022-08-26 15:40:40
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
+ * Description: This file is for task create function define
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2022/08/31 first commit
*/
#ifndef ADC_EXAMPLE_H
#define ADC_EXAMPLE_H
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
/* adc test */
BaseType_t FFreeRTOSAdcCreate(u32 id);
+
+#ifdef __cplusplus
+}
+#endif
+
#endif // !
\ No newline at end of file
diff --git a/example/peripheral/adc/main.c b/example/peripheral/adc/main.c
index 44eb439eccec901ea6c14dd462f6a49e77ecc01e..e7371c5b6e207ccd73d5ee1c14f3d62b168cdab2 100644
--- a/example/peripheral/adc/main.c
+++ b/example/peripheral/adc/main.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: main.c
* Date: 2022-06-17 08:17:59
* LastEditTime: 2022-06-17 08:17:59
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
+ * Description: This file is for adc example that running ADC task、shell task and open scheduler
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2022/08/31 first commit
*/
#include "shell.h"
@@ -32,17 +33,21 @@ int main(void)
/* test adc 0 */
ret = FFreeRTOSAdcCreate(0);
- if(ret != pdPASS)
+ if (ret != pdPASS)
+ {
goto FAIL_EXIT;
+ }
ret = LSUserShellTask() ;
- if(ret != pdPASS)
+ if (ret != pdPASS)
+ {
goto FAIL_EXIT;
+ }
- vTaskStartScheduler(); /* 启动任务,开启调度 */
+ vTaskStartScheduler(); /* 启动任务,开启调度 */
while (1); /* 正常不会执行到这里 */
-
+
FAIL_EXIT:
- printf("failed 0x%x \r\n", ret);
+ printf("failed 0x%x. \r\n", ret);
return 0;
}
diff --git a/example/peripheral/adc/sdkconfig b/example/peripheral/adc/sdkconfig
index 4e2e0dfec4ef3a32f2dbeba38ca8486a12998648..b3f9414f296189ad1525d080dd80b9e6047b97ab 100644
--- a/example/peripheral/adc/sdkconfig
+++ b/example/peripheral/adc/sdkconfig
@@ -74,6 +74,7 @@ CONFIG_USE_FADC=y
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -114,6 +115,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -150,6 +160,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -171,12 +182,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -188,14 +193,32 @@ CONFIG_FREERTOS_USE_ADC=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -213,4 +236,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
# CONFIG_USE_TLSF is not set
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/adc/sdkconfig.h b/example/peripheral/adc/sdkconfig.h
index 5a057cb72e85731a15cdd86bf1e5c90d3fb6d341..116eb47a4432aa322320eac40f1580b98095cdfb 100644
--- a/example/peripheral/adc/sdkconfig.h
+++ b/example/peripheral/adc/sdkconfig.h
@@ -67,6 +67,7 @@
/* end of ADC Configuration */
/* CONFIG_USE_PWM is not set */
/* CONFIG_USE_IPC is not set */
+/* CONFIG_USE_MEDIA is not set */
/* end of Components Configuration */
#define CONFIG_USE_NEW_LIBC
/* end of Standalone Setting */
@@ -103,6 +104,12 @@
/* Compiler Options */
+/* Cross-Compiler Setting */
+
+#define CONFIG_GCC_OPTIMIZE_LEVEL 0
+/* CONFIG_USE_EXT_COMPILER is not set */
+/* CONFIG_USE_KLIN_SYS is not set */
+/* end of Cross-Compiler Setting */
#define CONFIG_OUTPUT_BINARY
/* end of Compiler Options */
/* end of Building Option */
@@ -132,6 +139,7 @@
/* Freertos Eth Drivers */
/* CONFIG_FREERTOS_USE_XMAC is not set */
+/* CONFIG_FREERTOS_USE_GMAC is not set */
/* end of Freertos Eth Drivers */
/* Freertos Gpio Drivers */
@@ -150,11 +158,6 @@
/* CONFIG_FREERTOS_USE_FGDMA is not set */
/* end of Freertos DMA Drivers */
-/* Freertos MMC Drivers */
-
-/* CONFIG_FREERTOS_USE_FSDIO is not set */
-/* end of Freertos MMC Drivers */
-
/* Freertos Adc Drivers */
#define CONFIG_FREERTOS_USE_ADC
@@ -164,13 +167,28 @@
/* CONFIG_FREERTOS_USE_CAN is not set */
/* end of Freertos Can Drivers */
+
+/* Freertos I2c Drivers */
+
+/* CONFIG_FREERTOS_USE_I2C is not set */
+/* end of Freertos I2c Drivers */
+
+/* Freertos Mio Drivers */
+
+/* CONFIG_FREERTOS_USE_MIO is not set */
+/* end of Freertos Mio Drivers */
+
+/* Freertos Timer Drivers */
+
+/* CONFIG_FREERTOS_USE_TIMER is not set */
+/* end of Freertos Timer Drivers */
/* end of Component Configuration */
-/* FreeRTOS Setting */
+/* Third-Party Configuration */
/* CONFIG_USE_LWIP is not set */
#define CONFIG_USE_BACKTRACE
-/* CONFIG_USE_FATFS is not set */
+/* CONFIG_USE_FATFS_0_1_4 is not set */
/* CONFIG_USE_SFUD is not set */
/* CONFIG_USE_SPIFFS is not set */
/* CONFIG_USE_AMP is not set */
@@ -186,6 +204,28 @@
/* CONFIG_USE_TLSF is not set */
/* CONFIG_USE_SDMMC_CMD is not set */
/* CONFIG_USE_CHERRY_USB is not set */
-/* end of FreeRTOS Setting */
+/* end of Third-Party Configuration */
+
+/* Kernel Configuration */
+
+#define CONFIG_FREERTOS_OPTIMIZED_SCHEDULER
+#define CONFIG_FREERTOS_HZ 1000
+#define CONFIG_FREERTOS_MAX_PRIORITIES 32
+#define CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES 13
+#define CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES 11
+#define CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS 1
+#define CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE 1024
+#define CONFIG_FREERTOS_MAX_TASK_NAME_LEN 32
+#define CONFIG_FREERTOS_TIMER_TASK_PRIORITY 1
+#define CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH 2048
+#define CONFIG_FREERTOS_TIMER_QUEUE_LENGTH 10
+#define CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE 0
+#define CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS
+#define CONFIG_FREERTOS_USE_TRACE_FACILITY
+#define CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS
+/* CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set */
+#define CONFIG_FREERTOS_TOTAL_HEAP_SIZE 10240
+#define CONFIG_FREERTOS_TASK_FPU_SUPPORT 1
+/* end of Kernel Configuration */
#endif
diff --git a/example/peripheral/adc/src/adc_example.c b/example/peripheral/adc/src/adc_example.c
index 6387d65c4d40daba232fb136267c46f4b96fc35f..0dcfdffdc4964cf34d1dca1f83f2937e46472c76 100644
--- a/example/peripheral/adc/src/adc_example.c
+++ b/example/peripheral/adc/src/adc_example.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: adc_example.c
* Date: 2022-07-11 11:32:48
* LastEditTime: 2022-07-11 11:32:48
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
+ * Description: This file is for ADC task implementations
+ *
+ * Modify History:
+ * Ver Who Date Changes
* ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2022/08/31 first commit
*/
#include
#include "FreeRTOSConfig.h"
@@ -32,13 +33,13 @@
#include "fassert.h"
/* The periods assigned to the one-shot timers. */
-#define ONE_SHOT_TIMER_PERIOD ( pdMS_TO_TICKS( 60000UL ))
+#define ONE_SHOT_TIMER_PERIOD ( pdMS_TO_TICKS( 60000UL ))
/* adc read period */
-#define ADC_READ_PERIOD ( pdMS_TO_TICKS( 2000UL ))
+#define ADC_READ_PERIOD ( pdMS_TO_TICKS( 2000UL ))
/* adc channel use, 0/1 */
-#define ADC_CHANNEL_USE FADC_CHANNEL_0
+#define ADC_CHANNEL_USE FADC_CHANNEL_0
/* TESTC board, ADC_VREF = 1.25V */
#define REF_VOL 1.25
@@ -59,9 +60,8 @@ static void FFreeRTOSAdcIntrSet(FFreeRTOSAdc *os_adc_p)
{
u32 cpu_id;
GetCpuId(&cpu_id);
- printf("cpu_id is %d \r\n",cpu_id);
- FAdcCtrl *instance_p = &os_adc_p->adc_ctrl;
+ FAdcCtrl *instance_p = &os_adc_p->adc_ctrl;
InterruptSetTargetCpus(instance_p->config.irq_num, cpu_id);
InterruptSetPriority(instance_p->config.irq_num, instance_p->config.irq_prority);
InterruptInstall(instance_p->config.irq_num, FAdcIntrHandler, instance_p, "adc");
@@ -70,196 +70,196 @@ static void FFreeRTOSAdcIntrSet(FFreeRTOSAdc *os_adc_p)
static void FFreeRTOSAdcInitTask(void *pvParameters)
{
- /* The adc_id to use is passed in via the parameter.
- Cast this to a adc_id pointer. */
- u32 adc_id = (u32)(uintptr)pvParameters;
+ /* The adc_id to use is passed in via the parameter.
+ Cast this to a adc_id pointer. */
+ u32 adc_id = (u32)(uintptr)pvParameters;
- FError ret = FADC_SUCCESS;
+ FError ret = FADC_SUCCESS;
- /* set channel 0 and 1 iopad*/
+ /* set channel 0 and 1 iopad*/
#if defined(CONFIG_TARGET_E2000)
FIOPadSetAdcMux(adc_id, ADC_CHANNEL_USE);
#endif
- /* init adc controller */
- os_adc_ctrl_p = FFreeRTOSAdcInit(adc_id);
- if(os_adc_ctrl_p == NULL)
- {
- printf("FFreeRTOSAdcInit failed!!!\n");
- goto adc_init_exit;
- }
+ /* init adc controller */
+ os_adc_ctrl_p = FFreeRTOSAdcInit(adc_id);
+ if (os_adc_ctrl_p == NULL)
+ {
+ printf("FFreeRTOSAdcInit failed!!!\n");
+ goto adc_init_exit;
+ }
- /* init adc interrupt handler */
- FFreeRTOSAdcIntrSet(os_adc_ctrl_p);
+ /* init adc interrupt handler */
+ FFreeRTOSAdcIntrSet(os_adc_ctrl_p);
- /* adc config */
- FFreeRTOSAdcConfig adc_config;
- memset(&adc_config, 0, sizeof(adc_config));
+ /* adc config */
+ FFreeRTOSAdcConfig adc_config;
+ memset(&adc_config, 0, sizeof(adc_config));
- adc_config.channel = ADC_CHANNEL_USE;
+ adc_config.channel = ADC_CHANNEL_USE;
- /* adc controller configuration*/
- adc_config.convert_config.convert_mode = FADC_SINGLE_CONVERT;
+ /* adc controller configuration*/
+ adc_config.convert_config.convert_mode = FADC_SINGLE_CONVERT;
adc_config.convert_config.channel_mode = FADC_MULTI_CHANNEL;
adc_config.convert_config.convert_interval = 10;
adc_config.convert_config.clk_div = 8;
- /* adc channel threshold configuration*/
- adc_config.threshold_config.high_threshold = 1000;
+ /* adc channel threshold configuration*/
+ adc_config.threshold_config.high_threshold = 1000;
adc_config.threshold_config.low_threshold = 0;
- /* adc channel interrupt configuration*/
- adc_config.event_type = FADC_INTR_EVENT_COVFIN;
+ /* adc channel interrupt configuration*/
+ adc_config.event_type = FADC_INTR_EVENT_COVFIN;
- ret = FFreeRTOSAdcSet(os_adc_ctrl_p, &adc_config);
- if (FADC_SUCCESS != ret)
- {
- printf("FFreeRTOSAdcSet failed\n");
- goto adc_init_exit;
- }
+ ret = FFreeRTOSAdcSet(os_adc_ctrl_p, &adc_config);
+ if (FADC_SUCCESS != ret)
+ {
+ printf("FFreeRTOSAdcSet failed !!!\n");
+ goto adc_init_exit;
+ }
- printf("FFreeRTOSAdcInitTask execute success !!!\r\n");
+ printf("FFreeRTOSAdcInitTask execute success !!!\r\n");
for (int i = 0; i < TEST_TASK_NUM; i++)
{
xSemaphoreGive(xCountingSemaphore);
}
-adc_init_exit:
+adc_init_exit:
vTaskDelete(NULL);
}
static void FFreeRTOSAdcReadTask(void *pvParameters)
{
- xSemaphoreTake(xCountingSemaphore, portMAX_DELAY);
-
- FError ret = FADC_SUCCESS;
- float val = 0.0;
- u16 adc_val = 0;
- u16 count = 0;
-
- /* As per most tasks, this task is implemented in an infinite loop. */
- for (;;)
- {
- ret = FFreeRTOSAdcRead(os_adc_ctrl_p, ADC_CHANNEL_USE, &adc_val);
- if(ret == FADC_SUCCESS)
+ xSemaphoreTake(xCountingSemaphore, portMAX_DELAY);
+
+ FError ret = FADC_SUCCESS;
+ float val = 0.0;
+ u16 adc_val = 0;
+ u16 count = 0;
+
+ /* As per most tasks, this task is implemented in an infinite loop. */
+ for (;;)
+ {
+ ret = FFreeRTOSAdcRead(os_adc_ctrl_p, ADC_CHANNEL_USE, &adc_val);
+ if (ret == FADC_SUCCESS)
{
val = (float)adc_val;
val = val * REF_VOL / 1024; /* 2^10 */
- printf("adc read success, count=%d, reg_value=%d, value=%f\n", count, adc_val, val);
- }
+ printf("adc read success, count=%d, reg_value=%d, value=%f.\r\n", count, adc_val, val);
+ }
else
{
- printf("adc read failed.\n");
+ printf("adc read failed.\r\n");
}
- count++;
-
- vTaskDelay(ADC_READ_PERIOD);
- }
+ count++;
+
+ vTaskDelay(ADC_READ_PERIOD);
+ }
}
-static void prvOneShotTimerCallback( TimerHandle_t xTimer )
+static void prvOneShotTimerCallback(TimerHandle_t xTimer)
{
- /* Output a string to show the time at which the callback was executed. */
- printf("One-shot timer callback executing, will delete FFreeRTOSAdcReadTask.\r\n" );
+ /* Output a string to show the time at which the callback was executed. */
+ printf("One-shot timer callback executing, will delete FFreeRTOSAdcReadTask.\r\n");
- FFreeRTOSAdcDelete(os_adc_ctrl_p);
+ FFreeRTOSAdcDelete(os_adc_ctrl_p);
}
/* create adc test, id is adc module number */
BaseType_t FFreeRTOSAdcCreate(u32 id)
{
- FASSERT(id < FADC_INSTANCE_NUM);
+ FASSERT(id < FADC_NUM);
BaseType_t xReturn = pdPASS;/* 定义一个创建信息返回值,默认为 pdPASS */
- BaseType_t timer_started = pdPASS;
-
- xCountingSemaphore = xSemaphoreCreateCounting(TEST_TASK_NUM, 0);
- if (xCountingSemaphore == NULL)
- {
- printf("FFreeRTOSAdcCreate xCountingSemaphore create failed.\r\n" );
- return pdFAIL;
- }
- /* enter critical region */
- taskENTER_CRITICAL();
- /* adc init task */
- xReturn = xTaskCreate((TaskFunction_t )FFreeRTOSAdcInitTask, /* 任务入口函数 */
- (const char* )"FFreeRTOSAdcInitTask",/* 任务名字 */
- (uint16_t )1024, /* 任务栈大小 */
- (void* )(uintptr)id,/* 任务入口函数参数 */
- (UBaseType_t )1, /* 任务的优先级 */
- NULL); /* 任务控制 */
-
- /* 读adc任务 */
- xReturn = xTaskCreate((TaskFunction_t )FFreeRTOSAdcReadTask, /* 任务入口函数 */
- (const char* )"FFreeRTOSAdcReadTask",/* 任务名字 */
- (uint16_t )1024, /* 任务栈大小 */
- NULL,/* 任务入口函数参数 */
- (UBaseType_t )configMAX_PRIORITIES-1, /* 任务的优先级 */
- (TaskHandle_t* )&read_handle); /* 任务控制 */
-
- /* Create the one shot software timer, storing the handle to the created
- software timer in xOneShotTimer. */
- xOneShotTimer = xTimerCreate( "OneShot Software Timer", /* Text name for the software timer - not used by FreeRTOS. */
- ONE_SHOT_TIMER_PERIOD, /* The software timer's period in ticks. */
- pdFALSE, /* Setting uxAutoRealod to pdFALSE creates a one-shot software timer. */
- 0, /* This example use the timer id. */
- prvOneShotTimerCallback ); /* The callback function to be used by the software timer being created. */
-
- /* Check the timers were created. */
- if( xOneShotTimer != NULL )
- {
- /* Start the software timers, using a block time of 0 (no block time).
- The scheduler has not been started yet so any block time specified here
- would be ignored anyway. */
- timer_started = xTimerStart( xOneShotTimer, 0 );
-
- /* The implementation of xTimerStart() uses the timer command queue, and
- xTimerStart() will fail if the timer command queue gets full. The timer
- service task does not get created until the scheduler is started, so all
- commands sent to the command queue will stay in the queue until after
- the scheduler has been started. Check both calls to xTimerStart()
- passed. */
- if(timer_started != pdPASS)
- {
- vPrintf("CreateSoftwareTimerTasks xTimerStart failed \r\n");
- }
- }
- else
- {
- vPrintf("CreateSoftwareTimerTasks xTimerCreate failed \r\n");
- }
-
- /* exit critical region */
- taskEXIT_CRITICAL();
-
+ BaseType_t timer_started = pdPASS;
+
+ xCountingSemaphore = xSemaphoreCreateCounting(TEST_TASK_NUM, 0);
+ if (xCountingSemaphore == NULL)
+ {
+ printf("FFreeRTOSAdcCreate xCountingSemaphore create failed.\r\n");
+ return pdFAIL;
+ }
+ /* enter critical region */
+ taskENTER_CRITICAL();
+ /* adc init task */
+ xReturn = xTaskCreate((TaskFunction_t)FFreeRTOSAdcInitTask, /* 任务入口函数 */
+ (const char *)"FFreeRTOSAdcInitTask",/* 任务名字 */
+ (uint16_t)1024, /* 任务栈大小 */
+ (void *)(uintptr)id,/* 任务入口函数参数 */
+ (UBaseType_t)1, /* 任务的优先级 */
+ NULL); /* 任务控制 */
+
+ /* 读adc任务 */
+ xReturn = xTaskCreate((TaskFunction_t)FFreeRTOSAdcReadTask, /* 任务入口函数 */
+ (const char *)"FFreeRTOSAdcReadTask",/* 任务名字 */
+ (uint16_t)1024, /* 任务栈大小 */
+ NULL,/* 任务入口函数参数 */
+ (UBaseType_t)configMAX_PRIORITIES - 1, /* 任务的优先级 */
+ (TaskHandle_t *)&read_handle); /* 任务控制 */
+
+ /* Create the one shot software timer, storing the handle to the created
+ software timer in xOneShotTimer. */
+ xOneShotTimer = xTimerCreate("OneShot Software Timer", /* Text name for the software timer - not used by FreeRTOS. */
+ ONE_SHOT_TIMER_PERIOD, /* The software timer's period in ticks. */
+ pdFALSE, /* Setting uxAutoRealod to pdFALSE creates a one-shot software timer. */
+ 0, /* This example use the timer id. */
+ prvOneShotTimerCallback); /* The callback function to be used by the software timer being created. */
+
+ /* Check the timers were created. */
+ if (xOneShotTimer != NULL)
+ {
+ /* Start the software timers, using a block time of 0 (no block time).
+ The scheduler has not been started yet so any block time specified here
+ would be ignored anyway. */
+ timer_started = xTimerStart(xOneShotTimer, 0);
+
+ /* The implementation of xTimerStart() uses the timer command queue, and
+ xTimerStart() will fail if the timer command queue gets full. The timer
+ service task does not get created until the scheduler is started, so all
+ commands sent to the command queue will stay in the queue until after
+ the scheduler has been started. Check both calls to xTimerStart()
+ passed. */
+ if (timer_started != pdPASS)
+ {
+ vPrintf("CreateSoftwareTimerTasks xTimerStart failed. \r\n");
+ }
+ }
+ else
+ {
+ vPrintf("CreateSoftwareTimerTasks xTimerCreate failed. \r\n");
+ }
+
+ /* exit critical region */
+ taskEXIT_CRITICAL();
+
return xReturn;
}
static void FFreeRTOSAdcDelete(FFreeRTOSAdc *os_adc_p)
{
- BaseType_t xReturn = pdPASS;
+ BaseType_t xReturn = pdPASS;
- /* deinit adc controller */
- FFreeRTOSAdcDeinit(os_adc_p);
-
- if(read_handle)
+ /* deinit adc controller */
+ FFreeRTOSAdcDeinit(os_adc_p);
+
+ if (read_handle)
{
vTaskDelete(read_handle);
- vPrintf("Delete FFreeRTOSAdcReadTask success\r\n");
+ vPrintf("Delete FFreeRTOSAdcReadTask success.\r\n");
}
- /* delete count sem */
- vSemaphoreDelete(xCountingSemaphore);
-
- /* delete timer */
- xReturn = xTimerDelete(xOneShotTimer, 0);
- if(xReturn != pdPASS)
- {
- vPrintf("Delete OneShot Software Timer failed.\r\n");
- }
- else
- {
- vPrintf("Delete OneShot Software Timer success.\r\n");
- }
+ /* delete count sem */
+ vSemaphoreDelete(xCountingSemaphore);
+
+ /* delete timer */
+ xReturn = xTimerDelete(xOneShotTimer, 0);
+ if (xReturn != pdPASS)
+ {
+ vPrintf("Delete OneShot Software Timer failed.\r\n");
+ }
+ else
+ {
+ vPrintf("Delete OneShot Software Timer success.\r\n");
+ }
}
\ No newline at end of file
diff --git a/example/peripheral/can/configs/d2000_aarch32_eg_configs b/example/peripheral/can/configs/d2000_aarch32_eg_configs
index 21df156565e2e19858ac7e7134e1b32f3f90ef1d..1924d2d0cff655313f605d5903c54c1e31bfbafc 100644
--- a/example/peripheral/can/configs/d2000_aarch32_eg_configs
+++ b/example/peripheral/can/configs/d2000_aarch32_eg_configs
@@ -74,6 +74,7 @@ CONFIG_USE_FCAN=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -118,6 +119,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -154,6 +164,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -175,12 +186,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -192,14 +197,32 @@ CONFIG_FREERTOS_USE_UART=y
#
CONFIG_FREERTOS_USE_CAN=y
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -217,4 +240,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
# CONFIG_USE_TLSF is not set
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/can/configs/d2000_aarch64_eg_configs b/example/peripheral/can/configs/d2000_aarch64_eg_configs
index 4f6cc9f82e64bea75659a3f010c254d51391c0dd..324b036b22fcc52fbbcadd9cccbe8444c4791773 100644
--- a/example/peripheral/can/configs/d2000_aarch64_eg_configs
+++ b/example/peripheral/can/configs/d2000_aarch64_eg_configs
@@ -74,6 +74,7 @@ CONFIG_USE_FCAN=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -114,6 +115,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -150,6 +160,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -171,12 +182,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -188,14 +193,32 @@ CONFIG_FREERTOS_USE_UART=y
#
CONFIG_FREERTOS_USE_CAN=y
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -213,4 +236,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
# CONFIG_USE_TLSF is not set
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/can/configs/e2000d_aarch32_eg_configs b/example/peripheral/can/configs/e2000d_aarch32_eg_configs
index 3cd7acf3de64693ee3a3363152f0580c7f2392ef..87bbc467f0b8c70ff238c0479e6a9e9ece882660 100644
--- a/example/peripheral/can/configs/e2000d_aarch32_eg_configs
+++ b/example/peripheral/can/configs/e2000d_aarch32_eg_configs
@@ -75,6 +75,7 @@ CONFIG_USE_FCAN=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -119,6 +120,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -155,6 +165,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -176,12 +187,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -193,14 +198,32 @@ CONFIG_FREERTOS_USE_UART=y
#
CONFIG_FREERTOS_USE_CAN=y
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -218,4 +241,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
# CONFIG_USE_TLSF is not set
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/can/configs/e2000d_aarch64_eg_configs b/example/peripheral/can/configs/e2000d_aarch64_eg_configs
index 6a693a60e600129bdda400967365491c6edb743a..640ce2b4a88a0242042244fececc498de3b1493a 100644
--- a/example/peripheral/can/configs/e2000d_aarch64_eg_configs
+++ b/example/peripheral/can/configs/e2000d_aarch64_eg_configs
@@ -75,6 +75,7 @@ CONFIG_USE_FCAN=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -115,6 +116,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -151,6 +161,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -172,12 +183,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -189,14 +194,32 @@ CONFIG_FREERTOS_USE_UART=y
#
CONFIG_FREERTOS_USE_CAN=y
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -214,4 +237,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
# CONFIG_USE_TLSF is not set
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/can/configs/e2000q_aarch32_eg_configs b/example/peripheral/can/configs/e2000q_aarch32_eg_configs
index 8594079b22fc50c818cef68986187d736025828e..06db6845ba0395fc2322eaad50e4fbec2afa852e 100644
--- a/example/peripheral/can/configs/e2000q_aarch32_eg_configs
+++ b/example/peripheral/can/configs/e2000q_aarch32_eg_configs
@@ -75,6 +75,7 @@ CONFIG_USE_FCAN=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -119,6 +120,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -155,6 +165,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -176,12 +187,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -193,14 +198,32 @@ CONFIG_FREERTOS_USE_UART=y
#
CONFIG_FREERTOS_USE_CAN=y
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -218,4 +241,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
# CONFIG_USE_TLSF is not set
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/can/configs/e2000q_aarch64_eg_configs b/example/peripheral/can/configs/e2000q_aarch64_eg_configs
index d4e4e1f6e5ce65e05b2fb79d3e9f5e291e817c51..e9333d80518d691fd161e2a71c63b9e1176764bf 100644
--- a/example/peripheral/can/configs/e2000q_aarch64_eg_configs
+++ b/example/peripheral/can/configs/e2000q_aarch64_eg_configs
@@ -75,6 +75,7 @@ CONFIG_USE_FCAN=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -115,6 +116,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -151,6 +161,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -172,12 +183,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -189,14 +194,32 @@ CONFIG_FREERTOS_USE_UART=y
#
CONFIG_FREERTOS_USE_CAN=y
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -214,4 +237,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
# CONFIG_USE_TLSF is not set
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/can/configs/ft2004_aarch32_eg_configs b/example/peripheral/can/configs/ft2004_aarch32_eg_configs
index db34ea5bf4e30a7bba307d80736056112ad21636..288cecd8b0405335f64aeffda8cc56db04c4d9ba 100644
--- a/example/peripheral/can/configs/ft2004_aarch32_eg_configs
+++ b/example/peripheral/can/configs/ft2004_aarch32_eg_configs
@@ -74,6 +74,7 @@ CONFIG_USE_FCAN=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -118,6 +119,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -154,6 +164,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -175,12 +186,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -192,14 +197,32 @@ CONFIG_FREERTOS_USE_UART=y
#
CONFIG_FREERTOS_USE_CAN=y
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -217,4 +240,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
# CONFIG_USE_TLSF is not set
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/can/configs/ft2004_aarch64_eg_configs b/example/peripheral/can/configs/ft2004_aarch64_eg_configs
index 405c6b734978b1c3499dc859149f2a11acf5721d..5ce7b18d2efa5e67e8b18afac3363839bec183b6 100644
--- a/example/peripheral/can/configs/ft2004_aarch64_eg_configs
+++ b/example/peripheral/can/configs/ft2004_aarch64_eg_configs
@@ -74,6 +74,7 @@ CONFIG_USE_FCAN=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -114,6 +115,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -150,6 +160,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -171,12 +182,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -188,14 +193,32 @@ CONFIG_FREERTOS_USE_UART=y
#
CONFIG_FREERTOS_USE_CAN=y
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -213,4 +236,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
# CONFIG_USE_TLSF is not set
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/can/inc/can_example.h b/example/peripheral/can/inc/can_example.h
index 27231abbcb0220e24841eb974220e14347a248e7..04e1b61616b607af7c648f66057ce83ae3cef0a4 100644
--- a/example/peripheral/can/inc/can_example.h
+++ b/example/peripheral/can/inc/can_example.h
@@ -1,30 +1,41 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: can_example.h
* Date: 2022-08-25 16:22:40
* LastEditTime: 2022-08-26 15:40:40
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
+ * Description: This file is for task create function define
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2022/09/23 first commit
*/
#ifndef CAN_EXAMPLE_H
#define CAN_EXAMPLE_H
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
/* adc test */
BaseType_t FFreeRTOSCanCreate(void);
+
+#ifdef __cplusplus
+}
+#endif
+
#endif // !
\ No newline at end of file
diff --git a/example/peripheral/can/main.c b/example/peripheral/can/main.c
index 0cc8fe444ba47b95a567011e12f50764c29de728..40b4c136ef4510ed8b94df8218aa439c0b712d71 100644
--- a/example/peripheral/can/main.c
+++ b/example/peripheral/can/main.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: main.c
* Date: 2022-06-17 08:17:59
* LastEditTime: 2022-06-17 08:17:59
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
+ * Description: This file is for CAN example that running CAN task、shell task and open scheduler
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2022/09/23 first commit
*/
#include "shell.h"
@@ -32,17 +33,21 @@ int main(void)
/* test can 0 and can 1, loopback */
ret = FFreeRTOSCanCreate();
- if(ret != pdPASS)
+ if (ret != pdPASS)
+ {
goto FAIL_EXIT;
+ }
ret = LSUserShellTask() ;
- if(ret != pdPASS)
+ if (ret != pdPASS)
+ {
goto FAIL_EXIT;
+ }
- vTaskStartScheduler(); /* 启动任务,开启调度 */
+ vTaskStartScheduler(); /* 启动任务,开启调度 */
while (1); /* 正常不会执行到这里 */
-
+
FAIL_EXIT:
- printf("failed 0x%x \r\n", ret);
+ printf("failed 0x%x. \r\n", ret);
return 0;
}
diff --git a/example/peripheral/can/sdkconfig b/example/peripheral/can/sdkconfig
index d4e4e1f6e5ce65e05b2fb79d3e9f5e291e817c51..e9333d80518d691fd161e2a71c63b9e1176764bf 100644
--- a/example/peripheral/can/sdkconfig
+++ b/example/peripheral/can/sdkconfig
@@ -75,6 +75,7 @@ CONFIG_USE_FCAN=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -115,6 +116,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -151,6 +161,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -172,12 +183,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -189,14 +194,32 @@ CONFIG_FREERTOS_USE_UART=y
#
CONFIG_FREERTOS_USE_CAN=y
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -214,4 +237,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
# CONFIG_USE_TLSF is not set
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/can/sdkconfig.h b/example/peripheral/can/sdkconfig.h
index 75a30b3b40911d0db7289754ebdc4cb4c1bca83e..1eaaf3cff7373d3f261a6c639a28f49a296be55c 100644
--- a/example/peripheral/can/sdkconfig.h
+++ b/example/peripheral/can/sdkconfig.h
@@ -68,6 +68,7 @@
/* CONFIG_USE_ADC is not set */
/* CONFIG_USE_PWM is not set */
/* CONFIG_USE_IPC is not set */
+/* CONFIG_USE_MEDIA is not set */
/* end of Components Configuration */
#define CONFIG_USE_NEW_LIBC
/* end of Standalone Setting */
@@ -104,6 +105,12 @@
/* Compiler Options */
+/* Cross-Compiler Setting */
+
+#define CONFIG_GCC_OPTIMIZE_LEVEL 0
+/* CONFIG_USE_EXT_COMPILER is not set */
+/* CONFIG_USE_KLIN_SYS is not set */
+/* end of Cross-Compiler Setting */
#define CONFIG_OUTPUT_BINARY
/* end of Compiler Options */
/* end of Building Option */
@@ -133,6 +140,7 @@
/* Freertos Eth Drivers */
/* CONFIG_FREERTOS_USE_XMAC is not set */
+/* CONFIG_FREERTOS_USE_GMAC is not set */
/* end of Freertos Eth Drivers */
/* Freertos Gpio Drivers */
@@ -151,11 +159,6 @@
/* CONFIG_FREERTOS_USE_FGDMA is not set */
/* end of Freertos DMA Drivers */
-/* Freertos MMC Drivers */
-
-/* CONFIG_FREERTOS_USE_FSDIO is not set */
-/* end of Freertos MMC Drivers */
-
/* Freertos Adc Drivers */
/* CONFIG_FREERTOS_USE_ADC is not set */
@@ -165,13 +168,28 @@
#define CONFIG_FREERTOS_USE_CAN
/* end of Freertos Can Drivers */
+
+/* Freertos I2c Drivers */
+
+/* CONFIG_FREERTOS_USE_I2C is not set */
+/* end of Freertos I2c Drivers */
+
+/* Freertos Mio Drivers */
+
+/* CONFIG_FREERTOS_USE_MIO is not set */
+/* end of Freertos Mio Drivers */
+
+/* Freertos Timer Drivers */
+
+/* CONFIG_FREERTOS_USE_TIMER is not set */
+/* end of Freertos Timer Drivers */
/* end of Component Configuration */
-/* FreeRTOS Setting */
+/* Third-Party Configuration */
/* CONFIG_USE_LWIP is not set */
#define CONFIG_USE_BACKTRACE
-/* CONFIG_USE_FATFS is not set */
+/* CONFIG_USE_FATFS_0_1_4 is not set */
/* CONFIG_USE_SFUD is not set */
/* CONFIG_USE_SPIFFS is not set */
/* CONFIG_USE_AMP is not set */
@@ -187,6 +205,28 @@
/* CONFIG_USE_TLSF is not set */
/* CONFIG_USE_SDMMC_CMD is not set */
/* CONFIG_USE_CHERRY_USB is not set */
-/* end of FreeRTOS Setting */
+/* end of Third-Party Configuration */
+
+/* Kernel Configuration */
+
+#define CONFIG_FREERTOS_OPTIMIZED_SCHEDULER
+#define CONFIG_FREERTOS_HZ 1000
+#define CONFIG_FREERTOS_MAX_PRIORITIES 32
+#define CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES 13
+#define CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES 11
+#define CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS 1
+#define CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE 1024
+#define CONFIG_FREERTOS_MAX_TASK_NAME_LEN 32
+#define CONFIG_FREERTOS_TIMER_TASK_PRIORITY 1
+#define CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH 2048
+#define CONFIG_FREERTOS_TIMER_QUEUE_LENGTH 10
+#define CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE 0
+#define CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS
+#define CONFIG_FREERTOS_USE_TRACE_FACILITY
+#define CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS
+/* CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set */
+#define CONFIG_FREERTOS_TOTAL_HEAP_SIZE 10240
+#define CONFIG_FREERTOS_TASK_FPU_SUPPORT 1
+/* end of Kernel Configuration */
#endif
diff --git a/example/peripheral/can/src/can_example.c b/example/peripheral/can/src/can_example.c
index fa2fb3cb2d202a43c3fcd3e9cf1cfe8905e59d70..da22ee3ab2cfc090aee7808a6ace85330f924a2a 100644
--- a/example/peripheral/can/src/can_example.c
+++ b/example/peripheral/can/src/can_example.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: can_example.c
* Date: 2022-07-11 11:32:48
* LastEditTime: 2022-07-11 11:32:48
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
+ * Description: This file is for CAN task implementations
+ *
+ * Modify History:
+ * Ver Who Date Changes
* ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2022/09/23 first commit
*/
#include
#include
@@ -40,19 +41,19 @@
#define FCAN_TEST_ERROR(format, ...) FT_DEBUG_PRINT_E(FCAN_TEST_DEBUG_TAG, format, ##__VA_ARGS__)
/* The periods assigned to the one-shot timers. */
-#define ONE_SHOT_TIMER_PERIOD ( pdMS_TO_TICKS( 20000UL ))
+#define ONE_SHOT_TIMER_PERIOD ( pdMS_TO_TICKS( 20000UL ))
/* can send period */
-#define CAN_SEND_PERIOD ( pdMS_TO_TICKS( 1000UL ))
+#define CAN_SEND_PERIOD ( pdMS_TO_TICKS( 1000UL ))
/* can baudrate */
#define ARB_BAUD_RATE 1000000
#define DATA_BAUD_RATE 1000000
-typedef struct
+typedef struct
{
- u32 count;
- FFreeRTOSCan *os_can_p;
+ u32 count;
+ FFreeRTOSCan *os_can_p;
} FCanQueueData;
/* Declare a variable of type QueueHandle_t. This is used to store the queue
@@ -64,10 +65,10 @@ static xTaskHandle recv_handle;
static TimerHandle_t xOneShotTimer;
-static FFreeRTOSCan *os_can_ctrl_p[FCAN_INSTANCE_NUM];
+static FFreeRTOSCan *os_can_ctrl_p[FCAN_NUM];
-static FCanFrame send_frame[FCAN_INSTANCE_NUM];
-static FCanFrame recv_frame[FCAN_INSTANCE_NUM];
+static FCanFrame send_frame[FCAN_NUM];
+static FCanFrame recv_frame[FCAN_NUM];
static void FFreeRTOSCanSendTask(void *pvParameters);
static void FFreeRTOSCanRecvTask(void *pvParameters);
@@ -76,230 +77,240 @@ static void FFreeRTOSCanDelete(void);
static void FCanTxIrqCallback(void *args)
{
FFreeRTOSCan *os_can_p = (FFreeRTOSCan *)args;
- FCAN_TEST_DEBUG("Can%d irq send frame is ok", os_can_p->can_ctrl.config.instance_id);
+ FCAN_TEST_DEBUG("Can%d irq send frame is ok.", os_can_p->can_ctrl.config.instance_id);
}
static void FCanRxIrqCallback(void *args)
{
- FFreeRTOSCan *os_can_p = (FFreeRTOSCan *)args;
- FCAN_TEST_DEBUG("Can%d irq recv frame callback", os_can_p->can_ctrl.config.instance_id);
-
- static FCanQueueData xSendStructure;
- xSendStructure.os_can_p = os_can_p;
+ FFreeRTOSCan *os_can_p = (FFreeRTOSCan *)args;
+ FCAN_TEST_DEBUG("Can%d irq recv frame callback.", os_can_p->can_ctrl.config.instance_id);
+
+ static FCanQueueData xSendStructure;
+ xSendStructure.os_can_p = os_can_p;
- portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
+ portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
- xQueueSendToBackFromISR(xQueue, &xSendStructure, &xHigherPriorityTaskWoken);
+ xQueueSendToBackFromISR(xQueue, &xSendStructure, &xHigherPriorityTaskWoken);
- /* never call taskYIELD() form ISR! */
- portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
+ /* never call taskYIELD() form ISR! */
+ portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
}
static FError FFreeRTOSCanIntrSet(FFreeRTOSCan *os_can_p)
{
- FError ret = FCAN_SUCCESS;
-
- FCanIntrEventConfig intr_event;
- memset(&intr_event, 0, sizeof(intr_event));
-
- intr_event.type = FCAN_INTR_EVENT_SEND;
- intr_event.handler = FCanTxIrqCallback;
- intr_event.param = (void *)os_can_p;
- ret = FFreeRTOSCanControl(os_can_p, FREERTOS_CAN_CTRL_INTR_SET, &intr_event);
- if (FCAN_SUCCESS != ret)
- {
- FCAN_TEST_ERROR("FFreeRTOSCanControl FCAN_INTR_EVENT_SEND failed\n");
- return ret;
- }
-
- intr_event.type = FCAN_INTR_EVENT_RECV;
- intr_event.handler = FCanRxIrqCallback;
- intr_event.param = (void *)os_can_p;
- ret = FFreeRTOSCanControl(os_can_p, FREERTOS_CAN_CTRL_INTR_SET, &intr_event);
- if (FCAN_SUCCESS != ret)
- {
- FCAN_TEST_ERROR("FFreeRTOSCanControl FCAN_INTR_EVENT_RECV failed\n");
- return ret;
- }
-
- u32 cpu_id;
+ FError ret = FCAN_SUCCESS;
+
+ FCanIntrEventConfig intr_event;
+ memset(&intr_event, 0, sizeof(intr_event));
+
+ intr_event.type = FCAN_INTR_EVENT_SEND;
+ intr_event.handler = FCanTxIrqCallback;
+ intr_event.param = (void *)os_can_p;
+ ret = FFreeRTOSCanControl(os_can_p, FREERTOS_CAN_CTRL_INTR_SET, &intr_event);
+ if (FCAN_SUCCESS != ret)
+ {
+ FCAN_TEST_ERROR("FFreeRTOSCanControl FCAN_INTR_EVENT_SEND failed.");
+ return ret;
+ }
+
+ intr_event.type = FCAN_INTR_EVENT_RECV;
+ intr_event.handler = FCanRxIrqCallback;
+ intr_event.param = (void *)os_can_p;
+ ret = FFreeRTOSCanControl(os_can_p, FREERTOS_CAN_CTRL_INTR_SET, &intr_event);
+ if (FCAN_SUCCESS != ret)
+ {
+ FCAN_TEST_ERROR("FFreeRTOSCanControl FCAN_INTR_EVENT_RECV failed.");
+ return ret;
+ }
+
+ u32 cpu_id;
GetCpuId(&cpu_id);
- FCanCtrl *instance_p = &os_can_p->can_ctrl;
+ FCanCtrl *instance_p = &os_can_p->can_ctrl;
InterruptSetTargetCpus(instance_p->config.irq_num, cpu_id);
InterruptSetPriority(instance_p->config.irq_num, instance_p->config.irq_prority);
InterruptInstall(instance_p->config.irq_num, FCanIntrHandler, instance_p, "can");
InterruptUmask(instance_p->config.irq_num);
- return ret;
+ return ret;
}
static FError FFreeRTOSCanBaudrateSet(FFreeRTOSCan *os_can_p)
{
- FError ret = FCAN_SUCCESS;
-
- FCanIntrEventConfig intr_event;
- memset(&intr_event, 0, sizeof(intr_event));
-
- FCanBaudrateConfig arb_segment_config;
- FCanBaudrateConfig data_segment_config;
- memset(&arb_segment_config, 0, sizeof(arb_segment_config));
- memset(&data_segment_config, 0, sizeof(data_segment_config));
- arb_segment_config.baudrate = ARB_BAUD_RATE;
- arb_segment_config.auto_calc = TRUE;
- arb_segment_config.segment = FCAN_ARB_SEGMENT;
-
- data_segment_config.baudrate = DATA_BAUD_RATE;
- data_segment_config.auto_calc = TRUE;
- data_segment_config.segment = FCAN_DATA_SEGMENT;
-
- ret = FFreeRTOSCanControl(os_can_p, FREERTOS_CAN_CTRL_BAUDRATE_SET, &arb_segment_config);
- if (FCAN_SUCCESS != ret)
- {
- FCAN_TEST_ERROR("FFreeRTOSCanControl arb_segment_config failed\n");
- return ret;
- }
-
- ret = FFreeRTOSCanControl(os_can_p, FREERTOS_CAN_CTRL_BAUDRATE_SET, &data_segment_config);
- if (FCAN_SUCCESS != ret)
- {
- FCAN_TEST_ERROR("FFreeRTOSCanControl data_segment_config failed\n");
- return ret;
- }
- return ret;
+ FError ret = FCAN_SUCCESS;
+
+ FCanIntrEventConfig intr_event;
+ memset(&intr_event, 0, sizeof(intr_event));
+
+ FCanBaudrateConfig arb_segment_config;
+ FCanBaudrateConfig data_segment_config;
+ memset(&arb_segment_config, 0, sizeof(arb_segment_config));
+ memset(&data_segment_config, 0, sizeof(data_segment_config));
+ arb_segment_config.baudrate = ARB_BAUD_RATE;
+ arb_segment_config.auto_calc = TRUE;
+ arb_segment_config.segment = FCAN_ARB_SEGMENT;
+
+ data_segment_config.baudrate = DATA_BAUD_RATE;
+ data_segment_config.auto_calc = TRUE;
+ data_segment_config.segment = FCAN_DATA_SEGMENT;
+
+ ret = FFreeRTOSCanControl(os_can_p, FREERTOS_CAN_CTRL_BAUDRATE_SET, &arb_segment_config);
+ if (FCAN_SUCCESS != ret)
+ {
+ FCAN_TEST_ERROR("FFreeRTOSCanControl arb_segment_config failed.");
+ return ret;
+ }
+
+ ret = FFreeRTOSCanControl(os_can_p, FREERTOS_CAN_CTRL_BAUDRATE_SET, &data_segment_config);
+ if (FCAN_SUCCESS != ret)
+ {
+ FCAN_TEST_ERROR("FFreeRTOSCanControl data_segment_config failed.");
+ return ret;
+ }
+ return ret;
}
static FError FFreeRTOSCanIdMaskSet(FFreeRTOSCan *os_can_p)
{
- FError ret = FCAN_SUCCESS;
-
- FCanIdMaskConfig id_mask;
- memset(&id_mask, 0, sizeof(id_mask));
- for (int i = 0; i < FCAN_ACC_ID_REG_NUM; i++)
- {
- id_mask.filter_index = i;
- id_mask.id = 0;
- id_mask.mask = FCAN_ACC_IDN_MASK;
- ret = FFreeRTOSCanControl(os_can_p, FREERTOS_CAN_CTRL_ID_MASK_SET, &id_mask);
- if (FCAN_SUCCESS != ret)
- {
- FCAN_TEST_ERROR("FFreeRTOSCanControl FREERTOS_CAN_CTRL_ID_MASK_SET %d failed\n", i);
- return ret;
- }
- }
-
- return ret;
+ FError ret = FCAN_SUCCESS;
+
+ FCanIdMaskConfig id_mask;
+ memset(&id_mask, 0, sizeof(id_mask));
+ for (int i = 0; i < FCAN_ACC_ID_REG_NUM; i++)
+ {
+ id_mask.filter_index = i;
+ id_mask.id = 0;
+ id_mask.mask = FCAN_ACC_IDN_MASK;
+ ret = FFreeRTOSCanControl(os_can_p, FREERTOS_CAN_CTRL_ID_MASK_SET, &id_mask);
+ if (FCAN_SUCCESS != ret)
+ {
+ FCAN_TEST_ERROR("FFreeRTOSCanControl FREERTOS_CAN_CTRL_ID_MASK_SET %d failed.", i);
+ return ret;
+ }
+ }
+
+ return ret;
}
static void FFreeRTOSCanInitTask(void *pvParameters)
{
- FError ret = FCAN_SUCCESS;
- BaseType_t xReturn = pdPASS;
- FCanInstance can_id = FCAN_INSTANCE_0;
-
- for(can_id = FCAN_INSTANCE_0; can_id < FCAN_INSTANCE_NUM; can_id++)
- {
- #if defined(CONFIG_TARGET_F2000_4) || defined(CONFIG_TARGET_D2000)
- if(can_id == FCAN_INSTANCE_0)
- {
- FPinSetFunc(FIOCTRL_TJTAG_TDI_PAD, FPIN_FUNC1); /* can0-tx: func 1 */
- FPinSetFunc(FIOCTRL_SWDITMS_SWJ_PAD, FPIN_FUNC1); /* can0-rx: func 1 */
- }
- else if(can_id == FCAN_INSTANCE_1)
- {
- FPinSetFunc(FIOCTRL_NTRST_SWJ_PAD, FPIN_FUNC1); /* can1-tx: func 1 */
- FPinSetFunc(FIOCTRL_SWDO_SWJ_PAD, FPIN_FUNC1); /* can1-rx: func 1 */
- }
- else if(can_id == FCAN_INSTANCE_2)
- {
-
- }
- else
- {
- FCAN_TEST_ERROR("can id is error");
- goto can_init_exit;
- }
- #elif defined(CONFIG_TARGET_E2000)
- FIOPadSetCanMux(can_id);
- #endif
-
- /* init can controller */
- os_can_ctrl_p[can_id] = FFreeRTOSCanInit(can_id);
- if(os_can_ctrl_p[can_id] == NULL)
- {
- printf("FFreeRTOSCanInit %d failed!!!\n", can_id);
- goto can_init_exit;
- }
-
- /* set can baudrate */
- ret = FFreeRTOSCanBaudrateSet(os_can_ctrl_p[can_id]);
- if (FCAN_SUCCESS != ret)
- {
- printf("FFreeRTOSCanInit FFreeRTOSCanBaudrateSet failed!!!\n");
- goto can_init_exit;
- }
-
- /* set can id mask */
- ret = FFreeRTOSCanIdMaskSet(os_can_ctrl_p[can_id]);
- if (FCAN_SUCCESS != ret)
- {
- printf("FFreeRTOSCanInit FFreeRTOSCanIdMaskSet failed!!!\n");
- goto can_init_exit;
- }
-
- /* Identifier mask enable */
- ret = FFreeRTOSCanControl(os_can_ctrl_p[can_id], FREERTOS_CAN_CTRL_ID_MASK_ENABLE, NULL);
- if (FCAN_SUCCESS != ret)
- {
- FCAN_TEST_ERROR("FFreeRTOSCanControl FREERTOS_CAN_CTRL_ID_MASK_ENABLE failed\n");
- goto can_init_exit;
- }
-
- /* init can interrupt handler */
- ret = FFreeRTOSCanIntrSet(os_can_ctrl_p[can_id]);
- if (FCAN_SUCCESS != ret)
- {
- FCAN_TEST_ERROR("FFreeRTOSCanInit FFreeRTOSCanIntrSet failed!!!\n");
- goto can_init_exit;
- }
-
- /* enable can transfer */
- ret = FFreeRTOSCanControl(os_can_ctrl_p[can_id], FREERTOS_CAN_CTRL_ENABLE, NULL);
- if (FCAN_SUCCESS != ret)
- {
- FCAN_TEST_ERROR("FFreeRTOSCanControl FREERTOS_CAN_CTRL_ENABLE failed\n");
- goto can_init_exit;
- }
- }
-
- printf("FFreeRTOSCanInitTask execute success !!!\r\n");
-
- /* can send task */
- xReturn = xTaskCreate((TaskFunction_t )FFreeRTOSCanSendTask, /* 任务入口函数 */
- (const char* )"FFreeRTOSCanSendTask",/* 任务名字 */
- (uint16_t )1024, /* 任务栈大小 */
- NULL,/* 任务入口函数参数 */
- (UBaseType_t )configMAX_PRIORITIES-5, /* 任务的优先级 */
- (TaskHandle_t* )&send_handle); /* 任务控制 */
- if(xReturn != pdPASS)
- {
- printf("Create FFreeRTOSCanSendTask failed.\r\n");
- goto can_init_exit;
- }
-
- /* can recv task */
- xReturn = xTaskCreate((TaskFunction_t )FFreeRTOSCanRecvTask, /* 任务入口函数 */
- (const char* )"FFreeRTOSCanRecvTask",/* 任务名字 */
- (uint16_t )1024, /* 任务栈大小 */
- NULL,/* 任务入口函数参数 */
- (UBaseType_t )configMAX_PRIORITIES-5, /* 任务的优先级 */
- (TaskHandle_t* )&recv_handle); /* 任务控制 */
- if(xReturn != pdPASS)
- {
- printf("Create FFreeRTOSCanRecvTask failed.\r\n");
- goto can_init_exit;
- }
+ FError ret = FCAN_SUCCESS;
+ BaseType_t xReturn = pdPASS;
+ u32 can_id = FCAN0_ID;
+ u32 tran_mode = FCAN_PROBE_NORMAL_MODE;
+
+ for (can_id = FCAN0_ID; can_id < FCAN_NUM; can_id++)
+ {
+#if defined(CONFIG_TARGET_F2000_4) || defined(CONFIG_TARGET_D2000)
+ if (can_id == FCAN0_ID)
+ {
+ FPinSetFunc(FIOCTRL_TJTAG_TDI_PAD, FPIN_FUNC1); /* can0-tx: func 1 */
+ FPinSetFunc(FIOCTRL_SWDITMS_SWJ_PAD, FPIN_FUNC1); /* can0-rx: func 1 */
+ }
+ else if (can_id == FCAN1_ID)
+ {
+ FPinSetFunc(FIOCTRL_NTRST_SWJ_PAD, FPIN_FUNC1); /* can1-tx: func 1 */
+ FPinSetFunc(FIOCTRL_SWDO_SWJ_PAD, FPIN_FUNC1); /* can1-rx: func 1 */
+ }
+ else if (can_id == FCAN2_ID)
+ {
+
+ }
+ else
+ {
+ FCAN_TEST_ERROR("can id is error");
+ goto can_init_exit;
+ }
+#elif defined(CONFIG_TARGET_E2000)
+ FIOPadSetCanMux(can_id);
+#endif
+
+ /* init can controller */
+ os_can_ctrl_p[can_id] = FFreeRTOSCanInit(can_id);
+ if (os_can_ctrl_p[can_id] == NULL)
+ {
+ printf("FFreeRTOSCanInit %d failed!!!\r\n", can_id);
+ goto can_init_exit;
+ }
+
+ /* set can baudrate */
+ ret = FFreeRTOSCanBaudrateSet(os_can_ctrl_p[can_id]);
+ if (FCAN_SUCCESS != ret)
+ {
+ printf("FFreeRTOSCanInit FFreeRTOSCanBaudrateSet failed!!!\r\n");
+ goto can_init_exit;
+ }
+
+ /* set can id mask */
+ ret = FFreeRTOSCanIdMaskSet(os_can_ctrl_p[can_id]);
+ if (FCAN_SUCCESS != ret)
+ {
+ printf("FFreeRTOSCanInit FFreeRTOSCanIdMaskSet failed!!!\r\n");
+ goto can_init_exit;
+ }
+
+ /* Identifier mask enable */
+ ret = FFreeRTOSCanControl(os_can_ctrl_p[can_id], FREERTOS_CAN_CTRL_ID_MASK_ENABLE, NULL);
+ if (FCAN_SUCCESS != ret)
+ {
+ FCAN_TEST_ERROR("FFreeRTOSCanControl FREERTOS_CAN_CTRL_ID_MASK_ENABLE failed.");
+ goto can_init_exit;
+ }
+
+ /* init can interrupt handler */
+ ret = FFreeRTOSCanIntrSet(os_can_ctrl_p[can_id]);
+ if (FCAN_SUCCESS != ret)
+ {
+ FCAN_TEST_ERROR("FFreeRTOSCanInit FFreeRTOSCanIntrSet failed!!!");
+ goto can_init_exit;
+ }
+
+ /* set can transfer mode */
+ ret = FFreeRTOSCanControl(os_can_ctrl_p[can_id], FREERTOS_CAN_CTRL_MODE_SET, &tran_mode);
+ if (FCAN_SUCCESS != ret)
+ {
+ FCAN_TEST_ERROR("FFreeRTOSCanControl FREERTOS_CAN_CTRL_MODE_SET failed.");
+ goto can_init_exit;
+ }
+
+ /* enable can transfer */
+ ret = FFreeRTOSCanControl(os_can_ctrl_p[can_id], FREERTOS_CAN_CTRL_ENABLE, NULL);
+ if (FCAN_SUCCESS != ret)
+ {
+ FCAN_TEST_ERROR("FFreeRTOSCanControl FREERTOS_CAN_CTRL_ENABLE failed.");
+ goto can_init_exit;
+ }
+
+ }
+
+ printf("FFreeRTOSCanInitTask execute success !!!\r\n");
+
+ /* can send task */
+ xReturn = xTaskCreate((TaskFunction_t)FFreeRTOSCanSendTask, /* 任务入口函数 */
+ (const char *)"FFreeRTOSCanSendTask",/* 任务名字 */
+ (uint16_t)1024, /* 任务栈大小 */
+ NULL,/* 任务入口函数参数 */
+ (UBaseType_t)configMAX_PRIORITIES - 5, /* 任务的优先级 */
+ (TaskHandle_t *)&send_handle); /* 任务控制 */
+ if (xReturn != pdPASS)
+ {
+ printf("Create FFreeRTOSCanSendTask failed.\r\n");
+ goto can_init_exit;
+ }
+
+ /* can recv task */
+ xReturn = xTaskCreate((TaskFunction_t)FFreeRTOSCanRecvTask, /* 任务入口函数 */
+ (const char *)"FFreeRTOSCanRecvTask",/* 任务名字 */
+ (uint16_t)1024, /* 任务栈大小 */
+ NULL,/* 任务入口函数参数 */
+ (UBaseType_t)configMAX_PRIORITIES - 5, /* 任务的优先级 */
+ (TaskHandle_t *)&recv_handle); /* 任务控制 */
+ if (xReturn != pdPASS)
+ {
+ printf("Create FFreeRTOSCanRecvTask failed.\r\n");
+ goto can_init_exit;
+ }
can_init_exit:
vTaskDelete(NULL);
@@ -307,173 +318,173 @@ can_init_exit:
static void FFreeRTOSCanRecvTask(void *pvParameters)
{
- FError ret = FCAN_SUCCESS;
- u8 count[FCAN_INSTANCE_NUM]= {0};
- int i = 0;
- static FCanQueueData xReceiveStructure;
- FFreeRTOSCan *os_can_p;
- u32 instance_id = 0;
- /* As per most tasks, this task is implemented in an infinite loop. */
- for (;;)
- {
- /* wait recv interrupt give semphore */
- xQueueReceive(xQueue, &xReceiveStructure, portMAX_DELAY);
- os_can_p = xReceiveStructure.os_can_p;
- instance_id = os_can_p->can_ctrl.config.instance_id;
- memset(&recv_frame, 0, sizeof(FCanFrame));
- ret = FFreeRTOSCanRecv(os_can_p, &recv_frame[instance_id]);
- if (FCAN_SUCCESS == ret)
- {
- printf("\r\ncan 0 recv id is %#x\r\n", recv_frame[instance_id].canid);
- printf("can 0 recv dlc is %d\r\n", recv_frame[instance_id].candlc);
- printf("can 0 recv data is ");
- for (i = 0; i < recv_frame[instance_id].candlc; i++)
- {
- printf("%#x ", recv_frame[instance_id].data[i]);
- if(recv_frame[instance_id].data[i] != send_frame[FCAN_INSTANCE_1-instance_id].data[i])
- {
- FCAN_TEST_ERROR("\ncount=%d: can %d recv is equal to can%d send!!!\r\n", count[instance_id], instance_id, FCAN_INSTANCE_1-instance_id);
- }
- }
- printf("\ncount=%d: can %d recv is equal to can%d send!!!\r\n", count[instance_id], instance_id, FCAN_INSTANCE_1-instance_id);
-
- count[instance_id]++;
- }
-
- }
+ FError ret = FCAN_SUCCESS;
+ u8 count[FCAN_NUM] = {0};
+ int i = 0;
+ static FCanQueueData xReceiveStructure;
+ FFreeRTOSCan *os_can_p;
+ u32 instance_id = 0;
+ /* As per most tasks, this task is implemented in an infinite loop. */
+ for (;;)
+ {
+ /* wait recv interrupt give semphore */
+ xQueueReceive(xQueue, &xReceiveStructure, portMAX_DELAY);
+ os_can_p = xReceiveStructure.os_can_p;
+ instance_id = os_can_p->can_ctrl.config.instance_id;
+ memset(&recv_frame, 0, sizeof(FCanFrame));
+ ret = FFreeRTOSCanRecv(os_can_p, &recv_frame[instance_id]);
+ if (FCAN_SUCCESS == ret)
+ {
+ printf("\r\ncan 0 recv id is %#x.\r\n", recv_frame[instance_id].canid);
+ printf("can 0 recv dlc is %d.\r\n", recv_frame[instance_id].candlc);
+ printf("can 0 recv data is ");
+ for (i = 0; i < recv_frame[instance_id].candlc; i++)
+ {
+ printf("%#x ", recv_frame[instance_id].data[i]);
+ if (recv_frame[instance_id].data[i] != send_frame[FCAN1_ID - instance_id].data[i])
+ {
+ FCAN_TEST_ERROR("\ncount=%d: can %d recv is equal to can%d send!!!\r\n", count[instance_id], instance_id, FCAN1_ID - instance_id);
+ }
+ }
+ printf("\ncount=%d: can %d recv is equal to can%d send!!!\r\n", count[instance_id], instance_id, FCAN1_ID - instance_id);
+
+ count[instance_id]++;
+ }
+
+ }
}
static void FFreeRTOSCanSendTask(void *pvParameters)
{
- #define FCAN_SEND_ID 0x23
- #define FCAN_SEND_LENGTH 8
-
- FError ret = FCAN_SUCCESS;
- FCanInstance can_id = FCAN_INSTANCE_0;
-
- u8 count[FCAN_INSTANCE_NUM]= {0};
- int i = 0;
-
- /* As per most tasks, this task is implemented in an infinite loop. */
- for (;;)
- {
- printf("\r\ncan send task running\r\n");
- for(can_id = FCAN_INSTANCE_0; can_id <= FCAN_INSTANCE_1; can_id++)
- {
- send_frame[can_id].canid = FCAN_SEND_ID+(can_id<<8);
- send_frame[can_id].canid &= CAN_SFF_MASK;
- send_frame[can_id].candlc = FCAN_SEND_LENGTH;
- for (i = 0; i < send_frame[can_id].candlc; i++)
- {
- send_frame[can_id].data[i] = i+(can_id<<4);
- }
- ret = FFreeRTOSCanSend(os_can_ctrl_p[can_id], &send_frame[can_id]);
- if(ret != FCAN_SUCCESS)
- {
- printf("can%d send failed.\n", can_id);
- }
- count[can_id]++;
- }
- vTaskDelay(CAN_SEND_PERIOD);
- }
+#define FCAN_SEND_ID 0x23
+#define FCAN_SEND_LENGTH 8
+
+ FError ret = FCAN_SUCCESS;
+ u32 can_id = FCAN0_ID;
+
+ u8 count[FCAN_NUM] = {0};
+ int i = 0;
+
+ /* As per most tasks, this task is implemented in an infinite loop. */
+ for (;;)
+ {
+ printf("\r\ncan send task running.\r\n");
+ for (can_id = FCAN0_ID; can_id <= FCAN1_ID; can_id++)
+ {
+ send_frame[can_id].canid = FCAN_SEND_ID + (can_id << 8);
+ send_frame[can_id].canid &= CAN_SFF_MASK;
+ send_frame[can_id].candlc = FCAN_SEND_LENGTH;
+ for (i = 0; i < send_frame[can_id].candlc; i++)
+ {
+ send_frame[can_id].data[i] = i + (can_id << 4);
+ }
+ ret = FFreeRTOSCanSend(os_can_ctrl_p[can_id], &send_frame[can_id]);
+ if (ret != FCAN_SUCCESS)
+ {
+ printf("can%d send failed.\n", can_id);
+ }
+ count[can_id]++;
+ }
+ vTaskDelay(CAN_SEND_PERIOD);
+ }
}
-static void prvOneShotTimerCallback( TimerHandle_t xTimer )
+static void prvOneShotTimerCallback(TimerHandle_t xTimer)
{
- /* Output a string to show the time at which the callback was executed. */
- printf("One-shot timer callback executing, will delete FFreeRTOSCanReadTask.\r\n" );
+ /* Output a string to show the time at which the callback was executed. */
+ printf("One-shot timer callback executing, will delete FFreeRTOSCanReadTask.\r\n");
- FFreeRTOSCanDelete();
+ FFreeRTOSCanDelete();
}
/* create can test, can0 and can1 loopback */
BaseType_t FFreeRTOSCanCreate(void)
{
BaseType_t xReturn = pdPASS;
- BaseType_t timer_started = pdPASS;
-
- /* The queue is created to hold a maximum of 32 structures of type xData. */
- xQueue = xQueueCreate(32, sizeof(FCanQueueData));
- if (xQueue == NULL)
- {
- printf("FFreeRTOSCanCreate FCanQueueData create failed.\r\n" );
- return pdFAIL;
- }
-
- /* can init task */
- xReturn = xTaskCreate((TaskFunction_t )FFreeRTOSCanInitTask, /* 任务入口函数 */
- (const char* )"FFreeRTOSCanInitTask",/* 任务名字 */
- (uint16_t )1024, /* 任务栈大小 */
- NULL,/* 任务入口函数参数 */
- (UBaseType_t )1, /* 任务的优先级 */
- NULL); /* 任务控制 */
-
- /* Create the one shot software timer, storing the handle to the created
- software timer in xOneShotTimer. */
- xOneShotTimer = xTimerCreate( "OneShot Software Timer", /* Text name for the software timer - not used by FreeRTOS. */
- ONE_SHOT_TIMER_PERIOD, /* The software timer's period in ticks. */
- pdFALSE, /* Setting uxAutoRealod to pdFALSE creates a one-shot software timer. */
- 0, /* This example use the timer id. */
- prvOneShotTimerCallback ); /* The callback function to be used by the software timer being created. */
-
- /* Check the timers were created. */
- if( xOneShotTimer != NULL )
- {
- /* Start the software timers, using a block time of 0 (no block time).
- The scheduler has not been started yet so any block time specified here
- would be ignored anyway. */
- timer_started = xTimerStart( xOneShotTimer, 0 );
-
- /* The implementation of xTimerStart() uses the timer command queue, and
- xTimerStart() will fail if the timer command queue gets full. The timer
- service task does not get created until the scheduler is started, so all
- commands sent to the command queue will stay in the queue until after
- the scheduler has been started. Check both calls to xTimerStart()
- passed. */
- if(timer_started != pdPASS)
- {
- vPrintf("CreateSoftwareTimerTasks xTimerStart failed \r\n");
- }
- }
- else
- {
- vPrintf("CreateSoftwareTimerTasks xTimerCreate failed \r\n");
- }
-
+ BaseType_t timer_started = pdPASS;
+
+ /* The queue is created to hold a maximum of 32 structures of type xData. */
+ xQueue = xQueueCreate(32, sizeof(FCanQueueData));
+ if (xQueue == NULL)
+ {
+ printf("FFreeRTOSCanCreate FCanQueueData create failed.\r\n");
+ return pdFAIL;
+ }
+
+ /* can init task */
+ xReturn = xTaskCreate((TaskFunction_t)FFreeRTOSCanInitTask, /* 任务入口函数 */
+ (const char *)"FFreeRTOSCanInitTask",/* 任务名字 */
+ (uint16_t)1024, /* 任务栈大小 */
+ NULL,/* 任务入口函数参数 */
+ (UBaseType_t)1, /* 任务的优先级 */
+ NULL); /* 任务控制 */
+
+ /* Create the one shot software timer, storing the handle to the created
+ software timer in xOneShotTimer. */
+ xOneShotTimer = xTimerCreate("OneShot Software Timer", /* Text name for the software timer - not used by FreeRTOS. */
+ ONE_SHOT_TIMER_PERIOD, /* The software timer's period in ticks. */
+ pdFALSE, /* Setting uxAutoRealod to pdFALSE creates a one-shot software timer. */
+ 0, /* This example use the timer id. */
+ prvOneShotTimerCallback); /* The callback function to be used by the software timer being created. */
+
+ /* Check the timers were created. */
+ if (xOneShotTimer != NULL)
+ {
+ /* Start the software timers, using a block time of 0 (no block time).
+ The scheduler has not been started yet so any block time specified here
+ would be ignored anyway. */
+ timer_started = xTimerStart(xOneShotTimer, 0);
+
+ /* The implementation of xTimerStart() uses the timer command queue, and
+ xTimerStart() will fail if the timer command queue gets full. The timer
+ service task does not get created until the scheduler is started, so all
+ commands sent to the command queue will stay in the queue until after
+ the scheduler has been started. Check both calls to xTimerStart()
+ passed. */
+ if (timer_started != pdPASS)
+ {
+ vPrintf("CreateSoftwareTimerTasks xTimerStart failed. \r\n");
+ }
+ }
+ else
+ {
+ vPrintf("CreateSoftwareTimerTasks xTimerCreate failed. \r\n");
+ }
+
return xReturn;
}
static void FFreeRTOSCanDelete(void)
{
- BaseType_t xReturn = pdPASS;
+ BaseType_t xReturn = pdPASS;
- if(send_handle)
+ if (send_handle)
{
vTaskDelete(send_handle);
- vPrintf("Delete FFreeRTOSCanSendTask success\r\n");
+ vPrintf("Delete FFreeRTOSCanSendTask success.\r\n");
}
- if(recv_handle)
+ if (recv_handle)
{
vTaskDelete(recv_handle);
- vPrintf("Delete FFreeRTOSCanRecvTask success\r\n");
+ vPrintf("Delete FFreeRTOSCanRecvTask success.\r\n");
}
- /* deinit can os instance */
- FFreeRTOSCanDeinit(os_can_ctrl_p[FCAN_INSTANCE_0]);
- FFreeRTOSCanDeinit(os_can_ctrl_p[FCAN_INSTANCE_1]);
-
- /* delete queue */
- vQueueDelete(xQueue);
-
- /* delete timer */
- xReturn = xTimerDelete(xOneShotTimer, 0);
- if(xReturn != pdPASS)
- {
- vPrintf("Delete OneShot Software Timer failed.\r\n");
- }
- else
- {
- vPrintf("Delete OneShot Software Timer success.\r\n");
- }
+ /* deinit can os instance */
+ FFreeRTOSCanDeinit(os_can_ctrl_p[FCAN0_ID]);
+ FFreeRTOSCanDeinit(os_can_ctrl_p[FCAN1_ID]);
+
+ /* delete queue */
+ vQueueDelete(xQueue);
+
+ /* delete timer */
+ xReturn = xTimerDelete(xOneShotTimer, 0);
+ if (xReturn != pdPASS)
+ {
+ vPrintf("Delete OneShot Software Timer failed.\r\n");
+ }
+ else
+ {
+ vPrintf("Delete OneShot Software Timer success.\r\n");
+ }
}
\ No newline at end of file
diff --git a/example/peripheral/dma/ddma/configs/e2000d_aarch32_eg_configs b/example/peripheral/dma/ddma/configs/e2000d_aarch32_eg_configs
index ba85580bd4b54fbf34d228317ce6e367393ebc8b..1f03d3d192ff96529b16e66cbf76ef30ae34f882 100644
--- a/example/peripheral/dma/ddma/configs/e2000d_aarch32_eg_configs
+++ b/example/peripheral/dma/ddma/configs/e2000d_aarch32_eg_configs
@@ -70,6 +70,7 @@ CONFIG_ENABLE_FDDMA=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -114,6 +115,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -150,6 +160,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -171,12 +182,6 @@ CONFIG_FREERTOS_USE_FDDMA=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -188,14 +193,32 @@ CONFIG_FREERTOS_USE_FDDMA=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -213,4 +236,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/dma/ddma/configs/e2000d_aarch64_eg_configs b/example/peripheral/dma/ddma/configs/e2000d_aarch64_eg_configs
index 0857033ff49946fc38c6ba4c16b6fe1e1b297ee6..7975b4152643762a274ccf6da961107dc15daa59 100644
--- a/example/peripheral/dma/ddma/configs/e2000d_aarch64_eg_configs
+++ b/example/peripheral/dma/ddma/configs/e2000d_aarch64_eg_configs
@@ -70,6 +70,7 @@ CONFIG_ENABLE_FDDMA=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -110,6 +111,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -146,6 +156,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -167,12 +178,6 @@ CONFIG_FREERTOS_USE_FDDMA=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -184,14 +189,32 @@ CONFIG_FREERTOS_USE_FDDMA=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -209,4 +232,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/dma/ddma/configs/e2000q_aarch32_eg_configs b/example/peripheral/dma/ddma/configs/e2000q_aarch32_eg_configs
index dfdb709fc2cd968561303ac188ad54dc26573822..0551ca56e22ab05c92cffcd7f0dfbd0d0d1c893b 100644
--- a/example/peripheral/dma/ddma/configs/e2000q_aarch32_eg_configs
+++ b/example/peripheral/dma/ddma/configs/e2000q_aarch32_eg_configs
@@ -70,6 +70,7 @@ CONFIG_ENABLE_FDDMA=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -114,6 +115,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -150,6 +160,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -171,12 +182,6 @@ CONFIG_FREERTOS_USE_FDDMA=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -188,14 +193,32 @@ CONFIG_FREERTOS_USE_FDDMA=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -213,4 +236,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/dma/ddma/configs/e2000q_aarch64_eg_configs b/example/peripheral/dma/ddma/configs/e2000q_aarch64_eg_configs
index dc348827294edcbd3c48bb1dbfc5c988d60481d5..6caceb1c68cfacb44411091b69d669c6a666b323 100644
--- a/example/peripheral/dma/ddma/configs/e2000q_aarch64_eg_configs
+++ b/example/peripheral/dma/ddma/configs/e2000q_aarch64_eg_configs
@@ -70,6 +70,7 @@ CONFIG_ENABLE_FDDMA=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -110,6 +111,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -146,6 +156,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -167,12 +178,6 @@ CONFIG_FREERTOS_USE_FDDMA=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -184,14 +189,32 @@ CONFIG_FREERTOS_USE_FDDMA=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -209,4 +232,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/dma/ddma/inc/ddma_spi_loopback.h b/example/peripheral/dma/ddma/inc/ddma_spi_loopback.h
index 64a4e5d556bd5e71158c3db88f39da2b083932d5..5b89d3700fbe21d169daa727e39e4f048ad50edf 100644
--- a/example/peripheral/dma/ddma/inc/ddma_spi_loopback.h
+++ b/example/peripheral/dma/ddma/inc/ddma_spi_loopback.h
@@ -1,27 +1,28 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: ddma_spi_loopback.h
* Date: 2022-07-18 11:01:37
* LastEditTime: 2022-07-18 11:01:37
- * Description: This files is for
- *
- * Modify History:
- * Ver Who Date Changes
+ * Description: This file is for task create function define
+ *
+ * Modify History:
+ * Ver Who Date Changes
* ----- ------ -------- --------------------------------------
+ * 1.0 zhugengyu 2022/08/26 first commit
*/
-#ifndef EXAMPLE_DDMA_SPI_LOOPBACK_H
-#define EXAMPLE_DDMA_SPI_LOOPBACK_H
+#ifndef DDMA_SPI_LOOPBACK_H
+#define DDMA_SPI_LOOPBACK_H
#ifdef __cplusplus
extern "C"
diff --git a/example/peripheral/dma/ddma/main.c b/example/peripheral/dma/ddma/main.c
index f97dc17a5f5a83a22c679bd732dcf7af2c6c6892..c2c2cf2d9db0cdfd4f53a84d5f6c7ba48bf81872 100644
--- a/example/peripheral/dma/ddma/main.c
+++ b/example/peripheral/dma/ddma/main.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: main.c
* Date: 2022-06-17 08:17:59
* LastEditTime: 2022-06-17 08:17:59
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
+ * Description: This file is for ddma example that running shell task and open scheduler
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 zhugengyu 2022/08/26 first commit
*/
#include "shell.h"
@@ -30,15 +31,17 @@ int main(void)
BaseType_t ret;
ret = LSUserShellTask() ;
- if(ret != pdPASS)
+ if (ret != pdPASS)
+ {
goto FAIL_EXIT;
+ }
/* ret = FFreeRTOSRunDDMASpiLoopback(2U, 32U); */
- vTaskStartScheduler(); /* 启动任务,开启调度 */
+ vTaskStartScheduler(); /* 启动任务,开启调度 */
while (1); /* 正常不会执行到这里 */
-
+
FAIL_EXIT:
- printf("failed 0x%x \r\n", ret);
+ printf("failed 0x%x \r\n", ret);
return 0;
}
diff --git a/example/peripheral/dma/ddma/sdkconfig b/example/peripheral/dma/ddma/sdkconfig
index 0857033ff49946fc38c6ba4c16b6fe1e1b297ee6..6caceb1c68cfacb44411091b69d669c6a666b323 100644
--- a/example/peripheral/dma/ddma/sdkconfig
+++ b/example/peripheral/dma/ddma/sdkconfig
@@ -2,7 +2,7 @@
#
# Freertos Configuration
#
-CONFIG_TARGET_NAME="e2000d_freertos_a64"
+CONFIG_TARGET_NAME="e2000q_freertos_a64"
# end of Freertos Configuration
#
@@ -26,8 +26,8 @@ CONFIG_USE_SYS_TICK=y
#
# CONFIG_TARGET_F2000_4 is not set
# CONFIG_TARGET_D2000 is not set
-# CONFIG_TARGET_E2000Q is not set
-CONFIG_TARGET_E2000D=y
+CONFIG_TARGET_E2000Q=y
+# CONFIG_TARGET_E2000D is not set
# CONFIG_TARGET_E2000S is not set
CONFIG_TARGET_E2000=y
CONFIG_DEFAULT_DEBUG_PRINT_UART1=y
@@ -70,6 +70,7 @@ CONFIG_ENABLE_FDDMA=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -110,6 +111,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -146,6 +156,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -167,12 +178,6 @@ CONFIG_FREERTOS_USE_FDDMA=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -184,14 +189,32 @@ CONFIG_FREERTOS_USE_FDDMA=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -209,4 +232,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/dma/ddma/sdkconfig.h b/example/peripheral/dma/ddma/sdkconfig.h
index e392df8816db870fe1f063af97dd1250b477776f..9aa43168bdeb6242fe4ad32ba13572dc47b178fb 100644
--- a/example/peripheral/dma/ddma/sdkconfig.h
+++ b/example/peripheral/dma/ddma/sdkconfig.h
@@ -3,7 +3,7 @@
/* Freertos Configuration */
-#define CONFIG_TARGET_NAME "e2000d_freertos_a64"
+#define CONFIG_TARGET_NAME "e2000q_freertos_a64"
/* end of Freertos Configuration */
/* Standalone Setting */
@@ -24,8 +24,8 @@
/* CONFIG_TARGET_F2000_4 is not set */
/* CONFIG_TARGET_D2000 is not set */
-/* CONFIG_TARGET_E2000Q is not set */
-#define CONFIG_TARGET_E2000D
+#define CONFIG_TARGET_E2000Q
+/* CONFIG_TARGET_E2000D is not set */
/* CONFIG_TARGET_E2000S is not set */
#define CONFIG_TARGET_E2000
#define CONFIG_DEFAULT_DEBUG_PRINT_UART1
@@ -65,6 +65,7 @@
/* CONFIG_USE_ADC is not set */
/* CONFIG_USE_PWM is not set */
/* CONFIG_USE_IPC is not set */
+/* CONFIG_USE_MEDIA is not set */
/* end of Components Configuration */
#define CONFIG_USE_NEW_LIBC
/* end of Standalone Setting */
@@ -101,6 +102,12 @@
/* Compiler Options */
+/* Cross-Compiler Setting */
+
+#define CONFIG_GCC_OPTIMIZE_LEVEL 0
+/* CONFIG_USE_EXT_COMPILER is not set */
+/* CONFIG_USE_KLIN_SYS is not set */
+/* end of Cross-Compiler Setting */
#define CONFIG_OUTPUT_BINARY
/* end of Compiler Options */
/* end of Building Option */
@@ -130,6 +137,7 @@
/* Freertos Eth Drivers */
/* CONFIG_FREERTOS_USE_XMAC is not set */
+/* CONFIG_FREERTOS_USE_GMAC is not set */
/* end of Freertos Eth Drivers */
/* Freertos Gpio Drivers */
@@ -148,11 +156,6 @@
/* CONFIG_FREERTOS_USE_FGDMA is not set */
/* end of Freertos DMA Drivers */
-/* Freertos MMC Drivers */
-
-/* CONFIG_FREERTOS_USE_FSDIO is not set */
-/* end of Freertos MMC Drivers */
-
/* Freertos Adc Drivers */
/* CONFIG_FREERTOS_USE_ADC is not set */
@@ -162,13 +165,28 @@
/* CONFIG_FREERTOS_USE_CAN is not set */
/* end of Freertos Can Drivers */
+
+/* Freertos I2c Drivers */
+
+/* CONFIG_FREERTOS_USE_I2C is not set */
+/* end of Freertos I2c Drivers */
+
+/* Freertos Mio Drivers */
+
+/* CONFIG_FREERTOS_USE_MIO is not set */
+/* end of Freertos Mio Drivers */
+
+/* Freertos Timer Drivers */
+
+/* CONFIG_FREERTOS_USE_TIMER is not set */
+/* end of Freertos Timer Drivers */
/* end of Component Configuration */
-/* FreeRTOS Setting */
+/* Third-Party Configuration */
/* CONFIG_USE_LWIP is not set */
#define CONFIG_USE_BACKTRACE
-/* CONFIG_USE_FATFS is not set */
+/* CONFIG_USE_FATFS_0_1_4 is not set */
/* CONFIG_USE_SFUD is not set */
/* CONFIG_USE_SPIFFS is not set */
/* CONFIG_USE_AMP is not set */
@@ -184,6 +202,28 @@
#define CONFIG_USE_TLSF
/* CONFIG_USE_SDMMC_CMD is not set */
/* CONFIG_USE_CHERRY_USB is not set */
-/* end of FreeRTOS Setting */
+/* end of Third-Party Configuration */
+
+/* Kernel Configuration */
+
+#define CONFIG_FREERTOS_OPTIMIZED_SCHEDULER
+#define CONFIG_FREERTOS_HZ 1000
+#define CONFIG_FREERTOS_MAX_PRIORITIES 32
+#define CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES 13
+#define CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES 11
+#define CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS 1
+#define CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE 1024
+#define CONFIG_FREERTOS_MAX_TASK_NAME_LEN 32
+#define CONFIG_FREERTOS_TIMER_TASK_PRIORITY 1
+#define CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH 2048
+#define CONFIG_FREERTOS_TIMER_QUEUE_LENGTH 10
+#define CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE 0
+#define CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS
+#define CONFIG_FREERTOS_USE_TRACE_FACILITY
+#define CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS
+/* CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set */
+#define CONFIG_FREERTOS_TOTAL_HEAP_SIZE 10240
+#define CONFIG_FREERTOS_TASK_FPU_SUPPORT 1
+/* end of Kernel Configuration */
#endif
diff --git a/example/peripheral/dma/ddma/src/cmd_ddma.c b/example/peripheral/dma/ddma/src/cmd_ddma.c
index d844e329d7a1ac2f91cb976a918abf814f579bee..99eac60344c7538086e1ac54678d2225977c92fe 100644
--- a/example/peripheral/dma/ddma/src/cmd_ddma.c
+++ b/example/peripheral/dma/ddma/src/cmd_ddma.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: cmd_ddma.c
* Date: 2022-07-14 14:06:43
* LastEditTime: 2022-07-14 14:06:43
- * Description: This files is for
- *
- * Modify History:
+ * Description: This file is for ddma command interface
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
+ * 1.0 zhugengyu 2022/08/26 first commit
*/
/***************************** Include Files *********************************/
#include
diff --git a/example/peripheral/dma/ddma/src/ddma_spi_loopback.c b/example/peripheral/dma/ddma/src/ddma_spi_loopback.c
index a361217194ff80139caeac4f15f8bfa101c66dbc..6e6e2258a6e75e084ae0b46ad9baa5276833ee74 100644
--- a/example/peripheral/dma/ddma/src/ddma_spi_loopback.c
+++ b/example/peripheral/dma/ddma/src/ddma_spi_loopback.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: ddma_spi_loopback.c
* Date: 2022-07-20 09:24:39
* LastEditTime: 2022-07-20 09:24:39
- * Description: This files is for
- *
- * Modify History:
+ * Description: This file is for DDMA task implementations
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
+ * 1.0 zhugengyu 2022/08/26 first commit
*/
/***************************** Include Files *********************************/
#include
@@ -76,7 +77,7 @@ static TimerHandle_t exit_timer = NULL;
static u32 loopback_times = 3U;
static boolean is_running = FALSE;
-static const u32 spim_rx_slave_id[FSPI_DEVICE_NUM] =
+static const u32 spim_rx_slave_id[FSPI_NUM] =
{
[FSPI0_ID] = FDDMA0_SPIM0_RX_SLAVE_ID,
[FSPI1_ID] = FDDMA0_SPIM1_RX_SLAVE_ID,
@@ -84,7 +85,7 @@ static const u32 spim_rx_slave_id[FSPI_DEVICE_NUM] =
[FSPI3_ID] = FDDMA0_SPIM3_RX_SLAVE_ID
};
-static const u32 spim_tx_slave_id[FSPI_DEVICE_NUM] =
+static const u32 spim_tx_slave_id[FSPI_NUM] =
{
[FSPI0_ID] = FDDMA0_SPIM0_TX_SLAVE_ID,
[FSPI1_ID] = FDDMA0_SPIM1_TX_SLAVE_ID,
@@ -104,7 +105,7 @@ static const u32 spim_tx_slave_id[FSPI_DEVICE_NUM] =
static void DdmaSpiLoopbackExitCallback(TimerHandle_t timer)
{
FError err = FT_SUCCESS;
- printf("exiting.....");
+ printf("exiting.....\r\n");
if (send_task) /* stop and delete send task */
{
@@ -168,8 +169,8 @@ static void DdmaSpiLoopbackAckDMADone(FDdmaChan *const dma_chan, void *arg)
BaseType_t xhigher_priority_task_woken = pdFALSE;
BaseType_t x_result = pdFALSE;
- FDDMA_INFO("ack chan-%d %s done for ddma", dma_chan->config.id,
- (dma_chan->config.id == rx_chan_id) ? "rx" : "tx");
+ FDDMA_INFO("ack chan-%d %s done for ddma.", dma_chan->config.id,
+ (dma_chan->config.id == rx_chan_id) ? "rx" : "tx");
FASSERT_MSG(chan_evt, "rx event group not exists !!!");
x_result = xEventGroupSetBitsFromISR(chan_evt,
CHAN_REQ_DONE(dma_chan->config.id),
@@ -186,8 +187,8 @@ static boolean DdmaSpiLoopbackWaitDmaEnd(void)
u32 wait_bits = CHAN_REQ_DONE(rx_chan_id) | CHAN_REQ_DONE(tx_chan_id);
ev = xEventGroupWaitBits(chan_evt,
- wait_bits,
- pdTRUE, pdTRUE, wait_delay);
+ wait_bits,
+ pdTRUE, pdTRUE, wait_delay);
if ((ev & wait_bits) == wait_bits)
{
FDDMA_INFO("ddma transfer success !!!");
@@ -252,7 +253,7 @@ static void DdmaInitTask(void *args)
FASSERT_MSG(spim, "init spim failed");
ddma = FFreeRTOSDdmaInit(ddma_id, &ddma_config); /* deinit ddma */
- FASSERT_MSG(ddma, "init ddma failed");
+ FASSERT_MSG(ddma, "init ddma failed");
spi_base = spim->ctrl.config.base_addr;
@@ -278,7 +279,7 @@ static void DdmaInitTask(void *args)
DdmaSpiLoopbackGiveSync(); /* give sync and allow sending */
- vTaskDelete(NULL);
+ vTaskDelete(NULL);
}
static void DdmaSpiLoopbackSendTask(void *args)
@@ -315,7 +316,7 @@ static void DdmaSpiLoopbackSendTask(void *args)
spi_msg.tx_buf = tx_buf;
spi_msg.tx_len = trans_len;
- if ((FFREERTOS_DDMA_OK != FFreeRTOSDdmaStartChannel(ddma, rx_chan_id)) ||
+ if ((FFREERTOS_DDMA_OK != FFreeRTOSDdmaStartChannel(ddma, rx_chan_id)) ||
(FFREERTOS_DDMA_OK != FFreeRTOSDdmaStartChannel(ddma, tx_chan_id)))
{
FDDMA_ERROR("start dma failed !!!");
@@ -332,7 +333,9 @@ static void DdmaSpiLoopbackSendTask(void *args)
}
if (times++ > loopback_times)
+ {
break;
+ }
vTaskDelay(wait_delay);
}
@@ -350,7 +353,7 @@ static void DdmaSpiLoopbackRecvTask(void *args)
for (;;)
{
FDDMA_INFO("waiting recv data...");
-
+
/* block recv task until rx done */
if (!DdmaSpiLoopbackWaitDmaEnd())
{
@@ -383,7 +386,9 @@ static void DdmaSpiLoopbackRecvTask(void *args)
}
if (times++ > loopback_times)
+ {
break;
+ }
DdmaSpiLoopbackGiveSync(); /* recv finished, give send sync and allow sending */
}
@@ -397,7 +402,7 @@ BaseType_t FFreeRTOSRunDDMASpiLoopback(u32 spi_id, u32 bytes)
{
BaseType_t ret = pdPASS;
const TickType_t total_run_time = pdMS_TO_TICKS(30000UL); /* loopback run for 10 secs deadline */
-
+
if (is_running)
{
FDDMA_ERROR("task is running !!!!");
@@ -416,38 +421,38 @@ BaseType_t FFreeRTOSRunDDMASpiLoopback(u32 spi_id, u32 bytes)
taskENTER_CRITICAL(); /* no schedule when create task */
- ret = xTaskCreate((TaskFunction_t )DdmaInitTask, /* task entry */
- (const char* )"DdmaInitTask",/* task name */
- (uint16_t )4096, /* task stack size in words */
- NULL, /* task params */
- (UBaseType_t )configMAX_PRIORITIES - 1, /* task priority */
- NULL); /* task handler */
+ ret = xTaskCreate((TaskFunction_t)DdmaInitTask, /* task entry */
+ (const char *)"DdmaInitTask",/* task name */
+ (uint16_t)4096, /* task stack size in words */
+ NULL, /* task params */
+ (UBaseType_t)configMAX_PRIORITIES - 1, /* task priority */
+ NULL); /* task handler */
FASSERT_MSG(pdPASS == ret, "create task failed");
- ret = xTaskCreate((TaskFunction_t )DdmaSpiLoopbackSendTask, /* task entry */
- (const char* )"DdmaSpiLoopbackSendTask",/* task name */
- (uint16_t )4096, /* task stack size in words */
- NULL, /* task params */
- (UBaseType_t )configMAX_PRIORITIES - 2, /* task priority */
- (TaskHandle_t* )&send_task); /* task handler */
+ ret = xTaskCreate((TaskFunction_t)DdmaSpiLoopbackSendTask, /* task entry */
+ (const char *)"DdmaSpiLoopbackSendTask",/* task name */
+ (uint16_t)4096, /* task stack size in words */
+ NULL, /* task params */
+ (UBaseType_t)configMAX_PRIORITIES - 2, /* task priority */
+ (TaskHandle_t *)&send_task); /* task handler */
FASSERT_MSG(pdPASS == ret, "create task failed");
- ret = xTaskCreate((TaskFunction_t )DdmaSpiLoopbackRecvTask, /* task entry */
- (const char* )"DdmaSpiLoopbackRecvTask",/* task name */
- (uint16_t )4096, /* task stack size in words */
- NULL, /* task params */
- (UBaseType_t )configMAX_PRIORITIES - 1, /* task priority */
- (TaskHandle_t* )&recv_task); /* task handler */
+ ret = xTaskCreate((TaskFunction_t)DdmaSpiLoopbackRecvTask, /* task entry */
+ (const char *)"DdmaSpiLoopbackRecvTask",/* task name */
+ (uint16_t)4096, /* task stack size in words */
+ NULL, /* task params */
+ (UBaseType_t)configMAX_PRIORITIES - 1, /* task priority */
+ (TaskHandle_t *)&recv_task); /* task handler */
FASSERT_MSG(pdPASS == ret, "create task failed");
- exit_timer = xTimerCreate("Exit-Timer", /* Text name for the software timer - not used by FreeRTOS. */
- total_run_time, /* The software timer's period in ticks. */
- pdFALSE, /* Setting uxAutoRealod to pdFALSE creates a one-shot software timer. */
- NULL, /* use timer id to pass task data for reference. */
- DdmaSpiLoopbackExitCallback); /* The callback function to be used by the software timer being created. */
+ exit_timer = xTimerCreate("Exit-Timer", /* Text name for the software timer - not used by FreeRTOS. */
+ total_run_time, /* The software timer's period in ticks. */
+ pdFALSE, /* Setting uxAutoRealod to pdFALSE creates a one-shot software timer. */
+ NULL, /* use timer id to pass task data for reference. */
+ DdmaSpiLoopbackExitCallback); /* The callback function to be used by the software timer being created. */
FASSERT_MSG(NULL != exit_timer, "create exit timer failed");
diff --git a/example/peripheral/dma/gdma/configs/e2000d_aarch32_eg_configs b/example/peripheral/dma/gdma/configs/e2000d_aarch32_eg_configs
index 1ecbf2fd11784597e868c502301800004b3903af..95001d317a44ba530f0cbbc3e1e12801740c7b19 100644
--- a/example/peripheral/dma/gdma/configs/e2000d_aarch32_eg_configs
+++ b/example/peripheral/dma/gdma/configs/e2000d_aarch32_eg_configs
@@ -69,6 +69,7 @@ CONFIG_ENABLE_FGDMA=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -113,6 +114,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -149,6 +159,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -170,12 +181,6 @@ CONFIG_FREERTOS_USE_UART=y
CONFIG_FREERTOS_USE_FGDMA=y
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -187,14 +192,32 @@ CONFIG_FREERTOS_USE_FGDMA=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -212,4 +235,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/dma/gdma/configs/e2000d_aarch64_eg_configs b/example/peripheral/dma/gdma/configs/e2000d_aarch64_eg_configs
index 1486603cf60efc25c3207f0d2d1db9ad104d93da..a096cae76e7ba4f12d9ffbf0839bc0475b14d677 100644
--- a/example/peripheral/dma/gdma/configs/e2000d_aarch64_eg_configs
+++ b/example/peripheral/dma/gdma/configs/e2000d_aarch64_eg_configs
@@ -69,6 +69,7 @@ CONFIG_ENABLE_FGDMA=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -109,6 +110,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -145,6 +155,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -166,12 +177,6 @@ CONFIG_FREERTOS_USE_UART=y
CONFIG_FREERTOS_USE_FGDMA=y
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -183,14 +188,32 @@ CONFIG_FREERTOS_USE_FGDMA=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -208,4 +231,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/dma/gdma/configs/e2000q_aarch32_eg_configs b/example/peripheral/dma/gdma/configs/e2000q_aarch32_eg_configs
index 1e0eacf07048217f8275c900aeafc12019b3960d..a78c58247a74575a4f1054f86860d17c8df7e3fd 100644
--- a/example/peripheral/dma/gdma/configs/e2000q_aarch32_eg_configs
+++ b/example/peripheral/dma/gdma/configs/e2000q_aarch32_eg_configs
@@ -69,6 +69,7 @@ CONFIG_ENABLE_FGDMA=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -113,6 +114,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -149,6 +159,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -170,12 +181,6 @@ CONFIG_FREERTOS_USE_UART=y
CONFIG_FREERTOS_USE_FGDMA=y
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -187,14 +192,32 @@ CONFIG_FREERTOS_USE_FGDMA=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -212,4 +235,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/dma/gdma/configs/e2000q_aarch64_eg_configs b/example/peripheral/dma/gdma/configs/e2000q_aarch64_eg_configs
index dd1633142cacb6bf687bab8a2096e5ef34ecfa86..f253199b26f89e7521a11fcf32d45e65bcde600a 100644
--- a/example/peripheral/dma/gdma/configs/e2000q_aarch64_eg_configs
+++ b/example/peripheral/dma/gdma/configs/e2000q_aarch64_eg_configs
@@ -69,6 +69,7 @@ CONFIG_ENABLE_FGDMA=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -109,6 +110,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -145,6 +155,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -166,12 +177,6 @@ CONFIG_FREERTOS_USE_UART=y
CONFIG_FREERTOS_USE_FGDMA=y
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -183,14 +188,32 @@ CONFIG_FREERTOS_USE_FGDMA=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -208,4 +231,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/dma/gdma/inc/gdma_memcpy.h b/example/peripheral/dma/gdma/inc/gdma_memcpy.h
index 7acbc2771dfb75ef9752651282cc2d86a625d5ba..90ffb99e81a245b8a52f7ab10df4db30839255cc 100644
--- a/example/peripheral/dma/gdma/inc/gdma_memcpy.h
+++ b/example/peripheral/dma/gdma/inc/gdma_memcpy.h
@@ -1,27 +1,28 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: gdma_memcpy.h
* Date: 2022-07-18 16:43:35
* LastEditTime: 2022-07-18 16:43:35
- * Description: This files is for
- *
- * Modify History:
+ * Description: This file is for task create function define
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
+ * 1.0 zhugengyu 2022/08/26 first commit
*/
-#ifndef EXAMPLE_GDMA_MEMCPY_H
-#define EXAMPLE_GDMA_MEMCPY_H
+#ifndef GDMA_MEMCPY_H
+#define GDMA_MEMCPY_H
#ifdef __cplusplus
extern "C"
diff --git a/example/peripheral/dma/gdma/main.c b/example/peripheral/dma/gdma/main.c
index c4ae2b0f49d649a0807f600f713a78396b0a4fc1..add4a08b7a03d5ecb085bf35e8da4813ac15d1b9 100644
--- a/example/peripheral/dma/gdma/main.c
+++ b/example/peripheral/dma/gdma/main.c
@@ -1,22 +1,22 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: main.c
* Date: 2022-06-17 08:17:59
* LastEditTime: 2022-06-17 08:17:59
- * Description: This file is for
- *
- * Modify History:
+ * Description: This file is for gdma example that running shell task and open scheduler
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
*/
@@ -30,15 +30,17 @@ int main(void)
BaseType_t ret;
ret = LSUserShellTask() ;
- if(ret != pdPASS)
+ if (ret != pdPASS)
+ {
goto FAIL_EXIT;
+ }
/* ret = FFreeRTOSRunGdmaMemcpy(); */
- vTaskStartScheduler(); /* 启动任务,开启调度 */
+ vTaskStartScheduler(); /* 启动任务,开启调度 */
while (1); /* 正常不会执行到这里 */
-
+
FAIL_EXIT:
- printf("failed 0x%x \r\n", ret);
+ printf("failed 0x%x \r\n", ret);
return 0;
}
diff --git a/example/peripheral/dma/gdma/sdkconfig b/example/peripheral/dma/gdma/sdkconfig
index 1486603cf60efc25c3207f0d2d1db9ad104d93da..f253199b26f89e7521a11fcf32d45e65bcde600a 100644
--- a/example/peripheral/dma/gdma/sdkconfig
+++ b/example/peripheral/dma/gdma/sdkconfig
@@ -2,7 +2,7 @@
#
# Freertos Configuration
#
-CONFIG_TARGET_NAME="e2000d_freertos_a64"
+CONFIG_TARGET_NAME="e2000q_freertos_a64"
# end of Freertos Configuration
#
@@ -26,8 +26,8 @@ CONFIG_USE_SYS_TICK=y
#
# CONFIG_TARGET_F2000_4 is not set
# CONFIG_TARGET_D2000 is not set
-# CONFIG_TARGET_E2000Q is not set
-CONFIG_TARGET_E2000D=y
+CONFIG_TARGET_E2000Q=y
+# CONFIG_TARGET_E2000D is not set
# CONFIG_TARGET_E2000S is not set
CONFIG_TARGET_E2000=y
CONFIG_DEFAULT_DEBUG_PRINT_UART1=y
@@ -69,6 +69,7 @@ CONFIG_ENABLE_FGDMA=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -109,6 +110,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -145,6 +155,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -166,12 +177,6 @@ CONFIG_FREERTOS_USE_UART=y
CONFIG_FREERTOS_USE_FGDMA=y
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -183,14 +188,32 @@ CONFIG_FREERTOS_USE_FGDMA=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -208,4 +231,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/dma/gdma/sdkconfig.h b/example/peripheral/dma/gdma/sdkconfig.h
index d2e79f1c709c4fc6d0d5f254ad128d481778c701..cc1db429577537be583b2b107cafaeaba13ba172 100644
--- a/example/peripheral/dma/gdma/sdkconfig.h
+++ b/example/peripheral/dma/gdma/sdkconfig.h
@@ -3,7 +3,7 @@
/* Freertos Configuration */
-#define CONFIG_TARGET_NAME "e2000d_freertos_a64"
+#define CONFIG_TARGET_NAME "e2000q_freertos_a64"
/* end of Freertos Configuration */
/* Standalone Setting */
@@ -24,8 +24,8 @@
/* CONFIG_TARGET_F2000_4 is not set */
/* CONFIG_TARGET_D2000 is not set */
-/* CONFIG_TARGET_E2000Q is not set */
-#define CONFIG_TARGET_E2000D
+#define CONFIG_TARGET_E2000Q
+/* CONFIG_TARGET_E2000D is not set */
/* CONFIG_TARGET_E2000S is not set */
#define CONFIG_TARGET_E2000
#define CONFIG_DEFAULT_DEBUG_PRINT_UART1
@@ -64,6 +64,7 @@
/* CONFIG_USE_ADC is not set */
/* CONFIG_USE_PWM is not set */
/* CONFIG_USE_IPC is not set */
+/* CONFIG_USE_MEDIA is not set */
/* end of Components Configuration */
#define CONFIG_USE_NEW_LIBC
/* end of Standalone Setting */
@@ -100,6 +101,12 @@
/* Compiler Options */
+/* Cross-Compiler Setting */
+
+#define CONFIG_GCC_OPTIMIZE_LEVEL 0
+/* CONFIG_USE_EXT_COMPILER is not set */
+/* CONFIG_USE_KLIN_SYS is not set */
+/* end of Cross-Compiler Setting */
#define CONFIG_OUTPUT_BINARY
/* end of Compiler Options */
/* end of Building Option */
@@ -129,6 +136,7 @@
/* Freertos Eth Drivers */
/* CONFIG_FREERTOS_USE_XMAC is not set */
+/* CONFIG_FREERTOS_USE_GMAC is not set */
/* end of Freertos Eth Drivers */
/* Freertos Gpio Drivers */
@@ -147,11 +155,6 @@
#define CONFIG_FREERTOS_USE_FGDMA
/* end of Freertos DMA Drivers */
-/* Freertos MMC Drivers */
-
-/* CONFIG_FREERTOS_USE_FSDIO is not set */
-/* end of Freertos MMC Drivers */
-
/* Freertos Adc Drivers */
/* CONFIG_FREERTOS_USE_ADC is not set */
@@ -161,13 +164,28 @@
/* CONFIG_FREERTOS_USE_CAN is not set */
/* end of Freertos Can Drivers */
+
+/* Freertos I2c Drivers */
+
+/* CONFIG_FREERTOS_USE_I2C is not set */
+/* end of Freertos I2c Drivers */
+
+/* Freertos Mio Drivers */
+
+/* CONFIG_FREERTOS_USE_MIO is not set */
+/* end of Freertos Mio Drivers */
+
+/* Freertos Timer Drivers */
+
+/* CONFIG_FREERTOS_USE_TIMER is not set */
+/* end of Freertos Timer Drivers */
/* end of Component Configuration */
-/* FreeRTOS Setting */
+/* Third-Party Configuration */
/* CONFIG_USE_LWIP is not set */
#define CONFIG_USE_BACKTRACE
-/* CONFIG_USE_FATFS is not set */
+/* CONFIG_USE_FATFS_0_1_4 is not set */
/* CONFIG_USE_SFUD is not set */
/* CONFIG_USE_SPIFFS is not set */
/* CONFIG_USE_AMP is not set */
@@ -183,6 +201,28 @@
#define CONFIG_USE_TLSF
/* CONFIG_USE_SDMMC_CMD is not set */
/* CONFIG_USE_CHERRY_USB is not set */
-/* end of FreeRTOS Setting */
+/* end of Third-Party Configuration */
+
+/* Kernel Configuration */
+
+#define CONFIG_FREERTOS_OPTIMIZED_SCHEDULER
+#define CONFIG_FREERTOS_HZ 1000
+#define CONFIG_FREERTOS_MAX_PRIORITIES 32
+#define CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES 13
+#define CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES 11
+#define CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS 1
+#define CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE 1024
+#define CONFIG_FREERTOS_MAX_TASK_NAME_LEN 32
+#define CONFIG_FREERTOS_TIMER_TASK_PRIORITY 1
+#define CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH 2048
+#define CONFIG_FREERTOS_TIMER_QUEUE_LENGTH 10
+#define CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE 0
+#define CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS
+#define CONFIG_FREERTOS_USE_TRACE_FACILITY
+#define CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS
+/* CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set */
+#define CONFIG_FREERTOS_TOTAL_HEAP_SIZE 10240
+#define CONFIG_FREERTOS_TASK_FPU_SUPPORT 1
+/* end of Kernel Configuration */
#endif
diff --git a/example/peripheral/dma/gdma/src/cmd_gdma.c b/example/peripheral/dma/gdma/src/cmd_gdma.c
index 84ea8c1fbd87c91540769ce927d479d28316e918..0883c6219be7ed5d5204923d94a10ab2e9e5d201 100644
--- a/example/peripheral/dma/gdma/src/cmd_gdma.c
+++ b/example/peripheral/dma/gdma/src/cmd_gdma.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: cmd_gdma.c
* Date: 2022-07-14 14:06:43
* LastEditTime: 2022-07-14 14:06:43
- * Description: This files is for
- *
- * Modify History:
+ * Description: This files is for gdma command interface
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
+ * 1.0 zhugengyu 2022/08/26 first commit
*/
/***************************** Include Files *********************************/
#include
diff --git a/example/peripheral/dma/gdma/src/gdma_memcpy.c b/example/peripheral/dma/gdma/src/gdma_memcpy.c
index d57fda7f50f2616c2b76a8b9ca56b8e3b6834743..0a00fd08c4e2d8bbdb13f9a7838bbb084e774f89 100644
--- a/example/peripheral/dma/gdma/src/gdma_memcpy.c
+++ b/example/peripheral/dma/gdma/src/gdma_memcpy.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: gdma_memcpy.c
* Date: 2022-07-20 11:07:42
* LastEditTime: 2022-07-20 11:16:57
- * Description: This files is for
- *
- * Modify History:
+ * Description: This files is for GDMA task implementations
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
+ * 1.0 zhugengyu 2022/08/26 first commit
*/
/***************************** Include Files *********************************/
#include
@@ -133,8 +134,8 @@ static FFreeRTOSGdmaRequest *GdmaPrepareRequest(u8 *src, u8 *dst, fsize_t buf_le
req->trans[loop].src_buf = src + pre_buf_len * loop;
req->trans[loop].dst_buf = dst + pre_buf_len * loop;
req->trans[loop].data_len = pre_buf_len;
- FGDMA_INFO("src: %p, dst: %p, len: %d", req->trans[loop].src_buf, req->trans[loop].dst_buf,
- req->trans[loop].data_len);
+ FGDMA_INFO("src: %p, dst: %p, len: %d.", req->trans[loop].src_buf, req->trans[loop].dst_buf,
+ req->trans[loop].data_len);
req->valid_trans_num++;
}
@@ -149,8 +150,8 @@ static void GdmaMemcpyAckChanXEnd(FGdmaChan *const chan, void *args)
BaseType_t xhigher_priority_task_woken = pdFALSE;
BaseType_t x_result = pdFALSE;
- FGDMA_INFO("ack gdma chan %d", chan_id);
- x_result = xEventGroupSetBitsFromISR(chan_evt, GDMA_CHAN_TRANS_END(chan_id),
+ FGDMA_INFO("ack gdma chan %d.", chan_id);
+ x_result = xEventGroupSetBitsFromISR(chan_evt, GDMA_CHAN_TRANS_END(chan_id),
&xhigher_priority_task_woken);
return;
@@ -167,12 +168,12 @@ static boolean GdmaMemcpyWaitChanXEnd(u32 chan_id)
pdTRUE, pdTRUE, wait_delay); /* wait for all bits */
if ((ev & GDMA_CHAN_TRANS_END(chan_id))) /* wait until channel finished memcpy */
{
- FGDMA_INFO("memcpy finished !! chan bits: 0x%x", chan_evt_bits);
+ FGDMA_INFO("memcpy finished !! chan bits: 0x%x.", chan_evt_bits);
ok = TRUE;
}
else
{
- FGDMA_ERROR("wait memcpy timeout !!! 0x%x != 0x%x", ev, chan_evt_bits);
+ FGDMA_ERROR("wait memcpy timeout !!! 0x%x != 0x%x.", ev, chan_evt_bits);
ok = FALSE;
}
@@ -213,7 +214,7 @@ static void GdmaMemcpyTaskA(void *args)
err = FFreeRTOSGdmaSetupChannel(gdma, chan_id, req_a);
if (FT_SUCCESS != err)
{
- FGDMA_ERROR("setup chan-%d failed", chan_id);
+ FGDMA_ERROR("setup chan-%d failed.", chan_id);
goto task_err;
}
@@ -227,7 +228,7 @@ static void GdmaMemcpyTaskA(void *args)
memset(src_a, ch, GDMA_BUF_A_LEN);
memset(dst_a, 0, GDMA_BUF_A_LEN);
- FCacheDCacheInvalidateRange((uintptr)src_a, GDMA_BUF_A_LEN);
+ FCacheDCacheInvalidateRange((uintptr)src_a, GDMA_BUF_A_LEN);
FCacheDCacheInvalidateRange((uintptr)dst_a, GDMA_BUF_A_LEN);
if (FT_SUCCESS != FFreeRTOSGdmaStart(gdma, chan_id))
@@ -239,7 +240,7 @@ static void GdmaMemcpyTaskA(void *args)
if (!GdmaMemcpyWaitChanXEnd(chan_id))
{
goto task_err;
- }
+ }
FCacheDCacheInvalidateRange((uintptr)src_a, GDMA_BUF_A_LEN);
FCacheDCacheInvalidateRange((uintptr)dst_a, GDMA_BUF_A_LEN);
@@ -262,9 +263,11 @@ static void GdmaMemcpyTaskA(void *args)
}
if (times++ > memcpy_times)
+ {
break;
+ }
- vTaskDelay(wait_delay);
+ vTaskDelay(wait_delay);
}
task_err:
@@ -291,7 +294,7 @@ static void GdmaMemcpyTaskB(void *args)
err = FFreeRTOSGdmaSetupChannel(gdma, chan_id, req_b);
if (FT_SUCCESS != err)
{
- FGDMA_ERROR("setup chan-%d failed", chan_id);
+ FGDMA_ERROR("setup chan-%d failed.", chan_id);
goto task_err;
}
@@ -305,7 +308,7 @@ static void GdmaMemcpyTaskB(void *args)
memset(src_b, ch, GDMA_BUF_B_LEN);
memset(dst_b, 0, GDMA_BUF_B_LEN);
- FCacheDCacheInvalidateRange((uintptr)src_b, GDMA_BUF_B_LEN);
+ FCacheDCacheInvalidateRange((uintptr)src_b, GDMA_BUF_B_LEN);
FCacheDCacheInvalidateRange((uintptr)dst_b, GDMA_BUF_B_LEN);
if (FT_SUCCESS != FFreeRTOSGdmaStart(gdma, chan_id))
@@ -317,7 +320,7 @@ static void GdmaMemcpyTaskB(void *args)
if (!GdmaMemcpyWaitChanXEnd(chan_id))
{
goto task_err;
- }
+ }
/* compare if memcpy success */
if (0 == memcmp(src_b, dst_b, GDMA_BUF_B_LEN))
@@ -337,9 +340,11 @@ static void GdmaMemcpyTaskB(void *args)
}
if (times++ > memcpy_times)
+ {
break;
+ }
- vTaskDelay(wait_delay);
+ vTaskDelay(wait_delay);
}
task_err:
@@ -369,38 +374,38 @@ BaseType_t FFreeRTOSRunGdmaMemcpy(void)
taskENTER_CRITICAL(); /* no schedule when create task */
- ret = xTaskCreate((TaskFunction_t )GdmaInitTask, /* task entry */
- (const char* )"GdmaInitTask",/* task name */
- (uint16_t )1024, /* task stack size in words */
- NULL, /* task params */
- (UBaseType_t )configMAX_PRIORITIES - 1, /* task priority */
- NULL); /* task handler */
-
- FASSERT_MSG(pdPASS == ret, "create task failed");
-
- ret = xTaskCreate((TaskFunction_t )GdmaMemcpyTaskA, /* task entry */
- (const char* )"GdmaMemcpyTaskA",/* task name */
- (uint16_t )4096, /* task stack size in words */
- NULL, /* task params */
- (UBaseType_t )configMAX_PRIORITIES - 1, /* task priority */
- (TaskHandle_t* )&task_a); /* task handler */
-
- FASSERT_MSG(pdPASS == ret, "create task failed");
-
- ret = xTaskCreate((TaskFunction_t )GdmaMemcpyTaskB, /* task entry */
- (const char* )"GdmaMemcpyTaskB",/* task name */
- (uint16_t )4096, /* task stack size in words */
- NULL, /* task params */
- (UBaseType_t )configMAX_PRIORITIES - 2, /* task priority */
- (TaskHandle_t* )&task_b); /* task handler */
-
- FASSERT_MSG(pdPASS == ret, "create task failed");
-
- exit_timer = xTimerCreate("Exit-Timer", /* Text name for the software timer - not used by FreeRTOS. */
- total_run_time, /* The software timer's period in ticks. */
- pdFALSE, /* Setting uxAutoRealod to pdFALSE creates a one-shot software timer. */
- NULL, /* use timer id to pass task data for reference. */
- GdmaMemcpyExitCallback); /* The callback function to be used by the software timer being created. */
+ ret = xTaskCreate((TaskFunction_t)GdmaInitTask, /* task entry */
+ (const char *)"GdmaInitTask",/* task name */
+ (uint16_t)1024, /* task stack size in words */
+ NULL, /* task params */
+ (UBaseType_t)configMAX_PRIORITIES - 1, /* task priority */
+ NULL); /* task handler */
+
+ FASSERT_MSG(pdPASS == ret, "create task failed");
+
+ ret = xTaskCreate((TaskFunction_t)GdmaMemcpyTaskA, /* task entry */
+ (const char *)"GdmaMemcpyTaskA",/* task name */
+ (uint16_t)4096, /* task stack size in words */
+ NULL, /* task params */
+ (UBaseType_t)configMAX_PRIORITIES - 1, /* task priority */
+ (TaskHandle_t *)&task_a); /* task handler */
+
+ FASSERT_MSG(pdPASS == ret, "create task failed");
+
+ ret = xTaskCreate((TaskFunction_t)GdmaMemcpyTaskB, /* task entry */
+ (const char *)"GdmaMemcpyTaskB",/* task name */
+ (uint16_t)4096, /* task stack size in words */
+ NULL, /* task params */
+ (UBaseType_t)configMAX_PRIORITIES - 2, /* task priority */
+ (TaskHandle_t *)&task_b); /* task handler */
+
+ FASSERT_MSG(pdPASS == ret, "create task failed");
+
+ exit_timer = xTimerCreate("Exit-Timer", /* Text name for the software timer - not used by FreeRTOS. */
+ total_run_time, /* The software timer's period in ticks. */
+ pdFALSE, /* Setting uxAutoRealod to pdFALSE creates a one-shot software timer. */
+ NULL, /* use timer id to pass task data for reference. */
+ GdmaMemcpyExitCallback); /* The callback function to be used by the software timer being created. */
FASSERT_MSG(NULL != exit_timer, "create exit timer failed");
diff --git a/example/peripheral/gpio/configs/e2000d_aarch32_eg_configs b/example/peripheral/gpio/configs/e2000d_aarch32_eg_configs
index b3297007ce55cec7c7ee376938792aa3239a1f4b..fe40a10b1f2acdf8a9883c65afab3200fb2cfb5f 100644
--- a/example/peripheral/gpio/configs/e2000d_aarch32_eg_configs
+++ b/example/peripheral/gpio/configs/e2000d_aarch32_eg_configs
@@ -68,6 +68,7 @@ CONFIG_ENABLE_FGPIO=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -112,6 +113,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -148,6 +158,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -169,12 +180,6 @@ CONFIG_FREERTOS_USE_GPIO=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -186,14 +191,32 @@ CONFIG_FREERTOS_USE_GPIO=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -211,4 +234,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/gpio/configs/e2000d_aarch64_eg_configs b/example/peripheral/gpio/configs/e2000d_aarch64_eg_configs
index c73f2c12cadd52e4452f9667eadd4915ae75bcd1..f00aff81c294ec3adec651e977211cb494c65636 100644
--- a/example/peripheral/gpio/configs/e2000d_aarch64_eg_configs
+++ b/example/peripheral/gpio/configs/e2000d_aarch64_eg_configs
@@ -68,6 +68,7 @@ CONFIG_ENABLE_FGPIO=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -108,6 +109,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -144,6 +154,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -165,12 +176,6 @@ CONFIG_FREERTOS_USE_GPIO=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -182,14 +187,32 @@ CONFIG_FREERTOS_USE_GPIO=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -207,4 +230,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/gpio/configs/e2000q_aarch32_eg_configs b/example/peripheral/gpio/configs/e2000q_aarch32_eg_configs
index b83d23040465a105dfc076bf16254dc33ac18060..63752a83cb5d25f601e4c8fea04b10e59eea36ed 100644
--- a/example/peripheral/gpio/configs/e2000q_aarch32_eg_configs
+++ b/example/peripheral/gpio/configs/e2000q_aarch32_eg_configs
@@ -68,6 +68,7 @@ CONFIG_ENABLE_FGPIO=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -112,6 +113,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -148,6 +158,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -169,12 +180,6 @@ CONFIG_FREERTOS_USE_GPIO=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -186,14 +191,32 @@ CONFIG_FREERTOS_USE_GPIO=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -211,4 +234,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/gpio/configs/e2000q_aarch64_eg_configs b/example/peripheral/gpio/configs/e2000q_aarch64_eg_configs
index 7e0ec82676819d3666aff8e3a9e6c8303a108a22..8d3d4aeb20a46c31bda2b91baa462da7e268decb 100644
--- a/example/peripheral/gpio/configs/e2000q_aarch64_eg_configs
+++ b/example/peripheral/gpio/configs/e2000q_aarch64_eg_configs
@@ -68,6 +68,7 @@ CONFIG_ENABLE_FGPIO=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -108,6 +109,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -144,6 +154,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -165,12 +176,6 @@ CONFIG_FREERTOS_USE_GPIO=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -182,14 +187,32 @@ CONFIG_FREERTOS_USE_GPIO=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -207,4 +230,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/gpio/inc/gpio_io_irq.h b/example/peripheral/gpio/inc/gpio_io_irq.h
index 096956d25923e843d407e352c0bf9530528ee8d6..b2f35e3b308f22346de43d853cc7b3a9dc84b0ba 100644
--- a/example/peripheral/gpio/inc/gpio_io_irq.h
+++ b/example/peripheral/gpio/inc/gpio_io_irq.h
@@ -1,27 +1,28 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: gpio_io_irq.h
* Date: 2022-07-19 09:26:25
* LastEditTime: 2022-07-19 09:26:25
- * Description: This files is for
- *
- * Modify History:
+ * Description: This file is for gpio io irq function declarations.
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
+ * 1.0 zhugengyu 2022/8/26 init commit
*/
-#ifndef EXAMPLE_GPIO_IRQ_H
-#define EXAMPLE_GPIO_IRQ_H
+#ifndef GPIO_IO_IRQ_H
+#define GPIO_IO_IRQ_H
#ifdef __cplusplus
extern "C"
diff --git a/example/peripheral/gpio/main.c b/example/peripheral/gpio/main.c
index 478f1a3b89b41b38b94803263f7e3a7467ab9c9f..7abccdf889679e7fa7a013a74ce1eb1aa1165f86 100644
--- a/example/peripheral/gpio/main.c
+++ b/example/peripheral/gpio/main.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: main.c
* Date: 2022-06-17 08:17:59
* LastEditTime: 2022-06-17 08:17:59
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
+ * Description: This file is for gpio main entry.
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 zhugengyu 2022/8/26 init commit
*/
#include "shell.h"
@@ -30,15 +31,17 @@ int main(void)
BaseType_t ret;
ret = LSUserShellTask() ;
- if(ret != pdPASS)
+ if (ret != pdPASS)
+ {
goto FAIL_EXIT;
+ }
/* ret = FFreeRTOSRunGpioIOIrq("3-a-4", "3-a-5"); */
- vTaskStartScheduler(); /* 启动任务,开启调度 */
+ vTaskStartScheduler(); /* 启动任务,开启调度 */
while (1); /* 正常不会执行到这里 */
-
+
FAIL_EXIT:
- printf("failed 0x%x \r\n", ret);
+ printf("Failed,the ret value is 0x%x. \r\n", ret);
return 0;
}
diff --git a/example/peripheral/gpio/sdkconfig b/example/peripheral/gpio/sdkconfig
index c73f2c12cadd52e4452f9667eadd4915ae75bcd1..8d3d4aeb20a46c31bda2b91baa462da7e268decb 100644
--- a/example/peripheral/gpio/sdkconfig
+++ b/example/peripheral/gpio/sdkconfig
@@ -2,7 +2,7 @@
#
# Freertos Configuration
#
-CONFIG_TARGET_NAME="e2000d_freertos_a64"
+CONFIG_TARGET_NAME="e2000q_freertos_a64"
# end of Freertos Configuration
#
@@ -26,8 +26,8 @@ CONFIG_USE_SYS_TICK=y
#
# CONFIG_TARGET_F2000_4 is not set
# CONFIG_TARGET_D2000 is not set
-# CONFIG_TARGET_E2000Q is not set
-CONFIG_TARGET_E2000D=y
+CONFIG_TARGET_E2000Q=y
+# CONFIG_TARGET_E2000D is not set
# CONFIG_TARGET_E2000S is not set
CONFIG_TARGET_E2000=y
CONFIG_DEFAULT_DEBUG_PRINT_UART1=y
@@ -68,6 +68,7 @@ CONFIG_ENABLE_FGPIO=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -108,6 +109,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -144,6 +154,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -165,12 +176,6 @@ CONFIG_FREERTOS_USE_GPIO=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -182,14 +187,32 @@ CONFIG_FREERTOS_USE_GPIO=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -207,4 +230,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/gpio/sdkconfig.h b/example/peripheral/gpio/sdkconfig.h
index 6e502857321dfbe26f879b3d6a08f976fa0ff414..7675c972811566a133f9ce831ed2ffb906c88896 100644
--- a/example/peripheral/gpio/sdkconfig.h
+++ b/example/peripheral/gpio/sdkconfig.h
@@ -3,7 +3,7 @@
/* Freertos Configuration */
-#define CONFIG_TARGET_NAME "e2000d_freertos_a64"
+#define CONFIG_TARGET_NAME "e2000q_freertos_a64"
/* end of Freertos Configuration */
/* Standalone Setting */
@@ -24,8 +24,8 @@
/* CONFIG_TARGET_F2000_4 is not set */
/* CONFIG_TARGET_D2000 is not set */
-/* CONFIG_TARGET_E2000Q is not set */
-#define CONFIG_TARGET_E2000D
+#define CONFIG_TARGET_E2000Q
+/* CONFIG_TARGET_E2000D is not set */
/* CONFIG_TARGET_E2000S is not set */
#define CONFIG_TARGET_E2000
#define CONFIG_DEFAULT_DEBUG_PRINT_UART1
@@ -63,6 +63,7 @@
/* CONFIG_USE_ADC is not set */
/* CONFIG_USE_PWM is not set */
/* CONFIG_USE_IPC is not set */
+/* CONFIG_USE_MEDIA is not set */
/* end of Components Configuration */
#define CONFIG_USE_NEW_LIBC
/* end of Standalone Setting */
@@ -99,6 +100,12 @@
/* Compiler Options */
+/* Cross-Compiler Setting */
+
+#define CONFIG_GCC_OPTIMIZE_LEVEL 0
+/* CONFIG_USE_EXT_COMPILER is not set */
+/* CONFIG_USE_KLIN_SYS is not set */
+/* end of Cross-Compiler Setting */
#define CONFIG_OUTPUT_BINARY
/* end of Compiler Options */
/* end of Building Option */
@@ -128,6 +135,7 @@
/* Freertos Eth Drivers */
/* CONFIG_FREERTOS_USE_XMAC is not set */
+/* CONFIG_FREERTOS_USE_GMAC is not set */
/* end of Freertos Eth Drivers */
/* Freertos Gpio Drivers */
@@ -146,11 +154,6 @@
/* CONFIG_FREERTOS_USE_FGDMA is not set */
/* end of Freertos DMA Drivers */
-/* Freertos MMC Drivers */
-
-/* CONFIG_FREERTOS_USE_FSDIO is not set */
-/* end of Freertos MMC Drivers */
-
/* Freertos Adc Drivers */
/* CONFIG_FREERTOS_USE_ADC is not set */
@@ -160,13 +163,28 @@
/* CONFIG_FREERTOS_USE_CAN is not set */
/* end of Freertos Can Drivers */
+
+/* Freertos I2c Drivers */
+
+/* CONFIG_FREERTOS_USE_I2C is not set */
+/* end of Freertos I2c Drivers */
+
+/* Freertos Mio Drivers */
+
+/* CONFIG_FREERTOS_USE_MIO is not set */
+/* end of Freertos Mio Drivers */
+
+/* Freertos Timer Drivers */
+
+/* CONFIG_FREERTOS_USE_TIMER is not set */
+/* end of Freertos Timer Drivers */
/* end of Component Configuration */
-/* FreeRTOS Setting */
+/* Third-Party Configuration */
/* CONFIG_USE_LWIP is not set */
#define CONFIG_USE_BACKTRACE
-/* CONFIG_USE_FATFS is not set */
+/* CONFIG_USE_FATFS_0_1_4 is not set */
/* CONFIG_USE_SFUD is not set */
/* CONFIG_USE_SPIFFS is not set */
/* CONFIG_USE_AMP is not set */
@@ -182,6 +200,28 @@
#define CONFIG_USE_TLSF
/* CONFIG_USE_SDMMC_CMD is not set */
/* CONFIG_USE_CHERRY_USB is not set */
-/* end of FreeRTOS Setting */
+/* end of Third-Party Configuration */
+
+/* Kernel Configuration */
+
+#define CONFIG_FREERTOS_OPTIMIZED_SCHEDULER
+#define CONFIG_FREERTOS_HZ 1000
+#define CONFIG_FREERTOS_MAX_PRIORITIES 32
+#define CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES 13
+#define CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES 11
+#define CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS 1
+#define CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE 1024
+#define CONFIG_FREERTOS_MAX_TASK_NAME_LEN 32
+#define CONFIG_FREERTOS_TIMER_TASK_PRIORITY 1
+#define CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH 2048
+#define CONFIG_FREERTOS_TIMER_QUEUE_LENGTH 10
+#define CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE 0
+#define CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS
+#define CONFIG_FREERTOS_USE_TRACE_FACILITY
+#define CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS
+/* CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set */
+#define CONFIG_FREERTOS_TOTAL_HEAP_SIZE 10240
+#define CONFIG_FREERTOS_TASK_FPU_SUPPORT 1
+/* end of Kernel Configuration */
#endif
diff --git a/example/peripheral/gpio/src/cmd_gpio.c b/example/peripheral/gpio/src/cmd_gpio.c
index d81896f2d2bd2e09d4068252f999757e9e629f7d..7c4c839135231bd54ac27d3570b33439976c0805 100644
--- a/example/peripheral/gpio/src/cmd_gpio.c
+++ b/example/peripheral/gpio/src/cmd_gpio.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: cmd_gpio.c
* Date: 2022-06-28 14:42:53
* LastEditTime: 2022-06-28 14:42:53
- * Description: This files is for
- *
- * Modify History:
+ * Description: This file is for gpio shell command implmentation.
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
+ * 1.0 zhugengyu 2022/8/26 init commit
*/
/***************************** Include Files *********************************/
#include
@@ -42,25 +43,25 @@
/*****************************************************************************/
static boolean GpioParseIndex(const char *str, u32 *pin)
{
- FASSERT(str && pin);
- u32 id_num = 0;
- char port = 'a';
- u32 pin_num = 0;
+ FASSERT(str && pin);
+ u32 id_num = 0;
+ char port = 'a';
+ u32 pin_num = 0;
u32 port_num = 0;
if (3 != sscanf(str, "%d-%c-%d", &id_num, &port, &pin_num))
- {
- printf("Parse as %d-%c-%d", id_num, port, pin_num);
- return FALSE;
- }
-
- if ((id_num >= FGPIO_NUM) ||
- ((port != 'a') && (port != 'b')) ||
- ( pin_num >= FGPIO_PIN_NUM))
- {
- printf("Wrong pin index");
- return FALSE;
- }
+ {
+ printf("Parse as %d-%c-%d", id_num, port, pin_num);
+ return FALSE;
+ }
+
+ if ((id_num >= FGPIO_NUM) ||
+ ((port != 'a') && (port != 'b')) ||
+ (pin_num >= FGPIO_PIN_NUM))
+ {
+ printf("Wrong pin index.");
+ return FALSE;
+ }
port_num = (('a' == port) ? 0 : 1); /* 0 = port-a, 1 = port-b */
*pin = FFREERTOS_GPIO_PIN_INDEX(id_num, port_num, pin_num);
@@ -88,7 +89,7 @@ static int GpioCmdEntry(int argc, char *argv[])
in_pin_str = argv[3];
}
- if ((FALSE == GpioParseIndex(out_pin_str, &out_pin)) ||
+ if ((FALSE == GpioParseIndex(out_pin_str, &out_pin)) ||
(FALSE == GpioParseIndex(in_pin_str, &in_pin)))
{
return -2;
diff --git a/example/peripheral/gpio/src/gpio_io_irq.c b/example/peripheral/gpio/src/gpio_io_irq.c
index 54640297d39e91b269746f4652b14712e34d9a16..db64523c797a2c7c737a41a47b530cb1aa177cf7 100644
--- a/example/peripheral/gpio/src/gpio_io_irq.c
+++ b/example/peripheral/gpio/src/gpio_io_irq.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: gpio_io_irq.c
* Date: 2022-07-22 13:57:42
- * LastEditTime: 2022-07-22 13:57:43
- * Description: This files is for
- *
- * Modify History:
+ * LastEditTime: 2022-07-22 13:57:43
+ * Description: This file is for gpio io irq implementation.
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
+ * 1.0 zhugengyu 2022/8/26 init commit
*/
/***************************** Include Files *********************************/
#include
@@ -45,7 +46,7 @@ static FFreeRTOSGpioConfig out_gpio_cfg;
static xSemaphoreHandle init_locker = NULL;
static u32 in_pin = FFREERTOS_GPIO_PIN_INDEX(3, 0, 5); /* GPIO 3-A-5 */
static u32 out_pin = FFREERTOS_GPIO_PIN_INDEX(3, 0, 4); /* GPIO 3-A-4 */
-static FFreeRTOSGpioPinConfig in_pin_config =
+static FFreeRTOSGpioPinConfig in_pin_config =
{
.pin_idx = FFREERTOS_GPIO_PIN_INDEX(3, 0, 5), /* GPIO 3-A-5 */
.mode = FGPIO_DIR_INPUT,
@@ -54,7 +55,7 @@ static FFreeRTOSGpioPinConfig in_pin_config =
.irq_handler = NULL,
.irq_args = NULL
};
-static FFreeRTOSGpioPinConfig out_pin_config =
+static FFreeRTOSGpioPinConfig out_pin_config =
{
.pin_idx = FFREERTOS_GPIO_PIN_INDEX(3, 0, 4), /* GPIO 3-A-4 */
.mode = FGPIO_DIR_OUTPUT,
@@ -78,7 +79,7 @@ static boolean is_running = FALSE;
/*****************************************************************************/
static void GpioIOIrqExitCallback(TimerHandle_t timer)
{
- printf("exiting...\r\n");
+ printf("Exiting...\r\n");
if (output_task) /* stop and delete send task */
{
@@ -94,7 +95,7 @@ static void GpioIOIrqExitCallback(TimerHandle_t timer)
if (FT_SUCCESS != FFreeRTOSGpioDeInit(in_gpio))
{
- FGPIO_ERROR("delete gpio failed !!!");
+ FGPIO_ERROR("Delete gpio failed.");
}
in_gpio = NULL;
@@ -102,8 +103,8 @@ static void GpioIOIrqExitCallback(TimerHandle_t timer)
{
if (FT_SUCCESS != FFreeRTOSGpioDeInit(out_gpio))
{
- FGPIO_ERROR("delete gpio failed !!!");
- }
+ FGPIO_ERROR("Delete gpio failed.");
+ }
}
out_gpio = NULL;
@@ -123,7 +124,7 @@ static void GpioIOIrqExitCallback(TimerHandle_t timer)
{
if (pdPASS != xTimerDelete(exit_timer, 0))
{
- FGPIO_ERROR("delete exit timer failed !!!");
+ FGPIO_ERROR("Delete exit timer failed.");
}
exit_timer = NULL;
}
@@ -136,8 +137,8 @@ static void GpioIOAckPinIrq(s32 vector, void *param)
BaseType_t xhigher_priority_task_woken = pdFALSE;
BaseType_t x_result = pdFALSE;
- FGPIO_INFO("ack pin irq");
- x_result = xEventGroupSetBitsFromISR(event, PIN_IRQ_OCCURED,
+ FGPIO_INFO("Ack pin irq.");
+ x_result = xEventGroupSetBitsFromISR(event, PIN_IRQ_OCCURED,
&xhigher_priority_task_woken);
}
@@ -161,22 +162,22 @@ static void GdmaInitTask(void *args)
/* init output/input pin */
out_pin_config.pin_idx = out_pin;
err = FFreeRTOSSetupPin(out_gpio, &out_pin_config);
- FASSERT_MSG(FT_SUCCESS == err, "init output gpio pin failed !!!");
+ FASSERT_MSG(FT_SUCCESS == err, "Init output gpio pin failed.");
in_pin_config.pin_idx = in_pin;
in_pin_config.irq_handler = GpioIOAckPinIrq;
in_pin_config.irq_args = NULL;
- printf("config input pin interrupt type as %s\r\n", irq_type_str[in_pin_config.irq_type]);
+ printf("Config input pin interrupt type as %s\r\n", irq_type_str[in_pin_config.irq_type]);
err = FFreeRTOSSetupPin(in_gpio, &in_pin_config);
- FASSERT_MSG(FT_SUCCESS == err, "init input gpio pin failed !!!");
+ FASSERT_MSG(FT_SUCCESS == err, "Init input gpio pin failed.");
- FASSERT_MSG(init_locker, "init locker NULL");
+ FASSERT_MSG(init_locker, "Init locker NULL");
for (u32 loop = 0U; loop < GPIO_WORK_TASK_NUM; loop++)
{
xSemaphoreGive(init_locker);
}
- vTaskDelete(NULL);
+ vTaskDelete(NULL);
}
static void GpioIOIrqOutputTask(void *args)
@@ -187,15 +188,15 @@ static void GpioIOIrqOutputTask(void *args)
const TickType_t toggle_delay = pdMS_TO_TICKS(500UL); /* toggle every 500 ms */
FGpioPinVal out_val = FGPIO_PIN_LOW;
- printf("gpio ouptut task started \r\n");
+ printf("Gpio ouptut task started. \r\n");
for (;;)
{
printf(" ==> Set GPIO-%d-%c-%d as %s\r\n",
- FFREERTOS_GPIO_PIN_CTRL_ID(out_pin),
- (FGPIO_PORT_A == FFREERTOS_GPIO_PIN_PORT_ID(out_pin)) ? 'a' : 'b',
- FFREERTOS_GPIO_PIN_ID(out_pin),
- (out_val == FGPIO_PIN_LOW) ? "low" : "high");
+ FFREERTOS_GPIO_PIN_CTRL_ID(out_pin),
+ (FGPIO_PORT_A == FFREERTOS_GPIO_PIN_PORT_ID(out_pin)) ? 'a' : 'b',
+ FFREERTOS_GPIO_PIN_ID(out_pin),
+ (out_val == FGPIO_PIN_LOW) ? "low" : "high");
FFreeRTOSPinWrite(out_gpio, out_pin, out_val); /* start with low level */
vTaskDelay(toggle_delay);
@@ -208,8 +209,8 @@ static boolean GpioIOWaitIrqOccurr(void)
const TickType_t wait_delay = pdMS_TO_TICKS(2000U); /* just check 2sec wait */
boolean ok = FALSE;
EventBits_t ev = xEventGroupWaitBits(event,
- PIN_IRQ_OCCURED,
- pdTRUE, pdFALSE, wait_delay);
+ PIN_IRQ_OCCURED,
+ pdTRUE, pdFALSE, wait_delay);
if ((ev & PIN_IRQ_OCCURED))
{
@@ -228,7 +229,7 @@ static void GpioIOIrqInputTask(void *args)
FError err = FT_SUCCESS;
const TickType_t input_delay = pdMS_TO_TICKS(100UL); /* input every 500 ms */
- printf("gpio input task started \r\n");
+ printf("Gpio input task started. \r\n");
(void)FFreeRTOSSetIRQ(in_gpio, in_pin, TRUE);
for (;;)
@@ -243,20 +244,20 @@ static void GpioIOIrqInputTask(void *args)
/* check for interrupt event */
if (GpioIOWaitIrqOccurr())
{
- printf("GPIO-%d-%c-%d, Interrrupt Asserted !!! \r\n",
- FFREERTOS_GPIO_PIN_CTRL_ID(in_pin),
- (FGPIO_PORT_A == FFREERTOS_GPIO_PIN_PORT_ID(in_pin)) ? 'a' : 'b',
- FFREERTOS_GPIO_PIN_ID(in_pin));
+ printf("GPIO-%d-%c-%d, Interrrupt Asserted. \r\n",
+ FFREERTOS_GPIO_PIN_CTRL_ID(in_pin),
+ (FGPIO_PORT_A == FFREERTOS_GPIO_PIN_PORT_ID(in_pin)) ? 'a' : 'b',
+ FFREERTOS_GPIO_PIN_ID(in_pin));
(void)FFreeRTOSSetIRQ(in_gpio, in_pin, TRUE); /* enable irq to recv next one */
}
else
{
- printf("None Interrupt Assert\r\n");
+ printf("None Interrupt Assert.\r\n");
continue;
}
- vTaskDelay(input_delay);
+ vTaskDelay(input_delay);
}
}
@@ -267,63 +268,63 @@ BaseType_t FFreeRTOSRunGpioIOIrq(u32 out_pin_idx, u32 in_pin_idx)
if (is_running)
{
- FGPIO_ERROR("task is running !!!!");
+ FGPIO_ERROR("The task is running.");
return pdPASS;
}
is_running = TRUE;
- FASSERT_MSG(NULL == event, "event group exists !!!");
- FASSERT_MSG((event = xEventGroupCreate()) != NULL, "create event group failed !!!");
+ FASSERT_MSG(NULL == event, "Event group exists.");
+ FASSERT_MSG((event = xEventGroupCreate()) != NULL, "Create event group failed.");
- FASSERT_MSG(NULL == init_locker, "init locker exists !!!");
- FASSERT_MSG((init_locker = xSemaphoreCreateCounting(GPIO_WORK_TASK_NUM, 0U)) != NULL, "create event group failed !!!");
+ FASSERT_MSG(NULL == init_locker, "Init locker exists.");
+ FASSERT_MSG((init_locker = xSemaphoreCreateCounting(GPIO_WORK_TASK_NUM, 0U)) != NULL, "Create event group failed.");
out_pin = out_pin_idx;
in_pin = in_pin_idx;
taskENTER_CRITICAL(); /* no schedule when create task */
- ret = xTaskCreate((TaskFunction_t )GdmaInitTask, /* task entry */
- (const char* )"GdmaInitTask",/* task name */
- (uint16_t )1024, /* task stack size in words */
- NULL, /* task params */
- (UBaseType_t )configMAX_PRIORITIES - 1, /* task priority */
- NULL); /* task handler */
+ ret = xTaskCreate((TaskFunction_t)GdmaInitTask, /* task entry */
+ (const char *)"GdmaInitTask",/* task name */
+ (uint16_t)1024, /* task stack size in words */
+ NULL, /* task params */
+ (UBaseType_t)configMAX_PRIORITIES - 1, /* task priority */
+ NULL); /* task handler */
- FASSERT_MSG(pdPASS == ret, "create task failed");
+ FASSERT_MSG(pdPASS == ret, "Create task failed.");
- ret = xTaskCreate((TaskFunction_t )GpioIOIrqOutputTask, /* task entry */
- (const char* )"GpioIOIrqOutputTask",/* task name */
- (uint16_t )1024, /* task stack size in words */
- NULL, /* task params */
- (UBaseType_t )configMAX_PRIORITIES - 1, /* task priority */
- (TaskHandle_t* )&output_task); /* task handler */
+ ret = xTaskCreate((TaskFunction_t)GpioIOIrqOutputTask, /* task entry */
+ (const char *)"GpioIOIrqOutputTask",/* task name */
+ (uint16_t)1024, /* task stack size in words */
+ NULL, /* task params */
+ (UBaseType_t)configMAX_PRIORITIES - 1, /* task priority */
+ (TaskHandle_t *)&output_task); /* task handler */
- FASSERT_MSG(pdPASS == ret, "create task failed");
+ FASSERT_MSG(pdPASS == ret, "Create task failed.");
- ret = xTaskCreate((TaskFunction_t )GpioIOIrqInputTask, /* task entry */
- (const char* )"GpioIOIrqInputTask",/* task name */
- (uint16_t )1024, /* task stack size in words */
- NULL, /* task params */
- (UBaseType_t )configMAX_PRIORITIES - 2, /* task priority */
- (TaskHandle_t* )&input_task); /* task handler */
+ ret = xTaskCreate((TaskFunction_t)GpioIOIrqInputTask, /* task entry */
+ (const char *)"GpioIOIrqInputTask",/* task name */
+ (uint16_t)1024, /* task stack size in words */
+ NULL, /* task params */
+ (UBaseType_t)configMAX_PRIORITIES - 2, /* task priority */
+ (TaskHandle_t *)&input_task); /* task handler */
- FASSERT_MSG(pdPASS == ret, "create task failed");
+ FASSERT_MSG(pdPASS == ret, "Create task failed.");
- exit_timer = xTimerCreate("Exit-Timer", /* Text name for the software timer - not used by FreeRTOS. */
- total_run_time, /* The software timer's period in ticks. */
- pdFALSE, /* Setting uxAutoRealod to pdFALSE creates a one-shot software timer. */
- NULL, /* use timer id to pass task data for reference. */
- GpioIOIrqExitCallback); /* The callback function to be used by the software timer being created. */
+ exit_timer = xTimerCreate("Exit-Timer", /* Text name for the software timer - not used by FreeRTOS. */
+ total_run_time, /* The software timer's period in ticks. */
+ pdFALSE, /* Setting uxAutoRealod to pdFALSE creates a one-shot software timer. */
+ NULL, /* use timer id to pass task data for reference. */
+ GpioIOIrqExitCallback); /* The callback function to be used by the software timer being created. */
- FASSERT_MSG(NULL != exit_timer, "create exit timer failed");
+ FASSERT_MSG(NULL != exit_timer, "Create exit timer failed.");
taskEXIT_CRITICAL(); /* allow schedule since task created */
ret = xTimerStart(exit_timer, 0); /* start */
- FASSERT_MSG(pdPASS == ret, "start exit timer failed");
+ FASSERT_MSG(pdPASS == ret, "Start exit timer failed.");
return ret;
}
diff --git a/example/storage/sata_fatfs/Kconfig b/example/peripheral/i2c/Kconfig
similarity index 100%
rename from example/storage/sata_fatfs/Kconfig
rename to example/peripheral/i2c/Kconfig
diff --git a/example/network/gmac_lwip_test/README.md b/example/peripheral/i2c/README.md
similarity index 50%
rename from example/network/gmac_lwip_test/README.md
rename to example/peripheral/i2c/README.md
index 9d3ae3b5b355606346991ddff58d2f02c6e3b2f0..3af26431a97e5952f4459cfce9350ccadfe5dbe7 100644
--- a/example/network/gmac_lwip_test/README.md
+++ b/example/peripheral/i2c/README.md
@@ -12,52 +12,66 @@
*
*
* FilePath: README.md
- * Date: 2022-02-24 13:42:19
- * LastEditTime: 2022-03-21 17:02:02
- * Description: This file is for
+ * Date: 2022-08-23 11:15:06
+ * LastEditTime: 2022-08-23 11:15:06
+ * Description: This file is for i2c
*
* Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
+ * 0.1.0 liushengming 2022.08.23 init
-->
-# lwip base on freertos
+# i2c base on freertos
## 1. 例程介绍
-本例程示范了freertos环境下的lwip移植。
-本例程目前支持在freertos下,移植lwip,使网络能够ping通,shell能够正常运行。
+本例程示范了freertos环境下的i2c的读写使用,包括i2c的初始化、写、读和去初始化操作;
+程序启动后,创建i2c的初始化、写任务和读任务;
+例程在D2000上使用i2c-0与i2c-2回环测试,也可进行eeprom读取(更改从机地址,取消slave任务初始化即可)(注意i2c-0本身连接的eeprom芯片,虚拟从机地址不要与其重合,不然会引起总线冲突);
+例程也可以作为ft2004的例程参考,只需自行解决从机地址替换,本例程没有直接演示。
+E2000D上使用的demo板上的 RTC 进行iic测试,从机亦可参考D2000进行;
+本例程目前仅仅适配了主机poll发送,从机中断接收的方式。
## 2. 如何使用例程
本例程需要用到
-- Phytium开发板(FT2000-4/D2000/E2000D)
+- Phytium开发板(D2000/E2000DQS of TestB板)
- [Phytium freeRTOS SDK](https://gitee.com/phytium_embedded/phytium-free-rtos-sdk)
- [Phytium standalone SDK](https://gitee.com/phytium_embedded/phytium-standalone-sdk)
### 2.1 硬件配置方法
本例程支持的硬件平台包括
+- D2000、E2000DQS demo开发板
+
+对应的配置项是
+- CONFIG_TARGET_D2000
+- CONFIG_TARGET_E2000D、 CONFIG_TARGET_E2000Q
+
+### 2.1.1 硬件连线
-- FT2000-4
- D2000
-- E2000D
-对应的配置项是,
+
-- CONFIG_TARGET_F2000_4
-- CONFIG_TARGET_D2000
-- CONFIG_TARGET_E2000D
+- E2000
+
+
### 2.2 SDK配置方法
本例程需要,
-- 使能LWIP
+- 使能Shell
+- 使能I2C
+- 如果是E2000系列,使能MIO
对应的配置项是,
-- CONFIG_USE_LWIP
- CONFIG_USE_LETTER_SHELL
+- CONFIG_FREERTOS_USE_I2C
+如果是E2000系列
+- CONFIG_FREERTOS_USE_MIO
本例子已经提供好具体的编译指令,以下进行介绍:
- make 将目录下的工程进行编译
@@ -65,10 +79,10 @@
- make boot 将目录下的工程进行编译,并将生成的elf 复制到目标地址
- make load_d2000_aarch64 将预设64bit d2000 下的配置加载至工程中
- make load_d2000_aarch32 将预设32bit d2000 下的配置加载至工程中
-- make load_ft2004_aarch64 将预设64bit ft2004 下的配置加载至工程中
-- make load_ft2004_aarch32 将预设32bit ft2004 下的配置加载至工程中
- make load_e2000d_aarch64 将预设64bit e2000d 下的配置加载至工程中
- make load_e2000d_aarch32 将预设32bit e2000d 下的配置加载至工程中
+- make load_e2000q_aarch64 将预设64bit e2000q 下的配置加载至工程中
+- make load_e2000q_aarch32 将预设32bit e2000q 下的配置加载至工程中
- make menuconfig 配置目录下的参数变量
- make backup_kconfig 将目录下的sdkconfig 备份到./configs下
@@ -81,11 +95,11 @@
#### 2.3.1 构建过程
- 在host侧完成配置
->配置成ft2004,对于其它平台,使用对于的默认配置,如D2000 `make load_d2000_aarch32`
+>配置成d2000,对于其它平台,使用对应的默认配置,如E2000D `make load_e2000d_aarch32`
- 选择目标平台
```
-make load_ft2004_aarch32
+make load_d2000_aarch32
```
- 选择例程需要的配置
@@ -112,7 +126,7 @@ sudo service tftpd-hpa restart
- 开发板侧使用bootelf命令跳转
```
-setenv ipaddr 192.168.4.20
+setenv ipaddr 192.168.4.20
setenv serverip 192.168.4.50
setenv gatewayip 192.168.4.1
tftpboot 0x90100000 freertos.elf
@@ -121,101 +135,27 @@ bootelf -p 0x90100000
### 2.4 输出与实验现象
-- 启动进入后,根据连接的gmac口,输入指令完成网口初始化
-
-#### 2.4.1 ipv4下的probe
-
-- 输入以下命令
-
-```
-make menuconfig
-```
-
-- 将此项选择上
-
-
-
-- 输入以下命令,初始化LWIP网络协议栈, 依次配置ip地址,子网掩码,网关地址和退出时间,运行完成退出后LWIP协议栈会被暂时去使能
-
-```
-gmac probe [instance num]
-```
-
-- 其中instance num 为控制器id
-
-
-
-
-
-
-#### 2.4.2 ipv6下的probe
-
-
-- 输入以下命令
-
-```
-make menuconfig
-```
-
-- 将此项选择上
-
-
-
-- 输入以下命令,初始化LWIP网络协议栈, 依次配置ip地址,子网掩码,网关地址和退出时间,运行完成退出后LWIP协议栈会被暂时去使能
-
-```
-gmac probe [instance num]
-```
-
-- 其中instance num 为控制器id
-
-
-
-
-
-
-#### 2.4.3 ipv4 dhcp
-
-- 输入以下命令
-
-```
-make menuconfig
-```
-
-- 将此项选择上
-
-
-
-
-
+- 系统进入后,创建i2c初始化任务,创建i2c从机中断初始化,注册中断服务函数,创建i2c主机的读写任务函数。
+- D2000
-- 输入以下命令,初始化LWIP网络协议栈, 并且会默认打开dhcp 线程
+
-```
-gmac probe [instance num]
-```
+
-- 其中instance num 为控制器id
+- E2000
-
+
-
-
-#### 2.4.2 提供
## 3. 如何解决问题
-Q: 程序运行过程中queue.c的debug信息报错
+- 若出现读写异常,需确认连接是否正确;
-A: 考虑自身任务创建时分配的栈空间大小,考虑tcpip_thread任务的栈空间大小TCPIP_THREAD_STACKSIZE
+- 由于D2000开发板上的自带eeprom,因此不建议使用特殊地址0x57进行I2C-2模拟的从设备地址,因为这可能导致总线抢占,无法正常传输;
-Q: 程序运行过程中ping大包异常
+## 4. 修改历史记录
-A: 考虑以下两个宏的大小:PBUF_POOL_SIZE定义缓冲池的个数,PBUF_POOL_BUFSIZE定义单个缓冲区的大小
-## 4. 修改历史记录
-v0.0.4 初次合入lwip
-v0.1.0 重构lwip
diff --git a/example/storage/sata_fatfs/configs/d2000_aarch32_eg_configs b/example/peripheral/i2c/configs/d2000_aarch32_eg_configs
similarity index 69%
rename from example/storage/sata_fatfs/configs/d2000_aarch32_eg_configs
rename to example/peripheral/i2c/configs/d2000_aarch32_eg_configs
index ada6a28a2ccde9c217030d2318a64fdde0651fd4..944fdcd372484e75f6b0d788217409cb6e0d87a2 100644
--- a/example/storage/sata_fatfs/configs/d2000_aarch32_eg_configs
+++ b/example/peripheral/i2c/configs/d2000_aarch32_eg_configs
@@ -16,7 +16,7 @@ CONFIG_USE_FREERTOS=y
CONFIG_TARGET_ARMV8_AARCH32=y
# CONFIG_TARGET_ARMV8_AARCH64 is not set
CONFIG_USE_CACHE=y
-CONFIG_USE_L3CACHE=y
+# CONFIG_USE_L3CACHE is not set
CONFIG_USE_MMU=y
CONFIG_USE_SYS_TICK=y
CONFIG_USE_AARCH64_L1_TO_AARCH32=y
@@ -53,34 +53,28 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_GPIO is not set
# CONFIG_USE_ETH is not set
# CONFIG_USE_CAN is not set
-# CONFIG_USE_I2C is not set
+CONFIG_USE_I2C=y
+CONFIG_USE_FI2C=y
# CONFIG_USE_TIMER is not set
-# CONFIG_USE_MIO is not set
-# CONFIG_USE_SDMMC is not set
-CONFIG_USE_PCIE=y
+CONFIG_USE_MIO=y
#
-# Pcie Configuration
+# Hardware Mio Configuration
#
-CONFIG_ENABLE_F_PCIE=y
-# end of Pcie Configuration
+# end of Hardware Mio Configuration
+# CONFIG_USE_SDMMC is not set
+# CONFIG_USE_PCIE is not set
# CONFIG_USE_WDT is not set
# CONFIG_USE_DMA is not set
# CONFIG_USE_NAND is not set
# CONFIG_USE_RTC is not set
-CONFIG_USE_SATA=y
-
-#
-# FSATA Configuration
-#
-CONFIG_ENABLE_FSATA=y
-# end of FSATA Configuration
-
+# CONFIG_USE_SATA is not set
# CONFIG_USE_USB is not set
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -91,9 +85,9 @@ CONFIG_USE_NEW_LIBC=y
#
# CONFIG_LOG_VERBOS is not set
# CONFIG_LOG_DEBUG is not set
-CONFIG_LOG_INFO=y
+# CONFIG_LOG_INFO is not set
# CONFIG_LOG_WARN is not set
-# CONFIG_LOG_ERROR is not set
+CONFIG_LOG_ERROR=y
# CONFIG_LOG_NONE is not set
CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y
CONFIG_INTERRUPT_ROLE_MASTER=y
@@ -125,6 +119,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -161,6 +164,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -182,12 +186,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -199,24 +197,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
-# end of Component Configuration
#
-# FreeRTOS Setting
+# Freertos I2c Drivers
#
-# CONFIG_USE_LWIP is not set
-CONFIG_USE_BACKTRACE=y
-CONFIG_USE_FATFS=y
+CONFIG_FREERTOS_USE_I2C=y
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
#
-# FATFS Configuration
+# Freertos Timer Drivers
#
-# CONFIG_SELECT_FATFS_RAM_DISK is not set
-# CONFIG_SELECT_FATFS_FSDMMC is not set
-CONFIG_SELECT_FATFS_FSATA_PCIE=y
-# CONFIG_SELECT_FATFS_USB is not set
-# end of FATFS Configuration
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
+# end of Component Configuration
+#
+# Third-Party Configuration
+#
+# CONFIG_USE_LWIP is not set
+CONFIG_USE_BACKTRACE=y
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -231,7 +237,30 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set
# end of Letter Shell Configuration
-CONFIG_USE_TLSF=y
+# CONFIG_USE_TLSF is not set
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/storage/sata_fatfs/configs/d2000_aarch64_eg_configs b/example/peripheral/i2c/configs/d2000_aarch64_eg_configs
similarity index 69%
rename from example/storage/sata_fatfs/configs/d2000_aarch64_eg_configs
rename to example/peripheral/i2c/configs/d2000_aarch64_eg_configs
index 887b52f0d686be2dfd9ea391915a377131767129..efcc8e0e6af9062c0f4c958eb065ee814c041788 100644
--- a/example/storage/sata_fatfs/configs/d2000_aarch64_eg_configs
+++ b/example/peripheral/i2c/configs/d2000_aarch64_eg_configs
@@ -16,7 +16,7 @@ CONFIG_USE_FREERTOS=y
# CONFIG_TARGET_ARMV8_AARCH32 is not set
CONFIG_TARGET_ARMV8_AARCH64=y
CONFIG_USE_CACHE=y
-CONFIG_USE_L3CACHE=y
+# CONFIG_USE_L3CACHE is not set
CONFIG_USE_MMU=y
CONFIG_USE_SYS_TICK=y
# CONFIG_MMU_DEBUG_PRINTS is not set
@@ -53,34 +53,28 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_GPIO is not set
# CONFIG_USE_ETH is not set
# CONFIG_USE_CAN is not set
-# CONFIG_USE_I2C is not set
+CONFIG_USE_I2C=y
+CONFIG_USE_FI2C=y
# CONFIG_USE_TIMER is not set
-# CONFIG_USE_MIO is not set
-# CONFIG_USE_SDMMC is not set
-CONFIG_USE_PCIE=y
+CONFIG_USE_MIO=y
#
-# Pcie Configuration
+# Hardware Mio Configuration
#
-CONFIG_ENABLE_F_PCIE=y
-# end of Pcie Configuration
+# end of Hardware Mio Configuration
+# CONFIG_USE_SDMMC is not set
+# CONFIG_USE_PCIE is not set
# CONFIG_USE_WDT is not set
# CONFIG_USE_DMA is not set
# CONFIG_USE_NAND is not set
# CONFIG_USE_RTC is not set
-CONFIG_USE_SATA=y
-
-#
-# FSATA Configuration
-#
-CONFIG_ENABLE_FSATA=y
-# end of FSATA Configuration
-
+# CONFIG_USE_SATA is not set
# CONFIG_USE_USB is not set
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -91,9 +85,9 @@ CONFIG_USE_NEW_LIBC=y
#
# CONFIG_LOG_VERBOS is not set
# CONFIG_LOG_DEBUG is not set
-CONFIG_LOG_INFO=y
+# CONFIG_LOG_INFO is not set
# CONFIG_LOG_WARN is not set
-# CONFIG_LOG_ERROR is not set
+CONFIG_LOG_ERROR=y
# CONFIG_LOG_NONE is not set
CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y
CONFIG_INTERRUPT_ROLE_MASTER=y
@@ -121,6 +115,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -157,6 +160,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -178,12 +182,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -195,24 +193,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
-# end of Component Configuration
#
-# FreeRTOS Setting
+# Freertos I2c Drivers
#
-# CONFIG_USE_LWIP is not set
-CONFIG_USE_BACKTRACE=y
-CONFIG_USE_FATFS=y
+CONFIG_FREERTOS_USE_I2C=y
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
#
-# FATFS Configuration
+# Freertos Timer Drivers
#
-# CONFIG_SELECT_FATFS_RAM_DISK is not set
-# CONFIG_SELECT_FATFS_FSDMMC is not set
-CONFIG_SELECT_FATFS_FSATA_PCIE=y
-# CONFIG_SELECT_FATFS_USB is not set
-# end of FATFS Configuration
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
+# end of Component Configuration
+#
+# Third-Party Configuration
+#
+# CONFIG_USE_LWIP is not set
+CONFIG_USE_BACKTRACE=y
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -227,7 +233,30 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set
# end of Letter Shell Configuration
-CONFIG_USE_TLSF=y
+# CONFIG_USE_TLSF is not set
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/storage/sata_fatfs/configs/e2000d_aarch32_eg_configs b/example/peripheral/i2c/configs/e2000d_aarch32_eg_configs
similarity index 70%
rename from example/storage/sata_fatfs/configs/e2000d_aarch32_eg_configs
rename to example/peripheral/i2c/configs/e2000d_aarch32_eg_configs
index e641de063e59d347d9f13f27501393b96a2374ae..fec861bc139c5f143cac95d09bd491d020bba443 100644
--- a/example/storage/sata_fatfs/configs/e2000d_aarch32_eg_configs
+++ b/example/peripheral/i2c/configs/e2000d_aarch32_eg_configs
@@ -53,27 +53,29 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_GPIO is not set
# CONFIG_USE_ETH is not set
# CONFIG_USE_CAN is not set
-# CONFIG_USE_I2C is not set
+CONFIG_USE_I2C=y
+CONFIG_USE_FI2C=y
# CONFIG_USE_TIMER is not set
-# CONFIG_USE_MIO is not set
+CONFIG_USE_MIO=y
+
+#
+# Hardware Mio Configuration
+#
+CONFIG_ENABLE_MIO=y
+# end of Hardware Mio Configuration
+
# CONFIG_USE_SDMMC is not set
# CONFIG_USE_PCIE is not set
# CONFIG_USE_WDT is not set
# CONFIG_USE_DMA is not set
# CONFIG_USE_NAND is not set
# CONFIG_USE_RTC is not set
-CONFIG_USE_SATA=y
-
-#
-# FSATA Configuration
-#
-CONFIG_ENABLE_FSATA=y
-# end of FSATA Configuration
-
+# CONFIG_USE_SATA is not set
# CONFIG_USE_USB is not set
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -84,9 +86,9 @@ CONFIG_USE_NEW_LIBC=y
#
# CONFIG_LOG_VERBOS is not set
# CONFIG_LOG_DEBUG is not set
-CONFIG_LOG_INFO=y
+# CONFIG_LOG_INFO is not set
# CONFIG_LOG_WARN is not set
-# CONFIG_LOG_ERROR is not set
+CONFIG_LOG_ERROR=y
# CONFIG_LOG_NONE is not set
CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y
CONFIG_INTERRUPT_ROLE_MASTER=y
@@ -118,6 +120,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -154,6 +165,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -175,12 +187,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -192,25 +198,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
-# end of Component Configuration
#
-# FreeRTOS Setting
+# Freertos I2c Drivers
#
-# CONFIG_USE_LWIP is not set
-CONFIG_USE_BACKTRACE=y
-CONFIG_USE_FATFS=y
+CONFIG_FREERTOS_USE_I2C=y
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+CONFIG_FREERTOS_USE_MIO=y
+# end of Freertos Mio Drivers
#
-# FATFS Configuration
+# Freertos Timer Drivers
#
-# CONFIG_SELECT_FATFS_RAM_DISK is not set
-# CONFIG_SELECT_FATFS_FSDMMC is not set
-# CONFIG_SELECT_FATFS_FSATA_PCIE is not set
-CONFIG_SELECT_FATFS_FSATA_CONTROLLER=y
-# CONFIG_SELECT_FATFS_USB is not set
-# end of FATFS Configuration
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
+# end of Component Configuration
+#
+# Third-Party Configuration
+#
+# CONFIG_USE_LWIP is not set
+CONFIG_USE_BACKTRACE=y
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -225,7 +238,30 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set
# end of Letter Shell Configuration
-CONFIG_USE_TLSF=y
+# CONFIG_USE_TLSF is not set
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/storage/sata_fatfs/configs/e2000d_aarch64_eg_configs b/example/peripheral/i2c/configs/e2000d_aarch64_eg_configs
similarity index 70%
rename from example/storage/sata_fatfs/configs/e2000d_aarch64_eg_configs
rename to example/peripheral/i2c/configs/e2000d_aarch64_eg_configs
index 1b5ead15373043586ed9b89ec501c7035087016b..e84ed0b0ed63f38c39ab052e6260d91846e5c283 100644
--- a/example/storage/sata_fatfs/configs/e2000d_aarch64_eg_configs
+++ b/example/peripheral/i2c/configs/e2000d_aarch64_eg_configs
@@ -53,27 +53,29 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_GPIO is not set
# CONFIG_USE_ETH is not set
# CONFIG_USE_CAN is not set
-# CONFIG_USE_I2C is not set
+CONFIG_USE_I2C=y
+CONFIG_USE_FI2C=y
# CONFIG_USE_TIMER is not set
-# CONFIG_USE_MIO is not set
+CONFIG_USE_MIO=y
+
+#
+# Hardware Mio Configuration
+#
+CONFIG_ENABLE_MIO=y
+# end of Hardware Mio Configuration
+
# CONFIG_USE_SDMMC is not set
# CONFIG_USE_PCIE is not set
# CONFIG_USE_WDT is not set
# CONFIG_USE_DMA is not set
# CONFIG_USE_NAND is not set
# CONFIG_USE_RTC is not set
-CONFIG_USE_SATA=y
-
-#
-# FSATA Configuration
-#
-CONFIG_ENABLE_FSATA=y
-# end of FSATA Configuration
-
+# CONFIG_USE_SATA is not set
# CONFIG_USE_USB is not set
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -84,9 +86,9 @@ CONFIG_USE_NEW_LIBC=y
#
# CONFIG_LOG_VERBOS is not set
# CONFIG_LOG_DEBUG is not set
-CONFIG_LOG_INFO=y
+# CONFIG_LOG_INFO is not set
# CONFIG_LOG_WARN is not set
-# CONFIG_LOG_ERROR is not set
+CONFIG_LOG_ERROR=y
# CONFIG_LOG_NONE is not set
CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y
CONFIG_INTERRUPT_ROLE_MASTER=y
@@ -114,6 +116,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -150,6 +161,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -171,12 +183,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -188,25 +194,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
-# end of Component Configuration
#
-# FreeRTOS Setting
+# Freertos I2c Drivers
#
-# CONFIG_USE_LWIP is not set
-CONFIG_USE_BACKTRACE=y
-CONFIG_USE_FATFS=y
+CONFIG_FREERTOS_USE_I2C=y
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+CONFIG_FREERTOS_USE_MIO=y
+# end of Freertos Mio Drivers
#
-# FATFS Configuration
+# Freertos Timer Drivers
#
-# CONFIG_SELECT_FATFS_RAM_DISK is not set
-# CONFIG_SELECT_FATFS_FSDMMC is not set
-# CONFIG_SELECT_FATFS_FSATA_PCIE is not set
-CONFIG_SELECT_FATFS_FSATA_CONTROLLER=y
-# CONFIG_SELECT_FATFS_USB is not set
-# end of FATFS Configuration
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
+# end of Component Configuration
+#
+# Third-Party Configuration
+#
+# CONFIG_USE_LWIP is not set
+CONFIG_USE_BACKTRACE=y
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -221,7 +234,30 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set
# end of Letter Shell Configuration
-CONFIG_USE_TLSF=y
+# CONFIG_USE_TLSF is not set
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/storage/sata_fatfs/configs/e2000q_aarch32_eg_configs b/example/peripheral/i2c/configs/e2000q_aarch32_eg_configs
similarity index 70%
rename from example/storage/sata_fatfs/configs/e2000q_aarch32_eg_configs
rename to example/peripheral/i2c/configs/e2000q_aarch32_eg_configs
index 776a5de1956bf09a8285c358d4ef7b29ade9c6a8..717137405f7cde600c17bbd8ee312176da1b089a 100644
--- a/example/storage/sata_fatfs/configs/e2000q_aarch32_eg_configs
+++ b/example/peripheral/i2c/configs/e2000q_aarch32_eg_configs
@@ -53,27 +53,29 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_GPIO is not set
# CONFIG_USE_ETH is not set
# CONFIG_USE_CAN is not set
-# CONFIG_USE_I2C is not set
+CONFIG_USE_I2C=y
+CONFIG_USE_FI2C=y
# CONFIG_USE_TIMER is not set
-# CONFIG_USE_MIO is not set
+CONFIG_USE_MIO=y
+
+#
+# Hardware Mio Configuration
+#
+CONFIG_ENABLE_MIO=y
+# end of Hardware Mio Configuration
+
# CONFIG_USE_SDMMC is not set
# CONFIG_USE_PCIE is not set
# CONFIG_USE_WDT is not set
# CONFIG_USE_DMA is not set
# CONFIG_USE_NAND is not set
# CONFIG_USE_RTC is not set
-CONFIG_USE_SATA=y
-
-#
-# FSATA Configuration
-#
-CONFIG_ENABLE_FSATA=y
-# end of FSATA Configuration
-
+# CONFIG_USE_SATA is not set
# CONFIG_USE_USB is not set
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -84,9 +86,9 @@ CONFIG_USE_NEW_LIBC=y
#
# CONFIG_LOG_VERBOS is not set
# CONFIG_LOG_DEBUG is not set
-CONFIG_LOG_INFO=y
+# CONFIG_LOG_INFO is not set
# CONFIG_LOG_WARN is not set
-# CONFIG_LOG_ERROR is not set
+CONFIG_LOG_ERROR=y
# CONFIG_LOG_NONE is not set
CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y
CONFIG_INTERRUPT_ROLE_MASTER=y
@@ -118,6 +120,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -154,6 +165,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -175,12 +187,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -192,25 +198,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
-# end of Component Configuration
#
-# FreeRTOS Setting
+# Freertos I2c Drivers
#
-# CONFIG_USE_LWIP is not set
-CONFIG_USE_BACKTRACE=y
-CONFIG_USE_FATFS=y
+CONFIG_FREERTOS_USE_I2C=y
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+CONFIG_FREERTOS_USE_MIO=y
+# end of Freertos Mio Drivers
#
-# FATFS Configuration
+# Freertos Timer Drivers
#
-# CONFIG_SELECT_FATFS_RAM_DISK is not set
-# CONFIG_SELECT_FATFS_FSDMMC is not set
-# CONFIG_SELECT_FATFS_FSATA_PCIE is not set
-CONFIG_SELECT_FATFS_FSATA_CONTROLLER=y
-# CONFIG_SELECT_FATFS_USB is not set
-# end of FATFS Configuration
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
+# end of Component Configuration
+#
+# Third-Party Configuration
+#
+# CONFIG_USE_LWIP is not set
+CONFIG_USE_BACKTRACE=y
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -225,7 +238,30 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set
# end of Letter Shell Configuration
-CONFIG_USE_TLSF=y
+# CONFIG_USE_TLSF is not set
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/storage/sata_fatfs/configs/e2000q_aarch64_eg_configs b/example/peripheral/i2c/configs/e2000q_aarch64_eg_configs
similarity index 70%
rename from example/storage/sata_fatfs/configs/e2000q_aarch64_eg_configs
rename to example/peripheral/i2c/configs/e2000q_aarch64_eg_configs
index 6b410bdbcaaf0f4ae02fba874170bf9824a5f206..f08739ee59716f1b8fa02cb16c8c9b85352f17b2 100644
--- a/example/storage/sata_fatfs/configs/e2000q_aarch64_eg_configs
+++ b/example/peripheral/i2c/configs/e2000q_aarch64_eg_configs
@@ -53,27 +53,29 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_GPIO is not set
# CONFIG_USE_ETH is not set
# CONFIG_USE_CAN is not set
-# CONFIG_USE_I2C is not set
+CONFIG_USE_I2C=y
+CONFIG_USE_FI2C=y
# CONFIG_USE_TIMER is not set
-# CONFIG_USE_MIO is not set
+CONFIG_USE_MIO=y
+
+#
+# Hardware Mio Configuration
+#
+CONFIG_ENABLE_MIO=y
+# end of Hardware Mio Configuration
+
# CONFIG_USE_SDMMC is not set
# CONFIG_USE_PCIE is not set
# CONFIG_USE_WDT is not set
# CONFIG_USE_DMA is not set
# CONFIG_USE_NAND is not set
# CONFIG_USE_RTC is not set
-CONFIG_USE_SATA=y
-
-#
-# FSATA Configuration
-#
-CONFIG_ENABLE_FSATA=y
-# end of FSATA Configuration
-
+# CONFIG_USE_SATA is not set
# CONFIG_USE_USB is not set
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -84,9 +86,9 @@ CONFIG_USE_NEW_LIBC=y
#
# CONFIG_LOG_VERBOS is not set
# CONFIG_LOG_DEBUG is not set
-CONFIG_LOG_INFO=y
+# CONFIG_LOG_INFO is not set
# CONFIG_LOG_WARN is not set
-# CONFIG_LOG_ERROR is not set
+CONFIG_LOG_ERROR=y
# CONFIG_LOG_NONE is not set
CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y
CONFIG_INTERRUPT_ROLE_MASTER=y
@@ -114,6 +116,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -150,6 +161,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -171,12 +183,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -188,25 +194,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
-# end of Component Configuration
#
-# FreeRTOS Setting
+# Freertos I2c Drivers
#
-# CONFIG_USE_LWIP is not set
-CONFIG_USE_BACKTRACE=y
-CONFIG_USE_FATFS=y
+CONFIG_FREERTOS_USE_I2C=y
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+CONFIG_FREERTOS_USE_MIO=y
+# end of Freertos Mio Drivers
#
-# FATFS Configuration
+# Freertos Timer Drivers
#
-# CONFIG_SELECT_FATFS_RAM_DISK is not set
-# CONFIG_SELECT_FATFS_FSDMMC is not set
-# CONFIG_SELECT_FATFS_FSATA_PCIE is not set
-CONFIG_SELECT_FATFS_FSATA_CONTROLLER=y
-# CONFIG_SELECT_FATFS_USB is not set
-# end of FATFS Configuration
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
+# end of Component Configuration
+#
+# Third-Party Configuration
+#
+# CONFIG_USE_LWIP is not set
+CONFIG_USE_BACKTRACE=y
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -221,7 +234,30 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set
# end of Letter Shell Configuration
-CONFIG_USE_TLSF=y
+# CONFIG_USE_TLSF is not set
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/i2c/figs/E2000_1339.png b/example/peripheral/i2c/figs/E2000_1339.png
new file mode 100644
index 0000000000000000000000000000000000000000..9574b8a4d13dc3cb61450c81164f874aadbc3870
Binary files /dev/null and b/example/peripheral/i2c/figs/E2000_1339.png differ
diff --git a/example/peripheral/i2c/figs/E2000_rtc.png b/example/peripheral/i2c/figs/E2000_rtc.png
new file mode 100644
index 0000000000000000000000000000000000000000..971f299fbae9a8e505bfa9ca27b2044b5e2992db
Binary files /dev/null and b/example/peripheral/i2c/figs/E2000_rtc.png differ
diff --git a/example/peripheral/i2c/figs/board.png b/example/peripheral/i2c/figs/board.png
new file mode 100644
index 0000000000000000000000000000000000000000..3d385e2ef09f34933c34b4e29d387d110e293fd2
Binary files /dev/null and b/example/peripheral/i2c/figs/board.png differ
diff --git a/example/peripheral/i2c/figs/d2000_eeprom.png b/example/peripheral/i2c/figs/d2000_eeprom.png
new file mode 100644
index 0000000000000000000000000000000000000000..439e3c4548e0c05342b9111510f26ca3ec31d2a9
Binary files /dev/null and b/example/peripheral/i2c/figs/d2000_eeprom.png differ
diff --git a/example/peripheral/i2c/figs/d2000_master_slave.png b/example/peripheral/i2c/figs/d2000_master_slave.png
new file mode 100644
index 0000000000000000000000000000000000000000..7ab80b49f9e4d0ef8b22585ea714c418eb0bff7f
Binary files /dev/null and b/example/peripheral/i2c/figs/d2000_master_slave.png differ
diff --git a/example/peripheral/i2c/inc/i2c_example.h b/example/peripheral/i2c/inc/i2c_example.h
new file mode 100644
index 0000000000000000000000000000000000000000..6b48115a5c08276730296a050b34d68ef522480e
--- /dev/null
+++ b/example/peripheral/i2c/inc/i2c_example.h
@@ -0,0 +1,52 @@
+/*
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * All Rights Reserved.
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the Phytium Public License for more details.
+ *
+ *
+ * FilePath: i2c_example.h
+ * Date: 2022-07-18 14:41:23
+ * LastEditTime: 2022-07-18 14:41:23
+ * Description: This file is for i2c test example function declarations.
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 liushengming 2022/11/25 init commit
+ */
+#ifndef I2C_EXAMPLE_H
+#define I2C_EXAMPLE_H
+
+#include "fi2c_os.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/***************************** Include Files *********************************/
+
+/************************** Definitions *****************************/
+
+/************************** Variable Definitions *****************************/
+
+/***************** Macros (Inline Functions) Definitions *********************/
+
+/************************** Function Prototypes ******************************/
+/* i2c write and read test */
+BaseType_t FFreeRTOSI2cCreate(void);
+/* dump buffer of slave */
+void FFreeRTOSI2cSlaveDump(FFreeRTOSI2c *os_i2c_p);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
\ No newline at end of file
diff --git a/example/storage/sata_fatfs/main.c b/example/peripheral/i2c/main.c
similarity index 42%
rename from example/storage/sata_fatfs/main.c
rename to example/peripheral/i2c/main.c
index 83f73cdb813dcf5170dec50c3ac36a76fb93e455..4cc00aede3f570d1ea118d590525ec084b935ad5 100644
--- a/example/storage/sata_fatfs/main.c
+++ b/example/peripheral/i2c/main.c
@@ -1,47 +1,52 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: main.c
- * Date: 2022-06-17 08:17:59
- * LastEditTime: 2022-06-17 08:17:59
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
+ * Date: 2022-07-18 14:39:10
+ * LastEditTime: 2022-07-18 14:39:10
+ * Description: This file is for i2c main entry.
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 liushengming 2022/11/25 init commit
*/
+#include
#include "shell.h"
#include "shell_port.h"
-#include
-#include "sata_fatfs_example.h"
+#include "i2c_example.h"
int main(void)
{
BaseType_t ret;
- ret = FFreeRTOSSataFatfsCreate();
- if(ret != pdPASS)
+ ret = FFreeRTOSI2cCreate();
+ if (ret != pdPASS)
+ {
goto FAIL_EXIT;
+ }
- ret = LSUserShellTask() ;
- if(ret != pdPASS)
+ ret = LSUserShellTask();
+ if (ret != pdPASS)
+ {
goto FAIL_EXIT;
+ }
- vTaskStartScheduler(); /* 启动任务,开启调度 */
+ vTaskStartScheduler(); /* 启动任务,开启调度 */
while (1); /* 正常不会执行到这里 */
-
+
FAIL_EXIT:
- printf("failed 0x%x \r\n", ret);
+ printf("Failed,the ret value is 0x%x. \r\n", ret);
return 0;
-}
+}
\ No newline at end of file
diff --git a/example/storage/sata_fatfs/makefile b/example/peripheral/i2c/makefile
similarity index 89%
rename from example/storage/sata_fatfs/makefile
rename to example/peripheral/i2c/makefile
index c1f632e855a09d5f79e458e1c21f110a88cb40ba..d56227392212980c329dde7ebb09f8ec2d601317 100644
--- a/example/storage/sata_fatfs/makefile
+++ b/example/peripheral/i2c/makefile
@@ -23,9 +23,7 @@ include $(FREERTOS_SDK_ROOT)/make/build_freertos.mk
boot:
make -j
@cp ./$(CONFIG_TARGET_NAME).elf $(USR_BOOT_DIR)/$(BOOT_IMG_NAME).elf
-ifdef CONFIG_OUTPUT_BINARY
@cp ./$(CONFIG_TARGET_NAME).bin $(USR_BOOT_DIR)/$(BOOT_IMG_NAME).bin
-endif
- @ls $(USR_BOOT_DIR)/$(BOOT_IMG_NAME).* -l
+ @ls -l $(USR_BOOT_DIR)/$(BOOT_IMG_NAME).*
diff --git a/example/storage/sata_fatfs/sdkconfig b/example/peripheral/i2c/sdkconfig
similarity index 70%
rename from example/storage/sata_fatfs/sdkconfig
rename to example/peripheral/i2c/sdkconfig
index 6b410bdbcaaf0f4ae02fba874170bf9824a5f206..f08739ee59716f1b8fa02cb16c8c9b85352f17b2 100644
--- a/example/storage/sata_fatfs/sdkconfig
+++ b/example/peripheral/i2c/sdkconfig
@@ -53,27 +53,29 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_GPIO is not set
# CONFIG_USE_ETH is not set
# CONFIG_USE_CAN is not set
-# CONFIG_USE_I2C is not set
+CONFIG_USE_I2C=y
+CONFIG_USE_FI2C=y
# CONFIG_USE_TIMER is not set
-# CONFIG_USE_MIO is not set
+CONFIG_USE_MIO=y
+
+#
+# Hardware Mio Configuration
+#
+CONFIG_ENABLE_MIO=y
+# end of Hardware Mio Configuration
+
# CONFIG_USE_SDMMC is not set
# CONFIG_USE_PCIE is not set
# CONFIG_USE_WDT is not set
# CONFIG_USE_DMA is not set
# CONFIG_USE_NAND is not set
# CONFIG_USE_RTC is not set
-CONFIG_USE_SATA=y
-
-#
-# FSATA Configuration
-#
-CONFIG_ENABLE_FSATA=y
-# end of FSATA Configuration
-
+# CONFIG_USE_SATA is not set
# CONFIG_USE_USB is not set
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -84,9 +86,9 @@ CONFIG_USE_NEW_LIBC=y
#
# CONFIG_LOG_VERBOS is not set
# CONFIG_LOG_DEBUG is not set
-CONFIG_LOG_INFO=y
+# CONFIG_LOG_INFO is not set
# CONFIG_LOG_WARN is not set
-# CONFIG_LOG_ERROR is not set
+CONFIG_LOG_ERROR=y
# CONFIG_LOG_NONE is not set
CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y
CONFIG_INTERRUPT_ROLE_MASTER=y
@@ -114,6 +116,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -150,6 +161,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -171,12 +183,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -188,25 +194,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
-# end of Component Configuration
#
-# FreeRTOS Setting
+# Freertos I2c Drivers
#
-# CONFIG_USE_LWIP is not set
-CONFIG_USE_BACKTRACE=y
-CONFIG_USE_FATFS=y
+CONFIG_FREERTOS_USE_I2C=y
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+CONFIG_FREERTOS_USE_MIO=y
+# end of Freertos Mio Drivers
#
-# FATFS Configuration
+# Freertos Timer Drivers
#
-# CONFIG_SELECT_FATFS_RAM_DISK is not set
-# CONFIG_SELECT_FATFS_FSDMMC is not set
-# CONFIG_SELECT_FATFS_FSATA_PCIE is not set
-CONFIG_SELECT_FATFS_FSATA_CONTROLLER=y
-# CONFIG_SELECT_FATFS_USB is not set
-# end of FATFS Configuration
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
+# end of Component Configuration
+#
+# Third-Party Configuration
+#
+# CONFIG_USE_LWIP is not set
+CONFIG_USE_BACKTRACE=y
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -221,7 +234,30 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set
# end of Letter Shell Configuration
-CONFIG_USE_TLSF=y
+# CONFIG_USE_TLSF is not set
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/storage/sata_fatfs/sdkconfig.h b/example/peripheral/i2c/sdkconfig.h
similarity index 69%
rename from example/storage/sata_fatfs/sdkconfig.h
rename to example/peripheral/i2c/sdkconfig.h
index 08f529aa1b23b64b2d9b4ee98b6742b22003807b..d004b5c6702c512df7aa44ffd6d9f8637608380c 100644
--- a/example/storage/sata_fatfs/sdkconfig.h
+++ b/example/peripheral/i2c/sdkconfig.h
@@ -48,25 +48,27 @@
/* CONFIG_USE_GPIO is not set */
/* CONFIG_USE_ETH is not set */
/* CONFIG_USE_CAN is not set */
-/* CONFIG_USE_I2C is not set */
+#define CONFIG_USE_I2C
+#define CONFIG_USE_FI2C
/* CONFIG_USE_TIMER is not set */
-/* CONFIG_USE_MIO is not set */
+#define CONFIG_USE_MIO
+
+/* Hardware Mio Configuration */
+
+#define CONFIG_ENABLE_MIO
+/* end of Hardware Mio Configuration */
/* CONFIG_USE_SDMMC is not set */
/* CONFIG_USE_PCIE is not set */
/* CONFIG_USE_WDT is not set */
/* CONFIG_USE_DMA is not set */
/* CONFIG_USE_NAND is not set */
/* CONFIG_USE_RTC is not set */
-#define CONFIG_USE_SATA
-
-/* FSATA Configuration */
-
-#define CONFIG_ENABLE_FSATA
-/* end of FSATA Configuration */
+/* CONFIG_USE_SATA is not set */
/* CONFIG_USE_USB is not set */
/* CONFIG_USE_ADC is not set */
/* CONFIG_USE_PWM is not set */
/* CONFIG_USE_IPC is not set */
+/* CONFIG_USE_MEDIA is not set */
/* end of Components Configuration */
#define CONFIG_USE_NEW_LIBC
/* end of Standalone Setting */
@@ -75,9 +77,9 @@
/* CONFIG_LOG_VERBOS is not set */
/* CONFIG_LOG_DEBUG is not set */
-#define CONFIG_LOG_INFO
+/* CONFIG_LOG_INFO is not set */
/* CONFIG_LOG_WARN is not set */
-/* CONFIG_LOG_ERROR is not set */
+#define CONFIG_LOG_ERROR
/* CONFIG_LOG_NONE is not set */
#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG
#define CONFIG_INTERRUPT_ROLE_MASTER
@@ -103,6 +105,12 @@
/* Compiler Options */
+/* Cross-Compiler Setting */
+
+#define CONFIG_GCC_OPTIMIZE_LEVEL 0
+/* CONFIG_USE_EXT_COMPILER is not set */
+/* CONFIG_USE_KLIN_SYS is not set */
+/* end of Cross-Compiler Setting */
#define CONFIG_OUTPUT_BINARY
/* end of Compiler Options */
/* end of Building Option */
@@ -132,6 +140,7 @@
/* Freertos Eth Drivers */
/* CONFIG_FREERTOS_USE_XMAC is not set */
+/* CONFIG_FREERTOS_USE_GMAC is not set */
/* end of Freertos Eth Drivers */
/* Freertos Gpio Drivers */
@@ -150,11 +159,6 @@
/* CONFIG_FREERTOS_USE_FGDMA is not set */
/* end of Freertos DMA Drivers */
-/* Freertos MMC Drivers */
-
-/* CONFIG_FREERTOS_USE_FSDIO is not set */
-/* end of Freertos MMC Drivers */
-
/* Freertos Adc Drivers */
/* CONFIG_FREERTOS_USE_ADC is not set */
@@ -164,22 +168,28 @@
/* CONFIG_FREERTOS_USE_CAN is not set */
/* end of Freertos Can Drivers */
+
+/* Freertos I2c Drivers */
+
+#define CONFIG_FREERTOS_USE_I2C
+/* end of Freertos I2c Drivers */
+
+/* Freertos Mio Drivers */
+
+#define CONFIG_FREERTOS_USE_MIO
+/* end of Freertos Mio Drivers */
+
+/* Freertos Timer Drivers */
+
+/* CONFIG_FREERTOS_USE_TIMER is not set */
+/* end of Freertos Timer Drivers */
/* end of Component Configuration */
-/* FreeRTOS Setting */
+/* Third-Party Configuration */
/* CONFIG_USE_LWIP is not set */
#define CONFIG_USE_BACKTRACE
-#define CONFIG_USE_FATFS
-
-/* FATFS Configuration */
-
-/* CONFIG_SELECT_FATFS_RAM_DISK is not set */
-/* CONFIG_SELECT_FATFS_FSDMMC is not set */
-/* CONFIG_SELECT_FATFS_FSATA_PCIE is not set */
-#define CONFIG_SELECT_FATFS_FSATA_CONTROLLER
-/* CONFIG_SELECT_FATFS_USB is not set */
-/* end of FATFS Configuration */
+/* CONFIG_USE_FATFS_0_1_4 is not set */
/* CONFIG_USE_SFUD is not set */
/* CONFIG_USE_SPIFFS is not set */
/* CONFIG_USE_AMP is not set */
@@ -192,9 +202,31 @@
/* CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set */
/* CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set */
/* end of Letter Shell Configuration */
-#define CONFIG_USE_TLSF
+/* CONFIG_USE_TLSF is not set */
/* CONFIG_USE_SDMMC_CMD is not set */
/* CONFIG_USE_CHERRY_USB is not set */
-/* end of FreeRTOS Setting */
+/* end of Third-Party Configuration */
+
+/* Kernel Configuration */
+
+#define CONFIG_FREERTOS_OPTIMIZED_SCHEDULER
+#define CONFIG_FREERTOS_HZ 1000
+#define CONFIG_FREERTOS_MAX_PRIORITIES 32
+#define CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES 13
+#define CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES 11
+#define CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS 1
+#define CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE 1024
+#define CONFIG_FREERTOS_MAX_TASK_NAME_LEN 32
+#define CONFIG_FREERTOS_TIMER_TASK_PRIORITY 1
+#define CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH 2048
+#define CONFIG_FREERTOS_TIMER_QUEUE_LENGTH 10
+#define CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE 0
+#define CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS
+#define CONFIG_FREERTOS_USE_TRACE_FACILITY
+#define CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS
+/* CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set */
+#define CONFIG_FREERTOS_TOTAL_HEAP_SIZE 10240
+#define CONFIG_FREERTOS_TASK_FPU_SUPPORT 1
+/* end of Kernel Configuration */
#endif
diff --git a/example/peripheral/i2c/src/i2c_example.c b/example/peripheral/i2c/src/i2c_example.c
new file mode 100644
index 0000000000000000000000000000000000000000..7068b1d513cac720d1ca8023d2ae4880e094b8b7
--- /dev/null
+++ b/example/peripheral/i2c/src/i2c_example.c
@@ -0,0 +1,578 @@
+/*
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * All Rights Reserved.
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the Phytium Public License for more details.
+ *
+ *
+ * FilePath: i2c_example.c
+ * Date: 2022-11-10 11:35:23
+ * LastEditTime: 2022-11-10 11:35:24
+ * Description: This file is for i2c test example functions.
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 liushengming 2022/11/25 init commit
+ */
+#include
+#include "FreeRTOSConfig.h"
+#include "FreeRTOS.h"
+#include "task.h"
+#include "fi2c.h"
+#include "fi2c_hw.h"
+#include "fi2c_os.h"
+#include "timers.h"
+#include "fcpu_info.h"
+#include "i2c_example.h"
+#include "fparameters.h"
+#include "fpinctrl.h"
+#include "sdkconfig.h"
+#include "fdebug.h"
+#include "ftypes.h"
+#include "finterrupt.h"
+#if defined(CONFIG_TARGET_E2000)
+ #include "fiopad.h"
+ #define BCD_TO_BIN(bcd) (( ((((bcd)&0xf0)>>4)*10) + ((bcd)&0xf) ) & 0xff)
+ #define BIN_TO_BCD(bin) (( (((bin)/10)<<4) + ((bin)%10) ) & 0xff)
+#endif
+
+/* write and read task delay in milliseconds */
+#define TASK_DELAY_MS 5000UL
+
+/* slave address */
+/* Notice! Using addresses above 0x50 may cause the loopback test to fail */
+#define MASTER_SLAVE_ADDR 0x01
+#define EEPROM_ADDR 0x57
+#define RTC_ADDR 0x68
+
+#define DAT_LENGTH 15
+static char data_w[DAT_LENGTH] = {0};
+static char data_r0[DAT_LENGTH];
+static char data_r1[DAT_LENGTH];
+
+static xTaskHandle init_handle;
+static xTaskHandle read_handle;
+static xTaskHandle write_handle;
+static xTaskHandle slave_handle;
+
+static FFreeRTOSI2c *os_i2c_master;
+static FFreeRTOSI2c *os_i2c_slave;
+
+typedef struct data
+{
+ boolean first_write;/*IIC首次写入,在初始化时置位,用来指示当前传输的首个字节数据是用户需要读写的地址偏移*/
+ u32 buff_idx;/* PC 指向的地址偏移 */
+ u8 buff[IO_BUF_LEN];/*虚拟内存块*/
+} FI2cSlaveData;
+
+/* Slave mode for virtual eeprom memory ,size: IO_BUF_LEN in fi2c_os.h*/
+static FI2cSlaveData slave;
+
+/**
+ * @name: FFreeRTOSI2cSlaveDump
+ * @msg: dump buffer of slave
+ * @return {*}
+ * @param {FFreeRTOSI2c} *os_i2c_p
+ */
+void FFreeRTOSI2cSlaveDump(FFreeRTOSI2c *os_i2c_p)
+{
+ FASSERT(os_i2c_p);
+ FASSERT(os_i2c_p->wr_semaphore != NULL);
+ FI2cSlaveData *slave_p = &slave;
+ FtDumpHexByte(slave_p->buff, IO_BUF_LEN);
+}
+
+/**
+ * @name: FI2cSlaveCb
+ * @msg: 从机内存操作
+ * @return {*},无
+ * @param {void} *instance_p
+ * @param {void} *para
+ * @param {u32} evt
+ */
+void FI2cOsSlaveCb(void *instance_p, void *para, u32 evt)
+{
+ FI2cSlaveData *slave_p = &slave;
+ u8 *val = (u8 *)para;
+ /*
+ *Do not increment buffer_idx here,because we set maximum lenth is IO_BUF_LEN
+ */
+ if (slave_p->buff_idx >= IO_BUF_LEN)
+ {
+ slave_p->buff_idx = slave_p->buff_idx % IO_BUF_LEN;
+ }
+ switch (evt)
+ {
+ case FI2C_EVT_SLAVE_WRITE_RECEIVED:
+ if (slave_p->first_write)
+ {
+ slave_p->buff_idx = *val;
+ slave_p->first_write = FALSE;
+ }
+ else
+ {
+ slave_p->buff[slave_p->buff_idx++] = *val;
+ }
+
+ break;
+ case FI2C_EVT_SLAVE_READ_PROCESSED:
+ /* The previous byte made it to the bus, get next one */
+ slave_p->buff_idx++;
+ /* fallthrough */
+ break;
+ case FI2C_EVT_SLAVE_READ_REQUESTED:
+ *val = slave_p->buff[slave_p->buff_idx++];
+ break;
+ case FI2C_EVT_SLAVE_STOP:
+ case FI2C_EVT_SLAVE_WRITE_REQUESTED:
+ slave_p->first_write = TRUE;
+ break;
+ default:
+ break;
+ }
+
+ return;
+}
+
+/**
+ * @name: FI2cSlaveWriteReceived
+ * @msg: Slave收到主机发送的数据,需要存下
+ * @return {*} 无
+ * @param {void} *instance_p
+ * @param {void} *para
+ */
+void FI2cOsSlaveWriteReceived(void *instance_p, void *para)
+{
+ FI2cOsSlaveCb(instance_p, para, FI2C_EVT_SLAVE_WRITE_RECEIVED);
+}
+
+/**
+ * @name: FI2cSlaveReadProcessed
+ * @msg: 在Slave发送模式下,发送完数据的最后一个字节后,在规定时间内没有收到 Master 端的回应
+ * @return {*} 无
+ * @param {void} *instance_p
+ * @param {void} *para
+ */
+void FI2cOsSlaveReadProcessed(void *instance_p, void *para)
+{
+ FI2cOsSlaveCb(instance_p, para, FI2C_EVT_SLAVE_READ_PROCESSED);
+}
+
+/**
+ * @name: FI2cSlaveReadRequest
+ * @msg: slave收到主机读取内容的请求
+ * @return {*} 无
+ * @param {void} *instance_p
+ * @param {void} *para
+ */
+void FI2cOsSlaveReadRequest(void *instance_p, void *para)
+{
+ FI2cOsSlaveCb(instance_p, para, FI2C_EVT_SLAVE_READ_REQUESTED);
+}
+
+/**
+ * @name: FI2cSlaveStop
+ * @msg: I2C总线接口上是否产生了STOP。与控制器工作在Master模式还是 Slave 模式无关。
+ * @return {*}
+ * @param {void} *instance_p
+ * @param {void} *para
+ */
+void FI2cOsSlaveStop(void *instance_p, void *para)
+{
+ FI2cOsSlaveCb(instance_p, para, FI2C_EVT_SLAVE_STOP);
+}
+
+/**
+ * @name: FI2cSlaveWriteRequest
+ * @msg: slave收到主机发送的写请求
+ * @return {*}
+ * @param {void} *instance_p
+ * @param {void} *para
+ */
+void FI2cOsSlaveWriteRequest(void *instance_p, void *para)
+{
+ FI2cOsSlaveCb(instance_p, para, FI2C_EVT_SLAVE_WRITE_REQUESTED);
+}
+
+/*
+ * @name: FI2cIntrTxDone
+ * @msg:user transmit FIFO done interrupt callback.
+ * @param {void} *instance_p
+ */
+static void FI2cIntrTxDonecallback(void *instance, void *param)
+{
+ BaseType_t x_result = pdFALSE;
+ BaseType_t xhigher_priority_task_woken = pdFALSE;
+
+ FI2c *instance_p = (FI2c *)instance;
+ x_result = xEventGroupSetBitsFromISR(os_i2c_master[instance_p->config.instance_id].trx_event, RTOS_I2C_WRITE_DONE, &xhigher_priority_task_woken);
+ if (x_result != pdFAIL)
+ {
+ portYIELD_FROM_ISR(xhigher_priority_task_woken);
+ }
+}
+
+/*
+ * @name: FI2cIntrRxDonecallback
+ * @msg:user receive fifo level done interrupt callback.
+ * @param {void} *instance_p
+ */
+static void FI2cIntrRxDonecallback(void *instance, void *param)
+{
+ BaseType_t x_result = pdFALSE;
+ BaseType_t xhigher_priority_task_woken = pdFALSE;
+
+ FI2c *instance_p = (FI2c *)instance;
+ x_result = xEventGroupSetBitsFromISR(os_i2c_master[instance_p->config.instance_id].trx_event, RTOS_I2C_READ_DONE, &xhigher_priority_task_woken);
+ if (x_result != pdFAIL)
+ {
+ portYIELD_FROM_ISR(xhigher_priority_task_woken);
+ }
+}
+
+/*
+ * @name: FI2cIntrTxAbrtcallback
+ * @msg:user transmit abort interrupt callback.
+ * @param {void} *instance_p
+ */
+static void FI2cIntrTxAbrtcallback(void *instance, void *param)
+{
+ BaseType_t x_result = pdFALSE;
+ BaseType_t xhigher_priority_task_woken = pdFALSE;
+
+ FI2c *instance_p = (FI2c *)instance;
+ x_result = xEventGroupSetBitsFromISR(os_i2c_master[instance_p->config.instance_id].trx_event, RTOS_I2C_TRANS_ABORTED, &xhigher_priority_task_woken);
+ if (x_result != pdFAIL)
+ {
+ portYIELD_FROM_ISR(xhigher_priority_task_woken);
+ }
+}
+
+
+static void I2cSlaveTask(void *pvParameters)
+{
+ const char *pcTaskName = "\r\n*****I2cSlaveTask is running...\r\n";
+ const TickType_t xDelay = pdMS_TO_TICKS(TASK_DELAY_MS);
+ vTaskDelay(xDelay);
+ FError ret = FREERTOS_I2C_SUCCESS;
+
+ /* The FFreeRTOSI2c to use is passed in via the parameter.
+ Cast this to a FFreeRTOSI2c pointer. */
+ FFreeRTOSI2c *os_i2c_write_p = (FFreeRTOSI2c *) pvParameters;
+
+ while (1)
+ {
+ vTaskDelay(xDelay);
+ vPrintf(pcTaskName);
+ /* 获取到信号,打印内存块 */
+ FFreeRTOSI2cSlaveDump(os_i2c_write_p);
+ }
+}
+
+static void I2cReadTask(void *pvParameters)
+{
+ const TickType_t xDelay = pdMS_TO_TICKS(TASK_DELAY_MS);
+ vTaskDelay(xDelay);
+ const char *pcReadTaskName = "\r\n*****I2cReadTask is running...\r\n";
+ vPrintf(pcReadTaskName);
+ FError ret = FREERTOS_I2C_SUCCESS;
+
+ /* Master mode for send or receive data */
+ FFreeRTOSI2cMessage message;
+
+ /* The FFreeRTOSI2c to use is passed in via the parameter.
+ Cast this to a FFreeRTOSI2c pointer. */
+ FFreeRTOSI2c *os_i2c_read_p = (FFreeRTOSI2c *) pvParameters;
+
+ message.slave_addr = os_i2c_read_p->i2c_device.config.slave_addr;
+#if defined(CONFIG_TARGET_D2000) || defined(CONFIG_TARGET_F2000_4)
+ /*8位地址*/
+ message.mem_byte_len = 1;
+ message.mem_addr = 0x1;/* 地址偏移0x1的位置poll方式读取数据 */
+ message.buf_length = DAT_LENGTH;
+ message.buf = data_r0;
+ message.mode = FI2C_READ_DATA_POLL;
+
+ ret = FFreeRTOSI2cTransfer(os_i2c_read_p, &message);
+ if (ret != FREERTOS_I2C_SUCCESS)
+ {
+ vPrintf("FFreeRTOSI2cTransfer read poll task error,i2c id:%d.\r\n", os_i2c_read_p->i2c_device.config.instance_id);
+ }
+ message.mem_addr = 0x31;/* 地址偏移0x35的位置poll方式读取数据 */
+ message.buf = data_r1;
+ message.buf_length = DAT_LENGTH;
+ ret = FFreeRTOSI2cTransfer(os_i2c_read_p, &message);
+ if (ret != FREERTOS_I2C_SUCCESS)
+ {
+ vPrintf("FFreeRTOSI2cTransfer read poll task error,i2c id:%d.\r\n", os_i2c_read_p->i2c_device.config.instance_id);
+ }
+ vPrintf("data_r0:\r\n");
+ FtDumpHexByte(data_r0, DAT_LENGTH);
+ vPrintf("data_r1:\r\n");
+ FtDumpHexByte(data_r1, DAT_LENGTH);
+ vPrintf("\r\nI2cReadTask is over.\r\n");
+#endif
+#if defined(CONFIG_TARGET_E2000)
+ message.mem_byte_len = 1;
+ message.mem_addr = 0x0;/* 地址偏移0x0的位置poll方式读取数据 */
+ message.buf_length = 7;
+ message.buf = data_r0;
+ message.mode = FI2C_READ_DATA_POLL;
+
+ ret = FFreeRTOSI2cTransfer(os_i2c_read_p, &message);
+ if (ret != FREERTOS_I2C_SUCCESS)
+ {
+ vPrintf("FFreeRTOSI2cTransfer read poll task error,i2c id:%d.\r\n", os_i2c_read_p->i2c_device.config.instance_id);
+ }
+ u16 year;
+ if (data_r0[5] & 0x80)
+ {
+ year = BCD_TO_BIN(data_r0[6]) + 2000;
+ }
+ else
+ {
+ year = BCD_TO_BIN(data_r0[6]) + 1900;
+ }
+ printf("Date_time: %d-%d-%d week:%d time:%d:%d:%d\r\n",
+ year,
+ BCD_TO_BIN(data_r0[5] & 0x1F),
+ BCD_TO_BIN(data_r0[4] & 0x3F),
+ BCD_TO_BIN((data_r0[3] - 1) & 0x7),
+ BCD_TO_BIN(data_r0[2] & 0x3F),
+ BCD_TO_BIN(data_r0[1] & 0x7F),
+ BCD_TO_BIN(data_r0[0] & 0x7F)
+ );
+ vTaskDelay(xDelay);
+#endif
+ FFreeRTOSI2cDeinit(os_i2c_read_p);/*写入再读取完成后去初始化FFreeRTOSI2c主机设置*/
+ printf("I2cReadTask is over.\r\n ");
+ vTaskDelete(NULL);
+}
+
+static void I2cWriteTask(void *pvParameters)
+{
+ const TickType_t xDelay = pdMS_TO_TICKS(TASK_DELAY_MS);
+ vTaskDelay(xDelay);
+ const char *pcWriteTaskName = "\r\n*****I2cWriteTask is running...\r\n";
+ vPrintf(pcWriteTaskName);
+ FError ret = FREERTOS_I2C_SUCCESS;
+ u8 i;
+ /* Master mode for send or receive data */
+ FFreeRTOSI2cMessage message;
+
+ /* The FFreeRTOSI2c to use is passed in via the parameter.
+ Cast this to a FFreeRTOSI2c pointer. */
+ FFreeRTOSI2c *os_i2c_write_p = (FFreeRTOSI2c *) pvParameters;
+
+ message.slave_addr = os_i2c_write_p->i2c_device.config.slave_addr;
+#if defined(CONFIG_TARGET_D2000) || defined(CONFIG_TARGET_F2000_4)
+ for (i = 0; i < DAT_LENGTH; i++)
+ {
+ data_w[i] = i ;
+ }
+ /*8位地址*/
+ message.mem_byte_len = 1;
+ message.buf = data_w;
+ message.buf_length = DAT_LENGTH;
+ message.mem_addr = 0x01;/* 地址偏移0x1的位置poll方式写入数据 */
+ message.mode = FI2C_WRITE_DATA_POLL;
+ ret = FFreeRTOSI2cTransfer(os_i2c_write_p, &message);
+ if (ret != FREERTOS_I2C_SUCCESS)
+ {
+ vPrintf("FFreeRTOSI2cTransfer write poll task error,i2c id:%d.\r\n", os_i2c_write_p->i2c_device.config.instance_id);
+ }
+
+ message.mem_addr = 0x31;/* 地址偏移0x35的位置poll方式写入数据 */
+ ret = FFreeRTOSI2cTransfer(os_i2c_write_p, &message);
+ if (ret != FREERTOS_I2C_SUCCESS)
+ {
+ vPrintf("FFreeRTOSI2cTransfer write poll task error,i2c id:%d.\r\n", os_i2c_write_p->i2c_device.config.instance_id);
+ }
+#endif
+#if defined(CONFIG_TARGET_E2000)
+ /*RTC*/
+ data_w[0] = BIN_TO_BCD(20) ;/*second*/
+ data_w[1] = BIN_TO_BCD(20) ;/*minute*/
+ data_w[2] = BIN_TO_BCD(20) ;/*hour*/
+ data_w[3] = BIN_TO_BCD(2 + 1) ; /*weekday2 + 1*/
+ data_w[4] = BIN_TO_BCD(15) ;/*day_of_month*/
+
+ data_w[5] = (BIN_TO_BCD(11) | 0x80); /* 2000 -> (* | 0x80) , 1900 -> (* | 0x0) */
+ data_w[6] = BIN_TO_BCD(2022 % 100) ;
+ /*8位地址*/
+ message.mem_byte_len = 1;
+ message.buf = data_w;
+ message.buf_length = 7;
+ message.mem_addr = 0x0;/* 地址偏移0x0的位置poll方式写入数据 */
+ message.mode = FI2C_WRITE_DATA_POLL;
+ ret = FFreeRTOSI2cTransfer(os_i2c_write_p, &message);
+ if (ret != FREERTOS_I2C_SUCCESS)
+ {
+ vPrintf("FFreeRTOSI2cTransfer write poll task error,i2c id:%d.\r\n", os_i2c_write_p->i2c_device.config.instance_id);
+ }
+#endif
+ printf("I2cWriteTask is over.\r\n ");
+ vTaskDelete(NULL);
+}
+
+static FError FFreeRTOSI2cInitSet(uint32_t id, uint32_t work_mode, uint32_t slave_address)
+{
+ FError err;
+ /* init i2c controller */
+ if (work_mode == FI2C_MASTER) /* 主机初始化默认使用poll模式 */
+ {
+ os_i2c_master = FFreeRTOSI2cInit(id, work_mode, slave_address, FI2C_SPEED_STANDARD_RATE);
+ /* register intr callback */
+ InterruptInstall(os_i2c_master->i2c_device.config.irq_num, FI2cMasterIntrHandler, &os_i2c_master->i2c_device, "fi2cmaster");
+ /* register intr handler func */
+ FI2cMasterRegisterIntrHandler(&os_i2c_master->i2c_device, FI2C_EVT_MASTER_TRANS_ABORTED, FI2cIntrTxAbrtcallback);
+ FI2cMasterRegisterIntrHandler(&os_i2c_master->i2c_device, FI2C_EVT_MASTER_READ_DONE, FI2cIntrRxDonecallback);
+ FI2cMasterRegisterIntrHandler(&os_i2c_master->i2c_device, FI2C_EVT_MASTER_WRITE_DONE, FI2cIntrTxDonecallback);
+ }
+ else if (work_mode == FI2C_SLAVE)
+ {
+ os_i2c_slave = FFreeRTOSI2cInit(id, work_mode, slave_address, FI2C_SPEED_STANDARD_RATE);
+ /* register intr callback */
+ InterruptInstall(os_i2c_slave->i2c_device.config.irq_num, FI2cSlaveIntrHandler, &os_i2c_slave->i2c_device, "fi2cslave");
+ /* slave mode intr set,must set before master data come in. */
+ err = FI2cSlaveSetupIntr(&os_i2c_slave->i2c_device);
+ if (err != FREERTOS_I2C_SUCCESS)
+ {
+ vPrintf("I2c slave intr init failed.\r\n");
+ return FREERTOS_I2C_INVAL_STATE_ERROR;
+ }
+ FI2cSlaveData *slave_p = &slave;
+ memset(slave_p, 0, sizeof(*slave_p));
+ slave_p->first_write = TRUE;
+ FI2cSlaveRegisterIntrHandler(&os_i2c_slave->i2c_device, FI2C_EVT_SLAVE_WRITE_RECEIVED, FI2cOsSlaveWriteReceived);
+ FI2cSlaveRegisterIntrHandler(&os_i2c_slave->i2c_device, FI2C_EVT_SLAVE_READ_PROCESSED, FI2cOsSlaveReadProcessed);
+ FI2cSlaveRegisterIntrHandler(&os_i2c_slave->i2c_device, FI2C_EVT_SLAVE_READ_REQUESTED, FI2cOsSlaveReadRequest);
+ FI2cSlaveRegisterIntrHandler(&os_i2c_slave->i2c_device, FI2C_EVT_SLAVE_STOP, FI2cOsSlaveStop);
+ FI2cSlaveRegisterIntrHandler(&os_i2c_slave->i2c_device, FI2C_EVT_SLAVE_WRITE_REQUESTED, FI2cOsSlaveWriteRequest);
+ }
+ return FREERTOS_I2C_SUCCESS;
+}
+
+static void I2cInitTask(void *pvParameters)
+{
+ FError err;
+ BaseType_t xReturn = pdPASS;
+
+ taskENTER_CRITICAL(); //进入临界区
+#if defined(CONFIG_TARGET_E2000)
+ err = FFreeRTOSI2cInitSet(FMIO9_ID, FI2C_MASTER, RTC_ADDR);
+ if (err != FREERTOS_I2C_SUCCESS)
+ {
+ vPrintf("I2c FFreeRTOSI2cInitSet failed.\r\n");
+ return;
+ }
+
+ xReturn = xTaskCreate((TaskFunction_t)I2cReadTask, /* 任务入口函数 */
+ (const char *)"I2cReadTask",/* 任务名字 */
+ (uint16_t)1024, /* 任务栈大小 */
+ (void *)os_i2c_master,/* 任务入口函数参数 */
+ (UBaseType_t)configMAX_PRIORITIES - 2, /* 任务的优先级 */
+ (TaskHandle_t *)&read_handle); /* 任务控制 */
+ FASSERT_MSG(xReturn == pdPASS, "I2cReadTask creation is failed.");
+
+ xReturn = xTaskCreate((TaskFunction_t)I2cWriteTask, /* 任务入口函数 */
+ (const char *)"I2cWriteTask",/* 任务名字 */
+ (uint16_t)1024, /* 任务栈大小 */
+ (void *)os_i2c_master,/* 任务入口函数参数 */
+ (UBaseType_t)configMAX_PRIORITIES - 1, /* 任务的优先级 */
+ (TaskHandle_t *)&write_handle); /* 任务控制 */
+ FASSERT_MSG(xReturn == pdPASS, "I2cWriteTask creation is failed.");
+#endif
+#if defined(CONFIG_TARGET_D2000)
+ err = FFreeRTOSI2cInitSet(FI2C0_ID, FI2C_MASTER, MASTER_SLAVE_ADDR);
+ if (err != FREERTOS_I2C_SUCCESS)
+ {
+ vPrintf("I2c FFreeRTOSI2cInitSet failed.\r\n");
+ return;
+ }
+
+ err = FFreeRTOSI2cInitSet(FI2C2_ID, FI2C_SLAVE, MASTER_SLAVE_ADDR);
+ if (err != FREERTOS_I2C_SUCCESS)
+ {
+ vPrintf("I2c FFreeRTOSI2cInitSet failed.\r\n");
+ return;
+ }
+
+ xReturn = xTaskCreate((TaskFunction_t)I2cReadTask, /* 任务入口函数 */
+ (const char *)"I2cReadTask",/* 任务名字 */
+ (uint16_t)1024, /* 任务栈大小 */
+ (void *)os_i2c_master,/* 任务入口函数参数 */
+ (UBaseType_t)configMAX_PRIORITIES - 3, /* 任务的优先级 */
+ (TaskHandle_t *)&read_handle); /* 任务控制 */
+ FASSERT_MSG(xReturn == pdPASS, "I2cReadTask creation is failed.");
+
+ xReturn = xTaskCreate((TaskFunction_t)I2cWriteTask, /* 任务入口函数 */
+ (const char *)"I2cWriteTask",/* 任务名字 */
+ (uint16_t)1024, /* 任务栈大小 */
+ (void *)os_i2c_master,/* 任务入口函数参数 */
+ (UBaseType_t)configMAX_PRIORITIES - 1, /* 任务的优先级 */
+ (TaskHandle_t *)&write_handle); /* 任务控制 */
+ FASSERT_MSG(xReturn == pdPASS, "I2cWriteTask creation is failed.");
+
+ xReturn = xTaskCreate((TaskFunction_t)I2cSlaveTask, /* 任务入口函数 */
+ (const char *)"I2cSlaveTask",/* 任务名字 */
+ (uint16_t)1024, /* 任务栈大小 */
+ (void *)os_i2c_slave,/* 任务入口函数参数 */
+ (UBaseType_t)configMAX_PRIORITIES - 2, /* 任务的优先级 */
+ (TaskHandle_t *)&slave_handle); /* 任务控制 */
+ FASSERT_MSG(xReturn == pdPASS, "I2cSlaveTask creation is failed.");
+#endif
+#if defined(CONFIG_TARGET_F2000_4)
+ err = FFreeRTOSI2cInitSet(FI2C0_ID, FI2C_MASTER, EEPROM_ADDR);
+ if (err != FREERTOS_I2C_SUCCESS)
+ {
+ vPrintf("I2c FFreeRTOSI2cInitSet failed.\r\n");
+ return;
+ }
+ xReturn = xTaskCreate((TaskFunction_t)I2cReadTask, /* 任务入口函数 */
+ (const char *)"I2cReadTask",/* 任务名字 */
+ (uint16_t)1024, /* 任务栈大小 */
+ (void *)os_i2c_master,/* 任务入口函数参数 */
+ (UBaseType_t)configMAX_PRIORITIES - 2, /* 任务的优先级 */
+ (TaskHandle_t *)&read_handle); /* 任务控制 */
+ FASSERT_MSG(xReturn == pdPASS, "I2cReadTask creation is failed.");
+
+ xReturn = xTaskCreate((TaskFunction_t)I2cWriteTask, /* 任务入口函数 */
+ (const char *)"I2cWriteTask",/* 任务名字 */
+ (uint16_t)1024, /* 任务栈大小 */
+ (void *)os_i2c_master,/* 任务入口函数参数 */
+ (UBaseType_t)configMAX_PRIORITIES - 1, /* 任务的优先级 */
+ (TaskHandle_t *)&write_handle); /* 任务控制 */
+ FASSERT_MSG(xReturn == pdPASS, "I2cWriteTask creation is failed.");
+#endif
+ taskEXIT_CRITICAL(); //退出临界区
+ vTaskDelete(NULL);
+}
+
+BaseType_t FFreeRTOSI2cCreate(void)
+{
+ BaseType_t xReturn = pdPASS;/* 定义一个创建信息返回值,默认为 pdPASS */
+ BaseType_t xTimerStarted = pdPASS;
+
+ taskENTER_CRITICAL(); //进入临界区
+
+ xReturn = xTaskCreate((TaskFunction_t)I2cInitTask, /* 任务入口函数 */
+ (const char *)"I2cInitTask",/* 任务名字 */
+ (uint16_t)1024, /* 任务栈大小 */
+ (void *)NULL,/* 任务入口函数参数 */
+ (UBaseType_t)configMAX_PRIORITIES, /* 任务的优先级 */
+ (TaskHandle_t *)&init_handle); /* 任务控制 */
+ FASSERT_MSG(xReturn == pdPASS, "I2cInitTask creation is failed.");
+
+ taskEXIT_CRITICAL(); //退出临界区
+ printf("I2c task is created successfully.\r\n");
+ return xReturn;
+}
+
diff --git a/example/peripheral/pwm/configs/e2000d_aarch32_eg_configs b/example/peripheral/pwm/configs/e2000d_aarch32_eg_configs
index 9bd36081bc7bc7424040f2e80f5b792aea113732..b355832239afbc0ca776f719405bd0501acd0867 100644
--- a/example/peripheral/pwm/configs/e2000d_aarch32_eg_configs
+++ b/example/peripheral/pwm/configs/e2000d_aarch32_eg_configs
@@ -74,6 +74,7 @@ CONFIG_USE_FPWM=y
# end of FPWM Configuration
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -118,6 +119,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -154,6 +164,7 @@ CONFIG_FREERTOS_USE_PWM=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -175,12 +186,6 @@ CONFIG_FREERTOS_USE_PWM=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -192,14 +197,32 @@ CONFIG_FREERTOS_USE_PWM=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -217,4 +240,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/pwm/configs/e2000d_aarch64_eg_configs b/example/peripheral/pwm/configs/e2000d_aarch64_eg_configs
index e81dc2b5ad8bfd6d0c3d528a5000d73b8903fbba..9641b08c154fd87675f5a1d89069262aa3491cd9 100644
--- a/example/peripheral/pwm/configs/e2000d_aarch64_eg_configs
+++ b/example/peripheral/pwm/configs/e2000d_aarch64_eg_configs
@@ -74,6 +74,7 @@ CONFIG_USE_FPWM=y
# end of FPWM Configuration
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -114,6 +115,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -150,6 +160,7 @@ CONFIG_FREERTOS_USE_PWM=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -171,12 +182,6 @@ CONFIG_FREERTOS_USE_PWM=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -188,14 +193,32 @@ CONFIG_FREERTOS_USE_PWM=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -213,4 +236,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/pwm/configs/e2000q_aarch32_eg_configs b/example/peripheral/pwm/configs/e2000q_aarch32_eg_configs
index 9f79adf5c1d22e689112f7d650fede1ad2e875db..08a1967fa45bf6dc2044bb0978bac7c9127997ba 100644
--- a/example/peripheral/pwm/configs/e2000q_aarch32_eg_configs
+++ b/example/peripheral/pwm/configs/e2000q_aarch32_eg_configs
@@ -74,6 +74,7 @@ CONFIG_USE_FPWM=y
# end of FPWM Configuration
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -118,6 +119,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -154,6 +164,7 @@ CONFIG_FREERTOS_USE_PWM=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -175,12 +186,6 @@ CONFIG_FREERTOS_USE_PWM=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -192,14 +197,32 @@ CONFIG_FREERTOS_USE_PWM=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -217,4 +240,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/pwm/configs/e2000q_aarch64_eg_configs b/example/peripheral/pwm/configs/e2000q_aarch64_eg_configs
index ef77db983eb4e8267b1349ee889b729874db6990..fc1797de12635fd867cd15ff7d7f841fecba2ae9 100644
--- a/example/peripheral/pwm/configs/e2000q_aarch64_eg_configs
+++ b/example/peripheral/pwm/configs/e2000q_aarch64_eg_configs
@@ -74,6 +74,7 @@ CONFIG_USE_FPWM=y
# end of FPWM Configuration
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -114,6 +115,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -150,6 +160,7 @@ CONFIG_FREERTOS_USE_PWM=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -171,12 +182,6 @@ CONFIG_FREERTOS_USE_PWM=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -188,14 +193,32 @@ CONFIG_FREERTOS_USE_PWM=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -213,4 +236,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/pwm/inc/pwm_example.h b/example/peripheral/pwm/inc/pwm_example.h
index 60118a2c1e48b65a4f9bdbdceeceaeb35d434ca0..c09de8b0c44998d9c88dfe3283c1adda5c07eb17 100644
--- a/example/peripheral/pwm/inc/pwm_example.h
+++ b/example/peripheral/pwm/inc/pwm_example.h
@@ -1,30 +1,41 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: pwm_example.h
* Date: 2022-08-16 14:55:40
* LastEditTime: 2022-08-19 11:42:40
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
+ * Description: This file is for pwm test example function declarations.
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2022/8/24 first release
*/
#ifndef PWM_EXAMPLE_H
#define PWM_EXAMPLE_H
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
/* pwm test */
BaseType_t FFreeRTOSPwmCreate(u32 id);
+
+#ifdef __cplusplus
+}
+#endif
+
#endif // !
\ No newline at end of file
diff --git a/example/peripheral/pwm/main.c b/example/peripheral/pwm/main.c
index bed6f16f96a8ce9b80617edef85368d564871f3e..85c4049cde0d143f6762fe492d12166052a20d55 100644
--- a/example/peripheral/pwm/main.c
+++ b/example/peripheral/pwm/main.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: main.c
* Date: 2022-06-17 08:17:59
* LastEditTime: 2022-06-17 08:17:59
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
+ * Description: This file is for pwm main entry.
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2022/8/24 first release
*/
#include "shell.h"
@@ -31,17 +32,21 @@ int main(void)
BaseType_t ret;
/* test pwm module 7 */
ret = FFreeRTOSPwmCreate(7);
- if(ret != pdPASS)
+ if (ret != pdPASS)
+ {
goto FAIL_EXIT;
+ }
ret = LSUserShellTask() ;
- if(ret != pdPASS)
+ if (ret != pdPASS)
+ {
goto FAIL_EXIT;
+ }
- vTaskStartScheduler(); /* 启动任务,开启调度 */
+ vTaskStartScheduler(); /* 启动任务,开启调度 */
while (1); /* 正常不会执行到这里 */
-
+
FAIL_EXIT:
- printf("failed 0x%x \r\n", ret);
+ printf("Failed,the ret value is 0x%x. \r\n", ret);
return 0;
}
diff --git a/example/peripheral/pwm/sdkconfig b/example/peripheral/pwm/sdkconfig
index ef77db983eb4e8267b1349ee889b729874db6990..fc1797de12635fd867cd15ff7d7f841fecba2ae9 100644
--- a/example/peripheral/pwm/sdkconfig
+++ b/example/peripheral/pwm/sdkconfig
@@ -74,6 +74,7 @@ CONFIG_USE_FPWM=y
# end of FPWM Configuration
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -114,6 +115,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -150,6 +160,7 @@ CONFIG_FREERTOS_USE_PWM=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -171,12 +182,6 @@ CONFIG_FREERTOS_USE_PWM=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -188,14 +193,32 @@ CONFIG_FREERTOS_USE_PWM=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -213,4 +236,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/pwm/sdkconfig.h b/example/peripheral/pwm/sdkconfig.h
index 8aeb473bcd156fa5ccbea02bf6ad56b71f807958..c1455ed2a87f7c1d3ea43d7c7aafd84afbdd265f 100644
--- a/example/peripheral/pwm/sdkconfig.h
+++ b/example/peripheral/pwm/sdkconfig.h
@@ -67,6 +67,7 @@
#define CONFIG_USE_FPWM
/* end of FPWM Configuration */
/* CONFIG_USE_IPC is not set */
+/* CONFIG_USE_MEDIA is not set */
/* end of Components Configuration */
#define CONFIG_USE_NEW_LIBC
/* end of Standalone Setting */
@@ -103,6 +104,12 @@
/* Compiler Options */
+/* Cross-Compiler Setting */
+
+#define CONFIG_GCC_OPTIMIZE_LEVEL 0
+/* CONFIG_USE_EXT_COMPILER is not set */
+/* CONFIG_USE_KLIN_SYS is not set */
+/* end of Cross-Compiler Setting */
#define CONFIG_OUTPUT_BINARY
/* end of Compiler Options */
/* end of Building Option */
@@ -132,6 +139,7 @@
/* Freertos Eth Drivers */
/* CONFIG_FREERTOS_USE_XMAC is not set */
+/* CONFIG_FREERTOS_USE_GMAC is not set */
/* end of Freertos Eth Drivers */
/* Freertos Gpio Drivers */
@@ -150,11 +158,6 @@
/* CONFIG_FREERTOS_USE_FGDMA is not set */
/* end of Freertos DMA Drivers */
-/* Freertos MMC Drivers */
-
-/* CONFIG_FREERTOS_USE_FSDIO is not set */
-/* end of Freertos MMC Drivers */
-
/* Freertos Adc Drivers */
/* CONFIG_FREERTOS_USE_ADC is not set */
@@ -164,13 +167,28 @@
/* CONFIG_FREERTOS_USE_CAN is not set */
/* end of Freertos Can Drivers */
+
+/* Freertos I2c Drivers */
+
+/* CONFIG_FREERTOS_USE_I2C is not set */
+/* end of Freertos I2c Drivers */
+
+/* Freertos Mio Drivers */
+
+/* CONFIG_FREERTOS_USE_MIO is not set */
+/* end of Freertos Mio Drivers */
+
+/* Freertos Timer Drivers */
+
+/* CONFIG_FREERTOS_USE_TIMER is not set */
+/* end of Freertos Timer Drivers */
/* end of Component Configuration */
-/* FreeRTOS Setting */
+/* Third-Party Configuration */
/* CONFIG_USE_LWIP is not set */
#define CONFIG_USE_BACKTRACE
-/* CONFIG_USE_FATFS is not set */
+/* CONFIG_USE_FATFS_0_1_4 is not set */
/* CONFIG_USE_SFUD is not set */
/* CONFIG_USE_SPIFFS is not set */
/* CONFIG_USE_AMP is not set */
@@ -186,6 +204,28 @@
#define CONFIG_USE_TLSF
/* CONFIG_USE_SDMMC_CMD is not set */
/* CONFIG_USE_CHERRY_USB is not set */
-/* end of FreeRTOS Setting */
+/* end of Third-Party Configuration */
+
+/* Kernel Configuration */
+
+#define CONFIG_FREERTOS_OPTIMIZED_SCHEDULER
+#define CONFIG_FREERTOS_HZ 1000
+#define CONFIG_FREERTOS_MAX_PRIORITIES 32
+#define CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES 13
+#define CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES 11
+#define CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS 1
+#define CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE 1024
+#define CONFIG_FREERTOS_MAX_TASK_NAME_LEN 32
+#define CONFIG_FREERTOS_TIMER_TASK_PRIORITY 1
+#define CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH 2048
+#define CONFIG_FREERTOS_TIMER_QUEUE_LENGTH 10
+#define CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE 0
+#define CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS
+#define CONFIG_FREERTOS_USE_TRACE_FACILITY
+#define CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS
+/* CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set */
+#define CONFIG_FREERTOS_TOTAL_HEAP_SIZE 10240
+#define CONFIG_FREERTOS_TASK_FPU_SUPPORT 1
+/* end of Kernel Configuration */
#endif
diff --git a/example/peripheral/pwm/src/pwm_example.c b/example/peripheral/pwm/src/pwm_example.c
index 498847454c19832d18e95481363ad270b0caf6e5..c79bff90169a3a882983537be03088c805d9d462 100644
--- a/example/peripheral/pwm/src/pwm_example.c
+++ b/example/peripheral/pwm/src/pwm_example.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: pwm_example.c
* Date: 2022-07-11 11:32:48
* LastEditTime: 2022-07-11 11:32:48
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
+ * Description: This file is for pwm test example functions.
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2022/8/24 first release
*/
#include
#include "FreeRTOSConfig.h"
@@ -32,20 +33,20 @@
#include "pwm_example.h"
/* The periods assigned to the one-shot timers. */
-#define ONE_SHOT_TIMER_PERIOD ( pdMS_TO_TICKS( 300000UL ) )
+#define ONE_SHOT_TIMER_PERIOD ( pdMS_TO_TICKS( 300000UL ) )
/* pwm pulse change period */
-#define PWM_CHANGE_PERIOD ( pdMS_TO_TICKS( 2000UL ))
+#define PWM_CHANGE_PERIOD ( pdMS_TO_TICKS( 2000UL ))
/* pwm pulse amplitude of periodic variation */
-#define PWM_PULSE_CHANGE 1000
+#define PWM_PULSE_CHANGE 1000
/* pwm channel use, 0/1 */
-#define PWM_CHANNEL_USE FPWM_CHANNEL_0
+#define PWM_CHANNEL_USE FPWM_CHANNEL_0
/* pwm primary config */
-#define PWM_DIV 500
-#define PWM_PERIOD 10000
-#define PWM_PULSE 2000
+#define PWM_DIV 500
+#define PWM_PERIOD 10000
+#define PWM_PULSE 2000
/* test task number */
#define TEST_TASK_NUM 1
@@ -60,44 +61,44 @@ static void FFreeRTOSPwmDelete(FFreeRTOSPwm *os_pwm_p);
static void FFreeRTOSPwmInitTask(void *pvParameters)
{
- /* The pwm_id to use is passed in via the parameter.
- Cast this to a pwm_id pointer. */
- u32 pwm_id = (u32)(uintptr)pvParameters;
+ /* The pwm_id to use is passed in via the parameter.
+ Cast this to a pwm_id pointer. */
+ u32 pwm_id = (u32)(uintptr)pvParameters;
- FError ret = FPWM_SUCCESS;
+ FError ret = FPWM_SUCCESS;
- /* set channel 0 and 1 iopad*/
+ /* set channel 0 and 1 iopad*/
#if defined(CONFIG_TARGET_E2000)
- FIOPadSetPwmMux(pwm_id, 0);
+ FIOPadSetPwmMux(pwm_id, 0);
FIOPadSetPwmMux(pwm_id, 1);
#endif
- /* init pwm controller */
- os_pwm_ctrl_p = FFreeRTOSPwmInit(pwm_id);
- if(os_pwm_ctrl_p == NULL)
- {
- printf("FFreeRTOSPwmInit failed!!!\n");
- goto pwm_init_exit;
- }
-
- /* set pwm db config */
- FPwmDbVariableConfig db_cfg;
- memset(&db_cfg, 0, sizeof(db_cfg));
- db_cfg.db_rise_cycle = 500;
- db_cfg.db_fall_cycle = 500;
- db_cfg.db_polarity_sel = FPWM_DB_AHC;
- db_cfg.db_in_mode = FPWM_DB_IN_MODE_PWM0;
- db_cfg.db_out_mode = FPWM_DB_OUT_MODE_ENABLE_RISE_FALL;
- ret = FFreeRTOSPwmDbSet(os_pwm_ctrl_p, &db_cfg);
- if (FPWM_SUCCESS != ret)
- {
- printf("FFreeRTOSPwmDbSet failed\n");
- goto pwm_init_exit;
- }
- /* start pwm config */
- FPwmVariableConfig pwm_cfg;
- memset(&pwm_cfg, 0, sizeof(pwm_cfg));
- pwm_cfg.tim_ctrl_mode = FPWM_MODULO;
+ /* init pwm controller */
+ os_pwm_ctrl_p = FFreeRTOSPwmInit(pwm_id);
+ if (os_pwm_ctrl_p == NULL)
+ {
+ printf("FFreeRTOSPwmInit failed.\n");
+ goto pwm_init_exit;
+ }
+
+ /* set pwm db config */
+ FPwmDbVariableConfig db_cfg;
+ memset(&db_cfg, 0, sizeof(db_cfg));
+ db_cfg.db_rise_cycle = 500;
+ db_cfg.db_fall_cycle = 500;
+ db_cfg.db_polarity_sel = FPWM_DB_AHC;
+ db_cfg.db_in_mode = FPWM_DB_IN_MODE_PWM0;
+ db_cfg.db_out_mode = FPWM_DB_OUT_MODE_ENABLE_RISE_FALL;
+ ret = FFreeRTOSPwmDbSet(os_pwm_ctrl_p, &db_cfg);
+ if (FPWM_SUCCESS != ret)
+ {
+ printf("FFreeRTOSPwmDbSet failed.\n");
+ goto pwm_init_exit;
+ }
+ /* start pwm config */
+ FPwmVariableConfig pwm_cfg;
+ memset(&pwm_cfg, 0, sizeof(pwm_cfg));
+ pwm_cfg.tim_ctrl_mode = FPWM_MODULO;
pwm_cfg.tim_ctrl_div = PWM_DIV - 1;
pwm_cfg.pwm_period = PWM_PERIOD;
pwm_cfg.pwm_pulse = PWM_PULSE;
@@ -105,13 +106,13 @@ static void FFreeRTOSPwmInitTask(void *pvParameters)
pwm_cfg.pwm_polarity = FPWM_POLARITY_NORMAL;
pwm_cfg.pwm_duty_source_mode = FPWM_DUTY_CCR;
ret = FFreeRTOSPwmSet(os_pwm_ctrl_p, PWM_CHANNEL_USE, &pwm_cfg);
- if (FPWM_SUCCESS != ret)
- {
- printf("FFreeRTOSPwmSet failed\n");
- goto pwm_init_exit;
- }
+ if (FPWM_SUCCESS != ret)
+ {
+ printf("FFreeRTOSPwmSet failed.\n");
+ goto pwm_init_exit;
+ }
- memset(&db_cfg, 0, sizeof(db_cfg));
+ memset(&db_cfg, 0, sizeof(db_cfg));
memset(&pwm_cfg, 0, sizeof(pwm_cfg));
FFreeRTOSPwmDbGet(os_pwm_ctrl_p, &db_cfg);
@@ -132,135 +133,135 @@ static void FFreeRTOSPwmInitTask(void *pvParameters)
printf("pwm_cfg.pwm_polarity = %d\n", pwm_cfg.pwm_polarity);
printf("pwm_cfg.pwm_duty_source_mode = %d\n", pwm_cfg.pwm_duty_source_mode);
- FFreeRTOSPwmEnable(os_pwm_ctrl_p, PWM_CHANNEL_USE, TRUE);
+ FFreeRTOSPwmEnable(os_pwm_ctrl_p, PWM_CHANNEL_USE, TRUE);
- printf("FFreeRTOSPwmInitTask execute success !!!\r\n");
+ printf("FFreeRTOSPwmInitTask execute successfully.\r\n");
for (int i = 0; i < TEST_TASK_NUM; i++)
{
xSemaphoreGive(xCountingSemaphore);
}
-pwm_init_exit:
+pwm_init_exit:
vTaskDelete(NULL);
-
+
}
static void FFreeRTOSPwmChangeTask(void *pvParameters)
{
- xSemaphoreTake(xCountingSemaphore, portMAX_DELAY);
- u32 pwm_pulse = PWM_PULSE;
- /* As per most tasks, this task is implemented in an infinite loop. */
- for (;;)
- {
- FFreeRTOSPwmPulseSet(os_pwm_ctrl_p, PWM_CHANNEL_USE, pwm_pulse);
-
- printf("FFreeRTOSPwmChangeTask run, pwm_pulse: %d\r\n", pwm_pulse);
- pwm_pulse = (pwm_pulse + PWM_PULSE_CHANGE) % PWM_PERIOD;
- vTaskDelay(PWM_CHANGE_PERIOD);
- }
+ xSemaphoreTake(xCountingSemaphore, portMAX_DELAY);
+ u32 pwm_pulse = PWM_PULSE;
+ /* As per most tasks, this task is implemented in an infinite loop. */
+ for (;;)
+ {
+ FFreeRTOSPwmPulseSet(os_pwm_ctrl_p, PWM_CHANNEL_USE, pwm_pulse);
+
+ printf("FFreeRTOSPwmChangeTask run, pwm_pulse: %d\r\n", pwm_pulse);
+ pwm_pulse = (pwm_pulse + PWM_PULSE_CHANGE) % PWM_PERIOD;
+ vTaskDelay(PWM_CHANGE_PERIOD);
+ }
}
-static void prvOneShotTimerCallback( TimerHandle_t xTimer )
+static void prvOneShotTimerCallback(TimerHandle_t xTimer)
{
- /* Output a string to show the time at which the callback was executed. */
- printf("One-shot timer callback executing, will delete FFreeRTOSPwmChangeTask.\r\n" );
+ /* Output a string to show the time at which the callback was executed. */
+ printf("One-shot timer callback executing, which will delete FFreeRTOSPwmChangeTask.\r\n");
- FFreeRTOSPwmDelete(os_pwm_ctrl_p);
+ FFreeRTOSPwmDelete(os_pwm_ctrl_p);
}
/* create pwm test, id is pwm module number */
BaseType_t FFreeRTOSPwmCreate(u32 id)
{
- FASSERT(id < FPWM_INSTANCE_NUM);
+ FASSERT(id < FPWM_NUM);
BaseType_t xReturn = pdPASS;/* 定义一个创建信息返回值,默认为 pdPASS */
- BaseType_t xTimerStarted = pdPASS;
-
- xCountingSemaphore = xSemaphoreCreateCounting(TEST_TASK_NUM, 0);
- if (xCountingSemaphore == NULL)
- {
- printf("FFreeRTOSPwmCreate xCountingSemaphore create failed.\r\n" );
- return pdFAIL;
- }
-
- taskENTER_CRITICAL(); //进入临界区
- /* pwm init task */
- xReturn = xTaskCreate((TaskFunction_t )FFreeRTOSPwmInitTask, /* 任务入口函数 */
- (const char* )"FFreeRTOSPwmInitTask",/* 任务名字 */
- (uint16_t )1024, /* 任务栈大小 */
- (void* )(uintptr)id,/* 任务入口函数参数 */
- (UBaseType_t )configMAX_PRIORITIES-1, /* 任务的优先级 */
- NULL); /* 任务控制 */
-
- /* pwm占空比变化任务 */
- xReturn = xTaskCreate((TaskFunction_t )FFreeRTOSPwmChangeTask, /* 任务入口函数 */
- (const char* )"FFreeRTOSPwmChangeTask",/* 任务名字 */
- (uint16_t )1024, /* 任务栈大小 */
- NULL,/* 任务入口函数参数 */
- (UBaseType_t )configMAX_PRIORITIES-1, /* 任务的优先级 */
- (TaskHandle_t* )&change_handle); /* 任务控制 */
-
- /* Create the one shot software timer, storing the handle to the created
- software timer in xOneShotTimer. */
- xOneShotTimer = xTimerCreate( "OneShot Software Timer", /* Text name for the software timer - not used by FreeRTOS. */
- ONE_SHOT_TIMER_PERIOD, /* The software timer's period in ticks. */
- pdFALSE, /* Setting uxAutoRealod to pdFALSE creates a one-shot software timer. */
- 0, /* This example use the timer id. */
- prvOneShotTimerCallback ); /* The callback function to be used by the software timer being created. */
-
- /* Check the timers were created. */
- if( xOneShotTimer != NULL )
- {
- /* Start the software timers, using a block time of 0 (no block time).
- The scheduler has not been started yet so any block time specified here
- would be ignored anyway. */
- xTimerStarted = xTimerStart( xOneShotTimer, 0 );
-
- /* The implementation of xTimerStart() uses the timer command queue, and
- xTimerStart() will fail if the timer command queue gets full. The timer
- service task does not get created until the scheduler is started, so all
- commands sent to the command queue will stay in the queue until after
- the scheduler has been started. Check both calls to xTimerStart()
- passed. */
- if(xTimerStarted != pdPASS)
- {
- vPrintf("CreateSoftwareTimerTasks xTimerStart failed \r\n");
- }
- }
- else
- {
- vPrintf("CreateSoftwareTimerTasks xTimerCreate failed \r\n");
- }
-
- taskEXIT_CRITICAL(); //退出临界区
-
+ BaseType_t xTimerStarted = pdPASS;
+
+ xCountingSemaphore = xSemaphoreCreateCounting(TEST_TASK_NUM, 0);
+ if (xCountingSemaphore == NULL)
+ {
+ printf("FFreeRTOSPwmCreate xCountingSemaphore create failed.\r\n");
+ return pdFAIL;
+ }
+
+ taskENTER_CRITICAL(); //进入临界区
+ /* pwm init task */
+ xReturn = xTaskCreate((TaskFunction_t)FFreeRTOSPwmInitTask, /* 任务入口函数 */
+ (const char *)"FFreeRTOSPwmInitTask",/* 任务名字 */
+ (uint16_t)1024, /* 任务栈大小 */
+ (void *)(uintptr)id,/* 任务入口函数参数 */
+ (UBaseType_t)configMAX_PRIORITIES - 1, /* 任务的优先级 */
+ NULL); /* 任务控制 */
+
+ /* pwm占空比变化任务 */
+ xReturn = xTaskCreate((TaskFunction_t)FFreeRTOSPwmChangeTask, /* 任务入口函数 */
+ (const char *)"FFreeRTOSPwmChangeTask",/* 任务名字 */
+ (uint16_t)1024, /* 任务栈大小 */
+ NULL,/* 任务入口函数参数 */
+ (UBaseType_t)configMAX_PRIORITIES - 1, /* 任务的优先级 */
+ (TaskHandle_t *)&change_handle); /* 任务控制 */
+
+ /* Create the one shot software timer, storing the handle to the created
+ software timer in xOneShotTimer. */
+ xOneShotTimer = xTimerCreate("OneShot Software Timer", /* Text name for the software timer - not used by FreeRTOS. */
+ ONE_SHOT_TIMER_PERIOD, /* The software timer's period in ticks. */
+ pdFALSE, /* Setting uxAutoRealod to pdFALSE creates a one-shot software timer. */
+ 0, /* This example use the timer id. */
+ prvOneShotTimerCallback); /* The callback function to be used by the software timer being created. */
+
+ /* Check the timers were created. */
+ if (xOneShotTimer != NULL)
+ {
+ /* Start the software timers, using a block time of 0 (no block time).
+ The scheduler has not been started yet so any block time specified here
+ would be ignored anyway. */
+ xTimerStarted = xTimerStart(xOneShotTimer, 0);
+
+ /* The implementation of xTimerStart() uses the timer command queue, and
+ xTimerStart() will fail if the timer command queue gets full. The timer
+ service task does not get created until the scheduler is started, so all
+ commands sent to the command queue will stay in the queue until after
+ the scheduler has been started. Check both calls to xTimerStart()
+ passed. */
+ if (xTimerStarted != pdPASS)
+ {
+ vPrintf("CreateSoftwareTimerTasks xTimerStart failed.\r\n");
+ }
+ }
+ else
+ {
+ vPrintf("CreateSoftwareTimerTasks xTimerCreate failed.\r\n");
+ }
+
+ taskEXIT_CRITICAL(); //退出临界区
+
return xReturn;
}
static void FFreeRTOSPwmDelete(FFreeRTOSPwm *os_pwm_p)
{
- BaseType_t xReturn = pdPASS;
- FFreeRTOSPwmEnable(os_pwm_p, PWM_CHANNEL_USE, FALSE);
- FFreeRTOSPwmDeinit(os_pwm_p);
-
- if(change_handle)
+ BaseType_t xReturn = pdPASS;
+ FFreeRTOSPwmEnable(os_pwm_p, PWM_CHANNEL_USE, FALSE);
+ FFreeRTOSPwmDeinit(os_pwm_p);
+
+ if (change_handle)
{
vTaskDelete(change_handle);
- vPrintf("Delete FFreeRTOSPwmChangeTask success\r\n");
+ vPrintf("Delete FFreeRTOSPwmChangeTask successfully.\r\n");
}
- /* delete count sem */
- vSemaphoreDelete(xCountingSemaphore);
-
- /* delete timer */
- xReturn = xTimerDelete(xOneShotTimer, 0);
- if(xReturn != pdPASS)
- {
- vPrintf("Delete OneShot Software Timer failed.\r\n");
- }
- else
- {
- vPrintf("Delete OneShot Software Timer success.\r\n");
- }
+ /* delete count sem */
+ vSemaphoreDelete(xCountingSemaphore);
+
+ /* delete timer */
+ xReturn = xTimerDelete(xOneShotTimer, 0);
+ if (xReturn != pdPASS)
+ {
+ vPrintf("Delete OneShot Software Timer failed.\r\n");
+ }
+ else
+ {
+ vPrintf("Delete OneShot Software Timer successfully.\r\n");
+ }
}
\ No newline at end of file
diff --git a/example/peripheral/qspi/configs/d2000_aarch32_eg_configs b/example/peripheral/qspi/configs/d2000_aarch32_eg_configs
index 0ac4198f3a331bbf70e2f4f9ed2b05fe1d022d60..c7654be806930f5b5c9ab92055602528d475fb37 100644
--- a/example/peripheral/qspi/configs/d2000_aarch32_eg_configs
+++ b/example/peripheral/qspi/configs/d2000_aarch32_eg_configs
@@ -74,6 +74,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -118,6 +119,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -154,6 +164,7 @@ CONFIG_FREERTOS_USE_QSPI=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -175,12 +186,6 @@ CONFIG_FREERTOS_USE_QSPI=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -192,14 +197,32 @@ CONFIG_FREERTOS_USE_QSPI=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -217,4 +240,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/qspi/configs/d2000_aarch64_eg_configs b/example/peripheral/qspi/configs/d2000_aarch64_eg_configs
index 6faa0f1e9ca93493f41fbf0fa31ae08a416bdf85..4c96604d55a6d6ed25a66b4ba75cfe52ed5ca9ee 100644
--- a/example/peripheral/qspi/configs/d2000_aarch64_eg_configs
+++ b/example/peripheral/qspi/configs/d2000_aarch64_eg_configs
@@ -74,6 +74,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -114,6 +115,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -150,6 +160,7 @@ CONFIG_FREERTOS_USE_QSPI=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -171,12 +182,6 @@ CONFIG_FREERTOS_USE_QSPI=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -188,14 +193,32 @@ CONFIG_FREERTOS_USE_QSPI=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -213,4 +236,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/qspi/configs/e2000d_aarch32_eg_configs b/example/peripheral/qspi/configs/e2000d_aarch32_eg_configs
index e7bdc8d602bb137dff5510efdee04b6eea47fa5d..c7c5926457d067e93ca79ca03ebe3e6678b40233 100644
--- a/example/peripheral/qspi/configs/e2000d_aarch32_eg_configs
+++ b/example/peripheral/qspi/configs/e2000d_aarch32_eg_configs
@@ -74,6 +74,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -118,6 +119,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -154,6 +164,7 @@ CONFIG_FREERTOS_USE_QSPI=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -175,12 +186,6 @@ CONFIG_FREERTOS_USE_QSPI=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -192,14 +197,32 @@ CONFIG_FREERTOS_USE_QSPI=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -217,4 +240,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/qspi/configs/e2000d_aarch64_eg_configs b/example/peripheral/qspi/configs/e2000d_aarch64_eg_configs
index ccbd39b3065b09a820e0e0726cad7bf93be433d1..748ff821e312e83f9e7a8992125771a3364cc132 100644
--- a/example/peripheral/qspi/configs/e2000d_aarch64_eg_configs
+++ b/example/peripheral/qspi/configs/e2000d_aarch64_eg_configs
@@ -74,6 +74,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -114,6 +115,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -150,6 +160,7 @@ CONFIG_FREERTOS_USE_QSPI=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -171,12 +182,6 @@ CONFIG_FREERTOS_USE_QSPI=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -188,14 +193,32 @@ CONFIG_FREERTOS_USE_QSPI=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -213,4 +236,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/qspi/configs/e2000q_aarch32_eg_configs b/example/peripheral/qspi/configs/e2000q_aarch32_eg_configs
index 3e11d71513f89c6d7f98f5e1a63fd6be1fad8216..9b66254fc45b00b75e25851a630e93fb5853c6d2 100644
--- a/example/peripheral/qspi/configs/e2000q_aarch32_eg_configs
+++ b/example/peripheral/qspi/configs/e2000q_aarch32_eg_configs
@@ -74,6 +74,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -118,6 +119,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -154,6 +164,7 @@ CONFIG_FREERTOS_USE_QSPI=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -175,12 +186,6 @@ CONFIG_FREERTOS_USE_QSPI=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -192,14 +197,32 @@ CONFIG_FREERTOS_USE_QSPI=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -217,4 +240,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
# CONFIG_USE_TLSF is not set
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/qspi/configs/e2000q_aarch64_eg_configs b/example/peripheral/qspi/configs/e2000q_aarch64_eg_configs
index 1dab65cf6d4a2c2d344529a816f7e9be75fd05a3..855b203e9c0f2065dff34cc699fac0bb53eb67b5 100644
--- a/example/peripheral/qspi/configs/e2000q_aarch64_eg_configs
+++ b/example/peripheral/qspi/configs/e2000q_aarch64_eg_configs
@@ -74,6 +74,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -114,6 +115,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -150,6 +160,7 @@ CONFIG_FREERTOS_USE_QSPI=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -171,12 +182,6 @@ CONFIG_FREERTOS_USE_QSPI=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -188,14 +193,32 @@ CONFIG_FREERTOS_USE_QSPI=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -213,4 +236,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
# CONFIG_USE_TLSF is not set
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/qspi/configs/ft2004_aarch32_eg_configs b/example/peripheral/qspi/configs/ft2004_aarch32_eg_configs
index 5972fdd0ac0a0408cab3bc5effc9f90fff229d7a..69c042909fab2f05a31756c4b614a30efaf9add5 100644
--- a/example/peripheral/qspi/configs/ft2004_aarch32_eg_configs
+++ b/example/peripheral/qspi/configs/ft2004_aarch32_eg_configs
@@ -74,6 +74,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -118,6 +119,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -154,6 +164,7 @@ CONFIG_FREERTOS_USE_QSPI=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -175,12 +186,6 @@ CONFIG_FREERTOS_USE_QSPI=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -192,14 +197,32 @@ CONFIG_FREERTOS_USE_QSPI=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -217,4 +240,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/qspi/configs/ft2004_aarch64_eg_configs b/example/peripheral/qspi/configs/ft2004_aarch64_eg_configs
index 8bd0df2626fe1368cacf2ac8c3e8af1778231aae..be941bf3eb9e16bf32d867d4fe5f10bffd562806 100644
--- a/example/peripheral/qspi/configs/ft2004_aarch64_eg_configs
+++ b/example/peripheral/qspi/configs/ft2004_aarch64_eg_configs
@@ -74,6 +74,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -114,6 +115,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -150,6 +160,7 @@ CONFIG_FREERTOS_USE_QSPI=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -171,12 +182,6 @@ CONFIG_FREERTOS_USE_QSPI=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -188,14 +193,32 @@ CONFIG_FREERTOS_USE_QSPI=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -213,4 +236,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/qspi/inc/qspi_example.h b/example/peripheral/qspi/inc/qspi_example.h
index d83fdfb374cbbdd0bf54c04f02b70c427d2da7e6..4b62208728215b59dbadb50c8e6f306f9cc975da 100644
--- a/example/peripheral/qspi/inc/qspi_example.h
+++ b/example/peripheral/qspi/inc/qspi_example.h
@@ -1,31 +1,41 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: qspi_example.h
* Date: 2022-06-17 10:42:40
* LastEditTime: 2022-06-17 10:42:40
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
+ * Description: This file is for qspi test example function declarations.
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2022/8/9 first release
*/
#ifndef QSPI_EXAMPLE_H
#define QSPI_EXAMPLE_H
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
/* qspi read and write test */
BaseType_t FFreeRTOSQspiCreate(u32 id);
+#ifdef __cplusplus
+}
+#endif
+
#endif // !
\ No newline at end of file
diff --git a/example/peripheral/qspi/main.c b/example/peripheral/qspi/main.c
index 0a0686a5a054dbf7c3f1e931b803f93c8d6f027c..db1c7d65f61e9d4f89244feb9884696362cd42d0 100644
--- a/example/peripheral/qspi/main.c
+++ b/example/peripheral/qspi/main.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: main.c
* Date: 2022-06-17 08:17:59
* LastEditTime: 2022-06-17 08:17:59
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
+ * Description: This file is for qspi main entry.
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2022/8/9 first release
*/
#include "shell.h"
@@ -31,17 +32,21 @@ int main(void)
BaseType_t ret;
ret = FFreeRTOSQspiCreate(0);
- if(ret != pdPASS)
+ if (ret != pdPASS)
+ {
goto FAIL_EXIT;
+ }
ret = LSUserShellTask() ;
- if(ret != pdPASS)
+ if (ret != pdPASS)
+ {
goto FAIL_EXIT;
+ }
- vTaskStartScheduler(); /* 启动任务,开启调度 */
+ vTaskStartScheduler(); /* 启动任务,开启调度 */
while (1); /* 正常不会执行到这里 */
-
+
FAIL_EXIT:
- printf("failed 0x%x \r\n", ret);
+ printf("Failed,the ret value is 0x%x. \r\n", ret);
return 0;
}
diff --git a/example/peripheral/qspi/sdkconfig b/example/peripheral/qspi/sdkconfig
index 1dab65cf6d4a2c2d344529a816f7e9be75fd05a3..855b203e9c0f2065dff34cc699fac0bb53eb67b5 100644
--- a/example/peripheral/qspi/sdkconfig
+++ b/example/peripheral/qspi/sdkconfig
@@ -74,6 +74,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -114,6 +115,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -150,6 +160,7 @@ CONFIG_FREERTOS_USE_QSPI=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -171,12 +182,6 @@ CONFIG_FREERTOS_USE_QSPI=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -188,14 +193,32 @@ CONFIG_FREERTOS_USE_QSPI=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -213,4 +236,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
# CONFIG_USE_TLSF is not set
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/qspi/sdkconfig.h b/example/peripheral/qspi/sdkconfig.h
index 39b0c06c54f38e6c639ac99c6511cf88dbac6fad..4e01cd61e2d014cbc61967b11246e67fffd21ef3 100644
--- a/example/peripheral/qspi/sdkconfig.h
+++ b/example/peripheral/qspi/sdkconfig.h
@@ -67,6 +67,7 @@
/* CONFIG_USE_ADC is not set */
/* CONFIG_USE_PWM is not set */
/* CONFIG_USE_IPC is not set */
+/* CONFIG_USE_MEDIA is not set */
/* end of Components Configuration */
#define CONFIG_USE_NEW_LIBC
/* end of Standalone Setting */
@@ -103,6 +104,12 @@
/* Compiler Options */
+/* Cross-Compiler Setting */
+
+#define CONFIG_GCC_OPTIMIZE_LEVEL 0
+/* CONFIG_USE_EXT_COMPILER is not set */
+/* CONFIG_USE_KLIN_SYS is not set */
+/* end of Cross-Compiler Setting */
#define CONFIG_OUTPUT_BINARY
/* end of Compiler Options */
/* end of Building Option */
@@ -132,6 +139,7 @@
/* Freertos Eth Drivers */
/* CONFIG_FREERTOS_USE_XMAC is not set */
+/* CONFIG_FREERTOS_USE_GMAC is not set */
/* end of Freertos Eth Drivers */
/* Freertos Gpio Drivers */
@@ -150,11 +158,6 @@
/* CONFIG_FREERTOS_USE_FGDMA is not set */
/* end of Freertos DMA Drivers */
-/* Freertos MMC Drivers */
-
-/* CONFIG_FREERTOS_USE_FSDIO is not set */
-/* end of Freertos MMC Drivers */
-
/* Freertos Adc Drivers */
/* CONFIG_FREERTOS_USE_ADC is not set */
@@ -164,13 +167,28 @@
/* CONFIG_FREERTOS_USE_CAN is not set */
/* end of Freertos Can Drivers */
+
+/* Freertos I2c Drivers */
+
+/* CONFIG_FREERTOS_USE_I2C is not set */
+/* end of Freertos I2c Drivers */
+
+/* Freertos Mio Drivers */
+
+/* CONFIG_FREERTOS_USE_MIO is not set */
+/* end of Freertos Mio Drivers */
+
+/* Freertos Timer Drivers */
+
+/* CONFIG_FREERTOS_USE_TIMER is not set */
+/* end of Freertos Timer Drivers */
/* end of Component Configuration */
-/* FreeRTOS Setting */
+/* Third-Party Configuration */
/* CONFIG_USE_LWIP is not set */
#define CONFIG_USE_BACKTRACE
-/* CONFIG_USE_FATFS is not set */
+/* CONFIG_USE_FATFS_0_1_4 is not set */
/* CONFIG_USE_SFUD is not set */
/* CONFIG_USE_SPIFFS is not set */
/* CONFIG_USE_AMP is not set */
@@ -186,6 +204,28 @@
/* CONFIG_USE_TLSF is not set */
/* CONFIG_USE_SDMMC_CMD is not set */
/* CONFIG_USE_CHERRY_USB is not set */
-/* end of FreeRTOS Setting */
+/* end of Third-Party Configuration */
+
+/* Kernel Configuration */
+
+#define CONFIG_FREERTOS_OPTIMIZED_SCHEDULER
+#define CONFIG_FREERTOS_HZ 1000
+#define CONFIG_FREERTOS_MAX_PRIORITIES 32
+#define CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES 13
+#define CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES 11
+#define CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS 1
+#define CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE 1024
+#define CONFIG_FREERTOS_MAX_TASK_NAME_LEN 32
+#define CONFIG_FREERTOS_TIMER_TASK_PRIORITY 1
+#define CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH 2048
+#define CONFIG_FREERTOS_TIMER_QUEUE_LENGTH 10
+#define CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE 0
+#define CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS
+#define CONFIG_FREERTOS_USE_TRACE_FACILITY
+#define CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS
+/* CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set */
+#define CONFIG_FREERTOS_TOTAL_HEAP_SIZE 10240
+#define CONFIG_FREERTOS_TASK_FPU_SUPPORT 1
+/* end of Kernel Configuration */
#endif
diff --git a/example/peripheral/qspi/src/qspi_example.c b/example/peripheral/qspi/src/qspi_example.c
index d12b1cd33048c2ec29e3462574c4e37c0a3b35e5..7422ab1306df8084ddb327522bb406a1fefb49b3 100644
--- a/example/peripheral/qspi/src/qspi_example.c
+++ b/example/peripheral/qspi/src/qspi_example.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: qspi_example.c
* Date: 2022-07-11 11:32:48
* LastEditTime: 2022-07-11 11:32:48
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
+ * Description: This file is for qspi test example functions.
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2022/8/9 first release
*/
#include
#include "FreeRTOSConfig.h"
@@ -33,17 +34,20 @@
#include "sdkconfig.h"
/* The periods assigned to the one-shot timers. */
-#define ONE_SHOT_TIMER_PERIOD ( pdMS_TO_TICKS( 50000UL ) )
+#define ONE_SHOT_TIMER_PERIOD ( pdMS_TO_TICKS( 50000UL ) )
/* write and read task delay in milliseconds */
-#define TASK_DELAY_MS 10000UL
+#define TASK_DELAY_MS 10000UL
+
static xTaskHandle read_handle;
static xTaskHandle write_handle;
static TimerHandle_t xOneShotTimer;
+/* Offset 1M from flash maximum capacity*/
+#define FLASH_WR_OFFSET SZ_1M
/* write and read start address */
-#define FLASH_ADDR (7 * SZ_1M)
+static u32 flash_wr_start = 0 ;
/* write and read cs channel */
#define QSPI_CS_CHANNEL 0
@@ -62,234 +66,234 @@ static FFreeRTOSQspiMessage message = {0};
static void FFreeRTOSQspiDelete(void);
-
static void QspiInitTask(void *pvParameters)
{
- /* The qspi_id to use is passed in via the parameter.
- Cast this to a qspi_id pointer. */
- u32 qspi_id = (u32)(uintptr)pvParameters;
+ /* The qspi_id to use is passed in via the parameter.
+ Cast this to a qspi_id pointer. */
+ u32 qspi_id = (u32)(uintptr)pvParameters;
#if defined(CONFIG_TARGET_E2000)
FIOPadSetQspiMux(qspi_id, FQSPI_CS_0);
FIOPadSetQspiMux(qspi_id, FQSPI_CS_1);
#endif
- /* init qspi controller */
- os_qspi_ctrl_p = FFreeRTOSQspiInit(qspi_id);
- if(os_qspi_ctrl_p == NULL)
- {
- printf("FFreeRTOSWdtInit failed!!!\n");
- goto qspi_init_exit;
- }
-
+ /* init qspi controller */
+ os_qspi_ctrl_p = FFreeRTOSQspiInit(qspi_id);
+ flash_wr_start = os_qspi_ctrl_p->qspi_ctrl.flash_size - FLASH_WR_OFFSET;
+ if (os_qspi_ctrl_p == NULL)
+ {
+ printf("FFreeRTOSWdtInit failed.\n");
+ goto qspi_init_exit;
+ }
+
for (int i = 0; i < READ_WRITE_TASK_NUM; i++)
{
xSemaphoreGive(xCountingSemaphore);
}
-qspi_init_exit:
+qspi_init_exit:
vTaskDelete(NULL);
}
static void QspiReadTask(void *pvParameters)
{
- const char *pcTaskName = "QspiReadTask is running\r\n";
- const TickType_t xDelay = pdMS_TO_TICKS(TASK_DELAY_MS);
- FError ret = FQSPI_SUCCESS;
-
- xSemaphoreTake(xCountingSemaphore, portMAX_DELAY);
-
- /* As per most tasks, this task is implemented in an infinite loop. */
- for( ;; )
- {
- /* Print out the name of this task. */
- printf( pcTaskName );
-
- message.read_buf = rd_buf;
- message.length = DAT_LENGTH;
- message.addr = FLASH_ADDR;
- message.cmd = FQSPI_FLASH_CMD_READ;
- message.cs = QSPI_CS_CHANNEL;
- ret = FFreeRTOSQspiTransfer(os_qspi_ctrl_p, &message);
- if (FQSPI_SUCCESS != ret)
- {
- printf("QspiReadTask FFreeRTOSQspiTransfer failed, result 0x%x\r\n", ret);
- }
- taskENTER_CRITICAL(); //进入临界区
- FtDumpHexByte(rd_buf, DAT_LENGTH);
- taskEXIT_CRITICAL(); //退出临界区
-
- /* Delay for a period. This time a call to vTaskDelay() is used which
- places the task into the Blocked state until the delay period has
- expired. The parameter takes a time specified in 'ticks', and the
- pdMS_TO_TICKS() macro is used (where the xDelay constant is
- declared) to convert TASK_DELAY_MS milliseconds into an equivalent time in
- ticks. */
- vTaskDelay(xDelay);
- }
+ const char *pcTaskName = "QspiReadTask is running\r\n";
+ const TickType_t xDelay = pdMS_TO_TICKS(TASK_DELAY_MS);
+ FError ret = FQSPI_SUCCESS;
+
+ xSemaphoreTake(xCountingSemaphore, portMAX_DELAY);
+
+ /* As per most tasks, this task is implemented in an infinite loop. */
+ for (;;)
+ {
+ /* Print out the name of this task. */
+ printf(pcTaskName);
+
+ message.read_buf = rd_buf;
+ message.length = DAT_LENGTH;
+ message.addr = flash_wr_start;
+ message.cmd = FQSPI_FLASH_CMD_READ;
+ message.cs = QSPI_CS_CHANNEL;
+ ret = FFreeRTOSQspiTransfer(os_qspi_ctrl_p, &message);
+ if (FQSPI_SUCCESS != ret)
+ {
+ printf("QspiReadTask FFreeRTOSQspiTransfer failed, return value: 0x%x\r\n", ret);
+ }
+ taskENTER_CRITICAL(); //进入临界区
+ FtDumpHexByte(rd_buf, DAT_LENGTH);
+ taskEXIT_CRITICAL(); //退出临界区
+
+ /* Delay for a period. This time a call to vTaskDelay() is used which
+ places the task into the Blocked state until the delay period has
+ expired. The parameter takes a time specified in 'ticks', and the
+ pdMS_TO_TICKS() macro is used (where the xDelay constant is
+ declared) to convert TASK_DELAY_MS milliseconds into an equivalent time in
+ ticks. */
+ vTaskDelay(xDelay);
+ }
}
static void QspiWriteTask(void *pvParameters)
{
- const char *pcTaskName = "QspiWriteTask is running\r\n";
- const TickType_t xDelay = pdMS_TO_TICKS(TASK_DELAY_MS);
- int i = 0;
- FError ret = FQSPI_SUCCESS;
+ const char *pcTaskName = "QspiWriteTask is running\r\n";
+ const TickType_t xDelay = pdMS_TO_TICKS(TASK_DELAY_MS);
+ int i = 0;
+ FError ret = FQSPI_SUCCESS;
- xSemaphoreTake(xCountingSemaphore, portMAX_DELAY);
+ xSemaphoreTake(xCountingSemaphore, portMAX_DELAY);
/* As per most tasks, this task is implemented in an infinite loop. */
- for( ;; )
- {
- /* Print out the name of this task. */
- printf( pcTaskName );
- for (i = 0; i < DAT_LENGTH; i++)
- {
- wr_buf[i] = wr_buf[i] + 0x11;
- }
-
- message.addr = FLASH_ADDR;
- message.cmd = FQSPI_FLASH_CMD_SE;
- message.cs = QSPI_CS_CHANNEL;
- ret = FFreeRTOSQspiTransfer(os_qspi_ctrl_p, &message);
- if (FQSPI_SUCCESS != ret)
- {
- printf("QspiWriteTask FFreeRTOSQspiTransfer failed, result 0x%x\r\n", ret);
- }
-
- message.write_buf = wr_buf;
- message.length = DAT_LENGTH;
- message.addr = FLASH_ADDR;
- message.cmd = FQSPI_FLASH_CMD_PP;
- message.cs = QSPI_CS_CHANNEL;
-
- ret = FFreeRTOSQspiTransfer(os_qspi_ctrl_p, &message);
- if (FQSPI_SUCCESS != ret)
- {
- printf("QspiWriteTask FFreeRTOSQspiTransfer failed, result 0x%x\r\n", ret);
- }
-
- /* Delay for a period. This time a call to vTaskDelay() is used which
- places the task into the Blocked state until the delay period has
- expired. The parameter takes a time specified in 'ticks', and the
- pdMS_TO_TICKS() macro is used (where the xDelay constant is
- declared) to convert TASK_DELAY_MS milliseconds into an equivalent time in
- ticks. */
- vTaskDelay(xDelay);
- }
+ for (;;)
+ {
+ /* Print out the name of this task. */
+ printf(pcTaskName);
+ for (i = 0; i < DAT_LENGTH; i++)
+ {
+ wr_buf[i] = wr_buf[i] + 0x11;
+ }
+
+ message.addr = flash_wr_start;
+ message.cmd = FQSPI_FLASH_CMD_SE;
+ message.cs = QSPI_CS_CHANNEL;
+ ret = FFreeRTOSQspiTransfer(os_qspi_ctrl_p, &message);
+ if (FQSPI_SUCCESS != ret)
+ {
+ printf("QspiWriteTask FFreeRTOSQspiTransfer failed, return value: 0x%x\r\n", ret);
+ }
+
+ message.write_buf = wr_buf;
+ message.length = DAT_LENGTH;
+ message.addr = flash_wr_start;
+ message.cmd = FQSPI_FLASH_CMD_PP;
+ message.cs = QSPI_CS_CHANNEL;
+
+ ret = FFreeRTOSQspiTransfer(os_qspi_ctrl_p, &message);
+ if (FQSPI_SUCCESS != ret)
+ {
+ printf("QspiWriteTask FFreeRTOSQspiTransfer failed, return value: 0x%x\r\n", ret);
+ }
+
+ /* Delay for a period. This time a call to vTaskDelay() is used which
+ places the task into the Blocked state until the delay period has
+ expired. The parameter takes a time specified in 'ticks', and the
+ pdMS_TO_TICKS() macro is used (where the xDelay constant is
+ declared) to convert TASK_DELAY_MS milliseconds into an equivalent time in
+ ticks. */
+ vTaskDelay(xDelay);
+ }
}
-static void prvOneShotTimerCallback( TimerHandle_t xTimer )
+static void prvOneShotTimerCallback(TimerHandle_t xTimer)
{
- /* Output a string to show the time at which the callback was executed. */
- printf( "One-shot timer callback executing, will delete QspiReadTask and QspiWriteTask.\r\n" );
+ /* Output a string to show the time at which the callback was executed. */
+ printf("One-shot timer callback executing, which will delete QspiReadTask and QspiWriteTask.\r\n");
- FFreeRTOSQspiDelete();
+ FFreeRTOSQspiDelete();
}
BaseType_t FFreeRTOSQspiCreate(u32 id)
{
BaseType_t xReturn = pdPASS;/* 定义一个创建信息返回值,默认为 pdPASS */
- BaseType_t xTimerStarted = pdPASS;
-
- memset(&message, 0, sizeof(message));
-
- xCountingSemaphore = xSemaphoreCreateCounting(READ_WRITE_TASK_NUM, 0);
- if (xCountingSemaphore == NULL)
- {
- printf("FFreeRTOSWdtCreate xCountingSemaphore create failed.\r\n" );
- return pdFAIL;
- }
-
- taskENTER_CRITICAL(); /*进入临界区*/
-
- xReturn = xTaskCreate((TaskFunction_t )QspiInitTask, /* 任务入口函数 */
- (const char* )"QspiInitTask",/* 任务名字 */
- (uint16_t )1024, /* 任务栈大小 */
- (void* )(uintptr)id,/* 任务入口函数参数 */
- (UBaseType_t )2, /* 任务的优先级 */
- NULL);
-
- xReturn = xTaskCreate((TaskFunction_t )QspiReadTask, /* 任务入口函数 */
- (const char* )"QspiReadTask",/* 任务名字 */
- (uint16_t )1024, /* 任务栈大小 */
- NULL,/* 任务入口函数参数 */
- (UBaseType_t )configMAX_PRIORITIES-1, /* 任务的优先级 */
- (TaskHandle_t* )&read_handle); /* 任务控制 */
-
- xReturn = xTaskCreate((TaskFunction_t )QspiWriteTask, /* 任务入口函数 */
- (const char* )"QspiWriteTask",/* 任务名字 */
- (uint16_t )1024, /* 任务栈大小 */
- NULL,/* 任务入口函数参数 */
- (UBaseType_t )configMAX_PRIORITIES-1, /* 任务的优先级 */
- (TaskHandle_t* )&write_handle); /* 任务控制 */
-
- /* Create the one shot software timer, storing the handle to the created
- software timer in xOneShotTimer. */
- xOneShotTimer = xTimerCreate( "OneShot Software Timer", /* Text name for the software timer - not used by FreeRTOS. */
- ONE_SHOT_TIMER_PERIOD, /* The software timer's period in ticks. */
- pdFALSE, /* Setting uxAutoRealod to pdFALSE creates a one-shot software timer. */
- 0, /* This example does not use the timer id. */
- prvOneShotTimerCallback ); /* The callback function to be used by the software timer being created. */
-
- /* Check the timers were created. */
- if( xOneShotTimer != NULL )
- {
- /* Start the software timers, using a block time of 0 (no block time).
- The scheduler has not been started yet so any block time specified here
- would be ignored anyway. */
- xTimerStarted = xTimerStart( xOneShotTimer, 0 );
-
- /* The implementation of xTimerStart() uses the timer command queue, and
- xTimerStart() will fail if the timer command queue gets full. The timer
- service task does not get created until the scheduler is started, so all
- commands sent to the command queue will stay in the queue until after
- the scheduler has been started. Check both calls to xTimerStart()
- passed. */
- if( xTimerStarted != pdPASS)
- {
- printf("CreateSoftwareTimerTasks xTimerStart failed \r\n");
- }
- }
- else
- {
- printf("CreateSoftwareTimerTasks xTimerCreate failed \r\n");
- }
-
- taskEXIT_CRITICAL();
-
+ BaseType_t xTimerStarted = pdPASS;
+
+ memset(&message, 0, sizeof(message));
+
+ xCountingSemaphore = xSemaphoreCreateCounting(READ_WRITE_TASK_NUM, 0);
+ if (xCountingSemaphore == NULL)
+ {
+ printf("FFreeRTOSWdtCreate xCountingSemaphore create failed.\r\n");
+ return pdFAIL;
+ }
+
+ taskENTER_CRITICAL(); /*进入临界区*/
+
+ xReturn = xTaskCreate((TaskFunction_t)QspiInitTask, /* 任务入口函数 */
+ (const char *)"QspiInitTask",/* 任务名字 */
+ (uint16_t)1024, /* 任务栈大小 */
+ (void *)(uintptr)id,/* 任务入口函数参数 */
+ (UBaseType_t)2, /* 任务的优先级 */
+ NULL);
+
+ xReturn = xTaskCreate((TaskFunction_t)QspiReadTask, /* 任务入口函数 */
+ (const char *)"QspiReadTask",/* 任务名字 */
+ (uint16_t)1024, /* 任务栈大小 */
+ NULL,/* 任务入口函数参数 */
+ (UBaseType_t)configMAX_PRIORITIES - 1, /* 任务的优先级 */
+ (TaskHandle_t *)&read_handle); /* 任务控制 */
+
+ xReturn = xTaskCreate((TaskFunction_t)QspiWriteTask, /* 任务入口函数 */
+ (const char *)"QspiWriteTask",/* 任务名字 */
+ (uint16_t)1024, /* 任务栈大小 */
+ NULL,/* 任务入口函数参数 */
+ (UBaseType_t)configMAX_PRIORITIES - 1, /* 任务的优先级 */
+ (TaskHandle_t *)&write_handle); /* 任务控制 */
+
+ /* Create the one shot software timer, storing the handle to the created
+ software timer in xOneShotTimer. */
+ xOneShotTimer = xTimerCreate("OneShot Software Timer", /* Text name for the software timer - not used by FreeRTOS. */
+ ONE_SHOT_TIMER_PERIOD, /* The software timer's period in ticks. */
+ pdFALSE, /* Setting uxAutoRealod to pdFALSE creates a one-shot software timer. */
+ 0, /* This example does not use the timer id. */
+ prvOneShotTimerCallback); /* The callback function to be used by the software timer being created. */
+
+ /* Check the timers were created. */
+ if (xOneShotTimer != NULL)
+ {
+ /* Start the software timers, using a block time of 0 (no block time).
+ The scheduler has not been started yet so any block time specified here
+ would be ignored anyway. */
+ xTimerStarted = xTimerStart(xOneShotTimer, 0);
+
+ /* The implementation of xTimerStart() uses the timer command queue, and
+ xTimerStart() will fail if the timer command queue gets full. The timer
+ service task does not get created until the scheduler is started, so all
+ commands sent to the command queue will stay in the queue until after
+ the scheduler has been started. Check both calls to xTimerStart()
+ passed. */
+ if (xTimerStarted != pdPASS)
+ {
+ printf("CreateSoftwareTimerTasks xTimerStart failed.\r\n");
+ }
+ }
+ else
+ {
+ printf("CreateSoftwareTimerTasks xTimerCreate failed.\r\n");
+ }
+
+ taskEXIT_CRITICAL();
+
return xReturn;
}
static void FFreeRTOSQspiDelete(void)
{
- BaseType_t xReturn = pdPASS;
- FFreeRTOSQspiDeinit(os_qspi_ctrl_p);
- if(read_handle)
+ BaseType_t xReturn = pdPASS;
+ FFreeRTOSQspiDeinit(os_qspi_ctrl_p);
+ if (read_handle)
{
vTaskDelete(read_handle);
- printf("Delete QspiReadTask success\r\n");
+ printf("Delete QspiReadTask successfully.\r\n");
}
- if(write_handle)
+ if (write_handle)
{
vTaskDelete(write_handle);
- printf("Delete QspiWriteTask success\r\n");
+ printf("Delete QspiWriteTask successfully.\r\n");
}
- /* delete count sem */
- vSemaphoreDelete(xCountingSemaphore);
-
- /* delete timer */
- xReturn = xTimerDelete(xOneShotTimer, 0);
- if(xReturn != pdPASS)
- {
- printf("OneShot Software Timer Delete failed.\r\n");
- }
- else
- {
- printf("OneShot Software Timer Delete success.\r\n");
- }
+ /* delete count sem */
+ vSemaphoreDelete(xCountingSemaphore);
+
+ /* delete timer */
+ xReturn = xTimerDelete(xOneShotTimer, 0);
+ if (xReturn != pdPASS)
+ {
+ printf("OneShot Software Timer Delete failed.\r\n");
+ }
+ else
+ {
+ printf("OneShot Software Timer Delete successfully.\r\n");
+ }
}
diff --git a/example/peripheral/sdio/README.md b/example/peripheral/sdio/README.md
index df45cc8e8b4ab4d1e21f8ac7e61992acd5ddba5a..e6e011d5ee1c10f92e6604b5d8b762344c0cc615 100644
--- a/example/peripheral/sdio/README.md
+++ b/example/peripheral/sdio/README.md
@@ -124,7 +124,3 @@ sd wr 0 emmc 7 3
## 4. 修改历史记录
-
-
-
-
diff --git a/example/peripheral/sdio/configs/e2000d_aarch32_eg_configs b/example/peripheral/sdio/configs/e2000d_aarch32_eg_configs
index 64f010423407f8111edb094e15b7bb41534c8497..f657b1764fb06ebe209abed3628df1e380c0ea40 100644
--- a/example/peripheral/sdio/configs/e2000d_aarch32_eg_configs
+++ b/example/peripheral/sdio/configs/e2000d_aarch32_eg_configs
@@ -57,6 +57,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_TIMER is not set
# CONFIG_USE_MIO is not set
CONFIG_USE_SDMMC=y
+# CONFIG_ENABLE_FSDMMC is not set
CONFIG_ENABLE_FSDIO=y
# CONFIG_USE_PCIE is not set
# CONFIG_USE_WDT is not set
@@ -68,6 +69,7 @@ CONFIG_ENABLE_FSDIO=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -112,6 +114,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -148,6 +159,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -169,12 +181,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-CONFIG_FREERTOS_USE_FSDIO=y
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -186,14 +192,32 @@ CONFIG_FREERTOS_USE_FSDIO=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -214,8 +238,32 @@ CONFIG_USE_SDMMC_CMD=y
#
# SDMMC Configuration
#
-CONFIG_SDMMC_PORT_FSDIO=y
+# CONFIG_SDMMC_USE_FSDMMC is not set
+CONFIG_SDMMC_USE_FSDIO=y
# end of SDMMC Configuration
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/sdio/configs/e2000d_aarch64_eg_configs b/example/peripheral/sdio/configs/e2000d_aarch64_eg_configs
index 24897cad8f728924962ad72119c72c6da7e001fc..1bf9c3b905a9bb04ffe97fc6083240635c468780 100644
--- a/example/peripheral/sdio/configs/e2000d_aarch64_eg_configs
+++ b/example/peripheral/sdio/configs/e2000d_aarch64_eg_configs
@@ -57,6 +57,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_TIMER is not set
# CONFIG_USE_MIO is not set
CONFIG_USE_SDMMC=y
+# CONFIG_ENABLE_FSDMMC is not set
CONFIG_ENABLE_FSDIO=y
# CONFIG_USE_PCIE is not set
# CONFIG_USE_WDT is not set
@@ -68,6 +69,7 @@ CONFIG_ENABLE_FSDIO=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -77,8 +79,8 @@ CONFIG_USE_NEW_LIBC=y
# Building Option
#
# CONFIG_LOG_VERBOS is not set
-# CONFIG_LOG_DEBUG is not set
-CONFIG_LOG_INFO=y
+CONFIG_LOG_DEBUG=y
+# CONFIG_LOG_INFO is not set
# CONFIG_LOG_WARN is not set
# CONFIG_LOG_ERROR is not set
# CONFIG_LOG_NONE is not set
@@ -108,6 +110,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -144,6 +155,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -165,12 +177,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-CONFIG_FREERTOS_USE_FSDIO=y
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -182,14 +188,32 @@ CONFIG_FREERTOS_USE_FSDIO=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -210,8 +234,32 @@ CONFIG_USE_SDMMC_CMD=y
#
# SDMMC Configuration
#
-CONFIG_SDMMC_PORT_FSDIO=y
+# CONFIG_SDMMC_USE_FSDMMC is not set
+CONFIG_SDMMC_USE_FSDIO=y
# end of SDMMC Configuration
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/sdio/configs/e2000q_aarch32_eg_configs b/example/peripheral/sdio/configs/e2000q_aarch32_eg_configs
index 76430549524018226909f57a3d90255fbe1a41dc..e516e1736620472cb4f9a3fe2e190d352d1c3663 100644
--- a/example/peripheral/sdio/configs/e2000q_aarch32_eg_configs
+++ b/example/peripheral/sdio/configs/e2000q_aarch32_eg_configs
@@ -57,6 +57,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_TIMER is not set
# CONFIG_USE_MIO is not set
CONFIG_USE_SDMMC=y
+# CONFIG_ENABLE_FSDMMC is not set
CONFIG_ENABLE_FSDIO=y
# CONFIG_USE_PCIE is not set
# CONFIG_USE_WDT is not set
@@ -68,6 +69,7 @@ CONFIG_ENABLE_FSDIO=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -112,6 +114,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -148,6 +159,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -169,12 +181,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-CONFIG_FREERTOS_USE_FSDIO=y
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -186,14 +192,32 @@ CONFIG_FREERTOS_USE_FSDIO=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -214,8 +238,32 @@ CONFIG_USE_SDMMC_CMD=y
#
# SDMMC Configuration
#
-CONFIG_SDMMC_PORT_FSDIO=y
+# CONFIG_SDMMC_USE_FSDMMC is not set
+CONFIG_SDMMC_USE_FSDIO=y
# end of SDMMC Configuration
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/sdio/configs/e2000q_aarch64_eg_configs b/example/peripheral/sdio/configs/e2000q_aarch64_eg_configs
index c9591ec613c1d356244ec9935fc9035d16438bce..088376733917305ff01465d6b4c1db0764f9a0c9 100644
--- a/example/peripheral/sdio/configs/e2000q_aarch64_eg_configs
+++ b/example/peripheral/sdio/configs/e2000q_aarch64_eg_configs
@@ -57,6 +57,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_TIMER is not set
# CONFIG_USE_MIO is not set
CONFIG_USE_SDMMC=y
+# CONFIG_ENABLE_FSDMMC is not set
CONFIG_ENABLE_FSDIO=y
# CONFIG_USE_PCIE is not set
# CONFIG_USE_WDT is not set
@@ -68,6 +69,7 @@ CONFIG_ENABLE_FSDIO=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -78,9 +80,9 @@ CONFIG_USE_NEW_LIBC=y
#
# CONFIG_LOG_VERBOS is not set
# CONFIG_LOG_DEBUG is not set
-CONFIG_LOG_INFO=y
+# CONFIG_LOG_INFO is not set
# CONFIG_LOG_WARN is not set
-# CONFIG_LOG_ERROR is not set
+CONFIG_LOG_ERROR=y
# CONFIG_LOG_NONE is not set
CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y
CONFIG_INTERRUPT_ROLE_MASTER=y
@@ -108,6 +110,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -144,6 +155,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -165,12 +177,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-CONFIG_FREERTOS_USE_FSDIO=y
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -182,14 +188,32 @@ CONFIG_FREERTOS_USE_FSDIO=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -210,8 +234,32 @@ CONFIG_USE_SDMMC_CMD=y
#
# SDMMC Configuration
#
-CONFIG_SDMMC_PORT_FSDIO=y
+# CONFIG_SDMMC_USE_FSDMMC is not set
+CONFIG_SDMMC_USE_FSDIO=y
# end of SDMMC Configuration
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/sdio/inc/sd_read_write.h b/example/peripheral/sdio/inc/sd_read_write.h
index f5a37e28dcd5d8ffc169491dba803c30e6e987f7..a5c2ea3d433e4eb0728e19fa7e5d012a66768033 100644
--- a/example/peripheral/sdio/inc/sd_read_write.h
+++ b/example/peripheral/sdio/inc/sd_read_write.h
@@ -1,27 +1,28 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: sd_read_write.h
* Date: 2022-07-18 16:43:35
* LastEditTime: 2022-07-18 16:43:35
- * Description: This files is for
- *
- * Modify History:
+ * Description: This file is for providing some sd apis.
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
+ * 1.0 zhugengyu 2022/8/26 first commit
*/
-#ifndef EXAMPLE_SD_READ_WRITE_H
-#define EXAMPLE_SD_READ_WRITE_H
+#ifndef SD_READ_WRITE_H
+#define SD_READ_WRITE_H
#ifdef __cplusplus
extern "C"
diff --git a/example/peripheral/sdio/main.c b/example/peripheral/sdio/main.c
index e28f6df82d3857f6bc0667dfea786a15d11c2e42..71a28ae64e399cbcce144f3b9fbf33285bcdf7dc 100644
--- a/example/peripheral/sdio/main.c
+++ b/example/peripheral/sdio/main.c
@@ -1,44 +1,52 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: main.c
* Date: 2022-06-17 08:17:59
* LastEditTime: 2022-06-17 08:17:59
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
+ * Description: This file is for sdio test main entry.
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 zhugengyu 2022/8/26 first commit
*/
#include "shell.h"
#include "shell_port.h"
#include
+#include "sdmmc_system.h"
+#include "sd_read_write.h"
int main(void)
{
BaseType_t ret;
ret = LSUserShellTask() ;
- if(ret != pdPASS)
+ if (ret != pdPASS)
+ {
goto FAIL_EXIT;
+ }
- /* ret = FFreeRTOSSdWriteRead(1U, FALSE, 0, 2); */
+ /* board init */
+ sdmmc_sys_init();
+
+ ret = FFreeRTOSSdWriteRead(1U, FALSE, 0, 4);
+
+ vTaskStartScheduler();
+ while (1);
- vTaskStartScheduler(); /* 启动任务,开启调度 */
- while (1); /* 正常不会执行到这里 */
-
FAIL_EXIT:
- printf("failed 0x%x \r\n", ret);
+ printf("Failed,the ret value is 0x%x. \r\n", ret);
return 0;
}
diff --git a/example/peripheral/sdio/sdkconfig b/example/peripheral/sdio/sdkconfig
index 9a99079bd3671cf2b3ecb273c27d1c4048ae94e6..088376733917305ff01465d6b4c1db0764f9a0c9 100644
--- a/example/peripheral/sdio/sdkconfig
+++ b/example/peripheral/sdio/sdkconfig
@@ -2,7 +2,7 @@
#
# Freertos Configuration
#
-CONFIG_TARGET_NAME="e2000d_freertos_a64"
+CONFIG_TARGET_NAME="e2000q_freertos_a64"
# end of Freertos Configuration
#
@@ -26,8 +26,8 @@ CONFIG_USE_MMU=y
#
# CONFIG_TARGET_F2000_4 is not set
# CONFIG_TARGET_D2000 is not set
-# CONFIG_TARGET_E2000Q is not set
-CONFIG_TARGET_E2000D=y
+CONFIG_TARGET_E2000Q=y
+# CONFIG_TARGET_E2000D is not set
# CONFIG_TARGET_E2000S is not set
CONFIG_TARGET_E2000=y
CONFIG_DEFAULT_DEBUG_PRINT_UART1=y
@@ -57,6 +57,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_TIMER is not set
# CONFIG_USE_MIO is not set
CONFIG_USE_SDMMC=y
+# CONFIG_ENABLE_FSDMMC is not set
CONFIG_ENABLE_FSDIO=y
# CONFIG_USE_PCIE is not set
# CONFIG_USE_WDT is not set
@@ -68,6 +69,7 @@ CONFIG_ENABLE_FSDIO=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -108,6 +110,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -144,6 +155,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -165,12 +177,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-CONFIG_FREERTOS_USE_FSDIO=y
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -182,14 +188,32 @@ CONFIG_FREERTOS_USE_FSDIO=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -210,8 +234,32 @@ CONFIG_USE_SDMMC_CMD=y
#
# SDMMC Configuration
#
-CONFIG_SDMMC_PORT_FSDIO=y
+# CONFIG_SDMMC_USE_FSDMMC is not set
+CONFIG_SDMMC_USE_FSDIO=y
# end of SDMMC Configuration
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/sdio/sdkconfig.h b/example/peripheral/sdio/sdkconfig.h
index 36c7b85a45f3891e80a027430b15bc11612518a8..041cfb5eb49250f94280cf0762170fd1d8294906 100644
--- a/example/peripheral/sdio/sdkconfig.h
+++ b/example/peripheral/sdio/sdkconfig.h
@@ -3,7 +3,7 @@
/* Freertos Configuration */
-#define CONFIG_TARGET_NAME "e2000d_freertos_a64"
+#define CONFIG_TARGET_NAME "e2000q_freertos_a64"
/* end of Freertos Configuration */
/* Standalone Setting */
@@ -24,8 +24,8 @@
/* CONFIG_TARGET_F2000_4 is not set */
/* CONFIG_TARGET_D2000 is not set */
-/* CONFIG_TARGET_E2000Q is not set */
-#define CONFIG_TARGET_E2000D
+#define CONFIG_TARGET_E2000Q
+/* CONFIG_TARGET_E2000D is not set */
/* CONFIG_TARGET_E2000S is not set */
#define CONFIG_TARGET_E2000
#define CONFIG_DEFAULT_DEBUG_PRINT_UART1
@@ -52,6 +52,7 @@
/* CONFIG_USE_TIMER is not set */
/* CONFIG_USE_MIO is not set */
#define CONFIG_USE_SDMMC
+/* CONFIG_ENABLE_FSDMMC is not set */
#define CONFIG_ENABLE_FSDIO
/* CONFIG_USE_PCIE is not set */
/* CONFIG_USE_WDT is not set */
@@ -63,6 +64,7 @@
/* CONFIG_USE_ADC is not set */
/* CONFIG_USE_PWM is not set */
/* CONFIG_USE_IPC is not set */
+/* CONFIG_USE_MEDIA is not set */
/* end of Components Configuration */
#define CONFIG_USE_NEW_LIBC
/* end of Standalone Setting */
@@ -99,6 +101,12 @@
/* Compiler Options */
+/* Cross-Compiler Setting */
+
+#define CONFIG_GCC_OPTIMIZE_LEVEL 0
+/* CONFIG_USE_EXT_COMPILER is not set */
+/* CONFIG_USE_KLIN_SYS is not set */
+/* end of Cross-Compiler Setting */
#define CONFIG_OUTPUT_BINARY
/* end of Compiler Options */
/* end of Building Option */
@@ -128,6 +136,7 @@
/* Freertos Eth Drivers */
/* CONFIG_FREERTOS_USE_XMAC is not set */
+/* CONFIG_FREERTOS_USE_GMAC is not set */
/* end of Freertos Eth Drivers */
/* Freertos Gpio Drivers */
@@ -146,11 +155,6 @@
/* CONFIG_FREERTOS_USE_FGDMA is not set */
/* end of Freertos DMA Drivers */
-/* Freertos MMC Drivers */
-
-#define CONFIG_FREERTOS_USE_FSDIO
-/* end of Freertos MMC Drivers */
-
/* Freertos Adc Drivers */
/* CONFIG_FREERTOS_USE_ADC is not set */
@@ -160,13 +164,28 @@
/* CONFIG_FREERTOS_USE_CAN is not set */
/* end of Freertos Can Drivers */
+
+/* Freertos I2c Drivers */
+
+/* CONFIG_FREERTOS_USE_I2C is not set */
+/* end of Freertos I2c Drivers */
+
+/* Freertos Mio Drivers */
+
+/* CONFIG_FREERTOS_USE_MIO is not set */
+/* end of Freertos Mio Drivers */
+
+/* Freertos Timer Drivers */
+
+/* CONFIG_FREERTOS_USE_TIMER is not set */
+/* end of Freertos Timer Drivers */
/* end of Component Configuration */
-/* FreeRTOS Setting */
+/* Third-Party Configuration */
/* CONFIG_USE_LWIP is not set */
#define CONFIG_USE_BACKTRACE
-/* CONFIG_USE_FATFS is not set */
+/* CONFIG_USE_FATFS_0_1_4 is not set */
/* CONFIG_USE_SFUD is not set */
/* CONFIG_USE_SPIFFS is not set */
/* CONFIG_USE_AMP is not set */
@@ -184,9 +203,32 @@
/* SDMMC Configuration */
-#define CONFIG_SDMMC_PORT_FSDIO
+/* CONFIG_SDMMC_USE_FSDMMC is not set */
+#define CONFIG_SDMMC_USE_FSDIO
/* end of SDMMC Configuration */
/* CONFIG_USE_CHERRY_USB is not set */
-/* end of FreeRTOS Setting */
+/* end of Third-Party Configuration */
+
+/* Kernel Configuration */
+
+#define CONFIG_FREERTOS_OPTIMIZED_SCHEDULER
+#define CONFIG_FREERTOS_HZ 1000
+#define CONFIG_FREERTOS_MAX_PRIORITIES 32
+#define CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES 13
+#define CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES 11
+#define CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS 1
+#define CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE 1024
+#define CONFIG_FREERTOS_MAX_TASK_NAME_LEN 32
+#define CONFIG_FREERTOS_TIMER_TASK_PRIORITY 1
+#define CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH 2048
+#define CONFIG_FREERTOS_TIMER_QUEUE_LENGTH 10
+#define CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE 0
+#define CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS
+#define CONFIG_FREERTOS_USE_TRACE_FACILITY
+#define CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS
+/* CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set */
+#define CONFIG_FREERTOS_TOTAL_HEAP_SIZE 10240
+#define CONFIG_FREERTOS_TASK_FPU_SUPPORT 1
+/* end of Kernel Configuration */
#endif
diff --git a/example/peripheral/sdio/src/cmd_sd.c b/example/peripheral/sdio/src/cmd_sd.c
index 253adeb32b6e982660e93be1e5251071c07f2730..7f8578330bd27381fe112f671ce588cf529aef64 100644
--- a/example/peripheral/sdio/src/cmd_sd.c
+++ b/example/peripheral/sdio/src/cmd_sd.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: cmd_sd.c
* Date: 2022-07-12 09:33:12
* LastEditTime: 2022-07-12 09:33:12
- * Description: This files is for
- *
- * Modify History:
+ * Description: This file is for providing user command functions.
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
+ * 1.0 zhugengyu 2022/8/26 first commit
*/
/***************************** Include Files *********************************/
#include
@@ -43,9 +44,9 @@
/*****************************************************************************/
static void SdCmdUsage()
{
- printf("usage:\r\n");
+ printf("Usage:\r\n");
printf(" sd wr \r\n");
- printf(" -- demo read and write by sdmmc\r\n");
+ printf(" -- Demo read and write by sdmmc\r\n");
}
static int SdCmdEntry(int argc, char *argv[])
@@ -53,14 +54,14 @@ static int SdCmdEntry(int argc, char *argv[])
int ret = 0;
if (argc < 2)
- {
- SdCmdUsage();
+ {
+ SdCmdUsage();
return -1;
- }
-
+ }
+
if (!strcmp(argv[1], "wr"))
{
- u32 sdio_id = FSDIO_HOST_INSTANCE_1;
+ u32 sdio_id = FSDIO1_ID;
boolean is_emmc = FALSE;
u32 start_blk = 0U;
u32 blk_num = 2U;
@@ -84,17 +85,19 @@ static int SdCmdEntry(int argc, char *argv[])
if (argc > 4)
{
- start_blk = (u32)simple_strtoul(argv[4], NULL, 10);
+ start_blk = (u32)simple_strtoul(argv[4], NULL, 10);
}
if (argc > 5)
{
- blk_num = (u32)simple_strtoul(argv[5], NULL, 10);
+ blk_num = (u32)simple_strtoul(argv[5], NULL, 10);
}
BaseType_t task_ret = FFreeRTOSSdWriteRead(sdio_id, is_emmc, start_blk, blk_num);
if (pdPASS != task_ret)
- return -2;
+ {
+ return -2;
+ }
}
return 0;
diff --git a/example/peripheral/sdio/src/sd_read_write.c b/example/peripheral/sdio/src/sd_read_write.c
index 61a81f3122c7e4523b2a1726c4d16436534ddf17..d92790cbb082b1f3cb419b6abffb25d8ab1b8e6d 100644
--- a/example/peripheral/sdio/src/sd_read_write.c
+++ b/example/peripheral/sdio/src/sd_read_write.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: sd_read_write.c
* Date: 2022-07-25 15:58:24
* LastEditTime: 2022-07-25 15:58:25
- * Description: This files is for
- *
- * Modify History:
+ * Description: This file is for providing functions used in cmd_sd.c file.
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
+ * 1.0 zhugengyu 2022/8/26 first commit
*/
/***************************** Include Files *********************************/
#include
@@ -26,6 +27,7 @@
#include "FreeRTOS.h"
#include "task.h"
+#include "event_groups.h"
#include "fassert.h"
#include "fdebug.h"
@@ -33,45 +35,41 @@
#include "fkernel.h"
#include "fcache.h"
-#include "fsdio_os.h"
+#include "sdmmc_host_os.h"
/************************** Constant Definitions *****************************/
#define SD_WR_BUF_LEN 4096
#define SD_EVT_INIT_DONE (0x1 << 0)
#define SD_EVT_WRITE_DONE (0x1 << 1)
#define SD_EVT_READ_DONE (0x1 << 2)
+/**************************** Type Definitions *******************************/
+typedef struct
+{
+ sdmmc_host_instance_t *cur_host;
+ sdmmc_host_config_t *cur_host_config;
+ fsize_t start_blk;
+ fsize_t block_num;
+} SdioTestInfo;
/************************** Variable Definitions *****************************/
static u8 sd_write_buffer[SD_WR_BUF_LEN] = {0};
static u8 sd_read_buffer[SD_WR_BUF_LEN] = {0};
+
+static sdmmc_host_instance_t tf_host;
+static sdmmc_host_config_t tf_host_config;
+static sdmmc_host_instance_t emmc_host;
+static sdmmc_host_config_t emmc_host_config;
+static SdioTestInfo test_info =
+{
+ .cur_host = &tf_host,
+ .cur_host_config = &tf_host_config,
+ .start_blk = 0U,
+ .block_num = 4U
+};
+
static u32 sd_slot = 0U;
static EventGroupHandle_t sync = NULL;
static TaskHandle_t write_task = NULL;
-static TaskHandle_t read_task = NULL;
static TimerHandle_t exit_timer = NULL;
-static FFreeRTOSSdio *sdio = NULL;
-static FFreeRTOSSdioConifg sdio_config =
-{
- .en_dma = TRUE,
- .medium_type = FFREERTOS_SDIO_MEDIUM_TF,
- .card_detect_handler = NULL,
- .card_detect_args = NULL
-};
-static FFreeRTOSSdioMessage read_message =
-{
- .buf = sd_read_buffer,
- .buf_len = SD_WR_BUF_LEN,
- .start_block = 0U,
- .block_num = 3U,
- .trans_type = FFREERTOS_SDIO_TRANS_READ
-};
-static FFreeRTOSSdioMessage write_message =
-{
- .buf = sd_write_buffer,
- .buf_len = SD_WR_BUF_LEN,
- .start_block = 0U,
- .block_num = 3U,
- .trans_type = FFREERTOS_SDIO_TRANS_WRITE
-};
-static u32 run_times = 3U;
+static u32 run_times = 2U;
static boolean is_running = FALSE;
/***************** Macros (Inline Functions) Definitions *********************/
#define FSDIO_DEBUG_TAG "FSDIO-SD"
@@ -86,7 +84,7 @@ static boolean is_running = FALSE;
static void SDExitCallback(TimerHandle_t timer)
{
FError err = FT_SUCCESS;
- printf("exiting.....\r\n");
+ printf("Exiting.....\r\n");
if (write_task)
{
@@ -94,31 +92,19 @@ static void SDExitCallback(TimerHandle_t timer)
write_task = NULL;
}
- if (read_task)
- {
- vTaskDelete(read_task);
- read_task = NULL;
- }
-
if (sync)
{
vEventGroupDelete(sync);
sync = NULL;
}
- if (sdio)
- {
- err = FFreeRTOSSdioDeInit(sdio);
- sdio = NULL;
- }
-
if (pdPASS != xTimerDelete(timer, 0)) /* delete timer ifself */
{
- FSDIO_ERROR("delete exit timer failed !!!");
+ FSDIO_ERROR("Delete exit timer failed.");
exit_timer = NULL;
}
- is_running = FALSE;
+ is_running = FALSE;
}
static void SDSendEvent(u32 evt_bits)
@@ -126,7 +112,7 @@ static void SDSendEvent(u32 evt_bits)
FASSERT(sync);
BaseType_t x_result = pdFALSE;
- FSDIO_DEBUG("ack evt 0x%x", evt_bits);
+ FSDIO_DEBUG("Ack evt 0x%x", evt_bits);
x_result = xEventGroupSetBits(sync, evt_bits);
}
@@ -144,104 +130,84 @@ static boolean SDWaitEvent(u32 evt_bits, TickType_t wait_delay)
return FALSE;
}
-static void SDInitTask(void * args)
+static void SDInitTask(void *args)
{
- sdio = FFreeRTOSSdioInit(sd_slot, &sdio_config);
- if (NULL == sdio)
+ if (SDMMC_OK != sdmmc_host_init(test_info.cur_host, test_info.cur_host_config))
{
- FSDIO_ERROR("init sdio failed !!!");
+ FSDIO_ERROR("Init sdio failed.");
goto task_exit;
}
SDSendEvent(SD_EVT_INIT_DONE);
task_exit:
- vTaskDelete(NULL); /* delete task itself */
+ vTaskDelete(NULL); /* delete task itself */
}
-static void SDReadTask(void * args)
+static void SDWriteReadTask(void *args)
{
u32 times = 0U;
- const TickType_t wait_delay = pdMS_TO_TICKS(5000UL); /* wait for 5 seconds */
- const uintptr trans_len = read_message.block_num * FFREERTOS_SDIO_BLOCK_SIZE;
+ const TickType_t wait_delay = pdMS_TO_TICKS(2000UL); /* wait for 2 seconds */
+ FError err;
+ const uintptr trans_len = test_info.block_num * 512U;
+ char ch = 'A';
- FASSERT_MSG(trans_len <= SD_WR_BUF_LEN, "trans length exceed buffer limits");
-
- for (;;)
+ if (trans_len > SD_WR_BUF_LEN)
{
- /* wait write finish to get the updated contents */
- if (!SDWaitEvent(SD_EVT_WRITE_DONE, portMAX_DELAY))
- {
- FSDIO_ERROR("sdio read timeout !!!");
- goto task_exit;
- }
+ FSDIO_ERROR("Trans length exceeds the buffer limits.");
+ goto task_exit;
+ }
- printf("start read ...\r\n");
+ SDWaitEvent(SD_EVT_INIT_DONE, portMAX_DELAY);
- memset(read_message.buf, 0U, trans_len);
- FError err = FFreeRTOSSdioTransfer(sdio, &read_message);
- if (FFREERTOS_SDIO_OK != err)
+ for (;;)
+ {
+ printf("Start reading ...\r\n");
+ memset(sd_read_buffer, 0U, trans_len);
+ if (SDMMC_OK != sdmmc_os_read_sectors(&(test_info.cur_host->card),
+ sd_read_buffer,
+ test_info.start_blk,
+ test_info.block_num))
{
- FSDIO_ERROR("sdio read failed !!!");
+ FSDIO_ERROR("Sdio read failed.");
goto task_exit;
}
- FCacheDCacheFlushRange((uintptr)(void *)read_message.buf, trans_len);
- printf("==>Read from Block [%d:%d]\r\n",
- read_message.start_block,
- read_message.start_block + read_message.block_num);
-
- FtDumpHexByte(read_message.buf, trans_len);
-
- SDSendEvent(SD_EVT_READ_DONE); /* send read finish singal */
- vTaskDelay(wait_delay);
+ FCacheDCacheFlushRange((uintptr)(void *)sd_read_buffer, trans_len);
+ printf("==>Read from Block [%d:%d]\r\n",
+ test_info.start_blk,
+ test_info.start_blk + test_info.block_num);
- if (++times > run_times)
- break;
- }
+ FtDumpHexByte(sd_read_buffer, min(trans_len, (fsize_t)(2 * 512U)));
-task_exit:
- printf("exit from read task \r\n");
- vTaskSuspend(NULL); /* suspend task */
-}
-
-static void SDWriteTask(void * args)
-{
- u32 times = 0U;
- const TickType_t wait_delay = pdMS_TO_TICKS(2000UL); /* wait for 2 seconds */
- FError err;
- const uintptr trans_len = write_message.block_num * FFREERTOS_SDIO_BLOCK_SIZE;
- char ch = 'A';
+ /*************************************************************/
- FASSERT_MSG(trans_len <= SD_WR_BUF_LEN, "trans length exceed buffer limits");
- SDWaitEvent(SD_EVT_INIT_DONE, portMAX_DELAY);
+ printf("Start writing ...\r\n");
+ memset(sd_write_buffer, (ch + times), trans_len);
+ printf("==>Write %c to Block [%d:%d]\r\n",
+ ch,
+ test_info.start_blk,
+ test_info.start_blk + test_info.block_num);
- for (;;)
- {
- printf("start write ...\r\n");
- memset(write_message.buf, (ch + times), trans_len);
- FCacheDCacheInvalidateRange((uintptr)(void *)write_message.buf, trans_len);
- printf("==>Write %c to Block [%d:%d]\r\n",
- ch, write_message.start_block,
- write_message.start_block + write_message.block_num);
-
- err = FFreeRTOSSdioTransfer(sdio, &write_message);
- if (FFREERTOS_SDIO_OK != err)
+ if (SDMMC_OK != sdmmc_os_write_sectors(&(test_info.cur_host->card),
+ sd_write_buffer,
+ test_info.start_blk,
+ test_info.block_num))
{
- FSDIO_ERROR("sdio write failed !!!");
+ FSDIO_ERROR("Sdio write failed.");
goto task_exit;
}
- SDSendEvent(SD_EVT_WRITE_DONE); /* send write finish signal */
vTaskDelay(wait_delay);
- SDWaitEvent(SD_EVT_READ_DONE, portMAX_DELAY); /* wait until read done and go on next write */
if (++times > run_times)
+ {
break;
+ }
}
task_exit:
- printf("exit from write task \r\n");
+ printf("Exit from write task.\r\n");
vTaskSuspend(NULL); /* suspend task */
}
@@ -252,65 +218,59 @@ BaseType_t FFreeRTOSSdWriteRead(u32 slot_id, boolean is_emmc, u32 start_blk, u32
if (is_running)
{
- FSDIO_ERROR("task is running !!!!");
+ FSDIO_ERROR("Task is running.");
return pdPASS;
}
is_running = TRUE;
- printf("sd write read task\r\n");
+ printf("This is sd write read task.\r\n");
+
+ FASSERT_MSG(NULL == sync, "Event group exists.");
+ FASSERT_MSG((sync = xEventGroupCreate()) != NULL, "Create event group failed.");
- FASSERT_MSG(NULL == sync, "event group exists !!!");
- FASSERT_MSG((sync = xEventGroupCreate()) != NULL, "create event group failed !!!");
+ test_info.cur_host = is_emmc ? &emmc_host : &tf_host;
+ test_info.cur_host_config = is_emmc ? &emmc_host_config : &tf_host_config;
- sd_slot = slot_id;
- sdio_config.medium_type = is_emmc ? FFREERTOS_SDIO_MEDIUM_EMMC: FFREERTOS_SDIO_MEDIUM_TF;
+ test_info.cur_host_config->slot = slot_id;
+ test_info.cur_host_config->type = SDMMC_HOST_TYPE_FSDIO;
+ test_info.cur_host_config->flags = SDMMC_HOST_WORK_MODE_DMA | SDMMC_HOST_WORK_MODE_IRQ;
+ test_info.cur_host_config->flags |= is_emmc ? 0U : SDMMC_HOST_REMOVABLE_CARD;
- read_message.start_block = start_blk;
- read_message.block_num = blk_num;
- write_message.start_block = start_blk;
- write_message.block_num = blk_num;
+ test_info.start_blk = start_blk;
+ test_info.block_num = blk_num;
taskENTER_CRITICAL(); /* no schedule when create task */
- ret = xTaskCreate((TaskFunction_t )SDInitTask,
- (const char* )"SDInitTask",
- (uint16_t )2048,
- NULL,
- (UBaseType_t )configMAX_PRIORITIES - 1,
- NULL);
- FASSERT_MSG(pdPASS == ret, "create task failed");
-
- ret = xTaskCreate((TaskFunction_t )SDWriteTask,
- (const char* )"SDWriteTask",
- (uint16_t )2048,
- NULL,
- (UBaseType_t )configMAX_PRIORITIES - 2,
- &write_task);
-
- FASSERT_MSG(pdPASS == ret, "create task failed");
-
- ret = xTaskCreate((TaskFunction_t )SDReadTask,
- (const char* )"SDReadTask",
- (uint16_t )2048,
- NULL,
- (UBaseType_t )configMAX_PRIORITIES - 2,
- &read_task);
-
- FASSERT_MSG(pdPASS == ret, "create task failed");
-
- exit_timer = xTimerCreate("Exit-Timer", /* Text name for the software timer - not used by FreeRTOS. */
- total_run_time, /* The software timer's period in ticks. */
- pdFALSE, /* Setting uxAutoRealod to pdFALSE creates a one-shot software timer. */
- NULL, /* use timer id to pass task data for reference. */
- SDExitCallback); /* The callback function to be used by the software timer being created. */
-
- FASSERT_MSG(NULL != exit_timer, "create exit timer failed");
+ ret = xTaskCreate((TaskFunction_t)SDInitTask,
+ (const char *)"SDInitTask",
+ (uint16_t)2048,
+ NULL,
+ (UBaseType_t)configMAX_PRIORITIES - 1,
+ NULL);
+ FASSERT_MSG(pdPASS == ret, "Create task failed.");
+
+ ret = xTaskCreate((TaskFunction_t)SDWriteReadTask,
+ (const char *)"SDWriteReadTask",
+ (uint16_t)2048,
+ NULL,
+ (UBaseType_t)configMAX_PRIORITIES - 2,
+ &write_task);
+
+ FASSERT_MSG(pdPASS == ret, "Create task failed.");
+
+ exit_timer = xTimerCreate("Exit-Timer", /* Text name for the software timer - not used by FreeRTOS. */
+ total_run_time, /* The software timer's period in ticks. */
+ pdFALSE, /* Setting uxAutoRealod to pdFALSE creates a one-shot software timer. */
+ NULL, /* use timer id to pass task data for reference. */
+ SDExitCallback); /* The callback function to be used by the software timer being created. */
+
+ FASSERT_MSG(NULL != exit_timer, "Create exit timer failed.");
taskEXIT_CRITICAL(); /* allow schedule since task created */
ret = xTimerStart(exit_timer, 0); /* start */
- FASSERT_MSG(pdPASS == ret, "start exit timer failed");
+ FASSERT_MSG(pdPASS == ret, "Start exit timer failed.");
return ret;
}
\ No newline at end of file
diff --git a/example/peripheral/spi/README.md b/example/peripheral/spi/README.md
index 4db99f5cac2ec01bd080ede933a5e246c18383b9..aeb88f3e690bac7d477685345b43aac77106dd03 100644
--- a/example/peripheral/spi/README.md
+++ b/example/peripheral/spi/README.md
@@ -108,7 +108,7 @@ sf probe
- 初始化成功后,在flash的偏移量0x20位置,写入一段不带空格的连续字符串,如‘write-spi-nor-flash-from-freertos-sfud’
```
-sf write 0x10 ‘write-spi-nor-flash-from-freertos-sfud’
+sf write 0x10 "write-spi-nor-flash-from-freertos-sfud"
```
- 写入成功后,从flash的偏移量0x0开始,读取64个字节
diff --git a/example/peripheral/spi/configs/e2000d_aarch32_eg_configs b/example/peripheral/spi/configs/e2000d_aarch32_eg_configs
index c014aa05a1570e11b384986e28d23e8baeeb01a2..b0cc925415a86b17304fe0e9ebe5e6ab85a272d9 100644
--- a/example/peripheral/spi/configs/e2000d_aarch32_eg_configs
+++ b/example/peripheral/spi/configs/e2000d_aarch32_eg_configs
@@ -68,6 +68,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -112,6 +113,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -148,6 +158,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -169,12 +180,6 @@ CONFIG_FREERTOS_USE_FSPIM=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -186,20 +191,38 @@ CONFIG_FREERTOS_USE_FSPIM=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
CONFIG_USE_SFUD=y
#
# SFUD Configuration
#
-# CONFIG_SFUD_CTRL_FSPIM is not set
+CONFIG_SFUD_CTRL_FSPIM=y
# CONFIG_SFUD_CTRL_FQSPI is not set
# end of SFUD Configuration
@@ -219,4 +242,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
# CONFIG_USE_TLSF is not set
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/spi/configs/e2000d_aarch64_eg_configs b/example/peripheral/spi/configs/e2000d_aarch64_eg_configs
index 956cb09a9a9c96e5e99681b97d526f35dc0e2271..b047f3081f4e966a1fee48836c63483474e13358 100644
--- a/example/peripheral/spi/configs/e2000d_aarch64_eg_configs
+++ b/example/peripheral/spi/configs/e2000d_aarch64_eg_configs
@@ -68,6 +68,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -108,6 +109,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -144,6 +154,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -165,12 +176,6 @@ CONFIG_FREERTOS_USE_FSPIM=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -182,14 +187,32 @@ CONFIG_FREERTOS_USE_FSPIM=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
CONFIG_USE_SFUD=y
#
@@ -215,4 +238,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/spi/figs/wr_rd.png b/example/peripheral/spi/figs/wr_rd.png
index 9ad3d211748dc479a956f12754d7b8987fe35abe..a308c4fe85df23803b3f9fc9f7df6b82d249c8e9 100644
Binary files a/example/peripheral/spi/figs/wr_rd.png and b/example/peripheral/spi/figs/wr_rd.png differ
diff --git a/example/peripheral/spi/inc/sfud_read_write.h b/example/peripheral/spi/inc/sfud_read_write.h
index 58bfb95a4d9602b09315bb64386332db6dba52ac..b6e0ba1e9ddf5f3ad3aca9f2ee117c8b1ce9e7c3 100644
--- a/example/peripheral/spi/inc/sfud_read_write.h
+++ b/example/peripheral/spi/inc/sfud_read_write.h
@@ -1,27 +1,28 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: sfud_read_write.h
* Date: 2022-07-18 16:43:35
* LastEditTime: 2022-07-18 16:43:35
- * Description: This files is for
- *
- * Modify History:
+ * Description: This file is for providing some sfud apis.
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
+ * 1.0 zhugengyu 2022/8/26 first commit
*/
-#ifndef EXAMPLE_SFUD_READ_WRITE_H
-#define EXAMPLE_SFUD_READ_WRITE_H
+#ifndef SFUD_READ_WRITE_H
+#define SFUD_READ_WRITE_H
#ifdef __cplusplus
extern "C"
diff --git a/example/peripheral/spi/main.c b/example/peripheral/spi/main.c
index 0cfd40628e07af176590ef3486feebf39d0decd7..5a9258ce8dcf738f8f5f8e9a76bcd88a6535e567 100644
--- a/example/peripheral/spi/main.c
+++ b/example/peripheral/spi/main.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: main.c
* Date: 2022-06-17 08:17:59
* LastEditTime: 2022-06-17 08:17:59
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
+ * Description: This file is for spi test main entry.
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 zhugengyu 2022/8/26 first commit
*/
#include "shell.h"
@@ -29,30 +30,32 @@ int main(void)
{
BaseType_t ret;
- printf("enter main function \r\n");
+ printf("Entering into main function \r\n");
ret = LSUserShellTask() ;
- if(ret != pdPASS)
+ if (ret != pdPASS)
+ {
goto FAIL_EXIT;
+ }
/*
ret = FFreeRTOSSfudInit();
if(ret != pdPASS)
goto FAIL_EXIT;
-
+
ret = FFreeRTOSSfudWrite(0x20, "hello-sfud");
if(ret != pdPASS)
goto FAIL_EXIT;
-
+
ret = FFreeRTOSSfudRead(0x20);
if(ret != pdPASS)
goto FAIL_EXIT;
*/
- vTaskStartScheduler(); /* 启动任务,开启调度 */
+ vTaskStartScheduler(); /* 启动任务,开启调度 */
while (1); /* 正常不会执行到这里 */
-
+
FAIL_EXIT:
- printf("failed 0x%x \r\n", ret);
+ printf("Failed,the ret value is 0x%x. \r\n", ret);
return 0;
}
diff --git a/example/peripheral/spi/sdkconfig b/example/peripheral/spi/sdkconfig
index 956cb09a9a9c96e5e99681b97d526f35dc0e2271..b047f3081f4e966a1fee48836c63483474e13358 100644
--- a/example/peripheral/spi/sdkconfig
+++ b/example/peripheral/spi/sdkconfig
@@ -68,6 +68,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -108,6 +109,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -144,6 +154,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -165,12 +176,6 @@ CONFIG_FREERTOS_USE_FSPIM=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -182,14 +187,32 @@ CONFIG_FREERTOS_USE_FSPIM=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
CONFIG_USE_SFUD=y
#
@@ -215,4 +238,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/spi/sdkconfig.h b/example/peripheral/spi/sdkconfig.h
index 239ec2a748d85f6b810ecc1ac5827a6864b59f1f..76f830e3b9123f70bfd52788b30f98be36d6428c 100644
--- a/example/peripheral/spi/sdkconfig.h
+++ b/example/peripheral/spi/sdkconfig.h
@@ -63,6 +63,7 @@
/* CONFIG_USE_ADC is not set */
/* CONFIG_USE_PWM is not set */
/* CONFIG_USE_IPC is not set */
+/* CONFIG_USE_MEDIA is not set */
/* end of Components Configuration */
#define CONFIG_USE_NEW_LIBC
/* end of Standalone Setting */
@@ -99,6 +100,12 @@
/* Compiler Options */
+/* Cross-Compiler Setting */
+
+#define CONFIG_GCC_OPTIMIZE_LEVEL 0
+/* CONFIG_USE_EXT_COMPILER is not set */
+/* CONFIG_USE_KLIN_SYS is not set */
+/* end of Cross-Compiler Setting */
#define CONFIG_OUTPUT_BINARY
/* end of Compiler Options */
/* end of Building Option */
@@ -128,6 +135,7 @@
/* Freertos Eth Drivers */
/* CONFIG_FREERTOS_USE_XMAC is not set */
+/* CONFIG_FREERTOS_USE_GMAC is not set */
/* end of Freertos Eth Drivers */
/* Freertos Gpio Drivers */
@@ -146,11 +154,6 @@
/* CONFIG_FREERTOS_USE_FGDMA is not set */
/* end of Freertos DMA Drivers */
-/* Freertos MMC Drivers */
-
-/* CONFIG_FREERTOS_USE_FSDIO is not set */
-/* end of Freertos MMC Drivers */
-
/* Freertos Adc Drivers */
/* CONFIG_FREERTOS_USE_ADC is not set */
@@ -160,13 +163,28 @@
/* CONFIG_FREERTOS_USE_CAN is not set */
/* end of Freertos Can Drivers */
+
+/* Freertos I2c Drivers */
+
+/* CONFIG_FREERTOS_USE_I2C is not set */
+/* end of Freertos I2c Drivers */
+
+/* Freertos Mio Drivers */
+
+/* CONFIG_FREERTOS_USE_MIO is not set */
+/* end of Freertos Mio Drivers */
+
+/* Freertos Timer Drivers */
+
+/* CONFIG_FREERTOS_USE_TIMER is not set */
+/* end of Freertos Timer Drivers */
/* end of Component Configuration */
-/* FreeRTOS Setting */
+/* Third-Party Configuration */
/* CONFIG_USE_LWIP is not set */
#define CONFIG_USE_BACKTRACE
-/* CONFIG_USE_FATFS is not set */
+/* CONFIG_USE_FATFS_0_1_4 is not set */
#define CONFIG_USE_SFUD
/* SFUD Configuration */
@@ -188,6 +206,28 @@
#define CONFIG_USE_TLSF
/* CONFIG_USE_SDMMC_CMD is not set */
/* CONFIG_USE_CHERRY_USB is not set */
-/* end of FreeRTOS Setting */
+/* end of Third-Party Configuration */
+
+/* Kernel Configuration */
+
+#define CONFIG_FREERTOS_OPTIMIZED_SCHEDULER
+#define CONFIG_FREERTOS_HZ 1000
+#define CONFIG_FREERTOS_MAX_PRIORITIES 32
+#define CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES 13
+#define CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES 11
+#define CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS 1
+#define CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE 1024
+#define CONFIG_FREERTOS_MAX_TASK_NAME_LEN 32
+#define CONFIG_FREERTOS_TIMER_TASK_PRIORITY 1
+#define CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH 2048
+#define CONFIG_FREERTOS_TIMER_QUEUE_LENGTH 10
+#define CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE 0
+#define CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS
+#define CONFIG_FREERTOS_USE_TRACE_FACILITY
+#define CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS
+/* CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set */
+#define CONFIG_FREERTOS_TOTAL_HEAP_SIZE 10240
+#define CONFIG_FREERTOS_TASK_FPU_SUPPORT 1
+/* end of Kernel Configuration */
#endif
diff --git a/example/peripheral/spi/src/cmd_sf.c b/example/peripheral/spi/src/cmd_sf.c
index 224ef0c400d5af4ed176c14d673555b80cd3e185..6913d436aced7e88f73be07696f0d0d7cebccbdb 100644
--- a/example/peripheral/spi/src/cmd_sf.c
+++ b/example/peripheral/spi/src/cmd_sf.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: cmd_sf.c
* Date: 2022-07-12 09:33:12
* LastEditTime: 2022-07-12 09:33:12
- * Description: This files is for
- *
- * Modify History:
+ * Description: This file is for providing user command functions.
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
+ * 1.0 zhugengyu 2022/8/26 first commit
*/
/***************************** Include Files *********************************/
#include
@@ -43,11 +44,11 @@
/*****************************************************************************/
static void SfudCmdUsage()
{
- printf("usage:\r\n");
- printf(" sf probe\r\n");
- printf(" -- probe and init SPI flash\r\n");
+ printf("Usage:\r\n");
+ printf(" sf probe\r\n");
+ printf(" -- Probe and init SPI flash\r\n");
printf(" sf rw \r\n");
- printf(" -- demo read and write by sfud\r\n");
+ printf(" -- Demo read and write by sfud\r\n");
}
static int SfudCmdEntry(int argc, char *argv[])
@@ -56,11 +57,11 @@ static int SfudCmdEntry(int argc, char *argv[])
static boolean inited = FALSE;
if (argc < 2)
- {
- SfudCmdUsage();
+ {
+ SfudCmdUsage();
return -1;
- }
-
+ }
+
if ((FALSE == inited) || (!strcmp(argv[1], "probe")))
{
if (pdPASS != FFreeRTOSSfudInit())
@@ -70,19 +71,21 @@ static int SfudCmdEntry(int argc, char *argv[])
inited = TRUE;
}
-
+
if (!strcmp(argv[1], "read"))
{
u32 in_chip_addr = 0x0;
if (argc > 2)
{
- in_chip_addr = (u32)simple_strtoul(argv[2], NULL, 16);
+ in_chip_addr = (u32)simple_strtoul(argv[2], NULL, 16);
}
BaseType_t task_ret = FFreeRTOSSfudRead(in_chip_addr);
if (pdPASS != task_ret)
+ {
return -2;
+ }
}
else if (!strcmp(argv[1], "write"))
{
@@ -91,7 +94,7 @@ static int SfudCmdEntry(int argc, char *argv[])
if (argc > 2)
{
- in_chip_addr = (u32)simple_strtoul(argv[2], NULL, 16);
+ in_chip_addr = (u32)simple_strtoul(argv[2], NULL, 16);
}
if (argc > 3)
@@ -101,7 +104,9 @@ static int SfudCmdEntry(int argc, char *argv[])
BaseType_t task_ret = FFreeRTOSSfudWrite(in_chip_addr, wr_str);
if (pdPASS != task_ret)
- return -2;
+ {
+ return -2;
+ }
}
return 0;
diff --git a/example/peripheral/spi/src/sfud_read_write.c b/example/peripheral/spi/src/sfud_read_write.c
index b8f6839af0bf732fe363214a21710473f1f77f51..3d4723dcf22f5b97c8bfd08886b9d9cd6b9697f2 100644
--- a/example/peripheral/spi/src/sfud_read_write.c
+++ b/example/peripheral/spi/src/sfud_read_write.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: sfud_read_write.c
* Date: 2022-07-12 09:53:00
* LastEditTime: 2022-07-12 09:53:02
- * Description: This files is for
- *
- * Modify History:
+ * Description: This file is for providing functions used in cmd_sf.c file.
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
+ * 1.0 zhugengyu 2022/8/26 first commit
*/
/***************************** Include Files *********************************/
#include
@@ -35,7 +36,7 @@
/************************** Constant Definitions *****************************/
#define SFUD_WR_BUF_LEN 64
-#define SFUD_FLASH_INDEX SFUD_FSPIM2_INDEX
+#define SFUD_FLASH_INDEX SFUD_FSPIM2_INDEX
/************************** Variable Definitions *****************************/
static u32 flash_addr = 0x0;
@@ -50,24 +51,26 @@ static u8 flash_buffer[SFUD_WR_BUF_LEN];
/************************** Function Prototypes ******************************/
/*****************************************************************************/
-static void SfudInitTask(void * args)
+static void SfudInitTask(void *args)
{
sfud_err sfud_ret = sfud_init();
if (SFUD_SUCCESS != sfud_ret)
+ {
goto task_exit;
+ }
const sfud_flash *flash = sfud_get_device(SFUD_FLASH_INDEX);
if (NULL == flash)
{
- FSPIM_ERROR("flash not found !!!");
+ FSPIM_ERROR("Flash not found.");
goto task_exit;
}
/* print flash info */
- printf("flash %s is found !!!!\r\n", flash->name);
+ printf("Flash %s is found.\r\n", flash->name);
printf(" manufacturer id: 0x%x \r\n", flash->chip.mf_id);
printf(" memory-type id: 0x%x \r\n", flash->chip.type_id);
- printf(" capacity id: 0x%x \r\n", flash->chip.capacity_id);
+ printf(" capacity id: 0x%x \r\n", flash->chip.capacity_id);
if (flash->chip.capacity < SZ_1M)
{
@@ -75,16 +78,16 @@ static void SfudInitTask(void * args)
}
else
{
- printf(" cacpity: %d MB\r\n", flash->chip.capacity / SZ_1M);
+ printf(" cacpity: %d MB\r\n", flash->chip.capacity / SZ_1M);
}
- printf(" erase granularity: %d Bytes\r\n", flash->chip.erase_gran);
+ printf(" Erase granularity: %d Bytes\r\n", flash->chip.erase_gran);
task_exit:
- vTaskDelete(NULL); /* delete task itself */
+ vTaskDelete(NULL); /* delete task itself */
}
-static void SfudWriteTask(void * args)
+static void SfudWriteTask(void *args)
{
sfud_err sfud_ret;
u32 in_chip_addr = flash_addr;
@@ -95,7 +98,7 @@ static void SfudWriteTask(void * args)
flash = sfud_get_device(SFUD_FLASH_INDEX);
if (NULL == flash)
{
- FSPIM_ERROR("flash not found!!!");
+ FSPIM_ERROR("Flash not found.");
goto task_exit;
}
@@ -103,25 +106,25 @@ static void SfudWriteTask(void * args)
sfud_ret = sfud_write_status(flash, TRUE, status);
if (SFUD_SUCCESS != sfud_ret)
{
- FSPIM_ERROR("write flash status failed !!!");
+ FSPIM_ERROR("Write flash status failed.");
goto task_exit;
- }
+ }
/* get flash status */
sfud_ret = sfud_read_status(flash, &status);
if (SFUD_SUCCESS != sfud_ret)
{
- FSPIM_ERROR("read flash status failed !!!");
+ FSPIM_ERROR("Read flash status failed.");
goto task_exit;
}
else
{
- printf("flash status: 0x%x\r\n", status);
+ printf("Flash status: 0x%x\r\n", status);
}
/* write to flash */
taskENTER_CRITICAL(); /* no schedule when printf bulk */
- printf("data to write @0x%x...\r\n", in_chip_addr);
+ printf("Data to write @0x%x...\r\n", in_chip_addr);
FtDumpHexByte(write_buf, SFUD_WR_BUF_LEN);
taskEXIT_CRITICAL();
@@ -129,14 +132,14 @@ static void SfudWriteTask(void * args)
sfud_ret = sfud_erase(flash, in_chip_addr, SFUD_WR_BUF_LEN);
if (SFUD_SUCCESS != sfud_ret)
{
- FSPIM_ERROR("erase flash failed !!!");
+ FSPIM_ERROR("Erase flash failed.");
goto task_exit;
}
sfud_ret = sfud_write(flash, in_chip_addr, SFUD_WR_BUF_LEN, write_buf);
if (SFUD_SUCCESS != sfud_ret)
{
- FSPIM_ERROR("write flash failed !!!");
+ FSPIM_ERROR("Write flash failed.");
goto task_exit;
}
@@ -144,7 +147,7 @@ task_exit:
vTaskDelete(NULL); /* delete task itself */
}
-static void SfudReadTask(void * args)
+static void SfudReadTask(void *args)
{
sfud_err sfud_ret;
u32 in_chip_addr = flash_addr;
@@ -155,7 +158,7 @@ static void SfudReadTask(void * args)
flash = sfud_get_device(SFUD_FLASH_INDEX);
if (NULL == flash)
{
- FSPIM_ERROR("flash not found!!!");
+ FSPIM_ERROR("Flash not found.");
goto task_exit;
}
@@ -163,12 +166,12 @@ static void SfudReadTask(void * args)
sfud_ret = sfud_read_status(flash, &status);
if (SFUD_SUCCESS != sfud_ret)
{
- FSPIM_ERROR("read flash status failed !!!");
+ FSPIM_ERROR("Read flash status failed.");
goto task_exit;
}
else
{
- printf("flash status: 0x%x\r\n", status);
+ printf("Flash status: 0x%x\r\n", status);
}
/* read from flash */
@@ -176,12 +179,12 @@ static void SfudReadTask(void * args)
sfud_ret = sfud_read(flash, in_chip_addr, SFUD_WR_BUF_LEN, read_buf);
if (SFUD_SUCCESS != sfud_ret)
{
- FSPIM_ERROR("read flash failed !!!");
+ FSPIM_ERROR("Read flash failed.");
goto task_exit;
}
taskENTER_CRITICAL(); /* no schedule when printf bulk */
- printf("data read from flash @0x%x...\r\n", in_chip_addr);
+ printf("Data read from flash @0x%x...\r\n", in_chip_addr);
FtDumpHexByte(read_buf, SFUD_WR_BUF_LEN);
taskEXIT_CRITICAL();
@@ -192,31 +195,31 @@ task_exit:
BaseType_t FFreeRTOSSfudRead(u32 in_chip_addr)
{
BaseType_t xReturn = pdPASS;
-
- printf("sfud read task\r\n");
-
+
+ printf("This is sfud read task.\r\n");
+
memset(flash_buffer, 0, sizeof(flash_buffer));
flash_addr = in_chip_addr;
taskENTER_CRITICAL(); /* no schedule when create task */
- xReturn = xTaskCreate((TaskFunction_t )SfudReadTask,
- (const char* )"SfudReadTask",
- (uint16_t )2048,
- NULL,
- (UBaseType_t )configMAX_PRIORITIES - 1,
- NULL);
-
+ xReturn = xTaskCreate((TaskFunction_t)SfudReadTask,
+ (const char *)"SfudReadTask",
+ (uint16_t)2048,
+ NULL,
+ (UBaseType_t)configMAX_PRIORITIES - 1,
+ NULL);
+
taskEXIT_CRITICAL(); /* allow schedule since task created */
-
+
return xReturn;
}
BaseType_t FFreeRTOSSfudWrite(u32 in_chip_addr, const char *content)
{
BaseType_t xReturn = pdPASS;
-
- printf("sfud write task\r\n");
+
+ printf("This is sfud write task.\r\n");
flash_addr = in_chip_addr;
if (strlen(content) + 1 > SFUD_WR_BUF_LEN)
@@ -226,16 +229,16 @@ BaseType_t FFreeRTOSSfudWrite(u32 in_chip_addr, const char *content)
memset(flash_buffer, 0, sizeof(flash_buffer));
memcpy(flash_buffer, content, strlen(content) + 1);
-
+
taskENTER_CRITICAL(); /* no schedule when create task */
- xReturn = xTaskCreate((TaskFunction_t )SfudWriteTask,
- (const char* )"SfudWriteTask",
- (uint16_t )2048,
- NULL,
- (UBaseType_t )configMAX_PRIORITIES - 1,
- NULL);
-
+ xReturn = xTaskCreate((TaskFunction_t)SfudWriteTask,
+ (const char *)"SfudWriteTask",
+ (uint16_t)2048,
+ NULL,
+ (UBaseType_t)configMAX_PRIORITIES - 1,
+ NULL);
+
taskEXIT_CRITICAL(); /* allow schedule since task created */
return xReturn;
@@ -244,18 +247,18 @@ BaseType_t FFreeRTOSSfudWrite(u32 in_chip_addr, const char *content)
BaseType_t FFreeRTOSSfudInit(void)
{
BaseType_t xReturn = pdPASS;
-
- printf("sfud init task\r\n");
+
+ printf("This is sfud init task.\r\n");
taskENTER_CRITICAL(); /* no schedule when create task */
- xReturn = xTaskCreate((TaskFunction_t )SfudInitTask,
- (const char* )"SfudInitTask",
- (uint16_t )2048,
- NULL,
- (UBaseType_t )configMAX_PRIORITIES - 1,
- NULL);
-
+ xReturn = xTaskCreate((TaskFunction_t)SfudInitTask,
+ (const char *)"SfudInitTask",
+ (uint16_t)2048,
+ NULL,
+ (UBaseType_t)configMAX_PRIORITIES - 1,
+ NULL);
+
taskEXIT_CRITICAL(); /* allow schedule since task created */
return pdPASS;
diff --git a/example/storage/spim_spiffs/Kconfig b/example/peripheral/timer_tacho/Kconfig
similarity index 100%
rename from example/storage/spim_spiffs/Kconfig
rename to example/peripheral/timer_tacho/Kconfig
diff --git a/example/storage/sata_fatfs/README.md b/example/peripheral/timer_tacho/README.md
similarity index 38%
rename from example/storage/sata_fatfs/README.md
rename to example/peripheral/timer_tacho/README.md
index 4cede421ccb495bfb36c13075f1725d425fd566c..600163871cbf4d0d324d1cfc030cc360564e032d 100644
--- a/example/storage/sata_fatfs/README.md
+++ b/example/peripheral/timer_tacho/README.md
@@ -12,57 +12,58 @@
*
*
* FilePath: README.md
- * Date: 2022-02-24 16:55:00
- * LastEditTime: 2022-03-21 17:00:59
- * Description: This file is for
+ * Date: 2022-08-26 16:17:36
+ * LastEditTime: 2022-08-26 16:17:36
+ * Description: This file is for timer_tacho
*
* Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
+ * 0.1.0 liushengming 2022.08.26 init
-->
-# Sata FATFS测试
+
+# timer_tacho base on freertos
## 1. 例程介绍
->介绍例程的用途,使用场景,相关基本概念,描述用户可以使用例程完成哪些工作
+本例程示范了freertos环境下的timer、tacho和capture的使用,包括timer控制器的初始化、定时、信号捕捉操作;
+程序启动后,创建timer、tacho或capture(两者使用同一IO,默认tacho,变更需要更改初始化和任务)的初始化任务,分别测试定时功能,采样转换功能,以及脉冲计数触发功能;
+例程仅仅支持E2000上使用;
+E2000DQ上使用的demo板上的 PWM-IN12(tacho—in12) 进行测试。
-文件系统是一类负责管理和存储文件信息的软件机构,在磁盘上组织文件的方法。作为常用的文件系统,FATFS免费开源,专门为小型嵌入式系统设计。
+## 2. 如何使用例程
-本例程在Sata上实现FATFS的存储媒介读/写接口(disk I/O),支持文件系统格式化加载,文件创建读写和遍历等基本操作。
+本例程需要用到
+- Phytium开发板(E2000DQ of demo板)
+- [Phytium freeRTOS SDK](https://gitee.com/phytium_embedded/phytium-free-rtos-sdk)
+- [Phytium standalone SDK](https://gitee.com/phytium_embedded/phytium-standalone-sdk)
+### 2.1 硬件配置方法
-## 2. 如何使用例程
+本例程支持的硬件平台包括
+- E2000DQ demo开发板
->描述开发平台准备,使用例程配置,构建和下载镜像的过程
+对应的配置项是
-### 2.1 硬件配置方法
+- CONFIG_TARGET_E2000D、 CONFIG_TARGET_E2000Q
->哪些硬件平台是支持的,需要哪些外设,例程与开发板哪些IO口相关等(建议附录开发板照片,展示哪些IO口被引出)
+### 2.1.1 硬件连线
-本例程在FT2000/4,D2000,E2000平台测试通过,您可以参考以下方法配置本例程所需要的硬件和软件环境,
-- FT2000/4,D2000或E2000开发板
-- 本例程基于FT2000/4平台,使用Marvell 88SE9215芯片通过PCIE接口转接Sata,外接Sata硬盘
-- 将转接板插入PCIE插槽,接入sata硬盘至转接板的CN1(也就是port 0)
+- E2000 pwm_in12使用1KHz的方波
-
+
### 2.2 SDK配置方法
->依赖哪些驱动、库和第三方组件,如何完成配置(列出需要使能的关键配置项)
+本例程需要,
-本例程需要的配置包括,
-- Letter Shell组件,依赖 USE_LETTER_SHELL
-- FATFS组件,依赖 USE_FATFS 和 SELECT_FATFS_FSATA_PCIE
-- PCIE组件,作为转接接口,依赖USE_PCIE
-- SATA组件,依赖 USE_SATA
+- CONFIG_USE_LETTER_SHELL
+- CONFIG_FREERTOS_USE_TIMER
+- CONFIG_LS_PL011_UART
本例子已经提供好具体的编译指令,以下进行介绍:
- make 将目录下的工程进行编译
- make clean 将目录下的工程进行清理
- make boot 将目录下的工程进行编译,并将生成的elf 复制到目标地址
-- make load_d2000_aarch64 将预设64bit d2000 下的配置加载至工程中
-- make load_d2000_aarch32 将预设32bit d2000 下的配置加载至工程中
-- make load_ft2004_aarch64 将预设64bit ft2004 下的配置加载至工程中
-- make load_ft2004_aarch32 将预设32bit ft2004 下的配置加载至工程中
- make load_e2000d_aarch64 将预设64bit e2000d 下的配置加载至工程中
- make load_e2000d_aarch32 将预设32bit e2000d 下的配置加载至工程中
- make load_e2000q_aarch64 将预设64bit e2000q 下的配置加载至工程中
@@ -70,19 +71,25 @@
- make menuconfig 配置目录下的参数变量
- make backup_kconfig 将目录下的sdkconfig 备份到./configs下
-具体使用方法为:
+具体使用方法为:
- 在当前目录下
- 执行以上指令
### 2.3 构建和下载
->描述构建、烧录下载镜像的过程,列出相关的命令
+#### 2.3.1 构建过程
+
+- 在host侧完成配置
+>配置成E2000Q,对于其它平台,使用对应的默认配置,如E2000D `make load_e2000d_aarch32`
-使用例程的一般过程为
+- 选择目标平台
+```
+make load_e2000q_aarch64
+```
-- 选择目标平台和例程需要的配置
+- 选择例程需要的配置
```
-make load_ft2004_aarch32
+make menuconfig
```
- 进行编译
@@ -95,6 +102,8 @@ make
make boot
```
+#### 2.3.2 下载过程
+
- host侧设置重启host侧tftp服务器
```
sudo service tftpd-hpa restart
@@ -111,30 +120,23 @@ bootelf -p 0x90100000
### 2.4 输出与实验现象
->描述输入输出情况,列出存在哪些输出,对应的输出是什么(建议附录相关现象图片)
-程序启动后,依次创建Init、Read、Write任务,创建单次模式软件定时器用于删除任务,Init任务会首先初始化并挂载sata盘(如果sata盘不是fat格式,还会进行格式化操作),随后创建一个文件,然后释放信号量通知Read和Write任务开始执行;
-- Init完成,目前只在port0上接了sata盘
-
-
-- 读写任务周期性执行
-
-
-- 软件定时器触发,删除读写任务
-
-
-## 3. 如何解决问题
+- 系统进入后,创建timer初始化任务,创建tacho初始化任务,注册中断服务函数,创建两个功能的任务函数。
->主要记录使用例程中可能会遇到的问题,给出相应的解决方案
-- 如果使用E2000D开发板,可以选择使用sata控制器,只需要在fatfs的介质选择中使能SELECT_FATFS_FSATA_CONTROLLER
-
+- E2000
-- 在configs文件夹的默认配置中,ft2004和d2000是使用的pcie转sata配置,e2000是使用的sata控制器配置
+
-## 4. 修改历史记录
+
->记录例程的重大修改记录,标明修改发生的版本号
+- 图中我们使用timer id 0 作为定时器任务的控制器,time in 的数字表示进入循环定时中断服务的次数。
+- get captureCnt表示使用timer id 12控制器来采集脉冲的个数(设置上升沿捕获)
+- tachometer id使用timer id 12控制器来抓取1KHz信号来模拟风扇波形信号。RPM表示转速
-V0.0.1 首次合入
+## 3. 如何解决问题
+- 若出现风扇中断异常,需确认连接是否正确,确保风扇波形不低于报警中断的最低设置转速。
+- 由于timer控制器的数量远多余pwm_in IO口数值,所以尽量使用id 15后面的定时控制器来做普通定时器。
+## 4. 修改历史记录
+v0.1.0 init
diff --git a/example/storage/spim_spiffs/configs/e2000d_aarch32_eg_configs b/example/peripheral/timer_tacho/configs/e2000d_aarch32_eg_configs
similarity index 67%
rename from example/storage/spim_spiffs/configs/e2000d_aarch32_eg_configs
rename to example/peripheral/timer_tacho/configs/e2000d_aarch32_eg_configs
index 85b81d19e1ea112d60f8d46dc967d1f443766078..faaaf578a1b0f895eded4ed39d9f0f3d0fe544d6 100644
--- a/example/storage/spim_spiffs/configs/e2000d_aarch32_eg_configs
+++ b/example/peripheral/timer_tacho/configs/e2000d_aarch32_eg_configs
@@ -2,7 +2,7 @@
#
# Freertos Configuration
#
-CONFIG_TARGET_NAME="e2000d_freertos_a32"
+CONFIG_TARGET_NAME="freertos"
# end of Freertos Configuration
#
@@ -15,9 +15,8 @@ CONFIG_USE_FREERTOS=y
#
CONFIG_TARGET_ARMV8_AARCH32=y
# CONFIG_TARGET_ARMV8_AARCH64 is not set
-CONFIG_USE_CACHE=y
-CONFIG_USE_MMU=y
-CONFIG_USE_SYS_TICK=y
+# CONFIG_USE_CACHE is not set
+# CONFIG_USE_SYS_TICK is not set
CONFIG_USE_AARCH64_L1_TO_AARCH32=y
# end of Arch Configuration
@@ -39,14 +38,7 @@ CONFIG_DEFAULT_DEBUG_PRINT_UART1=y
# Components Configuration
#
# CONFIG_USE_SPI is not set
-CONFIG_USE_QSPI=y
-
-#
-# Qspi Configuration
-#
-CONFIG_USE_FQSPI=y
-# end of Qspi Configuration
-
+# CONFIG_USE_QSPI is not set
CONFIG_USE_GIC=y
CONFIG_ENABLE_GICV3=y
CONFIG_USE_SERIAL=y
@@ -61,7 +53,14 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ETH is not set
# CONFIG_USE_CAN is not set
# CONFIG_USE_I2C is not set
-# CONFIG_USE_TIMER is not set
+CONFIG_USE_TIMER=y
+
+#
+# Hardware Timer Configuration
+#
+CONFIG_ENABLE_TIMER_TACHO=y
+# end of Hardware Timer Configuration
+
# CONFIG_USE_MIO is not set
# CONFIG_USE_SDMMC is not set
# CONFIG_USE_PCIE is not set
@@ -74,6 +73,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -84,9 +84,9 @@ CONFIG_USE_NEW_LIBC=y
#
# CONFIG_LOG_VERBOS is not set
# CONFIG_LOG_DEBUG is not set
-CONFIG_LOG_INFO=y
+# CONFIG_LOG_INFO is not set
# CONFIG_LOG_WARN is not set
-# CONFIG_LOG_ERROR is not set
+CONFIG_LOG_ERROR=y
# CONFIG_LOG_NONE is not set
CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y
CONFIG_INTERRUPT_ROLE_MASTER=y
@@ -118,6 +118,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -141,7 +150,7 @@ CONFIG_FREERTOS_USE_UART=y
#
# Freertos Qspi Drivers
#
-CONFIG_FREERTOS_USE_QSPI=y
+# CONFIG_FREERTOS_USE_QSPI is not set
# end of Freertos Qspi Drivers
#
@@ -154,6 +163,7 @@ CONFIG_FREERTOS_USE_QSPI=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -175,12 +185,6 @@ CONFIG_FREERTOS_USE_QSPI=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -192,35 +196,34 @@ CONFIG_FREERTOS_USE_QSPI=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
-# end of Component Configuration
#
-# FreeRTOS Setting
+# Freertos I2c Drivers
#
-# CONFIG_USE_LWIP is not set
-CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
-CONFIG_USE_SFUD=y
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
#
-# SFUD Configuration
+# Freertos Mio Drivers
#
-# CONFIG_SFUD_CTRL_FSPIM is not set
-CONFIG_SFUD_CTRL_FQSPI=y
-# CONFIG_SFUD_QSPI_READ_MODE_READ is not set
-# CONFIG_SFUD_QSPI_READ_MODE_DUAL_READ is not set
-CONFIG_SFUD_QSPI_READ_MODE_QUAD_READ=y
-# end of SFUD Configuration
-
-CONFIG_USE_SPIFFS=y
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
#
-# SPIFFS Configuration
+# Freertos Timer Drivers
#
-# CONFIG_SPIFFS_ON_FSPIM_SFUD is not set
-CONFIG_SPIFFS_ON_FQSPI_SFUD=y
-# end of SPIFFS Configuration
+CONFIG_FREERTOS_USE_TIMER=y
+# end of Freertos Timer Drivers
+# end of Component Configuration
+#
+# Third-Party Configuration
+#
+# CONFIG_USE_LWIP is not set
+CONFIG_USE_BACKTRACE=y
+# CONFIG_USE_FATFS_0_1_4 is not set
+# CONFIG_USE_SFUD is not set
+# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
CONFIG_USE_LETTER_SHELL=y
@@ -233,7 +236,30 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set
# end of Letter Shell Configuration
-CONFIG_USE_TLSF=y
+# CONFIG_USE_TLSF is not set
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/timer_tacho/configs/e2000d_aarch64_eg_configs b/example/peripheral/timer_tacho/configs/e2000d_aarch64_eg_configs
new file mode 100644
index 0000000000000000000000000000000000000000..3d1c2f6c591f5c941bf7997a7c0b751d9064c52d
--- /dev/null
+++ b/example/peripheral/timer_tacho/configs/e2000d_aarch64_eg_configs
@@ -0,0 +1,261 @@
+
+#
+# Freertos Configuration
+#
+CONFIG_TARGET_NAME="freertos"
+# end of Freertos Configuration
+
+#
+# Standalone Setting
+#
+CONFIG_USE_FREERTOS=y
+
+#
+# Arch Configuration
+#
+# CONFIG_TARGET_ARMV8_AARCH32 is not set
+CONFIG_TARGET_ARMV8_AARCH64=y
+# CONFIG_USE_CACHE is not set
+# CONFIG_USE_SYS_TICK is not set
+# CONFIG_MMU_DEBUG_PRINTS is not set
+# end of Arch Configuration
+
+#
+# Board Configuration
+#
+# CONFIG_TARGET_F2000_4 is not set
+# CONFIG_TARGET_D2000 is not set
+# CONFIG_TARGET_E2000Q is not set
+CONFIG_TARGET_E2000D=y
+# CONFIG_TARGET_E2000S is not set
+CONFIG_TARGET_E2000=y
+CONFIG_DEFAULT_DEBUG_PRINT_UART1=y
+# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set
+# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set
+# end of Board Configuration
+
+#
+# Components Configuration
+#
+# CONFIG_USE_SPI is not set
+# CONFIG_USE_QSPI is not set
+CONFIG_USE_GIC=y
+CONFIG_ENABLE_GICV3=y
+CONFIG_USE_SERIAL=y
+
+#
+# Usart Configuration
+#
+CONFIG_ENABLE_Pl011_UART=y
+# end of Usart Configuration
+
+# CONFIG_USE_GPIO is not set
+# CONFIG_USE_ETH is not set
+# CONFIG_USE_CAN is not set
+# CONFIG_USE_I2C is not set
+CONFIG_USE_TIMER=y
+
+#
+# Hardware Timer Configuration
+#
+CONFIG_ENABLE_TIMER_TACHO=y
+# end of Hardware Timer Configuration
+
+# CONFIG_USE_MIO is not set
+# CONFIG_USE_SDMMC is not set
+# CONFIG_USE_PCIE is not set
+# CONFIG_USE_WDT is not set
+# CONFIG_USE_DMA is not set
+# CONFIG_USE_NAND is not set
+# CONFIG_USE_RTC is not set
+# CONFIG_USE_SATA is not set
+# CONFIG_USE_USB is not set
+# CONFIG_USE_ADC is not set
+# CONFIG_USE_PWM is not set
+# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
+# end of Components Configuration
+
+CONFIG_USE_NEW_LIBC=y
+# end of Standalone Setting
+
+#
+# Building Option
+#
+# CONFIG_LOG_VERBOS is not set
+# CONFIG_LOG_DEBUG is not set
+# CONFIG_LOG_INFO is not set
+# CONFIG_LOG_WARN is not set
+CONFIG_LOG_ERROR=y
+# CONFIG_LOG_NONE is not set
+CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y
+CONFIG_INTERRUPT_ROLE_MASTER=y
+# CONFIG_INTERRUPT_ROLE_SLAVE is not set
+# CONFIG_LOG_EXTRA_INFO is not set
+# CONFIG_BOOTUP_DEBUG_PRINTS is not set
+
+#
+# Linker Options
+#
+# CONFIG_AARCH32_RAM_LD is not set
+CONFIG_AARCH64_RAM_LD=y
+# CONFIG_USER_DEFINED_LD is not set
+CONFIG_LINK_SCRIPT_ROM=y
+CONFIG_ROM_START_UP_ADDR=0x80100000
+CONFIG_ROM_SIZE_MB=1
+CONFIG_LINK_SCRIPT_RAM=y
+CONFIG_RAM_START_UP_ADDR=0x81000000
+CONFIG_RAM_SIZE_MB=64
+CONFIG_HEAP_SIZE=1
+CONFIG_STACK_SIZE=0x100000
+CONFIG_FPU_STACK_SIZE=0x1000
+# end of Linker Options
+
+#
+# Compiler Options
+#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
+CONFIG_OUTPUT_BINARY=y
+# end of Compiler Options
+# end of Building Option
+
+#
+# Component Configuration
+#
+
+#
+# Freertos Uart Drivers
+#
+CONFIG_FREERTOS_USE_UART=y
+# end of Freertos Uart Drivers
+
+#
+# Freertos Pwm Drivers
+#
+# CONFIG_FREERTOS_USE_PWM is not set
+# end of Freertos Pwm Drivers
+
+#
+# Freertos Qspi Drivers
+#
+# CONFIG_FREERTOS_USE_QSPI is not set
+# end of Freertos Qspi Drivers
+
+#
+# Freertos Wdt Drivers
+#
+# CONFIG_FREERTOS_USE_WDT is not set
+# end of Freertos Wdt Drivers
+
+#
+# Freertos Eth Drivers
+#
+# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
+# end of Freertos Eth Drivers
+
+#
+# Freertos Gpio Drivers
+#
+# CONFIG_FREERTOS_USE_GPIO is not set
+# end of Freertos Gpio Drivers
+
+#
+# Freertos Spim Drivers
+#
+# CONFIG_FREERTOS_USE_FSPIM is not set
+# end of Freertos Spim Drivers
+
+#
+# Freertos DMA Drivers
+#
+# CONFIG_FREERTOS_USE_FDDMA is not set
+# CONFIG_FREERTOS_USE_FGDMA is not set
+# end of Freertos DMA Drivers
+
+#
+# Freertos Adc Drivers
+#
+# CONFIG_FREERTOS_USE_ADC is not set
+# end of Freertos Adc Drivers
+
+#
+# Freertos Can Drivers
+#
+# CONFIG_FREERTOS_USE_CAN is not set
+# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+CONFIG_FREERTOS_USE_TIMER=y
+# end of Freertos Timer Drivers
+# end of Component Configuration
+
+#
+# Third-Party Configuration
+#
+# CONFIG_USE_LWIP is not set
+CONFIG_USE_BACKTRACE=y
+# CONFIG_USE_FATFS_0_1_4 is not set
+# CONFIG_USE_SFUD is not set
+# CONFIG_USE_SPIFFS is not set
+# CONFIG_USE_AMP is not set
+CONFIG_USE_LETTER_SHELL=y
+
+#
+# Letter Shell Configuration
+#
+CONFIG_LS_PL011_UART=y
+CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
+# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set
+# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set
+# end of Letter Shell Configuration
+
+# CONFIG_USE_TLSF is not set
+# CONFIG_USE_SDMMC_CMD is not set
+# CONFIG_USE_CHERRY_USB is not set
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/storage/sata_fatfs/configs/ft2004_aarch32_eg_configs b/example/peripheral/timer_tacho/configs/e2000q_aarch32_eg_configs
similarity index 67%
rename from example/storage/sata_fatfs/configs/ft2004_aarch32_eg_configs
rename to example/peripheral/timer_tacho/configs/e2000q_aarch32_eg_configs
index 1570e26b22ab39f5c11f30f9af61e6b3f535fafc..bb9b4af41afeb39391fd06c2bcc14ee0ad4532c0 100644
--- a/example/storage/sata_fatfs/configs/ft2004_aarch32_eg_configs
+++ b/example/peripheral/timer_tacho/configs/e2000q_aarch32_eg_configs
@@ -2,7 +2,7 @@
#
# Freertos Configuration
#
-CONFIG_TARGET_NAME="ft2004_freertos_a32"
+CONFIG_TARGET_NAME="freertos"
# end of Freertos Configuration
#
@@ -15,21 +15,20 @@ CONFIG_USE_FREERTOS=y
#
CONFIG_TARGET_ARMV8_AARCH32=y
# CONFIG_TARGET_ARMV8_AARCH64 is not set
-CONFIG_USE_CACHE=y
-CONFIG_USE_L3CACHE=y
-CONFIG_USE_MMU=y
-CONFIG_USE_SYS_TICK=y
+# CONFIG_USE_CACHE is not set
+# CONFIG_USE_SYS_TICK is not set
CONFIG_USE_AARCH64_L1_TO_AARCH32=y
# end of Arch Configuration
#
# Board Configuration
#
-CONFIG_TARGET_F2000_4=y
+# CONFIG_TARGET_F2000_4 is not set
# CONFIG_TARGET_D2000 is not set
-# CONFIG_TARGET_E2000Q is not set
+CONFIG_TARGET_E2000Q=y
# CONFIG_TARGET_E2000D is not set
# CONFIG_TARGET_E2000S is not set
+CONFIG_TARGET_E2000=y
CONFIG_DEFAULT_DEBUG_PRINT_UART1=y
# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set
# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set
@@ -54,33 +53,27 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ETH is not set
# CONFIG_USE_CAN is not set
# CONFIG_USE_I2C is not set
-# CONFIG_USE_TIMER is not set
-# CONFIG_USE_MIO is not set
-# CONFIG_USE_SDMMC is not set
-CONFIG_USE_PCIE=y
+CONFIG_USE_TIMER=y
#
-# Pcie Configuration
+# Hardware Timer Configuration
#
-CONFIG_ENABLE_F_PCIE=y
-# end of Pcie Configuration
+CONFIG_ENABLE_TIMER_TACHO=y
+# end of Hardware Timer Configuration
+# CONFIG_USE_MIO is not set
+# CONFIG_USE_SDMMC is not set
+# CONFIG_USE_PCIE is not set
# CONFIG_USE_WDT is not set
# CONFIG_USE_DMA is not set
# CONFIG_USE_NAND is not set
# CONFIG_USE_RTC is not set
-CONFIG_USE_SATA=y
-
-#
-# FSATA Configuration
-#
-CONFIG_ENABLE_FSATA=y
-# end of FSATA Configuration
-
+# CONFIG_USE_SATA is not set
# CONFIG_USE_USB is not set
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -91,9 +84,9 @@ CONFIG_USE_NEW_LIBC=y
#
# CONFIG_LOG_VERBOS is not set
# CONFIG_LOG_DEBUG is not set
-CONFIG_LOG_INFO=y
+# CONFIG_LOG_INFO is not set
# CONFIG_LOG_WARN is not set
-# CONFIG_LOG_ERROR is not set
+CONFIG_LOG_ERROR=y
# CONFIG_LOG_NONE is not set
CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y
CONFIG_INTERRUPT_ROLE_MASTER=y
@@ -125,6 +118,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -161,6 +163,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -182,12 +185,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -199,24 +196,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
-# end of Component Configuration
#
-# FreeRTOS Setting
+# Freertos I2c Drivers
#
-# CONFIG_USE_LWIP is not set
-CONFIG_USE_BACKTRACE=y
-CONFIG_USE_FATFS=y
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
#
-# FATFS Configuration
+# Freertos Mio Drivers
#
-# CONFIG_SELECT_FATFS_RAM_DISK is not set
-# CONFIG_SELECT_FATFS_FSDMMC is not set
-CONFIG_SELECT_FATFS_FSATA_PCIE=y
-# CONFIG_SELECT_FATFS_USB is not set
-# end of FATFS Configuration
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+#
+# Freertos Timer Drivers
+#
+CONFIG_FREERTOS_USE_TIMER=y
+# end of Freertos Timer Drivers
+# end of Component Configuration
+
+#
+# Third-Party Configuration
+#
+# CONFIG_USE_LWIP is not set
+CONFIG_USE_BACKTRACE=y
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -231,7 +236,30 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set
# end of Letter Shell Configuration
-CONFIG_USE_TLSF=y
+# CONFIG_USE_TLSF is not set
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/timer_tacho/configs/e2000q_aarch64_eg_configs b/example/peripheral/timer_tacho/configs/e2000q_aarch64_eg_configs
new file mode 100644
index 0000000000000000000000000000000000000000..2879a78dd0dc486897d22e5b056fa38b0f099132
--- /dev/null
+++ b/example/peripheral/timer_tacho/configs/e2000q_aarch64_eg_configs
@@ -0,0 +1,261 @@
+
+#
+# Freertos Configuration
+#
+CONFIG_TARGET_NAME="freertos"
+# end of Freertos Configuration
+
+#
+# Standalone Setting
+#
+CONFIG_USE_FREERTOS=y
+
+#
+# Arch Configuration
+#
+# CONFIG_TARGET_ARMV8_AARCH32 is not set
+CONFIG_TARGET_ARMV8_AARCH64=y
+# CONFIG_USE_CACHE is not set
+# CONFIG_USE_SYS_TICK is not set
+# CONFIG_MMU_DEBUG_PRINTS is not set
+# end of Arch Configuration
+
+#
+# Board Configuration
+#
+# CONFIG_TARGET_F2000_4 is not set
+# CONFIG_TARGET_D2000 is not set
+CONFIG_TARGET_E2000Q=y
+# CONFIG_TARGET_E2000D is not set
+# CONFIG_TARGET_E2000S is not set
+CONFIG_TARGET_E2000=y
+CONFIG_DEFAULT_DEBUG_PRINT_UART1=y
+# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set
+# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set
+# end of Board Configuration
+
+#
+# Components Configuration
+#
+# CONFIG_USE_SPI is not set
+# CONFIG_USE_QSPI is not set
+CONFIG_USE_GIC=y
+CONFIG_ENABLE_GICV3=y
+CONFIG_USE_SERIAL=y
+
+#
+# Usart Configuration
+#
+CONFIG_ENABLE_Pl011_UART=y
+# end of Usart Configuration
+
+# CONFIG_USE_GPIO is not set
+# CONFIG_USE_ETH is not set
+# CONFIG_USE_CAN is not set
+# CONFIG_USE_I2C is not set
+CONFIG_USE_TIMER=y
+
+#
+# Hardware Timer Configuration
+#
+CONFIG_ENABLE_TIMER_TACHO=y
+# end of Hardware Timer Configuration
+
+# CONFIG_USE_MIO is not set
+# CONFIG_USE_SDMMC is not set
+# CONFIG_USE_PCIE is not set
+# CONFIG_USE_WDT is not set
+# CONFIG_USE_DMA is not set
+# CONFIG_USE_NAND is not set
+# CONFIG_USE_RTC is not set
+# CONFIG_USE_SATA is not set
+# CONFIG_USE_USB is not set
+# CONFIG_USE_ADC is not set
+# CONFIG_USE_PWM is not set
+# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
+# end of Components Configuration
+
+CONFIG_USE_NEW_LIBC=y
+# end of Standalone Setting
+
+#
+# Building Option
+#
+# CONFIG_LOG_VERBOS is not set
+# CONFIG_LOG_DEBUG is not set
+# CONFIG_LOG_INFO is not set
+# CONFIG_LOG_WARN is not set
+CONFIG_LOG_ERROR=y
+# CONFIG_LOG_NONE is not set
+CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y
+CONFIG_INTERRUPT_ROLE_MASTER=y
+# CONFIG_INTERRUPT_ROLE_SLAVE is not set
+# CONFIG_LOG_EXTRA_INFO is not set
+# CONFIG_BOOTUP_DEBUG_PRINTS is not set
+
+#
+# Linker Options
+#
+# CONFIG_AARCH32_RAM_LD is not set
+CONFIG_AARCH64_RAM_LD=y
+# CONFIG_USER_DEFINED_LD is not set
+CONFIG_LINK_SCRIPT_ROM=y
+CONFIG_ROM_START_UP_ADDR=0x80100000
+CONFIG_ROM_SIZE_MB=1
+CONFIG_LINK_SCRIPT_RAM=y
+CONFIG_RAM_START_UP_ADDR=0x81000000
+CONFIG_RAM_SIZE_MB=64
+CONFIG_HEAP_SIZE=1
+CONFIG_STACK_SIZE=0x100000
+CONFIG_FPU_STACK_SIZE=0x1000
+# end of Linker Options
+
+#
+# Compiler Options
+#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
+CONFIG_OUTPUT_BINARY=y
+# end of Compiler Options
+# end of Building Option
+
+#
+# Component Configuration
+#
+
+#
+# Freertos Uart Drivers
+#
+CONFIG_FREERTOS_USE_UART=y
+# end of Freertos Uart Drivers
+
+#
+# Freertos Pwm Drivers
+#
+# CONFIG_FREERTOS_USE_PWM is not set
+# end of Freertos Pwm Drivers
+
+#
+# Freertos Qspi Drivers
+#
+# CONFIG_FREERTOS_USE_QSPI is not set
+# end of Freertos Qspi Drivers
+
+#
+# Freertos Wdt Drivers
+#
+# CONFIG_FREERTOS_USE_WDT is not set
+# end of Freertos Wdt Drivers
+
+#
+# Freertos Eth Drivers
+#
+# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
+# end of Freertos Eth Drivers
+
+#
+# Freertos Gpio Drivers
+#
+# CONFIG_FREERTOS_USE_GPIO is not set
+# end of Freertos Gpio Drivers
+
+#
+# Freertos Spim Drivers
+#
+# CONFIG_FREERTOS_USE_FSPIM is not set
+# end of Freertos Spim Drivers
+
+#
+# Freertos DMA Drivers
+#
+# CONFIG_FREERTOS_USE_FDDMA is not set
+# CONFIG_FREERTOS_USE_FGDMA is not set
+# end of Freertos DMA Drivers
+
+#
+# Freertos Adc Drivers
+#
+# CONFIG_FREERTOS_USE_ADC is not set
+# end of Freertos Adc Drivers
+
+#
+# Freertos Can Drivers
+#
+# CONFIG_FREERTOS_USE_CAN is not set
+# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+CONFIG_FREERTOS_USE_TIMER=y
+# end of Freertos Timer Drivers
+# end of Component Configuration
+
+#
+# Third-Party Configuration
+#
+# CONFIG_USE_LWIP is not set
+CONFIG_USE_BACKTRACE=y
+# CONFIG_USE_FATFS_0_1_4 is not set
+# CONFIG_USE_SFUD is not set
+# CONFIG_USE_SPIFFS is not set
+# CONFIG_USE_AMP is not set
+CONFIG_USE_LETTER_SHELL=y
+
+#
+# Letter Shell Configuration
+#
+CONFIG_LS_PL011_UART=y
+CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
+# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set
+# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set
+# end of Letter Shell Configuration
+
+# CONFIG_USE_TLSF is not set
+# CONFIG_USE_SDMMC_CMD is not set
+# CONFIG_USE_CHERRY_USB is not set
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/timer_tacho/figs/tacho_hdw.png b/example/peripheral/timer_tacho/figs/tacho_hdw.png
new file mode 100644
index 0000000000000000000000000000000000000000..e523d350e997be2da72068cecce9130074c4d032
Binary files /dev/null and b/example/peripheral/timer_tacho/figs/tacho_hdw.png differ
diff --git a/example/peripheral/timer_tacho/figs/timer_capture.png b/example/peripheral/timer_tacho/figs/timer_capture.png
new file mode 100644
index 0000000000000000000000000000000000000000..be579323637c5aed38ca6d5781ad51f6d60354b3
Binary files /dev/null and b/example/peripheral/timer_tacho/figs/timer_capture.png differ
diff --git a/example/peripheral/timer_tacho/figs/timer_tacho.png b/example/peripheral/timer_tacho/figs/timer_tacho.png
new file mode 100644
index 0000000000000000000000000000000000000000..ac6729b4d558dd755b0eb6d7e145b4f8da6fdf13
Binary files /dev/null and b/example/peripheral/timer_tacho/figs/timer_tacho.png differ
diff --git a/example/peripheral/timer_tacho/inc/timer_tacho_example.h b/example/peripheral/timer_tacho/inc/timer_tacho_example.h
new file mode 100644
index 0000000000000000000000000000000000000000..4e8c5413ed9c1fa3b1a1d7d63f2089c068c2a48c
--- /dev/null
+++ b/example/peripheral/timer_tacho/inc/timer_tacho_example.h
@@ -0,0 +1,48 @@
+/*
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * All Rights Reserved.
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the Phytium Public License for more details.
+ *
+ *
+ * FilePath: timer_tacho_example.h
+ * Date: 2022-08-23 19:05:38
+ * LastEditTime: 2022-08-23 19:05:39
+ * Description: This file is for timer tacho example function declarations.
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 liushengming 2022/11/25 init
+ */
+
+#ifndef TIMER_TACHO_EXAMPLE_H
+#define TIMER_TACHO_EXAMPLE_H
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/***************************** Include Files *********************************/
+
+/************************** Constant Definitions *****************************/
+
+/************************** Variable Definitions *****************************/
+
+/***************** Macros (Inline Functions) Definitions *********************/
+
+/************************** Function Prototypes ******************************/
+BaseType_t FFreeRTOSTimerTachoCreate(void);
+/*****************************************************************************/
+#ifdef __cplusplus
+}
+#endif
+
+#endif
\ No newline at end of file
diff --git a/example/network/gmac_lwip_test/main.c b/example/peripheral/timer_tacho/main.c
similarity index 53%
rename from example/network/gmac_lwip_test/main.c
rename to example/peripheral/timer_tacho/main.c
index c9b71b6c7b079af6aa3696da14eca1d95916e71f..441ec31d17f43069774e89bc31dc258f9411b1eb 100644
--- a/example/network/gmac_lwip_test/main.c
+++ b/example/peripheral/timer_tacho/main.c
@@ -1,43 +1,52 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: main.c
- * Date: 2022-02-24 13:42:19
- * LastEditTime: 2022-03-21 17:01:57
- * Description: This file is for
- *
- * Modify History:
+ * Date: 2022-08-23 17:24:03
+ * LastEditTime: 2022-08-23 17:24:03
+ * Description: This file is for timer_tacho main entry.
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
+ * 1.0 liushengming 2022/11/25 init
*/
+
#include
-#include "FreeRTOS.h"
-#include "task.h"
+#include "shell.h"
#include "shell_port.h"
+#include "timer_tacho_example.h"
-int main()
+int main(void)
{
- BaseType_t ret = pdPASS;
+ BaseType_t ret;
+
+ ret = FFreeRTOSTimerTachoCreate();
+ if (ret != pdPASS)
+ {
+ goto FAIL_EXIT;
+ }
ret = LSUserShellTask();
- if(ret != pdPASS)
+ if (ret != pdPASS)
+ {
goto FAIL_EXIT;
-
- vTaskStartScheduler(); /* 启动任务,开启调度 */
+ }
+
+ vTaskStartScheduler(); /* 启动任务,开启调度 */
while (1); /* 正常不会执行到这里 */
-
-FAIL_EXIT:
- printf("failed 0x%x \r\n", ret);
+FAIL_EXIT:
+ printf("Failed,the ret value is 0x%x. \r\n", ret);
return 0;
-}
\ No newline at end of file
+}
diff --git a/example/storage/spim_spiffs/makefile b/example/peripheral/timer_tacho/makefile
similarity index 89%
rename from example/storage/spim_spiffs/makefile
rename to example/peripheral/timer_tacho/makefile
index c1f632e855a09d5f79e458e1c21f110a88cb40ba..d56227392212980c329dde7ebb09f8ec2d601317 100644
--- a/example/storage/spim_spiffs/makefile
+++ b/example/peripheral/timer_tacho/makefile
@@ -23,9 +23,7 @@ include $(FREERTOS_SDK_ROOT)/make/build_freertos.mk
boot:
make -j
@cp ./$(CONFIG_TARGET_NAME).elf $(USR_BOOT_DIR)/$(BOOT_IMG_NAME).elf
-ifdef CONFIG_OUTPUT_BINARY
@cp ./$(CONFIG_TARGET_NAME).bin $(USR_BOOT_DIR)/$(BOOT_IMG_NAME).bin
-endif
- @ls $(USR_BOOT_DIR)/$(BOOT_IMG_NAME).* -l
+ @ls -l $(USR_BOOT_DIR)/$(BOOT_IMG_NAME).*
diff --git a/example/peripheral/timer_tacho/sdkconfig b/example/peripheral/timer_tacho/sdkconfig
new file mode 100644
index 0000000000000000000000000000000000000000..2879a78dd0dc486897d22e5b056fa38b0f099132
--- /dev/null
+++ b/example/peripheral/timer_tacho/sdkconfig
@@ -0,0 +1,261 @@
+
+#
+# Freertos Configuration
+#
+CONFIG_TARGET_NAME="freertos"
+# end of Freertos Configuration
+
+#
+# Standalone Setting
+#
+CONFIG_USE_FREERTOS=y
+
+#
+# Arch Configuration
+#
+# CONFIG_TARGET_ARMV8_AARCH32 is not set
+CONFIG_TARGET_ARMV8_AARCH64=y
+# CONFIG_USE_CACHE is not set
+# CONFIG_USE_SYS_TICK is not set
+# CONFIG_MMU_DEBUG_PRINTS is not set
+# end of Arch Configuration
+
+#
+# Board Configuration
+#
+# CONFIG_TARGET_F2000_4 is not set
+# CONFIG_TARGET_D2000 is not set
+CONFIG_TARGET_E2000Q=y
+# CONFIG_TARGET_E2000D is not set
+# CONFIG_TARGET_E2000S is not set
+CONFIG_TARGET_E2000=y
+CONFIG_DEFAULT_DEBUG_PRINT_UART1=y
+# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set
+# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set
+# end of Board Configuration
+
+#
+# Components Configuration
+#
+# CONFIG_USE_SPI is not set
+# CONFIG_USE_QSPI is not set
+CONFIG_USE_GIC=y
+CONFIG_ENABLE_GICV3=y
+CONFIG_USE_SERIAL=y
+
+#
+# Usart Configuration
+#
+CONFIG_ENABLE_Pl011_UART=y
+# end of Usart Configuration
+
+# CONFIG_USE_GPIO is not set
+# CONFIG_USE_ETH is not set
+# CONFIG_USE_CAN is not set
+# CONFIG_USE_I2C is not set
+CONFIG_USE_TIMER=y
+
+#
+# Hardware Timer Configuration
+#
+CONFIG_ENABLE_TIMER_TACHO=y
+# end of Hardware Timer Configuration
+
+# CONFIG_USE_MIO is not set
+# CONFIG_USE_SDMMC is not set
+# CONFIG_USE_PCIE is not set
+# CONFIG_USE_WDT is not set
+# CONFIG_USE_DMA is not set
+# CONFIG_USE_NAND is not set
+# CONFIG_USE_RTC is not set
+# CONFIG_USE_SATA is not set
+# CONFIG_USE_USB is not set
+# CONFIG_USE_ADC is not set
+# CONFIG_USE_PWM is not set
+# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
+# end of Components Configuration
+
+CONFIG_USE_NEW_LIBC=y
+# end of Standalone Setting
+
+#
+# Building Option
+#
+# CONFIG_LOG_VERBOS is not set
+# CONFIG_LOG_DEBUG is not set
+# CONFIG_LOG_INFO is not set
+# CONFIG_LOG_WARN is not set
+CONFIG_LOG_ERROR=y
+# CONFIG_LOG_NONE is not set
+CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y
+CONFIG_INTERRUPT_ROLE_MASTER=y
+# CONFIG_INTERRUPT_ROLE_SLAVE is not set
+# CONFIG_LOG_EXTRA_INFO is not set
+# CONFIG_BOOTUP_DEBUG_PRINTS is not set
+
+#
+# Linker Options
+#
+# CONFIG_AARCH32_RAM_LD is not set
+CONFIG_AARCH64_RAM_LD=y
+# CONFIG_USER_DEFINED_LD is not set
+CONFIG_LINK_SCRIPT_ROM=y
+CONFIG_ROM_START_UP_ADDR=0x80100000
+CONFIG_ROM_SIZE_MB=1
+CONFIG_LINK_SCRIPT_RAM=y
+CONFIG_RAM_START_UP_ADDR=0x81000000
+CONFIG_RAM_SIZE_MB=64
+CONFIG_HEAP_SIZE=1
+CONFIG_STACK_SIZE=0x100000
+CONFIG_FPU_STACK_SIZE=0x1000
+# end of Linker Options
+
+#
+# Compiler Options
+#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
+CONFIG_OUTPUT_BINARY=y
+# end of Compiler Options
+# end of Building Option
+
+#
+# Component Configuration
+#
+
+#
+# Freertos Uart Drivers
+#
+CONFIG_FREERTOS_USE_UART=y
+# end of Freertos Uart Drivers
+
+#
+# Freertos Pwm Drivers
+#
+# CONFIG_FREERTOS_USE_PWM is not set
+# end of Freertos Pwm Drivers
+
+#
+# Freertos Qspi Drivers
+#
+# CONFIG_FREERTOS_USE_QSPI is not set
+# end of Freertos Qspi Drivers
+
+#
+# Freertos Wdt Drivers
+#
+# CONFIG_FREERTOS_USE_WDT is not set
+# end of Freertos Wdt Drivers
+
+#
+# Freertos Eth Drivers
+#
+# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
+# end of Freertos Eth Drivers
+
+#
+# Freertos Gpio Drivers
+#
+# CONFIG_FREERTOS_USE_GPIO is not set
+# end of Freertos Gpio Drivers
+
+#
+# Freertos Spim Drivers
+#
+# CONFIG_FREERTOS_USE_FSPIM is not set
+# end of Freertos Spim Drivers
+
+#
+# Freertos DMA Drivers
+#
+# CONFIG_FREERTOS_USE_FDDMA is not set
+# CONFIG_FREERTOS_USE_FGDMA is not set
+# end of Freertos DMA Drivers
+
+#
+# Freertos Adc Drivers
+#
+# CONFIG_FREERTOS_USE_ADC is not set
+# end of Freertos Adc Drivers
+
+#
+# Freertos Can Drivers
+#
+# CONFIG_FREERTOS_USE_CAN is not set
+# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+CONFIG_FREERTOS_USE_TIMER=y
+# end of Freertos Timer Drivers
+# end of Component Configuration
+
+#
+# Third-Party Configuration
+#
+# CONFIG_USE_LWIP is not set
+CONFIG_USE_BACKTRACE=y
+# CONFIG_USE_FATFS_0_1_4 is not set
+# CONFIG_USE_SFUD is not set
+# CONFIG_USE_SPIFFS is not set
+# CONFIG_USE_AMP is not set
+CONFIG_USE_LETTER_SHELL=y
+
+#
+# Letter Shell Configuration
+#
+CONFIG_LS_PL011_UART=y
+CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
+# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set
+# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set
+# end of Letter Shell Configuration
+
+# CONFIG_USE_TLSF is not set
+# CONFIG_USE_SDMMC_CMD is not set
+# CONFIG_USE_CHERRY_USB is not set
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/storage/spim_spiffs/sdkconfig.h b/example/peripheral/timer_tacho/sdkconfig.h
similarity index 65%
rename from example/storage/spim_spiffs/sdkconfig.h
rename to example/peripheral/timer_tacho/sdkconfig.h
index 58cde585f8022335463dd04463c7dd44f0d7aac0..cec51f9af912216b49d1d7b40d61784bce7aff89 100644
--- a/example/storage/spim_spiffs/sdkconfig.h
+++ b/example/peripheral/timer_tacho/sdkconfig.h
@@ -3,7 +3,7 @@
/* Freertos Configuration */
-#define CONFIG_TARGET_NAME "e2000d_freertos_a64"
+#define CONFIG_TARGET_NAME "freertos"
/* end of Freertos Configuration */
/* Standalone Setting */
@@ -14,9 +14,8 @@
/* CONFIG_TARGET_ARMV8_AARCH32 is not set */
#define CONFIG_TARGET_ARMV8_AARCH64
-#define CONFIG_USE_CACHE
-#define CONFIG_USE_MMU
-#define CONFIG_USE_SYS_TICK
+/* CONFIG_USE_CACHE is not set */
+/* CONFIG_USE_SYS_TICK is not set */
/* CONFIG_MMU_DEBUG_PRINTS is not set */
/* end of Arch Configuration */
@@ -24,8 +23,8 @@
/* CONFIG_TARGET_F2000_4 is not set */
/* CONFIG_TARGET_D2000 is not set */
-/* CONFIG_TARGET_E2000Q is not set */
-#define CONFIG_TARGET_E2000D
+#define CONFIG_TARGET_E2000Q
+/* CONFIG_TARGET_E2000D is not set */
/* CONFIG_TARGET_E2000S is not set */
#define CONFIG_TARGET_E2000
#define CONFIG_DEFAULT_DEBUG_PRINT_UART1
@@ -35,14 +34,8 @@
/* Components Configuration */
-#define CONFIG_USE_SPI
-#define CONFIG_USE_FSPIM
-#define CONFIG_USE_QSPI
-
-/* Qspi Configuration */
-
-#define CONFIG_USE_FQSPI
-/* end of Qspi Configuration */
+/* CONFIG_USE_SPI is not set */
+/* CONFIG_USE_QSPI is not set */
#define CONFIG_USE_GIC
#define CONFIG_ENABLE_GICV3
#define CONFIG_USE_SERIAL
@@ -55,7 +48,12 @@
/* CONFIG_USE_ETH is not set */
/* CONFIG_USE_CAN is not set */
/* CONFIG_USE_I2C is not set */
-/* CONFIG_USE_TIMER is not set */
+#define CONFIG_USE_TIMER
+
+/* Hardware Timer Configuration */
+
+#define CONFIG_ENABLE_TIMER_TACHO
+/* end of Hardware Timer Configuration */
/* CONFIG_USE_MIO is not set */
/* CONFIG_USE_SDMMC is not set */
/* CONFIG_USE_PCIE is not set */
@@ -68,6 +66,7 @@
/* CONFIG_USE_ADC is not set */
/* CONFIG_USE_PWM is not set */
/* CONFIG_USE_IPC is not set */
+/* CONFIG_USE_MEDIA is not set */
/* end of Components Configuration */
#define CONFIG_USE_NEW_LIBC
/* end of Standalone Setting */
@@ -104,6 +103,12 @@
/* Compiler Options */
+/* Cross-Compiler Setting */
+
+#define CONFIG_GCC_OPTIMIZE_LEVEL 0
+/* CONFIG_USE_EXT_COMPILER is not set */
+/* CONFIG_USE_KLIN_SYS is not set */
+/* end of Cross-Compiler Setting */
#define CONFIG_OUTPUT_BINARY
/* end of Compiler Options */
/* end of Building Option */
@@ -122,7 +127,7 @@
/* Freertos Qspi Drivers */
-#define CONFIG_FREERTOS_USE_QSPI
+/* CONFIG_FREERTOS_USE_QSPI is not set */
/* end of Freertos Qspi Drivers */
/* Freertos Wdt Drivers */
@@ -133,6 +138,7 @@
/* Freertos Eth Drivers */
/* CONFIG_FREERTOS_USE_XMAC is not set */
+/* CONFIG_FREERTOS_USE_GMAC is not set */
/* end of Freertos Eth Drivers */
/* Freertos Gpio Drivers */
@@ -142,7 +148,7 @@
/* Freertos Spim Drivers */
-#define CONFIG_FREERTOS_USE_FSPIM
+/* CONFIG_FREERTOS_USE_FSPIM is not set */
/* end of Freertos Spim Drivers */
/* Freertos DMA Drivers */
@@ -151,11 +157,6 @@
/* CONFIG_FREERTOS_USE_FGDMA is not set */
/* end of Freertos DMA Drivers */
-/* Freertos MMC Drivers */
-
-/* CONFIG_FREERTOS_USE_FSDIO is not set */
-/* end of Freertos MMC Drivers */
-
/* Freertos Adc Drivers */
/* CONFIG_FREERTOS_USE_ADC is not set */
@@ -165,30 +166,30 @@
/* CONFIG_FREERTOS_USE_CAN is not set */
/* end of Freertos Can Drivers */
-/* end of Component Configuration */
-/* FreeRTOS Setting */
+/* Freertos I2c Drivers */
-/* CONFIG_USE_LWIP is not set */
-#define CONFIG_USE_BACKTRACE
-/* CONFIG_USE_FATFS is not set */
-#define CONFIG_USE_SFUD
+/* CONFIG_FREERTOS_USE_I2C is not set */
+/* end of Freertos I2c Drivers */
-/* SFUD Configuration */
+/* Freertos Mio Drivers */
-#define CONFIG_SFUD_CTRL_FSPIM
-#define CONFIG_SFUD_CTRL_FQSPI
-/* CONFIG_SFUD_QSPI_READ_MODE_READ is not set */
-/* CONFIG_SFUD_QSPI_READ_MODE_DUAL_READ is not set */
-#define CONFIG_SFUD_QSPI_READ_MODE_QUAD_READ
-/* end of SFUD Configuration */
-#define CONFIG_USE_SPIFFS
+/* CONFIG_FREERTOS_USE_MIO is not set */
+/* end of Freertos Mio Drivers */
-/* SPIFFS Configuration */
+/* Freertos Timer Drivers */
+
+#define CONFIG_FREERTOS_USE_TIMER
+/* end of Freertos Timer Drivers */
+/* end of Component Configuration */
-#define CONFIG_SPIFFS_ON_FSPIM_SFUD
-/* CONFIG_SPIFFS_ON_FQSPI_SFUD is not set */
-/* end of SPIFFS Configuration */
+/* Third-Party Configuration */
+
+/* CONFIG_USE_LWIP is not set */
+#define CONFIG_USE_BACKTRACE
+/* CONFIG_USE_FATFS_0_1_4 is not set */
+/* CONFIG_USE_SFUD is not set */
+/* CONFIG_USE_SPIFFS is not set */
/* CONFIG_USE_AMP is not set */
#define CONFIG_USE_LETTER_SHELL
@@ -199,9 +200,31 @@
/* CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set */
/* CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set */
/* end of Letter Shell Configuration */
-#define CONFIG_USE_TLSF
+/* CONFIG_USE_TLSF is not set */
/* CONFIG_USE_SDMMC_CMD is not set */
/* CONFIG_USE_CHERRY_USB is not set */
-/* end of FreeRTOS Setting */
+/* end of Third-Party Configuration */
+
+/* Kernel Configuration */
+
+#define CONFIG_FREERTOS_OPTIMIZED_SCHEDULER
+#define CONFIG_FREERTOS_HZ 1000
+#define CONFIG_FREERTOS_MAX_PRIORITIES 32
+#define CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES 13
+#define CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES 11
+#define CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS 1
+#define CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE 1024
+#define CONFIG_FREERTOS_MAX_TASK_NAME_LEN 32
+#define CONFIG_FREERTOS_TIMER_TASK_PRIORITY 1
+#define CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH 2048
+#define CONFIG_FREERTOS_TIMER_QUEUE_LENGTH 10
+#define CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE 0
+#define CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS
+#define CONFIG_FREERTOS_USE_TRACE_FACILITY
+#define CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS
+/* CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set */
+#define CONFIG_FREERTOS_TOTAL_HEAP_SIZE 10240
+#define CONFIG_FREERTOS_TASK_FPU_SUPPORT 1
+/* end of Kernel Configuration */
#endif
diff --git a/example/peripheral/timer_tacho/src/timer_tacho_example.c b/example/peripheral/timer_tacho/src/timer_tacho_example.c
new file mode 100644
index 0000000000000000000000000000000000000000..88f0819b215cbaecebd39ef185e199c77ae9df13
--- /dev/null
+++ b/example/peripheral/timer_tacho/src/timer_tacho_example.c
@@ -0,0 +1,387 @@
+/*
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * All Rights Reserved.
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the Phytium Public License for more details.
+ *
+ *
+ * FilePath: timer_tacho_example.c
+ * Date: 2022-08-24 13:57:55
+ * LastEditTime: 2022-08-24 13:57:56
+ * Description: This file is for timer tacho example functions.
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 liushengming 2022/11/25 init
+ */
+
+#include
+#include "FreeRTOSConfig.h"
+#include "FreeRTOS.h"
+#include "task.h"
+#include "fpinctrl.h"
+#include "fassert.h"
+#include "timers.h"
+#include "ftimer_tacho_os.h"
+#include "timer_tacho_example.h"
+#include "fparameters.h"
+#include "fpinctrl.h"
+#include "fcpu_info.h"
+#include "sdkconfig.h"
+#include "fdebug.h"
+
+/* The periods assigned to the one-shot timers. */
+#define ONE_SHOT_TIMER_PERIOD ( pdMS_TO_TICKS( 50000UL ) )
+
+#define TIMER_IRQ_PRIORITY 0xb
+#define TACHO_IRQ_PRIORITY 0xc
+#define TIMER_INSTANCE_NUM 0U
+#define TACHO_INSTANCE_NUM 12U
+
+/* write and read task delay in milliseconds */
+#define TASK_DELAY_MS 2000UL
+
+static xTaskHandle timer_handle;
+static xTaskHandle tacho_handle;
+static xTaskHandle cap_handle;
+static xTaskHandle init_handle;
+
+static FFreeRTOSTimerTacho *os_timer_ctrl;
+static FFreeRTOSTimerTacho *os_tacho_ctrl;
+
+volatile int timerflag = 0;
+volatile int tachoflag = 0;
+
+/***** timer intr and handler******/
+/**
+ * @name: CycCmpIntrHandler
+ * @msg: 循环定时回调函数
+ * @return {*}
+ * @param {void} *param
+ */
+static void CycCmpIntrHandler(void *param)
+{
+ FTimerTachoCtrl *instance_p = (FTimerTachoCtrl *)param;
+ timerflag++;
+ printf("Cyc intr,id: %d,times_in: %d.\r\n", instance_p->config.id, timerflag);
+}
+
+/**
+ * @name: OnceCmpIntrHandler
+ * @msg: 单次定时回调服务函数
+ * @return {*}
+ * @param {void} *param
+ */
+static void OnceCmpIntrHandler(void *param)
+{
+ FTimerTachoCtrl *instance_p = (FTimerTachoCtrl *)param;
+ printf("Once cmp intr, timer id: %d.\r\n", instance_p->config.id);
+ FTimerSetInterruptMask(instance_p, FTIMER_EVENT_ONCE_CMP, FALSE);
+}
+
+/**
+ * @name: RolloverIntrHandler
+ * @msg: 此中断已经在驱动层进行了屏蔽,由于我们设置的cmp值已经是翻转值,所以等同于中断计数中断,此处可作为用法的拓展
+ * @return {*}
+ * @param {void} *param
+ */
+static void RolloverIntrHandler(void *param)
+{
+ FTimerTachoCtrl *instance_p = (FTimerTachoCtrl *)param;
+ /* Anything else that you can do.*/
+ printf("Roll over cmp intr, timer id: %d", instance_p->config.id);
+}
+
+/**
+ * @name: TimerDisableIntr
+ * @msg: 失能中断
+ * @return {void}
+ * @param {FTimerTachoCtrl} *instance_p 驱动控制数据结构
+ */
+void TimerDisableIntr(FTimerTachoCtrl *instance_p)
+{
+ u32 irq_num = FTIMER_TACHO_IRQ_NUM(instance_p->config.id);
+
+ InterruptMask(irq_num);
+}
+
+/**
+ * @name: TimerEnableIntr
+ * @msg: 设置并且使能中断
+ * @return {void}
+ * @param {FTimerTachoCtrl} *instance_p 驱动控制数据结构
+ */
+static void TimerEnableIntr(FTimerTachoCtrl *instance_p)
+{
+ FASSERT(instance_p);
+
+ u32 irq_num = FTIMER_TACHO_IRQ_NUM(instance_p->config.id);
+
+ u32 cpu_id;
+ GetCpuId(&cpu_id);
+ InterruptSetTargetCpus(irq_num, cpu_id);
+ /* disable timer irq */
+ InterruptMask(irq_num);
+
+ /* umask timer irq */
+ InterruptSetPriority(irq_num, TIMER_IRQ_PRIORITY);
+ InterruptInstall(irq_num, FTimerTachoIntrHandler, instance_p, instance_p->config.name);
+
+ FTimerTachoSetIntr(instance_p);
+ /* enable irq */
+ InterruptUmask(irq_num);
+
+ return ;
+}
+
+/***** tacho intr and handler******/
+
+static void TachoDisableIntr(FTimerTachoCtrl *instance_p)
+{
+ FASSERT(instance_p);
+ u32 irq_num = FTIMER_TACHO_IRQ_NUM(instance_p->config.id);
+ InterruptMask(irq_num);
+}
+
+static void TachOverIntrHandler(void *param)
+{
+ FTimerTachoCtrl *instance_p = (FTimerTachoCtrl *)param;
+ u32 irq_num = FTIMER_TACHO_IRQ_NUM(instance_p->config.id);
+ InterruptMask(irq_num);
+ u32 rpm;
+ FTachoGetFanRPM(instance_p, &rpm);
+ printf("TachOver intr,tacho id: %d,rpm:%d.\r\n", instance_p->config.id, rpm);
+ InterruptUmask(irq_num);
+ tachoflag++;
+ if (tachoflag > 20)
+ {
+ tachoflag = 0;
+ TachoDisableIntr(instance_p);
+ printf("Please deinit tacho,then init.");
+ }
+}
+
+static void CapIntrHandler(void *param)
+{
+ FTimerTachoCtrl *instance_p = (FTimerTachoCtrl *)param;
+ printf("TachCapt intr,tacho id: %d", instance_p->config.id);
+}
+
+static void TachUnderIntrHandler(void *param)
+{
+ FTimerTachoCtrl *instance_p = (FTimerTachoCtrl *)param;
+ u32 irq_num = FTIMER_TACHO_IRQ_NUM(instance_p->config.id);
+ InterruptMask(irq_num);
+ u32 rpm;
+ FTachoGetFanRPM(instance_p, &rpm);
+ printf("TachUnder intr,tacho id: %d,rpm:%d.\r\n", instance_p->config.id, rpm);
+ InterruptUmask(irq_num);
+ tachoflag++;
+ if (tachoflag > 20)
+ {
+ tachoflag = 0;
+ TachoDisableIntr(instance_p);
+ printf("Please deinit tacho,then init again.");
+ }
+}
+
+void TachoEnableIntr(FTimerTachoCtrl *instance_p)
+{
+ FASSERT(instance_p);
+ u32 irq_num = FTIMER_TACHO_IRQ_NUM(instance_p->config.id);
+
+ u32 cpu_id;
+ GetCpuId(&cpu_id);
+ InterruptSetTargetCpus(irq_num, cpu_id);
+
+ /* disable timer irq */
+ InterruptMask(irq_num);
+
+ /* umask timer irq */
+ InterruptSetPriority(irq_num, TACHO_IRQ_PRIORITY);
+ InterruptInstall(irq_num, FTimerTachoIntrHandler, instance_p, instance_p->config.name);
+
+ FTimerTachoSetIntr(instance_p);
+ /* enable irq */
+ InterruptUmask(irq_num);
+
+ return;
+}
+
+static void TimerTask(void *pvParameters)
+{
+ TickType_t xDelay = pdMS_TO_TICKS(TASK_DELAY_MS);
+ FError ret = FREERTOS_TIMER_TACHO_SUCCESS;
+ FFreeRTOSTimerTacho *timer_p = (FFreeRTOSTimerTacho *)pvParameters;
+ vTaskDelay(xDelay);
+ printf("\r\n*****TimerTask is running...\r\n");
+
+ TimerEnableIntr(&os_timer_ctrl->ctrl);
+ ret = FFreeRTOSTimerStart(timer_p);
+ if (ret != FREERTOS_TIMER_TACHO_SUCCESS)
+ {
+ printf("TimerTask Start failed.\r\n");
+ return;
+ }
+
+ xDelay = pdMS_TO_TICKS(10000);/*delay 10s*/
+ vTaskDelay(xDelay);
+
+ ret = FFreeRTOSTimerStop(timer_p);
+ if (ret != FREERTOS_TIMER_TACHO_SUCCESS)
+ {
+ printf("TimerTask Stop failed.\r\n");
+ return;
+ }
+
+ /* disable timer irq */
+ TimerDisableIntr(&os_timer_ctrl->ctrl);
+ FFreeRTOSTimerDeinit(timer_p);
+ printf("***TimerTask is over.\r\n");
+ vTaskDelete(NULL);
+}
+
+static void TachoTask(void *pvParameters)
+{
+ const TickType_t xDelay = pdMS_TO_TICKS(TASK_DELAY_MS);
+ FFreeRTOSTimerTacho *tacho_p = (FFreeRTOSTimerTacho *)pvParameters;
+ FError ret = FREERTOS_TIMER_TACHO_SUCCESS;
+ vTaskDelay(xDelay);
+ printf("\r\n*****TachoTask is running...\r\n");
+
+ TachoEnableIntr(&tacho_p->ctrl);
+ ret = FFreeRTOSTimerStart(tacho_p);
+ u32 rpm;
+ vTaskDelay(100);/*等待采样周期完成*/
+ if (ret != FREERTOS_TIMER_TACHO_SUCCESS)
+ {
+ printf("Tacho start failed.\r\n");
+ return;
+ }
+ for (size_t i = 0; i < 5; i++)
+ {
+ ret = FFreeRTOSTachoGetRPM(tacho_p, &rpm);
+ if (ret != FREERTOS_TIMER_TACHO_SUCCESS)
+ {
+ printf("TachoTask Stop failed.\r\n");
+ return;
+ }
+ printf("***GET_RPM:%d.\r\n", rpm);
+ vTaskDelay(xDelay);/*Collect every 2 seconds*/
+ }
+ TachoDisableIntr(&tacho_p->ctrl);
+ FFreeRTOSTimerStop(tacho_p);
+ FFreeRTOSTachoDeinit(tacho_p);
+
+tacho_task_exit:
+ printf("***TachoTask over.\r\n");
+ vTaskDelete(NULL);
+}
+
+static void captask(void *pvParameters)
+{
+ const TickType_t xDelay = pdMS_TO_TICKS(TASK_DELAY_MS);
+ FFreeRTOSTimerTacho *cap_p = (FFreeRTOSTimerTacho *)pvParameters;
+ FError ret = FREERTOS_TIMER_TACHO_SUCCESS;
+ vTaskDelay(pdMS_TO_TICKS(1));
+
+ printf("\r\n*****TimerCapTask is running...\r\n");
+
+ TachoEnableIntr(&cap_p->ctrl);
+ ret = FFreeRTOSTimerStart(cap_p);
+ if (ret != FREERTOS_TIMER_TACHO_SUCCESS)
+ {
+ printf("Tacho start failed.\r\n");
+ goto tacho_task_exit;
+ }
+ for (size_t i = 0; i < 5; i++)
+ {
+ printf("Get id %d CaptureCnt is :%d.\r\n", cap_p->ctrl.config.id, FFreeRTOSTachoGetCNT(cap_p));
+ vTaskDelay(pdMS_TO_TICKS(1));
+ }
+ /* disable tacho irq */
+ TachoDisableIntr(&cap_p->ctrl);
+ FFreeRTOSTimerStop(cap_p);
+ FFreeRTOSTachoDeinit(cap_p);
+
+tacho_task_exit:
+ printf("TimerCapTask is over.\r\n");
+ vTaskDelete(NULL);
+}
+
+static void InitTask(void *pvParameters)
+{
+ BaseType_t xReturn = pdPASS;
+ /* init timers controller */
+
+ os_timer_ctrl = FFreeRTOSTimerInit(TIMER_INSTANCE_NUM, FTIMER_CYC_CMP, 2000000);/* 2000000 us = 2 s */
+ if (os_timer_ctrl == NULL)
+ {
+ printf("*Timer init error.\r\n");
+ goto timer_init_exit;
+ }
+ FTimerRegisterEvtCallback(&os_timer_ctrl->ctrl, FTIMER_EVENT_CYC_CMP, CycCmpIntrHandler);
+ FTimerRegisterEvtCallback(&os_timer_ctrl->ctrl, FTIMER_EVENT_ONCE_CMP, OnceCmpIntrHandler);
+ FTimerRegisterEvtCallback(&os_timer_ctrl->ctrl, FTIMER_EVENT_ROLL_OVER, RolloverIntrHandler);
+
+ /*init mode: FTIMER_WORK_MODE_CAPTURE or FTIMER_WORK_MODE_TACHO */
+ os_tacho_ctrl = FFreeRTOSTachoInit(TACHO_INSTANCE_NUM, FTIMER_WORK_MODE_TACHO);
+ if (os_timer_ctrl == NULL)
+ {
+ printf("*Tacho init error.\r\n");
+ goto timer_init_exit;
+ }
+ FTimerRegisterEvtCallback(&os_tacho_ctrl->ctrl, FTACHO_EVENT_OVER, TachOverIntrHandler);
+ FTimerRegisterEvtCallback(&os_tacho_ctrl->ctrl, FTACHO_EVENT_UNDER, TachUnderIntrHandler);
+ FTimerRegisterEvtCallback(&os_tacho_ctrl->ctrl, FTACHO_EVENT_CAPTURE, CapIntrHandler);
+
+ taskENTER_CRITICAL(); //进入临界区
+ xReturn = xTaskCreate((TaskFunction_t)TimerTask, /* 任务入口函数 */
+ (const char *)"TimerTask", /* 任务名字 */
+ (uint16_t)1024, /* 任务栈大小 */
+ (void *)os_timer_ctrl, /* 任务入口函数参数 */
+ (UBaseType_t)configMAX_PRIORITIES - 1, /* 任务的优先级 */
+ (TaskHandle_t *)&timer_handle); /* 任务控制 */
+ FASSERT_MSG(xReturn == pdPASS, "TimerTask create is failed.");
+
+ xReturn = xTaskCreate((TaskFunction_t)TachoTask, /* 任务入口函数 */
+ (const char *)"TachoTask",/* 任务名字 */
+ (uint16_t)1024, /* 任务栈大小 */
+ (void *)os_tacho_ctrl,/* 任务入口函数参数 */
+ (UBaseType_t)configMAX_PRIORITIES - 2, /* 任务的优先级 */
+ (TaskHandle_t *)&tacho_handle); /* 任务控制 */
+ FASSERT_MSG(xReturn == pdPASS, "TachoTask create is failed.");
+
+ taskEXIT_CRITICAL(); //退出临界区
+timer_init_exit:
+ vTaskDelete(NULL);
+}
+
+BaseType_t FFreeRTOSTimerTachoCreate(void)
+{
+ BaseType_t xReturn = pdPASS;/* 定义一个创建信息返回值,默认为 pdPASS */
+
+ taskENTER_CRITICAL(); //进入临界区
+
+ /* init timers controller */
+
+ xReturn = xTaskCreate((TaskFunction_t)InitTask, /* 任务入口函数 */
+ (const char *)"InitTask",/* 任务名字 */
+ (uint16_t)1024, /* 任务栈大小 */
+ (void *)NULL,/* 任务入口函数参数 */
+ (UBaseType_t)configMAX_PRIORITIES - 1, /* 任务的优先级 */
+ (TaskHandle_t *)&init_handle); /* 任务控制 */
+ FASSERT_MSG(xReturn == pdPASS, "TachoTask create is failed.");
+
+ taskEXIT_CRITICAL(); //退出临界区
+
+ return xReturn;
+}
+
diff --git a/example/peripheral/usb/cherryusb_host/configs/e2000d_aarch32_eg_configs b/example/peripheral/usb/cherryusb_host/configs/e2000d_aarch32_eg_configs
index 6c949218c8b063d49d05f5751cf50510c2f07e66..c52ecc843f5cbc871807a7d0fc791fbbc24edd56 100644
--- a/example/peripheral/usb/cherryusb_host/configs/e2000d_aarch32_eg_configs
+++ b/example/peripheral/usb/cherryusb_host/configs/e2000d_aarch32_eg_configs
@@ -68,6 +68,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -112,6 +113,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -148,6 +158,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -169,12 +180,6 @@ CONFIG_FREERTOS_USE_FSPIM=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -186,14 +191,32 @@ CONFIG_FREERTOS_USE_FSPIM=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -226,4 +249,27 @@ CONFIG_CHERRY_USB_HOST_VEDIO=y
CONFIG_CHERRY_USB_HOST_CDC=y
CONFIG_CHERRY_USB_HOST_RNDIS_WIRELESS=y
# end of CherryUSB Configuration
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/usb/cherryusb_host/configs/e2000d_aarch64_eg_configs b/example/peripheral/usb/cherryusb_host/configs/e2000d_aarch64_eg_configs
index 5ee6831fd2f1f39daf502e29b45617c5a60b20fa..899e03a8e5b6e1ec833356a99935c09a9a2aa60b 100644
--- a/example/peripheral/usb/cherryusb_host/configs/e2000d_aarch64_eg_configs
+++ b/example/peripheral/usb/cherryusb_host/configs/e2000d_aarch64_eg_configs
@@ -68,6 +68,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -108,6 +109,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -144,6 +154,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -165,12 +176,6 @@ CONFIG_FREERTOS_USE_FSPIM=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -182,14 +187,32 @@ CONFIG_FREERTOS_USE_FSPIM=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -222,4 +245,27 @@ CONFIG_CHERRY_USB_HOST_VEDIO=y
CONFIG_CHERRY_USB_HOST_CDC=y
CONFIG_CHERRY_USB_HOST_RNDIS_WIRELESS=y
# end of CherryUSB Configuration
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/usb/cherryusb_host/configs/e2000s_aarch32_eg_configs b/example/peripheral/usb/cherryusb_host/configs/e2000s_aarch32_eg_configs
index ecbd00e88a113cbae6ab1e377f7946916585f3e6..0ed600da98ba1e5b287cbe4435c3509330008c8c 100644
--- a/example/peripheral/usb/cherryusb_host/configs/e2000s_aarch32_eg_configs
+++ b/example/peripheral/usb/cherryusb_host/configs/e2000s_aarch32_eg_configs
@@ -68,6 +68,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -112,6 +113,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -148,6 +158,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -169,12 +180,6 @@ CONFIG_FREERTOS_USE_FSPIM=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -186,14 +191,32 @@ CONFIG_FREERTOS_USE_FSPIM=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -226,4 +249,27 @@ CONFIG_CHERRY_USB_HOST_VEDIO=y
CONFIG_CHERRY_USB_HOST_CDC=y
CONFIG_CHERRY_USB_HOST_RNDIS_WIRELESS=y
# end of CherryUSB Configuration
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/usb/cherryusb_host/configs/e2000s_aarch64_eg_configs b/example/peripheral/usb/cherryusb_host/configs/e2000s_aarch64_eg_configs
index f1823f7834a570038e29c17e38841563ccbe7df1..4556342147c74a28e5937c93e6bb76806c5512e1 100644
--- a/example/peripheral/usb/cherryusb_host/configs/e2000s_aarch64_eg_configs
+++ b/example/peripheral/usb/cherryusb_host/configs/e2000s_aarch64_eg_configs
@@ -68,6 +68,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -108,6 +109,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -144,6 +154,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -165,12 +176,6 @@ CONFIG_FREERTOS_USE_FSPIM=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -182,14 +187,32 @@ CONFIG_FREERTOS_USE_FSPIM=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -222,4 +245,27 @@ CONFIG_CHERRY_USB_HOST_VEDIO=y
CONFIG_CHERRY_USB_HOST_CDC=y
CONFIG_CHERRY_USB_HOST_RNDIS_WIRELESS=y
# end of CherryUSB Configuration
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/usb/cherryusb_host/inc/usb_host.h b/example/peripheral/usb/cherryusb_host/inc/usb_host.h
index 48edc36a41ce41e69819a6f08d5aeaf082189e6b..5888559c70f3604a4d48fe826ec852204952bda2 100644
--- a/example/peripheral/usb/cherryusb_host/inc/usb_host.h
+++ b/example/peripheral/usb/cherryusb_host/inc/usb_host.h
@@ -1,27 +1,28 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: usb_host.h
* Date: 2022-07-19 09:26:25
* LastEditTime: 2022-07-19 09:26:25
- * Description: This files is for
- *
- * Modify History:
+ * Description: This file is for the usb host definition.
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
+ * 1.0 zhugengyu 2022/9/20 init commit
*/
-#ifndef EXAMPLE_USB_HOST_H
-#define EXAMPLE_USB_HOST_H
+#ifndef USB_HOST_H
+#define USB_HOST_H
#ifdef __cplusplus
extern "C"
diff --git a/example/peripheral/usb/cherryusb_host/main.c b/example/peripheral/usb/cherryusb_host/main.c
index c188a8dd866665419f31156fe4c347fa36d24c9d..b1c1a3a505a8ef6083af9f513d69dfbaa9fcf896 100644
--- a/example/peripheral/usb/cherryusb_host/main.c
+++ b/example/peripheral/usb/cherryusb_host/main.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: main.c
* Date: 2022-06-17 08:17:59
* LastEditTime: 2022-06-17 08:17:59
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
+ * Description: This file is for cherry-usb test main entry.
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 zhugengyu 2022/10/19 init commit
*/
#include "shell.h"
@@ -30,13 +31,15 @@ int main(void)
BaseType_t ret;
ret = LSUserShellTask();
- if(ret != pdPASS)
+ if (ret != pdPASS)
+ {
goto FAIL_EXIT;
+ }
- vTaskStartScheduler(); /* 启动任务,开启调度 */
+ vTaskStartScheduler(); /* 启动任务,开启调度 */
while (1); /* 正常不会执行到这里 */
-
+
FAIL_EXIT:
- printf("failed 0x%x \r\n", ret);
+ printf("Failed,the ret value is 0x%x. \r\n", ret);
return 0;
}
diff --git a/example/peripheral/usb/cherryusb_host/sdkconfig b/example/peripheral/usb/cherryusb_host/sdkconfig
index f1823f7834a570038e29c17e38841563ccbe7df1..4556342147c74a28e5937c93e6bb76806c5512e1 100644
--- a/example/peripheral/usb/cherryusb_host/sdkconfig
+++ b/example/peripheral/usb/cherryusb_host/sdkconfig
@@ -68,6 +68,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -108,6 +109,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -144,6 +154,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -165,12 +176,6 @@ CONFIG_FREERTOS_USE_FSPIM=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -182,14 +187,32 @@ CONFIG_FREERTOS_USE_FSPIM=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -222,4 +245,27 @@ CONFIG_CHERRY_USB_HOST_VEDIO=y
CONFIG_CHERRY_USB_HOST_CDC=y
CONFIG_CHERRY_USB_HOST_RNDIS_WIRELESS=y
# end of CherryUSB Configuration
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/usb/cherryusb_host/sdkconfig.h b/example/peripheral/usb/cherryusb_host/sdkconfig.h
index ef67d74ffd0e9fb9558bf70e7289ddfeddf8257c..ba85cf18e5ce115bea0c33a49b3a93e32a815042 100644
--- a/example/peripheral/usb/cherryusb_host/sdkconfig.h
+++ b/example/peripheral/usb/cherryusb_host/sdkconfig.h
@@ -63,6 +63,7 @@
/* CONFIG_USE_ADC is not set */
/* CONFIG_USE_PWM is not set */
/* CONFIG_USE_IPC is not set */
+/* CONFIG_USE_MEDIA is not set */
/* end of Components Configuration */
#define CONFIG_USE_NEW_LIBC
/* end of Standalone Setting */
@@ -99,6 +100,12 @@
/* Compiler Options */
+/* Cross-Compiler Setting */
+
+#define CONFIG_GCC_OPTIMIZE_LEVEL 0
+/* CONFIG_USE_EXT_COMPILER is not set */
+/* CONFIG_USE_KLIN_SYS is not set */
+/* end of Cross-Compiler Setting */
#define CONFIG_OUTPUT_BINARY
/* end of Compiler Options */
/* end of Building Option */
@@ -128,6 +135,7 @@
/* Freertos Eth Drivers */
/* CONFIG_FREERTOS_USE_XMAC is not set */
+/* CONFIG_FREERTOS_USE_GMAC is not set */
/* end of Freertos Eth Drivers */
/* Freertos Gpio Drivers */
@@ -146,11 +154,6 @@
/* CONFIG_FREERTOS_USE_FGDMA is not set */
/* end of Freertos DMA Drivers */
-/* Freertos MMC Drivers */
-
-/* CONFIG_FREERTOS_USE_FSDIO is not set */
-/* end of Freertos MMC Drivers */
-
/* Freertos Adc Drivers */
/* CONFIG_FREERTOS_USE_ADC is not set */
@@ -160,13 +163,28 @@
/* CONFIG_FREERTOS_USE_CAN is not set */
/* end of Freertos Can Drivers */
+
+/* Freertos I2c Drivers */
+
+/* CONFIG_FREERTOS_USE_I2C is not set */
+/* end of Freertos I2c Drivers */
+
+/* Freertos Mio Drivers */
+
+/* CONFIG_FREERTOS_USE_MIO is not set */
+/* end of Freertos Mio Drivers */
+
+/* Freertos Timer Drivers */
+
+/* CONFIG_FREERTOS_USE_TIMER is not set */
+/* end of Freertos Timer Drivers */
/* end of Component Configuration */
-/* FreeRTOS Setting */
+/* Third-Party Configuration */
/* CONFIG_USE_LWIP is not set */
#define CONFIG_USE_BACKTRACE
-/* CONFIG_USE_FATFS is not set */
+/* CONFIG_USE_FATFS_0_1_4 is not set */
/* CONFIG_USE_SFUD is not set */
/* CONFIG_USE_SPIFFS is not set */
/* CONFIG_USE_AMP is not set */
@@ -196,6 +214,28 @@
#define CONFIG_CHERRY_USB_HOST_CDC
#define CONFIG_CHERRY_USB_HOST_RNDIS_WIRELESS
/* end of CherryUSB Configuration */
-/* end of FreeRTOS Setting */
+/* end of Third-Party Configuration */
+
+/* Kernel Configuration */
+
+#define CONFIG_FREERTOS_OPTIMIZED_SCHEDULER
+#define CONFIG_FREERTOS_HZ 1000
+#define CONFIG_FREERTOS_MAX_PRIORITIES 32
+#define CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES 13
+#define CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES 11
+#define CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS 1
+#define CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE 1024
+#define CONFIG_FREERTOS_MAX_TASK_NAME_LEN 32
+#define CONFIG_FREERTOS_TIMER_TASK_PRIORITY 1
+#define CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH 2048
+#define CONFIG_FREERTOS_TIMER_QUEUE_LENGTH 10
+#define CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE 0
+#define CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS
+#define CONFIG_FREERTOS_USE_TRACE_FACILITY
+#define CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS
+/* CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set */
+#define CONFIG_FREERTOS_TOTAL_HEAP_SIZE 10240
+#define CONFIG_FREERTOS_TASK_FPU_SUPPORT 1
+/* end of Kernel Configuration */
#endif
diff --git a/example/peripheral/usb/cherryusb_host/src/cmd_usb.c b/example/peripheral/usb/cherryusb_host/src/cmd_usb.c
index f0faed086b00ce72327e75c45084a194d1852b24..60d5a6f8bb670fd35d7abc65bba5274af860bfc6 100644
--- a/example/peripheral/usb/cherryusb_host/src/cmd_usb.c
+++ b/example/peripheral/usb/cherryusb_host/src/cmd_usb.c
@@ -1,22 +1,22 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: cmd_usb.c
* Date: 2022-09-19 14:34:44
* LastEditTime: 2022-09-19 14:34:45
- * Description: This files is for
- *
- * Modify History:
+ * Description: This file is for USB shell command.
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
* 1.0 zhugengyu 2022/9/20 init commit
diff --git a/example/peripheral/usb/cherryusb_host/src/usb_disk.c b/example/peripheral/usb/cherryusb_host/src/usb_disk.c
index da825a8255f251cbccf466a0b565cb2c0de5119b..7a76663b5c7bbafcc9d2963e810c7dbc197adf6f 100644
--- a/example/peripheral/usb/cherryusb_host/src/usb_disk.c
+++ b/example/peripheral/usb/cherryusb_host/src/usb_disk.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: usb_disk.c
* Date: 2022-09-23 08:24:09
* LastEditTime: 2022-09-23 08:24:10
- * Description: This files is for
- *
- * Modify History:
- * Ver Who Date Changes
+ * Description: This file is for the usb disk functions.
+ *
+ * Modify History:
+ * Ver Who Date Changes
* ----- ------ -------- --------------------------------------
+ * 1.0 zhugengyu 2022/10/19 init commit
*/
/***************************** Include Files *********************************/
#include
@@ -51,7 +52,7 @@
/*****************************************************************************/
-static void UsbMscTask(void * args)
+static void UsbMscTask(void *args)
{
int ret;
struct usbh_msc *msc_class;
@@ -62,9 +63,9 @@ static void UsbMscTask(void * args)
while (TRUE)
{
msc_class = (struct usbh_msc *)usbh_find_class_instance("/dev/sda");
- if (msc_class == NULL)
+ if (msc_class == NULL)
{
- USB_LOG_RAW("do not find /dev/sda\r\n");
+ USB_LOG_RAW("Do not find /dev/sda. \r\n");
goto err_exit;
}
@@ -76,29 +77,29 @@ static void UsbMscTask(void * args)
}
ret = usbh_msc_scsi_write10(msc_class, 0, wr_table, 1);
- if (ret < 0)
+ if (ret < 0)
{
- USB_LOG_ERR("scsi_write10 error,ret:%d\r\n", ret);
+ USB_LOG_ERR("Error in scsi_write10 error, ret:%d", ret);
goto err_exit;
}
/* get the partition table */
ret = usbh_msc_scsi_read10(msc_class, 0, rd_table, 1);
- if (ret < 0)
+ if (ret < 0)
{
- USB_LOG_RAW("scsi_read10 error,ret:%d\r\n", ret);
+ USB_LOG_RAW("Error in scsi_read10, ret:%d", ret);
goto err_exit;
}
-
+
/* check if read table == write table */
if (0 != memcmp(wr_table, rd_table, sizeof(rd_table)))
{
- USB_LOG_ERR("check read and write failed !!!\r\n");
+ USB_LOG_ERR("Failed to check read and write.\r\n");
goto err_exit;
}
else
{
- printf("[%d] disk read and write successful\r\n", loop++);
+ printf("[%d] disk read and write successfully.\r\n", loop++);
}
vTaskDelay(10);
@@ -114,15 +115,15 @@ BaseType_t FFreeRTOSRunUsbDisk(void)
taskENTER_CRITICAL(); /* no schedule when create task */
- ret = xTaskCreate((TaskFunction_t )UsbMscTask,
- (const char* )"UsbMscTask",
- (uint16_t )2048,
- NULL,
- (UBaseType_t )configMAX_PRIORITIES - 1,
- NULL);
+ ret = xTaskCreate((TaskFunction_t)UsbMscTask,
+ (const char *)"UsbMscTask",
+ (uint16_t)2048,
+ NULL,
+ (UBaseType_t)configMAX_PRIORITIES - 1,
+ NULL);
FASSERT_MSG(pdPASS == ret, "create task failed");
taskEXIT_CRITICAL(); /* allow schedule since task created */
- return ret;
+ return ret;
}
diff --git a/example/peripheral/usb/cherryusb_host/src/usb_host.c b/example/peripheral/usb/cherryusb_host/src/usb_host.c
index f01654ea3cbbcd1c015b8620eb968a3c00f9045d..6ef0c0077b362ba3eb60b51e7520bdcaefc8a965 100644
--- a/example/peripheral/usb/cherryusb_host/src/usb_host.c
+++ b/example/peripheral/usb/cherryusb_host/src/usb_host.c
@@ -1,22 +1,22 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: usb_host.c
* Date: 2022-07-22 13:57:42
* LastEditTime: 2022-07-22 13:57:43
- * Description: This files is for
- *
- * Modify History:
+ * Description: This file is for the usb host functions.
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
* 1.0 zhugengyu 2022/9/20 init commit
@@ -73,9 +73,9 @@ static void UsbHcSetupInterrupt(void)
InterruptSetPriority(irq_num, irq_priority);
/* register intr callback */
- InterruptInstall(irq_num,
- UsbHcInterrruptHandler,
- NULL,
+ InterruptInstall(irq_num,
+ UsbHcInterrruptHandler,
+ NULL,
NULL);
/* enable irq */
@@ -110,17 +110,21 @@ void *usb_hc_malloc(size_t size)
void *usb_hc_malloc_align(size_t align, size_t size)
{
void *result = FMempMallocAlign(&memp, size, align);
-
+
if (result)
+ {
memset(result, 0U, size);
+ }
return result;
}
void usb_hc_free(void *ptr)
{
- if (NULL != ptr)
- FMempFree(&memp, ptr);
+ if (NULL != ptr)
+ {
+ FMempFree(&memp, ptr);
+ }
}
void usb_assert(const char *filename, int linenum)
@@ -134,15 +138,15 @@ void usb_hc_dcache_invalidate(void *addr, unsigned long len)
}
/*****************************************/
-static void UsbInitTask(void * args)
+static void UsbInitTask(void *args)
{
- if (0 == usbh_initialize())
+ if (0 == usbh_initialize())
{
- printf("init cherryusb host success !!! input 'usb lsusb -t' to see devices\r\n");
+ printf("Init cherryusb host successfully.put 'usb lsusb -t' to see devices.\r\n");
}
else
{
- FUSB_ERROR("init cherryusb host failed !!!");
+ FUSB_ERROR("Init cherryusb host failed.");
}
vTaskDelete(NULL);
@@ -154,12 +158,12 @@ BaseType_t FFreeRTOSInitUsb(void)
taskENTER_CRITICAL(); /* no schedule when create task */
- ret = xTaskCreate((TaskFunction_t )UsbInitTask,
- (const char* )"UsbInitTask",
- (uint16_t )2048,
- NULL,
- (UBaseType_t )configMAX_PRIORITIES - 1,
- NULL);
+ ret = xTaskCreate((TaskFunction_t)UsbInitTask,
+ (const char *)"UsbInitTask",
+ (uint16_t)2048,
+ NULL,
+ (UBaseType_t)configMAX_PRIORITIES - 1,
+ NULL);
FASSERT_MSG(pdPASS == ret, "create task failed");
taskEXIT_CRITICAL(); /* allow schedule since task created */
diff --git a/example/peripheral/usb/cherryusb_host/src/usb_input.c b/example/peripheral/usb/cherryusb_host/src/usb_input.c
index a96a2c00b0ef5d2c8656b34014ba276beafb6055..04e06d99204cf06269ebf94e56f5e199a210a54e 100644
--- a/example/peripheral/usb/cherryusb_host/src/usb_input.c
+++ b/example/peripheral/usb/cherryusb_host/src/usb_input.c
@@ -1,22 +1,22 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: usb_input.c
* Date: 2022-07-22 13:57:42
* LastEditTime: 2022-07-22 13:57:43
- * Description: This files is for
- *
- * Modify History:
+ * Description: This file is for the usb input functions.
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
* 1.0 zhugengyu 2022/9/20 init commit
@@ -199,10 +199,12 @@ static void UsbMouseHandleInput(struct usb_hid_mouse_report *input)
/* look up new key in previous keys */
static inline boolean FindKeyInPrevInput(const struct usb_hid_kbd_report *report, u8 keycode)
{
- for(u8 i=0; i < 6; i++)
+ for (u8 i = 0; i < 6; i++)
{
- if (report->key[i] == keycode)
+ if (report->key[i] == keycode)
+ {
return TRUE;
+ }
}
return FALSE;
@@ -257,7 +259,7 @@ static void UsbHidCallback(void *arg, int nbytes)
intf_protocol = UsbInputGetInterfaceProtocol(hid_class);
if (HID_PROTOCOL_KEYBOARD == intf_protocol) /* handle input from keyboard */
{
- if (nbytes < (int)sizeof(struct usb_hid_kbd_report))
+ if (nbytes < (int)sizeof(struct usb_hid_kbd_report))
{
FUSB_ERROR("nbytes = %d", nbytes);
}
@@ -268,24 +270,24 @@ static void UsbHidCallback(void *arg, int nbytes)
}
else if (HID_PROTOCOL_MOUSE == intf_protocol) /* handle input from mouse */
{
- if (nbytes < (int)sizeof(struct usb_hid_mouse_report))
+ if (nbytes < (int)sizeof(struct usb_hid_mouse_report))
{
FUSB_ERROR("nbytes = %d", nbytes);
}
else
{
- UsbMouseHandleInput((struct usb_hid_mouse_report *)hid_buffer);
+ UsbMouseHandleInput((struct usb_hid_mouse_report *)hid_buffer);
}
}
else
{
- FUSB_ERROR("unsupported hid interface %d", intf_protocol);
+ FUSB_ERROR("Unsupported hid interface %d", intf_protocol);
}
-
+
usbh_submit_urb(&hid_intin_urb); /* ask for next inputs */
}
-static void UsbInputTask(void * args)
+static void UsbInputTask(void *args)
{
int ret;
struct usbh_hid *hid_class;
@@ -294,9 +296,9 @@ static void UsbInputTask(void * args)
while (TRUE)
{
hid_class = (struct usbh_hid *)usbh_find_class_instance("/dev/input0");
- if (hid_class == NULL)
+ if (hid_class == NULL)
{
- FUSB_ERROR("do not find /dev/input0");
+ FUSB_ERROR("Do not find /dev/input0.");
goto err_exit;
}
@@ -316,15 +318,15 @@ BaseType_t FFreeRTOSRunUsbInput(void)
taskENTER_CRITICAL(); /* no schedule when create task */
- ret = xTaskCreate((TaskFunction_t )UsbInputTask,
- (const char* )"UsbInputTask",
- (uint16_t )2048,
- NULL,
- (UBaseType_t )configMAX_PRIORITIES - 1,
- NULL);
+ ret = xTaskCreate((TaskFunction_t)UsbInputTask,
+ (const char *)"UsbInputTask",
+ (uint16_t)2048,
+ NULL,
+ (UBaseType_t)configMAX_PRIORITIES - 1,
+ NULL);
FASSERT_MSG(pdPASS == ret, "create task failed");
taskEXIT_CRITICAL(); /* allow schedule since task created */
- return ret;
+ return ret;
}
\ No newline at end of file
diff --git a/example/peripheral/wdt/configs/d2000_aarch32_eg_configs b/example/peripheral/wdt/configs/d2000_aarch32_eg_configs
index 76098bcbb23b03e1e415b177520e33998ca54f38..150e30fe4c07d19a8a49d820979aa6756e549cf0 100644
--- a/example/peripheral/wdt/configs/d2000_aarch32_eg_configs
+++ b/example/peripheral/wdt/configs/d2000_aarch32_eg_configs
@@ -74,6 +74,7 @@ CONFIG_USE_FWDT=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -118,6 +119,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -154,6 +164,7 @@ CONFIG_FREERTOS_USE_WDT=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -175,12 +186,6 @@ CONFIG_FREERTOS_USE_WDT=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -192,14 +197,32 @@ CONFIG_FREERTOS_USE_WDT=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -217,4 +240,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/wdt/configs/d2000_aarch64_eg_configs b/example/peripheral/wdt/configs/d2000_aarch64_eg_configs
index 1d2d7a81d164e19aba1d05defdd0d9851c9f214f..faf0982302abc77fc7d617d7d485972cad45b5dc 100644
--- a/example/peripheral/wdt/configs/d2000_aarch64_eg_configs
+++ b/example/peripheral/wdt/configs/d2000_aarch64_eg_configs
@@ -74,6 +74,7 @@ CONFIG_USE_FWDT=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -114,6 +115,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -150,6 +160,7 @@ CONFIG_FREERTOS_USE_WDT=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -171,12 +182,6 @@ CONFIG_FREERTOS_USE_WDT=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -188,14 +193,32 @@ CONFIG_FREERTOS_USE_WDT=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -213,4 +236,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/wdt/configs/e2000d_aarch32_eg_configs b/example/peripheral/wdt/configs/e2000d_aarch32_eg_configs
index bb8130e22c62a332467b8e4deedb1ff16b87132b..2b5328e4e0c15ed37dd8d745568038951fe62e1d 100644
--- a/example/peripheral/wdt/configs/e2000d_aarch32_eg_configs
+++ b/example/peripheral/wdt/configs/e2000d_aarch32_eg_configs
@@ -74,6 +74,7 @@ CONFIG_USE_FWDT=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -118,6 +119,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -154,6 +164,7 @@ CONFIG_FREERTOS_USE_WDT=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -175,12 +186,6 @@ CONFIG_FREERTOS_USE_WDT=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -192,14 +197,32 @@ CONFIG_FREERTOS_USE_WDT=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -217,4 +240,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/wdt/configs/e2000d_aarch64_eg_configs b/example/peripheral/wdt/configs/e2000d_aarch64_eg_configs
index 5b6d679c238cfe48d89b1922105f064e24261751..eac02deea439f810c0071c90bafe88051e156e55 100644
--- a/example/peripheral/wdt/configs/e2000d_aarch64_eg_configs
+++ b/example/peripheral/wdt/configs/e2000d_aarch64_eg_configs
@@ -74,6 +74,7 @@ CONFIG_USE_FWDT=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -114,6 +115,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -150,6 +160,7 @@ CONFIG_FREERTOS_USE_WDT=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -171,12 +182,6 @@ CONFIG_FREERTOS_USE_WDT=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -188,14 +193,32 @@ CONFIG_FREERTOS_USE_WDT=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -213,4 +236,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/wdt/configs/e2000q_aarch32_eg_configs b/example/peripheral/wdt/configs/e2000q_aarch32_eg_configs
index 186928ad9f03bd952452d4e7713cca78a9e1d65f..14b06ad5b57050d96ab157980dd1aee3c2f705bf 100644
--- a/example/peripheral/wdt/configs/e2000q_aarch32_eg_configs
+++ b/example/peripheral/wdt/configs/e2000q_aarch32_eg_configs
@@ -74,6 +74,7 @@ CONFIG_USE_FWDT=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -118,6 +119,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -154,6 +164,7 @@ CONFIG_FREERTOS_USE_WDT=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -175,12 +186,6 @@ CONFIG_FREERTOS_USE_WDT=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -192,14 +197,32 @@ CONFIG_FREERTOS_USE_WDT=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -217,4 +240,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/wdt/configs/e2000q_aarch64_eg_configs b/example/peripheral/wdt/configs/e2000q_aarch64_eg_configs
index bfebe8b9e5ba92528ed3ccd4db08cf38d1b3f736..414a94243442b9df6c8bda8867e41fae677348c6 100644
--- a/example/peripheral/wdt/configs/e2000q_aarch64_eg_configs
+++ b/example/peripheral/wdt/configs/e2000q_aarch64_eg_configs
@@ -74,6 +74,7 @@ CONFIG_USE_FWDT=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -114,6 +115,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -150,6 +160,7 @@ CONFIG_FREERTOS_USE_WDT=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -171,12 +182,6 @@ CONFIG_FREERTOS_USE_WDT=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -188,14 +193,32 @@ CONFIG_FREERTOS_USE_WDT=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -213,4 +236,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
# CONFIG_USE_TLSF is not set
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/wdt/configs/ft2004_aarch32_eg_configs b/example/peripheral/wdt/configs/ft2004_aarch32_eg_configs
index 0c4e6a66156af8f2e25e3265c4aecf47922fc0d7..5cee0111e787964d238d8d705c23799cad803850 100644
--- a/example/peripheral/wdt/configs/ft2004_aarch32_eg_configs
+++ b/example/peripheral/wdt/configs/ft2004_aarch32_eg_configs
@@ -74,6 +74,7 @@ CONFIG_USE_FWDT=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -118,6 +119,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -154,6 +164,7 @@ CONFIG_FREERTOS_USE_WDT=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -175,12 +186,6 @@ CONFIG_FREERTOS_USE_WDT=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -192,14 +197,32 @@ CONFIG_FREERTOS_USE_WDT=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -217,4 +240,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/wdt/configs/ft2004_aarch64_eg_configs b/example/peripheral/wdt/configs/ft2004_aarch64_eg_configs
index d5e9c66c7a43cd7bd384f35b54d50a624a91ca03..ff15bf211594a7c988efec090626b164bd5f6cb8 100644
--- a/example/peripheral/wdt/configs/ft2004_aarch64_eg_configs
+++ b/example/peripheral/wdt/configs/ft2004_aarch64_eg_configs
@@ -74,6 +74,7 @@ CONFIG_USE_FWDT=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -114,6 +115,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -150,6 +160,7 @@ CONFIG_FREERTOS_USE_WDT=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -171,12 +182,6 @@ CONFIG_FREERTOS_USE_WDT=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -188,14 +193,32 @@ CONFIG_FREERTOS_USE_WDT=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -213,4 +236,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/wdt/inc/wdt_example.h b/example/peripheral/wdt/inc/wdt_example.h
index cc1e293f4b02ee94db5510f7a8fb26ed8a8cdf58..ed1e77baa124dead93095e53be5379e15e075e26 100644
--- a/example/peripheral/wdt/inc/wdt_example.h
+++ b/example/peripheral/wdt/inc/wdt_example.h
@@ -1,30 +1,41 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: wdt_example.h
* Date: 2022-06-17 10:42:40
* LastEditTime: 2022-06-17 10:42:40
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
+ * Description: This file is for wdt test example function declarations.
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2022/8/9 first release
*/
#ifndef WDT_EXAMPLE_H
#define WDT_EXAMPLE_H
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
/* wdt read and write test */
BaseType_t FFreeRTOSWdtCreate(u32 id);
+
+#ifdef __cplusplus
+}
+#endif
+
#endif // !
\ No newline at end of file
diff --git a/example/peripheral/wdt/main.c b/example/peripheral/wdt/main.c
index 1ea241e5bd3409a4a50c42c0b2405b50beb1dbcc..2dd2538b27aca08aad3226ec1171815cdecd0cf7 100644
--- a/example/peripheral/wdt/main.c
+++ b/example/peripheral/wdt/main.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: main.c
* Date: 2022-06-17 08:17:59
* LastEditTime: 2022-06-17 08:17:59
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
+ * Description: This file is for wdt test main entry.
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2022/8/9 first release
*/
#include "shell.h"
@@ -31,17 +32,21 @@ int main(void)
BaseType_t ret;
ret = FFreeRTOSWdtCreate(0);
- if(ret != pdPASS)
+ if (ret != pdPASS)
+ {
goto FAIL_EXIT;
+ }
ret = LSUserShellTask() ;
- if(ret != pdPASS)
+ if (ret != pdPASS)
+ {
goto FAIL_EXIT;
+ }
- vTaskStartScheduler(); /* 启动任务,开启调度 */
+ vTaskStartScheduler(); /* 启动任务,开启调度 */
while (1); /* 正常不会执行到这里 */
-
+
FAIL_EXIT:
- printf("failed 0x%x \r\n", ret);
+ printf("Failed,the ret value is 0x%x. \r\n", ret);
return 0;
}
diff --git a/example/peripheral/wdt/sdkconfig b/example/peripheral/wdt/sdkconfig
index 5b6d679c238cfe48d89b1922105f064e24261751..414a94243442b9df6c8bda8867e41fae677348c6 100644
--- a/example/peripheral/wdt/sdkconfig
+++ b/example/peripheral/wdt/sdkconfig
@@ -2,7 +2,7 @@
#
# Freertos Configuration
#
-CONFIG_TARGET_NAME="e2000d_freertos_a64"
+CONFIG_TARGET_NAME="e2000q_freertos_a64"
# end of Freertos Configuration
#
@@ -26,8 +26,8 @@ CONFIG_USE_SYS_TICK=y
#
# CONFIG_TARGET_F2000_4 is not set
# CONFIG_TARGET_D2000 is not set
-# CONFIG_TARGET_E2000Q is not set
-CONFIG_TARGET_E2000D=y
+CONFIG_TARGET_E2000Q=y
+# CONFIG_TARGET_E2000D is not set
# CONFIG_TARGET_E2000S is not set
CONFIG_TARGET_E2000=y
CONFIG_DEFAULT_DEBUG_PRINT_UART1=y
@@ -74,6 +74,7 @@ CONFIG_USE_FWDT=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -114,6 +115,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -150,6 +160,7 @@ CONFIG_FREERTOS_USE_WDT=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -171,12 +182,6 @@ CONFIG_FREERTOS_USE_WDT=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -188,14 +193,32 @@ CONFIG_FREERTOS_USE_WDT=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -210,7 +233,30 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set
# end of Letter Shell Configuration
-CONFIG_USE_TLSF=y
+# CONFIG_USE_TLSF is not set
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/peripheral/wdt/sdkconfig.h b/example/peripheral/wdt/sdkconfig.h
index 1c8b59bbc9d9f616d71970e00fcbe42d2d80895b..f8dd6b5a49346e9c7fa2e905c6eebb28ffb987a6 100644
--- a/example/peripheral/wdt/sdkconfig.h
+++ b/example/peripheral/wdt/sdkconfig.h
@@ -3,7 +3,7 @@
/* Freertos Configuration */
-#define CONFIG_TARGET_NAME "e2000d_freertos_a64"
+#define CONFIG_TARGET_NAME "e2000q_freertos_a64"
/* end of Freertos Configuration */
/* Standalone Setting */
@@ -24,8 +24,8 @@
/* CONFIG_TARGET_F2000_4 is not set */
/* CONFIG_TARGET_D2000 is not set */
-/* CONFIG_TARGET_E2000Q is not set */
-#define CONFIG_TARGET_E2000D
+#define CONFIG_TARGET_E2000Q
+/* CONFIG_TARGET_E2000D is not set */
/* CONFIG_TARGET_E2000S is not set */
#define CONFIG_TARGET_E2000
#define CONFIG_DEFAULT_DEBUG_PRINT_UART1
@@ -67,6 +67,7 @@
/* CONFIG_USE_ADC is not set */
/* CONFIG_USE_PWM is not set */
/* CONFIG_USE_IPC is not set */
+/* CONFIG_USE_MEDIA is not set */
/* end of Components Configuration */
#define CONFIG_USE_NEW_LIBC
/* end of Standalone Setting */
@@ -103,6 +104,12 @@
/* Compiler Options */
+/* Cross-Compiler Setting */
+
+#define CONFIG_GCC_OPTIMIZE_LEVEL 0
+/* CONFIG_USE_EXT_COMPILER is not set */
+/* CONFIG_USE_KLIN_SYS is not set */
+/* end of Cross-Compiler Setting */
#define CONFIG_OUTPUT_BINARY
/* end of Compiler Options */
/* end of Building Option */
@@ -132,6 +139,7 @@
/* Freertos Eth Drivers */
/* CONFIG_FREERTOS_USE_XMAC is not set */
+/* CONFIG_FREERTOS_USE_GMAC is not set */
/* end of Freertos Eth Drivers */
/* Freertos Gpio Drivers */
@@ -150,11 +158,6 @@
/* CONFIG_FREERTOS_USE_FGDMA is not set */
/* end of Freertos DMA Drivers */
-/* Freertos MMC Drivers */
-
-/* CONFIG_FREERTOS_USE_FSDIO is not set */
-/* end of Freertos MMC Drivers */
-
/* Freertos Adc Drivers */
/* CONFIG_FREERTOS_USE_ADC is not set */
@@ -164,13 +167,28 @@
/* CONFIG_FREERTOS_USE_CAN is not set */
/* end of Freertos Can Drivers */
+
+/* Freertos I2c Drivers */
+
+/* CONFIG_FREERTOS_USE_I2C is not set */
+/* end of Freertos I2c Drivers */
+
+/* Freertos Mio Drivers */
+
+/* CONFIG_FREERTOS_USE_MIO is not set */
+/* end of Freertos Mio Drivers */
+
+/* Freertos Timer Drivers */
+
+/* CONFIG_FREERTOS_USE_TIMER is not set */
+/* end of Freertos Timer Drivers */
/* end of Component Configuration */
-/* FreeRTOS Setting */
+/* Third-Party Configuration */
/* CONFIG_USE_LWIP is not set */
#define CONFIG_USE_BACKTRACE
-/* CONFIG_USE_FATFS is not set */
+/* CONFIG_USE_FATFS_0_1_4 is not set */
/* CONFIG_USE_SFUD is not set */
/* CONFIG_USE_SPIFFS is not set */
/* CONFIG_USE_AMP is not set */
@@ -183,9 +201,31 @@
/* CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set */
/* CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set */
/* end of Letter Shell Configuration */
-#define CONFIG_USE_TLSF
+/* CONFIG_USE_TLSF is not set */
/* CONFIG_USE_SDMMC_CMD is not set */
/* CONFIG_USE_CHERRY_USB is not set */
-/* end of FreeRTOS Setting */
+/* end of Third-Party Configuration */
+
+/* Kernel Configuration */
+
+#define CONFIG_FREERTOS_OPTIMIZED_SCHEDULER
+#define CONFIG_FREERTOS_HZ 1000
+#define CONFIG_FREERTOS_MAX_PRIORITIES 32
+#define CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES 13
+#define CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES 11
+#define CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS 1
+#define CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE 1024
+#define CONFIG_FREERTOS_MAX_TASK_NAME_LEN 32
+#define CONFIG_FREERTOS_TIMER_TASK_PRIORITY 1
+#define CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH 2048
+#define CONFIG_FREERTOS_TIMER_QUEUE_LENGTH 10
+#define CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE 0
+#define CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS
+#define CONFIG_FREERTOS_USE_TRACE_FACILITY
+#define CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS
+/* CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set */
+#define CONFIG_FREERTOS_TOTAL_HEAP_SIZE 10240
+#define CONFIG_FREERTOS_TASK_FPU_SUPPORT 1
+/* end of Kernel Configuration */
#endif
diff --git a/example/peripheral/wdt/src/wdt_example.c b/example/peripheral/wdt/src/wdt_example.c
index f76abfb2946461e78b61de473d72130e4c8632e7..9011e3eceb4931580d65c26630d583d2926ffd9b 100644
--- a/example/peripheral/wdt/src/wdt_example.c
+++ b/example/peripheral/wdt/src/wdt_example.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: wdt_example.c
* Date: 2022-07-11 11:32:48
* LastEditTime: 2022-07-11 11:32:48
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
+ * Description: This file is for wdt test example functions.
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2022/8/9 first release
*/
#include
#include "FreeRTOSConfig.h"
@@ -33,14 +34,14 @@
#include "wdt_example.h"
/* The periods assigned to the one-shot timers. */
-#define ONE_SHOT_TIMER_PERIOD ( pdMS_TO_TICKS( 15000UL ) )
-#define AUTO_RELOAD_TIMER_PERIOD ( pdMS_TO_TICKS( 1000UL ) )
+#define ONE_SHOT_TIMER_PERIOD ( pdMS_TO_TICKS( 15000UL ) )
+#define AUTO_RELOAD_TIMER_PERIOD ( pdMS_TO_TICKS( 1000UL ) )
/* watchdog timeout value in seconds */
#define WDT_TIMEOUT 4
/* watchdog feed period */
-#define WDT_FEED_PERIOD ( pdMS_TO_TICKS( 3000UL ))
+#define WDT_FEED_PERIOD ( pdMS_TO_TICKS( 3000UL ))
/* test task number */
#define READ_WRITE_TASK_NUM 2
@@ -57,275 +58,274 @@ static QueueHandle_t xQueue;
static FFreeRTOSWdt *os_wdt_ctrl_p;
-typedef struct
+typedef struct
{
- u32 count;
- FWdtCtrl *ctrl;
+ u32 count;
+ FWdtCtrl *ctrl;
} FWdtQueueData;
static void FFreeRTOSWdtDelete(FFreeRTOSWdt *os_wdt_p);
static void FFreeRTOSWdtInterruptHandler(s32 vector, void *param)
{
- FASSERT(param != NULL);
- static FWdtQueueData xSendStructure;
+ FASSERT(param != NULL);
+ static FWdtQueueData xSendStructure;
- portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
-
- xSendStructure.ctrl = (FWdtCtrl *)param;
- xSendStructure.count++;
+ portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
- FWdtRefresh(xSendStructure.ctrl);
+ xSendStructure.ctrl = (FWdtCtrl *)param;
+ xSendStructure.count++;
- printf("FFreeRTOSWdtInterruptHandler run count = %d\r\n", xSendStructure.count);
+ FWdtRefresh(xSendStructure.ctrl);
- xQueueSendToBackFromISR(xQueue, &xSendStructure, &xHigherPriorityTaskWoken);
+ printf("FFreeRTOSWdtInterruptHandler has been run %d times \r\n", xSendStructure.count);
- /* never call taskYIELD() form ISR! */
- portEND_SWITCHING_ISR(xHigherPriorityTaskWoken);
+ xQueueSendToBackFromISR(xQueue, &xSendStructure, &xHigherPriorityTaskWoken);
+
+ /* never call taskYIELD() form ISR! */
+ portEND_SWITCHING_ISR(xHigherPriorityTaskWoken);
}
static void FFreeRTOSWdtInitTask(void *pvParameters)
{
- /* The wdt_id to use is passed in via the parameter.
- Cast this to a wdt_id pointer. */
- u32 wdt_id = (u32)(uintptr)pvParameters;
- u32 timeout = WDT_TIMEOUT;
- u32 cpu_id = 0;
-
- /* init wdt controller */
- os_wdt_ctrl_p = FFreeRTOSWdtInit(wdt_id);
- if(os_wdt_ctrl_p == NULL)
- {
- printf("FFreeRTOSWdtInit failed!!!\n");
- goto wdt_init_exit;
- }
- /* set wdt timeout value */
- FFreeRTOSWdtControl(os_wdt_ctrl_p, FREERTOS_WDT_CTRL_SET_TIMEOUT, &timeout);
-
- /* start wdt controller */
- FFreeRTOSWdtControl(os_wdt_ctrl_p, FREERTOS_WDT_CTRL_START, NULL);
-
- /* set wdt timeout interrupt handler */
- FWdtCtrl *pctrl = &os_wdt_ctrl_p->wdt_ctrl;
+ /* The wdt_id to use is passed in via the parameter.
+ Cast this to a wdt_id pointer. */
+ u32 wdt_id = (u32)(uintptr)pvParameters;
+ u32 timeout = WDT_TIMEOUT;
+ u32 cpu_id = 0;
+
+ /* init wdt controller */
+ os_wdt_ctrl_p = FFreeRTOSWdtInit(wdt_id);
+ if (os_wdt_ctrl_p == NULL)
+ {
+ printf("FFreeRTOSWdtInit failed.\n");
+ goto wdt_init_exit;
+ }
+ /* set wdt timeout value */
+ FFreeRTOSWdtControl(os_wdt_ctrl_p, FREERTOS_WDT_CTRL_SET_TIMEOUT, &timeout);
+
+ /* start wdt controller */
+ FFreeRTOSWdtControl(os_wdt_ctrl_p, FREERTOS_WDT_CTRL_START, NULL);
+
+ /* set wdt timeout interrupt handler */
+ FWdtCtrl *pctrl = &os_wdt_ctrl_p->wdt_ctrl;
FWdtConfig *pconfig = &os_wdt_ctrl_p->wdt_ctrl.config;
- GetCpuId(&cpu_id);
- printf("cpu_id is %d \r\n", cpu_id);
- InterruptSetTargetCpus(pconfig->irq_num, cpu_id);
- /* interrupt init */
- InterruptSetPriority(pconfig->irq_num, pconfig->irq_prority);
- InterruptInstall(pconfig->irq_num, FFreeRTOSWdtInterruptHandler, pctrl, pconfig->instance_name);
- InterruptUmask(pconfig->irq_num);
-
- printf("FFreeRTOSWdtInitTask execute success !!!\r\n");
+ GetCpuId(&cpu_id);
+ InterruptSetTargetCpus(pconfig->irq_num, cpu_id);
+ /* interrupt init */
+ InterruptSetPriority(pconfig->irq_num, pconfig->irq_prority);
+ InterruptInstall(pconfig->irq_num, FFreeRTOSWdtInterruptHandler, pctrl, pconfig->instance_name);
+ InterruptUmask(pconfig->irq_num);
+
+ printf("FFreeRTOSWdtInitTask execute successfully.\r\n");
for (int i = 0; i < READ_WRITE_TASK_NUM; i++)
{
xSemaphoreGive(xCountingSemaphore);
}
-wdt_init_exit:
+wdt_init_exit:
vTaskDelete(NULL);
}
static void FFreeRTOSWdtQueueReceiveTask(void)
{
- xSemaphoreTake(xCountingSemaphore, portMAX_DELAY);
+ xSemaphoreTake(xCountingSemaphore, portMAX_DELAY);
- static FWdtQueueData xReceiveStructure;
+ static FWdtQueueData xReceiveStructure;
/* As per most tasks, this task is implemented in an infinite loop. */
- for (;;)
- {
- xQueueReceive(xQueue, &xReceiveStructure, portMAX_DELAY);
- u32 seconds = GenericTimerRead() / GenericTimerFrequecy();
- vPrintf("FFreeRTOSWdtQueueReceiveTask run, count = %d, time seconds: %d\r\n", xReceiveStructure.count, seconds);
- }
+ for (;;)
+ {
+ xQueueReceive(xQueue, &xReceiveStructure, portMAX_DELAY);
+ u32 seconds = GenericTimerRead() / GenericTimerFrequecy();
+ vPrintf("FFreeRTOSWdtQueueReceiveTask run, count = %d, time seconds: %d\r\n", xReceiveStructure.count, seconds);
+ }
}
static void FFreeRTOSWdtFeedTask(void *pvParameters)
{
- xSemaphoreTake(xCountingSemaphore, portMAX_DELAY);
-
- /* As per most tasks, this task is implemented in an infinite loop. */
- for (;;)
- {
- FFreeRTOSWdtControl(os_wdt_ctrl_p, FREERTOS_WDT_CTRL_KEEPALIVE, NULL);
- u32 seconds = GenericTimerRead() / GenericTimerFrequecy();
- vPrintf("FFreeRTOSWdtFeedTask run, time seconds: %d\r\n", seconds);
- vTaskDelay(WDT_FEED_PERIOD);
- }
+ xSemaphoreTake(xCountingSemaphore, portMAX_DELAY);
+
+ /* As per most tasks, this task is implemented in an infinite loop. */
+ for (;;)
+ {
+ FFreeRTOSWdtControl(os_wdt_ctrl_p, FREERTOS_WDT_CTRL_KEEPALIVE, NULL);
+ u32 seconds = GenericTimerRead() / GenericTimerFrequecy();
+ vPrintf("FFreeRTOSWdtFeedTask run, time seconds: %d\r\n", seconds);
+ vTaskDelay(WDT_FEED_PERIOD);
+ }
}
-static void prvOneShotTimerCallback( TimerHandle_t xTimer )
+static void prvOneShotTimerCallback(TimerHandle_t xTimer)
{
- /* Output a string to show the time at which the callback was executed. */
- vPrintf("One-shot timer callback executing, will delete FFreeRTOSWdtFeedTask.\r\n" );
+ /* Output a string to show the time at which the callback was executed. */
+ vPrintf("One-shot timer callback executing, will delete FFreeRTOSWdtFeedTask.\r\n");
- /* The count of the number of times this software timer has expired is
- stored in the timer's ID. Obtain the ID, increment it, then save it as the
- new ID value. The ID is a void pointer, so is cast to a uint32_t. */
+ /* The count of the number of times this software timer has expired is
+ stored in the timer's ID. Obtain the ID, increment it, then save it as the
+ new ID value. The ID is a void pointer, so is cast to a uint32_t. */
- if(feed_handle)
+ if (feed_handle)
{
vTaskDelete(feed_handle);
- vPrintf("Delete FFreeRTOSWdtFeedTask success\r\n");
+ vPrintf("Delete FFreeRTOSWdtFeedTask success.\r\n");
}
}
-static void prvAutoReloadTimerCallback( TimerHandle_t xTimer )
+static void prvAutoReloadTimerCallback(TimerHandle_t xTimer)
{
- /* Output a string to show the time at which the callback was executed. */
- static u32 count = 0;
- u32 time_left = 0;
-
- count++;
- /* The count of the number of times this software timer has expired is
- stored in the timer's ID. Obtain the ID, increment it, then save it as the
- new ID value. The ID is a void pointer, so is cast to a uint32_t. */
-
- if(count >= 30)
- {
- vPrintf("Auto-reload callback executing, Delete FFreeRTOSWdtQueueReceiveTask and software timer.\r\n");
- FFreeRTOSWdtDelete(os_wdt_ctrl_p);
- }
- else
- {
- FFreeRTOSWdtControl(os_wdt_ctrl_p, FREERTOS_WDT_CTRL_GET_TIMELEFT, &time_left);
- vPrintf("Auto-reload callback executing, wdt timeleft=%d\n", time_left);
- }
+ /* Output a string to show the time at which the callback was executed. */
+ static u32 count = 0;
+ u32 time_left = 0;
+
+ count++;
+ /* The count of the number of times this software timer has expired is
+ stored in the timer's ID. Obtain the ID, increment it, then save it as the
+ new ID value. The ID is a void pointer, so is cast to a uint32_t. */
+
+ if (count >= 30)
+ {
+ vPrintf("Auto-reload callback executing, Delete FFreeRTOSWdtQueueReceiveTask and software timer.\r\n");
+ FFreeRTOSWdtDelete(os_wdt_ctrl_p);
+ }
+ else
+ {
+ FFreeRTOSWdtControl(os_wdt_ctrl_p, FREERTOS_WDT_CTRL_GET_TIMELEFT, &time_left);
+ vPrintf("Auto-reload callback executing, wdt timeleft=%d\n", time_left);
+ }
}
BaseType_t FFreeRTOSWdtCreate(u32 id)
{
BaseType_t xReturn = pdPASS;/* 定义一个创建信息返回值,默认为 pdPASS */
- BaseType_t xTimer1Started = pdPASS;
- BaseType_t xTimer2Started = pdPASS;
- u32 wdt_id = id;
- /* The queue is created to hold a maximum of 3 structures of type xData. */
- xQueue = xQueueCreate(3, sizeof(FWdtQueueData));
- if (xQueue == NULL)
- {
- printf("FFreeRTOSWdtCreate FWdtQueueData create failed.\r\n" );
- return pdFAIL;
- }
-
- xCountingSemaphore = xSemaphoreCreateCounting(READ_WRITE_TASK_NUM, 0);
- if (xCountingSemaphore == NULL)
- {
- printf("FFreeRTOSWdtCreate xCountingSemaphore create failed.\r\n" );
- return pdFAIL;
- }
-
- taskENTER_CRITICAL(); //进入临界区
- /* wdt init task */
- xReturn = xTaskCreate((TaskFunction_t )FFreeRTOSWdtInitTask, /* 任务入口函数 */
- (const char* )"FFreeRTOSWdtInitTask",/* 任务名字 */
- (uint16_t )1024, /* 任务栈大小 */
- (void* )(uintptr)id,/* 任务入口函数参数 */
- (UBaseType_t )1, /* 任务的优先级 */
- NULL); /* 任务控制 */
-
- /* 看门狗后半段的处理任务,等待处理超时中断触发后的发送的消息队列 */
- xReturn = xTaskCreate((TaskFunction_t )FFreeRTOSWdtQueueReceiveTask, /* 任务入口函数 */
- (const char* )"FFreeRTOSWdtQueueReceiveTask",/* 任务名字 */
- (uint16_t )1024, /* 任务栈大小 */
- NULL,/* 任务入口函数参数 */
- (UBaseType_t )configMAX_PRIORITIES-1, /* 任务的优先级 */
- (TaskHandle_t* )&queue_receive_handle); /* 任务控制 */
-
- /* 主动喂狗任务,周期比看门狗的超时时间短 */
- xReturn = xTaskCreate((TaskFunction_t )FFreeRTOSWdtFeedTask, /* 任务入口函数 */
- (const char* )"FFreeRTOSWdtFeedTask",/* 任务名字 */
- (uint16_t )1024, /* 任务栈大小 */
- NULL,/* 任务入口函数参数 */
- (UBaseType_t )configMAX_PRIORITIES-1, /* 任务的优先级 */
- (TaskHandle_t* )&feed_handle); /* 任务控制 */
-
- /* Create the one shot software timer, storing the handle to the created
- software timer in xOneShotTimer. */
- xOneShotTimer = xTimerCreate( "OneShot Software Timer", /* Text name for the software timer - not used by FreeRTOS. */
- ONE_SHOT_TIMER_PERIOD, /* The software timer's period in ticks. */
- pdFALSE, /* Setting uxAutoRealod to pdFALSE creates a one-shot software timer. */
- 0, /* This example use the timer id. */
- prvOneShotTimerCallback ); /* The callback function to be used by the software timer being created. */
-
- /* Create the auto-reload, storing the handle to the created timer in
- xAutoReloadTimer. */
- xAutoReloadTimer = xTimerCreate( "Auto-reload Timer", /* Text name for the software timer - not used by FreeRTOS. */
- AUTO_RELOAD_TIMER_PERIOD, /* The software timer's period in ticks. */
- pdTRUE, /* Set uxAutoRealod to pdTRUE to create an auto-reload timer. */
- 0, /* This example use the timer id. */
- prvAutoReloadTimerCallback ); /* The callback function to be used by the software timer being created. */
-
- /* Check the timers were created. */
- if( ( xOneShotTimer != NULL ) && ( xAutoReloadTimer != NULL ) )
- {
- /* Start the software timers, using a block time of 0 (no block time).
- The scheduler has not been started yet so any block time specified here
- would be ignored anyway. */
- xTimer1Started = xTimerStart( xOneShotTimer, 0 );
- xTimer2Started = xTimerStart( xAutoReloadTimer, 0 );
-
- /* The implementation of xTimerStart() uses the timer command queue, and
- xTimerStart() will fail if the timer command queue gets full. The timer
- service task does not get created until the scheduler is started, so all
- commands sent to the command queue will stay in the queue until after
- the scheduler has been started. Check both calls to xTimerStart()
- passed. */
- if( (xTimer1Started != pdPASS) || ( xTimer2Started != pdPASS ) )
- {
- vPrintf("CreateSoftwareTimerTasks xTimerStart failed \r\n");
- }
- }
- else
- {
- vPrintf("CreateSoftwareTimerTasks xTimerCreate failed \r\n");
- }
-
- taskEXIT_CRITICAL(); //退出临界区
-
+ BaseType_t xTimer1Started = pdPASS;
+ BaseType_t xTimer2Started = pdPASS;
+ u32 wdt_id = id;
+ /* The queue is created to hold a maximum of 3 structures of type xData. */
+ xQueue = xQueueCreate(3, sizeof(FWdtQueueData));
+ if (xQueue == NULL)
+ {
+ printf("FFreeRTOSWdtCreate FWdtQueueData create failed.\r\n");
+ return pdFAIL;
+ }
+
+ xCountingSemaphore = xSemaphoreCreateCounting(READ_WRITE_TASK_NUM, 0);
+ if (xCountingSemaphore == NULL)
+ {
+ printf("FFreeRTOSWdtCreate xCountingSemaphore create failed.\r\n");
+ return pdFAIL;
+ }
+
+ taskENTER_CRITICAL(); //进入临界区
+ /* wdt init task */
+ xReturn = xTaskCreate((TaskFunction_t)FFreeRTOSWdtInitTask, /* 任务入口函数 */
+ (const char *)"FFreeRTOSWdtInitTask",/* 任务名字 */
+ (uint16_t)1024, /* 任务栈大小 */
+ (void *)(uintptr)id,/* 任务入口函数参数 */
+ (UBaseType_t)1, /* 任务的优先级 */
+ NULL); /* 任务控制 */
+
+ /* 看门狗后半段的处理任务,等待处理超时中断触发后的发送的消息队列 */
+ xReturn = xTaskCreate((TaskFunction_t)FFreeRTOSWdtQueueReceiveTask, /* 任务入口函数 */
+ (const char *)"FFreeRTOSWdtQueueReceiveTask",/* 任务名字 */
+ (uint16_t)1024, /* 任务栈大小 */
+ NULL,/* 任务入口函数参数 */
+ (UBaseType_t)configMAX_PRIORITIES - 1, /* 任务的优先级 */
+ (TaskHandle_t *)&queue_receive_handle); /* 任务控制 */
+
+ /* 主动喂狗任务,周期比看门狗的超时时间短 */
+ xReturn = xTaskCreate((TaskFunction_t)FFreeRTOSWdtFeedTask, /* 任务入口函数 */
+ (const char *)"FFreeRTOSWdtFeedTask",/* 任务名字 */
+ (uint16_t)1024, /* 任务栈大小 */
+ NULL,/* 任务入口函数参数 */
+ (UBaseType_t)configMAX_PRIORITIES - 1, /* 任务的优先级 */
+ (TaskHandle_t *)&feed_handle); /* 任务控制 */
+
+ /* Create the one shot software timer, storing the handle to the created
+ software timer in xOneShotTimer. */
+ xOneShotTimer = xTimerCreate("OneShot Software Timer", /* Text name for the software timer - not used by FreeRTOS. */
+ ONE_SHOT_TIMER_PERIOD, /* The software timer's period in ticks. */
+ pdFALSE, /* Setting uxAutoRealod to pdFALSE creates a one-shot software timer. */
+ 0, /* This example use the timer id. */
+ prvOneShotTimerCallback); /* The callback function to be used by the software timer being created. */
+
+ /* Create the auto-reload, storing the handle to the created timer in
+ xAutoReloadTimer. */
+ xAutoReloadTimer = xTimerCreate("Auto-reload Timer", /* Text name for the software timer - not used by FreeRTOS. */
+ AUTO_RELOAD_TIMER_PERIOD, /* The software timer's period in ticks. */
+ pdTRUE, /* Set uxAutoRealod to pdTRUE to create an auto-reload timer. */
+ 0, /* This example use the timer id. */
+ prvAutoReloadTimerCallback); /* The callback function to be used by the software timer being created. */
+
+ /* Check the timers were created. */
+ if ((xOneShotTimer != NULL) && (xAutoReloadTimer != NULL))
+ {
+ /* Start the software timers, using a block time of 0 (no block time).
+ The scheduler has not been started yet so any block time specified here
+ would be ignored anyway. */
+ xTimer1Started = xTimerStart(xOneShotTimer, 0);
+ xTimer2Started = xTimerStart(xAutoReloadTimer, 0);
+
+ /* The implementation of xTimerStart() uses the timer command queue, and
+ xTimerStart() will fail if the timer command queue gets full. The timer
+ service task does not get created until the scheduler is started, so all
+ commands sent to the command queue will stay in the queue until after
+ the scheduler has been started. Check both calls to xTimerStart()
+ passed. */
+ if ((xTimer1Started != pdPASS) || (xTimer2Started != pdPASS))
+ {
+ vPrintf("CreateSoftwareTimerTasks xTimerStart failed.\r\n");
+ }
+ }
+ else
+ {
+ vPrintf("CreateSoftwareTimerTasks xTimerCreate failed.\r\n");
+ }
+
+ taskEXIT_CRITICAL(); //退出临界区
+
return xReturn;
}
static void FFreeRTOSWdtDelete(FFreeRTOSWdt *os_wdt_p)
{
- BaseType_t xReturn = pdPASS;
- FFreeRTOSWdtControl(os_wdt_p, FREERTOS_WDT_CTRL_STOP, NULL);
- FFreeRTOSWdtDeinit(os_wdt_p);
- if(queue_receive_handle)
+ BaseType_t xReturn = pdPASS;
+ FFreeRTOSWdtControl(os_wdt_p, FREERTOS_WDT_CTRL_STOP, NULL);
+ FFreeRTOSWdtDeinit(os_wdt_p);
+ if (queue_receive_handle)
{
vTaskDelete(queue_receive_handle);
- vPrintf("Delete FFreeRTOSWdtQueueReceiveTask success\r\n");
+ vPrintf("Delete FFreeRTOSWdtQueueReceiveTask success.\r\n");
+ }
+
+ /* delete queue */
+ vQueueDelete(xQueue);
+
+ /* delete count sem */
+ vSemaphoreDelete(xCountingSemaphore);
+
+ /* delete timer */
+ xReturn = xTimerDelete(xOneShotTimer, 0);
+ if (xReturn != pdPASS)
+ {
+ vPrintf("Delete OneShot Software Timer failed.\r\n");
+ }
+ else
+ {
+ vPrintf("Delete OneShot Software Timer success.\r\n");
}
- /* delete queue */
- vQueueDelete(xQueue);
-
- /* delete count sem */
- vSemaphoreDelete(xCountingSemaphore);
-
- /* delete timer */
- xReturn = xTimerDelete(xOneShotTimer, 0);
- if(xReturn != pdPASS)
- {
- vPrintf("Delete OneShot Software Timer failed.\r\n");
- }
- else
- {
- vPrintf("Delete OneShot Software Timer success.\r\n");
- }
-
- xReturn = xTimerDelete(xAutoReloadTimer, 0);
- if(xReturn != pdPASS)
- {
- vPrintf("Delete AutoReload Software Timer failed.\r\n");
- }
- else
- {
- vPrintf("Delete AutoReload Software Timer success.\r\n");
- }
+ xReturn = xTimerDelete(xAutoReloadTimer, 0);
+ if (xReturn != pdPASS)
+ {
+ vPrintf("Delete AutoReload Software Timer failed.\r\n");
+ }
+ else
+ {
+ vPrintf("Delete AutoReload Software Timer success.\r\n");
+ }
}
\ No newline at end of file
diff --git a/example/storage/fatfs/Kconfig b/example/storage/fatfs/Kconfig
new file mode 100644
index 0000000000000000000000000000000000000000..3caed92fa7962489d699bab6c3284e9873af0f57
--- /dev/null
+++ b/example/storage/fatfs/Kconfig
@@ -0,0 +1,25 @@
+mainmenu "Phytium Baremetal Configuration"
+
+menu "Project Configuration"
+
+ config TARGET_NAME
+ string "Build Target Name"
+ default "template"
+ help
+ Build Target name for the demo
+
+ config FATFS_BASIC_TEST
+ bool "Basic Test"
+ default y
+
+ config FATFS_SPEED_TEST
+ bool "Speed Test"
+ default n
+
+ config FATFS_CYCLE_TEST
+ bool "Cycle Test"
+ default n
+
+endmenu
+
+source "$(FREERTOS_SDK_ROOT)/Kconfig"
\ No newline at end of file
diff --git a/example/storage/fatfs/READEME.md b/example/storage/fatfs/READEME.md
new file mode 100644
index 0000000000000000000000000000000000000000..80e163dc909bf18c81d2374cf3826fe17ddd8dcf
--- /dev/null
+++ b/example/storage/fatfs/READEME.md
@@ -0,0 +1,118 @@
+# FATFS 文件系统测试
+
+## 1. 例程介绍
+
+- 文件系统是一类负责管理和存储文件信息的软件机构,在磁盘上组织文件的方法。作为常用的文件系统,FATFS免费开源,专门为小型嵌入式系统设计。
+- 本例程中通过在文件系统的根目录下挂载多个目录,支持在 RAM Disk, MicroSD 卡,eMMC 卡,SATA硬盘 和 U盘上同时使用和测试 FATFS 文件系统
+
+
+## 2. 如何使用例程
+
+本例程在 E2000 平台测试通过,您可以参考以下方法配置本例程所需要的硬件和软件环境,
+- E2000 开发板
+- 本例程基于 E2000 Q Demo 板
+
+
+
+### 2.1 硬件配置方法
+
+本例程支持的硬件平台包括
+
+- E2000Q
+
+对应的配置项是,
+
+- CONFIG_TARGET_E2000Q
+
+### 2.2 SDK配置方法
+
+本例程需要,
+
+- 使能Shell
+
+对应的配置项是,
+
+- CONFIG_USE_LETTER_SHELL
+
+本例子已经提供好具体的编译指令,以下进行介绍:
+- make 将目录下的工程进行编译
+- make clean 将目录下的工程进行清理
+- make boot 将目录下的工程进行编译,并将生成的elf 复制到目标地址
+- make load_e2000d_aarch64 将预设64bit e2000d 下的配置加载至工程中
+- make load_e2000d_aarch32 将预设32bit e2000d 下的配置加载至工程中
+- make menuconfig 配置目录下的参数变量
+- make backup_kconfig 将目录下的sdkconfig 备份到./configs下
+
+具体使用方法为:
+- 在当前目录下
+- 执行以上指令
+
+### 2.3 构建和下载
+
+#### 2.3.1 构建过程
+
+- 在host侧完成配置
+>配置成 e2000,对于其它平台,使用对于的默认配置,如 e2000q `make load_e2000q_aarch32`
+
+- 选择目标平台
+```
+make load_e2000q_aarch32
+```
+
+- 选择例程需要的配置
+```
+make menuconfig
+```
+
+- 进行编译
+```
+make
+```
+
+- 将编译出的镜像放置到tftp目录下
+```
+make boot
+```
+
+#### 2.3.2 下载过程
+
+- host侧设置重启host侧tftp服务器
+```
+sudo service tftpd-hpa restart
+```
+
+- 开发板侧使用bootelf命令跳转
+```
+setenv ipaddr 192.168.4.20
+setenv serverip 192.168.4.50
+setenv gatewayip 192.168.4.1
+tftpboot 0x90100000 freertos.elf
+bootelf -p 0x90100000
+```
+
+### 2.4 输出与实验现象
+
+- 打开配置 CONFIG_FATFS_SDIO_TF, 使能 MicroSD(TF) 卡
+- 打开配置 CONFIG_FATFS_SDIO_EMMC, 使能 eMMC
+- 打开配置 CONFIG_FATFS_USB, 使能 U 盘
+- 打开配置 CONFIG_FATFS_FSATA, 使能 SATA 硬盘
+- 打开配置 CONFIG_FATFS_FSATA_PCIE, 使能 SATA 硬盘与 PCIE 接口
+
+- 打开配置 CONFIG_FATFS_BASIC_TEST,测试 FATFS 的基本功能
+- 打开配置 CONFIG_FATFS_SPEED_TEST, 测试 FATFS 的读写速度,会破环文件系统
+- 打开配置 CONFIG_FATFS_CYCLE_TEST, 运行 FATFS 的测试项,会破环文件系统
+- 编译镜像,加载到开发板上电启动
+
+
+
+
+
+- 加载镜像启动后,自动开始测试
+
+
+
+
+
+
+
+## 3. 如何解决问题
diff --git a/example/storage/fatfs/configs/e2000d_aarch32_eg_configs b/example/storage/fatfs/configs/e2000d_aarch32_eg_configs
new file mode 100644
index 0000000000000000000000000000000000000000..8898745a9094db8b88c4d90828a908c2c21a00de
--- /dev/null
+++ b/example/storage/fatfs/configs/e2000d_aarch32_eg_configs
@@ -0,0 +1,327 @@
+
+#
+# Project Configuration
+#
+CONFIG_TARGET_NAME="e2000d_freertos_a32"
+CONFIG_FATFS_BASIC_TEST=y
+# CONFIG_FATFS_SPEED_TEST is not set
+# CONFIG_FATFS_CYCLE_TEST is not set
+# end of Project Configuration
+
+#
+# Standalone Setting
+#
+CONFIG_USE_FREERTOS=y
+
+#
+# Arch Configuration
+#
+CONFIG_TARGET_ARMV8_AARCH32=y
+# CONFIG_TARGET_ARMV8_AARCH64 is not set
+CONFIG_USE_CACHE=y
+CONFIG_USE_MMU=y
+# CONFIG_USE_SYS_TICK is not set
+CONFIG_USE_AARCH64_L1_TO_AARCH32=y
+# end of Arch Configuration
+
+#
+# Board Configuration
+#
+# CONFIG_TARGET_F2000_4 is not set
+# CONFIG_TARGET_D2000 is not set
+# CONFIG_TARGET_E2000Q is not set
+CONFIG_TARGET_E2000D=y
+# CONFIG_TARGET_E2000S is not set
+CONFIG_TARGET_E2000=y
+CONFIG_DEFAULT_DEBUG_PRINT_UART1=y
+# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set
+# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set
+# end of Board Configuration
+
+#
+# Components Configuration
+#
+# CONFIG_USE_SPI is not set
+# CONFIG_USE_QSPI is not set
+CONFIG_USE_GIC=y
+CONFIG_ENABLE_GICV3=y
+CONFIG_USE_SERIAL=y
+
+#
+# Usart Configuration
+#
+CONFIG_ENABLE_Pl011_UART=y
+# end of Usart Configuration
+
+# CONFIG_USE_GPIO is not set
+# CONFIG_USE_ETH is not set
+# CONFIG_USE_CAN is not set
+# CONFIG_USE_I2C is not set
+# CONFIG_USE_TIMER is not set
+# CONFIG_USE_MIO is not set
+CONFIG_USE_SDMMC=y
+# CONFIG_ENABLE_FSDMMC is not set
+CONFIG_ENABLE_FSDIO=y
+# CONFIG_USE_PCIE is not set
+# CONFIG_USE_WDT is not set
+# CONFIG_USE_DMA is not set
+# CONFIG_USE_NAND is not set
+# CONFIG_USE_RTC is not set
+# CONFIG_USE_SATA is not set
+# CONFIG_USE_USB is not set
+# CONFIG_USE_ADC is not set
+# CONFIG_USE_PWM is not set
+# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
+# end of Components Configuration
+
+CONFIG_USE_NEW_LIBC=y
+# end of Standalone Setting
+
+#
+# Building Option
+#
+# CONFIG_LOG_VERBOS is not set
+# CONFIG_LOG_DEBUG is not set
+# CONFIG_LOG_INFO is not set
+# CONFIG_LOG_WARN is not set
+CONFIG_LOG_ERROR=y
+# CONFIG_LOG_NONE is not set
+CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y
+CONFIG_INTERRUPT_ROLE_MASTER=y
+# CONFIG_INTERRUPT_ROLE_SLAVE is not set
+# CONFIG_LOG_EXTRA_INFO is not set
+# CONFIG_BOOTUP_DEBUG_PRINTS is not set
+
+#
+# Linker Options
+#
+CONFIG_AARCH32_RAM_LD=y
+# CONFIG_AARCH64_RAM_LD is not set
+# CONFIG_USER_DEFINED_LD is not set
+CONFIG_LINK_SCRIPT_ROM=y
+CONFIG_ROM_START_UP_ADDR=0x80100000
+CONFIG_ROM_SIZE_MB=2
+CONFIG_LINK_SCRIPT_RAM=y
+CONFIG_RAM_START_UP_ADDR=0x81000000
+CONFIG_RAM_SIZE_MB=64
+CONFIG_HEAP_SIZE=1
+CONFIG_SVC_STACK_SIZE=0x1000
+CONFIG_SYS_STACK_SIZE=0x1000
+CONFIG_IRQ_STACK_SIZE=0x1000
+CONFIG_ABORT_STACK_SIZE=0x1000
+CONFIG_FIQ_STACK_SIZE=0x1000
+CONFIG_UNDEF_STACK_SIZE=0x1000
+# end of Linker Options
+
+#
+# Compiler Options
+#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
+CONFIG_OUTPUT_BINARY=y
+# end of Compiler Options
+# end of Building Option
+
+#
+# Component Configuration
+#
+
+#
+# Freertos Uart Drivers
+#
+CONFIG_FREERTOS_USE_UART=y
+# end of Freertos Uart Drivers
+
+#
+# Freertos Pwm Drivers
+#
+# CONFIG_FREERTOS_USE_PWM is not set
+# end of Freertos Pwm Drivers
+
+#
+# Freertos Qspi Drivers
+#
+# CONFIG_FREERTOS_USE_QSPI is not set
+# end of Freertos Qspi Drivers
+
+#
+# Freertos Wdt Drivers
+#
+# CONFIG_FREERTOS_USE_WDT is not set
+# end of Freertos Wdt Drivers
+
+#
+# Freertos Eth Drivers
+#
+# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
+# end of Freertos Eth Drivers
+
+#
+# Freertos Gpio Drivers
+#
+# CONFIG_FREERTOS_USE_GPIO is not set
+# end of Freertos Gpio Drivers
+
+#
+# Freertos Spim Drivers
+#
+# CONFIG_FREERTOS_USE_FSPIM is not set
+# end of Freertos Spim Drivers
+
+#
+# Freertos DMA Drivers
+#
+# CONFIG_FREERTOS_USE_FDDMA is not set
+# CONFIG_FREERTOS_USE_FGDMA is not set
+# end of Freertos DMA Drivers
+
+#
+# Freertos Adc Drivers
+#
+# CONFIG_FREERTOS_USE_ADC is not set
+# end of Freertos Adc Drivers
+
+#
+# Freertos Can Drivers
+#
+# CONFIG_FREERTOS_USE_CAN is not set
+# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
+# end of Component Configuration
+
+#
+# Third-Party Configuration
+#
+# CONFIG_USE_LWIP is not set
+CONFIG_USE_BACKTRACE=y
+CONFIG_USE_FATFS_0_1_4=y
+
+#
+# FATFS Configuration (0.1.4)
+#
+CONFIG_FATFS_RAM_DISK=y
+
+#
+# RAM Disk Configuration
+#
+CONFIG_FATFS_RAM_DISK_BASE=0xa0000000
+CONFIG_FATFS_RAM_DISK_SIZE_MB=500
+CONFIG_FATFS_RAM_DISK_SECTOR_SIZE_BYTE=512
+# end of RAM Disk Configuration
+
+CONFIG_FATFS_SDMMC=y
+CONFIG_FATFS_SDMMC_FSDIO_TF=y
+CONFIG_FATFS_SDMMC_FSDIO_EMMC=y
+# CONFIG_FATFS_SDMMC_FSDMMC_TF is not set
+CONFIG_FATFS_SATA_DISK=y
+
+#
+# SATA Disk Configuration
+#
+# CONFIG_FATFS_FSATA is not set
+# CONFIG_FATFS_FSATA_PCIE is not set
+# end of SATA Disk Configuration
+
+CONFIG_FATFS_USB=y
+CONFIG_FATFS_VOLUME_COUNT=6
+# CONFIG_FATFS_LFN_NONE is not set
+CONFIG_FATFS_LFN_HEAP=y
+# CONFIG_FATFS_LFN_STACK is not set
+CONFIG_FATFS_MAX_LFN=255
+CONFIG_FATFS_FS_LOCK=0
+CONFIG_FATFS_TIMEOUT_MS=10000
+CONFIG_FATFS_PER_FILE_CACHE=y
+CONFIG_FATFS_ALLOC_PREFER_MEMP=y
+CONFIG_FATFS_MEMP_SIZE=2
+# end of FATFS Configuration (0.1.4)
+
+# CONFIG_USE_SFUD is not set
+# CONFIG_USE_SPIFFS is not set
+# CONFIG_USE_AMP is not set
+CONFIG_USE_LETTER_SHELL=y
+
+#
+# Letter Shell Configuration
+#
+CONFIG_LS_PL011_UART=y
+CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
+# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set
+# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set
+# end of Letter Shell Configuration
+
+CONFIG_USE_TLSF=y
+CONFIG_USE_SDMMC_CMD=y
+
+#
+# SDMMC Configuration
+#
+# CONFIG_SDMMC_USE_FSDMMC is not set
+CONFIG_SDMMC_USE_FSDIO=y
+# end of SDMMC Configuration
+
+CONFIG_USE_CHERRY_USB=y
+
+#
+# CherryUSB Configuration
+#
+CONFIG_CHERRY_USB_PORT_XHCI=y
+# CONFIG_CHERRY_USB_PORT_PHYTIUM_OTG is not set
+CONFIG_CHERRYUSB_HOST=y
+# CONFIG_CHERRYUSB_DEVICE is not set
+CONFIG_CHERRY_USB_HOST_HUB=y
+CONFIG_CHERRY_USB_HOST_MSC=y
+# CONFIG_CHERRY_USB_HOST_HID is not set
+# CONFIG_CHERRY_USB_HOST_VEDIO is not set
+# CONFIG_CHERRY_USB_HOST_CDC is not set
+# CONFIG_CHERRY_USB_HOST_RNDIS_WIRELESS is not set
+# end of CherryUSB Configuration
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/storage/spim_spiffs/configs/e2000d_aarch64_eg_configs b/example/storage/fatfs/configs/e2000d_aarch64_eg_configs
similarity index 51%
rename from example/storage/spim_spiffs/configs/e2000d_aarch64_eg_configs
rename to example/storage/fatfs/configs/e2000d_aarch64_eg_configs
index 86833babcea362706d1a0dad96787a9b91f15b21..39d4ff17d52f3b6d6ed0c65e004e24b95b7594d4 100644
--- a/example/storage/spim_spiffs/configs/e2000d_aarch64_eg_configs
+++ b/example/storage/fatfs/configs/e2000d_aarch64_eg_configs
@@ -1,9 +1,12 @@
#
-# Freertos Configuration
+# Project Configuration
#
CONFIG_TARGET_NAME="e2000d_freertos_a64"
-# end of Freertos Configuration
+CONFIG_FATFS_BASIC_TEST=y
+# CONFIG_FATFS_SPEED_TEST is not set
+# CONFIG_FATFS_CYCLE_TEST is not set
+# end of Project Configuration
#
# Standalone Setting
@@ -17,7 +20,7 @@ CONFIG_USE_FREERTOS=y
CONFIG_TARGET_ARMV8_AARCH64=y
CONFIG_USE_CACHE=y
CONFIG_USE_MMU=y
-CONFIG_USE_SYS_TICK=y
+# CONFIG_USE_SYS_TICK is not set
# CONFIG_MMU_DEBUG_PRINTS is not set
# end of Arch Configuration
@@ -38,16 +41,8 @@ CONFIG_DEFAULT_DEBUG_PRINT_UART1=y
#
# Components Configuration
#
-CONFIG_USE_SPI=y
-CONFIG_USE_FSPIM=y
-CONFIG_USE_QSPI=y
-
-#
-# Qspi Configuration
-#
-CONFIG_USE_FQSPI=y
-# end of Qspi Configuration
-
+# CONFIG_USE_SPI is not set
+# CONFIG_USE_QSPI is not set
CONFIG_USE_GIC=y
CONFIG_ENABLE_GICV3=y
CONFIG_USE_SERIAL=y
@@ -64,7 +59,9 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_I2C is not set
# CONFIG_USE_TIMER is not set
# CONFIG_USE_MIO is not set
-# CONFIG_USE_SDMMC is not set
+CONFIG_USE_SDMMC=y
+# CONFIG_ENABLE_FSDMMC is not set
+CONFIG_ENABLE_FSDIO=y
# CONFIG_USE_PCIE is not set
# CONFIG_USE_WDT is not set
# CONFIG_USE_DMA is not set
@@ -75,6 +72,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -92,7 +90,7 @@ CONFIG_LOG_ERROR=y
CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y
CONFIG_INTERRUPT_ROLE_MASTER=y
# CONFIG_INTERRUPT_ROLE_SLAVE is not set
-# CONFIG_LOG_EXTRA_INFO is not set
+CONFIG_LOG_EXTRA_INFO=y
# CONFIG_BOOTUP_DEBUG_PRINTS is not set
#
@@ -103,7 +101,7 @@ CONFIG_AARCH64_RAM_LD=y
# CONFIG_USER_DEFINED_LD is not set
CONFIG_LINK_SCRIPT_ROM=y
CONFIG_ROM_START_UP_ADDR=0x80100000
-CONFIG_ROM_SIZE_MB=1
+CONFIG_ROM_SIZE_MB=2
CONFIG_LINK_SCRIPT_RAM=y
CONFIG_RAM_START_UP_ADDR=0x81000000
CONFIG_RAM_SIZE_MB=64
@@ -115,6 +113,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -138,7 +145,7 @@ CONFIG_FREERTOS_USE_UART=y
#
# Freertos Qspi Drivers
#
-CONFIG_FREERTOS_USE_QSPI=y
+# CONFIG_FREERTOS_USE_QSPI is not set
# end of Freertos Qspi Drivers
#
@@ -151,6 +158,7 @@ CONFIG_FREERTOS_USE_QSPI=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -162,7 +170,7 @@ CONFIG_FREERTOS_USE_QSPI=y
#
# Freertos Spim Drivers
#
-CONFIG_FREERTOS_USE_FSPIM=y
+# CONFIG_FREERTOS_USE_FSPIM is not set
# end of Freertos Spim Drivers
#
@@ -172,12 +180,6 @@ CONFIG_FREERTOS_USE_FSPIM=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -189,35 +191,74 @@ CONFIG_FREERTOS_USE_FSPIM=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
-CONFIG_USE_SFUD=y
+CONFIG_USE_FATFS_0_1_4=y
+
+#
+# FATFS Configuration (0.1.4)
+#
+CONFIG_FATFS_RAM_DISK=y
#
-# SFUD Configuration
+# RAM Disk Configuration
#
-CONFIG_SFUD_CTRL_FSPIM=y
-CONFIG_SFUD_CTRL_FQSPI=y
-# CONFIG_SFUD_QSPI_READ_MODE_READ is not set
-# CONFIG_SFUD_QSPI_READ_MODE_DUAL_READ is not set
-CONFIG_SFUD_QSPI_READ_MODE_QUAD_READ=y
-# end of SFUD Configuration
+CONFIG_FATFS_RAM_DISK_BASE=0xa0000000
+CONFIG_FATFS_RAM_DISK_SIZE_MB=500
+CONFIG_FATFS_RAM_DISK_SECTOR_SIZE_BYTE=512
+# end of RAM Disk Configuration
-CONFIG_USE_SPIFFS=y
+CONFIG_FATFS_SDMMC=y
+CONFIG_FATFS_SDMMC_FSDIO_TF=y
+CONFIG_FATFS_SDMMC_FSDIO_EMMC=y
+# CONFIG_FATFS_SDMMC_FSDMMC_TF is not set
+CONFIG_FATFS_SATA_DISK=y
#
-# SPIFFS Configuration
+# SATA Disk Configuration
#
-CONFIG_SPIFFS_ON_FSPIM_SFUD=y
-# CONFIG_SPIFFS_ON_FQSPI_SFUD is not set
-# end of SPIFFS Configuration
+# CONFIG_FATFS_FSATA is not set
+# CONFIG_FATFS_FSATA_PCIE is not set
+# end of SATA Disk Configuration
+
+CONFIG_FATFS_USB=y
+CONFIG_FATFS_VOLUME_COUNT=10
+# CONFIG_FATFS_LFN_NONE is not set
+CONFIG_FATFS_LFN_HEAP=y
+# CONFIG_FATFS_LFN_STACK is not set
+CONFIG_FATFS_MAX_LFN=255
+CONFIG_FATFS_FS_LOCK=0
+CONFIG_FATFS_TIMEOUT_MS=10000
+CONFIG_FATFS_PER_FILE_CACHE=y
+CONFIG_FATFS_ALLOC_PREFER_MEMP=y
+CONFIG_FATFS_MEMP_SIZE=2
+# end of FATFS Configuration (0.1.4)
+# CONFIG_USE_SFUD is not set
+# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
CONFIG_USE_LETTER_SHELL=y
@@ -231,6 +272,52 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
# end of Letter Shell Configuration
CONFIG_USE_TLSF=y
-# CONFIG_USE_SDMMC_CMD is not set
-# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+CONFIG_USE_SDMMC_CMD=y
+
+#
+# SDMMC Configuration
+#
+# CONFIG_SDMMC_USE_FSDMMC is not set
+CONFIG_SDMMC_USE_FSDIO=y
+# end of SDMMC Configuration
+
+CONFIG_USE_CHERRY_USB=y
+
+#
+# CherryUSB Configuration
+#
+CONFIG_CHERRY_USB_PORT_XHCI=y
+# CONFIG_CHERRY_USB_PORT_PHYTIUM_OTG is not set
+CONFIG_CHERRYUSB_HOST=y
+# CONFIG_CHERRYUSB_DEVICE is not set
+CONFIG_CHERRY_USB_HOST_HUB=y
+CONFIG_CHERRY_USB_HOST_MSC=y
+# CONFIG_CHERRY_USB_HOST_HID is not set
+# CONFIG_CHERRY_USB_HOST_VEDIO is not set
+# CONFIG_CHERRY_USB_HOST_CDC is not set
+# CONFIG_CHERRY_USB_HOST_RNDIS_WIRELESS is not set
+# end of CherryUSB Configuration
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/storage/fatfs/configs/e2000q_aarch32_eg_configs b/example/storage/fatfs/configs/e2000q_aarch32_eg_configs
new file mode 100644
index 0000000000000000000000000000000000000000..8b0e10786742ea1ab47c8bcaba3c1a38121510af
--- /dev/null
+++ b/example/storage/fatfs/configs/e2000q_aarch32_eg_configs
@@ -0,0 +1,327 @@
+
+#
+# Project Configuration
+#
+CONFIG_TARGET_NAME="e2000q_freertos_a32"
+CONFIG_FATFS_BASIC_TEST=y
+# CONFIG_FATFS_SPEED_TEST is not set
+# CONFIG_FATFS_CYCLE_TEST is not set
+# end of Project Configuration
+
+#
+# Standalone Setting
+#
+CONFIG_USE_FREERTOS=y
+
+#
+# Arch Configuration
+#
+CONFIG_TARGET_ARMV8_AARCH32=y
+# CONFIG_TARGET_ARMV8_AARCH64 is not set
+CONFIG_USE_CACHE=y
+CONFIG_USE_MMU=y
+# CONFIG_USE_SYS_TICK is not set
+CONFIG_USE_AARCH64_L1_TO_AARCH32=y
+# end of Arch Configuration
+
+#
+# Board Configuration
+#
+# CONFIG_TARGET_F2000_4 is not set
+# CONFIG_TARGET_D2000 is not set
+CONFIG_TARGET_E2000Q=y
+# CONFIG_TARGET_E2000D is not set
+# CONFIG_TARGET_E2000S is not set
+CONFIG_TARGET_E2000=y
+CONFIG_DEFAULT_DEBUG_PRINT_UART1=y
+# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set
+# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set
+# end of Board Configuration
+
+#
+# Components Configuration
+#
+# CONFIG_USE_SPI is not set
+# CONFIG_USE_QSPI is not set
+CONFIG_USE_GIC=y
+CONFIG_ENABLE_GICV3=y
+CONFIG_USE_SERIAL=y
+
+#
+# Usart Configuration
+#
+CONFIG_ENABLE_Pl011_UART=y
+# end of Usart Configuration
+
+# CONFIG_USE_GPIO is not set
+# CONFIG_USE_ETH is not set
+# CONFIG_USE_CAN is not set
+# CONFIG_USE_I2C is not set
+# CONFIG_USE_TIMER is not set
+# CONFIG_USE_MIO is not set
+CONFIG_USE_SDMMC=y
+# CONFIG_ENABLE_FSDMMC is not set
+CONFIG_ENABLE_FSDIO=y
+# CONFIG_USE_PCIE is not set
+# CONFIG_USE_WDT is not set
+# CONFIG_USE_DMA is not set
+# CONFIG_USE_NAND is not set
+# CONFIG_USE_RTC is not set
+# CONFIG_USE_SATA is not set
+# CONFIG_USE_USB is not set
+# CONFIG_USE_ADC is not set
+# CONFIG_USE_PWM is not set
+# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
+# end of Components Configuration
+
+CONFIG_USE_NEW_LIBC=y
+# end of Standalone Setting
+
+#
+# Building Option
+#
+# CONFIG_LOG_VERBOS is not set
+# CONFIG_LOG_DEBUG is not set
+# CONFIG_LOG_INFO is not set
+# CONFIG_LOG_WARN is not set
+CONFIG_LOG_ERROR=y
+# CONFIG_LOG_NONE is not set
+CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y
+CONFIG_INTERRUPT_ROLE_MASTER=y
+# CONFIG_INTERRUPT_ROLE_SLAVE is not set
+# CONFIG_LOG_EXTRA_INFO is not set
+# CONFIG_BOOTUP_DEBUG_PRINTS is not set
+
+#
+# Linker Options
+#
+CONFIG_AARCH32_RAM_LD=y
+# CONFIG_AARCH64_RAM_LD is not set
+# CONFIG_USER_DEFINED_LD is not set
+CONFIG_LINK_SCRIPT_ROM=y
+CONFIG_ROM_START_UP_ADDR=0x80100000
+CONFIG_ROM_SIZE_MB=2
+CONFIG_LINK_SCRIPT_RAM=y
+CONFIG_RAM_START_UP_ADDR=0x81000000
+CONFIG_RAM_SIZE_MB=64
+CONFIG_HEAP_SIZE=1
+CONFIG_SVC_STACK_SIZE=0x1000
+CONFIG_SYS_STACK_SIZE=0x1000
+CONFIG_IRQ_STACK_SIZE=0x1000
+CONFIG_ABORT_STACK_SIZE=0x1000
+CONFIG_FIQ_STACK_SIZE=0x1000
+CONFIG_UNDEF_STACK_SIZE=0x1000
+# end of Linker Options
+
+#
+# Compiler Options
+#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
+CONFIG_OUTPUT_BINARY=y
+# end of Compiler Options
+# end of Building Option
+
+#
+# Component Configuration
+#
+
+#
+# Freertos Uart Drivers
+#
+CONFIG_FREERTOS_USE_UART=y
+# end of Freertos Uart Drivers
+
+#
+# Freertos Pwm Drivers
+#
+# CONFIG_FREERTOS_USE_PWM is not set
+# end of Freertos Pwm Drivers
+
+#
+# Freertos Qspi Drivers
+#
+# CONFIG_FREERTOS_USE_QSPI is not set
+# end of Freertos Qspi Drivers
+
+#
+# Freertos Wdt Drivers
+#
+# CONFIG_FREERTOS_USE_WDT is not set
+# end of Freertos Wdt Drivers
+
+#
+# Freertos Eth Drivers
+#
+# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
+# end of Freertos Eth Drivers
+
+#
+# Freertos Gpio Drivers
+#
+# CONFIG_FREERTOS_USE_GPIO is not set
+# end of Freertos Gpio Drivers
+
+#
+# Freertos Spim Drivers
+#
+# CONFIG_FREERTOS_USE_FSPIM is not set
+# end of Freertos Spim Drivers
+
+#
+# Freertos DMA Drivers
+#
+# CONFIG_FREERTOS_USE_FDDMA is not set
+# CONFIG_FREERTOS_USE_FGDMA is not set
+# end of Freertos DMA Drivers
+
+#
+# Freertos Adc Drivers
+#
+# CONFIG_FREERTOS_USE_ADC is not set
+# end of Freertos Adc Drivers
+
+#
+# Freertos Can Drivers
+#
+# CONFIG_FREERTOS_USE_CAN is not set
+# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
+# end of Component Configuration
+
+#
+# Third-Party Configuration
+#
+# CONFIG_USE_LWIP is not set
+CONFIG_USE_BACKTRACE=y
+CONFIG_USE_FATFS_0_1_4=y
+
+#
+# FATFS Configuration (0.1.4)
+#
+CONFIG_FATFS_RAM_DISK=y
+
+#
+# RAM Disk Configuration
+#
+CONFIG_FATFS_RAM_DISK_BASE=0xa0000000
+CONFIG_FATFS_RAM_DISK_SIZE_MB=500
+CONFIG_FATFS_RAM_DISK_SECTOR_SIZE_BYTE=512
+# end of RAM Disk Configuration
+
+CONFIG_FATFS_SDMMC=y
+CONFIG_FATFS_SDMMC_FSDIO_TF=y
+CONFIG_FATFS_SDMMC_FSDIO_EMMC=y
+# CONFIG_FATFS_SDMMC_FSDMMC_TF is not set
+CONFIG_FATFS_SATA_DISK=y
+
+#
+# SATA Disk Configuration
+#
+# CONFIG_FATFS_FSATA is not set
+# CONFIG_FATFS_FSATA_PCIE is not set
+# end of SATA Disk Configuration
+
+CONFIG_FATFS_USB=y
+CONFIG_FATFS_VOLUME_COUNT=10
+# CONFIG_FATFS_LFN_NONE is not set
+CONFIG_FATFS_LFN_HEAP=y
+# CONFIG_FATFS_LFN_STACK is not set
+CONFIG_FATFS_MAX_LFN=255
+CONFIG_FATFS_FS_LOCK=0
+CONFIG_FATFS_TIMEOUT_MS=10000
+CONFIG_FATFS_PER_FILE_CACHE=y
+CONFIG_FATFS_ALLOC_PREFER_MEMP=y
+CONFIG_FATFS_MEMP_SIZE=2
+# end of FATFS Configuration (0.1.4)
+
+# CONFIG_USE_SFUD is not set
+# CONFIG_USE_SPIFFS is not set
+# CONFIG_USE_AMP is not set
+CONFIG_USE_LETTER_SHELL=y
+
+#
+# Letter Shell Configuration
+#
+CONFIG_LS_PL011_UART=y
+CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
+# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set
+# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set
+# end of Letter Shell Configuration
+
+CONFIG_USE_TLSF=y
+CONFIG_USE_SDMMC_CMD=y
+
+#
+# SDMMC Configuration
+#
+# CONFIG_SDMMC_USE_FSDMMC is not set
+CONFIG_SDMMC_USE_FSDIO=y
+# end of SDMMC Configuration
+
+CONFIG_USE_CHERRY_USB=y
+
+#
+# CherryUSB Configuration
+#
+CONFIG_CHERRY_USB_PORT_XHCI=y
+# CONFIG_CHERRY_USB_PORT_PHYTIUM_OTG is not set
+CONFIG_CHERRYUSB_HOST=y
+# CONFIG_CHERRYUSB_DEVICE is not set
+CONFIG_CHERRY_USB_HOST_HUB=y
+CONFIG_CHERRY_USB_HOST_MSC=y
+# CONFIG_CHERRY_USB_HOST_HID is not set
+# CONFIG_CHERRY_USB_HOST_VEDIO is not set
+# CONFIG_CHERRY_USB_HOST_CDC is not set
+# CONFIG_CHERRY_USB_HOST_RNDIS_WIRELESS is not set
+# end of CherryUSB Configuration
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/storage/fatfs/configs/e2000q_aarch64_eg_configs b/example/storage/fatfs/configs/e2000q_aarch64_eg_configs
new file mode 100644
index 0000000000000000000000000000000000000000..27fb43f5e85f9631fbff9674bc7071edd0843634
--- /dev/null
+++ b/example/storage/fatfs/configs/e2000q_aarch64_eg_configs
@@ -0,0 +1,323 @@
+
+#
+# Project Configuration
+#
+CONFIG_TARGET_NAME="e2000q_freertos_a64"
+CONFIG_FATFS_BASIC_TEST=y
+# CONFIG_FATFS_SPEED_TEST is not set
+# CONFIG_FATFS_CYCLE_TEST is not set
+# end of Project Configuration
+
+#
+# Standalone Setting
+#
+CONFIG_USE_FREERTOS=y
+
+#
+# Arch Configuration
+#
+# CONFIG_TARGET_ARMV8_AARCH32 is not set
+CONFIG_TARGET_ARMV8_AARCH64=y
+CONFIG_USE_CACHE=y
+CONFIG_USE_MMU=y
+# CONFIG_USE_SYS_TICK is not set
+# CONFIG_MMU_DEBUG_PRINTS is not set
+# end of Arch Configuration
+
+#
+# Board Configuration
+#
+# CONFIG_TARGET_F2000_4 is not set
+# CONFIG_TARGET_D2000 is not set
+CONFIG_TARGET_E2000Q=y
+# CONFIG_TARGET_E2000D is not set
+# CONFIG_TARGET_E2000S is not set
+CONFIG_TARGET_E2000=y
+CONFIG_DEFAULT_DEBUG_PRINT_UART1=y
+# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set
+# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set
+# end of Board Configuration
+
+#
+# Components Configuration
+#
+# CONFIG_USE_SPI is not set
+# CONFIG_USE_QSPI is not set
+CONFIG_USE_GIC=y
+CONFIG_ENABLE_GICV3=y
+CONFIG_USE_SERIAL=y
+
+#
+# Usart Configuration
+#
+CONFIG_ENABLE_Pl011_UART=y
+# end of Usart Configuration
+
+# CONFIG_USE_GPIO is not set
+# CONFIG_USE_ETH is not set
+# CONFIG_USE_CAN is not set
+# CONFIG_USE_I2C is not set
+# CONFIG_USE_TIMER is not set
+# CONFIG_USE_MIO is not set
+CONFIG_USE_SDMMC=y
+# CONFIG_ENABLE_FSDMMC is not set
+CONFIG_ENABLE_FSDIO=y
+# CONFIG_USE_PCIE is not set
+# CONFIG_USE_WDT is not set
+# CONFIG_USE_DMA is not set
+# CONFIG_USE_NAND is not set
+# CONFIG_USE_RTC is not set
+# CONFIG_USE_SATA is not set
+# CONFIG_USE_USB is not set
+# CONFIG_USE_ADC is not set
+# CONFIG_USE_PWM is not set
+# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
+# end of Components Configuration
+
+CONFIG_USE_NEW_LIBC=y
+# end of Standalone Setting
+
+#
+# Building Option
+#
+# CONFIG_LOG_VERBOS is not set
+# CONFIG_LOG_DEBUG is not set
+# CONFIG_LOG_INFO is not set
+# CONFIG_LOG_WARN is not set
+CONFIG_LOG_ERROR=y
+# CONFIG_LOG_NONE is not set
+CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y
+CONFIG_INTERRUPT_ROLE_MASTER=y
+# CONFIG_INTERRUPT_ROLE_SLAVE is not set
+CONFIG_LOG_EXTRA_INFO=y
+# CONFIG_BOOTUP_DEBUG_PRINTS is not set
+
+#
+# Linker Options
+#
+# CONFIG_AARCH32_RAM_LD is not set
+CONFIG_AARCH64_RAM_LD=y
+# CONFIG_USER_DEFINED_LD is not set
+CONFIG_LINK_SCRIPT_ROM=y
+CONFIG_ROM_START_UP_ADDR=0x80100000
+CONFIG_ROM_SIZE_MB=2
+CONFIG_LINK_SCRIPT_RAM=y
+CONFIG_RAM_START_UP_ADDR=0x81000000
+CONFIG_RAM_SIZE_MB=64
+CONFIG_HEAP_SIZE=1
+CONFIG_STACK_SIZE=0x100000
+CONFIG_FPU_STACK_SIZE=0x1000
+# end of Linker Options
+
+#
+# Compiler Options
+#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
+CONFIG_OUTPUT_BINARY=y
+# end of Compiler Options
+# end of Building Option
+
+#
+# Component Configuration
+#
+
+#
+# Freertos Uart Drivers
+#
+CONFIG_FREERTOS_USE_UART=y
+# end of Freertos Uart Drivers
+
+#
+# Freertos Pwm Drivers
+#
+# CONFIG_FREERTOS_USE_PWM is not set
+# end of Freertos Pwm Drivers
+
+#
+# Freertos Qspi Drivers
+#
+# CONFIG_FREERTOS_USE_QSPI is not set
+# end of Freertos Qspi Drivers
+
+#
+# Freertos Wdt Drivers
+#
+# CONFIG_FREERTOS_USE_WDT is not set
+# end of Freertos Wdt Drivers
+
+#
+# Freertos Eth Drivers
+#
+# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
+# end of Freertos Eth Drivers
+
+#
+# Freertos Gpio Drivers
+#
+# CONFIG_FREERTOS_USE_GPIO is not set
+# end of Freertos Gpio Drivers
+
+#
+# Freertos Spim Drivers
+#
+# CONFIG_FREERTOS_USE_FSPIM is not set
+# end of Freertos Spim Drivers
+
+#
+# Freertos DMA Drivers
+#
+# CONFIG_FREERTOS_USE_FDDMA is not set
+# CONFIG_FREERTOS_USE_FGDMA is not set
+# end of Freertos DMA Drivers
+
+#
+# Freertos Adc Drivers
+#
+# CONFIG_FREERTOS_USE_ADC is not set
+# end of Freertos Adc Drivers
+
+#
+# Freertos Can Drivers
+#
+# CONFIG_FREERTOS_USE_CAN is not set
+# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
+# end of Component Configuration
+
+#
+# Third-Party Configuration
+#
+# CONFIG_USE_LWIP is not set
+CONFIG_USE_BACKTRACE=y
+CONFIG_USE_FATFS_0_1_4=y
+
+#
+# FATFS Configuration (0.1.4)
+#
+CONFIG_FATFS_RAM_DISK=y
+
+#
+# RAM Disk Configuration
+#
+CONFIG_FATFS_RAM_DISK_BASE=0xa0000000
+CONFIG_FATFS_RAM_DISK_SIZE_MB=500
+CONFIG_FATFS_RAM_DISK_SECTOR_SIZE_BYTE=512
+# end of RAM Disk Configuration
+
+CONFIG_FATFS_SDMMC=y
+CONFIG_FATFS_SDMMC_FSDIO_TF=y
+CONFIG_FATFS_SDMMC_FSDIO_EMMC=y
+# CONFIG_FATFS_SDMMC_FSDMMC_TF is not set
+CONFIG_FATFS_SATA_DISK=y
+
+#
+# SATA Disk Configuration
+#
+# CONFIG_FATFS_FSATA is not set
+# CONFIG_FATFS_FSATA_PCIE is not set
+# end of SATA Disk Configuration
+
+CONFIG_FATFS_USB=y
+CONFIG_FATFS_VOLUME_COUNT=10
+# CONFIG_FATFS_LFN_NONE is not set
+CONFIG_FATFS_LFN_HEAP=y
+# CONFIG_FATFS_LFN_STACK is not set
+CONFIG_FATFS_MAX_LFN=255
+CONFIG_FATFS_FS_LOCK=0
+CONFIG_FATFS_TIMEOUT_MS=10000
+CONFIG_FATFS_PER_FILE_CACHE=y
+CONFIG_FATFS_ALLOC_PREFER_MEMP=y
+CONFIG_FATFS_MEMP_SIZE=2
+# end of FATFS Configuration (0.1.4)
+
+# CONFIG_USE_SFUD is not set
+# CONFIG_USE_SPIFFS is not set
+# CONFIG_USE_AMP is not set
+CONFIG_USE_LETTER_SHELL=y
+
+#
+# Letter Shell Configuration
+#
+CONFIG_LS_PL011_UART=y
+CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
+# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set
+# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set
+# end of Letter Shell Configuration
+
+CONFIG_USE_TLSF=y
+CONFIG_USE_SDMMC_CMD=y
+
+#
+# SDMMC Configuration
+#
+# CONFIG_SDMMC_USE_FSDMMC is not set
+CONFIG_SDMMC_USE_FSDIO=y
+# end of SDMMC Configuration
+
+CONFIG_USE_CHERRY_USB=y
+
+#
+# CherryUSB Configuration
+#
+CONFIG_CHERRY_USB_PORT_XHCI=y
+# CONFIG_CHERRY_USB_PORT_PHYTIUM_OTG is not set
+CONFIG_CHERRYUSB_HOST=y
+# CONFIG_CHERRYUSB_DEVICE is not set
+CONFIG_CHERRY_USB_HOST_HUB=y
+CONFIG_CHERRY_USB_HOST_MSC=y
+# CONFIG_CHERRY_USB_HOST_HID is not set
+# CONFIG_CHERRY_USB_HOST_VEDIO is not set
+# CONFIG_CHERRY_USB_HOST_CDC is not set
+# CONFIG_CHERRY_USB_HOST_RNDIS_WIRELESS is not set
+# end of CherryUSB Configuration
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/storage/fatfs/figures/config.png b/example/storage/fatfs/figures/config.png
new file mode 100644
index 0000000000000000000000000000000000000000..3ca3c87e319e6f77d4e96e183c25eb067c9af2c8
Binary files /dev/null and b/example/storage/fatfs/figures/config.png differ
diff --git a/example/storage/fatfs/figures/hardware.png b/example/storage/fatfs/figures/hardware.png
new file mode 100644
index 0000000000000000000000000000000000000000..a5636d4138d74e24374a8fd7f1c215d6aed80980
Binary files /dev/null and b/example/storage/fatfs/figures/hardware.png differ
diff --git a/example/storage/fatfs/figures/test_1.png b/example/storage/fatfs/figures/test_1.png
new file mode 100644
index 0000000000000000000000000000000000000000..3bda1d0341a93c86f75eba6dccdd6c684dc56d65
Binary files /dev/null and b/example/storage/fatfs/figures/test_1.png differ
diff --git a/example/storage/fatfs/figures/test_2.png b/example/storage/fatfs/figures/test_2.png
new file mode 100644
index 0000000000000000000000000000000000000000..a9786c6c346160a80d703d2e5c6af286e11e7e91
Binary files /dev/null and b/example/storage/fatfs/figures/test_2.png differ
diff --git a/example/storage/fatfs/figures/test_3.png b/example/storage/fatfs/figures/test_3.png
new file mode 100644
index 0000000000000000000000000000000000000000..f3f1014c46b51ca88c2335f5d100e15cf12638b6
Binary files /dev/null and b/example/storage/fatfs/figures/test_3.png differ
diff --git a/example/storage/fatfs/figures/test_4.png b/example/storage/fatfs/figures/test_4.png
new file mode 100644
index 0000000000000000000000000000000000000000..cd334840894e874b852dc562724d91883ad6e7d7
Binary files /dev/null and b/example/storage/fatfs/figures/test_4.png differ
diff --git a/example/storage/fatfs/figures/test_5.png b/example/storage/fatfs/figures/test_5.png
new file mode 100644
index 0000000000000000000000000000000000000000..25a6b67cc779395c01be1868000dfcbf918bd0da
Binary files /dev/null and b/example/storage/fatfs/figures/test_5.png differ
diff --git a/example/storage/fatfs/figures/test_item.png b/example/storage/fatfs/figures/test_item.png
new file mode 100644
index 0000000000000000000000000000000000000000..31a5ccde67beaffc7395c4dcc58e546a07cf2dbf
Binary files /dev/null and b/example/storage/fatfs/figures/test_item.png differ
diff --git a/example/storage/sata_fatfs/inc/sata_fatfs_example.h b/example/storage/fatfs/inc/fatfs_examples.h
similarity index 32%
rename from example/storage/sata_fatfs/inc/sata_fatfs_example.h
rename to example/storage/fatfs/inc/fatfs_examples.h
index 7b6a830ee1187745a43defbf3c36925bc0d469e5..04106731d5d0ddabec9f063a2ce13e49fd8f608f 100644
--- a/example/storage/sata_fatfs/inc/sata_fatfs_example.h
+++ b/example/storage/fatfs/inc/fatfs_examples.h
@@ -1,30 +1,52 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
- * FilePath: sata_fatfs_example.h
+ * See the Phytium Public License for more details.
+ *
+ *
+ * FilePath: fatfs_examples.h
* Date: 2022-06-17 10:42:40
* LastEditTime: 2022-06-17 10:42:40
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
+ * Description: This file is for the fatfs test example function declarations.
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 zhugengyu 2022/12/7 init commit
*/
-#ifndef SATA_FATFS_EXAMPLE_H
-#define SATA_FATFS_EXAMPLE_H
+#ifndef FATFS_EXAMPLES_H
+#define FATFS_EXAMPLES_H
-/* sata fatfs read and write test */
-BaseType_t FFreeRTOSSataFatfsCreate(void);
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+enum
+{
+ FFREERTOS_FATFS_RAM_DISK = 0U,
+ FFREERTOS_FATFS_TF_CARD = 1U,
+ FFREERTOS_FATFS_EMMC_CARD = 2U,
+ FFREERTOS_FATFS_USB_DISK = 3U,
+ FFREERTOS_FATFS_SATA_DISK = 4U,
+ FFREERTOS_FATFS_SATA_PCIE_DISK = 5U,
+
+ FFREERTOS_DISK_TYPE_NUM,
+};
+
+/* fatfs run */
+BaseType_t FFreeRTOSFatfsTest(void);
+
+#ifdef __cplusplus
+}
+#endif
#endif // !
\ No newline at end of file
diff --git a/example/storage/spim_spiffs/main.c b/example/storage/fatfs/main.c
similarity index 45%
rename from example/storage/spim_spiffs/main.c
rename to example/storage/fatfs/main.c
index 8f49ee06ea3bdc400c5dd13f057e5cb217f83182..2b47cb9b0282afe991808a6ccdd527b5f44340bc 100644
--- a/example/storage/spim_spiffs/main.c
+++ b/example/storage/fatfs/main.c
@@ -1,47 +1,58 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: main.c
* Date: 2022-06-17 08:17:59
* LastEditTime: 2022-06-17 08:17:59
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
+ * Description: This file is for fatfs main entry.
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 zhugengyu 2022/12/7 init commit
*/
+#include
#include "shell.h"
#include "shell_port.h"
-#include
-#include "spim_spiffs_example.h"
+#include "fatfs_examples.h"
+#include "sdkconfig.h"
+
+
+#ifdef CONFIG_FATFS_SDMMC
+ #include "sdmmc_system.h"
+#endif
int main(void)
{
BaseType_t ret;
- ret = FFreeRTOSSpimSpiffsCreate(0);
- if(ret != pdPASS)
- goto FAIL_EXIT;
+#ifdef CONFIG_FATFS_SDMMC
+ sdmmc_sys_init();
+#endif
+
+ ret = FFreeRTOSFatfsTest();
ret = LSUserShellTask() ;
- if(ret != pdPASS)
+ if (ret != pdPASS)
+ {
goto FAIL_EXIT;
+ }
- vTaskStartScheduler(); /* 启动任务,开启调度 */
+ vTaskStartScheduler(); /* 启动任务,开启调度 */
while (1); /* 正常不会执行到这里 */
-
+
FAIL_EXIT:
- printf("failed 0x%x \r\n", ret);
+ printf("Failed,the ret value is 0x%x. \r\n", ret);
return 0;
}
diff --git a/example/network/gmac_lwip_test/makefile b/example/storage/fatfs/makefile
similarity index 71%
rename from example/network/gmac_lwip_test/makefile
rename to example/storage/fatfs/makefile
index a497d88a7635a154ef55a9a24656929c2d81ebc7..baf1a3fe8785c93b1907e67b6d8dc31f0712b4e7 100644
--- a/example/network/gmac_lwip_test/makefile
+++ b/example/storage/fatfs/makefile
@@ -1,5 +1,6 @@
# 指定工程项目根目录为当前(只能指定一个目录)
export PROJECT_DIR ?= $(shell pwd)
+export KCONFIG_DIR ?= $(PROJECT_DIR)
# 用户添加的源文件夹和头文件夹(可以指定多个)
export USR_SRC_DIR ?= $(PROJECT_DIR) \
$(PROJECT_DIR)/src
@@ -13,7 +14,6 @@ else
USR_BOOT_DIR ?= /mnt/d/tftboot
endif
-
# 设置启动镜像名
BOOT_IMG_NAME ?= freertos
@@ -23,4 +23,8 @@ include $(FREERTOS_SDK_ROOT)/make/build_freertos.mk
# 完成编译
boot:
make -j
- cp ./$(CONFIG_TARGET_NAME).elf $(USR_BOOT_DIR)/$(BOOT_IMG_NAME).elf
+ @cp ./$(CONFIG_TARGET_NAME).elf $(USR_BOOT_DIR)/$(BOOT_IMG_NAME).elf
+ifdef CONFIG_OUTPUT_BINARY
+ @cp ./$(CONFIG_TARGET_NAME).bin $(USR_BOOT_DIR)/$(BOOT_IMG_NAME).bin
+endif
+ @ls $(USR_BOOT_DIR)/$(BOOT_IMG_NAME).* -l
\ No newline at end of file
diff --git a/example/storage/fatfs/sdkconfig b/example/storage/fatfs/sdkconfig
new file mode 100644
index 0000000000000000000000000000000000000000..27fb43f5e85f9631fbff9674bc7071edd0843634
--- /dev/null
+++ b/example/storage/fatfs/sdkconfig
@@ -0,0 +1,323 @@
+
+#
+# Project Configuration
+#
+CONFIG_TARGET_NAME="e2000q_freertos_a64"
+CONFIG_FATFS_BASIC_TEST=y
+# CONFIG_FATFS_SPEED_TEST is not set
+# CONFIG_FATFS_CYCLE_TEST is not set
+# end of Project Configuration
+
+#
+# Standalone Setting
+#
+CONFIG_USE_FREERTOS=y
+
+#
+# Arch Configuration
+#
+# CONFIG_TARGET_ARMV8_AARCH32 is not set
+CONFIG_TARGET_ARMV8_AARCH64=y
+CONFIG_USE_CACHE=y
+CONFIG_USE_MMU=y
+# CONFIG_USE_SYS_TICK is not set
+# CONFIG_MMU_DEBUG_PRINTS is not set
+# end of Arch Configuration
+
+#
+# Board Configuration
+#
+# CONFIG_TARGET_F2000_4 is not set
+# CONFIG_TARGET_D2000 is not set
+CONFIG_TARGET_E2000Q=y
+# CONFIG_TARGET_E2000D is not set
+# CONFIG_TARGET_E2000S is not set
+CONFIG_TARGET_E2000=y
+CONFIG_DEFAULT_DEBUG_PRINT_UART1=y
+# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set
+# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set
+# end of Board Configuration
+
+#
+# Components Configuration
+#
+# CONFIG_USE_SPI is not set
+# CONFIG_USE_QSPI is not set
+CONFIG_USE_GIC=y
+CONFIG_ENABLE_GICV3=y
+CONFIG_USE_SERIAL=y
+
+#
+# Usart Configuration
+#
+CONFIG_ENABLE_Pl011_UART=y
+# end of Usart Configuration
+
+# CONFIG_USE_GPIO is not set
+# CONFIG_USE_ETH is not set
+# CONFIG_USE_CAN is not set
+# CONFIG_USE_I2C is not set
+# CONFIG_USE_TIMER is not set
+# CONFIG_USE_MIO is not set
+CONFIG_USE_SDMMC=y
+# CONFIG_ENABLE_FSDMMC is not set
+CONFIG_ENABLE_FSDIO=y
+# CONFIG_USE_PCIE is not set
+# CONFIG_USE_WDT is not set
+# CONFIG_USE_DMA is not set
+# CONFIG_USE_NAND is not set
+# CONFIG_USE_RTC is not set
+# CONFIG_USE_SATA is not set
+# CONFIG_USE_USB is not set
+# CONFIG_USE_ADC is not set
+# CONFIG_USE_PWM is not set
+# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
+# end of Components Configuration
+
+CONFIG_USE_NEW_LIBC=y
+# end of Standalone Setting
+
+#
+# Building Option
+#
+# CONFIG_LOG_VERBOS is not set
+# CONFIG_LOG_DEBUG is not set
+# CONFIG_LOG_INFO is not set
+# CONFIG_LOG_WARN is not set
+CONFIG_LOG_ERROR=y
+# CONFIG_LOG_NONE is not set
+CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y
+CONFIG_INTERRUPT_ROLE_MASTER=y
+# CONFIG_INTERRUPT_ROLE_SLAVE is not set
+CONFIG_LOG_EXTRA_INFO=y
+# CONFIG_BOOTUP_DEBUG_PRINTS is not set
+
+#
+# Linker Options
+#
+# CONFIG_AARCH32_RAM_LD is not set
+CONFIG_AARCH64_RAM_LD=y
+# CONFIG_USER_DEFINED_LD is not set
+CONFIG_LINK_SCRIPT_ROM=y
+CONFIG_ROM_START_UP_ADDR=0x80100000
+CONFIG_ROM_SIZE_MB=2
+CONFIG_LINK_SCRIPT_RAM=y
+CONFIG_RAM_START_UP_ADDR=0x81000000
+CONFIG_RAM_SIZE_MB=64
+CONFIG_HEAP_SIZE=1
+CONFIG_STACK_SIZE=0x100000
+CONFIG_FPU_STACK_SIZE=0x1000
+# end of Linker Options
+
+#
+# Compiler Options
+#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
+CONFIG_OUTPUT_BINARY=y
+# end of Compiler Options
+# end of Building Option
+
+#
+# Component Configuration
+#
+
+#
+# Freertos Uart Drivers
+#
+CONFIG_FREERTOS_USE_UART=y
+# end of Freertos Uart Drivers
+
+#
+# Freertos Pwm Drivers
+#
+# CONFIG_FREERTOS_USE_PWM is not set
+# end of Freertos Pwm Drivers
+
+#
+# Freertos Qspi Drivers
+#
+# CONFIG_FREERTOS_USE_QSPI is not set
+# end of Freertos Qspi Drivers
+
+#
+# Freertos Wdt Drivers
+#
+# CONFIG_FREERTOS_USE_WDT is not set
+# end of Freertos Wdt Drivers
+
+#
+# Freertos Eth Drivers
+#
+# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
+# end of Freertos Eth Drivers
+
+#
+# Freertos Gpio Drivers
+#
+# CONFIG_FREERTOS_USE_GPIO is not set
+# end of Freertos Gpio Drivers
+
+#
+# Freertos Spim Drivers
+#
+# CONFIG_FREERTOS_USE_FSPIM is not set
+# end of Freertos Spim Drivers
+
+#
+# Freertos DMA Drivers
+#
+# CONFIG_FREERTOS_USE_FDDMA is not set
+# CONFIG_FREERTOS_USE_FGDMA is not set
+# end of Freertos DMA Drivers
+
+#
+# Freertos Adc Drivers
+#
+# CONFIG_FREERTOS_USE_ADC is not set
+# end of Freertos Adc Drivers
+
+#
+# Freertos Can Drivers
+#
+# CONFIG_FREERTOS_USE_CAN is not set
+# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
+# end of Component Configuration
+
+#
+# Third-Party Configuration
+#
+# CONFIG_USE_LWIP is not set
+CONFIG_USE_BACKTRACE=y
+CONFIG_USE_FATFS_0_1_4=y
+
+#
+# FATFS Configuration (0.1.4)
+#
+CONFIG_FATFS_RAM_DISK=y
+
+#
+# RAM Disk Configuration
+#
+CONFIG_FATFS_RAM_DISK_BASE=0xa0000000
+CONFIG_FATFS_RAM_DISK_SIZE_MB=500
+CONFIG_FATFS_RAM_DISK_SECTOR_SIZE_BYTE=512
+# end of RAM Disk Configuration
+
+CONFIG_FATFS_SDMMC=y
+CONFIG_FATFS_SDMMC_FSDIO_TF=y
+CONFIG_FATFS_SDMMC_FSDIO_EMMC=y
+# CONFIG_FATFS_SDMMC_FSDMMC_TF is not set
+CONFIG_FATFS_SATA_DISK=y
+
+#
+# SATA Disk Configuration
+#
+# CONFIG_FATFS_FSATA is not set
+# CONFIG_FATFS_FSATA_PCIE is not set
+# end of SATA Disk Configuration
+
+CONFIG_FATFS_USB=y
+CONFIG_FATFS_VOLUME_COUNT=10
+# CONFIG_FATFS_LFN_NONE is not set
+CONFIG_FATFS_LFN_HEAP=y
+# CONFIG_FATFS_LFN_STACK is not set
+CONFIG_FATFS_MAX_LFN=255
+CONFIG_FATFS_FS_LOCK=0
+CONFIG_FATFS_TIMEOUT_MS=10000
+CONFIG_FATFS_PER_FILE_CACHE=y
+CONFIG_FATFS_ALLOC_PREFER_MEMP=y
+CONFIG_FATFS_MEMP_SIZE=2
+# end of FATFS Configuration (0.1.4)
+
+# CONFIG_USE_SFUD is not set
+# CONFIG_USE_SPIFFS is not set
+# CONFIG_USE_AMP is not set
+CONFIG_USE_LETTER_SHELL=y
+
+#
+# Letter Shell Configuration
+#
+CONFIG_LS_PL011_UART=y
+CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
+# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set
+# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set
+# end of Letter Shell Configuration
+
+CONFIG_USE_TLSF=y
+CONFIG_USE_SDMMC_CMD=y
+
+#
+# SDMMC Configuration
+#
+# CONFIG_SDMMC_USE_FSDMMC is not set
+CONFIG_SDMMC_USE_FSDIO=y
+# end of SDMMC Configuration
+
+CONFIG_USE_CHERRY_USB=y
+
+#
+# CherryUSB Configuration
+#
+CONFIG_CHERRY_USB_PORT_XHCI=y
+# CONFIG_CHERRY_USB_PORT_PHYTIUM_OTG is not set
+CONFIG_CHERRYUSB_HOST=y
+# CONFIG_CHERRYUSB_DEVICE is not set
+CONFIG_CHERRY_USB_HOST_HUB=y
+CONFIG_CHERRY_USB_HOST_MSC=y
+# CONFIG_CHERRY_USB_HOST_HID is not set
+# CONFIG_CHERRY_USB_HOST_VEDIO is not set
+# CONFIG_CHERRY_USB_HOST_CDC is not set
+# CONFIG_CHERRY_USB_HOST_RNDIS_WIRELESS is not set
+# end of CherryUSB Configuration
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/network/gmac_lwip_test/sdkconfig.h b/example/storage/fatfs/sdkconfig.h
similarity index 45%
rename from example/network/gmac_lwip_test/sdkconfig.h
rename to example/storage/fatfs/sdkconfig.h
index 985d2d5055d0c9b03c41de585582457410f4bb73..54265e1b720c6173e45a066ad88edcff7118739c 100644
--- a/example/network/gmac_lwip_test/sdkconfig.h
+++ b/example/storage/fatfs/sdkconfig.h
@@ -3,13 +3,10 @@
/* Project Configuration */
-#define CONFIG_TARGET_NAME "d2000_freertos_a64"
-#define CONFIG_LWIP_IPV4_TEST
-/* CONFIG_LWIP_IPV4_DHCP_TEST is not set */
-/* CONFIG_LWIP_IPV6_TEST is not set */
-#define CONFIG_GMAC_RX_DESCNUM 16
-#define CONFIG_GMAC_TX_DESCNUM 16
-#define CONFIG_GMAC_IRQ_PRIORITY 12
+#define CONFIG_TARGET_NAME "e2000q_freertos_a64"
+#define CONFIG_FATFS_BASIC_TEST
+/* CONFIG_FATFS_SPEED_TEST is not set */
+/* CONFIG_FATFS_CYCLE_TEST is not set */
/* end of Project Configuration */
/* Standalone Setting */
@@ -21,19 +18,19 @@
/* CONFIG_TARGET_ARMV8_AARCH32 is not set */
#define CONFIG_TARGET_ARMV8_AARCH64
#define CONFIG_USE_CACHE
-#define CONFIG_USE_L3CACHE
#define CONFIG_USE_MMU
-#define CONFIG_USE_SYS_TICK
+/* CONFIG_USE_SYS_TICK is not set */
/* CONFIG_MMU_DEBUG_PRINTS is not set */
/* end of Arch Configuration */
/* Board Configuration */
/* CONFIG_TARGET_F2000_4 is not set */
-#define CONFIG_TARGET_D2000
-/* CONFIG_TARGET_E2000Q is not set */
+/* CONFIG_TARGET_D2000 is not set */
+#define CONFIG_TARGET_E2000Q
/* CONFIG_TARGET_E2000D is not set */
/* CONFIG_TARGET_E2000S is not set */
+#define CONFIG_TARGET_E2000
#define CONFIG_DEFAULT_DEBUG_PRINT_UART1
/* CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set */
/* CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set */
@@ -52,20 +49,14 @@
#define CONFIG_ENABLE_Pl011_UART
/* end of Usart Configuration */
/* CONFIG_USE_GPIO is not set */
-#define CONFIG_USE_ETH
-
-/* Eth Configuration */
-
-/* CONFIG_ENABLE_FXMAC is not set */
-#define CONFIG_ENABLE_FGMAC
-#define CONFIG_FGMAC_PHY_COMMON
-/* CONFIG_FGMAC_PHY_AR803X is not set */
-/* end of Eth Configuration */
+/* CONFIG_USE_ETH is not set */
/* CONFIG_USE_CAN is not set */
/* CONFIG_USE_I2C is not set */
/* CONFIG_USE_TIMER is not set */
/* CONFIG_USE_MIO is not set */
-/* CONFIG_USE_SDMMC is not set */
+#define CONFIG_USE_SDMMC
+/* CONFIG_ENABLE_FSDMMC is not set */
+#define CONFIG_ENABLE_FSDIO
/* CONFIG_USE_PCIE is not set */
/* CONFIG_USE_WDT is not set */
/* CONFIG_USE_DMA is not set */
@@ -76,6 +67,7 @@
/* CONFIG_USE_ADC is not set */
/* CONFIG_USE_PWM is not set */
/* CONFIG_USE_IPC is not set */
+/* CONFIG_USE_MEDIA is not set */
/* end of Components Configuration */
#define CONFIG_USE_NEW_LIBC
/* end of Standalone Setting */
@@ -84,14 +76,14 @@
/* CONFIG_LOG_VERBOS is not set */
/* CONFIG_LOG_DEBUG is not set */
-#define CONFIG_LOG_INFO
+/* CONFIG_LOG_INFO is not set */
/* CONFIG_LOG_WARN is not set */
-/* CONFIG_LOG_ERROR is not set */
+#define CONFIG_LOG_ERROR
/* CONFIG_LOG_NONE is not set */
#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG
#define CONFIG_INTERRUPT_ROLE_MASTER
/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */
-/* CONFIG_LOG_EXTRA_INFO is not set */
+#define CONFIG_LOG_EXTRA_INFO
/* CONFIG_BOOTUP_DEBUG_PRINTS is not set */
/* Linker Options */
@@ -101,7 +93,7 @@
/* CONFIG_USER_DEFINED_LD is not set */
#define CONFIG_LINK_SCRIPT_ROM
#define CONFIG_ROM_START_UP_ADDR 0x80100000
-#define CONFIG_ROM_SIZE_MB 1
+#define CONFIG_ROM_SIZE_MB 2
#define CONFIG_LINK_SCRIPT_RAM
#define CONFIG_RAM_START_UP_ADDR 0x81000000
#define CONFIG_RAM_SIZE_MB 64
@@ -112,7 +104,13 @@
/* Compiler Options */
-/* CONFIG_OUTPUT_BINARY is not set */
+/* Cross-Compiler Setting */
+
+#define CONFIG_GCC_OPTIMIZE_LEVEL 0
+/* CONFIG_USE_EXT_COMPILER is not set */
+/* CONFIG_USE_KLIN_SYS is not set */
+/* end of Cross-Compiler Setting */
+#define CONFIG_OUTPUT_BINARY
/* end of Compiler Options */
/* end of Building Option */
@@ -141,6 +139,7 @@
/* Freertos Eth Drivers */
/* CONFIG_FREERTOS_USE_XMAC is not set */
+/* CONFIG_FREERTOS_USE_GMAC is not set */
/* end of Freertos Eth Drivers */
/* Freertos Gpio Drivers */
@@ -159,11 +158,6 @@
/* CONFIG_FREERTOS_USE_FGDMA is not set */
/* end of Freertos DMA Drivers */
-/* Freertos MMC Drivers */
-
-/* CONFIG_FREERTOS_USE_FSDIO is not set */
-/* end of Freertos MMC Drivers */
-
/* Freertos Adc Drivers */
/* CONFIG_FREERTOS_USE_ADC is not set */
@@ -173,167 +167,62 @@
/* CONFIG_FREERTOS_USE_CAN is not set */
/* end of Freertos Can Drivers */
-/* end of Component Configuration */
-
-/* FreeRTOS Setting */
-
-#define CONFIG_USE_LWIP
-
-/* LWIP Configuration */
-
-/* LWIP Port Configuration */
-
-#define CONFIG_LWIP_FGMAC
-/* CONFIG_LWIP_FXMAC is not set */
-/* end of LWIP Port Configuration */
-#define CONFIG_LWIP_LOCAL_HOSTNAME "phytium"
-
-/* memory configuration */
-
-#define CONFIG_LWIP_USE_MEM_POOL
-/* CONFIG_LWIP_USE_MEM_HEAP is not set */
-#define CONFIG_MEMP_NUM_PBUF 64
-#define CONFIG_MEM_ALIGNMENT 64
-/* end of memory configuration */
-
-/* NETWORK_INTERFACE_OPTIONS */
-
-/* CONFIG_LWIP_NETIF_API is not set */
-/* CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set */
-/* end of NETWORK_INTERFACE_OPTIONS */
-
-/* LOOPIF */
-
-#define CONFIG_LWIP_NETIF_LOOPBACK
-#define CONFIG_LWIP_LOOPBACK_MAX_PBUFS 8
-/* end of LOOPIF */
-
-/* SLIPIF */
-
-/* CONFIG_LWIP_SLIP_SUPPORT is not set */
-/* end of SLIPIF */
-
-/* Pbuf options */
-#define CONFIG_PBUF_POOL_BUFSIZE 2
-/* end of Pbuf options */
+/* Freertos I2c Drivers */
-/* Internal Memory Pool Sizes */
+/* CONFIG_FREERTOS_USE_I2C is not set */
+/* end of Freertos I2c Drivers */
-#define CONFIG_PBUF_POOL_SIZE 1
-/* end of Internal Memory Pool Sizes */
-#define CONFIG_LWIP_MAX_SOCKETS 10
+/* Freertos Mio Drivers */
-/* LWIP RAW API */
+/* CONFIG_FREERTOS_USE_MIO is not set */
+/* end of Freertos Mio Drivers */
-#define CONFIG_LWIP_MAX_RAW_PCBS 16
-/* end of LWIP RAW API */
+/* Freertos Timer Drivers */
-/* TCP */
-
-#define CONFIG_LWIP_MAX_ACTIVE_TCP 16
-#define CONFIG_LWIP_MAX_LISTENING_TCP 16
-#define CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION
-#define CONFIG_LWIP_TCP_MAXRTX 12
-#define CONFIG_LWIP_TCP_SYNMAXRTX 12
-#define CONFIG_LWIP_TCP_MSS 1440
-#define CONFIG_LWIP_TCP_TMR_INTERVAL 250
-#define CONFIG_LWIP_TCP_MSL 60000
-#define CONFIG_LWIP_TCP_SND_BUF_DEFAULT 5744
-#define CONFIG_LWIP_TCP_WND_DEFAULT 5744
-#define CONFIG_LWIP_TCP_RECVMBOX_SIZE 6
-#define CONFIG_LWIP_TCP_QUEUE_OOSEQ
-/* CONFIG_LWIP_TCP_SACK_OUT is not set */
-#define CONFIG_LWIP_TCP_OVERSIZE_MSS
-/* CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set */
-/* CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set */
-/* end of TCP */
-
-/* UDP */
-
-#define CONFIG_LWIP_MAX_UDP_PCBS 16
-#define CONFIG_LWIP_UDP_RECVMBOX_SIZE 6
-/* CONFIG_LWIP_NETBUF_RECVINFO is not set */
-/* end of UDP */
-
-/* IPv4 */
-
-/* CONFIG_USE_IPV4_ONLY is not set */
-/* CONFIG_LWIP_IP4_REASSEMBLY is not set */
-#define CONFIG_LWIP_IP4_FRAG
-/* CONFIG_LWIP_IP_FORWARD is not set */
-#define CONFIG_IP_REASS_MAX_PBUFS 16
-/* end of IPv4 */
-
-/* ICMP */
-
-#define CONFIG_LWIP_ICMP
-/* CONFIG_LWIP_MULTICAST_PING is not set */
-/* CONFIG_LWIP_BROADCAST_PING is not set */
-/* end of ICMP */
-
-/* DHCP */
-
-/* CONFIG_LWIP_DHCP_ENABLE is not set */
-#define CONFIG_LWIP_DHCP_DOES_ARP_CHECK
-/* CONFIG_LWIP_DHCP_GET_NTP_SRV is not set */
-/* CONFIG_LWIP_DHCP_DISABLE_CLIENT_ID is not set */
-/* CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set */
-#define CONFIG_LWIP_DHCP_OPTIONS_LEN 68
-#define CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID
-/* end of DHCP */
-
-/* AUTOIP */
-
-/* CONFIG_LWIP_AUTOIP is not set */
-/* end of AUTOIP */
-
-/* DNS */
-
-#define CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES
-/* end of DNS */
-
-/* TCP options */
-
-#define CONFIG_LWIP_TCP_RTO_TIME 1500
-/* end of TCP options */
-/* CONFIG_LWIP_TCPIP_CORE_LOCKING is not set */
-
-/* socket */
-
-/* CONFIG_LWIP_SO_LINGER is not set */
-#define CONFIG_LWIP_SO_REUSE
-#define CONFIG_LWIP_SO_REUSE_RXTOALL
-/* end of socket */
-/* CONFIG_LWIP_STATS is not set */
-
-/* PPP */
+/* CONFIG_FREERTOS_USE_TIMER is not set */
+/* end of Freertos Timer Drivers */
+/* end of Component Configuration */
-/* CONFIG_LWIP_PPP_SUPPORT is not set */
-#define CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE 3
-#define CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS 5
-/* end of PPP */
+/* Third-Party Configuration */
-/* Checksums */
-
-/* CONFIG_LWIP_CHECKSUM_CHECK_IP is not set */
-/* CONFIG_LWIP_CHECKSUM_CHECK_UDP is not set */
-#define CONFIG_LWIP_CHECKSUM_CHECK_ICMP
-/* end of Checksums */
-
-/* ipv6 */
-
-#define CONFIG_LWIP_IPV6
-/* CONFIG_LWIP_IPV6_AUTOCONFIG is not set */
-#define CONFIG_LWIP_IPV6_NUM_ADDRESSES 3
-/* CONFIG_LWIP_IPV6_FORWARD is not set */
-#define CONFIG_LWIP_IP6_FRAG
-/* CONFIG_LWIP_IP6_REASSEMBLY is not set */
-/* end of ipv6 */
-/* CONFIG_LWIP_DEBUG is not set */
-/* end of LWIP Configuration */
+/* CONFIG_USE_LWIP is not set */
#define CONFIG_USE_BACKTRACE
-/* CONFIG_USE_FATFS is not set */
+#define CONFIG_USE_FATFS_0_1_4
+
+/* FATFS Configuration (0.1.4) */
+
+#define CONFIG_FATFS_RAM_DISK
+
+/* RAM Disk Configuration */
+
+#define CONFIG_FATFS_RAM_DISK_BASE 0xa0000000
+#define CONFIG_FATFS_RAM_DISK_SIZE_MB 500
+#define CONFIG_FATFS_RAM_DISK_SECTOR_SIZE_BYTE 512
+/* end of RAM Disk Configuration */
+#define CONFIG_FATFS_SDMMC
+#define CONFIG_FATFS_SDMMC_FSDIO_TF
+#define CONFIG_FATFS_SDMMC_FSDIO_EMMC
+/* CONFIG_FATFS_SDMMC_FSDMMC_TF is not set */
+#define CONFIG_FATFS_SATA_DISK
+
+/* SATA Disk Configuration */
+
+/* CONFIG_FATFS_FSATA is not set */
+/* CONFIG_FATFS_FSATA_PCIE is not set */
+/* end of SATA Disk Configuration */
+#define CONFIG_FATFS_USB
+#define CONFIG_FATFS_VOLUME_COUNT 10
+/* CONFIG_FATFS_LFN_NONE is not set */
+#define CONFIG_FATFS_LFN_HEAP
+/* CONFIG_FATFS_LFN_STACK is not set */
+#define CONFIG_FATFS_MAX_LFN 255
+#define CONFIG_FATFS_FS_LOCK 0
+#define CONFIG_FATFS_TIMEOUT_MS 10000
+#define CONFIG_FATFS_PER_FILE_CACHE
+#define CONFIG_FATFS_ALLOC_PREFER_MEMP
+#define CONFIG_FATFS_MEMP_SIZE 2
+/* end of FATFS Configuration (0.1.4) */
/* CONFIG_USE_SFUD is not set */
/* CONFIG_USE_SPIFFS is not set */
/* CONFIG_USE_AMP is not set */
@@ -347,8 +236,50 @@
/* CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set */
/* end of Letter Shell Configuration */
#define CONFIG_USE_TLSF
-/* CONFIG_USE_SDMMC_CMD is not set */
-/* CONFIG_USE_CHERRY_USB is not set */
-/* end of FreeRTOS Setting */
+#define CONFIG_USE_SDMMC_CMD
+
+/* SDMMC Configuration */
+
+/* CONFIG_SDMMC_USE_FSDMMC is not set */
+#define CONFIG_SDMMC_USE_FSDIO
+/* end of SDMMC Configuration */
+#define CONFIG_USE_CHERRY_USB
+
+/* CherryUSB Configuration */
+
+#define CONFIG_CHERRY_USB_PORT_XHCI
+/* CONFIG_CHERRY_USB_PORT_PHYTIUM_OTG is not set */
+#define CONFIG_CHERRYUSB_HOST
+/* CONFIG_CHERRYUSB_DEVICE is not set */
+#define CONFIG_CHERRY_USB_HOST_HUB
+#define CONFIG_CHERRY_USB_HOST_MSC
+/* CONFIG_CHERRY_USB_HOST_HID is not set */
+/* CONFIG_CHERRY_USB_HOST_VEDIO is not set */
+/* CONFIG_CHERRY_USB_HOST_CDC is not set */
+/* CONFIG_CHERRY_USB_HOST_RNDIS_WIRELESS is not set */
+/* end of CherryUSB Configuration */
+/* end of Third-Party Configuration */
+
+/* Kernel Configuration */
+
+#define CONFIG_FREERTOS_OPTIMIZED_SCHEDULER
+#define CONFIG_FREERTOS_HZ 1000
+#define CONFIG_FREERTOS_MAX_PRIORITIES 32
+#define CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES 13
+#define CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES 11
+#define CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS 1
+#define CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE 1024
+#define CONFIG_FREERTOS_MAX_TASK_NAME_LEN 32
+#define CONFIG_FREERTOS_TIMER_TASK_PRIORITY 1
+#define CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH 2048
+#define CONFIG_FREERTOS_TIMER_QUEUE_LENGTH 10
+#define CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE 0
+#define CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS
+#define CONFIG_FREERTOS_USE_TRACE_FACILITY
+#define CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS
+/* CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set */
+#define CONFIG_FREERTOS_TOTAL_HEAP_SIZE 10240
+#define CONFIG_FREERTOS_TASK_FPU_SUPPORT 1
+/* end of Kernel Configuration */
#endif
diff --git a/example/storage/fatfs/src/fatfs_examples.c b/example/storage/fatfs/src/fatfs_examples.c
new file mode 100644
index 0000000000000000000000000000000000000000..7c2b787ddf73697c140fdb1d5ebd45adf89d6c81
--- /dev/null
+++ b/example/storage/fatfs/src/fatfs_examples.c
@@ -0,0 +1,431 @@
+/*
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * All Rights Reserved.
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the Phytium Public License for more details.
+ *
+ *
+ * FilePath: fatfs_examples.c
+ * Date: 2022-07-11 11:32:48
+ * LastEditTime: 2022-07-11 11:32:48
+ * Description: This file is for the fatfs test example functions.
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 zhugengyu 2022/12/7 init commit
+ */
+#include
+#include
+#include
+
+#include "FreeRTOSConfig.h"
+#include "FreeRTOS.h"
+#include "task.h"
+#include "semphr.h"
+#include "timers.h"
+#include "event_groups.h"
+
+#include "fkernel.h"
+#include "strto.h"
+#include "fassert.h"
+#include "fdebug.h"
+#include "fparameters.h"
+#include "sdkconfig.h"
+
+#include "ff_utils.h"
+#include "fatfs_examples.h"
+/************************** Constant Definitions *****************************/
+#define FATFS_EVT_INIT_DONE (0x1 << 0)
+#define FATFS_EVT_CYC_TEST_DONE (0x1 << 1)
+
+/************************** Variable Definitions *****************************/
+static const char *mount_points[FFREERTOS_DISK_TYPE_NUM] =
+{
+ [FFREERTOS_FATFS_RAM_DISK] = FF_RAM_DISK_MOUNT_POINT,
+ [FFREERTOS_FATFS_TF_CARD] = FF_FSDIO_TF_DISK_MOUNT_POINT,
+ [FFREERTOS_FATFS_EMMC_CARD] = FF_FSDIO_EMMC_DISK_MOUNT_POINT,
+ [FFREERTOS_FATFS_USB_DISK] = FF_USB_DISK_MOUNT_POINT,
+ [FFREERTOS_FATFS_SATA_DISK] = FF_SATA_DISK_MOUNT_POINT,
+ [FFREERTOS_FATFS_SATA_PCIE_DISK] = FF_SATA_PCIE_DISK_MOUNT_POINT
+};
+static const MKFS_PARM fs_option =
+{
+ .fmt = FM_EXFAT, /* format file system as exFAT to support > 4GB storage */
+ .n_fat = 0, /* use default setting for other options */
+ .align = 0,
+ .n_root = 0,
+ .au_size = 0
+};
+static boolean is_running = FALSE;
+static EventGroupHandle_t sync = NULL;
+static TimerHandle_t exit_timer = NULL;
+static ff_fatfs file_sys[FFREERTOS_DISK_TYPE_NUM];
+
+/***************** Macros (Inline Functions) Definitions *********************/
+#define FF_DEBUG_TAG "FATFS"
+#define FF_ERROR(format, ...) FT_DEBUG_PRINT_E(FF_DEBUG_TAG, format, ##__VA_ARGS__)
+#define FF_WARN(format, ...) FT_DEBUG_PRINT_W(FF_DEBUG_TAG, format, ##__VA_ARGS__)
+#define FF_INFO(format, ...) FT_DEBUG_PRINT_I(FF_DEBUG_TAG, format, ##__VA_ARGS__)
+#define FF_DEBUG(format, ...) FT_DEBUG_PRINT_D(FF_DEBUG_TAG, format, ##__VA_ARGS__)
+
+/************************** Function Prototypes ******************************/
+
+/*****************************************************************************/
+static void FatfsSendEvent(u32 evt_bits)
+{
+ FASSERT(sync);
+ BaseType_t x_result = pdFALSE;
+
+ FF_DEBUG("Ack evt_bits is 0x%x.", evt_bits);
+ x_result = xEventGroupSetBits(sync, evt_bits);
+}
+
+static boolean FatfsWaitEvent(u32 evt_bits, TickType_t wait_delay)
+{
+ FASSERT(sync);
+ EventBits_t ev;
+ ev = xEventGroupWaitBits(sync, evt_bits,
+ pdTRUE, pdFALSE, wait_delay);
+ if (ev & evt_bits)
+ {
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void FatfsInitTask(void *args)
+{
+ FRESULT fr = FR_OK;
+
+#ifdef CONFIG_FATFS_RAM_DISK
+ fr = ff_setup(&file_sys[FFREERTOS_FATFS_RAM_DISK],
+ mount_points[FFREERTOS_FATFS_RAM_DISK],
+ &fs_option, pdFALSE);
+
+ if (FR_OK != fr)
+ {
+ FF_ERROR("RAM disk init failed, err = %d.", fr);
+ goto task_exit;
+ }
+#endif
+
+#ifdef CONFIG_FATFS_SDMMC_FSDIO_TF
+ fr = ff_setup(&file_sys[FFREERTOS_FATFS_TF_CARD],
+ mount_points[FFREERTOS_FATFS_TF_CARD],
+ &fs_option, pdFALSE);
+
+ if (FR_OK != fr)
+ {
+ FF_ERROR("TF card init failed, err = %d.", fr);
+ goto task_exit;
+ }
+#endif
+
+#ifdef CONFIG_FATFS_SDMMC_FSDIO_EMMC
+ fr = ff_setup(&file_sys[FFREERTOS_FATFS_EMMC_CARD],
+ mount_points[FFREERTOS_FATFS_EMMC_CARD],
+ &fs_option, pdFALSE);
+
+ if (FR_OK != fr)
+ {
+ FF_ERROR("SDIO card init failed, err = %d.", fr);
+ goto task_exit;
+ }
+#endif
+
+#ifdef CONFIG_FATFS_USB
+ fr = ff_setup(&file_sys[FFREERTOS_FATFS_USB_DISK],
+ mount_points[FFREERTOS_FATFS_USB_DISK],
+ &fs_option, pdFALSE);
+
+ if (FR_OK != fr)
+ {
+ FF_ERROR("USB init failed, err = %d.", fr);
+ goto task_exit;
+ }
+#endif
+
+#ifdef CONFIG_FATFS_FSATA
+ fr = ff_setup(&file_sys[FFREERTOS_FATFS_SATA_DISK],
+ mount_points[FFREERTOS_FATFS_SATA_DISK],
+ &fs_option, pdFALSE);
+
+ if (FR_OK != fr)
+ {
+ FF_ERROR("SATA init failed, err = %d.", fr);
+ goto task_exit;
+ }
+#endif
+#ifdef CONFIG_FATFS_FSATA_PCIE
+ fr = ff_setup(&file_sys[FFREERTOS_FATFS_SATA_PCIE_DISK],
+ mount_points[FFREERTOS_FATFS_SATA_PCIE_DISK],
+ &fs_option, pdFALSE);
+
+ if (FR_OK != fr)
+ {
+ FF_ERROR("SATA PCIE init failed, err = %d.", fr);
+ goto task_exit;
+ }
+#endif
+ FatfsSendEvent(FATFS_EVT_INIT_DONE);
+task_exit:
+ vTaskDelete(NULL); /* delete task itself */
+}
+
+static void FatfsTestTask(void *args)
+{
+ const char *root = NULL;
+ FRESULT fr = FR_OK;
+
+ FatfsWaitEvent(FATFS_EVT_INIT_DONE, portMAX_DELAY);
+
+#ifdef CONFIG_FATFS_BASIC_TEST
+ {
+#ifdef CONFIG_FATFS_RAM_DISK
+ printf("\r\n========Basic test for RAM Disk=================\r\n");
+ fr = ff_basic_test(mount_points[FFREERTOS_FATFS_RAM_DISK], "logfile.txt");
+ if (FR_OK != fr)
+ {
+ FF_ERROR("RAM disk basic test failed, err = %d.", fr);
+ goto task_exit;
+ }
+#endif
+
+#ifdef CONFIG_FATFS_SDMMC_FSDIO_TF
+ printf("\r\n========Basic test for TF Card=================\r\n");
+ fr = ff_basic_test(mount_points[FFREERTOS_FATFS_TF_CARD], "logfile.txt");
+ if (FR_OK != fr)
+ {
+ FF_ERROR("TF card basic test failed, err = %d.", fr);
+ goto task_exit;
+ }
+#endif
+
+#ifdef CONFIG_FATFS_SDMMC_FSDIO_EMMC
+ printf("\r\n========Basic test for eMMC=================\r\n");
+ fr = ff_basic_test(mount_points[FFREERTOS_FATFS_EMMC_CARD], "logfile.txt");
+ if (FR_OK != fr)
+ {
+ FF_ERROR("SDIO basic test failed, err = %d.", fr);
+ goto task_exit;
+ }
+#endif
+
+#ifdef CONFIG_FATFS_USB
+ printf("\r\n========Basic test for USB Disk=================\r\n");
+ fr = ff_basic_test(mount_points[FFREERTOS_FATFS_USB_DISK], "logfile.txt");
+ if (FR_OK != fr)
+ {
+ FF_ERROR("USB basic test failed, err = %d.", fr);
+ goto task_exit;
+ }
+#endif
+
+#ifdef CONFIG_FATFS_FSATA
+ printf("\r\n========Basic test for SATA Disk=================\r\n");
+ fr = ff_basic_test(mount_points[FFREERTOS_FATFS_SATA_DISK], "logfile.txt");
+ if (FR_OK != fr)
+ {
+ FF_ERROR("SATA basic test failed, err = %d.", fr);
+ goto task_exit;
+ }
+#endif
+
+#ifdef CONFIG_FATFS_FSATA_PCIE
+ printf("\r\n========Basic test for SATA PCIE Disk=================\r\n");
+ fr = ff_basic_test(mount_points[FFREERTOS_FATFS_SATA_PCIE_DISK], "logfile.txt");
+ if (FR_OK != fr)
+ {
+ FF_ERROR("SATA PCIE basic test failed, err = %d.", fr);
+ goto task_exit;
+ }
+#endif
+ }
+#endif
+
+ /* speed test will test diskio and destory file system */
+#ifdef CONFIG_FATFS_SPEED_TEST
+ {
+#ifdef CONFIG_FATFS_RAM_DISK
+ printf("\r\n========Speed test for RAM Disk=================\r\n");
+ fr = ff_speed_bench(mount_points[FFREERTOS_FATFS_RAM_DISK], 300000U);
+ if (FR_OK != fr)
+ {
+ FF_ERROR("RAM disk speed test failed, err = %d.", fr);
+ goto task_exit;
+ }
+#endif
+
+#ifdef CONFIG_FATFS_SDMMC_FSDIO_TF
+ printf("\r\n========Speed test for TF Card=================\r\n");
+ fr = ff_speed_bench(mount_points[FFREERTOS_FATFS_TF_CARD], 300000U);
+ if (FR_OK != fr)
+ {
+ FF_ERROR("TF speed test failed, err = %d.", fr);
+ goto task_exit;
+ }
+#endif
+
+#ifdef CONFIG_FATFS_SDMMC_FSDIO_EMMC
+ printf("\r\n========Speed test for eMMC=================\r\n");
+ fr = ff_speed_bench(mount_points[FFREERTOS_FATFS_EMMC_CARD], 300000U);
+ if (FR_OK != fr)
+ {
+ FF_ERROR("SDIO speed test failed, err = %d.", fr);
+ goto task_exit;
+ }
+#endif
+
+#ifdef CONFIG_FATFS_USB
+ printf("\r\n========Speed test for USB Disk=================\r\n");
+ fr = ff_speed_bench(mount_points[FFREERTOS_FATFS_USB_DISK], 300000U);
+ if (FR_OK != fr)
+ {
+ FF_ERROR("USB speed test failed, err = %d.", fr);
+ goto task_exit;
+ }
+#endif
+
+#ifdef CONFIG_FATFS_FSATA
+ printf("\r\n========Speed test for SATA Disk=================\r\n");
+ fr = ff_speed_bench(mount_points[FFREERTOS_FATFS_SATA_DISK], 30000U);
+ if (FR_OK != fr)
+ {
+ FF_ERROR("SATA speed test failed, err = %d.", fr);
+ goto task_exit;
+ }
+#endif
+
+#ifdef CONFIG_FATFS_FSATA_PCIE
+ printf("\r\n========Speed test for SATA PCIE Disk=================\r\n");
+ fr = ff_speed_bench(mount_points[FFREERTOS_FATFS_SATA_PCIE_DISK], 30000U);
+ if (FR_OK != fr)
+ {
+ FF_ERROR("SATA PCIE speed test failed, err = %d.", fr);
+ goto task_exit;
+ }
+#endif
+ }
+#endif
+
+ /* cycle test will test diskio and destory file system */
+#ifdef CONFIG_FATFS_CYCLE_TEST
+ {
+#ifdef CONFIG_FATFS_RAM_DISK
+ printf("\r\n========Cycle test for RAM Disk=================\r\n");
+ if (ff_cycle_test(mount_points[FFREERTOS_FATFS_RAM_DISK], 3))
+ {
+ goto task_exit;
+ }
+#endif
+
+#ifdef CONFIG_FATFS_SDMMC_FSDIO_TF
+ printf("\r\n========Cycle test for TF Disk=================\r\n");
+ if (ff_cycle_test(mount_points[FFREERTOS_FATFS_TF_CARD], 3))
+ {
+ goto task_exit;
+ }
+#endif
+
+#ifdef CONFIG_FATFS_SDMMC_FSDIO_EMMC
+ printf("\r\n========Cycle test for SDIO Disk=================\r\n");
+ if (ff_cycle_test(mount_points[FFREERTOS_FATFS_EMMC_CARD], 3))
+ {
+ goto task_exit;
+ }
+#endif
+
+#ifdef CONFIG_FATFS_USB
+ printf("\r\n========Cycle test for USB Disk=================\r\n");
+ if (ff_cycle_test(mount_points[FFREERTOS_FATFS_USB_DISK], 3))
+ {
+ goto task_exit;
+ }
+#endif
+
+#ifdef CONFIG_FATFS_FSATA
+ printf("\r\n========Cycle test for SATA Disk=================\r\n");
+ if (ff_cycle_test(mount_points[FFREERTOS_FATFS_SATA_DISK], 3))
+ {
+ goto task_exit;
+ }
+#endif
+
+#ifdef CONFIG_FATFS_FSATA_PCIE
+ printf("\r\n========Cycle test for SATA PCIE Disk=================\r\n");
+ if (ff_cycle_test(mount_points[FFREERTOS_FATFS_SATA_PCIE_DISK], 3))
+ {
+ goto task_exit;
+ }
+#endif
+ }
+#endif
+
+task_exit:
+ FatfsSendEvent(FATFS_EVT_CYC_TEST_DONE);
+ printf("Exit from test task.\r\n");
+ vTaskDelete(NULL); /* delete task itself */
+}
+
+static void FatfsExitCallback(TimerHandle_t timer)
+{
+ if (sync)
+ {
+ vEventGroupDelete(sync);
+ sync = NULL;
+ }
+
+ is_running = FALSE;
+}
+
+BaseType_t FFreeRTOSFatfsTest(void)
+{
+ BaseType_t ret = pdPASS;
+ const TickType_t total_run_time = pdMS_TO_TICKS(30000UL); /* run for 30 secs deadline */
+
+ if (is_running)
+ {
+ FF_ERROR("The task is running.");
+ return pdPASS;
+ }
+
+ FASSERT_MSG(NULL == sync, "Event group exists.");
+ FASSERT_MSG((sync = xEventGroupCreate()) != NULL, "Create event group failed.");
+
+ taskENTER_CRITICAL(); /* no schedule when create task */
+
+ ret = xTaskCreate((TaskFunction_t)FatfsInitTask,
+ (const char *)"FatfsInitTask",
+ (uint16_t)2048,
+ NULL,
+ (UBaseType_t)configMAX_PRIORITIES - 1,
+ NULL);
+ FASSERT_MSG(pdPASS == ret, "Create task failed.");
+
+ ret = xTaskCreate((TaskFunction_t)FatfsTestTask,
+ (const char *)"FatfsTestTask",
+ (uint16_t)2048,
+ NULL,
+ (UBaseType_t)configMAX_PRIORITIES - 1,
+ NULL);
+ FASSERT_MSG(pdPASS == ret, "Create task failed.");
+
+ exit_timer = xTimerCreate("FatfsExitTimer", /* Text name for the software timer - not used by FreeRTOS. */
+ total_run_time, /* The software timer's period in ticks. */
+ pdFALSE, /* Setting uxAutoRealod to pdFALSE creates a one-shot software timer. */
+ NULL, /* use timer id to pass task data for reference. */
+ FatfsExitCallback); /* The callback function to be used by the software timer being created. */
+
+ FASSERT_MSG(NULL != exit_timer, "Create exit timer failed.");
+
+ taskEXIT_CRITICAL(); /* allow schedule since task created */
+ return ret;
+}
\ No newline at end of file
diff --git a/example/storage/qspi_spiffs/README.md b/example/storage/qspi_spiffs/README.md
index cda3dd2f62c4eeba2ac87e72ad1ca8cde96a5fcc..10a22f8a79b7296a30fc6ee09f6a6ea196098a4a 100644
--- a/example/storage/qspi_spiffs/README.md
+++ b/example/storage/qspi_spiffs/README.md
@@ -118,15 +118,18 @@ bootelf -p 0x90100000
### 2.4 输出与实验现象
>描述输入输出情况,列出存在哪些输出,对应的输出是什么(建议附录相关现象图片)
-程序启动后,依次创建Init、Read、Write任务,创建单次模式软件定时器用于删除任务,Init任务会首先初始化并挂载qspi flash的部分区域(可通过FSPIFFS_IF_FORMAT选择是否进行格式化操作),随后创建一个文件,然后释放信号量通知Read和Write任务开始执行;
+程序启动后,依次创建Init、WriteRead任务,创建单次模式软件定时器用于删除任务,Init任务会首先初始化并挂载qspi flash的部分区域(可通过FSPIFFS_IF_FORMAT选择是否进行格式化操作),随后创建一个文件,然后释放信号量通知WriteRead任务开始执行;
- init完成,挂载文件系统完成,创建测试文件
+

-- 读写任务周期性执行,有两个读任务,一个写任务
+- 读写任务周期性执行
+

- 软件定时器触发,删除读写任务
+

## 3. 如何解决问题
diff --git a/example/storage/qspi_spiffs/configs/d2000_aarch32_eg_configs b/example/storage/qspi_spiffs/configs/d2000_aarch32_eg_configs
index 8b17a1da2a1321bcfe1daaeaa8d1fa276a8d84e8..b10fdebcb92e12dfe13ed6d26a8bc55dd15ed1e0 100644
--- a/example/storage/qspi_spiffs/configs/d2000_aarch32_eg_configs
+++ b/example/storage/qspi_spiffs/configs/d2000_aarch32_eg_configs
@@ -74,6 +74,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -118,6 +119,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -154,6 +164,7 @@ CONFIG_FREERTOS_USE_QSPI=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -175,12 +186,6 @@ CONFIG_FREERTOS_USE_QSPI=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -192,14 +197,32 @@ CONFIG_FREERTOS_USE_QSPI=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
CONFIG_USE_SFUD=y
#
@@ -236,4 +259,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/storage/qspi_spiffs/configs/d2000_aarch64_eg_configs b/example/storage/qspi_spiffs/configs/d2000_aarch64_eg_configs
index 2b35d2de14367812628246494c6e1a71ecf34757..0406ccf7da708172bd1e0b1cdc6807837f1dbdd5 100644
--- a/example/storage/qspi_spiffs/configs/d2000_aarch64_eg_configs
+++ b/example/storage/qspi_spiffs/configs/d2000_aarch64_eg_configs
@@ -74,6 +74,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -114,6 +115,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -150,6 +160,7 @@ CONFIG_FREERTOS_USE_QSPI=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -171,12 +182,6 @@ CONFIG_FREERTOS_USE_QSPI=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -188,14 +193,32 @@ CONFIG_FREERTOS_USE_QSPI=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
CONFIG_USE_SFUD=y
#
@@ -232,4 +255,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/storage/qspi_spiffs/configs/e2000d_aarch32_eg_configs b/example/storage/qspi_spiffs/configs/e2000d_aarch32_eg_configs
index 85b81d19e1ea112d60f8d46dc967d1f443766078..ba3109b778851b6efd17d0cd89be37767d5f7ae4 100644
--- a/example/storage/qspi_spiffs/configs/e2000d_aarch32_eg_configs
+++ b/example/storage/qspi_spiffs/configs/e2000d_aarch32_eg_configs
@@ -74,6 +74,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -118,6 +119,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -154,6 +164,7 @@ CONFIG_FREERTOS_USE_QSPI=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -175,12 +186,6 @@ CONFIG_FREERTOS_USE_QSPI=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -192,14 +197,32 @@ CONFIG_FREERTOS_USE_QSPI=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
CONFIG_USE_SFUD=y
#
@@ -236,4 +259,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/storage/qspi_spiffs/configs/e2000d_aarch64_eg_configs b/example/storage/qspi_spiffs/configs/e2000d_aarch64_eg_configs
index 6a2d29daf283d6bfe4605b9c19cbf9d206ed2564..d6d2f93dc18488b4c73249b8bc2fb993ff51380b 100644
--- a/example/storage/qspi_spiffs/configs/e2000d_aarch64_eg_configs
+++ b/example/storage/qspi_spiffs/configs/e2000d_aarch64_eg_configs
@@ -74,6 +74,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -114,6 +115,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -150,6 +160,7 @@ CONFIG_FREERTOS_USE_QSPI=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -171,12 +182,6 @@ CONFIG_FREERTOS_USE_QSPI=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -188,14 +193,32 @@ CONFIG_FREERTOS_USE_QSPI=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
CONFIG_USE_SFUD=y
#
@@ -232,4 +255,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/storage/qspi_spiffs/configs/e2000q_aarch32_eg_configs b/example/storage/qspi_spiffs/configs/e2000q_aarch32_eg_configs
index 015408c1051a0612794f974b25a16f4c3a48900d..f2bd11a88a7f76ebb56000cc324c6462d1cefb45 100644
--- a/example/storage/qspi_spiffs/configs/e2000q_aarch32_eg_configs
+++ b/example/storage/qspi_spiffs/configs/e2000q_aarch32_eg_configs
@@ -74,6 +74,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -118,6 +119,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -154,6 +164,7 @@ CONFIG_FREERTOS_USE_QSPI=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -175,12 +186,6 @@ CONFIG_FREERTOS_USE_QSPI=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -192,14 +197,32 @@ CONFIG_FREERTOS_USE_QSPI=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
CONFIG_USE_SFUD=y
#
@@ -236,4 +259,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
# CONFIG_USE_TLSF is not set
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/storage/qspi_spiffs/configs/e2000q_aarch64_eg_configs b/example/storage/qspi_spiffs/configs/e2000q_aarch64_eg_configs
index 4004e2e6d46119b1b9087e5a42b2d329f67049d1..3842526ff5eb197cf1949e886b891c2d25eba73f 100644
--- a/example/storage/qspi_spiffs/configs/e2000q_aarch64_eg_configs
+++ b/example/storage/qspi_spiffs/configs/e2000q_aarch64_eg_configs
@@ -74,6 +74,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -114,6 +115,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -150,6 +160,7 @@ CONFIG_FREERTOS_USE_QSPI=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -171,12 +182,6 @@ CONFIG_FREERTOS_USE_QSPI=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -188,14 +193,32 @@ CONFIG_FREERTOS_USE_QSPI=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
CONFIG_USE_SFUD=y
#
@@ -232,4 +255,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
# CONFIG_USE_TLSF is not set
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/storage/qspi_spiffs/configs/ft2004_aarch32_eg_configs b/example/storage/qspi_spiffs/configs/ft2004_aarch32_eg_configs
index a190e8e7d6e8c34ea36e8b2f1972734d0253beae..db70d187103885064bbc92a521f45673b623aa05 100644
--- a/example/storage/qspi_spiffs/configs/ft2004_aarch32_eg_configs
+++ b/example/storage/qspi_spiffs/configs/ft2004_aarch32_eg_configs
@@ -74,6 +74,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -118,6 +119,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -154,6 +164,7 @@ CONFIG_FREERTOS_USE_QSPI=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -175,12 +186,6 @@ CONFIG_FREERTOS_USE_QSPI=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -192,14 +197,32 @@ CONFIG_FREERTOS_USE_QSPI=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
CONFIG_USE_SFUD=y
#
@@ -236,4 +259,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/storage/qspi_spiffs/configs/ft2004_aarch64_eg_configs b/example/storage/qspi_spiffs/configs/ft2004_aarch64_eg_configs
index 3ab805e7e75b08aba16ea5536bedb9ec6db33856..46475ff2e39ad972c783dc3ac085a77741ce3ebe 100644
--- a/example/storage/qspi_spiffs/configs/ft2004_aarch64_eg_configs
+++ b/example/storage/qspi_spiffs/configs/ft2004_aarch64_eg_configs
@@ -74,6 +74,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -114,6 +115,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -150,6 +160,7 @@ CONFIG_FREERTOS_USE_QSPI=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -171,12 +182,6 @@ CONFIG_FREERTOS_USE_QSPI=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -188,14 +193,32 @@ CONFIG_FREERTOS_USE_QSPI=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
CONFIG_USE_SFUD=y
#
@@ -232,4 +255,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/storage/qspi_spiffs/figs/delete.png b/example/storage/qspi_spiffs/figs/delete.png
index a585b77fc45514cbdda04731aa8bd53713483bd1..b594ae6c866977f006bd52caf93cb8c075e13f52 100644
Binary files a/example/storage/qspi_spiffs/figs/delete.png and b/example/storage/qspi_spiffs/figs/delete.png differ
diff --git a/example/storage/qspi_spiffs/figs/init.png b/example/storage/qspi_spiffs/figs/init.png
index b3f12bfcc3b249059ccf61492bd78dabc2fa7770..52873ea5c6a2d4cc19620dcc47b334d2d73c931f 100644
Binary files a/example/storage/qspi_spiffs/figs/init.png and b/example/storage/qspi_spiffs/figs/init.png differ
diff --git a/example/storage/qspi_spiffs/figs/wr.png b/example/storage/qspi_spiffs/figs/wr.png
index 3e2665527e25cd45278e23939bd7a6c48f025fef..b2ff8c3a38cac020ab64bf050d945064398d6103 100644
Binary files a/example/storage/qspi_spiffs/figs/wr.png and b/example/storage/qspi_spiffs/figs/wr.png differ
diff --git a/example/storage/qspi_spiffs/inc/qspi_spiffs_example.h b/example/storage/qspi_spiffs/inc/qspi_spiffs_example.h
index b1caa8f82afb0bd73c9e2a36ccf9c817c4673e64..309a94236864033da269860db62704f4aaa1d570 100644
--- a/example/storage/qspi_spiffs/inc/qspi_spiffs_example.h
+++ b/example/storage/qspi_spiffs/inc/qspi_spiffs_example.h
@@ -1,30 +1,41 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: qspi_spiffs_example.h
* Date: 2022-06-17 10:42:40
* LastEditTime: 2022-06-17 10:42:40
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
+ * Description: This file is for the qspi_spiffs example function declarations.
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2022/8/9 first release
*/
#ifndef QSPI_SPIFFS_EXAMPLE_H
#define QSPI_SPIFFS_EXAMPLE_H
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
/* qspi spiffs read and write test */
BaseType_t FFreeRTOSQspiSpiffsCreate(u32 qspi_id);
+
+#ifdef __cplusplus
+}
+#endif
+
#endif // !
\ No newline at end of file
diff --git a/example/storage/qspi_spiffs/main.c b/example/storage/qspi_spiffs/main.c
index bcaa47350c9823f85f835d0530ea189f13232f03..e26855e907feca80004c88aca4aa55aa1066e1a6 100644
--- a/example/storage/qspi_spiffs/main.c
+++ b/example/storage/qspi_spiffs/main.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: main.c
* Date: 2022-06-17 08:17:59
* LastEditTime: 2022-06-17 08:17:59
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
+ * Description: This file is for the main functions.
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2022/8/9 first release
*/
#include "shell.h"
@@ -31,17 +32,21 @@ int main(void)
BaseType_t ret;
ret = FFreeRTOSQspiSpiffsCreate(0);
- if(ret != pdPASS)
+ if (ret != pdPASS)
+ {
goto FAIL_EXIT;
+ }
ret = LSUserShellTask() ;
- if(ret != pdPASS)
+ if (ret != pdPASS)
+ {
goto FAIL_EXIT;
+ }
- vTaskStartScheduler(); /* 启动任务,开启调度 */
+ vTaskStartScheduler(); /* 启动任务,开启调度 */
while (1); /* 正常不会执行到这里 */
-
+
FAIL_EXIT:
- printf("failed 0x%x \r\n", ret);
+ printf("Failed,the ret value is 0x%x. \r\n", ret);
return 0;
}
diff --git a/example/storage/qspi_spiffs/sdkconfig b/example/storage/qspi_spiffs/sdkconfig
index 4004e2e6d46119b1b9087e5a42b2d329f67049d1..3842526ff5eb197cf1949e886b891c2d25eba73f 100644
--- a/example/storage/qspi_spiffs/sdkconfig
+++ b/example/storage/qspi_spiffs/sdkconfig
@@ -74,6 +74,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -114,6 +115,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -150,6 +160,7 @@ CONFIG_FREERTOS_USE_QSPI=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -171,12 +182,6 @@ CONFIG_FREERTOS_USE_QSPI=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -188,14 +193,32 @@ CONFIG_FREERTOS_USE_QSPI=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
CONFIG_USE_SFUD=y
#
@@ -232,4 +255,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
# CONFIG_USE_TLSF is not set
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/storage/qspi_spiffs/sdkconfig.h b/example/storage/qspi_spiffs/sdkconfig.h
index 978530b073ece080f9d7cd9d9aea880175f1fb3a..e4710ac91da99c98885a091b4230aba3093aba3c 100644
--- a/example/storage/qspi_spiffs/sdkconfig.h
+++ b/example/storage/qspi_spiffs/sdkconfig.h
@@ -67,6 +67,7 @@
/* CONFIG_USE_ADC is not set */
/* CONFIG_USE_PWM is not set */
/* CONFIG_USE_IPC is not set */
+/* CONFIG_USE_MEDIA is not set */
/* end of Components Configuration */
#define CONFIG_USE_NEW_LIBC
/* end of Standalone Setting */
@@ -103,6 +104,12 @@
/* Compiler Options */
+/* Cross-Compiler Setting */
+
+#define CONFIG_GCC_OPTIMIZE_LEVEL 0
+/* CONFIG_USE_EXT_COMPILER is not set */
+/* CONFIG_USE_KLIN_SYS is not set */
+/* end of Cross-Compiler Setting */
#define CONFIG_OUTPUT_BINARY
/* end of Compiler Options */
/* end of Building Option */
@@ -132,6 +139,7 @@
/* Freertos Eth Drivers */
/* CONFIG_FREERTOS_USE_XMAC is not set */
+/* CONFIG_FREERTOS_USE_GMAC is not set */
/* end of Freertos Eth Drivers */
/* Freertos Gpio Drivers */
@@ -150,11 +158,6 @@
/* CONFIG_FREERTOS_USE_FGDMA is not set */
/* end of Freertos DMA Drivers */
-/* Freertos MMC Drivers */
-
-/* CONFIG_FREERTOS_USE_FSDIO is not set */
-/* end of Freertos MMC Drivers */
-
/* Freertos Adc Drivers */
/* CONFIG_FREERTOS_USE_ADC is not set */
@@ -164,13 +167,28 @@
/* CONFIG_FREERTOS_USE_CAN is not set */
/* end of Freertos Can Drivers */
+
+/* Freertos I2c Drivers */
+
+/* CONFIG_FREERTOS_USE_I2C is not set */
+/* end of Freertos I2c Drivers */
+
+/* Freertos Mio Drivers */
+
+/* CONFIG_FREERTOS_USE_MIO is not set */
+/* end of Freertos Mio Drivers */
+
+/* Freertos Timer Drivers */
+
+/* CONFIG_FREERTOS_USE_TIMER is not set */
+/* end of Freertos Timer Drivers */
/* end of Component Configuration */
-/* FreeRTOS Setting */
+/* Third-Party Configuration */
/* CONFIG_USE_LWIP is not set */
#define CONFIG_USE_BACKTRACE
-/* CONFIG_USE_FATFS is not set */
+/* CONFIG_USE_FATFS_0_1_4 is not set */
#define CONFIG_USE_SFUD
/* SFUD Configuration */
@@ -201,6 +219,28 @@
/* CONFIG_USE_TLSF is not set */
/* CONFIG_USE_SDMMC_CMD is not set */
/* CONFIG_USE_CHERRY_USB is not set */
-/* end of FreeRTOS Setting */
+/* end of Third-Party Configuration */
+
+/* Kernel Configuration */
+
+#define CONFIG_FREERTOS_OPTIMIZED_SCHEDULER
+#define CONFIG_FREERTOS_HZ 1000
+#define CONFIG_FREERTOS_MAX_PRIORITIES 32
+#define CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES 13
+#define CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES 11
+#define CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS 1
+#define CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE 1024
+#define CONFIG_FREERTOS_MAX_TASK_NAME_LEN 32
+#define CONFIG_FREERTOS_TIMER_TASK_PRIORITY 1
+#define CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH 2048
+#define CONFIG_FREERTOS_TIMER_QUEUE_LENGTH 10
+#define CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE 0
+#define CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS
+#define CONFIG_FREERTOS_USE_TRACE_FACILITY
+#define CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS
+/* CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set */
+#define CONFIG_FREERTOS_TOTAL_HEAP_SIZE 10240
+#define CONFIG_FREERTOS_TASK_FPU_SUPPORT 1
+/* end of Kernel Configuration */
#endif
diff --git a/example/storage/qspi_spiffs/src/qspi_spiffs_example.c b/example/storage/qspi_spiffs/src/qspi_spiffs_example.c
index e12242e7781f8b0f7364ab8a4b2696ab2348fce3..84d4700b521d04a3e4c6e37a70b36c2abcdd2ebe 100644
--- a/example/storage/qspi_spiffs/src/qspi_spiffs_example.c
+++ b/example/storage/qspi_spiffs/src/qspi_spiffs_example.c
@@ -1,24 +1,26 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: qspi_spiffs_example.c
* Date: 2022-07-11 11:32:48
* LastEditTime: 2022-07-11 11:32:48
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
+ * Description: This file is for the qspi_spiffs example functions.
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2022/8/9 first release
+ * 1.1 zhangyan 2023/2/9 improve functions
*/
#include
#include
@@ -38,11 +40,11 @@
#include "spiffs_port.h"
#include "sdkconfig.h"
#ifdef CONFIG_SPIFFS_ON_FSPIM_SFUD
-#include "fspim_spiffs_port.h"
+ #include "fspim_spiffs_port.h"
#endif
#ifdef CONFIG_SPIFFS_ON_FQSPI_SFUD
-#include "fqspi_spiffs_port.h"
+ #include "fqspi_spiffs_port.h"
#endif
@@ -67,20 +69,26 @@ enum
#define FSPIFFS_INFO(format, ...) FT_DEBUG_PRINT_I(FSPIFFS_DEBUG_TAG, format, ##__VA_ARGS__)
#define FSPIFFS_DEBUG(format, ...) FT_DEBUG_PRINT_D(FSPIFFS_DEBUG_TAG, format, ##__VA_ARGS__)
-/* spiffs start address and size */
-#define FSPIFFS_START_ADDR (7 * SZ_1M)
-#define FSPIFFS_USE_SIZE SZ_1M
+/* spiffs start address and size */
+#if defined(CONFIG_TARGET_E2000)
+#define FSPIFFS_START_ADDR (3 * SZ_1M)
+#elif defined(CONFIG_TARGET_F2000_4) || defined(CONFIG_TARGET_D2000)
+#define FSPIFFS_START_ADDR (7 * SZ_1M)
+#endif
+
+#define FSPIFFS_USE_SIZE SZ_1M
#define FSPIFFS_RW_BUF_SIZE 64
/* if format flash, TRUE is need format, it tasks some time */
-#define FSPIFFS_IF_FORMAT TRUE
+#define FSPIFFS_IF_FORMAT TRUE
/* 一个页大小两倍的一个RAM缓冲区, 用来加载和维护SPIFFS的逻辑页 */
static volatile u8 fspiffs_work_buf[FSPIFFS_LOG_PAGE_SIZE * 2] = {0};
static volatile u8 fspiffs_fds_buf[32 * 4] = {0};
static volatile u8 fspiffs_cache_buf[(FSPIFFS_LOG_PAGE_SIZE + 32) * 4] = {0};
-static u8 fspiffs_rw_buf[FSPIFFS_RW_BUF_SIZE] = {0};
+static u8 fspiffs_rd_buf[FSPIFFS_RW_BUF_SIZE] = {0};
+static u8 fspiffs_wr_buf[FSPIFFS_RW_BUF_SIZE] = {0};
static FSpiffs instance;
static spiffs_config config;
static boolean spiffs_inited = FALSE;
@@ -89,20 +97,21 @@ const char *file_name = "test.txt";
/************************** Constant Definitions *****************************/
/* The periods assigned to the one-shot timers. */
-#define ONE_SHOT_TIMER_PERIOD ( pdMS_TO_TICKS( 50000UL ) )
+#define ONE_SHOT_TIMER_PERIOD ( pdMS_TO_TICKS( 50000UL ) )
/* write and read task delay in milliseconds */
-#define TASK_DELAY_MS 3000UL
+#define TASK_DELAY_MS 3000UL
/* write and read task number */
-#define READ_WRITE_TASK_NUM 3
+#define READ_WRITE_TASK_NUM 1
static xSemaphoreHandle xCountingSemaphore;
-static xTaskHandle qspi_read1_handle;
-static xTaskHandle qspi_read2_handle;
-static xTaskHandle qspi_write_handle;
+static xTaskHandle qspi_rw_handle;
+
static TimerHandle_t xOneShotTimer;
+static const char *xString = "FFreeRTOSQspiSpiffsWriteReadTask is running\r\n";
+
static void FFreeRTOSQspiSpiffsDelete(void);
static int FSpiffsOpsMount(boolean do_format)
@@ -112,52 +121,52 @@ static int FSpiffsOpsMount(boolean do_format)
if (do_format)
{
result = SPIFFS_mount(&instance.fs,
- &config,
- (u8_t *)fspiffs_work_buf,
- (u8_t *)fspiffs_fds_buf,
- sizeof(fspiffs_fds_buf),
- (u8_t *)fspiffs_cache_buf,
- sizeof(fspiffs_cache_buf),
- NULL);
+ &config,
+ (u8_t *)fspiffs_work_buf,
+ (u8_t *)fspiffs_fds_buf,
+ sizeof(fspiffs_fds_buf),
+ (u8_t *)fspiffs_cache_buf,
+ sizeof(fspiffs_cache_buf),
+ NULL);
/* try mount to get status of filesystem */
if ((SPIFFS_OK != result) && (SPIFFS_ERR_NOT_A_FS != result))
{
- /* if not a valid filesystem, continue to format,
+ /* if not a valid filesystem, continue to format,
other error cannot handle, just exit */
- FSPIFFS_ERROR("mount spiffs failed: %d", result);
- return FSPIFFS_OPS_MOUNT_FAILED;
+ FSPIFFS_ERROR("Mount spiffs failed: %d", result);
+ return FSPIFFS_OPS_MOUNT_FAILED;
}
/* must be unmounted prior to formatting */
SPIFFS_unmount(&instance.fs);
- FSPIFFS_DEBUG("format spiffs in progress ...\r\n");
+ FSPIFFS_DEBUG("Spiffs formatting in progress ...");
result = SPIFFS_format(&instance.fs);
if (SPIFFS_OK != result)
{
- FSPIFFS_ERROR("format spiffs failed: %d", result);
+ FSPIFFS_ERROR("Spiffs formatting failed: %d", result);
return FSPIFFS_OPS_FORMAT_FAILED;
- }
+ }
}
/* real mount */
result = SPIFFS_mount(&instance.fs,
- &config,
- (u8_t *)fspiffs_work_buf,
- (u8_t *)fspiffs_fds_buf,
- sizeof(fspiffs_fds_buf),
- (u8_t *)fspiffs_cache_buf,
- sizeof(fspiffs_cache_buf),
- NULL);
+ &config,
+ (u8_t *)fspiffs_work_buf,
+ (u8_t *)fspiffs_fds_buf,
+ sizeof(fspiffs_fds_buf),
+ (u8_t *)fspiffs_cache_buf,
+ sizeof(fspiffs_cache_buf),
+ NULL);
if (SPIFFS_OK != result)
{
- FSPIFFS_ERROR("remount spiffs failed: %d, you may format the medium first", result);
+ FSPIFFS_ERROR("Remount spiffs failed: %d, you may format the medium first.", result);
return FSPIFFS_OPS_MOUNT_FAILED;
}
else
{
- vPrintf("mount spiffs success !!! \r\n");
+ vPrintf("Mount spiffs success. \r\n");
instance.fs_ready = TRUE;
}
@@ -171,7 +180,7 @@ static int FSpiffsOpsListAll(void)
if (FALSE == instance.fs_ready)
{
- FSPIFFS_ERROR("please mount file system first !!!");
+ FSPIFFS_ERROR("Please mount file system first.");
return FSPIFFS_OPS_NOT_YET_MOUNT;
}
@@ -186,11 +195,11 @@ static int FSpiffsOpsListAll(void)
while (NULL != (cur_entry = SPIFFS_readdir(&dir, cur_entry)))
{
- printf("-- %s file-id: [0x%04x] page-id: [%d] file-size: %d\r\n",
- cur_entry->name,
- cur_entry->pix,
- cur_entry->obj_id,
- cur_entry->size);
+ printf("-- %s file-id: [0x%04x] page-id: [%d] file-size: %d\r\n",
+ cur_entry->name,
+ cur_entry->pix,
+ cur_entry->obj_id,
+ cur_entry->size);
}
(void)SPIFFS_closedir(&dir);
@@ -202,7 +211,7 @@ int FSpiffsOpsCreateFile(const char *file_name)
FASSERT((file_name) && (strlen(file_name) > 0));
if (FALSE == instance.fs_ready)
{
- FSPIFFS_ERROR("please mount file system first !!!");
+ FSPIFFS_ERROR("Please mount file system first.");
return FSPIFFS_OPS_NOT_YET_MOUNT;
}
@@ -212,7 +221,7 @@ int FSpiffsOpsCreateFile(const char *file_name)
s32_t result = SPIFFS_creat(&instance.fs, file_name, 0);
if (result < 0)
{
- FSPIFFS_ERROR("failed to create file %s", file_name);
+ FSPIFFS_ERROR("Failed to create file %s", file_name);
return FSPIFFS_OPS_OPEN_FILE_FAILED;
}
@@ -220,7 +229,7 @@ int FSpiffsOpsCreateFile(const char *file_name)
spiffs_file fd = SPIFFS_open(&instance.fs, file_name, SPIFFS_RDONLY, 0);
if (0 > fd)
{
- FSPIFFS_ERROR("failed to open file %s errno %d", file_name, SPIFFS_errno(&instance.fs));
+ FSPIFFS_ERROR("Failed to open file %s errno %d", file_name, SPIFFS_errno(&instance.fs));
return FSPIFFS_OPS_OPEN_FILE_FAILED;
}
@@ -230,26 +239,26 @@ int FSpiffsOpsCreateFile(const char *file_name)
result = SPIFFS_fstat(&instance.fs, fd, &status);
if (result < 0)
{
- FSPIFFS_ERROR("failed to get status of file %s errno %d", file_name, SPIFFS_errno(&instance.fs));
+ FSPIFFS_ERROR("Failed to get status of file %s, errno %d", file_name, SPIFFS_errno(&instance.fs));
ret = FSPIFFS_OPS_OPEN_FILE_FAILED;
goto err_exit;
- }
+ }
if (0 != strcmp(status.name, file_name))
{
- FSPIFFS_ERROR("created file name %s != %s", status.name, file_name);
+ FSPIFFS_ERROR("Created file name %s != %s", status.name, file_name);
ret = FSPIFFS_OPS_OPEN_FILE_FAILED;
goto err_exit;
}
if (0 != status.size)
{
- FSPIFFS_ERROR("invalid file size %d", status.size);
+ FSPIFFS_ERROR("Invalid file size %d", status.size);
ret = FSPIFFS_OPS_OPEN_FILE_FAILED;
goto err_exit;
}
- vPrintf("create file %s success !!!\r\n", file_name);
+ vPrintf("File %s created successfully.\r\n", file_name);
err_exit:
(void)SPIFFS_close(&instance.fs, fd);
@@ -266,14 +275,14 @@ int FSpiffsOpsWriteFile(const char *file_name, const char *str)
spiffs_file fd = SPIFFS_open(&instance.fs, file_name, SPIFFS_RDWR | SPIFFS_TRUNC, 0);
if (0 > fd)
{
- FSPIFFS_ERROR("failed to open file %s errno %d", file_name, SPIFFS_errno(&instance.fs));
+ FSPIFFS_ERROR("Failed to open file %s, errno %d", file_name, SPIFFS_errno(&instance.fs));
return FSPIFFS_OPS_OPEN_FILE_FAILED;
}
int result = SPIFFS_write(&instance.fs, fd, (void *)str, wr_len);
if (result < 0)
{
- FSPIFFS_ERROR("failed to write file %s errno %d", file_name, SPIFFS_errno(&instance.fs));
+ FSPIFFS_ERROR("Failed to write file %s, errno %d", file_name, SPIFFS_errno(&instance.fs));
ret = FSPIFFS_OPS_WRITE_FILE_FAILED;
goto err_exit;
}
@@ -284,24 +293,24 @@ int FSpiffsOpsWriteFile(const char *file_name, const char *str)
result = SPIFFS_fstat(&instance.fs, fd, &status);
if (result < 0)
{
- FSPIFFS_ERROR("failed to get status of file %s errno %d", file_name, SPIFFS_errno(&instance.fs));
+ FSPIFFS_ERROR("Failed to get status of file %s, errno %d", file_name, SPIFFS_errno(&instance.fs));
ret = FSPIFFS_OPS_WRITE_FILE_FAILED;
goto err_exit;
}
if (status.size != wr_len)
{
- FSPIFFS_ERROR("file write size %ld != %ld", status.size, wr_len);
+ FSPIFFS_ERROR("File write size %ld != %ld", status.size, wr_len);
ret = FSPIFFS_OPS_WRITE_FILE_FAILED;
goto err_exit;
}
/* flush all pending writes from cache to flash */
(void)SPIFFS_fflush(&instance.fs, fd);
- vPrintf("write file %s with %d bytes success !!!\r\n", file_name, wr_len);
+ vPrintf("Write file %s with %d bytes successfully.\r\n", file_name, wr_len);
err_exit:
(void)SPIFFS_close(&instance.fs, fd);
- return ret;
+ return ret;
}
int FSpiffsOpsReadFile(const char *file_name)
@@ -312,7 +321,7 @@ int FSpiffsOpsReadFile(const char *file_name)
if (FALSE == instance.fs_ready)
{
- FSPIFFS_ERROR("please mount file system first !!!");
+ FSPIFFS_ERROR("Please mount file system first.");
return FSPIFFS_OPS_NOT_YET_MOUNT;
}
@@ -326,7 +335,7 @@ int FSpiffsOpsReadFile(const char *file_name)
spiffs_file fd = SPIFFS_open(&instance.fs, file_name, open_flags, 0);
if (0 > fd)
{
- FSPIFFS_ERROR("failed to open file %s errno %d", file_name, SPIFFS_errno(&instance.fs));
+ FSPIFFS_ERROR("Failed to open file %s, errno %d", file_name, SPIFFS_errno(&instance.fs));
return FSPIFFS_OPS_OPEN_FILE_FAILED;
}
@@ -335,7 +344,7 @@ int FSpiffsOpsReadFile(const char *file_name)
result = SPIFFS_fstat(&instance.fs, fd, &status);
if (result < 0)
{
- FSPIFFS_ERROR("failed to get status of file %s errno %d", file_name, SPIFFS_errno(&instance.fs));
+ FSPIFFS_ERROR("Failed to get status of file %s, errno %d", file_name, SPIFFS_errno(&instance.fs));
ret = FSPIFFS_OPS_OPEN_FILE_FAILED;
goto err_exit;
}
@@ -343,35 +352,34 @@ int FSpiffsOpsReadFile(const char *file_name)
s32_t offset = SPIFFS_lseek(&instance.fs, fd, 0, SPIFFS_SEEK_END);
if ((s32_t)status.size != offset)
{
- FSPIFFS_ERROR("file %s spiffs:%ld! = fs:%ld", file_name, status.size, offset);
+ FSPIFFS_ERROR("File %s spiffs:%ld != fs:%ld", file_name, status.size, offset);
ret = FSPIFFS_OPS_OPEN_FILE_FAILED;
goto err_exit;
}
- memset(fspiffs_rw_buf, 0 , FSPIFFS_RW_BUF_SIZE);
+ memset(fspiffs_rd_buf, 0, FSPIFFS_RW_BUF_SIZE);
/* seek to offset and start read */
if (0 > SPIFFS_lseek(&instance.fs, fd, 0, SPIFFS_SEEK_SET))
{
- FSPIFFS_ERROR("seek file failed !!!");
+ FSPIFFS_ERROR("Seek file failed.");
ret = FSPIFFS_OPS_READ_FILE_FAILED;
goto err_exit;
}
- /*vPrintf("read %s from position %ld\n", file_name, SPIFFS_tell(&instance.fs, fd));*/
s32_t read_len = min((s32_t)FSPIFFS_RW_BUF_SIZE, (s32_t)status.size);
- s32_t read_bytes = SPIFFS_read(&instance.fs, fd, (void *)fspiffs_rw_buf, read_len);
+ s32_t read_bytes = SPIFFS_read(&instance.fs, fd, (void *)fspiffs_rd_buf, read_len);
if (read_bytes < 0)
{
- FSPIFFS_ERROR("failed to read file %s errno %d", file_name, SPIFFS_errno(&instance.fs));
+ FSPIFFS_ERROR("Failed to read file %s, errno %d", file_name, SPIFFS_errno(&instance.fs));
ret = FSPIFFS_OPS_READ_FILE_FAILED;
goto err_exit;
}
- vPrintf("read %s success, str = %s\n\n", file_name, fspiffs_rw_buf);
+ vPrintf("Read %s success, str = %s\n", file_name, fspiffs_rd_buf);
-err_exit :
+err_exit :
/* close file */
(void)SPIFFS_close(&instance.fs, fd);
@@ -381,17 +389,17 @@ err_exit :
static void FFreeRTOSQspiSpiffsInitTask(void *pvParameters)
{
- int result = 0;
+ int result = 0;
if (TRUE == spiffs_inited)
{
- FSPIFFS_WARN("spiffs is already initialized");
+ FSPIFFS_WARN("Spiffs is already initialized.");
return;
}
- /* The qspi_id to use is passed in via the parameter.
- Cast this to a qspi_id pointer. */
- u32 qspi_id = (u32)(uintptr)pvParameters;
+ /* The qspi_id to use is passed in via the parameter.
+ Cast this to a qspi_id pointer. */
+ u32 qspi_id = (u32)(uintptr)pvParameters;
printf("qspi_id: %d\n", qspi_id);
#if defined(CONFIG_TARGET_E2000)
@@ -411,7 +419,7 @@ static void FFreeRTOSQspiSpiffsInitTask(void *pvParameters)
result = FSpiffsInitialize(&instance, FSPIFFS_PORT_TO_FQSPI);
if (FSPIFFS_PORT_OK != result)
{
- FSPIFFS_ERROR("initialize spiffs failed");
+ FSPIFFS_ERROR("Initialize spiffs failed.");
return;
}
@@ -420,209 +428,163 @@ static void FFreeRTOSQspiSpiffsInitTask(void *pvParameters)
FSpiffsOpsCreateFile(file_name);
spiffs_inited = TRUE;
-
+
FSpiffsOpsListAll();
- FSPIFFS_INFO("spiffs init success !!!\r\n");
+ FSPIFFS_INFO("Spiffs init successfully.");
for (int i = 0; i < READ_WRITE_TASK_NUM; i++)
{
xSemaphoreGive(xCountingSemaphore);
}
-
- vTaskDelete(NULL);
-
-}
+ vTaskDelete(NULL);
-static void FFreeRTOSQspiSpiffsReadTask(void *pvParameters)
-{
- const char *pcTaskName = (char *) pvParameters;
- const TickType_t xDelay = pdMS_TO_TICKS(TASK_DELAY_MS);
- FError ret = FT_SUCCESS;
-
- xSemaphoreTake(xCountingSemaphore, portMAX_DELAY);
-
- /* As per most tasks, this task is implemented in an infinite loop. */
- for( ;; )
- {
- /* Print out the name of this task. */
- vPrintf( pcTaskName );
-
- FSpiffsOpsReadFile(file_name);
-
- /* Delay for a period. This time a call to vTaskDelay() is used which
- places the task into the Blocked state until the delay period has
- expired. The parameter takes a time specified in 'ticks', and the
- pdMS_TO_TICKS() macro is used (where the xDelay constant is
- declared) to convert TASK_DELAY_MS milliseconds into an equivalent time in
- ticks. */
- vTaskDelay(xDelay);
- }
}
-
-static void FFreeRTOSQspiSpiffsWriteTask(void *pvParameters)
+static void FFreeRTOSQspiSpiffsWriteReadTask(void *pvParameters)
{
- const char *pcTaskName = "FFreeRTOSQspiSpiffsWriteTask is running\r\n";
- const TickType_t xDelay = pdMS_TO_TICKS(TASK_DELAY_MS);
- FError ret = FT_SUCCESS;
- char *string = "spiffs qspi write";
- static char string_out[FSPIFFS_RW_BUF_SIZE] = {0};
+ const char *pcTaskName = (char *) pvParameters;
+ const TickType_t xDelay = pdMS_TO_TICKS(TASK_DELAY_MS);
+ FError ret = FT_SUCCESS;
+ char *string = "spiffs qspi write times";
+ static int i = 0;
+ memset(fspiffs_wr_buf, 0, FSPIFFS_RW_BUF_SIZE);
- static int i = 0;
-
xSemaphoreTake(xCountingSemaphore, portMAX_DELAY);
-
/* As per most tasks, this task is implemented in an infinite loop. */
for (;;)
{
- /* Print out the name of this task. */
- vPrintf( pcTaskName );
- i++;
- sprintf(string_out, "%s-%d", string, i);
- vPrintf( "write to %s, str = %s\n", file_name, string_out);
- FSpiffsOpsWriteFile(file_name, string_out);
-
- /* Delay for a period. This time a call to vTaskDelay() is used which
- places the task into the Blocked state until the delay period has
- expired. The parameter takes a time specified in 'ticks', and the
- pdMS_TO_TICKS() macro is used (where the xDelay constant is
- declared) to convert TASK_DELAY_MS milliseconds into an equivalent time in
- ticks. */
- vTaskDelay(xDelay);
- }
+ /* Print out the name of this task. */
+ vPrintf(pcTaskName);
+ i++;
+ sprintf(fspiffs_wr_buf, "%s-%d", string, i);
+ vPrintf("Write to %s, str = %s\n", file_name, fspiffs_wr_buf);
+
+ FSpiffsOpsWriteFile(file_name, fspiffs_wr_buf);
+ FSpiffsOpsReadFile(file_name);
+
+ if (0 != strcmp(fspiffs_wr_buf, fspiffs_rd_buf))
+ {
+ FSPIFFS_ERROR("Read and write data are not equal!!!!\nwrite data:%s ,read data:%s\n", fspiffs_wr_buf, fspiffs_rd_buf);
+ vTaskDelete(NULL);
+ }
+ else
+ {
+ printf("Successfully, read and write data are equal.\n\n");
+ }
+ /* Delay for a period. This time a call to vTaskDelay() is used which
+ places the task into the Blocked state until the delay period has
+ expired. The parameter takes a time specified in 'ticks', and the
+ pdMS_TO_TICKS() macro is used (where the xDelay constant is
+ declared) to convert TASK_DELAY_MS milliseconds into an equivalent time in
+ ticks. */
+ vTaskDelay(xDelay);
+ }
}
-static void prvOneShotTimerCallback( TimerHandle_t xTimer )
+static void prvOneShotTimerCallback(TimerHandle_t xTimer)
{
- /* Output a string to show the time at which the callback was executed. */
- vPrintf( "One-shot timer callback executing, delete QspiSpiffs ReadTask and WriteTask.\r\n" );
+ /* Output a string to show the time at which the callback was executed. */
+ vPrintf("One-shot timer callback executing, delete QspiSpiffs ReadTask and WriteTask.\r\n");
- FFreeRTOSQspiSpiffsDelete();
+ FFreeRTOSQspiSpiffsDelete();
}
BaseType_t FFreeRTOSQspiSpiffsCreate(u32 qspi_id)
{
BaseType_t xReturn = pdPASS;/* 定义一个创建信息返回值,默认为 pdPASS */
- BaseType_t xTimerStarted = pdPASS;
-
+ BaseType_t xTimerStarted = pdPASS;
+
xCountingSemaphore = xSemaphoreCreateCounting(READ_WRITE_TASK_NUM, 0);
if (xCountingSemaphore == NULL)
- {
- printf("FFreeRTOSQspiSpiffsCreate xCountingSemaphore create failed.\r\n" );
+ {
+ printf("FFreeRTOSQspiSpiffsCreate xCountingSemaphore create failed.\r\n");
return pdFAIL;
}
- char *xString1 = "FFreeRTOSQspiSpiffsReadTask1 is running\r\n";
- char *xString2 = "FFreeRTOSQspiSpiffsReadTask2 is running\r\n";
+
taskENTER_CRITICAL(); /*进入临界区*/
-
- xReturn = xTaskCreate((TaskFunction_t )FFreeRTOSQspiSpiffsInitTask, /* 任务入口函数 */
- (const char* )"FFreeRTOSQspiSpiffsInitTask",/* 任务名字 */
- (uint16_t )4096, /* 任务栈大小 */
- (void* )(uintptr)qspi_id,/* 任务入口函数参数 */
- (UBaseType_t )1, /* 任务的优先级 */
- NULL); /* 任务控制 */
-
- xReturn = xTaskCreate((TaskFunction_t )FFreeRTOSQspiSpiffsReadTask, /* 任务入口函数 */
- (const char* )"FFreeRTOSQspiSpiffsReadTask",/* 任务名字 */
- (uint16_t )4096, /* 任务栈大小 */
- (void* )xString1,/* 任务入口函数参数 */
- (UBaseType_t )configMAX_PRIORITIES-1, /* 任务的优先级 */
- (TaskHandle_t* )&qspi_read1_handle); /* 任务控制 */
-
- xReturn = xTaskCreate((TaskFunction_t )FFreeRTOSQspiSpiffsReadTask, /* 任务入口函数 */
- (const char* )"FFreeRTOSQspiSpiffsReadTask",/* 任务名字 */
- (uint16_t )4096, /* 任务栈大小 */
- (void* )xString2,/* 任务入口函数参数 */
- (UBaseType_t )configMAX_PRIORITIES-1, /* 任务的优先级 */
- (TaskHandle_t* )&qspi_read2_handle); /* 任务控制 */
-
- xReturn = xTaskCreate((TaskFunction_t )FFreeRTOSQspiSpiffsWriteTask, /* 任务入口函数 */
- (const char* )"FFreeRTOSQspiSpiffsWriteTask",/* 任务名字 */
- (uint16_t )4096, /* 任务栈大小 */
- (void* )NULL,/* 任务入口函数参数 */
- (UBaseType_t )configMAX_PRIORITIES-1, /* 任务的优先级 */
- (TaskHandle_t* )&qspi_write_handle); /* 任务控制 */
-
- /* Create the one shot software timer, storing the handle to the created
- software timer in xOneShotTimer. */
- xOneShotTimer = xTimerCreate( "OneShot Software Timer", /* Text name for the software timer - not used by FreeRTOS. */
- ONE_SHOT_TIMER_PERIOD, /* The software timer's period in ticks. */
- pdFALSE, /* Setting uxAutoRealod to pdFALSE creates a one-shot software timer. */
- 0, /* This example does not use the timer id. */
- prvOneShotTimerCallback ); /* The callback function to be used by the software timer being created. */
-
- /* Check the timers were created. */
- if( xOneShotTimer != NULL )
- {
- /* Start the software timers, using a block time of 0 (no block time).
- The scheduler has not been started yet so any block time specified here
- would be ignored anyway. */
- xTimerStarted = xTimerStart( xOneShotTimer, 0 );
-
- /* The implementation of xTimerStart() uses the timer command queue, and
- xTimerStart() will fail if the timer command queue gets full. The timer
- service task does not get created until the scheduler is started, so all
- commands sent to the command queue will stay in the queue until after
- the scheduler has been started. Check both calls to xTimerStart()
- passed. */
- if( xTimerStarted != pdPASS)
- {
- vPrintf("CreateSoftwareTimerTasks xTimerStart failed \r\n");
- }
- }
- else
- {
- vPrintf("CreateSoftwareTimerTasks xTimerCreate failed \r\n");
- }
-
- taskEXIT_CRITICAL();
-
+
+ xReturn = xTaskCreate((TaskFunction_t)FFreeRTOSQspiSpiffsInitTask, /* 任务入口函数 */
+ (const char *)"FFreeRTOSQspiSpiffsInitTask",/* 任务名字 */
+ (uint16_t)4096, /* 任务栈大小 */
+ (void *)(uintptr)qspi_id,/* 任务入口函数参数 */
+ (UBaseType_t)1, /* 任务的优先级 */
+ NULL); /* 任务控制 */
+
+ xReturn = xTaskCreate((TaskFunction_t)FFreeRTOSQspiSpiffsWriteReadTask, /* 任务入口函数 */
+ (const char *)"FFreeRTOSQspiSpiffsWriteReadTask",/* 任务名字 */
+ (uint16_t)4096, /* 任务栈大小 */
+ (void *)xString,/* 任务入口函数参数 */
+ (UBaseType_t)configMAX_PRIORITIES - 1, /* 任务的优先级 */
+ (TaskHandle_t *)&qspi_rw_handle); /* 任务控制 */
+
+ /* Create the one shot software timer, storing the handle to the created
+ software timer in xOneShotTimer. */
+ xOneShotTimer = xTimerCreate("OneShot Software Timer", /* Text name for the software timer - not used by FreeRTOS. */
+ ONE_SHOT_TIMER_PERIOD, /* The software timer's period in ticks. */
+ pdFALSE, /* Setting uxAutoRealod to pdFALSE creates a one-shot software timer. */
+ 0, /* This example does not use the timer id. */
+ prvOneShotTimerCallback); /* The callback function to be used by the software timer being created. */
+
+ /* Check the timers were created. */
+ if (xOneShotTimer != NULL)
+ {
+ /* Start the software timers, using a block time of 0 (no block time).
+ The scheduler has not been started yet so any block time specified here
+ would be ignored anyway. */
+ xTimerStarted = xTimerStart(xOneShotTimer, 0);
+
+ /* The implementation of xTimerStart() uses the timer command queue, and
+ xTimerStart() will fail if the timer command queue gets full. The timer
+ service task does not get created until the scheduler is started, so all
+ commands sent to the command queue will stay in the queue until after
+ the scheduler has been started. Check both calls to xTimerStart()
+ passed. */
+ if (xTimerStarted != pdPASS)
+ {
+ vPrintf("CreateSoftwareTimerTasks xTimerStart failed. \r\n");
+ }
+ }
+ else
+ {
+ vPrintf("CreateSoftwareTimerTasks xTimerCreate failed. \r\n");
+ }
+
+ taskEXIT_CRITICAL();
+
return xReturn;
}
static void FFreeRTOSQspiSpiffsDelete(void)
{
- BaseType_t xReturn = pdPASS;
+ BaseType_t xReturn = pdPASS;
FSpiffsDeInitialize(&instance);
-
- if(qspi_read1_handle)
+
+ if (qspi_rw_handle)
{
- vTaskDelete(qspi_read1_handle);
- vPrintf("Delete FFreeRTOSQspiSpiffsReadTask1 success\r\n");
+ vTaskDelete(qspi_rw_handle);
+ vPrintf("Delete FFreeRTOSQspiSpiffsWriteReadTask successfully.\r\n");
}
- if(qspi_read2_handle)
+ /* delete count sem */
+ vSemaphoreDelete(xCountingSemaphore);
+
+ /* delete timer */
+ xReturn = xTimerDelete(xOneShotTimer, 0);
+ if (xReturn != pdPASS)
{
- vTaskDelete(qspi_read2_handle);
- vPrintf("Delete FFreeRTOSQspiSpiffsReadTask2 success\r\n");
+ vPrintf("OneShot Software Timer Delete failed.\r\n");
}
-
- if(qspi_write_handle)
+ else
{
- vTaskDelete(qspi_write_handle);
- vPrintf("Delete FFreeRTOSQspiSpiffsWriteTask success\r\n");
+ vPrintf("OneShot Software Timer Delete successfully.\r\n");
}
-
- /* delete count sem */
- vSemaphoreDelete(xCountingSemaphore);
-
- /* delete timer */
- xReturn = xTimerDelete(xOneShotTimer, 0);
- if(xReturn != pdPASS)
- {
- vPrintf("OneShot Software Timer Delete failed.\r\n");
- }
- else
- {
- vPrintf("OneShot Software Timer Delete success.\r\n");
- }
-
+
}
diff --git a/example/storage/sata_fatfs/configs/ft2004_aarch64_eg_configs b/example/storage/sata_fatfs/configs/ft2004_aarch64_eg_configs
deleted file mode 100644
index 3868441ac8e84089cb1267aa7e154178398dc083..0000000000000000000000000000000000000000
--- a/example/storage/sata_fatfs/configs/ft2004_aarch64_eg_configs
+++ /dev/null
@@ -1,233 +0,0 @@
-
-#
-# Freertos Configuration
-#
-CONFIG_TARGET_NAME="ft2004_freertos_a64"
-# end of Freertos Configuration
-
-#
-# Standalone Setting
-#
-CONFIG_USE_FREERTOS=y
-
-#
-# Arch Configuration
-#
-# CONFIG_TARGET_ARMV8_AARCH32 is not set
-CONFIG_TARGET_ARMV8_AARCH64=y
-CONFIG_USE_CACHE=y
-CONFIG_USE_L3CACHE=y
-CONFIG_USE_MMU=y
-CONFIG_USE_SYS_TICK=y
-# CONFIG_MMU_DEBUG_PRINTS is not set
-# end of Arch Configuration
-
-#
-# Board Configuration
-#
-CONFIG_TARGET_F2000_4=y
-# CONFIG_TARGET_D2000 is not set
-# CONFIG_TARGET_E2000Q is not set
-# CONFIG_TARGET_E2000D is not set
-# CONFIG_TARGET_E2000S is not set
-CONFIG_DEFAULT_DEBUG_PRINT_UART1=y
-# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set
-# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set
-# end of Board Configuration
-
-#
-# Components Configuration
-#
-# CONFIG_USE_SPI is not set
-# CONFIG_USE_QSPI is not set
-CONFIG_USE_GIC=y
-CONFIG_ENABLE_GICV3=y
-CONFIG_USE_SERIAL=y
-
-#
-# Usart Configuration
-#
-CONFIG_ENABLE_Pl011_UART=y
-# end of Usart Configuration
-
-# CONFIG_USE_GPIO is not set
-# CONFIG_USE_ETH is not set
-# CONFIG_USE_CAN is not set
-# CONFIG_USE_I2C is not set
-# CONFIG_USE_TIMER is not set
-# CONFIG_USE_MIO is not set
-# CONFIG_USE_SDMMC is not set
-CONFIG_USE_PCIE=y
-
-#
-# Pcie Configuration
-#
-CONFIG_ENABLE_F_PCIE=y
-# end of Pcie Configuration
-
-# CONFIG_USE_WDT is not set
-# CONFIG_USE_DMA is not set
-# CONFIG_USE_NAND is not set
-# CONFIG_USE_RTC is not set
-CONFIG_USE_SATA=y
-
-#
-# FSATA Configuration
-#
-CONFIG_ENABLE_FSATA=y
-# end of FSATA Configuration
-
-# CONFIG_USE_USB is not set
-# CONFIG_USE_ADC is not set
-# CONFIG_USE_PWM is not set
-# CONFIG_USE_IPC is not set
-# end of Components Configuration
-
-CONFIG_USE_NEW_LIBC=y
-# end of Standalone Setting
-
-#
-# Building Option
-#
-# CONFIG_LOG_VERBOS is not set
-# CONFIG_LOG_DEBUG is not set
-CONFIG_LOG_INFO=y
-# CONFIG_LOG_WARN is not set
-# CONFIG_LOG_ERROR is not set
-# CONFIG_LOG_NONE is not set
-CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y
-CONFIG_INTERRUPT_ROLE_MASTER=y
-# CONFIG_INTERRUPT_ROLE_SLAVE is not set
-# CONFIG_LOG_EXTRA_INFO is not set
-# CONFIG_BOOTUP_DEBUG_PRINTS is not set
-
-#
-# Linker Options
-#
-# CONFIG_AARCH32_RAM_LD is not set
-CONFIG_AARCH64_RAM_LD=y
-# CONFIG_USER_DEFINED_LD is not set
-CONFIG_LINK_SCRIPT_ROM=y
-CONFIG_ROM_START_UP_ADDR=0x80100000
-CONFIG_ROM_SIZE_MB=1
-CONFIG_LINK_SCRIPT_RAM=y
-CONFIG_RAM_START_UP_ADDR=0x81000000
-CONFIG_RAM_SIZE_MB=64
-CONFIG_HEAP_SIZE=1
-CONFIG_STACK_SIZE=0x100000
-CONFIG_FPU_STACK_SIZE=0x1000
-# end of Linker Options
-
-#
-# Compiler Options
-#
-CONFIG_OUTPUT_BINARY=y
-# end of Compiler Options
-# end of Building Option
-
-#
-# Component Configuration
-#
-
-#
-# Freertos Uart Drivers
-#
-CONFIG_FREERTOS_USE_UART=y
-# end of Freertos Uart Drivers
-
-#
-# Freertos Pwm Drivers
-#
-# CONFIG_FREERTOS_USE_PWM is not set
-# end of Freertos Pwm Drivers
-
-#
-# Freertos Qspi Drivers
-#
-# CONFIG_FREERTOS_USE_QSPI is not set
-# end of Freertos Qspi Drivers
-
-#
-# Freertos Wdt Drivers
-#
-# CONFIG_FREERTOS_USE_WDT is not set
-# end of Freertos Wdt Drivers
-
-#
-# Freertos Eth Drivers
-#
-# CONFIG_FREERTOS_USE_XMAC is not set
-# end of Freertos Eth Drivers
-
-#
-# Freertos Gpio Drivers
-#
-# CONFIG_FREERTOS_USE_GPIO is not set
-# end of Freertos Gpio Drivers
-
-#
-# Freertos Spim Drivers
-#
-# CONFIG_FREERTOS_USE_FSPIM is not set
-# end of Freertos Spim Drivers
-
-#
-# Freertos DMA Drivers
-#
-# CONFIG_FREERTOS_USE_FDDMA is not set
-# CONFIG_FREERTOS_USE_FGDMA is not set
-# end of Freertos DMA Drivers
-
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
-#
-# Freertos Adc Drivers
-#
-# CONFIG_FREERTOS_USE_ADC is not set
-# end of Freertos Adc Drivers
-
-#
-# Freertos Can Drivers
-#
-# CONFIG_FREERTOS_USE_CAN is not set
-# end of Freertos Can Drivers
-# end of Component Configuration
-
-#
-# FreeRTOS Setting
-#
-# CONFIG_USE_LWIP is not set
-CONFIG_USE_BACKTRACE=y
-CONFIG_USE_FATFS=y
-
-#
-# FATFS Configuration
-#
-# CONFIG_SELECT_FATFS_RAM_DISK is not set
-# CONFIG_SELECT_FATFS_FSDMMC is not set
-CONFIG_SELECT_FATFS_FSATA_PCIE=y
-# CONFIG_SELECT_FATFS_USB is not set
-# end of FATFS Configuration
-
-# CONFIG_USE_SFUD is not set
-# CONFIG_USE_SPIFFS is not set
-# CONFIG_USE_AMP is not set
-CONFIG_USE_LETTER_SHELL=y
-
-#
-# Letter Shell Configuration
-#
-CONFIG_LS_PL011_UART=y
-CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
-# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set
-# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set
-# end of Letter Shell Configuration
-
-CONFIG_USE_TLSF=y
-# CONFIG_USE_SDMMC_CMD is not set
-# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
diff --git a/example/storage/sata_fatfs/figs/delete.png b/example/storage/sata_fatfs/figs/delete.png
deleted file mode 100644
index 4c5fbb6407cadb3bdc9b0537dba4860944667f7e..0000000000000000000000000000000000000000
Binary files a/example/storage/sata_fatfs/figs/delete.png and /dev/null differ
diff --git a/example/storage/sata_fatfs/figs/hardware.png b/example/storage/sata_fatfs/figs/hardware.png
deleted file mode 100644
index cdea6452d22db6b1273d70a7ed4f95882d69f250..0000000000000000000000000000000000000000
Binary files a/example/storage/sata_fatfs/figs/hardware.png and /dev/null differ
diff --git a/example/storage/sata_fatfs/figs/init.png b/example/storage/sata_fatfs/figs/init.png
deleted file mode 100644
index 59afd7bf10df65c6dc26f568b7c54e0ffe099556..0000000000000000000000000000000000000000
Binary files a/example/storage/sata_fatfs/figs/init.png and /dev/null differ
diff --git a/example/storage/sata_fatfs/figs/menuconfig.png b/example/storage/sata_fatfs/figs/menuconfig.png
deleted file mode 100644
index be837a354997dd96023fd925b79c1cd40e405bab..0000000000000000000000000000000000000000
Binary files a/example/storage/sata_fatfs/figs/menuconfig.png and /dev/null differ
diff --git a/example/storage/sata_fatfs/figs/wr.png b/example/storage/sata_fatfs/figs/wr.png
deleted file mode 100644
index 22f247968d7aeda26a56c9a7dcdb16944b116578..0000000000000000000000000000000000000000
Binary files a/example/storage/sata_fatfs/figs/wr.png and /dev/null differ
diff --git a/example/storage/sata_fatfs/src/sata_fatfs_example.c b/example/storage/sata_fatfs/src/sata_fatfs_example.c
deleted file mode 100644
index a76aa5ae500947e5d87eeb6c3bbd0a16d7f0dd65..0000000000000000000000000000000000000000
--- a/example/storage/sata_fatfs/src/sata_fatfs_example.c
+++ /dev/null
@@ -1,484 +0,0 @@
-/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
- * All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
- * FilePath: qspi_example.c
- * Date: 2022-07-11 11:32:48
- * LastEditTime: 2022-07-11 11:32:48
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
- */
-#include
-#include
-#include
-#include "FreeRTOSConfig.h"
-#include "FreeRTOS.h"
-#include "task.h"
-#include "fpinctrl.h"
-#include "fsata.h"
-#include "fsata_hw.h"
-#include "timers.h"
-#include "sata_fatfs_example.h"
-#include "strto.h"
-#include "fassert.h"
-#include "fdebug.h"
-#include "fparameters.h"
-
-/* file system */
-#include "ff.h"
-
-#define FSATA_DEBUG_TAG "FATFS-SATA"
-#define FSATA_ERROR(format, ...) FT_DEBUG_PRINT_E(FSATA_DEBUG_TAG, format, ##__VA_ARGS__)
-#define FSATA_WARN(format, ...) FT_DEBUG_PRINT_W(FSATA_DEBUG_TAG, format, ##__VA_ARGS__)
-#define FSATA_INFO(format, ...) FT_DEBUG_PRINT_I(FSATA_DEBUG_TAG, format, ##__VA_ARGS__)
-#define FSATA_DEBUG(format, ...) FT_DEBUG_PRINT_D(FSATA_DEBUG_TAG, format, ##__VA_ARGS__)
-
-/* The periods assigned to the one-shot timers. */
-#define ONE_SHOT_TIMER_PERIOD ( pdMS_TO_TICKS( 500000UL ) )
-
-/* write and read task delay in milliseconds */
-#define TASK_DELAY_MS 3000UL
-
-static xTaskHandle read_handle;
-static xTaskHandle write_handle;
-static TimerHandle_t xOneShotTimer;
-
-static void FFreeRTOSSataFatfsDelete(void);
-
-static xSemaphoreHandle xCountingSemaphore;
-
-#define FSATA_FATFS_FILE_SIZE 128
-
-#define FSATA_READ_LEN 32
-
-static FATFS fatfs;
-static boolean fatfs_ok = FALSE;
-static BYTE work[FF_MAX_SS] __attribute__((aligned(32))) = {0};
-static BYTE buff[FSATA_FATFS_FILE_SIZE] __attribute__((aligned(32))) = {0};
-static char mount_path[256] = "";
-const char *file_name = "test.txt";
-
-int FatfsSataFormat(const char *mount_point)
-{
- FRESULT res;
-
- printf("no file system, formatting ...\r\n");
-
- res = f_mkfs(mount_point, FM_EXFAT, 0, work, sizeof(work));
- if (res == FR_OK)
- {
- printf("format ok\r\n");
- res = f_mount(NULL, mount_point, 1);
- res = f_mount(&fatfs, mount_point, 1);
- if (FR_OK != res)
- {
- FSATA_ERROR("mount failed %d", res);
- }
- }
- else
- {
- FSATA_ERROR("format fail %d", res);
- return -1;
- }
-
- return 0;
-}
-
-FRESULT FatfsSataListFile(char *path)
-{
- FRESULT res;
- DIR dir;
- UINT i;
- static FILINFO fno;
- res = f_opendir(&dir,path); /* open dir */
-
- if(res == FR_OK)
- {
- for(;;) /* traversal dir */
- {
- res = f_readdir(&dir, &fno); /* read dir */
- if(res != FR_OK || fno.fname[0] == 0)
- break;
- if(fno.fattrib & AM_DIR) /* if it is dir */
- {
- i = strlen(path); /* get length of dir */
- sprintf(&path[i],"/%s",fno.fname); /* append dir */
- printf("is dir::%s\r\n",path);
- res = FatfsSataListFile(path);
- if(res != FR_OK) break;
- path[i] = 0;
- }
- else
- {
- printf("is file:%s/%s\r\n",path,fno.fname); /* if it is file */
- }
- }
- }
- else
- {
- printf("failed - %s\r\n",&res);
- }
-
- f_closedir(&dir);
- return res;
-}
-
-static int FatfsSataSetup(const char *mount_point)
-{
- FASSERT(mount_point);
- FRESULT res;
- UINT fnum;
- FIL file_handler;
-
- if (TRUE == fatfs_ok)
- {
- FSATA_WARN("fatfs initialization already done !!!");
- return 0;
- }
-
- fatfs.pdrv = DEV_MMC;
-
- res = f_mount(&fatfs, mount_point, 1);
- printf("mount fatfs at %s, ret = %d\r\n", mount_point, res);
- if (res == FR_NO_FILESYSTEM)
- {
- if (0 != FatfsSataFormat(mount_point))
- {
- return -1;
- }
- else
- {
- res = FR_OK;
- }
- }
- else if (res != FR_OK)
- {
- FSATA_ERROR("file system mount fail %d", res);
- return -2;
- }
- else
- {
- printf("file system mount ok\r\n");
- }
-
- if (FR_OK == res)
- {
- fatfs_ok = TRUE;
- (void)FatfsSataListFile(mount_path);
- }
-
- return 0;
-}
-
-int FatfsSataWriteFile(const char *file_name, const char *input_str, boolean create, size_t off)
-{
- FASSERT(file_name);
- FRESULT res;
- UINT fnum;
- FIL file_handler;
- BYTE temp;
- int ret = 0;
-
- if (FALSE == fatfs_ok)
- {
- printf("please setup fatfs first !!!\n");
- return -1;
- }
-
- if (create)
- res = f_open(&file_handler, file_name, FA_CREATE_ALWAYS | FA_WRITE | FA_READ);
- else
- res = f_open(&file_handler, file_name, FA_WRITE | FA_READ);
-
- if (res == FR_OK)
- {
- f_lseek(&file_handler, off);
-
- if (NULL == input_str)
- {
- memset(buff, 0x0, sizeof(buff));
- res = f_write(&file_handler, buff, sizeof(buff), &fnum);
- }
- else
- {
- res = f_write(&file_handler, input_str, strlen(input_str) + 1, &fnum);
- }
-
- if (res != FR_OK)
- {
- printf("write %s fail\n", file_name);
- ret = -3;
- goto err_handle;
- }
- }
- else
- {
- printf("f_open %s fail %d\n", file_name, res);
- return -4; /* no file handler, directly return */
- }
-
-err_handle:
- getchar();
- res = f_close(&file_handler);
- if (FR_OK != res)
- {
- printf("close file %s failed !!!\n", file_name);
- ret = -6;
- }
-
- return ret;
-}
-
-int FatfsSataReadFile(const char *file_name, size_t len)
-{
- FASSERT(file_name);
- FRESULT res;
- UINT fnum;
- FIL file_handler;
-
- if (FALSE == fatfs_ok)
- {
- printf("please setup fatfs first !!!\n");
- return -1;
- }
-
- if (len > sizeof(buff))
- {
- printf("length %d is not support\n", len);
- return -2;
- }
-
- res = f_open(&file_handler, file_name, FA_READ);
- if (res != FR_OK)
- {
- printf("open file %s failed !!!\n", file_name);
- return -3;
- }
-
- res = f_lseek(&file_handler, 0);
- if (res != FR_OK)
- {
- printf("seek to file begin failed !!!\n");
- return -4;
- }
-
- memset(buff, 0, sizeof(buff));
- res = f_read(&file_handler, buff, len, &fnum);
- if (res != FR_OK)
- {
- printf("read file %s failed !!!\n", file_name);
- return -5;
- }
- else
- {
- printf("read %s success, str = %s\n\n", file_name, buff);
- }
-
- return 0;
-}
-
-static void FFreeRTOSSataFatfsReadTask(void *pvParameters)
-{
- const char *pcTaskName = "FFreeRTOSSataFatfsReadTask is running\r\n";
- const TickType_t xDelay = pdMS_TO_TICKS(TASK_DELAY_MS);
- FError ret = FT_SUCCESS;
-
- xSemaphoreTake(xCountingSemaphore, portMAX_DELAY);
-
- /* As per most tasks, this task is implemented in an infinite loop. */
- for( ;; )
- {
- /* Print out the name of this task. */
- // printf( pcTaskName );
-
- FatfsSataReadFile(file_name, FSATA_READ_LEN);
-
- /* Delay for a period. This time a call to vTaskDelay() is used which
- places the task into the Blocked state until the delay period has
- expired. The parameter takes a time specified in 'ticks', and the
- pdMS_TO_TICKS() macro is used (where the xDelay constant is
- declared) to convert TASK_DELAY_MS milliseconds into an equivalent time in
- ticks. */
- vTaskDelay(xDelay);
- }
-}
-
-static void FFreeRTOSSataFatfsWriteTask(void *pvParameters)
-{
- const char *pcTaskName = "FFreeRTOSSataFatfsWriteTask is running\r\n";
- const TickType_t xDelay = pdMS_TO_TICKS(TASK_DELAY_MS);
- FError ret = FT_SUCCESS;
- const char *string = "write to test.txt.";
- char string_out[FSATA_READ_LEN] = {0};
- static int i = 0;
-
- xSemaphoreTake(xCountingSemaphore, portMAX_DELAY);
-
- /* As per most tasks, this task is implemented in an infinite loop. */
- for (;;)
- {
- /* Print out the name of this task. */
- // printf( pcTaskName );
- i++;
- sprintf(string_out, "%s-%d", string, i);
- printf( "write to %s, str = %s\n", file_name, string_out);
- FatfsSataWriteFile(file_name, string_out, FALSE, 0);
-
- /* Delay for a period. This time a call to vTaskDelay() is used which
- places the task into the Blocked state until the delay period has
- expired. The parameter takes a time specified in 'ticks', and the
- pdMS_TO_TICKS() macro is used (where the xDelay constant is
- declared) to convert TASK_DELAY_MS milliseconds into an equivalent time in
- ticks. */
- vTaskDelay(xDelay);
- }
-}
-
-static void prvOneShotTimerCallback( TimerHandle_t xTimer )
-{
- /* Output a string to show the time at which the callback was executed. */
- vPrintf( "One-shot timer callback executing, delete SataFatfs ReadTask and WriteTask.\r\n" );
-
- FFreeRTOSSataFatfsDelete();
-}
-
-static void FFreeRTOSSataFatfsInitTask(void *pvParameters)
-{
- const char *pcTaskName = "FFreeRTOSSataFatfsInitTask is running\r\n";
- const TickType_t xDelay = pdMS_TO_TICKS(TASK_DELAY_MS);
- FError ret = FT_SUCCESS;
-
- const char *string = NULL;
- const char *mount_point = "0:/";
-
- /* setup sata */
- FatfsSataSetup(mount_point);
-
- /* create a file*/
- FatfsSataWriteFile(file_name, NULL, TRUE, 0);
-
- xSemaphoreGive(xCountingSemaphore);
- xSemaphoreGive(xCountingSemaphore);
-
- vTaskDelete(NULL);
-
-}
-
-BaseType_t FFreeRTOSSataFatfsCreate(void)
-{
- BaseType_t xReturn = pdPASS;/* 定义一个创建信息返回值,默认为 pdPASS */
- BaseType_t xTimerStarted = pdPASS;
-
- xCountingSemaphore = xSemaphoreCreateCounting(2, 0);
- if (xCountingSemaphore == NULL)
- {
- printf("FFreeRTOSSataFatfsCreate xCountingSemaphore create failed.\r\n" );
- return pdFAIL;
- }
-
- taskENTER_CRITICAL(); /*进入临界区*/
-
- xReturn = xTaskCreate((TaskFunction_t )FFreeRTOSSataFatfsInitTask, /* 任务入口函数 */
- (const char* )"FFreeRTOSSataFatfsInitTask",/* 任务名字 */
- (uint16_t )4096, /* 任务栈大小 */
- (void* )NULL,/* 任务入口函数参数 */
- (UBaseType_t )2, /* 任务的优先级 */
- NULL); /* 任务控制 */
-
- xReturn = xTaskCreate((TaskFunction_t )FFreeRTOSSataFatfsReadTask, /* 任务入口函数 */
- (const char* )"FFreeRTOSSataFatfsReadTask",/* 任务名字 */
- (uint16_t )4096, /* 任务栈大小 */
- (void* )NULL,/* 任务入口函数参数 */
- (UBaseType_t )configMAX_PRIORITIES-1, /* 任务的优先级 */
- (TaskHandle_t* )&read_handle); /* 任务控制 */
-
- xReturn = xTaskCreate((TaskFunction_t )FFreeRTOSSataFatfsWriteTask, /* 任务入口函数 */
- (const char* )"FFreeRTOSSataFatfsWriteTask",/* 任务名字 */
- (uint16_t )4096, /* 任务栈大小 */
- (void* )NULL,/* 任务入口函数参数 */
- (UBaseType_t )configMAX_PRIORITIES-1, /* 任务的优先级 */
- (TaskHandle_t* )&write_handle); /* 任务控制 */
-
- /* Create the one shot software timer, storing the handle to the created
- software timer in xOneShotTimer. */
- xOneShotTimer = xTimerCreate( "OneShot Software Timer", /* Text name for the software timer - not used by FreeRTOS. */
- ONE_SHOT_TIMER_PERIOD, /* The software timer's period in ticks. */
- pdFALSE, /* Setting uxAutoRealod to pdFALSE creates a one-shot software timer. */
- 0, /* This example does not use the timer id. */
- prvOneShotTimerCallback ); /* The callback function to be used by the software timer being created. */
-
- /* Check the timers were created. */
- if( xOneShotTimer != NULL )
- {
- /* Start the software timers, using a block time of 0 (no block time).
- The scheduler has not been started yet so any block time specified here
- would be ignored anyway. */
- xTimerStarted = xTimerStart( xOneShotTimer, 0 );
-
- /* The implementation of xTimerStart() uses the timer command queue, and
- xTimerStart() will fail if the timer command queue gets full. The timer
- service task does not get created until the scheduler is started, so all
- commands sent to the command queue will stay in the queue until after
- the scheduler has been started. Check both calls to xTimerStart()
- passed. */
- if( xTimerStarted != pdPASS)
- {
- vPrintf("CreateSoftwareTimerTasks xTimerStart failed \r\n");
- }
- }
- else
- {
- vPrintf("CreateSoftwareTimerTasks xTimerCreate failed \r\n");
- }
-
- taskEXIT_CRITICAL();
-
- return xReturn;
-}
-
-static void FFreeRTOSSataFatfsDelete(void)
-{
- BaseType_t xReturn = pdPASS;
-
- if(read_handle)
- {
- vTaskDelete(read_handle);
- vPrintf("Delete FFreeRTOSSataFatfsReadTask success\r\n");
- }
-
- if(write_handle)
- {
- vTaskDelete(write_handle);
- vPrintf("Delete FFreeRTOSSataFatfsWriteTask success\r\n");
- }
-
- /* delete count sem */
- vSemaphoreDelete(xCountingSemaphore);
-
- /* delete timer */
- xReturn = xTimerDelete(xOneShotTimer, 0);
- if(xReturn != pdPASS)
- {
- vPrintf("OneShot Software Timer Delete failed.\r\n");
- }
- else
- {
- vPrintf("OneShot Software Timer Delete success.\r\n");
- }
-
-}
-
-
-
diff --git a/example/storage/spim_spiffs/README.md b/example/storage/spim_spiffs/README.md
deleted file mode 100644
index b41445e0178487df6029af7b9c3adc88048a3e9d..0000000000000000000000000000000000000000
--- a/example/storage/spim_spiffs/README.md
+++ /dev/null
@@ -1,135 +0,0 @@
-# SPIFFS SPI Nor-flash 文件系统测试
-## 1. 例程介绍
-
->介绍例程的用途,使用场景,相关基本概念,描述用户可以使用例程完成哪些工作
-
-[SPIFFS](https://github.com/pellepl/spiffs) 是一个面向SPI FLASH的文件系统, 它需要的系统资源极少,可以完全运行在RAM中不需要堆的支持, 有以下几个特点,
-
-- 1. 面向小型嵌入式系统,不要求系统支持堆和动态内存
-- 2. 尽可能少地进行擦除,只进行大块擦除,清除小块数据时采用标记的方法
-- 3. 支持负载均衡,尽可能延长 Flash 的使用寿命
-- 4. 内置文件系统的一致性检查,对文件系统损坏有一定的保护能力
-- 5. 使用方便,高度可配置
-
-但是,SPIFFS 也存在以下几个缺陷,
-
-- 1. 不支持目录,SPIFFS 提供的是一个平面结构文件系统,路径 `tmp/myfile.txt` 会直接被创建成一个名字为 `tmp/myfile.txt` 的文件
-- 2. 不是实时的,一个写操作的持续时间可能比另一个长得多
-- 3. 支持的 Flash 容量不能超过 128 MB
-- 4. 不支持坏块检测和坏块处理
-
-本例程通过Freertos下的SPIFFS测试,验证了SPIM Nor-flash文件系统的基本功能,如文件系统格式化,文件的创建、读写、删除和枚举等。例程在E2000 test板上测试通过,使用的Nor Flash介质型号是GD25LQ128E,容量为16MB,如下:
-
-
-## 2. 如何使用例程
-
->描述开发平台准备,使用例程配置,构建和下载镜像的过程
-
-### 2.1 硬件配置方法
-
->哪些硬件平台是支持的,需要哪些外设,例程与开发板哪些IO口相关等(建议附录开发板照片,展示哪些IO口被引出)
-
-本例程支持的硬件平台包括
-- E2000D开发板
-- E2000S开发板
-
-对应的配置项是
-- CONFIG_TARGET_E2000D
-
-
-- 本例程适配了GD25Q256、GD25Q128、GD25Q64、S25FS256的Nor-Flash芯片,如使用其他型号,需自行参考适配
-### 2.2 SDK配置方法
-
->依赖哪些驱动、库和第三方组件,如何完成配置(列出需要使能的关键配置项)
-
-使能以下配置
-
-- CONFIG_USE_SPI,使能SPI驱动组件
-- CONFIG_USE_FSPIM,选择FSPIM驱动
-- CONFIG_USE_IOMUX,使能IO复用驱动组件
-- CONFIG_ENABLE_FIOMUX,选择FIOMUX驱动
-- CONFIG_USE_GPIO,使能GPIO驱动组件
-- CONFIG_ENABLE_F_GPIO,选择FGPIO驱动
-- CONFIG_USE_SFUD,选择SFUD协议框架
-- CONFIG_SFUD_CTRL_F_SPIM,关联SFUD框架和FSPIM驱动
-- CONFIG_USE_SPIFFS CONFIG_SPIFFS_ON_FSPIM_SFUD,使能SPIFFS
-
-本例子已经提供好具体的编译指令,以下进行介绍:
-- make 将目录下的工程进行编译
-- make clean 将目录下的工程进行清理
-- make boot 将目录下的工程进行编译,并将生成的elf 复制到目标地址
-- make load_e2000d_aarch64 将预设64bit e2000d 下的配置加载至工程中
-- make load_e2000d_aarch32 将预设32bit e2000d 下的配置加载至工程中
-- make menuconfig 配置目录下的参数变量
-- make backup_kconfig 将目录下的sdkconfig 备份到./configs下
-
-### 2.3 构建和下载
-
->描述构建、烧录下载镜像的过程,列出相关的命令
-
-#### 2.3.1 构建过程
-
-- 在host侧完成配置
-配置成e2000d,对于其它平台,使用对应的默认配置,如ft2004 `make load_ft2004_aarch32`
-
-- 选择目标平台
-```
-make load_e2000d_aarch64
-```
-
-- 选择例程需要的配置
-```
-make menuconfig
-```
-
-- 进行编译
-```
-make
-```
-
-- 将编译出的镜像放置到tftp目录下
-```
-make boot
-```
-
-#### 2.3.2 下载过程
-
-- host侧设置重启host侧tftp服务器
-```
-sudo service tftpd-hpa restart
-```
-
-- 开发板侧使用bootelf命令跳转
-```
-setenv ipaddr 192.168.4.20
-setenv serverip 192.168.4.50
-setenv gatewayip 192.168.4.1
-tftpboot 0x90100000 freertos.elf
-bootelf -p 0x90100000
-```
-
-### 2.4 输出与实验现象
-
->描述输入输出情况,列出存在哪些输出,对应的输出是什么(建议附录相关现象图片)
-程序启动后,依次创建Init、Read、Write任务,创建单次模式软件定时器用于删除任务,Init任务会首先初始化并挂载spim flash的部分区域(可通过FSPIFFS_IF_FORMAT选择是否进行格式化操作),随后创建一个文件,然后释放信号量通知Read和Write任务开始执行;
-
-- init完成,挂载文件系统完成,创建测试文件
-
-
-- 读写任务周期性执行,有两个读任务,一个写任务
-
-
-- 软件定时器触发,删除读写任务
-
-
-## 3. 如何解决问题
-
->主要记录使用例程中可能会遇到的问题,给出相应的解决方案
-
-- FSPIFFS_IF_FORMAT决定初始化阶段是否格式化指定的区域,TRUE为格式化,FLASE为不格式化
-
-## 4. 修改历史记录
-
->记录例程的重大修改记录,标明修改发生的版本号
-
-v0.1. 2022-10-27 首次合入
\ No newline at end of file
diff --git a/example/storage/spim_spiffs/figs/delete.png b/example/storage/spim_spiffs/figs/delete.png
deleted file mode 100644
index fb0d47c2e106319953300b8e2da62e54a44513b2..0000000000000000000000000000000000000000
Binary files a/example/storage/spim_spiffs/figs/delete.png and /dev/null differ
diff --git a/example/storage/spim_spiffs/figs/hardware.jpg b/example/storage/spim_spiffs/figs/hardware.jpg
deleted file mode 100644
index e655675198ab62038cc4360ea98c90617803c4b5..0000000000000000000000000000000000000000
Binary files a/example/storage/spim_spiffs/figs/hardware.jpg and /dev/null differ
diff --git a/example/storage/spim_spiffs/figs/init.png b/example/storage/spim_spiffs/figs/init.png
deleted file mode 100644
index 49fe3c33bf239f172ec58ed1cdf05b3631d3ab19..0000000000000000000000000000000000000000
Binary files a/example/storage/spim_spiffs/figs/init.png and /dev/null differ
diff --git a/example/storage/spim_spiffs/figs/wr.png b/example/storage/spim_spiffs/figs/wr.png
deleted file mode 100644
index 05b0cf56ceb81102d5b02ef24238cc6df1b51345..0000000000000000000000000000000000000000
Binary files a/example/storage/spim_spiffs/figs/wr.png and /dev/null differ
diff --git a/example/storage/spim_spiffs/inc/spim_spiffs_example.h b/example/storage/spim_spiffs/inc/spim_spiffs_example.h
deleted file mode 100644
index 84826977296f6b8686c934fee03c76499c9aeafa..0000000000000000000000000000000000000000
--- a/example/storage/spim_spiffs/inc/spim_spiffs_example.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
- * All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
- * FilePath: spim_spiffs_example.h
- * Date: 2022-06-17 10:42:40
- * LastEditTime: 2022-06-17 10:42:40
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
- */
-
-#ifndef SPIM_SPIFFS_EXAMPLE_H
-#define SPIM_SPIFFS_EXAMPLE_H
-
-/* spim spiffs read and write test */
-BaseType_t FFreeRTOSSpimSpiffsCreate(u32 spim_id);
-
-#endif // !
\ No newline at end of file
diff --git a/example/storage/spim_spiffs/sdkconfig b/example/storage/spim_spiffs/sdkconfig
deleted file mode 100644
index 86833babcea362706d1a0dad96787a9b91f15b21..0000000000000000000000000000000000000000
--- a/example/storage/spim_spiffs/sdkconfig
+++ /dev/null
@@ -1,236 +0,0 @@
-
-#
-# Freertos Configuration
-#
-CONFIG_TARGET_NAME="e2000d_freertos_a64"
-# end of Freertos Configuration
-
-#
-# Standalone Setting
-#
-CONFIG_USE_FREERTOS=y
-
-#
-# Arch Configuration
-#
-# CONFIG_TARGET_ARMV8_AARCH32 is not set
-CONFIG_TARGET_ARMV8_AARCH64=y
-CONFIG_USE_CACHE=y
-CONFIG_USE_MMU=y
-CONFIG_USE_SYS_TICK=y
-# CONFIG_MMU_DEBUG_PRINTS is not set
-# end of Arch Configuration
-
-#
-# Board Configuration
-#
-# CONFIG_TARGET_F2000_4 is not set
-# CONFIG_TARGET_D2000 is not set
-# CONFIG_TARGET_E2000Q is not set
-CONFIG_TARGET_E2000D=y
-# CONFIG_TARGET_E2000S is not set
-CONFIG_TARGET_E2000=y
-CONFIG_DEFAULT_DEBUG_PRINT_UART1=y
-# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set
-# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set
-# end of Board Configuration
-
-#
-# Components Configuration
-#
-CONFIG_USE_SPI=y
-CONFIG_USE_FSPIM=y
-CONFIG_USE_QSPI=y
-
-#
-# Qspi Configuration
-#
-CONFIG_USE_FQSPI=y
-# end of Qspi Configuration
-
-CONFIG_USE_GIC=y
-CONFIG_ENABLE_GICV3=y
-CONFIG_USE_SERIAL=y
-
-#
-# Usart Configuration
-#
-CONFIG_ENABLE_Pl011_UART=y
-# end of Usart Configuration
-
-# CONFIG_USE_GPIO is not set
-# CONFIG_USE_ETH is not set
-# CONFIG_USE_CAN is not set
-# CONFIG_USE_I2C is not set
-# CONFIG_USE_TIMER is not set
-# CONFIG_USE_MIO is not set
-# CONFIG_USE_SDMMC is not set
-# CONFIG_USE_PCIE is not set
-# CONFIG_USE_WDT is not set
-# CONFIG_USE_DMA is not set
-# CONFIG_USE_NAND is not set
-# CONFIG_USE_RTC is not set
-# CONFIG_USE_SATA is not set
-# CONFIG_USE_USB is not set
-# CONFIG_USE_ADC is not set
-# CONFIG_USE_PWM is not set
-# CONFIG_USE_IPC is not set
-# end of Components Configuration
-
-CONFIG_USE_NEW_LIBC=y
-# end of Standalone Setting
-
-#
-# Building Option
-#
-# CONFIG_LOG_VERBOS is not set
-# CONFIG_LOG_DEBUG is not set
-# CONFIG_LOG_INFO is not set
-# CONFIG_LOG_WARN is not set
-CONFIG_LOG_ERROR=y
-# CONFIG_LOG_NONE is not set
-CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y
-CONFIG_INTERRUPT_ROLE_MASTER=y
-# CONFIG_INTERRUPT_ROLE_SLAVE is not set
-# CONFIG_LOG_EXTRA_INFO is not set
-# CONFIG_BOOTUP_DEBUG_PRINTS is not set
-
-#
-# Linker Options
-#
-# CONFIG_AARCH32_RAM_LD is not set
-CONFIG_AARCH64_RAM_LD=y
-# CONFIG_USER_DEFINED_LD is not set
-CONFIG_LINK_SCRIPT_ROM=y
-CONFIG_ROM_START_UP_ADDR=0x80100000
-CONFIG_ROM_SIZE_MB=1
-CONFIG_LINK_SCRIPT_RAM=y
-CONFIG_RAM_START_UP_ADDR=0x81000000
-CONFIG_RAM_SIZE_MB=64
-CONFIG_HEAP_SIZE=1
-CONFIG_STACK_SIZE=0x100000
-CONFIG_FPU_STACK_SIZE=0x1000
-# end of Linker Options
-
-#
-# Compiler Options
-#
-CONFIG_OUTPUT_BINARY=y
-# end of Compiler Options
-# end of Building Option
-
-#
-# Component Configuration
-#
-
-#
-# Freertos Uart Drivers
-#
-CONFIG_FREERTOS_USE_UART=y
-# end of Freertos Uart Drivers
-
-#
-# Freertos Pwm Drivers
-#
-# CONFIG_FREERTOS_USE_PWM is not set
-# end of Freertos Pwm Drivers
-
-#
-# Freertos Qspi Drivers
-#
-CONFIG_FREERTOS_USE_QSPI=y
-# end of Freertos Qspi Drivers
-
-#
-# Freertos Wdt Drivers
-#
-# CONFIG_FREERTOS_USE_WDT is not set
-# end of Freertos Wdt Drivers
-
-#
-# Freertos Eth Drivers
-#
-# CONFIG_FREERTOS_USE_XMAC is not set
-# end of Freertos Eth Drivers
-
-#
-# Freertos Gpio Drivers
-#
-# CONFIG_FREERTOS_USE_GPIO is not set
-# end of Freertos Gpio Drivers
-
-#
-# Freertos Spim Drivers
-#
-CONFIG_FREERTOS_USE_FSPIM=y
-# end of Freertos Spim Drivers
-
-#
-# Freertos DMA Drivers
-#
-# CONFIG_FREERTOS_USE_FDDMA is not set
-# CONFIG_FREERTOS_USE_FGDMA is not set
-# end of Freertos DMA Drivers
-
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
-#
-# Freertos Adc Drivers
-#
-# CONFIG_FREERTOS_USE_ADC is not set
-# end of Freertos Adc Drivers
-
-#
-# Freertos Can Drivers
-#
-# CONFIG_FREERTOS_USE_CAN is not set
-# end of Freertos Can Drivers
-# end of Component Configuration
-
-#
-# FreeRTOS Setting
-#
-# CONFIG_USE_LWIP is not set
-CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
-CONFIG_USE_SFUD=y
-
-#
-# SFUD Configuration
-#
-CONFIG_SFUD_CTRL_FSPIM=y
-CONFIG_SFUD_CTRL_FQSPI=y
-# CONFIG_SFUD_QSPI_READ_MODE_READ is not set
-# CONFIG_SFUD_QSPI_READ_MODE_DUAL_READ is not set
-CONFIG_SFUD_QSPI_READ_MODE_QUAD_READ=y
-# end of SFUD Configuration
-
-CONFIG_USE_SPIFFS=y
-
-#
-# SPIFFS Configuration
-#
-CONFIG_SPIFFS_ON_FSPIM_SFUD=y
-# CONFIG_SPIFFS_ON_FQSPI_SFUD is not set
-# end of SPIFFS Configuration
-
-# CONFIG_USE_AMP is not set
-CONFIG_USE_LETTER_SHELL=y
-
-#
-# Letter Shell Configuration
-#
-CONFIG_LS_PL011_UART=y
-CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
-# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set
-# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set
-# end of Letter Shell Configuration
-
-CONFIG_USE_TLSF=y
-# CONFIG_USE_SDMMC_CMD is not set
-# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
diff --git a/example/storage/spim_spiffs/src/spim_spiffs_example.c b/example/storage/spim_spiffs/src/spim_spiffs_example.c
deleted file mode 100644
index b7967934a6f88c989d8ec8f30fb28a6e1b320530..0000000000000000000000000000000000000000
--- a/example/storage/spim_spiffs/src/spim_spiffs_example.c
+++ /dev/null
@@ -1,620 +0,0 @@
-/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
- * All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
- * FilePath: spim_spiffs_example.c
- * Date: 2022-07-11 11:32:48
- * LastEditTime: 2022-07-11 11:32:48
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
- */
-#include
-#include
-#include
-#include "fkernel.h"
-#include "FreeRTOSConfig.h"
-#include "FreeRTOS.h"
-#include "task.h"
-#include "semphr.h"
-#include "fpinctrl.h"
-#include "timers.h"
-#include "spim_spiffs_example.h"
-#include "strto.h"
-#include "fassert.h"
-#include "fdebug.h"
-#include "fparameters.h"
-#include "spiffs_port.h"
-#include "sdkconfig.h"
-#ifdef CONFIG_SPIFFS_ON_FSPIM_SFUD
-#include "fspim_spiffs_port.h"
-#endif
-
-enum
-{
- FSPIFFS_OPS_OK = 0,
- FSPIFFS_OPS_INIT_FAILED,
- FSPIFFS_OPS_ALREADY_INITED,
- FSPIFFS_OPS_MOUNT_FAILED,
- FSPIFFS_OPS_FORMAT_FAILED,
- FSPIFFS_OPS_NOT_YET_MOUNT,
- FSPIFFS_OPS_OPEN_FILE_FAILED,
- FSPIFFS_OPS_WRITE_FILE_FAILED,
- FSPIFFS_OPS_READ_FILE_FAILED,
- FSPIFFS_OPS_REMOVE_FILE_FAILED,
- FSPIFFS_OPS_CLOSE_FILE_FAILED,
-};
-
-#define FSPIFFS_DEBUG_TAG "SPIFFS-SPIM"
-#define FSPIFFS_ERROR(format, ...) FT_DEBUG_PRINT_E(FSPIFFS_DEBUG_TAG, format, ##__VA_ARGS__)
-#define FSPIFFS_WARN(format, ...) FT_DEBUG_PRINT_W(FSPIFFS_DEBUG_TAG, format, ##__VA_ARGS__)
-#define FSPIFFS_INFO(format, ...) FT_DEBUG_PRINT_I(FSPIFFS_DEBUG_TAG, format, ##__VA_ARGS__)
-#define FSPIFFS_DEBUG(format, ...) FT_DEBUG_PRINT_D(FSPIFFS_DEBUG_TAG, format, ##__VA_ARGS__)
-
-/* spiffs start address and size */
-#define FSPIFFS_START_ADDR (0 * SZ_1M)
-#define FSPIFFS_USE_SIZE SZ_1M
-
-#define FSPIFFS_RW_BUF_SIZE 64
-
-/* if format flash, TRUE is need format, it tasks some time */
-#define FSPIFFS_IF_FORMAT TRUE
-
-/* 一个页大小两倍的一个RAM缓冲区, 用来加载和维护SPIFFS的逻辑页 */
-static volatile u8 fspiffs_work_buf[FSPIFFS_LOG_PAGE_SIZE * 2] = {0};
-static volatile u8 fspiffs_fds_buf[32 * 4] = {0};
-static volatile u8 fspiffs_cache_buf[(FSPIFFS_LOG_PAGE_SIZE + 32) * 4] = {0};
-static u8 fspiffs_rw_buf[FSPIFFS_RW_BUF_SIZE] = {0};
-static FSpiffs instance;
-static spiffs_config config;
-static boolean spiffs_inited = FALSE;
-const char *file_name = "test.txt";
-
-/************************** Constant Definitions *****************************/
-
-/* The periods assigned to the one-shot timers. */
-#define ONE_SHOT_TIMER_PERIOD ( pdMS_TO_TICKS( 50000UL ) )
-
-/* write and read task delay in milliseconds */
-#define TASK_DELAY_MS 3000UL
-
-/* write and read task number */
-#define READ_WRITE_TASK_NUM 3
-static xSemaphoreHandle xCountingSemaphore;
-
-static xTaskHandle spim_read1_handle;
-static xTaskHandle spim_read2_handle;
-static xTaskHandle spim_write_handle;
-static TimerHandle_t xOneShotTimer;
-
-static void FFreeRTOSSpimSpiffsDelete(void);
-
-static int FSpiffsOpsMount(boolean do_format)
-{
- int result = 0;
-
- if (do_format)
- {
- result = SPIFFS_mount(&instance.fs,/*挂载spiffs系统*/
- &config,
- (u8_t *)fspiffs_work_buf,
-
- (u8_t *)fspiffs_fds_buf,
- sizeof(fspiffs_fds_buf),
- (u8_t *)fspiffs_cache_buf,
- sizeof(fspiffs_cache_buf),
- NULL);
-
- /* try mount to get status of filesystem */
- if ((SPIFFS_OK != result) && (SPIFFS_ERR_NOT_A_FS != result))
- {
- /* if not a valid filesystem, continue to format,
- other error cannot handle, just exit */
- FSPIFFS_ERROR("mount spiffs failed: %d", result);
- return FSPIFFS_OPS_MOUNT_FAILED;
- }
-
- /* must be unmounted prior to formatting */
- SPIFFS_unmount(&instance.fs);
-
- FSPIFFS_DEBUG("format spiffs in progress ...\r\n");
- result = SPIFFS_format(&instance.fs);
- if (SPIFFS_OK != result)
- {
- FSPIFFS_ERROR("format spiffs failed: %d", result);
- return FSPIFFS_OPS_FORMAT_FAILED;
- }
- }
-
- /* real mount */
- result = SPIFFS_mount(&instance.fs,
- &config,
- (u8_t *)fspiffs_work_buf,
- (u8_t *)fspiffs_fds_buf,
- sizeof(fspiffs_fds_buf),
- (u8_t *)fspiffs_cache_buf,
- sizeof(fspiffs_cache_buf),
- NULL);
- if (SPIFFS_OK != result)
- {
- FSPIFFS_ERROR("remount spiffs failed: %d, you may format the medium first", result);
- return FSPIFFS_OPS_MOUNT_FAILED;
- }
- else
- {
- vPrintf("mount spiffs success !!! \r\n");
- instance.fs_ready = TRUE;
- }
-
- return FSPIFFS_OPS_OK;
-}
-
-static int FSpiffsOpsListAll(void)
-{
- int ret = FSPIFFS_OPS_OK;
- int result = SPIFFS_OK;
-
- if (FALSE == instance.fs_ready)
- {
- FSPIFFS_ERROR("please mount file system first !!!");
- return FSPIFFS_OPS_NOT_YET_MOUNT;
- }
-
- static spiffs_DIR dir;
- static struct spiffs_dirent entry;
-
- memset(&dir, 0, sizeof(dir));
- memset(&entry, 0, sizeof(entry));
-
- struct spiffs_dirent *cur_entry = &entry;
- (void)SPIFFS_opendir(&instance.fs, "/", &dir);
-
- while (NULL != (cur_entry = SPIFFS_readdir(&dir, cur_entry)))
- {
- printf("-- %s file-id: [0x%04x] page-id: [%d] file-size: %d\r\n",
- cur_entry->name,
- cur_entry->pix,
- cur_entry->obj_id,
- cur_entry->size);
- }
-
- (void)SPIFFS_closedir(&dir);
- return ret;
-}
-
-int FSpiffsOpsCreateFile(const char *file_name)
-{
- FASSERT((file_name) && (strlen(file_name) > 0));
- if (FALSE == instance.fs_ready)
- {
- FSPIFFS_ERROR("please mount file system first !!!");
- return FSPIFFS_OPS_NOT_YET_MOUNT;
- }
-
- int ret = FSPIFFS_OPS_OK;
-
- /* create file */
- s32_t result = SPIFFS_creat(&instance.fs, file_name, 0);
- if (result < 0)
- {
- FSPIFFS_ERROR("failed to create file %s", file_name);
- return FSPIFFS_OPS_OPEN_FILE_FAILED;
- }
-
- /* open file */
- spiffs_file fd = SPIFFS_open(&instance.fs, file_name, SPIFFS_RDONLY, 0);
- if (0 > fd)
- {
- FSPIFFS_ERROR("failed to open file %s errno %d", file_name, SPIFFS_errno(&instance.fs));
- return FSPIFFS_OPS_OPEN_FILE_FAILED;
- }
-
- /* check file status */
- static spiffs_stat status;
- memset(&status, 0, sizeof(status));
- result = SPIFFS_fstat(&instance.fs, fd, &status);
- if (result < 0)
- {
- FSPIFFS_ERROR("failed to get status of file %s errno %d", file_name, SPIFFS_errno(&instance.fs));
- ret = FSPIFFS_OPS_OPEN_FILE_FAILED;
- goto err_exit;
- }
-
- if (0 != strcmp(status.name, file_name))
- {
- FSPIFFS_ERROR("created file name %s != %s", status.name, file_name);
- ret = FSPIFFS_OPS_OPEN_FILE_FAILED;
- goto err_exit;
- }
-
- if (0 != status.size)
- {
- FSPIFFS_ERROR("invalid file size %d", status.size);
- ret = FSPIFFS_OPS_OPEN_FILE_FAILED;
- goto err_exit;
- }
-
- vPrintf("create file %s success !!!\r\n", file_name);
-
-err_exit:
- (void)SPIFFS_close(&instance.fs, fd);
- return ret;
-}
-
-int FSpiffsOpsWriteFile(const char *file_name, const char *str)
-{
- FASSERT((file_name) && (strlen(file_name) > 0));
- FASSERT(str);
- int ret = FSPIFFS_OPS_OK;
- const u32 wr_len = strlen(str) + 1;
-
- spiffs_file fd = SPIFFS_open(&instance.fs, file_name, SPIFFS_RDWR | SPIFFS_TRUNC, 0);
- if (0 > fd)
- {
- FSPIFFS_ERROR("failed to open file %s errno %d", file_name, SPIFFS_errno(&instance.fs));
- return FSPIFFS_OPS_OPEN_FILE_FAILED;
- }
-
- int result = SPIFFS_write(&instance.fs, fd, (void *)str, wr_len);
- if (result < 0)
- {
- FSPIFFS_ERROR("failed to write file %s errno %d", file_name, SPIFFS_errno(&instance.fs));
- ret = FSPIFFS_OPS_WRITE_FILE_FAILED;
- goto err_exit;
- }
-
- /* check file status */
- static spiffs_stat status;
- memset(&status, 0, sizeof(status));
- result = SPIFFS_fstat(&instance.fs, fd, &status);
- if (result < 0)
- {
- FSPIFFS_ERROR("failed to get status of file %s errno %d", file_name, SPIFFS_errno(&instance.fs));
- ret = FSPIFFS_OPS_WRITE_FILE_FAILED;
- goto err_exit;
- }
-
- if (status.size != wr_len)
- {
- FSPIFFS_ERROR("file write size %ld != %ld", status.size, wr_len);
- ret = FSPIFFS_OPS_WRITE_FILE_FAILED;
- goto err_exit;
- }
-
- /* flush all pending writes from cache to flash */
- (void)SPIFFS_fflush(&instance.fs, fd);
- vPrintf("write file %s with %d bytes success !!!\r\n", file_name, wr_len);
-err_exit:
- (void)SPIFFS_close(&instance.fs, fd);
- return ret;
-}
-
-int FSpiffsOpsReadFile(const char *file_name)
-{
- FASSERT((file_name) && (strlen(file_name) > 0));
- int ret = FSPIFFS_OPS_OK;
- int result = SPIFFS_OK;
-
- if (FALSE == instance.fs_ready)
- {
- FSPIFFS_ERROR("please mount file system first !!!");
- return FSPIFFS_OPS_NOT_YET_MOUNT;
- }
-
- /* check file status */
- static spiffs_stat status;
-
- spiffs_flags open_flags = 0;
-
- /* open the file in read-only mode */
- open_flags = SPIFFS_RDWR;
- spiffs_file fd = SPIFFS_open(&instance.fs, file_name, open_flags, 0);
- if (0 > fd)
- {
- FSPIFFS_ERROR("failed to open file %s errno %d", file_name, SPIFFS_errno(&instance.fs));
- return FSPIFFS_OPS_OPEN_FILE_FAILED;
- }
-
- /* check file status */
- memset(&status, 0, sizeof(status));
- result = SPIFFS_fstat(&instance.fs, fd, &status);
- if (result < 0)
- {
- FSPIFFS_ERROR("failed to get status of file %s errno %d", file_name, SPIFFS_errno(&instance.fs));
- ret = FSPIFFS_OPS_OPEN_FILE_FAILED;
- goto err_exit;
- }
-
- s32_t offset = SPIFFS_lseek(&instance.fs, fd, 0, SPIFFS_SEEK_END);
- if ((s32_t)status.size != offset)
- {
- FSPIFFS_ERROR("file %s spiffs:%ld! = fs:%ld", file_name, status.size, offset);
- ret = FSPIFFS_OPS_OPEN_FILE_FAILED;
- goto err_exit;
- }
-
- memset(fspiffs_rw_buf, 0 , FSPIFFS_RW_BUF_SIZE);
-
- /* seek to offset and start read */
- if (0 > SPIFFS_lseek(&instance.fs, fd, 0, SPIFFS_SEEK_SET))
- {
- FSPIFFS_ERROR("seek file failed !!!");
- ret = FSPIFFS_OPS_READ_FILE_FAILED;
- goto err_exit;
- }
-
- /*vPrintf("read %s from position %ld\n", file_name, SPIFFS_tell(&instance.fs, fd));*/
-
- s32_t read_len = min((s32_t)FSPIFFS_RW_BUF_SIZE, (s32_t)status.size);
- s32_t read_bytes = SPIFFS_read(&instance.fs, fd, (void *)fspiffs_rw_buf, read_len);
- if (read_bytes < 0)
- {
- FSPIFFS_ERROR("failed to read file %s errno %d", file_name, SPIFFS_errno(&instance.fs));
- ret = FSPIFFS_OPS_READ_FILE_FAILED;
- goto err_exit;
- }
-
- vPrintf("read %s success, str = %s\n\n", file_name, fspiffs_rw_buf);
-
-err_exit :
- /* close file */
- (void)SPIFFS_close(&instance.fs, fd);
-
- return ret;
-}
-
-
-static void FFreeRTOSSpimSpiffsInitTask(void *pvParameters)
-{
- int result = 0;
-
- if (TRUE == spiffs_inited)
- {
- FSPIFFS_WARN("spiffs is already initialized");
- return;
- }
-
- /* The spim_id to use is passed in via the parameter.
- Cast this to a spim_id pointer. */
- u32 spim_id = (u32)(uintptr)pvParameters;
- printf("spim_id: %d\n", spim_id);
-
- memset(&config, 0, sizeof(config));
- config = *FSpiffsGetDefaultConfig();
- config.phys_addr = FSPIFFS_START_ADDR; /* may use part of flash */
- config.phys_size = FSPIFFS_USE_SIZE;
-
- memset(&instance, 0, sizeof(instance));
- instance.fs_addr = FSPIFFS_START_ADDR;
- instance.fs_size = FSPIFFS_USE_SIZE;
-
- result = FSpiffsInitialize(&instance, FSPIFFS_PORT_TO_FSPIM);
- if (FSPIFFS_PORT_OK != result)
- {
- FSPIFFS_ERROR("initialize spiffs failed");
- return;
- }
-
- FSpiffsOpsMount(FSPIFFS_IF_FORMAT);
-
- FSpiffsOpsCreateFile(file_name);
-
- spiffs_inited = TRUE;
-
- FSpiffsOpsListAll();
-
- FSPIFFS_INFO("spiffs init success !!!\r\n");
-
- for (int i = 0; i < READ_WRITE_TASK_NUM; i++)
- {
- xSemaphoreGive(xCountingSemaphore);
- }
-
- vTaskDelete(NULL);
-
-}
-
-
-static void FFreeRTOSSpimSpiffsReadTask(void *pvParameters)
-{
- const char *pcTaskName = (char *) pvParameters;
- const TickType_t xDelay = pdMS_TO_TICKS(TASK_DELAY_MS);
- FError ret = FT_SUCCESS;
-
- xSemaphoreTake(xCountingSemaphore, portMAX_DELAY);
-
- /* As per most tasks, this task is implemented in an infinite loop. */
- for( ;; )
- {
- /* Print out the name of this task. */
- vPrintf( pcTaskName );
-
- FSpiffsOpsReadFile(file_name);
-
- /* Delay for a period. This time a call to vTaskDelay() is used which
- places the task into the Blocked state until the delay period has
- expired. The parameter takes a time specified in 'ticks', and the
- pdMS_TO_TICKS() macro is used (where the xDelay constant is
- declared) to convert TASK_DELAY_MS milliseconds into an equivalent time in
- ticks. */
- vTaskDelay(xDelay);
- }
-}
-
-
-static void FFreeRTOSSpimSpiffsWriteTask(void *pvParameters)
-{
- const char *pcTaskName = "FFreeRTOSSpimSpiffsWriteTask is running\r\n";
- const TickType_t xDelay = pdMS_TO_TICKS(TASK_DELAY_MS);
- FError ret = FT_SUCCESS;
- char *string = "spiffs spim write";
- static char string_out[FSPIFFS_RW_BUF_SIZE] = {0};
-
- static int i = 0;
-
- xSemaphoreTake(xCountingSemaphore, portMAX_DELAY);
-
- /* As per most tasks, this task is implemented in an infinite loop. */
- for (;;)
- {
- /* Print out the name of this task. */
- vPrintf( pcTaskName );
- i++;
- sprintf(string_out, "%s-%d", string, i);
- vPrintf( "write to %s, str = %s\n", file_name, string_out);
- FSpiffsOpsWriteFile(file_name, string_out);
-
- /* Delay for a period. This time a call to vTaskDelay() is used which
- places the task into the Blocked state until the delay period has
- expired. The parameter takes a time specified in 'ticks', and the
- pdMS_TO_TICKS() macro is used (where the xDelay constant is
- declared) to convert TASK_DELAY_MS milliseconds into an equivalent time in
- ticks. */
- vTaskDelay(xDelay);
- }
-}
-
-static void prvOneShotTimerCallback( TimerHandle_t xTimer )
-{
- /* Output a string to show the time at which the callback was executed. */
- vPrintf( "One-shot timer callback executing, delete SpimSpiffs ReadTask and WriteTask.\r\n" );
-
- FFreeRTOSSpimSpiffsDelete();
-}
-
-
-BaseType_t FFreeRTOSSpimSpiffsCreate(u32 spim_id)/* 主要任务函数 */
-{
- BaseType_t xReturn = pdPASS;/* 定义一个创建信息返回值,默认为 pdPASS */
- BaseType_t xTimerStarted = pdPASS;
-
- xCountingSemaphore = xSemaphoreCreateCounting(READ_WRITE_TASK_NUM, 0);
- if (xCountingSemaphore == NULL)
- {
- printf("FFreeRTOSSpimSpiffsCreate xCountingSemaphore create failed.\r\n" );
- return pdFAIL;
- }
-
- char *xString1 = "FFreeRTOSSpimSpiffsReadTask1 is running\r\n";
- char *xString2 = "FFreeRTOSSpimSpiffsReadTask2 is running\r\n";
-
- taskENTER_CRITICAL(); /* 进入临界区 */
-
- xReturn = xTaskCreate((TaskFunction_t )FFreeRTOSSpimSpiffsInitTask, /* 任务入口函数 */
- (const char* )"FFreeRTOSSpimSpiffsInitTask",/* 任务名字 */
- (uint16_t )4096, /* 任务栈大小 */
- (void* )(uintptr)spim_id,/* 任务入口函数参数 */
- (UBaseType_t )1, /* 任务的优先级 */
- NULL); /* 任务控制 */
-
- xReturn = xTaskCreate((TaskFunction_t )FFreeRTOSSpimSpiffsReadTask, /* 任务入口函数 */
- (const char* )"FFreeRTOSSpimSpiffsReadTask",/* 任务名字 */
- (uint16_t )4096, /* 任务栈大小 */
- (void* )xString1,/* 任务入口函数参数 */
- (UBaseType_t )configMAX_PRIORITIES-1, /* 任务的优先级 */
- (TaskHandle_t* )&spim_read1_handle); /* 任务控制 */
-
- xReturn = xTaskCreate((TaskFunction_t )FFreeRTOSSpimSpiffsReadTask, /* 任务入口函数 */
- (const char* )"FFreeRTOSSpimSpiffsReadTask",/* 任务名字 */
- (uint16_t )4096, /* 任务栈大小 */
- (void* )xString2,/* 任务入口函数参数 */
- (UBaseType_t )configMAX_PRIORITIES-1, /* 任务的优先级 */
- (TaskHandle_t* )&spim_read2_handle); /* 任务控制 */
-
- xReturn = xTaskCreate((TaskFunction_t )FFreeRTOSSpimSpiffsWriteTask, /* 任务入口函数 */
- (const char* )"FFreeRTOSSpimSpiffsWriteTask",/* 任务名字 */
- (uint16_t )4096, /* 任务栈大小 */
- (void* )NULL,/* 任务入口函数参数 */
- (UBaseType_t )configMAX_PRIORITIES-1, /* 任务的优先级 */
- (TaskHandle_t* )&spim_write_handle); /* 任务控制 */
-
- /* Create the one shot software timer, storing the handle to the created
- software timer in xOneShotTimer. */
- xOneShotTimer = xTimerCreate( "OneShot Software Timer", /* Text name for the software timer - not used by FreeRTOS. */
- ONE_SHOT_TIMER_PERIOD, /* The software timer's period in ticks. */
- pdFALSE, /* Setting uxAutoRealod to pdFALSE creates a one-shot software timer. */
- 0, /* This example does not use the timer id. */
- prvOneShotTimerCallback ); /* The callback function to be used by the software timer being created. */
-
- /* Check the timers were created. */
- if( xOneShotTimer != NULL )
- {
- /* Start the software timers, using a block time of 0 (no block time).
- The scheduler has not been started yet so any block time specified here
- would be ignored anyway. */
- xTimerStarted = xTimerStart( xOneShotTimer, 0 );
-
- /* The implementation of xTimerStart() uses the timer command queue, and
- xTimerStart() will fail if the timer command queue gets full. The timer
- service task does not get created until the scheduler is started, so all
- commands sent to the command queue will stay in the queue until after
- the scheduler has been started. Check both calls to xTimerStart()
- passed. */
- if( xTimerStarted != pdPASS)
- {
- vPrintf("CreateSoftwareTimerTasks xTimerStart failed \r\n");
- }
- }
- else
- {
- vPrintf("CreateSoftwareTimerTasks xTimerCreate failed \r\n");
- }
-
- taskEXIT_CRITICAL();
-
- return xReturn;
-}
-
-static void FFreeRTOSSpimSpiffsDelete(void)
-{
- BaseType_t xReturn = pdPASS;
-
- FSpiffsDeInitialize(&instance);
-
- if(spim_read1_handle)
- {
- vTaskDelete(spim_read1_handle);
- vPrintf("Delete FFreeRTOSSpimSpiffsReadTask1 success\r\n");
- }
-
- if(spim_read2_handle)
- {
- vTaskDelete(spim_read2_handle);
- vPrintf("Delete FFreeRTOSSpimSpiffsReadTask2 success\r\n");
- }
-
- if(spim_write_handle)
- {
- vTaskDelete(spim_write_handle);
- vPrintf("Delete FFreeRTOSSpimSpiffsWriteTask success\r\n");
- }
-
- /* delete count sem */
- vSemaphoreDelete(xCountingSemaphore);
-
- /* delete timer */
- xReturn = xTimerDelete(xOneShotTimer, 0);
- if(xReturn != pdPASS)
- {
- vPrintf("OneShot Software Timer Delete failed.\r\n");
- }
- else
- {
- vPrintf("OneShot Software Timer Delete success.\r\n");
- }
-
-}
-
-
-
diff --git a/example/template/READEME.md b/example/template/README.md
similarity index 99%
rename from example/template/READEME.md
rename to example/template/README.md
index 08cab5c69cf61c995c826c3c0ff1c8873f5e607f..de741af5c1b6064b2d406c14786d59bd190959a7 100644
--- a/example/template/READEME.md
+++ b/example/template/README.md
@@ -11,7 +11,7 @@
* See the Phytium Public License for more details.
*
*
- * FilePath: READEME.md
+ * FilePath: README.md
* Date: 2022-02-24 13:42:19
* LastEditTime: 2022-03-21 17:02:58
* Description: This file is for
diff --git a/example/template/configs/d2000_aarch32_eg_configs b/example/template/configs/d2000_aarch32_eg_configs
index f75409dd6b59bfe74c23dc4c71b30bac8e54e128..db43ff18c5d70451dfd40a6e332bccf9798ff3df 100644
--- a/example/template/configs/d2000_aarch32_eg_configs
+++ b/example/template/configs/d2000_aarch32_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -111,6 +112,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
# CONFIG_OUTPUT_BINARY is not set
# end of Compiler Options
# end of Building Option
@@ -147,6 +157,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -168,12 +179,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -185,14 +190,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -210,4 +233,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/template/configs/d2000_aarch64_eg_configs b/example/template/configs/d2000_aarch64_eg_configs
index 8479669d3e355e4aacef8d7d14d663e3be930842..0476ac572c1fa01d5dd08eb3d06a27cc25081b9d 100644
--- a/example/template/configs/d2000_aarch64_eg_configs
+++ b/example/template/configs/d2000_aarch64_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -107,6 +108,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
# CONFIG_OUTPUT_BINARY is not set
# end of Compiler Options
# end of Building Option
@@ -143,6 +153,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -164,12 +175,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -181,14 +186,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -206,4 +229,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/template/configs/e2000d_aarch32_eg_configs b/example/template/configs/e2000d_aarch32_eg_configs
index 2bd43e711f00f82227c30cd0cc8fccdb267b9b90..93bbaf5775f6dfca8cf3eaa54157a624c9942970 100644
--- a/example/template/configs/e2000d_aarch32_eg_configs
+++ b/example/template/configs/e2000d_aarch32_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -111,6 +112,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -147,6 +157,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -168,12 +179,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -185,14 +190,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -210,4 +233,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/template/configs/e2000d_aarch64_eg_configs b/example/template/configs/e2000d_aarch64_eg_configs
index b8c6027e4cfb07936cd1c7588a1c3ba24241457e..2038c875d3d1cb49432ebcbc848f6b6071e1e8bb 100644
--- a/example/template/configs/e2000d_aarch64_eg_configs
+++ b/example/template/configs/e2000d_aarch64_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -107,6 +108,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -143,6 +153,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -164,12 +175,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -181,14 +186,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -206,4 +229,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/template/configs/e2000q_aarch32_eg_configs b/example/template/configs/e2000q_aarch32_eg_configs
index 57c04828a9da09c0c133920c05fe7176bfa94062..504364d5e9ecd72a8452531d947bdb2e44ac675b 100644
--- a/example/template/configs/e2000q_aarch32_eg_configs
+++ b/example/template/configs/e2000q_aarch32_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -111,6 +112,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -147,6 +157,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -168,12 +179,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -185,14 +190,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -210,4 +233,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/template/configs/e2000q_aarch64_eg_configs b/example/template/configs/e2000q_aarch64_eg_configs
index 205bf7fd935db838793cb5106e480c932927b80a..dcf9e9eb5fc9f6e4613357a995e8c3c95b8659b5 100644
--- a/example/template/configs/e2000q_aarch64_eg_configs
+++ b/example/template/configs/e2000q_aarch64_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -107,6 +108,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -143,6 +153,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -164,12 +175,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -181,14 +186,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -206,4 +229,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/template/configs/ft2004_aarch32_eg_configs b/example/template/configs/ft2004_aarch32_eg_configs
index 77be645ad12963fe6ff9c2490cc04e19d984c26b..57be672bba529983973c95665d7b62db2ae73854 100644
--- a/example/template/configs/ft2004_aarch32_eg_configs
+++ b/example/template/configs/ft2004_aarch32_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -111,6 +112,15 @@ CONFIG_UNDEF_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
# CONFIG_OUTPUT_BINARY is not set
# end of Compiler Options
# end of Building Option
@@ -147,6 +157,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -168,12 +179,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -185,14 +190,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -210,4 +233,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/template/configs/ft2004_aarch64_eg_configs b/example/template/configs/ft2004_aarch64_eg_configs
index b095059c6750cd7540b6219a6c944eed5780981b..bcb9a56d97735ad3e7a6496f914985873173c9eb 100644
--- a/example/template/configs/ft2004_aarch64_eg_configs
+++ b/example/template/configs/ft2004_aarch64_eg_configs
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -107,6 +108,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
# CONFIG_OUTPUT_BINARY is not set
# end of Compiler Options
# end of Building Option
@@ -143,6 +153,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -164,12 +175,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -181,14 +186,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -206,4 +229,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/template/main.c b/example/template/main.c
index b157fbf01cb65960166a8e927fab8531cae38bd3..6c611a23f8573e5629eab517d606b4604fd49c5a 100644
--- a/example/template/main.c
+++ b/example/template/main.c
@@ -1,125 +1,50 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: main.c
* Date: 2022-02-24 13:42:19
* LastEditTime: 2022-03-21 17:02:53
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
+ * Description: This file is for providing a template main.c file when creating new freertos examples.
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2022/11/1 init commit
*/
-
-
#include
#include
#include "FreeRTOS.h"
#include "task.h"
-#include "queue.h"
#include "ftypes.h"
-#include "fassert.h"
-#include "fgeneric_timer.h"
-#include "finterrupt.h"
-#include "fparameters.h"
#include "shell.h"
#include "shell_port.h"
-static TaskHandle_t cpuStatsTaskHandle = NULL;
-static uint8_t CPU_RunInfo[800] = {0}; //保存任务运行时间信息
-
-static void CpuStatsTask(void* parameter)
-{
- while (1)
- {
- memset(CPU_RunInfo,0,800); //信息缓冲区清零
- vTaskList((char *)&CPU_RunInfo); //获取任务运行时间信息
-
- printf("---------------------------------------------\r\n");
- printf("task_name task_state priority stack task_num\r\n");
- printf("%s", CPU_RunInfo);
- printf("---------------------------------------------\r\n");
-
- memset(CPU_RunInfo, 0, 800); //信息缓冲区清零
- vTaskGetRunTimeStats((char *)&CPU_RunInfo);
-
- printf("task_name\trun_time_count\tusage_rate\r\n");
- printf("%s", CPU_RunInfo);
- printf("---------------------------------------------\r\n\n");
- vTaskDelay(5000); /* 延时 */
- }
-}
-
-static TaskHandle_t appTaskCreateHandle = NULL;
-
-static void AppTaskCreate(void)
-{
- BaseType_t xReturn = pdPASS;/* 定义一个创建信息返回值,默认为 pdPASS */
-
- printf("create AppTaskCreate!\r\n");
- taskENTER_CRITICAL(); //进入临界区
- /* 创建 CPU stats 任务 */
- xReturn = xTaskCreate((TaskFunction_t )CpuStatsTask, /* 任务入口函数 */
- (const char* )"CPU_STATS_Task",/* 任务名字 */
- (uint16_t )512, /* 任务栈大小 */
- (void* )NULL, /* 任务入口函数参数 */
- (UBaseType_t )4, /* 任务的优先级 */
- (TaskHandle_t* )&cpuStatsTaskHandle);/* 任务控制块指针 */
-
- if (pdPASS == xReturn)
- {
- printf("create cpu stats task success!\r\n");
- }
-
- vTaskDelete(appTaskCreateHandle); //删除 AppTaskCreate 任务
-
- taskEXIT_CRITICAL(); //退出临界区
-}
-
-BaseType_t TestFreeRTOSEntry()
-{
- BaseType_t xReturn = pdPASS;/* 定义一个创建信息返回值,默认为 pdPASS */
-
- printf("get cpu stats TestCpuStatsEntry\r\n");
- xReturn = xTaskCreate((TaskFunction_t )AppTaskCreate, /* 任务入口函数 */
- (const char* )"AppTaskCreate",/* 任务名字 */
- (uint16_t )512, /* 任务栈大小 */
- (void* )NULL,/* 任务入口函数参数 */
- (UBaseType_t )1, /* 任务的优先级 */
- (TaskHandle_t* )&appTaskCreateHandle); /* 任务控制 */
-
- return xReturn;
-}
-
int main()
{
- printf("main hello ft Date: %s, Time: %s\n", __DATE__, __TIME__);
+ printf("Hello main func,FT Date: %s, Time: %s\n", __DATE__, __TIME__);
BaseType_t xReturn = pdPASS;
- /* 创建 CPU stats 任务 */
- xReturn = TestFreeRTOSEntry();
- if(xReturn != pdPASS)
- goto FAIL_EXIT;
-
- xReturn = LSUserShellTask() ;
- if(xReturn != pdPASS)
+ xReturn = LSUserShellTask();
+ if (xReturn != pdPASS)
+ {
goto FAIL_EXIT;
+ }
- vTaskStartScheduler(); /* 启动任务,开启调度 */
+ vTaskStartScheduler(); /* 启动任务,开启调度 */
while (1); /* 正常不会执行到这里 */
FAIL_EXIT:
- printf("failed 0x%x \r\n", xReturn);
+ printf("Failed,the xReturn value is 0x%x. \r\n", xReturn);
return 0;
}
\ No newline at end of file
diff --git a/example/template/sdkconfig b/example/template/sdkconfig
index b8c6027e4cfb07936cd1c7588a1c3ba24241457e..dcf9e9eb5fc9f6e4613357a995e8c3c95b8659b5 100644
--- a/example/template/sdkconfig
+++ b/example/template/sdkconfig
@@ -26,8 +26,8 @@ CONFIG_USE_MMU=y
#
# CONFIG_TARGET_F2000_4 is not set
# CONFIG_TARGET_D2000 is not set
-# CONFIG_TARGET_E2000Q is not set
-CONFIG_TARGET_E2000D=y
+CONFIG_TARGET_E2000Q=y
+# CONFIG_TARGET_E2000D is not set
# CONFIG_TARGET_E2000S is not set
CONFIG_TARGET_E2000=y
CONFIG_DEFAULT_DEBUG_PRINT_UART1=y
@@ -67,6 +67,7 @@ CONFIG_ENABLE_Pl011_UART=y
# CONFIG_USE_ADC is not set
# CONFIG_USE_PWM is not set
# CONFIG_USE_IPC is not set
+# CONFIG_USE_MEDIA is not set
# end of Components Configuration
CONFIG_USE_NEW_LIBC=y
@@ -107,6 +108,15 @@ CONFIG_FPU_STACK_SIZE=0x1000
#
# Compiler Options
#
+
+#
+# Cross-Compiler Setting
+#
+CONFIG_GCC_OPTIMIZE_LEVEL=0
+# CONFIG_USE_EXT_COMPILER is not set
+# CONFIG_USE_KLIN_SYS is not set
+# end of Cross-Compiler Setting
+
CONFIG_OUTPUT_BINARY=y
# end of Compiler Options
# end of Building Option
@@ -143,6 +153,7 @@ CONFIG_FREERTOS_USE_UART=y
# Freertos Eth Drivers
#
# CONFIG_FREERTOS_USE_XMAC is not set
+# CONFIG_FREERTOS_USE_GMAC is not set
# end of Freertos Eth Drivers
#
@@ -164,12 +175,6 @@ CONFIG_FREERTOS_USE_UART=y
# CONFIG_FREERTOS_USE_FGDMA is not set
# end of Freertos DMA Drivers
-#
-# Freertos MMC Drivers
-#
-# CONFIG_FREERTOS_USE_FSDIO is not set
-# end of Freertos MMC Drivers
-
#
# Freertos Adc Drivers
#
@@ -181,14 +186,32 @@ CONFIG_FREERTOS_USE_UART=y
#
# CONFIG_FREERTOS_USE_CAN is not set
# end of Freertos Can Drivers
+
+#
+# Freertos I2c Drivers
+#
+# CONFIG_FREERTOS_USE_I2C is not set
+# end of Freertos I2c Drivers
+
+#
+# Freertos Mio Drivers
+#
+# CONFIG_FREERTOS_USE_MIO is not set
+# end of Freertos Mio Drivers
+
+#
+# Freertos Timer Drivers
+#
+# CONFIG_FREERTOS_USE_TIMER is not set
+# end of Freertos Timer Drivers
# end of Component Configuration
#
-# FreeRTOS Setting
+# Third-Party Configuration
#
# CONFIG_USE_LWIP is not set
CONFIG_USE_BACKTRACE=y
-# CONFIG_USE_FATFS is not set
+# CONFIG_USE_FATFS_0_1_4 is not set
# CONFIG_USE_SFUD is not set
# CONFIG_USE_SPIFFS is not set
# CONFIG_USE_AMP is not set
@@ -206,4 +229,27 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y
CONFIG_USE_TLSF=y
# CONFIG_USE_SDMMC_CMD is not set
# CONFIG_USE_CHERRY_USB is not set
-# end of FreeRTOS Setting
+# end of Third-Party Configuration
+
+#
+# Kernel Configuration
+#
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_MAX_PRIORITIES=32
+CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13
+CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
+# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set
+CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240
+CONFIG_FREERTOS_TASK_FPU_SUPPORT=1
+# end of Kernel Configuration
diff --git a/example/template/sdkconfig.h b/example/template/sdkconfig.h
index 3690ee18f70d80880a7bd41a0b63d91be9249903..bf6c6b6564af55188f7b46bbcc2b84bb98e7ffa7 100644
--- a/example/template/sdkconfig.h
+++ b/example/template/sdkconfig.h
@@ -24,8 +24,8 @@
/* CONFIG_TARGET_F2000_4 is not set */
/* CONFIG_TARGET_D2000 is not set */
-/* CONFIG_TARGET_E2000Q is not set */
-#define CONFIG_TARGET_E2000D
+#define CONFIG_TARGET_E2000Q
+/* CONFIG_TARGET_E2000D is not set */
/* CONFIG_TARGET_E2000S is not set */
#define CONFIG_TARGET_E2000
#define CONFIG_DEFAULT_DEBUG_PRINT_UART1
@@ -62,6 +62,7 @@
/* CONFIG_USE_ADC is not set */
/* CONFIG_USE_PWM is not set */
/* CONFIG_USE_IPC is not set */
+/* CONFIG_USE_MEDIA is not set */
/* end of Components Configuration */
#define CONFIG_USE_NEW_LIBC
/* end of Standalone Setting */
@@ -98,6 +99,12 @@
/* Compiler Options */
+/* Cross-Compiler Setting */
+
+#define CONFIG_GCC_OPTIMIZE_LEVEL 0
+/* CONFIG_USE_EXT_COMPILER is not set */
+/* CONFIG_USE_KLIN_SYS is not set */
+/* end of Cross-Compiler Setting */
#define CONFIG_OUTPUT_BINARY
/* end of Compiler Options */
/* end of Building Option */
@@ -127,6 +134,7 @@
/* Freertos Eth Drivers */
/* CONFIG_FREERTOS_USE_XMAC is not set */
+/* CONFIG_FREERTOS_USE_GMAC is not set */
/* end of Freertos Eth Drivers */
/* Freertos Gpio Drivers */
@@ -145,11 +153,6 @@
/* CONFIG_FREERTOS_USE_FGDMA is not set */
/* end of Freertos DMA Drivers */
-/* Freertos MMC Drivers */
-
-/* CONFIG_FREERTOS_USE_FSDIO is not set */
-/* end of Freertos MMC Drivers */
-
/* Freertos Adc Drivers */
/* CONFIG_FREERTOS_USE_ADC is not set */
@@ -159,13 +162,28 @@
/* CONFIG_FREERTOS_USE_CAN is not set */
/* end of Freertos Can Drivers */
+
+/* Freertos I2c Drivers */
+
+/* CONFIG_FREERTOS_USE_I2C is not set */
+/* end of Freertos I2c Drivers */
+
+/* Freertos Mio Drivers */
+
+/* CONFIG_FREERTOS_USE_MIO is not set */
+/* end of Freertos Mio Drivers */
+
+/* Freertos Timer Drivers */
+
+/* CONFIG_FREERTOS_USE_TIMER is not set */
+/* end of Freertos Timer Drivers */
/* end of Component Configuration */
-/* FreeRTOS Setting */
+/* Third-Party Configuration */
/* CONFIG_USE_LWIP is not set */
#define CONFIG_USE_BACKTRACE
-/* CONFIG_USE_FATFS is not set */
+/* CONFIG_USE_FATFS_0_1_4 is not set */
/* CONFIG_USE_SFUD is not set */
/* CONFIG_USE_SPIFFS is not set */
/* CONFIG_USE_AMP is not set */
@@ -181,6 +199,28 @@
#define CONFIG_USE_TLSF
/* CONFIG_USE_SDMMC_CMD is not set */
/* CONFIG_USE_CHERRY_USB is not set */
-/* end of FreeRTOS Setting */
+/* end of Third-Party Configuration */
+
+/* Kernel Configuration */
+
+#define CONFIG_FREERTOS_OPTIMIZED_SCHEDULER
+#define CONFIG_FREERTOS_HZ 1000
+#define CONFIG_FREERTOS_MAX_PRIORITIES 32
+#define CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES 13
+#define CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES 11
+#define CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS 1
+#define CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE 1024
+#define CONFIG_FREERTOS_MAX_TASK_NAME_LEN 32
+#define CONFIG_FREERTOS_TIMER_TASK_PRIORITY 1
+#define CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH 2048
+#define CONFIG_FREERTOS_TIMER_QUEUE_LENGTH 10
+#define CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE 0
+#define CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS
+#define CONFIG_FREERTOS_USE_TRACE_FACILITY
+#define CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS
+/* CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set */
+#define CONFIG_FREERTOS_TOTAL_HEAP_SIZE 10240
+#define CONFIG_FREERTOS_TASK_FPU_SUPPORT 1
+/* end of Kernel Configuration */
#endif
diff --git a/install.py b/install.py
index aa2b9064c2d613ddcaffa67aba874628bdfc7551..0a96337cf45f3e8e255d66faf08be1f996ad99ec 100644
--- a/install.py
+++ b/install.py
@@ -86,7 +86,7 @@ os.system("chmod +x ./make/*.mk --silent ")
os.system("chmod +x ./lib/Kconfiglib/*.py --silent ")
# Add standalone sdk
-standalone_sdk_v="0.4.0"
+standalone_sdk_v="v1.0.0"
standalone_path=freertos_sdk_path + '/standalone'
standalone_branche="release"
standalone_remote="https://gitee.com/phytium_embedded/phytium-standalone-sdk.git"
@@ -105,10 +105,16 @@ if not os.path.exists(standalone_path):
os.system("echo \"standalone.mk\" >> {}".format(r'.git/info/sparse-checkout'))
os.system("echo \"lib/*\" >> {}".format(r'.git/info/sparse-checkout'))
os.system("echo \"doc/*\" >> {}".format(r'.git/info/sparse-checkout'))
-
+ os.system("echo \"third-party/fatfs-0.1.4/*\" >> {}".format(r'.git/info/sparse-checkout'))
+ os.system("echo \"third-party/sdmmc/*\" >> {}".format(r'.git/info/sparse-checkout'))
+ os.system("echo \"third-party/lwip-2.1.2/*\" >> {}".format(r'.git/info/sparse-checkout'))
+
+
os.system("git checkout {}".format(standalone_sdk_v))
print('[1]: Standalone sdk download is succeed')
os.chdir(current_path) # 切换回当前路径
+ lwip_port_arch_path=standalone_path + '/third-party/lwip-2.1.2/ports/arch'
+ shutil.rmtree(lwip_port_arch_path)
else:
print('[1]: Standalone sdk is exist')
pass
diff --git a/make/Kconfig b/make/Kconfig
index 69db46689f9c6dfe822b800a4ca4f942435a5276..631b56ae14dff1dd3a57df8e9cb47858965e64e2 100644
--- a/make/Kconfig
+++ b/make/Kconfig
@@ -1,6 +1,30 @@
menu "Compiler Options"
+
+menu "Cross-Compiler Setting"
+
+ config GCC_OPTIMIZE_LEVEL
+ int "Set Optimize Level"
+ default 0
+ help
+ Set Optimize level for GCC
+
+ config USE_EXT_COMPILER
+ bool "Use User-Specified Compiler"
+ default n
+
+ config USE_KLIN_SYS
+ bool "Use Klin system"
+ default n
+
+ config EXT_COMPILER_PREFIX
+ depends on USE_EXT_COMPILER
+ string ""
+ default "arm-none-eabi-" if TARGET_ARMV8_AARCH32
+ default "aarch64-none-elf-" if TARGET_ARMV8_AARCH64
+endmenu
+
config OUTPUT_BINARY
bool "Build *.bin as Ouput"
default n
diff --git a/make/complier.mk b/make/complier.mk
index c2a7c60d3c234b29b0db21636d1d8388afd2cfc1..4da6e0603cba55a1ea57789384166a2910ef05e7 100755
--- a/make/complier.mk
+++ b/make/complier.mk
@@ -14,7 +14,8 @@
APP ?= $(CONFIG_TARGET_NAME)
QUIET ?=@
-OPT_LEVEL ?= 0
+# OPT_LEVEL ?= 0
+OPT_LEVEL ?= $(CONFIG_GCC_OPTIMIZE_LEVEL)
INC_DIR ?= # include 目录
SRC_DIR ?= # 源文件目录
@@ -86,7 +87,7 @@ RM_DIRS = $(foreach dir,$(1),rm -rf $(dir)$(EOL))
DEPEND_FLAGS = -MD -MF $@.d
CPPFLAGS = $(DEFINES) $(INCLUDES) $(DEPEND_FLAGS) $(CPPFLAGS_EXTRA)
-CFLAGS = $(DEBUG_FLAGS) -DGUEST -ffreestanding -Wextra -g -O$(OPT_LEVEL)
+CFLAGS = $(DEBUG_FLAGS) -DGUEST -ffreestanding -Wextra -Wno-implicit-fallthrough -g -O$(OPT_LEVEL)
ASFLAGS = $(CFLAGS)
#mkdir 创建输出文件目录
@@ -137,6 +138,8 @@ ifdef CONFIG_USE_NEW_LIBC
LDFLAGS += -lgcc -L $(LIBPATH)
endif
+OBJ_FILES += $(LIB_OBJ_FILES)
+
# 不使用Libc库
ifdef CONFIG_USE_NOSTD_LIBC
LDFLAGS += -nostdlib -nostartfiles
diff --git a/third-party/Kconfig b/third-party/Kconfig
index 9276ae4f3373c3ae43d40a570e037d29b65ed276..51c610d9374fd1e788c1f357ace6f7b95bf25115 100644
--- a/third-party/Kconfig
+++ b/third-party/Kconfig
@@ -16,15 +16,15 @@ config USE_BACKTRACE
prompt "Display a backtrace."
default y
-config USE_FATFS
+config USE_FATFS_0_1_4
bool
- prompt "Use FATFS"
+ prompt "Use FATFS(0.1.4)"
default n
help
Include FATFS
- if USE_FATFS
- source "$(FREERTOS_SDK_ROOT)/third-party/fatfs-0.1.3/Kconfig"
+ if USE_FATFS_0_1_4
+ source "$(FREERTOS_SDK_ROOT)/third-party/fatfs-0.1.4/Kconfig"
endif
config USE_SFUD
@@ -107,4 +107,5 @@ config USE_CHERRY_USB
if USE_CHERRY_USB
source "$(FREERTOS_SDK_ROOT)/third-party/cherryusb-0.6.0/Kconfig"
- endif
\ No newline at end of file
+ endif
+
diff --git a/third-party/cherryusb-0.6.0/port/xhci/usb_config.h b/third-party/cherryusb-0.6.0/port/xhci/usb_config.h
index 0869d15e7488e1b569cc1b238a16420a45bb8d79..c7e5547ede5c5c10172cae44847676f81045602f 100644
--- a/third-party/cherryusb-0.6.0/port/xhci/usb_config.h
+++ b/third-party/cherryusb-0.6.0/port/xhci/usb_config.h
@@ -1,39 +1,43 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: usb_config.h
* Date: 2022-09-19 17:28:44
* LastEditTime: 2022-09-19 17:28:45
* Description: This files is for usb hc xhci configuration
- *
- * Modify History:
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
* 1.0 zhugengyu 2022/9/19 init commit
*/
-#ifndef CHERRYUSB_CONFIG_H
-#define CHERRYUSB_CONFIG_H
+#ifndef USB_CONFIG_H
+#define USB_CONFIG_H
+#ifdef __cplusplus
+extern "C"
+{
+#endif
/* ================ USB common Configuration ================ */
#ifndef CONFIG_USB_DBG_LEVEL
-#define CONFIG_USB_DBG_LEVEL USB_DBG_ERROR
+ #define CONFIG_USB_DBG_LEVEL USB_DBG_ERROR
#endif
#ifndef CONFIG_USB_PRINTF
-#define CONFIG_USB_PRINTF printf
+ #define CONFIG_USB_PRINTF printf
#endif
/* Enable print with color */
@@ -41,7 +45,7 @@
/* data align size when use dma */
#ifndef CONFIG_USB_ALIGN_SIZE
-#define CONFIG_USB_ALIGN_SIZE 4
+ #define CONFIG_USB_ALIGN_SIZE 4
#endif
/* attribute data into no cache ram */
@@ -54,19 +58,19 @@
#ifndef CONFIG_USBDEV_MSC_BLOCK_SIZE
-#define CONFIG_USBDEV_MSC_BLOCK_SIZE 512
+ #define CONFIG_USBDEV_MSC_BLOCK_SIZE 512
#endif
#ifndef CONFIG_USBDEV_MSC_MANUFACTURER_STRING
-#define CONFIG_USBDEV_MSC_MANUFACTURER_STRING ""
+ #define CONFIG_USBDEV_MSC_MANUFACTURER_STRING ""
#endif
#ifndef CONFIG_USBDEV_MSC_PRODUCT_STRING
-#define CONFIG_USBDEV_MSC_PRODUCT_STRING ""
+ #define CONFIG_USBDEV_MSC_PRODUCT_STRING ""
#endif
#ifndef CONFIG_USBDEV_MSC_VERSION_STRING
-#define CONFIG_USBDEV_MSC_VERSION_STRING "0.01"
+ #define CONFIG_USBDEV_MSC_VERSION_STRING "0.01"
#endif
// #define CONFIG_USBHOST_GET_STRING_DESC
@@ -76,21 +80,21 @@
#define CONFIG_INPUT_MOUSE_WHEEL
#ifdef CONFIG_USBDEV_MSC_THREAD
-#ifndef CONFIG_USBDEV_MSC_STACKSIZE
-#define CONFIG_USBDEV_MSC_STACKSIZE 2048
-#endif
+ #ifndef CONFIG_USBDEV_MSC_STACKSIZE
+ #define CONFIG_USBDEV_MSC_STACKSIZE 2048
+ #endif
-#ifndef CONFIG_USBDEV_MSC_PRIO
-#define CONFIG_USBDEV_MSC_PRIO 4
-#endif
+ #ifndef CONFIG_USBDEV_MSC_PRIO
+ #define CONFIG_USBDEV_MSC_PRIO 4
+ #endif
#endif
#ifndef CONFIG_USBDEV_AUDIO_VERSION
-#define CONFIG_USBDEV_AUDIO_VERSION 0x0100
+ #define CONFIG_USBDEV_AUDIO_VERSION 0x0100
#endif
#ifndef CONFIG_USBDEV_AUDIO_MAX_CHANNEL
-#define CONFIG_USBDEV_AUDIO_MAX_CHANNEL 8
+ #define CONFIG_USBDEV_AUDIO_MAX_CHANNEL 8
#endif
/* ================ USB HOST Stack Configuration ================== */
@@ -105,21 +109,21 @@
#define CONFIG_USBHOST_DEV_NAMELEN 16
#ifndef CONFIG_USBHOST_PSC_PRIO
-#define CONFIG_USBHOST_PSC_PRIO 4
+ #define CONFIG_USBHOST_PSC_PRIO 4
#endif
#ifndef CONFIG_USBHOST_PSC_STACKSIZE
-#define CONFIG_USBHOST_PSC_STACKSIZE 2048
+ #define CONFIG_USBHOST_PSC_STACKSIZE 2048
#endif
/* Ep0 max transfer buffer */
#define CONFIG_USBHOST_REQUEST_BUFFER_LEN 512
#ifndef CONFIG_USBHOST_CONTROL_TRANSFER_TIMEOUT
-#define CONFIG_USBHOST_CONTROL_TRANSFER_TIMEOUT 500
+ #define CONFIG_USBHOST_CONTROL_TRANSFER_TIMEOUT 500
#endif
#ifndef CONFIG_USBHOST_MSC_TIMEOUT
-#define CONFIG_USBHOST_MSC_TIMEOUT 5000
+ #define CONFIG_USBHOST_MSC_TIMEOUT 5000
#endif
/* ================ USB Device Port Configuration ================*/
@@ -132,6 +136,10 @@
#define CONFIG_USBHOST_PIPE_NUM 10
/* ================ XHCI Configuration ================ */
-#define CONFIG_USBHOST_XHCI
+#define CONFIG_USBHOST_XHCI
+
+#ifdef __cplusplus
+}
+#endif
#endif
diff --git a/third-party/cherryusb-0.6.0/port/xhci/usb_hc_xhci.c b/third-party/cherryusb-0.6.0/port/xhci/usb_hc_xhci.c
index 0d9100d6649cededdcc141d3b99b811c24022e48..d153b5bf18038ddb3b2a1f0cb12bd6a5d3809bdb 100644
--- a/third-party/cherryusb-0.6.0/port/xhci/usb_hc_xhci.c
+++ b/third-party/cherryusb-0.6.0/port/xhci/usb_hc_xhci.c
@@ -1,22 +1,22 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: usb_hc_xhci.c
* Date: 2022-09-19 17:24:36
* LastEditTime: 2022-09-19 17:24:36
* Description: This files is for xhci function implementation
- *
- * Modify History:
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
* 1.0 zhugengyu 2022/9/19 init commit
@@ -33,7 +33,8 @@
/************************** Variable Definitions *****************************/
/* input is xhci speed */
-static const char *speed_name[16] = {
+static const char *speed_name[16] =
+{
[ 0 ] = " - ",
[ 1 ] = "Full",
[ 2 ] = "Low",
@@ -41,7 +42,8 @@ static const char *speed_name[16] = {
[ 4 ] = "Super",
};
-static const int speed_from_xhci[16] = {
+static const int speed_from_xhci[16] =
+{
[ 0 ] = -1,
[ 1 ] = USB_SPEED_FULL,
[ 2 ] = USB_SPEED_LOW,
@@ -50,7 +52,8 @@ static const int speed_from_xhci[16] = {
[ 5 ... 15 ] = -1,
};
-static const int speed_to_xhci[] = {
+static const int speed_to_xhci[] =
+{
[ USB_SPEED_FULL ] = 1,
[ USB_SPEED_LOW ] = 2,
[ USB_SPEED_HIGH ] = 3,
@@ -68,13 +71,13 @@ struct xhci_pipe *xhci_event_process(struct xhci_s *xhci);
static void xhci_dump_slot_ctx(const struct xhci_slotctx *const sc)
{
USB_LOG_DBG("ctx[0]=0x%x\n", sc->ctx[0]);
- USB_LOG_DBG(" route=0x%x\n",
- XHCI_SLOTCTX_0_ROUTE_GET(sc->ctx[0]));
+ USB_LOG_DBG(" route=0x%x\n",
+ XHCI_SLOTCTX_0_ROUTE_GET(sc->ctx[0]));
USB_LOG_DBG("ctx[1]=0x%x\n", sc->ctx[1]);
USB_LOG_DBG("ctx[2]=0x%x\n", sc->ctx[2]);
- USB_LOG_DBG(" tt-port=0x%x, tt-hub-slot=0x%x\n",
- XHCI_SLOTCTX_2_HUB_PORT_GET(sc->ctx[2]),
- XHCI_SLOTCTX_2_HUB_SLOT_GET(sc->ctx[2]));
+ USB_LOG_DBG(" tt-port=0x%x, tt-hub-slot=0x%x\n",
+ XHCI_SLOTCTX_2_HUB_PORT_GET(sc->ctx[2]),
+ XHCI_SLOTCTX_2_HUB_SLOT_GET(sc->ctx[2]));
USB_LOG_DBG("ctx[3]=0x%x\n", sc->ctx[3]);
}
@@ -82,7 +85,7 @@ static void xhci_dump_ep_ctx(const struct xhci_epctx *const ec)
{
USB_LOG_DBG("ctx[0]=0x%x\n", ec->ctx[0]);
USB_LOG_DBG("ctx[1]=0x%x\n", ec->ctx[1]);
- USB_LOG_DBG(" ep_type=%d, mps=%d\n",
+ USB_LOG_DBG(" ep_type=%d, mps=%d\n",
XHCI_EPCTX_1_EPTYPE_GET(ec->ctx[1]),
XHCI_EPCTX_1_MPS_GET(ec->ctx[1]));
USB_LOG_DBG("deq_low=0x%x\n", ec->deq_low);
@@ -95,17 +98,19 @@ static void xhci_dump_input_ctx(struct xhci_s *xhci, const struct xhci_inctx *co
USB_LOG_DBG("===input ctx====\n");
USB_LOG_DBG("add=0x%x\n", inctx->add);
USB_LOG_DBG("del=0x%x\n", inctx->del);
- if (inctx->add & (0x1)) {
+ if (inctx->add & (0x1))
+ {
USB_LOG_DBG("===slot ctx====\n");
- const struct xhci_slotctx *const sc = (void*)&inctx[1 << xhci->context64];
+ const struct xhci_slotctx *const sc = (void *)&inctx[1 << xhci->context64];
xhci_dump_slot_ctx(sc);
}
- for (int epid = 1; epid <= 31; epid++){
+ for (int epid = 1; epid <= 31; epid++)
+ {
if (inctx->add & (0x1 << (epid)))
{
USB_LOG_DBG("===ep-%d ctx====\n", epid);
- const struct xhci_epctx *const ec = (void*)&inctx[(epid+1) << xhci->context64];
+ const struct xhci_epctx *const ec = (void *)&inctx[(epid + 1) << xhci->context64];
xhci_dump_ep_ctx(ec);
}
}
@@ -116,7 +121,9 @@ static void xhci_dump_pipe(const struct xhci_pipe *const ppipe)
{
USB_LOG_DBG("pipe@%p\n", ppipe);
if (NULL == ppipe)
+ {
return;
+ }
USB_LOG_DBG("epaddr=%d\n", ppipe->epaddr);
USB_LOG_DBG("speed=%d\n", ppipe->speed);
@@ -137,9 +144,11 @@ static int xhci_wait_bit(unsigned long reg_off, uint32_t mask, uint32_t value, u
{
uint32_t delay = 0U; /* calc wait end time */
- while ((readl(reg_off) & mask) != value) {
- if (++delay > timeout) { /* check if timeout */
- USB_LOG_ERR("wait timeout !!!\n");
+ while ((readl(reg_off) & mask) != value)
+ {
+ if (++delay > timeout) /* check if timeout */
+ {
+ USB_LOG_ERR("Wait timeout !!!\n");
return -1;
}
usb_osal_msleep(1U);
@@ -154,10 +163,10 @@ static void xhci_print_port_state(const char *prefix, uint32_t port, uint32_t po
uint32_t speed = XHCI_REG_OP_PORTS_PORTSC_PORT_SPEED_GET(portsc);
USB_LOG_DBG("%s port #%d: 0x%08x,%s%s pls %d, speed %d [%s]\n",
- prefix, port + 1, portsc,
- (portsc & XHCI_REG_OP_PORTS_PORTSC_PP) ? " powered," : "",
- (portsc & XHCI_REG_OP_PORTS_PORTSC_PED) ? " enabled," : "",
- pls, speed, speed_name[speed]);
+ prefix, port + 1, portsc,
+ (portsc & XHCI_REG_OP_PORTS_PORTSC_PP) ? " powered," : "",
+ (portsc & XHCI_REG_OP_PORTS_PORTSC_PED) ? " enabled," : "",
+ pls, speed, speed_name[speed]);
}
static inline uint32_t xhci_readl_port(struct xhci_s *xhci, uint32_t port, uint32_t offset)
@@ -195,10 +204,10 @@ static void xhci_setup_mmio(struct xhci_s *xhci, unsigned long base_addr)
xhci->ports = XHCI_REG_CAP_HCS1_MAX_PORTS_GET(xhci->hcs[0]); /* bit[31:24] max ports */
xhci->slots = XHCI_REG_CAP_HCS1_MAX_SLOTS_GET(xhci->hcs[0]); /* bit[7:0] max device slots */
-
- /* For example, using the offset of Base is 1000h and the xECP value of 0068h, we can calculated
+
+ /* For example, using the offset of Base is 1000h and the xECP value of 0068h, we can calculated
the following effective address of the first extended capability:
- 1000h + (0068h << 2) -> 1000h + 01A0h -> 11A0h */
+ 1000h + (0068h << 2) -> 1000h + 01A0h -> 11A0h */
xhci->xcap = XHCI_REG_CAP_HCC_XECP_GET(xhci->hcc) << 2; /* bit[31:16] xHCI extended cap pointer */
xhci->context64 = (XHCI_REG_CAP_HCC_CSZ & xhci->hcc) ? true : false;
@@ -207,11 +216,11 @@ static void xhci_setup_mmio(struct xhci_s *xhci, unsigned long base_addr)
USB_LOG_INFO(" oper base: 0x%x\n", xhci->op);
USB_LOG_INFO(" doorbell base: 0x%x\n", xhci->db);
USB_LOG_INFO(" runtime base: 0x%x\n", xhci->ir);
- USB_LOG_INFO(" port base: 0x%x\n", xhci->pr);
- USB_LOG_INFO(" xcap base: 0x%x\n", xhci->xcap);
+ USB_LOG_INFO(" port base: 0x%x\n", xhci->pr);
+ USB_LOG_INFO(" xcap base: 0x%x\n", xhci->xcap);
- USB_LOG_INFO(" slot num: 0x%x\n", xhci->slots);
- USB_LOG_INFO(" port num: 0x%x\n", xhci->ports);
+ USB_LOG_INFO(" slot num: 0x%x\n", xhci->slots);
+ USB_LOG_INFO(" port num: 0x%x\n", xhci->ports);
USB_LOG_INFO(" context: %d bit\n", xhci->context64 ? 64 : 32);
}
@@ -222,36 +231,45 @@ static int xhci_hub_reset(struct xhci_s *xhci, uint32_t port)
uint32_t portsc = xhci_readl_port(xhci, port, XHCI_REG_OP_PORTS_PORTSC);
if (!(portsc & XHCI_REG_OP_PORTS_PORTSC_CCS)) /* double check if connected */
/* Device no longer connected?! */
+ {
return -1;
+ }
- switch (XHCI_REG_OP_PORTS_PORTSC_PLS_GET(portsc)) {
- case PLS_U0:
- /* A USB3 port - controller automatically performs reset */
- break;
- case PLS_POLLING:
- /* A USB2 port - perform device reset */
- xhci_print_port_state(__func__, port, portsc);
- xhci_writel_port(xhci, port, XHCI_REG_OP_PORTS_PORTSC,
- portsc | XHCI_REG_OP_PORTS_PORTSC_PR); /* reset port */
- break;
- default:
- return -1;
+ switch (XHCI_REG_OP_PORTS_PORTSC_PLS_GET(portsc))
+ {
+ case PLS_U0:
+ /* A USB3 port - controller automatically performs reset */
+ break;
+ case PLS_POLLING:
+ /* A USB2 port - perform device reset */
+ xhci_print_port_state(__func__, port, portsc);
+ xhci_writel_port(xhci, port, XHCI_REG_OP_PORTS_PORTSC,
+ portsc | XHCI_REG_OP_PORTS_PORTSC_PR); /* reset port */
+ break;
+ default:
+ return -1;
}
// Wait for device to complete reset and be enabled
uint32_t end = 1000U, start = 0U;
- for (;;) {
+ for (;;)
+ {
portsc = xhci_readl_port(xhci, port, XHCI_REG_OP_PORTS_PORTSC);
if (!(portsc & XHCI_REG_OP_PORTS_PORTSC_CCS))
/* Device disconnected during reset */
+ {
return -1;
-
+ }
+
if (portsc & XHCI_REG_OP_PORTS_PORTSC_PED) /* check if port enabled */
/* Reset complete */
+ {
break;
+ }
- if (++start > end) {
- USB_LOG_ERR("wait timeout, portsc=0x%x!!!\n", portsc);
+ if (++start > end)
+ {
+ USB_LOG_ERR("Wait timeout, portsc=0x%x !!!\n", portsc);
return -1;
}
@@ -267,9 +285,12 @@ static int xhci_hub_reset(struct xhci_s *xhci, uint32_t port)
static void xhci_trb_fill(struct xhci_ring *ring, void *data, uint32_t xferlen, uint32_t flags)
{
struct xhci_trb *dst = &ring->ring[ring->nidx];
- if (flags & TRB_TR_IDT) {
+ if (flags & TRB_TR_IDT)
+ {
memcpy(&dst->ptr_low, data, xferlen);
- } else {
+ }
+ else
+ {
dst->ptr_low = (uint32_t)(unsigned long)data;
#ifdef XHCI_AARCH64
dst->ptr_high = (uint32_t)((uint64_t)data >> 32U);
@@ -285,9 +306,10 @@ static void xhci_trb_fill(struct xhci_ring *ring, void *data, uint32_t xferlen,
/* Queue a TRB onto a ring, wrapping ring as needed */
static void xhci_trb_queue(struct xhci_ring *ring, void *data, uint32_t xferlen, uint32_t flags)
{
- if (ring->nidx >= ARRAY_SIZE(ring->ring) - 1) { /* if it is the last trb in the list */
+ if (ring->nidx >= ARRAY_SIZE(ring->ring) - 1) /* if it is the last trb in the list */
+ {
/* indicate the end of ring, bit[1], toggle cycle = 1, xHc shall toggle cycle bit interpretation */
- xhci_trb_fill(ring, ring->ring, 0, (TR_LINK << 10) | TRB_LK_TC);
+ xhci_trb_fill(ring, ring->ring, 0, (TR_LINK << 10) | TRB_LK_TC);
ring->nidx = 0; /* adjust dequeue index to 0 */
ring->cs ^= 1; /* toggle cycle interpretation of sw */
}
@@ -309,12 +331,16 @@ static int xhci_event_wait(struct xhci_s *xhci,
{
int ret = CC_SUCCESS;
- if (pipe->timeout > 0){
+ if (pipe->timeout > 0)
+ {
ret = usb_osal_sem_take(pipe->waitsem, pipe->timeout);
- if (ret < 0) {
+ if (ret < 0)
+ {
ret = CC_TIMEOUT;
- } else {
- ret = TRB_CC_GET(ring->evt.status); /* bit[31:24] completion code */
+ }
+ else
+ {
+ ret = TRB_CC_GET(ring->evt.status); /* bit[31:24] completion code */
}
}
@@ -326,20 +352,21 @@ static int xhci_cmd_abort(struct xhci_s *xhci, struct xhci_pipe *pipe)
uint64_t crcr;
crcr = readq(xhci->op + XHCI_REG_OP_CRCR);
- USB_LOG_WRN("aborting command, crcr = 0x%llx\r\n", crcr);
+ USB_LOG_WRN("Aborting command, crcr = 0x%llx .\r\n", crcr);
crcr |= XHCI_REG_OP_CRCR_CA;
writeq(xhci->op + XHCI_REG_OP_CRCR, crcr); /* abort command */
usb_osal_msleep(500); /* allow time for command to abort */
crcr = readl(xhci->op + XHCI_REG_OP_CRCR);
- if (XHCI_REG_OP_CRCR_CRR & crcr) {
- /* Device has failed to abort a command and is almost
- * certainly beyond repair. Reset device, abandoning
- * all state, and mark device as failed to avoid
- * delays on any future command attempts.
- */
- USB_LOG_ERR("failed to abort command \r\n");
+ if (XHCI_REG_OP_CRCR_CRR & crcr)
+ {
+ /* Device has failed to abort a command and is almost
+ * certainly beyond repair. Reset device, abandoning
+ * all state, and mark device as failed to avoid
+ * delays on any future command attempts.
+ */
+ USB_LOG_ERR("Failed to abort command.\r\n");
return -1;
}
@@ -357,14 +384,16 @@ static int xhci_cmd_abort(struct xhci_s *xhci, struct xhci_pipe *pipe)
}
/* Submit a command to the xhci controller ring */
-static int xhci_cmd_submit(struct xhci_s *xhci, struct xhci_inctx *inctx,
+static int xhci_cmd_submit(struct xhci_s *xhci, struct xhci_inctx *inctx,
struct xhci_pipe *pipe, uint32_t flags)
{
- if (inctx) {
- struct xhci_slotctx *slot = (void*)&inctx[1 << xhci->context64];
+ if (inctx)
+ {
+ struct xhci_slotctx *slot = (void *)&inctx[1 << xhci->context64];
uint32_t port = XHCI_SLOTCTX_1_ROOT_PORT_GET(slot->ctx[1]) - 1;
uint32_t portsc = xhci_readl_port(xhci, port, XHCI_REG_OP_PORTS_PORTSC);
- if (!(portsc & XHCI_REG_OP_PORTS_PORTSC_CCS)) {
+ if (!(portsc & XHCI_REG_OP_PORTS_PORTSC_CCS))
+ {
/* Device no longer connected?! */
xhci_print_port_state(__func__, port, portsc);
return CC_DISCONNECTED;
@@ -385,7 +414,8 @@ static int xhci_cmd_submit(struct xhci_s *xhci, struct xhci_inctx *inctx,
xhci_doorbell(xhci, 0, 0); /* 0 = db host controller, 0 = db targe hc command */
int rc = xhci_event_wait(xhci, pipe, xhci->cmds);
- if (CC_SUCCESS != rc) {
+ if (CC_SUCCESS != rc)
+ {
rc = xhci_cmd_abort(xhci, pipe);
}
@@ -404,7 +434,9 @@ static int xhci_cmd_enable_slot(struct xhci_s *xhci, struct xhci_pipe *pipe)
{
int cc = xhci_cmd_submit(xhci, NULL, pipe, TRB_TYPE_SET(CR_ENABLE_SLOT));
if (cc != CC_SUCCESS)
+ {
return cc;
+ }
struct xhci_trb *evt = &(xhci->cmds->evt);
return TRB_CR_SLOTID_GET(evt->control); /* bit [31:24] slot id */
@@ -422,13 +454,13 @@ static int xhci_cmd_address_device(struct xhci_s *xhci, struct xhci_pipe *pipe,
return xhci_cmd_submit(xhci, inctx, pipe, TRB_TYPE_SET(CR_ADDRESS_DEVICE) | TRB_CR_SLOTID_SET(pipe->slotid));
}
-static int xhci_cmd_configure_endpoint(struct xhci_s *xhci, struct xhci_pipe *pipe,
+static int xhci_cmd_configure_endpoint(struct xhci_s *xhci, struct xhci_pipe *pipe,
struct xhci_inctx *inctx, bool defconfig)
{
USB_LOG_DBG("%s: slotid %d\n", __func__, pipe->slotid);
- return xhci_cmd_submit(xhci, inctx, pipe, TRB_TYPE_SET(CR_CONFIGURE_ENDPOINT) |
- TRB_CR_SLOTID_SET(pipe->slotid) |
- (defconfig ? TRB_CR_DC : 0));
+ return xhci_cmd_submit(xhci, inctx, pipe, TRB_TYPE_SET(CR_CONFIGURE_ENDPOINT) |
+ TRB_CR_SLOTID_SET(pipe->slotid) |
+ (defconfig ? TRB_CR_DC : 0));
}
static int xhci_cmd_evaluate_context(struct xhci_s *xhci, struct xhci_pipe *pipe, struct xhci_inctx *inctx)
@@ -441,8 +473,8 @@ static int xhci_cmd_reset_endpoint(struct xhci_s *xhci, struct xhci_pipe *pipe)
{
USB_LOG_DBG("%s: slotid %d, epid %d\n", __func__, pipe->slotid, pipe->epid);
/* bit[15:10] TRB type, bit[31:24] Slot id */
- return xhci_cmd_submit(xhci, NULL, pipe, TRB_TYPE_SET(CR_RESET_ENDPOINT) | TRB_CR_SLOTID_SET(pipe->slotid) |
- TRB_CR_EPID_SET(pipe->epid));
+ return xhci_cmd_submit(xhci, NULL, pipe, TRB_TYPE_SET(CR_RESET_ENDPOINT) | TRB_CR_SLOTID_SET(pipe->slotid) |
+ TRB_CR_EPID_SET(pipe->epid));
}
static int xhci_controller_configure(struct xhci_s *xhci)
@@ -454,9 +486,10 @@ static int xhci_controller_configure(struct xhci_s *xhci)
xhci->eseg = usb_align(XHCI_ALIGMENT, sizeof(*xhci->eseg)); /* event segment */
xhci->cmds = usb_align(XHCI_RING_SIZE, sizeof(*xhci->cmds)); /* command ring */
xhci->evts = usb_align(XHCI_RING_SIZE, sizeof(*xhci->evts)); /* event ring */
-
- if (!xhci->devs || !xhci->cmds || !xhci->evts || !xhci->eseg) {
- USB_LOG_ERR("allocate memory failed !!!\n");
+
+ if (!xhci->devs || !xhci->cmds || !xhci->evts || !xhci->eseg)
+ {
+ USB_LOG_ERR("Allocate memory failed !!!\n");
goto fail;
}
@@ -469,30 +502,37 @@ static int xhci_controller_configure(struct xhci_s *xhci)
USB_ASSERT(xhci->cmds->lock);
reg = readl(xhci->op + XHCI_REG_OP_USBCMD);
- if (reg & XHCI_REG_OP_USBCMD_RUN_STOP) { /* if xHc running, stop it first */
+ if (reg & XHCI_REG_OP_USBCMD_RUN_STOP) /* if xHc running, stop it first */
+ {
reg &= ~XHCI_REG_OP_USBCMD_RUN_STOP;
writel(xhci->op + XHCI_REG_OP_USBCMD, reg); /* stop xHc */
- if (xhci_wait_bit(xhci->op + XHCI_REG_OP_USBSTS,
- XHCI_REG_OP_USBSTS_HCH, XHCI_REG_OP_USBSTS_HCH, 32) != 0) /* wait xHc halt */
+ if (xhci_wait_bit(xhci->op + XHCI_REG_OP_USBSTS,
+ XHCI_REG_OP_USBSTS_HCH, XHCI_REG_OP_USBSTS_HCH, 32) != 0) /* wait xHc halt */
+ {
goto fail;
+ }
}
USB_LOG_DBG("%s: resetting\n", __func__);
-
+
writel(xhci->op + XHCI_REG_OP_USBCMD, XHCI_REG_OP_USBCMD_HCRST); /* reset xHc */
if (xhci_wait_bit(xhci->op + XHCI_REG_OP_USBCMD, XHCI_REG_OP_USBCMD_HCRST, 0, 1000) != 0) /* wait reset process done */
+ {
goto fail;
+ }
if (xhci_wait_bit(xhci->op + XHCI_REG_OP_USBSTS, XHCI_REG_OP_USBSTS_CNR, 0, 1000) != 0) /* wait until xHc ready */
+ {
goto fail;
+ }
writel(xhci->op + XHCI_REG_OP_CONFIG, xhci->slots); /* bit[7:0], set max num of device slot enabled */
writeq(xhci->op + XHCI_REG_OP_DCBAAP, (uint64_t)(unsigned long)xhci->devs); /* bit[63:6] device context base address array pointer */
writeq(xhci->op + XHCI_REG_OP_CRCR, (uint64_t)(unsigned long)xhci->cmds | 1); /* command ring pointer, cycle state = 1 */
xhci->cmds->cs = 1; /* cycle state = 1 */
- xhci->eseg->ptr_low = (uint32_t)((unsigned long)xhci->evts); /* event ring pointer */
+ xhci->eseg->ptr_low = (uint32_t)((unsigned long)xhci->evts); /* event ring pointer */
#ifdef XHCI_AARCH64
xhci->eseg->ptr_high = (uint32_t)((unsigned long)xhci->evts >> 32U);
#else
@@ -507,19 +547,23 @@ static int xhci_controller_configure(struct xhci_s *xhci)
reg = xhci->hcs[1];
uint32_t spb = XHCI_REG_CAP_HCS2_MAX_SCRATCHPAD_BUFS_GET(reg); /* bit [25:21] | bit [31:27] max scratchpad buffers */
- if (spb) {
+ if (spb)
+ {
/* reserve scratchpad buffers for xHc */
- USB_LOG_DBG("%s: setup %d scratch pad buffers\n", __func__, spb);
+ USB_LOG_DBG("%s: setup %d scratch pad buffers.\n", __func__, spb);
uint64_t *spba = usb_align(XHCI_ALIGMENT, sizeof(*spba) * spb); /* base addr of scratchpad buffers */
void *pad = usb_align(CONFIG_XHCI_PAGE_SIZE, CONFIG_XHCI_PAGE_SIZE * spb); /* the whole scratchpad buffers */
- if (!spba || !pad) {
- USB_LOG_ERR("allocate memory failed !!!\n");
+ if (!spba || !pad)
+ {
+ USB_LOG_ERR("Allocate memory failed !!!\n");
usb_free(spba);
usb_free(pad);
goto fail;
}
for (uint32_t i = 0; i < spb; i++)
- spba[i] = (uint64_t)(unsigned long)(pad + (i * CONFIG_XHCI_PAGE_SIZE)); /* assign base addr for each pad */
+ {
+ spba[i] = (uint64_t)(unsigned long)(pad + (i * CONFIG_XHCI_PAGE_SIZE)); /* assign base addr for each pad */
+ }
xhci->devs[0].ptr_low = (uint32_t)((unsigned long)spba); /* bit[63:6] scratchpad buffers base addr */
#ifdef XHCI_AARCH64
xhci->devs[0].ptr_high = (uint32_t)((uint64_t)spba >> 32U);
@@ -556,14 +600,17 @@ fail:
static void xhci_check_xcap(struct xhci_s *xhci)
{
- if (xhci->xcap) { /* read Extended Capabilities */
+ if (xhci->xcap) /* read Extended Capabilities */
+ {
uint32_t off;
unsigned long addr = xhci->base + xhci->xcap; /* start read ext-cap */
-
- do {
+
+ do
+ {
unsigned long xcap = addr;
uint32_t ports, name, cap = readl(xcap + XHCI_REG_EXT_CAP_USBSPCF_OFFSET);
- switch (XHCI_REG_EXT_CAP_CAP_ID_GET(cap)) {
+ switch (XHCI_REG_EXT_CAP_CAP_ID_GET(cap))
+ {
case XHCI_EXT_CAP_ID_SUPPORT_PROTOCOL: /* 0x2, supported protocol */
name = readl(xcap + XHCI_REG_EXT_CAP_USBSPCFDEF_OFFSET);
ports = readl(xcap + XHCI_REG_EXT_CAP_USBSPCFDEF2_OFFSET);
@@ -572,35 +619,39 @@ static void xhci_check_xcap(struct xhci_s *xhci)
uint8_t count = XHCI_USBSPCFDEF2_COMPATIBLE_PORT_CNT_GET(ports);
uint8_t start = XHCI_USBSPCFDEF2_COMPATIBLE_PORT_OFF_GET(ports);
USB_LOG_INFO("XHCI protocol %c%c%c%c %x.%02x"
- ", %d ports (offset %d), def %x\n"
- , (name >> 0) & 0xff
- , (name >> 8) & 0xff
- , (name >> 16) & 0xff
- , (name >> 24) & 0xff /* Print string 'USB' */
- , major, minor
- , count, start
- , ports >> 16);
- if (name == XHCI_USBSPCFDEF_NAME_STRING_USB /* ASCII "USB " */) {
- if (major == 2) {
+ ", %d ports (offset %d), def %x\n"
+ , (name >> 0) & 0xff
+ , (name >> 8) & 0xff
+ , (name >> 16) & 0xff
+ , (name >> 24) & 0xff /* Print string 'USB' */
+ , major, minor
+ , count, start
+ , ports >> 16);
+ if (name == XHCI_USBSPCFDEF_NAME_STRING_USB /* ASCII "USB " */)
+ {
+ if (major == 2)
+ {
xhci->usb2.start = start; /* USB 2.0 port range */
xhci->usb2.count = count;
}
- if (major == 3) {
+ if (major == 3)
+ {
xhci->usb3.start = start; /* USB 3.0 port range */
xhci->usb3.count = count;
}
}
break;
default:
- USB_LOG_INFO("XHCI extcap 0x%x @ %p\n",
+ USB_LOG_INFO("XHCI extcap 0x%x @ %p\n",
XHCI_REG_EXT_CAP_CAP_ID_GET(cap), addr);
break;
- }
+ }
off = XHCI_REG_EXT_NEXT_CAP_PTR_GET(cap);
addr += off << 2; /* addr of next ext-cap */
- } while (off > 0);
- }
-
+ }
+ while (off > 0);
+ }
+
}
static int xhci_controller_setup(struct xhci_s *xhci, unsigned long baseaddr)
@@ -609,8 +660,9 @@ static int xhci_controller_setup(struct xhci_s *xhci, unsigned long baseaddr)
/* get register offset */
xhci_setup_mmio(xhci, baseaddr);
- if (xhci->version < 0x96 || xhci->version > 0x120) {
- USB_LOG_ERR("xHCI-0x%x not support\n", xhci->version);
+ if (xhci->version < 0x96 || xhci->version > 0x120)
+ {
+ USB_LOG_ERR("XHCI-0x%x not support.\n", xhci->version);
return -1;
}
@@ -618,18 +670,22 @@ static int xhci_controller_setup(struct xhci_s *xhci, unsigned long baseaddr)
uint32_t pagesize = readl(xhci->op + XHCI_REG_OP_PAGESIZE); /* get page-size */
USB_LOG_INFO("XHCI page size %d \n", (pagesize << CONFIG_XHCI_PAGE_SHIFT));
- if (CONFIG_XHCI_PAGE_SIZE != (pagesize << CONFIG_XHCI_PAGE_SHIFT)) {
- USB_LOG_ERR("XHCI driver does not support page size code %d\n"
- , pagesize << CONFIG_XHCI_PAGE_SHIFT);
+ if (CONFIG_XHCI_PAGE_SIZE != (pagesize << CONFIG_XHCI_PAGE_SHIFT))
+ {
+ USB_LOG_ERR("XHCI driver does not support page size code %d.\n"
+ , pagesize << CONFIG_XHCI_PAGE_SHIFT);
return -1;
}
- USB_LOG_INFO("config XHCI ....\n");
- if (xhci_controller_configure(xhci)) {
- USB_LOG_ERR("init XHCI failed !!!\n");
+ USB_LOG_INFO("Config XHCI ....\n");
+ if (xhci_controller_configure(xhci))
+ {
+ USB_LOG_ERR("Init XHCI failed !!!\n");
return -1;
- } else {
- USB_LOG_INFO("init XHCI success !!!\n");
+ }
+ else
+ {
+ USB_LOG_INFO("Init XHCI success !!!\n");
}
return 0;
@@ -637,34 +693,41 @@ static int xhci_controller_setup(struct xhci_s *xhci, unsigned long baseaddr)
struct xhci_pipe *xhci_event_process(struct xhci_s *xhci)
{
- struct xhci_pipe *work_pipe = NULL;
+ struct xhci_pipe *work_pipe = NULL;
struct xhci_ring *evts = xhci->evts;
/* check and ack event */
- for (;;) {
+ for (;;)
+ {
uint32_t nidx = evts->nidx; /* index of dequeue trb */
uint32_t cs = evts->cs; /* cycle state toggle by xHc */
struct xhci_trb *etrb = evts->ring + nidx; /* current trb */
uint32_t control = etrb->control; /* trb control field */
if ((control & TRB_C) != (cs ? 1 : 0)) /* if cycle state not toggle, no events need to handle */
+ {
break;
+ }
/* process event on etrb */
uint32_t evt_type = TRB_TYPE_GET(control);
uint32_t evt_cc = TRB_CC_GET(etrb->status); /* bit[31:24] completion code */
-
- if (ER_PORT_STATUS_CHANGE == evt_type) {
+
+ if (ER_PORT_STATUS_CHANGE == evt_type)
+ {
/* bit[31:24] port id, the port num of root hub port that generated this event */
uint32_t port = TRB_PORT_ID_GET(etrb->ptr_low) - 1;
uint32_t portsc = xhci_readl_port(xhci, port, XHCI_REG_OP_PORTS_PORTSC); /* Read status */
xhci_print_port_state(__func__, port, portsc);
- if (portsc & XHCI_REG_OP_PORTS_PORTSC_CSC) {
+ if (portsc & XHCI_REG_OP_PORTS_PORTSC_CSC)
+ {
usbh_roothub_thread_wakeup(port + 1); /* wakeup when connection status changed */
}
- } else if ((ER_COMMAND_COMPLETE == evt_type) || (ER_TRANSFER_COMPLETE == evt_type)) {
- struct xhci_trb *rtrb = (void*)(unsigned long)etrb->ptr_low;
+ }
+ else if ((ER_COMMAND_COMPLETE == evt_type) || (ER_TRANSFER_COMPLETE == evt_type))
+ {
+ struct xhci_trb *rtrb = (void *)(unsigned long)etrb->ptr_low;
struct xhci_ring *ring = XHCI_RING(rtrb); /* to align addr is ring base */
struct xhci_trb *evt = &ring->evt; /* first event trb */
uint32_t eidx = rtrb - ring->ring + 1; /* calculate current evt trb index */
@@ -672,46 +735,55 @@ struct xhci_pipe *xhci_event_process(struct xhci_s *xhci)
memcpy(evt, etrb, sizeof(*etrb)); /* copy current trb to cmd/transfer ring */
ring->eidx = eidx;
- if (ER_COMMAND_COMPLETE == evt_type) {
+ if (ER_COMMAND_COMPLETE == evt_type)
+ {
work_pipe = (struct xhci_pipe *)cur_cmd_pipe;
- } else if (ER_TRANSFER_COMPLETE == evt_type) {
+ }
+ else if (ER_TRANSFER_COMPLETE == evt_type)
+ {
/* xhci_pipe begin with reqs ring, therefore we get pipe instance from reqs ring */
work_pipe = (struct xhci_pipe *)(void *)ring;
}
- if (work_pipe) {
- if (work_pipe->waiter) {
+ if (work_pipe)
+ {
+ if (work_pipe->waiter)
+ {
work_pipe->waiter = false;
usb_osal_sem_give(work_pipe->waitsem);
}
- if (work_pipe->urb) {
+ if (work_pipe->urb)
+ {
struct usbh_urb *cur_urb = work_pipe->urb;
cur_urb->errorcode = evt_cc;
/* bit [23:0] TRB Transfer length, residual number of bytes not transferred
for OUT, is the value of (len of trb) - (data bytes transmitted), '0' means successful
- for IN, is the value of (len of trb) - (data bytes received),
+ for IN, is the value of (len of trb) - (data bytes received),
if cc is Short Packet, value is the diff between expected trans size and actual recv bytes
if cc is other error, value is the diff between expected trans size and actual recv bytes */
- cur_urb->actual_length += cur_urb->transfer_buffer_length -
- TRB_TR_TRANS_LEN_SET(evt->status); /* bit [23:0] */
+ cur_urb->actual_length += cur_urb->transfer_buffer_length -
+ TRB_TR_TRANS_LEN_SET(evt->status); /* bit [23:0] */
}
- }
- } else {
- USB_LOG_ERR("%s: unknown event, type %d, cc %d\n",
- __func__, evt_type, evt_cc);
+ }
+ }
+ else
+ {
+ USB_LOG_ERR("%s: Unknown event, type %d, cc %d.\n",
+ __func__, evt_type, evt_cc);
}
/* move ring index, notify xhci */
nidx++; /* head to next trb */
- if (nidx == XHCI_RING_ITEMS) {
+ if (nidx == XHCI_RING_ITEMS)
+ {
nidx = 0; /* roll-back if reach end of list */
cs = cs ? 0 : 1;
evts->cs = cs; /* sw toggle cycle state */
}
evts->nidx = nidx;
uint64_t erdp = (uint64_t)(unsigned long)(evts->ring + nidx);
- writeq(xhci->ir + XHCI_REG_RT_IR_ERDP, erdp | XHCI_REG_RT_IR_ERDP_EHB); /* bit[63:4] update current event ring dequeue pointer */
+ writeq(xhci->ir + XHCI_REG_RT_IR_ERDP, erdp | XHCI_REG_RT_IR_ERDP_EHB); /* bit[63:4] update current event ring dequeue pointer */
}
return work_pipe;
@@ -725,47 +797,55 @@ static struct xhci_inctx *xhci_alloc_inctx_config_ep(struct xhci_s *xhci, struct
struct xhci_inctx *in = usb_align(XHCI_INCTX_ALIGMENT << xhci->context64, size);
int devport = hport->port;
- if (!in) {
- USB_LOG_ERR("allocate memory failed !!!\n");
+ if (!in)
+ {
+ USB_LOG_ERR("Allocate memory failed !!!\n");
return NULL;
}
memset(in, 0, size);
- struct xhci_slotctx *slot = (void*)&in[1 << xhci->context64]; /* slot context */
+ struct xhci_slotctx *slot = (void *)&in[1 << xhci->context64]; /* slot context */
slot->ctx[0] |= XHCI_SLOTCTX_0_MAX_EPID_SET(maxepid); /* bit[31:27] index of the last valid ep context */
slot->ctx[0] |= XHCI_SLOTCTX_0_SPEED_SET(speed_to_xhci[hport->speed]); /* bit[23:20] speed of this device */
-
+
/* Set high-speed hub flags. */
struct usbh_hub *hubdev = hport->parent;
USB_ASSERT(hubdev);
- if (!hubdev->is_roothub) { /* if device is not under roothub */
+ if (!hubdev->is_roothub) /* if device is not under roothub */
+ {
/* Is this the first high-speed hub with a non-high-speed device following in chain */
struct usbh_hubport *hub_port = hubdev->parent;
- if (hport->speed == USB_SPEED_LOW || hport->speed == USB_SPEED_FULL) {
- if (hub_port->speed == USB_SPEED_HIGH) {
+ if (hport->speed == USB_SPEED_LOW || hport->speed == USB_SPEED_FULL)
+ {
+ if (hub_port->speed == USB_SPEED_HIGH)
+ {
slot->ctx[2] |= XHCI_SLOTCTX_2_HUB_SLOT_SET(hub_port->dev_addr); /* bit[7:0] parent hub slot id */
slot->ctx[2] |= XHCI_SLOTCTX_2_HUB_PORT_SET(hport->port); /* bit[15:8] parent port num */
slot->ctx[0] |= XHCI_SLOTCTX_0_MULTI_TT;
- } else {
- struct xhci_slotctx *hslot = (void*)(unsigned long)xhci->devs[hub_port->dev_addr].ptr_low;
+ }
+ else
+ {
+ struct xhci_slotctx *hslot = (void *)(unsigned long)xhci->devs[hub_port->dev_addr].ptr_low;
slot->ctx[2] = hslot->ctx[2]; /* 08h, copy hub slot context */
}
}
uint32_t route = 0U;
- do {
+ do
+ {
route <<= 4;
route |= (hport->port) & 0xf; /* record port for each tire */
hport = hubdev->parent;
hubdev = hport->parent;
- } while ((!hubdev) || (!hubdev->is_roothub));
+ }
+ while ((!hubdev) || (!hubdev->is_roothub));
slot->ctx[0] |= XHCI_SLOTCTX_0_ROUTE_SET(route); /* bit[19:0] route string, max 5 tires */
}
/* refer to spec. Ports are numbered from 1 to MaxPorts. */
- slot->ctx[1] |= XHCI_SLOTCTX_1_ROOT_PORT_SET(hport->port); /* bit[23:16] root hub port number */
+ slot->ctx[1] |= XHCI_SLOTCTX_1_ROOT_PORT_SET(hport->port); /* bit[23:16] root hub port number */
return in;
}
@@ -777,29 +857,30 @@ static struct xhci_inctx *xhci_alloc_inctx_set_ep_mps(struct xhci_s *xhci, uint3
int size = (sizeof(struct xhci_inctx) * XHCI_INCTX_ENTRY_NUM) << xhci->context64;
struct xhci_inctx *in = usb_align(XHCI_INCTX_ALIGMENT << xhci->context64, size);
- if (!in) {
- USB_LOG_ERR("allocate memory failed !!!\n");
+ if (!in)
+ {
+ USB_LOG_ERR("Allocate memory failed !!!\n");
return NULL;
}
memset(in, 0, size);
/* copy 32 entries after inctx controller field from devctx to inctx */
#ifdef XHCI_AARCH64
- struct xhci_slotctx *devctx = (struct xhci_slotctx *)(((uint64_t)xhci->devs[slotid].ptr_high << 32U) |
- ((uint64_t)xhci->devs[slotid].ptr_low));
+ struct xhci_slotctx *devctx = (struct xhci_slotctx *)(((uint64_t)xhci->devs[slotid].ptr_high << 32U) |
+ ((uint64_t)xhci->devs[slotid].ptr_low));
#else
struct xhci_slotctx *devctx = (struct xhci_slotctx *)(unsigned long)xhci->devs[slotid].ptr_low;
#endif
- struct xhci_slotctx *input_devctx = (void*)&in[1 << xhci->context64];
+ struct xhci_slotctx *input_devctx = (void *)&in[1 << xhci->context64];
memcpy(input_devctx, devctx, XHCI_SLOTCTX_ENTRY_NUM * sizeof(struct xhci_slotctx));
/*
input ctrl context
slot
- ep-0 context, offset = 2 * xhci->context64, e.g, for 64 bit (0x40), offset = 0x80
+ ep-0 context, offset = 2 * xhci->context64, e.g, for 64 bit (0x40), offset = 0x80
*/
- struct xhci_epctx *ep = (void*)&in[2 << xhci->context64]; /* ep context */
+ struct xhci_epctx *ep = (void *)&in[2 << xhci->context64]; /* ep context */
ep->ctx[1] |= XHCI_EPCTX_1_MPS_SET(ep_mps); /* bit[31:16] update maxpacket size */
return in;
@@ -811,20 +892,21 @@ static struct xhci_inctx *xhci_alloc_inctx_enable_hub_func(struct xhci_s *xhci,
int size = (sizeof(struct xhci_inctx) * XHCI_INCTX_ENTRY_NUM) << xhci->context64;
struct xhci_inctx *in = usb_align(XHCI_INCTX_ALIGMENT << xhci->context64, size);
- if (!in) {
- USB_LOG_ERR("allocate memory failed !!!\n");
+ if (!in)
+ {
+ USB_LOG_ERR("Allocate memory failed !!!\n");
return NULL;
}
memset(in, 0, size);
/* copy 32 entries after inctx controller field from devctx to inctx */
#ifdef XHCI_AARCH64
- struct xhci_slotctx *devctx = (struct xhci_slotctx *)(((uint64_t)xhci->devs[slotid].ptr_high << 32U) |
- ((uint64_t)xhci->devs[slotid].ptr_low));
+ struct xhci_slotctx *devctx = (struct xhci_slotctx *)(((uint64_t)xhci->devs[slotid].ptr_high << 32U) |
+ ((uint64_t)xhci->devs[slotid].ptr_low));
#else
struct xhci_slotctx *devctx = (struct xhci_slotctx *)(unsigned long)xhci->devs[slotid].ptr_low;
#endif
- struct xhci_slotctx *input_devctx = (void*)&in[1 << xhci->context64];
+ struct xhci_slotctx *input_devctx = (void *)&in[1 << xhci->context64];
memcpy(input_devctx, devctx, XHCI_SLOTCTX_ENTRY_NUM * sizeof(struct xhci_slotctx));
@@ -833,7 +915,8 @@ static struct xhci_inctx *xhci_alloc_inctx_enable_hub_func(struct xhci_s *xhci,
input_devctx->ctx[0] |= XHCI_SLOTCTX_0_SPEED_SET(hub_info->speed);
input_devctx->ctx[1] |= XHCI_SLOTCTX_1_PORTS_NUM_SET(hub_info->num_of_ports);
- if (hub_info->speed == USB_SPEED_HIGH) {
+ if (hub_info->speed == USB_SPEED_HIGH)
+ {
input_devctx->ctx[0] |= hub_info->has_multiple_tts ? XHCI_SLOTCTX_0_MULTI_TT : 0U;
input_devctx->ctx[2] |= XHCI_SLOTCTX_2_TTT_THINK_SET(hub_info->tt_think_time);
}
@@ -842,31 +925,32 @@ static struct xhci_inctx *xhci_alloc_inctx_enable_hub_func(struct xhci_s *xhci,
}
/* Submit a USB "setup" message request to the pipe's ring */
-static void xhci_xfer_setup(struct xhci_s *xhci, struct xhci_pipe *pipe,
+static void xhci_xfer_setup(struct xhci_s *xhci, struct xhci_pipe *pipe,
bool dir_in, void *cmd, void *data, int datalen)
{
/* SETUP TRB ctrl, bit[15:10] trb type
bit[6] Immediate Data (IDT), parameters take effect
bit[17:16] Transfer type, 2 = OUT Data, 3 = IN Data */
- uint32_t trans_type = (datalen > 0) ? (dir_in ? TRB_TR_IN_DATA : TRB_TR_OUT_DATA): TRB_TR_NO_DATA;
+ uint32_t trans_type = (datalen > 0) ? (dir_in ? TRB_TR_IN_DATA : TRB_TR_OUT_DATA) : TRB_TR_NO_DATA;
xhci_trb_queue(&pipe->reqs, cmd, USB_SIZEOF_SETUP_PACKET,
TRB_TYPE_SET(TR_SETUP) | TRB_TR_IDT | TRB_TR_TYPE_SET(trans_type));
/* DATA TRB ctrl, bit[15:10] trb type
bit[16] Direction, 0 = OUT, 1 = IN */
- if (datalen) {
+ if (datalen)
+ {
xhci_trb_queue(&pipe->reqs, data, datalen,
TRB_TYPE_SET(TR_DATA) | (dir_in ? TRB_TR_DIR : 0));
}
/* STATUS TRB ctrl, bit[5] Interrupt On Completion (IOC).
bit[16] Direction, 0 = OUT, 1 = IN */
- xhci_trb_queue(&pipe->reqs, NULL, 0,
- TRB_TYPE_SET(TR_STATUS) | TRB_TR_IOC | ((dir_in ? 0 : TRB_TR_DIR)));
+ xhci_trb_queue(&pipe->reqs, NULL, 0,
+ TRB_TYPE_SET(TR_STATUS) | TRB_TR_IOC | ((dir_in ? 0 : TRB_TR_DIR)));
- /* pass command trb to hardware */
+ /* pass command trb to hardware */
DSB();
-
+
/* notfiy xHc that device slot - epid */
xhci_doorbell(xhci, pipe->slotid, pipe->epid);
}
@@ -878,7 +962,7 @@ static void xhci_xfer_normal(struct xhci_s *xhci, struct xhci_pipe *pipe,
/* Normal trb, used in bulk and interrupt transfer */
xhci_trb_queue(&pipe->reqs, data, datalen, TRB_TYPE_SET(TR_NORMAL) | TRB_TR_IOC);
- /* pass command trb to hardware */
+ /* pass command trb to hardware */
DSB();
xhci_doorbell(xhci, pipe->slotid, pipe->epid);
@@ -918,8 +1002,10 @@ int usb_hc_init(void)
memset(&xhci_host, 0, sizeof(xhci_host));
if (xhci_controller_setup(&xhci_host, usb_hc_get_register_base()))
+ {
return -1;
-
+ }
+
return 0;
}
@@ -935,10 +1021,13 @@ int usbh_roothub_control(struct usb_setup_packet *setup, uint8_t *buf)
nports = CONFIG_USBHOST_MAX_RHPORTS;
port = setup->wIndex;
- if (setup->bmRequestType & USB_REQUEST_RECIPIENT_DEVICE) {
- switch (setup->bRequest) {
+ if (setup->bmRequestType & USB_REQUEST_RECIPIENT_DEVICE)
+ {
+ switch (setup->bRequest)
+ {
case HUB_REQUEST_CLEAR_FEATURE:
- switch (setup->wValue) {
+ switch (setup->wValue)
+ {
case HUB_FEATURE_HUB_C_LOCALPOWER:
break;
case HUB_FEATURE_HUB_C_OVERCURRENT:
@@ -948,7 +1037,8 @@ int usbh_roothub_control(struct usb_setup_packet *setup, uint8_t *buf)
}
break;
case HUB_REQUEST_SET_FEATURE:
- switch (setup->wValue) {
+ switch (setup->wValue)
+ {
case HUB_FEATURE_HUB_C_LOCALPOWER:
break;
case HUB_FEATURE_HUB_C_OVERCURRENT:
@@ -958,7 +1048,7 @@ int usbh_roothub_control(struct usb_setup_packet *setup, uint8_t *buf)
}
break;
case HUB_REQUEST_GET_DESCRIPTOR:
- USB_LOG_ERR("HUB_REQUEST_GET_DESCRIPTOR not implmented \n");
+ USB_LOG_ERR("HUB_REQUEST_GET_DESCRIPTOR not implmented.\n");
break;
case HUB_REQUEST_GET_STATUS:
memset(buf, 0, 4);
@@ -966,16 +1056,21 @@ int usbh_roothub_control(struct usb_setup_packet *setup, uint8_t *buf)
default:
break;
}
- } else if (setup->bmRequestType & USB_REQUEST_RECIPIENT_OTHER) {
- switch (setup->bRequest) {
+ }
+ else if (setup->bmRequestType & USB_REQUEST_RECIPIENT_OTHER)
+ {
+ switch (setup->bRequest)
+ {
case HUB_REQUEST_CLEAR_FEATURE:
- if (!port || port > nports) {
+ if (!port || port > nports)
+ {
return -EPIPE;
}
portsc = xhci_readl_port(xhci, port - 1, XHCI_REG_OP_PORTS_PORTSC);
- switch (setup->wValue) {
+ switch (setup->wValue)
+ {
case HUB_PORT_FEATURE_ENABLE:
break;
case HUB_PORT_FEATURE_SUSPEND:
@@ -1002,11 +1097,13 @@ int usbh_roothub_control(struct usb_setup_packet *setup, uint8_t *buf)
break;
case HUB_REQUEST_SET_FEATURE:
- if (!port || port > nports) {
+ if (!port || port > nports)
+ {
return -EPIPE;
}
- switch (setup->wValue) {
+ switch (setup->wValue)
+ {
case HUB_PORT_FEATURE_SUSPEND:
break;
case HUB_PORT_FEATURE_POWER:
@@ -1020,57 +1117,69 @@ int usbh_roothub_control(struct usb_setup_packet *setup, uint8_t *buf)
}
break;
case HUB_REQUEST_GET_STATUS:
- if (!port || port > nports) {
+ if (!port || port > nports)
+ {
return -EPIPE;
}
-
+
portsc = xhci_readl_port(xhci, port - 1, XHCI_REG_OP_PORTS_PORTSC);
status = 0;
- if (portsc & XHCI_REG_OP_PORTS_PORTSC_CSC) {
+ if (portsc & XHCI_REG_OP_PORTS_PORTSC_CSC)
+ {
/* Port connection status changed */
status |= (1 << HUB_PORT_FEATURE_C_CONNECTION);
}
- if (portsc & XHCI_REG_OP_PORTS_PORTSC_PEC) {
+ if (portsc & XHCI_REG_OP_PORTS_PORTSC_PEC)
+ {
/* Port enabled status changed */
status |= (1 << HUB_PORT_FEATURE_C_ENABLE);
}
- if (portsc & XHCI_REG_OP_PORTS_PORTSC_OCC) {
+ if (portsc & XHCI_REG_OP_PORTS_PORTSC_OCC)
+ {
/* Port status changed due to over-current */
status |= (1 << HUB_PORT_FEATURE_C_OVER_CURREN);
}
- if (portsc & XHCI_REG_OP_PORTS_PORTSC_CCS) {
+ if (portsc & XHCI_REG_OP_PORTS_PORTSC_CCS)
+ {
/* Port connected */
status |= (1 << HUB_PORT_FEATURE_CONNECTION);
}
-
- if (portsc & XHCI_REG_OP_PORTS_PORTSC_PED) {
+
+ if (portsc & XHCI_REG_OP_PORTS_PORTSC_PED)
+ {
/* Port enabled */
status |= (1 << HUB_PORT_FEATURE_ENABLE);
const int speed = speed_from_xhci[XHCI_REG_OP_PORTS_PORTSC_PORT_SPEED_GET(portsc)];
- if (speed == USB_SPEED_LOW) {
+ if (speed == USB_SPEED_LOW)
+ {
status |= (1 << HUB_PORT_FEATURE_LOWSPEED);
- } else if ((speed == USB_SPEED_HIGH) || (speed == USB_SPEED_SUPER) ||
- (speed == USB_SPEED_FULL)) {
+ }
+ else if ((speed == USB_SPEED_HIGH) || (speed == USB_SPEED_SUPER) ||
+ (speed == USB_SPEED_FULL))
+ {
status |= (1 << HUB_PORT_FEATURE_HIGHSPEED);
}
}
- if (portsc & XHCI_REG_OP_PORTS_PORTSC_OCA) {
+ if (portsc & XHCI_REG_OP_PORTS_PORTSC_OCA)
+ {
/* Over-current condition */
status |= (1 << HUB_PORT_FEATURE_OVERCURRENT);
}
- if (portsc & XHCI_REG_OP_PORTS_PORTSC_PR) {
+ if (portsc & XHCI_REG_OP_PORTS_PORTSC_PR)
+ {
/* Reset is in progress */
status |= (1 << HUB_PORT_FEATURE_RESET);
}
- if (portsc & XHCI_REG_OP_PORTS_PORTSC_PP) {
+ if (portsc & XHCI_REG_OP_PORTS_PORTSC_PP)
+ {
/* Port is not power off */
status |= (1 << HUB_PORT_FEATURE_POWER);
}
@@ -1097,26 +1206,32 @@ int usbh_ep0_pipe_reconfigure(usbh_pipe_t pipe, uint8_t dev_addr, uint8_t ep_mps
struct xhci_pipe *ppipe = (struct xhci_pipe *)pipe;
int oldmaxpacket = ppipe->maxpacket; /* original max packetsz */
- if (ep_mps != oldmaxpacket) {
+ if (ep_mps != oldmaxpacket)
+ {
/* maxpacket has changed on control endpoint - update controller. */
- USB_LOG_DBG("update ep0 mps from %d to %d\r\n", oldmaxpacket, ep_mps);
+ USB_LOG_DBG("Update ep0 mps from %d to %d.\r\n", oldmaxpacket, ep_mps);
struct xhci_inctx *in = xhci_alloc_inctx_set_ep_mps(xhci, ppipe->slotid, ep_mps); /* allocate input context */
if (!in)
- return -1;
+ {
+ return -1;
+ }
in->add = (1 << 1); /* update ep0 context */
in->del = (1 << 1);
usb_hc_dcache_invalidate(in, sizeof(struct xhci_inctx) * XHCI_INCTX_ENTRY_NUM);
xhci_dump_input_ctx(xhci, in);
-
+
int cc = xhci_cmd_evaluate_context(xhci, ppipe, in);
- if (cc != CC_SUCCESS) {
- USB_LOG_ERR("%s: reconf ctl endpoint: failed (cc %d) (mps %d => %d)\n",
+ if (cc != CC_SUCCESS)
+ {
+ USB_LOG_ERR("%s: reconf ctl endpoint: failed (cc %d) (mps %d => %d).\n",
__func__, cc, oldmaxpacket, ep_mps);
ret = -1;
- } else {
- ppipe->maxpacket = ep_mps; /* mps update success */
+ }
+ else
+ {
+ ppipe->maxpacket = ep_mps; /* mps update success */
}
usb_free(in);
@@ -1127,9 +1242,10 @@ int usbh_ep0_pipe_reconfigure(usbh_pipe_t pipe, uint8_t dev_addr, uint8_t ep_mps
static int usbh_get_period(int speed, int interval)
{
- if (speed != USB_SPEED_HIGH){
+ if (speed != USB_SPEED_HIGH)
+ {
/* fls - find last (most-significant) bit set */
- return (interval <= 4) ? 0 : fls(interval);
+ return (interval <= 4) ? 0 : fls(interval);
}
return (interval <= 4) ? 0 : interval - 4;
@@ -1145,16 +1261,20 @@ int usbh_pipe_alloc(usbh_pipe_t *pipe, const struct usbh_endpoint_cfg *ep_cfg)
uint32_t epid = 0U;
uint8_t eptype = 0U;
- if (ppipe == NULL) {
+ if (ppipe == NULL)
+ {
return -ENOMEM;
}
memset(ppipe, 0, sizeof(struct xhci_pipe));
ppipe->epaddr = ep_cfg->ep_addr;
- if (ep_cfg->ep_addr == 0) {
+ if (ep_cfg->ep_addr == 0)
+ {
epid = 1; /* ep0, ep_id = 1 */
- } else {
+ }
+ else
+ {
/* refer to spec. Figure 4-4: Endpoint Context Addressing
ep0 = 1, ep1-out = 2, ep1-in = 3, ... ep15-out = 30, ep15-in = 31 */
epid = (ep_cfg->ep_addr & 0x0f) * 2;
@@ -1171,23 +1291,27 @@ int usbh_pipe_alloc(usbh_pipe_t *pipe, const struct usbh_endpoint_cfg *ep_cfg)
ppipe->waiter = false;
ppipe->urb = NULL;
- USB_LOG_DBG("%s epid = %d, epaddr = 0x%x eptype = %d, mps = %d, speed = %d, urb = %p\n",
- __func__, ppipe->epid, ppipe->epaddr, ppipe->eptype, ppipe->maxpacket,
+ USB_LOG_DBG("%s epid = %d, epaddr = 0x%x eptype = %d, mps = %d, speed = %d, urb = %p\n",
+ __func__, ppipe->epid, ppipe->epaddr, ppipe->eptype, ppipe->maxpacket,
ppipe->speed, ppipe->urb);
- ppipe->reqs.cs = 1; /* cycle state = 1 */
+ ppipe->reqs.cs = 1; /* cycle state = 1 */
/* Allocate input context and initialize endpoint info. */
struct xhci_inctx *in = xhci_alloc_inctx_config_ep(xhci, hport, epid);
- if (!in){
+ if (!in)
+ {
ret = -1;
goto fail;
}
- if (ppipe->epid == 1) {
+ if (ppipe->epid == 1)
+ {
/* address device */
- in->add = 0x01 /* Slot Context */ | (1 << epid); /* EP Context */
- } else {
+ in->add = 0x01 /* Slot Context */ | (1 << epid); /* EP Context */
+ }
+ else
+ {
/* config endpoint */
in->add = (1 << epid);
in->del = (1 << epid);
@@ -1195,8 +1319,10 @@ int usbh_pipe_alloc(usbh_pipe_t *pipe, const struct usbh_endpoint_cfg *ep_cfg)
struct xhci_epctx *ep = (void *)&in[(epid + 1) << xhci->context64];
if (eptype == USB_ENDPOINT_TYPE_INTERRUPT)
- ep->ctx[0] = XHCI_EPCTX_0_INTERVAL_SET(usbh_get_period(ppipe->speed, ppipe->interval) + 3); /* bit[23:16] for interrupt ep, set interval to control interrupt period */
-
+ {
+ ep->ctx[0] = XHCI_EPCTX_0_INTERVAL_SET(usbh_get_period(ppipe->speed, ppipe->interval) + 3); /* bit[23:16] for interrupt ep, set interval to control interrupt period */
+ }
+
/*
Value Endpoint Type Direction
0 Not Valid N/A
@@ -1210,11 +1336,15 @@ int usbh_pipe_alloc(usbh_pipe_t *pipe, const struct usbh_endpoint_cfg *ep_cfg)
*/
ep->ctx[1] |= eptype << 3; /* bit[5:3] endpoint type */
if (ppipe->epaddr & USB_EP_DIR_IN || eptype == USB_ENDPOINT_TYPE_CONTROL)
- ep->ctx[1] |= 1 << 5; /* ep_type 4 ~ 7 */
-
+ {
+ ep->ctx[1] |= 1 << 5; /* ep_type 4 ~ 7 */
+ }
+
ep->ctx[1] |= XHCI_EPCTX_1_MPS_SET(ppipe->maxpacket); /* bit[31:16] max packet size */
if (eptype == USB_ENDPOINT_TYPE_INTERRUPT)
+ {
ep->ctx[1] |= XHCI_EPCTX_1_CERR_SET(3);
+ }
ep->deq_low = (uint32_t)((unsigned long)&ppipe->reqs.ring[0]); /* bit[63:4] tr dequeue pointer */
ep->deq_low |= 1; /* bit[0] dequeue cycle state */
@@ -1224,23 +1354,29 @@ int usbh_pipe_alloc(usbh_pipe_t *pipe, const struct usbh_endpoint_cfg *ep_cfg)
ep->deq_high = 0U;
#endif
- if (eptype == USB_ENDPOINT_TYPE_BULK){
+ if (eptype == USB_ENDPOINT_TYPE_BULK)
+ {
ep->length = XHCI_EPCTX_AVE_TRB_LEN_SET(256U); /* bit[15:0] average trb length */
- } else if (eptype == USB_ENDPOINT_TYPE_INTERRUPT){
+ }
+ else if (eptype == USB_ENDPOINT_TYPE_INTERRUPT)
+ {
ep->length = XHCI_EPCTX_AVE_TRB_LEN_SET(16U) | /* bit[15:0] average trb length */
XHCI_EPCTX_MAX_ESIT_SET(ppipe->maxpacket); /* bit[31:16] max ESIT payload */
}
- if (ppipe->epid == 1) { /* when allocate ep-0, allocate device first */
+ if (ppipe->epid == 1) /* when allocate ep-0, allocate device first */
+ {
struct usbh_hub *hubdev = hport->parent;
- if (!hubdev->is_roothub){
+ if (!hubdev->is_roothub)
+ {
/* make sure parent hub has been configured */
struct usbh_hubport *hubport = hubdev->parent;
struct xhci_pipe *hubep0 = (struct xhci_pipe *)hubport->ep0;
- struct xhci_slotctx *hdslot = (void*)(unsigned long)xhci->devs[hubep0->slotid].ptr_low;
- if (XHCI_SLOTCTX_3_SLOT_STATE_GET(hdslot->ctx[3]) != XHCI_SLOT_CONFIG) { /* bit [31:27] slot state, 3 means configured */
- USB_LOG_ERR("%s parent hub-%d not yet configured\n", __func__, hubep0->slotid);
+ struct xhci_slotctx *hdslot = (void *)(unsigned long)xhci->devs[hubep0->slotid].ptr_low;
+ if (XHCI_SLOTCTX_3_SLOT_STATE_GET(hdslot->ctx[3]) != XHCI_SLOT_CONFIG) /* bit [31:27] slot state, 3 means configured */
+ {
+ USB_LOG_ERR("%s parent hub-%d not yet configured.\n", __func__, hubep0->slotid);
ret = -1;
goto fail;
}
@@ -1249,50 +1385,56 @@ int usbh_pipe_alloc(usbh_pipe_t *pipe, const struct usbh_endpoint_cfg *ep_cfg)
/* enable slot. */
size_t size = (sizeof(struct xhci_slotctx) * XHCI_SLOTCTX_ENTRY_NUM) << xhci->context64;
struct xhci_slotctx *dev = usb_align(XHCI_SLOTCTX_ALIGMENT << xhci->context64, size);
- if (!dev) {
- USB_LOG_ERR("allocate memory failed !!!\n");
+ if (!dev)
+ {
+ USB_LOG_ERR("Allocate memory failed !!!\n");
ret = -1;
goto fail;
}
/* send nop command to test if command ring ok */
- for (int i = 0 ; i < 3; ++i) {
+ for (int i = 0 ; i < 3; ++i)
+ {
int cc = xhci_cmd_nop(xhci, ppipe);
- if (cc != CC_SUCCESS) {
+ if (cc != CC_SUCCESS)
+ {
USB_LOG_ERR("%s: nop: failed\n", __func__);
usb_free(dev);
- ret = -1;
- goto fail;
+ ret = -1;
+ goto fail;
}
}
int slotid = xhci_cmd_enable_slot(xhci, ppipe); /* get slot-id */
- if (slotid < 0) {
- USB_LOG_ERR("%s: enable slot: failed\n", __func__);
+ if (slotid < 0)
+ {
+ USB_LOG_ERR("%s: enable slot: failed.\n", __func__);
usb_free(dev);
ret = -1;
goto fail;
- }
+ }
ppipe->slotid = slotid;
- USB_LOG_DBG("%s: enable slot: got slotid %d\n", __func__, ppipe->slotid);
+ USB_LOG_DBG("%s: enable slot: got slotid %d.\n", __func__, ppipe->slotid);
memset(dev, 0, size);
xhci->devs[slotid].ptr_low = (uint32_t)(unsigned long)dev; /* DCBAA */
#ifdef XHCI_AARCH64
xhci->devs[slotid].ptr_high = (uint32_t)((uint64_t)dev >> 32U);
#else
xhci->devs[slotid].ptr_high = 0;
-#endif
+#endif
usb_hc_dcache_invalidate(in, sizeof(struct xhci_inctx) * XHCI_INCTX_ENTRY_NUM);
/* Send set_address command. */
int cc = xhci_cmd_address_device(xhci, ppipe, in);
- if (cc != CC_SUCCESS) {
- USB_LOG_ERR("%s: address device: failed (cc %d)\n", __func__, cc);
+ if (cc != CC_SUCCESS)
+ {
+ USB_LOG_ERR("%s: address device: failed (cc %d).\n", __func__, cc);
cc = xhci_cmd_disable_slot(xhci, ppipe);
- if (cc != CC_SUCCESS) {
- USB_LOG_ERR("%s: disable failed (cc %d)\n", __func__, cc);
+ if (cc != CC_SUCCESS)
+ {
+ USB_LOG_ERR("%s: disable failed (cc %d).\n", __func__, cc);
ret = -1;
goto fail;
}
@@ -1303,14 +1445,17 @@ int usbh_pipe_alloc(usbh_pipe_t *pipe, const struct usbh_endpoint_cfg *ep_cfg)
ret = -1;
goto fail;
- }
- } else { /* when allocate other ep, config ep */
+ }
+ }
+ else /* when allocate other ep, config ep */
+ {
struct xhci_pipe *defpipe = (struct xhci_pipe *)hport->ep0;
ppipe->slotid = defpipe->slotid;
/* handle hub device */
struct usb_device_descriptor *device_desc = &hport->device_desc;
- if (device_desc->bDeviceClass == USB_DEVICE_CLASS_HUB) {
+ if (device_desc->bDeviceClass == USB_DEVICE_CLASS_HUB)
+ {
/* enable hub function */
struct usb_interface_descriptor *intf = &hport->config.intf[0U].altsetting[0U].intf_desc;
struct usbh_hub *this_hub = hport->config.intf[0U].priv;
@@ -1318,26 +1463,27 @@ int usbh_pipe_alloc(usbh_pipe_t *pipe, const struct usbh_endpoint_cfg *ep_cfg)
struct usb_hub_descriptor *hub_desc = &this_hub->hub_desc;
struct xhci_hubinfo hub_info = {0};
-#define HUB_TT_THINK_TIME(reg) (((reg) >> 5) & 3)
+#define HUB_TT_THINK_TIME(reg) (((reg) >> 5) & 3)
hub_info.num_of_ports = hub_desc->bNbrPorts;
hub_info.has_multiple_tts = (intf->bInterfaceProtocol == 2);
hub_info.tt_think_time = ((hub_desc->wHubCharacteristics) & HUB_CHAR_TTTT_MASK) >> HUB_CHAR_TTTT_SHIFT;
hub_info.speed = hport->speed;
- USB_LOG_INFO("enable hub function, num_of_ports=%d, multi_tt=%d, tt_think=%d, speed=%d\r\n",
- hub_info.num_of_ports,
- hub_info.has_multiple_tts,
- hub_info.tt_think_time,
- hub_info.speed);
+ USB_LOG_INFO("Enable hub function, num_of_ports=%d, multi_tt=%d, tt_think=%d, speed=%d.\r\n",
+ hub_info.num_of_ports,
+ hub_info.has_multiple_tts,
+ hub_info.tt_think_time,
+ hub_info.speed);
struct xhci_inctx *inctx_hub = xhci_alloc_inctx_enable_hub_func(xhci, ppipe->slotid, &hub_info);
inctx_hub->add = 0x01;
inctx_hub->del = 0x01;
usb_hc_dcache_invalidate(in, sizeof(struct xhci_inctx) * XHCI_INCTX_ENTRY_NUM);
- if (CC_SUCCESS != xhci_cmd_evaluate_context(xhci, ppipe, inctx_hub)) {
- USB_LOG_ERR("cannot enable hub function\r\n");
+ if (CC_SUCCESS != xhci_cmd_evaluate_context(xhci, ppipe, inctx_hub))
+ {
+ USB_LOG_ERR("Cannot enable hub function.\r\n");
}
usb_free(inctx_hub);
@@ -1345,38 +1491,41 @@ int usbh_pipe_alloc(usbh_pipe_t *pipe, const struct usbh_endpoint_cfg *ep_cfg)
/* reset if endpoint is not running */
#ifdef XHCI_AARCH64
- struct xhci_slotctx *devctx = (struct xhci_slotctx *)(((uint64_t)xhci->devs[ppipe->slotid].ptr_high << 32U) |
- ((uint64_t)xhci->devs[ppipe->slotid].ptr_low));
+ struct xhci_slotctx *devctx = (struct xhci_slotctx *)(((uint64_t)xhci->devs[ppipe->slotid].ptr_high << 32U) |
+ ((uint64_t)xhci->devs[ppipe->slotid].ptr_low));
#else
struct xhci_slotctx *devctx = (struct xhci_slotctx *)(unsigned long)xhci->devs[ppipe->slotid].ptr_low;
#endif
- struct xhci_epctx *epctx = (void*)&devctx[epid << xhci->context64]; /* ep0 context */
+ struct xhci_epctx *epctx = (void *)&devctx[epid << xhci->context64]; /* ep0 context */
uint32_t epstate = XHCI_EPCTX_0_EP_STATE_GET(epctx->ctx[0]);
int cc;
-
- /* Reset endpoint in case it is not running */
- if (epstate > 1){
+
+ /* Reset endpoint in case it is not running */
+ if (epstate > 1)
+ {
cc = xhci_cmd_reset_endpoint(xhci, ppipe);
- if (cc != CC_SUCCESS) {
- USB_LOG_ERR("%s: reset endpoint: failed (cc %d)\n", __func__, cc);
+ if (cc != CC_SUCCESS)
+ {
+ USB_LOG_ERR("%s: reset endpoint: failed (cc %d).\n", __func__, cc);
ret = -1;
goto fail;
- }
+ }
}
-
+
usb_hc_dcache_invalidate(in, sizeof(struct xhci_inctx) * XHCI_INCTX_ENTRY_NUM);
xhci_dump_input_ctx(xhci, in);
/* Send configure command. */
cc = xhci_cmd_configure_endpoint(xhci, ppipe, in, false);
- if (cc != CC_SUCCESS) {
- epctx = (void*)&devctx[epid << xhci->context64]; /* ep0 context */
+ if (cc != CC_SUCCESS)
+ {
+ epctx = (void *)&devctx[epid << xhci->context64]; /* ep0 context */
epstate = XHCI_EPCTX_0_EP_STATE_GET(epctx->ctx[0]);
- USB_LOG_ERR("%s: configure endpoint: failed (cc %d, epstate %d)\n", __func__, cc, epstate);
+ USB_LOG_ERR("%s: configure endpoint: failed (cc %d, epstate %d).\n", __func__, cc, epstate);
ret = -1;
goto fail;
- }
+ }
}
*pipe = (usbh_pipe_t)ppipe;
@@ -1392,13 +1541,15 @@ int usbh_pipe_free(usbh_pipe_t pipe)
struct xhci_s *xhci = &xhci_host;
struct xhci_pipe *ppipe = (struct xhci_pipe *)pipe;
- if (!ppipe) {
+ if (!ppipe)
+ {
return -EINVAL;
}
struct usbh_urb *urb = ppipe->urb;
- if (urb) {
+ if (urb)
+ {
usbh_kill_urb(urb);
}
@@ -1408,13 +1559,14 @@ int usbh_pipe_free(usbh_pipe_t pipe)
int usbh_submit_urb(struct usbh_urb *urb)
{
int ret = 0;
- if (!urb || !urb->pipe) {
+ if (!urb || !urb->pipe)
+ {
return -EINVAL;
}
struct xhci_s *xhci = &xhci_host;
struct xhci_pipe *ppipe = urb->pipe;
- struct usb_setup_packet *setup = urb->setup;
+ struct usb_setup_packet *setup = urb->setup;
size_t flags;
flags = usb_osal_enter_critical_section();
@@ -1426,39 +1578,43 @@ int usbh_submit_urb(struct usbh_urb *urb)
ppipe->urb = urb;
ppipe->timeout = urb->timeout;
- if (ppipe->timeout > 0) {
+ if (ppipe->timeout > 0)
+ {
ppipe->waiter = true;
}
usb_osal_leave_critical_section(flags);
- switch (ppipe->eptype){
+ switch (ppipe->eptype)
+ {
case USB_ENDPOINT_TYPE_CONTROL:
USB_ASSERT(setup);
- if (setup->bRequest == USB_REQUEST_SET_ADDRESS){
+ if (setup->bRequest == USB_REQUEST_SET_ADDRESS)
+ {
/* Set address command sent during xhci_alloc_pipe. */
goto skip_req;
}
- USB_LOG_DBG("%s request-%d\n", __func__, setup->bRequest);
+ USB_LOG_DBG("%s request-%d.\n", __func__, setup->bRequest);
/* send setup in/out for command */
- xhci_xfer_setup(xhci, ppipe, setup->bmRequestType & USB_EP_DIR_IN, (void*)setup,
+ xhci_xfer_setup(xhci, ppipe, setup->bmRequestType & USB_EP_DIR_IN, (void *)setup,
urb->transfer_buffer, urb->transfer_buffer_length);
break;
- case USB_ENDPOINT_TYPE_INTERRUPT:
+ case USB_ENDPOINT_TYPE_INTERRUPT:
case USB_ENDPOINT_TYPE_BULK:
xhci_xfer_normal(xhci, ppipe, urb->transfer_buffer, urb->transfer_buffer_length);
break;
default:
USB_ASSERT(0U);
- break;
+ break;
}
/* wait all ring handled by xHc */
int cc = xhci_event_wait(xhci, ppipe, &ppipe->reqs);
- if ((cc != CC_SUCCESS) &&
- !((cc == CC_TIMEOUT) && (ppipe->eptype == USB_ENDPOINT_TYPE_INTERRUPT))) {
+ if ((cc != CC_SUCCESS) &&
+ !((cc == CC_TIMEOUT) && (ppipe->eptype == USB_ENDPOINT_TYPE_INTERRUPT)))
+ {
/* ignore transfer timeout for interrupt type */
- USB_LOG_ERR("%s: xfer failed (cc %d)\n", __func__, cc);
+ USB_LOG_ERR("%s: xfer failed (cc %d).\n", __func__, cc);
ret = -1;
urb->errorcode = cc;
goto errout_timeout;
@@ -1468,7 +1624,7 @@ skip_req:
errout_timeout:
/* Timeout will run here */
usbh_kill_urb(urb);
- return ret;
+ return ret;
}
int usbh_kill_urb(struct usbh_urb *urb)
@@ -1480,7 +1636,7 @@ void USBH_IRQHandler(void)
{
uint32_t reg, status;
struct xhci_s *xhci = &xhci_host;
- struct xhci_pipe *work_pipe = NULL;
+ struct xhci_pipe *work_pipe = NULL;
USB_LOG_DBG("%s\n", __func__);
@@ -1495,17 +1651,22 @@ void USBH_IRQHandler(void)
work_pipe = xhci_event_process(xhci);
/* handle callbacks in interrupt */
- if ((work_pipe) && (work_pipe->urb)) {
+ if ((work_pipe) && (work_pipe->urb))
+ {
struct usbh_urb *cur_urb = work_pipe->urb;
- if (cur_urb->complete) {
- if (cur_urb->errorcode < 0) {
+ if (cur_urb->complete)
+ {
+ if (cur_urb->errorcode < 0)
+ {
cur_urb->complete(cur_urb->arg, cur_urb->errorcode);
- } else {
+ }
+ else
+ {
cur_urb->complete(cur_urb->arg, cur_urb->actual_length);
}
- }
+ }
}
- USB_LOG_DBG("%s exit\n", __func__);
+ USB_LOG_DBG("%s exit.\n", __func__);
return;
}
\ No newline at end of file
diff --git a/third-party/cherryusb-0.6.0/port/xhci/usb_hc_xhci.h b/third-party/cherryusb-0.6.0/port/xhci/usb_hc_xhci.h
index d01c00f251eda4e0c9ad436b769f207cdefffc78..a3036766a8b07c4cc436748ebc79396636d57409 100644
--- a/third-party/cherryusb-0.6.0/port/xhci/usb_hc_xhci.h
+++ b/third-party/cherryusb-0.6.0/port/xhci/usb_hc_xhci.h
@@ -1,22 +1,22 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: usb_hc_xhci.h
* Date: 2022-07-19 09:26:25
* LastEditTime: 2022-07-19 09:26:25
* Description: This files is for xhci data structure definition
- *
- * Modify History:
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
* 1.0 zhugengyu 2022/9/19 init commit
@@ -27,16 +27,17 @@
/***************************** Include Files *********************************/
#include "usbh_core.h"
+/************************** Constant Definitions *****************************/
+
+/************************** Type Definitions *****************************/
+/* slot context */
#ifdef __cplusplus
extern "C"
{
#endif
-/************************** Constant Definitions *****************************/
-
-/************************** Type Definitions *****************************/
-/* slot context */
-struct xhci_slotctx {
+struct xhci_slotctx
+{
uint32_t ctx[4];
#define XHCI_SLOTCTX_0_ROUTE_SET(route) XHCI32_SET_BITS(route, 19, 0)
#define XHCI_SLOTCTX_0_ROUTE_GET(route) XHCI32_GET_BITS(route, 19, 0)
@@ -62,47 +63,52 @@ struct xhci_slotctx {
#define XHCI_SLOTCTX_ALIGMENT 1024U
} __PACKED;
-enum xhci_slot_state {
+enum xhci_slot_state
+{
XHCI_SLOT_DEFAULT = 1,
XHCI_SLOT_ADDRESS = 2,
XHCI_SLOT_CONFIG = 3
};
/* endpoint context */
-struct xhci_epctx {
+struct xhci_epctx
+{
uint32_t ctx[2];
#define XHCI_EPCTX_0_EP_STATE_GET(ctx) XHCI32_GET_BITS(ctx, 2, 0)
#define XHCI_EPCTX_0_INTERVAL_SET(interval) XHCI32_SET_BITS(interval, 23, 16)
-#define XHCI_EPCTX_1_MPS_SET(mps) XHCI32_SET_BITS(mps, 31, 16)
+#define XHCI_EPCTX_1_MPS_SET(mps) XHCI32_SET_BITS(mps, 31, 16)
#define XHCI_EPCTX_1_MPS_GET(ctx) XHCI32_GET_BITS(ctx, 31, 16)
#define XHCI_EPCTX_1_EPTYPE_GET(ctx) XHCI32_GET_BITS(ctx, 5, 3)
-#define XHCI_EPCTX_1_CERR_SET(cerr) XHCI32_SET_BITS(cerr, 2, 1)
+#define XHCI_EPCTX_1_CERR_SET(cerr) XHCI32_SET_BITS(cerr, 2, 1)
uint32_t deq_low;
uint32_t deq_high;
uint32_t length;
-#define XHCI_EPCTX_AVE_TRB_LEN_SET(len) XHCI32_SET_BITS(len, 15, 0)
+#define XHCI_EPCTX_AVE_TRB_LEN_SET(len) XHCI32_SET_BITS(len, 15, 0)
#define XHCI_EPCTX_MAX_ESIT_SET(esit) XHCI32_SET_BITS(esit, 31, 16)
uint32_t reserved_01[3];
} __PACKED;
/* device context array element */
-struct xhci_devlist {
+struct xhci_devlist
+{
uint32_t ptr_low;
uint32_t ptr_high;
} __PACKED;
/* input context */
-struct xhci_inctx {
+struct xhci_inctx
+{
uint32_t del;
uint32_t add;
uint32_t reserved_01[6];
-/* refer to spec. The Input Context is an array of up to 33 context data structure entries */
+ /* refer to spec. The Input Context is an array of up to 33 context data structure entries */
#define XHCI_INCTX_ENTRY_NUM 33U
#define XHCI_INCTX_ALIGMENT 2048
} __PACKED;
/* transfer block (ring element) */
-struct xhci_trb {
+struct xhci_trb
+{
uint32_t ptr_low;
uint32_t ptr_high;
uint32_t status;
@@ -110,19 +116,22 @@ struct xhci_trb {
} __PACKED;
/* event ring segment */
-struct xhci_er_seg {
+struct xhci_er_seg
+{
uint32_t ptr_low;
uint32_t ptr_high;
uint32_t size;
uint32_t reserved_01;
} __PACKED;
-struct xhci_portmap {
+struct xhci_portmap
+{
uint8_t start;
uint8_t count;
};
-struct xhci_ring {
+struct xhci_ring
+{
struct xhci_trb ring[XHCI_RING_ITEMS];
struct xhci_trb evt;
uint32_t eidx;
@@ -131,7 +140,8 @@ struct xhci_ring {
usb_osal_mutex_t lock;
};
-struct xhci_pipe {
+struct xhci_pipe
+{
struct xhci_ring reqs; /* DO NOT MOVE reqs from structure beg */
uint8_t epaddr;
uint8_t speed;
@@ -151,7 +161,8 @@ struct xhci_pipe {
struct usbh_urb *urb; /* NULL if no active URB */
};
-struct xhci_s {
+struct xhci_s
+{
/* devinfo */
uint32_t ports;
uint32_t slots;
@@ -178,7 +189,8 @@ struct xhci_s {
struct xhci_er_seg *eseg;
};
-struct xhci_hubinfo {
+struct xhci_hubinfo
+{
uint32_t num_of_ports;
bool has_multiple_tts;
uint8_t tt_think_time;
diff --git a/third-party/cherryusb-0.6.0/port/xhci/xhci_reg.h b/third-party/cherryusb-0.6.0/port/xhci/xhci_reg.h
index 613dcb33deeb4d33269481bcb6f083947f5fcc8e..d45ba1fe2fb6f3afe9f9ec4a6f3fb9c0e490d443 100644
--- a/third-party/cherryusb-0.6.0/port/xhci/xhci_reg.h
+++ b/third-party/cherryusb-0.6.0/port/xhci/xhci_reg.h
@@ -1,22 +1,22 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: xhci_reg.h
* Date: 2022-07-19 09:26:25
* LastEditTime: 2022-07-19 09:26:25
* Description: This files is for xhci register definition
- *
- * Modify History:
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
* 1.0 zhugengyu 2022/9/19 init commit
@@ -27,12 +27,12 @@
/***************************** Include Files *********************************/
#include "usbh_core.h"
+/************************** Constant Definitions *****************************/
#ifdef __cplusplus
extern "C"
{
#endif
-/************************** Constant Definitions *****************************/
#if defined(__aarch64__)
#define BITS_PER_LONG 64U
#define XHCI_AARCH64
@@ -42,11 +42,11 @@ extern "C"
#endif
#define XHCI_GENMASK(h, l) \
- (((~0UL) - (1UL << (l)) + 1) & (~0UL >> (BITS_PER_LONG - 1 - (h))))
+ (((~0UL) - (1UL << (l)) + 1) & (~0UL >> (BITS_PER_LONG - 1 - (h))))
#define XHCI_GENMASK_ULL(h, l) \
- (((~0ULL) - (1ULL << (l)) + 1) & \
- (~0ULL >> (BITS_PER_LONG_LONG - 1 - (h))))
+ (((~0ULL) - (1ULL << (l)) + 1) & \
+ (~0ULL >> (BITS_PER_LONG_LONG - 1 - (h))))
#define XHCI32_GET_BITS(x, a, b) (uint32_t)((((uint32_t)(x)) & XHCI_GENMASK(a, b)) >> b)
#define XHCI32_SET_BITS(x, a, b) (uint32_t)((((uint32_t)(x)) << b) & XHCI_GENMASK(a, b))
@@ -58,44 +58,44 @@ extern "C"
* Register offsets from the base address of an XHCI device.
* @{
*/
-#define XHCI_REG_CAP_CAPLENGTH 0x00 /* specify the limits, restrictions and capabilities */
-#define XHCI_REG_CAP_HCIVERSION 0x02 /* Interface Version Number */
-#define XHCI_REG_CAP_HCS1 0x04 /* Host Controller Structural Parameters 1 */
-#define XHCI_REG_CAP_HCS2 0x08 /* Host Controller Structural Parameters 2 */
-#define XHCI_REG_CAP_HCS3 0x0C /* Host Controller Structural Parameters 3 */
-#define XHCI_REG_CAP_HCC 0x10 /* Capability Parameters 1 */
-#define XHCI_REG_CAP_DBOFF 0x14 /* Doorbell Offset Register */
-#define XHCI_REG_CAP_RTSOFF 0x18 /* Runtime Register Space Offset Register */
+#define XHCI_REG_CAP_CAPLENGTH 0x00 /* specify the limits, restrictions and capabilities */
+#define XHCI_REG_CAP_HCIVERSION 0x02 /* Interface Version Number */
+#define XHCI_REG_CAP_HCS1 0x04 /* Host Controller Structural Parameters 1 */
+#define XHCI_REG_CAP_HCS2 0x08 /* Host Controller Structural Parameters 2 */
+#define XHCI_REG_CAP_HCS3 0x0C /* Host Controller Structural Parameters 3 */
+#define XHCI_REG_CAP_HCC 0x10 /* Capability Parameters 1 */
+#define XHCI_REG_CAP_DBOFF 0x14 /* Doorbell Offset Register */
+#define XHCI_REG_CAP_RTSOFF 0x18 /* Runtime Register Space Offset Register */
/***************** Host Controller Operational Registers ***********************/
-#define XHCI_REG_OP_USBCMD 0x00 /* USB Command Register */
-#define XHCI_REG_OP_USBSTS 0x04 /* USB Status Register */
-#define XHCI_REG_OP_PAGESIZE 0x08 /* Page Size Register */
-#define XHCI_REG_OP_DNCTRL 0x14 /* Device Notification Control Register */
-#define XHCI_REG_OP_CRCR 0x18 /* Command Ring Control Register */
-#define XHCI_REG_OP_DCBAAP 0x30 /* Device Context Base Address Array Pointer Register */
-#define XHCI_REG_OP_CONFIG 0x38 /* Configure Register */
+#define XHCI_REG_OP_USBCMD 0x00 /* USB Command Register */
+#define XHCI_REG_OP_USBSTS 0x04 /* USB Status Register */
+#define XHCI_REG_OP_PAGESIZE 0x08 /* Page Size Register */
+#define XHCI_REG_OP_DNCTRL 0x14 /* Device Notification Control Register */
+#define XHCI_REG_OP_CRCR 0x18 /* Command Ring Control Register */
+#define XHCI_REG_OP_DCBAAP 0x30 /* Device Context Base Address Array Pointer Register */
+#define XHCI_REG_OP_CONFIG 0x38 /* Configure Register */
/* Port Status and Ctrl Register : OP Base + (400h + (10h * (n–1))) 'n' is port num */
-#define XHCI_REG_OP_PORTS_BASE 0x400 /* Port Status and Control Register Base */
+#define XHCI_REG_OP_PORTS_BASE 0x400 /* Port Status and Control Register Base */
#define XHCI_REG_OP_PORTS_SIZE 0x10 /* Size of one Port SC Register */
#define XHCI_REG_OP_PORTS_OFF(port, off) ((port) * XHCI_REG_OP_PORTS_SIZE + offset)
-#define XHCI_REG_OP_PORTS_PORTSC 0x00 /* Port Status and Control Register */
-#define XHCI_REG_OP_PORTS_PORTPMSC 0x04 /* USB3 Port Power Management Status and Control Register */
-#define XHCI_REG_OP_PORTS_PORTLI 0x08 /* Port Link Info Register */
+#define XHCI_REG_OP_PORTS_PORTSC 0x00 /* Port Status and Control Register */
+#define XHCI_REG_OP_PORTS_PORTPMSC 0x04 /* USB3 Port Power Management Status and Control Register */
+#define XHCI_REG_OP_PORTS_PORTLI 0x08 /* Port Link Info Register */
/***************** Host Controller Runtime Registers ***********************/
-#define XHCI_REG_RT_MFINDEX 0x00 /* Microframe Index */
-#define XHCI_REG_RT_IR0 0x20 /* Interrupter Register Set 0 */
-#define XHCI_REG_RT_IR1023 0x8000 /* Interrupter Register Set 1023 */
+#define XHCI_REG_RT_MFINDEX 0x00 /* Microframe Index */
+#define XHCI_REG_RT_IR0 0x20 /* Interrupter Register Set 0 */
+#define XHCI_REG_RT_IR1023 0x8000 /* Interrupter Register Set 1023 */
/* Interrupter Register Set : RT Base + 020h + (32 * Interrupter) */
-#define XHCI_REG_RT_IR_IMAN 0x00 /* Interrupter Management Register */
-#define XHCI_REG_RT_IR_IMOD 0x04 /* Interrupter Moderation Register */
-#define XHCI_REG_RT_IR_ERSTSZ 0x08 /* Event Ring Segment Table Size Register */
-#define XHCI_REG_RT_IR_ERSTBA 0x10 /* Event Ring Segment Table Base Address Register */
-#define XHCI_REG_RT_IR_ERDP 0x18 /* Event Ring Dequeue Pointer Register */
+#define XHCI_REG_RT_IR_IMAN 0x00 /* Interrupter Management Register */
+#define XHCI_REG_RT_IR_IMOD 0x04 /* Interrupter Moderation Register */
+#define XHCI_REG_RT_IR_ERSTSZ 0x08 /* Event Ring Segment Table Size Register */
+#define XHCI_REG_RT_IR_ERSTBA 0x10 /* Event Ring Segment Table Base Address Register */
+#define XHCI_REG_RT_IR_ERDP 0x18 /* Event Ring Dequeue Pointer Register */
#define XHCI_REG_RT_IR_SIZE 0x20 /* Size of one IR Register */
/***************** Doorbell Register ***********************/
@@ -103,110 +103,111 @@ extern "C"
/***************** eXtensible Host Controller Capability Registers ***********************/
-/** @name XHCI_REG_CAP_HCS1 Register
+/** @name XHCI_REG_CAP_HCS1 Register
*/
#define XHCI_REG_CAP_HCS1_MAX_SLOTS_GET(x) XHCI32_GET_BITS(x, 7, 0) /* Number of Device Slots (MaxSlots) */
-#define XHCI_REG_CAP_HCS1_MAX_INTRS_GET(x) XHCI32_GET_BITS(x, 18, 8) /* Number of Interrupters (MaxIntrs) */
-#define XHCI_REG_CAP_HCS1_MAX_PORTS_GET(x) XHCI32_GET_BITS(x, 31, 24) /* Number of Ports (MaxPorts) */
+#define XHCI_REG_CAP_HCS1_MAX_INTRS_GET(x) XHCI32_GET_BITS(x, 18, 8) /* Number of Interrupters (MaxIntrs) */
+#define XHCI_REG_CAP_HCS1_MAX_PORTS_GET(x) XHCI32_GET_BITS(x, 31, 24) /* Number of Ports (MaxPorts) */
-/** @name XHCI_REG_CAP_HCS2 Register
+/** @name XHCI_REG_CAP_HCS2 Register
*/
-#define XHCI_REG_CAP_HCS2_IST_GET(x) XHCI32_GET_BITS(x, 3, 0) /* Isochronous Scheduling Threshold (IST) */
-#define XHCI_REG_CAP_HCS2_ERST_MAX_GET(x) XHCI32_GET_BITS(x, 7, 4) /* Event Ring Segment Table Max (ERST Max) */
-#define XHCI_REG_CAP_HCS2_SPR (1 << 26) /* Scratchpad Restore (SPR) */
-#define XHCI_REG_CAP_HCS2_MAX_SCRATCHPAD_BUFS_GET(x) XHCI32_GET_BITS(x, 25, 21) | XHCI32_GET_BITS(x, 31, 27) /* Max Scratchpad Buffers (Max Scratchpad Bufs) */
+#define XHCI_REG_CAP_HCS2_IST_GET(x) XHCI32_GET_BITS(x, 3, 0) /* Isochronous Scheduling Threshold (IST) */
+#define XHCI_REG_CAP_HCS2_ERST_MAX_GET(x) XHCI32_GET_BITS(x, 7, 4) /* Event Ring Segment Table Max (ERST Max) */
+#define XHCI_REG_CAP_HCS2_SPR (1 << 26) /* Scratchpad Restore (SPR) */
+#define XHCI_REG_CAP_HCS2_MAX_SCRATCHPAD_BUFS_GET(x) XHCI32_GET_BITS(x, 25, 21) | XHCI32_GET_BITS(x, 31, 27) /* Max Scratchpad Buffers (Max Scratchpad Bufs) */
-/** @name XHCI_REG_CAP_HCS3 Register
+/** @name XHCI_REG_CAP_HCS3 Register
*/
-#define XHCI_REG_CAP_HCS3_U1_DEV_EXIT_LATENCY_GET(x) XHCI32_GET_BITS(x, 7, 0) /* U1 Device Exit Latency */
-#define XHCI_REG_CAP_HCS3_U2_DEV_EXIT_LATENCY_GET(x) XHCI32_GET_BITS(x, 31, 16) /* U2 Device Exit Latency */
+#define XHCI_REG_CAP_HCS3_U1_DEV_EXIT_LATENCY_GET(x) XHCI32_GET_BITS(x, 7, 0) /* U1 Device Exit Latency */
+#define XHCI_REG_CAP_HCS3_U2_DEV_EXIT_LATENCY_GET(x) XHCI32_GET_BITS(x, 31, 16) /* U2 Device Exit Latency */
-/** @name XHCI_REG_CAP_HCC Register
+/** @name XHCI_REG_CAP_HCC Register
*/
-#define XHCI_REG_CAP_HCC_AC64 (1 << 0) /* 64-bit Addressing Capabilitya 1: 64-bit */
-#define XHCI_REG_CAP_HCC_BNC (1 << 1) /* BW Negotiation Capability (BNC) 1: support */
-#define XHCI_REG_CAP_HCC_CSZ (1 << 2) /* Context Size (CSZ) 1: 64 byte context data */
-#define XHCI_REG_CAP_HCC_PPC (1 << 3) /* Port Power Control (PPC) 1: support */
-#define XHCI_REG_CAP_HCC_PIND (1 << 4) /* Port Indicators (PIND) 1: support */
-#define XHCI_REG_CAP_HCC_LHRC (1 << 5) /* Light HC Reset Capability (LHRC) 1: support */
-#define XHCI_REG_CAP_HCC_LTC (1 << 6) /* Latency Tolerance Messaging Capability (LTC) */
-#define XHCI_REG_CAP_HCC_NSS (1 << 7) /* No Secondary SID Support (NSS) */
-#define XHCI_REG_CAP_HCC_MAX_PSA_SIZE_GET(x) XHCI32_GET_BITS(x, 15, 12) /* Maximum Primary Stream Array Size (MaxPSASize) */
-#define XHCI_REG_CAP_HCC_XECP_GET(x) XHCI32_GET_BITS(x, 31, 16) /* xHCI Extended Capabilities Pointer (xECP) */
-
-/** @name XHCI_REG_CAP_DBOFF Register
+#define XHCI_REG_CAP_HCC_AC64 (1 << 0) /* 64-bit Addressing Capabilitya 1: 64-bit */
+#define XHCI_REG_CAP_HCC_BNC (1 << 1) /* BW Negotiation Capability (BNC) 1: support */
+#define XHCI_REG_CAP_HCC_CSZ (1 << 2) /* Context Size (CSZ) 1: 64 byte context data */
+#define XHCI_REG_CAP_HCC_PPC (1 << 3) /* Port Power Control (PPC) 1: support */
+#define XHCI_REG_CAP_HCC_PIND (1 << 4) /* Port Indicators (PIND) 1: support */
+#define XHCI_REG_CAP_HCC_LHRC (1 << 5) /* Light HC Reset Capability (LHRC) 1: support */
+#define XHCI_REG_CAP_HCC_LTC (1 << 6) /* Latency Tolerance Messaging Capability (LTC) */
+#define XHCI_REG_CAP_HCC_NSS (1 << 7) /* No Secondary SID Support (NSS) */
+#define XHCI_REG_CAP_HCC_MAX_PSA_SIZE_GET(x) XHCI32_GET_BITS(x, 15, 12) /* Maximum Primary Stream Array Size (MaxPSASize) */
+#define XHCI_REG_CAP_HCC_XECP_GET(x) XHCI32_GET_BITS(x, 31, 16) /* xHCI Extended Capabilities Pointer (xECP) */
+
+/** @name XHCI_REG_CAP_DBOFF Register
*/
#define XHCI_REG_CAP_DBOFF_GET(x) ((x) & XHCI_GENMASK(31, 2)) /* 32-byte offset of the Doorbell Array base address from the Base */
-/** @name XHCI_REG_CAP_RTSOFF Register
+/** @name XHCI_REG_CAP_RTSOFF Register
*/
#define XHCI_REG_CAP_RTSOFF_GET(x) ((x) & XHCI_GENMASK(31, 5)) /* 32-byte offset of the xHCI Runtime Registers */
/***************** Host Controller Operational Registers ***********************/
-/** @name XHCI_REG_OP_USBCMD Register
+/** @name XHCI_REG_OP_USBCMD Register
*/
-#define XHCI_REG_OP_USBCMD_RUN_STOP (1 << 0) /* Run/Stop (R/S) 1: RUN, 0: STOP - RW */
-#define XHCI_REG_OP_USBCMD_HCRST (1 << 1) /* Host Controller Reset (HCRST) 1: RESET - RW */
-#define XHCI_REG_OP_USBCMD_INTE (1 << 2) /* Interrupter Enable (INTE) 1: enabled - RW */
-#define XHCI_REG_OP_USBCMD_HSEE (1 << 3) /* Host System Error Enable (HSEE) - RW */
-#define XHCI_REG_OP_USBCMD_LHCRST (1 << 7) /* Light Host Controller Reset (LHCRST) - RW */
-#define XHCI_REG_OP_USBCMD_CSS (1 << 8) /* Controller Save State (CSS) - RW */
-#define XHCI_REG_OP_USBCMD_CRS (1 << 9) /* Controller Restore State (CRS) - RW */
-#define XHCI_REG_OP_USBCMD_EWE (1 << 10) /* Enable Wrap Event (EWE) - RW */
-#define XHCI_REG_OP_USBCMD_EU3S (1 << 11) /* Enable U3 MFINDEX Stop (EU3S) - RW */
-
-/** @name XHCI_REG_OP_USBSTS Register
+#define XHCI_REG_OP_USBCMD_RUN_STOP (1 << 0) /* Run/Stop (R/S) 1: RUN, 0: STOP - RW */
+#define XHCI_REG_OP_USBCMD_HCRST (1 << 1) /* Host Controller Reset (HCRST) 1: RESET - RW */
+#define XHCI_REG_OP_USBCMD_INTE (1 << 2) /* Interrupter Enable (INTE) 1: enabled - RW */
+#define XHCI_REG_OP_USBCMD_HSEE (1 << 3) /* Host System Error Enable (HSEE) - RW */
+#define XHCI_REG_OP_USBCMD_LHCRST (1 << 7) /* Light Host Controller Reset (LHCRST) - RW */
+#define XHCI_REG_OP_USBCMD_CSS (1 << 8) /* Controller Save State (CSS) - RW */
+#define XHCI_REG_OP_USBCMD_CRS (1 << 9) /* Controller Restore State (CRS) - RW */
+#define XHCI_REG_OP_USBCMD_EWE (1 << 10) /* Enable Wrap Event (EWE) - RW */
+#define XHCI_REG_OP_USBCMD_EU3S (1 << 11) /* Enable U3 MFINDEX Stop (EU3S) - RW */
+
+/** @name XHCI_REG_OP_USBSTS Register
*/
-#define XHCI_REG_OP_USBSTS_HCH (1 << 0) /* 1: Stopped executing */
-#define XHCI_REG_OP_USBSTS_HSE (1 << 2) /* 1: Serious error detected */
-#define XHCI_REG_OP_USBSTS_EINT (1 << 3) /* 1: Interrupt Pending (IP) */
-#define XHCI_REG_OP_USBSTS_PCD (1 << 4) /* 1: Port Change Detect */
-#define XHCI_REG_OP_USBSTS_SSS (1 << 8) /* remain 1 while the xHC saves its internal state */
-#define XHCI_REG_OP_USBSTS_RSS (1 << 9) /* remain 1 while the xHC restores its internal state */
-#define XHCI_REG_OP_USBSTS_SRE (1 << 10) /* if error occurs during a Save or Restore operation this bit shall be set to ‘1’. */
-#define XHCI_REG_OP_USBSTS_CNR (1 << 11) /* 1: Controller Not Ready */
-#define XHCI_REG_OP_USBSTS_HCE (1 << 12) /* 1: Internal xHC error condition */
-#define XHCI_REG_OP_USBSTS_PRSRV_MASK ((1 << 1) | 0xffffe000) /* Rsvd bits */
-
-
-/** @name XHCI_REG_OP_PAGESIZE Register
+#define XHCI_REG_OP_USBSTS_HCH (1 << 0) /* 1: Stopped executing */
+#define XHCI_REG_OP_USBSTS_HSE (1 << 2) /* 1: Serious error detected */
+#define XHCI_REG_OP_USBSTS_EINT (1 << 3) /* 1: Interrupt Pending (IP) */
+#define XHCI_REG_OP_USBSTS_PCD (1 << 4) /* 1: Port Change Detect */
+#define XHCI_REG_OP_USBSTS_SSS (1 << 8) /* remain 1 while the xHC saves its internal state */
+#define XHCI_REG_OP_USBSTS_RSS (1 << 9) /* remain 1 while the xHC restores its internal state */
+#define XHCI_REG_OP_USBSTS_SRE (1 << 10) /* if error occurs during a Save or Restore operation this bit shall be set to ‘1’. */
+#define XHCI_REG_OP_USBSTS_CNR (1 << 11) /* 1: Controller Not Ready */
+#define XHCI_REG_OP_USBSTS_HCE (1 << 12) /* 1: Internal xHC error condition */
+#define XHCI_REG_OP_USBSTS_PRSRV_MASK ((1 << 1) | 0xffffe000) /* Rsvd bits */
+
+
+/** @name XHCI_REG_OP_PAGESIZE Register
*/
/* This xHC supports a page size of 2^(n+12) if bit n is Set */
-#define XHCI_REG_OP_PAGESIZE_4K (1 << 0) /* if bit 0 is Set, the xHC supports 4k byte page sizes */
+#define XHCI_REG_OP_PAGESIZE_4K (1 << 0) /* if bit 0 is Set, the xHC supports 4k byte page sizes */
-/** @name XHCI_REG_OP_CRCR Register
+/** @name XHCI_REG_OP_CRCR Register
*/
-#define XHCI_REG_OP_CRCR_RCS (1 << 0) /* Ring Cycle State, value of the xHC Consumer Cycle State (CCS) flag */
-#define XHCI_REG_OP_CRCR_CS (1 << 1) /* Command Stop, 1 */
-#define XHCI_REG_OP_CRCR_CA (1 << 2) /* Command Abort, 1 */
-#define XHCI_REG_OP_CRCR_CRR (1 << 3) /* Command Ring Running */
-#define XHCI_REG_OP_CRCR_CR_PTR_MASK XHCI_GENMASK_ULL(63, 6) /* Command Ring Pointer, Dequeue Ptr of Command Ring */
+#define XHCI_REG_OP_CRCR_RCS (1 << 0) /* Ring Cycle State, value of the xHC Consumer Cycle State (CCS) flag */
+#define XHCI_REG_OP_CRCR_CS (1 << 1) /* Command Stop, 1 */
+#define XHCI_REG_OP_CRCR_CA (1 << 2) /* Command Abort, 1 */
+#define XHCI_REG_OP_CRCR_CRR (1 << 3) /* Command Ring Running */
+#define XHCI_REG_OP_CRCR_CR_PTR_MASK XHCI_GENMASK_ULL(63, 6) /* Command Ring Pointer, Dequeue Ptr of Command Ring */
-/** @name XHCI_REG_OP_DCBAAP Register
+/** @name XHCI_REG_OP_DCBAAP Register
*/
-#define XHCI_REG_OP_DCBAAP_MASK XHCI_GENMASK_ULL(63, 6) /* bit[31:6] Ptr of DCBAA */
+#define XHCI_REG_OP_DCBAAP_MASK XHCI_GENMASK_ULL(63, 6) /* bit[31:6] Ptr of DCBAA */
-/** @name XHCI_REG_OP_CONFIG Register
+/** @name XHCI_REG_OP_CONFIG Register
*/
#define XHCI_REG_OP_CONFIG_MAX_SLOTS_EN_MASK XHCI_GENMASK(7, 0) /* Max Device Slots Enabled (MaxSlotsEn) – RW */
-#define XHCI_REG_OP_CONFIG_MAX_SLOTS_EN_SET(x) XHCI32_SET_BITS(x, 7, 0) /* bit[7:0] Max Device Slots Enabled */
+#define XHCI_REG_OP_CONFIG_MAX_SLOTS_EN_SET(x) XHCI32_SET_BITS(x, 7, 0) /* bit[7:0] Max Device Slots Enabled */
#define XHCI_REG_OP_CONFIG_MAX_SLOTS_EN_GET(x) XHCI32_GET_BITS(x, 7, 0)
-/** @name XHCI_REG_OP_PORTS_PORTSC Register
+/** @name XHCI_REG_OP_PORTS_PORTSC Register
*/
-#define XHCI_REG_OP_PORTS_PORTSC_CCS (1 << 0) /* Current Connect Status (CCS) – ROS */
-#define XHCI_REG_OP_PORTS_PORTSC_PED (1 << 1) /* Port Enabled/Disabled (PED) – RW1CS */
-#define XHCI_REG_OP_PORTS_PORTSC_OCA (1 << 3) /* Over-current Active (OCA) – RO */
-#define XHCI_REG_OP_PORTS_PORTSC_PR (1 << 4) /* Port Reset (PR) – RW1S */
-#define XHCI_REG_OP_PORTS_PORTSC_PLS_GET(x) XHCI32_GET_BITS(x, 8, 5) /* Port Link State (PLS) – RWS */
-#define XHCI_REG_OP_PORTS_PORTSC_PLS_SET(x) XHCI32_SET_BITS(x, 8, 5)
-#define XHCI_REG_OP_PORTS_PORTSC_PLS_MASK XHCI_GENMASK(8, 5)
-#define XHCI_REG_OP_PORTS_PORTSC_PLS(x) (x << 5)
-#define XHCI_REG_OP_PORTS_PORTSC_PLS_SET(x) XHCI32_SET_BITS(x, 8, 5)
-
-enum PLSStatus{
+#define XHCI_REG_OP_PORTS_PORTSC_CCS (1 << 0) /* Current Connect Status (CCS) – ROS */
+#define XHCI_REG_OP_PORTS_PORTSC_PED (1 << 1) /* Port Enabled/Disabled (PED) – RW1CS */
+#define XHCI_REG_OP_PORTS_PORTSC_OCA (1 << 3) /* Over-current Active (OCA) – RO */
+#define XHCI_REG_OP_PORTS_PORTSC_PR (1 << 4) /* Port Reset (PR) – RW1S */
+#define XHCI_REG_OP_PORTS_PORTSC_PLS_GET(x) XHCI32_GET_BITS(x, 8, 5) /* Port Link State (PLS) – RWS */
+#define XHCI_REG_OP_PORTS_PORTSC_PLS_SET(x) XHCI32_SET_BITS(x, 8, 5)
+#define XHCI_REG_OP_PORTS_PORTSC_PLS_MASK XHCI_GENMASK(8, 5)
+#define XHCI_REG_OP_PORTS_PORTSC_PLS(x) (x << 5)
+#define XHCI_REG_OP_PORTS_PORTSC_PLS_SET(x) XHCI32_SET_BITS(x, 8, 5)
+
+enum PLSStatus
+{
PLS_U0 = 0,
PLS_U1 = 1,
PLS_U2 = 2,
@@ -222,105 +223,105 @@ enum PLSStatus{
PLS_RESUME = 15,
}; /* Port status type */
-#define XHCI_REG_OP_PORTS_PORTSC_PP (1 << 9) /* Port Power (PP) – RWS */
-#define XHCI_REG_OP_PORTS_PORTSC_PORT_SPEED_GET(x) XHCI32_GET_BITS(x, 13, 10) /* Port Speed (Port Speed) – ROS */
+#define XHCI_REG_OP_PORTS_PORTSC_PP (1 << 9) /* Port Power (PP) – RWS */
+#define XHCI_REG_OP_PORTS_PORTSC_PORT_SPEED_GET(x) XHCI32_GET_BITS(x, 13, 10) /* Port Speed (Port Speed) – ROS */
/* Protocol Speed ID (PSI) */
-#define XHCI_PORT_SPEED_UNKOWN 0U
-#define XHCI_PORT_SPEED_FULL 1U
-#define XHCI_PORT_SPEED_LOW 2U
-#define XHCI_PORT_SPEED_HIGH 3U
-#define XHCI_PORT_SPEED_SUPER 4U
+#define XHCI_PORT_SPEED_UNKOWN 0U
+#define XHCI_PORT_SPEED_FULL 1U
+#define XHCI_PORT_SPEED_LOW 2U
+#define XHCI_PORT_SPEED_HIGH 3U
+#define XHCI_PORT_SPEED_SUPER 4U
#define XHCI_REG_OP_PORTS_PORTSC_PIC_SET(x) XHCI32_SET_BITS(x, 15, 14)
-#define XHCI_REG_OP_PORTS_PORTSC_PIC_MASK XHCI_GENMASK(15, 14)
-
-#define XHCI_REG_OP_PORTS_PORTSC_LWS (1 << 16) /* Port Link State Write Strobe (LWS) */
-#define XHCI_REG_OP_PORTS_PORTSC_CSC (1 << 17) /* Connect Status Change (CSC) */
-#define XHCI_REG_OP_PORTS_PORTSC_PEC (1 << 18) /* Port Enabled/Disabled Change (PEC) 1: clear PED */
-#define XHCI_REG_OP_PORTS_PORTSC_WRC (1 << 19) /* Warm Port Reset Change 1: Warm Reset complete */
-#define XHCI_REG_OP_PORTS_PORTSC_OCC (1 << 20) /* Over-current Change 1: Over-current Active */
-#define XHCI_REG_OP_PORTS_PORTSC_PRC (1 << 21) /* Port Reset Change 1: Transition of Port Reset */
-#define XHCI_REG_OP_PORTS_PORTSC_PLC (1 << 22) /* Port Link State Change 1: PLS transition */
-#define XHCI_REG_OP_PORTS_PORTSC_CEC (1 << 23) /* Port Config Error Change 1: Port Config Error detected */
-#define XHCI_REG_OP_PORTS_PORTSC_CAS (1 << 24) /* Cold Attach Status 1: Far-end Receiver Terminations were detected */
-#define XHCI_REG_OP_PORTS_PORTSC_WCE (1 << 25) /* Wake on Connect Enable 1: enable port to be sensitive to device connects */
-#define XHCI_REG_OP_PORTS_PORTSC_WDE (1 << 26) /* Wake on Disconnect Enable 1: enable port to be sensitive to device disconnects */
-#define XHCI_REG_OP_PORTS_PORTSC_WOE (1 << 27) /* Wake on Over-current Enable 1: enable port to be sensitive to over-current conditions */
-#define XHCI_REG_OP_PORTS_PORTSC_DR (1 << 30) /* Device Removable, 0: Device is removable. 1: Device is non-removable */
-#define XHCI_REG_OP_PORTS_PORTSC_WPR (1 << 31) /* Warm Port Reset 1: follow Warm Reset sequence */
+#define XHCI_REG_OP_PORTS_PORTSC_PIC_MASK XHCI_GENMASK(15, 14)
+
+#define XHCI_REG_OP_PORTS_PORTSC_LWS (1 << 16) /* Port Link State Write Strobe (LWS) */
+#define XHCI_REG_OP_PORTS_PORTSC_CSC (1 << 17) /* Connect Status Change (CSC) */
+#define XHCI_REG_OP_PORTS_PORTSC_PEC (1 << 18) /* Port Enabled/Disabled Change (PEC) 1: clear PED */
+#define XHCI_REG_OP_PORTS_PORTSC_WRC (1 << 19) /* Warm Port Reset Change 1: Warm Reset complete */
+#define XHCI_REG_OP_PORTS_PORTSC_OCC (1 << 20) /* Over-current Change 1: Over-current Active */
+#define XHCI_REG_OP_PORTS_PORTSC_PRC (1 << 21) /* Port Reset Change 1: Transition of Port Reset */
+#define XHCI_REG_OP_PORTS_PORTSC_PLC (1 << 22) /* Port Link State Change 1: PLS transition */
+#define XHCI_REG_OP_PORTS_PORTSC_CEC (1 << 23) /* Port Config Error Change 1: Port Config Error detected */
+#define XHCI_REG_OP_PORTS_PORTSC_CAS (1 << 24) /* Cold Attach Status 1: Far-end Receiver Terminations were detected */
+#define XHCI_REG_OP_PORTS_PORTSC_WCE (1 << 25) /* Wake on Connect Enable 1: enable port to be sensitive to device connects */
+#define XHCI_REG_OP_PORTS_PORTSC_WDE (1 << 26) /* Wake on Disconnect Enable 1: enable port to be sensitive to device disconnects */
+#define XHCI_REG_OP_PORTS_PORTSC_WOE (1 << 27) /* Wake on Over-current Enable 1: enable port to be sensitive to over-current conditions */
+#define XHCI_REG_OP_PORTS_PORTSC_DR (1 << 30) /* Device Removable, 0: Device is removable. 1: Device is non-removable */
+#define XHCI_REG_OP_PORTS_PORTSC_WPR (1 << 31) /* Warm Port Reset 1: follow Warm Reset sequence */
#define XHCI_REG_OP_PORTS_PORTSC_RW_MASK (XHCI_REG_OP_PORTS_PORTSC_PR | XHCI_REG_OP_PORTS_PORTSC_PLS_MASK | XHCI_REG_OP_PORTS_PORTSC_PP \
- | XHCI_REG_OP_PORTS_PORTSC_PIC_MASK | XHCI_REG_OP_PORTS_PORTSC_LWS | XHCI_REG_OP_PORTS_PORTSC_WCE \
- | XHCI_REG_OP_PORTS_PORTSC_WDE | XHCI_REG_OP_PORTS_PORTSC_WOE)
+ | XHCI_REG_OP_PORTS_PORTSC_PIC_MASK | XHCI_REG_OP_PORTS_PORTSC_LWS | XHCI_REG_OP_PORTS_PORTSC_WCE \
+ | XHCI_REG_OP_PORTS_PORTSC_WDE | XHCI_REG_OP_PORTS_PORTSC_WOE)
/***************** Host Controller Runtime Registers ***********************/
-/** @name XHCI_REG_RT_IR_IMAN Register
+/** @name XHCI_REG_RT_IR_IMAN Register
*/
-#define XHCI_REG_RT_IR_IMAN_IP (1 << 0) /* Interrupt Pending, 1: an interrupt is pending for this Interrupter */
-#define XHCI_REG_RT_IR_IMAN_IE (1 << 1) /* Interrupt Enable, 1: capable of generating an interrupt. */
+#define XHCI_REG_RT_IR_IMAN_IP (1 << 0) /* Interrupt Pending, 1: an interrupt is pending for this Interrupter */
+#define XHCI_REG_RT_IR_IMAN_IE (1 << 1) /* Interrupt Enable, 1: capable of generating an interrupt. */
-/** @name XHCI_REG_RT_IR_IMOD Register
+/** @name XHCI_REG_RT_IR_IMOD Register
*/
-#define XHCI_REG_RT_IR_IMOD_IMODI_MASK XHCI_GENMASK(15, 0) /* bit[15:0] Interrupt Moderation Interval default 4000 ==> 1ms */
-#define XHCI_REG_RT_IR_IMOD_IMODC_MASK XHCI_GENMASK(31, 16) /* bit[31:16] Interrupt Moderation Counter(Down counter) */
+#define XHCI_REG_RT_IR_IMOD_IMODI_MASK XHCI_GENMASK(15, 0) /* bit[15:0] Interrupt Moderation Interval default 4000 ==> 1ms */
+#define XHCI_REG_RT_IR_IMOD_IMODC_MASK XHCI_GENMASK(31, 16) /* bit[31:16] Interrupt Moderation Counter(Down counter) */
-/** @name XHCI_REG_RT_IR_ERSTSZ Register
+/** @name XHCI_REG_RT_IR_ERSTSZ Register
*/
-#define XHCI_REG_RT_IR_ERSTSZ_MASK XHCI_GENMASK(15, 0) /* bit[15:0] the number of valid Event Ring Segment Table entries */
+#define XHCI_REG_RT_IR_ERSTSZ_MASK XHCI_GENMASK(15, 0) /* bit[15:0] the number of valid Event Ring Segment Table entries */
-/** @name XHCI_REG_RT_IR_ERSTBA Register
+/** @name XHCI_REG_RT_IR_ERSTBA Register
*/
-#define XHCI_REG_RT_IR_ERSTBA_MASK XHCI_GENMASK_ULL(63, 6) /* Event Ring Segment Table Base Address */
+#define XHCI_REG_RT_IR_ERSTBA_MASK XHCI_GENMASK_ULL(63, 6) /* Event Ring Segment Table Base Address */
-/** @name XHCI_REG_RT_IR_ERDP Register
+/** @name XHCI_REG_RT_IR_ERDP Register
*/
-#define XHCI_REG_RT_IR_ERDP_DESI_MASK XHCI_GENMASK_ULL(2, 0) /* bit[2:0] Dequeue ERST Segment Index */
-#define XHCI_REG_RT_IR_ERDP_EHB (1 << 3) /* Event Handler Busy */
-#define XHCI_REG_RT_IR_ERDP_MASK XHCI_GENMASK_ULL(63, 4) /* Event Ring Dequeue Pointer */
+#define XHCI_REG_RT_IR_ERDP_DESI_MASK XHCI_GENMASK_ULL(2, 0) /* bit[2:0] Dequeue ERST Segment Index */
+#define XHCI_REG_RT_IR_ERDP_EHB (1 << 3) /* Event Handler Busy */
+#define XHCI_REG_RT_IR_ERDP_MASK XHCI_GENMASK_ULL(63, 4) /* Event Ring Dequeue Pointer */
/***************** Doorbell Register ***********************/
-#define XHCI_REG_DB_TARGET_HC_COMMAND 0 /* Host Controller Doorbell (0) Command Doorbell */
-#define XHCI_REG_DB_TARGET_EP0 1 /* Device Context Doorbells Control EP 0 Enqueue Pointer Update */
-#define XHCI_REG_DB_TARGET_EP1_OUT 2 /* EP 1 OUT Enqueue Pointer Update */
-#define XHCI_REG_DB_TARGET_EP1_IN 3 /* EP 1 IN Enqueue Pointer Update */
-#define XHCI_REG_DB_TARGET_EP15_OUT 30 /* EP 15 OUT Enqueue Pointer Update */
-#define XHCI_REG_DB_TARGET_EP15_IN 31 /* EP 15 IN Enqueue Pointer Update */
+#define XHCI_REG_DB_TARGET_HC_COMMAND 0 /* Host Controller Doorbell (0) Command Doorbell */
+#define XHCI_REG_DB_TARGET_EP0 1 /* Device Context Doorbells Control EP 0 Enqueue Pointer Update */
+#define XHCI_REG_DB_TARGET_EP1_OUT 2 /* EP 1 OUT Enqueue Pointer Update */
+#define XHCI_REG_DB_TARGET_EP1_IN 3 /* EP 1 IN Enqueue Pointer Update */
+#define XHCI_REG_DB_TARGET_EP15_OUT 30 /* EP 15 OUT Enqueue Pointer Update */
+#define XHCI_REG_DB_TARGET_EP15_IN 31 /* EP 15 IN Enqueue Pointer Update */
/***************** xHCI Extended Capabilities Registers ***********************/
-#define XHCI_REG_EXT_CAP_USBSPCF_OFFSET 0x0
-#define XHCI_REG_EXT_CAP_CAP_ID_GET(x) XHCI32_GET_BITS(x, 7, 0)
+#define XHCI_REG_EXT_CAP_USBSPCF_OFFSET 0x0
+#define XHCI_REG_EXT_CAP_CAP_ID_GET(x) XHCI32_GET_BITS(x, 7, 0)
#define XHCI_REG_EXT_NEXT_CAP_PTR_GET(x) XHCI32_GET_BITS(x, 15, 8)
/* refer to 'Table 138: xHCI Extended Capability Codes' for more details */
enum
{
- XHCI_EXT_CAP_ID_USB_LEGACY_SUPPORT = 1,
- XHCI_EXT_CAP_ID_SUPPORT_PROTOCOL = 2,
- XHCI_EXT_CAP_ID_EXTEND_POWER_MANAGEMENT = 3,
- XHCI_EXT_CAP_ID_IO_VIRTUALIZATION = 4,
- XHCI_EXT_CAP_ID_MESSAGE_INTERRUPT = 5,
- XHCI_EXT_CAP_ID_LOCAL_MEMORY = 6,
- XHCI_EXT_CAP_ID_USB_DEBUG_CAPABILITY = 10,
- XHCI_EXT_CAP_ID_EXT_MESSAGE_INTERRUPT = 17,
-
- XHCI_EXT_CAP_ID_VENDOR_DEFINED_MIN = 192,
- XHCI_EXT_CAP_ID_VENDOR_DEFINED_MAX = 255
+ XHCI_EXT_CAP_ID_USB_LEGACY_SUPPORT = 1,
+ XHCI_EXT_CAP_ID_SUPPORT_PROTOCOL = 2,
+ XHCI_EXT_CAP_ID_EXTEND_POWER_MANAGEMENT = 3,
+ XHCI_EXT_CAP_ID_IO_VIRTUALIZATION = 4,
+ XHCI_EXT_CAP_ID_MESSAGE_INTERRUPT = 5,
+ XHCI_EXT_CAP_ID_LOCAL_MEMORY = 6,
+ XHCI_EXT_CAP_ID_USB_DEBUG_CAPABILITY = 10,
+ XHCI_EXT_CAP_ID_EXT_MESSAGE_INTERRUPT = 17,
+
+ XHCI_EXT_CAP_ID_VENDOR_DEFINED_MIN = 192,
+ XHCI_EXT_CAP_ID_VENDOR_DEFINED_MAX = 255
};
/* xHCI Supported Protocol Capability */
-#define XHCI_REG_EXT_CAP_USBSPCFDEF_OFFSET 0x4
+#define XHCI_REG_EXT_CAP_USBSPCFDEF_OFFSET 0x4
-#define XHCI_USBSPCF_MINOR_REVERSION_GET(x) XHCI32_GET_BITS(x, 23, 16)
-#define XHCI_USBSPCF_MAJOR_REVERSION_GET(x) XHCI32_GET_BITS(x, 31, 24)
+#define XHCI_USBSPCF_MINOR_REVERSION_GET(x) XHCI32_GET_BITS(x, 23, 16)
+#define XHCI_USBSPCF_MAJOR_REVERSION_GET(x) XHCI32_GET_BITS(x, 31, 24)
-#define XHCI_USBSPCFDEF_NAME_STRING_GET(x) XHCI32_GET_BITS(x, 31, 0) /* four ASCII characters may be defined */
-#define XHCI_USBSPCFDEF_NAME_STRING_USB 0x20425355 /* ASCII = "USB" */
+#define XHCI_USBSPCFDEF_NAME_STRING_GET(x) XHCI32_GET_BITS(x, 31, 0) /* four ASCII characters may be defined */
+#define XHCI_USBSPCFDEF_NAME_STRING_USB 0x20425355 /* ASCII = "USB" */
-#define XHCI_REG_EXT_CAP_USBSPCFDEF2_OFFSET 0x8
+#define XHCI_REG_EXT_CAP_USBSPCFDEF2_OFFSET 0x8
#define XHCI_USBSPCFDEF2_COMPATIBLE_PORT_OFF_GET(x) XHCI32_GET_BITS(x, 7, 0)
#define XHCI_USBSPCFDEF2_COMPATIBLE_PORT_CNT_GET(x) XHCI32_GET_BITS(x, 15, 8)
-#define XHCI_USBSPCFDEF2_PROTOCOL_DEFINED_GET(x) XHCI32_GET_BITS(x, 27, 16)
+#define XHCI_USBSPCFDEF2_PROTOCOL_DEFINED_GET(x) XHCI32_GET_BITS(x, 27, 16)
/* trb bit definitions */
@@ -351,7 +352,7 @@ enum
#define TRB_TR_FRAMEID_SHIFT 20
#define TRB_TR_FRAMEID_MASK 0x7ff
#define TRB_TR_SIA (1<<31)
-#define TRB_TR_TRANS_LEN_SET(len) XHCI32_SET_BITS(len, 23, 0)
+#define TRB_TR_TRANS_LEN_SET(len) XHCI32_SET_BITS(len, 23, 0)
#define TRB_TR_TRANS_LEN_MASK XHCI_GENMASK(23, 0)
#define TRB_TR_DIR (1<<16)
@@ -384,7 +385,8 @@ enum
#define TRB_INTR(t) (((t).status >> TRB_INTR_SHIFT) & TRB_INTR_MASK)
/************************** Type Definitions *********************************/
-enum TRBType {
+enum TRBType
+{
TRB_RESERVED = 0,
TR_NORMAL,
TR_SETUP,
@@ -419,7 +421,8 @@ enum TRBType {
ER_MFINDEX_WRAP,
};
-enum TRBCCode {
+enum TRBCCode
+{
CC_DISCONNECTED = -2,
CC_TIMEOUT = -1,
CC_INVALID = 0,
@@ -478,45 +481,53 @@ enum TRBCCode {
/************************** Function Prototypes ******************************/
/*****************************************************************************/
-static inline void writeq(unsigned long addr, uint64_t val) {
+static inline void writeq(unsigned long addr, uint64_t val)
+{
BARRIER();
*(volatile uint64_t *)addr = val;
}
-static inline void writel(unsigned long addr, uint32_t val) {
+static inline void writel(unsigned long addr, uint32_t val)
+{
BARRIER();
*(volatile uint32_t *)addr = val;
}
-static inline void writew(unsigned long addr, uint16_t val) {
+static inline void writew(unsigned long addr, uint16_t val)
+{
BARRIER();
*(volatile uint16_t *)addr = val;
}
-static inline void writeb(unsigned long addr, uint8_t val) {
+static inline void writeb(unsigned long addr, uint8_t val)
+{
BARRIER();
*(volatile uint8_t *)addr = val;
}
-static inline uint64_t readq(unsigned long addr) {
+static inline uint64_t readq(unsigned long addr)
+{
uint64_t val = *(volatile const uint64_t *)addr;
BARRIER();
return val;
}
-static inline uint32_t readl(unsigned long addr) {
+static inline uint32_t readl(unsigned long addr)
+{
uint32_t val = *(volatile const uint32_t *)addr;
BARRIER();
return val;
}
-static inline uint16_t readw(unsigned long addr) {
+static inline uint16_t readw(unsigned long addr)
+{
uint16_t val = *(volatile const uint16_t *)addr;
BARRIER();
return val;
}
-static inline uint8_t readb(unsigned long addr) {
+static inline uint8_t readb(unsigned long addr)
+{
uint8_t val = *(volatile const uint8_t *)addr;
BARRIER();
return val;
diff --git a/third-party/fatfs-0.1.3/Kconfig b/third-party/fatfs-0.1.3/Kconfig
deleted file mode 100644
index 26db7515ddd0a828f0e4406b37a8c12061acb5ea..0000000000000000000000000000000000000000
--- a/third-party/fatfs-0.1.3/Kconfig
+++ /dev/null
@@ -1,34 +0,0 @@
-menu "FATFS Configuration"
- choice FATFS_DISK_TYPE
- prompt "Select Fatfs Disk Type"
- default SELECT_FATFS_RAM_DISK
- help
- Select Disk Type for FATFS
-
- config SELECT_FATFS_RAM_DISK
- bool "Ram Disk"
-
- config SELECT_FATFS_FSDMMC
- bool "Sd Card(FSdmmc)"
- select USE_SDMMC_CMD
-
- config SELECT_FATFS_FSATA_PCIE
- bool "Sata_Pcie"
- select USE_PCIE
- select ENABLE_F_PCIE
- select USE_SATA
- select ENABLE_FSATA
-
- config SELECT_FATFS_FSATA_CONTROLLER
- depends on TARGET_E2000
- bool "Sata_Controller"
- select USE_SATA
- select ENABLE_FSATA
-
- config SELECT_FATFS_USB
- bool "Usb Disk"
- select USE_USB
- select ENABLE_USB_FXHCI
-
- endchoice # LETTER_SHELL_USART_TYPE
-endmenu
\ No newline at end of file
diff --git a/third-party/fatfs-0.1.3/ff.c b/third-party/fatfs-0.1.3/ff.c
deleted file mode 100644
index 35c9755365d460f74c91f61d5fc93aa05fa65ee3..0000000000000000000000000000000000000000
--- a/third-party/fatfs-0.1.3/ff.c
+++ /dev/null
@@ -1,6533 +0,0 @@
-/*----------------------------------------------------------------------------/
-/ FatFs - Generic FAT Filesystem Module R0.13b /
-/-----------------------------------------------------------------------------/
-/
-/ Copyright (C) 2018, ChaN, all right reserved.
-/
-/ FatFs module is an open source software. Redistribution and use of FatFs in
-/ source and binary forms, with or without modification, are permitted provided
-/ that the following condition is met:
-/
-/ 1. Redistributions of source code must retain the above copyright notice,
-/ this condition and the following disclaimer.
-/
-/ This software is provided by the copyright holder and contributors "AS IS"
-/ and any warranties related to this software are DISCLAIMED.
-/ The copyright owner or contributors be NOT LIABLE for any damages caused
-/ by use of this software.
-/
-/----------------------------------------------------------------------------*/
-
-
-#include "ff.h" /* Declarations of FatFs API */
-#include "diskio.h" /* Declarations of device I/O functions */
-
-
-/*--------------------------------------------------------------------------
-
- Module Private Definitions
-
----------------------------------------------------------------------------*/
-
-#if FF_DEFINED != 63463 /* Revision ID */
-#error Wrong include file (ff.h).
-#endif
-
-
-/* Character code support macros */
-#define IsUpper(c) ((c) >= 'A' && (c) <= 'Z')
-#define IsLower(c) ((c) >= 'a' && (c) <= 'z')
-#define IsDigit(c) ((c) >= '0' && (c) <= '9')
-#define IsSurrogate(c) ((c) >= 0xD800 && (c) <= 0xDFFF)
-#define IsSurrogateH(c) ((c) >= 0xD800 && (c) <= 0xDBFF)
-#define IsSurrogateL(c) ((c) >= 0xDC00 && (c) <= 0xDFFF)
-
-
-/* Additional file attribute bits for internal use */
-#define AM_VOL 0x08 /* Volume label */
-#define AM_LFN 0x0F /* LFN entry */
-#define AM_MASK 0x3F /* Mask of defined bits */
-
-
-/* Additional file access control and file status flags for internal use */
-#define FA_SEEKEND 0x20 /* Seek to end of the file on file open */
-#define FA_MODIFIED 0x40 /* File has been modified */
-#define FA_DIRTY 0x80 /* FIL.buf[] needs to be written-back */
-
-
-/* Name status flags in fn[11] */
-#define NSFLAG 11 /* Index of the name status byte */
-#define NS_LOSS 0x01 /* Out of 8.3 format */
-#define NS_LFN 0x02 /* Force to create LFN entry */
-#define NS_LAST 0x04 /* Last segment */
-#define NS_BODY 0x08 /* Lower case flag (body) */
-#define NS_EXT 0x10 /* Lower case flag (ext) */
-#define NS_DOT 0x20 /* Dot entry */
-#define NS_NOLFN 0x40 /* Do not find LFN */
-#define NS_NONAME 0x80 /* Not followed */
-
-
-/* Limits and boundaries */
-#define MAX_DIR 0x200000 /* Max size of FAT directory */
-#define MAX_DIR_EX 0x10000000 /* Max size of exFAT directory */
-#define MAX_FAT12 0xFF5 /* Max FAT12 clusters (differs from specs, but right for real DOS/Windows behavior) */
-#define MAX_FAT16 0xFFF5 /* Max FAT16 clusters (differs from specs, but right for real DOS/Windows behavior) */
-#define MAX_FAT32 0x0FFFFFF5 /* Max FAT32 clusters (not specified, practical limit) */
-#define MAX_EXFAT 0x7FFFFFFD /* Max exFAT clusters (differs from specs, implementation limit) */
-
-
-/* FatFs refers the FAT structure as simple byte array instead of structure member
-/ because the C structure is not binary compatible between different platforms */
-
-#define BS_JmpBoot 0 /* x86 jump instruction (3-byte) */
-#define BS_OEMName 3 /* OEM name (8-byte) */
-#define BPB_BytsPerSec 11 /* Sector size [byte] (WORD) */
-#define BPB_SecPerClus 13 /* Cluster size [sector] (BYTE) */
-#define BPB_RsvdSecCnt 14 /* Size of reserved area [sector] (WORD) */
-#define BPB_NumFATs 16 /* Number of FATs (BYTE) */
-#define BPB_RootEntCnt 17 /* Size of root directory area for FAT [entry] (WORD) */
-#define BPB_TotSec16 19 /* Volume size (16-bit) [sector] (WORD) */
-#define BPB_Media 21 /* Media descriptor byte (BYTE) */
-#define BPB_FATSz16 22 /* FAT size (16-bit) [sector] (WORD) */
-#define BPB_SecPerTrk 24 /* Number of sectors per track for int13h [sector] (WORD) */
-#define BPB_NumHeads 26 /* Number of heads for int13h (WORD) */
-#define BPB_HiddSec 28 /* Volume offset from top of the drive (DWORD) */
-#define BPB_TotSec32 32 /* Volume size (32-bit) [sector] (DWORD) */
-#define BS_DrvNum 36 /* Physical drive number for int13h (BYTE) */
-#define BS_NTres 37 /* WindowsNT error flag (BYTE) */
-#define BS_BootSig 38 /* Extended boot signature (BYTE) */
-#define BS_VolID 39 /* Volume serial number (DWORD) */
-#define BS_VolLab 43 /* Volume label string (8-byte) */
-#define BS_FilSysType 54 /* Filesystem type string (8-byte) */
-#define BS_BootCode 62 /* Boot code (448-byte) */
-#define BS_55AA 510 /* Signature word (WORD) */
-
-#define BPB_FATSz32 36 /* FAT32: FAT size [sector] (DWORD) */
-#define BPB_ExtFlags32 40 /* FAT32: Extended flags (WORD) */
-#define BPB_FSVer32 42 /* FAT32: Filesystem version (WORD) */
-#define BPB_RootClus32 44 /* FAT32: Root directory cluster (DWORD) */
-#define BPB_FSInfo32 48 /* FAT32: Offset of FSINFO sector (WORD) */
-#define BPB_BkBootSec32 50 /* FAT32: Offset of backup boot sector (WORD) */
-#define BS_DrvNum32 64 /* FAT32: Physical drive number for int13h (BYTE) */
-#define BS_NTres32 65 /* FAT32: Error flag (BYTE) */
-#define BS_BootSig32 66 /* FAT32: Extended boot signature (BYTE) */
-#define BS_VolID32 67 /* FAT32: Volume serial number (DWORD) */
-#define BS_VolLab32 71 /* FAT32: Volume label string (8-byte) */
-#define BS_FilSysType32 82 /* FAT32: Filesystem type string (8-byte) */
-#define BS_BootCode32 90 /* FAT32: Boot code (420-byte) */
-
-#define BPB_ZeroedEx 11 /* exFAT: MBZ field (53-byte) */
-#define BPB_VolOfsEx 64 /* exFAT: Volume offset from top of the drive [sector] (QWORD) */
-#define BPB_TotSecEx 72 /* exFAT: Volume size [sector] (QWORD) */
-#define BPB_FatOfsEx 80 /* exFAT: FAT offset from top of the volume [sector] (DWORD) */
-#define BPB_FatSzEx 84 /* exFAT: FAT size [sector] (DWORD) */
-#define BPB_DataOfsEx 88 /* exFAT: Data offset from top of the volume [sector] (DWORD) */
-#define BPB_NumClusEx 92 /* exFAT: Number of clusters (DWORD) */
-#define BPB_RootClusEx 96 /* exFAT: Root directory start cluster (DWORD) */
-#define BPB_VolIDEx 100 /* exFAT: Volume serial number (DWORD) */
-#define BPB_FSVerEx 104 /* exFAT: Filesystem version (WORD) */
-#define BPB_VolFlagEx 106 /* exFAT: Volume flags (WORD) */
-#define BPB_BytsPerSecEx 108 /* exFAT: Log2 of sector size in unit of byte (BYTE) */
-#define BPB_SecPerClusEx 109 /* exFAT: Log2 of cluster size in unit of sector (BYTE) */
-#define BPB_NumFATsEx 110 /* exFAT: Number of FATs (BYTE) */
-#define BPB_DrvNumEx 111 /* exFAT: Physical drive number for int13h (BYTE) */
-#define BPB_PercInUseEx 112 /* exFAT: Percent in use (BYTE) */
-#define BPB_RsvdEx 113 /* exFAT: Reserved (7-byte) */
-#define BS_BootCodeEx 120 /* exFAT: Boot code (390-byte) */
-
-#define DIR_Name 0 /* Short file name (11-byte) */
-#define DIR_Attr 11 /* Attribute (BYTE) */
-#define DIR_NTres 12 /* Lower case flag (BYTE) */
-#define DIR_CrtTime10 13 /* Created time sub-second (BYTE) */
-#define DIR_CrtTime 14 /* Created time (DWORD) */
-#define DIR_LstAccDate 18 /* Last accessed date (WORD) */
-#define DIR_FstClusHI 20 /* Higher 16-bit of first cluster (WORD) */
-#define DIR_ModTime 22 /* Modified time (DWORD) */
-#define DIR_FstClusLO 26 /* Lower 16-bit of first cluster (WORD) */
-#define DIR_FileSize 28 /* File size (DWORD) */
-#define LDIR_Ord 0 /* LFN: LFN order and LLE flag (BYTE) */
-#define LDIR_Attr 11 /* LFN: LFN attribute (BYTE) */
-#define LDIR_Type 12 /* LFN: Entry type (BYTE) */
-#define LDIR_Chksum 13 /* LFN: Checksum of the SFN (BYTE) */
-#define LDIR_FstClusLO 26 /* LFN: MBZ field (WORD) */
-#define XDIR_Type 0 /* exFAT: Type of exFAT directory entry (BYTE) */
-#define XDIR_NumLabel 1 /* exFAT: Number of volume label characters (BYTE) */
-#define XDIR_Label 2 /* exFAT: Volume label (11-WORD) */
-#define XDIR_CaseSum 4 /* exFAT: Sum of case conversion table (DWORD) */
-#define XDIR_NumSec 1 /* exFAT: Number of secondary entries (BYTE) */
-#define XDIR_SetSum 2 /* exFAT: Sum of the set of directory entries (WORD) */
-#define XDIR_Attr 4 /* exFAT: File attribute (WORD) */
-#define XDIR_CrtTime 8 /* exFAT: Created time (DWORD) */
-#define XDIR_ModTime 12 /* exFAT: Modified time (DWORD) */
-#define XDIR_AccTime 16 /* exFAT: Last accessed time (DWORD) */
-#define XDIR_CrtTime10 20 /* exFAT: Created time subsecond (BYTE) */
-#define XDIR_ModTime10 21 /* exFAT: Modified time subsecond (BYTE) */
-#define XDIR_CrtTZ 22 /* exFAT: Created timezone (BYTE) */
-#define XDIR_ModTZ 23 /* exFAT: Modified timezone (BYTE) */
-#define XDIR_AccTZ 24 /* exFAT: Last accessed timezone (BYTE) */
-#define XDIR_GenFlags 33 /* exFAT: General secondary flags (BYTE) */
-#define XDIR_NumName 35 /* exFAT: Number of file name characters (BYTE) */
-#define XDIR_NameHash 36 /* exFAT: Hash of file name (WORD) */
-#define XDIR_ValidFileSize 40 /* exFAT: Valid file size (QWORD) */
-#define XDIR_FstClus 52 /* exFAT: First cluster of the file data (DWORD) */
-#define XDIR_FileSize 56 /* exFAT: File/Directory size (QWORD) */
-
-#define SZDIRE 32 /* Size of a directory entry */
-#define DDEM 0xE5 /* Deleted directory entry mark set to DIR_Name[0] */
-#define RDDEM 0x05 /* Replacement of the character collides with DDEM */
-#define LLEF 0x40 /* Last long entry flag in LDIR_Ord */
-
-#define FSI_LeadSig 0 /* FAT32 FSI: Leading signature (DWORD) */
-#define FSI_StrucSig 484 /* FAT32 FSI: Structure signature (DWORD) */
-#define FSI_Free_Count 488 /* FAT32 FSI: Number of free clusters (DWORD) */
-#define FSI_Nxt_Free 492 /* FAT32 FSI: Last allocated cluster (DWORD) */
-
-#define MBR_Table 446 /* MBR: Offset of partition table in the MBR */
-#define SZ_PTE 16 /* MBR: Size of a partition table entry */
-#define PTE_Boot 0 /* MBR PTE: Boot indicator */
-#define PTE_StHead 1 /* MBR PTE: Start head */
-#define PTE_StSec 2 /* MBR PTE: Start sector */
-#define PTE_StCyl 3 /* MBR PTE: Start cylinder */
-#define PTE_System 4 /* MBR PTE: System ID */
-#define PTE_EdHead 5 /* MBR PTE: End head */
-#define PTE_EdSec 6 /* MBR PTE: End sector */
-#define PTE_EdCyl 7 /* MBR PTE: End cylinder */
-#define PTE_StLba 8 /* MBR PTE: Start in LBA */
-#define PTE_SizLba 12 /* MBR PTE: Size in LBA */
-
-
-/* Post process on fatal error in the file operations */
-#define ABORT(fs, res) { fp->err = (BYTE)(res); LEAVE_FF(fs, res); }
-
-
-/* Re-entrancy related */
-#if FF_FS_REENTRANT
-#if FF_USE_LFN == 1
-#error Static LFN work area cannot be used at thread-safe configuration
-#endif
-#define LEAVE_FF(fs, res) { unlock_fs(fs, res); return res; }
-#else
-#define LEAVE_FF(fs, res) return res
-#endif
-
-
-/* Definitions of volume - physical location conversion */
-#if FF_MULTI_PARTITION
-#define LD2PD(vol) VolToPart[vol].pd /* Get physical drive number */
-#define LD2PT(vol) VolToPart[vol].pt /* Get partition index */
-#else
-#define LD2PD(vol) (BYTE)(vol) /* Each logical drive is bound to the same physical drive number */
-#define LD2PT(vol) 0 /* Find first valid partition or in SFD */
-#endif
-
-
-/* Definitions of sector size */
-#if (FF_MAX_SS < FF_MIN_SS) || (FF_MAX_SS != 512 && FF_MAX_SS != 1024 && FF_MAX_SS != 2048 && FF_MAX_SS != 4096) || (FF_MIN_SS != 512 && FF_MIN_SS != 1024 && FF_MIN_SS != 2048 && FF_MIN_SS != 4096)
-#error Wrong sector size configuration
-#endif
-#if FF_MAX_SS == FF_MIN_SS
-#define SS(fs) ((UINT)FF_MAX_SS) /* Fixed sector size */
-#else
-#define SS(fs) ((fs)->ssize) /* Variable sector size */
-#endif
-
-
-/* Timestamp */
-#if FF_FS_NORTC == 1
-#if FF_NORTC_YEAR < 1980 || FF_NORTC_YEAR > 2107 || FF_NORTC_MON < 1 || FF_NORTC_MON > 12 || FF_NORTC_MDAY < 1 || FF_NORTC_MDAY > 31
-#error Invalid FF_FS_NORTC settings
-#endif
-#define GET_FATTIME() ((DWORD)(FF_NORTC_YEAR - 1980) << 25 | (DWORD)FF_NORTC_MON << 21 | (DWORD)FF_NORTC_MDAY << 16)
-#else
-#define GET_FATTIME() get_fattime()
-#endif
-
-
-/* File lock controls */
-#if FF_FS_LOCK != 0
-#if FF_FS_READONLY
-#error FF_FS_LOCK must be 0 at read-only configuration
-#endif
-typedef struct {
- FATFS *fs; /* Object ID 1, volume (NULL:blank entry) */
- DWORD clu; /* Object ID 2, containing directory (0:root) */
- DWORD ofs; /* Object ID 3, offset in the directory */
- WORD ctr; /* Object open counter, 0:none, 0x01..0xFF:read mode open count, 0x100:write mode */
-} FILESEM;
-#endif
-
-
-/* SBCS up-case tables (\x80-\xFF) */
-#define TBL_CT437 {0x80,0x9A,0x45,0x41,0x8E,0x41,0x8F,0x80,0x45,0x45,0x45,0x49,0x49,0x49,0x8E,0x8F, \
- 0x90,0x92,0x92,0x4F,0x99,0x4F,0x55,0x55,0x59,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \
- 0x41,0x49,0x4F,0x55,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \
- 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \
- 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \
- 0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \
- 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, \
- 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF}
-#define TBL_CT720 {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, \
- 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \
- 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \
- 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \
- 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \
- 0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \
- 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, \
- 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF}
-#define TBL_CT737 {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, \
- 0x90,0x92,0x92,0x93,0x94,0x95,0x96,0x97,0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87, \
- 0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0xAA,0x92,0x93,0x94,0x95,0x96, \
- 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \
- 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \
- 0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \
- 0x97,0xEA,0xEB,0xEC,0xE4,0xED,0xEE,0xEF,0xF5,0xF0,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, \
- 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF}
-#define TBL_CT771 {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, \
- 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \
- 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, \
- 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \
- 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \
- 0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDC,0xDE,0xDE, \
- 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \
- 0xF0,0xF0,0xF2,0xF2,0xF4,0xF4,0xF6,0xF6,0xF8,0xF8,0xFA,0xFA,0xFC,0xFC,0xFE,0xFF}
-#define TBL_CT775 {0x80,0x9A,0x91,0xA0,0x8E,0x95,0x8F,0x80,0xAD,0xED,0x8A,0x8A,0xA1,0x8D,0x8E,0x8F, \
- 0x90,0x92,0x92,0xE2,0x99,0x95,0x96,0x97,0x97,0x99,0x9A,0x9D,0x9C,0x9D,0x9E,0x9F, \
- 0xA0,0xA1,0xE0,0xA3,0xA3,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \
- 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \
- 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \
- 0xB5,0xB6,0xB7,0xB8,0xBD,0xBE,0xC6,0xC7,0xA5,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \
- 0xE0,0xE1,0xE2,0xE3,0xE5,0xE5,0xE6,0xE3,0xE8,0xE8,0xEA,0xEA,0xEE,0xED,0xEE,0xEF, \
- 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF}
-#define TBL_CT850 {0x43,0x55,0x45,0x41,0x41,0x41,0x41,0x43,0x45,0x45,0x45,0x49,0x49,0x49,0x41,0x41, \
- 0x45,0x92,0x92,0x4F,0x4F,0x4F,0x55,0x55,0x59,0x4F,0x55,0x4F,0x9C,0x4F,0x9E,0x9F, \
- 0x41,0x49,0x4F,0x55,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \
- 0xB0,0xB1,0xB2,0xB3,0xB4,0x41,0x41,0x41,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \
- 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0x41,0x41,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \
- 0xD1,0xD1,0x45,0x45,0x45,0x49,0x49,0x49,0x49,0xD9,0xDA,0xDB,0xDC,0xDD,0x49,0xDF, \
- 0x4F,0xE1,0x4F,0x4F,0x4F,0x4F,0xE6,0xE8,0xE8,0x55,0x55,0x55,0x59,0x59,0xEE,0xEF, \
- 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF}
-#define TBL_CT852 {0x80,0x9A,0x90,0xB6,0x8E,0xDE,0x8F,0x80,0x9D,0xD3,0x8A,0x8A,0xD7,0x8D,0x8E,0x8F, \
- 0x90,0x91,0x91,0xE2,0x99,0x95,0x95,0x97,0x97,0x99,0x9A,0x9B,0x9B,0x9D,0x9E,0xAC, \
- 0xB5,0xD6,0xE0,0xE9,0xA4,0xA4,0xA6,0xA6,0xA8,0xA8,0xAA,0x8D,0xAC,0xB8,0xAE,0xAF, \
- 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBD,0xBF, \
- 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC6,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \
- 0xD1,0xD1,0xD2,0xD3,0xD2,0xD5,0xD6,0xD7,0xB7,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \
- 0xE0,0xE1,0xE2,0xE3,0xE3,0xD5,0xE6,0xE6,0xE8,0xE9,0xE8,0xEB,0xED,0xED,0xDD,0xEF, \
- 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xEB,0xFC,0xFC,0xFE,0xFF}
-#define TBL_CT855 {0x81,0x81,0x83,0x83,0x85,0x85,0x87,0x87,0x89,0x89,0x8B,0x8B,0x8D,0x8D,0x8F,0x8F, \
- 0x91,0x91,0x93,0x93,0x95,0x95,0x97,0x97,0x99,0x99,0x9B,0x9B,0x9D,0x9D,0x9F,0x9F, \
- 0xA1,0xA1,0xA3,0xA3,0xA5,0xA5,0xA7,0xA7,0xA9,0xA9,0xAB,0xAB,0xAD,0xAD,0xAE,0xAF, \
- 0xB0,0xB1,0xB2,0xB3,0xB4,0xB6,0xB6,0xB8,0xB8,0xB9,0xBA,0xBB,0xBC,0xBE,0xBE,0xBF, \
- 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC7,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \
- 0xD1,0xD1,0xD3,0xD3,0xD5,0xD5,0xD7,0xD7,0xDD,0xD9,0xDA,0xDB,0xDC,0xDD,0xE0,0xDF, \
- 0xE0,0xE2,0xE2,0xE4,0xE4,0xE6,0xE6,0xE8,0xE8,0xEA,0xEA,0xEC,0xEC,0xEE,0xEE,0xEF, \
- 0xF0,0xF2,0xF2,0xF4,0xF4,0xF6,0xF6,0xF8,0xF8,0xFA,0xFA,0xFC,0xFC,0xFD,0xFE,0xFF}
-#define TBL_CT857 {0x80,0x9A,0x90,0xB6,0x8E,0xB7,0x8F,0x80,0xD2,0xD3,0xD4,0xD8,0xD7,0x49,0x8E,0x8F, \
- 0x90,0x92,0x92,0xE2,0x99,0xE3,0xEA,0xEB,0x98,0x99,0x9A,0x9D,0x9C,0x9D,0x9E,0x9E, \
- 0xB5,0xD6,0xE0,0xE9,0xA5,0xA5,0xA6,0xA6,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \
- 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \
- 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC7,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \
- 0xD0,0xD1,0xD2,0xD3,0xD4,0x49,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \
- 0xE0,0xE1,0xE2,0xE3,0xE5,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xDE,0xED,0xEE,0xEF, \
- 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF}
-#define TBL_CT860 {0x80,0x9A,0x90,0x8F,0x8E,0x91,0x86,0x80,0x89,0x89,0x92,0x8B,0x8C,0x98,0x8E,0x8F, \
- 0x90,0x91,0x92,0x8C,0x99,0xA9,0x96,0x9D,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \
- 0x86,0x8B,0x9F,0x96,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \
- 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \
- 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \
- 0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \
- 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, \
- 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF}
-#define TBL_CT861 {0x80,0x9A,0x90,0x41,0x8E,0x41,0x8F,0x80,0x45,0x45,0x45,0x8B,0x8B,0x8D,0x8E,0x8F, \
- 0x90,0x92,0x92,0x4F,0x99,0x8D,0x55,0x97,0x97,0x99,0x9A,0x9D,0x9C,0x9D,0x9E,0x9F, \
- 0xA4,0xA5,0xA6,0xA7,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \
- 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \
- 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \
- 0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \
- 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, \
- 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF}
-#define TBL_CT862 {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, \
- 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \
- 0x41,0x49,0x4F,0x55,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \
- 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \
- 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \
- 0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \
- 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, \
- 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF}
-#define TBL_CT863 {0x43,0x55,0x45,0x41,0x41,0x41,0x86,0x43,0x45,0x45,0x45,0x49,0x49,0x8D,0x41,0x8F, \
- 0x45,0x45,0x45,0x4F,0x45,0x49,0x55,0x55,0x98,0x4F,0x55,0x9B,0x9C,0x55,0x55,0x9F, \
- 0xA0,0xA1,0x4F,0x55,0xA4,0xA5,0xA6,0xA7,0x49,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \
- 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \
- 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \
- 0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \
- 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, \
- 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF}
-#define TBL_CT864 {0x80,0x9A,0x45,0x41,0x8E,0x41,0x8F,0x80,0x45,0x45,0x45,0x49,0x49,0x49,0x8E,0x8F, \
- 0x90,0x92,0x92,0x4F,0x99,0x4F,0x55,0x55,0x59,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \
- 0x41,0x49,0x4F,0x55,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \
- 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \
- 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \
- 0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \
- 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, \
- 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF}
-#define TBL_CT865 {0x80,0x9A,0x90,0x41,0x8E,0x41,0x8F,0x80,0x45,0x45,0x45,0x49,0x49,0x49,0x8E,0x8F, \
- 0x90,0x92,0x92,0x4F,0x99,0x4F,0x55,0x55,0x59,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \
- 0x41,0x49,0x4F,0x55,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \
- 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \
- 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \
- 0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \
- 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, \
- 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF}
-#define TBL_CT866 {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, \
- 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \
- 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, \
- 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \
- 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \
- 0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \
- 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, \
- 0xF0,0xF0,0xF2,0xF2,0xF4,0xF4,0xF6,0xF6,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF}
-#define TBL_CT869 {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, \
- 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x86,0x9C,0x8D,0x8F,0x90, \
- 0x91,0x90,0x92,0x95,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, \
- 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \
- 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, \
- 0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xA4,0xA5,0xA6,0xD9,0xDA,0xDB,0xDC,0xA7,0xA8,0xDF, \
- 0xA9,0xAA,0xAC,0xAD,0xB5,0xB6,0xB7,0xB8,0xBD,0xBE,0xC6,0xC7,0xCF,0xCF,0xD0,0xEF, \
- 0xF0,0xF1,0xD1,0xD2,0xD3,0xF5,0xD4,0xF7,0xF8,0xF9,0xD5,0x96,0x95,0x98,0xFE,0xFF}
-
-
-/* DBCS code range |----- 1st byte -----| |----------- 2nd byte -----------| */
-#define TBL_DC932 {0x81, 0x9F, 0xE0, 0xFC, 0x40, 0x7E, 0x80, 0xFC, 0x00, 0x00}
-#define TBL_DC936 {0x81, 0xFE, 0x00, 0x00, 0x40, 0x7E, 0x80, 0xFE, 0x00, 0x00}
-#define TBL_DC949 {0x81, 0xFE, 0x00, 0x00, 0x41, 0x5A, 0x61, 0x7A, 0x81, 0xFE}
-#define TBL_DC950 {0x81, 0xFE, 0x00, 0x00, 0x40, 0x7E, 0xA1, 0xFE, 0x00, 0x00}
-
-
-/* Macros for table definitions */
-#define MERGE_2STR(a, b) a ## b
-#define MKCVTBL(hd, cp) MERGE_2STR(hd, cp)
-
-
-
-
-/*--------------------------------------------------------------------------
-
- Module Private Work Area
-
----------------------------------------------------------------------------*/
-/* Remark: Variables defined here without initial value shall be guaranteed
-/ zero/null at start-up. If not, the linker option or start-up routine is
-/ not compliance with C standard. */
-
-/*--------------------------------*/
-/* File/Volume controls */
-/*--------------------------------*/
-
-#if FF_VOLUMES < 1 || FF_VOLUMES > 10
-#error Wrong FF_VOLUMES setting
-#endif
-static FATFS* FatFs[FF_VOLUMES]; /* Pointer to the filesystem objects (logical drives) */
-static WORD Fsid; /* Filesystem mount ID */
-
-#if FF_FS_RPATH != 0
-static BYTE CurrVol; /* Current drive */
-#endif
-
-#if FF_FS_LOCK != 0
-static FILESEM Files[FF_FS_LOCK]; /* Open object lock semaphores */
-#endif
-
-#if FF_STR_VOLUME_ID
-#ifdef FF_VOLUME_STRS
-static const char* const VolumeStr[FF_VOLUMES] = {FF_VOLUME_STRS}; /* Pre-defined volume ID */
-#endif
-#endif
-
-
-/*--------------------------------*/
-/* LFN/Directory working buffer */
-/*--------------------------------*/
-
-#if FF_USE_LFN == 0 /* Non-LFN configuration */
-#if FF_FS_EXFAT
-#error LFN must be enabled when enable exFAT
-#endif
-#define DEF_NAMBUF
-#define INIT_NAMBUF(fs)
-#define FREE_NAMBUF()
-#define LEAVE_MKFS(res) return res
-
-#else /* LFN configurations */
-#if FF_MAX_LFN < 12 || FF_MAX_LFN > 255
-#error Wrong setting of FF_MAX_LFN
-#endif
-#if FF_LFN_BUF < FF_SFN_BUF || FF_SFN_BUF < 12
-#error Wrong setting of FF_LFN_BUF or FF_SFN_BUF
-#endif
-#if FF_LFN_UNICODE < 0 || FF_LFN_UNICODE > 3
-#error Wrong setting of FF_LFN_UNICODE
-#endif
-static const BYTE LfnOfs[] = {1,3,5,7,9,14,16,18,20,22,24,28,30}; /* FAT: Offset of LFN characters in the directory entry */
-#define MAXDIRB(nc) ((nc + 44U) / 15 * SZDIRE) /* exFAT: Size of directory entry block scratchpad buffer needed for the name length */
-
-#if FF_USE_LFN == 1 /* LFN enabled with static working buffer */
-#if FF_FS_EXFAT
-static BYTE DirBuf[MAXDIRB(FF_MAX_LFN)]; /* Directory entry block scratchpad buffer */
-#endif
-static WCHAR LfnBuf[FF_MAX_LFN + 1]; /* LFN working buffer */
-#define DEF_NAMBUF
-#define INIT_NAMBUF(fs)
-#define FREE_NAMBUF()
-#define LEAVE_MKFS(res) return res
-
-#elif FF_USE_LFN == 2 /* LFN enabled with dynamic working buffer on the stack */
-#if FF_FS_EXFAT
-#define DEF_NAMBUF WCHAR lbuf[FF_MAX_LFN+1]; BYTE dbuf[MAXDIRB(FF_MAX_LFN)]; /* LFN working buffer and directory entry block scratchpad buffer */
-#define INIT_NAMBUF(fs) { (fs)->lfnbuf = lbuf; (fs)->dirbuf = dbuf; }
-#define FREE_NAMBUF()
-#else
-#define DEF_NAMBUF WCHAR lbuf[FF_MAX_LFN+1]; /* LFN working buffer */
-#define INIT_NAMBUF(fs) { (fs)->lfnbuf = lbuf; }
-#define FREE_NAMBUF()
-#endif
-#define LEAVE_MKFS(res) return res
-
-#elif FF_USE_LFN == 3 /* LFN enabled with dynamic working buffer on the heap */
-#if FF_FS_EXFAT
-#define DEF_NAMBUF WCHAR *lfn; /* Pointer to LFN working buffer and directory entry block scratchpad buffer */
-#define INIT_NAMBUF(fs) { lfn = ff_memalloc((FF_MAX_LFN+1)*2 + MAXDIRB(FF_MAX_LFN)); if (!lfn) LEAVE_FF(fs, FR_NOT_ENOUGH_CORE); (fs)->lfnbuf = lfn; (fs)->dirbuf = (BYTE*)(lfn+FF_MAX_LFN+1); }
-#define FREE_NAMBUF() ff_memfree(lfn)
-#else
-#define DEF_NAMBUF WCHAR *lfn; /* Pointer to LFN working buffer */
-#define INIT_NAMBUF(fs) { lfn = ff_memalloc((FF_MAX_LFN+1)*2); if (!lfn) LEAVE_FF(fs, FR_NOT_ENOUGH_CORE); (fs)->lfnbuf = lfn; }
-#define FREE_NAMBUF() ff_memfree(lfn)
-#endif
-#define LEAVE_MKFS(res) { if (!work) ff_memfree(buf); return res; }
-#define MAX_MALLOC 0x8000 /* Must be >=FF_MAX_SS */
-
-#else
-#error Wrong setting of FF_USE_LFN
-
-#endif /* FF_USE_LFN == 1 */
-#endif /* FF_USE_LFN == 0 */
-
-
-
-/*--------------------------------*/
-/* Code conversion tables */
-/*--------------------------------*/
-
-#if FF_CODE_PAGE == 0 /* Run-time code page configuration */
-#define CODEPAGE CodePage
-static WORD CodePage; /* Current code page */
-static const BYTE *ExCvt, *DbcTbl; /* Pointer to current SBCS up-case table and DBCS code range table below */
-static const BYTE Ct437[] = TBL_CT437;
-static const BYTE Ct720[] = TBL_CT720;
-static const BYTE Ct737[] = TBL_CT737;
-static const BYTE Ct771[] = TBL_CT771;
-static const BYTE Ct775[] = TBL_CT775;
-static const BYTE Ct850[] = TBL_CT850;
-static const BYTE Ct852[] = TBL_CT852;
-static const BYTE Ct855[] = TBL_CT855;
-static const BYTE Ct857[] = TBL_CT857;
-static const BYTE Ct860[] = TBL_CT860;
-static const BYTE Ct861[] = TBL_CT861;
-static const BYTE Ct862[] = TBL_CT862;
-static const BYTE Ct863[] = TBL_CT863;
-static const BYTE Ct864[] = TBL_CT864;
-static const BYTE Ct865[] = TBL_CT865;
-static const BYTE Ct866[] = TBL_CT866;
-static const BYTE Ct869[] = TBL_CT869;
-static const BYTE Dc932[] = TBL_DC932;
-static const BYTE Dc936[] = TBL_DC936;
-static const BYTE Dc949[] = TBL_DC949;
-static const BYTE Dc950[] = TBL_DC950;
-
-#elif FF_CODE_PAGE < 900 /* Static code page configuration (SBCS) */
-#define CODEPAGE FF_CODE_PAGE
-static const BYTE ExCvt[] = MKCVTBL(TBL_CT, FF_CODE_PAGE);
-
-#else /* Static code page configuration (DBCS) */
-#define CODEPAGE FF_CODE_PAGE
-static const BYTE DbcTbl[] = MKCVTBL(TBL_DC, FF_CODE_PAGE);
-
-#endif
-
-
-
-
-/*--------------------------------------------------------------------------
-
- Module Private Functions
-
----------------------------------------------------------------------------*/
-
-
-/*-----------------------------------------------------------------------*/
-/* Load/Store multi-byte word in the FAT structure */
-/*-----------------------------------------------------------------------*/
-
-static WORD ld_word (const BYTE* ptr) /* Load a 2-byte little-endian word */
-{
- WORD rv;
-
- rv = ptr[1];
- rv = rv << 8 | ptr[0];
- return rv;
-}
-
-static DWORD ld_dword (const BYTE* ptr) /* Load a 4-byte little-endian word */
-{
- DWORD rv;
-
- rv = ptr[3];
- rv = rv << 8 | ptr[2];
- rv = rv << 8 | ptr[1];
- rv = rv << 8 | ptr[0];
- return rv;
-}
-
-#if FF_FS_EXFAT
-static QWORD ld_qword (const BYTE* ptr) /* Load an 8-byte little-endian word */
-{
- QWORD rv;
-
- rv = ptr[7];
- rv = rv << 8 | ptr[6];
- rv = rv << 8 | ptr[5];
- rv = rv << 8 | ptr[4];
- rv = rv << 8 | ptr[3];
- rv = rv << 8 | ptr[2];
- rv = rv << 8 | ptr[1];
- rv = rv << 8 | ptr[0];
- return rv;
-}
-#endif
-
-#if !FF_FS_READONLY
-static void st_word (BYTE* ptr, WORD val) /* Store a 2-byte word in little-endian */
-{
- *ptr++ = (BYTE)val; val >>= 8;
- *ptr++ = (BYTE)val;
-}
-
-static void st_dword (BYTE* ptr, DWORD val) /* Store a 4-byte word in little-endian */
-{
- *ptr++ = (BYTE)val; val >>= 8;
- *ptr++ = (BYTE)val; val >>= 8;
- *ptr++ = (BYTE)val; val >>= 8;
- *ptr++ = (BYTE)val;
-}
-
-#if FF_FS_EXFAT
-static void st_qword (BYTE* ptr, QWORD val) /* Store an 8-byte word in little-endian */
-{
- *ptr++ = (BYTE)val; val >>= 8;
- *ptr++ = (BYTE)val; val >>= 8;
- *ptr++ = (BYTE)val; val >>= 8;
- *ptr++ = (BYTE)val; val >>= 8;
- *ptr++ = (BYTE)val; val >>= 8;
- *ptr++ = (BYTE)val; val >>= 8;
- *ptr++ = (BYTE)val; val >>= 8;
- *ptr++ = (BYTE)val;
-}
-#endif
-#endif /* !FF_FS_READONLY */
-
-
-
-/*-----------------------------------------------------------------------*/
-/* String functions */
-/*-----------------------------------------------------------------------*/
-
-/* Copy memory to memory */
-static void mem_cpy (void* dst, const void* src, UINT cnt)
-{
- BYTE *d = (BYTE*)dst;
- const BYTE *s = (const BYTE*)src;
-
- if (cnt != 0) {
- do {
- *d++ = *s++;
- } while (--cnt);
- }
-}
-
-
-/* Fill memory block */
-static void mem_set (void* dst, int val, UINT cnt)
-{
- BYTE *d = (BYTE*)dst;
-
- do {
- *d++ = (BYTE)val;
- } while (--cnt);
-}
-
-
-/* Compare memory block */
-static int mem_cmp (const void* dst, const void* src, UINT cnt) /* ZR:same, NZ:different */
-{
- const BYTE *d = (const BYTE *)dst, *s = (const BYTE *)src;
- int r = 0;
-
- do {
- r = *d++ - *s++;
- } while (--cnt && r == 0);
-
- return r;
-}
-
-
-/* Check if chr is contained in the string */
-static int chk_chr (const char* str, int chr) /* NZ:contained, ZR:not contained */
-{
- while (*str && *str != chr) str++;
- return *str;
-}
-
-
-/* Test if the character is DBC 1st byte */
-static int dbc_1st (BYTE c)
-{
-#if FF_CODE_PAGE == 0 /* Variable code page */
- if (DbcTbl && c >= DbcTbl[0]) {
- if (c <= DbcTbl[1]) return 1; /* 1st byte range 1 */
- if (c >= DbcTbl[2] && c <= DbcTbl[3]) return 1; /* 1st byte range 2 */
- }
-#elif FF_CODE_PAGE >= 900 /* DBCS fixed code page */
- if (c >= DbcTbl[0]) {
- if (c <= DbcTbl[1]) return 1;
- if (c >= DbcTbl[2] && c <= DbcTbl[3]) return 1;
- }
-#else /* SBCS fixed code page */
- if (c != 0) return 0; /* Always false */
-#endif
- return 0;
-}
-
-
-/* Test if the character is DBC 2nd byte */
-static int dbc_2nd (BYTE c)
-{
-#if FF_CODE_PAGE == 0 /* Variable code page */
- if (DbcTbl && c >= DbcTbl[4]) {
- if (c <= DbcTbl[5]) return 1; /* 2nd byte range 1 */
- if (c >= DbcTbl[6] && c <= DbcTbl[7]) return 1; /* 2nd byte range 2 */
- if (c >= DbcTbl[8] && c <= DbcTbl[9]) return 1; /* 2nd byte range 3 */
- }
-#elif FF_CODE_PAGE >= 900 /* DBCS fixed code page */
- if (c >= DbcTbl[4]) {
- if (c <= DbcTbl[5]) return 1;
- if (c >= DbcTbl[6] && c <= DbcTbl[7]) return 1;
- if (c >= DbcTbl[8] && c <= DbcTbl[9]) return 1;
- }
-#else /* SBCS fixed code page */
- if (c != 0) return 0; /* Always false */
-#endif
- return 0;
-}
-
-
-#if FF_USE_LFN
-
-/* Get a character from TCHAR string in defined API encodeing */
-static DWORD tchar2uni ( /* Returns character in UTF-16 encoding (>=0x10000 on double encoding unit, 0xFFFFFFFF on decode error) */
- const TCHAR** str /* Pointer to pointer to TCHAR string in configured encoding */
-)
-{
- DWORD uc;
- const TCHAR *p = *str;
-
-#if FF_LFN_UNICODE == 1 /* UTF-16 input */
- WCHAR wc;
-
- uc = *p++; /* Get a unit */
- if (IsSurrogate(uc)) { /* Surrogate? */
- wc = *p++; /* Get low surrogate */
- if (!IsSurrogateH(uc) || !IsSurrogateL(wc)) return 0xFFFFFFFF; /* Wrong surrogate? */
- uc = uc << 16 | wc;
- }
-
-#elif FF_LFN_UNICODE == 2 /* UTF-8 input */
- BYTE b;
- int nf;
-
- uc = (BYTE)*p++; /* Get a unit */
- if (uc & 0x80) { /* Multiple byte code? */
- if ((uc & 0xE0) == 0xC0) { /* 2-byte sequence? */
- uc &= 0x1F; nf = 1;
- } else {
- if ((uc & 0xF0) == 0xE0) { /* 3-byte sequence? */
- uc &= 0x0F; nf = 2;
- } else {
- if ((uc & 0xF8) == 0xF0) { /* 4-byte sequence? */
- uc &= 0x07; nf = 3;
- } else { /* Wrong sequence */
- return 0xFFFFFFFF;
- }
- }
- }
- do { /* Get trailing bytes */
- b = (BYTE)*p++;
- if ((b & 0xC0) != 0x80) return 0xFFFFFFFF; /* Wrong sequence? */
- uc = uc << 6 | (b & 0x3F);
- } while (--nf != 0);
- if (uc < 0x80 || IsSurrogate(uc) || uc >= 0x110000) return 0xFFFFFFFF; /* Wrong code? */
- if (uc >= 0x010000) uc = 0xD800DC00 | ((uc - 0x10000) << 6 & 0x3FF0000) | (uc & 0x3FF); /* Make a surrogate pair if needed */
- }
-
-#elif FF_LFN_UNICODE == 3 /* UTF-32 input */
- uc = (TCHAR)*p++; /* Get a unit */
- if (uc >= 0x110000) return 0xFFFFFFFF; /* Wrong code? */
- if (uc >= 0x010000) uc = 0xD800DC00 | ((uc - 0x10000) << 6 & 0x3FF0000) | (uc & 0x3FF); /* Make a surrogate pair if needed */
-
-#else /* ANSI/OEM input */
- BYTE b;
- WCHAR wc;
-
- wc = (BYTE)*p++; /* Get a byte */
- if (dbc_1st((BYTE)wc)) { /* Is it a DBC 1st byte? */
- b = (BYTE)*p++; /* Get 2nd byte */
- if (!dbc_2nd(b)) return 0xFFFFFFFF; /* Invalid code? */
- wc = (wc << 8) + b; /* Make a DBC */
- }
- if (wc != 0) {
- wc = ff_oem2uni(wc, CODEPAGE); /* ANSI/OEM ==> Unicode */
- if (wc == 0) return 0xFFFFFFFF; /* Invalid code? */
- }
- uc = wc;
-
-#endif
- *str = p; /* Next read pointer */
- return uc;
-}
-
-
-/* Output a TCHAR string in defined API encoding */
-static BYTE put_utf ( /* Returns number of encoding units written (0:buffer overflow or wrong encoding) */
- DWORD chr, /* UTF-16 encoded character (Double encoding unit char if >=0x10000) */
- TCHAR* buf, /* Output buffer */
- UINT szb /* Size of the buffer */
-)
-{
-#if FF_LFN_UNICODE == 1 /* UTF-16 output */
- WCHAR hs, wc;
-
- hs = (WCHAR)(chr >> 16);
- wc = (WCHAR)chr;
- if (hs == 0) { /* Single encoding unit? */
- if (szb < 1 || IsSurrogate(wc)) return 0; /* Buffer overflow or wrong code? */
- *buf = wc;
- return 1;
- }
- if (szb < 2 || !IsSurrogateH(hs) || !IsSurrogateL(wc)) return 0; /* Buffer overflow or wrong surrogate? */
- *buf++ = hs;
- *buf++ = wc;
- return 2;
-
-#elif FF_LFN_UNICODE == 2 /* UTF-8 output */
- DWORD hc;
-
- if (chr < 0x80) { /* Single byte code? */
- if (szb < 1) return 0; /* Buffer overflow? */
- *buf = (TCHAR)chr;
- return 1;
- }
- if (chr < 0x800) { /* 2-byte sequence? */
- if (szb < 2) return 0; /* Buffer overflow? */
- *buf++ = (TCHAR)(0xC0 | (chr >> 6 & 0x1F));
- *buf++ = (TCHAR)(0x80 | (chr >> 0 & 0x3F));
- return 2;
- }
- if (chr < 0x10000) { /* 3-byte sequence? */
- if (szb < 3 || IsSurrogate(chr)) return 0; /* Buffer overflow or wrong code? */
- *buf++ = (TCHAR)(0xE0 | (chr >> 12 & 0x0F));
- *buf++ = (TCHAR)(0x80 | (chr >> 6 & 0x3F));
- *buf++ = (TCHAR)(0x80 | (chr >> 0 & 0x3F));
- return 3;
- }
- /* 4-byte sequence */
- if (szb < 4) return 0; /* Buffer overflow? */
- hc = ((chr & 0xFFFF0000) - 0xD8000000) >> 6; /* Get high 10 bits */
- chr = (chr & 0xFFFF) - 0xDC00; /* Get low 10 bits */
- if (hc >= 0x100000 || chr >= 0x400) return 0; /* Wrong surrogate? */
- chr = (hc | chr) + 0x10000;
- *buf++ = (TCHAR)(0xF0 | (chr >> 18 & 0x07));
- *buf++ = (TCHAR)(0x80 | (chr >> 12 & 0x3F));
- *buf++ = (TCHAR)(0x80 | (chr >> 6 & 0x3F));
- *buf++ = (TCHAR)(0x80 | (chr >> 0 & 0x3F));
- return 4;
-
-#elif FF_LFN_UNICODE == 3 /* UTF-32 output */
- DWORD hc;
-
- if (szb < 1) return 0; /* Buffer overflow? */
- if (chr >= 0x10000) { /* Out of BMP? */
- hc = ((chr & 0xFFFF0000) - 0xD8000000) >> 6; /* Get high 10 bits */
- chr = (chr & 0xFFFF) - 0xDC00; /* Get low 10 bits */
- if (hc >= 0x100000 || chr >= 0x400) return 0; /* Wrong surrogate? */
- chr = (hc | chr) + 0x10000;
- }
- *buf++ = (TCHAR)chr;
- return 1;
-
-#else /* ANSI/OEM output */
- WCHAR wc;
-
- wc = ff_uni2oem(chr, CODEPAGE);
- if (wc >= 0x100) { /* Is this a DBC? */
- if (szb < 2) return 0;
- *buf++ = (char)(wc >> 8); /* Store DBC 1st byte */
- *buf++ = (TCHAR)wc; /* Store DBC 2nd byte */
- return 2;
- }
- if (wc == 0 || szb < 1) return 0; /* Invalid char or buffer overflow? */
- *buf++ = (TCHAR)wc; /* Store the character */
- return 1;
-#endif
-}
-#endif /* FF_USE_LFN */
-
-
-#if FF_FS_REENTRANT
-/*-----------------------------------------------------------------------*/
-/* Request/Release grant to access the volume */
-/*-----------------------------------------------------------------------*/
-static int lock_fs ( /* 1:Ok, 0:timeout */
- FATFS* fs /* Filesystem object */
-)
-{
- return ff_req_grant(fs->sobj);
-}
-
-
-static void unlock_fs (
- FATFS* fs, /* Filesystem object */
- FRESULT res /* Result code to be returned */
-)
-{
- if (fs && res != FR_NOT_ENABLED && res != FR_INVALID_DRIVE && res != FR_TIMEOUT) {
- ff_rel_grant(fs->sobj);
- }
-}
-
-#endif
-
-
-
-#if FF_FS_LOCK != 0
-/*-----------------------------------------------------------------------*/
-/* File lock control functions */
-/*-----------------------------------------------------------------------*/
-
-static FRESULT chk_lock ( /* Check if the file can be accessed */
- DIR* dp, /* Directory object pointing the file to be checked */
- int acc /* Desired access type (0:Read mode open, 1:Write mode open, 2:Delete or rename) */
-)
-{
- UINT i, be;
-
- /* Search open object table for the object */
- be = 0;
- for (i = 0; i < FF_FS_LOCK; i++) {
- if (Files[i].fs) { /* Existing entry */
- if (Files[i].fs == dp->obj.fs && /* Check if the object matches with an open object */
- Files[i].clu == dp->obj.sclust &&
- Files[i].ofs == dp->dptr) break;
- } else { /* Blank entry */
- be = 1;
- }
- }
- if (i == FF_FS_LOCK) { /* The object has not been opened */
- return (!be && acc != 2) ? FR_TOO_MANY_OPEN_FILES : FR_OK; /* Is there a blank entry for new object? */
- }
-
- /* The object was opened. Reject any open against writing file and all write mode open */
- return (acc != 0 || Files[i].ctr == 0x100) ? FR_LOCKED : FR_OK;
-}
-
-
-static int enq_lock (void) /* Check if an entry is available for a new object */
-{
- UINT i;
-
- for (i = 0; i < FF_FS_LOCK && Files[i].fs; i++) ;
- return (i == FF_FS_LOCK) ? 0 : 1;
-}
-
-
-static UINT inc_lock ( /* Increment object open counter and returns its index (0:Internal error) */
- DIR* dp, /* Directory object pointing the file to register or increment */
- int acc /* Desired access (0:Read, 1:Write, 2:Delete/Rename) */
-)
-{
- UINT i;
-
-
- for (i = 0; i < FF_FS_LOCK; i++) { /* Find the object */
- if (Files[i].fs == dp->obj.fs &&
- Files[i].clu == dp->obj.sclust &&
- Files[i].ofs == dp->dptr) break;
- }
-
- if (i == FF_FS_LOCK) { /* Not opened. Register it as new. */
- for (i = 0; i < FF_FS_LOCK && Files[i].fs; i++) ;
- if (i == FF_FS_LOCK) return 0; /* No free entry to register (int err) */
- Files[i].fs = dp->obj.fs;
- Files[i].clu = dp->obj.sclust;
- Files[i].ofs = dp->dptr;
- Files[i].ctr = 0;
- }
-
- if (acc >= 1 && Files[i].ctr) return 0; /* Access violation (int err) */
-
- Files[i].ctr = acc ? 0x100 : Files[i].ctr + 1; /* Set semaphore value */
-
- return i + 1; /* Index number origin from 1 */
-}
-
-
-static FRESULT dec_lock ( /* Decrement object open counter */
- UINT i /* Semaphore index (1..) */
-)
-{
- WORD n;
- FRESULT res;
-
-
- if (--i < FF_FS_LOCK) { /* Index number origin from 0 */
- n = Files[i].ctr;
- if (n == 0x100) n = 0; /* If write mode open, delete the entry */
- if (n > 0) n--; /* Decrement read mode open count */
- Files[i].ctr = n;
- if (n == 0) Files[i].fs = 0; /* Delete the entry if open count gets zero */
- res = FR_OK;
- } else {
- res = FR_INT_ERR; /* Invalid index nunber */
- }
- return res;
-}
-
-
-static void clear_lock ( /* Clear lock entries of the volume */
- FATFS *fs
-)
-{
- UINT i;
-
- for (i = 0; i < FF_FS_LOCK; i++) {
- if (Files[i].fs == fs) Files[i].fs = 0;
- }
-}
-
-#endif /* FF_FS_LOCK != 0 */
-
-
-
-/*-----------------------------------------------------------------------*/
-/* Move/Flush disk access window in the filesystem object */
-/*-----------------------------------------------------------------------*/
-#if !FF_FS_READONLY
-static FRESULT sync_window ( /* Returns FR_OK or FR_DISK_ERR */
- FATFS* fs /* Filesystem object */
-)
-{
- FRESULT res = FR_OK;
-
-
- if (fs->wflag) { /* Is the disk access window dirty */
- if (disk_write(fs->pdrv, fs->win, fs->winsect, 1) == RES_OK) { /* Write back the window */
- fs->wflag = 0; /* Clear window dirty flag */
- if (fs->winsect - fs->fatbase < fs->fsize) { /* Is it in the 1st FAT? */
- if (fs->n_fats == 2) disk_write(fs->pdrv, fs->win, fs->winsect + fs->fsize, 1); /* Reflect it to 2nd FAT if needed */
- }
- } else {
- res = FR_DISK_ERR;
- }
- }
- return res;
-}
-#endif
-
-
-static FRESULT move_window ( /* Returns FR_OK or FR_DISK_ERR */
- FATFS* fs, /* Filesystem object */
- DWORD sector /* Sector number to make appearance in the fs->win[] */
-)
-{
- FRESULT res = FR_OK;
-
-
- if (sector != fs->winsect) { /* Window offset changed? */
-#if !FF_FS_READONLY
- res = sync_window(fs); /* Write-back changes */
-#endif
- if (res == FR_OK) { /* Fill sector window with new data */
- if (disk_read(fs->pdrv, fs->win, sector, 1) != RES_OK) {
- sector = 0xFFFFFFFF; /* Invalidate window if read data is not valid */
- res = FR_DISK_ERR;
- }
- fs->winsect = sector;
- }
- }
- return res;
-}
-
-
-
-
-#if !FF_FS_READONLY
-/*-----------------------------------------------------------------------*/
-/* Synchronize filesystem and data on the storage */
-/*-----------------------------------------------------------------------*/
-
-static FRESULT sync_fs ( /* Returns FR_OK or FR_DISK_ERR */
- FATFS* fs /* Filesystem object */
-)
-{
- FRESULT res;
-
-
- res = sync_window(fs);
- if (res == FR_OK) {
- if (fs->fs_type == FS_FAT32 && fs->fsi_flag == 1) { /* FAT32: Update FSInfo sector if needed */
- /* Create FSInfo structure */
- mem_set(fs->win, 0, SS(fs));
- st_word(fs->win + BS_55AA, 0xAA55);
- st_dword(fs->win + FSI_LeadSig, 0x41615252);
- st_dword(fs->win + FSI_StrucSig, 0x61417272);
- st_dword(fs->win + FSI_Free_Count, fs->free_clst);
- st_dword(fs->win + FSI_Nxt_Free, fs->last_clst);
- /* Write it into the FSInfo sector */
- fs->winsect = fs->volbase + 1;
- disk_write(fs->pdrv, fs->win, fs->winsect, 1);
- fs->fsi_flag = 0;
- }
- /* Make sure that no pending write process in the lower layer */
- if (disk_ioctl(fs->pdrv, CTRL_SYNC, 0) != RES_OK) res = FR_DISK_ERR;
- }
-
- return res;
-}
-
-#endif
-
-
-
-/*-----------------------------------------------------------------------*/
-/* Get physical sector number from cluster number */
-/*-----------------------------------------------------------------------*/
-
-static DWORD clst2sect ( /* !=0:Sector number, 0:Failed (invalid cluster#) */
- FATFS* fs, /* Filesystem object */
- DWORD clst /* Cluster# to be converted */
-)
-{
- clst -= 2; /* Cluster number is origin from 2 */
- if (clst >= fs->n_fatent - 2) return 0; /* Is it invalid cluster number? */
- return fs->database + fs->csize * clst; /* Start sector number of the cluster */
-}
-
-
-
-
-/*-----------------------------------------------------------------------*/
-/* FAT access - Read value of a FAT entry */
-/*-----------------------------------------------------------------------*/
-
-static DWORD get_fat ( /* 0xFFFFFFFF:Disk error, 1:Internal error, 2..0x7FFFFFFF:Cluster status */
- FFOBJID* obj, /* Corresponding object */
- DWORD clst /* Cluster number to get the value */
-)
-{
- UINT wc, bc;
- DWORD val;
- FATFS *fs = obj->fs;
-
-
- if (clst < 2 || clst >= fs->n_fatent) { /* Check if in valid range */
- val = 1; /* Internal error */
-
- } else {
- val = 0xFFFFFFFF; /* Default value falls on disk error */
-
- switch (fs->fs_type) {
- case FS_FAT12 :
- bc = (UINT)clst; bc += bc / 2;
- if (move_window(fs, fs->fatbase + (bc / SS(fs))) != FR_OK) break;
- wc = fs->win[bc++ % SS(fs)]; /* Get 1st byte of the entry */
- if (move_window(fs, fs->fatbase + (bc / SS(fs))) != FR_OK) break;
- wc |= fs->win[bc % SS(fs)] << 8; /* Merge 2nd byte of the entry */
- val = (clst & 1) ? (wc >> 4) : (wc & 0xFFF); /* Adjust bit position */
- break;
-
- case FS_FAT16 :
- if (move_window(fs, fs->fatbase + (clst / (SS(fs) / 2))) != FR_OK) break;
- val = ld_word(fs->win + clst * 2 % SS(fs)); /* Simple WORD array */
- break;
-
- case FS_FAT32 :
- if (move_window(fs, fs->fatbase + (clst / (SS(fs) / 4))) != FR_OK) break;
- val = ld_dword(fs->win + clst * 4 % SS(fs)) & 0x0FFFFFFF; /* Simple DWORD array but mask out upper 4 bits */
- break;
-#if FF_FS_EXFAT
- case FS_EXFAT :
- if ((obj->objsize != 0 && obj->sclust != 0) || obj->stat == 0) { /* Object except root dir must have valid data length */
- DWORD cofs = clst - obj->sclust; /* Offset from start cluster */
- DWORD clen = (DWORD)((obj->objsize - 1) / SS(fs)) / fs->csize; /* Number of clusters - 1 */
-
- if (obj->stat == 2 && cofs <= clen) { /* Is it a contiguous chain? */
- val = (cofs == clen) ? 0x7FFFFFFF : clst + 1; /* No data on the FAT, generate the value */
- break;
- }
- if (obj->stat == 3 && cofs < obj->n_cont) { /* Is it in the 1st fragment? */
- val = clst + 1; /* Generate the value */
- break;
- }
- if (obj->stat != 2) { /* Get value from FAT if FAT chain is valid */
- if (obj->n_frag != 0) { /* Is it on the growing edge? */
- val = 0x7FFFFFFF; /* Generate EOC */
- } else {
- if (move_window(fs, fs->fatbase + (clst / (SS(fs) / 4))) != FR_OK) break;
- val = ld_dword(fs->win + clst * 4 % SS(fs)) & 0x7FFFFFFF;
- }
- break;
- }
- }
- /* go to default */
-#endif
- default:
- val = 1; /* Internal error */
- }
- }
-
- return val;
-}
-
-
-
-
-#if !FF_FS_READONLY
-/*-----------------------------------------------------------------------*/
-/* FAT access - Change value of a FAT entry */
-/*-----------------------------------------------------------------------*/
-
-static FRESULT put_fat ( /* FR_OK(0):succeeded, !=0:error */
- FATFS* fs, /* Corresponding filesystem object */
- DWORD clst, /* FAT index number (cluster number) to be changed */
- DWORD val /* New value to be set to the entry */
-)
-{
- UINT bc;
- BYTE *p;
- FRESULT res = FR_INT_ERR;
-
-
- if (clst >= 2 && clst < fs->n_fatent) { /* Check if in valid range */
- switch (fs->fs_type) {
- case FS_FAT12 :
- bc = (UINT)clst; bc += bc / 2; /* bc: byte offset of the entry */
- res = move_window(fs, fs->fatbase + (bc / SS(fs)));
- if (res != FR_OK) break;
- p = fs->win + bc++ % SS(fs);
- *p = (clst & 1) ? ((*p & 0x0F) | ((BYTE)val << 4)) : (BYTE)val; /* Put 1st byte */
- fs->wflag = 1;
- res = move_window(fs, fs->fatbase + (bc / SS(fs)));
- if (res != FR_OK) break;
- p = fs->win + bc % SS(fs);
- *p = (clst & 1) ? (BYTE)(val >> 4) : ((*p & 0xF0) | ((BYTE)(val >> 8) & 0x0F)); /* Put 2nd byte */
- fs->wflag = 1;
- break;
-
- case FS_FAT16 :
- res = move_window(fs, fs->fatbase + (clst / (SS(fs) / 2)));
- if (res != FR_OK) break;
- st_word(fs->win + clst * 2 % SS(fs), (WORD)val); /* Simple WORD array */
- fs->wflag = 1;
- break;
-
- case FS_FAT32 :
-#if FF_FS_EXFAT
- case FS_EXFAT :
-#endif
- res = move_window(fs, fs->fatbase + (clst / (SS(fs) / 4)));
- if (res != FR_OK) break;
- if (!FF_FS_EXFAT || fs->fs_type != FS_EXFAT) {
- val = (val & 0x0FFFFFFF) | (ld_dword(fs->win + clst * 4 % SS(fs)) & 0xF0000000);
- }
- st_dword(fs->win + clst * 4 % SS(fs), val);
- fs->wflag = 1;
- break;
- }
- }
- return res;
-}
-
-#endif /* !FF_FS_READONLY */
-
-
-
-
-#if FF_FS_EXFAT && !FF_FS_READONLY
-/*-----------------------------------------------------------------------*/
-/* exFAT: Accessing FAT and Allocation Bitmap */
-/*-----------------------------------------------------------------------*/
-
-/*--------------------------------------*/
-/* Find a contiguous free cluster block */
-/*--------------------------------------*/
-
-static DWORD find_bitmap ( /* 0:Not found, 2..:Cluster block found, 0xFFFFFFFF:Disk error */
- FATFS* fs, /* Filesystem object */
- DWORD clst, /* Cluster number to scan from */
- DWORD ncl /* Number of contiguous clusters to find (1..) */
-)
-{
- BYTE bm, bv;
- UINT i;
- DWORD val, scl, ctr;
-
-
- clst -= 2; /* The first bit in the bitmap corresponds to cluster #2 */
- if (clst >= fs->n_fatent - 2) clst = 0;
- scl = val = clst; ctr = 0;
- for (;;) {
- if (move_window(fs, fs->database + val / 8 / SS(fs)) != FR_OK) return 0xFFFFFFFF; /* (assuming bitmap is located top of the cluster heap) */
- i = val / 8 % SS(fs); bm = 1 << (val % 8);
- do {
- do {
- bv = fs->win[i] & bm; bm <<= 1; /* Get bit value */
- if (++val >= fs->n_fatent - 2) { /* Next cluster (with wrap-around) */
- val = 0; bm = 0; i = SS(fs);
- }
- if (bv == 0) { /* Is it a free cluster? */
- if (++ctr == ncl) return scl + 2; /* Check if run length is sufficient for required */
- } else {
- scl = val; ctr = 0; /* Encountered a cluster in-use, restart to scan */
- }
- if (val == clst) return 0; /* All cluster scanned? */
- } while (bm != 0);
- bm = 1;
- } while (++i < SS(fs));
- }
-}
-
-
-/*----------------------------------------*/
-/* Set/Clear a block of allocation bitmap */
-/*----------------------------------------*/
-
-static FRESULT change_bitmap (
- FATFS* fs, /* Filesystem object */
- DWORD clst, /* Cluster number to change from */
- DWORD ncl, /* Number of clusters to be changed */
- int bv /* bit value to be set (0 or 1) */
-)
-{
- BYTE bm;
- UINT i;
- DWORD sect;
-
-
- clst -= 2; /* The first bit corresponds to cluster #2 */
- sect = fs->database + clst / 8 / SS(fs); /* Sector address (assuming bitmap is located top of the cluster heap) */
- i = clst / 8 % SS(fs); /* Byte offset in the sector */
- bm = 1 << (clst % 8); /* Bit mask in the byte */
- for (;;) {
- if (move_window(fs, sect++) != FR_OK) return FR_DISK_ERR;
- do {
- do {
- if (bv == (int)((fs->win[i] & bm) != 0)) return FR_INT_ERR; /* Is the bit expected value? */
- fs->win[i] ^= bm; /* Flip the bit */
- fs->wflag = 1;
- if (--ncl == 0) return FR_OK; /* All bits processed? */
- } while (bm <<= 1); /* Next bit */
- bm = 1;
- } while (++i < SS(fs)); /* Next byte */
- i = 0;
- }
-}
-
-
-/*---------------------------------------------*/
-/* Fill the first fragment of the FAT chain */
-/*---------------------------------------------*/
-
-static FRESULT fill_first_frag (
- FFOBJID* obj /* Pointer to the corresponding object */
-)
-{
- FRESULT res;
- DWORD cl, n;
-
-
- if (obj->stat == 3) { /* Has the object been changed 'fragmented' in this session? */
- for (cl = obj->sclust, n = obj->n_cont; n; cl++, n--) { /* Create cluster chain on the FAT */
- res = put_fat(obj->fs, cl, cl + 1);
- if (res != FR_OK) return res;
- }
- obj->stat = 0; /* Change status 'FAT chain is valid' */
- }
- return FR_OK;
-}
-
-
-/*---------------------------------------------*/
-/* Fill the last fragment of the FAT chain */
-/*---------------------------------------------*/
-
-static FRESULT fill_last_frag (
- FFOBJID* obj, /* Pointer to the corresponding object */
- DWORD lcl, /* Last cluster of the fragment */
- DWORD term /* Value to set the last FAT entry */
-)
-{
- FRESULT res;
-
-
- while (obj->n_frag > 0) { /* Create the chain of last fragment */
- res = put_fat(obj->fs, lcl - obj->n_frag + 1, (obj->n_frag > 1) ? lcl - obj->n_frag + 2 : term);
- if (res != FR_OK) return res;
- obj->n_frag--;
- }
- return FR_OK;
-}
-
-#endif /* FF_FS_EXFAT && !FF_FS_READONLY */
-
-
-
-#if !FF_FS_READONLY
-/*-----------------------------------------------------------------------*/
-/* FAT handling - Remove a cluster chain */
-/*-----------------------------------------------------------------------*/
-
-static FRESULT remove_chain ( /* FR_OK(0):succeeded, !=0:error */
- FFOBJID* obj, /* Corresponding object */
- DWORD clst, /* Cluster to remove a chain from */
- DWORD pclst /* Previous cluster of clst (0:entire chain) */
-)
-{
- FRESULT res = FR_OK;
- DWORD nxt;
- FATFS *fs = obj->fs;
-#if FF_FS_EXFAT || FF_USE_TRIM
- DWORD scl = clst, ecl = clst;
-#endif
-#if FF_USE_TRIM
- DWORD rt[2];
-#endif
-
- if (clst < 2 || clst >= fs->n_fatent) return FR_INT_ERR; /* Check if in valid range */
-
- /* Mark the previous cluster 'EOC' on the FAT if it exists */
- if (pclst != 0 && (!FF_FS_EXFAT || fs->fs_type != FS_EXFAT || obj->stat != 2)) {
- res = put_fat(fs, pclst, 0xFFFFFFFF);
- if (res != FR_OK) return res;
- }
-
- /* Remove the chain */
- do {
- nxt = get_fat(obj, clst); /* Get cluster status */
- if (nxt == 0) break; /* Empty cluster? */
- if (nxt == 1) return FR_INT_ERR; /* Internal error? */
- if (nxt == 0xFFFFFFFF) return FR_DISK_ERR; /* Disk error? */
- if (!FF_FS_EXFAT || fs->fs_type != FS_EXFAT) {
- res = put_fat(fs, clst, 0); /* Mark the cluster 'free' on the FAT */
- if (res != FR_OK) return res;
- }
- if (fs->free_clst < fs->n_fatent - 2) { /* Update FSINFO */
- fs->free_clst++;
- fs->fsi_flag |= 1;
- }
-#if FF_FS_EXFAT || FF_USE_TRIM
- if (ecl + 1 == nxt) { /* Is next cluster contiguous? */
- ecl = nxt;
- } else { /* End of contiguous cluster block */
-#if FF_FS_EXFAT
- if (fs->fs_type == FS_EXFAT) {
- res = change_bitmap(fs, scl, ecl - scl + 1, 0); /* Mark the cluster block 'free' on the bitmap */
- if (res != FR_OK) return res;
- }
-#endif
-#if FF_USE_TRIM
- rt[0] = clst2sect(fs, scl); /* Start of data area freed */
- rt[1] = clst2sect(fs, ecl) + fs->csize - 1; /* End of data area freed */
- disk_ioctl(fs->pdrv, CTRL_TRIM, rt); /* Inform device the data in the block is no longer needed */
-#endif
- scl = ecl = nxt;
- }
-#endif
- clst = nxt; /* Next cluster */
- } while (clst < fs->n_fatent); /* Repeat while not the last link */
-
-#if FF_FS_EXFAT
- /* Some post processes for chain status */
- if (fs->fs_type == FS_EXFAT) {
- if (pclst == 0) { /* Has the entire chain been removed? */
- obj->stat = 0; /* Change the chain status 'initial' */
- } else {
- if (obj->stat == 0) { /* Is it a fragmented chain from the beginning of this session? */
- clst = obj->sclust; /* Follow the chain to check if it gets contiguous */
- while (clst != pclst) {
- nxt = get_fat(obj, clst);
- if (nxt < 2) return FR_INT_ERR;
- if (nxt == 0xFFFFFFFF) return FR_DISK_ERR;
- if (nxt != clst + 1) break; /* Not contiguous? */
- clst++;
- }
- if (clst == pclst) { /* Has the chain got contiguous again? */
- obj->stat = 2; /* Change the chain status 'contiguous' */
- }
- } else {
- if (obj->stat == 3 && pclst >= obj->sclust && pclst <= obj->sclust + obj->n_cont) { /* Was the chain fragmented in this session and got contiguous again? */
- obj->stat = 2; /* Change the chain status 'contiguous' */
- }
- }
- }
- }
-#endif
- return FR_OK;
-}
-
-
-
-
-/*-----------------------------------------------------------------------*/
-/* FAT handling - Stretch a chain or Create a new chain */
-/*-----------------------------------------------------------------------*/
-
-static DWORD create_chain ( /* 0:No free cluster, 1:Internal error, 0xFFFFFFFF:Disk error, >=2:New cluster# */
- FFOBJID* obj, /* Corresponding object */
- DWORD clst /* Cluster# to stretch, 0:Create a new chain */
-)
-{
- DWORD cs, ncl, scl;
- FRESULT res;
- FATFS *fs = obj->fs;
-
-
- if (clst == 0) { /* Create a new chain */
- scl = fs->last_clst; /* Suggested cluster to start to find */
- if (scl == 0 || scl >= fs->n_fatent) scl = 1;
- }
- else { /* Stretch a chain */
- cs = get_fat(obj, clst); /* Check the cluster status */
- if (cs < 2) return 1; /* Test for insanity */
- if (cs == 0xFFFFFFFF) return cs; /* Test for disk error */
- if (cs < fs->n_fatent) return cs; /* It is already followed by next cluster */
- scl = clst; /* Cluster to start to find */
- }
- if (fs->free_clst == 0) return 0; /* No free cluster */
-
-#if FF_FS_EXFAT
- if (fs->fs_type == FS_EXFAT) { /* On the exFAT volume */
- ncl = find_bitmap(fs, scl, 1); /* Find a free cluster */
- if (ncl == 0 || ncl == 0xFFFFFFFF) return ncl; /* No free cluster or hard error? */
- res = change_bitmap(fs, ncl, 1, 1); /* Mark the cluster 'in use' */
- if (res == FR_INT_ERR) return 1;
- if (res == FR_DISK_ERR) return 0xFFFFFFFF;
- if (clst == 0) { /* Is it a new chain? */
- obj->stat = 2; /* Set status 'contiguous' */
- } else { /* It is a stretched chain */
- if (obj->stat == 2 && ncl != scl + 1) { /* Is the chain got fragmented? */
- obj->n_cont = scl - obj->sclust; /* Set size of the contiguous part */
- obj->stat = 3; /* Change status 'just fragmented' */
- }
- }
- if (obj->stat != 2) { /* Is the file non-contiguous? */
- if (ncl == clst + 1) { /* Is the cluster next to previous one? */
- obj->n_frag = obj->n_frag ? obj->n_frag + 1 : 2; /* Increment size of last framgent */
- } else { /* New fragment */
- if (obj->n_frag == 0) obj->n_frag = 1;
- res = fill_last_frag(obj, clst, ncl); /* Fill last fragment on the FAT and link it to new one */
- if (res == FR_OK) obj->n_frag = 1;
- }
- }
- } else
-#endif
- { /* On the FAT/FAT32 volume */
- ncl = 0;
- if (scl == clst) { /* Stretching an existing chain? */
- ncl = scl + 1; /* Test if next cluster is free */
- if (ncl >= fs->n_fatent) ncl = 2;
- cs = get_fat(obj, ncl); /* Get next cluster status */
- if (cs == 1 || cs == 0xFFFFFFFF) return cs; /* Test for error */
- if (cs != 0) { /* Not free? */
- cs = fs->last_clst; /* Start at suggested cluster if it is valid */
- if (cs >= 2 && cs < fs->n_fatent) scl = cs;
- ncl = 0;
- }
- }
- if (ncl == 0) { /* The new cluster cannot be contiguous and find another fragment */
- ncl = scl; /* Start cluster */
- for (;;) {
- ncl++; /* Next cluster */
- if (ncl >= fs->n_fatent) { /* Check wrap-around */
- ncl = 2;
- if (ncl > scl) return 0; /* No free cluster found? */
- }
- cs = get_fat(obj, ncl); /* Get the cluster status */
- if (cs == 0) break; /* Found a free cluster? */
- if (cs == 1 || cs == 0xFFFFFFFF) return cs; /* Test for error */
- if (ncl == scl) return 0; /* No free cluster found? */
- }
- }
- res = put_fat(fs, ncl, 0xFFFFFFFF); /* Mark the new cluster 'EOC' */
- if (res == FR_OK && clst != 0) {
- res = put_fat(fs, clst, ncl); /* Link it from the previous one if needed */
- }
- }
-
- if (res == FR_OK) { /* Update FSINFO if function succeeded. */
- fs->last_clst = ncl;
- if (fs->free_clst <= fs->n_fatent - 2) fs->free_clst--;
- fs->fsi_flag |= 1;
- } else {
- ncl = (res == FR_DISK_ERR) ? 0xFFFFFFFF : 1; /* Failed. Generate error status */
- }
-
- return ncl; /* Return new cluster number or error status */
-}
-
-#endif /* !FF_FS_READONLY */
-
-
-
-
-#if FF_USE_FASTSEEK
-/*-----------------------------------------------------------------------*/
-/* FAT handling - Convert offset into cluster with link map table */
-/*-----------------------------------------------------------------------*/
-
-static DWORD clmt_clust ( /* <2:Error, >=2:Cluster number */
- FIL* fp, /* Pointer to the file object */
- FSIZE_t ofs /* File offset to be converted to cluster# */
-)
-{
- DWORD cl, ncl, *tbl;
- FATFS *fs = fp->obj.fs;
-
-
- tbl = fp->cltbl + 1; /* Top of CLMT */
- cl = (DWORD)(ofs / SS(fs) / fs->csize); /* Cluster order from top of the file */
- for (;;) {
- ncl = *tbl++; /* Number of cluters in the fragment */
- if (ncl == 0) return 0; /* End of table? (error) */
- if (cl < ncl) break; /* In this fragment? */
- cl -= ncl; tbl++; /* Next fragment */
- }
- return cl + *tbl; /* Return the cluster number */
-}
-
-#endif /* FF_USE_FASTSEEK */
-
-
-
-
-/*-----------------------------------------------------------------------*/
-/* Directory handling - Fill a cluster with zeros */
-/*-----------------------------------------------------------------------*/
-
-#if !FF_FS_READONLY
-static FRESULT dir_clear ( /* Returns FR_OK or FR_DISK_ERR */
- FATFS *fs, /* Filesystem object */
- DWORD clst /* Directory table to clear */
-)
-{
- DWORD sect;
- UINT n, szb;
- BYTE *ibuf;
-
-
- if (sync_window(fs) != FR_OK) return FR_DISK_ERR; /* Flush disk access window */
- sect = clst2sect(fs, clst); /* Top of the cluster */
- fs->winsect = sect; /* Set window to top of the cluster */
- mem_set(fs->win, 0, SS(fs)); /* Clear window buffer */
-#if FF_USE_LFN == 3 /* Quick table clear by using multi-secter write */
- /* Allocate a temporary buffer */
- for (szb = ((DWORD)fs->csize * SS(fs) >= MAX_MALLOC) ? MAX_MALLOC : fs->csize * SS(fs), ibuf = 0; szb > SS(fs) && (ibuf = ff_memalloc(szb)) == 0; szb /= 2) ;
- if (szb > SS(fs)) { /* Buffer allocated? */
- mem_set(ibuf, 0, szb);
- szb /= SS(fs); /* Bytes -> Sectors */
- for (n = 0; n < fs->csize && disk_write(fs->pdrv, ibuf, sect + n, szb) == RES_OK; n += szb) ; /* Fill the cluster with 0 */
- ff_memfree(ibuf);
- } else
-#endif
- {
- ibuf = fs->win; szb = 1; /* Use window buffer (many single-sector writes may take a time) */
- for (n = 0; n < fs->csize && disk_write(fs->pdrv, ibuf, sect + n, szb) == RES_OK; n += szb) ; /* Fill the cluster with 0 */
- }
- return (n == fs->csize) ? FR_OK : FR_DISK_ERR;
-}
-#endif /* !FF_FS_READONLY */
-
-
-
-
-/*-----------------------------------------------------------------------*/
-/* Directory handling - Set directory index */
-/*-----------------------------------------------------------------------*/
-
-static FRESULT dir_sdi ( /* FR_OK(0):succeeded, !=0:error */
- DIR* dp, /* Pointer to directory object */
- DWORD ofs /* Offset of directory table */
-)
-{
- DWORD csz, clst;
- FATFS *fs = dp->obj.fs;
-
-
- if (ofs >= (DWORD)((FF_FS_EXFAT && fs->fs_type == FS_EXFAT) ? MAX_DIR_EX : MAX_DIR) || ofs % SZDIRE) { /* Check range of offset and alignment */
- return FR_INT_ERR;
- }
- dp->dptr = ofs; /* Set current offset */
- clst = dp->obj.sclust; /* Table start cluster (0:root) */
- if (clst == 0 && fs->fs_type >= FS_FAT32) { /* Replace cluster# 0 with root cluster# */
- clst = fs->dirbase;
- if (FF_FS_EXFAT) dp->obj.stat = 0; /* exFAT: Root dir has an FAT chain */
- }
-
- if (clst == 0) { /* Static table (root-directory on the FAT volume) */
- if (ofs / SZDIRE >= fs->n_rootdir) return FR_INT_ERR; /* Is index out of range? */
- dp->sect = fs->dirbase;
-
- } else { /* Dynamic table (sub-directory or root-directory on the FAT32/exFAT volume) */
- csz = (DWORD)fs->csize * SS(fs); /* Bytes per cluster */
- while (ofs >= csz) { /* Follow cluster chain */
- clst = get_fat(&dp->obj, clst); /* Get next cluster */
- if (clst == 0xFFFFFFFF) return FR_DISK_ERR; /* Disk error */
- if (clst < 2 || clst >= fs->n_fatent) return FR_INT_ERR; /* Reached to end of table or internal error */
- ofs -= csz;
- }
- dp->sect = clst2sect(fs, clst);
- }
- dp->clust = clst; /* Current cluster# */
- if (dp->sect == 0) return FR_INT_ERR;
- dp->sect += ofs / SS(fs); /* Sector# of the directory entry */
- dp->dir = fs->win + (ofs % SS(fs)); /* Pointer to the entry in the win[] */
-
- return FR_OK;
-}
-
-
-
-
-/*-----------------------------------------------------------------------*/
-/* Directory handling - Move directory table index next */
-/*-----------------------------------------------------------------------*/
-
-static FRESULT dir_next ( /* FR_OK(0):succeeded, FR_NO_FILE:End of table, FR_DENIED:Could not stretch */
- DIR* dp, /* Pointer to the directory object */
- int stretch /* 0: Do not stretch table, 1: Stretch table if needed */
-)
-{
- DWORD ofs, clst;
- FATFS *fs = dp->obj.fs;
-
-
- ofs = dp->dptr + SZDIRE; /* Next entry */
- if (dp->sect == 0 || ofs >= (DWORD)((FF_FS_EXFAT && fs->fs_type == FS_EXFAT) ? MAX_DIR_EX : MAX_DIR)) return FR_NO_FILE; /* Report EOT when offset has reached max value */
-
- if (ofs % SS(fs) == 0) { /* Sector changed? */
- dp->sect++; /* Next sector */
-
- if (dp->clust == 0) { /* Static table */
- if (ofs / SZDIRE >= fs->n_rootdir) { /* Report EOT if it reached end of static table */
- dp->sect = 0; return FR_NO_FILE;
- }
- }
- else { /* Dynamic table */
- if ((ofs / SS(fs) & (fs->csize - 1)) == 0) { /* Cluster changed? */
- clst = get_fat(&dp->obj, dp->clust); /* Get next cluster */
- if (clst <= 1) return FR_INT_ERR; /* Internal error */
- if (clst == 0xFFFFFFFF) return FR_DISK_ERR; /* Disk error */
- if (clst >= fs->n_fatent) { /* It reached end of dynamic table */
-#if !FF_FS_READONLY
- if (!stretch) { /* If no stretch, report EOT */
- dp->sect = 0; return FR_NO_FILE;
- }
- clst = create_chain(&dp->obj, dp->clust); /* Allocate a cluster */
- if (clst == 0) return FR_DENIED; /* No free cluster */
- if (clst == 1) return FR_INT_ERR; /* Internal error */
- if (clst == 0xFFFFFFFF) return FR_DISK_ERR; /* Disk error */
- if (dir_clear(fs, clst) != FR_OK) return FR_DISK_ERR; /* Clean up the stretched table */
- if (FF_FS_EXFAT) dp->obj.stat |= 4; /* exFAT: The directory has been stretched */
-#else
- if (!stretch) dp->sect = 0; /* (this line is to suppress compiler warning) */
- dp->sect = 0; return FR_NO_FILE; /* Report EOT */
-#endif
- }
- dp->clust = clst; /* Initialize data for new cluster */
- dp->sect = clst2sect(fs, clst);
- }
- }
- }
- dp->dptr = ofs; /* Current entry */
- dp->dir = fs->win + ofs % SS(fs); /* Pointer to the entry in the win[] */
-
- return FR_OK;
-}
-
-
-
-
-#if !FF_FS_READONLY
-/*-----------------------------------------------------------------------*/
-/* Directory handling - Reserve a block of directory entries */
-/*-----------------------------------------------------------------------*/
-
-static FRESULT dir_alloc ( /* FR_OK(0):succeeded, !=0:error */
- DIR* dp, /* Pointer to the directory object */
- UINT nent /* Number of contiguous entries to allocate */
-)
-{
- FRESULT res;
- UINT n;
- FATFS *fs = dp->obj.fs;
-
-
- res = dir_sdi(dp, 0);
- if (res == FR_OK) {
- n = 0;
- do {
- res = move_window(fs, dp->sect);
- if (res != FR_OK) break;
-#if FF_FS_EXFAT
- if ((fs->fs_type == FS_EXFAT) ? (int)((dp->dir[XDIR_Type] & 0x80) == 0) : (int)(dp->dir[DIR_Name] == DDEM || dp->dir[DIR_Name] == 0)) {
-#else
- if (dp->dir[DIR_Name] == DDEM || dp->dir[DIR_Name] == 0) {
-#endif
- if (++n == nent) break; /* A block of contiguous free entries is found */
- } else {
- n = 0; /* Not a blank entry. Restart to search */
- }
- res = dir_next(dp, 1);
- } while (res == FR_OK); /* Next entry with table stretch enabled */
- }
-
- if (res == FR_NO_FILE) res = FR_DENIED; /* No directory entry to allocate */
- return res;
-}
-
-#endif /* !FF_FS_READONLY */
-
-
-
-
-/*-----------------------------------------------------------------------*/
-/* FAT: Directory handling - Load/Store start cluster number */
-/*-----------------------------------------------------------------------*/
-
-static DWORD ld_clust ( /* Returns the top cluster value of the SFN entry */
- FATFS* fs, /* Pointer to the fs object */
- const BYTE* dir /* Pointer to the key entry */
-)
-{
- DWORD cl;
-
- cl = ld_word(dir + DIR_FstClusLO);
- if (fs->fs_type == FS_FAT32) {
- cl |= (DWORD)ld_word(dir + DIR_FstClusHI) << 16;
- }
-
- return cl;
-}
-
-
-#if !FF_FS_READONLY
-static void st_clust (
- FATFS* fs, /* Pointer to the fs object */
- BYTE* dir, /* Pointer to the key entry */
- DWORD cl /* Value to be set */
-)
-{
- st_word(dir + DIR_FstClusLO, (WORD)cl);
- if (fs->fs_type == FS_FAT32) {
- st_word(dir + DIR_FstClusHI, (WORD)(cl >> 16));
- }
-}
-#endif
-
-
-
-#if FF_USE_LFN
-/*--------------------------------------------------------*/
-/* FAT-LFN: Compare a part of file name with an LFN entry */
-/*--------------------------------------------------------*/
-
-static int cmp_lfn ( /* 1:matched, 0:not matched */
- const WCHAR* lfnbuf, /* Pointer to the LFN working buffer to be compared */
- BYTE* dir /* Pointer to the directory entry containing the part of LFN */
-)
-{
- UINT i, s;
- WCHAR wc, uc;
-
-
- if (ld_word(dir + LDIR_FstClusLO) != 0) return 0; /* Check LDIR_FstClusLO */
-
- i = ((dir[LDIR_Ord] & 0x3F) - 1) * 13; /* Offset in the LFN buffer */
-
- for (wc = 1, s = 0; s < 13; s++) { /* Process all characters in the entry */
- uc = ld_word(dir + LfnOfs[s]); /* Pick an LFN character */
- if (wc != 0) {
- if (i >= FF_MAX_LFN || ff_wtoupper(uc) != ff_wtoupper(lfnbuf[i++])) { /* Compare it */
- return 0; /* Not matched */
- }
- wc = uc;
- } else {
- if (uc != 0xFFFF) return 0; /* Check filler */
- }
- }
-
- if ((dir[LDIR_Ord] & LLEF) && wc && lfnbuf[i]) return 0; /* Last segment matched but different length */
-
- return 1; /* The part of LFN matched */
-}
-
-
-#if FF_FS_MINIMIZE <= 1 || FF_FS_RPATH >= 2 || FF_USE_LABEL || FF_FS_EXFAT
-/*-----------------------------------------------------*/
-/* FAT-LFN: Pick a part of file name from an LFN entry */
-/*-----------------------------------------------------*/
-
-static int pick_lfn ( /* 1:succeeded, 0:buffer overflow or invalid LFN entry */
- WCHAR* lfnbuf, /* Pointer to the LFN working buffer */
- BYTE* dir /* Pointer to the LFN entry */
-)
-{
- UINT i, s;
- WCHAR wc, uc;
-
-
- if (ld_word(dir + LDIR_FstClusLO) != 0) return 0; /* Check LDIR_FstClusLO is 0 */
-
- i = ((dir[LDIR_Ord] & ~LLEF) - 1) * 13; /* Offset in the LFN buffer */
-
- for (wc = 1, s = 0; s < 13; s++) { /* Process all characters in the entry */
- uc = ld_word(dir + LfnOfs[s]); /* Pick an LFN character */
- if (wc != 0) {
- if (i >= FF_MAX_LFN) return 0; /* Buffer overflow? */
- lfnbuf[i++] = wc = uc; /* Store it */
- } else {
- if (uc != 0xFFFF) return 0; /* Check filler */
- }
- }
-
- if (dir[LDIR_Ord] & LLEF) { /* Put terminator if it is the last LFN part */
- if (i >= FF_MAX_LFN) return 0; /* Buffer overflow? */
- lfnbuf[i] = 0;
- }
-
- return 1; /* The part of LFN is valid */
-}
-#endif
-
-
-#if !FF_FS_READONLY
-/*-----------------------------------------*/
-/* FAT-LFN: Create an entry of LFN entries */
-/*-----------------------------------------*/
-
-static void put_lfn (
- const WCHAR* lfn, /* Pointer to the LFN */
- BYTE* dir, /* Pointer to the LFN entry to be created */
- BYTE ord, /* LFN order (1-20) */
- BYTE sum /* Checksum of the corresponding SFN */
-)
-{
- UINT i, s;
- WCHAR wc;
-
-
- dir[LDIR_Chksum] = sum; /* Set checksum */
- dir[LDIR_Attr] = AM_LFN; /* Set attribute. LFN entry */
- dir[LDIR_Type] = 0;
- st_word(dir + LDIR_FstClusLO, 0);
-
- i = (ord - 1) * 13; /* Get offset in the LFN working buffer */
- s = wc = 0;
- do {
- if (wc != 0xFFFF) wc = lfn[i++]; /* Get an effective character */
- st_word(dir + LfnOfs[s], wc); /* Put it */
- if (wc == 0) wc = 0xFFFF; /* Padding characters for left locations */
- } while (++s < 13);
- if (wc == 0xFFFF || !lfn[i]) ord |= LLEF; /* Last LFN part is the start of LFN sequence */
- dir[LDIR_Ord] = ord; /* Set the LFN order */
-}
-
-#endif /* !FF_FS_READONLY */
-#endif /* FF_USE_LFN */
-
-
-
-#if FF_USE_LFN && !FF_FS_READONLY
-/*-----------------------------------------------------------------------*/
-/* FAT-LFN: Create a Numbered SFN */
-/*-----------------------------------------------------------------------*/
-
-static void gen_numname (
- BYTE* dst, /* Pointer to the buffer to store numbered SFN */
- const BYTE* src, /* Pointer to SFN */
- const WCHAR* lfn, /* Pointer to LFN */
- UINT seq /* Sequence number */
-)
-{
- BYTE ns[8], c;
- UINT i, j;
- WCHAR wc;
- DWORD sr;
-
-
- mem_cpy(dst, src, 11);
-
- if (seq > 5) { /* In case of many collisions, generate a hash number instead of sequential number */
- sr = seq;
- while (*lfn) { /* Create a CRC as hash value */
- wc = *lfn++;
- for (i = 0; i < 16; i++) {
- sr = (sr << 1) + (wc & 1);
- wc >>= 1;
- if (sr & 0x10000) sr ^= 0x11021;
- }
- }
- seq = (UINT)sr;
- }
-
- /* itoa (hexdecimal) */
- i = 7;
- do {
- c = (BYTE)((seq % 16) + '0');
- if (c > '9') c += 7;
- ns[i--] = c;
- seq /= 16;
- } while (seq);
- ns[i] = '~';
-
- /* Append the number to the SFN body */
- for (j = 0; j < i && dst[j] != ' '; j++) {
- if (dbc_1st(dst[j])) {
- if (j == i - 1) break;
- j++;
- }
- }
- do {
- dst[j++] = (i < 8) ? ns[i++] : ' ';
- } while (j < 8);
-}
-#endif /* FF_USE_LFN && !FF_FS_READONLY */
-
-
-
-#if FF_USE_LFN
-/*-----------------------------------------------------------------------*/
-/* FAT-LFN: Calculate checksum of an SFN entry */
-/*-----------------------------------------------------------------------*/
-
-static BYTE sum_sfn (
- const BYTE* dir /* Pointer to the SFN entry */
-)
-{
- BYTE sum = 0;
- UINT n = 11;
-
- do {
- sum = (sum >> 1) + (sum << 7) + *dir++;
- } while (--n);
- return sum;
-}
-
-#endif /* FF_USE_LFN */
-
-
-
-#if FF_FS_EXFAT
-/*-----------------------------------------------------------------------*/
-/* exFAT: Checksum */
-/*-----------------------------------------------------------------------*/
-
-static WORD xdir_sum ( /* Get checksum of the directoly entry block */
- const BYTE* dir /* Directory entry block to be calculated */
-)
-{
- UINT i, szblk;
- WORD sum;
-
-
- szblk = (dir[XDIR_NumSec] + 1) * SZDIRE; /* Number of bytes of the entry block */
- for (i = sum = 0; i < szblk; i++) {
- if (i == XDIR_SetSum) { /* Skip 2-byte sum field */
- i++;
- } else {
- sum = ((sum & 1) ? 0x8000 : 0) + (sum >> 1) + dir[i];
- }
- }
- return sum;
-}
-
-
-
-static WORD xname_sum ( /* Get check sum (to be used as hash) of the file name */
- const WCHAR* name /* File name to be calculated */
-)
-{
- WCHAR chr;
- WORD sum = 0;
-
-
- while ((chr = *name++) != 0) {
- chr = (WCHAR)ff_wtoupper(chr); /* File name needs to be up-case converted */
- sum = ((sum & 1) ? 0x8000 : 0) + (sum >> 1) + (chr & 0xFF);
- sum = ((sum & 1) ? 0x8000 : 0) + (sum >> 1) + (chr >> 8);
- }
- return sum;
-}
-
-
-#if !FF_FS_READONLY && FF_USE_MKFS
-static DWORD xsum32 ( /* Returns 32-bit checksum */
- BYTE dat, /* Byte to be calculated (byte-by-byte processing) */
- DWORD sum /* Previous sum value */
-)
-{
- sum = ((sum & 1) ? 0x80000000 : 0) + (sum >> 1) + dat;
- return sum;
-}
-#endif
-
-
-#if FF_FS_MINIMIZE <= 1 || FF_FS_RPATH >= 2
-/*------------------------------------------------------*/
-/* exFAT: Get object information from a directory block */
-/*------------------------------------------------------*/
-
-static void get_xfileinfo (
- BYTE* dirb, /* Pointer to the direcotry entry block 85+C0+C1s */
- FILINFO* fno /* Buffer to store the extracted file information */
-)
-{
- WCHAR wc, hs;
- UINT di, si, nc;
-
- /* Get file name from the entry block */
- si = SZDIRE * 2; /* 1st C1 entry */
- nc = 0; hs = 0; di = 0;
- while (nc < dirb[XDIR_NumName]) {
- if (si >= MAXDIRB(FF_MAX_LFN)) { di = 0; break; } /* Truncated directory block? */
- if ((si % SZDIRE) == 0) si += 2; /* Skip entry type field */
- wc = ld_word(dirb + si); si += 2; nc++; /* Get a character */
- if (hs == 0 && IsSurrogate(wc)) { /* Is it a surrogate? */
- hs = wc; continue; /* Get low surrogate */
- }
- wc = put_utf((DWORD)hs << 16 | wc, &fno->fname[di], FF_LFN_BUF - di); /* Store it in API encoding */
- if (wc == 0) { di = 0; break; } /* Buffer overflow or wrong encoding? */
- di += wc;
- hs = 0;
- }
- if (hs != 0) di = 0; /* Broken surrogate pair? */
- if (di == 0) fno->fname[di++] = '?'; /* Inaccessible object name? */
- fno->fname[di] = 0; /* Terminate the name */
- fno->altname[0] = 0; /* exFAT does not support SFN */
-
- fno->fattrib = dirb[XDIR_Attr]; /* Attribute */
- fno->fsize = (fno->fattrib & AM_DIR) ? 0 : ld_qword(dirb + XDIR_FileSize); /* Size */
- fno->ftime = ld_word(dirb + XDIR_ModTime + 0); /* Time */
- fno->fdate = ld_word(dirb + XDIR_ModTime + 2); /* Date */
-}
-
-#endif /* FF_FS_MINIMIZE <= 1 || FF_FS_RPATH >= 2 */
-
-
-/*-----------------------------------*/
-/* exFAT: Get a directry entry block */
-/*-----------------------------------*/
-
-static FRESULT load_xdir ( /* FR_INT_ERR: invalid entry block */
- DIR* dp /* Reading direcotry object pointing top of the entry block to load */
-)
-{
- FRESULT res;
- UINT i, sz_ent;
- BYTE* dirb = dp->obj.fs->dirbuf; /* Pointer to the on-memory direcotry entry block 85+C0+C1s */
-
-
- /* Load 85 entry */
- res = move_window(dp->obj.fs, dp->sect);
- if (res != FR_OK) return res;
- if (dp->dir[XDIR_Type] != 0x85) return FR_INT_ERR; /* Invalid order */
- mem_cpy(dirb + 0 * SZDIRE, dp->dir, SZDIRE);
- sz_ent = (dirb[XDIR_NumSec] + 1) * SZDIRE;
- if (sz_ent < 3 * SZDIRE || sz_ent > 19 * SZDIRE) return FR_INT_ERR;
-
- /* Load C0 entry */
- res = dir_next(dp, 0);
- if (res == FR_NO_FILE) res = FR_INT_ERR; /* It cannot be */
- if (res != FR_OK) return res;
- res = move_window(dp->obj.fs, dp->sect);
- if (res != FR_OK) return res;
- if (dp->dir[XDIR_Type] != 0xC0) return FR_INT_ERR; /* Invalid order */
- mem_cpy(dirb + 1 * SZDIRE, dp->dir, SZDIRE);
- if (MAXDIRB(dirb[XDIR_NumName]) > sz_ent) return FR_INT_ERR;
-
- /* Load C1 entries */
- i = 2 * SZDIRE; /* C1 offset to load */
- do {
- res = dir_next(dp, 0);
- if (res == FR_NO_FILE) res = FR_INT_ERR; /* It cannot be */
- if (res != FR_OK) return res;
- res = move_window(dp->obj.fs, dp->sect);
- if (res != FR_OK) return res;
- if (dp->dir[XDIR_Type] != 0xC1) return FR_INT_ERR; /* Invalid order */
- if (i < MAXDIRB(FF_MAX_LFN)) mem_cpy(dirb + i, dp->dir, SZDIRE);
- } while ((i += SZDIRE) < sz_ent);
-
- /* Sanity check (do it for only accessible object) */
- if (i <= MAXDIRB(FF_MAX_LFN)) {
- if (xdir_sum(dirb) != ld_word(dirb + XDIR_SetSum)) return FR_INT_ERR;
- }
- return FR_OK;
-}
-
-
-/*------------------------------------------------------------------*/
-/* exFAT: Initialize object allocation info with loaded entry block */
-/*------------------------------------------------------------------*/
-
-static void init_alloc_info (
- FATFS* fs, /* Filesystem object */
- FFOBJID* obj /* Object allocation information to be initialized */
-)
-{
- obj->sclust = ld_dword(fs->dirbuf + XDIR_FstClus); /* Start cluster */
- obj->objsize = ld_qword(fs->dirbuf + XDIR_FileSize); /* Size */
- obj->stat = fs->dirbuf[XDIR_GenFlags] & 2; /* Allocation status */
- obj->n_frag = 0; /* No last fragment info */
-}
-
-
-
-#if !FF_FS_READONLY || FF_FS_RPATH != 0
-/*------------------------------------------------*/
-/* exFAT: Load the object's directory entry block */
-/*------------------------------------------------*/
-
-static FRESULT load_obj_xdir (
- DIR* dp, /* Blank directory object to be used to access containing direcotry */
- const FFOBJID* obj /* Object with its containing directory information */
-)
-{
- FRESULT res;
-
- /* Open object containing directory */
- dp->obj.fs = obj->fs;
- dp->obj.sclust = obj->c_scl;
- dp->obj.stat = (BYTE)obj->c_size;
- dp->obj.objsize = obj->c_size & 0xFFFFFF00;
- dp->obj.n_frag = 0;
- dp->blk_ofs = obj->c_ofs;
-
- res = dir_sdi(dp, dp->blk_ofs); /* Goto object's entry block */
- if (res == FR_OK) {
- res = load_xdir(dp); /* Load the object's entry block */
- }
- return res;
-}
-#endif
-
-
-#if !FF_FS_READONLY
-/*----------------------------------------*/
-/* exFAT: Store the directory entry block */
-/*----------------------------------------*/
-
-static FRESULT store_xdir (
- DIR* dp /* Pointer to the direcotry object */
-)
-{
- FRESULT res;
- UINT nent;
- BYTE* dirb = dp->obj.fs->dirbuf; /* Pointer to the direcotry entry block 85+C0+C1s */
-
- /* Create set sum */
- st_word(dirb + XDIR_SetSum, xdir_sum(dirb));
- nent = dirb[XDIR_NumSec] + 1;
-
- /* Store the direcotry entry block to the directory */
- res = dir_sdi(dp, dp->blk_ofs);
- while (res == FR_OK) {
- res = move_window(dp->obj.fs, dp->sect);
- if (res != FR_OK) break;
- mem_cpy(dp->dir, dirb, SZDIRE);
- dp->obj.fs->wflag = 1;
- if (--nent == 0) break;
- dirb += SZDIRE;
- res = dir_next(dp, 0);
- }
- return (res == FR_OK || res == FR_DISK_ERR) ? res : FR_INT_ERR;
-}
-
-
-
-/*-------------------------------------------*/
-/* exFAT: Create a new directory enrty block */
-/*-------------------------------------------*/
-
-static void create_xdir (
- BYTE* dirb, /* Pointer to the direcotry entry block buffer */
- const WCHAR* lfn /* Pointer to the object name */
-)
-{
- UINT i;
- BYTE nc1, nlen;
- WCHAR wc;
-
-
- /* Create 85,C0 entry */
- mem_set(dirb, 0, 2 * SZDIRE);
- dirb[0 * SZDIRE + XDIR_Type] = 0x85; /* 85 entry */
- dirb[1 * SZDIRE + XDIR_Type] = 0xC0; /* C0 entry */
-
- /* Create C1 entries */
- i = SZDIRE * 2; /* Top of C1 entries */
- nlen = nc1 = 0; wc = 1;
- do {
- dirb[i++] = 0xC1; dirb[i++] = 0; /* Entry type C1 */
- do { /* Fill name field */
- if (wc != 0 && (wc = lfn[nlen]) != 0) nlen++; /* Get a character if exist */
- st_word(dirb + i, wc); /* Store it */
- i += 2;
- } while (i % SZDIRE != 0);
- nc1++;
- } while (lfn[nlen]); /* Fill next entry if any char follows */
-
- dirb[XDIR_NumName] = nlen; /* Set name length */
- dirb[XDIR_NumSec] = 1 + nc1; /* Set secondary count (C0 + C1s) */
- st_word(dirb + XDIR_NameHash, xname_sum(lfn)); /* Set name hash */
-}
-
-#endif /* !FF_FS_READONLY */
-#endif /* FF_FS_EXFAT */
-
-
-
-#if FF_FS_MINIMIZE <= 1 || FF_FS_RPATH >= 2 || FF_USE_LABEL || FF_FS_EXFAT
-/*-----------------------------------------------------------------------*/
-/* Read an object from the directory */
-/*-----------------------------------------------------------------------*/
-
-#define dir_read_file(dp) dir_read(dp, 0)
-#define dir_read_label(dp) dir_read(dp, 1)
-
-static FRESULT dir_read (
- DIR* dp, /* Pointer to the directory object */
- int vol /* Filtered by 0:file/directory or 1:volume label */
-)
-{
- FRESULT res = FR_NO_FILE;
- FATFS *fs = dp->obj.fs;
- BYTE a, c;
-#if FF_USE_LFN
- BYTE ord = 0xFF, sum = 0xFF;
-#endif
-
- while (dp->sect) {
- res = move_window(fs, dp->sect);
- if (res != FR_OK) break;
- c = dp->dir[DIR_Name]; /* Test for the entry type */
- if (c == 0) {
- res = FR_NO_FILE; break; /* Reached to end of the directory */
- }
-#if FF_FS_EXFAT
- if (fs->fs_type == FS_EXFAT) { /* On the exFAT volume */
- if (FF_USE_LABEL && vol) {
- if (c == 0x83) break; /* Volume label entry? */
- } else {
- if (c == 0x85) { /* Start of the file entry block? */
- dp->blk_ofs = dp->dptr; /* Get location of the block */
- res = load_xdir(dp); /* Load the entry block */
- if (res == FR_OK) {
- dp->obj.attr = fs->dirbuf[XDIR_Attr] & AM_MASK; /* Get attribute */
- }
- break;
- }
- }
- } else
-#endif
- { /* On the FAT/FAT32 volume */
- dp->obj.attr = a = dp->dir[DIR_Attr] & AM_MASK; /* Get attribute */
-#if FF_USE_LFN /* LFN configuration */
- if (c == DDEM || c == '.' || (int)((a & ~AM_ARC) == AM_VOL) != vol) { /* An entry without valid data */
- ord = 0xFF;
- } else {
- if (a == AM_LFN) { /* An LFN entry is found */
- if (c & LLEF) { /* Is it start of an LFN sequence? */
- sum = dp->dir[LDIR_Chksum];
- c &= (BYTE)~LLEF; ord = c;
- dp->blk_ofs = dp->dptr;
- }
- /* Check LFN validity and capture it */
- ord = (c == ord && sum == dp->dir[LDIR_Chksum] && pick_lfn(fs->lfnbuf, dp->dir)) ? ord - 1 : 0xFF;
- } else { /* An SFN entry is found */
- if (ord != 0 || sum != sum_sfn(dp->dir)) { /* Is there a valid LFN? */
- dp->blk_ofs = 0xFFFFFFFF; /* It has no LFN. */
- }
- break;
- }
- }
-#else /* Non LFN configuration */
- if (c != DDEM && c != '.' && a != AM_LFN && (int)((a & ~AM_ARC) == AM_VOL) == vol) { /* Is it a valid entry? */
- break;
- }
-#endif
- }
- res = dir_next(dp, 0); /* Next entry */
- if (res != FR_OK) break;
- }
-
- if (res != FR_OK) dp->sect = 0; /* Terminate the read operation on error or EOT */
- return res;
-}
-
-#endif /* FF_FS_MINIMIZE <= 1 || FF_USE_LABEL || FF_FS_RPATH >= 2 */
-
-
-
-/*-----------------------------------------------------------------------*/
-/* Directory handling - Find an object in the directory */
-/*-----------------------------------------------------------------------*/
-
-static FRESULT dir_find ( /* FR_OK(0):succeeded, !=0:error */
- DIR* dp /* Pointer to the directory object with the file name */
-)
-{
- FRESULT res;
- FATFS *fs = dp->obj.fs;
- BYTE c;
-#if FF_USE_LFN
- BYTE a, ord, sum;
-#endif
-
- res = dir_sdi(dp, 0); /* Rewind directory object */
- if (res != FR_OK) return res;
-#if FF_FS_EXFAT
- if (fs->fs_type == FS_EXFAT) { /* On the exFAT volume */
- BYTE nc;
- UINT di, ni;
- WORD hash = xname_sum(fs->lfnbuf); /* Hash value of the name to find */
-
- while ((res = dir_read_file(dp)) == FR_OK) { /* Read an item */
-#if FF_MAX_LFN < 255
- if (fs->dirbuf[XDIR_NumName] > FF_MAX_LFN) continue; /* Skip comparison if inaccessible object name */
-#endif
- if (ld_word(fs->dirbuf + XDIR_NameHash) != hash) continue; /* Skip comparison if hash mismatched */
- for (nc = fs->dirbuf[XDIR_NumName], di = SZDIRE * 2, ni = 0; nc; nc--, di += 2, ni++) { /* Compare the name */
- if ((di % SZDIRE) == 0) di += 2;
- if (ff_wtoupper(ld_word(fs->dirbuf + di)) != ff_wtoupper(fs->lfnbuf[ni])) break;
- }
- if (nc == 0 && !fs->lfnbuf[ni]) break; /* Name matched? */
- }
- return res;
- }
-#endif
- /* On the FAT/FAT32 volume */
-#if FF_USE_LFN
- ord = sum = 0xFF; dp->blk_ofs = 0xFFFFFFFF; /* Reset LFN sequence */
-#endif
- do {
- res = move_window(fs, dp->sect);
- if (res != FR_OK) break;
- c = dp->dir[DIR_Name];
- if (c == 0) { res = FR_NO_FILE; break; } /* Reached to end of table */
-#if FF_USE_LFN /* LFN configuration */
- dp->obj.attr = a = dp->dir[DIR_Attr] & AM_MASK;
- if (c == DDEM || ((a & AM_VOL) && a != AM_LFN)) { /* An entry without valid data */
- ord = 0xFF; dp->blk_ofs = 0xFFFFFFFF; /* Reset LFN sequence */
- } else {
- if (a == AM_LFN) { /* An LFN entry is found */
- if (!(dp->fn[NSFLAG] & NS_NOLFN)) {
- if (c & LLEF) { /* Is it start of LFN sequence? */
- sum = dp->dir[LDIR_Chksum];
- c &= (BYTE)~LLEF; ord = c; /* LFN start order */
- dp->blk_ofs = dp->dptr; /* Start offset of LFN */
- }
- /* Check validity of the LFN entry and compare it with given name */
- ord = (c == ord && sum == dp->dir[LDIR_Chksum] && cmp_lfn(fs->lfnbuf, dp->dir)) ? ord - 1 : 0xFF;
- }
- } else { /* An SFN entry is found */
- if (ord == 0 && sum == sum_sfn(dp->dir)) break; /* LFN matched? */
- if (!(dp->fn[NSFLAG] & NS_LOSS) && !mem_cmp(dp->dir, dp->fn, 11)) break; /* SFN matched? */
- ord = 0xFF; dp->blk_ofs = 0xFFFFFFFF; /* Reset LFN sequence */
- }
- }
-#else /* Non LFN configuration */
- dp->obj.attr = dp->dir[DIR_Attr] & AM_MASK;
- if (!(dp->dir[DIR_Attr] & AM_VOL) && !mem_cmp(dp->dir, dp->fn, 11)) break; /* Is it a valid entry? */
-#endif
- res = dir_next(dp, 0); /* Next entry */
- } while (res == FR_OK);
-
- return res;
-}
-
-
-
-
-#if !FF_FS_READONLY
-/*-----------------------------------------------------------------------*/
-/* Register an object to the directory */
-/*-----------------------------------------------------------------------*/
-
-static FRESULT dir_register ( /* FR_OK:succeeded, FR_DENIED:no free entry or too many SFN collision, FR_DISK_ERR:disk error */
- DIR* dp /* Target directory with object name to be created */
-)
-{
- FRESULT res;
- FATFS *fs = dp->obj.fs;
-#if FF_USE_LFN /* LFN configuration */
- UINT n, nlen, nent;
- BYTE sn[12], sum;
-
-
- if (dp->fn[NSFLAG] & (NS_DOT | NS_NONAME)) return FR_INVALID_NAME; /* Check name validity */
- for (nlen = 0; fs->lfnbuf[nlen]; nlen++) ; /* Get lfn length */
-
-#if FF_FS_EXFAT
- if (fs->fs_type == FS_EXFAT) { /* On the exFAT volume */
- nent = (nlen + 14) / 15 + 2; /* Number of entries to allocate (85+C0+C1s) */
- res = dir_alloc(dp, nent); /* Allocate entries */
- if (res != FR_OK) return res;
- dp->blk_ofs = dp->dptr - SZDIRE * (nent - 1); /* Set the allocated entry block offset */
-
- if (dp->obj.stat & 4) { /* Has the directory been stretched? */
- dp->obj.stat &= ~4;
- res = fill_first_frag(&dp->obj); /* Fill the first fragment on the FAT if needed */
- if (res != FR_OK) return res;
- res = fill_last_frag(&dp->obj, dp->clust, 0xFFFFFFFF); /* Fill the last fragment on the FAT if needed */
- if (res != FR_OK) return res;
- if (dp->obj.sclust != 0) { /* Is it a sub directory? */
- DIR dj;
-
- res = load_obj_xdir(&dj, &dp->obj); /* Load the object status */
- if (res != FR_OK) return res;
- dp->obj.objsize += (DWORD)fs->csize * SS(fs); /* Increase the directory size by cluster size */
- st_qword(fs->dirbuf + XDIR_FileSize, dp->obj.objsize); /* Update the allocation status */
- st_qword(fs->dirbuf + XDIR_ValidFileSize, dp->obj.objsize);
- fs->dirbuf[XDIR_GenFlags] = dp->obj.stat | 1;
- res = store_xdir(&dj); /* Store the object status */
- if (res != FR_OK) return res;
- }
- }
-
- create_xdir(fs->dirbuf, fs->lfnbuf); /* Create on-memory directory block to be written later */
- return FR_OK;
- }
-#endif
- /* On the FAT/FAT32 volume */
- mem_cpy(sn, dp->fn, 12);
- if (sn[NSFLAG] & NS_LOSS) { /* When LFN is out of 8.3 format, generate a numbered name */
- dp->fn[NSFLAG] = NS_NOLFN; /* Find only SFN */
- for (n = 1; n < 100; n++) {
- gen_numname(dp->fn, sn, fs->lfnbuf, n); /* Generate a numbered name */
- res = dir_find(dp); /* Check if the name collides with existing SFN */
- if (res != FR_OK) break;
- }
- if (n == 100) return FR_DENIED; /* Abort if too many collisions */
- if (res != FR_NO_FILE) return res; /* Abort if the result is other than 'not collided' */
- dp->fn[NSFLAG] = sn[NSFLAG];
- }
-
- /* Create an SFN with/without LFNs. */
- nent = (sn[NSFLAG] & NS_LFN) ? (nlen + 12) / 13 + 1 : 1; /* Number of entries to allocate */
- res = dir_alloc(dp, nent); /* Allocate entries */
- if (res == FR_OK && --nent) { /* Set LFN entry if needed */
- res = dir_sdi(dp, dp->dptr - nent * SZDIRE);
- if (res == FR_OK) {
- sum = sum_sfn(dp->fn); /* Checksum value of the SFN tied to the LFN */
- do { /* Store LFN entries in bottom first */
- res = move_window(fs, dp->sect);
- if (res != FR_OK) break;
- put_lfn(fs->lfnbuf, dp->dir, (BYTE)nent, sum);
- fs->wflag = 1;
- res = dir_next(dp, 0); /* Next entry */
- } while (res == FR_OK && --nent);
- }
- }
-
-#else /* Non LFN configuration */
- res = dir_alloc(dp, 1); /* Allocate an entry for SFN */
-
-#endif
-
- /* Set SFN entry */
- if (res == FR_OK) {
- res = move_window(fs, dp->sect);
- if (res == FR_OK) {
- mem_set(dp->dir, 0, SZDIRE); /* Clean the entry */
- mem_cpy(dp->dir + DIR_Name, dp->fn, 11); /* Put SFN */
-#if FF_USE_LFN
- dp->dir[DIR_NTres] = dp->fn[NSFLAG] & (NS_BODY | NS_EXT); /* Put NT flag */
-#endif
- fs->wflag = 1;
- }
- }
-
- return res;
-}
-
-#endif /* !FF_FS_READONLY */
-
-
-
-#if !FF_FS_READONLY && FF_FS_MINIMIZE == 0
-/*-----------------------------------------------------------------------*/
-/* Remove an object from the directory */
-/*-----------------------------------------------------------------------*/
-
-static FRESULT dir_remove ( /* FR_OK:Succeeded, FR_DISK_ERR:A disk error */
- DIR* dp /* Directory object pointing the entry to be removed */
-)
-{
- FRESULT res;
- FATFS *fs = dp->obj.fs;
-#if FF_USE_LFN /* LFN configuration */
- DWORD last = dp->dptr;
-
- res = (dp->blk_ofs == 0xFFFFFFFF) ? FR_OK : dir_sdi(dp, dp->blk_ofs); /* Goto top of the entry block if LFN is exist */
- if (res == FR_OK) {
- do {
- res = move_window(fs, dp->sect);
- if (res != FR_OK) break;
- if (FF_FS_EXFAT && fs->fs_type == FS_EXFAT) { /* On the exFAT volume */
- dp->dir[XDIR_Type] &= 0x7F; /* Clear the entry InUse flag. */
- } else { /* On the FAT/FAT32 volume */
- dp->dir[DIR_Name] = DDEM; /* Mark the entry 'deleted'. */
- }
- fs->wflag = 1;
- if (dp->dptr >= last) break; /* If reached last entry then all entries of the object has been deleted. */
- res = dir_next(dp, 0); /* Next entry */
- } while (res == FR_OK);
- if (res == FR_NO_FILE) res = FR_INT_ERR;
- }
-#else /* Non LFN configuration */
-
- res = move_window(fs, dp->sect);
- if (res == FR_OK) {
- dp->dir[DIR_Name] = DDEM; /* Mark the entry 'deleted'.*/
- fs->wflag = 1;
- }
-#endif
-
- return res;
-}
-
-#endif /* !FF_FS_READONLY && FF_FS_MINIMIZE == 0 */
-
-
-
-#if FF_FS_MINIMIZE <= 1 || FF_FS_RPATH >= 2
-/*-----------------------------------------------------------------------*/
-/* Get file information from directory entry */
-/*-----------------------------------------------------------------------*/
-
-static void get_fileinfo (
- DIR* dp, /* Pointer to the directory object */
- FILINFO* fno /* Pointer to the file information to be filled */
-)
-{
- UINT si, di;
-#if FF_USE_LFN
- WCHAR wc, hs;
- FATFS *fs = dp->obj.fs;
-#else
- TCHAR c;
-#endif
-
-
- fno->fname[0] = 0; /* Invaidate file info */
- if (dp->sect == 0) return; /* Exit if read pointer has reached end of directory */
-
-#if FF_USE_LFN /* LFN configuration */
-#if FF_FS_EXFAT
- if (fs->fs_type == FS_EXFAT) { /* On the exFAT volume */
- get_xfileinfo(fs->dirbuf, fno);
- return;
- } else
-#endif
- { /* On the FAT/FAT32 volume */
- if (dp->blk_ofs != 0xFFFFFFFF) { /* Get LFN if available */
- si = di = hs = 0;
- while (fs->lfnbuf[si] != 0) {
- wc = fs->lfnbuf[si++]; /* Get an LFN character (UTF-16) */
- if (hs == 0 && IsSurrogate(wc)) { /* Is it a surrogate? */
- hs = wc; continue; /* Get low surrogate */
- }
- wc = put_utf((DWORD)hs << 16 | wc, &fno->fname[di], FF_LFN_BUF - di); /* Store it in UTF-16 or UTF-8 encoding */
- if (wc == 0) { di = 0; break; } /* Invalid char or buffer overflow? */
- di += wc;
- hs = 0;
- }
- if (hs != 0) di = 0; /* Broken surrogate pair? */
- fno->fname[di] = 0; /* Terminate the LFN (null string means LFN is invalid) */
- }
- }
-
- si = di = 0;
- while (si < 11) { /* Get SFN from SFN entry */
- wc = dp->dir[si++]; /* Get a char */
- if (wc == ' ') continue; /* Skip padding spaces */
- if (wc == RDDEM) wc = DDEM; /* Restore replaced DDEM character */
- if (si == 9 && di < FF_SFN_BUF) fno->altname[di++] = '.'; /* Insert a . if extension is exist */
-#if FF_LFN_UNICODE >= 1 /* Unicode output */
- if (dbc_1st((BYTE)wc) && si != 8 && si != 11 && dbc_2nd(dp->dir[si])) { /* Make a DBC if needed */
- wc = wc << 8 | dp->dir[si++];
- }
- wc = ff_oem2uni(wc, CODEPAGE); /* ANSI/OEM -> Unicode */
- if (wc == 0) { di = 0; break; } /* Wrong char in the current code page? */
- wc = put_utf(wc, &fno->altname[di], FF_SFN_BUF - di); /* Store it in Unicode */
- if (wc == 0) { di = 0; break; } /* Buffer overflow? */
- di += wc;
-#else /* ANSI/OEM output */
- fno->altname[di++] = (TCHAR)wc; /* Store it without any conversion */
-#endif
- }
- fno->altname[di] = 0; /* Terminate the SFN (null string means SFN is invalid) */
-
- if (fno->fname[0] == 0) { /* If LFN is invalid, altname[] needs to be copied to fname[] */
- if (di == 0) { /* If LFN and SFN both are invalid, this object is inaccesible */
- fno->fname[di++] = '?';
- } else {
- for (si = di = 0; fno->altname[si]; si++, di++) { /* Copy altname[] to fname[] with case information */
- wc = (WCHAR)fno->altname[si];
- if (IsUpper(wc) && (dp->dir[DIR_NTres] & ((si >= 9) ? NS_EXT : NS_BODY))) wc += 0x20;
- fno->fname[di] = (TCHAR)wc;
- }
- }
- fno->fname[di] = 0; /* Terminate the LFN */
- if (!dp->dir[DIR_NTres]) fno->altname[0] = 0; /* Altname is not needed if neither LFN nor case info is exist. */
- }
-
-#else /* Non-LFN configuration */
- si = di = 0;
- while (si < 11) { /* Copy name body and extension */
- c = (TCHAR)dp->dir[si++];
- if (c == ' ') continue; /* Skip padding spaces */
- if (c == RDDEM) c = DDEM; /* Restore replaced DDEM character */
- if (si == 9) fno->fname[di++] = '.';/* Insert a . if extension is exist */
- fno->fname[di++] = c;
- }
- fno->fname[di] = 0;
-#endif
-
- fno->fattrib = dp->dir[DIR_Attr]; /* Attribute */
- fno->fsize = ld_dword(dp->dir + DIR_FileSize); /* Size */
- fno->ftime = ld_word(dp->dir + DIR_ModTime + 0); /* Time */
- fno->fdate = ld_word(dp->dir + DIR_ModTime + 2); /* Date */
-}
-
-#endif /* FF_FS_MINIMIZE <= 1 || FF_FS_RPATH >= 2 */
-
-
-
-#if FF_USE_FIND && FF_FS_MINIMIZE <= 1
-/*-----------------------------------------------------------------------*/
-/* Pattern matching */
-/*-----------------------------------------------------------------------*/
-
-static DWORD get_achar ( /* Get a character and advances ptr */
- const TCHAR** ptr /* Pointer to pointer to the ANSI/OEM or Unicode string */
-)
-{
- DWORD chr;
-
-
-#if FF_USE_LFN && FF_LFN_UNICODE >= 1 /* Unicode input */
- chr = tchar2uni(ptr);
- if (chr == 0xFFFFFFFF) chr = 0; /* Wrong UTF encoding is recognized as end of the string */
- chr = ff_wtoupper(chr);
-
-#else /* ANSI/OEM input */
- chr = (BYTE)*(*ptr)++; /* Get a byte */
- if (IsLower(chr)) chr -= 0x20; /* To upper ASCII char */
-#if FF_CODE_PAGE == 0
- if (ExCvt && chr >= 0x80) chr = ExCvt[chr - 0x80]; /* To upper SBCS extended char */
-#elif FF_CODE_PAGE < 900
- if (chr >= 0x80) chr = ExCvt[chr - 0x80]; /* To upper SBCS extended char */
-#endif
-#if FF_CODE_PAGE == 0 || FF_CODE_PAGE >= 900
- if (dbc_1st((BYTE)chr)) { /* Get DBC 2nd byte if needed */
- chr = dbc_2nd((BYTE)**ptr) ? chr << 8 | (BYTE)*(*ptr)++ : 0;
- }
-#endif
-
-#endif
- return chr;
-}
-
-
-static int pattern_matching ( /* 0:not matched, 1:matched */
- const TCHAR* pat, /* Matching pattern */
- const TCHAR* nam, /* String to be tested */
- int skip, /* Number of pre-skip chars (number of ?s) */
- int inf /* Infinite search (* specified) */
-)
-{
- const TCHAR *pp, *np;
- DWORD pc, nc;
- int nm, nx;
-
-
- while (skip--) { /* Pre-skip name chars */
- if (!get_achar(&nam)) return 0; /* Branch mismatched if less name chars */
- }
- if (*pat == 0 && inf) return 1; /* (short circuit) */
-
- do {
- pp = pat; np = nam; /* Top of pattern and name to match */
- for (;;) {
- if (*pp == '?' || *pp == '*') { /* Wildcard? */
- nm = nx = 0;
- do { /* Analyze the wildcard block */
- if (*pp++ == '?') nm++; else nx = 1;
- } while (*pp == '?' || *pp == '*');
- if (pattern_matching(pp, np, nm, nx)) return 1; /* Test new branch (recurs upto number of wildcard blocks in the pattern) */
- nc = *np; break; /* Branch mismatched */
- }
- pc = get_achar(&pp); /* Get a pattern char */
- nc = get_achar(&np); /* Get a name char */
- if (pc != nc) break; /* Branch mismatched? */
- if (pc == 0) return 1; /* Branch matched? (matched at end of both strings) */
- }
- get_achar(&nam); /* nam++ */
- } while (inf && nc); /* Retry until end of name if infinite search is specified */
-
- return 0;
-}
-
-#endif /* FF_USE_FIND && FF_FS_MINIMIZE <= 1 */
-
-
-
-/*-----------------------------------------------------------------------*/
-/* Pick a top segment and create the object name in directory form */
-/*-----------------------------------------------------------------------*/
-
-static FRESULT create_name ( /* FR_OK: successful, FR_INVALID_NAME: could not create */
- DIR* dp, /* Pointer to the directory object */
- const TCHAR** path /* Pointer to pointer to the segment in the path string */
-)
-{
-#if FF_USE_LFN /* LFN configuration */
- BYTE b, cf;
- WCHAR wc, *lfn;
- DWORD uc;
- UINT i, ni, si, di;
- const TCHAR *p;
-
-
- /* Create LFN into LFN working buffer */
- p = *path; lfn = dp->obj.fs->lfnbuf; di = 0;
- for (;;) {
- uc = tchar2uni(&p); /* Get a character */
- if (uc == 0xFFFFFFFF) return FR_INVALID_NAME; /* Invalid code or UTF decode error */
- if (uc >= 0x10000) lfn[di++] = (WCHAR)(uc >> 16); /* Store high surrogate if needed */
- wc = (WCHAR)uc;
- if (wc < ' ' || wc == '/' || wc == '\\') break; /* Break if end of the path or a separator is found */
- if (wc < 0x80 && chk_chr("\"*:<>\?|\x7F", wc)) return FR_INVALID_NAME; /* Reject illegal characters for LFN */
- if (di >= FF_MAX_LFN) return FR_INVALID_NAME; /* Reject too long name */
- lfn[di++] = wc; /* Store the Unicode character */
- }
- while (*p == '/' || *p == '\\') p++; /* Skip duplicated separators if exist */
- *path = p; /* Return pointer to the next segment */
- cf = (wc < ' ') ? NS_LAST : 0; /* Set last segment flag if end of the path */
-
-#if FF_FS_RPATH != 0
- if ((di == 1 && lfn[di - 1] == '.') ||
- (di == 2 && lfn[di - 1] == '.' && lfn[di - 2] == '.')) { /* Is this segment a dot name? */
- lfn[di] = 0;
- for (i = 0; i < 11; i++) { /* Create dot name for SFN entry */
- dp->fn[i] = (i < di) ? '.' : ' ';
- }
- dp->fn[i] = cf | NS_DOT; /* This is a dot entry */
- return FR_OK;
- }
-#endif
- while (di) { /* Snip off trailing spaces and dots if exist */
- wc = lfn[di - 1];
- if (wc != ' ' && wc != '.') break;
- di--;
- }
- lfn[di] = 0; /* LFN is created into the working buffer */
- if (di == 0) return FR_INVALID_NAME; /* Reject null name */
-
- /* Create SFN in directory form */
- for (si = 0; lfn[si] == ' '; si++) ; /* Remove leading spaces */
- if (si > 0 || lfn[si] == '.') cf |= NS_LOSS | NS_LFN; /* Is there any leading space or dot? */
- while (di > 0 && lfn[di - 1] != '.') di--; /* Find last dot (di<=si: no extension) */
-
- mem_set(dp->fn, ' ', 11);
- i = b = 0; ni = 8;
- for (;;) {
- wc = lfn[si++]; /* Get an LFN character */
- if (wc == 0) break; /* Break on end of the LFN */
- if (wc == ' ' || (wc == '.' && si != di)) { /* Remove embedded spaces and dots */
- cf |= NS_LOSS | NS_LFN;
- continue;
- }
-
- if (i >= ni || si == di) { /* End of field? */
- if (ni == 11) { /* Name extension overflow? */
- cf |= NS_LOSS | NS_LFN;
- break;
- }
- if (si != di) cf |= NS_LOSS | NS_LFN; /* Name body overflow? */
- if (si > di) break; /* No name extension? */
- si = di; i = 8; ni = 11; b <<= 2; /* Enter name extension */
- continue;
- }
-
- if (wc >= 0x80) { /* Is this a non-ASCII character? */
- cf |= NS_LFN; /* LFN entry needs to be created */
-#if FF_CODE_PAGE == 0
- if (ExCvt) { /* At SBCS */
- wc = ff_uni2oem(wc, CODEPAGE); /* Unicode ==> ANSI/OEM code */
- if (wc & 0x80) wc = ExCvt[wc & 0x7F]; /* Convert extended character to upper (SBCS) */
- } else { /* At DBCS */
- wc = ff_uni2oem(ff_wtoupper(wc), CODEPAGE); /* Unicode ==> Upper convert ==> ANSI/OEM code */
- }
-#elif FF_CODE_PAGE < 900 /* SBCS cfg */
- wc = ff_uni2oem(wc, CODEPAGE); /* Unicode ==> ANSI/OEM code */
- if (wc & 0x80) wc = ExCvt[wc & 0x7F]; /* Convert extended character to upper (SBCS) */
-#else /* DBCS cfg */
- wc = ff_uni2oem(ff_wtoupper(wc), CODEPAGE); /* Unicode ==> Upper convert ==> ANSI/OEM code */
-#endif
- }
-
- if (wc >= 0x100) { /* Is this a DBC? */
- if (i >= ni - 1) { /* Field overflow? */
- cf |= NS_LOSS | NS_LFN;
- i = ni; continue; /* Next field */
- }
- dp->fn[i++] = (BYTE)(wc >> 8); /* Put 1st byte */
- } else { /* SBC */
- if (wc == 0 || chk_chr("+,;=[]", wc)) { /* Replace illegal characters for SFN if needed */
- wc = '_'; cf |= NS_LOSS | NS_LFN;/* Lossy conversion */
- } else {
- if (IsUpper(wc)) { /* ASCII upper case? */
- b |= 2;
- }
- if (IsLower(wc)) { /* ASCII lower case? */
- b |= 1; wc -= 0x20;
- }
- }
- }
- dp->fn[i++] = (BYTE)wc;
- }
-
- if (dp->fn[0] == DDEM) dp->fn[0] = RDDEM; /* If the first character collides with DDEM, replace it with RDDEM */
-
- if (ni == 8) b <<= 2; /* Shift capital flags if no extension */
- if ((b & 0x0C) == 0x0C || (b & 0x03) == 0x03) cf |= NS_LFN; /* LFN entry needs to be created if composite capitals */
- if (!(cf & NS_LFN)) { /* When LFN is in 8.3 format without extended character, NT flags are created */
- if (b & 0x01) cf |= NS_EXT; /* NT flag (Extension has small capital letters only) */
- if (b & 0x04) cf |= NS_BODY; /* NT flag (Body has small capital letters only) */
- }
-
- dp->fn[NSFLAG] = cf; /* SFN is created into dp->fn[] */
-
- return FR_OK;
-
-
-#else /* FF_USE_LFN : Non-LFN configuration */
- BYTE c, d, *sfn;
- UINT ni, si, i;
- const char *p;
-
- /* Create file name in directory form */
- p = *path; sfn = dp->fn;
- mem_set(sfn, ' ', 11);
- si = i = 0; ni = 8;
-#if FF_FS_RPATH != 0
- if (p[si] == '.') { /* Is this a dot entry? */
- for (;;) {
- c = (BYTE)p[si++];
- if (c != '.' || si >= 3) break;
- sfn[i++] = c;
- }
- if (c != '/' && c != '\\' && c > ' ') return FR_INVALID_NAME;
- *path = p + si; /* Return pointer to the next segment */
- sfn[NSFLAG] = (c <= ' ') ? NS_LAST | NS_DOT : NS_DOT; /* Set last segment flag if end of the path */
- return FR_OK;
- }
-#endif
- for (;;) {
- c = (BYTE)p[si++]; /* Get a byte */
- if (c <= ' ') break; /* Break if end of the path name */
- if (c == '/' || c == '\\') { /* Break if a separator is found */
- while (p[si] == '/' || p[si] == '\\') si++; /* Skip duplicated separator if exist */
- break;
- }
- if (c == '.' || i >= ni) { /* End of body or field overflow? */
- if (ni == 11 || c != '.') return FR_INVALID_NAME; /* Field overflow or invalid dot? */
- i = 8; ni = 11; /* Enter file extension field */
- continue;
- }
-#if FF_CODE_PAGE == 0
- if (ExCvt && c >= 0x80) { /* Is SBC extended character? */
- c = ExCvt[c & 0x7F]; /* To upper SBC extended character */
- }
-#elif FF_CODE_PAGE < 900
- if (c >= 0x80) { /* Is SBC extended character? */
- c = ExCvt[c & 0x7F]; /* To upper SBC extended character */
- }
-#endif
- if (dbc_1st(c)) { /* Check if it is a DBC 1st byte */
- d = (BYTE)p[si++]; /* Get 2nd byte */
- if (!dbc_2nd(d) || i >= ni - 1) return FR_INVALID_NAME; /* Reject invalid DBC */
- sfn[i++] = c;
- sfn[i++] = d;
- } else { /* SBC */
- if (chk_chr("\"*+,:;<=>\?[]|\x7F", c)) return FR_INVALID_NAME; /* Reject illegal chrs for SFN */
- if (IsLower(c)) c -= 0x20; /* To upper */
- sfn[i++] = c;
- }
- }
- *path = p + si; /* Return pointer to the next segment */
- if (i == 0) return FR_INVALID_NAME; /* Reject nul string */
-
- if (sfn[0] == DDEM) sfn[0] = RDDEM; /* If the first character collides with DDEM, replace it with RDDEM */
- sfn[NSFLAG] = (c <= ' ') ? NS_LAST : 0; /* Set last segment flag if end of the path */
-
- return FR_OK;
-#endif /* FF_USE_LFN */
-}
-
-
-
-
-/*-----------------------------------------------------------------------*/
-/* Follow a file path */
-/*-----------------------------------------------------------------------*/
-
-static FRESULT follow_path ( /* FR_OK(0): successful, !=0: error code */
- DIR* dp, /* Directory object to return last directory and found object */
- const TCHAR* path /* Full-path string to find a file or directory */
-)
-{
- FRESULT res;
- BYTE ns;
- FATFS *fs = dp->obj.fs;
-
-
-#if FF_FS_RPATH != 0
- if (*path != '/' && *path != '\\') { /* Without heading separator */
- dp->obj.sclust = fs->cdir; /* Start from current directory */
- } else
-#endif
- { /* With heading separator */
- while (*path == '/' || *path == '\\') path++; /* Strip heading separator */
- dp->obj.sclust = 0; /* Start from root directory */
- }
-#if FF_FS_EXFAT
- dp->obj.n_frag = 0; /* Invalidate last fragment counter of the object */
-#if FF_FS_RPATH != 0
- if (fs->fs_type == FS_EXFAT && dp->obj.sclust) { /* exFAT: Retrieve the sub-directory's status */
- DIR dj;
-
- dp->obj.c_scl = fs->cdc_scl;
- dp->obj.c_size = fs->cdc_size;
- dp->obj.c_ofs = fs->cdc_ofs;
- res = load_obj_xdir(&dj, &dp->obj);
- if (res != FR_OK) return res;
- dp->obj.objsize = ld_dword(fs->dirbuf + XDIR_FileSize);
- dp->obj.stat = fs->dirbuf[XDIR_GenFlags] & 2;
- }
-#endif
-#endif
-
- if ((UINT)*path < ' ') { /* Null path name is the origin directory itself */
- dp->fn[NSFLAG] = NS_NONAME;
- res = dir_sdi(dp, 0);
-
- } else { /* Follow path */
- for (;;) {
- res = create_name(dp, &path); /* Get a segment name of the path */
- if (res != FR_OK) break;
- res = dir_find(dp); /* Find an object with the segment name */
- ns = dp->fn[NSFLAG];
- if (res != FR_OK) { /* Failed to find the object */
- if (res == FR_NO_FILE) { /* Object is not found */
- if (FF_FS_RPATH && (ns & NS_DOT)) { /* If dot entry is not exist, stay there */
- if (!(ns & NS_LAST)) continue; /* Continue to follow if not last segment */
- dp->fn[NSFLAG] = NS_NONAME;
- res = FR_OK;
- } else { /* Could not find the object */
- if (!(ns & NS_LAST)) res = FR_NO_PATH; /* Adjust error code if not last segment */
- }
- }
- break;
- }
- if (ns & NS_LAST) break; /* Last segment matched. Function completed. */
- /* Get into the sub-directory */
- if (!(dp->obj.attr & AM_DIR)) { /* It is not a sub-directory and cannot follow */
- res = FR_NO_PATH; break;
- }
-#if FF_FS_EXFAT
- if (fs->fs_type == FS_EXFAT) { /* Save containing directory information for next dir */
- dp->obj.c_scl = dp->obj.sclust;
- dp->obj.c_size = ((DWORD)dp->obj.objsize & 0xFFFFFF00) | dp->obj.stat;
- dp->obj.c_ofs = dp->blk_ofs;
- init_alloc_info(fs, &dp->obj); /* Open next directory */
- } else
-#endif
- {
- dp->obj.sclust = ld_clust(fs, fs->win + dp->dptr % SS(fs)); /* Open next directory */
- }
- }
- }
-
- return res;
-}
-
-
-
-
-/*-----------------------------------------------------------------------*/
-/* Get logical drive number from path name */
-/*-----------------------------------------------------------------------*/
-
-static int get_ldnumber ( /* Returns logical drive number (-1:invalid drive number or null pointer) */
- const TCHAR** path /* Pointer to pointer to the path name */
-)
-{
- const TCHAR *tp, *tt;
- TCHAR tc;
- int i, vol = -1;
-#if FF_STR_VOLUME_ID /* Find string volume ID */
- const char *sp;
- char c;
-#endif
-
- tt = tp = *path;
- if (!tp) return vol; /* Invalid path name? */
- do tc = *tt++; while ((UINT)tc >= (FF_USE_LFN ? ' ' : '!') && tc != ':'); /* Find a colon in the path */
-
- if (tc == ':') { /* DOS/Windows style volume ID? */
- i = FF_VOLUMES;
- if (IsDigit(*tp) && tp + 2 == tt) { /* Is there a numeric volume ID + colon? */
- i = (int)*tp - '0'; /* Get the LD number */
- }
-#if FF_STR_VOLUME_ID == 1 /* Arbitrary string is enabled */
- else {
- i = 0;
- do {
- sp = VolumeStr[i]; tp = *path; /* This string volume ID and path name */
- do { /* Compare the volume ID with path name */
- c = *sp++; tc = *tp++;
- if (IsLower(c)) c -= 0x20;
- if (IsLower(tc)) tc -= 0x20;
- } while (c && (TCHAR)c == tc);
- } while ((c || tp != tt) && ++i < FF_VOLUMES); /* Repeat for each id until pattern match */
- }
-#endif
- if (i < FF_VOLUMES) { /* If a volume ID is found, get the drive number and strip it */
- vol = i; /* Drive number */
- *path = tt; /* Snip the drive prefix off */
- }
- return vol;
- }
-#if FF_STR_VOLUME_ID == 2 /* Unix style volume ID is enabled */
- if (*tp == '/') {
- i = 0;
- do {
- sp = VolumeStr[i]; tp = *path; /* This string volume ID and path name */
- do { /* Compare the volume ID with path name */
- c = *sp++; tc = *(++tp);
- if (IsLower(c)) c -= 0x20;
- if (IsLower(tc)) tc -= 0x20;
- } while (c && (TCHAR)c == tc);
- } while ((c || (tc != '/' && (UINT)tc >= (FF_USE_LFN ? ' ' : '!'))) && ++i < FF_VOLUMES); /* Repeat for each ID until pattern match */
- if (i < FF_VOLUMES) { /* If a volume ID is found, get the drive number and strip it */
- vol = i; /* Drive number */
- *path = tp; /* Snip the drive prefix off */
- return vol;
- }
- }
-#endif
- /* No drive prefix is found */
-#if FF_FS_RPATH != 0
- vol = CurrVol; /* Default drive is current drive */
-#else
- vol = 0; /* Default drive is 0 */
-#endif
- return vol; /* Return the default drive */
-}
-
-
-
-
-/*-----------------------------------------------------------------------*/
-/* Load a sector and check if it is an FAT VBR */
-/*-----------------------------------------------------------------------*/
-
-static BYTE check_fs ( /* 0:FAT, 1:exFAT, 2:Valid BS but not FAT, 3:Not a BS, 4:Disk error */
- FATFS* fs, /* Filesystem object */
- DWORD sect /* Sector# (lba) to load and check if it is an FAT-VBR or not */
-)
-{
- fs->wflag = 0; fs->winsect = 0xFFFFFFFF; /* Invaidate window */
- if (move_window(fs, sect) != FR_OK) return 4; /* Load boot record */
-
- if (ld_word(fs->win + BS_55AA) != 0xAA55) return 3; /* Check boot record signature (always here regardless of the sector size) */
-
-#if FF_FS_EXFAT
- if (!mem_cmp(fs->win + BS_JmpBoot, "\xEB\x76\x90" "EXFAT ", 11)) return 1; /* Check if exFAT VBR */
-#endif
- if (fs->win[BS_JmpBoot] == 0xE9 || fs->win[BS_JmpBoot] == 0xEB || fs->win[BS_JmpBoot] == 0xE8) { /* Valid JumpBoot code? */
- if (!mem_cmp(fs->win + BS_FilSysType, "FAT", 3)) return 0; /* Is it an FAT VBR? */
- if (!mem_cmp(fs->win + BS_FilSysType32, "FAT32", 5)) return 0; /* Is it an FAT32 VBR? */
- }
- return 2; /* Valid BS but not FAT */
-}
-
-
-
-
-/*-----------------------------------------------------------------------*/
-/* Determine logical drive number and mount the volume if needed */
-/*-----------------------------------------------------------------------*/
-
-static FRESULT find_volume ( /* FR_OK(0): successful, !=0: an error occurred */
- const TCHAR** path, /* Pointer to pointer to the path name (drive number) */
- FATFS** rfs, /* Pointer to pointer to the found filesystem object */
- BYTE mode /* !=0: Check write protection for write access */
-)
-{
- BYTE fmt, *pt;
- int vol;
- DSTATUS stat;
- DWORD bsect, fasize, tsect, sysect, nclst, szbfat, br[4];
- WORD nrsv;
- FATFS *fs;
- UINT i;
-
-
- /* Get logical drive number */
- *rfs = 0;
- vol = get_ldnumber(path);
- if (vol < 0) return FR_INVALID_DRIVE;
-
- /* Check if the filesystem object is valid or not */
- fs = FatFs[vol]; /* Get pointer to the filesystem object */
- if (!fs) return FR_NOT_ENABLED; /* Is the filesystem object available? */
-#if FF_FS_REENTRANT
- if (!lock_fs(fs)) return FR_TIMEOUT; /* Lock the volume */
-#endif
- *rfs = fs; /* Return pointer to the filesystem object */
-
- mode &= (BYTE)~FA_READ; /* Desired access mode, write access or not */
- if (fs->fs_type != 0) { /* If the volume has been mounted */
- stat = disk_status(fs->pdrv);
- if (!(stat & STA_NOINIT)) { /* and the physical drive is kept initialized */
- if (!FF_FS_READONLY && mode && (stat & STA_PROTECT)) { /* Check write protection if needed */
- return FR_WRITE_PROTECTED;
- }
- return FR_OK; /* The filesystem object is valid */
- }
- }
-
- /* The filesystem object is not valid. */
- /* Following code attempts to mount the volume. (analyze BPB and initialize the filesystem object) */
-
- fs->fs_type = 0; /* Clear the filesystem object */
- fs->pdrv = LD2PD(vol); /* Bind the logical drive and a physical drive */
- stat = disk_initialize(fs->pdrv); /* Initialize the physical drive */
- if (stat & STA_NOINIT) { /* Check if the initialization succeeded */
- return FR_NOT_READY; /* Failed to initialize due to no medium or hard error */
- }
- if (!FF_FS_READONLY && mode && (stat & STA_PROTECT)) { /* Check disk write protection if needed */
- return FR_WRITE_PROTECTED;
- }
-#if FF_MAX_SS != FF_MIN_SS /* Get sector size (multiple sector size cfg only) */
- if (disk_ioctl(fs->pdrv, GET_SECTOR_SIZE, &SS(fs)) != RES_OK) return FR_DISK_ERR;
- if (SS(fs) > FF_MAX_SS || SS(fs) < FF_MIN_SS || (SS(fs) & (SS(fs) - 1))) return FR_DISK_ERR;
-#endif
-
- /* Find an FAT partition on the drive. Supports only generic partitioning rules, FDISK and SFD. */
- bsect = 0;
- fmt = check_fs(fs, bsect); /* Load sector 0 and check if it is an FAT-VBR as SFD */
- if (fmt == 2 || (fmt < 2 && LD2PT(vol) != 0)) { /* Not an FAT-VBR or forced partition number */
- for (i = 0; i < 4; i++) { /* Get partition offset */
- pt = fs->win + (MBR_Table + i * SZ_PTE);
- br[i] = pt[PTE_System] ? ld_dword(pt + PTE_StLba) : 0;
- }
- i = LD2PT(vol); /* Partition number: 0:auto, 1-4:forced */
- if (i != 0) i--;
- do { /* Find an FAT volume */
- bsect = br[i];
- fmt = bsect ? check_fs(fs, bsect) : 3; /* Check the partition */
- } while (LD2PT(vol) == 0 && fmt >= 2 && ++i < 4);
- }
- if (fmt == 4) return FR_DISK_ERR; /* An error occured in the disk I/O layer */
- if (fmt >= 2) return FR_NO_FILESYSTEM; /* No FAT volume is found */
-
- /* An FAT volume is found (bsect). Following code initializes the filesystem object */
-
-#if FF_FS_EXFAT
- if (fmt == 1) {
- QWORD maxlba;
-
- for (i = BPB_ZeroedEx; i < BPB_ZeroedEx + 53 && fs->win[i] == 0; i++) ; /* Check zero filler */
- if (i < BPB_ZeroedEx + 53) return FR_NO_FILESYSTEM;
-
- if (ld_word(fs->win + BPB_FSVerEx) != 0x100) return FR_NO_FILESYSTEM; /* Check exFAT version (must be version 1.0) */
-
- if (1 << fs->win[BPB_BytsPerSecEx] != SS(fs)) { /* (BPB_BytsPerSecEx must be equal to the physical sector size) */
- return FR_NO_FILESYSTEM;
- }
-
- maxlba = ld_qword(fs->win + BPB_TotSecEx) + bsect; /* Last LBA + 1 of the volume */
- if (maxlba >= 0x100000000) return FR_NO_FILESYSTEM; /* (It cannot be handled in 32-bit LBA) */
-
- fs->fsize = ld_dword(fs->win + BPB_FatSzEx); /* Number of sectors per FAT */
-
- fs->n_fats = fs->win[BPB_NumFATsEx]; /* Number of FATs */
- if (fs->n_fats != 1) return FR_NO_FILESYSTEM; /* (Supports only 1 FAT) */
-
- fs->csize = 1 << fs->win[BPB_SecPerClusEx]; /* Cluster size */
- if (fs->csize == 0) return FR_NO_FILESYSTEM; /* (Must be 1..32768) */
-
- nclst = ld_dword(fs->win + BPB_NumClusEx); /* Number of clusters */
- if (nclst > MAX_EXFAT) return FR_NO_FILESYSTEM; /* (Too many clusters) */
- fs->n_fatent = nclst + 2;
-
- /* Boundaries and Limits */
- fs->volbase = bsect;
- fs->database = bsect + ld_dword(fs->win + BPB_DataOfsEx);
- fs->fatbase = bsect + ld_dword(fs->win + BPB_FatOfsEx);
- if (maxlba < (QWORD)fs->database + nclst * fs->csize) return FR_NO_FILESYSTEM; /* (Volume size must not be smaller than the size requiered) */
- fs->dirbase = ld_dword(fs->win + BPB_RootClusEx);
-
- /* Check if bitmap location is in assumption (at the first cluster) */
- if (move_window(fs, clst2sect(fs, fs->dirbase)) != FR_OK) return FR_DISK_ERR;
- for (i = 0; i < SS(fs); i += SZDIRE) {
- if (fs->win[i] == 0x81 && ld_dword(fs->win + i + 20) == 2) break; /* 81 entry with cluster #2? */
- }
- if (i == SS(fs)) return FR_NO_FILESYSTEM;
-#if !FF_FS_READONLY
- fs->last_clst = fs->free_clst = 0xFFFFFFFF; /* Initialize cluster allocation information */
-#endif
- fmt = FS_EXFAT; /* FAT sub-type */
- } else
-#endif /* FF_FS_EXFAT */
- {
- if (ld_word(fs->win + BPB_BytsPerSec) != SS(fs)) return FR_NO_FILESYSTEM; /* (BPB_BytsPerSec must be equal to the physical sector size) */
-
- fasize = ld_word(fs->win + BPB_FATSz16); /* Number of sectors per FAT */
- if (fasize == 0) fasize = ld_dword(fs->win + BPB_FATSz32);
- fs->fsize = fasize;
-
- fs->n_fats = fs->win[BPB_NumFATs]; /* Number of FATs */
- if (fs->n_fats != 1 && fs->n_fats != 2) return FR_NO_FILESYSTEM; /* (Must be 1 or 2) */
- fasize *= fs->n_fats; /* Number of sectors for FAT area */
-
- fs->csize = fs->win[BPB_SecPerClus]; /* Cluster size */
- if (fs->csize == 0 || (fs->csize & (fs->csize - 1))) return FR_NO_FILESYSTEM; /* (Must be power of 2) */
-
- fs->n_rootdir = ld_word(fs->win + BPB_RootEntCnt); /* Number of root directory entries */
- if (fs->n_rootdir % (SS(fs) / SZDIRE)) return FR_NO_FILESYSTEM; /* (Must be sector aligned) */
-
- tsect = ld_word(fs->win + BPB_TotSec16); /* Number of sectors on the volume */
- if (tsect == 0) tsect = ld_dword(fs->win + BPB_TotSec32);
-
- nrsv = ld_word(fs->win + BPB_RsvdSecCnt); /* Number of reserved sectors */
- if (nrsv == 0) return FR_NO_FILESYSTEM; /* (Must not be 0) */
-
- /* Determine the FAT sub type */
- sysect = nrsv + fasize + fs->n_rootdir / (SS(fs) / SZDIRE); /* RSV + FAT + DIR */
- if (tsect < sysect) return FR_NO_FILESYSTEM; /* (Invalid volume size) */
- nclst = (tsect - sysect) / fs->csize; /* Number of clusters */
- if (nclst == 0) return FR_NO_FILESYSTEM; /* (Invalid volume size) */
- fmt = 0;
- if (nclst <= MAX_FAT32) fmt = FS_FAT32;
- if (nclst <= MAX_FAT16) fmt = FS_FAT16;
- if (nclst <= MAX_FAT12) fmt = FS_FAT12;
- if (fmt == 0) return FR_NO_FILESYSTEM;
-
- /* Boundaries and Limits */
- fs->n_fatent = nclst + 2; /* Number of FAT entries */
- fs->volbase = bsect; /* Volume start sector */
- fs->fatbase = bsect + nrsv; /* FAT start sector */
- fs->database = bsect + sysect; /* Data start sector */
- if (fmt == FS_FAT32) {
- if (ld_word(fs->win + BPB_FSVer32) != 0) return FR_NO_FILESYSTEM; /* (Must be FAT32 revision 0.0) */
- if (fs->n_rootdir != 0) return FR_NO_FILESYSTEM; /* (BPB_RootEntCnt must be 0) */
- fs->dirbase = ld_dword(fs->win + BPB_RootClus32); /* Root directory start cluster */
- szbfat = fs->n_fatent * 4; /* (Needed FAT size) */
- } else {
- if (fs->n_rootdir == 0) return FR_NO_FILESYSTEM; /* (BPB_RootEntCnt must not be 0) */
- fs->dirbase = fs->fatbase + fasize; /* Root directory start sector */
- szbfat = (fmt == FS_FAT16) ? /* (Needed FAT size) */
- fs->n_fatent * 2 : fs->n_fatent * 3 / 2 + (fs->n_fatent & 1);
- }
- if (fs->fsize < (szbfat + (SS(fs) - 1)) / SS(fs)) return FR_NO_FILESYSTEM; /* (BPB_FATSz must not be less than the size needed) */
-
-#if !FF_FS_READONLY
- /* Get FSInfo if available */
- fs->last_clst = fs->free_clst = 0xFFFFFFFF; /* Initialize cluster allocation information */
- fs->fsi_flag = 0x80;
-#if (FF_FS_NOFSINFO & 3) != 3
- if (fmt == FS_FAT32 /* Allow to update FSInfo only if BPB_FSInfo32 == 1 */
- && ld_word(fs->win + BPB_FSInfo32) == 1
- && move_window(fs, bsect + 1) == FR_OK)
- {
- fs->fsi_flag = 0;
- if (ld_word(fs->win + BS_55AA) == 0xAA55 /* Load FSInfo data if available */
- && ld_dword(fs->win + FSI_LeadSig) == 0x41615252
- && ld_dword(fs->win + FSI_StrucSig) == 0x61417272)
- {
-#if (FF_FS_NOFSINFO & 1) == 0
- fs->free_clst = ld_dword(fs->win + FSI_Free_Count);
-#endif
-#if (FF_FS_NOFSINFO & 2) == 0
- fs->last_clst = ld_dword(fs->win + FSI_Nxt_Free);
-#endif
- }
- }
-#endif /* (FF_FS_NOFSINFO & 3) != 3 */
-#endif /* !FF_FS_READONLY */
- }
-
- fs->fs_type = fmt; /* FAT sub-type */
- fs->id = ++Fsid; /* Volume mount ID */
-#if FF_USE_LFN == 1
- fs->lfnbuf = LfnBuf; /* Static LFN working buffer */
-#if FF_FS_EXFAT
- fs->dirbuf = DirBuf; /* Static directory block scratchpad buuffer */
-#endif
-#endif
-#if FF_FS_RPATH != 0
- fs->cdir = 0; /* Initialize current directory */
-#endif
-#if FF_FS_LOCK != 0 /* Clear file lock semaphores */
- clear_lock(fs);
-#endif
- return FR_OK;
-}
-
-
-
-
-/*-----------------------------------------------------------------------*/
-/* Check if the file/directory object is valid or not */
-/*-----------------------------------------------------------------------*/
-
-static FRESULT validate ( /* Returns FR_OK or FR_INVALID_OBJECT */
- FFOBJID* obj, /* Pointer to the FFOBJID, the 1st member in the FIL/DIR object, to check validity */
- FATFS** rfs /* Pointer to pointer to the owner filesystem object to return */
-)
-{
- FRESULT res = FR_INVALID_OBJECT;
-
-
- if (obj && obj->fs && obj->fs->fs_type && obj->id == obj->fs->id) { /* Test if the object is valid */
-#if FF_FS_REENTRANT
- if (lock_fs(obj->fs)) { /* Obtain the filesystem object */
- if (!(disk_status(obj->fs->pdrv) & STA_NOINIT)) { /* Test if the phsical drive is kept initialized */
- res = FR_OK;
- } else {
- unlock_fs(obj->fs, FR_OK);
- }
- } else {
- res = FR_TIMEOUT;
- }
-#else
- if (!(disk_status(obj->fs->pdrv) & STA_NOINIT)) { /* Test if the phsical drive is kept initialized */
- res = FR_OK;
- }
-#endif
- }
- *rfs = (res == FR_OK) ? obj->fs : 0; /* Corresponding filesystem object */
- return res;
-}
-
-
-
-
-/*---------------------------------------------------------------------------
-
- Public Functions (FatFs API)
-
-----------------------------------------------------------------------------*/
-
-
-
-/*-----------------------------------------------------------------------*/
-/* Mount/Unmount a Logical Drive */
-/*-----------------------------------------------------------------------*/
-
-FRESULT f_mount (
- FATFS* fs, /* Pointer to the filesystem object (NULL:unmount)*/
- const TCHAR* path, /* Logical drive number to be mounted/unmounted */
- BYTE opt /* Mode option 0:Do not mount (delayed mount), 1:Mount immediately */
-)
-{
- FATFS *cfs;
- int vol;
- FRESULT res;
- const TCHAR *rp = path;
-
-
- /* Get logical drive number */
- vol = get_ldnumber(&rp);
- if (vol < 0) return FR_INVALID_DRIVE;
- cfs = FatFs[vol]; /* Pointer to fs object */
-
- if (cfs) {
-#if FF_FS_LOCK != 0
- clear_lock(cfs);
-#endif
-#if FF_FS_REENTRANT /* Discard sync object of the current volume */
- if (!ff_del_syncobj(cfs->sobj)) return FR_INT_ERR;
-#endif
- cfs->fs_type = 0; /* Clear old fs object */
- }
-
- if (fs) {
- fs->fs_type = 0; /* Clear new fs object */
-#if FF_FS_REENTRANT /* Create sync object for the new volume */
- if (!ff_cre_syncobj((BYTE)vol, &fs->sobj)) return FR_INT_ERR;
-#endif
- }
- FatFs[vol] = fs; /* Register new fs object */
-
- if (opt == 0) return FR_OK; /* Do not mount now, it will be mounted later */
-
- res = find_volume(&path, &fs, 0); /* Force mounted the volume */
- LEAVE_FF(fs, res);
-}
-
-
-
-
-/*-----------------------------------------------------------------------*/
-/* Open or Create a File */
-/*-----------------------------------------------------------------------*/
-
-FRESULT f_open (
- FIL* fp, /* Pointer to the blank file object */
- const TCHAR* path, /* Pointer to the file name */
- BYTE mode /* Access mode and file open mode flags */
-)
-{
- FRESULT res;
- DIR dj;
- FATFS *fs;
-#if !FF_FS_READONLY
- DWORD dw, cl, bcs, clst, sc;
- FSIZE_t ofs;
-#endif
- DEF_NAMBUF
-
-
- if (!fp) return FR_INVALID_OBJECT;
-
- /* Get logical drive number */
- mode &= FF_FS_READONLY ? FA_READ : FA_READ | FA_WRITE | FA_CREATE_ALWAYS | FA_CREATE_NEW | FA_OPEN_ALWAYS | FA_OPEN_APPEND;
- res = find_volume(&path, &fs, mode);
- if (res == FR_OK) {
- dj.obj.fs = fs;
- INIT_NAMBUF(fs);
- res = follow_path(&dj, path); /* Follow the file path */
-#if !FF_FS_READONLY /* Read/Write configuration */
- if (res == FR_OK) {
- if (dj.fn[NSFLAG] & NS_NONAME) { /* Origin directory itself? */
- res = FR_INVALID_NAME;
- }
-#if FF_FS_LOCK != 0
- else {
- res = chk_lock(&dj, (mode & ~FA_READ) ? 1 : 0); /* Check if the file can be used */
- }
-#endif
- }
- /* Create or Open a file */
- if (mode & (FA_CREATE_ALWAYS | FA_OPEN_ALWAYS | FA_CREATE_NEW)) {
- if (res != FR_OK) { /* No file, create new */
- if (res == FR_NO_FILE) { /* There is no file to open, create a new entry */
-#if FF_FS_LOCK != 0
- res = enq_lock() ? dir_register(&dj) : FR_TOO_MANY_OPEN_FILES;
-#else
- res = dir_register(&dj);
-#endif
- }
- mode |= FA_CREATE_ALWAYS; /* File is created */
- }
- else { /* Any object with the same name is already existing */
- if (dj.obj.attr & (AM_RDO | AM_DIR)) { /* Cannot overwrite it (R/O or DIR) */
- res = FR_DENIED;
- } else {
- if (mode & FA_CREATE_NEW) res = FR_EXIST; /* Cannot create as new file */
- }
- }
- if (res == FR_OK && (mode & FA_CREATE_ALWAYS)) { /* Truncate the file if overwrite mode */
-#if FF_FS_EXFAT
- if (fs->fs_type == FS_EXFAT) {
- /* Get current allocation info */
- fp->obj.fs = fs;
- init_alloc_info(fs, &fp->obj);
- /* Set directory entry block initial state */
- mem_set(fs->dirbuf + 2, 0, 30); /* Clear 85 entry except for NumSec */
- mem_set(fs->dirbuf + 38, 0, 26); /* Clear C0 entry except for NumName and NameHash */
- fs->dirbuf[XDIR_Attr] = AM_ARC;
- st_dword(fs->dirbuf + XDIR_CrtTime, GET_FATTIME());
- fs->dirbuf[XDIR_GenFlags] = 1;
- res = store_xdir(&dj);
- if (res == FR_OK && fp->obj.sclust != 0) { /* Remove the cluster chain if exist */
- res = remove_chain(&fp->obj, fp->obj.sclust, 0);
- fs->last_clst = fp->obj.sclust - 1; /* Reuse the cluster hole */
- }
- } else
-#endif
- {
- /* Set directory entry initial state */
- cl = ld_clust(fs, dj.dir); /* Get current cluster chain */
- st_dword(dj.dir + DIR_CrtTime, GET_FATTIME()); /* Set created time */
- dj.dir[DIR_Attr] = AM_ARC; /* Reset attribute */
- st_clust(fs, dj.dir, 0); /* Reset file allocation info */
- st_dword(dj.dir + DIR_FileSize, 0);
- fs->wflag = 1;
- if (cl != 0) { /* Remove the cluster chain if exist */
- dw = fs->winsect;
- res = remove_chain(&dj.obj, cl, 0);
- if (res == FR_OK) {
- res = move_window(fs, dw);
- fs->last_clst = cl - 1; /* Reuse the cluster hole */
- }
- }
- }
- }
- }
- else { /* Open an existing file */
- if (res == FR_OK) { /* Is the object exsiting? */
- if (dj.obj.attr & AM_DIR) { /* File open against a directory */
- res = FR_NO_FILE;
- } else {
- if ((mode & FA_WRITE) && (dj.obj.attr & AM_RDO)) { /* Write mode open against R/O file */
- res = FR_DENIED;
- }
- }
- }
- }
- if (res == FR_OK) {
- if (mode & FA_CREATE_ALWAYS) mode |= FA_MODIFIED; /* Set file change flag if created or overwritten */
- fp->dir_sect = fs->winsect; /* Pointer to the directory entry */
- fp->dir_ptr = dj.dir;
-#if FF_FS_LOCK != 0
- fp->obj.lockid = inc_lock(&dj, (mode & ~FA_READ) ? 1 : 0); /* Lock the file for this session */
- if (fp->obj.lockid == 0) res = FR_INT_ERR;
-#endif
- }
-#else /* R/O configuration */
- if (res == FR_OK) {
- if (dj.fn[NSFLAG] & NS_NONAME) { /* Is it origin directory itself? */
- res = FR_INVALID_NAME;
- } else {
- if (dj.obj.attr & AM_DIR) { /* Is it a directory? */
- res = FR_NO_FILE;
- }
- }
- }
-#endif
-
- if (res == FR_OK) {
-#if FF_FS_EXFAT
- if (fs->fs_type == FS_EXFAT) {
- fp->obj.c_scl = dj.obj.sclust; /* Get containing directory info */
- fp->obj.c_size = ((DWORD)dj.obj.objsize & 0xFFFFFF00) | dj.obj.stat;
- fp->obj.c_ofs = dj.blk_ofs;
- init_alloc_info(fs, &fp->obj);
- } else
-#endif
- {
- fp->obj.sclust = ld_clust(fs, dj.dir); /* Get object allocation info */
- fp->obj.objsize = ld_dword(dj.dir + DIR_FileSize);
- }
-#if FF_USE_FASTSEEK
- fp->cltbl = 0; /* Disable fast seek mode */
-#endif
- fp->obj.fs = fs; /* Validate the file object */
- fp->obj.id = fs->id;
- fp->flag = mode; /* Set file access mode */
- fp->err = 0; /* Clear error flag */
- fp->sect = 0; /* Invalidate current data sector */
- fp->fptr = 0; /* Set file pointer top of the file */
-#if !FF_FS_READONLY
-#if !FF_FS_TINY
- mem_set(fp->buf, 0, FF_MAX_SS); /* Clear sector buffer */
-#endif
- if ((mode & FA_SEEKEND) && fp->obj.objsize > 0) { /* Seek to end of file if FA_OPEN_APPEND is specified */
- fp->fptr = fp->obj.objsize; /* Offset to seek */
- bcs = (DWORD)fs->csize * SS(fs); /* Cluster size in byte */
- clst = fp->obj.sclust; /* Follow the cluster chain */
- for (ofs = fp->obj.objsize; res == FR_OK && ofs > bcs; ofs -= bcs) {
- clst = get_fat(&fp->obj, clst);
- if (clst <= 1) res = FR_INT_ERR;
- if (clst == 0xFFFFFFFF) res = FR_DISK_ERR;
- }
- fp->clust = clst;
- if (res == FR_OK && ofs % SS(fs)) { /* Fill sector buffer if not on the sector boundary */
- if ((sc = clst2sect(fs, clst)) == 0) {
- res = FR_INT_ERR;
- } else {
- fp->sect = sc + (DWORD)(ofs / SS(fs));
-#if !FF_FS_TINY
- if (disk_read(fs->pdrv, fp->buf, fp->sect, 1) != RES_OK) res = FR_DISK_ERR;
-#endif
- }
- }
- }
-#endif
- }
-
- FREE_NAMBUF();
- }
-
- if (res != FR_OK) fp->obj.fs = 0; /* Invalidate file object on error */
-
- LEAVE_FF(fs, res);
-}
-
-
-
-
-/*-----------------------------------------------------------------------*/
-/* Read File */
-/*-----------------------------------------------------------------------*/
-
-FRESULT f_read (
- FIL* fp, /* Pointer to the file object */
- void* buff, /* Pointer to data buffer */
- UINT btr, /* Number of bytes to read */
- UINT* br /* Pointer to number of bytes read */
-)
-{
- FRESULT res;
- FATFS *fs;
- DWORD clst, sect;
- FSIZE_t remain;
- UINT rcnt, cc, csect;
- BYTE *rbuff = (BYTE*)buff;
-
-
- *br = 0; /* Clear read byte counter */
- res = validate(&fp->obj, &fs); /* Check validity of the file object */
- if (res != FR_OK || (res = (FRESULT)fp->err) != FR_OK) LEAVE_FF(fs, res); /* Check validity */
- if (!(fp->flag & FA_READ)) LEAVE_FF(fs, FR_DENIED); /* Check access mode */
- remain = fp->obj.objsize - fp->fptr;
- if (btr > remain) btr = (UINT)remain; /* Truncate btr by remaining bytes */
-
- for ( ; btr; /* Repeat until btr bytes read */
- btr -= rcnt, *br += rcnt, rbuff += rcnt, fp->fptr += rcnt) {
- if (fp->fptr % SS(fs) == 0) { /* On the sector boundary? */
- csect = (UINT)(fp->fptr / SS(fs) & (fs->csize - 1)); /* Sector offset in the cluster */
- if (csect == 0) { /* On the cluster boundary? */
- if (fp->fptr == 0) { /* On the top of the file? */
- clst = fp->obj.sclust; /* Follow cluster chain from the origin */
- } else { /* Middle or end of the file */
-#if FF_USE_FASTSEEK
- if (fp->cltbl) {
- clst = clmt_clust(fp, fp->fptr); /* Get cluster# from the CLMT */
- } else
-#endif
- {
- clst = get_fat(&fp->obj, fp->clust); /* Follow cluster chain on the FAT */
- }
- }
- if (clst < 2) ABORT(fs, FR_INT_ERR);
- if (clst == 0xFFFFFFFF) ABORT(fs, FR_DISK_ERR);
- fp->clust = clst; /* Update current cluster */
- }
- sect = clst2sect(fs, fp->clust); /* Get current sector */
- if (sect == 0) ABORT(fs, FR_INT_ERR);
- sect += csect;
- cc = btr / SS(fs); /* When remaining bytes >= sector size, */
- if (cc > 0) { /* Read maximum contiguous sectors directly */
- if (csect + cc > fs->csize) { /* Clip at cluster boundary */
- cc = fs->csize - csect;
- }
- if (disk_read(fs->pdrv, rbuff, sect, cc) != RES_OK) ABORT(fs, FR_DISK_ERR);
-#if !FF_FS_READONLY && FF_FS_MINIMIZE <= 2 /* Replace one of the read sectors with cached data if it contains a dirty sector */
-#if FF_FS_TINY
- if (fs->wflag && fs->winsect - sect < cc) {
- mem_cpy(rbuff + ((fs->winsect - sect) * SS(fs)), fs->win, SS(fs));
- }
-#else
- if ((fp->flag & FA_DIRTY) && fp->sect - sect < cc) {
- mem_cpy(rbuff + ((fp->sect - sect) * SS(fs)), fp->buf, SS(fs));
- }
-#endif
-#endif
- rcnt = SS(fs) * cc; /* Number of bytes transferred */
- continue;
- }
-#if !FF_FS_TINY
- if (fp->sect != sect) { /* Load data sector if not in cache */
-#if !FF_FS_READONLY
- if (fp->flag & FA_DIRTY) { /* Write-back dirty sector cache */
- if (disk_write(fs->pdrv, fp->buf, fp->sect, 1) != RES_OK) ABORT(fs, FR_DISK_ERR);
- fp->flag &= (BYTE)~FA_DIRTY;
- }
-#endif
- if (disk_read(fs->pdrv, fp->buf, sect, 1) != RES_OK) ABORT(fs, FR_DISK_ERR); /* Fill sector cache */
- }
-#endif
- fp->sect = sect;
- }
- rcnt = SS(fs) - (UINT)fp->fptr % SS(fs); /* Number of bytes left in the sector */
- if (rcnt > btr) rcnt = btr; /* Clip it by btr if needed */
-#if FF_FS_TINY
- if (move_window(fs, fp->sect) != FR_OK) ABORT(fs, FR_DISK_ERR); /* Move sector window */
- mem_cpy(rbuff, fs->win + fp->fptr % SS(fs), rcnt); /* Extract partial sector */
-#else
- mem_cpy(rbuff, fp->buf + fp->fptr % SS(fs), rcnt); /* Extract partial sector */
-#endif
- }
-
- LEAVE_FF(fs, FR_OK);
-}
-
-
-
-
-#if !FF_FS_READONLY
-/*-----------------------------------------------------------------------*/
-/* Write File */
-/*-----------------------------------------------------------------------*/
-
-FRESULT f_write (
- FIL* fp, /* Pointer to the file object */
- const void* buff, /* Pointer to the data to be written */
- UINT btw, /* Number of bytes to write */
- UINT* bw /* Pointer to number of bytes written */
-)
-{
- FRESULT res;
- FATFS *fs;
- DWORD clst, sect;
- UINT wcnt, cc, csect;
- const BYTE *wbuff = (const BYTE*)buff;
-
-
- *bw = 0; /* Clear write byte counter */
- res = validate(&fp->obj, &fs); /* Check validity of the file object */
- if (res != FR_OK || (res = (FRESULT)fp->err) != FR_OK) LEAVE_FF(fs, res); /* Check validity */
- if (!(fp->flag & FA_WRITE)) LEAVE_FF(fs, FR_DENIED); /* Check access mode */
-
- /* Check fptr wrap-around (file size cannot reach 4 GiB at FAT volume) */
- if ((!FF_FS_EXFAT || fs->fs_type != FS_EXFAT) && (DWORD)(fp->fptr + btw) < (DWORD)fp->fptr) {
- btw = (UINT)(0xFFFFFFFF - (DWORD)fp->fptr);
- }
-
- for ( ; btw; /* Repeat until all data written */
- btw -= wcnt, *bw += wcnt, wbuff += wcnt, fp->fptr += wcnt, fp->obj.objsize = (fp->fptr > fp->obj.objsize) ? fp->fptr : fp->obj.objsize) {
- if (fp->fptr % SS(fs) == 0) { /* On the sector boundary? */
- csect = (UINT)(fp->fptr / SS(fs)) & (fs->csize - 1); /* Sector offset in the cluster */
- if (csect == 0) { /* On the cluster boundary? */
- if (fp->fptr == 0) { /* On the top of the file? */
- clst = fp->obj.sclust; /* Follow from the origin */
- if (clst == 0) { /* If no cluster is allocated, */
- clst = create_chain(&fp->obj, 0); /* create a new cluster chain */
- }
- } else { /* On the middle or end of the file */
-#if FF_USE_FASTSEEK
- if (fp->cltbl) {
- clst = clmt_clust(fp, fp->fptr); /* Get cluster# from the CLMT */
- } else
-#endif
- {
- clst = create_chain(&fp->obj, fp->clust); /* Follow or stretch cluster chain on the FAT */
- }
- }
- if (clst == 0) break; /* Could not allocate a new cluster (disk full) */
- if (clst == 1) ABORT(fs, FR_INT_ERR);
- if (clst == 0xFFFFFFFF) ABORT(fs, FR_DISK_ERR);
- fp->clust = clst; /* Update current cluster */
- if (fp->obj.sclust == 0) fp->obj.sclust = clst; /* Set start cluster if the first write */
- }
-#if FF_FS_TINY
- if (fs->winsect == fp->sect && sync_window(fs) != FR_OK) ABORT(fs, FR_DISK_ERR); /* Write-back sector cache */
-#else
- if (fp->flag & FA_DIRTY) { /* Write-back sector cache */
- if (disk_write(fs->pdrv, fp->buf, fp->sect, 1) != RES_OK) ABORT(fs, FR_DISK_ERR);
- fp->flag &= (BYTE)~FA_DIRTY;
- }
-#endif
- sect = clst2sect(fs, fp->clust); /* Get current sector */
- if (sect == 0) ABORT(fs, FR_INT_ERR);
- sect += csect;
- cc = btw / SS(fs); /* When remaining bytes >= sector size, */
- if (cc > 0) { /* Write maximum contiguous sectors directly */
- if (csect + cc > fs->csize) { /* Clip at cluster boundary */
- cc = fs->csize - csect;
- }
- if (disk_write(fs->pdrv, wbuff, sect, cc) != RES_OK) ABORT(fs, FR_DISK_ERR);
-#if FF_FS_MINIMIZE <= 2
-#if FF_FS_TINY
- if (fs->winsect - sect < cc) { /* Refill sector cache if it gets invalidated by the direct write */
- mem_cpy(fs->win, wbuff + ((fs->winsect - sect) * SS(fs)), SS(fs));
- fs->wflag = 0;
- }
-#else
- if (fp->sect - sect < cc) { /* Refill sector cache if it gets invalidated by the direct write */
- mem_cpy(fp->buf, wbuff + ((fp->sect - sect) * SS(fs)), SS(fs));
- fp->flag &= (BYTE)~FA_DIRTY;
- }
-#endif
-#endif
- wcnt = SS(fs) * cc; /* Number of bytes transferred */
- continue;
- }
-#if FF_FS_TINY
- if (fp->fptr >= fp->obj.objsize) { /* Avoid silly cache filling on the growing edge */
- if (sync_window(fs) != FR_OK) ABORT(fs, FR_DISK_ERR);
- fs->winsect = sect;
- }
-#else
- if (fp->sect != sect && /* Fill sector cache with file data */
- fp->fptr < fp->obj.objsize &&
- disk_read(fs->pdrv, fp->buf, sect, 1) != RES_OK) {
- ABORT(fs, FR_DISK_ERR);
- }
-#endif
- fp->sect = sect;
- }
- wcnt = SS(fs) - (UINT)fp->fptr % SS(fs); /* Number of bytes left in the sector */
- if (wcnt > btw) wcnt = btw; /* Clip it by btw if needed */
-#if FF_FS_TINY
- if (move_window(fs, fp->sect) != FR_OK) ABORT(fs, FR_DISK_ERR); /* Move sector window */
- mem_cpy(fs->win + fp->fptr % SS(fs), wbuff, wcnt); /* Fit data to the sector */
- fs->wflag = 1;
-#else
- mem_cpy(fp->buf + fp->fptr % SS(fs), wbuff, wcnt); /* Fit data to the sector */
- fp->flag |= FA_DIRTY;
-#endif
- }
-
- fp->flag |= FA_MODIFIED; /* Set file change flag */
-
- LEAVE_FF(fs, FR_OK);
-}
-
-
-
-
-/*-----------------------------------------------------------------------*/
-/* Synchronize the File */
-/*-----------------------------------------------------------------------*/
-
-FRESULT f_sync (
- FIL* fp /* Pointer to the file object */
-)
-{
- FRESULT res;
- FATFS *fs;
- DWORD tm;
- BYTE *dir;
-
-
- res = validate(&fp->obj, &fs); /* Check validity of the file object */
- if (res == FR_OK) {
- if (fp->flag & FA_MODIFIED) { /* Is there any change to the file? */
-#if !FF_FS_TINY
- if (fp->flag & FA_DIRTY) { /* Write-back cached data if needed */
- if (disk_write(fs->pdrv, fp->buf, fp->sect, 1) != RES_OK) LEAVE_FF(fs, FR_DISK_ERR);
- fp->flag &= (BYTE)~FA_DIRTY;
- }
-#endif
- /* Update the directory entry */
- tm = GET_FATTIME(); /* Modified time */
-#if FF_FS_EXFAT
- if (fs->fs_type == FS_EXFAT) {
- res = fill_first_frag(&fp->obj); /* Fill first fragment on the FAT if needed */
- if (res == FR_OK) {
- res = fill_last_frag(&fp->obj, fp->clust, 0xFFFFFFFF); /* Fill last fragment on the FAT if needed */
- }
- if (res == FR_OK) {
- DIR dj;
- DEF_NAMBUF
-
- INIT_NAMBUF(fs);
- res = load_obj_xdir(&dj, &fp->obj); /* Load directory entry block */
- if (res == FR_OK) {
- fs->dirbuf[XDIR_Attr] |= AM_ARC; /* Set archive attribute to indicate that the file has been changed */
- fs->dirbuf[XDIR_GenFlags] = fp->obj.stat | 1; /* Update file allocation information */
- st_dword(fs->dirbuf + XDIR_FstClus, fp->obj.sclust);
- st_qword(fs->dirbuf + XDIR_FileSize, fp->obj.objsize);
- st_qword(fs->dirbuf + XDIR_ValidFileSize, fp->obj.objsize);
- st_dword(fs->dirbuf + XDIR_ModTime, tm); /* Update modified time */
- fs->dirbuf[XDIR_ModTime10] = 0;
- st_dword(fs->dirbuf + XDIR_AccTime, 0);
- res = store_xdir(&dj); /* Restore it to the directory */
- if (res == FR_OK) {
- res = sync_fs(fs);
- fp->flag &= (BYTE)~FA_MODIFIED;
- }
- }
- FREE_NAMBUF();
- }
- } else
-#endif
- {
- res = move_window(fs, fp->dir_sect);
- if (res == FR_OK) {
- dir = fp->dir_ptr;
- dir[DIR_Attr] |= AM_ARC; /* Set archive attribute to indicate that the file has been changed */
- st_clust(fp->obj.fs, dir, fp->obj.sclust); /* Update file allocation information */
- st_dword(dir + DIR_FileSize, (DWORD)fp->obj.objsize); /* Update file size */
- st_dword(dir + DIR_ModTime, tm); /* Update modified time */
- st_word(dir + DIR_LstAccDate, 0);
- fs->wflag = 1;
- res = sync_fs(fs); /* Restore it to the directory */
- fp->flag &= (BYTE)~FA_MODIFIED;
- }
- }
- }
- }
-
- LEAVE_FF(fs, res);
-}
-
-#endif /* !FF_FS_READONLY */
-
-
-
-
-/*-----------------------------------------------------------------------*/
-/* Close File */
-/*-----------------------------------------------------------------------*/
-
-FRESULT f_close (
- FIL* fp /* Pointer to the file object to be closed */
-)
-{
- FRESULT res;
- FATFS *fs;
-
-#if !FF_FS_READONLY
- res = f_sync(fp); /* Flush cached data */
- if (res == FR_OK)
-#endif
- {
- res = validate(&fp->obj, &fs); /* Lock volume */
- if (res == FR_OK) {
-#if FF_FS_LOCK != 0
- res = dec_lock(fp->obj.lockid); /* Decrement file open counter */
- if (res == FR_OK) fp->obj.fs = 0; /* Invalidate file object */
-#else
- fp->obj.fs = 0; /* Invalidate file object */
-#endif
-#if FF_FS_REENTRANT
- unlock_fs(fs, FR_OK); /* Unlock volume */
-#endif
- }
- }
- return res;
-}
-
-
-
-
-#if FF_FS_RPATH >= 1
-/*-----------------------------------------------------------------------*/
-/* Change Current Directory or Current Drive, Get Current Directory */
-/*-----------------------------------------------------------------------*/
-
-FRESULT f_chdrive (
- const TCHAR* path /* Drive number to set */
-)
-{
- int vol;
-
-
- /* Get logical drive number */
- vol = get_ldnumber(&path);
- if (vol < 0) return FR_INVALID_DRIVE;
- CurrVol = (BYTE)vol; /* Set it as current volume */
-
- return FR_OK;
-}
-
-
-
-FRESULT f_chdir (
- const TCHAR* path /* Pointer to the directory path */
-)
-{
-#if FF_STR_VOLUME_ID == 2
- UINT i;
-#endif
- FRESULT res;
- DIR dj;
- FATFS *fs;
- DEF_NAMBUF
-
-
- /* Get logical drive */
- res = find_volume(&path, &fs, 0);
- if (res == FR_OK) {
- dj.obj.fs = fs;
- INIT_NAMBUF(fs);
- res = follow_path(&dj, path); /* Follow the path */
- if (res == FR_OK) { /* Follow completed */
- if (dj.fn[NSFLAG] & NS_NONAME) { /* Is it the start directory itself? */
- fs->cdir = dj.obj.sclust;
-#if FF_FS_EXFAT
- if (fs->fs_type == FS_EXFAT) {
- fs->cdc_scl = dj.obj.c_scl;
- fs->cdc_size = dj.obj.c_size;
- fs->cdc_ofs = dj.obj.c_ofs;
- }
-#endif
- } else {
- if (dj.obj.attr & AM_DIR) { /* It is a sub-directory */
-#if FF_FS_EXFAT
- if (fs->fs_type == FS_EXFAT) {
- fs->cdir = ld_dword(fs->dirbuf + XDIR_FstClus); /* Sub-directory cluster */
- fs->cdc_scl = dj.obj.sclust; /* Save containing directory information */
- fs->cdc_size = ((DWORD)dj.obj.objsize & 0xFFFFFF00) | dj.obj.stat;
- fs->cdc_ofs = dj.blk_ofs;
- } else
-#endif
- {
- fs->cdir = ld_clust(fs, dj.dir); /* Sub-directory cluster */
- }
- } else {
- res = FR_NO_PATH; /* Reached but a file */
- }
- }
- }
- FREE_NAMBUF();
- if (res == FR_NO_FILE) res = FR_NO_PATH;
-#if FF_STR_VOLUME_ID == 2 /* Also current drive is changed at Unix style volume ID */
- if (res == FR_OK) {
- for (i = FF_VOLUMES - 1; i && fs != FatFs[i]; i--) ; /* Set current drive */
- CurrVol = (BYTE)i;
- }
-#endif
- }
-
- LEAVE_FF(fs, res);
-}
-
-
-#if FF_FS_RPATH >= 2
-FRESULT f_getcwd (
- TCHAR* buff, /* Pointer to the directory path */
- UINT len /* Size of buff in unit of TCHAR */
-)
-{
- FRESULT res;
- DIR dj;
- FATFS *fs;
- UINT i, n;
- DWORD ccl;
- TCHAR *tp = buff;
-#if FF_VOLUMES >= 2
- UINT vl;
-#endif
-#if FF_STR_VOLUME_ID
- const char *vp;
-#endif
- FILINFO fno;
- DEF_NAMBUF
-
-
- /* Get logical drive */
- res = find_volume((const TCHAR**)&buff, &fs, 0); /* Get current volume */
- if (res == FR_OK) {
- dj.obj.fs = fs;
- INIT_NAMBUF(fs);
-
- /* Follow parent directories and create the path */
- i = len; /* Bottom of buffer (directory stack base) */
- if (!FF_FS_EXFAT || fs->fs_type != FS_EXFAT) { /* (Cannot do getcwd on exFAT and returns root path) */
- dj.obj.sclust = fs->cdir; /* Start to follow upper directory from current directory */
- while ((ccl = dj.obj.sclust) != 0) { /* Repeat while current directory is a sub-directory */
- res = dir_sdi(&dj, 1 * SZDIRE); /* Get parent directory */
- if (res != FR_OK) break;
- res = move_window(fs, dj.sect);
- if (res != FR_OK) break;
- dj.obj.sclust = ld_clust(fs, dj.dir); /* Goto parent directory */
- res = dir_sdi(&dj, 0);
- if (res != FR_OK) break;
- do { /* Find the entry links to the child directory */
- res = dir_read_file(&dj);
- if (res != FR_OK) break;
- if (ccl == ld_clust(fs, dj.dir)) break; /* Found the entry */
- res = dir_next(&dj, 0);
- } while (res == FR_OK);
- if (res == FR_NO_FILE) res = FR_INT_ERR;/* It cannot be 'not found'. */
- if (res != FR_OK) break;
- get_fileinfo(&dj, &fno); /* Get the directory name and push it to the buffer */
- for (n = 0; fno.fname[n]; n++) ; /* Name length */
- if (i < n + 1) { /* Insufficient space to store the path name? */
- res = FR_NOT_ENOUGH_CORE; break;
- }
- while (n) buff[--i] = fno.fname[--n]; /* Stack the name */
- buff[--i] = '/';
- }
- }
- if (res == FR_OK) {
- if (i == len) buff[--i] = '/'; /* Is it the root-directory? */
-#if FF_VOLUMES >= 2 /* Put drive prefix */
- vl = 0;
-#if FF_STR_VOLUME_ID >= 1 /* String volume ID */
- for (n = 0, vp = (const char*)VolumeStr[CurrVol]; vp[n]; n++) ;
- if (i >= n + 2) {
- if (FF_STR_VOLUME_ID == 2) *tp++ = (TCHAR)'/';
- for (vl = 0; vl < n; *tp++ = (TCHAR)vp[vl], vl++) ;
- if (FF_STR_VOLUME_ID == 1) *tp++ = (TCHAR)':';
- vl++;
- }
-#else /* Numeric volume ID */
- if (i >= 3) {
- *tp++ = (TCHAR)'0' + CurrVol;
- *tp++ = (TCHAR)':';
- vl = 2;
- }
-#endif
- if (vl == 0) res = FR_NOT_ENOUGH_CORE;
-#endif
- /* Add current directory path */
- if (res == FR_OK) {
- do *tp++ = buff[i++]; while (i < len); /* Copy stacked path string */
- }
- }
- FREE_NAMBUF();
- }
-
- *tp = 0;
- LEAVE_FF(fs, res);
-}
-
-#endif /* FF_FS_RPATH >= 2 */
-#endif /* FF_FS_RPATH >= 1 */
-
-
-
-#if FF_FS_MINIMIZE <= 2
-/*-----------------------------------------------------------------------*/
-/* Seek File Read/Write Pointer */
-/*-----------------------------------------------------------------------*/
-
-FRESULT f_lseek (
- FIL* fp, /* Pointer to the file object */
- FSIZE_t ofs /* File pointer from top of file */
-)
-{
- FRESULT res;
- FATFS *fs;
- DWORD clst, bcs, nsect;
- FSIZE_t ifptr;
-#if FF_USE_FASTSEEK
- DWORD cl, pcl, ncl, tcl, dsc, tlen, ulen, *tbl;
-#endif
-
- res = validate(&fp->obj, &fs); /* Check validity of the file object */
- if (res == FR_OK) res = (FRESULT)fp->err;
-#if FF_FS_EXFAT && !FF_FS_READONLY
- if (res == FR_OK && fs->fs_type == FS_EXFAT) {
- res = fill_last_frag(&fp->obj, fp->clust, 0xFFFFFFFF); /* Fill last fragment on the FAT if needed */
- }
-#endif
- if (res != FR_OK) LEAVE_FF(fs, res);
-
-#if FF_USE_FASTSEEK
- if (fp->cltbl) { /* Fast seek */
- if (ofs == CREATE_LINKMAP) { /* Create CLMT */
- tbl = fp->cltbl;
- tlen = *tbl++; ulen = 2; /* Given table size and required table size */
- cl = fp->obj.sclust; /* Origin of the chain */
- if (cl != 0) {
- do {
- /* Get a fragment */
- tcl = cl; ncl = 0; ulen += 2; /* Top, length and used items */
- do {
- pcl = cl; ncl++;
- cl = get_fat(&fp->obj, cl);
- if (cl <= 1) ABORT(fs, FR_INT_ERR);
- if (cl == 0xFFFFFFFF) ABORT(fs, FR_DISK_ERR);
- } while (cl == pcl + 1);
- if (ulen <= tlen) { /* Store the length and top of the fragment */
- *tbl++ = ncl; *tbl++ = tcl;
- }
- } while (cl < fs->n_fatent); /* Repeat until end of chain */
- }
- *fp->cltbl = ulen; /* Number of items used */
- if (ulen <= tlen) {
- *tbl = 0; /* Terminate table */
- } else {
- res = FR_NOT_ENOUGH_CORE; /* Given table size is smaller than required */
- }
- } else { /* Fast seek */
- if (ofs > fp->obj.objsize) ofs = fp->obj.objsize; /* Clip offset at the file size */
- fp->fptr = ofs; /* Set file pointer */
- if (ofs > 0) {
- fp->clust = clmt_clust(fp, ofs - 1);
- dsc = clst2sect(fs, fp->clust);
- if (dsc == 0) ABORT(fs, FR_INT_ERR);
- dsc += (DWORD)((ofs - 1) / SS(fs)) & (fs->csize - 1);
- if (fp->fptr % SS(fs) && dsc != fp->sect) { /* Refill sector cache if needed */
-#if !FF_FS_TINY
-#if !FF_FS_READONLY
- if (fp->flag & FA_DIRTY) { /* Write-back dirty sector cache */
- if (disk_write(fs->pdrv, fp->buf, fp->sect, 1) != RES_OK) ABORT(fs, FR_DISK_ERR);
- fp->flag &= (BYTE)~FA_DIRTY;
- }
-#endif
- if (disk_read(fs->pdrv, fp->buf, dsc, 1) != RES_OK) ABORT(fs, FR_DISK_ERR); /* Load current sector */
-#endif
- fp->sect = dsc;
- }
- }
- }
- } else
-#endif
-
- /* Normal Seek */
- {
-#if FF_FS_EXFAT
- if (fs->fs_type != FS_EXFAT && ofs >= 0x100000000) ofs = 0xFFFFFFFF; /* Clip at 4 GiB - 1 if at FATxx */
-#endif
- if (ofs > fp->obj.objsize && (FF_FS_READONLY || !(fp->flag & FA_WRITE))) { /* In read-only mode, clip offset with the file size */
- ofs = fp->obj.objsize;
- }
- ifptr = fp->fptr;
- fp->fptr = nsect = 0;
- if (ofs > 0) {
- bcs = (DWORD)fs->csize * SS(fs); /* Cluster size (byte) */
- if (ifptr > 0 &&
- (ofs - 1) / bcs >= (ifptr - 1) / bcs) { /* When seek to same or following cluster, */
- fp->fptr = (ifptr - 1) & ~(FSIZE_t)(bcs - 1); /* start from the current cluster */
- ofs -= fp->fptr;
- clst = fp->clust;
- } else { /* When seek to back cluster, */
- clst = fp->obj.sclust; /* start from the first cluster */
-#if !FF_FS_READONLY
- if (clst == 0) { /* If no cluster chain, create a new chain */
- clst = create_chain(&fp->obj, 0);
- if (clst == 1) ABORT(fs, FR_INT_ERR);
- if (clst == 0xFFFFFFFF) ABORT(fs, FR_DISK_ERR);
- fp->obj.sclust = clst;
- }
-#endif
- fp->clust = clst;
- }
- if (clst != 0) {
- while (ofs > bcs) { /* Cluster following loop */
- ofs -= bcs; fp->fptr += bcs;
-#if !FF_FS_READONLY
- if (fp->flag & FA_WRITE) { /* Check if in write mode or not */
- if (FF_FS_EXFAT && fp->fptr > fp->obj.objsize) { /* No FAT chain object needs correct objsize to generate FAT value */
- fp->obj.objsize = fp->fptr;
- fp->flag |= FA_MODIFIED;
- }
- clst = create_chain(&fp->obj, clst); /* Follow chain with forceed stretch */
- if (clst == 0) { /* Clip file size in case of disk full */
- ofs = 0; break;
- }
- } else
-#endif
- {
- clst = get_fat(&fp->obj, clst); /* Follow cluster chain if not in write mode */
- }
- if (clst == 0xFFFFFFFF) ABORT(fs, FR_DISK_ERR);
- if (clst <= 1 || clst >= fs->n_fatent) ABORT(fs, FR_INT_ERR);
- fp->clust = clst;
- }
- fp->fptr += ofs;
- if (ofs % SS(fs)) {
- nsect = clst2sect(fs, clst); /* Current sector */
- if (nsect == 0) ABORT(fs, FR_INT_ERR);
- nsect += (DWORD)(ofs / SS(fs));
- }
- }
- }
- if (!FF_FS_READONLY && fp->fptr > fp->obj.objsize) { /* Set file change flag if the file size is extended */
- fp->obj.objsize = fp->fptr;
- fp->flag |= FA_MODIFIED;
- }
- if (fp->fptr % SS(fs) && nsect != fp->sect) { /* Fill sector cache if needed */
-#if !FF_FS_TINY
-#if !FF_FS_READONLY
- if (fp->flag & FA_DIRTY) { /* Write-back dirty sector cache */
- if (disk_write(fs->pdrv, fp->buf, fp->sect, 1) != RES_OK) ABORT(fs, FR_DISK_ERR);
- fp->flag &= (BYTE)~FA_DIRTY;
- }
-#endif
- if (disk_read(fs->pdrv, fp->buf, nsect, 1) != RES_OK) ABORT(fs, FR_DISK_ERR); /* Fill sector cache */
-#endif
- fp->sect = nsect;
- }
- }
-
- LEAVE_FF(fs, res);
-}
-
-
-
-#if FF_FS_MINIMIZE <= 1
-/*-----------------------------------------------------------------------*/
-/* Create a Directory Object */
-/*-----------------------------------------------------------------------*/
-
-FRESULT f_opendir (
- DIR* dp, /* Pointer to directory object to create */
- const TCHAR* path /* Pointer to the directory path */
-)
-{
- FRESULT res;
- FATFS *fs;
- DEF_NAMBUF
-
-
- if (!dp) return FR_INVALID_OBJECT;
-
- /* Get logical drive */
- res = find_volume(&path, &fs, 0);
- if (res == FR_OK) {
- dp->obj.fs = fs;
- INIT_NAMBUF(fs);
- res = follow_path(dp, path); /* Follow the path to the directory */
- if (res == FR_OK) { /* Follow completed */
- if (!(dp->fn[NSFLAG] & NS_NONAME)) { /* It is not the origin directory itself */
- if (dp->obj.attr & AM_DIR) { /* This object is a sub-directory */
-#if FF_FS_EXFAT
- if (fs->fs_type == FS_EXFAT) {
- dp->obj.c_scl = dp->obj.sclust; /* Get containing directory inforamation */
- dp->obj.c_size = ((DWORD)dp->obj.objsize & 0xFFFFFF00) | dp->obj.stat;
- dp->obj.c_ofs = dp->blk_ofs;
- init_alloc_info(fs, &dp->obj); /* Get object allocation info */
- } else
-#endif
- {
- dp->obj.sclust = ld_clust(fs, dp->dir); /* Get object allocation info */
- }
- } else { /* This object is a file */
- res = FR_NO_PATH;
- }
- }
- if (res == FR_OK) {
- dp->obj.id = fs->id;
- res = dir_sdi(dp, 0); /* Rewind directory */
-#if FF_FS_LOCK != 0
- if (res == FR_OK) {
- if (dp->obj.sclust != 0) {
- dp->obj.lockid = inc_lock(dp, 0); /* Lock the sub directory */
- if (!dp->obj.lockid) res = FR_TOO_MANY_OPEN_FILES;
- } else {
- dp->obj.lockid = 0; /* Root directory need not to be locked */
- }
- }
-#endif
- }
- }
- FREE_NAMBUF();
- if (res == FR_NO_FILE) res = FR_NO_PATH;
- }
- if (res != FR_OK) dp->obj.fs = 0; /* Invalidate the directory object if function faild */
-
- LEAVE_FF(fs, res);
-}
-
-
-
-
-/*-----------------------------------------------------------------------*/
-/* Close Directory */
-/*-----------------------------------------------------------------------*/
-
-FRESULT f_closedir (
- DIR *dp /* Pointer to the directory object to be closed */
-)
-{
- FRESULT res;
- FATFS *fs;
-
-
- res = validate(&dp->obj, &fs); /* Check validity of the file object */
- if (res == FR_OK) {
-#if FF_FS_LOCK != 0
- if (dp->obj.lockid) res = dec_lock(dp->obj.lockid); /* Decrement sub-directory open counter */
- if (res == FR_OK) dp->obj.fs = 0; /* Invalidate directory object */
-#else
- dp->obj.fs = 0; /* Invalidate directory object */
-#endif
-#if FF_FS_REENTRANT
- unlock_fs(fs, FR_OK); /* Unlock volume */
-#endif
- }
- return res;
-}
-
-
-
-
-/*-----------------------------------------------------------------------*/
-/* Read Directory Entries in Sequence */
-/*-----------------------------------------------------------------------*/
-
-FRESULT f_readdir (
- DIR* dp, /* Pointer to the open directory object */
- FILINFO* fno /* Pointer to file information to return */
-)
-{
- FRESULT res;
- FATFS *fs;
- DEF_NAMBUF
-
-
- res = validate(&dp->obj, &fs); /* Check validity of the directory object */
- if (res == FR_OK) {
- if (!fno) {
- res = dir_sdi(dp, 0); /* Rewind the directory object */
- } else {
- INIT_NAMBUF(fs);
- res = dir_read_file(dp); /* Read an item */
- if (res == FR_NO_FILE) res = FR_OK; /* Ignore end of directory */
- if (res == FR_OK) { /* A valid entry is found */
- get_fileinfo(dp, fno); /* Get the object information */
- res = dir_next(dp, 0); /* Increment index for next */
- if (res == FR_NO_FILE) res = FR_OK; /* Ignore end of directory now */
- }
- FREE_NAMBUF();
- }
- }
- LEAVE_FF(fs, res);
-}
-
-
-
-#if FF_USE_FIND
-/*-----------------------------------------------------------------------*/
-/* Find Next File */
-/*-----------------------------------------------------------------------*/
-
-FRESULT f_findnext (
- DIR* dp, /* Pointer to the open directory object */
- FILINFO* fno /* Pointer to the file information structure */
-)
-{
- FRESULT res;
-
-
- for (;;) {
- res = f_readdir(dp, fno); /* Get a directory item */
- if (res != FR_OK || !fno || !fno->fname[0]) break; /* Terminate if any error or end of directory */
- if (pattern_matching(dp->pat, fno->fname, 0, 0)) break; /* Test for the file name */
-#if FF_USE_LFN && FF_USE_FIND == 2
- if (pattern_matching(dp->pat, fno->altname, 0, 0)) break; /* Test for alternative name if exist */
-#endif
- }
- return res;
-}
-
-
-
-/*-----------------------------------------------------------------------*/
-/* Find First File */
-/*-----------------------------------------------------------------------*/
-
-FRESULT f_findfirst (
- DIR* dp, /* Pointer to the blank directory object */
- FILINFO* fno, /* Pointer to the file information structure */
- const TCHAR* path, /* Pointer to the directory to open */
- const TCHAR* pattern /* Pointer to the matching pattern */
-)
-{
- FRESULT res;
-
-
- dp->pat = pattern; /* Save pointer to pattern string */
- res = f_opendir(dp, path); /* Open the target directory */
- if (res == FR_OK) {
- res = f_findnext(dp, fno); /* Find the first item */
- }
- return res;
-}
-
-#endif /* FF_USE_FIND */
-
-
-
-#if FF_FS_MINIMIZE == 0
-/*-----------------------------------------------------------------------*/
-/* Get File Status */
-/*-----------------------------------------------------------------------*/
-
-FRESULT f_stat (
- const TCHAR* path, /* Pointer to the file path */
- FILINFO* fno /* Pointer to file information to return */
-)
-{
- FRESULT res;
- DIR dj;
- DEF_NAMBUF
-
-
- /* Get logical drive */
- res = find_volume(&path, &dj.obj.fs, 0);
- if (res == FR_OK) {
- INIT_NAMBUF(dj.obj.fs);
- res = follow_path(&dj, path); /* Follow the file path */
- if (res == FR_OK) { /* Follow completed */
- if (dj.fn[NSFLAG] & NS_NONAME) { /* It is origin directory */
- res = FR_INVALID_NAME;
- } else { /* Found an object */
- if (fno) get_fileinfo(&dj, fno);
- }
- }
- FREE_NAMBUF();
- }
-
- LEAVE_FF(dj.obj.fs, res);
-}
-
-
-
-#if !FF_FS_READONLY
-/*-----------------------------------------------------------------------*/
-/* Get Number of Free Clusters */
-/*-----------------------------------------------------------------------*/
-
-FRESULT f_getfree (
- const TCHAR* path, /* Logical drive number */
- DWORD* nclst, /* Pointer to a variable to return number of free clusters */
- FATFS** fatfs /* Pointer to return pointer to corresponding filesystem object */
-)
-{
- FRESULT res;
- FATFS *fs;
- DWORD nfree, clst, sect, stat;
- UINT i;
- FFOBJID obj;
-
-
- /* Get logical drive */
- res = find_volume(&path, &fs, 0);
- if (res == FR_OK) {
- *fatfs = fs; /* Return ptr to the fs object */
- /* If free_clst is valid, return it without full FAT scan */
- if (fs->free_clst <= fs->n_fatent - 2) {
- *nclst = fs->free_clst;
- } else {
- /* Scan FAT to obtain number of free clusters */
- nfree = 0;
- if (fs->fs_type == FS_FAT12) { /* FAT12: Scan bit field FAT entries */
- clst = 2; obj.fs = fs;
- do {
- stat = get_fat(&obj, clst);
- if (stat == 0xFFFFFFFF) { res = FR_DISK_ERR; break; }
- if (stat == 1) { res = FR_INT_ERR; break; }
- if (stat == 0) nfree++;
- } while (++clst < fs->n_fatent);
- } else {
-#if FF_FS_EXFAT
- if (fs->fs_type == FS_EXFAT) { /* exFAT: Scan allocation bitmap */
- BYTE bm;
- UINT b;
-
- clst = fs->n_fatent - 2; /* Number of clusters */
- sect = fs->database; /* Assuming bitmap starts at cluster 2 */
- i = 0; /* Offset in the sector */
- do { /* Counts numbuer of bits with zero in the bitmap */
- if (i == 0) {
- res = move_window(fs, sect++);
- if (res != FR_OK) break;
- }
- for (b = 8, bm = fs->win[i]; b && clst; b--, clst--) {
- if (!(bm & 1)) nfree++;
- bm >>= 1;
- }
- i = (i + 1) % SS(fs);
- } while (clst);
- } else
-#endif
- { /* FAT16/32: Scan WORD/DWORD FAT entries */
- clst = fs->n_fatent; /* Number of entries */
- sect = fs->fatbase; /* Top of the FAT */
- i = 0; /* Offset in the sector */
- do { /* Counts numbuer of entries with zero in the FAT */
- if (i == 0) {
- res = move_window(fs, sect++);
- if (res != FR_OK) break;
- }
- if (fs->fs_type == FS_FAT16) {
- if (ld_word(fs->win + i) == 0) nfree++;
- i += 2;
- } else {
- if ((ld_dword(fs->win + i) & 0x0FFFFFFF) == 0) nfree++;
- i += 4;
- }
- i %= SS(fs);
- } while (--clst);
- }
- }
- *nclst = nfree; /* Return the free clusters */
- fs->free_clst = nfree; /* Now free_clst is valid */
- fs->fsi_flag |= 1; /* FAT32: FSInfo is to be updated */
- }
- }
-
- LEAVE_FF(fs, res);
-}
-
-
-
-
-/*-----------------------------------------------------------------------*/
-/* Truncate File */
-/*-----------------------------------------------------------------------*/
-
-FRESULT f_truncate (
- FIL* fp /* Pointer to the file object */
-)
-{
- FRESULT res;
- FATFS *fs;
- DWORD ncl;
-
-
- res = validate(&fp->obj, &fs); /* Check validity of the file object */
- if (res != FR_OK || (res = (FRESULT)fp->err) != FR_OK) LEAVE_FF(fs, res);
- if (!(fp->flag & FA_WRITE)) LEAVE_FF(fs, FR_DENIED); /* Check access mode */
-
- if (fp->fptr < fp->obj.objsize) { /* Process when fptr is not on the eof */
- if (fp->fptr == 0) { /* When set file size to zero, remove entire cluster chain */
- res = remove_chain(&fp->obj, fp->obj.sclust, 0);
- fp->obj.sclust = 0;
- } else { /* When truncate a part of the file, remove remaining clusters */
- ncl = get_fat(&fp->obj, fp->clust);
- res = FR_OK;
- if (ncl == 0xFFFFFFFF) res = FR_DISK_ERR;
- if (ncl == 1) res = FR_INT_ERR;
- if (res == FR_OK && ncl < fs->n_fatent) {
- res = remove_chain(&fp->obj, ncl, fp->clust);
- }
- }
- fp->obj.objsize = fp->fptr; /* Set file size to current read/write point */
- fp->flag |= FA_MODIFIED;
-#if !FF_FS_TINY
- if (res == FR_OK && (fp->flag & FA_DIRTY)) {
- if (disk_write(fs->pdrv, fp->buf, fp->sect, 1) != RES_OK) {
- res = FR_DISK_ERR;
- } else {
- fp->flag &= (BYTE)~FA_DIRTY;
- }
- }
-#endif
- if (res != FR_OK) ABORT(fs, res);
- }
-
- LEAVE_FF(fs, res);
-}
-
-
-
-
-/*-----------------------------------------------------------------------*/
-/* Delete a File/Directory */
-/*-----------------------------------------------------------------------*/
-
-FRESULT f_unlink (
- const TCHAR* path /* Pointer to the file or directory path */
-)
-{
- FRESULT res;
- DIR dj, sdj;
- DWORD dclst = 0;
- FATFS *fs;
-#if FF_FS_EXFAT
- FFOBJID obj;
-#endif
- DEF_NAMBUF
-
-
- /* Get logical drive */
- res = find_volume(&path, &fs, FA_WRITE);
- if (res == FR_OK) {
- dj.obj.fs = fs;
- INIT_NAMBUF(fs);
- res = follow_path(&dj, path); /* Follow the file path */
- if (FF_FS_RPATH && res == FR_OK && (dj.fn[NSFLAG] & NS_DOT)) {
- res = FR_INVALID_NAME; /* Cannot remove dot entry */
- }
-#if FF_FS_LOCK != 0
- if (res == FR_OK) res = chk_lock(&dj, 2); /* Check if it is an open object */
-#endif
- if (res == FR_OK) { /* The object is accessible */
- if (dj.fn[NSFLAG] & NS_NONAME) {
- res = FR_INVALID_NAME; /* Cannot remove the origin directory */
- } else {
- if (dj.obj.attr & AM_RDO) {
- res = FR_DENIED; /* Cannot remove R/O object */
- }
- }
- if (res == FR_OK) {
-#if FF_FS_EXFAT
- obj.fs = fs;
- if (fs->fs_type == FS_EXFAT) {
- init_alloc_info(fs, &obj);
- dclst = obj.sclust;
- } else
-#endif
- {
- dclst = ld_clust(fs, dj.dir);
- }
- if (dj.obj.attr & AM_DIR) { /* Is it a sub-directory? */
-#if FF_FS_RPATH != 0
- if (dclst == fs->cdir) { /* Is it the current directory? */
- res = FR_DENIED;
- } else
-#endif
- {
- sdj.obj.fs = fs; /* Open the sub-directory */
- sdj.obj.sclust = dclst;
-#if FF_FS_EXFAT
- if (fs->fs_type == FS_EXFAT) {
- sdj.obj.objsize = obj.objsize;
- sdj.obj.stat = obj.stat;
- }
-#endif
- res = dir_sdi(&sdj, 0);
- if (res == FR_OK) {
- res = dir_read_file(&sdj); /* Test if the directory is empty */
- if (res == FR_OK) res = FR_DENIED; /* Not empty? */
- if (res == FR_NO_FILE) res = FR_OK; /* Empty? */
- }
- }
- }
- }
- if (res == FR_OK) {
- res = dir_remove(&dj); /* Remove the directory entry */
- if (res == FR_OK && dclst != 0) { /* Remove the cluster chain if exist */
-#if FF_FS_EXFAT
- res = remove_chain(&obj, dclst, 0);
-#else
- res = remove_chain(&dj.obj, dclst, 0);
-#endif
- }
- if (res == FR_OK) res = sync_fs(fs);
- }
- }
- FREE_NAMBUF();
- }
-
- LEAVE_FF(fs, res);
-}
-
-
-
-
-/*-----------------------------------------------------------------------*/
-/* Create a Directory */
-/*-----------------------------------------------------------------------*/
-
-FRESULT f_mkdir (
- const TCHAR* path /* Pointer to the directory path */
-)
-{
- FRESULT res;
- DIR dj;
- FATFS *fs;
- BYTE *dir;
- DWORD dcl, pcl, tm;
- DEF_NAMBUF
-
-
- /* Get logical drive */
- res = find_volume(&path, &fs, FA_WRITE);
- if (res == FR_OK) {
- dj.obj.fs = fs;
- INIT_NAMBUF(fs);
- res = follow_path(&dj, path); /* Follow the file path */
- if (res == FR_OK) res = FR_EXIST; /* Any object with same name is already existing */
- if (FF_FS_RPATH && res == FR_NO_FILE && (dj.fn[NSFLAG] & NS_DOT)) {
- res = FR_INVALID_NAME;
- }
- if (res == FR_NO_FILE) { /* Can create a new directory */
- dcl = create_chain(&dj.obj, 0); /* Allocate a cluster for the new directory table */
- dj.obj.objsize = (DWORD)fs->csize * SS(fs);
- res = FR_OK;
- if (dcl == 0) res = FR_DENIED; /* No space to allocate a new cluster */
- if (dcl == 1) res = FR_INT_ERR;
- if (dcl == 0xFFFFFFFF) res = FR_DISK_ERR;
- if (res == FR_OK) res = sync_window(fs); /* Flush FAT */
- tm = GET_FATTIME();
- if (res == FR_OK) { /* Initialize the new directory table */
- res = dir_clear(fs, dcl); /* Clean up the new table */
- if (res == FR_OK && (!FF_FS_EXFAT || fs->fs_type != FS_EXFAT)) { /* Create dot entries (FAT only) */
- dir = fs->win;
- mem_set(dir + DIR_Name, ' ', 11); /* Create "." entry */
- dir[DIR_Name] = '.';
- dir[DIR_Attr] = AM_DIR;
- st_dword(dir + DIR_ModTime, tm);
- st_clust(fs, dir, dcl);
- mem_cpy(dir + SZDIRE, dir, SZDIRE); /* Create ".." entry */
- dir[SZDIRE + 1] = '.'; pcl = dj.obj.sclust;
- st_clust(fs, dir + SZDIRE, pcl);
- fs->wflag = 1;
- }
- }
- if (res == FR_OK) {
- res = dir_register(&dj); /* Register the object to the directoy */
- }
- if (res == FR_OK) {
-#if FF_FS_EXFAT
- if (fs->fs_type == FS_EXFAT) { /* Initialize directory entry block */
- st_dword(fs->dirbuf + XDIR_ModTime, tm); /* Created time */
- st_dword(fs->dirbuf + XDIR_FstClus, dcl); /* Table start cluster */
- st_dword(fs->dirbuf + XDIR_FileSize, (DWORD)dj.obj.objsize); /* File size needs to be valid */
- st_dword(fs->dirbuf + XDIR_ValidFileSize, (DWORD)dj.obj.objsize);
- fs->dirbuf[XDIR_GenFlags] = 3; /* Initialize the object flag */
- fs->dirbuf[XDIR_Attr] = AM_DIR; /* Attribute */
- res = store_xdir(&dj);
- } else
-#endif
- {
- dir = dj.dir;
- st_dword(dir + DIR_ModTime, tm); /* Created time */
- st_clust(fs, dir, dcl); /* Table start cluster */
- dir[DIR_Attr] = AM_DIR; /* Attribute */
- fs->wflag = 1;
- }
- if (res == FR_OK) {
- res = sync_fs(fs);
- }
- } else {
- remove_chain(&dj.obj, dcl, 0); /* Could not register, remove cluster chain */
- }
- }
- FREE_NAMBUF();
- }
-
- LEAVE_FF(fs, res);
-}
-
-
-
-
-/*-----------------------------------------------------------------------*/
-/* Rename a File/Directory */
-/*-----------------------------------------------------------------------*/
-
-FRESULT f_rename (
- const TCHAR* path_old, /* Pointer to the object name to be renamed */
- const TCHAR* path_new /* Pointer to the new name */
-)
-{
- FRESULT res;
- DIR djo, djn;
- FATFS *fs;
- BYTE buf[FF_FS_EXFAT ? SZDIRE * 2 : SZDIRE], *dir;
- DWORD dw;
- DEF_NAMBUF
-
-
- get_ldnumber(&path_new); /* Snip the drive number of new name off */
- res = find_volume(&path_old, &fs, FA_WRITE); /* Get logical drive of the old object */
- if (res == FR_OK) {
- djo.obj.fs = fs;
- INIT_NAMBUF(fs);
- res = follow_path(&djo, path_old); /* Check old object */
- if (res == FR_OK && (djo.fn[NSFLAG] & (NS_DOT | NS_NONAME))) res = FR_INVALID_NAME; /* Check validity of name */
-#if FF_FS_LOCK != 0
- if (res == FR_OK) {
- res = chk_lock(&djo, 2);
- }
-#endif
- if (res == FR_OK) { /* Object to be renamed is found */
-#if FF_FS_EXFAT
- if (fs->fs_type == FS_EXFAT) { /* At exFAT volume */
- BYTE nf, nn;
- WORD nh;
-
- mem_cpy(buf, fs->dirbuf, SZDIRE * 2); /* Save 85+C0 entry of old object */
- mem_cpy(&djn, &djo, sizeof djo);
- res = follow_path(&djn, path_new); /* Make sure if new object name is not in use */
- if (res == FR_OK) { /* Is new name already in use by any other object? */
- res = (djn.obj.sclust == djo.obj.sclust && djn.dptr == djo.dptr) ? FR_NO_FILE : FR_EXIST;
- }
- if (res == FR_NO_FILE) { /* It is a valid path and no name collision */
- res = dir_register(&djn); /* Register the new entry */
- if (res == FR_OK) {
- nf = fs->dirbuf[XDIR_NumSec]; nn = fs->dirbuf[XDIR_NumName];
- nh = ld_word(fs->dirbuf + XDIR_NameHash);
- mem_cpy(fs->dirbuf, buf, SZDIRE * 2); /* Restore 85+C0 entry */
- fs->dirbuf[XDIR_NumSec] = nf; fs->dirbuf[XDIR_NumName] = nn;
- st_word(fs->dirbuf + XDIR_NameHash, nh);
- if (!(fs->dirbuf[XDIR_Attr] & AM_DIR)) fs->dirbuf[XDIR_Attr] |= AM_ARC; /* Set archive attribute if it is a file */
-/* Start of critical section where an interruption can cause a cross-link */
- res = store_xdir(&djn);
- }
- }
- } else
-#endif
- { /* At FAT/FAT32 volume */
- mem_cpy(buf, djo.dir, SZDIRE); /* Save directory entry of the object */
- mem_cpy(&djn, &djo, sizeof (DIR)); /* Duplicate the directory object */
- res = follow_path(&djn, path_new); /* Make sure if new object name is not in use */
- if (res == FR_OK) { /* Is new name already in use by any other object? */
- res = (djn.obj.sclust == djo.obj.sclust && djn.dptr == djo.dptr) ? FR_NO_FILE : FR_EXIST;
- }
- if (res == FR_NO_FILE) { /* It is a valid path and no name collision */
- res = dir_register(&djn); /* Register the new entry */
- if (res == FR_OK) {
- dir = djn.dir; /* Copy directory entry of the object except name */
- mem_cpy(dir + 13, buf + 13, SZDIRE - 13);
- dir[DIR_Attr] = buf[DIR_Attr];
- if (!(dir[DIR_Attr] & AM_DIR)) dir[DIR_Attr] |= AM_ARC; /* Set archive attribute if it is a file */
- fs->wflag = 1;
- if ((dir[DIR_Attr] & AM_DIR) && djo.obj.sclust != djn.obj.sclust) { /* Update .. entry in the sub-directory if needed */
- dw = clst2sect(fs, ld_clust(fs, dir));
- if (dw == 0) {
- res = FR_INT_ERR;
- } else {
-/* Start of critical section where an interruption can cause a cross-link */
- res = move_window(fs, dw);
- dir = fs->win + SZDIRE * 1; /* Ptr to .. entry */
- if (res == FR_OK && dir[1] == '.') {
- st_clust(fs, dir, djn.obj.sclust);
- fs->wflag = 1;
- }
- }
- }
- }
- }
- }
- if (res == FR_OK) {
- res = dir_remove(&djo); /* Remove old entry */
- if (res == FR_OK) {
- res = sync_fs(fs);
- }
- }
-/* End of the critical section */
- }
- FREE_NAMBUF();
- }
-
- LEAVE_FF(fs, res);
-}
-
-#endif /* !FF_FS_READONLY */
-#endif /* FF_FS_MINIMIZE == 0 */
-#endif /* FF_FS_MINIMIZE <= 1 */
-#endif /* FF_FS_MINIMIZE <= 2 */
-
-
-
-#if FF_USE_CHMOD && !FF_FS_READONLY
-/*-----------------------------------------------------------------------*/
-/* Change Attribute */
-/*-----------------------------------------------------------------------*/
-
-FRESULT f_chmod (
- const TCHAR* path, /* Pointer to the file path */
- BYTE attr, /* Attribute bits */
- BYTE mask /* Attribute mask to change */
-)
-{
- FRESULT res;
- DIR dj;
- FATFS *fs;
- DEF_NAMBUF
-
-
- res = find_volume(&path, &fs, FA_WRITE); /* Get logical drive */
- if (res == FR_OK) {
- dj.obj.fs = fs;
- INIT_NAMBUF(fs);
- res = follow_path(&dj, path); /* Follow the file path */
- if (res == FR_OK && (dj.fn[NSFLAG] & (NS_DOT | NS_NONAME))) res = FR_INVALID_NAME; /* Check object validity */
- if (res == FR_OK) {
- mask &= AM_RDO|AM_HID|AM_SYS|AM_ARC; /* Valid attribute mask */
-#if FF_FS_EXFAT
- if (fs->fs_type == FS_EXFAT) {
- fs->dirbuf[XDIR_Attr] = (attr & mask) | (fs->dirbuf[XDIR_Attr] & (BYTE)~mask); /* Apply attribute change */
- res = store_xdir(&dj);
- } else
-#endif
- {
- dj.dir[DIR_Attr] = (attr & mask) | (dj.dir[DIR_Attr] & (BYTE)~mask); /* Apply attribute change */
- fs->wflag = 1;
- }
- if (res == FR_OK) {
- res = sync_fs(fs);
- }
- }
- FREE_NAMBUF();
- }
-
- LEAVE_FF(fs, res);
-}
-
-
-
-
-/*-----------------------------------------------------------------------*/
-/* Change Timestamp */
-/*-----------------------------------------------------------------------*/
-
-FRESULT f_utime (
- const TCHAR* path, /* Pointer to the file/directory name */
- const FILINFO* fno /* Pointer to the timestamp to be set */
-)
-{
- FRESULT res;
- DIR dj;
- FATFS *fs;
- DEF_NAMBUF
-
-
- res = find_volume(&path, &fs, FA_WRITE); /* Get logical drive */
- if (res == FR_OK) {
- dj.obj.fs = fs;
- INIT_NAMBUF(fs);
- res = follow_path(&dj, path); /* Follow the file path */
- if (res == FR_OK && (dj.fn[NSFLAG] & (NS_DOT | NS_NONAME))) res = FR_INVALID_NAME; /* Check object validity */
- if (res == FR_OK) {
-#if FF_FS_EXFAT
- if (fs->fs_type == FS_EXFAT) {
- st_dword(fs->dirbuf + XDIR_ModTime, (DWORD)fno->fdate << 16 | fno->ftime);
- res = store_xdir(&dj);
- } else
-#endif
- {
- st_dword(dj.dir + DIR_ModTime, (DWORD)fno->fdate << 16 | fno->ftime);
- fs->wflag = 1;
- }
- if (res == FR_OK) {
- res = sync_fs(fs);
- }
- }
- FREE_NAMBUF();
- }
-
- LEAVE_FF(fs, res);
-}
-
-#endif /* FF_USE_CHMOD && !FF_FS_READONLY */
-
-
-
-#if FF_USE_LABEL
-/*-----------------------------------------------------------------------*/
-/* Get Volume Label */
-/*-----------------------------------------------------------------------*/
-
-FRESULT f_getlabel (
- const TCHAR* path, /* Logical drive number */
- TCHAR* label, /* Buffer to store the volume label */
- DWORD* vsn /* Variable to store the volume serial number */
-)
-{
- FRESULT res;
- DIR dj;
- FATFS *fs;
- UINT si, di;
- WCHAR wc;
-
- /* Get logical drive */
- res = find_volume(&path, &fs, 0);
-
- /* Get volume label */
- if (res == FR_OK && label) {
- dj.obj.fs = fs; dj.obj.sclust = 0; /* Open root directory */
- res = dir_sdi(&dj, 0);
- if (res == FR_OK) {
- res = dir_read_label(&dj); /* Find a volume label entry */
- if (res == FR_OK) {
-#if FF_FS_EXFAT
- if (fs->fs_type == FS_EXFAT) {
- WCHAR hs;
-
- for (si = di = hs = 0; si < dj.dir[XDIR_NumLabel]; si++) { /* Extract volume label from 83 entry */
- wc = ld_word(dj.dir + XDIR_Label + si * 2);
- if (hs == 0 && IsSurrogate(wc)) { /* Is the code a surrogate? */
- hs = wc; continue;
- }
- wc = put_utf((DWORD)hs << 16 | wc, &label[di], 4);
- if (wc == 0) { di = 0; break; }
- di += wc;
- hs = 0;
- }
- if (hs != 0) di = 0; /* Broken surrogate pair? */
- label[di] = 0;
- } else
-#endif
- {
- si = di = 0; /* Extract volume label from AM_VOL entry */
- while (si < 11) {
- wc = dj.dir[si++];
-#if FF_USE_LFN && FF_LFN_UNICODE >= 1 /* Unicode output */
- if (dbc_1st((BYTE)wc) && si < 11) wc = wc << 8 | dj.dir[si++]; /* Is it a DBC? */
- wc = ff_oem2uni(wc, CODEPAGE); /* Convert it into Unicode */
- if (wc != 0) wc = put_utf(wc, &label[di], 4); /* Put it in Unicode */
- if (wc == 0) { di = 0; break; }
- di += wc;
-#else /* ANSI/OEM output */
- label[di++] = (TCHAR)wc;
-#endif
- }
- do { /* Truncate trailing spaces */
- label[di] = 0;
- if (di == 0) break;
- } while (label[--di] == ' ');
- }
- }
- }
- if (res == FR_NO_FILE) { /* No label entry and return nul string */
- label[0] = 0;
- res = FR_OK;
- }
- }
-
- /* Get volume serial number */
- if (res == FR_OK && vsn) {
- res = move_window(fs, fs->volbase);
- if (res == FR_OK) {
- switch (fs->fs_type) {
- case FS_EXFAT:
- di = BPB_VolIDEx; break;
-
- case FS_FAT32:
- di = BS_VolID32; break;
-
- default:
- di = BS_VolID;
- }
- *vsn = ld_dword(fs->win + di);
- }
- }
-
- LEAVE_FF(fs, res);
-}
-
-
-
-#if !FF_FS_READONLY
-/*-----------------------------------------------------------------------*/
-/* Set Volume Label */
-/*-----------------------------------------------------------------------*/
-
-FRESULT f_setlabel (
- const TCHAR* label /* Volume label to set with heading logical drive number */
-)
-{
- FRESULT res;
- DIR dj;
- FATFS *fs;
- BYTE dirvn[22];
- UINT di;
- WCHAR wc;
- static const char badchr[] = "+.,;=[]/\\\"*:<>\?|\x7F"; /* [0..] for FAT, [7..] for exFAT */
-#if FF_USE_LFN
- DWORD dc;
-#endif
-
- /* Get logical drive */
- res = find_volume(&label, &fs, FA_WRITE);
- if (res != FR_OK) LEAVE_FF(fs, res);
-
-#if FF_FS_EXFAT
- if (fs->fs_type == FS_EXFAT) { /* On the exFAT volume */
- mem_set(dirvn, 0, 22);
- di = 0;
- while ((UINT)*label >= ' ') { /* Create volume label */
- dc = tchar2uni(&label); /* Get a Unicode character */
- if (dc >= 0x10000) {
- if (dc == 0xFFFFFFFF || di >= 10) { /* Wrong surrogate or buffer overflow */
- dc = 0;
- } else {
- st_word(dirvn + di * 2, (WCHAR)(dc >> 16)); di++;
- }
- }
- if (dc == 0 || chk_chr(badchr + 7, (int)dc) || di >= 11) { /* Check validity of the volume label */
- LEAVE_FF(fs, FR_INVALID_NAME);
- }
- st_word(dirvn + di * 2, (WCHAR)dc); di++;
- }
- } else
-#endif
- { /* On the FAT/FAT32 volume */
- mem_set(dirvn, ' ', 11);
- di = 0;
- while ((UINT)*label >= ' ') { /* Create volume label */
-#if FF_USE_LFN
- dc = tchar2uni(&label);
- wc = (dc < 0x10000) ? ff_uni2oem(ff_wtoupper(dc), CODEPAGE) : 0;
-#else /* ANSI/OEM input */
- wc = (BYTE)*label++;
- if (dbc_1st((BYTE)wc)) wc = dbc_2nd((BYTE)*label) ? wc << 8 | (BYTE)*label++ : 0;
- if (IsLower(wc)) wc -= 0x20; /* To upper ASCII characters */
-#if FF_CODE_PAGE == 0
- if (ExCvt && wc >= 0x80) wc = ExCvt[wc - 0x80]; /* To upper extended characters (SBCS cfg) */
-#elif FF_CODE_PAGE < 900
- if (wc >= 0x80) wc = ExCvt[wc - 0x80]; /* To upper extended characters (SBCS cfg) */
-#endif
-#endif
- if (wc == 0 || chk_chr(badchr + 0, (int)wc) || di >= (UINT)((wc >= 0x100) ? 10 : 11)) { /* Reject invalid characters for volume label */
- LEAVE_FF(fs, FR_INVALID_NAME);
- }
- if (wc >= 0x100) dirvn[di++] = (BYTE)(wc >> 8);
- dirvn[di++] = (BYTE)wc;
- }
- if (dirvn[0] == DDEM) LEAVE_FF(fs, FR_INVALID_NAME); /* Reject illegal name (heading DDEM) */
- while (di && dirvn[di - 1] == ' ') di--; /* Snip trailing spaces */
- }
-
- /* Set volume label */
- dj.obj.fs = fs; dj.obj.sclust = 0; /* Open root directory */
- res = dir_sdi(&dj, 0);
- if (res == FR_OK) {
- res = dir_read_label(&dj); /* Get volume label entry */
- if (res == FR_OK) {
- if (FF_FS_EXFAT && fs->fs_type == FS_EXFAT) {
- dj.dir[XDIR_NumLabel] = (BYTE)di; /* Change the volume label */
- mem_cpy(dj.dir + XDIR_Label, dirvn, 22);
- } else {
- if (di != 0) {
- mem_cpy(dj.dir, dirvn, 11); /* Change the volume label */
- } else {
- dj.dir[DIR_Name] = DDEM; /* Remove the volume label */
- }
- }
- fs->wflag = 1;
- res = sync_fs(fs);
- } else { /* No volume label entry or an error */
- if (res == FR_NO_FILE) {
- res = FR_OK;
- if (di != 0) { /* Create a volume label entry */
- res = dir_alloc(&dj, 1); /* Allocate an entry */
- if (res == FR_OK) {
- mem_set(dj.dir, 0, SZDIRE); /* Clean the entry */
- if (FF_FS_EXFAT && fs->fs_type == FS_EXFAT) {
- dj.dir[XDIR_Type] = 0x83; /* Create 83 entry */
- dj.dir[XDIR_NumLabel] = (BYTE)di;
- mem_cpy(dj.dir + XDIR_Label, dirvn, 22);
- } else {
- dj.dir[DIR_Attr] = AM_VOL; /* Create volume label entry */
- mem_cpy(dj.dir, dirvn, 11);
- }
- fs->wflag = 1;
- res = sync_fs(fs);
- }
- }
- }
- }
- }
-
- LEAVE_FF(fs, res);
-}
-
-#endif /* !FF_FS_READONLY */
-#endif /* FF_USE_LABEL */
-
-
-
-#if FF_USE_EXPAND && !FF_FS_READONLY
-/*-----------------------------------------------------------------------*/
-/* Allocate a Contiguous Blocks to the File */
-/*-----------------------------------------------------------------------*/
-
-FRESULT f_expand (
- FIL* fp, /* Pointer to the file object */
- FSIZE_t fsz, /* File size to be expanded to */
- BYTE opt /* Operation mode 0:Find and prepare or 1:Find and allocate */
-)
-{
- FRESULT res;
- FATFS *fs;
- DWORD n, clst, stcl, scl, ncl, tcl, lclst;
-
-
- res = validate(&fp->obj, &fs); /* Check validity of the file object */
- if (res != FR_OK || (res = (FRESULT)fp->err) != FR_OK) LEAVE_FF(fs, res);
- if (fsz == 0 || fp->obj.objsize != 0 || !(fp->flag & FA_WRITE)) LEAVE_FF(fs, FR_DENIED);
-#if FF_FS_EXFAT
- if (fs->fs_type != FS_EXFAT && fsz >= 0x100000000) LEAVE_FF(fs, FR_DENIED); /* Check if in size limit */
-#endif
- n = (DWORD)fs->csize * SS(fs); /* Cluster size */
- tcl = (DWORD)(fsz / n) + ((fsz & (n - 1)) ? 1 : 0); /* Number of clusters required */
- stcl = fs->last_clst; lclst = 0;
- if (stcl < 2 || stcl >= fs->n_fatent) stcl = 2;
-
-#if FF_FS_EXFAT
- if (fs->fs_type == FS_EXFAT) {
- scl = find_bitmap(fs, stcl, tcl); /* Find a contiguous cluster block */
- if (scl == 0) res = FR_DENIED; /* No contiguous cluster block was found */
- if (scl == 0xFFFFFFFF) res = FR_DISK_ERR;
- if (res == FR_OK) { /* A contiguous free area is found */
- if (opt) { /* Allocate it now */
- res = change_bitmap(fs, scl, tcl, 1); /* Mark the cluster block 'in use' */
- lclst = scl + tcl - 1;
- } else { /* Set it as suggested point for next allocation */
- lclst = scl - 1;
- }
- }
- } else
-#endif
- {
- scl = clst = stcl; ncl = 0;
- for (;;) { /* Find a contiguous cluster block */
- n = get_fat(&fp->obj, clst);
- if (++clst >= fs->n_fatent) clst = 2;
- if (n == 1) { res = FR_INT_ERR; break; }
- if (n == 0xFFFFFFFF) { res = FR_DISK_ERR; break; }
- if (n == 0) { /* Is it a free cluster? */
- if (++ncl == tcl) break; /* Break if a contiguous cluster block is found */
- } else {
- scl = clst; ncl = 0; /* Not a free cluster */
- }
- if (clst == stcl) { res = FR_DENIED; break; } /* No contiguous cluster? */
- }
- if (res == FR_OK) { /* A contiguous free area is found */
- if (opt) { /* Allocate it now */
- for (clst = scl, n = tcl; n; clst++, n--) { /* Create a cluster chain on the FAT */
- res = put_fat(fs, clst, (n == 1) ? 0xFFFFFFFF : clst + 1);
- if (res != FR_OK) break;
- lclst = clst;
- }
- } else { /* Set it as suggested point for next allocation */
- lclst = scl - 1;
- }
- }
- }
-
- if (res == FR_OK) {
- fs->last_clst = lclst; /* Set suggested start cluster to start next */
- if (opt) { /* Is it allocated now? */
- fp->obj.sclust = scl; /* Update object allocation information */
- fp->obj.objsize = fsz;
- if (FF_FS_EXFAT) fp->obj.stat = 2; /* Set status 'contiguous chain' */
- fp->flag |= FA_MODIFIED;
- if (fs->free_clst <= fs->n_fatent - 2) { /* Update FSINFO */
- fs->free_clst -= tcl;
- fs->fsi_flag |= 1;
- }
- }
- }
-
- LEAVE_FF(fs, res);
-}
-
-#endif /* FF_USE_EXPAND && !FF_FS_READONLY */
-
-
-
-#if FF_USE_FORWARD
-/*-----------------------------------------------------------------------*/
-/* Forward Data to the Stream Directly */
-/*-----------------------------------------------------------------------*/
-
-FRESULT f_forward (
- FIL* fp, /* Pointer to the file object */
- UINT (*func)(const BYTE*,UINT), /* Pointer to the streaming function */
- UINT btf, /* Number of bytes to forward */
- UINT* bf /* Pointer to number of bytes forwarded */
-)
-{
- FRESULT res;
- FATFS *fs;
- DWORD clst, sect;
- FSIZE_t remain;
- UINT rcnt, csect;
- BYTE *dbuf;
-
-
- *bf = 0; /* Clear transfer byte counter */
- res = validate(&fp->obj, &fs); /* Check validity of the file object */
- if (res != FR_OK || (res = (FRESULT)fp->err) != FR_OK) LEAVE_FF(fs, res);
- if (!(fp->flag & FA_READ)) LEAVE_FF(fs, FR_DENIED); /* Check access mode */
-
- remain = fp->obj.objsize - fp->fptr;
- if (btf > remain) btf = (UINT)remain; /* Truncate btf by remaining bytes */
-
- for ( ; btf && (*func)(0, 0); /* Repeat until all data transferred or stream goes busy */
- fp->fptr += rcnt, *bf += rcnt, btf -= rcnt) {
- csect = (UINT)(fp->fptr / SS(fs) & (fs->csize - 1)); /* Sector offset in the cluster */
- if (fp->fptr % SS(fs) == 0) { /* On the sector boundary? */
- if (csect == 0) { /* On the cluster boundary? */
- clst = (fp->fptr == 0) ? /* On the top of the file? */
- fp->obj.sclust : get_fat(&fp->obj, fp->clust);
- if (clst <= 1) ABORT(fs, FR_INT_ERR);
- if (clst == 0xFFFFFFFF) ABORT(fs, FR_DISK_ERR);
- fp->clust = clst; /* Update current cluster */
- }
- }
- sect = clst2sect(fs, fp->clust); /* Get current data sector */
- if (sect == 0) ABORT(fs, FR_INT_ERR);
- sect += csect;
-#if FF_FS_TINY
- if (move_window(fs, sect) != FR_OK) ABORT(fs, FR_DISK_ERR); /* Move sector window to the file data */
- dbuf = fs->win;
-#else
- if (fp->sect != sect) { /* Fill sector cache with file data */
-#if !FF_FS_READONLY
- if (fp->flag & FA_DIRTY) { /* Write-back dirty sector cache */
- if (disk_write(fs->pdrv, fp->buf, fp->sect, 1) != RES_OK) ABORT(fs, FR_DISK_ERR);
- fp->flag &= (BYTE)~FA_DIRTY;
- }
-#endif
- if (disk_read(fs->pdrv, fp->buf, sect, 1) != RES_OK) ABORT(fs, FR_DISK_ERR);
- }
- dbuf = fp->buf;
-#endif
- fp->sect = sect;
- rcnt = SS(fs) - (UINT)fp->fptr % SS(fs); /* Number of bytes left in the sector */
- if (rcnt > btf) rcnt = btf; /* Clip it by btr if needed */
- rcnt = (*func)(dbuf + ((UINT)fp->fptr % SS(fs)), rcnt); /* Forward the file data */
- if (rcnt == 0) ABORT(fs, FR_INT_ERR);
- }
-
- LEAVE_FF(fs, FR_OK);
-}
-#endif /* FF_USE_FORWARD */
-
-
-
-#if FF_USE_MKFS && !FF_FS_READONLY
-/*-----------------------------------------------------------------------*/
-/* Create an FAT/exFAT volume */
-/*-----------------------------------------------------------------------*/
-
-FRESULT f_mkfs (
- const TCHAR* path, /* Logical drive number */
- BYTE opt, /* Format option */
- DWORD au, /* Size of allocation unit (cluster) [byte] */
- void* work, /* Pointer to working buffer (null: use heap memory) */
- UINT len /* Size of working buffer [byte] */
-)
-{
- const UINT n_fats = 1; /* Number of FATs for FAT/FAT32 volume (1 or 2) */
- const UINT n_rootdir = 512; /* Number of root directory entries for FAT volume */
- static const WORD cst[] = {1, 4, 16, 64, 256, 512, 0}; /* Cluster size boundary for FAT volume (4Ks unit) */
- static const WORD cst32[] = {1, 2, 4, 8, 16, 32, 0}; /* Cluster size boundary for FAT32 volume (128Ks unit) */
- BYTE fmt, sys, *buf, *pte, pdrv, part;
- WORD ss; /* Sector size */
- DWORD szb_buf, sz_buf, sz_blk, n_clst, pau, sect, nsect, n;
- DWORD b_vol, b_fat, b_data; /* Base LBA for volume, fat, data */
- DWORD sz_vol, sz_rsv, sz_fat, sz_dir; /* Size for volume, fat, dir, data */
- UINT i;
- int vol;
- DSTATUS stat;
-#if FF_USE_TRIM || FF_FS_EXFAT
- DWORD tbl[3];
-#endif
-
-
- /* Check mounted drive and clear work area */
- vol = get_ldnumber(&path); /* Get target logical drive */
- if (vol < 0) return FR_INVALID_DRIVE;
- if (FatFs[vol]) FatFs[vol]->fs_type = 0; /* Clear the volume if mounted */
- pdrv = LD2PD(vol); /* Physical drive */
- part = LD2PT(vol); /* Partition (0:create as new, 1-4:get from partition table) */
-
- /* Check physical drive status */
- stat = disk_initialize(pdrv);
- if (stat & STA_NOINIT) return FR_NOT_READY;
- if (stat & STA_PROTECT) return FR_WRITE_PROTECTED;
- if (disk_ioctl(pdrv, GET_BLOCK_SIZE, &sz_blk) != RES_OK || !sz_blk || sz_blk > 32768 || (sz_blk & (sz_blk - 1))) sz_blk = 1; /* Erase block to align data area */
-#if FF_MAX_SS != FF_MIN_SS /* Get sector size of the medium if variable sector size cfg. */
- if (disk_ioctl(pdrv, GET_SECTOR_SIZE, &ss) != RES_OK) return FR_DISK_ERR;
- if (ss > FF_MAX_SS || ss < FF_MIN_SS || (ss & (ss - 1))) return FR_DISK_ERR;
-#else
- ss = FF_MAX_SS;
-#endif
- if ((au != 0 && au < ss) || au > 0x1000000 || (au & (au - 1))) return FR_INVALID_PARAMETER; /* Check if au is valid */
- au /= ss; /* Cluster size in unit of sector */
-
- /* Get working buffer */
-#if FF_USE_LFN == 3
- if (!work) { /* Use heap memory for working buffer */
- for (szb_buf = MAX_MALLOC, buf = 0; szb_buf >= ss && (buf = ff_memalloc(szb_buf)) == 0; szb_buf /= 2) ;
- sz_buf = szb_buf / ss; /* Size of working buffer (sector) */
- } else
-#endif
- {
- buf = (BYTE*)work; /* Working buffer */
- sz_buf = len / ss; /* Size of working buffer (sector) */
- szb_buf = sz_buf * ss; /* Size of working buffer (byte) */
- }
- if (!buf || sz_buf == 0) return FR_NOT_ENOUGH_CORE;
-
- /* Determine where the volume to be located (b_vol, sz_vol) */
- if (FF_MULTI_PARTITION && part != 0) {
- /* Get partition information from partition table in the MBR */
- if (disk_read(pdrv, buf, 0, 1) != RES_OK) LEAVE_MKFS(FR_DISK_ERR); /* Load MBR */
- if (ld_word(buf + BS_55AA) != 0xAA55) LEAVE_MKFS(FR_MKFS_ABORTED); /* Check if MBR is valid */
- pte = buf + (MBR_Table + (part - 1) * SZ_PTE);
- if (pte[PTE_System] == 0) LEAVE_MKFS(FR_MKFS_ABORTED); /* No partition? */
- b_vol = ld_dword(pte + PTE_StLba); /* Get volume start sector */
- sz_vol = ld_dword(pte + PTE_SizLba); /* Get volume size */
- } else {
- /* Create a single-partition in this function */
- if (disk_ioctl(pdrv, GET_SECTOR_COUNT, &sz_vol) != RES_OK) LEAVE_MKFS(FR_DISK_ERR);
- b_vol = (opt & FM_SFD) ? 0 : 63; /* Volume start sector */
- if (sz_vol < b_vol) LEAVE_MKFS(FR_MKFS_ABORTED);
- sz_vol -= b_vol; /* Volume size */
- }
- if (sz_vol < 128) LEAVE_MKFS(FR_MKFS_ABORTED); /* Check if volume size is >=128s */
-
- /* Pre-determine the FAT type */
- do {
- if (FF_FS_EXFAT && (opt & FM_EXFAT)) { /* exFAT possible? */
- if ((opt & FM_ANY) == FM_EXFAT || sz_vol >= 0x4000000 || au > 128) { /* exFAT only, vol >= 64Ms or au > 128s ? */
- fmt = FS_EXFAT; break;
- }
- }
- if (au > 128) LEAVE_MKFS(FR_INVALID_PARAMETER); /* Too large au for FAT/FAT32 */
- if (opt & FM_FAT32) { /* FAT32 possible? */
- if ((opt & FM_ANY) == FM_FAT32 || !(opt & FM_FAT)) { /* FAT32 only or no-FAT? */
- fmt = FS_FAT32; break;
- }
- }
- if (!(opt & FM_FAT)) LEAVE_MKFS(FR_INVALID_PARAMETER); /* no-FAT? */
- fmt = FS_FAT16;
- } while (0);
-
-#if FF_FS_EXFAT
- if (fmt == FS_EXFAT) { /* Create an exFAT volume */
- DWORD szb_bit, szb_case, sum, nb, cl;
- WCHAR ch, si;
- UINT j, st;
- BYTE b;
-
- if (sz_vol < 0x1000) LEAVE_MKFS(FR_MKFS_ABORTED); /* Too small volume? */
-#if FF_USE_TRIM
- tbl[0] = b_vol; tbl[1] = b_vol + sz_vol - 1; /* Inform the device the volume area may be erased */
- disk_ioctl(pdrv, CTRL_TRIM, tbl);
-#endif
- /* Determine FAT location, data location and number of clusters */
- if (au == 0) { /* au auto-selection */
- au = 8;
- if (sz_vol >= 0x80000) au = 64; /* >= 512Ks */
- if (sz_vol >= 0x4000000) au = 256; /* >= 64Ms */
- }
- b_fat = b_vol + 32; /* FAT start at offset 32 */
- sz_fat = ((sz_vol / au + 2) * 4 + ss - 1) / ss; /* Number of FAT sectors */
- b_data = (b_fat + sz_fat + sz_blk - 1) & ~(sz_blk - 1); /* Align data area to the erase block boundary */
- if (b_data >= sz_vol / 2) LEAVE_MKFS(FR_MKFS_ABORTED); /* Too small volume? */
- n_clst = (sz_vol - (b_data - b_vol)) / au; /* Number of clusters */
- if (n_clst <16) LEAVE_MKFS(FR_MKFS_ABORTED); /* Too few clusters? */
- if (n_clst > MAX_EXFAT) LEAVE_MKFS(FR_MKFS_ABORTED); /* Too many clusters? */
-
- szb_bit = (n_clst + 7) / 8; /* Size of allocation bitmap */
- tbl[0] = (szb_bit + au * ss - 1) / (au * ss); /* Number of allocation bitmap clusters */
-
- /* Create a compressed up-case table */
- sect = b_data + au * tbl[0]; /* Table start sector */
- sum = 0; /* Table checksum to be stored in the 82 entry */
- st = 0; si = 0; i = 0; j = 0; szb_case = 0;
- do {
- switch (st) {
- case 0:
- ch = (WCHAR)ff_wtoupper(si); /* Get an up-case char */
- if (ch != si) {
- si++; break; /* Store the up-case char if exist */
- }
- for (j = 1; (WCHAR)(si + j) && (WCHAR)(si + j) == ff_wtoupper((WCHAR)(si + j)); j++) ; /* Get run length of no-case block */
- if (j >= 128) {
- ch = 0xFFFF; st = 2; break; /* Compress the no-case block if run is >= 128 */
- }
- st = 1; /* Do not compress short run */
- /* go to next case */
- case 1:
- ch = si++; /* Fill the short run */
- if (--j == 0) st = 0;
- break;
-
- default:
- ch = (WCHAR)j; si += (WCHAR)j; /* Number of chars to skip */
- st = 0;
- }
- sum = xsum32(buf[i + 0] = (BYTE)ch, sum); /* Put it into the write buffer */
- sum = xsum32(buf[i + 1] = (BYTE)(ch >> 8), sum);
- i += 2; szb_case += 2;
- if (si == 0 || i == szb_buf) { /* Write buffered data when buffer full or end of process */
- n = (i + ss - 1) / ss;
- if (disk_write(pdrv, buf, sect, n) != RES_OK) LEAVE_MKFS(FR_DISK_ERR);
- sect += n; i = 0;
- }
- } while (si);
- tbl[1] = (szb_case + au * ss - 1) / (au * ss); /* Number of up-case table clusters */
- tbl[2] = 1; /* Number of root dir clusters */
-
- /* Initialize the allocation bitmap */
- sect = b_data; nsect = (szb_bit + ss - 1) / ss; /* Start of bitmap and number of sectors */
- nb = tbl[0] + tbl[1] + tbl[2]; /* Number of clusters in-use by system */
- do {
- mem_set(buf, 0, szb_buf);
- for (i = 0; nb >= 8 && i < szb_buf; buf[i++] = 0xFF, nb -= 8) ;
- for (b = 1; nb != 0 && i < szb_buf; buf[i] |= b, b <<= 1, nb--) ;
- n = (nsect > sz_buf) ? sz_buf : nsect; /* Write the buffered data */
- if (disk_write(pdrv, buf, sect, n) != RES_OK) LEAVE_MKFS(FR_DISK_ERR);
- sect += n; nsect -= n;
- } while (nsect);
-
- /* Initialize the FAT */
- sect = b_fat; nsect = sz_fat; /* Start of FAT and number of FAT sectors */
- j = nb = cl = 0;
- do {
- mem_set(buf, 0, szb_buf); i = 0; /* Clear work area and reset write index */
- if (cl == 0) { /* Set entry 0 and 1 */
- st_dword(buf + i, 0xFFFFFFF8); i += 4; cl++;
- st_dword(buf + i, 0xFFFFFFFF); i += 4; cl++;
- }
- do { /* Create chains of bitmap, up-case and root dir */
- while (nb != 0 && i < szb_buf) { /* Create a chain */
- st_dword(buf + i, (nb > 1) ? cl + 1 : 0xFFFFFFFF);
- i += 4; cl++; nb--;
- }
- if (nb == 0 && j < 3) nb = tbl[j++]; /* Next chain */
- } while (nb != 0 && i < szb_buf);
- n = (nsect > sz_buf) ? sz_buf : nsect; /* Write the buffered data */
- if (disk_write(pdrv, buf, sect, n) != RES_OK) LEAVE_MKFS(FR_DISK_ERR);
- sect += n; nsect -= n;
- } while (nsect);
-
- /* Initialize the root directory */
- mem_set(buf, 0, szb_buf);
- buf[SZDIRE * 0 + 0] = 0x83; /* 83 entry (volume label) */
- buf[SZDIRE * 1 + 0] = 0x81; /* 81 entry (allocation bitmap) */
- st_dword(buf + SZDIRE * 1 + 20, 2); /* cluster */
- st_dword(buf + SZDIRE * 1 + 24, szb_bit); /* size */
- buf[SZDIRE * 2 + 0] = 0x82; /* 82 entry (up-case table) */
- st_dword(buf + SZDIRE * 2 + 4, sum); /* sum */
- st_dword(buf + SZDIRE * 2 + 20, 2 + tbl[0]); /* cluster */
- st_dword(buf + SZDIRE * 2 + 24, szb_case); /* size */
- sect = b_data + au * (tbl[0] + tbl[1]); nsect = au; /* Start of the root directory and number of sectors */
- do { /* Fill root directory sectors */
- n = (nsect > sz_buf) ? sz_buf : nsect;
- if (disk_write(pdrv, buf, sect, n) != RES_OK) LEAVE_MKFS(FR_DISK_ERR);
- mem_set(buf, 0, ss);
- sect += n; nsect -= n;
- } while (nsect);
-
- /* Create two set of the exFAT VBR blocks */
- sect = b_vol;
- for (n = 0; n < 2; n++) {
- /* Main record (+0) */
- mem_set(buf, 0, ss);
- mem_cpy(buf + BS_JmpBoot, "\xEB\x76\x90" "EXFAT ", 11); /* Boot jump code (x86), OEM name */
- st_dword(buf + BPB_VolOfsEx, b_vol); /* Volume offset in the physical drive [sector] */
- st_dword(buf + BPB_TotSecEx, sz_vol); /* Volume size [sector] */
- st_dword(buf + BPB_FatOfsEx, b_fat - b_vol); /* FAT offset [sector] */
- st_dword(buf + BPB_FatSzEx, sz_fat); /* FAT size [sector] */
- st_dword(buf + BPB_DataOfsEx, b_data - b_vol); /* Data offset [sector] */
- st_dword(buf + BPB_NumClusEx, n_clst); /* Number of clusters */
- st_dword(buf + BPB_RootClusEx, 2 + tbl[0] + tbl[1]); /* Root dir cluster # */
- st_dword(buf + BPB_VolIDEx, GET_FATTIME()); /* VSN */
- st_word(buf + BPB_FSVerEx, 0x100); /* Filesystem version (1.00) */
- for (buf[BPB_BytsPerSecEx] = 0, i = ss; i >>= 1; buf[BPB_BytsPerSecEx]++) ; /* Log2 of sector size [byte] */
- for (buf[BPB_SecPerClusEx] = 0, i = au; i >>= 1; buf[BPB_SecPerClusEx]++) ; /* Log2 of cluster size [sector] */
- buf[BPB_NumFATsEx] = 1; /* Number of FATs */
- buf[BPB_DrvNumEx] = 0x80; /* Drive number (for int13) */
- st_word(buf + BS_BootCodeEx, 0xFEEB); /* Boot code (x86) */
- st_word(buf + BS_55AA, 0xAA55); /* Signature (placed here regardless of sector size) */
- for (i = sum = 0; i < ss; i++) { /* VBR checksum */
- if (i != BPB_VolFlagEx && i != BPB_VolFlagEx + 1 && i != BPB_PercInUseEx) sum = xsum32(buf[i], sum);
- }
- if (disk_write(pdrv, buf, sect++, 1) != RES_OK) LEAVE_MKFS(FR_DISK_ERR);
- /* Extended bootstrap record (+1..+8) */
- mem_set(buf, 0, ss);
- st_word(buf + ss - 2, 0xAA55); /* Signature (placed at end of sector) */
- for (j = 1; j < 9; j++) {
- for (i = 0; i < ss; sum = xsum32(buf[i++], sum)) ; /* VBR checksum */
- if (disk_write(pdrv, buf, sect++, 1) != RES_OK) LEAVE_MKFS(FR_DISK_ERR);
- }
- /* OEM/Reserved record (+9..+10) */
- mem_set(buf, 0, ss);
- for ( ; j < 11; j++) {
- for (i = 0; i < ss; sum = xsum32(buf[i++], sum)) ; /* VBR checksum */
- if (disk_write(pdrv, buf, sect++, 1) != RES_OK) LEAVE_MKFS(FR_DISK_ERR);
- }
- /* Sum record (+11) */
- for (i = 0; i < ss; i += 4) st_dword(buf + i, sum); /* Fill with checksum value */
- if (disk_write(pdrv, buf, sect++, 1) != RES_OK) LEAVE_MKFS(FR_DISK_ERR);
- }
-
- } else
-#endif /* FF_FS_EXFAT */
- { /* Create an FAT/FAT32 volume */
- do {
- pau = au;
- /* Pre-determine number of clusters and FAT sub-type */
- if (fmt == FS_FAT32) { /* FAT32 volume */
- if (pau == 0) { /* au auto-selection */
- n = sz_vol / 0x20000; /* Volume size in unit of 128KS */
- for (i = 0, pau = 1; cst32[i] && cst32[i] <= n; i++, pau <<= 1) ; /* Get from table */
- }
- n_clst = sz_vol / pau; /* Number of clusters */
- sz_fat = (n_clst * 4 + 8 + ss - 1) / ss; /* FAT size [sector] */
- sz_rsv = 32; /* Number of reserved sectors */
- sz_dir = 0; /* No static directory */
- if (n_clst <= MAX_FAT16 || n_clst > MAX_FAT32) LEAVE_MKFS(FR_MKFS_ABORTED);
- } else { /* FAT volume */
- if (pau == 0) { /* au auto-selection */
- n = sz_vol / 0x1000; /* Volume size in unit of 4KS */
- for (i = 0, pau = 1; cst[i] && cst[i] <= n; i++, pau <<= 1) ; /* Get from table */
- }
- n_clst = sz_vol / pau;
- if (n_clst > MAX_FAT12) {
- n = n_clst * 2 + 4; /* FAT size [byte] */
- } else {
- fmt = FS_FAT12;
- n = (n_clst * 3 + 1) / 2 + 3; /* FAT size [byte] */
- }
- sz_fat = (n + ss - 1) / ss; /* FAT size [sector] */
- sz_rsv = 1; /* Number of reserved sectors */
- sz_dir = (DWORD)n_rootdir * SZDIRE / ss; /* Rootdir size [sector] */
- }
- b_fat = b_vol + sz_rsv; /* FAT base */
- b_data = b_fat + sz_fat * n_fats + sz_dir; /* Data base */
-
- /* Align data base to erase block boundary (for flash memory media) */
- n = ((b_data + sz_blk - 1) & ~(sz_blk - 1)) - b_data; /* Next nearest erase block from current data base */
- if (fmt == FS_FAT32) { /* FAT32: Move FAT base */
- sz_rsv += n; b_fat += n;
- } else { /* FAT: Expand FAT size */
- sz_fat += n / n_fats;
- }
-
- /* Determine number of clusters and final check of validity of the FAT sub-type */
- if (sz_vol < b_data + pau * 16 - b_vol) LEAVE_MKFS(FR_MKFS_ABORTED); /* Too small volume */
- n_clst = (sz_vol - sz_rsv - sz_fat * n_fats - sz_dir) / pau;
- if (fmt == FS_FAT32) {
- if (n_clst <= MAX_FAT16) { /* Too few clusters for FAT32 */
- if (au == 0 && (au = pau / 2) != 0) continue; /* Adjust cluster size and retry */
- LEAVE_MKFS(FR_MKFS_ABORTED);
- }
- }
- if (fmt == FS_FAT16) {
- if (n_clst > MAX_FAT16) { /* Too many clusters for FAT16 */
- if (au == 0 && (pau * 2) <= 64) {
- au = pau * 2; continue; /* Adjust cluster size and retry */
- }
- if ((opt & FM_FAT32)) {
- fmt = FS_FAT32; continue; /* Switch type to FAT32 and retry */
- }
- if (au == 0 && (au = pau * 2) <= 128) continue; /* Adjust cluster size and retry */
- LEAVE_MKFS(FR_MKFS_ABORTED);
- }
- if (n_clst <= MAX_FAT12) { /* Too few clusters for FAT16 */
- if (au == 0 && (au = pau * 2) <= 128) continue; /* Adjust cluster size and retry */
- LEAVE_MKFS(FR_MKFS_ABORTED);
- }
- }
- if (fmt == FS_FAT12 && n_clst > MAX_FAT12) LEAVE_MKFS(FR_MKFS_ABORTED); /* Too many clusters for FAT12 */
-
- /* Ok, it is the valid cluster configuration */
- break;
- } while (1);
-
-#if FF_USE_TRIM
- tbl[0] = b_vol; tbl[1] = b_vol + sz_vol - 1; /* Inform the device the volume area can be erased */
- disk_ioctl(pdrv, CTRL_TRIM, tbl);
-#endif
- /* Create FAT VBR */
- mem_set(buf, 0, ss);
- mem_cpy(buf + BS_JmpBoot, "\xEB\xFE\x90" "MSDOS5.0", 11);/* Boot jump code (x86), OEM name */
- st_word(buf + BPB_BytsPerSec, ss); /* Sector size [byte] */
- buf[BPB_SecPerClus] = (BYTE)pau; /* Cluster size [sector] */
- st_word(buf + BPB_RsvdSecCnt, (WORD)sz_rsv); /* Size of reserved area */
- buf[BPB_NumFATs] = (BYTE)n_fats; /* Number of FATs */
- st_word(buf + BPB_RootEntCnt, (WORD)((fmt == FS_FAT32) ? 0 : n_rootdir)); /* Number of root directory entries */
- if (sz_vol < 0x10000) {
- st_word(buf + BPB_TotSec16, (WORD)sz_vol); /* Volume size in 16-bit LBA */
- } else {
- st_dword(buf + BPB_TotSec32, sz_vol); /* Volume size in 32-bit LBA */
- }
- buf[BPB_Media] = 0xF8; /* Media descriptor byte */
- st_word(buf + BPB_SecPerTrk, 63); /* Number of sectors per track (for int13) */
- st_word(buf + BPB_NumHeads, 255); /* Number of heads (for int13) */
- st_dword(buf + BPB_HiddSec, b_vol); /* Volume offset in the physical drive [sector] */
- if (fmt == FS_FAT32) {
- st_dword(buf + BS_VolID32, GET_FATTIME()); /* VSN */
- st_dword(buf + BPB_FATSz32, sz_fat); /* FAT size [sector] */
- st_dword(buf + BPB_RootClus32, 2); /* Root directory cluster # (2) */
- st_word(buf + BPB_FSInfo32, 1); /* Offset of FSINFO sector (VBR + 1) */
- st_word(buf + BPB_BkBootSec32, 6); /* Offset of backup VBR (VBR + 6) */
- buf[BS_DrvNum32] = 0x80; /* Drive number (for int13) */
- buf[BS_BootSig32] = 0x29; /* Extended boot signature */
- mem_cpy(buf + BS_VolLab32, "NO NAME " "FAT32 ", 19); /* Volume label, FAT signature */
- } else {
- st_dword(buf + BS_VolID, GET_FATTIME()); /* VSN */
- st_word(buf + BPB_FATSz16, (WORD)sz_fat); /* FAT size [sector] */
- buf[BS_DrvNum] = 0x80; /* Drive number (for int13) */
- buf[BS_BootSig] = 0x29; /* Extended boot signature */
- mem_cpy(buf + BS_VolLab, "NO NAME " "FAT ", 19); /* Volume label, FAT signature */
- }
- st_word(buf + BS_55AA, 0xAA55); /* Signature (offset is fixed here regardless of sector size) */
- if (disk_write(pdrv, buf, b_vol, 1) != RES_OK) LEAVE_MKFS(FR_DISK_ERR); /* Write it to the VBR sector */
-
- /* Create FSINFO record if needed */
- if (fmt == FS_FAT32) {
- disk_write(pdrv, buf, b_vol + 6, 1); /* Write backup VBR (VBR + 6) */
- mem_set(buf, 0, ss);
- st_dword(buf + FSI_LeadSig, 0x41615252);
- st_dword(buf + FSI_StrucSig, 0x61417272);
- st_dword(buf + FSI_Free_Count, n_clst - 1); /* Number of free clusters */
- st_dword(buf + FSI_Nxt_Free, 2); /* Last allocated cluster# */
- st_word(buf + BS_55AA, 0xAA55);
- disk_write(pdrv, buf, b_vol + 7, 1); /* Write backup FSINFO (VBR + 7) */
- disk_write(pdrv, buf, b_vol + 1, 1); /* Write original FSINFO (VBR + 1) */
- }
-
- /* Initialize FAT area */
- mem_set(buf, 0, (UINT)szb_buf);
- sect = b_fat; /* FAT start sector */
- for (i = 0; i < n_fats; i++) { /* Initialize FATs each */
- if (fmt == FS_FAT32) {
- st_dword(buf + 0, 0xFFFFFFF8); /* Entry 0 */
- st_dword(buf + 4, 0xFFFFFFFF); /* Entry 1 */
- st_dword(buf + 8, 0x0FFFFFFF); /* Entry 2 (root directory) */
- } else {
- st_dword(buf + 0, (fmt == FS_FAT12) ? 0xFFFFF8 : 0xFFFFFFF8); /* Entry 0 and 1 */
- }
- nsect = sz_fat; /* Number of FAT sectors */
- do { /* Fill FAT sectors */
- n = (nsect > sz_buf) ? sz_buf : nsect;
- if (disk_write(pdrv, buf, sect, (UINT)n) != RES_OK) LEAVE_MKFS(FR_DISK_ERR);
- mem_set(buf, 0, ss);
- sect += n; nsect -= n;
- } while (nsect);
- }
-
- /* Initialize root directory (fill with zero) */
- nsect = (fmt == FS_FAT32) ? pau : sz_dir; /* Number of root directory sectors */
- do {
- n = (nsect > sz_buf) ? sz_buf : nsect;
- if (disk_write(pdrv, buf, sect, (UINT)n) != RES_OK) LEAVE_MKFS(FR_DISK_ERR);
- sect += n; nsect -= n;
- } while (nsect);
- }
-
- /* Determine system ID in the partition table */
- if (FF_FS_EXFAT && fmt == FS_EXFAT) {
- sys = 0x07; /* HPFS/NTFS/exFAT */
- } else {
- if (fmt == FS_FAT32) {
- sys = 0x0C; /* FAT32X */
- } else {
- if (sz_vol >= 0x10000) {
- sys = 0x06; /* FAT12/16 (large) */
- } else {
- sys = (fmt == FS_FAT16) ? 0x04 : 0x01; /* FAT16 : FAT12 */
- }
- }
- }
-
- /* Update partition information */
- if (FF_MULTI_PARTITION && part != 0) { /* Created in the existing partition */
- /* Update system ID in the partition table */
- if (disk_read(pdrv, buf, 0, 1) != RES_OK) LEAVE_MKFS(FR_DISK_ERR); /* Read the MBR */
- buf[MBR_Table + (part - 1) * SZ_PTE + PTE_System] = sys; /* Set system ID */
- if (disk_write(pdrv, buf, 0, 1) != RES_OK) LEAVE_MKFS(FR_DISK_ERR); /* Write it back to the MBR */
- } else { /* Created as a new single partition */
- if (!(opt & FM_SFD)) { /* Create partition table if in FDISK format */
- mem_set(buf, 0, ss);
- st_word(buf + BS_55AA, 0xAA55); /* MBR signature */
- pte = buf + MBR_Table; /* Create partition table for single partition in the drive */
- pte[PTE_Boot] = 0; /* Boot indicator */
- pte[PTE_StHead] = 1; /* Start head */
- pte[PTE_StSec] = 1; /* Start sector */
- pte[PTE_StCyl] = 0; /* Start cylinder */
- pte[PTE_System] = sys; /* System type */
- n = (b_vol + sz_vol) / (63 * 255); /* (End CHS may be invalid) */
- pte[PTE_EdHead] = 254; /* End head */
- pte[PTE_EdSec] = (BYTE)(((n >> 2) & 0xC0) | 63); /* End sector */
- pte[PTE_EdCyl] = (BYTE)n; /* End cylinder */
- st_dword(pte + PTE_StLba, b_vol); /* Start offset in LBA */
- st_dword(pte + PTE_SizLba, sz_vol); /* Size in sectors */
- if (disk_write(pdrv, buf, 0, 1) != RES_OK) LEAVE_MKFS(FR_DISK_ERR); /* Write it to the MBR */
- }
- }
-
- if (disk_ioctl(pdrv, CTRL_SYNC, 0) != RES_OK) LEAVE_MKFS(FR_DISK_ERR);
-
- LEAVE_MKFS(FR_OK);
-}
-
-
-
-#if FF_MULTI_PARTITION
-/*-----------------------------------------------------------------------*/
-/* Create Partition Table on the Physical Drive */
-/*-----------------------------------------------------------------------*/
-
-FRESULT f_fdisk (
- BYTE pdrv, /* Physical drive number */
- const DWORD* szt, /* Pointer to the size table for each partitions */
- void* work /* Pointer to the working buffer (null: use heap memory) */
-)
-{
- UINT i, n, sz_cyl, tot_cyl, b_cyl, e_cyl, p_cyl;
- BYTE s_hd, e_hd, *p, *buf = (BYTE*)work;
- DSTATUS stat;
- DWORD sz_disk, sz_part, s_part;
- FRESULT res;
-
-
- stat = disk_initialize(pdrv);
- if (stat & STA_NOINIT) return FR_NOT_READY;
- if (stat & STA_PROTECT) return FR_WRITE_PROTECTED;
- if (disk_ioctl(pdrv, GET_SECTOR_COUNT, &sz_disk)) return FR_DISK_ERR;
-
- buf = (BYTE*)work;
-#if FF_USE_LFN == 3
- if (!buf) buf = ff_memalloc(FF_MAX_SS); /* Use heap memory for working buffer */
-#endif
- if (!buf) return FR_NOT_ENOUGH_CORE;
-
- /* Determine the CHS without any consideration of the drive geometry */
- for (n = 16; n < 256 && sz_disk / n / 63 > 1024; n *= 2) ;
- if (n == 256) n--;
- e_hd = (BYTE)(n - 1);
- sz_cyl = 63 * n;
- tot_cyl = sz_disk / sz_cyl;
-
- /* Create partition table */
- mem_set(buf, 0, FF_MAX_SS);
- p = buf + MBR_Table; b_cyl = 0;
- for (i = 0; i < 4; i++, p += SZ_PTE) {
- p_cyl = (szt[i] <= 100U) ? (DWORD)tot_cyl * szt[i] / 100 : szt[i] / sz_cyl; /* Number of cylinders */
- if (p_cyl == 0) continue;
- s_part = (DWORD)sz_cyl * b_cyl;
- sz_part = (DWORD)sz_cyl * p_cyl;
- if (i == 0) { /* Exclude first track of cylinder 0 */
- s_hd = 1;
- s_part += 63; sz_part -= 63;
- } else {
- s_hd = 0;
- }
- e_cyl = b_cyl + p_cyl - 1; /* End cylinder */
- if (e_cyl >= tot_cyl) LEAVE_MKFS(FR_INVALID_PARAMETER);
-
- /* Set partition table */
- p[1] = s_hd; /* Start head */
- p[2] = (BYTE)(((b_cyl >> 2) & 0xC0) | 1); /* Start sector */
- p[3] = (BYTE)b_cyl; /* Start cylinder */
- p[4] = 0x07; /* System type (temporary setting) */
- p[5] = e_hd; /* End head */
- p[6] = (BYTE)(((e_cyl >> 2) & 0xC0) | 63); /* End sector */
- p[7] = (BYTE)e_cyl; /* End cylinder */
- st_dword(p + 8, s_part); /* Start sector in LBA */
- st_dword(p + 12, sz_part); /* Number of sectors */
-
- /* Next partition */
- b_cyl += p_cyl;
- }
- st_word(p, 0xAA55); /* MBR signature (always at offset 510) */
-
- /* Write it to the MBR */
- res = (disk_write(pdrv, buf, 0, 1) == RES_OK && disk_ioctl(pdrv, CTRL_SYNC, 0) == RES_OK) ? FR_OK : FR_DISK_ERR;
- LEAVE_MKFS(res);
-}
-
-#endif /* FF_MULTI_PARTITION */
-#endif /* FF_USE_MKFS && !FF_FS_READONLY */
-
-
-
-
-#if FF_USE_STRFUNC
-#if FF_USE_LFN && FF_LFN_UNICODE && (FF_STRF_ENCODE < 0 || FF_STRF_ENCODE > 3)
-#error Wrong FF_STRF_ENCODE setting
-#endif
-/*-----------------------------------------------------------------------*/
-/* Get a String from the File */
-/*-----------------------------------------------------------------------*/
-
-TCHAR* f_gets (
- TCHAR* buff, /* Pointer to the string buffer to read */
- int len, /* Size of string buffer (items) */
- FIL* fp /* Pointer to the file object */
-)
-{
- int nc = 0;
- TCHAR *p = buff;
- BYTE s[4];
- UINT rc;
- DWORD dc;
-#if FF_USE_LFN && FF_LFN_UNICODE && FF_STRF_ENCODE <= 2
- WCHAR wc;
-#endif
-#if FF_USE_LFN && FF_LFN_UNICODE && FF_STRF_ENCODE == 3
- UINT ct;
-#endif
-
-#if FF_USE_LFN && FF_LFN_UNICODE /* With code conversion (Unicode API) */
- /* Make a room for the character and terminator */
- if (FF_LFN_UNICODE == 1) len -= (FF_STRF_ENCODE == 0) ? 1 : 2;
- if (FF_LFN_UNICODE == 2) len -= (FF_STRF_ENCODE == 0) ? 3 : 4;
- if (FF_LFN_UNICODE == 3) len -= 1;
- while (nc < len) {
-#if FF_STRF_ENCODE == 0 /* Read a character in ANSI/OEM */
- f_read(fp, s, 1, &rc);
- if (rc != 1) break;
- wc = s[0];
- if (dbc_1st((BYTE)wc)) {
- f_read(fp, s, 1, &rc);
- if (rc != 1 || !dbc_2nd(s[0])) continue;
- wc = wc << 8 | s[0];
- }
- dc = ff_oem2uni(wc, CODEPAGE);
- if (dc == 0) continue;
-#elif FF_STRF_ENCODE == 1 || FF_STRF_ENCODE == 2 /* Read a character in UTF-16LE/BE */
- f_read(fp, s, 2, &rc);
- if (rc != 2) break;
- dc = (FF_STRF_ENCODE == 1) ? ld_word(s) : s[0] << 8 | s[1];
- if (IsSurrogateL(dc)) continue;
- if (IsSurrogateH(dc)) {
- f_read(fp, s, 2, &rc);
- if (rc != 2) break;
- wc = (FF_STRF_ENCODE == 1) ? ld_word(s) : s[0] << 8 | s[1];
- if (!IsSurrogateL(wc)) continue;
- dc = ((dc & 0x3FF) + 0x40) << 10 | (wc & 0x3FF);
- }
-#else /* Read a character in UTF-8 */
- f_read(fp, s, 1, &rc);
- if (rc != 1) break;
- dc = s[0];
- if (dc >= 0x80) { /* Multi-byte character? */
- ct = 0;
- if ((dc & 0xE0) == 0xC0) { dc &= 0x1F; ct = 1; } /* 2-byte? */
- if ((dc & 0xF0) == 0xE0) { dc &= 0x0F; ct = 2; } /* 3-byte? */
- if ((dc & 0xF8) == 0xF0) { dc &= 0x07; ct = 3; } /* 4-byte? */
- if (ct == 0) continue;
- f_read(fp, s, ct, &rc); /* Get trailing bytes */
- if (rc != ct) break;
- rc = 0;
- do { /* Merge trailing bytes */
- if ((s[rc] & 0xC0) != 0x80) break;
- dc = dc << 6 | (s[rc] & 0x3F);
- } while (++rc < ct);
- if (rc != ct || dc < 0x80 || IsSurrogate(dc) || dc >= 0x110000) continue; /* Wrong encoding? */
- }
-#endif
- if (FF_USE_STRFUNC == 2 && dc == '\r') continue; /* Strip \r off if needed */
-#if FF_LFN_UNICODE == 1 || FF_LFN_UNICODE == 3 /* Output it in UTF-16/32 encoding */
- if (FF_LFN_UNICODE == 1 && dc >= 0x10000) { /* Out of BMP at UTF-16? */
- *p++ = (TCHAR)(0xD800 | ((dc >> 10) - 0x40)); nc++; /* Make and output high surrogate */
- dc = 0xDC00 | (dc & 0x3FF); /* Make low surrogate */
- }
- *p++ = (TCHAR)dc; nc++;
- if (dc == '\n') break; /* End of line? */
-#elif FF_LFN_UNICODE == 2 /* Output it in UTF-8 encoding */
- if (dc < 0x80) { /* 1-byte */
- *p++ = (TCHAR)dc;
- nc++;
- if (dc == '\n') break; /* End of line? */
- } else {
- if (dc < 0x800) { /* 2-byte */
- *p++ = (TCHAR)(0xC0 | (dc >> 6 & 0x1F));
- *p++ = (TCHAR)(0x80 | (dc >> 0 & 0x3F));
- nc += 2;
- } else {
- if (dc < 0x10000) { /* 3-byte */
- *p++ = (TCHAR)(0xE0 | (dc >> 12 & 0x0F));
- *p++ = (TCHAR)(0x80 | (dc >> 6 & 0x3F));
- *p++ = (TCHAR)(0x80 | (dc >> 0 & 0x3F));
- nc += 3;
- } else { /* 4-byte */
- *p++ = (TCHAR)(0xF0 | (dc >> 18 & 0x07));
- *p++ = (TCHAR)(0x80 | (dc >> 12 & 0x3F));
- *p++ = (TCHAR)(0x80 | (dc >> 6 & 0x3F));
- *p++ = (TCHAR)(0x80 | (dc >> 0 & 0x3F));
- nc += 4;
- }
- }
- }
-#endif
- }
-
-#else /* Byte-by-byte without any conversion (ANSI/OEM API) */
- len -= 1; /* Make a room for the terminator */
- while (nc < len) {
- f_read(fp, s, 1, &rc);
- if (rc != 1) break;
- dc = s[0];
- if (FF_USE_STRFUNC == 2 && dc == '\r') continue;
- *p++ = (TCHAR)dc; nc++;
- if (dc == '\n') break;
- }
-#endif
-
- *p = 0; /* Terminate the string */
- return nc ? buff : 0; /* When no data read due to EOF or error, return with error. */
-}
-
-
-
-
-#if !FF_FS_READONLY
-#include
-/*-----------------------------------------------------------------------*/
-/* Put a Character to the File */
-/*-----------------------------------------------------------------------*/
-
-typedef struct { /* Putchar output buffer and work area */
- FIL *fp; /* Ptr to the writing file */
- int idx, nchr; /* Write index of buf[] (-1:error), number of encoding units written */
-#if FF_USE_LFN && FF_LFN_UNICODE == 1
- WCHAR hs;
-#elif FF_USE_LFN && FF_LFN_UNICODE == 2
- BYTE bs[4];
- UINT wi, ct;
-#endif
- BYTE buf[64]; /* Write buffer */
-} putbuff;
-
-
-static
-void putc_bfd ( /* Buffered write with code conversion */
- putbuff* pb,
- TCHAR c
-)
-{
- UINT n;
- int i, nc;
-#if FF_USE_LFN && FF_LFN_UNICODE
- WCHAR hs, wc;
-#if FF_LFN_UNICODE == 2
- DWORD dc;
- TCHAR *tp;
-#endif
-#endif
-
- if (FF_USE_STRFUNC == 2 && c == '\n') { /* LF -> CRLF conversion */
- putc_bfd(pb, '\r');
- }
-
- i = pb->idx; /* Write index of pb->buf[] */
- if (i < 0) return;
- nc = pb->nchr; /* Write unit counter */
-
-#if FF_USE_LFN && FF_LFN_UNICODE
-#if FF_LFN_UNICODE == 1 /* UTF-16 input */
- if (IsSurrogateH(c)) {
- pb->hs = c; return;
- }
- hs = pb->hs; pb->hs = 0;
- if (hs != 0) {
- if (!IsSurrogateL(c)) hs = 0;
- } else {
- if (IsSurrogateL(c)) return;
- }
- wc = c;
-#elif FF_LFN_UNICODE == 2 /* UTF-8 input */
- for (;;) {
- if (pb->ct == 0) { /* Out of multi-byte sequence? */
- pb->bs[pb->wi = 0] = (BYTE)c; /* Save 1st byte */
- if ((BYTE)c < 0x80) break; /* 1-byte? */
- if (((BYTE)c & 0xE0) == 0xC0) pb->ct = 1; /* 2-byte? */
- if (((BYTE)c & 0xF0) == 0xE0) pb->ct = 2; /* 3-byte? */
- if (((BYTE)c & 0xF1) == 0xF0) pb->ct = 3; /* 4-byte? */
- return;
- } else { /* In the multi-byte sequence */
- if (((BYTE)c & 0xC0) != 0x80) { /* Broken sequence? */
- pb->ct = 0; continue;
- }
- pb->bs[++pb->wi] = (BYTE)c; /* Save the trailing byte */
- if (--pb->ct == 0) break; /* End of multi-byte sequence? */
- return;
- }
- }
- tp = (TCHAR*)pb->bs;
- dc = tchar2uni(&tp); /* UTF-8 ==> UTF-16 */
- if (dc == 0xFFFFFFFF) return;
- wc = (WCHAR)dc;
- hs = (WCHAR)(dc >> 16);
-#elif FF_LFN_UNICODE == 3 /* UTF-32 input */
- if (IsSurrogate(c) || c >= 0x110000) return;
- if (c >= 0x10000) {
- hs = (WCHAR)(0xD800 | ((c >> 10) - 0x40)); /* Make high surrogate */
- wc = 0xDC00 | (c & 0x3FF); /* Make low surrogate */
- } else {
- hs = 0;
- wc = (WCHAR)c;
- }
-#endif
-
-#if FF_STRF_ENCODE == 1 /* Write a character in UTF-16LE */
- if (hs != 0) {
- st_word(&pb->buf[i], hs);
- i += 2;
- nc++;
- }
- st_word(&pb->buf[i], wc);
- i += 2;
-#elif FF_STRF_ENCODE == 2 /* Write a character in UTF-16BE */
- if (hs != 0) {
- pb->buf[i++] = (BYTE)(hs >> 8);
- pb->buf[i++] = (BYTE)hs;
- nc++;
- }
- pb->buf[i++] = (BYTE)(wc >> 8);
- pb->buf[i++] = (BYTE)wc;
-#elif FF_STRF_ENCODE == 3 /* Write it in UTF-8 */
- if (hs != 0) { /* 4-byte */
- nc += 3;
- hs = (hs & 0x3FF) + 0x40;
- pb->buf[i++] = (BYTE)(0xF0 | hs >> 8);
- pb->buf[i++] = (BYTE)(0x80 | (hs >> 2 & 0x3F));
- pb->buf[i++] = (BYTE)(0x80 | (hs & 3) << 4 | (wc >> 6 & 0x0F));
- pb->buf[i++] = (BYTE)(0x80 | (wc & 0x3F));
- } else {
- if (wc < 0x80) { /* 1-byte */
- pb->buf[i++] = (BYTE)wc;
- } else {
- if (wc < 0x800) { /* 2-byte */
- nc += 1;
- pb->buf[i++] = (BYTE)(0xC0 | wc >> 6);
- } else { /* 3-byte */
- nc += 2;
- pb->buf[i++] = (BYTE)(0xE0 | wc >> 12);
- pb->buf[i++] = (BYTE)(0x80 | (wc >> 6 & 0x3F));
- }
- pb->buf[i++] = (BYTE)(0x80 | (wc & 0x3F));
- }
- }
-#else /* Write it in ANSI/OEM */
- if (hs != 0) return;
- wc = ff_uni2oem(wc, CODEPAGE); /* UTF-16 ==> ANSI/OEM */
- if (wc == 0) return;;
- if (wc >= 0x100) {
- pb->buf[i++] = (BYTE)(wc >> 8); nc++;
- }
- pb->buf[i++] = (BYTE)wc;
-#endif
-
-#else /* ANSI/OEM input (without re-encode) */
- pb->buf[i++] = (BYTE)c;
-#endif
-
- if (i >= (int)(sizeof pb->buf) - 4) { /* Write buffered characters to the file */
- f_write(pb->fp, pb->buf, (UINT)i, &n);
- i = (n == (UINT)i) ? 0 : -1;
- }
- pb->idx = i;
- pb->nchr = nc + 1;
-}
-
-
-static
-int putc_flush ( /* Flush left characters in the buffer */
- putbuff* pb
-)
-{
- UINT nw;
-
- if ( pb->idx >= 0 /* Flush buffered characters to the file */
- && f_write(pb->fp, pb->buf, (UINT)pb->idx, &nw) == FR_OK
- && (UINT)pb->idx == nw) return pb->nchr;
- return EOF;
-}
-
-
-static
-void putc_init ( /* Initialize write buffer */
- putbuff* pb,
- FIL* fp
-)
-{
- mem_set(pb, 0, sizeof (putbuff));
- pb->fp = fp;
-}
-
-
-
-int f_putc (
- TCHAR c, /* A character to be output */
- FIL* fp /* Pointer to the file object */
-)
-{
- putbuff pb;
-
-
- putc_init(&pb, fp);
- putc_bfd(&pb, c); /* Put the character */
- return putc_flush(&pb);
-}
-
-
-
-
-/*-----------------------------------------------------------------------*/
-/* Put a String to the File */
-/*-----------------------------------------------------------------------*/
-
-int f_puts (
- const TCHAR* str, /* Pointer to the string to be output */
- FIL* fp /* Pointer to the file object */
-)
-{
- putbuff pb;
-
-
- putc_init(&pb, fp);
- while (*str) putc_bfd(&pb, *str++); /* Put the string */
- return putc_flush(&pb);
-}
-
-
-
-
-/*-----------------------------------------------------------------------*/
-/* Put a Formatted String to the File */
-/*-----------------------------------------------------------------------*/
-
-int f_printf (
- FIL* fp, /* Pointer to the file object */
- const TCHAR* fmt, /* Pointer to the format string */
- ... /* Optional arguments... */
-)
-{
- va_list arp;
- putbuff pb;
- BYTE f, r;
- UINT i, j, w;
- DWORD v;
- TCHAR c, d, str[32], *p;
-
-
- putc_init(&pb, fp);
-
- va_start(arp, fmt);
-
- for (;;) {
- c = *fmt++;
- if (c == 0) break; /* End of string */
- if (c != '%') { /* Non escape character */
- putc_bfd(&pb, c);
- continue;
- }
- w = f = 0;
- c = *fmt++;
- if (c == '0') { /* Flag: '0' padding */
- f = 1; c = *fmt++;
- } else {
- if (c == '-') { /* Flag: left justified */
- f = 2; c = *fmt++;
- }
- }
- if (c == '*') { /* Minimum width by argument */
- w = va_arg(arp, int);
- c = *fmt++;
- } else {
- while (IsDigit(c)) { /* Minimum width */
- w = w * 10 + c - '0';
- c = *fmt++;
- }
- }
- if (c == 'l' || c == 'L') { /* Type prefix: Size is long int */
- f |= 4; c = *fmt++;
- }
- if (c == 0) break;
- d = c;
- if (IsLower(d)) d -= 0x20;
- switch (d) { /* Atgument type is... */
- case 'S' : /* String */
- p = va_arg(arp, TCHAR*);
- for (j = 0; p[j]; j++) ;
- if (!(f & 2)) { /* Right padded */
- while (j++ < w) putc_bfd(&pb, ' ') ;
- }
- while (*p) putc_bfd(&pb, *p++) ; /* String body */
- while (j++ < w) putc_bfd(&pb, ' ') ; /* Left padded */
- continue;
-
- case 'C' : /* Character */
- putc_bfd(&pb, (TCHAR)va_arg(arp, int)); continue;
-
- case 'B' : /* Unsigned binary */
- r = 2; break;
-
- case 'O' : /* Unsigned octal */
- r = 8; break;
-
- case 'D' : /* Signed decimal */
- case 'U' : /* Unsigned decimal */
- r = 10; break;
-
- case 'X' : /* Unsigned hexdecimal */
- r = 16; break;
-
- default: /* Unknown type (pass-through) */
- putc_bfd(&pb, c); continue;
- }
-
- /* Get an argument and put it in numeral */
- v = (f & 4) ? (DWORD)va_arg(arp, long) : ((d == 'D') ? (DWORD)(long)va_arg(arp, int) : (DWORD)va_arg(arp, unsigned int));
- if (d == 'D' && (v & 0x80000000)) {
- v = 0 - v;
- f |= 8;
- }
- i = 0;
- do {
- d = (TCHAR)(v % r); v /= r;
- if (d > 9) d += (c == 'x') ? 0x27 : 0x07;
- str[i++] = d + '0';
- } while (v && i < sizeof str / sizeof *str);
- if (f & 8) str[i++] = '-';
- j = i; d = (f & 1) ? '0' : ' ';
- if (!(f & 2)) {
- while (j++ < w) putc_bfd(&pb, d); /* Right pad */
- }
- do {
- putc_bfd(&pb, str[--i]); /* Number body */
- } while (i);
- while (j++ < w) putc_bfd(&pb, d); /* Left pad */
- }
-
- va_end(arp);
-
- return putc_flush(&pb);
-}
-
-#endif /* !FF_FS_READONLY */
-#endif /* FF_USE_STRFUNC */
-
-
-
-#if FF_CODE_PAGE == 0
-/*-----------------------------------------------------------------------*/
-/* Set Active Codepage for the Path Name */
-/*-----------------------------------------------------------------------*/
-
-FRESULT f_setcp (
- WORD cp /* Value to be set as active code page */
-)
-{
- static const WORD validcp[] = { 437, 720, 737, 771, 775, 850, 852, 857, 860, 861, 862, 863, 864, 865, 866, 869, 932, 936, 949, 950, 0};
- static const BYTE* const tables[] = {Ct437, Ct720, Ct737, Ct771, Ct775, Ct850, Ct852, Ct857, Ct860, Ct861, Ct862, Ct863, Ct864, Ct865, Ct866, Ct869, Dc932, Dc936, Dc949, Dc950, 0};
- UINT i;
-
-
- for (i = 0; validcp[i] != 0 && validcp[i] != cp; i++) ; /* Find the code page */
- if (validcp[i] != cp) return FR_INVALID_PARAMETER; /* Not found? */
-
- CodePage = cp;
- if (cp >= 900) { /* DBCS */
- ExCvt = 0;
- DbcTbl = tables[i];
- } else { /* SBCS */
- ExCvt = tables[i];
- DbcTbl = 0;
- }
- return FR_OK;
-}
-#endif /* FF_CODE_PAGE == 0 */
-
diff --git a/third-party/fatfs-0.1.3/ff.h b/third-party/fatfs-0.1.3/ff.h
deleted file mode 100644
index de226874b6e8241b91e2766b8c41e5fc603f30a3..0000000000000000000000000000000000000000
--- a/third-party/fatfs-0.1.3/ff.h
+++ /dev/null
@@ -1,380 +0,0 @@
-/*----------------------------------------------------------------------------/
-/ FatFs - Generic FAT Filesystem module R0.13b /
-/-----------------------------------------------------------------------------/
-/
-/ Copyright (C) 2018, ChaN, all right reserved.
-/
-/ FatFs module is an open source software. Redistribution and use of FatFs in
-/ source and binary forms, with or without modification, are permitted provided
-/ that the following condition is met:
-
-/ 1. Redistributions of source code must retain the above copyright notice,
-/ this condition and the following disclaimer.
-/
-/ This software is provided by the copyright holder and contributors "AS IS"
-/ and any warranties related to this software are DISCLAIMED.
-/ The copyright owner or contributors be NOT LIABLE for any damages caused
-/ by use of this software.
-/
-/----------------------------------------------------------------------------*/
-
-
-#ifndef FF_DEFINED
-#define FF_DEFINED 63463 /* Revision ID */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "integer.h" /* Basic integer types */
-#include "ffconf.h" /* FatFs configuration options */
-
-#if FF_DEFINED != FFCONF_DEF
-#error Wrong configuration file (ffconf.h).
-#endif
-
-
-
-/* Definitions of volume management */
-
-#if FF_MULTI_PARTITION /* Multiple partition configuration */
-typedef struct {
- BYTE pd; /* Physical drive number */
- BYTE pt; /* Partition: 0:Auto detect, 1-4:Forced partition) */
-} PARTITION;
-extern PARTITION VolToPart[]; /* Volume - Partition resolution table */
-#endif
-
-#if FF_STR_VOLUME_ID
-#ifndef FF_VOLUME_STRS
-extern const char* VolumeStr[FF_VOLUMES]; /* User defied volume ID */
-#endif
-#endif
-
-
-
-/* Type of path name strings on FatFs API */
-
-#ifndef _INC_TCHAR_
-#define _INC_TCHAR_
-
-#if FF_USE_LFN && FF_LFN_UNICODE == 1 /* Unicode in UTF-16 encoding */
-typedef WCHAR TCHAR;
-#define _T(x) L ## x
-#define _TEXT(x) L ## x
-#elif FF_USE_LFN && FF_LFN_UNICODE == 2 /* Unicode in UTF-8 encoding */
-typedef char TCHAR;
-#define _T(x) u8 ## x
-#define _TEXT(x) u8 ## x
-#elif FF_USE_LFN && FF_LFN_UNICODE == 3 /* Unicode in UTF-32 encoding */
-typedef DWORD TCHAR;
-#define _T(x) U ## x
-#define _TEXT(x) U ## x
-#elif FF_USE_LFN && (FF_LFN_UNICODE < 0 || FF_LFN_UNICODE > 3)
-#error Wrong FF_LFN_UNICODE setting
-#else /* ANSI/OEM code in SBCS/DBCS */
-typedef char TCHAR;
-#define _T(x) x
-#define _TEXT(x) x
-#endif
-
-#endif
-
-
-
-/* Type of file size variables */
-
-#if FF_FS_EXFAT
-typedef QWORD FSIZE_t;
-#else
-typedef DWORD FSIZE_t;
-#endif
-
-
-
-/* Filesystem object structure (FATFS) */
-
-typedef struct {
- BYTE fs_type; /* Filesystem type (0:N/A) */
- BYTE pdrv; /* Physical drive number */
- BYTE n_fats; /* Number of FATs (1 or 2) */
- BYTE wflag; /* win[] flag (b0:dirty) */
- BYTE fsi_flag; /* FSINFO flags (b7:disabled, b0:dirty) */
- WORD id; /* Volume mount ID */
- WORD n_rootdir; /* Number of root directory entries (FAT12/16) */
- WORD csize; /* Cluster size [sectors] */
-#if FF_MAX_SS != FF_MIN_SS
- WORD ssize; /* Sector size (512, 1024, 2048 or 4096) */
-#endif
-#if FF_USE_LFN
- WCHAR* lfnbuf; /* LFN working buffer */
-#endif
-#if FF_FS_EXFAT
- BYTE* dirbuf; /* Directory entry block scratchpad buffer for exFAT */
-#endif
-#if FF_FS_REENTRANT
- FF_SYNC_t sobj; /* Identifier of sync object */
-#endif
-#if !FF_FS_READONLY
- DWORD last_clst; /* Last allocated cluster */
- DWORD free_clst; /* Number of free clusters */
-#endif
-#if FF_FS_RPATH
- DWORD cdir; /* Current directory start cluster (0:root) */
-#if FF_FS_EXFAT
- DWORD cdc_scl; /* Containing directory start cluster (invalid when cdir is 0) */
- DWORD cdc_size; /* b31-b8:Size of containing directory, b7-b0: Chain status */
- DWORD cdc_ofs; /* Offset in the containing directory (invalid when cdir is 0) */
-#endif
-#endif
- DWORD n_fatent; /* Number of FAT entries (number of clusters + 2) */
- DWORD fsize; /* Size of an FAT [sectors] */
- DWORD volbase; /* Volume base sector */
- DWORD fatbase; /* FAT base sector */
- DWORD dirbase; /* Root directory base sector/cluster */
- DWORD database; /* Data base sector */
- DWORD winsect; /* Current sector appearing in the win[] */
- BYTE win[FF_MAX_SS]; /* Disk access window for Directory, FAT (and file data at tiny cfg) */
-} FATFS;
-
-
-
-/* Object ID and allocation information (FFOBJID) */
-
-typedef struct {
- FATFS* fs; /* Pointer to the hosting volume of this object */
- WORD id; /* Hosting volume mount ID */
- BYTE attr; /* Object attribute */
- BYTE stat; /* Object chain status (b1-0: =0:not contiguous, =2:contiguous, =3:flagmented in this session, b2:sub-directory stretched) */
- DWORD sclust; /* Object data start cluster (0:no cluster or root directory) */
- FSIZE_t objsize; /* Object size (valid when sclust != 0) */
-#if FF_FS_EXFAT
- DWORD n_cont; /* Size of first fragment - 1 (valid when stat == 3) */
- DWORD n_frag; /* Size of last fragment needs to be written to FAT (valid when not zero) */
- DWORD c_scl; /* Containing directory start cluster (valid when sclust != 0) */
- DWORD c_size; /* b31-b8:Size of containing directory, b7-b0: Chain status (valid when c_scl != 0) */
- DWORD c_ofs; /* Offset in the containing directory (valid when file object and sclust != 0) */
-#endif
-#if FF_FS_LOCK
- UINT lockid; /* File lock ID origin from 1 (index of file semaphore table Files[]) */
-#endif
-} FFOBJID;
-
-
-
-/* File object structure (FIL) */
-
-typedef struct {
- FFOBJID obj; /* Object identifier (must be the 1st member to detect invalid object pointer) */
- BYTE flag; /* File status flags */
- BYTE err; /* Abort flag (error code) */
- FSIZE_t fptr; /* File read/write pointer (Zeroed on file open) */
- DWORD clust; /* Current cluster of fpter (invalid when fptr is 0) */
- DWORD sect; /* Sector number appearing in buf[] (0:invalid) */
-#if !FF_FS_READONLY
- DWORD dir_sect; /* Sector number containing the directory entry (not used at exFAT) */
- BYTE* dir_ptr; /* Pointer to the directory entry in the win[] (not used at exFAT) */
-#endif
-#if FF_USE_FASTSEEK
- DWORD* cltbl; /* Pointer to the cluster link map table (nulled on open, set by application) */
-#endif
-#if !FF_FS_TINY
- BYTE buf[FF_MAX_SS]; /* File private data read/write window */
-#endif
-} FIL;
-
-
-
-/* Directory object structure (DIR) */
-
-typedef struct {
- FFOBJID obj; /* Object identifier */
- DWORD dptr; /* Current read/write offset */
- DWORD clust; /* Current cluster */
- DWORD sect; /* Current sector (0:Read operation has terminated) */
- BYTE* dir; /* Pointer to the directory item in the win[] */
- BYTE fn[12]; /* SFN (in/out) {body[8],ext[3],status[1]} */
-#if FF_USE_LFN
- DWORD blk_ofs; /* Offset of current entry block being processed (0xFFFFFFFF:Invalid) */
-#endif
-#if FF_USE_FIND
- const TCHAR* pat; /* Pointer to the name matching pattern */
-#endif
-} DIR;
-
-
-
-/* File information structure (FILINFO) */
-
-typedef struct {
- FSIZE_t fsize; /* File size */
- WORD fdate; /* Modified date */
- WORD ftime; /* Modified time */
- BYTE fattrib; /* File attribute */
-#if FF_USE_LFN
- TCHAR altname[FF_SFN_BUF + 1];/* Altenative file name */
- TCHAR fname[FF_LFN_BUF + 1]; /* Primary file name */
-#else
- TCHAR fname[12 + 1]; /* File name */
-#endif
-} FILINFO;
-
-
-
-/* File function return code (FRESULT) */
-
-typedef enum {
- FR_OK = 0, /* (0) Succeeded */
- FR_DISK_ERR, /* (1) A hard error occurred in the low level disk I/O layer */
- FR_INT_ERR, /* (2) Assertion failed */
- FR_NOT_READY, /* (3) The physical drive cannot work */
- FR_NO_FILE, /* (4) Could not find the file */
- FR_NO_PATH, /* (5) Could not find the path */
- FR_INVALID_NAME, /* (6) The path name format is invalid */
- FR_DENIED, /* (7) Access denied due to prohibited access or directory full */
- FR_EXIST, /* (8) Access denied due to prohibited access */
- FR_INVALID_OBJECT, /* (9) The file/directory object is invalid */
- FR_WRITE_PROTECTED, /* (10) The physical drive is write protected */
- FR_INVALID_DRIVE, /* (11) The logical drive number is invalid */
- FR_NOT_ENABLED, /* (12) The volume has no work area */
- FR_NO_FILESYSTEM, /* (13) There is no valid FAT volume */
- FR_MKFS_ABORTED, /* (14) The f_mkfs() aborted due to any problem */
- FR_TIMEOUT, /* (15) Could not get a grant to access the volume within defined period */
- FR_LOCKED, /* (16) The operation is rejected according to the file sharing policy */
- FR_NOT_ENOUGH_CORE, /* (17) LFN working buffer could not be allocated */
- FR_TOO_MANY_OPEN_FILES, /* (18) Number of open files > FF_FS_LOCK */
- FR_INVALID_PARAMETER /* (19) Given parameter is invalid */
-} FRESULT;
-
-
-
-/*--------------------------------------------------------------*/
-/* FatFs module application interface */
-
-FRESULT f_open (FIL* fp, const TCHAR* path, BYTE mode); /* Open or create a file */
-FRESULT f_close (FIL* fp); /* Close an open file object */
-FRESULT f_read (FIL* fp, void* buff, UINT btr, UINT* br); /* Read data from the file */
-FRESULT f_write (FIL* fp, const void* buff, UINT btw, UINT* bw); /* Write data to the file */
-FRESULT f_lseek (FIL* fp, FSIZE_t ofs); /* Move file pointer of the file object */
-FRESULT f_truncate (FIL* fp); /* Truncate the file */
-FRESULT f_sync (FIL* fp); /* Flush cached data of the writing file */
-FRESULT f_opendir (DIR* dp, const TCHAR* path); /* Open a directory */
-FRESULT f_closedir (DIR* dp); /* Close an open directory */
-FRESULT f_readdir (DIR* dp, FILINFO* fno); /* Read a directory item */
-FRESULT f_findfirst (DIR* dp, FILINFO* fno, const TCHAR* path, const TCHAR* pattern); /* Find first file */
-FRESULT f_findnext (DIR* dp, FILINFO* fno); /* Find next file */
-FRESULT f_mkdir (const TCHAR* path); /* Create a sub directory */
-FRESULT f_unlink (const TCHAR* path); /* Delete an existing file or directory */
-FRESULT f_rename (const TCHAR* path_old, const TCHAR* path_new); /* Rename/Move a file or directory */
-FRESULT f_stat (const TCHAR* path, FILINFO* fno); /* Get file status */
-FRESULT f_chmod (const TCHAR* path, BYTE attr, BYTE mask); /* Change attribute of a file/dir */
-FRESULT f_utime (const TCHAR* path, const FILINFO* fno); /* Change timestamp of a file/dir */
-FRESULT f_chdir (const TCHAR* path); /* Change current directory */
-FRESULT f_chdrive (const TCHAR* path); /* Change current drive */
-FRESULT f_getcwd (TCHAR* buff, UINT len); /* Get current directory */
-FRESULT f_getfree (const TCHAR* path, DWORD* nclst, FATFS** fatfs); /* Get number of free clusters on the drive */
-FRESULT f_getlabel (const TCHAR* path, TCHAR* label, DWORD* vsn); /* Get volume label */
-FRESULT f_setlabel (const TCHAR* label); /* Set volume label */
-FRESULT f_forward (FIL* fp, UINT(*func)(const BYTE*,UINT), UINT btf, UINT* bf); /* Forward data to the stream */
-FRESULT f_expand (FIL* fp, FSIZE_t szf, BYTE opt); /* Allocate a contiguous block to the file */
-FRESULT f_mount (FATFS* fs, const TCHAR* path, BYTE opt); /* Mount/Unmount a logical drive */
-FRESULT f_mkfs (const TCHAR* path, BYTE opt, DWORD au, void* work, UINT len); /* Create a FAT volume */
-FRESULT f_fdisk (BYTE pdrv, const DWORD* szt, void* work); /* Divide a physical drive into some partitions */
-FRESULT f_setcp (WORD cp); /* Set current code page */
-int f_putc (TCHAR c, FIL* fp); /* Put a character to the file */
-int f_puts (const TCHAR* str, FIL* cp); /* Put a string to the file */
-int f_printf (FIL* fp, const TCHAR* str, ...); /* Put a formatted string to the file */
-TCHAR* f_gets (TCHAR* buff, int len, FIL* fp); /* Get a string from the file */
-
-#define f_eof(fp) ((int)((fp)->fptr == (fp)->obj.objsize))
-#define f_error(fp) ((fp)->err)
-#define f_tell(fp) ((fp)->fptr)
-#define f_size(fp) ((fp)->obj.objsize)
-#define f_rewind(fp) f_lseek((fp), 0)
-#define f_rewinddir(dp) f_readdir((dp), 0)
-#define f_rmdir(path) f_unlink(path)
-#define f_unmount(path) f_mount(0, path, 0)
-
-#ifndef EOF
-#define EOF (-1)
-#endif
-
-
-
-
-/*--------------------------------------------------------------*/
-/* Additional user defined functions */
-
-/* RTC function */
-#if !FF_FS_READONLY && !FF_FS_NORTC
-DWORD get_fattime (void);
-#endif
-
-/* LFN support functions */
-#if FF_USE_LFN >= 1 /* Code conversion (defined in unicode.c) */
-WCHAR ff_oem2uni (WCHAR oem, WORD cp); /* OEM code to Unicode conversion */
-WCHAR ff_uni2oem (DWORD uni, WORD cp); /* Unicode to OEM code conversion */
-DWORD ff_wtoupper (DWORD uni); /* Unicode upper-case conversion */
-#endif
-#if FF_USE_LFN == 3 /* Dynamic memory allocation */
-void* ff_memalloc (UINT msize); /* Allocate memory block */
-void ff_memfree (void* mblock); /* Free memory block */
-#endif
-
-/* Sync functions */
-#if FF_FS_REENTRANT
-int ff_cre_syncobj (BYTE vol, FF_SYNC_t* sobj); /* Create a sync object */
-int ff_req_grant (FF_SYNC_t sobj); /* Lock sync object */
-void ff_rel_grant (FF_SYNC_t sobj); /* Unlock sync object */
-int ff_del_syncobj (FF_SYNC_t sobj); /* Delete a sync object */
-#endif
-
-
-
-
-/*--------------------------------------------------------------*/
-/* Flags and offset address */
-
-
-/* File access mode and open method flags (3rd argument of f_open) */
-#define FA_READ 0x01
-#define FA_WRITE 0x02
-#define FA_OPEN_EXISTING 0x00
-#define FA_CREATE_NEW 0x04
-#define FA_CREATE_ALWAYS 0x08
-#define FA_OPEN_ALWAYS 0x10
-#define FA_OPEN_APPEND 0x30
-
-/* Fast seek controls (2nd argument of f_lseek) */
-#define CREATE_LINKMAP ((FSIZE_t)0 - 1)
-
-/* Format options (2nd argument of f_mkfs) */
-#define FM_FAT 0x01
-#define FM_FAT32 0x02
-#define FM_EXFAT 0x04
-#define FM_ANY 0x07
-#define FM_SFD 0x08
-
-/* Filesystem type (FATFS.fs_type) */
-#define FS_FAT12 1
-#define FS_FAT16 2
-#define FS_FAT32 3
-#define FS_EXFAT 4
-
-/* File attribute bits for directory entry (FILINFO.fattrib) */
-#define AM_RDO 0x01 /* Read only */
-#define AM_HID 0x02 /* Hidden */
-#define AM_SYS 0x04 /* System */
-#define AM_DIR 0x10 /* Directory */
-#define AM_ARC 0x20 /* Archive */
-
-/* Definitions of physical drive number for each drive */
-#define DEV_RAM 0 /* Example: Map Ramdisk to physical drive 0 */
-#define DEV_MMC 1 /* Example: Map MMC/SD card to physical drive 1 */
-#define DEV_USB 2 /* Example: Map USB MSD to physical drive 2 */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* FF_DEFINED */
diff --git a/third-party/fatfs-0.1.3/ffconf.h b/third-party/fatfs-0.1.3/ffconf.h
deleted file mode 100644
index 3274fce3343804dc22bd09fd197a89b41825bcb1..0000000000000000000000000000000000000000
--- a/third-party/fatfs-0.1.3/ffconf.h
+++ /dev/null
@@ -1,293 +0,0 @@
-
-#include
-#include
-
-/*---------------------------------------------------------------------------/
-/ FatFs - Configuration file
-/---------------------------------------------------------------------------*/
-
-#define FFCONF_DEF 63463 /* Revision ID */
-
-/*---------------------------------------------------------------------------/
-/ Function Configurations
-/---------------------------------------------------------------------------*/
-
-#define FF_FS_READONLY 0
-/* This option switches read-only configuration. (0:Read/Write or 1:Read-only)
-/ Read-only configuration removes writing API functions, f_write(), f_sync(),
-/ f_unlink(), f_mkdir(), f_chmod(), f_rename(), f_truncate(), f_getfree()
-/ and optional writing functions as well. */
-
-
-#define FF_FS_MINIMIZE 0
-/* This option defines minimization level to remove some basic API functions.
-/
-/ 0: Basic functions are fully enabled.
-/ 1: f_stat(), f_getfree(), f_unlink(), f_mkdir(), f_truncate() and f_rename()
-/ are removed.
-/ 2: f_opendir(), f_readdir() and f_closedir() are removed in addition to 1.
-/ 3: f_lseek() function is removed in addition to 2. */
-
-
-#define FF_USE_STRFUNC 0
-/* This option switches string functions, f_gets(), f_putc(), f_puts() and f_printf().
-/
-/ 0: Disable string functions.
-/ 1: Enable without LF-CRLF conversion.
-/ 2: Enable with LF-CRLF conversion. */
-
-
-#define FF_USE_FIND 0
-/* This option switches filtered directory read functions, f_findfirst() and
-/ f_findnext(). (0:Disable, 1:Enable 2:Enable with matching altname[] too) */
-
-
-#define FF_USE_MKFS 1
-/* This option switches f_mkfs() function. (0:Disable or 1:Enable) */
-
-
-#define FF_USE_FASTSEEK 0
-/* This option switches fast seek function. (0:Disable or 1:Enable) */
-
-
-#define FF_USE_EXPAND 0
-/* This option switches f_expand function. (0:Disable or 1:Enable) */
-
-
-#define FF_USE_CHMOD 0
-/* This option switches attribute manipulation functions, f_chmod() and f_utime().
-/ (0:Disable or 1:Enable) Also FF_FS_READONLY needs to be 0 to enable this option. */
-
-
-#define FF_USE_LABEL 0
-/* This option switches volume label functions, f_getlabel() and f_setlabel().
-/ (0:Disable or 1:Enable) */
-
-
-#define FF_USE_FORWARD 0
-/* This option switches f_forward() function. (0:Disable or 1:Enable) */
-
-
-/*---------------------------------------------------------------------------/
-/ Locale and Namespace Configurations
-/---------------------------------------------------------------------------*/
-
-#define FF_CODE_PAGE 932
-/* This option specifies the OEM code page to be used on the target system.
-/ Incorrect code page setting can cause a file open failure.
-/
-/ 437 - U.S.
-/ 720 - Arabic
-/ 737 - Greek
-/ 771 - KBL
-/ 775 - Baltic
-/ 850 - Latin 1
-/ 852 - Latin 2
-/ 855 - Cyrillic
-/ 857 - Turkish
-/ 860 - Portuguese
-/ 861 - Icelandic
-/ 862 - Hebrew
-/ 863 - Canadian French
-/ 864 - Arabic
-/ 865 - Nordic
-/ 866 - Russian
-/ 869 - Greek 2
-/ 932 - Japanese (DBCS)
-/ 936 - Simplified Chinese (DBCS)
-/ 949 - Korean (DBCS)
-/ 950 - Traditional Chinese (DBCS)
-/ 0 - Include all code pages above and configured by f_setcp()
-*/
-
-
-#define FF_USE_LFN 3/*1*/
-#define FF_MAX_LFN 255
-/* The FF_USE_LFN switches the support for LFN (long file name).
-/
-/ 0: Disable LFN. FF_MAX_LFN has no effect.
-/ 1: Enable LFN with static working buffer on the BSS. Always NOT thread-safe.
-/ 2: Enable LFN with dynamic working buffer on the STACK.
-/ 3: Enable LFN with dynamic working buffer on the HEAP.
-/
-/ To enable the LFN, ffunicode.c needs to be added to the project. The LFN function
-/ requiers certain internal working buffer occupies (FF_MAX_LFN + 1) * 2 bytes and
-/ additional (FF_MAX_LFN + 44) / 15 * 32 bytes when exFAT is enabled.
-/ The FF_MAX_LFN defines size of the working buffer in UTF-16 code unit and it can
-/ be in range of 12 to 255. It is recommended to be set 255 to fully support LFN
-/ specification.
-/ When use stack for the working buffer, take care on stack overflow. When use heap
-/ memory for the working buffer, memory management functions, ff_memalloc() and
-/ ff_memfree() in ffsystem.c, need to be added to the project. */
-
-
-#define FF_LFN_UNICODE 0
-/* This option switches the character encoding on the API when LFN is enabled.
-/
-/ 0: ANSI/OEM in current CP (TCHAR = char)
-/ 1: Unicode in UTF-16 (TCHAR = WCHAR)
-/ 2: Unicode in UTF-8 (TCHAR = char)
-/ 3: Unicode in UTF-32 (TCHAR = DWORD)
-/
-/ Also behavior of string I/O functions will be affected by this option.
-/ When LFN is not enabled, this option has no effect. */
-
-
-#define FF_LFN_BUF 255
-#define FF_SFN_BUF 12
-/* This set of options defines size of file name members in the FILINFO structure
-/ which is used to read out directory items. These values should be suffcient for
-/ the file names to read. The maximum possible length of the read file name depends
-/ on character encoding. When LFN is not enabled, these options have no effect. */
-
-
-#define FF_STRF_ENCODE 3
-/* When FF_LFN_UNICODE >= 1 with LFN enabled, string I/O functions, f_gets(),
-/ f_putc(), f_puts and f_printf() convert the character encoding in it.
-/ This option selects assumption of character encoding ON THE FILE to be
-/ read/written via those functions.
-/
-/ 0: ANSI/OEM in current CP
-/ 1: Unicode in UTF-16LE
-/ 2: Unicode in UTF-16BE
-/ 3: Unicode in UTF-8
-*/
-
-
-#define FF_FS_RPATH 0
-/* This option configures support for relative path.
-/
-/ 0: Disable relative path and remove related functions.
-/ 1: Enable relative path. f_chdir() and f_chdrive() are available.
-/ 2: f_getcwd() function is available in addition to 1.
-*/
-
-
-/*---------------------------------------------------------------------------/
-/ Drive/Volume Configurations
-/---------------------------------------------------------------------------*/
-
-#define FF_VOLUMES 1
-/* Number of volumes (logical drives) to be used. (1-10) */
-
-
-#define FF_STR_VOLUME_ID 0
-#define FF_VOLUME_STRS "RAM","NAND","CF","SD","SD2","USB","USB2","USB3"
-/* FF_STR_VOLUME_ID switches support for volume ID in arbitrary strings.
-/ When FF_STR_VOLUME_ID is set to 1 or 2, arbitrary strings can be used as drive
-/ number in the path name. FF_VOLUME_STRS defines the volume ID strings for each
-/ logical drives. Number of items must not be less than FF_VOLUMES. Valid
-/ characters for the volume ID strings are A-Z, a-z and 0-9, however, they are
-/ compared in case-insensitive. If FF_STR_VOLUME_ID >= 1 and FF_VOLUME_STRS is
-/ not defined, a user defined volume string table needs to be defined as:
-/
-/ const char* VolumeStr[FF_VOLUMES] = {"ram","flash","sd","usb",...
-*/
-
-
-#define FF_MULTI_PARTITION 0
-/* This option switches support for multiple volumes on the physical drive.
-/ By default (0), each logical drive number is bound to the same physical drive
-/ number and only an FAT volume found on the physical drive will be mounted.
-/ When this function is enabled (1), each logical drive number can be bound to
-/ arbitrary physical drive and partition listed in the VolToPart[]. Also f_fdisk()
-/ funciton will be available. */
-
-
-#define FF_MIN_SS 512
-#define FF_MAX_SS 512
-/* This set of options configures the range of sector size to be supported. (512,
-/ 1024, 2048 or 4096) Always set both 512 for most systems, generic memory card and
-/ harddisk. But a larger value may be required for on-board flash memory and some
-/ type of optical media. When FF_MAX_SS is larger than FF_MIN_SS, FatFs is configured
-/ for variable sector size mode and disk_ioctl() function needs to implement
-/ GET_SECTOR_SIZE command. */
-
-
-#define FF_USE_TRIM 0
-/* This option switches support for ATA-TRIM. (0:Disable or 1:Enable)
-/ To enable Trim function, also CTRL_TRIM command should be implemented to the
-/ disk_ioctl() function. */
-
-
-#define FF_FS_NOFSINFO 0
-/* If you need to know correct free space on the FAT32 volume, set bit 0 of this
-/ option, and f_getfree() function at first time after volume mount will force
-/ a full FAT scan. Bit 1 controls the use of last allocated cluster number.
-/
-/ bit0=0: Use free cluster count in the FSINFO if available.
-/ bit0=1: Do not trust free cluster count in the FSINFO.
-/ bit1=0: Use last allocated cluster number in the FSINFO if available.
-/ bit1=1: Do not trust last allocated cluster number in the FSINFO.
-*/
-
-
-
-/*---------------------------------------------------------------------------/
-/ System Configurations
-/---------------------------------------------------------------------------*/
-
-#define FF_FS_TINY 0
-/* This option switches tiny buffer configuration. (0:Normal or 1:Tiny)
-/ At the tiny configuration, size of file object (FIL) is shrinked FF_MAX_SS bytes.
-/ Instead of private sector buffer eliminated from the file object, common sector
-/ buffer in the filesystem object (FATFS) is used for the file data transfer. */
-
-
-#define FF_FS_EXFAT 1
-/* This option switches support for exFAT filesystem. (0:Disable or 1:Enable)
-/ To enable exFAT, also LFN needs to be enabled.
-/ Note that enabling exFAT discards ANSI C (C89) compatibility. */
-
-
-#define FF_FS_NORTC 1
-#define FF_NORTC_MON 1
-#define FF_NORTC_MDAY 1
-#define FF_NORTC_YEAR 2018
-/* The option FF_FS_NORTC switches timestamp functiton. If the system does not have
-/ any RTC function or valid timestamp is not needed, set FF_FS_NORTC = 1 to disable
-/ the timestamp function. Every object modified by FatFs will have a fixed timestamp
-/ defined by FF_NORTC_MON, FF_NORTC_MDAY and FF_NORTC_YEAR in local time.
-/ To enable timestamp function (FF_FS_NORTC = 0), get_fattime() function need to be
-/ added to the project to read current time form real-time clock. FF_NORTC_MON,
-/ FF_NORTC_MDAY and FF_NORTC_YEAR have no effect.
-/ These options have no effect at read-only configuration (FF_FS_READONLY = 1). */
-
-
-#define FF_FS_LOCK 0
-/* The option FF_FS_LOCK switches file lock function to control duplicated file open
-/ and illegal operation to open objects. This option must be 0 when FF_FS_READONLY
-/ is 1.
-/
-/ 0: Disable file lock function. To avoid volume corruption, application program
-/ should avoid illegal open, remove and rename to the open objects.
-/ >0: Enable file lock function. The value defines how many files/sub-directories
-/ can be opened simultaneously under file lock control. Note that the file
-/ lock control is independent of re-entrancy. */
-
-
-#define FF_FS_REENTRANT 1/*0*/
-#define FF_FS_TIMEOUT 1000
-#define FF_SYNC_t xSemaphoreHandle
-/* The option FF_FS_REENTRANT switches the re-entrancy (thread safe) of the FatFs
-/ module itself. Note that regardless of this option, file access to different
-/ volume is always re-entrant and volume control functions, f_mount(), f_mkfs()
-/ and f_fdisk() function, are always not re-entrant. Only file/directory access
-/ to the same volume is under control of this function.
-/
-/ 0: Disable re-entrancy. FF_FS_TIMEOUT and FF_SYNC_t have no effect.
-/ 1: Enable re-entrancy. Also user provided synchronization handlers,
-/ ff_req_grant(), ff_rel_grant(), ff_del_syncobj() and ff_cre_syncobj()
-/ function, must be added to the project. Samples are available in
-/ option/syscall.c.
-/
-/ The FF_FS_TIMEOUT defines timeout period in unit of time tick.
-/ The FF_SYNC_t defines O/S dependent sync object type. e.g. HANDLE, ID, OS_EVENT*,
-/ SemaphoreHandle_t and etc. A header file for O/S definitions needs to be
-/ included somewhere in the scope of ff.h. */
-
-/* #include // O/S definitions */
-
-
-
-/*--- End of configuration options ---*/
diff --git a/third-party/fatfs-0.1.3/ffunicode.c b/third-party/fatfs-0.1.3/ffunicode.c
deleted file mode 100644
index 9a5d37ef7cbd373959f222ca033ff69df9d12a45..0000000000000000000000000000000000000000
--- a/third-party/fatfs-0.1.3/ffunicode.c
+++ /dev/null
@@ -1,15597 +0,0 @@
-/*------------------------------------------------------------------------*/
-/* Unicode handling functions for FatFs R0.13b */
-/*------------------------------------------------------------------------*/
-/* This module will occupy a huge memory in the .const section when the /
-/ FatFs is configured for LFN with DBCS. If the system has any Unicode /
-/ utilitiy for the code conversion, this module should be modified to use /
-/ that function to avoid silly memory consumption. /
-/-------------------------------------------------------------------------*/
-/*
-/ Copyright (C) 2018, ChaN, all right reserved.
-/
-/ FatFs module is an open source software. Redistribution and use of FatFs in
-/ source and binary forms, with or without modification, are permitted provided
-/ that the following condition is met:
-/
-/ 1. Redistributions of source code must retain the above copyright notice,
-/ this condition and the following disclaimer.
-/
-/ This software is provided by the copyright holder and contributors "AS IS"
-/ and any warranties related to this software are DISCLAIMED.
-/ The copyright owner or contributors be NOT LIABLE for any damages caused
-/ by use of this software.
-*/
-
-
-#include "ff.h"
-
-#if FF_USE_LFN /* This module is blanked when non-LFN configuration */
-
-#if FF_DEFINED != 63463 /* Revision ID */
-#error Wrong include file (ff.h).
-#endif
-
-#define MERGE2(a, b) a ## b
-#define CVTBL(tbl, cp) MERGE2(tbl, cp)
-
-
-/*------------------------------------------------------------------------*/
-/* Code Conversion Tables */
-/*------------------------------------------------------------------------*/
-
-#if FF_CODE_PAGE == 932 || FF_CODE_PAGE == 0 /* Japanese */
-static const WCHAR uni2oem932[] = { /* Unicode --> Shift_JIS pairs */
- 0x00A7, 0x8198, 0x00A8, 0x814E, 0x00B0, 0x818B, 0x00B1, 0x817D, 0x00B4, 0x814C, 0x00B6, 0x81F7, 0x00D7, 0x817E, 0x00F7, 0x8180,
- 0x0391, 0x839F, 0x0392, 0x83A0, 0x0393, 0x83A1, 0x0394, 0x83A2, 0x0395, 0x83A3, 0x0396, 0x83A4, 0x0397, 0x83A5, 0x0398, 0x83A6,
- 0x0399, 0x83A7, 0x039A, 0x83A8, 0x039B, 0x83A9, 0x039C, 0x83AA, 0x039D, 0x83AB, 0x039E, 0x83AC, 0x039F, 0x83AD, 0x03A0, 0x83AE,
- 0x03A1, 0x83AF, 0x03A3, 0x83B0, 0x03A4, 0x83B1, 0x03A5, 0x83B2, 0x03A6, 0x83B3, 0x03A7, 0x83B4, 0x03A8, 0x83B5, 0x03A9, 0x83B6,
- 0x03B1, 0x83BF, 0x03B2, 0x83C0, 0x03B3, 0x83C1, 0x03B4, 0x83C2, 0x03B5, 0x83C3, 0x03B6, 0x83C4, 0x03B7, 0x83C5, 0x03B8, 0x83C6,
- 0x03B9, 0x83C7, 0x03BA, 0x83C8, 0x03BB, 0x83C9, 0x03BC, 0x83CA, 0x03BD, 0x83CB, 0x03BE, 0x83CC, 0x03BF, 0x83CD, 0x03C0, 0x83CE,
- 0x03C1, 0x83CF, 0x03C3, 0x83D0, 0x03C4, 0x83D1, 0x03C5, 0x83D2, 0x03C6, 0x83D3, 0x03C7, 0x83D4, 0x03C8, 0x83D5, 0x03C9, 0x83D6,
- 0x0401, 0x8446, 0x0410, 0x8440, 0x0411, 0x8441, 0x0412, 0x8442, 0x0413, 0x8443, 0x0414, 0x8444, 0x0415, 0x8445, 0x0416, 0x8447,
- 0x0417, 0x8448, 0x0418, 0x8449, 0x0419, 0x844A, 0x041A, 0x844B, 0x041B, 0x844C, 0x041C, 0x844D, 0x041D, 0x844E, 0x041E, 0x844F,
- 0x041F, 0x8450, 0x0420, 0x8451, 0x0421, 0x8452, 0x0422, 0x8453, 0x0423, 0x8454, 0x0424, 0x8455, 0x0425, 0x8456, 0x0426, 0x8457,
- 0x0427, 0x8458, 0x0428, 0x8459, 0x0429, 0x845A, 0x042A, 0x845B, 0x042B, 0x845C, 0x042C, 0x845D, 0x042D, 0x845E, 0x042E, 0x845F,
- 0x042F, 0x8460, 0x0430, 0x8470, 0x0431, 0x8471, 0x0432, 0x8472, 0x0433, 0x8473, 0x0434, 0x8474, 0x0435, 0x8475, 0x0436, 0x8477,
- 0x0437, 0x8478, 0x0438, 0x8479, 0x0439, 0x847A, 0x043A, 0x847B, 0x043B, 0x847C, 0x043C, 0x847D, 0x043D, 0x847E, 0x043E, 0x8480,
- 0x043F, 0x8481, 0x0440, 0x8482, 0x0441, 0x8483, 0x0442, 0x8484, 0x0443, 0x8485, 0x0444, 0x8486, 0x0445, 0x8487, 0x0446, 0x8488,
- 0x0447, 0x8489, 0x0448, 0x848A, 0x0449, 0x848B, 0x044A, 0x848C, 0x044B, 0x848D, 0x044C, 0x848E, 0x044D, 0x848F, 0x044E, 0x8490,
- 0x044F, 0x8491, 0x0451, 0x8476, 0x2010, 0x815D, 0x2015, 0x815C, 0x2018, 0x8165, 0x2019, 0x8166, 0x201C, 0x8167, 0x201D, 0x8168,
- 0x2020, 0x81F5, 0x2021, 0x81F6, 0x2025, 0x8164, 0x2026, 0x8163, 0x2030, 0x81F1, 0x2032, 0x818C, 0x2033, 0x818D, 0x203B, 0x81A6,
- 0x2103, 0x818E, 0x2116, 0x8782, 0x2121, 0x8784, 0x212B, 0x81F0, 0x2160, 0x8754, 0x2161, 0x8755, 0x2162, 0x8756, 0x2163, 0x8757,
- 0x2164, 0x8758, 0x2165, 0x8759, 0x2166, 0x875A, 0x2167, 0x875B, 0x2168, 0x875C, 0x2169, 0x875D, 0x2170, 0xFA40, 0x2171, 0xFA41,
- 0x2172, 0xFA42, 0x2173, 0xFA43, 0x2174, 0xFA44, 0x2175, 0xFA45, 0x2176, 0xFA46, 0x2177, 0xFA47, 0x2178, 0xFA48, 0x2179, 0xFA49,
- 0x2190, 0x81A9, 0x2191, 0x81AA, 0x2192, 0x81A8, 0x2193, 0x81AB, 0x21D2, 0x81CB, 0x21D4, 0x81CC, 0x2200, 0x81CD, 0x2202, 0x81DD,
- 0x2203, 0x81CE, 0x2207, 0x81DE, 0x2208, 0x81B8, 0x220B, 0x81B9, 0x2211, 0x8794, 0x221A, 0x81E3, 0x221D, 0x81E5, 0x221E, 0x8187,
- 0x221F, 0x8798, 0x2220, 0x81DA, 0x2225, 0x8161, 0x2227, 0x81C8, 0x2228, 0x81C9, 0x2229, 0x81BF, 0x222A, 0x81BE, 0x222B, 0x81E7,
- 0x222C, 0x81E8, 0x222E, 0x8793, 0x2234, 0x8188, 0x2235, 0x81E6, 0x223D, 0x81E4, 0x2252, 0x81E0, 0x2260, 0x8182, 0x2261, 0x81DF,
- 0x2266, 0x8185, 0x2267, 0x8186, 0x226A, 0x81E1, 0x226B, 0x81E2, 0x2282, 0x81BC, 0x2283, 0x81BD, 0x2286, 0x81BA, 0x2287, 0x81BB,
- 0x22A5, 0x81DB, 0x22BF, 0x8799, 0x2312, 0x81DC, 0x2460, 0x8740, 0x2461, 0x8741, 0x2462, 0x8742, 0x2463, 0x8743, 0x2464, 0x8744,
- 0x2465, 0x8745, 0x2466, 0x8746, 0x2467, 0x8747, 0x2468, 0x8748, 0x2469, 0x8749, 0x246A, 0x874A, 0x246B, 0x874B, 0x246C, 0x874C,
- 0x246D, 0x874D, 0x246E, 0x874E, 0x246F, 0x874F, 0x2470, 0x8750, 0x2471, 0x8751, 0x2472, 0x8752, 0x2473, 0x8753, 0x2500, 0x849F,
- 0x2501, 0x84AA, 0x2502, 0x84A0, 0x2503, 0x84AB, 0x250C, 0x84A1, 0x250F, 0x84AC, 0x2510, 0x84A2, 0x2513, 0x84AD, 0x2514, 0x84A4,
- 0x2517, 0x84AF, 0x2518, 0x84A3, 0x251B, 0x84AE, 0x251C, 0x84A5, 0x251D, 0x84BA, 0x2520, 0x84B5, 0x2523, 0x84B0, 0x2524, 0x84A7,
- 0x2525, 0x84BC, 0x2528, 0x84B7, 0x252B, 0x84B2, 0x252C, 0x84A6, 0x252F, 0x84B6, 0x2530, 0x84BB, 0x2533, 0x84B1, 0x2534, 0x84A8,
- 0x2537, 0x84B8, 0x2538, 0x84BD, 0x253B, 0x84B3, 0x253C, 0x84A9, 0x253F, 0x84B9, 0x2542, 0x84BE, 0x254B, 0x84B4, 0x25A0, 0x81A1,
- 0x25A1, 0x81A0, 0x25B2, 0x81A3, 0x25B3, 0x81A2, 0x25BC, 0x81A5, 0x25BD, 0x81A4, 0x25C6, 0x819F, 0x25C7, 0x819E, 0x25CB, 0x819B,
- 0x25CE, 0x819D, 0x25CF, 0x819C, 0x25EF, 0x81FC, 0x2605, 0x819A, 0x2606, 0x8199, 0x2640, 0x818A, 0x2642, 0x8189, 0x266A, 0x81F4,
- 0x266D, 0x81F3, 0x266F, 0x81F2, 0x3000, 0x8140, 0x3001, 0x8141, 0x3002, 0x8142, 0x3003, 0x8156, 0x3005, 0x8158, 0x3006, 0x8159,
- 0x3007, 0x815A, 0x3008, 0x8171, 0x3009, 0x8172, 0x300A, 0x8173, 0x300B, 0x8174, 0x300C, 0x8175, 0x300D, 0x8176, 0x300E, 0x8177,
- 0x300F, 0x8178, 0x3010, 0x8179, 0x3011, 0x817A, 0x3012, 0x81A7, 0x3013, 0x81AC, 0x3014, 0x816B, 0x3015, 0x816C, 0x301D, 0x8780,
- 0x301F, 0x8781, 0x3041, 0x829F, 0x3042, 0x82A0, 0x3043, 0x82A1, 0x3044, 0x82A2, 0x3045, 0x82A3, 0x3046, 0x82A4, 0x3047, 0x82A5,
- 0x3048, 0x82A6, 0x3049, 0x82A7, 0x304A, 0x82A8, 0x304B, 0x82A9, 0x304C, 0x82AA, 0x304D, 0x82AB, 0x304E, 0x82AC, 0x304F, 0x82AD,
- 0x3050, 0x82AE, 0x3051, 0x82AF, 0x3052, 0x82B0, 0x3053, 0x82B1, 0x3054, 0x82B2, 0x3055, 0x82B3, 0x3056, 0x82B4, 0x3057, 0x82B5,
- 0x3058, 0x82B6, 0x3059, 0x82B7, 0x305A, 0x82B8, 0x305B, 0x82B9, 0x305C, 0x82BA, 0x305D, 0x82BB, 0x305E, 0x82BC, 0x305F, 0x82BD,
- 0x3060, 0x82BE, 0x3061, 0x82BF, 0x3062, 0x82C0, 0x3063, 0x82C1, 0x3064, 0x82C2, 0x3065, 0x82C3, 0x3066, 0x82C4, 0x3067, 0x82C5,
- 0x3068, 0x82C6, 0x3069, 0x82C7, 0x306A, 0x82C8, 0x306B, 0x82C9, 0x306C, 0x82CA, 0x306D, 0x82CB, 0x306E, 0x82CC, 0x306F, 0x82CD,
- 0x3070, 0x82CE, 0x3071, 0x82CF, 0x3072, 0x82D0, 0x3073, 0x82D1, 0x3074, 0x82D2, 0x3075, 0x82D3, 0x3076, 0x82D4, 0x3077, 0x82D5,
- 0x3078, 0x82D6, 0x3079, 0x82D7, 0x307A, 0x82D8, 0x307B, 0x82D9, 0x307C, 0x82DA, 0x307D, 0x82DB, 0x307E, 0x82DC, 0x307F, 0x82DD,
- 0x3080, 0x82DE, 0x3081, 0x82DF, 0x3082, 0x82E0, 0x3083, 0x82E1, 0x3084, 0x82E2, 0x3085, 0x82E3, 0x3086, 0x82E4, 0x3087, 0x82E5,
- 0x3088, 0x82E6, 0x3089, 0x82E7, 0x308A, 0x82E8, 0x308B, 0x82E9, 0x308C, 0x82EA, 0x308D, 0x82EB, 0x308E, 0x82EC, 0x308F, 0x82ED,
- 0x3090, 0x82EE, 0x3091, 0x82EF, 0x3092, 0x82F0, 0x3093, 0x82F1, 0x309B, 0x814A, 0x309C, 0x814B, 0x309D, 0x8154, 0x309E, 0x8155,
- 0x30A1, 0x8340, 0x30A2, 0x8341, 0x30A3, 0x8342, 0x30A4, 0x8343, 0x30A5, 0x8344, 0x30A6, 0x8345, 0x30A7, 0x8346, 0x30A8, 0x8347,
- 0x30A9, 0x8348, 0x30AA, 0x8349, 0x30AB, 0x834A, 0x30AC, 0x834B, 0x30AD, 0x834C, 0x30AE, 0x834D, 0x30AF, 0x834E, 0x30B0, 0x834F,
- 0x30B1, 0x8350, 0x30B2, 0x8351, 0x30B3, 0x8352, 0x30B4, 0x8353, 0x30B5, 0x8354, 0x30B6, 0x8355, 0x30B7, 0x8356, 0x30B8, 0x8357,
- 0x30B9, 0x8358, 0x30BA, 0x8359, 0x30BB, 0x835A, 0x30BC, 0x835B, 0x30BD, 0x835C, 0x30BE, 0x835D, 0x30BF, 0x835E, 0x30C0, 0x835F,
- 0x30C1, 0x8360, 0x30C2, 0x8361, 0x30C3, 0x8362, 0x30C4, 0x8363, 0x30C5, 0x8364, 0x30C6, 0x8365, 0x30C7, 0x8366, 0x30C8, 0x8367,
- 0x30C9, 0x8368, 0x30CA, 0x8369, 0x30CB, 0x836A, 0x30CC, 0x836B, 0x30CD, 0x836C, 0x30CE, 0x836D, 0x30CF, 0x836E, 0x30D0, 0x836F,
- 0x30D1, 0x8370, 0x30D2, 0x8371, 0x30D3, 0x8372, 0x30D4, 0x8373, 0x30D5, 0x8374, 0x30D6, 0x8375, 0x30D7, 0x8376, 0x30D8, 0x8377,
- 0x30D9, 0x8378, 0x30DA, 0x8379, 0x30DB, 0x837A, 0x30DC, 0x837B, 0x30DD, 0x837C, 0x30DE, 0x837D, 0x30DF, 0x837E, 0x30E0, 0x8380,
- 0x30E1, 0x8381, 0x30E2, 0x8382, 0x30E3, 0x8383, 0x30E4, 0x8384, 0x30E5, 0x8385, 0x30E6, 0x8386, 0x30E7, 0x8387, 0x30E8, 0x8388,
- 0x30E9, 0x8389, 0x30EA, 0x838A, 0x30EB, 0x838B, 0x30EC, 0x838C, 0x30ED, 0x838D, 0x30EE, 0x838E, 0x30EF, 0x838F, 0x30F0, 0x8390,
- 0x30F1, 0x8391, 0x30F2, 0x8392, 0x30F3, 0x8393, 0x30F4, 0x8394, 0x30F5, 0x8395, 0x30F6, 0x8396, 0x30FB, 0x8145, 0x30FC, 0x815B,
- 0x30FD, 0x8152, 0x30FE, 0x8153, 0x3231, 0x878A, 0x3232, 0x878B, 0x3239, 0x878C, 0x32A4, 0x8785, 0x32A5, 0x8786, 0x32A6, 0x8787,
- 0x32A7, 0x8788, 0x32A8, 0x8789, 0x3303, 0x8765, 0x330D, 0x8769, 0x3314, 0x8760, 0x3318, 0x8763, 0x3322, 0x8761, 0x3323, 0x876B,
- 0x3326, 0x876A, 0x3327, 0x8764, 0x332B, 0x876C, 0x3336, 0x8766, 0x333B, 0x876E, 0x3349, 0x875F, 0x334A, 0x876D, 0x334D, 0x8762,
- 0x3351, 0x8767, 0x3357, 0x8768, 0x337B, 0x877E, 0x337C, 0x878F, 0x337D, 0x878E, 0x337E, 0x878D, 0x338E, 0x8772, 0x338F, 0x8773,
- 0x339C, 0x876F, 0x339D, 0x8770, 0x339E, 0x8771, 0x33A1, 0x8775, 0x33C4, 0x8774, 0x33CD, 0x8783, 0x4E00, 0x88EA, 0x4E01, 0x929A,
- 0x4E03, 0x8EB5, 0x4E07, 0x969C, 0x4E08, 0x8FE4, 0x4E09, 0x8E4F, 0x4E0A, 0x8FE3, 0x4E0B, 0x89BA, 0x4E0D, 0x9573, 0x4E0E, 0x975E,
- 0x4E10, 0x98A0, 0x4E11, 0x894E, 0x4E14, 0x8A8E, 0x4E15, 0x98A1, 0x4E16, 0x90A2, 0x4E17, 0x99C0, 0x4E18, 0x8B75, 0x4E19, 0x95B8,
- 0x4E1E, 0x8FE5, 0x4E21, 0x97BC, 0x4E26, 0x95C0, 0x4E28, 0xFA68, 0x4E2A, 0x98A2, 0x4E2D, 0x9286, 0x4E31, 0x98A3, 0x4E32, 0x8BF8,
- 0x4E36, 0x98A4, 0x4E38, 0x8ADB, 0x4E39, 0x924F, 0x4E3B, 0x8EE5, 0x4E3C, 0x98A5, 0x4E3F, 0x98A6, 0x4E42, 0x98A7, 0x4E43, 0x9454,
- 0x4E45, 0x8B76, 0x4E4B, 0x9456, 0x4E4D, 0x93E1, 0x4E4E, 0x8CC1, 0x4E4F, 0x9652, 0x4E55, 0xE568, 0x4E56, 0x98A8, 0x4E57, 0x8FE6,
- 0x4E58, 0x98A9, 0x4E59, 0x89B3, 0x4E5D, 0x8BE3, 0x4E5E, 0x8CEE, 0x4E5F, 0x96E7, 0x4E62, 0x9BA4, 0x4E71, 0x9790, 0x4E73, 0x93FB,
- 0x4E7E, 0x8AA3, 0x4E80, 0x8B54, 0x4E82, 0x98AA, 0x4E85, 0x98AB, 0x4E86, 0x97B9, 0x4E88, 0x975C, 0x4E89, 0x9188, 0x4E8A, 0x98AD,
- 0x4E8B, 0x8E96, 0x4E8C, 0x93F1, 0x4E8E, 0x98B0, 0x4E91, 0x895D, 0x4E92, 0x8CDD, 0x4E94, 0x8CDC, 0x4E95, 0x88E4, 0x4E98, 0x986A,
- 0x4E99, 0x9869, 0x4E9B, 0x8DB1, 0x4E9C, 0x889F, 0x4E9E, 0x98B1, 0x4E9F, 0x98B2, 0x4EA0, 0x98B3, 0x4EA1, 0x9653, 0x4EA2, 0x98B4,
- 0x4EA4, 0x8CF0, 0x4EA5, 0x88E5, 0x4EA6, 0x9692, 0x4EA8, 0x8B9C, 0x4EAB, 0x8B9D, 0x4EAC, 0x8B9E, 0x4EAD, 0x92E0, 0x4EAE, 0x97BA,
- 0x4EB0, 0x98B5, 0x4EB3, 0x98B6, 0x4EB6, 0x98B7, 0x4EBA, 0x906C, 0x4EC0, 0x8F59, 0x4EC1, 0x906D, 0x4EC2, 0x98BC, 0x4EC4, 0x98BA,
- 0x4EC6, 0x98BB, 0x4EC7, 0x8B77, 0x4ECA, 0x8DA1, 0x4ECB, 0x89EE, 0x4ECD, 0x98B9, 0x4ECE, 0x98B8, 0x4ECF, 0x95A7, 0x4ED4, 0x8E65,
- 0x4ED5, 0x8E64, 0x4ED6, 0x91BC, 0x4ED7, 0x98BD, 0x4ED8, 0x9574, 0x4ED9, 0x90E5, 0x4EDD, 0x8157, 0x4EDE, 0x98BE, 0x4EDF, 0x98C0,
- 0x4EE1, 0xFA69, 0x4EE3, 0x91E3, 0x4EE4, 0x97DF, 0x4EE5, 0x88C8, 0x4EED, 0x98BF, 0x4EEE, 0x89BC, 0x4EF0, 0x8BC2, 0x4EF2, 0x9287,
- 0x4EF6, 0x8C8F, 0x4EF7, 0x98C1, 0x4EFB, 0x9443, 0x4EFC, 0xFA6A, 0x4F00, 0xFA6B, 0x4F01, 0x8AE9, 0x4F03, 0xFA6C, 0x4F09, 0x98C2,
- 0x4F0A, 0x88C9, 0x4F0D, 0x8CDE, 0x4F0E, 0x8AEA, 0x4F0F, 0x959A, 0x4F10, 0x94B0, 0x4F11, 0x8B78, 0x4F1A, 0x89EF, 0x4F1C, 0x98E5,
- 0x4F1D, 0x9360, 0x4F2F, 0x948C, 0x4F30, 0x98C4, 0x4F34, 0x94BA, 0x4F36, 0x97E0, 0x4F38, 0x904C, 0x4F39, 0xFA6D, 0x4F3A, 0x8E66,
- 0x4F3C, 0x8E97, 0x4F3D, 0x89BE, 0x4F43, 0x92CF, 0x4F46, 0x9241, 0x4F47, 0x98C8, 0x4F4D, 0x88CA, 0x4F4E, 0x92E1, 0x4F4F, 0x8F5A,
- 0x4F50, 0x8DB2, 0x4F51, 0x9743, 0x4F53, 0x91CC, 0x4F55, 0x89BD, 0x4F56, 0xFA6E, 0x4F57, 0x98C7, 0x4F59, 0x975D, 0x4F5A, 0x98C3,
- 0x4F5B, 0x98C5, 0x4F5C, 0x8DEC, 0x4F5D, 0x98C6, 0x4F5E, 0x9B43, 0x4F69, 0x98CE, 0x4F6F, 0x98D1, 0x4F70, 0x98CF, 0x4F73, 0x89C0,
- 0x4F75, 0x95B9, 0x4F76, 0x98C9, 0x4F7B, 0x98CD, 0x4F7C, 0x8CF1, 0x4F7F, 0x8E67, 0x4F83, 0x8AA4, 0x4F86, 0x98D2, 0x4F88, 0x98CA,
- 0x4F8A, 0xFA70, 0x4F8B, 0x97E1, 0x4F8D, 0x8E98, 0x4F8F, 0x98CB, 0x4F91, 0x98D0, 0x4F92, 0xFA6F, 0x4F94, 0xFA72, 0x4F96, 0x98D3,
- 0x4F98, 0x98CC, 0x4F9A, 0xFA71, 0x4F9B, 0x8B9F, 0x4F9D, 0x88CB, 0x4FA0, 0x8BA0, 0x4FA1, 0x89BF, 0x4FAB, 0x9B44, 0x4FAD, 0x9699,
- 0x4FAE, 0x958E, 0x4FAF, 0x8CF2, 0x4FB5, 0x904E, 0x4FB6, 0x97B5, 0x4FBF, 0x95D6, 0x4FC2, 0x8C57, 0x4FC3, 0x91A3, 0x4FC4, 0x89E2,
- 0x4FC9, 0xFA61, 0x4FCA, 0x8F72, 0x4FCD, 0xFA73, 0x4FCE, 0x98D7, 0x4FD0, 0x98DC, 0x4FD1, 0x98DA, 0x4FD4, 0x98D5, 0x4FD7, 0x91AD,
- 0x4FD8, 0x98D8, 0x4FDA, 0x98DB, 0x4FDB, 0x98D9, 0x4FDD, 0x95DB, 0x4FDF, 0x98D6, 0x4FE1, 0x904D, 0x4FE3, 0x9693, 0x4FE4, 0x98DD,
- 0x4FE5, 0x98DE, 0x4FEE, 0x8F43, 0x4FEF, 0x98EB, 0x4FF3, 0x946F, 0x4FF5, 0x9555, 0x4FF6, 0x98E6, 0x4FF8, 0x95EE, 0x4FFA, 0x89B4,
- 0x4FFE, 0x98EA, 0x4FFF, 0xFA76, 0x5005, 0x98E4, 0x5006, 0x98ED, 0x5009, 0x9171, 0x500B, 0x8CC2, 0x500D, 0x947B, 0x500F, 0xE0C5,
- 0x5011, 0x98EC, 0x5012, 0x937C, 0x5014, 0x98E1, 0x5016, 0x8CF4, 0x5019, 0x8CF3, 0x501A, 0x98DF, 0x501E, 0xFA77, 0x501F, 0x8ED8,
- 0x5021, 0x98E7, 0x5022, 0xFA75, 0x5023, 0x95ED, 0x5024, 0x926C, 0x5025, 0x98E3, 0x5026, 0x8C91, 0x5028, 0x98E0, 0x5029, 0x98E8,
- 0x502A, 0x98E2, 0x502B, 0x97CF, 0x502C, 0x98E9, 0x502D, 0x9860, 0x5036, 0x8BE4, 0x5039, 0x8C90, 0x5040, 0xFA74, 0x5042, 0xFA7A,
- 0x5043, 0x98EE, 0x5046, 0xFA78, 0x5047, 0x98EF, 0x5048, 0x98F3, 0x5049, 0x88CC, 0x504F, 0x95CE, 0x5050, 0x98F2, 0x5055, 0x98F1,
- 0x5056, 0x98F5, 0x505A, 0x98F4, 0x505C, 0x92E2, 0x5065, 0x8C92, 0x506C, 0x98F6, 0x5070, 0xFA79, 0x5072, 0x8EC3, 0x5074, 0x91A4,
- 0x5075, 0x92E3, 0x5076, 0x8BF4, 0x5078, 0x98F7, 0x507D, 0x8B55, 0x5080, 0x98F8, 0x5085, 0x98FA, 0x508D, 0x9654, 0x5091, 0x8C86,
- 0x5094, 0xFA7B, 0x5098, 0x8E50, 0x5099, 0x94F5, 0x509A, 0x98F9, 0x50AC, 0x8DC3, 0x50AD, 0x9762, 0x50B2, 0x98FC, 0x50B3, 0x9942,
- 0x50B4, 0x98FB, 0x50B5, 0x8DC2, 0x50B7, 0x8F9D, 0x50BE, 0x8C58, 0x50C2, 0x9943, 0x50C5, 0x8BCD, 0x50C9, 0x9940, 0x50CA, 0x9941,
- 0x50CD, 0x93AD, 0x50CF, 0x919C, 0x50D1, 0x8BA1, 0x50D5, 0x966C, 0x50D6, 0x9944, 0x50D8, 0xFA7D, 0x50DA, 0x97BB, 0x50DE, 0x9945,
- 0x50E3, 0x9948, 0x50E5, 0x9946, 0x50E7, 0x916D, 0x50ED, 0x9947, 0x50EE, 0x9949, 0x50F4, 0xFA7C, 0x50F5, 0x994B, 0x50F9, 0x994A,
- 0x50FB, 0x95C6, 0x5100, 0x8B56, 0x5101, 0x994D, 0x5102, 0x994E, 0x5104, 0x89AD, 0x5109, 0x994C, 0x5112, 0x8EF2, 0x5114, 0x9951,
- 0x5115, 0x9950, 0x5116, 0x994F, 0x5118, 0x98D4, 0x511A, 0x9952, 0x511F, 0x8F9E, 0x5121, 0x9953, 0x512A, 0x9744, 0x5132, 0x96D7,
- 0x5137, 0x9955, 0x513A, 0x9954, 0x513B, 0x9957, 0x513C, 0x9956, 0x513F, 0x9958, 0x5140, 0x9959, 0x5141, 0x88F2, 0x5143, 0x8CB3,
- 0x5144, 0x8C5A, 0x5145, 0x8F5B, 0x5146, 0x929B, 0x5147, 0x8BA2, 0x5148, 0x90E6, 0x5149, 0x8CF5, 0x514A, 0xFA7E, 0x514B, 0x8D8E,
- 0x514C, 0x995B, 0x514D, 0x96C6, 0x514E, 0x9365, 0x5150, 0x8E99, 0x5152, 0x995A, 0x5154, 0x995C, 0x515A, 0x937D, 0x515C, 0x8A95,
- 0x5162, 0x995D, 0x5164, 0xFA80, 0x5165, 0x93FC, 0x5168, 0x9153, 0x5169, 0x995F, 0x516A, 0x9960, 0x516B, 0x94AA, 0x516C, 0x8CF6,
- 0x516D, 0x985A, 0x516E, 0x9961, 0x5171, 0x8BA4, 0x5175, 0x95BA, 0x5176, 0x91B4, 0x5177, 0x8BEF, 0x5178, 0x9354, 0x517C, 0x8C93,
- 0x5180, 0x9962, 0x5182, 0x9963, 0x5185, 0x93E0, 0x5186, 0x897E, 0x5189, 0x9966, 0x518A, 0x8DFB, 0x518C, 0x9965, 0x518D, 0x8DC4,
- 0x518F, 0x9967, 0x5190, 0xE3EC, 0x5191, 0x9968, 0x5192, 0x9660, 0x5193, 0x9969, 0x5195, 0x996A, 0x5196, 0x996B, 0x5197, 0x8FE7,
- 0x5199, 0x8ECA, 0x519D, 0xFA81, 0x51A0, 0x8AA5, 0x51A2, 0x996E, 0x51A4, 0x996C, 0x51A5, 0x96BB, 0x51A6, 0x996D, 0x51A8, 0x9579,
- 0x51A9, 0x996F, 0x51AA, 0x9970, 0x51AB, 0x9971, 0x51AC, 0x937E, 0x51B0, 0x9975, 0x51B1, 0x9973, 0x51B2, 0x9974, 0x51B3, 0x9972,
- 0x51B4, 0x8DE1, 0x51B5, 0x9976, 0x51B6, 0x96E8, 0x51B7, 0x97E2, 0x51BD, 0x9977, 0x51BE, 0xFA82, 0x51C4, 0x90A6, 0x51C5, 0x9978,
- 0x51C6, 0x8F79, 0x51C9, 0x9979, 0x51CB, 0x929C, 0x51CC, 0x97BD, 0x51CD, 0x9380, 0x51D6, 0x99C3, 0x51DB, 0x997A, 0x51DC, 0xEAA3,
- 0x51DD, 0x8BC3, 0x51E0, 0x997B, 0x51E1, 0x967D, 0x51E6, 0x8F88, 0x51E7, 0x91FA, 0x51E9, 0x997D, 0x51EA, 0x93E2, 0x51EC, 0xFA83,
- 0x51ED, 0x997E, 0x51F0, 0x9980, 0x51F1, 0x8A4D, 0x51F5, 0x9981, 0x51F6, 0x8BA5, 0x51F8, 0x93CA, 0x51F9, 0x899A, 0x51FA, 0x8F6F,
- 0x51FD, 0x949F, 0x51FE, 0x9982, 0x5200, 0x9381, 0x5203, 0x906E, 0x5204, 0x9983, 0x5206, 0x95AA, 0x5207, 0x90D8, 0x5208, 0x8AA0,
- 0x520A, 0x8AA7, 0x520B, 0x9984, 0x520E, 0x9986, 0x5211, 0x8C59, 0x5214, 0x9985, 0x5215, 0xFA84, 0x5217, 0x97F1, 0x521D, 0x8F89,
- 0x5224, 0x94BB, 0x5225, 0x95CA, 0x5227, 0x9987, 0x5229, 0x9798, 0x522A, 0x9988, 0x522E, 0x9989, 0x5230, 0x939E, 0x5233, 0x998A,
- 0x5236, 0x90A7, 0x5237, 0x8DFC, 0x5238, 0x8C94, 0x5239, 0x998B, 0x523A, 0x8E68, 0x523B, 0x8D8F, 0x5243, 0x92E4, 0x5244, 0x998D,
- 0x5247, 0x91A5, 0x524A, 0x8DED, 0x524B, 0x998E, 0x524C, 0x998F, 0x524D, 0x914F, 0x524F, 0x998C, 0x5254, 0x9991, 0x5256, 0x9655,
- 0x525B, 0x8D84, 0x525E, 0x9990, 0x5263, 0x8C95, 0x5264, 0x8DDC, 0x5265, 0x948D, 0x5269, 0x9994, 0x526A, 0x9992, 0x526F, 0x959B,
- 0x5270, 0x8FE8, 0x5271, 0x999B, 0x5272, 0x8A84, 0x5273, 0x9995, 0x5274, 0x9993, 0x5275, 0x916E, 0x527D, 0x9997, 0x527F, 0x9996,
- 0x5283, 0x8A63, 0x5287, 0x8C80, 0x5288, 0x999C, 0x5289, 0x97AB, 0x528D, 0x9998, 0x5291, 0x999D, 0x5292, 0x999A, 0x5294, 0x9999,
- 0x529B, 0x97CD, 0x529C, 0xFA85, 0x529F, 0x8CF7, 0x52A0, 0x89C1, 0x52A3, 0x97F2, 0x52A6, 0xFA86, 0x52A9, 0x8F95, 0x52AA, 0x9377,
- 0x52AB, 0x8D85, 0x52AC, 0x99A0, 0x52AD, 0x99A1, 0x52AF, 0xFB77, 0x52B1, 0x97E3, 0x52B4, 0x984A, 0x52B5, 0x99A3, 0x52B9, 0x8CF8,
- 0x52BC, 0x99A2, 0x52BE, 0x8A4E, 0x52C0, 0xFA87, 0x52C1, 0x99A4, 0x52C3, 0x9675, 0x52C5, 0x92BA, 0x52C7, 0x9745, 0x52C9, 0x95D7,
- 0x52CD, 0x99A5, 0x52D2, 0xE8D3, 0x52D5, 0x93AE, 0x52D7, 0x99A6, 0x52D8, 0x8AA8, 0x52D9, 0x96B1, 0x52DB, 0xFA88, 0x52DD, 0x8F9F,
- 0x52DE, 0x99A7, 0x52DF, 0x95E5, 0x52E0, 0x99AB, 0x52E2, 0x90A8, 0x52E3, 0x99A8, 0x52E4, 0x8BCE, 0x52E6, 0x99A9, 0x52E7, 0x8AA9,
- 0x52F2, 0x8C4D, 0x52F3, 0x99AC, 0x52F5, 0x99AD, 0x52F8, 0x99AE, 0x52F9, 0x99AF, 0x52FA, 0x8ED9, 0x52FE, 0x8CF9, 0x52FF, 0x96DC,
- 0x5300, 0xFA89, 0x5301, 0x96E6, 0x5302, 0x93F5, 0x5305, 0x95EF, 0x5306, 0x99B0, 0x5307, 0xFA8A, 0x5308, 0x99B1, 0x530D, 0x99B3,
- 0x530F, 0x99B5, 0x5310, 0x99B4, 0x5315, 0x99B6, 0x5316, 0x89BB, 0x5317, 0x966B, 0x5319, 0x8DFA, 0x531A, 0x99B7, 0x531D, 0x9178,
- 0x5320, 0x8FA0, 0x5321, 0x8BA7, 0x5323, 0x99B8, 0x5324, 0xFA8B, 0x532A, 0x94D9, 0x532F, 0x99B9, 0x5331, 0x99BA, 0x5333, 0x99BB,
- 0x5338, 0x99BC, 0x5339, 0x9543, 0x533A, 0x8BE6, 0x533B, 0x88E3, 0x533F, 0x93BD, 0x5340, 0x99BD, 0x5341, 0x8F5C, 0x5343, 0x90E7,
- 0x5345, 0x99BF, 0x5346, 0x99BE, 0x5347, 0x8FA1, 0x5348, 0x8CDF, 0x5349, 0x99C1, 0x534A, 0x94BC, 0x534D, 0x99C2, 0x5351, 0x94DA,
- 0x5352, 0x91B2, 0x5353, 0x91EC, 0x5354, 0x8BA6, 0x5357, 0x93EC, 0x5358, 0x9250, 0x535A, 0x948E, 0x535C, 0x966D, 0x535E, 0x99C4,
- 0x5360, 0x90E8, 0x5366, 0x8C54, 0x5369, 0x99C5, 0x536E, 0x99C6, 0x536F, 0x894B, 0x5370, 0x88F3, 0x5371, 0x8AEB, 0x5372, 0xFA8C,
- 0x5373, 0x91A6, 0x5374, 0x8B70, 0x5375, 0x9791, 0x5377, 0x99C9, 0x5378, 0x89B5, 0x537B, 0x99C8, 0x537F, 0x8BA8, 0x5382, 0x99CA,
- 0x5384, 0x96EF, 0x5393, 0xFA8D, 0x5396, 0x99CB, 0x5398, 0x97D0, 0x539A, 0x8CFA, 0x539F, 0x8CB4, 0x53A0, 0x99CC, 0x53A5, 0x99CE,
- 0x53A6, 0x99CD, 0x53A8, 0x907E, 0x53A9, 0x8958, 0x53AD, 0x897D, 0x53AE, 0x99CF, 0x53B0, 0x99D0, 0x53B2, 0xFA8E, 0x53B3, 0x8CB5,
- 0x53B6, 0x99D1, 0x53BB, 0x8B8E, 0x53C2, 0x8E51, 0x53C3, 0x99D2, 0x53C8, 0x9694, 0x53C9, 0x8DB3, 0x53CA, 0x8B79, 0x53CB, 0x9746,
- 0x53CC, 0x916F, 0x53CD, 0x94BD, 0x53CE, 0x8EFB, 0x53D4, 0x8F66, 0x53D6, 0x8EE6, 0x53D7, 0x8EF3, 0x53D9, 0x8F96, 0x53DB, 0x94BE,
- 0x53DD, 0xFA8F, 0x53DF, 0x99D5, 0x53E1, 0x8962, 0x53E2, 0x9170, 0x53E3, 0x8CFB, 0x53E4, 0x8CC3, 0x53E5, 0x8BE5, 0x53E8, 0x99D9,
- 0x53E9, 0x9240, 0x53EA, 0x91FC, 0x53EB, 0x8BA9, 0x53EC, 0x8FA2, 0x53ED, 0x99DA, 0x53EE, 0x99D8, 0x53EF, 0x89C2, 0x53F0, 0x91E4,
- 0x53F1, 0x8EB6, 0x53F2, 0x8E6A, 0x53F3, 0x8945, 0x53F6, 0x8A90, 0x53F7, 0x8D86, 0x53F8, 0x8E69, 0x53FA, 0x99DB, 0x5401, 0x99DC,
- 0x5403, 0x8B68, 0x5404, 0x8A65, 0x5408, 0x8D87, 0x5409, 0x8B67, 0x540A, 0x92DD, 0x540B, 0x8944, 0x540C, 0x93AF, 0x540D, 0x96BC,
- 0x540E, 0x8D40, 0x540F, 0x9799, 0x5410, 0x9366, 0x5411, 0x8CFC, 0x541B, 0x8C4E, 0x541D, 0x99E5, 0x541F, 0x8BE1, 0x5420, 0x9669,
- 0x5426, 0x94DB, 0x5429, 0x99E4, 0x542B, 0x8ADC, 0x542C, 0x99DF, 0x542D, 0x99E0, 0x542E, 0x99E2, 0x5436, 0x99E3, 0x5438, 0x8B7A,
- 0x5439, 0x9081, 0x543B, 0x95AB, 0x543C, 0x99E1, 0x543D, 0x99DD, 0x543E, 0x8CE1, 0x5440, 0x99DE, 0x5442, 0x9843, 0x5446, 0x95F0,
- 0x5448, 0x92E6, 0x5449, 0x8CE0, 0x544A, 0x8D90, 0x544E, 0x99E6, 0x5451, 0x93DB, 0x545F, 0x99EA, 0x5468, 0x8EFC, 0x546A, 0x8EF4,
- 0x5470, 0x99ED, 0x5471, 0x99EB, 0x5473, 0x96A1, 0x5475, 0x99E8, 0x5476, 0x99F1, 0x5477, 0x99EC, 0x547B, 0x99EF, 0x547C, 0x8CC4,
- 0x547D, 0x96BD, 0x5480, 0x99F0, 0x5484, 0x99F2, 0x5486, 0x99F4, 0x548A, 0xFA92, 0x548B, 0x8DEE, 0x548C, 0x9861, 0x548E, 0x99E9,
- 0x548F, 0x99E7, 0x5490, 0x99F3, 0x5492, 0x99EE, 0x549C, 0xFA91, 0x54A2, 0x99F6, 0x54A4, 0x9A42, 0x54A5, 0x99F8, 0x54A8, 0x99FC,
- 0x54A9, 0xFA93, 0x54AB, 0x9A40, 0x54AC, 0x99F9, 0x54AF, 0x9A5D, 0x54B2, 0x8DE7, 0x54B3, 0x8A50, 0x54B8, 0x99F7, 0x54BC, 0x9A44,
- 0x54BD, 0x88F4, 0x54BE, 0x9A43, 0x54C0, 0x88A3, 0x54C1, 0x9569, 0x54C2, 0x9A41, 0x54C4, 0x99FA, 0x54C7, 0x99F5, 0x54C8, 0x99FB,
- 0x54C9, 0x8DC6, 0x54D8, 0x9A45, 0x54E1, 0x88F5, 0x54E2, 0x9A4E, 0x54E5, 0x9A46, 0x54E6, 0x9A47, 0x54E8, 0x8FA3, 0x54E9, 0x9689,
- 0x54ED, 0x9A4C, 0x54EE, 0x9A4B, 0x54F2, 0x934E, 0x54FA, 0x9A4D, 0x54FD, 0x9A4A, 0x54FF, 0xFA94, 0x5504, 0x8953, 0x5506, 0x8DB4,
- 0x5507, 0x904F, 0x550F, 0x9A48, 0x5510, 0x9382, 0x5514, 0x9A49, 0x5516, 0x88A0, 0x552E, 0x9A53, 0x552F, 0x9742, 0x5531, 0x8FA5,
- 0x5533, 0x9A59, 0x5538, 0x9A58, 0x5539, 0x9A4F, 0x553E, 0x91C1, 0x5540, 0x9A50, 0x5544, 0x91ED, 0x5545, 0x9A55, 0x5546, 0x8FA4,
- 0x554C, 0x9A52, 0x554F, 0x96E2, 0x5553, 0x8C5B, 0x5556, 0x9A56, 0x5557, 0x9A57, 0x555C, 0x9A54, 0x555D, 0x9A5A, 0x5563, 0x9A51,
- 0x557B, 0x9A60, 0x557C, 0x9A65, 0x557E, 0x9A61, 0x5580, 0x9A5C, 0x5583, 0x9A66, 0x5584, 0x9150, 0x5586, 0xFA95, 0x5587, 0x9A68,
- 0x5589, 0x8D41, 0x558A, 0x9A5E, 0x558B, 0x929D, 0x5598, 0x9A62, 0x5599, 0x9A5B, 0x559A, 0x8AAB, 0x559C, 0x8AEC, 0x559D, 0x8A85,
- 0x559E, 0x9A63, 0x559F, 0x9A5F, 0x55A7, 0x8C96, 0x55A8, 0x9A69, 0x55A9, 0x9A67, 0x55AA, 0x9172, 0x55AB, 0x8B69, 0x55AC, 0x8BAA,
- 0x55AE, 0x9A64, 0x55B0, 0x8BF2, 0x55B6, 0x8963, 0x55C4, 0x9A6D, 0x55C5, 0x9A6B, 0x55C7, 0x9AA5, 0x55D4, 0x9A70, 0x55DA, 0x9A6A,
- 0x55DC, 0x9A6E, 0x55DF, 0x9A6C, 0x55E3, 0x8E6B, 0x55E4, 0x9A6F, 0x55F7, 0x9A72, 0x55F9, 0x9A77, 0x55FD, 0x9A75, 0x55FE, 0x9A74,
- 0x5606, 0x9251, 0x5609, 0x89C3, 0x5614, 0x9A71, 0x5616, 0x9A73, 0x5617, 0x8FA6, 0x5618, 0x8952, 0x561B, 0x9A76, 0x5629, 0x89DC,
- 0x562F, 0x9A82, 0x5631, 0x8FFA, 0x5632, 0x9A7D, 0x5634, 0x9A7B, 0x5636, 0x9A7C, 0x5638, 0x9A7E, 0x5642, 0x895C, 0x564C, 0x9158,
- 0x564E, 0x9A78, 0x5650, 0x9A79, 0x565B, 0x8A9A, 0x5664, 0x9A81, 0x5668, 0x8AED, 0x566A, 0x9A84, 0x566B, 0x9A80, 0x566C, 0x9A83,
- 0x5674, 0x95AC, 0x5678, 0x93D3, 0x567A, 0x94B6, 0x5680, 0x9A86, 0x5686, 0x9A85, 0x5687, 0x8A64, 0x568A, 0x9A87, 0x568F, 0x9A8A,
- 0x5694, 0x9A89, 0x56A0, 0x9A88, 0x56A2, 0x9458, 0x56A5, 0x9A8B, 0x56AE, 0x9A8C, 0x56B4, 0x9A8E, 0x56B6, 0x9A8D, 0x56BC, 0x9A90,
- 0x56C0, 0x9A93, 0x56C1, 0x9A91, 0x56C2, 0x9A8F, 0x56C3, 0x9A92, 0x56C8, 0x9A94, 0x56CE, 0x9A95, 0x56D1, 0x9A96, 0x56D3, 0x9A97,
- 0x56D7, 0x9A98, 0x56D8, 0x9964, 0x56DA, 0x8EFA, 0x56DB, 0x8E6C, 0x56DE, 0x89F1, 0x56E0, 0x88F6, 0x56E3, 0x9263, 0x56EE, 0x9A99,
- 0x56F0, 0x8DA2, 0x56F2, 0x88CD, 0x56F3, 0x907D, 0x56F9, 0x9A9A, 0x56FA, 0x8CC5, 0x56FD, 0x8D91, 0x56FF, 0x9A9C, 0x5700, 0x9A9B,
- 0x5703, 0x95DE, 0x5704, 0x9A9D, 0x5708, 0x9A9F, 0x5709, 0x9A9E, 0x570B, 0x9AA0, 0x570D, 0x9AA1, 0x570F, 0x8C97, 0x5712, 0x8980,
- 0x5713, 0x9AA2, 0x5716, 0x9AA4, 0x5718, 0x9AA3, 0x571C, 0x9AA6, 0x571F, 0x9379, 0x5726, 0x9AA7, 0x5727, 0x88B3, 0x5728, 0x8DDD,
- 0x572D, 0x8C5C, 0x5730, 0x926E, 0x5737, 0x9AA8, 0x5738, 0x9AA9, 0x573B, 0x9AAB, 0x5740, 0x9AAC, 0x5742, 0x8DE2, 0x5747, 0x8BCF,
- 0x574A, 0x9656, 0x574E, 0x9AAA, 0x574F, 0x9AAD, 0x5750, 0x8DBF, 0x5751, 0x8D42, 0x5759, 0xFA96, 0x5761, 0x9AB1, 0x5764, 0x8DA3,
- 0x5765, 0xFA97, 0x5766, 0x9252, 0x5769, 0x9AAE, 0x576A, 0x92D8, 0x577F, 0x9AB2, 0x5782, 0x9082, 0x5788, 0x9AB0, 0x5789, 0x9AB3,
- 0x578B, 0x8C5E, 0x5793, 0x9AB4, 0x57A0, 0x9AB5, 0x57A2, 0x8D43, 0x57A3, 0x8A5F, 0x57A4, 0x9AB7, 0x57AA, 0x9AB8, 0x57AC, 0xFA98,
- 0x57B0, 0x9AB9, 0x57B3, 0x9AB6, 0x57C0, 0x9AAF, 0x57C3, 0x9ABA, 0x57C6, 0x9ABB, 0x57C7, 0xFA9A, 0x57C8, 0xFA99, 0x57CB, 0x9684,
- 0x57CE, 0x8FE9, 0x57D2, 0x9ABD, 0x57D3, 0x9ABE, 0x57D4, 0x9ABC, 0x57D6, 0x9AC0, 0x57DC, 0x9457, 0x57DF, 0x88E6, 0x57E0, 0x9575,
- 0x57E3, 0x9AC1, 0x57F4, 0x8FFB, 0x57F7, 0x8EB7, 0x57F9, 0x947C, 0x57FA, 0x8AEE, 0x57FC, 0x8DE9, 0x5800, 0x9678, 0x5802, 0x93B0,
- 0x5805, 0x8C98, 0x5806, 0x91CD, 0x580A, 0x9ABF, 0x580B, 0x9AC2, 0x5815, 0x91C2, 0x5819, 0x9AC3, 0x581D, 0x9AC4, 0x5821, 0x9AC6,
- 0x5824, 0x92E7, 0x582A, 0x8AAC, 0x582F, 0xEA9F, 0x5830, 0x8981, 0x5831, 0x95F1, 0x5834, 0x8FEA, 0x5835, 0x9367, 0x583A, 0x8DE4,
- 0x583D, 0x9ACC, 0x5840, 0x95BB, 0x5841, 0x97DB, 0x584A, 0x89F2, 0x584B, 0x9AC8, 0x5851, 0x9159, 0x5852, 0x9ACB, 0x5854, 0x9383,
- 0x5857, 0x9368, 0x5858, 0x9384, 0x5859, 0x94B7, 0x585A, 0x92CB, 0x585E, 0x8DC7, 0x5862, 0x9AC7, 0x5869, 0x8996, 0x586B, 0x9355,
- 0x5870, 0x9AC9, 0x5872, 0x9AC5, 0x5875, 0x906F, 0x5879, 0x9ACD, 0x587E, 0x8F6D, 0x5883, 0x8BAB, 0x5885, 0x9ACE, 0x5893, 0x95E6,
- 0x5897, 0x919D, 0x589C, 0x92C4, 0x589E, 0xFA9D, 0x589F, 0x9AD0, 0x58A8, 0x966E, 0x58AB, 0x9AD1, 0x58AE, 0x9AD6, 0x58B2, 0xFA9E,
- 0x58B3, 0x95AD, 0x58B8, 0x9AD5, 0x58B9, 0x9ACF, 0x58BA, 0x9AD2, 0x58BB, 0x9AD4, 0x58BE, 0x8DA4, 0x58C1, 0x95C7, 0x58C5, 0x9AD7,
- 0x58C7, 0x9264, 0x58CA, 0x89F3, 0x58CC, 0x8FEB, 0x58D1, 0x9AD9, 0x58D3, 0x9AD8, 0x58D5, 0x8D88, 0x58D7, 0x9ADA, 0x58D8, 0x9ADC,
- 0x58D9, 0x9ADB, 0x58DC, 0x9ADE, 0x58DE, 0x9AD3, 0x58DF, 0x9AE0, 0x58E4, 0x9ADF, 0x58E5, 0x9ADD, 0x58EB, 0x8E6D, 0x58EC, 0x9070,
- 0x58EE, 0x9173, 0x58EF, 0x9AE1, 0x58F0, 0x90BA, 0x58F1, 0x88EB, 0x58F2, 0x9484, 0x58F7, 0x92D9, 0x58F9, 0x9AE3, 0x58FA, 0x9AE2,
- 0x58FB, 0x9AE4, 0x58FC, 0x9AE5, 0x58FD, 0x9AE6, 0x5902, 0x9AE7, 0x5909, 0x95CF, 0x590A, 0x9AE8, 0x590B, 0xFA9F, 0x590F, 0x89C4,
- 0x5910, 0x9AE9, 0x5915, 0x975B, 0x5916, 0x8A4F, 0x5918, 0x99C7, 0x5919, 0x8F67, 0x591A, 0x91BD, 0x591B, 0x9AEA, 0x591C, 0x96E9,
- 0x5922, 0x96B2, 0x5925, 0x9AEC, 0x5927, 0x91E5, 0x5929, 0x9356, 0x592A, 0x91BE, 0x592B, 0x9576, 0x592C, 0x9AED, 0x592D, 0x9AEE,
- 0x592E, 0x899B, 0x5931, 0x8EB8, 0x5932, 0x9AEF, 0x5937, 0x88CE, 0x5938, 0x9AF0, 0x593E, 0x9AF1, 0x5944, 0x8982, 0x5947, 0x8AEF,
- 0x5948, 0x93DE, 0x5949, 0x95F2, 0x594E, 0x9AF5, 0x594F, 0x9174, 0x5950, 0x9AF4, 0x5951, 0x8C5F, 0x5953, 0xFAA0, 0x5954, 0x967A,
- 0x5955, 0x9AF3, 0x5957, 0x9385, 0x5958, 0x9AF7, 0x595A, 0x9AF6, 0x595B, 0xFAA1, 0x595D, 0xFAA2, 0x5960, 0x9AF9, 0x5962, 0x9AF8,
- 0x5963, 0xFAA3, 0x5965, 0x899C, 0x5967, 0x9AFA, 0x5968, 0x8FA7, 0x5969, 0x9AFC, 0x596A, 0x9244, 0x596C, 0x9AFB, 0x596E, 0x95B1,
- 0x5973, 0x8F97, 0x5974, 0x937A, 0x5978, 0x9B40, 0x597D, 0x8D44, 0x5981, 0x9B41, 0x5982, 0x9440, 0x5983, 0x94DC, 0x5984, 0x96CF,
- 0x598A, 0x9444, 0x598D, 0x9B4A, 0x5993, 0x8B57, 0x5996, 0x9764, 0x5999, 0x96AD, 0x599B, 0x9BAA, 0x599D, 0x9B42, 0x59A3, 0x9B45,
- 0x59A4, 0xFAA4, 0x59A5, 0x91C3, 0x59A8, 0x9657, 0x59AC, 0x9369, 0x59B2, 0x9B46, 0x59B9, 0x9685, 0x59BA, 0xFAA5, 0x59BB, 0x8DC8,
- 0x59BE, 0x8FA8, 0x59C6, 0x9B47, 0x59C9, 0x8E6F, 0x59CB, 0x8E6E, 0x59D0, 0x88B7, 0x59D1, 0x8CC6, 0x59D3, 0x90A9, 0x59D4, 0x88CF,
- 0x59D9, 0x9B4B, 0x59DA, 0x9B4C, 0x59DC, 0x9B49, 0x59E5, 0x8957, 0x59E6, 0x8AAD, 0x59E8, 0x9B48, 0x59EA, 0x96C3, 0x59EB, 0x9550,
- 0x59F6, 0x88A6, 0x59FB, 0x88F7, 0x59FF, 0x8E70, 0x5A01, 0x88D0, 0x5A03, 0x88A1, 0x5A09, 0x9B51, 0x5A11, 0x9B4F, 0x5A18, 0x96BA,
- 0x5A1A, 0x9B52, 0x5A1C, 0x9B50, 0x5A1F, 0x9B4E, 0x5A20, 0x9050, 0x5A25, 0x9B4D, 0x5A29, 0x95D8, 0x5A2F, 0x8CE2, 0x5A35, 0x9B56,
- 0x5A36, 0x9B57, 0x5A3C, 0x8FA9, 0x5A40, 0x9B53, 0x5A41, 0x984B, 0x5A46, 0x946B, 0x5A49, 0x9B55, 0x5A5A, 0x8DA5, 0x5A62, 0x9B58,
- 0x5A66, 0x9577, 0x5A6A, 0x9B59, 0x5A6C, 0x9B54, 0x5A7F, 0x96B9, 0x5A92, 0x947D, 0x5A9A, 0x9B5A, 0x5A9B, 0x9551, 0x5ABC, 0x9B5B,
- 0x5ABD, 0x9B5F, 0x5ABE, 0x9B5C, 0x5AC1, 0x89C5, 0x5AC2, 0x9B5E, 0x5AC9, 0x8EB9, 0x5ACB, 0x9B5D, 0x5ACC, 0x8C99, 0x5AD0, 0x9B6B,
- 0x5AD6, 0x9B64, 0x5AD7, 0x9B61, 0x5AE1, 0x9284, 0x5AE3, 0x9B60, 0x5AE6, 0x9B62, 0x5AE9, 0x9B63, 0x5AFA, 0x9B65, 0x5AFB, 0x9B66,
- 0x5B09, 0x8AF0, 0x5B0B, 0x9B68, 0x5B0C, 0x9B67, 0x5B16, 0x9B69, 0x5B22, 0x8FEC, 0x5B2A, 0x9B6C, 0x5B2C, 0x92DA, 0x5B30, 0x8964,
- 0x5B32, 0x9B6A, 0x5B36, 0x9B6D, 0x5B3E, 0x9B6E, 0x5B40, 0x9B71, 0x5B43, 0x9B6F, 0x5B45, 0x9B70, 0x5B50, 0x8E71, 0x5B51, 0x9B72,
- 0x5B54, 0x8D45, 0x5B55, 0x9B73, 0x5B56, 0xFAA6, 0x5B57, 0x8E9A, 0x5B58, 0x91B6, 0x5B5A, 0x9B74, 0x5B5B, 0x9B75, 0x5B5C, 0x8E79,
- 0x5B5D, 0x8D46, 0x5B5F, 0x96D0, 0x5B63, 0x8B47, 0x5B64, 0x8CC7, 0x5B65, 0x9B76, 0x5B66, 0x8A77, 0x5B69, 0x9B77, 0x5B6B, 0x91B7,
- 0x5B70, 0x9B78, 0x5B71, 0x9BA1, 0x5B73, 0x9B79, 0x5B75, 0x9B7A, 0x5B78, 0x9B7B, 0x5B7A, 0x9B7D, 0x5B80, 0x9B7E, 0x5B83, 0x9B80,
- 0x5B85, 0x91EE, 0x5B87, 0x8946, 0x5B88, 0x8EE7, 0x5B89, 0x88C0, 0x5B8B, 0x9176, 0x5B8C, 0x8AAE, 0x5B8D, 0x8EB3, 0x5B8F, 0x8D47,
- 0x5B95, 0x9386, 0x5B97, 0x8F40, 0x5B98, 0x8AAF, 0x5B99, 0x9288, 0x5B9A, 0x92E8, 0x5B9B, 0x88B6, 0x5B9C, 0x8B58, 0x5B9D, 0x95F3,
- 0x5B9F, 0x8EC0, 0x5BA2, 0x8B71, 0x5BA3, 0x90E9, 0x5BA4, 0x8EBA, 0x5BA5, 0x9747, 0x5BA6, 0x9B81, 0x5BAE, 0x8B7B, 0x5BB0, 0x8DC9,
- 0x5BB3, 0x8A51, 0x5BB4, 0x8983, 0x5BB5, 0x8FAA, 0x5BB6, 0x89C6, 0x5BB8, 0x9B82, 0x5BB9, 0x9765, 0x5BBF, 0x8F68, 0x5BC0, 0xFAA7,
- 0x5BC2, 0x8EE2, 0x5BC3, 0x9B83, 0x5BC4, 0x8AF1, 0x5BC5, 0x93D0, 0x5BC6, 0x96A7, 0x5BC7, 0x9B84, 0x5BC9, 0x9B85, 0x5BCC, 0x9578,
- 0x5BD0, 0x9B87, 0x5BD2, 0x8AA6, 0x5BD3, 0x8BF5, 0x5BD4, 0x9B86, 0x5BD8, 0xFAA9, 0x5BDB, 0x8AB0, 0x5BDD, 0x9051, 0x5BDE, 0x9B8B,
- 0x5BDF, 0x8E40, 0x5BE1, 0x89C7, 0x5BE2, 0x9B8A, 0x5BE4, 0x9B88, 0x5BE5, 0x9B8C, 0x5BE6, 0x9B89, 0x5BE7, 0x944A, 0x5BE8, 0x9ECB,
- 0x5BE9, 0x9052, 0x5BEB, 0x9B8D, 0x5BEC, 0xFAAA, 0x5BEE, 0x97BE, 0x5BF0, 0x9B8E, 0x5BF3, 0x9B90, 0x5BF5, 0x929E, 0x5BF6, 0x9B8F,
- 0x5BF8, 0x90A1, 0x5BFA, 0x8E9B, 0x5BFE, 0x91CE, 0x5BFF, 0x8EF5, 0x5C01, 0x9595, 0x5C02, 0x90EA, 0x5C04, 0x8ECB, 0x5C05, 0x9B91,
- 0x5C06, 0x8FAB, 0x5C07, 0x9B92, 0x5C08, 0x9B93, 0x5C09, 0x88D1, 0x5C0A, 0x91B8, 0x5C0B, 0x9071, 0x5C0D, 0x9B94, 0x5C0E, 0x93B1,
- 0x5C0F, 0x8FAC, 0x5C11, 0x8FAD, 0x5C13, 0x9B95, 0x5C16, 0x90EB, 0x5C1A, 0x8FAE, 0x5C1E, 0xFAAB, 0x5C20, 0x9B96, 0x5C22, 0x9B97,
- 0x5C24, 0x96DE, 0x5C28, 0x9B98, 0x5C2D, 0x8BC4, 0x5C31, 0x8F41, 0x5C38, 0x9B99, 0x5C39, 0x9B9A, 0x5C3A, 0x8EDA, 0x5C3B, 0x904B,
- 0x5C3C, 0x93F2, 0x5C3D, 0x9073, 0x5C3E, 0x94F6, 0x5C3F, 0x9441, 0x5C40, 0x8BC7, 0x5C41, 0x9B9B, 0x5C45, 0x8B8F, 0x5C46, 0x9B9C,
- 0x5C48, 0x8BFC, 0x5C4A, 0x93CD, 0x5C4B, 0x89AE, 0x5C4D, 0x8E72, 0x5C4E, 0x9B9D, 0x5C4F, 0x9BA0, 0x5C50, 0x9B9F, 0x5C51, 0x8BFB,
- 0x5C53, 0x9B9E, 0x5C55, 0x9357, 0x5C5E, 0x91AE, 0x5C60, 0x936A, 0x5C61, 0x8EC6, 0x5C64, 0x9177, 0x5C65, 0x979A, 0x5C6C, 0x9BA2,
- 0x5C6E, 0x9BA3, 0x5C6F, 0x93D4, 0x5C71, 0x8E52, 0x5C76, 0x9BA5, 0x5C79, 0x9BA6, 0x5C8C, 0x9BA7, 0x5C90, 0x8AF2, 0x5C91, 0x9BA8,
- 0x5C94, 0x9BA9, 0x5CA1, 0x89AA, 0x5CA6, 0xFAAC, 0x5CA8, 0x915A, 0x5CA9, 0x8AE2, 0x5CAB, 0x9BAB, 0x5CAC, 0x96A6, 0x5CB1, 0x91D0,
- 0x5CB3, 0x8A78, 0x5CB6, 0x9BAD, 0x5CB7, 0x9BAF, 0x5CB8, 0x8ADD, 0x5CBA, 0xFAAD, 0x5CBB, 0x9BAC, 0x5CBC, 0x9BAE, 0x5CBE, 0x9BB1,
- 0x5CC5, 0x9BB0, 0x5CC7, 0x9BB2, 0x5CD9, 0x9BB3, 0x5CE0, 0x93BB, 0x5CE1, 0x8BAC, 0x5CE8, 0x89E3, 0x5CE9, 0x9BB4, 0x5CEA, 0x9BB9,
- 0x5CED, 0x9BB7, 0x5CEF, 0x95F5, 0x5CF0, 0x95F4, 0x5CF5, 0xFAAE, 0x5CF6, 0x9387, 0x5CFA, 0x9BB6, 0x5CFB, 0x8F73, 0x5CFD, 0x9BB5,
- 0x5D07, 0x9092, 0x5D0B, 0x9BBA, 0x5D0E, 0x8DE8, 0x5D11, 0x9BC0, 0x5D14, 0x9BC1, 0x5D15, 0x9BBB, 0x5D16, 0x8A52, 0x5D17, 0x9BBC,
- 0x5D18, 0x9BC5, 0x5D19, 0x9BC4, 0x5D1A, 0x9BC3, 0x5D1B, 0x9BBF, 0x5D1F, 0x9BBE, 0x5D22, 0x9BC2, 0x5D27, 0xFAAF, 0x5D29, 0x95F6,
- 0x5D42, 0xFAB2, 0x5D4B, 0x9BC9, 0x5D4C, 0x9BC6, 0x5D4E, 0x9BC8, 0x5D50, 0x9792, 0x5D52, 0x9BC7, 0x5D53, 0xFAB0, 0x5D5C, 0x9BBD,
- 0x5D69, 0x9093, 0x5D6C, 0x9BCA, 0x5D6D, 0xFAB3, 0x5D6F, 0x8DB5, 0x5D73, 0x9BCB, 0x5D76, 0x9BCC, 0x5D82, 0x9BCF, 0x5D84, 0x9BCE,
- 0x5D87, 0x9BCD, 0x5D8B, 0x9388, 0x5D8C, 0x9BB8, 0x5D90, 0x9BD5, 0x5D9D, 0x9BD1, 0x5DA2, 0x9BD0, 0x5DAC, 0x9BD2, 0x5DAE, 0x9BD3,
- 0x5DB7, 0x9BD6, 0x5DB8, 0xFAB4, 0x5DB9, 0xFAB5, 0x5DBA, 0x97E4, 0x5DBC, 0x9BD7, 0x5DBD, 0x9BD4, 0x5DC9, 0x9BD8, 0x5DCC, 0x8ADE,
- 0x5DCD, 0x9BD9, 0x5DD0, 0xFAB6, 0x5DD2, 0x9BDB, 0x5DD3, 0x9BDA, 0x5DD6, 0x9BDC, 0x5DDB, 0x9BDD, 0x5DDD, 0x90EC, 0x5DDE, 0x8F42,
- 0x5DE1, 0x8F84, 0x5DE3, 0x9183, 0x5DE5, 0x8D48, 0x5DE6, 0x8DB6, 0x5DE7, 0x8D49, 0x5DE8, 0x8B90, 0x5DEB, 0x9BDE, 0x5DEE, 0x8DB7,
- 0x5DF1, 0x8CC8, 0x5DF2, 0x9BDF, 0x5DF3, 0x96A4, 0x5DF4, 0x9462, 0x5DF5, 0x9BE0, 0x5DF7, 0x8D4A, 0x5DFB, 0x8AAA, 0x5DFD, 0x9246,
- 0x5DFE, 0x8BD0, 0x5E02, 0x8E73, 0x5E03, 0x957A, 0x5E06, 0x94BF, 0x5E0B, 0x9BE1, 0x5E0C, 0x8AF3, 0x5E11, 0x9BE4, 0x5E16, 0x929F,
- 0x5E19, 0x9BE3, 0x5E1A, 0x9BE2, 0x5E1B, 0x9BE5, 0x5E1D, 0x92E9, 0x5E25, 0x9083, 0x5E2B, 0x8E74, 0x5E2D, 0x90C8, 0x5E2F, 0x91D1,
- 0x5E30, 0x8B41, 0x5E33, 0x92A0, 0x5E36, 0x9BE6, 0x5E37, 0x9BE7, 0x5E38, 0x8FED, 0x5E3D, 0x9658, 0x5E40, 0x9BEA, 0x5E43, 0x9BE9,
- 0x5E44, 0x9BE8, 0x5E45, 0x959D, 0x5E47, 0x9BF1, 0x5E4C, 0x9679, 0x5E4E, 0x9BEB, 0x5E54, 0x9BED, 0x5E55, 0x968B, 0x5E57, 0x9BEC,
- 0x5E5F, 0x9BEE, 0x5E61, 0x94A6, 0x5E62, 0x9BEF, 0x5E63, 0x95BC, 0x5E64, 0x9BF0, 0x5E72, 0x8AB1, 0x5E73, 0x95BD, 0x5E74, 0x944E,
- 0x5E75, 0x9BF2, 0x5E76, 0x9BF3, 0x5E78, 0x8D4B, 0x5E79, 0x8AB2, 0x5E7A, 0x9BF4, 0x5E7B, 0x8CB6, 0x5E7C, 0x9763, 0x5E7D, 0x9748,
- 0x5E7E, 0x8AF4, 0x5E7F, 0x9BF6, 0x5E81, 0x92A1, 0x5E83, 0x8D4C, 0x5E84, 0x8FAF, 0x5E87, 0x94DD, 0x5E8A, 0x8FB0, 0x5E8F, 0x8F98,
- 0x5E95, 0x92EA, 0x5E96, 0x95F7, 0x5E97, 0x9358, 0x5E9A, 0x8D4D, 0x5E9C, 0x957B, 0x5EA0, 0x9BF7, 0x5EA6, 0x9378, 0x5EA7, 0x8DC0,
- 0x5EAB, 0x8CC9, 0x5EAD, 0x92EB, 0x5EB5, 0x88C1, 0x5EB6, 0x8F8E, 0x5EB7, 0x8D4E, 0x5EB8, 0x9766, 0x5EC1, 0x9BF8, 0x5EC2, 0x9BF9,
- 0x5EC3, 0x9470, 0x5EC8, 0x9BFA, 0x5EC9, 0x97F5, 0x5ECA, 0x984C, 0x5ECF, 0x9BFC, 0x5ED0, 0x9BFB, 0x5ED3, 0x8A66, 0x5ED6, 0x9C40,
- 0x5EDA, 0x9C43, 0x5EDB, 0x9C44, 0x5EDD, 0x9C42, 0x5EDF, 0x955F, 0x5EE0, 0x8FB1, 0x5EE1, 0x9C46, 0x5EE2, 0x9C45, 0x5EE3, 0x9C41,
- 0x5EE8, 0x9C47, 0x5EE9, 0x9C48, 0x5EEC, 0x9C49, 0x5EF0, 0x9C4C, 0x5EF1, 0x9C4A, 0x5EF3, 0x9C4B, 0x5EF4, 0x9C4D, 0x5EF6, 0x8984,
- 0x5EF7, 0x92EC, 0x5EF8, 0x9C4E, 0x5EFA, 0x8C9A, 0x5EFB, 0x89F4, 0x5EFC, 0x9455, 0x5EFE, 0x9C4F, 0x5EFF, 0x93F9, 0x5F01, 0x95D9,
- 0x5F03, 0x9C50, 0x5F04, 0x984D, 0x5F09, 0x9C51, 0x5F0A, 0x95BE, 0x5F0B, 0x9C54, 0x5F0C, 0x989F, 0x5F0D, 0x98AF, 0x5F0F, 0x8EAE,
- 0x5F10, 0x93F3, 0x5F11, 0x9C55, 0x5F13, 0x8B7C, 0x5F14, 0x92A2, 0x5F15, 0x88F8, 0x5F16, 0x9C56, 0x5F17, 0x95A4, 0x5F18, 0x8D4F,
- 0x5F1B, 0x926F, 0x5F1F, 0x92ED, 0x5F21, 0xFAB7, 0x5F25, 0x96ED, 0x5F26, 0x8CB7, 0x5F27, 0x8CCA, 0x5F29, 0x9C57, 0x5F2D, 0x9C58,
- 0x5F2F, 0x9C5E, 0x5F31, 0x8EE3, 0x5F34, 0xFAB8, 0x5F35, 0x92A3, 0x5F37, 0x8BAD, 0x5F38, 0x9C59, 0x5F3C, 0x954A, 0x5F3E, 0x9265,
- 0x5F41, 0x9C5A, 0x5F45, 0xFA67, 0x5F48, 0x9C5B, 0x5F4A, 0x8BAE, 0x5F4C, 0x9C5C, 0x5F4E, 0x9C5D, 0x5F51, 0x9C5F, 0x5F53, 0x9396,
- 0x5F56, 0x9C60, 0x5F57, 0x9C61, 0x5F59, 0x9C62, 0x5F5C, 0x9C53, 0x5F5D, 0x9C52, 0x5F61, 0x9C63, 0x5F62, 0x8C60, 0x5F66, 0x9546,
- 0x5F67, 0xFAB9, 0x5F69, 0x8DCA, 0x5F6A, 0x9556, 0x5F6B, 0x92A4, 0x5F6C, 0x956A, 0x5F6D, 0x9C64, 0x5F70, 0x8FB2, 0x5F71, 0x8965,
- 0x5F73, 0x9C65, 0x5F77, 0x9C66, 0x5F79, 0x96F0, 0x5F7C, 0x94DE, 0x5F7F, 0x9C69, 0x5F80, 0x899D, 0x5F81, 0x90AA, 0x5F82, 0x9C68,
- 0x5F83, 0x9C67, 0x5F84, 0x8C61, 0x5F85, 0x91D2, 0x5F87, 0x9C6D, 0x5F88, 0x9C6B, 0x5F8A, 0x9C6A, 0x5F8B, 0x97A5, 0x5F8C, 0x8CE3,
- 0x5F90, 0x8F99, 0x5F91, 0x9C6C, 0x5F92, 0x936B, 0x5F93, 0x8F5D, 0x5F97, 0x93BE, 0x5F98, 0x9C70, 0x5F99, 0x9C6F, 0x5F9E, 0x9C6E,
- 0x5FA0, 0x9C71, 0x5FA1, 0x8CE4, 0x5FA8, 0x9C72, 0x5FA9, 0x959C, 0x5FAA, 0x8F7A, 0x5FAD, 0x9C73, 0x5FAE, 0x94F7, 0x5FB3, 0x93BF,
- 0x5FB4, 0x92A5, 0x5FB7, 0xFABA, 0x5FB9, 0x934F, 0x5FBC, 0x9C74, 0x5FBD, 0x8B4A, 0x5FC3, 0x9053, 0x5FC5, 0x954B, 0x5FCC, 0x8AF5,
- 0x5FCD, 0x9445, 0x5FD6, 0x9C75, 0x5FD7, 0x8E75, 0x5FD8, 0x9659, 0x5FD9, 0x965A, 0x5FDC, 0x899E, 0x5FDD, 0x9C7A, 0x5FDE, 0xFABB,
- 0x5FE0, 0x9289, 0x5FE4, 0x9C77, 0x5FEB, 0x89F5, 0x5FF0, 0x9CAB, 0x5FF1, 0x9C79, 0x5FF5, 0x944F, 0x5FF8, 0x9C78, 0x5FFB, 0x9C76,
- 0x5FFD, 0x8D9A, 0x5FFF, 0x9C7C, 0x600E, 0x9C83, 0x600F, 0x9C89, 0x6010, 0x9C81, 0x6012, 0x937B, 0x6015, 0x9C86, 0x6016, 0x957C,
- 0x6019, 0x9C80, 0x601B, 0x9C85, 0x601C, 0x97E5, 0x601D, 0x8E76, 0x6020, 0x91D3, 0x6021, 0x9C7D, 0x6025, 0x8B7D, 0x6026, 0x9C88,
- 0x6027, 0x90AB, 0x6028, 0x8985, 0x6029, 0x9C82, 0x602A, 0x89F6, 0x602B, 0x9C87, 0x602F, 0x8BAF, 0x6031, 0x9C84, 0x603A, 0x9C8A,
- 0x6041, 0x9C8C, 0x6042, 0x9C96, 0x6043, 0x9C94, 0x6046, 0x9C91, 0x604A, 0x9C90, 0x604B, 0x97F6, 0x604D, 0x9C92, 0x6050, 0x8BB0,
- 0x6052, 0x8D50, 0x6055, 0x8F9A, 0x6059, 0x9C99, 0x605A, 0x9C8B, 0x605D, 0xFABC, 0x605F, 0x9C8F, 0x6060, 0x9C7E, 0x6062, 0x89F8,
- 0x6063, 0x9C93, 0x6064, 0x9C95, 0x6065, 0x9270, 0x6068, 0x8DA6, 0x6069, 0x89B6, 0x606A, 0x9C8D, 0x606B, 0x9C98, 0x606C, 0x9C97,
- 0x606D, 0x8BB1, 0x606F, 0x91A7, 0x6070, 0x8A86, 0x6075, 0x8C62, 0x6077, 0x9C8E, 0x6081, 0x9C9A, 0x6083, 0x9C9D, 0x6084, 0x9C9F,
- 0x6085, 0xFABD, 0x6089, 0x8EBB, 0x608A, 0xFABE, 0x608B, 0x9CA5, 0x608C, 0x92EE, 0x608D, 0x9C9B, 0x6092, 0x9CA3, 0x6094, 0x89F7,
- 0x6096, 0x9CA1, 0x6097, 0x9CA2, 0x609A, 0x9C9E, 0x609B, 0x9CA0, 0x609F, 0x8CE5, 0x60A0, 0x9749, 0x60A3, 0x8AB3, 0x60A6, 0x8978,
- 0x60A7, 0x9CA4, 0x60A9, 0x9459, 0x60AA, 0x88AB, 0x60B2, 0x94DF, 0x60B3, 0x9C7B, 0x60B4, 0x9CAA, 0x60B5, 0x9CAE, 0x60B6, 0x96E3,
- 0x60B8, 0x9CA7, 0x60BC, 0x9389, 0x60BD, 0x9CAC, 0x60C5, 0x8FEE, 0x60C6, 0x9CAD, 0x60C7, 0x93D5, 0x60D1, 0x9866, 0x60D3, 0x9CA9,
- 0x60D5, 0xFAC0, 0x60D8, 0x9CAF, 0x60DA, 0x8D9B, 0x60DC, 0x90C9, 0x60DE, 0xFABF, 0x60DF, 0x88D2, 0x60E0, 0x9CA8, 0x60E1, 0x9CA6,
- 0x60E3, 0x9179, 0x60E7, 0x9C9C, 0x60E8, 0x8E53, 0x60F0, 0x91C4, 0x60F1, 0x9CBB, 0x60F2, 0xFAC2, 0x60F3, 0x917A, 0x60F4, 0x9CB6,
- 0x60F6, 0x9CB3, 0x60F7, 0x9CB4, 0x60F9, 0x8EE4, 0x60FA, 0x9CB7, 0x60FB, 0x9CBA, 0x6100, 0x9CB5, 0x6101, 0x8F44, 0x6103, 0x9CB8,
- 0x6106, 0x9CB2, 0x6108, 0x96FA, 0x6109, 0x96F9, 0x610D, 0x9CBC, 0x610E, 0x9CBD, 0x610F, 0x88D3, 0x6111, 0xFAC3, 0x6115, 0x9CB1,
- 0x611A, 0x8BF0, 0x611B, 0x88A4, 0x611F, 0x8AB4, 0x6120, 0xFAC1, 0x6121, 0x9CB9, 0x6127, 0x9CC1, 0x6128, 0x9CC0, 0x612C, 0x9CC5,
- 0x6130, 0xFAC5, 0x6134, 0x9CC6, 0x6137, 0xFAC4, 0x613C, 0x9CC4, 0x613D, 0x9CC7, 0x613E, 0x9CBF, 0x613F, 0x9CC3, 0x6142, 0x9CC8,
- 0x6144, 0x9CC9, 0x6147, 0x9CBE, 0x6148, 0x8E9C, 0x614A, 0x9CC2, 0x614B, 0x91D4, 0x614C, 0x8D51, 0x614D, 0x9CB0, 0x614E, 0x9054,
- 0x6153, 0x9CD6, 0x6155, 0x95E7, 0x6158, 0x9CCC, 0x6159, 0x9CCD, 0x615A, 0x9CCE, 0x615D, 0x9CD5, 0x615F, 0x9CD4, 0x6162, 0x969D,
- 0x6163, 0x8AB5, 0x6165, 0x9CD2, 0x6167, 0x8C64, 0x6168, 0x8A53, 0x616B, 0x9CCF, 0x616E, 0x97B6, 0x616F, 0x9CD1, 0x6170, 0x88D4,
- 0x6171, 0x9CD3, 0x6173, 0x9CCA, 0x6174, 0x9CD0, 0x6175, 0x9CD7, 0x6176, 0x8C63, 0x6177, 0x9CCB, 0x617E, 0x977C, 0x6182, 0x974A,
- 0x6187, 0x9CDA, 0x618A, 0x9CDE, 0x618E, 0x919E, 0x6190, 0x97F7, 0x6191, 0x9CDF, 0x6194, 0x9CDC, 0x6196, 0x9CD9, 0x6198, 0xFAC6,
- 0x6199, 0x9CD8, 0x619A, 0x9CDD, 0x61A4, 0x95AE, 0x61A7, 0x93B2, 0x61A9, 0x8C65, 0x61AB, 0x9CE0, 0x61AC, 0x9CDB, 0x61AE, 0x9CE1,
- 0x61B2, 0x8C9B, 0x61B6, 0x89AF, 0x61BA, 0x9CE9, 0x61BE, 0x8AB6, 0x61C3, 0x9CE7, 0x61C6, 0x9CE8, 0x61C7, 0x8DA7, 0x61C8, 0x9CE6,
- 0x61C9, 0x9CE4, 0x61CA, 0x9CE3, 0x61CB, 0x9CEA, 0x61CC, 0x9CE2, 0x61CD, 0x9CEC, 0x61D0, 0x89F9, 0x61E3, 0x9CEE, 0x61E6, 0x9CED,
- 0x61F2, 0x92A6, 0x61F4, 0x9CF1, 0x61F6, 0x9CEF, 0x61F7, 0x9CE5, 0x61F8, 0x8C9C, 0x61FA, 0x9CF0, 0x61FC, 0x9CF4, 0x61FD, 0x9CF3,
- 0x61FE, 0x9CF5, 0x61FF, 0x9CF2, 0x6200, 0x9CF6, 0x6208, 0x9CF7, 0x6209, 0x9CF8, 0x620A, 0x95E8, 0x620C, 0x9CFA, 0x620D, 0x9CF9,
- 0x620E, 0x8F5E, 0x6210, 0x90AC, 0x6211, 0x89E4, 0x6212, 0x89FA, 0x6213, 0xFAC7, 0x6214, 0x9CFB, 0x6216, 0x88BD, 0x621A, 0x90CA,
- 0x621B, 0x9CFC, 0x621D, 0xE6C1, 0x621E, 0x9D40, 0x621F, 0x8C81, 0x6221, 0x9D41, 0x6226, 0x90ED, 0x622A, 0x9D42, 0x622E, 0x9D43,
- 0x622F, 0x8B59, 0x6230, 0x9D44, 0x6232, 0x9D45, 0x6233, 0x9D46, 0x6234, 0x91D5, 0x6238, 0x8CCB, 0x623B, 0x96DF, 0x623F, 0x965B,
- 0x6240, 0x8F8A, 0x6241, 0x9D47, 0x6247, 0x90EE, 0x6248, 0xE7BB, 0x6249, 0x94E0, 0x624B, 0x8EE8, 0x624D, 0x8DCB, 0x624E, 0x9D48,
- 0x6253, 0x91C5, 0x6255, 0x95A5, 0x6258, 0x91EF, 0x625B, 0x9D4B, 0x625E, 0x9D49, 0x6260, 0x9D4C, 0x6263, 0x9D4A, 0x6268, 0x9D4D,
- 0x626E, 0x95AF, 0x6271, 0x88B5, 0x6276, 0x957D, 0x6279, 0x94E1, 0x627C, 0x9D4E, 0x627E, 0x9D51, 0x627F, 0x8FB3, 0x6280, 0x8B5A,
- 0x6282, 0x9D4F, 0x6283, 0x9D56, 0x6284, 0x8FB4, 0x6289, 0x9D50, 0x628A, 0x9463, 0x6291, 0x977D, 0x6292, 0x9D52, 0x6293, 0x9D53,
- 0x6294, 0x9D57, 0x6295, 0x938A, 0x6296, 0x9D54, 0x6297, 0x8D52, 0x6298, 0x90DC, 0x629B, 0x9D65, 0x629C, 0x94B2, 0x629E, 0x91F0,
- 0x62A6, 0xFAC8, 0x62AB, 0x94E2, 0x62AC, 0x9DAB, 0x62B1, 0x95F8, 0x62B5, 0x92EF, 0x62B9, 0x9695, 0x62BB, 0x9D5A, 0x62BC, 0x899F,
- 0x62BD, 0x928A, 0x62C2, 0x9D63, 0x62C5, 0x9253, 0x62C6, 0x9D5D, 0x62C7, 0x9D64, 0x62C8, 0x9D5F, 0x62C9, 0x9D66, 0x62CA, 0x9D62,
- 0x62CC, 0x9D61, 0x62CD, 0x948F, 0x62CF, 0x9D5B, 0x62D0, 0x89FB, 0x62D1, 0x9D59, 0x62D2, 0x8B91, 0x62D3, 0x91F1, 0x62D4, 0x9D55,
- 0x62D7, 0x9D58, 0x62D8, 0x8D53, 0x62D9, 0x90D9, 0x62DB, 0x8FB5, 0x62DC, 0x9D60, 0x62DD, 0x9471, 0x62E0, 0x8B92, 0x62E1, 0x8A67,
- 0x62EC, 0x8A87, 0x62ED, 0x9040, 0x62EE, 0x9D68, 0x62EF, 0x9D6D, 0x62F1, 0x9D69, 0x62F3, 0x8C9D, 0x62F5, 0x9D6E, 0x62F6, 0x8E41,
- 0x62F7, 0x8D89, 0x62FE, 0x8F45, 0x62FF, 0x9D5C, 0x6301, 0x8E9D, 0x6302, 0x9D6B, 0x6307, 0x8E77, 0x6308, 0x9D6C, 0x6309, 0x88C2,
- 0x630C, 0x9D67, 0x6311, 0x92A7, 0x6319, 0x8B93, 0x631F, 0x8BB2, 0x6327, 0x9D6A, 0x6328, 0x88A5, 0x632B, 0x8DC1, 0x632F, 0x9055,
- 0x633A, 0x92F0, 0x633D, 0x94D2, 0x633E, 0x9D70, 0x633F, 0x917D, 0x6349, 0x91A8, 0x634C, 0x8E4A, 0x634D, 0x9D71, 0x634F, 0x9D73,
- 0x6350, 0x9D6F, 0x6355, 0x95DF, 0x6357, 0x92BB, 0x635C, 0x917B, 0x6367, 0x95F9, 0x6368, 0x8ECC, 0x6369, 0x9D80, 0x636B, 0x9D7E,
- 0x636E, 0x9098, 0x6372, 0x8C9E, 0x6376, 0x9D78, 0x6377, 0x8FB7, 0x637A, 0x93E6, 0x637B, 0x9450, 0x6380, 0x9D76, 0x6383, 0x917C,
- 0x6388, 0x8EF6, 0x6389, 0x9D7B, 0x638C, 0x8FB6, 0x638E, 0x9D75, 0x638F, 0x9D7A, 0x6392, 0x9472, 0x6396, 0x9D74, 0x6398, 0x8C40,
- 0x639B, 0x8A7C, 0x639F, 0x9D7C, 0x63A0, 0x97A9, 0x63A1, 0x8DCC, 0x63A2, 0x9254, 0x63A3, 0x9D79, 0x63A5, 0x90DA, 0x63A7, 0x8D54,
- 0x63A8, 0x9084, 0x63A9, 0x8986, 0x63AA, 0x915B, 0x63AB, 0x9D77, 0x63AC, 0x8B64, 0x63B2, 0x8C66, 0x63B4, 0x92CD, 0x63B5, 0x9D7D,
- 0x63BB, 0x917E, 0x63BE, 0x9D81, 0x63C0, 0x9D83, 0x63C3, 0x91B5, 0x63C4, 0x9D89, 0x63C6, 0x9D84, 0x63C9, 0x9D86, 0x63CF, 0x9560,
- 0x63D0, 0x92F1, 0x63D2, 0x9D87, 0x63D6, 0x974B, 0x63DA, 0x9767, 0x63DB, 0x8AB7, 0x63E1, 0x88AC, 0x63E3, 0x9D85, 0x63E9, 0x9D82,
- 0x63EE, 0x8AF6, 0x63F4, 0x8987, 0x63F5, 0xFAC9, 0x63F6, 0x9D88, 0x63FA, 0x9768, 0x6406, 0x9D8C, 0x640D, 0x91B9, 0x640F, 0x9D93,
- 0x6413, 0x9D8D, 0x6416, 0x9D8A, 0x6417, 0x9D91, 0x641C, 0x9D72, 0x6426, 0x9D8E, 0x6428, 0x9D92, 0x642C, 0x94C0, 0x642D, 0x938B,
- 0x6434, 0x9D8B, 0x6436, 0x9D8F, 0x643A, 0x8C67, 0x643E, 0x8DEF, 0x6442, 0x90DB, 0x644E, 0x9D97, 0x6458, 0x9345, 0x6460, 0xFACA,
- 0x6467, 0x9D94, 0x6469, 0x9680, 0x646F, 0x9D95, 0x6476, 0x9D96, 0x6478, 0x96CC, 0x647A, 0x90A0, 0x6483, 0x8C82, 0x6488, 0x9D9D,
- 0x6492, 0x8E54, 0x6493, 0x9D9A, 0x6495, 0x9D99, 0x649A, 0x9451, 0x649D, 0xFACB, 0x649E, 0x93B3, 0x64A4, 0x9350, 0x64A5, 0x9D9B,
- 0x64A9, 0x9D9C, 0x64AB, 0x958F, 0x64AD, 0x9464, 0x64AE, 0x8E42, 0x64B0, 0x90EF, 0x64B2, 0x966F, 0x64B9, 0x8A68, 0x64BB, 0x9DA3,
- 0x64BC, 0x9D9E, 0x64C1, 0x9769, 0x64C2, 0x9DA5, 0x64C5, 0x9DA1, 0x64C7, 0x9DA2, 0x64CD, 0x9180, 0x64CE, 0xFACC, 0x64D2, 0x9DA0,
- 0x64D4, 0x9D5E, 0x64D8, 0x9DA4, 0x64DA, 0x9D9F, 0x64E0, 0x9DA9, 0x64E1, 0x9DAA, 0x64E2, 0x9346, 0x64E3, 0x9DAC, 0x64E6, 0x8E43,
- 0x64E7, 0x9DA7, 0x64EC, 0x8B5B, 0x64EF, 0x9DAD, 0x64F1, 0x9DA6, 0x64F2, 0x9DB1, 0x64F4, 0x9DB0, 0x64F6, 0x9DAF, 0x64FA, 0x9DB2,
- 0x64FD, 0x9DB4, 0x64FE, 0x8FEF, 0x6500, 0x9DB3, 0x6505, 0x9DB7, 0x6518, 0x9DB5, 0x651C, 0x9DB6, 0x651D, 0x9D90, 0x6523, 0x9DB9,
- 0x6524, 0x9DB8, 0x652A, 0x9D98, 0x652B, 0x9DBA, 0x652C, 0x9DAE, 0x652F, 0x8E78, 0x6534, 0x9DBB, 0x6535, 0x9DBC, 0x6536, 0x9DBE,
- 0x6537, 0x9DBD, 0x6538, 0x9DBF, 0x6539, 0x89FC, 0x653B, 0x8D55, 0x653E, 0x95FA, 0x653F, 0x90AD, 0x6545, 0x8CCC, 0x6548, 0x9DC1,
- 0x654D, 0x9DC4, 0x654E, 0xFACD, 0x654F, 0x9571, 0x6551, 0x8B7E, 0x6555, 0x9DC3, 0x6556, 0x9DC2, 0x6557, 0x9473, 0x6558, 0x9DC5,
- 0x6559, 0x8BB3, 0x655D, 0x9DC7, 0x655E, 0x9DC6, 0x6562, 0x8AB8, 0x6563, 0x8E55, 0x6566, 0x93D6, 0x656C, 0x8C68, 0x6570, 0x9094,
- 0x6572, 0x9DC8, 0x6574, 0x90AE, 0x6575, 0x9347, 0x6577, 0x957E, 0x6578, 0x9DC9, 0x6582, 0x9DCA, 0x6583, 0x9DCB, 0x6587, 0x95B6,
- 0x6588, 0x9B7C, 0x6589, 0x90C4, 0x658C, 0x956B, 0x658E, 0x8DD6, 0x6590, 0x94E3, 0x6591, 0x94C1, 0x6597, 0x936C, 0x6599, 0x97BF,
- 0x659B, 0x9DCD, 0x659C, 0x8ECE, 0x659F, 0x9DCE, 0x65A1, 0x88B4, 0x65A4, 0x8BD2, 0x65A5, 0x90CB, 0x65A7, 0x9580, 0x65AB, 0x9DCF,
- 0x65AC, 0x8E61, 0x65AD, 0x9266, 0x65AF, 0x8E7A, 0x65B0, 0x9056, 0x65B7, 0x9DD0, 0x65B9, 0x95FB, 0x65BC, 0x8997, 0x65BD, 0x8E7B,
- 0x65C1, 0x9DD3, 0x65C3, 0x9DD1, 0x65C4, 0x9DD4, 0x65C5, 0x97B7, 0x65C6, 0x9DD2, 0x65CB, 0x90F9, 0x65CC, 0x9DD5, 0x65CF, 0x91B0,
- 0x65D2, 0x9DD6, 0x65D7, 0x8AF8, 0x65D9, 0x9DD8, 0x65DB, 0x9DD7, 0x65E0, 0x9DD9, 0x65E1, 0x9DDA, 0x65E2, 0x8AF9, 0x65E5, 0x93FA,
- 0x65E6, 0x9255, 0x65E7, 0x8B8C, 0x65E8, 0x8E7C, 0x65E9, 0x9181, 0x65EC, 0x8F7B, 0x65ED, 0x88AE, 0x65F1, 0x9DDB, 0x65FA, 0x89A0,
- 0x65FB, 0x9DDF, 0x6600, 0xFACE, 0x6602, 0x8D56, 0x6603, 0x9DDE, 0x6606, 0x8DA9, 0x6607, 0x8FB8, 0x6609, 0xFAD1, 0x660A, 0x9DDD,
- 0x660C, 0x8FB9, 0x660E, 0x96BE, 0x660F, 0x8DA8, 0x6613, 0x88D5, 0x6614, 0x90CC, 0x6615, 0xFACF, 0x661C, 0x9DE4, 0x661E, 0xFAD3,
- 0x661F, 0x90AF, 0x6620, 0x8966, 0x6624, 0xFAD4, 0x6625, 0x8F74, 0x6627, 0x9686, 0x6628, 0x8DF0, 0x662D, 0x8FBA, 0x662E, 0xFAD2,
- 0x662F, 0x90A5, 0x6631, 0xFA63, 0x6634, 0x9DE3, 0x6635, 0x9DE1, 0x6636, 0x9DE2, 0x663B, 0xFAD0, 0x663C, 0x928B, 0x663F, 0x9E45,
- 0x6641, 0x9DE8, 0x6642, 0x8E9E, 0x6643, 0x8D57, 0x6644, 0x9DE6, 0x6649, 0x9DE7, 0x664B, 0x9057, 0x664F, 0x9DE5, 0x6652, 0x8E4E,
- 0x6657, 0xFAD6, 0x6659, 0xFAD7, 0x665D, 0x9DEA, 0x665E, 0x9DE9, 0x665F, 0x9DEE, 0x6662, 0x9DEF, 0x6664, 0x9DEB, 0x6665, 0xFAD5,
- 0x6666, 0x8A41, 0x6667, 0x9DEC, 0x6668, 0x9DED, 0x6669, 0x94D3, 0x666E, 0x9581, 0x666F, 0x8C69, 0x6670, 0x9DF0, 0x6673, 0xFAD9,
- 0x6674, 0x90B0, 0x6676, 0x8FBB, 0x667A, 0x9271, 0x6681, 0x8BC5, 0x6683, 0x9DF1, 0x6684, 0x9DF5, 0x6687, 0x89C9, 0x6688, 0x9DF2,
- 0x6689, 0x9DF4, 0x668E, 0x9DF3, 0x6691, 0x8F8B, 0x6696, 0x9267, 0x6697, 0x88C3, 0x6698, 0x9DF6, 0x6699, 0xFADA, 0x669D, 0x9DF7,
- 0x66A0, 0xFADB, 0x66A2, 0x92A8, 0x66A6, 0x97EF, 0x66AB, 0x8E62, 0x66AE, 0x95E9, 0x66B2, 0xFADC, 0x66B4, 0x965C, 0x66B8, 0x9E41,
- 0x66B9, 0x9DF9, 0x66BC, 0x9DFC, 0x66BE, 0x9DFB, 0x66BF, 0xFADD, 0x66C1, 0x9DF8, 0x66C4, 0x9E40, 0x66C7, 0x93DC, 0x66C9, 0x9DFA,
- 0x66D6, 0x9E42, 0x66D9, 0x8F8C, 0x66DA, 0x9E43, 0x66DC, 0x976A, 0x66DD, 0x9498, 0x66E0, 0x9E44, 0x66E6, 0x9E46, 0x66E9, 0x9E47,
- 0x66F0, 0x9E48, 0x66F2, 0x8BC8, 0x66F3, 0x8967, 0x66F4, 0x8D58, 0x66F5, 0x9E49, 0x66F7, 0x9E4A, 0x66F8, 0x8F91, 0x66F9, 0x9182,
- 0x66FA, 0xFADE, 0x66FB, 0xFA66, 0x66FC, 0x99D6, 0x66FD, 0x915D, 0x66FE, 0x915C, 0x66FF, 0x91D6, 0x6700, 0x8DC5, 0x6703, 0x98F0,
- 0x6708, 0x8C8E, 0x6709, 0x974C, 0x670B, 0x95FC, 0x670D, 0x959E, 0x670E, 0xFADF, 0x670F, 0x9E4B, 0x6714, 0x8DF1, 0x6715, 0x92BD,
- 0x6716, 0x9E4C, 0x6717, 0x984E, 0x671B, 0x965D, 0x671D, 0x92A9, 0x671E, 0x9E4D, 0x671F, 0x8AFA, 0x6726, 0x9E4E, 0x6727, 0x9E4F,
- 0x6728, 0x96D8, 0x672A, 0x96A2, 0x672B, 0x9696, 0x672C, 0x967B, 0x672D, 0x8E44, 0x672E, 0x9E51, 0x6731, 0x8EE9, 0x6734, 0x9670,
- 0x6736, 0x9E53, 0x6737, 0x9E56, 0x6738, 0x9E55, 0x673A, 0x8AF7, 0x673D, 0x8B80, 0x673F, 0x9E52, 0x6741, 0x9E54, 0x6746, 0x9E57,
- 0x6749, 0x9099, 0x674E, 0x979B, 0x674F, 0x88C7, 0x6750, 0x8DDE, 0x6751, 0x91BA, 0x6753, 0x8EDB, 0x6756, 0x8FF1, 0x6759, 0x9E5A,
- 0x675C, 0x936D, 0x675E, 0x9E58, 0x675F, 0x91A9, 0x6760, 0x9E59, 0x6761, 0x8FF0, 0x6762, 0x96DB, 0x6763, 0x9E5B, 0x6764, 0x9E5C,
- 0x6765, 0x9788, 0x6766, 0xFAE1, 0x676A, 0x9E61, 0x676D, 0x8D59, 0x676F, 0x9474, 0x6770, 0x9E5E, 0x6771, 0x938C, 0x6772, 0x9DDC,
- 0x6773, 0x9DE0, 0x6775, 0x8B6E, 0x6777, 0x9466, 0x677C, 0x9E60, 0x677E, 0x8FBC, 0x677F, 0x94C2, 0x6785, 0x9E66, 0x6787, 0x94F8,
- 0x6789, 0x9E5D, 0x678B, 0x9E63, 0x678C, 0x9E62, 0x6790, 0x90CD, 0x6795, 0x968D, 0x6797, 0x97D1, 0x679A, 0x9687, 0x679C, 0x89CA,
- 0x679D, 0x8E7D, 0x67A0, 0x9867, 0x67A1, 0x9E65, 0x67A2, 0x9095, 0x67A6, 0x9E64, 0x67A9, 0x9E5F, 0x67AF, 0x8CCD, 0x67B3, 0x9E6B,
- 0x67B4, 0x9E69, 0x67B6, 0x89CB, 0x67B7, 0x9E67, 0x67B8, 0x9E6D, 0x67B9, 0x9E73, 0x67BB, 0xFAE2, 0x67C0, 0xFAE4, 0x67C1, 0x91C6,
- 0x67C4, 0x95BF, 0x67C6, 0x9E75, 0x67CA, 0x9541, 0x67CE, 0x9E74, 0x67CF, 0x9490, 0x67D0, 0x965E, 0x67D1, 0x8AB9, 0x67D3, 0x90F5,
- 0x67D4, 0x8F5F, 0x67D8, 0x92D1, 0x67DA, 0x974D, 0x67DD, 0x9E70, 0x67DE, 0x9E6F, 0x67E2, 0x9E71, 0x67E4, 0x9E6E, 0x67E7, 0x9E76,
- 0x67E9, 0x9E6C, 0x67EC, 0x9E6A, 0x67EE, 0x9E72, 0x67EF, 0x9E68, 0x67F1, 0x928C, 0x67F3, 0x96F6, 0x67F4, 0x8EC4, 0x67F5, 0x8DF2,
- 0x67FB, 0x8DB8, 0x67FE, 0x968F, 0x67FF, 0x8A60, 0x6801, 0xFAE5, 0x6802, 0x92CC, 0x6803, 0x93C8, 0x6804, 0x8968, 0x6813, 0x90F0,
- 0x6816, 0x90B2, 0x6817, 0x8C49, 0x681E, 0x9E78, 0x6821, 0x8D5A, 0x6822, 0x8A9C, 0x6829, 0x9E7A, 0x682A, 0x8A94, 0x682B, 0x9E81,
- 0x6832, 0x9E7D, 0x6834, 0x90F1, 0x6838, 0x8A6A, 0x6839, 0x8DAA, 0x683C, 0x8A69, 0x683D, 0x8DCD, 0x6840, 0x9E7B, 0x6841, 0x8C85,
- 0x6842, 0x8C6A, 0x6843, 0x938D, 0x6844, 0xFAE6, 0x6846, 0x9E79, 0x6848, 0x88C4, 0x684D, 0x9E7C, 0x684E, 0x9E7E, 0x6850, 0x8BCB,
- 0x6851, 0x8C4B, 0x6852, 0xFAE3, 0x6853, 0x8ABA, 0x6854, 0x8B6A, 0x6859, 0x9E82, 0x685C, 0x8DF7, 0x685D, 0x9691, 0x685F, 0x8E56,
- 0x6863, 0x9E83, 0x6867, 0x954F, 0x6874, 0x9E8F, 0x6876, 0x89B1, 0x6877, 0x9E84, 0x687E, 0x9E95, 0x687F, 0x9E85, 0x6881, 0x97C0,
- 0x6883, 0x9E8C, 0x6885, 0x947E, 0x688D, 0x9E94, 0x688F, 0x9E87, 0x6893, 0x88B2, 0x6894, 0x9E89, 0x6897, 0x8D5B, 0x689B, 0x9E8B,
- 0x689D, 0x9E8A, 0x689F, 0x9E86, 0x68A0, 0x9E91, 0x68A2, 0x8FBD, 0x68A6, 0x9AEB, 0x68A7, 0x8CE6, 0x68A8, 0x979C, 0x68AD, 0x9E88,
- 0x68AF, 0x92F2, 0x68B0, 0x8A42, 0x68B1, 0x8DAB, 0x68B3, 0x9E80, 0x68B5, 0x9E90, 0x68B6, 0x8A81, 0x68B9, 0x9E8E, 0x68BA, 0x9E92,
- 0x68BC, 0x938E, 0x68C4, 0x8AFC, 0x68C6, 0x9EB0, 0x68C8, 0xFA64, 0x68C9, 0x96C7, 0x68CA, 0x9E97, 0x68CB, 0x8AFB, 0x68CD, 0x9E9E,
- 0x68CF, 0xFAE7, 0x68D2, 0x965F, 0x68D4, 0x9E9F, 0x68D5, 0x9EA1, 0x68D7, 0x9EA5, 0x68D8, 0x9E99, 0x68DA, 0x9249, 0x68DF, 0x938F,
- 0x68E0, 0x9EA9, 0x68E1, 0x9E9C, 0x68E3, 0x9EA6, 0x68E7, 0x9EA0, 0x68EE, 0x9058, 0x68EF, 0x9EAA, 0x68F2, 0x90B1, 0x68F9, 0x9EA8,
- 0x68FA, 0x8ABB, 0x6900, 0x986F, 0x6901, 0x9E96, 0x6904, 0x9EA4, 0x6905, 0x88D6, 0x6908, 0x9E98, 0x690B, 0x96B8, 0x690C, 0x9E9D,
- 0x690D, 0x9041, 0x690E, 0x92C5, 0x690F, 0x9E93, 0x6912, 0x9EA3, 0x6919, 0x909A, 0x691A, 0x9EAD, 0x691B, 0x8A91, 0x691C, 0x8C9F,
- 0x6921, 0x9EAF, 0x6922, 0x9E9A, 0x6923, 0x9EAE, 0x6925, 0x9EA7, 0x6926, 0x9E9B, 0x6928, 0x9EAB, 0x692A, 0x9EAC, 0x6930, 0x9EBD,
- 0x6934, 0x93CC, 0x6936, 0x9EA2, 0x6939, 0x9EB9, 0x693D, 0x9EBB, 0x693F, 0x92D6, 0x694A, 0x976B, 0x6953, 0x9596, 0x6954, 0x9EB6,
- 0x6955, 0x91C8, 0x6959, 0x9EBC, 0x695A, 0x915E, 0x695C, 0x9EB3, 0x695D, 0x9EC0, 0x695E, 0x9EBF, 0x6960, 0x93ED, 0x6961, 0x9EBE,
- 0x6962, 0x93E8, 0x6968, 0xFAE9, 0x696A, 0x9EC2, 0x696B, 0x9EB5, 0x696D, 0x8BC6, 0x696E, 0x9EB8, 0x696F, 0x8F7C, 0x6973, 0x9480,
- 0x6974, 0x9EBA, 0x6975, 0x8BC9, 0x6977, 0x9EB2, 0x6978, 0x9EB4, 0x6979, 0x9EB1, 0x697C, 0x984F, 0x697D, 0x8A79, 0x697E, 0x9EB7,
- 0x6981, 0x9EC1, 0x6982, 0x8A54, 0x698A, 0x8DE5, 0x698E, 0x897C, 0x6991, 0x9ED2, 0x6994, 0x9850, 0x6995, 0x9ED5, 0x6998, 0xFAEB,
- 0x699B, 0x9059, 0x699C, 0x9ED4, 0x69A0, 0x9ED3, 0x69A7, 0x9ED0, 0x69AE, 0x9EC4, 0x69B1, 0x9EE1, 0x69B2, 0x9EC3, 0x69B4, 0x9ED6,
- 0x69BB, 0x9ECE, 0x69BE, 0x9EC9, 0x69BF, 0x9EC6, 0x69C1, 0x9EC7, 0x69C3, 0x9ECF, 0x69C7, 0xEAA0, 0x69CA, 0x9ECC, 0x69CB, 0x8D5C,
- 0x69CC, 0x92C6, 0x69CD, 0x9184, 0x69CE, 0x9ECA, 0x69D0, 0x9EC5, 0x69D3, 0x9EC8, 0x69D8, 0x976C, 0x69D9, 0x968A, 0x69DD, 0x9ECD,
- 0x69DE, 0x9ED7, 0x69E2, 0xFAEC, 0x69E7, 0x9EDF, 0x69E8, 0x9ED8, 0x69EB, 0x9EE5, 0x69ED, 0x9EE3, 0x69F2, 0x9EDE, 0x69F9, 0x9EDD,
- 0x69FB, 0x92CE, 0x69FD, 0x9185, 0x69FF, 0x9EDB, 0x6A02, 0x9ED9, 0x6A05, 0x9EE0, 0x6A0A, 0x9EE6, 0x6A0B, 0x94F3, 0x6A0C, 0x9EEC,
- 0x6A12, 0x9EE7, 0x6A13, 0x9EEA, 0x6A14, 0x9EE4, 0x6A17, 0x9294, 0x6A19, 0x9557, 0x6A1B, 0x9EDA, 0x6A1E, 0x9EE2, 0x6A1F, 0x8FBE,
- 0x6A21, 0x96CD, 0x6A22, 0x9EF6, 0x6A23, 0x9EE9, 0x6A29, 0x8CA0, 0x6A2A, 0x89A1, 0x6A2B, 0x8A7E, 0x6A2E, 0x9ED1, 0x6A30, 0xFAED,
- 0x6A35, 0x8FBF, 0x6A36, 0x9EEE, 0x6A38, 0x9EF5, 0x6A39, 0x8EF7, 0x6A3A, 0x8A92, 0x6A3D, 0x924D, 0x6A44, 0x9EEB, 0x6A46, 0xFAEF,
- 0x6A47, 0x9EF0, 0x6A48, 0x9EF4, 0x6A4B, 0x8BB4, 0x6A58, 0x8B6B, 0x6A59, 0x9EF2, 0x6A5F, 0x8B40, 0x6A61, 0x93C9, 0x6A62, 0x9EF1,
- 0x6A66, 0x9EF3, 0x6A6B, 0xFAEE, 0x6A72, 0x9EED, 0x6A73, 0xFAF0, 0x6A78, 0x9EEF, 0x6A7E, 0xFAF1, 0x6A7F, 0x8A80, 0x6A80, 0x9268,
- 0x6A84, 0x9EFA, 0x6A8D, 0x9EF8, 0x6A8E, 0x8CE7, 0x6A90, 0x9EF7, 0x6A97, 0x9F40, 0x6A9C, 0x9E77, 0x6AA0, 0x9EF9, 0x6AA2, 0x9EFB,
- 0x6AA3, 0x9EFC, 0x6AAA, 0x9F4B, 0x6AAC, 0x9F47, 0x6AAE, 0x9E8D, 0x6AB3, 0x9F46, 0x6AB8, 0x9F45, 0x6ABB, 0x9F42, 0x6AC1, 0x9EE8,
- 0x6AC2, 0x9F44, 0x6AC3, 0x9F43, 0x6AD1, 0x9F49, 0x6AD3, 0x9845, 0x6ADA, 0x9F4C, 0x6ADB, 0x8BF9, 0x6ADE, 0x9F48, 0x6ADF, 0x9F4A,
- 0x6AE2, 0xFAF2, 0x6AE4, 0xFAF3, 0x6AE8, 0x94A5, 0x6AEA, 0x9F4D, 0x6AFA, 0x9F51, 0x6AFB, 0x9F4E, 0x6B04, 0x9793, 0x6B05, 0x9F4F,
- 0x6B0A, 0x9EDC, 0x6B12, 0x9F52, 0x6B16, 0x9F53, 0x6B1D, 0x8954, 0x6B1F, 0x9F55, 0x6B20, 0x8C87, 0x6B21, 0x8E9F, 0x6B23, 0x8BD3,
- 0x6B27, 0x89A2, 0x6B32, 0x977E, 0x6B37, 0x9F57, 0x6B38, 0x9F56, 0x6B39, 0x9F59, 0x6B3A, 0x8B5C, 0x6B3D, 0x8BD4, 0x6B3E, 0x8ABC,
- 0x6B43, 0x9F5C, 0x6B47, 0x9F5B, 0x6B49, 0x9F5D, 0x6B4C, 0x89CC, 0x6B4E, 0x9256, 0x6B50, 0x9F5E, 0x6B53, 0x8ABD, 0x6B54, 0x9F60,
- 0x6B59, 0x9F5F, 0x6B5B, 0x9F61, 0x6B5F, 0x9F62, 0x6B61, 0x9F63, 0x6B62, 0x8E7E, 0x6B63, 0x90B3, 0x6B64, 0x8D9F, 0x6B66, 0x9590,
- 0x6B69, 0x95E0, 0x6B6A, 0x9863, 0x6B6F, 0x8E95, 0x6B73, 0x8DCE, 0x6B74, 0x97F0, 0x6B78, 0x9F64, 0x6B79, 0x9F65, 0x6B7B, 0x8E80,
- 0x6B7F, 0x9F66, 0x6B80, 0x9F67, 0x6B83, 0x9F69, 0x6B84, 0x9F68, 0x6B86, 0x9677, 0x6B89, 0x8F7D, 0x6B8A, 0x8EEA, 0x6B8B, 0x8E63,
- 0x6B8D, 0x9F6A, 0x6B95, 0x9F6C, 0x6B96, 0x9042, 0x6B98, 0x9F6B, 0x6B9E, 0x9F6D, 0x6BA4, 0x9F6E, 0x6BAA, 0x9F6F, 0x6BAB, 0x9F70,
- 0x6BAF, 0x9F71, 0x6BB1, 0x9F73, 0x6BB2, 0x9F72, 0x6BB3, 0x9F74, 0x6BB4, 0x89A3, 0x6BB5, 0x9269, 0x6BB7, 0x9F75, 0x6BBA, 0x8E45,
- 0x6BBB, 0x8A6B, 0x6BBC, 0x9F76, 0x6BBF, 0x9361, 0x6BC0, 0x9ACA, 0x6BC5, 0x8B42, 0x6BC6, 0x9F77, 0x6BCB, 0x9F78, 0x6BCD, 0x95EA,
- 0x6BCE, 0x9688, 0x6BD2, 0x93C5, 0x6BD3, 0x9F79, 0x6BD4, 0x94E4, 0x6BD6, 0xFAF4, 0x6BD8, 0x94F9, 0x6BDB, 0x96D1, 0x6BDF, 0x9F7A,
- 0x6BEB, 0x9F7C, 0x6BEC, 0x9F7B, 0x6BEF, 0x9F7E, 0x6BF3, 0x9F7D, 0x6C08, 0x9F81, 0x6C0F, 0x8E81, 0x6C11, 0x96AF, 0x6C13, 0x9F82,
- 0x6C14, 0x9F83, 0x6C17, 0x8B43, 0x6C1B, 0x9F84, 0x6C23, 0x9F86, 0x6C24, 0x9F85, 0x6C34, 0x9085, 0x6C37, 0x9558, 0x6C38, 0x8969,
- 0x6C3E, 0x94C3, 0x6C3F, 0xFAF5, 0x6C40, 0x92F3, 0x6C41, 0x8F60, 0x6C42, 0x8B81, 0x6C4E, 0x94C4, 0x6C50, 0x8EAC, 0x6C55, 0x9F88,
- 0x6C57, 0x8ABE, 0x6C5A, 0x8998, 0x6C5C, 0xFAF6, 0x6C5D, 0x93F0, 0x6C5E, 0x9F87, 0x6C5F, 0x8D5D, 0x6C60, 0x9272, 0x6C62, 0x9F89,
- 0x6C68, 0x9F91, 0x6C6A, 0x9F8A, 0x6C6F, 0xFAF8, 0x6C70, 0x91BF, 0x6C72, 0x8B82, 0x6C73, 0x9F92, 0x6C7A, 0x8C88, 0x6C7D, 0x8B44,
- 0x6C7E, 0x9F90, 0x6C81, 0x9F8E, 0x6C82, 0x9F8B, 0x6C83, 0x9780, 0x6C86, 0xFAF7, 0x6C88, 0x92BE, 0x6C8C, 0x93D7, 0x6C8D, 0x9F8C,
- 0x6C90, 0x9F94, 0x6C92, 0x9F93, 0x6C93, 0x8C42, 0x6C96, 0x89AB, 0x6C99, 0x8DB9, 0x6C9A, 0x9F8D, 0x6C9B, 0x9F8F, 0x6CA1, 0x9676,
- 0x6CA2, 0x91F2, 0x6CAB, 0x9697, 0x6CAE, 0x9F9C, 0x6CB1, 0x9F9D, 0x6CB3, 0x89CD, 0x6CB8, 0x95A6, 0x6CB9, 0x96FB, 0x6CBA, 0x9F9F,
- 0x6CBB, 0x8EA1, 0x6CBC, 0x8FC0, 0x6CBD, 0x9F98, 0x6CBE, 0x9F9E, 0x6CBF, 0x8988, 0x6CC1, 0x8BB5, 0x6CC4, 0x9F95, 0x6CC5, 0x9F9A,
- 0x6CC9, 0x90F2, 0x6CCA, 0x9491, 0x6CCC, 0x94E5, 0x6CD3, 0x9F97, 0x6CD5, 0x9640, 0x6CD7, 0x9F99, 0x6CD9, 0x9FA2, 0x6CDA, 0xFAF9,
- 0x6CDB, 0x9FA0, 0x6CDD, 0x9F9B, 0x6CE1, 0x9641, 0x6CE2, 0x9467, 0x6CE3, 0x8B83, 0x6CE5, 0x9344, 0x6CE8, 0x928D, 0x6CEA, 0x9FA3,
- 0x6CEF, 0x9FA1, 0x6CF0, 0x91D7, 0x6CF1, 0x9F96, 0x6CF3, 0x896A, 0x6D04, 0xFAFA, 0x6D0B, 0x976D, 0x6D0C, 0x9FAE, 0x6D12, 0x9FAD,
- 0x6D17, 0x90F4, 0x6D19, 0x9FAA, 0x6D1B, 0x978C, 0x6D1E, 0x93B4, 0x6D1F, 0x9FA4, 0x6D25, 0x92C3, 0x6D29, 0x896B, 0x6D2A, 0x8D5E,
- 0x6D2B, 0x9FA7, 0x6D32, 0x8F46, 0x6D33, 0x9FAC, 0x6D35, 0x9FAB, 0x6D36, 0x9FA6, 0x6D38, 0x9FA9, 0x6D3B, 0x8A88, 0x6D3D, 0x9FA8,
- 0x6D3E, 0x9468, 0x6D41, 0x97AC, 0x6D44, 0x8FF2, 0x6D45, 0x90F3, 0x6D59, 0x9FB4, 0x6D5A, 0x9FB2, 0x6D5C, 0x956C, 0x6D63, 0x9FAF,
- 0x6D64, 0x9FB1, 0x6D66, 0x8959, 0x6D69, 0x8D5F, 0x6D6A, 0x9851, 0x6D6C, 0x8A5C, 0x6D6E, 0x9582, 0x6D6F, 0xFAFC, 0x6D74, 0x9781,
- 0x6D77, 0x8A43, 0x6D78, 0x905A, 0x6D79, 0x9FB3, 0x6D85, 0x9FB8, 0x6D87, 0xFAFB, 0x6D88, 0x8FC1, 0x6D8C, 0x974F, 0x6D8E, 0x9FB5,
- 0x6D93, 0x9FB0, 0x6D95, 0x9FB6, 0x6D96, 0xFB40, 0x6D99, 0x97DC, 0x6D9B, 0x9393, 0x6D9C, 0x93C0, 0x6DAC, 0xFB41, 0x6DAF, 0x8A55,
- 0x6DB2, 0x8974, 0x6DB5, 0x9FBC, 0x6DB8, 0x9FBF, 0x6DBC, 0x97C1, 0x6DC0, 0x9784, 0x6DC5, 0x9FC6, 0x6DC6, 0x9FC0, 0x6DC7, 0x9FBD,
- 0x6DCB, 0x97D2, 0x6DCC, 0x9FC3, 0x6DCF, 0xFB42, 0x6DD1, 0x8F69, 0x6DD2, 0x9FC5, 0x6DD5, 0x9FCA, 0x6DD8, 0x9391, 0x6DD9, 0x9FC8,
- 0x6DDE, 0x9FC2, 0x6DE1, 0x9257, 0x6DE4, 0x9FC9, 0x6DE6, 0x9FBE, 0x6DE8, 0x9FC4, 0x6DEA, 0x9FCB, 0x6DEB, 0x88FA, 0x6DEC, 0x9FC1,
- 0x6DEE, 0x9FCC, 0x6DF1, 0x905B, 0x6DF2, 0xFB44, 0x6DF3, 0x8F7E, 0x6DF5, 0x95A3, 0x6DF7, 0x8DAC, 0x6DF8, 0xFB43, 0x6DF9, 0x9FB9,
- 0x6DFA, 0x9FC7, 0x6DFB, 0x9359, 0x6DFC, 0xFB45, 0x6E05, 0x90B4, 0x6E07, 0x8A89, 0x6E08, 0x8DCF, 0x6E09, 0x8FC2, 0x6E0A, 0x9FBB,
- 0x6E0B, 0x8F61, 0x6E13, 0x8C6B, 0x6E15, 0x9FBA, 0x6E19, 0x9FD0, 0x6E1A, 0x8F8D, 0x6E1B, 0x8CB8, 0x6E1D, 0x9FDF, 0x6E1F, 0x9FD9,
- 0x6E20, 0x8B94, 0x6E21, 0x936E, 0x6E23, 0x9FD4, 0x6E24, 0x9FDD, 0x6E25, 0x88AD, 0x6E26, 0x8951, 0x6E27, 0xFB48, 0x6E29, 0x89B7,
- 0x6E2B, 0x9FD6, 0x6E2C, 0x91AA, 0x6E2D, 0x9FCD, 0x6E2E, 0x9FCF, 0x6E2F, 0x8D60, 0x6E38, 0x9FE0, 0x6E39, 0xFB46, 0x6E3A, 0x9FDB,
- 0x6E3C, 0xFB49, 0x6E3E, 0x9FD3, 0x6E43, 0x9FDA, 0x6E4A, 0x96A9, 0x6E4D, 0x9FD8, 0x6E4E, 0x9FDC, 0x6E56, 0x8CCE, 0x6E58, 0x8FC3,
- 0x6E5B, 0x9258, 0x6E5C, 0xFB47, 0x6E5F, 0x9FD2, 0x6E67, 0x974E, 0x6E6B, 0x9FD5, 0x6E6E, 0x9FCE, 0x6E6F, 0x9392, 0x6E72, 0x9FD1,
- 0x6E76, 0x9FD7, 0x6E7E, 0x9870, 0x6E7F, 0x8EBC, 0x6E80, 0x969E, 0x6E82, 0x9FE1, 0x6E8C, 0x94AC, 0x6E8F, 0x9FED, 0x6E90, 0x8CB9,
- 0x6E96, 0x8F80, 0x6E98, 0x9FE3, 0x6E9C, 0x97AD, 0x6E9D, 0x8D61, 0x6E9F, 0x9FF0, 0x6EA2, 0x88EC, 0x6EA5, 0x9FEE, 0x6EAA, 0x9FE2,
- 0x6EAF, 0x9FE8, 0x6EB2, 0x9FEA, 0x6EB6, 0x976E, 0x6EB7, 0x9FE5, 0x6EBA, 0x934D, 0x6EBD, 0x9FE7, 0x6EBF, 0xFB4A, 0x6EC2, 0x9FEF,
- 0x6EC4, 0x9FE9, 0x6EC5, 0x96C5, 0x6EC9, 0x9FE4, 0x6ECB, 0x8EA0, 0x6ECC, 0x9FFC, 0x6ED1, 0x8A8A, 0x6ED3, 0x9FE6, 0x6ED4, 0x9FEB,
- 0x6ED5, 0x9FEC, 0x6EDD, 0x91EA, 0x6EDE, 0x91D8, 0x6EEC, 0x9FF4, 0x6EEF, 0x9FFA, 0x6EF2, 0x9FF8, 0x6EF4, 0x9348, 0x6EF7, 0xE042,
- 0x6EF8, 0x9FF5, 0x6EFE, 0x9FF6, 0x6EFF, 0x9FDE, 0x6F01, 0x8B99, 0x6F02, 0x9559, 0x6F06, 0x8EBD, 0x6F09, 0x8D97, 0x6F0F, 0x9852,
- 0x6F11, 0x9FF2, 0x6F13, 0xE041, 0x6F14, 0x8989, 0x6F15, 0x9186, 0x6F20, 0x9499, 0x6F22, 0x8ABF, 0x6F23, 0x97F8, 0x6F2B, 0x969F,
- 0x6F2C, 0x92D0, 0x6F31, 0x9FF9, 0x6F32, 0x9FFB, 0x6F38, 0x9151, 0x6F3E, 0xE040, 0x6F3F, 0x9FF7, 0x6F41, 0x9FF1, 0x6F45, 0x8AC1,
- 0x6F54, 0x8C89, 0x6F58, 0xE04E, 0x6F5B, 0xE049, 0x6F5C, 0x90F6, 0x6F5F, 0x8A83, 0x6F64, 0x8F81, 0x6F66, 0xE052, 0x6F6D, 0xE04B,
- 0x6F6E, 0x92AA, 0x6F6F, 0xE048, 0x6F70, 0x92D7, 0x6F74, 0xE06B, 0x6F78, 0xE045, 0x6F7A, 0xE044, 0x6F7C, 0xE04D, 0x6F80, 0xE047,
- 0x6F81, 0xE046, 0x6F82, 0xE04C, 0x6F84, 0x909F, 0x6F86, 0xE043, 0x6F88, 0xFB4B, 0x6F8E, 0xE04F, 0x6F91, 0xE050, 0x6F97, 0x8AC0,
- 0x6FA1, 0xE055, 0x6FA3, 0xE054, 0x6FA4, 0xE056, 0x6FAA, 0xE059, 0x6FB1, 0x9362, 0x6FB3, 0xE053, 0x6FB5, 0xFB4C, 0x6FB9, 0xE057,
- 0x6FC0, 0x8C83, 0x6FC1, 0x91F7, 0x6FC2, 0xE051, 0x6FC3, 0x945A, 0x6FC6, 0xE058, 0x6FD4, 0xE05D, 0x6FD5, 0xE05B, 0x6FD8, 0xE05E,
- 0x6FDB, 0xE061, 0x6FDF, 0xE05A, 0x6FE0, 0x8D8A, 0x6FE1, 0x9447, 0x6FE4, 0x9FB7, 0x6FEB, 0x9794, 0x6FEC, 0xE05C, 0x6FEE, 0xE060,
- 0x6FEF, 0x91F3, 0x6FF1, 0xE05F, 0x6FF3, 0xE04A, 0x6FF5, 0xFB4D, 0x6FF6, 0xE889, 0x6FFA, 0xE064, 0x6FFE, 0xE068, 0x7001, 0xE066,
- 0x7005, 0xFB4E, 0x7007, 0xFB4F, 0x7009, 0xE062, 0x700B, 0xE063, 0x700F, 0xE067, 0x7011, 0xE065, 0x7015, 0x956D, 0x7018, 0xE06D,
- 0x701A, 0xE06A, 0x701B, 0xE069, 0x701D, 0xE06C, 0x701E, 0x93D2, 0x701F, 0xE06E, 0x7026, 0x9295, 0x7027, 0x91EB, 0x7028, 0xFB50,
- 0x702C, 0x90A3, 0x7030, 0xE06F, 0x7032, 0xE071, 0x703E, 0xE070, 0x704C, 0x9FF3, 0x7051, 0xE072, 0x7058, 0x93E5, 0x7063, 0xE073,
- 0x706B, 0x89CE, 0x706F, 0x9394, 0x7070, 0x8A44, 0x7078, 0x8B84, 0x707C, 0x8EDC, 0x707D, 0x8DD0, 0x7085, 0xFB51, 0x7089, 0x9846,
- 0x708A, 0x9086, 0x708E, 0x898A, 0x7092, 0xE075, 0x7099, 0xE074, 0x70AB, 0xFB52, 0x70AC, 0xE078, 0x70AD, 0x9259, 0x70AE, 0xE07B,
- 0x70AF, 0xE076, 0x70B3, 0xE07A, 0x70B8, 0xE079, 0x70B9, 0x935F, 0x70BA, 0x88D7, 0x70BB, 0xFA62, 0x70C8, 0x97F3, 0x70CB, 0xE07D,
- 0x70CF, 0x8947, 0x70D9, 0xE080, 0x70DD, 0xE07E, 0x70DF, 0xE07C, 0x70F1, 0xE077, 0x70F9, 0x9642, 0x70FD, 0xE082, 0x7104, 0xFB54,
- 0x7109, 0xE081, 0x710F, 0xFB53, 0x7114, 0x898B, 0x7119, 0xE084, 0x711A, 0x95B0, 0x711C, 0xE083, 0x7121, 0x96B3, 0x7126, 0x8FC5,
- 0x7136, 0x9152, 0x713C, 0x8FC4, 0x7146, 0xFB56, 0x7147, 0xFB57, 0x7149, 0x97F9, 0x714C, 0xE08A, 0x714E, 0x90F7, 0x7155, 0xE086,
- 0x7156, 0xE08B, 0x7159, 0x898C, 0x715C, 0xFB55, 0x7162, 0xE089, 0x7164, 0x9481, 0x7165, 0xE085, 0x7166, 0xE088, 0x7167, 0x8FC6,
- 0x7169, 0x94CF, 0x716C, 0xE08C, 0x716E, 0x8ECF, 0x717D, 0x90F8, 0x7184, 0xE08F, 0x7188, 0xE087, 0x718A, 0x8C46, 0x718F, 0xE08D,
- 0x7194, 0x976F, 0x7195, 0xE090, 0x7199, 0xEAA4, 0x719F, 0x8F6E, 0x71A8, 0xE091, 0x71AC, 0xE092, 0x71B1, 0x944D, 0x71B9, 0xE094,
- 0x71BE, 0xE095, 0x71C1, 0xFB59, 0x71C3, 0x9452, 0x71C8, 0x9395, 0x71C9, 0xE097, 0x71CE, 0xE099, 0x71D0, 0x97D3, 0x71D2, 0xE096,
- 0x71D4, 0xE098, 0x71D5, 0x898D, 0x71D7, 0xE093, 0x71DF, 0x9A7A, 0x71E0, 0xE09A, 0x71E5, 0x9187, 0x71E6, 0x8E57, 0x71E7, 0xE09C,
- 0x71EC, 0xE09B, 0x71ED, 0x9043, 0x71EE, 0x99D7, 0x71F5, 0xE09D, 0x71F9, 0xE09F, 0x71FB, 0xE08E, 0x71FC, 0xE09E, 0x71FE, 0xFB5A,
- 0x71FF, 0xE0A0, 0x7206, 0x949A, 0x720D, 0xE0A1, 0x7210, 0xE0A2, 0x721B, 0xE0A3, 0x7228, 0xE0A4, 0x722A, 0x92DC, 0x722C, 0xE0A6,
- 0x722D, 0xE0A5, 0x7230, 0xE0A7, 0x7232, 0xE0A8, 0x7235, 0x8EDD, 0x7236, 0x9583, 0x723A, 0x96EA, 0x723B, 0xE0A9, 0x723C, 0xE0AA,
- 0x723D, 0x9175, 0x723E, 0x8EA2, 0x723F, 0xE0AB, 0x7240, 0xE0AC, 0x7246, 0xE0AD, 0x7247, 0x95D0, 0x7248, 0x94C5, 0x724B, 0xE0AE,
- 0x724C, 0x9476, 0x7252, 0x92AB, 0x7258, 0xE0AF, 0x7259, 0x89E5, 0x725B, 0x8B8D, 0x725D, 0x96C4, 0x725F, 0x96B4, 0x7261, 0x89B2,
- 0x7262, 0x9853, 0x7267, 0x9671, 0x7269, 0x95A8, 0x7272, 0x90B5, 0x7274, 0xE0B0, 0x7279, 0x93C1, 0x727D, 0x8CA1, 0x727E, 0xE0B1,
- 0x7280, 0x8DD2, 0x7281, 0xE0B3, 0x7282, 0xE0B2, 0x7287, 0xE0B4, 0x7292, 0xE0B5, 0x7296, 0xE0B6, 0x72A0, 0x8B5D, 0x72A2, 0xE0B7,
- 0x72A7, 0xE0B8, 0x72AC, 0x8CA2, 0x72AF, 0x94C6, 0x72B1, 0xFB5B, 0x72B2, 0xE0BA, 0x72B6, 0x8FF3, 0x72B9, 0xE0B9, 0x72BE, 0xFB5C,
- 0x72C2, 0x8BB6, 0x72C3, 0xE0BB, 0x72C4, 0xE0BD, 0x72C6, 0xE0BC, 0x72CE, 0xE0BE, 0x72D0, 0x8CCF, 0x72D2, 0xE0BF, 0x72D7, 0x8BE7,
- 0x72D9, 0x915F, 0x72DB, 0x8D9D, 0x72E0, 0xE0C1, 0x72E1, 0xE0C2, 0x72E2, 0xE0C0, 0x72E9, 0x8EEB, 0x72EC, 0x93C6, 0x72ED, 0x8BB7,
- 0x72F7, 0xE0C4, 0x72F8, 0x924B, 0x72F9, 0xE0C3, 0x72FC, 0x9854, 0x72FD, 0x9482, 0x730A, 0xE0C7, 0x7316, 0xE0C9, 0x7317, 0xE0C6,
- 0x731B, 0x96D2, 0x731C, 0xE0C8, 0x731D, 0xE0CA, 0x731F, 0x97C2, 0x7324, 0xFB5D, 0x7325, 0xE0CE, 0x7329, 0xE0CD, 0x732A, 0x9296,
- 0x732B, 0x944C, 0x732E, 0x8CA3, 0x732F, 0xE0CC, 0x7334, 0xE0CB, 0x7336, 0x9750, 0x7337, 0x9751, 0x733E, 0xE0CF, 0x733F, 0x898E,
- 0x7344, 0x8D96, 0x7345, 0x8E82, 0x734E, 0xE0D0, 0x734F, 0xE0D1, 0x7357, 0xE0D3, 0x7363, 0x8F62, 0x7368, 0xE0D5, 0x736A, 0xE0D4,
- 0x7370, 0xE0D6, 0x7372, 0x8A6C, 0x7375, 0xE0D8, 0x7377, 0xFB5F, 0x7378, 0xE0D7, 0x737A, 0xE0DA, 0x737B, 0xE0D9, 0x7384, 0x8CBA,
- 0x7387, 0x97A6, 0x7389, 0x8BCA, 0x738B, 0x89A4, 0x7396, 0x8BE8, 0x73A9, 0x8ADF, 0x73B2, 0x97E6, 0x73B3, 0xE0DC, 0x73BB, 0xE0DE,
- 0x73BD, 0xFB60, 0x73C0, 0xE0DF, 0x73C2, 0x89CF, 0x73C8, 0xE0DB, 0x73C9, 0xFB61, 0x73CA, 0x8E58, 0x73CD, 0x92BF, 0x73CE, 0xE0DD,
- 0x73D2, 0xFB64, 0x73D6, 0xFB62, 0x73DE, 0xE0E2, 0x73E0, 0x8EEC, 0x73E3, 0xFB63, 0x73E5, 0xE0E0, 0x73EA, 0x8C5D, 0x73ED, 0x94C7,
- 0x73EE, 0xE0E1, 0x73F1, 0xE0FC, 0x73F5, 0xFB66, 0x73F8, 0xE0E7, 0x73FE, 0x8CBB, 0x7403, 0x8B85, 0x7405, 0xE0E4, 0x7406, 0x979D,
- 0x7407, 0xFB65, 0x7409, 0x97AE, 0x7422, 0x91F4, 0x7425, 0xE0E6, 0x7426, 0xFB67, 0x7429, 0xFB69, 0x742A, 0xFB68, 0x742E, 0xFB6A,
- 0x7432, 0xE0E8, 0x7433, 0x97D4, 0x7434, 0x8BD5, 0x7435, 0x94FA, 0x7436, 0x9469, 0x743A, 0xE0E9, 0x743F, 0xE0EB, 0x7441, 0xE0EE,
- 0x7455, 0xE0EA, 0x7459, 0xE0ED, 0x745A, 0x8CE8, 0x745B, 0x896C, 0x745C, 0xE0EF, 0x745E, 0x9090, 0x745F, 0xE0EC, 0x7460, 0x97DA,
- 0x7462, 0xFB6B, 0x7463, 0xE0F2, 0x7464, 0xEAA2, 0x7469, 0xE0F0, 0x746A, 0xE0F3, 0x746F, 0xE0E5, 0x7470, 0xE0F1, 0x7473, 0x8DBA,
- 0x7476, 0xE0F4, 0x747E, 0xE0F5, 0x7483, 0x979E, 0x7489, 0xFB6C, 0x748B, 0xE0F6, 0x749E, 0xE0F7, 0x749F, 0xFB6D, 0x74A2, 0xE0E3,
- 0x74A7, 0xE0F8, 0x74B0, 0x8AC2, 0x74BD, 0x8EA3, 0x74CA, 0xE0F9, 0x74CF, 0xE0FA, 0x74D4, 0xE0FB, 0x74DC, 0x895A, 0x74E0, 0xE140,
- 0x74E2, 0x955A, 0x74E3, 0xE141, 0x74E6, 0x8AA2, 0x74E7, 0xE142, 0x74E9, 0xE143, 0x74EE, 0xE144, 0x74F0, 0xE146, 0x74F1, 0xE147,
- 0x74F2, 0xE145, 0x74F6, 0x9572, 0x74F7, 0xE149, 0x74F8, 0xE148, 0x7501, 0xFB6E, 0x7503, 0xE14B, 0x7504, 0xE14A, 0x7505, 0xE14C,
- 0x750C, 0xE14D, 0x750D, 0xE14F, 0x750E, 0xE14E, 0x7511, 0x8D99, 0x7513, 0xE151, 0x7515, 0xE150, 0x7518, 0x8AC3, 0x751A, 0x9072,
- 0x751C, 0x935B, 0x751E, 0xE152, 0x751F, 0x90B6, 0x7523, 0x8E59, 0x7525, 0x8999, 0x7526, 0xE153, 0x7528, 0x9770, 0x752B, 0x95E1,
- 0x752C, 0xE154, 0x752F, 0xFAA8, 0x7530, 0x9363, 0x7531, 0x9752, 0x7532, 0x8D62, 0x7533, 0x905C, 0x7537, 0x926A, 0x7538, 0x99B2,
- 0x753A, 0x92AC, 0x753B, 0x89E6, 0x753C, 0xE155, 0x7544, 0xE156, 0x7546, 0xE15B, 0x7549, 0xE159, 0x754A, 0xE158, 0x754B, 0x9DC0,
- 0x754C, 0x8A45, 0x754D, 0xE157, 0x754F, 0x88D8, 0x7551, 0x94A8, 0x7554, 0x94C8, 0x7559, 0x97AF, 0x755A, 0xE15C, 0x755B, 0xE15A,
- 0x755C, 0x927B, 0x755D, 0x90A4, 0x7560, 0x94A9, 0x7562, 0x954C, 0x7564, 0xE15E, 0x7565, 0x97AA, 0x7566, 0x8C6C, 0x7567, 0xE15F,
- 0x7569, 0xE15D, 0x756A, 0x94D4, 0x756B, 0xE160, 0x756D, 0xE161, 0x756F, 0xFB6F, 0x7570, 0x88D9, 0x7573, 0x8FF4, 0x7574, 0xE166,
- 0x7576, 0xE163, 0x7577, 0x93EB, 0x7578, 0xE162, 0x757F, 0x8B45, 0x7582, 0xE169, 0x7586, 0xE164, 0x7587, 0xE165, 0x7589, 0xE168,
- 0x758A, 0xE167, 0x758B, 0x9544, 0x758E, 0x9161, 0x758F, 0x9160, 0x7591, 0x8B5E, 0x7594, 0xE16A, 0x759A, 0xE16B, 0x759D, 0xE16C,
- 0x75A3, 0xE16E, 0x75A5, 0xE16D, 0x75AB, 0x8975, 0x75B1, 0xE176, 0x75B2, 0x94E6, 0x75B3, 0xE170, 0x75B5, 0xE172, 0x75B8, 0xE174,
- 0x75B9, 0x905D, 0x75BC, 0xE175, 0x75BD, 0xE173, 0x75BE, 0x8EBE, 0x75C2, 0xE16F, 0x75C3, 0xE171, 0x75C5, 0x9561, 0x75C7, 0x8FC7,
- 0x75CA, 0xE178, 0x75CD, 0xE177, 0x75D2, 0xE179, 0x75D4, 0x8EA4, 0x75D5, 0x8DAD, 0x75D8, 0x9397, 0x75D9, 0xE17A, 0x75DB, 0x92C9,
- 0x75DE, 0xE17C, 0x75E2, 0x979F, 0x75E3, 0xE17B, 0x75E9, 0x9189, 0x75F0, 0xE182, 0x75F2, 0xE184, 0x75F3, 0xE185, 0x75F4, 0x9273,
- 0x75FA, 0xE183, 0x75FC, 0xE180, 0x75FE, 0xE17D, 0x75FF, 0xE17E, 0x7601, 0xE181, 0x7609, 0xE188, 0x760B, 0xE186, 0x760D, 0xE187,
- 0x761F, 0xE189, 0x7620, 0xE18B, 0x7621, 0xE18C, 0x7622, 0xE18D, 0x7624, 0xE18E, 0x7627, 0xE18A, 0x7630, 0xE190, 0x7634, 0xE18F,
- 0x763B, 0xE191, 0x7642, 0x97C3, 0x7646, 0xE194, 0x7647, 0xE192, 0x7648, 0xE193, 0x764C, 0x8AE0, 0x7652, 0x96FC, 0x7656, 0x95C8,
- 0x7658, 0xE196, 0x765C, 0xE195, 0x7661, 0xE197, 0x7662, 0xE198, 0x7667, 0xE19C, 0x7668, 0xE199, 0x7669, 0xE19A, 0x766A, 0xE19B,
- 0x766C, 0xE19D, 0x7670, 0xE19E, 0x7672, 0xE19F, 0x7676, 0xE1A0, 0x7678, 0xE1A1, 0x767A, 0x94AD, 0x767B, 0x936F, 0x767C, 0xE1A2,
- 0x767D, 0x9492, 0x767E, 0x9553, 0x7680, 0xE1A3, 0x7682, 0xFB70, 0x7683, 0xE1A4, 0x7684, 0x9349, 0x7686, 0x8A46, 0x7687, 0x8D63,
- 0x7688, 0xE1A5, 0x768B, 0xE1A6, 0x768E, 0xE1A7, 0x7690, 0x8E48, 0x7693, 0xE1A9, 0x7696, 0xE1A8, 0x7699, 0xE1AA, 0x769A, 0xE1AB,
- 0x769B, 0xFB73, 0x769C, 0xFB71, 0x769E, 0xFB72, 0x76A6, 0xFB74, 0x76AE, 0x94E7, 0x76B0, 0xE1AC, 0x76B4, 0xE1AD, 0x76B7, 0xEA89,
- 0x76B8, 0xE1AE, 0x76B9, 0xE1AF, 0x76BA, 0xE1B0, 0x76BF, 0x8E4D, 0x76C2, 0xE1B1, 0x76C3, 0x9475, 0x76C6, 0x967E, 0x76C8, 0x896D,
- 0x76CA, 0x8976, 0x76CD, 0xE1B2, 0x76D2, 0xE1B4, 0x76D6, 0xE1B3, 0x76D7, 0x9390, 0x76DB, 0x90B7, 0x76DC, 0x9F58, 0x76DE, 0xE1B5,
- 0x76DF, 0x96BF, 0x76E1, 0xE1B6, 0x76E3, 0x8AC4, 0x76E4, 0x94D5, 0x76E5, 0xE1B7, 0x76E7, 0xE1B8, 0x76EA, 0xE1B9, 0x76EE, 0x96DA,
- 0x76F2, 0x96D3, 0x76F4, 0x92BC, 0x76F8, 0x918A, 0x76FB, 0xE1BB, 0x76FE, 0x8F82, 0x7701, 0x8FC8, 0x7704, 0xE1BE, 0x7707, 0xE1BD,
- 0x7708, 0xE1BC, 0x7709, 0x94FB, 0x770B, 0x8AC5, 0x770C, 0x8CA7, 0x771B, 0xE1C4, 0x771E, 0xE1C1, 0x771F, 0x905E, 0x7720, 0x96B0,
- 0x7724, 0xE1C0, 0x7725, 0xE1C2, 0x7726, 0xE1C3, 0x7729, 0xE1BF, 0x7737, 0xE1C5, 0x7738, 0xE1C6, 0x773A, 0x92AD, 0x773C, 0x8AE1,
- 0x7740, 0x9285, 0x7746, 0xFB76, 0x7747, 0xE1C7, 0x775A, 0xE1C8, 0x775B, 0xE1CB, 0x7761, 0x9087, 0x7763, 0x93C2, 0x7765, 0xE1CC,
- 0x7766, 0x9672, 0x7768, 0xE1C9, 0x776B, 0xE1CA, 0x7779, 0xE1CF, 0x777E, 0xE1CE, 0x777F, 0xE1CD, 0x778B, 0xE1D1, 0x778E, 0xE1D0,
- 0x7791, 0xE1D2, 0x779E, 0xE1D4, 0x77A0, 0xE1D3, 0x77A5, 0x95CB, 0x77AC, 0x8F75, 0x77AD, 0x97C4, 0x77B0, 0xE1D5, 0x77B3, 0x93B5,
- 0x77B6, 0xE1D6, 0x77B9, 0xE1D7, 0x77BB, 0xE1DB, 0x77BC, 0xE1D9, 0x77BD, 0xE1DA, 0x77BF, 0xE1D8, 0x77C7, 0xE1DC, 0x77CD, 0xE1DD,
- 0x77D7, 0xE1DE, 0x77DA, 0xE1DF, 0x77DB, 0x96B5, 0x77DC, 0xE1E0, 0x77E2, 0x96EE, 0x77E3, 0xE1E1, 0x77E5, 0x926D, 0x77E7, 0x948A,
- 0x77E9, 0x8BE9, 0x77ED, 0x925A, 0x77EE, 0xE1E2, 0x77EF, 0x8BB8, 0x77F3, 0x90CE, 0x77FC, 0xE1E3, 0x7802, 0x8DBB, 0x780C, 0xE1E4,
- 0x7812, 0xE1E5, 0x7814, 0x8CA4, 0x7815, 0x8DD3, 0x7820, 0xE1E7, 0x7821, 0xFB78, 0x7825, 0x9375, 0x7826, 0x8DD4, 0x7827, 0x8B6D,
- 0x7832, 0x9643, 0x7834, 0x946A, 0x783A, 0x9376, 0x783F, 0x8D7B, 0x7845, 0xE1E9, 0x784E, 0xFB79, 0x785D, 0x8FC9, 0x7864, 0xFB7A,
- 0x786B, 0x97B0, 0x786C, 0x8D64, 0x786F, 0x8CA5, 0x7872, 0x94A1, 0x7874, 0xE1EB, 0x787A, 0xFB7B, 0x787C, 0xE1ED, 0x7881, 0x8CE9,
- 0x7886, 0xE1EC, 0x7887, 0x92F4, 0x788C, 0xE1EF, 0x788D, 0x8A56, 0x788E, 0xE1EA, 0x7891, 0x94E8, 0x7893, 0x894F, 0x7895, 0x8DEA,
- 0x7897, 0x9871, 0x789A, 0xE1EE, 0x78A3, 0xE1F0, 0x78A7, 0x95C9, 0x78A9, 0x90D7, 0x78AA, 0xE1F2, 0x78AF, 0xE1F3, 0x78B5, 0xE1F1,
- 0x78BA, 0x8A6D, 0x78BC, 0xE1F9, 0x78BE, 0xE1F8, 0x78C1, 0x8EA5, 0x78C5, 0xE1FA, 0x78C6, 0xE1F5, 0x78CA, 0xE1FB, 0x78CB, 0xE1F6,
- 0x78D0, 0x94D6, 0x78D1, 0xE1F4, 0x78D4, 0xE1F7, 0x78DA, 0xE241, 0x78E7, 0xE240, 0x78E8, 0x9681, 0x78EC, 0xE1FC, 0x78EF, 0x88E9,
- 0x78F4, 0xE243, 0x78FD, 0xE242, 0x7901, 0x8FCA, 0x7907, 0xE244, 0x790E, 0x9162, 0x7911, 0xE246, 0x7912, 0xE245, 0x7919, 0xE247,
- 0x7926, 0xE1E6, 0x792A, 0xE1E8, 0x792B, 0xE249, 0x792C, 0xE248, 0x7930, 0xFB7C, 0x793A, 0x8EA6, 0x793C, 0x97E7, 0x793E, 0x8ED0,
- 0x7940, 0xE24A, 0x7941, 0x8C56, 0x7947, 0x8B5F, 0x7948, 0x8B46, 0x7949, 0x8E83, 0x7950, 0x9753, 0x7953, 0xE250, 0x7955, 0xE24F,
- 0x7956, 0x9163, 0x7957, 0xE24C, 0x795A, 0xE24E, 0x795D, 0x8F6A, 0x795E, 0x905F, 0x795F, 0xE24D, 0x7960, 0xE24B, 0x7962, 0x9449,
- 0x7965, 0x8FCB, 0x7968, 0x955B, 0x796D, 0x8DD5, 0x7977, 0x9398, 0x797A, 0xE251, 0x797F, 0xE252, 0x7980, 0xE268, 0x7981, 0x8BD6,
- 0x7984, 0x985C, 0x7985, 0x9154, 0x798A, 0xE253, 0x798D, 0x89D0, 0x798E, 0x92F5, 0x798F, 0x959F, 0x7994, 0xFB81, 0x799B, 0xFB83,
- 0x799D, 0xE254, 0x79A6, 0x8B9A, 0x79A7, 0xE255, 0x79AA, 0xE257, 0x79AE, 0xE258, 0x79B0, 0x9448, 0x79B3, 0xE259, 0x79B9, 0xE25A,
- 0x79BA, 0xE25B, 0x79BD, 0x8BD7, 0x79BE, 0x89D1, 0x79BF, 0x93C3, 0x79C0, 0x8F47, 0x79C1, 0x8E84, 0x79C9, 0xE25C, 0x79CB, 0x8F48,
- 0x79D1, 0x89C8, 0x79D2, 0x9562, 0x79D5, 0xE25D, 0x79D8, 0x94E9, 0x79DF, 0x9164, 0x79E1, 0xE260, 0x79E3, 0xE261, 0x79E4, 0x9489,
- 0x79E6, 0x9060, 0x79E7, 0xE25E, 0x79E9, 0x9281, 0x79EC, 0xE25F, 0x79F0, 0x8FCC, 0x79FB, 0x88DA, 0x7A00, 0x8B48, 0x7A08, 0xE262,
- 0x7A0B, 0x92F6, 0x7A0D, 0xE263, 0x7A0E, 0x90C5, 0x7A14, 0x96AB, 0x7A17, 0x9542, 0x7A18, 0xE264, 0x7A19, 0xE265, 0x7A1A, 0x9274,
- 0x7A1C, 0x97C5, 0x7A1F, 0xE267, 0x7A20, 0xE266, 0x7A2E, 0x8EED, 0x7A31, 0xE269, 0x7A32, 0x88EE, 0x7A37, 0xE26C, 0x7A3B, 0xE26A,
- 0x7A3C, 0x89D2, 0x7A3D, 0x8C6D, 0x7A3E, 0xE26B, 0x7A3F, 0x8D65, 0x7A40, 0x8D92, 0x7A42, 0x95E4, 0x7A43, 0xE26D, 0x7A46, 0x9673,
- 0x7A49, 0xE26F, 0x7A4D, 0x90CF, 0x7A4E, 0x896E, 0x7A4F, 0x89B8, 0x7A50, 0x88AA, 0x7A57, 0xE26E, 0x7A61, 0xE270, 0x7A62, 0xE271,
- 0x7A63, 0x8FF5, 0x7A69, 0xE272, 0x7A6B, 0x8A6E, 0x7A70, 0xE274, 0x7A74, 0x8C8A, 0x7A76, 0x8B86, 0x7A79, 0xE275, 0x7A7A, 0x8BF3,
- 0x7A7D, 0xE276, 0x7A7F, 0x90FA, 0x7A81, 0x93CB, 0x7A83, 0x90DE, 0x7A84, 0x8DF3, 0x7A88, 0xE277, 0x7A92, 0x9282, 0x7A93, 0x918B,
- 0x7A95, 0xE279, 0x7A96, 0xE27B, 0x7A97, 0xE278, 0x7A98, 0xE27A, 0x7A9F, 0x8C41, 0x7AA9, 0xE27C, 0x7AAA, 0x8C45, 0x7AAE, 0x8B87,
- 0x7AAF, 0x9771, 0x7AB0, 0xE27E, 0x7AB6, 0xE280, 0x7ABA, 0x894D, 0x7ABF, 0xE283, 0x7AC3, 0x8A96, 0x7AC4, 0xE282, 0x7AC5, 0xE281,
- 0x7AC7, 0xE285, 0x7AC8, 0xE27D, 0x7ACA, 0xE286, 0x7ACB, 0x97A7, 0x7ACD, 0xE287, 0x7ACF, 0xE288, 0x7AD1, 0xFB84, 0x7AD2, 0x9AF2,
- 0x7AD3, 0xE28A, 0x7AD5, 0xE289, 0x7AD9, 0xE28B, 0x7ADA, 0xE28C, 0x7ADC, 0x97B3, 0x7ADD, 0xE28D, 0x7ADF, 0xE8ED, 0x7AE0, 0x8FCD,
- 0x7AE1, 0xE28E, 0x7AE2, 0xE28F, 0x7AE3, 0x8F76, 0x7AE5, 0x93B6, 0x7AE6, 0xE290, 0x7AE7, 0xFB85, 0x7AEA, 0x9247, 0x7AEB, 0xFB87,
- 0x7AED, 0xE291, 0x7AEF, 0x925B, 0x7AF0, 0xE292, 0x7AF6, 0x8BA3, 0x7AF8, 0x995E, 0x7AF9, 0x927C, 0x7AFA, 0x8EB1, 0x7AFF, 0x8AC6,
- 0x7B02, 0xE293, 0x7B04, 0xE2A0, 0x7B06, 0xE296, 0x7B08, 0x8B88, 0x7B0A, 0xE295, 0x7B0B, 0xE2A2, 0x7B0F, 0xE294, 0x7B11, 0x8FCE,
- 0x7B18, 0xE298, 0x7B19, 0xE299, 0x7B1B, 0x934A, 0x7B1E, 0xE29A, 0x7B20, 0x8A7D, 0x7B25, 0x9079, 0x7B26, 0x9584, 0x7B28, 0xE29C,
- 0x7B2C, 0x91E6, 0x7B33, 0xE297, 0x7B35, 0xE29B, 0x7B36, 0xE29D, 0x7B39, 0x8DF9, 0x7B45, 0xE2A4, 0x7B46, 0x954D, 0x7B48, 0x94A4,
- 0x7B49, 0x9399, 0x7B4B, 0x8BD8, 0x7B4C, 0xE2A3, 0x7B4D, 0xE2A1, 0x7B4F, 0x94B3, 0x7B50, 0xE29E, 0x7B51, 0x927D, 0x7B52, 0x939B,
- 0x7B54, 0x939A, 0x7B56, 0x8DF4, 0x7B5D, 0xE2B6, 0x7B65, 0xE2A6, 0x7B67, 0xE2A8, 0x7B6C, 0xE2AB, 0x7B6E, 0xE2AC, 0x7B70, 0xE2A9,
- 0x7B71, 0xE2AA, 0x7B74, 0xE2A7, 0x7B75, 0xE2A5, 0x7B7A, 0xE29F, 0x7B86, 0x95CD, 0x7B87, 0x89D3, 0x7B8B, 0xE2B3, 0x7B8D, 0xE2B0,
- 0x7B8F, 0xE2B5, 0x7B92, 0xE2B4, 0x7B94, 0x9493, 0x7B95, 0x96A5, 0x7B97, 0x8E5A, 0x7B98, 0xE2AE, 0x7B99, 0xE2B7, 0x7B9A, 0xE2B2,
- 0x7B9C, 0xE2B1, 0x7B9D, 0xE2AD, 0x7B9E, 0xFB88, 0x7B9F, 0xE2AF, 0x7BA1, 0x8AC7, 0x7BAA, 0x925C, 0x7BAD, 0x90FB, 0x7BB1, 0x94A0,
- 0x7BB4, 0xE2BC, 0x7BB8, 0x94A2, 0x7BC0, 0x90DF, 0x7BC1, 0xE2B9, 0x7BC4, 0x94CD, 0x7BC6, 0xE2BD, 0x7BC7, 0x95D1, 0x7BC9, 0x927A,
- 0x7BCB, 0xE2B8, 0x7BCC, 0xE2BA, 0x7BCF, 0xE2BB, 0x7BDD, 0xE2BE, 0x7BE0, 0x8EC2, 0x7BE4, 0x93C4, 0x7BE5, 0xE2C3, 0x7BE6, 0xE2C2,
- 0x7BE9, 0xE2BF, 0x7BED, 0x9855, 0x7BF3, 0xE2C8, 0x7BF6, 0xE2CC, 0x7BF7, 0xE2C9, 0x7C00, 0xE2C5, 0x7C07, 0xE2C6, 0x7C0D, 0xE2CB,
- 0x7C11, 0xE2C0, 0x7C12, 0x99D3, 0x7C13, 0xE2C7, 0x7C14, 0xE2C1, 0x7C17, 0xE2CA, 0x7C1F, 0xE2D0, 0x7C21, 0x8AC8, 0x7C23, 0xE2CD,
- 0x7C27, 0xE2CE, 0x7C2A, 0xE2CF, 0x7C2B, 0xE2D2, 0x7C37, 0xE2D1, 0x7C38, 0x94F4, 0x7C3D, 0xE2D3, 0x7C3E, 0x97FA, 0x7C3F, 0x95EB,
- 0x7C40, 0xE2D8, 0x7C43, 0xE2D5, 0x7C4C, 0xE2D4, 0x7C4D, 0x90D0, 0x7C4F, 0xE2D7, 0x7C50, 0xE2D9, 0x7C54, 0xE2D6, 0x7C56, 0xE2DD,
- 0x7C58, 0xE2DA, 0x7C5F, 0xE2DB, 0x7C60, 0xE2C4, 0x7C64, 0xE2DC, 0x7C65, 0xE2DE, 0x7C6C, 0xE2DF, 0x7C73, 0x95C4, 0x7C75, 0xE2E0,
- 0x7C7E, 0x96E0, 0x7C81, 0x8BCC, 0x7C82, 0x8C48, 0x7C83, 0xE2E1, 0x7C89, 0x95B2, 0x7C8B, 0x9088, 0x7C8D, 0x96AE, 0x7C90, 0xE2E2,
- 0x7C92, 0x97B1, 0x7C95, 0x9494, 0x7C97, 0x9165, 0x7C98, 0x9453, 0x7C9B, 0x8F6C, 0x7C9F, 0x88BE, 0x7CA1, 0xE2E7, 0x7CA2, 0xE2E5,
- 0x7CA4, 0xE2E3, 0x7CA5, 0x8A9F, 0x7CA7, 0x8FCF, 0x7CA8, 0xE2E8, 0x7CAB, 0xE2E6, 0x7CAD, 0xE2E4, 0x7CAE, 0xE2EC, 0x7CB1, 0xE2EB,
- 0x7CB2, 0xE2EA, 0x7CB3, 0xE2E9, 0x7CB9, 0xE2ED, 0x7CBD, 0xE2EE, 0x7CBE, 0x90B8, 0x7CC0, 0xE2EF, 0x7CC2, 0xE2F1, 0x7CC5, 0xE2F0,
- 0x7CCA, 0x8CD0, 0x7CCE, 0x9157, 0x7CD2, 0xE2F3, 0x7CD6, 0x939C, 0x7CD8, 0xE2F2, 0x7CDC, 0xE2F4, 0x7CDE, 0x95B3, 0x7CDF, 0x918C,
- 0x7CE0, 0x8D66, 0x7CE2, 0xE2F5, 0x7CE7, 0x97C6, 0x7CEF, 0xE2F7, 0x7CF2, 0xE2F8, 0x7CF4, 0xE2F9, 0x7CF6, 0xE2FA, 0x7CF8, 0x8E85,
- 0x7CFA, 0xE2FB, 0x7CFB, 0x8C6E, 0x7CFE, 0x8B8A, 0x7D00, 0x8B49, 0x7D02, 0xE340, 0x7D04, 0x96F1, 0x7D05, 0x8D67, 0x7D06, 0xE2FC,
- 0x7D0A, 0xE343, 0x7D0B, 0x96E4, 0x7D0D, 0x945B, 0x7D10, 0x9552, 0x7D14, 0x8F83, 0x7D15, 0xE342, 0x7D17, 0x8ED1, 0x7D18, 0x8D68,
- 0x7D19, 0x8E86, 0x7D1A, 0x8B89, 0x7D1B, 0x95B4, 0x7D1C, 0xE341, 0x7D20, 0x9166, 0x7D21, 0x9661, 0x7D22, 0x8DF5, 0x7D2B, 0x8E87,
- 0x7D2C, 0x92DB, 0x7D2E, 0xE346, 0x7D2F, 0x97DD, 0x7D30, 0x8DD7, 0x7D32, 0xE347, 0x7D33, 0x9061, 0x7D35, 0xE349, 0x7D39, 0x8FD0,
- 0x7D3A, 0x8DAE, 0x7D3F, 0xE348, 0x7D42, 0x8F49, 0x7D43, 0x8CBC, 0x7D44, 0x9167, 0x7D45, 0xE344, 0x7D46, 0xE34A, 0x7D48, 0xFB8A,
- 0x7D4B, 0xE345, 0x7D4C, 0x8C6F, 0x7D4E, 0xE34D, 0x7D4F, 0xE351, 0x7D50, 0x8C8B, 0x7D56, 0xE34C, 0x7D5B, 0xE355, 0x7D5C, 0xFB8B,
- 0x7D5E, 0x8D69, 0x7D61, 0x978D, 0x7D62, 0x88BA, 0x7D63, 0xE352, 0x7D66, 0x8B8B, 0x7D68, 0xE34F, 0x7D6E, 0xE350, 0x7D71, 0x939D,
- 0x7D72, 0xE34E, 0x7D73, 0xE34B, 0x7D75, 0x8A47, 0x7D76, 0x90E2, 0x7D79, 0x8CA6, 0x7D7D, 0xE357, 0x7D89, 0xE354, 0x7D8F, 0xE356,
- 0x7D93, 0xE353, 0x7D99, 0x8C70, 0x7D9A, 0x91B1, 0x7D9B, 0xE358, 0x7D9C, 0x918E, 0x7D9F, 0xE365, 0x7DA0, 0xFB8D, 0x7DA2, 0xE361,
- 0x7DA3, 0xE35B, 0x7DAB, 0xE35F, 0x7DAC, 0x8EF8, 0x7DAD, 0x88DB, 0x7DAE, 0xE35A, 0x7DAF, 0xE362, 0x7DB0, 0xE366, 0x7DB1, 0x8D6A,
- 0x7DB2, 0x96D4, 0x7DB4, 0x92D4, 0x7DB5, 0xE35C, 0x7DB7, 0xFB8C, 0x7DB8, 0xE364, 0x7DBA, 0xE359, 0x7DBB, 0x925D, 0x7DBD, 0xE35E,
- 0x7DBE, 0x88BB, 0x7DBF, 0x96C8, 0x7DC7, 0xE35D, 0x7DCA, 0x8BD9, 0x7DCB, 0x94EA, 0x7DCF, 0x918D, 0x7DD1, 0x97CE, 0x7DD2, 0x8F8F,
- 0x7DD5, 0xE38E, 0x7DD6, 0xFB8E, 0x7DD8, 0xE367, 0x7DDA, 0x90FC, 0x7DDC, 0xE363, 0x7DDD, 0xE368, 0x7DDE, 0xE36A, 0x7DE0, 0x92F7,
- 0x7DE1, 0xE36D, 0x7DE4, 0xE369, 0x7DE8, 0x95D2, 0x7DE9, 0x8AC9, 0x7DEC, 0x96C9, 0x7DEF, 0x88DC, 0x7DF2, 0xE36C, 0x7DF4, 0x97FB,
- 0x7DFB, 0xE36B, 0x7E01, 0x898F, 0x7E04, 0x93EA, 0x7E05, 0xE36E, 0x7E09, 0xE375, 0x7E0A, 0xE36F, 0x7E0B, 0xE376, 0x7E12, 0xE372,
- 0x7E1B, 0x949B, 0x7E1E, 0x8EC8, 0x7E1F, 0xE374, 0x7E21, 0xE371, 0x7E22, 0xE377, 0x7E23, 0xE370, 0x7E26, 0x8F63, 0x7E2B, 0x9644,
- 0x7E2E, 0x8F6B, 0x7E31, 0xE373, 0x7E32, 0xE380, 0x7E35, 0xE37B, 0x7E37, 0xE37E, 0x7E39, 0xE37C, 0x7E3A, 0xE381, 0x7E3B, 0xE37A,
- 0x7E3D, 0xE360, 0x7E3E, 0x90D1, 0x7E41, 0x94C9, 0x7E43, 0xE37D, 0x7E46, 0xE378, 0x7E4A, 0x9140, 0x7E4B, 0x8C71, 0x7E4D, 0x8F4A,
- 0x7E52, 0xFB8F, 0x7E54, 0x9044, 0x7E55, 0x9155, 0x7E56, 0xE384, 0x7E59, 0xE386, 0x7E5A, 0xE387, 0x7E5D, 0xE383, 0x7E5E, 0xE385,
- 0x7E66, 0xE379, 0x7E67, 0xE382, 0x7E69, 0xE38A, 0x7E6A, 0xE389, 0x7E6D, 0x969A, 0x7E70, 0x8C4A, 0x7E79, 0xE388, 0x7E7B, 0xE38C,
- 0x7E7C, 0xE38B, 0x7E7D, 0xE38F, 0x7E7F, 0xE391, 0x7E82, 0x8E5B, 0x7E83, 0xE38D, 0x7E88, 0xE392, 0x7E89, 0xE393, 0x7E8A, 0xFA5C,
- 0x7E8C, 0xE394, 0x7E8E, 0xE39A, 0x7E8F, 0x935A, 0x7E90, 0xE396, 0x7E92, 0xE395, 0x7E93, 0xE397, 0x7E94, 0xE398, 0x7E96, 0xE399,
- 0x7E9B, 0xE39B, 0x7E9C, 0xE39C, 0x7F36, 0x8ACA, 0x7F38, 0xE39D, 0x7F3A, 0xE39E, 0x7F45, 0xE39F, 0x7F47, 0xFB90, 0x7F4C, 0xE3A0,
- 0x7F4D, 0xE3A1, 0x7F4E, 0xE3A2, 0x7F50, 0xE3A3, 0x7F51, 0xE3A4, 0x7F54, 0xE3A6, 0x7F55, 0xE3A5, 0x7F58, 0xE3A7, 0x7F5F, 0xE3A8,
- 0x7F60, 0xE3A9, 0x7F67, 0xE3AC, 0x7F68, 0xE3AA, 0x7F69, 0xE3AB, 0x7F6A, 0x8DDF, 0x7F6B, 0x8C72, 0x7F6E, 0x9275, 0x7F70, 0x94B1,
- 0x7F72, 0x8F90, 0x7F75, 0x946C, 0x7F77, 0x94EB, 0x7F78, 0xE3AD, 0x7F79, 0x9CEB, 0x7F82, 0xE3AE, 0x7F83, 0xE3B0, 0x7F85, 0x9785,
- 0x7F86, 0xE3AF, 0x7F87, 0xE3B2, 0x7F88, 0xE3B1, 0x7F8A, 0x9772, 0x7F8C, 0xE3B3, 0x7F8E, 0x94FC, 0x7F94, 0xE3B4, 0x7F9A, 0xE3B7,
- 0x7F9D, 0xE3B6, 0x7F9E, 0xE3B5, 0x7FA1, 0xFB91, 0x7FA3, 0xE3B8, 0x7FA4, 0x8C51, 0x7FA8, 0x9141, 0x7FA9, 0x8B60, 0x7FAE, 0xE3BC,
- 0x7FAF, 0xE3B9, 0x7FB2, 0xE3BA, 0x7FB6, 0xE3BD, 0x7FB8, 0xE3BE, 0x7FB9, 0xE3BB, 0x7FBD, 0x8948, 0x7FC1, 0x89A5, 0x7FC5, 0xE3C0,
- 0x7FC6, 0xE3C1, 0x7FCA, 0xE3C2, 0x7FCC, 0x9782, 0x7FD2, 0x8F4B, 0x7FD4, 0xE3C4, 0x7FD5, 0xE3C3, 0x7FE0, 0x9089, 0x7FE1, 0xE3C5,
- 0x7FE6, 0xE3C6, 0x7FE9, 0xE3C7, 0x7FEB, 0x8AE3, 0x7FF0, 0x8ACB, 0x7FF3, 0xE3C8, 0x7FF9, 0xE3C9, 0x7FFB, 0x967C, 0x7FFC, 0x9783,
- 0x8000, 0x9773, 0x8001, 0x9856, 0x8003, 0x8D6C, 0x8004, 0xE3CC, 0x8005, 0x8ED2, 0x8006, 0xE3CB, 0x800B, 0xE3CD, 0x800C, 0x8EA7,
- 0x8010, 0x91CF, 0x8012, 0xE3CE, 0x8015, 0x8D6B, 0x8017, 0x96D5, 0x8018, 0xE3CF, 0x8019, 0xE3D0, 0x801C, 0xE3D1, 0x8021, 0xE3D2,
- 0x8028, 0xE3D3, 0x8033, 0x8EA8, 0x8036, 0x96EB, 0x803B, 0xE3D5, 0x803D, 0x925E, 0x803F, 0xE3D4, 0x8046, 0xE3D7, 0x804A, 0xE3D6,
- 0x8052, 0xE3D8, 0x8056, 0x90B9, 0x8058, 0xE3D9, 0x805A, 0xE3DA, 0x805E, 0x95B7, 0x805F, 0xE3DB, 0x8061, 0x918F, 0x8062, 0xE3DC,
- 0x8068, 0xE3DD, 0x806F, 0x97FC, 0x8070, 0xE3E0, 0x8072, 0xE3DF, 0x8073, 0xE3DE, 0x8074, 0x92AE, 0x8076, 0xE3E1, 0x8077, 0x9045,
- 0x8079, 0xE3E2, 0x807D, 0xE3E3, 0x807E, 0x9857, 0x807F, 0xE3E4, 0x8084, 0xE3E5, 0x8085, 0xE3E7, 0x8086, 0xE3E6, 0x8087, 0x94A3,
- 0x8089, 0x93F7, 0x808B, 0x985D, 0x808C, 0x94A7, 0x8093, 0xE3E9, 0x8096, 0x8FD1, 0x8098, 0x9549, 0x809A, 0xE3EA, 0x809B, 0xE3E8,
- 0x809D, 0x8ACC, 0x80A1, 0x8CD2, 0x80A2, 0x8E88, 0x80A5, 0x94EC, 0x80A9, 0x8CA8, 0x80AA, 0x9662, 0x80AC, 0xE3ED, 0x80AD, 0xE3EB,
- 0x80AF, 0x8D6D, 0x80B1, 0x8D6E, 0x80B2, 0x88E7, 0x80B4, 0x8DE6, 0x80BA, 0x9478, 0x80C3, 0x88DD, 0x80C4, 0xE3F2, 0x80C6, 0x925F,
- 0x80CC, 0x9477, 0x80CE, 0x91D9, 0x80D6, 0xE3F4, 0x80D9, 0xE3F0, 0x80DA, 0xE3F3, 0x80DB, 0xE3EE, 0x80DD, 0xE3F1, 0x80DE, 0x9645,
- 0x80E1, 0x8CD3, 0x80E4, 0x88FB, 0x80E5, 0xE3EF, 0x80EF, 0xE3F6, 0x80F1, 0xE3F7, 0x80F4, 0x93B7, 0x80F8, 0x8BB9, 0x80FC, 0xE445,
- 0x80FD, 0x945C, 0x8102, 0x8E89, 0x8105, 0x8BBA, 0x8106, 0x90C6, 0x8107, 0x9865, 0x8108, 0x96AC, 0x8109, 0xE3F5, 0x810A, 0x90D2,
- 0x811A, 0x8B72, 0x811B, 0xE3F8, 0x8123, 0xE3FA, 0x8129, 0xE3F9, 0x812F, 0xE3FB, 0x8131, 0x9245, 0x8133, 0x945D, 0x8139, 0x92AF,
- 0x813E, 0xE442, 0x8146, 0xE441, 0x814B, 0xE3FC, 0x814E, 0x9074, 0x8150, 0x9585, 0x8151, 0xE444, 0x8153, 0xE443, 0x8154, 0x8D6F,
- 0x8155, 0x9872, 0x815F, 0xE454, 0x8165, 0xE448, 0x8166, 0xE449, 0x816B, 0x8EEE, 0x816E, 0xE447, 0x8170, 0x8D98, 0x8171, 0xE446,
- 0x8174, 0xE44A, 0x8178, 0x92B0, 0x8179, 0x95A0, 0x817A, 0x9142, 0x817F, 0x91DA, 0x8180, 0xE44E, 0x8182, 0xE44F, 0x8183, 0xE44B,
- 0x8188, 0xE44C, 0x818A, 0xE44D, 0x818F, 0x8D70, 0x8193, 0xE455, 0x8195, 0xE451, 0x819A, 0x9586, 0x819C, 0x968C, 0x819D, 0x9547,
- 0x81A0, 0xE450, 0x81A3, 0xE453, 0x81A4, 0xE452, 0x81A8, 0x9663, 0x81A9, 0xE456, 0x81B0, 0xE457, 0x81B3, 0x9156, 0x81B5, 0xE458,
- 0x81B8, 0xE45A, 0x81BA, 0xE45E, 0x81BD, 0xE45B, 0x81BE, 0xE459, 0x81BF, 0x945E, 0x81C0, 0xE45C, 0x81C2, 0xE45D, 0x81C6, 0x89B0,
- 0x81C8, 0xE464, 0x81C9, 0xE45F, 0x81CD, 0xE460, 0x81D1, 0xE461, 0x81D3, 0x919F, 0x81D8, 0xE463, 0x81D9, 0xE462, 0x81DA, 0xE465,
- 0x81DF, 0xE466, 0x81E0, 0xE467, 0x81E3, 0x9062, 0x81E5, 0x89E7, 0x81E7, 0xE468, 0x81E8, 0x97D5, 0x81EA, 0x8EA9, 0x81ED, 0x8F4C,
- 0x81F3, 0x8E8A, 0x81F4, 0x9276, 0x81FA, 0xE469, 0x81FB, 0xE46A, 0x81FC, 0x8950, 0x81FE, 0xE46B, 0x8201, 0xE46C, 0x8202, 0xE46D,
- 0x8205, 0xE46E, 0x8207, 0xE46F, 0x8208, 0x8BBB, 0x8209, 0x9DA8, 0x820A, 0xE470, 0x820C, 0x90E3, 0x820D, 0xE471, 0x820E, 0x8EC9,
- 0x8210, 0xE472, 0x8212, 0x98AE, 0x8216, 0xE473, 0x8217, 0x95DC, 0x8218, 0x8ADA, 0x821B, 0x9143, 0x821C, 0x8F77, 0x821E, 0x9591,
- 0x821F, 0x8F4D, 0x8229, 0xE474, 0x822A, 0x8D71, 0x822B, 0xE475, 0x822C, 0x94CA, 0x822E, 0xE484, 0x8233, 0xE477, 0x8235, 0x91C7,
- 0x8236, 0x9495, 0x8237, 0x8CBD, 0x8238, 0xE476, 0x8239, 0x9144, 0x8240, 0xE478, 0x8247, 0x92F8, 0x8258, 0xE47A, 0x8259, 0xE479,
- 0x825A, 0xE47C, 0x825D, 0xE47B, 0x825F, 0xE47D, 0x8262, 0xE480, 0x8264, 0xE47E, 0x8266, 0x8ACD, 0x8268, 0xE481, 0x826A, 0xE482,
- 0x826B, 0xE483, 0x826E, 0x8DAF, 0x826F, 0x97C7, 0x8271, 0xE485, 0x8272, 0x9046, 0x8276, 0x8990, 0x8277, 0xE486, 0x8278, 0xE487,
- 0x827E, 0xE488, 0x828B, 0x88F0, 0x828D, 0xE489, 0x8292, 0xE48A, 0x8299, 0x9587, 0x829D, 0x8EC5, 0x829F, 0xE48C, 0x82A5, 0x8A48,
- 0x82A6, 0x88B0, 0x82AB, 0xE48B, 0x82AC, 0xE48E, 0x82AD, 0x946D, 0x82AF, 0x9063, 0x82B1, 0x89D4, 0x82B3, 0x9646, 0x82B8, 0x8C7C,
- 0x82B9, 0x8BDA, 0x82BB, 0xE48D, 0x82BD, 0x89E8, 0x82C5, 0x8AA1, 0x82D1, 0x8991, 0x82D2, 0xE492, 0x82D3, 0x97E8, 0x82D4, 0x91DB,
- 0x82D7, 0x9563, 0x82D9, 0xE49E, 0x82DB, 0x89D5, 0x82DC, 0xE49C, 0x82DE, 0xE49A, 0x82DF, 0xE491, 0x82E1, 0xE48F, 0x82E3, 0xE490,
- 0x82E5, 0x8EE1, 0x82E6, 0x8BEA, 0x82E7, 0x9297, 0x82EB, 0x93CF, 0x82F1, 0x8970, 0x82F3, 0xE494, 0x82F4, 0xE493, 0x82F9, 0xE499,
- 0x82FA, 0xE495, 0x82FB, 0xE498, 0x8301, 0xFB93, 0x8302, 0x96CE, 0x8303, 0xE497, 0x8304, 0x89D6, 0x8305, 0x8A9D, 0x8306, 0xE49B,
- 0x8309, 0xE49D, 0x830E, 0x8C73, 0x8316, 0xE4A1, 0x8317, 0xE4AA, 0x8318, 0xE4AB, 0x831C, 0x88A9, 0x8323, 0xE4B2, 0x8328, 0x88EF,
- 0x832B, 0xE4A9, 0x832F, 0xE4A8, 0x8331, 0xE4A3, 0x8332, 0xE4A2, 0x8334, 0xE4A0, 0x8335, 0xE49F, 0x8336, 0x9283, 0x8338, 0x91F9,
- 0x8339, 0xE4A5, 0x8340, 0xE4A4, 0x8345, 0xE4A7, 0x8349, 0x9190, 0x834A, 0x8C74, 0x834F, 0x8960, 0x8350, 0xE4A6, 0x8352, 0x8D72,
- 0x8358, 0x9191, 0x8362, 0xFB94, 0x8373, 0xE4B8, 0x8375, 0xE4B9, 0x8377, 0x89D7, 0x837B, 0x89AC, 0x837C, 0xE4B6, 0x837F, 0xFB95,
- 0x8385, 0xE4AC, 0x8387, 0xE4B4, 0x8389, 0xE4BB, 0x838A, 0xE4B5, 0x838E, 0xE4B3, 0x8393, 0xE496, 0x8396, 0xE4B1, 0x839A, 0xE4AD,
- 0x839E, 0x8ACE, 0x839F, 0xE4AF, 0x83A0, 0xE4BA, 0x83A2, 0xE4B0, 0x83A8, 0xE4BC, 0x83AA, 0xE4AE, 0x83AB, 0x949C, 0x83B1, 0x9789,
- 0x83B5, 0xE4B7, 0x83BD, 0xE4CD, 0x83C1, 0xE4C5, 0x83C5, 0x909B, 0x83C7, 0xFB96, 0x83CA, 0x8B65, 0x83CC, 0x8BDB, 0x83CE, 0xE4C0,
- 0x83D3, 0x89D9, 0x83D6, 0x8FD2, 0x83D8, 0xE4C3, 0x83DC, 0x8DD8, 0x83DF, 0x9370, 0x83E0, 0xE4C8, 0x83E9, 0x95EC, 0x83EB, 0xE4BF,
- 0x83EF, 0x89D8, 0x83F0, 0x8CD4, 0x83F1, 0x9548, 0x83F2, 0xE4C9, 0x83F4, 0xE4BD, 0x83F6, 0xFB97, 0x83F7, 0xE4C6, 0x83FB, 0xE4D0,
- 0x83FD, 0xE4C1, 0x8403, 0xE4C2, 0x8404, 0x93B8, 0x8407, 0xE4C7, 0x840B, 0xE4C4, 0x840C, 0x9647, 0x840D, 0xE4CA, 0x840E, 0x88DE,
- 0x8413, 0xE4BE, 0x8420, 0xE4CC, 0x8422, 0xE4CB, 0x8429, 0x948B, 0x842A, 0xE4D2, 0x842C, 0xE4DD, 0x8431, 0x8A9E, 0x8435, 0xE4E0,
- 0x8438, 0xE4CE, 0x843C, 0xE4D3, 0x843D, 0x978E, 0x8446, 0xE4DC, 0x8448, 0xFB98, 0x8449, 0x9774, 0x844E, 0x97A8, 0x8457, 0x9298,
- 0x845B, 0x8A8B, 0x8461, 0x9592, 0x8462, 0xE4E2, 0x8463, 0x939F, 0x8466, 0x88AF, 0x8469, 0xE4DB, 0x846B, 0xE4D7, 0x846C, 0x9192,
- 0x846D, 0xE4D1, 0x846E, 0xE4D9, 0x846F, 0xE4DE, 0x8471, 0x944B, 0x8475, 0x88A8, 0x8477, 0xE4D6, 0x8479, 0xE4DF, 0x847A, 0x9598,
- 0x8482, 0xE4DA, 0x8484, 0xE4D5, 0x848B, 0x8FD3, 0x8490, 0x8F4E, 0x8494, 0x8EAA, 0x8499, 0x96D6, 0x849C, 0x9566, 0x849F, 0xE4E5,
- 0x84A1, 0xE4EE, 0x84AD, 0xE4D8, 0x84B2, 0x8A97, 0x84B4, 0xFB99, 0x84B8, 0x8FF6, 0x84B9, 0xE4E3, 0x84BB, 0xE4E8, 0x84BC, 0x9193,
- 0x84BF, 0xE4E4, 0x84C1, 0xE4EB, 0x84C4, 0x927E, 0x84C6, 0xE4EC, 0x84C9, 0x9775, 0x84CA, 0xE4E1, 0x84CB, 0x8A57, 0x84CD, 0xE4E7,
- 0x84D0, 0xE4EA, 0x84D1, 0x96AA, 0x84D6, 0xE4ED, 0x84D9, 0xE4E6, 0x84DA, 0xE4E9, 0x84DC, 0xFA60, 0x84EC, 0x9648, 0x84EE, 0x9840,
- 0x84F4, 0xE4F1, 0x84FC, 0xE4F8, 0x84FF, 0xE4F0, 0x8500, 0x8EC1, 0x8506, 0xE4CF, 0x8511, 0x95CC, 0x8513, 0x96A0, 0x8514, 0xE4F7,
- 0x8515, 0xE4F6, 0x8517, 0xE4F2, 0x8518, 0xE4F3, 0x851A, 0x8955, 0x851F, 0xE4F5, 0x8521, 0xE4EF, 0x8526, 0x92D3, 0x852C, 0xE4F4,
- 0x852D, 0x88FC, 0x8535, 0x91A0, 0x853D, 0x95C1, 0x8540, 0xE4F9, 0x8541, 0xE540, 0x8543, 0x94D7, 0x8548, 0xE4FC, 0x8549, 0x8FD4,
- 0x854A, 0x8EC7, 0x854B, 0xE542, 0x854E, 0x8BBC, 0x8553, 0xFB9A, 0x8555, 0xE543, 0x8557, 0x9599, 0x8558, 0xE4FB, 0x8559, 0xFB9B,
- 0x855A, 0xE4D4, 0x8563, 0xE4FA, 0x8568, 0x986E, 0x8569, 0x93A0, 0x856A, 0x9593, 0x856B, 0xFB9C, 0x856D, 0xE54A, 0x8577, 0xE550,
- 0x857E, 0xE551, 0x8580, 0xE544, 0x8584, 0x9496, 0x8587, 0xE54E, 0x8588, 0xE546, 0x858A, 0xE548, 0x8590, 0xE552, 0x8591, 0xE547,
- 0x8594, 0xE54B, 0x8597, 0x8992, 0x8599, 0x93E3, 0x859B, 0xE54C, 0x859C, 0xE54F, 0x85A4, 0xE545, 0x85A6, 0x9145, 0x85A8, 0xE549,
- 0x85A9, 0x8E46, 0x85AA, 0x9064, 0x85AB, 0x8C4F, 0x85AC, 0x96F2, 0x85AE, 0x96F7, 0x85AF, 0x8F92, 0x85B0, 0xFB9E, 0x85B9, 0xE556,
- 0x85BA, 0xE554, 0x85C1, 0x986D, 0x85C9, 0xE553, 0x85CD, 0x9795, 0x85CF, 0xE555, 0x85D0, 0xE557, 0x85D5, 0xE558, 0x85DC, 0xE55B,
- 0x85DD, 0xE559, 0x85E4, 0x93A1, 0x85E5, 0xE55A, 0x85E9, 0x94CB, 0x85EA, 0xE54D, 0x85F7, 0x8F93, 0x85F9, 0xE55C, 0x85FA, 0xE561,
- 0x85FB, 0x9194, 0x85FE, 0xE560, 0x8602, 0xE541, 0x8606, 0xE562, 0x8607, 0x9168, 0x860A, 0xE55D, 0x860B, 0xE55F, 0x8613, 0xE55E,
- 0x8616, 0x9F50, 0x8617, 0x9F41, 0x861A, 0xE564, 0x8622, 0xE563, 0x862D, 0x9796, 0x862F, 0xE1BA, 0x8630, 0xE565, 0x863F, 0xE566,
- 0x864D, 0xE567, 0x864E, 0x8CD5, 0x8650, 0x8B73, 0x8654, 0xE569, 0x8655, 0x997C, 0x865A, 0x8B95, 0x865C, 0x97B8, 0x865E, 0x8BF1,
- 0x865F, 0xE56A, 0x8667, 0xE56B, 0x866B, 0x928E, 0x8671, 0xE56C, 0x8679, 0x93F8, 0x867B, 0x88B8, 0x868A, 0x89E1, 0x868B, 0xE571,
- 0x868C, 0xE572, 0x8693, 0xE56D, 0x8695, 0x8E5C, 0x86A3, 0xE56E, 0x86A4, 0x9461, 0x86A9, 0xE56F, 0x86AA, 0xE570, 0x86AB, 0xE57A,
- 0x86AF, 0xE574, 0x86B0, 0xE577, 0x86B6, 0xE573, 0x86C4, 0xE575, 0x86C6, 0xE576, 0x86C7, 0x8ED6, 0x86C9, 0xE578, 0x86CB, 0x9260,
- 0x86CD, 0x8C75, 0x86CE, 0x8A61, 0x86D4, 0xE57B, 0x86D9, 0x8A5E, 0x86DB, 0xE581, 0x86DE, 0xE57C, 0x86DF, 0xE580, 0x86E4, 0x94B8,
- 0x86E9, 0xE57D, 0x86EC, 0xE57E, 0x86ED, 0x9567, 0x86EE, 0x94D8, 0x86EF, 0xE582, 0x86F8, 0x91FB, 0x86F9, 0xE58C, 0x86FB, 0xE588,
- 0x86FE, 0x89E9, 0x8700, 0xE586, 0x8702, 0x9649, 0x8703, 0xE587, 0x8706, 0xE584, 0x8708, 0xE585, 0x8709, 0xE58A, 0x870A, 0xE58D,
- 0x870D, 0xE58B, 0x8711, 0xE589, 0x8712, 0xE583, 0x8718, 0x9277, 0x871A, 0xE594, 0x871C, 0x96A8, 0x8725, 0xE592, 0x8729, 0xE593,
- 0x8734, 0xE58E, 0x8737, 0xE590, 0x873B, 0xE591, 0x873F, 0xE58F, 0x8749, 0x90E4, 0x874B, 0x9858, 0x874C, 0xE598, 0x874E, 0xE599,
- 0x8753, 0xE59F, 0x8755, 0x9049, 0x8757, 0xE59B, 0x8759, 0xE59E, 0x875F, 0xE596, 0x8760, 0xE595, 0x8763, 0xE5A0, 0x8766, 0x89DA,
- 0x8768, 0xE59C, 0x876A, 0xE5A1, 0x876E, 0xE59D, 0x8774, 0xE59A, 0x8776, 0x92B1, 0x8778, 0xE597, 0x877F, 0x9488, 0x8782, 0xE5A5,
- 0x878D, 0x975A, 0x879F, 0xE5A4, 0x87A2, 0xE5A3, 0x87AB, 0xE5AC, 0x87AF, 0xE5A6, 0x87B3, 0xE5AE, 0x87BA, 0x9786, 0x87BB, 0xE5B1,
- 0x87BD, 0xE5A8, 0x87C0, 0xE5A9, 0x87C4, 0xE5AD, 0x87C6, 0xE5B0, 0x87C7, 0xE5AF, 0x87CB, 0xE5A7, 0x87D0, 0xE5AA, 0x87D2, 0xE5BB,
- 0x87E0, 0xE5B4, 0x87EF, 0xE5B2, 0x87F2, 0xE5B3, 0x87F6, 0xE5B8, 0x87F7, 0xE5B9, 0x87F9, 0x8A49, 0x87FB, 0x8B61, 0x87FE, 0xE5B7,
- 0x8805, 0xE5A2, 0x8807, 0xFBA1, 0x880D, 0xE5B6, 0x880E, 0xE5BA, 0x880F, 0xE5B5, 0x8811, 0xE5BC, 0x8815, 0xE5BE, 0x8816, 0xE5BD,
- 0x8821, 0xE5C0, 0x8822, 0xE5BF, 0x8823, 0xE579, 0x8827, 0xE5C4, 0x8831, 0xE5C1, 0x8836, 0xE5C2, 0x8839, 0xE5C3, 0x883B, 0xE5C5,
- 0x8840, 0x8C8C, 0x8842, 0xE5C7, 0x8844, 0xE5C6, 0x8846, 0x8F4F, 0x884C, 0x8D73, 0x884D, 0x9FA5, 0x8852, 0xE5C8, 0x8853, 0x8F70,
- 0x8857, 0x8A58, 0x8859, 0xE5C9, 0x885B, 0x8971, 0x885D, 0x8FD5, 0x885E, 0xE5CA, 0x8861, 0x8D74, 0x8862, 0xE5CB, 0x8863, 0x88DF,
- 0x8868, 0x955C, 0x886B, 0xE5CC, 0x8870, 0x908A, 0x8872, 0xE5D3, 0x8875, 0xE5D0, 0x8877, 0x928F, 0x887D, 0xE5D1, 0x887E, 0xE5CE,
- 0x887F, 0x8BDC, 0x8881, 0xE5CD, 0x8882, 0xE5D4, 0x8888, 0x8C55, 0x888B, 0x91DC, 0x888D, 0xE5DA, 0x8892, 0xE5D6, 0x8896, 0x91B3,
- 0x8897, 0xE5D5, 0x8899, 0xE5D8, 0x889E, 0xE5CF, 0x88A2, 0xE5D9, 0x88A4, 0xE5DB, 0x88AB, 0x94ED, 0x88AE, 0xE5D7, 0x88B0, 0xE5DC,
- 0x88B1, 0xE5DE, 0x88B4, 0x8CD1, 0x88B5, 0xE5D2, 0x88B7, 0x88BF, 0x88BF, 0xE5DD, 0x88C1, 0x8DD9, 0x88C2, 0x97F4, 0x88C3, 0xE5DF,
- 0x88C4, 0xE5E0, 0x88C5, 0x9195, 0x88CF, 0x97A0, 0x88D4, 0xE5E1, 0x88D5, 0x9754, 0x88D8, 0xE5E2, 0x88D9, 0xE5E3, 0x88DC, 0x95E2,
- 0x88DD, 0xE5E4, 0x88DF, 0x8DBE, 0x88E1, 0x97A1, 0x88E8, 0xE5E9, 0x88F2, 0xE5EA, 0x88F3, 0x8FD6, 0x88F4, 0xE5E8, 0x88F5, 0xFBA2,
- 0x88F8, 0x9787, 0x88F9, 0xE5E5, 0x88FC, 0xE5E7, 0x88FD, 0x90BB, 0x88FE, 0x909E, 0x8902, 0xE5E6, 0x8904, 0xE5EB, 0x8907, 0x95A1,
- 0x890A, 0xE5ED, 0x890C, 0xE5EC, 0x8910, 0x8A8C, 0x8912, 0x964A, 0x8913, 0xE5EE, 0x891C, 0xFA5D, 0x891D, 0xE5FA, 0x891E, 0xE5F0,
- 0x8925, 0xE5F1, 0x892A, 0xE5F2, 0x892B, 0xE5F3, 0x8936, 0xE5F7, 0x8938, 0xE5F8, 0x893B, 0xE5F6, 0x8941, 0xE5F4, 0x8943, 0xE5EF,
- 0x8944, 0xE5F5, 0x894C, 0xE5F9, 0x894D, 0xE8B5, 0x8956, 0x89A6, 0x895E, 0xE5FC, 0x895F, 0x8BDD, 0x8960, 0xE5FB, 0x8964, 0xE641,
- 0x8966, 0xE640, 0x896A, 0xE643, 0x896D, 0xE642, 0x896F, 0xE644, 0x8972, 0x8F50, 0x8974, 0xE645, 0x8977, 0xE646, 0x897E, 0xE647,
- 0x897F, 0x90BC, 0x8981, 0x9776, 0x8983, 0xE648, 0x8986, 0x95A2, 0x8987, 0x9465, 0x8988, 0xE649, 0x898A, 0xE64A, 0x898B, 0x8CA9,
- 0x898F, 0x8B4B, 0x8993, 0xE64B, 0x8996, 0x8E8B, 0x8997, 0x9460, 0x8998, 0xE64C, 0x899A, 0x8A6F, 0x89A1, 0xE64D, 0x89A6, 0xE64F,
- 0x89A7, 0x9797, 0x89A9, 0xE64E, 0x89AA, 0x9065, 0x89AC, 0xE650, 0x89AF, 0xE651, 0x89B2, 0xE652, 0x89B3, 0x8ACF, 0x89BA, 0xE653,
- 0x89BD, 0xE654, 0x89BF, 0xE655, 0x89C0, 0xE656, 0x89D2, 0x8A70, 0x89DA, 0xE657, 0x89DC, 0xE658, 0x89DD, 0xE659, 0x89E3, 0x89F0,
- 0x89E6, 0x9047, 0x89E7, 0xE65A, 0x89F4, 0xE65B, 0x89F8, 0xE65C, 0x8A00, 0x8CBE, 0x8A02, 0x92F9, 0x8A03, 0xE65D, 0x8A08, 0x8C76,
- 0x8A0A, 0x9075, 0x8A0C, 0xE660, 0x8A0E, 0x93A2, 0x8A10, 0xE65F, 0x8A12, 0xFBA3, 0x8A13, 0x8C50, 0x8A16, 0xE65E, 0x8A17, 0x91F5,
- 0x8A18, 0x8B4C, 0x8A1B, 0xE661, 0x8A1D, 0xE662, 0x8A1F, 0x8FD7, 0x8A23, 0x8C8D, 0x8A25, 0xE663, 0x8A2A, 0x964B, 0x8A2D, 0x90DD,
- 0x8A31, 0x8B96, 0x8A33, 0x96F3, 0x8A34, 0x9169, 0x8A36, 0xE664, 0x8A37, 0xFBA4, 0x8A3A, 0x9066, 0x8A3B, 0x9290, 0x8A3C, 0x8FD8,
- 0x8A41, 0xE665, 0x8A46, 0xE668, 0x8A48, 0xE669, 0x8A50, 0x8DBC, 0x8A51, 0x91C0, 0x8A52, 0xE667, 0x8A54, 0x8FD9, 0x8A55, 0x955D,
- 0x8A5B, 0xE666, 0x8A5E, 0x8E8C, 0x8A60, 0x8972, 0x8A62, 0xE66D, 0x8A63, 0x8C77, 0x8A66, 0x8E8E, 0x8A69, 0x8E8D, 0x8A6B, 0x986C,
- 0x8A6C, 0xE66C, 0x8A6D, 0xE66B, 0x8A6E, 0x9146, 0x8A70, 0x8B6C, 0x8A71, 0x9862, 0x8A72, 0x8A59, 0x8A73, 0x8FDA, 0x8A79, 0xFBA5,
- 0x8A7C, 0xE66A, 0x8A82, 0xE66F, 0x8A84, 0xE670, 0x8A85, 0xE66E, 0x8A87, 0x8CD6, 0x8A89, 0x975F, 0x8A8C, 0x8E8F, 0x8A8D, 0x9446,
- 0x8A91, 0xE673, 0x8A93, 0x90BE, 0x8A95, 0x9261, 0x8A98, 0x9755, 0x8A9A, 0xE676, 0x8A9E, 0x8CEA, 0x8AA0, 0x90BD, 0x8AA1, 0xE672,
- 0x8AA3, 0xE677, 0x8AA4, 0x8CEB, 0x8AA5, 0xE674, 0x8AA6, 0xE675, 0x8AA7, 0xFBA6, 0x8AA8, 0xE671, 0x8AAC, 0x90E0, 0x8AAD, 0x93C7,
- 0x8AB0, 0x924E, 0x8AB2, 0x89DB, 0x8AB9, 0x94EE, 0x8ABC, 0x8B62, 0x8ABE, 0xFBA7, 0x8ABF, 0x92B2, 0x8AC2, 0xE67A, 0x8AC4, 0xE678,
- 0x8AC7, 0x926B, 0x8ACB, 0x90BF, 0x8ACC, 0x8AD0, 0x8ACD, 0xE679, 0x8ACF, 0x907A, 0x8AD2, 0x97C8, 0x8AD6, 0x985F, 0x8ADA, 0xE67B,
- 0x8ADB, 0xE687, 0x8ADC, 0x92B3, 0x8ADE, 0xE686, 0x8ADF, 0xFBA8, 0x8AE0, 0xE683, 0x8AE1, 0xE68B, 0x8AE2, 0xE684, 0x8AE4, 0xE680,
- 0x8AE6, 0x92FA, 0x8AE7, 0xE67E, 0x8AEB, 0xE67C, 0x8AED, 0x9740, 0x8AEE, 0x8E90, 0x8AF1, 0xE681, 0x8AF3, 0xE67D, 0x8AF6, 0xFBAA,
- 0x8AF7, 0xE685, 0x8AF8, 0x8F94, 0x8AFA, 0x8CBF, 0x8AFE, 0x91F8, 0x8B00, 0x9664, 0x8B01, 0x8979, 0x8B02, 0x88E0, 0x8B04, 0x93A3,
- 0x8B07, 0xE689, 0x8B0C, 0xE688, 0x8B0E, 0x93E4, 0x8B10, 0xE68D, 0x8B14, 0xE682, 0x8B16, 0xE68C, 0x8B17, 0xE68E, 0x8B19, 0x8CAA,
- 0x8B1A, 0xE68A, 0x8B1B, 0x8D75, 0x8B1D, 0x8ED3, 0x8B20, 0xE68F, 0x8B21, 0x9777, 0x8B26, 0xE692, 0x8B28, 0xE695, 0x8B2B, 0xE693,
- 0x8B2C, 0x9554, 0x8B33, 0xE690, 0x8B39, 0x8BDE, 0x8B3E, 0xE694, 0x8B41, 0xE696, 0x8B49, 0xE69A, 0x8B4C, 0xE697, 0x8B4E, 0xE699,
- 0x8B4F, 0xE698, 0x8B53, 0xFBAB, 0x8B56, 0xE69B, 0x8B58, 0x8EAF, 0x8B5A, 0xE69D, 0x8B5B, 0xE69C, 0x8B5C, 0x9588, 0x8B5F, 0xE69F,
- 0x8B66, 0x8C78, 0x8B6B, 0xE69E, 0x8B6C, 0xE6A0, 0x8B6F, 0xE6A1, 0x8B70, 0x8B63, 0x8B71, 0xE3BF, 0x8B72, 0x8FF7, 0x8B74, 0xE6A2,
- 0x8B77, 0x8CEC, 0x8B7D, 0xE6A3, 0x8B7F, 0xFBAC, 0x8B80, 0xE6A4, 0x8B83, 0x8E5D, 0x8B8A, 0x9DCC, 0x8B8C, 0xE6A5, 0x8B8E, 0xE6A6,
- 0x8B90, 0x8F51, 0x8B92, 0xE6A7, 0x8B93, 0xE6A8, 0x8B96, 0xE6A9, 0x8B99, 0xE6AA, 0x8B9A, 0xE6AB, 0x8C37, 0x924A, 0x8C3A, 0xE6AC,
- 0x8C3F, 0xE6AE, 0x8C41, 0xE6AD, 0x8C46, 0x93A4, 0x8C48, 0xE6AF, 0x8C4A, 0x964C, 0x8C4C, 0xE6B0, 0x8C4E, 0xE6B1, 0x8C50, 0xE6B2,
- 0x8C55, 0xE6B3, 0x8C5A, 0x93D8, 0x8C61, 0x8FDB, 0x8C62, 0xE6B4, 0x8C6A, 0x8D8B, 0x8C6B, 0x98AC, 0x8C6C, 0xE6B5, 0x8C78, 0xE6B6,
- 0x8C79, 0x955E, 0x8C7A, 0xE6B7, 0x8C7C, 0xE6BF, 0x8C82, 0xE6B8, 0x8C85, 0xE6BA, 0x8C89, 0xE6B9, 0x8C8A, 0xE6BB, 0x8C8C, 0x9665,
- 0x8C8D, 0xE6BC, 0x8C8E, 0xE6BD, 0x8C94, 0xE6BE, 0x8C98, 0xE6C0, 0x8C9D, 0x8A4C, 0x8C9E, 0x92E5, 0x8CA0, 0x9589, 0x8CA1, 0x8DE0,
- 0x8CA2, 0x8D76, 0x8CA7, 0x956E, 0x8CA8, 0x89DD, 0x8CA9, 0x94CC, 0x8CAA, 0xE6C3, 0x8CAB, 0x8AD1, 0x8CAC, 0x90D3, 0x8CAD, 0xE6C2,
- 0x8CAE, 0xE6C7, 0x8CAF, 0x9299, 0x8CB0, 0x96E1, 0x8CB2, 0xE6C5, 0x8CB3, 0xE6C6, 0x8CB4, 0x8B4D, 0x8CB6, 0xE6C8, 0x8CB7, 0x9483,
- 0x8CB8, 0x91DD, 0x8CBB, 0x94EF, 0x8CBC, 0x935C, 0x8CBD, 0xE6C4, 0x8CBF, 0x9666, 0x8CC0, 0x89EA, 0x8CC1, 0xE6CA, 0x8CC2, 0x9847,
- 0x8CC3, 0x92C0, 0x8CC4, 0x9864, 0x8CC7, 0x8E91, 0x8CC8, 0xE6C9, 0x8CCA, 0x91AF, 0x8CCD, 0xE6DA, 0x8CCE, 0x9147, 0x8CD1, 0x93F6,
- 0x8CD3, 0x956F, 0x8CDA, 0xE6CD, 0x8CDB, 0x8E5E, 0x8CDC, 0x8E92, 0x8CDE, 0x8FDC, 0x8CE0, 0x9485, 0x8CE2, 0x8CAB, 0x8CE3, 0xE6CC,
- 0x8CE4, 0xE6CB, 0x8CE6, 0x958A, 0x8CEA, 0x8EBF, 0x8CED, 0x9371, 0x8CF0, 0xFBAD, 0x8CF4, 0xFBAE, 0x8CFA, 0xE6CF, 0x8CFB, 0xE6D0,
- 0x8CFC, 0x8D77, 0x8CFD, 0xE6CE, 0x8D04, 0xE6D1, 0x8D05, 0xE6D2, 0x8D07, 0xE6D4, 0x8D08, 0x91A1, 0x8D0A, 0xE6D3, 0x8D0B, 0x8AE4,
- 0x8D0D, 0xE6D6, 0x8D0F, 0xE6D5, 0x8D10, 0xE6D7, 0x8D12, 0xFBAF, 0x8D13, 0xE6D9, 0x8D14, 0xE6DB, 0x8D16, 0xE6DC, 0x8D64, 0x90D4,
- 0x8D66, 0x8ECD, 0x8D67, 0xE6DD, 0x8D6B, 0x8A71, 0x8D6D, 0xE6DE, 0x8D70, 0x9196, 0x8D71, 0xE6DF, 0x8D73, 0xE6E0, 0x8D74, 0x958B,
- 0x8D76, 0xFBB0, 0x8D77, 0x8B4E, 0x8D81, 0xE6E1, 0x8D85, 0x92B4, 0x8D8A, 0x897A, 0x8D99, 0xE6E2, 0x8DA3, 0x8EEF, 0x8DA8, 0x9096,
- 0x8DB3, 0x91AB, 0x8DBA, 0xE6E5, 0x8DBE, 0xE6E4, 0x8DC2, 0xE6E3, 0x8DCB, 0xE6EB, 0x8DCC, 0xE6E9, 0x8DCF, 0xE6E6, 0x8DD6, 0xE6E8,
- 0x8DDA, 0xE6E7, 0x8DDB, 0xE6EA, 0x8DDD, 0x8B97, 0x8DDF, 0xE6EE, 0x8DE1, 0x90D5, 0x8DE3, 0xE6EF, 0x8DE8, 0x8CD7, 0x8DEA, 0xE6EC,
- 0x8DEB, 0xE6ED, 0x8DEF, 0x9848, 0x8DF3, 0x92B5, 0x8DF5, 0x9148, 0x8DFC, 0xE6F0, 0x8DFF, 0xE6F3, 0x8E08, 0xE6F1, 0x8E09, 0xE6F2,
- 0x8E0A, 0x9778, 0x8E0F, 0x93A5, 0x8E10, 0xE6F6, 0x8E1D, 0xE6F4, 0x8E1E, 0xE6F5, 0x8E1F, 0xE6F7, 0x8E2A, 0xE748, 0x8E30, 0xE6FA,
- 0x8E34, 0xE6FB, 0x8E35, 0xE6F9, 0x8E42, 0xE6F8, 0x8E44, 0x92FB, 0x8E47, 0xE740, 0x8E48, 0xE744, 0x8E49, 0xE741, 0x8E4A, 0xE6FC,
- 0x8E4C, 0xE742, 0x8E50, 0xE743, 0x8E55, 0xE74A, 0x8E59, 0xE745, 0x8E5F, 0x90D6, 0x8E60, 0xE747, 0x8E63, 0xE749, 0x8E64, 0xE746,
- 0x8E72, 0xE74C, 0x8E74, 0x8F52, 0x8E76, 0xE74B, 0x8E7C, 0xE74D, 0x8E81, 0xE74E, 0x8E84, 0xE751, 0x8E85, 0xE750, 0x8E87, 0xE74F,
- 0x8E8A, 0xE753, 0x8E8B, 0xE752, 0x8E8D, 0x96F4, 0x8E91, 0xE755, 0x8E93, 0xE754, 0x8E94, 0xE756, 0x8E99, 0xE757, 0x8EA1, 0xE759,
- 0x8EAA, 0xE758, 0x8EAB, 0x9067, 0x8EAC, 0xE75A, 0x8EAF, 0x8BEB, 0x8EB0, 0xE75B, 0x8EB1, 0xE75D, 0x8EBE, 0xE75E, 0x8EC5, 0xE75F,
- 0x8EC6, 0xE75C, 0x8EC8, 0xE760, 0x8ECA, 0x8ED4, 0x8ECB, 0xE761, 0x8ECC, 0x8B4F, 0x8ECD, 0x8C52, 0x8ECF, 0xFBB2, 0x8ED2, 0x8CAC,
- 0x8EDB, 0xE762, 0x8EDF, 0x93EE, 0x8EE2, 0x935D, 0x8EE3, 0xE763, 0x8EEB, 0xE766, 0x8EF8, 0x8EB2, 0x8EFB, 0xE765, 0x8EFC, 0xE764,
- 0x8EFD, 0x8C79, 0x8EFE, 0xE767, 0x8F03, 0x8A72, 0x8F05, 0xE769, 0x8F09, 0x8DDA, 0x8F0A, 0xE768, 0x8F0C, 0xE771, 0x8F12, 0xE76B,
- 0x8F13, 0xE76D, 0x8F14, 0x95E3, 0x8F15, 0xE76A, 0x8F19, 0xE76C, 0x8F1B, 0xE770, 0x8F1C, 0xE76E, 0x8F1D, 0x8B50, 0x8F1F, 0xE76F,
- 0x8F26, 0xE772, 0x8F29, 0x9479, 0x8F2A, 0x97D6, 0x8F2F, 0x8F53, 0x8F33, 0xE773, 0x8F38, 0x9741, 0x8F39, 0xE775, 0x8F3B, 0xE774,
- 0x8F3E, 0xE778, 0x8F3F, 0x9760, 0x8F42, 0xE777, 0x8F44, 0x8A8D, 0x8F45, 0xE776, 0x8F46, 0xE77B, 0x8F49, 0xE77A, 0x8F4C, 0xE779,
- 0x8F4D, 0x9351, 0x8F4E, 0xE77C, 0x8F57, 0xE77D, 0x8F5C, 0xE77E, 0x8F5F, 0x8D8C, 0x8F61, 0x8C44, 0x8F62, 0xE780, 0x8F63, 0xE781,
- 0x8F64, 0xE782, 0x8F9B, 0x9068, 0x8F9C, 0xE783, 0x8F9E, 0x8EAB, 0x8F9F, 0xE784, 0x8FA3, 0xE785, 0x8FA7, 0x999F, 0x8FA8, 0x999E,
- 0x8FAD, 0xE786, 0x8FAE, 0xE390, 0x8FAF, 0xE787, 0x8FB0, 0x9243, 0x8FB1, 0x904A, 0x8FB2, 0x945F, 0x8FB7, 0xE788, 0x8FBA, 0x95D3,
- 0x8FBB, 0x92D2, 0x8FBC, 0x8D9E, 0x8FBF, 0x9248, 0x8FC2, 0x8949, 0x8FC4, 0x9698, 0x8FC5, 0x9076, 0x8FCE, 0x8C7D, 0x8FD1, 0x8BDF,
- 0x8FD4, 0x95D4, 0x8FDA, 0xE789, 0x8FE2, 0xE78B, 0x8FE5, 0xE78A, 0x8FE6, 0x89DE, 0x8FE9, 0x93F4, 0x8FEA, 0xE78C, 0x8FEB, 0x9497,
- 0x8FED, 0x9352, 0x8FEF, 0xE78D, 0x8FF0, 0x8F71, 0x8FF4, 0xE78F, 0x8FF7, 0x96C0, 0x8FF8, 0xE79E, 0x8FF9, 0xE791, 0x8FFA, 0xE792,
- 0x8FFD, 0x92C7, 0x9000, 0x91DE, 0x9001, 0x9197, 0x9003, 0x93A6, 0x9005, 0xE790, 0x9006, 0x8B74, 0x900B, 0xE799, 0x900D, 0xE796,
- 0x900E, 0xE7A3, 0x900F, 0x93A7, 0x9010, 0x9280, 0x9011, 0xE793, 0x9013, 0x92FC, 0x9014, 0x9372, 0x9015, 0xE794, 0x9016, 0xE798,
- 0x9017, 0x9080, 0x9019, 0x9487, 0x901A, 0x92CA, 0x901D, 0x90C0, 0x901E, 0xE797, 0x901F, 0x91AC, 0x9020, 0x91A2, 0x9021, 0xE795,
- 0x9022, 0x88A7, 0x9023, 0x9841, 0x9027, 0xE79A, 0x902E, 0x91DF, 0x9031, 0x8F54, 0x9032, 0x9069, 0x9035, 0xE79C, 0x9036, 0xE79B,
- 0x9038, 0x88ED, 0x9039, 0xE79D, 0x903C, 0x954E, 0x903E, 0xE7A5, 0x9041, 0x93D9, 0x9042, 0x908B, 0x9045, 0x9278, 0x9047, 0x8BF6,
- 0x9049, 0xE7A4, 0x904A, 0x9756, 0x904B, 0x895E, 0x904D, 0x95D5, 0x904E, 0x89DF, 0x904F, 0xE79F, 0x9050, 0xE7A0, 0x9051, 0xE7A1,
- 0x9052, 0xE7A2, 0x9053, 0x93B9, 0x9054, 0x9242, 0x9055, 0x88E1, 0x9056, 0xE7A6, 0x9058, 0xE7A7, 0x9059, 0xEAA1, 0x905C, 0x91BB,
- 0x905E, 0xE7A8, 0x9060, 0x8993, 0x9061, 0x916B, 0x9063, 0x8CAD, 0x9065, 0x9779, 0x9067, 0xFBB5, 0x9068, 0xE7A9, 0x9069, 0x934B,
- 0x906D, 0x9198, 0x906E, 0x8ED5, 0x906F, 0xE7AA, 0x9072, 0xE7AD, 0x9075, 0x8F85, 0x9076, 0xE7AB, 0x9077, 0x914A, 0x9078, 0x9149,
- 0x907A, 0x88E2, 0x907C, 0x97C9, 0x907D, 0xE7AF, 0x907F, 0x94F0, 0x9080, 0xE7B1, 0x9081, 0xE7B0, 0x9082, 0xE7AE, 0x9083, 0xE284,
- 0x9084, 0x8AD2, 0x9087, 0xE78E, 0x9089, 0xE7B3, 0x908A, 0xE7B2, 0x908F, 0xE7B4, 0x9091, 0x9757, 0x90A3, 0x93DF, 0x90A6, 0x964D,
- 0x90A8, 0xE7B5, 0x90AA, 0x8ED7, 0x90AF, 0xE7B6, 0x90B1, 0xE7B7, 0x90B5, 0xE7B8, 0x90B8, 0x9340, 0x90C1, 0x88E8, 0x90CA, 0x8D78,
- 0x90CE, 0x9859, 0x90DB, 0xE7BC, 0x90DE, 0xFBB6, 0x90E1, 0x8C53, 0x90E2, 0xE7B9, 0x90E4, 0xE7BA, 0x90E8, 0x9594, 0x90ED, 0x8A73,
- 0x90F5, 0x9758, 0x90F7, 0x8BBD, 0x90FD, 0x9373, 0x9102, 0xE7BD, 0x9112, 0xE7BE, 0x9115, 0xFBB8, 0x9119, 0xE7BF, 0x9127, 0xFBB9,
- 0x912D, 0x9341, 0x9130, 0xE7C1, 0x9132, 0xE7C0, 0x9149, 0x93D1, 0x914A, 0xE7C2, 0x914B, 0x8F55, 0x914C, 0x8EDE, 0x914D, 0x947A,
- 0x914E, 0x9291, 0x9152, 0x8EF0, 0x9154, 0x908C, 0x9156, 0xE7C3, 0x9158, 0xE7C4, 0x9162, 0x907C, 0x9163, 0xE7C5, 0x9165, 0xE7C6,
- 0x9169, 0xE7C7, 0x916A, 0x978F, 0x916C, 0x8F56, 0x9172, 0xE7C9, 0x9173, 0xE7C8, 0x9175, 0x8D79, 0x9177, 0x8D93, 0x9178, 0x8E5F,
- 0x9182, 0xE7CC, 0x9187, 0x8F86, 0x9189, 0xE7CB, 0x918B, 0xE7CA, 0x918D, 0x91E7, 0x9190, 0x8CED, 0x9192, 0x90C1, 0x9197, 0x94AE,
- 0x919C, 0x8F58, 0x91A2, 0xE7CD, 0x91A4, 0x8FDD, 0x91AA, 0xE7D0, 0x91AB, 0xE7CE, 0x91AF, 0xE7CF, 0x91B4, 0xE7D2, 0x91B5, 0xE7D1,
- 0x91B8, 0x8FF8, 0x91BA, 0xE7D3, 0x91C0, 0xE7D4, 0x91C1, 0xE7D5, 0x91C6, 0x94CE, 0x91C7, 0x8DD1, 0x91C8, 0x8EDF, 0x91C9, 0xE7D6,
- 0x91CB, 0xE7D7, 0x91CC, 0x97A2, 0x91CD, 0x8F64, 0x91CE, 0x96EC, 0x91CF, 0x97CA, 0x91D0, 0xE7D8, 0x91D1, 0x8BE0, 0x91D6, 0xE7D9,
- 0x91D7, 0xFBBB, 0x91D8, 0x9342, 0x91DA, 0xFBBA, 0x91DB, 0xE7DC, 0x91DC, 0x8A98, 0x91DD, 0x906A, 0x91DE, 0xFBBC, 0x91DF, 0xE7DA,
- 0x91E1, 0xE7DB, 0x91E3, 0x92DE, 0x91E4, 0xFBBF, 0x91E5, 0xFBC0, 0x91E6, 0x9674, 0x91E7, 0x8BFA, 0x91ED, 0xFBBD, 0x91EE, 0xFBBE,
- 0x91F5, 0xE7DE, 0x91F6, 0xE7DF, 0x91FC, 0xE7DD, 0x91FF, 0xE7E1, 0x9206, 0xFBC1, 0x920A, 0xFBC3, 0x920D, 0x93DD, 0x920E, 0x8A62,
- 0x9210, 0xFBC2, 0x9211, 0xE7E5, 0x9214, 0xE7E2, 0x9215, 0xE7E4, 0x921E, 0xE7E0, 0x9229, 0xE86E, 0x922C, 0xE7E3, 0x9234, 0x97E9,
- 0x9237, 0x8CD8, 0x9239, 0xFBCA, 0x923A, 0xFBC4, 0x923C, 0xFBC6, 0x923F, 0xE7ED, 0x9240, 0xFBC5, 0x9244, 0x9353, 0x9245, 0xE7E8,
- 0x9248, 0xE7EB, 0x9249, 0xE7E9, 0x924B, 0xE7EE, 0x924E, 0xFBC7, 0x9250, 0xE7EF, 0x9251, 0xFBC9, 0x9257, 0xE7E7, 0x9259, 0xFBC8,
- 0x925A, 0xE7F4, 0x925B, 0x8994, 0x925E, 0xE7E6, 0x9262, 0x94AB, 0x9264, 0xE7EA, 0x9266, 0x8FDE, 0x9267, 0xFBCB, 0x9271, 0x8D7A,
- 0x9277, 0xFBCD, 0x9278, 0xFBCE, 0x927E, 0x9667, 0x9280, 0x8BE2, 0x9283, 0x8F65, 0x9285, 0x93BA, 0x9288, 0xFA5F, 0x9291, 0x914C,
- 0x9293, 0xE7F2, 0x9295, 0xE7EC, 0x9296, 0xE7F1, 0x9298, 0x96C1, 0x929A, 0x92B6, 0x929B, 0xE7F3, 0x929C, 0xE7F0, 0x92A7, 0xFBCC,
- 0x92AD, 0x914B, 0x92B7, 0xE7F7, 0x92B9, 0xE7F6, 0x92CF, 0xE7F5, 0x92D0, 0xFBD2, 0x92D2, 0x964E, 0x92D3, 0xFBD6, 0x92D5, 0xFBD4,
- 0x92D7, 0xFBD0, 0x92D9, 0xFBD1, 0x92E0, 0xFBD5, 0x92E4, 0x8F9B, 0x92E7, 0xFBCF, 0x92E9, 0xE7F8, 0x92EA, 0x95DD, 0x92ED, 0x8973,
- 0x92F2, 0x9565, 0x92F3, 0x9292, 0x92F8, 0x8B98, 0x92F9, 0xFA65, 0x92FA, 0xE7FA, 0x92FB, 0xFBD9, 0x92FC, 0x8D7C, 0x92FF, 0xFBDC,
- 0x9302, 0xFBDE, 0x9306, 0x8E4B, 0x930F, 0xE7F9, 0x9310, 0x908D, 0x9318, 0x908E, 0x9319, 0xE840, 0x931A, 0xE842, 0x931D, 0xFBDD,
- 0x931E, 0xFBDB, 0x9320, 0x8FF9, 0x9321, 0xFBD8, 0x9322, 0xE841, 0x9323, 0xE843, 0x9325, 0xFBD7, 0x9326, 0x8BD1, 0x9328, 0x9564,
- 0x932B, 0x8EE0, 0x932C, 0x9842, 0x932E, 0xE7FC, 0x932F, 0x8DF6, 0x9332, 0x985E, 0x9335, 0xE845, 0x933A, 0xE844, 0x933B, 0xE846,
- 0x9344, 0xE7FB, 0x9348, 0xFA5E, 0x934B, 0x93E7, 0x934D, 0x9374, 0x9354, 0x92D5, 0x9356, 0xE84B, 0x9357, 0xFBE0, 0x935B, 0x9262,
- 0x935C, 0xE847, 0x9360, 0xE848, 0x936C, 0x8C4C, 0x936E, 0xE84A, 0x9370, 0xFBDF, 0x9375, 0x8CAE, 0x937C, 0xE849, 0x937E, 0x8FDF,
- 0x938C, 0x8A99, 0x9394, 0xE84F, 0x9396, 0x8DBD, 0x9397, 0x9199, 0x939A, 0x92C8, 0x93A4, 0xFBE1, 0x93A7, 0x8A5A, 0x93AC, 0xE84D,
- 0x93AD, 0xE84E, 0x93AE, 0x92C1, 0x93B0, 0xE84C, 0x93B9, 0xE850, 0x93C3, 0xE856, 0x93C6, 0xFBE2, 0x93C8, 0xE859, 0x93D0, 0xE858,
- 0x93D1, 0x934C, 0x93D6, 0xE851, 0x93D7, 0xE852, 0x93D8, 0xE855, 0x93DD, 0xE857, 0x93DE, 0xFBE3, 0x93E1, 0x8BBE, 0x93E4, 0xE85A,
- 0x93E5, 0xE854, 0x93E8, 0xE853, 0x93F8, 0xFBE4, 0x9403, 0xE85E, 0x9407, 0xE85F, 0x9410, 0xE860, 0x9413, 0xE85D, 0x9414, 0xE85C,
- 0x9418, 0x8FE0, 0x9419, 0x93A8, 0x941A, 0xE85B, 0x9421, 0xE864, 0x942B, 0xE862, 0x9431, 0xFBE5, 0x9435, 0xE863, 0x9436, 0xE861,
- 0x9438, 0x91F6, 0x943A, 0xE865, 0x9441, 0xE866, 0x9444, 0xE868, 0x9445, 0xFBE6, 0x9448, 0xFBE7, 0x9451, 0x8AD3, 0x9452, 0xE867,
- 0x9453, 0x96F8, 0x945A, 0xE873, 0x945B, 0xE869, 0x945E, 0xE86C, 0x9460, 0xE86A, 0x9462, 0xE86B, 0x946A, 0xE86D, 0x9470, 0xE86F,
- 0x9475, 0xE870, 0x9477, 0xE871, 0x947C, 0xE874, 0x947D, 0xE872, 0x947E, 0xE875, 0x947F, 0xE877, 0x9481, 0xE876, 0x9577, 0x92B7,
- 0x9580, 0x96E5, 0x9582, 0xE878, 0x9583, 0x914D, 0x9587, 0xE879, 0x9589, 0x95C2, 0x958A, 0xE87A, 0x958B, 0x8A4A, 0x958F, 0x895B,
- 0x9591, 0x8AD5, 0x9592, 0xFBE8, 0x9593, 0x8AD4, 0x9594, 0xE87B, 0x9596, 0xE87C, 0x9598, 0xE87D, 0x9599, 0xE87E, 0x95A0, 0xE880,
- 0x95A2, 0x8AD6, 0x95A3, 0x8A74, 0x95A4, 0x8D7D, 0x95A5, 0x94B4, 0x95A7, 0xE882, 0x95A8, 0xE881, 0x95AD, 0xE883, 0x95B2, 0x897B,
- 0x95B9, 0xE886, 0x95BB, 0xE885, 0x95BC, 0xE884, 0x95BE, 0xE887, 0x95C3, 0xE88A, 0x95C7, 0x88C5, 0x95CA, 0xE888, 0x95CC, 0xE88C,
- 0x95CD, 0xE88B, 0x95D4, 0xE88E, 0x95D5, 0xE88D, 0x95D6, 0xE88F, 0x95D8, 0x93AC, 0x95DC, 0xE890, 0x95E1, 0xE891, 0x95E2, 0xE893,
- 0x95E5, 0xE892, 0x961C, 0x958C, 0x9621, 0xE894, 0x9628, 0xE895, 0x962A, 0x8DE3, 0x962E, 0xE896, 0x962F, 0xE897, 0x9632, 0x9668,
- 0x963B, 0x916A, 0x963F, 0x88A2, 0x9640, 0x91C9, 0x9642, 0xE898, 0x9644, 0x958D, 0x964B, 0xE89B, 0x964C, 0xE899, 0x964D, 0x8D7E,
- 0x964F, 0xE89A, 0x9650, 0x8CC0, 0x965B, 0x95C3, 0x965C, 0xE89D, 0x965D, 0xE89F, 0x965E, 0xE89E, 0x965F, 0xE8A0, 0x9662, 0x8940,
- 0x9663, 0x9077, 0x9664, 0x8F9C, 0x9665, 0x8AD7, 0x9666, 0xE8A1, 0x966A, 0x9486, 0x966C, 0xE8A3, 0x9670, 0x8941, 0x9672, 0xE8A2,
- 0x9673, 0x92C2, 0x9675, 0x97CB, 0x9676, 0x93A9, 0x9677, 0xE89C, 0x9678, 0x97A4, 0x967A, 0x8CAF, 0x967D, 0x977A, 0x9685, 0x8BF7,
- 0x9686, 0x97B2, 0x9688, 0x8C47, 0x968A, 0x91E0, 0x968B, 0xE440, 0x968D, 0xE8A4, 0x968E, 0x8A4B, 0x968F, 0x908F, 0x9694, 0x8A75,
- 0x9695, 0xE8A6, 0x9697, 0xE8A7, 0x9698, 0xE8A5, 0x9699, 0x8C84, 0x969B, 0x8DDB, 0x969C, 0x8FE1, 0x969D, 0xFBEB, 0x96A0, 0x8942,
- 0x96A3, 0x97D7, 0x96A7, 0xE8A9, 0x96A8, 0xE7AC, 0x96AA, 0xE8A8, 0x96AF, 0xFBEC, 0x96B0, 0xE8AC, 0x96B1, 0xE8AA, 0x96B2, 0xE8AB,
- 0x96B4, 0xE8AD, 0x96B6, 0xE8AE, 0x96B7, 0x97EA, 0x96B8, 0xE8AF, 0x96B9, 0xE8B0, 0x96BB, 0x90C7, 0x96BC, 0x94B9, 0x96C0, 0x909D,
- 0x96C1, 0x8AE5, 0x96C4, 0x9759, 0x96C5, 0x89EB, 0x96C6, 0x8F57, 0x96C7, 0x8CD9, 0x96C9, 0xE8B3, 0x96CB, 0xE8B2, 0x96CC, 0x8E93,
- 0x96CD, 0xE8B4, 0x96CE, 0xE8B1, 0x96D1, 0x8E47, 0x96D5, 0xE8B8, 0x96D6, 0xE5AB, 0x96D9, 0x99D4, 0x96DB, 0x9097, 0x96DC, 0xE8B6,
- 0x96E2, 0x97A3, 0x96E3, 0x93EF, 0x96E8, 0x894A, 0x96EA, 0x90E1, 0x96EB, 0x8EB4, 0x96F0, 0x95B5, 0x96F2, 0x895F, 0x96F6, 0x97EB,
- 0x96F7, 0x978B, 0x96F9, 0xE8B9, 0x96FB, 0x9364, 0x9700, 0x8EF9, 0x9704, 0xE8BA, 0x9706, 0xE8BB, 0x9707, 0x906B, 0x9708, 0xE8BC,
- 0x970A, 0x97EC, 0x970D, 0xE8B7, 0x970E, 0xE8BE, 0x970F, 0xE8C0, 0x9711, 0xE8BF, 0x9713, 0xE8BD, 0x9716, 0xE8C1, 0x9719, 0xE8C2,
- 0x971C, 0x919A, 0x971E, 0x89E0, 0x9724, 0xE8C3, 0x9727, 0x96B6, 0x972A, 0xE8C4, 0x9730, 0xE8C5, 0x9732, 0x9849, 0x9733, 0xFBED,
- 0x9738, 0x9E50, 0x9739, 0xE8C6, 0x973B, 0xFBEE, 0x973D, 0xE8C7, 0x973E, 0xE8C8, 0x9742, 0xE8CC, 0x9743, 0xFBEF, 0x9744, 0xE8C9,
- 0x9746, 0xE8CA, 0x9748, 0xE8CB, 0x9749, 0xE8CD, 0x974D, 0xFBF0, 0x974F, 0xFBF1, 0x9751, 0xFBF2, 0x9752, 0x90C2, 0x9755, 0xFBF3,
- 0x9756, 0x96F5, 0x9759, 0x90C3, 0x975C, 0xE8CE, 0x975E, 0x94F1, 0x9760, 0xE8CF, 0x9761, 0xEA72, 0x9762, 0x96CA, 0x9764, 0xE8D0,
- 0x9766, 0xE8D1, 0x9768, 0xE8D2, 0x9769, 0x8A76, 0x976B, 0xE8D4, 0x976D, 0x9078, 0x9771, 0xE8D5, 0x9774, 0x8C43, 0x9779, 0xE8D6,
- 0x977A, 0xE8DA, 0x977C, 0xE8D8, 0x9781, 0xE8D9, 0x9784, 0x8A93, 0x9785, 0xE8D7, 0x9786, 0xE8DB, 0x978B, 0xE8DC, 0x978D, 0x88C6,
- 0x978F, 0xE8DD, 0x9790, 0xE8DE, 0x9798, 0x8FE2, 0x979C, 0xE8DF, 0x97A0, 0x8B66, 0x97A3, 0xE8E2, 0x97A6, 0xE8E1, 0x97A8, 0xE8E0,
- 0x97AB, 0xE691, 0x97AD, 0x95DA, 0x97B3, 0xE8E3, 0x97B4, 0xE8E4, 0x97C3, 0xE8E5, 0x97C6, 0xE8E6, 0x97C8, 0xE8E7, 0x97CB, 0xE8E8,
- 0x97D3, 0x8AD8, 0x97DC, 0xE8E9, 0x97ED, 0xE8EA, 0x97EE, 0x9442, 0x97F2, 0xE8EC, 0x97F3, 0x89B9, 0x97F5, 0xE8EF, 0x97F6, 0xE8EE,
- 0x97FB, 0x8943, 0x97FF, 0x8BBF, 0x9801, 0x95C5, 0x9802, 0x92B8, 0x9803, 0x8DA0, 0x9805, 0x8D80, 0x9806, 0x8F87, 0x9808, 0x907B,
- 0x980C, 0xE8F1, 0x980F, 0xE8F0, 0x9810, 0x9761, 0x9811, 0x8AE6, 0x9812, 0x94D0, 0x9813, 0x93DA, 0x9817, 0x909C, 0x9818, 0x97CC,
- 0x981A, 0x8C7A, 0x9821, 0xE8F4, 0x9824, 0xE8F3, 0x982C, 0x966A, 0x982D, 0x93AA, 0x9834, 0x896F, 0x9837, 0xE8F5, 0x9838, 0xE8F2,
- 0x983B, 0x9570, 0x983C, 0x978A, 0x983D, 0xE8F6, 0x9846, 0xE8F7, 0x984B, 0xE8F9, 0x984C, 0x91E8, 0x984D, 0x8A7A, 0x984E, 0x8A7B,
- 0x984F, 0xE8F8, 0x9854, 0x8AE7, 0x9855, 0x8CB0, 0x9857, 0xFBF4, 0x9858, 0x8AE8, 0x985B, 0x935E, 0x985E, 0x97DE, 0x9865, 0xFBF5,
- 0x9867, 0x8CDA, 0x986B, 0xE8FA, 0x986F, 0xE8FB, 0x9870, 0xE8FC, 0x9871, 0xE940, 0x9873, 0xE942, 0x9874, 0xE941, 0x98A8, 0x9597,
- 0x98AA, 0xE943, 0x98AF, 0xE944, 0x98B1, 0xE945, 0x98B6, 0xE946, 0x98C3, 0xE948, 0x98C4, 0xE947, 0x98C6, 0xE949, 0x98DB, 0x94F2,
- 0x98DC, 0xE3CA, 0x98DF, 0x9048, 0x98E2, 0x8B51, 0x98E9, 0xE94A, 0x98EB, 0xE94B, 0x98ED, 0x99AA, 0x98EE, 0x9F5A, 0x98EF, 0x94D1,
- 0x98F2, 0x88F9, 0x98F4, 0x88B9, 0x98FC, 0x8E94, 0x98FD, 0x964F, 0x98FE, 0x8FFC, 0x9903, 0xE94C, 0x9905, 0x96DD, 0x9909, 0xE94D,
- 0x990A, 0x977B, 0x990C, 0x8961, 0x9910, 0x8E60, 0x9912, 0xE94E, 0x9913, 0x89EC, 0x9914, 0xE94F, 0x9918, 0xE950, 0x991D, 0xE952,
- 0x991E, 0xE953, 0x9920, 0xE955, 0x9921, 0xE951, 0x9924, 0xE954, 0x9927, 0xFBF8, 0x9928, 0x8AD9, 0x992C, 0xE956, 0x992E, 0xE957,
- 0x993D, 0xE958, 0x993E, 0xE959, 0x9942, 0xE95A, 0x9945, 0xE95C, 0x9949, 0xE95B, 0x994B, 0xE95E, 0x994C, 0xE961, 0x9950, 0xE95D,
- 0x9951, 0xE95F, 0x9952, 0xE960, 0x9955, 0xE962, 0x9957, 0x8BC0, 0x9996, 0x8EF1, 0x9997, 0xE963, 0x9998, 0xE964, 0x9999, 0x8D81,
- 0x999E, 0xFBFA, 0x99A5, 0xE965, 0x99A8, 0x8A5D, 0x99AC, 0x946E, 0x99AD, 0xE966, 0x99AE, 0xE967, 0x99B3, 0x9279, 0x99B4, 0x93E9,
- 0x99BC, 0xE968, 0x99C1, 0x949D, 0x99C4, 0x91CA, 0x99C5, 0x8977, 0x99C6, 0x8BEC, 0x99C8, 0x8BED, 0x99D0, 0x9293, 0x99D1, 0xE96D,
- 0x99D2, 0x8BEE, 0x99D5, 0x89ED, 0x99D8, 0xE96C, 0x99DB, 0xE96A, 0x99DD, 0xE96B, 0x99DF, 0xE969, 0x99E2, 0xE977, 0x99ED, 0xE96E,
- 0x99EE, 0xE96F, 0x99F1, 0xE970, 0x99F2, 0xE971, 0x99F8, 0xE973, 0x99FB, 0xE972, 0x99FF, 0x8F78, 0x9A01, 0xE974, 0x9A05, 0xE976,
- 0x9A0E, 0x8B52, 0x9A0F, 0xE975, 0x9A12, 0x919B, 0x9A13, 0x8CB1, 0x9A19, 0xE978, 0x9A28, 0x91CB, 0x9A2B, 0xE979, 0x9A30, 0x93AB,
- 0x9A37, 0xE97A, 0x9A3E, 0xE980, 0x9A40, 0xE97D, 0x9A42, 0xE97C, 0x9A43, 0xE97E, 0x9A45, 0xE97B, 0x9A4D, 0xE982, 0x9A4E, 0xFBFB,
- 0x9A55, 0xE981, 0x9A57, 0xE984, 0x9A5A, 0x8BC1, 0x9A5B, 0xE983, 0x9A5F, 0xE985, 0x9A62, 0xE986, 0x9A64, 0xE988, 0x9A65, 0xE987,
- 0x9A69, 0xE989, 0x9A6A, 0xE98B, 0x9A6B, 0xE98A, 0x9AA8, 0x8D9C, 0x9AAD, 0xE98C, 0x9AB0, 0xE98D, 0x9AB8, 0x8A5B, 0x9ABC, 0xE98E,
- 0x9AC0, 0xE98F, 0x9AC4, 0x9091, 0x9ACF, 0xE990, 0x9AD1, 0xE991, 0x9AD3, 0xE992, 0x9AD4, 0xE993, 0x9AD8, 0x8D82, 0x9AD9, 0xFBFC,
- 0x9ADC, 0xFC40, 0x9ADE, 0xE994, 0x9ADF, 0xE995, 0x9AE2, 0xE996, 0x9AE3, 0xE997, 0x9AE6, 0xE998, 0x9AEA, 0x94AF, 0x9AEB, 0xE99A,
- 0x9AED, 0x9545, 0x9AEE, 0xE99B, 0x9AEF, 0xE999, 0x9AF1, 0xE99D, 0x9AF4, 0xE99C, 0x9AF7, 0xE99E, 0x9AFB, 0xE99F, 0x9B06, 0xE9A0,
- 0x9B18, 0xE9A1, 0x9B1A, 0xE9A2, 0x9B1F, 0xE9A3, 0x9B22, 0xE9A4, 0x9B23, 0xE9A5, 0x9B25, 0xE9A6, 0x9B27, 0xE9A7, 0x9B28, 0xE9A8,
- 0x9B29, 0xE9A9, 0x9B2A, 0xE9AA, 0x9B2E, 0xE9AB, 0x9B2F, 0xE9AC, 0x9B31, 0x9F54, 0x9B32, 0xE9AD, 0x9B3B, 0xE2F6, 0x9B3C, 0x8B53,
- 0x9B41, 0x8A40, 0x9B42, 0x8DB0, 0x9B43, 0xE9AF, 0x9B44, 0xE9AE, 0x9B45, 0x96A3, 0x9B4D, 0xE9B1, 0x9B4E, 0xE9B2, 0x9B4F, 0xE9B0,
- 0x9B51, 0xE9B3, 0x9B54, 0x9682, 0x9B58, 0xE9B4, 0x9B5A, 0x8B9B, 0x9B6F, 0x9844, 0x9B72, 0xFC42, 0x9B74, 0xE9B5, 0x9B75, 0xFC41,
- 0x9B83, 0xE9B7, 0x9B8E, 0x88BC, 0x9B8F, 0xFC43, 0x9B91, 0xE9B8, 0x9B92, 0x95A9, 0x9B93, 0xE9B6, 0x9B96, 0xE9B9, 0x9B97, 0xE9BA,
- 0x9B9F, 0xE9BB, 0x9BA0, 0xE9BC, 0x9BA8, 0xE9BD, 0x9BAA, 0x968E, 0x9BAB, 0x8E4C, 0x9BAD, 0x8DF8, 0x9BAE, 0x914E, 0x9BB1, 0xFC44,
- 0x9BB4, 0xE9BE, 0x9BB9, 0xE9C1, 0x9BBB, 0xFC45, 0x9BC0, 0xE9BF, 0x9BC6, 0xE9C2, 0x9BC9, 0x8CEF, 0x9BCA, 0xE9C0, 0x9BCF, 0xE9C3,
- 0x9BD1, 0xE9C4, 0x9BD2, 0xE9C5, 0x9BD4, 0xE9C9, 0x9BD6, 0x8E49, 0x9BDB, 0x91E2, 0x9BE1, 0xE9CA, 0x9BE2, 0xE9C7, 0x9BE3, 0xE9C6,
- 0x9BE4, 0xE9C8, 0x9BE8, 0x8C7E, 0x9BF0, 0xE9CE, 0x9BF1, 0xE9CD, 0x9BF2, 0xE9CC, 0x9BF5, 0x88B1, 0x9C00, 0xFC46, 0x9C04, 0xE9D8,
- 0x9C06, 0xE9D4, 0x9C08, 0xE9D5, 0x9C09, 0xE9D1, 0x9C0A, 0xE9D7, 0x9C0C, 0xE9D3, 0x9C0D, 0x8A82, 0x9C10, 0x986B, 0x9C12, 0xE9D6,
- 0x9C13, 0xE9D2, 0x9C14, 0xE9D0, 0x9C15, 0xE9CF, 0x9C1B, 0xE9DA, 0x9C21, 0xE9DD, 0x9C24, 0xE9DC, 0x9C25, 0xE9DB, 0x9C2D, 0x9568,
- 0x9C2E, 0xE9D9, 0x9C2F, 0x88F1, 0x9C30, 0xE9DE, 0x9C32, 0xE9E0, 0x9C39, 0x8A8F, 0x9C3A, 0xE9CB, 0x9C3B, 0x8956, 0x9C3E, 0xE9E2,
- 0x9C46, 0xE9E1, 0x9C47, 0xE9DF, 0x9C48, 0x924C, 0x9C52, 0x9690, 0x9C57, 0x97D8, 0x9C5A, 0xE9E3, 0x9C60, 0xE9E4, 0x9C67, 0xE9E5,
- 0x9C76, 0xE9E6, 0x9C78, 0xE9E7, 0x9CE5, 0x92B9, 0x9CE7, 0xE9E8, 0x9CE9, 0x94B5, 0x9CEB, 0xE9ED, 0x9CEC, 0xE9E9, 0x9CF0, 0xE9EA,
- 0x9CF3, 0x9650, 0x9CF4, 0x96C2, 0x9CF6, 0x93CE, 0x9D03, 0xE9EE, 0x9D06, 0xE9EF, 0x9D07, 0x93BC, 0x9D08, 0xE9EC, 0x9D09, 0xE9EB,
- 0x9D0E, 0x89A8, 0x9D12, 0xE9F7, 0x9D15, 0xE9F6, 0x9D1B, 0x8995, 0x9D1F, 0xE9F4, 0x9D23, 0xE9F3, 0x9D26, 0xE9F1, 0x9D28, 0x8A9B,
- 0x9D2A, 0xE9F0, 0x9D2B, 0x8EB0, 0x9D2C, 0x89A7, 0x9D3B, 0x8D83, 0x9D3E, 0xE9FA, 0x9D3F, 0xE9F9, 0x9D41, 0xE9F8, 0x9D44, 0xE9F5,
- 0x9D46, 0xE9FB, 0x9D48, 0xE9FC, 0x9D50, 0xEA44, 0x9D51, 0xEA43, 0x9D59, 0xEA45, 0x9D5C, 0x894C, 0x9D5D, 0xEA40, 0x9D5E, 0xEA41,
- 0x9D60, 0x8D94, 0x9D61, 0x96B7, 0x9D64, 0xEA42, 0x9D6B, 0xFC48, 0x9D6C, 0x9651, 0x9D6F, 0xEA4A, 0x9D70, 0xFC47, 0x9D72, 0xEA46,
- 0x9D7A, 0xEA4B, 0x9D87, 0xEA48, 0x9D89, 0xEA47, 0x9D8F, 0x8C7B, 0x9D9A, 0xEA4C, 0x9DA4, 0xEA4D, 0x9DA9, 0xEA4E, 0x9DAB, 0xEA49,
- 0x9DAF, 0xE9F2, 0x9DB2, 0xEA4F, 0x9DB4, 0x92DF, 0x9DB8, 0xEA53, 0x9DBA, 0xEA54, 0x9DBB, 0xEA52, 0x9DC1, 0xEA51, 0x9DC2, 0xEA57,
- 0x9DC4, 0xEA50, 0x9DC6, 0xEA55, 0x9DCF, 0xEA56, 0x9DD3, 0xEA59, 0x9DD9, 0xEA58, 0x9DE6, 0xEA5B, 0x9DED, 0xEA5C, 0x9DEF, 0xEA5D,
- 0x9DF2, 0x9868, 0x9DF8, 0xEA5A, 0x9DF9, 0x91E9, 0x9DFA, 0x8DEB, 0x9DFD, 0xEA5E, 0x9E19, 0xFC4A, 0x9E1A, 0xEA5F, 0x9E1B, 0xEA60,
- 0x9E1E, 0xEA61, 0x9E75, 0xEA62, 0x9E78, 0x8CB2, 0x9E79, 0xEA63, 0x9E7D, 0xEA64, 0x9E7F, 0x8EAD, 0x9E81, 0xEA65, 0x9E88, 0xEA66,
- 0x9E8B, 0xEA67, 0x9E8C, 0xEA68, 0x9E91, 0xEA6B, 0x9E92, 0xEA69, 0x9E93, 0x985B, 0x9E95, 0xEA6A, 0x9E97, 0x97ED, 0x9E9D, 0xEA6C,
- 0x9E9F, 0x97D9, 0x9EA5, 0xEA6D, 0x9EA6, 0x949E, 0x9EA9, 0xEA6E, 0x9EAA, 0xEA70, 0x9EAD, 0xEA71, 0x9EB8, 0xEA6F, 0x9EB9, 0x8D8D,
- 0x9EBA, 0x96CB, 0x9EBB, 0x9683, 0x9EBC, 0x9BF5, 0x9EBE, 0x9F80, 0x9EBF, 0x969B, 0x9EC4, 0x89A9, 0x9ECC, 0xEA73, 0x9ECD, 0x8B6F,
- 0x9ECE, 0xEA74, 0x9ECF, 0xEA75, 0x9ED0, 0xEA76, 0x9ED1, 0xFC4B, 0x9ED2, 0x8D95, 0x9ED4, 0xEA77, 0x9ED8, 0xE0D2, 0x9ED9, 0x96D9,
- 0x9EDB, 0x91E1, 0x9EDC, 0xEA78, 0x9EDD, 0xEA7A, 0x9EDE, 0xEA79, 0x9EE0, 0xEA7B, 0x9EE5, 0xEA7C, 0x9EE8, 0xEA7D, 0x9EEF, 0xEA7E,
- 0x9EF4, 0xEA80, 0x9EF6, 0xEA81, 0x9EF7, 0xEA82, 0x9EF9, 0xEA83, 0x9EFB, 0xEA84, 0x9EFC, 0xEA85, 0x9EFD, 0xEA86, 0x9F07, 0xEA87,
- 0x9F08, 0xEA88, 0x9F0E, 0x9343, 0x9F13, 0x8CDB, 0x9F15, 0xEA8A, 0x9F20, 0x916C, 0x9F21, 0xEA8B, 0x9F2C, 0xEA8C, 0x9F3B, 0x9540,
- 0x9F3E, 0xEA8D, 0x9F4A, 0xEA8E, 0x9F4B, 0xE256, 0x9F4E, 0xE6D8, 0x9F4F, 0xE8EB, 0x9F52, 0xEA8F, 0x9F54, 0xEA90, 0x9F5F, 0xEA92,
- 0x9F60, 0xEA93, 0x9F61, 0xEA94, 0x9F62, 0x97EE, 0x9F63, 0xEA91, 0x9F66, 0xEA95, 0x9F67, 0xEA96, 0x9F6A, 0xEA98, 0x9F6C, 0xEA97,
- 0x9F72, 0xEA9A, 0x9F76, 0xEA9B, 0x9F77, 0xEA99, 0x9F8D, 0x97B4, 0x9F95, 0xEA9C, 0x9F9C, 0xEA9D, 0x9F9D, 0xE273, 0x9FA0, 0xEA9E,
- 0xF929, 0xFAE0, 0xF9DC, 0xFBE9, 0xFA0E, 0xFA90, 0xFA0F, 0xFA9B, 0xFA10, 0xFA9C, 0xFA11, 0xFAB1, 0xFA12, 0xFAD8, 0xFA13, 0xFAE8,
- 0xFA14, 0xFAEA, 0xFA15, 0xFB58, 0xFA16, 0xFB5E, 0xFA17, 0xFB75, 0xFA18, 0xFB7D, 0xFA19, 0xFB7E, 0xFA1A, 0xFB80, 0xFA1B, 0xFB82,
- 0xFA1C, 0xFB86, 0xFA1D, 0xFB89, 0xFA1E, 0xFB92, 0xFA1F, 0xFB9D, 0xFA20, 0xFB9F, 0xFA21, 0xFBA0, 0xFA22, 0xFBA9, 0xFA23, 0xFBB1,
- 0xFA24, 0xFBB3, 0xFA25, 0xFBB4, 0xFA26, 0xFBB7, 0xFA27, 0xFBD3, 0xFA28, 0xFBDA, 0xFA29, 0xFBEA, 0xFA2A, 0xFBF6, 0xFA2B, 0xFBF7,
- 0xFA2C, 0xFBF9, 0xFA2D, 0xFC49, 0xFF01, 0x8149, 0xFF02, 0xFA57, 0xFF03, 0x8194, 0xFF04, 0x8190, 0xFF05, 0x8193, 0xFF06, 0x8195,
- 0xFF07, 0xFA56, 0xFF08, 0x8169, 0xFF09, 0x816A, 0xFF0A, 0x8196, 0xFF0B, 0x817B, 0xFF0C, 0x8143, 0xFF0D, 0x817C, 0xFF0E, 0x8144,
- 0xFF0F, 0x815E, 0xFF10, 0x824F, 0xFF11, 0x8250, 0xFF12, 0x8251, 0xFF13, 0x8252, 0xFF14, 0x8253, 0xFF15, 0x8254, 0xFF16, 0x8255,
- 0xFF17, 0x8256, 0xFF18, 0x8257, 0xFF19, 0x8258, 0xFF1A, 0x8146, 0xFF1B, 0x8147, 0xFF1C, 0x8183, 0xFF1D, 0x8181, 0xFF1E, 0x8184,
- 0xFF1F, 0x8148, 0xFF20, 0x8197, 0xFF21, 0x8260, 0xFF22, 0x8261, 0xFF23, 0x8262, 0xFF24, 0x8263, 0xFF25, 0x8264, 0xFF26, 0x8265,
- 0xFF27, 0x8266, 0xFF28, 0x8267, 0xFF29, 0x8268, 0xFF2A, 0x8269, 0xFF2B, 0x826A, 0xFF2C, 0x826B, 0xFF2D, 0x826C, 0xFF2E, 0x826D,
- 0xFF2F, 0x826E, 0xFF30, 0x826F, 0xFF31, 0x8270, 0xFF32, 0x8271, 0xFF33, 0x8272, 0xFF34, 0x8273, 0xFF35, 0x8274, 0xFF36, 0x8275,
- 0xFF37, 0x8276, 0xFF38, 0x8277, 0xFF39, 0x8278, 0xFF3A, 0x8279, 0xFF3B, 0x816D, 0xFF3C, 0x815F, 0xFF3D, 0x816E, 0xFF3E, 0x814F,
- 0xFF3F, 0x8151, 0xFF40, 0x814D, 0xFF41, 0x8281, 0xFF42, 0x8282, 0xFF43, 0x8283, 0xFF44, 0x8284, 0xFF45, 0x8285, 0xFF46, 0x8286,
- 0xFF47, 0x8287, 0xFF48, 0x8288, 0xFF49, 0x8289, 0xFF4A, 0x828A, 0xFF4B, 0x828B, 0xFF4C, 0x828C, 0xFF4D, 0x828D, 0xFF4E, 0x828E,
- 0xFF4F, 0x828F, 0xFF50, 0x8290, 0xFF51, 0x8291, 0xFF52, 0x8292, 0xFF53, 0x8293, 0xFF54, 0x8294, 0xFF55, 0x8295, 0xFF56, 0x8296,
- 0xFF57, 0x8297, 0xFF58, 0x8298, 0xFF59, 0x8299, 0xFF5A, 0x829A, 0xFF5B, 0x816F, 0xFF5C, 0x8162, 0xFF5D, 0x8170, 0xFF5E, 0x8160,
- 0xFF61, 0x00A1, 0xFF62, 0x00A2, 0xFF63, 0x00A3, 0xFF64, 0x00A4, 0xFF65, 0x00A5, 0xFF66, 0x00A6, 0xFF67, 0x00A7, 0xFF68, 0x00A8,
- 0xFF69, 0x00A9, 0xFF6A, 0x00AA, 0xFF6B, 0x00AB, 0xFF6C, 0x00AC, 0xFF6D, 0x00AD, 0xFF6E, 0x00AE, 0xFF6F, 0x00AF, 0xFF70, 0x00B0,
- 0xFF71, 0x00B1, 0xFF72, 0x00B2, 0xFF73, 0x00B3, 0xFF74, 0x00B4, 0xFF75, 0x00B5, 0xFF76, 0x00B6, 0xFF77, 0x00B7, 0xFF78, 0x00B8,
- 0xFF79, 0x00B9, 0xFF7A, 0x00BA, 0xFF7B, 0x00BB, 0xFF7C, 0x00BC, 0xFF7D, 0x00BD, 0xFF7E, 0x00BE, 0xFF7F, 0x00BF, 0xFF80, 0x00C0,
- 0xFF81, 0x00C1, 0xFF82, 0x00C2, 0xFF83, 0x00C3, 0xFF84, 0x00C4, 0xFF85, 0x00C5, 0xFF86, 0x00C6, 0xFF87, 0x00C7, 0xFF88, 0x00C8,
- 0xFF89, 0x00C9, 0xFF8A, 0x00CA, 0xFF8B, 0x00CB, 0xFF8C, 0x00CC, 0xFF8D, 0x00CD, 0xFF8E, 0x00CE, 0xFF8F, 0x00CF, 0xFF90, 0x00D0,
- 0xFF91, 0x00D1, 0xFF92, 0x00D2, 0xFF93, 0x00D3, 0xFF94, 0x00D4, 0xFF95, 0x00D5, 0xFF96, 0x00D6, 0xFF97, 0x00D7, 0xFF98, 0x00D8,
- 0xFF99, 0x00D9, 0xFF9A, 0x00DA, 0xFF9B, 0x00DB, 0xFF9C, 0x00DC, 0xFF9D, 0x00DD, 0xFF9E, 0x00DE, 0xFF9F, 0x00DF, 0xFFE0, 0x8191,
- 0xFFE1, 0x8192, 0xFFE2, 0x81CA, 0xFFE3, 0x8150, 0xFFE4, 0xFA55, 0xFFE5, 0x818F, 0, 0
-};
-
-static const WCHAR oem2uni932[] = { /* Shift_JIS --> Unicode pairs */
- 0x00A1, 0xFF61, 0x00A2, 0xFF62, 0x00A3, 0xFF63, 0x00A4, 0xFF64, 0x00A5, 0xFF65, 0x00A6, 0xFF66, 0x00A7, 0xFF67, 0x00A8, 0xFF68,
- 0x00A9, 0xFF69, 0x00AA, 0xFF6A, 0x00AB, 0xFF6B, 0x00AC, 0xFF6C, 0x00AD, 0xFF6D, 0x00AE, 0xFF6E, 0x00AF, 0xFF6F, 0x00B0, 0xFF70,
- 0x00B1, 0xFF71, 0x00B2, 0xFF72, 0x00B3, 0xFF73, 0x00B4, 0xFF74, 0x00B5, 0xFF75, 0x00B6, 0xFF76, 0x00B7, 0xFF77, 0x00B8, 0xFF78,
- 0x00B9, 0xFF79, 0x00BA, 0xFF7A, 0x00BB, 0xFF7B, 0x00BC, 0xFF7C, 0x00BD, 0xFF7D, 0x00BE, 0xFF7E, 0x00BF, 0xFF7F, 0x00C0, 0xFF80,
- 0x00C1, 0xFF81, 0x00C2, 0xFF82, 0x00C3, 0xFF83, 0x00C4, 0xFF84, 0x00C5, 0xFF85, 0x00C6, 0xFF86, 0x00C7, 0xFF87, 0x00C8, 0xFF88,
- 0x00C9, 0xFF89, 0x00CA, 0xFF8A, 0x00CB, 0xFF8B, 0x00CC, 0xFF8C, 0x00CD, 0xFF8D, 0x00CE, 0xFF8E, 0x00CF, 0xFF8F, 0x00D0, 0xFF90,
- 0x00D1, 0xFF91, 0x00D2, 0xFF92, 0x00D3, 0xFF93, 0x00D4, 0xFF94, 0x00D5, 0xFF95, 0x00D6, 0xFF96, 0x00D7, 0xFF97, 0x00D8, 0xFF98,
- 0x00D9, 0xFF99, 0x00DA, 0xFF9A, 0x00DB, 0xFF9B, 0x00DC, 0xFF9C, 0x00DD, 0xFF9D, 0x00DE, 0xFF9E, 0x00DF, 0xFF9F, 0x8140, 0x3000,
- 0x8141, 0x3001, 0x8142, 0x3002, 0x8143, 0xFF0C, 0x8144, 0xFF0E, 0x8145, 0x30FB, 0x8146, 0xFF1A, 0x8147, 0xFF1B, 0x8148, 0xFF1F,
- 0x8149, 0xFF01, 0x814A, 0x309B, 0x814B, 0x309C, 0x814C, 0x00B4, 0x814D, 0xFF40, 0x814E, 0x00A8, 0x814F, 0xFF3E, 0x8150, 0xFFE3,
- 0x8151, 0xFF3F, 0x8152, 0x30FD, 0x8153, 0x30FE, 0x8154, 0x309D, 0x8155, 0x309E, 0x8156, 0x3003, 0x8157, 0x4EDD, 0x8158, 0x3005,
- 0x8159, 0x3006, 0x815A, 0x3007, 0x815B, 0x30FC, 0x815C, 0x2015, 0x815D, 0x2010, 0x815E, 0xFF0F, 0x815F, 0xFF3C, 0x8160, 0xFF5E,
- 0x8161, 0x2225, 0x8162, 0xFF5C, 0x8163, 0x2026, 0x8164, 0x2025, 0x8165, 0x2018, 0x8166, 0x2019, 0x8167, 0x201C, 0x8168, 0x201D,
- 0x8169, 0xFF08, 0x816A, 0xFF09, 0x816B, 0x3014, 0x816C, 0x3015, 0x816D, 0xFF3B, 0x816E, 0xFF3D, 0x816F, 0xFF5B, 0x8170, 0xFF5D,
- 0x8171, 0x3008, 0x8172, 0x3009, 0x8173, 0x300A, 0x8174, 0x300B, 0x8175, 0x300C, 0x8176, 0x300D, 0x8177, 0x300E, 0x8178, 0x300F,
- 0x8179, 0x3010, 0x817A, 0x3011, 0x817B, 0xFF0B, 0x817C, 0xFF0D, 0x817D, 0x00B1, 0x817E, 0x00D7, 0x8180, 0x00F7, 0x8181, 0xFF1D,
- 0x8182, 0x2260, 0x8183, 0xFF1C, 0x8184, 0xFF1E, 0x8185, 0x2266, 0x8186, 0x2267, 0x8187, 0x221E, 0x8188, 0x2234, 0x8189, 0x2642,
- 0x818A, 0x2640, 0x818B, 0x00B0, 0x818C, 0x2032, 0x818D, 0x2033, 0x818E, 0x2103, 0x818F, 0xFFE5, 0x8190, 0xFF04, 0x8191, 0xFFE0,
- 0x8192, 0xFFE1, 0x8193, 0xFF05, 0x8194, 0xFF03, 0x8195, 0xFF06, 0x8196, 0xFF0A, 0x8197, 0xFF20, 0x8198, 0x00A7, 0x8199, 0x2606,
- 0x819A, 0x2605, 0x819B, 0x25CB, 0x819C, 0x25CF, 0x819D, 0x25CE, 0x819E, 0x25C7, 0x819F, 0x25C6, 0x81A0, 0x25A1, 0x81A1, 0x25A0,
- 0x81A2, 0x25B3, 0x81A3, 0x25B2, 0x81A4, 0x25BD, 0x81A5, 0x25BC, 0x81A6, 0x203B, 0x81A7, 0x3012, 0x81A8, 0x2192, 0x81A9, 0x2190,
- 0x81AA, 0x2191, 0x81AB, 0x2193, 0x81AC, 0x3013, 0x81B8, 0x2208, 0x81B9, 0x220B, 0x81BA, 0x2286, 0x81BB, 0x2287, 0x81BC, 0x2282,
- 0x81BD, 0x2283, 0x81BE, 0x222A, 0x81BF, 0x2229, 0x81C8, 0x2227, 0x81C9, 0x2228, 0x81CA, 0xFFE2, 0x81CB, 0x21D2, 0x81CC, 0x21D4,
- 0x81CD, 0x2200, 0x81CE, 0x2203, 0x81DA, 0x2220, 0x81DB, 0x22A5, 0x81DC, 0x2312, 0x81DD, 0x2202, 0x81DE, 0x2207, 0x81DF, 0x2261,
- 0x81E0, 0x2252, 0x81E1, 0x226A, 0x81E2, 0x226B, 0x81E3, 0x221A, 0x81E4, 0x223D, 0x81E5, 0x221D, 0x81E6, 0x2235, 0x81E7, 0x222B,
- 0x81E8, 0x222C, 0x81F0, 0x212B, 0x81F1, 0x2030, 0x81F2, 0x266F, 0x81F3, 0x266D, 0x81F4, 0x266A, 0x81F5, 0x2020, 0x81F6, 0x2021,
- 0x81F7, 0x00B6, 0x81FC, 0x25EF, 0x824F, 0xFF10, 0x8250, 0xFF11, 0x8251, 0xFF12, 0x8252, 0xFF13, 0x8253, 0xFF14, 0x8254, 0xFF15,
- 0x8255, 0xFF16, 0x8256, 0xFF17, 0x8257, 0xFF18, 0x8258, 0xFF19, 0x8260, 0xFF21, 0x8261, 0xFF22, 0x8262, 0xFF23, 0x8263, 0xFF24,
- 0x8264, 0xFF25, 0x8265, 0xFF26, 0x8266, 0xFF27, 0x8267, 0xFF28, 0x8268, 0xFF29, 0x8269, 0xFF2A, 0x826A, 0xFF2B, 0x826B, 0xFF2C,
- 0x826C, 0xFF2D, 0x826D, 0xFF2E, 0x826E, 0xFF2F, 0x826F, 0xFF30, 0x8270, 0xFF31, 0x8271, 0xFF32, 0x8272, 0xFF33, 0x8273, 0xFF34,
- 0x8274, 0xFF35, 0x8275, 0xFF36, 0x8276, 0xFF37, 0x8277, 0xFF38, 0x8278, 0xFF39, 0x8279, 0xFF3A, 0x8281, 0xFF41, 0x8282, 0xFF42,
- 0x8283, 0xFF43, 0x8284, 0xFF44, 0x8285, 0xFF45, 0x8286, 0xFF46, 0x8287, 0xFF47, 0x8288, 0xFF48, 0x8289, 0xFF49, 0x828A, 0xFF4A,
- 0x828B, 0xFF4B, 0x828C, 0xFF4C, 0x828D, 0xFF4D, 0x828E, 0xFF4E, 0x828F, 0xFF4F, 0x8290, 0xFF50, 0x8291, 0xFF51, 0x8292, 0xFF52,
- 0x8293, 0xFF53, 0x8294, 0xFF54, 0x8295, 0xFF55, 0x8296, 0xFF56, 0x8297, 0xFF57, 0x8298, 0xFF58, 0x8299, 0xFF59, 0x829A, 0xFF5A,
- 0x829F, 0x3041, 0x82A0, 0x3042, 0x82A1, 0x3043, 0x82A2, 0x3044, 0x82A3, 0x3045, 0x82A4, 0x3046, 0x82A5, 0x3047, 0x82A6, 0x3048,
- 0x82A7, 0x3049, 0x82A8, 0x304A, 0x82A9, 0x304B, 0x82AA, 0x304C, 0x82AB, 0x304D, 0x82AC, 0x304E, 0x82AD, 0x304F, 0x82AE, 0x3050,
- 0x82AF, 0x3051, 0x82B0, 0x3052, 0x82B1, 0x3053, 0x82B2, 0x3054, 0x82B3, 0x3055, 0x82B4, 0x3056, 0x82B5, 0x3057, 0x82B6, 0x3058,
- 0x82B7, 0x3059, 0x82B8, 0x305A, 0x82B9, 0x305B, 0x82BA, 0x305C, 0x82BB, 0x305D, 0x82BC, 0x305E, 0x82BD, 0x305F, 0x82BE, 0x3060,
- 0x82BF, 0x3061, 0x82C0, 0x3062, 0x82C1, 0x3063, 0x82C2, 0x3064, 0x82C3, 0x3065, 0x82C4, 0x3066, 0x82C5, 0x3067, 0x82C6, 0x3068,
- 0x82C7, 0x3069, 0x82C8, 0x306A, 0x82C9, 0x306B, 0x82CA, 0x306C, 0x82CB, 0x306D, 0x82CC, 0x306E, 0x82CD, 0x306F, 0x82CE, 0x3070,
- 0x82CF, 0x3071, 0x82D0, 0x3072, 0x82D1, 0x3073, 0x82D2, 0x3074, 0x82D3, 0x3075, 0x82D4, 0x3076, 0x82D5, 0x3077, 0x82D6, 0x3078,
- 0x82D7, 0x3079, 0x82D8, 0x307A, 0x82D9, 0x307B, 0x82DA, 0x307C, 0x82DB, 0x307D, 0x82DC, 0x307E, 0x82DD, 0x307F, 0x82DE, 0x3080,
- 0x82DF, 0x3081, 0x82E0, 0x3082, 0x82E1, 0x3083, 0x82E2, 0x3084, 0x82E3, 0x3085, 0x82E4, 0x3086, 0x82E5, 0x3087, 0x82E6, 0x3088,
- 0x82E7, 0x3089, 0x82E8, 0x308A, 0x82E9, 0x308B, 0x82EA, 0x308C, 0x82EB, 0x308D, 0x82EC, 0x308E, 0x82ED, 0x308F, 0x82EE, 0x3090,
- 0x82EF, 0x3091, 0x82F0, 0x3092, 0x82F1, 0x3093, 0x8340, 0x30A1, 0x8341, 0x30A2, 0x8342, 0x30A3, 0x8343, 0x30A4, 0x8344, 0x30A5,
- 0x8345, 0x30A6, 0x8346, 0x30A7, 0x8347, 0x30A8, 0x8348, 0x30A9, 0x8349, 0x30AA, 0x834A, 0x30AB, 0x834B, 0x30AC, 0x834C, 0x30AD,
- 0x834D, 0x30AE, 0x834E, 0x30AF, 0x834F, 0x30B0, 0x8350, 0x30B1, 0x8351, 0x30B2, 0x8352, 0x30B3, 0x8353, 0x30B4, 0x8354, 0x30B5,
- 0x8355, 0x30B6, 0x8356, 0x30B7, 0x8357, 0x30B8, 0x8358, 0x30B9, 0x8359, 0x30BA, 0x835A, 0x30BB, 0x835B, 0x30BC, 0x835C, 0x30BD,
- 0x835D, 0x30BE, 0x835E, 0x30BF, 0x835F, 0x30C0, 0x8360, 0x30C1, 0x8361, 0x30C2, 0x8362, 0x30C3, 0x8363, 0x30C4, 0x8364, 0x30C5,
- 0x8365, 0x30C6, 0x8366, 0x30C7, 0x8367, 0x30C8, 0x8368, 0x30C9, 0x8369, 0x30CA, 0x836A, 0x30CB, 0x836B, 0x30CC, 0x836C, 0x30CD,
- 0x836D, 0x30CE, 0x836E, 0x30CF, 0x836F, 0x30D0, 0x8370, 0x30D1, 0x8371, 0x30D2, 0x8372, 0x30D3, 0x8373, 0x30D4, 0x8374, 0x30D5,
- 0x8375, 0x30D6, 0x8376, 0x30D7, 0x8377, 0x30D8, 0x8378, 0x30D9, 0x8379, 0x30DA, 0x837A, 0x30DB, 0x837B, 0x30DC, 0x837C, 0x30DD,
- 0x837D, 0x30DE, 0x837E, 0x30DF, 0x8380, 0x30E0, 0x8381, 0x30E1, 0x8382, 0x30E2, 0x8383, 0x30E3, 0x8384, 0x30E4, 0x8385, 0x30E5,
- 0x8386, 0x30E6, 0x8387, 0x30E7, 0x8388, 0x30E8, 0x8389, 0x30E9, 0x838A, 0x30EA, 0x838B, 0x30EB, 0x838C, 0x30EC, 0x838D, 0x30ED,
- 0x838E, 0x30EE, 0x838F, 0x30EF, 0x8390, 0x30F0, 0x8391, 0x30F1, 0x8392, 0x30F2, 0x8393, 0x30F3, 0x8394, 0x30F4, 0x8395, 0x30F5,
- 0x8396, 0x30F6, 0x839F, 0x0391, 0x83A0, 0x0392, 0x83A1, 0x0393, 0x83A2, 0x0394, 0x83A3, 0x0395, 0x83A4, 0x0396, 0x83A5, 0x0397,
- 0x83A6, 0x0398, 0x83A7, 0x0399, 0x83A8, 0x039A, 0x83A9, 0x039B, 0x83AA, 0x039C, 0x83AB, 0x039D, 0x83AC, 0x039E, 0x83AD, 0x039F,
- 0x83AE, 0x03A0, 0x83AF, 0x03A1, 0x83B0, 0x03A3, 0x83B1, 0x03A4, 0x83B2, 0x03A5, 0x83B3, 0x03A6, 0x83B4, 0x03A7, 0x83B5, 0x03A8,
- 0x83B6, 0x03A9, 0x83BF, 0x03B1, 0x83C0, 0x03B2, 0x83C1, 0x03B3, 0x83C2, 0x03B4, 0x83C3, 0x03B5, 0x83C4, 0x03B6, 0x83C5, 0x03B7,
- 0x83C6, 0x03B8, 0x83C7, 0x03B9, 0x83C8, 0x03BA, 0x83C9, 0x03BB, 0x83CA, 0x03BC, 0x83CB, 0x03BD, 0x83CC, 0x03BE, 0x83CD, 0x03BF,
- 0x83CE, 0x03C0, 0x83CF, 0x03C1, 0x83D0, 0x03C3, 0x83D1, 0x03C4, 0x83D2, 0x03C5, 0x83D3, 0x03C6, 0x83D4, 0x03C7, 0x83D5, 0x03C8,
- 0x83D6, 0x03C9, 0x8440, 0x0410, 0x8441, 0x0411, 0x8442, 0x0412, 0x8443, 0x0413, 0x8444, 0x0414, 0x8445, 0x0415, 0x8446, 0x0401,
- 0x8447, 0x0416, 0x8448, 0x0417, 0x8449, 0x0418, 0x844A, 0x0419, 0x844B, 0x041A, 0x844C, 0x041B, 0x844D, 0x041C, 0x844E, 0x041D,
- 0x844F, 0x041E, 0x8450, 0x041F, 0x8451, 0x0420, 0x8452, 0x0421, 0x8453, 0x0422, 0x8454, 0x0423, 0x8455, 0x0424, 0x8456, 0x0425,
- 0x8457, 0x0426, 0x8458, 0x0427, 0x8459, 0x0428, 0x845A, 0x0429, 0x845B, 0x042A, 0x845C, 0x042B, 0x845D, 0x042C, 0x845E, 0x042D,
- 0x845F, 0x042E, 0x8460, 0x042F, 0x8470, 0x0430, 0x8471, 0x0431, 0x8472, 0x0432, 0x8473, 0x0433, 0x8474, 0x0434, 0x8475, 0x0435,
- 0x8476, 0x0451, 0x8477, 0x0436, 0x8478, 0x0437, 0x8479, 0x0438, 0x847A, 0x0439, 0x847B, 0x043A, 0x847C, 0x043B, 0x847D, 0x043C,
- 0x847E, 0x043D, 0x8480, 0x043E, 0x8481, 0x043F, 0x8482, 0x0440, 0x8483, 0x0441, 0x8484, 0x0442, 0x8485, 0x0443, 0x8486, 0x0444,
- 0x8487, 0x0445, 0x8488, 0x0446, 0x8489, 0x0447, 0x848A, 0x0448, 0x848B, 0x0449, 0x848C, 0x044A, 0x848D, 0x044B, 0x848E, 0x044C,
- 0x848F, 0x044D, 0x8490, 0x044E, 0x8491, 0x044F, 0x849F, 0x2500, 0x84A0, 0x2502, 0x84A1, 0x250C, 0x84A2, 0x2510, 0x84A3, 0x2518,
- 0x84A4, 0x2514, 0x84A5, 0x251C, 0x84A6, 0x252C, 0x84A7, 0x2524, 0x84A8, 0x2534, 0x84A9, 0x253C, 0x84AA, 0x2501, 0x84AB, 0x2503,
- 0x84AC, 0x250F, 0x84AD, 0x2513, 0x84AE, 0x251B, 0x84AF, 0x2517, 0x84B0, 0x2523, 0x84B1, 0x2533, 0x84B2, 0x252B, 0x84B3, 0x253B,
- 0x84B4, 0x254B, 0x84B5, 0x2520, 0x84B6, 0x252F, 0x84B7, 0x2528, 0x84B8, 0x2537, 0x84B9, 0x253F, 0x84BA, 0x251D, 0x84BB, 0x2530,
- 0x84BC, 0x2525, 0x84BD, 0x2538, 0x84BE, 0x2542, 0x8740, 0x2460, 0x8741, 0x2461, 0x8742, 0x2462, 0x8743, 0x2463, 0x8744, 0x2464,
- 0x8745, 0x2465, 0x8746, 0x2466, 0x8747, 0x2467, 0x8748, 0x2468, 0x8749, 0x2469, 0x874A, 0x246A, 0x874B, 0x246B, 0x874C, 0x246C,
- 0x874D, 0x246D, 0x874E, 0x246E, 0x874F, 0x246F, 0x8750, 0x2470, 0x8751, 0x2471, 0x8752, 0x2472, 0x8753, 0x2473, 0x8754, 0x2160,
- 0x8755, 0x2161, 0x8756, 0x2162, 0x8757, 0x2163, 0x8758, 0x2164, 0x8759, 0x2165, 0x875A, 0x2166, 0x875B, 0x2167, 0x875C, 0x2168,
- 0x875D, 0x2169, 0x875F, 0x3349, 0x8760, 0x3314, 0x8761, 0x3322, 0x8762, 0x334D, 0x8763, 0x3318, 0x8764, 0x3327, 0x8765, 0x3303,
- 0x8766, 0x3336, 0x8767, 0x3351, 0x8768, 0x3357, 0x8769, 0x330D, 0x876A, 0x3326, 0x876B, 0x3323, 0x876C, 0x332B, 0x876D, 0x334A,
- 0x876E, 0x333B, 0x876F, 0x339C, 0x8770, 0x339D, 0x8771, 0x339E, 0x8772, 0x338E, 0x8773, 0x338F, 0x8774, 0x33C4, 0x8775, 0x33A1,
- 0x877E, 0x337B, 0x8780, 0x301D, 0x8781, 0x301F, 0x8782, 0x2116, 0x8783, 0x33CD, 0x8784, 0x2121, 0x8785, 0x32A4, 0x8786, 0x32A5,
- 0x8787, 0x32A6, 0x8788, 0x32A7, 0x8789, 0x32A8, 0x878A, 0x3231, 0x878B, 0x3232, 0x878C, 0x3239, 0x878D, 0x337E, 0x878E, 0x337D,
- 0x878F, 0x337C, 0x8793, 0x222E, 0x8794, 0x2211, 0x8798, 0x221F, 0x8799, 0x22BF, 0x889F, 0x4E9C, 0x88A0, 0x5516, 0x88A1, 0x5A03,
- 0x88A2, 0x963F, 0x88A3, 0x54C0, 0x88A4, 0x611B, 0x88A5, 0x6328, 0x88A6, 0x59F6, 0x88A7, 0x9022, 0x88A8, 0x8475, 0x88A9, 0x831C,
- 0x88AA, 0x7A50, 0x88AB, 0x60AA, 0x88AC, 0x63E1, 0x88AD, 0x6E25, 0x88AE, 0x65ED, 0x88AF, 0x8466, 0x88B0, 0x82A6, 0x88B1, 0x9BF5,
- 0x88B2, 0x6893, 0x88B3, 0x5727, 0x88B4, 0x65A1, 0x88B5, 0x6271, 0x88B6, 0x5B9B, 0x88B7, 0x59D0, 0x88B8, 0x867B, 0x88B9, 0x98F4,
- 0x88BA, 0x7D62, 0x88BB, 0x7DBE, 0x88BC, 0x9B8E, 0x88BD, 0x6216, 0x88BE, 0x7C9F, 0x88BF, 0x88B7, 0x88C0, 0x5B89, 0x88C1, 0x5EB5,
- 0x88C2, 0x6309, 0x88C3, 0x6697, 0x88C4, 0x6848, 0x88C5, 0x95C7, 0x88C6, 0x978D, 0x88C7, 0x674F, 0x88C8, 0x4EE5, 0x88C9, 0x4F0A,
- 0x88CA, 0x4F4D, 0x88CB, 0x4F9D, 0x88CC, 0x5049, 0x88CD, 0x56F2, 0x88CE, 0x5937, 0x88CF, 0x59D4, 0x88D0, 0x5A01, 0x88D1, 0x5C09,
- 0x88D2, 0x60DF, 0x88D3, 0x610F, 0x88D4, 0x6170, 0x88D5, 0x6613, 0x88D6, 0x6905, 0x88D7, 0x70BA, 0x88D8, 0x754F, 0x88D9, 0x7570,
- 0x88DA, 0x79FB, 0x88DB, 0x7DAD, 0x88DC, 0x7DEF, 0x88DD, 0x80C3, 0x88DE, 0x840E, 0x88DF, 0x8863, 0x88E0, 0x8B02, 0x88E1, 0x9055,
- 0x88E2, 0x907A, 0x88E3, 0x533B, 0x88E4, 0x4E95, 0x88E5, 0x4EA5, 0x88E6, 0x57DF, 0x88E7, 0x80B2, 0x88E8, 0x90C1, 0x88E9, 0x78EF,
- 0x88EA, 0x4E00, 0x88EB, 0x58F1, 0x88EC, 0x6EA2, 0x88ED, 0x9038, 0x88EE, 0x7A32, 0x88EF, 0x8328, 0x88F0, 0x828B, 0x88F1, 0x9C2F,
- 0x88F2, 0x5141, 0x88F3, 0x5370, 0x88F4, 0x54BD, 0x88F5, 0x54E1, 0x88F6, 0x56E0, 0x88F7, 0x59FB, 0x88F8, 0x5F15, 0x88F9, 0x98F2,
- 0x88FA, 0x6DEB, 0x88FB, 0x80E4, 0x88FC, 0x852D, 0x8940, 0x9662, 0x8941, 0x9670, 0x8942, 0x96A0, 0x8943, 0x97FB, 0x8944, 0x540B,
- 0x8945, 0x53F3, 0x8946, 0x5B87, 0x8947, 0x70CF, 0x8948, 0x7FBD, 0x8949, 0x8FC2, 0x894A, 0x96E8, 0x894B, 0x536F, 0x894C, 0x9D5C,
- 0x894D, 0x7ABA, 0x894E, 0x4E11, 0x894F, 0x7893, 0x8950, 0x81FC, 0x8951, 0x6E26, 0x8952, 0x5618, 0x8953, 0x5504, 0x8954, 0x6B1D,
- 0x8955, 0x851A, 0x8956, 0x9C3B, 0x8957, 0x59E5, 0x8958, 0x53A9, 0x8959, 0x6D66, 0x895A, 0x74DC, 0x895B, 0x958F, 0x895C, 0x5642,
- 0x895D, 0x4E91, 0x895E, 0x904B, 0x895F, 0x96F2, 0x8960, 0x834F, 0x8961, 0x990C, 0x8962, 0x53E1, 0x8963, 0x55B6, 0x8964, 0x5B30,
- 0x8965, 0x5F71, 0x8966, 0x6620, 0x8967, 0x66F3, 0x8968, 0x6804, 0x8969, 0x6C38, 0x896A, 0x6CF3, 0x896B, 0x6D29, 0x896C, 0x745B,
- 0x896D, 0x76C8, 0x896E, 0x7A4E, 0x896F, 0x9834, 0x8970, 0x82F1, 0x8971, 0x885B, 0x8972, 0x8A60, 0x8973, 0x92ED, 0x8974, 0x6DB2,
- 0x8975, 0x75AB, 0x8976, 0x76CA, 0x8977, 0x99C5, 0x8978, 0x60A6, 0x8979, 0x8B01, 0x897A, 0x8D8A, 0x897B, 0x95B2, 0x897C, 0x698E,
- 0x897D, 0x53AD, 0x897E, 0x5186, 0x8980, 0x5712, 0x8981, 0x5830, 0x8982, 0x5944, 0x8983, 0x5BB4, 0x8984, 0x5EF6, 0x8985, 0x6028,
- 0x8986, 0x63A9, 0x8987, 0x63F4, 0x8988, 0x6CBF, 0x8989, 0x6F14, 0x898A, 0x708E, 0x898B, 0x7114, 0x898C, 0x7159, 0x898D, 0x71D5,
- 0x898E, 0x733F, 0x898F, 0x7E01, 0x8990, 0x8276, 0x8991, 0x82D1, 0x8992, 0x8597, 0x8993, 0x9060, 0x8994, 0x925B, 0x8995, 0x9D1B,
- 0x8996, 0x5869, 0x8997, 0x65BC, 0x8998, 0x6C5A, 0x8999, 0x7525, 0x899A, 0x51F9, 0x899B, 0x592E, 0x899C, 0x5965, 0x899D, 0x5F80,
- 0x899E, 0x5FDC, 0x899F, 0x62BC, 0x89A0, 0x65FA, 0x89A1, 0x6A2A, 0x89A2, 0x6B27, 0x89A3, 0x6BB4, 0x89A4, 0x738B, 0x89A5, 0x7FC1,
- 0x89A6, 0x8956, 0x89A7, 0x9D2C, 0x89A8, 0x9D0E, 0x89A9, 0x9EC4, 0x89AA, 0x5CA1, 0x89AB, 0x6C96, 0x89AC, 0x837B, 0x89AD, 0x5104,
- 0x89AE, 0x5C4B, 0x89AF, 0x61B6, 0x89B0, 0x81C6, 0x89B1, 0x6876, 0x89B2, 0x7261, 0x89B3, 0x4E59, 0x89B4, 0x4FFA, 0x89B5, 0x5378,
- 0x89B6, 0x6069, 0x89B7, 0x6E29, 0x89B8, 0x7A4F, 0x89B9, 0x97F3, 0x89BA, 0x4E0B, 0x89BB, 0x5316, 0x89BC, 0x4EEE, 0x89BD, 0x4F55,
- 0x89BE, 0x4F3D, 0x89BF, 0x4FA1, 0x89C0, 0x4F73, 0x89C1, 0x52A0, 0x89C2, 0x53EF, 0x89C3, 0x5609, 0x89C4, 0x590F, 0x89C5, 0x5AC1,
- 0x89C6, 0x5BB6, 0x89C7, 0x5BE1, 0x89C8, 0x79D1, 0x89C9, 0x6687, 0x89CA, 0x679C, 0x89CB, 0x67B6, 0x89CC, 0x6B4C, 0x89CD, 0x6CB3,
- 0x89CE, 0x706B, 0x89CF, 0x73C2, 0x89D0, 0x798D, 0x89D1, 0x79BE, 0x89D2, 0x7A3C, 0x89D3, 0x7B87, 0x89D4, 0x82B1, 0x89D5, 0x82DB,
- 0x89D6, 0x8304, 0x89D7, 0x8377, 0x89D8, 0x83EF, 0x89D9, 0x83D3, 0x89DA, 0x8766, 0x89DB, 0x8AB2, 0x89DC, 0x5629, 0x89DD, 0x8CA8,
- 0x89DE, 0x8FE6, 0x89DF, 0x904E, 0x89E0, 0x971E, 0x89E1, 0x868A, 0x89E2, 0x4FC4, 0x89E3, 0x5CE8, 0x89E4, 0x6211, 0x89E5, 0x7259,
- 0x89E6, 0x753B, 0x89E7, 0x81E5, 0x89E8, 0x82BD, 0x89E9, 0x86FE, 0x89EA, 0x8CC0, 0x89EB, 0x96C5, 0x89EC, 0x9913, 0x89ED, 0x99D5,
- 0x89EE, 0x4ECB, 0x89EF, 0x4F1A, 0x89F0, 0x89E3, 0x89F1, 0x56DE, 0x89F2, 0x584A, 0x89F3, 0x58CA, 0x89F4, 0x5EFB, 0x89F5, 0x5FEB,
- 0x89F6, 0x602A, 0x89F7, 0x6094, 0x89F8, 0x6062, 0x89F9, 0x61D0, 0x89FA, 0x6212, 0x89FB, 0x62D0, 0x89FC, 0x6539, 0x8A40, 0x9B41,
- 0x8A41, 0x6666, 0x8A42, 0x68B0, 0x8A43, 0x6D77, 0x8A44, 0x7070, 0x8A45, 0x754C, 0x8A46, 0x7686, 0x8A47, 0x7D75, 0x8A48, 0x82A5,
- 0x8A49, 0x87F9, 0x8A4A, 0x958B, 0x8A4B, 0x968E, 0x8A4C, 0x8C9D, 0x8A4D, 0x51F1, 0x8A4E, 0x52BE, 0x8A4F, 0x5916, 0x8A50, 0x54B3,
- 0x8A51, 0x5BB3, 0x8A52, 0x5D16, 0x8A53, 0x6168, 0x8A54, 0x6982, 0x8A55, 0x6DAF, 0x8A56, 0x788D, 0x8A57, 0x84CB, 0x8A58, 0x8857,
- 0x8A59, 0x8A72, 0x8A5A, 0x93A7, 0x8A5B, 0x9AB8, 0x8A5C, 0x6D6C, 0x8A5D, 0x99A8, 0x8A5E, 0x86D9, 0x8A5F, 0x57A3, 0x8A60, 0x67FF,
- 0x8A61, 0x86CE, 0x8A62, 0x920E, 0x8A63, 0x5283, 0x8A64, 0x5687, 0x8A65, 0x5404, 0x8A66, 0x5ED3, 0x8A67, 0x62E1, 0x8A68, 0x64B9,
- 0x8A69, 0x683C, 0x8A6A, 0x6838, 0x8A6B, 0x6BBB, 0x8A6C, 0x7372, 0x8A6D, 0x78BA, 0x8A6E, 0x7A6B, 0x8A6F, 0x899A, 0x8A70, 0x89D2,
- 0x8A71, 0x8D6B, 0x8A72, 0x8F03, 0x8A73, 0x90ED, 0x8A74, 0x95A3, 0x8A75, 0x9694, 0x8A76, 0x9769, 0x8A77, 0x5B66, 0x8A78, 0x5CB3,
- 0x8A79, 0x697D, 0x8A7A, 0x984D, 0x8A7B, 0x984E, 0x8A7C, 0x639B, 0x8A7D, 0x7B20, 0x8A7E, 0x6A2B, 0x8A80, 0x6A7F, 0x8A81, 0x68B6,
- 0x8A82, 0x9C0D, 0x8A83, 0x6F5F, 0x8A84, 0x5272, 0x8A85, 0x559D, 0x8A86, 0x6070, 0x8A87, 0x62EC, 0x8A88, 0x6D3B, 0x8A89, 0x6E07,
- 0x8A8A, 0x6ED1, 0x8A8B, 0x845B, 0x8A8C, 0x8910, 0x8A8D, 0x8F44, 0x8A8E, 0x4E14, 0x8A8F, 0x9C39, 0x8A90, 0x53F6, 0x8A91, 0x691B,
- 0x8A92, 0x6A3A, 0x8A93, 0x9784, 0x8A94, 0x682A, 0x8A95, 0x515C, 0x8A96, 0x7AC3, 0x8A97, 0x84B2, 0x8A98, 0x91DC, 0x8A99, 0x938C,
- 0x8A9A, 0x565B, 0x8A9B, 0x9D28, 0x8A9C, 0x6822, 0x8A9D, 0x8305, 0x8A9E, 0x8431, 0x8A9F, 0x7CA5, 0x8AA0, 0x5208, 0x8AA1, 0x82C5,
- 0x8AA2, 0x74E6, 0x8AA3, 0x4E7E, 0x8AA4, 0x4F83, 0x8AA5, 0x51A0, 0x8AA6, 0x5BD2, 0x8AA7, 0x520A, 0x8AA8, 0x52D8, 0x8AA9, 0x52E7,
- 0x8AAA, 0x5DFB, 0x8AAB, 0x559A, 0x8AAC, 0x582A, 0x8AAD, 0x59E6, 0x8AAE, 0x5B8C, 0x8AAF, 0x5B98, 0x8AB0, 0x5BDB, 0x8AB1, 0x5E72,
- 0x8AB2, 0x5E79, 0x8AB3, 0x60A3, 0x8AB4, 0x611F, 0x8AB5, 0x6163, 0x8AB6, 0x61BE, 0x8AB7, 0x63DB, 0x8AB8, 0x6562, 0x8AB9, 0x67D1,
- 0x8ABA, 0x6853, 0x8ABB, 0x68FA, 0x8ABC, 0x6B3E, 0x8ABD, 0x6B53, 0x8ABE, 0x6C57, 0x8ABF, 0x6F22, 0x8AC0, 0x6F97, 0x8AC1, 0x6F45,
- 0x8AC2, 0x74B0, 0x8AC3, 0x7518, 0x8AC4, 0x76E3, 0x8AC5, 0x770B, 0x8AC6, 0x7AFF, 0x8AC7, 0x7BA1, 0x8AC8, 0x7C21, 0x8AC9, 0x7DE9,
- 0x8ACA, 0x7F36, 0x8ACB, 0x7FF0, 0x8ACC, 0x809D, 0x8ACD, 0x8266, 0x8ACE, 0x839E, 0x8ACF, 0x89B3, 0x8AD0, 0x8ACC, 0x8AD1, 0x8CAB,
- 0x8AD2, 0x9084, 0x8AD3, 0x9451, 0x8AD4, 0x9593, 0x8AD5, 0x9591, 0x8AD6, 0x95A2, 0x8AD7, 0x9665, 0x8AD8, 0x97D3, 0x8AD9, 0x9928,
- 0x8ADA, 0x8218, 0x8ADB, 0x4E38, 0x8ADC, 0x542B, 0x8ADD, 0x5CB8, 0x8ADE, 0x5DCC, 0x8ADF, 0x73A9, 0x8AE0, 0x764C, 0x8AE1, 0x773C,
- 0x8AE2, 0x5CA9, 0x8AE3, 0x7FEB, 0x8AE4, 0x8D0B, 0x8AE5, 0x96C1, 0x8AE6, 0x9811, 0x8AE7, 0x9854, 0x8AE8, 0x9858, 0x8AE9, 0x4F01,
- 0x8AEA, 0x4F0E, 0x8AEB, 0x5371, 0x8AEC, 0x559C, 0x8AED, 0x5668, 0x8AEE, 0x57FA, 0x8AEF, 0x5947, 0x8AF0, 0x5B09, 0x8AF1, 0x5BC4,
- 0x8AF2, 0x5C90, 0x8AF3, 0x5E0C, 0x8AF4, 0x5E7E, 0x8AF5, 0x5FCC, 0x8AF6, 0x63EE, 0x8AF7, 0x673A, 0x8AF8, 0x65D7, 0x8AF9, 0x65E2,
- 0x8AFA, 0x671F, 0x8AFB, 0x68CB, 0x8AFC, 0x68C4, 0x8B40, 0x6A5F, 0x8B41, 0x5E30, 0x8B42, 0x6BC5, 0x8B43, 0x6C17, 0x8B44, 0x6C7D,
- 0x8B45, 0x757F, 0x8B46, 0x7948, 0x8B47, 0x5B63, 0x8B48, 0x7A00, 0x8B49, 0x7D00, 0x8B4A, 0x5FBD, 0x8B4B, 0x898F, 0x8B4C, 0x8A18,
- 0x8B4D, 0x8CB4, 0x8B4E, 0x8D77, 0x8B4F, 0x8ECC, 0x8B50, 0x8F1D, 0x8B51, 0x98E2, 0x8B52, 0x9A0E, 0x8B53, 0x9B3C, 0x8B54, 0x4E80,
- 0x8B55, 0x507D, 0x8B56, 0x5100, 0x8B57, 0x5993, 0x8B58, 0x5B9C, 0x8B59, 0x622F, 0x8B5A, 0x6280, 0x8B5B, 0x64EC, 0x8B5C, 0x6B3A,
- 0x8B5D, 0x72A0, 0x8B5E, 0x7591, 0x8B5F, 0x7947, 0x8B60, 0x7FA9, 0x8B61, 0x87FB, 0x8B62, 0x8ABC, 0x8B63, 0x8B70, 0x8B64, 0x63AC,
- 0x8B65, 0x83CA, 0x8B66, 0x97A0, 0x8B67, 0x5409, 0x8B68, 0x5403, 0x8B69, 0x55AB, 0x8B6A, 0x6854, 0x8B6B, 0x6A58, 0x8B6C, 0x8A70,
- 0x8B6D, 0x7827, 0x8B6E, 0x6775, 0x8B6F, 0x9ECD, 0x8B70, 0x5374, 0x8B71, 0x5BA2, 0x8B72, 0x811A, 0x8B73, 0x8650, 0x8B74, 0x9006,
- 0x8B75, 0x4E18, 0x8B76, 0x4E45, 0x8B77, 0x4EC7, 0x8B78, 0x4F11, 0x8B79, 0x53CA, 0x8B7A, 0x5438, 0x8B7B, 0x5BAE, 0x8B7C, 0x5F13,
- 0x8B7D, 0x6025, 0x8B7E, 0x6551, 0x8B80, 0x673D, 0x8B81, 0x6C42, 0x8B82, 0x6C72, 0x8B83, 0x6CE3, 0x8B84, 0x7078, 0x8B85, 0x7403,
- 0x8B86, 0x7A76, 0x8B87, 0x7AAE, 0x8B88, 0x7B08, 0x8B89, 0x7D1A, 0x8B8A, 0x7CFE, 0x8B8B, 0x7D66, 0x8B8C, 0x65E7, 0x8B8D, 0x725B,
- 0x8B8E, 0x53BB, 0x8B8F, 0x5C45, 0x8B90, 0x5DE8, 0x8B91, 0x62D2, 0x8B92, 0x62E0, 0x8B93, 0x6319, 0x8B94, 0x6E20, 0x8B95, 0x865A,
- 0x8B96, 0x8A31, 0x8B97, 0x8DDD, 0x8B98, 0x92F8, 0x8B99, 0x6F01, 0x8B9A, 0x79A6, 0x8B9B, 0x9B5A, 0x8B9C, 0x4EA8, 0x8B9D, 0x4EAB,
- 0x8B9E, 0x4EAC, 0x8B9F, 0x4F9B, 0x8BA0, 0x4FA0, 0x8BA1, 0x50D1, 0x8BA2, 0x5147, 0x8BA3, 0x7AF6, 0x8BA4, 0x5171, 0x8BA5, 0x51F6,
- 0x8BA6, 0x5354, 0x8BA7, 0x5321, 0x8BA8, 0x537F, 0x8BA9, 0x53EB, 0x8BAA, 0x55AC, 0x8BAB, 0x5883, 0x8BAC, 0x5CE1, 0x8BAD, 0x5F37,
- 0x8BAE, 0x5F4A, 0x8BAF, 0x602F, 0x8BB0, 0x6050, 0x8BB1, 0x606D, 0x8BB2, 0x631F, 0x8BB3, 0x6559, 0x8BB4, 0x6A4B, 0x8BB5, 0x6CC1,
- 0x8BB6, 0x72C2, 0x8BB7, 0x72ED, 0x8BB8, 0x77EF, 0x8BB9, 0x80F8, 0x8BBA, 0x8105, 0x8BBB, 0x8208, 0x8BBC, 0x854E, 0x8BBD, 0x90F7,
- 0x8BBE, 0x93E1, 0x8BBF, 0x97FF, 0x8BC0, 0x9957, 0x8BC1, 0x9A5A, 0x8BC2, 0x4EF0, 0x8BC3, 0x51DD, 0x8BC4, 0x5C2D, 0x8BC5, 0x6681,
- 0x8BC6, 0x696D, 0x8BC7, 0x5C40, 0x8BC8, 0x66F2, 0x8BC9, 0x6975, 0x8BCA, 0x7389, 0x8BCB, 0x6850, 0x8BCC, 0x7C81, 0x8BCD, 0x50C5,
- 0x8BCE, 0x52E4, 0x8BCF, 0x5747, 0x8BD0, 0x5DFE, 0x8BD1, 0x9326, 0x8BD2, 0x65A4, 0x8BD3, 0x6B23, 0x8BD4, 0x6B3D, 0x8BD5, 0x7434,
- 0x8BD6, 0x7981, 0x8BD7, 0x79BD, 0x8BD8, 0x7B4B, 0x8BD9, 0x7DCA, 0x8BDA, 0x82B9, 0x8BDB, 0x83CC, 0x8BDC, 0x887F, 0x8BDD, 0x895F,
- 0x8BDE, 0x8B39, 0x8BDF, 0x8FD1, 0x8BE0, 0x91D1, 0x8BE1, 0x541F, 0x8BE2, 0x9280, 0x8BE3, 0x4E5D, 0x8BE4, 0x5036, 0x8BE5, 0x53E5,
- 0x8BE6, 0x533A, 0x8BE7, 0x72D7, 0x8BE8, 0x7396, 0x8BE9, 0x77E9, 0x8BEA, 0x82E6, 0x8BEB, 0x8EAF, 0x8BEC, 0x99C6, 0x8BED, 0x99C8,
- 0x8BEE, 0x99D2, 0x8BEF, 0x5177, 0x8BF0, 0x611A, 0x8BF1, 0x865E, 0x8BF2, 0x55B0, 0x8BF3, 0x7A7A, 0x8BF4, 0x5076, 0x8BF5, 0x5BD3,
- 0x8BF6, 0x9047, 0x8BF7, 0x9685, 0x8BF8, 0x4E32, 0x8BF9, 0x6ADB, 0x8BFA, 0x91E7, 0x8BFB, 0x5C51, 0x8BFC, 0x5C48, 0x8C40, 0x6398,
- 0x8C41, 0x7A9F, 0x8C42, 0x6C93, 0x8C43, 0x9774, 0x8C44, 0x8F61, 0x8C45, 0x7AAA, 0x8C46, 0x718A, 0x8C47, 0x9688, 0x8C48, 0x7C82,
- 0x8C49, 0x6817, 0x8C4A, 0x7E70, 0x8C4B, 0x6851, 0x8C4C, 0x936C, 0x8C4D, 0x52F2, 0x8C4E, 0x541B, 0x8C4F, 0x85AB, 0x8C50, 0x8A13,
- 0x8C51, 0x7FA4, 0x8C52, 0x8ECD, 0x8C53, 0x90E1, 0x8C54, 0x5366, 0x8C55, 0x8888, 0x8C56, 0x7941, 0x8C57, 0x4FC2, 0x8C58, 0x50BE,
- 0x8C59, 0x5211, 0x8C5A, 0x5144, 0x8C5B, 0x5553, 0x8C5C, 0x572D, 0x8C5D, 0x73EA, 0x8C5E, 0x578B, 0x8C5F, 0x5951, 0x8C60, 0x5F62,
- 0x8C61, 0x5F84, 0x8C62, 0x6075, 0x8C63, 0x6176, 0x8C64, 0x6167, 0x8C65, 0x61A9, 0x8C66, 0x63B2, 0x8C67, 0x643A, 0x8C68, 0x656C,
- 0x8C69, 0x666F, 0x8C6A, 0x6842, 0x8C6B, 0x6E13, 0x8C6C, 0x7566, 0x8C6D, 0x7A3D, 0x8C6E, 0x7CFB, 0x8C6F, 0x7D4C, 0x8C70, 0x7D99,
- 0x8C71, 0x7E4B, 0x8C72, 0x7F6B, 0x8C73, 0x830E, 0x8C74, 0x834A, 0x8C75, 0x86CD, 0x8C76, 0x8A08, 0x8C77, 0x8A63, 0x8C78, 0x8B66,
- 0x8C79, 0x8EFD, 0x8C7A, 0x981A, 0x8C7B, 0x9D8F, 0x8C7C, 0x82B8, 0x8C7D, 0x8FCE, 0x8C7E, 0x9BE8, 0x8C80, 0x5287, 0x8C81, 0x621F,
- 0x8C82, 0x6483, 0x8C83, 0x6FC0, 0x8C84, 0x9699, 0x8C85, 0x6841, 0x8C86, 0x5091, 0x8C87, 0x6B20, 0x8C88, 0x6C7A, 0x8C89, 0x6F54,
- 0x8C8A, 0x7A74, 0x8C8B, 0x7D50, 0x8C8C, 0x8840, 0x8C8D, 0x8A23, 0x8C8E, 0x6708, 0x8C8F, 0x4EF6, 0x8C90, 0x5039, 0x8C91, 0x5026,
- 0x8C92, 0x5065, 0x8C93, 0x517C, 0x8C94, 0x5238, 0x8C95, 0x5263, 0x8C96, 0x55A7, 0x8C97, 0x570F, 0x8C98, 0x5805, 0x8C99, 0x5ACC,
- 0x8C9A, 0x5EFA, 0x8C9B, 0x61B2, 0x8C9C, 0x61F8, 0x8C9D, 0x62F3, 0x8C9E, 0x6372, 0x8C9F, 0x691C, 0x8CA0, 0x6A29, 0x8CA1, 0x727D,
- 0x8CA2, 0x72AC, 0x8CA3, 0x732E, 0x8CA4, 0x7814, 0x8CA5, 0x786F, 0x8CA6, 0x7D79, 0x8CA7, 0x770C, 0x8CA8, 0x80A9, 0x8CA9, 0x898B,
- 0x8CAA, 0x8B19, 0x8CAB, 0x8CE2, 0x8CAC, 0x8ED2, 0x8CAD, 0x9063, 0x8CAE, 0x9375, 0x8CAF, 0x967A, 0x8CB0, 0x9855, 0x8CB1, 0x9A13,
- 0x8CB2, 0x9E78, 0x8CB3, 0x5143, 0x8CB4, 0x539F, 0x8CB5, 0x53B3, 0x8CB6, 0x5E7B, 0x8CB7, 0x5F26, 0x8CB8, 0x6E1B, 0x8CB9, 0x6E90,
- 0x8CBA, 0x7384, 0x8CBB, 0x73FE, 0x8CBC, 0x7D43, 0x8CBD, 0x8237, 0x8CBE, 0x8A00, 0x8CBF, 0x8AFA, 0x8CC0, 0x9650, 0x8CC1, 0x4E4E,
- 0x8CC2, 0x500B, 0x8CC3, 0x53E4, 0x8CC4, 0x547C, 0x8CC5, 0x56FA, 0x8CC6, 0x59D1, 0x8CC7, 0x5B64, 0x8CC8, 0x5DF1, 0x8CC9, 0x5EAB,
- 0x8CCA, 0x5F27, 0x8CCB, 0x6238, 0x8CCC, 0x6545, 0x8CCD, 0x67AF, 0x8CCE, 0x6E56, 0x8CCF, 0x72D0, 0x8CD0, 0x7CCA, 0x8CD1, 0x88B4,
- 0x8CD2, 0x80A1, 0x8CD3, 0x80E1, 0x8CD4, 0x83F0, 0x8CD5, 0x864E, 0x8CD6, 0x8A87, 0x8CD7, 0x8DE8, 0x8CD8, 0x9237, 0x8CD9, 0x96C7,
- 0x8CDA, 0x9867, 0x8CDB, 0x9F13, 0x8CDC, 0x4E94, 0x8CDD, 0x4E92, 0x8CDE, 0x4F0D, 0x8CDF, 0x5348, 0x8CE0, 0x5449, 0x8CE1, 0x543E,
- 0x8CE2, 0x5A2F, 0x8CE3, 0x5F8C, 0x8CE4, 0x5FA1, 0x8CE5, 0x609F, 0x8CE6, 0x68A7, 0x8CE7, 0x6A8E, 0x8CE8, 0x745A, 0x8CE9, 0x7881,
- 0x8CEA, 0x8A9E, 0x8CEB, 0x8AA4, 0x8CEC, 0x8B77, 0x8CED, 0x9190, 0x8CEE, 0x4E5E, 0x8CEF, 0x9BC9, 0x8CF0, 0x4EA4, 0x8CF1, 0x4F7C,
- 0x8CF2, 0x4FAF, 0x8CF3, 0x5019, 0x8CF4, 0x5016, 0x8CF5, 0x5149, 0x8CF6, 0x516C, 0x8CF7, 0x529F, 0x8CF8, 0x52B9, 0x8CF9, 0x52FE,
- 0x8CFA, 0x539A, 0x8CFB, 0x53E3, 0x8CFC, 0x5411, 0x8D40, 0x540E, 0x8D41, 0x5589, 0x8D42, 0x5751, 0x8D43, 0x57A2, 0x8D44, 0x597D,
- 0x8D45, 0x5B54, 0x8D46, 0x5B5D, 0x8D47, 0x5B8F, 0x8D48, 0x5DE5, 0x8D49, 0x5DE7, 0x8D4A, 0x5DF7, 0x8D4B, 0x5E78, 0x8D4C, 0x5E83,
- 0x8D4D, 0x5E9A, 0x8D4E, 0x5EB7, 0x8D4F, 0x5F18, 0x8D50, 0x6052, 0x8D51, 0x614C, 0x8D52, 0x6297, 0x8D53, 0x62D8, 0x8D54, 0x63A7,
- 0x8D55, 0x653B, 0x8D56, 0x6602, 0x8D57, 0x6643, 0x8D58, 0x66F4, 0x8D59, 0x676D, 0x8D5A, 0x6821, 0x8D5B, 0x6897, 0x8D5C, 0x69CB,
- 0x8D5D, 0x6C5F, 0x8D5E, 0x6D2A, 0x8D5F, 0x6D69, 0x8D60, 0x6E2F, 0x8D61, 0x6E9D, 0x8D62, 0x7532, 0x8D63, 0x7687, 0x8D64, 0x786C,
- 0x8D65, 0x7A3F, 0x8D66, 0x7CE0, 0x8D67, 0x7D05, 0x8D68, 0x7D18, 0x8D69, 0x7D5E, 0x8D6A, 0x7DB1, 0x8D6B, 0x8015, 0x8D6C, 0x8003,
- 0x8D6D, 0x80AF, 0x8D6E, 0x80B1, 0x8D6F, 0x8154, 0x8D70, 0x818F, 0x8D71, 0x822A, 0x8D72, 0x8352, 0x8D73, 0x884C, 0x8D74, 0x8861,
- 0x8D75, 0x8B1B, 0x8D76, 0x8CA2, 0x8D77, 0x8CFC, 0x8D78, 0x90CA, 0x8D79, 0x9175, 0x8D7A, 0x9271, 0x8D7B, 0x783F, 0x8D7C, 0x92FC,
- 0x8D7D, 0x95A4, 0x8D7E, 0x964D, 0x8D80, 0x9805, 0x8D81, 0x9999, 0x8D82, 0x9AD8, 0x8D83, 0x9D3B, 0x8D84, 0x525B, 0x8D85, 0x52AB,
- 0x8D86, 0x53F7, 0x8D87, 0x5408, 0x8D88, 0x58D5, 0x8D89, 0x62F7, 0x8D8A, 0x6FE0, 0x8D8B, 0x8C6A, 0x8D8C, 0x8F5F, 0x8D8D, 0x9EB9,
- 0x8D8E, 0x514B, 0x8D8F, 0x523B, 0x8D90, 0x544A, 0x8D91, 0x56FD, 0x8D92, 0x7A40, 0x8D93, 0x9177, 0x8D94, 0x9D60, 0x8D95, 0x9ED2,
- 0x8D96, 0x7344, 0x8D97, 0x6F09, 0x8D98, 0x8170, 0x8D99, 0x7511, 0x8D9A, 0x5FFD, 0x8D9B, 0x60DA, 0x8D9C, 0x9AA8, 0x8D9D, 0x72DB,
- 0x8D9E, 0x8FBC, 0x8D9F, 0x6B64, 0x8DA0, 0x9803, 0x8DA1, 0x4ECA, 0x8DA2, 0x56F0, 0x8DA3, 0x5764, 0x8DA4, 0x58BE, 0x8DA5, 0x5A5A,
- 0x8DA6, 0x6068, 0x8DA7, 0x61C7, 0x8DA8, 0x660F, 0x8DA9, 0x6606, 0x8DAA, 0x6839, 0x8DAB, 0x68B1, 0x8DAC, 0x6DF7, 0x8DAD, 0x75D5,
- 0x8DAE, 0x7D3A, 0x8DAF, 0x826E, 0x8DB0, 0x9B42, 0x8DB1, 0x4E9B, 0x8DB2, 0x4F50, 0x8DB3, 0x53C9, 0x8DB4, 0x5506, 0x8DB5, 0x5D6F,
- 0x8DB6, 0x5DE6, 0x8DB7, 0x5DEE, 0x8DB8, 0x67FB, 0x8DB9, 0x6C99, 0x8DBA, 0x7473, 0x8DBB, 0x7802, 0x8DBC, 0x8A50, 0x8DBD, 0x9396,
- 0x8DBE, 0x88DF, 0x8DBF, 0x5750, 0x8DC0, 0x5EA7, 0x8DC1, 0x632B, 0x8DC2, 0x50B5, 0x8DC3, 0x50AC, 0x8DC4, 0x518D, 0x8DC5, 0x6700,
- 0x8DC6, 0x54C9, 0x8DC7, 0x585E, 0x8DC8, 0x59BB, 0x8DC9, 0x5BB0, 0x8DCA, 0x5F69, 0x8DCB, 0x624D, 0x8DCC, 0x63A1, 0x8DCD, 0x683D,
- 0x8DCE, 0x6B73, 0x8DCF, 0x6E08, 0x8DD0, 0x707D, 0x8DD1, 0x91C7, 0x8DD2, 0x7280, 0x8DD3, 0x7815, 0x8DD4, 0x7826, 0x8DD5, 0x796D,
- 0x8DD6, 0x658E, 0x8DD7, 0x7D30, 0x8DD8, 0x83DC, 0x8DD9, 0x88C1, 0x8DDA, 0x8F09, 0x8DDB, 0x969B, 0x8DDC, 0x5264, 0x8DDD, 0x5728,
- 0x8DDE, 0x6750, 0x8DDF, 0x7F6A, 0x8DE0, 0x8CA1, 0x8DE1, 0x51B4, 0x8DE2, 0x5742, 0x8DE3, 0x962A, 0x8DE4, 0x583A, 0x8DE5, 0x698A,
- 0x8DE6, 0x80B4, 0x8DE7, 0x54B2, 0x8DE8, 0x5D0E, 0x8DE9, 0x57FC, 0x8DEA, 0x7895, 0x8DEB, 0x9DFA, 0x8DEC, 0x4F5C, 0x8DED, 0x524A,
- 0x8DEE, 0x548B, 0x8DEF, 0x643E, 0x8DF0, 0x6628, 0x8DF1, 0x6714, 0x8DF2, 0x67F5, 0x8DF3, 0x7A84, 0x8DF4, 0x7B56, 0x8DF5, 0x7D22,
- 0x8DF6, 0x932F, 0x8DF7, 0x685C, 0x8DF8, 0x9BAD, 0x8DF9, 0x7B39, 0x8DFA, 0x5319, 0x8DFB, 0x518A, 0x8DFC, 0x5237, 0x8E40, 0x5BDF,
- 0x8E41, 0x62F6, 0x8E42, 0x64AE, 0x8E43, 0x64E6, 0x8E44, 0x672D, 0x8E45, 0x6BBA, 0x8E46, 0x85A9, 0x8E47, 0x96D1, 0x8E48, 0x7690,
- 0x8E49, 0x9BD6, 0x8E4A, 0x634C, 0x8E4B, 0x9306, 0x8E4C, 0x9BAB, 0x8E4D, 0x76BF, 0x8E4E, 0x6652, 0x8E4F, 0x4E09, 0x8E50, 0x5098,
- 0x8E51, 0x53C2, 0x8E52, 0x5C71, 0x8E53, 0x60E8, 0x8E54, 0x6492, 0x8E55, 0x6563, 0x8E56, 0x685F, 0x8E57, 0x71E6, 0x8E58, 0x73CA,
- 0x8E59, 0x7523, 0x8E5A, 0x7B97, 0x8E5B, 0x7E82, 0x8E5C, 0x8695, 0x8E5D, 0x8B83, 0x8E5E, 0x8CDB, 0x8E5F, 0x9178, 0x8E60, 0x9910,
- 0x8E61, 0x65AC, 0x8E62, 0x66AB, 0x8E63, 0x6B8B, 0x8E64, 0x4ED5, 0x8E65, 0x4ED4, 0x8E66, 0x4F3A, 0x8E67, 0x4F7F, 0x8E68, 0x523A,
- 0x8E69, 0x53F8, 0x8E6A, 0x53F2, 0x8E6B, 0x55E3, 0x8E6C, 0x56DB, 0x8E6D, 0x58EB, 0x8E6E, 0x59CB, 0x8E6F, 0x59C9, 0x8E70, 0x59FF,
- 0x8E71, 0x5B50, 0x8E72, 0x5C4D, 0x8E73, 0x5E02, 0x8E74, 0x5E2B, 0x8E75, 0x5FD7, 0x8E76, 0x601D, 0x8E77, 0x6307, 0x8E78, 0x652F,
- 0x8E79, 0x5B5C, 0x8E7A, 0x65AF, 0x8E7B, 0x65BD, 0x8E7C, 0x65E8, 0x8E7D, 0x679D, 0x8E7E, 0x6B62, 0x8E80, 0x6B7B, 0x8E81, 0x6C0F,
- 0x8E82, 0x7345, 0x8E83, 0x7949, 0x8E84, 0x79C1, 0x8E85, 0x7CF8, 0x8E86, 0x7D19, 0x8E87, 0x7D2B, 0x8E88, 0x80A2, 0x8E89, 0x8102,
- 0x8E8A, 0x81F3, 0x8E8B, 0x8996, 0x8E8C, 0x8A5E, 0x8E8D, 0x8A69, 0x8E8E, 0x8A66, 0x8E8F, 0x8A8C, 0x8E90, 0x8AEE, 0x8E91, 0x8CC7,
- 0x8E92, 0x8CDC, 0x8E93, 0x96CC, 0x8E94, 0x98FC, 0x8E95, 0x6B6F, 0x8E96, 0x4E8B, 0x8E97, 0x4F3C, 0x8E98, 0x4F8D, 0x8E99, 0x5150,
- 0x8E9A, 0x5B57, 0x8E9B, 0x5BFA, 0x8E9C, 0x6148, 0x8E9D, 0x6301, 0x8E9E, 0x6642, 0x8E9F, 0x6B21, 0x8EA0, 0x6ECB, 0x8EA1, 0x6CBB,
- 0x8EA2, 0x723E, 0x8EA3, 0x74BD, 0x8EA4, 0x75D4, 0x8EA5, 0x78C1, 0x8EA6, 0x793A, 0x8EA7, 0x800C, 0x8EA8, 0x8033, 0x8EA9, 0x81EA,
- 0x8EAA, 0x8494, 0x8EAB, 0x8F9E, 0x8EAC, 0x6C50, 0x8EAD, 0x9E7F, 0x8EAE, 0x5F0F, 0x8EAF, 0x8B58, 0x8EB0, 0x9D2B, 0x8EB1, 0x7AFA,
- 0x8EB2, 0x8EF8, 0x8EB3, 0x5B8D, 0x8EB4, 0x96EB, 0x8EB5, 0x4E03, 0x8EB6, 0x53F1, 0x8EB7, 0x57F7, 0x8EB8, 0x5931, 0x8EB9, 0x5AC9,
- 0x8EBA, 0x5BA4, 0x8EBB, 0x6089, 0x8EBC, 0x6E7F, 0x8EBD, 0x6F06, 0x8EBE, 0x75BE, 0x8EBF, 0x8CEA, 0x8EC0, 0x5B9F, 0x8EC1, 0x8500,
- 0x8EC2, 0x7BE0, 0x8EC3, 0x5072, 0x8EC4, 0x67F4, 0x8EC5, 0x829D, 0x8EC6, 0x5C61, 0x8EC7, 0x854A, 0x8EC8, 0x7E1E, 0x8EC9, 0x820E,
- 0x8ECA, 0x5199, 0x8ECB, 0x5C04, 0x8ECC, 0x6368, 0x8ECD, 0x8D66, 0x8ECE, 0x659C, 0x8ECF, 0x716E, 0x8ED0, 0x793E, 0x8ED1, 0x7D17,
- 0x8ED2, 0x8005, 0x8ED3, 0x8B1D, 0x8ED4, 0x8ECA, 0x8ED5, 0x906E, 0x8ED6, 0x86C7, 0x8ED7, 0x90AA, 0x8ED8, 0x501F, 0x8ED9, 0x52FA,
- 0x8EDA, 0x5C3A, 0x8EDB, 0x6753, 0x8EDC, 0x707C, 0x8EDD, 0x7235, 0x8EDE, 0x914C, 0x8EDF, 0x91C8, 0x8EE0, 0x932B, 0x8EE1, 0x82E5,
- 0x8EE2, 0x5BC2, 0x8EE3, 0x5F31, 0x8EE4, 0x60F9, 0x8EE5, 0x4E3B, 0x8EE6, 0x53D6, 0x8EE7, 0x5B88, 0x8EE8, 0x624B, 0x8EE9, 0x6731,
- 0x8EEA, 0x6B8A, 0x8EEB, 0x72E9, 0x8EEC, 0x73E0, 0x8EED, 0x7A2E, 0x8EEE, 0x816B, 0x8EEF, 0x8DA3, 0x8EF0, 0x9152, 0x8EF1, 0x9996,
- 0x8EF2, 0x5112, 0x8EF3, 0x53D7, 0x8EF4, 0x546A, 0x8EF5, 0x5BFF, 0x8EF6, 0x6388, 0x8EF7, 0x6A39, 0x8EF8, 0x7DAC, 0x8EF9, 0x9700,
- 0x8EFA, 0x56DA, 0x8EFB, 0x53CE, 0x8EFC, 0x5468, 0x8F40, 0x5B97, 0x8F41, 0x5C31, 0x8F42, 0x5DDE, 0x8F43, 0x4FEE, 0x8F44, 0x6101,
- 0x8F45, 0x62FE, 0x8F46, 0x6D32, 0x8F47, 0x79C0, 0x8F48, 0x79CB, 0x8F49, 0x7D42, 0x8F4A, 0x7E4D, 0x8F4B, 0x7FD2, 0x8F4C, 0x81ED,
- 0x8F4D, 0x821F, 0x8F4E, 0x8490, 0x8F4F, 0x8846, 0x8F50, 0x8972, 0x8F51, 0x8B90, 0x8F52, 0x8E74, 0x8F53, 0x8F2F, 0x8F54, 0x9031,
- 0x8F55, 0x914B, 0x8F56, 0x916C, 0x8F57, 0x96C6, 0x8F58, 0x919C, 0x8F59, 0x4EC0, 0x8F5A, 0x4F4F, 0x8F5B, 0x5145, 0x8F5C, 0x5341,
- 0x8F5D, 0x5F93, 0x8F5E, 0x620E, 0x8F5F, 0x67D4, 0x8F60, 0x6C41, 0x8F61, 0x6E0B, 0x8F62, 0x7363, 0x8F63, 0x7E26, 0x8F64, 0x91CD,
- 0x8F65, 0x9283, 0x8F66, 0x53D4, 0x8F67, 0x5919, 0x8F68, 0x5BBF, 0x8F69, 0x6DD1, 0x8F6A, 0x795D, 0x8F6B, 0x7E2E, 0x8F6C, 0x7C9B,
- 0x8F6D, 0x587E, 0x8F6E, 0x719F, 0x8F6F, 0x51FA, 0x8F70, 0x8853, 0x8F71, 0x8FF0, 0x8F72, 0x4FCA, 0x8F73, 0x5CFB, 0x8F74, 0x6625,
- 0x8F75, 0x77AC, 0x8F76, 0x7AE3, 0x8F77, 0x821C, 0x8F78, 0x99FF, 0x8F79, 0x51C6, 0x8F7A, 0x5FAA, 0x8F7B, 0x65EC, 0x8F7C, 0x696F,
- 0x8F7D, 0x6B89, 0x8F7E, 0x6DF3, 0x8F80, 0x6E96, 0x8F81, 0x6F64, 0x8F82, 0x76FE, 0x8F83, 0x7D14, 0x8F84, 0x5DE1, 0x8F85, 0x9075,
- 0x8F86, 0x9187, 0x8F87, 0x9806, 0x8F88, 0x51E6, 0x8F89, 0x521D, 0x8F8A, 0x6240, 0x8F8B, 0x6691, 0x8F8C, 0x66D9, 0x8F8D, 0x6E1A,
- 0x8F8E, 0x5EB6, 0x8F8F, 0x7DD2, 0x8F90, 0x7F72, 0x8F91, 0x66F8, 0x8F92, 0x85AF, 0x8F93, 0x85F7, 0x8F94, 0x8AF8, 0x8F95, 0x52A9,
- 0x8F96, 0x53D9, 0x8F97, 0x5973, 0x8F98, 0x5E8F, 0x8F99, 0x5F90, 0x8F9A, 0x6055, 0x8F9B, 0x92E4, 0x8F9C, 0x9664, 0x8F9D, 0x50B7,
- 0x8F9E, 0x511F, 0x8F9F, 0x52DD, 0x8FA0, 0x5320, 0x8FA1, 0x5347, 0x8FA2, 0x53EC, 0x8FA3, 0x54E8, 0x8FA4, 0x5546, 0x8FA5, 0x5531,
- 0x8FA6, 0x5617, 0x8FA7, 0x5968, 0x8FA8, 0x59BE, 0x8FA9, 0x5A3C, 0x8FAA, 0x5BB5, 0x8FAB, 0x5C06, 0x8FAC, 0x5C0F, 0x8FAD, 0x5C11,
- 0x8FAE, 0x5C1A, 0x8FAF, 0x5E84, 0x8FB0, 0x5E8A, 0x8FB1, 0x5EE0, 0x8FB2, 0x5F70, 0x8FB3, 0x627F, 0x8FB4, 0x6284, 0x8FB5, 0x62DB,
- 0x8FB6, 0x638C, 0x8FB7, 0x6377, 0x8FB8, 0x6607, 0x8FB9, 0x660C, 0x8FBA, 0x662D, 0x8FBB, 0x6676, 0x8FBC, 0x677E, 0x8FBD, 0x68A2,
- 0x8FBE, 0x6A1F, 0x8FBF, 0x6A35, 0x8FC0, 0x6CBC, 0x8FC1, 0x6D88, 0x8FC2, 0x6E09, 0x8FC3, 0x6E58, 0x8FC4, 0x713C, 0x8FC5, 0x7126,
- 0x8FC6, 0x7167, 0x8FC7, 0x75C7, 0x8FC8, 0x7701, 0x8FC9, 0x785D, 0x8FCA, 0x7901, 0x8FCB, 0x7965, 0x8FCC, 0x79F0, 0x8FCD, 0x7AE0,
- 0x8FCE, 0x7B11, 0x8FCF, 0x7CA7, 0x8FD0, 0x7D39, 0x8FD1, 0x8096, 0x8FD2, 0x83D6, 0x8FD3, 0x848B, 0x8FD4, 0x8549, 0x8FD5, 0x885D,
- 0x8FD6, 0x88F3, 0x8FD7, 0x8A1F, 0x8FD8, 0x8A3C, 0x8FD9, 0x8A54, 0x8FDA, 0x8A73, 0x8FDB, 0x8C61, 0x8FDC, 0x8CDE, 0x8FDD, 0x91A4,
- 0x8FDE, 0x9266, 0x8FDF, 0x937E, 0x8FE0, 0x9418, 0x8FE1, 0x969C, 0x8FE2, 0x9798, 0x8FE3, 0x4E0A, 0x8FE4, 0x4E08, 0x8FE5, 0x4E1E,
- 0x8FE6, 0x4E57, 0x8FE7, 0x5197, 0x8FE8, 0x5270, 0x8FE9, 0x57CE, 0x8FEA, 0x5834, 0x8FEB, 0x58CC, 0x8FEC, 0x5B22, 0x8FED, 0x5E38,
- 0x8FEE, 0x60C5, 0x8FEF, 0x64FE, 0x8FF0, 0x6761, 0x8FF1, 0x6756, 0x8FF2, 0x6D44, 0x8FF3, 0x72B6, 0x8FF4, 0x7573, 0x8FF5, 0x7A63,
- 0x8FF6, 0x84B8, 0x8FF7, 0x8B72, 0x8FF8, 0x91B8, 0x8FF9, 0x9320, 0x8FFA, 0x5631, 0x8FFB, 0x57F4, 0x8FFC, 0x98FE, 0x9040, 0x62ED,
- 0x9041, 0x690D, 0x9042, 0x6B96, 0x9043, 0x71ED, 0x9044, 0x7E54, 0x9045, 0x8077, 0x9046, 0x8272, 0x9047, 0x89E6, 0x9048, 0x98DF,
- 0x9049, 0x8755, 0x904A, 0x8FB1, 0x904B, 0x5C3B, 0x904C, 0x4F38, 0x904D, 0x4FE1, 0x904E, 0x4FB5, 0x904F, 0x5507, 0x9050, 0x5A20,
- 0x9051, 0x5BDD, 0x9052, 0x5BE9, 0x9053, 0x5FC3, 0x9054, 0x614E, 0x9055, 0x632F, 0x9056, 0x65B0, 0x9057, 0x664B, 0x9058, 0x68EE,
- 0x9059, 0x699B, 0x905A, 0x6D78, 0x905B, 0x6DF1, 0x905C, 0x7533, 0x905D, 0x75B9, 0x905E, 0x771F, 0x905F, 0x795E, 0x9060, 0x79E6,
- 0x9061, 0x7D33, 0x9062, 0x81E3, 0x9063, 0x82AF, 0x9064, 0x85AA, 0x9065, 0x89AA, 0x9066, 0x8A3A, 0x9067, 0x8EAB, 0x9068, 0x8F9B,
- 0x9069, 0x9032, 0x906A, 0x91DD, 0x906B, 0x9707, 0x906C, 0x4EBA, 0x906D, 0x4EC1, 0x906E, 0x5203, 0x906F, 0x5875, 0x9070, 0x58EC,
- 0x9071, 0x5C0B, 0x9072, 0x751A, 0x9073, 0x5C3D, 0x9074, 0x814E, 0x9075, 0x8A0A, 0x9076, 0x8FC5, 0x9077, 0x9663, 0x9078, 0x976D,
- 0x9079, 0x7B25, 0x907A, 0x8ACF, 0x907B, 0x9808, 0x907C, 0x9162, 0x907D, 0x56F3, 0x907E, 0x53A8, 0x9080, 0x9017, 0x9081, 0x5439,
- 0x9082, 0x5782, 0x9083, 0x5E25, 0x9084, 0x63A8, 0x9085, 0x6C34, 0x9086, 0x708A, 0x9087, 0x7761, 0x9088, 0x7C8B, 0x9089, 0x7FE0,
- 0x908A, 0x8870, 0x908B, 0x9042, 0x908C, 0x9154, 0x908D, 0x9310, 0x908E, 0x9318, 0x908F, 0x968F, 0x9090, 0x745E, 0x9091, 0x9AC4,
- 0x9092, 0x5D07, 0x9093, 0x5D69, 0x9094, 0x6570, 0x9095, 0x67A2, 0x9096, 0x8DA8, 0x9097, 0x96DB, 0x9098, 0x636E, 0x9099, 0x6749,
- 0x909A, 0x6919, 0x909B, 0x83C5, 0x909C, 0x9817, 0x909D, 0x96C0, 0x909E, 0x88FE, 0x909F, 0x6F84, 0x90A0, 0x647A, 0x90A1, 0x5BF8,
- 0x90A2, 0x4E16, 0x90A3, 0x702C, 0x90A4, 0x755D, 0x90A5, 0x662F, 0x90A6, 0x51C4, 0x90A7, 0x5236, 0x90A8, 0x52E2, 0x90A9, 0x59D3,
- 0x90AA, 0x5F81, 0x90AB, 0x6027, 0x90AC, 0x6210, 0x90AD, 0x653F, 0x90AE, 0x6574, 0x90AF, 0x661F, 0x90B0, 0x6674, 0x90B1, 0x68F2,
- 0x90B2, 0x6816, 0x90B3, 0x6B63, 0x90B4, 0x6E05, 0x90B5, 0x7272, 0x90B6, 0x751F, 0x90B7, 0x76DB, 0x90B8, 0x7CBE, 0x90B9, 0x8056,
- 0x90BA, 0x58F0, 0x90BB, 0x88FD, 0x90BC, 0x897F, 0x90BD, 0x8AA0, 0x90BE, 0x8A93, 0x90BF, 0x8ACB, 0x90C0, 0x901D, 0x90C1, 0x9192,
- 0x90C2, 0x9752, 0x90C3, 0x9759, 0x90C4, 0x6589, 0x90C5, 0x7A0E, 0x90C6, 0x8106, 0x90C7, 0x96BB, 0x90C8, 0x5E2D, 0x90C9, 0x60DC,
- 0x90CA, 0x621A, 0x90CB, 0x65A5, 0x90CC, 0x6614, 0x90CD, 0x6790, 0x90CE, 0x77F3, 0x90CF, 0x7A4D, 0x90D0, 0x7C4D, 0x90D1, 0x7E3E,
- 0x90D2, 0x810A, 0x90D3, 0x8CAC, 0x90D4, 0x8D64, 0x90D5, 0x8DE1, 0x90D6, 0x8E5F, 0x90D7, 0x78A9, 0x90D8, 0x5207, 0x90D9, 0x62D9,
- 0x90DA, 0x63A5, 0x90DB, 0x6442, 0x90DC, 0x6298, 0x90DD, 0x8A2D, 0x90DE, 0x7A83, 0x90DF, 0x7BC0, 0x90E0, 0x8AAC, 0x90E1, 0x96EA,
- 0x90E2, 0x7D76, 0x90E3, 0x820C, 0x90E4, 0x8749, 0x90E5, 0x4ED9, 0x90E6, 0x5148, 0x90E7, 0x5343, 0x90E8, 0x5360, 0x90E9, 0x5BA3,
- 0x90EA, 0x5C02, 0x90EB, 0x5C16, 0x90EC, 0x5DDD, 0x90ED, 0x6226, 0x90EE, 0x6247, 0x90EF, 0x64B0, 0x90F0, 0x6813, 0x90F1, 0x6834,
- 0x90F2, 0x6CC9, 0x90F3, 0x6D45, 0x90F4, 0x6D17, 0x90F5, 0x67D3, 0x90F6, 0x6F5C, 0x90F7, 0x714E, 0x90F8, 0x717D, 0x90F9, 0x65CB,
- 0x90FA, 0x7A7F, 0x90FB, 0x7BAD, 0x90FC, 0x7DDA, 0x9140, 0x7E4A, 0x9141, 0x7FA8, 0x9142, 0x817A, 0x9143, 0x821B, 0x9144, 0x8239,
- 0x9145, 0x85A6, 0x9146, 0x8A6E, 0x9147, 0x8CCE, 0x9148, 0x8DF5, 0x9149, 0x9078, 0x914A, 0x9077, 0x914B, 0x92AD, 0x914C, 0x9291,
- 0x914D, 0x9583, 0x914E, 0x9BAE, 0x914F, 0x524D, 0x9150, 0x5584, 0x9151, 0x6F38, 0x9152, 0x7136, 0x9153, 0x5168, 0x9154, 0x7985,
- 0x9155, 0x7E55, 0x9156, 0x81B3, 0x9157, 0x7CCE, 0x9158, 0x564C, 0x9159, 0x5851, 0x915A, 0x5CA8, 0x915B, 0x63AA, 0x915C, 0x66FE,
- 0x915D, 0x66FD, 0x915E, 0x695A, 0x915F, 0x72D9, 0x9160, 0x758F, 0x9161, 0x758E, 0x9162, 0x790E, 0x9163, 0x7956, 0x9164, 0x79DF,
- 0x9165, 0x7C97, 0x9166, 0x7D20, 0x9167, 0x7D44, 0x9168, 0x8607, 0x9169, 0x8A34, 0x916A, 0x963B, 0x916B, 0x9061, 0x916C, 0x9F20,
- 0x916D, 0x50E7, 0x916E, 0x5275, 0x916F, 0x53CC, 0x9170, 0x53E2, 0x9171, 0x5009, 0x9172, 0x55AA, 0x9173, 0x58EE, 0x9174, 0x594F,
- 0x9175, 0x723D, 0x9176, 0x5B8B, 0x9177, 0x5C64, 0x9178, 0x531D, 0x9179, 0x60E3, 0x917A, 0x60F3, 0x917B, 0x635C, 0x917C, 0x6383,
- 0x917D, 0x633F, 0x917E, 0x63BB, 0x9180, 0x64CD, 0x9181, 0x65E9, 0x9182, 0x66F9, 0x9183, 0x5DE3, 0x9184, 0x69CD, 0x9185, 0x69FD,
- 0x9186, 0x6F15, 0x9187, 0x71E5, 0x9188, 0x4E89, 0x9189, 0x75E9, 0x918A, 0x76F8, 0x918B, 0x7A93, 0x918C, 0x7CDF, 0x918D, 0x7DCF,
- 0x918E, 0x7D9C, 0x918F, 0x8061, 0x9190, 0x8349, 0x9191, 0x8358, 0x9192, 0x846C, 0x9193, 0x84BC, 0x9194, 0x85FB, 0x9195, 0x88C5,
- 0x9196, 0x8D70, 0x9197, 0x9001, 0x9198, 0x906D, 0x9199, 0x9397, 0x919A, 0x971C, 0x919B, 0x9A12, 0x919C, 0x50CF, 0x919D, 0x5897,
- 0x919E, 0x618E, 0x919F, 0x81D3, 0x91A0, 0x8535, 0x91A1, 0x8D08, 0x91A2, 0x9020, 0x91A3, 0x4FC3, 0x91A4, 0x5074, 0x91A5, 0x5247,
- 0x91A6, 0x5373, 0x91A7, 0x606F, 0x91A8, 0x6349, 0x91A9, 0x675F, 0x91AA, 0x6E2C, 0x91AB, 0x8DB3, 0x91AC, 0x901F, 0x91AD, 0x4FD7,
- 0x91AE, 0x5C5E, 0x91AF, 0x8CCA, 0x91B0, 0x65CF, 0x91B1, 0x7D9A, 0x91B2, 0x5352, 0x91B3, 0x8896, 0x91B4, 0x5176, 0x91B5, 0x63C3,
- 0x91B6, 0x5B58, 0x91B7, 0x5B6B, 0x91B8, 0x5C0A, 0x91B9, 0x640D, 0x91BA, 0x6751, 0x91BB, 0x905C, 0x91BC, 0x4ED6, 0x91BD, 0x591A,
- 0x91BE, 0x592A, 0x91BF, 0x6C70, 0x91C0, 0x8A51, 0x91C1, 0x553E, 0x91C2, 0x5815, 0x91C3, 0x59A5, 0x91C4, 0x60F0, 0x91C5, 0x6253,
- 0x91C6, 0x67C1, 0x91C7, 0x8235, 0x91C8, 0x6955, 0x91C9, 0x9640, 0x91CA, 0x99C4, 0x91CB, 0x9A28, 0x91CC, 0x4F53, 0x91CD, 0x5806,
- 0x91CE, 0x5BFE, 0x91CF, 0x8010, 0x91D0, 0x5CB1, 0x91D1, 0x5E2F, 0x91D2, 0x5F85, 0x91D3, 0x6020, 0x91D4, 0x614B, 0x91D5, 0x6234,
- 0x91D6, 0x66FF, 0x91D7, 0x6CF0, 0x91D8, 0x6EDE, 0x91D9, 0x80CE, 0x91DA, 0x817F, 0x91DB, 0x82D4, 0x91DC, 0x888B, 0x91DD, 0x8CB8,
- 0x91DE, 0x9000, 0x91DF, 0x902E, 0x91E0, 0x968A, 0x91E1, 0x9EDB, 0x91E2, 0x9BDB, 0x91E3, 0x4EE3, 0x91E4, 0x53F0, 0x91E5, 0x5927,
- 0x91E6, 0x7B2C, 0x91E7, 0x918D, 0x91E8, 0x984C, 0x91E9, 0x9DF9, 0x91EA, 0x6EDD, 0x91EB, 0x7027, 0x91EC, 0x5353, 0x91ED, 0x5544,
- 0x91EE, 0x5B85, 0x91EF, 0x6258, 0x91F0, 0x629E, 0x91F1, 0x62D3, 0x91F2, 0x6CA2, 0x91F3, 0x6FEF, 0x91F4, 0x7422, 0x91F5, 0x8A17,
- 0x91F6, 0x9438, 0x91F7, 0x6FC1, 0x91F8, 0x8AFE, 0x91F9, 0x8338, 0x91FA, 0x51E7, 0x91FB, 0x86F8, 0x91FC, 0x53EA, 0x9240, 0x53E9,
- 0x9241, 0x4F46, 0x9242, 0x9054, 0x9243, 0x8FB0, 0x9244, 0x596A, 0x9245, 0x8131, 0x9246, 0x5DFD, 0x9247, 0x7AEA, 0x9248, 0x8FBF,
- 0x9249, 0x68DA, 0x924A, 0x8C37, 0x924B, 0x72F8, 0x924C, 0x9C48, 0x924D, 0x6A3D, 0x924E, 0x8AB0, 0x924F, 0x4E39, 0x9250, 0x5358,
- 0x9251, 0x5606, 0x9252, 0x5766, 0x9253, 0x62C5, 0x9254, 0x63A2, 0x9255, 0x65E6, 0x9256, 0x6B4E, 0x9257, 0x6DE1, 0x9258, 0x6E5B,
- 0x9259, 0x70AD, 0x925A, 0x77ED, 0x925B, 0x7AEF, 0x925C, 0x7BAA, 0x925D, 0x7DBB, 0x925E, 0x803D, 0x925F, 0x80C6, 0x9260, 0x86CB,
- 0x9261, 0x8A95, 0x9262, 0x935B, 0x9263, 0x56E3, 0x9264, 0x58C7, 0x9265, 0x5F3E, 0x9266, 0x65AD, 0x9267, 0x6696, 0x9268, 0x6A80,
- 0x9269, 0x6BB5, 0x926A, 0x7537, 0x926B, 0x8AC7, 0x926C, 0x5024, 0x926D, 0x77E5, 0x926E, 0x5730, 0x926F, 0x5F1B, 0x9270, 0x6065,
- 0x9271, 0x667A, 0x9272, 0x6C60, 0x9273, 0x75F4, 0x9274, 0x7A1A, 0x9275, 0x7F6E, 0x9276, 0x81F4, 0x9277, 0x8718, 0x9278, 0x9045,
- 0x9279, 0x99B3, 0x927A, 0x7BC9, 0x927B, 0x755C, 0x927C, 0x7AF9, 0x927D, 0x7B51, 0x927E, 0x84C4, 0x9280, 0x9010, 0x9281, 0x79E9,
- 0x9282, 0x7A92, 0x9283, 0x8336, 0x9284, 0x5AE1, 0x9285, 0x7740, 0x9286, 0x4E2D, 0x9287, 0x4EF2, 0x9288, 0x5B99, 0x9289, 0x5FE0,
- 0x928A, 0x62BD, 0x928B, 0x663C, 0x928C, 0x67F1, 0x928D, 0x6CE8, 0x928E, 0x866B, 0x928F, 0x8877, 0x9290, 0x8A3B, 0x9291, 0x914E,
- 0x9292, 0x92F3, 0x9293, 0x99D0, 0x9294, 0x6A17, 0x9295, 0x7026, 0x9296, 0x732A, 0x9297, 0x82E7, 0x9298, 0x8457, 0x9299, 0x8CAF,
- 0x929A, 0x4E01, 0x929B, 0x5146, 0x929C, 0x51CB, 0x929D, 0x558B, 0x929E, 0x5BF5, 0x929F, 0x5E16, 0x92A0, 0x5E33, 0x92A1, 0x5E81,
- 0x92A2, 0x5F14, 0x92A3, 0x5F35, 0x92A4, 0x5F6B, 0x92A5, 0x5FB4, 0x92A6, 0x61F2, 0x92A7, 0x6311, 0x92A8, 0x66A2, 0x92A9, 0x671D,
- 0x92AA, 0x6F6E, 0x92AB, 0x7252, 0x92AC, 0x753A, 0x92AD, 0x773A, 0x92AE, 0x8074, 0x92AF, 0x8139, 0x92B0, 0x8178, 0x92B1, 0x8776,
- 0x92B2, 0x8ABF, 0x92B3, 0x8ADC, 0x92B4, 0x8D85, 0x92B5, 0x8DF3, 0x92B6, 0x929A, 0x92B7, 0x9577, 0x92B8, 0x9802, 0x92B9, 0x9CE5,
- 0x92BA, 0x52C5, 0x92BB, 0x6357, 0x92BC, 0x76F4, 0x92BD, 0x6715, 0x92BE, 0x6C88, 0x92BF, 0x73CD, 0x92C0, 0x8CC3, 0x92C1, 0x93AE,
- 0x92C2, 0x9673, 0x92C3, 0x6D25, 0x92C4, 0x589C, 0x92C5, 0x690E, 0x92C6, 0x69CC, 0x92C7, 0x8FFD, 0x92C8, 0x939A, 0x92C9, 0x75DB,
- 0x92CA, 0x901A, 0x92CB, 0x585A, 0x92CC, 0x6802, 0x92CD, 0x63B4, 0x92CE, 0x69FB, 0x92CF, 0x4F43, 0x92D0, 0x6F2C, 0x92D1, 0x67D8,
- 0x92D2, 0x8FBB, 0x92D3, 0x8526, 0x92D4, 0x7DB4, 0x92D5, 0x9354, 0x92D6, 0x693F, 0x92D7, 0x6F70, 0x92D8, 0x576A, 0x92D9, 0x58F7,
- 0x92DA, 0x5B2C, 0x92DB, 0x7D2C, 0x92DC, 0x722A, 0x92DD, 0x540A, 0x92DE, 0x91E3, 0x92DF, 0x9DB4, 0x92E0, 0x4EAD, 0x92E1, 0x4F4E,
- 0x92E2, 0x505C, 0x92E3, 0x5075, 0x92E4, 0x5243, 0x92E5, 0x8C9E, 0x92E6, 0x5448, 0x92E7, 0x5824, 0x92E8, 0x5B9A, 0x92E9, 0x5E1D,
- 0x92EA, 0x5E95, 0x92EB, 0x5EAD, 0x92EC, 0x5EF7, 0x92ED, 0x5F1F, 0x92EE, 0x608C, 0x92EF, 0x62B5, 0x92F0, 0x633A, 0x92F1, 0x63D0,
- 0x92F2, 0x68AF, 0x92F3, 0x6C40, 0x92F4, 0x7887, 0x92F5, 0x798E, 0x92F6, 0x7A0B, 0x92F7, 0x7DE0, 0x92F8, 0x8247, 0x92F9, 0x8A02,
- 0x92FA, 0x8AE6, 0x92FB, 0x8E44, 0x92FC, 0x9013, 0x9340, 0x90B8, 0x9341, 0x912D, 0x9342, 0x91D8, 0x9343, 0x9F0E, 0x9344, 0x6CE5,
- 0x9345, 0x6458, 0x9346, 0x64E2, 0x9347, 0x6575, 0x9348, 0x6EF4, 0x9349, 0x7684, 0x934A, 0x7B1B, 0x934B, 0x9069, 0x934C, 0x93D1,
- 0x934D, 0x6EBA, 0x934E, 0x54F2, 0x934F, 0x5FB9, 0x9350, 0x64A4, 0x9351, 0x8F4D, 0x9352, 0x8FED, 0x9353, 0x9244, 0x9354, 0x5178,
- 0x9355, 0x586B, 0x9356, 0x5929, 0x9357, 0x5C55, 0x9358, 0x5E97, 0x9359, 0x6DFB, 0x935A, 0x7E8F, 0x935B, 0x751C, 0x935C, 0x8CBC,
- 0x935D, 0x8EE2, 0x935E, 0x985B, 0x935F, 0x70B9, 0x9360, 0x4F1D, 0x9361, 0x6BBF, 0x9362, 0x6FB1, 0x9363, 0x7530, 0x9364, 0x96FB,
- 0x9365, 0x514E, 0x9366, 0x5410, 0x9367, 0x5835, 0x9368, 0x5857, 0x9369, 0x59AC, 0x936A, 0x5C60, 0x936B, 0x5F92, 0x936C, 0x6597,
- 0x936D, 0x675C, 0x936E, 0x6E21, 0x936F, 0x767B, 0x9370, 0x83DF, 0x9371, 0x8CED, 0x9372, 0x9014, 0x9373, 0x90FD, 0x9374, 0x934D,
- 0x9375, 0x7825, 0x9376, 0x783A, 0x9377, 0x52AA, 0x9378, 0x5EA6, 0x9379, 0x571F, 0x937A, 0x5974, 0x937B, 0x6012, 0x937C, 0x5012,
- 0x937D, 0x515A, 0x937E, 0x51AC, 0x9380, 0x51CD, 0x9381, 0x5200, 0x9382, 0x5510, 0x9383, 0x5854, 0x9384, 0x5858, 0x9385, 0x5957,
- 0x9386, 0x5B95, 0x9387, 0x5CF6, 0x9388, 0x5D8B, 0x9389, 0x60BC, 0x938A, 0x6295, 0x938B, 0x642D, 0x938C, 0x6771, 0x938D, 0x6843,
- 0x938E, 0x68BC, 0x938F, 0x68DF, 0x9390, 0x76D7, 0x9391, 0x6DD8, 0x9392, 0x6E6F, 0x9393, 0x6D9B, 0x9394, 0x706F, 0x9395, 0x71C8,
- 0x9396, 0x5F53, 0x9397, 0x75D8, 0x9398, 0x7977, 0x9399, 0x7B49, 0x939A, 0x7B54, 0x939B, 0x7B52, 0x939C, 0x7CD6, 0x939D, 0x7D71,
- 0x939E, 0x5230, 0x939F, 0x8463, 0x93A0, 0x8569, 0x93A1, 0x85E4, 0x93A2, 0x8A0E, 0x93A3, 0x8B04, 0x93A4, 0x8C46, 0x93A5, 0x8E0F,
- 0x93A6, 0x9003, 0x93A7, 0x900F, 0x93A8, 0x9419, 0x93A9, 0x9676, 0x93AA, 0x982D, 0x93AB, 0x9A30, 0x93AC, 0x95D8, 0x93AD, 0x50CD,
- 0x93AE, 0x52D5, 0x93AF, 0x540C, 0x93B0, 0x5802, 0x93B1, 0x5C0E, 0x93B2, 0x61A7, 0x93B3, 0x649E, 0x93B4, 0x6D1E, 0x93B5, 0x77B3,
- 0x93B6, 0x7AE5, 0x93B7, 0x80F4, 0x93B8, 0x8404, 0x93B9, 0x9053, 0x93BA, 0x9285, 0x93BB, 0x5CE0, 0x93BC, 0x9D07, 0x93BD, 0x533F,
- 0x93BE, 0x5F97, 0x93BF, 0x5FB3, 0x93C0, 0x6D9C, 0x93C1, 0x7279, 0x93C2, 0x7763, 0x93C3, 0x79BF, 0x93C4, 0x7BE4, 0x93C5, 0x6BD2,
- 0x93C6, 0x72EC, 0x93C7, 0x8AAD, 0x93C8, 0x6803, 0x93C9, 0x6A61, 0x93CA, 0x51F8, 0x93CB, 0x7A81, 0x93CC, 0x6934, 0x93CD, 0x5C4A,
- 0x93CE, 0x9CF6, 0x93CF, 0x82EB, 0x93D0, 0x5BC5, 0x93D1, 0x9149, 0x93D2, 0x701E, 0x93D3, 0x5678, 0x93D4, 0x5C6F, 0x93D5, 0x60C7,
- 0x93D6, 0x6566, 0x93D7, 0x6C8C, 0x93D8, 0x8C5A, 0x93D9, 0x9041, 0x93DA, 0x9813, 0x93DB, 0x5451, 0x93DC, 0x66C7, 0x93DD, 0x920D,
- 0x93DE, 0x5948, 0x93DF, 0x90A3, 0x93E0, 0x5185, 0x93E1, 0x4E4D, 0x93E2, 0x51EA, 0x93E3, 0x8599, 0x93E4, 0x8B0E, 0x93E5, 0x7058,
- 0x93E6, 0x637A, 0x93E7, 0x934B, 0x93E8, 0x6962, 0x93E9, 0x99B4, 0x93EA, 0x7E04, 0x93EB, 0x7577, 0x93EC, 0x5357, 0x93ED, 0x6960,
- 0x93EE, 0x8EDF, 0x93EF, 0x96E3, 0x93F0, 0x6C5D, 0x93F1, 0x4E8C, 0x93F2, 0x5C3C, 0x93F3, 0x5F10, 0x93F4, 0x8FE9, 0x93F5, 0x5302,
- 0x93F6, 0x8CD1, 0x93F7, 0x8089, 0x93F8, 0x8679, 0x93F9, 0x5EFF, 0x93FA, 0x65E5, 0x93FB, 0x4E73, 0x93FC, 0x5165, 0x9440, 0x5982,
- 0x9441, 0x5C3F, 0x9442, 0x97EE, 0x9443, 0x4EFB, 0x9444, 0x598A, 0x9445, 0x5FCD, 0x9446, 0x8A8D, 0x9447, 0x6FE1, 0x9448, 0x79B0,
- 0x9449, 0x7962, 0x944A, 0x5BE7, 0x944B, 0x8471, 0x944C, 0x732B, 0x944D, 0x71B1, 0x944E, 0x5E74, 0x944F, 0x5FF5, 0x9450, 0x637B,
- 0x9451, 0x649A, 0x9452, 0x71C3, 0x9453, 0x7C98, 0x9454, 0x4E43, 0x9455, 0x5EFC, 0x9456, 0x4E4B, 0x9457, 0x57DC, 0x9458, 0x56A2,
- 0x9459, 0x60A9, 0x945A, 0x6FC3, 0x945B, 0x7D0D, 0x945C, 0x80FD, 0x945D, 0x8133, 0x945E, 0x81BF, 0x945F, 0x8FB2, 0x9460, 0x8997,
- 0x9461, 0x86A4, 0x9462, 0x5DF4, 0x9463, 0x628A, 0x9464, 0x64AD, 0x9465, 0x8987, 0x9466, 0x6777, 0x9467, 0x6CE2, 0x9468, 0x6D3E,
- 0x9469, 0x7436, 0x946A, 0x7834, 0x946B, 0x5A46, 0x946C, 0x7F75, 0x946D, 0x82AD, 0x946E, 0x99AC, 0x946F, 0x4FF3, 0x9470, 0x5EC3,
- 0x9471, 0x62DD, 0x9472, 0x6392, 0x9473, 0x6557, 0x9474, 0x676F, 0x9475, 0x76C3, 0x9476, 0x724C, 0x9477, 0x80CC, 0x9478, 0x80BA,
- 0x9479, 0x8F29, 0x947A, 0x914D, 0x947B, 0x500D, 0x947C, 0x57F9, 0x947D, 0x5A92, 0x947E, 0x6885, 0x9480, 0x6973, 0x9481, 0x7164,
- 0x9482, 0x72FD, 0x9483, 0x8CB7, 0x9484, 0x58F2, 0x9485, 0x8CE0, 0x9486, 0x966A, 0x9487, 0x9019, 0x9488, 0x877F, 0x9489, 0x79E4,
- 0x948A, 0x77E7, 0x948B, 0x8429, 0x948C, 0x4F2F, 0x948D, 0x5265, 0x948E, 0x535A, 0x948F, 0x62CD, 0x9490, 0x67CF, 0x9491, 0x6CCA,
- 0x9492, 0x767D, 0x9493, 0x7B94, 0x9494, 0x7C95, 0x9495, 0x8236, 0x9496, 0x8584, 0x9497, 0x8FEB, 0x9498, 0x66DD, 0x9499, 0x6F20,
- 0x949A, 0x7206, 0x949B, 0x7E1B, 0x949C, 0x83AB, 0x949D, 0x99C1, 0x949E, 0x9EA6, 0x949F, 0x51FD, 0x94A0, 0x7BB1, 0x94A1, 0x7872,
- 0x94A2, 0x7BB8, 0x94A3, 0x8087, 0x94A4, 0x7B48, 0x94A5, 0x6AE8, 0x94A6, 0x5E61, 0x94A7, 0x808C, 0x94A8, 0x7551, 0x94A9, 0x7560,
- 0x94AA, 0x516B, 0x94AB, 0x9262, 0x94AC, 0x6E8C, 0x94AD, 0x767A, 0x94AE, 0x9197, 0x94AF, 0x9AEA, 0x94B0, 0x4F10, 0x94B1, 0x7F70,
- 0x94B2, 0x629C, 0x94B3, 0x7B4F, 0x94B4, 0x95A5, 0x94B5, 0x9CE9, 0x94B6, 0x567A, 0x94B7, 0x5859, 0x94B8, 0x86E4, 0x94B9, 0x96BC,
- 0x94BA, 0x4F34, 0x94BB, 0x5224, 0x94BC, 0x534A, 0x94BD, 0x53CD, 0x94BE, 0x53DB, 0x94BF, 0x5E06, 0x94C0, 0x642C, 0x94C1, 0x6591,
- 0x94C2, 0x677F, 0x94C3, 0x6C3E, 0x94C4, 0x6C4E, 0x94C5, 0x7248, 0x94C6, 0x72AF, 0x94C7, 0x73ED, 0x94C8, 0x7554, 0x94C9, 0x7E41,
- 0x94CA, 0x822C, 0x94CB, 0x85E9, 0x94CC, 0x8CA9, 0x94CD, 0x7BC4, 0x94CE, 0x91C6, 0x94CF, 0x7169, 0x94D0, 0x9812, 0x94D1, 0x98EF,
- 0x94D2, 0x633D, 0x94D3, 0x6669, 0x94D4, 0x756A, 0x94D5, 0x76E4, 0x94D6, 0x78D0, 0x94D7, 0x8543, 0x94D8, 0x86EE, 0x94D9, 0x532A,
- 0x94DA, 0x5351, 0x94DB, 0x5426, 0x94DC, 0x5983, 0x94DD, 0x5E87, 0x94DE, 0x5F7C, 0x94DF, 0x60B2, 0x94E0, 0x6249, 0x94E1, 0x6279,
- 0x94E2, 0x62AB, 0x94E3, 0x6590, 0x94E4, 0x6BD4, 0x94E5, 0x6CCC, 0x94E6, 0x75B2, 0x94E7, 0x76AE, 0x94E8, 0x7891, 0x94E9, 0x79D8,
- 0x94EA, 0x7DCB, 0x94EB, 0x7F77, 0x94EC, 0x80A5, 0x94ED, 0x88AB, 0x94EE, 0x8AB9, 0x94EF, 0x8CBB, 0x94F0, 0x907F, 0x94F1, 0x975E,
- 0x94F2, 0x98DB, 0x94F3, 0x6A0B, 0x94F4, 0x7C38, 0x94F5, 0x5099, 0x94F6, 0x5C3E, 0x94F7, 0x5FAE, 0x94F8, 0x6787, 0x94F9, 0x6BD8,
- 0x94FA, 0x7435, 0x94FB, 0x7709, 0x94FC, 0x7F8E, 0x9540, 0x9F3B, 0x9541, 0x67CA, 0x9542, 0x7A17, 0x9543, 0x5339, 0x9544, 0x758B,
- 0x9545, 0x9AED, 0x9546, 0x5F66, 0x9547, 0x819D, 0x9548, 0x83F1, 0x9549, 0x8098, 0x954A, 0x5F3C, 0x954B, 0x5FC5, 0x954C, 0x7562,
- 0x954D, 0x7B46, 0x954E, 0x903C, 0x954F, 0x6867, 0x9550, 0x59EB, 0x9551, 0x5A9B, 0x9552, 0x7D10, 0x9553, 0x767E, 0x9554, 0x8B2C,
- 0x9555, 0x4FF5, 0x9556, 0x5F6A, 0x9557, 0x6A19, 0x9558, 0x6C37, 0x9559, 0x6F02, 0x955A, 0x74E2, 0x955B, 0x7968, 0x955C, 0x8868,
- 0x955D, 0x8A55, 0x955E, 0x8C79, 0x955F, 0x5EDF, 0x9560, 0x63CF, 0x9561, 0x75C5, 0x9562, 0x79D2, 0x9563, 0x82D7, 0x9564, 0x9328,
- 0x9565, 0x92F2, 0x9566, 0x849C, 0x9567, 0x86ED, 0x9568, 0x9C2D, 0x9569, 0x54C1, 0x956A, 0x5F6C, 0x956B, 0x658C, 0x956C, 0x6D5C,
- 0x956D, 0x7015, 0x956E, 0x8CA7, 0x956F, 0x8CD3, 0x9570, 0x983B, 0x9571, 0x654F, 0x9572, 0x74F6, 0x9573, 0x4E0D, 0x9574, 0x4ED8,
- 0x9575, 0x57E0, 0x9576, 0x592B, 0x9577, 0x5A66, 0x9578, 0x5BCC, 0x9579, 0x51A8, 0x957A, 0x5E03, 0x957B, 0x5E9C, 0x957C, 0x6016,
- 0x957D, 0x6276, 0x957E, 0x6577, 0x9580, 0x65A7, 0x9581, 0x666E, 0x9582, 0x6D6E, 0x9583, 0x7236, 0x9584, 0x7B26, 0x9585, 0x8150,
- 0x9586, 0x819A, 0x9587, 0x8299, 0x9588, 0x8B5C, 0x9589, 0x8CA0, 0x958A, 0x8CE6, 0x958B, 0x8D74, 0x958C, 0x961C, 0x958D, 0x9644,
- 0x958E, 0x4FAE, 0x958F, 0x64AB, 0x9590, 0x6B66, 0x9591, 0x821E, 0x9592, 0x8461, 0x9593, 0x856A, 0x9594, 0x90E8, 0x9595, 0x5C01,
- 0x9596, 0x6953, 0x9597, 0x98A8, 0x9598, 0x847A, 0x9599, 0x8557, 0x959A, 0x4F0F, 0x959B, 0x526F, 0x959C, 0x5FA9, 0x959D, 0x5E45,
- 0x959E, 0x670D, 0x959F, 0x798F, 0x95A0, 0x8179, 0x95A1, 0x8907, 0x95A2, 0x8986, 0x95A3, 0x6DF5, 0x95A4, 0x5F17, 0x95A5, 0x6255,
- 0x95A6, 0x6CB8, 0x95A7, 0x4ECF, 0x95A8, 0x7269, 0x95A9, 0x9B92, 0x95AA, 0x5206, 0x95AB, 0x543B, 0x95AC, 0x5674, 0x95AD, 0x58B3,
- 0x95AE, 0x61A4, 0x95AF, 0x626E, 0x95B0, 0x711A, 0x95B1, 0x596E, 0x95B2, 0x7C89, 0x95B3, 0x7CDE, 0x95B4, 0x7D1B, 0x95B5, 0x96F0,
- 0x95B6, 0x6587, 0x95B7, 0x805E, 0x95B8, 0x4E19, 0x95B9, 0x4F75, 0x95BA, 0x5175, 0x95BB, 0x5840, 0x95BC, 0x5E63, 0x95BD, 0x5E73,
- 0x95BE, 0x5F0A, 0x95BF, 0x67C4, 0x95C0, 0x4E26, 0x95C1, 0x853D, 0x95C2, 0x9589, 0x95C3, 0x965B, 0x95C4, 0x7C73, 0x95C5, 0x9801,
- 0x95C6, 0x50FB, 0x95C7, 0x58C1, 0x95C8, 0x7656, 0x95C9, 0x78A7, 0x95CA, 0x5225, 0x95CB, 0x77A5, 0x95CC, 0x8511, 0x95CD, 0x7B86,
- 0x95CE, 0x504F, 0x95CF, 0x5909, 0x95D0, 0x7247, 0x95D1, 0x7BC7, 0x95D2, 0x7DE8, 0x95D3, 0x8FBA, 0x95D4, 0x8FD4, 0x95D5, 0x904D,
- 0x95D6, 0x4FBF, 0x95D7, 0x52C9, 0x95D8, 0x5A29, 0x95D9, 0x5F01, 0x95DA, 0x97AD, 0x95DB, 0x4FDD, 0x95DC, 0x8217, 0x95DD, 0x92EA,
- 0x95DE, 0x5703, 0x95DF, 0x6355, 0x95E0, 0x6B69, 0x95E1, 0x752B, 0x95E2, 0x88DC, 0x95E3, 0x8F14, 0x95E4, 0x7A42, 0x95E5, 0x52DF,
- 0x95E6, 0x5893, 0x95E7, 0x6155, 0x95E8, 0x620A, 0x95E9, 0x66AE, 0x95EA, 0x6BCD, 0x95EB, 0x7C3F, 0x95EC, 0x83E9, 0x95ED, 0x5023,
- 0x95EE, 0x4FF8, 0x95EF, 0x5305, 0x95F0, 0x5446, 0x95F1, 0x5831, 0x95F2, 0x5949, 0x95F3, 0x5B9D, 0x95F4, 0x5CF0, 0x95F5, 0x5CEF,
- 0x95F6, 0x5D29, 0x95F7, 0x5E96, 0x95F8, 0x62B1, 0x95F9, 0x6367, 0x95FA, 0x653E, 0x95FB, 0x65B9, 0x95FC, 0x670B, 0x9640, 0x6CD5,
- 0x9641, 0x6CE1, 0x9642, 0x70F9, 0x9643, 0x7832, 0x9644, 0x7E2B, 0x9645, 0x80DE, 0x9646, 0x82B3, 0x9647, 0x840C, 0x9648, 0x84EC,
- 0x9649, 0x8702, 0x964A, 0x8912, 0x964B, 0x8A2A, 0x964C, 0x8C4A, 0x964D, 0x90A6, 0x964E, 0x92D2, 0x964F, 0x98FD, 0x9650, 0x9CF3,
- 0x9651, 0x9D6C, 0x9652, 0x4E4F, 0x9653, 0x4EA1, 0x9654, 0x508D, 0x9655, 0x5256, 0x9656, 0x574A, 0x9657, 0x59A8, 0x9658, 0x5E3D,
- 0x9659, 0x5FD8, 0x965A, 0x5FD9, 0x965B, 0x623F, 0x965C, 0x66B4, 0x965D, 0x671B, 0x965E, 0x67D0, 0x965F, 0x68D2, 0x9660, 0x5192,
- 0x9661, 0x7D21, 0x9662, 0x80AA, 0x9663, 0x81A8, 0x9664, 0x8B00, 0x9665, 0x8C8C, 0x9666, 0x8CBF, 0x9667, 0x927E, 0x9668, 0x9632,
- 0x9669, 0x5420, 0x966A, 0x982C, 0x966B, 0x5317, 0x966C, 0x50D5, 0x966D, 0x535C, 0x966E, 0x58A8, 0x966F, 0x64B2, 0x9670, 0x6734,
- 0x9671, 0x7267, 0x9672, 0x7766, 0x9673, 0x7A46, 0x9674, 0x91E6, 0x9675, 0x52C3, 0x9676, 0x6CA1, 0x9677, 0x6B86, 0x9678, 0x5800,
- 0x9679, 0x5E4C, 0x967A, 0x5954, 0x967B, 0x672C, 0x967C, 0x7FFB, 0x967D, 0x51E1, 0x967E, 0x76C6, 0x9680, 0x6469, 0x9681, 0x78E8,
- 0x9682, 0x9B54, 0x9683, 0x9EBB, 0x9684, 0x57CB, 0x9685, 0x59B9, 0x9686, 0x6627, 0x9687, 0x679A, 0x9688, 0x6BCE, 0x9689, 0x54E9,
- 0x968A, 0x69D9, 0x968B, 0x5E55, 0x968C, 0x819C, 0x968D, 0x6795, 0x968E, 0x9BAA, 0x968F, 0x67FE, 0x9690, 0x9C52, 0x9691, 0x685D,
- 0x9692, 0x4EA6, 0x9693, 0x4FE3, 0x9694, 0x53C8, 0x9695, 0x62B9, 0x9696, 0x672B, 0x9697, 0x6CAB, 0x9698, 0x8FC4, 0x9699, 0x4FAD,
- 0x969A, 0x7E6D, 0x969B, 0x9EBF, 0x969C, 0x4E07, 0x969D, 0x6162, 0x969E, 0x6E80, 0x969F, 0x6F2B, 0x96A0, 0x8513, 0x96A1, 0x5473,
- 0x96A2, 0x672A, 0x96A3, 0x9B45, 0x96A4, 0x5DF3, 0x96A5, 0x7B95, 0x96A6, 0x5CAC, 0x96A7, 0x5BC6, 0x96A8, 0x871C, 0x96A9, 0x6E4A,
- 0x96AA, 0x84D1, 0x96AB, 0x7A14, 0x96AC, 0x8108, 0x96AD, 0x5999, 0x96AE, 0x7C8D, 0x96AF, 0x6C11, 0x96B0, 0x7720, 0x96B1, 0x52D9,
- 0x96B2, 0x5922, 0x96B3, 0x7121, 0x96B4, 0x725F, 0x96B5, 0x77DB, 0x96B6, 0x9727, 0x96B7, 0x9D61, 0x96B8, 0x690B, 0x96B9, 0x5A7F,
- 0x96BA, 0x5A18, 0x96BB, 0x51A5, 0x96BC, 0x540D, 0x96BD, 0x547D, 0x96BE, 0x660E, 0x96BF, 0x76DF, 0x96C0, 0x8FF7, 0x96C1, 0x9298,
- 0x96C2, 0x9CF4, 0x96C3, 0x59EA, 0x96C4, 0x725D, 0x96C5, 0x6EC5, 0x96C6, 0x514D, 0x96C7, 0x68C9, 0x96C8, 0x7DBF, 0x96C9, 0x7DEC,
- 0x96CA, 0x9762, 0x96CB, 0x9EBA, 0x96CC, 0x6478, 0x96CD, 0x6A21, 0x96CE, 0x8302, 0x96CF, 0x5984, 0x96D0, 0x5B5F, 0x96D1, 0x6BDB,
- 0x96D2, 0x731B, 0x96D3, 0x76F2, 0x96D4, 0x7DB2, 0x96D5, 0x8017, 0x96D6, 0x8499, 0x96D7, 0x5132, 0x96D8, 0x6728, 0x96D9, 0x9ED9,
- 0x96DA, 0x76EE, 0x96DB, 0x6762, 0x96DC, 0x52FF, 0x96DD, 0x9905, 0x96DE, 0x5C24, 0x96DF, 0x623B, 0x96E0, 0x7C7E, 0x96E1, 0x8CB0,
- 0x96E2, 0x554F, 0x96E3, 0x60B6, 0x96E4, 0x7D0B, 0x96E5, 0x9580, 0x96E6, 0x5301, 0x96E7, 0x4E5F, 0x96E8, 0x51B6, 0x96E9, 0x591C,
- 0x96EA, 0x723A, 0x96EB, 0x8036, 0x96EC, 0x91CE, 0x96ED, 0x5F25, 0x96EE, 0x77E2, 0x96EF, 0x5384, 0x96F0, 0x5F79, 0x96F1, 0x7D04,
- 0x96F2, 0x85AC, 0x96F3, 0x8A33, 0x96F4, 0x8E8D, 0x96F5, 0x9756, 0x96F6, 0x67F3, 0x96F7, 0x85AE, 0x96F8, 0x9453, 0x96F9, 0x6109,
- 0x96FA, 0x6108, 0x96FB, 0x6CB9, 0x96FC, 0x7652, 0x9740, 0x8AED, 0x9741, 0x8F38, 0x9742, 0x552F, 0x9743, 0x4F51, 0x9744, 0x512A,
- 0x9745, 0x52C7, 0x9746, 0x53CB, 0x9747, 0x5BA5, 0x9748, 0x5E7D, 0x9749, 0x60A0, 0x974A, 0x6182, 0x974B, 0x63D6, 0x974C, 0x6709,
- 0x974D, 0x67DA, 0x974E, 0x6E67, 0x974F, 0x6D8C, 0x9750, 0x7336, 0x9751, 0x7337, 0x9752, 0x7531, 0x9753, 0x7950, 0x9754, 0x88D5,
- 0x9755, 0x8A98, 0x9756, 0x904A, 0x9757, 0x9091, 0x9758, 0x90F5, 0x9759, 0x96C4, 0x975A, 0x878D, 0x975B, 0x5915, 0x975C, 0x4E88,
- 0x975D, 0x4F59, 0x975E, 0x4E0E, 0x975F, 0x8A89, 0x9760, 0x8F3F, 0x9761, 0x9810, 0x9762, 0x50AD, 0x9763, 0x5E7C, 0x9764, 0x5996,
- 0x9765, 0x5BB9, 0x9766, 0x5EB8, 0x9767, 0x63DA, 0x9768, 0x63FA, 0x9769, 0x64C1, 0x976A, 0x66DC, 0x976B, 0x694A, 0x976C, 0x69D8,
- 0x976D, 0x6D0B, 0x976E, 0x6EB6, 0x976F, 0x7194, 0x9770, 0x7528, 0x9771, 0x7AAF, 0x9772, 0x7F8A, 0x9773, 0x8000, 0x9774, 0x8449,
- 0x9775, 0x84C9, 0x9776, 0x8981, 0x9777, 0x8B21, 0x9778, 0x8E0A, 0x9779, 0x9065, 0x977A, 0x967D, 0x977B, 0x990A, 0x977C, 0x617E,
- 0x977D, 0x6291, 0x977E, 0x6B32, 0x9780, 0x6C83, 0x9781, 0x6D74, 0x9782, 0x7FCC, 0x9783, 0x7FFC, 0x9784, 0x6DC0, 0x9785, 0x7F85,
- 0x9786, 0x87BA, 0x9787, 0x88F8, 0x9788, 0x6765, 0x9789, 0x83B1, 0x978A, 0x983C, 0x978B, 0x96F7, 0x978C, 0x6D1B, 0x978D, 0x7D61,
- 0x978E, 0x843D, 0x978F, 0x916A, 0x9790, 0x4E71, 0x9791, 0x5375, 0x9792, 0x5D50, 0x9793, 0x6B04, 0x9794, 0x6FEB, 0x9795, 0x85CD,
- 0x9796, 0x862D, 0x9797, 0x89A7, 0x9798, 0x5229, 0x9799, 0x540F, 0x979A, 0x5C65, 0x979B, 0x674E, 0x979C, 0x68A8, 0x979D, 0x7406,
- 0x979E, 0x7483, 0x979F, 0x75E2, 0x97A0, 0x88CF, 0x97A1, 0x88E1, 0x97A2, 0x91CC, 0x97A3, 0x96E2, 0x97A4, 0x9678, 0x97A5, 0x5F8B,
- 0x97A6, 0x7387, 0x97A7, 0x7ACB, 0x97A8, 0x844E, 0x97A9, 0x63A0, 0x97AA, 0x7565, 0x97AB, 0x5289, 0x97AC, 0x6D41, 0x97AD, 0x6E9C,
- 0x97AE, 0x7409, 0x97AF, 0x7559, 0x97B0, 0x786B, 0x97B1, 0x7C92, 0x97B2, 0x9686, 0x97B3, 0x7ADC, 0x97B4, 0x9F8D, 0x97B5, 0x4FB6,
- 0x97B6, 0x616E, 0x97B7, 0x65C5, 0x97B8, 0x865C, 0x97B9, 0x4E86, 0x97BA, 0x4EAE, 0x97BB, 0x50DA, 0x97BC, 0x4E21, 0x97BD, 0x51CC,
- 0x97BE, 0x5BEE, 0x97BF, 0x6599, 0x97C0, 0x6881, 0x97C1, 0x6DBC, 0x97C2, 0x731F, 0x97C3, 0x7642, 0x97C4, 0x77AD, 0x97C5, 0x7A1C,
- 0x97C6, 0x7CE7, 0x97C7, 0x826F, 0x97C8, 0x8AD2, 0x97C9, 0x907C, 0x97CA, 0x91CF, 0x97CB, 0x9675, 0x97CC, 0x9818, 0x97CD, 0x529B,
- 0x97CE, 0x7DD1, 0x97CF, 0x502B, 0x97D0, 0x5398, 0x97D1, 0x6797, 0x97D2, 0x6DCB, 0x97D3, 0x71D0, 0x97D4, 0x7433, 0x97D5, 0x81E8,
- 0x97D6, 0x8F2A, 0x97D7, 0x96A3, 0x97D8, 0x9C57, 0x97D9, 0x9E9F, 0x97DA, 0x7460, 0x97DB, 0x5841, 0x97DC, 0x6D99, 0x97DD, 0x7D2F,
- 0x97DE, 0x985E, 0x97DF, 0x4EE4, 0x97E0, 0x4F36, 0x97E1, 0x4F8B, 0x97E2, 0x51B7, 0x97E3, 0x52B1, 0x97E4, 0x5DBA, 0x97E5, 0x601C,
- 0x97E6, 0x73B2, 0x97E7, 0x793C, 0x97E8, 0x82D3, 0x97E9, 0x9234, 0x97EA, 0x96B7, 0x97EB, 0x96F6, 0x97EC, 0x970A, 0x97ED, 0x9E97,
- 0x97EE, 0x9F62, 0x97EF, 0x66A6, 0x97F0, 0x6B74, 0x97F1, 0x5217, 0x97F2, 0x52A3, 0x97F3, 0x70C8, 0x97F4, 0x88C2, 0x97F5, 0x5EC9,
- 0x97F6, 0x604B, 0x97F7, 0x6190, 0x97F8, 0x6F23, 0x97F9, 0x7149, 0x97FA, 0x7C3E, 0x97FB, 0x7DF4, 0x97FC, 0x806F, 0x9840, 0x84EE,
- 0x9841, 0x9023, 0x9842, 0x932C, 0x9843, 0x5442, 0x9844, 0x9B6F, 0x9845, 0x6AD3, 0x9846, 0x7089, 0x9847, 0x8CC2, 0x9848, 0x8DEF,
- 0x9849, 0x9732, 0x984A, 0x52B4, 0x984B, 0x5A41, 0x984C, 0x5ECA, 0x984D, 0x5F04, 0x984E, 0x6717, 0x984F, 0x697C, 0x9850, 0x6994,
- 0x9851, 0x6D6A, 0x9852, 0x6F0F, 0x9853, 0x7262, 0x9854, 0x72FC, 0x9855, 0x7BED, 0x9856, 0x8001, 0x9857, 0x807E, 0x9858, 0x874B,
- 0x9859, 0x90CE, 0x985A, 0x516D, 0x985B, 0x9E93, 0x985C, 0x7984, 0x985D, 0x808B, 0x985E, 0x9332, 0x985F, 0x8AD6, 0x9860, 0x502D,
- 0x9861, 0x548C, 0x9862, 0x8A71, 0x9863, 0x6B6A, 0x9864, 0x8CC4, 0x9865, 0x8107, 0x9866, 0x60D1, 0x9867, 0x67A0, 0x9868, 0x9DF2,
- 0x9869, 0x4E99, 0x986A, 0x4E98, 0x986B, 0x9C10, 0x986C, 0x8A6B, 0x986D, 0x85C1, 0x986E, 0x8568, 0x986F, 0x6900, 0x9870, 0x6E7E,
- 0x9871, 0x7897, 0x9872, 0x8155, 0x989F, 0x5F0C, 0x98A0, 0x4E10, 0x98A1, 0x4E15, 0x98A2, 0x4E2A, 0x98A3, 0x4E31, 0x98A4, 0x4E36,
- 0x98A5, 0x4E3C, 0x98A6, 0x4E3F, 0x98A7, 0x4E42, 0x98A8, 0x4E56, 0x98A9, 0x4E58, 0x98AA, 0x4E82, 0x98AB, 0x4E85, 0x98AC, 0x8C6B,
- 0x98AD, 0x4E8A, 0x98AE, 0x8212, 0x98AF, 0x5F0D, 0x98B0, 0x4E8E, 0x98B1, 0x4E9E, 0x98B2, 0x4E9F, 0x98B3, 0x4EA0, 0x98B4, 0x4EA2,
- 0x98B5, 0x4EB0, 0x98B6, 0x4EB3, 0x98B7, 0x4EB6, 0x98B8, 0x4ECE, 0x98B9, 0x4ECD, 0x98BA, 0x4EC4, 0x98BB, 0x4EC6, 0x98BC, 0x4EC2,
- 0x98BD, 0x4ED7, 0x98BE, 0x4EDE, 0x98BF, 0x4EED, 0x98C0, 0x4EDF, 0x98C1, 0x4EF7, 0x98C2, 0x4F09, 0x98C3, 0x4F5A, 0x98C4, 0x4F30,
- 0x98C5, 0x4F5B, 0x98C6, 0x4F5D, 0x98C7, 0x4F57, 0x98C8, 0x4F47, 0x98C9, 0x4F76, 0x98CA, 0x4F88, 0x98CB, 0x4F8F, 0x98CC, 0x4F98,
- 0x98CD, 0x4F7B, 0x98CE, 0x4F69, 0x98CF, 0x4F70, 0x98D0, 0x4F91, 0x98D1, 0x4F6F, 0x98D2, 0x4F86, 0x98D3, 0x4F96, 0x98D4, 0x5118,
- 0x98D5, 0x4FD4, 0x98D6, 0x4FDF, 0x98D7, 0x4FCE, 0x98D8, 0x4FD8, 0x98D9, 0x4FDB, 0x98DA, 0x4FD1, 0x98DB, 0x4FDA, 0x98DC, 0x4FD0,
- 0x98DD, 0x4FE4, 0x98DE, 0x4FE5, 0x98DF, 0x501A, 0x98E0, 0x5028, 0x98E1, 0x5014, 0x98E2, 0x502A, 0x98E3, 0x5025, 0x98E4, 0x5005,
- 0x98E5, 0x4F1C, 0x98E6, 0x4FF6, 0x98E7, 0x5021, 0x98E8, 0x5029, 0x98E9, 0x502C, 0x98EA, 0x4FFE, 0x98EB, 0x4FEF, 0x98EC, 0x5011,
- 0x98ED, 0x5006, 0x98EE, 0x5043, 0x98EF, 0x5047, 0x98F0, 0x6703, 0x98F1, 0x5055, 0x98F2, 0x5050, 0x98F3, 0x5048, 0x98F4, 0x505A,
- 0x98F5, 0x5056, 0x98F6, 0x506C, 0x98F7, 0x5078, 0x98F8, 0x5080, 0x98F9, 0x509A, 0x98FA, 0x5085, 0x98FB, 0x50B4, 0x98FC, 0x50B2,
- 0x9940, 0x50C9, 0x9941, 0x50CA, 0x9942, 0x50B3, 0x9943, 0x50C2, 0x9944, 0x50D6, 0x9945, 0x50DE, 0x9946, 0x50E5, 0x9947, 0x50ED,
- 0x9948, 0x50E3, 0x9949, 0x50EE, 0x994A, 0x50F9, 0x994B, 0x50F5, 0x994C, 0x5109, 0x994D, 0x5101, 0x994E, 0x5102, 0x994F, 0x5116,
- 0x9950, 0x5115, 0x9951, 0x5114, 0x9952, 0x511A, 0x9953, 0x5121, 0x9954, 0x513A, 0x9955, 0x5137, 0x9956, 0x513C, 0x9957, 0x513B,
- 0x9958, 0x513F, 0x9959, 0x5140, 0x995A, 0x5152, 0x995B, 0x514C, 0x995C, 0x5154, 0x995D, 0x5162, 0x995E, 0x7AF8, 0x995F, 0x5169,
- 0x9960, 0x516A, 0x9961, 0x516E, 0x9962, 0x5180, 0x9963, 0x5182, 0x9964, 0x56D8, 0x9965, 0x518C, 0x9966, 0x5189, 0x9967, 0x518F,
- 0x9968, 0x5191, 0x9969, 0x5193, 0x996A, 0x5195, 0x996B, 0x5196, 0x996C, 0x51A4, 0x996D, 0x51A6, 0x996E, 0x51A2, 0x996F, 0x51A9,
- 0x9970, 0x51AA, 0x9971, 0x51AB, 0x9972, 0x51B3, 0x9973, 0x51B1, 0x9974, 0x51B2, 0x9975, 0x51B0, 0x9976, 0x51B5, 0x9977, 0x51BD,
- 0x9978, 0x51C5, 0x9979, 0x51C9, 0x997A, 0x51DB, 0x997B, 0x51E0, 0x997C, 0x8655, 0x997D, 0x51E9, 0x997E, 0x51ED, 0x9980, 0x51F0,
- 0x9981, 0x51F5, 0x9982, 0x51FE, 0x9983, 0x5204, 0x9984, 0x520B, 0x9985, 0x5214, 0x9986, 0x520E, 0x9987, 0x5227, 0x9988, 0x522A,
- 0x9989, 0x522E, 0x998A, 0x5233, 0x998B, 0x5239, 0x998C, 0x524F, 0x998D, 0x5244, 0x998E, 0x524B, 0x998F, 0x524C, 0x9990, 0x525E,
- 0x9991, 0x5254, 0x9992, 0x526A, 0x9993, 0x5274, 0x9994, 0x5269, 0x9995, 0x5273, 0x9996, 0x527F, 0x9997, 0x527D, 0x9998, 0x528D,
- 0x9999, 0x5294, 0x999A, 0x5292, 0x999B, 0x5271, 0x999C, 0x5288, 0x999D, 0x5291, 0x999E, 0x8FA8, 0x999F, 0x8FA7, 0x99A0, 0x52AC,
- 0x99A1, 0x52AD, 0x99A2, 0x52BC, 0x99A3, 0x52B5, 0x99A4, 0x52C1, 0x99A5, 0x52CD, 0x99A6, 0x52D7, 0x99A7, 0x52DE, 0x99A8, 0x52E3,
- 0x99A9, 0x52E6, 0x99AA, 0x98ED, 0x99AB, 0x52E0, 0x99AC, 0x52F3, 0x99AD, 0x52F5, 0x99AE, 0x52F8, 0x99AF, 0x52F9, 0x99B0, 0x5306,
- 0x99B1, 0x5308, 0x99B2, 0x7538, 0x99B3, 0x530D, 0x99B4, 0x5310, 0x99B5, 0x530F, 0x99B6, 0x5315, 0x99B7, 0x531A, 0x99B8, 0x5323,
- 0x99B9, 0x532F, 0x99BA, 0x5331, 0x99BB, 0x5333, 0x99BC, 0x5338, 0x99BD, 0x5340, 0x99BE, 0x5346, 0x99BF, 0x5345, 0x99C0, 0x4E17,
- 0x99C1, 0x5349, 0x99C2, 0x534D, 0x99C3, 0x51D6, 0x99C4, 0x535E, 0x99C5, 0x5369, 0x99C6, 0x536E, 0x99C7, 0x5918, 0x99C8, 0x537B,
- 0x99C9, 0x5377, 0x99CA, 0x5382, 0x99CB, 0x5396, 0x99CC, 0x53A0, 0x99CD, 0x53A6, 0x99CE, 0x53A5, 0x99CF, 0x53AE, 0x99D0, 0x53B0,
- 0x99D1, 0x53B6, 0x99D2, 0x53C3, 0x99D3, 0x7C12, 0x99D4, 0x96D9, 0x99D5, 0x53DF, 0x99D6, 0x66FC, 0x99D7, 0x71EE, 0x99D8, 0x53EE,
- 0x99D9, 0x53E8, 0x99DA, 0x53ED, 0x99DB, 0x53FA, 0x99DC, 0x5401, 0x99DD, 0x543D, 0x99DE, 0x5440, 0x99DF, 0x542C, 0x99E0, 0x542D,
- 0x99E1, 0x543C, 0x99E2, 0x542E, 0x99E3, 0x5436, 0x99E4, 0x5429, 0x99E5, 0x541D, 0x99E6, 0x544E, 0x99E7, 0x548F, 0x99E8, 0x5475,
- 0x99E9, 0x548E, 0x99EA, 0x545F, 0x99EB, 0x5471, 0x99EC, 0x5477, 0x99ED, 0x5470, 0x99EE, 0x5492, 0x99EF, 0x547B, 0x99F0, 0x5480,
- 0x99F1, 0x5476, 0x99F2, 0x5484, 0x99F3, 0x5490, 0x99F4, 0x5486, 0x99F5, 0x54C7, 0x99F6, 0x54A2, 0x99F7, 0x54B8, 0x99F8, 0x54A5,
- 0x99F9, 0x54AC, 0x99FA, 0x54C4, 0x99FB, 0x54C8, 0x99FC, 0x54A8, 0x9A40, 0x54AB, 0x9A41, 0x54C2, 0x9A42, 0x54A4, 0x9A43, 0x54BE,
- 0x9A44, 0x54BC, 0x9A45, 0x54D8, 0x9A46, 0x54E5, 0x9A47, 0x54E6, 0x9A48, 0x550F, 0x9A49, 0x5514, 0x9A4A, 0x54FD, 0x9A4B, 0x54EE,
- 0x9A4C, 0x54ED, 0x9A4D, 0x54FA, 0x9A4E, 0x54E2, 0x9A4F, 0x5539, 0x9A50, 0x5540, 0x9A51, 0x5563, 0x9A52, 0x554C, 0x9A53, 0x552E,
- 0x9A54, 0x555C, 0x9A55, 0x5545, 0x9A56, 0x5556, 0x9A57, 0x5557, 0x9A58, 0x5538, 0x9A59, 0x5533, 0x9A5A, 0x555D, 0x9A5B, 0x5599,
- 0x9A5C, 0x5580, 0x9A5D, 0x54AF, 0x9A5E, 0x558A, 0x9A5F, 0x559F, 0x9A60, 0x557B, 0x9A61, 0x557E, 0x9A62, 0x5598, 0x9A63, 0x559E,
- 0x9A64, 0x55AE, 0x9A65, 0x557C, 0x9A66, 0x5583, 0x9A67, 0x55A9, 0x9A68, 0x5587, 0x9A69, 0x55A8, 0x9A6A, 0x55DA, 0x9A6B, 0x55C5,
- 0x9A6C, 0x55DF, 0x9A6D, 0x55C4, 0x9A6E, 0x55DC, 0x9A6F, 0x55E4, 0x9A70, 0x55D4, 0x9A71, 0x5614, 0x9A72, 0x55F7, 0x9A73, 0x5616,
- 0x9A74, 0x55FE, 0x9A75, 0x55FD, 0x9A76, 0x561B, 0x9A77, 0x55F9, 0x9A78, 0x564E, 0x9A79, 0x5650, 0x9A7A, 0x71DF, 0x9A7B, 0x5634,
- 0x9A7C, 0x5636, 0x9A7D, 0x5632, 0x9A7E, 0x5638, 0x9A80, 0x566B, 0x9A81, 0x5664, 0x9A82, 0x562F, 0x9A83, 0x566C, 0x9A84, 0x566A,
- 0x9A85, 0x5686, 0x9A86, 0x5680, 0x9A87, 0x568A, 0x9A88, 0x56A0, 0x9A89, 0x5694, 0x9A8A, 0x568F, 0x9A8B, 0x56A5, 0x9A8C, 0x56AE,
- 0x9A8D, 0x56B6, 0x9A8E, 0x56B4, 0x9A8F, 0x56C2, 0x9A90, 0x56BC, 0x9A91, 0x56C1, 0x9A92, 0x56C3, 0x9A93, 0x56C0, 0x9A94, 0x56C8,
- 0x9A95, 0x56CE, 0x9A96, 0x56D1, 0x9A97, 0x56D3, 0x9A98, 0x56D7, 0x9A99, 0x56EE, 0x9A9A, 0x56F9, 0x9A9B, 0x5700, 0x9A9C, 0x56FF,
- 0x9A9D, 0x5704, 0x9A9E, 0x5709, 0x9A9F, 0x5708, 0x9AA0, 0x570B, 0x9AA1, 0x570D, 0x9AA2, 0x5713, 0x9AA3, 0x5718, 0x9AA4, 0x5716,
- 0x9AA5, 0x55C7, 0x9AA6, 0x571C, 0x9AA7, 0x5726, 0x9AA8, 0x5737, 0x9AA9, 0x5738, 0x9AAA, 0x574E, 0x9AAB, 0x573B, 0x9AAC, 0x5740,
- 0x9AAD, 0x574F, 0x9AAE, 0x5769, 0x9AAF, 0x57C0, 0x9AB0, 0x5788, 0x9AB1, 0x5761, 0x9AB2, 0x577F, 0x9AB3, 0x5789, 0x9AB4, 0x5793,
- 0x9AB5, 0x57A0, 0x9AB6, 0x57B3, 0x9AB7, 0x57A4, 0x9AB8, 0x57AA, 0x9AB9, 0x57B0, 0x9ABA, 0x57C3, 0x9ABB, 0x57C6, 0x9ABC, 0x57D4,
- 0x9ABD, 0x57D2, 0x9ABE, 0x57D3, 0x9ABF, 0x580A, 0x9AC0, 0x57D6, 0x9AC1, 0x57E3, 0x9AC2, 0x580B, 0x9AC3, 0x5819, 0x9AC4, 0x581D,
- 0x9AC5, 0x5872, 0x9AC6, 0x5821, 0x9AC7, 0x5862, 0x9AC8, 0x584B, 0x9AC9, 0x5870, 0x9ACA, 0x6BC0, 0x9ACB, 0x5852, 0x9ACC, 0x583D,
- 0x9ACD, 0x5879, 0x9ACE, 0x5885, 0x9ACF, 0x58B9, 0x9AD0, 0x589F, 0x9AD1, 0x58AB, 0x9AD2, 0x58BA, 0x9AD3, 0x58DE, 0x9AD4, 0x58BB,
- 0x9AD5, 0x58B8, 0x9AD6, 0x58AE, 0x9AD7, 0x58C5, 0x9AD8, 0x58D3, 0x9AD9, 0x58D1, 0x9ADA, 0x58D7, 0x9ADB, 0x58D9, 0x9ADC, 0x58D8,
- 0x9ADD, 0x58E5, 0x9ADE, 0x58DC, 0x9ADF, 0x58E4, 0x9AE0, 0x58DF, 0x9AE1, 0x58EF, 0x9AE2, 0x58FA, 0x9AE3, 0x58F9, 0x9AE4, 0x58FB,
- 0x9AE5, 0x58FC, 0x9AE6, 0x58FD, 0x9AE7, 0x5902, 0x9AE8, 0x590A, 0x9AE9, 0x5910, 0x9AEA, 0x591B, 0x9AEB, 0x68A6, 0x9AEC, 0x5925,
- 0x9AED, 0x592C, 0x9AEE, 0x592D, 0x9AEF, 0x5932, 0x9AF0, 0x5938, 0x9AF1, 0x593E, 0x9AF2, 0x7AD2, 0x9AF3, 0x5955, 0x9AF4, 0x5950,
- 0x9AF5, 0x594E, 0x9AF6, 0x595A, 0x9AF7, 0x5958, 0x9AF8, 0x5962, 0x9AF9, 0x5960, 0x9AFA, 0x5967, 0x9AFB, 0x596C, 0x9AFC, 0x5969,
- 0x9B40, 0x5978, 0x9B41, 0x5981, 0x9B42, 0x599D, 0x9B43, 0x4F5E, 0x9B44, 0x4FAB, 0x9B45, 0x59A3, 0x9B46, 0x59B2, 0x9B47, 0x59C6,
- 0x9B48, 0x59E8, 0x9B49, 0x59DC, 0x9B4A, 0x598D, 0x9B4B, 0x59D9, 0x9B4C, 0x59DA, 0x9B4D, 0x5A25, 0x9B4E, 0x5A1F, 0x9B4F, 0x5A11,
- 0x9B50, 0x5A1C, 0x9B51, 0x5A09, 0x9B52, 0x5A1A, 0x9B53, 0x5A40, 0x9B54, 0x5A6C, 0x9B55, 0x5A49, 0x9B56, 0x5A35, 0x9B57, 0x5A36,
- 0x9B58, 0x5A62, 0x9B59, 0x5A6A, 0x9B5A, 0x5A9A, 0x9B5B, 0x5ABC, 0x9B5C, 0x5ABE, 0x9B5D, 0x5ACB, 0x9B5E, 0x5AC2, 0x9B5F, 0x5ABD,
- 0x9B60, 0x5AE3, 0x9B61, 0x5AD7, 0x9B62, 0x5AE6, 0x9B63, 0x5AE9, 0x9B64, 0x5AD6, 0x9B65, 0x5AFA, 0x9B66, 0x5AFB, 0x9B67, 0x5B0C,
- 0x9B68, 0x5B0B, 0x9B69, 0x5B16, 0x9B6A, 0x5B32, 0x9B6B, 0x5AD0, 0x9B6C, 0x5B2A, 0x9B6D, 0x5B36, 0x9B6E, 0x5B3E, 0x9B6F, 0x5B43,
- 0x9B70, 0x5B45, 0x9B71, 0x5B40, 0x9B72, 0x5B51, 0x9B73, 0x5B55, 0x9B74, 0x5B5A, 0x9B75, 0x5B5B, 0x9B76, 0x5B65, 0x9B77, 0x5B69,
- 0x9B78, 0x5B70, 0x9B79, 0x5B73, 0x9B7A, 0x5B75, 0x9B7B, 0x5B78, 0x9B7C, 0x6588, 0x9B7D, 0x5B7A, 0x9B7E, 0x5B80, 0x9B80, 0x5B83,
- 0x9B81, 0x5BA6, 0x9B82, 0x5BB8, 0x9B83, 0x5BC3, 0x9B84, 0x5BC7, 0x9B85, 0x5BC9, 0x9B86, 0x5BD4, 0x9B87, 0x5BD0, 0x9B88, 0x5BE4,
- 0x9B89, 0x5BE6, 0x9B8A, 0x5BE2, 0x9B8B, 0x5BDE, 0x9B8C, 0x5BE5, 0x9B8D, 0x5BEB, 0x9B8E, 0x5BF0, 0x9B8F, 0x5BF6, 0x9B90, 0x5BF3,
- 0x9B91, 0x5C05, 0x9B92, 0x5C07, 0x9B93, 0x5C08, 0x9B94, 0x5C0D, 0x9B95, 0x5C13, 0x9B96, 0x5C20, 0x9B97, 0x5C22, 0x9B98, 0x5C28,
- 0x9B99, 0x5C38, 0x9B9A, 0x5C39, 0x9B9B, 0x5C41, 0x9B9C, 0x5C46, 0x9B9D, 0x5C4E, 0x9B9E, 0x5C53, 0x9B9F, 0x5C50, 0x9BA0, 0x5C4F,
- 0x9BA1, 0x5B71, 0x9BA2, 0x5C6C, 0x9BA3, 0x5C6E, 0x9BA4, 0x4E62, 0x9BA5, 0x5C76, 0x9BA6, 0x5C79, 0x9BA7, 0x5C8C, 0x9BA8, 0x5C91,
- 0x9BA9, 0x5C94, 0x9BAA, 0x599B, 0x9BAB, 0x5CAB, 0x9BAC, 0x5CBB, 0x9BAD, 0x5CB6, 0x9BAE, 0x5CBC, 0x9BAF, 0x5CB7, 0x9BB0, 0x5CC5,
- 0x9BB1, 0x5CBE, 0x9BB2, 0x5CC7, 0x9BB3, 0x5CD9, 0x9BB4, 0x5CE9, 0x9BB5, 0x5CFD, 0x9BB6, 0x5CFA, 0x9BB7, 0x5CED, 0x9BB8, 0x5D8C,
- 0x9BB9, 0x5CEA, 0x9BBA, 0x5D0B, 0x9BBB, 0x5D15, 0x9BBC, 0x5D17, 0x9BBD, 0x5D5C, 0x9BBE, 0x5D1F, 0x9BBF, 0x5D1B, 0x9BC0, 0x5D11,
- 0x9BC1, 0x5D14, 0x9BC2, 0x5D22, 0x9BC3, 0x5D1A, 0x9BC4, 0x5D19, 0x9BC5, 0x5D18, 0x9BC6, 0x5D4C, 0x9BC7, 0x5D52, 0x9BC8, 0x5D4E,
- 0x9BC9, 0x5D4B, 0x9BCA, 0x5D6C, 0x9BCB, 0x5D73, 0x9BCC, 0x5D76, 0x9BCD, 0x5D87, 0x9BCE, 0x5D84, 0x9BCF, 0x5D82, 0x9BD0, 0x5DA2,
- 0x9BD1, 0x5D9D, 0x9BD2, 0x5DAC, 0x9BD3, 0x5DAE, 0x9BD4, 0x5DBD, 0x9BD5, 0x5D90, 0x9BD6, 0x5DB7, 0x9BD7, 0x5DBC, 0x9BD8, 0x5DC9,
- 0x9BD9, 0x5DCD, 0x9BDA, 0x5DD3, 0x9BDB, 0x5DD2, 0x9BDC, 0x5DD6, 0x9BDD, 0x5DDB, 0x9BDE, 0x5DEB, 0x9BDF, 0x5DF2, 0x9BE0, 0x5DF5,
- 0x9BE1, 0x5E0B, 0x9BE2, 0x5E1A, 0x9BE3, 0x5E19, 0x9BE4, 0x5E11, 0x9BE5, 0x5E1B, 0x9BE6, 0x5E36, 0x9BE7, 0x5E37, 0x9BE8, 0x5E44,
- 0x9BE9, 0x5E43, 0x9BEA, 0x5E40, 0x9BEB, 0x5E4E, 0x9BEC, 0x5E57, 0x9BED, 0x5E54, 0x9BEE, 0x5E5F, 0x9BEF, 0x5E62, 0x9BF0, 0x5E64,
- 0x9BF1, 0x5E47, 0x9BF2, 0x5E75, 0x9BF3, 0x5E76, 0x9BF4, 0x5E7A, 0x9BF5, 0x9EBC, 0x9BF6, 0x5E7F, 0x9BF7, 0x5EA0, 0x9BF8, 0x5EC1,
- 0x9BF9, 0x5EC2, 0x9BFA, 0x5EC8, 0x9BFB, 0x5ED0, 0x9BFC, 0x5ECF, 0x9C40, 0x5ED6, 0x9C41, 0x5EE3, 0x9C42, 0x5EDD, 0x9C43, 0x5EDA,
- 0x9C44, 0x5EDB, 0x9C45, 0x5EE2, 0x9C46, 0x5EE1, 0x9C47, 0x5EE8, 0x9C48, 0x5EE9, 0x9C49, 0x5EEC, 0x9C4A, 0x5EF1, 0x9C4B, 0x5EF3,
- 0x9C4C, 0x5EF0, 0x9C4D, 0x5EF4, 0x9C4E, 0x5EF8, 0x9C4F, 0x5EFE, 0x9C50, 0x5F03, 0x9C51, 0x5F09, 0x9C52, 0x5F5D, 0x9C53, 0x5F5C,
- 0x9C54, 0x5F0B, 0x9C55, 0x5F11, 0x9C56, 0x5F16, 0x9C57, 0x5F29, 0x9C58, 0x5F2D, 0x9C59, 0x5F38, 0x9C5A, 0x5F41, 0x9C5B, 0x5F48,
- 0x9C5C, 0x5F4C, 0x9C5D, 0x5F4E, 0x9C5E, 0x5F2F, 0x9C5F, 0x5F51, 0x9C60, 0x5F56, 0x9C61, 0x5F57, 0x9C62, 0x5F59, 0x9C63, 0x5F61,
- 0x9C64, 0x5F6D, 0x9C65, 0x5F73, 0x9C66, 0x5F77, 0x9C67, 0x5F83, 0x9C68, 0x5F82, 0x9C69, 0x5F7F, 0x9C6A, 0x5F8A, 0x9C6B, 0x5F88,
- 0x9C6C, 0x5F91, 0x9C6D, 0x5F87, 0x9C6E, 0x5F9E, 0x9C6F, 0x5F99, 0x9C70, 0x5F98, 0x9C71, 0x5FA0, 0x9C72, 0x5FA8, 0x9C73, 0x5FAD,
- 0x9C74, 0x5FBC, 0x9C75, 0x5FD6, 0x9C76, 0x5FFB, 0x9C77, 0x5FE4, 0x9C78, 0x5FF8, 0x9C79, 0x5FF1, 0x9C7A, 0x5FDD, 0x9C7B, 0x60B3,
- 0x9C7C, 0x5FFF, 0x9C7D, 0x6021, 0x9C7E, 0x6060, 0x9C80, 0x6019, 0x9C81, 0x6010, 0x9C82, 0x6029, 0x9C83, 0x600E, 0x9C84, 0x6031,
- 0x9C85, 0x601B, 0x9C86, 0x6015, 0x9C87, 0x602B, 0x9C88, 0x6026, 0x9C89, 0x600F, 0x9C8A, 0x603A, 0x9C8B, 0x605A, 0x9C8C, 0x6041,
- 0x9C8D, 0x606A, 0x9C8E, 0x6077, 0x9C8F, 0x605F, 0x9C90, 0x604A, 0x9C91, 0x6046, 0x9C92, 0x604D, 0x9C93, 0x6063, 0x9C94, 0x6043,
- 0x9C95, 0x6064, 0x9C96, 0x6042, 0x9C97, 0x606C, 0x9C98, 0x606B, 0x9C99, 0x6059, 0x9C9A, 0x6081, 0x9C9B, 0x608D, 0x9C9C, 0x60E7,
- 0x9C9D, 0x6083, 0x9C9E, 0x609A, 0x9C9F, 0x6084, 0x9CA0, 0x609B, 0x9CA1, 0x6096, 0x9CA2, 0x6097, 0x9CA3, 0x6092, 0x9CA4, 0x60A7,
- 0x9CA5, 0x608B, 0x9CA6, 0x60E1, 0x9CA7, 0x60B8, 0x9CA8, 0x60E0, 0x9CA9, 0x60D3, 0x9CAA, 0x60B4, 0x9CAB, 0x5FF0, 0x9CAC, 0x60BD,
- 0x9CAD, 0x60C6, 0x9CAE, 0x60B5, 0x9CAF, 0x60D8, 0x9CB0, 0x614D, 0x9CB1, 0x6115, 0x9CB2, 0x6106, 0x9CB3, 0x60F6, 0x9CB4, 0x60F7,
- 0x9CB5, 0x6100, 0x9CB6, 0x60F4, 0x9CB7, 0x60FA, 0x9CB8, 0x6103, 0x9CB9, 0x6121, 0x9CBA, 0x60FB, 0x9CBB, 0x60F1, 0x9CBC, 0x610D,
- 0x9CBD, 0x610E, 0x9CBE, 0x6147, 0x9CBF, 0x613E, 0x9CC0, 0x6128, 0x9CC1, 0x6127, 0x9CC2, 0x614A, 0x9CC3, 0x613F, 0x9CC4, 0x613C,
- 0x9CC5, 0x612C, 0x9CC6, 0x6134, 0x9CC7, 0x613D, 0x9CC8, 0x6142, 0x9CC9, 0x6144, 0x9CCA, 0x6173, 0x9CCB, 0x6177, 0x9CCC, 0x6158,
- 0x9CCD, 0x6159, 0x9CCE, 0x615A, 0x9CCF, 0x616B, 0x9CD0, 0x6174, 0x9CD1, 0x616F, 0x9CD2, 0x6165, 0x9CD3, 0x6171, 0x9CD4, 0x615F,
- 0x9CD5, 0x615D, 0x9CD6, 0x6153, 0x9CD7, 0x6175, 0x9CD8, 0x6199, 0x9CD9, 0x6196, 0x9CDA, 0x6187, 0x9CDB, 0x61AC, 0x9CDC, 0x6194,
- 0x9CDD, 0x619A, 0x9CDE, 0x618A, 0x9CDF, 0x6191, 0x9CE0, 0x61AB, 0x9CE1, 0x61AE, 0x9CE2, 0x61CC, 0x9CE3, 0x61CA, 0x9CE4, 0x61C9,
- 0x9CE5, 0x61F7, 0x9CE6, 0x61C8, 0x9CE7, 0x61C3, 0x9CE8, 0x61C6, 0x9CE9, 0x61BA, 0x9CEA, 0x61CB, 0x9CEB, 0x7F79, 0x9CEC, 0x61CD,
- 0x9CED, 0x61E6, 0x9CEE, 0x61E3, 0x9CEF, 0x61F6, 0x9CF0, 0x61FA, 0x9CF1, 0x61F4, 0x9CF2, 0x61FF, 0x9CF3, 0x61FD, 0x9CF4, 0x61FC,
- 0x9CF5, 0x61FE, 0x9CF6, 0x6200, 0x9CF7, 0x6208, 0x9CF8, 0x6209, 0x9CF9, 0x620D, 0x9CFA, 0x620C, 0x9CFB, 0x6214, 0x9CFC, 0x621B,
- 0x9D40, 0x621E, 0x9D41, 0x6221, 0x9D42, 0x622A, 0x9D43, 0x622E, 0x9D44, 0x6230, 0x9D45, 0x6232, 0x9D46, 0x6233, 0x9D47, 0x6241,
- 0x9D48, 0x624E, 0x9D49, 0x625E, 0x9D4A, 0x6263, 0x9D4B, 0x625B, 0x9D4C, 0x6260, 0x9D4D, 0x6268, 0x9D4E, 0x627C, 0x9D4F, 0x6282,
- 0x9D50, 0x6289, 0x9D51, 0x627E, 0x9D52, 0x6292, 0x9D53, 0x6293, 0x9D54, 0x6296, 0x9D55, 0x62D4, 0x9D56, 0x6283, 0x9D57, 0x6294,
- 0x9D58, 0x62D7, 0x9D59, 0x62D1, 0x9D5A, 0x62BB, 0x9D5B, 0x62CF, 0x9D5C, 0x62FF, 0x9D5D, 0x62C6, 0x9D5E, 0x64D4, 0x9D5F, 0x62C8,
- 0x9D60, 0x62DC, 0x9D61, 0x62CC, 0x9D62, 0x62CA, 0x9D63, 0x62C2, 0x9D64, 0x62C7, 0x9D65, 0x629B, 0x9D66, 0x62C9, 0x9D67, 0x630C,
- 0x9D68, 0x62EE, 0x9D69, 0x62F1, 0x9D6A, 0x6327, 0x9D6B, 0x6302, 0x9D6C, 0x6308, 0x9D6D, 0x62EF, 0x9D6E, 0x62F5, 0x9D6F, 0x6350,
- 0x9D70, 0x633E, 0x9D71, 0x634D, 0x9D72, 0x641C, 0x9D73, 0x634F, 0x9D74, 0x6396, 0x9D75, 0x638E, 0x9D76, 0x6380, 0x9D77, 0x63AB,
- 0x9D78, 0x6376, 0x9D79, 0x63A3, 0x9D7A, 0x638F, 0x9D7B, 0x6389, 0x9D7C, 0x639F, 0x9D7D, 0x63B5, 0x9D7E, 0x636B, 0x9D80, 0x6369,
- 0x9D81, 0x63BE, 0x9D82, 0x63E9, 0x9D83, 0x63C0, 0x9D84, 0x63C6, 0x9D85, 0x63E3, 0x9D86, 0x63C9, 0x9D87, 0x63D2, 0x9D88, 0x63F6,
- 0x9D89, 0x63C4, 0x9D8A, 0x6416, 0x9D8B, 0x6434, 0x9D8C, 0x6406, 0x9D8D, 0x6413, 0x9D8E, 0x6426, 0x9D8F, 0x6436, 0x9D90, 0x651D,
- 0x9D91, 0x6417, 0x9D92, 0x6428, 0x9D93, 0x640F, 0x9D94, 0x6467, 0x9D95, 0x646F, 0x9D96, 0x6476, 0x9D97, 0x644E, 0x9D98, 0x652A,
- 0x9D99, 0x6495, 0x9D9A, 0x6493, 0x9D9B, 0x64A5, 0x9D9C, 0x64A9, 0x9D9D, 0x6488, 0x9D9E, 0x64BC, 0x9D9F, 0x64DA, 0x9DA0, 0x64D2,
- 0x9DA1, 0x64C5, 0x9DA2, 0x64C7, 0x9DA3, 0x64BB, 0x9DA4, 0x64D8, 0x9DA5, 0x64C2, 0x9DA6, 0x64F1, 0x9DA7, 0x64E7, 0x9DA8, 0x8209,
- 0x9DA9, 0x64E0, 0x9DAA, 0x64E1, 0x9DAB, 0x62AC, 0x9DAC, 0x64E3, 0x9DAD, 0x64EF, 0x9DAE, 0x652C, 0x9DAF, 0x64F6, 0x9DB0, 0x64F4,
- 0x9DB1, 0x64F2, 0x9DB2, 0x64FA, 0x9DB3, 0x6500, 0x9DB4, 0x64FD, 0x9DB5, 0x6518, 0x9DB6, 0x651C, 0x9DB7, 0x6505, 0x9DB8, 0x6524,
- 0x9DB9, 0x6523, 0x9DBA, 0x652B, 0x9DBB, 0x6534, 0x9DBC, 0x6535, 0x9DBD, 0x6537, 0x9DBE, 0x6536, 0x9DBF, 0x6538, 0x9DC0, 0x754B,
- 0x9DC1, 0x6548, 0x9DC2, 0x6556, 0x9DC3, 0x6555, 0x9DC4, 0x654D, 0x9DC5, 0x6558, 0x9DC6, 0x655E, 0x9DC7, 0x655D, 0x9DC8, 0x6572,
- 0x9DC9, 0x6578, 0x9DCA, 0x6582, 0x9DCB, 0x6583, 0x9DCC, 0x8B8A, 0x9DCD, 0x659B, 0x9DCE, 0x659F, 0x9DCF, 0x65AB, 0x9DD0, 0x65B7,
- 0x9DD1, 0x65C3, 0x9DD2, 0x65C6, 0x9DD3, 0x65C1, 0x9DD4, 0x65C4, 0x9DD5, 0x65CC, 0x9DD6, 0x65D2, 0x9DD7, 0x65DB, 0x9DD8, 0x65D9,
- 0x9DD9, 0x65E0, 0x9DDA, 0x65E1, 0x9DDB, 0x65F1, 0x9DDC, 0x6772, 0x9DDD, 0x660A, 0x9DDE, 0x6603, 0x9DDF, 0x65FB, 0x9DE0, 0x6773,
- 0x9DE1, 0x6635, 0x9DE2, 0x6636, 0x9DE3, 0x6634, 0x9DE4, 0x661C, 0x9DE5, 0x664F, 0x9DE6, 0x6644, 0x9DE7, 0x6649, 0x9DE8, 0x6641,
- 0x9DE9, 0x665E, 0x9DEA, 0x665D, 0x9DEB, 0x6664, 0x9DEC, 0x6667, 0x9DED, 0x6668, 0x9DEE, 0x665F, 0x9DEF, 0x6662, 0x9DF0, 0x6670,
- 0x9DF1, 0x6683, 0x9DF2, 0x6688, 0x9DF3, 0x668E, 0x9DF4, 0x6689, 0x9DF5, 0x6684, 0x9DF6, 0x6698, 0x9DF7, 0x669D, 0x9DF8, 0x66C1,
- 0x9DF9, 0x66B9, 0x9DFA, 0x66C9, 0x9DFB, 0x66BE, 0x9DFC, 0x66BC, 0x9E40, 0x66C4, 0x9E41, 0x66B8, 0x9E42, 0x66D6, 0x9E43, 0x66DA,
- 0x9E44, 0x66E0, 0x9E45, 0x663F, 0x9E46, 0x66E6, 0x9E47, 0x66E9, 0x9E48, 0x66F0, 0x9E49, 0x66F5, 0x9E4A, 0x66F7, 0x9E4B, 0x670F,
- 0x9E4C, 0x6716, 0x9E4D, 0x671E, 0x9E4E, 0x6726, 0x9E4F, 0x6727, 0x9E50, 0x9738, 0x9E51, 0x672E, 0x9E52, 0x673F, 0x9E53, 0x6736,
- 0x9E54, 0x6741, 0x9E55, 0x6738, 0x9E56, 0x6737, 0x9E57, 0x6746, 0x9E58, 0x675E, 0x9E59, 0x6760, 0x9E5A, 0x6759, 0x9E5B, 0x6763,
- 0x9E5C, 0x6764, 0x9E5D, 0x6789, 0x9E5E, 0x6770, 0x9E5F, 0x67A9, 0x9E60, 0x677C, 0x9E61, 0x676A, 0x9E62, 0x678C, 0x9E63, 0x678B,
- 0x9E64, 0x67A6, 0x9E65, 0x67A1, 0x9E66, 0x6785, 0x9E67, 0x67B7, 0x9E68, 0x67EF, 0x9E69, 0x67B4, 0x9E6A, 0x67EC, 0x9E6B, 0x67B3,
- 0x9E6C, 0x67E9, 0x9E6D, 0x67B8, 0x9E6E, 0x67E4, 0x9E6F, 0x67DE, 0x9E70, 0x67DD, 0x9E71, 0x67E2, 0x9E72, 0x67EE, 0x9E73, 0x67B9,
- 0x9E74, 0x67CE, 0x9E75, 0x67C6, 0x9E76, 0x67E7, 0x9E77, 0x6A9C, 0x9E78, 0x681E, 0x9E79, 0x6846, 0x9E7A, 0x6829, 0x9E7B, 0x6840,
- 0x9E7C, 0x684D, 0x9E7D, 0x6832, 0x9E7E, 0x684E, 0x9E80, 0x68B3, 0x9E81, 0x682B, 0x9E82, 0x6859, 0x9E83, 0x6863, 0x9E84, 0x6877,
- 0x9E85, 0x687F, 0x9E86, 0x689F, 0x9E87, 0x688F, 0x9E88, 0x68AD, 0x9E89, 0x6894, 0x9E8A, 0x689D, 0x9E8B, 0x689B, 0x9E8C, 0x6883,
- 0x9E8D, 0x6AAE, 0x9E8E, 0x68B9, 0x9E8F, 0x6874, 0x9E90, 0x68B5, 0x9E91, 0x68A0, 0x9E92, 0x68BA, 0x9E93, 0x690F, 0x9E94, 0x688D,
- 0x9E95, 0x687E, 0x9E96, 0x6901, 0x9E97, 0x68CA, 0x9E98, 0x6908, 0x9E99, 0x68D8, 0x9E9A, 0x6922, 0x9E9B, 0x6926, 0x9E9C, 0x68E1,
- 0x9E9D, 0x690C, 0x9E9E, 0x68CD, 0x9E9F, 0x68D4, 0x9EA0, 0x68E7, 0x9EA1, 0x68D5, 0x9EA2, 0x6936, 0x9EA3, 0x6912, 0x9EA4, 0x6904,
- 0x9EA5, 0x68D7, 0x9EA6, 0x68E3, 0x9EA7, 0x6925, 0x9EA8, 0x68F9, 0x9EA9, 0x68E0, 0x9EAA, 0x68EF, 0x9EAB, 0x6928, 0x9EAC, 0x692A,
- 0x9EAD, 0x691A, 0x9EAE, 0x6923, 0x9EAF, 0x6921, 0x9EB0, 0x68C6, 0x9EB1, 0x6979, 0x9EB2, 0x6977, 0x9EB3, 0x695C, 0x9EB4, 0x6978,
- 0x9EB5, 0x696B, 0x9EB6, 0x6954, 0x9EB7, 0x697E, 0x9EB8, 0x696E, 0x9EB9, 0x6939, 0x9EBA, 0x6974, 0x9EBB, 0x693D, 0x9EBC, 0x6959,
- 0x9EBD, 0x6930, 0x9EBE, 0x6961, 0x9EBF, 0x695E, 0x9EC0, 0x695D, 0x9EC1, 0x6981, 0x9EC2, 0x696A, 0x9EC3, 0x69B2, 0x9EC4, 0x69AE,
- 0x9EC5, 0x69D0, 0x9EC6, 0x69BF, 0x9EC7, 0x69C1, 0x9EC8, 0x69D3, 0x9EC9, 0x69BE, 0x9ECA, 0x69CE, 0x9ECB, 0x5BE8, 0x9ECC, 0x69CA,
- 0x9ECD, 0x69DD, 0x9ECE, 0x69BB, 0x9ECF, 0x69C3, 0x9ED0, 0x69A7, 0x9ED1, 0x6A2E, 0x9ED2, 0x6991, 0x9ED3, 0x69A0, 0x9ED4, 0x699C,
- 0x9ED5, 0x6995, 0x9ED6, 0x69B4, 0x9ED7, 0x69DE, 0x9ED8, 0x69E8, 0x9ED9, 0x6A02, 0x9EDA, 0x6A1B, 0x9EDB, 0x69FF, 0x9EDC, 0x6B0A,
- 0x9EDD, 0x69F9, 0x9EDE, 0x69F2, 0x9EDF, 0x69E7, 0x9EE0, 0x6A05, 0x9EE1, 0x69B1, 0x9EE2, 0x6A1E, 0x9EE3, 0x69ED, 0x9EE4, 0x6A14,
- 0x9EE5, 0x69EB, 0x9EE6, 0x6A0A, 0x9EE7, 0x6A12, 0x9EE8, 0x6AC1, 0x9EE9, 0x6A23, 0x9EEA, 0x6A13, 0x9EEB, 0x6A44, 0x9EEC, 0x6A0C,
- 0x9EED, 0x6A72, 0x9EEE, 0x6A36, 0x9EEF, 0x6A78, 0x9EF0, 0x6A47, 0x9EF1, 0x6A62, 0x9EF2, 0x6A59, 0x9EF3, 0x6A66, 0x9EF4, 0x6A48,
- 0x9EF5, 0x6A38, 0x9EF6, 0x6A22, 0x9EF7, 0x6A90, 0x9EF8, 0x6A8D, 0x9EF9, 0x6AA0, 0x9EFA, 0x6A84, 0x9EFB, 0x6AA2, 0x9EFC, 0x6AA3,
- 0x9F40, 0x6A97, 0x9F41, 0x8617, 0x9F42, 0x6ABB, 0x9F43, 0x6AC3, 0x9F44, 0x6AC2, 0x9F45, 0x6AB8, 0x9F46, 0x6AB3, 0x9F47, 0x6AAC,
- 0x9F48, 0x6ADE, 0x9F49, 0x6AD1, 0x9F4A, 0x6ADF, 0x9F4B, 0x6AAA, 0x9F4C, 0x6ADA, 0x9F4D, 0x6AEA, 0x9F4E, 0x6AFB, 0x9F4F, 0x6B05,
- 0x9F50, 0x8616, 0x9F51, 0x6AFA, 0x9F52, 0x6B12, 0x9F53, 0x6B16, 0x9F54, 0x9B31, 0x9F55, 0x6B1F, 0x9F56, 0x6B38, 0x9F57, 0x6B37,
- 0x9F58, 0x76DC, 0x9F59, 0x6B39, 0x9F5A, 0x98EE, 0x9F5B, 0x6B47, 0x9F5C, 0x6B43, 0x9F5D, 0x6B49, 0x9F5E, 0x6B50, 0x9F5F, 0x6B59,
- 0x9F60, 0x6B54, 0x9F61, 0x6B5B, 0x9F62, 0x6B5F, 0x9F63, 0x6B61, 0x9F64, 0x6B78, 0x9F65, 0x6B79, 0x9F66, 0x6B7F, 0x9F67, 0x6B80,
- 0x9F68, 0x6B84, 0x9F69, 0x6B83, 0x9F6A, 0x6B8D, 0x9F6B, 0x6B98, 0x9F6C, 0x6B95, 0x9F6D, 0x6B9E, 0x9F6E, 0x6BA4, 0x9F6F, 0x6BAA,
- 0x9F70, 0x6BAB, 0x9F71, 0x6BAF, 0x9F72, 0x6BB2, 0x9F73, 0x6BB1, 0x9F74, 0x6BB3, 0x9F75, 0x6BB7, 0x9F76, 0x6BBC, 0x9F77, 0x6BC6,
- 0x9F78, 0x6BCB, 0x9F79, 0x6BD3, 0x9F7A, 0x6BDF, 0x9F7B, 0x6BEC, 0x9F7C, 0x6BEB, 0x9F7D, 0x6BF3, 0x9F7E, 0x6BEF, 0x9F80, 0x9EBE,
- 0x9F81, 0x6C08, 0x9F82, 0x6C13, 0x9F83, 0x6C14, 0x9F84, 0x6C1B, 0x9F85, 0x6C24, 0x9F86, 0x6C23, 0x9F87, 0x6C5E, 0x9F88, 0x6C55,
- 0x9F89, 0x6C62, 0x9F8A, 0x6C6A, 0x9F8B, 0x6C82, 0x9F8C, 0x6C8D, 0x9F8D, 0x6C9A, 0x9F8E, 0x6C81, 0x9F8F, 0x6C9B, 0x9F90, 0x6C7E,
- 0x9F91, 0x6C68, 0x9F92, 0x6C73, 0x9F93, 0x6C92, 0x9F94, 0x6C90, 0x9F95, 0x6CC4, 0x9F96, 0x6CF1, 0x9F97, 0x6CD3, 0x9F98, 0x6CBD,
- 0x9F99, 0x6CD7, 0x9F9A, 0x6CC5, 0x9F9B, 0x6CDD, 0x9F9C, 0x6CAE, 0x9F9D, 0x6CB1, 0x9F9E, 0x6CBE, 0x9F9F, 0x6CBA, 0x9FA0, 0x6CDB,
- 0x9FA1, 0x6CEF, 0x9FA2, 0x6CD9, 0x9FA3, 0x6CEA, 0x9FA4, 0x6D1F, 0x9FA5, 0x884D, 0x9FA6, 0x6D36, 0x9FA7, 0x6D2B, 0x9FA8, 0x6D3D,
- 0x9FA9, 0x6D38, 0x9FAA, 0x6D19, 0x9FAB, 0x6D35, 0x9FAC, 0x6D33, 0x9FAD, 0x6D12, 0x9FAE, 0x6D0C, 0x9FAF, 0x6D63, 0x9FB0, 0x6D93,
- 0x9FB1, 0x6D64, 0x9FB2, 0x6D5A, 0x9FB3, 0x6D79, 0x9FB4, 0x6D59, 0x9FB5, 0x6D8E, 0x9FB6, 0x6D95, 0x9FB7, 0x6FE4, 0x9FB8, 0x6D85,
- 0x9FB9, 0x6DF9, 0x9FBA, 0x6E15, 0x9FBB, 0x6E0A, 0x9FBC, 0x6DB5, 0x9FBD, 0x6DC7, 0x9FBE, 0x6DE6, 0x9FBF, 0x6DB8, 0x9FC0, 0x6DC6,
- 0x9FC1, 0x6DEC, 0x9FC2, 0x6DDE, 0x9FC3, 0x6DCC, 0x9FC4, 0x6DE8, 0x9FC5, 0x6DD2, 0x9FC6, 0x6DC5, 0x9FC7, 0x6DFA, 0x9FC8, 0x6DD9,
- 0x9FC9, 0x6DE4, 0x9FCA, 0x6DD5, 0x9FCB, 0x6DEA, 0x9FCC, 0x6DEE, 0x9FCD, 0x6E2D, 0x9FCE, 0x6E6E, 0x9FCF, 0x6E2E, 0x9FD0, 0x6E19,
- 0x9FD1, 0x6E72, 0x9FD2, 0x6E5F, 0x9FD3, 0x6E3E, 0x9FD4, 0x6E23, 0x9FD5, 0x6E6B, 0x9FD6, 0x6E2B, 0x9FD7, 0x6E76, 0x9FD8, 0x6E4D,
- 0x9FD9, 0x6E1F, 0x9FDA, 0x6E43, 0x9FDB, 0x6E3A, 0x9FDC, 0x6E4E, 0x9FDD, 0x6E24, 0x9FDE, 0x6EFF, 0x9FDF, 0x6E1D, 0x9FE0, 0x6E38,
- 0x9FE1, 0x6E82, 0x9FE2, 0x6EAA, 0x9FE3, 0x6E98, 0x9FE4, 0x6EC9, 0x9FE5, 0x6EB7, 0x9FE6, 0x6ED3, 0x9FE7, 0x6EBD, 0x9FE8, 0x6EAF,
- 0x9FE9, 0x6EC4, 0x9FEA, 0x6EB2, 0x9FEB, 0x6ED4, 0x9FEC, 0x6ED5, 0x9FED, 0x6E8F, 0x9FEE, 0x6EA5, 0x9FEF, 0x6EC2, 0x9FF0, 0x6E9F,
- 0x9FF1, 0x6F41, 0x9FF2, 0x6F11, 0x9FF3, 0x704C, 0x9FF4, 0x6EEC, 0x9FF5, 0x6EF8, 0x9FF6, 0x6EFE, 0x9FF7, 0x6F3F, 0x9FF8, 0x6EF2,
- 0x9FF9, 0x6F31, 0x9FFA, 0x6EEF, 0x9FFB, 0x6F32, 0x9FFC, 0x6ECC, 0xE040, 0x6F3E, 0xE041, 0x6F13, 0xE042, 0x6EF7, 0xE043, 0x6F86,
- 0xE044, 0x6F7A, 0xE045, 0x6F78, 0xE046, 0x6F81, 0xE047, 0x6F80, 0xE048, 0x6F6F, 0xE049, 0x6F5B, 0xE04A, 0x6FF3, 0xE04B, 0x6F6D,
- 0xE04C, 0x6F82, 0xE04D, 0x6F7C, 0xE04E, 0x6F58, 0xE04F, 0x6F8E, 0xE050, 0x6F91, 0xE051, 0x6FC2, 0xE052, 0x6F66, 0xE053, 0x6FB3,
- 0xE054, 0x6FA3, 0xE055, 0x6FA1, 0xE056, 0x6FA4, 0xE057, 0x6FB9, 0xE058, 0x6FC6, 0xE059, 0x6FAA, 0xE05A, 0x6FDF, 0xE05B, 0x6FD5,
- 0xE05C, 0x6FEC, 0xE05D, 0x6FD4, 0xE05E, 0x6FD8, 0xE05F, 0x6FF1, 0xE060, 0x6FEE, 0xE061, 0x6FDB, 0xE062, 0x7009, 0xE063, 0x700B,
- 0xE064, 0x6FFA, 0xE065, 0x7011, 0xE066, 0x7001, 0xE067, 0x700F, 0xE068, 0x6FFE, 0xE069, 0x701B, 0xE06A, 0x701A, 0xE06B, 0x6F74,
- 0xE06C, 0x701D, 0xE06D, 0x7018, 0xE06E, 0x701F, 0xE06F, 0x7030, 0xE070, 0x703E, 0xE071, 0x7032, 0xE072, 0x7051, 0xE073, 0x7063,
- 0xE074, 0x7099, 0xE075, 0x7092, 0xE076, 0x70AF, 0xE077, 0x70F1, 0xE078, 0x70AC, 0xE079, 0x70B8, 0xE07A, 0x70B3, 0xE07B, 0x70AE,
- 0xE07C, 0x70DF, 0xE07D, 0x70CB, 0xE07E, 0x70DD, 0xE080, 0x70D9, 0xE081, 0x7109, 0xE082, 0x70FD, 0xE083, 0x711C, 0xE084, 0x7119,
- 0xE085, 0x7165, 0xE086, 0x7155, 0xE087, 0x7188, 0xE088, 0x7166, 0xE089, 0x7162, 0xE08A, 0x714C, 0xE08B, 0x7156, 0xE08C, 0x716C,
- 0xE08D, 0x718F, 0xE08E, 0x71FB, 0xE08F, 0x7184, 0xE090, 0x7195, 0xE091, 0x71A8, 0xE092, 0x71AC, 0xE093, 0x71D7, 0xE094, 0x71B9,
- 0xE095, 0x71BE, 0xE096, 0x71D2, 0xE097, 0x71C9, 0xE098, 0x71D4, 0xE099, 0x71CE, 0xE09A, 0x71E0, 0xE09B, 0x71EC, 0xE09C, 0x71E7,
- 0xE09D, 0x71F5, 0xE09E, 0x71FC, 0xE09F, 0x71F9, 0xE0A0, 0x71FF, 0xE0A1, 0x720D, 0xE0A2, 0x7210, 0xE0A3, 0x721B, 0xE0A4, 0x7228,
- 0xE0A5, 0x722D, 0xE0A6, 0x722C, 0xE0A7, 0x7230, 0xE0A8, 0x7232, 0xE0A9, 0x723B, 0xE0AA, 0x723C, 0xE0AB, 0x723F, 0xE0AC, 0x7240,
- 0xE0AD, 0x7246, 0xE0AE, 0x724B, 0xE0AF, 0x7258, 0xE0B0, 0x7274, 0xE0B1, 0x727E, 0xE0B2, 0x7282, 0xE0B3, 0x7281, 0xE0B4, 0x7287,
- 0xE0B5, 0x7292, 0xE0B6, 0x7296, 0xE0B7, 0x72A2, 0xE0B8, 0x72A7, 0xE0B9, 0x72B9, 0xE0BA, 0x72B2, 0xE0BB, 0x72C3, 0xE0BC, 0x72C6,
- 0xE0BD, 0x72C4, 0xE0BE, 0x72CE, 0xE0BF, 0x72D2, 0xE0C0, 0x72E2, 0xE0C1, 0x72E0, 0xE0C2, 0x72E1, 0xE0C3, 0x72F9, 0xE0C4, 0x72F7,
- 0xE0C5, 0x500F, 0xE0C6, 0x7317, 0xE0C7, 0x730A, 0xE0C8, 0x731C, 0xE0C9, 0x7316, 0xE0CA, 0x731D, 0xE0CB, 0x7334, 0xE0CC, 0x732F,
- 0xE0CD, 0x7329, 0xE0CE, 0x7325, 0xE0CF, 0x733E, 0xE0D0, 0x734E, 0xE0D1, 0x734F, 0xE0D2, 0x9ED8, 0xE0D3, 0x7357, 0xE0D4, 0x736A,
- 0xE0D5, 0x7368, 0xE0D6, 0x7370, 0xE0D7, 0x7378, 0xE0D8, 0x7375, 0xE0D9, 0x737B, 0xE0DA, 0x737A, 0xE0DB, 0x73C8, 0xE0DC, 0x73B3,
- 0xE0DD, 0x73CE, 0xE0DE, 0x73BB, 0xE0DF, 0x73C0, 0xE0E0, 0x73E5, 0xE0E1, 0x73EE, 0xE0E2, 0x73DE, 0xE0E3, 0x74A2, 0xE0E4, 0x7405,
- 0xE0E5, 0x746F, 0xE0E6, 0x7425, 0xE0E7, 0x73F8, 0xE0E8, 0x7432, 0xE0E9, 0x743A, 0xE0EA, 0x7455, 0xE0EB, 0x743F, 0xE0EC, 0x745F,
- 0xE0ED, 0x7459, 0xE0EE, 0x7441, 0xE0EF, 0x745C, 0xE0F0, 0x7469, 0xE0F1, 0x7470, 0xE0F2, 0x7463, 0xE0F3, 0x746A, 0xE0F4, 0x7476,
- 0xE0F5, 0x747E, 0xE0F6, 0x748B, 0xE0F7, 0x749E, 0xE0F8, 0x74A7, 0xE0F9, 0x74CA, 0xE0FA, 0x74CF, 0xE0FB, 0x74D4, 0xE0FC, 0x73F1,
- 0xE140, 0x74E0, 0xE141, 0x74E3, 0xE142, 0x74E7, 0xE143, 0x74E9, 0xE144, 0x74EE, 0xE145, 0x74F2, 0xE146, 0x74F0, 0xE147, 0x74F1,
- 0xE148, 0x74F8, 0xE149, 0x74F7, 0xE14A, 0x7504, 0xE14B, 0x7503, 0xE14C, 0x7505, 0xE14D, 0x750C, 0xE14E, 0x750E, 0xE14F, 0x750D,
- 0xE150, 0x7515, 0xE151, 0x7513, 0xE152, 0x751E, 0xE153, 0x7526, 0xE154, 0x752C, 0xE155, 0x753C, 0xE156, 0x7544, 0xE157, 0x754D,
- 0xE158, 0x754A, 0xE159, 0x7549, 0xE15A, 0x755B, 0xE15B, 0x7546, 0xE15C, 0x755A, 0xE15D, 0x7569, 0xE15E, 0x7564, 0xE15F, 0x7567,
- 0xE160, 0x756B, 0xE161, 0x756D, 0xE162, 0x7578, 0xE163, 0x7576, 0xE164, 0x7586, 0xE165, 0x7587, 0xE166, 0x7574, 0xE167, 0x758A,
- 0xE168, 0x7589, 0xE169, 0x7582, 0xE16A, 0x7594, 0xE16B, 0x759A, 0xE16C, 0x759D, 0xE16D, 0x75A5, 0xE16E, 0x75A3, 0xE16F, 0x75C2,
- 0xE170, 0x75B3, 0xE171, 0x75C3, 0xE172, 0x75B5, 0xE173, 0x75BD, 0xE174, 0x75B8, 0xE175, 0x75BC, 0xE176, 0x75B1, 0xE177, 0x75CD,
- 0xE178, 0x75CA, 0xE179, 0x75D2, 0xE17A, 0x75D9, 0xE17B, 0x75E3, 0xE17C, 0x75DE, 0xE17D, 0x75FE, 0xE17E, 0x75FF, 0xE180, 0x75FC,
- 0xE181, 0x7601, 0xE182, 0x75F0, 0xE183, 0x75FA, 0xE184, 0x75F2, 0xE185, 0x75F3, 0xE186, 0x760B, 0xE187, 0x760D, 0xE188, 0x7609,
- 0xE189, 0x761F, 0xE18A, 0x7627, 0xE18B, 0x7620, 0xE18C, 0x7621, 0xE18D, 0x7622, 0xE18E, 0x7624, 0xE18F, 0x7634, 0xE190, 0x7630,
- 0xE191, 0x763B, 0xE192, 0x7647, 0xE193, 0x7648, 0xE194, 0x7646, 0xE195, 0x765C, 0xE196, 0x7658, 0xE197, 0x7661, 0xE198, 0x7662,
- 0xE199, 0x7668, 0xE19A, 0x7669, 0xE19B, 0x766A, 0xE19C, 0x7667, 0xE19D, 0x766C, 0xE19E, 0x7670, 0xE19F, 0x7672, 0xE1A0, 0x7676,
- 0xE1A1, 0x7678, 0xE1A2, 0x767C, 0xE1A3, 0x7680, 0xE1A4, 0x7683, 0xE1A5, 0x7688, 0xE1A6, 0x768B, 0xE1A7, 0x768E, 0xE1A8, 0x7696,
- 0xE1A9, 0x7693, 0xE1AA, 0x7699, 0xE1AB, 0x769A, 0xE1AC, 0x76B0, 0xE1AD, 0x76B4, 0xE1AE, 0x76B8, 0xE1AF, 0x76B9, 0xE1B0, 0x76BA,
- 0xE1B1, 0x76C2, 0xE1B2, 0x76CD, 0xE1B3, 0x76D6, 0xE1B4, 0x76D2, 0xE1B5, 0x76DE, 0xE1B6, 0x76E1, 0xE1B7, 0x76E5, 0xE1B8, 0x76E7,
- 0xE1B9, 0x76EA, 0xE1BA, 0x862F, 0xE1BB, 0x76FB, 0xE1BC, 0x7708, 0xE1BD, 0x7707, 0xE1BE, 0x7704, 0xE1BF, 0x7729, 0xE1C0, 0x7724,
- 0xE1C1, 0x771E, 0xE1C2, 0x7725, 0xE1C3, 0x7726, 0xE1C4, 0x771B, 0xE1C5, 0x7737, 0xE1C6, 0x7738, 0xE1C7, 0x7747, 0xE1C8, 0x775A,
- 0xE1C9, 0x7768, 0xE1CA, 0x776B, 0xE1CB, 0x775B, 0xE1CC, 0x7765, 0xE1CD, 0x777F, 0xE1CE, 0x777E, 0xE1CF, 0x7779, 0xE1D0, 0x778E,
- 0xE1D1, 0x778B, 0xE1D2, 0x7791, 0xE1D3, 0x77A0, 0xE1D4, 0x779E, 0xE1D5, 0x77B0, 0xE1D6, 0x77B6, 0xE1D7, 0x77B9, 0xE1D8, 0x77BF,
- 0xE1D9, 0x77BC, 0xE1DA, 0x77BD, 0xE1DB, 0x77BB, 0xE1DC, 0x77C7, 0xE1DD, 0x77CD, 0xE1DE, 0x77D7, 0xE1DF, 0x77DA, 0xE1E0, 0x77DC,
- 0xE1E1, 0x77E3, 0xE1E2, 0x77EE, 0xE1E3, 0x77FC, 0xE1E4, 0x780C, 0xE1E5, 0x7812, 0xE1E6, 0x7926, 0xE1E7, 0x7820, 0xE1E8, 0x792A,
- 0xE1E9, 0x7845, 0xE1EA, 0x788E, 0xE1EB, 0x7874, 0xE1EC, 0x7886, 0xE1ED, 0x787C, 0xE1EE, 0x789A, 0xE1EF, 0x788C, 0xE1F0, 0x78A3,
- 0xE1F1, 0x78B5, 0xE1F2, 0x78AA, 0xE1F3, 0x78AF, 0xE1F4, 0x78D1, 0xE1F5, 0x78C6, 0xE1F6, 0x78CB, 0xE1F7, 0x78D4, 0xE1F8, 0x78BE,
- 0xE1F9, 0x78BC, 0xE1FA, 0x78C5, 0xE1FB, 0x78CA, 0xE1FC, 0x78EC, 0xE240, 0x78E7, 0xE241, 0x78DA, 0xE242, 0x78FD, 0xE243, 0x78F4,
- 0xE244, 0x7907, 0xE245, 0x7912, 0xE246, 0x7911, 0xE247, 0x7919, 0xE248, 0x792C, 0xE249, 0x792B, 0xE24A, 0x7940, 0xE24B, 0x7960,
- 0xE24C, 0x7957, 0xE24D, 0x795F, 0xE24E, 0x795A, 0xE24F, 0x7955, 0xE250, 0x7953, 0xE251, 0x797A, 0xE252, 0x797F, 0xE253, 0x798A,
- 0xE254, 0x799D, 0xE255, 0x79A7, 0xE256, 0x9F4B, 0xE257, 0x79AA, 0xE258, 0x79AE, 0xE259, 0x79B3, 0xE25A, 0x79B9, 0xE25B, 0x79BA,
- 0xE25C, 0x79C9, 0xE25D, 0x79D5, 0xE25E, 0x79E7, 0xE25F, 0x79EC, 0xE260, 0x79E1, 0xE261, 0x79E3, 0xE262, 0x7A08, 0xE263, 0x7A0D,
- 0xE264, 0x7A18, 0xE265, 0x7A19, 0xE266, 0x7A20, 0xE267, 0x7A1F, 0xE268, 0x7980, 0xE269, 0x7A31, 0xE26A, 0x7A3B, 0xE26B, 0x7A3E,
- 0xE26C, 0x7A37, 0xE26D, 0x7A43, 0xE26E, 0x7A57, 0xE26F, 0x7A49, 0xE270, 0x7A61, 0xE271, 0x7A62, 0xE272, 0x7A69, 0xE273, 0x9F9D,
- 0xE274, 0x7A70, 0xE275, 0x7A79, 0xE276, 0x7A7D, 0xE277, 0x7A88, 0xE278, 0x7A97, 0xE279, 0x7A95, 0xE27A, 0x7A98, 0xE27B, 0x7A96,
- 0xE27C, 0x7AA9, 0xE27D, 0x7AC8, 0xE27E, 0x7AB0, 0xE280, 0x7AB6, 0xE281, 0x7AC5, 0xE282, 0x7AC4, 0xE283, 0x7ABF, 0xE284, 0x9083,
- 0xE285, 0x7AC7, 0xE286, 0x7ACA, 0xE287, 0x7ACD, 0xE288, 0x7ACF, 0xE289, 0x7AD5, 0xE28A, 0x7AD3, 0xE28B, 0x7AD9, 0xE28C, 0x7ADA,
- 0xE28D, 0x7ADD, 0xE28E, 0x7AE1, 0xE28F, 0x7AE2, 0xE290, 0x7AE6, 0xE291, 0x7AED, 0xE292, 0x7AF0, 0xE293, 0x7B02, 0xE294, 0x7B0F,
- 0xE295, 0x7B0A, 0xE296, 0x7B06, 0xE297, 0x7B33, 0xE298, 0x7B18, 0xE299, 0x7B19, 0xE29A, 0x7B1E, 0xE29B, 0x7B35, 0xE29C, 0x7B28,
- 0xE29D, 0x7B36, 0xE29E, 0x7B50, 0xE29F, 0x7B7A, 0xE2A0, 0x7B04, 0xE2A1, 0x7B4D, 0xE2A2, 0x7B0B, 0xE2A3, 0x7B4C, 0xE2A4, 0x7B45,
- 0xE2A5, 0x7B75, 0xE2A6, 0x7B65, 0xE2A7, 0x7B74, 0xE2A8, 0x7B67, 0xE2A9, 0x7B70, 0xE2AA, 0x7B71, 0xE2AB, 0x7B6C, 0xE2AC, 0x7B6E,
- 0xE2AD, 0x7B9D, 0xE2AE, 0x7B98, 0xE2AF, 0x7B9F, 0xE2B0, 0x7B8D, 0xE2B1, 0x7B9C, 0xE2B2, 0x7B9A, 0xE2B3, 0x7B8B, 0xE2B4, 0x7B92,
- 0xE2B5, 0x7B8F, 0xE2B6, 0x7B5D, 0xE2B7, 0x7B99, 0xE2B8, 0x7BCB, 0xE2B9, 0x7BC1, 0xE2BA, 0x7BCC, 0xE2BB, 0x7BCF, 0xE2BC, 0x7BB4,
- 0xE2BD, 0x7BC6, 0xE2BE, 0x7BDD, 0xE2BF, 0x7BE9, 0xE2C0, 0x7C11, 0xE2C1, 0x7C14, 0xE2C2, 0x7BE6, 0xE2C3, 0x7BE5, 0xE2C4, 0x7C60,
- 0xE2C5, 0x7C00, 0xE2C6, 0x7C07, 0xE2C7, 0x7C13, 0xE2C8, 0x7BF3, 0xE2C9, 0x7BF7, 0xE2CA, 0x7C17, 0xE2CB, 0x7C0D, 0xE2CC, 0x7BF6,
- 0xE2CD, 0x7C23, 0xE2CE, 0x7C27, 0xE2CF, 0x7C2A, 0xE2D0, 0x7C1F, 0xE2D1, 0x7C37, 0xE2D2, 0x7C2B, 0xE2D3, 0x7C3D, 0xE2D4, 0x7C4C,
- 0xE2D5, 0x7C43, 0xE2D6, 0x7C54, 0xE2D7, 0x7C4F, 0xE2D8, 0x7C40, 0xE2D9, 0x7C50, 0xE2DA, 0x7C58, 0xE2DB, 0x7C5F, 0xE2DC, 0x7C64,
- 0xE2DD, 0x7C56, 0xE2DE, 0x7C65, 0xE2DF, 0x7C6C, 0xE2E0, 0x7C75, 0xE2E1, 0x7C83, 0xE2E2, 0x7C90, 0xE2E3, 0x7CA4, 0xE2E4, 0x7CAD,
- 0xE2E5, 0x7CA2, 0xE2E6, 0x7CAB, 0xE2E7, 0x7CA1, 0xE2E8, 0x7CA8, 0xE2E9, 0x7CB3, 0xE2EA, 0x7CB2, 0xE2EB, 0x7CB1, 0xE2EC, 0x7CAE,
- 0xE2ED, 0x7CB9, 0xE2EE, 0x7CBD, 0xE2EF, 0x7CC0, 0xE2F0, 0x7CC5, 0xE2F1, 0x7CC2, 0xE2F2, 0x7CD8, 0xE2F3, 0x7CD2, 0xE2F4, 0x7CDC,
- 0xE2F5, 0x7CE2, 0xE2F6, 0x9B3B, 0xE2F7, 0x7CEF, 0xE2F8, 0x7CF2, 0xE2F9, 0x7CF4, 0xE2FA, 0x7CF6, 0xE2FB, 0x7CFA, 0xE2FC, 0x7D06,
- 0xE340, 0x7D02, 0xE341, 0x7D1C, 0xE342, 0x7D15, 0xE343, 0x7D0A, 0xE344, 0x7D45, 0xE345, 0x7D4B, 0xE346, 0x7D2E, 0xE347, 0x7D32,
- 0xE348, 0x7D3F, 0xE349, 0x7D35, 0xE34A, 0x7D46, 0xE34B, 0x7D73, 0xE34C, 0x7D56, 0xE34D, 0x7D4E, 0xE34E, 0x7D72, 0xE34F, 0x7D68,
- 0xE350, 0x7D6E, 0xE351, 0x7D4F, 0xE352, 0x7D63, 0xE353, 0x7D93, 0xE354, 0x7D89, 0xE355, 0x7D5B, 0xE356, 0x7D8F, 0xE357, 0x7D7D,
- 0xE358, 0x7D9B, 0xE359, 0x7DBA, 0xE35A, 0x7DAE, 0xE35B, 0x7DA3, 0xE35C, 0x7DB5, 0xE35D, 0x7DC7, 0xE35E, 0x7DBD, 0xE35F, 0x7DAB,
- 0xE360, 0x7E3D, 0xE361, 0x7DA2, 0xE362, 0x7DAF, 0xE363, 0x7DDC, 0xE364, 0x7DB8, 0xE365, 0x7D9F, 0xE366, 0x7DB0, 0xE367, 0x7DD8,
- 0xE368, 0x7DDD, 0xE369, 0x7DE4, 0xE36A, 0x7DDE, 0xE36B, 0x7DFB, 0xE36C, 0x7DF2, 0xE36D, 0x7DE1, 0xE36E, 0x7E05, 0xE36F, 0x7E0A,
- 0xE370, 0x7E23, 0xE371, 0x7E21, 0xE372, 0x7E12, 0xE373, 0x7E31, 0xE374, 0x7E1F, 0xE375, 0x7E09, 0xE376, 0x7E0B, 0xE377, 0x7E22,
- 0xE378, 0x7E46, 0xE379, 0x7E66, 0xE37A, 0x7E3B, 0xE37B, 0x7E35, 0xE37C, 0x7E39, 0xE37D, 0x7E43, 0xE37E, 0x7E37, 0xE380, 0x7E32,
- 0xE381, 0x7E3A, 0xE382, 0x7E67, 0xE383, 0x7E5D, 0xE384, 0x7E56, 0xE385, 0x7E5E, 0xE386, 0x7E59, 0xE387, 0x7E5A, 0xE388, 0x7E79,
- 0xE389, 0x7E6A, 0xE38A, 0x7E69, 0xE38B, 0x7E7C, 0xE38C, 0x7E7B, 0xE38D, 0x7E83, 0xE38E, 0x7DD5, 0xE38F, 0x7E7D, 0xE390, 0x8FAE,
- 0xE391, 0x7E7F, 0xE392, 0x7E88, 0xE393, 0x7E89, 0xE394, 0x7E8C, 0xE395, 0x7E92, 0xE396, 0x7E90, 0xE397, 0x7E93, 0xE398, 0x7E94,
- 0xE399, 0x7E96, 0xE39A, 0x7E8E, 0xE39B, 0x7E9B, 0xE39C, 0x7E9C, 0xE39D, 0x7F38, 0xE39E, 0x7F3A, 0xE39F, 0x7F45, 0xE3A0, 0x7F4C,
- 0xE3A1, 0x7F4D, 0xE3A2, 0x7F4E, 0xE3A3, 0x7F50, 0xE3A4, 0x7F51, 0xE3A5, 0x7F55, 0xE3A6, 0x7F54, 0xE3A7, 0x7F58, 0xE3A8, 0x7F5F,
- 0xE3A9, 0x7F60, 0xE3AA, 0x7F68, 0xE3AB, 0x7F69, 0xE3AC, 0x7F67, 0xE3AD, 0x7F78, 0xE3AE, 0x7F82, 0xE3AF, 0x7F86, 0xE3B0, 0x7F83,
- 0xE3B1, 0x7F88, 0xE3B2, 0x7F87, 0xE3B3, 0x7F8C, 0xE3B4, 0x7F94, 0xE3B5, 0x7F9E, 0xE3B6, 0x7F9D, 0xE3B7, 0x7F9A, 0xE3B8, 0x7FA3,
- 0xE3B9, 0x7FAF, 0xE3BA, 0x7FB2, 0xE3BB, 0x7FB9, 0xE3BC, 0x7FAE, 0xE3BD, 0x7FB6, 0xE3BE, 0x7FB8, 0xE3BF, 0x8B71, 0xE3C0, 0x7FC5,
- 0xE3C1, 0x7FC6, 0xE3C2, 0x7FCA, 0xE3C3, 0x7FD5, 0xE3C4, 0x7FD4, 0xE3C5, 0x7FE1, 0xE3C6, 0x7FE6, 0xE3C7, 0x7FE9, 0xE3C8, 0x7FF3,
- 0xE3C9, 0x7FF9, 0xE3CA, 0x98DC, 0xE3CB, 0x8006, 0xE3CC, 0x8004, 0xE3CD, 0x800B, 0xE3CE, 0x8012, 0xE3CF, 0x8018, 0xE3D0, 0x8019,
- 0xE3D1, 0x801C, 0xE3D2, 0x8021, 0xE3D3, 0x8028, 0xE3D4, 0x803F, 0xE3D5, 0x803B, 0xE3D6, 0x804A, 0xE3D7, 0x8046, 0xE3D8, 0x8052,
- 0xE3D9, 0x8058, 0xE3DA, 0x805A, 0xE3DB, 0x805F, 0xE3DC, 0x8062, 0xE3DD, 0x8068, 0xE3DE, 0x8073, 0xE3DF, 0x8072, 0xE3E0, 0x8070,
- 0xE3E1, 0x8076, 0xE3E2, 0x8079, 0xE3E3, 0x807D, 0xE3E4, 0x807F, 0xE3E5, 0x8084, 0xE3E6, 0x8086, 0xE3E7, 0x8085, 0xE3E8, 0x809B,
- 0xE3E9, 0x8093, 0xE3EA, 0x809A, 0xE3EB, 0x80AD, 0xE3EC, 0x5190, 0xE3ED, 0x80AC, 0xE3EE, 0x80DB, 0xE3EF, 0x80E5, 0xE3F0, 0x80D9,
- 0xE3F1, 0x80DD, 0xE3F2, 0x80C4, 0xE3F3, 0x80DA, 0xE3F4, 0x80D6, 0xE3F5, 0x8109, 0xE3F6, 0x80EF, 0xE3F7, 0x80F1, 0xE3F8, 0x811B,
- 0xE3F9, 0x8129, 0xE3FA, 0x8123, 0xE3FB, 0x812F, 0xE3FC, 0x814B, 0xE440, 0x968B, 0xE441, 0x8146, 0xE442, 0x813E, 0xE443, 0x8153,
- 0xE444, 0x8151, 0xE445, 0x80FC, 0xE446, 0x8171, 0xE447, 0x816E, 0xE448, 0x8165, 0xE449, 0x8166, 0xE44A, 0x8174, 0xE44B, 0x8183,
- 0xE44C, 0x8188, 0xE44D, 0x818A, 0xE44E, 0x8180, 0xE44F, 0x8182, 0xE450, 0x81A0, 0xE451, 0x8195, 0xE452, 0x81A4, 0xE453, 0x81A3,
- 0xE454, 0x815F, 0xE455, 0x8193, 0xE456, 0x81A9, 0xE457, 0x81B0, 0xE458, 0x81B5, 0xE459, 0x81BE, 0xE45A, 0x81B8, 0xE45B, 0x81BD,
- 0xE45C, 0x81C0, 0xE45D, 0x81C2, 0xE45E, 0x81BA, 0xE45F, 0x81C9, 0xE460, 0x81CD, 0xE461, 0x81D1, 0xE462, 0x81D9, 0xE463, 0x81D8,
- 0xE464, 0x81C8, 0xE465, 0x81DA, 0xE466, 0x81DF, 0xE467, 0x81E0, 0xE468, 0x81E7, 0xE469, 0x81FA, 0xE46A, 0x81FB, 0xE46B, 0x81FE,
- 0xE46C, 0x8201, 0xE46D, 0x8202, 0xE46E, 0x8205, 0xE46F, 0x8207, 0xE470, 0x820A, 0xE471, 0x820D, 0xE472, 0x8210, 0xE473, 0x8216,
- 0xE474, 0x8229, 0xE475, 0x822B, 0xE476, 0x8238, 0xE477, 0x8233, 0xE478, 0x8240, 0xE479, 0x8259, 0xE47A, 0x8258, 0xE47B, 0x825D,
- 0xE47C, 0x825A, 0xE47D, 0x825F, 0xE47E, 0x8264, 0xE480, 0x8262, 0xE481, 0x8268, 0xE482, 0x826A, 0xE483, 0x826B, 0xE484, 0x822E,
- 0xE485, 0x8271, 0xE486, 0x8277, 0xE487, 0x8278, 0xE488, 0x827E, 0xE489, 0x828D, 0xE48A, 0x8292, 0xE48B, 0x82AB, 0xE48C, 0x829F,
- 0xE48D, 0x82BB, 0xE48E, 0x82AC, 0xE48F, 0x82E1, 0xE490, 0x82E3, 0xE491, 0x82DF, 0xE492, 0x82D2, 0xE493, 0x82F4, 0xE494, 0x82F3,
- 0xE495, 0x82FA, 0xE496, 0x8393, 0xE497, 0x8303, 0xE498, 0x82FB, 0xE499, 0x82F9, 0xE49A, 0x82DE, 0xE49B, 0x8306, 0xE49C, 0x82DC,
- 0xE49D, 0x8309, 0xE49E, 0x82D9, 0xE49F, 0x8335, 0xE4A0, 0x8334, 0xE4A1, 0x8316, 0xE4A2, 0x8332, 0xE4A3, 0x8331, 0xE4A4, 0x8340,
- 0xE4A5, 0x8339, 0xE4A6, 0x8350, 0xE4A7, 0x8345, 0xE4A8, 0x832F, 0xE4A9, 0x832B, 0xE4AA, 0x8317, 0xE4AB, 0x8318, 0xE4AC, 0x8385,
- 0xE4AD, 0x839A, 0xE4AE, 0x83AA, 0xE4AF, 0x839F, 0xE4B0, 0x83A2, 0xE4B1, 0x8396, 0xE4B2, 0x8323, 0xE4B3, 0x838E, 0xE4B4, 0x8387,
- 0xE4B5, 0x838A, 0xE4B6, 0x837C, 0xE4B7, 0x83B5, 0xE4B8, 0x8373, 0xE4B9, 0x8375, 0xE4BA, 0x83A0, 0xE4BB, 0x8389, 0xE4BC, 0x83A8,
- 0xE4BD, 0x83F4, 0xE4BE, 0x8413, 0xE4BF, 0x83EB, 0xE4C0, 0x83CE, 0xE4C1, 0x83FD, 0xE4C2, 0x8403, 0xE4C3, 0x83D8, 0xE4C4, 0x840B,
- 0xE4C5, 0x83C1, 0xE4C6, 0x83F7, 0xE4C7, 0x8407, 0xE4C8, 0x83E0, 0xE4C9, 0x83F2, 0xE4CA, 0x840D, 0xE4CB, 0x8422, 0xE4CC, 0x8420,
- 0xE4CD, 0x83BD, 0xE4CE, 0x8438, 0xE4CF, 0x8506, 0xE4D0, 0x83FB, 0xE4D1, 0x846D, 0xE4D2, 0x842A, 0xE4D3, 0x843C, 0xE4D4, 0x855A,
- 0xE4D5, 0x8484, 0xE4D6, 0x8477, 0xE4D7, 0x846B, 0xE4D8, 0x84AD, 0xE4D9, 0x846E, 0xE4DA, 0x8482, 0xE4DB, 0x8469, 0xE4DC, 0x8446,
- 0xE4DD, 0x842C, 0xE4DE, 0x846F, 0xE4DF, 0x8479, 0xE4E0, 0x8435, 0xE4E1, 0x84CA, 0xE4E2, 0x8462, 0xE4E3, 0x84B9, 0xE4E4, 0x84BF,
- 0xE4E5, 0x849F, 0xE4E6, 0x84D9, 0xE4E7, 0x84CD, 0xE4E8, 0x84BB, 0xE4E9, 0x84DA, 0xE4EA, 0x84D0, 0xE4EB, 0x84C1, 0xE4EC, 0x84C6,
- 0xE4ED, 0x84D6, 0xE4EE, 0x84A1, 0xE4EF, 0x8521, 0xE4F0, 0x84FF, 0xE4F1, 0x84F4, 0xE4F2, 0x8517, 0xE4F3, 0x8518, 0xE4F4, 0x852C,
- 0xE4F5, 0x851F, 0xE4F6, 0x8515, 0xE4F7, 0x8514, 0xE4F8, 0x84FC, 0xE4F9, 0x8540, 0xE4FA, 0x8563, 0xE4FB, 0x8558, 0xE4FC, 0x8548,
- 0xE540, 0x8541, 0xE541, 0x8602, 0xE542, 0x854B, 0xE543, 0x8555, 0xE544, 0x8580, 0xE545, 0x85A4, 0xE546, 0x8588, 0xE547, 0x8591,
- 0xE548, 0x858A, 0xE549, 0x85A8, 0xE54A, 0x856D, 0xE54B, 0x8594, 0xE54C, 0x859B, 0xE54D, 0x85EA, 0xE54E, 0x8587, 0xE54F, 0x859C,
- 0xE550, 0x8577, 0xE551, 0x857E, 0xE552, 0x8590, 0xE553, 0x85C9, 0xE554, 0x85BA, 0xE555, 0x85CF, 0xE556, 0x85B9, 0xE557, 0x85D0,
- 0xE558, 0x85D5, 0xE559, 0x85DD, 0xE55A, 0x85E5, 0xE55B, 0x85DC, 0xE55C, 0x85F9, 0xE55D, 0x860A, 0xE55E, 0x8613, 0xE55F, 0x860B,
- 0xE560, 0x85FE, 0xE561, 0x85FA, 0xE562, 0x8606, 0xE563, 0x8622, 0xE564, 0x861A, 0xE565, 0x8630, 0xE566, 0x863F, 0xE567, 0x864D,
- 0xE568, 0x4E55, 0xE569, 0x8654, 0xE56A, 0x865F, 0xE56B, 0x8667, 0xE56C, 0x8671, 0xE56D, 0x8693, 0xE56E, 0x86A3, 0xE56F, 0x86A9,
- 0xE570, 0x86AA, 0xE571, 0x868B, 0xE572, 0x868C, 0xE573, 0x86B6, 0xE574, 0x86AF, 0xE575, 0x86C4, 0xE576, 0x86C6, 0xE577, 0x86B0,
- 0xE578, 0x86C9, 0xE579, 0x8823, 0xE57A, 0x86AB, 0xE57B, 0x86D4, 0xE57C, 0x86DE, 0xE57D, 0x86E9, 0xE57E, 0x86EC, 0xE580, 0x86DF,
- 0xE581, 0x86DB, 0xE582, 0x86EF, 0xE583, 0x8712, 0xE584, 0x8706, 0xE585, 0x8708, 0xE586, 0x8700, 0xE587, 0x8703, 0xE588, 0x86FB,
- 0xE589, 0x8711, 0xE58A, 0x8709, 0xE58B, 0x870D, 0xE58C, 0x86F9, 0xE58D, 0x870A, 0xE58E, 0x8734, 0xE58F, 0x873F, 0xE590, 0x8737,
- 0xE591, 0x873B, 0xE592, 0x8725, 0xE593, 0x8729, 0xE594, 0x871A, 0xE595, 0x8760, 0xE596, 0x875F, 0xE597, 0x8778, 0xE598, 0x874C,
- 0xE599, 0x874E, 0xE59A, 0x8774, 0xE59B, 0x8757, 0xE59C, 0x8768, 0xE59D, 0x876E, 0xE59E, 0x8759, 0xE59F, 0x8753, 0xE5A0, 0x8763,
- 0xE5A1, 0x876A, 0xE5A2, 0x8805, 0xE5A3, 0x87A2, 0xE5A4, 0x879F, 0xE5A5, 0x8782, 0xE5A6, 0x87AF, 0xE5A7, 0x87CB, 0xE5A8, 0x87BD,
- 0xE5A9, 0x87C0, 0xE5AA, 0x87D0, 0xE5AB, 0x96D6, 0xE5AC, 0x87AB, 0xE5AD, 0x87C4, 0xE5AE, 0x87B3, 0xE5AF, 0x87C7, 0xE5B0, 0x87C6,
- 0xE5B1, 0x87BB, 0xE5B2, 0x87EF, 0xE5B3, 0x87F2, 0xE5B4, 0x87E0, 0xE5B5, 0x880F, 0xE5B6, 0x880D, 0xE5B7, 0x87FE, 0xE5B8, 0x87F6,
- 0xE5B9, 0x87F7, 0xE5BA, 0x880E, 0xE5BB, 0x87D2, 0xE5BC, 0x8811, 0xE5BD, 0x8816, 0xE5BE, 0x8815, 0xE5BF, 0x8822, 0xE5C0, 0x8821,
- 0xE5C1, 0x8831, 0xE5C2, 0x8836, 0xE5C3, 0x8839, 0xE5C4, 0x8827, 0xE5C5, 0x883B, 0xE5C6, 0x8844, 0xE5C7, 0x8842, 0xE5C8, 0x8852,
- 0xE5C9, 0x8859, 0xE5CA, 0x885E, 0xE5CB, 0x8862, 0xE5CC, 0x886B, 0xE5CD, 0x8881, 0xE5CE, 0x887E, 0xE5CF, 0x889E, 0xE5D0, 0x8875,
- 0xE5D1, 0x887D, 0xE5D2, 0x88B5, 0xE5D3, 0x8872, 0xE5D4, 0x8882, 0xE5D5, 0x8897, 0xE5D6, 0x8892, 0xE5D7, 0x88AE, 0xE5D8, 0x8899,
- 0xE5D9, 0x88A2, 0xE5DA, 0x888D, 0xE5DB, 0x88A4, 0xE5DC, 0x88B0, 0xE5DD, 0x88BF, 0xE5DE, 0x88B1, 0xE5DF, 0x88C3, 0xE5E0, 0x88C4,
- 0xE5E1, 0x88D4, 0xE5E2, 0x88D8, 0xE5E3, 0x88D9, 0xE5E4, 0x88DD, 0xE5E5, 0x88F9, 0xE5E6, 0x8902, 0xE5E7, 0x88FC, 0xE5E8, 0x88F4,
- 0xE5E9, 0x88E8, 0xE5EA, 0x88F2, 0xE5EB, 0x8904, 0xE5EC, 0x890C, 0xE5ED, 0x890A, 0xE5EE, 0x8913, 0xE5EF, 0x8943, 0xE5F0, 0x891E,
- 0xE5F1, 0x8925, 0xE5F2, 0x892A, 0xE5F3, 0x892B, 0xE5F4, 0x8941, 0xE5F5, 0x8944, 0xE5F6, 0x893B, 0xE5F7, 0x8936, 0xE5F8, 0x8938,
- 0xE5F9, 0x894C, 0xE5FA, 0x891D, 0xE5FB, 0x8960, 0xE5FC, 0x895E, 0xE640, 0x8966, 0xE641, 0x8964, 0xE642, 0x896D, 0xE643, 0x896A,
- 0xE644, 0x896F, 0xE645, 0x8974, 0xE646, 0x8977, 0xE647, 0x897E, 0xE648, 0x8983, 0xE649, 0x8988, 0xE64A, 0x898A, 0xE64B, 0x8993,
- 0xE64C, 0x8998, 0xE64D, 0x89A1, 0xE64E, 0x89A9, 0xE64F, 0x89A6, 0xE650, 0x89AC, 0xE651, 0x89AF, 0xE652, 0x89B2, 0xE653, 0x89BA,
- 0xE654, 0x89BD, 0xE655, 0x89BF, 0xE656, 0x89C0, 0xE657, 0x89DA, 0xE658, 0x89DC, 0xE659, 0x89DD, 0xE65A, 0x89E7, 0xE65B, 0x89F4,
- 0xE65C, 0x89F8, 0xE65D, 0x8A03, 0xE65E, 0x8A16, 0xE65F, 0x8A10, 0xE660, 0x8A0C, 0xE661, 0x8A1B, 0xE662, 0x8A1D, 0xE663, 0x8A25,
- 0xE664, 0x8A36, 0xE665, 0x8A41, 0xE666, 0x8A5B, 0xE667, 0x8A52, 0xE668, 0x8A46, 0xE669, 0x8A48, 0xE66A, 0x8A7C, 0xE66B, 0x8A6D,
- 0xE66C, 0x8A6C, 0xE66D, 0x8A62, 0xE66E, 0x8A85, 0xE66F, 0x8A82, 0xE670, 0x8A84, 0xE671, 0x8AA8, 0xE672, 0x8AA1, 0xE673, 0x8A91,
- 0xE674, 0x8AA5, 0xE675, 0x8AA6, 0xE676, 0x8A9A, 0xE677, 0x8AA3, 0xE678, 0x8AC4, 0xE679, 0x8ACD, 0xE67A, 0x8AC2, 0xE67B, 0x8ADA,
- 0xE67C, 0x8AEB, 0xE67D, 0x8AF3, 0xE67E, 0x8AE7, 0xE680, 0x8AE4, 0xE681, 0x8AF1, 0xE682, 0x8B14, 0xE683, 0x8AE0, 0xE684, 0x8AE2,
- 0xE685, 0x8AF7, 0xE686, 0x8ADE, 0xE687, 0x8ADB, 0xE688, 0x8B0C, 0xE689, 0x8B07, 0xE68A, 0x8B1A, 0xE68B, 0x8AE1, 0xE68C, 0x8B16,
- 0xE68D, 0x8B10, 0xE68E, 0x8B17, 0xE68F, 0x8B20, 0xE690, 0x8B33, 0xE691, 0x97AB, 0xE692, 0x8B26, 0xE693, 0x8B2B, 0xE694, 0x8B3E,
- 0xE695, 0x8B28, 0xE696, 0x8B41, 0xE697, 0x8B4C, 0xE698, 0x8B4F, 0xE699, 0x8B4E, 0xE69A, 0x8B49, 0xE69B, 0x8B56, 0xE69C, 0x8B5B,
- 0xE69D, 0x8B5A, 0xE69E, 0x8B6B, 0xE69F, 0x8B5F, 0xE6A0, 0x8B6C, 0xE6A1, 0x8B6F, 0xE6A2, 0x8B74, 0xE6A3, 0x8B7D, 0xE6A4, 0x8B80,
- 0xE6A5, 0x8B8C, 0xE6A6, 0x8B8E, 0xE6A7, 0x8B92, 0xE6A8, 0x8B93, 0xE6A9, 0x8B96, 0xE6AA, 0x8B99, 0xE6AB, 0x8B9A, 0xE6AC, 0x8C3A,
- 0xE6AD, 0x8C41, 0xE6AE, 0x8C3F, 0xE6AF, 0x8C48, 0xE6B0, 0x8C4C, 0xE6B1, 0x8C4E, 0xE6B2, 0x8C50, 0xE6B3, 0x8C55, 0xE6B4, 0x8C62,
- 0xE6B5, 0x8C6C, 0xE6B6, 0x8C78, 0xE6B7, 0x8C7A, 0xE6B8, 0x8C82, 0xE6B9, 0x8C89, 0xE6BA, 0x8C85, 0xE6BB, 0x8C8A, 0xE6BC, 0x8C8D,
- 0xE6BD, 0x8C8E, 0xE6BE, 0x8C94, 0xE6BF, 0x8C7C, 0xE6C0, 0x8C98, 0xE6C1, 0x621D, 0xE6C2, 0x8CAD, 0xE6C3, 0x8CAA, 0xE6C4, 0x8CBD,
- 0xE6C5, 0x8CB2, 0xE6C6, 0x8CB3, 0xE6C7, 0x8CAE, 0xE6C8, 0x8CB6, 0xE6C9, 0x8CC8, 0xE6CA, 0x8CC1, 0xE6CB, 0x8CE4, 0xE6CC, 0x8CE3,
- 0xE6CD, 0x8CDA, 0xE6CE, 0x8CFD, 0xE6CF, 0x8CFA, 0xE6D0, 0x8CFB, 0xE6D1, 0x8D04, 0xE6D2, 0x8D05, 0xE6D3, 0x8D0A, 0xE6D4, 0x8D07,
- 0xE6D5, 0x8D0F, 0xE6D6, 0x8D0D, 0xE6D7, 0x8D10, 0xE6D8, 0x9F4E, 0xE6D9, 0x8D13, 0xE6DA, 0x8CCD, 0xE6DB, 0x8D14, 0xE6DC, 0x8D16,
- 0xE6DD, 0x8D67, 0xE6DE, 0x8D6D, 0xE6DF, 0x8D71, 0xE6E0, 0x8D73, 0xE6E1, 0x8D81, 0xE6E2, 0x8D99, 0xE6E3, 0x8DC2, 0xE6E4, 0x8DBE,
- 0xE6E5, 0x8DBA, 0xE6E6, 0x8DCF, 0xE6E7, 0x8DDA, 0xE6E8, 0x8DD6, 0xE6E9, 0x8DCC, 0xE6EA, 0x8DDB, 0xE6EB, 0x8DCB, 0xE6EC, 0x8DEA,
- 0xE6ED, 0x8DEB, 0xE6EE, 0x8DDF, 0xE6EF, 0x8DE3, 0xE6F0, 0x8DFC, 0xE6F1, 0x8E08, 0xE6F2, 0x8E09, 0xE6F3, 0x8DFF, 0xE6F4, 0x8E1D,
- 0xE6F5, 0x8E1E, 0xE6F6, 0x8E10, 0xE6F7, 0x8E1F, 0xE6F8, 0x8E42, 0xE6F9, 0x8E35, 0xE6FA, 0x8E30, 0xE6FB, 0x8E34, 0xE6FC, 0x8E4A,
- 0xE740, 0x8E47, 0xE741, 0x8E49, 0xE742, 0x8E4C, 0xE743, 0x8E50, 0xE744, 0x8E48, 0xE745, 0x8E59, 0xE746, 0x8E64, 0xE747, 0x8E60,
- 0xE748, 0x8E2A, 0xE749, 0x8E63, 0xE74A, 0x8E55, 0xE74B, 0x8E76, 0xE74C, 0x8E72, 0xE74D, 0x8E7C, 0xE74E, 0x8E81, 0xE74F, 0x8E87,
- 0xE750, 0x8E85, 0xE751, 0x8E84, 0xE752, 0x8E8B, 0xE753, 0x8E8A, 0xE754, 0x8E93, 0xE755, 0x8E91, 0xE756, 0x8E94, 0xE757, 0x8E99,
- 0xE758, 0x8EAA, 0xE759, 0x8EA1, 0xE75A, 0x8EAC, 0xE75B, 0x8EB0, 0xE75C, 0x8EC6, 0xE75D, 0x8EB1, 0xE75E, 0x8EBE, 0xE75F, 0x8EC5,
- 0xE760, 0x8EC8, 0xE761, 0x8ECB, 0xE762, 0x8EDB, 0xE763, 0x8EE3, 0xE764, 0x8EFC, 0xE765, 0x8EFB, 0xE766, 0x8EEB, 0xE767, 0x8EFE,
- 0xE768, 0x8F0A, 0xE769, 0x8F05, 0xE76A, 0x8F15, 0xE76B, 0x8F12, 0xE76C, 0x8F19, 0xE76D, 0x8F13, 0xE76E, 0x8F1C, 0xE76F, 0x8F1F,
- 0xE770, 0x8F1B, 0xE771, 0x8F0C, 0xE772, 0x8F26, 0xE773, 0x8F33, 0xE774, 0x8F3B, 0xE775, 0x8F39, 0xE776, 0x8F45, 0xE777, 0x8F42,
- 0xE778, 0x8F3E, 0xE779, 0x8F4C, 0xE77A, 0x8F49, 0xE77B, 0x8F46, 0xE77C, 0x8F4E, 0xE77D, 0x8F57, 0xE77E, 0x8F5C, 0xE780, 0x8F62,
- 0xE781, 0x8F63, 0xE782, 0x8F64, 0xE783, 0x8F9C, 0xE784, 0x8F9F, 0xE785, 0x8FA3, 0xE786, 0x8FAD, 0xE787, 0x8FAF, 0xE788, 0x8FB7,
- 0xE789, 0x8FDA, 0xE78A, 0x8FE5, 0xE78B, 0x8FE2, 0xE78C, 0x8FEA, 0xE78D, 0x8FEF, 0xE78E, 0x9087, 0xE78F, 0x8FF4, 0xE790, 0x9005,
- 0xE791, 0x8FF9, 0xE792, 0x8FFA, 0xE793, 0x9011, 0xE794, 0x9015, 0xE795, 0x9021, 0xE796, 0x900D, 0xE797, 0x901E, 0xE798, 0x9016,
- 0xE799, 0x900B, 0xE79A, 0x9027, 0xE79B, 0x9036, 0xE79C, 0x9035, 0xE79D, 0x9039, 0xE79E, 0x8FF8, 0xE79F, 0x904F, 0xE7A0, 0x9050,
- 0xE7A1, 0x9051, 0xE7A2, 0x9052, 0xE7A3, 0x900E, 0xE7A4, 0x9049, 0xE7A5, 0x903E, 0xE7A6, 0x9056, 0xE7A7, 0x9058, 0xE7A8, 0x905E,
- 0xE7A9, 0x9068, 0xE7AA, 0x906F, 0xE7AB, 0x9076, 0xE7AC, 0x96A8, 0xE7AD, 0x9072, 0xE7AE, 0x9082, 0xE7AF, 0x907D, 0xE7B0, 0x9081,
- 0xE7B1, 0x9080, 0xE7B2, 0x908A, 0xE7B3, 0x9089, 0xE7B4, 0x908F, 0xE7B5, 0x90A8, 0xE7B6, 0x90AF, 0xE7B7, 0x90B1, 0xE7B8, 0x90B5,
- 0xE7B9, 0x90E2, 0xE7BA, 0x90E4, 0xE7BB, 0x6248, 0xE7BC, 0x90DB, 0xE7BD, 0x9102, 0xE7BE, 0x9112, 0xE7BF, 0x9119, 0xE7C0, 0x9132,
- 0xE7C1, 0x9130, 0xE7C2, 0x914A, 0xE7C3, 0x9156, 0xE7C4, 0x9158, 0xE7C5, 0x9163, 0xE7C6, 0x9165, 0xE7C7, 0x9169, 0xE7C8, 0x9173,
- 0xE7C9, 0x9172, 0xE7CA, 0x918B, 0xE7CB, 0x9189, 0xE7CC, 0x9182, 0xE7CD, 0x91A2, 0xE7CE, 0x91AB, 0xE7CF, 0x91AF, 0xE7D0, 0x91AA,
- 0xE7D1, 0x91B5, 0xE7D2, 0x91B4, 0xE7D3, 0x91BA, 0xE7D4, 0x91C0, 0xE7D5, 0x91C1, 0xE7D6, 0x91C9, 0xE7D7, 0x91CB, 0xE7D8, 0x91D0,
- 0xE7D9, 0x91D6, 0xE7DA, 0x91DF, 0xE7DB, 0x91E1, 0xE7DC, 0x91DB, 0xE7DD, 0x91FC, 0xE7DE, 0x91F5, 0xE7DF, 0x91F6, 0xE7E0, 0x921E,
- 0xE7E1, 0x91FF, 0xE7E2, 0x9214, 0xE7E3, 0x922C, 0xE7E4, 0x9215, 0xE7E5, 0x9211, 0xE7E6, 0x925E, 0xE7E7, 0x9257, 0xE7E8, 0x9245,
- 0xE7E9, 0x9249, 0xE7EA, 0x9264, 0xE7EB, 0x9248, 0xE7EC, 0x9295, 0xE7ED, 0x923F, 0xE7EE, 0x924B, 0xE7EF, 0x9250, 0xE7F0, 0x929C,
- 0xE7F1, 0x9296, 0xE7F2, 0x9293, 0xE7F3, 0x929B, 0xE7F4, 0x925A, 0xE7F5, 0x92CF, 0xE7F6, 0x92B9, 0xE7F7, 0x92B7, 0xE7F8, 0x92E9,
- 0xE7F9, 0x930F, 0xE7FA, 0x92FA, 0xE7FB, 0x9344, 0xE7FC, 0x932E, 0xE840, 0x9319, 0xE841, 0x9322, 0xE842, 0x931A, 0xE843, 0x9323,
- 0xE844, 0x933A, 0xE845, 0x9335, 0xE846, 0x933B, 0xE847, 0x935C, 0xE848, 0x9360, 0xE849, 0x937C, 0xE84A, 0x936E, 0xE84B, 0x9356,
- 0xE84C, 0x93B0, 0xE84D, 0x93AC, 0xE84E, 0x93AD, 0xE84F, 0x9394, 0xE850, 0x93B9, 0xE851, 0x93D6, 0xE852, 0x93D7, 0xE853, 0x93E8,
- 0xE854, 0x93E5, 0xE855, 0x93D8, 0xE856, 0x93C3, 0xE857, 0x93DD, 0xE858, 0x93D0, 0xE859, 0x93C8, 0xE85A, 0x93E4, 0xE85B, 0x941A,
- 0xE85C, 0x9414, 0xE85D, 0x9413, 0xE85E, 0x9403, 0xE85F, 0x9407, 0xE860, 0x9410, 0xE861, 0x9436, 0xE862, 0x942B, 0xE863, 0x9435,
- 0xE864, 0x9421, 0xE865, 0x943A, 0xE866, 0x9441, 0xE867, 0x9452, 0xE868, 0x9444, 0xE869, 0x945B, 0xE86A, 0x9460, 0xE86B, 0x9462,
- 0xE86C, 0x945E, 0xE86D, 0x946A, 0xE86E, 0x9229, 0xE86F, 0x9470, 0xE870, 0x9475, 0xE871, 0x9477, 0xE872, 0x947D, 0xE873, 0x945A,
- 0xE874, 0x947C, 0xE875, 0x947E, 0xE876, 0x9481, 0xE877, 0x947F, 0xE878, 0x9582, 0xE879, 0x9587, 0xE87A, 0x958A, 0xE87B, 0x9594,
- 0xE87C, 0x9596, 0xE87D, 0x9598, 0xE87E, 0x9599, 0xE880, 0x95A0, 0xE881, 0x95A8, 0xE882, 0x95A7, 0xE883, 0x95AD, 0xE884, 0x95BC,
- 0xE885, 0x95BB, 0xE886, 0x95B9, 0xE887, 0x95BE, 0xE888, 0x95CA, 0xE889, 0x6FF6, 0xE88A, 0x95C3, 0xE88B, 0x95CD, 0xE88C, 0x95CC,
- 0xE88D, 0x95D5, 0xE88E, 0x95D4, 0xE88F, 0x95D6, 0xE890, 0x95DC, 0xE891, 0x95E1, 0xE892, 0x95E5, 0xE893, 0x95E2, 0xE894, 0x9621,
- 0xE895, 0x9628, 0xE896, 0x962E, 0xE897, 0x962F, 0xE898, 0x9642, 0xE899, 0x964C, 0xE89A, 0x964F, 0xE89B, 0x964B, 0xE89C, 0x9677,
- 0xE89D, 0x965C, 0xE89E, 0x965E, 0xE89F, 0x965D, 0xE8A0, 0x965F, 0xE8A1, 0x9666, 0xE8A2, 0x9672, 0xE8A3, 0x966C, 0xE8A4, 0x968D,
- 0xE8A5, 0x9698, 0xE8A6, 0x9695, 0xE8A7, 0x9697, 0xE8A8, 0x96AA, 0xE8A9, 0x96A7, 0xE8AA, 0x96B1, 0xE8AB, 0x96B2, 0xE8AC, 0x96B0,
- 0xE8AD, 0x96B4, 0xE8AE, 0x96B6, 0xE8AF, 0x96B8, 0xE8B0, 0x96B9, 0xE8B1, 0x96CE, 0xE8B2, 0x96CB, 0xE8B3, 0x96C9, 0xE8B4, 0x96CD,
- 0xE8B5, 0x894D, 0xE8B6, 0x96DC, 0xE8B7, 0x970D, 0xE8B8, 0x96D5, 0xE8B9, 0x96F9, 0xE8BA, 0x9704, 0xE8BB, 0x9706, 0xE8BC, 0x9708,
- 0xE8BD, 0x9713, 0xE8BE, 0x970E, 0xE8BF, 0x9711, 0xE8C0, 0x970F, 0xE8C1, 0x9716, 0xE8C2, 0x9719, 0xE8C3, 0x9724, 0xE8C4, 0x972A,
- 0xE8C5, 0x9730, 0xE8C6, 0x9739, 0xE8C7, 0x973D, 0xE8C8, 0x973E, 0xE8C9, 0x9744, 0xE8CA, 0x9746, 0xE8CB, 0x9748, 0xE8CC, 0x9742,
- 0xE8CD, 0x9749, 0xE8CE, 0x975C, 0xE8CF, 0x9760, 0xE8D0, 0x9764, 0xE8D1, 0x9766, 0xE8D2, 0x9768, 0xE8D3, 0x52D2, 0xE8D4, 0x976B,
- 0xE8D5, 0x9771, 0xE8D6, 0x9779, 0xE8D7, 0x9785, 0xE8D8, 0x977C, 0xE8D9, 0x9781, 0xE8DA, 0x977A, 0xE8DB, 0x9786, 0xE8DC, 0x978B,
- 0xE8DD, 0x978F, 0xE8DE, 0x9790, 0xE8DF, 0x979C, 0xE8E0, 0x97A8, 0xE8E1, 0x97A6, 0xE8E2, 0x97A3, 0xE8E3, 0x97B3, 0xE8E4, 0x97B4,
- 0xE8E5, 0x97C3, 0xE8E6, 0x97C6, 0xE8E7, 0x97C8, 0xE8E8, 0x97CB, 0xE8E9, 0x97DC, 0xE8EA, 0x97ED, 0xE8EB, 0x9F4F, 0xE8EC, 0x97F2,
- 0xE8ED, 0x7ADF, 0xE8EE, 0x97F6, 0xE8EF, 0x97F5, 0xE8F0, 0x980F, 0xE8F1, 0x980C, 0xE8F2, 0x9838, 0xE8F3, 0x9824, 0xE8F4, 0x9821,
- 0xE8F5, 0x9837, 0xE8F6, 0x983D, 0xE8F7, 0x9846, 0xE8F8, 0x984F, 0xE8F9, 0x984B, 0xE8FA, 0x986B, 0xE8FB, 0x986F, 0xE8FC, 0x9870,
- 0xE940, 0x9871, 0xE941, 0x9874, 0xE942, 0x9873, 0xE943, 0x98AA, 0xE944, 0x98AF, 0xE945, 0x98B1, 0xE946, 0x98B6, 0xE947, 0x98C4,
- 0xE948, 0x98C3, 0xE949, 0x98C6, 0xE94A, 0x98E9, 0xE94B, 0x98EB, 0xE94C, 0x9903, 0xE94D, 0x9909, 0xE94E, 0x9912, 0xE94F, 0x9914,
- 0xE950, 0x9918, 0xE951, 0x9921, 0xE952, 0x991D, 0xE953, 0x991E, 0xE954, 0x9924, 0xE955, 0x9920, 0xE956, 0x992C, 0xE957, 0x992E,
- 0xE958, 0x993D, 0xE959, 0x993E, 0xE95A, 0x9942, 0xE95B, 0x9949, 0xE95C, 0x9945, 0xE95D, 0x9950, 0xE95E, 0x994B, 0xE95F, 0x9951,
- 0xE960, 0x9952, 0xE961, 0x994C, 0xE962, 0x9955, 0xE963, 0x9997, 0xE964, 0x9998, 0xE965, 0x99A5, 0xE966, 0x99AD, 0xE967, 0x99AE,
- 0xE968, 0x99BC, 0xE969, 0x99DF, 0xE96A, 0x99DB, 0xE96B, 0x99DD, 0xE96C, 0x99D8, 0xE96D, 0x99D1, 0xE96E, 0x99ED, 0xE96F, 0x99EE,
- 0xE970, 0x99F1, 0xE971, 0x99F2, 0xE972, 0x99FB, 0xE973, 0x99F8, 0xE974, 0x9A01, 0xE975, 0x9A0F, 0xE976, 0x9A05, 0xE977, 0x99E2,
- 0xE978, 0x9A19, 0xE979, 0x9A2B, 0xE97A, 0x9A37, 0xE97B, 0x9A45, 0xE97C, 0x9A42, 0xE97D, 0x9A40, 0xE97E, 0x9A43, 0xE980, 0x9A3E,
- 0xE981, 0x9A55, 0xE982, 0x9A4D, 0xE983, 0x9A5B, 0xE984, 0x9A57, 0xE985, 0x9A5F, 0xE986, 0x9A62, 0xE987, 0x9A65, 0xE988, 0x9A64,
- 0xE989, 0x9A69, 0xE98A, 0x9A6B, 0xE98B, 0x9A6A, 0xE98C, 0x9AAD, 0xE98D, 0x9AB0, 0xE98E, 0x9ABC, 0xE98F, 0x9AC0, 0xE990, 0x9ACF,
- 0xE991, 0x9AD1, 0xE992, 0x9AD3, 0xE993, 0x9AD4, 0xE994, 0x9ADE, 0xE995, 0x9ADF, 0xE996, 0x9AE2, 0xE997, 0x9AE3, 0xE998, 0x9AE6,
- 0xE999, 0x9AEF, 0xE99A, 0x9AEB, 0xE99B, 0x9AEE, 0xE99C, 0x9AF4, 0xE99D, 0x9AF1, 0xE99E, 0x9AF7, 0xE99F, 0x9AFB, 0xE9A0, 0x9B06,
- 0xE9A1, 0x9B18, 0xE9A2, 0x9B1A, 0xE9A3, 0x9B1F, 0xE9A4, 0x9B22, 0xE9A5, 0x9B23, 0xE9A6, 0x9B25, 0xE9A7, 0x9B27, 0xE9A8, 0x9B28,
- 0xE9A9, 0x9B29, 0xE9AA, 0x9B2A, 0xE9AB, 0x9B2E, 0xE9AC, 0x9B2F, 0xE9AD, 0x9B32, 0xE9AE, 0x9B44, 0xE9AF, 0x9B43, 0xE9B0, 0x9B4F,
- 0xE9B1, 0x9B4D, 0xE9B2, 0x9B4E, 0xE9B3, 0x9B51, 0xE9B4, 0x9B58, 0xE9B5, 0x9B74, 0xE9B6, 0x9B93, 0xE9B7, 0x9B83, 0xE9B8, 0x9B91,
- 0xE9B9, 0x9B96, 0xE9BA, 0x9B97, 0xE9BB, 0x9B9F, 0xE9BC, 0x9BA0, 0xE9BD, 0x9BA8, 0xE9BE, 0x9BB4, 0xE9BF, 0x9BC0, 0xE9C0, 0x9BCA,
- 0xE9C1, 0x9BB9, 0xE9C2, 0x9BC6, 0xE9C3, 0x9BCF, 0xE9C4, 0x9BD1, 0xE9C5, 0x9BD2, 0xE9C6, 0x9BE3, 0xE9C7, 0x9BE2, 0xE9C8, 0x9BE4,
- 0xE9C9, 0x9BD4, 0xE9CA, 0x9BE1, 0xE9CB, 0x9C3A, 0xE9CC, 0x9BF2, 0xE9CD, 0x9BF1, 0xE9CE, 0x9BF0, 0xE9CF, 0x9C15, 0xE9D0, 0x9C14,
- 0xE9D1, 0x9C09, 0xE9D2, 0x9C13, 0xE9D3, 0x9C0C, 0xE9D4, 0x9C06, 0xE9D5, 0x9C08, 0xE9D6, 0x9C12, 0xE9D7, 0x9C0A, 0xE9D8, 0x9C04,
- 0xE9D9, 0x9C2E, 0xE9DA, 0x9C1B, 0xE9DB, 0x9C25, 0xE9DC, 0x9C24, 0xE9DD, 0x9C21, 0xE9DE, 0x9C30, 0xE9DF, 0x9C47, 0xE9E0, 0x9C32,
- 0xE9E1, 0x9C46, 0xE9E2, 0x9C3E, 0xE9E3, 0x9C5A, 0xE9E4, 0x9C60, 0xE9E5, 0x9C67, 0xE9E6, 0x9C76, 0xE9E7, 0x9C78, 0xE9E8, 0x9CE7,
- 0xE9E9, 0x9CEC, 0xE9EA, 0x9CF0, 0xE9EB, 0x9D09, 0xE9EC, 0x9D08, 0xE9ED, 0x9CEB, 0xE9EE, 0x9D03, 0xE9EF, 0x9D06, 0xE9F0, 0x9D2A,
- 0xE9F1, 0x9D26, 0xE9F2, 0x9DAF, 0xE9F3, 0x9D23, 0xE9F4, 0x9D1F, 0xE9F5, 0x9D44, 0xE9F6, 0x9D15, 0xE9F7, 0x9D12, 0xE9F8, 0x9D41,
- 0xE9F9, 0x9D3F, 0xE9FA, 0x9D3E, 0xE9FB, 0x9D46, 0xE9FC, 0x9D48, 0xEA40, 0x9D5D, 0xEA41, 0x9D5E, 0xEA42, 0x9D64, 0xEA43, 0x9D51,
- 0xEA44, 0x9D50, 0xEA45, 0x9D59, 0xEA46, 0x9D72, 0xEA47, 0x9D89, 0xEA48, 0x9D87, 0xEA49, 0x9DAB, 0xEA4A, 0x9D6F, 0xEA4B, 0x9D7A,
- 0xEA4C, 0x9D9A, 0xEA4D, 0x9DA4, 0xEA4E, 0x9DA9, 0xEA4F, 0x9DB2, 0xEA50, 0x9DC4, 0xEA51, 0x9DC1, 0xEA52, 0x9DBB, 0xEA53, 0x9DB8,
- 0xEA54, 0x9DBA, 0xEA55, 0x9DC6, 0xEA56, 0x9DCF, 0xEA57, 0x9DC2, 0xEA58, 0x9DD9, 0xEA59, 0x9DD3, 0xEA5A, 0x9DF8, 0xEA5B, 0x9DE6,
- 0xEA5C, 0x9DED, 0xEA5D, 0x9DEF, 0xEA5E, 0x9DFD, 0xEA5F, 0x9E1A, 0xEA60, 0x9E1B, 0xEA61, 0x9E1E, 0xEA62, 0x9E75, 0xEA63, 0x9E79,
- 0xEA64, 0x9E7D, 0xEA65, 0x9E81, 0xEA66, 0x9E88, 0xEA67, 0x9E8B, 0xEA68, 0x9E8C, 0xEA69, 0x9E92, 0xEA6A, 0x9E95, 0xEA6B, 0x9E91,
- 0xEA6C, 0x9E9D, 0xEA6D, 0x9EA5, 0xEA6E, 0x9EA9, 0xEA6F, 0x9EB8, 0xEA70, 0x9EAA, 0xEA71, 0x9EAD, 0xEA72, 0x9761, 0xEA73, 0x9ECC,
- 0xEA74, 0x9ECE, 0xEA75, 0x9ECF, 0xEA76, 0x9ED0, 0xEA77, 0x9ED4, 0xEA78, 0x9EDC, 0xEA79, 0x9EDE, 0xEA7A, 0x9EDD, 0xEA7B, 0x9EE0,
- 0xEA7C, 0x9EE5, 0xEA7D, 0x9EE8, 0xEA7E, 0x9EEF, 0xEA80, 0x9EF4, 0xEA81, 0x9EF6, 0xEA82, 0x9EF7, 0xEA83, 0x9EF9, 0xEA84, 0x9EFB,
- 0xEA85, 0x9EFC, 0xEA86, 0x9EFD, 0xEA87, 0x9F07, 0xEA88, 0x9F08, 0xEA89, 0x76B7, 0xEA8A, 0x9F15, 0xEA8B, 0x9F21, 0xEA8C, 0x9F2C,
- 0xEA8D, 0x9F3E, 0xEA8E, 0x9F4A, 0xEA8F, 0x9F52, 0xEA90, 0x9F54, 0xEA91, 0x9F63, 0xEA92, 0x9F5F, 0xEA93, 0x9F60, 0xEA94, 0x9F61,
- 0xEA95, 0x9F66, 0xEA96, 0x9F67, 0xEA97, 0x9F6C, 0xEA98, 0x9F6A, 0xEA99, 0x9F77, 0xEA9A, 0x9F72, 0xEA9B, 0x9F76, 0xEA9C, 0x9F95,
- 0xEA9D, 0x9F9C, 0xEA9E, 0x9FA0, 0xEA9F, 0x582F, 0xEAA0, 0x69C7, 0xEAA1, 0x9059, 0xEAA2, 0x7464, 0xEAA3, 0x51DC, 0xEAA4, 0x7199,
- 0xFA40, 0x2170, 0xFA41, 0x2171, 0xFA42, 0x2172, 0xFA43, 0x2173, 0xFA44, 0x2174, 0xFA45, 0x2175, 0xFA46, 0x2176, 0xFA47, 0x2177,
- 0xFA48, 0x2178, 0xFA49, 0x2179, 0xFA55, 0xFFE4, 0xFA56, 0xFF07, 0xFA57, 0xFF02, 0xFA5C, 0x7E8A, 0xFA5D, 0x891C, 0xFA5E, 0x9348,
- 0xFA5F, 0x9288, 0xFA60, 0x84DC, 0xFA61, 0x4FC9, 0xFA62, 0x70BB, 0xFA63, 0x6631, 0xFA64, 0x68C8, 0xFA65, 0x92F9, 0xFA66, 0x66FB,
- 0xFA67, 0x5F45, 0xFA68, 0x4E28, 0xFA69, 0x4EE1, 0xFA6A, 0x4EFC, 0xFA6B, 0x4F00, 0xFA6C, 0x4F03, 0xFA6D, 0x4F39, 0xFA6E, 0x4F56,
- 0xFA6F, 0x4F92, 0xFA70, 0x4F8A, 0xFA71, 0x4F9A, 0xFA72, 0x4F94, 0xFA73, 0x4FCD, 0xFA74, 0x5040, 0xFA75, 0x5022, 0xFA76, 0x4FFF,
- 0xFA77, 0x501E, 0xFA78, 0x5046, 0xFA79, 0x5070, 0xFA7A, 0x5042, 0xFA7B, 0x5094, 0xFA7C, 0x50F4, 0xFA7D, 0x50D8, 0xFA7E, 0x514A,
- 0xFA80, 0x5164, 0xFA81, 0x519D, 0xFA82, 0x51BE, 0xFA83, 0x51EC, 0xFA84, 0x5215, 0xFA85, 0x529C, 0xFA86, 0x52A6, 0xFA87, 0x52C0,
- 0xFA88, 0x52DB, 0xFA89, 0x5300, 0xFA8A, 0x5307, 0xFA8B, 0x5324, 0xFA8C, 0x5372, 0xFA8D, 0x5393, 0xFA8E, 0x53B2, 0xFA8F, 0x53DD,
- 0xFA90, 0xFA0E, 0xFA91, 0x549C, 0xFA92, 0x548A, 0xFA93, 0x54A9, 0xFA94, 0x54FF, 0xFA95, 0x5586, 0xFA96, 0x5759, 0xFA97, 0x5765,
- 0xFA98, 0x57AC, 0xFA99, 0x57C8, 0xFA9A, 0x57C7, 0xFA9B, 0xFA0F, 0xFA9C, 0xFA10, 0xFA9D, 0x589E, 0xFA9E, 0x58B2, 0xFA9F, 0x590B,
- 0xFAA0, 0x5953, 0xFAA1, 0x595B, 0xFAA2, 0x595D, 0xFAA3, 0x5963, 0xFAA4, 0x59A4, 0xFAA5, 0x59BA, 0xFAA6, 0x5B56, 0xFAA7, 0x5BC0,
- 0xFAA8, 0x752F, 0xFAA9, 0x5BD8, 0xFAAA, 0x5BEC, 0xFAAB, 0x5C1E, 0xFAAC, 0x5CA6, 0xFAAD, 0x5CBA, 0xFAAE, 0x5CF5, 0xFAAF, 0x5D27,
- 0xFAB0, 0x5D53, 0xFAB1, 0xFA11, 0xFAB2, 0x5D42, 0xFAB3, 0x5D6D, 0xFAB4, 0x5DB8, 0xFAB5, 0x5DB9, 0xFAB6, 0x5DD0, 0xFAB7, 0x5F21,
- 0xFAB8, 0x5F34, 0xFAB9, 0x5F67, 0xFABA, 0x5FB7, 0xFABB, 0x5FDE, 0xFABC, 0x605D, 0xFABD, 0x6085, 0xFABE, 0x608A, 0xFABF, 0x60DE,
- 0xFAC0, 0x60D5, 0xFAC1, 0x6120, 0xFAC2, 0x60F2, 0xFAC3, 0x6111, 0xFAC4, 0x6137, 0xFAC5, 0x6130, 0xFAC6, 0x6198, 0xFAC7, 0x6213,
- 0xFAC8, 0x62A6, 0xFAC9, 0x63F5, 0xFACA, 0x6460, 0xFACB, 0x649D, 0xFACC, 0x64CE, 0xFACD, 0x654E, 0xFACE, 0x6600, 0xFACF, 0x6615,
- 0xFAD0, 0x663B, 0xFAD1, 0x6609, 0xFAD2, 0x662E, 0xFAD3, 0x661E, 0xFAD4, 0x6624, 0xFAD5, 0x6665, 0xFAD6, 0x6657, 0xFAD7, 0x6659,
- 0xFAD8, 0xFA12, 0xFAD9, 0x6673, 0xFADA, 0x6699, 0xFADB, 0x66A0, 0xFADC, 0x66B2, 0xFADD, 0x66BF, 0xFADE, 0x66FA, 0xFADF, 0x670E,
- 0xFAE0, 0xF929, 0xFAE1, 0x6766, 0xFAE2, 0x67BB, 0xFAE3, 0x6852, 0xFAE4, 0x67C0, 0xFAE5, 0x6801, 0xFAE6, 0x6844, 0xFAE7, 0x68CF,
- 0xFAE8, 0xFA13, 0xFAE9, 0x6968, 0xFAEA, 0xFA14, 0xFAEB, 0x6998, 0xFAEC, 0x69E2, 0xFAED, 0x6A30, 0xFAEE, 0x6A6B, 0xFAEF, 0x6A46,
- 0xFAF0, 0x6A73, 0xFAF1, 0x6A7E, 0xFAF2, 0x6AE2, 0xFAF3, 0x6AE4, 0xFAF4, 0x6BD6, 0xFAF5, 0x6C3F, 0xFAF6, 0x6C5C, 0xFAF7, 0x6C86,
- 0xFAF8, 0x6C6F, 0xFAF9, 0x6CDA, 0xFAFA, 0x6D04, 0xFAFB, 0x6D87, 0xFAFC, 0x6D6F, 0xFB40, 0x6D96, 0xFB41, 0x6DAC, 0xFB42, 0x6DCF,
- 0xFB43, 0x6DF8, 0xFB44, 0x6DF2, 0xFB45, 0x6DFC, 0xFB46, 0x6E39, 0xFB47, 0x6E5C, 0xFB48, 0x6E27, 0xFB49, 0x6E3C, 0xFB4A, 0x6EBF,
- 0xFB4B, 0x6F88, 0xFB4C, 0x6FB5, 0xFB4D, 0x6FF5, 0xFB4E, 0x7005, 0xFB4F, 0x7007, 0xFB50, 0x7028, 0xFB51, 0x7085, 0xFB52, 0x70AB,
- 0xFB53, 0x710F, 0xFB54, 0x7104, 0xFB55, 0x715C, 0xFB56, 0x7146, 0xFB57, 0x7147, 0xFB58, 0xFA15, 0xFB59, 0x71C1, 0xFB5A, 0x71FE,
- 0xFB5B, 0x72B1, 0xFB5C, 0x72BE, 0xFB5D, 0x7324, 0xFB5E, 0xFA16, 0xFB5F, 0x7377, 0xFB60, 0x73BD, 0xFB61, 0x73C9, 0xFB62, 0x73D6,
- 0xFB63, 0x73E3, 0xFB64, 0x73D2, 0xFB65, 0x7407, 0xFB66, 0x73F5, 0xFB67, 0x7426, 0xFB68, 0x742A, 0xFB69, 0x7429, 0xFB6A, 0x742E,
- 0xFB6B, 0x7462, 0xFB6C, 0x7489, 0xFB6D, 0x749F, 0xFB6E, 0x7501, 0xFB6F, 0x756F, 0xFB70, 0x7682, 0xFB71, 0x769C, 0xFB72, 0x769E,
- 0xFB73, 0x769B, 0xFB74, 0x76A6, 0xFB75, 0xFA17, 0xFB76, 0x7746, 0xFB77, 0x52AF, 0xFB78, 0x7821, 0xFB79, 0x784E, 0xFB7A, 0x7864,
- 0xFB7B, 0x787A, 0xFB7C, 0x7930, 0xFB7D, 0xFA18, 0xFB7E, 0xFA19, 0xFB80, 0xFA1A, 0xFB81, 0x7994, 0xFB82, 0xFA1B, 0xFB83, 0x799B,
- 0xFB84, 0x7AD1, 0xFB85, 0x7AE7, 0xFB86, 0xFA1C, 0xFB87, 0x7AEB, 0xFB88, 0x7B9E, 0xFB89, 0xFA1D, 0xFB8A, 0x7D48, 0xFB8B, 0x7D5C,
- 0xFB8C, 0x7DB7, 0xFB8D, 0x7DA0, 0xFB8E, 0x7DD6, 0xFB8F, 0x7E52, 0xFB90, 0x7F47, 0xFB91, 0x7FA1, 0xFB92, 0xFA1E, 0xFB93, 0x8301,
- 0xFB94, 0x8362, 0xFB95, 0x837F, 0xFB96, 0x83C7, 0xFB97, 0x83F6, 0xFB98, 0x8448, 0xFB99, 0x84B4, 0xFB9A, 0x8553, 0xFB9B, 0x8559,
- 0xFB9C, 0x856B, 0xFB9D, 0xFA1F, 0xFB9E, 0x85B0, 0xFB9F, 0xFA20, 0xFBA0, 0xFA21, 0xFBA1, 0x8807, 0xFBA2, 0x88F5, 0xFBA3, 0x8A12,
- 0xFBA4, 0x8A37, 0xFBA5, 0x8A79, 0xFBA6, 0x8AA7, 0xFBA7, 0x8ABE, 0xFBA8, 0x8ADF, 0xFBA9, 0xFA22, 0xFBAA, 0x8AF6, 0xFBAB, 0x8B53,
- 0xFBAC, 0x8B7F, 0xFBAD, 0x8CF0, 0xFBAE, 0x8CF4, 0xFBAF, 0x8D12, 0xFBB0, 0x8D76, 0xFBB1, 0xFA23, 0xFBB2, 0x8ECF, 0xFBB3, 0xFA24,
- 0xFBB4, 0xFA25, 0xFBB5, 0x9067, 0xFBB6, 0x90DE, 0xFBB7, 0xFA26, 0xFBB8, 0x9115, 0xFBB9, 0x9127, 0xFBBA, 0x91DA, 0xFBBB, 0x91D7,
- 0xFBBC, 0x91DE, 0xFBBD, 0x91ED, 0xFBBE, 0x91EE, 0xFBBF, 0x91E4, 0xFBC0, 0x91E5, 0xFBC1, 0x9206, 0xFBC2, 0x9210, 0xFBC3, 0x920A,
- 0xFBC4, 0x923A, 0xFBC5, 0x9240, 0xFBC6, 0x923C, 0xFBC7, 0x924E, 0xFBC8, 0x9259, 0xFBC9, 0x9251, 0xFBCA, 0x9239, 0xFBCB, 0x9267,
- 0xFBCC, 0x92A7, 0xFBCD, 0x9277, 0xFBCE, 0x9278, 0xFBCF, 0x92E7, 0xFBD0, 0x92D7, 0xFBD1, 0x92D9, 0xFBD2, 0x92D0, 0xFBD3, 0xFA27,
- 0xFBD4, 0x92D5, 0xFBD5, 0x92E0, 0xFBD6, 0x92D3, 0xFBD7, 0x9325, 0xFBD8, 0x9321, 0xFBD9, 0x92FB, 0xFBDA, 0xFA28, 0xFBDB, 0x931E,
- 0xFBDC, 0x92FF, 0xFBDD, 0x931D, 0xFBDE, 0x9302, 0xFBDF, 0x9370, 0xFBE0, 0x9357, 0xFBE1, 0x93A4, 0xFBE2, 0x93C6, 0xFBE3, 0x93DE,
- 0xFBE4, 0x93F8, 0xFBE5, 0x9431, 0xFBE6, 0x9445, 0xFBE7, 0x9448, 0xFBE8, 0x9592, 0xFBE9, 0xF9DC, 0xFBEA, 0xFA29, 0xFBEB, 0x969D,
- 0xFBEC, 0x96AF, 0xFBED, 0x9733, 0xFBEE, 0x973B, 0xFBEF, 0x9743, 0xFBF0, 0x974D, 0xFBF1, 0x974F, 0xFBF2, 0x9751, 0xFBF3, 0x9755,
- 0xFBF4, 0x9857, 0xFBF5, 0x9865, 0xFBF6, 0xFA2A, 0xFBF7, 0xFA2B, 0xFBF8, 0x9927, 0xFBF9, 0xFA2C, 0xFBFA, 0x999E, 0xFBFB, 0x9A4E,
- 0xFBFC, 0x9AD9, 0xFC40, 0x9ADC, 0xFC41, 0x9B75, 0xFC42, 0x9B72, 0xFC43, 0x9B8F, 0xFC44, 0x9BB1, 0xFC45, 0x9BBB, 0xFC46, 0x9C00,
- 0xFC47, 0x9D70, 0xFC48, 0x9D6B, 0xFC49, 0xFA2D, 0xFC4A, 0x9E19, 0xFC4B, 0x9ED1, 0, 0
-};
-#endif
-
-#if FF_CODE_PAGE == 936 || FF_CODE_PAGE == 0 /* Simplified Chinese */
-static const WCHAR uni2oem936[] = { /* Unicode --> GBK pairs */
- 0x00A4, 0xA1E8, 0x00A7, 0xA1EC, 0x00A8, 0xA1A7, 0x00B0, 0xA1E3, 0x00B1, 0xA1C0, 0x00B7, 0xA1A4, 0x00D7, 0xA1C1, 0x00E0, 0xA8A4,
- 0x00E1, 0xA8A2, 0x00E8, 0xA8A8, 0x00E9, 0xA8A6, 0x00EA, 0xA8BA, 0x00EC, 0xA8AC, 0x00ED, 0xA8AA, 0x00F2, 0xA8B0, 0x00F3, 0xA8AE,
- 0x00F7, 0xA1C2, 0x00F9, 0xA8B4, 0x00FA, 0xA8B2, 0x00FC, 0xA8B9, 0x0101, 0xA8A1, 0x0113, 0xA8A5, 0x011B, 0xA8A7, 0x012B, 0xA8A9,
- 0x0144, 0xA8BD, 0x0148, 0xA8BE, 0x014D, 0xA8AD, 0x016B, 0xA8B1, 0x01CE, 0xA8A3, 0x01D0, 0xA8AB, 0x01D2, 0xA8AF, 0x01D4, 0xA8B3,
- 0x01D6, 0xA8B5, 0x01D8, 0xA8B6, 0x01DA, 0xA8B7, 0x01DC, 0xA8B8, 0x0251, 0xA8BB, 0x0261, 0xA8C0, 0x02C7, 0xA1A6, 0x02C9, 0xA1A5,
- 0x02CA, 0xA840, 0x02CB, 0xA841, 0x02D9, 0xA842, 0x0391, 0xA6A1, 0x0392, 0xA6A2, 0x0393, 0xA6A3, 0x0394, 0xA6A4, 0x0395, 0xA6A5,
- 0x0396, 0xA6A6, 0x0397, 0xA6A7, 0x0398, 0xA6A8, 0x0399, 0xA6A9, 0x039A, 0xA6AA, 0x039B, 0xA6AB, 0x039C, 0xA6AC, 0x039D, 0xA6AD,
- 0x039E, 0xA6AE, 0x039F, 0xA6AF, 0x03A0, 0xA6B0, 0x03A1, 0xA6B1, 0x03A3, 0xA6B2, 0x03A4, 0xA6B3, 0x03A5, 0xA6B4, 0x03A6, 0xA6B5,
- 0x03A7, 0xA6B6, 0x03A8, 0xA6B7, 0x03A9, 0xA6B8, 0x03B1, 0xA6C1, 0x03B2, 0xA6C2, 0x03B3, 0xA6C3, 0x03B4, 0xA6C4, 0x03B5, 0xA6C5,
- 0x03B6, 0xA6C6, 0x03B7, 0xA6C7, 0x03B8, 0xA6C8, 0x03B9, 0xA6C9, 0x03BA, 0xA6CA, 0x03BB, 0xA6CB, 0x03BC, 0xA6CC, 0x03BD, 0xA6CD,
- 0x03BE, 0xA6CE, 0x03BF, 0xA6CF, 0x03C0, 0xA6D0, 0x03C1, 0xA6D1, 0x03C3, 0xA6D2, 0x03C4, 0xA6D3, 0x03C5, 0xA6D4, 0x03C6, 0xA6D5,
- 0x03C7, 0xA6D6, 0x03C8, 0xA6D7, 0x03C9, 0xA6D8, 0x0401, 0xA7A7, 0x0410, 0xA7A1, 0x0411, 0xA7A2, 0x0412, 0xA7A3, 0x0413, 0xA7A4,
- 0x0414, 0xA7A5, 0x0415, 0xA7A6, 0x0416, 0xA7A8, 0x0417, 0xA7A9, 0x0418, 0xA7AA, 0x0419, 0xA7AB, 0x041A, 0xA7AC, 0x041B, 0xA7AD,
- 0x041C, 0xA7AE, 0x041D, 0xA7AF, 0x041E, 0xA7B0, 0x041F, 0xA7B1, 0x0420, 0xA7B2, 0x0421, 0xA7B3, 0x0422, 0xA7B4, 0x0423, 0xA7B5,
- 0x0424, 0xA7B6, 0x0425, 0xA7B7, 0x0426, 0xA7B8, 0x0427, 0xA7B9, 0x0428, 0xA7BA, 0x0429, 0xA7BB, 0x042A, 0xA7BC, 0x042B, 0xA7BD,
- 0x042C, 0xA7BE, 0x042D, 0xA7BF, 0x042E, 0xA7C0, 0x042F, 0xA7C1, 0x0430, 0xA7D1, 0x0431, 0xA7D2, 0x0432, 0xA7D3, 0x0433, 0xA7D4,
- 0x0434, 0xA7D5, 0x0435, 0xA7D6, 0x0436, 0xA7D8, 0x0437, 0xA7D9, 0x0438, 0xA7DA, 0x0439, 0xA7DB, 0x043A, 0xA7DC, 0x043B, 0xA7DD,
- 0x043C, 0xA7DE, 0x043D, 0xA7DF, 0x043E, 0xA7E0, 0x043F, 0xA7E1, 0x0440, 0xA7E2, 0x0441, 0xA7E3, 0x0442, 0xA7E4, 0x0443, 0xA7E5,
- 0x0444, 0xA7E6, 0x0445, 0xA7E7, 0x0446, 0xA7E8, 0x0447, 0xA7E9, 0x0448, 0xA7EA, 0x0449, 0xA7EB, 0x044A, 0xA7EC, 0x044B, 0xA7ED,
- 0x044C, 0xA7EE, 0x044D, 0xA7EF, 0x044E, 0xA7F0, 0x044F, 0xA7F1, 0x0451, 0xA7D7, 0x2010, 0xA95C, 0x2013, 0xA843, 0x2014, 0xA1AA,
- 0x2015, 0xA844, 0x2016, 0xA1AC, 0x2018, 0xA1AE, 0x2019, 0xA1AF, 0x201C, 0xA1B0, 0x201D, 0xA1B1, 0x2025, 0xA845, 0x2026, 0xA1AD,
- 0x2030, 0xA1EB, 0x2032, 0xA1E4, 0x2033, 0xA1E5, 0x2035, 0xA846, 0x203B, 0xA1F9, 0x20AC, 0x0080, 0x2103, 0xA1E6, 0x2105, 0xA847,
- 0x2109, 0xA848, 0x2116, 0xA1ED, 0x2121, 0xA959, 0x2160, 0xA2F1, 0x2161, 0xA2F2, 0x2162, 0xA2F3, 0x2163, 0xA2F4, 0x2164, 0xA2F5,
- 0x2165, 0xA2F6, 0x2166, 0xA2F7, 0x2167, 0xA2F8, 0x2168, 0xA2F9, 0x2169, 0xA2FA, 0x216A, 0xA2FB, 0x216B, 0xA2FC, 0x2170, 0xA2A1,
- 0x2171, 0xA2A2, 0x2172, 0xA2A3, 0x2173, 0xA2A4, 0x2174, 0xA2A5, 0x2175, 0xA2A6, 0x2176, 0xA2A7, 0x2177, 0xA2A8, 0x2178, 0xA2A9,
- 0x2179, 0xA2AA, 0x2190, 0xA1FB, 0x2191, 0xA1FC, 0x2192, 0xA1FA, 0x2193, 0xA1FD, 0x2196, 0xA849, 0x2197, 0xA84A, 0x2198, 0xA84B,
- 0x2199, 0xA84C, 0x2208, 0xA1CA, 0x220F, 0xA1C7, 0x2211, 0xA1C6, 0x2215, 0xA84D, 0x221A, 0xA1CC, 0x221D, 0xA1D8, 0x221E, 0xA1DE,
- 0x221F, 0xA84E, 0x2220, 0xA1CF, 0x2223, 0xA84F, 0x2225, 0xA1CE, 0x2227, 0xA1C4, 0x2228, 0xA1C5, 0x2229, 0xA1C9, 0x222A, 0xA1C8,
- 0x222B, 0xA1D2, 0x222E, 0xA1D3, 0x2234, 0xA1E0, 0x2235, 0xA1DF, 0x2236, 0xA1C3, 0x2237, 0xA1CB, 0x223D, 0xA1D7, 0x2248, 0xA1D6,
- 0x224C, 0xA1D5, 0x2252, 0xA850, 0x2260, 0xA1D9, 0x2261, 0xA1D4, 0x2264, 0xA1DC, 0x2265, 0xA1DD, 0x2266, 0xA851, 0x2267, 0xA852,
- 0x226E, 0xA1DA, 0x226F, 0xA1DB, 0x2295, 0xA892, 0x2299, 0xA1D1, 0x22A5, 0xA1CD, 0x22BF, 0xA853, 0x2312, 0xA1D0, 0x2460, 0xA2D9,
- 0x2461, 0xA2DA, 0x2462, 0xA2DB, 0x2463, 0xA2DC, 0x2464, 0xA2DD, 0x2465, 0xA2DE, 0x2466, 0xA2DF, 0x2467, 0xA2E0, 0x2468, 0xA2E1,
- 0x2469, 0xA2E2, 0x2474, 0xA2C5, 0x2475, 0xA2C6, 0x2476, 0xA2C7, 0x2477, 0xA2C8, 0x2478, 0xA2C9, 0x2479, 0xA2CA, 0x247A, 0xA2CB,
- 0x247B, 0xA2CC, 0x247C, 0xA2CD, 0x247D, 0xA2CE, 0x247E, 0xA2CF, 0x247F, 0xA2D0, 0x2480, 0xA2D1, 0x2481, 0xA2D2, 0x2482, 0xA2D3,
- 0x2483, 0xA2D4, 0x2484, 0xA2D5, 0x2485, 0xA2D6, 0x2486, 0xA2D7, 0x2487, 0xA2D8, 0x2488, 0xA2B1, 0x2489, 0xA2B2, 0x248A, 0xA2B3,
- 0x248B, 0xA2B4, 0x248C, 0xA2B5, 0x248D, 0xA2B6, 0x248E, 0xA2B7, 0x248F, 0xA2B8, 0x2490, 0xA2B9, 0x2491, 0xA2BA, 0x2492, 0xA2BB,
- 0x2493, 0xA2BC, 0x2494, 0xA2BD, 0x2495, 0xA2BE, 0x2496, 0xA2BF, 0x2497, 0xA2C0, 0x2498, 0xA2C1, 0x2499, 0xA2C2, 0x249A, 0xA2C3,
- 0x249B, 0xA2C4, 0x2500, 0xA9A4, 0x2501, 0xA9A5, 0x2502, 0xA9A6, 0x2503, 0xA9A7, 0x2504, 0xA9A8, 0x2505, 0xA9A9, 0x2506, 0xA9AA,
- 0x2507, 0xA9AB, 0x2508, 0xA9AC, 0x2509, 0xA9AD, 0x250A, 0xA9AE, 0x250B, 0xA9AF, 0x250C, 0xA9B0, 0x250D, 0xA9B1, 0x250E, 0xA9B2,
- 0x250F, 0xA9B3, 0x2510, 0xA9B4, 0x2511, 0xA9B5, 0x2512, 0xA9B6, 0x2513, 0xA9B7, 0x2514, 0xA9B8, 0x2515, 0xA9B9, 0x2516, 0xA9BA,
- 0x2517, 0xA9BB, 0x2518, 0xA9BC, 0x2519, 0xA9BD, 0x251A, 0xA9BE, 0x251B, 0xA9BF, 0x251C, 0xA9C0, 0x251D, 0xA9C1, 0x251E, 0xA9C2,
- 0x251F, 0xA9C3, 0x2520, 0xA9C4, 0x2521, 0xA9C5, 0x2522, 0xA9C6, 0x2523, 0xA9C7, 0x2524, 0xA9C8, 0x2525, 0xA9C9, 0x2526, 0xA9CA,
- 0x2527, 0xA9CB, 0x2528, 0xA9CC, 0x2529, 0xA9CD, 0x252A, 0xA9CE, 0x252B, 0xA9CF, 0x252C, 0xA9D0, 0x252D, 0xA9D1, 0x252E, 0xA9D2,
- 0x252F, 0xA9D3, 0x2530, 0xA9D4, 0x2531, 0xA9D5, 0x2532, 0xA9D6, 0x2533, 0xA9D7, 0x2534, 0xA9D8, 0x2535, 0xA9D9, 0x2536, 0xA9DA,
- 0x2537, 0xA9DB, 0x2538, 0xA9DC, 0x2539, 0xA9DD, 0x253A, 0xA9DE, 0x253B, 0xA9DF, 0x253C, 0xA9E0, 0x253D, 0xA9E1, 0x253E, 0xA9E2,
- 0x253F, 0xA9E3, 0x2540, 0xA9E4, 0x2541, 0xA9E5, 0x2542, 0xA9E6, 0x2543, 0xA9E7, 0x2544, 0xA9E8, 0x2545, 0xA9E9, 0x2546, 0xA9EA,
- 0x2547, 0xA9EB, 0x2548, 0xA9EC, 0x2549, 0xA9ED, 0x254A, 0xA9EE, 0x254B, 0xA9EF, 0x2550, 0xA854, 0x2551, 0xA855, 0x2552, 0xA856,
- 0x2553, 0xA857, 0x2554, 0xA858, 0x2555, 0xA859, 0x2556, 0xA85A, 0x2557, 0xA85B, 0x2558, 0xA85C, 0x2559, 0xA85D, 0x255A, 0xA85E,
- 0x255B, 0xA85F, 0x255C, 0xA860, 0x255D, 0xA861, 0x255E, 0xA862, 0x255F, 0xA863, 0x2560, 0xA864, 0x2561, 0xA865, 0x2562, 0xA866,
- 0x2563, 0xA867, 0x2564, 0xA868, 0x2565, 0xA869, 0x2566, 0xA86A, 0x2567, 0xA86B, 0x2568, 0xA86C, 0x2569, 0xA86D, 0x256A, 0xA86E,
- 0x256B, 0xA86F, 0x256C, 0xA870, 0x256D, 0xA871, 0x256E, 0xA872, 0x256F, 0xA873, 0x2570, 0xA874, 0x2571, 0xA875, 0x2572, 0xA876,
- 0x2573, 0xA877, 0x2581, 0xA878, 0x2582, 0xA879, 0x2583, 0xA87A, 0x2584, 0xA87B, 0x2585, 0xA87C, 0x2586, 0xA87D, 0x2587, 0xA87E,
- 0x2588, 0xA880, 0x2589, 0xA881, 0x258A, 0xA882, 0x258B, 0xA883, 0x258C, 0xA884, 0x258D, 0xA885, 0x258E, 0xA886, 0x258F, 0xA887,
- 0x2593, 0xA888, 0x2594, 0xA889, 0x2595, 0xA88A, 0x25A0, 0xA1F6, 0x25A1, 0xA1F5, 0x25B2, 0xA1F8, 0x25B3, 0xA1F7, 0x25BC, 0xA88B,
- 0x25BD, 0xA88C, 0x25C6, 0xA1F4, 0x25C7, 0xA1F3, 0x25CB, 0xA1F0, 0x25CE, 0xA1F2, 0x25CF, 0xA1F1, 0x25E2, 0xA88D, 0x25E3, 0xA88E,
- 0x25E4, 0xA88F, 0x25E5, 0xA890, 0x2605, 0xA1EF, 0x2606, 0xA1EE, 0x2609, 0xA891, 0x2640, 0xA1E2, 0x2642, 0xA1E1, 0x3000, 0xA1A1,
- 0x3001, 0xA1A2, 0x3002, 0xA1A3, 0x3003, 0xA1A8, 0x3005, 0xA1A9, 0x3006, 0xA965, 0x3007, 0xA996, 0x3008, 0xA1B4, 0x3009, 0xA1B5,
- 0x300A, 0xA1B6, 0x300B, 0xA1B7, 0x300C, 0xA1B8, 0x300D, 0xA1B9, 0x300E, 0xA1BA, 0x300F, 0xA1BB, 0x3010, 0xA1BE, 0x3011, 0xA1BF,
- 0x3012, 0xA893, 0x3013, 0xA1FE, 0x3014, 0xA1B2, 0x3015, 0xA1B3, 0x3016, 0xA1BC, 0x3017, 0xA1BD, 0x301D, 0xA894, 0x301E, 0xA895,
- 0x3021, 0xA940, 0x3022, 0xA941, 0x3023, 0xA942, 0x3024, 0xA943, 0x3025, 0xA944, 0x3026, 0xA945, 0x3027, 0xA946, 0x3028, 0xA947,
- 0x3029, 0xA948, 0x3041, 0xA4A1, 0x3042, 0xA4A2, 0x3043, 0xA4A3, 0x3044, 0xA4A4, 0x3045, 0xA4A5, 0x3046, 0xA4A6, 0x3047, 0xA4A7,
- 0x3048, 0xA4A8, 0x3049, 0xA4A9, 0x304A, 0xA4AA, 0x304B, 0xA4AB, 0x304C, 0xA4AC, 0x304D, 0xA4AD, 0x304E, 0xA4AE, 0x304F, 0xA4AF,
- 0x3050, 0xA4B0, 0x3051, 0xA4B1, 0x3052, 0xA4B2, 0x3053, 0xA4B3, 0x3054, 0xA4B4, 0x3055, 0xA4B5, 0x3056, 0xA4B6, 0x3057, 0xA4B7,
- 0x3058, 0xA4B8, 0x3059, 0xA4B9, 0x305A, 0xA4BA, 0x305B, 0xA4BB, 0x305C, 0xA4BC, 0x305D, 0xA4BD, 0x305E, 0xA4BE, 0x305F, 0xA4BF,
- 0x3060, 0xA4C0, 0x3061, 0xA4C1, 0x3062, 0xA4C2, 0x3063, 0xA4C3, 0x3064, 0xA4C4, 0x3065, 0xA4C5, 0x3066, 0xA4C6, 0x3067, 0xA4C7,
- 0x3068, 0xA4C8, 0x3069, 0xA4C9, 0x306A, 0xA4CA, 0x306B, 0xA4CB, 0x306C, 0xA4CC, 0x306D, 0xA4CD, 0x306E, 0xA4CE, 0x306F, 0xA4CF,
- 0x3070, 0xA4D0, 0x3071, 0xA4D1, 0x3072, 0xA4D2, 0x3073, 0xA4D3, 0x3074, 0xA4D4, 0x3075, 0xA4D5, 0x3076, 0xA4D6, 0x3077, 0xA4D7,
- 0x3078, 0xA4D8, 0x3079, 0xA4D9, 0x307A, 0xA4DA, 0x307B, 0xA4DB, 0x307C, 0xA4DC, 0x307D, 0xA4DD, 0x307E, 0xA4DE, 0x307F, 0xA4DF,
- 0x3080, 0xA4E0, 0x3081, 0xA4E1, 0x3082, 0xA4E2, 0x3083, 0xA4E3, 0x3084, 0xA4E4, 0x3085, 0xA4E5, 0x3086, 0xA4E6, 0x3087, 0xA4E7,
- 0x3088, 0xA4E8, 0x3089, 0xA4E9, 0x308A, 0xA4EA, 0x308B, 0xA4EB, 0x308C, 0xA4EC, 0x308D, 0xA4ED, 0x308E, 0xA4EE, 0x308F, 0xA4EF,
- 0x3090, 0xA4F0, 0x3091, 0xA4F1, 0x3092, 0xA4F2, 0x3093, 0xA4F3, 0x309B, 0xA961, 0x309C, 0xA962, 0x309D, 0xA966, 0x309E, 0xA967,
- 0x30A1, 0xA5A1, 0x30A2, 0xA5A2, 0x30A3, 0xA5A3, 0x30A4, 0xA5A4, 0x30A5, 0xA5A5, 0x30A6, 0xA5A6, 0x30A7, 0xA5A7, 0x30A8, 0xA5A8,
- 0x30A9, 0xA5A9, 0x30AA, 0xA5AA, 0x30AB, 0xA5AB, 0x30AC, 0xA5AC, 0x30AD, 0xA5AD, 0x30AE, 0xA5AE, 0x30AF, 0xA5AF, 0x30B0, 0xA5B0,
- 0x30B1, 0xA5B1, 0x30B2, 0xA5B2, 0x30B3, 0xA5B3, 0x30B4, 0xA5B4, 0x30B5, 0xA5B5, 0x30B6, 0xA5B6, 0x30B7, 0xA5B7, 0x30B8, 0xA5B8,
- 0x30B9, 0xA5B9, 0x30BA, 0xA5BA, 0x30BB, 0xA5BB, 0x30BC, 0xA5BC, 0x30BD, 0xA5BD, 0x30BE, 0xA5BE, 0x30BF, 0xA5BF, 0x30C0, 0xA5C0,
- 0x30C1, 0xA5C1, 0x30C2, 0xA5C2, 0x30C3, 0xA5C3, 0x30C4, 0xA5C4, 0x30C5, 0xA5C5, 0x30C6, 0xA5C6, 0x30C7, 0xA5C7, 0x30C8, 0xA5C8,
- 0x30C9, 0xA5C9, 0x30CA, 0xA5CA, 0x30CB, 0xA5CB, 0x30CC, 0xA5CC, 0x30CD, 0xA5CD, 0x30CE, 0xA5CE, 0x30CF, 0xA5CF, 0x30D0, 0xA5D0,
- 0x30D1, 0xA5D1, 0x30D2, 0xA5D2, 0x30D3, 0xA5D3, 0x30D4, 0xA5D4, 0x30D5, 0xA5D5, 0x30D6, 0xA5D6, 0x30D7, 0xA5D7, 0x30D8, 0xA5D8,
- 0x30D9, 0xA5D9, 0x30DA, 0xA5DA, 0x30DB, 0xA5DB, 0x30DC, 0xA5DC, 0x30DD, 0xA5DD, 0x30DE, 0xA5DE, 0x30DF, 0xA5DF, 0x30E0, 0xA5E0,
- 0x30E1, 0xA5E1, 0x30E2, 0xA5E2, 0x30E3, 0xA5E3, 0x30E4, 0xA5E4, 0x30E5, 0xA5E5, 0x30E6, 0xA5E6, 0x30E7, 0xA5E7, 0x30E8, 0xA5E8,
- 0x30E9, 0xA5E9, 0x30EA, 0xA5EA, 0x30EB, 0xA5EB, 0x30EC, 0xA5EC, 0x30ED, 0xA5ED, 0x30EE, 0xA5EE, 0x30EF, 0xA5EF, 0x30F0, 0xA5F0,
- 0x30F1, 0xA5F1, 0x30F2, 0xA5F2, 0x30F3, 0xA5F3, 0x30F4, 0xA5F4, 0x30F5, 0xA5F5, 0x30F6, 0xA5F6, 0x30FC, 0xA960, 0x30FD, 0xA963,
- 0x30FE, 0xA964, 0x3105, 0xA8C5, 0x3106, 0xA8C6, 0x3107, 0xA8C7, 0x3108, 0xA8C8, 0x3109, 0xA8C9, 0x310A, 0xA8CA, 0x310B, 0xA8CB,
- 0x310C, 0xA8CC, 0x310D, 0xA8CD, 0x310E, 0xA8CE, 0x310F, 0xA8CF, 0x3110, 0xA8D0, 0x3111, 0xA8D1, 0x3112, 0xA8D2, 0x3113, 0xA8D3,
- 0x3114, 0xA8D4, 0x3115, 0xA8D5, 0x3116, 0xA8D6, 0x3117, 0xA8D7, 0x3118, 0xA8D8, 0x3119, 0xA8D9, 0x311A, 0xA8DA, 0x311B, 0xA8DB,
- 0x311C, 0xA8DC, 0x311D, 0xA8DD, 0x311E, 0xA8DE, 0x311F, 0xA8DF, 0x3120, 0xA8E0, 0x3121, 0xA8E1, 0x3122, 0xA8E2, 0x3123, 0xA8E3,
- 0x3124, 0xA8E4, 0x3125, 0xA8E5, 0x3126, 0xA8E6, 0x3127, 0xA8E7, 0x3128, 0xA8E8, 0x3129, 0xA8E9, 0x3220, 0xA2E5, 0x3221, 0xA2E6,
- 0x3222, 0xA2E7, 0x3223, 0xA2E8, 0x3224, 0xA2E9, 0x3225, 0xA2EA, 0x3226, 0xA2EB, 0x3227, 0xA2EC, 0x3228, 0xA2ED, 0x3229, 0xA2EE,
- 0x3231, 0xA95A, 0x32A3, 0xA949, 0x338E, 0xA94A, 0x338F, 0xA94B, 0x339C, 0xA94C, 0x339D, 0xA94D, 0x339E, 0xA94E, 0x33A1, 0xA94F,
- 0x33C4, 0xA950, 0x33CE, 0xA951, 0x33D1, 0xA952, 0x33D2, 0xA953, 0x33D5, 0xA954, 0x4E00, 0xD2BB, 0x4E01, 0xB6A1, 0x4E02, 0x8140,
- 0x4E03, 0xC6DF, 0x4E04, 0x8141, 0x4E05, 0x8142, 0x4E06, 0x8143, 0x4E07, 0xCDF2, 0x4E08, 0xD5C9, 0x4E09, 0xC8FD, 0x4E0A, 0xC9CF,
- 0x4E0B, 0xCFC2, 0x4E0C, 0xD8A2, 0x4E0D, 0xB2BB, 0x4E0E, 0xD3EB, 0x4E0F, 0x8144, 0x4E10, 0xD8A4, 0x4E11, 0xB3F3, 0x4E12, 0x8145,
- 0x4E13, 0xD7A8, 0x4E14, 0xC7D2, 0x4E15, 0xD8A7, 0x4E16, 0xCAC0, 0x4E17, 0x8146, 0x4E18, 0xC7F0, 0x4E19, 0xB1FB, 0x4E1A, 0xD2B5,
- 0x4E1B, 0xB4D4, 0x4E1C, 0xB6AB, 0x4E1D, 0xCBBF, 0x4E1E, 0xD8A9, 0x4E1F, 0x8147, 0x4E20, 0x8148, 0x4E21, 0x8149, 0x4E22, 0xB6AA,
- 0x4E23, 0x814A, 0x4E24, 0xC1BD, 0x4E25, 0xD1CF, 0x4E26, 0x814B, 0x4E27, 0xC9A5, 0x4E28, 0xD8AD, 0x4E29, 0x814C, 0x4E2A, 0xB8F6,
- 0x4E2B, 0xD1BE, 0x4E2C, 0xE3DC, 0x4E2D, 0xD6D0, 0x4E2E, 0x814D, 0x4E2F, 0x814E, 0x4E30, 0xB7E1, 0x4E31, 0x814F, 0x4E32, 0xB4AE,
- 0x4E33, 0x8150, 0x4E34, 0xC1D9, 0x4E35, 0x8151, 0x4E36, 0xD8BC, 0x4E37, 0x8152, 0x4E38, 0xCDE8, 0x4E39, 0xB5A4, 0x4E3A, 0xCEAA,
- 0x4E3B, 0xD6F7, 0x4E3C, 0x8153, 0x4E3D, 0xC0F6, 0x4E3E, 0xBED9, 0x4E3F, 0xD8AF, 0x4E40, 0x8154, 0x4E41, 0x8155, 0x4E42, 0x8156,
- 0x4E43, 0xC4CB, 0x4E44, 0x8157, 0x4E45, 0xBEC3, 0x4E46, 0x8158, 0x4E47, 0xD8B1, 0x4E48, 0xC3B4, 0x4E49, 0xD2E5, 0x4E4A, 0x8159,
- 0x4E4B, 0xD6AE, 0x4E4C, 0xCEDA, 0x4E4D, 0xD5A7, 0x4E4E, 0xBAF5, 0x4E4F, 0xB7A6, 0x4E50, 0xC0D6, 0x4E51, 0x815A, 0x4E52, 0xC6B9,
- 0x4E53, 0xC5D2, 0x4E54, 0xC7C7, 0x4E55, 0x815B, 0x4E56, 0xB9D4, 0x4E57, 0x815C, 0x4E58, 0xB3CB, 0x4E59, 0xD2D2, 0x4E5A, 0x815D,
- 0x4E5B, 0x815E, 0x4E5C, 0xD8BF, 0x4E5D, 0xBEC5, 0x4E5E, 0xC6F2, 0x4E5F, 0xD2B2, 0x4E60, 0xCFB0, 0x4E61, 0xCFE7, 0x4E62, 0x815F,
- 0x4E63, 0x8160, 0x4E64, 0x8161, 0x4E65, 0x8162, 0x4E66, 0xCAE9, 0x4E67, 0x8163, 0x4E68, 0x8164, 0x4E69, 0xD8C0, 0x4E6A, 0x8165,
- 0x4E6B, 0x8166, 0x4E6C, 0x8167, 0x4E6D, 0x8168, 0x4E6E, 0x8169, 0x4E6F, 0x816A, 0x4E70, 0xC2F2, 0x4E71, 0xC2D2, 0x4E72, 0x816B,
- 0x4E73, 0xC8E9, 0x4E74, 0x816C, 0x4E75, 0x816D, 0x4E76, 0x816E, 0x4E77, 0x816F, 0x4E78, 0x8170, 0x4E79, 0x8171, 0x4E7A, 0x8172,
- 0x4E7B, 0x8173, 0x4E7C, 0x8174, 0x4E7D, 0x8175, 0x4E7E, 0xC7AC, 0x4E7F, 0x8176, 0x4E80, 0x8177, 0x4E81, 0x8178, 0x4E82, 0x8179,
- 0x4E83, 0x817A, 0x4E84, 0x817B, 0x4E85, 0x817C, 0x4E86, 0xC1CB, 0x4E87, 0x817D, 0x4E88, 0xD3E8, 0x4E89, 0xD5F9, 0x4E8A, 0x817E,
- 0x4E8B, 0xCAC2, 0x4E8C, 0xB6FE, 0x4E8D, 0xD8A1, 0x4E8E, 0xD3DA, 0x4E8F, 0xBFF7, 0x4E90, 0x8180, 0x4E91, 0xD4C6, 0x4E92, 0xBBA5,
- 0x4E93, 0xD8C1, 0x4E94, 0xCEE5, 0x4E95, 0xBEAE, 0x4E96, 0x8181, 0x4E97, 0x8182, 0x4E98, 0xD8A8, 0x4E99, 0x8183, 0x4E9A, 0xD1C7,
- 0x4E9B, 0xD0A9, 0x4E9C, 0x8184, 0x4E9D, 0x8185, 0x4E9E, 0x8186, 0x4E9F, 0xD8BD, 0x4EA0, 0xD9EF, 0x4EA1, 0xCDF6, 0x4EA2, 0xBFBA,
- 0x4EA3, 0x8187, 0x4EA4, 0xBDBB, 0x4EA5, 0xBAA5, 0x4EA6, 0xD2E0, 0x4EA7, 0xB2FA, 0x4EA8, 0xBAE0, 0x4EA9, 0xC4B6, 0x4EAA, 0x8188,
- 0x4EAB, 0xCFED, 0x4EAC, 0xBEA9, 0x4EAD, 0xCDA4, 0x4EAE, 0xC1C1, 0x4EAF, 0x8189, 0x4EB0, 0x818A, 0x4EB1, 0x818B, 0x4EB2, 0xC7D7,
- 0x4EB3, 0xD9F1, 0x4EB4, 0x818C, 0x4EB5, 0xD9F4, 0x4EB6, 0x818D, 0x4EB7, 0x818E, 0x4EB8, 0x818F, 0x4EB9, 0x8190, 0x4EBA, 0xC8CB,
- 0x4EBB, 0xD8E9, 0x4EBC, 0x8191, 0x4EBD, 0x8192, 0x4EBE, 0x8193, 0x4EBF, 0xD2DA, 0x4EC0, 0xCAB2, 0x4EC1, 0xC8CA, 0x4EC2, 0xD8EC,
- 0x4EC3, 0xD8EA, 0x4EC4, 0xD8C6, 0x4EC5, 0xBDF6, 0x4EC6, 0xC6CD, 0x4EC7, 0xB3F0, 0x4EC8, 0x8194, 0x4EC9, 0xD8EB, 0x4ECA, 0xBDF1,
- 0x4ECB, 0xBDE9, 0x4ECC, 0x8195, 0x4ECD, 0xC8D4, 0x4ECE, 0xB4D3, 0x4ECF, 0x8196, 0x4ED0, 0x8197, 0x4ED1, 0xC2D8, 0x4ED2, 0x8198,
- 0x4ED3, 0xB2D6, 0x4ED4, 0xD7D0, 0x4ED5, 0xCACB, 0x4ED6, 0xCBFB, 0x4ED7, 0xD5CC, 0x4ED8, 0xB8B6, 0x4ED9, 0xCFC9, 0x4EDA, 0x8199,
- 0x4EDB, 0x819A, 0x4EDC, 0x819B, 0x4EDD, 0xD9DA, 0x4EDE, 0xD8F0, 0x4EDF, 0xC7AA, 0x4EE0, 0x819C, 0x4EE1, 0xD8EE, 0x4EE2, 0x819D,
- 0x4EE3, 0xB4FA, 0x4EE4, 0xC1EE, 0x4EE5, 0xD2D4, 0x4EE6, 0x819E, 0x4EE7, 0x819F, 0x4EE8, 0xD8ED, 0x4EE9, 0x81A0, 0x4EEA, 0xD2C7,
- 0x4EEB, 0xD8EF, 0x4EEC, 0xC3C7, 0x4EED, 0x81A1, 0x4EEE, 0x81A2, 0x4EEF, 0x81A3, 0x4EF0, 0xD1F6, 0x4EF1, 0x81A4, 0x4EF2, 0xD6D9,
- 0x4EF3, 0xD8F2, 0x4EF4, 0x81A5, 0x4EF5, 0xD8F5, 0x4EF6, 0xBCFE, 0x4EF7, 0xBCDB, 0x4EF8, 0x81A6, 0x4EF9, 0x81A7, 0x4EFA, 0x81A8,
- 0x4EFB, 0xC8CE, 0x4EFC, 0x81A9, 0x4EFD, 0xB7DD, 0x4EFE, 0x81AA, 0x4EFF, 0xB7C2, 0x4F00, 0x81AB, 0x4F01, 0xC6F3, 0x4F02, 0x81AC,
- 0x4F03, 0x81AD, 0x4F04, 0x81AE, 0x4F05, 0x81AF, 0x4F06, 0x81B0, 0x4F07, 0x81B1, 0x4F08, 0x81B2, 0x4F09, 0xD8F8, 0x4F0A, 0xD2C1,
- 0x4F0B, 0x81B3, 0x4F0C, 0x81B4, 0x4F0D, 0xCEE9, 0x4F0E, 0xBCBF, 0x4F0F, 0xB7FC, 0x4F10, 0xB7A5, 0x4F11, 0xD0DD, 0x4F12, 0x81B5,
- 0x4F13, 0x81B6, 0x4F14, 0x81B7, 0x4F15, 0x81B8, 0x4F16, 0x81B9, 0x4F17, 0xD6DA, 0x4F18, 0xD3C5, 0x4F19, 0xBBEF, 0x4F1A, 0xBBE1,
- 0x4F1B, 0xD8F1, 0x4F1C, 0x81BA, 0x4F1D, 0x81BB, 0x4F1E, 0xC9A1, 0x4F1F, 0xCEB0, 0x4F20, 0xB4AB, 0x4F21, 0x81BC, 0x4F22, 0xD8F3,
- 0x4F23, 0x81BD, 0x4F24, 0xC9CB, 0x4F25, 0xD8F6, 0x4F26, 0xC2D7, 0x4F27, 0xD8F7, 0x4F28, 0x81BE, 0x4F29, 0x81BF, 0x4F2A, 0xCEB1,
- 0x4F2B, 0xD8F9, 0x4F2C, 0x81C0, 0x4F2D, 0x81C1, 0x4F2E, 0x81C2, 0x4F2F, 0xB2AE, 0x4F30, 0xB9C0, 0x4F31, 0x81C3, 0x4F32, 0xD9A3,
- 0x4F33, 0x81C4, 0x4F34, 0xB0E9, 0x4F35, 0x81C5, 0x4F36, 0xC1E6, 0x4F37, 0x81C6, 0x4F38, 0xC9EC, 0x4F39, 0x81C7, 0x4F3A, 0xCBC5,
- 0x4F3B, 0x81C8, 0x4F3C, 0xCBC6, 0x4F3D, 0xD9A4, 0x4F3E, 0x81C9, 0x4F3F, 0x81CA, 0x4F40, 0x81CB, 0x4F41, 0x81CC, 0x4F42, 0x81CD,
- 0x4F43, 0xB5E8, 0x4F44, 0x81CE, 0x4F45, 0x81CF, 0x4F46, 0xB5AB, 0x4F47, 0x81D0, 0x4F48, 0x81D1, 0x4F49, 0x81D2, 0x4F4A, 0x81D3,
- 0x4F4B, 0x81D4, 0x4F4C, 0x81D5, 0x4F4D, 0xCEBB, 0x4F4E, 0xB5CD, 0x4F4F, 0xD7A1, 0x4F50, 0xD7F4, 0x4F51, 0xD3D3, 0x4F52, 0x81D6,
- 0x4F53, 0xCCE5, 0x4F54, 0x81D7, 0x4F55, 0xBACE, 0x4F56, 0x81D8, 0x4F57, 0xD9A2, 0x4F58, 0xD9DC, 0x4F59, 0xD3E0, 0x4F5A, 0xD8FD,
- 0x4F5B, 0xB7F0, 0x4F5C, 0xD7F7, 0x4F5D, 0xD8FE, 0x4F5E, 0xD8FA, 0x4F5F, 0xD9A1, 0x4F60, 0xC4E3, 0x4F61, 0x81D9, 0x4F62, 0x81DA,
- 0x4F63, 0xD3B6, 0x4F64, 0xD8F4, 0x4F65, 0xD9DD, 0x4F66, 0x81DB, 0x4F67, 0xD8FB, 0x4F68, 0x81DC, 0x4F69, 0xC5E5, 0x4F6A, 0x81DD,
- 0x4F6B, 0x81DE, 0x4F6C, 0xC0D0, 0x4F6D, 0x81DF, 0x4F6E, 0x81E0, 0x4F6F, 0xD1F0, 0x4F70, 0xB0DB, 0x4F71, 0x81E1, 0x4F72, 0x81E2,
- 0x4F73, 0xBCD1, 0x4F74, 0xD9A6, 0x4F75, 0x81E3, 0x4F76, 0xD9A5, 0x4F77, 0x81E4, 0x4F78, 0x81E5, 0x4F79, 0x81E6, 0x4F7A, 0x81E7,
- 0x4F7B, 0xD9AC, 0x4F7C, 0xD9AE, 0x4F7D, 0x81E8, 0x4F7E, 0xD9AB, 0x4F7F, 0xCAB9, 0x4F80, 0x81E9, 0x4F81, 0x81EA, 0x4F82, 0x81EB,
- 0x4F83, 0xD9A9, 0x4F84, 0xD6B6, 0x4F85, 0x81EC, 0x4F86, 0x81ED, 0x4F87, 0x81EE, 0x4F88, 0xB3DE, 0x4F89, 0xD9A8, 0x4F8A, 0x81EF,
- 0x4F8B, 0xC0FD, 0x4F8C, 0x81F0, 0x4F8D, 0xCACC, 0x4F8E, 0x81F1, 0x4F8F, 0xD9AA, 0x4F90, 0x81F2, 0x4F91, 0xD9A7, 0x4F92, 0x81F3,
- 0x4F93, 0x81F4, 0x4F94, 0xD9B0, 0x4F95, 0x81F5, 0x4F96, 0x81F6, 0x4F97, 0xB6B1, 0x4F98, 0x81F7, 0x4F99, 0x81F8, 0x4F9A, 0x81F9,
- 0x4F9B, 0xB9A9, 0x4F9C, 0x81FA, 0x4F9D, 0xD2C0, 0x4F9E, 0x81FB, 0x4F9F, 0x81FC, 0x4FA0, 0xCFC0, 0x4FA1, 0x81FD, 0x4FA2, 0x81FE,
- 0x4FA3, 0xC2C2, 0x4FA4, 0x8240, 0x4FA5, 0xBDC4, 0x4FA6, 0xD5EC, 0x4FA7, 0xB2E0, 0x4FA8, 0xC7C8, 0x4FA9, 0xBFEB, 0x4FAA, 0xD9AD,
- 0x4FAB, 0x8241, 0x4FAC, 0xD9AF, 0x4FAD, 0x8242, 0x4FAE, 0xCEEA, 0x4FAF, 0xBAEE, 0x4FB0, 0x8243, 0x4FB1, 0x8244, 0x4FB2, 0x8245,
- 0x4FB3, 0x8246, 0x4FB4, 0x8247, 0x4FB5, 0xC7D6, 0x4FB6, 0x8248, 0x4FB7, 0x8249, 0x4FB8, 0x824A, 0x4FB9, 0x824B, 0x4FBA, 0x824C,
- 0x4FBB, 0x824D, 0x4FBC, 0x824E, 0x4FBD, 0x824F, 0x4FBE, 0x8250, 0x4FBF, 0xB1E3, 0x4FC0, 0x8251, 0x4FC1, 0x8252, 0x4FC2, 0x8253,
- 0x4FC3, 0xB4D9, 0x4FC4, 0xB6ED, 0x4FC5, 0xD9B4, 0x4FC6, 0x8254, 0x4FC7, 0x8255, 0x4FC8, 0x8256, 0x4FC9, 0x8257, 0x4FCA, 0xBFA1,
- 0x4FCB, 0x8258, 0x4FCC, 0x8259, 0x4FCD, 0x825A, 0x4FCE, 0xD9DE, 0x4FCF, 0xC7CE, 0x4FD0, 0xC0FE, 0x4FD1, 0xD9B8, 0x4FD2, 0x825B,
- 0x4FD3, 0x825C, 0x4FD4, 0x825D, 0x4FD5, 0x825E, 0x4FD6, 0x825F, 0x4FD7, 0xCBD7, 0x4FD8, 0xB7FD, 0x4FD9, 0x8260, 0x4FDA, 0xD9B5,
- 0x4FDB, 0x8261, 0x4FDC, 0xD9B7, 0x4FDD, 0xB1A3, 0x4FDE, 0xD3E1, 0x4FDF, 0xD9B9, 0x4FE0, 0x8262, 0x4FE1, 0xD0C5, 0x4FE2, 0x8263,
- 0x4FE3, 0xD9B6, 0x4FE4, 0x8264, 0x4FE5, 0x8265, 0x4FE6, 0xD9B1, 0x4FE7, 0x8266, 0x4FE8, 0xD9B2, 0x4FE9, 0xC1A9, 0x4FEA, 0xD9B3,
- 0x4FEB, 0x8267, 0x4FEC, 0x8268, 0x4FED, 0xBCF3, 0x4FEE, 0xD0DE, 0x4FEF, 0xB8A9, 0x4FF0, 0x8269, 0x4FF1, 0xBEE3, 0x4FF2, 0x826A,
- 0x4FF3, 0xD9BD, 0x4FF4, 0x826B, 0x4FF5, 0x826C, 0x4FF6, 0x826D, 0x4FF7, 0x826E, 0x4FF8, 0xD9BA, 0x4FF9, 0x826F, 0x4FFA, 0xB0B3,
- 0x4FFB, 0x8270, 0x4FFC, 0x8271, 0x4FFD, 0x8272, 0x4FFE, 0xD9C2, 0x4FFF, 0x8273, 0x5000, 0x8274, 0x5001, 0x8275, 0x5002, 0x8276,
- 0x5003, 0x8277, 0x5004, 0x8278, 0x5005, 0x8279, 0x5006, 0x827A, 0x5007, 0x827B, 0x5008, 0x827C, 0x5009, 0x827D, 0x500A, 0x827E,
- 0x500B, 0x8280, 0x500C, 0xD9C4, 0x500D, 0xB1B6, 0x500E, 0x8281, 0x500F, 0xD9BF, 0x5010, 0x8282, 0x5011, 0x8283, 0x5012, 0xB5B9,
- 0x5013, 0x8284, 0x5014, 0xBEF3, 0x5015, 0x8285, 0x5016, 0x8286, 0x5017, 0x8287, 0x5018, 0xCCC8, 0x5019, 0xBAF2, 0x501A, 0xD2D0,
- 0x501B, 0x8288, 0x501C, 0xD9C3, 0x501D, 0x8289, 0x501E, 0x828A, 0x501F, 0xBDE8, 0x5020, 0x828B, 0x5021, 0xB3AB, 0x5022, 0x828C,
- 0x5023, 0x828D, 0x5024, 0x828E, 0x5025, 0xD9C5, 0x5026, 0xBEEB, 0x5027, 0x828F, 0x5028, 0xD9C6, 0x5029, 0xD9BB, 0x502A, 0xC4DF,
- 0x502B, 0x8290, 0x502C, 0xD9BE, 0x502D, 0xD9C1, 0x502E, 0xD9C0, 0x502F, 0x8291, 0x5030, 0x8292, 0x5031, 0x8293, 0x5032, 0x8294,
- 0x5033, 0x8295, 0x5034, 0x8296, 0x5035, 0x8297, 0x5036, 0x8298, 0x5037, 0x8299, 0x5038, 0x829A, 0x5039, 0x829B, 0x503A, 0xD5AE,
- 0x503B, 0x829C, 0x503C, 0xD6B5, 0x503D, 0x829D, 0x503E, 0xC7E3, 0x503F, 0x829E, 0x5040, 0x829F, 0x5041, 0x82A0, 0x5042, 0x82A1,
- 0x5043, 0xD9C8, 0x5044, 0x82A2, 0x5045, 0x82A3, 0x5046, 0x82A4, 0x5047, 0xBCD9, 0x5048, 0xD9CA, 0x5049, 0x82A5, 0x504A, 0x82A6,
- 0x504B, 0x82A7, 0x504C, 0xD9BC, 0x504D, 0x82A8, 0x504E, 0xD9CB, 0x504F, 0xC6AB, 0x5050, 0x82A9, 0x5051, 0x82AA, 0x5052, 0x82AB,
- 0x5053, 0x82AC, 0x5054, 0x82AD, 0x5055, 0xD9C9, 0x5056, 0x82AE, 0x5057, 0x82AF, 0x5058, 0x82B0, 0x5059, 0x82B1, 0x505A, 0xD7F6,
- 0x505B, 0x82B2, 0x505C, 0xCDA3, 0x505D, 0x82B3, 0x505E, 0x82B4, 0x505F, 0x82B5, 0x5060, 0x82B6, 0x5061, 0x82B7, 0x5062, 0x82B8,
- 0x5063, 0x82B9, 0x5064, 0x82BA, 0x5065, 0xBDA1, 0x5066, 0x82BB, 0x5067, 0x82BC, 0x5068, 0x82BD, 0x5069, 0x82BE, 0x506A, 0x82BF,
- 0x506B, 0x82C0, 0x506C, 0xD9CC, 0x506D, 0x82C1, 0x506E, 0x82C2, 0x506F, 0x82C3, 0x5070, 0x82C4, 0x5071, 0x82C5, 0x5072, 0x82C6,
- 0x5073, 0x82C7, 0x5074, 0x82C8, 0x5075, 0x82C9, 0x5076, 0xC5BC, 0x5077, 0xCDB5, 0x5078, 0x82CA, 0x5079, 0x82CB, 0x507A, 0x82CC,
- 0x507B, 0xD9CD, 0x507C, 0x82CD, 0x507D, 0x82CE, 0x507E, 0xD9C7, 0x507F, 0xB3A5, 0x5080, 0xBFFE, 0x5081, 0x82CF, 0x5082, 0x82D0,
- 0x5083, 0x82D1, 0x5084, 0x82D2, 0x5085, 0xB8B5, 0x5086, 0x82D3, 0x5087, 0x82D4, 0x5088, 0xC0FC, 0x5089, 0x82D5, 0x508A, 0x82D6,
- 0x508B, 0x82D7, 0x508C, 0x82D8, 0x508D, 0xB0F8, 0x508E, 0x82D9, 0x508F, 0x82DA, 0x5090, 0x82DB, 0x5091, 0x82DC, 0x5092, 0x82DD,
- 0x5093, 0x82DE, 0x5094, 0x82DF, 0x5095, 0x82E0, 0x5096, 0x82E1, 0x5097, 0x82E2, 0x5098, 0x82E3, 0x5099, 0x82E4, 0x509A, 0x82E5,
- 0x509B, 0x82E6, 0x509C, 0x82E7, 0x509D, 0x82E8, 0x509E, 0x82E9, 0x509F, 0x82EA, 0x50A0, 0x82EB, 0x50A1, 0x82EC, 0x50A2, 0x82ED,
- 0x50A3, 0xB4F6, 0x50A4, 0x82EE, 0x50A5, 0xD9CE, 0x50A6, 0x82EF, 0x50A7, 0xD9CF, 0x50A8, 0xB4A2, 0x50A9, 0xD9D0, 0x50AA, 0x82F0,
- 0x50AB, 0x82F1, 0x50AC, 0xB4DF, 0x50AD, 0x82F2, 0x50AE, 0x82F3, 0x50AF, 0x82F4, 0x50B0, 0x82F5, 0x50B1, 0x82F6, 0x50B2, 0xB0C1,
- 0x50B3, 0x82F7, 0x50B4, 0x82F8, 0x50B5, 0x82F9, 0x50B6, 0x82FA, 0x50B7, 0x82FB, 0x50B8, 0x82FC, 0x50B9, 0x82FD, 0x50BA, 0xD9D1,
- 0x50BB, 0xC9B5, 0x50BC, 0x82FE, 0x50BD, 0x8340, 0x50BE, 0x8341, 0x50BF, 0x8342, 0x50C0, 0x8343, 0x50C1, 0x8344, 0x50C2, 0x8345,
- 0x50C3, 0x8346, 0x50C4, 0x8347, 0x50C5, 0x8348, 0x50C6, 0x8349, 0x50C7, 0x834A, 0x50C8, 0x834B, 0x50C9, 0x834C, 0x50CA, 0x834D,
- 0x50CB, 0x834E, 0x50CC, 0x834F, 0x50CD, 0x8350, 0x50CE, 0x8351, 0x50CF, 0xCFF1, 0x50D0, 0x8352, 0x50D1, 0x8353, 0x50D2, 0x8354,
- 0x50D3, 0x8355, 0x50D4, 0x8356, 0x50D5, 0x8357, 0x50D6, 0xD9D2, 0x50D7, 0x8358, 0x50D8, 0x8359, 0x50D9, 0x835A, 0x50DA, 0xC1C5,
- 0x50DB, 0x835B, 0x50DC, 0x835C, 0x50DD, 0x835D, 0x50DE, 0x835E, 0x50DF, 0x835F, 0x50E0, 0x8360, 0x50E1, 0x8361, 0x50E2, 0x8362,
- 0x50E3, 0x8363, 0x50E4, 0x8364, 0x50E5, 0x8365, 0x50E6, 0xD9D6, 0x50E7, 0xC9AE, 0x50E8, 0x8366, 0x50E9, 0x8367, 0x50EA, 0x8368,
- 0x50EB, 0x8369, 0x50EC, 0xD9D5, 0x50ED, 0xD9D4, 0x50EE, 0xD9D7, 0x50EF, 0x836A, 0x50F0, 0x836B, 0x50F1, 0x836C, 0x50F2, 0x836D,
- 0x50F3, 0xCBDB, 0x50F4, 0x836E, 0x50F5, 0xBDA9, 0x50F6, 0x836F, 0x50F7, 0x8370, 0x50F8, 0x8371, 0x50F9, 0x8372, 0x50FA, 0x8373,
- 0x50FB, 0xC6A7, 0x50FC, 0x8374, 0x50FD, 0x8375, 0x50FE, 0x8376, 0x50FF, 0x8377, 0x5100, 0x8378, 0x5101, 0x8379, 0x5102, 0x837A,
- 0x5103, 0x837B, 0x5104, 0x837C, 0x5105, 0x837D, 0x5106, 0xD9D3, 0x5107, 0xD9D8, 0x5108, 0x837E, 0x5109, 0x8380, 0x510A, 0x8381,
- 0x510B, 0xD9D9, 0x510C, 0x8382, 0x510D, 0x8383, 0x510E, 0x8384, 0x510F, 0x8385, 0x5110, 0x8386, 0x5111, 0x8387, 0x5112, 0xC8E5,
- 0x5113, 0x8388, 0x5114, 0x8389, 0x5115, 0x838A, 0x5116, 0x838B, 0x5117, 0x838C, 0x5118, 0x838D, 0x5119, 0x838E, 0x511A, 0x838F,
- 0x511B, 0x8390, 0x511C, 0x8391, 0x511D, 0x8392, 0x511E, 0x8393, 0x511F, 0x8394, 0x5120, 0x8395, 0x5121, 0xC0DC, 0x5122, 0x8396,
- 0x5123, 0x8397, 0x5124, 0x8398, 0x5125, 0x8399, 0x5126, 0x839A, 0x5127, 0x839B, 0x5128, 0x839C, 0x5129, 0x839D, 0x512A, 0x839E,
- 0x512B, 0x839F, 0x512C, 0x83A0, 0x512D, 0x83A1, 0x512E, 0x83A2, 0x512F, 0x83A3, 0x5130, 0x83A4, 0x5131, 0x83A5, 0x5132, 0x83A6,
- 0x5133, 0x83A7, 0x5134, 0x83A8, 0x5135, 0x83A9, 0x5136, 0x83AA, 0x5137, 0x83AB, 0x5138, 0x83AC, 0x5139, 0x83AD, 0x513A, 0x83AE,
- 0x513B, 0x83AF, 0x513C, 0x83B0, 0x513D, 0x83B1, 0x513E, 0x83B2, 0x513F, 0xB6F9, 0x5140, 0xD8A3, 0x5141, 0xD4CA, 0x5142, 0x83B3,
- 0x5143, 0xD4AA, 0x5144, 0xD0D6, 0x5145, 0xB3E4, 0x5146, 0xD5D7, 0x5147, 0x83B4, 0x5148, 0xCFC8, 0x5149, 0xB9E2, 0x514A, 0x83B5,
- 0x514B, 0xBFCB, 0x514C, 0x83B6, 0x514D, 0xC3E2, 0x514E, 0x83B7, 0x514F, 0x83B8, 0x5150, 0x83B9, 0x5151, 0xB6D2, 0x5152, 0x83BA,
- 0x5153, 0x83BB, 0x5154, 0xCDC3, 0x5155, 0xD9EE, 0x5156, 0xD9F0, 0x5157, 0x83BC, 0x5158, 0x83BD, 0x5159, 0x83BE, 0x515A, 0xB5B3,
- 0x515B, 0x83BF, 0x515C, 0xB6B5, 0x515D, 0x83C0, 0x515E, 0x83C1, 0x515F, 0x83C2, 0x5160, 0x83C3, 0x5161, 0x83C4, 0x5162, 0xBEA4,
- 0x5163, 0x83C5, 0x5164, 0x83C6, 0x5165, 0xC8EB, 0x5166, 0x83C7, 0x5167, 0x83C8, 0x5168, 0xC8AB, 0x5169, 0x83C9, 0x516A, 0x83CA,
- 0x516B, 0xB0CB, 0x516C, 0xB9AB, 0x516D, 0xC1F9, 0x516E, 0xD9E2, 0x516F, 0x83CB, 0x5170, 0xC0BC, 0x5171, 0xB9B2, 0x5172, 0x83CC,
- 0x5173, 0xB9D8, 0x5174, 0xD0CB, 0x5175, 0xB1F8, 0x5176, 0xC6E4, 0x5177, 0xBEDF, 0x5178, 0xB5E4, 0x5179, 0xD7C8, 0x517A, 0x83CD,
- 0x517B, 0xD1F8, 0x517C, 0xBCE6, 0x517D, 0xCADE, 0x517E, 0x83CE, 0x517F, 0x83CF, 0x5180, 0xBCBD, 0x5181, 0xD9E6, 0x5182, 0xD8E7,
- 0x5183, 0x83D0, 0x5184, 0x83D1, 0x5185, 0xC4DA, 0x5186, 0x83D2, 0x5187, 0x83D3, 0x5188, 0xB8D4, 0x5189, 0xC8BD, 0x518A, 0x83D4,
- 0x518B, 0x83D5, 0x518C, 0xB2E1, 0x518D, 0xD4D9, 0x518E, 0x83D6, 0x518F, 0x83D7, 0x5190, 0x83D8, 0x5191, 0x83D9, 0x5192, 0xC3B0,
- 0x5193, 0x83DA, 0x5194, 0x83DB, 0x5195, 0xC3E1, 0x5196, 0xDAA2, 0x5197, 0xC8DF, 0x5198, 0x83DC, 0x5199, 0xD0B4, 0x519A, 0x83DD,
- 0x519B, 0xBEFC, 0x519C, 0xC5A9, 0x519D, 0x83DE, 0x519E, 0x83DF, 0x519F, 0x83E0, 0x51A0, 0xB9DA, 0x51A1, 0x83E1, 0x51A2, 0xDAA3,
- 0x51A3, 0x83E2, 0x51A4, 0xD4A9, 0x51A5, 0xDAA4, 0x51A6, 0x83E3, 0x51A7, 0x83E4, 0x51A8, 0x83E5, 0x51A9, 0x83E6, 0x51AA, 0x83E7,
- 0x51AB, 0xD9FB, 0x51AC, 0xB6AC, 0x51AD, 0x83E8, 0x51AE, 0x83E9, 0x51AF, 0xB7EB, 0x51B0, 0xB1F9, 0x51B1, 0xD9FC, 0x51B2, 0xB3E5,
- 0x51B3, 0xBEF6, 0x51B4, 0x83EA, 0x51B5, 0xBFF6, 0x51B6, 0xD2B1, 0x51B7, 0xC0E4, 0x51B8, 0x83EB, 0x51B9, 0x83EC, 0x51BA, 0x83ED,
- 0x51BB, 0xB6B3, 0x51BC, 0xD9FE, 0x51BD, 0xD9FD, 0x51BE, 0x83EE, 0x51BF, 0x83EF, 0x51C0, 0xBEBB, 0x51C1, 0x83F0, 0x51C2, 0x83F1,
- 0x51C3, 0x83F2, 0x51C4, 0xC6E0, 0x51C5, 0x83F3, 0x51C6, 0xD7BC, 0x51C7, 0xDAA1, 0x51C8, 0x83F4, 0x51C9, 0xC1B9, 0x51CA, 0x83F5,
- 0x51CB, 0xB5F2, 0x51CC, 0xC1E8, 0x51CD, 0x83F6, 0x51CE, 0x83F7, 0x51CF, 0xBCF5, 0x51D0, 0x83F8, 0x51D1, 0xB4D5, 0x51D2, 0x83F9,
- 0x51D3, 0x83FA, 0x51D4, 0x83FB, 0x51D5, 0x83FC, 0x51D6, 0x83FD, 0x51D7, 0x83FE, 0x51D8, 0x8440, 0x51D9, 0x8441, 0x51DA, 0x8442,
- 0x51DB, 0xC1DD, 0x51DC, 0x8443, 0x51DD, 0xC4FD, 0x51DE, 0x8444, 0x51DF, 0x8445, 0x51E0, 0xBCB8, 0x51E1, 0xB7B2, 0x51E2, 0x8446,
- 0x51E3, 0x8447, 0x51E4, 0xB7EF, 0x51E5, 0x8448, 0x51E6, 0x8449, 0x51E7, 0x844A, 0x51E8, 0x844B, 0x51E9, 0x844C, 0x51EA, 0x844D,
- 0x51EB, 0xD9EC, 0x51EC, 0x844E, 0x51ED, 0xC6BE, 0x51EE, 0x844F, 0x51EF, 0xBFAD, 0x51F0, 0xBBCB, 0x51F1, 0x8450, 0x51F2, 0x8451,
- 0x51F3, 0xB5CA, 0x51F4, 0x8452, 0x51F5, 0xDBC9, 0x51F6, 0xD0D7, 0x51F7, 0x8453, 0x51F8, 0xCDB9, 0x51F9, 0xB0BC, 0x51FA, 0xB3F6,
- 0x51FB, 0xBBF7, 0x51FC, 0xDBCA, 0x51FD, 0xBAAF, 0x51FE, 0x8454, 0x51FF, 0xD4E4, 0x5200, 0xB5B6, 0x5201, 0xB5F3, 0x5202, 0xD8D6,
- 0x5203, 0xC8D0, 0x5204, 0x8455, 0x5205, 0x8456, 0x5206, 0xB7D6, 0x5207, 0xC7D0, 0x5208, 0xD8D7, 0x5209, 0x8457, 0x520A, 0xBFAF,
- 0x520B, 0x8458, 0x520C, 0x8459, 0x520D, 0xDBBB, 0x520E, 0xD8D8, 0x520F, 0x845A, 0x5210, 0x845B, 0x5211, 0xD0CC, 0x5212, 0xBBAE,
- 0x5213, 0x845C, 0x5214, 0x845D, 0x5215, 0x845E, 0x5216, 0xEBBE, 0x5217, 0xC1D0, 0x5218, 0xC1F5, 0x5219, 0xD4F2, 0x521A, 0xB8D5,
- 0x521B, 0xB4B4, 0x521C, 0x845F, 0x521D, 0xB3F5, 0x521E, 0x8460, 0x521F, 0x8461, 0x5220, 0xC9BE, 0x5221, 0x8462, 0x5222, 0x8463,
- 0x5223, 0x8464, 0x5224, 0xC5D0, 0x5225, 0x8465, 0x5226, 0x8466, 0x5227, 0x8467, 0x5228, 0xC5D9, 0x5229, 0xC0FB, 0x522A, 0x8468,
- 0x522B, 0xB1F0, 0x522C, 0x8469, 0x522D, 0xD8D9, 0x522E, 0xB9CE, 0x522F, 0x846A, 0x5230, 0xB5BD, 0x5231, 0x846B, 0x5232, 0x846C,
- 0x5233, 0xD8DA, 0x5234, 0x846D, 0x5235, 0x846E, 0x5236, 0xD6C6, 0x5237, 0xCBA2, 0x5238, 0xC8AF, 0x5239, 0xC9B2, 0x523A, 0xB4CC,
- 0x523B, 0xBFCC, 0x523C, 0x846F, 0x523D, 0xB9F4, 0x523E, 0x8470, 0x523F, 0xD8DB, 0x5240, 0xD8DC, 0x5241, 0xB6E7, 0x5242, 0xBCC1,
- 0x5243, 0xCCEA, 0x5244, 0x8471, 0x5245, 0x8472, 0x5246, 0x8473, 0x5247, 0x8474, 0x5248, 0x8475, 0x5249, 0x8476, 0x524A, 0xCFF7,
- 0x524B, 0x8477, 0x524C, 0xD8DD, 0x524D, 0xC7B0, 0x524E, 0x8478, 0x524F, 0x8479, 0x5250, 0xB9D0, 0x5251, 0xBDA3, 0x5252, 0x847A,
- 0x5253, 0x847B, 0x5254, 0xCCDE, 0x5255, 0x847C, 0x5256, 0xC6CA, 0x5257, 0x847D, 0x5258, 0x847E, 0x5259, 0x8480, 0x525A, 0x8481,
- 0x525B, 0x8482, 0x525C, 0xD8E0, 0x525D, 0x8483, 0x525E, 0xD8DE, 0x525F, 0x8484, 0x5260, 0x8485, 0x5261, 0xD8DF, 0x5262, 0x8486,
- 0x5263, 0x8487, 0x5264, 0x8488, 0x5265, 0xB0FE, 0x5266, 0x8489, 0x5267, 0xBEE7, 0x5268, 0x848A, 0x5269, 0xCAA3, 0x526A, 0xBCF4,
- 0x526B, 0x848B, 0x526C, 0x848C, 0x526D, 0x848D, 0x526E, 0x848E, 0x526F, 0xB8B1, 0x5270, 0x848F, 0x5271, 0x8490, 0x5272, 0xB8EE,
- 0x5273, 0x8491, 0x5274, 0x8492, 0x5275, 0x8493, 0x5276, 0x8494, 0x5277, 0x8495, 0x5278, 0x8496, 0x5279, 0x8497, 0x527A, 0x8498,
- 0x527B, 0x8499, 0x527C, 0x849A, 0x527D, 0xD8E2, 0x527E, 0x849B, 0x527F, 0xBDCB, 0x5280, 0x849C, 0x5281, 0xD8E4, 0x5282, 0xD8E3,
- 0x5283, 0x849D, 0x5284, 0x849E, 0x5285, 0x849F, 0x5286, 0x84A0, 0x5287, 0x84A1, 0x5288, 0xC5FC, 0x5289, 0x84A2, 0x528A, 0x84A3,
- 0x528B, 0x84A4, 0x528C, 0x84A5, 0x528D, 0x84A6, 0x528E, 0x84A7, 0x528F, 0x84A8, 0x5290, 0xD8E5, 0x5291, 0x84A9, 0x5292, 0x84AA,
- 0x5293, 0xD8E6, 0x5294, 0x84AB, 0x5295, 0x84AC, 0x5296, 0x84AD, 0x5297, 0x84AE, 0x5298, 0x84AF, 0x5299, 0x84B0, 0x529A, 0x84B1,
- 0x529B, 0xC1A6, 0x529C, 0x84B2, 0x529D, 0xC8B0, 0x529E, 0xB0EC, 0x529F, 0xB9A6, 0x52A0, 0xBCD3, 0x52A1, 0xCEF1, 0x52A2, 0xDBBD,
- 0x52A3, 0xC1D3, 0x52A4, 0x84B3, 0x52A5, 0x84B4, 0x52A6, 0x84B5, 0x52A7, 0x84B6, 0x52A8, 0xB6AF, 0x52A9, 0xD6FA, 0x52AA, 0xC5AC,
- 0x52AB, 0xBDD9, 0x52AC, 0xDBBE, 0x52AD, 0xDBBF, 0x52AE, 0x84B7, 0x52AF, 0x84B8, 0x52B0, 0x84B9, 0x52B1, 0xC0F8, 0x52B2, 0xBEA2,
- 0x52B3, 0xC0CD, 0x52B4, 0x84BA, 0x52B5, 0x84BB, 0x52B6, 0x84BC, 0x52B7, 0x84BD, 0x52B8, 0x84BE, 0x52B9, 0x84BF, 0x52BA, 0x84C0,
- 0x52BB, 0x84C1, 0x52BC, 0x84C2, 0x52BD, 0x84C3, 0x52BE, 0xDBC0, 0x52BF, 0xCAC6, 0x52C0, 0x84C4, 0x52C1, 0x84C5, 0x52C2, 0x84C6,
- 0x52C3, 0xB2AA, 0x52C4, 0x84C7, 0x52C5, 0x84C8, 0x52C6, 0x84C9, 0x52C7, 0xD3C2, 0x52C8, 0x84CA, 0x52C9, 0xC3E3, 0x52CA, 0x84CB,
- 0x52CB, 0xD1AB, 0x52CC, 0x84CC, 0x52CD, 0x84CD, 0x52CE, 0x84CE, 0x52CF, 0x84CF, 0x52D0, 0xDBC2, 0x52D1, 0x84D0, 0x52D2, 0xC0D5,
- 0x52D3, 0x84D1, 0x52D4, 0x84D2, 0x52D5, 0x84D3, 0x52D6, 0xDBC3, 0x52D7, 0x84D4, 0x52D8, 0xBFB1, 0x52D9, 0x84D5, 0x52DA, 0x84D6,
- 0x52DB, 0x84D7, 0x52DC, 0x84D8, 0x52DD, 0x84D9, 0x52DE, 0x84DA, 0x52DF, 0xC4BC, 0x52E0, 0x84DB, 0x52E1, 0x84DC, 0x52E2, 0x84DD,
- 0x52E3, 0x84DE, 0x52E4, 0xC7DA, 0x52E5, 0x84DF, 0x52E6, 0x84E0, 0x52E7, 0x84E1, 0x52E8, 0x84E2, 0x52E9, 0x84E3, 0x52EA, 0x84E4,
- 0x52EB, 0x84E5, 0x52EC, 0x84E6, 0x52ED, 0x84E7, 0x52EE, 0x84E8, 0x52EF, 0x84E9, 0x52F0, 0xDBC4, 0x52F1, 0x84EA, 0x52F2, 0x84EB,
- 0x52F3, 0x84EC, 0x52F4, 0x84ED, 0x52F5, 0x84EE, 0x52F6, 0x84EF, 0x52F7, 0x84F0, 0x52F8, 0x84F1, 0x52F9, 0xD9E8, 0x52FA, 0xC9D7,
- 0x52FB, 0x84F2, 0x52FC, 0x84F3, 0x52FD, 0x84F4, 0x52FE, 0xB9B4, 0x52FF, 0xCEF0, 0x5300, 0xD4C8, 0x5301, 0x84F5, 0x5302, 0x84F6,
- 0x5303, 0x84F7, 0x5304, 0x84F8, 0x5305, 0xB0FC, 0x5306, 0xB4D2, 0x5307, 0x84F9, 0x5308, 0xD0D9, 0x5309, 0x84FA, 0x530A, 0x84FB,
- 0x530B, 0x84FC, 0x530C, 0x84FD, 0x530D, 0xD9E9, 0x530E, 0x84FE, 0x530F, 0xDECB, 0x5310, 0xD9EB, 0x5311, 0x8540, 0x5312, 0x8541,
- 0x5313, 0x8542, 0x5314, 0x8543, 0x5315, 0xD8B0, 0x5316, 0xBBAF, 0x5317, 0xB1B1, 0x5318, 0x8544, 0x5319, 0xB3D7, 0x531A, 0xD8CE,
- 0x531B, 0x8545, 0x531C, 0x8546, 0x531D, 0xD4D1, 0x531E, 0x8547, 0x531F, 0x8548, 0x5320, 0xBDB3, 0x5321, 0xBFEF, 0x5322, 0x8549,
- 0x5323, 0xCFBB, 0x5324, 0x854A, 0x5325, 0x854B, 0x5326, 0xD8D0, 0x5327, 0x854C, 0x5328, 0x854D, 0x5329, 0x854E, 0x532A, 0xB7CB,
- 0x532B, 0x854F, 0x532C, 0x8550, 0x532D, 0x8551, 0x532E, 0xD8D1, 0x532F, 0x8552, 0x5330, 0x8553, 0x5331, 0x8554, 0x5332, 0x8555,
- 0x5333, 0x8556, 0x5334, 0x8557, 0x5335, 0x8558, 0x5336, 0x8559, 0x5337, 0x855A, 0x5338, 0x855B, 0x5339, 0xC6A5, 0x533A, 0xC7F8,
- 0x533B, 0xD2BD, 0x533C, 0x855C, 0x533D, 0x855D, 0x533E, 0xD8D2, 0x533F, 0xC4E4, 0x5340, 0x855E, 0x5341, 0xCAAE, 0x5342, 0x855F,
- 0x5343, 0xC7A7, 0x5344, 0x8560, 0x5345, 0xD8A6, 0x5346, 0x8561, 0x5347, 0xC9FD, 0x5348, 0xCEE7, 0x5349, 0xBBDC, 0x534A, 0xB0EB,
- 0x534B, 0x8562, 0x534C, 0x8563, 0x534D, 0x8564, 0x534E, 0xBBAA, 0x534F, 0xD0AD, 0x5350, 0x8565, 0x5351, 0xB1B0, 0x5352, 0xD7E4,
- 0x5353, 0xD7BF, 0x5354, 0x8566, 0x5355, 0xB5A5, 0x5356, 0xC2F4, 0x5357, 0xC4CF, 0x5358, 0x8567, 0x5359, 0x8568, 0x535A, 0xB2A9,
- 0x535B, 0x8569, 0x535C, 0xB2B7, 0x535D, 0x856A, 0x535E, 0xB1E5, 0x535F, 0xDFB2, 0x5360, 0xD5BC, 0x5361, 0xBFA8, 0x5362, 0xC2AC,
- 0x5363, 0xD8D5, 0x5364, 0xC2B1, 0x5365, 0x856B, 0x5366, 0xD8D4, 0x5367, 0xCED4, 0x5368, 0x856C, 0x5369, 0xDAE0, 0x536A, 0x856D,
- 0x536B, 0xCEC0, 0x536C, 0x856E, 0x536D, 0x856F, 0x536E, 0xD8B4, 0x536F, 0xC3AE, 0x5370, 0xD3A1, 0x5371, 0xCEA3, 0x5372, 0x8570,
- 0x5373, 0xBCB4, 0x5374, 0xC8B4, 0x5375, 0xC2D1, 0x5376, 0x8571, 0x5377, 0xBEED, 0x5378, 0xD0B6, 0x5379, 0x8572, 0x537A, 0xDAE1,
- 0x537B, 0x8573, 0x537C, 0x8574, 0x537D, 0x8575, 0x537E, 0x8576, 0x537F, 0xC7E4, 0x5380, 0x8577, 0x5381, 0x8578, 0x5382, 0xB3A7,
- 0x5383, 0x8579, 0x5384, 0xB6F2, 0x5385, 0xCCFC, 0x5386, 0xC0FA, 0x5387, 0x857A, 0x5388, 0x857B, 0x5389, 0xC0F7, 0x538A, 0x857C,
- 0x538B, 0xD1B9, 0x538C, 0xD1E1, 0x538D, 0xD8C7, 0x538E, 0x857D, 0x538F, 0x857E, 0x5390, 0x8580, 0x5391, 0x8581, 0x5392, 0x8582,
- 0x5393, 0x8583, 0x5394, 0x8584, 0x5395, 0xB2DE, 0x5396, 0x8585, 0x5397, 0x8586, 0x5398, 0xC0E5, 0x5399, 0x8587, 0x539A, 0xBAF1,
- 0x539B, 0x8588, 0x539C, 0x8589, 0x539D, 0xD8C8, 0x539E, 0x858A, 0x539F, 0xD4AD, 0x53A0, 0x858B, 0x53A1, 0x858C, 0x53A2, 0xCFE1,
- 0x53A3, 0xD8C9, 0x53A4, 0x858D, 0x53A5, 0xD8CA, 0x53A6, 0xCFC3, 0x53A7, 0x858E, 0x53A8, 0xB3F8, 0x53A9, 0xBEC7, 0x53AA, 0x858F,
- 0x53AB, 0x8590, 0x53AC, 0x8591, 0x53AD, 0x8592, 0x53AE, 0xD8CB, 0x53AF, 0x8593, 0x53B0, 0x8594, 0x53B1, 0x8595, 0x53B2, 0x8596,
- 0x53B3, 0x8597, 0x53B4, 0x8598, 0x53B5, 0x8599, 0x53B6, 0xDBCC, 0x53B7, 0x859A, 0x53B8, 0x859B, 0x53B9, 0x859C, 0x53BA, 0x859D,
- 0x53BB, 0xC8A5, 0x53BC, 0x859E, 0x53BD, 0x859F, 0x53BE, 0x85A0, 0x53BF, 0xCFD8, 0x53C0, 0x85A1, 0x53C1, 0xC8FE, 0x53C2, 0xB2CE,
- 0x53C3, 0x85A2, 0x53C4, 0x85A3, 0x53C5, 0x85A4, 0x53C6, 0x85A5, 0x53C7, 0x85A6, 0x53C8, 0xD3D6, 0x53C9, 0xB2E6, 0x53CA, 0xBCB0,
- 0x53CB, 0xD3D1, 0x53CC, 0xCBAB, 0x53CD, 0xB7B4, 0x53CE, 0x85A7, 0x53CF, 0x85A8, 0x53D0, 0x85A9, 0x53D1, 0xB7A2, 0x53D2, 0x85AA,
- 0x53D3, 0x85AB, 0x53D4, 0xCAE5, 0x53D5, 0x85AC, 0x53D6, 0xC8A1, 0x53D7, 0xCADC, 0x53D8, 0xB1E4, 0x53D9, 0xD0F0, 0x53DA, 0x85AD,
- 0x53DB, 0xC5D1, 0x53DC, 0x85AE, 0x53DD, 0x85AF, 0x53DE, 0x85B0, 0x53DF, 0xDBC5, 0x53E0, 0xB5FE, 0x53E1, 0x85B1, 0x53E2, 0x85B2,
- 0x53E3, 0xBFDA, 0x53E4, 0xB9C5, 0x53E5, 0xBEE4, 0x53E6, 0xC1ED, 0x53E7, 0x85B3, 0x53E8, 0xDFB6, 0x53E9, 0xDFB5, 0x53EA, 0xD6BB,
- 0x53EB, 0xBDD0, 0x53EC, 0xD5D9, 0x53ED, 0xB0C8, 0x53EE, 0xB6A3, 0x53EF, 0xBFC9, 0x53F0, 0xCCA8, 0x53F1, 0xDFB3, 0x53F2, 0xCAB7,
- 0x53F3, 0xD3D2, 0x53F4, 0x85B4, 0x53F5, 0xD8CF, 0x53F6, 0xD2B6, 0x53F7, 0xBAC5, 0x53F8, 0xCBBE, 0x53F9, 0xCCBE, 0x53FA, 0x85B5,
- 0x53FB, 0xDFB7, 0x53FC, 0xB5F0, 0x53FD, 0xDFB4, 0x53FE, 0x85B6, 0x53FF, 0x85B7, 0x5400, 0x85B8, 0x5401, 0xD3F5, 0x5402, 0x85B9,
- 0x5403, 0xB3D4, 0x5404, 0xB8F7, 0x5405, 0x85BA, 0x5406, 0xDFBA, 0x5407, 0x85BB, 0x5408, 0xBACF, 0x5409, 0xBCAA, 0x540A, 0xB5F5,
- 0x540B, 0x85BC, 0x540C, 0xCDAC, 0x540D, 0xC3FB, 0x540E, 0xBAF3, 0x540F, 0xC0F4, 0x5410, 0xCDC2, 0x5411, 0xCFF2, 0x5412, 0xDFB8,
- 0x5413, 0xCFC5, 0x5414, 0x85BD, 0x5415, 0xC2C0, 0x5416, 0xDFB9, 0x5417, 0xC2F0, 0x5418, 0x85BE, 0x5419, 0x85BF, 0x541A, 0x85C0,
- 0x541B, 0xBEFD, 0x541C, 0x85C1, 0x541D, 0xC1DF, 0x541E, 0xCDCC, 0x541F, 0xD2F7, 0x5420, 0xB7CD, 0x5421, 0xDFC1, 0x5422, 0x85C2,
- 0x5423, 0xDFC4, 0x5424, 0x85C3, 0x5425, 0x85C4, 0x5426, 0xB7F1, 0x5427, 0xB0C9, 0x5428, 0xB6D6, 0x5429, 0xB7D4, 0x542A, 0x85C5,
- 0x542B, 0xBAAC, 0x542C, 0xCCFD, 0x542D, 0xBFD4, 0x542E, 0xCBB1, 0x542F, 0xC6F4, 0x5430, 0x85C6, 0x5431, 0xD6A8, 0x5432, 0xDFC5,
- 0x5433, 0x85C7, 0x5434, 0xCEE2, 0x5435, 0xB3B3, 0x5436, 0x85C8, 0x5437, 0x85C9, 0x5438, 0xCEFC, 0x5439, 0xB4B5, 0x543A, 0x85CA,
- 0x543B, 0xCEC7, 0x543C, 0xBAF0, 0x543D, 0x85CB, 0x543E, 0xCEE1, 0x543F, 0x85CC, 0x5440, 0xD1BD, 0x5441, 0x85CD, 0x5442, 0x85CE,
- 0x5443, 0xDFC0, 0x5444, 0x85CF, 0x5445, 0x85D0, 0x5446, 0xB4F4, 0x5447, 0x85D1, 0x5448, 0xB3CA, 0x5449, 0x85D2, 0x544A, 0xB8E6,
- 0x544B, 0xDFBB, 0x544C, 0x85D3, 0x544D, 0x85D4, 0x544E, 0x85D5, 0x544F, 0x85D6, 0x5450, 0xC4C5, 0x5451, 0x85D7, 0x5452, 0xDFBC,
- 0x5453, 0xDFBD, 0x5454, 0xDFBE, 0x5455, 0xC5BB, 0x5456, 0xDFBF, 0x5457, 0xDFC2, 0x5458, 0xD4B1, 0x5459, 0xDFC3, 0x545A, 0x85D8,
- 0x545B, 0xC7BA, 0x545C, 0xCED8, 0x545D, 0x85D9, 0x545E, 0x85DA, 0x545F, 0x85DB, 0x5460, 0x85DC, 0x5461, 0x85DD, 0x5462, 0xC4D8,
- 0x5463, 0x85DE, 0x5464, 0xDFCA, 0x5465, 0x85DF, 0x5466, 0xDFCF, 0x5467, 0x85E0, 0x5468, 0xD6DC, 0x5469, 0x85E1, 0x546A, 0x85E2,
- 0x546B, 0x85E3, 0x546C, 0x85E4, 0x546D, 0x85E5, 0x546E, 0x85E6, 0x546F, 0x85E7, 0x5470, 0x85E8, 0x5471, 0xDFC9, 0x5472, 0xDFDA,
- 0x5473, 0xCEB6, 0x5474, 0x85E9, 0x5475, 0xBAC7, 0x5476, 0xDFCE, 0x5477, 0xDFC8, 0x5478, 0xC5DE, 0x5479, 0x85EA, 0x547A, 0x85EB,
- 0x547B, 0xC9EB, 0x547C, 0xBAF4, 0x547D, 0xC3FC, 0x547E, 0x85EC, 0x547F, 0x85ED, 0x5480, 0xBED7, 0x5481, 0x85EE, 0x5482, 0xDFC6,
- 0x5483, 0x85EF, 0x5484, 0xDFCD, 0x5485, 0x85F0, 0x5486, 0xC5D8, 0x5487, 0x85F1, 0x5488, 0x85F2, 0x5489, 0x85F3, 0x548A, 0x85F4,
- 0x548B, 0xD5A6, 0x548C, 0xBACD, 0x548D, 0x85F5, 0x548E, 0xBECC, 0x548F, 0xD3BD, 0x5490, 0xB8C0, 0x5491, 0x85F6, 0x5492, 0xD6E4,
- 0x5493, 0x85F7, 0x5494, 0xDFC7, 0x5495, 0xB9BE, 0x5496, 0xBFA7, 0x5497, 0x85F8, 0x5498, 0x85F9, 0x5499, 0xC1FC, 0x549A, 0xDFCB,
- 0x549B, 0xDFCC, 0x549C, 0x85FA, 0x549D, 0xDFD0, 0x549E, 0x85FB, 0x549F, 0x85FC, 0x54A0, 0x85FD, 0x54A1, 0x85FE, 0x54A2, 0x8640,
- 0x54A3, 0xDFDB, 0x54A4, 0xDFE5, 0x54A5, 0x8641, 0x54A6, 0xDFD7, 0x54A7, 0xDFD6, 0x54A8, 0xD7C9, 0x54A9, 0xDFE3, 0x54AA, 0xDFE4,
- 0x54AB, 0xE5EB, 0x54AC, 0xD2A7, 0x54AD, 0xDFD2, 0x54AE, 0x8642, 0x54AF, 0xBFA9, 0x54B0, 0x8643, 0x54B1, 0xD4DB, 0x54B2, 0x8644,
- 0x54B3, 0xBFC8, 0x54B4, 0xDFD4, 0x54B5, 0x8645, 0x54B6, 0x8646, 0x54B7, 0x8647, 0x54B8, 0xCFCC, 0x54B9, 0x8648, 0x54BA, 0x8649,
- 0x54BB, 0xDFDD, 0x54BC, 0x864A, 0x54BD, 0xD1CA, 0x54BE, 0x864B, 0x54BF, 0xDFDE, 0x54C0, 0xB0A7, 0x54C1, 0xC6B7, 0x54C2, 0xDFD3,
- 0x54C3, 0x864C, 0x54C4, 0xBAE5, 0x54C5, 0x864D, 0x54C6, 0xB6DF, 0x54C7, 0xCDDB, 0x54C8, 0xB9FE, 0x54C9, 0xD4D5, 0x54CA, 0x864E,
- 0x54CB, 0x864F, 0x54CC, 0xDFDF, 0x54CD, 0xCFEC, 0x54CE, 0xB0A5, 0x54CF, 0xDFE7, 0x54D0, 0xDFD1, 0x54D1, 0xD1C6, 0x54D2, 0xDFD5,
- 0x54D3, 0xDFD8, 0x54D4, 0xDFD9, 0x54D5, 0xDFDC, 0x54D6, 0x8650, 0x54D7, 0xBBA9, 0x54D8, 0x8651, 0x54D9, 0xDFE0, 0x54DA, 0xDFE1,
- 0x54DB, 0x8652, 0x54DC, 0xDFE2, 0x54DD, 0xDFE6, 0x54DE, 0xDFE8, 0x54DF, 0xD3B4, 0x54E0, 0x8653, 0x54E1, 0x8654, 0x54E2, 0x8655,
- 0x54E3, 0x8656, 0x54E4, 0x8657, 0x54E5, 0xB8E7, 0x54E6, 0xC5B6, 0x54E7, 0xDFEA, 0x54E8, 0xC9DA, 0x54E9, 0xC1A8, 0x54EA, 0xC4C4,
- 0x54EB, 0x8658, 0x54EC, 0x8659, 0x54ED, 0xBFDE, 0x54EE, 0xCFF8, 0x54EF, 0x865A, 0x54F0, 0x865B, 0x54F1, 0x865C, 0x54F2, 0xD5DC,
- 0x54F3, 0xDFEE, 0x54F4, 0x865D, 0x54F5, 0x865E, 0x54F6, 0x865F, 0x54F7, 0x8660, 0x54F8, 0x8661, 0x54F9, 0x8662, 0x54FA, 0xB2B8,
- 0x54FB, 0x8663, 0x54FC, 0xBADF, 0x54FD, 0xDFEC, 0x54FE, 0x8664, 0x54FF, 0xDBC1, 0x5500, 0x8665, 0x5501, 0xD1E4, 0x5502, 0x8666,
- 0x5503, 0x8667, 0x5504, 0x8668, 0x5505, 0x8669, 0x5506, 0xCBF4, 0x5507, 0xB4BD, 0x5508, 0x866A, 0x5509, 0xB0A6, 0x550A, 0x866B,
- 0x550B, 0x866C, 0x550C, 0x866D, 0x550D, 0x866E, 0x550E, 0x866F, 0x550F, 0xDFF1, 0x5510, 0xCCC6, 0x5511, 0xDFF2, 0x5512, 0x8670,
- 0x5513, 0x8671, 0x5514, 0xDFED, 0x5515, 0x8672, 0x5516, 0x8673, 0x5517, 0x8674, 0x5518, 0x8675, 0x5519, 0x8676, 0x551A, 0x8677,
- 0x551B, 0xDFE9, 0x551C, 0x8678, 0x551D, 0x8679, 0x551E, 0x867A, 0x551F, 0x867B, 0x5520, 0xDFEB, 0x5521, 0x867C, 0x5522, 0xDFEF,
- 0x5523, 0xDFF0, 0x5524, 0xBBBD, 0x5525, 0x867D, 0x5526, 0x867E, 0x5527, 0xDFF3, 0x5528, 0x8680, 0x5529, 0x8681, 0x552A, 0xDFF4,
- 0x552B, 0x8682, 0x552C, 0xBBA3, 0x552D, 0x8683, 0x552E, 0xCADB, 0x552F, 0xCEA8, 0x5530, 0xE0A7, 0x5531, 0xB3AA, 0x5532, 0x8684,
- 0x5533, 0xE0A6, 0x5534, 0x8685, 0x5535, 0x8686, 0x5536, 0x8687, 0x5537, 0xE0A1, 0x5538, 0x8688, 0x5539, 0x8689, 0x553A, 0x868A,
- 0x553B, 0x868B, 0x553C, 0xDFFE, 0x553D, 0x868C, 0x553E, 0xCDD9, 0x553F, 0xDFFC, 0x5540, 0x868D, 0x5541, 0xDFFA, 0x5542, 0x868E,
- 0x5543, 0xBFD0, 0x5544, 0xD7C4, 0x5545, 0x868F, 0x5546, 0xC9CC, 0x5547, 0x8690, 0x5548, 0x8691, 0x5549, 0xDFF8, 0x554A, 0xB0A1,
- 0x554B, 0x8692, 0x554C, 0x8693, 0x554D, 0x8694, 0x554E, 0x8695, 0x554F, 0x8696, 0x5550, 0xDFFD, 0x5551, 0x8697, 0x5552, 0x8698,
- 0x5553, 0x8699, 0x5554, 0x869A, 0x5555, 0xDFFB, 0x5556, 0xE0A2, 0x5557, 0x869B, 0x5558, 0x869C, 0x5559, 0x869D, 0x555A, 0x869E,
- 0x555B, 0x869F, 0x555C, 0xE0A8, 0x555D, 0x86A0, 0x555E, 0x86A1, 0x555F, 0x86A2, 0x5560, 0x86A3, 0x5561, 0xB7C8, 0x5562, 0x86A4,
- 0x5563, 0x86A5, 0x5564, 0xC6A1, 0x5565, 0xC9B6, 0x5566, 0xC0B2, 0x5567, 0xDFF5, 0x5568, 0x86A6, 0x5569, 0x86A7, 0x556A, 0xC5BE,
- 0x556B, 0x86A8, 0x556C, 0xD8C4, 0x556D, 0xDFF9, 0x556E, 0xC4F6, 0x556F, 0x86A9, 0x5570, 0x86AA, 0x5571, 0x86AB, 0x5572, 0x86AC,
- 0x5573, 0x86AD, 0x5574, 0x86AE, 0x5575, 0xE0A3, 0x5576, 0xE0A4, 0x5577, 0xE0A5, 0x5578, 0xD0A5, 0x5579, 0x86AF, 0x557A, 0x86B0,
- 0x557B, 0xE0B4, 0x557C, 0xCCE4, 0x557D, 0x86B1, 0x557E, 0xE0B1, 0x557F, 0x86B2, 0x5580, 0xBFA6, 0x5581, 0xE0AF, 0x5582, 0xCEB9,
- 0x5583, 0xE0AB, 0x5584, 0xC9C6, 0x5585, 0x86B3, 0x5586, 0x86B4, 0x5587, 0xC0AE, 0x5588, 0xE0AE, 0x5589, 0xBAED, 0x558A, 0xBAB0,
- 0x558B, 0xE0A9, 0x558C, 0x86B5, 0x558D, 0x86B6, 0x558E, 0x86B7, 0x558F, 0xDFF6, 0x5590, 0x86B8, 0x5591, 0xE0B3, 0x5592, 0x86B9,
- 0x5593, 0x86BA, 0x5594, 0xE0B8, 0x5595, 0x86BB, 0x5596, 0x86BC, 0x5597, 0x86BD, 0x5598, 0xB4AD, 0x5599, 0xE0B9, 0x559A, 0x86BE,
- 0x559B, 0x86BF, 0x559C, 0xCFB2, 0x559D, 0xBAC8, 0x559E, 0x86C0, 0x559F, 0xE0B0, 0x55A0, 0x86C1, 0x55A1, 0x86C2, 0x55A2, 0x86C3,
- 0x55A3, 0x86C4, 0x55A4, 0x86C5, 0x55A5, 0x86C6, 0x55A6, 0x86C7, 0x55A7, 0xD0FA, 0x55A8, 0x86C8, 0x55A9, 0x86C9, 0x55AA, 0x86CA,
- 0x55AB, 0x86CB, 0x55AC, 0x86CC, 0x55AD, 0x86CD, 0x55AE, 0x86CE, 0x55AF, 0x86CF, 0x55B0, 0x86D0, 0x55B1, 0xE0AC, 0x55B2, 0x86D1,
- 0x55B3, 0xD4FB, 0x55B4, 0x86D2, 0x55B5, 0xDFF7, 0x55B6, 0x86D3, 0x55B7, 0xC5E7, 0x55B8, 0x86D4, 0x55B9, 0xE0AD, 0x55BA, 0x86D5,
- 0x55BB, 0xD3F7, 0x55BC, 0x86D6, 0x55BD, 0xE0B6, 0x55BE, 0xE0B7, 0x55BF, 0x86D7, 0x55C0, 0x86D8, 0x55C1, 0x86D9, 0x55C2, 0x86DA,
- 0x55C3, 0x86DB, 0x55C4, 0xE0C4, 0x55C5, 0xD0E1, 0x55C6, 0x86DC, 0x55C7, 0x86DD, 0x55C8, 0x86DE, 0x55C9, 0xE0BC, 0x55CA, 0x86DF,
- 0x55CB, 0x86E0, 0x55CC, 0xE0C9, 0x55CD, 0xE0CA, 0x55CE, 0x86E1, 0x55CF, 0x86E2, 0x55D0, 0x86E3, 0x55D1, 0xE0BE, 0x55D2, 0xE0AA,
- 0x55D3, 0xC9A4, 0x55D4, 0xE0C1, 0x55D5, 0x86E4, 0x55D6, 0xE0B2, 0x55D7, 0x86E5, 0x55D8, 0x86E6, 0x55D9, 0x86E7, 0x55DA, 0x86E8,
- 0x55DB, 0x86E9, 0x55DC, 0xCAC8, 0x55DD, 0xE0C3, 0x55DE, 0x86EA, 0x55DF, 0xE0B5, 0x55E0, 0x86EB, 0x55E1, 0xCECB, 0x55E2, 0x86EC,
- 0x55E3, 0xCBC3, 0x55E4, 0xE0CD, 0x55E5, 0xE0C6, 0x55E6, 0xE0C2, 0x55E7, 0x86ED, 0x55E8, 0xE0CB, 0x55E9, 0x86EE, 0x55EA, 0xE0BA,
- 0x55EB, 0xE0BF, 0x55EC, 0xE0C0, 0x55ED, 0x86EF, 0x55EE, 0x86F0, 0x55EF, 0xE0C5, 0x55F0, 0x86F1, 0x55F1, 0x86F2, 0x55F2, 0xE0C7,
- 0x55F3, 0xE0C8, 0x55F4, 0x86F3, 0x55F5, 0xE0CC, 0x55F6, 0x86F4, 0x55F7, 0xE0BB, 0x55F8, 0x86F5, 0x55F9, 0x86F6, 0x55FA, 0x86F7,
- 0x55FB, 0x86F8, 0x55FC, 0x86F9, 0x55FD, 0xCBD4, 0x55FE, 0xE0D5, 0x55FF, 0x86FA, 0x5600, 0xE0D6, 0x5601, 0xE0D2, 0x5602, 0x86FB,
- 0x5603, 0x86FC, 0x5604, 0x86FD, 0x5605, 0x86FE, 0x5606, 0x8740, 0x5607, 0x8741, 0x5608, 0xE0D0, 0x5609, 0xBCCE, 0x560A, 0x8742,
- 0x560B, 0x8743, 0x560C, 0xE0D1, 0x560D, 0x8744, 0x560E, 0xB8C2, 0x560F, 0xD8C5, 0x5610, 0x8745, 0x5611, 0x8746, 0x5612, 0x8747,
- 0x5613, 0x8748, 0x5614, 0x8749, 0x5615, 0x874A, 0x5616, 0x874B, 0x5617, 0x874C, 0x5618, 0xD0EA, 0x5619, 0x874D, 0x561A, 0x874E,
- 0x561B, 0xC2EF, 0x561C, 0x874F, 0x561D, 0x8750, 0x561E, 0xE0CF, 0x561F, 0xE0BD, 0x5620, 0x8751, 0x5621, 0x8752, 0x5622, 0x8753,
- 0x5623, 0xE0D4, 0x5624, 0xE0D3, 0x5625, 0x8754, 0x5626, 0x8755, 0x5627, 0xE0D7, 0x5628, 0x8756, 0x5629, 0x8757, 0x562A, 0x8758,
- 0x562B, 0x8759, 0x562C, 0xE0DC, 0x562D, 0xE0D8, 0x562E, 0x875A, 0x562F, 0x875B, 0x5630, 0x875C, 0x5631, 0xD6F6, 0x5632, 0xB3B0,
- 0x5633, 0x875D, 0x5634, 0xD7EC, 0x5635, 0x875E, 0x5636, 0xCBBB, 0x5637, 0x875F, 0x5638, 0x8760, 0x5639, 0xE0DA, 0x563A, 0x8761,
- 0x563B, 0xCEFB, 0x563C, 0x8762, 0x563D, 0x8763, 0x563E, 0x8764, 0x563F, 0xBAD9, 0x5640, 0x8765, 0x5641, 0x8766, 0x5642, 0x8767,
- 0x5643, 0x8768, 0x5644, 0x8769, 0x5645, 0x876A, 0x5646, 0x876B, 0x5647, 0x876C, 0x5648, 0x876D, 0x5649, 0x876E, 0x564A, 0x876F,
- 0x564B, 0x8770, 0x564C, 0xE0E1, 0x564D, 0xE0DD, 0x564E, 0xD2AD, 0x564F, 0x8771, 0x5650, 0x8772, 0x5651, 0x8773, 0x5652, 0x8774,
- 0x5653, 0x8775, 0x5654, 0xE0E2, 0x5655, 0x8776, 0x5656, 0x8777, 0x5657, 0xE0DB, 0x5658, 0xE0D9, 0x5659, 0xE0DF, 0x565A, 0x8778,
- 0x565B, 0x8779, 0x565C, 0xE0E0, 0x565D, 0x877A, 0x565E, 0x877B, 0x565F, 0x877C, 0x5660, 0x877D, 0x5661, 0x877E, 0x5662, 0xE0DE,
- 0x5663, 0x8780, 0x5664, 0xE0E4, 0x5665, 0x8781, 0x5666, 0x8782, 0x5667, 0x8783, 0x5668, 0xC6F7, 0x5669, 0xD8AC, 0x566A, 0xD4EB,
- 0x566B, 0xE0E6, 0x566C, 0xCAC9, 0x566D, 0x8784, 0x566E, 0x8785, 0x566F, 0x8786, 0x5670, 0x8787, 0x5671, 0xE0E5, 0x5672, 0x8788,
- 0x5673, 0x8789, 0x5674, 0x878A, 0x5675, 0x878B, 0x5676, 0xB8C1, 0x5677, 0x878C, 0x5678, 0x878D, 0x5679, 0x878E, 0x567A, 0x878F,
- 0x567B, 0xE0E7, 0x567C, 0xE0E8, 0x567D, 0x8790, 0x567E, 0x8791, 0x567F, 0x8792, 0x5680, 0x8793, 0x5681, 0x8794, 0x5682, 0x8795,
- 0x5683, 0x8796, 0x5684, 0x8797, 0x5685, 0xE0E9, 0x5686, 0xE0E3, 0x5687, 0x8798, 0x5688, 0x8799, 0x5689, 0x879A, 0x568A, 0x879B,
- 0x568B, 0x879C, 0x568C, 0x879D, 0x568D, 0x879E, 0x568E, 0xBABF, 0x568F, 0xCCE7, 0x5690, 0x879F, 0x5691, 0x87A0, 0x5692, 0x87A1,
- 0x5693, 0xE0EA, 0x5694, 0x87A2, 0x5695, 0x87A3, 0x5696, 0x87A4, 0x5697, 0x87A5, 0x5698, 0x87A6, 0x5699, 0x87A7, 0x569A, 0x87A8,
- 0x569B, 0x87A9, 0x569C, 0x87AA, 0x569D, 0x87AB, 0x569E, 0x87AC, 0x569F, 0x87AD, 0x56A0, 0x87AE, 0x56A1, 0x87AF, 0x56A2, 0x87B0,
- 0x56A3, 0xCFF9, 0x56A4, 0x87B1, 0x56A5, 0x87B2, 0x56A6, 0x87B3, 0x56A7, 0x87B4, 0x56A8, 0x87B5, 0x56A9, 0x87B6, 0x56AA, 0x87B7,
- 0x56AB, 0x87B8, 0x56AC, 0x87B9, 0x56AD, 0x87BA, 0x56AE, 0x87BB, 0x56AF, 0xE0EB, 0x56B0, 0x87BC, 0x56B1, 0x87BD, 0x56B2, 0x87BE,
- 0x56B3, 0x87BF, 0x56B4, 0x87C0, 0x56B5, 0x87C1, 0x56B6, 0x87C2, 0x56B7, 0xC8C2, 0x56B8, 0x87C3, 0x56B9, 0x87C4, 0x56BA, 0x87C5,
- 0x56BB, 0x87C6, 0x56BC, 0xBDC0, 0x56BD, 0x87C7, 0x56BE, 0x87C8, 0x56BF, 0x87C9, 0x56C0, 0x87CA, 0x56C1, 0x87CB, 0x56C2, 0x87CC,
- 0x56C3, 0x87CD, 0x56C4, 0x87CE, 0x56C5, 0x87CF, 0x56C6, 0x87D0, 0x56C7, 0x87D1, 0x56C8, 0x87D2, 0x56C9, 0x87D3, 0x56CA, 0xC4D2,
- 0x56CB, 0x87D4, 0x56CC, 0x87D5, 0x56CD, 0x87D6, 0x56CE, 0x87D7, 0x56CF, 0x87D8, 0x56D0, 0x87D9, 0x56D1, 0x87DA, 0x56D2, 0x87DB,
- 0x56D3, 0x87DC, 0x56D4, 0xE0EC, 0x56D5, 0x87DD, 0x56D6, 0x87DE, 0x56D7, 0xE0ED, 0x56D8, 0x87DF, 0x56D9, 0x87E0, 0x56DA, 0xC7F4,
- 0x56DB, 0xCBC4, 0x56DC, 0x87E1, 0x56DD, 0xE0EE, 0x56DE, 0xBBD8, 0x56DF, 0xD8B6, 0x56E0, 0xD2F2, 0x56E1, 0xE0EF, 0x56E2, 0xCDC5,
- 0x56E3, 0x87E2, 0x56E4, 0xB6DA, 0x56E5, 0x87E3, 0x56E6, 0x87E4, 0x56E7, 0x87E5, 0x56E8, 0x87E6, 0x56E9, 0x87E7, 0x56EA, 0x87E8,
- 0x56EB, 0xE0F1, 0x56EC, 0x87E9, 0x56ED, 0xD4B0, 0x56EE, 0x87EA, 0x56EF, 0x87EB, 0x56F0, 0xC0A7, 0x56F1, 0xB4D1, 0x56F2, 0x87EC,
- 0x56F3, 0x87ED, 0x56F4, 0xCEA7, 0x56F5, 0xE0F0, 0x56F6, 0x87EE, 0x56F7, 0x87EF, 0x56F8, 0x87F0, 0x56F9, 0xE0F2, 0x56FA, 0xB9CC,
- 0x56FB, 0x87F1, 0x56FC, 0x87F2, 0x56FD, 0xB9FA, 0x56FE, 0xCDBC, 0x56FF, 0xE0F3, 0x5700, 0x87F3, 0x5701, 0x87F4, 0x5702, 0x87F5,
- 0x5703, 0xC6D4, 0x5704, 0xE0F4, 0x5705, 0x87F6, 0x5706, 0xD4B2, 0x5707, 0x87F7, 0x5708, 0xC8A6, 0x5709, 0xE0F6, 0x570A, 0xE0F5,
- 0x570B, 0x87F8, 0x570C, 0x87F9, 0x570D, 0x87FA, 0x570E, 0x87FB, 0x570F, 0x87FC, 0x5710, 0x87FD, 0x5711, 0x87FE, 0x5712, 0x8840,
- 0x5713, 0x8841, 0x5714, 0x8842, 0x5715, 0x8843, 0x5716, 0x8844, 0x5717, 0x8845, 0x5718, 0x8846, 0x5719, 0x8847, 0x571A, 0x8848,
- 0x571B, 0x8849, 0x571C, 0xE0F7, 0x571D, 0x884A, 0x571E, 0x884B, 0x571F, 0xCDC1, 0x5720, 0x884C, 0x5721, 0x884D, 0x5722, 0x884E,
- 0x5723, 0xCAA5, 0x5724, 0x884F, 0x5725, 0x8850, 0x5726, 0x8851, 0x5727, 0x8852, 0x5728, 0xD4DA, 0x5729, 0xDBD7, 0x572A, 0xDBD9,
- 0x572B, 0x8853, 0x572C, 0xDBD8, 0x572D, 0xB9E7, 0x572E, 0xDBDC, 0x572F, 0xDBDD, 0x5730, 0xB5D8, 0x5731, 0x8854, 0x5732, 0x8855,
- 0x5733, 0xDBDA, 0x5734, 0x8856, 0x5735, 0x8857, 0x5736, 0x8858, 0x5737, 0x8859, 0x5738, 0x885A, 0x5739, 0xDBDB, 0x573A, 0xB3A1,
- 0x573B, 0xDBDF, 0x573C, 0x885B, 0x573D, 0x885C, 0x573E, 0xBBF8, 0x573F, 0x885D, 0x5740, 0xD6B7, 0x5741, 0x885E, 0x5742, 0xDBE0,
- 0x5743, 0x885F, 0x5744, 0x8860, 0x5745, 0x8861, 0x5746, 0x8862, 0x5747, 0xBEF9, 0x5748, 0x8863, 0x5749, 0x8864, 0x574A, 0xB7BB,
- 0x574B, 0x8865, 0x574C, 0xDBD0, 0x574D, 0xCCAE, 0x574E, 0xBFB2, 0x574F, 0xBBB5, 0x5750, 0xD7F8, 0x5751, 0xBFD3, 0x5752, 0x8866,
- 0x5753, 0x8867, 0x5754, 0x8868, 0x5755, 0x8869, 0x5756, 0x886A, 0x5757, 0xBFE9, 0x5758, 0x886B, 0x5759, 0x886C, 0x575A, 0xBCE1,
- 0x575B, 0xCCB3, 0x575C, 0xDBDE, 0x575D, 0xB0D3, 0x575E, 0xCEEB, 0x575F, 0xB7D8, 0x5760, 0xD7B9, 0x5761, 0xC6C2, 0x5762, 0x886D,
- 0x5763, 0x886E, 0x5764, 0xC0A4, 0x5765, 0x886F, 0x5766, 0xCCB9, 0x5767, 0x8870, 0x5768, 0xDBE7, 0x5769, 0xDBE1, 0x576A, 0xC6BA,
- 0x576B, 0xDBE3, 0x576C, 0x8871, 0x576D, 0xDBE8, 0x576E, 0x8872, 0x576F, 0xC5F7, 0x5770, 0x8873, 0x5771, 0x8874, 0x5772, 0x8875,
- 0x5773, 0xDBEA, 0x5774, 0x8876, 0x5775, 0x8877, 0x5776, 0xDBE9, 0x5777, 0xBFC0, 0x5778, 0x8878, 0x5779, 0x8879, 0x577A, 0x887A,
- 0x577B, 0xDBE6, 0x577C, 0xDBE5, 0x577D, 0x887B, 0x577E, 0x887C, 0x577F, 0x887D, 0x5780, 0x887E, 0x5781, 0x8880, 0x5782, 0xB4B9,
- 0x5783, 0xC0AC, 0x5784, 0xC2A2, 0x5785, 0xDBE2, 0x5786, 0xDBE4, 0x5787, 0x8881, 0x5788, 0x8882, 0x5789, 0x8883, 0x578A, 0x8884,
- 0x578B, 0xD0CD, 0x578C, 0xDBED, 0x578D, 0x8885, 0x578E, 0x8886, 0x578F, 0x8887, 0x5790, 0x8888, 0x5791, 0x8889, 0x5792, 0xC0DD,
- 0x5793, 0xDBF2, 0x5794, 0x888A, 0x5795, 0x888B, 0x5796, 0x888C, 0x5797, 0x888D, 0x5798, 0x888E, 0x5799, 0x888F, 0x579A, 0x8890,
- 0x579B, 0xB6E2, 0x579C, 0x8891, 0x579D, 0x8892, 0x579E, 0x8893, 0x579F, 0x8894, 0x57A0, 0xDBF3, 0x57A1, 0xDBD2, 0x57A2, 0xB9B8,
- 0x57A3, 0xD4AB, 0x57A4, 0xDBEC, 0x57A5, 0x8895, 0x57A6, 0xBFD1, 0x57A7, 0xDBF0, 0x57A8, 0x8896, 0x57A9, 0xDBD1, 0x57AA, 0x8897,
- 0x57AB, 0xB5E6, 0x57AC, 0x8898, 0x57AD, 0xDBEB, 0x57AE, 0xBFE5, 0x57AF, 0x8899, 0x57B0, 0x889A, 0x57B1, 0x889B, 0x57B2, 0xDBEE,
- 0x57B3, 0x889C, 0x57B4, 0xDBF1, 0x57B5, 0x889D, 0x57B6, 0x889E, 0x57B7, 0x889F, 0x57B8, 0xDBF9, 0x57B9, 0x88A0, 0x57BA, 0x88A1,
- 0x57BB, 0x88A2, 0x57BC, 0x88A3, 0x57BD, 0x88A4, 0x57BE, 0x88A5, 0x57BF, 0x88A6, 0x57C0, 0x88A7, 0x57C1, 0x88A8, 0x57C2, 0xB9A1,
- 0x57C3, 0xB0A3, 0x57C4, 0x88A9, 0x57C5, 0x88AA, 0x57C6, 0x88AB, 0x57C7, 0x88AC, 0x57C8, 0x88AD, 0x57C9, 0x88AE, 0x57CA, 0x88AF,
- 0x57CB, 0xC2F1, 0x57CC, 0x88B0, 0x57CD, 0x88B1, 0x57CE, 0xB3C7, 0x57CF, 0xDBEF, 0x57D0, 0x88B2, 0x57D1, 0x88B3, 0x57D2, 0xDBF8,
- 0x57D3, 0x88B4, 0x57D4, 0xC6D2, 0x57D5, 0xDBF4, 0x57D6, 0x88B5, 0x57D7, 0x88B6, 0x57D8, 0xDBF5, 0x57D9, 0xDBF7, 0x57DA, 0xDBF6,
- 0x57DB, 0x88B7, 0x57DC, 0x88B8, 0x57DD, 0xDBFE, 0x57DE, 0x88B9, 0x57DF, 0xD3F2, 0x57E0, 0xB2BA, 0x57E1, 0x88BA, 0x57E2, 0x88BB,
- 0x57E3, 0x88BC, 0x57E4, 0xDBFD, 0x57E5, 0x88BD, 0x57E6, 0x88BE, 0x57E7, 0x88BF, 0x57E8, 0x88C0, 0x57E9, 0x88C1, 0x57EA, 0x88C2,
- 0x57EB, 0x88C3, 0x57EC, 0x88C4, 0x57ED, 0xDCA4, 0x57EE, 0x88C5, 0x57EF, 0xDBFB, 0x57F0, 0x88C6, 0x57F1, 0x88C7, 0x57F2, 0x88C8,
- 0x57F3, 0x88C9, 0x57F4, 0xDBFA, 0x57F5, 0x88CA, 0x57F6, 0x88CB, 0x57F7, 0x88CC, 0x57F8, 0xDBFC, 0x57F9, 0xC5E0, 0x57FA, 0xBBF9,
- 0x57FB, 0x88CD, 0x57FC, 0x88CE, 0x57FD, 0xDCA3, 0x57FE, 0x88CF, 0x57FF, 0x88D0, 0x5800, 0xDCA5, 0x5801, 0x88D1, 0x5802, 0xCCC3,
- 0x5803, 0x88D2, 0x5804, 0x88D3, 0x5805, 0x88D4, 0x5806, 0xB6D1, 0x5807, 0xDDC0, 0x5808, 0x88D5, 0x5809, 0x88D6, 0x580A, 0x88D7,
- 0x580B, 0xDCA1, 0x580C, 0x88D8, 0x580D, 0xDCA2, 0x580E, 0x88D9, 0x580F, 0x88DA, 0x5810, 0x88DB, 0x5811, 0xC7B5, 0x5812, 0x88DC,
- 0x5813, 0x88DD, 0x5814, 0x88DE, 0x5815, 0xB6E9, 0x5816, 0x88DF, 0x5817, 0x88E0, 0x5818, 0x88E1, 0x5819, 0xDCA7, 0x581A, 0x88E2,
- 0x581B, 0x88E3, 0x581C, 0x88E4, 0x581D, 0x88E5, 0x581E, 0xDCA6, 0x581F, 0x88E6, 0x5820, 0xDCA9, 0x5821, 0xB1A4, 0x5822, 0x88E7,
- 0x5823, 0x88E8, 0x5824, 0xB5CC, 0x5825, 0x88E9, 0x5826, 0x88EA, 0x5827, 0x88EB, 0x5828, 0x88EC, 0x5829, 0x88ED, 0x582A, 0xBFB0,
- 0x582B, 0x88EE, 0x582C, 0x88EF, 0x582D, 0x88F0, 0x582E, 0x88F1, 0x582F, 0x88F2, 0x5830, 0xD1DF, 0x5831, 0x88F3, 0x5832, 0x88F4,
- 0x5833, 0x88F5, 0x5834, 0x88F6, 0x5835, 0xB6C2, 0x5836, 0x88F7, 0x5837, 0x88F8, 0x5838, 0x88F9, 0x5839, 0x88FA, 0x583A, 0x88FB,
- 0x583B, 0x88FC, 0x583C, 0x88FD, 0x583D, 0x88FE, 0x583E, 0x8940, 0x583F, 0x8941, 0x5840, 0x8942, 0x5841, 0x8943, 0x5842, 0x8944,
- 0x5843, 0x8945, 0x5844, 0xDCA8, 0x5845, 0x8946, 0x5846, 0x8947, 0x5847, 0x8948, 0x5848, 0x8949, 0x5849, 0x894A, 0x584A, 0x894B,
- 0x584B, 0x894C, 0x584C, 0xCBFA, 0x584D, 0xEBF3, 0x584E, 0x894D, 0x584F, 0x894E, 0x5850, 0x894F, 0x5851, 0xCBDC, 0x5852, 0x8950,
- 0x5853, 0x8951, 0x5854, 0xCBFE, 0x5855, 0x8952, 0x5856, 0x8953, 0x5857, 0x8954, 0x5858, 0xCCC1, 0x5859, 0x8955, 0x585A, 0x8956,
- 0x585B, 0x8957, 0x585C, 0x8958, 0x585D, 0x8959, 0x585E, 0xC8FB, 0x585F, 0x895A, 0x5860, 0x895B, 0x5861, 0x895C, 0x5862, 0x895D,
- 0x5863, 0x895E, 0x5864, 0x895F, 0x5865, 0xDCAA, 0x5866, 0x8960, 0x5867, 0x8961, 0x5868, 0x8962, 0x5869, 0x8963, 0x586A, 0x8964,
- 0x586B, 0xCCEE, 0x586C, 0xDCAB, 0x586D, 0x8965, 0x586E, 0x8966, 0x586F, 0x8967, 0x5870, 0x8968, 0x5871, 0x8969, 0x5872, 0x896A,
- 0x5873, 0x896B, 0x5874, 0x896C, 0x5875, 0x896D, 0x5876, 0x896E, 0x5877, 0x896F, 0x5878, 0x8970, 0x5879, 0x8971, 0x587A, 0x8972,
- 0x587B, 0x8973, 0x587C, 0x8974, 0x587D, 0x8975, 0x587E, 0xDBD3, 0x587F, 0x8976, 0x5880, 0xDCAF, 0x5881, 0xDCAC, 0x5882, 0x8977,
- 0x5883, 0xBEB3, 0x5884, 0x8978, 0x5885, 0xCAFB, 0x5886, 0x8979, 0x5887, 0x897A, 0x5888, 0x897B, 0x5889, 0xDCAD, 0x588A, 0x897C,
- 0x588B, 0x897D, 0x588C, 0x897E, 0x588D, 0x8980, 0x588E, 0x8981, 0x588F, 0x8982, 0x5890, 0x8983, 0x5891, 0x8984, 0x5892, 0xC9CA,
- 0x5893, 0xC4B9, 0x5894, 0x8985, 0x5895, 0x8986, 0x5896, 0x8987, 0x5897, 0x8988, 0x5898, 0x8989, 0x5899, 0xC7BD, 0x589A, 0xDCAE,
- 0x589B, 0x898A, 0x589C, 0x898B, 0x589D, 0x898C, 0x589E, 0xD4F6, 0x589F, 0xD0E6, 0x58A0, 0x898D, 0x58A1, 0x898E, 0x58A2, 0x898F,
- 0x58A3, 0x8990, 0x58A4, 0x8991, 0x58A5, 0x8992, 0x58A6, 0x8993, 0x58A7, 0x8994, 0x58A8, 0xC4AB, 0x58A9, 0xB6D5, 0x58AA, 0x8995,
- 0x58AB, 0x8996, 0x58AC, 0x8997, 0x58AD, 0x8998, 0x58AE, 0x8999, 0x58AF, 0x899A, 0x58B0, 0x899B, 0x58B1, 0x899C, 0x58B2, 0x899D,
- 0x58B3, 0x899E, 0x58B4, 0x899F, 0x58B5, 0x89A0, 0x58B6, 0x89A1, 0x58B7, 0x89A2, 0x58B8, 0x89A3, 0x58B9, 0x89A4, 0x58BA, 0x89A5,
- 0x58BB, 0x89A6, 0x58BC, 0xDBD4, 0x58BD, 0x89A7, 0x58BE, 0x89A8, 0x58BF, 0x89A9, 0x58C0, 0x89AA, 0x58C1, 0xB1DA, 0x58C2, 0x89AB,
- 0x58C3, 0x89AC, 0x58C4, 0x89AD, 0x58C5, 0xDBD5, 0x58C6, 0x89AE, 0x58C7, 0x89AF, 0x58C8, 0x89B0, 0x58C9, 0x89B1, 0x58CA, 0x89B2,
- 0x58CB, 0x89B3, 0x58CC, 0x89B4, 0x58CD, 0x89B5, 0x58CE, 0x89B6, 0x58CF, 0x89B7, 0x58D0, 0x89B8, 0x58D1, 0xDBD6, 0x58D2, 0x89B9,
- 0x58D3, 0x89BA, 0x58D4, 0x89BB, 0x58D5, 0xBABE, 0x58D6, 0x89BC, 0x58D7, 0x89BD, 0x58D8, 0x89BE, 0x58D9, 0x89BF, 0x58DA, 0x89C0,
- 0x58DB, 0x89C1, 0x58DC, 0x89C2, 0x58DD, 0x89C3, 0x58DE, 0x89C4, 0x58DF, 0x89C5, 0x58E0, 0x89C6, 0x58E1, 0x89C7, 0x58E2, 0x89C8,
- 0x58E3, 0x89C9, 0x58E4, 0xC8C0, 0x58E5, 0x89CA, 0x58E6, 0x89CB, 0x58E7, 0x89CC, 0x58E8, 0x89CD, 0x58E9, 0x89CE, 0x58EA, 0x89CF,
- 0x58EB, 0xCABF, 0x58EC, 0xC8C9, 0x58ED, 0x89D0, 0x58EE, 0xD7B3, 0x58EF, 0x89D1, 0x58F0, 0xC9F9, 0x58F1, 0x89D2, 0x58F2, 0x89D3,
- 0x58F3, 0xBFC7, 0x58F4, 0x89D4, 0x58F5, 0x89D5, 0x58F6, 0xBAF8, 0x58F7, 0x89D6, 0x58F8, 0x89D7, 0x58F9, 0xD2BC, 0x58FA, 0x89D8,
- 0x58FB, 0x89D9, 0x58FC, 0x89DA, 0x58FD, 0x89DB, 0x58FE, 0x89DC, 0x58FF, 0x89DD, 0x5900, 0x89DE, 0x5901, 0x89DF, 0x5902, 0xE2BA,
- 0x5903, 0x89E0, 0x5904, 0xB4A6, 0x5905, 0x89E1, 0x5906, 0x89E2, 0x5907, 0xB1B8, 0x5908, 0x89E3, 0x5909, 0x89E4, 0x590A, 0x89E5,
- 0x590B, 0x89E6, 0x590C, 0x89E7, 0x590D, 0xB8B4, 0x590E, 0x89E8, 0x590F, 0xCFC4, 0x5910, 0x89E9, 0x5911, 0x89EA, 0x5912, 0x89EB,
- 0x5913, 0x89EC, 0x5914, 0xD9E7, 0x5915, 0xCFA6, 0x5916, 0xCDE2, 0x5917, 0x89ED, 0x5918, 0x89EE, 0x5919, 0xD9ED, 0x591A, 0xB6E0,
- 0x591B, 0x89EF, 0x591C, 0xD2B9, 0x591D, 0x89F0, 0x591E, 0x89F1, 0x591F, 0xB9BB, 0x5920, 0x89F2, 0x5921, 0x89F3, 0x5922, 0x89F4,
- 0x5923, 0x89F5, 0x5924, 0xE2B9, 0x5925, 0xE2B7, 0x5926, 0x89F6, 0x5927, 0xB4F3, 0x5928, 0x89F7, 0x5929, 0xCCEC, 0x592A, 0xCCAB,
- 0x592B, 0xB7F2, 0x592C, 0x89F8, 0x592D, 0xD8B2, 0x592E, 0xD1EB, 0x592F, 0xBABB, 0x5930, 0x89F9, 0x5931, 0xCAA7, 0x5932, 0x89FA,
- 0x5933, 0x89FB, 0x5934, 0xCDB7, 0x5935, 0x89FC, 0x5936, 0x89FD, 0x5937, 0xD2C4, 0x5938, 0xBFE4, 0x5939, 0xBCD0, 0x593A, 0xB6E1,
- 0x593B, 0x89FE, 0x593C, 0xDEC5, 0x593D, 0x8A40, 0x593E, 0x8A41, 0x593F, 0x8A42, 0x5940, 0x8A43, 0x5941, 0xDEC6, 0x5942, 0xDBBC,
- 0x5943, 0x8A44, 0x5944, 0xD1D9, 0x5945, 0x8A45, 0x5946, 0x8A46, 0x5947, 0xC6E6, 0x5948, 0xC4CE, 0x5949, 0xB7EE, 0x594A, 0x8A47,
- 0x594B, 0xB7DC, 0x594C, 0x8A48, 0x594D, 0x8A49, 0x594E, 0xBFFC, 0x594F, 0xD7E0, 0x5950, 0x8A4A, 0x5951, 0xC6F5, 0x5952, 0x8A4B,
- 0x5953, 0x8A4C, 0x5954, 0xB1BC, 0x5955, 0xDEC8, 0x5956, 0xBDB1, 0x5957, 0xCCD7, 0x5958, 0xDECA, 0x5959, 0x8A4D, 0x595A, 0xDEC9,
- 0x595B, 0x8A4E, 0x595C, 0x8A4F, 0x595D, 0x8A50, 0x595E, 0x8A51, 0x595F, 0x8A52, 0x5960, 0xB5EC, 0x5961, 0x8A53, 0x5962, 0xC9DD,
- 0x5963, 0x8A54, 0x5964, 0x8A55, 0x5965, 0xB0C2, 0x5966, 0x8A56, 0x5967, 0x8A57, 0x5968, 0x8A58, 0x5969, 0x8A59, 0x596A, 0x8A5A,
- 0x596B, 0x8A5B, 0x596C, 0x8A5C, 0x596D, 0x8A5D, 0x596E, 0x8A5E, 0x596F, 0x8A5F, 0x5970, 0x8A60, 0x5971, 0x8A61, 0x5972, 0x8A62,
- 0x5973, 0xC5AE, 0x5974, 0xC5AB, 0x5975, 0x8A63, 0x5976, 0xC4CC, 0x5977, 0x8A64, 0x5978, 0xBCE9, 0x5979, 0xCBFD, 0x597A, 0x8A65,
- 0x597B, 0x8A66, 0x597C, 0x8A67, 0x597D, 0xBAC3, 0x597E, 0x8A68, 0x597F, 0x8A69, 0x5980, 0x8A6A, 0x5981, 0xE5F9, 0x5982, 0xC8E7,
- 0x5983, 0xE5FA, 0x5984, 0xCDFD, 0x5985, 0x8A6B, 0x5986, 0xD7B1, 0x5987, 0xB8BE, 0x5988, 0xC2E8, 0x5989, 0x8A6C, 0x598A, 0xC8D1,
- 0x598B, 0x8A6D, 0x598C, 0x8A6E, 0x598D, 0xE5FB, 0x598E, 0x8A6F, 0x598F, 0x8A70, 0x5990, 0x8A71, 0x5991, 0x8A72, 0x5992, 0xB6CA,
- 0x5993, 0xBCCB, 0x5994, 0x8A73, 0x5995, 0x8A74, 0x5996, 0xD1FD, 0x5997, 0xE6A1, 0x5998, 0x8A75, 0x5999, 0xC3EE, 0x599A, 0x8A76,
- 0x599B, 0x8A77, 0x599C, 0x8A78, 0x599D, 0x8A79, 0x599E, 0xE6A4, 0x599F, 0x8A7A, 0x59A0, 0x8A7B, 0x59A1, 0x8A7C, 0x59A2, 0x8A7D,
- 0x59A3, 0xE5FE, 0x59A4, 0xE6A5, 0x59A5, 0xCDD7, 0x59A6, 0x8A7E, 0x59A7, 0x8A80, 0x59A8, 0xB7C1, 0x59A9, 0xE5FC, 0x59AA, 0xE5FD,
- 0x59AB, 0xE6A3, 0x59AC, 0x8A81, 0x59AD, 0x8A82, 0x59AE, 0xC4DD, 0x59AF, 0xE6A8, 0x59B0, 0x8A83, 0x59B1, 0x8A84, 0x59B2, 0xE6A7,
- 0x59B3, 0x8A85, 0x59B4, 0x8A86, 0x59B5, 0x8A87, 0x59B6, 0x8A88, 0x59B7, 0x8A89, 0x59B8, 0x8A8A, 0x59B9, 0xC3C3, 0x59BA, 0x8A8B,
- 0x59BB, 0xC6DE, 0x59BC, 0x8A8C, 0x59BD, 0x8A8D, 0x59BE, 0xE6AA, 0x59BF, 0x8A8E, 0x59C0, 0x8A8F, 0x59C1, 0x8A90, 0x59C2, 0x8A91,
- 0x59C3, 0x8A92, 0x59C4, 0x8A93, 0x59C5, 0x8A94, 0x59C6, 0xC4B7, 0x59C7, 0x8A95, 0x59C8, 0x8A96, 0x59C9, 0x8A97, 0x59CA, 0xE6A2,
- 0x59CB, 0xCABC, 0x59CC, 0x8A98, 0x59CD, 0x8A99, 0x59CE, 0x8A9A, 0x59CF, 0x8A9B, 0x59D0, 0xBDE3, 0x59D1, 0xB9C3, 0x59D2, 0xE6A6,
- 0x59D3, 0xD0D5, 0x59D4, 0xCEAF, 0x59D5, 0x8A9C, 0x59D6, 0x8A9D, 0x59D7, 0xE6A9, 0x59D8, 0xE6B0, 0x59D9, 0x8A9E, 0x59DA, 0xD2A6,
- 0x59DB, 0x8A9F, 0x59DC, 0xBDAA, 0x59DD, 0xE6AD, 0x59DE, 0x8AA0, 0x59DF, 0x8AA1, 0x59E0, 0x8AA2, 0x59E1, 0x8AA3, 0x59E2, 0x8AA4,
- 0x59E3, 0xE6AF, 0x59E4, 0x8AA5, 0x59E5, 0xC0D1, 0x59E6, 0x8AA6, 0x59E7, 0x8AA7, 0x59E8, 0xD2CC, 0x59E9, 0x8AA8, 0x59EA, 0x8AA9,
- 0x59EB, 0x8AAA, 0x59EC, 0xBCA7, 0x59ED, 0x8AAB, 0x59EE, 0x8AAC, 0x59EF, 0x8AAD, 0x59F0, 0x8AAE, 0x59F1, 0x8AAF, 0x59F2, 0x8AB0,
- 0x59F3, 0x8AB1, 0x59F4, 0x8AB2, 0x59F5, 0x8AB3, 0x59F6, 0x8AB4, 0x59F7, 0x8AB5, 0x59F8, 0x8AB6, 0x59F9, 0xE6B1, 0x59FA, 0x8AB7,
- 0x59FB, 0xD2F6, 0x59FC, 0x8AB8, 0x59FD, 0x8AB9, 0x59FE, 0x8ABA, 0x59FF, 0xD7CB, 0x5A00, 0x8ABB, 0x5A01, 0xCDFE, 0x5A02, 0x8ABC,
- 0x5A03, 0xCDDE, 0x5A04, 0xC2A6, 0x5A05, 0xE6AB, 0x5A06, 0xE6AC, 0x5A07, 0xBDBF, 0x5A08, 0xE6AE, 0x5A09, 0xE6B3, 0x5A0A, 0x8ABD,
- 0x5A0B, 0x8ABE, 0x5A0C, 0xE6B2, 0x5A0D, 0x8ABF, 0x5A0E, 0x8AC0, 0x5A0F, 0x8AC1, 0x5A10, 0x8AC2, 0x5A11, 0xE6B6, 0x5A12, 0x8AC3,
- 0x5A13, 0xE6B8, 0x5A14, 0x8AC4, 0x5A15, 0x8AC5, 0x5A16, 0x8AC6, 0x5A17, 0x8AC7, 0x5A18, 0xC4EF, 0x5A19, 0x8AC8, 0x5A1A, 0x8AC9,
- 0x5A1B, 0x8ACA, 0x5A1C, 0xC4C8, 0x5A1D, 0x8ACB, 0x5A1E, 0x8ACC, 0x5A1F, 0xBEEA, 0x5A20, 0xC9EF, 0x5A21, 0x8ACD, 0x5A22, 0x8ACE,
- 0x5A23, 0xE6B7, 0x5A24, 0x8ACF, 0x5A25, 0xB6F0, 0x5A26, 0x8AD0, 0x5A27, 0x8AD1, 0x5A28, 0x8AD2, 0x5A29, 0xC3E4, 0x5A2A, 0x8AD3,
- 0x5A2B, 0x8AD4, 0x5A2C, 0x8AD5, 0x5A2D, 0x8AD6, 0x5A2E, 0x8AD7, 0x5A2F, 0x8AD8, 0x5A30, 0x8AD9, 0x5A31, 0xD3E9, 0x5A32, 0xE6B4,
- 0x5A33, 0x8ADA, 0x5A34, 0xE6B5, 0x5A35, 0x8ADB, 0x5A36, 0xC8A2, 0x5A37, 0x8ADC, 0x5A38, 0x8ADD, 0x5A39, 0x8ADE, 0x5A3A, 0x8ADF,
- 0x5A3B, 0x8AE0, 0x5A3C, 0xE6BD, 0x5A3D, 0x8AE1, 0x5A3E, 0x8AE2, 0x5A3F, 0x8AE3, 0x5A40, 0xE6B9, 0x5A41, 0x8AE4, 0x5A42, 0x8AE5,
- 0x5A43, 0x8AE6, 0x5A44, 0x8AE7, 0x5A45, 0x8AE8, 0x5A46, 0xC6C5, 0x5A47, 0x8AE9, 0x5A48, 0x8AEA, 0x5A49, 0xCDF1, 0x5A4A, 0xE6BB,
- 0x5A4B, 0x8AEB, 0x5A4C, 0x8AEC, 0x5A4D, 0x8AED, 0x5A4E, 0x8AEE, 0x5A4F, 0x8AEF, 0x5A50, 0x8AF0, 0x5A51, 0x8AF1, 0x5A52, 0x8AF2,
- 0x5A53, 0x8AF3, 0x5A54, 0x8AF4, 0x5A55, 0xE6BC, 0x5A56, 0x8AF5, 0x5A57, 0x8AF6, 0x5A58, 0x8AF7, 0x5A59, 0x8AF8, 0x5A5A, 0xBBE9,
- 0x5A5B, 0x8AF9, 0x5A5C, 0x8AFA, 0x5A5D, 0x8AFB, 0x5A5E, 0x8AFC, 0x5A5F, 0x8AFD, 0x5A60, 0x8AFE, 0x5A61, 0x8B40, 0x5A62, 0xE6BE,
- 0x5A63, 0x8B41, 0x5A64, 0x8B42, 0x5A65, 0x8B43, 0x5A66, 0x8B44, 0x5A67, 0xE6BA, 0x5A68, 0x8B45, 0x5A69, 0x8B46, 0x5A6A, 0xC0B7,
- 0x5A6B, 0x8B47, 0x5A6C, 0x8B48, 0x5A6D, 0x8B49, 0x5A6E, 0x8B4A, 0x5A6F, 0x8B4B, 0x5A70, 0x8B4C, 0x5A71, 0x8B4D, 0x5A72, 0x8B4E,
- 0x5A73, 0x8B4F, 0x5A74, 0xD3A4, 0x5A75, 0xE6BF, 0x5A76, 0xC9F4, 0x5A77, 0xE6C3, 0x5A78, 0x8B50, 0x5A79, 0x8B51, 0x5A7A, 0xE6C4,
- 0x5A7B, 0x8B52, 0x5A7C, 0x8B53, 0x5A7D, 0x8B54, 0x5A7E, 0x8B55, 0x5A7F, 0xD0F6, 0x5A80, 0x8B56, 0x5A81, 0x8B57, 0x5A82, 0x8B58,
- 0x5A83, 0x8B59, 0x5A84, 0x8B5A, 0x5A85, 0x8B5B, 0x5A86, 0x8B5C, 0x5A87, 0x8B5D, 0x5A88, 0x8B5E, 0x5A89, 0x8B5F, 0x5A8A, 0x8B60,
- 0x5A8B, 0x8B61, 0x5A8C, 0x8B62, 0x5A8D, 0x8B63, 0x5A8E, 0x8B64, 0x5A8F, 0x8B65, 0x5A90, 0x8B66, 0x5A91, 0x8B67, 0x5A92, 0xC3BD,
- 0x5A93, 0x8B68, 0x5A94, 0x8B69, 0x5A95, 0x8B6A, 0x5A96, 0x8B6B, 0x5A97, 0x8B6C, 0x5A98, 0x8B6D, 0x5A99, 0x8B6E, 0x5A9A, 0xC3C4,
- 0x5A9B, 0xE6C2, 0x5A9C, 0x8B6F, 0x5A9D, 0x8B70, 0x5A9E, 0x8B71, 0x5A9F, 0x8B72, 0x5AA0, 0x8B73, 0x5AA1, 0x8B74, 0x5AA2, 0x8B75,
- 0x5AA3, 0x8B76, 0x5AA4, 0x8B77, 0x5AA5, 0x8B78, 0x5AA6, 0x8B79, 0x5AA7, 0x8B7A, 0x5AA8, 0x8B7B, 0x5AA9, 0x8B7C, 0x5AAA, 0xE6C1,
- 0x5AAB, 0x8B7D, 0x5AAC, 0x8B7E, 0x5AAD, 0x8B80, 0x5AAE, 0x8B81, 0x5AAF, 0x8B82, 0x5AB0, 0x8B83, 0x5AB1, 0x8B84, 0x5AB2, 0xE6C7,
- 0x5AB3, 0xCFB1, 0x5AB4, 0x8B85, 0x5AB5, 0xEBF4, 0x5AB6, 0x8B86, 0x5AB7, 0x8B87, 0x5AB8, 0xE6CA, 0x5AB9, 0x8B88, 0x5ABA, 0x8B89,
- 0x5ABB, 0x8B8A, 0x5ABC, 0x8B8B, 0x5ABD, 0x8B8C, 0x5ABE, 0xE6C5, 0x5ABF, 0x8B8D, 0x5AC0, 0x8B8E, 0x5AC1, 0xBCDE, 0x5AC2, 0xC9A9,
- 0x5AC3, 0x8B8F, 0x5AC4, 0x8B90, 0x5AC5, 0x8B91, 0x5AC6, 0x8B92, 0x5AC7, 0x8B93, 0x5AC8, 0x8B94, 0x5AC9, 0xBCB5, 0x5ACA, 0x8B95,
- 0x5ACB, 0x8B96, 0x5ACC, 0xCFD3, 0x5ACD, 0x8B97, 0x5ACE, 0x8B98, 0x5ACF, 0x8B99, 0x5AD0, 0x8B9A, 0x5AD1, 0x8B9B, 0x5AD2, 0xE6C8,
- 0x5AD3, 0x8B9C, 0x5AD4, 0xE6C9, 0x5AD5, 0x8B9D, 0x5AD6, 0xE6CE, 0x5AD7, 0x8B9E, 0x5AD8, 0xE6D0, 0x5AD9, 0x8B9F, 0x5ADA, 0x8BA0,
- 0x5ADB, 0x8BA1, 0x5ADC, 0xE6D1, 0x5ADD, 0x8BA2, 0x5ADE, 0x8BA3, 0x5ADF, 0x8BA4, 0x5AE0, 0xE6CB, 0x5AE1, 0xB5D5, 0x5AE2, 0x8BA5,
- 0x5AE3, 0xE6CC, 0x5AE4, 0x8BA6, 0x5AE5, 0x8BA7, 0x5AE6, 0xE6CF, 0x5AE7, 0x8BA8, 0x5AE8, 0x8BA9, 0x5AE9, 0xC4DB, 0x5AEA, 0x8BAA,
- 0x5AEB, 0xE6C6, 0x5AEC, 0x8BAB, 0x5AED, 0x8BAC, 0x5AEE, 0x8BAD, 0x5AEF, 0x8BAE, 0x5AF0, 0x8BAF, 0x5AF1, 0xE6CD, 0x5AF2, 0x8BB0,
- 0x5AF3, 0x8BB1, 0x5AF4, 0x8BB2, 0x5AF5, 0x8BB3, 0x5AF6, 0x8BB4, 0x5AF7, 0x8BB5, 0x5AF8, 0x8BB6, 0x5AF9, 0x8BB7, 0x5AFA, 0x8BB8,
- 0x5AFB, 0x8BB9, 0x5AFC, 0x8BBA, 0x5AFD, 0x8BBB, 0x5AFE, 0x8BBC, 0x5AFF, 0x8BBD, 0x5B00, 0x8BBE, 0x5B01, 0x8BBF, 0x5B02, 0x8BC0,
- 0x5B03, 0x8BC1, 0x5B04, 0x8BC2, 0x5B05, 0x8BC3, 0x5B06, 0x8BC4, 0x5B07, 0x8BC5, 0x5B08, 0x8BC6, 0x5B09, 0xE6D2, 0x5B0A, 0x8BC7,
- 0x5B0B, 0x8BC8, 0x5B0C, 0x8BC9, 0x5B0D, 0x8BCA, 0x5B0E, 0x8BCB, 0x5B0F, 0x8BCC, 0x5B10, 0x8BCD, 0x5B11, 0x8BCE, 0x5B12, 0x8BCF,
- 0x5B13, 0x8BD0, 0x5B14, 0x8BD1, 0x5B15, 0x8BD2, 0x5B16, 0xE6D4, 0x5B17, 0xE6D3, 0x5B18, 0x8BD3, 0x5B19, 0x8BD4, 0x5B1A, 0x8BD5,
- 0x5B1B, 0x8BD6, 0x5B1C, 0x8BD7, 0x5B1D, 0x8BD8, 0x5B1E, 0x8BD9, 0x5B1F, 0x8BDA, 0x5B20, 0x8BDB, 0x5B21, 0x8BDC, 0x5B22, 0x8BDD,
- 0x5B23, 0x8BDE, 0x5B24, 0x8BDF, 0x5B25, 0x8BE0, 0x5B26, 0x8BE1, 0x5B27, 0x8BE2, 0x5B28, 0x8BE3, 0x5B29, 0x8BE4, 0x5B2A, 0x8BE5,
- 0x5B2B, 0x8BE6, 0x5B2C, 0x8BE7, 0x5B2D, 0x8BE8, 0x5B2E, 0x8BE9, 0x5B2F, 0x8BEA, 0x5B30, 0x8BEB, 0x5B31, 0x8BEC, 0x5B32, 0xE6D5,
- 0x5B33, 0x8BED, 0x5B34, 0xD9F8, 0x5B35, 0x8BEE, 0x5B36, 0x8BEF, 0x5B37, 0xE6D6, 0x5B38, 0x8BF0, 0x5B39, 0x8BF1, 0x5B3A, 0x8BF2,
- 0x5B3B, 0x8BF3, 0x5B3C, 0x8BF4, 0x5B3D, 0x8BF5, 0x5B3E, 0x8BF6, 0x5B3F, 0x8BF7, 0x5B40, 0xE6D7, 0x5B41, 0x8BF8, 0x5B42, 0x8BF9,
- 0x5B43, 0x8BFA, 0x5B44, 0x8BFB, 0x5B45, 0x8BFC, 0x5B46, 0x8BFD, 0x5B47, 0x8BFE, 0x5B48, 0x8C40, 0x5B49, 0x8C41, 0x5B4A, 0x8C42,
- 0x5B4B, 0x8C43, 0x5B4C, 0x8C44, 0x5B4D, 0x8C45, 0x5B4E, 0x8C46, 0x5B4F, 0x8C47, 0x5B50, 0xD7D3, 0x5B51, 0xE6DD, 0x5B52, 0x8C48,
- 0x5B53, 0xE6DE, 0x5B54, 0xBFD7, 0x5B55, 0xD4D0, 0x5B56, 0x8C49, 0x5B57, 0xD7D6, 0x5B58, 0xB4E6, 0x5B59, 0xCBEF, 0x5B5A, 0xE6DA,
- 0x5B5B, 0xD8C3, 0x5B5C, 0xD7CE, 0x5B5D, 0xD0A2, 0x5B5E, 0x8C4A, 0x5B5F, 0xC3CF, 0x5B60, 0x8C4B, 0x5B61, 0x8C4C, 0x5B62, 0xE6DF,
- 0x5B63, 0xBCBE, 0x5B64, 0xB9C2, 0x5B65, 0xE6DB, 0x5B66, 0xD1A7, 0x5B67, 0x8C4D, 0x5B68, 0x8C4E, 0x5B69, 0xBAA2, 0x5B6A, 0xC2CF,
- 0x5B6B, 0x8C4F, 0x5B6C, 0xD8AB, 0x5B6D, 0x8C50, 0x5B6E, 0x8C51, 0x5B6F, 0x8C52, 0x5B70, 0xCAEB, 0x5B71, 0xE5EE, 0x5B72, 0x8C53,
- 0x5B73, 0xE6DC, 0x5B74, 0x8C54, 0x5B75, 0xB7F5, 0x5B76, 0x8C55, 0x5B77, 0x8C56, 0x5B78, 0x8C57, 0x5B79, 0x8C58, 0x5B7A, 0xC8E6,
- 0x5B7B, 0x8C59, 0x5B7C, 0x8C5A, 0x5B7D, 0xC4F5, 0x5B7E, 0x8C5B, 0x5B7F, 0x8C5C, 0x5B80, 0xE5B2, 0x5B81, 0xC4FE, 0x5B82, 0x8C5D,
- 0x5B83, 0xCBFC, 0x5B84, 0xE5B3, 0x5B85, 0xD5AC, 0x5B86, 0x8C5E, 0x5B87, 0xD3EE, 0x5B88, 0xCAD8, 0x5B89, 0xB0B2, 0x5B8A, 0x8C5F,
- 0x5B8B, 0xCBCE, 0x5B8C, 0xCDEA, 0x5B8D, 0x8C60, 0x5B8E, 0x8C61, 0x5B8F, 0xBAEA, 0x5B90, 0x8C62, 0x5B91, 0x8C63, 0x5B92, 0x8C64,
- 0x5B93, 0xE5B5, 0x5B94, 0x8C65, 0x5B95, 0xE5B4, 0x5B96, 0x8C66, 0x5B97, 0xD7DA, 0x5B98, 0xB9D9, 0x5B99, 0xD6E6, 0x5B9A, 0xB6A8,
- 0x5B9B, 0xCDF0, 0x5B9C, 0xD2CB, 0x5B9D, 0xB1A6, 0x5B9E, 0xCAB5, 0x5B9F, 0x8C67, 0x5BA0, 0xB3E8, 0x5BA1, 0xC9F3, 0x5BA2, 0xBFCD,
- 0x5BA3, 0xD0FB, 0x5BA4, 0xCAD2, 0x5BA5, 0xE5B6, 0x5BA6, 0xBBC2, 0x5BA7, 0x8C68, 0x5BA8, 0x8C69, 0x5BA9, 0x8C6A, 0x5BAA, 0xCFDC,
- 0x5BAB, 0xB9AC, 0x5BAC, 0x8C6B, 0x5BAD, 0x8C6C, 0x5BAE, 0x8C6D, 0x5BAF, 0x8C6E, 0x5BB0, 0xD4D7, 0x5BB1, 0x8C6F, 0x5BB2, 0x8C70,
- 0x5BB3, 0xBAA6, 0x5BB4, 0xD1E7, 0x5BB5, 0xCFFC, 0x5BB6, 0xBCD2, 0x5BB7, 0x8C71, 0x5BB8, 0xE5B7, 0x5BB9, 0xC8DD, 0x5BBA, 0x8C72,
- 0x5BBB, 0x8C73, 0x5BBC, 0x8C74, 0x5BBD, 0xBFED, 0x5BBE, 0xB1F6, 0x5BBF, 0xCBDE, 0x5BC0, 0x8C75, 0x5BC1, 0x8C76, 0x5BC2, 0xBCC5,
- 0x5BC3, 0x8C77, 0x5BC4, 0xBCC4, 0x5BC5, 0xD2FA, 0x5BC6, 0xC3DC, 0x5BC7, 0xBFDC, 0x5BC8, 0x8C78, 0x5BC9, 0x8C79, 0x5BCA, 0x8C7A,
- 0x5BCB, 0x8C7B, 0x5BCC, 0xB8BB, 0x5BCD, 0x8C7C, 0x5BCE, 0x8C7D, 0x5BCF, 0x8C7E, 0x5BD0, 0xC3C2, 0x5BD1, 0x8C80, 0x5BD2, 0xBAAE,
- 0x5BD3, 0xD4A2, 0x5BD4, 0x8C81, 0x5BD5, 0x8C82, 0x5BD6, 0x8C83, 0x5BD7, 0x8C84, 0x5BD8, 0x8C85, 0x5BD9, 0x8C86, 0x5BDA, 0x8C87,
- 0x5BDB, 0x8C88, 0x5BDC, 0x8C89, 0x5BDD, 0xC7DE, 0x5BDE, 0xC4AF, 0x5BDF, 0xB2EC, 0x5BE0, 0x8C8A, 0x5BE1, 0xB9D1, 0x5BE2, 0x8C8B,
- 0x5BE3, 0x8C8C, 0x5BE4, 0xE5BB, 0x5BE5, 0xC1C8, 0x5BE6, 0x8C8D, 0x5BE7, 0x8C8E, 0x5BE8, 0xD5AF, 0x5BE9, 0x8C8F, 0x5BEA, 0x8C90,
- 0x5BEB, 0x8C91, 0x5BEC, 0x8C92, 0x5BED, 0x8C93, 0x5BEE, 0xE5BC, 0x5BEF, 0x8C94, 0x5BF0, 0xE5BE, 0x5BF1, 0x8C95, 0x5BF2, 0x8C96,
- 0x5BF3, 0x8C97, 0x5BF4, 0x8C98, 0x5BF5, 0x8C99, 0x5BF6, 0x8C9A, 0x5BF7, 0x8C9B, 0x5BF8, 0xB4E7, 0x5BF9, 0xB6D4, 0x5BFA, 0xCBC2,
- 0x5BFB, 0xD1B0, 0x5BFC, 0xB5BC, 0x5BFD, 0x8C9C, 0x5BFE, 0x8C9D, 0x5BFF, 0xCAD9, 0x5C00, 0x8C9E, 0x5C01, 0xB7E2, 0x5C02, 0x8C9F,
- 0x5C03, 0x8CA0, 0x5C04, 0xC9E4, 0x5C05, 0x8CA1, 0x5C06, 0xBDAB, 0x5C07, 0x8CA2, 0x5C08, 0x8CA3, 0x5C09, 0xCEBE, 0x5C0A, 0xD7F0,
- 0x5C0B, 0x8CA4, 0x5C0C, 0x8CA5, 0x5C0D, 0x8CA6, 0x5C0E, 0x8CA7, 0x5C0F, 0xD0A1, 0x5C10, 0x8CA8, 0x5C11, 0xC9D9, 0x5C12, 0x8CA9,
- 0x5C13, 0x8CAA, 0x5C14, 0xB6FB, 0x5C15, 0xE6D8, 0x5C16, 0xBCE2, 0x5C17, 0x8CAB, 0x5C18, 0xB3BE, 0x5C19, 0x8CAC, 0x5C1A, 0xC9D0,
- 0x5C1B, 0x8CAD, 0x5C1C, 0xE6D9, 0x5C1D, 0xB3A2, 0x5C1E, 0x8CAE, 0x5C1F, 0x8CAF, 0x5C20, 0x8CB0, 0x5C21, 0x8CB1, 0x5C22, 0xDECC,
- 0x5C23, 0x8CB2, 0x5C24, 0xD3C8, 0x5C25, 0xDECD, 0x5C26, 0x8CB3, 0x5C27, 0xD2A2, 0x5C28, 0x8CB4, 0x5C29, 0x8CB5, 0x5C2A, 0x8CB6,
- 0x5C2B, 0x8CB7, 0x5C2C, 0xDECE, 0x5C2D, 0x8CB8, 0x5C2E, 0x8CB9, 0x5C2F, 0x8CBA, 0x5C30, 0x8CBB, 0x5C31, 0xBECD, 0x5C32, 0x8CBC,
- 0x5C33, 0x8CBD, 0x5C34, 0xDECF, 0x5C35, 0x8CBE, 0x5C36, 0x8CBF, 0x5C37, 0x8CC0, 0x5C38, 0xCAAC, 0x5C39, 0xD2FC, 0x5C3A, 0xB3DF,
- 0x5C3B, 0xE5EA, 0x5C3C, 0xC4E1, 0x5C3D, 0xBEA1, 0x5C3E, 0xCEB2, 0x5C3F, 0xC4F2, 0x5C40, 0xBED6, 0x5C41, 0xC6A8, 0x5C42, 0xB2E3,
- 0x5C43, 0x8CC1, 0x5C44, 0x8CC2, 0x5C45, 0xBED3, 0x5C46, 0x8CC3, 0x5C47, 0x8CC4, 0x5C48, 0xC7FC, 0x5C49, 0xCCEB, 0x5C4A, 0xBDEC,
- 0x5C4B, 0xCEDD, 0x5C4C, 0x8CC5, 0x5C4D, 0x8CC6, 0x5C4E, 0xCABA, 0x5C4F, 0xC6C1, 0x5C50, 0xE5EC, 0x5C51, 0xD0BC, 0x5C52, 0x8CC7,
- 0x5C53, 0x8CC8, 0x5C54, 0x8CC9, 0x5C55, 0xD5B9, 0x5C56, 0x8CCA, 0x5C57, 0x8CCB, 0x5C58, 0x8CCC, 0x5C59, 0xE5ED, 0x5C5A, 0x8CCD,
- 0x5C5B, 0x8CCE, 0x5C5C, 0x8CCF, 0x5C5D, 0x8CD0, 0x5C5E, 0xCAF4, 0x5C5F, 0x8CD1, 0x5C60, 0xCDC0, 0x5C61, 0xC2C5, 0x5C62, 0x8CD2,
- 0x5C63, 0xE5EF, 0x5C64, 0x8CD3, 0x5C65, 0xC2C4, 0x5C66, 0xE5F0, 0x5C67, 0x8CD4, 0x5C68, 0x8CD5, 0x5C69, 0x8CD6, 0x5C6A, 0x8CD7,
- 0x5C6B, 0x8CD8, 0x5C6C, 0x8CD9, 0x5C6D, 0x8CDA, 0x5C6E, 0xE5F8, 0x5C6F, 0xCDCD, 0x5C70, 0x8CDB, 0x5C71, 0xC9BD, 0x5C72, 0x8CDC,
- 0x5C73, 0x8CDD, 0x5C74, 0x8CDE, 0x5C75, 0x8CDF, 0x5C76, 0x8CE0, 0x5C77, 0x8CE1, 0x5C78, 0x8CE2, 0x5C79, 0xD2D9, 0x5C7A, 0xE1A8,
- 0x5C7B, 0x8CE3, 0x5C7C, 0x8CE4, 0x5C7D, 0x8CE5, 0x5C7E, 0x8CE6, 0x5C7F, 0xD3EC, 0x5C80, 0x8CE7, 0x5C81, 0xCBEA, 0x5C82, 0xC6F1,
- 0x5C83, 0x8CE8, 0x5C84, 0x8CE9, 0x5C85, 0x8CEA, 0x5C86, 0x8CEB, 0x5C87, 0x8CEC, 0x5C88, 0xE1AC, 0x5C89, 0x8CED, 0x5C8A, 0x8CEE,
- 0x5C8B, 0x8CEF, 0x5C8C, 0xE1A7, 0x5C8D, 0xE1A9, 0x5C8E, 0x8CF0, 0x5C8F, 0x8CF1, 0x5C90, 0xE1AA, 0x5C91, 0xE1AF, 0x5C92, 0x8CF2,
- 0x5C93, 0x8CF3, 0x5C94, 0xB2ED, 0x5C95, 0x8CF4, 0x5C96, 0xE1AB, 0x5C97, 0xB8DA, 0x5C98, 0xE1AD, 0x5C99, 0xE1AE, 0x5C9A, 0xE1B0,
- 0x5C9B, 0xB5BA, 0x5C9C, 0xE1B1, 0x5C9D, 0x8CF5, 0x5C9E, 0x8CF6, 0x5C9F, 0x8CF7, 0x5CA0, 0x8CF8, 0x5CA1, 0x8CF9, 0x5CA2, 0xE1B3,
- 0x5CA3, 0xE1B8, 0x5CA4, 0x8CFA, 0x5CA5, 0x8CFB, 0x5CA6, 0x8CFC, 0x5CA7, 0x8CFD, 0x5CA8, 0x8CFE, 0x5CA9, 0xD1D2, 0x5CAA, 0x8D40,
- 0x5CAB, 0xE1B6, 0x5CAC, 0xE1B5, 0x5CAD, 0xC1EB, 0x5CAE, 0x8D41, 0x5CAF, 0x8D42, 0x5CB0, 0x8D43, 0x5CB1, 0xE1B7, 0x5CB2, 0x8D44,
- 0x5CB3, 0xD4C0, 0x5CB4, 0x8D45, 0x5CB5, 0xE1B2, 0x5CB6, 0x8D46, 0x5CB7, 0xE1BA, 0x5CB8, 0xB0B6, 0x5CB9, 0x8D47, 0x5CBA, 0x8D48,
- 0x5CBB, 0x8D49, 0x5CBC, 0x8D4A, 0x5CBD, 0xE1B4, 0x5CBE, 0x8D4B, 0x5CBF, 0xBFF9, 0x5CC0, 0x8D4C, 0x5CC1, 0xE1B9, 0x5CC2, 0x8D4D,
- 0x5CC3, 0x8D4E, 0x5CC4, 0xE1BB, 0x5CC5, 0x8D4F, 0x5CC6, 0x8D50, 0x5CC7, 0x8D51, 0x5CC8, 0x8D52, 0x5CC9, 0x8D53, 0x5CCA, 0x8D54,
- 0x5CCB, 0xE1BE, 0x5CCC, 0x8D55, 0x5CCD, 0x8D56, 0x5CCE, 0x8D57, 0x5CCF, 0x8D58, 0x5CD0, 0x8D59, 0x5CD1, 0x8D5A, 0x5CD2, 0xE1BC,
- 0x5CD3, 0x8D5B, 0x5CD4, 0x8D5C, 0x5CD5, 0x8D5D, 0x5CD6, 0x8D5E, 0x5CD7, 0x8D5F, 0x5CD8, 0x8D60, 0x5CD9, 0xD6C5, 0x5CDA, 0x8D61,
- 0x5CDB, 0x8D62, 0x5CDC, 0x8D63, 0x5CDD, 0x8D64, 0x5CDE, 0x8D65, 0x5CDF, 0x8D66, 0x5CE0, 0x8D67, 0x5CE1, 0xCFBF, 0x5CE2, 0x8D68,
- 0x5CE3, 0x8D69, 0x5CE4, 0xE1BD, 0x5CE5, 0xE1BF, 0x5CE6, 0xC2CD, 0x5CE7, 0x8D6A, 0x5CE8, 0xB6EB, 0x5CE9, 0x8D6B, 0x5CEA, 0xD3F8,
- 0x5CEB, 0x8D6C, 0x5CEC, 0x8D6D, 0x5CED, 0xC7CD, 0x5CEE, 0x8D6E, 0x5CEF, 0x8D6F, 0x5CF0, 0xB7E5, 0x5CF1, 0x8D70, 0x5CF2, 0x8D71,
- 0x5CF3, 0x8D72, 0x5CF4, 0x8D73, 0x5CF5, 0x8D74, 0x5CF6, 0x8D75, 0x5CF7, 0x8D76, 0x5CF8, 0x8D77, 0x5CF9, 0x8D78, 0x5CFA, 0x8D79,
- 0x5CFB, 0xBEFE, 0x5CFC, 0x8D7A, 0x5CFD, 0x8D7B, 0x5CFE, 0x8D7C, 0x5CFF, 0x8D7D, 0x5D00, 0x8D7E, 0x5D01, 0x8D80, 0x5D02, 0xE1C0,
- 0x5D03, 0xE1C1, 0x5D04, 0x8D81, 0x5D05, 0x8D82, 0x5D06, 0xE1C7, 0x5D07, 0xB3E7, 0x5D08, 0x8D83, 0x5D09, 0x8D84, 0x5D0A, 0x8D85,
- 0x5D0B, 0x8D86, 0x5D0C, 0x8D87, 0x5D0D, 0x8D88, 0x5D0E, 0xC6E9, 0x5D0F, 0x8D89, 0x5D10, 0x8D8A, 0x5D11, 0x8D8B, 0x5D12, 0x8D8C,
- 0x5D13, 0x8D8D, 0x5D14, 0xB4DE, 0x5D15, 0x8D8E, 0x5D16, 0xD1C2, 0x5D17, 0x8D8F, 0x5D18, 0x8D90, 0x5D19, 0x8D91, 0x5D1A, 0x8D92,
- 0x5D1B, 0xE1C8, 0x5D1C, 0x8D93, 0x5D1D, 0x8D94, 0x5D1E, 0xE1C6, 0x5D1F, 0x8D95, 0x5D20, 0x8D96, 0x5D21, 0x8D97, 0x5D22, 0x8D98,
- 0x5D23, 0x8D99, 0x5D24, 0xE1C5, 0x5D25, 0x8D9A, 0x5D26, 0xE1C3, 0x5D27, 0xE1C2, 0x5D28, 0x8D9B, 0x5D29, 0xB1C0, 0x5D2A, 0x8D9C,
- 0x5D2B, 0x8D9D, 0x5D2C, 0x8D9E, 0x5D2D, 0xD5B8, 0x5D2E, 0xE1C4, 0x5D2F, 0x8D9F, 0x5D30, 0x8DA0, 0x5D31, 0x8DA1, 0x5D32, 0x8DA2,
- 0x5D33, 0x8DA3, 0x5D34, 0xE1CB, 0x5D35, 0x8DA4, 0x5D36, 0x8DA5, 0x5D37, 0x8DA6, 0x5D38, 0x8DA7, 0x5D39, 0x8DA8, 0x5D3A, 0x8DA9,
- 0x5D3B, 0x8DAA, 0x5D3C, 0x8DAB, 0x5D3D, 0xE1CC, 0x5D3E, 0xE1CA, 0x5D3F, 0x8DAC, 0x5D40, 0x8DAD, 0x5D41, 0x8DAE, 0x5D42, 0x8DAF,
- 0x5D43, 0x8DB0, 0x5D44, 0x8DB1, 0x5D45, 0x8DB2, 0x5D46, 0x8DB3, 0x5D47, 0xEFFA, 0x5D48, 0x8DB4, 0x5D49, 0x8DB5, 0x5D4A, 0xE1D3,
- 0x5D4B, 0xE1D2, 0x5D4C, 0xC7B6, 0x5D4D, 0x8DB6, 0x5D4E, 0x8DB7, 0x5D4F, 0x8DB8, 0x5D50, 0x8DB9, 0x5D51, 0x8DBA, 0x5D52, 0x8DBB,
- 0x5D53, 0x8DBC, 0x5D54, 0x8DBD, 0x5D55, 0x8DBE, 0x5D56, 0x8DBF, 0x5D57, 0x8DC0, 0x5D58, 0xE1C9, 0x5D59, 0x8DC1, 0x5D5A, 0x8DC2,
- 0x5D5B, 0xE1CE, 0x5D5C, 0x8DC3, 0x5D5D, 0xE1D0, 0x5D5E, 0x8DC4, 0x5D5F, 0x8DC5, 0x5D60, 0x8DC6, 0x5D61, 0x8DC7, 0x5D62, 0x8DC8,
- 0x5D63, 0x8DC9, 0x5D64, 0x8DCA, 0x5D65, 0x8DCB, 0x5D66, 0x8DCC, 0x5D67, 0x8DCD, 0x5D68, 0x8DCE, 0x5D69, 0xE1D4, 0x5D6A, 0x8DCF,
- 0x5D6B, 0xE1D1, 0x5D6C, 0xE1CD, 0x5D6D, 0x8DD0, 0x5D6E, 0x8DD1, 0x5D6F, 0xE1CF, 0x5D70, 0x8DD2, 0x5D71, 0x8DD3, 0x5D72, 0x8DD4,
- 0x5D73, 0x8DD5, 0x5D74, 0xE1D5, 0x5D75, 0x8DD6, 0x5D76, 0x8DD7, 0x5D77, 0x8DD8, 0x5D78, 0x8DD9, 0x5D79, 0x8DDA, 0x5D7A, 0x8DDB,
- 0x5D7B, 0x8DDC, 0x5D7C, 0x8DDD, 0x5D7D, 0x8DDE, 0x5D7E, 0x8DDF, 0x5D7F, 0x8DE0, 0x5D80, 0x8DE1, 0x5D81, 0x8DE2, 0x5D82, 0xE1D6,
- 0x5D83, 0x8DE3, 0x5D84, 0x8DE4, 0x5D85, 0x8DE5, 0x5D86, 0x8DE6, 0x5D87, 0x8DE7, 0x5D88, 0x8DE8, 0x5D89, 0x8DE9, 0x5D8A, 0x8DEA,
- 0x5D8B, 0x8DEB, 0x5D8C, 0x8DEC, 0x5D8D, 0x8DED, 0x5D8E, 0x8DEE, 0x5D8F, 0x8DEF, 0x5D90, 0x8DF0, 0x5D91, 0x8DF1, 0x5D92, 0x8DF2,
- 0x5D93, 0x8DF3, 0x5D94, 0x8DF4, 0x5D95, 0x8DF5, 0x5D96, 0x8DF6, 0x5D97, 0x8DF7, 0x5D98, 0x8DF8, 0x5D99, 0xE1D7, 0x5D9A, 0x8DF9,
- 0x5D9B, 0x8DFA, 0x5D9C, 0x8DFB, 0x5D9D, 0xE1D8, 0x5D9E, 0x8DFC, 0x5D9F, 0x8DFD, 0x5DA0, 0x8DFE, 0x5DA1, 0x8E40, 0x5DA2, 0x8E41,
- 0x5DA3, 0x8E42, 0x5DA4, 0x8E43, 0x5DA5, 0x8E44, 0x5DA6, 0x8E45, 0x5DA7, 0x8E46, 0x5DA8, 0x8E47, 0x5DA9, 0x8E48, 0x5DAA, 0x8E49,
- 0x5DAB, 0x8E4A, 0x5DAC, 0x8E4B, 0x5DAD, 0x8E4C, 0x5DAE, 0x8E4D, 0x5DAF, 0x8E4E, 0x5DB0, 0x8E4F, 0x5DB1, 0x8E50, 0x5DB2, 0x8E51,
- 0x5DB3, 0x8E52, 0x5DB4, 0x8E53, 0x5DB5, 0x8E54, 0x5DB6, 0x8E55, 0x5DB7, 0xE1DA, 0x5DB8, 0x8E56, 0x5DB9, 0x8E57, 0x5DBA, 0x8E58,
- 0x5DBB, 0x8E59, 0x5DBC, 0x8E5A, 0x5DBD, 0x8E5B, 0x5DBE, 0x8E5C, 0x5DBF, 0x8E5D, 0x5DC0, 0x8E5E, 0x5DC1, 0x8E5F, 0x5DC2, 0x8E60,
- 0x5DC3, 0x8E61, 0x5DC4, 0x8E62, 0x5DC5, 0xE1DB, 0x5DC6, 0x8E63, 0x5DC7, 0x8E64, 0x5DC8, 0x8E65, 0x5DC9, 0x8E66, 0x5DCA, 0x8E67,
- 0x5DCB, 0x8E68, 0x5DCC, 0x8E69, 0x5DCD, 0xCEA1, 0x5DCE, 0x8E6A, 0x5DCF, 0x8E6B, 0x5DD0, 0x8E6C, 0x5DD1, 0x8E6D, 0x5DD2, 0x8E6E,
- 0x5DD3, 0x8E6F, 0x5DD4, 0x8E70, 0x5DD5, 0x8E71, 0x5DD6, 0x8E72, 0x5DD7, 0x8E73, 0x5DD8, 0x8E74, 0x5DD9, 0x8E75, 0x5DDA, 0x8E76,
- 0x5DDB, 0xE7DD, 0x5DDC, 0x8E77, 0x5DDD, 0xB4A8, 0x5DDE, 0xD6DD, 0x5DDF, 0x8E78, 0x5DE0, 0x8E79, 0x5DE1, 0xD1B2, 0x5DE2, 0xB3B2,
- 0x5DE3, 0x8E7A, 0x5DE4, 0x8E7B, 0x5DE5, 0xB9A4, 0x5DE6, 0xD7F3, 0x5DE7, 0xC7C9, 0x5DE8, 0xBEDE, 0x5DE9, 0xB9AE, 0x5DEA, 0x8E7C,
- 0x5DEB, 0xCED7, 0x5DEC, 0x8E7D, 0x5DED, 0x8E7E, 0x5DEE, 0xB2EE, 0x5DEF, 0xDBCF, 0x5DF0, 0x8E80, 0x5DF1, 0xBCBA, 0x5DF2, 0xD2D1,
- 0x5DF3, 0xCBC8, 0x5DF4, 0xB0CD, 0x5DF5, 0x8E81, 0x5DF6, 0x8E82, 0x5DF7, 0xCFEF, 0x5DF8, 0x8E83, 0x5DF9, 0x8E84, 0x5DFA, 0x8E85,
- 0x5DFB, 0x8E86, 0x5DFC, 0x8E87, 0x5DFD, 0xD9E3, 0x5DFE, 0xBDED, 0x5DFF, 0x8E88, 0x5E00, 0x8E89, 0x5E01, 0xB1D2, 0x5E02, 0xCAD0,
- 0x5E03, 0xB2BC, 0x5E04, 0x8E8A, 0x5E05, 0xCBA7, 0x5E06, 0xB7AB, 0x5E07, 0x8E8B, 0x5E08, 0xCAA6, 0x5E09, 0x8E8C, 0x5E0A, 0x8E8D,
- 0x5E0B, 0x8E8E, 0x5E0C, 0xCFA3, 0x5E0D, 0x8E8F, 0x5E0E, 0x8E90, 0x5E0F, 0xE0F8, 0x5E10, 0xD5CA, 0x5E11, 0xE0FB, 0x5E12, 0x8E91,
- 0x5E13, 0x8E92, 0x5E14, 0xE0FA, 0x5E15, 0xC5C1, 0x5E16, 0xCCFB, 0x5E17, 0x8E93, 0x5E18, 0xC1B1, 0x5E19, 0xE0F9, 0x5E1A, 0xD6E3,
- 0x5E1B, 0xB2AF, 0x5E1C, 0xD6C4, 0x5E1D, 0xB5DB, 0x5E1E, 0x8E94, 0x5E1F, 0x8E95, 0x5E20, 0x8E96, 0x5E21, 0x8E97, 0x5E22, 0x8E98,
- 0x5E23, 0x8E99, 0x5E24, 0x8E9A, 0x5E25, 0x8E9B, 0x5E26, 0xB4F8, 0x5E27, 0xD6A1, 0x5E28, 0x8E9C, 0x5E29, 0x8E9D, 0x5E2A, 0x8E9E,
- 0x5E2B, 0x8E9F, 0x5E2C, 0x8EA0, 0x5E2D, 0xCFAF, 0x5E2E, 0xB0EF, 0x5E2F, 0x8EA1, 0x5E30, 0x8EA2, 0x5E31, 0xE0FC, 0x5E32, 0x8EA3,
- 0x5E33, 0x8EA4, 0x5E34, 0x8EA5, 0x5E35, 0x8EA6, 0x5E36, 0x8EA7, 0x5E37, 0xE1A1, 0x5E38, 0xB3A3, 0x5E39, 0x8EA8, 0x5E3A, 0x8EA9,
- 0x5E3B, 0xE0FD, 0x5E3C, 0xE0FE, 0x5E3D, 0xC3B1, 0x5E3E, 0x8EAA, 0x5E3F, 0x8EAB, 0x5E40, 0x8EAC, 0x5E41, 0x8EAD, 0x5E42, 0xC3DD,
- 0x5E43, 0x8EAE, 0x5E44, 0xE1A2, 0x5E45, 0xB7F9, 0x5E46, 0x8EAF, 0x5E47, 0x8EB0, 0x5E48, 0x8EB1, 0x5E49, 0x8EB2, 0x5E4A, 0x8EB3,
- 0x5E4B, 0x8EB4, 0x5E4C, 0xBBCF, 0x5E4D, 0x8EB5, 0x5E4E, 0x8EB6, 0x5E4F, 0x8EB7, 0x5E50, 0x8EB8, 0x5E51, 0x8EB9, 0x5E52, 0x8EBA,
- 0x5E53, 0x8EBB, 0x5E54, 0xE1A3, 0x5E55, 0xC4BB, 0x5E56, 0x8EBC, 0x5E57, 0x8EBD, 0x5E58, 0x8EBE, 0x5E59, 0x8EBF, 0x5E5A, 0x8EC0,
- 0x5E5B, 0xE1A4, 0x5E5C, 0x8EC1, 0x5E5D, 0x8EC2, 0x5E5E, 0xE1A5, 0x5E5F, 0x8EC3, 0x5E60, 0x8EC4, 0x5E61, 0xE1A6, 0x5E62, 0xB4B1,
- 0x5E63, 0x8EC5, 0x5E64, 0x8EC6, 0x5E65, 0x8EC7, 0x5E66, 0x8EC8, 0x5E67, 0x8EC9, 0x5E68, 0x8ECA, 0x5E69, 0x8ECB, 0x5E6A, 0x8ECC,
- 0x5E6B, 0x8ECD, 0x5E6C, 0x8ECE, 0x5E6D, 0x8ECF, 0x5E6E, 0x8ED0, 0x5E6F, 0x8ED1, 0x5E70, 0x8ED2, 0x5E71, 0x8ED3, 0x5E72, 0xB8C9,
- 0x5E73, 0xC6BD, 0x5E74, 0xC4EA, 0x5E75, 0x8ED4, 0x5E76, 0xB2A2, 0x5E77, 0x8ED5, 0x5E78, 0xD0D2, 0x5E79, 0x8ED6, 0x5E7A, 0xE7DB,
- 0x5E7B, 0xBBC3, 0x5E7C, 0xD3D7, 0x5E7D, 0xD3C4, 0x5E7E, 0x8ED7, 0x5E7F, 0xB9E3, 0x5E80, 0xE2CF, 0x5E81, 0x8ED8, 0x5E82, 0x8ED9,
- 0x5E83, 0x8EDA, 0x5E84, 0xD7AF, 0x5E85, 0x8EDB, 0x5E86, 0xC7EC, 0x5E87, 0xB1D3, 0x5E88, 0x8EDC, 0x5E89, 0x8EDD, 0x5E8A, 0xB4B2,
- 0x5E8B, 0xE2D1, 0x5E8C, 0x8EDE, 0x5E8D, 0x8EDF, 0x5E8E, 0x8EE0, 0x5E8F, 0xD0F2, 0x5E90, 0xC2AE, 0x5E91, 0xE2D0, 0x5E92, 0x8EE1,
- 0x5E93, 0xBFE2, 0x5E94, 0xD3A6, 0x5E95, 0xB5D7, 0x5E96, 0xE2D2, 0x5E97, 0xB5EA, 0x5E98, 0x8EE2, 0x5E99, 0xC3ED, 0x5E9A, 0xB8FD,
- 0x5E9B, 0x8EE3, 0x5E9C, 0xB8AE, 0x5E9D, 0x8EE4, 0x5E9E, 0xC5D3, 0x5E9F, 0xB7CF, 0x5EA0, 0xE2D4, 0x5EA1, 0x8EE5, 0x5EA2, 0x8EE6,
- 0x5EA3, 0x8EE7, 0x5EA4, 0x8EE8, 0x5EA5, 0xE2D3, 0x5EA6, 0xB6C8, 0x5EA7, 0xD7F9, 0x5EA8, 0x8EE9, 0x5EA9, 0x8EEA, 0x5EAA, 0x8EEB,
- 0x5EAB, 0x8EEC, 0x5EAC, 0x8EED, 0x5EAD, 0xCDA5, 0x5EAE, 0x8EEE, 0x5EAF, 0x8EEF, 0x5EB0, 0x8EF0, 0x5EB1, 0x8EF1, 0x5EB2, 0x8EF2,
- 0x5EB3, 0xE2D8, 0x5EB4, 0x8EF3, 0x5EB5, 0xE2D6, 0x5EB6, 0xCAFC, 0x5EB7, 0xBFB5, 0x5EB8, 0xD3B9, 0x5EB9, 0xE2D5, 0x5EBA, 0x8EF4,
- 0x5EBB, 0x8EF5, 0x5EBC, 0x8EF6, 0x5EBD, 0x8EF7, 0x5EBE, 0xE2D7, 0x5EBF, 0x8EF8, 0x5EC0, 0x8EF9, 0x5EC1, 0x8EFA, 0x5EC2, 0x8EFB,
- 0x5EC3, 0x8EFC, 0x5EC4, 0x8EFD, 0x5EC5, 0x8EFE, 0x5EC6, 0x8F40, 0x5EC7, 0x8F41, 0x5EC8, 0x8F42, 0x5EC9, 0xC1AE, 0x5ECA, 0xC0C8,
- 0x5ECB, 0x8F43, 0x5ECC, 0x8F44, 0x5ECD, 0x8F45, 0x5ECE, 0x8F46, 0x5ECF, 0x8F47, 0x5ED0, 0x8F48, 0x5ED1, 0xE2DB, 0x5ED2, 0xE2DA,
- 0x5ED3, 0xC0AA, 0x5ED4, 0x8F49, 0x5ED5, 0x8F4A, 0x5ED6, 0xC1CE, 0x5ED7, 0x8F4B, 0x5ED8, 0x8F4C, 0x5ED9, 0x8F4D, 0x5EDA, 0x8F4E,
- 0x5EDB, 0xE2DC, 0x5EDC, 0x8F4F, 0x5EDD, 0x8F50, 0x5EDE, 0x8F51, 0x5EDF, 0x8F52, 0x5EE0, 0x8F53, 0x5EE1, 0x8F54, 0x5EE2, 0x8F55,
- 0x5EE3, 0x8F56, 0x5EE4, 0x8F57, 0x5EE5, 0x8F58, 0x5EE6, 0x8F59, 0x5EE7, 0x8F5A, 0x5EE8, 0xE2DD, 0x5EE9, 0x8F5B, 0x5EEA, 0xE2DE,
- 0x5EEB, 0x8F5C, 0x5EEC, 0x8F5D, 0x5EED, 0x8F5E, 0x5EEE, 0x8F5F, 0x5EEF, 0x8F60, 0x5EF0, 0x8F61, 0x5EF1, 0x8F62, 0x5EF2, 0x8F63,
- 0x5EF3, 0x8F64, 0x5EF4, 0xDBC8, 0x5EF5, 0x8F65, 0x5EF6, 0xD1D3, 0x5EF7, 0xCDA2, 0x5EF8, 0x8F66, 0x5EF9, 0x8F67, 0x5EFA, 0xBDA8,
- 0x5EFB, 0x8F68, 0x5EFC, 0x8F69, 0x5EFD, 0x8F6A, 0x5EFE, 0xDEC3, 0x5EFF, 0xD8A5, 0x5F00, 0xBFAA, 0x5F01, 0xDBCD, 0x5F02, 0xD2EC,
- 0x5F03, 0xC6FA, 0x5F04, 0xC5AA, 0x5F05, 0x8F6B, 0x5F06, 0x8F6C, 0x5F07, 0x8F6D, 0x5F08, 0xDEC4, 0x5F09, 0x8F6E, 0x5F0A, 0xB1D7,
- 0x5F0B, 0xDFAE, 0x5F0C, 0x8F6F, 0x5F0D, 0x8F70, 0x5F0E, 0x8F71, 0x5F0F, 0xCABD, 0x5F10, 0x8F72, 0x5F11, 0xDFB1, 0x5F12, 0x8F73,
- 0x5F13, 0xB9AD, 0x5F14, 0x8F74, 0x5F15, 0xD2FD, 0x5F16, 0x8F75, 0x5F17, 0xB8A5, 0x5F18, 0xBAEB, 0x5F19, 0x8F76, 0x5F1A, 0x8F77,
- 0x5F1B, 0xB3DA, 0x5F1C, 0x8F78, 0x5F1D, 0x8F79, 0x5F1E, 0x8F7A, 0x5F1F, 0xB5DC, 0x5F20, 0xD5C5, 0x5F21, 0x8F7B, 0x5F22, 0x8F7C,
- 0x5F23, 0x8F7D, 0x5F24, 0x8F7E, 0x5F25, 0xC3D6, 0x5F26, 0xCFD2, 0x5F27, 0xBBA1, 0x5F28, 0x8F80, 0x5F29, 0xE5F3, 0x5F2A, 0xE5F2,
- 0x5F2B, 0x8F81, 0x5F2C, 0x8F82, 0x5F2D, 0xE5F4, 0x5F2E, 0x8F83, 0x5F2F, 0xCDE4, 0x5F30, 0x8F84, 0x5F31, 0xC8F5, 0x5F32, 0x8F85,
- 0x5F33, 0x8F86, 0x5F34, 0x8F87, 0x5F35, 0x8F88, 0x5F36, 0x8F89, 0x5F37, 0x8F8A, 0x5F38, 0x8F8B, 0x5F39, 0xB5AF, 0x5F3A, 0xC7BF,
- 0x5F3B, 0x8F8C, 0x5F3C, 0xE5F6, 0x5F3D, 0x8F8D, 0x5F3E, 0x8F8E, 0x5F3F, 0x8F8F, 0x5F40, 0xECB0, 0x5F41, 0x8F90, 0x5F42, 0x8F91,
- 0x5F43, 0x8F92, 0x5F44, 0x8F93, 0x5F45, 0x8F94, 0x5F46, 0x8F95, 0x5F47, 0x8F96, 0x5F48, 0x8F97, 0x5F49, 0x8F98, 0x5F4A, 0x8F99,
- 0x5F4B, 0x8F9A, 0x5F4C, 0x8F9B, 0x5F4D, 0x8F9C, 0x5F4E, 0x8F9D, 0x5F4F, 0x8F9E, 0x5F50, 0xE5E6, 0x5F51, 0x8F9F, 0x5F52, 0xB9E9,
- 0x5F53, 0xB5B1, 0x5F54, 0x8FA0, 0x5F55, 0xC2BC, 0x5F56, 0xE5E8, 0x5F57, 0xE5E7, 0x5F58, 0xE5E9, 0x5F59, 0x8FA1, 0x5F5A, 0x8FA2,
- 0x5F5B, 0x8FA3, 0x5F5C, 0x8FA4, 0x5F5D, 0xD2CD, 0x5F5E, 0x8FA5, 0x5F5F, 0x8FA6, 0x5F60, 0x8FA7, 0x5F61, 0xE1EA, 0x5F62, 0xD0CE,
- 0x5F63, 0x8FA8, 0x5F64, 0xCDAE, 0x5F65, 0x8FA9, 0x5F66, 0xD1E5, 0x5F67, 0x8FAA, 0x5F68, 0x8FAB, 0x5F69, 0xB2CA, 0x5F6A, 0xB1EB,
- 0x5F6B, 0x8FAC, 0x5F6C, 0xB1F2, 0x5F6D, 0xC5ED, 0x5F6E, 0x8FAD, 0x5F6F, 0x8FAE, 0x5F70, 0xD5C3, 0x5F71, 0xD3B0, 0x5F72, 0x8FAF,
- 0x5F73, 0xE1DC, 0x5F74, 0x8FB0, 0x5F75, 0x8FB1, 0x5F76, 0x8FB2, 0x5F77, 0xE1DD, 0x5F78, 0x8FB3, 0x5F79, 0xD2DB, 0x5F7A, 0x8FB4,
- 0x5F7B, 0xB3B9, 0x5F7C, 0xB1CB, 0x5F7D, 0x8FB5, 0x5F7E, 0x8FB6, 0x5F7F, 0x8FB7, 0x5F80, 0xCDF9, 0x5F81, 0xD5F7, 0x5F82, 0xE1DE,
- 0x5F83, 0x8FB8, 0x5F84, 0xBEB6, 0x5F85, 0xB4FD, 0x5F86, 0x8FB9, 0x5F87, 0xE1DF, 0x5F88, 0xBADC, 0x5F89, 0xE1E0, 0x5F8A, 0xBBB2,
- 0x5F8B, 0xC2C9, 0x5F8C, 0xE1E1, 0x5F8D, 0x8FBA, 0x5F8E, 0x8FBB, 0x5F8F, 0x8FBC, 0x5F90, 0xD0EC, 0x5F91, 0x8FBD, 0x5F92, 0xCDBD,
- 0x5F93, 0x8FBE, 0x5F94, 0x8FBF, 0x5F95, 0xE1E2, 0x5F96, 0x8FC0, 0x5F97, 0xB5C3, 0x5F98, 0xC5C7, 0x5F99, 0xE1E3, 0x5F9A, 0x8FC1,
- 0x5F9B, 0x8FC2, 0x5F9C, 0xE1E4, 0x5F9D, 0x8FC3, 0x5F9E, 0x8FC4, 0x5F9F, 0x8FC5, 0x5FA0, 0x8FC6, 0x5FA1, 0xD3F9, 0x5FA2, 0x8FC7,
- 0x5FA3, 0x8FC8, 0x5FA4, 0x8FC9, 0x5FA5, 0x8FCA, 0x5FA6, 0x8FCB, 0x5FA7, 0x8FCC, 0x5FA8, 0xE1E5, 0x5FA9, 0x8FCD, 0x5FAA, 0xD1AD,
- 0x5FAB, 0x8FCE, 0x5FAC, 0x8FCF, 0x5FAD, 0xE1E6, 0x5FAE, 0xCEA2, 0x5FAF, 0x8FD0, 0x5FB0, 0x8FD1, 0x5FB1, 0x8FD2, 0x5FB2, 0x8FD3,
- 0x5FB3, 0x8FD4, 0x5FB4, 0x8FD5, 0x5FB5, 0xE1E7, 0x5FB6, 0x8FD6, 0x5FB7, 0xB5C2, 0x5FB8, 0x8FD7, 0x5FB9, 0x8FD8, 0x5FBA, 0x8FD9,
- 0x5FBB, 0x8FDA, 0x5FBC, 0xE1E8, 0x5FBD, 0xBBD5, 0x5FBE, 0x8FDB, 0x5FBF, 0x8FDC, 0x5FC0, 0x8FDD, 0x5FC1, 0x8FDE, 0x5FC2, 0x8FDF,
- 0x5FC3, 0xD0C4, 0x5FC4, 0xE2E0, 0x5FC5, 0xB1D8, 0x5FC6, 0xD2E4, 0x5FC7, 0x8FE0, 0x5FC8, 0x8FE1, 0x5FC9, 0xE2E1, 0x5FCA, 0x8FE2,
- 0x5FCB, 0x8FE3, 0x5FCC, 0xBCC9, 0x5FCD, 0xC8CC, 0x5FCE, 0x8FE4, 0x5FCF, 0xE2E3, 0x5FD0, 0xECFE, 0x5FD1, 0xECFD, 0x5FD2, 0xDFAF,
- 0x5FD3, 0x8FE5, 0x5FD4, 0x8FE6, 0x5FD5, 0x8FE7, 0x5FD6, 0xE2E2, 0x5FD7, 0xD6BE, 0x5FD8, 0xCDFC, 0x5FD9, 0xC3A6, 0x5FDA, 0x8FE8,
- 0x5FDB, 0x8FE9, 0x5FDC, 0x8FEA, 0x5FDD, 0xE3C3, 0x5FDE, 0x8FEB, 0x5FDF, 0x8FEC, 0x5FE0, 0xD6D2, 0x5FE1, 0xE2E7, 0x5FE2, 0x8FED,
- 0x5FE3, 0x8FEE, 0x5FE4, 0xE2E8, 0x5FE5, 0x8FEF, 0x5FE6, 0x8FF0, 0x5FE7, 0xD3C7, 0x5FE8, 0x8FF1, 0x5FE9, 0x8FF2, 0x5FEA, 0xE2EC,
- 0x5FEB, 0xBFEC, 0x5FEC, 0x8FF3, 0x5FED, 0xE2ED, 0x5FEE, 0xE2E5, 0x5FEF, 0x8FF4, 0x5FF0, 0x8FF5, 0x5FF1, 0xB3C0, 0x5FF2, 0x8FF6,
- 0x5FF3, 0x8FF7, 0x5FF4, 0x8FF8, 0x5FF5, 0xC4EE, 0x5FF6, 0x8FF9, 0x5FF7, 0x8FFA, 0x5FF8, 0xE2EE, 0x5FF9, 0x8FFB, 0x5FFA, 0x8FFC,
- 0x5FFB, 0xD0C3, 0x5FFC, 0x8FFD, 0x5FFD, 0xBAF6, 0x5FFE, 0xE2E9, 0x5FFF, 0xB7DE, 0x6000, 0xBBB3, 0x6001, 0xCCAC, 0x6002, 0xCBCB,
- 0x6003, 0xE2E4, 0x6004, 0xE2E6, 0x6005, 0xE2EA, 0x6006, 0xE2EB, 0x6007, 0x8FFE, 0x6008, 0x9040, 0x6009, 0x9041, 0x600A, 0xE2F7,
- 0x600B, 0x9042, 0x600C, 0x9043, 0x600D, 0xE2F4, 0x600E, 0xD4F5, 0x600F, 0xE2F3, 0x6010, 0x9044, 0x6011, 0x9045, 0x6012, 0xC5AD,
- 0x6013, 0x9046, 0x6014, 0xD5FA, 0x6015, 0xC5C2, 0x6016, 0xB2C0, 0x6017, 0x9047, 0x6018, 0x9048, 0x6019, 0xE2EF, 0x601A, 0x9049,
- 0x601B, 0xE2F2, 0x601C, 0xC1AF, 0x601D, 0xCBBC, 0x601E, 0x904A, 0x601F, 0x904B, 0x6020, 0xB5A1, 0x6021, 0xE2F9, 0x6022, 0x904C,
- 0x6023, 0x904D, 0x6024, 0x904E, 0x6025, 0xBCB1, 0x6026, 0xE2F1, 0x6027, 0xD0D4, 0x6028, 0xD4B9, 0x6029, 0xE2F5, 0x602A, 0xB9D6,
- 0x602B, 0xE2F6, 0x602C, 0x904F, 0x602D, 0x9050, 0x602E, 0x9051, 0x602F, 0xC7D3, 0x6030, 0x9052, 0x6031, 0x9053, 0x6032, 0x9054,
- 0x6033, 0x9055, 0x6034, 0x9056, 0x6035, 0xE2F0, 0x6036, 0x9057, 0x6037, 0x9058, 0x6038, 0x9059, 0x6039, 0x905A, 0x603A, 0x905B,
- 0x603B, 0xD7DC, 0x603C, 0xEDA1, 0x603D, 0x905C, 0x603E, 0x905D, 0x603F, 0xE2F8, 0x6040, 0x905E, 0x6041, 0xEDA5, 0x6042, 0xE2FE,
- 0x6043, 0xCAD1, 0x6044, 0x905F, 0x6045, 0x9060, 0x6046, 0x9061, 0x6047, 0x9062, 0x6048, 0x9063, 0x6049, 0x9064, 0x604A, 0x9065,
- 0x604B, 0xC1B5, 0x604C, 0x9066, 0x604D, 0xBBD0, 0x604E, 0x9067, 0x604F, 0x9068, 0x6050, 0xBFD6, 0x6051, 0x9069, 0x6052, 0xBAE3,
- 0x6053, 0x906A, 0x6054, 0x906B, 0x6055, 0xCBA1, 0x6056, 0x906C, 0x6057, 0x906D, 0x6058, 0x906E, 0x6059, 0xEDA6, 0x605A, 0xEDA3,
- 0x605B, 0x906F, 0x605C, 0x9070, 0x605D, 0xEDA2, 0x605E, 0x9071, 0x605F, 0x9072, 0x6060, 0x9073, 0x6061, 0x9074, 0x6062, 0xBBD6,
- 0x6063, 0xEDA7, 0x6064, 0xD0F4, 0x6065, 0x9075, 0x6066, 0x9076, 0x6067, 0xEDA4, 0x6068, 0xBADE, 0x6069, 0xB6F7, 0x606A, 0xE3A1,
- 0x606B, 0xB6B2, 0x606C, 0xCCF1, 0x606D, 0xB9A7, 0x606E, 0x9077, 0x606F, 0xCFA2, 0x6070, 0xC7A1, 0x6071, 0x9078, 0x6072, 0x9079,
- 0x6073, 0xBFD2, 0x6074, 0x907A, 0x6075, 0x907B, 0x6076, 0xB6F1, 0x6077, 0x907C, 0x6078, 0xE2FA, 0x6079, 0xE2FB, 0x607A, 0xE2FD,
- 0x607B, 0xE2FC, 0x607C, 0xC4D5, 0x607D, 0xE3A2, 0x607E, 0x907D, 0x607F, 0xD3C1, 0x6080, 0x907E, 0x6081, 0x9080, 0x6082, 0x9081,
- 0x6083, 0xE3A7, 0x6084, 0xC7C4, 0x6085, 0x9082, 0x6086, 0x9083, 0x6087, 0x9084, 0x6088, 0x9085, 0x6089, 0xCFA4, 0x608A, 0x9086,
- 0x608B, 0x9087, 0x608C, 0xE3A9, 0x608D, 0xBAB7, 0x608E, 0x9088, 0x608F, 0x9089, 0x6090, 0x908A, 0x6091, 0x908B, 0x6092, 0xE3A8,
- 0x6093, 0x908C, 0x6094, 0xBBDA, 0x6095, 0x908D, 0x6096, 0xE3A3, 0x6097, 0x908E, 0x6098, 0x908F, 0x6099, 0x9090, 0x609A, 0xE3A4,
- 0x609B, 0xE3AA, 0x609C, 0x9091, 0x609D, 0xE3A6, 0x609E, 0x9092, 0x609F, 0xCEF2, 0x60A0, 0xD3C6, 0x60A1, 0x9093, 0x60A2, 0x9094,
- 0x60A3, 0xBBBC, 0x60A4, 0x9095, 0x60A5, 0x9096, 0x60A6, 0xD4C3, 0x60A7, 0x9097, 0x60A8, 0xC4FA, 0x60A9, 0x9098, 0x60AA, 0x9099,
- 0x60AB, 0xEDA8, 0x60AC, 0xD0FC, 0x60AD, 0xE3A5, 0x60AE, 0x909A, 0x60AF, 0xC3F5, 0x60B0, 0x909B, 0x60B1, 0xE3AD, 0x60B2, 0xB1AF,
- 0x60B3, 0x909C, 0x60B4, 0xE3B2, 0x60B5, 0x909D, 0x60B6, 0x909E, 0x60B7, 0x909F, 0x60B8, 0xBCC2, 0x60B9, 0x90A0, 0x60BA, 0x90A1,
- 0x60BB, 0xE3AC, 0x60BC, 0xB5BF, 0x60BD, 0x90A2, 0x60BE, 0x90A3, 0x60BF, 0x90A4, 0x60C0, 0x90A5, 0x60C1, 0x90A6, 0x60C2, 0x90A7,
- 0x60C3, 0x90A8, 0x60C4, 0x90A9, 0x60C5, 0xC7E9, 0x60C6, 0xE3B0, 0x60C7, 0x90AA, 0x60C8, 0x90AB, 0x60C9, 0x90AC, 0x60CA, 0xBEAA,
- 0x60CB, 0xCDEF, 0x60CC, 0x90AD, 0x60CD, 0x90AE, 0x60CE, 0x90AF, 0x60CF, 0x90B0, 0x60D0, 0x90B1, 0x60D1, 0xBBF3, 0x60D2, 0x90B2,
- 0x60D3, 0x90B3, 0x60D4, 0x90B4, 0x60D5, 0xCCE8, 0x60D6, 0x90B5, 0x60D7, 0x90B6, 0x60D8, 0xE3AF, 0x60D9, 0x90B7, 0x60DA, 0xE3B1,
- 0x60DB, 0x90B8, 0x60DC, 0xCFA7, 0x60DD, 0xE3AE, 0x60DE, 0x90B9, 0x60DF, 0xCEA9, 0x60E0, 0xBBDD, 0x60E1, 0x90BA, 0x60E2, 0x90BB,
- 0x60E3, 0x90BC, 0x60E4, 0x90BD, 0x60E5, 0x90BE, 0x60E6, 0xB5EB, 0x60E7, 0xBEE5, 0x60E8, 0xB2D2, 0x60E9, 0xB3CD, 0x60EA, 0x90BF,
- 0x60EB, 0xB1B9, 0x60EC, 0xE3AB, 0x60ED, 0xB2D1, 0x60EE, 0xB5AC, 0x60EF, 0xB9DF, 0x60F0, 0xB6E8, 0x60F1, 0x90C0, 0x60F2, 0x90C1,
- 0x60F3, 0xCFEB, 0x60F4, 0xE3B7, 0x60F5, 0x90C2, 0x60F6, 0xBBCC, 0x60F7, 0x90C3, 0x60F8, 0x90C4, 0x60F9, 0xC8C7, 0x60FA, 0xD0CA,
- 0x60FB, 0x90C5, 0x60FC, 0x90C6, 0x60FD, 0x90C7, 0x60FE, 0x90C8, 0x60FF, 0x90C9, 0x6100, 0xE3B8, 0x6101, 0xB3EE, 0x6102, 0x90CA,
- 0x6103, 0x90CB, 0x6104, 0x90CC, 0x6105, 0x90CD, 0x6106, 0xEDA9, 0x6107, 0x90CE, 0x6108, 0xD3FA, 0x6109, 0xD3E4, 0x610A, 0x90CF,
- 0x610B, 0x90D0, 0x610C, 0x90D1, 0x610D, 0xEDAA, 0x610E, 0xE3B9, 0x610F, 0xD2E2, 0x6110, 0x90D2, 0x6111, 0x90D3, 0x6112, 0x90D4,
- 0x6113, 0x90D5, 0x6114, 0x90D6, 0x6115, 0xE3B5, 0x6116, 0x90D7, 0x6117, 0x90D8, 0x6118, 0x90D9, 0x6119, 0x90DA, 0x611A, 0xD3DE,
- 0x611B, 0x90DB, 0x611C, 0x90DC, 0x611D, 0x90DD, 0x611E, 0x90DE, 0x611F, 0xB8D0, 0x6120, 0xE3B3, 0x6121, 0x90DF, 0x6122, 0x90E0,
- 0x6123, 0xE3B6, 0x6124, 0xB7DF, 0x6125, 0x90E1, 0x6126, 0xE3B4, 0x6127, 0xC0A2, 0x6128, 0x90E2, 0x6129, 0x90E3, 0x612A, 0x90E4,
- 0x612B, 0xE3BA, 0x612C, 0x90E5, 0x612D, 0x90E6, 0x612E, 0x90E7, 0x612F, 0x90E8, 0x6130, 0x90E9, 0x6131, 0x90EA, 0x6132, 0x90EB,
- 0x6133, 0x90EC, 0x6134, 0x90ED, 0x6135, 0x90EE, 0x6136, 0x90EF, 0x6137, 0x90F0, 0x6138, 0x90F1, 0x6139, 0x90F2, 0x613A, 0x90F3,
- 0x613B, 0x90F4, 0x613C, 0x90F5, 0x613D, 0x90F6, 0x613E, 0x90F7, 0x613F, 0xD4B8, 0x6140, 0x90F8, 0x6141, 0x90F9, 0x6142, 0x90FA,
- 0x6143, 0x90FB, 0x6144, 0x90FC, 0x6145, 0x90FD, 0x6146, 0x90FE, 0x6147, 0x9140, 0x6148, 0xB4C8, 0x6149, 0x9141, 0x614A, 0xE3BB,
- 0x614B, 0x9142, 0x614C, 0xBBC5, 0x614D, 0x9143, 0x614E, 0xC9F7, 0x614F, 0x9144, 0x6150, 0x9145, 0x6151, 0xC9E5, 0x6152, 0x9146,
- 0x6153, 0x9147, 0x6154, 0x9148, 0x6155, 0xC4BD, 0x6156, 0x9149, 0x6157, 0x914A, 0x6158, 0x914B, 0x6159, 0x914C, 0x615A, 0x914D,
- 0x615B, 0x914E, 0x615C, 0x914F, 0x615D, 0xEDAB, 0x615E, 0x9150, 0x615F, 0x9151, 0x6160, 0x9152, 0x6161, 0x9153, 0x6162, 0xC2FD,
- 0x6163, 0x9154, 0x6164, 0x9155, 0x6165, 0x9156, 0x6166, 0x9157, 0x6167, 0xBBDB, 0x6168, 0xBFAE, 0x6169, 0x9158, 0x616A, 0x9159,
- 0x616B, 0x915A, 0x616C, 0x915B, 0x616D, 0x915C, 0x616E, 0x915D, 0x616F, 0x915E, 0x6170, 0xCEBF, 0x6171, 0x915F, 0x6172, 0x9160,
- 0x6173, 0x9161, 0x6174, 0x9162, 0x6175, 0xE3BC, 0x6176, 0x9163, 0x6177, 0xBFB6, 0x6178, 0x9164, 0x6179, 0x9165, 0x617A, 0x9166,
- 0x617B, 0x9167, 0x617C, 0x9168, 0x617D, 0x9169, 0x617E, 0x916A, 0x617F, 0x916B, 0x6180, 0x916C, 0x6181, 0x916D, 0x6182, 0x916E,
- 0x6183, 0x916F, 0x6184, 0x9170, 0x6185, 0x9171, 0x6186, 0x9172, 0x6187, 0x9173, 0x6188, 0x9174, 0x6189, 0x9175, 0x618A, 0x9176,
- 0x618B, 0xB1EF, 0x618C, 0x9177, 0x618D, 0x9178, 0x618E, 0xD4F7, 0x618F, 0x9179, 0x6190, 0x917A, 0x6191, 0x917B, 0x6192, 0x917C,
- 0x6193, 0x917D, 0x6194, 0xE3BE, 0x6195, 0x917E, 0x6196, 0x9180, 0x6197, 0x9181, 0x6198, 0x9182, 0x6199, 0x9183, 0x619A, 0x9184,
- 0x619B, 0x9185, 0x619C, 0x9186, 0x619D, 0xEDAD, 0x619E, 0x9187, 0x619F, 0x9188, 0x61A0, 0x9189, 0x61A1, 0x918A, 0x61A2, 0x918B,
- 0x61A3, 0x918C, 0x61A4, 0x918D, 0x61A5, 0x918E, 0x61A6, 0x918F, 0x61A7, 0xE3BF, 0x61A8, 0xBAA9, 0x61A9, 0xEDAC, 0x61AA, 0x9190,
- 0x61AB, 0x9191, 0x61AC, 0xE3BD, 0x61AD, 0x9192, 0x61AE, 0x9193, 0x61AF, 0x9194, 0x61B0, 0x9195, 0x61B1, 0x9196, 0x61B2, 0x9197,
- 0x61B3, 0x9198, 0x61B4, 0x9199, 0x61B5, 0x919A, 0x61B6, 0x919B, 0x61B7, 0xE3C0, 0x61B8, 0x919C, 0x61B9, 0x919D, 0x61BA, 0x919E,
- 0x61BB, 0x919F, 0x61BC, 0x91A0, 0x61BD, 0x91A1, 0x61BE, 0xBAB6, 0x61BF, 0x91A2, 0x61C0, 0x91A3, 0x61C1, 0x91A4, 0x61C2, 0xB6AE,
- 0x61C3, 0x91A5, 0x61C4, 0x91A6, 0x61C5, 0x91A7, 0x61C6, 0x91A8, 0x61C7, 0x91A9, 0x61C8, 0xD0B8, 0x61C9, 0x91AA, 0x61CA, 0xB0C3,
- 0x61CB, 0xEDAE, 0x61CC, 0x91AB, 0x61CD, 0x91AC, 0x61CE, 0x91AD, 0x61CF, 0x91AE, 0x61D0, 0x91AF, 0x61D1, 0xEDAF, 0x61D2, 0xC0C1,
- 0x61D3, 0x91B0, 0x61D4, 0xE3C1, 0x61D5, 0x91B1, 0x61D6, 0x91B2, 0x61D7, 0x91B3, 0x61D8, 0x91B4, 0x61D9, 0x91B5, 0x61DA, 0x91B6,
- 0x61DB, 0x91B7, 0x61DC, 0x91B8, 0x61DD, 0x91B9, 0x61DE, 0x91BA, 0x61DF, 0x91BB, 0x61E0, 0x91BC, 0x61E1, 0x91BD, 0x61E2, 0x91BE,
- 0x61E3, 0x91BF, 0x61E4, 0x91C0, 0x61E5, 0x91C1, 0x61E6, 0xC5B3, 0x61E7, 0x91C2, 0x61E8, 0x91C3, 0x61E9, 0x91C4, 0x61EA, 0x91C5,
- 0x61EB, 0x91C6, 0x61EC, 0x91C7, 0x61ED, 0x91C8, 0x61EE, 0x91C9, 0x61EF, 0x91CA, 0x61F0, 0x91CB, 0x61F1, 0x91CC, 0x61F2, 0x91CD,
- 0x61F3, 0x91CE, 0x61F4, 0x91CF, 0x61F5, 0xE3C2, 0x61F6, 0x91D0, 0x61F7, 0x91D1, 0x61F8, 0x91D2, 0x61F9, 0x91D3, 0x61FA, 0x91D4,
- 0x61FB, 0x91D5, 0x61FC, 0x91D6, 0x61FD, 0x91D7, 0x61FE, 0x91D8, 0x61FF, 0xDCB2, 0x6200, 0x91D9, 0x6201, 0x91DA, 0x6202, 0x91DB,
- 0x6203, 0x91DC, 0x6204, 0x91DD, 0x6205, 0x91DE, 0x6206, 0xEDB0, 0x6207, 0x91DF, 0x6208, 0xB8EA, 0x6209, 0x91E0, 0x620A, 0xCEEC,
- 0x620B, 0xEAA7, 0x620C, 0xD0E7, 0x620D, 0xCAF9, 0x620E, 0xC8D6, 0x620F, 0xCFB7, 0x6210, 0xB3C9, 0x6211, 0xCED2, 0x6212, 0xBDE4,
- 0x6213, 0x91E1, 0x6214, 0x91E2, 0x6215, 0xE3DE, 0x6216, 0xBBF2, 0x6217, 0xEAA8, 0x6218, 0xD5BD, 0x6219, 0x91E3, 0x621A, 0xC6DD,
- 0x621B, 0xEAA9, 0x621C, 0x91E4, 0x621D, 0x91E5, 0x621E, 0x91E6, 0x621F, 0xEAAA, 0x6220, 0x91E7, 0x6221, 0xEAAC, 0x6222, 0xEAAB,
- 0x6223, 0x91E8, 0x6224, 0xEAAE, 0x6225, 0xEAAD, 0x6226, 0x91E9, 0x6227, 0x91EA, 0x6228, 0x91EB, 0x6229, 0x91EC, 0x622A, 0xBDD8,
- 0x622B, 0x91ED, 0x622C, 0xEAAF, 0x622D, 0x91EE, 0x622E, 0xC2BE, 0x622F, 0x91EF, 0x6230, 0x91F0, 0x6231, 0x91F1, 0x6232, 0x91F2,
- 0x6233, 0xB4C1, 0x6234, 0xB4F7, 0x6235, 0x91F3, 0x6236, 0x91F4, 0x6237, 0xBBA7, 0x6238, 0x91F5, 0x6239, 0x91F6, 0x623A, 0x91F7,
- 0x623B, 0x91F8, 0x623C, 0x91F9, 0x623D, 0xECE6, 0x623E, 0xECE5, 0x623F, 0xB7BF, 0x6240, 0xCBF9, 0x6241, 0xB1E2, 0x6242, 0x91FA,
- 0x6243, 0xECE7, 0x6244, 0x91FB, 0x6245, 0x91FC, 0x6246, 0x91FD, 0x6247, 0xC9C8, 0x6248, 0xECE8, 0x6249, 0xECE9, 0x624A, 0x91FE,
- 0x624B, 0xCAD6, 0x624C, 0xDED0, 0x624D, 0xB2C5, 0x624E, 0xD4FA, 0x624F, 0x9240, 0x6250, 0x9241, 0x6251, 0xC6CB, 0x6252, 0xB0C7,
- 0x6253, 0xB4F2, 0x6254, 0xC8D3, 0x6255, 0x9242, 0x6256, 0x9243, 0x6257, 0x9244, 0x6258, 0xCDD0, 0x6259, 0x9245, 0x625A, 0x9246,
- 0x625B, 0xBFB8, 0x625C, 0x9247, 0x625D, 0x9248, 0x625E, 0x9249, 0x625F, 0x924A, 0x6260, 0x924B, 0x6261, 0x924C, 0x6262, 0x924D,
- 0x6263, 0xBFDB, 0x6264, 0x924E, 0x6265, 0x924F, 0x6266, 0xC7A4, 0x6267, 0xD6B4, 0x6268, 0x9250, 0x6269, 0xC0A9, 0x626A, 0xDED1,
- 0x626B, 0xC9A8, 0x626C, 0xD1EF, 0x626D, 0xC5A4, 0x626E, 0xB0E7, 0x626F, 0xB3B6, 0x6270, 0xC8C5, 0x6271, 0x9251, 0x6272, 0x9252,
- 0x6273, 0xB0E2, 0x6274, 0x9253, 0x6275, 0x9254, 0x6276, 0xB7F6, 0x6277, 0x9255, 0x6278, 0x9256, 0x6279, 0xC5FA, 0x627A, 0x9257,
- 0x627B, 0x9258, 0x627C, 0xB6F3, 0x627D, 0x9259, 0x627E, 0xD5D2, 0x627F, 0xB3D0, 0x6280, 0xBCBC, 0x6281, 0x925A, 0x6282, 0x925B,
- 0x6283, 0x925C, 0x6284, 0xB3AD, 0x6285, 0x925D, 0x6286, 0x925E, 0x6287, 0x925F, 0x6288, 0x9260, 0x6289, 0xBEF1, 0x628A, 0xB0D1,
- 0x628B, 0x9261, 0x628C, 0x9262, 0x628D, 0x9263, 0x628E, 0x9264, 0x628F, 0x9265, 0x6290, 0x9266, 0x6291, 0xD2D6, 0x6292, 0xCAE3,
- 0x6293, 0xD7A5, 0x6294, 0x9267, 0x6295, 0xCDB6, 0x6296, 0xB6B6, 0x6297, 0xBFB9, 0x6298, 0xD5DB, 0x6299, 0x9268, 0x629A, 0xB8A7,
- 0x629B, 0xC5D7, 0x629C, 0x9269, 0x629D, 0x926A, 0x629E, 0x926B, 0x629F, 0xDED2, 0x62A0, 0xBFD9, 0x62A1, 0xC2D5, 0x62A2, 0xC7C0,
- 0x62A3, 0x926C, 0x62A4, 0xBBA4, 0x62A5, 0xB1A8, 0x62A6, 0x926D, 0x62A7, 0x926E, 0x62A8, 0xC5EA, 0x62A9, 0x926F, 0x62AA, 0x9270,
- 0x62AB, 0xC5FB, 0x62AC, 0xCCA7, 0x62AD, 0x9271, 0x62AE, 0x9272, 0x62AF, 0x9273, 0x62B0, 0x9274, 0x62B1, 0xB1A7, 0x62B2, 0x9275,
- 0x62B3, 0x9276, 0x62B4, 0x9277, 0x62B5, 0xB5D6, 0x62B6, 0x9278, 0x62B7, 0x9279, 0x62B8, 0x927A, 0x62B9, 0xC4A8, 0x62BA, 0x927B,
- 0x62BB, 0xDED3, 0x62BC, 0xD1BA, 0x62BD, 0xB3E9, 0x62BE, 0x927C, 0x62BF, 0xC3F2, 0x62C0, 0x927D, 0x62C1, 0x927E, 0x62C2, 0xB7F7,
- 0x62C3, 0x9280, 0x62C4, 0xD6F4, 0x62C5, 0xB5A3, 0x62C6, 0xB2F0, 0x62C7, 0xC4B4, 0x62C8, 0xC4E9, 0x62C9, 0xC0AD, 0x62CA, 0xDED4,
- 0x62CB, 0x9281, 0x62CC, 0xB0E8, 0x62CD, 0xC5C4, 0x62CE, 0xC1E0, 0x62CF, 0x9282, 0x62D0, 0xB9D5, 0x62D1, 0x9283, 0x62D2, 0xBEDC,
- 0x62D3, 0xCDD8, 0x62D4, 0xB0CE, 0x62D5, 0x9284, 0x62D6, 0xCDCF, 0x62D7, 0xDED6, 0x62D8, 0xBED0, 0x62D9, 0xD7BE, 0x62DA, 0xDED5,
- 0x62DB, 0xD5D0, 0x62DC, 0xB0DD, 0x62DD, 0x9285, 0x62DE, 0x9286, 0x62DF, 0xC4E2, 0x62E0, 0x9287, 0x62E1, 0x9288, 0x62E2, 0xC2A3,
- 0x62E3, 0xBCF0, 0x62E4, 0x9289, 0x62E5, 0xD3B5, 0x62E6, 0xC0B9, 0x62E7, 0xC5A1, 0x62E8, 0xB2A6, 0x62E9, 0xD4F1, 0x62EA, 0x928A,
- 0x62EB, 0x928B, 0x62EC, 0xC0A8, 0x62ED, 0xCAC3, 0x62EE, 0xDED7, 0x62EF, 0xD5FC, 0x62F0, 0x928C, 0x62F1, 0xB9B0, 0x62F2, 0x928D,
- 0x62F3, 0xC8AD, 0x62F4, 0xCBA9, 0x62F5, 0x928E, 0x62F6, 0xDED9, 0x62F7, 0xBFBD, 0x62F8, 0x928F, 0x62F9, 0x9290, 0x62FA, 0x9291,
- 0x62FB, 0x9292, 0x62FC, 0xC6B4, 0x62FD, 0xD7A7, 0x62FE, 0xCAB0, 0x62FF, 0xC4C3, 0x6300, 0x9293, 0x6301, 0xB3D6, 0x6302, 0xB9D2,
- 0x6303, 0x9294, 0x6304, 0x9295, 0x6305, 0x9296, 0x6306, 0x9297, 0x6307, 0xD6B8, 0x6308, 0xEAFC, 0x6309, 0xB0B4, 0x630A, 0x9298,
- 0x630B, 0x9299, 0x630C, 0x929A, 0x630D, 0x929B, 0x630E, 0xBFE6, 0x630F, 0x929C, 0x6310, 0x929D, 0x6311, 0xCCF4, 0x6312, 0x929E,
- 0x6313, 0x929F, 0x6314, 0x92A0, 0x6315, 0x92A1, 0x6316, 0xCDDA, 0x6317, 0x92A2, 0x6318, 0x92A3, 0x6319, 0x92A4, 0x631A, 0xD6BF,
- 0x631B, 0xC2CE, 0x631C, 0x92A5, 0x631D, 0xCECE, 0x631E, 0xCCA2, 0x631F, 0xD0AE, 0x6320, 0xC4D3, 0x6321, 0xB5B2, 0x6322, 0xDED8,
- 0x6323, 0xD5F5, 0x6324, 0xBCB7, 0x6325, 0xBBD3, 0x6326, 0x92A6, 0x6327, 0x92A7, 0x6328, 0xB0A4, 0x6329, 0x92A8, 0x632A, 0xC5B2,
- 0x632B, 0xB4EC, 0x632C, 0x92A9, 0x632D, 0x92AA, 0x632E, 0x92AB, 0x632F, 0xD5F1, 0x6330, 0x92AC, 0x6331, 0x92AD, 0x6332, 0xEAFD,
- 0x6333, 0x92AE, 0x6334, 0x92AF, 0x6335, 0x92B0, 0x6336, 0x92B1, 0x6337, 0x92B2, 0x6338, 0x92B3, 0x6339, 0xDEDA, 0x633A, 0xCDA6,
- 0x633B, 0x92B4, 0x633C, 0x92B5, 0x633D, 0xCDEC, 0x633E, 0x92B6, 0x633F, 0x92B7, 0x6340, 0x92B8, 0x6341, 0x92B9, 0x6342, 0xCEE6,
- 0x6343, 0xDEDC, 0x6344, 0x92BA, 0x6345, 0xCDB1, 0x6346, 0xC0A6, 0x6347, 0x92BB, 0x6348, 0x92BC, 0x6349, 0xD7BD, 0x634A, 0x92BD,
- 0x634B, 0xDEDB, 0x634C, 0xB0C6, 0x634D, 0xBAB4, 0x634E, 0xC9D3, 0x634F, 0xC4F3, 0x6350, 0xBEE8, 0x6351, 0x92BE, 0x6352, 0x92BF,
- 0x6353, 0x92C0, 0x6354, 0x92C1, 0x6355, 0xB2B6, 0x6356, 0x92C2, 0x6357, 0x92C3, 0x6358, 0x92C4, 0x6359, 0x92C5, 0x635A, 0x92C6,
- 0x635B, 0x92C7, 0x635C, 0x92C8, 0x635D, 0x92C9, 0x635E, 0xC0CC, 0x635F, 0xCBF0, 0x6360, 0x92CA, 0x6361, 0xBCF1, 0x6362, 0xBBBB,
- 0x6363, 0xB5B7, 0x6364, 0x92CB, 0x6365, 0x92CC, 0x6366, 0x92CD, 0x6367, 0xC5F5, 0x6368, 0x92CE, 0x6369, 0xDEE6, 0x636A, 0x92CF,
- 0x636B, 0x92D0, 0x636C, 0x92D1, 0x636D, 0xDEE3, 0x636E, 0xBEDD, 0x636F, 0x92D2, 0x6370, 0x92D3, 0x6371, 0xDEDF, 0x6372, 0x92D4,
- 0x6373, 0x92D5, 0x6374, 0x92D6, 0x6375, 0x92D7, 0x6376, 0xB4B7, 0x6377, 0xBDDD, 0x6378, 0x92D8, 0x6379, 0x92D9, 0x637A, 0xDEE0,
- 0x637B, 0xC4ED, 0x637C, 0x92DA, 0x637D, 0x92DB, 0x637E, 0x92DC, 0x637F, 0x92DD, 0x6380, 0xCFC6, 0x6381, 0x92DE, 0x6382, 0xB5E0,
- 0x6383, 0x92DF, 0x6384, 0x92E0, 0x6385, 0x92E1, 0x6386, 0x92E2, 0x6387, 0xB6DE, 0x6388, 0xCADA, 0x6389, 0xB5F4, 0x638A, 0xDEE5,
- 0x638B, 0x92E3, 0x638C, 0xD5C6, 0x638D, 0x92E4, 0x638E, 0xDEE1, 0x638F, 0xCCCD, 0x6390, 0xC6FE, 0x6391, 0x92E5, 0x6392, 0xC5C5,
- 0x6393, 0x92E6, 0x6394, 0x92E7, 0x6395, 0x92E8, 0x6396, 0xD2B4, 0x6397, 0x92E9, 0x6398, 0xBEF2, 0x6399, 0x92EA, 0x639A, 0x92EB,
- 0x639B, 0x92EC, 0x639C, 0x92ED, 0x639D, 0x92EE, 0x639E, 0x92EF, 0x639F, 0x92F0, 0x63A0, 0xC2D3, 0x63A1, 0x92F1, 0x63A2, 0xCCBD,
- 0x63A3, 0xB3B8, 0x63A4, 0x92F2, 0x63A5, 0xBDD3, 0x63A6, 0x92F3, 0x63A7, 0xBFD8, 0x63A8, 0xCDC6, 0x63A9, 0xD1DA, 0x63AA, 0xB4EB,
- 0x63AB, 0x92F4, 0x63AC, 0xDEE4, 0x63AD, 0xDEDD, 0x63AE, 0xDEE7, 0x63AF, 0x92F5, 0x63B0, 0xEAFE, 0x63B1, 0x92F6, 0x63B2, 0x92F7,
- 0x63B3, 0xC2B0, 0x63B4, 0xDEE2, 0x63B5, 0x92F8, 0x63B6, 0x92F9, 0x63B7, 0xD6C0, 0x63B8, 0xB5A7, 0x63B9, 0x92FA, 0x63BA, 0xB2F4,
- 0x63BB, 0x92FB, 0x63BC, 0xDEE8, 0x63BD, 0x92FC, 0x63BE, 0xDEF2, 0x63BF, 0x92FD, 0x63C0, 0x92FE, 0x63C1, 0x9340, 0x63C2, 0x9341,
- 0x63C3, 0x9342, 0x63C4, 0xDEED, 0x63C5, 0x9343, 0x63C6, 0xDEF1, 0x63C7, 0x9344, 0x63C8, 0x9345, 0x63C9, 0xC8E0, 0x63CA, 0x9346,
- 0x63CB, 0x9347, 0x63CC, 0x9348, 0x63CD, 0xD7E1, 0x63CE, 0xDEEF, 0x63CF, 0xC3E8, 0x63D0, 0xCCE1, 0x63D1, 0x9349, 0x63D2, 0xB2E5,
- 0x63D3, 0x934A, 0x63D4, 0x934B, 0x63D5, 0x934C, 0x63D6, 0xD2BE, 0x63D7, 0x934D, 0x63D8, 0x934E, 0x63D9, 0x934F, 0x63DA, 0x9350,
- 0x63DB, 0x9351, 0x63DC, 0x9352, 0x63DD, 0x9353, 0x63DE, 0xDEEE, 0x63DF, 0x9354, 0x63E0, 0xDEEB, 0x63E1, 0xCED5, 0x63E2, 0x9355,
- 0x63E3, 0xB4A7, 0x63E4, 0x9356, 0x63E5, 0x9357, 0x63E6, 0x9358, 0x63E7, 0x9359, 0x63E8, 0x935A, 0x63E9, 0xBFAB, 0x63EA, 0xBEBE,
- 0x63EB, 0x935B, 0x63EC, 0x935C, 0x63ED, 0xBDD2, 0x63EE, 0x935D, 0x63EF, 0x935E, 0x63F0, 0x935F, 0x63F1, 0x9360, 0x63F2, 0xDEE9,
- 0x63F3, 0x9361, 0x63F4, 0xD4AE, 0x63F5, 0x9362, 0x63F6, 0xDEDE, 0x63F7, 0x9363, 0x63F8, 0xDEEA, 0x63F9, 0x9364, 0x63FA, 0x9365,
- 0x63FB, 0x9366, 0x63FC, 0x9367, 0x63FD, 0xC0BF, 0x63FE, 0x9368, 0x63FF, 0xDEEC, 0x6400, 0xB2F3, 0x6401, 0xB8E9, 0x6402, 0xC2A7,
- 0x6403, 0x9369, 0x6404, 0x936A, 0x6405, 0xBDC1, 0x6406, 0x936B, 0x6407, 0x936C, 0x6408, 0x936D, 0x6409, 0x936E, 0x640A, 0x936F,
- 0x640B, 0xDEF5, 0x640C, 0xDEF8, 0x640D, 0x9370, 0x640E, 0x9371, 0x640F, 0xB2AB, 0x6410, 0xB4A4, 0x6411, 0x9372, 0x6412, 0x9373,
- 0x6413, 0xB4EA, 0x6414, 0xC9A6, 0x6415, 0x9374, 0x6416, 0x9375, 0x6417, 0x9376, 0x6418, 0x9377, 0x6419, 0x9378, 0x641A, 0x9379,
- 0x641B, 0xDEF6, 0x641C, 0xCBD1, 0x641D, 0x937A, 0x641E, 0xB8E3, 0x641F, 0x937B, 0x6420, 0xDEF7, 0x6421, 0xDEFA, 0x6422, 0x937C,
- 0x6423, 0x937D, 0x6424, 0x937E, 0x6425, 0x9380, 0x6426, 0xDEF9, 0x6427, 0x9381, 0x6428, 0x9382, 0x6429, 0x9383, 0x642A, 0xCCC2,
- 0x642B, 0x9384, 0x642C, 0xB0E1, 0x642D, 0xB4EE, 0x642E, 0x9385, 0x642F, 0x9386, 0x6430, 0x9387, 0x6431, 0x9388, 0x6432, 0x9389,
- 0x6433, 0x938A, 0x6434, 0xE5BA, 0x6435, 0x938B, 0x6436, 0x938C, 0x6437, 0x938D, 0x6438, 0x938E, 0x6439, 0x938F, 0x643A, 0xD0AF,
- 0x643B, 0x9390, 0x643C, 0x9391, 0x643D, 0xB2EB, 0x643E, 0x9392, 0x643F, 0xEBA1, 0x6440, 0x9393, 0x6441, 0xDEF4, 0x6442, 0x9394,
- 0x6443, 0x9395, 0x6444, 0xC9E3, 0x6445, 0xDEF3, 0x6446, 0xB0DA, 0x6447, 0xD2A1, 0x6448, 0xB1F7, 0x6449, 0x9396, 0x644A, 0xCCAF,
- 0x644B, 0x9397, 0x644C, 0x9398, 0x644D, 0x9399, 0x644E, 0x939A, 0x644F, 0x939B, 0x6450, 0x939C, 0x6451, 0x939D, 0x6452, 0xDEF0,
- 0x6453, 0x939E, 0x6454, 0xCBA4, 0x6455, 0x939F, 0x6456, 0x93A0, 0x6457, 0x93A1, 0x6458, 0xD5AA, 0x6459, 0x93A2, 0x645A, 0x93A3,
- 0x645B, 0x93A4, 0x645C, 0x93A5, 0x645D, 0x93A6, 0x645E, 0xDEFB, 0x645F, 0x93A7, 0x6460, 0x93A8, 0x6461, 0x93A9, 0x6462, 0x93AA,
- 0x6463, 0x93AB, 0x6464, 0x93AC, 0x6465, 0x93AD, 0x6466, 0x93AE, 0x6467, 0xB4DD, 0x6468, 0x93AF, 0x6469, 0xC4A6, 0x646A, 0x93B0,
- 0x646B, 0x93B1, 0x646C, 0x93B2, 0x646D, 0xDEFD, 0x646E, 0x93B3, 0x646F, 0x93B4, 0x6470, 0x93B5, 0x6471, 0x93B6, 0x6472, 0x93B7,
- 0x6473, 0x93B8, 0x6474, 0x93B9, 0x6475, 0x93BA, 0x6476, 0x93BB, 0x6477, 0x93BC, 0x6478, 0xC3FE, 0x6479, 0xC4A1, 0x647A, 0xDFA1,
- 0x647B, 0x93BD, 0x647C, 0x93BE, 0x647D, 0x93BF, 0x647E, 0x93C0, 0x647F, 0x93C1, 0x6480, 0x93C2, 0x6481, 0x93C3, 0x6482, 0xC1CC,
- 0x6483, 0x93C4, 0x6484, 0xDEFC, 0x6485, 0xBEEF, 0x6486, 0x93C5, 0x6487, 0xC6B2, 0x6488, 0x93C6, 0x6489, 0x93C7, 0x648A, 0x93C8,
- 0x648B, 0x93C9, 0x648C, 0x93CA, 0x648D, 0x93CB, 0x648E, 0x93CC, 0x648F, 0x93CD, 0x6490, 0x93CE, 0x6491, 0xB3C5, 0x6492, 0xC8F6,
- 0x6493, 0x93CF, 0x6494, 0x93D0, 0x6495, 0xCBBA, 0x6496, 0xDEFE, 0x6497, 0x93D1, 0x6498, 0x93D2, 0x6499, 0xDFA4, 0x649A, 0x93D3,
- 0x649B, 0x93D4, 0x649C, 0x93D5, 0x649D, 0x93D6, 0x649E, 0xD7B2, 0x649F, 0x93D7, 0x64A0, 0x93D8, 0x64A1, 0x93D9, 0x64A2, 0x93DA,
- 0x64A3, 0x93DB, 0x64A4, 0xB3B7, 0x64A5, 0x93DC, 0x64A6, 0x93DD, 0x64A7, 0x93DE, 0x64A8, 0x93DF, 0x64A9, 0xC1C3, 0x64AA, 0x93E0,
- 0x64AB, 0x93E1, 0x64AC, 0xC7CB, 0x64AD, 0xB2A5, 0x64AE, 0xB4E9, 0x64AF, 0x93E2, 0x64B0, 0xD7AB, 0x64B1, 0x93E3, 0x64B2, 0x93E4,
- 0x64B3, 0x93E5, 0x64B4, 0x93E6, 0x64B5, 0xC4EC, 0x64B6, 0x93E7, 0x64B7, 0xDFA2, 0x64B8, 0xDFA3, 0x64B9, 0x93E8, 0x64BA, 0xDFA5,
- 0x64BB, 0x93E9, 0x64BC, 0xBAB3, 0x64BD, 0x93EA, 0x64BE, 0x93EB, 0x64BF, 0x93EC, 0x64C0, 0xDFA6, 0x64C1, 0x93ED, 0x64C2, 0xC0DE,
- 0x64C3, 0x93EE, 0x64C4, 0x93EF, 0x64C5, 0xC9C3, 0x64C6, 0x93F0, 0x64C7, 0x93F1, 0x64C8, 0x93F2, 0x64C9, 0x93F3, 0x64CA, 0x93F4,
- 0x64CB, 0x93F5, 0x64CC, 0x93F6, 0x64CD, 0xB2D9, 0x64CE, 0xC7E6, 0x64CF, 0x93F7, 0x64D0, 0xDFA7, 0x64D1, 0x93F8, 0x64D2, 0xC7DC,
- 0x64D3, 0x93F9, 0x64D4, 0x93FA, 0x64D5, 0x93FB, 0x64D6, 0x93FC, 0x64D7, 0xDFA8, 0x64D8, 0xEBA2, 0x64D9, 0x93FD, 0x64DA, 0x93FE,
- 0x64DB, 0x9440, 0x64DC, 0x9441, 0x64DD, 0x9442, 0x64DE, 0xCBD3, 0x64DF, 0x9443, 0x64E0, 0x9444, 0x64E1, 0x9445, 0x64E2, 0xDFAA,
- 0x64E3, 0x9446, 0x64E4, 0xDFA9, 0x64E5, 0x9447, 0x64E6, 0xB2C1, 0x64E7, 0x9448, 0x64E8, 0x9449, 0x64E9, 0x944A, 0x64EA, 0x944B,
- 0x64EB, 0x944C, 0x64EC, 0x944D, 0x64ED, 0x944E, 0x64EE, 0x944F, 0x64EF, 0x9450, 0x64F0, 0x9451, 0x64F1, 0x9452, 0x64F2, 0x9453,
- 0x64F3, 0x9454, 0x64F4, 0x9455, 0x64F5, 0x9456, 0x64F6, 0x9457, 0x64F7, 0x9458, 0x64F8, 0x9459, 0x64F9, 0x945A, 0x64FA, 0x945B,
- 0x64FB, 0x945C, 0x64FC, 0x945D, 0x64FD, 0x945E, 0x64FE, 0x945F, 0x64FF, 0x9460, 0x6500, 0xC5CA, 0x6501, 0x9461, 0x6502, 0x9462,
- 0x6503, 0x9463, 0x6504, 0x9464, 0x6505, 0x9465, 0x6506, 0x9466, 0x6507, 0x9467, 0x6508, 0x9468, 0x6509, 0xDFAB, 0x650A, 0x9469,
- 0x650B, 0x946A, 0x650C, 0x946B, 0x650D, 0x946C, 0x650E, 0x946D, 0x650F, 0x946E, 0x6510, 0x946F, 0x6511, 0x9470, 0x6512, 0xD4DC,
- 0x6513, 0x9471, 0x6514, 0x9472, 0x6515, 0x9473, 0x6516, 0x9474, 0x6517, 0x9475, 0x6518, 0xC8C1, 0x6519, 0x9476, 0x651A, 0x9477,
- 0x651B, 0x9478, 0x651C, 0x9479, 0x651D, 0x947A, 0x651E, 0x947B, 0x651F, 0x947C, 0x6520, 0x947D, 0x6521, 0x947E, 0x6522, 0x9480,
- 0x6523, 0x9481, 0x6524, 0x9482, 0x6525, 0xDFAC, 0x6526, 0x9483, 0x6527, 0x9484, 0x6528, 0x9485, 0x6529, 0x9486, 0x652A, 0x9487,
- 0x652B, 0xBEF0, 0x652C, 0x9488, 0x652D, 0x9489, 0x652E, 0xDFAD, 0x652F, 0xD6A7, 0x6530, 0x948A, 0x6531, 0x948B, 0x6532, 0x948C,
- 0x6533, 0x948D, 0x6534, 0xEAB7, 0x6535, 0xEBB6, 0x6536, 0xCAD5, 0x6537, 0x948E, 0x6538, 0xD8FC, 0x6539, 0xB8C4, 0x653A, 0x948F,
- 0x653B, 0xB9A5, 0x653C, 0x9490, 0x653D, 0x9491, 0x653E, 0xB7C5, 0x653F, 0xD5FE, 0x6540, 0x9492, 0x6541, 0x9493, 0x6542, 0x9494,
- 0x6543, 0x9495, 0x6544, 0x9496, 0x6545, 0xB9CA, 0x6546, 0x9497, 0x6547, 0x9498, 0x6548, 0xD0A7, 0x6549, 0xF4CD, 0x654A, 0x9499,
- 0x654B, 0x949A, 0x654C, 0xB5D0, 0x654D, 0x949B, 0x654E, 0x949C, 0x654F, 0xC3F4, 0x6550, 0x949D, 0x6551, 0xBEC8, 0x6552, 0x949E,
- 0x6553, 0x949F, 0x6554, 0x94A0, 0x6555, 0xEBB7, 0x6556, 0xB0BD, 0x6557, 0x94A1, 0x6558, 0x94A2, 0x6559, 0xBDCC, 0x655A, 0x94A3,
- 0x655B, 0xC1B2, 0x655C, 0x94A4, 0x655D, 0xB1D6, 0x655E, 0xB3A8, 0x655F, 0x94A5, 0x6560, 0x94A6, 0x6561, 0x94A7, 0x6562, 0xB8D2,
- 0x6563, 0xC9A2, 0x6564, 0x94A8, 0x6565, 0x94A9, 0x6566, 0xB6D8, 0x6567, 0x94AA, 0x6568, 0x94AB, 0x6569, 0x94AC, 0x656A, 0x94AD,
- 0x656B, 0xEBB8, 0x656C, 0xBEB4, 0x656D, 0x94AE, 0x656E, 0x94AF, 0x656F, 0x94B0, 0x6570, 0xCAFD, 0x6571, 0x94B1, 0x6572, 0xC7C3,
- 0x6573, 0x94B2, 0x6574, 0xD5FB, 0x6575, 0x94B3, 0x6576, 0x94B4, 0x6577, 0xB7F3, 0x6578, 0x94B5, 0x6579, 0x94B6, 0x657A, 0x94B7,
- 0x657B, 0x94B8, 0x657C, 0x94B9, 0x657D, 0x94BA, 0x657E, 0x94BB, 0x657F, 0x94BC, 0x6580, 0x94BD, 0x6581, 0x94BE, 0x6582, 0x94BF,
- 0x6583, 0x94C0, 0x6584, 0x94C1, 0x6585, 0x94C2, 0x6586, 0x94C3, 0x6587, 0xCEC4, 0x6588, 0x94C4, 0x6589, 0x94C5, 0x658A, 0x94C6,
- 0x658B, 0xD5AB, 0x658C, 0xB1F3, 0x658D, 0x94C7, 0x658E, 0x94C8, 0x658F, 0x94C9, 0x6590, 0xECB3, 0x6591, 0xB0DF, 0x6592, 0x94CA,
- 0x6593, 0xECB5, 0x6594, 0x94CB, 0x6595, 0x94CC, 0x6596, 0x94CD, 0x6597, 0xB6B7, 0x6598, 0x94CE, 0x6599, 0xC1CF, 0x659A, 0x94CF,
- 0x659B, 0xF5FA, 0x659C, 0xD0B1, 0x659D, 0x94D0, 0x659E, 0x94D1, 0x659F, 0xD5E5, 0x65A0, 0x94D2, 0x65A1, 0xCED3, 0x65A2, 0x94D3,
- 0x65A3, 0x94D4, 0x65A4, 0xBDEF, 0x65A5, 0xB3E2, 0x65A6, 0x94D5, 0x65A7, 0xB8AB, 0x65A8, 0x94D6, 0x65A9, 0xD5B6, 0x65AA, 0x94D7,
- 0x65AB, 0xEDBD, 0x65AC, 0x94D8, 0x65AD, 0xB6CF, 0x65AE, 0x94D9, 0x65AF, 0xCBB9, 0x65B0, 0xD0C2, 0x65B1, 0x94DA, 0x65B2, 0x94DB,
- 0x65B3, 0x94DC, 0x65B4, 0x94DD, 0x65B5, 0x94DE, 0x65B6, 0x94DF, 0x65B7, 0x94E0, 0x65B8, 0x94E1, 0x65B9, 0xB7BD, 0x65BA, 0x94E2,
- 0x65BB, 0x94E3, 0x65BC, 0xECB6, 0x65BD, 0xCAA9, 0x65BE, 0x94E4, 0x65BF, 0x94E5, 0x65C0, 0x94E6, 0x65C1, 0xC5D4, 0x65C2, 0x94E7,
- 0x65C3, 0xECB9, 0x65C4, 0xECB8, 0x65C5, 0xC2C3, 0x65C6, 0xECB7, 0x65C7, 0x94E8, 0x65C8, 0x94E9, 0x65C9, 0x94EA, 0x65CA, 0x94EB,
- 0x65CB, 0xD0FD, 0x65CC, 0xECBA, 0x65CD, 0x94EC, 0x65CE, 0xECBB, 0x65CF, 0xD7E5, 0x65D0, 0x94ED, 0x65D1, 0x94EE, 0x65D2, 0xECBC,
- 0x65D3, 0x94EF, 0x65D4, 0x94F0, 0x65D5, 0x94F1, 0x65D6, 0xECBD, 0x65D7, 0xC6EC, 0x65D8, 0x94F2, 0x65D9, 0x94F3, 0x65DA, 0x94F4,
- 0x65DB, 0x94F5, 0x65DC, 0x94F6, 0x65DD, 0x94F7, 0x65DE, 0x94F8, 0x65DF, 0x94F9, 0x65E0, 0xCEDE, 0x65E1, 0x94FA, 0x65E2, 0xBCC8,
- 0x65E3, 0x94FB, 0x65E4, 0x94FC, 0x65E5, 0xC8D5, 0x65E6, 0xB5A9, 0x65E7, 0xBEC9, 0x65E8, 0xD6BC, 0x65E9, 0xD4E7, 0x65EA, 0x94FD,
- 0x65EB, 0x94FE, 0x65EC, 0xD1AE, 0x65ED, 0xD0F1, 0x65EE, 0xEAB8, 0x65EF, 0xEAB9, 0x65F0, 0xEABA, 0x65F1, 0xBAB5, 0x65F2, 0x9540,
- 0x65F3, 0x9541, 0x65F4, 0x9542, 0x65F5, 0x9543, 0x65F6, 0xCAB1, 0x65F7, 0xBFF5, 0x65F8, 0x9544, 0x65F9, 0x9545, 0x65FA, 0xCDFA,
- 0x65FB, 0x9546, 0x65FC, 0x9547, 0x65FD, 0x9548, 0x65FE, 0x9549, 0x65FF, 0x954A, 0x6600, 0xEAC0, 0x6601, 0x954B, 0x6602, 0xB0BA,
- 0x6603, 0xEABE, 0x6604, 0x954C, 0x6605, 0x954D, 0x6606, 0xC0A5, 0x6607, 0x954E, 0x6608, 0x954F, 0x6609, 0x9550, 0x660A, 0xEABB,
- 0x660B, 0x9551, 0x660C, 0xB2FD, 0x660D, 0x9552, 0x660E, 0xC3F7, 0x660F, 0xBBE8, 0x6610, 0x9553, 0x6611, 0x9554, 0x6612, 0x9555,
- 0x6613, 0xD2D7, 0x6614, 0xCEF4, 0x6615, 0xEABF, 0x6616, 0x9556, 0x6617, 0x9557, 0x6618, 0x9558, 0x6619, 0xEABC, 0x661A, 0x9559,
- 0x661B, 0x955A, 0x661C, 0x955B, 0x661D, 0xEAC3, 0x661E, 0x955C, 0x661F, 0xD0C7, 0x6620, 0xD3B3, 0x6621, 0x955D, 0x6622, 0x955E,
- 0x6623, 0x955F, 0x6624, 0x9560, 0x6625, 0xB4BA, 0x6626, 0x9561, 0x6627, 0xC3C1, 0x6628, 0xD7F2, 0x6629, 0x9562, 0x662A, 0x9563,
- 0x662B, 0x9564, 0x662C, 0x9565, 0x662D, 0xD5D1, 0x662E, 0x9566, 0x662F, 0xCAC7, 0x6630, 0x9567, 0x6631, 0xEAC5, 0x6632, 0x9568,
- 0x6633, 0x9569, 0x6634, 0xEAC4, 0x6635, 0xEAC7, 0x6636, 0xEAC6, 0x6637, 0x956A, 0x6638, 0x956B, 0x6639, 0x956C, 0x663A, 0x956D,
- 0x663B, 0x956E, 0x663C, 0xD6E7, 0x663D, 0x956F, 0x663E, 0xCFD4, 0x663F, 0x9570, 0x6640, 0x9571, 0x6641, 0xEACB, 0x6642, 0x9572,
- 0x6643, 0xBBCE, 0x6644, 0x9573, 0x6645, 0x9574, 0x6646, 0x9575, 0x6647, 0x9576, 0x6648, 0x9577, 0x6649, 0x9578, 0x664A, 0x9579,
- 0x664B, 0xBDFA, 0x664C, 0xC9CE, 0x664D, 0x957A, 0x664E, 0x957B, 0x664F, 0xEACC, 0x6650, 0x957C, 0x6651, 0x957D, 0x6652, 0xC9B9,
- 0x6653, 0xCFFE, 0x6654, 0xEACA, 0x6655, 0xD4CE, 0x6656, 0xEACD, 0x6657, 0xEACF, 0x6658, 0x957E, 0x6659, 0x9580, 0x665A, 0xCDED,
- 0x665B, 0x9581, 0x665C, 0x9582, 0x665D, 0x9583, 0x665E, 0x9584, 0x665F, 0xEAC9, 0x6660, 0x9585, 0x6661, 0xEACE, 0x6662, 0x9586,
- 0x6663, 0x9587, 0x6664, 0xCEEE, 0x6665, 0x9588, 0x6666, 0xBBDE, 0x6667, 0x9589, 0x6668, 0xB3BF, 0x6669, 0x958A, 0x666A, 0x958B,
- 0x666B, 0x958C, 0x666C, 0x958D, 0x666D, 0x958E, 0x666E, 0xC6D5, 0x666F, 0xBEB0, 0x6670, 0xCEFA, 0x6671, 0x958F, 0x6672, 0x9590,
- 0x6673, 0x9591, 0x6674, 0xC7E7, 0x6675, 0x9592, 0x6676, 0xBEA7, 0x6677, 0xEAD0, 0x6678, 0x9593, 0x6679, 0x9594, 0x667A, 0xD6C7,
- 0x667B, 0x9595, 0x667C, 0x9596, 0x667D, 0x9597, 0x667E, 0xC1C0, 0x667F, 0x9598, 0x6680, 0x9599, 0x6681, 0x959A, 0x6682, 0xD4DD,
- 0x6683, 0x959B, 0x6684, 0xEAD1, 0x6685, 0x959C, 0x6686, 0x959D, 0x6687, 0xCFBE, 0x6688, 0x959E, 0x6689, 0x959F, 0x668A, 0x95A0,
- 0x668B, 0x95A1, 0x668C, 0xEAD2, 0x668D, 0x95A2, 0x668E, 0x95A3, 0x668F, 0x95A4, 0x6690, 0x95A5, 0x6691, 0xCAEE, 0x6692, 0x95A6,
- 0x6693, 0x95A7, 0x6694, 0x95A8, 0x6695, 0x95A9, 0x6696, 0xC5AF, 0x6697, 0xB0B5, 0x6698, 0x95AA, 0x6699, 0x95AB, 0x669A, 0x95AC,
- 0x669B, 0x95AD, 0x669C, 0x95AE, 0x669D, 0xEAD4, 0x669E, 0x95AF, 0x669F, 0x95B0, 0x66A0, 0x95B1, 0x66A1, 0x95B2, 0x66A2, 0x95B3,
- 0x66A3, 0x95B4, 0x66A4, 0x95B5, 0x66A5, 0x95B6, 0x66A6, 0x95B7, 0x66A7, 0xEAD3, 0x66A8, 0xF4DF, 0x66A9, 0x95B8, 0x66AA, 0x95B9,
- 0x66AB, 0x95BA, 0x66AC, 0x95BB, 0x66AD, 0x95BC, 0x66AE, 0xC4BA, 0x66AF, 0x95BD, 0x66B0, 0x95BE, 0x66B1, 0x95BF, 0x66B2, 0x95C0,
- 0x66B3, 0x95C1, 0x66B4, 0xB1A9, 0x66B5, 0x95C2, 0x66B6, 0x95C3, 0x66B7, 0x95C4, 0x66B8, 0x95C5, 0x66B9, 0xE5DF, 0x66BA, 0x95C6,
- 0x66BB, 0x95C7, 0x66BC, 0x95C8, 0x66BD, 0x95C9, 0x66BE, 0xEAD5, 0x66BF, 0x95CA, 0x66C0, 0x95CB, 0x66C1, 0x95CC, 0x66C2, 0x95CD,
- 0x66C3, 0x95CE, 0x66C4, 0x95CF, 0x66C5, 0x95D0, 0x66C6, 0x95D1, 0x66C7, 0x95D2, 0x66C8, 0x95D3, 0x66C9, 0x95D4, 0x66CA, 0x95D5,
- 0x66CB, 0x95D6, 0x66CC, 0x95D7, 0x66CD, 0x95D8, 0x66CE, 0x95D9, 0x66CF, 0x95DA, 0x66D0, 0x95DB, 0x66D1, 0x95DC, 0x66D2, 0x95DD,
- 0x66D3, 0x95DE, 0x66D4, 0x95DF, 0x66D5, 0x95E0, 0x66D6, 0x95E1, 0x66D7, 0x95E2, 0x66D8, 0x95E3, 0x66D9, 0xCAEF, 0x66DA, 0x95E4,
- 0x66DB, 0xEAD6, 0x66DC, 0xEAD7, 0x66DD, 0xC6D8, 0x66DE, 0x95E5, 0x66DF, 0x95E6, 0x66E0, 0x95E7, 0x66E1, 0x95E8, 0x66E2, 0x95E9,
- 0x66E3, 0x95EA, 0x66E4, 0x95EB, 0x66E5, 0x95EC, 0x66E6, 0xEAD8, 0x66E7, 0x95ED, 0x66E8, 0x95EE, 0x66E9, 0xEAD9, 0x66EA, 0x95EF,
- 0x66EB, 0x95F0, 0x66EC, 0x95F1, 0x66ED, 0x95F2, 0x66EE, 0x95F3, 0x66EF, 0x95F4, 0x66F0, 0xD4BB, 0x66F1, 0x95F5, 0x66F2, 0xC7FA,
- 0x66F3, 0xD2B7, 0x66F4, 0xB8FC, 0x66F5, 0x95F6, 0x66F6, 0x95F7, 0x66F7, 0xEAC2, 0x66F8, 0x95F8, 0x66F9, 0xB2DC, 0x66FA, 0x95F9,
- 0x66FB, 0x95FA, 0x66FC, 0xC2FC, 0x66FD, 0x95FB, 0x66FE, 0xD4F8, 0x66FF, 0xCCE6, 0x6700, 0xD7EE, 0x6701, 0x95FC, 0x6702, 0x95FD,
- 0x6703, 0x95FE, 0x6704, 0x9640, 0x6705, 0x9641, 0x6706, 0x9642, 0x6707, 0x9643, 0x6708, 0xD4C2, 0x6709, 0xD3D0, 0x670A, 0xEBC3,
- 0x670B, 0xC5F3, 0x670C, 0x9644, 0x670D, 0xB7FE, 0x670E, 0x9645, 0x670F, 0x9646, 0x6710, 0xEBD4, 0x6711, 0x9647, 0x6712, 0x9648,
- 0x6713, 0x9649, 0x6714, 0xCBB7, 0x6715, 0xEBDE, 0x6716, 0x964A, 0x6717, 0xC0CA, 0x6718, 0x964B, 0x6719, 0x964C, 0x671A, 0x964D,
- 0x671B, 0xCDFB, 0x671C, 0x964E, 0x671D, 0xB3AF, 0x671E, 0x964F, 0x671F, 0xC6DA, 0x6720, 0x9650, 0x6721, 0x9651, 0x6722, 0x9652,
- 0x6723, 0x9653, 0x6724, 0x9654, 0x6725, 0x9655, 0x6726, 0xEBFC, 0x6727, 0x9656, 0x6728, 0xC4BE, 0x6729, 0x9657, 0x672A, 0xCEB4,
- 0x672B, 0xC4A9, 0x672C, 0xB1BE, 0x672D, 0xD4FD, 0x672E, 0x9658, 0x672F, 0xCAF5, 0x6730, 0x9659, 0x6731, 0xD6EC, 0x6732, 0x965A,
- 0x6733, 0x965B, 0x6734, 0xC6D3, 0x6735, 0xB6E4, 0x6736, 0x965C, 0x6737, 0x965D, 0x6738, 0x965E, 0x6739, 0x965F, 0x673A, 0xBBFA,
- 0x673B, 0x9660, 0x673C, 0x9661, 0x673D, 0xD0E0, 0x673E, 0x9662, 0x673F, 0x9663, 0x6740, 0xC9B1, 0x6741, 0x9664, 0x6742, 0xD4D3,
- 0x6743, 0xC8A8, 0x6744, 0x9665, 0x6745, 0x9666, 0x6746, 0xB8CB, 0x6747, 0x9667, 0x6748, 0xE8BE, 0x6749, 0xC9BC, 0x674A, 0x9668,
- 0x674B, 0x9669, 0x674C, 0xE8BB, 0x674D, 0x966A, 0x674E, 0xC0EE, 0x674F, 0xD0D3, 0x6750, 0xB2C4, 0x6751, 0xB4E5, 0x6752, 0x966B,
- 0x6753, 0xE8BC, 0x6754, 0x966C, 0x6755, 0x966D, 0x6756, 0xD5C8, 0x6757, 0x966E, 0x6758, 0x966F, 0x6759, 0x9670, 0x675A, 0x9671,
- 0x675B, 0x9672, 0x675C, 0xB6C5, 0x675D, 0x9673, 0x675E, 0xE8BD, 0x675F, 0xCAF8, 0x6760, 0xB8DC, 0x6761, 0xCCF5, 0x6762, 0x9674,
- 0x6763, 0x9675, 0x6764, 0x9676, 0x6765, 0xC0B4, 0x6766, 0x9677, 0x6767, 0x9678, 0x6768, 0xD1EE, 0x6769, 0xE8BF, 0x676A, 0xE8C2,
- 0x676B, 0x9679, 0x676C, 0x967A, 0x676D, 0xBABC, 0x676E, 0x967B, 0x676F, 0xB1AD, 0x6770, 0xBDDC, 0x6771, 0x967C, 0x6772, 0xEABD,
- 0x6773, 0xE8C3, 0x6774, 0x967D, 0x6775, 0xE8C6, 0x6776, 0x967E, 0x6777, 0xE8CB, 0x6778, 0x9680, 0x6779, 0x9681, 0x677A, 0x9682,
- 0x677B, 0x9683, 0x677C, 0xE8CC, 0x677D, 0x9684, 0x677E, 0xCBC9, 0x677F, 0xB0E5, 0x6780, 0x9685, 0x6781, 0xBCAB, 0x6782, 0x9686,
- 0x6783, 0x9687, 0x6784, 0xB9B9, 0x6785, 0x9688, 0x6786, 0x9689, 0x6787, 0xE8C1, 0x6788, 0x968A, 0x6789, 0xCDF7, 0x678A, 0x968B,
- 0x678B, 0xE8CA, 0x678C, 0x968C, 0x678D, 0x968D, 0x678E, 0x968E, 0x678F, 0x968F, 0x6790, 0xCEF6, 0x6791, 0x9690, 0x6792, 0x9691,
- 0x6793, 0x9692, 0x6794, 0x9693, 0x6795, 0xD5ED, 0x6796, 0x9694, 0x6797, 0xC1D6, 0x6798, 0xE8C4, 0x6799, 0x9695, 0x679A, 0xC3B6,
- 0x679B, 0x9696, 0x679C, 0xB9FB, 0x679D, 0xD6A6, 0x679E, 0xE8C8, 0x679F, 0x9697, 0x67A0, 0x9698, 0x67A1, 0x9699, 0x67A2, 0xCAE0,
- 0x67A3, 0xD4E6, 0x67A4, 0x969A, 0x67A5, 0xE8C0, 0x67A6, 0x969B, 0x67A7, 0xE8C5, 0x67A8, 0xE8C7, 0x67A9, 0x969C, 0x67AA, 0xC7B9,
- 0x67AB, 0xB7E3, 0x67AC, 0x969D, 0x67AD, 0xE8C9, 0x67AE, 0x969E, 0x67AF, 0xBFDD, 0x67B0, 0xE8D2, 0x67B1, 0x969F, 0x67B2, 0x96A0,
- 0x67B3, 0xE8D7, 0x67B4, 0x96A1, 0x67B5, 0xE8D5, 0x67B6, 0xBCDC, 0x67B7, 0xBCCF, 0x67B8, 0xE8DB, 0x67B9, 0x96A2, 0x67BA, 0x96A3,
- 0x67BB, 0x96A4, 0x67BC, 0x96A5, 0x67BD, 0x96A6, 0x67BE, 0x96A7, 0x67BF, 0x96A8, 0x67C0, 0x96A9, 0x67C1, 0xE8DE, 0x67C2, 0x96AA,
- 0x67C3, 0xE8DA, 0x67C4, 0xB1FA, 0x67C5, 0x96AB, 0x67C6, 0x96AC, 0x67C7, 0x96AD, 0x67C8, 0x96AE, 0x67C9, 0x96AF, 0x67CA, 0x96B0,
- 0x67CB, 0x96B1, 0x67CC, 0x96B2, 0x67CD, 0x96B3, 0x67CE, 0x96B4, 0x67CF, 0xB0D8, 0x67D0, 0xC4B3, 0x67D1, 0xB8CC, 0x67D2, 0xC6E2,
- 0x67D3, 0xC8BE, 0x67D4, 0xC8E1, 0x67D5, 0x96B5, 0x67D6, 0x96B6, 0x67D7, 0x96B7, 0x67D8, 0xE8CF, 0x67D9, 0xE8D4, 0x67DA, 0xE8D6,
- 0x67DB, 0x96B8, 0x67DC, 0xB9F1, 0x67DD, 0xE8D8, 0x67DE, 0xD7F5, 0x67DF, 0x96B9, 0x67E0, 0xC4FB, 0x67E1, 0x96BA, 0x67E2, 0xE8DC,
- 0x67E3, 0x96BB, 0x67E4, 0x96BC, 0x67E5, 0xB2E9, 0x67E6, 0x96BD, 0x67E7, 0x96BE, 0x67E8, 0x96BF, 0x67E9, 0xE8D1, 0x67EA, 0x96C0,
- 0x67EB, 0x96C1, 0x67EC, 0xBCED, 0x67ED, 0x96C2, 0x67EE, 0x96C3, 0x67EF, 0xBFC2, 0x67F0, 0xE8CD, 0x67F1, 0xD6F9, 0x67F2, 0x96C4,
- 0x67F3, 0xC1F8, 0x67F4, 0xB2F1, 0x67F5, 0x96C5, 0x67F6, 0x96C6, 0x67F7, 0x96C7, 0x67F8, 0x96C8, 0x67F9, 0x96C9, 0x67FA, 0x96CA,
- 0x67FB, 0x96CB, 0x67FC, 0x96CC, 0x67FD, 0xE8DF, 0x67FE, 0x96CD, 0x67FF, 0xCAC1, 0x6800, 0xE8D9, 0x6801, 0x96CE, 0x6802, 0x96CF,
- 0x6803, 0x96D0, 0x6804, 0x96D1, 0x6805, 0xD5A4, 0x6806, 0x96D2, 0x6807, 0xB1EA, 0x6808, 0xD5BB, 0x6809, 0xE8CE, 0x680A, 0xE8D0,
- 0x680B, 0xB6B0, 0x680C, 0xE8D3, 0x680D, 0x96D3, 0x680E, 0xE8DD, 0x680F, 0xC0B8, 0x6810, 0x96D4, 0x6811, 0xCAF7, 0x6812, 0x96D5,
- 0x6813, 0xCBA8, 0x6814, 0x96D6, 0x6815, 0x96D7, 0x6816, 0xC6DC, 0x6817, 0xC0F5, 0x6818, 0x96D8, 0x6819, 0x96D9, 0x681A, 0x96DA,
- 0x681B, 0x96DB, 0x681C, 0x96DC, 0x681D, 0xE8E9, 0x681E, 0x96DD, 0x681F, 0x96DE, 0x6820, 0x96DF, 0x6821, 0xD0A3, 0x6822, 0x96E0,
- 0x6823, 0x96E1, 0x6824, 0x96E2, 0x6825, 0x96E3, 0x6826, 0x96E4, 0x6827, 0x96E5, 0x6828, 0x96E6, 0x6829, 0xE8F2, 0x682A, 0xD6EA,
- 0x682B, 0x96E7, 0x682C, 0x96E8, 0x682D, 0x96E9, 0x682E, 0x96EA, 0x682F, 0x96EB, 0x6830, 0x96EC, 0x6831, 0x96ED, 0x6832, 0xE8E0,
- 0x6833, 0xE8E1, 0x6834, 0x96EE, 0x6835, 0x96EF, 0x6836, 0x96F0, 0x6837, 0xD1F9, 0x6838, 0xBACB, 0x6839, 0xB8F9, 0x683A, 0x96F1,
- 0x683B, 0x96F2, 0x683C, 0xB8F1, 0x683D, 0xD4D4, 0x683E, 0xE8EF, 0x683F, 0x96F3, 0x6840, 0xE8EE, 0x6841, 0xE8EC, 0x6842, 0xB9F0,
- 0x6843, 0xCCD2, 0x6844, 0xE8E6, 0x6845, 0xCEA6, 0x6846, 0xBFF2, 0x6847, 0x96F4, 0x6848, 0xB0B8, 0x6849, 0xE8F1, 0x684A, 0xE8F0,
- 0x684B, 0x96F5, 0x684C, 0xD7C0, 0x684D, 0x96F6, 0x684E, 0xE8E4, 0x684F, 0x96F7, 0x6850, 0xCDA9, 0x6851, 0xC9A3, 0x6852, 0x96F8,
- 0x6853, 0xBBB8, 0x6854, 0xBDDB, 0x6855, 0xE8EA, 0x6856, 0x96F9, 0x6857, 0x96FA, 0x6858, 0x96FB, 0x6859, 0x96FC, 0x685A, 0x96FD,
- 0x685B, 0x96FE, 0x685C, 0x9740, 0x685D, 0x9741, 0x685E, 0x9742, 0x685F, 0x9743, 0x6860, 0xE8E2, 0x6861, 0xE8E3, 0x6862, 0xE8E5,
- 0x6863, 0xB5B5, 0x6864, 0xE8E7, 0x6865, 0xC7C5, 0x6866, 0xE8EB, 0x6867, 0xE8ED, 0x6868, 0xBDB0, 0x6869, 0xD7AE, 0x686A, 0x9744,
- 0x686B, 0xE8F8, 0x686C, 0x9745, 0x686D, 0x9746, 0x686E, 0x9747, 0x686F, 0x9748, 0x6870, 0x9749, 0x6871, 0x974A, 0x6872, 0x974B,
- 0x6873, 0x974C, 0x6874, 0xE8F5, 0x6875, 0x974D, 0x6876, 0xCDB0, 0x6877, 0xE8F6, 0x6878, 0x974E, 0x6879, 0x974F, 0x687A, 0x9750,
- 0x687B, 0x9751, 0x687C, 0x9752, 0x687D, 0x9753, 0x687E, 0x9754, 0x687F, 0x9755, 0x6880, 0x9756, 0x6881, 0xC1BA, 0x6882, 0x9757,
- 0x6883, 0xE8E8, 0x6884, 0x9758, 0x6885, 0xC3B7, 0x6886, 0xB0F0, 0x6887, 0x9759, 0x6888, 0x975A, 0x6889, 0x975B, 0x688A, 0x975C,
- 0x688B, 0x975D, 0x688C, 0x975E, 0x688D, 0x975F, 0x688E, 0x9760, 0x688F, 0xE8F4, 0x6890, 0x9761, 0x6891, 0x9762, 0x6892, 0x9763,
- 0x6893, 0xE8F7, 0x6894, 0x9764, 0x6895, 0x9765, 0x6896, 0x9766, 0x6897, 0xB9A3, 0x6898, 0x9767, 0x6899, 0x9768, 0x689A, 0x9769,
- 0x689B, 0x976A, 0x689C, 0x976B, 0x689D, 0x976C, 0x689E, 0x976D, 0x689F, 0x976E, 0x68A0, 0x976F, 0x68A1, 0x9770, 0x68A2, 0xC9D2,
- 0x68A3, 0x9771, 0x68A4, 0x9772, 0x68A5, 0x9773, 0x68A6, 0xC3CE, 0x68A7, 0xCEE0, 0x68A8, 0xC0E6, 0x68A9, 0x9774, 0x68AA, 0x9775,
- 0x68AB, 0x9776, 0x68AC, 0x9777, 0x68AD, 0xCBF3, 0x68AE, 0x9778, 0x68AF, 0xCCDD, 0x68B0, 0xD0B5, 0x68B1, 0x9779, 0x68B2, 0x977A,
- 0x68B3, 0xCAE1, 0x68B4, 0x977B, 0x68B5, 0xE8F3, 0x68B6, 0x977C, 0x68B7, 0x977D, 0x68B8, 0x977E, 0x68B9, 0x9780, 0x68BA, 0x9781,
- 0x68BB, 0x9782, 0x68BC, 0x9783, 0x68BD, 0x9784, 0x68BE, 0x9785, 0x68BF, 0x9786, 0x68C0, 0xBCEC, 0x68C1, 0x9787, 0x68C2, 0xE8F9,
- 0x68C3, 0x9788, 0x68C4, 0x9789, 0x68C5, 0x978A, 0x68C6, 0x978B, 0x68C7, 0x978C, 0x68C8, 0x978D, 0x68C9, 0xC3DE, 0x68CA, 0x978E,
- 0x68CB, 0xC6E5, 0x68CC, 0x978F, 0x68CD, 0xB9F7, 0x68CE, 0x9790, 0x68CF, 0x9791, 0x68D0, 0x9792, 0x68D1, 0x9793, 0x68D2, 0xB0F4,
- 0x68D3, 0x9794, 0x68D4, 0x9795, 0x68D5, 0xD7D8, 0x68D6, 0x9796, 0x68D7, 0x9797, 0x68D8, 0xBCAC, 0x68D9, 0x9798, 0x68DA, 0xC5EF,
- 0x68DB, 0x9799, 0x68DC, 0x979A, 0x68DD, 0x979B, 0x68DE, 0x979C, 0x68DF, 0x979D, 0x68E0, 0xCCC4, 0x68E1, 0x979E, 0x68E2, 0x979F,
- 0x68E3, 0xE9A6, 0x68E4, 0x97A0, 0x68E5, 0x97A1, 0x68E6, 0x97A2, 0x68E7, 0x97A3, 0x68E8, 0x97A4, 0x68E9, 0x97A5, 0x68EA, 0x97A6,
- 0x68EB, 0x97A7, 0x68EC, 0x97A8, 0x68ED, 0x97A9, 0x68EE, 0xC9AD, 0x68EF, 0x97AA, 0x68F0, 0xE9A2, 0x68F1, 0xC0E2, 0x68F2, 0x97AB,
- 0x68F3, 0x97AC, 0x68F4, 0x97AD, 0x68F5, 0xBFC3, 0x68F6, 0x97AE, 0x68F7, 0x97AF, 0x68F8, 0x97B0, 0x68F9, 0xE8FE, 0x68FA, 0xB9D7,
- 0x68FB, 0x97B1, 0x68FC, 0xE8FB, 0x68FD, 0x97B2, 0x68FE, 0x97B3, 0x68FF, 0x97B4, 0x6900, 0x97B5, 0x6901, 0xE9A4, 0x6902, 0x97B6,
- 0x6903, 0x97B7, 0x6904, 0x97B8, 0x6905, 0xD2CE, 0x6906, 0x97B9, 0x6907, 0x97BA, 0x6908, 0x97BB, 0x6909, 0x97BC, 0x690A, 0x97BD,
- 0x690B, 0xE9A3, 0x690C, 0x97BE, 0x690D, 0xD6B2, 0x690E, 0xD7B5, 0x690F, 0x97BF, 0x6910, 0xE9A7, 0x6911, 0x97C0, 0x6912, 0xBDB7,
- 0x6913, 0x97C1, 0x6914, 0x97C2, 0x6915, 0x97C3, 0x6916, 0x97C4, 0x6917, 0x97C5, 0x6918, 0x97C6, 0x6919, 0x97C7, 0x691A, 0x97C8,
- 0x691B, 0x97C9, 0x691C, 0x97CA, 0x691D, 0x97CB, 0x691E, 0x97CC, 0x691F, 0xE8FC, 0x6920, 0xE8FD, 0x6921, 0x97CD, 0x6922, 0x97CE,
- 0x6923, 0x97CF, 0x6924, 0xE9A1, 0x6925, 0x97D0, 0x6926, 0x97D1, 0x6927, 0x97D2, 0x6928, 0x97D3, 0x6929, 0x97D4, 0x692A, 0x97D5,
- 0x692B, 0x97D6, 0x692C, 0x97D7, 0x692D, 0xCDD6, 0x692E, 0x97D8, 0x692F, 0x97D9, 0x6930, 0xD2AC, 0x6931, 0x97DA, 0x6932, 0x97DB,
- 0x6933, 0x97DC, 0x6934, 0xE9B2, 0x6935, 0x97DD, 0x6936, 0x97DE, 0x6937, 0x97DF, 0x6938, 0x97E0, 0x6939, 0xE9A9, 0x693A, 0x97E1,
- 0x693B, 0x97E2, 0x693C, 0x97E3, 0x693D, 0xB4AA, 0x693E, 0x97E4, 0x693F, 0xB4BB, 0x6940, 0x97E5, 0x6941, 0x97E6, 0x6942, 0xE9AB,
- 0x6943, 0x97E7, 0x6944, 0x97E8, 0x6945, 0x97E9, 0x6946, 0x97EA, 0x6947, 0x97EB, 0x6948, 0x97EC, 0x6949, 0x97ED, 0x694A, 0x97EE,
- 0x694B, 0x97EF, 0x694C, 0x97F0, 0x694D, 0x97F1, 0x694E, 0x97F2, 0x694F, 0x97F3, 0x6950, 0x97F4, 0x6951, 0x97F5, 0x6952, 0x97F6,
- 0x6953, 0x97F7, 0x6954, 0xD0A8, 0x6955, 0x97F8, 0x6956, 0x97F9, 0x6957, 0xE9A5, 0x6958, 0x97FA, 0x6959, 0x97FB, 0x695A, 0xB3FE,
- 0x695B, 0x97FC, 0x695C, 0x97FD, 0x695D, 0xE9AC, 0x695E, 0xC0E3, 0x695F, 0x97FE, 0x6960, 0xE9AA, 0x6961, 0x9840, 0x6962, 0x9841,
- 0x6963, 0xE9B9, 0x6964, 0x9842, 0x6965, 0x9843, 0x6966, 0xE9B8, 0x6967, 0x9844, 0x6968, 0x9845, 0x6969, 0x9846, 0x696A, 0x9847,
- 0x696B, 0xE9AE, 0x696C, 0x9848, 0x696D, 0x9849, 0x696E, 0xE8FA, 0x696F, 0x984A, 0x6970, 0x984B, 0x6971, 0xE9A8, 0x6972, 0x984C,
- 0x6973, 0x984D, 0x6974, 0x984E, 0x6975, 0x984F, 0x6976, 0x9850, 0x6977, 0xBFAC, 0x6978, 0xE9B1, 0x6979, 0xE9BA, 0x697A, 0x9851,
- 0x697B, 0x9852, 0x697C, 0xC2A5, 0x697D, 0x9853, 0x697E, 0x9854, 0x697F, 0x9855, 0x6980, 0xE9AF, 0x6981, 0x9856, 0x6982, 0xB8C5,
- 0x6983, 0x9857, 0x6984, 0xE9AD, 0x6985, 0x9858, 0x6986, 0xD3DC, 0x6987, 0xE9B4, 0x6988, 0xE9B5, 0x6989, 0xE9B7, 0x698A, 0x9859,
- 0x698B, 0x985A, 0x698C, 0x985B, 0x698D, 0xE9C7, 0x698E, 0x985C, 0x698F, 0x985D, 0x6990, 0x985E, 0x6991, 0x985F, 0x6992, 0x9860,
- 0x6993, 0x9861, 0x6994, 0xC0C6, 0x6995, 0xE9C5, 0x6996, 0x9862, 0x6997, 0x9863, 0x6998, 0xE9B0, 0x6999, 0x9864, 0x699A, 0x9865,
- 0x699B, 0xE9BB, 0x699C, 0xB0F1, 0x699D, 0x9866, 0x699E, 0x9867, 0x699F, 0x9868, 0x69A0, 0x9869, 0x69A1, 0x986A, 0x69A2, 0x986B,
- 0x69A3, 0x986C, 0x69A4, 0x986D, 0x69A5, 0x986E, 0x69A6, 0x986F, 0x69A7, 0xE9BC, 0x69A8, 0xD5A5, 0x69A9, 0x9870, 0x69AA, 0x9871,
- 0x69AB, 0xE9BE, 0x69AC, 0x9872, 0x69AD, 0xE9BF, 0x69AE, 0x9873, 0x69AF, 0x9874, 0x69B0, 0x9875, 0x69B1, 0xE9C1, 0x69B2, 0x9876,
- 0x69B3, 0x9877, 0x69B4, 0xC1F1, 0x69B5, 0x9878, 0x69B6, 0x9879, 0x69B7, 0xC8B6, 0x69B8, 0x987A, 0x69B9, 0x987B, 0x69BA, 0x987C,
- 0x69BB, 0xE9BD, 0x69BC, 0x987D, 0x69BD, 0x987E, 0x69BE, 0x9880, 0x69BF, 0x9881, 0x69C0, 0x9882, 0x69C1, 0xE9C2, 0x69C2, 0x9883,
- 0x69C3, 0x9884, 0x69C4, 0x9885, 0x69C5, 0x9886, 0x69C6, 0x9887, 0x69C7, 0x9888, 0x69C8, 0x9889, 0x69C9, 0x988A, 0x69CA, 0xE9C3,
- 0x69CB, 0x988B, 0x69CC, 0xE9B3, 0x69CD, 0x988C, 0x69CE, 0xE9B6, 0x69CF, 0x988D, 0x69D0, 0xBBB1, 0x69D1, 0x988E, 0x69D2, 0x988F,
- 0x69D3, 0x9890, 0x69D4, 0xE9C0, 0x69D5, 0x9891, 0x69D6, 0x9892, 0x69D7, 0x9893, 0x69D8, 0x9894, 0x69D9, 0x9895, 0x69DA, 0x9896,
- 0x69DB, 0xBCF7, 0x69DC, 0x9897, 0x69DD, 0x9898, 0x69DE, 0x9899, 0x69DF, 0xE9C4, 0x69E0, 0xE9C6, 0x69E1, 0x989A, 0x69E2, 0x989B,
- 0x69E3, 0x989C, 0x69E4, 0x989D, 0x69E5, 0x989E, 0x69E6, 0x989F, 0x69E7, 0x98A0, 0x69E8, 0x98A1, 0x69E9, 0x98A2, 0x69EA, 0x98A3,
- 0x69EB, 0x98A4, 0x69EC, 0x98A5, 0x69ED, 0xE9CA, 0x69EE, 0x98A6, 0x69EF, 0x98A7, 0x69F0, 0x98A8, 0x69F1, 0x98A9, 0x69F2, 0xE9CE,
- 0x69F3, 0x98AA, 0x69F4, 0x98AB, 0x69F5, 0x98AC, 0x69F6, 0x98AD, 0x69F7, 0x98AE, 0x69F8, 0x98AF, 0x69F9, 0x98B0, 0x69FA, 0x98B1,
- 0x69FB, 0x98B2, 0x69FC, 0x98B3, 0x69FD, 0xB2DB, 0x69FE, 0x98B4, 0x69FF, 0xE9C8, 0x6A00, 0x98B5, 0x6A01, 0x98B6, 0x6A02, 0x98B7,
- 0x6A03, 0x98B8, 0x6A04, 0x98B9, 0x6A05, 0x98BA, 0x6A06, 0x98BB, 0x6A07, 0x98BC, 0x6A08, 0x98BD, 0x6A09, 0x98BE, 0x6A0A, 0xB7AE,
- 0x6A0B, 0x98BF, 0x6A0C, 0x98C0, 0x6A0D, 0x98C1, 0x6A0E, 0x98C2, 0x6A0F, 0x98C3, 0x6A10, 0x98C4, 0x6A11, 0x98C5, 0x6A12, 0x98C6,
- 0x6A13, 0x98C7, 0x6A14, 0x98C8, 0x6A15, 0x98C9, 0x6A16, 0x98CA, 0x6A17, 0xE9CB, 0x6A18, 0xE9CC, 0x6A19, 0x98CB, 0x6A1A, 0x98CC,
- 0x6A1B, 0x98CD, 0x6A1C, 0x98CE, 0x6A1D, 0x98CF, 0x6A1E, 0x98D0, 0x6A1F, 0xD5C1, 0x6A20, 0x98D1, 0x6A21, 0xC4A3, 0x6A22, 0x98D2,
- 0x6A23, 0x98D3, 0x6A24, 0x98D4, 0x6A25, 0x98D5, 0x6A26, 0x98D6, 0x6A27, 0x98D7, 0x6A28, 0xE9D8, 0x6A29, 0x98D8, 0x6A2A, 0xBAE1,
- 0x6A2B, 0x98D9, 0x6A2C, 0x98DA, 0x6A2D, 0x98DB, 0x6A2E, 0x98DC, 0x6A2F, 0xE9C9, 0x6A30, 0x98DD, 0x6A31, 0xD3A3, 0x6A32, 0x98DE,
- 0x6A33, 0x98DF, 0x6A34, 0x98E0, 0x6A35, 0xE9D4, 0x6A36, 0x98E1, 0x6A37, 0x98E2, 0x6A38, 0x98E3, 0x6A39, 0x98E4, 0x6A3A, 0x98E5,
- 0x6A3B, 0x98E6, 0x6A3C, 0x98E7, 0x6A3D, 0xE9D7, 0x6A3E, 0xE9D0, 0x6A3F, 0x98E8, 0x6A40, 0x98E9, 0x6A41, 0x98EA, 0x6A42, 0x98EB,
- 0x6A43, 0x98EC, 0x6A44, 0xE9CF, 0x6A45, 0x98ED, 0x6A46, 0x98EE, 0x6A47, 0xC7C1, 0x6A48, 0x98EF, 0x6A49, 0x98F0, 0x6A4A, 0x98F1,
- 0x6A4B, 0x98F2, 0x6A4C, 0x98F3, 0x6A4D, 0x98F4, 0x6A4E, 0x98F5, 0x6A4F, 0x98F6, 0x6A50, 0xE9D2, 0x6A51, 0x98F7, 0x6A52, 0x98F8,
- 0x6A53, 0x98F9, 0x6A54, 0x98FA, 0x6A55, 0x98FB, 0x6A56, 0x98FC, 0x6A57, 0x98FD, 0x6A58, 0xE9D9, 0x6A59, 0xB3C8, 0x6A5A, 0x98FE,
- 0x6A5B, 0xE9D3, 0x6A5C, 0x9940, 0x6A5D, 0x9941, 0x6A5E, 0x9942, 0x6A5F, 0x9943, 0x6A60, 0x9944, 0x6A61, 0xCFF0, 0x6A62, 0x9945,
- 0x6A63, 0x9946, 0x6A64, 0x9947, 0x6A65, 0xE9CD, 0x6A66, 0x9948, 0x6A67, 0x9949, 0x6A68, 0x994A, 0x6A69, 0x994B, 0x6A6A, 0x994C,
- 0x6A6B, 0x994D, 0x6A6C, 0x994E, 0x6A6D, 0x994F, 0x6A6E, 0x9950, 0x6A6F, 0x9951, 0x6A70, 0x9952, 0x6A71, 0xB3F7, 0x6A72, 0x9953,
- 0x6A73, 0x9954, 0x6A74, 0x9955, 0x6A75, 0x9956, 0x6A76, 0x9957, 0x6A77, 0x9958, 0x6A78, 0x9959, 0x6A79, 0xE9D6, 0x6A7A, 0x995A,
- 0x6A7B, 0x995B, 0x6A7C, 0xE9DA, 0x6A7D, 0x995C, 0x6A7E, 0x995D, 0x6A7F, 0x995E, 0x6A80, 0xCCB4, 0x6A81, 0x995F, 0x6A82, 0x9960,
- 0x6A83, 0x9961, 0x6A84, 0xCFAD, 0x6A85, 0x9962, 0x6A86, 0x9963, 0x6A87, 0x9964, 0x6A88, 0x9965, 0x6A89, 0x9966, 0x6A8A, 0x9967,
- 0x6A8B, 0x9968, 0x6A8C, 0x9969, 0x6A8D, 0x996A, 0x6A8E, 0xE9D5, 0x6A8F, 0x996B, 0x6A90, 0xE9DC, 0x6A91, 0xE9DB, 0x6A92, 0x996C,
- 0x6A93, 0x996D, 0x6A94, 0x996E, 0x6A95, 0x996F, 0x6A96, 0x9970, 0x6A97, 0xE9DE, 0x6A98, 0x9971, 0x6A99, 0x9972, 0x6A9A, 0x9973,
- 0x6A9B, 0x9974, 0x6A9C, 0x9975, 0x6A9D, 0x9976, 0x6A9E, 0x9977, 0x6A9F, 0x9978, 0x6AA0, 0xE9D1, 0x6AA1, 0x9979, 0x6AA2, 0x997A,
- 0x6AA3, 0x997B, 0x6AA4, 0x997C, 0x6AA5, 0x997D, 0x6AA6, 0x997E, 0x6AA7, 0x9980, 0x6AA8, 0x9981, 0x6AA9, 0xE9DD, 0x6AAA, 0x9982,
- 0x6AAB, 0xE9DF, 0x6AAC, 0xC3CA, 0x6AAD, 0x9983, 0x6AAE, 0x9984, 0x6AAF, 0x9985, 0x6AB0, 0x9986, 0x6AB1, 0x9987, 0x6AB2, 0x9988,
- 0x6AB3, 0x9989, 0x6AB4, 0x998A, 0x6AB5, 0x998B, 0x6AB6, 0x998C, 0x6AB7, 0x998D, 0x6AB8, 0x998E, 0x6AB9, 0x998F, 0x6ABA, 0x9990,
- 0x6ABB, 0x9991, 0x6ABC, 0x9992, 0x6ABD, 0x9993, 0x6ABE, 0x9994, 0x6ABF, 0x9995, 0x6AC0, 0x9996, 0x6AC1, 0x9997, 0x6AC2, 0x9998,
- 0x6AC3, 0x9999, 0x6AC4, 0x999A, 0x6AC5, 0x999B, 0x6AC6, 0x999C, 0x6AC7, 0x999D, 0x6AC8, 0x999E, 0x6AC9, 0x999F, 0x6ACA, 0x99A0,
- 0x6ACB, 0x99A1, 0x6ACC, 0x99A2, 0x6ACD, 0x99A3, 0x6ACE, 0x99A4, 0x6ACF, 0x99A5, 0x6AD0, 0x99A6, 0x6AD1, 0x99A7, 0x6AD2, 0x99A8,
- 0x6AD3, 0x99A9, 0x6AD4, 0x99AA, 0x6AD5, 0x99AB, 0x6AD6, 0x99AC, 0x6AD7, 0x99AD, 0x6AD8, 0x99AE, 0x6AD9, 0x99AF, 0x6ADA, 0x99B0,
- 0x6ADB, 0x99B1, 0x6ADC, 0x99B2, 0x6ADD, 0x99B3, 0x6ADE, 0x99B4, 0x6ADF, 0x99B5, 0x6AE0, 0x99B6, 0x6AE1, 0x99B7, 0x6AE2, 0x99B8,
- 0x6AE3, 0x99B9, 0x6AE4, 0x99BA, 0x6AE5, 0x99BB, 0x6AE6, 0x99BC, 0x6AE7, 0x99BD, 0x6AE8, 0x99BE, 0x6AE9, 0x99BF, 0x6AEA, 0x99C0,
- 0x6AEB, 0x99C1, 0x6AEC, 0x99C2, 0x6AED, 0x99C3, 0x6AEE, 0x99C4, 0x6AEF, 0x99C5, 0x6AF0, 0x99C6, 0x6AF1, 0x99C7, 0x6AF2, 0x99C8,
- 0x6AF3, 0x99C9, 0x6AF4, 0x99CA, 0x6AF5, 0x99CB, 0x6AF6, 0x99CC, 0x6AF7, 0x99CD, 0x6AF8, 0x99CE, 0x6AF9, 0x99CF, 0x6AFA, 0x99D0,
- 0x6AFB, 0x99D1, 0x6AFC, 0x99D2, 0x6AFD, 0x99D3, 0x6AFE, 0x99D4, 0x6AFF, 0x99D5, 0x6B00, 0x99D6, 0x6B01, 0x99D7, 0x6B02, 0x99D8,
- 0x6B03, 0x99D9, 0x6B04, 0x99DA, 0x6B05, 0x99DB, 0x6B06, 0x99DC, 0x6B07, 0x99DD, 0x6B08, 0x99DE, 0x6B09, 0x99DF, 0x6B0A, 0x99E0,
- 0x6B0B, 0x99E1, 0x6B0C, 0x99E2, 0x6B0D, 0x99E3, 0x6B0E, 0x99E4, 0x6B0F, 0x99E5, 0x6B10, 0x99E6, 0x6B11, 0x99E7, 0x6B12, 0x99E8,
- 0x6B13, 0x99E9, 0x6B14, 0x99EA, 0x6B15, 0x99EB, 0x6B16, 0x99EC, 0x6B17, 0x99ED, 0x6B18, 0x99EE, 0x6B19, 0x99EF, 0x6B1A, 0x99F0,
- 0x6B1B, 0x99F1, 0x6B1C, 0x99F2, 0x6B1D, 0x99F3, 0x6B1E, 0x99F4, 0x6B1F, 0x99F5, 0x6B20, 0xC7B7, 0x6B21, 0xB4CE, 0x6B22, 0xBBB6,
- 0x6B23, 0xD0C0, 0x6B24, 0xECA3, 0x6B25, 0x99F6, 0x6B26, 0x99F7, 0x6B27, 0xC5B7, 0x6B28, 0x99F8, 0x6B29, 0x99F9, 0x6B2A, 0x99FA,
- 0x6B2B, 0x99FB, 0x6B2C, 0x99FC, 0x6B2D, 0x99FD, 0x6B2E, 0x99FE, 0x6B2F, 0x9A40, 0x6B30, 0x9A41, 0x6B31, 0x9A42, 0x6B32, 0xD3FB,
- 0x6B33, 0x9A43, 0x6B34, 0x9A44, 0x6B35, 0x9A45, 0x6B36, 0x9A46, 0x6B37, 0xECA4, 0x6B38, 0x9A47, 0x6B39, 0xECA5, 0x6B3A, 0xC6DB,
- 0x6B3B, 0x9A48, 0x6B3C, 0x9A49, 0x6B3D, 0x9A4A, 0x6B3E, 0xBFEE, 0x6B3F, 0x9A4B, 0x6B40, 0x9A4C, 0x6B41, 0x9A4D, 0x6B42, 0x9A4E,
- 0x6B43, 0xECA6, 0x6B44, 0x9A4F, 0x6B45, 0x9A50, 0x6B46, 0xECA7, 0x6B47, 0xD0AA, 0x6B48, 0x9A51, 0x6B49, 0xC7B8, 0x6B4A, 0x9A52,
- 0x6B4B, 0x9A53, 0x6B4C, 0xB8E8, 0x6B4D, 0x9A54, 0x6B4E, 0x9A55, 0x6B4F, 0x9A56, 0x6B50, 0x9A57, 0x6B51, 0x9A58, 0x6B52, 0x9A59,
- 0x6B53, 0x9A5A, 0x6B54, 0x9A5B, 0x6B55, 0x9A5C, 0x6B56, 0x9A5D, 0x6B57, 0x9A5E, 0x6B58, 0x9A5F, 0x6B59, 0xECA8, 0x6B5A, 0x9A60,
- 0x6B5B, 0x9A61, 0x6B5C, 0x9A62, 0x6B5D, 0x9A63, 0x6B5E, 0x9A64, 0x6B5F, 0x9A65, 0x6B60, 0x9A66, 0x6B61, 0x9A67, 0x6B62, 0xD6B9,
- 0x6B63, 0xD5FD, 0x6B64, 0xB4CB, 0x6B65, 0xB2BD, 0x6B66, 0xCEE4, 0x6B67, 0xC6E7, 0x6B68, 0x9A68, 0x6B69, 0x9A69, 0x6B6A, 0xCDE1,
- 0x6B6B, 0x9A6A, 0x6B6C, 0x9A6B, 0x6B6D, 0x9A6C, 0x6B6E, 0x9A6D, 0x6B6F, 0x9A6E, 0x6B70, 0x9A6F, 0x6B71, 0x9A70, 0x6B72, 0x9A71,
- 0x6B73, 0x9A72, 0x6B74, 0x9A73, 0x6B75, 0x9A74, 0x6B76, 0x9A75, 0x6B77, 0x9A76, 0x6B78, 0x9A77, 0x6B79, 0xB4F5, 0x6B7A, 0x9A78,
- 0x6B7B, 0xCBC0, 0x6B7C, 0xBCDF, 0x6B7D, 0x9A79, 0x6B7E, 0x9A7A, 0x6B7F, 0x9A7B, 0x6B80, 0x9A7C, 0x6B81, 0xE9E2, 0x6B82, 0xE9E3,
- 0x6B83, 0xD1EA, 0x6B84, 0xE9E5, 0x6B85, 0x9A7D, 0x6B86, 0xB4F9, 0x6B87, 0xE9E4, 0x6B88, 0x9A7E, 0x6B89, 0xD1B3, 0x6B8A, 0xCAE2,
- 0x6B8B, 0xB2D0, 0x6B8C, 0x9A80, 0x6B8D, 0xE9E8, 0x6B8E, 0x9A81, 0x6B8F, 0x9A82, 0x6B90, 0x9A83, 0x6B91, 0x9A84, 0x6B92, 0xE9E6,
- 0x6B93, 0xE9E7, 0x6B94, 0x9A85, 0x6B95, 0x9A86, 0x6B96, 0xD6B3, 0x6B97, 0x9A87, 0x6B98, 0x9A88, 0x6B99, 0x9A89, 0x6B9A, 0xE9E9,
- 0x6B9B, 0xE9EA, 0x6B9C, 0x9A8A, 0x6B9D, 0x9A8B, 0x6B9E, 0x9A8C, 0x6B9F, 0x9A8D, 0x6BA0, 0x9A8E, 0x6BA1, 0xE9EB, 0x6BA2, 0x9A8F,
- 0x6BA3, 0x9A90, 0x6BA4, 0x9A91, 0x6BA5, 0x9A92, 0x6BA6, 0x9A93, 0x6BA7, 0x9A94, 0x6BA8, 0x9A95, 0x6BA9, 0x9A96, 0x6BAA, 0xE9EC,
- 0x6BAB, 0x9A97, 0x6BAC, 0x9A98, 0x6BAD, 0x9A99, 0x6BAE, 0x9A9A, 0x6BAF, 0x9A9B, 0x6BB0, 0x9A9C, 0x6BB1, 0x9A9D, 0x6BB2, 0x9A9E,
- 0x6BB3, 0xECAF, 0x6BB4, 0xC5B9, 0x6BB5, 0xB6CE, 0x6BB6, 0x9A9F, 0x6BB7, 0xD2F3, 0x6BB8, 0x9AA0, 0x6BB9, 0x9AA1, 0x6BBA, 0x9AA2,
- 0x6BBB, 0x9AA3, 0x6BBC, 0x9AA4, 0x6BBD, 0x9AA5, 0x6BBE, 0x9AA6, 0x6BBF, 0xB5EE, 0x6BC0, 0x9AA7, 0x6BC1, 0xBBD9, 0x6BC2, 0xECB1,
- 0x6BC3, 0x9AA8, 0x6BC4, 0x9AA9, 0x6BC5, 0xD2E3, 0x6BC6, 0x9AAA, 0x6BC7, 0x9AAB, 0x6BC8, 0x9AAC, 0x6BC9, 0x9AAD, 0x6BCA, 0x9AAE,
- 0x6BCB, 0xCEE3, 0x6BCC, 0x9AAF, 0x6BCD, 0xC4B8, 0x6BCE, 0x9AB0, 0x6BCF, 0xC3BF, 0x6BD0, 0x9AB1, 0x6BD1, 0x9AB2, 0x6BD2, 0xB6BE,
- 0x6BD3, 0xD8B9, 0x6BD4, 0xB1C8, 0x6BD5, 0xB1CF, 0x6BD6, 0xB1D1, 0x6BD7, 0xC5FE, 0x6BD8, 0x9AB3, 0x6BD9, 0xB1D0, 0x6BDA, 0x9AB4,
- 0x6BDB, 0xC3AB, 0x6BDC, 0x9AB5, 0x6BDD, 0x9AB6, 0x6BDE, 0x9AB7, 0x6BDF, 0x9AB8, 0x6BE0, 0x9AB9, 0x6BE1, 0xD5B1, 0x6BE2, 0x9ABA,
- 0x6BE3, 0x9ABB, 0x6BE4, 0x9ABC, 0x6BE5, 0x9ABD, 0x6BE6, 0x9ABE, 0x6BE7, 0x9ABF, 0x6BE8, 0x9AC0, 0x6BE9, 0x9AC1, 0x6BEA, 0xEBA4,
- 0x6BEB, 0xBAC1, 0x6BEC, 0x9AC2, 0x6BED, 0x9AC3, 0x6BEE, 0x9AC4, 0x6BEF, 0xCCBA, 0x6BF0, 0x9AC5, 0x6BF1, 0x9AC6, 0x6BF2, 0x9AC7,
- 0x6BF3, 0xEBA5, 0x6BF4, 0x9AC8, 0x6BF5, 0xEBA7, 0x6BF6, 0x9AC9, 0x6BF7, 0x9ACA, 0x6BF8, 0x9ACB, 0x6BF9, 0xEBA8, 0x6BFA, 0x9ACC,
- 0x6BFB, 0x9ACD, 0x6BFC, 0x9ACE, 0x6BFD, 0xEBA6, 0x6BFE, 0x9ACF, 0x6BFF, 0x9AD0, 0x6C00, 0x9AD1, 0x6C01, 0x9AD2, 0x6C02, 0x9AD3,
- 0x6C03, 0x9AD4, 0x6C04, 0x9AD5, 0x6C05, 0xEBA9, 0x6C06, 0xEBAB, 0x6C07, 0xEBAA, 0x6C08, 0x9AD6, 0x6C09, 0x9AD7, 0x6C0A, 0x9AD8,
- 0x6C0B, 0x9AD9, 0x6C0C, 0x9ADA, 0x6C0D, 0xEBAC, 0x6C0E, 0x9ADB, 0x6C0F, 0xCACF, 0x6C10, 0xD8B5, 0x6C11, 0xC3F1, 0x6C12, 0x9ADC,
- 0x6C13, 0xC3A5, 0x6C14, 0xC6F8, 0x6C15, 0xEBAD, 0x6C16, 0xC4CA, 0x6C17, 0x9ADD, 0x6C18, 0xEBAE, 0x6C19, 0xEBAF, 0x6C1A, 0xEBB0,
- 0x6C1B, 0xB7D5, 0x6C1C, 0x9ADE, 0x6C1D, 0x9ADF, 0x6C1E, 0x9AE0, 0x6C1F, 0xB7FA, 0x6C20, 0x9AE1, 0x6C21, 0xEBB1, 0x6C22, 0xC7E2,
- 0x6C23, 0x9AE2, 0x6C24, 0xEBB3, 0x6C25, 0x9AE3, 0x6C26, 0xBAA4, 0x6C27, 0xD1F5, 0x6C28, 0xB0B1, 0x6C29, 0xEBB2, 0x6C2A, 0xEBB4,
- 0x6C2B, 0x9AE4, 0x6C2C, 0x9AE5, 0x6C2D, 0x9AE6, 0x6C2E, 0xB5AA, 0x6C2F, 0xC2C8, 0x6C30, 0xC7E8, 0x6C31, 0x9AE7, 0x6C32, 0xEBB5,
- 0x6C33, 0x9AE8, 0x6C34, 0xCBAE, 0x6C35, 0xE3DF, 0x6C36, 0x9AE9, 0x6C37, 0x9AEA, 0x6C38, 0xD3C0, 0x6C39, 0x9AEB, 0x6C3A, 0x9AEC,
- 0x6C3B, 0x9AED, 0x6C3C, 0x9AEE, 0x6C3D, 0xD9DB, 0x6C3E, 0x9AEF, 0x6C3F, 0x9AF0, 0x6C40, 0xCDA1, 0x6C41, 0xD6AD, 0x6C42, 0xC7F3,
- 0x6C43, 0x9AF1, 0x6C44, 0x9AF2, 0x6C45, 0x9AF3, 0x6C46, 0xD9E0, 0x6C47, 0xBBE3, 0x6C48, 0x9AF4, 0x6C49, 0xBABA, 0x6C4A, 0xE3E2,
- 0x6C4B, 0x9AF5, 0x6C4C, 0x9AF6, 0x6C4D, 0x9AF7, 0x6C4E, 0x9AF8, 0x6C4F, 0x9AF9, 0x6C50, 0xCFAB, 0x6C51, 0x9AFA, 0x6C52, 0x9AFB,
- 0x6C53, 0x9AFC, 0x6C54, 0xE3E0, 0x6C55, 0xC9C7, 0x6C56, 0x9AFD, 0x6C57, 0xBAB9, 0x6C58, 0x9AFE, 0x6C59, 0x9B40, 0x6C5A, 0x9B41,
- 0x6C5B, 0xD1B4, 0x6C5C, 0xE3E1, 0x6C5D, 0xC8EA, 0x6C5E, 0xB9AF, 0x6C5F, 0xBDAD, 0x6C60, 0xB3D8, 0x6C61, 0xCEDB, 0x6C62, 0x9B42,
- 0x6C63, 0x9B43, 0x6C64, 0xCCC0, 0x6C65, 0x9B44, 0x6C66, 0x9B45, 0x6C67, 0x9B46, 0x6C68, 0xE3E8, 0x6C69, 0xE3E9, 0x6C6A, 0xCDF4,
- 0x6C6B, 0x9B47, 0x6C6C, 0x9B48, 0x6C6D, 0x9B49, 0x6C6E, 0x9B4A, 0x6C6F, 0x9B4B, 0x6C70, 0xCCAD, 0x6C71, 0x9B4C, 0x6C72, 0xBCB3,
- 0x6C73, 0x9B4D, 0x6C74, 0xE3EA, 0x6C75, 0x9B4E, 0x6C76, 0xE3EB, 0x6C77, 0x9B4F, 0x6C78, 0x9B50, 0x6C79, 0xD0DA, 0x6C7A, 0x9B51,
- 0x6C7B, 0x9B52, 0x6C7C, 0x9B53, 0x6C7D, 0xC6FB, 0x6C7E, 0xB7DA, 0x6C7F, 0x9B54, 0x6C80, 0x9B55, 0x6C81, 0xC7DF, 0x6C82, 0xD2CA,
- 0x6C83, 0xCED6, 0x6C84, 0x9B56, 0x6C85, 0xE3E4, 0x6C86, 0xE3EC, 0x6C87, 0x9B57, 0x6C88, 0xC9F2, 0x6C89, 0xB3C1, 0x6C8A, 0x9B58,
- 0x6C8B, 0x9B59, 0x6C8C, 0xE3E7, 0x6C8D, 0x9B5A, 0x6C8E, 0x9B5B, 0x6C8F, 0xC6E3, 0x6C90, 0xE3E5, 0x6C91, 0x9B5C, 0x6C92, 0x9B5D,
- 0x6C93, 0xEDB3, 0x6C94, 0xE3E6, 0x6C95, 0x9B5E, 0x6C96, 0x9B5F, 0x6C97, 0x9B60, 0x6C98, 0x9B61, 0x6C99, 0xC9B3, 0x6C9A, 0x9B62,
- 0x6C9B, 0xC5E6, 0x6C9C, 0x9B63, 0x6C9D, 0x9B64, 0x6C9E, 0x9B65, 0x6C9F, 0xB9B5, 0x6CA0, 0x9B66, 0x6CA1, 0xC3BB, 0x6CA2, 0x9B67,
- 0x6CA3, 0xE3E3, 0x6CA4, 0xC5BD, 0x6CA5, 0xC1A4, 0x6CA6, 0xC2D9, 0x6CA7, 0xB2D7, 0x6CA8, 0x9B68, 0x6CA9, 0xE3ED, 0x6CAA, 0xBBA6,
- 0x6CAB, 0xC4AD, 0x6CAC, 0x9B69, 0x6CAD, 0xE3F0, 0x6CAE, 0xBEDA, 0x6CAF, 0x9B6A, 0x6CB0, 0x9B6B, 0x6CB1, 0xE3FB, 0x6CB2, 0xE3F5,
- 0x6CB3, 0xBAD3, 0x6CB4, 0x9B6C, 0x6CB5, 0x9B6D, 0x6CB6, 0x9B6E, 0x6CB7, 0x9B6F, 0x6CB8, 0xB7D0, 0x6CB9, 0xD3CD, 0x6CBA, 0x9B70,
- 0x6CBB, 0xD6CE, 0x6CBC, 0xD5D3, 0x6CBD, 0xB9C1, 0x6CBE, 0xD5B4, 0x6CBF, 0xD1D8, 0x6CC0, 0x9B71, 0x6CC1, 0x9B72, 0x6CC2, 0x9B73,
- 0x6CC3, 0x9B74, 0x6CC4, 0xD0B9, 0x6CC5, 0xC7F6, 0x6CC6, 0x9B75, 0x6CC7, 0x9B76, 0x6CC8, 0x9B77, 0x6CC9, 0xC8AA, 0x6CCA, 0xB2B4,
- 0x6CCB, 0x9B78, 0x6CCC, 0xC3DA, 0x6CCD, 0x9B79, 0x6CCE, 0x9B7A, 0x6CCF, 0x9B7B, 0x6CD0, 0xE3EE, 0x6CD1, 0x9B7C, 0x6CD2, 0x9B7D,
- 0x6CD3, 0xE3FC, 0x6CD4, 0xE3EF, 0x6CD5, 0xB7A8, 0x6CD6, 0xE3F7, 0x6CD7, 0xE3F4, 0x6CD8, 0x9B7E, 0x6CD9, 0x9B80, 0x6CDA, 0x9B81,
- 0x6CDB, 0xB7BA, 0x6CDC, 0x9B82, 0x6CDD, 0x9B83, 0x6CDE, 0xC5A2, 0x6CDF, 0x9B84, 0x6CE0, 0xE3F6, 0x6CE1, 0xC5DD, 0x6CE2, 0xB2A8,
- 0x6CE3, 0xC6FC, 0x6CE4, 0x9B85, 0x6CE5, 0xC4E0, 0x6CE6, 0x9B86, 0x6CE7, 0x9B87, 0x6CE8, 0xD7A2, 0x6CE9, 0x9B88, 0x6CEA, 0xC0E1,
- 0x6CEB, 0xE3F9, 0x6CEC, 0x9B89, 0x6CED, 0x9B8A, 0x6CEE, 0xE3FA, 0x6CEF, 0xE3FD, 0x6CF0, 0xCCA9, 0x6CF1, 0xE3F3, 0x6CF2, 0x9B8B,
- 0x6CF3, 0xD3BE, 0x6CF4, 0x9B8C, 0x6CF5, 0xB1C3, 0x6CF6, 0xEDB4, 0x6CF7, 0xE3F1, 0x6CF8, 0xE3F2, 0x6CF9, 0x9B8D, 0x6CFA, 0xE3F8,
- 0x6CFB, 0xD0BA, 0x6CFC, 0xC6C3, 0x6CFD, 0xD4F3, 0x6CFE, 0xE3FE, 0x6CFF, 0x9B8E, 0x6D00, 0x9B8F, 0x6D01, 0xBDE0, 0x6D02, 0x9B90,
- 0x6D03, 0x9B91, 0x6D04, 0xE4A7, 0x6D05, 0x9B92, 0x6D06, 0x9B93, 0x6D07, 0xE4A6, 0x6D08, 0x9B94, 0x6D09, 0x9B95, 0x6D0A, 0x9B96,
- 0x6D0B, 0xD1F3, 0x6D0C, 0xE4A3, 0x6D0D, 0x9B97, 0x6D0E, 0xE4A9, 0x6D0F, 0x9B98, 0x6D10, 0x9B99, 0x6D11, 0x9B9A, 0x6D12, 0xC8F7,
- 0x6D13, 0x9B9B, 0x6D14, 0x9B9C, 0x6D15, 0x9B9D, 0x6D16, 0x9B9E, 0x6D17, 0xCFB4, 0x6D18, 0x9B9F, 0x6D19, 0xE4A8, 0x6D1A, 0xE4AE,
- 0x6D1B, 0xC2E5, 0x6D1C, 0x9BA0, 0x6D1D, 0x9BA1, 0x6D1E, 0xB6B4, 0x6D1F, 0x9BA2, 0x6D20, 0x9BA3, 0x6D21, 0x9BA4, 0x6D22, 0x9BA5,
- 0x6D23, 0x9BA6, 0x6D24, 0x9BA7, 0x6D25, 0xBDF2, 0x6D26, 0x9BA8, 0x6D27, 0xE4A2, 0x6D28, 0x9BA9, 0x6D29, 0x9BAA, 0x6D2A, 0xBAE9,
- 0x6D2B, 0xE4AA, 0x6D2C, 0x9BAB, 0x6D2D, 0x9BAC, 0x6D2E, 0xE4AC, 0x6D2F, 0x9BAD, 0x6D30, 0x9BAE, 0x6D31, 0xB6FD, 0x6D32, 0xD6DE,
- 0x6D33, 0xE4B2, 0x6D34, 0x9BAF, 0x6D35, 0xE4AD, 0x6D36, 0x9BB0, 0x6D37, 0x9BB1, 0x6D38, 0x9BB2, 0x6D39, 0xE4A1, 0x6D3A, 0x9BB3,
- 0x6D3B, 0xBBEE, 0x6D3C, 0xCDDD, 0x6D3D, 0xC7A2, 0x6D3E, 0xC5C9, 0x6D3F, 0x9BB4, 0x6D40, 0x9BB5, 0x6D41, 0xC1F7, 0x6D42, 0x9BB6,
- 0x6D43, 0xE4A4, 0x6D44, 0x9BB7, 0x6D45, 0xC7B3, 0x6D46, 0xBDAC, 0x6D47, 0xBDBD, 0x6D48, 0xE4A5, 0x6D49, 0x9BB8, 0x6D4A, 0xD7C7,
- 0x6D4B, 0xB2E2, 0x6D4C, 0x9BB9, 0x6D4D, 0xE4AB, 0x6D4E, 0xBCC3, 0x6D4F, 0xE4AF, 0x6D50, 0x9BBA, 0x6D51, 0xBBEB, 0x6D52, 0xE4B0,
- 0x6D53, 0xC5A8, 0x6D54, 0xE4B1, 0x6D55, 0x9BBB, 0x6D56, 0x9BBC, 0x6D57, 0x9BBD, 0x6D58, 0x9BBE, 0x6D59, 0xD5E3, 0x6D5A, 0xBFA3,
- 0x6D5B, 0x9BBF, 0x6D5C, 0xE4BA, 0x6D5D, 0x9BC0, 0x6D5E, 0xE4B7, 0x6D5F, 0x9BC1, 0x6D60, 0xE4BB, 0x6D61, 0x9BC2, 0x6D62, 0x9BC3,
- 0x6D63, 0xE4BD, 0x6D64, 0x9BC4, 0x6D65, 0x9BC5, 0x6D66, 0xC6D6, 0x6D67, 0x9BC6, 0x6D68, 0x9BC7, 0x6D69, 0xBAC6, 0x6D6A, 0xC0CB,
- 0x6D6B, 0x9BC8, 0x6D6C, 0x9BC9, 0x6D6D, 0x9BCA, 0x6D6E, 0xB8A1, 0x6D6F, 0xE4B4, 0x6D70, 0x9BCB, 0x6D71, 0x9BCC, 0x6D72, 0x9BCD,
- 0x6D73, 0x9BCE, 0x6D74, 0xD4A1, 0x6D75, 0x9BCF, 0x6D76, 0x9BD0, 0x6D77, 0xBAA3, 0x6D78, 0xBDFE, 0x6D79, 0x9BD1, 0x6D7A, 0x9BD2,
- 0x6D7B, 0x9BD3, 0x6D7C, 0xE4BC, 0x6D7D, 0x9BD4, 0x6D7E, 0x9BD5, 0x6D7F, 0x9BD6, 0x6D80, 0x9BD7, 0x6D81, 0x9BD8, 0x6D82, 0xCDBF,
- 0x6D83, 0x9BD9, 0x6D84, 0x9BDA, 0x6D85, 0xC4F9, 0x6D86, 0x9BDB, 0x6D87, 0x9BDC, 0x6D88, 0xCFFB, 0x6D89, 0xC9E6, 0x6D8A, 0x9BDD,
- 0x6D8B, 0x9BDE, 0x6D8C, 0xD3BF, 0x6D8D, 0x9BDF, 0x6D8E, 0xCFD1, 0x6D8F, 0x9BE0, 0x6D90, 0x9BE1, 0x6D91, 0xE4B3, 0x6D92, 0x9BE2,
- 0x6D93, 0xE4B8, 0x6D94, 0xE4B9, 0x6D95, 0xCCE9, 0x6D96, 0x9BE3, 0x6D97, 0x9BE4, 0x6D98, 0x9BE5, 0x6D99, 0x9BE6, 0x6D9A, 0x9BE7,
- 0x6D9B, 0xCCCE, 0x6D9C, 0x9BE8, 0x6D9D, 0xC0D4, 0x6D9E, 0xE4B5, 0x6D9F, 0xC1B0, 0x6DA0, 0xE4B6, 0x6DA1, 0xCED0, 0x6DA2, 0x9BE9,
- 0x6DA3, 0xBBC1, 0x6DA4, 0xB5D3, 0x6DA5, 0x9BEA, 0x6DA6, 0xC8F3, 0x6DA7, 0xBDA7, 0x6DA8, 0xD5C7, 0x6DA9, 0xC9AC, 0x6DAA, 0xB8A2,
- 0x6DAB, 0xE4CA, 0x6DAC, 0x9BEB, 0x6DAD, 0x9BEC, 0x6DAE, 0xE4CC, 0x6DAF, 0xD1C4, 0x6DB0, 0x9BED, 0x6DB1, 0x9BEE, 0x6DB2, 0xD2BA,
- 0x6DB3, 0x9BEF, 0x6DB4, 0x9BF0, 0x6DB5, 0xBAAD, 0x6DB6, 0x9BF1, 0x6DB7, 0x9BF2, 0x6DB8, 0xBAD4, 0x6DB9, 0x9BF3, 0x6DBA, 0x9BF4,
- 0x6DBB, 0x9BF5, 0x6DBC, 0x9BF6, 0x6DBD, 0x9BF7, 0x6DBE, 0x9BF8, 0x6DBF, 0xE4C3, 0x6DC0, 0xB5ED, 0x6DC1, 0x9BF9, 0x6DC2, 0x9BFA,
- 0x6DC3, 0x9BFB, 0x6DC4, 0xD7CD, 0x6DC5, 0xE4C0, 0x6DC6, 0xCFFD, 0x6DC7, 0xE4BF, 0x6DC8, 0x9BFC, 0x6DC9, 0x9BFD, 0x6DCA, 0x9BFE,
- 0x6DCB, 0xC1DC, 0x6DCC, 0xCCCA, 0x6DCD, 0x9C40, 0x6DCE, 0x9C41, 0x6DCF, 0x9C42, 0x6DD0, 0x9C43, 0x6DD1, 0xCAE7, 0x6DD2, 0x9C44,
- 0x6DD3, 0x9C45, 0x6DD4, 0x9C46, 0x6DD5, 0x9C47, 0x6DD6, 0xC4D7, 0x6DD7, 0x9C48, 0x6DD8, 0xCCD4, 0x6DD9, 0xE4C8, 0x6DDA, 0x9C49,
- 0x6DDB, 0x9C4A, 0x6DDC, 0x9C4B, 0x6DDD, 0xE4C7, 0x6DDE, 0xE4C1, 0x6DDF, 0x9C4C, 0x6DE0, 0xE4C4, 0x6DE1, 0xB5AD, 0x6DE2, 0x9C4D,
- 0x6DE3, 0x9C4E, 0x6DE4, 0xD3D9, 0x6DE5, 0x9C4F, 0x6DE6, 0xE4C6, 0x6DE7, 0x9C50, 0x6DE8, 0x9C51, 0x6DE9, 0x9C52, 0x6DEA, 0x9C53,
- 0x6DEB, 0xD2F9, 0x6DEC, 0xB4E3, 0x6DED, 0x9C54, 0x6DEE, 0xBBB4, 0x6DEF, 0x9C55, 0x6DF0, 0x9C56, 0x6DF1, 0xC9EE, 0x6DF2, 0x9C57,
- 0x6DF3, 0xB4BE, 0x6DF4, 0x9C58, 0x6DF5, 0x9C59, 0x6DF6, 0x9C5A, 0x6DF7, 0xBBEC, 0x6DF8, 0x9C5B, 0x6DF9, 0xD1CD, 0x6DFA, 0x9C5C,
- 0x6DFB, 0xCCED, 0x6DFC, 0xEDB5, 0x6DFD, 0x9C5D, 0x6DFE, 0x9C5E, 0x6DFF, 0x9C5F, 0x6E00, 0x9C60, 0x6E01, 0x9C61, 0x6E02, 0x9C62,
- 0x6E03, 0x9C63, 0x6E04, 0x9C64, 0x6E05, 0xC7E5, 0x6E06, 0x9C65, 0x6E07, 0x9C66, 0x6E08, 0x9C67, 0x6E09, 0x9C68, 0x6E0A, 0xD4A8,
- 0x6E0B, 0x9C69, 0x6E0C, 0xE4CB, 0x6E0D, 0xD7D5, 0x6E0E, 0xE4C2, 0x6E0F, 0x9C6A, 0x6E10, 0xBDA5, 0x6E11, 0xE4C5, 0x6E12, 0x9C6B,
- 0x6E13, 0x9C6C, 0x6E14, 0xD3E6, 0x6E15, 0x9C6D, 0x6E16, 0xE4C9, 0x6E17, 0xC9F8, 0x6E18, 0x9C6E, 0x6E19, 0x9C6F, 0x6E1A, 0xE4BE,
- 0x6E1B, 0x9C70, 0x6E1C, 0x9C71, 0x6E1D, 0xD3E5, 0x6E1E, 0x9C72, 0x6E1F, 0x9C73, 0x6E20, 0xC7FE, 0x6E21, 0xB6C9, 0x6E22, 0x9C74,
- 0x6E23, 0xD4FC, 0x6E24, 0xB2B3, 0x6E25, 0xE4D7, 0x6E26, 0x9C75, 0x6E27, 0x9C76, 0x6E28, 0x9C77, 0x6E29, 0xCEC2, 0x6E2A, 0x9C78,
- 0x6E2B, 0xE4CD, 0x6E2C, 0x9C79, 0x6E2D, 0xCEBC, 0x6E2E, 0x9C7A, 0x6E2F, 0xB8DB, 0x6E30, 0x9C7B, 0x6E31, 0x9C7C, 0x6E32, 0xE4D6,
- 0x6E33, 0x9C7D, 0x6E34, 0xBFCA, 0x6E35, 0x9C7E, 0x6E36, 0x9C80, 0x6E37, 0x9C81, 0x6E38, 0xD3CE, 0x6E39, 0x9C82, 0x6E3A, 0xC3EC,
- 0x6E3B, 0x9C83, 0x6E3C, 0x9C84, 0x6E3D, 0x9C85, 0x6E3E, 0x9C86, 0x6E3F, 0x9C87, 0x6E40, 0x9C88, 0x6E41, 0x9C89, 0x6E42, 0x9C8A,
- 0x6E43, 0xC5C8, 0x6E44, 0xE4D8, 0x6E45, 0x9C8B, 0x6E46, 0x9C8C, 0x6E47, 0x9C8D, 0x6E48, 0x9C8E, 0x6E49, 0x9C8F, 0x6E4A, 0x9C90,
- 0x6E4B, 0x9C91, 0x6E4C, 0x9C92, 0x6E4D, 0xCDC4, 0x6E4E, 0xE4CF, 0x6E4F, 0x9C93, 0x6E50, 0x9C94, 0x6E51, 0x9C95, 0x6E52, 0x9C96,
- 0x6E53, 0xE4D4, 0x6E54, 0xE4D5, 0x6E55, 0x9C97, 0x6E56, 0xBAFE, 0x6E57, 0x9C98, 0x6E58, 0xCFE6, 0x6E59, 0x9C99, 0x6E5A, 0x9C9A,
- 0x6E5B, 0xD5BF, 0x6E5C, 0x9C9B, 0x6E5D, 0x9C9C, 0x6E5E, 0x9C9D, 0x6E5F, 0xE4D2, 0x6E60, 0x9C9E, 0x6E61, 0x9C9F, 0x6E62, 0x9CA0,
- 0x6E63, 0x9CA1, 0x6E64, 0x9CA2, 0x6E65, 0x9CA3, 0x6E66, 0x9CA4, 0x6E67, 0x9CA5, 0x6E68, 0x9CA6, 0x6E69, 0x9CA7, 0x6E6A, 0x9CA8,
- 0x6E6B, 0xE4D0, 0x6E6C, 0x9CA9, 0x6E6D, 0x9CAA, 0x6E6E, 0xE4CE, 0x6E6F, 0x9CAB, 0x6E70, 0x9CAC, 0x6E71, 0x9CAD, 0x6E72, 0x9CAE,
- 0x6E73, 0x9CAF, 0x6E74, 0x9CB0, 0x6E75, 0x9CB1, 0x6E76, 0x9CB2, 0x6E77, 0x9CB3, 0x6E78, 0x9CB4, 0x6E79, 0x9CB5, 0x6E7A, 0x9CB6,
- 0x6E7B, 0x9CB7, 0x6E7C, 0x9CB8, 0x6E7D, 0x9CB9, 0x6E7E, 0xCDE5, 0x6E7F, 0xCAAA, 0x6E80, 0x9CBA, 0x6E81, 0x9CBB, 0x6E82, 0x9CBC,
- 0x6E83, 0xC0A3, 0x6E84, 0x9CBD, 0x6E85, 0xBDA6, 0x6E86, 0xE4D3, 0x6E87, 0x9CBE, 0x6E88, 0x9CBF, 0x6E89, 0xB8C8, 0x6E8A, 0x9CC0,
- 0x6E8B, 0x9CC1, 0x6E8C, 0x9CC2, 0x6E8D, 0x9CC3, 0x6E8E, 0x9CC4, 0x6E8F, 0xE4E7, 0x6E90, 0xD4B4, 0x6E91, 0x9CC5, 0x6E92, 0x9CC6,
- 0x6E93, 0x9CC7, 0x6E94, 0x9CC8, 0x6E95, 0x9CC9, 0x6E96, 0x9CCA, 0x6E97, 0x9CCB, 0x6E98, 0xE4DB, 0x6E99, 0x9CCC, 0x6E9A, 0x9CCD,
- 0x6E9B, 0x9CCE, 0x6E9C, 0xC1EF, 0x6E9D, 0x9CCF, 0x6E9E, 0x9CD0, 0x6E9F, 0xE4E9, 0x6EA0, 0x9CD1, 0x6EA1, 0x9CD2, 0x6EA2, 0xD2E7,
- 0x6EA3, 0x9CD3, 0x6EA4, 0x9CD4, 0x6EA5, 0xE4DF, 0x6EA6, 0x9CD5, 0x6EA7, 0xE4E0, 0x6EA8, 0x9CD6, 0x6EA9, 0x9CD7, 0x6EAA, 0xCFAA,
- 0x6EAB, 0x9CD8, 0x6EAC, 0x9CD9, 0x6EAD, 0x9CDA, 0x6EAE, 0x9CDB, 0x6EAF, 0xCBDD, 0x6EB0, 0x9CDC, 0x6EB1, 0xE4DA, 0x6EB2, 0xE4D1,
- 0x6EB3, 0x9CDD, 0x6EB4, 0xE4E5, 0x6EB5, 0x9CDE, 0x6EB6, 0xC8DC, 0x6EB7, 0xE4E3, 0x6EB8, 0x9CDF, 0x6EB9, 0x9CE0, 0x6EBA, 0xC4E7,
- 0x6EBB, 0xE4E2, 0x6EBC, 0x9CE1, 0x6EBD, 0xE4E1, 0x6EBE, 0x9CE2, 0x6EBF, 0x9CE3, 0x6EC0, 0x9CE4, 0x6EC1, 0xB3FC, 0x6EC2, 0xE4E8,
- 0x6EC3, 0x9CE5, 0x6EC4, 0x9CE6, 0x6EC5, 0x9CE7, 0x6EC6, 0x9CE8, 0x6EC7, 0xB5E1, 0x6EC8, 0x9CE9, 0x6EC9, 0x9CEA, 0x6ECA, 0x9CEB,
- 0x6ECB, 0xD7CC, 0x6ECC, 0x9CEC, 0x6ECD, 0x9CED, 0x6ECE, 0x9CEE, 0x6ECF, 0xE4E6, 0x6ED0, 0x9CEF, 0x6ED1, 0xBBAC, 0x6ED2, 0x9CF0,
- 0x6ED3, 0xD7D2, 0x6ED4, 0xCCCF, 0x6ED5, 0xEBF8, 0x6ED6, 0x9CF1, 0x6ED7, 0xE4E4, 0x6ED8, 0x9CF2, 0x6ED9, 0x9CF3, 0x6EDA, 0xB9F6,
- 0x6EDB, 0x9CF4, 0x6EDC, 0x9CF5, 0x6EDD, 0x9CF6, 0x6EDE, 0xD6CD, 0x6EDF, 0xE4D9, 0x6EE0, 0xE4DC, 0x6EE1, 0xC2FA, 0x6EE2, 0xE4DE,
- 0x6EE3, 0x9CF7, 0x6EE4, 0xC2CB, 0x6EE5, 0xC0C4, 0x6EE6, 0xC2D0, 0x6EE7, 0x9CF8, 0x6EE8, 0xB1F5, 0x6EE9, 0xCCB2, 0x6EEA, 0x9CF9,
- 0x6EEB, 0x9CFA, 0x6EEC, 0x9CFB, 0x6EED, 0x9CFC, 0x6EEE, 0x9CFD, 0x6EEF, 0x9CFE, 0x6EF0, 0x9D40, 0x6EF1, 0x9D41, 0x6EF2, 0x9D42,
- 0x6EF3, 0x9D43, 0x6EF4, 0xB5CE, 0x6EF5, 0x9D44, 0x6EF6, 0x9D45, 0x6EF7, 0x9D46, 0x6EF8, 0x9D47, 0x6EF9, 0xE4EF, 0x6EFA, 0x9D48,
- 0x6EFB, 0x9D49, 0x6EFC, 0x9D4A, 0x6EFD, 0x9D4B, 0x6EFE, 0x9D4C, 0x6EFF, 0x9D4D, 0x6F00, 0x9D4E, 0x6F01, 0x9D4F, 0x6F02, 0xC6AF,
- 0x6F03, 0x9D50, 0x6F04, 0x9D51, 0x6F05, 0x9D52, 0x6F06, 0xC6E1, 0x6F07, 0x9D53, 0x6F08, 0x9D54, 0x6F09, 0xE4F5, 0x6F0A, 0x9D55,
- 0x6F0B, 0x9D56, 0x6F0C, 0x9D57, 0x6F0D, 0x9D58, 0x6F0E, 0x9D59, 0x6F0F, 0xC2A9, 0x6F10, 0x9D5A, 0x6F11, 0x9D5B, 0x6F12, 0x9D5C,
- 0x6F13, 0xC0EC, 0x6F14, 0xD1DD, 0x6F15, 0xE4EE, 0x6F16, 0x9D5D, 0x6F17, 0x9D5E, 0x6F18, 0x9D5F, 0x6F19, 0x9D60, 0x6F1A, 0x9D61,
- 0x6F1B, 0x9D62, 0x6F1C, 0x9D63, 0x6F1D, 0x9D64, 0x6F1E, 0x9D65, 0x6F1F, 0x9D66, 0x6F20, 0xC4AE, 0x6F21, 0x9D67, 0x6F22, 0x9D68,
- 0x6F23, 0x9D69, 0x6F24, 0xE4ED, 0x6F25, 0x9D6A, 0x6F26, 0x9D6B, 0x6F27, 0x9D6C, 0x6F28, 0x9D6D, 0x6F29, 0xE4F6, 0x6F2A, 0xE4F4,
- 0x6F2B, 0xC2FE, 0x6F2C, 0x9D6E, 0x6F2D, 0xE4DD, 0x6F2E, 0x9D6F, 0x6F2F, 0xE4F0, 0x6F30, 0x9D70, 0x6F31, 0xCAFE, 0x6F32, 0x9D71,
- 0x6F33, 0xD5C4, 0x6F34, 0x9D72, 0x6F35, 0x9D73, 0x6F36, 0xE4F1, 0x6F37, 0x9D74, 0x6F38, 0x9D75, 0x6F39, 0x9D76, 0x6F3A, 0x9D77,
- 0x6F3B, 0x9D78, 0x6F3C, 0x9D79, 0x6F3D, 0x9D7A, 0x6F3E, 0xD1FA, 0x6F3F, 0x9D7B, 0x6F40, 0x9D7C, 0x6F41, 0x9D7D, 0x6F42, 0x9D7E,
- 0x6F43, 0x9D80, 0x6F44, 0x9D81, 0x6F45, 0x9D82, 0x6F46, 0xE4EB, 0x6F47, 0xE4EC, 0x6F48, 0x9D83, 0x6F49, 0x9D84, 0x6F4A, 0x9D85,
- 0x6F4B, 0xE4F2, 0x6F4C, 0x9D86, 0x6F4D, 0xCEAB, 0x6F4E, 0x9D87, 0x6F4F, 0x9D88, 0x6F50, 0x9D89, 0x6F51, 0x9D8A, 0x6F52, 0x9D8B,
- 0x6F53, 0x9D8C, 0x6F54, 0x9D8D, 0x6F55, 0x9D8E, 0x6F56, 0x9D8F, 0x6F57, 0x9D90, 0x6F58, 0xC5CB, 0x6F59, 0x9D91, 0x6F5A, 0x9D92,
- 0x6F5B, 0x9D93, 0x6F5C, 0xC7B1, 0x6F5D, 0x9D94, 0x6F5E, 0xC2BA, 0x6F5F, 0x9D95, 0x6F60, 0x9D96, 0x6F61, 0x9D97, 0x6F62, 0xE4EA,
- 0x6F63, 0x9D98, 0x6F64, 0x9D99, 0x6F65, 0x9D9A, 0x6F66, 0xC1CA, 0x6F67, 0x9D9B, 0x6F68, 0x9D9C, 0x6F69, 0x9D9D, 0x6F6A, 0x9D9E,
- 0x6F6B, 0x9D9F, 0x6F6C, 0x9DA0, 0x6F6D, 0xCCB6, 0x6F6E, 0xB3B1, 0x6F6F, 0x9DA1, 0x6F70, 0x9DA2, 0x6F71, 0x9DA3, 0x6F72, 0xE4FB,
- 0x6F73, 0x9DA4, 0x6F74, 0xE4F3, 0x6F75, 0x9DA5, 0x6F76, 0x9DA6, 0x6F77, 0x9DA7, 0x6F78, 0xE4FA, 0x6F79, 0x9DA8, 0x6F7A, 0xE4FD,
- 0x6F7B, 0x9DA9, 0x6F7C, 0xE4FC, 0x6F7D, 0x9DAA, 0x6F7E, 0x9DAB, 0x6F7F, 0x9DAC, 0x6F80, 0x9DAD, 0x6F81, 0x9DAE, 0x6F82, 0x9DAF,
- 0x6F83, 0x9DB0, 0x6F84, 0xB3CE, 0x6F85, 0x9DB1, 0x6F86, 0x9DB2, 0x6F87, 0x9DB3, 0x6F88, 0xB3BA, 0x6F89, 0xE4F7, 0x6F8A, 0x9DB4,
- 0x6F8B, 0x9DB5, 0x6F8C, 0xE4F9, 0x6F8D, 0xE4F8, 0x6F8E, 0xC5EC, 0x6F8F, 0x9DB6, 0x6F90, 0x9DB7, 0x6F91, 0x9DB8, 0x6F92, 0x9DB9,
- 0x6F93, 0x9DBA, 0x6F94, 0x9DBB, 0x6F95, 0x9DBC, 0x6F96, 0x9DBD, 0x6F97, 0x9DBE, 0x6F98, 0x9DBF, 0x6F99, 0x9DC0, 0x6F9A, 0x9DC1,
- 0x6F9B, 0x9DC2, 0x6F9C, 0xC0BD, 0x6F9D, 0x9DC3, 0x6F9E, 0x9DC4, 0x6F9F, 0x9DC5, 0x6FA0, 0x9DC6, 0x6FA1, 0xD4E8, 0x6FA2, 0x9DC7,
- 0x6FA3, 0x9DC8, 0x6FA4, 0x9DC9, 0x6FA5, 0x9DCA, 0x6FA6, 0x9DCB, 0x6FA7, 0xE5A2, 0x6FA8, 0x9DCC, 0x6FA9, 0x9DCD, 0x6FAA, 0x9DCE,
- 0x6FAB, 0x9DCF, 0x6FAC, 0x9DD0, 0x6FAD, 0x9DD1, 0x6FAE, 0x9DD2, 0x6FAF, 0x9DD3, 0x6FB0, 0x9DD4, 0x6FB1, 0x9DD5, 0x6FB2, 0x9DD6,
- 0x6FB3, 0xB0C4, 0x6FB4, 0x9DD7, 0x6FB5, 0x9DD8, 0x6FB6, 0xE5A4, 0x6FB7, 0x9DD9, 0x6FB8, 0x9DDA, 0x6FB9, 0xE5A3, 0x6FBA, 0x9DDB,
- 0x6FBB, 0x9DDC, 0x6FBC, 0x9DDD, 0x6FBD, 0x9DDE, 0x6FBE, 0x9DDF, 0x6FBF, 0x9DE0, 0x6FC0, 0xBCA4, 0x6FC1, 0x9DE1, 0x6FC2, 0xE5A5,
- 0x6FC3, 0x9DE2, 0x6FC4, 0x9DE3, 0x6FC5, 0x9DE4, 0x6FC6, 0x9DE5, 0x6FC7, 0x9DE6, 0x6FC8, 0x9DE7, 0x6FC9, 0xE5A1, 0x6FCA, 0x9DE8,
- 0x6FCB, 0x9DE9, 0x6FCC, 0x9DEA, 0x6FCD, 0x9DEB, 0x6FCE, 0x9DEC, 0x6FCF, 0x9DED, 0x6FD0, 0x9DEE, 0x6FD1, 0xE4FE, 0x6FD2, 0xB1F4,
- 0x6FD3, 0x9DEF, 0x6FD4, 0x9DF0, 0x6FD5, 0x9DF1, 0x6FD6, 0x9DF2, 0x6FD7, 0x9DF3, 0x6FD8, 0x9DF4, 0x6FD9, 0x9DF5, 0x6FDA, 0x9DF6,
- 0x6FDB, 0x9DF7, 0x6FDC, 0x9DF8, 0x6FDD, 0x9DF9, 0x6FDE, 0xE5A8, 0x6FDF, 0x9DFA, 0x6FE0, 0xE5A9, 0x6FE1, 0xE5A6, 0x6FE2, 0x9DFB,
- 0x6FE3, 0x9DFC, 0x6FE4, 0x9DFD, 0x6FE5, 0x9DFE, 0x6FE6, 0x9E40, 0x6FE7, 0x9E41, 0x6FE8, 0x9E42, 0x6FE9, 0x9E43, 0x6FEA, 0x9E44,
- 0x6FEB, 0x9E45, 0x6FEC, 0x9E46, 0x6FED, 0x9E47, 0x6FEE, 0xE5A7, 0x6FEF, 0xE5AA, 0x6FF0, 0x9E48, 0x6FF1, 0x9E49, 0x6FF2, 0x9E4A,
- 0x6FF3, 0x9E4B, 0x6FF4, 0x9E4C, 0x6FF5, 0x9E4D, 0x6FF6, 0x9E4E, 0x6FF7, 0x9E4F, 0x6FF8, 0x9E50, 0x6FF9, 0x9E51, 0x6FFA, 0x9E52,
- 0x6FFB, 0x9E53, 0x6FFC, 0x9E54, 0x6FFD, 0x9E55, 0x6FFE, 0x9E56, 0x6FFF, 0x9E57, 0x7000, 0x9E58, 0x7001, 0x9E59, 0x7002, 0x9E5A,
- 0x7003, 0x9E5B, 0x7004, 0x9E5C, 0x7005, 0x9E5D, 0x7006, 0x9E5E, 0x7007, 0x9E5F, 0x7008, 0x9E60, 0x7009, 0x9E61, 0x700A, 0x9E62,
- 0x700B, 0x9E63, 0x700C, 0x9E64, 0x700D, 0x9E65, 0x700E, 0x9E66, 0x700F, 0x9E67, 0x7010, 0x9E68, 0x7011, 0xC6D9, 0x7012, 0x9E69,
- 0x7013, 0x9E6A, 0x7014, 0x9E6B, 0x7015, 0x9E6C, 0x7016, 0x9E6D, 0x7017, 0x9E6E, 0x7018, 0x9E6F, 0x7019, 0x9E70, 0x701A, 0xE5AB,
- 0x701B, 0xE5AD, 0x701C, 0x9E71, 0x701D, 0x9E72, 0x701E, 0x9E73, 0x701F, 0x9E74, 0x7020, 0x9E75, 0x7021, 0x9E76, 0x7022, 0x9E77,
- 0x7023, 0xE5AC, 0x7024, 0x9E78, 0x7025, 0x9E79, 0x7026, 0x9E7A, 0x7027, 0x9E7B, 0x7028, 0x9E7C, 0x7029, 0x9E7D, 0x702A, 0x9E7E,
- 0x702B, 0x9E80, 0x702C, 0x9E81, 0x702D, 0x9E82, 0x702E, 0x9E83, 0x702F, 0x9E84, 0x7030, 0x9E85, 0x7031, 0x9E86, 0x7032, 0x9E87,
- 0x7033, 0x9E88, 0x7034, 0x9E89, 0x7035, 0xE5AF, 0x7036, 0x9E8A, 0x7037, 0x9E8B, 0x7038, 0x9E8C, 0x7039, 0xE5AE, 0x703A, 0x9E8D,
- 0x703B, 0x9E8E, 0x703C, 0x9E8F, 0x703D, 0x9E90, 0x703E, 0x9E91, 0x703F, 0x9E92, 0x7040, 0x9E93, 0x7041, 0x9E94, 0x7042, 0x9E95,
- 0x7043, 0x9E96, 0x7044, 0x9E97, 0x7045, 0x9E98, 0x7046, 0x9E99, 0x7047, 0x9E9A, 0x7048, 0x9E9B, 0x7049, 0x9E9C, 0x704A, 0x9E9D,
- 0x704B, 0x9E9E, 0x704C, 0xB9E0, 0x704D, 0x9E9F, 0x704E, 0x9EA0, 0x704F, 0xE5B0, 0x7050, 0x9EA1, 0x7051, 0x9EA2, 0x7052, 0x9EA3,
- 0x7053, 0x9EA4, 0x7054, 0x9EA5, 0x7055, 0x9EA6, 0x7056, 0x9EA7, 0x7057, 0x9EA8, 0x7058, 0x9EA9, 0x7059, 0x9EAA, 0x705A, 0x9EAB,
- 0x705B, 0x9EAC, 0x705C, 0x9EAD, 0x705D, 0x9EAE, 0x705E, 0xE5B1, 0x705F, 0x9EAF, 0x7060, 0x9EB0, 0x7061, 0x9EB1, 0x7062, 0x9EB2,
- 0x7063, 0x9EB3, 0x7064, 0x9EB4, 0x7065, 0x9EB5, 0x7066, 0x9EB6, 0x7067, 0x9EB7, 0x7068, 0x9EB8, 0x7069, 0x9EB9, 0x706A, 0x9EBA,
- 0x706B, 0xBBF0, 0x706C, 0xECE1, 0x706D, 0xC3F0, 0x706E, 0x9EBB, 0x706F, 0xB5C6, 0x7070, 0xBBD2, 0x7071, 0x9EBC, 0x7072, 0x9EBD,
- 0x7073, 0x9EBE, 0x7074, 0x9EBF, 0x7075, 0xC1E9, 0x7076, 0xD4EE, 0x7077, 0x9EC0, 0x7078, 0xBEC4, 0x7079, 0x9EC1, 0x707A, 0x9EC2,
- 0x707B, 0x9EC3, 0x707C, 0xD7C6, 0x707D, 0x9EC4, 0x707E, 0xD4D6, 0x707F, 0xB2D3, 0x7080, 0xECBE, 0x7081, 0x9EC5, 0x7082, 0x9EC6,
- 0x7083, 0x9EC7, 0x7084, 0x9EC8, 0x7085, 0xEAC1, 0x7086, 0x9EC9, 0x7087, 0x9ECA, 0x7088, 0x9ECB, 0x7089, 0xC2AF, 0x708A, 0xB4B6,
- 0x708B, 0x9ECC, 0x708C, 0x9ECD, 0x708D, 0x9ECE, 0x708E, 0xD1D7, 0x708F, 0x9ECF, 0x7090, 0x9ED0, 0x7091, 0x9ED1, 0x7092, 0xB3B4,
- 0x7093, 0x9ED2, 0x7094, 0xC8B2, 0x7095, 0xBFBB, 0x7096, 0xECC0, 0x7097, 0x9ED3, 0x7098, 0x9ED4, 0x7099, 0xD6CB, 0x709A, 0x9ED5,
- 0x709B, 0x9ED6, 0x709C, 0xECBF, 0x709D, 0xECC1, 0x709E, 0x9ED7, 0x709F, 0x9ED8, 0x70A0, 0x9ED9, 0x70A1, 0x9EDA, 0x70A2, 0x9EDB,
- 0x70A3, 0x9EDC, 0x70A4, 0x9EDD, 0x70A5, 0x9EDE, 0x70A6, 0x9EDF, 0x70A7, 0x9EE0, 0x70A8, 0x9EE1, 0x70A9, 0x9EE2, 0x70AA, 0x9EE3,
- 0x70AB, 0xECC5, 0x70AC, 0xBEE6, 0x70AD, 0xCCBF, 0x70AE, 0xC5DA, 0x70AF, 0xBEBC, 0x70B0, 0x9EE4, 0x70B1, 0xECC6, 0x70B2, 0x9EE5,
- 0x70B3, 0xB1FE, 0x70B4, 0x9EE6, 0x70B5, 0x9EE7, 0x70B6, 0x9EE8, 0x70B7, 0xECC4, 0x70B8, 0xD5A8, 0x70B9, 0xB5E3, 0x70BA, 0x9EE9,
- 0x70BB, 0xECC2, 0x70BC, 0xC1B6, 0x70BD, 0xB3E3, 0x70BE, 0x9EEA, 0x70BF, 0x9EEB, 0x70C0, 0xECC3, 0x70C1, 0xCBB8, 0x70C2, 0xC0C3,
- 0x70C3, 0xCCFE, 0x70C4, 0x9EEC, 0x70C5, 0x9EED, 0x70C6, 0x9EEE, 0x70C7, 0x9EEF, 0x70C8, 0xC1D2, 0x70C9, 0x9EF0, 0x70CA, 0xECC8,
- 0x70CB, 0x9EF1, 0x70CC, 0x9EF2, 0x70CD, 0x9EF3, 0x70CE, 0x9EF4, 0x70CF, 0x9EF5, 0x70D0, 0x9EF6, 0x70D1, 0x9EF7, 0x70D2, 0x9EF8,
- 0x70D3, 0x9EF9, 0x70D4, 0x9EFA, 0x70D5, 0x9EFB, 0x70D6, 0x9EFC, 0x70D7, 0x9EFD, 0x70D8, 0xBAE6, 0x70D9, 0xC0D3, 0x70DA, 0x9EFE,
- 0x70DB, 0xD6F2, 0x70DC, 0x9F40, 0x70DD, 0x9F41, 0x70DE, 0x9F42, 0x70DF, 0xD1CC, 0x70E0, 0x9F43, 0x70E1, 0x9F44, 0x70E2, 0x9F45,
- 0x70E3, 0x9F46, 0x70E4, 0xBFBE, 0x70E5, 0x9F47, 0x70E6, 0xB7B3, 0x70E7, 0xC9D5, 0x70E8, 0xECC7, 0x70E9, 0xBBE2, 0x70EA, 0x9F48,
- 0x70EB, 0xCCCC, 0x70EC, 0xBDFD, 0x70ED, 0xC8C8, 0x70EE, 0x9F49, 0x70EF, 0xCFA9, 0x70F0, 0x9F4A, 0x70F1, 0x9F4B, 0x70F2, 0x9F4C,
- 0x70F3, 0x9F4D, 0x70F4, 0x9F4E, 0x70F5, 0x9F4F, 0x70F6, 0x9F50, 0x70F7, 0xCDE9, 0x70F8, 0x9F51, 0x70F9, 0xC5EB, 0x70FA, 0x9F52,
- 0x70FB, 0x9F53, 0x70FC, 0x9F54, 0x70FD, 0xB7E9, 0x70FE, 0x9F55, 0x70FF, 0x9F56, 0x7100, 0x9F57, 0x7101, 0x9F58, 0x7102, 0x9F59,
- 0x7103, 0x9F5A, 0x7104, 0x9F5B, 0x7105, 0x9F5C, 0x7106, 0x9F5D, 0x7107, 0x9F5E, 0x7108, 0x9F5F, 0x7109, 0xD1C9, 0x710A, 0xBAB8,
- 0x710B, 0x9F60, 0x710C, 0x9F61, 0x710D, 0x9F62, 0x710E, 0x9F63, 0x710F, 0x9F64, 0x7110, 0xECC9, 0x7111, 0x9F65, 0x7112, 0x9F66,
- 0x7113, 0xECCA, 0x7114, 0x9F67, 0x7115, 0xBBC0, 0x7116, 0xECCB, 0x7117, 0x9F68, 0x7118, 0xECE2, 0x7119, 0xB1BA, 0x711A, 0xB7D9,
- 0x711B, 0x9F69, 0x711C, 0x9F6A, 0x711D, 0x9F6B, 0x711E, 0x9F6C, 0x711F, 0x9F6D, 0x7120, 0x9F6E, 0x7121, 0x9F6F, 0x7122, 0x9F70,
- 0x7123, 0x9F71, 0x7124, 0x9F72, 0x7125, 0x9F73, 0x7126, 0xBDB9, 0x7127, 0x9F74, 0x7128, 0x9F75, 0x7129, 0x9F76, 0x712A, 0x9F77,
- 0x712B, 0x9F78, 0x712C, 0x9F79, 0x712D, 0x9F7A, 0x712E, 0x9F7B, 0x712F, 0xECCC, 0x7130, 0xD1E6, 0x7131, 0xECCD, 0x7132, 0x9F7C,
- 0x7133, 0x9F7D, 0x7134, 0x9F7E, 0x7135, 0x9F80, 0x7136, 0xC8BB, 0x7137, 0x9F81, 0x7138, 0x9F82, 0x7139, 0x9F83, 0x713A, 0x9F84,
- 0x713B, 0x9F85, 0x713C, 0x9F86, 0x713D, 0x9F87, 0x713E, 0x9F88, 0x713F, 0x9F89, 0x7140, 0x9F8A, 0x7141, 0x9F8B, 0x7142, 0x9F8C,
- 0x7143, 0x9F8D, 0x7144, 0x9F8E, 0x7145, 0xECD1, 0x7146, 0x9F8F, 0x7147, 0x9F90, 0x7148, 0x9F91, 0x7149, 0x9F92, 0x714A, 0xECD3,
- 0x714B, 0x9F93, 0x714C, 0xBBCD, 0x714D, 0x9F94, 0x714E, 0xBCE5, 0x714F, 0x9F95, 0x7150, 0x9F96, 0x7151, 0x9F97, 0x7152, 0x9F98,
- 0x7153, 0x9F99, 0x7154, 0x9F9A, 0x7155, 0x9F9B, 0x7156, 0x9F9C, 0x7157, 0x9F9D, 0x7158, 0x9F9E, 0x7159, 0x9F9F, 0x715A, 0x9FA0,
- 0x715B, 0x9FA1, 0x715C, 0xECCF, 0x715D, 0x9FA2, 0x715E, 0xC9B7, 0x715F, 0x9FA3, 0x7160, 0x9FA4, 0x7161, 0x9FA5, 0x7162, 0x9FA6,
- 0x7163, 0x9FA7, 0x7164, 0xC3BA, 0x7165, 0x9FA8, 0x7166, 0xECE3, 0x7167, 0xD5D5, 0x7168, 0xECD0, 0x7169, 0x9FA9, 0x716A, 0x9FAA,
- 0x716B, 0x9FAB, 0x716C, 0x9FAC, 0x716D, 0x9FAD, 0x716E, 0xD6F3, 0x716F, 0x9FAE, 0x7170, 0x9FAF, 0x7171, 0x9FB0, 0x7172, 0xECD2,
- 0x7173, 0xECCE, 0x7174, 0x9FB1, 0x7175, 0x9FB2, 0x7176, 0x9FB3, 0x7177, 0x9FB4, 0x7178, 0xECD4, 0x7179, 0x9FB5, 0x717A, 0xECD5,
- 0x717B, 0x9FB6, 0x717C, 0x9FB7, 0x717D, 0xC9BF, 0x717E, 0x9FB8, 0x717F, 0x9FB9, 0x7180, 0x9FBA, 0x7181, 0x9FBB, 0x7182, 0x9FBC,
- 0x7183, 0x9FBD, 0x7184, 0xCFA8, 0x7185, 0x9FBE, 0x7186, 0x9FBF, 0x7187, 0x9FC0, 0x7188, 0x9FC1, 0x7189, 0x9FC2, 0x718A, 0xD0DC,
- 0x718B, 0x9FC3, 0x718C, 0x9FC4, 0x718D, 0x9FC5, 0x718E, 0x9FC6, 0x718F, 0xD1AC, 0x7190, 0x9FC7, 0x7191, 0x9FC8, 0x7192, 0x9FC9,
- 0x7193, 0x9FCA, 0x7194, 0xC8DB, 0x7195, 0x9FCB, 0x7196, 0x9FCC, 0x7197, 0x9FCD, 0x7198, 0xECD6, 0x7199, 0xCEF5, 0x719A, 0x9FCE,
- 0x719B, 0x9FCF, 0x719C, 0x9FD0, 0x719D, 0x9FD1, 0x719E, 0x9FD2, 0x719F, 0xCAEC, 0x71A0, 0xECDA, 0x71A1, 0x9FD3, 0x71A2, 0x9FD4,
- 0x71A3, 0x9FD5, 0x71A4, 0x9FD6, 0x71A5, 0x9FD7, 0x71A6, 0x9FD8, 0x71A7, 0x9FD9, 0x71A8, 0xECD9, 0x71A9, 0x9FDA, 0x71AA, 0x9FDB,
- 0x71AB, 0x9FDC, 0x71AC, 0xB0BE, 0x71AD, 0x9FDD, 0x71AE, 0x9FDE, 0x71AF, 0x9FDF, 0x71B0, 0x9FE0, 0x71B1, 0x9FE1, 0x71B2, 0x9FE2,
- 0x71B3, 0xECD7, 0x71B4, 0x9FE3, 0x71B5, 0xECD8, 0x71B6, 0x9FE4, 0x71B7, 0x9FE5, 0x71B8, 0x9FE6, 0x71B9, 0xECE4, 0x71BA, 0x9FE7,
- 0x71BB, 0x9FE8, 0x71BC, 0x9FE9, 0x71BD, 0x9FEA, 0x71BE, 0x9FEB, 0x71BF, 0x9FEC, 0x71C0, 0x9FED, 0x71C1, 0x9FEE, 0x71C2, 0x9FEF,
- 0x71C3, 0xC8BC, 0x71C4, 0x9FF0, 0x71C5, 0x9FF1, 0x71C6, 0x9FF2, 0x71C7, 0x9FF3, 0x71C8, 0x9FF4, 0x71C9, 0x9FF5, 0x71CA, 0x9FF6,
- 0x71CB, 0x9FF7, 0x71CC, 0x9FF8, 0x71CD, 0x9FF9, 0x71CE, 0xC1C7, 0x71CF, 0x9FFA, 0x71D0, 0x9FFB, 0x71D1, 0x9FFC, 0x71D2, 0x9FFD,
- 0x71D3, 0x9FFE, 0x71D4, 0xECDC, 0x71D5, 0xD1E0, 0x71D6, 0xA040, 0x71D7, 0xA041, 0x71D8, 0xA042, 0x71D9, 0xA043, 0x71DA, 0xA044,
- 0x71DB, 0xA045, 0x71DC, 0xA046, 0x71DD, 0xA047, 0x71DE, 0xA048, 0x71DF, 0xA049, 0x71E0, 0xECDB, 0x71E1, 0xA04A, 0x71E2, 0xA04B,
- 0x71E3, 0xA04C, 0x71E4, 0xA04D, 0x71E5, 0xD4EF, 0x71E6, 0xA04E, 0x71E7, 0xECDD, 0x71E8, 0xA04F, 0x71E9, 0xA050, 0x71EA, 0xA051,
- 0x71EB, 0xA052, 0x71EC, 0xA053, 0x71ED, 0xA054, 0x71EE, 0xDBC6, 0x71EF, 0xA055, 0x71F0, 0xA056, 0x71F1, 0xA057, 0x71F2, 0xA058,
- 0x71F3, 0xA059, 0x71F4, 0xA05A, 0x71F5, 0xA05B, 0x71F6, 0xA05C, 0x71F7, 0xA05D, 0x71F8, 0xA05E, 0x71F9, 0xECDE, 0x71FA, 0xA05F,
- 0x71FB, 0xA060, 0x71FC, 0xA061, 0x71FD, 0xA062, 0x71FE, 0xA063, 0x71FF, 0xA064, 0x7200, 0xA065, 0x7201, 0xA066, 0x7202, 0xA067,
- 0x7203, 0xA068, 0x7204, 0xA069, 0x7205, 0xA06A, 0x7206, 0xB1AC, 0x7207, 0xA06B, 0x7208, 0xA06C, 0x7209, 0xA06D, 0x720A, 0xA06E,
- 0x720B, 0xA06F, 0x720C, 0xA070, 0x720D, 0xA071, 0x720E, 0xA072, 0x720F, 0xA073, 0x7210, 0xA074, 0x7211, 0xA075, 0x7212, 0xA076,
- 0x7213, 0xA077, 0x7214, 0xA078, 0x7215, 0xA079, 0x7216, 0xA07A, 0x7217, 0xA07B, 0x7218, 0xA07C, 0x7219, 0xA07D, 0x721A, 0xA07E,
- 0x721B, 0xA080, 0x721C, 0xA081, 0x721D, 0xECDF, 0x721E, 0xA082, 0x721F, 0xA083, 0x7220, 0xA084, 0x7221, 0xA085, 0x7222, 0xA086,
- 0x7223, 0xA087, 0x7224, 0xA088, 0x7225, 0xA089, 0x7226, 0xA08A, 0x7227, 0xA08B, 0x7228, 0xECE0, 0x7229, 0xA08C, 0x722A, 0xD7A6,
- 0x722B, 0xA08D, 0x722C, 0xC5C0, 0x722D, 0xA08E, 0x722E, 0xA08F, 0x722F, 0xA090, 0x7230, 0xEBBC, 0x7231, 0xB0AE, 0x7232, 0xA091,
- 0x7233, 0xA092, 0x7234, 0xA093, 0x7235, 0xBEF4, 0x7236, 0xB8B8, 0x7237, 0xD2AF, 0x7238, 0xB0D6, 0x7239, 0xB5F9, 0x723A, 0xA094,
- 0x723B, 0xD8B3, 0x723C, 0xA095, 0x723D, 0xCBAC, 0x723E, 0xA096, 0x723F, 0xE3DD, 0x7240, 0xA097, 0x7241, 0xA098, 0x7242, 0xA099,
- 0x7243, 0xA09A, 0x7244, 0xA09B, 0x7245, 0xA09C, 0x7246, 0xA09D, 0x7247, 0xC6AC, 0x7248, 0xB0E6, 0x7249, 0xA09E, 0x724A, 0xA09F,
- 0x724B, 0xA0A0, 0x724C, 0xC5C6, 0x724D, 0xEBB9, 0x724E, 0xA0A1, 0x724F, 0xA0A2, 0x7250, 0xA0A3, 0x7251, 0xA0A4, 0x7252, 0xEBBA,
- 0x7253, 0xA0A5, 0x7254, 0xA0A6, 0x7255, 0xA0A7, 0x7256, 0xEBBB, 0x7257, 0xA0A8, 0x7258, 0xA0A9, 0x7259, 0xD1C0, 0x725A, 0xA0AA,
- 0x725B, 0xC5A3, 0x725C, 0xA0AB, 0x725D, 0xEAF2, 0x725E, 0xA0AC, 0x725F, 0xC4B2, 0x7260, 0xA0AD, 0x7261, 0xC4B5, 0x7262, 0xC0CE,
- 0x7263, 0xA0AE, 0x7264, 0xA0AF, 0x7265, 0xA0B0, 0x7266, 0xEAF3, 0x7267, 0xC4C1, 0x7268, 0xA0B1, 0x7269, 0xCEEF, 0x726A, 0xA0B2,
- 0x726B, 0xA0B3, 0x726C, 0xA0B4, 0x726D, 0xA0B5, 0x726E, 0xEAF0, 0x726F, 0xEAF4, 0x7270, 0xA0B6, 0x7271, 0xA0B7, 0x7272, 0xC9FC,
- 0x7273, 0xA0B8, 0x7274, 0xA0B9, 0x7275, 0xC7A3, 0x7276, 0xA0BA, 0x7277, 0xA0BB, 0x7278, 0xA0BC, 0x7279, 0xCCD8, 0x727A, 0xCEFE,
- 0x727B, 0xA0BD, 0x727C, 0xA0BE, 0x727D, 0xA0BF, 0x727E, 0xEAF5, 0x727F, 0xEAF6, 0x7280, 0xCFAC, 0x7281, 0xC0E7, 0x7282, 0xA0C0,
- 0x7283, 0xA0C1, 0x7284, 0xEAF7, 0x7285, 0xA0C2, 0x7286, 0xA0C3, 0x7287, 0xA0C4, 0x7288, 0xA0C5, 0x7289, 0xA0C6, 0x728A, 0xB6BF,
- 0x728B, 0xEAF8, 0x728C, 0xA0C7, 0x728D, 0xEAF9, 0x728E, 0xA0C8, 0x728F, 0xEAFA, 0x7290, 0xA0C9, 0x7291, 0xA0CA, 0x7292, 0xEAFB,
- 0x7293, 0xA0CB, 0x7294, 0xA0CC, 0x7295, 0xA0CD, 0x7296, 0xA0CE, 0x7297, 0xA0CF, 0x7298, 0xA0D0, 0x7299, 0xA0D1, 0x729A, 0xA0D2,
- 0x729B, 0xA0D3, 0x729C, 0xA0D4, 0x729D, 0xA0D5, 0x729E, 0xA0D6, 0x729F, 0xEAF1, 0x72A0, 0xA0D7, 0x72A1, 0xA0D8, 0x72A2, 0xA0D9,
- 0x72A3, 0xA0DA, 0x72A4, 0xA0DB, 0x72A5, 0xA0DC, 0x72A6, 0xA0DD, 0x72A7, 0xA0DE, 0x72A8, 0xA0DF, 0x72A9, 0xA0E0, 0x72AA, 0xA0E1,
- 0x72AB, 0xA0E2, 0x72AC, 0xC8AE, 0x72AD, 0xE1EB, 0x72AE, 0xA0E3, 0x72AF, 0xB7B8, 0x72B0, 0xE1EC, 0x72B1, 0xA0E4, 0x72B2, 0xA0E5,
- 0x72B3, 0xA0E6, 0x72B4, 0xE1ED, 0x72B5, 0xA0E7, 0x72B6, 0xD7B4, 0x72B7, 0xE1EE, 0x72B8, 0xE1EF, 0x72B9, 0xD3CC, 0x72BA, 0xA0E8,
- 0x72BB, 0xA0E9, 0x72BC, 0xA0EA, 0x72BD, 0xA0EB, 0x72BE, 0xA0EC, 0x72BF, 0xA0ED, 0x72C0, 0xA0EE, 0x72C1, 0xE1F1, 0x72C2, 0xBFF1,
- 0x72C3, 0xE1F0, 0x72C4, 0xB5D2, 0x72C5, 0xA0EF, 0x72C6, 0xA0F0, 0x72C7, 0xA0F1, 0x72C8, 0xB1B7, 0x72C9, 0xA0F2, 0x72CA, 0xA0F3,
- 0x72CB, 0xA0F4, 0x72CC, 0xA0F5, 0x72CD, 0xE1F3, 0x72CE, 0xE1F2, 0x72CF, 0xA0F6, 0x72D0, 0xBAFC, 0x72D1, 0xA0F7, 0x72D2, 0xE1F4,
- 0x72D3, 0xA0F8, 0x72D4, 0xA0F9, 0x72D5, 0xA0FA, 0x72D6, 0xA0FB, 0x72D7, 0xB9B7, 0x72D8, 0xA0FC, 0x72D9, 0xBED1, 0x72DA, 0xA0FD,
- 0x72DB, 0xA0FE, 0x72DC, 0xAA40, 0x72DD, 0xAA41, 0x72DE, 0xC4FC, 0x72DF, 0xAA42, 0x72E0, 0xBADD, 0x72E1, 0xBDC6, 0x72E2, 0xAA43,
- 0x72E3, 0xAA44, 0x72E4, 0xAA45, 0x72E5, 0xAA46, 0x72E6, 0xAA47, 0x72E7, 0xAA48, 0x72E8, 0xE1F5, 0x72E9, 0xE1F7, 0x72EA, 0xAA49,
- 0x72EB, 0xAA4A, 0x72EC, 0xB6C0, 0x72ED, 0xCFC1, 0x72EE, 0xCAA8, 0x72EF, 0xE1F6, 0x72F0, 0xD5F8, 0x72F1, 0xD3FC, 0x72F2, 0xE1F8,
- 0x72F3, 0xE1FC, 0x72F4, 0xE1F9, 0x72F5, 0xAA4B, 0x72F6, 0xAA4C, 0x72F7, 0xE1FA, 0x72F8, 0xC0EA, 0x72F9, 0xAA4D, 0x72FA, 0xE1FE,
- 0x72FB, 0xE2A1, 0x72FC, 0xC0C7, 0x72FD, 0xAA4E, 0x72FE, 0xAA4F, 0x72FF, 0xAA50, 0x7300, 0xAA51, 0x7301, 0xE1FB, 0x7302, 0xAA52,
- 0x7303, 0xE1FD, 0x7304, 0xAA53, 0x7305, 0xAA54, 0x7306, 0xAA55, 0x7307, 0xAA56, 0x7308, 0xAA57, 0x7309, 0xAA58, 0x730A, 0xE2A5,
- 0x730B, 0xAA59, 0x730C, 0xAA5A, 0x730D, 0xAA5B, 0x730E, 0xC1D4, 0x730F, 0xAA5C, 0x7310, 0xAA5D, 0x7311, 0xAA5E, 0x7312, 0xAA5F,
- 0x7313, 0xE2A3, 0x7314, 0xAA60, 0x7315, 0xE2A8, 0x7316, 0xB2FE, 0x7317, 0xE2A2, 0x7318, 0xAA61, 0x7319, 0xAA62, 0x731A, 0xAA63,
- 0x731B, 0xC3CD, 0x731C, 0xB2C2, 0x731D, 0xE2A7, 0x731E, 0xE2A6, 0x731F, 0xAA64, 0x7320, 0xAA65, 0x7321, 0xE2A4, 0x7322, 0xE2A9,
- 0x7323, 0xAA66, 0x7324, 0xAA67, 0x7325, 0xE2AB, 0x7326, 0xAA68, 0x7327, 0xAA69, 0x7328, 0xAA6A, 0x7329, 0xD0C9, 0x732A, 0xD6ED,
- 0x732B, 0xC3A8, 0x732C, 0xE2AC, 0x732D, 0xAA6B, 0x732E, 0xCFD7, 0x732F, 0xAA6C, 0x7330, 0xAA6D, 0x7331, 0xE2AE, 0x7332, 0xAA6E,
- 0x7333, 0xAA6F, 0x7334, 0xBAEF, 0x7335, 0xAA70, 0x7336, 0xAA71, 0x7337, 0xE9E0, 0x7338, 0xE2AD, 0x7339, 0xE2AA, 0x733A, 0xAA72,
- 0x733B, 0xAA73, 0x733C, 0xAA74, 0x733D, 0xAA75, 0x733E, 0xBBAB, 0x733F, 0xD4B3, 0x7340, 0xAA76, 0x7341, 0xAA77, 0x7342, 0xAA78,
- 0x7343, 0xAA79, 0x7344, 0xAA7A, 0x7345, 0xAA7B, 0x7346, 0xAA7C, 0x7347, 0xAA7D, 0x7348, 0xAA7E, 0x7349, 0xAA80, 0x734A, 0xAA81,
- 0x734B, 0xAA82, 0x734C, 0xAA83, 0x734D, 0xE2B0, 0x734E, 0xAA84, 0x734F, 0xAA85, 0x7350, 0xE2AF, 0x7351, 0xAA86, 0x7352, 0xE9E1,
- 0x7353, 0xAA87, 0x7354, 0xAA88, 0x7355, 0xAA89, 0x7356, 0xAA8A, 0x7357, 0xE2B1, 0x7358, 0xAA8B, 0x7359, 0xAA8C, 0x735A, 0xAA8D,
- 0x735B, 0xAA8E, 0x735C, 0xAA8F, 0x735D, 0xAA90, 0x735E, 0xAA91, 0x735F, 0xAA92, 0x7360, 0xE2B2, 0x7361, 0xAA93, 0x7362, 0xAA94,
- 0x7363, 0xAA95, 0x7364, 0xAA96, 0x7365, 0xAA97, 0x7366, 0xAA98, 0x7367, 0xAA99, 0x7368, 0xAA9A, 0x7369, 0xAA9B, 0x736A, 0xAA9C,
- 0x736B, 0xAA9D, 0x736C, 0xE2B3, 0x736D, 0xCCA1, 0x736E, 0xAA9E, 0x736F, 0xE2B4, 0x7370, 0xAA9F, 0x7371, 0xAAA0, 0x7372, 0xAB40,
- 0x7373, 0xAB41, 0x7374, 0xAB42, 0x7375, 0xAB43, 0x7376, 0xAB44, 0x7377, 0xAB45, 0x7378, 0xAB46, 0x7379, 0xAB47, 0x737A, 0xAB48,
- 0x737B, 0xAB49, 0x737C, 0xAB4A, 0x737D, 0xAB4B, 0x737E, 0xE2B5, 0x737F, 0xAB4C, 0x7380, 0xAB4D, 0x7381, 0xAB4E, 0x7382, 0xAB4F,
- 0x7383, 0xAB50, 0x7384, 0xD0FE, 0x7385, 0xAB51, 0x7386, 0xAB52, 0x7387, 0xC2CA, 0x7388, 0xAB53, 0x7389, 0xD3F1, 0x738A, 0xAB54,
- 0x738B, 0xCDF5, 0x738C, 0xAB55, 0x738D, 0xAB56, 0x738E, 0xE7E0, 0x738F, 0xAB57, 0x7390, 0xAB58, 0x7391, 0xE7E1, 0x7392, 0xAB59,
- 0x7393, 0xAB5A, 0x7394, 0xAB5B, 0x7395, 0xAB5C, 0x7396, 0xBEC1, 0x7397, 0xAB5D, 0x7398, 0xAB5E, 0x7399, 0xAB5F, 0x739A, 0xAB60,
- 0x739B, 0xC2EA, 0x739C, 0xAB61, 0x739D, 0xAB62, 0x739E, 0xAB63, 0x739F, 0xE7E4, 0x73A0, 0xAB64, 0x73A1, 0xAB65, 0x73A2, 0xE7E3,
- 0x73A3, 0xAB66, 0x73A4, 0xAB67, 0x73A5, 0xAB68, 0x73A6, 0xAB69, 0x73A7, 0xAB6A, 0x73A8, 0xAB6B, 0x73A9, 0xCDE6, 0x73AA, 0xAB6C,
- 0x73AB, 0xC3B5, 0x73AC, 0xAB6D, 0x73AD, 0xAB6E, 0x73AE, 0xE7E2, 0x73AF, 0xBBB7, 0x73B0, 0xCFD6, 0x73B1, 0xAB6F, 0x73B2, 0xC1E1,
- 0x73B3, 0xE7E9, 0x73B4, 0xAB70, 0x73B5, 0xAB71, 0x73B6, 0xAB72, 0x73B7, 0xE7E8, 0x73B8, 0xAB73, 0x73B9, 0xAB74, 0x73BA, 0xE7F4,
- 0x73BB, 0xB2A3, 0x73BC, 0xAB75, 0x73BD, 0xAB76, 0x73BE, 0xAB77, 0x73BF, 0xAB78, 0x73C0, 0xE7EA, 0x73C1, 0xAB79, 0x73C2, 0xE7E6,
- 0x73C3, 0xAB7A, 0x73C4, 0xAB7B, 0x73C5, 0xAB7C, 0x73C6, 0xAB7D, 0x73C7, 0xAB7E, 0x73C8, 0xE7EC, 0x73C9, 0xE7EB, 0x73CA, 0xC9BA,
- 0x73CB, 0xAB80, 0x73CC, 0xAB81, 0x73CD, 0xD5E4, 0x73CE, 0xAB82, 0x73CF, 0xE7E5, 0x73D0, 0xB7A9, 0x73D1, 0xE7E7, 0x73D2, 0xAB83,
- 0x73D3, 0xAB84, 0x73D4, 0xAB85, 0x73D5, 0xAB86, 0x73D6, 0xAB87, 0x73D7, 0xAB88, 0x73D8, 0xAB89, 0x73D9, 0xE7EE, 0x73DA, 0xAB8A,
- 0x73DB, 0xAB8B, 0x73DC, 0xAB8C, 0x73DD, 0xAB8D, 0x73DE, 0xE7F3, 0x73DF, 0xAB8E, 0x73E0, 0xD6E9, 0x73E1, 0xAB8F, 0x73E2, 0xAB90,
- 0x73E3, 0xAB91, 0x73E4, 0xAB92, 0x73E5, 0xE7ED, 0x73E6, 0xAB93, 0x73E7, 0xE7F2, 0x73E8, 0xAB94, 0x73E9, 0xE7F1, 0x73EA, 0xAB95,
- 0x73EB, 0xAB96, 0x73EC, 0xAB97, 0x73ED, 0xB0E0, 0x73EE, 0xAB98, 0x73EF, 0xAB99, 0x73F0, 0xAB9A, 0x73F1, 0xAB9B, 0x73F2, 0xE7F5,
- 0x73F3, 0xAB9C, 0x73F4, 0xAB9D, 0x73F5, 0xAB9E, 0x73F6, 0xAB9F, 0x73F7, 0xABA0, 0x73F8, 0xAC40, 0x73F9, 0xAC41, 0x73FA, 0xAC42,
- 0x73FB, 0xAC43, 0x73FC, 0xAC44, 0x73FD, 0xAC45, 0x73FE, 0xAC46, 0x73FF, 0xAC47, 0x7400, 0xAC48, 0x7401, 0xAC49, 0x7402, 0xAC4A,
- 0x7403, 0xC7F2, 0x7404, 0xAC4B, 0x7405, 0xC0C5, 0x7406, 0xC0ED, 0x7407, 0xAC4C, 0x7408, 0xAC4D, 0x7409, 0xC1F0, 0x740A, 0xE7F0,
- 0x740B, 0xAC4E, 0x740C, 0xAC4F, 0x740D, 0xAC50, 0x740E, 0xAC51, 0x740F, 0xE7F6, 0x7410, 0xCBF6, 0x7411, 0xAC52, 0x7412, 0xAC53,
- 0x7413, 0xAC54, 0x7414, 0xAC55, 0x7415, 0xAC56, 0x7416, 0xAC57, 0x7417, 0xAC58, 0x7418, 0xAC59, 0x7419, 0xAC5A, 0x741A, 0xE8A2,
- 0x741B, 0xE8A1, 0x741C, 0xAC5B, 0x741D, 0xAC5C, 0x741E, 0xAC5D, 0x741F, 0xAC5E, 0x7420, 0xAC5F, 0x7421, 0xAC60, 0x7422, 0xD7C1,
- 0x7423, 0xAC61, 0x7424, 0xAC62, 0x7425, 0xE7FA, 0x7426, 0xE7F9, 0x7427, 0xAC63, 0x7428, 0xE7FB, 0x7429, 0xAC64, 0x742A, 0xE7F7,
- 0x742B, 0xAC65, 0x742C, 0xE7FE, 0x742D, 0xAC66, 0x742E, 0xE7FD, 0x742F, 0xAC67, 0x7430, 0xE7FC, 0x7431, 0xAC68, 0x7432, 0xAC69,
- 0x7433, 0xC1D5, 0x7434, 0xC7D9, 0x7435, 0xC5FD, 0x7436, 0xC5C3, 0x7437, 0xAC6A, 0x7438, 0xAC6B, 0x7439, 0xAC6C, 0x743A, 0xAC6D,
- 0x743B, 0xAC6E, 0x743C, 0xC7ED, 0x743D, 0xAC6F, 0x743E, 0xAC70, 0x743F, 0xAC71, 0x7440, 0xAC72, 0x7441, 0xE8A3, 0x7442, 0xAC73,
- 0x7443, 0xAC74, 0x7444, 0xAC75, 0x7445, 0xAC76, 0x7446, 0xAC77, 0x7447, 0xAC78, 0x7448, 0xAC79, 0x7449, 0xAC7A, 0x744A, 0xAC7B,
- 0x744B, 0xAC7C, 0x744C, 0xAC7D, 0x744D, 0xAC7E, 0x744E, 0xAC80, 0x744F, 0xAC81, 0x7450, 0xAC82, 0x7451, 0xAC83, 0x7452, 0xAC84,
- 0x7453, 0xAC85, 0x7454, 0xAC86, 0x7455, 0xE8A6, 0x7456, 0xAC87, 0x7457, 0xE8A5, 0x7458, 0xAC88, 0x7459, 0xE8A7, 0x745A, 0xBAF7,
- 0x745B, 0xE7F8, 0x745C, 0xE8A4, 0x745D, 0xAC89, 0x745E, 0xC8F0, 0x745F, 0xC9AA, 0x7460, 0xAC8A, 0x7461, 0xAC8B, 0x7462, 0xAC8C,
- 0x7463, 0xAC8D, 0x7464, 0xAC8E, 0x7465, 0xAC8F, 0x7466, 0xAC90, 0x7467, 0xAC91, 0x7468, 0xAC92, 0x7469, 0xAC93, 0x746A, 0xAC94,
- 0x746B, 0xAC95, 0x746C, 0xAC96, 0x746D, 0xE8A9, 0x746E, 0xAC97, 0x746F, 0xAC98, 0x7470, 0xB9E5, 0x7471, 0xAC99, 0x7472, 0xAC9A,
- 0x7473, 0xAC9B, 0x7474, 0xAC9C, 0x7475, 0xAC9D, 0x7476, 0xD1FE, 0x7477, 0xE8A8, 0x7478, 0xAC9E, 0x7479, 0xAC9F, 0x747A, 0xACA0,
- 0x747B, 0xAD40, 0x747C, 0xAD41, 0x747D, 0xAD42, 0x747E, 0xE8AA, 0x747F, 0xAD43, 0x7480, 0xE8AD, 0x7481, 0xE8AE, 0x7482, 0xAD44,
- 0x7483, 0xC1A7, 0x7484, 0xAD45, 0x7485, 0xAD46, 0x7486, 0xAD47, 0x7487, 0xE8AF, 0x7488, 0xAD48, 0x7489, 0xAD49, 0x748A, 0xAD4A,
- 0x748B, 0xE8B0, 0x748C, 0xAD4B, 0x748D, 0xAD4C, 0x748E, 0xE8AC, 0x748F, 0xAD4D, 0x7490, 0xE8B4, 0x7491, 0xAD4E, 0x7492, 0xAD4F,
- 0x7493, 0xAD50, 0x7494, 0xAD51, 0x7495, 0xAD52, 0x7496, 0xAD53, 0x7497, 0xAD54, 0x7498, 0xAD55, 0x7499, 0xAD56, 0x749A, 0xAD57,
- 0x749B, 0xAD58, 0x749C, 0xE8AB, 0x749D, 0xAD59, 0x749E, 0xE8B1, 0x749F, 0xAD5A, 0x74A0, 0xAD5B, 0x74A1, 0xAD5C, 0x74A2, 0xAD5D,
- 0x74A3, 0xAD5E, 0x74A4, 0xAD5F, 0x74A5, 0xAD60, 0x74A6, 0xAD61, 0x74A7, 0xE8B5, 0x74A8, 0xE8B2, 0x74A9, 0xE8B3, 0x74AA, 0xAD62,
- 0x74AB, 0xAD63, 0x74AC, 0xAD64, 0x74AD, 0xAD65, 0x74AE, 0xAD66, 0x74AF, 0xAD67, 0x74B0, 0xAD68, 0x74B1, 0xAD69, 0x74B2, 0xAD6A,
- 0x74B3, 0xAD6B, 0x74B4, 0xAD6C, 0x74B5, 0xAD6D, 0x74B6, 0xAD6E, 0x74B7, 0xAD6F, 0x74B8, 0xAD70, 0x74B9, 0xAD71, 0x74BA, 0xE8B7,
- 0x74BB, 0xAD72, 0x74BC, 0xAD73, 0x74BD, 0xAD74, 0x74BE, 0xAD75, 0x74BF, 0xAD76, 0x74C0, 0xAD77, 0x74C1, 0xAD78, 0x74C2, 0xAD79,
- 0x74C3, 0xAD7A, 0x74C4, 0xAD7B, 0x74C5, 0xAD7C, 0x74C6, 0xAD7D, 0x74C7, 0xAD7E, 0x74C8, 0xAD80, 0x74C9, 0xAD81, 0x74CA, 0xAD82,
- 0x74CB, 0xAD83, 0x74CC, 0xAD84, 0x74CD, 0xAD85, 0x74CE, 0xAD86, 0x74CF, 0xAD87, 0x74D0, 0xAD88, 0x74D1, 0xAD89, 0x74D2, 0xE8B6,
- 0x74D3, 0xAD8A, 0x74D4, 0xAD8B, 0x74D5, 0xAD8C, 0x74D6, 0xAD8D, 0x74D7, 0xAD8E, 0x74D8, 0xAD8F, 0x74D9, 0xAD90, 0x74DA, 0xAD91,
- 0x74DB, 0xAD92, 0x74DC, 0xB9CF, 0x74DD, 0xAD93, 0x74DE, 0xF0AC, 0x74DF, 0xAD94, 0x74E0, 0xF0AD, 0x74E1, 0xAD95, 0x74E2, 0xC6B0,
- 0x74E3, 0xB0EA, 0x74E4, 0xC8BF, 0x74E5, 0xAD96, 0x74E6, 0xCDDF, 0x74E7, 0xAD97, 0x74E8, 0xAD98, 0x74E9, 0xAD99, 0x74EA, 0xAD9A,
- 0x74EB, 0xAD9B, 0x74EC, 0xAD9C, 0x74ED, 0xAD9D, 0x74EE, 0xCECD, 0x74EF, 0xEAB1, 0x74F0, 0xAD9E, 0x74F1, 0xAD9F, 0x74F2, 0xADA0,
- 0x74F3, 0xAE40, 0x74F4, 0xEAB2, 0x74F5, 0xAE41, 0x74F6, 0xC6BF, 0x74F7, 0xB4C9, 0x74F8, 0xAE42, 0x74F9, 0xAE43, 0x74FA, 0xAE44,
- 0x74FB, 0xAE45, 0x74FC, 0xAE46, 0x74FD, 0xAE47, 0x74FE, 0xAE48, 0x74FF, 0xEAB3, 0x7500, 0xAE49, 0x7501, 0xAE4A, 0x7502, 0xAE4B,
- 0x7503, 0xAE4C, 0x7504, 0xD5E7, 0x7505, 0xAE4D, 0x7506, 0xAE4E, 0x7507, 0xAE4F, 0x7508, 0xAE50, 0x7509, 0xAE51, 0x750A, 0xAE52,
- 0x750B, 0xAE53, 0x750C, 0xAE54, 0x750D, 0xDDF9, 0x750E, 0xAE55, 0x750F, 0xEAB4, 0x7510, 0xAE56, 0x7511, 0xEAB5, 0x7512, 0xAE57,
- 0x7513, 0xEAB6, 0x7514, 0xAE58, 0x7515, 0xAE59, 0x7516, 0xAE5A, 0x7517, 0xAE5B, 0x7518, 0xB8CA, 0x7519, 0xDFB0, 0x751A, 0xC9F5,
- 0x751B, 0xAE5C, 0x751C, 0xCCF0, 0x751D, 0xAE5D, 0x751E, 0xAE5E, 0x751F, 0xC9FA, 0x7520, 0xAE5F, 0x7521, 0xAE60, 0x7522, 0xAE61,
- 0x7523, 0xAE62, 0x7524, 0xAE63, 0x7525, 0xC9FB, 0x7526, 0xAE64, 0x7527, 0xAE65, 0x7528, 0xD3C3, 0x7529, 0xCBA6, 0x752A, 0xAE66,
- 0x752B, 0xB8A6, 0x752C, 0xF0AE, 0x752D, 0xB1C2, 0x752E, 0xAE67, 0x752F, 0xE5B8, 0x7530, 0xCCEF, 0x7531, 0xD3C9, 0x7532, 0xBCD7,
- 0x7533, 0xC9EA, 0x7534, 0xAE68, 0x7535, 0xB5E7, 0x7536, 0xAE69, 0x7537, 0xC4D0, 0x7538, 0xB5E9, 0x7539, 0xAE6A, 0x753A, 0xEEAE,
- 0x753B, 0xBBAD, 0x753C, 0xAE6B, 0x753D, 0xAE6C, 0x753E, 0xE7DE, 0x753F, 0xAE6D, 0x7540, 0xEEAF, 0x7541, 0xAE6E, 0x7542, 0xAE6F,
- 0x7543, 0xAE70, 0x7544, 0xAE71, 0x7545, 0xB3A9, 0x7546, 0xAE72, 0x7547, 0xAE73, 0x7548, 0xEEB2, 0x7549, 0xAE74, 0x754A, 0xAE75,
- 0x754B, 0xEEB1, 0x754C, 0xBDE7, 0x754D, 0xAE76, 0x754E, 0xEEB0, 0x754F, 0xCEB7, 0x7550, 0xAE77, 0x7551, 0xAE78, 0x7552, 0xAE79,
- 0x7553, 0xAE7A, 0x7554, 0xC5CF, 0x7555, 0xAE7B, 0x7556, 0xAE7C, 0x7557, 0xAE7D, 0x7558, 0xAE7E, 0x7559, 0xC1F4, 0x755A, 0xDBCE,
- 0x755B, 0xEEB3, 0x755C, 0xD0F3, 0x755D, 0xAE80, 0x755E, 0xAE81, 0x755F, 0xAE82, 0x7560, 0xAE83, 0x7561, 0xAE84, 0x7562, 0xAE85,
- 0x7563, 0xAE86, 0x7564, 0xAE87, 0x7565, 0xC2D4, 0x7566, 0xC6E8, 0x7567, 0xAE88, 0x7568, 0xAE89, 0x7569, 0xAE8A, 0x756A, 0xB7AC,
- 0x756B, 0xAE8B, 0x756C, 0xAE8C, 0x756D, 0xAE8D, 0x756E, 0xAE8E, 0x756F, 0xAE8F, 0x7570, 0xAE90, 0x7571, 0xAE91, 0x7572, 0xEEB4,
- 0x7573, 0xAE92, 0x7574, 0xB3EB, 0x7575, 0xAE93, 0x7576, 0xAE94, 0x7577, 0xAE95, 0x7578, 0xBBFB, 0x7579, 0xEEB5, 0x757A, 0xAE96,
- 0x757B, 0xAE97, 0x757C, 0xAE98, 0x757D, 0xAE99, 0x757E, 0xAE9A, 0x757F, 0xE7DC, 0x7580, 0xAE9B, 0x7581, 0xAE9C, 0x7582, 0xAE9D,
- 0x7583, 0xEEB6, 0x7584, 0xAE9E, 0x7585, 0xAE9F, 0x7586, 0xBDAE, 0x7587, 0xAEA0, 0x7588, 0xAF40, 0x7589, 0xAF41, 0x758A, 0xAF42,
- 0x758B, 0xF1E2, 0x758C, 0xAF43, 0x758D, 0xAF44, 0x758E, 0xAF45, 0x758F, 0xCAE8, 0x7590, 0xAF46, 0x7591, 0xD2C9, 0x7592, 0xF0DA,
- 0x7593, 0xAF47, 0x7594, 0xF0DB, 0x7595, 0xAF48, 0x7596, 0xF0DC, 0x7597, 0xC1C6, 0x7598, 0xAF49, 0x7599, 0xB8ED, 0x759A, 0xBECE,
- 0x759B, 0xAF4A, 0x759C, 0xAF4B, 0x759D, 0xF0DE, 0x759E, 0xAF4C, 0x759F, 0xC5B1, 0x75A0, 0xF0DD, 0x75A1, 0xD1F1, 0x75A2, 0xAF4D,
- 0x75A3, 0xF0E0, 0x75A4, 0xB0CC, 0x75A5, 0xBDEA, 0x75A6, 0xAF4E, 0x75A7, 0xAF4F, 0x75A8, 0xAF50, 0x75A9, 0xAF51, 0x75AA, 0xAF52,
- 0x75AB, 0xD2DF, 0x75AC, 0xF0DF, 0x75AD, 0xAF53, 0x75AE, 0xB4AF, 0x75AF, 0xB7E8, 0x75B0, 0xF0E6, 0x75B1, 0xF0E5, 0x75B2, 0xC6A3,
- 0x75B3, 0xF0E1, 0x75B4, 0xF0E2, 0x75B5, 0xB4C3, 0x75B6, 0xAF54, 0x75B7, 0xAF55, 0x75B8, 0xF0E3, 0x75B9, 0xD5EE, 0x75BA, 0xAF56,
- 0x75BB, 0xAF57, 0x75BC, 0xCCDB, 0x75BD, 0xBED2, 0x75BE, 0xBCB2, 0x75BF, 0xAF58, 0x75C0, 0xAF59, 0x75C1, 0xAF5A, 0x75C2, 0xF0E8,
- 0x75C3, 0xF0E7, 0x75C4, 0xF0E4, 0x75C5, 0xB2A1, 0x75C6, 0xAF5B, 0x75C7, 0xD6A2, 0x75C8, 0xD3B8, 0x75C9, 0xBEB7, 0x75CA, 0xC8AC,
- 0x75CB, 0xAF5C, 0x75CC, 0xAF5D, 0x75CD, 0xF0EA, 0x75CE, 0xAF5E, 0x75CF, 0xAF5F, 0x75D0, 0xAF60, 0x75D1, 0xAF61, 0x75D2, 0xD1F7,
- 0x75D3, 0xAF62, 0x75D4, 0xD6CC, 0x75D5, 0xBADB, 0x75D6, 0xF0E9, 0x75D7, 0xAF63, 0x75D8, 0xB6BB, 0x75D9, 0xAF64, 0x75DA, 0xAF65,
- 0x75DB, 0xCDB4, 0x75DC, 0xAF66, 0x75DD, 0xAF67, 0x75DE, 0xC6A6, 0x75DF, 0xAF68, 0x75E0, 0xAF69, 0x75E1, 0xAF6A, 0x75E2, 0xC1A1,
- 0x75E3, 0xF0EB, 0x75E4, 0xF0EE, 0x75E5, 0xAF6B, 0x75E6, 0xF0ED, 0x75E7, 0xF0F0, 0x75E8, 0xF0EC, 0x75E9, 0xAF6C, 0x75EA, 0xBBBE,
- 0x75EB, 0xF0EF, 0x75EC, 0xAF6D, 0x75ED, 0xAF6E, 0x75EE, 0xAF6F, 0x75EF, 0xAF70, 0x75F0, 0xCCB5, 0x75F1, 0xF0F2, 0x75F2, 0xAF71,
- 0x75F3, 0xAF72, 0x75F4, 0xB3D5, 0x75F5, 0xAF73, 0x75F6, 0xAF74, 0x75F7, 0xAF75, 0x75F8, 0xAF76, 0x75F9, 0xB1D4, 0x75FA, 0xAF77,
- 0x75FB, 0xAF78, 0x75FC, 0xF0F3, 0x75FD, 0xAF79, 0x75FE, 0xAF7A, 0x75FF, 0xF0F4, 0x7600, 0xF0F6, 0x7601, 0xB4E1, 0x7602, 0xAF7B,
- 0x7603, 0xF0F1, 0x7604, 0xAF7C, 0x7605, 0xF0F7, 0x7606, 0xAF7D, 0x7607, 0xAF7E, 0x7608, 0xAF80, 0x7609, 0xAF81, 0x760A, 0xF0FA,
- 0x760B, 0xAF82, 0x760C, 0xF0F8, 0x760D, 0xAF83, 0x760E, 0xAF84, 0x760F, 0xAF85, 0x7610, 0xF0F5, 0x7611, 0xAF86, 0x7612, 0xAF87,
- 0x7613, 0xAF88, 0x7614, 0xAF89, 0x7615, 0xF0FD, 0x7616, 0xAF8A, 0x7617, 0xF0F9, 0x7618, 0xF0FC, 0x7619, 0xF0FE, 0x761A, 0xAF8B,
- 0x761B, 0xF1A1, 0x761C, 0xAF8C, 0x761D, 0xAF8D, 0x761E, 0xAF8E, 0x761F, 0xCEC1, 0x7620, 0xF1A4, 0x7621, 0xAF8F, 0x7622, 0xF1A3,
- 0x7623, 0xAF90, 0x7624, 0xC1F6, 0x7625, 0xF0FB, 0x7626, 0xCADD, 0x7627, 0xAF91, 0x7628, 0xAF92, 0x7629, 0xB4F1, 0x762A, 0xB1F1,
- 0x762B, 0xCCB1, 0x762C, 0xAF93, 0x762D, 0xF1A6, 0x762E, 0xAF94, 0x762F, 0xAF95, 0x7630, 0xF1A7, 0x7631, 0xAF96, 0x7632, 0xAF97,
- 0x7633, 0xF1AC, 0x7634, 0xD5CE, 0x7635, 0xF1A9, 0x7636, 0xAF98, 0x7637, 0xAF99, 0x7638, 0xC8B3, 0x7639, 0xAF9A, 0x763A, 0xAF9B,
- 0x763B, 0xAF9C, 0x763C, 0xF1A2, 0x763D, 0xAF9D, 0x763E, 0xF1AB, 0x763F, 0xF1A8, 0x7640, 0xF1A5, 0x7641, 0xAF9E, 0x7642, 0xAF9F,
- 0x7643, 0xF1AA, 0x7644, 0xAFA0, 0x7645, 0xB040, 0x7646, 0xB041, 0x7647, 0xB042, 0x7648, 0xB043, 0x7649, 0xB044, 0x764A, 0xB045,
- 0x764B, 0xB046, 0x764C, 0xB0A9, 0x764D, 0xF1AD, 0x764E, 0xB047, 0x764F, 0xB048, 0x7650, 0xB049, 0x7651, 0xB04A, 0x7652, 0xB04B,
- 0x7653, 0xB04C, 0x7654, 0xF1AF, 0x7655, 0xB04D, 0x7656, 0xF1B1, 0x7657, 0xB04E, 0x7658, 0xB04F, 0x7659, 0xB050, 0x765A, 0xB051,
- 0x765B, 0xB052, 0x765C, 0xF1B0, 0x765D, 0xB053, 0x765E, 0xF1AE, 0x765F, 0xB054, 0x7660, 0xB055, 0x7661, 0xB056, 0x7662, 0xB057,
- 0x7663, 0xD1A2, 0x7664, 0xB058, 0x7665, 0xB059, 0x7666, 0xB05A, 0x7667, 0xB05B, 0x7668, 0xB05C, 0x7669, 0xB05D, 0x766A, 0xB05E,
- 0x766B, 0xF1B2, 0x766C, 0xB05F, 0x766D, 0xB060, 0x766E, 0xB061, 0x766F, 0xF1B3, 0x7670, 0xB062, 0x7671, 0xB063, 0x7672, 0xB064,
- 0x7673, 0xB065, 0x7674, 0xB066, 0x7675, 0xB067, 0x7676, 0xB068, 0x7677, 0xB069, 0x7678, 0xB9EF, 0x7679, 0xB06A, 0x767A, 0xB06B,
- 0x767B, 0xB5C7, 0x767C, 0xB06C, 0x767D, 0xB0D7, 0x767E, 0xB0D9, 0x767F, 0xB06D, 0x7680, 0xB06E, 0x7681, 0xB06F, 0x7682, 0xD4ED,
- 0x7683, 0xB070, 0x7684, 0xB5C4, 0x7685, 0xB071, 0x7686, 0xBDD4, 0x7687, 0xBBCA, 0x7688, 0xF0A7, 0x7689, 0xB072, 0x768A, 0xB073,
- 0x768B, 0xB8DE, 0x768C, 0xB074, 0x768D, 0xB075, 0x768E, 0xF0A8, 0x768F, 0xB076, 0x7690, 0xB077, 0x7691, 0xB0A8, 0x7692, 0xB078,
- 0x7693, 0xF0A9, 0x7694, 0xB079, 0x7695, 0xB07A, 0x7696, 0xCDEE, 0x7697, 0xB07B, 0x7698, 0xB07C, 0x7699, 0xF0AA, 0x769A, 0xB07D,
- 0x769B, 0xB07E, 0x769C, 0xB080, 0x769D, 0xB081, 0x769E, 0xB082, 0x769F, 0xB083, 0x76A0, 0xB084, 0x76A1, 0xB085, 0x76A2, 0xB086,
- 0x76A3, 0xB087, 0x76A4, 0xF0AB, 0x76A5, 0xB088, 0x76A6, 0xB089, 0x76A7, 0xB08A, 0x76A8, 0xB08B, 0x76A9, 0xB08C, 0x76AA, 0xB08D,
- 0x76AB, 0xB08E, 0x76AC, 0xB08F, 0x76AD, 0xB090, 0x76AE, 0xC6A4, 0x76AF, 0xB091, 0x76B0, 0xB092, 0x76B1, 0xD6E5, 0x76B2, 0xF1E4,
- 0x76B3, 0xB093, 0x76B4, 0xF1E5, 0x76B5, 0xB094, 0x76B6, 0xB095, 0x76B7, 0xB096, 0x76B8, 0xB097, 0x76B9, 0xB098, 0x76BA, 0xB099,
- 0x76BB, 0xB09A, 0x76BC, 0xB09B, 0x76BD, 0xB09C, 0x76BE, 0xB09D, 0x76BF, 0xC3F3, 0x76C0, 0xB09E, 0x76C1, 0xB09F, 0x76C2, 0xD3DB,
- 0x76C3, 0xB0A0, 0x76C4, 0xB140, 0x76C5, 0xD6D1, 0x76C6, 0xC5E8, 0x76C7, 0xB141, 0x76C8, 0xD3AF, 0x76C9, 0xB142, 0x76CA, 0xD2E6,
- 0x76CB, 0xB143, 0x76CC, 0xB144, 0x76CD, 0xEEC1, 0x76CE, 0xB0BB, 0x76CF, 0xD5B5, 0x76D0, 0xD1CE, 0x76D1, 0xBCE0, 0x76D2, 0xBAD0,
- 0x76D3, 0xB145, 0x76D4, 0xBFF8, 0x76D5, 0xB146, 0x76D6, 0xB8C7, 0x76D7, 0xB5C1, 0x76D8, 0xC5CC, 0x76D9, 0xB147, 0x76DA, 0xB148,
- 0x76DB, 0xCAA2, 0x76DC, 0xB149, 0x76DD, 0xB14A, 0x76DE, 0xB14B, 0x76DF, 0xC3CB, 0x76E0, 0xB14C, 0x76E1, 0xB14D, 0x76E2, 0xB14E,
- 0x76E3, 0xB14F, 0x76E4, 0xB150, 0x76E5, 0xEEC2, 0x76E6, 0xB151, 0x76E7, 0xB152, 0x76E8, 0xB153, 0x76E9, 0xB154, 0x76EA, 0xB155,
- 0x76EB, 0xB156, 0x76EC, 0xB157, 0x76ED, 0xB158, 0x76EE, 0xC4BF, 0x76EF, 0xB6A2, 0x76F0, 0xB159, 0x76F1, 0xEDEC, 0x76F2, 0xC3A4,
- 0x76F3, 0xB15A, 0x76F4, 0xD6B1, 0x76F5, 0xB15B, 0x76F6, 0xB15C, 0x76F7, 0xB15D, 0x76F8, 0xCFE0, 0x76F9, 0xEDEF, 0x76FA, 0xB15E,
- 0x76FB, 0xB15F, 0x76FC, 0xC5CE, 0x76FD, 0xB160, 0x76FE, 0xB6DC, 0x76FF, 0xB161, 0x7700, 0xB162, 0x7701, 0xCAA1, 0x7702, 0xB163,
- 0x7703, 0xB164, 0x7704, 0xEDED, 0x7705, 0xB165, 0x7706, 0xB166, 0x7707, 0xEDF0, 0x7708, 0xEDF1, 0x7709, 0xC3BC, 0x770A, 0xB167,
- 0x770B, 0xBFB4, 0x770C, 0xB168, 0x770D, 0xEDEE, 0x770E, 0xB169, 0x770F, 0xB16A, 0x7710, 0xB16B, 0x7711, 0xB16C, 0x7712, 0xB16D,
- 0x7713, 0xB16E, 0x7714, 0xB16F, 0x7715, 0xB170, 0x7716, 0xB171, 0x7717, 0xB172, 0x7718, 0xB173, 0x7719, 0xEDF4, 0x771A, 0xEDF2,
- 0x771B, 0xB174, 0x771C, 0xB175, 0x771D, 0xB176, 0x771E, 0xB177, 0x771F, 0xD5E6, 0x7720, 0xC3DF, 0x7721, 0xB178, 0x7722, 0xEDF3,
- 0x7723, 0xB179, 0x7724, 0xB17A, 0x7725, 0xB17B, 0x7726, 0xEDF6, 0x7727, 0xB17C, 0x7728, 0xD5A3, 0x7729, 0xD1A3, 0x772A, 0xB17D,
- 0x772B, 0xB17E, 0x772C, 0xB180, 0x772D, 0xEDF5, 0x772E, 0xB181, 0x772F, 0xC3D0, 0x7730, 0xB182, 0x7731, 0xB183, 0x7732, 0xB184,
- 0x7733, 0xB185, 0x7734, 0xB186, 0x7735, 0xEDF7, 0x7736, 0xBFF4, 0x7737, 0xBEEC, 0x7738, 0xEDF8, 0x7739, 0xB187, 0x773A, 0xCCF7,
- 0x773B, 0xB188, 0x773C, 0xD1DB, 0x773D, 0xB189, 0x773E, 0xB18A, 0x773F, 0xB18B, 0x7740, 0xD7C5, 0x7741, 0xD5F6, 0x7742, 0xB18C,
- 0x7743, 0xEDFC, 0x7744, 0xB18D, 0x7745, 0xB18E, 0x7746, 0xB18F, 0x7747, 0xEDFB, 0x7748, 0xB190, 0x7749, 0xB191, 0x774A, 0xB192,
- 0x774B, 0xB193, 0x774C, 0xB194, 0x774D, 0xB195, 0x774E, 0xB196, 0x774F, 0xB197, 0x7750, 0xEDF9, 0x7751, 0xEDFA, 0x7752, 0xB198,
- 0x7753, 0xB199, 0x7754, 0xB19A, 0x7755, 0xB19B, 0x7756, 0xB19C, 0x7757, 0xB19D, 0x7758, 0xB19E, 0x7759, 0xB19F, 0x775A, 0xEDFD,
- 0x775B, 0xBEA6, 0x775C, 0xB1A0, 0x775D, 0xB240, 0x775E, 0xB241, 0x775F, 0xB242, 0x7760, 0xB243, 0x7761, 0xCBAF, 0x7762, 0xEEA1,
- 0x7763, 0xB6BD, 0x7764, 0xB244, 0x7765, 0xEEA2, 0x7766, 0xC4C0, 0x7767, 0xB245, 0x7768, 0xEDFE, 0x7769, 0xB246, 0x776A, 0xB247,
- 0x776B, 0xBDDE, 0x776C, 0xB2C7, 0x776D, 0xB248, 0x776E, 0xB249, 0x776F, 0xB24A, 0x7770, 0xB24B, 0x7771, 0xB24C, 0x7772, 0xB24D,
- 0x7773, 0xB24E, 0x7774, 0xB24F, 0x7775, 0xB250, 0x7776, 0xB251, 0x7777, 0xB252, 0x7778, 0xB253, 0x7779, 0xB6C3, 0x777A, 0xB254,
- 0x777B, 0xB255, 0x777C, 0xB256, 0x777D, 0xEEA5, 0x777E, 0xD8BA, 0x777F, 0xEEA3, 0x7780, 0xEEA6, 0x7781, 0xB257, 0x7782, 0xB258,
- 0x7783, 0xB259, 0x7784, 0xC3E9, 0x7785, 0xB3F2, 0x7786, 0xB25A, 0x7787, 0xB25B, 0x7788, 0xB25C, 0x7789, 0xB25D, 0x778A, 0xB25E,
- 0x778B, 0xB25F, 0x778C, 0xEEA7, 0x778D, 0xEEA4, 0x778E, 0xCFB9, 0x778F, 0xB260, 0x7790, 0xB261, 0x7791, 0xEEA8, 0x7792, 0xC2F7,
- 0x7793, 0xB262, 0x7794, 0xB263, 0x7795, 0xB264, 0x7796, 0xB265, 0x7797, 0xB266, 0x7798, 0xB267, 0x7799, 0xB268, 0x779A, 0xB269,
- 0x779B, 0xB26A, 0x779C, 0xB26B, 0x779D, 0xB26C, 0x779E, 0xB26D, 0x779F, 0xEEA9, 0x77A0, 0xEEAA, 0x77A1, 0xB26E, 0x77A2, 0xDEAB,
- 0x77A3, 0xB26F, 0x77A4, 0xB270, 0x77A5, 0xC6B3, 0x77A6, 0xB271, 0x77A7, 0xC7C6, 0x77A8, 0xB272, 0x77A9, 0xD6F5, 0x77AA, 0xB5C9,
- 0x77AB, 0xB273, 0x77AC, 0xCBB2, 0x77AD, 0xB274, 0x77AE, 0xB275, 0x77AF, 0xB276, 0x77B0, 0xEEAB, 0x77B1, 0xB277, 0x77B2, 0xB278,
- 0x77B3, 0xCDAB, 0x77B4, 0xB279, 0x77B5, 0xEEAC, 0x77B6, 0xB27A, 0x77B7, 0xB27B, 0x77B8, 0xB27C, 0x77B9, 0xB27D, 0x77BA, 0xB27E,
- 0x77BB, 0xD5B0, 0x77BC, 0xB280, 0x77BD, 0xEEAD, 0x77BE, 0xB281, 0x77BF, 0xF6C4, 0x77C0, 0xB282, 0x77C1, 0xB283, 0x77C2, 0xB284,
- 0x77C3, 0xB285, 0x77C4, 0xB286, 0x77C5, 0xB287, 0x77C6, 0xB288, 0x77C7, 0xB289, 0x77C8, 0xB28A, 0x77C9, 0xB28B, 0x77CA, 0xB28C,
- 0x77CB, 0xB28D, 0x77CC, 0xB28E, 0x77CD, 0xDBC7, 0x77CE, 0xB28F, 0x77CF, 0xB290, 0x77D0, 0xB291, 0x77D1, 0xB292, 0x77D2, 0xB293,
- 0x77D3, 0xB294, 0x77D4, 0xB295, 0x77D5, 0xB296, 0x77D6, 0xB297, 0x77D7, 0xB4A3, 0x77D8, 0xB298, 0x77D9, 0xB299, 0x77DA, 0xB29A,
- 0x77DB, 0xC3AC, 0x77DC, 0xF1E6, 0x77DD, 0xB29B, 0x77DE, 0xB29C, 0x77DF, 0xB29D, 0x77E0, 0xB29E, 0x77E1, 0xB29F, 0x77E2, 0xCAB8,
- 0x77E3, 0xD2D3, 0x77E4, 0xB2A0, 0x77E5, 0xD6AA, 0x77E6, 0xB340, 0x77E7, 0xEFF2, 0x77E8, 0xB341, 0x77E9, 0xBED8, 0x77EA, 0xB342,
- 0x77EB, 0xBDC3, 0x77EC, 0xEFF3, 0x77ED, 0xB6CC, 0x77EE, 0xB0AB, 0x77EF, 0xB343, 0x77F0, 0xB344, 0x77F1, 0xB345, 0x77F2, 0xB346,
- 0x77F3, 0xCAAF, 0x77F4, 0xB347, 0x77F5, 0xB348, 0x77F6, 0xEDB6, 0x77F7, 0xB349, 0x77F8, 0xEDB7, 0x77F9, 0xB34A, 0x77FA, 0xB34B,
- 0x77FB, 0xB34C, 0x77FC, 0xB34D, 0x77FD, 0xCEF9, 0x77FE, 0xB7AF, 0x77FF, 0xBFF3, 0x7800, 0xEDB8, 0x7801, 0xC2EB, 0x7802, 0xC9B0,
- 0x7803, 0xB34E, 0x7804, 0xB34F, 0x7805, 0xB350, 0x7806, 0xB351, 0x7807, 0xB352, 0x7808, 0xB353, 0x7809, 0xEDB9, 0x780A, 0xB354,
- 0x780B, 0xB355, 0x780C, 0xC6F6, 0x780D, 0xBFB3, 0x780E, 0xB356, 0x780F, 0xB357, 0x7810, 0xB358, 0x7811, 0xEDBC, 0x7812, 0xC5F8,
- 0x7813, 0xB359, 0x7814, 0xD1D0, 0x7815, 0xB35A, 0x7816, 0xD7A9, 0x7817, 0xEDBA, 0x7818, 0xEDBB, 0x7819, 0xB35B, 0x781A, 0xD1E2,
- 0x781B, 0xB35C, 0x781C, 0xEDBF, 0x781D, 0xEDC0, 0x781E, 0xB35D, 0x781F, 0xEDC4, 0x7820, 0xB35E, 0x7821, 0xB35F, 0x7822, 0xB360,
- 0x7823, 0xEDC8, 0x7824, 0xB361, 0x7825, 0xEDC6, 0x7826, 0xEDCE, 0x7827, 0xD5E8, 0x7828, 0xB362, 0x7829, 0xEDC9, 0x782A, 0xB363,
- 0x782B, 0xB364, 0x782C, 0xEDC7, 0x782D, 0xEDBE, 0x782E, 0xB365, 0x782F, 0xB366, 0x7830, 0xC5E9, 0x7831, 0xB367, 0x7832, 0xB368,
- 0x7833, 0xB369, 0x7834, 0xC6C6, 0x7835, 0xB36A, 0x7836, 0xB36B, 0x7837, 0xC9E9, 0x7838, 0xD4D2, 0x7839, 0xEDC1, 0x783A, 0xEDC2,
- 0x783B, 0xEDC3, 0x783C, 0xEDC5, 0x783D, 0xB36C, 0x783E, 0xC0F9, 0x783F, 0xB36D, 0x7840, 0xB4A1, 0x7841, 0xB36E, 0x7842, 0xB36F,
- 0x7843, 0xB370, 0x7844, 0xB371, 0x7845, 0xB9E8, 0x7846, 0xB372, 0x7847, 0xEDD0, 0x7848, 0xB373, 0x7849, 0xB374, 0x784A, 0xB375,
- 0x784B, 0xB376, 0x784C, 0xEDD1, 0x784D, 0xB377, 0x784E, 0xEDCA, 0x784F, 0xB378, 0x7850, 0xEDCF, 0x7851, 0xB379, 0x7852, 0xCEF8,
- 0x7853, 0xB37A, 0x7854, 0xB37B, 0x7855, 0xCBB6, 0x7856, 0xEDCC, 0x7857, 0xEDCD, 0x7858, 0xB37C, 0x7859, 0xB37D, 0x785A, 0xB37E,
- 0x785B, 0xB380, 0x785C, 0xB381, 0x785D, 0xCFF5, 0x785E, 0xB382, 0x785F, 0xB383, 0x7860, 0xB384, 0x7861, 0xB385, 0x7862, 0xB386,
- 0x7863, 0xB387, 0x7864, 0xB388, 0x7865, 0xB389, 0x7866, 0xB38A, 0x7867, 0xB38B, 0x7868, 0xB38C, 0x7869, 0xB38D, 0x786A, 0xEDD2,
- 0x786B, 0xC1F2, 0x786C, 0xD3B2, 0x786D, 0xEDCB, 0x786E, 0xC8B7, 0x786F, 0xB38E, 0x7870, 0xB38F, 0x7871, 0xB390, 0x7872, 0xB391,
- 0x7873, 0xB392, 0x7874, 0xB393, 0x7875, 0xB394, 0x7876, 0xB395, 0x7877, 0xBCEF, 0x7878, 0xB396, 0x7879, 0xB397, 0x787A, 0xB398,
- 0x787B, 0xB399, 0x787C, 0xC5F0, 0x787D, 0xB39A, 0x787E, 0xB39B, 0x787F, 0xB39C, 0x7880, 0xB39D, 0x7881, 0xB39E, 0x7882, 0xB39F,
- 0x7883, 0xB3A0, 0x7884, 0xB440, 0x7885, 0xB441, 0x7886, 0xB442, 0x7887, 0xEDD6, 0x7888, 0xB443, 0x7889, 0xB5EF, 0x788A, 0xB444,
- 0x788B, 0xB445, 0x788C, 0xC2B5, 0x788D, 0xB0AD, 0x788E, 0xCBE9, 0x788F, 0xB446, 0x7890, 0xB447, 0x7891, 0xB1AE, 0x7892, 0xB448,
- 0x7893, 0xEDD4, 0x7894, 0xB449, 0x7895, 0xB44A, 0x7896, 0xB44B, 0x7897, 0xCDEB, 0x7898, 0xB5E2, 0x7899, 0xB44C, 0x789A, 0xEDD5,
- 0x789B, 0xEDD3, 0x789C, 0xEDD7, 0x789D, 0xB44D, 0x789E, 0xB44E, 0x789F, 0xB5FA, 0x78A0, 0xB44F, 0x78A1, 0xEDD8, 0x78A2, 0xB450,
- 0x78A3, 0xEDD9, 0x78A4, 0xB451, 0x78A5, 0xEDDC, 0x78A6, 0xB452, 0x78A7, 0xB1CC, 0x78A8, 0xB453, 0x78A9, 0xB454, 0x78AA, 0xB455,
- 0x78AB, 0xB456, 0x78AC, 0xB457, 0x78AD, 0xB458, 0x78AE, 0xB459, 0x78AF, 0xB45A, 0x78B0, 0xC5F6, 0x78B1, 0xBCEE, 0x78B2, 0xEDDA,
- 0x78B3, 0xCCBC, 0x78B4, 0xB2EA, 0x78B5, 0xB45B, 0x78B6, 0xB45C, 0x78B7, 0xB45D, 0x78B8, 0xB45E, 0x78B9, 0xEDDB, 0x78BA, 0xB45F,
- 0x78BB, 0xB460, 0x78BC, 0xB461, 0x78BD, 0xB462, 0x78BE, 0xC4EB, 0x78BF, 0xB463, 0x78C0, 0xB464, 0x78C1, 0xB4C5, 0x78C2, 0xB465,
- 0x78C3, 0xB466, 0x78C4, 0xB467, 0x78C5, 0xB0F5, 0x78C6, 0xB468, 0x78C7, 0xB469, 0x78C8, 0xB46A, 0x78C9, 0xEDDF, 0x78CA, 0xC0DA,
- 0x78CB, 0xB4E8, 0x78CC, 0xB46B, 0x78CD, 0xB46C, 0x78CE, 0xB46D, 0x78CF, 0xB46E, 0x78D0, 0xC5CD, 0x78D1, 0xB46F, 0x78D2, 0xB470,
- 0x78D3, 0xB471, 0x78D4, 0xEDDD, 0x78D5, 0xBFC4, 0x78D6, 0xB472, 0x78D7, 0xB473, 0x78D8, 0xB474, 0x78D9, 0xEDDE, 0x78DA, 0xB475,
- 0x78DB, 0xB476, 0x78DC, 0xB477, 0x78DD, 0xB478, 0x78DE, 0xB479, 0x78DF, 0xB47A, 0x78E0, 0xB47B, 0x78E1, 0xB47C, 0x78E2, 0xB47D,
- 0x78E3, 0xB47E, 0x78E4, 0xB480, 0x78E5, 0xB481, 0x78E6, 0xB482, 0x78E7, 0xB483, 0x78E8, 0xC4A5, 0x78E9, 0xB484, 0x78EA, 0xB485,
- 0x78EB, 0xB486, 0x78EC, 0xEDE0, 0x78ED, 0xB487, 0x78EE, 0xB488, 0x78EF, 0xB489, 0x78F0, 0xB48A, 0x78F1, 0xB48B, 0x78F2, 0xEDE1,
- 0x78F3, 0xB48C, 0x78F4, 0xEDE3, 0x78F5, 0xB48D, 0x78F6, 0xB48E, 0x78F7, 0xC1D7, 0x78F8, 0xB48F, 0x78F9, 0xB490, 0x78FA, 0xBBC7,
- 0x78FB, 0xB491, 0x78FC, 0xB492, 0x78FD, 0xB493, 0x78FE, 0xB494, 0x78FF, 0xB495, 0x7900, 0xB496, 0x7901, 0xBDB8, 0x7902, 0xB497,
- 0x7903, 0xB498, 0x7904, 0xB499, 0x7905, 0xEDE2, 0x7906, 0xB49A, 0x7907, 0xB49B, 0x7908, 0xB49C, 0x7909, 0xB49D, 0x790A, 0xB49E,
- 0x790B, 0xB49F, 0x790C, 0xB4A0, 0x790D, 0xB540, 0x790E, 0xB541, 0x790F, 0xB542, 0x7910, 0xB543, 0x7911, 0xB544, 0x7912, 0xB545,
- 0x7913, 0xEDE4, 0x7914, 0xB546, 0x7915, 0xB547, 0x7916, 0xB548, 0x7917, 0xB549, 0x7918, 0xB54A, 0x7919, 0xB54B, 0x791A, 0xB54C,
- 0x791B, 0xB54D, 0x791C, 0xB54E, 0x791D, 0xB54F, 0x791E, 0xEDE6, 0x791F, 0xB550, 0x7920, 0xB551, 0x7921, 0xB552, 0x7922, 0xB553,
- 0x7923, 0xB554, 0x7924, 0xEDE5, 0x7925, 0xB555, 0x7926, 0xB556, 0x7927, 0xB557, 0x7928, 0xB558, 0x7929, 0xB559, 0x792A, 0xB55A,
- 0x792B, 0xB55B, 0x792C, 0xB55C, 0x792D, 0xB55D, 0x792E, 0xB55E, 0x792F, 0xB55F, 0x7930, 0xB560, 0x7931, 0xB561, 0x7932, 0xB562,
- 0x7933, 0xB563, 0x7934, 0xEDE7, 0x7935, 0xB564, 0x7936, 0xB565, 0x7937, 0xB566, 0x7938, 0xB567, 0x7939, 0xB568, 0x793A, 0xCABE,
- 0x793B, 0xECEA, 0x793C, 0xC0F1, 0x793D, 0xB569, 0x793E, 0xC9E7, 0x793F, 0xB56A, 0x7940, 0xECEB, 0x7941, 0xC6EE, 0x7942, 0xB56B,
- 0x7943, 0xB56C, 0x7944, 0xB56D, 0x7945, 0xB56E, 0x7946, 0xECEC, 0x7947, 0xB56F, 0x7948, 0xC6ED, 0x7949, 0xECED, 0x794A, 0xB570,
- 0x794B, 0xB571, 0x794C, 0xB572, 0x794D, 0xB573, 0x794E, 0xB574, 0x794F, 0xB575, 0x7950, 0xB576, 0x7951, 0xB577, 0x7952, 0xB578,
- 0x7953, 0xECF0, 0x7954, 0xB579, 0x7955, 0xB57A, 0x7956, 0xD7E6, 0x7957, 0xECF3, 0x7958, 0xB57B, 0x7959, 0xB57C, 0x795A, 0xECF1,
- 0x795B, 0xECEE, 0x795C, 0xECEF, 0x795D, 0xD7A3, 0x795E, 0xC9F1, 0x795F, 0xCBEE, 0x7960, 0xECF4, 0x7961, 0xB57D, 0x7962, 0xECF2,
- 0x7963, 0xB57E, 0x7964, 0xB580, 0x7965, 0xCFE9, 0x7966, 0xB581, 0x7967, 0xECF6, 0x7968, 0xC6B1, 0x7969, 0xB582, 0x796A, 0xB583,
- 0x796B, 0xB584, 0x796C, 0xB585, 0x796D, 0xBCC0, 0x796E, 0xB586, 0x796F, 0xECF5, 0x7970, 0xB587, 0x7971, 0xB588, 0x7972, 0xB589,
- 0x7973, 0xB58A, 0x7974, 0xB58B, 0x7975, 0xB58C, 0x7976, 0xB58D, 0x7977, 0xB5BB, 0x7978, 0xBBF6, 0x7979, 0xB58E, 0x797A, 0xECF7,
- 0x797B, 0xB58F, 0x797C, 0xB590, 0x797D, 0xB591, 0x797E, 0xB592, 0x797F, 0xB593, 0x7980, 0xD9F7, 0x7981, 0xBDFB, 0x7982, 0xB594,
- 0x7983, 0xB595, 0x7984, 0xC2BB, 0x7985, 0xECF8, 0x7986, 0xB596, 0x7987, 0xB597, 0x7988, 0xB598, 0x7989, 0xB599, 0x798A, 0xECF9,
- 0x798B, 0xB59A, 0x798C, 0xB59B, 0x798D, 0xB59C, 0x798E, 0xB59D, 0x798F, 0xB8A3, 0x7990, 0xB59E, 0x7991, 0xB59F, 0x7992, 0xB5A0,
- 0x7993, 0xB640, 0x7994, 0xB641, 0x7995, 0xB642, 0x7996, 0xB643, 0x7997, 0xB644, 0x7998, 0xB645, 0x7999, 0xB646, 0x799A, 0xECFA,
- 0x799B, 0xB647, 0x799C, 0xB648, 0x799D, 0xB649, 0x799E, 0xB64A, 0x799F, 0xB64B, 0x79A0, 0xB64C, 0x79A1, 0xB64D, 0x79A2, 0xB64E,
- 0x79A3, 0xB64F, 0x79A4, 0xB650, 0x79A5, 0xB651, 0x79A6, 0xB652, 0x79A7, 0xECFB, 0x79A8, 0xB653, 0x79A9, 0xB654, 0x79AA, 0xB655,
- 0x79AB, 0xB656, 0x79AC, 0xB657, 0x79AD, 0xB658, 0x79AE, 0xB659, 0x79AF, 0xB65A, 0x79B0, 0xB65B, 0x79B1, 0xB65C, 0x79B2, 0xB65D,
- 0x79B3, 0xECFC, 0x79B4, 0xB65E, 0x79B5, 0xB65F, 0x79B6, 0xB660, 0x79B7, 0xB661, 0x79B8, 0xB662, 0x79B9, 0xD3ED, 0x79BA, 0xD8AE,
- 0x79BB, 0xC0EB, 0x79BC, 0xB663, 0x79BD, 0xC7DD, 0x79BE, 0xBACC, 0x79BF, 0xB664, 0x79C0, 0xD0E3, 0x79C1, 0xCBBD, 0x79C2, 0xB665,
- 0x79C3, 0xCDBA, 0x79C4, 0xB666, 0x79C5, 0xB667, 0x79C6, 0xB8D1, 0x79C7, 0xB668, 0x79C8, 0xB669, 0x79C9, 0xB1FC, 0x79CA, 0xB66A,
- 0x79CB, 0xC7EF, 0x79CC, 0xB66B, 0x79CD, 0xD6D6, 0x79CE, 0xB66C, 0x79CF, 0xB66D, 0x79D0, 0xB66E, 0x79D1, 0xBFC6, 0x79D2, 0xC3EB,
- 0x79D3, 0xB66F, 0x79D4, 0xB670, 0x79D5, 0xEFF5, 0x79D6, 0xB671, 0x79D7, 0xB672, 0x79D8, 0xC3D8, 0x79D9, 0xB673, 0x79DA, 0xB674,
- 0x79DB, 0xB675, 0x79DC, 0xB676, 0x79DD, 0xB677, 0x79DE, 0xB678, 0x79DF, 0xD7E2, 0x79E0, 0xB679, 0x79E1, 0xB67A, 0x79E2, 0xB67B,
- 0x79E3, 0xEFF7, 0x79E4, 0xB3D3, 0x79E5, 0xB67C, 0x79E6, 0xC7D8, 0x79E7, 0xD1ED, 0x79E8, 0xB67D, 0x79E9, 0xD6C8, 0x79EA, 0xB67E,
- 0x79EB, 0xEFF8, 0x79EC, 0xB680, 0x79ED, 0xEFF6, 0x79EE, 0xB681, 0x79EF, 0xBBFD, 0x79F0, 0xB3C6, 0x79F1, 0xB682, 0x79F2, 0xB683,
- 0x79F3, 0xB684, 0x79F4, 0xB685, 0x79F5, 0xB686, 0x79F6, 0xB687, 0x79F7, 0xB688, 0x79F8, 0xBDD5, 0x79F9, 0xB689, 0x79FA, 0xB68A,
- 0x79FB, 0xD2C6, 0x79FC, 0xB68B, 0x79FD, 0xBBE0, 0x79FE, 0xB68C, 0x79FF, 0xB68D, 0x7A00, 0xCFA1, 0x7A01, 0xB68E, 0x7A02, 0xEFFC,
- 0x7A03, 0xEFFB, 0x7A04, 0xB68F, 0x7A05, 0xB690, 0x7A06, 0xEFF9, 0x7A07, 0xB691, 0x7A08, 0xB692, 0x7A09, 0xB693, 0x7A0A, 0xB694,
- 0x7A0B, 0xB3CC, 0x7A0C, 0xB695, 0x7A0D, 0xC9D4, 0x7A0E, 0xCBB0, 0x7A0F, 0xB696, 0x7A10, 0xB697, 0x7A11, 0xB698, 0x7A12, 0xB699,
- 0x7A13, 0xB69A, 0x7A14, 0xEFFE, 0x7A15, 0xB69B, 0x7A16, 0xB69C, 0x7A17, 0xB0DE, 0x7A18, 0xB69D, 0x7A19, 0xB69E, 0x7A1A, 0xD6C9,
- 0x7A1B, 0xB69F, 0x7A1C, 0xB6A0, 0x7A1D, 0xB740, 0x7A1E, 0xEFFD, 0x7A1F, 0xB741, 0x7A20, 0xB3ED, 0x7A21, 0xB742, 0x7A22, 0xB743,
- 0x7A23, 0xF6D5, 0x7A24, 0xB744, 0x7A25, 0xB745, 0x7A26, 0xB746, 0x7A27, 0xB747, 0x7A28, 0xB748, 0x7A29, 0xB749, 0x7A2A, 0xB74A,
- 0x7A2B, 0xB74B, 0x7A2C, 0xB74C, 0x7A2D, 0xB74D, 0x7A2E, 0xB74E, 0x7A2F, 0xB74F, 0x7A30, 0xB750, 0x7A31, 0xB751, 0x7A32, 0xB752,
- 0x7A33, 0xCEC8, 0x7A34, 0xB753, 0x7A35, 0xB754, 0x7A36, 0xB755, 0x7A37, 0xF0A2, 0x7A38, 0xB756, 0x7A39, 0xF0A1, 0x7A3A, 0xB757,
- 0x7A3B, 0xB5BE, 0x7A3C, 0xBCDA, 0x7A3D, 0xBBFC, 0x7A3E, 0xB758, 0x7A3F, 0xB8E5, 0x7A40, 0xB759, 0x7A41, 0xB75A, 0x7A42, 0xB75B,
- 0x7A43, 0xB75C, 0x7A44, 0xB75D, 0x7A45, 0xB75E, 0x7A46, 0xC4C2, 0x7A47, 0xB75F, 0x7A48, 0xB760, 0x7A49, 0xB761, 0x7A4A, 0xB762,
- 0x7A4B, 0xB763, 0x7A4C, 0xB764, 0x7A4D, 0xB765, 0x7A4E, 0xB766, 0x7A4F, 0xB767, 0x7A50, 0xB768, 0x7A51, 0xF0A3, 0x7A52, 0xB769,
- 0x7A53, 0xB76A, 0x7A54, 0xB76B, 0x7A55, 0xB76C, 0x7A56, 0xB76D, 0x7A57, 0xCBEB, 0x7A58, 0xB76E, 0x7A59, 0xB76F, 0x7A5A, 0xB770,
- 0x7A5B, 0xB771, 0x7A5C, 0xB772, 0x7A5D, 0xB773, 0x7A5E, 0xB774, 0x7A5F, 0xB775, 0x7A60, 0xB776, 0x7A61, 0xB777, 0x7A62, 0xB778,
- 0x7A63, 0xB779, 0x7A64, 0xB77A, 0x7A65, 0xB77B, 0x7A66, 0xB77C, 0x7A67, 0xB77D, 0x7A68, 0xB77E, 0x7A69, 0xB780, 0x7A6A, 0xB781,
- 0x7A6B, 0xB782, 0x7A6C, 0xB783, 0x7A6D, 0xB784, 0x7A6E, 0xB785, 0x7A6F, 0xB786, 0x7A70, 0xF0A6, 0x7A71, 0xB787, 0x7A72, 0xB788,
- 0x7A73, 0xB789, 0x7A74, 0xD1A8, 0x7A75, 0xB78A, 0x7A76, 0xBEBF, 0x7A77, 0xC7EE, 0x7A78, 0xF1B6, 0x7A79, 0xF1B7, 0x7A7A, 0xBFD5,
- 0x7A7B, 0xB78B, 0x7A7C, 0xB78C, 0x7A7D, 0xB78D, 0x7A7E, 0xB78E, 0x7A7F, 0xB4A9, 0x7A80, 0xF1B8, 0x7A81, 0xCDBB, 0x7A82, 0xB78F,
- 0x7A83, 0xC7D4, 0x7A84, 0xD5AD, 0x7A85, 0xB790, 0x7A86, 0xF1B9, 0x7A87, 0xB791, 0x7A88, 0xF1BA, 0x7A89, 0xB792, 0x7A8A, 0xB793,
- 0x7A8B, 0xB794, 0x7A8C, 0xB795, 0x7A8D, 0xC7CF, 0x7A8E, 0xB796, 0x7A8F, 0xB797, 0x7A90, 0xB798, 0x7A91, 0xD2A4, 0x7A92, 0xD6CF,
- 0x7A93, 0xB799, 0x7A94, 0xB79A, 0x7A95, 0xF1BB, 0x7A96, 0xBDD1, 0x7A97, 0xB4B0, 0x7A98, 0xBEBD, 0x7A99, 0xB79B, 0x7A9A, 0xB79C,
- 0x7A9B, 0xB79D, 0x7A9C, 0xB4DC, 0x7A9D, 0xCED1, 0x7A9E, 0xB79E, 0x7A9F, 0xBFDF, 0x7AA0, 0xF1BD, 0x7AA1, 0xB79F, 0x7AA2, 0xB7A0,
- 0x7AA3, 0xB840, 0x7AA4, 0xB841, 0x7AA5, 0xBFFA, 0x7AA6, 0xF1BC, 0x7AA7, 0xB842, 0x7AA8, 0xF1BF, 0x7AA9, 0xB843, 0x7AAA, 0xB844,
- 0x7AAB, 0xB845, 0x7AAC, 0xF1BE, 0x7AAD, 0xF1C0, 0x7AAE, 0xB846, 0x7AAF, 0xB847, 0x7AB0, 0xB848, 0x7AB1, 0xB849, 0x7AB2, 0xB84A,
- 0x7AB3, 0xF1C1, 0x7AB4, 0xB84B, 0x7AB5, 0xB84C, 0x7AB6, 0xB84D, 0x7AB7, 0xB84E, 0x7AB8, 0xB84F, 0x7AB9, 0xB850, 0x7ABA, 0xB851,
- 0x7ABB, 0xB852, 0x7ABC, 0xB853, 0x7ABD, 0xB854, 0x7ABE, 0xB855, 0x7ABF, 0xC1FE, 0x7AC0, 0xB856, 0x7AC1, 0xB857, 0x7AC2, 0xB858,
- 0x7AC3, 0xB859, 0x7AC4, 0xB85A, 0x7AC5, 0xB85B, 0x7AC6, 0xB85C, 0x7AC7, 0xB85D, 0x7AC8, 0xB85E, 0x7AC9, 0xB85F, 0x7ACA, 0xB860,
- 0x7ACB, 0xC1A2, 0x7ACC, 0xB861, 0x7ACD, 0xB862, 0x7ACE, 0xB863, 0x7ACF, 0xB864, 0x7AD0, 0xB865, 0x7AD1, 0xB866, 0x7AD2, 0xB867,
- 0x7AD3, 0xB868, 0x7AD4, 0xB869, 0x7AD5, 0xB86A, 0x7AD6, 0xCAFA, 0x7AD7, 0xB86B, 0x7AD8, 0xB86C, 0x7AD9, 0xD5BE, 0x7ADA, 0xB86D,
- 0x7ADB, 0xB86E, 0x7ADC, 0xB86F, 0x7ADD, 0xB870, 0x7ADE, 0xBEBA, 0x7ADF, 0xBEB9, 0x7AE0, 0xD5C2, 0x7AE1, 0xB871, 0x7AE2, 0xB872,
- 0x7AE3, 0xBFA2, 0x7AE4, 0xB873, 0x7AE5, 0xCDAF, 0x7AE6, 0xF1B5, 0x7AE7, 0xB874, 0x7AE8, 0xB875, 0x7AE9, 0xB876, 0x7AEA, 0xB877,
- 0x7AEB, 0xB878, 0x7AEC, 0xB879, 0x7AED, 0xBDDF, 0x7AEE, 0xB87A, 0x7AEF, 0xB6CB, 0x7AF0, 0xB87B, 0x7AF1, 0xB87C, 0x7AF2, 0xB87D,
- 0x7AF3, 0xB87E, 0x7AF4, 0xB880, 0x7AF5, 0xB881, 0x7AF6, 0xB882, 0x7AF7, 0xB883, 0x7AF8, 0xB884, 0x7AF9, 0xD6F1, 0x7AFA, 0xF3C3,
- 0x7AFB, 0xB885, 0x7AFC, 0xB886, 0x7AFD, 0xF3C4, 0x7AFE, 0xB887, 0x7AFF, 0xB8CD, 0x7B00, 0xB888, 0x7B01, 0xB889, 0x7B02, 0xB88A,
- 0x7B03, 0xF3C6, 0x7B04, 0xF3C7, 0x7B05, 0xB88B, 0x7B06, 0xB0CA, 0x7B07, 0xB88C, 0x7B08, 0xF3C5, 0x7B09, 0xB88D, 0x7B0A, 0xF3C9,
- 0x7B0B, 0xCBF1, 0x7B0C, 0xB88E, 0x7B0D, 0xB88F, 0x7B0E, 0xB890, 0x7B0F, 0xF3CB, 0x7B10, 0xB891, 0x7B11, 0xD0A6, 0x7B12, 0xB892,
- 0x7B13, 0xB893, 0x7B14, 0xB1CA, 0x7B15, 0xF3C8, 0x7B16, 0xB894, 0x7B17, 0xB895, 0x7B18, 0xB896, 0x7B19, 0xF3CF, 0x7B1A, 0xB897,
- 0x7B1B, 0xB5D1, 0x7B1C, 0xB898, 0x7B1D, 0xB899, 0x7B1E, 0xF3D7, 0x7B1F, 0xB89A, 0x7B20, 0xF3D2, 0x7B21, 0xB89B, 0x7B22, 0xB89C,
- 0x7B23, 0xB89D, 0x7B24, 0xF3D4, 0x7B25, 0xF3D3, 0x7B26, 0xB7FB, 0x7B27, 0xB89E, 0x7B28, 0xB1BF, 0x7B29, 0xB89F, 0x7B2A, 0xF3CE,
- 0x7B2B, 0xF3CA, 0x7B2C, 0xB5DA, 0x7B2D, 0xB8A0, 0x7B2E, 0xF3D0, 0x7B2F, 0xB940, 0x7B30, 0xB941, 0x7B31, 0xF3D1, 0x7B32, 0xB942,
- 0x7B33, 0xF3D5, 0x7B34, 0xB943, 0x7B35, 0xB944, 0x7B36, 0xB945, 0x7B37, 0xB946, 0x7B38, 0xF3CD, 0x7B39, 0xB947, 0x7B3A, 0xBCE3,
- 0x7B3B, 0xB948, 0x7B3C, 0xC1FD, 0x7B3D, 0xB949, 0x7B3E, 0xF3D6, 0x7B3F, 0xB94A, 0x7B40, 0xB94B, 0x7B41, 0xB94C, 0x7B42, 0xB94D,
- 0x7B43, 0xB94E, 0x7B44, 0xB94F, 0x7B45, 0xF3DA, 0x7B46, 0xB950, 0x7B47, 0xF3CC, 0x7B48, 0xB951, 0x7B49, 0xB5C8, 0x7B4A, 0xB952,
- 0x7B4B, 0xBDEE, 0x7B4C, 0xF3DC, 0x7B4D, 0xB953, 0x7B4E, 0xB954, 0x7B4F, 0xB7A4, 0x7B50, 0xBFF0, 0x7B51, 0xD6FE, 0x7B52, 0xCDB2,
- 0x7B53, 0xB955, 0x7B54, 0xB4F0, 0x7B55, 0xB956, 0x7B56, 0xB2DF, 0x7B57, 0xB957, 0x7B58, 0xF3D8, 0x7B59, 0xB958, 0x7B5A, 0xF3D9,
- 0x7B5B, 0xC9B8, 0x7B5C, 0xB959, 0x7B5D, 0xF3DD, 0x7B5E, 0xB95A, 0x7B5F, 0xB95B, 0x7B60, 0xF3DE, 0x7B61, 0xB95C, 0x7B62, 0xF3E1,
- 0x7B63, 0xB95D, 0x7B64, 0xB95E, 0x7B65, 0xB95F, 0x7B66, 0xB960, 0x7B67, 0xB961, 0x7B68, 0xB962, 0x7B69, 0xB963, 0x7B6A, 0xB964,
- 0x7B6B, 0xB965, 0x7B6C, 0xB966, 0x7B6D, 0xB967, 0x7B6E, 0xF3DF, 0x7B6F, 0xB968, 0x7B70, 0xB969, 0x7B71, 0xF3E3, 0x7B72, 0xF3E2,
- 0x7B73, 0xB96A, 0x7B74, 0xB96B, 0x7B75, 0xF3DB, 0x7B76, 0xB96C, 0x7B77, 0xBFEA, 0x7B78, 0xB96D, 0x7B79, 0xB3EF, 0x7B7A, 0xB96E,
- 0x7B7B, 0xF3E0, 0x7B7C, 0xB96F, 0x7B7D, 0xB970, 0x7B7E, 0xC7A9, 0x7B7F, 0xB971, 0x7B80, 0xBCF2, 0x7B81, 0xB972, 0x7B82, 0xB973,
- 0x7B83, 0xB974, 0x7B84, 0xB975, 0x7B85, 0xF3EB, 0x7B86, 0xB976, 0x7B87, 0xB977, 0x7B88, 0xB978, 0x7B89, 0xB979, 0x7B8A, 0xB97A,
- 0x7B8B, 0xB97B, 0x7B8C, 0xB97C, 0x7B8D, 0xB9BF, 0x7B8E, 0xB97D, 0x7B8F, 0xB97E, 0x7B90, 0xF3E4, 0x7B91, 0xB980, 0x7B92, 0xB981,
- 0x7B93, 0xB982, 0x7B94, 0xB2AD, 0x7B95, 0xBBFE, 0x7B96, 0xB983, 0x7B97, 0xCBE3, 0x7B98, 0xB984, 0x7B99, 0xB985, 0x7B9A, 0xB986,
- 0x7B9B, 0xB987, 0x7B9C, 0xF3ED, 0x7B9D, 0xF3E9, 0x7B9E, 0xB988, 0x7B9F, 0xB989, 0x7BA0, 0xB98A, 0x7BA1, 0xB9DC, 0x7BA2, 0xF3EE,
- 0x7BA3, 0xB98B, 0x7BA4, 0xB98C, 0x7BA5, 0xB98D, 0x7BA6, 0xF3E5, 0x7BA7, 0xF3E6, 0x7BA8, 0xF3EA, 0x7BA9, 0xC2E1, 0x7BAA, 0xF3EC,
- 0x7BAB, 0xF3EF, 0x7BAC, 0xF3E8, 0x7BAD, 0xBCFD, 0x7BAE, 0xB98E, 0x7BAF, 0xB98F, 0x7BB0, 0xB990, 0x7BB1, 0xCFE4, 0x7BB2, 0xB991,
- 0x7BB3, 0xB992, 0x7BB4, 0xF3F0, 0x7BB5, 0xB993, 0x7BB6, 0xB994, 0x7BB7, 0xB995, 0x7BB8, 0xF3E7, 0x7BB9, 0xB996, 0x7BBA, 0xB997,
- 0x7BBB, 0xB998, 0x7BBC, 0xB999, 0x7BBD, 0xB99A, 0x7BBE, 0xB99B, 0x7BBF, 0xB99C, 0x7BC0, 0xB99D, 0x7BC1, 0xF3F2, 0x7BC2, 0xB99E,
- 0x7BC3, 0xB99F, 0x7BC4, 0xB9A0, 0x7BC5, 0xBA40, 0x7BC6, 0xD7AD, 0x7BC7, 0xC6AA, 0x7BC8, 0xBA41, 0x7BC9, 0xBA42, 0x7BCA, 0xBA43,
- 0x7BCB, 0xBA44, 0x7BCC, 0xF3F3, 0x7BCD, 0xBA45, 0x7BCE, 0xBA46, 0x7BCF, 0xBA47, 0x7BD0, 0xBA48, 0x7BD1, 0xF3F1, 0x7BD2, 0xBA49,
- 0x7BD3, 0xC2A8, 0x7BD4, 0xBA4A, 0x7BD5, 0xBA4B, 0x7BD6, 0xBA4C, 0x7BD7, 0xBA4D, 0x7BD8, 0xBA4E, 0x7BD9, 0xB8DD, 0x7BDA, 0xF3F5,
- 0x7BDB, 0xBA4F, 0x7BDC, 0xBA50, 0x7BDD, 0xF3F4, 0x7BDE, 0xBA51, 0x7BDF, 0xBA52, 0x7BE0, 0xBA53, 0x7BE1, 0xB4DB, 0x7BE2, 0xBA54,
- 0x7BE3, 0xBA55, 0x7BE4, 0xBA56, 0x7BE5, 0xF3F6, 0x7BE6, 0xF3F7, 0x7BE7, 0xBA57, 0x7BE8, 0xBA58, 0x7BE9, 0xBA59, 0x7BEA, 0xF3F8,
- 0x7BEB, 0xBA5A, 0x7BEC, 0xBA5B, 0x7BED, 0xBA5C, 0x7BEE, 0xC0BA, 0x7BEF, 0xBA5D, 0x7BF0, 0xBA5E, 0x7BF1, 0xC0E9, 0x7BF2, 0xBA5F,
- 0x7BF3, 0xBA60, 0x7BF4, 0xBA61, 0x7BF5, 0xBA62, 0x7BF6, 0xBA63, 0x7BF7, 0xC5F1, 0x7BF8, 0xBA64, 0x7BF9, 0xBA65, 0x7BFA, 0xBA66,
- 0x7BFB, 0xBA67, 0x7BFC, 0xF3FB, 0x7BFD, 0xBA68, 0x7BFE, 0xF3FA, 0x7BFF, 0xBA69, 0x7C00, 0xBA6A, 0x7C01, 0xBA6B, 0x7C02, 0xBA6C,
- 0x7C03, 0xBA6D, 0x7C04, 0xBA6E, 0x7C05, 0xBA6F, 0x7C06, 0xBA70, 0x7C07, 0xB4D8, 0x7C08, 0xBA71, 0x7C09, 0xBA72, 0x7C0A, 0xBA73,
- 0x7C0B, 0xF3FE, 0x7C0C, 0xF3F9, 0x7C0D, 0xBA74, 0x7C0E, 0xBA75, 0x7C0F, 0xF3FC, 0x7C10, 0xBA76, 0x7C11, 0xBA77, 0x7C12, 0xBA78,
- 0x7C13, 0xBA79, 0x7C14, 0xBA7A, 0x7C15, 0xBA7B, 0x7C16, 0xF3FD, 0x7C17, 0xBA7C, 0x7C18, 0xBA7D, 0x7C19, 0xBA7E, 0x7C1A, 0xBA80,
- 0x7C1B, 0xBA81, 0x7C1C, 0xBA82, 0x7C1D, 0xBA83, 0x7C1E, 0xBA84, 0x7C1F, 0xF4A1, 0x7C20, 0xBA85, 0x7C21, 0xBA86, 0x7C22, 0xBA87,
- 0x7C23, 0xBA88, 0x7C24, 0xBA89, 0x7C25, 0xBA8A, 0x7C26, 0xF4A3, 0x7C27, 0xBBC9, 0x7C28, 0xBA8B, 0x7C29, 0xBA8C, 0x7C2A, 0xF4A2,
- 0x7C2B, 0xBA8D, 0x7C2C, 0xBA8E, 0x7C2D, 0xBA8F, 0x7C2E, 0xBA90, 0x7C2F, 0xBA91, 0x7C30, 0xBA92, 0x7C31, 0xBA93, 0x7C32, 0xBA94,
- 0x7C33, 0xBA95, 0x7C34, 0xBA96, 0x7C35, 0xBA97, 0x7C36, 0xBA98, 0x7C37, 0xBA99, 0x7C38, 0xF4A4, 0x7C39, 0xBA9A, 0x7C3A, 0xBA9B,
- 0x7C3B, 0xBA9C, 0x7C3C, 0xBA9D, 0x7C3D, 0xBA9E, 0x7C3E, 0xBA9F, 0x7C3F, 0xB2BE, 0x7C40, 0xF4A6, 0x7C41, 0xF4A5, 0x7C42, 0xBAA0,
- 0x7C43, 0xBB40, 0x7C44, 0xBB41, 0x7C45, 0xBB42, 0x7C46, 0xBB43, 0x7C47, 0xBB44, 0x7C48, 0xBB45, 0x7C49, 0xBB46, 0x7C4A, 0xBB47,
- 0x7C4B, 0xBB48, 0x7C4C, 0xBB49, 0x7C4D, 0xBCAE, 0x7C4E, 0xBB4A, 0x7C4F, 0xBB4B, 0x7C50, 0xBB4C, 0x7C51, 0xBB4D, 0x7C52, 0xBB4E,
- 0x7C53, 0xBB4F, 0x7C54, 0xBB50, 0x7C55, 0xBB51, 0x7C56, 0xBB52, 0x7C57, 0xBB53, 0x7C58, 0xBB54, 0x7C59, 0xBB55, 0x7C5A, 0xBB56,
- 0x7C5B, 0xBB57, 0x7C5C, 0xBB58, 0x7C5D, 0xBB59, 0x7C5E, 0xBB5A, 0x7C5F, 0xBB5B, 0x7C60, 0xBB5C, 0x7C61, 0xBB5D, 0x7C62, 0xBB5E,
- 0x7C63, 0xBB5F, 0x7C64, 0xBB60, 0x7C65, 0xBB61, 0x7C66, 0xBB62, 0x7C67, 0xBB63, 0x7C68, 0xBB64, 0x7C69, 0xBB65, 0x7C6A, 0xBB66,
- 0x7C6B, 0xBB67, 0x7C6C, 0xBB68, 0x7C6D, 0xBB69, 0x7C6E, 0xBB6A, 0x7C6F, 0xBB6B, 0x7C70, 0xBB6C, 0x7C71, 0xBB6D, 0x7C72, 0xBB6E,
- 0x7C73, 0xC3D7, 0x7C74, 0xD9E1, 0x7C75, 0xBB6F, 0x7C76, 0xBB70, 0x7C77, 0xBB71, 0x7C78, 0xBB72, 0x7C79, 0xBB73, 0x7C7A, 0xBB74,
- 0x7C7B, 0xC0E0, 0x7C7C, 0xF4CC, 0x7C7D, 0xD7D1, 0x7C7E, 0xBB75, 0x7C7F, 0xBB76, 0x7C80, 0xBB77, 0x7C81, 0xBB78, 0x7C82, 0xBB79,
- 0x7C83, 0xBB7A, 0x7C84, 0xBB7B, 0x7C85, 0xBB7C, 0x7C86, 0xBB7D, 0x7C87, 0xBB7E, 0x7C88, 0xBB80, 0x7C89, 0xB7DB, 0x7C8A, 0xBB81,
- 0x7C8B, 0xBB82, 0x7C8C, 0xBB83, 0x7C8D, 0xBB84, 0x7C8E, 0xBB85, 0x7C8F, 0xBB86, 0x7C90, 0xBB87, 0x7C91, 0xF4CE, 0x7C92, 0xC1A3,
- 0x7C93, 0xBB88, 0x7C94, 0xBB89, 0x7C95, 0xC6C9, 0x7C96, 0xBB8A, 0x7C97, 0xB4D6, 0x7C98, 0xD5B3, 0x7C99, 0xBB8B, 0x7C9A, 0xBB8C,
- 0x7C9B, 0xBB8D, 0x7C9C, 0xF4D0, 0x7C9D, 0xF4CF, 0x7C9E, 0xF4D1, 0x7C9F, 0xCBDA, 0x7CA0, 0xBB8E, 0x7CA1, 0xBB8F, 0x7CA2, 0xF4D2,
- 0x7CA3, 0xBB90, 0x7CA4, 0xD4C1, 0x7CA5, 0xD6E0, 0x7CA6, 0xBB91, 0x7CA7, 0xBB92, 0x7CA8, 0xBB93, 0x7CA9, 0xBB94, 0x7CAA, 0xB7E0,
- 0x7CAB, 0xBB95, 0x7CAC, 0xBB96, 0x7CAD, 0xBB97, 0x7CAE, 0xC1B8, 0x7CAF, 0xBB98, 0x7CB0, 0xBB99, 0x7CB1, 0xC1BB, 0x7CB2, 0xF4D3,
- 0x7CB3, 0xBEAC, 0x7CB4, 0xBB9A, 0x7CB5, 0xBB9B, 0x7CB6, 0xBB9C, 0x7CB7, 0xBB9D, 0x7CB8, 0xBB9E, 0x7CB9, 0xB4E2, 0x7CBA, 0xBB9F,
- 0x7CBB, 0xBBA0, 0x7CBC, 0xF4D4, 0x7CBD, 0xF4D5, 0x7CBE, 0xBEAB, 0x7CBF, 0xBC40, 0x7CC0, 0xBC41, 0x7CC1, 0xF4D6, 0x7CC2, 0xBC42,
- 0x7CC3, 0xBC43, 0x7CC4, 0xBC44, 0x7CC5, 0xF4DB, 0x7CC6, 0xBC45, 0x7CC7, 0xF4D7, 0x7CC8, 0xF4DA, 0x7CC9, 0xBC46, 0x7CCA, 0xBAFD,
- 0x7CCB, 0xBC47, 0x7CCC, 0xF4D8, 0x7CCD, 0xF4D9, 0x7CCE, 0xBC48, 0x7CCF, 0xBC49, 0x7CD0, 0xBC4A, 0x7CD1, 0xBC4B, 0x7CD2, 0xBC4C,
- 0x7CD3, 0xBC4D, 0x7CD4, 0xBC4E, 0x7CD5, 0xB8E2, 0x7CD6, 0xCCC7, 0x7CD7, 0xF4DC, 0x7CD8, 0xBC4F, 0x7CD9, 0xB2DA, 0x7CDA, 0xBC50,
- 0x7CDB, 0xBC51, 0x7CDC, 0xC3D3, 0x7CDD, 0xBC52, 0x7CDE, 0xBC53, 0x7CDF, 0xD4E3, 0x7CE0, 0xBFB7, 0x7CE1, 0xBC54, 0x7CE2, 0xBC55,
- 0x7CE3, 0xBC56, 0x7CE4, 0xBC57, 0x7CE5, 0xBC58, 0x7CE6, 0xBC59, 0x7CE7, 0xBC5A, 0x7CE8, 0xF4DD, 0x7CE9, 0xBC5B, 0x7CEA, 0xBC5C,
- 0x7CEB, 0xBC5D, 0x7CEC, 0xBC5E, 0x7CED, 0xBC5F, 0x7CEE, 0xBC60, 0x7CEF, 0xC5B4, 0x7CF0, 0xBC61, 0x7CF1, 0xBC62, 0x7CF2, 0xBC63,
- 0x7CF3, 0xBC64, 0x7CF4, 0xBC65, 0x7CF5, 0xBC66, 0x7CF6, 0xBC67, 0x7CF7, 0xBC68, 0x7CF8, 0xF4E9, 0x7CF9, 0xBC69, 0x7CFA, 0xBC6A,
- 0x7CFB, 0xCFB5, 0x7CFC, 0xBC6B, 0x7CFD, 0xBC6C, 0x7CFE, 0xBC6D, 0x7CFF, 0xBC6E, 0x7D00, 0xBC6F, 0x7D01, 0xBC70, 0x7D02, 0xBC71,
- 0x7D03, 0xBC72, 0x7D04, 0xBC73, 0x7D05, 0xBC74, 0x7D06, 0xBC75, 0x7D07, 0xBC76, 0x7D08, 0xBC77, 0x7D09, 0xBC78, 0x7D0A, 0xCEC9,
- 0x7D0B, 0xBC79, 0x7D0C, 0xBC7A, 0x7D0D, 0xBC7B, 0x7D0E, 0xBC7C, 0x7D0F, 0xBC7D, 0x7D10, 0xBC7E, 0x7D11, 0xBC80, 0x7D12, 0xBC81,
- 0x7D13, 0xBC82, 0x7D14, 0xBC83, 0x7D15, 0xBC84, 0x7D16, 0xBC85, 0x7D17, 0xBC86, 0x7D18, 0xBC87, 0x7D19, 0xBC88, 0x7D1A, 0xBC89,
- 0x7D1B, 0xBC8A, 0x7D1C, 0xBC8B, 0x7D1D, 0xBC8C, 0x7D1E, 0xBC8D, 0x7D1F, 0xBC8E, 0x7D20, 0xCBD8, 0x7D21, 0xBC8F, 0x7D22, 0xCBF7,
- 0x7D23, 0xBC90, 0x7D24, 0xBC91, 0x7D25, 0xBC92, 0x7D26, 0xBC93, 0x7D27, 0xBDF4, 0x7D28, 0xBC94, 0x7D29, 0xBC95, 0x7D2A, 0xBC96,
- 0x7D2B, 0xD7CF, 0x7D2C, 0xBC97, 0x7D2D, 0xBC98, 0x7D2E, 0xBC99, 0x7D2F, 0xC0DB, 0x7D30, 0xBC9A, 0x7D31, 0xBC9B, 0x7D32, 0xBC9C,
- 0x7D33, 0xBC9D, 0x7D34, 0xBC9E, 0x7D35, 0xBC9F, 0x7D36, 0xBCA0, 0x7D37, 0xBD40, 0x7D38, 0xBD41, 0x7D39, 0xBD42, 0x7D3A, 0xBD43,
- 0x7D3B, 0xBD44, 0x7D3C, 0xBD45, 0x7D3D, 0xBD46, 0x7D3E, 0xBD47, 0x7D3F, 0xBD48, 0x7D40, 0xBD49, 0x7D41, 0xBD4A, 0x7D42, 0xBD4B,
- 0x7D43, 0xBD4C, 0x7D44, 0xBD4D, 0x7D45, 0xBD4E, 0x7D46, 0xBD4F, 0x7D47, 0xBD50, 0x7D48, 0xBD51, 0x7D49, 0xBD52, 0x7D4A, 0xBD53,
- 0x7D4B, 0xBD54, 0x7D4C, 0xBD55, 0x7D4D, 0xBD56, 0x7D4E, 0xBD57, 0x7D4F, 0xBD58, 0x7D50, 0xBD59, 0x7D51, 0xBD5A, 0x7D52, 0xBD5B,
- 0x7D53, 0xBD5C, 0x7D54, 0xBD5D, 0x7D55, 0xBD5E, 0x7D56, 0xBD5F, 0x7D57, 0xBD60, 0x7D58, 0xBD61, 0x7D59, 0xBD62, 0x7D5A, 0xBD63,
- 0x7D5B, 0xBD64, 0x7D5C, 0xBD65, 0x7D5D, 0xBD66, 0x7D5E, 0xBD67, 0x7D5F, 0xBD68, 0x7D60, 0xBD69, 0x7D61, 0xBD6A, 0x7D62, 0xBD6B,
- 0x7D63, 0xBD6C, 0x7D64, 0xBD6D, 0x7D65, 0xBD6E, 0x7D66, 0xBD6F, 0x7D67, 0xBD70, 0x7D68, 0xBD71, 0x7D69, 0xBD72, 0x7D6A, 0xBD73,
- 0x7D6B, 0xBD74, 0x7D6C, 0xBD75, 0x7D6D, 0xBD76, 0x7D6E, 0xD0F5, 0x7D6F, 0xBD77, 0x7D70, 0xBD78, 0x7D71, 0xBD79, 0x7D72, 0xBD7A,
- 0x7D73, 0xBD7B, 0x7D74, 0xBD7C, 0x7D75, 0xBD7D, 0x7D76, 0xBD7E, 0x7D77, 0xF4EA, 0x7D78, 0xBD80, 0x7D79, 0xBD81, 0x7D7A, 0xBD82,
- 0x7D7B, 0xBD83, 0x7D7C, 0xBD84, 0x7D7D, 0xBD85, 0x7D7E, 0xBD86, 0x7D7F, 0xBD87, 0x7D80, 0xBD88, 0x7D81, 0xBD89, 0x7D82, 0xBD8A,
- 0x7D83, 0xBD8B, 0x7D84, 0xBD8C, 0x7D85, 0xBD8D, 0x7D86, 0xBD8E, 0x7D87, 0xBD8F, 0x7D88, 0xBD90, 0x7D89, 0xBD91, 0x7D8A, 0xBD92,
- 0x7D8B, 0xBD93, 0x7D8C, 0xBD94, 0x7D8D, 0xBD95, 0x7D8E, 0xBD96, 0x7D8F, 0xBD97, 0x7D90, 0xBD98, 0x7D91, 0xBD99, 0x7D92, 0xBD9A,
- 0x7D93, 0xBD9B, 0x7D94, 0xBD9C, 0x7D95, 0xBD9D, 0x7D96, 0xBD9E, 0x7D97, 0xBD9F, 0x7D98, 0xBDA0, 0x7D99, 0xBE40, 0x7D9A, 0xBE41,
- 0x7D9B, 0xBE42, 0x7D9C, 0xBE43, 0x7D9D, 0xBE44, 0x7D9E, 0xBE45, 0x7D9F, 0xBE46, 0x7DA0, 0xBE47, 0x7DA1, 0xBE48, 0x7DA2, 0xBE49,
- 0x7DA3, 0xBE4A, 0x7DA4, 0xBE4B, 0x7DA5, 0xBE4C, 0x7DA6, 0xF4EB, 0x7DA7, 0xBE4D, 0x7DA8, 0xBE4E, 0x7DA9, 0xBE4F, 0x7DAA, 0xBE50,
- 0x7DAB, 0xBE51, 0x7DAC, 0xBE52, 0x7DAD, 0xBE53, 0x7DAE, 0xF4EC, 0x7DAF, 0xBE54, 0x7DB0, 0xBE55, 0x7DB1, 0xBE56, 0x7DB2, 0xBE57,
- 0x7DB3, 0xBE58, 0x7DB4, 0xBE59, 0x7DB5, 0xBE5A, 0x7DB6, 0xBE5B, 0x7DB7, 0xBE5C, 0x7DB8, 0xBE5D, 0x7DB9, 0xBE5E, 0x7DBA, 0xBE5F,
- 0x7DBB, 0xBE60, 0x7DBC, 0xBE61, 0x7DBD, 0xBE62, 0x7DBE, 0xBE63, 0x7DBF, 0xBE64, 0x7DC0, 0xBE65, 0x7DC1, 0xBE66, 0x7DC2, 0xBE67,
- 0x7DC3, 0xBE68, 0x7DC4, 0xBE69, 0x7DC5, 0xBE6A, 0x7DC6, 0xBE6B, 0x7DC7, 0xBE6C, 0x7DC8, 0xBE6D, 0x7DC9, 0xBE6E, 0x7DCA, 0xBE6F,
- 0x7DCB, 0xBE70, 0x7DCC, 0xBE71, 0x7DCD, 0xBE72, 0x7DCE, 0xBE73, 0x7DCF, 0xBE74, 0x7DD0, 0xBE75, 0x7DD1, 0xBE76, 0x7DD2, 0xBE77,
- 0x7DD3, 0xBE78, 0x7DD4, 0xBE79, 0x7DD5, 0xBE7A, 0x7DD6, 0xBE7B, 0x7DD7, 0xBE7C, 0x7DD8, 0xBE7D, 0x7DD9, 0xBE7E, 0x7DDA, 0xBE80,
- 0x7DDB, 0xBE81, 0x7DDC, 0xBE82, 0x7DDD, 0xBE83, 0x7DDE, 0xBE84, 0x7DDF, 0xBE85, 0x7DE0, 0xBE86, 0x7DE1, 0xBE87, 0x7DE2, 0xBE88,
- 0x7DE3, 0xBE89, 0x7DE4, 0xBE8A, 0x7DE5, 0xBE8B, 0x7DE6, 0xBE8C, 0x7DE7, 0xBE8D, 0x7DE8, 0xBE8E, 0x7DE9, 0xBE8F, 0x7DEA, 0xBE90,
- 0x7DEB, 0xBE91, 0x7DEC, 0xBE92, 0x7DED, 0xBE93, 0x7DEE, 0xBE94, 0x7DEF, 0xBE95, 0x7DF0, 0xBE96, 0x7DF1, 0xBE97, 0x7DF2, 0xBE98,
- 0x7DF3, 0xBE99, 0x7DF4, 0xBE9A, 0x7DF5, 0xBE9B, 0x7DF6, 0xBE9C, 0x7DF7, 0xBE9D, 0x7DF8, 0xBE9E, 0x7DF9, 0xBE9F, 0x7DFA, 0xBEA0,
- 0x7DFB, 0xBF40, 0x7DFC, 0xBF41, 0x7DFD, 0xBF42, 0x7DFE, 0xBF43, 0x7DFF, 0xBF44, 0x7E00, 0xBF45, 0x7E01, 0xBF46, 0x7E02, 0xBF47,
- 0x7E03, 0xBF48, 0x7E04, 0xBF49, 0x7E05, 0xBF4A, 0x7E06, 0xBF4B, 0x7E07, 0xBF4C, 0x7E08, 0xBF4D, 0x7E09, 0xBF4E, 0x7E0A, 0xBF4F,
- 0x7E0B, 0xBF50, 0x7E0C, 0xBF51, 0x7E0D, 0xBF52, 0x7E0E, 0xBF53, 0x7E0F, 0xBF54, 0x7E10, 0xBF55, 0x7E11, 0xBF56, 0x7E12, 0xBF57,
- 0x7E13, 0xBF58, 0x7E14, 0xBF59, 0x7E15, 0xBF5A, 0x7E16, 0xBF5B, 0x7E17, 0xBF5C, 0x7E18, 0xBF5D, 0x7E19, 0xBF5E, 0x7E1A, 0xBF5F,
- 0x7E1B, 0xBF60, 0x7E1C, 0xBF61, 0x7E1D, 0xBF62, 0x7E1E, 0xBF63, 0x7E1F, 0xBF64, 0x7E20, 0xBF65, 0x7E21, 0xBF66, 0x7E22, 0xBF67,
- 0x7E23, 0xBF68, 0x7E24, 0xBF69, 0x7E25, 0xBF6A, 0x7E26, 0xBF6B, 0x7E27, 0xBF6C, 0x7E28, 0xBF6D, 0x7E29, 0xBF6E, 0x7E2A, 0xBF6F,
- 0x7E2B, 0xBF70, 0x7E2C, 0xBF71, 0x7E2D, 0xBF72, 0x7E2E, 0xBF73, 0x7E2F, 0xBF74, 0x7E30, 0xBF75, 0x7E31, 0xBF76, 0x7E32, 0xBF77,
- 0x7E33, 0xBF78, 0x7E34, 0xBF79, 0x7E35, 0xBF7A, 0x7E36, 0xBF7B, 0x7E37, 0xBF7C, 0x7E38, 0xBF7D, 0x7E39, 0xBF7E, 0x7E3A, 0xBF80,
- 0x7E3B, 0xF7E3, 0x7E3C, 0xBF81, 0x7E3D, 0xBF82, 0x7E3E, 0xBF83, 0x7E3F, 0xBF84, 0x7E40, 0xBF85, 0x7E41, 0xB7B1, 0x7E42, 0xBF86,
- 0x7E43, 0xBF87, 0x7E44, 0xBF88, 0x7E45, 0xBF89, 0x7E46, 0xBF8A, 0x7E47, 0xF4ED, 0x7E48, 0xBF8B, 0x7E49, 0xBF8C, 0x7E4A, 0xBF8D,
- 0x7E4B, 0xBF8E, 0x7E4C, 0xBF8F, 0x7E4D, 0xBF90, 0x7E4E, 0xBF91, 0x7E4F, 0xBF92, 0x7E50, 0xBF93, 0x7E51, 0xBF94, 0x7E52, 0xBF95,
- 0x7E53, 0xBF96, 0x7E54, 0xBF97, 0x7E55, 0xBF98, 0x7E56, 0xBF99, 0x7E57, 0xBF9A, 0x7E58, 0xBF9B, 0x7E59, 0xBF9C, 0x7E5A, 0xBF9D,
- 0x7E5B, 0xBF9E, 0x7E5C, 0xBF9F, 0x7E5D, 0xBFA0, 0x7E5E, 0xC040, 0x7E5F, 0xC041, 0x7E60, 0xC042, 0x7E61, 0xC043, 0x7E62, 0xC044,
- 0x7E63, 0xC045, 0x7E64, 0xC046, 0x7E65, 0xC047, 0x7E66, 0xC048, 0x7E67, 0xC049, 0x7E68, 0xC04A, 0x7E69, 0xC04B, 0x7E6A, 0xC04C,
- 0x7E6B, 0xC04D, 0x7E6C, 0xC04E, 0x7E6D, 0xC04F, 0x7E6E, 0xC050, 0x7E6F, 0xC051, 0x7E70, 0xC052, 0x7E71, 0xC053, 0x7E72, 0xC054,
- 0x7E73, 0xC055, 0x7E74, 0xC056, 0x7E75, 0xC057, 0x7E76, 0xC058, 0x7E77, 0xC059, 0x7E78, 0xC05A, 0x7E79, 0xC05B, 0x7E7A, 0xC05C,
- 0x7E7B, 0xC05D, 0x7E7C, 0xC05E, 0x7E7D, 0xC05F, 0x7E7E, 0xC060, 0x7E7F, 0xC061, 0x7E80, 0xC062, 0x7E81, 0xC063, 0x7E82, 0xD7EB,
- 0x7E83, 0xC064, 0x7E84, 0xC065, 0x7E85, 0xC066, 0x7E86, 0xC067, 0x7E87, 0xC068, 0x7E88, 0xC069, 0x7E89, 0xC06A, 0x7E8A, 0xC06B,
- 0x7E8B, 0xC06C, 0x7E8C, 0xC06D, 0x7E8D, 0xC06E, 0x7E8E, 0xC06F, 0x7E8F, 0xC070, 0x7E90, 0xC071, 0x7E91, 0xC072, 0x7E92, 0xC073,
- 0x7E93, 0xC074, 0x7E94, 0xC075, 0x7E95, 0xC076, 0x7E96, 0xC077, 0x7E97, 0xC078, 0x7E98, 0xC079, 0x7E99, 0xC07A, 0x7E9A, 0xC07B,
- 0x7E9B, 0xF4EE, 0x7E9C, 0xC07C, 0x7E9D, 0xC07D, 0x7E9E, 0xC07E, 0x7E9F, 0xE6F9, 0x7EA0, 0xBEC0, 0x7EA1, 0xE6FA, 0x7EA2, 0xBAEC,
- 0x7EA3, 0xE6FB, 0x7EA4, 0xCFCB, 0x7EA5, 0xE6FC, 0x7EA6, 0xD4BC, 0x7EA7, 0xBCB6, 0x7EA8, 0xE6FD, 0x7EA9, 0xE6FE, 0x7EAA, 0xBCCD,
- 0x7EAB, 0xC8D2, 0x7EAC, 0xCEB3, 0x7EAD, 0xE7A1, 0x7EAE, 0xC080, 0x7EAF, 0xB4BF, 0x7EB0, 0xE7A2, 0x7EB1, 0xC9B4, 0x7EB2, 0xB8D9,
- 0x7EB3, 0xC4C9, 0x7EB4, 0xC081, 0x7EB5, 0xD7DD, 0x7EB6, 0xC2DA, 0x7EB7, 0xB7D7, 0x7EB8, 0xD6BD, 0x7EB9, 0xCEC6, 0x7EBA, 0xB7C4,
- 0x7EBB, 0xC082, 0x7EBC, 0xC083, 0x7EBD, 0xC5A6, 0x7EBE, 0xE7A3, 0x7EBF, 0xCFDF, 0x7EC0, 0xE7A4, 0x7EC1, 0xE7A5, 0x7EC2, 0xE7A6,
- 0x7EC3, 0xC1B7, 0x7EC4, 0xD7E9, 0x7EC5, 0xC9F0, 0x7EC6, 0xCFB8, 0x7EC7, 0xD6AF, 0x7EC8, 0xD6D5, 0x7EC9, 0xE7A7, 0x7ECA, 0xB0ED,
- 0x7ECB, 0xE7A8, 0x7ECC, 0xE7A9, 0x7ECD, 0xC9DC, 0x7ECE, 0xD2EF, 0x7ECF, 0xBEAD, 0x7ED0, 0xE7AA, 0x7ED1, 0xB0F3, 0x7ED2, 0xC8DE,
- 0x7ED3, 0xBDE1, 0x7ED4, 0xE7AB, 0x7ED5, 0xC8C6, 0x7ED6, 0xC084, 0x7ED7, 0xE7AC, 0x7ED8, 0xBBE6, 0x7ED9, 0xB8F8, 0x7EDA, 0xD1A4,
- 0x7EDB, 0xE7AD, 0x7EDC, 0xC2E7, 0x7EDD, 0xBEF8, 0x7EDE, 0xBDCA, 0x7EDF, 0xCDB3, 0x7EE0, 0xE7AE, 0x7EE1, 0xE7AF, 0x7EE2, 0xBEEE,
- 0x7EE3, 0xD0E5, 0x7EE4, 0xC085, 0x7EE5, 0xCBE7, 0x7EE6, 0xCCD0, 0x7EE7, 0xBCCC, 0x7EE8, 0xE7B0, 0x7EE9, 0xBCA8, 0x7EEA, 0xD0F7,
- 0x7EEB, 0xE7B1, 0x7EEC, 0xC086, 0x7EED, 0xD0F8, 0x7EEE, 0xE7B2, 0x7EEF, 0xE7B3, 0x7EF0, 0xB4C2, 0x7EF1, 0xE7B4, 0x7EF2, 0xE7B5,
- 0x7EF3, 0xC9FE, 0x7EF4, 0xCEAC, 0x7EF5, 0xC3E0, 0x7EF6, 0xE7B7, 0x7EF7, 0xB1C1, 0x7EF8, 0xB3F1, 0x7EF9, 0xC087, 0x7EFA, 0xE7B8,
- 0x7EFB, 0xE7B9, 0x7EFC, 0xD7DB, 0x7EFD, 0xD5C0, 0x7EFE, 0xE7BA, 0x7EFF, 0xC2CC, 0x7F00, 0xD7BA, 0x7F01, 0xE7BB, 0x7F02, 0xE7BC,
- 0x7F03, 0xE7BD, 0x7F04, 0xBCEA, 0x7F05, 0xC3E5, 0x7F06, 0xC0C2, 0x7F07, 0xE7BE, 0x7F08, 0xE7BF, 0x7F09, 0xBCA9, 0x7F0A, 0xC088,
- 0x7F0B, 0xE7C0, 0x7F0C, 0xE7C1, 0x7F0D, 0xE7B6, 0x7F0E, 0xB6D0, 0x7F0F, 0xE7C2, 0x7F10, 0xC089, 0x7F11, 0xE7C3, 0x7F12, 0xE7C4,
- 0x7F13, 0xBBBA, 0x7F14, 0xB5DE, 0x7F15, 0xC2C6, 0x7F16, 0xB1E0, 0x7F17, 0xE7C5, 0x7F18, 0xD4B5, 0x7F19, 0xE7C6, 0x7F1A, 0xB8BF,
- 0x7F1B, 0xE7C8, 0x7F1C, 0xE7C7, 0x7F1D, 0xB7EC, 0x7F1E, 0xC08A, 0x7F1F, 0xE7C9, 0x7F20, 0xB2F8, 0x7F21, 0xE7CA, 0x7F22, 0xE7CB,
- 0x7F23, 0xE7CC, 0x7F24, 0xE7CD, 0x7F25, 0xE7CE, 0x7F26, 0xE7CF, 0x7F27, 0xE7D0, 0x7F28, 0xD3A7, 0x7F29, 0xCBF5, 0x7F2A, 0xE7D1,
- 0x7F2B, 0xE7D2, 0x7F2C, 0xE7D3, 0x7F2D, 0xE7D4, 0x7F2E, 0xC9C9, 0x7F2F, 0xE7D5, 0x7F30, 0xE7D6, 0x7F31, 0xE7D7, 0x7F32, 0xE7D8,
- 0x7F33, 0xE7D9, 0x7F34, 0xBDC9, 0x7F35, 0xE7DA, 0x7F36, 0xF3BE, 0x7F37, 0xC08B, 0x7F38, 0xB8D7, 0x7F39, 0xC08C, 0x7F3A, 0xC8B1,
- 0x7F3B, 0xC08D, 0x7F3C, 0xC08E, 0x7F3D, 0xC08F, 0x7F3E, 0xC090, 0x7F3F, 0xC091, 0x7F40, 0xC092, 0x7F41, 0xC093, 0x7F42, 0xF3BF,
- 0x7F43, 0xC094, 0x7F44, 0xF3C0, 0x7F45, 0xF3C1, 0x7F46, 0xC095, 0x7F47, 0xC096, 0x7F48, 0xC097, 0x7F49, 0xC098, 0x7F4A, 0xC099,
- 0x7F4B, 0xC09A, 0x7F4C, 0xC09B, 0x7F4D, 0xC09C, 0x7F4E, 0xC09D, 0x7F4F, 0xC09E, 0x7F50, 0xB9DE, 0x7F51, 0xCDF8, 0x7F52, 0xC09F,
- 0x7F53, 0xC0A0, 0x7F54, 0xD8E8, 0x7F55, 0xBAB1, 0x7F56, 0xC140, 0x7F57, 0xC2DE, 0x7F58, 0xEEB7, 0x7F59, 0xC141, 0x7F5A, 0xB7A3,
- 0x7F5B, 0xC142, 0x7F5C, 0xC143, 0x7F5D, 0xC144, 0x7F5E, 0xC145, 0x7F5F, 0xEEB9, 0x7F60, 0xC146, 0x7F61, 0xEEB8, 0x7F62, 0xB0D5,
- 0x7F63, 0xC147, 0x7F64, 0xC148, 0x7F65, 0xC149, 0x7F66, 0xC14A, 0x7F67, 0xC14B, 0x7F68, 0xEEBB, 0x7F69, 0xD5D6, 0x7F6A, 0xD7EF,
- 0x7F6B, 0xC14C, 0x7F6C, 0xC14D, 0x7F6D, 0xC14E, 0x7F6E, 0xD6C3, 0x7F6F, 0xC14F, 0x7F70, 0xC150, 0x7F71, 0xEEBD, 0x7F72, 0xCAF0,
- 0x7F73, 0xC151, 0x7F74, 0xEEBC, 0x7F75, 0xC152, 0x7F76, 0xC153, 0x7F77, 0xC154, 0x7F78, 0xC155, 0x7F79, 0xEEBE, 0x7F7A, 0xC156,
- 0x7F7B, 0xC157, 0x7F7C, 0xC158, 0x7F7D, 0xC159, 0x7F7E, 0xEEC0, 0x7F7F, 0xC15A, 0x7F80, 0xC15B, 0x7F81, 0xEEBF, 0x7F82, 0xC15C,
- 0x7F83, 0xC15D, 0x7F84, 0xC15E, 0x7F85, 0xC15F, 0x7F86, 0xC160, 0x7F87, 0xC161, 0x7F88, 0xC162, 0x7F89, 0xC163, 0x7F8A, 0xD1F2,
- 0x7F8B, 0xC164, 0x7F8C, 0xC7BC, 0x7F8D, 0xC165, 0x7F8E, 0xC3C0, 0x7F8F, 0xC166, 0x7F90, 0xC167, 0x7F91, 0xC168, 0x7F92, 0xC169,
- 0x7F93, 0xC16A, 0x7F94, 0xB8E1, 0x7F95, 0xC16B, 0x7F96, 0xC16C, 0x7F97, 0xC16D, 0x7F98, 0xC16E, 0x7F99, 0xC16F, 0x7F9A, 0xC1E7,
- 0x7F9B, 0xC170, 0x7F9C, 0xC171, 0x7F9D, 0xF4C6, 0x7F9E, 0xD0DF, 0x7F9F, 0xF4C7, 0x7FA0, 0xC172, 0x7FA1, 0xCFDB, 0x7FA2, 0xC173,
- 0x7FA3, 0xC174, 0x7FA4, 0xC8BA, 0x7FA5, 0xC175, 0x7FA6, 0xC176, 0x7FA7, 0xF4C8, 0x7FA8, 0xC177, 0x7FA9, 0xC178, 0x7FAA, 0xC179,
- 0x7FAB, 0xC17A, 0x7FAC, 0xC17B, 0x7FAD, 0xC17C, 0x7FAE, 0xC17D, 0x7FAF, 0xF4C9, 0x7FB0, 0xF4CA, 0x7FB1, 0xC17E, 0x7FB2, 0xF4CB,
- 0x7FB3, 0xC180, 0x7FB4, 0xC181, 0x7FB5, 0xC182, 0x7FB6, 0xC183, 0x7FB7, 0xC184, 0x7FB8, 0xD9FA, 0x7FB9, 0xB8FE, 0x7FBA, 0xC185,
- 0x7FBB, 0xC186, 0x7FBC, 0xE5F1, 0x7FBD, 0xD3F0, 0x7FBE, 0xC187, 0x7FBF, 0xF4E0, 0x7FC0, 0xC188, 0x7FC1, 0xCECC, 0x7FC2, 0xC189,
- 0x7FC3, 0xC18A, 0x7FC4, 0xC18B, 0x7FC5, 0xB3E1, 0x7FC6, 0xC18C, 0x7FC7, 0xC18D, 0x7FC8, 0xC18E, 0x7FC9, 0xC18F, 0x7FCA, 0xF1B4,
- 0x7FCB, 0xC190, 0x7FCC, 0xD2EE, 0x7FCD, 0xC191, 0x7FCE, 0xF4E1, 0x7FCF, 0xC192, 0x7FD0, 0xC193, 0x7FD1, 0xC194, 0x7FD2, 0xC195,
- 0x7FD3, 0xC196, 0x7FD4, 0xCFE8, 0x7FD5, 0xF4E2, 0x7FD6, 0xC197, 0x7FD7, 0xC198, 0x7FD8, 0xC7CC, 0x7FD9, 0xC199, 0x7FDA, 0xC19A,
- 0x7FDB, 0xC19B, 0x7FDC, 0xC19C, 0x7FDD, 0xC19D, 0x7FDE, 0xC19E, 0x7FDF, 0xB5D4, 0x7FE0, 0xB4E4, 0x7FE1, 0xF4E4, 0x7FE2, 0xC19F,
- 0x7FE3, 0xC1A0, 0x7FE4, 0xC240, 0x7FE5, 0xF4E3, 0x7FE6, 0xF4E5, 0x7FE7, 0xC241, 0x7FE8, 0xC242, 0x7FE9, 0xF4E6, 0x7FEA, 0xC243,
- 0x7FEB, 0xC244, 0x7FEC, 0xC245, 0x7FED, 0xC246, 0x7FEE, 0xF4E7, 0x7FEF, 0xC247, 0x7FF0, 0xBAB2, 0x7FF1, 0xB0BF, 0x7FF2, 0xC248,
- 0x7FF3, 0xF4E8, 0x7FF4, 0xC249, 0x7FF5, 0xC24A, 0x7FF6, 0xC24B, 0x7FF7, 0xC24C, 0x7FF8, 0xC24D, 0x7FF9, 0xC24E, 0x7FFA, 0xC24F,
- 0x7FFB, 0xB7AD, 0x7FFC, 0xD2ED, 0x7FFD, 0xC250, 0x7FFE, 0xC251, 0x7FFF, 0xC252, 0x8000, 0xD2AB, 0x8001, 0xC0CF, 0x8002, 0xC253,
- 0x8003, 0xBFBC, 0x8004, 0xEBA3, 0x8005, 0xD5DF, 0x8006, 0xEAC8, 0x8007, 0xC254, 0x8008, 0xC255, 0x8009, 0xC256, 0x800A, 0xC257,
- 0x800B, 0xF1F3, 0x800C, 0xB6F8, 0x800D, 0xCBA3, 0x800E, 0xC258, 0x800F, 0xC259, 0x8010, 0xC4CD, 0x8011, 0xC25A, 0x8012, 0xF1E7,
- 0x8013, 0xC25B, 0x8014, 0xF1E8, 0x8015, 0xB8FB, 0x8016, 0xF1E9, 0x8017, 0xBAC4, 0x8018, 0xD4C5, 0x8019, 0xB0D2, 0x801A, 0xC25C,
- 0x801B, 0xC25D, 0x801C, 0xF1EA, 0x801D, 0xC25E, 0x801E, 0xC25F, 0x801F, 0xC260, 0x8020, 0xF1EB, 0x8021, 0xC261, 0x8022, 0xF1EC,
- 0x8023, 0xC262, 0x8024, 0xC263, 0x8025, 0xF1ED, 0x8026, 0xF1EE, 0x8027, 0xF1EF, 0x8028, 0xF1F1, 0x8029, 0xF1F0, 0x802A, 0xC5D5,
- 0x802B, 0xC264, 0x802C, 0xC265, 0x802D, 0xC266, 0x802E, 0xC267, 0x802F, 0xC268, 0x8030, 0xC269, 0x8031, 0xF1F2, 0x8032, 0xC26A,
- 0x8033, 0xB6FA, 0x8034, 0xC26B, 0x8035, 0xF1F4, 0x8036, 0xD2AE, 0x8037, 0xDEC7, 0x8038, 0xCBCA, 0x8039, 0xC26C, 0x803A, 0xC26D,
- 0x803B, 0xB3DC, 0x803C, 0xC26E, 0x803D, 0xB5A2, 0x803E, 0xC26F, 0x803F, 0xB9A2, 0x8040, 0xC270, 0x8041, 0xC271, 0x8042, 0xC4F4,
- 0x8043, 0xF1F5, 0x8044, 0xC272, 0x8045, 0xC273, 0x8046, 0xF1F6, 0x8047, 0xC274, 0x8048, 0xC275, 0x8049, 0xC276, 0x804A, 0xC1C4,
- 0x804B, 0xC1FB, 0x804C, 0xD6B0, 0x804D, 0xF1F7, 0x804E, 0xC277, 0x804F, 0xC278, 0x8050, 0xC279, 0x8051, 0xC27A, 0x8052, 0xF1F8,
- 0x8053, 0xC27B, 0x8054, 0xC1AA, 0x8055, 0xC27C, 0x8056, 0xC27D, 0x8057, 0xC27E, 0x8058, 0xC6B8, 0x8059, 0xC280, 0x805A, 0xBEDB,
- 0x805B, 0xC281, 0x805C, 0xC282, 0x805D, 0xC283, 0x805E, 0xC284, 0x805F, 0xC285, 0x8060, 0xC286, 0x8061, 0xC287, 0x8062, 0xC288,
- 0x8063, 0xC289, 0x8064, 0xC28A, 0x8065, 0xC28B, 0x8066, 0xC28C, 0x8067, 0xC28D, 0x8068, 0xC28E, 0x8069, 0xF1F9, 0x806A, 0xB4CF,
- 0x806B, 0xC28F, 0x806C, 0xC290, 0x806D, 0xC291, 0x806E, 0xC292, 0x806F, 0xC293, 0x8070, 0xC294, 0x8071, 0xF1FA, 0x8072, 0xC295,
- 0x8073, 0xC296, 0x8074, 0xC297, 0x8075, 0xC298, 0x8076, 0xC299, 0x8077, 0xC29A, 0x8078, 0xC29B, 0x8079, 0xC29C, 0x807A, 0xC29D,
- 0x807B, 0xC29E, 0x807C, 0xC29F, 0x807D, 0xC2A0, 0x807E, 0xC340, 0x807F, 0xEDB2, 0x8080, 0xEDB1, 0x8081, 0xC341, 0x8082, 0xC342,
- 0x8083, 0xCBE0, 0x8084, 0xD2DE, 0x8085, 0xC343, 0x8086, 0xCBC1, 0x8087, 0xD5D8, 0x8088, 0xC344, 0x8089, 0xC8E2, 0x808A, 0xC345,
- 0x808B, 0xC0DF, 0x808C, 0xBCA1, 0x808D, 0xC346, 0x808E, 0xC347, 0x808F, 0xC348, 0x8090, 0xC349, 0x8091, 0xC34A, 0x8092, 0xC34B,
- 0x8093, 0xEBC1, 0x8094, 0xC34C, 0x8095, 0xC34D, 0x8096, 0xD0A4, 0x8097, 0xC34E, 0x8098, 0xD6E2, 0x8099, 0xC34F, 0x809A, 0xB6C7,
- 0x809B, 0xB8D8, 0x809C, 0xEBC0, 0x809D, 0xB8CE, 0x809E, 0xC350, 0x809F, 0xEBBF, 0x80A0, 0xB3A6, 0x80A1, 0xB9C9, 0x80A2, 0xD6AB,
- 0x80A3, 0xC351, 0x80A4, 0xB7F4, 0x80A5, 0xB7CA, 0x80A6, 0xC352, 0x80A7, 0xC353, 0x80A8, 0xC354, 0x80A9, 0xBCE7, 0x80AA, 0xB7BE,
- 0x80AB, 0xEBC6, 0x80AC, 0xC355, 0x80AD, 0xEBC7, 0x80AE, 0xB0B9, 0x80AF, 0xBFCF, 0x80B0, 0xC356, 0x80B1, 0xEBC5, 0x80B2, 0xD3FD,
- 0x80B3, 0xC357, 0x80B4, 0xEBC8, 0x80B5, 0xC358, 0x80B6, 0xC359, 0x80B7, 0xEBC9, 0x80B8, 0xC35A, 0x80B9, 0xC35B, 0x80BA, 0xB7CE,
- 0x80BB, 0xC35C, 0x80BC, 0xEBC2, 0x80BD, 0xEBC4, 0x80BE, 0xC9F6, 0x80BF, 0xD6D7, 0x80C0, 0xD5CD, 0x80C1, 0xD0B2, 0x80C2, 0xEBCF,
- 0x80C3, 0xCEB8, 0x80C4, 0xEBD0, 0x80C5, 0xC35D, 0x80C6, 0xB5A8, 0x80C7, 0xC35E, 0x80C8, 0xC35F, 0x80C9, 0xC360, 0x80CA, 0xC361,
- 0x80CB, 0xC362, 0x80CC, 0xB1B3, 0x80CD, 0xEBD2, 0x80CE, 0xCCA5, 0x80CF, 0xC363, 0x80D0, 0xC364, 0x80D1, 0xC365, 0x80D2, 0xC366,
- 0x80D3, 0xC367, 0x80D4, 0xC368, 0x80D5, 0xC369, 0x80D6, 0xC5D6, 0x80D7, 0xEBD3, 0x80D8, 0xC36A, 0x80D9, 0xEBD1, 0x80DA, 0xC5DF,
- 0x80DB, 0xEBCE, 0x80DC, 0xCAA4, 0x80DD, 0xEBD5, 0x80DE, 0xB0FB, 0x80DF, 0xC36B, 0x80E0, 0xC36C, 0x80E1, 0xBAFA, 0x80E2, 0xC36D,
- 0x80E3, 0xC36E, 0x80E4, 0xD8B7, 0x80E5, 0xF1E3, 0x80E6, 0xC36F, 0x80E7, 0xEBCA, 0x80E8, 0xEBCB, 0x80E9, 0xEBCC, 0x80EA, 0xEBCD,
- 0x80EB, 0xEBD6, 0x80EC, 0xE6C0, 0x80ED, 0xEBD9, 0x80EE, 0xC370, 0x80EF, 0xBFE8, 0x80F0, 0xD2C8, 0x80F1, 0xEBD7, 0x80F2, 0xEBDC,
- 0x80F3, 0xB8EC, 0x80F4, 0xEBD8, 0x80F5, 0xC371, 0x80F6, 0xBDBA, 0x80F7, 0xC372, 0x80F8, 0xD0D8, 0x80F9, 0xC373, 0x80FA, 0xB0B7,
- 0x80FB, 0xC374, 0x80FC, 0xEBDD, 0x80FD, 0xC4DC, 0x80FE, 0xC375, 0x80FF, 0xC376, 0x8100, 0xC377, 0x8101, 0xC378, 0x8102, 0xD6AC,
- 0x8103, 0xC379, 0x8104, 0xC37A, 0x8105, 0xC37B, 0x8106, 0xB4E0, 0x8107, 0xC37C, 0x8108, 0xC37D, 0x8109, 0xC2F6, 0x810A, 0xBCB9,
- 0x810B, 0xC37E, 0x810C, 0xC380, 0x810D, 0xEBDA, 0x810E, 0xEBDB, 0x810F, 0xD4E0, 0x8110, 0xC6EA, 0x8111, 0xC4D4, 0x8112, 0xEBDF,
- 0x8113, 0xC5A7, 0x8114, 0xD9F5, 0x8115, 0xC381, 0x8116, 0xB2B1, 0x8117, 0xC382, 0x8118, 0xEBE4, 0x8119, 0xC383, 0x811A, 0xBDC5,
- 0x811B, 0xC384, 0x811C, 0xC385, 0x811D, 0xC386, 0x811E, 0xEBE2, 0x811F, 0xC387, 0x8120, 0xC388, 0x8121, 0xC389, 0x8122, 0xC38A,
- 0x8123, 0xC38B, 0x8124, 0xC38C, 0x8125, 0xC38D, 0x8126, 0xC38E, 0x8127, 0xC38F, 0x8128, 0xC390, 0x8129, 0xC391, 0x812A, 0xC392,
- 0x812B, 0xC393, 0x812C, 0xEBE3, 0x812D, 0xC394, 0x812E, 0xC395, 0x812F, 0xB8AC, 0x8130, 0xC396, 0x8131, 0xCDD1, 0x8132, 0xEBE5,
- 0x8133, 0xC397, 0x8134, 0xC398, 0x8135, 0xC399, 0x8136, 0xEBE1, 0x8137, 0xC39A, 0x8138, 0xC1B3, 0x8139, 0xC39B, 0x813A, 0xC39C,
- 0x813B, 0xC39D, 0x813C, 0xC39E, 0x813D, 0xC39F, 0x813E, 0xC6A2, 0x813F, 0xC3A0, 0x8140, 0xC440, 0x8141, 0xC441, 0x8142, 0xC442,
- 0x8143, 0xC443, 0x8144, 0xC444, 0x8145, 0xC445, 0x8146, 0xCCF3, 0x8147, 0xC446, 0x8148, 0xEBE6, 0x8149, 0xC447, 0x814A, 0xC0B0,
- 0x814B, 0xD2B8, 0x814C, 0xEBE7, 0x814D, 0xC448, 0x814E, 0xC449, 0x814F, 0xC44A, 0x8150, 0xB8AF, 0x8151, 0xB8AD, 0x8152, 0xC44B,
- 0x8153, 0xEBE8, 0x8154, 0xC7BB, 0x8155, 0xCDF3, 0x8156, 0xC44C, 0x8157, 0xC44D, 0x8158, 0xC44E, 0x8159, 0xEBEA, 0x815A, 0xEBEB,
- 0x815B, 0xC44F, 0x815C, 0xC450, 0x815D, 0xC451, 0x815E, 0xC452, 0x815F, 0xC453, 0x8160, 0xEBED, 0x8161, 0xC454, 0x8162, 0xC455,
- 0x8163, 0xC456, 0x8164, 0xC457, 0x8165, 0xD0C8, 0x8166, 0xC458, 0x8167, 0xEBF2, 0x8168, 0xC459, 0x8169, 0xEBEE, 0x816A, 0xC45A,
- 0x816B, 0xC45B, 0x816C, 0xC45C, 0x816D, 0xEBF1, 0x816E, 0xC8F9, 0x816F, 0xC45D, 0x8170, 0xD1FC, 0x8171, 0xEBEC, 0x8172, 0xC45E,
- 0x8173, 0xC45F, 0x8174, 0xEBE9, 0x8175, 0xC460, 0x8176, 0xC461, 0x8177, 0xC462, 0x8178, 0xC463, 0x8179, 0xB8B9, 0x817A, 0xCFD9,
- 0x817B, 0xC4E5, 0x817C, 0xEBEF, 0x817D, 0xEBF0, 0x817E, 0xCCDA, 0x817F, 0xCDC8, 0x8180, 0xB0F2, 0x8181, 0xC464, 0x8182, 0xEBF6,
- 0x8183, 0xC465, 0x8184, 0xC466, 0x8185, 0xC467, 0x8186, 0xC468, 0x8187, 0xC469, 0x8188, 0xEBF5, 0x8189, 0xC46A, 0x818A, 0xB2B2,
- 0x818B, 0xC46B, 0x818C, 0xC46C, 0x818D, 0xC46D, 0x818E, 0xC46E, 0x818F, 0xB8E0, 0x8190, 0xC46F, 0x8191, 0xEBF7, 0x8192, 0xC470,
- 0x8193, 0xC471, 0x8194, 0xC472, 0x8195, 0xC473, 0x8196, 0xC474, 0x8197, 0xC475, 0x8198, 0xB1EC, 0x8199, 0xC476, 0x819A, 0xC477,
- 0x819B, 0xCCC5, 0x819C, 0xC4A4, 0x819D, 0xCFA5, 0x819E, 0xC478, 0x819F, 0xC479, 0x81A0, 0xC47A, 0x81A1, 0xC47B, 0x81A2, 0xC47C,
- 0x81A3, 0xEBF9, 0x81A4, 0xC47D, 0x81A5, 0xC47E, 0x81A6, 0xECA2, 0x81A7, 0xC480, 0x81A8, 0xC5F2, 0x81A9, 0xC481, 0x81AA, 0xEBFA,
- 0x81AB, 0xC482, 0x81AC, 0xC483, 0x81AD, 0xC484, 0x81AE, 0xC485, 0x81AF, 0xC486, 0x81B0, 0xC487, 0x81B1, 0xC488, 0x81B2, 0xC489,
- 0x81B3, 0xC9C5, 0x81B4, 0xC48A, 0x81B5, 0xC48B, 0x81B6, 0xC48C, 0x81B7, 0xC48D, 0x81B8, 0xC48E, 0x81B9, 0xC48F, 0x81BA, 0xE2DF,
- 0x81BB, 0xEBFE, 0x81BC, 0xC490, 0x81BD, 0xC491, 0x81BE, 0xC492, 0x81BF, 0xC493, 0x81C0, 0xCDCE, 0x81C1, 0xECA1, 0x81C2, 0xB1DB,
- 0x81C3, 0xD3B7, 0x81C4, 0xC494, 0x81C5, 0xC495, 0x81C6, 0xD2DC, 0x81C7, 0xC496, 0x81C8, 0xC497, 0x81C9, 0xC498, 0x81CA, 0xEBFD,
- 0x81CB, 0xC499, 0x81CC, 0xEBFB, 0x81CD, 0xC49A, 0x81CE, 0xC49B, 0x81CF, 0xC49C, 0x81D0, 0xC49D, 0x81D1, 0xC49E, 0x81D2, 0xC49F,
- 0x81D3, 0xC4A0, 0x81D4, 0xC540, 0x81D5, 0xC541, 0x81D6, 0xC542, 0x81D7, 0xC543, 0x81D8, 0xC544, 0x81D9, 0xC545, 0x81DA, 0xC546,
- 0x81DB, 0xC547, 0x81DC, 0xC548, 0x81DD, 0xC549, 0x81DE, 0xC54A, 0x81DF, 0xC54B, 0x81E0, 0xC54C, 0x81E1, 0xC54D, 0x81E2, 0xC54E,
- 0x81E3, 0xB3BC, 0x81E4, 0xC54F, 0x81E5, 0xC550, 0x81E6, 0xC551, 0x81E7, 0xEAB0, 0x81E8, 0xC552, 0x81E9, 0xC553, 0x81EA, 0xD7D4,
- 0x81EB, 0xC554, 0x81EC, 0xF4AB, 0x81ED, 0xB3F4, 0x81EE, 0xC555, 0x81EF, 0xC556, 0x81F0, 0xC557, 0x81F1, 0xC558, 0x81F2, 0xC559,
- 0x81F3, 0xD6C1, 0x81F4, 0xD6C2, 0x81F5, 0xC55A, 0x81F6, 0xC55B, 0x81F7, 0xC55C, 0x81F8, 0xC55D, 0x81F9, 0xC55E, 0x81FA, 0xC55F,
- 0x81FB, 0xD5E9, 0x81FC, 0xBECA, 0x81FD, 0xC560, 0x81FE, 0xF4A7, 0x81FF, 0xC561, 0x8200, 0xD2A8, 0x8201, 0xF4A8, 0x8202, 0xF4A9,
- 0x8203, 0xC562, 0x8204, 0xF4AA, 0x8205, 0xBECB, 0x8206, 0xD3DF, 0x8207, 0xC563, 0x8208, 0xC564, 0x8209, 0xC565, 0x820A, 0xC566,
- 0x820B, 0xC567, 0x820C, 0xC9E0, 0x820D, 0xC9E1, 0x820E, 0xC568, 0x820F, 0xC569, 0x8210, 0xF3C2, 0x8211, 0xC56A, 0x8212, 0xCAE6,
- 0x8213, 0xC56B, 0x8214, 0xCCF2, 0x8215, 0xC56C, 0x8216, 0xC56D, 0x8217, 0xC56E, 0x8218, 0xC56F, 0x8219, 0xC570, 0x821A, 0xC571,
- 0x821B, 0xE2B6, 0x821C, 0xCBB4, 0x821D, 0xC572, 0x821E, 0xCEE8, 0x821F, 0xD6DB, 0x8220, 0xC573, 0x8221, 0xF4AD, 0x8222, 0xF4AE,
- 0x8223, 0xF4AF, 0x8224, 0xC574, 0x8225, 0xC575, 0x8226, 0xC576, 0x8227, 0xC577, 0x8228, 0xF4B2, 0x8229, 0xC578, 0x822A, 0xBABD,
- 0x822B, 0xF4B3, 0x822C, 0xB0E3, 0x822D, 0xF4B0, 0x822E, 0xC579, 0x822F, 0xF4B1, 0x8230, 0xBDA2, 0x8231, 0xB2D5, 0x8232, 0xC57A,
- 0x8233, 0xF4B6, 0x8234, 0xF4B7, 0x8235, 0xB6E6, 0x8236, 0xB2B0, 0x8237, 0xCFCF, 0x8238, 0xF4B4, 0x8239, 0xB4AC, 0x823A, 0xC57B,
- 0x823B, 0xF4B5, 0x823C, 0xC57C, 0x823D, 0xC57D, 0x823E, 0xF4B8, 0x823F, 0xC57E, 0x8240, 0xC580, 0x8241, 0xC581, 0x8242, 0xC582,
- 0x8243, 0xC583, 0x8244, 0xF4B9, 0x8245, 0xC584, 0x8246, 0xC585, 0x8247, 0xCDA7, 0x8248, 0xC586, 0x8249, 0xF4BA, 0x824A, 0xC587,
- 0x824B, 0xF4BB, 0x824C, 0xC588, 0x824D, 0xC589, 0x824E, 0xC58A, 0x824F, 0xF4BC, 0x8250, 0xC58B, 0x8251, 0xC58C, 0x8252, 0xC58D,
- 0x8253, 0xC58E, 0x8254, 0xC58F, 0x8255, 0xC590, 0x8256, 0xC591, 0x8257, 0xC592, 0x8258, 0xCBD2, 0x8259, 0xC593, 0x825A, 0xF4BD,
- 0x825B, 0xC594, 0x825C, 0xC595, 0x825D, 0xC596, 0x825E, 0xC597, 0x825F, 0xF4BE, 0x8260, 0xC598, 0x8261, 0xC599, 0x8262, 0xC59A,
- 0x8263, 0xC59B, 0x8264, 0xC59C, 0x8265, 0xC59D, 0x8266, 0xC59E, 0x8267, 0xC59F, 0x8268, 0xF4BF, 0x8269, 0xC5A0, 0x826A, 0xC640,
- 0x826B, 0xC641, 0x826C, 0xC642, 0x826D, 0xC643, 0x826E, 0xF4DE, 0x826F, 0xC1BC, 0x8270, 0xBCE8, 0x8271, 0xC644, 0x8272, 0xC9AB,
- 0x8273, 0xD1DE, 0x8274, 0xE5F5, 0x8275, 0xC645, 0x8276, 0xC646, 0x8277, 0xC647, 0x8278, 0xC648, 0x8279, 0xDCB3, 0x827A, 0xD2D5,
- 0x827B, 0xC649, 0x827C, 0xC64A, 0x827D, 0xDCB4, 0x827E, 0xB0AC, 0x827F, 0xDCB5, 0x8280, 0xC64B, 0x8281, 0xC64C, 0x8282, 0xBDDA,
- 0x8283, 0xC64D, 0x8284, 0xDCB9, 0x8285, 0xC64E, 0x8286, 0xC64F, 0x8287, 0xC650, 0x8288, 0xD8C2, 0x8289, 0xC651, 0x828A, 0xDCB7,
- 0x828B, 0xD3F3, 0x828C, 0xC652, 0x828D, 0xC9D6, 0x828E, 0xDCBA, 0x828F, 0xDCB6, 0x8290, 0xC653, 0x8291, 0xDCBB, 0x8292, 0xC3A2,
- 0x8293, 0xC654, 0x8294, 0xC655, 0x8295, 0xC656, 0x8296, 0xC657, 0x8297, 0xDCBC, 0x8298, 0xDCC5, 0x8299, 0xDCBD, 0x829A, 0xC658,
- 0x829B, 0xC659, 0x829C, 0xCEDF, 0x829D, 0xD6A5, 0x829E, 0xC65A, 0x829F, 0xDCCF, 0x82A0, 0xC65B, 0x82A1, 0xDCCD, 0x82A2, 0xC65C,
- 0x82A3, 0xC65D, 0x82A4, 0xDCD2, 0x82A5, 0xBDE6, 0x82A6, 0xC2AB, 0x82A7, 0xC65E, 0x82A8, 0xDCB8, 0x82A9, 0xDCCB, 0x82AA, 0xDCCE,
- 0x82AB, 0xDCBE, 0x82AC, 0xB7D2, 0x82AD, 0xB0C5, 0x82AE, 0xDCC7, 0x82AF, 0xD0BE, 0x82B0, 0xDCC1, 0x82B1, 0xBBA8, 0x82B2, 0xC65F,
- 0x82B3, 0xB7BC, 0x82B4, 0xDCCC, 0x82B5, 0xC660, 0x82B6, 0xC661, 0x82B7, 0xDCC6, 0x82B8, 0xDCBF, 0x82B9, 0xC7DB, 0x82BA, 0xC662,
- 0x82BB, 0xC663, 0x82BC, 0xC664, 0x82BD, 0xD1BF, 0x82BE, 0xDCC0, 0x82BF, 0xC665, 0x82C0, 0xC666, 0x82C1, 0xDCCA, 0x82C2, 0xC667,
- 0x82C3, 0xC668, 0x82C4, 0xDCD0, 0x82C5, 0xC669, 0x82C6, 0xC66A, 0x82C7, 0xCEAD, 0x82C8, 0xDCC2, 0x82C9, 0xC66B, 0x82CA, 0xDCC3,
- 0x82CB, 0xDCC8, 0x82CC, 0xDCC9, 0x82CD, 0xB2D4, 0x82CE, 0xDCD1, 0x82CF, 0xCBD5, 0x82D0, 0xC66C, 0x82D1, 0xD4B7, 0x82D2, 0xDCDB,
- 0x82D3, 0xDCDF, 0x82D4, 0xCCA6, 0x82D5, 0xDCE6, 0x82D6, 0xC66D, 0x82D7, 0xC3E7, 0x82D8, 0xDCDC, 0x82D9, 0xC66E, 0x82DA, 0xC66F,
- 0x82DB, 0xBFC1, 0x82DC, 0xDCD9, 0x82DD, 0xC670, 0x82DE, 0xB0FA, 0x82DF, 0xB9B6, 0x82E0, 0xDCE5, 0x82E1, 0xDCD3, 0x82E2, 0xC671,
- 0x82E3, 0xDCC4, 0x82E4, 0xDCD6, 0x82E5, 0xC8F4, 0x82E6, 0xBFE0, 0x82E7, 0xC672, 0x82E8, 0xC673, 0x82E9, 0xC674, 0x82EA, 0xC675,
- 0x82EB, 0xC9BB, 0x82EC, 0xC676, 0x82ED, 0xC677, 0x82EE, 0xC678, 0x82EF, 0xB1BD, 0x82F0, 0xC679, 0x82F1, 0xD3A2, 0x82F2, 0xC67A,
- 0x82F3, 0xC67B, 0x82F4, 0xDCDA, 0x82F5, 0xC67C, 0x82F6, 0xC67D, 0x82F7, 0xDCD5, 0x82F8, 0xC67E, 0x82F9, 0xC6BB, 0x82FA, 0xC680,
- 0x82FB, 0xDCDE, 0x82FC, 0xC681, 0x82FD, 0xC682, 0x82FE, 0xC683, 0x82FF, 0xC684, 0x8300, 0xC685, 0x8301, 0xD7C2, 0x8302, 0xC3AF,
- 0x8303, 0xB7B6, 0x8304, 0xC7D1, 0x8305, 0xC3A9, 0x8306, 0xDCE2, 0x8307, 0xDCD8, 0x8308, 0xDCEB, 0x8309, 0xDCD4, 0x830A, 0xC686,
- 0x830B, 0xC687, 0x830C, 0xDCDD, 0x830D, 0xC688, 0x830E, 0xBEA5, 0x830F, 0xDCD7, 0x8310, 0xC689, 0x8311, 0xDCE0, 0x8312, 0xC68A,
- 0x8313, 0xC68B, 0x8314, 0xDCE3, 0x8315, 0xDCE4, 0x8316, 0xC68C, 0x8317, 0xDCF8, 0x8318, 0xC68D, 0x8319, 0xC68E, 0x831A, 0xDCE1,
- 0x831B, 0xDDA2, 0x831C, 0xDCE7, 0x831D, 0xC68F, 0x831E, 0xC690, 0x831F, 0xC691, 0x8320, 0xC692, 0x8321, 0xC693, 0x8322, 0xC694,
- 0x8323, 0xC695, 0x8324, 0xC696, 0x8325, 0xC697, 0x8326, 0xC698, 0x8327, 0xBCEB, 0x8328, 0xB4C4, 0x8329, 0xC699, 0x832A, 0xC69A,
- 0x832B, 0xC3A3, 0x832C, 0xB2E7, 0x832D, 0xDCFA, 0x832E, 0xC69B, 0x832F, 0xDCF2, 0x8330, 0xC69C, 0x8331, 0xDCEF, 0x8332, 0xC69D,
- 0x8333, 0xDCFC, 0x8334, 0xDCEE, 0x8335, 0xD2F0, 0x8336, 0xB2E8, 0x8337, 0xC69E, 0x8338, 0xC8D7, 0x8339, 0xC8E3, 0x833A, 0xDCFB,
- 0x833B, 0xC69F, 0x833C, 0xDCED, 0x833D, 0xC6A0, 0x833E, 0xC740, 0x833F, 0xC741, 0x8340, 0xDCF7, 0x8341, 0xC742, 0x8342, 0xC743,
- 0x8343, 0xDCF5, 0x8344, 0xC744, 0x8345, 0xC745, 0x8346, 0xBEA3, 0x8347, 0xDCF4, 0x8348, 0xC746, 0x8349, 0xB2DD, 0x834A, 0xC747,
- 0x834B, 0xC748, 0x834C, 0xC749, 0x834D, 0xC74A, 0x834E, 0xC74B, 0x834F, 0xDCF3, 0x8350, 0xBCF6, 0x8351, 0xDCE8, 0x8352, 0xBBC4,
- 0x8353, 0xC74C, 0x8354, 0xC0F3, 0x8355, 0xC74D, 0x8356, 0xC74E, 0x8357, 0xC74F, 0x8358, 0xC750, 0x8359, 0xC751, 0x835A, 0xBCD4,
- 0x835B, 0xDCE9, 0x835C, 0xDCEA, 0x835D, 0xC752, 0x835E, 0xDCF1, 0x835F, 0xDCF6, 0x8360, 0xDCF9, 0x8361, 0xB5B4, 0x8362, 0xC753,
- 0x8363, 0xC8D9, 0x8364, 0xBBE7, 0x8365, 0xDCFE, 0x8366, 0xDCFD, 0x8367, 0xD3AB, 0x8368, 0xDDA1, 0x8369, 0xDDA3, 0x836A, 0xDDA5,
- 0x836B, 0xD2F1, 0x836C, 0xDDA4, 0x836D, 0xDDA6, 0x836E, 0xDDA7, 0x836F, 0xD2A9, 0x8370, 0xC754, 0x8371, 0xC755, 0x8372, 0xC756,
- 0x8373, 0xC757, 0x8374, 0xC758, 0x8375, 0xC759, 0x8376, 0xC75A, 0x8377, 0xBAC9, 0x8378, 0xDDA9, 0x8379, 0xC75B, 0x837A, 0xC75C,
- 0x837B, 0xDDB6, 0x837C, 0xDDB1, 0x837D, 0xDDB4, 0x837E, 0xC75D, 0x837F, 0xC75E, 0x8380, 0xC75F, 0x8381, 0xC760, 0x8382, 0xC761,
- 0x8383, 0xC762, 0x8384, 0xC763, 0x8385, 0xDDB0, 0x8386, 0xC6CE, 0x8387, 0xC764, 0x8388, 0xC765, 0x8389, 0xC0F2, 0x838A, 0xC766,
- 0x838B, 0xC767, 0x838C, 0xC768, 0x838D, 0xC769, 0x838E, 0xC9AF, 0x838F, 0xC76A, 0x8390, 0xC76B, 0x8391, 0xC76C, 0x8392, 0xDCEC,
- 0x8393, 0xDDAE, 0x8394, 0xC76D, 0x8395, 0xC76E, 0x8396, 0xC76F, 0x8397, 0xC770, 0x8398, 0xDDB7, 0x8399, 0xC771, 0x839A, 0xC772,
- 0x839B, 0xDCF0, 0x839C, 0xDDAF, 0x839D, 0xC773, 0x839E, 0xDDB8, 0x839F, 0xC774, 0x83A0, 0xDDAC, 0x83A1, 0xC775, 0x83A2, 0xC776,
- 0x83A3, 0xC777, 0x83A4, 0xC778, 0x83A5, 0xC779, 0x83A6, 0xC77A, 0x83A7, 0xC77B, 0x83A8, 0xDDB9, 0x83A9, 0xDDB3, 0x83AA, 0xDDAD,
- 0x83AB, 0xC4AA, 0x83AC, 0xC77C, 0x83AD, 0xC77D, 0x83AE, 0xC77E, 0x83AF, 0xC780, 0x83B0, 0xDDA8, 0x83B1, 0xC0B3, 0x83B2, 0xC1AB,
- 0x83B3, 0xDDAA, 0x83B4, 0xDDAB, 0x83B5, 0xC781, 0x83B6, 0xDDB2, 0x83B7, 0xBBF1, 0x83B8, 0xDDB5, 0x83B9, 0xD3A8, 0x83BA, 0xDDBA,
- 0x83BB, 0xC782, 0x83BC, 0xDDBB, 0x83BD, 0xC3A7, 0x83BE, 0xC783, 0x83BF, 0xC784, 0x83C0, 0xDDD2, 0x83C1, 0xDDBC, 0x83C2, 0xC785,
- 0x83C3, 0xC786, 0x83C4, 0xC787, 0x83C5, 0xDDD1, 0x83C6, 0xC788, 0x83C7, 0xB9BD, 0x83C8, 0xC789, 0x83C9, 0xC78A, 0x83CA, 0xBED5,
- 0x83CB, 0xC78B, 0x83CC, 0xBEFA, 0x83CD, 0xC78C, 0x83CE, 0xC78D, 0x83CF, 0xBACA, 0x83D0, 0xC78E, 0x83D1, 0xC78F, 0x83D2, 0xC790,
- 0x83D3, 0xC791, 0x83D4, 0xDDCA, 0x83D5, 0xC792, 0x83D6, 0xDDC5, 0x83D7, 0xC793, 0x83D8, 0xDDBF, 0x83D9, 0xC794, 0x83DA, 0xC795,
- 0x83DB, 0xC796, 0x83DC, 0xB2CB, 0x83DD, 0xDDC3, 0x83DE, 0xC797, 0x83DF, 0xDDCB, 0x83E0, 0xB2A4, 0x83E1, 0xDDD5, 0x83E2, 0xC798,
- 0x83E3, 0xC799, 0x83E4, 0xC79A, 0x83E5, 0xDDBE, 0x83E6, 0xC79B, 0x83E7, 0xC79C, 0x83E8, 0xC79D, 0x83E9, 0xC6D0, 0x83EA, 0xDDD0,
- 0x83EB, 0xC79E, 0x83EC, 0xC79F, 0x83ED, 0xC7A0, 0x83EE, 0xC840, 0x83EF, 0xC841, 0x83F0, 0xDDD4, 0x83F1, 0xC1E2, 0x83F2, 0xB7C6,
- 0x83F3, 0xC842, 0x83F4, 0xC843, 0x83F5, 0xC844, 0x83F6, 0xC845, 0x83F7, 0xC846, 0x83F8, 0xDDCE, 0x83F9, 0xDDCF, 0x83FA, 0xC847,
- 0x83FB, 0xC848, 0x83FC, 0xC849, 0x83FD, 0xDDC4, 0x83FE, 0xC84A, 0x83FF, 0xC84B, 0x8400, 0xC84C, 0x8401, 0xDDBD, 0x8402, 0xC84D,
- 0x8403, 0xDDCD, 0x8404, 0xCCD1, 0x8405, 0xC84E, 0x8406, 0xDDC9, 0x8407, 0xC84F, 0x8408, 0xC850, 0x8409, 0xC851, 0x840A, 0xC852,
- 0x840B, 0xDDC2, 0x840C, 0xC3C8, 0x840D, 0xC6BC, 0x840E, 0xCEAE, 0x840F, 0xDDCC, 0x8410, 0xC853, 0x8411, 0xDDC8, 0x8412, 0xC854,
- 0x8413, 0xC855, 0x8414, 0xC856, 0x8415, 0xC857, 0x8416, 0xC858, 0x8417, 0xC859, 0x8418, 0xDDC1, 0x8419, 0xC85A, 0x841A, 0xC85B,
- 0x841B, 0xC85C, 0x841C, 0xDDC6, 0x841D, 0xC2DC, 0x841E, 0xC85D, 0x841F, 0xC85E, 0x8420, 0xC85F, 0x8421, 0xC860, 0x8422, 0xC861,
- 0x8423, 0xC862, 0x8424, 0xD3A9, 0x8425, 0xD3AA, 0x8426, 0xDDD3, 0x8427, 0xCFF4, 0x8428, 0xC8F8, 0x8429, 0xC863, 0x842A, 0xC864,
- 0x842B, 0xC865, 0x842C, 0xC866, 0x842D, 0xC867, 0x842E, 0xC868, 0x842F, 0xC869, 0x8430, 0xC86A, 0x8431, 0xDDE6, 0x8432, 0xC86B,
- 0x8433, 0xC86C, 0x8434, 0xC86D, 0x8435, 0xC86E, 0x8436, 0xC86F, 0x8437, 0xC870, 0x8438, 0xDDC7, 0x8439, 0xC871, 0x843A, 0xC872,
- 0x843B, 0xC873, 0x843C, 0xDDE0, 0x843D, 0xC2E4, 0x843E, 0xC874, 0x843F, 0xC875, 0x8440, 0xC876, 0x8441, 0xC877, 0x8442, 0xC878,
- 0x8443, 0xC879, 0x8444, 0xC87A, 0x8445, 0xC87B, 0x8446, 0xDDE1, 0x8447, 0xC87C, 0x8448, 0xC87D, 0x8449, 0xC87E, 0x844A, 0xC880,
- 0x844B, 0xC881, 0x844C, 0xC882, 0x844D, 0xC883, 0x844E, 0xC884, 0x844F, 0xC885, 0x8450, 0xC886, 0x8451, 0xDDD7, 0x8452, 0xC887,
- 0x8453, 0xC888, 0x8454, 0xC889, 0x8455, 0xC88A, 0x8456, 0xC88B, 0x8457, 0xD6F8, 0x8458, 0xC88C, 0x8459, 0xDDD9, 0x845A, 0xDDD8,
- 0x845B, 0xB8F0, 0x845C, 0xDDD6, 0x845D, 0xC88D, 0x845E, 0xC88E, 0x845F, 0xC88F, 0x8460, 0xC890, 0x8461, 0xC6CF, 0x8462, 0xC891,
- 0x8463, 0xB6AD, 0x8464, 0xC892, 0x8465, 0xC893, 0x8466, 0xC894, 0x8467, 0xC895, 0x8468, 0xC896, 0x8469, 0xDDE2, 0x846A, 0xC897,
- 0x846B, 0xBAF9, 0x846C, 0xD4E1, 0x846D, 0xDDE7, 0x846E, 0xC898, 0x846F, 0xC899, 0x8470, 0xC89A, 0x8471, 0xB4D0, 0x8472, 0xC89B,
- 0x8473, 0xDDDA, 0x8474, 0xC89C, 0x8475, 0xBFFB, 0x8476, 0xDDE3, 0x8477, 0xC89D, 0x8478, 0xDDDF, 0x8479, 0xC89E, 0x847A, 0xDDDD,
- 0x847B, 0xC89F, 0x847C, 0xC8A0, 0x847D, 0xC940, 0x847E, 0xC941, 0x847F, 0xC942, 0x8480, 0xC943, 0x8481, 0xC944, 0x8482, 0xB5D9,
- 0x8483, 0xC945, 0x8484, 0xC946, 0x8485, 0xC947, 0x8486, 0xC948, 0x8487, 0xDDDB, 0x8488, 0xDDDC, 0x8489, 0xDDDE, 0x848A, 0xC949,
- 0x848B, 0xBDAF, 0x848C, 0xDDE4, 0x848D, 0xC94A, 0x848E, 0xDDE5, 0x848F, 0xC94B, 0x8490, 0xC94C, 0x8491, 0xC94D, 0x8492, 0xC94E,
- 0x8493, 0xC94F, 0x8494, 0xC950, 0x8495, 0xC951, 0x8496, 0xC952, 0x8497, 0xDDF5, 0x8498, 0xC953, 0x8499, 0xC3C9, 0x849A, 0xC954,
- 0x849B, 0xC955, 0x849C, 0xCBE2, 0x849D, 0xC956, 0x849E, 0xC957, 0x849F, 0xC958, 0x84A0, 0xC959, 0x84A1, 0xDDF2, 0x84A2, 0xC95A,
- 0x84A3, 0xC95B, 0x84A4, 0xC95C, 0x84A5, 0xC95D, 0x84A6, 0xC95E, 0x84A7, 0xC95F, 0x84A8, 0xC960, 0x84A9, 0xC961, 0x84AA, 0xC962,
- 0x84AB, 0xC963, 0x84AC, 0xC964, 0x84AD, 0xC965, 0x84AE, 0xC966, 0x84AF, 0xD8E1, 0x84B0, 0xC967, 0x84B1, 0xC968, 0x84B2, 0xC6D1,
- 0x84B3, 0xC969, 0x84B4, 0xDDF4, 0x84B5, 0xC96A, 0x84B6, 0xC96B, 0x84B7, 0xC96C, 0x84B8, 0xD5F4, 0x84B9, 0xDDF3, 0x84BA, 0xDDF0,
- 0x84BB, 0xC96D, 0x84BC, 0xC96E, 0x84BD, 0xDDEC, 0x84BE, 0xC96F, 0x84BF, 0xDDEF, 0x84C0, 0xC970, 0x84C1, 0xDDE8, 0x84C2, 0xC971,
- 0x84C3, 0xC972, 0x84C4, 0xD0EE, 0x84C5, 0xC973, 0x84C6, 0xC974, 0x84C7, 0xC975, 0x84C8, 0xC976, 0x84C9, 0xC8D8, 0x84CA, 0xDDEE,
- 0x84CB, 0xC977, 0x84CC, 0xC978, 0x84CD, 0xDDE9, 0x84CE, 0xC979, 0x84CF, 0xC97A, 0x84D0, 0xDDEA, 0x84D1, 0xCBF2, 0x84D2, 0xC97B,
- 0x84D3, 0xDDED, 0x84D4, 0xC97C, 0x84D5, 0xC97D, 0x84D6, 0xB1CD, 0x84D7, 0xC97E, 0x84D8, 0xC980, 0x84D9, 0xC981, 0x84DA, 0xC982,
- 0x84DB, 0xC983, 0x84DC, 0xC984, 0x84DD, 0xC0B6, 0x84DE, 0xC985, 0x84DF, 0xBCBB, 0x84E0, 0xDDF1, 0x84E1, 0xC986, 0x84E2, 0xC987,
- 0x84E3, 0xDDF7, 0x84E4, 0xC988, 0x84E5, 0xDDF6, 0x84E6, 0xDDEB, 0x84E7, 0xC989, 0x84E8, 0xC98A, 0x84E9, 0xC98B, 0x84EA, 0xC98C,
- 0x84EB, 0xC98D, 0x84EC, 0xC5EE, 0x84ED, 0xC98E, 0x84EE, 0xC98F, 0x84EF, 0xC990, 0x84F0, 0xDDFB, 0x84F1, 0xC991, 0x84F2, 0xC992,
- 0x84F3, 0xC993, 0x84F4, 0xC994, 0x84F5, 0xC995, 0x84F6, 0xC996, 0x84F7, 0xC997, 0x84F8, 0xC998, 0x84F9, 0xC999, 0x84FA, 0xC99A,
- 0x84FB, 0xC99B, 0x84FC, 0xDEA4, 0x84FD, 0xC99C, 0x84FE, 0xC99D, 0x84FF, 0xDEA3, 0x8500, 0xC99E, 0x8501, 0xC99F, 0x8502, 0xC9A0,
- 0x8503, 0xCA40, 0x8504, 0xCA41, 0x8505, 0xCA42, 0x8506, 0xCA43, 0x8507, 0xCA44, 0x8508, 0xCA45, 0x8509, 0xCA46, 0x850A, 0xCA47,
- 0x850B, 0xCA48, 0x850C, 0xDDF8, 0x850D, 0xCA49, 0x850E, 0xCA4A, 0x850F, 0xCA4B, 0x8510, 0xCA4C, 0x8511, 0xC3EF, 0x8512, 0xCA4D,
- 0x8513, 0xC2FB, 0x8514, 0xCA4E, 0x8515, 0xCA4F, 0x8516, 0xCA50, 0x8517, 0xD5E1, 0x8518, 0xCA51, 0x8519, 0xCA52, 0x851A, 0xCEB5,
- 0x851B, 0xCA53, 0x851C, 0xCA54, 0x851D, 0xCA55, 0x851E, 0xCA56, 0x851F, 0xDDFD, 0x8520, 0xCA57, 0x8521, 0xB2CC, 0x8522, 0xCA58,
- 0x8523, 0xCA59, 0x8524, 0xCA5A, 0x8525, 0xCA5B, 0x8526, 0xCA5C, 0x8527, 0xCA5D, 0x8528, 0xCA5E, 0x8529, 0xCA5F, 0x852A, 0xCA60,
- 0x852B, 0xC4E8, 0x852C, 0xCADF, 0x852D, 0xCA61, 0x852E, 0xCA62, 0x852F, 0xCA63, 0x8530, 0xCA64, 0x8531, 0xCA65, 0x8532, 0xCA66,
- 0x8533, 0xCA67, 0x8534, 0xCA68, 0x8535, 0xCA69, 0x8536, 0xCA6A, 0x8537, 0xC7BE, 0x8538, 0xDDFA, 0x8539, 0xDDFC, 0x853A, 0xDDFE,
- 0x853B, 0xDEA2, 0x853C, 0xB0AA, 0x853D, 0xB1CE, 0x853E, 0xCA6B, 0x853F, 0xCA6C, 0x8540, 0xCA6D, 0x8541, 0xCA6E, 0x8542, 0xCA6F,
- 0x8543, 0xDEAC, 0x8544, 0xCA70, 0x8545, 0xCA71, 0x8546, 0xCA72, 0x8547, 0xCA73, 0x8548, 0xDEA6, 0x8549, 0xBDB6, 0x854A, 0xC8EF,
- 0x854B, 0xCA74, 0x854C, 0xCA75, 0x854D, 0xCA76, 0x854E, 0xCA77, 0x854F, 0xCA78, 0x8550, 0xCA79, 0x8551, 0xCA7A, 0x8552, 0xCA7B,
- 0x8553, 0xCA7C, 0x8554, 0xCA7D, 0x8555, 0xCA7E, 0x8556, 0xDEA1, 0x8557, 0xCA80, 0x8558, 0xCA81, 0x8559, 0xDEA5, 0x855A, 0xCA82,
- 0x855B, 0xCA83, 0x855C, 0xCA84, 0x855D, 0xCA85, 0x855E, 0xDEA9, 0x855F, 0xCA86, 0x8560, 0xCA87, 0x8561, 0xCA88, 0x8562, 0xCA89,
- 0x8563, 0xCA8A, 0x8564, 0xDEA8, 0x8565, 0xCA8B, 0x8566, 0xCA8C, 0x8567, 0xCA8D, 0x8568, 0xDEA7, 0x8569, 0xCA8E, 0x856A, 0xCA8F,
- 0x856B, 0xCA90, 0x856C, 0xCA91, 0x856D, 0xCA92, 0x856E, 0xCA93, 0x856F, 0xCA94, 0x8570, 0xCA95, 0x8571, 0xCA96, 0x8572, 0xDEAD,
- 0x8573, 0xCA97, 0x8574, 0xD4CC, 0x8575, 0xCA98, 0x8576, 0xCA99, 0x8577, 0xCA9A, 0x8578, 0xCA9B, 0x8579, 0xDEB3, 0x857A, 0xDEAA,
- 0x857B, 0xDEAE, 0x857C, 0xCA9C, 0x857D, 0xCA9D, 0x857E, 0xC0D9, 0x857F, 0xCA9E, 0x8580, 0xCA9F, 0x8581, 0xCAA0, 0x8582, 0xCB40,
- 0x8583, 0xCB41, 0x8584, 0xB1A1, 0x8585, 0xDEB6, 0x8586, 0xCB42, 0x8587, 0xDEB1, 0x8588, 0xCB43, 0x8589, 0xCB44, 0x858A, 0xCB45,
- 0x858B, 0xCB46, 0x858C, 0xCB47, 0x858D, 0xCB48, 0x858E, 0xCB49, 0x858F, 0xDEB2, 0x8590, 0xCB4A, 0x8591, 0xCB4B, 0x8592, 0xCB4C,
- 0x8593, 0xCB4D, 0x8594, 0xCB4E, 0x8595, 0xCB4F, 0x8596, 0xCB50, 0x8597, 0xCB51, 0x8598, 0xCB52, 0x8599, 0xCB53, 0x859A, 0xCB54,
- 0x859B, 0xD1A6, 0x859C, 0xDEB5, 0x859D, 0xCB55, 0x859E, 0xCB56, 0x859F, 0xCB57, 0x85A0, 0xCB58, 0x85A1, 0xCB59, 0x85A2, 0xCB5A,
- 0x85A3, 0xCB5B, 0x85A4, 0xDEAF, 0x85A5, 0xCB5C, 0x85A6, 0xCB5D, 0x85A7, 0xCB5E, 0x85A8, 0xDEB0, 0x85A9, 0xCB5F, 0x85AA, 0xD0BD,
- 0x85AB, 0xCB60, 0x85AC, 0xCB61, 0x85AD, 0xCB62, 0x85AE, 0xDEB4, 0x85AF, 0xCAED, 0x85B0, 0xDEB9, 0x85B1, 0xCB63, 0x85B2, 0xCB64,
- 0x85B3, 0xCB65, 0x85B4, 0xCB66, 0x85B5, 0xCB67, 0x85B6, 0xCB68, 0x85B7, 0xDEB8, 0x85B8, 0xCB69, 0x85B9, 0xDEB7, 0x85BA, 0xCB6A,
- 0x85BB, 0xCB6B, 0x85BC, 0xCB6C, 0x85BD, 0xCB6D, 0x85BE, 0xCB6E, 0x85BF, 0xCB6F, 0x85C0, 0xCB70, 0x85C1, 0xDEBB, 0x85C2, 0xCB71,
- 0x85C3, 0xCB72, 0x85C4, 0xCB73, 0x85C5, 0xCB74, 0x85C6, 0xCB75, 0x85C7, 0xCB76, 0x85C8, 0xCB77, 0x85C9, 0xBDE5, 0x85CA, 0xCB78,
- 0x85CB, 0xCB79, 0x85CC, 0xCB7A, 0x85CD, 0xCB7B, 0x85CE, 0xCB7C, 0x85CF, 0xB2D8, 0x85D0, 0xC3EA, 0x85D1, 0xCB7D, 0x85D2, 0xCB7E,
- 0x85D3, 0xDEBA, 0x85D4, 0xCB80, 0x85D5, 0xC5BA, 0x85D6, 0xCB81, 0x85D7, 0xCB82, 0x85D8, 0xCB83, 0x85D9, 0xCB84, 0x85DA, 0xCB85,
- 0x85DB, 0xCB86, 0x85DC, 0xDEBC, 0x85DD, 0xCB87, 0x85DE, 0xCB88, 0x85DF, 0xCB89, 0x85E0, 0xCB8A, 0x85E1, 0xCB8B, 0x85E2, 0xCB8C,
- 0x85E3, 0xCB8D, 0x85E4, 0xCCD9, 0x85E5, 0xCB8E, 0x85E6, 0xCB8F, 0x85E7, 0xCB90, 0x85E8, 0xCB91, 0x85E9, 0xB7AA, 0x85EA, 0xCB92,
- 0x85EB, 0xCB93, 0x85EC, 0xCB94, 0x85ED, 0xCB95, 0x85EE, 0xCB96, 0x85EF, 0xCB97, 0x85F0, 0xCB98, 0x85F1, 0xCB99, 0x85F2, 0xCB9A,
- 0x85F3, 0xCB9B, 0x85F4, 0xCB9C, 0x85F5, 0xCB9D, 0x85F6, 0xCB9E, 0x85F7, 0xCB9F, 0x85F8, 0xCBA0, 0x85F9, 0xCC40, 0x85FA, 0xCC41,
- 0x85FB, 0xD4E5, 0x85FC, 0xCC42, 0x85FD, 0xCC43, 0x85FE, 0xCC44, 0x85FF, 0xDEBD, 0x8600, 0xCC45, 0x8601, 0xCC46, 0x8602, 0xCC47,
- 0x8603, 0xCC48, 0x8604, 0xCC49, 0x8605, 0xDEBF, 0x8606, 0xCC4A, 0x8607, 0xCC4B, 0x8608, 0xCC4C, 0x8609, 0xCC4D, 0x860A, 0xCC4E,
- 0x860B, 0xCC4F, 0x860C, 0xCC50, 0x860D, 0xCC51, 0x860E, 0xCC52, 0x860F, 0xCC53, 0x8610, 0xCC54, 0x8611, 0xC4A2, 0x8612, 0xCC55,
- 0x8613, 0xCC56, 0x8614, 0xCC57, 0x8615, 0xCC58, 0x8616, 0xDEC1, 0x8617, 0xCC59, 0x8618, 0xCC5A, 0x8619, 0xCC5B, 0x861A, 0xCC5C,
- 0x861B, 0xCC5D, 0x861C, 0xCC5E, 0x861D, 0xCC5F, 0x861E, 0xCC60, 0x861F, 0xCC61, 0x8620, 0xCC62, 0x8621, 0xCC63, 0x8622, 0xCC64,
- 0x8623, 0xCC65, 0x8624, 0xCC66, 0x8625, 0xCC67, 0x8626, 0xCC68, 0x8627, 0xDEBE, 0x8628, 0xCC69, 0x8629, 0xDEC0, 0x862A, 0xCC6A,
- 0x862B, 0xCC6B, 0x862C, 0xCC6C, 0x862D, 0xCC6D, 0x862E, 0xCC6E, 0x862F, 0xCC6F, 0x8630, 0xCC70, 0x8631, 0xCC71, 0x8632, 0xCC72,
- 0x8633, 0xCC73, 0x8634, 0xCC74, 0x8635, 0xCC75, 0x8636, 0xCC76, 0x8637, 0xCC77, 0x8638, 0xD5BA, 0x8639, 0xCC78, 0x863A, 0xCC79,
- 0x863B, 0xCC7A, 0x863C, 0xDEC2, 0x863D, 0xCC7B, 0x863E, 0xCC7C, 0x863F, 0xCC7D, 0x8640, 0xCC7E, 0x8641, 0xCC80, 0x8642, 0xCC81,
- 0x8643, 0xCC82, 0x8644, 0xCC83, 0x8645, 0xCC84, 0x8646, 0xCC85, 0x8647, 0xCC86, 0x8648, 0xCC87, 0x8649, 0xCC88, 0x864A, 0xCC89,
- 0x864B, 0xCC8A, 0x864C, 0xCC8B, 0x864D, 0xF2AE, 0x864E, 0xBBA2, 0x864F, 0xC2B2, 0x8650, 0xC5B0, 0x8651, 0xC2C7, 0x8652, 0xCC8C,
- 0x8653, 0xCC8D, 0x8654, 0xF2AF, 0x8655, 0xCC8E, 0x8656, 0xCC8F, 0x8657, 0xCC90, 0x8658, 0xCC91, 0x8659, 0xCC92, 0x865A, 0xD0E9,
- 0x865B, 0xCC93, 0x865C, 0xCC94, 0x865D, 0xCC95, 0x865E, 0xD3DD, 0x865F, 0xCC96, 0x8660, 0xCC97, 0x8661, 0xCC98, 0x8662, 0xEBBD,
- 0x8663, 0xCC99, 0x8664, 0xCC9A, 0x8665, 0xCC9B, 0x8666, 0xCC9C, 0x8667, 0xCC9D, 0x8668, 0xCC9E, 0x8669, 0xCC9F, 0x866A, 0xCCA0,
- 0x866B, 0xB3E6, 0x866C, 0xF2B0, 0x866D, 0xCD40, 0x866E, 0xF2B1, 0x866F, 0xCD41, 0x8670, 0xCD42, 0x8671, 0xCAAD, 0x8672, 0xCD43,
- 0x8673, 0xCD44, 0x8674, 0xCD45, 0x8675, 0xCD46, 0x8676, 0xCD47, 0x8677, 0xCD48, 0x8678, 0xCD49, 0x8679, 0xBAE7, 0x867A, 0xF2B3,
- 0x867B, 0xF2B5, 0x867C, 0xF2B4, 0x867D, 0xCBE4, 0x867E, 0xCFBA, 0x867F, 0xF2B2, 0x8680, 0xCAB4, 0x8681, 0xD2CF, 0x8682, 0xC2EC,
- 0x8683, 0xCD4A, 0x8684, 0xCD4B, 0x8685, 0xCD4C, 0x8686, 0xCD4D, 0x8687, 0xCD4E, 0x8688, 0xCD4F, 0x8689, 0xCD50, 0x868A, 0xCEC3,
- 0x868B, 0xF2B8, 0x868C, 0xB0F6, 0x868D, 0xF2B7, 0x868E, 0xCD51, 0x868F, 0xCD52, 0x8690, 0xCD53, 0x8691, 0xCD54, 0x8692, 0xCD55,
- 0x8693, 0xF2BE, 0x8694, 0xCD56, 0x8695, 0xB2CF, 0x8696, 0xCD57, 0x8697, 0xCD58, 0x8698, 0xCD59, 0x8699, 0xCD5A, 0x869A, 0xCD5B,
- 0x869B, 0xCD5C, 0x869C, 0xD1C1, 0x869D, 0xF2BA, 0x869E, 0xCD5D, 0x869F, 0xCD5E, 0x86A0, 0xCD5F, 0x86A1, 0xCD60, 0x86A2, 0xCD61,
- 0x86A3, 0xF2BC, 0x86A4, 0xD4E9, 0x86A5, 0xCD62, 0x86A6, 0xCD63, 0x86A7, 0xF2BB, 0x86A8, 0xF2B6, 0x86A9, 0xF2BF, 0x86AA, 0xF2BD,
- 0x86AB, 0xCD64, 0x86AC, 0xF2B9, 0x86AD, 0xCD65, 0x86AE, 0xCD66, 0x86AF, 0xF2C7, 0x86B0, 0xF2C4, 0x86B1, 0xF2C6, 0x86B2, 0xCD67,
- 0x86B3, 0xCD68, 0x86B4, 0xF2CA, 0x86B5, 0xF2C2, 0x86B6, 0xF2C0, 0x86B7, 0xCD69, 0x86B8, 0xCD6A, 0x86B9, 0xCD6B, 0x86BA, 0xF2C5,
- 0x86BB, 0xCD6C, 0x86BC, 0xCD6D, 0x86BD, 0xCD6E, 0x86BE, 0xCD6F, 0x86BF, 0xCD70, 0x86C0, 0xD6FB, 0x86C1, 0xCD71, 0x86C2, 0xCD72,
- 0x86C3, 0xCD73, 0x86C4, 0xF2C1, 0x86C5, 0xCD74, 0x86C6, 0xC7F9, 0x86C7, 0xC9DF, 0x86C8, 0xCD75, 0x86C9, 0xF2C8, 0x86CA, 0xB9C6,
- 0x86CB, 0xB5B0, 0x86CC, 0xCD76, 0x86CD, 0xCD77, 0x86CE, 0xF2C3, 0x86CF, 0xF2C9, 0x86D0, 0xF2D0, 0x86D1, 0xF2D6, 0x86D2, 0xCD78,
- 0x86D3, 0xCD79, 0x86D4, 0xBBD7, 0x86D5, 0xCD7A, 0x86D6, 0xCD7B, 0x86D7, 0xCD7C, 0x86D8, 0xF2D5, 0x86D9, 0xCDDC, 0x86DA, 0xCD7D,
- 0x86DB, 0xD6EB, 0x86DC, 0xCD7E, 0x86DD, 0xCD80, 0x86DE, 0xF2D2, 0x86DF, 0xF2D4, 0x86E0, 0xCD81, 0x86E1, 0xCD82, 0x86E2, 0xCD83,
- 0x86E3, 0xCD84, 0x86E4, 0xB8F2, 0x86E5, 0xCD85, 0x86E6, 0xCD86, 0x86E7, 0xCD87, 0x86E8, 0xCD88, 0x86E9, 0xF2CB, 0x86EA, 0xCD89,
- 0x86EB, 0xCD8A, 0x86EC, 0xCD8B, 0x86ED, 0xF2CE, 0x86EE, 0xC2F9, 0x86EF, 0xCD8C, 0x86F0, 0xD5DD, 0x86F1, 0xF2CC, 0x86F2, 0xF2CD,
- 0x86F3, 0xF2CF, 0x86F4, 0xF2D3, 0x86F5, 0xCD8D, 0x86F6, 0xCD8E, 0x86F7, 0xCD8F, 0x86F8, 0xF2D9, 0x86F9, 0xD3BC, 0x86FA, 0xCD90,
- 0x86FB, 0xCD91, 0x86FC, 0xCD92, 0x86FD, 0xCD93, 0x86FE, 0xB6EA, 0x86FF, 0xCD94, 0x8700, 0xCAF1, 0x8701, 0xCD95, 0x8702, 0xB7E4,
- 0x8703, 0xF2D7, 0x8704, 0xCD96, 0x8705, 0xCD97, 0x8706, 0xCD98, 0x8707, 0xF2D8, 0x8708, 0xF2DA, 0x8709, 0xF2DD, 0x870A, 0xF2DB,
- 0x870B, 0xCD99, 0x870C, 0xCD9A, 0x870D, 0xF2DC, 0x870E, 0xCD9B, 0x870F, 0xCD9C, 0x8710, 0xCD9D, 0x8711, 0xCD9E, 0x8712, 0xD1D1,
- 0x8713, 0xF2D1, 0x8714, 0xCD9F, 0x8715, 0xCDC9, 0x8716, 0xCDA0, 0x8717, 0xCECF, 0x8718, 0xD6A9, 0x8719, 0xCE40, 0x871A, 0xF2E3,
- 0x871B, 0xCE41, 0x871C, 0xC3DB, 0x871D, 0xCE42, 0x871E, 0xF2E0, 0x871F, 0xCE43, 0x8720, 0xCE44, 0x8721, 0xC0AF, 0x8722, 0xF2EC,
- 0x8723, 0xF2DE, 0x8724, 0xCE45, 0x8725, 0xF2E1, 0x8726, 0xCE46, 0x8727, 0xCE47, 0x8728, 0xCE48, 0x8729, 0xF2E8, 0x872A, 0xCE49,
- 0x872B, 0xCE4A, 0x872C, 0xCE4B, 0x872D, 0xCE4C, 0x872E, 0xF2E2, 0x872F, 0xCE4D, 0x8730, 0xCE4E, 0x8731, 0xF2E7, 0x8732, 0xCE4F,
- 0x8733, 0xCE50, 0x8734, 0xF2E6, 0x8735, 0xCE51, 0x8736, 0xCE52, 0x8737, 0xF2E9, 0x8738, 0xCE53, 0x8739, 0xCE54, 0x873A, 0xCE55,
- 0x873B, 0xF2DF, 0x873C, 0xCE56, 0x873D, 0xCE57, 0x873E, 0xF2E4, 0x873F, 0xF2EA, 0x8740, 0xCE58, 0x8741, 0xCE59, 0x8742, 0xCE5A,
- 0x8743, 0xCE5B, 0x8744, 0xCE5C, 0x8745, 0xCE5D, 0x8746, 0xCE5E, 0x8747, 0xD3AC, 0x8748, 0xF2E5, 0x8749, 0xB2F5, 0x874A, 0xCE5F,
- 0x874B, 0xCE60, 0x874C, 0xF2F2, 0x874D, 0xCE61, 0x874E, 0xD0AB, 0x874F, 0xCE62, 0x8750, 0xCE63, 0x8751, 0xCE64, 0x8752, 0xCE65,
- 0x8753, 0xF2F5, 0x8754, 0xCE66, 0x8755, 0xCE67, 0x8756, 0xCE68, 0x8757, 0xBBC8, 0x8758, 0xCE69, 0x8759, 0xF2F9, 0x875A, 0xCE6A,
- 0x875B, 0xCE6B, 0x875C, 0xCE6C, 0x875D, 0xCE6D, 0x875E, 0xCE6E, 0x875F, 0xCE6F, 0x8760, 0xF2F0, 0x8761, 0xCE70, 0x8762, 0xCE71,
- 0x8763, 0xF2F6, 0x8764, 0xF2F8, 0x8765, 0xF2FA, 0x8766, 0xCE72, 0x8767, 0xCE73, 0x8768, 0xCE74, 0x8769, 0xCE75, 0x876A, 0xCE76,
- 0x876B, 0xCE77, 0x876C, 0xCE78, 0x876D, 0xCE79, 0x876E, 0xF2F3, 0x876F, 0xCE7A, 0x8770, 0xF2F1, 0x8771, 0xCE7B, 0x8772, 0xCE7C,
- 0x8773, 0xCE7D, 0x8774, 0xBAFB, 0x8775, 0xCE7E, 0x8776, 0xB5FB, 0x8777, 0xCE80, 0x8778, 0xCE81, 0x8779, 0xCE82, 0x877A, 0xCE83,
- 0x877B, 0xF2EF, 0x877C, 0xF2F7, 0x877D, 0xF2ED, 0x877E, 0xF2EE, 0x877F, 0xCE84, 0x8780, 0xCE85, 0x8781, 0xCE86, 0x8782, 0xF2EB,
- 0x8783, 0xF3A6, 0x8784, 0xCE87, 0x8785, 0xF3A3, 0x8786, 0xCE88, 0x8787, 0xCE89, 0x8788, 0xF3A2, 0x8789, 0xCE8A, 0x878A, 0xCE8B,
- 0x878B, 0xF2F4, 0x878C, 0xCE8C, 0x878D, 0xC8DA, 0x878E, 0xCE8D, 0x878F, 0xCE8E, 0x8790, 0xCE8F, 0x8791, 0xCE90, 0x8792, 0xCE91,
- 0x8793, 0xF2FB, 0x8794, 0xCE92, 0x8795, 0xCE93, 0x8796, 0xCE94, 0x8797, 0xF3A5, 0x8798, 0xCE95, 0x8799, 0xCE96, 0x879A, 0xCE97,
- 0x879B, 0xCE98, 0x879C, 0xCE99, 0x879D, 0xCE9A, 0x879E, 0xCE9B, 0x879F, 0xC3F8, 0x87A0, 0xCE9C, 0x87A1, 0xCE9D, 0x87A2, 0xCE9E,
- 0x87A3, 0xCE9F, 0x87A4, 0xCEA0, 0x87A5, 0xCF40, 0x87A6, 0xCF41, 0x87A7, 0xCF42, 0x87A8, 0xF2FD, 0x87A9, 0xCF43, 0x87AA, 0xCF44,
- 0x87AB, 0xF3A7, 0x87AC, 0xF3A9, 0x87AD, 0xF3A4, 0x87AE, 0xCF45, 0x87AF, 0xF2FC, 0x87B0, 0xCF46, 0x87B1, 0xCF47, 0x87B2, 0xCF48,
- 0x87B3, 0xF3AB, 0x87B4, 0xCF49, 0x87B5, 0xF3AA, 0x87B6, 0xCF4A, 0x87B7, 0xCF4B, 0x87B8, 0xCF4C, 0x87B9, 0xCF4D, 0x87BA, 0xC2DD,
- 0x87BB, 0xCF4E, 0x87BC, 0xCF4F, 0x87BD, 0xF3AE, 0x87BE, 0xCF50, 0x87BF, 0xCF51, 0x87C0, 0xF3B0, 0x87C1, 0xCF52, 0x87C2, 0xCF53,
- 0x87C3, 0xCF54, 0x87C4, 0xCF55, 0x87C5, 0xCF56, 0x87C6, 0xF3A1, 0x87C7, 0xCF57, 0x87C8, 0xCF58, 0x87C9, 0xCF59, 0x87CA, 0xF3B1,
- 0x87CB, 0xF3AC, 0x87CC, 0xCF5A, 0x87CD, 0xCF5B, 0x87CE, 0xCF5C, 0x87CF, 0xCF5D, 0x87D0, 0xCF5E, 0x87D1, 0xF3AF, 0x87D2, 0xF2FE,
- 0x87D3, 0xF3AD, 0x87D4, 0xCF5F, 0x87D5, 0xCF60, 0x87D6, 0xCF61, 0x87D7, 0xCF62, 0x87D8, 0xCF63, 0x87D9, 0xCF64, 0x87DA, 0xCF65,
- 0x87DB, 0xF3B2, 0x87DC, 0xCF66, 0x87DD, 0xCF67, 0x87DE, 0xCF68, 0x87DF, 0xCF69, 0x87E0, 0xF3B4, 0x87E1, 0xCF6A, 0x87E2, 0xCF6B,
- 0x87E3, 0xCF6C, 0x87E4, 0xCF6D, 0x87E5, 0xF3A8, 0x87E6, 0xCF6E, 0x87E7, 0xCF6F, 0x87E8, 0xCF70, 0x87E9, 0xCF71, 0x87EA, 0xF3B3,
- 0x87EB, 0xCF72, 0x87EC, 0xCF73, 0x87ED, 0xCF74, 0x87EE, 0xF3B5, 0x87EF, 0xCF75, 0x87F0, 0xCF76, 0x87F1, 0xCF77, 0x87F2, 0xCF78,
- 0x87F3, 0xCF79, 0x87F4, 0xCF7A, 0x87F5, 0xCF7B, 0x87F6, 0xCF7C, 0x87F7, 0xCF7D, 0x87F8, 0xCF7E, 0x87F9, 0xD0B7, 0x87FA, 0xCF80,
- 0x87FB, 0xCF81, 0x87FC, 0xCF82, 0x87FD, 0xCF83, 0x87FE, 0xF3B8, 0x87FF, 0xCF84, 0x8800, 0xCF85, 0x8801, 0xCF86, 0x8802, 0xCF87,
- 0x8803, 0xD9F9, 0x8804, 0xCF88, 0x8805, 0xCF89, 0x8806, 0xCF8A, 0x8807, 0xCF8B, 0x8808, 0xCF8C, 0x8809, 0xCF8D, 0x880A, 0xF3B9,
- 0x880B, 0xCF8E, 0x880C, 0xCF8F, 0x880D, 0xCF90, 0x880E, 0xCF91, 0x880F, 0xCF92, 0x8810, 0xCF93, 0x8811, 0xCF94, 0x8812, 0xCF95,
- 0x8813, 0xF3B7, 0x8814, 0xCF96, 0x8815, 0xC8E4, 0x8816, 0xF3B6, 0x8817, 0xCF97, 0x8818, 0xCF98, 0x8819, 0xCF99, 0x881A, 0xCF9A,
- 0x881B, 0xF3BA, 0x881C, 0xCF9B, 0x881D, 0xCF9C, 0x881E, 0xCF9D, 0x881F, 0xCF9E, 0x8820, 0xCF9F, 0x8821, 0xF3BB, 0x8822, 0xB4C0,
- 0x8823, 0xCFA0, 0x8824, 0xD040, 0x8825, 0xD041, 0x8826, 0xD042, 0x8827, 0xD043, 0x8828, 0xD044, 0x8829, 0xD045, 0x882A, 0xD046,
- 0x882B, 0xD047, 0x882C, 0xD048, 0x882D, 0xD049, 0x882E, 0xD04A, 0x882F, 0xD04B, 0x8830, 0xD04C, 0x8831, 0xD04D, 0x8832, 0xEEC3,
- 0x8833, 0xD04E, 0x8834, 0xD04F, 0x8835, 0xD050, 0x8836, 0xD051, 0x8837, 0xD052, 0x8838, 0xD053, 0x8839, 0xF3BC, 0x883A, 0xD054,
- 0x883B, 0xD055, 0x883C, 0xF3BD, 0x883D, 0xD056, 0x883E, 0xD057, 0x883F, 0xD058, 0x8840, 0xD1AA, 0x8841, 0xD059, 0x8842, 0xD05A,
- 0x8843, 0xD05B, 0x8844, 0xF4AC, 0x8845, 0xD0C6, 0x8846, 0xD05C, 0x8847, 0xD05D, 0x8848, 0xD05E, 0x8849, 0xD05F, 0x884A, 0xD060,
- 0x884B, 0xD061, 0x884C, 0xD0D0, 0x884D, 0xD1DC, 0x884E, 0xD062, 0x884F, 0xD063, 0x8850, 0xD064, 0x8851, 0xD065, 0x8852, 0xD066,
- 0x8853, 0xD067, 0x8854, 0xCFCE, 0x8855, 0xD068, 0x8856, 0xD069, 0x8857, 0xBDD6, 0x8858, 0xD06A, 0x8859, 0xD1C3, 0x885A, 0xD06B,
- 0x885B, 0xD06C, 0x885C, 0xD06D, 0x885D, 0xD06E, 0x885E, 0xD06F, 0x885F, 0xD070, 0x8860, 0xD071, 0x8861, 0xBAE2, 0x8862, 0xE1E9,
- 0x8863, 0xD2C2, 0x8864, 0xF1C2, 0x8865, 0xB2B9, 0x8866, 0xD072, 0x8867, 0xD073, 0x8868, 0xB1ED, 0x8869, 0xF1C3, 0x886A, 0xD074,
- 0x886B, 0xC9C0, 0x886C, 0xB3C4, 0x886D, 0xD075, 0x886E, 0xD9F2, 0x886F, 0xD076, 0x8870, 0xCBA5, 0x8871, 0xD077, 0x8872, 0xF1C4,
- 0x8873, 0xD078, 0x8874, 0xD079, 0x8875, 0xD07A, 0x8876, 0xD07B, 0x8877, 0xD6D4, 0x8878, 0xD07C, 0x8879, 0xD07D, 0x887A, 0xD07E,
- 0x887B, 0xD080, 0x887C, 0xD081, 0x887D, 0xF1C5, 0x887E, 0xF4C0, 0x887F, 0xF1C6, 0x8880, 0xD082, 0x8881, 0xD4AC, 0x8882, 0xF1C7,
- 0x8883, 0xD083, 0x8884, 0xB0C0, 0x8885, 0xF4C1, 0x8886, 0xD084, 0x8887, 0xD085, 0x8888, 0xF4C2, 0x8889, 0xD086, 0x888A, 0xD087,
- 0x888B, 0xB4FC, 0x888C, 0xD088, 0x888D, 0xC5DB, 0x888E, 0xD089, 0x888F, 0xD08A, 0x8890, 0xD08B, 0x8891, 0xD08C, 0x8892, 0xCCBB,
- 0x8893, 0xD08D, 0x8894, 0xD08E, 0x8895, 0xD08F, 0x8896, 0xD0E4, 0x8897, 0xD090, 0x8898, 0xD091, 0x8899, 0xD092, 0x889A, 0xD093,
- 0x889B, 0xD094, 0x889C, 0xCDE0, 0x889D, 0xD095, 0x889E, 0xD096, 0x889F, 0xD097, 0x88A0, 0xD098, 0x88A1, 0xD099, 0x88A2, 0xF1C8,
- 0x88A3, 0xD09A, 0x88A4, 0xD9F3, 0x88A5, 0xD09B, 0x88A6, 0xD09C, 0x88A7, 0xD09D, 0x88A8, 0xD09E, 0x88A9, 0xD09F, 0x88AA, 0xD0A0,
- 0x88AB, 0xB1BB, 0x88AC, 0xD140, 0x88AD, 0xCFAE, 0x88AE, 0xD141, 0x88AF, 0xD142, 0x88B0, 0xD143, 0x88B1, 0xB8A4, 0x88B2, 0xD144,
- 0x88B3, 0xD145, 0x88B4, 0xD146, 0x88B5, 0xD147, 0x88B6, 0xD148, 0x88B7, 0xF1CA, 0x88B8, 0xD149, 0x88B9, 0xD14A, 0x88BA, 0xD14B,
- 0x88BB, 0xD14C, 0x88BC, 0xF1CB, 0x88BD, 0xD14D, 0x88BE, 0xD14E, 0x88BF, 0xD14F, 0x88C0, 0xD150, 0x88C1, 0xB2C3, 0x88C2, 0xC1D1,
- 0x88C3, 0xD151, 0x88C4, 0xD152, 0x88C5, 0xD7B0, 0x88C6, 0xF1C9, 0x88C7, 0xD153, 0x88C8, 0xD154, 0x88C9, 0xF1CC, 0x88CA, 0xD155,
- 0x88CB, 0xD156, 0x88CC, 0xD157, 0x88CD, 0xD158, 0x88CE, 0xF1CE, 0x88CF, 0xD159, 0x88D0, 0xD15A, 0x88D1, 0xD15B, 0x88D2, 0xD9F6,
- 0x88D3, 0xD15C, 0x88D4, 0xD2E1, 0x88D5, 0xD4A3, 0x88D6, 0xD15D, 0x88D7, 0xD15E, 0x88D8, 0xF4C3, 0x88D9, 0xC8B9, 0x88DA, 0xD15F,
- 0x88DB, 0xD160, 0x88DC, 0xD161, 0x88DD, 0xD162, 0x88DE, 0xD163, 0x88DF, 0xF4C4, 0x88E0, 0xD164, 0x88E1, 0xD165, 0x88E2, 0xF1CD,
- 0x88E3, 0xF1CF, 0x88E4, 0xBFE3, 0x88E5, 0xF1D0, 0x88E6, 0xD166, 0x88E7, 0xD167, 0x88E8, 0xF1D4, 0x88E9, 0xD168, 0x88EA, 0xD169,
- 0x88EB, 0xD16A, 0x88EC, 0xD16B, 0x88ED, 0xD16C, 0x88EE, 0xD16D, 0x88EF, 0xD16E, 0x88F0, 0xF1D6, 0x88F1, 0xF1D1, 0x88F2, 0xD16F,
- 0x88F3, 0xC9D1, 0x88F4, 0xC5E1, 0x88F5, 0xD170, 0x88F6, 0xD171, 0x88F7, 0xD172, 0x88F8, 0xC2E3, 0x88F9, 0xB9FC, 0x88FA, 0xD173,
- 0x88FB, 0xD174, 0x88FC, 0xF1D3, 0x88FD, 0xD175, 0x88FE, 0xF1D5, 0x88FF, 0xD176, 0x8900, 0xD177, 0x8901, 0xD178, 0x8902, 0xB9D3,
- 0x8903, 0xD179, 0x8904, 0xD17A, 0x8905, 0xD17B, 0x8906, 0xD17C, 0x8907, 0xD17D, 0x8908, 0xD17E, 0x8909, 0xD180, 0x890A, 0xF1DB,
- 0x890B, 0xD181, 0x890C, 0xD182, 0x890D, 0xD183, 0x890E, 0xD184, 0x890F, 0xD185, 0x8910, 0xBAD6, 0x8911, 0xD186, 0x8912, 0xB0FD,
- 0x8913, 0xF1D9, 0x8914, 0xD187, 0x8915, 0xD188, 0x8916, 0xD189, 0x8917, 0xD18A, 0x8918, 0xD18B, 0x8919, 0xF1D8, 0x891A, 0xF1D2,
- 0x891B, 0xF1DA, 0x891C, 0xD18C, 0x891D, 0xD18D, 0x891E, 0xD18E, 0x891F, 0xD18F, 0x8920, 0xD190, 0x8921, 0xF1D7, 0x8922, 0xD191,
- 0x8923, 0xD192, 0x8924, 0xD193, 0x8925, 0xC8EC, 0x8926, 0xD194, 0x8927, 0xD195, 0x8928, 0xD196, 0x8929, 0xD197, 0x892A, 0xCDCA,
- 0x892B, 0xF1DD, 0x892C, 0xD198, 0x892D, 0xD199, 0x892E, 0xD19A, 0x892F, 0xD19B, 0x8930, 0xE5BD, 0x8931, 0xD19C, 0x8932, 0xD19D,
- 0x8933, 0xD19E, 0x8934, 0xF1DC, 0x8935, 0xD19F, 0x8936, 0xF1DE, 0x8937, 0xD1A0, 0x8938, 0xD240, 0x8939, 0xD241, 0x893A, 0xD242,
- 0x893B, 0xD243, 0x893C, 0xD244, 0x893D, 0xD245, 0x893E, 0xD246, 0x893F, 0xD247, 0x8940, 0xD248, 0x8941, 0xF1DF, 0x8942, 0xD249,
- 0x8943, 0xD24A, 0x8944, 0xCFE5, 0x8945, 0xD24B, 0x8946, 0xD24C, 0x8947, 0xD24D, 0x8948, 0xD24E, 0x8949, 0xD24F, 0x894A, 0xD250,
- 0x894B, 0xD251, 0x894C, 0xD252, 0x894D, 0xD253, 0x894E, 0xD254, 0x894F, 0xD255, 0x8950, 0xD256, 0x8951, 0xD257, 0x8952, 0xD258,
- 0x8953, 0xD259, 0x8954, 0xD25A, 0x8955, 0xD25B, 0x8956, 0xD25C, 0x8957, 0xD25D, 0x8958, 0xD25E, 0x8959, 0xD25F, 0x895A, 0xD260,
- 0x895B, 0xD261, 0x895C, 0xD262, 0x895D, 0xD263, 0x895E, 0xF4C5, 0x895F, 0xBDF3, 0x8960, 0xD264, 0x8961, 0xD265, 0x8962, 0xD266,
- 0x8963, 0xD267, 0x8964, 0xD268, 0x8965, 0xD269, 0x8966, 0xF1E0, 0x8967, 0xD26A, 0x8968, 0xD26B, 0x8969, 0xD26C, 0x896A, 0xD26D,
- 0x896B, 0xD26E, 0x896C, 0xD26F, 0x896D, 0xD270, 0x896E, 0xD271, 0x896F, 0xD272, 0x8970, 0xD273, 0x8971, 0xD274, 0x8972, 0xD275,
- 0x8973, 0xD276, 0x8974, 0xD277, 0x8975, 0xD278, 0x8976, 0xD279, 0x8977, 0xD27A, 0x8978, 0xD27B, 0x8979, 0xD27C, 0x897A, 0xD27D,
- 0x897B, 0xF1E1, 0x897C, 0xD27E, 0x897D, 0xD280, 0x897E, 0xD281, 0x897F, 0xCEF7, 0x8980, 0xD282, 0x8981, 0xD2AA, 0x8982, 0xD283,
- 0x8983, 0xF1FB, 0x8984, 0xD284, 0x8985, 0xD285, 0x8986, 0xB8B2, 0x8987, 0xD286, 0x8988, 0xD287, 0x8989, 0xD288, 0x898A, 0xD289,
- 0x898B, 0xD28A, 0x898C, 0xD28B, 0x898D, 0xD28C, 0x898E, 0xD28D, 0x898F, 0xD28E, 0x8990, 0xD28F, 0x8991, 0xD290, 0x8992, 0xD291,
- 0x8993, 0xD292, 0x8994, 0xD293, 0x8995, 0xD294, 0x8996, 0xD295, 0x8997, 0xD296, 0x8998, 0xD297, 0x8999, 0xD298, 0x899A, 0xD299,
- 0x899B, 0xD29A, 0x899C, 0xD29B, 0x899D, 0xD29C, 0x899E, 0xD29D, 0x899F, 0xD29E, 0x89A0, 0xD29F, 0x89A1, 0xD2A0, 0x89A2, 0xD340,
- 0x89A3, 0xD341, 0x89A4, 0xD342, 0x89A5, 0xD343, 0x89A6, 0xD344, 0x89A7, 0xD345, 0x89A8, 0xD346, 0x89A9, 0xD347, 0x89AA, 0xD348,
- 0x89AB, 0xD349, 0x89AC, 0xD34A, 0x89AD, 0xD34B, 0x89AE, 0xD34C, 0x89AF, 0xD34D, 0x89B0, 0xD34E, 0x89B1, 0xD34F, 0x89B2, 0xD350,
- 0x89B3, 0xD351, 0x89B4, 0xD352, 0x89B5, 0xD353, 0x89B6, 0xD354, 0x89B7, 0xD355, 0x89B8, 0xD356, 0x89B9, 0xD357, 0x89BA, 0xD358,
- 0x89BB, 0xD359, 0x89BC, 0xD35A, 0x89BD, 0xD35B, 0x89BE, 0xD35C, 0x89BF, 0xD35D, 0x89C0, 0xD35E, 0x89C1, 0xBCFB, 0x89C2, 0xB9DB,
- 0x89C3, 0xD35F, 0x89C4, 0xB9E6, 0x89C5, 0xC3D9, 0x89C6, 0xCAD3, 0x89C7, 0xEAE8, 0x89C8, 0xC0C0, 0x89C9, 0xBEF5, 0x89CA, 0xEAE9,
- 0x89CB, 0xEAEA, 0x89CC, 0xEAEB, 0x89CD, 0xD360, 0x89CE, 0xEAEC, 0x89CF, 0xEAED, 0x89D0, 0xEAEE, 0x89D1, 0xEAEF, 0x89D2, 0xBDC7,
- 0x89D3, 0xD361, 0x89D4, 0xD362, 0x89D5, 0xD363, 0x89D6, 0xF5FB, 0x89D7, 0xD364, 0x89D8, 0xD365, 0x89D9, 0xD366, 0x89DA, 0xF5FD,
- 0x89DB, 0xD367, 0x89DC, 0xF5FE, 0x89DD, 0xD368, 0x89DE, 0xF5FC, 0x89DF, 0xD369, 0x89E0, 0xD36A, 0x89E1, 0xD36B, 0x89E2, 0xD36C,
- 0x89E3, 0xBDE2, 0x89E4, 0xD36D, 0x89E5, 0xF6A1, 0x89E6, 0xB4A5, 0x89E7, 0xD36E, 0x89E8, 0xD36F, 0x89E9, 0xD370, 0x89EA, 0xD371,
- 0x89EB, 0xF6A2, 0x89EC, 0xD372, 0x89ED, 0xD373, 0x89EE, 0xD374, 0x89EF, 0xF6A3, 0x89F0, 0xD375, 0x89F1, 0xD376, 0x89F2, 0xD377,
- 0x89F3, 0xECB2, 0x89F4, 0xD378, 0x89F5, 0xD379, 0x89F6, 0xD37A, 0x89F7, 0xD37B, 0x89F8, 0xD37C, 0x89F9, 0xD37D, 0x89FA, 0xD37E,
- 0x89FB, 0xD380, 0x89FC, 0xD381, 0x89FD, 0xD382, 0x89FE, 0xD383, 0x89FF, 0xD384, 0x8A00, 0xD1D4, 0x8A01, 0xD385, 0x8A02, 0xD386,
- 0x8A03, 0xD387, 0x8A04, 0xD388, 0x8A05, 0xD389, 0x8A06, 0xD38A, 0x8A07, 0xD9EA, 0x8A08, 0xD38B, 0x8A09, 0xD38C, 0x8A0A, 0xD38D,
- 0x8A0B, 0xD38E, 0x8A0C, 0xD38F, 0x8A0D, 0xD390, 0x8A0E, 0xD391, 0x8A0F, 0xD392, 0x8A10, 0xD393, 0x8A11, 0xD394, 0x8A12, 0xD395,
- 0x8A13, 0xD396, 0x8A14, 0xD397, 0x8A15, 0xD398, 0x8A16, 0xD399, 0x8A17, 0xD39A, 0x8A18, 0xD39B, 0x8A19, 0xD39C, 0x8A1A, 0xD39D,
- 0x8A1B, 0xD39E, 0x8A1C, 0xD39F, 0x8A1D, 0xD3A0, 0x8A1E, 0xD440, 0x8A1F, 0xD441, 0x8A20, 0xD442, 0x8A21, 0xD443, 0x8A22, 0xD444,
- 0x8A23, 0xD445, 0x8A24, 0xD446, 0x8A25, 0xD447, 0x8A26, 0xD448, 0x8A27, 0xD449, 0x8A28, 0xD44A, 0x8A29, 0xD44B, 0x8A2A, 0xD44C,
- 0x8A2B, 0xD44D, 0x8A2C, 0xD44E, 0x8A2D, 0xD44F, 0x8A2E, 0xD450, 0x8A2F, 0xD451, 0x8A30, 0xD452, 0x8A31, 0xD453, 0x8A32, 0xD454,
- 0x8A33, 0xD455, 0x8A34, 0xD456, 0x8A35, 0xD457, 0x8A36, 0xD458, 0x8A37, 0xD459, 0x8A38, 0xD45A, 0x8A39, 0xD45B, 0x8A3A, 0xD45C,
- 0x8A3B, 0xD45D, 0x8A3C, 0xD45E, 0x8A3D, 0xD45F, 0x8A3E, 0xF6A4, 0x8A3F, 0xD460, 0x8A40, 0xD461, 0x8A41, 0xD462, 0x8A42, 0xD463,
- 0x8A43, 0xD464, 0x8A44, 0xD465, 0x8A45, 0xD466, 0x8A46, 0xD467, 0x8A47, 0xD468, 0x8A48, 0xEEBA, 0x8A49, 0xD469, 0x8A4A, 0xD46A,
- 0x8A4B, 0xD46B, 0x8A4C, 0xD46C, 0x8A4D, 0xD46D, 0x8A4E, 0xD46E, 0x8A4F, 0xD46F, 0x8A50, 0xD470, 0x8A51, 0xD471, 0x8A52, 0xD472,
- 0x8A53, 0xD473, 0x8A54, 0xD474, 0x8A55, 0xD475, 0x8A56, 0xD476, 0x8A57, 0xD477, 0x8A58, 0xD478, 0x8A59, 0xD479, 0x8A5A, 0xD47A,
- 0x8A5B, 0xD47B, 0x8A5C, 0xD47C, 0x8A5D, 0xD47D, 0x8A5E, 0xD47E, 0x8A5F, 0xD480, 0x8A60, 0xD481, 0x8A61, 0xD482, 0x8A62, 0xD483,
- 0x8A63, 0xD484, 0x8A64, 0xD485, 0x8A65, 0xD486, 0x8A66, 0xD487, 0x8A67, 0xD488, 0x8A68, 0xD489, 0x8A69, 0xD48A, 0x8A6A, 0xD48B,
- 0x8A6B, 0xD48C, 0x8A6C, 0xD48D, 0x8A6D, 0xD48E, 0x8A6E, 0xD48F, 0x8A6F, 0xD490, 0x8A70, 0xD491, 0x8A71, 0xD492, 0x8A72, 0xD493,
- 0x8A73, 0xD494, 0x8A74, 0xD495, 0x8A75, 0xD496, 0x8A76, 0xD497, 0x8A77, 0xD498, 0x8A78, 0xD499, 0x8A79, 0xD5B2, 0x8A7A, 0xD49A,
- 0x8A7B, 0xD49B, 0x8A7C, 0xD49C, 0x8A7D, 0xD49D, 0x8A7E, 0xD49E, 0x8A7F, 0xD49F, 0x8A80, 0xD4A0, 0x8A81, 0xD540, 0x8A82, 0xD541,
- 0x8A83, 0xD542, 0x8A84, 0xD543, 0x8A85, 0xD544, 0x8A86, 0xD545, 0x8A87, 0xD546, 0x8A88, 0xD547, 0x8A89, 0xD3FE, 0x8A8A, 0xCCDC,
- 0x8A8B, 0xD548, 0x8A8C, 0xD549, 0x8A8D, 0xD54A, 0x8A8E, 0xD54B, 0x8A8F, 0xD54C, 0x8A90, 0xD54D, 0x8A91, 0xD54E, 0x8A92, 0xD54F,
- 0x8A93, 0xCAC4, 0x8A94, 0xD550, 0x8A95, 0xD551, 0x8A96, 0xD552, 0x8A97, 0xD553, 0x8A98, 0xD554, 0x8A99, 0xD555, 0x8A9A, 0xD556,
- 0x8A9B, 0xD557, 0x8A9C, 0xD558, 0x8A9D, 0xD559, 0x8A9E, 0xD55A, 0x8A9F, 0xD55B, 0x8AA0, 0xD55C, 0x8AA1, 0xD55D, 0x8AA2, 0xD55E,
- 0x8AA3, 0xD55F, 0x8AA4, 0xD560, 0x8AA5, 0xD561, 0x8AA6, 0xD562, 0x8AA7, 0xD563, 0x8AA8, 0xD564, 0x8AA9, 0xD565, 0x8AAA, 0xD566,
- 0x8AAB, 0xD567, 0x8AAC, 0xD568, 0x8AAD, 0xD569, 0x8AAE, 0xD56A, 0x8AAF, 0xD56B, 0x8AB0, 0xD56C, 0x8AB1, 0xD56D, 0x8AB2, 0xD56E,
- 0x8AB3, 0xD56F, 0x8AB4, 0xD570, 0x8AB5, 0xD571, 0x8AB6, 0xD572, 0x8AB7, 0xD573, 0x8AB8, 0xD574, 0x8AB9, 0xD575, 0x8ABA, 0xD576,
- 0x8ABB, 0xD577, 0x8ABC, 0xD578, 0x8ABD, 0xD579, 0x8ABE, 0xD57A, 0x8ABF, 0xD57B, 0x8AC0, 0xD57C, 0x8AC1, 0xD57D, 0x8AC2, 0xD57E,
- 0x8AC3, 0xD580, 0x8AC4, 0xD581, 0x8AC5, 0xD582, 0x8AC6, 0xD583, 0x8AC7, 0xD584, 0x8AC8, 0xD585, 0x8AC9, 0xD586, 0x8ACA, 0xD587,
- 0x8ACB, 0xD588, 0x8ACC, 0xD589, 0x8ACD, 0xD58A, 0x8ACE, 0xD58B, 0x8ACF, 0xD58C, 0x8AD0, 0xD58D, 0x8AD1, 0xD58E, 0x8AD2, 0xD58F,
- 0x8AD3, 0xD590, 0x8AD4, 0xD591, 0x8AD5, 0xD592, 0x8AD6, 0xD593, 0x8AD7, 0xD594, 0x8AD8, 0xD595, 0x8AD9, 0xD596, 0x8ADA, 0xD597,
- 0x8ADB, 0xD598, 0x8ADC, 0xD599, 0x8ADD, 0xD59A, 0x8ADE, 0xD59B, 0x8ADF, 0xD59C, 0x8AE0, 0xD59D, 0x8AE1, 0xD59E, 0x8AE2, 0xD59F,
- 0x8AE3, 0xD5A0, 0x8AE4, 0xD640, 0x8AE5, 0xD641, 0x8AE6, 0xD642, 0x8AE7, 0xD643, 0x8AE8, 0xD644, 0x8AE9, 0xD645, 0x8AEA, 0xD646,
- 0x8AEB, 0xD647, 0x8AEC, 0xD648, 0x8AED, 0xD649, 0x8AEE, 0xD64A, 0x8AEF, 0xD64B, 0x8AF0, 0xD64C, 0x8AF1, 0xD64D, 0x8AF2, 0xD64E,
- 0x8AF3, 0xD64F, 0x8AF4, 0xD650, 0x8AF5, 0xD651, 0x8AF6, 0xD652, 0x8AF7, 0xD653, 0x8AF8, 0xD654, 0x8AF9, 0xD655, 0x8AFA, 0xD656,
- 0x8AFB, 0xD657, 0x8AFC, 0xD658, 0x8AFD, 0xD659, 0x8AFE, 0xD65A, 0x8AFF, 0xD65B, 0x8B00, 0xD65C, 0x8B01, 0xD65D, 0x8B02, 0xD65E,
- 0x8B03, 0xD65F, 0x8B04, 0xD660, 0x8B05, 0xD661, 0x8B06, 0xD662, 0x8B07, 0xE5C0, 0x8B08, 0xD663, 0x8B09, 0xD664, 0x8B0A, 0xD665,
- 0x8B0B, 0xD666, 0x8B0C, 0xD667, 0x8B0D, 0xD668, 0x8B0E, 0xD669, 0x8B0F, 0xD66A, 0x8B10, 0xD66B, 0x8B11, 0xD66C, 0x8B12, 0xD66D,
- 0x8B13, 0xD66E, 0x8B14, 0xD66F, 0x8B15, 0xD670, 0x8B16, 0xD671, 0x8B17, 0xD672, 0x8B18, 0xD673, 0x8B19, 0xD674, 0x8B1A, 0xD675,
- 0x8B1B, 0xD676, 0x8B1C, 0xD677, 0x8B1D, 0xD678, 0x8B1E, 0xD679, 0x8B1F, 0xD67A, 0x8B20, 0xD67B, 0x8B21, 0xD67C, 0x8B22, 0xD67D,
- 0x8B23, 0xD67E, 0x8B24, 0xD680, 0x8B25, 0xD681, 0x8B26, 0xF6A5, 0x8B27, 0xD682, 0x8B28, 0xD683, 0x8B29, 0xD684, 0x8B2A, 0xD685,
- 0x8B2B, 0xD686, 0x8B2C, 0xD687, 0x8B2D, 0xD688, 0x8B2E, 0xD689, 0x8B2F, 0xD68A, 0x8B30, 0xD68B, 0x8B31, 0xD68C, 0x8B32, 0xD68D,
- 0x8B33, 0xD68E, 0x8B34, 0xD68F, 0x8B35, 0xD690, 0x8B36, 0xD691, 0x8B37, 0xD692, 0x8B38, 0xD693, 0x8B39, 0xD694, 0x8B3A, 0xD695,
- 0x8B3B, 0xD696, 0x8B3C, 0xD697, 0x8B3D, 0xD698, 0x8B3E, 0xD699, 0x8B3F, 0xD69A, 0x8B40, 0xD69B, 0x8B41, 0xD69C, 0x8B42, 0xD69D,
- 0x8B43, 0xD69E, 0x8B44, 0xD69F, 0x8B45, 0xD6A0, 0x8B46, 0xD740, 0x8B47, 0xD741, 0x8B48, 0xD742, 0x8B49, 0xD743, 0x8B4A, 0xD744,
- 0x8B4B, 0xD745, 0x8B4C, 0xD746, 0x8B4D, 0xD747, 0x8B4E, 0xD748, 0x8B4F, 0xD749, 0x8B50, 0xD74A, 0x8B51, 0xD74B, 0x8B52, 0xD74C,
- 0x8B53, 0xD74D, 0x8B54, 0xD74E, 0x8B55, 0xD74F, 0x8B56, 0xD750, 0x8B57, 0xD751, 0x8B58, 0xD752, 0x8B59, 0xD753, 0x8B5A, 0xD754,
- 0x8B5B, 0xD755, 0x8B5C, 0xD756, 0x8B5D, 0xD757, 0x8B5E, 0xD758, 0x8B5F, 0xD759, 0x8B60, 0xD75A, 0x8B61, 0xD75B, 0x8B62, 0xD75C,
- 0x8B63, 0xD75D, 0x8B64, 0xD75E, 0x8B65, 0xD75F, 0x8B66, 0xBEAF, 0x8B67, 0xD760, 0x8B68, 0xD761, 0x8B69, 0xD762, 0x8B6A, 0xD763,
- 0x8B6B, 0xD764, 0x8B6C, 0xC6A9, 0x8B6D, 0xD765, 0x8B6E, 0xD766, 0x8B6F, 0xD767, 0x8B70, 0xD768, 0x8B71, 0xD769, 0x8B72, 0xD76A,
- 0x8B73, 0xD76B, 0x8B74, 0xD76C, 0x8B75, 0xD76D, 0x8B76, 0xD76E, 0x8B77, 0xD76F, 0x8B78, 0xD770, 0x8B79, 0xD771, 0x8B7A, 0xD772,
- 0x8B7B, 0xD773, 0x8B7C, 0xD774, 0x8B7D, 0xD775, 0x8B7E, 0xD776, 0x8B7F, 0xD777, 0x8B80, 0xD778, 0x8B81, 0xD779, 0x8B82, 0xD77A,
- 0x8B83, 0xD77B, 0x8B84, 0xD77C, 0x8B85, 0xD77D, 0x8B86, 0xD77E, 0x8B87, 0xD780, 0x8B88, 0xD781, 0x8B89, 0xD782, 0x8B8A, 0xD783,
- 0x8B8B, 0xD784, 0x8B8C, 0xD785, 0x8B8D, 0xD786, 0x8B8E, 0xD787, 0x8B8F, 0xD788, 0x8B90, 0xD789, 0x8B91, 0xD78A, 0x8B92, 0xD78B,
- 0x8B93, 0xD78C, 0x8B94, 0xD78D, 0x8B95, 0xD78E, 0x8B96, 0xD78F, 0x8B97, 0xD790, 0x8B98, 0xD791, 0x8B99, 0xD792, 0x8B9A, 0xD793,
- 0x8B9B, 0xD794, 0x8B9C, 0xD795, 0x8B9D, 0xD796, 0x8B9E, 0xD797, 0x8B9F, 0xD798, 0x8BA0, 0xDAA5, 0x8BA1, 0xBCC6, 0x8BA2, 0xB6A9,
- 0x8BA3, 0xB8BC, 0x8BA4, 0xC8CF, 0x8BA5, 0xBCA5, 0x8BA6, 0xDAA6, 0x8BA7, 0xDAA7, 0x8BA8, 0xCCD6, 0x8BA9, 0xC8C3, 0x8BAA, 0xDAA8,
- 0x8BAB, 0xC6FD, 0x8BAC, 0xD799, 0x8BAD, 0xD1B5, 0x8BAE, 0xD2E9, 0x8BAF, 0xD1B6, 0x8BB0, 0xBCC7, 0x8BB1, 0xD79A, 0x8BB2, 0xBDB2,
- 0x8BB3, 0xBBE4, 0x8BB4, 0xDAA9, 0x8BB5, 0xDAAA, 0x8BB6, 0xD1C8, 0x8BB7, 0xDAAB, 0x8BB8, 0xD0ED, 0x8BB9, 0xB6EF, 0x8BBA, 0xC2DB,
- 0x8BBB, 0xD79B, 0x8BBC, 0xCBCF, 0x8BBD, 0xB7ED, 0x8BBE, 0xC9E8, 0x8BBF, 0xB7C3, 0x8BC0, 0xBEF7, 0x8BC1, 0xD6A4, 0x8BC2, 0xDAAC,
- 0x8BC3, 0xDAAD, 0x8BC4, 0xC6C0, 0x8BC5, 0xD7E7, 0x8BC6, 0xCAB6, 0x8BC7, 0xD79C, 0x8BC8, 0xD5A9, 0x8BC9, 0xCBDF, 0x8BCA, 0xD5EF,
- 0x8BCB, 0xDAAE, 0x8BCC, 0xD6DF, 0x8BCD, 0xB4CA, 0x8BCE, 0xDAB0, 0x8BCF, 0xDAAF, 0x8BD0, 0xD79D, 0x8BD1, 0xD2EB, 0x8BD2, 0xDAB1,
- 0x8BD3, 0xDAB2, 0x8BD4, 0xDAB3, 0x8BD5, 0xCAD4, 0x8BD6, 0xDAB4, 0x8BD7, 0xCAAB, 0x8BD8, 0xDAB5, 0x8BD9, 0xDAB6, 0x8BDA, 0xB3CF,
- 0x8BDB, 0xD6EF, 0x8BDC, 0xDAB7, 0x8BDD, 0xBBB0, 0x8BDE, 0xB5AE, 0x8BDF, 0xDAB8, 0x8BE0, 0xDAB9, 0x8BE1, 0xB9EE, 0x8BE2, 0xD1AF,
- 0x8BE3, 0xD2E8, 0x8BE4, 0xDABA, 0x8BE5, 0xB8C3, 0x8BE6, 0xCFEA, 0x8BE7, 0xB2EF, 0x8BE8, 0xDABB, 0x8BE9, 0xDABC, 0x8BEA, 0xD79E,
- 0x8BEB, 0xBDEB, 0x8BEC, 0xCEDC, 0x8BED, 0xD3EF, 0x8BEE, 0xDABD, 0x8BEF, 0xCEF3, 0x8BF0, 0xDABE, 0x8BF1, 0xD3D5, 0x8BF2, 0xBBE5,
- 0x8BF3, 0xDABF, 0x8BF4, 0xCBB5, 0x8BF5, 0xCBD0, 0x8BF6, 0xDAC0, 0x8BF7, 0xC7EB, 0x8BF8, 0xD6EE, 0x8BF9, 0xDAC1, 0x8BFA, 0xC5B5,
- 0x8BFB, 0xB6C1, 0x8BFC, 0xDAC2, 0x8BFD, 0xB7CC, 0x8BFE, 0xBFCE, 0x8BFF, 0xDAC3, 0x8C00, 0xDAC4, 0x8C01, 0xCBAD, 0x8C02, 0xDAC5,
- 0x8C03, 0xB5F7, 0x8C04, 0xDAC6, 0x8C05, 0xC1C2, 0x8C06, 0xD7BB, 0x8C07, 0xDAC7, 0x8C08, 0xCCB8, 0x8C09, 0xD79F, 0x8C0A, 0xD2EA,
- 0x8C0B, 0xC4B1, 0x8C0C, 0xDAC8, 0x8C0D, 0xB5FD, 0x8C0E, 0xBBD1, 0x8C0F, 0xDAC9, 0x8C10, 0xD0B3, 0x8C11, 0xDACA, 0x8C12, 0xDACB,
- 0x8C13, 0xCEBD, 0x8C14, 0xDACC, 0x8C15, 0xDACD, 0x8C16, 0xDACE, 0x8C17, 0xB2F7, 0x8C18, 0xDAD1, 0x8C19, 0xDACF, 0x8C1A, 0xD1E8,
- 0x8C1B, 0xDAD0, 0x8C1C, 0xC3D5, 0x8C1D, 0xDAD2, 0x8C1E, 0xD7A0, 0x8C1F, 0xDAD3, 0x8C20, 0xDAD4, 0x8C21, 0xDAD5, 0x8C22, 0xD0BB,
- 0x8C23, 0xD2A5, 0x8C24, 0xB0F9, 0x8C25, 0xDAD6, 0x8C26, 0xC7AB, 0x8C27, 0xDAD7, 0x8C28, 0xBDF7, 0x8C29, 0xC3A1, 0x8C2A, 0xDAD8,
- 0x8C2B, 0xDAD9, 0x8C2C, 0xC3FD, 0x8C2D, 0xCCB7, 0x8C2E, 0xDADA, 0x8C2F, 0xDADB, 0x8C30, 0xC0BE, 0x8C31, 0xC6D7, 0x8C32, 0xDADC,
- 0x8C33, 0xDADD, 0x8C34, 0xC7B4, 0x8C35, 0xDADE, 0x8C36, 0xDADF, 0x8C37, 0xB9C8, 0x8C38, 0xD840, 0x8C39, 0xD841, 0x8C3A, 0xD842,
- 0x8C3B, 0xD843, 0x8C3C, 0xD844, 0x8C3D, 0xD845, 0x8C3E, 0xD846, 0x8C3F, 0xD847, 0x8C40, 0xD848, 0x8C41, 0xBBED, 0x8C42, 0xD849,
- 0x8C43, 0xD84A, 0x8C44, 0xD84B, 0x8C45, 0xD84C, 0x8C46, 0xB6B9, 0x8C47, 0xF4F8, 0x8C48, 0xD84D, 0x8C49, 0xF4F9, 0x8C4A, 0xD84E,
- 0x8C4B, 0xD84F, 0x8C4C, 0xCDE3, 0x8C4D, 0xD850, 0x8C4E, 0xD851, 0x8C4F, 0xD852, 0x8C50, 0xD853, 0x8C51, 0xD854, 0x8C52, 0xD855,
- 0x8C53, 0xD856, 0x8C54, 0xD857, 0x8C55, 0xF5B9, 0x8C56, 0xD858, 0x8C57, 0xD859, 0x8C58, 0xD85A, 0x8C59, 0xD85B, 0x8C5A, 0xEBE0,
- 0x8C5B, 0xD85C, 0x8C5C, 0xD85D, 0x8C5D, 0xD85E, 0x8C5E, 0xD85F, 0x8C5F, 0xD860, 0x8C60, 0xD861, 0x8C61, 0xCFF3, 0x8C62, 0xBBBF,
- 0x8C63, 0xD862, 0x8C64, 0xD863, 0x8C65, 0xD864, 0x8C66, 0xD865, 0x8C67, 0xD866, 0x8C68, 0xD867, 0x8C69, 0xD868, 0x8C6A, 0xBAC0,
- 0x8C6B, 0xD4A5, 0x8C6C, 0xD869, 0x8C6D, 0xD86A, 0x8C6E, 0xD86B, 0x8C6F, 0xD86C, 0x8C70, 0xD86D, 0x8C71, 0xD86E, 0x8C72, 0xD86F,
- 0x8C73, 0xE1D9, 0x8C74, 0xD870, 0x8C75, 0xD871, 0x8C76, 0xD872, 0x8C77, 0xD873, 0x8C78, 0xF5F4, 0x8C79, 0xB1AA, 0x8C7A, 0xB2F2,
- 0x8C7B, 0xD874, 0x8C7C, 0xD875, 0x8C7D, 0xD876, 0x8C7E, 0xD877, 0x8C7F, 0xD878, 0x8C80, 0xD879, 0x8C81, 0xD87A, 0x8C82, 0xF5F5,
- 0x8C83, 0xD87B, 0x8C84, 0xD87C, 0x8C85, 0xF5F7, 0x8C86, 0xD87D, 0x8C87, 0xD87E, 0x8C88, 0xD880, 0x8C89, 0xBAD1, 0x8C8A, 0xF5F6,
- 0x8C8B, 0xD881, 0x8C8C, 0xC3B2, 0x8C8D, 0xD882, 0x8C8E, 0xD883, 0x8C8F, 0xD884, 0x8C90, 0xD885, 0x8C91, 0xD886, 0x8C92, 0xD887,
- 0x8C93, 0xD888, 0x8C94, 0xF5F9, 0x8C95, 0xD889, 0x8C96, 0xD88A, 0x8C97, 0xD88B, 0x8C98, 0xF5F8, 0x8C99, 0xD88C, 0x8C9A, 0xD88D,
- 0x8C9B, 0xD88E, 0x8C9C, 0xD88F, 0x8C9D, 0xD890, 0x8C9E, 0xD891, 0x8C9F, 0xD892, 0x8CA0, 0xD893, 0x8CA1, 0xD894, 0x8CA2, 0xD895,
- 0x8CA3, 0xD896, 0x8CA4, 0xD897, 0x8CA5, 0xD898, 0x8CA6, 0xD899, 0x8CA7, 0xD89A, 0x8CA8, 0xD89B, 0x8CA9, 0xD89C, 0x8CAA, 0xD89D,
- 0x8CAB, 0xD89E, 0x8CAC, 0xD89F, 0x8CAD, 0xD8A0, 0x8CAE, 0xD940, 0x8CAF, 0xD941, 0x8CB0, 0xD942, 0x8CB1, 0xD943, 0x8CB2, 0xD944,
- 0x8CB3, 0xD945, 0x8CB4, 0xD946, 0x8CB5, 0xD947, 0x8CB6, 0xD948, 0x8CB7, 0xD949, 0x8CB8, 0xD94A, 0x8CB9, 0xD94B, 0x8CBA, 0xD94C,
- 0x8CBB, 0xD94D, 0x8CBC, 0xD94E, 0x8CBD, 0xD94F, 0x8CBE, 0xD950, 0x8CBF, 0xD951, 0x8CC0, 0xD952, 0x8CC1, 0xD953, 0x8CC2, 0xD954,
- 0x8CC3, 0xD955, 0x8CC4, 0xD956, 0x8CC5, 0xD957, 0x8CC6, 0xD958, 0x8CC7, 0xD959, 0x8CC8, 0xD95A, 0x8CC9, 0xD95B, 0x8CCA, 0xD95C,
- 0x8CCB, 0xD95D, 0x8CCC, 0xD95E, 0x8CCD, 0xD95F, 0x8CCE, 0xD960, 0x8CCF, 0xD961, 0x8CD0, 0xD962, 0x8CD1, 0xD963, 0x8CD2, 0xD964,
- 0x8CD3, 0xD965, 0x8CD4, 0xD966, 0x8CD5, 0xD967, 0x8CD6, 0xD968, 0x8CD7, 0xD969, 0x8CD8, 0xD96A, 0x8CD9, 0xD96B, 0x8CDA, 0xD96C,
- 0x8CDB, 0xD96D, 0x8CDC, 0xD96E, 0x8CDD, 0xD96F, 0x8CDE, 0xD970, 0x8CDF, 0xD971, 0x8CE0, 0xD972, 0x8CE1, 0xD973, 0x8CE2, 0xD974,
- 0x8CE3, 0xD975, 0x8CE4, 0xD976, 0x8CE5, 0xD977, 0x8CE6, 0xD978, 0x8CE7, 0xD979, 0x8CE8, 0xD97A, 0x8CE9, 0xD97B, 0x8CEA, 0xD97C,
- 0x8CEB, 0xD97D, 0x8CEC, 0xD97E, 0x8CED, 0xD980, 0x8CEE, 0xD981, 0x8CEF, 0xD982, 0x8CF0, 0xD983, 0x8CF1, 0xD984, 0x8CF2, 0xD985,
- 0x8CF3, 0xD986, 0x8CF4, 0xD987, 0x8CF5, 0xD988, 0x8CF6, 0xD989, 0x8CF7, 0xD98A, 0x8CF8, 0xD98B, 0x8CF9, 0xD98C, 0x8CFA, 0xD98D,
- 0x8CFB, 0xD98E, 0x8CFC, 0xD98F, 0x8CFD, 0xD990, 0x8CFE, 0xD991, 0x8CFF, 0xD992, 0x8D00, 0xD993, 0x8D01, 0xD994, 0x8D02, 0xD995,
- 0x8D03, 0xD996, 0x8D04, 0xD997, 0x8D05, 0xD998, 0x8D06, 0xD999, 0x8D07, 0xD99A, 0x8D08, 0xD99B, 0x8D09, 0xD99C, 0x8D0A, 0xD99D,
- 0x8D0B, 0xD99E, 0x8D0C, 0xD99F, 0x8D0D, 0xD9A0, 0x8D0E, 0xDA40, 0x8D0F, 0xDA41, 0x8D10, 0xDA42, 0x8D11, 0xDA43, 0x8D12, 0xDA44,
- 0x8D13, 0xDA45, 0x8D14, 0xDA46, 0x8D15, 0xDA47, 0x8D16, 0xDA48, 0x8D17, 0xDA49, 0x8D18, 0xDA4A, 0x8D19, 0xDA4B, 0x8D1A, 0xDA4C,
- 0x8D1B, 0xDA4D, 0x8D1C, 0xDA4E, 0x8D1D, 0xB1B4, 0x8D1E, 0xD5EA, 0x8D1F, 0xB8BA, 0x8D20, 0xDA4F, 0x8D21, 0xB9B1, 0x8D22, 0xB2C6,
- 0x8D23, 0xD4F0, 0x8D24, 0xCFCD, 0x8D25, 0xB0DC, 0x8D26, 0xD5CB, 0x8D27, 0xBBF5, 0x8D28, 0xD6CA, 0x8D29, 0xB7B7, 0x8D2A, 0xCCB0,
- 0x8D2B, 0xC6B6, 0x8D2C, 0xB1E1, 0x8D2D, 0xB9BA, 0x8D2E, 0xD6FC, 0x8D2F, 0xB9E1, 0x8D30, 0xB7A1, 0x8D31, 0xBCFA, 0x8D32, 0xEADA,
- 0x8D33, 0xEADB, 0x8D34, 0xCCF9, 0x8D35, 0xB9F3, 0x8D36, 0xEADC, 0x8D37, 0xB4FB, 0x8D38, 0xC3B3, 0x8D39, 0xB7D1, 0x8D3A, 0xBAD8,
- 0x8D3B, 0xEADD, 0x8D3C, 0xD4F4, 0x8D3D, 0xEADE, 0x8D3E, 0xBCD6, 0x8D3F, 0xBBDF, 0x8D40, 0xEADF, 0x8D41, 0xC1DE, 0x8D42, 0xC2B8,
- 0x8D43, 0xD4DF, 0x8D44, 0xD7CA, 0x8D45, 0xEAE0, 0x8D46, 0xEAE1, 0x8D47, 0xEAE4, 0x8D48, 0xEAE2, 0x8D49, 0xEAE3, 0x8D4A, 0xC9DE,
- 0x8D4B, 0xB8B3, 0x8D4C, 0xB6C4, 0x8D4D, 0xEAE5, 0x8D4E, 0xCAEA, 0x8D4F, 0xC9CD, 0x8D50, 0xB4CD, 0x8D51, 0xDA50, 0x8D52, 0xDA51,
- 0x8D53, 0xE2D9, 0x8D54, 0xC5E2, 0x8D55, 0xEAE6, 0x8D56, 0xC0B5, 0x8D57, 0xDA52, 0x8D58, 0xD7B8, 0x8D59, 0xEAE7, 0x8D5A, 0xD7AC,
- 0x8D5B, 0xC8FC, 0x8D5C, 0xD8D3, 0x8D5D, 0xD8CD, 0x8D5E, 0xD4DE, 0x8D5F, 0xDA53, 0x8D60, 0xD4F9, 0x8D61, 0xC9C4, 0x8D62, 0xD3AE,
- 0x8D63, 0xB8D3, 0x8D64, 0xB3E0, 0x8D65, 0xDA54, 0x8D66, 0xC9E2, 0x8D67, 0xF4F6, 0x8D68, 0xDA55, 0x8D69, 0xDA56, 0x8D6A, 0xDA57,
- 0x8D6B, 0xBAD5, 0x8D6C, 0xDA58, 0x8D6D, 0xF4F7, 0x8D6E, 0xDA59, 0x8D6F, 0xDA5A, 0x8D70, 0xD7DF, 0x8D71, 0xDA5B, 0x8D72, 0xDA5C,
- 0x8D73, 0xF4F1, 0x8D74, 0xB8B0, 0x8D75, 0xD5D4, 0x8D76, 0xB8CF, 0x8D77, 0xC6F0, 0x8D78, 0xDA5D, 0x8D79, 0xDA5E, 0x8D7A, 0xDA5F,
- 0x8D7B, 0xDA60, 0x8D7C, 0xDA61, 0x8D7D, 0xDA62, 0x8D7E, 0xDA63, 0x8D7F, 0xDA64, 0x8D80, 0xDA65, 0x8D81, 0xB3C3, 0x8D82, 0xDA66,
- 0x8D83, 0xDA67, 0x8D84, 0xF4F2, 0x8D85, 0xB3AC, 0x8D86, 0xDA68, 0x8D87, 0xDA69, 0x8D88, 0xDA6A, 0x8D89, 0xDA6B, 0x8D8A, 0xD4BD,
- 0x8D8B, 0xC7F7, 0x8D8C, 0xDA6C, 0x8D8D, 0xDA6D, 0x8D8E, 0xDA6E, 0x8D8F, 0xDA6F, 0x8D90, 0xDA70, 0x8D91, 0xF4F4, 0x8D92, 0xDA71,
- 0x8D93, 0xDA72, 0x8D94, 0xF4F3, 0x8D95, 0xDA73, 0x8D96, 0xDA74, 0x8D97, 0xDA75, 0x8D98, 0xDA76, 0x8D99, 0xDA77, 0x8D9A, 0xDA78,
- 0x8D9B, 0xDA79, 0x8D9C, 0xDA7A, 0x8D9D, 0xDA7B, 0x8D9E, 0xDA7C, 0x8D9F, 0xCCCB, 0x8DA0, 0xDA7D, 0x8DA1, 0xDA7E, 0x8DA2, 0xDA80,
- 0x8DA3, 0xC8A4, 0x8DA4, 0xDA81, 0x8DA5, 0xDA82, 0x8DA6, 0xDA83, 0x8DA7, 0xDA84, 0x8DA8, 0xDA85, 0x8DA9, 0xDA86, 0x8DAA, 0xDA87,
- 0x8DAB, 0xDA88, 0x8DAC, 0xDA89, 0x8DAD, 0xDA8A, 0x8DAE, 0xDA8B, 0x8DAF, 0xDA8C, 0x8DB0, 0xDA8D, 0x8DB1, 0xF4F5, 0x8DB2, 0xDA8E,
- 0x8DB3, 0xD7E3, 0x8DB4, 0xC5BF, 0x8DB5, 0xF5C0, 0x8DB6, 0xDA8F, 0x8DB7, 0xDA90, 0x8DB8, 0xF5BB, 0x8DB9, 0xDA91, 0x8DBA, 0xF5C3,
- 0x8DBB, 0xDA92, 0x8DBC, 0xF5C2, 0x8DBD, 0xDA93, 0x8DBE, 0xD6BA, 0x8DBF, 0xF5C1, 0x8DC0, 0xDA94, 0x8DC1, 0xDA95, 0x8DC2, 0xDA96,
- 0x8DC3, 0xD4BE, 0x8DC4, 0xF5C4, 0x8DC5, 0xDA97, 0x8DC6, 0xF5CC, 0x8DC7, 0xDA98, 0x8DC8, 0xDA99, 0x8DC9, 0xDA9A, 0x8DCA, 0xDA9B,
- 0x8DCB, 0xB0CF, 0x8DCC, 0xB5F8, 0x8DCD, 0xDA9C, 0x8DCE, 0xF5C9, 0x8DCF, 0xF5CA, 0x8DD0, 0xDA9D, 0x8DD1, 0xC5DC, 0x8DD2, 0xDA9E,
- 0x8DD3, 0xDA9F, 0x8DD4, 0xDAA0, 0x8DD5, 0xDB40, 0x8DD6, 0xF5C5, 0x8DD7, 0xF5C6, 0x8DD8, 0xDB41, 0x8DD9, 0xDB42, 0x8DDA, 0xF5C7,
- 0x8DDB, 0xF5CB, 0x8DDC, 0xDB43, 0x8DDD, 0xBEE0, 0x8DDE, 0xF5C8, 0x8DDF, 0xB8FA, 0x8DE0, 0xDB44, 0x8DE1, 0xDB45, 0x8DE2, 0xDB46,
- 0x8DE3, 0xF5D0, 0x8DE4, 0xF5D3, 0x8DE5, 0xDB47, 0x8DE6, 0xDB48, 0x8DE7, 0xDB49, 0x8DE8, 0xBFE7, 0x8DE9, 0xDB4A, 0x8DEA, 0xB9F2,
- 0x8DEB, 0xF5BC, 0x8DEC, 0xF5CD, 0x8DED, 0xDB4B, 0x8DEE, 0xDB4C, 0x8DEF, 0xC2B7, 0x8DF0, 0xDB4D, 0x8DF1, 0xDB4E, 0x8DF2, 0xDB4F,
- 0x8DF3, 0xCCF8, 0x8DF4, 0xDB50, 0x8DF5, 0xBCF9, 0x8DF6, 0xDB51, 0x8DF7, 0xF5CE, 0x8DF8, 0xF5CF, 0x8DF9, 0xF5D1, 0x8DFA, 0xB6E5,
- 0x8DFB, 0xF5D2, 0x8DFC, 0xDB52, 0x8DFD, 0xF5D5, 0x8DFE, 0xDB53, 0x8DFF, 0xDB54, 0x8E00, 0xDB55, 0x8E01, 0xDB56, 0x8E02, 0xDB57,
- 0x8E03, 0xDB58, 0x8E04, 0xDB59, 0x8E05, 0xF5BD, 0x8E06, 0xDB5A, 0x8E07, 0xDB5B, 0x8E08, 0xDB5C, 0x8E09, 0xF5D4, 0x8E0A, 0xD3BB,
- 0x8E0B, 0xDB5D, 0x8E0C, 0xB3EC, 0x8E0D, 0xDB5E, 0x8E0E, 0xDB5F, 0x8E0F, 0xCCA4, 0x8E10, 0xDB60, 0x8E11, 0xDB61, 0x8E12, 0xDB62,
- 0x8E13, 0xDB63, 0x8E14, 0xF5D6, 0x8E15, 0xDB64, 0x8E16, 0xDB65, 0x8E17, 0xDB66, 0x8E18, 0xDB67, 0x8E19, 0xDB68, 0x8E1A, 0xDB69,
- 0x8E1B, 0xDB6A, 0x8E1C, 0xDB6B, 0x8E1D, 0xF5D7, 0x8E1E, 0xBEE1, 0x8E1F, 0xF5D8, 0x8E20, 0xDB6C, 0x8E21, 0xDB6D, 0x8E22, 0xCCDF,
- 0x8E23, 0xF5DB, 0x8E24, 0xDB6E, 0x8E25, 0xDB6F, 0x8E26, 0xDB70, 0x8E27, 0xDB71, 0x8E28, 0xDB72, 0x8E29, 0xB2C8, 0x8E2A, 0xD7D9,
- 0x8E2B, 0xDB73, 0x8E2C, 0xF5D9, 0x8E2D, 0xDB74, 0x8E2E, 0xF5DA, 0x8E2F, 0xF5DC, 0x8E30, 0xDB75, 0x8E31, 0xF5E2, 0x8E32, 0xDB76,
- 0x8E33, 0xDB77, 0x8E34, 0xDB78, 0x8E35, 0xF5E0, 0x8E36, 0xDB79, 0x8E37, 0xDB7A, 0x8E38, 0xDB7B, 0x8E39, 0xF5DF, 0x8E3A, 0xF5DD,
- 0x8E3B, 0xDB7C, 0x8E3C, 0xDB7D, 0x8E3D, 0xF5E1, 0x8E3E, 0xDB7E, 0x8E3F, 0xDB80, 0x8E40, 0xF5DE, 0x8E41, 0xF5E4, 0x8E42, 0xF5E5,
- 0x8E43, 0xDB81, 0x8E44, 0xCCE3, 0x8E45, 0xDB82, 0x8E46, 0xDB83, 0x8E47, 0xE5BF, 0x8E48, 0xB5B8, 0x8E49, 0xF5E3, 0x8E4A, 0xF5E8,
- 0x8E4B, 0xCCA3, 0x8E4C, 0xDB84, 0x8E4D, 0xDB85, 0x8E4E, 0xDB86, 0x8E4F, 0xDB87, 0x8E50, 0xDB88, 0x8E51, 0xF5E6, 0x8E52, 0xF5E7,
- 0x8E53, 0xDB89, 0x8E54, 0xDB8A, 0x8E55, 0xDB8B, 0x8E56, 0xDB8C, 0x8E57, 0xDB8D, 0x8E58, 0xDB8E, 0x8E59, 0xF5BE, 0x8E5A, 0xDB8F,
- 0x8E5B, 0xDB90, 0x8E5C, 0xDB91, 0x8E5D, 0xDB92, 0x8E5E, 0xDB93, 0x8E5F, 0xDB94, 0x8E60, 0xDB95, 0x8E61, 0xDB96, 0x8E62, 0xDB97,
- 0x8E63, 0xDB98, 0x8E64, 0xDB99, 0x8E65, 0xDB9A, 0x8E66, 0xB1C4, 0x8E67, 0xDB9B, 0x8E68, 0xDB9C, 0x8E69, 0xF5BF, 0x8E6A, 0xDB9D,
- 0x8E6B, 0xDB9E, 0x8E6C, 0xB5C5, 0x8E6D, 0xB2E4, 0x8E6E, 0xDB9F, 0x8E6F, 0xF5EC, 0x8E70, 0xF5E9, 0x8E71, 0xDBA0, 0x8E72, 0xB6D7,
- 0x8E73, 0xDC40, 0x8E74, 0xF5ED, 0x8E75, 0xDC41, 0x8E76, 0xF5EA, 0x8E77, 0xDC42, 0x8E78, 0xDC43, 0x8E79, 0xDC44, 0x8E7A, 0xDC45,
- 0x8E7B, 0xDC46, 0x8E7C, 0xF5EB, 0x8E7D, 0xDC47, 0x8E7E, 0xDC48, 0x8E7F, 0xB4DA, 0x8E80, 0xDC49, 0x8E81, 0xD4EA, 0x8E82, 0xDC4A,
- 0x8E83, 0xDC4B, 0x8E84, 0xDC4C, 0x8E85, 0xF5EE, 0x8E86, 0xDC4D, 0x8E87, 0xB3F9, 0x8E88, 0xDC4E, 0x8E89, 0xDC4F, 0x8E8A, 0xDC50,
- 0x8E8B, 0xDC51, 0x8E8C, 0xDC52, 0x8E8D, 0xDC53, 0x8E8E, 0xDC54, 0x8E8F, 0xF5EF, 0x8E90, 0xF5F1, 0x8E91, 0xDC55, 0x8E92, 0xDC56,
- 0x8E93, 0xDC57, 0x8E94, 0xF5F0, 0x8E95, 0xDC58, 0x8E96, 0xDC59, 0x8E97, 0xDC5A, 0x8E98, 0xDC5B, 0x8E99, 0xDC5C, 0x8E9A, 0xDC5D,
- 0x8E9B, 0xDC5E, 0x8E9C, 0xF5F2, 0x8E9D, 0xDC5F, 0x8E9E, 0xF5F3, 0x8E9F, 0xDC60, 0x8EA0, 0xDC61, 0x8EA1, 0xDC62, 0x8EA2, 0xDC63,
- 0x8EA3, 0xDC64, 0x8EA4, 0xDC65, 0x8EA5, 0xDC66, 0x8EA6, 0xDC67, 0x8EA7, 0xDC68, 0x8EA8, 0xDC69, 0x8EA9, 0xDC6A, 0x8EAA, 0xDC6B,
- 0x8EAB, 0xC9ED, 0x8EAC, 0xB9AA, 0x8EAD, 0xDC6C, 0x8EAE, 0xDC6D, 0x8EAF, 0xC7FB, 0x8EB0, 0xDC6E, 0x8EB1, 0xDC6F, 0x8EB2, 0xB6E3,
- 0x8EB3, 0xDC70, 0x8EB4, 0xDC71, 0x8EB5, 0xDC72, 0x8EB6, 0xDC73, 0x8EB7, 0xDC74, 0x8EB8, 0xDC75, 0x8EB9, 0xDC76, 0x8EBA, 0xCCC9,
- 0x8EBB, 0xDC77, 0x8EBC, 0xDC78, 0x8EBD, 0xDC79, 0x8EBE, 0xDC7A, 0x8EBF, 0xDC7B, 0x8EC0, 0xDC7C, 0x8EC1, 0xDC7D, 0x8EC2, 0xDC7E,
- 0x8EC3, 0xDC80, 0x8EC4, 0xDC81, 0x8EC5, 0xDC82, 0x8EC6, 0xDC83, 0x8EC7, 0xDC84, 0x8EC8, 0xDC85, 0x8EC9, 0xDC86, 0x8ECA, 0xDC87,
- 0x8ECB, 0xDC88, 0x8ECC, 0xDC89, 0x8ECD, 0xDC8A, 0x8ECE, 0xEAA6, 0x8ECF, 0xDC8B, 0x8ED0, 0xDC8C, 0x8ED1, 0xDC8D, 0x8ED2, 0xDC8E,
- 0x8ED3, 0xDC8F, 0x8ED4, 0xDC90, 0x8ED5, 0xDC91, 0x8ED6, 0xDC92, 0x8ED7, 0xDC93, 0x8ED8, 0xDC94, 0x8ED9, 0xDC95, 0x8EDA, 0xDC96,
- 0x8EDB, 0xDC97, 0x8EDC, 0xDC98, 0x8EDD, 0xDC99, 0x8EDE, 0xDC9A, 0x8EDF, 0xDC9B, 0x8EE0, 0xDC9C, 0x8EE1, 0xDC9D, 0x8EE2, 0xDC9E,
- 0x8EE3, 0xDC9F, 0x8EE4, 0xDCA0, 0x8EE5, 0xDD40, 0x8EE6, 0xDD41, 0x8EE7, 0xDD42, 0x8EE8, 0xDD43, 0x8EE9, 0xDD44, 0x8EEA, 0xDD45,
- 0x8EEB, 0xDD46, 0x8EEC, 0xDD47, 0x8EED, 0xDD48, 0x8EEE, 0xDD49, 0x8EEF, 0xDD4A, 0x8EF0, 0xDD4B, 0x8EF1, 0xDD4C, 0x8EF2, 0xDD4D,
- 0x8EF3, 0xDD4E, 0x8EF4, 0xDD4F, 0x8EF5, 0xDD50, 0x8EF6, 0xDD51, 0x8EF7, 0xDD52, 0x8EF8, 0xDD53, 0x8EF9, 0xDD54, 0x8EFA, 0xDD55,
- 0x8EFB, 0xDD56, 0x8EFC, 0xDD57, 0x8EFD, 0xDD58, 0x8EFE, 0xDD59, 0x8EFF, 0xDD5A, 0x8F00, 0xDD5B, 0x8F01, 0xDD5C, 0x8F02, 0xDD5D,
- 0x8F03, 0xDD5E, 0x8F04, 0xDD5F, 0x8F05, 0xDD60, 0x8F06, 0xDD61, 0x8F07, 0xDD62, 0x8F08, 0xDD63, 0x8F09, 0xDD64, 0x8F0A, 0xDD65,
- 0x8F0B, 0xDD66, 0x8F0C, 0xDD67, 0x8F0D, 0xDD68, 0x8F0E, 0xDD69, 0x8F0F, 0xDD6A, 0x8F10, 0xDD6B, 0x8F11, 0xDD6C, 0x8F12, 0xDD6D,
- 0x8F13, 0xDD6E, 0x8F14, 0xDD6F, 0x8F15, 0xDD70, 0x8F16, 0xDD71, 0x8F17, 0xDD72, 0x8F18, 0xDD73, 0x8F19, 0xDD74, 0x8F1A, 0xDD75,
- 0x8F1B, 0xDD76, 0x8F1C, 0xDD77, 0x8F1D, 0xDD78, 0x8F1E, 0xDD79, 0x8F1F, 0xDD7A, 0x8F20, 0xDD7B, 0x8F21, 0xDD7C, 0x8F22, 0xDD7D,
- 0x8F23, 0xDD7E, 0x8F24, 0xDD80, 0x8F25, 0xDD81, 0x8F26, 0xDD82, 0x8F27, 0xDD83, 0x8F28, 0xDD84, 0x8F29, 0xDD85, 0x8F2A, 0xDD86,
- 0x8F2B, 0xDD87, 0x8F2C, 0xDD88, 0x8F2D, 0xDD89, 0x8F2E, 0xDD8A, 0x8F2F, 0xDD8B, 0x8F30, 0xDD8C, 0x8F31, 0xDD8D, 0x8F32, 0xDD8E,
- 0x8F33, 0xDD8F, 0x8F34, 0xDD90, 0x8F35, 0xDD91, 0x8F36, 0xDD92, 0x8F37, 0xDD93, 0x8F38, 0xDD94, 0x8F39, 0xDD95, 0x8F3A, 0xDD96,
- 0x8F3B, 0xDD97, 0x8F3C, 0xDD98, 0x8F3D, 0xDD99, 0x8F3E, 0xDD9A, 0x8F3F, 0xDD9B, 0x8F40, 0xDD9C, 0x8F41, 0xDD9D, 0x8F42, 0xDD9E,
- 0x8F43, 0xDD9F, 0x8F44, 0xDDA0, 0x8F45, 0xDE40, 0x8F46, 0xDE41, 0x8F47, 0xDE42, 0x8F48, 0xDE43, 0x8F49, 0xDE44, 0x8F4A, 0xDE45,
- 0x8F4B, 0xDE46, 0x8F4C, 0xDE47, 0x8F4D, 0xDE48, 0x8F4E, 0xDE49, 0x8F4F, 0xDE4A, 0x8F50, 0xDE4B, 0x8F51, 0xDE4C, 0x8F52, 0xDE4D,
- 0x8F53, 0xDE4E, 0x8F54, 0xDE4F, 0x8F55, 0xDE50, 0x8F56, 0xDE51, 0x8F57, 0xDE52, 0x8F58, 0xDE53, 0x8F59, 0xDE54, 0x8F5A, 0xDE55,
- 0x8F5B, 0xDE56, 0x8F5C, 0xDE57, 0x8F5D, 0xDE58, 0x8F5E, 0xDE59, 0x8F5F, 0xDE5A, 0x8F60, 0xDE5B, 0x8F61, 0xDE5C, 0x8F62, 0xDE5D,
- 0x8F63, 0xDE5E, 0x8F64, 0xDE5F, 0x8F65, 0xDE60, 0x8F66, 0xB3B5, 0x8F67, 0xD4FE, 0x8F68, 0xB9EC, 0x8F69, 0xD0F9, 0x8F6A, 0xDE61,
- 0x8F6B, 0xE9ED, 0x8F6C, 0xD7AA, 0x8F6D, 0xE9EE, 0x8F6E, 0xC2D6, 0x8F6F, 0xC8ED, 0x8F70, 0xBAE4, 0x8F71, 0xE9EF, 0x8F72, 0xE9F0,
- 0x8F73, 0xE9F1, 0x8F74, 0xD6E1, 0x8F75, 0xE9F2, 0x8F76, 0xE9F3, 0x8F77, 0xE9F5, 0x8F78, 0xE9F4, 0x8F79, 0xE9F6, 0x8F7A, 0xE9F7,
- 0x8F7B, 0xC7E1, 0x8F7C, 0xE9F8, 0x8F7D, 0xD4D8, 0x8F7E, 0xE9F9, 0x8F7F, 0xBDCE, 0x8F80, 0xDE62, 0x8F81, 0xE9FA, 0x8F82, 0xE9FB,
- 0x8F83, 0xBDCF, 0x8F84, 0xE9FC, 0x8F85, 0xB8A8, 0x8F86, 0xC1BE, 0x8F87, 0xE9FD, 0x8F88, 0xB1B2, 0x8F89, 0xBBD4, 0x8F8A, 0xB9F5,
- 0x8F8B, 0xE9FE, 0x8F8C, 0xDE63, 0x8F8D, 0xEAA1, 0x8F8E, 0xEAA2, 0x8F8F, 0xEAA3, 0x8F90, 0xB7F8, 0x8F91, 0xBCAD, 0x8F92, 0xDE64,
- 0x8F93, 0xCAE4, 0x8F94, 0xE0CE, 0x8F95, 0xD4AF, 0x8F96, 0xCFBD, 0x8F97, 0xD5B7, 0x8F98, 0xEAA4, 0x8F99, 0xD5DE, 0x8F9A, 0xEAA5,
- 0x8F9B, 0xD0C1, 0x8F9C, 0xB9BC, 0x8F9D, 0xDE65, 0x8F9E, 0xB4C7, 0x8F9F, 0xB1D9, 0x8FA0, 0xDE66, 0x8FA1, 0xDE67, 0x8FA2, 0xDE68,
- 0x8FA3, 0xC0B1, 0x8FA4, 0xDE69, 0x8FA5, 0xDE6A, 0x8FA6, 0xDE6B, 0x8FA7, 0xDE6C, 0x8FA8, 0xB1E6, 0x8FA9, 0xB1E7, 0x8FAA, 0xDE6D,
- 0x8FAB, 0xB1E8, 0x8FAC, 0xDE6E, 0x8FAD, 0xDE6F, 0x8FAE, 0xDE70, 0x8FAF, 0xDE71, 0x8FB0, 0xB3BD, 0x8FB1, 0xC8E8, 0x8FB2, 0xDE72,
- 0x8FB3, 0xDE73, 0x8FB4, 0xDE74, 0x8FB5, 0xDE75, 0x8FB6, 0xE5C1, 0x8FB7, 0xDE76, 0x8FB8, 0xDE77, 0x8FB9, 0xB1DF, 0x8FBA, 0xDE78,
- 0x8FBB, 0xDE79, 0x8FBC, 0xDE7A, 0x8FBD, 0xC1C9, 0x8FBE, 0xB4EF, 0x8FBF, 0xDE7B, 0x8FC0, 0xDE7C, 0x8FC1, 0xC7A8, 0x8FC2, 0xD3D8,
- 0x8FC3, 0xDE7D, 0x8FC4, 0xC6F9, 0x8FC5, 0xD1B8, 0x8FC6, 0xDE7E, 0x8FC7, 0xB9FD, 0x8FC8, 0xC2F5, 0x8FC9, 0xDE80, 0x8FCA, 0xDE81,
- 0x8FCB, 0xDE82, 0x8FCC, 0xDE83, 0x8FCD, 0xDE84, 0x8FCE, 0xD3AD, 0x8FCF, 0xDE85, 0x8FD0, 0xD4CB, 0x8FD1, 0xBDFC, 0x8FD2, 0xDE86,
- 0x8FD3, 0xE5C2, 0x8FD4, 0xB7B5, 0x8FD5, 0xE5C3, 0x8FD6, 0xDE87, 0x8FD7, 0xDE88, 0x8FD8, 0xBBB9, 0x8FD9, 0xD5E2, 0x8FDA, 0xDE89,
- 0x8FDB, 0xBDF8, 0x8FDC, 0xD4B6, 0x8FDD, 0xCEA5, 0x8FDE, 0xC1AC, 0x8FDF, 0xB3D9, 0x8FE0, 0xDE8A, 0x8FE1, 0xDE8B, 0x8FE2, 0xCCF6,
- 0x8FE3, 0xDE8C, 0x8FE4, 0xE5C6, 0x8FE5, 0xE5C4, 0x8FE6, 0xE5C8, 0x8FE7, 0xDE8D, 0x8FE8, 0xE5CA, 0x8FE9, 0xE5C7, 0x8FEA, 0xB5CF,
- 0x8FEB, 0xC6C8, 0x8FEC, 0xDE8E, 0x8FED, 0xB5FC, 0x8FEE, 0xE5C5, 0x8FEF, 0xDE8F, 0x8FF0, 0xCAF6, 0x8FF1, 0xDE90, 0x8FF2, 0xDE91,
- 0x8FF3, 0xE5C9, 0x8FF4, 0xDE92, 0x8FF5, 0xDE93, 0x8FF6, 0xDE94, 0x8FF7, 0xC3D4, 0x8FF8, 0xB1C5, 0x8FF9, 0xBCA3, 0x8FFA, 0xDE95,
- 0x8FFB, 0xDE96, 0x8FFC, 0xDE97, 0x8FFD, 0xD7B7, 0x8FFE, 0xDE98, 0x8FFF, 0xDE99, 0x9000, 0xCDCB, 0x9001, 0xCBCD, 0x9002, 0xCACA,
- 0x9003, 0xCCD3, 0x9004, 0xE5CC, 0x9005, 0xE5CB, 0x9006, 0xC4E6, 0x9007, 0xDE9A, 0x9008, 0xDE9B, 0x9009, 0xD1A1, 0x900A, 0xD1B7,
- 0x900B, 0xE5CD, 0x900C, 0xDE9C, 0x900D, 0xE5D0, 0x900E, 0xDE9D, 0x900F, 0xCDB8, 0x9010, 0xD6F0, 0x9011, 0xE5CF, 0x9012, 0xB5DD,
- 0x9013, 0xDE9E, 0x9014, 0xCDBE, 0x9015, 0xDE9F, 0x9016, 0xE5D1, 0x9017, 0xB6BA, 0x9018, 0xDEA0, 0x9019, 0xDF40, 0x901A, 0xCDA8,
- 0x901B, 0xB9E4, 0x901C, 0xDF41, 0x901D, 0xCAC5, 0x901E, 0xB3D1, 0x901F, 0xCBD9, 0x9020, 0xD4EC, 0x9021, 0xE5D2, 0x9022, 0xB7EA,
- 0x9023, 0xDF42, 0x9024, 0xDF43, 0x9025, 0xDF44, 0x9026, 0xE5CE, 0x9027, 0xDF45, 0x9028, 0xDF46, 0x9029, 0xDF47, 0x902A, 0xDF48,
- 0x902B, 0xDF49, 0x902C, 0xDF4A, 0x902D, 0xE5D5, 0x902E, 0xB4FE, 0x902F, 0xE5D6, 0x9030, 0xDF4B, 0x9031, 0xDF4C, 0x9032, 0xDF4D,
- 0x9033, 0xDF4E, 0x9034, 0xDF4F, 0x9035, 0xE5D3, 0x9036, 0xE5D4, 0x9037, 0xDF50, 0x9038, 0xD2DD, 0x9039, 0xDF51, 0x903A, 0xDF52,
- 0x903B, 0xC2DF, 0x903C, 0xB1C6, 0x903D, 0xDF53, 0x903E, 0xD3E2, 0x903F, 0xDF54, 0x9040, 0xDF55, 0x9041, 0xB6DD, 0x9042, 0xCBEC,
- 0x9043, 0xDF56, 0x9044, 0xE5D7, 0x9045, 0xDF57, 0x9046, 0xDF58, 0x9047, 0xD3F6, 0x9048, 0xDF59, 0x9049, 0xDF5A, 0x904A, 0xDF5B,
- 0x904B, 0xDF5C, 0x904C, 0xDF5D, 0x904D, 0xB1E9, 0x904E, 0xDF5E, 0x904F, 0xB6F4, 0x9050, 0xE5DA, 0x9051, 0xE5D8, 0x9052, 0xE5D9,
- 0x9053, 0xB5C0, 0x9054, 0xDF5F, 0x9055, 0xDF60, 0x9056, 0xDF61, 0x9057, 0xD2C5, 0x9058, 0xE5DC, 0x9059, 0xDF62, 0x905A, 0xDF63,
- 0x905B, 0xE5DE, 0x905C, 0xDF64, 0x905D, 0xDF65, 0x905E, 0xDF66, 0x905F, 0xDF67, 0x9060, 0xDF68, 0x9061, 0xDF69, 0x9062, 0xE5DD,
- 0x9063, 0xC7B2, 0x9064, 0xDF6A, 0x9065, 0xD2A3, 0x9066, 0xDF6B, 0x9067, 0xDF6C, 0x9068, 0xE5DB, 0x9069, 0xDF6D, 0x906A, 0xDF6E,
- 0x906B, 0xDF6F, 0x906C, 0xDF70, 0x906D, 0xD4E2, 0x906E, 0xD5DA, 0x906F, 0xDF71, 0x9070, 0xDF72, 0x9071, 0xDF73, 0x9072, 0xDF74,
- 0x9073, 0xDF75, 0x9074, 0xE5E0, 0x9075, 0xD7F1, 0x9076, 0xDF76, 0x9077, 0xDF77, 0x9078, 0xDF78, 0x9079, 0xDF79, 0x907A, 0xDF7A,
- 0x907B, 0xDF7B, 0x907C, 0xDF7C, 0x907D, 0xE5E1, 0x907E, 0xDF7D, 0x907F, 0xB1DC, 0x9080, 0xD1FB, 0x9081, 0xDF7E, 0x9082, 0xE5E2,
- 0x9083, 0xE5E4, 0x9084, 0xDF80, 0x9085, 0xDF81, 0x9086, 0xDF82, 0x9087, 0xDF83, 0x9088, 0xE5E3, 0x9089, 0xDF84, 0x908A, 0xDF85,
- 0x908B, 0xE5E5, 0x908C, 0xDF86, 0x908D, 0xDF87, 0x908E, 0xDF88, 0x908F, 0xDF89, 0x9090, 0xDF8A, 0x9091, 0xD2D8, 0x9092, 0xDF8B,
- 0x9093, 0xB5CB, 0x9094, 0xDF8C, 0x9095, 0xE7DF, 0x9096, 0xDF8D, 0x9097, 0xDAF5, 0x9098, 0xDF8E, 0x9099, 0xDAF8, 0x909A, 0xDF8F,
- 0x909B, 0xDAF6, 0x909C, 0xDF90, 0x909D, 0xDAF7, 0x909E, 0xDF91, 0x909F, 0xDF92, 0x90A0, 0xDF93, 0x90A1, 0xDAFA, 0x90A2, 0xD0CF,
- 0x90A3, 0xC4C7, 0x90A4, 0xDF94, 0x90A5, 0xDF95, 0x90A6, 0xB0EE, 0x90A7, 0xDF96, 0x90A8, 0xDF97, 0x90A9, 0xDF98, 0x90AA, 0xD0B0,
- 0x90AB, 0xDF99, 0x90AC, 0xDAF9, 0x90AD, 0xDF9A, 0x90AE, 0xD3CA, 0x90AF, 0xBAAA, 0x90B0, 0xDBA2, 0x90B1, 0xC7F1, 0x90B2, 0xDF9B,
- 0x90B3, 0xDAFC, 0x90B4, 0xDAFB, 0x90B5, 0xC9DB, 0x90B6, 0xDAFD, 0x90B7, 0xDF9C, 0x90B8, 0xDBA1, 0x90B9, 0xD7DE, 0x90BA, 0xDAFE,
- 0x90BB, 0xC1DA, 0x90BC, 0xDF9D, 0x90BD, 0xDF9E, 0x90BE, 0xDBA5, 0x90BF, 0xDF9F, 0x90C0, 0xDFA0, 0x90C1, 0xD3F4, 0x90C2, 0xE040,
- 0x90C3, 0xE041, 0x90C4, 0xDBA7, 0x90C5, 0xDBA4, 0x90C6, 0xE042, 0x90C7, 0xDBA8, 0x90C8, 0xE043, 0x90C9, 0xE044, 0x90CA, 0xBDBC,
- 0x90CB, 0xE045, 0x90CC, 0xE046, 0x90CD, 0xE047, 0x90CE, 0xC0C9, 0x90CF, 0xDBA3, 0x90D0, 0xDBA6, 0x90D1, 0xD6A3, 0x90D2, 0xE048,
- 0x90D3, 0xDBA9, 0x90D4, 0xE049, 0x90D5, 0xE04A, 0x90D6, 0xE04B, 0x90D7, 0xDBAD, 0x90D8, 0xE04C, 0x90D9, 0xE04D, 0x90DA, 0xE04E,
- 0x90DB, 0xDBAE, 0x90DC, 0xDBAC, 0x90DD, 0xBAC2, 0x90DE, 0xE04F, 0x90DF, 0xE050, 0x90E0, 0xE051, 0x90E1, 0xBFA4, 0x90E2, 0xDBAB,
- 0x90E3, 0xE052, 0x90E4, 0xE053, 0x90E5, 0xE054, 0x90E6, 0xDBAA, 0x90E7, 0xD4C7, 0x90E8, 0xB2BF, 0x90E9, 0xE055, 0x90EA, 0xE056,
- 0x90EB, 0xDBAF, 0x90EC, 0xE057, 0x90ED, 0xB9F9, 0x90EE, 0xE058, 0x90EF, 0xDBB0, 0x90F0, 0xE059, 0x90F1, 0xE05A, 0x90F2, 0xE05B,
- 0x90F3, 0xE05C, 0x90F4, 0xB3BB, 0x90F5, 0xE05D, 0x90F6, 0xE05E, 0x90F7, 0xE05F, 0x90F8, 0xB5A6, 0x90F9, 0xE060, 0x90FA, 0xE061,
- 0x90FB, 0xE062, 0x90FC, 0xE063, 0x90FD, 0xB6BC, 0x90FE, 0xDBB1, 0x90FF, 0xE064, 0x9100, 0xE065, 0x9101, 0xE066, 0x9102, 0xB6F5,
- 0x9103, 0xE067, 0x9104, 0xDBB2, 0x9105, 0xE068, 0x9106, 0xE069, 0x9107, 0xE06A, 0x9108, 0xE06B, 0x9109, 0xE06C, 0x910A, 0xE06D,
- 0x910B, 0xE06E, 0x910C, 0xE06F, 0x910D, 0xE070, 0x910E, 0xE071, 0x910F, 0xE072, 0x9110, 0xE073, 0x9111, 0xE074, 0x9112, 0xE075,
- 0x9113, 0xE076, 0x9114, 0xE077, 0x9115, 0xE078, 0x9116, 0xE079, 0x9117, 0xE07A, 0x9118, 0xE07B, 0x9119, 0xB1C9, 0x911A, 0xE07C,
- 0x911B, 0xE07D, 0x911C, 0xE07E, 0x911D, 0xE080, 0x911E, 0xDBB4, 0x911F, 0xE081, 0x9120, 0xE082, 0x9121, 0xE083, 0x9122, 0xDBB3,
- 0x9123, 0xDBB5, 0x9124, 0xE084, 0x9125, 0xE085, 0x9126, 0xE086, 0x9127, 0xE087, 0x9128, 0xE088, 0x9129, 0xE089, 0x912A, 0xE08A,
- 0x912B, 0xE08B, 0x912C, 0xE08C, 0x912D, 0xE08D, 0x912E, 0xE08E, 0x912F, 0xDBB7, 0x9130, 0xE08F, 0x9131, 0xDBB6, 0x9132, 0xE090,
- 0x9133, 0xE091, 0x9134, 0xE092, 0x9135, 0xE093, 0x9136, 0xE094, 0x9137, 0xE095, 0x9138, 0xE096, 0x9139, 0xDBB8, 0x913A, 0xE097,
- 0x913B, 0xE098, 0x913C, 0xE099, 0x913D, 0xE09A, 0x913E, 0xE09B, 0x913F, 0xE09C, 0x9140, 0xE09D, 0x9141, 0xE09E, 0x9142, 0xE09F,
- 0x9143, 0xDBB9, 0x9144, 0xE0A0, 0x9145, 0xE140, 0x9146, 0xDBBA, 0x9147, 0xE141, 0x9148, 0xE142, 0x9149, 0xD3CF, 0x914A, 0xF4FA,
- 0x914B, 0xC7F5, 0x914C, 0xD7C3, 0x914D, 0xC5E4, 0x914E, 0xF4FC, 0x914F, 0xF4FD, 0x9150, 0xF4FB, 0x9151, 0xE143, 0x9152, 0xBEC6,
- 0x9153, 0xE144, 0x9154, 0xE145, 0x9155, 0xE146, 0x9156, 0xE147, 0x9157, 0xD0EF, 0x9158, 0xE148, 0x9159, 0xE149, 0x915A, 0xB7D3,
- 0x915B, 0xE14A, 0x915C, 0xE14B, 0x915D, 0xD4CD, 0x915E, 0xCCAA, 0x915F, 0xE14C, 0x9160, 0xE14D, 0x9161, 0xF5A2, 0x9162, 0xF5A1,
- 0x9163, 0xBAA8, 0x9164, 0xF4FE, 0x9165, 0xCBD6, 0x9166, 0xE14E, 0x9167, 0xE14F, 0x9168, 0xE150, 0x9169, 0xF5A4, 0x916A, 0xC0D2,
- 0x916B, 0xE151, 0x916C, 0xB3EA, 0x916D, 0xE152, 0x916E, 0xCDAA, 0x916F, 0xF5A5, 0x9170, 0xF5A3, 0x9171, 0xBDB4, 0x9172, 0xF5A8,
- 0x9173, 0xE153, 0x9174, 0xF5A9, 0x9175, 0xBDCD, 0x9176, 0xC3B8, 0x9177, 0xBFE1, 0x9178, 0xCBE1, 0x9179, 0xF5AA, 0x917A, 0xE154,
- 0x917B, 0xE155, 0x917C, 0xE156, 0x917D, 0xF5A6, 0x917E, 0xF5A7, 0x917F, 0xC4F0, 0x9180, 0xE157, 0x9181, 0xE158, 0x9182, 0xE159,
- 0x9183, 0xE15A, 0x9184, 0xE15B, 0x9185, 0xF5AC, 0x9186, 0xE15C, 0x9187, 0xB4BC, 0x9188, 0xE15D, 0x9189, 0xD7ED, 0x918A, 0xE15E,
- 0x918B, 0xB4D7, 0x918C, 0xF5AB, 0x918D, 0xF5AE, 0x918E, 0xE15F, 0x918F, 0xE160, 0x9190, 0xF5AD, 0x9191, 0xF5AF, 0x9192, 0xD0D1,
- 0x9193, 0xE161, 0x9194, 0xE162, 0x9195, 0xE163, 0x9196, 0xE164, 0x9197, 0xE165, 0x9198, 0xE166, 0x9199, 0xE167, 0x919A, 0xC3D1,
- 0x919B, 0xC8A9, 0x919C, 0xE168, 0x919D, 0xE169, 0x919E, 0xE16A, 0x919F, 0xE16B, 0x91A0, 0xE16C, 0x91A1, 0xE16D, 0x91A2, 0xF5B0,
- 0x91A3, 0xF5B1, 0x91A4, 0xE16E, 0x91A5, 0xE16F, 0x91A6, 0xE170, 0x91A7, 0xE171, 0x91A8, 0xE172, 0x91A9, 0xE173, 0x91AA, 0xF5B2,
- 0x91AB, 0xE174, 0x91AC, 0xE175, 0x91AD, 0xF5B3, 0x91AE, 0xF5B4, 0x91AF, 0xF5B5, 0x91B0, 0xE176, 0x91B1, 0xE177, 0x91B2, 0xE178,
- 0x91B3, 0xE179, 0x91B4, 0xF5B7, 0x91B5, 0xF5B6, 0x91B6, 0xE17A, 0x91B7, 0xE17B, 0x91B8, 0xE17C, 0x91B9, 0xE17D, 0x91BA, 0xF5B8,
- 0x91BB, 0xE17E, 0x91BC, 0xE180, 0x91BD, 0xE181, 0x91BE, 0xE182, 0x91BF, 0xE183, 0x91C0, 0xE184, 0x91C1, 0xE185, 0x91C2, 0xE186,
- 0x91C3, 0xE187, 0x91C4, 0xE188, 0x91C5, 0xE189, 0x91C6, 0xE18A, 0x91C7, 0xB2C9, 0x91C8, 0xE18B, 0x91C9, 0xD3D4, 0x91CA, 0xCACD,
- 0x91CB, 0xE18C, 0x91CC, 0xC0EF, 0x91CD, 0xD6D8, 0x91CE, 0xD2B0, 0x91CF, 0xC1BF, 0x91D0, 0xE18D, 0x91D1, 0xBDF0, 0x91D2, 0xE18E,
- 0x91D3, 0xE18F, 0x91D4, 0xE190, 0x91D5, 0xE191, 0x91D6, 0xE192, 0x91D7, 0xE193, 0x91D8, 0xE194, 0x91D9, 0xE195, 0x91DA, 0xE196,
- 0x91DB, 0xE197, 0x91DC, 0xB8AA, 0x91DD, 0xE198, 0x91DE, 0xE199, 0x91DF, 0xE19A, 0x91E0, 0xE19B, 0x91E1, 0xE19C, 0x91E2, 0xE19D,
- 0x91E3, 0xE19E, 0x91E4, 0xE19F, 0x91E5, 0xE1A0, 0x91E6, 0xE240, 0x91E7, 0xE241, 0x91E8, 0xE242, 0x91E9, 0xE243, 0x91EA, 0xE244,
- 0x91EB, 0xE245, 0x91EC, 0xE246, 0x91ED, 0xE247, 0x91EE, 0xE248, 0x91EF, 0xE249, 0x91F0, 0xE24A, 0x91F1, 0xE24B, 0x91F2, 0xE24C,
- 0x91F3, 0xE24D, 0x91F4, 0xE24E, 0x91F5, 0xE24F, 0x91F6, 0xE250, 0x91F7, 0xE251, 0x91F8, 0xE252, 0x91F9, 0xE253, 0x91FA, 0xE254,
- 0x91FB, 0xE255, 0x91FC, 0xE256, 0x91FD, 0xE257, 0x91FE, 0xE258, 0x91FF, 0xE259, 0x9200, 0xE25A, 0x9201, 0xE25B, 0x9202, 0xE25C,
- 0x9203, 0xE25D, 0x9204, 0xE25E, 0x9205, 0xE25F, 0x9206, 0xE260, 0x9207, 0xE261, 0x9208, 0xE262, 0x9209, 0xE263, 0x920A, 0xE264,
- 0x920B, 0xE265, 0x920C, 0xE266, 0x920D, 0xE267, 0x920E, 0xE268, 0x920F, 0xE269, 0x9210, 0xE26A, 0x9211, 0xE26B, 0x9212, 0xE26C,
- 0x9213, 0xE26D, 0x9214, 0xE26E, 0x9215, 0xE26F, 0x9216, 0xE270, 0x9217, 0xE271, 0x9218, 0xE272, 0x9219, 0xE273, 0x921A, 0xE274,
- 0x921B, 0xE275, 0x921C, 0xE276, 0x921D, 0xE277, 0x921E, 0xE278, 0x921F, 0xE279, 0x9220, 0xE27A, 0x9221, 0xE27B, 0x9222, 0xE27C,
- 0x9223, 0xE27D, 0x9224, 0xE27E, 0x9225, 0xE280, 0x9226, 0xE281, 0x9227, 0xE282, 0x9228, 0xE283, 0x9229, 0xE284, 0x922A, 0xE285,
- 0x922B, 0xE286, 0x922C, 0xE287, 0x922D, 0xE288, 0x922E, 0xE289, 0x922F, 0xE28A, 0x9230, 0xE28B, 0x9231, 0xE28C, 0x9232, 0xE28D,
- 0x9233, 0xE28E, 0x9234, 0xE28F, 0x9235, 0xE290, 0x9236, 0xE291, 0x9237, 0xE292, 0x9238, 0xE293, 0x9239, 0xE294, 0x923A, 0xE295,
- 0x923B, 0xE296, 0x923C, 0xE297, 0x923D, 0xE298, 0x923E, 0xE299, 0x923F, 0xE29A, 0x9240, 0xE29B, 0x9241, 0xE29C, 0x9242, 0xE29D,
- 0x9243, 0xE29E, 0x9244, 0xE29F, 0x9245, 0xE2A0, 0x9246, 0xE340, 0x9247, 0xE341, 0x9248, 0xE342, 0x9249, 0xE343, 0x924A, 0xE344,
- 0x924B, 0xE345, 0x924C, 0xE346, 0x924D, 0xE347, 0x924E, 0xE348, 0x924F, 0xE349, 0x9250, 0xE34A, 0x9251, 0xE34B, 0x9252, 0xE34C,
- 0x9253, 0xE34D, 0x9254, 0xE34E, 0x9255, 0xE34F, 0x9256, 0xE350, 0x9257, 0xE351, 0x9258, 0xE352, 0x9259, 0xE353, 0x925A, 0xE354,
- 0x925B, 0xE355, 0x925C, 0xE356, 0x925D, 0xE357, 0x925E, 0xE358, 0x925F, 0xE359, 0x9260, 0xE35A, 0x9261, 0xE35B, 0x9262, 0xE35C,
- 0x9263, 0xE35D, 0x9264, 0xE35E, 0x9265, 0xE35F, 0x9266, 0xE360, 0x9267, 0xE361, 0x9268, 0xE362, 0x9269, 0xE363, 0x926A, 0xE364,
- 0x926B, 0xE365, 0x926C, 0xE366, 0x926D, 0xE367, 0x926E, 0xE368, 0x926F, 0xE369, 0x9270, 0xE36A, 0x9271, 0xE36B, 0x9272, 0xE36C,
- 0x9273, 0xE36D, 0x9274, 0xBCF8, 0x9275, 0xE36E, 0x9276, 0xE36F, 0x9277, 0xE370, 0x9278, 0xE371, 0x9279, 0xE372, 0x927A, 0xE373,
- 0x927B, 0xE374, 0x927C, 0xE375, 0x927D, 0xE376, 0x927E, 0xE377, 0x927F, 0xE378, 0x9280, 0xE379, 0x9281, 0xE37A, 0x9282, 0xE37B,
- 0x9283, 0xE37C, 0x9284, 0xE37D, 0x9285, 0xE37E, 0x9286, 0xE380, 0x9287, 0xE381, 0x9288, 0xE382, 0x9289, 0xE383, 0x928A, 0xE384,
- 0x928B, 0xE385, 0x928C, 0xE386, 0x928D, 0xE387, 0x928E, 0xF6C6, 0x928F, 0xE388, 0x9290, 0xE389, 0x9291, 0xE38A, 0x9292, 0xE38B,
- 0x9293, 0xE38C, 0x9294, 0xE38D, 0x9295, 0xE38E, 0x9296, 0xE38F, 0x9297, 0xE390, 0x9298, 0xE391, 0x9299, 0xE392, 0x929A, 0xE393,
- 0x929B, 0xE394, 0x929C, 0xE395, 0x929D, 0xE396, 0x929E, 0xE397, 0x929F, 0xE398, 0x92A0, 0xE399, 0x92A1, 0xE39A, 0x92A2, 0xE39B,
- 0x92A3, 0xE39C, 0x92A4, 0xE39D, 0x92A5, 0xE39E, 0x92A6, 0xE39F, 0x92A7, 0xE3A0, 0x92A8, 0xE440, 0x92A9, 0xE441, 0x92AA, 0xE442,
- 0x92AB, 0xE443, 0x92AC, 0xE444, 0x92AD, 0xE445, 0x92AE, 0xF6C7, 0x92AF, 0xE446, 0x92B0, 0xE447, 0x92B1, 0xE448, 0x92B2, 0xE449,
- 0x92B3, 0xE44A, 0x92B4, 0xE44B, 0x92B5, 0xE44C, 0x92B6, 0xE44D, 0x92B7, 0xE44E, 0x92B8, 0xE44F, 0x92B9, 0xE450, 0x92BA, 0xE451,
- 0x92BB, 0xE452, 0x92BC, 0xE453, 0x92BD, 0xE454, 0x92BE, 0xE455, 0x92BF, 0xE456, 0x92C0, 0xE457, 0x92C1, 0xE458, 0x92C2, 0xE459,
- 0x92C3, 0xE45A, 0x92C4, 0xE45B, 0x92C5, 0xE45C, 0x92C6, 0xE45D, 0x92C7, 0xE45E, 0x92C8, 0xF6C8, 0x92C9, 0xE45F, 0x92CA, 0xE460,
- 0x92CB, 0xE461, 0x92CC, 0xE462, 0x92CD, 0xE463, 0x92CE, 0xE464, 0x92CF, 0xE465, 0x92D0, 0xE466, 0x92D1, 0xE467, 0x92D2, 0xE468,
- 0x92D3, 0xE469, 0x92D4, 0xE46A, 0x92D5, 0xE46B, 0x92D6, 0xE46C, 0x92D7, 0xE46D, 0x92D8, 0xE46E, 0x92D9, 0xE46F, 0x92DA, 0xE470,
- 0x92DB, 0xE471, 0x92DC, 0xE472, 0x92DD, 0xE473, 0x92DE, 0xE474, 0x92DF, 0xE475, 0x92E0, 0xE476, 0x92E1, 0xE477, 0x92E2, 0xE478,
- 0x92E3, 0xE479, 0x92E4, 0xE47A, 0x92E5, 0xE47B, 0x92E6, 0xE47C, 0x92E7, 0xE47D, 0x92E8, 0xE47E, 0x92E9, 0xE480, 0x92EA, 0xE481,
- 0x92EB, 0xE482, 0x92EC, 0xE483, 0x92ED, 0xE484, 0x92EE, 0xE485, 0x92EF, 0xE486, 0x92F0, 0xE487, 0x92F1, 0xE488, 0x92F2, 0xE489,
- 0x92F3, 0xE48A, 0x92F4, 0xE48B, 0x92F5, 0xE48C, 0x92F6, 0xE48D, 0x92F7, 0xE48E, 0x92F8, 0xE48F, 0x92F9, 0xE490, 0x92FA, 0xE491,
- 0x92FB, 0xE492, 0x92FC, 0xE493, 0x92FD, 0xE494, 0x92FE, 0xE495, 0x92FF, 0xE496, 0x9300, 0xE497, 0x9301, 0xE498, 0x9302, 0xE499,
- 0x9303, 0xE49A, 0x9304, 0xE49B, 0x9305, 0xE49C, 0x9306, 0xE49D, 0x9307, 0xE49E, 0x9308, 0xE49F, 0x9309, 0xE4A0, 0x930A, 0xE540,
- 0x930B, 0xE541, 0x930C, 0xE542, 0x930D, 0xE543, 0x930E, 0xE544, 0x930F, 0xE545, 0x9310, 0xE546, 0x9311, 0xE547, 0x9312, 0xE548,
- 0x9313, 0xE549, 0x9314, 0xE54A, 0x9315, 0xE54B, 0x9316, 0xE54C, 0x9317, 0xE54D, 0x9318, 0xE54E, 0x9319, 0xE54F, 0x931A, 0xE550,
- 0x931B, 0xE551, 0x931C, 0xE552, 0x931D, 0xE553, 0x931E, 0xE554, 0x931F, 0xE555, 0x9320, 0xE556, 0x9321, 0xE557, 0x9322, 0xE558,
- 0x9323, 0xE559, 0x9324, 0xE55A, 0x9325, 0xE55B, 0x9326, 0xE55C, 0x9327, 0xE55D, 0x9328, 0xE55E, 0x9329, 0xE55F, 0x932A, 0xE560,
- 0x932B, 0xE561, 0x932C, 0xE562, 0x932D, 0xE563, 0x932E, 0xE564, 0x932F, 0xE565, 0x9330, 0xE566, 0x9331, 0xE567, 0x9332, 0xE568,
- 0x9333, 0xE569, 0x9334, 0xE56A, 0x9335, 0xE56B, 0x9336, 0xE56C, 0x9337, 0xE56D, 0x9338, 0xE56E, 0x9339, 0xE56F, 0x933A, 0xE570,
- 0x933B, 0xE571, 0x933C, 0xE572, 0x933D, 0xE573, 0x933E, 0xF6C9, 0x933F, 0xE574, 0x9340, 0xE575, 0x9341, 0xE576, 0x9342, 0xE577,
- 0x9343, 0xE578, 0x9344, 0xE579, 0x9345, 0xE57A, 0x9346, 0xE57B, 0x9347, 0xE57C, 0x9348, 0xE57D, 0x9349, 0xE57E, 0x934A, 0xE580,
- 0x934B, 0xE581, 0x934C, 0xE582, 0x934D, 0xE583, 0x934E, 0xE584, 0x934F, 0xE585, 0x9350, 0xE586, 0x9351, 0xE587, 0x9352, 0xE588,
- 0x9353, 0xE589, 0x9354, 0xE58A, 0x9355, 0xE58B, 0x9356, 0xE58C, 0x9357, 0xE58D, 0x9358, 0xE58E, 0x9359, 0xE58F, 0x935A, 0xE590,
- 0x935B, 0xE591, 0x935C, 0xE592, 0x935D, 0xE593, 0x935E, 0xE594, 0x935F, 0xE595, 0x9360, 0xE596, 0x9361, 0xE597, 0x9362, 0xE598,
- 0x9363, 0xE599, 0x9364, 0xE59A, 0x9365, 0xE59B, 0x9366, 0xE59C, 0x9367, 0xE59D, 0x9368, 0xE59E, 0x9369, 0xE59F, 0x936A, 0xF6CA,
- 0x936B, 0xE5A0, 0x936C, 0xE640, 0x936D, 0xE641, 0x936E, 0xE642, 0x936F, 0xE643, 0x9370, 0xE644, 0x9371, 0xE645, 0x9372, 0xE646,
- 0x9373, 0xE647, 0x9374, 0xE648, 0x9375, 0xE649, 0x9376, 0xE64A, 0x9377, 0xE64B, 0x9378, 0xE64C, 0x9379, 0xE64D, 0x937A, 0xE64E,
- 0x937B, 0xE64F, 0x937C, 0xE650, 0x937D, 0xE651, 0x937E, 0xE652, 0x937F, 0xE653, 0x9380, 0xE654, 0x9381, 0xE655, 0x9382, 0xE656,
- 0x9383, 0xE657, 0x9384, 0xE658, 0x9385, 0xE659, 0x9386, 0xE65A, 0x9387, 0xE65B, 0x9388, 0xE65C, 0x9389, 0xE65D, 0x938A, 0xE65E,
- 0x938B, 0xE65F, 0x938C, 0xE660, 0x938D, 0xE661, 0x938E, 0xE662, 0x938F, 0xF6CC, 0x9390, 0xE663, 0x9391, 0xE664, 0x9392, 0xE665,
- 0x9393, 0xE666, 0x9394, 0xE667, 0x9395, 0xE668, 0x9396, 0xE669, 0x9397, 0xE66A, 0x9398, 0xE66B, 0x9399, 0xE66C, 0x939A, 0xE66D,
- 0x939B, 0xE66E, 0x939C, 0xE66F, 0x939D, 0xE670, 0x939E, 0xE671, 0x939F, 0xE672, 0x93A0, 0xE673, 0x93A1, 0xE674, 0x93A2, 0xE675,
- 0x93A3, 0xE676, 0x93A4, 0xE677, 0x93A5, 0xE678, 0x93A6, 0xE679, 0x93A7, 0xE67A, 0x93A8, 0xE67B, 0x93A9, 0xE67C, 0x93AA, 0xE67D,
- 0x93AB, 0xE67E, 0x93AC, 0xE680, 0x93AD, 0xE681, 0x93AE, 0xE682, 0x93AF, 0xE683, 0x93B0, 0xE684, 0x93B1, 0xE685, 0x93B2, 0xE686,
- 0x93B3, 0xE687, 0x93B4, 0xE688, 0x93B5, 0xE689, 0x93B6, 0xE68A, 0x93B7, 0xE68B, 0x93B8, 0xE68C, 0x93B9, 0xE68D, 0x93BA, 0xE68E,
- 0x93BB, 0xE68F, 0x93BC, 0xE690, 0x93BD, 0xE691, 0x93BE, 0xE692, 0x93BF, 0xE693, 0x93C0, 0xE694, 0x93C1, 0xE695, 0x93C2, 0xE696,
- 0x93C3, 0xE697, 0x93C4, 0xE698, 0x93C5, 0xE699, 0x93C6, 0xE69A, 0x93C7, 0xE69B, 0x93C8, 0xE69C, 0x93C9, 0xE69D, 0x93CA, 0xF6CB,
- 0x93CB, 0xE69E, 0x93CC, 0xE69F, 0x93CD, 0xE6A0, 0x93CE, 0xE740, 0x93CF, 0xE741, 0x93D0, 0xE742, 0x93D1, 0xE743, 0x93D2, 0xE744,
- 0x93D3, 0xE745, 0x93D4, 0xE746, 0x93D5, 0xE747, 0x93D6, 0xF7E9, 0x93D7, 0xE748, 0x93D8, 0xE749, 0x93D9, 0xE74A, 0x93DA, 0xE74B,
- 0x93DB, 0xE74C, 0x93DC, 0xE74D, 0x93DD, 0xE74E, 0x93DE, 0xE74F, 0x93DF, 0xE750, 0x93E0, 0xE751, 0x93E1, 0xE752, 0x93E2, 0xE753,
- 0x93E3, 0xE754, 0x93E4, 0xE755, 0x93E5, 0xE756, 0x93E6, 0xE757, 0x93E7, 0xE758, 0x93E8, 0xE759, 0x93E9, 0xE75A, 0x93EA, 0xE75B,
- 0x93EB, 0xE75C, 0x93EC, 0xE75D, 0x93ED, 0xE75E, 0x93EE, 0xE75F, 0x93EF, 0xE760, 0x93F0, 0xE761, 0x93F1, 0xE762, 0x93F2, 0xE763,
- 0x93F3, 0xE764, 0x93F4, 0xE765, 0x93F5, 0xE766, 0x93F6, 0xE767, 0x93F7, 0xE768, 0x93F8, 0xE769, 0x93F9, 0xE76A, 0x93FA, 0xE76B,
- 0x93FB, 0xE76C, 0x93FC, 0xE76D, 0x93FD, 0xE76E, 0x93FE, 0xE76F, 0x93FF, 0xE770, 0x9400, 0xE771, 0x9401, 0xE772, 0x9402, 0xE773,
- 0x9403, 0xE774, 0x9404, 0xE775, 0x9405, 0xE776, 0x9406, 0xE777, 0x9407, 0xE778, 0x9408, 0xE779, 0x9409, 0xE77A, 0x940A, 0xE77B,
- 0x940B, 0xE77C, 0x940C, 0xE77D, 0x940D, 0xE77E, 0x940E, 0xE780, 0x940F, 0xE781, 0x9410, 0xE782, 0x9411, 0xE783, 0x9412, 0xE784,
- 0x9413, 0xE785, 0x9414, 0xE786, 0x9415, 0xE787, 0x9416, 0xE788, 0x9417, 0xE789, 0x9418, 0xE78A, 0x9419, 0xE78B, 0x941A, 0xE78C,
- 0x941B, 0xE78D, 0x941C, 0xE78E, 0x941D, 0xE78F, 0x941E, 0xE790, 0x941F, 0xE791, 0x9420, 0xE792, 0x9421, 0xE793, 0x9422, 0xE794,
- 0x9423, 0xE795, 0x9424, 0xE796, 0x9425, 0xE797, 0x9426, 0xE798, 0x9427, 0xE799, 0x9428, 0xE79A, 0x9429, 0xE79B, 0x942A, 0xE79C,
- 0x942B, 0xE79D, 0x942C, 0xE79E, 0x942D, 0xE79F, 0x942E, 0xE7A0, 0x942F, 0xE840, 0x9430, 0xE841, 0x9431, 0xE842, 0x9432, 0xE843,
- 0x9433, 0xE844, 0x9434, 0xE845, 0x9435, 0xE846, 0x9436, 0xE847, 0x9437, 0xE848, 0x9438, 0xE849, 0x9439, 0xE84A, 0x943A, 0xE84B,
- 0x943B, 0xE84C, 0x943C, 0xE84D, 0x943D, 0xE84E, 0x943E, 0xF6CD, 0x943F, 0xE84F, 0x9440, 0xE850, 0x9441, 0xE851, 0x9442, 0xE852,
- 0x9443, 0xE853, 0x9444, 0xE854, 0x9445, 0xE855, 0x9446, 0xE856, 0x9447, 0xE857, 0x9448, 0xE858, 0x9449, 0xE859, 0x944A, 0xE85A,
- 0x944B, 0xE85B, 0x944C, 0xE85C, 0x944D, 0xE85D, 0x944E, 0xE85E, 0x944F, 0xE85F, 0x9450, 0xE860, 0x9451, 0xE861, 0x9452, 0xE862,
- 0x9453, 0xE863, 0x9454, 0xE864, 0x9455, 0xE865, 0x9456, 0xE866, 0x9457, 0xE867, 0x9458, 0xE868, 0x9459, 0xE869, 0x945A, 0xE86A,
- 0x945B, 0xE86B, 0x945C, 0xE86C, 0x945D, 0xE86D, 0x945E, 0xE86E, 0x945F, 0xE86F, 0x9460, 0xE870, 0x9461, 0xE871, 0x9462, 0xE872,
- 0x9463, 0xE873, 0x9464, 0xE874, 0x9465, 0xE875, 0x9466, 0xE876, 0x9467, 0xE877, 0x9468, 0xE878, 0x9469, 0xE879, 0x946A, 0xE87A,
- 0x946B, 0xF6CE, 0x946C, 0xE87B, 0x946D, 0xE87C, 0x946E, 0xE87D, 0x946F, 0xE87E, 0x9470, 0xE880, 0x9471, 0xE881, 0x9472, 0xE882,
- 0x9473, 0xE883, 0x9474, 0xE884, 0x9475, 0xE885, 0x9476, 0xE886, 0x9477, 0xE887, 0x9478, 0xE888, 0x9479, 0xE889, 0x947A, 0xE88A,
- 0x947B, 0xE88B, 0x947C, 0xE88C, 0x947D, 0xE88D, 0x947E, 0xE88E, 0x947F, 0xE88F, 0x9480, 0xE890, 0x9481, 0xE891, 0x9482, 0xE892,
- 0x9483, 0xE893, 0x9484, 0xE894, 0x9485, 0xEEC4, 0x9486, 0xEEC5, 0x9487, 0xEEC6, 0x9488, 0xD5EB, 0x9489, 0xB6A4, 0x948A, 0xEEC8,
- 0x948B, 0xEEC7, 0x948C, 0xEEC9, 0x948D, 0xEECA, 0x948E, 0xC7A5, 0x948F, 0xEECB, 0x9490, 0xEECC, 0x9491, 0xE895, 0x9492, 0xB7B0,
- 0x9493, 0xB5F6, 0x9494, 0xEECD, 0x9495, 0xEECF, 0x9496, 0xE896, 0x9497, 0xEECE, 0x9498, 0xE897, 0x9499, 0xB8C6, 0x949A, 0xEED0,
- 0x949B, 0xEED1, 0x949C, 0xEED2, 0x949D, 0xB6DB, 0x949E, 0xB3AE, 0x949F, 0xD6D3, 0x94A0, 0xC4C6, 0x94A1, 0xB1B5, 0x94A2, 0xB8D6,
- 0x94A3, 0xEED3, 0x94A4, 0xEED4, 0x94A5, 0xD4BF, 0x94A6, 0xC7D5, 0x94A7, 0xBEFB, 0x94A8, 0xCED9, 0x94A9, 0xB9B3, 0x94AA, 0xEED6,
- 0x94AB, 0xEED5, 0x94AC, 0xEED8, 0x94AD, 0xEED7, 0x94AE, 0xC5A5, 0x94AF, 0xEED9, 0x94B0, 0xEEDA, 0x94B1, 0xC7AE, 0x94B2, 0xEEDB,
- 0x94B3, 0xC7AF, 0x94B4, 0xEEDC, 0x94B5, 0xB2A7, 0x94B6, 0xEEDD, 0x94B7, 0xEEDE, 0x94B8, 0xEEDF, 0x94B9, 0xEEE0, 0x94BA, 0xEEE1,
- 0x94BB, 0xD7EA, 0x94BC, 0xEEE2, 0x94BD, 0xEEE3, 0x94BE, 0xBCD8, 0x94BF, 0xEEE4, 0x94C0, 0xD3CB, 0x94C1, 0xCCFA, 0x94C2, 0xB2AC,
- 0x94C3, 0xC1E5, 0x94C4, 0xEEE5, 0x94C5, 0xC7A6, 0x94C6, 0xC3AD, 0x94C7, 0xE898, 0x94C8, 0xEEE6, 0x94C9, 0xEEE7, 0x94CA, 0xEEE8,
- 0x94CB, 0xEEE9, 0x94CC, 0xEEEA, 0x94CD, 0xEEEB, 0x94CE, 0xEEEC, 0x94CF, 0xE899, 0x94D0, 0xEEED, 0x94D1, 0xEEEE, 0x94D2, 0xEEEF,
- 0x94D3, 0xE89A, 0x94D4, 0xE89B, 0x94D5, 0xEEF0, 0x94D6, 0xEEF1, 0x94D7, 0xEEF2, 0x94D8, 0xEEF4, 0x94D9, 0xEEF3, 0x94DA, 0xE89C,
- 0x94DB, 0xEEF5, 0x94DC, 0xCDAD, 0x94DD, 0xC2C1, 0x94DE, 0xEEF6, 0x94DF, 0xEEF7, 0x94E0, 0xEEF8, 0x94E1, 0xD5A1, 0x94E2, 0xEEF9,
- 0x94E3, 0xCFB3, 0x94E4, 0xEEFA, 0x94E5, 0xEEFB, 0x94E6, 0xE89D, 0x94E7, 0xEEFC, 0x94E8, 0xEEFD, 0x94E9, 0xEFA1, 0x94EA, 0xEEFE,
- 0x94EB, 0xEFA2, 0x94EC, 0xB8F5, 0x94ED, 0xC3FA, 0x94EE, 0xEFA3, 0x94EF, 0xEFA4, 0x94F0, 0xBDC2, 0x94F1, 0xD2BF, 0x94F2, 0xB2F9,
- 0x94F3, 0xEFA5, 0x94F4, 0xEFA6, 0x94F5, 0xEFA7, 0x94F6, 0xD2F8, 0x94F7, 0xEFA8, 0x94F8, 0xD6FD, 0x94F9, 0xEFA9, 0x94FA, 0xC6CC,
- 0x94FB, 0xE89E, 0x94FC, 0xEFAA, 0x94FD, 0xEFAB, 0x94FE, 0xC1B4, 0x94FF, 0xEFAC, 0x9500, 0xCFFA, 0x9501, 0xCBF8, 0x9502, 0xEFAE,
- 0x9503, 0xEFAD, 0x9504, 0xB3FA, 0x9505, 0xB9F8, 0x9506, 0xEFAF, 0x9507, 0xEFB0, 0x9508, 0xD0E2, 0x9509, 0xEFB1, 0x950A, 0xEFB2,
- 0x950B, 0xB7E6, 0x950C, 0xD0BF, 0x950D, 0xEFB3, 0x950E, 0xEFB4, 0x950F, 0xEFB5, 0x9510, 0xC8F1, 0x9511, 0xCCE0, 0x9512, 0xEFB6,
- 0x9513, 0xEFB7, 0x9514, 0xEFB8, 0x9515, 0xEFB9, 0x9516, 0xEFBA, 0x9517, 0xD5E0, 0x9518, 0xEFBB, 0x9519, 0xB4ED, 0x951A, 0xC3AA,
- 0x951B, 0xEFBC, 0x951C, 0xE89F, 0x951D, 0xEFBD, 0x951E, 0xEFBE, 0x951F, 0xEFBF, 0x9520, 0xE8A0, 0x9521, 0xCEFD, 0x9522, 0xEFC0,
- 0x9523, 0xC2E0, 0x9524, 0xB4B8, 0x9525, 0xD7B6, 0x9526, 0xBDF5, 0x9527, 0xE940, 0x9528, 0xCFC7, 0x9529, 0xEFC3, 0x952A, 0xEFC1,
- 0x952B, 0xEFC2, 0x952C, 0xEFC4, 0x952D, 0xB6A7, 0x952E, 0xBCFC, 0x952F, 0xBEE2, 0x9530, 0xC3CC, 0x9531, 0xEFC5, 0x9532, 0xEFC6,
- 0x9533, 0xE941, 0x9534, 0xEFC7, 0x9535, 0xEFCF, 0x9536, 0xEFC8, 0x9537, 0xEFC9, 0x9538, 0xEFCA, 0x9539, 0xC7C2, 0x953A, 0xEFF1,
- 0x953B, 0xB6CD, 0x953C, 0xEFCB, 0x953D, 0xE942, 0x953E, 0xEFCC, 0x953F, 0xEFCD, 0x9540, 0xB6C6, 0x9541, 0xC3BE, 0x9542, 0xEFCE,
- 0x9543, 0xE943, 0x9544, 0xEFD0, 0x9545, 0xEFD1, 0x9546, 0xEFD2, 0x9547, 0xD5F2, 0x9548, 0xE944, 0x9549, 0xEFD3, 0x954A, 0xC4F7,
- 0x954B, 0xE945, 0x954C, 0xEFD4, 0x954D, 0xC4F8, 0x954E, 0xEFD5, 0x954F, 0xEFD6, 0x9550, 0xB8E4, 0x9551, 0xB0F7, 0x9552, 0xEFD7,
- 0x9553, 0xEFD8, 0x9554, 0xEFD9, 0x9555, 0xE946, 0x9556, 0xEFDA, 0x9557, 0xEFDB, 0x9558, 0xEFDC, 0x9559, 0xEFDD, 0x955A, 0xE947,
- 0x955B, 0xEFDE, 0x955C, 0xBEB5, 0x955D, 0xEFE1, 0x955E, 0xEFDF, 0x955F, 0xEFE0, 0x9560, 0xE948, 0x9561, 0xEFE2, 0x9562, 0xEFE3,
- 0x9563, 0xC1CD, 0x9564, 0xEFE4, 0x9565, 0xEFE5, 0x9566, 0xEFE6, 0x9567, 0xEFE7, 0x9568, 0xEFE8, 0x9569, 0xEFE9, 0x956A, 0xEFEA,
- 0x956B, 0xEFEB, 0x956C, 0xEFEC, 0x956D, 0xC0D8, 0x956E, 0xE949, 0x956F, 0xEFED, 0x9570, 0xC1AD, 0x9571, 0xEFEE, 0x9572, 0xEFEF,
- 0x9573, 0xEFF0, 0x9574, 0xE94A, 0x9575, 0xE94B, 0x9576, 0xCFE2, 0x9577, 0xE94C, 0x9578, 0xE94D, 0x9579, 0xE94E, 0x957A, 0xE94F,
- 0x957B, 0xE950, 0x957C, 0xE951, 0x957D, 0xE952, 0x957E, 0xE953, 0x957F, 0xB3A4, 0x9580, 0xE954, 0x9581, 0xE955, 0x9582, 0xE956,
- 0x9583, 0xE957, 0x9584, 0xE958, 0x9585, 0xE959, 0x9586, 0xE95A, 0x9587, 0xE95B, 0x9588, 0xE95C, 0x9589, 0xE95D, 0x958A, 0xE95E,
- 0x958B, 0xE95F, 0x958C, 0xE960, 0x958D, 0xE961, 0x958E, 0xE962, 0x958F, 0xE963, 0x9590, 0xE964, 0x9591, 0xE965, 0x9592, 0xE966,
- 0x9593, 0xE967, 0x9594, 0xE968, 0x9595, 0xE969, 0x9596, 0xE96A, 0x9597, 0xE96B, 0x9598, 0xE96C, 0x9599, 0xE96D, 0x959A, 0xE96E,
- 0x959B, 0xE96F, 0x959C, 0xE970, 0x959D, 0xE971, 0x959E, 0xE972, 0x959F, 0xE973, 0x95A0, 0xE974, 0x95A1, 0xE975, 0x95A2, 0xE976,
- 0x95A3, 0xE977, 0x95A4, 0xE978, 0x95A5, 0xE979, 0x95A6, 0xE97A, 0x95A7, 0xE97B, 0x95A8, 0xE97C, 0x95A9, 0xE97D, 0x95AA, 0xE97E,
- 0x95AB, 0xE980, 0x95AC, 0xE981, 0x95AD, 0xE982, 0x95AE, 0xE983, 0x95AF, 0xE984, 0x95B0, 0xE985, 0x95B1, 0xE986, 0x95B2, 0xE987,
- 0x95B3, 0xE988, 0x95B4, 0xE989, 0x95B5, 0xE98A, 0x95B6, 0xE98B, 0x95B7, 0xE98C, 0x95B8, 0xE98D, 0x95B9, 0xE98E, 0x95BA, 0xE98F,
- 0x95BB, 0xE990, 0x95BC, 0xE991, 0x95BD, 0xE992, 0x95BE, 0xE993, 0x95BF, 0xE994, 0x95C0, 0xE995, 0x95C1, 0xE996, 0x95C2, 0xE997,
- 0x95C3, 0xE998, 0x95C4, 0xE999, 0x95C5, 0xE99A, 0x95C6, 0xE99B, 0x95C7, 0xE99C, 0x95C8, 0xE99D, 0x95C9, 0xE99E, 0x95CA, 0xE99F,
- 0x95CB, 0xE9A0, 0x95CC, 0xEA40, 0x95CD, 0xEA41, 0x95CE, 0xEA42, 0x95CF, 0xEA43, 0x95D0, 0xEA44, 0x95D1, 0xEA45, 0x95D2, 0xEA46,
- 0x95D3, 0xEA47, 0x95D4, 0xEA48, 0x95D5, 0xEA49, 0x95D6, 0xEA4A, 0x95D7, 0xEA4B, 0x95D8, 0xEA4C, 0x95D9, 0xEA4D, 0x95DA, 0xEA4E,
- 0x95DB, 0xEA4F, 0x95DC, 0xEA50, 0x95DD, 0xEA51, 0x95DE, 0xEA52, 0x95DF, 0xEA53, 0x95E0, 0xEA54, 0x95E1, 0xEA55, 0x95E2, 0xEA56,
- 0x95E3, 0xEA57, 0x95E4, 0xEA58, 0x95E5, 0xEA59, 0x95E6, 0xEA5A, 0x95E7, 0xEA5B, 0x95E8, 0xC3C5, 0x95E9, 0xE3C5, 0x95EA, 0xC9C1,
- 0x95EB, 0xE3C6, 0x95EC, 0xEA5C, 0x95ED, 0xB1D5, 0x95EE, 0xCECA, 0x95EF, 0xB4B3, 0x95F0, 0xC8F2, 0x95F1, 0xE3C7, 0x95F2, 0xCFD0,
- 0x95F3, 0xE3C8, 0x95F4, 0xBCE4, 0x95F5, 0xE3C9, 0x95F6, 0xE3CA, 0x95F7, 0xC3C6, 0x95F8, 0xD5A2, 0x95F9, 0xC4D6, 0x95FA, 0xB9EB,
- 0x95FB, 0xCEC5, 0x95FC, 0xE3CB, 0x95FD, 0xC3F6, 0x95FE, 0xE3CC, 0x95FF, 0xEA5D, 0x9600, 0xB7A7, 0x9601, 0xB8F3, 0x9602, 0xBAD2,
- 0x9603, 0xE3CD, 0x9604, 0xE3CE, 0x9605, 0xD4C4, 0x9606, 0xE3CF, 0x9607, 0xEA5E, 0x9608, 0xE3D0, 0x9609, 0xD1CB, 0x960A, 0xE3D1,
- 0x960B, 0xE3D2, 0x960C, 0xE3D3, 0x960D, 0xE3D4, 0x960E, 0xD1D6, 0x960F, 0xE3D5, 0x9610, 0xB2FB, 0x9611, 0xC0BB, 0x9612, 0xE3D6,
- 0x9613, 0xEA5F, 0x9614, 0xC0AB, 0x9615, 0xE3D7, 0x9616, 0xE3D8, 0x9617, 0xE3D9, 0x9618, 0xEA60, 0x9619, 0xE3DA, 0x961A, 0xE3DB,
- 0x961B, 0xEA61, 0x961C, 0xB8B7, 0x961D, 0xDAE2, 0x961E, 0xEA62, 0x961F, 0xB6D3, 0x9620, 0xEA63, 0x9621, 0xDAE4, 0x9622, 0xDAE3,
- 0x9623, 0xEA64, 0x9624, 0xEA65, 0x9625, 0xEA66, 0x9626, 0xEA67, 0x9627, 0xEA68, 0x9628, 0xEA69, 0x9629, 0xEA6A, 0x962A, 0xDAE6,
- 0x962B, 0xEA6B, 0x962C, 0xEA6C, 0x962D, 0xEA6D, 0x962E, 0xC8EE, 0x962F, 0xEA6E, 0x9630, 0xEA6F, 0x9631, 0xDAE5, 0x9632, 0xB7C0,
- 0x9633, 0xD1F4, 0x9634, 0xD2F5, 0x9635, 0xD5F3, 0x9636, 0xBDD7, 0x9637, 0xEA70, 0x9638, 0xEA71, 0x9639, 0xEA72, 0x963A, 0xEA73,
- 0x963B, 0xD7E8, 0x963C, 0xDAE8, 0x963D, 0xDAE7, 0x963E, 0xEA74, 0x963F, 0xB0A2, 0x9640, 0xCDD3, 0x9641, 0xEA75, 0x9642, 0xDAE9,
- 0x9643, 0xEA76, 0x9644, 0xB8BD, 0x9645, 0xBCCA, 0x9646, 0xC2BD, 0x9647, 0xC2A4, 0x9648, 0xB3C2, 0x9649, 0xDAEA, 0x964A, 0xEA77,
- 0x964B, 0xC2AA, 0x964C, 0xC4B0, 0x964D, 0xBDB5, 0x964E, 0xEA78, 0x964F, 0xEA79, 0x9650, 0xCFDE, 0x9651, 0xEA7A, 0x9652, 0xEA7B,
- 0x9653, 0xEA7C, 0x9654, 0xDAEB, 0x9655, 0xC9C2, 0x9656, 0xEA7D, 0x9657, 0xEA7E, 0x9658, 0xEA80, 0x9659, 0xEA81, 0x965A, 0xEA82,
- 0x965B, 0xB1DD, 0x965C, 0xEA83, 0x965D, 0xEA84, 0x965E, 0xEA85, 0x965F, 0xDAEC, 0x9660, 0xEA86, 0x9661, 0xB6B8, 0x9662, 0xD4BA,
- 0x9663, 0xEA87, 0x9664, 0xB3FD, 0x9665, 0xEA88, 0x9666, 0xEA89, 0x9667, 0xDAED, 0x9668, 0xD4C9, 0x9669, 0xCFD5, 0x966A, 0xC5E3,
- 0x966B, 0xEA8A, 0x966C, 0xDAEE, 0x966D, 0xEA8B, 0x966E, 0xEA8C, 0x966F, 0xEA8D, 0x9670, 0xEA8E, 0x9671, 0xEA8F, 0x9672, 0xDAEF,
- 0x9673, 0xEA90, 0x9674, 0xDAF0, 0x9675, 0xC1EA, 0x9676, 0xCCD5, 0x9677, 0xCFDD, 0x9678, 0xEA91, 0x9679, 0xEA92, 0x967A, 0xEA93,
- 0x967B, 0xEA94, 0x967C, 0xEA95, 0x967D, 0xEA96, 0x967E, 0xEA97, 0x967F, 0xEA98, 0x9680, 0xEA99, 0x9681, 0xEA9A, 0x9682, 0xEA9B,
- 0x9683, 0xEA9C, 0x9684, 0xEA9D, 0x9685, 0xD3E7, 0x9686, 0xC2A1, 0x9687, 0xEA9E, 0x9688, 0xDAF1, 0x9689, 0xEA9F, 0x968A, 0xEAA0,
- 0x968B, 0xCBE5, 0x968C, 0xEB40, 0x968D, 0xDAF2, 0x968E, 0xEB41, 0x968F, 0xCBE6, 0x9690, 0xD2FE, 0x9691, 0xEB42, 0x9692, 0xEB43,
- 0x9693, 0xEB44, 0x9694, 0xB8F4, 0x9695, 0xEB45, 0x9696, 0xEB46, 0x9697, 0xDAF3, 0x9698, 0xB0AF, 0x9699, 0xCFB6, 0x969A, 0xEB47,
- 0x969B, 0xEB48, 0x969C, 0xD5CF, 0x969D, 0xEB49, 0x969E, 0xEB4A, 0x969F, 0xEB4B, 0x96A0, 0xEB4C, 0x96A1, 0xEB4D, 0x96A2, 0xEB4E,
- 0x96A3, 0xEB4F, 0x96A4, 0xEB50, 0x96A5, 0xEB51, 0x96A6, 0xEB52, 0x96A7, 0xCBED, 0x96A8, 0xEB53, 0x96A9, 0xEB54, 0x96AA, 0xEB55,
- 0x96AB, 0xEB56, 0x96AC, 0xEB57, 0x96AD, 0xEB58, 0x96AE, 0xEB59, 0x96AF, 0xEB5A, 0x96B0, 0xDAF4, 0x96B1, 0xEB5B, 0x96B2, 0xEB5C,
- 0x96B3, 0xE3C4, 0x96B4, 0xEB5D, 0x96B5, 0xEB5E, 0x96B6, 0xC1A5, 0x96B7, 0xEB5F, 0x96B8, 0xEB60, 0x96B9, 0xF6BF, 0x96BA, 0xEB61,
- 0x96BB, 0xEB62, 0x96BC, 0xF6C0, 0x96BD, 0xF6C1, 0x96BE, 0xC4D1, 0x96BF, 0xEB63, 0x96C0, 0xC8B8, 0x96C1, 0xD1E3, 0x96C2, 0xEB64,
- 0x96C3, 0xEB65, 0x96C4, 0xD0DB, 0x96C5, 0xD1C5, 0x96C6, 0xBCAF, 0x96C7, 0xB9CD, 0x96C8, 0xEB66, 0x96C9, 0xEFF4, 0x96CA, 0xEB67,
- 0x96CB, 0xEB68, 0x96CC, 0xB4C6, 0x96CD, 0xD3BA, 0x96CE, 0xF6C2, 0x96CF, 0xB3FB, 0x96D0, 0xEB69, 0x96D1, 0xEB6A, 0x96D2, 0xF6C3,
- 0x96D3, 0xEB6B, 0x96D4, 0xEB6C, 0x96D5, 0xB5F1, 0x96D6, 0xEB6D, 0x96D7, 0xEB6E, 0x96D8, 0xEB6F, 0x96D9, 0xEB70, 0x96DA, 0xEB71,
- 0x96DB, 0xEB72, 0x96DC, 0xEB73, 0x96DD, 0xEB74, 0x96DE, 0xEB75, 0x96DF, 0xEB76, 0x96E0, 0xF6C5, 0x96E1, 0xEB77, 0x96E2, 0xEB78,
- 0x96E3, 0xEB79, 0x96E4, 0xEB7A, 0x96E5, 0xEB7B, 0x96E6, 0xEB7C, 0x96E7, 0xEB7D, 0x96E8, 0xD3EA, 0x96E9, 0xF6A7, 0x96EA, 0xD1A9,
- 0x96EB, 0xEB7E, 0x96EC, 0xEB80, 0x96ED, 0xEB81, 0x96EE, 0xEB82, 0x96EF, 0xF6A9, 0x96F0, 0xEB83, 0x96F1, 0xEB84, 0x96F2, 0xEB85,
- 0x96F3, 0xF6A8, 0x96F4, 0xEB86, 0x96F5, 0xEB87, 0x96F6, 0xC1E3, 0x96F7, 0xC0D7, 0x96F8, 0xEB88, 0x96F9, 0xB1A2, 0x96FA, 0xEB89,
- 0x96FB, 0xEB8A, 0x96FC, 0xEB8B, 0x96FD, 0xEB8C, 0x96FE, 0xCEED, 0x96FF, 0xEB8D, 0x9700, 0xD0E8, 0x9701, 0xF6AB, 0x9702, 0xEB8E,
- 0x9703, 0xEB8F, 0x9704, 0xCFF6, 0x9705, 0xEB90, 0x9706, 0xF6AA, 0x9707, 0xD5F0, 0x9708, 0xF6AC, 0x9709, 0xC3B9, 0x970A, 0xEB91,
- 0x970B, 0xEB92, 0x970C, 0xEB93, 0x970D, 0xBBF4, 0x970E, 0xF6AE, 0x970F, 0xF6AD, 0x9710, 0xEB94, 0x9711, 0xEB95, 0x9712, 0xEB96,
- 0x9713, 0xC4DE, 0x9714, 0xEB97, 0x9715, 0xEB98, 0x9716, 0xC1D8, 0x9717, 0xEB99, 0x9718, 0xEB9A, 0x9719, 0xEB9B, 0x971A, 0xEB9C,
- 0x971B, 0xEB9D, 0x971C, 0xCBAA, 0x971D, 0xEB9E, 0x971E, 0xCFBC, 0x971F, 0xEB9F, 0x9720, 0xEBA0, 0x9721, 0xEC40, 0x9722, 0xEC41,
- 0x9723, 0xEC42, 0x9724, 0xEC43, 0x9725, 0xEC44, 0x9726, 0xEC45, 0x9727, 0xEC46, 0x9728, 0xEC47, 0x9729, 0xEC48, 0x972A, 0xF6AF,
- 0x972B, 0xEC49, 0x972C, 0xEC4A, 0x972D, 0xF6B0, 0x972E, 0xEC4B, 0x972F, 0xEC4C, 0x9730, 0xF6B1, 0x9731, 0xEC4D, 0x9732, 0xC2B6,
- 0x9733, 0xEC4E, 0x9734, 0xEC4F, 0x9735, 0xEC50, 0x9736, 0xEC51, 0x9737, 0xEC52, 0x9738, 0xB0D4, 0x9739, 0xC5F9, 0x973A, 0xEC53,
- 0x973B, 0xEC54, 0x973C, 0xEC55, 0x973D, 0xEC56, 0x973E, 0xF6B2, 0x973F, 0xEC57, 0x9740, 0xEC58, 0x9741, 0xEC59, 0x9742, 0xEC5A,
- 0x9743, 0xEC5B, 0x9744, 0xEC5C, 0x9745, 0xEC5D, 0x9746, 0xEC5E, 0x9747, 0xEC5F, 0x9748, 0xEC60, 0x9749, 0xEC61, 0x974A, 0xEC62,
- 0x974B, 0xEC63, 0x974C, 0xEC64, 0x974D, 0xEC65, 0x974E, 0xEC66, 0x974F, 0xEC67, 0x9750, 0xEC68, 0x9751, 0xEC69, 0x9752, 0xC7E0,
- 0x9753, 0xF6A6, 0x9754, 0xEC6A, 0x9755, 0xEC6B, 0x9756, 0xBEB8, 0x9757, 0xEC6C, 0x9758, 0xEC6D, 0x9759, 0xBEB2, 0x975A, 0xEC6E,
- 0x975B, 0xB5E5, 0x975C, 0xEC6F, 0x975D, 0xEC70, 0x975E, 0xB7C7, 0x975F, 0xEC71, 0x9760, 0xBFBF, 0x9761, 0xC3D2, 0x9762, 0xC3E6,
- 0x9763, 0xEC72, 0x9764, 0xEC73, 0x9765, 0xD8CC, 0x9766, 0xEC74, 0x9767, 0xEC75, 0x9768, 0xEC76, 0x9769, 0xB8EF, 0x976A, 0xEC77,
- 0x976B, 0xEC78, 0x976C, 0xEC79, 0x976D, 0xEC7A, 0x976E, 0xEC7B, 0x976F, 0xEC7C, 0x9770, 0xEC7D, 0x9771, 0xEC7E, 0x9772, 0xEC80,
- 0x9773, 0xBDF9, 0x9774, 0xD1A5, 0x9775, 0xEC81, 0x9776, 0xB0D0, 0x9777, 0xEC82, 0x9778, 0xEC83, 0x9779, 0xEC84, 0x977A, 0xEC85,
- 0x977B, 0xEC86, 0x977C, 0xF7B0, 0x977D, 0xEC87, 0x977E, 0xEC88, 0x977F, 0xEC89, 0x9780, 0xEC8A, 0x9781, 0xEC8B, 0x9782, 0xEC8C,
- 0x9783, 0xEC8D, 0x9784, 0xEC8E, 0x9785, 0xF7B1, 0x9786, 0xEC8F, 0x9787, 0xEC90, 0x9788, 0xEC91, 0x9789, 0xEC92, 0x978A, 0xEC93,
- 0x978B, 0xD0AC, 0x978C, 0xEC94, 0x978D, 0xB0B0, 0x978E, 0xEC95, 0x978F, 0xEC96, 0x9790, 0xEC97, 0x9791, 0xF7B2, 0x9792, 0xF7B3,
- 0x9793, 0xEC98, 0x9794, 0xF7B4, 0x9795, 0xEC99, 0x9796, 0xEC9A, 0x9797, 0xEC9B, 0x9798, 0xC7CA, 0x9799, 0xEC9C, 0x979A, 0xEC9D,
- 0x979B, 0xEC9E, 0x979C, 0xEC9F, 0x979D, 0xECA0, 0x979E, 0xED40, 0x979F, 0xED41, 0x97A0, 0xBECF, 0x97A1, 0xED42, 0x97A2, 0xED43,
- 0x97A3, 0xF7B7, 0x97A4, 0xED44, 0x97A5, 0xED45, 0x97A6, 0xED46, 0x97A7, 0xED47, 0x97A8, 0xED48, 0x97A9, 0xED49, 0x97AA, 0xED4A,
- 0x97AB, 0xF7B6, 0x97AC, 0xED4B, 0x97AD, 0xB1DE, 0x97AE, 0xED4C, 0x97AF, 0xF7B5, 0x97B0, 0xED4D, 0x97B1, 0xED4E, 0x97B2, 0xF7B8,
- 0x97B3, 0xED4F, 0x97B4, 0xF7B9, 0x97B5, 0xED50, 0x97B6, 0xED51, 0x97B7, 0xED52, 0x97B8, 0xED53, 0x97B9, 0xED54, 0x97BA, 0xED55,
- 0x97BB, 0xED56, 0x97BC, 0xED57, 0x97BD, 0xED58, 0x97BE, 0xED59, 0x97BF, 0xED5A, 0x97C0, 0xED5B, 0x97C1, 0xED5C, 0x97C2, 0xED5D,
- 0x97C3, 0xED5E, 0x97C4, 0xED5F, 0x97C5, 0xED60, 0x97C6, 0xED61, 0x97C7, 0xED62, 0x97C8, 0xED63, 0x97C9, 0xED64, 0x97CA, 0xED65,
- 0x97CB, 0xED66, 0x97CC, 0xED67, 0x97CD, 0xED68, 0x97CE, 0xED69, 0x97CF, 0xED6A, 0x97D0, 0xED6B, 0x97D1, 0xED6C, 0x97D2, 0xED6D,
- 0x97D3, 0xED6E, 0x97D4, 0xED6F, 0x97D5, 0xED70, 0x97D6, 0xED71, 0x97D7, 0xED72, 0x97D8, 0xED73, 0x97D9, 0xED74, 0x97DA, 0xED75,
- 0x97DB, 0xED76, 0x97DC, 0xED77, 0x97DD, 0xED78, 0x97DE, 0xED79, 0x97DF, 0xED7A, 0x97E0, 0xED7B, 0x97E1, 0xED7C, 0x97E2, 0xED7D,
- 0x97E3, 0xED7E, 0x97E4, 0xED80, 0x97E5, 0xED81, 0x97E6, 0xCEA4, 0x97E7, 0xC8CD, 0x97E8, 0xED82, 0x97E9, 0xBAAB, 0x97EA, 0xE8B8,
- 0x97EB, 0xE8B9, 0x97EC, 0xE8BA, 0x97ED, 0xBEC2, 0x97EE, 0xED83, 0x97EF, 0xED84, 0x97F0, 0xED85, 0x97F1, 0xED86, 0x97F2, 0xED87,
- 0x97F3, 0xD2F4, 0x97F4, 0xED88, 0x97F5, 0xD4CF, 0x97F6, 0xC9D8, 0x97F7, 0xED89, 0x97F8, 0xED8A, 0x97F9, 0xED8B, 0x97FA, 0xED8C,
- 0x97FB, 0xED8D, 0x97FC, 0xED8E, 0x97FD, 0xED8F, 0x97FE, 0xED90, 0x97FF, 0xED91, 0x9800, 0xED92, 0x9801, 0xED93, 0x9802, 0xED94,
- 0x9803, 0xED95, 0x9804, 0xED96, 0x9805, 0xED97, 0x9806, 0xED98, 0x9807, 0xED99, 0x9808, 0xED9A, 0x9809, 0xED9B, 0x980A, 0xED9C,
- 0x980B, 0xED9D, 0x980C, 0xED9E, 0x980D, 0xED9F, 0x980E, 0xEDA0, 0x980F, 0xEE40, 0x9810, 0xEE41, 0x9811, 0xEE42, 0x9812, 0xEE43,
- 0x9813, 0xEE44, 0x9814, 0xEE45, 0x9815, 0xEE46, 0x9816, 0xEE47, 0x9817, 0xEE48, 0x9818, 0xEE49, 0x9819, 0xEE4A, 0x981A, 0xEE4B,
- 0x981B, 0xEE4C, 0x981C, 0xEE4D, 0x981D, 0xEE4E, 0x981E, 0xEE4F, 0x981F, 0xEE50, 0x9820, 0xEE51, 0x9821, 0xEE52, 0x9822, 0xEE53,
- 0x9823, 0xEE54, 0x9824, 0xEE55, 0x9825, 0xEE56, 0x9826, 0xEE57, 0x9827, 0xEE58, 0x9828, 0xEE59, 0x9829, 0xEE5A, 0x982A, 0xEE5B,
- 0x982B, 0xEE5C, 0x982C, 0xEE5D, 0x982D, 0xEE5E, 0x982E, 0xEE5F, 0x982F, 0xEE60, 0x9830, 0xEE61, 0x9831, 0xEE62, 0x9832, 0xEE63,
- 0x9833, 0xEE64, 0x9834, 0xEE65, 0x9835, 0xEE66, 0x9836, 0xEE67, 0x9837, 0xEE68, 0x9838, 0xEE69, 0x9839, 0xEE6A, 0x983A, 0xEE6B,
- 0x983B, 0xEE6C, 0x983C, 0xEE6D, 0x983D, 0xEE6E, 0x983E, 0xEE6F, 0x983F, 0xEE70, 0x9840, 0xEE71, 0x9841, 0xEE72, 0x9842, 0xEE73,
- 0x9843, 0xEE74, 0x9844, 0xEE75, 0x9845, 0xEE76, 0x9846, 0xEE77, 0x9847, 0xEE78, 0x9848, 0xEE79, 0x9849, 0xEE7A, 0x984A, 0xEE7B,
- 0x984B, 0xEE7C, 0x984C, 0xEE7D, 0x984D, 0xEE7E, 0x984E, 0xEE80, 0x984F, 0xEE81, 0x9850, 0xEE82, 0x9851, 0xEE83, 0x9852, 0xEE84,
- 0x9853, 0xEE85, 0x9854, 0xEE86, 0x9855, 0xEE87, 0x9856, 0xEE88, 0x9857, 0xEE89, 0x9858, 0xEE8A, 0x9859, 0xEE8B, 0x985A, 0xEE8C,
- 0x985B, 0xEE8D, 0x985C, 0xEE8E, 0x985D, 0xEE8F, 0x985E, 0xEE90, 0x985F, 0xEE91, 0x9860, 0xEE92, 0x9861, 0xEE93, 0x9862, 0xEE94,
- 0x9863, 0xEE95, 0x9864, 0xEE96, 0x9865, 0xEE97, 0x9866, 0xEE98, 0x9867, 0xEE99, 0x9868, 0xEE9A, 0x9869, 0xEE9B, 0x986A, 0xEE9C,
- 0x986B, 0xEE9D, 0x986C, 0xEE9E, 0x986D, 0xEE9F, 0x986E, 0xEEA0, 0x986F, 0xEF40, 0x9870, 0xEF41, 0x9871, 0xEF42, 0x9872, 0xEF43,
- 0x9873, 0xEF44, 0x9874, 0xEF45, 0x9875, 0xD2B3, 0x9876, 0xB6A5, 0x9877, 0xC7EA, 0x9878, 0xF1FC, 0x9879, 0xCFEE, 0x987A, 0xCBB3,
- 0x987B, 0xD0EB, 0x987C, 0xE7EF, 0x987D, 0xCDE7, 0x987E, 0xB9CB, 0x987F, 0xB6D9, 0x9880, 0xF1FD, 0x9881, 0xB0E4, 0x9882, 0xCBCC,
- 0x9883, 0xF1FE, 0x9884, 0xD4A4, 0x9885, 0xC2AD, 0x9886, 0xC1EC, 0x9887, 0xC6C4, 0x9888, 0xBEB1, 0x9889, 0xF2A1, 0x988A, 0xBCD5,
- 0x988B, 0xEF46, 0x988C, 0xF2A2, 0x988D, 0xF2A3, 0x988E, 0xEF47, 0x988F, 0xF2A4, 0x9890, 0xD2C3, 0x9891, 0xC6B5, 0x9892, 0xEF48,
- 0x9893, 0xCDC7, 0x9894, 0xF2A5, 0x9895, 0xEF49, 0x9896, 0xD3B1, 0x9897, 0xBFC5, 0x9898, 0xCCE2, 0x9899, 0xEF4A, 0x989A, 0xF2A6,
- 0x989B, 0xF2A7, 0x989C, 0xD1D5, 0x989D, 0xB6EE, 0x989E, 0xF2A8, 0x989F, 0xF2A9, 0x98A0, 0xB5DF, 0x98A1, 0xF2AA, 0x98A2, 0xF2AB,
- 0x98A3, 0xEF4B, 0x98A4, 0xB2FC, 0x98A5, 0xF2AC, 0x98A6, 0xF2AD, 0x98A7, 0xC8A7, 0x98A8, 0xEF4C, 0x98A9, 0xEF4D, 0x98AA, 0xEF4E,
- 0x98AB, 0xEF4F, 0x98AC, 0xEF50, 0x98AD, 0xEF51, 0x98AE, 0xEF52, 0x98AF, 0xEF53, 0x98B0, 0xEF54, 0x98B1, 0xEF55, 0x98B2, 0xEF56,
- 0x98B3, 0xEF57, 0x98B4, 0xEF58, 0x98B5, 0xEF59, 0x98B6, 0xEF5A, 0x98B7, 0xEF5B, 0x98B8, 0xEF5C, 0x98B9, 0xEF5D, 0x98BA, 0xEF5E,
- 0x98BB, 0xEF5F, 0x98BC, 0xEF60, 0x98BD, 0xEF61, 0x98BE, 0xEF62, 0x98BF, 0xEF63, 0x98C0, 0xEF64, 0x98C1, 0xEF65, 0x98C2, 0xEF66,
- 0x98C3, 0xEF67, 0x98C4, 0xEF68, 0x98C5, 0xEF69, 0x98C6, 0xEF6A, 0x98C7, 0xEF6B, 0x98C8, 0xEF6C, 0x98C9, 0xEF6D, 0x98CA, 0xEF6E,
- 0x98CB, 0xEF6F, 0x98CC, 0xEF70, 0x98CD, 0xEF71, 0x98CE, 0xB7E7, 0x98CF, 0xEF72, 0x98D0, 0xEF73, 0x98D1, 0xECA9, 0x98D2, 0xECAA,
- 0x98D3, 0xECAB, 0x98D4, 0xEF74, 0x98D5, 0xECAC, 0x98D6, 0xEF75, 0x98D7, 0xEF76, 0x98D8, 0xC6AE, 0x98D9, 0xECAD, 0x98DA, 0xECAE,
- 0x98DB, 0xEF77, 0x98DC, 0xEF78, 0x98DD, 0xEF79, 0x98DE, 0xB7C9, 0x98DF, 0xCAB3, 0x98E0, 0xEF7A, 0x98E1, 0xEF7B, 0x98E2, 0xEF7C,
- 0x98E3, 0xEF7D, 0x98E4, 0xEF7E, 0x98E5, 0xEF80, 0x98E6, 0xEF81, 0x98E7, 0xE2B8, 0x98E8, 0xF7CF, 0x98E9, 0xEF82, 0x98EA, 0xEF83,
- 0x98EB, 0xEF84, 0x98EC, 0xEF85, 0x98ED, 0xEF86, 0x98EE, 0xEF87, 0x98EF, 0xEF88, 0x98F0, 0xEF89, 0x98F1, 0xEF8A, 0x98F2, 0xEF8B,
- 0x98F3, 0xEF8C, 0x98F4, 0xEF8D, 0x98F5, 0xEF8E, 0x98F6, 0xEF8F, 0x98F7, 0xEF90, 0x98F8, 0xEF91, 0x98F9, 0xEF92, 0x98FA, 0xEF93,
- 0x98FB, 0xEF94, 0x98FC, 0xEF95, 0x98FD, 0xEF96, 0x98FE, 0xEF97, 0x98FF, 0xEF98, 0x9900, 0xEF99, 0x9901, 0xEF9A, 0x9902, 0xEF9B,
- 0x9903, 0xEF9C, 0x9904, 0xEF9D, 0x9905, 0xEF9E, 0x9906, 0xEF9F, 0x9907, 0xEFA0, 0x9908, 0xF040, 0x9909, 0xF041, 0x990A, 0xF042,
- 0x990B, 0xF043, 0x990C, 0xF044, 0x990D, 0xF7D0, 0x990E, 0xF045, 0x990F, 0xF046, 0x9910, 0xB2CD, 0x9911, 0xF047, 0x9912, 0xF048,
- 0x9913, 0xF049, 0x9914, 0xF04A, 0x9915, 0xF04B, 0x9916, 0xF04C, 0x9917, 0xF04D, 0x9918, 0xF04E, 0x9919, 0xF04F, 0x991A, 0xF050,
- 0x991B, 0xF051, 0x991C, 0xF052, 0x991D, 0xF053, 0x991E, 0xF054, 0x991F, 0xF055, 0x9920, 0xF056, 0x9921, 0xF057, 0x9922, 0xF058,
- 0x9923, 0xF059, 0x9924, 0xF05A, 0x9925, 0xF05B, 0x9926, 0xF05C, 0x9927, 0xF05D, 0x9928, 0xF05E, 0x9929, 0xF05F, 0x992A, 0xF060,
- 0x992B, 0xF061, 0x992C, 0xF062, 0x992D, 0xF063, 0x992E, 0xF7D1, 0x992F, 0xF064, 0x9930, 0xF065, 0x9931, 0xF066, 0x9932, 0xF067,
- 0x9933, 0xF068, 0x9934, 0xF069, 0x9935, 0xF06A, 0x9936, 0xF06B, 0x9937, 0xF06C, 0x9938, 0xF06D, 0x9939, 0xF06E, 0x993A, 0xF06F,
- 0x993B, 0xF070, 0x993C, 0xF071, 0x993D, 0xF072, 0x993E, 0xF073, 0x993F, 0xF074, 0x9940, 0xF075, 0x9941, 0xF076, 0x9942, 0xF077,
- 0x9943, 0xF078, 0x9944, 0xF079, 0x9945, 0xF07A, 0x9946, 0xF07B, 0x9947, 0xF07C, 0x9948, 0xF07D, 0x9949, 0xF07E, 0x994A, 0xF080,
- 0x994B, 0xF081, 0x994C, 0xF082, 0x994D, 0xF083, 0x994E, 0xF084, 0x994F, 0xF085, 0x9950, 0xF086, 0x9951, 0xF087, 0x9952, 0xF088,
- 0x9953, 0xF089, 0x9954, 0xF7D3, 0x9955, 0xF7D2, 0x9956, 0xF08A, 0x9957, 0xF08B, 0x9958, 0xF08C, 0x9959, 0xF08D, 0x995A, 0xF08E,
- 0x995B, 0xF08F, 0x995C, 0xF090, 0x995D, 0xF091, 0x995E, 0xF092, 0x995F, 0xF093, 0x9960, 0xF094, 0x9961, 0xF095, 0x9962, 0xF096,
- 0x9963, 0xE2BB, 0x9964, 0xF097, 0x9965, 0xBCA2, 0x9966, 0xF098, 0x9967, 0xE2BC, 0x9968, 0xE2BD, 0x9969, 0xE2BE, 0x996A, 0xE2BF,
- 0x996B, 0xE2C0, 0x996C, 0xE2C1, 0x996D, 0xB7B9, 0x996E, 0xD2FB, 0x996F, 0xBDA4, 0x9970, 0xCACE, 0x9971, 0xB1A5, 0x9972, 0xCBC7,
- 0x9973, 0xF099, 0x9974, 0xE2C2, 0x9975, 0xB6FC, 0x9976, 0xC8C4, 0x9977, 0xE2C3, 0x9978, 0xF09A, 0x9979, 0xF09B, 0x997A, 0xBDC8,
- 0x997B, 0xF09C, 0x997C, 0xB1FD, 0x997D, 0xE2C4, 0x997E, 0xF09D, 0x997F, 0xB6F6, 0x9980, 0xE2C5, 0x9981, 0xC4D9, 0x9982, 0xF09E,
- 0x9983, 0xF09F, 0x9984, 0xE2C6, 0x9985, 0xCFDA, 0x9986, 0xB9DD, 0x9987, 0xE2C7, 0x9988, 0xC0A1, 0x9989, 0xF0A0, 0x998A, 0xE2C8,
- 0x998B, 0xB2F6, 0x998C, 0xF140, 0x998D, 0xE2C9, 0x998E, 0xF141, 0x998F, 0xC1F3, 0x9990, 0xE2CA, 0x9991, 0xE2CB, 0x9992, 0xC2F8,
- 0x9993, 0xE2CC, 0x9994, 0xE2CD, 0x9995, 0xE2CE, 0x9996, 0xCAD7, 0x9997, 0xD8B8, 0x9998, 0xD9E5, 0x9999, 0xCFE3, 0x999A, 0xF142,
- 0x999B, 0xF143, 0x999C, 0xF144, 0x999D, 0xF145, 0x999E, 0xF146, 0x999F, 0xF147, 0x99A0, 0xF148, 0x99A1, 0xF149, 0x99A2, 0xF14A,
- 0x99A3, 0xF14B, 0x99A4, 0xF14C, 0x99A5, 0xF0A5, 0x99A6, 0xF14D, 0x99A7, 0xF14E, 0x99A8, 0xDCB0, 0x99A9, 0xF14F, 0x99AA, 0xF150,
- 0x99AB, 0xF151, 0x99AC, 0xF152, 0x99AD, 0xF153, 0x99AE, 0xF154, 0x99AF, 0xF155, 0x99B0, 0xF156, 0x99B1, 0xF157, 0x99B2, 0xF158,
- 0x99B3, 0xF159, 0x99B4, 0xF15A, 0x99B5, 0xF15B, 0x99B6, 0xF15C, 0x99B7, 0xF15D, 0x99B8, 0xF15E, 0x99B9, 0xF15F, 0x99BA, 0xF160,
- 0x99BB, 0xF161, 0x99BC, 0xF162, 0x99BD, 0xF163, 0x99BE, 0xF164, 0x99BF, 0xF165, 0x99C0, 0xF166, 0x99C1, 0xF167, 0x99C2, 0xF168,
- 0x99C3, 0xF169, 0x99C4, 0xF16A, 0x99C5, 0xF16B, 0x99C6, 0xF16C, 0x99C7, 0xF16D, 0x99C8, 0xF16E, 0x99C9, 0xF16F, 0x99CA, 0xF170,
- 0x99CB, 0xF171, 0x99CC, 0xF172, 0x99CD, 0xF173, 0x99CE, 0xF174, 0x99CF, 0xF175, 0x99D0, 0xF176, 0x99D1, 0xF177, 0x99D2, 0xF178,
- 0x99D3, 0xF179, 0x99D4, 0xF17A, 0x99D5, 0xF17B, 0x99D6, 0xF17C, 0x99D7, 0xF17D, 0x99D8, 0xF17E, 0x99D9, 0xF180, 0x99DA, 0xF181,
- 0x99DB, 0xF182, 0x99DC, 0xF183, 0x99DD, 0xF184, 0x99DE, 0xF185, 0x99DF, 0xF186, 0x99E0, 0xF187, 0x99E1, 0xF188, 0x99E2, 0xF189,
- 0x99E3, 0xF18A, 0x99E4, 0xF18B, 0x99E5, 0xF18C, 0x99E6, 0xF18D, 0x99E7, 0xF18E, 0x99E8, 0xF18F, 0x99E9, 0xF190, 0x99EA, 0xF191,
- 0x99EB, 0xF192, 0x99EC, 0xF193, 0x99ED, 0xF194, 0x99EE, 0xF195, 0x99EF, 0xF196, 0x99F0, 0xF197, 0x99F1, 0xF198, 0x99F2, 0xF199,
- 0x99F3, 0xF19A, 0x99F4, 0xF19B, 0x99F5, 0xF19C, 0x99F6, 0xF19D, 0x99F7, 0xF19E, 0x99F8, 0xF19F, 0x99F9, 0xF1A0, 0x99FA, 0xF240,
- 0x99FB, 0xF241, 0x99FC, 0xF242, 0x99FD, 0xF243, 0x99FE, 0xF244, 0x99FF, 0xF245, 0x9A00, 0xF246, 0x9A01, 0xF247, 0x9A02, 0xF248,
- 0x9A03, 0xF249, 0x9A04, 0xF24A, 0x9A05, 0xF24B, 0x9A06, 0xF24C, 0x9A07, 0xF24D, 0x9A08, 0xF24E, 0x9A09, 0xF24F, 0x9A0A, 0xF250,
- 0x9A0B, 0xF251, 0x9A0C, 0xF252, 0x9A0D, 0xF253, 0x9A0E, 0xF254, 0x9A0F, 0xF255, 0x9A10, 0xF256, 0x9A11, 0xF257, 0x9A12, 0xF258,
- 0x9A13, 0xF259, 0x9A14, 0xF25A, 0x9A15, 0xF25B, 0x9A16, 0xF25C, 0x9A17, 0xF25D, 0x9A18, 0xF25E, 0x9A19, 0xF25F, 0x9A1A, 0xF260,
- 0x9A1B, 0xF261, 0x9A1C, 0xF262, 0x9A1D, 0xF263, 0x9A1E, 0xF264, 0x9A1F, 0xF265, 0x9A20, 0xF266, 0x9A21, 0xF267, 0x9A22, 0xF268,
- 0x9A23, 0xF269, 0x9A24, 0xF26A, 0x9A25, 0xF26B, 0x9A26, 0xF26C, 0x9A27, 0xF26D, 0x9A28, 0xF26E, 0x9A29, 0xF26F, 0x9A2A, 0xF270,
- 0x9A2B, 0xF271, 0x9A2C, 0xF272, 0x9A2D, 0xF273, 0x9A2E, 0xF274, 0x9A2F, 0xF275, 0x9A30, 0xF276, 0x9A31, 0xF277, 0x9A32, 0xF278,
- 0x9A33, 0xF279, 0x9A34, 0xF27A, 0x9A35, 0xF27B, 0x9A36, 0xF27C, 0x9A37, 0xF27D, 0x9A38, 0xF27E, 0x9A39, 0xF280, 0x9A3A, 0xF281,
- 0x9A3B, 0xF282, 0x9A3C, 0xF283, 0x9A3D, 0xF284, 0x9A3E, 0xF285, 0x9A3F, 0xF286, 0x9A40, 0xF287, 0x9A41, 0xF288, 0x9A42, 0xF289,
- 0x9A43, 0xF28A, 0x9A44, 0xF28B, 0x9A45, 0xF28C, 0x9A46, 0xF28D, 0x9A47, 0xF28E, 0x9A48, 0xF28F, 0x9A49, 0xF290, 0x9A4A, 0xF291,
- 0x9A4B, 0xF292, 0x9A4C, 0xF293, 0x9A4D, 0xF294, 0x9A4E, 0xF295, 0x9A4F, 0xF296, 0x9A50, 0xF297, 0x9A51, 0xF298, 0x9A52, 0xF299,
- 0x9A53, 0xF29A, 0x9A54, 0xF29B, 0x9A55, 0xF29C, 0x9A56, 0xF29D, 0x9A57, 0xF29E, 0x9A58, 0xF29F, 0x9A59, 0xF2A0, 0x9A5A, 0xF340,
- 0x9A5B, 0xF341, 0x9A5C, 0xF342, 0x9A5D, 0xF343, 0x9A5E, 0xF344, 0x9A5F, 0xF345, 0x9A60, 0xF346, 0x9A61, 0xF347, 0x9A62, 0xF348,
- 0x9A63, 0xF349, 0x9A64, 0xF34A, 0x9A65, 0xF34B, 0x9A66, 0xF34C, 0x9A67, 0xF34D, 0x9A68, 0xF34E, 0x9A69, 0xF34F, 0x9A6A, 0xF350,
- 0x9A6B, 0xF351, 0x9A6C, 0xC2ED, 0x9A6D, 0xD4A6, 0x9A6E, 0xCDD4, 0x9A6F, 0xD1B1, 0x9A70, 0xB3DB, 0x9A71, 0xC7FD, 0x9A72, 0xF352,
- 0x9A73, 0xB2B5, 0x9A74, 0xC2BF, 0x9A75, 0xE6E0, 0x9A76, 0xCABB, 0x9A77, 0xE6E1, 0x9A78, 0xE6E2, 0x9A79, 0xBED4, 0x9A7A, 0xE6E3,
- 0x9A7B, 0xD7A4, 0x9A7C, 0xCDD5, 0x9A7D, 0xE6E5, 0x9A7E, 0xBCDD, 0x9A7F, 0xE6E4, 0x9A80, 0xE6E6, 0x9A81, 0xE6E7, 0x9A82, 0xC2EE,
- 0x9A83, 0xF353, 0x9A84, 0xBDBE, 0x9A85, 0xE6E8, 0x9A86, 0xC2E6, 0x9A87, 0xBAA7, 0x9A88, 0xE6E9, 0x9A89, 0xF354, 0x9A8A, 0xE6EA,
- 0x9A8B, 0xB3D2, 0x9A8C, 0xD1E9, 0x9A8D, 0xF355, 0x9A8E, 0xF356, 0x9A8F, 0xBFA5, 0x9A90, 0xE6EB, 0x9A91, 0xC6EF, 0x9A92, 0xE6EC,
- 0x9A93, 0xE6ED, 0x9A94, 0xF357, 0x9A95, 0xF358, 0x9A96, 0xE6EE, 0x9A97, 0xC6AD, 0x9A98, 0xE6EF, 0x9A99, 0xF359, 0x9A9A, 0xC9A7,
- 0x9A9B, 0xE6F0, 0x9A9C, 0xE6F1, 0x9A9D, 0xE6F2, 0x9A9E, 0xE5B9, 0x9A9F, 0xE6F3, 0x9AA0, 0xE6F4, 0x9AA1, 0xC2E2, 0x9AA2, 0xE6F5,
- 0x9AA3, 0xE6F6, 0x9AA4, 0xD6E8, 0x9AA5, 0xE6F7, 0x9AA6, 0xF35A, 0x9AA7, 0xE6F8, 0x9AA8, 0xB9C7, 0x9AA9, 0xF35B, 0x9AAA, 0xF35C,
- 0x9AAB, 0xF35D, 0x9AAC, 0xF35E, 0x9AAD, 0xF35F, 0x9AAE, 0xF360, 0x9AAF, 0xF361, 0x9AB0, 0xF7BB, 0x9AB1, 0xF7BA, 0x9AB2, 0xF362,
- 0x9AB3, 0xF363, 0x9AB4, 0xF364, 0x9AB5, 0xF365, 0x9AB6, 0xF7BE, 0x9AB7, 0xF7BC, 0x9AB8, 0xBAA1, 0x9AB9, 0xF366, 0x9ABA, 0xF7BF,
- 0x9ABB, 0xF367, 0x9ABC, 0xF7C0, 0x9ABD, 0xF368, 0x9ABE, 0xF369, 0x9ABF, 0xF36A, 0x9AC0, 0xF7C2, 0x9AC1, 0xF7C1, 0x9AC2, 0xF7C4,
- 0x9AC3, 0xF36B, 0x9AC4, 0xF36C, 0x9AC5, 0xF7C3, 0x9AC6, 0xF36D, 0x9AC7, 0xF36E, 0x9AC8, 0xF36F, 0x9AC9, 0xF370, 0x9ACA, 0xF371,
- 0x9ACB, 0xF7C5, 0x9ACC, 0xF7C6, 0x9ACD, 0xF372, 0x9ACE, 0xF373, 0x9ACF, 0xF374, 0x9AD0, 0xF375, 0x9AD1, 0xF7C7, 0x9AD2, 0xF376,
- 0x9AD3, 0xCBE8, 0x9AD4, 0xF377, 0x9AD5, 0xF378, 0x9AD6, 0xF379, 0x9AD7, 0xF37A, 0x9AD8, 0xB8DF, 0x9AD9, 0xF37B, 0x9ADA, 0xF37C,
- 0x9ADB, 0xF37D, 0x9ADC, 0xF37E, 0x9ADD, 0xF380, 0x9ADE, 0xF381, 0x9ADF, 0xF7D4, 0x9AE0, 0xF382, 0x9AE1, 0xF7D5, 0x9AE2, 0xF383,
- 0x9AE3, 0xF384, 0x9AE4, 0xF385, 0x9AE5, 0xF386, 0x9AE6, 0xF7D6, 0x9AE7, 0xF387, 0x9AE8, 0xF388, 0x9AE9, 0xF389, 0x9AEA, 0xF38A,
- 0x9AEB, 0xF7D8, 0x9AEC, 0xF38B, 0x9AED, 0xF7DA, 0x9AEE, 0xF38C, 0x9AEF, 0xF7D7, 0x9AF0, 0xF38D, 0x9AF1, 0xF38E, 0x9AF2, 0xF38F,
- 0x9AF3, 0xF390, 0x9AF4, 0xF391, 0x9AF5, 0xF392, 0x9AF6, 0xF393, 0x9AF7, 0xF394, 0x9AF8, 0xF395, 0x9AF9, 0xF7DB, 0x9AFA, 0xF396,
- 0x9AFB, 0xF7D9, 0x9AFC, 0xF397, 0x9AFD, 0xF398, 0x9AFE, 0xF399, 0x9AFF, 0xF39A, 0x9B00, 0xF39B, 0x9B01, 0xF39C, 0x9B02, 0xF39D,
- 0x9B03, 0xD7D7, 0x9B04, 0xF39E, 0x9B05, 0xF39F, 0x9B06, 0xF3A0, 0x9B07, 0xF440, 0x9B08, 0xF7DC, 0x9B09, 0xF441, 0x9B0A, 0xF442,
- 0x9B0B, 0xF443, 0x9B0C, 0xF444, 0x9B0D, 0xF445, 0x9B0E, 0xF446, 0x9B0F, 0xF7DD, 0x9B10, 0xF447, 0x9B11, 0xF448, 0x9B12, 0xF449,
- 0x9B13, 0xF7DE, 0x9B14, 0xF44A, 0x9B15, 0xF44B, 0x9B16, 0xF44C, 0x9B17, 0xF44D, 0x9B18, 0xF44E, 0x9B19, 0xF44F, 0x9B1A, 0xF450,
- 0x9B1B, 0xF451, 0x9B1C, 0xF452, 0x9B1D, 0xF453, 0x9B1E, 0xF454, 0x9B1F, 0xF7DF, 0x9B20, 0xF455, 0x9B21, 0xF456, 0x9B22, 0xF457,
- 0x9B23, 0xF7E0, 0x9B24, 0xF458, 0x9B25, 0xF459, 0x9B26, 0xF45A, 0x9B27, 0xF45B, 0x9B28, 0xF45C, 0x9B29, 0xF45D, 0x9B2A, 0xF45E,
- 0x9B2B, 0xF45F, 0x9B2C, 0xF460, 0x9B2D, 0xF461, 0x9B2E, 0xF462, 0x9B2F, 0xDBCB, 0x9B30, 0xF463, 0x9B31, 0xF464, 0x9B32, 0xD8AA,
- 0x9B33, 0xF465, 0x9B34, 0xF466, 0x9B35, 0xF467, 0x9B36, 0xF468, 0x9B37, 0xF469, 0x9B38, 0xF46A, 0x9B39, 0xF46B, 0x9B3A, 0xF46C,
- 0x9B3B, 0xE5F7, 0x9B3C, 0xB9ED, 0x9B3D, 0xF46D, 0x9B3E, 0xF46E, 0x9B3F, 0xF46F, 0x9B40, 0xF470, 0x9B41, 0xBFFD, 0x9B42, 0xBBEA,
- 0x9B43, 0xF7C9, 0x9B44, 0xC6C7, 0x9B45, 0xF7C8, 0x9B46, 0xF471, 0x9B47, 0xF7CA, 0x9B48, 0xF7CC, 0x9B49, 0xF7CB, 0x9B4A, 0xF472,
- 0x9B4B, 0xF473, 0x9B4C, 0xF474, 0x9B4D, 0xF7CD, 0x9B4E, 0xF475, 0x9B4F, 0xCEBA, 0x9B50, 0xF476, 0x9B51, 0xF7CE, 0x9B52, 0xF477,
- 0x9B53, 0xF478, 0x9B54, 0xC4A7, 0x9B55, 0xF479, 0x9B56, 0xF47A, 0x9B57, 0xF47B, 0x9B58, 0xF47C, 0x9B59, 0xF47D, 0x9B5A, 0xF47E,
- 0x9B5B, 0xF480, 0x9B5C, 0xF481, 0x9B5D, 0xF482, 0x9B5E, 0xF483, 0x9B5F, 0xF484, 0x9B60, 0xF485, 0x9B61, 0xF486, 0x9B62, 0xF487,
- 0x9B63, 0xF488, 0x9B64, 0xF489, 0x9B65, 0xF48A, 0x9B66, 0xF48B, 0x9B67, 0xF48C, 0x9B68, 0xF48D, 0x9B69, 0xF48E, 0x9B6A, 0xF48F,
- 0x9B6B, 0xF490, 0x9B6C, 0xF491, 0x9B6D, 0xF492, 0x9B6E, 0xF493, 0x9B6F, 0xF494, 0x9B70, 0xF495, 0x9B71, 0xF496, 0x9B72, 0xF497,
- 0x9B73, 0xF498, 0x9B74, 0xF499, 0x9B75, 0xF49A, 0x9B76, 0xF49B, 0x9B77, 0xF49C, 0x9B78, 0xF49D, 0x9B79, 0xF49E, 0x9B7A, 0xF49F,
- 0x9B7B, 0xF4A0, 0x9B7C, 0xF540, 0x9B7D, 0xF541, 0x9B7E, 0xF542, 0x9B7F, 0xF543, 0x9B80, 0xF544, 0x9B81, 0xF545, 0x9B82, 0xF546,
- 0x9B83, 0xF547, 0x9B84, 0xF548, 0x9B85, 0xF549, 0x9B86, 0xF54A, 0x9B87, 0xF54B, 0x9B88, 0xF54C, 0x9B89, 0xF54D, 0x9B8A, 0xF54E,
- 0x9B8B, 0xF54F, 0x9B8C, 0xF550, 0x9B8D, 0xF551, 0x9B8E, 0xF552, 0x9B8F, 0xF553, 0x9B90, 0xF554, 0x9B91, 0xF555, 0x9B92, 0xF556,
- 0x9B93, 0xF557, 0x9B94, 0xF558, 0x9B95, 0xF559, 0x9B96, 0xF55A, 0x9B97, 0xF55B, 0x9B98, 0xF55C, 0x9B99, 0xF55D, 0x9B9A, 0xF55E,
- 0x9B9B, 0xF55F, 0x9B9C, 0xF560, 0x9B9D, 0xF561, 0x9B9E, 0xF562, 0x9B9F, 0xF563, 0x9BA0, 0xF564, 0x9BA1, 0xF565, 0x9BA2, 0xF566,
- 0x9BA3, 0xF567, 0x9BA4, 0xF568, 0x9BA5, 0xF569, 0x9BA6, 0xF56A, 0x9BA7, 0xF56B, 0x9BA8, 0xF56C, 0x9BA9, 0xF56D, 0x9BAA, 0xF56E,
- 0x9BAB, 0xF56F, 0x9BAC, 0xF570, 0x9BAD, 0xF571, 0x9BAE, 0xF572, 0x9BAF, 0xF573, 0x9BB0, 0xF574, 0x9BB1, 0xF575, 0x9BB2, 0xF576,
- 0x9BB3, 0xF577, 0x9BB4, 0xF578, 0x9BB5, 0xF579, 0x9BB6, 0xF57A, 0x9BB7, 0xF57B, 0x9BB8, 0xF57C, 0x9BB9, 0xF57D, 0x9BBA, 0xF57E,
- 0x9BBB, 0xF580, 0x9BBC, 0xF581, 0x9BBD, 0xF582, 0x9BBE, 0xF583, 0x9BBF, 0xF584, 0x9BC0, 0xF585, 0x9BC1, 0xF586, 0x9BC2, 0xF587,
- 0x9BC3, 0xF588, 0x9BC4, 0xF589, 0x9BC5, 0xF58A, 0x9BC6, 0xF58B, 0x9BC7, 0xF58C, 0x9BC8, 0xF58D, 0x9BC9, 0xF58E, 0x9BCA, 0xF58F,
- 0x9BCB, 0xF590, 0x9BCC, 0xF591, 0x9BCD, 0xF592, 0x9BCE, 0xF593, 0x9BCF, 0xF594, 0x9BD0, 0xF595, 0x9BD1, 0xF596, 0x9BD2, 0xF597,
- 0x9BD3, 0xF598, 0x9BD4, 0xF599, 0x9BD5, 0xF59A, 0x9BD6, 0xF59B, 0x9BD7, 0xF59C, 0x9BD8, 0xF59D, 0x9BD9, 0xF59E, 0x9BDA, 0xF59F,
- 0x9BDB, 0xF5A0, 0x9BDC, 0xF640, 0x9BDD, 0xF641, 0x9BDE, 0xF642, 0x9BDF, 0xF643, 0x9BE0, 0xF644, 0x9BE1, 0xF645, 0x9BE2, 0xF646,
- 0x9BE3, 0xF647, 0x9BE4, 0xF648, 0x9BE5, 0xF649, 0x9BE6, 0xF64A, 0x9BE7, 0xF64B, 0x9BE8, 0xF64C, 0x9BE9, 0xF64D, 0x9BEA, 0xF64E,
- 0x9BEB, 0xF64F, 0x9BEC, 0xF650, 0x9BED, 0xF651, 0x9BEE, 0xF652, 0x9BEF, 0xF653, 0x9BF0, 0xF654, 0x9BF1, 0xF655, 0x9BF2, 0xF656,
- 0x9BF3, 0xF657, 0x9BF4, 0xF658, 0x9BF5, 0xF659, 0x9BF6, 0xF65A, 0x9BF7, 0xF65B, 0x9BF8, 0xF65C, 0x9BF9, 0xF65D, 0x9BFA, 0xF65E,
- 0x9BFB, 0xF65F, 0x9BFC, 0xF660, 0x9BFD, 0xF661, 0x9BFE, 0xF662, 0x9BFF, 0xF663, 0x9C00, 0xF664, 0x9C01, 0xF665, 0x9C02, 0xF666,
- 0x9C03, 0xF667, 0x9C04, 0xF668, 0x9C05, 0xF669, 0x9C06, 0xF66A, 0x9C07, 0xF66B, 0x9C08, 0xF66C, 0x9C09, 0xF66D, 0x9C0A, 0xF66E,
- 0x9C0B, 0xF66F, 0x9C0C, 0xF670, 0x9C0D, 0xF671, 0x9C0E, 0xF672, 0x9C0F, 0xF673, 0x9C10, 0xF674, 0x9C11, 0xF675, 0x9C12, 0xF676,
- 0x9C13, 0xF677, 0x9C14, 0xF678, 0x9C15, 0xF679, 0x9C16, 0xF67A, 0x9C17, 0xF67B, 0x9C18, 0xF67C, 0x9C19, 0xF67D, 0x9C1A, 0xF67E,
- 0x9C1B, 0xF680, 0x9C1C, 0xF681, 0x9C1D, 0xF682, 0x9C1E, 0xF683, 0x9C1F, 0xF684, 0x9C20, 0xF685, 0x9C21, 0xF686, 0x9C22, 0xF687,
- 0x9C23, 0xF688, 0x9C24, 0xF689, 0x9C25, 0xF68A, 0x9C26, 0xF68B, 0x9C27, 0xF68C, 0x9C28, 0xF68D, 0x9C29, 0xF68E, 0x9C2A, 0xF68F,
- 0x9C2B, 0xF690, 0x9C2C, 0xF691, 0x9C2D, 0xF692, 0x9C2E, 0xF693, 0x9C2F, 0xF694, 0x9C30, 0xF695, 0x9C31, 0xF696, 0x9C32, 0xF697,
- 0x9C33, 0xF698, 0x9C34, 0xF699, 0x9C35, 0xF69A, 0x9C36, 0xF69B, 0x9C37, 0xF69C, 0x9C38, 0xF69D, 0x9C39, 0xF69E, 0x9C3A, 0xF69F,
- 0x9C3B, 0xF6A0, 0x9C3C, 0xF740, 0x9C3D, 0xF741, 0x9C3E, 0xF742, 0x9C3F, 0xF743, 0x9C40, 0xF744, 0x9C41, 0xF745, 0x9C42, 0xF746,
- 0x9C43, 0xF747, 0x9C44, 0xF748, 0x9C45, 0xF749, 0x9C46, 0xF74A, 0x9C47, 0xF74B, 0x9C48, 0xF74C, 0x9C49, 0xF74D, 0x9C4A, 0xF74E,
- 0x9C4B, 0xF74F, 0x9C4C, 0xF750, 0x9C4D, 0xF751, 0x9C4E, 0xF752, 0x9C4F, 0xF753, 0x9C50, 0xF754, 0x9C51, 0xF755, 0x9C52, 0xF756,
- 0x9C53, 0xF757, 0x9C54, 0xF758, 0x9C55, 0xF759, 0x9C56, 0xF75A, 0x9C57, 0xF75B, 0x9C58, 0xF75C, 0x9C59, 0xF75D, 0x9C5A, 0xF75E,
- 0x9C5B, 0xF75F, 0x9C5C, 0xF760, 0x9C5D, 0xF761, 0x9C5E, 0xF762, 0x9C5F, 0xF763, 0x9C60, 0xF764, 0x9C61, 0xF765, 0x9C62, 0xF766,
- 0x9C63, 0xF767, 0x9C64, 0xF768, 0x9C65, 0xF769, 0x9C66, 0xF76A, 0x9C67, 0xF76B, 0x9C68, 0xF76C, 0x9C69, 0xF76D, 0x9C6A, 0xF76E,
- 0x9C6B, 0xF76F, 0x9C6C, 0xF770, 0x9C6D, 0xF771, 0x9C6E, 0xF772, 0x9C6F, 0xF773, 0x9C70, 0xF774, 0x9C71, 0xF775, 0x9C72, 0xF776,
- 0x9C73, 0xF777, 0x9C74, 0xF778, 0x9C75, 0xF779, 0x9C76, 0xF77A, 0x9C77, 0xF77B, 0x9C78, 0xF77C, 0x9C79, 0xF77D, 0x9C7A, 0xF77E,
- 0x9C7B, 0xF780, 0x9C7C, 0xD3E3, 0x9C7D, 0xF781, 0x9C7E, 0xF782, 0x9C7F, 0xF6CF, 0x9C80, 0xF783, 0x9C81, 0xC2B3, 0x9C82, 0xF6D0,
- 0x9C83, 0xF784, 0x9C84, 0xF785, 0x9C85, 0xF6D1, 0x9C86, 0xF6D2, 0x9C87, 0xF6D3, 0x9C88, 0xF6D4, 0x9C89, 0xF786, 0x9C8A, 0xF787,
- 0x9C8B, 0xF6D6, 0x9C8C, 0xF788, 0x9C8D, 0xB1AB, 0x9C8E, 0xF6D7, 0x9C8F, 0xF789, 0x9C90, 0xF6D8, 0x9C91, 0xF6D9, 0x9C92, 0xF6DA,
- 0x9C93, 0xF78A, 0x9C94, 0xF6DB, 0x9C95, 0xF6DC, 0x9C96, 0xF78B, 0x9C97, 0xF78C, 0x9C98, 0xF78D, 0x9C99, 0xF78E, 0x9C9A, 0xF6DD,
- 0x9C9B, 0xF6DE, 0x9C9C, 0xCFCA, 0x9C9D, 0xF78F, 0x9C9E, 0xF6DF, 0x9C9F, 0xF6E0, 0x9CA0, 0xF6E1, 0x9CA1, 0xF6E2, 0x9CA2, 0xF6E3,
- 0x9CA3, 0xF6E4, 0x9CA4, 0xC0F0, 0x9CA5, 0xF6E5, 0x9CA6, 0xF6E6, 0x9CA7, 0xF6E7, 0x9CA8, 0xF6E8, 0x9CA9, 0xF6E9, 0x9CAA, 0xF790,
- 0x9CAB, 0xF6EA, 0x9CAC, 0xF791, 0x9CAD, 0xF6EB, 0x9CAE, 0xF6EC, 0x9CAF, 0xF792, 0x9CB0, 0xF6ED, 0x9CB1, 0xF6EE, 0x9CB2, 0xF6EF,
- 0x9CB3, 0xF6F0, 0x9CB4, 0xF6F1, 0x9CB5, 0xF6F2, 0x9CB6, 0xF6F3, 0x9CB7, 0xF6F4, 0x9CB8, 0xBEA8, 0x9CB9, 0xF793, 0x9CBA, 0xF6F5,
- 0x9CBB, 0xF6F6, 0x9CBC, 0xF6F7, 0x9CBD, 0xF6F8, 0x9CBE, 0xF794, 0x9CBF, 0xF795, 0x9CC0, 0xF796, 0x9CC1, 0xF797, 0x9CC2, 0xF798,
- 0x9CC3, 0xC8FA, 0x9CC4, 0xF6F9, 0x9CC5, 0xF6FA, 0x9CC6, 0xF6FB, 0x9CC7, 0xF6FC, 0x9CC8, 0xF799, 0x9CC9, 0xF79A, 0x9CCA, 0xF6FD,
- 0x9CCB, 0xF6FE, 0x9CCC, 0xF7A1, 0x9CCD, 0xF7A2, 0x9CCE, 0xF7A3, 0x9CCF, 0xF7A4, 0x9CD0, 0xF7A5, 0x9CD1, 0xF79B, 0x9CD2, 0xF79C,
- 0x9CD3, 0xF7A6, 0x9CD4, 0xF7A7, 0x9CD5, 0xF7A8, 0x9CD6, 0xB1EE, 0x9CD7, 0xF7A9, 0x9CD8, 0xF7AA, 0x9CD9, 0xF7AB, 0x9CDA, 0xF79D,
- 0x9CDB, 0xF79E, 0x9CDC, 0xF7AC, 0x9CDD, 0xF7AD, 0x9CDE, 0xC1DB, 0x9CDF, 0xF7AE, 0x9CE0, 0xF79F, 0x9CE1, 0xF7A0, 0x9CE2, 0xF7AF,
- 0x9CE3, 0xF840, 0x9CE4, 0xF841, 0x9CE5, 0xF842, 0x9CE6, 0xF843, 0x9CE7, 0xF844, 0x9CE8, 0xF845, 0x9CE9, 0xF846, 0x9CEA, 0xF847,
- 0x9CEB, 0xF848, 0x9CEC, 0xF849, 0x9CED, 0xF84A, 0x9CEE, 0xF84B, 0x9CEF, 0xF84C, 0x9CF0, 0xF84D, 0x9CF1, 0xF84E, 0x9CF2, 0xF84F,
- 0x9CF3, 0xF850, 0x9CF4, 0xF851, 0x9CF5, 0xF852, 0x9CF6, 0xF853, 0x9CF7, 0xF854, 0x9CF8, 0xF855, 0x9CF9, 0xF856, 0x9CFA, 0xF857,
- 0x9CFB, 0xF858, 0x9CFC, 0xF859, 0x9CFD, 0xF85A, 0x9CFE, 0xF85B, 0x9CFF, 0xF85C, 0x9D00, 0xF85D, 0x9D01, 0xF85E, 0x9D02, 0xF85F,
- 0x9D03, 0xF860, 0x9D04, 0xF861, 0x9D05, 0xF862, 0x9D06, 0xF863, 0x9D07, 0xF864, 0x9D08, 0xF865, 0x9D09, 0xF866, 0x9D0A, 0xF867,
- 0x9D0B, 0xF868, 0x9D0C, 0xF869, 0x9D0D, 0xF86A, 0x9D0E, 0xF86B, 0x9D0F, 0xF86C, 0x9D10, 0xF86D, 0x9D11, 0xF86E, 0x9D12, 0xF86F,
- 0x9D13, 0xF870, 0x9D14, 0xF871, 0x9D15, 0xF872, 0x9D16, 0xF873, 0x9D17, 0xF874, 0x9D18, 0xF875, 0x9D19, 0xF876, 0x9D1A, 0xF877,
- 0x9D1B, 0xF878, 0x9D1C, 0xF879, 0x9D1D, 0xF87A, 0x9D1E, 0xF87B, 0x9D1F, 0xF87C, 0x9D20, 0xF87D, 0x9D21, 0xF87E, 0x9D22, 0xF880,
- 0x9D23, 0xF881, 0x9D24, 0xF882, 0x9D25, 0xF883, 0x9D26, 0xF884, 0x9D27, 0xF885, 0x9D28, 0xF886, 0x9D29, 0xF887, 0x9D2A, 0xF888,
- 0x9D2B, 0xF889, 0x9D2C, 0xF88A, 0x9D2D, 0xF88B, 0x9D2E, 0xF88C, 0x9D2F, 0xF88D, 0x9D30, 0xF88E, 0x9D31, 0xF88F, 0x9D32, 0xF890,
- 0x9D33, 0xF891, 0x9D34, 0xF892, 0x9D35, 0xF893, 0x9D36, 0xF894, 0x9D37, 0xF895, 0x9D38, 0xF896, 0x9D39, 0xF897, 0x9D3A, 0xF898,
- 0x9D3B, 0xF899, 0x9D3C, 0xF89A, 0x9D3D, 0xF89B, 0x9D3E, 0xF89C, 0x9D3F, 0xF89D, 0x9D40, 0xF89E, 0x9D41, 0xF89F, 0x9D42, 0xF8A0,
- 0x9D43, 0xF940, 0x9D44, 0xF941, 0x9D45, 0xF942, 0x9D46, 0xF943, 0x9D47, 0xF944, 0x9D48, 0xF945, 0x9D49, 0xF946, 0x9D4A, 0xF947,
- 0x9D4B, 0xF948, 0x9D4C, 0xF949, 0x9D4D, 0xF94A, 0x9D4E, 0xF94B, 0x9D4F, 0xF94C, 0x9D50, 0xF94D, 0x9D51, 0xF94E, 0x9D52, 0xF94F,
- 0x9D53, 0xF950, 0x9D54, 0xF951, 0x9D55, 0xF952, 0x9D56, 0xF953, 0x9D57, 0xF954, 0x9D58, 0xF955, 0x9D59, 0xF956, 0x9D5A, 0xF957,
- 0x9D5B, 0xF958, 0x9D5C, 0xF959, 0x9D5D, 0xF95A, 0x9D5E, 0xF95B, 0x9D5F, 0xF95C, 0x9D60, 0xF95D, 0x9D61, 0xF95E, 0x9D62, 0xF95F,
- 0x9D63, 0xF960, 0x9D64, 0xF961, 0x9D65, 0xF962, 0x9D66, 0xF963, 0x9D67, 0xF964, 0x9D68, 0xF965, 0x9D69, 0xF966, 0x9D6A, 0xF967,
- 0x9D6B, 0xF968, 0x9D6C, 0xF969, 0x9D6D, 0xF96A, 0x9D6E, 0xF96B, 0x9D6F, 0xF96C, 0x9D70, 0xF96D, 0x9D71, 0xF96E, 0x9D72, 0xF96F,
- 0x9D73, 0xF970, 0x9D74, 0xF971, 0x9D75, 0xF972, 0x9D76, 0xF973, 0x9D77, 0xF974, 0x9D78, 0xF975, 0x9D79, 0xF976, 0x9D7A, 0xF977,
- 0x9D7B, 0xF978, 0x9D7C, 0xF979, 0x9D7D, 0xF97A, 0x9D7E, 0xF97B, 0x9D7F, 0xF97C, 0x9D80, 0xF97D, 0x9D81, 0xF97E, 0x9D82, 0xF980,
- 0x9D83, 0xF981, 0x9D84, 0xF982, 0x9D85, 0xF983, 0x9D86, 0xF984, 0x9D87, 0xF985, 0x9D88, 0xF986, 0x9D89, 0xF987, 0x9D8A, 0xF988,
- 0x9D8B, 0xF989, 0x9D8C, 0xF98A, 0x9D8D, 0xF98B, 0x9D8E, 0xF98C, 0x9D8F, 0xF98D, 0x9D90, 0xF98E, 0x9D91, 0xF98F, 0x9D92, 0xF990,
- 0x9D93, 0xF991, 0x9D94, 0xF992, 0x9D95, 0xF993, 0x9D96, 0xF994, 0x9D97, 0xF995, 0x9D98, 0xF996, 0x9D99, 0xF997, 0x9D9A, 0xF998,
- 0x9D9B, 0xF999, 0x9D9C, 0xF99A, 0x9D9D, 0xF99B, 0x9D9E, 0xF99C, 0x9D9F, 0xF99D, 0x9DA0, 0xF99E, 0x9DA1, 0xF99F, 0x9DA2, 0xF9A0,
- 0x9DA3, 0xFA40, 0x9DA4, 0xFA41, 0x9DA5, 0xFA42, 0x9DA6, 0xFA43, 0x9DA7, 0xFA44, 0x9DA8, 0xFA45, 0x9DA9, 0xFA46, 0x9DAA, 0xFA47,
- 0x9DAB, 0xFA48, 0x9DAC, 0xFA49, 0x9DAD, 0xFA4A, 0x9DAE, 0xFA4B, 0x9DAF, 0xFA4C, 0x9DB0, 0xFA4D, 0x9DB1, 0xFA4E, 0x9DB2, 0xFA4F,
- 0x9DB3, 0xFA50, 0x9DB4, 0xFA51, 0x9DB5, 0xFA52, 0x9DB6, 0xFA53, 0x9DB7, 0xFA54, 0x9DB8, 0xFA55, 0x9DB9, 0xFA56, 0x9DBA, 0xFA57,
- 0x9DBB, 0xFA58, 0x9DBC, 0xFA59, 0x9DBD, 0xFA5A, 0x9DBE, 0xFA5B, 0x9DBF, 0xFA5C, 0x9DC0, 0xFA5D, 0x9DC1, 0xFA5E, 0x9DC2, 0xFA5F,
- 0x9DC3, 0xFA60, 0x9DC4, 0xFA61, 0x9DC5, 0xFA62, 0x9DC6, 0xFA63, 0x9DC7, 0xFA64, 0x9DC8, 0xFA65, 0x9DC9, 0xFA66, 0x9DCA, 0xFA67,
- 0x9DCB, 0xFA68, 0x9DCC, 0xFA69, 0x9DCD, 0xFA6A, 0x9DCE, 0xFA6B, 0x9DCF, 0xFA6C, 0x9DD0, 0xFA6D, 0x9DD1, 0xFA6E, 0x9DD2, 0xFA6F,
- 0x9DD3, 0xFA70, 0x9DD4, 0xFA71, 0x9DD5, 0xFA72, 0x9DD6, 0xFA73, 0x9DD7, 0xFA74, 0x9DD8, 0xFA75, 0x9DD9, 0xFA76, 0x9DDA, 0xFA77,
- 0x9DDB, 0xFA78, 0x9DDC, 0xFA79, 0x9DDD, 0xFA7A, 0x9DDE, 0xFA7B, 0x9DDF, 0xFA7C, 0x9DE0, 0xFA7D, 0x9DE1, 0xFA7E, 0x9DE2, 0xFA80,
- 0x9DE3, 0xFA81, 0x9DE4, 0xFA82, 0x9DE5, 0xFA83, 0x9DE6, 0xFA84, 0x9DE7, 0xFA85, 0x9DE8, 0xFA86, 0x9DE9, 0xFA87, 0x9DEA, 0xFA88,
- 0x9DEB, 0xFA89, 0x9DEC, 0xFA8A, 0x9DED, 0xFA8B, 0x9DEE, 0xFA8C, 0x9DEF, 0xFA8D, 0x9DF0, 0xFA8E, 0x9DF1, 0xFA8F, 0x9DF2, 0xFA90,
- 0x9DF3, 0xFA91, 0x9DF4, 0xFA92, 0x9DF5, 0xFA93, 0x9DF6, 0xFA94, 0x9DF7, 0xFA95, 0x9DF8, 0xFA96, 0x9DF9, 0xFA97, 0x9DFA, 0xFA98,
- 0x9DFB, 0xFA99, 0x9DFC, 0xFA9A, 0x9DFD, 0xFA9B, 0x9DFE, 0xFA9C, 0x9DFF, 0xFA9D, 0x9E00, 0xFA9E, 0x9E01, 0xFA9F, 0x9E02, 0xFAA0,
- 0x9E03, 0xFB40, 0x9E04, 0xFB41, 0x9E05, 0xFB42, 0x9E06, 0xFB43, 0x9E07, 0xFB44, 0x9E08, 0xFB45, 0x9E09, 0xFB46, 0x9E0A, 0xFB47,
- 0x9E0B, 0xFB48, 0x9E0C, 0xFB49, 0x9E0D, 0xFB4A, 0x9E0E, 0xFB4B, 0x9E0F, 0xFB4C, 0x9E10, 0xFB4D, 0x9E11, 0xFB4E, 0x9E12, 0xFB4F,
- 0x9E13, 0xFB50, 0x9E14, 0xFB51, 0x9E15, 0xFB52, 0x9E16, 0xFB53, 0x9E17, 0xFB54, 0x9E18, 0xFB55, 0x9E19, 0xFB56, 0x9E1A, 0xFB57,
- 0x9E1B, 0xFB58, 0x9E1C, 0xFB59, 0x9E1D, 0xFB5A, 0x9E1E, 0xFB5B, 0x9E1F, 0xC4F1, 0x9E20, 0xF0AF, 0x9E21, 0xBCA6, 0x9E22, 0xF0B0,
- 0x9E23, 0xC3F9, 0x9E24, 0xFB5C, 0x9E25, 0xC5B8, 0x9E26, 0xD1BB, 0x9E27, 0xFB5D, 0x9E28, 0xF0B1, 0x9E29, 0xF0B2, 0x9E2A, 0xF0B3,
- 0x9E2B, 0xF0B4, 0x9E2C, 0xF0B5, 0x9E2D, 0xD1BC, 0x9E2E, 0xFB5E, 0x9E2F, 0xD1EC, 0x9E30, 0xFB5F, 0x9E31, 0xF0B7, 0x9E32, 0xF0B6,
- 0x9E33, 0xD4A7, 0x9E34, 0xFB60, 0x9E35, 0xCDD2, 0x9E36, 0xF0B8, 0x9E37, 0xF0BA, 0x9E38, 0xF0B9, 0x9E39, 0xF0BB, 0x9E3A, 0xF0BC,
- 0x9E3B, 0xFB61, 0x9E3C, 0xFB62, 0x9E3D, 0xB8EB, 0x9E3E, 0xF0BD, 0x9E3F, 0xBAE8, 0x9E40, 0xFB63, 0x9E41, 0xF0BE, 0x9E42, 0xF0BF,
- 0x9E43, 0xBEE9, 0x9E44, 0xF0C0, 0x9E45, 0xB6EC, 0x9E46, 0xF0C1, 0x9E47, 0xF0C2, 0x9E48, 0xF0C3, 0x9E49, 0xF0C4, 0x9E4A, 0xC8B5,
- 0x9E4B, 0xF0C5, 0x9E4C, 0xF0C6, 0x9E4D, 0xFB64, 0x9E4E, 0xF0C7, 0x9E4F, 0xC5F4, 0x9E50, 0xFB65, 0x9E51, 0xF0C8, 0x9E52, 0xFB66,
- 0x9E53, 0xFB67, 0x9E54, 0xFB68, 0x9E55, 0xF0C9, 0x9E56, 0xFB69, 0x9E57, 0xF0CA, 0x9E58, 0xF7BD, 0x9E59, 0xFB6A, 0x9E5A, 0xF0CB,
- 0x9E5B, 0xF0CC, 0x9E5C, 0xF0CD, 0x9E5D, 0xFB6B, 0x9E5E, 0xF0CE, 0x9E5F, 0xFB6C, 0x9E60, 0xFB6D, 0x9E61, 0xFB6E, 0x9E62, 0xFB6F,
- 0x9E63, 0xF0CF, 0x9E64, 0xBAD7, 0x9E65, 0xFB70, 0x9E66, 0xF0D0, 0x9E67, 0xF0D1, 0x9E68, 0xF0D2, 0x9E69, 0xF0D3, 0x9E6A, 0xF0D4,
- 0x9E6B, 0xF0D5, 0x9E6C, 0xF0D6, 0x9E6D, 0xF0D8, 0x9E6E, 0xFB71, 0x9E6F, 0xFB72, 0x9E70, 0xD3A5, 0x9E71, 0xF0D7, 0x9E72, 0xFB73,
- 0x9E73, 0xF0D9, 0x9E74, 0xFB74, 0x9E75, 0xFB75, 0x9E76, 0xFB76, 0x9E77, 0xFB77, 0x9E78, 0xFB78, 0x9E79, 0xFB79, 0x9E7A, 0xFB7A,
- 0x9E7B, 0xFB7B, 0x9E7C, 0xFB7C, 0x9E7D, 0xFB7D, 0x9E7E, 0xF5BA, 0x9E7F, 0xC2B9, 0x9E80, 0xFB7E, 0x9E81, 0xFB80, 0x9E82, 0xF7E4,
- 0x9E83, 0xFB81, 0x9E84, 0xFB82, 0x9E85, 0xFB83, 0x9E86, 0xFB84, 0x9E87, 0xF7E5, 0x9E88, 0xF7E6, 0x9E89, 0xFB85, 0x9E8A, 0xFB86,
- 0x9E8B, 0xF7E7, 0x9E8C, 0xFB87, 0x9E8D, 0xFB88, 0x9E8E, 0xFB89, 0x9E8F, 0xFB8A, 0x9E90, 0xFB8B, 0x9E91, 0xFB8C, 0x9E92, 0xF7E8,
- 0x9E93, 0xC2B4, 0x9E94, 0xFB8D, 0x9E95, 0xFB8E, 0x9E96, 0xFB8F, 0x9E97, 0xFB90, 0x9E98, 0xFB91, 0x9E99, 0xFB92, 0x9E9A, 0xFB93,
- 0x9E9B, 0xFB94, 0x9E9C, 0xFB95, 0x9E9D, 0xF7EA, 0x9E9E, 0xFB96, 0x9E9F, 0xF7EB, 0x9EA0, 0xFB97, 0x9EA1, 0xFB98, 0x9EA2, 0xFB99,
- 0x9EA3, 0xFB9A, 0x9EA4, 0xFB9B, 0x9EA5, 0xFB9C, 0x9EA6, 0xC2F3, 0x9EA7, 0xFB9D, 0x9EA8, 0xFB9E, 0x9EA9, 0xFB9F, 0x9EAA, 0xFBA0,
- 0x9EAB, 0xFC40, 0x9EAC, 0xFC41, 0x9EAD, 0xFC42, 0x9EAE, 0xFC43, 0x9EAF, 0xFC44, 0x9EB0, 0xFC45, 0x9EB1, 0xFC46, 0x9EB2, 0xFC47,
- 0x9EB3, 0xFC48, 0x9EB4, 0xF4F0, 0x9EB5, 0xFC49, 0x9EB6, 0xFC4A, 0x9EB7, 0xFC4B, 0x9EB8, 0xF4EF, 0x9EB9, 0xFC4C, 0x9EBA, 0xFC4D,
- 0x9EBB, 0xC2E9, 0x9EBC, 0xFC4E, 0x9EBD, 0xF7E1, 0x9EBE, 0xF7E2, 0x9EBF, 0xFC4F, 0x9EC0, 0xFC50, 0x9EC1, 0xFC51, 0x9EC2, 0xFC52,
- 0x9EC3, 0xFC53, 0x9EC4, 0xBBC6, 0x9EC5, 0xFC54, 0x9EC6, 0xFC55, 0x9EC7, 0xFC56, 0x9EC8, 0xFC57, 0x9EC9, 0xD9E4, 0x9ECA, 0xFC58,
- 0x9ECB, 0xFC59, 0x9ECC, 0xFC5A, 0x9ECD, 0xCAF2, 0x9ECE, 0xC0E8, 0x9ECF, 0xF0A4, 0x9ED0, 0xFC5B, 0x9ED1, 0xBADA, 0x9ED2, 0xFC5C,
- 0x9ED3, 0xFC5D, 0x9ED4, 0xC7AD, 0x9ED5, 0xFC5E, 0x9ED6, 0xFC5F, 0x9ED7, 0xFC60, 0x9ED8, 0xC4AC, 0x9ED9, 0xFC61, 0x9EDA, 0xFC62,
- 0x9EDB, 0xF7EC, 0x9EDC, 0xF7ED, 0x9EDD, 0xF7EE, 0x9EDE, 0xFC63, 0x9EDF, 0xF7F0, 0x9EE0, 0xF7EF, 0x9EE1, 0xFC64, 0x9EE2, 0xF7F1,
- 0x9EE3, 0xFC65, 0x9EE4, 0xFC66, 0x9EE5, 0xF7F4, 0x9EE6, 0xFC67, 0x9EE7, 0xF7F3, 0x9EE8, 0xFC68, 0x9EE9, 0xF7F2, 0x9EEA, 0xF7F5,
- 0x9EEB, 0xFC69, 0x9EEC, 0xFC6A, 0x9EED, 0xFC6B, 0x9EEE, 0xFC6C, 0x9EEF, 0xF7F6, 0x9EF0, 0xFC6D, 0x9EF1, 0xFC6E, 0x9EF2, 0xFC6F,
- 0x9EF3, 0xFC70, 0x9EF4, 0xFC71, 0x9EF5, 0xFC72, 0x9EF6, 0xFC73, 0x9EF7, 0xFC74, 0x9EF8, 0xFC75, 0x9EF9, 0xEDE9, 0x9EFA, 0xFC76,
- 0x9EFB, 0xEDEA, 0x9EFC, 0xEDEB, 0x9EFD, 0xFC77, 0x9EFE, 0xF6BC, 0x9EFF, 0xFC78, 0x9F00, 0xFC79, 0x9F01, 0xFC7A, 0x9F02, 0xFC7B,
- 0x9F03, 0xFC7C, 0x9F04, 0xFC7D, 0x9F05, 0xFC7E, 0x9F06, 0xFC80, 0x9F07, 0xFC81, 0x9F08, 0xFC82, 0x9F09, 0xFC83, 0x9F0A, 0xFC84,
- 0x9F0B, 0xF6BD, 0x9F0C, 0xFC85, 0x9F0D, 0xF6BE, 0x9F0E, 0xB6A6, 0x9F0F, 0xFC86, 0x9F10, 0xD8BE, 0x9F11, 0xFC87, 0x9F12, 0xFC88,
- 0x9F13, 0xB9C4, 0x9F14, 0xFC89, 0x9F15, 0xFC8A, 0x9F16, 0xFC8B, 0x9F17, 0xD8BB, 0x9F18, 0xFC8C, 0x9F19, 0xDCB1, 0x9F1A, 0xFC8D,
- 0x9F1B, 0xFC8E, 0x9F1C, 0xFC8F, 0x9F1D, 0xFC90, 0x9F1E, 0xFC91, 0x9F1F, 0xFC92, 0x9F20, 0xCAF3, 0x9F21, 0xFC93, 0x9F22, 0xF7F7,
- 0x9F23, 0xFC94, 0x9F24, 0xFC95, 0x9F25, 0xFC96, 0x9F26, 0xFC97, 0x9F27, 0xFC98, 0x9F28, 0xFC99, 0x9F29, 0xFC9A, 0x9F2A, 0xFC9B,
- 0x9F2B, 0xFC9C, 0x9F2C, 0xF7F8, 0x9F2D, 0xFC9D, 0x9F2E, 0xFC9E, 0x9F2F, 0xF7F9, 0x9F30, 0xFC9F, 0x9F31, 0xFCA0, 0x9F32, 0xFD40,
- 0x9F33, 0xFD41, 0x9F34, 0xFD42, 0x9F35, 0xFD43, 0x9F36, 0xFD44, 0x9F37, 0xF7FB, 0x9F38, 0xFD45, 0x9F39, 0xF7FA, 0x9F3A, 0xFD46,
- 0x9F3B, 0xB1C7, 0x9F3C, 0xFD47, 0x9F3D, 0xF7FC, 0x9F3E, 0xF7FD, 0x9F3F, 0xFD48, 0x9F40, 0xFD49, 0x9F41, 0xFD4A, 0x9F42, 0xFD4B,
- 0x9F43, 0xFD4C, 0x9F44, 0xF7FE, 0x9F45, 0xFD4D, 0x9F46, 0xFD4E, 0x9F47, 0xFD4F, 0x9F48, 0xFD50, 0x9F49, 0xFD51, 0x9F4A, 0xFD52,
- 0x9F4B, 0xFD53, 0x9F4C, 0xFD54, 0x9F4D, 0xFD55, 0x9F4E, 0xFD56, 0x9F4F, 0xFD57, 0x9F50, 0xC6EB, 0x9F51, 0xECB4, 0x9F52, 0xFD58,
- 0x9F53, 0xFD59, 0x9F54, 0xFD5A, 0x9F55, 0xFD5B, 0x9F56, 0xFD5C, 0x9F57, 0xFD5D, 0x9F58, 0xFD5E, 0x9F59, 0xFD5F, 0x9F5A, 0xFD60,
- 0x9F5B, 0xFD61, 0x9F5C, 0xFD62, 0x9F5D, 0xFD63, 0x9F5E, 0xFD64, 0x9F5F, 0xFD65, 0x9F60, 0xFD66, 0x9F61, 0xFD67, 0x9F62, 0xFD68,
- 0x9F63, 0xFD69, 0x9F64, 0xFD6A, 0x9F65, 0xFD6B, 0x9F66, 0xFD6C, 0x9F67, 0xFD6D, 0x9F68, 0xFD6E, 0x9F69, 0xFD6F, 0x9F6A, 0xFD70,
- 0x9F6B, 0xFD71, 0x9F6C, 0xFD72, 0x9F6D, 0xFD73, 0x9F6E, 0xFD74, 0x9F6F, 0xFD75, 0x9F70, 0xFD76, 0x9F71, 0xFD77, 0x9F72, 0xFD78,
- 0x9F73, 0xFD79, 0x9F74, 0xFD7A, 0x9F75, 0xFD7B, 0x9F76, 0xFD7C, 0x9F77, 0xFD7D, 0x9F78, 0xFD7E, 0x9F79, 0xFD80, 0x9F7A, 0xFD81,
- 0x9F7B, 0xFD82, 0x9F7C, 0xFD83, 0x9F7D, 0xFD84, 0x9F7E, 0xFD85, 0x9F7F, 0xB3DD, 0x9F80, 0xF6B3, 0x9F81, 0xFD86, 0x9F82, 0xFD87,
- 0x9F83, 0xF6B4, 0x9F84, 0xC1E4, 0x9F85, 0xF6B5, 0x9F86, 0xF6B6, 0x9F87, 0xF6B7, 0x9F88, 0xF6B8, 0x9F89, 0xF6B9, 0x9F8A, 0xF6BA,
- 0x9F8B, 0xC8A3, 0x9F8C, 0xF6BB, 0x9F8D, 0xFD88, 0x9F8E, 0xFD89, 0x9F8F, 0xFD8A, 0x9F90, 0xFD8B, 0x9F91, 0xFD8C, 0x9F92, 0xFD8D,
- 0x9F93, 0xFD8E, 0x9F94, 0xFD8F, 0x9F95, 0xFD90, 0x9F96, 0xFD91, 0x9F97, 0xFD92, 0x9F98, 0xFD93, 0x9F99, 0xC1FA, 0x9F9A, 0xB9A8,
- 0x9F9B, 0xEDE8, 0x9F9C, 0xFD94, 0x9F9D, 0xFD95, 0x9F9E, 0xFD96, 0x9F9F, 0xB9EA, 0x9FA0, 0xD9DF, 0x9FA1, 0xFD97, 0x9FA2, 0xFD98,
- 0x9FA3, 0xFD99, 0x9FA4, 0xFD9A, 0x9FA5, 0xFD9B, 0xF92C, 0xFD9C, 0xF979, 0xFD9D, 0xF995, 0xFD9E, 0xF9E7, 0xFD9F, 0xF9F1, 0xFDA0,
- 0xFA0C, 0xFE40, 0xFA0D, 0xFE41, 0xFA0E, 0xFE42, 0xFA0F, 0xFE43, 0xFA11, 0xFE44, 0xFA13, 0xFE45, 0xFA14, 0xFE46, 0xFA18, 0xFE47,
- 0xFA1F, 0xFE48, 0xFA20, 0xFE49, 0xFA21, 0xFE4A, 0xFA23, 0xFE4B, 0xFA24, 0xFE4C, 0xFA27, 0xFE4D, 0xFA28, 0xFE4E, 0xFA29, 0xFE4F,
- 0xFE30, 0xA955, 0xFE31, 0xA6F2, 0xFE33, 0xA6F4, 0xFE34, 0xA6F5, 0xFE35, 0xA6E0, 0xFE36, 0xA6E1, 0xFE37, 0xA6F0, 0xFE38, 0xA6F1,
- 0xFE39, 0xA6E2, 0xFE3A, 0xA6E3, 0xFE3B, 0xA6EE, 0xFE3C, 0xA6EF, 0xFE3D, 0xA6E6, 0xFE3E, 0xA6E7, 0xFE3F, 0xA6E4, 0xFE40, 0xA6E5,
- 0xFE41, 0xA6E8, 0xFE42, 0xA6E9, 0xFE43, 0xA6EA, 0xFE44, 0xA6EB, 0xFE49, 0xA968, 0xFE4A, 0xA969, 0xFE4B, 0xA96A, 0xFE4C, 0xA96B,
- 0xFE4D, 0xA96C, 0xFE4E, 0xA96D, 0xFE4F, 0xA96E, 0xFE50, 0xA96F, 0xFE51, 0xA970, 0xFE52, 0xA971, 0xFE54, 0xA972, 0xFE55, 0xA973,
- 0xFE56, 0xA974, 0xFE57, 0xA975, 0xFE59, 0xA976, 0xFE5A, 0xA977, 0xFE5B, 0xA978, 0xFE5C, 0xA979, 0xFE5D, 0xA97A, 0xFE5E, 0xA97B,
- 0xFE5F, 0xA97C, 0xFE60, 0xA97D, 0xFE61, 0xA97E, 0xFE62, 0xA980, 0xFE63, 0xA981, 0xFE64, 0xA982, 0xFE65, 0xA983, 0xFE66, 0xA984,
- 0xFE68, 0xA985, 0xFE69, 0xA986, 0xFE6A, 0xA987, 0xFE6B, 0xA988, 0xFF01, 0xA3A1, 0xFF02, 0xA3A2, 0xFF03, 0xA3A3, 0xFF04, 0xA1E7,
- 0xFF05, 0xA3A5, 0xFF06, 0xA3A6, 0xFF07, 0xA3A7, 0xFF08, 0xA3A8, 0xFF09, 0xA3A9, 0xFF0A, 0xA3AA, 0xFF0B, 0xA3AB, 0xFF0C, 0xA3AC,
- 0xFF0D, 0xA3AD, 0xFF0E, 0xA3AE, 0xFF0F, 0xA3AF, 0xFF10, 0xA3B0, 0xFF11, 0xA3B1, 0xFF12, 0xA3B2, 0xFF13, 0xA3B3, 0xFF14, 0xA3B4,
- 0xFF15, 0xA3B5, 0xFF16, 0xA3B6, 0xFF17, 0xA3B7, 0xFF18, 0xA3B8, 0xFF19, 0xA3B9, 0xFF1A, 0xA3BA, 0xFF1B, 0xA3BB, 0xFF1C, 0xA3BC,
- 0xFF1D, 0xA3BD, 0xFF1E, 0xA3BE, 0xFF1F, 0xA3BF, 0xFF20, 0xA3C0, 0xFF21, 0xA3C1, 0xFF22, 0xA3C2, 0xFF23, 0xA3C3, 0xFF24, 0xA3C4,
- 0xFF25, 0xA3C5, 0xFF26, 0xA3C6, 0xFF27, 0xA3C7, 0xFF28, 0xA3C8, 0xFF29, 0xA3C9, 0xFF2A, 0xA3CA, 0xFF2B, 0xA3CB, 0xFF2C, 0xA3CC,
- 0xFF2D, 0xA3CD, 0xFF2E, 0xA3CE, 0xFF2F, 0xA3CF, 0xFF30, 0xA3D0, 0xFF31, 0xA3D1, 0xFF32, 0xA3D2, 0xFF33, 0xA3D3, 0xFF34, 0xA3D4,
- 0xFF35, 0xA3D5, 0xFF36, 0xA3D6, 0xFF37, 0xA3D7, 0xFF38, 0xA3D8, 0xFF39, 0xA3D9, 0xFF3A, 0xA3DA, 0xFF3B, 0xA3DB, 0xFF3C, 0xA3DC,
- 0xFF3D, 0xA3DD, 0xFF3E, 0xA3DE, 0xFF3F, 0xA3DF, 0xFF40, 0xA3E0, 0xFF41, 0xA3E1, 0xFF42, 0xA3E2, 0xFF43, 0xA3E3, 0xFF44, 0xA3E4,
- 0xFF45, 0xA3E5, 0xFF46, 0xA3E6, 0xFF47, 0xA3E7, 0xFF48, 0xA3E8, 0xFF49, 0xA3E9, 0xFF4A, 0xA3EA, 0xFF4B, 0xA3EB, 0xFF4C, 0xA3EC,
- 0xFF4D, 0xA3ED, 0xFF4E, 0xA3EE, 0xFF4F, 0xA3EF, 0xFF50, 0xA3F0, 0xFF51, 0xA3F1, 0xFF52, 0xA3F2, 0xFF53, 0xA3F3, 0xFF54, 0xA3F4,
- 0xFF55, 0xA3F5, 0xFF56, 0xA3F6, 0xFF57, 0xA3F7, 0xFF58, 0xA3F8, 0xFF59, 0xA3F9, 0xFF5A, 0xA3FA, 0xFF5B, 0xA3FB, 0xFF5C, 0xA3FC,
- 0xFF5D, 0xA3FD, 0xFF5E, 0xA1AB, 0xFFE0, 0xA1E9, 0xFFE1, 0xA1EA, 0xFFE2, 0xA956, 0xFFE3, 0xA3FE, 0xFFE4, 0xA957, 0xFFE5, 0xA3A4,
- 0, 0
-};
-
-static const WCHAR oem2uni936[] = { /* GBK --> Unicode pairs */
- 0x0080, 0x20AC, 0x8140, 0x4E02, 0x8141, 0x4E04, 0x8142, 0x4E05, 0x8143, 0x4E06, 0x8144, 0x4E0F, 0x8145, 0x4E12, 0x8146, 0x4E17,
- 0x8147, 0x4E1F, 0x8148, 0x4E20, 0x8149, 0x4E21, 0x814A, 0x4E23, 0x814B, 0x4E26, 0x814C, 0x4E29, 0x814D, 0x4E2E, 0x814E, 0x4E2F,
- 0x814F, 0x4E31, 0x8150, 0x4E33, 0x8151, 0x4E35, 0x8152, 0x4E37, 0x8153, 0x4E3C, 0x8154, 0x4E40, 0x8155, 0x4E41, 0x8156, 0x4E42,
- 0x8157, 0x4E44, 0x8158, 0x4E46, 0x8159, 0x4E4A, 0x815A, 0x4E51, 0x815B, 0x4E55, 0x815C, 0x4E57, 0x815D, 0x4E5A, 0x815E, 0x4E5B,
- 0x815F, 0x4E62, 0x8160, 0x4E63, 0x8161, 0x4E64, 0x8162, 0x4E65, 0x8163, 0x4E67, 0x8164, 0x4E68, 0x8165, 0x4E6A, 0x8166, 0x4E6B,
- 0x8167, 0x4E6C, 0x8168, 0x4E6D, 0x8169, 0x4E6E, 0x816A, 0x4E6F, 0x816B, 0x4E72, 0x816C, 0x4E74, 0x816D, 0x4E75, 0x816E, 0x4E76,
- 0x816F, 0x4E77, 0x8170, 0x4E78, 0x8171, 0x4E79, 0x8172, 0x4E7A, 0x8173, 0x4E7B, 0x8174, 0x4E7C, 0x8175, 0x4E7D, 0x8176, 0x4E7F,
- 0x8177, 0x4E80, 0x8178, 0x4E81, 0x8179, 0x4E82, 0x817A, 0x4E83, 0x817B, 0x4E84, 0x817C, 0x4E85, 0x817D, 0x4E87, 0x817E, 0x4E8A,
- 0x8180, 0x4E90, 0x8181, 0x4E96, 0x8182, 0x4E97, 0x8183, 0x4E99, 0x8184, 0x4E9C, 0x8185, 0x4E9D, 0x8186, 0x4E9E, 0x8187, 0x4EA3,
- 0x8188, 0x4EAA, 0x8189, 0x4EAF, 0x818A, 0x4EB0, 0x818B, 0x4EB1, 0x818C, 0x4EB4, 0x818D, 0x4EB6, 0x818E, 0x4EB7, 0x818F, 0x4EB8,
- 0x8190, 0x4EB9, 0x8191, 0x4EBC, 0x8192, 0x4EBD, 0x8193, 0x4EBE, 0x8194, 0x4EC8, 0x8195, 0x4ECC, 0x8196, 0x4ECF, 0x8197, 0x4ED0,
- 0x8198, 0x4ED2, 0x8199, 0x4EDA, 0x819A, 0x4EDB, 0x819B, 0x4EDC, 0x819C, 0x4EE0, 0x819D, 0x4EE2, 0x819E, 0x4EE6, 0x819F, 0x4EE7,
- 0x81A0, 0x4EE9, 0x81A1, 0x4EED, 0x81A2, 0x4EEE, 0x81A3, 0x4EEF, 0x81A4, 0x4EF1, 0x81A5, 0x4EF4, 0x81A6, 0x4EF8, 0x81A7, 0x4EF9,
- 0x81A8, 0x4EFA, 0x81A9, 0x4EFC, 0x81AA, 0x4EFE, 0x81AB, 0x4F00, 0x81AC, 0x4F02, 0x81AD, 0x4F03, 0x81AE, 0x4F04, 0x81AF, 0x4F05,
- 0x81B0, 0x4F06, 0x81B1, 0x4F07, 0x81B2, 0x4F08, 0x81B3, 0x4F0B, 0x81B4, 0x4F0C, 0x81B5, 0x4F12, 0x81B6, 0x4F13, 0x81B7, 0x4F14,
- 0x81B8, 0x4F15, 0x81B9, 0x4F16, 0x81BA, 0x4F1C, 0x81BB, 0x4F1D, 0x81BC, 0x4F21, 0x81BD, 0x4F23, 0x81BE, 0x4F28, 0x81BF, 0x4F29,
- 0x81C0, 0x4F2C, 0x81C1, 0x4F2D, 0x81C2, 0x4F2E, 0x81C3, 0x4F31, 0x81C4, 0x4F33, 0x81C5, 0x4F35, 0x81C6, 0x4F37, 0x81C7, 0x4F39,
- 0x81C8, 0x4F3B, 0x81C9, 0x4F3E, 0x81CA, 0x4F3F, 0x81CB, 0x4F40, 0x81CC, 0x4F41, 0x81CD, 0x4F42, 0x81CE, 0x4F44, 0x81CF, 0x4F45,
- 0x81D0, 0x4F47, 0x81D1, 0x4F48, 0x81D2, 0x4F49, 0x81D3, 0x4F4A, 0x81D4, 0x4F4B, 0x81D5, 0x4F4C, 0x81D6, 0x4F52, 0x81D7, 0x4F54,
- 0x81D8, 0x4F56, 0x81D9, 0x4F61, 0x81DA, 0x4F62, 0x81DB, 0x4F66, 0x81DC, 0x4F68, 0x81DD, 0x4F6A, 0x81DE, 0x4F6B, 0x81DF, 0x4F6D,
- 0x81E0, 0x4F6E, 0x81E1, 0x4F71, 0x81E2, 0x4F72, 0x81E3, 0x4F75, 0x81E4, 0x4F77, 0x81E5, 0x4F78, 0x81E6, 0x4F79, 0x81E7, 0x4F7A,
- 0x81E8, 0x4F7D, 0x81E9, 0x4F80, 0x81EA, 0x4F81, 0x81EB, 0x4F82, 0x81EC, 0x4F85, 0x81ED, 0x4F86, 0x81EE, 0x4F87, 0x81EF, 0x4F8A,
- 0x81F0, 0x4F8C, 0x81F1, 0x4F8E, 0x81F2, 0x4F90, 0x81F3, 0x4F92, 0x81F4, 0x4F93, 0x81F5, 0x4F95, 0x81F6, 0x4F96, 0x81F7, 0x4F98,
- 0x81F8, 0x4F99, 0x81F9, 0x4F9A, 0x81FA, 0x4F9C, 0x81FB, 0x4F9E, 0x81FC, 0x4F9F, 0x81FD, 0x4FA1, 0x81FE, 0x4FA2, 0x8240, 0x4FA4,
- 0x8241, 0x4FAB, 0x8242, 0x4FAD, 0x8243, 0x4FB0, 0x8244, 0x4FB1, 0x8245, 0x4FB2, 0x8246, 0x4FB3, 0x8247, 0x4FB4, 0x8248, 0x4FB6,
- 0x8249, 0x4FB7, 0x824A, 0x4FB8, 0x824B, 0x4FB9, 0x824C, 0x4FBA, 0x824D, 0x4FBB, 0x824E, 0x4FBC, 0x824F, 0x4FBD, 0x8250, 0x4FBE,
- 0x8251, 0x4FC0, 0x8252, 0x4FC1, 0x8253, 0x4FC2, 0x8254, 0x4FC6, 0x8255, 0x4FC7, 0x8256, 0x4FC8, 0x8257, 0x4FC9, 0x8258, 0x4FCB,
- 0x8259, 0x4FCC, 0x825A, 0x4FCD, 0x825B, 0x4FD2, 0x825C, 0x4FD3, 0x825D, 0x4FD4, 0x825E, 0x4FD5, 0x825F, 0x4FD6, 0x8260, 0x4FD9,
- 0x8261, 0x4FDB, 0x8262, 0x4FE0, 0x8263, 0x4FE2, 0x8264, 0x4FE4, 0x8265, 0x4FE5, 0x8266, 0x4FE7, 0x8267, 0x4FEB, 0x8268, 0x4FEC,
- 0x8269, 0x4FF0, 0x826A, 0x4FF2, 0x826B, 0x4FF4, 0x826C, 0x4FF5, 0x826D, 0x4FF6, 0x826E, 0x4FF7, 0x826F, 0x4FF9, 0x8270, 0x4FFB,
- 0x8271, 0x4FFC, 0x8272, 0x4FFD, 0x8273, 0x4FFF, 0x8274, 0x5000, 0x8275, 0x5001, 0x8276, 0x5002, 0x8277, 0x5003, 0x8278, 0x5004,
- 0x8279, 0x5005, 0x827A, 0x5006, 0x827B, 0x5007, 0x827C, 0x5008, 0x827D, 0x5009, 0x827E, 0x500A, 0x8280, 0x500B, 0x8281, 0x500E,
- 0x8282, 0x5010, 0x8283, 0x5011, 0x8284, 0x5013, 0x8285, 0x5015, 0x8286, 0x5016, 0x8287, 0x5017, 0x8288, 0x501B, 0x8289, 0x501D,
- 0x828A, 0x501E, 0x828B, 0x5020, 0x828C, 0x5022, 0x828D, 0x5023, 0x828E, 0x5024, 0x828F, 0x5027, 0x8290, 0x502B, 0x8291, 0x502F,
- 0x8292, 0x5030, 0x8293, 0x5031, 0x8294, 0x5032, 0x8295, 0x5033, 0x8296, 0x5034, 0x8297, 0x5035, 0x8298, 0x5036, 0x8299, 0x5037,
- 0x829A, 0x5038, 0x829B, 0x5039, 0x829C, 0x503B, 0x829D, 0x503D, 0x829E, 0x503F, 0x829F, 0x5040, 0x82A0, 0x5041, 0x82A1, 0x5042,
- 0x82A2, 0x5044, 0x82A3, 0x5045, 0x82A4, 0x5046, 0x82A5, 0x5049, 0x82A6, 0x504A, 0x82A7, 0x504B, 0x82A8, 0x504D, 0x82A9, 0x5050,
- 0x82AA, 0x5051, 0x82AB, 0x5052, 0x82AC, 0x5053, 0x82AD, 0x5054, 0x82AE, 0x5056, 0x82AF, 0x5057, 0x82B0, 0x5058, 0x82B1, 0x5059,
- 0x82B2, 0x505B, 0x82B3, 0x505D, 0x82B4, 0x505E, 0x82B5, 0x505F, 0x82B6, 0x5060, 0x82B7, 0x5061, 0x82B8, 0x5062, 0x82B9, 0x5063,
- 0x82BA, 0x5064, 0x82BB, 0x5066, 0x82BC, 0x5067, 0x82BD, 0x5068, 0x82BE, 0x5069, 0x82BF, 0x506A, 0x82C0, 0x506B, 0x82C1, 0x506D,
- 0x82C2, 0x506E, 0x82C3, 0x506F, 0x82C4, 0x5070, 0x82C5, 0x5071, 0x82C6, 0x5072, 0x82C7, 0x5073, 0x82C8, 0x5074, 0x82C9, 0x5075,
- 0x82CA, 0x5078, 0x82CB, 0x5079, 0x82CC, 0x507A, 0x82CD, 0x507C, 0x82CE, 0x507D, 0x82CF, 0x5081, 0x82D0, 0x5082, 0x82D1, 0x5083,
- 0x82D2, 0x5084, 0x82D3, 0x5086, 0x82D4, 0x5087, 0x82D5, 0x5089, 0x82D6, 0x508A, 0x82D7, 0x508B, 0x82D8, 0x508C, 0x82D9, 0x508E,
- 0x82DA, 0x508F, 0x82DB, 0x5090, 0x82DC, 0x5091, 0x82DD, 0x5092, 0x82DE, 0x5093, 0x82DF, 0x5094, 0x82E0, 0x5095, 0x82E1, 0x5096,
- 0x82E2, 0x5097, 0x82E3, 0x5098, 0x82E4, 0x5099, 0x82E5, 0x509A, 0x82E6, 0x509B, 0x82E7, 0x509C, 0x82E8, 0x509D, 0x82E9, 0x509E,
- 0x82EA, 0x509F, 0x82EB, 0x50A0, 0x82EC, 0x50A1, 0x82ED, 0x50A2, 0x82EE, 0x50A4, 0x82EF, 0x50A6, 0x82F0, 0x50AA, 0x82F1, 0x50AB,
- 0x82F2, 0x50AD, 0x82F3, 0x50AE, 0x82F4, 0x50AF, 0x82F5, 0x50B0, 0x82F6, 0x50B1, 0x82F7, 0x50B3, 0x82F8, 0x50B4, 0x82F9, 0x50B5,
- 0x82FA, 0x50B6, 0x82FB, 0x50B7, 0x82FC, 0x50B8, 0x82FD, 0x50B9, 0x82FE, 0x50BC, 0x8340, 0x50BD, 0x8341, 0x50BE, 0x8342, 0x50BF,
- 0x8343, 0x50C0, 0x8344, 0x50C1, 0x8345, 0x50C2, 0x8346, 0x50C3, 0x8347, 0x50C4, 0x8348, 0x50C5, 0x8349, 0x50C6, 0x834A, 0x50C7,
- 0x834B, 0x50C8, 0x834C, 0x50C9, 0x834D, 0x50CA, 0x834E, 0x50CB, 0x834F, 0x50CC, 0x8350, 0x50CD, 0x8351, 0x50CE, 0x8352, 0x50D0,
- 0x8353, 0x50D1, 0x8354, 0x50D2, 0x8355, 0x50D3, 0x8356, 0x50D4, 0x8357, 0x50D5, 0x8358, 0x50D7, 0x8359, 0x50D8, 0x835A, 0x50D9,
- 0x835B, 0x50DB, 0x835C, 0x50DC, 0x835D, 0x50DD, 0x835E, 0x50DE, 0x835F, 0x50DF, 0x8360, 0x50E0, 0x8361, 0x50E1, 0x8362, 0x50E2,
- 0x8363, 0x50E3, 0x8364, 0x50E4, 0x8365, 0x50E5, 0x8366, 0x50E8, 0x8367, 0x50E9, 0x8368, 0x50EA, 0x8369, 0x50EB, 0x836A, 0x50EF,
- 0x836B, 0x50F0, 0x836C, 0x50F1, 0x836D, 0x50F2, 0x836E, 0x50F4, 0x836F, 0x50F6, 0x8370, 0x50F7, 0x8371, 0x50F8, 0x8372, 0x50F9,
- 0x8373, 0x50FA, 0x8374, 0x50FC, 0x8375, 0x50FD, 0x8376, 0x50FE, 0x8377, 0x50FF, 0x8378, 0x5100, 0x8379, 0x5101, 0x837A, 0x5102,
- 0x837B, 0x5103, 0x837C, 0x5104, 0x837D, 0x5105, 0x837E, 0x5108, 0x8380, 0x5109, 0x8381, 0x510A, 0x8382, 0x510C, 0x8383, 0x510D,
- 0x8384, 0x510E, 0x8385, 0x510F, 0x8386, 0x5110, 0x8387, 0x5111, 0x8388, 0x5113, 0x8389, 0x5114, 0x838A, 0x5115, 0x838B, 0x5116,
- 0x838C, 0x5117, 0x838D, 0x5118, 0x838E, 0x5119, 0x838F, 0x511A, 0x8390, 0x511B, 0x8391, 0x511C, 0x8392, 0x511D, 0x8393, 0x511E,
- 0x8394, 0x511F, 0x8395, 0x5120, 0x8396, 0x5122, 0x8397, 0x5123, 0x8398, 0x5124, 0x8399, 0x5125, 0x839A, 0x5126, 0x839B, 0x5127,
- 0x839C, 0x5128, 0x839D, 0x5129, 0x839E, 0x512A, 0x839F, 0x512B, 0x83A0, 0x512C, 0x83A1, 0x512D, 0x83A2, 0x512E, 0x83A3, 0x512F,
- 0x83A4, 0x5130, 0x83A5, 0x5131, 0x83A6, 0x5132, 0x83A7, 0x5133, 0x83A8, 0x5134, 0x83A9, 0x5135, 0x83AA, 0x5136, 0x83AB, 0x5137,
- 0x83AC, 0x5138, 0x83AD, 0x5139, 0x83AE, 0x513A, 0x83AF, 0x513B, 0x83B0, 0x513C, 0x83B1, 0x513D, 0x83B2, 0x513E, 0x83B3, 0x5142,
- 0x83B4, 0x5147, 0x83B5, 0x514A, 0x83B6, 0x514C, 0x83B7, 0x514E, 0x83B8, 0x514F, 0x83B9, 0x5150, 0x83BA, 0x5152, 0x83BB, 0x5153,
- 0x83BC, 0x5157, 0x83BD, 0x5158, 0x83BE, 0x5159, 0x83BF, 0x515B, 0x83C0, 0x515D, 0x83C1, 0x515E, 0x83C2, 0x515F, 0x83C3, 0x5160,
- 0x83C4, 0x5161, 0x83C5, 0x5163, 0x83C6, 0x5164, 0x83C7, 0x5166, 0x83C8, 0x5167, 0x83C9, 0x5169, 0x83CA, 0x516A, 0x83CB, 0x516F,
- 0x83CC, 0x5172, 0x83CD, 0x517A, 0x83CE, 0x517E, 0x83CF, 0x517F, 0x83D0, 0x5183, 0x83D1, 0x5184, 0x83D2, 0x5186, 0x83D3, 0x5187,
- 0x83D4, 0x518A, 0x83D5, 0x518B, 0x83D6, 0x518E, 0x83D7, 0x518F, 0x83D8, 0x5190, 0x83D9, 0x5191, 0x83DA, 0x5193, 0x83DB, 0x5194,
- 0x83DC, 0x5198, 0x83DD, 0x519A, 0x83DE, 0x519D, 0x83DF, 0x519E, 0x83E0, 0x519F, 0x83E1, 0x51A1, 0x83E2, 0x51A3, 0x83E3, 0x51A6,
- 0x83E4, 0x51A7, 0x83E5, 0x51A8, 0x83E6, 0x51A9, 0x83E7, 0x51AA, 0x83E8, 0x51AD, 0x83E9, 0x51AE, 0x83EA, 0x51B4, 0x83EB, 0x51B8,
- 0x83EC, 0x51B9, 0x83ED, 0x51BA, 0x83EE, 0x51BE, 0x83EF, 0x51BF, 0x83F0, 0x51C1, 0x83F1, 0x51C2, 0x83F2, 0x51C3, 0x83F3, 0x51C5,
- 0x83F4, 0x51C8, 0x83F5, 0x51CA, 0x83F6, 0x51CD, 0x83F7, 0x51CE, 0x83F8, 0x51D0, 0x83F9, 0x51D2, 0x83FA, 0x51D3, 0x83FB, 0x51D4,
- 0x83FC, 0x51D5, 0x83FD, 0x51D6, 0x83FE, 0x51D7, 0x8440, 0x51D8, 0x8441, 0x51D9, 0x8442, 0x51DA, 0x8443, 0x51DC, 0x8444, 0x51DE,
- 0x8445, 0x51DF, 0x8446, 0x51E2, 0x8447, 0x51E3, 0x8448, 0x51E5, 0x8449, 0x51E6, 0x844A, 0x51E7, 0x844B, 0x51E8, 0x844C, 0x51E9,
- 0x844D, 0x51EA, 0x844E, 0x51EC, 0x844F, 0x51EE, 0x8450, 0x51F1, 0x8451, 0x51F2, 0x8452, 0x51F4, 0x8453, 0x51F7, 0x8454, 0x51FE,
- 0x8455, 0x5204, 0x8456, 0x5205, 0x8457, 0x5209, 0x8458, 0x520B, 0x8459, 0x520C, 0x845A, 0x520F, 0x845B, 0x5210, 0x845C, 0x5213,
- 0x845D, 0x5214, 0x845E, 0x5215, 0x845F, 0x521C, 0x8460, 0x521E, 0x8461, 0x521F, 0x8462, 0x5221, 0x8463, 0x5222, 0x8464, 0x5223,
- 0x8465, 0x5225, 0x8466, 0x5226, 0x8467, 0x5227, 0x8468, 0x522A, 0x8469, 0x522C, 0x846A, 0x522F, 0x846B, 0x5231, 0x846C, 0x5232,
- 0x846D, 0x5234, 0x846E, 0x5235, 0x846F, 0x523C, 0x8470, 0x523E, 0x8471, 0x5244, 0x8472, 0x5245, 0x8473, 0x5246, 0x8474, 0x5247,
- 0x8475, 0x5248, 0x8476, 0x5249, 0x8477, 0x524B, 0x8478, 0x524E, 0x8479, 0x524F, 0x847A, 0x5252, 0x847B, 0x5253, 0x847C, 0x5255,
- 0x847D, 0x5257, 0x847E, 0x5258, 0x8480, 0x5259, 0x8481, 0x525A, 0x8482, 0x525B, 0x8483, 0x525D, 0x8484, 0x525F, 0x8485, 0x5260,
- 0x8486, 0x5262, 0x8487, 0x5263, 0x8488, 0x5264, 0x8489, 0x5266, 0x848A, 0x5268, 0x848B, 0x526B, 0x848C, 0x526C, 0x848D, 0x526D,
- 0x848E, 0x526E, 0x848F, 0x5270, 0x8490, 0x5271, 0x8491, 0x5273, 0x8492, 0x5274, 0x8493, 0x5275, 0x8494, 0x5276, 0x8495, 0x5277,
- 0x8496, 0x5278, 0x8497, 0x5279, 0x8498, 0x527A, 0x8499, 0x527B, 0x849A, 0x527C, 0x849B, 0x527E, 0x849C, 0x5280, 0x849D, 0x5283,
- 0x849E, 0x5284, 0x849F, 0x5285, 0x84A0, 0x5286, 0x84A1, 0x5287, 0x84A2, 0x5289, 0x84A3, 0x528A, 0x84A4, 0x528B, 0x84A5, 0x528C,
- 0x84A6, 0x528D, 0x84A7, 0x528E, 0x84A8, 0x528F, 0x84A9, 0x5291, 0x84AA, 0x5292, 0x84AB, 0x5294, 0x84AC, 0x5295, 0x84AD, 0x5296,
- 0x84AE, 0x5297, 0x84AF, 0x5298, 0x84B0, 0x5299, 0x84B1, 0x529A, 0x84B2, 0x529C, 0x84B3, 0x52A4, 0x84B4, 0x52A5, 0x84B5, 0x52A6,
- 0x84B6, 0x52A7, 0x84B7, 0x52AE, 0x84B8, 0x52AF, 0x84B9, 0x52B0, 0x84BA, 0x52B4, 0x84BB, 0x52B5, 0x84BC, 0x52B6, 0x84BD, 0x52B7,
- 0x84BE, 0x52B8, 0x84BF, 0x52B9, 0x84C0, 0x52BA, 0x84C1, 0x52BB, 0x84C2, 0x52BC, 0x84C3, 0x52BD, 0x84C4, 0x52C0, 0x84C5, 0x52C1,
- 0x84C6, 0x52C2, 0x84C7, 0x52C4, 0x84C8, 0x52C5, 0x84C9, 0x52C6, 0x84CA, 0x52C8, 0x84CB, 0x52CA, 0x84CC, 0x52CC, 0x84CD, 0x52CD,
- 0x84CE, 0x52CE, 0x84CF, 0x52CF, 0x84D0, 0x52D1, 0x84D1, 0x52D3, 0x84D2, 0x52D4, 0x84D3, 0x52D5, 0x84D4, 0x52D7, 0x84D5, 0x52D9,
- 0x84D6, 0x52DA, 0x84D7, 0x52DB, 0x84D8, 0x52DC, 0x84D9, 0x52DD, 0x84DA, 0x52DE, 0x84DB, 0x52E0, 0x84DC, 0x52E1, 0x84DD, 0x52E2,
- 0x84DE, 0x52E3, 0x84DF, 0x52E5, 0x84E0, 0x52E6, 0x84E1, 0x52E7, 0x84E2, 0x52E8, 0x84E3, 0x52E9, 0x84E4, 0x52EA, 0x84E5, 0x52EB,
- 0x84E6, 0x52EC, 0x84E7, 0x52ED, 0x84E8, 0x52EE, 0x84E9, 0x52EF, 0x84EA, 0x52F1, 0x84EB, 0x52F2, 0x84EC, 0x52F3, 0x84ED, 0x52F4,
- 0x84EE, 0x52F5, 0x84EF, 0x52F6, 0x84F0, 0x52F7, 0x84F1, 0x52F8, 0x84F2, 0x52FB, 0x84F3, 0x52FC, 0x84F4, 0x52FD, 0x84F5, 0x5301,
- 0x84F6, 0x5302, 0x84F7, 0x5303, 0x84F8, 0x5304, 0x84F9, 0x5307, 0x84FA, 0x5309, 0x84FB, 0x530A, 0x84FC, 0x530B, 0x84FD, 0x530C,
- 0x84FE, 0x530E, 0x8540, 0x5311, 0x8541, 0x5312, 0x8542, 0x5313, 0x8543, 0x5314, 0x8544, 0x5318, 0x8545, 0x531B, 0x8546, 0x531C,
- 0x8547, 0x531E, 0x8548, 0x531F, 0x8549, 0x5322, 0x854A, 0x5324, 0x854B, 0x5325, 0x854C, 0x5327, 0x854D, 0x5328, 0x854E, 0x5329,
- 0x854F, 0x532B, 0x8550, 0x532C, 0x8551, 0x532D, 0x8552, 0x532F, 0x8553, 0x5330, 0x8554, 0x5331, 0x8555, 0x5332, 0x8556, 0x5333,
- 0x8557, 0x5334, 0x8558, 0x5335, 0x8559, 0x5336, 0x855A, 0x5337, 0x855B, 0x5338, 0x855C, 0x533C, 0x855D, 0x533D, 0x855E, 0x5340,
- 0x855F, 0x5342, 0x8560, 0x5344, 0x8561, 0x5346, 0x8562, 0x534B, 0x8563, 0x534C, 0x8564, 0x534D, 0x8565, 0x5350, 0x8566, 0x5354,
- 0x8567, 0x5358, 0x8568, 0x5359, 0x8569, 0x535B, 0x856A, 0x535D, 0x856B, 0x5365, 0x856C, 0x5368, 0x856D, 0x536A, 0x856E, 0x536C,
- 0x856F, 0x536D, 0x8570, 0x5372, 0x8571, 0x5376, 0x8572, 0x5379, 0x8573, 0x537B, 0x8574, 0x537C, 0x8575, 0x537D, 0x8576, 0x537E,
- 0x8577, 0x5380, 0x8578, 0x5381, 0x8579, 0x5383, 0x857A, 0x5387, 0x857B, 0x5388, 0x857C, 0x538A, 0x857D, 0x538E, 0x857E, 0x538F,
- 0x8580, 0x5390, 0x8581, 0x5391, 0x8582, 0x5392, 0x8583, 0x5393, 0x8584, 0x5394, 0x8585, 0x5396, 0x8586, 0x5397, 0x8587, 0x5399,
- 0x8588, 0x539B, 0x8589, 0x539C, 0x858A, 0x539E, 0x858B, 0x53A0, 0x858C, 0x53A1, 0x858D, 0x53A4, 0x858E, 0x53A7, 0x858F, 0x53AA,
- 0x8590, 0x53AB, 0x8591, 0x53AC, 0x8592, 0x53AD, 0x8593, 0x53AF, 0x8594, 0x53B0, 0x8595, 0x53B1, 0x8596, 0x53B2, 0x8597, 0x53B3,
- 0x8598, 0x53B4, 0x8599, 0x53B5, 0x859A, 0x53B7, 0x859B, 0x53B8, 0x859C, 0x53B9, 0x859D, 0x53BA, 0x859E, 0x53BC, 0x859F, 0x53BD,
- 0x85A0, 0x53BE, 0x85A1, 0x53C0, 0x85A2, 0x53C3, 0x85A3, 0x53C4, 0x85A4, 0x53C5, 0x85A5, 0x53C6, 0x85A6, 0x53C7, 0x85A7, 0x53CE,
- 0x85A8, 0x53CF, 0x85A9, 0x53D0, 0x85AA, 0x53D2, 0x85AB, 0x53D3, 0x85AC, 0x53D5, 0x85AD, 0x53DA, 0x85AE, 0x53DC, 0x85AF, 0x53DD,
- 0x85B0, 0x53DE, 0x85B1, 0x53E1, 0x85B2, 0x53E2, 0x85B3, 0x53E7, 0x85B4, 0x53F4, 0x85B5, 0x53FA, 0x85B6, 0x53FE, 0x85B7, 0x53FF,
- 0x85B8, 0x5400, 0x85B9, 0x5402, 0x85BA, 0x5405, 0x85BB, 0x5407, 0x85BC, 0x540B, 0x85BD, 0x5414, 0x85BE, 0x5418, 0x85BF, 0x5419,
- 0x85C0, 0x541A, 0x85C1, 0x541C, 0x85C2, 0x5422, 0x85C3, 0x5424, 0x85C4, 0x5425, 0x85C5, 0x542A, 0x85C6, 0x5430, 0x85C7, 0x5433,
- 0x85C8, 0x5436, 0x85C9, 0x5437, 0x85CA, 0x543A, 0x85CB, 0x543D, 0x85CC, 0x543F, 0x85CD, 0x5441, 0x85CE, 0x5442, 0x85CF, 0x5444,
- 0x85D0, 0x5445, 0x85D1, 0x5447, 0x85D2, 0x5449, 0x85D3, 0x544C, 0x85D4, 0x544D, 0x85D5, 0x544E, 0x85D6, 0x544F, 0x85D7, 0x5451,
- 0x85D8, 0x545A, 0x85D9, 0x545D, 0x85DA, 0x545E, 0x85DB, 0x545F, 0x85DC, 0x5460, 0x85DD, 0x5461, 0x85DE, 0x5463, 0x85DF, 0x5465,
- 0x85E0, 0x5467, 0x85E1, 0x5469, 0x85E2, 0x546A, 0x85E3, 0x546B, 0x85E4, 0x546C, 0x85E5, 0x546D, 0x85E6, 0x546E, 0x85E7, 0x546F,
- 0x85E8, 0x5470, 0x85E9, 0x5474, 0x85EA, 0x5479, 0x85EB, 0x547A, 0x85EC, 0x547E, 0x85ED, 0x547F, 0x85EE, 0x5481, 0x85EF, 0x5483,
- 0x85F0, 0x5485, 0x85F1, 0x5487, 0x85F2, 0x5488, 0x85F3, 0x5489, 0x85F4, 0x548A, 0x85F5, 0x548D, 0x85F6, 0x5491, 0x85F7, 0x5493,
- 0x85F8, 0x5497, 0x85F9, 0x5498, 0x85FA, 0x549C, 0x85FB, 0x549E, 0x85FC, 0x549F, 0x85FD, 0x54A0, 0x85FE, 0x54A1, 0x8640, 0x54A2,
- 0x8641, 0x54A5, 0x8642, 0x54AE, 0x8643, 0x54B0, 0x8644, 0x54B2, 0x8645, 0x54B5, 0x8646, 0x54B6, 0x8647, 0x54B7, 0x8648, 0x54B9,
- 0x8649, 0x54BA, 0x864A, 0x54BC, 0x864B, 0x54BE, 0x864C, 0x54C3, 0x864D, 0x54C5, 0x864E, 0x54CA, 0x864F, 0x54CB, 0x8650, 0x54D6,
- 0x8651, 0x54D8, 0x8652, 0x54DB, 0x8653, 0x54E0, 0x8654, 0x54E1, 0x8655, 0x54E2, 0x8656, 0x54E3, 0x8657, 0x54E4, 0x8658, 0x54EB,
- 0x8659, 0x54EC, 0x865A, 0x54EF, 0x865B, 0x54F0, 0x865C, 0x54F1, 0x865D, 0x54F4, 0x865E, 0x54F5, 0x865F, 0x54F6, 0x8660, 0x54F7,
- 0x8661, 0x54F8, 0x8662, 0x54F9, 0x8663, 0x54FB, 0x8664, 0x54FE, 0x8665, 0x5500, 0x8666, 0x5502, 0x8667, 0x5503, 0x8668, 0x5504,
- 0x8669, 0x5505, 0x866A, 0x5508, 0x866B, 0x550A, 0x866C, 0x550B, 0x866D, 0x550C, 0x866E, 0x550D, 0x866F, 0x550E, 0x8670, 0x5512,
- 0x8671, 0x5513, 0x8672, 0x5515, 0x8673, 0x5516, 0x8674, 0x5517, 0x8675, 0x5518, 0x8676, 0x5519, 0x8677, 0x551A, 0x8678, 0x551C,
- 0x8679, 0x551D, 0x867A, 0x551E, 0x867B, 0x551F, 0x867C, 0x5521, 0x867D, 0x5525, 0x867E, 0x5526, 0x8680, 0x5528, 0x8681, 0x5529,
- 0x8682, 0x552B, 0x8683, 0x552D, 0x8684, 0x5532, 0x8685, 0x5534, 0x8686, 0x5535, 0x8687, 0x5536, 0x8688, 0x5538, 0x8689, 0x5539,
- 0x868A, 0x553A, 0x868B, 0x553B, 0x868C, 0x553D, 0x868D, 0x5540, 0x868E, 0x5542, 0x868F, 0x5545, 0x8690, 0x5547, 0x8691, 0x5548,
- 0x8692, 0x554B, 0x8693, 0x554C, 0x8694, 0x554D, 0x8695, 0x554E, 0x8696, 0x554F, 0x8697, 0x5551, 0x8698, 0x5552, 0x8699, 0x5553,
- 0x869A, 0x5554, 0x869B, 0x5557, 0x869C, 0x5558, 0x869D, 0x5559, 0x869E, 0x555A, 0x869F, 0x555B, 0x86A0, 0x555D, 0x86A1, 0x555E,
- 0x86A2, 0x555F, 0x86A3, 0x5560, 0x86A4, 0x5562, 0x86A5, 0x5563, 0x86A6, 0x5568, 0x86A7, 0x5569, 0x86A8, 0x556B, 0x86A9, 0x556F,
- 0x86AA, 0x5570, 0x86AB, 0x5571, 0x86AC, 0x5572, 0x86AD, 0x5573, 0x86AE, 0x5574, 0x86AF, 0x5579, 0x86B0, 0x557A, 0x86B1, 0x557D,
- 0x86B2, 0x557F, 0x86B3, 0x5585, 0x86B4, 0x5586, 0x86B5, 0x558C, 0x86B6, 0x558D, 0x86B7, 0x558E, 0x86B8, 0x5590, 0x86B9, 0x5592,
- 0x86BA, 0x5593, 0x86BB, 0x5595, 0x86BC, 0x5596, 0x86BD, 0x5597, 0x86BE, 0x559A, 0x86BF, 0x559B, 0x86C0, 0x559E, 0x86C1, 0x55A0,
- 0x86C2, 0x55A1, 0x86C3, 0x55A2, 0x86C4, 0x55A3, 0x86C5, 0x55A4, 0x86C6, 0x55A5, 0x86C7, 0x55A6, 0x86C8, 0x55A8, 0x86C9, 0x55A9,
- 0x86CA, 0x55AA, 0x86CB, 0x55AB, 0x86CC, 0x55AC, 0x86CD, 0x55AD, 0x86CE, 0x55AE, 0x86CF, 0x55AF, 0x86D0, 0x55B0, 0x86D1, 0x55B2,
- 0x86D2, 0x55B4, 0x86D3, 0x55B6, 0x86D4, 0x55B8, 0x86D5, 0x55BA, 0x86D6, 0x55BC, 0x86D7, 0x55BF, 0x86D8, 0x55C0, 0x86D9, 0x55C1,
- 0x86DA, 0x55C2, 0x86DB, 0x55C3, 0x86DC, 0x55C6, 0x86DD, 0x55C7, 0x86DE, 0x55C8, 0x86DF, 0x55CA, 0x86E0, 0x55CB, 0x86E1, 0x55CE,
- 0x86E2, 0x55CF, 0x86E3, 0x55D0, 0x86E4, 0x55D5, 0x86E5, 0x55D7, 0x86E6, 0x55D8, 0x86E7, 0x55D9, 0x86E8, 0x55DA, 0x86E9, 0x55DB,
- 0x86EA, 0x55DE, 0x86EB, 0x55E0, 0x86EC, 0x55E2, 0x86ED, 0x55E7, 0x86EE, 0x55E9, 0x86EF, 0x55ED, 0x86F0, 0x55EE, 0x86F1, 0x55F0,
- 0x86F2, 0x55F1, 0x86F3, 0x55F4, 0x86F4, 0x55F6, 0x86F5, 0x55F8, 0x86F6, 0x55F9, 0x86F7, 0x55FA, 0x86F8, 0x55FB, 0x86F9, 0x55FC,
- 0x86FA, 0x55FF, 0x86FB, 0x5602, 0x86FC, 0x5603, 0x86FD, 0x5604, 0x86FE, 0x5605, 0x8740, 0x5606, 0x8741, 0x5607, 0x8742, 0x560A,
- 0x8743, 0x560B, 0x8744, 0x560D, 0x8745, 0x5610, 0x8746, 0x5611, 0x8747, 0x5612, 0x8748, 0x5613, 0x8749, 0x5614, 0x874A, 0x5615,
- 0x874B, 0x5616, 0x874C, 0x5617, 0x874D, 0x5619, 0x874E, 0x561A, 0x874F, 0x561C, 0x8750, 0x561D, 0x8751, 0x5620, 0x8752, 0x5621,
- 0x8753, 0x5622, 0x8754, 0x5625, 0x8755, 0x5626, 0x8756, 0x5628, 0x8757, 0x5629, 0x8758, 0x562A, 0x8759, 0x562B, 0x875A, 0x562E,
- 0x875B, 0x562F, 0x875C, 0x5630, 0x875D, 0x5633, 0x875E, 0x5635, 0x875F, 0x5637, 0x8760, 0x5638, 0x8761, 0x563A, 0x8762, 0x563C,
- 0x8763, 0x563D, 0x8764, 0x563E, 0x8765, 0x5640, 0x8766, 0x5641, 0x8767, 0x5642, 0x8768, 0x5643, 0x8769, 0x5644, 0x876A, 0x5645,
- 0x876B, 0x5646, 0x876C, 0x5647, 0x876D, 0x5648, 0x876E, 0x5649, 0x876F, 0x564A, 0x8770, 0x564B, 0x8771, 0x564F, 0x8772, 0x5650,
- 0x8773, 0x5651, 0x8774, 0x5652, 0x8775, 0x5653, 0x8776, 0x5655, 0x8777, 0x5656, 0x8778, 0x565A, 0x8779, 0x565B, 0x877A, 0x565D,
- 0x877B, 0x565E, 0x877C, 0x565F, 0x877D, 0x5660, 0x877E, 0x5661, 0x8780, 0x5663, 0x8781, 0x5665, 0x8782, 0x5666, 0x8783, 0x5667,
- 0x8784, 0x566D, 0x8785, 0x566E, 0x8786, 0x566F, 0x8787, 0x5670, 0x8788, 0x5672, 0x8789, 0x5673, 0x878A, 0x5674, 0x878B, 0x5675,
- 0x878C, 0x5677, 0x878D, 0x5678, 0x878E, 0x5679, 0x878F, 0x567A, 0x8790, 0x567D, 0x8791, 0x567E, 0x8792, 0x567F, 0x8793, 0x5680,
- 0x8794, 0x5681, 0x8795, 0x5682, 0x8796, 0x5683, 0x8797, 0x5684, 0x8798, 0x5687, 0x8799, 0x5688, 0x879A, 0x5689, 0x879B, 0x568A,
- 0x879C, 0x568B, 0x879D, 0x568C, 0x879E, 0x568D, 0x879F, 0x5690, 0x87A0, 0x5691, 0x87A1, 0x5692, 0x87A2, 0x5694, 0x87A3, 0x5695,
- 0x87A4, 0x5696, 0x87A5, 0x5697, 0x87A6, 0x5698, 0x87A7, 0x5699, 0x87A8, 0x569A, 0x87A9, 0x569B, 0x87AA, 0x569C, 0x87AB, 0x569D,
- 0x87AC, 0x569E, 0x87AD, 0x569F, 0x87AE, 0x56A0, 0x87AF, 0x56A1, 0x87B0, 0x56A2, 0x87B1, 0x56A4, 0x87B2, 0x56A5, 0x87B3, 0x56A6,
- 0x87B4, 0x56A7, 0x87B5, 0x56A8, 0x87B6, 0x56A9, 0x87B7, 0x56AA, 0x87B8, 0x56AB, 0x87B9, 0x56AC, 0x87BA, 0x56AD, 0x87BB, 0x56AE,
- 0x87BC, 0x56B0, 0x87BD, 0x56B1, 0x87BE, 0x56B2, 0x87BF, 0x56B3, 0x87C0, 0x56B4, 0x87C1, 0x56B5, 0x87C2, 0x56B6, 0x87C3, 0x56B8,
- 0x87C4, 0x56B9, 0x87C5, 0x56BA, 0x87C6, 0x56BB, 0x87C7, 0x56BD, 0x87C8, 0x56BE, 0x87C9, 0x56BF, 0x87CA, 0x56C0, 0x87CB, 0x56C1,
- 0x87CC, 0x56C2, 0x87CD, 0x56C3, 0x87CE, 0x56C4, 0x87CF, 0x56C5, 0x87D0, 0x56C6, 0x87D1, 0x56C7, 0x87D2, 0x56C8, 0x87D3, 0x56C9,
- 0x87D4, 0x56CB, 0x87D5, 0x56CC, 0x87D6, 0x56CD, 0x87D7, 0x56CE, 0x87D8, 0x56CF, 0x87D9, 0x56D0, 0x87DA, 0x56D1, 0x87DB, 0x56D2,
- 0x87DC, 0x56D3, 0x87DD, 0x56D5, 0x87DE, 0x56D6, 0x87DF, 0x56D8, 0x87E0, 0x56D9, 0x87E1, 0x56DC, 0x87E2, 0x56E3, 0x87E3, 0x56E5,
- 0x87E4, 0x56E6, 0x87E5, 0x56E7, 0x87E6, 0x56E8, 0x87E7, 0x56E9, 0x87E8, 0x56EA, 0x87E9, 0x56EC, 0x87EA, 0x56EE, 0x87EB, 0x56EF,
- 0x87EC, 0x56F2, 0x87ED, 0x56F3, 0x87EE, 0x56F6, 0x87EF, 0x56F7, 0x87F0, 0x56F8, 0x87F1, 0x56FB, 0x87F2, 0x56FC, 0x87F3, 0x5700,
- 0x87F4, 0x5701, 0x87F5, 0x5702, 0x87F6, 0x5705, 0x87F7, 0x5707, 0x87F8, 0x570B, 0x87F9, 0x570C, 0x87FA, 0x570D, 0x87FB, 0x570E,
- 0x87FC, 0x570F, 0x87FD, 0x5710, 0x87FE, 0x5711, 0x8840, 0x5712, 0x8841, 0x5713, 0x8842, 0x5714, 0x8843, 0x5715, 0x8844, 0x5716,
- 0x8845, 0x5717, 0x8846, 0x5718, 0x8847, 0x5719, 0x8848, 0x571A, 0x8849, 0x571B, 0x884A, 0x571D, 0x884B, 0x571E, 0x884C, 0x5720,
- 0x884D, 0x5721, 0x884E, 0x5722, 0x884F, 0x5724, 0x8850, 0x5725, 0x8851, 0x5726, 0x8852, 0x5727, 0x8853, 0x572B, 0x8854, 0x5731,
- 0x8855, 0x5732, 0x8856, 0x5734, 0x8857, 0x5735, 0x8858, 0x5736, 0x8859, 0x5737, 0x885A, 0x5738, 0x885B, 0x573C, 0x885C, 0x573D,
- 0x885D, 0x573F, 0x885E, 0x5741, 0x885F, 0x5743, 0x8860, 0x5744, 0x8861, 0x5745, 0x8862, 0x5746, 0x8863, 0x5748, 0x8864, 0x5749,
- 0x8865, 0x574B, 0x8866, 0x5752, 0x8867, 0x5753, 0x8868, 0x5754, 0x8869, 0x5755, 0x886A, 0x5756, 0x886B, 0x5758, 0x886C, 0x5759,
- 0x886D, 0x5762, 0x886E, 0x5763, 0x886F, 0x5765, 0x8870, 0x5767, 0x8871, 0x576C, 0x8872, 0x576E, 0x8873, 0x5770, 0x8874, 0x5771,
- 0x8875, 0x5772, 0x8876, 0x5774, 0x8877, 0x5775, 0x8878, 0x5778, 0x8879, 0x5779, 0x887A, 0x577A, 0x887B, 0x577D, 0x887C, 0x577E,
- 0x887D, 0x577F, 0x887E, 0x5780, 0x8880, 0x5781, 0x8881, 0x5787, 0x8882, 0x5788, 0x8883, 0x5789, 0x8884, 0x578A, 0x8885, 0x578D,
- 0x8886, 0x578E, 0x8887, 0x578F, 0x8888, 0x5790, 0x8889, 0x5791, 0x888A, 0x5794, 0x888B, 0x5795, 0x888C, 0x5796, 0x888D, 0x5797,
- 0x888E, 0x5798, 0x888F, 0x5799, 0x8890, 0x579A, 0x8891, 0x579C, 0x8892, 0x579D, 0x8893, 0x579E, 0x8894, 0x579F, 0x8895, 0x57A5,
- 0x8896, 0x57A8, 0x8897, 0x57AA, 0x8898, 0x57AC, 0x8899, 0x57AF, 0x889A, 0x57B0, 0x889B, 0x57B1, 0x889C, 0x57B3, 0x889D, 0x57B5,
- 0x889E, 0x57B6, 0x889F, 0x57B7, 0x88A0, 0x57B9, 0x88A1, 0x57BA, 0x88A2, 0x57BB, 0x88A3, 0x57BC, 0x88A4, 0x57BD, 0x88A5, 0x57BE,
- 0x88A6, 0x57BF, 0x88A7, 0x57C0, 0x88A8, 0x57C1, 0x88A9, 0x57C4, 0x88AA, 0x57C5, 0x88AB, 0x57C6, 0x88AC, 0x57C7, 0x88AD, 0x57C8,
- 0x88AE, 0x57C9, 0x88AF, 0x57CA, 0x88B0, 0x57CC, 0x88B1, 0x57CD, 0x88B2, 0x57D0, 0x88B3, 0x57D1, 0x88B4, 0x57D3, 0x88B5, 0x57D6,
- 0x88B6, 0x57D7, 0x88B7, 0x57DB, 0x88B8, 0x57DC, 0x88B9, 0x57DE, 0x88BA, 0x57E1, 0x88BB, 0x57E2, 0x88BC, 0x57E3, 0x88BD, 0x57E5,
- 0x88BE, 0x57E6, 0x88BF, 0x57E7, 0x88C0, 0x57E8, 0x88C1, 0x57E9, 0x88C2, 0x57EA, 0x88C3, 0x57EB, 0x88C4, 0x57EC, 0x88C5, 0x57EE,
- 0x88C6, 0x57F0, 0x88C7, 0x57F1, 0x88C8, 0x57F2, 0x88C9, 0x57F3, 0x88CA, 0x57F5, 0x88CB, 0x57F6, 0x88CC, 0x57F7, 0x88CD, 0x57FB,
- 0x88CE, 0x57FC, 0x88CF, 0x57FE, 0x88D0, 0x57FF, 0x88D1, 0x5801, 0x88D2, 0x5803, 0x88D3, 0x5804, 0x88D4, 0x5805, 0x88D5, 0x5808,
- 0x88D6, 0x5809, 0x88D7, 0x580A, 0x88D8, 0x580C, 0x88D9, 0x580E, 0x88DA, 0x580F, 0x88DB, 0x5810, 0x88DC, 0x5812, 0x88DD, 0x5813,
- 0x88DE, 0x5814, 0x88DF, 0x5816, 0x88E0, 0x5817, 0x88E1, 0x5818, 0x88E2, 0x581A, 0x88E3, 0x581B, 0x88E4, 0x581C, 0x88E5, 0x581D,
- 0x88E6, 0x581F, 0x88E7, 0x5822, 0x88E8, 0x5823, 0x88E9, 0x5825, 0x88EA, 0x5826, 0x88EB, 0x5827, 0x88EC, 0x5828, 0x88ED, 0x5829,
- 0x88EE, 0x582B, 0x88EF, 0x582C, 0x88F0, 0x582D, 0x88F1, 0x582E, 0x88F2, 0x582F, 0x88F3, 0x5831, 0x88F4, 0x5832, 0x88F5, 0x5833,
- 0x88F6, 0x5834, 0x88F7, 0x5836, 0x88F8, 0x5837, 0x88F9, 0x5838, 0x88FA, 0x5839, 0x88FB, 0x583A, 0x88FC, 0x583B, 0x88FD, 0x583C,
- 0x88FE, 0x583D, 0x8940, 0x583E, 0x8941, 0x583F, 0x8942, 0x5840, 0x8943, 0x5841, 0x8944, 0x5842, 0x8945, 0x5843, 0x8946, 0x5845,
- 0x8947, 0x5846, 0x8948, 0x5847, 0x8949, 0x5848, 0x894A, 0x5849, 0x894B, 0x584A, 0x894C, 0x584B, 0x894D, 0x584E, 0x894E, 0x584F,
- 0x894F, 0x5850, 0x8950, 0x5852, 0x8951, 0x5853, 0x8952, 0x5855, 0x8953, 0x5856, 0x8954, 0x5857, 0x8955, 0x5859, 0x8956, 0x585A,
- 0x8957, 0x585B, 0x8958, 0x585C, 0x8959, 0x585D, 0x895A, 0x585F, 0x895B, 0x5860, 0x895C, 0x5861, 0x895D, 0x5862, 0x895E, 0x5863,
- 0x895F, 0x5864, 0x8960, 0x5866, 0x8961, 0x5867, 0x8962, 0x5868, 0x8963, 0x5869, 0x8964, 0x586A, 0x8965, 0x586D, 0x8966, 0x586E,
- 0x8967, 0x586F, 0x8968, 0x5870, 0x8969, 0x5871, 0x896A, 0x5872, 0x896B, 0x5873, 0x896C, 0x5874, 0x896D, 0x5875, 0x896E, 0x5876,
- 0x896F, 0x5877, 0x8970, 0x5878, 0x8971, 0x5879, 0x8972, 0x587A, 0x8973, 0x587B, 0x8974, 0x587C, 0x8975, 0x587D, 0x8976, 0x587F,
- 0x8977, 0x5882, 0x8978, 0x5884, 0x8979, 0x5886, 0x897A, 0x5887, 0x897B, 0x5888, 0x897C, 0x588A, 0x897D, 0x588B, 0x897E, 0x588C,
- 0x8980, 0x588D, 0x8981, 0x588E, 0x8982, 0x588F, 0x8983, 0x5890, 0x8984, 0x5891, 0x8985, 0x5894, 0x8986, 0x5895, 0x8987, 0x5896,
- 0x8988, 0x5897, 0x8989, 0x5898, 0x898A, 0x589B, 0x898B, 0x589C, 0x898C, 0x589D, 0x898D, 0x58A0, 0x898E, 0x58A1, 0x898F, 0x58A2,
- 0x8990, 0x58A3, 0x8991, 0x58A4, 0x8992, 0x58A5, 0x8993, 0x58A6, 0x8994, 0x58A7, 0x8995, 0x58AA, 0x8996, 0x58AB, 0x8997, 0x58AC,
- 0x8998, 0x58AD, 0x8999, 0x58AE, 0x899A, 0x58AF, 0x899B, 0x58B0, 0x899C, 0x58B1, 0x899D, 0x58B2, 0x899E, 0x58B3, 0x899F, 0x58B4,
- 0x89A0, 0x58B5, 0x89A1, 0x58B6, 0x89A2, 0x58B7, 0x89A3, 0x58B8, 0x89A4, 0x58B9, 0x89A5, 0x58BA, 0x89A6, 0x58BB, 0x89A7, 0x58BD,
- 0x89A8, 0x58BE, 0x89A9, 0x58BF, 0x89AA, 0x58C0, 0x89AB, 0x58C2, 0x89AC, 0x58C3, 0x89AD, 0x58C4, 0x89AE, 0x58C6, 0x89AF, 0x58C7,
- 0x89B0, 0x58C8, 0x89B1, 0x58C9, 0x89B2, 0x58CA, 0x89B3, 0x58CB, 0x89B4, 0x58CC, 0x89B5, 0x58CD, 0x89B6, 0x58CE, 0x89B7, 0x58CF,
- 0x89B8, 0x58D0, 0x89B9, 0x58D2, 0x89BA, 0x58D3, 0x89BB, 0x58D4, 0x89BC, 0x58D6, 0x89BD, 0x58D7, 0x89BE, 0x58D8, 0x89BF, 0x58D9,
- 0x89C0, 0x58DA, 0x89C1, 0x58DB, 0x89C2, 0x58DC, 0x89C3, 0x58DD, 0x89C4, 0x58DE, 0x89C5, 0x58DF, 0x89C6, 0x58E0, 0x89C7, 0x58E1,
- 0x89C8, 0x58E2, 0x89C9, 0x58E3, 0x89CA, 0x58E5, 0x89CB, 0x58E6, 0x89CC, 0x58E7, 0x89CD, 0x58E8, 0x89CE, 0x58E9, 0x89CF, 0x58EA,
- 0x89D0, 0x58ED, 0x89D1, 0x58EF, 0x89D2, 0x58F1, 0x89D3, 0x58F2, 0x89D4, 0x58F4, 0x89D5, 0x58F5, 0x89D6, 0x58F7, 0x89D7, 0x58F8,
- 0x89D8, 0x58FA, 0x89D9, 0x58FB, 0x89DA, 0x58FC, 0x89DB, 0x58FD, 0x89DC, 0x58FE, 0x89DD, 0x58FF, 0x89DE, 0x5900, 0x89DF, 0x5901,
- 0x89E0, 0x5903, 0x89E1, 0x5905, 0x89E2, 0x5906, 0x89E3, 0x5908, 0x89E4, 0x5909, 0x89E5, 0x590A, 0x89E6, 0x590B, 0x89E7, 0x590C,
- 0x89E8, 0x590E, 0x89E9, 0x5910, 0x89EA, 0x5911, 0x89EB, 0x5912, 0x89EC, 0x5913, 0x89ED, 0x5917, 0x89EE, 0x5918, 0x89EF, 0x591B,
- 0x89F0, 0x591D, 0x89F1, 0x591E, 0x89F2, 0x5920, 0x89F3, 0x5921, 0x89F4, 0x5922, 0x89F5, 0x5923, 0x89F6, 0x5926, 0x89F7, 0x5928,
- 0x89F8, 0x592C, 0x89F9, 0x5930, 0x89FA, 0x5932, 0x89FB, 0x5933, 0x89FC, 0x5935, 0x89FD, 0x5936, 0x89FE, 0x593B, 0x8A40, 0x593D,
- 0x8A41, 0x593E, 0x8A42, 0x593F, 0x8A43, 0x5940, 0x8A44, 0x5943, 0x8A45, 0x5945, 0x8A46, 0x5946, 0x8A47, 0x594A, 0x8A48, 0x594C,
- 0x8A49, 0x594D, 0x8A4A, 0x5950, 0x8A4B, 0x5952, 0x8A4C, 0x5953, 0x8A4D, 0x5959, 0x8A4E, 0x595B, 0x8A4F, 0x595C, 0x8A50, 0x595D,
- 0x8A51, 0x595E, 0x8A52, 0x595F, 0x8A53, 0x5961, 0x8A54, 0x5963, 0x8A55, 0x5964, 0x8A56, 0x5966, 0x8A57, 0x5967, 0x8A58, 0x5968,
- 0x8A59, 0x5969, 0x8A5A, 0x596A, 0x8A5B, 0x596B, 0x8A5C, 0x596C, 0x8A5D, 0x596D, 0x8A5E, 0x596E, 0x8A5F, 0x596F, 0x8A60, 0x5970,
- 0x8A61, 0x5971, 0x8A62, 0x5972, 0x8A63, 0x5975, 0x8A64, 0x5977, 0x8A65, 0x597A, 0x8A66, 0x597B, 0x8A67, 0x597C, 0x8A68, 0x597E,
- 0x8A69, 0x597F, 0x8A6A, 0x5980, 0x8A6B, 0x5985, 0x8A6C, 0x5989, 0x8A6D, 0x598B, 0x8A6E, 0x598C, 0x8A6F, 0x598E, 0x8A70, 0x598F,
- 0x8A71, 0x5990, 0x8A72, 0x5991, 0x8A73, 0x5994, 0x8A74, 0x5995, 0x8A75, 0x5998, 0x8A76, 0x599A, 0x8A77, 0x599B, 0x8A78, 0x599C,
- 0x8A79, 0x599D, 0x8A7A, 0x599F, 0x8A7B, 0x59A0, 0x8A7C, 0x59A1, 0x8A7D, 0x59A2, 0x8A7E, 0x59A6, 0x8A80, 0x59A7, 0x8A81, 0x59AC,
- 0x8A82, 0x59AD, 0x8A83, 0x59B0, 0x8A84, 0x59B1, 0x8A85, 0x59B3, 0x8A86, 0x59B4, 0x8A87, 0x59B5, 0x8A88, 0x59B6, 0x8A89, 0x59B7,
- 0x8A8A, 0x59B8, 0x8A8B, 0x59BA, 0x8A8C, 0x59BC, 0x8A8D, 0x59BD, 0x8A8E, 0x59BF, 0x8A8F, 0x59C0, 0x8A90, 0x59C1, 0x8A91, 0x59C2,
- 0x8A92, 0x59C3, 0x8A93, 0x59C4, 0x8A94, 0x59C5, 0x8A95, 0x59C7, 0x8A96, 0x59C8, 0x8A97, 0x59C9, 0x8A98, 0x59CC, 0x8A99, 0x59CD,
- 0x8A9A, 0x59CE, 0x8A9B, 0x59CF, 0x8A9C, 0x59D5, 0x8A9D, 0x59D6, 0x8A9E, 0x59D9, 0x8A9F, 0x59DB, 0x8AA0, 0x59DE, 0x8AA1, 0x59DF,
- 0x8AA2, 0x59E0, 0x8AA3, 0x59E1, 0x8AA4, 0x59E2, 0x8AA5, 0x59E4, 0x8AA6, 0x59E6, 0x8AA7, 0x59E7, 0x8AA8, 0x59E9, 0x8AA9, 0x59EA,
- 0x8AAA, 0x59EB, 0x8AAB, 0x59ED, 0x8AAC, 0x59EE, 0x8AAD, 0x59EF, 0x8AAE, 0x59F0, 0x8AAF, 0x59F1, 0x8AB0, 0x59F2, 0x8AB1, 0x59F3,
- 0x8AB2, 0x59F4, 0x8AB3, 0x59F5, 0x8AB4, 0x59F6, 0x8AB5, 0x59F7, 0x8AB6, 0x59F8, 0x8AB7, 0x59FA, 0x8AB8, 0x59FC, 0x8AB9, 0x59FD,
- 0x8ABA, 0x59FE, 0x8ABB, 0x5A00, 0x8ABC, 0x5A02, 0x8ABD, 0x5A0A, 0x8ABE, 0x5A0B, 0x8ABF, 0x5A0D, 0x8AC0, 0x5A0E, 0x8AC1, 0x5A0F,
- 0x8AC2, 0x5A10, 0x8AC3, 0x5A12, 0x8AC4, 0x5A14, 0x8AC5, 0x5A15, 0x8AC6, 0x5A16, 0x8AC7, 0x5A17, 0x8AC8, 0x5A19, 0x8AC9, 0x5A1A,
- 0x8ACA, 0x5A1B, 0x8ACB, 0x5A1D, 0x8ACC, 0x5A1E, 0x8ACD, 0x5A21, 0x8ACE, 0x5A22, 0x8ACF, 0x5A24, 0x8AD0, 0x5A26, 0x8AD1, 0x5A27,
- 0x8AD2, 0x5A28, 0x8AD3, 0x5A2A, 0x8AD4, 0x5A2B, 0x8AD5, 0x5A2C, 0x8AD6, 0x5A2D, 0x8AD7, 0x5A2E, 0x8AD8, 0x5A2F, 0x8AD9, 0x5A30,
- 0x8ADA, 0x5A33, 0x8ADB, 0x5A35, 0x8ADC, 0x5A37, 0x8ADD, 0x5A38, 0x8ADE, 0x5A39, 0x8ADF, 0x5A3A, 0x8AE0, 0x5A3B, 0x8AE1, 0x5A3D,
- 0x8AE2, 0x5A3E, 0x8AE3, 0x5A3F, 0x8AE4, 0x5A41, 0x8AE5, 0x5A42, 0x8AE6, 0x5A43, 0x8AE7, 0x5A44, 0x8AE8, 0x5A45, 0x8AE9, 0x5A47,
- 0x8AEA, 0x5A48, 0x8AEB, 0x5A4B, 0x8AEC, 0x5A4C, 0x8AED, 0x5A4D, 0x8AEE, 0x5A4E, 0x8AEF, 0x5A4F, 0x8AF0, 0x5A50, 0x8AF1, 0x5A51,
- 0x8AF2, 0x5A52, 0x8AF3, 0x5A53, 0x8AF4, 0x5A54, 0x8AF5, 0x5A56, 0x8AF6, 0x5A57, 0x8AF7, 0x5A58, 0x8AF8, 0x5A59, 0x8AF9, 0x5A5B,
- 0x8AFA, 0x5A5C, 0x8AFB, 0x5A5D, 0x8AFC, 0x5A5E, 0x8AFD, 0x5A5F, 0x8AFE, 0x5A60, 0x8B40, 0x5A61, 0x8B41, 0x5A63, 0x8B42, 0x5A64,
- 0x8B43, 0x5A65, 0x8B44, 0x5A66, 0x8B45, 0x5A68, 0x8B46, 0x5A69, 0x8B47, 0x5A6B, 0x8B48, 0x5A6C, 0x8B49, 0x5A6D, 0x8B4A, 0x5A6E,
- 0x8B4B, 0x5A6F, 0x8B4C, 0x5A70, 0x8B4D, 0x5A71, 0x8B4E, 0x5A72, 0x8B4F, 0x5A73, 0x8B50, 0x5A78, 0x8B51, 0x5A79, 0x8B52, 0x5A7B,
- 0x8B53, 0x5A7C, 0x8B54, 0x5A7D, 0x8B55, 0x5A7E, 0x8B56, 0x5A80, 0x8B57, 0x5A81, 0x8B58, 0x5A82, 0x8B59, 0x5A83, 0x8B5A, 0x5A84,
- 0x8B5B, 0x5A85, 0x8B5C, 0x5A86, 0x8B5D, 0x5A87, 0x8B5E, 0x5A88, 0x8B5F, 0x5A89, 0x8B60, 0x5A8A, 0x8B61, 0x5A8B, 0x8B62, 0x5A8C,
- 0x8B63, 0x5A8D, 0x8B64, 0x5A8E, 0x8B65, 0x5A8F, 0x8B66, 0x5A90, 0x8B67, 0x5A91, 0x8B68, 0x5A93, 0x8B69, 0x5A94, 0x8B6A, 0x5A95,
- 0x8B6B, 0x5A96, 0x8B6C, 0x5A97, 0x8B6D, 0x5A98, 0x8B6E, 0x5A99, 0x8B6F, 0x5A9C, 0x8B70, 0x5A9D, 0x8B71, 0x5A9E, 0x8B72, 0x5A9F,
- 0x8B73, 0x5AA0, 0x8B74, 0x5AA1, 0x8B75, 0x5AA2, 0x8B76, 0x5AA3, 0x8B77, 0x5AA4, 0x8B78, 0x5AA5, 0x8B79, 0x5AA6, 0x8B7A, 0x5AA7,
- 0x8B7B, 0x5AA8, 0x8B7C, 0x5AA9, 0x8B7D, 0x5AAB, 0x8B7E, 0x5AAC, 0x8B80, 0x5AAD, 0x8B81, 0x5AAE, 0x8B82, 0x5AAF, 0x8B83, 0x5AB0,
- 0x8B84, 0x5AB1, 0x8B85, 0x5AB4, 0x8B86, 0x5AB6, 0x8B87, 0x5AB7, 0x8B88, 0x5AB9, 0x8B89, 0x5ABA, 0x8B8A, 0x5ABB, 0x8B8B, 0x5ABC,
- 0x8B8C, 0x5ABD, 0x8B8D, 0x5ABF, 0x8B8E, 0x5AC0, 0x8B8F, 0x5AC3, 0x8B90, 0x5AC4, 0x8B91, 0x5AC5, 0x8B92, 0x5AC6, 0x8B93, 0x5AC7,
- 0x8B94, 0x5AC8, 0x8B95, 0x5ACA, 0x8B96, 0x5ACB, 0x8B97, 0x5ACD, 0x8B98, 0x5ACE, 0x8B99, 0x5ACF, 0x8B9A, 0x5AD0, 0x8B9B, 0x5AD1,
- 0x8B9C, 0x5AD3, 0x8B9D, 0x5AD5, 0x8B9E, 0x5AD7, 0x8B9F, 0x5AD9, 0x8BA0, 0x5ADA, 0x8BA1, 0x5ADB, 0x8BA2, 0x5ADD, 0x8BA3, 0x5ADE,
- 0x8BA4, 0x5ADF, 0x8BA5, 0x5AE2, 0x8BA6, 0x5AE4, 0x8BA7, 0x5AE5, 0x8BA8, 0x5AE7, 0x8BA9, 0x5AE8, 0x8BAA, 0x5AEA, 0x8BAB, 0x5AEC,
- 0x8BAC, 0x5AED, 0x8BAD, 0x5AEE, 0x8BAE, 0x5AEF, 0x8BAF, 0x5AF0, 0x8BB0, 0x5AF2, 0x8BB1, 0x5AF3, 0x8BB2, 0x5AF4, 0x8BB3, 0x5AF5,
- 0x8BB4, 0x5AF6, 0x8BB5, 0x5AF7, 0x8BB6, 0x5AF8, 0x8BB7, 0x5AF9, 0x8BB8, 0x5AFA, 0x8BB9, 0x5AFB, 0x8BBA, 0x5AFC, 0x8BBB, 0x5AFD,
- 0x8BBC, 0x5AFE, 0x8BBD, 0x5AFF, 0x8BBE, 0x5B00, 0x8BBF, 0x5B01, 0x8BC0, 0x5B02, 0x8BC1, 0x5B03, 0x8BC2, 0x5B04, 0x8BC3, 0x5B05,
- 0x8BC4, 0x5B06, 0x8BC5, 0x5B07, 0x8BC6, 0x5B08, 0x8BC7, 0x5B0A, 0x8BC8, 0x5B0B, 0x8BC9, 0x5B0C, 0x8BCA, 0x5B0D, 0x8BCB, 0x5B0E,
- 0x8BCC, 0x5B0F, 0x8BCD, 0x5B10, 0x8BCE, 0x5B11, 0x8BCF, 0x5B12, 0x8BD0, 0x5B13, 0x8BD1, 0x5B14, 0x8BD2, 0x5B15, 0x8BD3, 0x5B18,
- 0x8BD4, 0x5B19, 0x8BD5, 0x5B1A, 0x8BD6, 0x5B1B, 0x8BD7, 0x5B1C, 0x8BD8, 0x5B1D, 0x8BD9, 0x5B1E, 0x8BDA, 0x5B1F, 0x8BDB, 0x5B20,
- 0x8BDC, 0x5B21, 0x8BDD, 0x5B22, 0x8BDE, 0x5B23, 0x8BDF, 0x5B24, 0x8BE0, 0x5B25, 0x8BE1, 0x5B26, 0x8BE2, 0x5B27, 0x8BE3, 0x5B28,
- 0x8BE4, 0x5B29, 0x8BE5, 0x5B2A, 0x8BE6, 0x5B2B, 0x8BE7, 0x5B2C, 0x8BE8, 0x5B2D, 0x8BE9, 0x5B2E, 0x8BEA, 0x5B2F, 0x8BEB, 0x5B30,
- 0x8BEC, 0x5B31, 0x8BED, 0x5B33, 0x8BEE, 0x5B35, 0x8BEF, 0x5B36, 0x8BF0, 0x5B38, 0x8BF1, 0x5B39, 0x8BF2, 0x5B3A, 0x8BF3, 0x5B3B,
- 0x8BF4, 0x5B3C, 0x8BF5, 0x5B3D, 0x8BF6, 0x5B3E, 0x8BF7, 0x5B3F, 0x8BF8, 0x5B41, 0x8BF9, 0x5B42, 0x8BFA, 0x5B43, 0x8BFB, 0x5B44,
- 0x8BFC, 0x5B45, 0x8BFD, 0x5B46, 0x8BFE, 0x5B47, 0x8C40, 0x5B48, 0x8C41, 0x5B49, 0x8C42, 0x5B4A, 0x8C43, 0x5B4B, 0x8C44, 0x5B4C,
- 0x8C45, 0x5B4D, 0x8C46, 0x5B4E, 0x8C47, 0x5B4F, 0x8C48, 0x5B52, 0x8C49, 0x5B56, 0x8C4A, 0x5B5E, 0x8C4B, 0x5B60, 0x8C4C, 0x5B61,
- 0x8C4D, 0x5B67, 0x8C4E, 0x5B68, 0x8C4F, 0x5B6B, 0x8C50, 0x5B6D, 0x8C51, 0x5B6E, 0x8C52, 0x5B6F, 0x8C53, 0x5B72, 0x8C54, 0x5B74,
- 0x8C55, 0x5B76, 0x8C56, 0x5B77, 0x8C57, 0x5B78, 0x8C58, 0x5B79, 0x8C59, 0x5B7B, 0x8C5A, 0x5B7C, 0x8C5B, 0x5B7E, 0x8C5C, 0x5B7F,
- 0x8C5D, 0x5B82, 0x8C5E, 0x5B86, 0x8C5F, 0x5B8A, 0x8C60, 0x5B8D, 0x8C61, 0x5B8E, 0x8C62, 0x5B90, 0x8C63, 0x5B91, 0x8C64, 0x5B92,
- 0x8C65, 0x5B94, 0x8C66, 0x5B96, 0x8C67, 0x5B9F, 0x8C68, 0x5BA7, 0x8C69, 0x5BA8, 0x8C6A, 0x5BA9, 0x8C6B, 0x5BAC, 0x8C6C, 0x5BAD,
- 0x8C6D, 0x5BAE, 0x8C6E, 0x5BAF, 0x8C6F, 0x5BB1, 0x8C70, 0x5BB2, 0x8C71, 0x5BB7, 0x8C72, 0x5BBA, 0x8C73, 0x5BBB, 0x8C74, 0x5BBC,
- 0x8C75, 0x5BC0, 0x8C76, 0x5BC1, 0x8C77, 0x5BC3, 0x8C78, 0x5BC8, 0x8C79, 0x5BC9, 0x8C7A, 0x5BCA, 0x8C7B, 0x5BCB, 0x8C7C, 0x5BCD,
- 0x8C7D, 0x5BCE, 0x8C7E, 0x5BCF, 0x8C80, 0x5BD1, 0x8C81, 0x5BD4, 0x8C82, 0x5BD5, 0x8C83, 0x5BD6, 0x8C84, 0x5BD7, 0x8C85, 0x5BD8,
- 0x8C86, 0x5BD9, 0x8C87, 0x5BDA, 0x8C88, 0x5BDB, 0x8C89, 0x5BDC, 0x8C8A, 0x5BE0, 0x8C8B, 0x5BE2, 0x8C8C, 0x5BE3, 0x8C8D, 0x5BE6,
- 0x8C8E, 0x5BE7, 0x8C8F, 0x5BE9, 0x8C90, 0x5BEA, 0x8C91, 0x5BEB, 0x8C92, 0x5BEC, 0x8C93, 0x5BED, 0x8C94, 0x5BEF, 0x8C95, 0x5BF1,
- 0x8C96, 0x5BF2, 0x8C97, 0x5BF3, 0x8C98, 0x5BF4, 0x8C99, 0x5BF5, 0x8C9A, 0x5BF6, 0x8C9B, 0x5BF7, 0x8C9C, 0x5BFD, 0x8C9D, 0x5BFE,
- 0x8C9E, 0x5C00, 0x8C9F, 0x5C02, 0x8CA0, 0x5C03, 0x8CA1, 0x5C05, 0x8CA2, 0x5C07, 0x8CA3, 0x5C08, 0x8CA4, 0x5C0B, 0x8CA5, 0x5C0C,
- 0x8CA6, 0x5C0D, 0x8CA7, 0x5C0E, 0x8CA8, 0x5C10, 0x8CA9, 0x5C12, 0x8CAA, 0x5C13, 0x8CAB, 0x5C17, 0x8CAC, 0x5C19, 0x8CAD, 0x5C1B,
- 0x8CAE, 0x5C1E, 0x8CAF, 0x5C1F, 0x8CB0, 0x5C20, 0x8CB1, 0x5C21, 0x8CB2, 0x5C23, 0x8CB3, 0x5C26, 0x8CB4, 0x5C28, 0x8CB5, 0x5C29,
- 0x8CB6, 0x5C2A, 0x8CB7, 0x5C2B, 0x8CB8, 0x5C2D, 0x8CB9, 0x5C2E, 0x8CBA, 0x5C2F, 0x8CBB, 0x5C30, 0x8CBC, 0x5C32, 0x8CBD, 0x5C33,
- 0x8CBE, 0x5C35, 0x8CBF, 0x5C36, 0x8CC0, 0x5C37, 0x8CC1, 0x5C43, 0x8CC2, 0x5C44, 0x8CC3, 0x5C46, 0x8CC4, 0x5C47, 0x8CC5, 0x5C4C,
- 0x8CC6, 0x5C4D, 0x8CC7, 0x5C52, 0x8CC8, 0x5C53, 0x8CC9, 0x5C54, 0x8CCA, 0x5C56, 0x8CCB, 0x5C57, 0x8CCC, 0x5C58, 0x8CCD, 0x5C5A,
- 0x8CCE, 0x5C5B, 0x8CCF, 0x5C5C, 0x8CD0, 0x5C5D, 0x8CD1, 0x5C5F, 0x8CD2, 0x5C62, 0x8CD3, 0x5C64, 0x8CD4, 0x5C67, 0x8CD5, 0x5C68,
- 0x8CD6, 0x5C69, 0x8CD7, 0x5C6A, 0x8CD8, 0x5C6B, 0x8CD9, 0x5C6C, 0x8CDA, 0x5C6D, 0x8CDB, 0x5C70, 0x8CDC, 0x5C72, 0x8CDD, 0x5C73,
- 0x8CDE, 0x5C74, 0x8CDF, 0x5C75, 0x8CE0, 0x5C76, 0x8CE1, 0x5C77, 0x8CE2, 0x5C78, 0x8CE3, 0x5C7B, 0x8CE4, 0x5C7C, 0x8CE5, 0x5C7D,
- 0x8CE6, 0x5C7E, 0x8CE7, 0x5C80, 0x8CE8, 0x5C83, 0x8CE9, 0x5C84, 0x8CEA, 0x5C85, 0x8CEB, 0x5C86, 0x8CEC, 0x5C87, 0x8CED, 0x5C89,
- 0x8CEE, 0x5C8A, 0x8CEF, 0x5C8B, 0x8CF0, 0x5C8E, 0x8CF1, 0x5C8F, 0x8CF2, 0x5C92, 0x8CF3, 0x5C93, 0x8CF4, 0x5C95, 0x8CF5, 0x5C9D,
- 0x8CF6, 0x5C9E, 0x8CF7, 0x5C9F, 0x8CF8, 0x5CA0, 0x8CF9, 0x5CA1, 0x8CFA, 0x5CA4, 0x8CFB, 0x5CA5, 0x8CFC, 0x5CA6, 0x8CFD, 0x5CA7,
- 0x8CFE, 0x5CA8, 0x8D40, 0x5CAA, 0x8D41, 0x5CAE, 0x8D42, 0x5CAF, 0x8D43, 0x5CB0, 0x8D44, 0x5CB2, 0x8D45, 0x5CB4, 0x8D46, 0x5CB6,
- 0x8D47, 0x5CB9, 0x8D48, 0x5CBA, 0x8D49, 0x5CBB, 0x8D4A, 0x5CBC, 0x8D4B, 0x5CBE, 0x8D4C, 0x5CC0, 0x8D4D, 0x5CC2, 0x8D4E, 0x5CC3,
- 0x8D4F, 0x5CC5, 0x8D50, 0x5CC6, 0x8D51, 0x5CC7, 0x8D52, 0x5CC8, 0x8D53, 0x5CC9, 0x8D54, 0x5CCA, 0x8D55, 0x5CCC, 0x8D56, 0x5CCD,
- 0x8D57, 0x5CCE, 0x8D58, 0x5CCF, 0x8D59, 0x5CD0, 0x8D5A, 0x5CD1, 0x8D5B, 0x5CD3, 0x8D5C, 0x5CD4, 0x8D5D, 0x5CD5, 0x8D5E, 0x5CD6,
- 0x8D5F, 0x5CD7, 0x8D60, 0x5CD8, 0x8D61, 0x5CDA, 0x8D62, 0x5CDB, 0x8D63, 0x5CDC, 0x8D64, 0x5CDD, 0x8D65, 0x5CDE, 0x8D66, 0x5CDF,
- 0x8D67, 0x5CE0, 0x8D68, 0x5CE2, 0x8D69, 0x5CE3, 0x8D6A, 0x5CE7, 0x8D6B, 0x5CE9, 0x8D6C, 0x5CEB, 0x8D6D, 0x5CEC, 0x8D6E, 0x5CEE,
- 0x8D6F, 0x5CEF, 0x8D70, 0x5CF1, 0x8D71, 0x5CF2, 0x8D72, 0x5CF3, 0x8D73, 0x5CF4, 0x8D74, 0x5CF5, 0x8D75, 0x5CF6, 0x8D76, 0x5CF7,
- 0x8D77, 0x5CF8, 0x8D78, 0x5CF9, 0x8D79, 0x5CFA, 0x8D7A, 0x5CFC, 0x8D7B, 0x5CFD, 0x8D7C, 0x5CFE, 0x8D7D, 0x5CFF, 0x8D7E, 0x5D00,
- 0x8D80, 0x5D01, 0x8D81, 0x5D04, 0x8D82, 0x5D05, 0x8D83, 0x5D08, 0x8D84, 0x5D09, 0x8D85, 0x5D0A, 0x8D86, 0x5D0B, 0x8D87, 0x5D0C,
- 0x8D88, 0x5D0D, 0x8D89, 0x5D0F, 0x8D8A, 0x5D10, 0x8D8B, 0x5D11, 0x8D8C, 0x5D12, 0x8D8D, 0x5D13, 0x8D8E, 0x5D15, 0x8D8F, 0x5D17,
- 0x8D90, 0x5D18, 0x8D91, 0x5D19, 0x8D92, 0x5D1A, 0x8D93, 0x5D1C, 0x8D94, 0x5D1D, 0x8D95, 0x5D1F, 0x8D96, 0x5D20, 0x8D97, 0x5D21,
- 0x8D98, 0x5D22, 0x8D99, 0x5D23, 0x8D9A, 0x5D25, 0x8D9B, 0x5D28, 0x8D9C, 0x5D2A, 0x8D9D, 0x5D2B, 0x8D9E, 0x5D2C, 0x8D9F, 0x5D2F,
- 0x8DA0, 0x5D30, 0x8DA1, 0x5D31, 0x8DA2, 0x5D32, 0x8DA3, 0x5D33, 0x8DA4, 0x5D35, 0x8DA5, 0x5D36, 0x8DA6, 0x5D37, 0x8DA7, 0x5D38,
- 0x8DA8, 0x5D39, 0x8DA9, 0x5D3A, 0x8DAA, 0x5D3B, 0x8DAB, 0x5D3C, 0x8DAC, 0x5D3F, 0x8DAD, 0x5D40, 0x8DAE, 0x5D41, 0x8DAF, 0x5D42,
- 0x8DB0, 0x5D43, 0x8DB1, 0x5D44, 0x8DB2, 0x5D45, 0x8DB3, 0x5D46, 0x8DB4, 0x5D48, 0x8DB5, 0x5D49, 0x8DB6, 0x5D4D, 0x8DB7, 0x5D4E,
- 0x8DB8, 0x5D4F, 0x8DB9, 0x5D50, 0x8DBA, 0x5D51, 0x8DBB, 0x5D52, 0x8DBC, 0x5D53, 0x8DBD, 0x5D54, 0x8DBE, 0x5D55, 0x8DBF, 0x5D56,
- 0x8DC0, 0x5D57, 0x8DC1, 0x5D59, 0x8DC2, 0x5D5A, 0x8DC3, 0x5D5C, 0x8DC4, 0x5D5E, 0x8DC5, 0x5D5F, 0x8DC6, 0x5D60, 0x8DC7, 0x5D61,
- 0x8DC8, 0x5D62, 0x8DC9, 0x5D63, 0x8DCA, 0x5D64, 0x8DCB, 0x5D65, 0x8DCC, 0x5D66, 0x8DCD, 0x5D67, 0x8DCE, 0x5D68, 0x8DCF, 0x5D6A,
- 0x8DD0, 0x5D6D, 0x8DD1, 0x5D6E, 0x8DD2, 0x5D70, 0x8DD3, 0x5D71, 0x8DD4, 0x5D72, 0x8DD5, 0x5D73, 0x8DD6, 0x5D75, 0x8DD7, 0x5D76,
- 0x8DD8, 0x5D77, 0x8DD9, 0x5D78, 0x8DDA, 0x5D79, 0x8DDB, 0x5D7A, 0x8DDC, 0x5D7B, 0x8DDD, 0x5D7C, 0x8DDE, 0x5D7D, 0x8DDF, 0x5D7E,
- 0x8DE0, 0x5D7F, 0x8DE1, 0x5D80, 0x8DE2, 0x5D81, 0x8DE3, 0x5D83, 0x8DE4, 0x5D84, 0x8DE5, 0x5D85, 0x8DE6, 0x5D86, 0x8DE7, 0x5D87,
- 0x8DE8, 0x5D88, 0x8DE9, 0x5D89, 0x8DEA, 0x5D8A, 0x8DEB, 0x5D8B, 0x8DEC, 0x5D8C, 0x8DED, 0x5D8D, 0x8DEE, 0x5D8E, 0x8DEF, 0x5D8F,
- 0x8DF0, 0x5D90, 0x8DF1, 0x5D91, 0x8DF2, 0x5D92, 0x8DF3, 0x5D93, 0x8DF4, 0x5D94, 0x8DF5, 0x5D95, 0x8DF6, 0x5D96, 0x8DF7, 0x5D97,
- 0x8DF8, 0x5D98, 0x8DF9, 0x5D9A, 0x8DFA, 0x5D9B, 0x8DFB, 0x5D9C, 0x8DFC, 0x5D9E, 0x8DFD, 0x5D9F, 0x8DFE, 0x5DA0, 0x8E40, 0x5DA1,
- 0x8E41, 0x5DA2, 0x8E42, 0x5DA3, 0x8E43, 0x5DA4, 0x8E44, 0x5DA5, 0x8E45, 0x5DA6, 0x8E46, 0x5DA7, 0x8E47, 0x5DA8, 0x8E48, 0x5DA9,
- 0x8E49, 0x5DAA, 0x8E4A, 0x5DAB, 0x8E4B, 0x5DAC, 0x8E4C, 0x5DAD, 0x8E4D, 0x5DAE, 0x8E4E, 0x5DAF, 0x8E4F, 0x5DB0, 0x8E50, 0x5DB1,
- 0x8E51, 0x5DB2, 0x8E52, 0x5DB3, 0x8E53, 0x5DB4, 0x8E54, 0x5DB5, 0x8E55, 0x5DB6, 0x8E56, 0x5DB8, 0x8E57, 0x5DB9, 0x8E58, 0x5DBA,
- 0x8E59, 0x5DBB, 0x8E5A, 0x5DBC, 0x8E5B, 0x5DBD, 0x8E5C, 0x5DBE, 0x8E5D, 0x5DBF, 0x8E5E, 0x5DC0, 0x8E5F, 0x5DC1, 0x8E60, 0x5DC2,
- 0x8E61, 0x5DC3, 0x8E62, 0x5DC4, 0x8E63, 0x5DC6, 0x8E64, 0x5DC7, 0x8E65, 0x5DC8, 0x8E66, 0x5DC9, 0x8E67, 0x5DCA, 0x8E68, 0x5DCB,
- 0x8E69, 0x5DCC, 0x8E6A, 0x5DCE, 0x8E6B, 0x5DCF, 0x8E6C, 0x5DD0, 0x8E6D, 0x5DD1, 0x8E6E, 0x5DD2, 0x8E6F, 0x5DD3, 0x8E70, 0x5DD4,
- 0x8E71, 0x5DD5, 0x8E72, 0x5DD6, 0x8E73, 0x5DD7, 0x8E74, 0x5DD8, 0x8E75, 0x5DD9, 0x8E76, 0x5DDA, 0x8E77, 0x5DDC, 0x8E78, 0x5DDF,
- 0x8E79, 0x5DE0, 0x8E7A, 0x5DE3, 0x8E7B, 0x5DE4, 0x8E7C, 0x5DEA, 0x8E7D, 0x5DEC, 0x8E7E, 0x5DED, 0x8E80, 0x5DF0, 0x8E81, 0x5DF5,
- 0x8E82, 0x5DF6, 0x8E83, 0x5DF8, 0x8E84, 0x5DF9, 0x8E85, 0x5DFA, 0x8E86, 0x5DFB, 0x8E87, 0x5DFC, 0x8E88, 0x5DFF, 0x8E89, 0x5E00,
- 0x8E8A, 0x5E04, 0x8E8B, 0x5E07, 0x8E8C, 0x5E09, 0x8E8D, 0x5E0A, 0x8E8E, 0x5E0B, 0x8E8F, 0x5E0D, 0x8E90, 0x5E0E, 0x8E91, 0x5E12,
- 0x8E92, 0x5E13, 0x8E93, 0x5E17, 0x8E94, 0x5E1E, 0x8E95, 0x5E1F, 0x8E96, 0x5E20, 0x8E97, 0x5E21, 0x8E98, 0x5E22, 0x8E99, 0x5E23,
- 0x8E9A, 0x5E24, 0x8E9B, 0x5E25, 0x8E9C, 0x5E28, 0x8E9D, 0x5E29, 0x8E9E, 0x5E2A, 0x8E9F, 0x5E2B, 0x8EA0, 0x5E2C, 0x8EA1, 0x5E2F,
- 0x8EA2, 0x5E30, 0x8EA3, 0x5E32, 0x8EA4, 0x5E33, 0x8EA5, 0x5E34, 0x8EA6, 0x5E35, 0x8EA7, 0x5E36, 0x8EA8, 0x5E39, 0x8EA9, 0x5E3A,
- 0x8EAA, 0x5E3E, 0x8EAB, 0x5E3F, 0x8EAC, 0x5E40, 0x8EAD, 0x5E41, 0x8EAE, 0x5E43, 0x8EAF, 0x5E46, 0x8EB0, 0x5E47, 0x8EB1, 0x5E48,
- 0x8EB2, 0x5E49, 0x8EB3, 0x5E4A, 0x8EB4, 0x5E4B, 0x8EB5, 0x5E4D, 0x8EB6, 0x5E4E, 0x8EB7, 0x5E4F, 0x8EB8, 0x5E50, 0x8EB9, 0x5E51,
- 0x8EBA, 0x5E52, 0x8EBB, 0x5E53, 0x8EBC, 0x5E56, 0x8EBD, 0x5E57, 0x8EBE, 0x5E58, 0x8EBF, 0x5E59, 0x8EC0, 0x5E5A, 0x8EC1, 0x5E5C,
- 0x8EC2, 0x5E5D, 0x8EC3, 0x5E5F, 0x8EC4, 0x5E60, 0x8EC5, 0x5E63, 0x8EC6, 0x5E64, 0x8EC7, 0x5E65, 0x8EC8, 0x5E66, 0x8EC9, 0x5E67,
- 0x8ECA, 0x5E68, 0x8ECB, 0x5E69, 0x8ECC, 0x5E6A, 0x8ECD, 0x5E6B, 0x8ECE, 0x5E6C, 0x8ECF, 0x5E6D, 0x8ED0, 0x5E6E, 0x8ED1, 0x5E6F,
- 0x8ED2, 0x5E70, 0x8ED3, 0x5E71, 0x8ED4, 0x5E75, 0x8ED5, 0x5E77, 0x8ED6, 0x5E79, 0x8ED7, 0x5E7E, 0x8ED8, 0x5E81, 0x8ED9, 0x5E82,
- 0x8EDA, 0x5E83, 0x8EDB, 0x5E85, 0x8EDC, 0x5E88, 0x8EDD, 0x5E89, 0x8EDE, 0x5E8C, 0x8EDF, 0x5E8D, 0x8EE0, 0x5E8E, 0x8EE1, 0x5E92,
- 0x8EE2, 0x5E98, 0x8EE3, 0x5E9B, 0x8EE4, 0x5E9D, 0x8EE5, 0x5EA1, 0x8EE6, 0x5EA2, 0x8EE7, 0x5EA3, 0x8EE8, 0x5EA4, 0x8EE9, 0x5EA8,
- 0x8EEA, 0x5EA9, 0x8EEB, 0x5EAA, 0x8EEC, 0x5EAB, 0x8EED, 0x5EAC, 0x8EEE, 0x5EAE, 0x8EEF, 0x5EAF, 0x8EF0, 0x5EB0, 0x8EF1, 0x5EB1,
- 0x8EF2, 0x5EB2, 0x8EF3, 0x5EB4, 0x8EF4, 0x5EBA, 0x8EF5, 0x5EBB, 0x8EF6, 0x5EBC, 0x8EF7, 0x5EBD, 0x8EF8, 0x5EBF, 0x8EF9, 0x5EC0,
- 0x8EFA, 0x5EC1, 0x8EFB, 0x5EC2, 0x8EFC, 0x5EC3, 0x8EFD, 0x5EC4, 0x8EFE, 0x5EC5, 0x8F40, 0x5EC6, 0x8F41, 0x5EC7, 0x8F42, 0x5EC8,
- 0x8F43, 0x5ECB, 0x8F44, 0x5ECC, 0x8F45, 0x5ECD, 0x8F46, 0x5ECE, 0x8F47, 0x5ECF, 0x8F48, 0x5ED0, 0x8F49, 0x5ED4, 0x8F4A, 0x5ED5,
- 0x8F4B, 0x5ED7, 0x8F4C, 0x5ED8, 0x8F4D, 0x5ED9, 0x8F4E, 0x5EDA, 0x8F4F, 0x5EDC, 0x8F50, 0x5EDD, 0x8F51, 0x5EDE, 0x8F52, 0x5EDF,
- 0x8F53, 0x5EE0, 0x8F54, 0x5EE1, 0x8F55, 0x5EE2, 0x8F56, 0x5EE3, 0x8F57, 0x5EE4, 0x8F58, 0x5EE5, 0x8F59, 0x5EE6, 0x8F5A, 0x5EE7,
- 0x8F5B, 0x5EE9, 0x8F5C, 0x5EEB, 0x8F5D, 0x5EEC, 0x8F5E, 0x5EED, 0x8F5F, 0x5EEE, 0x8F60, 0x5EEF, 0x8F61, 0x5EF0, 0x8F62, 0x5EF1,
- 0x8F63, 0x5EF2, 0x8F64, 0x5EF3, 0x8F65, 0x5EF5, 0x8F66, 0x5EF8, 0x8F67, 0x5EF9, 0x8F68, 0x5EFB, 0x8F69, 0x5EFC, 0x8F6A, 0x5EFD,
- 0x8F6B, 0x5F05, 0x8F6C, 0x5F06, 0x8F6D, 0x5F07, 0x8F6E, 0x5F09, 0x8F6F, 0x5F0C, 0x8F70, 0x5F0D, 0x8F71, 0x5F0E, 0x8F72, 0x5F10,
- 0x8F73, 0x5F12, 0x8F74, 0x5F14, 0x8F75, 0x5F16, 0x8F76, 0x5F19, 0x8F77, 0x5F1A, 0x8F78, 0x5F1C, 0x8F79, 0x5F1D, 0x8F7A, 0x5F1E,
- 0x8F7B, 0x5F21, 0x8F7C, 0x5F22, 0x8F7D, 0x5F23, 0x8F7E, 0x5F24, 0x8F80, 0x5F28, 0x8F81, 0x5F2B, 0x8F82, 0x5F2C, 0x8F83, 0x5F2E,
- 0x8F84, 0x5F30, 0x8F85, 0x5F32, 0x8F86, 0x5F33, 0x8F87, 0x5F34, 0x8F88, 0x5F35, 0x8F89, 0x5F36, 0x8F8A, 0x5F37, 0x8F8B, 0x5F38,
- 0x8F8C, 0x5F3B, 0x8F8D, 0x5F3D, 0x8F8E, 0x5F3E, 0x8F8F, 0x5F3F, 0x8F90, 0x5F41, 0x8F91, 0x5F42, 0x8F92, 0x5F43, 0x8F93, 0x5F44,
- 0x8F94, 0x5F45, 0x8F95, 0x5F46, 0x8F96, 0x5F47, 0x8F97, 0x5F48, 0x8F98, 0x5F49, 0x8F99, 0x5F4A, 0x8F9A, 0x5F4B, 0x8F9B, 0x5F4C,
- 0x8F9C, 0x5F4D, 0x8F9D, 0x5F4E, 0x8F9E, 0x5F4F, 0x8F9F, 0x5F51, 0x8FA0, 0x5F54, 0x8FA1, 0x5F59, 0x8FA2, 0x5F5A, 0x8FA3, 0x5F5B,
- 0x8FA4, 0x5F5C, 0x8FA5, 0x5F5E, 0x8FA6, 0x5F5F, 0x8FA7, 0x5F60, 0x8FA8, 0x5F63, 0x8FA9, 0x5F65, 0x8FAA, 0x5F67, 0x8FAB, 0x5F68,
- 0x8FAC, 0x5F6B, 0x8FAD, 0x5F6E, 0x8FAE, 0x5F6F, 0x8FAF, 0x5F72, 0x8FB0, 0x5F74, 0x8FB1, 0x5F75, 0x8FB2, 0x5F76, 0x8FB3, 0x5F78,
- 0x8FB4, 0x5F7A, 0x8FB5, 0x5F7D, 0x8FB6, 0x5F7E, 0x8FB7, 0x5F7F, 0x8FB8, 0x5F83, 0x8FB9, 0x5F86, 0x8FBA, 0x5F8D, 0x8FBB, 0x5F8E,
- 0x8FBC, 0x5F8F, 0x8FBD, 0x5F91, 0x8FBE, 0x5F93, 0x8FBF, 0x5F94, 0x8FC0, 0x5F96, 0x8FC1, 0x5F9A, 0x8FC2, 0x5F9B, 0x8FC3, 0x5F9D,
- 0x8FC4, 0x5F9E, 0x8FC5, 0x5F9F, 0x8FC6, 0x5FA0, 0x8FC7, 0x5FA2, 0x8FC8, 0x5FA3, 0x8FC9, 0x5FA4, 0x8FCA, 0x5FA5, 0x8FCB, 0x5FA6,
- 0x8FCC, 0x5FA7, 0x8FCD, 0x5FA9, 0x8FCE, 0x5FAB, 0x8FCF, 0x5FAC, 0x8FD0, 0x5FAF, 0x8FD1, 0x5FB0, 0x8FD2, 0x5FB1, 0x8FD3, 0x5FB2,
- 0x8FD4, 0x5FB3, 0x8FD5, 0x5FB4, 0x8FD6, 0x5FB6, 0x8FD7, 0x5FB8, 0x8FD8, 0x5FB9, 0x8FD9, 0x5FBA, 0x8FDA, 0x5FBB, 0x8FDB, 0x5FBE,
- 0x8FDC, 0x5FBF, 0x8FDD, 0x5FC0, 0x8FDE, 0x5FC1, 0x8FDF, 0x5FC2, 0x8FE0, 0x5FC7, 0x8FE1, 0x5FC8, 0x8FE2, 0x5FCA, 0x8FE3, 0x5FCB,
- 0x8FE4, 0x5FCE, 0x8FE5, 0x5FD3, 0x8FE6, 0x5FD4, 0x8FE7, 0x5FD5, 0x8FE8, 0x5FDA, 0x8FE9, 0x5FDB, 0x8FEA, 0x5FDC, 0x8FEB, 0x5FDE,
- 0x8FEC, 0x5FDF, 0x8FED, 0x5FE2, 0x8FEE, 0x5FE3, 0x8FEF, 0x5FE5, 0x8FF0, 0x5FE6, 0x8FF1, 0x5FE8, 0x8FF2, 0x5FE9, 0x8FF3, 0x5FEC,
- 0x8FF4, 0x5FEF, 0x8FF5, 0x5FF0, 0x8FF6, 0x5FF2, 0x8FF7, 0x5FF3, 0x8FF8, 0x5FF4, 0x8FF9, 0x5FF6, 0x8FFA, 0x5FF7, 0x8FFB, 0x5FF9,
- 0x8FFC, 0x5FFA, 0x8FFD, 0x5FFC, 0x8FFE, 0x6007, 0x9040, 0x6008, 0x9041, 0x6009, 0x9042, 0x600B, 0x9043, 0x600C, 0x9044, 0x6010,
- 0x9045, 0x6011, 0x9046, 0x6013, 0x9047, 0x6017, 0x9048, 0x6018, 0x9049, 0x601A, 0x904A, 0x601E, 0x904B, 0x601F, 0x904C, 0x6022,
- 0x904D, 0x6023, 0x904E, 0x6024, 0x904F, 0x602C, 0x9050, 0x602D, 0x9051, 0x602E, 0x9052, 0x6030, 0x9053, 0x6031, 0x9054, 0x6032,
- 0x9055, 0x6033, 0x9056, 0x6034, 0x9057, 0x6036, 0x9058, 0x6037, 0x9059, 0x6038, 0x905A, 0x6039, 0x905B, 0x603A, 0x905C, 0x603D,
- 0x905D, 0x603E, 0x905E, 0x6040, 0x905F, 0x6044, 0x9060, 0x6045, 0x9061, 0x6046, 0x9062, 0x6047, 0x9063, 0x6048, 0x9064, 0x6049,
- 0x9065, 0x604A, 0x9066, 0x604C, 0x9067, 0x604E, 0x9068, 0x604F, 0x9069, 0x6051, 0x906A, 0x6053, 0x906B, 0x6054, 0x906C, 0x6056,
- 0x906D, 0x6057, 0x906E, 0x6058, 0x906F, 0x605B, 0x9070, 0x605C, 0x9071, 0x605E, 0x9072, 0x605F, 0x9073, 0x6060, 0x9074, 0x6061,
- 0x9075, 0x6065, 0x9076, 0x6066, 0x9077, 0x606E, 0x9078, 0x6071, 0x9079, 0x6072, 0x907A, 0x6074, 0x907B, 0x6075, 0x907C, 0x6077,
- 0x907D, 0x607E, 0x907E, 0x6080, 0x9080, 0x6081, 0x9081, 0x6082, 0x9082, 0x6085, 0x9083, 0x6086, 0x9084, 0x6087, 0x9085, 0x6088,
- 0x9086, 0x608A, 0x9087, 0x608B, 0x9088, 0x608E, 0x9089, 0x608F, 0x908A, 0x6090, 0x908B, 0x6091, 0x908C, 0x6093, 0x908D, 0x6095,
- 0x908E, 0x6097, 0x908F, 0x6098, 0x9090, 0x6099, 0x9091, 0x609C, 0x9092, 0x609E, 0x9093, 0x60A1, 0x9094, 0x60A2, 0x9095, 0x60A4,
- 0x9096, 0x60A5, 0x9097, 0x60A7, 0x9098, 0x60A9, 0x9099, 0x60AA, 0x909A, 0x60AE, 0x909B, 0x60B0, 0x909C, 0x60B3, 0x909D, 0x60B5,
- 0x909E, 0x60B6, 0x909F, 0x60B7, 0x90A0, 0x60B9, 0x90A1, 0x60BA, 0x90A2, 0x60BD, 0x90A3, 0x60BE, 0x90A4, 0x60BF, 0x90A5, 0x60C0,
- 0x90A6, 0x60C1, 0x90A7, 0x60C2, 0x90A8, 0x60C3, 0x90A9, 0x60C4, 0x90AA, 0x60C7, 0x90AB, 0x60C8, 0x90AC, 0x60C9, 0x90AD, 0x60CC,
- 0x90AE, 0x60CD, 0x90AF, 0x60CE, 0x90B0, 0x60CF, 0x90B1, 0x60D0, 0x90B2, 0x60D2, 0x90B3, 0x60D3, 0x90B4, 0x60D4, 0x90B5, 0x60D6,
- 0x90B6, 0x60D7, 0x90B7, 0x60D9, 0x90B8, 0x60DB, 0x90B9, 0x60DE, 0x90BA, 0x60E1, 0x90BB, 0x60E2, 0x90BC, 0x60E3, 0x90BD, 0x60E4,
- 0x90BE, 0x60E5, 0x90BF, 0x60EA, 0x90C0, 0x60F1, 0x90C1, 0x60F2, 0x90C2, 0x60F5, 0x90C3, 0x60F7, 0x90C4, 0x60F8, 0x90C5, 0x60FB,
- 0x90C6, 0x60FC, 0x90C7, 0x60FD, 0x90C8, 0x60FE, 0x90C9, 0x60FF, 0x90CA, 0x6102, 0x90CB, 0x6103, 0x90CC, 0x6104, 0x90CD, 0x6105,
- 0x90CE, 0x6107, 0x90CF, 0x610A, 0x90D0, 0x610B, 0x90D1, 0x610C, 0x90D2, 0x6110, 0x90D3, 0x6111, 0x90D4, 0x6112, 0x90D5, 0x6113,
- 0x90D6, 0x6114, 0x90D7, 0x6116, 0x90D8, 0x6117, 0x90D9, 0x6118, 0x90DA, 0x6119, 0x90DB, 0x611B, 0x90DC, 0x611C, 0x90DD, 0x611D,
- 0x90DE, 0x611E, 0x90DF, 0x6121, 0x90E0, 0x6122, 0x90E1, 0x6125, 0x90E2, 0x6128, 0x90E3, 0x6129, 0x90E4, 0x612A, 0x90E5, 0x612C,
- 0x90E6, 0x612D, 0x90E7, 0x612E, 0x90E8, 0x612F, 0x90E9, 0x6130, 0x90EA, 0x6131, 0x90EB, 0x6132, 0x90EC, 0x6133, 0x90ED, 0x6134,
- 0x90EE, 0x6135, 0x90EF, 0x6136, 0x90F0, 0x6137, 0x90F1, 0x6138, 0x90F2, 0x6139, 0x90F3, 0x613A, 0x90F4, 0x613B, 0x90F5, 0x613C,
- 0x90F6, 0x613D, 0x90F7, 0x613E, 0x90F8, 0x6140, 0x90F9, 0x6141, 0x90FA, 0x6142, 0x90FB, 0x6143, 0x90FC, 0x6144, 0x90FD, 0x6145,
- 0x90FE, 0x6146, 0x9140, 0x6147, 0x9141, 0x6149, 0x9142, 0x614B, 0x9143, 0x614D, 0x9144, 0x614F, 0x9145, 0x6150, 0x9146, 0x6152,
- 0x9147, 0x6153, 0x9148, 0x6154, 0x9149, 0x6156, 0x914A, 0x6157, 0x914B, 0x6158, 0x914C, 0x6159, 0x914D, 0x615A, 0x914E, 0x615B,
- 0x914F, 0x615C, 0x9150, 0x615E, 0x9151, 0x615F, 0x9152, 0x6160, 0x9153, 0x6161, 0x9154, 0x6163, 0x9155, 0x6164, 0x9156, 0x6165,
- 0x9157, 0x6166, 0x9158, 0x6169, 0x9159, 0x616A, 0x915A, 0x616B, 0x915B, 0x616C, 0x915C, 0x616D, 0x915D, 0x616E, 0x915E, 0x616F,
- 0x915F, 0x6171, 0x9160, 0x6172, 0x9161, 0x6173, 0x9162, 0x6174, 0x9163, 0x6176, 0x9164, 0x6178, 0x9165, 0x6179, 0x9166, 0x617A,
- 0x9167, 0x617B, 0x9168, 0x617C, 0x9169, 0x617D, 0x916A, 0x617E, 0x916B, 0x617F, 0x916C, 0x6180, 0x916D, 0x6181, 0x916E, 0x6182,
- 0x916F, 0x6183, 0x9170, 0x6184, 0x9171, 0x6185, 0x9172, 0x6186, 0x9173, 0x6187, 0x9174, 0x6188, 0x9175, 0x6189, 0x9176, 0x618A,
- 0x9177, 0x618C, 0x9178, 0x618D, 0x9179, 0x618F, 0x917A, 0x6190, 0x917B, 0x6191, 0x917C, 0x6192, 0x917D, 0x6193, 0x917E, 0x6195,
- 0x9180, 0x6196, 0x9181, 0x6197, 0x9182, 0x6198, 0x9183, 0x6199, 0x9184, 0x619A, 0x9185, 0x619B, 0x9186, 0x619C, 0x9187, 0x619E,
- 0x9188, 0x619F, 0x9189, 0x61A0, 0x918A, 0x61A1, 0x918B, 0x61A2, 0x918C, 0x61A3, 0x918D, 0x61A4, 0x918E, 0x61A5, 0x918F, 0x61A6,
- 0x9190, 0x61AA, 0x9191, 0x61AB, 0x9192, 0x61AD, 0x9193, 0x61AE, 0x9194, 0x61AF, 0x9195, 0x61B0, 0x9196, 0x61B1, 0x9197, 0x61B2,
- 0x9198, 0x61B3, 0x9199, 0x61B4, 0x919A, 0x61B5, 0x919B, 0x61B6, 0x919C, 0x61B8, 0x919D, 0x61B9, 0x919E, 0x61BA, 0x919F, 0x61BB,
- 0x91A0, 0x61BC, 0x91A1, 0x61BD, 0x91A2, 0x61BF, 0x91A3, 0x61C0, 0x91A4, 0x61C1, 0x91A5, 0x61C3, 0x91A6, 0x61C4, 0x91A7, 0x61C5,
- 0x91A8, 0x61C6, 0x91A9, 0x61C7, 0x91AA, 0x61C9, 0x91AB, 0x61CC, 0x91AC, 0x61CD, 0x91AD, 0x61CE, 0x91AE, 0x61CF, 0x91AF, 0x61D0,
- 0x91B0, 0x61D3, 0x91B1, 0x61D5, 0x91B2, 0x61D6, 0x91B3, 0x61D7, 0x91B4, 0x61D8, 0x91B5, 0x61D9, 0x91B6, 0x61DA, 0x91B7, 0x61DB,
- 0x91B8, 0x61DC, 0x91B9, 0x61DD, 0x91BA, 0x61DE, 0x91BB, 0x61DF, 0x91BC, 0x61E0, 0x91BD, 0x61E1, 0x91BE, 0x61E2, 0x91BF, 0x61E3,
- 0x91C0, 0x61E4, 0x91C1, 0x61E5, 0x91C2, 0x61E7, 0x91C3, 0x61E8, 0x91C4, 0x61E9, 0x91C5, 0x61EA, 0x91C6, 0x61EB, 0x91C7, 0x61EC,
- 0x91C8, 0x61ED, 0x91C9, 0x61EE, 0x91CA, 0x61EF, 0x91CB, 0x61F0, 0x91CC, 0x61F1, 0x91CD, 0x61F2, 0x91CE, 0x61F3, 0x91CF, 0x61F4,
- 0x91D0, 0x61F6, 0x91D1, 0x61F7, 0x91D2, 0x61F8, 0x91D3, 0x61F9, 0x91D4, 0x61FA, 0x91D5, 0x61FB, 0x91D6, 0x61FC, 0x91D7, 0x61FD,
- 0x91D8, 0x61FE, 0x91D9, 0x6200, 0x91DA, 0x6201, 0x91DB, 0x6202, 0x91DC, 0x6203, 0x91DD, 0x6204, 0x91DE, 0x6205, 0x91DF, 0x6207,
- 0x91E0, 0x6209, 0x91E1, 0x6213, 0x91E2, 0x6214, 0x91E3, 0x6219, 0x91E4, 0x621C, 0x91E5, 0x621D, 0x91E6, 0x621E, 0x91E7, 0x6220,
- 0x91E8, 0x6223, 0x91E9, 0x6226, 0x91EA, 0x6227, 0x91EB, 0x6228, 0x91EC, 0x6229, 0x91ED, 0x622B, 0x91EE, 0x622D, 0x91EF, 0x622F,
- 0x91F0, 0x6230, 0x91F1, 0x6231, 0x91F2, 0x6232, 0x91F3, 0x6235, 0x91F4, 0x6236, 0x91F5, 0x6238, 0x91F6, 0x6239, 0x91F7, 0x623A,
- 0x91F8, 0x623B, 0x91F9, 0x623C, 0x91FA, 0x6242, 0x91FB, 0x6244, 0x91FC, 0x6245, 0x91FD, 0x6246, 0x91FE, 0x624A, 0x9240, 0x624F,
- 0x9241, 0x6250, 0x9242, 0x6255, 0x9243, 0x6256, 0x9244, 0x6257, 0x9245, 0x6259, 0x9246, 0x625A, 0x9247, 0x625C, 0x9248, 0x625D,
- 0x9249, 0x625E, 0x924A, 0x625F, 0x924B, 0x6260, 0x924C, 0x6261, 0x924D, 0x6262, 0x924E, 0x6264, 0x924F, 0x6265, 0x9250, 0x6268,
- 0x9251, 0x6271, 0x9252, 0x6272, 0x9253, 0x6274, 0x9254, 0x6275, 0x9255, 0x6277, 0x9256, 0x6278, 0x9257, 0x627A, 0x9258, 0x627B,
- 0x9259, 0x627D, 0x925A, 0x6281, 0x925B, 0x6282, 0x925C, 0x6283, 0x925D, 0x6285, 0x925E, 0x6286, 0x925F, 0x6287, 0x9260, 0x6288,
- 0x9261, 0x628B, 0x9262, 0x628C, 0x9263, 0x628D, 0x9264, 0x628E, 0x9265, 0x628F, 0x9266, 0x6290, 0x9267, 0x6294, 0x9268, 0x6299,
- 0x9269, 0x629C, 0x926A, 0x629D, 0x926B, 0x629E, 0x926C, 0x62A3, 0x926D, 0x62A6, 0x926E, 0x62A7, 0x926F, 0x62A9, 0x9270, 0x62AA,
- 0x9271, 0x62AD, 0x9272, 0x62AE, 0x9273, 0x62AF, 0x9274, 0x62B0, 0x9275, 0x62B2, 0x9276, 0x62B3, 0x9277, 0x62B4, 0x9278, 0x62B6,
- 0x9279, 0x62B7, 0x927A, 0x62B8, 0x927B, 0x62BA, 0x927C, 0x62BE, 0x927D, 0x62C0, 0x927E, 0x62C1, 0x9280, 0x62C3, 0x9281, 0x62CB,
- 0x9282, 0x62CF, 0x9283, 0x62D1, 0x9284, 0x62D5, 0x9285, 0x62DD, 0x9286, 0x62DE, 0x9287, 0x62E0, 0x9288, 0x62E1, 0x9289, 0x62E4,
- 0x928A, 0x62EA, 0x928B, 0x62EB, 0x928C, 0x62F0, 0x928D, 0x62F2, 0x928E, 0x62F5, 0x928F, 0x62F8, 0x9290, 0x62F9, 0x9291, 0x62FA,
- 0x9292, 0x62FB, 0x9293, 0x6300, 0x9294, 0x6303, 0x9295, 0x6304, 0x9296, 0x6305, 0x9297, 0x6306, 0x9298, 0x630A, 0x9299, 0x630B,
- 0x929A, 0x630C, 0x929B, 0x630D, 0x929C, 0x630F, 0x929D, 0x6310, 0x929E, 0x6312, 0x929F, 0x6313, 0x92A0, 0x6314, 0x92A1, 0x6315,
- 0x92A2, 0x6317, 0x92A3, 0x6318, 0x92A4, 0x6319, 0x92A5, 0x631C, 0x92A6, 0x6326, 0x92A7, 0x6327, 0x92A8, 0x6329, 0x92A9, 0x632C,
- 0x92AA, 0x632D, 0x92AB, 0x632E, 0x92AC, 0x6330, 0x92AD, 0x6331, 0x92AE, 0x6333, 0x92AF, 0x6334, 0x92B0, 0x6335, 0x92B1, 0x6336,
- 0x92B2, 0x6337, 0x92B3, 0x6338, 0x92B4, 0x633B, 0x92B5, 0x633C, 0x92B6, 0x633E, 0x92B7, 0x633F, 0x92B8, 0x6340, 0x92B9, 0x6341,
- 0x92BA, 0x6344, 0x92BB, 0x6347, 0x92BC, 0x6348, 0x92BD, 0x634A, 0x92BE, 0x6351, 0x92BF, 0x6352, 0x92C0, 0x6353, 0x92C1, 0x6354,
- 0x92C2, 0x6356, 0x92C3, 0x6357, 0x92C4, 0x6358, 0x92C5, 0x6359, 0x92C6, 0x635A, 0x92C7, 0x635B, 0x92C8, 0x635C, 0x92C9, 0x635D,
- 0x92CA, 0x6360, 0x92CB, 0x6364, 0x92CC, 0x6365, 0x92CD, 0x6366, 0x92CE, 0x6368, 0x92CF, 0x636A, 0x92D0, 0x636B, 0x92D1, 0x636C,
- 0x92D2, 0x636F, 0x92D3, 0x6370, 0x92D4, 0x6372, 0x92D5, 0x6373, 0x92D6, 0x6374, 0x92D7, 0x6375, 0x92D8, 0x6378, 0x92D9, 0x6379,
- 0x92DA, 0x637C, 0x92DB, 0x637D, 0x92DC, 0x637E, 0x92DD, 0x637F, 0x92DE, 0x6381, 0x92DF, 0x6383, 0x92E0, 0x6384, 0x92E1, 0x6385,
- 0x92E2, 0x6386, 0x92E3, 0x638B, 0x92E4, 0x638D, 0x92E5, 0x6391, 0x92E6, 0x6393, 0x92E7, 0x6394, 0x92E8, 0x6395, 0x92E9, 0x6397,
- 0x92EA, 0x6399, 0x92EB, 0x639A, 0x92EC, 0x639B, 0x92ED, 0x639C, 0x92EE, 0x639D, 0x92EF, 0x639E, 0x92F0, 0x639F, 0x92F1, 0x63A1,
- 0x92F2, 0x63A4, 0x92F3, 0x63A6, 0x92F4, 0x63AB, 0x92F5, 0x63AF, 0x92F6, 0x63B1, 0x92F7, 0x63B2, 0x92F8, 0x63B5, 0x92F9, 0x63B6,
- 0x92FA, 0x63B9, 0x92FB, 0x63BB, 0x92FC, 0x63BD, 0x92FD, 0x63BF, 0x92FE, 0x63C0, 0x9340, 0x63C1, 0x9341, 0x63C2, 0x9342, 0x63C3,
- 0x9343, 0x63C5, 0x9344, 0x63C7, 0x9345, 0x63C8, 0x9346, 0x63CA, 0x9347, 0x63CB, 0x9348, 0x63CC, 0x9349, 0x63D1, 0x934A, 0x63D3,
- 0x934B, 0x63D4, 0x934C, 0x63D5, 0x934D, 0x63D7, 0x934E, 0x63D8, 0x934F, 0x63D9, 0x9350, 0x63DA, 0x9351, 0x63DB, 0x9352, 0x63DC,
- 0x9353, 0x63DD, 0x9354, 0x63DF, 0x9355, 0x63E2, 0x9356, 0x63E4, 0x9357, 0x63E5, 0x9358, 0x63E6, 0x9359, 0x63E7, 0x935A, 0x63E8,
- 0x935B, 0x63EB, 0x935C, 0x63EC, 0x935D, 0x63EE, 0x935E, 0x63EF, 0x935F, 0x63F0, 0x9360, 0x63F1, 0x9361, 0x63F3, 0x9362, 0x63F5,
- 0x9363, 0x63F7, 0x9364, 0x63F9, 0x9365, 0x63FA, 0x9366, 0x63FB, 0x9367, 0x63FC, 0x9368, 0x63FE, 0x9369, 0x6403, 0x936A, 0x6404,
- 0x936B, 0x6406, 0x936C, 0x6407, 0x936D, 0x6408, 0x936E, 0x6409, 0x936F, 0x640A, 0x9370, 0x640D, 0x9371, 0x640E, 0x9372, 0x6411,
- 0x9373, 0x6412, 0x9374, 0x6415, 0x9375, 0x6416, 0x9376, 0x6417, 0x9377, 0x6418, 0x9378, 0x6419, 0x9379, 0x641A, 0x937A, 0x641D,
- 0x937B, 0x641F, 0x937C, 0x6422, 0x937D, 0x6423, 0x937E, 0x6424, 0x9380, 0x6425, 0x9381, 0x6427, 0x9382, 0x6428, 0x9383, 0x6429,
- 0x9384, 0x642B, 0x9385, 0x642E, 0x9386, 0x642F, 0x9387, 0x6430, 0x9388, 0x6431, 0x9389, 0x6432, 0x938A, 0x6433, 0x938B, 0x6435,
- 0x938C, 0x6436, 0x938D, 0x6437, 0x938E, 0x6438, 0x938F, 0x6439, 0x9390, 0x643B, 0x9391, 0x643C, 0x9392, 0x643E, 0x9393, 0x6440,
- 0x9394, 0x6442, 0x9395, 0x6443, 0x9396, 0x6449, 0x9397, 0x644B, 0x9398, 0x644C, 0x9399, 0x644D, 0x939A, 0x644E, 0x939B, 0x644F,
- 0x939C, 0x6450, 0x939D, 0x6451, 0x939E, 0x6453, 0x939F, 0x6455, 0x93A0, 0x6456, 0x93A1, 0x6457, 0x93A2, 0x6459, 0x93A3, 0x645A,
- 0x93A4, 0x645B, 0x93A5, 0x645C, 0x93A6, 0x645D, 0x93A7, 0x645F, 0x93A8, 0x6460, 0x93A9, 0x6461, 0x93AA, 0x6462, 0x93AB, 0x6463,
- 0x93AC, 0x6464, 0x93AD, 0x6465, 0x93AE, 0x6466, 0x93AF, 0x6468, 0x93B0, 0x646A, 0x93B1, 0x646B, 0x93B2, 0x646C, 0x93B3, 0x646E,
- 0x93B4, 0x646F, 0x93B5, 0x6470, 0x93B6, 0x6471, 0x93B7, 0x6472, 0x93B8, 0x6473, 0x93B9, 0x6474, 0x93BA, 0x6475, 0x93BB, 0x6476,
- 0x93BC, 0x6477, 0x93BD, 0x647B, 0x93BE, 0x647C, 0x93BF, 0x647D, 0x93C0, 0x647E, 0x93C1, 0x647F, 0x93C2, 0x6480, 0x93C3, 0x6481,
- 0x93C4, 0x6483, 0x93C5, 0x6486, 0x93C6, 0x6488, 0x93C7, 0x6489, 0x93C8, 0x648A, 0x93C9, 0x648B, 0x93CA, 0x648C, 0x93CB, 0x648D,
- 0x93CC, 0x648E, 0x93CD, 0x648F, 0x93CE, 0x6490, 0x93CF, 0x6493, 0x93D0, 0x6494, 0x93D1, 0x6497, 0x93D2, 0x6498, 0x93D3, 0x649A,
- 0x93D4, 0x649B, 0x93D5, 0x649C, 0x93D6, 0x649D, 0x93D7, 0x649F, 0x93D8, 0x64A0, 0x93D9, 0x64A1, 0x93DA, 0x64A2, 0x93DB, 0x64A3,
- 0x93DC, 0x64A5, 0x93DD, 0x64A6, 0x93DE, 0x64A7, 0x93DF, 0x64A8, 0x93E0, 0x64AA, 0x93E1, 0x64AB, 0x93E2, 0x64AF, 0x93E3, 0x64B1,
- 0x93E4, 0x64B2, 0x93E5, 0x64B3, 0x93E6, 0x64B4, 0x93E7, 0x64B6, 0x93E8, 0x64B9, 0x93E9, 0x64BB, 0x93EA, 0x64BD, 0x93EB, 0x64BE,
- 0x93EC, 0x64BF, 0x93ED, 0x64C1, 0x93EE, 0x64C3, 0x93EF, 0x64C4, 0x93F0, 0x64C6, 0x93F1, 0x64C7, 0x93F2, 0x64C8, 0x93F3, 0x64C9,
- 0x93F4, 0x64CA, 0x93F5, 0x64CB, 0x93F6, 0x64CC, 0x93F7, 0x64CF, 0x93F8, 0x64D1, 0x93F9, 0x64D3, 0x93FA, 0x64D4, 0x93FB, 0x64D5,
- 0x93FC, 0x64D6, 0x93FD, 0x64D9, 0x93FE, 0x64DA, 0x9440, 0x64DB, 0x9441, 0x64DC, 0x9442, 0x64DD, 0x9443, 0x64DF, 0x9444, 0x64E0,
- 0x9445, 0x64E1, 0x9446, 0x64E3, 0x9447, 0x64E5, 0x9448, 0x64E7, 0x9449, 0x64E8, 0x944A, 0x64E9, 0x944B, 0x64EA, 0x944C, 0x64EB,
- 0x944D, 0x64EC, 0x944E, 0x64ED, 0x944F, 0x64EE, 0x9450, 0x64EF, 0x9451, 0x64F0, 0x9452, 0x64F1, 0x9453, 0x64F2, 0x9454, 0x64F3,
- 0x9455, 0x64F4, 0x9456, 0x64F5, 0x9457, 0x64F6, 0x9458, 0x64F7, 0x9459, 0x64F8, 0x945A, 0x64F9, 0x945B, 0x64FA, 0x945C, 0x64FB,
- 0x945D, 0x64FC, 0x945E, 0x64FD, 0x945F, 0x64FE, 0x9460, 0x64FF, 0x9461, 0x6501, 0x9462, 0x6502, 0x9463, 0x6503, 0x9464, 0x6504,
- 0x9465, 0x6505, 0x9466, 0x6506, 0x9467, 0x6507, 0x9468, 0x6508, 0x9469, 0x650A, 0x946A, 0x650B, 0x946B, 0x650C, 0x946C, 0x650D,
- 0x946D, 0x650E, 0x946E, 0x650F, 0x946F, 0x6510, 0x9470, 0x6511, 0x9471, 0x6513, 0x9472, 0x6514, 0x9473, 0x6515, 0x9474, 0x6516,
- 0x9475, 0x6517, 0x9476, 0x6519, 0x9477, 0x651A, 0x9478, 0x651B, 0x9479, 0x651C, 0x947A, 0x651D, 0x947B, 0x651E, 0x947C, 0x651F,
- 0x947D, 0x6520, 0x947E, 0x6521, 0x9480, 0x6522, 0x9481, 0x6523, 0x9482, 0x6524, 0x9483, 0x6526, 0x9484, 0x6527, 0x9485, 0x6528,
- 0x9486, 0x6529, 0x9487, 0x652A, 0x9488, 0x652C, 0x9489, 0x652D, 0x948A, 0x6530, 0x948B, 0x6531, 0x948C, 0x6532, 0x948D, 0x6533,
- 0x948E, 0x6537, 0x948F, 0x653A, 0x9490, 0x653C, 0x9491, 0x653D, 0x9492, 0x6540, 0x9493, 0x6541, 0x9494, 0x6542, 0x9495, 0x6543,
- 0x9496, 0x6544, 0x9497, 0x6546, 0x9498, 0x6547, 0x9499, 0x654A, 0x949A, 0x654B, 0x949B, 0x654D, 0x949C, 0x654E, 0x949D, 0x6550,
- 0x949E, 0x6552, 0x949F, 0x6553, 0x94A0, 0x6554, 0x94A1, 0x6557, 0x94A2, 0x6558, 0x94A3, 0x655A, 0x94A4, 0x655C, 0x94A5, 0x655F,
- 0x94A6, 0x6560, 0x94A7, 0x6561, 0x94A8, 0x6564, 0x94A9, 0x6565, 0x94AA, 0x6567, 0x94AB, 0x6568, 0x94AC, 0x6569, 0x94AD, 0x656A,
- 0x94AE, 0x656D, 0x94AF, 0x656E, 0x94B0, 0x656F, 0x94B1, 0x6571, 0x94B2, 0x6573, 0x94B3, 0x6575, 0x94B4, 0x6576, 0x94B5, 0x6578,
- 0x94B6, 0x6579, 0x94B7, 0x657A, 0x94B8, 0x657B, 0x94B9, 0x657C, 0x94BA, 0x657D, 0x94BB, 0x657E, 0x94BC, 0x657F, 0x94BD, 0x6580,
- 0x94BE, 0x6581, 0x94BF, 0x6582, 0x94C0, 0x6583, 0x94C1, 0x6584, 0x94C2, 0x6585, 0x94C3, 0x6586, 0x94C4, 0x6588, 0x94C5, 0x6589,
- 0x94C6, 0x658A, 0x94C7, 0x658D, 0x94C8, 0x658E, 0x94C9, 0x658F, 0x94CA, 0x6592, 0x94CB, 0x6594, 0x94CC, 0x6595, 0x94CD, 0x6596,
- 0x94CE, 0x6598, 0x94CF, 0x659A, 0x94D0, 0x659D, 0x94D1, 0x659E, 0x94D2, 0x65A0, 0x94D3, 0x65A2, 0x94D4, 0x65A3, 0x94D5, 0x65A6,
- 0x94D6, 0x65A8, 0x94D7, 0x65AA, 0x94D8, 0x65AC, 0x94D9, 0x65AE, 0x94DA, 0x65B1, 0x94DB, 0x65B2, 0x94DC, 0x65B3, 0x94DD, 0x65B4,
- 0x94DE, 0x65B5, 0x94DF, 0x65B6, 0x94E0, 0x65B7, 0x94E1, 0x65B8, 0x94E2, 0x65BA, 0x94E3, 0x65BB, 0x94E4, 0x65BE, 0x94E5, 0x65BF,
- 0x94E6, 0x65C0, 0x94E7, 0x65C2, 0x94E8, 0x65C7, 0x94E9, 0x65C8, 0x94EA, 0x65C9, 0x94EB, 0x65CA, 0x94EC, 0x65CD, 0x94ED, 0x65D0,
- 0x94EE, 0x65D1, 0x94EF, 0x65D3, 0x94F0, 0x65D4, 0x94F1, 0x65D5, 0x94F2, 0x65D8, 0x94F3, 0x65D9, 0x94F4, 0x65DA, 0x94F5, 0x65DB,
- 0x94F6, 0x65DC, 0x94F7, 0x65DD, 0x94F8, 0x65DE, 0x94F9, 0x65DF, 0x94FA, 0x65E1, 0x94FB, 0x65E3, 0x94FC, 0x65E4, 0x94FD, 0x65EA,
- 0x94FE, 0x65EB, 0x9540, 0x65F2, 0x9541, 0x65F3, 0x9542, 0x65F4, 0x9543, 0x65F5, 0x9544, 0x65F8, 0x9545, 0x65F9, 0x9546, 0x65FB,
- 0x9547, 0x65FC, 0x9548, 0x65FD, 0x9549, 0x65FE, 0x954A, 0x65FF, 0x954B, 0x6601, 0x954C, 0x6604, 0x954D, 0x6605, 0x954E, 0x6607,
- 0x954F, 0x6608, 0x9550, 0x6609, 0x9551, 0x660B, 0x9552, 0x660D, 0x9553, 0x6610, 0x9554, 0x6611, 0x9555, 0x6612, 0x9556, 0x6616,
- 0x9557, 0x6617, 0x9558, 0x6618, 0x9559, 0x661A, 0x955A, 0x661B, 0x955B, 0x661C, 0x955C, 0x661E, 0x955D, 0x6621, 0x955E, 0x6622,
- 0x955F, 0x6623, 0x9560, 0x6624, 0x9561, 0x6626, 0x9562, 0x6629, 0x9563, 0x662A, 0x9564, 0x662B, 0x9565, 0x662C, 0x9566, 0x662E,
- 0x9567, 0x6630, 0x9568, 0x6632, 0x9569, 0x6633, 0x956A, 0x6637, 0x956B, 0x6638, 0x956C, 0x6639, 0x956D, 0x663A, 0x956E, 0x663B,
- 0x956F, 0x663D, 0x9570, 0x663F, 0x9571, 0x6640, 0x9572, 0x6642, 0x9573, 0x6644, 0x9574, 0x6645, 0x9575, 0x6646, 0x9576, 0x6647,
- 0x9577, 0x6648, 0x9578, 0x6649, 0x9579, 0x664A, 0x957A, 0x664D, 0x957B, 0x664E, 0x957C, 0x6650, 0x957D, 0x6651, 0x957E, 0x6658,
- 0x9580, 0x6659, 0x9581, 0x665B, 0x9582, 0x665C, 0x9583, 0x665D, 0x9584, 0x665E, 0x9585, 0x6660, 0x9586, 0x6662, 0x9587, 0x6663,
- 0x9588, 0x6665, 0x9589, 0x6667, 0x958A, 0x6669, 0x958B, 0x666A, 0x958C, 0x666B, 0x958D, 0x666C, 0x958E, 0x666D, 0x958F, 0x6671,
- 0x9590, 0x6672, 0x9591, 0x6673, 0x9592, 0x6675, 0x9593, 0x6678, 0x9594, 0x6679, 0x9595, 0x667B, 0x9596, 0x667C, 0x9597, 0x667D,
- 0x9598, 0x667F, 0x9599, 0x6680, 0x959A, 0x6681, 0x959B, 0x6683, 0x959C, 0x6685, 0x959D, 0x6686, 0x959E, 0x6688, 0x959F, 0x6689,
- 0x95A0, 0x668A, 0x95A1, 0x668B, 0x95A2, 0x668D, 0x95A3, 0x668E, 0x95A4, 0x668F, 0x95A5, 0x6690, 0x95A6, 0x6692, 0x95A7, 0x6693,
- 0x95A8, 0x6694, 0x95A9, 0x6695, 0x95AA, 0x6698, 0x95AB, 0x6699, 0x95AC, 0x669A, 0x95AD, 0x669B, 0x95AE, 0x669C, 0x95AF, 0x669E,
- 0x95B0, 0x669F, 0x95B1, 0x66A0, 0x95B2, 0x66A1, 0x95B3, 0x66A2, 0x95B4, 0x66A3, 0x95B5, 0x66A4, 0x95B6, 0x66A5, 0x95B7, 0x66A6,
- 0x95B8, 0x66A9, 0x95B9, 0x66AA, 0x95BA, 0x66AB, 0x95BB, 0x66AC, 0x95BC, 0x66AD, 0x95BD, 0x66AF, 0x95BE, 0x66B0, 0x95BF, 0x66B1,
- 0x95C0, 0x66B2, 0x95C1, 0x66B3, 0x95C2, 0x66B5, 0x95C3, 0x66B6, 0x95C4, 0x66B7, 0x95C5, 0x66B8, 0x95C6, 0x66BA, 0x95C7, 0x66BB,
- 0x95C8, 0x66BC, 0x95C9, 0x66BD, 0x95CA, 0x66BF, 0x95CB, 0x66C0, 0x95CC, 0x66C1, 0x95CD, 0x66C2, 0x95CE, 0x66C3, 0x95CF, 0x66C4,
- 0x95D0, 0x66C5, 0x95D1, 0x66C6, 0x95D2, 0x66C7, 0x95D3, 0x66C8, 0x95D4, 0x66C9, 0x95D5, 0x66CA, 0x95D6, 0x66CB, 0x95D7, 0x66CC,
- 0x95D8, 0x66CD, 0x95D9, 0x66CE, 0x95DA, 0x66CF, 0x95DB, 0x66D0, 0x95DC, 0x66D1, 0x95DD, 0x66D2, 0x95DE, 0x66D3, 0x95DF, 0x66D4,
- 0x95E0, 0x66D5, 0x95E1, 0x66D6, 0x95E2, 0x66D7, 0x95E3, 0x66D8, 0x95E4, 0x66DA, 0x95E5, 0x66DE, 0x95E6, 0x66DF, 0x95E7, 0x66E0,
- 0x95E8, 0x66E1, 0x95E9, 0x66E2, 0x95EA, 0x66E3, 0x95EB, 0x66E4, 0x95EC, 0x66E5, 0x95ED, 0x66E7, 0x95EE, 0x66E8, 0x95EF, 0x66EA,
- 0x95F0, 0x66EB, 0x95F1, 0x66EC, 0x95F2, 0x66ED, 0x95F3, 0x66EE, 0x95F4, 0x66EF, 0x95F5, 0x66F1, 0x95F6, 0x66F5, 0x95F7, 0x66F6,
- 0x95F8, 0x66F8, 0x95F9, 0x66FA, 0x95FA, 0x66FB, 0x95FB, 0x66FD, 0x95FC, 0x6701, 0x95FD, 0x6702, 0x95FE, 0x6703, 0x9640, 0x6704,
- 0x9641, 0x6705, 0x9642, 0x6706, 0x9643, 0x6707, 0x9644, 0x670C, 0x9645, 0x670E, 0x9646, 0x670F, 0x9647, 0x6711, 0x9648, 0x6712,
- 0x9649, 0x6713, 0x964A, 0x6716, 0x964B, 0x6718, 0x964C, 0x6719, 0x964D, 0x671A, 0x964E, 0x671C, 0x964F, 0x671E, 0x9650, 0x6720,
- 0x9651, 0x6721, 0x9652, 0x6722, 0x9653, 0x6723, 0x9654, 0x6724, 0x9655, 0x6725, 0x9656, 0x6727, 0x9657, 0x6729, 0x9658, 0x672E,
- 0x9659, 0x6730, 0x965A, 0x6732, 0x965B, 0x6733, 0x965C, 0x6736, 0x965D, 0x6737, 0x965E, 0x6738, 0x965F, 0x6739, 0x9660, 0x673B,
- 0x9661, 0x673C, 0x9662, 0x673E, 0x9663, 0x673F, 0x9664, 0x6741, 0x9665, 0x6744, 0x9666, 0x6745, 0x9667, 0x6747, 0x9668, 0x674A,
- 0x9669, 0x674B, 0x966A, 0x674D, 0x966B, 0x6752, 0x966C, 0x6754, 0x966D, 0x6755, 0x966E, 0x6757, 0x966F, 0x6758, 0x9670, 0x6759,
- 0x9671, 0x675A, 0x9672, 0x675B, 0x9673, 0x675D, 0x9674, 0x6762, 0x9675, 0x6763, 0x9676, 0x6764, 0x9677, 0x6766, 0x9678, 0x6767,
- 0x9679, 0x676B, 0x967A, 0x676C, 0x967B, 0x676E, 0x967C, 0x6771, 0x967D, 0x6774, 0x967E, 0x6776, 0x9680, 0x6778, 0x9681, 0x6779,
- 0x9682, 0x677A, 0x9683, 0x677B, 0x9684, 0x677D, 0x9685, 0x6780, 0x9686, 0x6782, 0x9687, 0x6783, 0x9688, 0x6785, 0x9689, 0x6786,
- 0x968A, 0x6788, 0x968B, 0x678A, 0x968C, 0x678C, 0x968D, 0x678D, 0x968E, 0x678E, 0x968F, 0x678F, 0x9690, 0x6791, 0x9691, 0x6792,
- 0x9692, 0x6793, 0x9693, 0x6794, 0x9694, 0x6796, 0x9695, 0x6799, 0x9696, 0x679B, 0x9697, 0x679F, 0x9698, 0x67A0, 0x9699, 0x67A1,
- 0x969A, 0x67A4, 0x969B, 0x67A6, 0x969C, 0x67A9, 0x969D, 0x67AC, 0x969E, 0x67AE, 0x969F, 0x67B1, 0x96A0, 0x67B2, 0x96A1, 0x67B4,
- 0x96A2, 0x67B9, 0x96A3, 0x67BA, 0x96A4, 0x67BB, 0x96A5, 0x67BC, 0x96A6, 0x67BD, 0x96A7, 0x67BE, 0x96A8, 0x67BF, 0x96A9, 0x67C0,
- 0x96AA, 0x67C2, 0x96AB, 0x67C5, 0x96AC, 0x67C6, 0x96AD, 0x67C7, 0x96AE, 0x67C8, 0x96AF, 0x67C9, 0x96B0, 0x67CA, 0x96B1, 0x67CB,
- 0x96B2, 0x67CC, 0x96B3, 0x67CD, 0x96B4, 0x67CE, 0x96B5, 0x67D5, 0x96B6, 0x67D6, 0x96B7, 0x67D7, 0x96B8, 0x67DB, 0x96B9, 0x67DF,
- 0x96BA, 0x67E1, 0x96BB, 0x67E3, 0x96BC, 0x67E4, 0x96BD, 0x67E6, 0x96BE, 0x67E7, 0x96BF, 0x67E8, 0x96C0, 0x67EA, 0x96C1, 0x67EB,
- 0x96C2, 0x67ED, 0x96C3, 0x67EE, 0x96C4, 0x67F2, 0x96C5, 0x67F5, 0x96C6, 0x67F6, 0x96C7, 0x67F7, 0x96C8, 0x67F8, 0x96C9, 0x67F9,
- 0x96CA, 0x67FA, 0x96CB, 0x67FB, 0x96CC, 0x67FC, 0x96CD, 0x67FE, 0x96CE, 0x6801, 0x96CF, 0x6802, 0x96D0, 0x6803, 0x96D1, 0x6804,
- 0x96D2, 0x6806, 0x96D3, 0x680D, 0x96D4, 0x6810, 0x96D5, 0x6812, 0x96D6, 0x6814, 0x96D7, 0x6815, 0x96D8, 0x6818, 0x96D9, 0x6819,
- 0x96DA, 0x681A, 0x96DB, 0x681B, 0x96DC, 0x681C, 0x96DD, 0x681E, 0x96DE, 0x681F, 0x96DF, 0x6820, 0x96E0, 0x6822, 0x96E1, 0x6823,
- 0x96E2, 0x6824, 0x96E3, 0x6825, 0x96E4, 0x6826, 0x96E5, 0x6827, 0x96E6, 0x6828, 0x96E7, 0x682B, 0x96E8, 0x682C, 0x96E9, 0x682D,
- 0x96EA, 0x682E, 0x96EB, 0x682F, 0x96EC, 0x6830, 0x96ED, 0x6831, 0x96EE, 0x6834, 0x96EF, 0x6835, 0x96F0, 0x6836, 0x96F1, 0x683A,
- 0x96F2, 0x683B, 0x96F3, 0x683F, 0x96F4, 0x6847, 0x96F5, 0x684B, 0x96F6, 0x684D, 0x96F7, 0x684F, 0x96F8, 0x6852, 0x96F9, 0x6856,
- 0x96FA, 0x6857, 0x96FB, 0x6858, 0x96FC, 0x6859, 0x96FD, 0x685A, 0x96FE, 0x685B, 0x9740, 0x685C, 0x9741, 0x685D, 0x9742, 0x685E,
- 0x9743, 0x685F, 0x9744, 0x686A, 0x9745, 0x686C, 0x9746, 0x686D, 0x9747, 0x686E, 0x9748, 0x686F, 0x9749, 0x6870, 0x974A, 0x6871,
- 0x974B, 0x6872, 0x974C, 0x6873, 0x974D, 0x6875, 0x974E, 0x6878, 0x974F, 0x6879, 0x9750, 0x687A, 0x9751, 0x687B, 0x9752, 0x687C,
- 0x9753, 0x687D, 0x9754, 0x687E, 0x9755, 0x687F, 0x9756, 0x6880, 0x9757, 0x6882, 0x9758, 0x6884, 0x9759, 0x6887, 0x975A, 0x6888,
- 0x975B, 0x6889, 0x975C, 0x688A, 0x975D, 0x688B, 0x975E, 0x688C, 0x975F, 0x688D, 0x9760, 0x688E, 0x9761, 0x6890, 0x9762, 0x6891,
- 0x9763, 0x6892, 0x9764, 0x6894, 0x9765, 0x6895, 0x9766, 0x6896, 0x9767, 0x6898, 0x9768, 0x6899, 0x9769, 0x689A, 0x976A, 0x689B,
- 0x976B, 0x689C, 0x976C, 0x689D, 0x976D, 0x689E, 0x976E, 0x689F, 0x976F, 0x68A0, 0x9770, 0x68A1, 0x9771, 0x68A3, 0x9772, 0x68A4,
- 0x9773, 0x68A5, 0x9774, 0x68A9, 0x9775, 0x68AA, 0x9776, 0x68AB, 0x9777, 0x68AC, 0x9778, 0x68AE, 0x9779, 0x68B1, 0x977A, 0x68B2,
- 0x977B, 0x68B4, 0x977C, 0x68B6, 0x977D, 0x68B7, 0x977E, 0x68B8, 0x9780, 0x68B9, 0x9781, 0x68BA, 0x9782, 0x68BB, 0x9783, 0x68BC,
- 0x9784, 0x68BD, 0x9785, 0x68BE, 0x9786, 0x68BF, 0x9787, 0x68C1, 0x9788, 0x68C3, 0x9789, 0x68C4, 0x978A, 0x68C5, 0x978B, 0x68C6,
- 0x978C, 0x68C7, 0x978D, 0x68C8, 0x978E, 0x68CA, 0x978F, 0x68CC, 0x9790, 0x68CE, 0x9791, 0x68CF, 0x9792, 0x68D0, 0x9793, 0x68D1,
- 0x9794, 0x68D3, 0x9795, 0x68D4, 0x9796, 0x68D6, 0x9797, 0x68D7, 0x9798, 0x68D9, 0x9799, 0x68DB, 0x979A, 0x68DC, 0x979B, 0x68DD,
- 0x979C, 0x68DE, 0x979D, 0x68DF, 0x979E, 0x68E1, 0x979F, 0x68E2, 0x97A0, 0x68E4, 0x97A1, 0x68E5, 0x97A2, 0x68E6, 0x97A3, 0x68E7,
- 0x97A4, 0x68E8, 0x97A5, 0x68E9, 0x97A6, 0x68EA, 0x97A7, 0x68EB, 0x97A8, 0x68EC, 0x97A9, 0x68ED, 0x97AA, 0x68EF, 0x97AB, 0x68F2,
- 0x97AC, 0x68F3, 0x97AD, 0x68F4, 0x97AE, 0x68F6, 0x97AF, 0x68F7, 0x97B0, 0x68F8, 0x97B1, 0x68FB, 0x97B2, 0x68FD, 0x97B3, 0x68FE,
- 0x97B4, 0x68FF, 0x97B5, 0x6900, 0x97B6, 0x6902, 0x97B7, 0x6903, 0x97B8, 0x6904, 0x97B9, 0x6906, 0x97BA, 0x6907, 0x97BB, 0x6908,
- 0x97BC, 0x6909, 0x97BD, 0x690A, 0x97BE, 0x690C, 0x97BF, 0x690F, 0x97C0, 0x6911, 0x97C1, 0x6913, 0x97C2, 0x6914, 0x97C3, 0x6915,
- 0x97C4, 0x6916, 0x97C5, 0x6917, 0x97C6, 0x6918, 0x97C7, 0x6919, 0x97C8, 0x691A, 0x97C9, 0x691B, 0x97CA, 0x691C, 0x97CB, 0x691D,
- 0x97CC, 0x691E, 0x97CD, 0x6921, 0x97CE, 0x6922, 0x97CF, 0x6923, 0x97D0, 0x6925, 0x97D1, 0x6926, 0x97D2, 0x6927, 0x97D3, 0x6928,
- 0x97D4, 0x6929, 0x97D5, 0x692A, 0x97D6, 0x692B, 0x97D7, 0x692C, 0x97D8, 0x692E, 0x97D9, 0x692F, 0x97DA, 0x6931, 0x97DB, 0x6932,
- 0x97DC, 0x6933, 0x97DD, 0x6935, 0x97DE, 0x6936, 0x97DF, 0x6937, 0x97E0, 0x6938, 0x97E1, 0x693A, 0x97E2, 0x693B, 0x97E3, 0x693C,
- 0x97E4, 0x693E, 0x97E5, 0x6940, 0x97E6, 0x6941, 0x97E7, 0x6943, 0x97E8, 0x6944, 0x97E9, 0x6945, 0x97EA, 0x6946, 0x97EB, 0x6947,
- 0x97EC, 0x6948, 0x97ED, 0x6949, 0x97EE, 0x694A, 0x97EF, 0x694B, 0x97F0, 0x694C, 0x97F1, 0x694D, 0x97F2, 0x694E, 0x97F3, 0x694F,
- 0x97F4, 0x6950, 0x97F5, 0x6951, 0x97F6, 0x6952, 0x97F7, 0x6953, 0x97F8, 0x6955, 0x97F9, 0x6956, 0x97FA, 0x6958, 0x97FB, 0x6959,
- 0x97FC, 0x695B, 0x97FD, 0x695C, 0x97FE, 0x695F, 0x9840, 0x6961, 0x9841, 0x6962, 0x9842, 0x6964, 0x9843, 0x6965, 0x9844, 0x6967,
- 0x9845, 0x6968, 0x9846, 0x6969, 0x9847, 0x696A, 0x9848, 0x696C, 0x9849, 0x696D, 0x984A, 0x696F, 0x984B, 0x6970, 0x984C, 0x6972,
- 0x984D, 0x6973, 0x984E, 0x6974, 0x984F, 0x6975, 0x9850, 0x6976, 0x9851, 0x697A, 0x9852, 0x697B, 0x9853, 0x697D, 0x9854, 0x697E,
- 0x9855, 0x697F, 0x9856, 0x6981, 0x9857, 0x6983, 0x9858, 0x6985, 0x9859, 0x698A, 0x985A, 0x698B, 0x985B, 0x698C, 0x985C, 0x698E,
- 0x985D, 0x698F, 0x985E, 0x6990, 0x985F, 0x6991, 0x9860, 0x6992, 0x9861, 0x6993, 0x9862, 0x6996, 0x9863, 0x6997, 0x9864, 0x6999,
- 0x9865, 0x699A, 0x9866, 0x699D, 0x9867, 0x699E, 0x9868, 0x699F, 0x9869, 0x69A0, 0x986A, 0x69A1, 0x986B, 0x69A2, 0x986C, 0x69A3,
- 0x986D, 0x69A4, 0x986E, 0x69A5, 0x986F, 0x69A6, 0x9870, 0x69A9, 0x9871, 0x69AA, 0x9872, 0x69AC, 0x9873, 0x69AE, 0x9874, 0x69AF,
- 0x9875, 0x69B0, 0x9876, 0x69B2, 0x9877, 0x69B3, 0x9878, 0x69B5, 0x9879, 0x69B6, 0x987A, 0x69B8, 0x987B, 0x69B9, 0x987C, 0x69BA,
- 0x987D, 0x69BC, 0x987E, 0x69BD, 0x9880, 0x69BE, 0x9881, 0x69BF, 0x9882, 0x69C0, 0x9883, 0x69C2, 0x9884, 0x69C3, 0x9885, 0x69C4,
- 0x9886, 0x69C5, 0x9887, 0x69C6, 0x9888, 0x69C7, 0x9889, 0x69C8, 0x988A, 0x69C9, 0x988B, 0x69CB, 0x988C, 0x69CD, 0x988D, 0x69CF,
- 0x988E, 0x69D1, 0x988F, 0x69D2, 0x9890, 0x69D3, 0x9891, 0x69D5, 0x9892, 0x69D6, 0x9893, 0x69D7, 0x9894, 0x69D8, 0x9895, 0x69D9,
- 0x9896, 0x69DA, 0x9897, 0x69DC, 0x9898, 0x69DD, 0x9899, 0x69DE, 0x989A, 0x69E1, 0x989B, 0x69E2, 0x989C, 0x69E3, 0x989D, 0x69E4,
- 0x989E, 0x69E5, 0x989F, 0x69E6, 0x98A0, 0x69E7, 0x98A1, 0x69E8, 0x98A2, 0x69E9, 0x98A3, 0x69EA, 0x98A4, 0x69EB, 0x98A5, 0x69EC,
- 0x98A6, 0x69EE, 0x98A7, 0x69EF, 0x98A8, 0x69F0, 0x98A9, 0x69F1, 0x98AA, 0x69F3, 0x98AB, 0x69F4, 0x98AC, 0x69F5, 0x98AD, 0x69F6,
- 0x98AE, 0x69F7, 0x98AF, 0x69F8, 0x98B0, 0x69F9, 0x98B1, 0x69FA, 0x98B2, 0x69FB, 0x98B3, 0x69FC, 0x98B4, 0x69FE, 0x98B5, 0x6A00,
- 0x98B6, 0x6A01, 0x98B7, 0x6A02, 0x98B8, 0x6A03, 0x98B9, 0x6A04, 0x98BA, 0x6A05, 0x98BB, 0x6A06, 0x98BC, 0x6A07, 0x98BD, 0x6A08,
- 0x98BE, 0x6A09, 0x98BF, 0x6A0B, 0x98C0, 0x6A0C, 0x98C1, 0x6A0D, 0x98C2, 0x6A0E, 0x98C3, 0x6A0F, 0x98C4, 0x6A10, 0x98C5, 0x6A11,
- 0x98C6, 0x6A12, 0x98C7, 0x6A13, 0x98C8, 0x6A14, 0x98C9, 0x6A15, 0x98CA, 0x6A16, 0x98CB, 0x6A19, 0x98CC, 0x6A1A, 0x98CD, 0x6A1B,
- 0x98CE, 0x6A1C, 0x98CF, 0x6A1D, 0x98D0, 0x6A1E, 0x98D1, 0x6A20, 0x98D2, 0x6A22, 0x98D3, 0x6A23, 0x98D4, 0x6A24, 0x98D5, 0x6A25,
- 0x98D6, 0x6A26, 0x98D7, 0x6A27, 0x98D8, 0x6A29, 0x98D9, 0x6A2B, 0x98DA, 0x6A2C, 0x98DB, 0x6A2D, 0x98DC, 0x6A2E, 0x98DD, 0x6A30,
- 0x98DE, 0x6A32, 0x98DF, 0x6A33, 0x98E0, 0x6A34, 0x98E1, 0x6A36, 0x98E2, 0x6A37, 0x98E3, 0x6A38, 0x98E4, 0x6A39, 0x98E5, 0x6A3A,
- 0x98E6, 0x6A3B, 0x98E7, 0x6A3C, 0x98E8, 0x6A3F, 0x98E9, 0x6A40, 0x98EA, 0x6A41, 0x98EB, 0x6A42, 0x98EC, 0x6A43, 0x98ED, 0x6A45,
- 0x98EE, 0x6A46, 0x98EF, 0x6A48, 0x98F0, 0x6A49, 0x98F1, 0x6A4A, 0x98F2, 0x6A4B, 0x98F3, 0x6A4C, 0x98F4, 0x6A4D, 0x98F5, 0x6A4E,
- 0x98F6, 0x6A4F, 0x98F7, 0x6A51, 0x98F8, 0x6A52, 0x98F9, 0x6A53, 0x98FA, 0x6A54, 0x98FB, 0x6A55, 0x98FC, 0x6A56, 0x98FD, 0x6A57,
- 0x98FE, 0x6A5A, 0x9940, 0x6A5C, 0x9941, 0x6A5D, 0x9942, 0x6A5E, 0x9943, 0x6A5F, 0x9944, 0x6A60, 0x9945, 0x6A62, 0x9946, 0x6A63,
- 0x9947, 0x6A64, 0x9948, 0x6A66, 0x9949, 0x6A67, 0x994A, 0x6A68, 0x994B, 0x6A69, 0x994C, 0x6A6A, 0x994D, 0x6A6B, 0x994E, 0x6A6C,
- 0x994F, 0x6A6D, 0x9950, 0x6A6E, 0x9951, 0x6A6F, 0x9952, 0x6A70, 0x9953, 0x6A72, 0x9954, 0x6A73, 0x9955, 0x6A74, 0x9956, 0x6A75,
- 0x9957, 0x6A76, 0x9958, 0x6A77, 0x9959, 0x6A78, 0x995A, 0x6A7A, 0x995B, 0x6A7B, 0x995C, 0x6A7D, 0x995D, 0x6A7E, 0x995E, 0x6A7F,
- 0x995F, 0x6A81, 0x9960, 0x6A82, 0x9961, 0x6A83, 0x9962, 0x6A85, 0x9963, 0x6A86, 0x9964, 0x6A87, 0x9965, 0x6A88, 0x9966, 0x6A89,
- 0x9967, 0x6A8A, 0x9968, 0x6A8B, 0x9969, 0x6A8C, 0x996A, 0x6A8D, 0x996B, 0x6A8F, 0x996C, 0x6A92, 0x996D, 0x6A93, 0x996E, 0x6A94,
- 0x996F, 0x6A95, 0x9970, 0x6A96, 0x9971, 0x6A98, 0x9972, 0x6A99, 0x9973, 0x6A9A, 0x9974, 0x6A9B, 0x9975, 0x6A9C, 0x9976, 0x6A9D,
- 0x9977, 0x6A9E, 0x9978, 0x6A9F, 0x9979, 0x6AA1, 0x997A, 0x6AA2, 0x997B, 0x6AA3, 0x997C, 0x6AA4, 0x997D, 0x6AA5, 0x997E, 0x6AA6,
- 0x9980, 0x6AA7, 0x9981, 0x6AA8, 0x9982, 0x6AAA, 0x9983, 0x6AAD, 0x9984, 0x6AAE, 0x9985, 0x6AAF, 0x9986, 0x6AB0, 0x9987, 0x6AB1,
- 0x9988, 0x6AB2, 0x9989, 0x6AB3, 0x998A, 0x6AB4, 0x998B, 0x6AB5, 0x998C, 0x6AB6, 0x998D, 0x6AB7, 0x998E, 0x6AB8, 0x998F, 0x6AB9,
- 0x9990, 0x6ABA, 0x9991, 0x6ABB, 0x9992, 0x6ABC, 0x9993, 0x6ABD, 0x9994, 0x6ABE, 0x9995, 0x6ABF, 0x9996, 0x6AC0, 0x9997, 0x6AC1,
- 0x9998, 0x6AC2, 0x9999, 0x6AC3, 0x999A, 0x6AC4, 0x999B, 0x6AC5, 0x999C, 0x6AC6, 0x999D, 0x6AC7, 0x999E, 0x6AC8, 0x999F, 0x6AC9,
- 0x99A0, 0x6ACA, 0x99A1, 0x6ACB, 0x99A2, 0x6ACC, 0x99A3, 0x6ACD, 0x99A4, 0x6ACE, 0x99A5, 0x6ACF, 0x99A6, 0x6AD0, 0x99A7, 0x6AD1,
- 0x99A8, 0x6AD2, 0x99A9, 0x6AD3, 0x99AA, 0x6AD4, 0x99AB, 0x6AD5, 0x99AC, 0x6AD6, 0x99AD, 0x6AD7, 0x99AE, 0x6AD8, 0x99AF, 0x6AD9,
- 0x99B0, 0x6ADA, 0x99B1, 0x6ADB, 0x99B2, 0x6ADC, 0x99B3, 0x6ADD, 0x99B4, 0x6ADE, 0x99B5, 0x6ADF, 0x99B6, 0x6AE0, 0x99B7, 0x6AE1,
- 0x99B8, 0x6AE2, 0x99B9, 0x6AE3, 0x99BA, 0x6AE4, 0x99BB, 0x6AE5, 0x99BC, 0x6AE6, 0x99BD, 0x6AE7, 0x99BE, 0x6AE8, 0x99BF, 0x6AE9,
- 0x99C0, 0x6AEA, 0x99C1, 0x6AEB, 0x99C2, 0x6AEC, 0x99C3, 0x6AED, 0x99C4, 0x6AEE, 0x99C5, 0x6AEF, 0x99C6, 0x6AF0, 0x99C7, 0x6AF1,
- 0x99C8, 0x6AF2, 0x99C9, 0x6AF3, 0x99CA, 0x6AF4, 0x99CB, 0x6AF5, 0x99CC, 0x6AF6, 0x99CD, 0x6AF7, 0x99CE, 0x6AF8, 0x99CF, 0x6AF9,
- 0x99D0, 0x6AFA, 0x99D1, 0x6AFB, 0x99D2, 0x6AFC, 0x99D3, 0x6AFD, 0x99D4, 0x6AFE, 0x99D5, 0x6AFF, 0x99D6, 0x6B00, 0x99D7, 0x6B01,
- 0x99D8, 0x6B02, 0x99D9, 0x6B03, 0x99DA, 0x6B04, 0x99DB, 0x6B05, 0x99DC, 0x6B06, 0x99DD, 0x6B07, 0x99DE, 0x6B08, 0x99DF, 0x6B09,
- 0x99E0, 0x6B0A, 0x99E1, 0x6B0B, 0x99E2, 0x6B0C, 0x99E3, 0x6B0D, 0x99E4, 0x6B0E, 0x99E5, 0x6B0F, 0x99E6, 0x6B10, 0x99E7, 0x6B11,
- 0x99E8, 0x6B12, 0x99E9, 0x6B13, 0x99EA, 0x6B14, 0x99EB, 0x6B15, 0x99EC, 0x6B16, 0x99ED, 0x6B17, 0x99EE, 0x6B18, 0x99EF, 0x6B19,
- 0x99F0, 0x6B1A, 0x99F1, 0x6B1B, 0x99F2, 0x6B1C, 0x99F3, 0x6B1D, 0x99F4, 0x6B1E, 0x99F5, 0x6B1F, 0x99F6, 0x6B25, 0x99F7, 0x6B26,
- 0x99F8, 0x6B28, 0x99F9, 0x6B29, 0x99FA, 0x6B2A, 0x99FB, 0x6B2B, 0x99FC, 0x6B2C, 0x99FD, 0x6B2D, 0x99FE, 0x6B2E, 0x9A40, 0x6B2F,
- 0x9A41, 0x6B30, 0x9A42, 0x6B31, 0x9A43, 0x6B33, 0x9A44, 0x6B34, 0x9A45, 0x6B35, 0x9A46, 0x6B36, 0x9A47, 0x6B38, 0x9A48, 0x6B3B,
- 0x9A49, 0x6B3C, 0x9A4A, 0x6B3D, 0x9A4B, 0x6B3F, 0x9A4C, 0x6B40, 0x9A4D, 0x6B41, 0x9A4E, 0x6B42, 0x9A4F, 0x6B44, 0x9A50, 0x6B45,
- 0x9A51, 0x6B48, 0x9A52, 0x6B4A, 0x9A53, 0x6B4B, 0x9A54, 0x6B4D, 0x9A55, 0x6B4E, 0x9A56, 0x6B4F, 0x9A57, 0x6B50, 0x9A58, 0x6B51,
- 0x9A59, 0x6B52, 0x9A5A, 0x6B53, 0x9A5B, 0x6B54, 0x9A5C, 0x6B55, 0x9A5D, 0x6B56, 0x9A5E, 0x6B57, 0x9A5F, 0x6B58, 0x9A60, 0x6B5A,
- 0x9A61, 0x6B5B, 0x9A62, 0x6B5C, 0x9A63, 0x6B5D, 0x9A64, 0x6B5E, 0x9A65, 0x6B5F, 0x9A66, 0x6B60, 0x9A67, 0x6B61, 0x9A68, 0x6B68,
- 0x9A69, 0x6B69, 0x9A6A, 0x6B6B, 0x9A6B, 0x6B6C, 0x9A6C, 0x6B6D, 0x9A6D, 0x6B6E, 0x9A6E, 0x6B6F, 0x9A6F, 0x6B70, 0x9A70, 0x6B71,
- 0x9A71, 0x6B72, 0x9A72, 0x6B73, 0x9A73, 0x6B74, 0x9A74, 0x6B75, 0x9A75, 0x6B76, 0x9A76, 0x6B77, 0x9A77, 0x6B78, 0x9A78, 0x6B7A,
- 0x9A79, 0x6B7D, 0x9A7A, 0x6B7E, 0x9A7B, 0x6B7F, 0x9A7C, 0x6B80, 0x9A7D, 0x6B85, 0x9A7E, 0x6B88, 0x9A80, 0x6B8C, 0x9A81, 0x6B8E,
- 0x9A82, 0x6B8F, 0x9A83, 0x6B90, 0x9A84, 0x6B91, 0x9A85, 0x6B94, 0x9A86, 0x6B95, 0x9A87, 0x6B97, 0x9A88, 0x6B98, 0x9A89, 0x6B99,
- 0x9A8A, 0x6B9C, 0x9A8B, 0x6B9D, 0x9A8C, 0x6B9E, 0x9A8D, 0x6B9F, 0x9A8E, 0x6BA0, 0x9A8F, 0x6BA2, 0x9A90, 0x6BA3, 0x9A91, 0x6BA4,
- 0x9A92, 0x6BA5, 0x9A93, 0x6BA6, 0x9A94, 0x6BA7, 0x9A95, 0x6BA8, 0x9A96, 0x6BA9, 0x9A97, 0x6BAB, 0x9A98, 0x6BAC, 0x9A99, 0x6BAD,
- 0x9A9A, 0x6BAE, 0x9A9B, 0x6BAF, 0x9A9C, 0x6BB0, 0x9A9D, 0x6BB1, 0x9A9E, 0x6BB2, 0x9A9F, 0x6BB6, 0x9AA0, 0x6BB8, 0x9AA1, 0x6BB9,
- 0x9AA2, 0x6BBA, 0x9AA3, 0x6BBB, 0x9AA4, 0x6BBC, 0x9AA5, 0x6BBD, 0x9AA6, 0x6BBE, 0x9AA7, 0x6BC0, 0x9AA8, 0x6BC3, 0x9AA9, 0x6BC4,
- 0x9AAA, 0x6BC6, 0x9AAB, 0x6BC7, 0x9AAC, 0x6BC8, 0x9AAD, 0x6BC9, 0x9AAE, 0x6BCA, 0x9AAF, 0x6BCC, 0x9AB0, 0x6BCE, 0x9AB1, 0x6BD0,
- 0x9AB2, 0x6BD1, 0x9AB3, 0x6BD8, 0x9AB4, 0x6BDA, 0x9AB5, 0x6BDC, 0x9AB6, 0x6BDD, 0x9AB7, 0x6BDE, 0x9AB8, 0x6BDF, 0x9AB9, 0x6BE0,
- 0x9ABA, 0x6BE2, 0x9ABB, 0x6BE3, 0x9ABC, 0x6BE4, 0x9ABD, 0x6BE5, 0x9ABE, 0x6BE6, 0x9ABF, 0x6BE7, 0x9AC0, 0x6BE8, 0x9AC1, 0x6BE9,
- 0x9AC2, 0x6BEC, 0x9AC3, 0x6BED, 0x9AC4, 0x6BEE, 0x9AC5, 0x6BF0, 0x9AC6, 0x6BF1, 0x9AC7, 0x6BF2, 0x9AC8, 0x6BF4, 0x9AC9, 0x6BF6,
- 0x9ACA, 0x6BF7, 0x9ACB, 0x6BF8, 0x9ACC, 0x6BFA, 0x9ACD, 0x6BFB, 0x9ACE, 0x6BFC, 0x9ACF, 0x6BFE, 0x9AD0, 0x6BFF, 0x9AD1, 0x6C00,
- 0x9AD2, 0x6C01, 0x9AD3, 0x6C02, 0x9AD4, 0x6C03, 0x9AD5, 0x6C04, 0x9AD6, 0x6C08, 0x9AD7, 0x6C09, 0x9AD8, 0x6C0A, 0x9AD9, 0x6C0B,
- 0x9ADA, 0x6C0C, 0x9ADB, 0x6C0E, 0x9ADC, 0x6C12, 0x9ADD, 0x6C17, 0x9ADE, 0x6C1C, 0x9ADF, 0x6C1D, 0x9AE0, 0x6C1E, 0x9AE1, 0x6C20,
- 0x9AE2, 0x6C23, 0x9AE3, 0x6C25, 0x9AE4, 0x6C2B, 0x9AE5, 0x6C2C, 0x9AE6, 0x6C2D, 0x9AE7, 0x6C31, 0x9AE8, 0x6C33, 0x9AE9, 0x6C36,
- 0x9AEA, 0x6C37, 0x9AEB, 0x6C39, 0x9AEC, 0x6C3A, 0x9AED, 0x6C3B, 0x9AEE, 0x6C3C, 0x9AEF, 0x6C3E, 0x9AF0, 0x6C3F, 0x9AF1, 0x6C43,
- 0x9AF2, 0x6C44, 0x9AF3, 0x6C45, 0x9AF4, 0x6C48, 0x9AF5, 0x6C4B, 0x9AF6, 0x6C4C, 0x9AF7, 0x6C4D, 0x9AF8, 0x6C4E, 0x9AF9, 0x6C4F,
- 0x9AFA, 0x6C51, 0x9AFB, 0x6C52, 0x9AFC, 0x6C53, 0x9AFD, 0x6C56, 0x9AFE, 0x6C58, 0x9B40, 0x6C59, 0x9B41, 0x6C5A, 0x9B42, 0x6C62,
- 0x9B43, 0x6C63, 0x9B44, 0x6C65, 0x9B45, 0x6C66, 0x9B46, 0x6C67, 0x9B47, 0x6C6B, 0x9B48, 0x6C6C, 0x9B49, 0x6C6D, 0x9B4A, 0x6C6E,
- 0x9B4B, 0x6C6F, 0x9B4C, 0x6C71, 0x9B4D, 0x6C73, 0x9B4E, 0x6C75, 0x9B4F, 0x6C77, 0x9B50, 0x6C78, 0x9B51, 0x6C7A, 0x9B52, 0x6C7B,
- 0x9B53, 0x6C7C, 0x9B54, 0x6C7F, 0x9B55, 0x6C80, 0x9B56, 0x6C84, 0x9B57, 0x6C87, 0x9B58, 0x6C8A, 0x9B59, 0x6C8B, 0x9B5A, 0x6C8D,
- 0x9B5B, 0x6C8E, 0x9B5C, 0x6C91, 0x9B5D, 0x6C92, 0x9B5E, 0x6C95, 0x9B5F, 0x6C96, 0x9B60, 0x6C97, 0x9B61, 0x6C98, 0x9B62, 0x6C9A,
- 0x9B63, 0x6C9C, 0x9B64, 0x6C9D, 0x9B65, 0x6C9E, 0x9B66, 0x6CA0, 0x9B67, 0x6CA2, 0x9B68, 0x6CA8, 0x9B69, 0x6CAC, 0x9B6A, 0x6CAF,
- 0x9B6B, 0x6CB0, 0x9B6C, 0x6CB4, 0x9B6D, 0x6CB5, 0x9B6E, 0x6CB6, 0x9B6F, 0x6CB7, 0x9B70, 0x6CBA, 0x9B71, 0x6CC0, 0x9B72, 0x6CC1,
- 0x9B73, 0x6CC2, 0x9B74, 0x6CC3, 0x9B75, 0x6CC6, 0x9B76, 0x6CC7, 0x9B77, 0x6CC8, 0x9B78, 0x6CCB, 0x9B79, 0x6CCD, 0x9B7A, 0x6CCE,
- 0x9B7B, 0x6CCF, 0x9B7C, 0x6CD1, 0x9B7D, 0x6CD2, 0x9B7E, 0x6CD8, 0x9B80, 0x6CD9, 0x9B81, 0x6CDA, 0x9B82, 0x6CDC, 0x9B83, 0x6CDD,
- 0x9B84, 0x6CDF, 0x9B85, 0x6CE4, 0x9B86, 0x6CE6, 0x9B87, 0x6CE7, 0x9B88, 0x6CE9, 0x9B89, 0x6CEC, 0x9B8A, 0x6CED, 0x9B8B, 0x6CF2,
- 0x9B8C, 0x6CF4, 0x9B8D, 0x6CF9, 0x9B8E, 0x6CFF, 0x9B8F, 0x6D00, 0x9B90, 0x6D02, 0x9B91, 0x6D03, 0x9B92, 0x6D05, 0x9B93, 0x6D06,
- 0x9B94, 0x6D08, 0x9B95, 0x6D09, 0x9B96, 0x6D0A, 0x9B97, 0x6D0D, 0x9B98, 0x6D0F, 0x9B99, 0x6D10, 0x9B9A, 0x6D11, 0x9B9B, 0x6D13,
- 0x9B9C, 0x6D14, 0x9B9D, 0x6D15, 0x9B9E, 0x6D16, 0x9B9F, 0x6D18, 0x9BA0, 0x6D1C, 0x9BA1, 0x6D1D, 0x9BA2, 0x6D1F, 0x9BA3, 0x6D20,
- 0x9BA4, 0x6D21, 0x9BA5, 0x6D22, 0x9BA6, 0x6D23, 0x9BA7, 0x6D24, 0x9BA8, 0x6D26, 0x9BA9, 0x6D28, 0x9BAA, 0x6D29, 0x9BAB, 0x6D2C,
- 0x9BAC, 0x6D2D, 0x9BAD, 0x6D2F, 0x9BAE, 0x6D30, 0x9BAF, 0x6D34, 0x9BB0, 0x6D36, 0x9BB1, 0x6D37, 0x9BB2, 0x6D38, 0x9BB3, 0x6D3A,
- 0x9BB4, 0x6D3F, 0x9BB5, 0x6D40, 0x9BB6, 0x6D42, 0x9BB7, 0x6D44, 0x9BB8, 0x6D49, 0x9BB9, 0x6D4C, 0x9BBA, 0x6D50, 0x9BBB, 0x6D55,
- 0x9BBC, 0x6D56, 0x9BBD, 0x6D57, 0x9BBE, 0x6D58, 0x9BBF, 0x6D5B, 0x9BC0, 0x6D5D, 0x9BC1, 0x6D5F, 0x9BC2, 0x6D61, 0x9BC3, 0x6D62,
- 0x9BC4, 0x6D64, 0x9BC5, 0x6D65, 0x9BC6, 0x6D67, 0x9BC7, 0x6D68, 0x9BC8, 0x6D6B, 0x9BC9, 0x6D6C, 0x9BCA, 0x6D6D, 0x9BCB, 0x6D70,
- 0x9BCC, 0x6D71, 0x9BCD, 0x6D72, 0x9BCE, 0x6D73, 0x9BCF, 0x6D75, 0x9BD0, 0x6D76, 0x9BD1, 0x6D79, 0x9BD2, 0x6D7A, 0x9BD3, 0x6D7B,
- 0x9BD4, 0x6D7D, 0x9BD5, 0x6D7E, 0x9BD6, 0x6D7F, 0x9BD7, 0x6D80, 0x9BD8, 0x6D81, 0x9BD9, 0x6D83, 0x9BDA, 0x6D84, 0x9BDB, 0x6D86,
- 0x9BDC, 0x6D87, 0x9BDD, 0x6D8A, 0x9BDE, 0x6D8B, 0x9BDF, 0x6D8D, 0x9BE0, 0x6D8F, 0x9BE1, 0x6D90, 0x9BE2, 0x6D92, 0x9BE3, 0x6D96,
- 0x9BE4, 0x6D97, 0x9BE5, 0x6D98, 0x9BE6, 0x6D99, 0x9BE7, 0x6D9A, 0x9BE8, 0x6D9C, 0x9BE9, 0x6DA2, 0x9BEA, 0x6DA5, 0x9BEB, 0x6DAC,
- 0x9BEC, 0x6DAD, 0x9BED, 0x6DB0, 0x9BEE, 0x6DB1, 0x9BEF, 0x6DB3, 0x9BF0, 0x6DB4, 0x9BF1, 0x6DB6, 0x9BF2, 0x6DB7, 0x9BF3, 0x6DB9,
- 0x9BF4, 0x6DBA, 0x9BF5, 0x6DBB, 0x9BF6, 0x6DBC, 0x9BF7, 0x6DBD, 0x9BF8, 0x6DBE, 0x9BF9, 0x6DC1, 0x9BFA, 0x6DC2, 0x9BFB, 0x6DC3,
- 0x9BFC, 0x6DC8, 0x9BFD, 0x6DC9, 0x9BFE, 0x6DCA, 0x9C40, 0x6DCD, 0x9C41, 0x6DCE, 0x9C42, 0x6DCF, 0x9C43, 0x6DD0, 0x9C44, 0x6DD2,
- 0x9C45, 0x6DD3, 0x9C46, 0x6DD4, 0x9C47, 0x6DD5, 0x9C48, 0x6DD7, 0x9C49, 0x6DDA, 0x9C4A, 0x6DDB, 0x9C4B, 0x6DDC, 0x9C4C, 0x6DDF,
- 0x9C4D, 0x6DE2, 0x9C4E, 0x6DE3, 0x9C4F, 0x6DE5, 0x9C50, 0x6DE7, 0x9C51, 0x6DE8, 0x9C52, 0x6DE9, 0x9C53, 0x6DEA, 0x9C54, 0x6DED,
- 0x9C55, 0x6DEF, 0x9C56, 0x6DF0, 0x9C57, 0x6DF2, 0x9C58, 0x6DF4, 0x9C59, 0x6DF5, 0x9C5A, 0x6DF6, 0x9C5B, 0x6DF8, 0x9C5C, 0x6DFA,
- 0x9C5D, 0x6DFD, 0x9C5E, 0x6DFE, 0x9C5F, 0x6DFF, 0x9C60, 0x6E00, 0x9C61, 0x6E01, 0x9C62, 0x6E02, 0x9C63, 0x6E03, 0x9C64, 0x6E04,
- 0x9C65, 0x6E06, 0x9C66, 0x6E07, 0x9C67, 0x6E08, 0x9C68, 0x6E09, 0x9C69, 0x6E0B, 0x9C6A, 0x6E0F, 0x9C6B, 0x6E12, 0x9C6C, 0x6E13,
- 0x9C6D, 0x6E15, 0x9C6E, 0x6E18, 0x9C6F, 0x6E19, 0x9C70, 0x6E1B, 0x9C71, 0x6E1C, 0x9C72, 0x6E1E, 0x9C73, 0x6E1F, 0x9C74, 0x6E22,
- 0x9C75, 0x6E26, 0x9C76, 0x6E27, 0x9C77, 0x6E28, 0x9C78, 0x6E2A, 0x9C79, 0x6E2C, 0x9C7A, 0x6E2E, 0x9C7B, 0x6E30, 0x9C7C, 0x6E31,
- 0x9C7D, 0x6E33, 0x9C7E, 0x6E35, 0x9C80, 0x6E36, 0x9C81, 0x6E37, 0x9C82, 0x6E39, 0x9C83, 0x6E3B, 0x9C84, 0x6E3C, 0x9C85, 0x6E3D,
- 0x9C86, 0x6E3E, 0x9C87, 0x6E3F, 0x9C88, 0x6E40, 0x9C89, 0x6E41, 0x9C8A, 0x6E42, 0x9C8B, 0x6E45, 0x9C8C, 0x6E46, 0x9C8D, 0x6E47,
- 0x9C8E, 0x6E48, 0x9C8F, 0x6E49, 0x9C90, 0x6E4A, 0x9C91, 0x6E4B, 0x9C92, 0x6E4C, 0x9C93, 0x6E4F, 0x9C94, 0x6E50, 0x9C95, 0x6E51,
- 0x9C96, 0x6E52, 0x9C97, 0x6E55, 0x9C98, 0x6E57, 0x9C99, 0x6E59, 0x9C9A, 0x6E5A, 0x9C9B, 0x6E5C, 0x9C9C, 0x6E5D, 0x9C9D, 0x6E5E,
- 0x9C9E, 0x6E60, 0x9C9F, 0x6E61, 0x9CA0, 0x6E62, 0x9CA1, 0x6E63, 0x9CA2, 0x6E64, 0x9CA3, 0x6E65, 0x9CA4, 0x6E66, 0x9CA5, 0x6E67,
- 0x9CA6, 0x6E68, 0x9CA7, 0x6E69, 0x9CA8, 0x6E6A, 0x9CA9, 0x6E6C, 0x9CAA, 0x6E6D, 0x9CAB, 0x6E6F, 0x9CAC, 0x6E70, 0x9CAD, 0x6E71,
- 0x9CAE, 0x6E72, 0x9CAF, 0x6E73, 0x9CB0, 0x6E74, 0x9CB1, 0x6E75, 0x9CB2, 0x6E76, 0x9CB3, 0x6E77, 0x9CB4, 0x6E78, 0x9CB5, 0x6E79,
- 0x9CB6, 0x6E7A, 0x9CB7, 0x6E7B, 0x9CB8, 0x6E7C, 0x9CB9, 0x6E7D, 0x9CBA, 0x6E80, 0x9CBB, 0x6E81, 0x9CBC, 0x6E82, 0x9CBD, 0x6E84,
- 0x9CBE, 0x6E87, 0x9CBF, 0x6E88, 0x9CC0, 0x6E8A, 0x9CC1, 0x6E8B, 0x9CC2, 0x6E8C, 0x9CC3, 0x6E8D, 0x9CC4, 0x6E8E, 0x9CC5, 0x6E91,
- 0x9CC6, 0x6E92, 0x9CC7, 0x6E93, 0x9CC8, 0x6E94, 0x9CC9, 0x6E95, 0x9CCA, 0x6E96, 0x9CCB, 0x6E97, 0x9CCC, 0x6E99, 0x9CCD, 0x6E9A,
- 0x9CCE, 0x6E9B, 0x9CCF, 0x6E9D, 0x9CD0, 0x6E9E, 0x9CD1, 0x6EA0, 0x9CD2, 0x6EA1, 0x9CD3, 0x6EA3, 0x9CD4, 0x6EA4, 0x9CD5, 0x6EA6,
- 0x9CD6, 0x6EA8, 0x9CD7, 0x6EA9, 0x9CD8, 0x6EAB, 0x9CD9, 0x6EAC, 0x9CDA, 0x6EAD, 0x9CDB, 0x6EAE, 0x9CDC, 0x6EB0, 0x9CDD, 0x6EB3,
- 0x9CDE, 0x6EB5, 0x9CDF, 0x6EB8, 0x9CE0, 0x6EB9, 0x9CE1, 0x6EBC, 0x9CE2, 0x6EBE, 0x9CE3, 0x6EBF, 0x9CE4, 0x6EC0, 0x9CE5, 0x6EC3,
- 0x9CE6, 0x6EC4, 0x9CE7, 0x6EC5, 0x9CE8, 0x6EC6, 0x9CE9, 0x6EC8, 0x9CEA, 0x6EC9, 0x9CEB, 0x6ECA, 0x9CEC, 0x6ECC, 0x9CED, 0x6ECD,
- 0x9CEE, 0x6ECE, 0x9CEF, 0x6ED0, 0x9CF0, 0x6ED2, 0x9CF1, 0x6ED6, 0x9CF2, 0x6ED8, 0x9CF3, 0x6ED9, 0x9CF4, 0x6EDB, 0x9CF5, 0x6EDC,
- 0x9CF6, 0x6EDD, 0x9CF7, 0x6EE3, 0x9CF8, 0x6EE7, 0x9CF9, 0x6EEA, 0x9CFA, 0x6EEB, 0x9CFB, 0x6EEC, 0x9CFC, 0x6EED, 0x9CFD, 0x6EEE,
- 0x9CFE, 0x6EEF, 0x9D40, 0x6EF0, 0x9D41, 0x6EF1, 0x9D42, 0x6EF2, 0x9D43, 0x6EF3, 0x9D44, 0x6EF5, 0x9D45, 0x6EF6, 0x9D46, 0x6EF7,
- 0x9D47, 0x6EF8, 0x9D48, 0x6EFA, 0x9D49, 0x6EFB, 0x9D4A, 0x6EFC, 0x9D4B, 0x6EFD, 0x9D4C, 0x6EFE, 0x9D4D, 0x6EFF, 0x9D4E, 0x6F00,
- 0x9D4F, 0x6F01, 0x9D50, 0x6F03, 0x9D51, 0x6F04, 0x9D52, 0x6F05, 0x9D53, 0x6F07, 0x9D54, 0x6F08, 0x9D55, 0x6F0A, 0x9D56, 0x6F0B,
- 0x9D57, 0x6F0C, 0x9D58, 0x6F0D, 0x9D59, 0x6F0E, 0x9D5A, 0x6F10, 0x9D5B, 0x6F11, 0x9D5C, 0x6F12, 0x9D5D, 0x6F16, 0x9D5E, 0x6F17,
- 0x9D5F, 0x6F18, 0x9D60, 0x6F19, 0x9D61, 0x6F1A, 0x9D62, 0x6F1B, 0x9D63, 0x6F1C, 0x9D64, 0x6F1D, 0x9D65, 0x6F1E, 0x9D66, 0x6F1F,
- 0x9D67, 0x6F21, 0x9D68, 0x6F22, 0x9D69, 0x6F23, 0x9D6A, 0x6F25, 0x9D6B, 0x6F26, 0x9D6C, 0x6F27, 0x9D6D, 0x6F28, 0x9D6E, 0x6F2C,
- 0x9D6F, 0x6F2E, 0x9D70, 0x6F30, 0x9D71, 0x6F32, 0x9D72, 0x6F34, 0x9D73, 0x6F35, 0x9D74, 0x6F37, 0x9D75, 0x6F38, 0x9D76, 0x6F39,
- 0x9D77, 0x6F3A, 0x9D78, 0x6F3B, 0x9D79, 0x6F3C, 0x9D7A, 0x6F3D, 0x9D7B, 0x6F3F, 0x9D7C, 0x6F40, 0x9D7D, 0x6F41, 0x9D7E, 0x6F42,
- 0x9D80, 0x6F43, 0x9D81, 0x6F44, 0x9D82, 0x6F45, 0x9D83, 0x6F48, 0x9D84, 0x6F49, 0x9D85, 0x6F4A, 0x9D86, 0x6F4C, 0x9D87, 0x6F4E,
- 0x9D88, 0x6F4F, 0x9D89, 0x6F50, 0x9D8A, 0x6F51, 0x9D8B, 0x6F52, 0x9D8C, 0x6F53, 0x9D8D, 0x6F54, 0x9D8E, 0x6F55, 0x9D8F, 0x6F56,
- 0x9D90, 0x6F57, 0x9D91, 0x6F59, 0x9D92, 0x6F5A, 0x9D93, 0x6F5B, 0x9D94, 0x6F5D, 0x9D95, 0x6F5F, 0x9D96, 0x6F60, 0x9D97, 0x6F61,
- 0x9D98, 0x6F63, 0x9D99, 0x6F64, 0x9D9A, 0x6F65, 0x9D9B, 0x6F67, 0x9D9C, 0x6F68, 0x9D9D, 0x6F69, 0x9D9E, 0x6F6A, 0x9D9F, 0x6F6B,
- 0x9DA0, 0x6F6C, 0x9DA1, 0x6F6F, 0x9DA2, 0x6F70, 0x9DA3, 0x6F71, 0x9DA4, 0x6F73, 0x9DA5, 0x6F75, 0x9DA6, 0x6F76, 0x9DA7, 0x6F77,
- 0x9DA8, 0x6F79, 0x9DA9, 0x6F7B, 0x9DAA, 0x6F7D, 0x9DAB, 0x6F7E, 0x9DAC, 0x6F7F, 0x9DAD, 0x6F80, 0x9DAE, 0x6F81, 0x9DAF, 0x6F82,
- 0x9DB0, 0x6F83, 0x9DB1, 0x6F85, 0x9DB2, 0x6F86, 0x9DB3, 0x6F87, 0x9DB4, 0x6F8A, 0x9DB5, 0x6F8B, 0x9DB6, 0x6F8F, 0x9DB7, 0x6F90,
- 0x9DB8, 0x6F91, 0x9DB9, 0x6F92, 0x9DBA, 0x6F93, 0x9DBB, 0x6F94, 0x9DBC, 0x6F95, 0x9DBD, 0x6F96, 0x9DBE, 0x6F97, 0x9DBF, 0x6F98,
- 0x9DC0, 0x6F99, 0x9DC1, 0x6F9A, 0x9DC2, 0x6F9B, 0x9DC3, 0x6F9D, 0x9DC4, 0x6F9E, 0x9DC5, 0x6F9F, 0x9DC6, 0x6FA0, 0x9DC7, 0x6FA2,
- 0x9DC8, 0x6FA3, 0x9DC9, 0x6FA4, 0x9DCA, 0x6FA5, 0x9DCB, 0x6FA6, 0x9DCC, 0x6FA8, 0x9DCD, 0x6FA9, 0x9DCE, 0x6FAA, 0x9DCF, 0x6FAB,
- 0x9DD0, 0x6FAC, 0x9DD1, 0x6FAD, 0x9DD2, 0x6FAE, 0x9DD3, 0x6FAF, 0x9DD4, 0x6FB0, 0x9DD5, 0x6FB1, 0x9DD6, 0x6FB2, 0x9DD7, 0x6FB4,
- 0x9DD8, 0x6FB5, 0x9DD9, 0x6FB7, 0x9DDA, 0x6FB8, 0x9DDB, 0x6FBA, 0x9DDC, 0x6FBB, 0x9DDD, 0x6FBC, 0x9DDE, 0x6FBD, 0x9DDF, 0x6FBE,
- 0x9DE0, 0x6FBF, 0x9DE1, 0x6FC1, 0x9DE2, 0x6FC3, 0x9DE3, 0x6FC4, 0x9DE4, 0x6FC5, 0x9DE5, 0x6FC6, 0x9DE6, 0x6FC7, 0x9DE7, 0x6FC8,
- 0x9DE8, 0x6FCA, 0x9DE9, 0x6FCB, 0x9DEA, 0x6FCC, 0x9DEB, 0x6FCD, 0x9DEC, 0x6FCE, 0x9DED, 0x6FCF, 0x9DEE, 0x6FD0, 0x9DEF, 0x6FD3,
- 0x9DF0, 0x6FD4, 0x9DF1, 0x6FD5, 0x9DF2, 0x6FD6, 0x9DF3, 0x6FD7, 0x9DF4, 0x6FD8, 0x9DF5, 0x6FD9, 0x9DF6, 0x6FDA, 0x9DF7, 0x6FDB,
- 0x9DF8, 0x6FDC, 0x9DF9, 0x6FDD, 0x9DFA, 0x6FDF, 0x9DFB, 0x6FE2, 0x9DFC, 0x6FE3, 0x9DFD, 0x6FE4, 0x9DFE, 0x6FE5, 0x9E40, 0x6FE6,
- 0x9E41, 0x6FE7, 0x9E42, 0x6FE8, 0x9E43, 0x6FE9, 0x9E44, 0x6FEA, 0x9E45, 0x6FEB, 0x9E46, 0x6FEC, 0x9E47, 0x6FED, 0x9E48, 0x6FF0,
- 0x9E49, 0x6FF1, 0x9E4A, 0x6FF2, 0x9E4B, 0x6FF3, 0x9E4C, 0x6FF4, 0x9E4D, 0x6FF5, 0x9E4E, 0x6FF6, 0x9E4F, 0x6FF7, 0x9E50, 0x6FF8,
- 0x9E51, 0x6FF9, 0x9E52, 0x6FFA, 0x9E53, 0x6FFB, 0x9E54, 0x6FFC, 0x9E55, 0x6FFD, 0x9E56, 0x6FFE, 0x9E57, 0x6FFF, 0x9E58, 0x7000,
- 0x9E59, 0x7001, 0x9E5A, 0x7002, 0x9E5B, 0x7003, 0x9E5C, 0x7004, 0x9E5D, 0x7005, 0x9E5E, 0x7006, 0x9E5F, 0x7007, 0x9E60, 0x7008,
- 0x9E61, 0x7009, 0x9E62, 0x700A, 0x9E63, 0x700B, 0x9E64, 0x700C, 0x9E65, 0x700D, 0x9E66, 0x700E, 0x9E67, 0x700F, 0x9E68, 0x7010,
- 0x9E69, 0x7012, 0x9E6A, 0x7013, 0x9E6B, 0x7014, 0x9E6C, 0x7015, 0x9E6D, 0x7016, 0x9E6E, 0x7017, 0x9E6F, 0x7018, 0x9E70, 0x7019,
- 0x9E71, 0x701C, 0x9E72, 0x701D, 0x9E73, 0x701E, 0x9E74, 0x701F, 0x9E75, 0x7020, 0x9E76, 0x7021, 0x9E77, 0x7022, 0x9E78, 0x7024,
- 0x9E79, 0x7025, 0x9E7A, 0x7026, 0x9E7B, 0x7027, 0x9E7C, 0x7028, 0x9E7D, 0x7029, 0x9E7E, 0x702A, 0x9E80, 0x702B, 0x9E81, 0x702C,
- 0x9E82, 0x702D, 0x9E83, 0x702E, 0x9E84, 0x702F, 0x9E85, 0x7030, 0x9E86, 0x7031, 0x9E87, 0x7032, 0x9E88, 0x7033, 0x9E89, 0x7034,
- 0x9E8A, 0x7036, 0x9E8B, 0x7037, 0x9E8C, 0x7038, 0x9E8D, 0x703A, 0x9E8E, 0x703B, 0x9E8F, 0x703C, 0x9E90, 0x703D, 0x9E91, 0x703E,
- 0x9E92, 0x703F, 0x9E93, 0x7040, 0x9E94, 0x7041, 0x9E95, 0x7042, 0x9E96, 0x7043, 0x9E97, 0x7044, 0x9E98, 0x7045, 0x9E99, 0x7046,
- 0x9E9A, 0x7047, 0x9E9B, 0x7048, 0x9E9C, 0x7049, 0x9E9D, 0x704A, 0x9E9E, 0x704B, 0x9E9F, 0x704D, 0x9EA0, 0x704E, 0x9EA1, 0x7050,
- 0x9EA2, 0x7051, 0x9EA3, 0x7052, 0x9EA4, 0x7053, 0x9EA5, 0x7054, 0x9EA6, 0x7055, 0x9EA7, 0x7056, 0x9EA8, 0x7057, 0x9EA9, 0x7058,
- 0x9EAA, 0x7059, 0x9EAB, 0x705A, 0x9EAC, 0x705B, 0x9EAD, 0x705C, 0x9EAE, 0x705D, 0x9EAF, 0x705F, 0x9EB0, 0x7060, 0x9EB1, 0x7061,
- 0x9EB2, 0x7062, 0x9EB3, 0x7063, 0x9EB4, 0x7064, 0x9EB5, 0x7065, 0x9EB6, 0x7066, 0x9EB7, 0x7067, 0x9EB8, 0x7068, 0x9EB9, 0x7069,
- 0x9EBA, 0x706A, 0x9EBB, 0x706E, 0x9EBC, 0x7071, 0x9EBD, 0x7072, 0x9EBE, 0x7073, 0x9EBF, 0x7074, 0x9EC0, 0x7077, 0x9EC1, 0x7079,
- 0x9EC2, 0x707A, 0x9EC3, 0x707B, 0x9EC4, 0x707D, 0x9EC5, 0x7081, 0x9EC6, 0x7082, 0x9EC7, 0x7083, 0x9EC8, 0x7084, 0x9EC9, 0x7086,
- 0x9ECA, 0x7087, 0x9ECB, 0x7088, 0x9ECC, 0x708B, 0x9ECD, 0x708C, 0x9ECE, 0x708D, 0x9ECF, 0x708F, 0x9ED0, 0x7090, 0x9ED1, 0x7091,
- 0x9ED2, 0x7093, 0x9ED3, 0x7097, 0x9ED4, 0x7098, 0x9ED5, 0x709A, 0x9ED6, 0x709B, 0x9ED7, 0x709E, 0x9ED8, 0x709F, 0x9ED9, 0x70A0,
- 0x9EDA, 0x70A1, 0x9EDB, 0x70A2, 0x9EDC, 0x70A3, 0x9EDD, 0x70A4, 0x9EDE, 0x70A5, 0x9EDF, 0x70A6, 0x9EE0, 0x70A7, 0x9EE1, 0x70A8,
- 0x9EE2, 0x70A9, 0x9EE3, 0x70AA, 0x9EE4, 0x70B0, 0x9EE5, 0x70B2, 0x9EE6, 0x70B4, 0x9EE7, 0x70B5, 0x9EE8, 0x70B6, 0x9EE9, 0x70BA,
- 0x9EEA, 0x70BE, 0x9EEB, 0x70BF, 0x9EEC, 0x70C4, 0x9EED, 0x70C5, 0x9EEE, 0x70C6, 0x9EEF, 0x70C7, 0x9EF0, 0x70C9, 0x9EF1, 0x70CB,
- 0x9EF2, 0x70CC, 0x9EF3, 0x70CD, 0x9EF4, 0x70CE, 0x9EF5, 0x70CF, 0x9EF6, 0x70D0, 0x9EF7, 0x70D1, 0x9EF8, 0x70D2, 0x9EF9, 0x70D3,
- 0x9EFA, 0x70D4, 0x9EFB, 0x70D5, 0x9EFC, 0x70D6, 0x9EFD, 0x70D7, 0x9EFE, 0x70DA, 0x9F40, 0x70DC, 0x9F41, 0x70DD, 0x9F42, 0x70DE,
- 0x9F43, 0x70E0, 0x9F44, 0x70E1, 0x9F45, 0x70E2, 0x9F46, 0x70E3, 0x9F47, 0x70E5, 0x9F48, 0x70EA, 0x9F49, 0x70EE, 0x9F4A, 0x70F0,
- 0x9F4B, 0x70F1, 0x9F4C, 0x70F2, 0x9F4D, 0x70F3, 0x9F4E, 0x70F4, 0x9F4F, 0x70F5, 0x9F50, 0x70F6, 0x9F51, 0x70F8, 0x9F52, 0x70FA,
- 0x9F53, 0x70FB, 0x9F54, 0x70FC, 0x9F55, 0x70FE, 0x9F56, 0x70FF, 0x9F57, 0x7100, 0x9F58, 0x7101, 0x9F59, 0x7102, 0x9F5A, 0x7103,
- 0x9F5B, 0x7104, 0x9F5C, 0x7105, 0x9F5D, 0x7106, 0x9F5E, 0x7107, 0x9F5F, 0x7108, 0x9F60, 0x710B, 0x9F61, 0x710C, 0x9F62, 0x710D,
- 0x9F63, 0x710E, 0x9F64, 0x710F, 0x9F65, 0x7111, 0x9F66, 0x7112, 0x9F67, 0x7114, 0x9F68, 0x7117, 0x9F69, 0x711B, 0x9F6A, 0x711C,
- 0x9F6B, 0x711D, 0x9F6C, 0x711E, 0x9F6D, 0x711F, 0x9F6E, 0x7120, 0x9F6F, 0x7121, 0x9F70, 0x7122, 0x9F71, 0x7123, 0x9F72, 0x7124,
- 0x9F73, 0x7125, 0x9F74, 0x7127, 0x9F75, 0x7128, 0x9F76, 0x7129, 0x9F77, 0x712A, 0x9F78, 0x712B, 0x9F79, 0x712C, 0x9F7A, 0x712D,
- 0x9F7B, 0x712E, 0x9F7C, 0x7132, 0x9F7D, 0x7133, 0x9F7E, 0x7134, 0x9F80, 0x7135, 0x9F81, 0x7137, 0x9F82, 0x7138, 0x9F83, 0x7139,
- 0x9F84, 0x713A, 0x9F85, 0x713B, 0x9F86, 0x713C, 0x9F87, 0x713D, 0x9F88, 0x713E, 0x9F89, 0x713F, 0x9F8A, 0x7140, 0x9F8B, 0x7141,
- 0x9F8C, 0x7142, 0x9F8D, 0x7143, 0x9F8E, 0x7144, 0x9F8F, 0x7146, 0x9F90, 0x7147, 0x9F91, 0x7148, 0x9F92, 0x7149, 0x9F93, 0x714B,
- 0x9F94, 0x714D, 0x9F95, 0x714F, 0x9F96, 0x7150, 0x9F97, 0x7151, 0x9F98, 0x7152, 0x9F99, 0x7153, 0x9F9A, 0x7154, 0x9F9B, 0x7155,
- 0x9F9C, 0x7156, 0x9F9D, 0x7157, 0x9F9E, 0x7158, 0x9F9F, 0x7159, 0x9FA0, 0x715A, 0x9FA1, 0x715B, 0x9FA2, 0x715D, 0x9FA3, 0x715F,
- 0x9FA4, 0x7160, 0x9FA5, 0x7161, 0x9FA6, 0x7162, 0x9FA7, 0x7163, 0x9FA8, 0x7165, 0x9FA9, 0x7169, 0x9FAA, 0x716A, 0x9FAB, 0x716B,
- 0x9FAC, 0x716C, 0x9FAD, 0x716D, 0x9FAE, 0x716F, 0x9FAF, 0x7170, 0x9FB0, 0x7171, 0x9FB1, 0x7174, 0x9FB2, 0x7175, 0x9FB3, 0x7176,
- 0x9FB4, 0x7177, 0x9FB5, 0x7179, 0x9FB6, 0x717B, 0x9FB7, 0x717C, 0x9FB8, 0x717E, 0x9FB9, 0x717F, 0x9FBA, 0x7180, 0x9FBB, 0x7181,
- 0x9FBC, 0x7182, 0x9FBD, 0x7183, 0x9FBE, 0x7185, 0x9FBF, 0x7186, 0x9FC0, 0x7187, 0x9FC1, 0x7188, 0x9FC2, 0x7189, 0x9FC3, 0x718B,
- 0x9FC4, 0x718C, 0x9FC5, 0x718D, 0x9FC6, 0x718E, 0x9FC7, 0x7190, 0x9FC8, 0x7191, 0x9FC9, 0x7192, 0x9FCA, 0x7193, 0x9FCB, 0x7195,
- 0x9FCC, 0x7196, 0x9FCD, 0x7197, 0x9FCE, 0x719A, 0x9FCF, 0x719B, 0x9FD0, 0x719C, 0x9FD1, 0x719D, 0x9FD2, 0x719E, 0x9FD3, 0x71A1,
- 0x9FD4, 0x71A2, 0x9FD5, 0x71A3, 0x9FD6, 0x71A4, 0x9FD7, 0x71A5, 0x9FD8, 0x71A6, 0x9FD9, 0x71A7, 0x9FDA, 0x71A9, 0x9FDB, 0x71AA,
- 0x9FDC, 0x71AB, 0x9FDD, 0x71AD, 0x9FDE, 0x71AE, 0x9FDF, 0x71AF, 0x9FE0, 0x71B0, 0x9FE1, 0x71B1, 0x9FE2, 0x71B2, 0x9FE3, 0x71B4,
- 0x9FE4, 0x71B6, 0x9FE5, 0x71B7, 0x9FE6, 0x71B8, 0x9FE7, 0x71BA, 0x9FE8, 0x71BB, 0x9FE9, 0x71BC, 0x9FEA, 0x71BD, 0x9FEB, 0x71BE,
- 0x9FEC, 0x71BF, 0x9FED, 0x71C0, 0x9FEE, 0x71C1, 0x9FEF, 0x71C2, 0x9FF0, 0x71C4, 0x9FF1, 0x71C5, 0x9FF2, 0x71C6, 0x9FF3, 0x71C7,
- 0x9FF4, 0x71C8, 0x9FF5, 0x71C9, 0x9FF6, 0x71CA, 0x9FF7, 0x71CB, 0x9FF8, 0x71CC, 0x9FF9, 0x71CD, 0x9FFA, 0x71CF, 0x9FFB, 0x71D0,
- 0x9FFC, 0x71D1, 0x9FFD, 0x71D2, 0x9FFE, 0x71D3, 0xA040, 0x71D6, 0xA041, 0x71D7, 0xA042, 0x71D8, 0xA043, 0x71D9, 0xA044, 0x71DA,
- 0xA045, 0x71DB, 0xA046, 0x71DC, 0xA047, 0x71DD, 0xA048, 0x71DE, 0xA049, 0x71DF, 0xA04A, 0x71E1, 0xA04B, 0x71E2, 0xA04C, 0x71E3,
- 0xA04D, 0x71E4, 0xA04E, 0x71E6, 0xA04F, 0x71E8, 0xA050, 0x71E9, 0xA051, 0x71EA, 0xA052, 0x71EB, 0xA053, 0x71EC, 0xA054, 0x71ED,
- 0xA055, 0x71EF, 0xA056, 0x71F0, 0xA057, 0x71F1, 0xA058, 0x71F2, 0xA059, 0x71F3, 0xA05A, 0x71F4, 0xA05B, 0x71F5, 0xA05C, 0x71F6,
- 0xA05D, 0x71F7, 0xA05E, 0x71F8, 0xA05F, 0x71FA, 0xA060, 0x71FB, 0xA061, 0x71FC, 0xA062, 0x71FD, 0xA063, 0x71FE, 0xA064, 0x71FF,
- 0xA065, 0x7200, 0xA066, 0x7201, 0xA067, 0x7202, 0xA068, 0x7203, 0xA069, 0x7204, 0xA06A, 0x7205, 0xA06B, 0x7207, 0xA06C, 0x7208,
- 0xA06D, 0x7209, 0xA06E, 0x720A, 0xA06F, 0x720B, 0xA070, 0x720C, 0xA071, 0x720D, 0xA072, 0x720E, 0xA073, 0x720F, 0xA074, 0x7210,
- 0xA075, 0x7211, 0xA076, 0x7212, 0xA077, 0x7213, 0xA078, 0x7214, 0xA079, 0x7215, 0xA07A, 0x7216, 0xA07B, 0x7217, 0xA07C, 0x7218,
- 0xA07D, 0x7219, 0xA07E, 0x721A, 0xA080, 0x721B, 0xA081, 0x721C, 0xA082, 0x721E, 0xA083, 0x721F, 0xA084, 0x7220, 0xA085, 0x7221,
- 0xA086, 0x7222, 0xA087, 0x7223, 0xA088, 0x7224, 0xA089, 0x7225, 0xA08A, 0x7226, 0xA08B, 0x7227, 0xA08C, 0x7229, 0xA08D, 0x722B,
- 0xA08E, 0x722D, 0xA08F, 0x722E, 0xA090, 0x722F, 0xA091, 0x7232, 0xA092, 0x7233, 0xA093, 0x7234, 0xA094, 0x723A, 0xA095, 0x723C,
- 0xA096, 0x723E, 0xA097, 0x7240, 0xA098, 0x7241, 0xA099, 0x7242, 0xA09A, 0x7243, 0xA09B, 0x7244, 0xA09C, 0x7245, 0xA09D, 0x7246,
- 0xA09E, 0x7249, 0xA09F, 0x724A, 0xA0A0, 0x724B, 0xA0A1, 0x724E, 0xA0A2, 0x724F, 0xA0A3, 0x7250, 0xA0A4, 0x7251, 0xA0A5, 0x7253,
- 0xA0A6, 0x7254, 0xA0A7, 0x7255, 0xA0A8, 0x7257, 0xA0A9, 0x7258, 0xA0AA, 0x725A, 0xA0AB, 0x725C, 0xA0AC, 0x725E, 0xA0AD, 0x7260,
- 0xA0AE, 0x7263, 0xA0AF, 0x7264, 0xA0B0, 0x7265, 0xA0B1, 0x7268, 0xA0B2, 0x726A, 0xA0B3, 0x726B, 0xA0B4, 0x726C, 0xA0B5, 0x726D,
- 0xA0B6, 0x7270, 0xA0B7, 0x7271, 0xA0B8, 0x7273, 0xA0B9, 0x7274, 0xA0BA, 0x7276, 0xA0BB, 0x7277, 0xA0BC, 0x7278, 0xA0BD, 0x727B,
- 0xA0BE, 0x727C, 0xA0BF, 0x727D, 0xA0C0, 0x7282, 0xA0C1, 0x7283, 0xA0C2, 0x7285, 0xA0C3, 0x7286, 0xA0C4, 0x7287, 0xA0C5, 0x7288,
- 0xA0C6, 0x7289, 0xA0C7, 0x728C, 0xA0C8, 0x728E, 0xA0C9, 0x7290, 0xA0CA, 0x7291, 0xA0CB, 0x7293, 0xA0CC, 0x7294, 0xA0CD, 0x7295,
- 0xA0CE, 0x7296, 0xA0CF, 0x7297, 0xA0D0, 0x7298, 0xA0D1, 0x7299, 0xA0D2, 0x729A, 0xA0D3, 0x729B, 0xA0D4, 0x729C, 0xA0D5, 0x729D,
- 0xA0D6, 0x729E, 0xA0D7, 0x72A0, 0xA0D8, 0x72A1, 0xA0D9, 0x72A2, 0xA0DA, 0x72A3, 0xA0DB, 0x72A4, 0xA0DC, 0x72A5, 0xA0DD, 0x72A6,
- 0xA0DE, 0x72A7, 0xA0DF, 0x72A8, 0xA0E0, 0x72A9, 0xA0E1, 0x72AA, 0xA0E2, 0x72AB, 0xA0E3, 0x72AE, 0xA0E4, 0x72B1, 0xA0E5, 0x72B2,
- 0xA0E6, 0x72B3, 0xA0E7, 0x72B5, 0xA0E8, 0x72BA, 0xA0E9, 0x72BB, 0xA0EA, 0x72BC, 0xA0EB, 0x72BD, 0xA0EC, 0x72BE, 0xA0ED, 0x72BF,
- 0xA0EE, 0x72C0, 0xA0EF, 0x72C5, 0xA0F0, 0x72C6, 0xA0F1, 0x72C7, 0xA0F2, 0x72C9, 0xA0F3, 0x72CA, 0xA0F4, 0x72CB, 0xA0F5, 0x72CC,
- 0xA0F6, 0x72CF, 0xA0F7, 0x72D1, 0xA0F8, 0x72D3, 0xA0F9, 0x72D4, 0xA0FA, 0x72D5, 0xA0FB, 0x72D6, 0xA0FC, 0x72D8, 0xA0FD, 0x72DA,
- 0xA0FE, 0x72DB, 0xA1A1, 0x3000, 0xA1A2, 0x3001, 0xA1A3, 0x3002, 0xA1A4, 0x00B7, 0xA1A5, 0x02C9, 0xA1A6, 0x02C7, 0xA1A7, 0x00A8,
- 0xA1A8, 0x3003, 0xA1A9, 0x3005, 0xA1AA, 0x2014, 0xA1AB, 0xFF5E, 0xA1AC, 0x2016, 0xA1AD, 0x2026, 0xA1AE, 0x2018, 0xA1AF, 0x2019,
- 0xA1B0, 0x201C, 0xA1B1, 0x201D, 0xA1B2, 0x3014, 0xA1B3, 0x3015, 0xA1B4, 0x3008, 0xA1B5, 0x3009, 0xA1B6, 0x300A, 0xA1B7, 0x300B,
- 0xA1B8, 0x300C, 0xA1B9, 0x300D, 0xA1BA, 0x300E, 0xA1BB, 0x300F, 0xA1BC, 0x3016, 0xA1BD, 0x3017, 0xA1BE, 0x3010, 0xA1BF, 0x3011,
- 0xA1C0, 0x00B1, 0xA1C1, 0x00D7, 0xA1C2, 0x00F7, 0xA1C3, 0x2236, 0xA1C4, 0x2227, 0xA1C5, 0x2228, 0xA1C6, 0x2211, 0xA1C7, 0x220F,
- 0xA1C8, 0x222A, 0xA1C9, 0x2229, 0xA1CA, 0x2208, 0xA1CB, 0x2237, 0xA1CC, 0x221A, 0xA1CD, 0x22A5, 0xA1CE, 0x2225, 0xA1CF, 0x2220,
- 0xA1D0, 0x2312, 0xA1D1, 0x2299, 0xA1D2, 0x222B, 0xA1D3, 0x222E, 0xA1D4, 0x2261, 0xA1D5, 0x224C, 0xA1D6, 0x2248, 0xA1D7, 0x223D,
- 0xA1D8, 0x221D, 0xA1D9, 0x2260, 0xA1DA, 0x226E, 0xA1DB, 0x226F, 0xA1DC, 0x2264, 0xA1DD, 0x2265, 0xA1DE, 0x221E, 0xA1DF, 0x2235,
- 0xA1E0, 0x2234, 0xA1E1, 0x2642, 0xA1E2, 0x2640, 0xA1E3, 0x00B0, 0xA1E4, 0x2032, 0xA1E5, 0x2033, 0xA1E6, 0x2103, 0xA1E7, 0xFF04,
- 0xA1E8, 0x00A4, 0xA1E9, 0xFFE0, 0xA1EA, 0xFFE1, 0xA1EB, 0x2030, 0xA1EC, 0x00A7, 0xA1ED, 0x2116, 0xA1EE, 0x2606, 0xA1EF, 0x2605,
- 0xA1F0, 0x25CB, 0xA1F1, 0x25CF, 0xA1F2, 0x25CE, 0xA1F3, 0x25C7, 0xA1F4, 0x25C6, 0xA1F5, 0x25A1, 0xA1F6, 0x25A0, 0xA1F7, 0x25B3,
- 0xA1F8, 0x25B2, 0xA1F9, 0x203B, 0xA1FA, 0x2192, 0xA1FB, 0x2190, 0xA1FC, 0x2191, 0xA1FD, 0x2193, 0xA1FE, 0x3013, 0xA2A1, 0x2170,
- 0xA2A2, 0x2171, 0xA2A3, 0x2172, 0xA2A4, 0x2173, 0xA2A5, 0x2174, 0xA2A6, 0x2175, 0xA2A7, 0x2176, 0xA2A8, 0x2177, 0xA2A9, 0x2178,
- 0xA2AA, 0x2179, 0xA2B1, 0x2488, 0xA2B2, 0x2489, 0xA2B3, 0x248A, 0xA2B4, 0x248B, 0xA2B5, 0x248C, 0xA2B6, 0x248D, 0xA2B7, 0x248E,
- 0xA2B8, 0x248F, 0xA2B9, 0x2490, 0xA2BA, 0x2491, 0xA2BB, 0x2492, 0xA2BC, 0x2493, 0xA2BD, 0x2494, 0xA2BE, 0x2495, 0xA2BF, 0x2496,
- 0xA2C0, 0x2497, 0xA2C1, 0x2498, 0xA2C2, 0x2499, 0xA2C3, 0x249A, 0xA2C4, 0x249B, 0xA2C5, 0x2474, 0xA2C6, 0x2475, 0xA2C7, 0x2476,
- 0xA2C8, 0x2477, 0xA2C9, 0x2478, 0xA2CA, 0x2479, 0xA2CB, 0x247A, 0xA2CC, 0x247B, 0xA2CD, 0x247C, 0xA2CE, 0x247D, 0xA2CF, 0x247E,
- 0xA2D0, 0x247F, 0xA2D1, 0x2480, 0xA2D2, 0x2481, 0xA2D3, 0x2482, 0xA2D4, 0x2483, 0xA2D5, 0x2484, 0xA2D6, 0x2485, 0xA2D7, 0x2486,
- 0xA2D8, 0x2487, 0xA2D9, 0x2460, 0xA2DA, 0x2461, 0xA2DB, 0x2462, 0xA2DC, 0x2463, 0xA2DD, 0x2464, 0xA2DE, 0x2465, 0xA2DF, 0x2466,
- 0xA2E0, 0x2467, 0xA2E1, 0x2468, 0xA2E2, 0x2469, 0xA2E5, 0x3220, 0xA2E6, 0x3221, 0xA2E7, 0x3222, 0xA2E8, 0x3223, 0xA2E9, 0x3224,
- 0xA2EA, 0x3225, 0xA2EB, 0x3226, 0xA2EC, 0x3227, 0xA2ED, 0x3228, 0xA2EE, 0x3229, 0xA2F1, 0x2160, 0xA2F2, 0x2161, 0xA2F3, 0x2162,
- 0xA2F4, 0x2163, 0xA2F5, 0x2164, 0xA2F6, 0x2165, 0xA2F7, 0x2166, 0xA2F8, 0x2167, 0xA2F9, 0x2168, 0xA2FA, 0x2169, 0xA2FB, 0x216A,
- 0xA2FC, 0x216B, 0xA3A1, 0xFF01, 0xA3A2, 0xFF02, 0xA3A3, 0xFF03, 0xA3A4, 0xFFE5, 0xA3A5, 0xFF05, 0xA3A6, 0xFF06, 0xA3A7, 0xFF07,
- 0xA3A8, 0xFF08, 0xA3A9, 0xFF09, 0xA3AA, 0xFF0A, 0xA3AB, 0xFF0B, 0xA3AC, 0xFF0C, 0xA3AD, 0xFF0D, 0xA3AE, 0xFF0E, 0xA3AF, 0xFF0F,
- 0xA3B0, 0xFF10, 0xA3B1, 0xFF11, 0xA3B2, 0xFF12, 0xA3B3, 0xFF13, 0xA3B4, 0xFF14, 0xA3B5, 0xFF15, 0xA3B6, 0xFF16, 0xA3B7, 0xFF17,
- 0xA3B8, 0xFF18, 0xA3B9, 0xFF19, 0xA3BA, 0xFF1A, 0xA3BB, 0xFF1B, 0xA3BC, 0xFF1C, 0xA3BD, 0xFF1D, 0xA3BE, 0xFF1E, 0xA3BF, 0xFF1F,
- 0xA3C0, 0xFF20, 0xA3C1, 0xFF21, 0xA3C2, 0xFF22, 0xA3C3, 0xFF23, 0xA3C4, 0xFF24, 0xA3C5, 0xFF25, 0xA3C6, 0xFF26, 0xA3C7, 0xFF27,
- 0xA3C8, 0xFF28, 0xA3C9, 0xFF29, 0xA3CA, 0xFF2A, 0xA3CB, 0xFF2B, 0xA3CC, 0xFF2C, 0xA3CD, 0xFF2D, 0xA3CE, 0xFF2E, 0xA3CF, 0xFF2F,
- 0xA3D0, 0xFF30, 0xA3D1, 0xFF31, 0xA3D2, 0xFF32, 0xA3D3, 0xFF33, 0xA3D4, 0xFF34, 0xA3D5, 0xFF35, 0xA3D6, 0xFF36, 0xA3D7, 0xFF37,
- 0xA3D8, 0xFF38, 0xA3D9, 0xFF39, 0xA3DA, 0xFF3A, 0xA3DB, 0xFF3B, 0xA3DC, 0xFF3C, 0xA3DD, 0xFF3D, 0xA3DE, 0xFF3E, 0xA3DF, 0xFF3F,
- 0xA3E0, 0xFF40, 0xA3E1, 0xFF41, 0xA3E2, 0xFF42, 0xA3E3, 0xFF43, 0xA3E4, 0xFF44, 0xA3E5, 0xFF45, 0xA3E6, 0xFF46, 0xA3E7, 0xFF47,
- 0xA3E8, 0xFF48, 0xA3E9, 0xFF49, 0xA3EA, 0xFF4A, 0xA3EB, 0xFF4B, 0xA3EC, 0xFF4C, 0xA3ED, 0xFF4D, 0xA3EE, 0xFF4E, 0xA3EF, 0xFF4F,
- 0xA3F0, 0xFF50, 0xA3F1, 0xFF51, 0xA3F2, 0xFF52, 0xA3F3, 0xFF53, 0xA3F4, 0xFF54, 0xA3F5, 0xFF55, 0xA3F6, 0xFF56, 0xA3F7, 0xFF57,
- 0xA3F8, 0xFF58, 0xA3F9, 0xFF59, 0xA3FA, 0xFF5A, 0xA3FB, 0xFF5B, 0xA3FC, 0xFF5C, 0xA3FD, 0xFF5D, 0xA3FE, 0xFFE3, 0xA4A1, 0x3041,
- 0xA4A2, 0x3042, 0xA4A3, 0x3043, 0xA4A4, 0x3044, 0xA4A5, 0x3045, 0xA4A6, 0x3046, 0xA4A7, 0x3047, 0xA4A8, 0x3048, 0xA4A9, 0x3049,
- 0xA4AA, 0x304A, 0xA4AB, 0x304B, 0xA4AC, 0x304C, 0xA4AD, 0x304D, 0xA4AE, 0x304E, 0xA4AF, 0x304F, 0xA4B0, 0x3050, 0xA4B1, 0x3051,
- 0xA4B2, 0x3052, 0xA4B3, 0x3053, 0xA4B4, 0x3054, 0xA4B5, 0x3055, 0xA4B6, 0x3056, 0xA4B7, 0x3057, 0xA4B8, 0x3058, 0xA4B9, 0x3059,
- 0xA4BA, 0x305A, 0xA4BB, 0x305B, 0xA4BC, 0x305C, 0xA4BD, 0x305D, 0xA4BE, 0x305E, 0xA4BF, 0x305F, 0xA4C0, 0x3060, 0xA4C1, 0x3061,
- 0xA4C2, 0x3062, 0xA4C3, 0x3063, 0xA4C4, 0x3064, 0xA4C5, 0x3065, 0xA4C6, 0x3066, 0xA4C7, 0x3067, 0xA4C8, 0x3068, 0xA4C9, 0x3069,
- 0xA4CA, 0x306A, 0xA4CB, 0x306B, 0xA4CC, 0x306C, 0xA4CD, 0x306D, 0xA4CE, 0x306E, 0xA4CF, 0x306F, 0xA4D0, 0x3070, 0xA4D1, 0x3071,
- 0xA4D2, 0x3072, 0xA4D3, 0x3073, 0xA4D4, 0x3074, 0xA4D5, 0x3075, 0xA4D6, 0x3076, 0xA4D7, 0x3077, 0xA4D8, 0x3078, 0xA4D9, 0x3079,
- 0xA4DA, 0x307A, 0xA4DB, 0x307B, 0xA4DC, 0x307C, 0xA4DD, 0x307D, 0xA4DE, 0x307E, 0xA4DF, 0x307F, 0xA4E0, 0x3080, 0xA4E1, 0x3081,
- 0xA4E2, 0x3082, 0xA4E3, 0x3083, 0xA4E4, 0x3084, 0xA4E5, 0x3085, 0xA4E6, 0x3086, 0xA4E7, 0x3087, 0xA4E8, 0x3088, 0xA4E9, 0x3089,
- 0xA4EA, 0x308A, 0xA4EB, 0x308B, 0xA4EC, 0x308C, 0xA4ED, 0x308D, 0xA4EE, 0x308E, 0xA4EF, 0x308F, 0xA4F0, 0x3090, 0xA4F1, 0x3091,
- 0xA4F2, 0x3092, 0xA4F3, 0x3093, 0xA5A1, 0x30A1, 0xA5A2, 0x30A2, 0xA5A3, 0x30A3, 0xA5A4, 0x30A4, 0xA5A5, 0x30A5, 0xA5A6, 0x30A6,
- 0xA5A7, 0x30A7, 0xA5A8, 0x30A8, 0xA5A9, 0x30A9, 0xA5AA, 0x30AA, 0xA5AB, 0x30AB, 0xA5AC, 0x30AC, 0xA5AD, 0x30AD, 0xA5AE, 0x30AE,
- 0xA5AF, 0x30AF, 0xA5B0, 0x30B0, 0xA5B1, 0x30B1, 0xA5B2, 0x30B2, 0xA5B3, 0x30B3, 0xA5B4, 0x30B4, 0xA5B5, 0x30B5, 0xA5B6, 0x30B6,
- 0xA5B7, 0x30B7, 0xA5B8, 0x30B8, 0xA5B9, 0x30B9, 0xA5BA, 0x30BA, 0xA5BB, 0x30BB, 0xA5BC, 0x30BC, 0xA5BD, 0x30BD, 0xA5BE, 0x30BE,
- 0xA5BF, 0x30BF, 0xA5C0, 0x30C0, 0xA5C1, 0x30C1, 0xA5C2, 0x30C2, 0xA5C3, 0x30C3, 0xA5C4, 0x30C4, 0xA5C5, 0x30C5, 0xA5C6, 0x30C6,
- 0xA5C7, 0x30C7, 0xA5C8, 0x30C8, 0xA5C9, 0x30C9, 0xA5CA, 0x30CA, 0xA5CB, 0x30CB, 0xA5CC, 0x30CC, 0xA5CD, 0x30CD, 0xA5CE, 0x30CE,
- 0xA5CF, 0x30CF, 0xA5D0, 0x30D0, 0xA5D1, 0x30D1, 0xA5D2, 0x30D2, 0xA5D3, 0x30D3, 0xA5D4, 0x30D4, 0xA5D5, 0x30D5, 0xA5D6, 0x30D6,
- 0xA5D7, 0x30D7, 0xA5D8, 0x30D8, 0xA5D9, 0x30D9, 0xA5DA, 0x30DA, 0xA5DB, 0x30DB, 0xA5DC, 0x30DC, 0xA5DD, 0x30DD, 0xA5DE, 0x30DE,
- 0xA5DF, 0x30DF, 0xA5E0, 0x30E0, 0xA5E1, 0x30E1, 0xA5E2, 0x30E2, 0xA5E3, 0x30E3, 0xA5E4, 0x30E4, 0xA5E5, 0x30E5, 0xA5E6, 0x30E6,
- 0xA5E7, 0x30E7, 0xA5E8, 0x30E8, 0xA5E9, 0x30E9, 0xA5EA, 0x30EA, 0xA5EB, 0x30EB, 0xA5EC, 0x30EC, 0xA5ED, 0x30ED, 0xA5EE, 0x30EE,
- 0xA5EF, 0x30EF, 0xA5F0, 0x30F0, 0xA5F1, 0x30F1, 0xA5F2, 0x30F2, 0xA5F3, 0x30F3, 0xA5F4, 0x30F4, 0xA5F5, 0x30F5, 0xA5F6, 0x30F6,
- 0xA6A1, 0x0391, 0xA6A2, 0x0392, 0xA6A3, 0x0393, 0xA6A4, 0x0394, 0xA6A5, 0x0395, 0xA6A6, 0x0396, 0xA6A7, 0x0397, 0xA6A8, 0x0398,
- 0xA6A9, 0x0399, 0xA6AA, 0x039A, 0xA6AB, 0x039B, 0xA6AC, 0x039C, 0xA6AD, 0x039D, 0xA6AE, 0x039E, 0xA6AF, 0x039F, 0xA6B0, 0x03A0,
- 0xA6B1, 0x03A1, 0xA6B2, 0x03A3, 0xA6B3, 0x03A4, 0xA6B4, 0x03A5, 0xA6B5, 0x03A6, 0xA6B6, 0x03A7, 0xA6B7, 0x03A8, 0xA6B8, 0x03A9,
- 0xA6C1, 0x03B1, 0xA6C2, 0x03B2, 0xA6C3, 0x03B3, 0xA6C4, 0x03B4, 0xA6C5, 0x03B5, 0xA6C6, 0x03B6, 0xA6C7, 0x03B7, 0xA6C8, 0x03B8,
- 0xA6C9, 0x03B9, 0xA6CA, 0x03BA, 0xA6CB, 0x03BB, 0xA6CC, 0x03BC, 0xA6CD, 0x03BD, 0xA6CE, 0x03BE, 0xA6CF, 0x03BF, 0xA6D0, 0x03C0,
- 0xA6D1, 0x03C1, 0xA6D2, 0x03C3, 0xA6D3, 0x03C4, 0xA6D4, 0x03C5, 0xA6D5, 0x03C6, 0xA6D6, 0x03C7, 0xA6D7, 0x03C8, 0xA6D8, 0x03C9,
- 0xA6E0, 0xFE35, 0xA6E1, 0xFE36, 0xA6E2, 0xFE39, 0xA6E3, 0xFE3A, 0xA6E4, 0xFE3F, 0xA6E5, 0xFE40, 0xA6E6, 0xFE3D, 0xA6E7, 0xFE3E,
- 0xA6E8, 0xFE41, 0xA6E9, 0xFE42, 0xA6EA, 0xFE43, 0xA6EB, 0xFE44, 0xA6EE, 0xFE3B, 0xA6EF, 0xFE3C, 0xA6F0, 0xFE37, 0xA6F1, 0xFE38,
- 0xA6F2, 0xFE31, 0xA6F4, 0xFE33, 0xA6F5, 0xFE34, 0xA7A1, 0x0410, 0xA7A2, 0x0411, 0xA7A3, 0x0412, 0xA7A4, 0x0413, 0xA7A5, 0x0414,
- 0xA7A6, 0x0415, 0xA7A7, 0x0401, 0xA7A8, 0x0416, 0xA7A9, 0x0417, 0xA7AA, 0x0418, 0xA7AB, 0x0419, 0xA7AC, 0x041A, 0xA7AD, 0x041B,
- 0xA7AE, 0x041C, 0xA7AF, 0x041D, 0xA7B0, 0x041E, 0xA7B1, 0x041F, 0xA7B2, 0x0420, 0xA7B3, 0x0421, 0xA7B4, 0x0422, 0xA7B5, 0x0423,
- 0xA7B6, 0x0424, 0xA7B7, 0x0425, 0xA7B8, 0x0426, 0xA7B9, 0x0427, 0xA7BA, 0x0428, 0xA7BB, 0x0429, 0xA7BC, 0x042A, 0xA7BD, 0x042B,
- 0xA7BE, 0x042C, 0xA7BF, 0x042D, 0xA7C0, 0x042E, 0xA7C1, 0x042F, 0xA7D1, 0x0430, 0xA7D2, 0x0431, 0xA7D3, 0x0432, 0xA7D4, 0x0433,
- 0xA7D5, 0x0434, 0xA7D6, 0x0435, 0xA7D7, 0x0451, 0xA7D8, 0x0436, 0xA7D9, 0x0437, 0xA7DA, 0x0438, 0xA7DB, 0x0439, 0xA7DC, 0x043A,
- 0xA7DD, 0x043B, 0xA7DE, 0x043C, 0xA7DF, 0x043D, 0xA7E0, 0x043E, 0xA7E1, 0x043F, 0xA7E2, 0x0440, 0xA7E3, 0x0441, 0xA7E4, 0x0442,
- 0xA7E5, 0x0443, 0xA7E6, 0x0444, 0xA7E7, 0x0445, 0xA7E8, 0x0446, 0xA7E9, 0x0447, 0xA7EA, 0x0448, 0xA7EB, 0x0449, 0xA7EC, 0x044A,
- 0xA7ED, 0x044B, 0xA7EE, 0x044C, 0xA7EF, 0x044D, 0xA7F0, 0x044E, 0xA7F1, 0x044F, 0xA840, 0x02CA, 0xA841, 0x02CB, 0xA842, 0x02D9,
- 0xA843, 0x2013, 0xA844, 0x2015, 0xA845, 0x2025, 0xA846, 0x2035, 0xA847, 0x2105, 0xA848, 0x2109, 0xA849, 0x2196, 0xA84A, 0x2197,
- 0xA84B, 0x2198, 0xA84C, 0x2199, 0xA84D, 0x2215, 0xA84E, 0x221F, 0xA84F, 0x2223, 0xA850, 0x2252, 0xA851, 0x2266, 0xA852, 0x2267,
- 0xA853, 0x22BF, 0xA854, 0x2550, 0xA855, 0x2551, 0xA856, 0x2552, 0xA857, 0x2553, 0xA858, 0x2554, 0xA859, 0x2555, 0xA85A, 0x2556,
- 0xA85B, 0x2557, 0xA85C, 0x2558, 0xA85D, 0x2559, 0xA85E, 0x255A, 0xA85F, 0x255B, 0xA860, 0x255C, 0xA861, 0x255D, 0xA862, 0x255E,
- 0xA863, 0x255F, 0xA864, 0x2560, 0xA865, 0x2561, 0xA866, 0x2562, 0xA867, 0x2563, 0xA868, 0x2564, 0xA869, 0x2565, 0xA86A, 0x2566,
- 0xA86B, 0x2567, 0xA86C, 0x2568, 0xA86D, 0x2569, 0xA86E, 0x256A, 0xA86F, 0x256B, 0xA870, 0x256C, 0xA871, 0x256D, 0xA872, 0x256E,
- 0xA873, 0x256F, 0xA874, 0x2570, 0xA875, 0x2571, 0xA876, 0x2572, 0xA877, 0x2573, 0xA878, 0x2581, 0xA879, 0x2582, 0xA87A, 0x2583,
- 0xA87B, 0x2584, 0xA87C, 0x2585, 0xA87D, 0x2586, 0xA87E, 0x2587, 0xA880, 0x2588, 0xA881, 0x2589, 0xA882, 0x258A, 0xA883, 0x258B,
- 0xA884, 0x258C, 0xA885, 0x258D, 0xA886, 0x258E, 0xA887, 0x258F, 0xA888, 0x2593, 0xA889, 0x2594, 0xA88A, 0x2595, 0xA88B, 0x25BC,
- 0xA88C, 0x25BD, 0xA88D, 0x25E2, 0xA88E, 0x25E3, 0xA88F, 0x25E4, 0xA890, 0x25E5, 0xA891, 0x2609, 0xA892, 0x2295, 0xA893, 0x3012,
- 0xA894, 0x301D, 0xA895, 0x301E, 0xA8A1, 0x0101, 0xA8A2, 0x00E1, 0xA8A3, 0x01CE, 0xA8A4, 0x00E0, 0xA8A5, 0x0113, 0xA8A6, 0x00E9,
- 0xA8A7, 0x011B, 0xA8A8, 0x00E8, 0xA8A9, 0x012B, 0xA8AA, 0x00ED, 0xA8AB, 0x01D0, 0xA8AC, 0x00EC, 0xA8AD, 0x014D, 0xA8AE, 0x00F3,
- 0xA8AF, 0x01D2, 0xA8B0, 0x00F2, 0xA8B1, 0x016B, 0xA8B2, 0x00FA, 0xA8B3, 0x01D4, 0xA8B4, 0x00F9, 0xA8B5, 0x01D6, 0xA8B6, 0x01D8,
- 0xA8B7, 0x01DA, 0xA8B8, 0x01DC, 0xA8B9, 0x00FC, 0xA8BA, 0x00EA, 0xA8BB, 0x0251, 0xA8BD, 0x0144, 0xA8BE, 0x0148, 0xA8C0, 0x0261,
- 0xA8C5, 0x3105, 0xA8C6, 0x3106, 0xA8C7, 0x3107, 0xA8C8, 0x3108, 0xA8C9, 0x3109, 0xA8CA, 0x310A, 0xA8CB, 0x310B, 0xA8CC, 0x310C,
- 0xA8CD, 0x310D, 0xA8CE, 0x310E, 0xA8CF, 0x310F, 0xA8D0, 0x3110, 0xA8D1, 0x3111, 0xA8D2, 0x3112, 0xA8D3, 0x3113, 0xA8D4, 0x3114,
- 0xA8D5, 0x3115, 0xA8D6, 0x3116, 0xA8D7, 0x3117, 0xA8D8, 0x3118, 0xA8D9, 0x3119, 0xA8DA, 0x311A, 0xA8DB, 0x311B, 0xA8DC, 0x311C,
- 0xA8DD, 0x311D, 0xA8DE, 0x311E, 0xA8DF, 0x311F, 0xA8E0, 0x3120, 0xA8E1, 0x3121, 0xA8E2, 0x3122, 0xA8E3, 0x3123, 0xA8E4, 0x3124,
- 0xA8E5, 0x3125, 0xA8E6, 0x3126, 0xA8E7, 0x3127, 0xA8E8, 0x3128, 0xA8E9, 0x3129, 0xA940, 0x3021, 0xA941, 0x3022, 0xA942, 0x3023,
- 0xA943, 0x3024, 0xA944, 0x3025, 0xA945, 0x3026, 0xA946, 0x3027, 0xA947, 0x3028, 0xA948, 0x3029, 0xA949, 0x32A3, 0xA94A, 0x338E,
- 0xA94B, 0x338F, 0xA94C, 0x339C, 0xA94D, 0x339D, 0xA94E, 0x339E, 0xA94F, 0x33A1, 0xA950, 0x33C4, 0xA951, 0x33CE, 0xA952, 0x33D1,
- 0xA953, 0x33D2, 0xA954, 0x33D5, 0xA955, 0xFE30, 0xA956, 0xFFE2, 0xA957, 0xFFE4, 0xA959, 0x2121, 0xA95A, 0x3231, 0xA95C, 0x2010,
- 0xA960, 0x30FC, 0xA961, 0x309B, 0xA962, 0x309C, 0xA963, 0x30FD, 0xA964, 0x30FE, 0xA965, 0x3006, 0xA966, 0x309D, 0xA967, 0x309E,
- 0xA968, 0xFE49, 0xA969, 0xFE4A, 0xA96A, 0xFE4B, 0xA96B, 0xFE4C, 0xA96C, 0xFE4D, 0xA96D, 0xFE4E, 0xA96E, 0xFE4F, 0xA96F, 0xFE50,
- 0xA970, 0xFE51, 0xA971, 0xFE52, 0xA972, 0xFE54, 0xA973, 0xFE55, 0xA974, 0xFE56, 0xA975, 0xFE57, 0xA976, 0xFE59, 0xA977, 0xFE5A,
- 0xA978, 0xFE5B, 0xA979, 0xFE5C, 0xA97A, 0xFE5D, 0xA97B, 0xFE5E, 0xA97C, 0xFE5F, 0xA97D, 0xFE60, 0xA97E, 0xFE61, 0xA980, 0xFE62,
- 0xA981, 0xFE63, 0xA982, 0xFE64, 0xA983, 0xFE65, 0xA984, 0xFE66, 0xA985, 0xFE68, 0xA986, 0xFE69, 0xA987, 0xFE6A, 0xA988, 0xFE6B,
- 0xA996, 0x3007, 0xA9A4, 0x2500, 0xA9A5, 0x2501, 0xA9A6, 0x2502, 0xA9A7, 0x2503, 0xA9A8, 0x2504, 0xA9A9, 0x2505, 0xA9AA, 0x2506,
- 0xA9AB, 0x2507, 0xA9AC, 0x2508, 0xA9AD, 0x2509, 0xA9AE, 0x250A, 0xA9AF, 0x250B, 0xA9B0, 0x250C, 0xA9B1, 0x250D, 0xA9B2, 0x250E,
- 0xA9B3, 0x250F, 0xA9B4, 0x2510, 0xA9B5, 0x2511, 0xA9B6, 0x2512, 0xA9B7, 0x2513, 0xA9B8, 0x2514, 0xA9B9, 0x2515, 0xA9BA, 0x2516,
- 0xA9BB, 0x2517, 0xA9BC, 0x2518, 0xA9BD, 0x2519, 0xA9BE, 0x251A, 0xA9BF, 0x251B, 0xA9C0, 0x251C, 0xA9C1, 0x251D, 0xA9C2, 0x251E,
- 0xA9C3, 0x251F, 0xA9C4, 0x2520, 0xA9C5, 0x2521, 0xA9C6, 0x2522, 0xA9C7, 0x2523, 0xA9C8, 0x2524, 0xA9C9, 0x2525, 0xA9CA, 0x2526,
- 0xA9CB, 0x2527, 0xA9CC, 0x2528, 0xA9CD, 0x2529, 0xA9CE, 0x252A, 0xA9CF, 0x252B, 0xA9D0, 0x252C, 0xA9D1, 0x252D, 0xA9D2, 0x252E,
- 0xA9D3, 0x252F, 0xA9D4, 0x2530, 0xA9D5, 0x2531, 0xA9D6, 0x2532, 0xA9D7, 0x2533, 0xA9D8, 0x2534, 0xA9D9, 0x2535, 0xA9DA, 0x2536,
- 0xA9DB, 0x2537, 0xA9DC, 0x2538, 0xA9DD, 0x2539, 0xA9DE, 0x253A, 0xA9DF, 0x253B, 0xA9E0, 0x253C, 0xA9E1, 0x253D, 0xA9E2, 0x253E,
- 0xA9E3, 0x253F, 0xA9E4, 0x2540, 0xA9E5, 0x2541, 0xA9E6, 0x2542, 0xA9E7, 0x2543, 0xA9E8, 0x2544, 0xA9E9, 0x2545, 0xA9EA, 0x2546,
- 0xA9EB, 0x2547, 0xA9EC, 0x2548, 0xA9ED, 0x2549, 0xA9EE, 0x254A, 0xA9EF, 0x254B, 0xAA40, 0x72DC, 0xAA41, 0x72DD, 0xAA42, 0x72DF,
- 0xAA43, 0x72E2, 0xAA44, 0x72E3, 0xAA45, 0x72E4, 0xAA46, 0x72E5, 0xAA47, 0x72E6, 0xAA48, 0x72E7, 0xAA49, 0x72EA, 0xAA4A, 0x72EB,
- 0xAA4B, 0x72F5, 0xAA4C, 0x72F6, 0xAA4D, 0x72F9, 0xAA4E, 0x72FD, 0xAA4F, 0x72FE, 0xAA50, 0x72FF, 0xAA51, 0x7300, 0xAA52, 0x7302,
- 0xAA53, 0x7304, 0xAA54, 0x7305, 0xAA55, 0x7306, 0xAA56, 0x7307, 0xAA57, 0x7308, 0xAA58, 0x7309, 0xAA59, 0x730B, 0xAA5A, 0x730C,
- 0xAA5B, 0x730D, 0xAA5C, 0x730F, 0xAA5D, 0x7310, 0xAA5E, 0x7311, 0xAA5F, 0x7312, 0xAA60, 0x7314, 0xAA61, 0x7318, 0xAA62, 0x7319,
- 0xAA63, 0x731A, 0xAA64, 0x731F, 0xAA65, 0x7320, 0xAA66, 0x7323, 0xAA67, 0x7324, 0xAA68, 0x7326, 0xAA69, 0x7327, 0xAA6A, 0x7328,
- 0xAA6B, 0x732D, 0xAA6C, 0x732F, 0xAA6D, 0x7330, 0xAA6E, 0x7332, 0xAA6F, 0x7333, 0xAA70, 0x7335, 0xAA71, 0x7336, 0xAA72, 0x733A,
- 0xAA73, 0x733B, 0xAA74, 0x733C, 0xAA75, 0x733D, 0xAA76, 0x7340, 0xAA77, 0x7341, 0xAA78, 0x7342, 0xAA79, 0x7343, 0xAA7A, 0x7344,
- 0xAA7B, 0x7345, 0xAA7C, 0x7346, 0xAA7D, 0x7347, 0xAA7E, 0x7348, 0xAA80, 0x7349, 0xAA81, 0x734A, 0xAA82, 0x734B, 0xAA83, 0x734C,
- 0xAA84, 0x734E, 0xAA85, 0x734F, 0xAA86, 0x7351, 0xAA87, 0x7353, 0xAA88, 0x7354, 0xAA89, 0x7355, 0xAA8A, 0x7356, 0xAA8B, 0x7358,
- 0xAA8C, 0x7359, 0xAA8D, 0x735A, 0xAA8E, 0x735B, 0xAA8F, 0x735C, 0xAA90, 0x735D, 0xAA91, 0x735E, 0xAA92, 0x735F, 0xAA93, 0x7361,
- 0xAA94, 0x7362, 0xAA95, 0x7363, 0xAA96, 0x7364, 0xAA97, 0x7365, 0xAA98, 0x7366, 0xAA99, 0x7367, 0xAA9A, 0x7368, 0xAA9B, 0x7369,
- 0xAA9C, 0x736A, 0xAA9D, 0x736B, 0xAA9E, 0x736E, 0xAA9F, 0x7370, 0xAAA0, 0x7371, 0xAB40, 0x7372, 0xAB41, 0x7373, 0xAB42, 0x7374,
- 0xAB43, 0x7375, 0xAB44, 0x7376, 0xAB45, 0x7377, 0xAB46, 0x7378, 0xAB47, 0x7379, 0xAB48, 0x737A, 0xAB49, 0x737B, 0xAB4A, 0x737C,
- 0xAB4B, 0x737D, 0xAB4C, 0x737F, 0xAB4D, 0x7380, 0xAB4E, 0x7381, 0xAB4F, 0x7382, 0xAB50, 0x7383, 0xAB51, 0x7385, 0xAB52, 0x7386,
- 0xAB53, 0x7388, 0xAB54, 0x738A, 0xAB55, 0x738C, 0xAB56, 0x738D, 0xAB57, 0x738F, 0xAB58, 0x7390, 0xAB59, 0x7392, 0xAB5A, 0x7393,
- 0xAB5B, 0x7394, 0xAB5C, 0x7395, 0xAB5D, 0x7397, 0xAB5E, 0x7398, 0xAB5F, 0x7399, 0xAB60, 0x739A, 0xAB61, 0x739C, 0xAB62, 0x739D,
- 0xAB63, 0x739E, 0xAB64, 0x73A0, 0xAB65, 0x73A1, 0xAB66, 0x73A3, 0xAB67, 0x73A4, 0xAB68, 0x73A5, 0xAB69, 0x73A6, 0xAB6A, 0x73A7,
- 0xAB6B, 0x73A8, 0xAB6C, 0x73AA, 0xAB6D, 0x73AC, 0xAB6E, 0x73AD, 0xAB6F, 0x73B1, 0xAB70, 0x73B4, 0xAB71, 0x73B5, 0xAB72, 0x73B6,
- 0xAB73, 0x73B8, 0xAB74, 0x73B9, 0xAB75, 0x73BC, 0xAB76, 0x73BD, 0xAB77, 0x73BE, 0xAB78, 0x73BF, 0xAB79, 0x73C1, 0xAB7A, 0x73C3,
- 0xAB7B, 0x73C4, 0xAB7C, 0x73C5, 0xAB7D, 0x73C6, 0xAB7E, 0x73C7, 0xAB80, 0x73CB, 0xAB81, 0x73CC, 0xAB82, 0x73CE, 0xAB83, 0x73D2,
- 0xAB84, 0x73D3, 0xAB85, 0x73D4, 0xAB86, 0x73D5, 0xAB87, 0x73D6, 0xAB88, 0x73D7, 0xAB89, 0x73D8, 0xAB8A, 0x73DA, 0xAB8B, 0x73DB,
- 0xAB8C, 0x73DC, 0xAB8D, 0x73DD, 0xAB8E, 0x73DF, 0xAB8F, 0x73E1, 0xAB90, 0x73E2, 0xAB91, 0x73E3, 0xAB92, 0x73E4, 0xAB93, 0x73E6,
- 0xAB94, 0x73E8, 0xAB95, 0x73EA, 0xAB96, 0x73EB, 0xAB97, 0x73EC, 0xAB98, 0x73EE, 0xAB99, 0x73EF, 0xAB9A, 0x73F0, 0xAB9B, 0x73F1,
- 0xAB9C, 0x73F3, 0xAB9D, 0x73F4, 0xAB9E, 0x73F5, 0xAB9F, 0x73F6, 0xABA0, 0x73F7, 0xAC40, 0x73F8, 0xAC41, 0x73F9, 0xAC42, 0x73FA,
- 0xAC43, 0x73FB, 0xAC44, 0x73FC, 0xAC45, 0x73FD, 0xAC46, 0x73FE, 0xAC47, 0x73FF, 0xAC48, 0x7400, 0xAC49, 0x7401, 0xAC4A, 0x7402,
- 0xAC4B, 0x7404, 0xAC4C, 0x7407, 0xAC4D, 0x7408, 0xAC4E, 0x740B, 0xAC4F, 0x740C, 0xAC50, 0x740D, 0xAC51, 0x740E, 0xAC52, 0x7411,
- 0xAC53, 0x7412, 0xAC54, 0x7413, 0xAC55, 0x7414, 0xAC56, 0x7415, 0xAC57, 0x7416, 0xAC58, 0x7417, 0xAC59, 0x7418, 0xAC5A, 0x7419,
- 0xAC5B, 0x741C, 0xAC5C, 0x741D, 0xAC5D, 0x741E, 0xAC5E, 0x741F, 0xAC5F, 0x7420, 0xAC60, 0x7421, 0xAC61, 0x7423, 0xAC62, 0x7424,
- 0xAC63, 0x7427, 0xAC64, 0x7429, 0xAC65, 0x742B, 0xAC66, 0x742D, 0xAC67, 0x742F, 0xAC68, 0x7431, 0xAC69, 0x7432, 0xAC6A, 0x7437,
- 0xAC6B, 0x7438, 0xAC6C, 0x7439, 0xAC6D, 0x743A, 0xAC6E, 0x743B, 0xAC6F, 0x743D, 0xAC70, 0x743E, 0xAC71, 0x743F, 0xAC72, 0x7440,
- 0xAC73, 0x7442, 0xAC74, 0x7443, 0xAC75, 0x7444, 0xAC76, 0x7445, 0xAC77, 0x7446, 0xAC78, 0x7447, 0xAC79, 0x7448, 0xAC7A, 0x7449,
- 0xAC7B, 0x744A, 0xAC7C, 0x744B, 0xAC7D, 0x744C, 0xAC7E, 0x744D, 0xAC80, 0x744E, 0xAC81, 0x744F, 0xAC82, 0x7450, 0xAC83, 0x7451,
- 0xAC84, 0x7452, 0xAC85, 0x7453, 0xAC86, 0x7454, 0xAC87, 0x7456, 0xAC88, 0x7458, 0xAC89, 0x745D, 0xAC8A, 0x7460, 0xAC8B, 0x7461,
- 0xAC8C, 0x7462, 0xAC8D, 0x7463, 0xAC8E, 0x7464, 0xAC8F, 0x7465, 0xAC90, 0x7466, 0xAC91, 0x7467, 0xAC92, 0x7468, 0xAC93, 0x7469,
- 0xAC94, 0x746A, 0xAC95, 0x746B, 0xAC96, 0x746C, 0xAC97, 0x746E, 0xAC98, 0x746F, 0xAC99, 0x7471, 0xAC9A, 0x7472, 0xAC9B, 0x7473,
- 0xAC9C, 0x7474, 0xAC9D, 0x7475, 0xAC9E, 0x7478, 0xAC9F, 0x7479, 0xACA0, 0x747A, 0xAD40, 0x747B, 0xAD41, 0x747C, 0xAD42, 0x747D,
- 0xAD43, 0x747F, 0xAD44, 0x7482, 0xAD45, 0x7484, 0xAD46, 0x7485, 0xAD47, 0x7486, 0xAD48, 0x7488, 0xAD49, 0x7489, 0xAD4A, 0x748A,
- 0xAD4B, 0x748C, 0xAD4C, 0x748D, 0xAD4D, 0x748F, 0xAD4E, 0x7491, 0xAD4F, 0x7492, 0xAD50, 0x7493, 0xAD51, 0x7494, 0xAD52, 0x7495,
- 0xAD53, 0x7496, 0xAD54, 0x7497, 0xAD55, 0x7498, 0xAD56, 0x7499, 0xAD57, 0x749A, 0xAD58, 0x749B, 0xAD59, 0x749D, 0xAD5A, 0x749F,
- 0xAD5B, 0x74A0, 0xAD5C, 0x74A1, 0xAD5D, 0x74A2, 0xAD5E, 0x74A3, 0xAD5F, 0x74A4, 0xAD60, 0x74A5, 0xAD61, 0x74A6, 0xAD62, 0x74AA,
- 0xAD63, 0x74AB, 0xAD64, 0x74AC, 0xAD65, 0x74AD, 0xAD66, 0x74AE, 0xAD67, 0x74AF, 0xAD68, 0x74B0, 0xAD69, 0x74B1, 0xAD6A, 0x74B2,
- 0xAD6B, 0x74B3, 0xAD6C, 0x74B4, 0xAD6D, 0x74B5, 0xAD6E, 0x74B6, 0xAD6F, 0x74B7, 0xAD70, 0x74B8, 0xAD71, 0x74B9, 0xAD72, 0x74BB,
- 0xAD73, 0x74BC, 0xAD74, 0x74BD, 0xAD75, 0x74BE, 0xAD76, 0x74BF, 0xAD77, 0x74C0, 0xAD78, 0x74C1, 0xAD79, 0x74C2, 0xAD7A, 0x74C3,
- 0xAD7B, 0x74C4, 0xAD7C, 0x74C5, 0xAD7D, 0x74C6, 0xAD7E, 0x74C7, 0xAD80, 0x74C8, 0xAD81, 0x74C9, 0xAD82, 0x74CA, 0xAD83, 0x74CB,
- 0xAD84, 0x74CC, 0xAD85, 0x74CD, 0xAD86, 0x74CE, 0xAD87, 0x74CF, 0xAD88, 0x74D0, 0xAD89, 0x74D1, 0xAD8A, 0x74D3, 0xAD8B, 0x74D4,
- 0xAD8C, 0x74D5, 0xAD8D, 0x74D6, 0xAD8E, 0x74D7, 0xAD8F, 0x74D8, 0xAD90, 0x74D9, 0xAD91, 0x74DA, 0xAD92, 0x74DB, 0xAD93, 0x74DD,
- 0xAD94, 0x74DF, 0xAD95, 0x74E1, 0xAD96, 0x74E5, 0xAD97, 0x74E7, 0xAD98, 0x74E8, 0xAD99, 0x74E9, 0xAD9A, 0x74EA, 0xAD9B, 0x74EB,
- 0xAD9C, 0x74EC, 0xAD9D, 0x74ED, 0xAD9E, 0x74F0, 0xAD9F, 0x74F1, 0xADA0, 0x74F2, 0xAE40, 0x74F3, 0xAE41, 0x74F5, 0xAE42, 0x74F8,
- 0xAE43, 0x74F9, 0xAE44, 0x74FA, 0xAE45, 0x74FB, 0xAE46, 0x74FC, 0xAE47, 0x74FD, 0xAE48, 0x74FE, 0xAE49, 0x7500, 0xAE4A, 0x7501,
- 0xAE4B, 0x7502, 0xAE4C, 0x7503, 0xAE4D, 0x7505, 0xAE4E, 0x7506, 0xAE4F, 0x7507, 0xAE50, 0x7508, 0xAE51, 0x7509, 0xAE52, 0x750A,
- 0xAE53, 0x750B, 0xAE54, 0x750C, 0xAE55, 0x750E, 0xAE56, 0x7510, 0xAE57, 0x7512, 0xAE58, 0x7514, 0xAE59, 0x7515, 0xAE5A, 0x7516,
- 0xAE5B, 0x7517, 0xAE5C, 0x751B, 0xAE5D, 0x751D, 0xAE5E, 0x751E, 0xAE5F, 0x7520, 0xAE60, 0x7521, 0xAE61, 0x7522, 0xAE62, 0x7523,
- 0xAE63, 0x7524, 0xAE64, 0x7526, 0xAE65, 0x7527, 0xAE66, 0x752A, 0xAE67, 0x752E, 0xAE68, 0x7534, 0xAE69, 0x7536, 0xAE6A, 0x7539,
- 0xAE6B, 0x753C, 0xAE6C, 0x753D, 0xAE6D, 0x753F, 0xAE6E, 0x7541, 0xAE6F, 0x7542, 0xAE70, 0x7543, 0xAE71, 0x7544, 0xAE72, 0x7546,
- 0xAE73, 0x7547, 0xAE74, 0x7549, 0xAE75, 0x754A, 0xAE76, 0x754D, 0xAE77, 0x7550, 0xAE78, 0x7551, 0xAE79, 0x7552, 0xAE7A, 0x7553,
- 0xAE7B, 0x7555, 0xAE7C, 0x7556, 0xAE7D, 0x7557, 0xAE7E, 0x7558, 0xAE80, 0x755D, 0xAE81, 0x755E, 0xAE82, 0x755F, 0xAE83, 0x7560,
- 0xAE84, 0x7561, 0xAE85, 0x7562, 0xAE86, 0x7563, 0xAE87, 0x7564, 0xAE88, 0x7567, 0xAE89, 0x7568, 0xAE8A, 0x7569, 0xAE8B, 0x756B,
- 0xAE8C, 0x756C, 0xAE8D, 0x756D, 0xAE8E, 0x756E, 0xAE8F, 0x756F, 0xAE90, 0x7570, 0xAE91, 0x7571, 0xAE92, 0x7573, 0xAE93, 0x7575,
- 0xAE94, 0x7576, 0xAE95, 0x7577, 0xAE96, 0x757A, 0xAE97, 0x757B, 0xAE98, 0x757C, 0xAE99, 0x757D, 0xAE9A, 0x757E, 0xAE9B, 0x7580,
- 0xAE9C, 0x7581, 0xAE9D, 0x7582, 0xAE9E, 0x7584, 0xAE9F, 0x7585, 0xAEA0, 0x7587, 0xAF40, 0x7588, 0xAF41, 0x7589, 0xAF42, 0x758A,
- 0xAF43, 0x758C, 0xAF44, 0x758D, 0xAF45, 0x758E, 0xAF46, 0x7590, 0xAF47, 0x7593, 0xAF48, 0x7595, 0xAF49, 0x7598, 0xAF4A, 0x759B,
- 0xAF4B, 0x759C, 0xAF4C, 0x759E, 0xAF4D, 0x75A2, 0xAF4E, 0x75A6, 0xAF4F, 0x75A7, 0xAF50, 0x75A8, 0xAF51, 0x75A9, 0xAF52, 0x75AA,
- 0xAF53, 0x75AD, 0xAF54, 0x75B6, 0xAF55, 0x75B7, 0xAF56, 0x75BA, 0xAF57, 0x75BB, 0xAF58, 0x75BF, 0xAF59, 0x75C0, 0xAF5A, 0x75C1,
- 0xAF5B, 0x75C6, 0xAF5C, 0x75CB, 0xAF5D, 0x75CC, 0xAF5E, 0x75CE, 0xAF5F, 0x75CF, 0xAF60, 0x75D0, 0xAF61, 0x75D1, 0xAF62, 0x75D3,
- 0xAF63, 0x75D7, 0xAF64, 0x75D9, 0xAF65, 0x75DA, 0xAF66, 0x75DC, 0xAF67, 0x75DD, 0xAF68, 0x75DF, 0xAF69, 0x75E0, 0xAF6A, 0x75E1,
- 0xAF6B, 0x75E5, 0xAF6C, 0x75E9, 0xAF6D, 0x75EC, 0xAF6E, 0x75ED, 0xAF6F, 0x75EE, 0xAF70, 0x75EF, 0xAF71, 0x75F2, 0xAF72, 0x75F3,
- 0xAF73, 0x75F5, 0xAF74, 0x75F6, 0xAF75, 0x75F7, 0xAF76, 0x75F8, 0xAF77, 0x75FA, 0xAF78, 0x75FB, 0xAF79, 0x75FD, 0xAF7A, 0x75FE,
- 0xAF7B, 0x7602, 0xAF7C, 0x7604, 0xAF7D, 0x7606, 0xAF7E, 0x7607, 0xAF80, 0x7608, 0xAF81, 0x7609, 0xAF82, 0x760B, 0xAF83, 0x760D,
- 0xAF84, 0x760E, 0xAF85, 0x760F, 0xAF86, 0x7611, 0xAF87, 0x7612, 0xAF88, 0x7613, 0xAF89, 0x7614, 0xAF8A, 0x7616, 0xAF8B, 0x761A,
- 0xAF8C, 0x761C, 0xAF8D, 0x761D, 0xAF8E, 0x761E, 0xAF8F, 0x7621, 0xAF90, 0x7623, 0xAF91, 0x7627, 0xAF92, 0x7628, 0xAF93, 0x762C,
- 0xAF94, 0x762E, 0xAF95, 0x762F, 0xAF96, 0x7631, 0xAF97, 0x7632, 0xAF98, 0x7636, 0xAF99, 0x7637, 0xAF9A, 0x7639, 0xAF9B, 0x763A,
- 0xAF9C, 0x763B, 0xAF9D, 0x763D, 0xAF9E, 0x7641, 0xAF9F, 0x7642, 0xAFA0, 0x7644, 0xB040, 0x7645, 0xB041, 0x7646, 0xB042, 0x7647,
- 0xB043, 0x7648, 0xB044, 0x7649, 0xB045, 0x764A, 0xB046, 0x764B, 0xB047, 0x764E, 0xB048, 0x764F, 0xB049, 0x7650, 0xB04A, 0x7651,
- 0xB04B, 0x7652, 0xB04C, 0x7653, 0xB04D, 0x7655, 0xB04E, 0x7657, 0xB04F, 0x7658, 0xB050, 0x7659, 0xB051, 0x765A, 0xB052, 0x765B,
- 0xB053, 0x765D, 0xB054, 0x765F, 0xB055, 0x7660, 0xB056, 0x7661, 0xB057, 0x7662, 0xB058, 0x7664, 0xB059, 0x7665, 0xB05A, 0x7666,
- 0xB05B, 0x7667, 0xB05C, 0x7668, 0xB05D, 0x7669, 0xB05E, 0x766A, 0xB05F, 0x766C, 0xB060, 0x766D, 0xB061, 0x766E, 0xB062, 0x7670,
- 0xB063, 0x7671, 0xB064, 0x7672, 0xB065, 0x7673, 0xB066, 0x7674, 0xB067, 0x7675, 0xB068, 0x7676, 0xB069, 0x7677, 0xB06A, 0x7679,
- 0xB06B, 0x767A, 0xB06C, 0x767C, 0xB06D, 0x767F, 0xB06E, 0x7680, 0xB06F, 0x7681, 0xB070, 0x7683, 0xB071, 0x7685, 0xB072, 0x7689,
- 0xB073, 0x768A, 0xB074, 0x768C, 0xB075, 0x768D, 0xB076, 0x768F, 0xB077, 0x7690, 0xB078, 0x7692, 0xB079, 0x7694, 0xB07A, 0x7695,
- 0xB07B, 0x7697, 0xB07C, 0x7698, 0xB07D, 0x769A, 0xB07E, 0x769B, 0xB080, 0x769C, 0xB081, 0x769D, 0xB082, 0x769E, 0xB083, 0x769F,
- 0xB084, 0x76A0, 0xB085, 0x76A1, 0xB086, 0x76A2, 0xB087, 0x76A3, 0xB088, 0x76A5, 0xB089, 0x76A6, 0xB08A, 0x76A7, 0xB08B, 0x76A8,
- 0xB08C, 0x76A9, 0xB08D, 0x76AA, 0xB08E, 0x76AB, 0xB08F, 0x76AC, 0xB090, 0x76AD, 0xB091, 0x76AF, 0xB092, 0x76B0, 0xB093, 0x76B3,
- 0xB094, 0x76B5, 0xB095, 0x76B6, 0xB096, 0x76B7, 0xB097, 0x76B8, 0xB098, 0x76B9, 0xB099, 0x76BA, 0xB09A, 0x76BB, 0xB09B, 0x76BC,
- 0xB09C, 0x76BD, 0xB09D, 0x76BE, 0xB09E, 0x76C0, 0xB09F, 0x76C1, 0xB0A0, 0x76C3, 0xB0A1, 0x554A, 0xB0A2, 0x963F, 0xB0A3, 0x57C3,
- 0xB0A4, 0x6328, 0xB0A5, 0x54CE, 0xB0A6, 0x5509, 0xB0A7, 0x54C0, 0xB0A8, 0x7691, 0xB0A9, 0x764C, 0xB0AA, 0x853C, 0xB0AB, 0x77EE,
- 0xB0AC, 0x827E, 0xB0AD, 0x788D, 0xB0AE, 0x7231, 0xB0AF, 0x9698, 0xB0B0, 0x978D, 0xB0B1, 0x6C28, 0xB0B2, 0x5B89, 0xB0B3, 0x4FFA,
- 0xB0B4, 0x6309, 0xB0B5, 0x6697, 0xB0B6, 0x5CB8, 0xB0B7, 0x80FA, 0xB0B8, 0x6848, 0xB0B9, 0x80AE, 0xB0BA, 0x6602, 0xB0BB, 0x76CE,
- 0xB0BC, 0x51F9, 0xB0BD, 0x6556, 0xB0BE, 0x71AC, 0xB0BF, 0x7FF1, 0xB0C0, 0x8884, 0xB0C1, 0x50B2, 0xB0C2, 0x5965, 0xB0C3, 0x61CA,
- 0xB0C4, 0x6FB3, 0xB0C5, 0x82AD, 0xB0C6, 0x634C, 0xB0C7, 0x6252, 0xB0C8, 0x53ED, 0xB0C9, 0x5427, 0xB0CA, 0x7B06, 0xB0CB, 0x516B,
- 0xB0CC, 0x75A4, 0xB0CD, 0x5DF4, 0xB0CE, 0x62D4, 0xB0CF, 0x8DCB, 0xB0D0, 0x9776, 0xB0D1, 0x628A, 0xB0D2, 0x8019, 0xB0D3, 0x575D,
- 0xB0D4, 0x9738, 0xB0D5, 0x7F62, 0xB0D6, 0x7238, 0xB0D7, 0x767D, 0xB0D8, 0x67CF, 0xB0D9, 0x767E, 0xB0DA, 0x6446, 0xB0DB, 0x4F70,
- 0xB0DC, 0x8D25, 0xB0DD, 0x62DC, 0xB0DE, 0x7A17, 0xB0DF, 0x6591, 0xB0E0, 0x73ED, 0xB0E1, 0x642C, 0xB0E2, 0x6273, 0xB0E3, 0x822C,
- 0xB0E4, 0x9881, 0xB0E5, 0x677F, 0xB0E6, 0x7248, 0xB0E7, 0x626E, 0xB0E8, 0x62CC, 0xB0E9, 0x4F34, 0xB0EA, 0x74E3, 0xB0EB, 0x534A,
- 0xB0EC, 0x529E, 0xB0ED, 0x7ECA, 0xB0EE, 0x90A6, 0xB0EF, 0x5E2E, 0xB0F0, 0x6886, 0xB0F1, 0x699C, 0xB0F2, 0x8180, 0xB0F3, 0x7ED1,
- 0xB0F4, 0x68D2, 0xB0F5, 0x78C5, 0xB0F6, 0x868C, 0xB0F7, 0x9551, 0xB0F8, 0x508D, 0xB0F9, 0x8C24, 0xB0FA, 0x82DE, 0xB0FB, 0x80DE,
- 0xB0FC, 0x5305, 0xB0FD, 0x8912, 0xB0FE, 0x5265, 0xB140, 0x76C4, 0xB141, 0x76C7, 0xB142, 0x76C9, 0xB143, 0x76CB, 0xB144, 0x76CC,
- 0xB145, 0x76D3, 0xB146, 0x76D5, 0xB147, 0x76D9, 0xB148, 0x76DA, 0xB149, 0x76DC, 0xB14A, 0x76DD, 0xB14B, 0x76DE, 0xB14C, 0x76E0,
- 0xB14D, 0x76E1, 0xB14E, 0x76E2, 0xB14F, 0x76E3, 0xB150, 0x76E4, 0xB151, 0x76E6, 0xB152, 0x76E7, 0xB153, 0x76E8, 0xB154, 0x76E9,
- 0xB155, 0x76EA, 0xB156, 0x76EB, 0xB157, 0x76EC, 0xB158, 0x76ED, 0xB159, 0x76F0, 0xB15A, 0x76F3, 0xB15B, 0x76F5, 0xB15C, 0x76F6,
- 0xB15D, 0x76F7, 0xB15E, 0x76FA, 0xB15F, 0x76FB, 0xB160, 0x76FD, 0xB161, 0x76FF, 0xB162, 0x7700, 0xB163, 0x7702, 0xB164, 0x7703,
- 0xB165, 0x7705, 0xB166, 0x7706, 0xB167, 0x770A, 0xB168, 0x770C, 0xB169, 0x770E, 0xB16A, 0x770F, 0xB16B, 0x7710, 0xB16C, 0x7711,
- 0xB16D, 0x7712, 0xB16E, 0x7713, 0xB16F, 0x7714, 0xB170, 0x7715, 0xB171, 0x7716, 0xB172, 0x7717, 0xB173, 0x7718, 0xB174, 0x771B,
- 0xB175, 0x771C, 0xB176, 0x771D, 0xB177, 0x771E, 0xB178, 0x7721, 0xB179, 0x7723, 0xB17A, 0x7724, 0xB17B, 0x7725, 0xB17C, 0x7727,
- 0xB17D, 0x772A, 0xB17E, 0x772B, 0xB180, 0x772C, 0xB181, 0x772E, 0xB182, 0x7730, 0xB183, 0x7731, 0xB184, 0x7732, 0xB185, 0x7733,
- 0xB186, 0x7734, 0xB187, 0x7739, 0xB188, 0x773B, 0xB189, 0x773D, 0xB18A, 0x773E, 0xB18B, 0x773F, 0xB18C, 0x7742, 0xB18D, 0x7744,
- 0xB18E, 0x7745, 0xB18F, 0x7746, 0xB190, 0x7748, 0xB191, 0x7749, 0xB192, 0x774A, 0xB193, 0x774B, 0xB194, 0x774C, 0xB195, 0x774D,
- 0xB196, 0x774E, 0xB197, 0x774F, 0xB198, 0x7752, 0xB199, 0x7753, 0xB19A, 0x7754, 0xB19B, 0x7755, 0xB19C, 0x7756, 0xB19D, 0x7757,
- 0xB19E, 0x7758, 0xB19F, 0x7759, 0xB1A0, 0x775C, 0xB1A1, 0x8584, 0xB1A2, 0x96F9, 0xB1A3, 0x4FDD, 0xB1A4, 0x5821, 0xB1A5, 0x9971,
- 0xB1A6, 0x5B9D, 0xB1A7, 0x62B1, 0xB1A8, 0x62A5, 0xB1A9, 0x66B4, 0xB1AA, 0x8C79, 0xB1AB, 0x9C8D, 0xB1AC, 0x7206, 0xB1AD, 0x676F,
- 0xB1AE, 0x7891, 0xB1AF, 0x60B2, 0xB1B0, 0x5351, 0xB1B1, 0x5317, 0xB1B2, 0x8F88, 0xB1B3, 0x80CC, 0xB1B4, 0x8D1D, 0xB1B5, 0x94A1,
- 0xB1B6, 0x500D, 0xB1B7, 0x72C8, 0xB1B8, 0x5907, 0xB1B9, 0x60EB, 0xB1BA, 0x7119, 0xB1BB, 0x88AB, 0xB1BC, 0x5954, 0xB1BD, 0x82EF,
- 0xB1BE, 0x672C, 0xB1BF, 0x7B28, 0xB1C0, 0x5D29, 0xB1C1, 0x7EF7, 0xB1C2, 0x752D, 0xB1C3, 0x6CF5, 0xB1C4, 0x8E66, 0xB1C5, 0x8FF8,
- 0xB1C6, 0x903C, 0xB1C7, 0x9F3B, 0xB1C8, 0x6BD4, 0xB1C9, 0x9119, 0xB1CA, 0x7B14, 0xB1CB, 0x5F7C, 0xB1CC, 0x78A7, 0xB1CD, 0x84D6,
- 0xB1CE, 0x853D, 0xB1CF, 0x6BD5, 0xB1D0, 0x6BD9, 0xB1D1, 0x6BD6, 0xB1D2, 0x5E01, 0xB1D3, 0x5E87, 0xB1D4, 0x75F9, 0xB1D5, 0x95ED,
- 0xB1D6, 0x655D, 0xB1D7, 0x5F0A, 0xB1D8, 0x5FC5, 0xB1D9, 0x8F9F, 0xB1DA, 0x58C1, 0xB1DB, 0x81C2, 0xB1DC, 0x907F, 0xB1DD, 0x965B,
- 0xB1DE, 0x97AD, 0xB1DF, 0x8FB9, 0xB1E0, 0x7F16, 0xB1E1, 0x8D2C, 0xB1E2, 0x6241, 0xB1E3, 0x4FBF, 0xB1E4, 0x53D8, 0xB1E5, 0x535E,
- 0xB1E6, 0x8FA8, 0xB1E7, 0x8FA9, 0xB1E8, 0x8FAB, 0xB1E9, 0x904D, 0xB1EA, 0x6807, 0xB1EB, 0x5F6A, 0xB1EC, 0x8198, 0xB1ED, 0x8868,
- 0xB1EE, 0x9CD6, 0xB1EF, 0x618B, 0xB1F0, 0x522B, 0xB1F1, 0x762A, 0xB1F2, 0x5F6C, 0xB1F3, 0x658C, 0xB1F4, 0x6FD2, 0xB1F5, 0x6EE8,
- 0xB1F6, 0x5BBE, 0xB1F7, 0x6448, 0xB1F8, 0x5175, 0xB1F9, 0x51B0, 0xB1FA, 0x67C4, 0xB1FB, 0x4E19, 0xB1FC, 0x79C9, 0xB1FD, 0x997C,
- 0xB1FE, 0x70B3, 0xB240, 0x775D, 0xB241, 0x775E, 0xB242, 0x775F, 0xB243, 0x7760, 0xB244, 0x7764, 0xB245, 0x7767, 0xB246, 0x7769,
- 0xB247, 0x776A, 0xB248, 0x776D, 0xB249, 0x776E, 0xB24A, 0x776F, 0xB24B, 0x7770, 0xB24C, 0x7771, 0xB24D, 0x7772, 0xB24E, 0x7773,
- 0xB24F, 0x7774, 0xB250, 0x7775, 0xB251, 0x7776, 0xB252, 0x7777, 0xB253, 0x7778, 0xB254, 0x777A, 0xB255, 0x777B, 0xB256, 0x777C,
- 0xB257, 0x7781, 0xB258, 0x7782, 0xB259, 0x7783, 0xB25A, 0x7786, 0xB25B, 0x7787, 0xB25C, 0x7788, 0xB25D, 0x7789, 0xB25E, 0x778A,
- 0xB25F, 0x778B, 0xB260, 0x778F, 0xB261, 0x7790, 0xB262, 0x7793, 0xB263, 0x7794, 0xB264, 0x7795, 0xB265, 0x7796, 0xB266, 0x7797,
- 0xB267, 0x7798, 0xB268, 0x7799, 0xB269, 0x779A, 0xB26A, 0x779B, 0xB26B, 0x779C, 0xB26C, 0x779D, 0xB26D, 0x779E, 0xB26E, 0x77A1,
- 0xB26F, 0x77A3, 0xB270, 0x77A4, 0xB271, 0x77A6, 0xB272, 0x77A8, 0xB273, 0x77AB, 0xB274, 0x77AD, 0xB275, 0x77AE, 0xB276, 0x77AF,
- 0xB277, 0x77B1, 0xB278, 0x77B2, 0xB279, 0x77B4, 0xB27A, 0x77B6, 0xB27B, 0x77B7, 0xB27C, 0x77B8, 0xB27D, 0x77B9, 0xB27E, 0x77BA,
- 0xB280, 0x77BC, 0xB281, 0x77BE, 0xB282, 0x77C0, 0xB283, 0x77C1, 0xB284, 0x77C2, 0xB285, 0x77C3, 0xB286, 0x77C4, 0xB287, 0x77C5,
- 0xB288, 0x77C6, 0xB289, 0x77C7, 0xB28A, 0x77C8, 0xB28B, 0x77C9, 0xB28C, 0x77CA, 0xB28D, 0x77CB, 0xB28E, 0x77CC, 0xB28F, 0x77CE,
- 0xB290, 0x77CF, 0xB291, 0x77D0, 0xB292, 0x77D1, 0xB293, 0x77D2, 0xB294, 0x77D3, 0xB295, 0x77D4, 0xB296, 0x77D5, 0xB297, 0x77D6,
- 0xB298, 0x77D8, 0xB299, 0x77D9, 0xB29A, 0x77DA, 0xB29B, 0x77DD, 0xB29C, 0x77DE, 0xB29D, 0x77DF, 0xB29E, 0x77E0, 0xB29F, 0x77E1,
- 0xB2A0, 0x77E4, 0xB2A1, 0x75C5, 0xB2A2, 0x5E76, 0xB2A3, 0x73BB, 0xB2A4, 0x83E0, 0xB2A5, 0x64AD, 0xB2A6, 0x62E8, 0xB2A7, 0x94B5,
- 0xB2A8, 0x6CE2, 0xB2A9, 0x535A, 0xB2AA, 0x52C3, 0xB2AB, 0x640F, 0xB2AC, 0x94C2, 0xB2AD, 0x7B94, 0xB2AE, 0x4F2F, 0xB2AF, 0x5E1B,
- 0xB2B0, 0x8236, 0xB2B1, 0x8116, 0xB2B2, 0x818A, 0xB2B3, 0x6E24, 0xB2B4, 0x6CCA, 0xB2B5, 0x9A73, 0xB2B6, 0x6355, 0xB2B7, 0x535C,
- 0xB2B8, 0x54FA, 0xB2B9, 0x8865, 0xB2BA, 0x57E0, 0xB2BB, 0x4E0D, 0xB2BC, 0x5E03, 0xB2BD, 0x6B65, 0xB2BE, 0x7C3F, 0xB2BF, 0x90E8,
- 0xB2C0, 0x6016, 0xB2C1, 0x64E6, 0xB2C2, 0x731C, 0xB2C3, 0x88C1, 0xB2C4, 0x6750, 0xB2C5, 0x624D, 0xB2C6, 0x8D22, 0xB2C7, 0x776C,
- 0xB2C8, 0x8E29, 0xB2C9, 0x91C7, 0xB2CA, 0x5F69, 0xB2CB, 0x83DC, 0xB2CC, 0x8521, 0xB2CD, 0x9910, 0xB2CE, 0x53C2, 0xB2CF, 0x8695,
- 0xB2D0, 0x6B8B, 0xB2D1, 0x60ED, 0xB2D2, 0x60E8, 0xB2D3, 0x707F, 0xB2D4, 0x82CD, 0xB2D5, 0x8231, 0xB2D6, 0x4ED3, 0xB2D7, 0x6CA7,
- 0xB2D8, 0x85CF, 0xB2D9, 0x64CD, 0xB2DA, 0x7CD9, 0xB2DB, 0x69FD, 0xB2DC, 0x66F9, 0xB2DD, 0x8349, 0xB2DE, 0x5395, 0xB2DF, 0x7B56,
- 0xB2E0, 0x4FA7, 0xB2E1, 0x518C, 0xB2E2, 0x6D4B, 0xB2E3, 0x5C42, 0xB2E4, 0x8E6D, 0xB2E5, 0x63D2, 0xB2E6, 0x53C9, 0xB2E7, 0x832C,
- 0xB2E8, 0x8336, 0xB2E9, 0x67E5, 0xB2EA, 0x78B4, 0xB2EB, 0x643D, 0xB2EC, 0x5BDF, 0xB2ED, 0x5C94, 0xB2EE, 0x5DEE, 0xB2EF, 0x8BE7,
- 0xB2F0, 0x62C6, 0xB2F1, 0x67F4, 0xB2F2, 0x8C7A, 0xB2F3, 0x6400, 0xB2F4, 0x63BA, 0xB2F5, 0x8749, 0xB2F6, 0x998B, 0xB2F7, 0x8C17,
- 0xB2F8, 0x7F20, 0xB2F9, 0x94F2, 0xB2FA, 0x4EA7, 0xB2FB, 0x9610, 0xB2FC, 0x98A4, 0xB2FD, 0x660C, 0xB2FE, 0x7316, 0xB340, 0x77E6,
- 0xB341, 0x77E8, 0xB342, 0x77EA, 0xB343, 0x77EF, 0xB344, 0x77F0, 0xB345, 0x77F1, 0xB346, 0x77F2, 0xB347, 0x77F4, 0xB348, 0x77F5,
- 0xB349, 0x77F7, 0xB34A, 0x77F9, 0xB34B, 0x77FA, 0xB34C, 0x77FB, 0xB34D, 0x77FC, 0xB34E, 0x7803, 0xB34F, 0x7804, 0xB350, 0x7805,
- 0xB351, 0x7806, 0xB352, 0x7807, 0xB353, 0x7808, 0xB354, 0x780A, 0xB355, 0x780B, 0xB356, 0x780E, 0xB357, 0x780F, 0xB358, 0x7810,
- 0xB359, 0x7813, 0xB35A, 0x7815, 0xB35B, 0x7819, 0xB35C, 0x781B, 0xB35D, 0x781E, 0xB35E, 0x7820, 0xB35F, 0x7821, 0xB360, 0x7822,
- 0xB361, 0x7824, 0xB362, 0x7828, 0xB363, 0x782A, 0xB364, 0x782B, 0xB365, 0x782E, 0xB366, 0x782F, 0xB367, 0x7831, 0xB368, 0x7832,
- 0xB369, 0x7833, 0xB36A, 0x7835, 0xB36B, 0x7836, 0xB36C, 0x783D, 0xB36D, 0x783F, 0xB36E, 0x7841, 0xB36F, 0x7842, 0xB370, 0x7843,
- 0xB371, 0x7844, 0xB372, 0x7846, 0xB373, 0x7848, 0xB374, 0x7849, 0xB375, 0x784A, 0xB376, 0x784B, 0xB377, 0x784D, 0xB378, 0x784F,
- 0xB379, 0x7851, 0xB37A, 0x7853, 0xB37B, 0x7854, 0xB37C, 0x7858, 0xB37D, 0x7859, 0xB37E, 0x785A, 0xB380, 0x785B, 0xB381, 0x785C,
- 0xB382, 0x785E, 0xB383, 0x785F, 0xB384, 0x7860, 0xB385, 0x7861, 0xB386, 0x7862, 0xB387, 0x7863, 0xB388, 0x7864, 0xB389, 0x7865,
- 0xB38A, 0x7866, 0xB38B, 0x7867, 0xB38C, 0x7868, 0xB38D, 0x7869, 0xB38E, 0x786F, 0xB38F, 0x7870, 0xB390, 0x7871, 0xB391, 0x7872,
- 0xB392, 0x7873, 0xB393, 0x7874, 0xB394, 0x7875, 0xB395, 0x7876, 0xB396, 0x7878, 0xB397, 0x7879, 0xB398, 0x787A, 0xB399, 0x787B,
- 0xB39A, 0x787D, 0xB39B, 0x787E, 0xB39C, 0x787F, 0xB39D, 0x7880, 0xB39E, 0x7881, 0xB39F, 0x7882, 0xB3A0, 0x7883, 0xB3A1, 0x573A,
- 0xB3A2, 0x5C1D, 0xB3A3, 0x5E38, 0xB3A4, 0x957F, 0xB3A5, 0x507F, 0xB3A6, 0x80A0, 0xB3A7, 0x5382, 0xB3A8, 0x655E, 0xB3A9, 0x7545,
- 0xB3AA, 0x5531, 0xB3AB, 0x5021, 0xB3AC, 0x8D85, 0xB3AD, 0x6284, 0xB3AE, 0x949E, 0xB3AF, 0x671D, 0xB3B0, 0x5632, 0xB3B1, 0x6F6E,
- 0xB3B2, 0x5DE2, 0xB3B3, 0x5435, 0xB3B4, 0x7092, 0xB3B5, 0x8F66, 0xB3B6, 0x626F, 0xB3B7, 0x64A4, 0xB3B8, 0x63A3, 0xB3B9, 0x5F7B,
- 0xB3BA, 0x6F88, 0xB3BB, 0x90F4, 0xB3BC, 0x81E3, 0xB3BD, 0x8FB0, 0xB3BE, 0x5C18, 0xB3BF, 0x6668, 0xB3C0, 0x5FF1, 0xB3C1, 0x6C89,
- 0xB3C2, 0x9648, 0xB3C3, 0x8D81, 0xB3C4, 0x886C, 0xB3C5, 0x6491, 0xB3C6, 0x79F0, 0xB3C7, 0x57CE, 0xB3C8, 0x6A59, 0xB3C9, 0x6210,
- 0xB3CA, 0x5448, 0xB3CB, 0x4E58, 0xB3CC, 0x7A0B, 0xB3CD, 0x60E9, 0xB3CE, 0x6F84, 0xB3CF, 0x8BDA, 0xB3D0, 0x627F, 0xB3D1, 0x901E,
- 0xB3D2, 0x9A8B, 0xB3D3, 0x79E4, 0xB3D4, 0x5403, 0xB3D5, 0x75F4, 0xB3D6, 0x6301, 0xB3D7, 0x5319, 0xB3D8, 0x6C60, 0xB3D9, 0x8FDF,
- 0xB3DA, 0x5F1B, 0xB3DB, 0x9A70, 0xB3DC, 0x803B, 0xB3DD, 0x9F7F, 0xB3DE, 0x4F88, 0xB3DF, 0x5C3A, 0xB3E0, 0x8D64, 0xB3E1, 0x7FC5,
- 0xB3E2, 0x65A5, 0xB3E3, 0x70BD, 0xB3E4, 0x5145, 0xB3E5, 0x51B2, 0xB3E6, 0x866B, 0xB3E7, 0x5D07, 0xB3E8, 0x5BA0, 0xB3E9, 0x62BD,
- 0xB3EA, 0x916C, 0xB3EB, 0x7574, 0xB3EC, 0x8E0C, 0xB3ED, 0x7A20, 0xB3EE, 0x6101, 0xB3EF, 0x7B79, 0xB3F0, 0x4EC7, 0xB3F1, 0x7EF8,
- 0xB3F2, 0x7785, 0xB3F3, 0x4E11, 0xB3F4, 0x81ED, 0xB3F5, 0x521D, 0xB3F6, 0x51FA, 0xB3F7, 0x6A71, 0xB3F8, 0x53A8, 0xB3F9, 0x8E87,
- 0xB3FA, 0x9504, 0xB3FB, 0x96CF, 0xB3FC, 0x6EC1, 0xB3FD, 0x9664, 0xB3FE, 0x695A, 0xB440, 0x7884, 0xB441, 0x7885, 0xB442, 0x7886,
- 0xB443, 0x7888, 0xB444, 0x788A, 0xB445, 0x788B, 0xB446, 0x788F, 0xB447, 0x7890, 0xB448, 0x7892, 0xB449, 0x7894, 0xB44A, 0x7895,
- 0xB44B, 0x7896, 0xB44C, 0x7899, 0xB44D, 0x789D, 0xB44E, 0x789E, 0xB44F, 0x78A0, 0xB450, 0x78A2, 0xB451, 0x78A4, 0xB452, 0x78A6,
- 0xB453, 0x78A8, 0xB454, 0x78A9, 0xB455, 0x78AA, 0xB456, 0x78AB, 0xB457, 0x78AC, 0xB458, 0x78AD, 0xB459, 0x78AE, 0xB45A, 0x78AF,
- 0xB45B, 0x78B5, 0xB45C, 0x78B6, 0xB45D, 0x78B7, 0xB45E, 0x78B8, 0xB45F, 0x78BA, 0xB460, 0x78BB, 0xB461, 0x78BC, 0xB462, 0x78BD,
- 0xB463, 0x78BF, 0xB464, 0x78C0, 0xB465, 0x78C2, 0xB466, 0x78C3, 0xB467, 0x78C4, 0xB468, 0x78C6, 0xB469, 0x78C7, 0xB46A, 0x78C8,
- 0xB46B, 0x78CC, 0xB46C, 0x78CD, 0xB46D, 0x78CE, 0xB46E, 0x78CF, 0xB46F, 0x78D1, 0xB470, 0x78D2, 0xB471, 0x78D3, 0xB472, 0x78D6,
- 0xB473, 0x78D7, 0xB474, 0x78D8, 0xB475, 0x78DA, 0xB476, 0x78DB, 0xB477, 0x78DC, 0xB478, 0x78DD, 0xB479, 0x78DE, 0xB47A, 0x78DF,
- 0xB47B, 0x78E0, 0xB47C, 0x78E1, 0xB47D, 0x78E2, 0xB47E, 0x78E3, 0xB480, 0x78E4, 0xB481, 0x78E5, 0xB482, 0x78E6, 0xB483, 0x78E7,
- 0xB484, 0x78E9, 0xB485, 0x78EA, 0xB486, 0x78EB, 0xB487, 0x78ED, 0xB488, 0x78EE, 0xB489, 0x78EF, 0xB48A, 0x78F0, 0xB48B, 0x78F1,
- 0xB48C, 0x78F3, 0xB48D, 0x78F5, 0xB48E, 0x78F6, 0xB48F, 0x78F8, 0xB490, 0x78F9, 0xB491, 0x78FB, 0xB492, 0x78FC, 0xB493, 0x78FD,
- 0xB494, 0x78FE, 0xB495, 0x78FF, 0xB496, 0x7900, 0xB497, 0x7902, 0xB498, 0x7903, 0xB499, 0x7904, 0xB49A, 0x7906, 0xB49B, 0x7907,
- 0xB49C, 0x7908, 0xB49D, 0x7909, 0xB49E, 0x790A, 0xB49F, 0x790B, 0xB4A0, 0x790C, 0xB4A1, 0x7840, 0xB4A2, 0x50A8, 0xB4A3, 0x77D7,
- 0xB4A4, 0x6410, 0xB4A5, 0x89E6, 0xB4A6, 0x5904, 0xB4A7, 0x63E3, 0xB4A8, 0x5DDD, 0xB4A9, 0x7A7F, 0xB4AA, 0x693D, 0xB4AB, 0x4F20,
- 0xB4AC, 0x8239, 0xB4AD, 0x5598, 0xB4AE, 0x4E32, 0xB4AF, 0x75AE, 0xB4B0, 0x7A97, 0xB4B1, 0x5E62, 0xB4B2, 0x5E8A, 0xB4B3, 0x95EF,
- 0xB4B4, 0x521B, 0xB4B5, 0x5439, 0xB4B6, 0x708A, 0xB4B7, 0x6376, 0xB4B8, 0x9524, 0xB4B9, 0x5782, 0xB4BA, 0x6625, 0xB4BB, 0x693F,
- 0xB4BC, 0x9187, 0xB4BD, 0x5507, 0xB4BE, 0x6DF3, 0xB4BF, 0x7EAF, 0xB4C0, 0x8822, 0xB4C1, 0x6233, 0xB4C2, 0x7EF0, 0xB4C3, 0x75B5,
- 0xB4C4, 0x8328, 0xB4C5, 0x78C1, 0xB4C6, 0x96CC, 0xB4C7, 0x8F9E, 0xB4C8, 0x6148, 0xB4C9, 0x74F7, 0xB4CA, 0x8BCD, 0xB4CB, 0x6B64,
- 0xB4CC, 0x523A, 0xB4CD, 0x8D50, 0xB4CE, 0x6B21, 0xB4CF, 0x806A, 0xB4D0, 0x8471, 0xB4D1, 0x56F1, 0xB4D2, 0x5306, 0xB4D3, 0x4ECE,
- 0xB4D4, 0x4E1B, 0xB4D5, 0x51D1, 0xB4D6, 0x7C97, 0xB4D7, 0x918B, 0xB4D8, 0x7C07, 0xB4D9, 0x4FC3, 0xB4DA, 0x8E7F, 0xB4DB, 0x7BE1,
- 0xB4DC, 0x7A9C, 0xB4DD, 0x6467, 0xB4DE, 0x5D14, 0xB4DF, 0x50AC, 0xB4E0, 0x8106, 0xB4E1, 0x7601, 0xB4E2, 0x7CB9, 0xB4E3, 0x6DEC,
- 0xB4E4, 0x7FE0, 0xB4E5, 0x6751, 0xB4E6, 0x5B58, 0xB4E7, 0x5BF8, 0xB4E8, 0x78CB, 0xB4E9, 0x64AE, 0xB4EA, 0x6413, 0xB4EB, 0x63AA,
- 0xB4EC, 0x632B, 0xB4ED, 0x9519, 0xB4EE, 0x642D, 0xB4EF, 0x8FBE, 0xB4F0, 0x7B54, 0xB4F1, 0x7629, 0xB4F2, 0x6253, 0xB4F3, 0x5927,
- 0xB4F4, 0x5446, 0xB4F5, 0x6B79, 0xB4F6, 0x50A3, 0xB4F7, 0x6234, 0xB4F8, 0x5E26, 0xB4F9, 0x6B86, 0xB4FA, 0x4EE3, 0xB4FB, 0x8D37,
- 0xB4FC, 0x888B, 0xB4FD, 0x5F85, 0xB4FE, 0x902E, 0xB540, 0x790D, 0xB541, 0x790E, 0xB542, 0x790F, 0xB543, 0x7910, 0xB544, 0x7911,
- 0xB545, 0x7912, 0xB546, 0x7914, 0xB547, 0x7915, 0xB548, 0x7916, 0xB549, 0x7917, 0xB54A, 0x7918, 0xB54B, 0x7919, 0xB54C, 0x791A,
- 0xB54D, 0x791B, 0xB54E, 0x791C, 0xB54F, 0x791D, 0xB550, 0x791F, 0xB551, 0x7920, 0xB552, 0x7921, 0xB553, 0x7922, 0xB554, 0x7923,
- 0xB555, 0x7925, 0xB556, 0x7926, 0xB557, 0x7927, 0xB558, 0x7928, 0xB559, 0x7929, 0xB55A, 0x792A, 0xB55B, 0x792B, 0xB55C, 0x792C,
- 0xB55D, 0x792D, 0xB55E, 0x792E, 0xB55F, 0x792F, 0xB560, 0x7930, 0xB561, 0x7931, 0xB562, 0x7932, 0xB563, 0x7933, 0xB564, 0x7935,
- 0xB565, 0x7936, 0xB566, 0x7937, 0xB567, 0x7938, 0xB568, 0x7939, 0xB569, 0x793D, 0xB56A, 0x793F, 0xB56B, 0x7942, 0xB56C, 0x7943,
- 0xB56D, 0x7944, 0xB56E, 0x7945, 0xB56F, 0x7947, 0xB570, 0x794A, 0xB571, 0x794B, 0xB572, 0x794C, 0xB573, 0x794D, 0xB574, 0x794E,
- 0xB575, 0x794F, 0xB576, 0x7950, 0xB577, 0x7951, 0xB578, 0x7952, 0xB579, 0x7954, 0xB57A, 0x7955, 0xB57B, 0x7958, 0xB57C, 0x7959,
- 0xB57D, 0x7961, 0xB57E, 0x7963, 0xB580, 0x7964, 0xB581, 0x7966, 0xB582, 0x7969, 0xB583, 0x796A, 0xB584, 0x796B, 0xB585, 0x796C,
- 0xB586, 0x796E, 0xB587, 0x7970, 0xB588, 0x7971, 0xB589, 0x7972, 0xB58A, 0x7973, 0xB58B, 0x7974, 0xB58C, 0x7975, 0xB58D, 0x7976,
- 0xB58E, 0x7979, 0xB58F, 0x797B, 0xB590, 0x797C, 0xB591, 0x797D, 0xB592, 0x797E, 0xB593, 0x797F, 0xB594, 0x7982, 0xB595, 0x7983,
- 0xB596, 0x7986, 0xB597, 0x7987, 0xB598, 0x7988, 0xB599, 0x7989, 0xB59A, 0x798B, 0xB59B, 0x798C, 0xB59C, 0x798D, 0xB59D, 0x798E,
- 0xB59E, 0x7990, 0xB59F, 0x7991, 0xB5A0, 0x7992, 0xB5A1, 0x6020, 0xB5A2, 0x803D, 0xB5A3, 0x62C5, 0xB5A4, 0x4E39, 0xB5A5, 0x5355,
- 0xB5A6, 0x90F8, 0xB5A7, 0x63B8, 0xB5A8, 0x80C6, 0xB5A9, 0x65E6, 0xB5AA, 0x6C2E, 0xB5AB, 0x4F46, 0xB5AC, 0x60EE, 0xB5AD, 0x6DE1,
- 0xB5AE, 0x8BDE, 0xB5AF, 0x5F39, 0xB5B0, 0x86CB, 0xB5B1, 0x5F53, 0xB5B2, 0x6321, 0xB5B3, 0x515A, 0xB5B4, 0x8361, 0xB5B5, 0x6863,
- 0xB5B6, 0x5200, 0xB5B7, 0x6363, 0xB5B8, 0x8E48, 0xB5B9, 0x5012, 0xB5BA, 0x5C9B, 0xB5BB, 0x7977, 0xB5BC, 0x5BFC, 0xB5BD, 0x5230,
- 0xB5BE, 0x7A3B, 0xB5BF, 0x60BC, 0xB5C0, 0x9053, 0xB5C1, 0x76D7, 0xB5C2, 0x5FB7, 0xB5C3, 0x5F97, 0xB5C4, 0x7684, 0xB5C5, 0x8E6C,
- 0xB5C6, 0x706F, 0xB5C7, 0x767B, 0xB5C8, 0x7B49, 0xB5C9, 0x77AA, 0xB5CA, 0x51F3, 0xB5CB, 0x9093, 0xB5CC, 0x5824, 0xB5CD, 0x4F4E,
- 0xB5CE, 0x6EF4, 0xB5CF, 0x8FEA, 0xB5D0, 0x654C, 0xB5D1, 0x7B1B, 0xB5D2, 0x72C4, 0xB5D3, 0x6DA4, 0xB5D4, 0x7FDF, 0xB5D5, 0x5AE1,
- 0xB5D6, 0x62B5, 0xB5D7, 0x5E95, 0xB5D8, 0x5730, 0xB5D9, 0x8482, 0xB5DA, 0x7B2C, 0xB5DB, 0x5E1D, 0xB5DC, 0x5F1F, 0xB5DD, 0x9012,
- 0xB5DE, 0x7F14, 0xB5DF, 0x98A0, 0xB5E0, 0x6382, 0xB5E1, 0x6EC7, 0xB5E2, 0x7898, 0xB5E3, 0x70B9, 0xB5E4, 0x5178, 0xB5E5, 0x975B,
- 0xB5E6, 0x57AB, 0xB5E7, 0x7535, 0xB5E8, 0x4F43, 0xB5E9, 0x7538, 0xB5EA, 0x5E97, 0xB5EB, 0x60E6, 0xB5EC, 0x5960, 0xB5ED, 0x6DC0,
- 0xB5EE, 0x6BBF, 0xB5EF, 0x7889, 0xB5F0, 0x53FC, 0xB5F1, 0x96D5, 0xB5F2, 0x51CB, 0xB5F3, 0x5201, 0xB5F4, 0x6389, 0xB5F5, 0x540A,
- 0xB5F6, 0x9493, 0xB5F7, 0x8C03, 0xB5F8, 0x8DCC, 0xB5F9, 0x7239, 0xB5FA, 0x789F, 0xB5FB, 0x8776, 0xB5FC, 0x8FED, 0xB5FD, 0x8C0D,
- 0xB5FE, 0x53E0, 0xB640, 0x7993, 0xB641, 0x7994, 0xB642, 0x7995, 0xB643, 0x7996, 0xB644, 0x7997, 0xB645, 0x7998, 0xB646, 0x7999,
- 0xB647, 0x799B, 0xB648, 0x799C, 0xB649, 0x799D, 0xB64A, 0x799E, 0xB64B, 0x799F, 0xB64C, 0x79A0, 0xB64D, 0x79A1, 0xB64E, 0x79A2,
- 0xB64F, 0x79A3, 0xB650, 0x79A4, 0xB651, 0x79A5, 0xB652, 0x79A6, 0xB653, 0x79A8, 0xB654, 0x79A9, 0xB655, 0x79AA, 0xB656, 0x79AB,
- 0xB657, 0x79AC, 0xB658, 0x79AD, 0xB659, 0x79AE, 0xB65A, 0x79AF, 0xB65B, 0x79B0, 0xB65C, 0x79B1, 0xB65D, 0x79B2, 0xB65E, 0x79B4,
- 0xB65F, 0x79B5, 0xB660, 0x79B6, 0xB661, 0x79B7, 0xB662, 0x79B8, 0xB663, 0x79BC, 0xB664, 0x79BF, 0xB665, 0x79C2, 0xB666, 0x79C4,
- 0xB667, 0x79C5, 0xB668, 0x79C7, 0xB669, 0x79C8, 0xB66A, 0x79CA, 0xB66B, 0x79CC, 0xB66C, 0x79CE, 0xB66D, 0x79CF, 0xB66E, 0x79D0,
- 0xB66F, 0x79D3, 0xB670, 0x79D4, 0xB671, 0x79D6, 0xB672, 0x79D7, 0xB673, 0x79D9, 0xB674, 0x79DA, 0xB675, 0x79DB, 0xB676, 0x79DC,
- 0xB677, 0x79DD, 0xB678, 0x79DE, 0xB679, 0x79E0, 0xB67A, 0x79E1, 0xB67B, 0x79E2, 0xB67C, 0x79E5, 0xB67D, 0x79E8, 0xB67E, 0x79EA,
- 0xB680, 0x79EC, 0xB681, 0x79EE, 0xB682, 0x79F1, 0xB683, 0x79F2, 0xB684, 0x79F3, 0xB685, 0x79F4, 0xB686, 0x79F5, 0xB687, 0x79F6,
- 0xB688, 0x79F7, 0xB689, 0x79F9, 0xB68A, 0x79FA, 0xB68B, 0x79FC, 0xB68C, 0x79FE, 0xB68D, 0x79FF, 0xB68E, 0x7A01, 0xB68F, 0x7A04,
- 0xB690, 0x7A05, 0xB691, 0x7A07, 0xB692, 0x7A08, 0xB693, 0x7A09, 0xB694, 0x7A0A, 0xB695, 0x7A0C, 0xB696, 0x7A0F, 0xB697, 0x7A10,
- 0xB698, 0x7A11, 0xB699, 0x7A12, 0xB69A, 0x7A13, 0xB69B, 0x7A15, 0xB69C, 0x7A16, 0xB69D, 0x7A18, 0xB69E, 0x7A19, 0xB69F, 0x7A1B,
- 0xB6A0, 0x7A1C, 0xB6A1, 0x4E01, 0xB6A2, 0x76EF, 0xB6A3, 0x53EE, 0xB6A4, 0x9489, 0xB6A5, 0x9876, 0xB6A6, 0x9F0E, 0xB6A7, 0x952D,
- 0xB6A8, 0x5B9A, 0xB6A9, 0x8BA2, 0xB6AA, 0x4E22, 0xB6AB, 0x4E1C, 0xB6AC, 0x51AC, 0xB6AD, 0x8463, 0xB6AE, 0x61C2, 0xB6AF, 0x52A8,
- 0xB6B0, 0x680B, 0xB6B1, 0x4F97, 0xB6B2, 0x606B, 0xB6B3, 0x51BB, 0xB6B4, 0x6D1E, 0xB6B5, 0x515C, 0xB6B6, 0x6296, 0xB6B7, 0x6597,
- 0xB6B8, 0x9661, 0xB6B9, 0x8C46, 0xB6BA, 0x9017, 0xB6BB, 0x75D8, 0xB6BC, 0x90FD, 0xB6BD, 0x7763, 0xB6BE, 0x6BD2, 0xB6BF, 0x728A,
- 0xB6C0, 0x72EC, 0xB6C1, 0x8BFB, 0xB6C2, 0x5835, 0xB6C3, 0x7779, 0xB6C4, 0x8D4C, 0xB6C5, 0x675C, 0xB6C6, 0x9540, 0xB6C7, 0x809A,
- 0xB6C8, 0x5EA6, 0xB6C9, 0x6E21, 0xB6CA, 0x5992, 0xB6CB, 0x7AEF, 0xB6CC, 0x77ED, 0xB6CD, 0x953B, 0xB6CE, 0x6BB5, 0xB6CF, 0x65AD,
- 0xB6D0, 0x7F0E, 0xB6D1, 0x5806, 0xB6D2, 0x5151, 0xB6D3, 0x961F, 0xB6D4, 0x5BF9, 0xB6D5, 0x58A9, 0xB6D6, 0x5428, 0xB6D7, 0x8E72,
- 0xB6D8, 0x6566, 0xB6D9, 0x987F, 0xB6DA, 0x56E4, 0xB6DB, 0x949D, 0xB6DC, 0x76FE, 0xB6DD, 0x9041, 0xB6DE, 0x6387, 0xB6DF, 0x54C6,
- 0xB6E0, 0x591A, 0xB6E1, 0x593A, 0xB6E2, 0x579B, 0xB6E3, 0x8EB2, 0xB6E4, 0x6735, 0xB6E5, 0x8DFA, 0xB6E6, 0x8235, 0xB6E7, 0x5241,
- 0xB6E8, 0x60F0, 0xB6E9, 0x5815, 0xB6EA, 0x86FE, 0xB6EB, 0x5CE8, 0xB6EC, 0x9E45, 0xB6ED, 0x4FC4, 0xB6EE, 0x989D, 0xB6EF, 0x8BB9,
- 0xB6F0, 0x5A25, 0xB6F1, 0x6076, 0xB6F2, 0x5384, 0xB6F3, 0x627C, 0xB6F4, 0x904F, 0xB6F5, 0x9102, 0xB6F6, 0x997F, 0xB6F7, 0x6069,
- 0xB6F8, 0x800C, 0xB6F9, 0x513F, 0xB6FA, 0x8033, 0xB6FB, 0x5C14, 0xB6FC, 0x9975, 0xB6FD, 0x6D31, 0xB6FE, 0x4E8C, 0xB740, 0x7A1D,
- 0xB741, 0x7A1F, 0xB742, 0x7A21, 0xB743, 0x7A22, 0xB744, 0x7A24, 0xB745, 0x7A25, 0xB746, 0x7A26, 0xB747, 0x7A27, 0xB748, 0x7A28,
- 0xB749, 0x7A29, 0xB74A, 0x7A2A, 0xB74B, 0x7A2B, 0xB74C, 0x7A2C, 0xB74D, 0x7A2D, 0xB74E, 0x7A2E, 0xB74F, 0x7A2F, 0xB750, 0x7A30,
- 0xB751, 0x7A31, 0xB752, 0x7A32, 0xB753, 0x7A34, 0xB754, 0x7A35, 0xB755, 0x7A36, 0xB756, 0x7A38, 0xB757, 0x7A3A, 0xB758, 0x7A3E,
- 0xB759, 0x7A40, 0xB75A, 0x7A41, 0xB75B, 0x7A42, 0xB75C, 0x7A43, 0xB75D, 0x7A44, 0xB75E, 0x7A45, 0xB75F, 0x7A47, 0xB760, 0x7A48,
- 0xB761, 0x7A49, 0xB762, 0x7A4A, 0xB763, 0x7A4B, 0xB764, 0x7A4C, 0xB765, 0x7A4D, 0xB766, 0x7A4E, 0xB767, 0x7A4F, 0xB768, 0x7A50,
- 0xB769, 0x7A52, 0xB76A, 0x7A53, 0xB76B, 0x7A54, 0xB76C, 0x7A55, 0xB76D, 0x7A56, 0xB76E, 0x7A58, 0xB76F, 0x7A59, 0xB770, 0x7A5A,
- 0xB771, 0x7A5B, 0xB772, 0x7A5C, 0xB773, 0x7A5D, 0xB774, 0x7A5E, 0xB775, 0x7A5F, 0xB776, 0x7A60, 0xB777, 0x7A61, 0xB778, 0x7A62,
- 0xB779, 0x7A63, 0xB77A, 0x7A64, 0xB77B, 0x7A65, 0xB77C, 0x7A66, 0xB77D, 0x7A67, 0xB77E, 0x7A68, 0xB780, 0x7A69, 0xB781, 0x7A6A,
- 0xB782, 0x7A6B, 0xB783, 0x7A6C, 0xB784, 0x7A6D, 0xB785, 0x7A6E, 0xB786, 0x7A6F, 0xB787, 0x7A71, 0xB788, 0x7A72, 0xB789, 0x7A73,
- 0xB78A, 0x7A75, 0xB78B, 0x7A7B, 0xB78C, 0x7A7C, 0xB78D, 0x7A7D, 0xB78E, 0x7A7E, 0xB78F, 0x7A82, 0xB790, 0x7A85, 0xB791, 0x7A87,
- 0xB792, 0x7A89, 0xB793, 0x7A8A, 0xB794, 0x7A8B, 0xB795, 0x7A8C, 0xB796, 0x7A8E, 0xB797, 0x7A8F, 0xB798, 0x7A90, 0xB799, 0x7A93,
- 0xB79A, 0x7A94, 0xB79B, 0x7A99, 0xB79C, 0x7A9A, 0xB79D, 0x7A9B, 0xB79E, 0x7A9E, 0xB79F, 0x7AA1, 0xB7A0, 0x7AA2, 0xB7A1, 0x8D30,
- 0xB7A2, 0x53D1, 0xB7A3, 0x7F5A, 0xB7A4, 0x7B4F, 0xB7A5, 0x4F10, 0xB7A6, 0x4E4F, 0xB7A7, 0x9600, 0xB7A8, 0x6CD5, 0xB7A9, 0x73D0,
- 0xB7AA, 0x85E9, 0xB7AB, 0x5E06, 0xB7AC, 0x756A, 0xB7AD, 0x7FFB, 0xB7AE, 0x6A0A, 0xB7AF, 0x77FE, 0xB7B0, 0x9492, 0xB7B1, 0x7E41,
- 0xB7B2, 0x51E1, 0xB7B3, 0x70E6, 0xB7B4, 0x53CD, 0xB7B5, 0x8FD4, 0xB7B6, 0x8303, 0xB7B7, 0x8D29, 0xB7B8, 0x72AF, 0xB7B9, 0x996D,
- 0xB7BA, 0x6CDB, 0xB7BB, 0x574A, 0xB7BC, 0x82B3, 0xB7BD, 0x65B9, 0xB7BE, 0x80AA, 0xB7BF, 0x623F, 0xB7C0, 0x9632, 0xB7C1, 0x59A8,
- 0xB7C2, 0x4EFF, 0xB7C3, 0x8BBF, 0xB7C4, 0x7EBA, 0xB7C5, 0x653E, 0xB7C6, 0x83F2, 0xB7C7, 0x975E, 0xB7C8, 0x5561, 0xB7C9, 0x98DE,
- 0xB7CA, 0x80A5, 0xB7CB, 0x532A, 0xB7CC, 0x8BFD, 0xB7CD, 0x5420, 0xB7CE, 0x80BA, 0xB7CF, 0x5E9F, 0xB7D0, 0x6CB8, 0xB7D1, 0x8D39,
- 0xB7D2, 0x82AC, 0xB7D3, 0x915A, 0xB7D4, 0x5429, 0xB7D5, 0x6C1B, 0xB7D6, 0x5206, 0xB7D7, 0x7EB7, 0xB7D8, 0x575F, 0xB7D9, 0x711A,
- 0xB7DA, 0x6C7E, 0xB7DB, 0x7C89, 0xB7DC, 0x594B, 0xB7DD, 0x4EFD, 0xB7DE, 0x5FFF, 0xB7DF, 0x6124, 0xB7E0, 0x7CAA, 0xB7E1, 0x4E30,
- 0xB7E2, 0x5C01, 0xB7E3, 0x67AB, 0xB7E4, 0x8702, 0xB7E5, 0x5CF0, 0xB7E6, 0x950B, 0xB7E7, 0x98CE, 0xB7E8, 0x75AF, 0xB7E9, 0x70FD,
- 0xB7EA, 0x9022, 0xB7EB, 0x51AF, 0xB7EC, 0x7F1D, 0xB7ED, 0x8BBD, 0xB7EE, 0x5949, 0xB7EF, 0x51E4, 0xB7F0, 0x4F5B, 0xB7F1, 0x5426,
- 0xB7F2, 0x592B, 0xB7F3, 0x6577, 0xB7F4, 0x80A4, 0xB7F5, 0x5B75, 0xB7F6, 0x6276, 0xB7F7, 0x62C2, 0xB7F8, 0x8F90, 0xB7F9, 0x5E45,
- 0xB7FA, 0x6C1F, 0xB7FB, 0x7B26, 0xB7FC, 0x4F0F, 0xB7FD, 0x4FD8, 0xB7FE, 0x670D, 0xB840, 0x7AA3, 0xB841, 0x7AA4, 0xB842, 0x7AA7,
- 0xB843, 0x7AA9, 0xB844, 0x7AAA, 0xB845, 0x7AAB, 0xB846, 0x7AAE, 0xB847, 0x7AAF, 0xB848, 0x7AB0, 0xB849, 0x7AB1, 0xB84A, 0x7AB2,
- 0xB84B, 0x7AB4, 0xB84C, 0x7AB5, 0xB84D, 0x7AB6, 0xB84E, 0x7AB7, 0xB84F, 0x7AB8, 0xB850, 0x7AB9, 0xB851, 0x7ABA, 0xB852, 0x7ABB,
- 0xB853, 0x7ABC, 0xB854, 0x7ABD, 0xB855, 0x7ABE, 0xB856, 0x7AC0, 0xB857, 0x7AC1, 0xB858, 0x7AC2, 0xB859, 0x7AC3, 0xB85A, 0x7AC4,
- 0xB85B, 0x7AC5, 0xB85C, 0x7AC6, 0xB85D, 0x7AC7, 0xB85E, 0x7AC8, 0xB85F, 0x7AC9, 0xB860, 0x7ACA, 0xB861, 0x7ACC, 0xB862, 0x7ACD,
- 0xB863, 0x7ACE, 0xB864, 0x7ACF, 0xB865, 0x7AD0, 0xB866, 0x7AD1, 0xB867, 0x7AD2, 0xB868, 0x7AD3, 0xB869, 0x7AD4, 0xB86A, 0x7AD5,
- 0xB86B, 0x7AD7, 0xB86C, 0x7AD8, 0xB86D, 0x7ADA, 0xB86E, 0x7ADB, 0xB86F, 0x7ADC, 0xB870, 0x7ADD, 0xB871, 0x7AE1, 0xB872, 0x7AE2,
- 0xB873, 0x7AE4, 0xB874, 0x7AE7, 0xB875, 0x7AE8, 0xB876, 0x7AE9, 0xB877, 0x7AEA, 0xB878, 0x7AEB, 0xB879, 0x7AEC, 0xB87A, 0x7AEE,
- 0xB87B, 0x7AF0, 0xB87C, 0x7AF1, 0xB87D, 0x7AF2, 0xB87E, 0x7AF3, 0xB880, 0x7AF4, 0xB881, 0x7AF5, 0xB882, 0x7AF6, 0xB883, 0x7AF7,
- 0xB884, 0x7AF8, 0xB885, 0x7AFB, 0xB886, 0x7AFC, 0xB887, 0x7AFE, 0xB888, 0x7B00, 0xB889, 0x7B01, 0xB88A, 0x7B02, 0xB88B, 0x7B05,
- 0xB88C, 0x7B07, 0xB88D, 0x7B09, 0xB88E, 0x7B0C, 0xB88F, 0x7B0D, 0xB890, 0x7B0E, 0xB891, 0x7B10, 0xB892, 0x7B12, 0xB893, 0x7B13,
- 0xB894, 0x7B16, 0xB895, 0x7B17, 0xB896, 0x7B18, 0xB897, 0x7B1A, 0xB898, 0x7B1C, 0xB899, 0x7B1D, 0xB89A, 0x7B1F, 0xB89B, 0x7B21,
- 0xB89C, 0x7B22, 0xB89D, 0x7B23, 0xB89E, 0x7B27, 0xB89F, 0x7B29, 0xB8A0, 0x7B2D, 0xB8A1, 0x6D6E, 0xB8A2, 0x6DAA, 0xB8A3, 0x798F,
- 0xB8A4, 0x88B1, 0xB8A5, 0x5F17, 0xB8A6, 0x752B, 0xB8A7, 0x629A, 0xB8A8, 0x8F85, 0xB8A9, 0x4FEF, 0xB8AA, 0x91DC, 0xB8AB, 0x65A7,
- 0xB8AC, 0x812F, 0xB8AD, 0x8151, 0xB8AE, 0x5E9C, 0xB8AF, 0x8150, 0xB8B0, 0x8D74, 0xB8B1, 0x526F, 0xB8B2, 0x8986, 0xB8B3, 0x8D4B,
- 0xB8B4, 0x590D, 0xB8B5, 0x5085, 0xB8B6, 0x4ED8, 0xB8B7, 0x961C, 0xB8B8, 0x7236, 0xB8B9, 0x8179, 0xB8BA, 0x8D1F, 0xB8BB, 0x5BCC,
- 0xB8BC, 0x8BA3, 0xB8BD, 0x9644, 0xB8BE, 0x5987, 0xB8BF, 0x7F1A, 0xB8C0, 0x5490, 0xB8C1, 0x5676, 0xB8C2, 0x560E, 0xB8C3, 0x8BE5,
- 0xB8C4, 0x6539, 0xB8C5, 0x6982, 0xB8C6, 0x9499, 0xB8C7, 0x76D6, 0xB8C8, 0x6E89, 0xB8C9, 0x5E72, 0xB8CA, 0x7518, 0xB8CB, 0x6746,
- 0xB8CC, 0x67D1, 0xB8CD, 0x7AFF, 0xB8CE, 0x809D, 0xB8CF, 0x8D76, 0xB8D0, 0x611F, 0xB8D1, 0x79C6, 0xB8D2, 0x6562, 0xB8D3, 0x8D63,
- 0xB8D4, 0x5188, 0xB8D5, 0x521A, 0xB8D6, 0x94A2, 0xB8D7, 0x7F38, 0xB8D8, 0x809B, 0xB8D9, 0x7EB2, 0xB8DA, 0x5C97, 0xB8DB, 0x6E2F,
- 0xB8DC, 0x6760, 0xB8DD, 0x7BD9, 0xB8DE, 0x768B, 0xB8DF, 0x9AD8, 0xB8E0, 0x818F, 0xB8E1, 0x7F94, 0xB8E2, 0x7CD5, 0xB8E3, 0x641E,
- 0xB8E4, 0x9550, 0xB8E5, 0x7A3F, 0xB8E6, 0x544A, 0xB8E7, 0x54E5, 0xB8E8, 0x6B4C, 0xB8E9, 0x6401, 0xB8EA, 0x6208, 0xB8EB, 0x9E3D,
- 0xB8EC, 0x80F3, 0xB8ED, 0x7599, 0xB8EE, 0x5272, 0xB8EF, 0x9769, 0xB8F0, 0x845B, 0xB8F1, 0x683C, 0xB8F2, 0x86E4, 0xB8F3, 0x9601,
- 0xB8F4, 0x9694, 0xB8F5, 0x94EC, 0xB8F6, 0x4E2A, 0xB8F7, 0x5404, 0xB8F8, 0x7ED9, 0xB8F9, 0x6839, 0xB8FA, 0x8DDF, 0xB8FB, 0x8015,
- 0xB8FC, 0x66F4, 0xB8FD, 0x5E9A, 0xB8FE, 0x7FB9, 0xB940, 0x7B2F, 0xB941, 0x7B30, 0xB942, 0x7B32, 0xB943, 0x7B34, 0xB944, 0x7B35,
- 0xB945, 0x7B36, 0xB946, 0x7B37, 0xB947, 0x7B39, 0xB948, 0x7B3B, 0xB949, 0x7B3D, 0xB94A, 0x7B3F, 0xB94B, 0x7B40, 0xB94C, 0x7B41,
- 0xB94D, 0x7B42, 0xB94E, 0x7B43, 0xB94F, 0x7B44, 0xB950, 0x7B46, 0xB951, 0x7B48, 0xB952, 0x7B4A, 0xB953, 0x7B4D, 0xB954, 0x7B4E,
- 0xB955, 0x7B53, 0xB956, 0x7B55, 0xB957, 0x7B57, 0xB958, 0x7B59, 0xB959, 0x7B5C, 0xB95A, 0x7B5E, 0xB95B, 0x7B5F, 0xB95C, 0x7B61,
- 0xB95D, 0x7B63, 0xB95E, 0x7B64, 0xB95F, 0x7B65, 0xB960, 0x7B66, 0xB961, 0x7B67, 0xB962, 0x7B68, 0xB963, 0x7B69, 0xB964, 0x7B6A,
- 0xB965, 0x7B6B, 0xB966, 0x7B6C, 0xB967, 0x7B6D, 0xB968, 0x7B6F, 0xB969, 0x7B70, 0xB96A, 0x7B73, 0xB96B, 0x7B74, 0xB96C, 0x7B76,
- 0xB96D, 0x7B78, 0xB96E, 0x7B7A, 0xB96F, 0x7B7C, 0xB970, 0x7B7D, 0xB971, 0x7B7F, 0xB972, 0x7B81, 0xB973, 0x7B82, 0xB974, 0x7B83,
- 0xB975, 0x7B84, 0xB976, 0x7B86, 0xB977, 0x7B87, 0xB978, 0x7B88, 0xB979, 0x7B89, 0xB97A, 0x7B8A, 0xB97B, 0x7B8B, 0xB97C, 0x7B8C,
- 0xB97D, 0x7B8E, 0xB97E, 0x7B8F, 0xB980, 0x7B91, 0xB981, 0x7B92, 0xB982, 0x7B93, 0xB983, 0x7B96, 0xB984, 0x7B98, 0xB985, 0x7B99,
- 0xB986, 0x7B9A, 0xB987, 0x7B9B, 0xB988, 0x7B9E, 0xB989, 0x7B9F, 0xB98A, 0x7BA0, 0xB98B, 0x7BA3, 0xB98C, 0x7BA4, 0xB98D, 0x7BA5,
- 0xB98E, 0x7BAE, 0xB98F, 0x7BAF, 0xB990, 0x7BB0, 0xB991, 0x7BB2, 0xB992, 0x7BB3, 0xB993, 0x7BB5, 0xB994, 0x7BB6, 0xB995, 0x7BB7,
- 0xB996, 0x7BB9, 0xB997, 0x7BBA, 0xB998, 0x7BBB, 0xB999, 0x7BBC, 0xB99A, 0x7BBD, 0xB99B, 0x7BBE, 0xB99C, 0x7BBF, 0xB99D, 0x7BC0,
- 0xB99E, 0x7BC2, 0xB99F, 0x7BC3, 0xB9A0, 0x7BC4, 0xB9A1, 0x57C2, 0xB9A2, 0x803F, 0xB9A3, 0x6897, 0xB9A4, 0x5DE5, 0xB9A5, 0x653B,
- 0xB9A6, 0x529F, 0xB9A7, 0x606D, 0xB9A8, 0x9F9A, 0xB9A9, 0x4F9B, 0xB9AA, 0x8EAC, 0xB9AB, 0x516C, 0xB9AC, 0x5BAB, 0xB9AD, 0x5F13,
- 0xB9AE, 0x5DE9, 0xB9AF, 0x6C5E, 0xB9B0, 0x62F1, 0xB9B1, 0x8D21, 0xB9B2, 0x5171, 0xB9B3, 0x94A9, 0xB9B4, 0x52FE, 0xB9B5, 0x6C9F,
- 0xB9B6, 0x82DF, 0xB9B7, 0x72D7, 0xB9B8, 0x57A2, 0xB9B9, 0x6784, 0xB9BA, 0x8D2D, 0xB9BB, 0x591F, 0xB9BC, 0x8F9C, 0xB9BD, 0x83C7,
- 0xB9BE, 0x5495, 0xB9BF, 0x7B8D, 0xB9C0, 0x4F30, 0xB9C1, 0x6CBD, 0xB9C2, 0x5B64, 0xB9C3, 0x59D1, 0xB9C4, 0x9F13, 0xB9C5, 0x53E4,
- 0xB9C6, 0x86CA, 0xB9C7, 0x9AA8, 0xB9C8, 0x8C37, 0xB9C9, 0x80A1, 0xB9CA, 0x6545, 0xB9CB, 0x987E, 0xB9CC, 0x56FA, 0xB9CD, 0x96C7,
- 0xB9CE, 0x522E, 0xB9CF, 0x74DC, 0xB9D0, 0x5250, 0xB9D1, 0x5BE1, 0xB9D2, 0x6302, 0xB9D3, 0x8902, 0xB9D4, 0x4E56, 0xB9D5, 0x62D0,
- 0xB9D6, 0x602A, 0xB9D7, 0x68FA, 0xB9D8, 0x5173, 0xB9D9, 0x5B98, 0xB9DA, 0x51A0, 0xB9DB, 0x89C2, 0xB9DC, 0x7BA1, 0xB9DD, 0x9986,
- 0xB9DE, 0x7F50, 0xB9DF, 0x60EF, 0xB9E0, 0x704C, 0xB9E1, 0x8D2F, 0xB9E2, 0x5149, 0xB9E3, 0x5E7F, 0xB9E4, 0x901B, 0xB9E5, 0x7470,
- 0xB9E6, 0x89C4, 0xB9E7, 0x572D, 0xB9E8, 0x7845, 0xB9E9, 0x5F52, 0xB9EA, 0x9F9F, 0xB9EB, 0x95FA, 0xB9EC, 0x8F68, 0xB9ED, 0x9B3C,
- 0xB9EE, 0x8BE1, 0xB9EF, 0x7678, 0xB9F0, 0x6842, 0xB9F1, 0x67DC, 0xB9F2, 0x8DEA, 0xB9F3, 0x8D35, 0xB9F4, 0x523D, 0xB9F5, 0x8F8A,
- 0xB9F6, 0x6EDA, 0xB9F7, 0x68CD, 0xB9F8, 0x9505, 0xB9F9, 0x90ED, 0xB9FA, 0x56FD, 0xB9FB, 0x679C, 0xB9FC, 0x88F9, 0xB9FD, 0x8FC7,
- 0xB9FE, 0x54C8, 0xBA40, 0x7BC5, 0xBA41, 0x7BC8, 0xBA42, 0x7BC9, 0xBA43, 0x7BCA, 0xBA44, 0x7BCB, 0xBA45, 0x7BCD, 0xBA46, 0x7BCE,
- 0xBA47, 0x7BCF, 0xBA48, 0x7BD0, 0xBA49, 0x7BD2, 0xBA4A, 0x7BD4, 0xBA4B, 0x7BD5, 0xBA4C, 0x7BD6, 0xBA4D, 0x7BD7, 0xBA4E, 0x7BD8,
- 0xBA4F, 0x7BDB, 0xBA50, 0x7BDC, 0xBA51, 0x7BDE, 0xBA52, 0x7BDF, 0xBA53, 0x7BE0, 0xBA54, 0x7BE2, 0xBA55, 0x7BE3, 0xBA56, 0x7BE4,
- 0xBA57, 0x7BE7, 0xBA58, 0x7BE8, 0xBA59, 0x7BE9, 0xBA5A, 0x7BEB, 0xBA5B, 0x7BEC, 0xBA5C, 0x7BED, 0xBA5D, 0x7BEF, 0xBA5E, 0x7BF0,
- 0xBA5F, 0x7BF2, 0xBA60, 0x7BF3, 0xBA61, 0x7BF4, 0xBA62, 0x7BF5, 0xBA63, 0x7BF6, 0xBA64, 0x7BF8, 0xBA65, 0x7BF9, 0xBA66, 0x7BFA,
- 0xBA67, 0x7BFB, 0xBA68, 0x7BFD, 0xBA69, 0x7BFF, 0xBA6A, 0x7C00, 0xBA6B, 0x7C01, 0xBA6C, 0x7C02, 0xBA6D, 0x7C03, 0xBA6E, 0x7C04,
- 0xBA6F, 0x7C05, 0xBA70, 0x7C06, 0xBA71, 0x7C08, 0xBA72, 0x7C09, 0xBA73, 0x7C0A, 0xBA74, 0x7C0D, 0xBA75, 0x7C0E, 0xBA76, 0x7C10,
- 0xBA77, 0x7C11, 0xBA78, 0x7C12, 0xBA79, 0x7C13, 0xBA7A, 0x7C14, 0xBA7B, 0x7C15, 0xBA7C, 0x7C17, 0xBA7D, 0x7C18, 0xBA7E, 0x7C19,
- 0xBA80, 0x7C1A, 0xBA81, 0x7C1B, 0xBA82, 0x7C1C, 0xBA83, 0x7C1D, 0xBA84, 0x7C1E, 0xBA85, 0x7C20, 0xBA86, 0x7C21, 0xBA87, 0x7C22,
- 0xBA88, 0x7C23, 0xBA89, 0x7C24, 0xBA8A, 0x7C25, 0xBA8B, 0x7C28, 0xBA8C, 0x7C29, 0xBA8D, 0x7C2B, 0xBA8E, 0x7C2C, 0xBA8F, 0x7C2D,
- 0xBA90, 0x7C2E, 0xBA91, 0x7C2F, 0xBA92, 0x7C30, 0xBA93, 0x7C31, 0xBA94, 0x7C32, 0xBA95, 0x7C33, 0xBA96, 0x7C34, 0xBA97, 0x7C35,
- 0xBA98, 0x7C36, 0xBA99, 0x7C37, 0xBA9A, 0x7C39, 0xBA9B, 0x7C3A, 0xBA9C, 0x7C3B, 0xBA9D, 0x7C3C, 0xBA9E, 0x7C3D, 0xBA9F, 0x7C3E,
- 0xBAA0, 0x7C42, 0xBAA1, 0x9AB8, 0xBAA2, 0x5B69, 0xBAA3, 0x6D77, 0xBAA4, 0x6C26, 0xBAA5, 0x4EA5, 0xBAA6, 0x5BB3, 0xBAA7, 0x9A87,
- 0xBAA8, 0x9163, 0xBAA9, 0x61A8, 0xBAAA, 0x90AF, 0xBAAB, 0x97E9, 0xBAAC, 0x542B, 0xBAAD, 0x6DB5, 0xBAAE, 0x5BD2, 0xBAAF, 0x51FD,
- 0xBAB0, 0x558A, 0xBAB1, 0x7F55, 0xBAB2, 0x7FF0, 0xBAB3, 0x64BC, 0xBAB4, 0x634D, 0xBAB5, 0x65F1, 0xBAB6, 0x61BE, 0xBAB7, 0x608D,
- 0xBAB8, 0x710A, 0xBAB9, 0x6C57, 0xBABA, 0x6C49, 0xBABB, 0x592F, 0xBABC, 0x676D, 0xBABD, 0x822A, 0xBABE, 0x58D5, 0xBABF, 0x568E,
- 0xBAC0, 0x8C6A, 0xBAC1, 0x6BEB, 0xBAC2, 0x90DD, 0xBAC3, 0x597D, 0xBAC4, 0x8017, 0xBAC5, 0x53F7, 0xBAC6, 0x6D69, 0xBAC7, 0x5475,
- 0xBAC8, 0x559D, 0xBAC9, 0x8377, 0xBACA, 0x83CF, 0xBACB, 0x6838, 0xBACC, 0x79BE, 0xBACD, 0x548C, 0xBACE, 0x4F55, 0xBACF, 0x5408,
- 0xBAD0, 0x76D2, 0xBAD1, 0x8C89, 0xBAD2, 0x9602, 0xBAD3, 0x6CB3, 0xBAD4, 0x6DB8, 0xBAD5, 0x8D6B, 0xBAD6, 0x8910, 0xBAD7, 0x9E64,
- 0xBAD8, 0x8D3A, 0xBAD9, 0x563F, 0xBADA, 0x9ED1, 0xBADB, 0x75D5, 0xBADC, 0x5F88, 0xBADD, 0x72E0, 0xBADE, 0x6068, 0xBADF, 0x54FC,
- 0xBAE0, 0x4EA8, 0xBAE1, 0x6A2A, 0xBAE2, 0x8861, 0xBAE3, 0x6052, 0xBAE4, 0x8F70, 0xBAE5, 0x54C4, 0xBAE6, 0x70D8, 0xBAE7, 0x8679,
- 0xBAE8, 0x9E3F, 0xBAE9, 0x6D2A, 0xBAEA, 0x5B8F, 0xBAEB, 0x5F18, 0xBAEC, 0x7EA2, 0xBAED, 0x5589, 0xBAEE, 0x4FAF, 0xBAEF, 0x7334,
- 0xBAF0, 0x543C, 0xBAF1, 0x539A, 0xBAF2, 0x5019, 0xBAF3, 0x540E, 0xBAF4, 0x547C, 0xBAF5, 0x4E4E, 0xBAF6, 0x5FFD, 0xBAF7, 0x745A,
- 0xBAF8, 0x58F6, 0xBAF9, 0x846B, 0xBAFA, 0x80E1, 0xBAFB, 0x8774, 0xBAFC, 0x72D0, 0xBAFD, 0x7CCA, 0xBAFE, 0x6E56, 0xBB40, 0x7C43,
- 0xBB41, 0x7C44, 0xBB42, 0x7C45, 0xBB43, 0x7C46, 0xBB44, 0x7C47, 0xBB45, 0x7C48, 0xBB46, 0x7C49, 0xBB47, 0x7C4A, 0xBB48, 0x7C4B,
- 0xBB49, 0x7C4C, 0xBB4A, 0x7C4E, 0xBB4B, 0x7C4F, 0xBB4C, 0x7C50, 0xBB4D, 0x7C51, 0xBB4E, 0x7C52, 0xBB4F, 0x7C53, 0xBB50, 0x7C54,
- 0xBB51, 0x7C55, 0xBB52, 0x7C56, 0xBB53, 0x7C57, 0xBB54, 0x7C58, 0xBB55, 0x7C59, 0xBB56, 0x7C5A, 0xBB57, 0x7C5B, 0xBB58, 0x7C5C,
- 0xBB59, 0x7C5D, 0xBB5A, 0x7C5E, 0xBB5B, 0x7C5F, 0xBB5C, 0x7C60, 0xBB5D, 0x7C61, 0xBB5E, 0x7C62, 0xBB5F, 0x7C63, 0xBB60, 0x7C64,
- 0xBB61, 0x7C65, 0xBB62, 0x7C66, 0xBB63, 0x7C67, 0xBB64, 0x7C68, 0xBB65, 0x7C69, 0xBB66, 0x7C6A, 0xBB67, 0x7C6B, 0xBB68, 0x7C6C,
- 0xBB69, 0x7C6D, 0xBB6A, 0x7C6E, 0xBB6B, 0x7C6F, 0xBB6C, 0x7C70, 0xBB6D, 0x7C71, 0xBB6E, 0x7C72, 0xBB6F, 0x7C75, 0xBB70, 0x7C76,
- 0xBB71, 0x7C77, 0xBB72, 0x7C78, 0xBB73, 0x7C79, 0xBB74, 0x7C7A, 0xBB75, 0x7C7E, 0xBB76, 0x7C7F, 0xBB77, 0x7C80, 0xBB78, 0x7C81,
- 0xBB79, 0x7C82, 0xBB7A, 0x7C83, 0xBB7B, 0x7C84, 0xBB7C, 0x7C85, 0xBB7D, 0x7C86, 0xBB7E, 0x7C87, 0xBB80, 0x7C88, 0xBB81, 0x7C8A,
- 0xBB82, 0x7C8B, 0xBB83, 0x7C8C, 0xBB84, 0x7C8D, 0xBB85, 0x7C8E, 0xBB86, 0x7C8F, 0xBB87, 0x7C90, 0xBB88, 0x7C93, 0xBB89, 0x7C94,
- 0xBB8A, 0x7C96, 0xBB8B, 0x7C99, 0xBB8C, 0x7C9A, 0xBB8D, 0x7C9B, 0xBB8E, 0x7CA0, 0xBB8F, 0x7CA1, 0xBB90, 0x7CA3, 0xBB91, 0x7CA6,
- 0xBB92, 0x7CA7, 0xBB93, 0x7CA8, 0xBB94, 0x7CA9, 0xBB95, 0x7CAB, 0xBB96, 0x7CAC, 0xBB97, 0x7CAD, 0xBB98, 0x7CAF, 0xBB99, 0x7CB0,
- 0xBB9A, 0x7CB4, 0xBB9B, 0x7CB5, 0xBB9C, 0x7CB6, 0xBB9D, 0x7CB7, 0xBB9E, 0x7CB8, 0xBB9F, 0x7CBA, 0xBBA0, 0x7CBB, 0xBBA1, 0x5F27,
- 0xBBA2, 0x864E, 0xBBA3, 0x552C, 0xBBA4, 0x62A4, 0xBBA5, 0x4E92, 0xBBA6, 0x6CAA, 0xBBA7, 0x6237, 0xBBA8, 0x82B1, 0xBBA9, 0x54D7,
- 0xBBAA, 0x534E, 0xBBAB, 0x733E, 0xBBAC, 0x6ED1, 0xBBAD, 0x753B, 0xBBAE, 0x5212, 0xBBAF, 0x5316, 0xBBB0, 0x8BDD, 0xBBB1, 0x69D0,
- 0xBBB2, 0x5F8A, 0xBBB3, 0x6000, 0xBBB4, 0x6DEE, 0xBBB5, 0x574F, 0xBBB6, 0x6B22, 0xBBB7, 0x73AF, 0xBBB8, 0x6853, 0xBBB9, 0x8FD8,
- 0xBBBA, 0x7F13, 0xBBBB, 0x6362, 0xBBBC, 0x60A3, 0xBBBD, 0x5524, 0xBBBE, 0x75EA, 0xBBBF, 0x8C62, 0xBBC0, 0x7115, 0xBBC1, 0x6DA3,
- 0xBBC2, 0x5BA6, 0xBBC3, 0x5E7B, 0xBBC4, 0x8352, 0xBBC5, 0x614C, 0xBBC6, 0x9EC4, 0xBBC7, 0x78FA, 0xBBC8, 0x8757, 0xBBC9, 0x7C27,
- 0xBBCA, 0x7687, 0xBBCB, 0x51F0, 0xBBCC, 0x60F6, 0xBBCD, 0x714C, 0xBBCE, 0x6643, 0xBBCF, 0x5E4C, 0xBBD0, 0x604D, 0xBBD1, 0x8C0E,
- 0xBBD2, 0x7070, 0xBBD3, 0x6325, 0xBBD4, 0x8F89, 0xBBD5, 0x5FBD, 0xBBD6, 0x6062, 0xBBD7, 0x86D4, 0xBBD8, 0x56DE, 0xBBD9, 0x6BC1,
- 0xBBDA, 0x6094, 0xBBDB, 0x6167, 0xBBDC, 0x5349, 0xBBDD, 0x60E0, 0xBBDE, 0x6666, 0xBBDF, 0x8D3F, 0xBBE0, 0x79FD, 0xBBE1, 0x4F1A,
- 0xBBE2, 0x70E9, 0xBBE3, 0x6C47, 0xBBE4, 0x8BB3, 0xBBE5, 0x8BF2, 0xBBE6, 0x7ED8, 0xBBE7, 0x8364, 0xBBE8, 0x660F, 0xBBE9, 0x5A5A,
- 0xBBEA, 0x9B42, 0xBBEB, 0x6D51, 0xBBEC, 0x6DF7, 0xBBED, 0x8C41, 0xBBEE, 0x6D3B, 0xBBEF, 0x4F19, 0xBBF0, 0x706B, 0xBBF1, 0x83B7,
- 0xBBF2, 0x6216, 0xBBF3, 0x60D1, 0xBBF4, 0x970D, 0xBBF5, 0x8D27, 0xBBF6, 0x7978, 0xBBF7, 0x51FB, 0xBBF8, 0x573E, 0xBBF9, 0x57FA,
- 0xBBFA, 0x673A, 0xBBFB, 0x7578, 0xBBFC, 0x7A3D, 0xBBFD, 0x79EF, 0xBBFE, 0x7B95, 0xBC40, 0x7CBF, 0xBC41, 0x7CC0, 0xBC42, 0x7CC2,
- 0xBC43, 0x7CC3, 0xBC44, 0x7CC4, 0xBC45, 0x7CC6, 0xBC46, 0x7CC9, 0xBC47, 0x7CCB, 0xBC48, 0x7CCE, 0xBC49, 0x7CCF, 0xBC4A, 0x7CD0,
- 0xBC4B, 0x7CD1, 0xBC4C, 0x7CD2, 0xBC4D, 0x7CD3, 0xBC4E, 0x7CD4, 0xBC4F, 0x7CD8, 0xBC50, 0x7CDA, 0xBC51, 0x7CDB, 0xBC52, 0x7CDD,
- 0xBC53, 0x7CDE, 0xBC54, 0x7CE1, 0xBC55, 0x7CE2, 0xBC56, 0x7CE3, 0xBC57, 0x7CE4, 0xBC58, 0x7CE5, 0xBC59, 0x7CE6, 0xBC5A, 0x7CE7,
- 0xBC5B, 0x7CE9, 0xBC5C, 0x7CEA, 0xBC5D, 0x7CEB, 0xBC5E, 0x7CEC, 0xBC5F, 0x7CED, 0xBC60, 0x7CEE, 0xBC61, 0x7CF0, 0xBC62, 0x7CF1,
- 0xBC63, 0x7CF2, 0xBC64, 0x7CF3, 0xBC65, 0x7CF4, 0xBC66, 0x7CF5, 0xBC67, 0x7CF6, 0xBC68, 0x7CF7, 0xBC69, 0x7CF9, 0xBC6A, 0x7CFA,
- 0xBC6B, 0x7CFC, 0xBC6C, 0x7CFD, 0xBC6D, 0x7CFE, 0xBC6E, 0x7CFF, 0xBC6F, 0x7D00, 0xBC70, 0x7D01, 0xBC71, 0x7D02, 0xBC72, 0x7D03,
- 0xBC73, 0x7D04, 0xBC74, 0x7D05, 0xBC75, 0x7D06, 0xBC76, 0x7D07, 0xBC77, 0x7D08, 0xBC78, 0x7D09, 0xBC79, 0x7D0B, 0xBC7A, 0x7D0C,
- 0xBC7B, 0x7D0D, 0xBC7C, 0x7D0E, 0xBC7D, 0x7D0F, 0xBC7E, 0x7D10, 0xBC80, 0x7D11, 0xBC81, 0x7D12, 0xBC82, 0x7D13, 0xBC83, 0x7D14,
- 0xBC84, 0x7D15, 0xBC85, 0x7D16, 0xBC86, 0x7D17, 0xBC87, 0x7D18, 0xBC88, 0x7D19, 0xBC89, 0x7D1A, 0xBC8A, 0x7D1B, 0xBC8B, 0x7D1C,
- 0xBC8C, 0x7D1D, 0xBC8D, 0x7D1E, 0xBC8E, 0x7D1F, 0xBC8F, 0x7D21, 0xBC90, 0x7D23, 0xBC91, 0x7D24, 0xBC92, 0x7D25, 0xBC93, 0x7D26,
- 0xBC94, 0x7D28, 0xBC95, 0x7D29, 0xBC96, 0x7D2A, 0xBC97, 0x7D2C, 0xBC98, 0x7D2D, 0xBC99, 0x7D2E, 0xBC9A, 0x7D30, 0xBC9B, 0x7D31,
- 0xBC9C, 0x7D32, 0xBC9D, 0x7D33, 0xBC9E, 0x7D34, 0xBC9F, 0x7D35, 0xBCA0, 0x7D36, 0xBCA1, 0x808C, 0xBCA2, 0x9965, 0xBCA3, 0x8FF9,
- 0xBCA4, 0x6FC0, 0xBCA5, 0x8BA5, 0xBCA6, 0x9E21, 0xBCA7, 0x59EC, 0xBCA8, 0x7EE9, 0xBCA9, 0x7F09, 0xBCAA, 0x5409, 0xBCAB, 0x6781,
- 0xBCAC, 0x68D8, 0xBCAD, 0x8F91, 0xBCAE, 0x7C4D, 0xBCAF, 0x96C6, 0xBCB0, 0x53CA, 0xBCB1, 0x6025, 0xBCB2, 0x75BE, 0xBCB3, 0x6C72,
- 0xBCB4, 0x5373, 0xBCB5, 0x5AC9, 0xBCB6, 0x7EA7, 0xBCB7, 0x6324, 0xBCB8, 0x51E0, 0xBCB9, 0x810A, 0xBCBA, 0x5DF1, 0xBCBB, 0x84DF,
- 0xBCBC, 0x6280, 0xBCBD, 0x5180, 0xBCBE, 0x5B63, 0xBCBF, 0x4F0E, 0xBCC0, 0x796D, 0xBCC1, 0x5242, 0xBCC2, 0x60B8, 0xBCC3, 0x6D4E,
- 0xBCC4, 0x5BC4, 0xBCC5, 0x5BC2, 0xBCC6, 0x8BA1, 0xBCC7, 0x8BB0, 0xBCC8, 0x65E2, 0xBCC9, 0x5FCC, 0xBCCA, 0x9645, 0xBCCB, 0x5993,
- 0xBCCC, 0x7EE7, 0xBCCD, 0x7EAA, 0xBCCE, 0x5609, 0xBCCF, 0x67B7, 0xBCD0, 0x5939, 0xBCD1, 0x4F73, 0xBCD2, 0x5BB6, 0xBCD3, 0x52A0,
- 0xBCD4, 0x835A, 0xBCD5, 0x988A, 0xBCD6, 0x8D3E, 0xBCD7, 0x7532, 0xBCD8, 0x94BE, 0xBCD9, 0x5047, 0xBCDA, 0x7A3C, 0xBCDB, 0x4EF7,
- 0xBCDC, 0x67B6, 0xBCDD, 0x9A7E, 0xBCDE, 0x5AC1, 0xBCDF, 0x6B7C, 0xBCE0, 0x76D1, 0xBCE1, 0x575A, 0xBCE2, 0x5C16, 0xBCE3, 0x7B3A,
- 0xBCE4, 0x95F4, 0xBCE5, 0x714E, 0xBCE6, 0x517C, 0xBCE7, 0x80A9, 0xBCE8, 0x8270, 0xBCE9, 0x5978, 0xBCEA, 0x7F04, 0xBCEB, 0x8327,
- 0xBCEC, 0x68C0, 0xBCED, 0x67EC, 0xBCEE, 0x78B1, 0xBCEF, 0x7877, 0xBCF0, 0x62E3, 0xBCF1, 0x6361, 0xBCF2, 0x7B80, 0xBCF3, 0x4FED,
- 0xBCF4, 0x526A, 0xBCF5, 0x51CF, 0xBCF6, 0x8350, 0xBCF7, 0x69DB, 0xBCF8, 0x9274, 0xBCF9, 0x8DF5, 0xBCFA, 0x8D31, 0xBCFB, 0x89C1,
- 0xBCFC, 0x952E, 0xBCFD, 0x7BAD, 0xBCFE, 0x4EF6, 0xBD40, 0x7D37, 0xBD41, 0x7D38, 0xBD42, 0x7D39, 0xBD43, 0x7D3A, 0xBD44, 0x7D3B,
- 0xBD45, 0x7D3C, 0xBD46, 0x7D3D, 0xBD47, 0x7D3E, 0xBD48, 0x7D3F, 0xBD49, 0x7D40, 0xBD4A, 0x7D41, 0xBD4B, 0x7D42, 0xBD4C, 0x7D43,
- 0xBD4D, 0x7D44, 0xBD4E, 0x7D45, 0xBD4F, 0x7D46, 0xBD50, 0x7D47, 0xBD51, 0x7D48, 0xBD52, 0x7D49, 0xBD53, 0x7D4A, 0xBD54, 0x7D4B,
- 0xBD55, 0x7D4C, 0xBD56, 0x7D4D, 0xBD57, 0x7D4E, 0xBD58, 0x7D4F, 0xBD59, 0x7D50, 0xBD5A, 0x7D51, 0xBD5B, 0x7D52, 0xBD5C, 0x7D53,
- 0xBD5D, 0x7D54, 0xBD5E, 0x7D55, 0xBD5F, 0x7D56, 0xBD60, 0x7D57, 0xBD61, 0x7D58, 0xBD62, 0x7D59, 0xBD63, 0x7D5A, 0xBD64, 0x7D5B,
- 0xBD65, 0x7D5C, 0xBD66, 0x7D5D, 0xBD67, 0x7D5E, 0xBD68, 0x7D5F, 0xBD69, 0x7D60, 0xBD6A, 0x7D61, 0xBD6B, 0x7D62, 0xBD6C, 0x7D63,
- 0xBD6D, 0x7D64, 0xBD6E, 0x7D65, 0xBD6F, 0x7D66, 0xBD70, 0x7D67, 0xBD71, 0x7D68, 0xBD72, 0x7D69, 0xBD73, 0x7D6A, 0xBD74, 0x7D6B,
- 0xBD75, 0x7D6C, 0xBD76, 0x7D6D, 0xBD77, 0x7D6F, 0xBD78, 0x7D70, 0xBD79, 0x7D71, 0xBD7A, 0x7D72, 0xBD7B, 0x7D73, 0xBD7C, 0x7D74,
- 0xBD7D, 0x7D75, 0xBD7E, 0x7D76, 0xBD80, 0x7D78, 0xBD81, 0x7D79, 0xBD82, 0x7D7A, 0xBD83, 0x7D7B, 0xBD84, 0x7D7C, 0xBD85, 0x7D7D,
- 0xBD86, 0x7D7E, 0xBD87, 0x7D7F, 0xBD88, 0x7D80, 0xBD89, 0x7D81, 0xBD8A, 0x7D82, 0xBD8B, 0x7D83, 0xBD8C, 0x7D84, 0xBD8D, 0x7D85,
- 0xBD8E, 0x7D86, 0xBD8F, 0x7D87, 0xBD90, 0x7D88, 0xBD91, 0x7D89, 0xBD92, 0x7D8A, 0xBD93, 0x7D8B, 0xBD94, 0x7D8C, 0xBD95, 0x7D8D,
- 0xBD96, 0x7D8E, 0xBD97, 0x7D8F, 0xBD98, 0x7D90, 0xBD99, 0x7D91, 0xBD9A, 0x7D92, 0xBD9B, 0x7D93, 0xBD9C, 0x7D94, 0xBD9D, 0x7D95,
- 0xBD9E, 0x7D96, 0xBD9F, 0x7D97, 0xBDA0, 0x7D98, 0xBDA1, 0x5065, 0xBDA2, 0x8230, 0xBDA3, 0x5251, 0xBDA4, 0x996F, 0xBDA5, 0x6E10,
- 0xBDA6, 0x6E85, 0xBDA7, 0x6DA7, 0xBDA8, 0x5EFA, 0xBDA9, 0x50F5, 0xBDAA, 0x59DC, 0xBDAB, 0x5C06, 0xBDAC, 0x6D46, 0xBDAD, 0x6C5F,
- 0xBDAE, 0x7586, 0xBDAF, 0x848B, 0xBDB0, 0x6868, 0xBDB1, 0x5956, 0xBDB2, 0x8BB2, 0xBDB3, 0x5320, 0xBDB4, 0x9171, 0xBDB5, 0x964D,
- 0xBDB6, 0x8549, 0xBDB7, 0x6912, 0xBDB8, 0x7901, 0xBDB9, 0x7126, 0xBDBA, 0x80F6, 0xBDBB, 0x4EA4, 0xBDBC, 0x90CA, 0xBDBD, 0x6D47,
- 0xBDBE, 0x9A84, 0xBDBF, 0x5A07, 0xBDC0, 0x56BC, 0xBDC1, 0x6405, 0xBDC2, 0x94F0, 0xBDC3, 0x77EB, 0xBDC4, 0x4FA5, 0xBDC5, 0x811A,
- 0xBDC6, 0x72E1, 0xBDC7, 0x89D2, 0xBDC8, 0x997A, 0xBDC9, 0x7F34, 0xBDCA, 0x7EDE, 0xBDCB, 0x527F, 0xBDCC, 0x6559, 0xBDCD, 0x9175,
- 0xBDCE, 0x8F7F, 0xBDCF, 0x8F83, 0xBDD0, 0x53EB, 0xBDD1, 0x7A96, 0xBDD2, 0x63ED, 0xBDD3, 0x63A5, 0xBDD4, 0x7686, 0xBDD5, 0x79F8,
- 0xBDD6, 0x8857, 0xBDD7, 0x9636, 0xBDD8, 0x622A, 0xBDD9, 0x52AB, 0xBDDA, 0x8282, 0xBDDB, 0x6854, 0xBDDC, 0x6770, 0xBDDD, 0x6377,
- 0xBDDE, 0x776B, 0xBDDF, 0x7AED, 0xBDE0, 0x6D01, 0xBDE1, 0x7ED3, 0xBDE2, 0x89E3, 0xBDE3, 0x59D0, 0xBDE4, 0x6212, 0xBDE5, 0x85C9,
- 0xBDE6, 0x82A5, 0xBDE7, 0x754C, 0xBDE8, 0x501F, 0xBDE9, 0x4ECB, 0xBDEA, 0x75A5, 0xBDEB, 0x8BEB, 0xBDEC, 0x5C4A, 0xBDED, 0x5DFE,
- 0xBDEE, 0x7B4B, 0xBDEF, 0x65A4, 0xBDF0, 0x91D1, 0xBDF1, 0x4ECA, 0xBDF2, 0x6D25, 0xBDF3, 0x895F, 0xBDF4, 0x7D27, 0xBDF5, 0x9526,
- 0xBDF6, 0x4EC5, 0xBDF7, 0x8C28, 0xBDF8, 0x8FDB, 0xBDF9, 0x9773, 0xBDFA, 0x664B, 0xBDFB, 0x7981, 0xBDFC, 0x8FD1, 0xBDFD, 0x70EC,
- 0xBDFE, 0x6D78, 0xBE40, 0x7D99, 0xBE41, 0x7D9A, 0xBE42, 0x7D9B, 0xBE43, 0x7D9C, 0xBE44, 0x7D9D, 0xBE45, 0x7D9E, 0xBE46, 0x7D9F,
- 0xBE47, 0x7DA0, 0xBE48, 0x7DA1, 0xBE49, 0x7DA2, 0xBE4A, 0x7DA3, 0xBE4B, 0x7DA4, 0xBE4C, 0x7DA5, 0xBE4D, 0x7DA7, 0xBE4E, 0x7DA8,
- 0xBE4F, 0x7DA9, 0xBE50, 0x7DAA, 0xBE51, 0x7DAB, 0xBE52, 0x7DAC, 0xBE53, 0x7DAD, 0xBE54, 0x7DAF, 0xBE55, 0x7DB0, 0xBE56, 0x7DB1,
- 0xBE57, 0x7DB2, 0xBE58, 0x7DB3, 0xBE59, 0x7DB4, 0xBE5A, 0x7DB5, 0xBE5B, 0x7DB6, 0xBE5C, 0x7DB7, 0xBE5D, 0x7DB8, 0xBE5E, 0x7DB9,
- 0xBE5F, 0x7DBA, 0xBE60, 0x7DBB, 0xBE61, 0x7DBC, 0xBE62, 0x7DBD, 0xBE63, 0x7DBE, 0xBE64, 0x7DBF, 0xBE65, 0x7DC0, 0xBE66, 0x7DC1,
- 0xBE67, 0x7DC2, 0xBE68, 0x7DC3, 0xBE69, 0x7DC4, 0xBE6A, 0x7DC5, 0xBE6B, 0x7DC6, 0xBE6C, 0x7DC7, 0xBE6D, 0x7DC8, 0xBE6E, 0x7DC9,
- 0xBE6F, 0x7DCA, 0xBE70, 0x7DCB, 0xBE71, 0x7DCC, 0xBE72, 0x7DCD, 0xBE73, 0x7DCE, 0xBE74, 0x7DCF, 0xBE75, 0x7DD0, 0xBE76, 0x7DD1,
- 0xBE77, 0x7DD2, 0xBE78, 0x7DD3, 0xBE79, 0x7DD4, 0xBE7A, 0x7DD5, 0xBE7B, 0x7DD6, 0xBE7C, 0x7DD7, 0xBE7D, 0x7DD8, 0xBE7E, 0x7DD9,
- 0xBE80, 0x7DDA, 0xBE81, 0x7DDB, 0xBE82, 0x7DDC, 0xBE83, 0x7DDD, 0xBE84, 0x7DDE, 0xBE85, 0x7DDF, 0xBE86, 0x7DE0, 0xBE87, 0x7DE1,
- 0xBE88, 0x7DE2, 0xBE89, 0x7DE3, 0xBE8A, 0x7DE4, 0xBE8B, 0x7DE5, 0xBE8C, 0x7DE6, 0xBE8D, 0x7DE7, 0xBE8E, 0x7DE8, 0xBE8F, 0x7DE9,
- 0xBE90, 0x7DEA, 0xBE91, 0x7DEB, 0xBE92, 0x7DEC, 0xBE93, 0x7DED, 0xBE94, 0x7DEE, 0xBE95, 0x7DEF, 0xBE96, 0x7DF0, 0xBE97, 0x7DF1,
- 0xBE98, 0x7DF2, 0xBE99, 0x7DF3, 0xBE9A, 0x7DF4, 0xBE9B, 0x7DF5, 0xBE9C, 0x7DF6, 0xBE9D, 0x7DF7, 0xBE9E, 0x7DF8, 0xBE9F, 0x7DF9,
- 0xBEA0, 0x7DFA, 0xBEA1, 0x5C3D, 0xBEA2, 0x52B2, 0xBEA3, 0x8346, 0xBEA4, 0x5162, 0xBEA5, 0x830E, 0xBEA6, 0x775B, 0xBEA7, 0x6676,
- 0xBEA8, 0x9CB8, 0xBEA9, 0x4EAC, 0xBEAA, 0x60CA, 0xBEAB, 0x7CBE, 0xBEAC, 0x7CB3, 0xBEAD, 0x7ECF, 0xBEAE, 0x4E95, 0xBEAF, 0x8B66,
- 0xBEB0, 0x666F, 0xBEB1, 0x9888, 0xBEB2, 0x9759, 0xBEB3, 0x5883, 0xBEB4, 0x656C, 0xBEB5, 0x955C, 0xBEB6, 0x5F84, 0xBEB7, 0x75C9,
- 0xBEB8, 0x9756, 0xBEB9, 0x7ADF, 0xBEBA, 0x7ADE, 0xBEBB, 0x51C0, 0xBEBC, 0x70AF, 0xBEBD, 0x7A98, 0xBEBE, 0x63EA, 0xBEBF, 0x7A76,
- 0xBEC0, 0x7EA0, 0xBEC1, 0x7396, 0xBEC2, 0x97ED, 0xBEC3, 0x4E45, 0xBEC4, 0x7078, 0xBEC5, 0x4E5D, 0xBEC6, 0x9152, 0xBEC7, 0x53A9,
- 0xBEC8, 0x6551, 0xBEC9, 0x65E7, 0xBECA, 0x81FC, 0xBECB, 0x8205, 0xBECC, 0x548E, 0xBECD, 0x5C31, 0xBECE, 0x759A, 0xBECF, 0x97A0,
- 0xBED0, 0x62D8, 0xBED1, 0x72D9, 0xBED2, 0x75BD, 0xBED3, 0x5C45, 0xBED4, 0x9A79, 0xBED5, 0x83CA, 0xBED6, 0x5C40, 0xBED7, 0x5480,
- 0xBED8, 0x77E9, 0xBED9, 0x4E3E, 0xBEDA, 0x6CAE, 0xBEDB, 0x805A, 0xBEDC, 0x62D2, 0xBEDD, 0x636E, 0xBEDE, 0x5DE8, 0xBEDF, 0x5177,
- 0xBEE0, 0x8DDD, 0xBEE1, 0x8E1E, 0xBEE2, 0x952F, 0xBEE3, 0x4FF1, 0xBEE4, 0x53E5, 0xBEE5, 0x60E7, 0xBEE6, 0x70AC, 0xBEE7, 0x5267,
- 0xBEE8, 0x6350, 0xBEE9, 0x9E43, 0xBEEA, 0x5A1F, 0xBEEB, 0x5026, 0xBEEC, 0x7737, 0xBEED, 0x5377, 0xBEEE, 0x7EE2, 0xBEEF, 0x6485,
- 0xBEF0, 0x652B, 0xBEF1, 0x6289, 0xBEF2, 0x6398, 0xBEF3, 0x5014, 0xBEF4, 0x7235, 0xBEF5, 0x89C9, 0xBEF6, 0x51B3, 0xBEF7, 0x8BC0,
- 0xBEF8, 0x7EDD, 0xBEF9, 0x5747, 0xBEFA, 0x83CC, 0xBEFB, 0x94A7, 0xBEFC, 0x519B, 0xBEFD, 0x541B, 0xBEFE, 0x5CFB, 0xBF40, 0x7DFB,
- 0xBF41, 0x7DFC, 0xBF42, 0x7DFD, 0xBF43, 0x7DFE, 0xBF44, 0x7DFF, 0xBF45, 0x7E00, 0xBF46, 0x7E01, 0xBF47, 0x7E02, 0xBF48, 0x7E03,
- 0xBF49, 0x7E04, 0xBF4A, 0x7E05, 0xBF4B, 0x7E06, 0xBF4C, 0x7E07, 0xBF4D, 0x7E08, 0xBF4E, 0x7E09, 0xBF4F, 0x7E0A, 0xBF50, 0x7E0B,
- 0xBF51, 0x7E0C, 0xBF52, 0x7E0D, 0xBF53, 0x7E0E, 0xBF54, 0x7E0F, 0xBF55, 0x7E10, 0xBF56, 0x7E11, 0xBF57, 0x7E12, 0xBF58, 0x7E13,
- 0xBF59, 0x7E14, 0xBF5A, 0x7E15, 0xBF5B, 0x7E16, 0xBF5C, 0x7E17, 0xBF5D, 0x7E18, 0xBF5E, 0x7E19, 0xBF5F, 0x7E1A, 0xBF60, 0x7E1B,
- 0xBF61, 0x7E1C, 0xBF62, 0x7E1D, 0xBF63, 0x7E1E, 0xBF64, 0x7E1F, 0xBF65, 0x7E20, 0xBF66, 0x7E21, 0xBF67, 0x7E22, 0xBF68, 0x7E23,
- 0xBF69, 0x7E24, 0xBF6A, 0x7E25, 0xBF6B, 0x7E26, 0xBF6C, 0x7E27, 0xBF6D, 0x7E28, 0xBF6E, 0x7E29, 0xBF6F, 0x7E2A, 0xBF70, 0x7E2B,
- 0xBF71, 0x7E2C, 0xBF72, 0x7E2D, 0xBF73, 0x7E2E, 0xBF74, 0x7E2F, 0xBF75, 0x7E30, 0xBF76, 0x7E31, 0xBF77, 0x7E32, 0xBF78, 0x7E33,
- 0xBF79, 0x7E34, 0xBF7A, 0x7E35, 0xBF7B, 0x7E36, 0xBF7C, 0x7E37, 0xBF7D, 0x7E38, 0xBF7E, 0x7E39, 0xBF80, 0x7E3A, 0xBF81, 0x7E3C,
- 0xBF82, 0x7E3D, 0xBF83, 0x7E3E, 0xBF84, 0x7E3F, 0xBF85, 0x7E40, 0xBF86, 0x7E42, 0xBF87, 0x7E43, 0xBF88, 0x7E44, 0xBF89, 0x7E45,
- 0xBF8A, 0x7E46, 0xBF8B, 0x7E48, 0xBF8C, 0x7E49, 0xBF8D, 0x7E4A, 0xBF8E, 0x7E4B, 0xBF8F, 0x7E4C, 0xBF90, 0x7E4D, 0xBF91, 0x7E4E,
- 0xBF92, 0x7E4F, 0xBF93, 0x7E50, 0xBF94, 0x7E51, 0xBF95, 0x7E52, 0xBF96, 0x7E53, 0xBF97, 0x7E54, 0xBF98, 0x7E55, 0xBF99, 0x7E56,
- 0xBF9A, 0x7E57, 0xBF9B, 0x7E58, 0xBF9C, 0x7E59, 0xBF9D, 0x7E5A, 0xBF9E, 0x7E5B, 0xBF9F, 0x7E5C, 0xBFA0, 0x7E5D, 0xBFA1, 0x4FCA,
- 0xBFA2, 0x7AE3, 0xBFA3, 0x6D5A, 0xBFA4, 0x90E1, 0xBFA5, 0x9A8F, 0xBFA6, 0x5580, 0xBFA7, 0x5496, 0xBFA8, 0x5361, 0xBFA9, 0x54AF,
- 0xBFAA, 0x5F00, 0xBFAB, 0x63E9, 0xBFAC, 0x6977, 0xBFAD, 0x51EF, 0xBFAE, 0x6168, 0xBFAF, 0x520A, 0xBFB0, 0x582A, 0xBFB1, 0x52D8,
- 0xBFB2, 0x574E, 0xBFB3, 0x780D, 0xBFB4, 0x770B, 0xBFB5, 0x5EB7, 0xBFB6, 0x6177, 0xBFB7, 0x7CE0, 0xBFB8, 0x625B, 0xBFB9, 0x6297,
- 0xBFBA, 0x4EA2, 0xBFBB, 0x7095, 0xBFBC, 0x8003, 0xBFBD, 0x62F7, 0xBFBE, 0x70E4, 0xBFBF, 0x9760, 0xBFC0, 0x5777, 0xBFC1, 0x82DB,
- 0xBFC2, 0x67EF, 0xBFC3, 0x68F5, 0xBFC4, 0x78D5, 0xBFC5, 0x9897, 0xBFC6, 0x79D1, 0xBFC7, 0x58F3, 0xBFC8, 0x54B3, 0xBFC9, 0x53EF,
- 0xBFCA, 0x6E34, 0xBFCB, 0x514B, 0xBFCC, 0x523B, 0xBFCD, 0x5BA2, 0xBFCE, 0x8BFE, 0xBFCF, 0x80AF, 0xBFD0, 0x5543, 0xBFD1, 0x57A6,
- 0xBFD2, 0x6073, 0xBFD3, 0x5751, 0xBFD4, 0x542D, 0xBFD5, 0x7A7A, 0xBFD6, 0x6050, 0xBFD7, 0x5B54, 0xBFD8, 0x63A7, 0xBFD9, 0x62A0,
- 0xBFDA, 0x53E3, 0xBFDB, 0x6263, 0xBFDC, 0x5BC7, 0xBFDD, 0x67AF, 0xBFDE, 0x54ED, 0xBFDF, 0x7A9F, 0xBFE0, 0x82E6, 0xBFE1, 0x9177,
- 0xBFE2, 0x5E93, 0xBFE3, 0x88E4, 0xBFE4, 0x5938, 0xBFE5, 0x57AE, 0xBFE6, 0x630E, 0xBFE7, 0x8DE8, 0xBFE8, 0x80EF, 0xBFE9, 0x5757,
- 0xBFEA, 0x7B77, 0xBFEB, 0x4FA9, 0xBFEC, 0x5FEB, 0xBFED, 0x5BBD, 0xBFEE, 0x6B3E, 0xBFEF, 0x5321, 0xBFF0, 0x7B50, 0xBFF1, 0x72C2,
- 0xBFF2, 0x6846, 0xBFF3, 0x77FF, 0xBFF4, 0x7736, 0xBFF5, 0x65F7, 0xBFF6, 0x51B5, 0xBFF7, 0x4E8F, 0xBFF8, 0x76D4, 0xBFF9, 0x5CBF,
- 0xBFFA, 0x7AA5, 0xBFFB, 0x8475, 0xBFFC, 0x594E, 0xBFFD, 0x9B41, 0xBFFE, 0x5080, 0xC040, 0x7E5E, 0xC041, 0x7E5F, 0xC042, 0x7E60,
- 0xC043, 0x7E61, 0xC044, 0x7E62, 0xC045, 0x7E63, 0xC046, 0x7E64, 0xC047, 0x7E65, 0xC048, 0x7E66, 0xC049, 0x7E67, 0xC04A, 0x7E68,
- 0xC04B, 0x7E69, 0xC04C, 0x7E6A, 0xC04D, 0x7E6B, 0xC04E, 0x7E6C, 0xC04F, 0x7E6D, 0xC050, 0x7E6E, 0xC051, 0x7E6F, 0xC052, 0x7E70,
- 0xC053, 0x7E71, 0xC054, 0x7E72, 0xC055, 0x7E73, 0xC056, 0x7E74, 0xC057, 0x7E75, 0xC058, 0x7E76, 0xC059, 0x7E77, 0xC05A, 0x7E78,
- 0xC05B, 0x7E79, 0xC05C, 0x7E7A, 0xC05D, 0x7E7B, 0xC05E, 0x7E7C, 0xC05F, 0x7E7D, 0xC060, 0x7E7E, 0xC061, 0x7E7F, 0xC062, 0x7E80,
- 0xC063, 0x7E81, 0xC064, 0x7E83, 0xC065, 0x7E84, 0xC066, 0x7E85, 0xC067, 0x7E86, 0xC068, 0x7E87, 0xC069, 0x7E88, 0xC06A, 0x7E89,
- 0xC06B, 0x7E8A, 0xC06C, 0x7E8B, 0xC06D, 0x7E8C, 0xC06E, 0x7E8D, 0xC06F, 0x7E8E, 0xC070, 0x7E8F, 0xC071, 0x7E90, 0xC072, 0x7E91,
- 0xC073, 0x7E92, 0xC074, 0x7E93, 0xC075, 0x7E94, 0xC076, 0x7E95, 0xC077, 0x7E96, 0xC078, 0x7E97, 0xC079, 0x7E98, 0xC07A, 0x7E99,
- 0xC07B, 0x7E9A, 0xC07C, 0x7E9C, 0xC07D, 0x7E9D, 0xC07E, 0x7E9E, 0xC080, 0x7EAE, 0xC081, 0x7EB4, 0xC082, 0x7EBB, 0xC083, 0x7EBC,
- 0xC084, 0x7ED6, 0xC085, 0x7EE4, 0xC086, 0x7EEC, 0xC087, 0x7EF9, 0xC088, 0x7F0A, 0xC089, 0x7F10, 0xC08A, 0x7F1E, 0xC08B, 0x7F37,
- 0xC08C, 0x7F39, 0xC08D, 0x7F3B, 0xC08E, 0x7F3C, 0xC08F, 0x7F3D, 0xC090, 0x7F3E, 0xC091, 0x7F3F, 0xC092, 0x7F40, 0xC093, 0x7F41,
- 0xC094, 0x7F43, 0xC095, 0x7F46, 0xC096, 0x7F47, 0xC097, 0x7F48, 0xC098, 0x7F49, 0xC099, 0x7F4A, 0xC09A, 0x7F4B, 0xC09B, 0x7F4C,
- 0xC09C, 0x7F4D, 0xC09D, 0x7F4E, 0xC09E, 0x7F4F, 0xC09F, 0x7F52, 0xC0A0, 0x7F53, 0xC0A1, 0x9988, 0xC0A2, 0x6127, 0xC0A3, 0x6E83,
- 0xC0A4, 0x5764, 0xC0A5, 0x6606, 0xC0A6, 0x6346, 0xC0A7, 0x56F0, 0xC0A8, 0x62EC, 0xC0A9, 0x6269, 0xC0AA, 0x5ED3, 0xC0AB, 0x9614,
- 0xC0AC, 0x5783, 0xC0AD, 0x62C9, 0xC0AE, 0x5587, 0xC0AF, 0x8721, 0xC0B0, 0x814A, 0xC0B1, 0x8FA3, 0xC0B2, 0x5566, 0xC0B3, 0x83B1,
- 0xC0B4, 0x6765, 0xC0B5, 0x8D56, 0xC0B6, 0x84DD, 0xC0B7, 0x5A6A, 0xC0B8, 0x680F, 0xC0B9, 0x62E6, 0xC0BA, 0x7BEE, 0xC0BB, 0x9611,
- 0xC0BC, 0x5170, 0xC0BD, 0x6F9C, 0xC0BE, 0x8C30, 0xC0BF, 0x63FD, 0xC0C0, 0x89C8, 0xC0C1, 0x61D2, 0xC0C2, 0x7F06, 0xC0C3, 0x70C2,
- 0xC0C4, 0x6EE5, 0xC0C5, 0x7405, 0xC0C6, 0x6994, 0xC0C7, 0x72FC, 0xC0C8, 0x5ECA, 0xC0C9, 0x90CE, 0xC0CA, 0x6717, 0xC0CB, 0x6D6A,
- 0xC0CC, 0x635E, 0xC0CD, 0x52B3, 0xC0CE, 0x7262, 0xC0CF, 0x8001, 0xC0D0, 0x4F6C, 0xC0D1, 0x59E5, 0xC0D2, 0x916A, 0xC0D3, 0x70D9,
- 0xC0D4, 0x6D9D, 0xC0D5, 0x52D2, 0xC0D6, 0x4E50, 0xC0D7, 0x96F7, 0xC0D8, 0x956D, 0xC0D9, 0x857E, 0xC0DA, 0x78CA, 0xC0DB, 0x7D2F,
- 0xC0DC, 0x5121, 0xC0DD, 0x5792, 0xC0DE, 0x64C2, 0xC0DF, 0x808B, 0xC0E0, 0x7C7B, 0xC0E1, 0x6CEA, 0xC0E2, 0x68F1, 0xC0E3, 0x695E,
- 0xC0E4, 0x51B7, 0xC0E5, 0x5398, 0xC0E6, 0x68A8, 0xC0E7, 0x7281, 0xC0E8, 0x9ECE, 0xC0E9, 0x7BF1, 0xC0EA, 0x72F8, 0xC0EB, 0x79BB,
- 0xC0EC, 0x6F13, 0xC0ED, 0x7406, 0xC0EE, 0x674E, 0xC0EF, 0x91CC, 0xC0F0, 0x9CA4, 0xC0F1, 0x793C, 0xC0F2, 0x8389, 0xC0F3, 0x8354,
- 0xC0F4, 0x540F, 0xC0F5, 0x6817, 0xC0F6, 0x4E3D, 0xC0F7, 0x5389, 0xC0F8, 0x52B1, 0xC0F9, 0x783E, 0xC0FA, 0x5386, 0xC0FB, 0x5229,
- 0xC0FC, 0x5088, 0xC0FD, 0x4F8B, 0xC0FE, 0x4FD0, 0xC140, 0x7F56, 0xC141, 0x7F59, 0xC142, 0x7F5B, 0xC143, 0x7F5C, 0xC144, 0x7F5D,
- 0xC145, 0x7F5E, 0xC146, 0x7F60, 0xC147, 0x7F63, 0xC148, 0x7F64, 0xC149, 0x7F65, 0xC14A, 0x7F66, 0xC14B, 0x7F67, 0xC14C, 0x7F6B,
- 0xC14D, 0x7F6C, 0xC14E, 0x7F6D, 0xC14F, 0x7F6F, 0xC150, 0x7F70, 0xC151, 0x7F73, 0xC152, 0x7F75, 0xC153, 0x7F76, 0xC154, 0x7F77,
- 0xC155, 0x7F78, 0xC156, 0x7F7A, 0xC157, 0x7F7B, 0xC158, 0x7F7C, 0xC159, 0x7F7D, 0xC15A, 0x7F7F, 0xC15B, 0x7F80, 0xC15C, 0x7F82,
- 0xC15D, 0x7F83, 0xC15E, 0x7F84, 0xC15F, 0x7F85, 0xC160, 0x7F86, 0xC161, 0x7F87, 0xC162, 0x7F88, 0xC163, 0x7F89, 0xC164, 0x7F8B,
- 0xC165, 0x7F8D, 0xC166, 0x7F8F, 0xC167, 0x7F90, 0xC168, 0x7F91, 0xC169, 0x7F92, 0xC16A, 0x7F93, 0xC16B, 0x7F95, 0xC16C, 0x7F96,
- 0xC16D, 0x7F97, 0xC16E, 0x7F98, 0xC16F, 0x7F99, 0xC170, 0x7F9B, 0xC171, 0x7F9C, 0xC172, 0x7FA0, 0xC173, 0x7FA2, 0xC174, 0x7FA3,
- 0xC175, 0x7FA5, 0xC176, 0x7FA6, 0xC177, 0x7FA8, 0xC178, 0x7FA9, 0xC179, 0x7FAA, 0xC17A, 0x7FAB, 0xC17B, 0x7FAC, 0xC17C, 0x7FAD,
- 0xC17D, 0x7FAE, 0xC17E, 0x7FB1, 0xC180, 0x7FB3, 0xC181, 0x7FB4, 0xC182, 0x7FB5, 0xC183, 0x7FB6, 0xC184, 0x7FB7, 0xC185, 0x7FBA,
- 0xC186, 0x7FBB, 0xC187, 0x7FBE, 0xC188, 0x7FC0, 0xC189, 0x7FC2, 0xC18A, 0x7FC3, 0xC18B, 0x7FC4, 0xC18C, 0x7FC6, 0xC18D, 0x7FC7,
- 0xC18E, 0x7FC8, 0xC18F, 0x7FC9, 0xC190, 0x7FCB, 0xC191, 0x7FCD, 0xC192, 0x7FCF, 0xC193, 0x7FD0, 0xC194, 0x7FD1, 0xC195, 0x7FD2,
- 0xC196, 0x7FD3, 0xC197, 0x7FD6, 0xC198, 0x7FD7, 0xC199, 0x7FD9, 0xC19A, 0x7FDA, 0xC19B, 0x7FDB, 0xC19C, 0x7FDC, 0xC19D, 0x7FDD,
- 0xC19E, 0x7FDE, 0xC19F, 0x7FE2, 0xC1A0, 0x7FE3, 0xC1A1, 0x75E2, 0xC1A2, 0x7ACB, 0xC1A3, 0x7C92, 0xC1A4, 0x6CA5, 0xC1A5, 0x96B6,
- 0xC1A6, 0x529B, 0xC1A7, 0x7483, 0xC1A8, 0x54E9, 0xC1A9, 0x4FE9, 0xC1AA, 0x8054, 0xC1AB, 0x83B2, 0xC1AC, 0x8FDE, 0xC1AD, 0x9570,
- 0xC1AE, 0x5EC9, 0xC1AF, 0x601C, 0xC1B0, 0x6D9F, 0xC1B1, 0x5E18, 0xC1B2, 0x655B, 0xC1B3, 0x8138, 0xC1B4, 0x94FE, 0xC1B5, 0x604B,
- 0xC1B6, 0x70BC, 0xC1B7, 0x7EC3, 0xC1B8, 0x7CAE, 0xC1B9, 0x51C9, 0xC1BA, 0x6881, 0xC1BB, 0x7CB1, 0xC1BC, 0x826F, 0xC1BD, 0x4E24,
- 0xC1BE, 0x8F86, 0xC1BF, 0x91CF, 0xC1C0, 0x667E, 0xC1C1, 0x4EAE, 0xC1C2, 0x8C05, 0xC1C3, 0x64A9, 0xC1C4, 0x804A, 0xC1C5, 0x50DA,
- 0xC1C6, 0x7597, 0xC1C7, 0x71CE, 0xC1C8, 0x5BE5, 0xC1C9, 0x8FBD, 0xC1CA, 0x6F66, 0xC1CB, 0x4E86, 0xC1CC, 0x6482, 0xC1CD, 0x9563,
- 0xC1CE, 0x5ED6, 0xC1CF, 0x6599, 0xC1D0, 0x5217, 0xC1D1, 0x88C2, 0xC1D2, 0x70C8, 0xC1D3, 0x52A3, 0xC1D4, 0x730E, 0xC1D5, 0x7433,
- 0xC1D6, 0x6797, 0xC1D7, 0x78F7, 0xC1D8, 0x9716, 0xC1D9, 0x4E34, 0xC1DA, 0x90BB, 0xC1DB, 0x9CDE, 0xC1DC, 0x6DCB, 0xC1DD, 0x51DB,
- 0xC1DE, 0x8D41, 0xC1DF, 0x541D, 0xC1E0, 0x62CE, 0xC1E1, 0x73B2, 0xC1E2, 0x83F1, 0xC1E3, 0x96F6, 0xC1E4, 0x9F84, 0xC1E5, 0x94C3,
- 0xC1E6, 0x4F36, 0xC1E7, 0x7F9A, 0xC1E8, 0x51CC, 0xC1E9, 0x7075, 0xC1EA, 0x9675, 0xC1EB, 0x5CAD, 0xC1EC, 0x9886, 0xC1ED, 0x53E6,
- 0xC1EE, 0x4EE4, 0xC1EF, 0x6E9C, 0xC1F0, 0x7409, 0xC1F1, 0x69B4, 0xC1F2, 0x786B, 0xC1F3, 0x998F, 0xC1F4, 0x7559, 0xC1F5, 0x5218,
- 0xC1F6, 0x7624, 0xC1F7, 0x6D41, 0xC1F8, 0x67F3, 0xC1F9, 0x516D, 0xC1FA, 0x9F99, 0xC1FB, 0x804B, 0xC1FC, 0x5499, 0xC1FD, 0x7B3C,
- 0xC1FE, 0x7ABF, 0xC240, 0x7FE4, 0xC241, 0x7FE7, 0xC242, 0x7FE8, 0xC243, 0x7FEA, 0xC244, 0x7FEB, 0xC245, 0x7FEC, 0xC246, 0x7FED,
- 0xC247, 0x7FEF, 0xC248, 0x7FF2, 0xC249, 0x7FF4, 0xC24A, 0x7FF5, 0xC24B, 0x7FF6, 0xC24C, 0x7FF7, 0xC24D, 0x7FF8, 0xC24E, 0x7FF9,
- 0xC24F, 0x7FFA, 0xC250, 0x7FFD, 0xC251, 0x7FFE, 0xC252, 0x7FFF, 0xC253, 0x8002, 0xC254, 0x8007, 0xC255, 0x8008, 0xC256, 0x8009,
- 0xC257, 0x800A, 0xC258, 0x800E, 0xC259, 0x800F, 0xC25A, 0x8011, 0xC25B, 0x8013, 0xC25C, 0x801A, 0xC25D, 0x801B, 0xC25E, 0x801D,
- 0xC25F, 0x801E, 0xC260, 0x801F, 0xC261, 0x8021, 0xC262, 0x8023, 0xC263, 0x8024, 0xC264, 0x802B, 0xC265, 0x802C, 0xC266, 0x802D,
- 0xC267, 0x802E, 0xC268, 0x802F, 0xC269, 0x8030, 0xC26A, 0x8032, 0xC26B, 0x8034, 0xC26C, 0x8039, 0xC26D, 0x803A, 0xC26E, 0x803C,
- 0xC26F, 0x803E, 0xC270, 0x8040, 0xC271, 0x8041, 0xC272, 0x8044, 0xC273, 0x8045, 0xC274, 0x8047, 0xC275, 0x8048, 0xC276, 0x8049,
- 0xC277, 0x804E, 0xC278, 0x804F, 0xC279, 0x8050, 0xC27A, 0x8051, 0xC27B, 0x8053, 0xC27C, 0x8055, 0xC27D, 0x8056, 0xC27E, 0x8057,
- 0xC280, 0x8059, 0xC281, 0x805B, 0xC282, 0x805C, 0xC283, 0x805D, 0xC284, 0x805E, 0xC285, 0x805F, 0xC286, 0x8060, 0xC287, 0x8061,
- 0xC288, 0x8062, 0xC289, 0x8063, 0xC28A, 0x8064, 0xC28B, 0x8065, 0xC28C, 0x8066, 0xC28D, 0x8067, 0xC28E, 0x8068, 0xC28F, 0x806B,
- 0xC290, 0x806C, 0xC291, 0x806D, 0xC292, 0x806E, 0xC293, 0x806F, 0xC294, 0x8070, 0xC295, 0x8072, 0xC296, 0x8073, 0xC297, 0x8074,
- 0xC298, 0x8075, 0xC299, 0x8076, 0xC29A, 0x8077, 0xC29B, 0x8078, 0xC29C, 0x8079, 0xC29D, 0x807A, 0xC29E, 0x807B, 0xC29F, 0x807C,
- 0xC2A0, 0x807D, 0xC2A1, 0x9686, 0xC2A2, 0x5784, 0xC2A3, 0x62E2, 0xC2A4, 0x9647, 0xC2A5, 0x697C, 0xC2A6, 0x5A04, 0xC2A7, 0x6402,
- 0xC2A8, 0x7BD3, 0xC2A9, 0x6F0F, 0xC2AA, 0x964B, 0xC2AB, 0x82A6, 0xC2AC, 0x5362, 0xC2AD, 0x9885, 0xC2AE, 0x5E90, 0xC2AF, 0x7089,
- 0xC2B0, 0x63B3, 0xC2B1, 0x5364, 0xC2B2, 0x864F, 0xC2B3, 0x9C81, 0xC2B4, 0x9E93, 0xC2B5, 0x788C, 0xC2B6, 0x9732, 0xC2B7, 0x8DEF,
- 0xC2B8, 0x8D42, 0xC2B9, 0x9E7F, 0xC2BA, 0x6F5E, 0xC2BB, 0x7984, 0xC2BC, 0x5F55, 0xC2BD, 0x9646, 0xC2BE, 0x622E, 0xC2BF, 0x9A74,
- 0xC2C0, 0x5415, 0xC2C1, 0x94DD, 0xC2C2, 0x4FA3, 0xC2C3, 0x65C5, 0xC2C4, 0x5C65, 0xC2C5, 0x5C61, 0xC2C6, 0x7F15, 0xC2C7, 0x8651,
- 0xC2C8, 0x6C2F, 0xC2C9, 0x5F8B, 0xC2CA, 0x7387, 0xC2CB, 0x6EE4, 0xC2CC, 0x7EFF, 0xC2CD, 0x5CE6, 0xC2CE, 0x631B, 0xC2CF, 0x5B6A,
- 0xC2D0, 0x6EE6, 0xC2D1, 0x5375, 0xC2D2, 0x4E71, 0xC2D3, 0x63A0, 0xC2D4, 0x7565, 0xC2D5, 0x62A1, 0xC2D6, 0x8F6E, 0xC2D7, 0x4F26,
- 0xC2D8, 0x4ED1, 0xC2D9, 0x6CA6, 0xC2DA, 0x7EB6, 0xC2DB, 0x8BBA, 0xC2DC, 0x841D, 0xC2DD, 0x87BA, 0xC2DE, 0x7F57, 0xC2DF, 0x903B,
- 0xC2E0, 0x9523, 0xC2E1, 0x7BA9, 0xC2E2, 0x9AA1, 0xC2E3, 0x88F8, 0xC2E4, 0x843D, 0xC2E5, 0x6D1B, 0xC2E6, 0x9A86, 0xC2E7, 0x7EDC,
- 0xC2E8, 0x5988, 0xC2E9, 0x9EBB, 0xC2EA, 0x739B, 0xC2EB, 0x7801, 0xC2EC, 0x8682, 0xC2ED, 0x9A6C, 0xC2EE, 0x9A82, 0xC2EF, 0x561B,
- 0xC2F0, 0x5417, 0xC2F1, 0x57CB, 0xC2F2, 0x4E70, 0xC2F3, 0x9EA6, 0xC2F4, 0x5356, 0xC2F5, 0x8FC8, 0xC2F6, 0x8109, 0xC2F7, 0x7792,
- 0xC2F8, 0x9992, 0xC2F9, 0x86EE, 0xC2FA, 0x6EE1, 0xC2FB, 0x8513, 0xC2FC, 0x66FC, 0xC2FD, 0x6162, 0xC2FE, 0x6F2B, 0xC340, 0x807E,
- 0xC341, 0x8081, 0xC342, 0x8082, 0xC343, 0x8085, 0xC344, 0x8088, 0xC345, 0x808A, 0xC346, 0x808D, 0xC347, 0x808E, 0xC348, 0x808F,
- 0xC349, 0x8090, 0xC34A, 0x8091, 0xC34B, 0x8092, 0xC34C, 0x8094, 0xC34D, 0x8095, 0xC34E, 0x8097, 0xC34F, 0x8099, 0xC350, 0x809E,
- 0xC351, 0x80A3, 0xC352, 0x80A6, 0xC353, 0x80A7, 0xC354, 0x80A8, 0xC355, 0x80AC, 0xC356, 0x80B0, 0xC357, 0x80B3, 0xC358, 0x80B5,
- 0xC359, 0x80B6, 0xC35A, 0x80B8, 0xC35B, 0x80B9, 0xC35C, 0x80BB, 0xC35D, 0x80C5, 0xC35E, 0x80C7, 0xC35F, 0x80C8, 0xC360, 0x80C9,
- 0xC361, 0x80CA, 0xC362, 0x80CB, 0xC363, 0x80CF, 0xC364, 0x80D0, 0xC365, 0x80D1, 0xC366, 0x80D2, 0xC367, 0x80D3, 0xC368, 0x80D4,
- 0xC369, 0x80D5, 0xC36A, 0x80D8, 0xC36B, 0x80DF, 0xC36C, 0x80E0, 0xC36D, 0x80E2, 0xC36E, 0x80E3, 0xC36F, 0x80E6, 0xC370, 0x80EE,
- 0xC371, 0x80F5, 0xC372, 0x80F7, 0xC373, 0x80F9, 0xC374, 0x80FB, 0xC375, 0x80FE, 0xC376, 0x80FF, 0xC377, 0x8100, 0xC378, 0x8101,
- 0xC379, 0x8103, 0xC37A, 0x8104, 0xC37B, 0x8105, 0xC37C, 0x8107, 0xC37D, 0x8108, 0xC37E, 0x810B, 0xC380, 0x810C, 0xC381, 0x8115,
- 0xC382, 0x8117, 0xC383, 0x8119, 0xC384, 0x811B, 0xC385, 0x811C, 0xC386, 0x811D, 0xC387, 0x811F, 0xC388, 0x8120, 0xC389, 0x8121,
- 0xC38A, 0x8122, 0xC38B, 0x8123, 0xC38C, 0x8124, 0xC38D, 0x8125, 0xC38E, 0x8126, 0xC38F, 0x8127, 0xC390, 0x8128, 0xC391, 0x8129,
- 0xC392, 0x812A, 0xC393, 0x812B, 0xC394, 0x812D, 0xC395, 0x812E, 0xC396, 0x8130, 0xC397, 0x8133, 0xC398, 0x8134, 0xC399, 0x8135,
- 0xC39A, 0x8137, 0xC39B, 0x8139, 0xC39C, 0x813A, 0xC39D, 0x813B, 0xC39E, 0x813C, 0xC39F, 0x813D, 0xC3A0, 0x813F, 0xC3A1, 0x8C29,
- 0xC3A2, 0x8292, 0xC3A3, 0x832B, 0xC3A4, 0x76F2, 0xC3A5, 0x6C13, 0xC3A6, 0x5FD9, 0xC3A7, 0x83BD, 0xC3A8, 0x732B, 0xC3A9, 0x8305,
- 0xC3AA, 0x951A, 0xC3AB, 0x6BDB, 0xC3AC, 0x77DB, 0xC3AD, 0x94C6, 0xC3AE, 0x536F, 0xC3AF, 0x8302, 0xC3B0, 0x5192, 0xC3B1, 0x5E3D,
- 0xC3B2, 0x8C8C, 0xC3B3, 0x8D38, 0xC3B4, 0x4E48, 0xC3B5, 0x73AB, 0xC3B6, 0x679A, 0xC3B7, 0x6885, 0xC3B8, 0x9176, 0xC3B9, 0x9709,
- 0xC3BA, 0x7164, 0xC3BB, 0x6CA1, 0xC3BC, 0x7709, 0xC3BD, 0x5A92, 0xC3BE, 0x9541, 0xC3BF, 0x6BCF, 0xC3C0, 0x7F8E, 0xC3C1, 0x6627,
- 0xC3C2, 0x5BD0, 0xC3C3, 0x59B9, 0xC3C4, 0x5A9A, 0xC3C5, 0x95E8, 0xC3C6, 0x95F7, 0xC3C7, 0x4EEC, 0xC3C8, 0x840C, 0xC3C9, 0x8499,
- 0xC3CA, 0x6AAC, 0xC3CB, 0x76DF, 0xC3CC, 0x9530, 0xC3CD, 0x731B, 0xC3CE, 0x68A6, 0xC3CF, 0x5B5F, 0xC3D0, 0x772F, 0xC3D1, 0x919A,
- 0xC3D2, 0x9761, 0xC3D3, 0x7CDC, 0xC3D4, 0x8FF7, 0xC3D5, 0x8C1C, 0xC3D6, 0x5F25, 0xC3D7, 0x7C73, 0xC3D8, 0x79D8, 0xC3D9, 0x89C5,
- 0xC3DA, 0x6CCC, 0xC3DB, 0x871C, 0xC3DC, 0x5BC6, 0xC3DD, 0x5E42, 0xC3DE, 0x68C9, 0xC3DF, 0x7720, 0xC3E0, 0x7EF5, 0xC3E1, 0x5195,
- 0xC3E2, 0x514D, 0xC3E3, 0x52C9, 0xC3E4, 0x5A29, 0xC3E5, 0x7F05, 0xC3E6, 0x9762, 0xC3E7, 0x82D7, 0xC3E8, 0x63CF, 0xC3E9, 0x7784,
- 0xC3EA, 0x85D0, 0xC3EB, 0x79D2, 0xC3EC, 0x6E3A, 0xC3ED, 0x5E99, 0xC3EE, 0x5999, 0xC3EF, 0x8511, 0xC3F0, 0x706D, 0xC3F1, 0x6C11,
- 0xC3F2, 0x62BF, 0xC3F3, 0x76BF, 0xC3F4, 0x654F, 0xC3F5, 0x60AF, 0xC3F6, 0x95FD, 0xC3F7, 0x660E, 0xC3F8, 0x879F, 0xC3F9, 0x9E23,
- 0xC3FA, 0x94ED, 0xC3FB, 0x540D, 0xC3FC, 0x547D, 0xC3FD, 0x8C2C, 0xC3FE, 0x6478, 0xC440, 0x8140, 0xC441, 0x8141, 0xC442, 0x8142,
- 0xC443, 0x8143, 0xC444, 0x8144, 0xC445, 0x8145, 0xC446, 0x8147, 0xC447, 0x8149, 0xC448, 0x814D, 0xC449, 0x814E, 0xC44A, 0x814F,
- 0xC44B, 0x8152, 0xC44C, 0x8156, 0xC44D, 0x8157, 0xC44E, 0x8158, 0xC44F, 0x815B, 0xC450, 0x815C, 0xC451, 0x815D, 0xC452, 0x815E,
- 0xC453, 0x815F, 0xC454, 0x8161, 0xC455, 0x8162, 0xC456, 0x8163, 0xC457, 0x8164, 0xC458, 0x8166, 0xC459, 0x8168, 0xC45A, 0x816A,
- 0xC45B, 0x816B, 0xC45C, 0x816C, 0xC45D, 0x816F, 0xC45E, 0x8172, 0xC45F, 0x8173, 0xC460, 0x8175, 0xC461, 0x8176, 0xC462, 0x8177,
- 0xC463, 0x8178, 0xC464, 0x8181, 0xC465, 0x8183, 0xC466, 0x8184, 0xC467, 0x8185, 0xC468, 0x8186, 0xC469, 0x8187, 0xC46A, 0x8189,
- 0xC46B, 0x818B, 0xC46C, 0x818C, 0xC46D, 0x818D, 0xC46E, 0x818E, 0xC46F, 0x8190, 0xC470, 0x8192, 0xC471, 0x8193, 0xC472, 0x8194,
- 0xC473, 0x8195, 0xC474, 0x8196, 0xC475, 0x8197, 0xC476, 0x8199, 0xC477, 0x819A, 0xC478, 0x819E, 0xC479, 0x819F, 0xC47A, 0x81A0,
- 0xC47B, 0x81A1, 0xC47C, 0x81A2, 0xC47D, 0x81A4, 0xC47E, 0x81A5, 0xC480, 0x81A7, 0xC481, 0x81A9, 0xC482, 0x81AB, 0xC483, 0x81AC,
- 0xC484, 0x81AD, 0xC485, 0x81AE, 0xC486, 0x81AF, 0xC487, 0x81B0, 0xC488, 0x81B1, 0xC489, 0x81B2, 0xC48A, 0x81B4, 0xC48B, 0x81B5,
- 0xC48C, 0x81B6, 0xC48D, 0x81B7, 0xC48E, 0x81B8, 0xC48F, 0x81B9, 0xC490, 0x81BC, 0xC491, 0x81BD, 0xC492, 0x81BE, 0xC493, 0x81BF,
- 0xC494, 0x81C4, 0xC495, 0x81C5, 0xC496, 0x81C7, 0xC497, 0x81C8, 0xC498, 0x81C9, 0xC499, 0x81CB, 0xC49A, 0x81CD, 0xC49B, 0x81CE,
- 0xC49C, 0x81CF, 0xC49D, 0x81D0, 0xC49E, 0x81D1, 0xC49F, 0x81D2, 0xC4A0, 0x81D3, 0xC4A1, 0x6479, 0xC4A2, 0x8611, 0xC4A3, 0x6A21,
- 0xC4A4, 0x819C, 0xC4A5, 0x78E8, 0xC4A6, 0x6469, 0xC4A7, 0x9B54, 0xC4A8, 0x62B9, 0xC4A9, 0x672B, 0xC4AA, 0x83AB, 0xC4AB, 0x58A8,
- 0xC4AC, 0x9ED8, 0xC4AD, 0x6CAB, 0xC4AE, 0x6F20, 0xC4AF, 0x5BDE, 0xC4B0, 0x964C, 0xC4B1, 0x8C0B, 0xC4B2, 0x725F, 0xC4B3, 0x67D0,
- 0xC4B4, 0x62C7, 0xC4B5, 0x7261, 0xC4B6, 0x4EA9, 0xC4B7, 0x59C6, 0xC4B8, 0x6BCD, 0xC4B9, 0x5893, 0xC4BA, 0x66AE, 0xC4BB, 0x5E55,
- 0xC4BC, 0x52DF, 0xC4BD, 0x6155, 0xC4BE, 0x6728, 0xC4BF, 0x76EE, 0xC4C0, 0x7766, 0xC4C1, 0x7267, 0xC4C2, 0x7A46, 0xC4C3, 0x62FF,
- 0xC4C4, 0x54EA, 0xC4C5, 0x5450, 0xC4C6, 0x94A0, 0xC4C7, 0x90A3, 0xC4C8, 0x5A1C, 0xC4C9, 0x7EB3, 0xC4CA, 0x6C16, 0xC4CB, 0x4E43,
- 0xC4CC, 0x5976, 0xC4CD, 0x8010, 0xC4CE, 0x5948, 0xC4CF, 0x5357, 0xC4D0, 0x7537, 0xC4D1, 0x96BE, 0xC4D2, 0x56CA, 0xC4D3, 0x6320,
- 0xC4D4, 0x8111, 0xC4D5, 0x607C, 0xC4D6, 0x95F9, 0xC4D7, 0x6DD6, 0xC4D8, 0x5462, 0xC4D9, 0x9981, 0xC4DA, 0x5185, 0xC4DB, 0x5AE9,
- 0xC4DC, 0x80FD, 0xC4DD, 0x59AE, 0xC4DE, 0x9713, 0xC4DF, 0x502A, 0xC4E0, 0x6CE5, 0xC4E1, 0x5C3C, 0xC4E2, 0x62DF, 0xC4E3, 0x4F60,
- 0xC4E4, 0x533F, 0xC4E5, 0x817B, 0xC4E6, 0x9006, 0xC4E7, 0x6EBA, 0xC4E8, 0x852B, 0xC4E9, 0x62C8, 0xC4EA, 0x5E74, 0xC4EB, 0x78BE,
- 0xC4EC, 0x64B5, 0xC4ED, 0x637B, 0xC4EE, 0x5FF5, 0xC4EF, 0x5A18, 0xC4F0, 0x917F, 0xC4F1, 0x9E1F, 0xC4F2, 0x5C3F, 0xC4F3, 0x634F,
- 0xC4F4, 0x8042, 0xC4F5, 0x5B7D, 0xC4F6, 0x556E, 0xC4F7, 0x954A, 0xC4F8, 0x954D, 0xC4F9, 0x6D85, 0xC4FA, 0x60A8, 0xC4FB, 0x67E0,
- 0xC4FC, 0x72DE, 0xC4FD, 0x51DD, 0xC4FE, 0x5B81, 0xC540, 0x81D4, 0xC541, 0x81D5, 0xC542, 0x81D6, 0xC543, 0x81D7, 0xC544, 0x81D8,
- 0xC545, 0x81D9, 0xC546, 0x81DA, 0xC547, 0x81DB, 0xC548, 0x81DC, 0xC549, 0x81DD, 0xC54A, 0x81DE, 0xC54B, 0x81DF, 0xC54C, 0x81E0,
- 0xC54D, 0x81E1, 0xC54E, 0x81E2, 0xC54F, 0x81E4, 0xC550, 0x81E5, 0xC551, 0x81E6, 0xC552, 0x81E8, 0xC553, 0x81E9, 0xC554, 0x81EB,
- 0xC555, 0x81EE, 0xC556, 0x81EF, 0xC557, 0x81F0, 0xC558, 0x81F1, 0xC559, 0x81F2, 0xC55A, 0x81F5, 0xC55B, 0x81F6, 0xC55C, 0x81F7,
- 0xC55D, 0x81F8, 0xC55E, 0x81F9, 0xC55F, 0x81FA, 0xC560, 0x81FD, 0xC561, 0x81FF, 0xC562, 0x8203, 0xC563, 0x8207, 0xC564, 0x8208,
- 0xC565, 0x8209, 0xC566, 0x820A, 0xC567, 0x820B, 0xC568, 0x820E, 0xC569, 0x820F, 0xC56A, 0x8211, 0xC56B, 0x8213, 0xC56C, 0x8215,
- 0xC56D, 0x8216, 0xC56E, 0x8217, 0xC56F, 0x8218, 0xC570, 0x8219, 0xC571, 0x821A, 0xC572, 0x821D, 0xC573, 0x8220, 0xC574, 0x8224,
- 0xC575, 0x8225, 0xC576, 0x8226, 0xC577, 0x8227, 0xC578, 0x8229, 0xC579, 0x822E, 0xC57A, 0x8232, 0xC57B, 0x823A, 0xC57C, 0x823C,
- 0xC57D, 0x823D, 0xC57E, 0x823F, 0xC580, 0x8240, 0xC581, 0x8241, 0xC582, 0x8242, 0xC583, 0x8243, 0xC584, 0x8245, 0xC585, 0x8246,
- 0xC586, 0x8248, 0xC587, 0x824A, 0xC588, 0x824C, 0xC589, 0x824D, 0xC58A, 0x824E, 0xC58B, 0x8250, 0xC58C, 0x8251, 0xC58D, 0x8252,
- 0xC58E, 0x8253, 0xC58F, 0x8254, 0xC590, 0x8255, 0xC591, 0x8256, 0xC592, 0x8257, 0xC593, 0x8259, 0xC594, 0x825B, 0xC595, 0x825C,
- 0xC596, 0x825D, 0xC597, 0x825E, 0xC598, 0x8260, 0xC599, 0x8261, 0xC59A, 0x8262, 0xC59B, 0x8263, 0xC59C, 0x8264, 0xC59D, 0x8265,
- 0xC59E, 0x8266, 0xC59F, 0x8267, 0xC5A0, 0x8269, 0xC5A1, 0x62E7, 0xC5A2, 0x6CDE, 0xC5A3, 0x725B, 0xC5A4, 0x626D, 0xC5A5, 0x94AE,
- 0xC5A6, 0x7EBD, 0xC5A7, 0x8113, 0xC5A8, 0x6D53, 0xC5A9, 0x519C, 0xC5AA, 0x5F04, 0xC5AB, 0x5974, 0xC5AC, 0x52AA, 0xC5AD, 0x6012,
- 0xC5AE, 0x5973, 0xC5AF, 0x6696, 0xC5B0, 0x8650, 0xC5B1, 0x759F, 0xC5B2, 0x632A, 0xC5B3, 0x61E6, 0xC5B4, 0x7CEF, 0xC5B5, 0x8BFA,
- 0xC5B6, 0x54E6, 0xC5B7, 0x6B27, 0xC5B8, 0x9E25, 0xC5B9, 0x6BB4, 0xC5BA, 0x85D5, 0xC5BB, 0x5455, 0xC5BC, 0x5076, 0xC5BD, 0x6CA4,
- 0xC5BE, 0x556A, 0xC5BF, 0x8DB4, 0xC5C0, 0x722C, 0xC5C1, 0x5E15, 0xC5C2, 0x6015, 0xC5C3, 0x7436, 0xC5C4, 0x62CD, 0xC5C5, 0x6392,
- 0xC5C6, 0x724C, 0xC5C7, 0x5F98, 0xC5C8, 0x6E43, 0xC5C9, 0x6D3E, 0xC5CA, 0x6500, 0xC5CB, 0x6F58, 0xC5CC, 0x76D8, 0xC5CD, 0x78D0,
- 0xC5CE, 0x76FC, 0xC5CF, 0x7554, 0xC5D0, 0x5224, 0xC5D1, 0x53DB, 0xC5D2, 0x4E53, 0xC5D3, 0x5E9E, 0xC5D4, 0x65C1, 0xC5D5, 0x802A,
- 0xC5D6, 0x80D6, 0xC5D7, 0x629B, 0xC5D8, 0x5486, 0xC5D9, 0x5228, 0xC5DA, 0x70AE, 0xC5DB, 0x888D, 0xC5DC, 0x8DD1, 0xC5DD, 0x6CE1,
- 0xC5DE, 0x5478, 0xC5DF, 0x80DA, 0xC5E0, 0x57F9, 0xC5E1, 0x88F4, 0xC5E2, 0x8D54, 0xC5E3, 0x966A, 0xC5E4, 0x914D, 0xC5E5, 0x4F69,
- 0xC5E6, 0x6C9B, 0xC5E7, 0x55B7, 0xC5E8, 0x76C6, 0xC5E9, 0x7830, 0xC5EA, 0x62A8, 0xC5EB, 0x70F9, 0xC5EC, 0x6F8E, 0xC5ED, 0x5F6D,
- 0xC5EE, 0x84EC, 0xC5EF, 0x68DA, 0xC5F0, 0x787C, 0xC5F1, 0x7BF7, 0xC5F2, 0x81A8, 0xC5F3, 0x670B, 0xC5F4, 0x9E4F, 0xC5F5, 0x6367,
- 0xC5F6, 0x78B0, 0xC5F7, 0x576F, 0xC5F8, 0x7812, 0xC5F9, 0x9739, 0xC5FA, 0x6279, 0xC5FB, 0x62AB, 0xC5FC, 0x5288, 0xC5FD, 0x7435,
- 0xC5FE, 0x6BD7, 0xC640, 0x826A, 0xC641, 0x826B, 0xC642, 0x826C, 0xC643, 0x826D, 0xC644, 0x8271, 0xC645, 0x8275, 0xC646, 0x8276,
- 0xC647, 0x8277, 0xC648, 0x8278, 0xC649, 0x827B, 0xC64A, 0x827C, 0xC64B, 0x8280, 0xC64C, 0x8281, 0xC64D, 0x8283, 0xC64E, 0x8285,
- 0xC64F, 0x8286, 0xC650, 0x8287, 0xC651, 0x8289, 0xC652, 0x828C, 0xC653, 0x8290, 0xC654, 0x8293, 0xC655, 0x8294, 0xC656, 0x8295,
- 0xC657, 0x8296, 0xC658, 0x829A, 0xC659, 0x829B, 0xC65A, 0x829E, 0xC65B, 0x82A0, 0xC65C, 0x82A2, 0xC65D, 0x82A3, 0xC65E, 0x82A7,
- 0xC65F, 0x82B2, 0xC660, 0x82B5, 0xC661, 0x82B6, 0xC662, 0x82BA, 0xC663, 0x82BB, 0xC664, 0x82BC, 0xC665, 0x82BF, 0xC666, 0x82C0,
- 0xC667, 0x82C2, 0xC668, 0x82C3, 0xC669, 0x82C5, 0xC66A, 0x82C6, 0xC66B, 0x82C9, 0xC66C, 0x82D0, 0xC66D, 0x82D6, 0xC66E, 0x82D9,
- 0xC66F, 0x82DA, 0xC670, 0x82DD, 0xC671, 0x82E2, 0xC672, 0x82E7, 0xC673, 0x82E8, 0xC674, 0x82E9, 0xC675, 0x82EA, 0xC676, 0x82EC,
- 0xC677, 0x82ED, 0xC678, 0x82EE, 0xC679, 0x82F0, 0xC67A, 0x82F2, 0xC67B, 0x82F3, 0xC67C, 0x82F5, 0xC67D, 0x82F6, 0xC67E, 0x82F8,
- 0xC680, 0x82FA, 0xC681, 0x82FC, 0xC682, 0x82FD, 0xC683, 0x82FE, 0xC684, 0x82FF, 0xC685, 0x8300, 0xC686, 0x830A, 0xC687, 0x830B,
- 0xC688, 0x830D, 0xC689, 0x8310, 0xC68A, 0x8312, 0xC68B, 0x8313, 0xC68C, 0x8316, 0xC68D, 0x8318, 0xC68E, 0x8319, 0xC68F, 0x831D,
- 0xC690, 0x831E, 0xC691, 0x831F, 0xC692, 0x8320, 0xC693, 0x8321, 0xC694, 0x8322, 0xC695, 0x8323, 0xC696, 0x8324, 0xC697, 0x8325,
- 0xC698, 0x8326, 0xC699, 0x8329, 0xC69A, 0x832A, 0xC69B, 0x832E, 0xC69C, 0x8330, 0xC69D, 0x8332, 0xC69E, 0x8337, 0xC69F, 0x833B,
- 0xC6A0, 0x833D, 0xC6A1, 0x5564, 0xC6A2, 0x813E, 0xC6A3, 0x75B2, 0xC6A4, 0x76AE, 0xC6A5, 0x5339, 0xC6A6, 0x75DE, 0xC6A7, 0x50FB,
- 0xC6A8, 0x5C41, 0xC6A9, 0x8B6C, 0xC6AA, 0x7BC7, 0xC6AB, 0x504F, 0xC6AC, 0x7247, 0xC6AD, 0x9A97, 0xC6AE, 0x98D8, 0xC6AF, 0x6F02,
- 0xC6B0, 0x74E2, 0xC6B1, 0x7968, 0xC6B2, 0x6487, 0xC6B3, 0x77A5, 0xC6B4, 0x62FC, 0xC6B5, 0x9891, 0xC6B6, 0x8D2B, 0xC6B7, 0x54C1,
- 0xC6B8, 0x8058, 0xC6B9, 0x4E52, 0xC6BA, 0x576A, 0xC6BB, 0x82F9, 0xC6BC, 0x840D, 0xC6BD, 0x5E73, 0xC6BE, 0x51ED, 0xC6BF, 0x74F6,
- 0xC6C0, 0x8BC4, 0xC6C1, 0x5C4F, 0xC6C2, 0x5761, 0xC6C3, 0x6CFC, 0xC6C4, 0x9887, 0xC6C5, 0x5A46, 0xC6C6, 0x7834, 0xC6C7, 0x9B44,
- 0xC6C8, 0x8FEB, 0xC6C9, 0x7C95, 0xC6CA, 0x5256, 0xC6CB, 0x6251, 0xC6CC, 0x94FA, 0xC6CD, 0x4EC6, 0xC6CE, 0x8386, 0xC6CF, 0x8461,
- 0xC6D0, 0x83E9, 0xC6D1, 0x84B2, 0xC6D2, 0x57D4, 0xC6D3, 0x6734, 0xC6D4, 0x5703, 0xC6D5, 0x666E, 0xC6D6, 0x6D66, 0xC6D7, 0x8C31,
- 0xC6D8, 0x66DD, 0xC6D9, 0x7011, 0xC6DA, 0x671F, 0xC6DB, 0x6B3A, 0xC6DC, 0x6816, 0xC6DD, 0x621A, 0xC6DE, 0x59BB, 0xC6DF, 0x4E03,
- 0xC6E0, 0x51C4, 0xC6E1, 0x6F06, 0xC6E2, 0x67D2, 0xC6E3, 0x6C8F, 0xC6E4, 0x5176, 0xC6E5, 0x68CB, 0xC6E6, 0x5947, 0xC6E7, 0x6B67,
- 0xC6E8, 0x7566, 0xC6E9, 0x5D0E, 0xC6EA, 0x8110, 0xC6EB, 0x9F50, 0xC6EC, 0x65D7, 0xC6ED, 0x7948, 0xC6EE, 0x7941, 0xC6EF, 0x9A91,
- 0xC6F0, 0x8D77, 0xC6F1, 0x5C82, 0xC6F2, 0x4E5E, 0xC6F3, 0x4F01, 0xC6F4, 0x542F, 0xC6F5, 0x5951, 0xC6F6, 0x780C, 0xC6F7, 0x5668,
- 0xC6F8, 0x6C14, 0xC6F9, 0x8FC4, 0xC6FA, 0x5F03, 0xC6FB, 0x6C7D, 0xC6FC, 0x6CE3, 0xC6FD, 0x8BAB, 0xC6FE, 0x6390, 0xC740, 0x833E,
- 0xC741, 0x833F, 0xC742, 0x8341, 0xC743, 0x8342, 0xC744, 0x8344, 0xC745, 0x8345, 0xC746, 0x8348, 0xC747, 0x834A, 0xC748, 0x834B,
- 0xC749, 0x834C, 0xC74A, 0x834D, 0xC74B, 0x834E, 0xC74C, 0x8353, 0xC74D, 0x8355, 0xC74E, 0x8356, 0xC74F, 0x8357, 0xC750, 0x8358,
- 0xC751, 0x8359, 0xC752, 0x835D, 0xC753, 0x8362, 0xC754, 0x8370, 0xC755, 0x8371, 0xC756, 0x8372, 0xC757, 0x8373, 0xC758, 0x8374,
- 0xC759, 0x8375, 0xC75A, 0x8376, 0xC75B, 0x8379, 0xC75C, 0x837A, 0xC75D, 0x837E, 0xC75E, 0x837F, 0xC75F, 0x8380, 0xC760, 0x8381,
- 0xC761, 0x8382, 0xC762, 0x8383, 0xC763, 0x8384, 0xC764, 0x8387, 0xC765, 0x8388, 0xC766, 0x838A, 0xC767, 0x838B, 0xC768, 0x838C,
- 0xC769, 0x838D, 0xC76A, 0x838F, 0xC76B, 0x8390, 0xC76C, 0x8391, 0xC76D, 0x8394, 0xC76E, 0x8395, 0xC76F, 0x8396, 0xC770, 0x8397,
- 0xC771, 0x8399, 0xC772, 0x839A, 0xC773, 0x839D, 0xC774, 0x839F, 0xC775, 0x83A1, 0xC776, 0x83A2, 0xC777, 0x83A3, 0xC778, 0x83A4,
- 0xC779, 0x83A5, 0xC77A, 0x83A6, 0xC77B, 0x83A7, 0xC77C, 0x83AC, 0xC77D, 0x83AD, 0xC77E, 0x83AE, 0xC780, 0x83AF, 0xC781, 0x83B5,
- 0xC782, 0x83BB, 0xC783, 0x83BE, 0xC784, 0x83BF, 0xC785, 0x83C2, 0xC786, 0x83C3, 0xC787, 0x83C4, 0xC788, 0x83C6, 0xC789, 0x83C8,
- 0xC78A, 0x83C9, 0xC78B, 0x83CB, 0xC78C, 0x83CD, 0xC78D, 0x83CE, 0xC78E, 0x83D0, 0xC78F, 0x83D1, 0xC790, 0x83D2, 0xC791, 0x83D3,
- 0xC792, 0x83D5, 0xC793, 0x83D7, 0xC794, 0x83D9, 0xC795, 0x83DA, 0xC796, 0x83DB, 0xC797, 0x83DE, 0xC798, 0x83E2, 0xC799, 0x83E3,
- 0xC79A, 0x83E4, 0xC79B, 0x83E6, 0xC79C, 0x83E7, 0xC79D, 0x83E8, 0xC79E, 0x83EB, 0xC79F, 0x83EC, 0xC7A0, 0x83ED, 0xC7A1, 0x6070,
- 0xC7A2, 0x6D3D, 0xC7A3, 0x7275, 0xC7A4, 0x6266, 0xC7A5, 0x948E, 0xC7A6, 0x94C5, 0xC7A7, 0x5343, 0xC7A8, 0x8FC1, 0xC7A9, 0x7B7E,
- 0xC7AA, 0x4EDF, 0xC7AB, 0x8C26, 0xC7AC, 0x4E7E, 0xC7AD, 0x9ED4, 0xC7AE, 0x94B1, 0xC7AF, 0x94B3, 0xC7B0, 0x524D, 0xC7B1, 0x6F5C,
- 0xC7B2, 0x9063, 0xC7B3, 0x6D45, 0xC7B4, 0x8C34, 0xC7B5, 0x5811, 0xC7B6, 0x5D4C, 0xC7B7, 0x6B20, 0xC7B8, 0x6B49, 0xC7B9, 0x67AA,
- 0xC7BA, 0x545B, 0xC7BB, 0x8154, 0xC7BC, 0x7F8C, 0xC7BD, 0x5899, 0xC7BE, 0x8537, 0xC7BF, 0x5F3A, 0xC7C0, 0x62A2, 0xC7C1, 0x6A47,
- 0xC7C2, 0x9539, 0xC7C3, 0x6572, 0xC7C4, 0x6084, 0xC7C5, 0x6865, 0xC7C6, 0x77A7, 0xC7C7, 0x4E54, 0xC7C8, 0x4FA8, 0xC7C9, 0x5DE7,
- 0xC7CA, 0x9798, 0xC7CB, 0x64AC, 0xC7CC, 0x7FD8, 0xC7CD, 0x5CED, 0xC7CE, 0x4FCF, 0xC7CF, 0x7A8D, 0xC7D0, 0x5207, 0xC7D1, 0x8304,
- 0xC7D2, 0x4E14, 0xC7D3, 0x602F, 0xC7D4, 0x7A83, 0xC7D5, 0x94A6, 0xC7D6, 0x4FB5, 0xC7D7, 0x4EB2, 0xC7D8, 0x79E6, 0xC7D9, 0x7434,
- 0xC7DA, 0x52E4, 0xC7DB, 0x82B9, 0xC7DC, 0x64D2, 0xC7DD, 0x79BD, 0xC7DE, 0x5BDD, 0xC7DF, 0x6C81, 0xC7E0, 0x9752, 0xC7E1, 0x8F7B,
- 0xC7E2, 0x6C22, 0xC7E3, 0x503E, 0xC7E4, 0x537F, 0xC7E5, 0x6E05, 0xC7E6, 0x64CE, 0xC7E7, 0x6674, 0xC7E8, 0x6C30, 0xC7E9, 0x60C5,
- 0xC7EA, 0x9877, 0xC7EB, 0x8BF7, 0xC7EC, 0x5E86, 0xC7ED, 0x743C, 0xC7EE, 0x7A77, 0xC7EF, 0x79CB, 0xC7F0, 0x4E18, 0xC7F1, 0x90B1,
- 0xC7F2, 0x7403, 0xC7F3, 0x6C42, 0xC7F4, 0x56DA, 0xC7F5, 0x914B, 0xC7F6, 0x6CC5, 0xC7F7, 0x8D8B, 0xC7F8, 0x533A, 0xC7F9, 0x86C6,
- 0xC7FA, 0x66F2, 0xC7FB, 0x8EAF, 0xC7FC, 0x5C48, 0xC7FD, 0x9A71, 0xC7FE, 0x6E20, 0xC840, 0x83EE, 0xC841, 0x83EF, 0xC842, 0x83F3,
- 0xC843, 0x83F4, 0xC844, 0x83F5, 0xC845, 0x83F6, 0xC846, 0x83F7, 0xC847, 0x83FA, 0xC848, 0x83FB, 0xC849, 0x83FC, 0xC84A, 0x83FE,
- 0xC84B, 0x83FF, 0xC84C, 0x8400, 0xC84D, 0x8402, 0xC84E, 0x8405, 0xC84F, 0x8407, 0xC850, 0x8408, 0xC851, 0x8409, 0xC852, 0x840A,
- 0xC853, 0x8410, 0xC854, 0x8412, 0xC855, 0x8413, 0xC856, 0x8414, 0xC857, 0x8415, 0xC858, 0x8416, 0xC859, 0x8417, 0xC85A, 0x8419,
- 0xC85B, 0x841A, 0xC85C, 0x841B, 0xC85D, 0x841E, 0xC85E, 0x841F, 0xC85F, 0x8420, 0xC860, 0x8421, 0xC861, 0x8422, 0xC862, 0x8423,
- 0xC863, 0x8429, 0xC864, 0x842A, 0xC865, 0x842B, 0xC866, 0x842C, 0xC867, 0x842D, 0xC868, 0x842E, 0xC869, 0x842F, 0xC86A, 0x8430,
- 0xC86B, 0x8432, 0xC86C, 0x8433, 0xC86D, 0x8434, 0xC86E, 0x8435, 0xC86F, 0x8436, 0xC870, 0x8437, 0xC871, 0x8439, 0xC872, 0x843A,
- 0xC873, 0x843B, 0xC874, 0x843E, 0xC875, 0x843F, 0xC876, 0x8440, 0xC877, 0x8441, 0xC878, 0x8442, 0xC879, 0x8443, 0xC87A, 0x8444,
- 0xC87B, 0x8445, 0xC87C, 0x8447, 0xC87D, 0x8448, 0xC87E, 0x8449, 0xC880, 0x844A, 0xC881, 0x844B, 0xC882, 0x844C, 0xC883, 0x844D,
- 0xC884, 0x844E, 0xC885, 0x844F, 0xC886, 0x8450, 0xC887, 0x8452, 0xC888, 0x8453, 0xC889, 0x8454, 0xC88A, 0x8455, 0xC88B, 0x8456,
- 0xC88C, 0x8458, 0xC88D, 0x845D, 0xC88E, 0x845E, 0xC88F, 0x845F, 0xC890, 0x8460, 0xC891, 0x8462, 0xC892, 0x8464, 0xC893, 0x8465,
- 0xC894, 0x8466, 0xC895, 0x8467, 0xC896, 0x8468, 0xC897, 0x846A, 0xC898, 0x846E, 0xC899, 0x846F, 0xC89A, 0x8470, 0xC89B, 0x8472,
- 0xC89C, 0x8474, 0xC89D, 0x8477, 0xC89E, 0x8479, 0xC89F, 0x847B, 0xC8A0, 0x847C, 0xC8A1, 0x53D6, 0xC8A2, 0x5A36, 0xC8A3, 0x9F8B,
- 0xC8A4, 0x8DA3, 0xC8A5, 0x53BB, 0xC8A6, 0x5708, 0xC8A7, 0x98A7, 0xC8A8, 0x6743, 0xC8A9, 0x919B, 0xC8AA, 0x6CC9, 0xC8AB, 0x5168,
- 0xC8AC, 0x75CA, 0xC8AD, 0x62F3, 0xC8AE, 0x72AC, 0xC8AF, 0x5238, 0xC8B0, 0x529D, 0xC8B1, 0x7F3A, 0xC8B2, 0x7094, 0xC8B3, 0x7638,
- 0xC8B4, 0x5374, 0xC8B5, 0x9E4A, 0xC8B6, 0x69B7, 0xC8B7, 0x786E, 0xC8B8, 0x96C0, 0xC8B9, 0x88D9, 0xC8BA, 0x7FA4, 0xC8BB, 0x7136,
- 0xC8BC, 0x71C3, 0xC8BD, 0x5189, 0xC8BE, 0x67D3, 0xC8BF, 0x74E4, 0xC8C0, 0x58E4, 0xC8C1, 0x6518, 0xC8C2, 0x56B7, 0xC8C3, 0x8BA9,
- 0xC8C4, 0x9976, 0xC8C5, 0x6270, 0xC8C6, 0x7ED5, 0xC8C7, 0x60F9, 0xC8C8, 0x70ED, 0xC8C9, 0x58EC, 0xC8CA, 0x4EC1, 0xC8CB, 0x4EBA,
- 0xC8CC, 0x5FCD, 0xC8CD, 0x97E7, 0xC8CE, 0x4EFB, 0xC8CF, 0x8BA4, 0xC8D0, 0x5203, 0xC8D1, 0x598A, 0xC8D2, 0x7EAB, 0xC8D3, 0x6254,
- 0xC8D4, 0x4ECD, 0xC8D5, 0x65E5, 0xC8D6, 0x620E, 0xC8D7, 0x8338, 0xC8D8, 0x84C9, 0xC8D9, 0x8363, 0xC8DA, 0x878D, 0xC8DB, 0x7194,
- 0xC8DC, 0x6EB6, 0xC8DD, 0x5BB9, 0xC8DE, 0x7ED2, 0xC8DF, 0x5197, 0xC8E0, 0x63C9, 0xC8E1, 0x67D4, 0xC8E2, 0x8089, 0xC8E3, 0x8339,
- 0xC8E4, 0x8815, 0xC8E5, 0x5112, 0xC8E6, 0x5B7A, 0xC8E7, 0x5982, 0xC8E8, 0x8FB1, 0xC8E9, 0x4E73, 0xC8EA, 0x6C5D, 0xC8EB, 0x5165,
- 0xC8EC, 0x8925, 0xC8ED, 0x8F6F, 0xC8EE, 0x962E, 0xC8EF, 0x854A, 0xC8F0, 0x745E, 0xC8F1, 0x9510, 0xC8F2, 0x95F0, 0xC8F3, 0x6DA6,
- 0xC8F4, 0x82E5, 0xC8F5, 0x5F31, 0xC8F6, 0x6492, 0xC8F7, 0x6D12, 0xC8F8, 0x8428, 0xC8F9, 0x816E, 0xC8FA, 0x9CC3, 0xC8FB, 0x585E,
- 0xC8FC, 0x8D5B, 0xC8FD, 0x4E09, 0xC8FE, 0x53C1, 0xC940, 0x847D, 0xC941, 0x847E, 0xC942, 0x847F, 0xC943, 0x8480, 0xC944, 0x8481,
- 0xC945, 0x8483, 0xC946, 0x8484, 0xC947, 0x8485, 0xC948, 0x8486, 0xC949, 0x848A, 0xC94A, 0x848D, 0xC94B, 0x848F, 0xC94C, 0x8490,
- 0xC94D, 0x8491, 0xC94E, 0x8492, 0xC94F, 0x8493, 0xC950, 0x8494, 0xC951, 0x8495, 0xC952, 0x8496, 0xC953, 0x8498, 0xC954, 0x849A,
- 0xC955, 0x849B, 0xC956, 0x849D, 0xC957, 0x849E, 0xC958, 0x849F, 0xC959, 0x84A0, 0xC95A, 0x84A2, 0xC95B, 0x84A3, 0xC95C, 0x84A4,
- 0xC95D, 0x84A5, 0xC95E, 0x84A6, 0xC95F, 0x84A7, 0xC960, 0x84A8, 0xC961, 0x84A9, 0xC962, 0x84AA, 0xC963, 0x84AB, 0xC964, 0x84AC,
- 0xC965, 0x84AD, 0xC966, 0x84AE, 0xC967, 0x84B0, 0xC968, 0x84B1, 0xC969, 0x84B3, 0xC96A, 0x84B5, 0xC96B, 0x84B6, 0xC96C, 0x84B7,
- 0xC96D, 0x84BB, 0xC96E, 0x84BC, 0xC96F, 0x84BE, 0xC970, 0x84C0, 0xC971, 0x84C2, 0xC972, 0x84C3, 0xC973, 0x84C5, 0xC974, 0x84C6,
- 0xC975, 0x84C7, 0xC976, 0x84C8, 0xC977, 0x84CB, 0xC978, 0x84CC, 0xC979, 0x84CE, 0xC97A, 0x84CF, 0xC97B, 0x84D2, 0xC97C, 0x84D4,
- 0xC97D, 0x84D5, 0xC97E, 0x84D7, 0xC980, 0x84D8, 0xC981, 0x84D9, 0xC982, 0x84DA, 0xC983, 0x84DB, 0xC984, 0x84DC, 0xC985, 0x84DE,
- 0xC986, 0x84E1, 0xC987, 0x84E2, 0xC988, 0x84E4, 0xC989, 0x84E7, 0xC98A, 0x84E8, 0xC98B, 0x84E9, 0xC98C, 0x84EA, 0xC98D, 0x84EB,
- 0xC98E, 0x84ED, 0xC98F, 0x84EE, 0xC990, 0x84EF, 0xC991, 0x84F1, 0xC992, 0x84F2, 0xC993, 0x84F3, 0xC994, 0x84F4, 0xC995, 0x84F5,
- 0xC996, 0x84F6, 0xC997, 0x84F7, 0xC998, 0x84F8, 0xC999, 0x84F9, 0xC99A, 0x84FA, 0xC99B, 0x84FB, 0xC99C, 0x84FD, 0xC99D, 0x84FE,
- 0xC99E, 0x8500, 0xC99F, 0x8501, 0xC9A0, 0x8502, 0xC9A1, 0x4F1E, 0xC9A2, 0x6563, 0xC9A3, 0x6851, 0xC9A4, 0x55D3, 0xC9A5, 0x4E27,
- 0xC9A6, 0x6414, 0xC9A7, 0x9A9A, 0xC9A8, 0x626B, 0xC9A9, 0x5AC2, 0xC9AA, 0x745F, 0xC9AB, 0x8272, 0xC9AC, 0x6DA9, 0xC9AD, 0x68EE,
- 0xC9AE, 0x50E7, 0xC9AF, 0x838E, 0xC9B0, 0x7802, 0xC9B1, 0x6740, 0xC9B2, 0x5239, 0xC9B3, 0x6C99, 0xC9B4, 0x7EB1, 0xC9B5, 0x50BB,
- 0xC9B6, 0x5565, 0xC9B7, 0x715E, 0xC9B8, 0x7B5B, 0xC9B9, 0x6652, 0xC9BA, 0x73CA, 0xC9BB, 0x82EB, 0xC9BC, 0x6749, 0xC9BD, 0x5C71,
- 0xC9BE, 0x5220, 0xC9BF, 0x717D, 0xC9C0, 0x886B, 0xC9C1, 0x95EA, 0xC9C2, 0x9655, 0xC9C3, 0x64C5, 0xC9C4, 0x8D61, 0xC9C5, 0x81B3,
- 0xC9C6, 0x5584, 0xC9C7, 0x6C55, 0xC9C8, 0x6247, 0xC9C9, 0x7F2E, 0xC9CA, 0x5892, 0xC9CB, 0x4F24, 0xC9CC, 0x5546, 0xC9CD, 0x8D4F,
- 0xC9CE, 0x664C, 0xC9CF, 0x4E0A, 0xC9D0, 0x5C1A, 0xC9D1, 0x88F3, 0xC9D2, 0x68A2, 0xC9D3, 0x634E, 0xC9D4, 0x7A0D, 0xC9D5, 0x70E7,
- 0xC9D6, 0x828D, 0xC9D7, 0x52FA, 0xC9D8, 0x97F6, 0xC9D9, 0x5C11, 0xC9DA, 0x54E8, 0xC9DB, 0x90B5, 0xC9DC, 0x7ECD, 0xC9DD, 0x5962,
- 0xC9DE, 0x8D4A, 0xC9DF, 0x86C7, 0xC9E0, 0x820C, 0xC9E1, 0x820D, 0xC9E2, 0x8D66, 0xC9E3, 0x6444, 0xC9E4, 0x5C04, 0xC9E5, 0x6151,
- 0xC9E6, 0x6D89, 0xC9E7, 0x793E, 0xC9E8, 0x8BBE, 0xC9E9, 0x7837, 0xC9EA, 0x7533, 0xC9EB, 0x547B, 0xC9EC, 0x4F38, 0xC9ED, 0x8EAB,
- 0xC9EE, 0x6DF1, 0xC9EF, 0x5A20, 0xC9F0, 0x7EC5, 0xC9F1, 0x795E, 0xC9F2, 0x6C88, 0xC9F3, 0x5BA1, 0xC9F4, 0x5A76, 0xC9F5, 0x751A,
- 0xC9F6, 0x80BE, 0xC9F7, 0x614E, 0xC9F8, 0x6E17, 0xC9F9, 0x58F0, 0xC9FA, 0x751F, 0xC9FB, 0x7525, 0xC9FC, 0x7272, 0xC9FD, 0x5347,
- 0xC9FE, 0x7EF3, 0xCA40, 0x8503, 0xCA41, 0x8504, 0xCA42, 0x8505, 0xCA43, 0x8506, 0xCA44, 0x8507, 0xCA45, 0x8508, 0xCA46, 0x8509,
- 0xCA47, 0x850A, 0xCA48, 0x850B, 0xCA49, 0x850D, 0xCA4A, 0x850E, 0xCA4B, 0x850F, 0xCA4C, 0x8510, 0xCA4D, 0x8512, 0xCA4E, 0x8514,
- 0xCA4F, 0x8515, 0xCA50, 0x8516, 0xCA51, 0x8518, 0xCA52, 0x8519, 0xCA53, 0x851B, 0xCA54, 0x851C, 0xCA55, 0x851D, 0xCA56, 0x851E,
- 0xCA57, 0x8520, 0xCA58, 0x8522, 0xCA59, 0x8523, 0xCA5A, 0x8524, 0xCA5B, 0x8525, 0xCA5C, 0x8526, 0xCA5D, 0x8527, 0xCA5E, 0x8528,
- 0xCA5F, 0x8529, 0xCA60, 0x852A, 0xCA61, 0x852D, 0xCA62, 0x852E, 0xCA63, 0x852F, 0xCA64, 0x8530, 0xCA65, 0x8531, 0xCA66, 0x8532,
- 0xCA67, 0x8533, 0xCA68, 0x8534, 0xCA69, 0x8535, 0xCA6A, 0x8536, 0xCA6B, 0x853E, 0xCA6C, 0x853F, 0xCA6D, 0x8540, 0xCA6E, 0x8541,
- 0xCA6F, 0x8542, 0xCA70, 0x8544, 0xCA71, 0x8545, 0xCA72, 0x8546, 0xCA73, 0x8547, 0xCA74, 0x854B, 0xCA75, 0x854C, 0xCA76, 0x854D,
- 0xCA77, 0x854E, 0xCA78, 0x854F, 0xCA79, 0x8550, 0xCA7A, 0x8551, 0xCA7B, 0x8552, 0xCA7C, 0x8553, 0xCA7D, 0x8554, 0xCA7E, 0x8555,
- 0xCA80, 0x8557, 0xCA81, 0x8558, 0xCA82, 0x855A, 0xCA83, 0x855B, 0xCA84, 0x855C, 0xCA85, 0x855D, 0xCA86, 0x855F, 0xCA87, 0x8560,
- 0xCA88, 0x8561, 0xCA89, 0x8562, 0xCA8A, 0x8563, 0xCA8B, 0x8565, 0xCA8C, 0x8566, 0xCA8D, 0x8567, 0xCA8E, 0x8569, 0xCA8F, 0x856A,
- 0xCA90, 0x856B, 0xCA91, 0x856C, 0xCA92, 0x856D, 0xCA93, 0x856E, 0xCA94, 0x856F, 0xCA95, 0x8570, 0xCA96, 0x8571, 0xCA97, 0x8573,
- 0xCA98, 0x8575, 0xCA99, 0x8576, 0xCA9A, 0x8577, 0xCA9B, 0x8578, 0xCA9C, 0x857C, 0xCA9D, 0x857D, 0xCA9E, 0x857F, 0xCA9F, 0x8580,
- 0xCAA0, 0x8581, 0xCAA1, 0x7701, 0xCAA2, 0x76DB, 0xCAA3, 0x5269, 0xCAA4, 0x80DC, 0xCAA5, 0x5723, 0xCAA6, 0x5E08, 0xCAA7, 0x5931,
- 0xCAA8, 0x72EE, 0xCAA9, 0x65BD, 0xCAAA, 0x6E7F, 0xCAAB, 0x8BD7, 0xCAAC, 0x5C38, 0xCAAD, 0x8671, 0xCAAE, 0x5341, 0xCAAF, 0x77F3,
- 0xCAB0, 0x62FE, 0xCAB1, 0x65F6, 0xCAB2, 0x4EC0, 0xCAB3, 0x98DF, 0xCAB4, 0x8680, 0xCAB5, 0x5B9E, 0xCAB6, 0x8BC6, 0xCAB7, 0x53F2,
- 0xCAB8, 0x77E2, 0xCAB9, 0x4F7F, 0xCABA, 0x5C4E, 0xCABB, 0x9A76, 0xCABC, 0x59CB, 0xCABD, 0x5F0F, 0xCABE, 0x793A, 0xCABF, 0x58EB,
- 0xCAC0, 0x4E16, 0xCAC1, 0x67FF, 0xCAC2, 0x4E8B, 0xCAC3, 0x62ED, 0xCAC4, 0x8A93, 0xCAC5, 0x901D, 0xCAC6, 0x52BF, 0xCAC7, 0x662F,
- 0xCAC8, 0x55DC, 0xCAC9, 0x566C, 0xCACA, 0x9002, 0xCACB, 0x4ED5, 0xCACC, 0x4F8D, 0xCACD, 0x91CA, 0xCACE, 0x9970, 0xCACF, 0x6C0F,
- 0xCAD0, 0x5E02, 0xCAD1, 0x6043, 0xCAD2, 0x5BA4, 0xCAD3, 0x89C6, 0xCAD4, 0x8BD5, 0xCAD5, 0x6536, 0xCAD6, 0x624B, 0xCAD7, 0x9996,
- 0xCAD8, 0x5B88, 0xCAD9, 0x5BFF, 0xCADA, 0x6388, 0xCADB, 0x552E, 0xCADC, 0x53D7, 0xCADD, 0x7626, 0xCADE, 0x517D, 0xCADF, 0x852C,
- 0xCAE0, 0x67A2, 0xCAE1, 0x68B3, 0xCAE2, 0x6B8A, 0xCAE3, 0x6292, 0xCAE4, 0x8F93, 0xCAE5, 0x53D4, 0xCAE6, 0x8212, 0xCAE7, 0x6DD1,
- 0xCAE8, 0x758F, 0xCAE9, 0x4E66, 0xCAEA, 0x8D4E, 0xCAEB, 0x5B70, 0xCAEC, 0x719F, 0xCAED, 0x85AF, 0xCAEE, 0x6691, 0xCAEF, 0x66D9,
- 0xCAF0, 0x7F72, 0xCAF1, 0x8700, 0xCAF2, 0x9ECD, 0xCAF3, 0x9F20, 0xCAF4, 0x5C5E, 0xCAF5, 0x672F, 0xCAF6, 0x8FF0, 0xCAF7, 0x6811,
- 0xCAF8, 0x675F, 0xCAF9, 0x620D, 0xCAFA, 0x7AD6, 0xCAFB, 0x5885, 0xCAFC, 0x5EB6, 0xCAFD, 0x6570, 0xCAFE, 0x6F31, 0xCB40, 0x8582,
- 0xCB41, 0x8583, 0xCB42, 0x8586, 0xCB43, 0x8588, 0xCB44, 0x8589, 0xCB45, 0x858A, 0xCB46, 0x858B, 0xCB47, 0x858C, 0xCB48, 0x858D,
- 0xCB49, 0x858E, 0xCB4A, 0x8590, 0xCB4B, 0x8591, 0xCB4C, 0x8592, 0xCB4D, 0x8593, 0xCB4E, 0x8594, 0xCB4F, 0x8595, 0xCB50, 0x8596,
- 0xCB51, 0x8597, 0xCB52, 0x8598, 0xCB53, 0x8599, 0xCB54, 0x859A, 0xCB55, 0x859D, 0xCB56, 0x859E, 0xCB57, 0x859F, 0xCB58, 0x85A0,
- 0xCB59, 0x85A1, 0xCB5A, 0x85A2, 0xCB5B, 0x85A3, 0xCB5C, 0x85A5, 0xCB5D, 0x85A6, 0xCB5E, 0x85A7, 0xCB5F, 0x85A9, 0xCB60, 0x85AB,
- 0xCB61, 0x85AC, 0xCB62, 0x85AD, 0xCB63, 0x85B1, 0xCB64, 0x85B2, 0xCB65, 0x85B3, 0xCB66, 0x85B4, 0xCB67, 0x85B5, 0xCB68, 0x85B6,
- 0xCB69, 0x85B8, 0xCB6A, 0x85BA, 0xCB6B, 0x85BB, 0xCB6C, 0x85BC, 0xCB6D, 0x85BD, 0xCB6E, 0x85BE, 0xCB6F, 0x85BF, 0xCB70, 0x85C0,
- 0xCB71, 0x85C2, 0xCB72, 0x85C3, 0xCB73, 0x85C4, 0xCB74, 0x85C5, 0xCB75, 0x85C6, 0xCB76, 0x85C7, 0xCB77, 0x85C8, 0xCB78, 0x85CA,
- 0xCB79, 0x85CB, 0xCB7A, 0x85CC, 0xCB7B, 0x85CD, 0xCB7C, 0x85CE, 0xCB7D, 0x85D1, 0xCB7E, 0x85D2, 0xCB80, 0x85D4, 0xCB81, 0x85D6,
- 0xCB82, 0x85D7, 0xCB83, 0x85D8, 0xCB84, 0x85D9, 0xCB85, 0x85DA, 0xCB86, 0x85DB, 0xCB87, 0x85DD, 0xCB88, 0x85DE, 0xCB89, 0x85DF,
- 0xCB8A, 0x85E0, 0xCB8B, 0x85E1, 0xCB8C, 0x85E2, 0xCB8D, 0x85E3, 0xCB8E, 0x85E5, 0xCB8F, 0x85E6, 0xCB90, 0x85E7, 0xCB91, 0x85E8,
- 0xCB92, 0x85EA, 0xCB93, 0x85EB, 0xCB94, 0x85EC, 0xCB95, 0x85ED, 0xCB96, 0x85EE, 0xCB97, 0x85EF, 0xCB98, 0x85F0, 0xCB99, 0x85F1,
- 0xCB9A, 0x85F2, 0xCB9B, 0x85F3, 0xCB9C, 0x85F4, 0xCB9D, 0x85F5, 0xCB9E, 0x85F6, 0xCB9F, 0x85F7, 0xCBA0, 0x85F8, 0xCBA1, 0x6055,
- 0xCBA2, 0x5237, 0xCBA3, 0x800D, 0xCBA4, 0x6454, 0xCBA5, 0x8870, 0xCBA6, 0x7529, 0xCBA7, 0x5E05, 0xCBA8, 0x6813, 0xCBA9, 0x62F4,
- 0xCBAA, 0x971C, 0xCBAB, 0x53CC, 0xCBAC, 0x723D, 0xCBAD, 0x8C01, 0xCBAE, 0x6C34, 0xCBAF, 0x7761, 0xCBB0, 0x7A0E, 0xCBB1, 0x542E,
- 0xCBB2, 0x77AC, 0xCBB3, 0x987A, 0xCBB4, 0x821C, 0xCBB5, 0x8BF4, 0xCBB6, 0x7855, 0xCBB7, 0x6714, 0xCBB8, 0x70C1, 0xCBB9, 0x65AF,
- 0xCBBA, 0x6495, 0xCBBB, 0x5636, 0xCBBC, 0x601D, 0xCBBD, 0x79C1, 0xCBBE, 0x53F8, 0xCBBF, 0x4E1D, 0xCBC0, 0x6B7B, 0xCBC1, 0x8086,
- 0xCBC2, 0x5BFA, 0xCBC3, 0x55E3, 0xCBC4, 0x56DB, 0xCBC5, 0x4F3A, 0xCBC6, 0x4F3C, 0xCBC7, 0x9972, 0xCBC8, 0x5DF3, 0xCBC9, 0x677E,
- 0xCBCA, 0x8038, 0xCBCB, 0x6002, 0xCBCC, 0x9882, 0xCBCD, 0x9001, 0xCBCE, 0x5B8B, 0xCBCF, 0x8BBC, 0xCBD0, 0x8BF5, 0xCBD1, 0x641C,
- 0xCBD2, 0x8258, 0xCBD3, 0x64DE, 0xCBD4, 0x55FD, 0xCBD5, 0x82CF, 0xCBD6, 0x9165, 0xCBD7, 0x4FD7, 0xCBD8, 0x7D20, 0xCBD9, 0x901F,
- 0xCBDA, 0x7C9F, 0xCBDB, 0x50F3, 0xCBDC, 0x5851, 0xCBDD, 0x6EAF, 0xCBDE, 0x5BBF, 0xCBDF, 0x8BC9, 0xCBE0, 0x8083, 0xCBE1, 0x9178,
- 0xCBE2, 0x849C, 0xCBE3, 0x7B97, 0xCBE4, 0x867D, 0xCBE5, 0x968B, 0xCBE6, 0x968F, 0xCBE7, 0x7EE5, 0xCBE8, 0x9AD3, 0xCBE9, 0x788E,
- 0xCBEA, 0x5C81, 0xCBEB, 0x7A57, 0xCBEC, 0x9042, 0xCBED, 0x96A7, 0xCBEE, 0x795F, 0xCBEF, 0x5B59, 0xCBF0, 0x635F, 0xCBF1, 0x7B0B,
- 0xCBF2, 0x84D1, 0xCBF3, 0x68AD, 0xCBF4, 0x5506, 0xCBF5, 0x7F29, 0xCBF6, 0x7410, 0xCBF7, 0x7D22, 0xCBF8, 0x9501, 0xCBF9, 0x6240,
- 0xCBFA, 0x584C, 0xCBFB, 0x4ED6, 0xCBFC, 0x5B83, 0xCBFD, 0x5979, 0xCBFE, 0x5854, 0xCC40, 0x85F9, 0xCC41, 0x85FA, 0xCC42, 0x85FC,
- 0xCC43, 0x85FD, 0xCC44, 0x85FE, 0xCC45, 0x8600, 0xCC46, 0x8601, 0xCC47, 0x8602, 0xCC48, 0x8603, 0xCC49, 0x8604, 0xCC4A, 0x8606,
- 0xCC4B, 0x8607, 0xCC4C, 0x8608, 0xCC4D, 0x8609, 0xCC4E, 0x860A, 0xCC4F, 0x860B, 0xCC50, 0x860C, 0xCC51, 0x860D, 0xCC52, 0x860E,
- 0xCC53, 0x860F, 0xCC54, 0x8610, 0xCC55, 0x8612, 0xCC56, 0x8613, 0xCC57, 0x8614, 0xCC58, 0x8615, 0xCC59, 0x8617, 0xCC5A, 0x8618,
- 0xCC5B, 0x8619, 0xCC5C, 0x861A, 0xCC5D, 0x861B, 0xCC5E, 0x861C, 0xCC5F, 0x861D, 0xCC60, 0x861E, 0xCC61, 0x861F, 0xCC62, 0x8620,
- 0xCC63, 0x8621, 0xCC64, 0x8622, 0xCC65, 0x8623, 0xCC66, 0x8624, 0xCC67, 0x8625, 0xCC68, 0x8626, 0xCC69, 0x8628, 0xCC6A, 0x862A,
- 0xCC6B, 0x862B, 0xCC6C, 0x862C, 0xCC6D, 0x862D, 0xCC6E, 0x862E, 0xCC6F, 0x862F, 0xCC70, 0x8630, 0xCC71, 0x8631, 0xCC72, 0x8632,
- 0xCC73, 0x8633, 0xCC74, 0x8634, 0xCC75, 0x8635, 0xCC76, 0x8636, 0xCC77, 0x8637, 0xCC78, 0x8639, 0xCC79, 0x863A, 0xCC7A, 0x863B,
- 0xCC7B, 0x863D, 0xCC7C, 0x863E, 0xCC7D, 0x863F, 0xCC7E, 0x8640, 0xCC80, 0x8641, 0xCC81, 0x8642, 0xCC82, 0x8643, 0xCC83, 0x8644,
- 0xCC84, 0x8645, 0xCC85, 0x8646, 0xCC86, 0x8647, 0xCC87, 0x8648, 0xCC88, 0x8649, 0xCC89, 0x864A, 0xCC8A, 0x864B, 0xCC8B, 0x864C,
- 0xCC8C, 0x8652, 0xCC8D, 0x8653, 0xCC8E, 0x8655, 0xCC8F, 0x8656, 0xCC90, 0x8657, 0xCC91, 0x8658, 0xCC92, 0x8659, 0xCC93, 0x865B,
- 0xCC94, 0x865C, 0xCC95, 0x865D, 0xCC96, 0x865F, 0xCC97, 0x8660, 0xCC98, 0x8661, 0xCC99, 0x8663, 0xCC9A, 0x8664, 0xCC9B, 0x8665,
- 0xCC9C, 0x8666, 0xCC9D, 0x8667, 0xCC9E, 0x8668, 0xCC9F, 0x8669, 0xCCA0, 0x866A, 0xCCA1, 0x736D, 0xCCA2, 0x631E, 0xCCA3, 0x8E4B,
- 0xCCA4, 0x8E0F, 0xCCA5, 0x80CE, 0xCCA6, 0x82D4, 0xCCA7, 0x62AC, 0xCCA8, 0x53F0, 0xCCA9, 0x6CF0, 0xCCAA, 0x915E, 0xCCAB, 0x592A,
- 0xCCAC, 0x6001, 0xCCAD, 0x6C70, 0xCCAE, 0x574D, 0xCCAF, 0x644A, 0xCCB0, 0x8D2A, 0xCCB1, 0x762B, 0xCCB2, 0x6EE9, 0xCCB3, 0x575B,
- 0xCCB4, 0x6A80, 0xCCB5, 0x75F0, 0xCCB6, 0x6F6D, 0xCCB7, 0x8C2D, 0xCCB8, 0x8C08, 0xCCB9, 0x5766, 0xCCBA, 0x6BEF, 0xCCBB, 0x8892,
- 0xCCBC, 0x78B3, 0xCCBD, 0x63A2, 0xCCBE, 0x53F9, 0xCCBF, 0x70AD, 0xCCC0, 0x6C64, 0xCCC1, 0x5858, 0xCCC2, 0x642A, 0xCCC3, 0x5802,
- 0xCCC4, 0x68E0, 0xCCC5, 0x819B, 0xCCC6, 0x5510, 0xCCC7, 0x7CD6, 0xCCC8, 0x5018, 0xCCC9, 0x8EBA, 0xCCCA, 0x6DCC, 0xCCCB, 0x8D9F,
- 0xCCCC, 0x70EB, 0xCCCD, 0x638F, 0xCCCE, 0x6D9B, 0xCCCF, 0x6ED4, 0xCCD0, 0x7EE6, 0xCCD1, 0x8404, 0xCCD2, 0x6843, 0xCCD3, 0x9003,
- 0xCCD4, 0x6DD8, 0xCCD5, 0x9676, 0xCCD6, 0x8BA8, 0xCCD7, 0x5957, 0xCCD8, 0x7279, 0xCCD9, 0x85E4, 0xCCDA, 0x817E, 0xCCDB, 0x75BC,
- 0xCCDC, 0x8A8A, 0xCCDD, 0x68AF, 0xCCDE, 0x5254, 0xCCDF, 0x8E22, 0xCCE0, 0x9511, 0xCCE1, 0x63D0, 0xCCE2, 0x9898, 0xCCE3, 0x8E44,
- 0xCCE4, 0x557C, 0xCCE5, 0x4F53, 0xCCE6, 0x66FF, 0xCCE7, 0x568F, 0xCCE8, 0x60D5, 0xCCE9, 0x6D95, 0xCCEA, 0x5243, 0xCCEB, 0x5C49,
- 0xCCEC, 0x5929, 0xCCED, 0x6DFB, 0xCCEE, 0x586B, 0xCCEF, 0x7530, 0xCCF0, 0x751C, 0xCCF1, 0x606C, 0xCCF2, 0x8214, 0xCCF3, 0x8146,
- 0xCCF4, 0x6311, 0xCCF5, 0x6761, 0xCCF6, 0x8FE2, 0xCCF7, 0x773A, 0xCCF8, 0x8DF3, 0xCCF9, 0x8D34, 0xCCFA, 0x94C1, 0xCCFB, 0x5E16,
- 0xCCFC, 0x5385, 0xCCFD, 0x542C, 0xCCFE, 0x70C3, 0xCD40, 0x866D, 0xCD41, 0x866F, 0xCD42, 0x8670, 0xCD43, 0x8672, 0xCD44, 0x8673,
- 0xCD45, 0x8674, 0xCD46, 0x8675, 0xCD47, 0x8676, 0xCD48, 0x8677, 0xCD49, 0x8678, 0xCD4A, 0x8683, 0xCD4B, 0x8684, 0xCD4C, 0x8685,
- 0xCD4D, 0x8686, 0xCD4E, 0x8687, 0xCD4F, 0x8688, 0xCD50, 0x8689, 0xCD51, 0x868E, 0xCD52, 0x868F, 0xCD53, 0x8690, 0xCD54, 0x8691,
- 0xCD55, 0x8692, 0xCD56, 0x8694, 0xCD57, 0x8696, 0xCD58, 0x8697, 0xCD59, 0x8698, 0xCD5A, 0x8699, 0xCD5B, 0x869A, 0xCD5C, 0x869B,
- 0xCD5D, 0x869E, 0xCD5E, 0x869F, 0xCD5F, 0x86A0, 0xCD60, 0x86A1, 0xCD61, 0x86A2, 0xCD62, 0x86A5, 0xCD63, 0x86A6, 0xCD64, 0x86AB,
- 0xCD65, 0x86AD, 0xCD66, 0x86AE, 0xCD67, 0x86B2, 0xCD68, 0x86B3, 0xCD69, 0x86B7, 0xCD6A, 0x86B8, 0xCD6B, 0x86B9, 0xCD6C, 0x86BB,
- 0xCD6D, 0x86BC, 0xCD6E, 0x86BD, 0xCD6F, 0x86BE, 0xCD70, 0x86BF, 0xCD71, 0x86C1, 0xCD72, 0x86C2, 0xCD73, 0x86C3, 0xCD74, 0x86C5,
- 0xCD75, 0x86C8, 0xCD76, 0x86CC, 0xCD77, 0x86CD, 0xCD78, 0x86D2, 0xCD79, 0x86D3, 0xCD7A, 0x86D5, 0xCD7B, 0x86D6, 0xCD7C, 0x86D7,
- 0xCD7D, 0x86DA, 0xCD7E, 0x86DC, 0xCD80, 0x86DD, 0xCD81, 0x86E0, 0xCD82, 0x86E1, 0xCD83, 0x86E2, 0xCD84, 0x86E3, 0xCD85, 0x86E5,
- 0xCD86, 0x86E6, 0xCD87, 0x86E7, 0xCD88, 0x86E8, 0xCD89, 0x86EA, 0xCD8A, 0x86EB, 0xCD8B, 0x86EC, 0xCD8C, 0x86EF, 0xCD8D, 0x86F5,
- 0xCD8E, 0x86F6, 0xCD8F, 0x86F7, 0xCD90, 0x86FA, 0xCD91, 0x86FB, 0xCD92, 0x86FC, 0xCD93, 0x86FD, 0xCD94, 0x86FF, 0xCD95, 0x8701,
- 0xCD96, 0x8704, 0xCD97, 0x8705, 0xCD98, 0x8706, 0xCD99, 0x870B, 0xCD9A, 0x870C, 0xCD9B, 0x870E, 0xCD9C, 0x870F, 0xCD9D, 0x8710,
- 0xCD9E, 0x8711, 0xCD9F, 0x8714, 0xCDA0, 0x8716, 0xCDA1, 0x6C40, 0xCDA2, 0x5EF7, 0xCDA3, 0x505C, 0xCDA4, 0x4EAD, 0xCDA5, 0x5EAD,
- 0xCDA6, 0x633A, 0xCDA7, 0x8247, 0xCDA8, 0x901A, 0xCDA9, 0x6850, 0xCDAA, 0x916E, 0xCDAB, 0x77B3, 0xCDAC, 0x540C, 0xCDAD, 0x94DC,
- 0xCDAE, 0x5F64, 0xCDAF, 0x7AE5, 0xCDB0, 0x6876, 0xCDB1, 0x6345, 0xCDB2, 0x7B52, 0xCDB3, 0x7EDF, 0xCDB4, 0x75DB, 0xCDB5, 0x5077,
- 0xCDB6, 0x6295, 0xCDB7, 0x5934, 0xCDB8, 0x900F, 0xCDB9, 0x51F8, 0xCDBA, 0x79C3, 0xCDBB, 0x7A81, 0xCDBC, 0x56FE, 0xCDBD, 0x5F92,
- 0xCDBE, 0x9014, 0xCDBF, 0x6D82, 0xCDC0, 0x5C60, 0xCDC1, 0x571F, 0xCDC2, 0x5410, 0xCDC3, 0x5154, 0xCDC4, 0x6E4D, 0xCDC5, 0x56E2,
- 0xCDC6, 0x63A8, 0xCDC7, 0x9893, 0xCDC8, 0x817F, 0xCDC9, 0x8715, 0xCDCA, 0x892A, 0xCDCB, 0x9000, 0xCDCC, 0x541E, 0xCDCD, 0x5C6F,
- 0xCDCE, 0x81C0, 0xCDCF, 0x62D6, 0xCDD0, 0x6258, 0xCDD1, 0x8131, 0xCDD2, 0x9E35, 0xCDD3, 0x9640, 0xCDD4, 0x9A6E, 0xCDD5, 0x9A7C,
- 0xCDD6, 0x692D, 0xCDD7, 0x59A5, 0xCDD8, 0x62D3, 0xCDD9, 0x553E, 0xCDDA, 0x6316, 0xCDDB, 0x54C7, 0xCDDC, 0x86D9, 0xCDDD, 0x6D3C,
- 0xCDDE, 0x5A03, 0xCDDF, 0x74E6, 0xCDE0, 0x889C, 0xCDE1, 0x6B6A, 0xCDE2, 0x5916, 0xCDE3, 0x8C4C, 0xCDE4, 0x5F2F, 0xCDE5, 0x6E7E,
- 0xCDE6, 0x73A9, 0xCDE7, 0x987D, 0xCDE8, 0x4E38, 0xCDE9, 0x70F7, 0xCDEA, 0x5B8C, 0xCDEB, 0x7897, 0xCDEC, 0x633D, 0xCDED, 0x665A,
- 0xCDEE, 0x7696, 0xCDEF, 0x60CB, 0xCDF0, 0x5B9B, 0xCDF1, 0x5A49, 0xCDF2, 0x4E07, 0xCDF3, 0x8155, 0xCDF4, 0x6C6A, 0xCDF5, 0x738B,
- 0xCDF6, 0x4EA1, 0xCDF7, 0x6789, 0xCDF8, 0x7F51, 0xCDF9, 0x5F80, 0xCDFA, 0x65FA, 0xCDFB, 0x671B, 0xCDFC, 0x5FD8, 0xCDFD, 0x5984,
- 0xCDFE, 0x5A01, 0xCE40, 0x8719, 0xCE41, 0x871B, 0xCE42, 0x871D, 0xCE43, 0x871F, 0xCE44, 0x8720, 0xCE45, 0x8724, 0xCE46, 0x8726,
- 0xCE47, 0x8727, 0xCE48, 0x8728, 0xCE49, 0x872A, 0xCE4A, 0x872B, 0xCE4B, 0x872C, 0xCE4C, 0x872D, 0xCE4D, 0x872F, 0xCE4E, 0x8730,
- 0xCE4F, 0x8732, 0xCE50, 0x8733, 0xCE51, 0x8735, 0xCE52, 0x8736, 0xCE53, 0x8738, 0xCE54, 0x8739, 0xCE55, 0x873A, 0xCE56, 0x873C,
- 0xCE57, 0x873D, 0xCE58, 0x8740, 0xCE59, 0x8741, 0xCE5A, 0x8742, 0xCE5B, 0x8743, 0xCE5C, 0x8744, 0xCE5D, 0x8745, 0xCE5E, 0x8746,
- 0xCE5F, 0x874A, 0xCE60, 0x874B, 0xCE61, 0x874D, 0xCE62, 0x874F, 0xCE63, 0x8750, 0xCE64, 0x8751, 0xCE65, 0x8752, 0xCE66, 0x8754,
- 0xCE67, 0x8755, 0xCE68, 0x8756, 0xCE69, 0x8758, 0xCE6A, 0x875A, 0xCE6B, 0x875B, 0xCE6C, 0x875C, 0xCE6D, 0x875D, 0xCE6E, 0x875E,
- 0xCE6F, 0x875F, 0xCE70, 0x8761, 0xCE71, 0x8762, 0xCE72, 0x8766, 0xCE73, 0x8767, 0xCE74, 0x8768, 0xCE75, 0x8769, 0xCE76, 0x876A,
- 0xCE77, 0x876B, 0xCE78, 0x876C, 0xCE79, 0x876D, 0xCE7A, 0x876F, 0xCE7B, 0x8771, 0xCE7C, 0x8772, 0xCE7D, 0x8773, 0xCE7E, 0x8775,
- 0xCE80, 0x8777, 0xCE81, 0x8778, 0xCE82, 0x8779, 0xCE83, 0x877A, 0xCE84, 0x877F, 0xCE85, 0x8780, 0xCE86, 0x8781, 0xCE87, 0x8784,
- 0xCE88, 0x8786, 0xCE89, 0x8787, 0xCE8A, 0x8789, 0xCE8B, 0x878A, 0xCE8C, 0x878C, 0xCE8D, 0x878E, 0xCE8E, 0x878F, 0xCE8F, 0x8790,
- 0xCE90, 0x8791, 0xCE91, 0x8792, 0xCE92, 0x8794, 0xCE93, 0x8795, 0xCE94, 0x8796, 0xCE95, 0x8798, 0xCE96, 0x8799, 0xCE97, 0x879A,
- 0xCE98, 0x879B, 0xCE99, 0x879C, 0xCE9A, 0x879D, 0xCE9B, 0x879E, 0xCE9C, 0x87A0, 0xCE9D, 0x87A1, 0xCE9E, 0x87A2, 0xCE9F, 0x87A3,
- 0xCEA0, 0x87A4, 0xCEA1, 0x5DCD, 0xCEA2, 0x5FAE, 0xCEA3, 0x5371, 0xCEA4, 0x97E6, 0xCEA5, 0x8FDD, 0xCEA6, 0x6845, 0xCEA7, 0x56F4,
- 0xCEA8, 0x552F, 0xCEA9, 0x60DF, 0xCEAA, 0x4E3A, 0xCEAB, 0x6F4D, 0xCEAC, 0x7EF4, 0xCEAD, 0x82C7, 0xCEAE, 0x840E, 0xCEAF, 0x59D4,
- 0xCEB0, 0x4F1F, 0xCEB1, 0x4F2A, 0xCEB2, 0x5C3E, 0xCEB3, 0x7EAC, 0xCEB4, 0x672A, 0xCEB5, 0x851A, 0xCEB6, 0x5473, 0xCEB7, 0x754F,
- 0xCEB8, 0x80C3, 0xCEB9, 0x5582, 0xCEBA, 0x9B4F, 0xCEBB, 0x4F4D, 0xCEBC, 0x6E2D, 0xCEBD, 0x8C13, 0xCEBE, 0x5C09, 0xCEBF, 0x6170,
- 0xCEC0, 0x536B, 0xCEC1, 0x761F, 0xCEC2, 0x6E29, 0xCEC3, 0x868A, 0xCEC4, 0x6587, 0xCEC5, 0x95FB, 0xCEC6, 0x7EB9, 0xCEC7, 0x543B,
- 0xCEC8, 0x7A33, 0xCEC9, 0x7D0A, 0xCECA, 0x95EE, 0xCECB, 0x55E1, 0xCECC, 0x7FC1, 0xCECD, 0x74EE, 0xCECE, 0x631D, 0xCECF, 0x8717,
- 0xCED0, 0x6DA1, 0xCED1, 0x7A9D, 0xCED2, 0x6211, 0xCED3, 0x65A1, 0xCED4, 0x5367, 0xCED5, 0x63E1, 0xCED6, 0x6C83, 0xCED7, 0x5DEB,
- 0xCED8, 0x545C, 0xCED9, 0x94A8, 0xCEDA, 0x4E4C, 0xCEDB, 0x6C61, 0xCEDC, 0x8BEC, 0xCEDD, 0x5C4B, 0xCEDE, 0x65E0, 0xCEDF, 0x829C,
- 0xCEE0, 0x68A7, 0xCEE1, 0x543E, 0xCEE2, 0x5434, 0xCEE3, 0x6BCB, 0xCEE4, 0x6B66, 0xCEE5, 0x4E94, 0xCEE6, 0x6342, 0xCEE7, 0x5348,
- 0xCEE8, 0x821E, 0xCEE9, 0x4F0D, 0xCEEA, 0x4FAE, 0xCEEB, 0x575E, 0xCEEC, 0x620A, 0xCEED, 0x96FE, 0xCEEE, 0x6664, 0xCEEF, 0x7269,
- 0xCEF0, 0x52FF, 0xCEF1, 0x52A1, 0xCEF2, 0x609F, 0xCEF3, 0x8BEF, 0xCEF4, 0x6614, 0xCEF5, 0x7199, 0xCEF6, 0x6790, 0xCEF7, 0x897F,
- 0xCEF8, 0x7852, 0xCEF9, 0x77FD, 0xCEFA, 0x6670, 0xCEFB, 0x563B, 0xCEFC, 0x5438, 0xCEFD, 0x9521, 0xCEFE, 0x727A, 0xCF40, 0x87A5,
- 0xCF41, 0x87A6, 0xCF42, 0x87A7, 0xCF43, 0x87A9, 0xCF44, 0x87AA, 0xCF45, 0x87AE, 0xCF46, 0x87B0, 0xCF47, 0x87B1, 0xCF48, 0x87B2,
- 0xCF49, 0x87B4, 0xCF4A, 0x87B6, 0xCF4B, 0x87B7, 0xCF4C, 0x87B8, 0xCF4D, 0x87B9, 0xCF4E, 0x87BB, 0xCF4F, 0x87BC, 0xCF50, 0x87BE,
- 0xCF51, 0x87BF, 0xCF52, 0x87C1, 0xCF53, 0x87C2, 0xCF54, 0x87C3, 0xCF55, 0x87C4, 0xCF56, 0x87C5, 0xCF57, 0x87C7, 0xCF58, 0x87C8,
- 0xCF59, 0x87C9, 0xCF5A, 0x87CC, 0xCF5B, 0x87CD, 0xCF5C, 0x87CE, 0xCF5D, 0x87CF, 0xCF5E, 0x87D0, 0xCF5F, 0x87D4, 0xCF60, 0x87D5,
- 0xCF61, 0x87D6, 0xCF62, 0x87D7, 0xCF63, 0x87D8, 0xCF64, 0x87D9, 0xCF65, 0x87DA, 0xCF66, 0x87DC, 0xCF67, 0x87DD, 0xCF68, 0x87DE,
- 0xCF69, 0x87DF, 0xCF6A, 0x87E1, 0xCF6B, 0x87E2, 0xCF6C, 0x87E3, 0xCF6D, 0x87E4, 0xCF6E, 0x87E6, 0xCF6F, 0x87E7, 0xCF70, 0x87E8,
- 0xCF71, 0x87E9, 0xCF72, 0x87EB, 0xCF73, 0x87EC, 0xCF74, 0x87ED, 0xCF75, 0x87EF, 0xCF76, 0x87F0, 0xCF77, 0x87F1, 0xCF78, 0x87F2,
- 0xCF79, 0x87F3, 0xCF7A, 0x87F4, 0xCF7B, 0x87F5, 0xCF7C, 0x87F6, 0xCF7D, 0x87F7, 0xCF7E, 0x87F8, 0xCF80, 0x87FA, 0xCF81, 0x87FB,
- 0xCF82, 0x87FC, 0xCF83, 0x87FD, 0xCF84, 0x87FF, 0xCF85, 0x8800, 0xCF86, 0x8801, 0xCF87, 0x8802, 0xCF88, 0x8804, 0xCF89, 0x8805,
- 0xCF8A, 0x8806, 0xCF8B, 0x8807, 0xCF8C, 0x8808, 0xCF8D, 0x8809, 0xCF8E, 0x880B, 0xCF8F, 0x880C, 0xCF90, 0x880D, 0xCF91, 0x880E,
- 0xCF92, 0x880F, 0xCF93, 0x8810, 0xCF94, 0x8811, 0xCF95, 0x8812, 0xCF96, 0x8814, 0xCF97, 0x8817, 0xCF98, 0x8818, 0xCF99, 0x8819,
- 0xCF9A, 0x881A, 0xCF9B, 0x881C, 0xCF9C, 0x881D, 0xCF9D, 0x881E, 0xCF9E, 0x881F, 0xCF9F, 0x8820, 0xCFA0, 0x8823, 0xCFA1, 0x7A00,
- 0xCFA2, 0x606F, 0xCFA3, 0x5E0C, 0xCFA4, 0x6089, 0xCFA5, 0x819D, 0xCFA6, 0x5915, 0xCFA7, 0x60DC, 0xCFA8, 0x7184, 0xCFA9, 0x70EF,
- 0xCFAA, 0x6EAA, 0xCFAB, 0x6C50, 0xCFAC, 0x7280, 0xCFAD, 0x6A84, 0xCFAE, 0x88AD, 0xCFAF, 0x5E2D, 0xCFB0, 0x4E60, 0xCFB1, 0x5AB3,
- 0xCFB2, 0x559C, 0xCFB3, 0x94E3, 0xCFB4, 0x6D17, 0xCFB5, 0x7CFB, 0xCFB6, 0x9699, 0xCFB7, 0x620F, 0xCFB8, 0x7EC6, 0xCFB9, 0x778E,
- 0xCFBA, 0x867E, 0xCFBB, 0x5323, 0xCFBC, 0x971E, 0xCFBD, 0x8F96, 0xCFBE, 0x6687, 0xCFBF, 0x5CE1, 0xCFC0, 0x4FA0, 0xCFC1, 0x72ED,
- 0xCFC2, 0x4E0B, 0xCFC3, 0x53A6, 0xCFC4, 0x590F, 0xCFC5, 0x5413, 0xCFC6, 0x6380, 0xCFC7, 0x9528, 0xCFC8, 0x5148, 0xCFC9, 0x4ED9,
- 0xCFCA, 0x9C9C, 0xCFCB, 0x7EA4, 0xCFCC, 0x54B8, 0xCFCD, 0x8D24, 0xCFCE, 0x8854, 0xCFCF, 0x8237, 0xCFD0, 0x95F2, 0xCFD1, 0x6D8E,
- 0xCFD2, 0x5F26, 0xCFD3, 0x5ACC, 0xCFD4, 0x663E, 0xCFD5, 0x9669, 0xCFD6, 0x73B0, 0xCFD7, 0x732E, 0xCFD8, 0x53BF, 0xCFD9, 0x817A,
- 0xCFDA, 0x9985, 0xCFDB, 0x7FA1, 0xCFDC, 0x5BAA, 0xCFDD, 0x9677, 0xCFDE, 0x9650, 0xCFDF, 0x7EBF, 0xCFE0, 0x76F8, 0xCFE1, 0x53A2,
- 0xCFE2, 0x9576, 0xCFE3, 0x9999, 0xCFE4, 0x7BB1, 0xCFE5, 0x8944, 0xCFE6, 0x6E58, 0xCFE7, 0x4E61, 0xCFE8, 0x7FD4, 0xCFE9, 0x7965,
- 0xCFEA, 0x8BE6, 0xCFEB, 0x60F3, 0xCFEC, 0x54CD, 0xCFED, 0x4EAB, 0xCFEE, 0x9879, 0xCFEF, 0x5DF7, 0xCFF0, 0x6A61, 0xCFF1, 0x50CF,
- 0xCFF2, 0x5411, 0xCFF3, 0x8C61, 0xCFF4, 0x8427, 0xCFF5, 0x785D, 0xCFF6, 0x9704, 0xCFF7, 0x524A, 0xCFF8, 0x54EE, 0xCFF9, 0x56A3,
- 0xCFFA, 0x9500, 0xCFFB, 0x6D88, 0xCFFC, 0x5BB5, 0xCFFD, 0x6DC6, 0xCFFE, 0x6653, 0xD040, 0x8824, 0xD041, 0x8825, 0xD042, 0x8826,
- 0xD043, 0x8827, 0xD044, 0x8828, 0xD045, 0x8829, 0xD046, 0x882A, 0xD047, 0x882B, 0xD048, 0x882C, 0xD049, 0x882D, 0xD04A, 0x882E,
- 0xD04B, 0x882F, 0xD04C, 0x8830, 0xD04D, 0x8831, 0xD04E, 0x8833, 0xD04F, 0x8834, 0xD050, 0x8835, 0xD051, 0x8836, 0xD052, 0x8837,
- 0xD053, 0x8838, 0xD054, 0x883A, 0xD055, 0x883B, 0xD056, 0x883D, 0xD057, 0x883E, 0xD058, 0x883F, 0xD059, 0x8841, 0xD05A, 0x8842,
- 0xD05B, 0x8843, 0xD05C, 0x8846, 0xD05D, 0x8847, 0xD05E, 0x8848, 0xD05F, 0x8849, 0xD060, 0x884A, 0xD061, 0x884B, 0xD062, 0x884E,
- 0xD063, 0x884F, 0xD064, 0x8850, 0xD065, 0x8851, 0xD066, 0x8852, 0xD067, 0x8853, 0xD068, 0x8855, 0xD069, 0x8856, 0xD06A, 0x8858,
- 0xD06B, 0x885A, 0xD06C, 0x885B, 0xD06D, 0x885C, 0xD06E, 0x885D, 0xD06F, 0x885E, 0xD070, 0x885F, 0xD071, 0x8860, 0xD072, 0x8866,
- 0xD073, 0x8867, 0xD074, 0x886A, 0xD075, 0x886D, 0xD076, 0x886F, 0xD077, 0x8871, 0xD078, 0x8873, 0xD079, 0x8874, 0xD07A, 0x8875,
- 0xD07B, 0x8876, 0xD07C, 0x8878, 0xD07D, 0x8879, 0xD07E, 0x887A, 0xD080, 0x887B, 0xD081, 0x887C, 0xD082, 0x8880, 0xD083, 0x8883,
- 0xD084, 0x8886, 0xD085, 0x8887, 0xD086, 0x8889, 0xD087, 0x888A, 0xD088, 0x888C, 0xD089, 0x888E, 0xD08A, 0x888F, 0xD08B, 0x8890,
- 0xD08C, 0x8891, 0xD08D, 0x8893, 0xD08E, 0x8894, 0xD08F, 0x8895, 0xD090, 0x8897, 0xD091, 0x8898, 0xD092, 0x8899, 0xD093, 0x889A,
- 0xD094, 0x889B, 0xD095, 0x889D, 0xD096, 0x889E, 0xD097, 0x889F, 0xD098, 0x88A0, 0xD099, 0x88A1, 0xD09A, 0x88A3, 0xD09B, 0x88A5,
- 0xD09C, 0x88A6, 0xD09D, 0x88A7, 0xD09E, 0x88A8, 0xD09F, 0x88A9, 0xD0A0, 0x88AA, 0xD0A1, 0x5C0F, 0xD0A2, 0x5B5D, 0xD0A3, 0x6821,
- 0xD0A4, 0x8096, 0xD0A5, 0x5578, 0xD0A6, 0x7B11, 0xD0A7, 0x6548, 0xD0A8, 0x6954, 0xD0A9, 0x4E9B, 0xD0AA, 0x6B47, 0xD0AB, 0x874E,
- 0xD0AC, 0x978B, 0xD0AD, 0x534F, 0xD0AE, 0x631F, 0xD0AF, 0x643A, 0xD0B0, 0x90AA, 0xD0B1, 0x659C, 0xD0B2, 0x80C1, 0xD0B3, 0x8C10,
- 0xD0B4, 0x5199, 0xD0B5, 0x68B0, 0xD0B6, 0x5378, 0xD0B7, 0x87F9, 0xD0B8, 0x61C8, 0xD0B9, 0x6CC4, 0xD0BA, 0x6CFB, 0xD0BB, 0x8C22,
- 0xD0BC, 0x5C51, 0xD0BD, 0x85AA, 0xD0BE, 0x82AF, 0xD0BF, 0x950C, 0xD0C0, 0x6B23, 0xD0C1, 0x8F9B, 0xD0C2, 0x65B0, 0xD0C3, 0x5FFB,
- 0xD0C4, 0x5FC3, 0xD0C5, 0x4FE1, 0xD0C6, 0x8845, 0xD0C7, 0x661F, 0xD0C8, 0x8165, 0xD0C9, 0x7329, 0xD0CA, 0x60FA, 0xD0CB, 0x5174,
- 0xD0CC, 0x5211, 0xD0CD, 0x578B, 0xD0CE, 0x5F62, 0xD0CF, 0x90A2, 0xD0D0, 0x884C, 0xD0D1, 0x9192, 0xD0D2, 0x5E78, 0xD0D3, 0x674F,
- 0xD0D4, 0x6027, 0xD0D5, 0x59D3, 0xD0D6, 0x5144, 0xD0D7, 0x51F6, 0xD0D8, 0x80F8, 0xD0D9, 0x5308, 0xD0DA, 0x6C79, 0xD0DB, 0x96C4,
- 0xD0DC, 0x718A, 0xD0DD, 0x4F11, 0xD0DE, 0x4FEE, 0xD0DF, 0x7F9E, 0xD0E0, 0x673D, 0xD0E1, 0x55C5, 0xD0E2, 0x9508, 0xD0E3, 0x79C0,
- 0xD0E4, 0x8896, 0xD0E5, 0x7EE3, 0xD0E6, 0x589F, 0xD0E7, 0x620C, 0xD0E8, 0x9700, 0xD0E9, 0x865A, 0xD0EA, 0x5618, 0xD0EB, 0x987B,
- 0xD0EC, 0x5F90, 0xD0ED, 0x8BB8, 0xD0EE, 0x84C4, 0xD0EF, 0x9157, 0xD0F0, 0x53D9, 0xD0F1, 0x65ED, 0xD0F2, 0x5E8F, 0xD0F3, 0x755C,
- 0xD0F4, 0x6064, 0xD0F5, 0x7D6E, 0xD0F6, 0x5A7F, 0xD0F7, 0x7EEA, 0xD0F8, 0x7EED, 0xD0F9, 0x8F69, 0xD0FA, 0x55A7, 0xD0FB, 0x5BA3,
- 0xD0FC, 0x60AC, 0xD0FD, 0x65CB, 0xD0FE, 0x7384, 0xD140, 0x88AC, 0xD141, 0x88AE, 0xD142, 0x88AF, 0xD143, 0x88B0, 0xD144, 0x88B2,
- 0xD145, 0x88B3, 0xD146, 0x88B4, 0xD147, 0x88B5, 0xD148, 0x88B6, 0xD149, 0x88B8, 0xD14A, 0x88B9, 0xD14B, 0x88BA, 0xD14C, 0x88BB,
- 0xD14D, 0x88BD, 0xD14E, 0x88BE, 0xD14F, 0x88BF, 0xD150, 0x88C0, 0xD151, 0x88C3, 0xD152, 0x88C4, 0xD153, 0x88C7, 0xD154, 0x88C8,
- 0xD155, 0x88CA, 0xD156, 0x88CB, 0xD157, 0x88CC, 0xD158, 0x88CD, 0xD159, 0x88CF, 0xD15A, 0x88D0, 0xD15B, 0x88D1, 0xD15C, 0x88D3,
- 0xD15D, 0x88D6, 0xD15E, 0x88D7, 0xD15F, 0x88DA, 0xD160, 0x88DB, 0xD161, 0x88DC, 0xD162, 0x88DD, 0xD163, 0x88DE, 0xD164, 0x88E0,
- 0xD165, 0x88E1, 0xD166, 0x88E6, 0xD167, 0x88E7, 0xD168, 0x88E9, 0xD169, 0x88EA, 0xD16A, 0x88EB, 0xD16B, 0x88EC, 0xD16C, 0x88ED,
- 0xD16D, 0x88EE, 0xD16E, 0x88EF, 0xD16F, 0x88F2, 0xD170, 0x88F5, 0xD171, 0x88F6, 0xD172, 0x88F7, 0xD173, 0x88FA, 0xD174, 0x88FB,
- 0xD175, 0x88FD, 0xD176, 0x88FF, 0xD177, 0x8900, 0xD178, 0x8901, 0xD179, 0x8903, 0xD17A, 0x8904, 0xD17B, 0x8905, 0xD17C, 0x8906,
- 0xD17D, 0x8907, 0xD17E, 0x8908, 0xD180, 0x8909, 0xD181, 0x890B, 0xD182, 0x890C, 0xD183, 0x890D, 0xD184, 0x890E, 0xD185, 0x890F,
- 0xD186, 0x8911, 0xD187, 0x8914, 0xD188, 0x8915, 0xD189, 0x8916, 0xD18A, 0x8917, 0xD18B, 0x8918, 0xD18C, 0x891C, 0xD18D, 0x891D,
- 0xD18E, 0x891E, 0xD18F, 0x891F, 0xD190, 0x8920, 0xD191, 0x8922, 0xD192, 0x8923, 0xD193, 0x8924, 0xD194, 0x8926, 0xD195, 0x8927,
- 0xD196, 0x8928, 0xD197, 0x8929, 0xD198, 0x892C, 0xD199, 0x892D, 0xD19A, 0x892E, 0xD19B, 0x892F, 0xD19C, 0x8931, 0xD19D, 0x8932,
- 0xD19E, 0x8933, 0xD19F, 0x8935, 0xD1A0, 0x8937, 0xD1A1, 0x9009, 0xD1A2, 0x7663, 0xD1A3, 0x7729, 0xD1A4, 0x7EDA, 0xD1A5, 0x9774,
- 0xD1A6, 0x859B, 0xD1A7, 0x5B66, 0xD1A8, 0x7A74, 0xD1A9, 0x96EA, 0xD1AA, 0x8840, 0xD1AB, 0x52CB, 0xD1AC, 0x718F, 0xD1AD, 0x5FAA,
- 0xD1AE, 0x65EC, 0xD1AF, 0x8BE2, 0xD1B0, 0x5BFB, 0xD1B1, 0x9A6F, 0xD1B2, 0x5DE1, 0xD1B3, 0x6B89, 0xD1B4, 0x6C5B, 0xD1B5, 0x8BAD,
- 0xD1B6, 0x8BAF, 0xD1B7, 0x900A, 0xD1B8, 0x8FC5, 0xD1B9, 0x538B, 0xD1BA, 0x62BC, 0xD1BB, 0x9E26, 0xD1BC, 0x9E2D, 0xD1BD, 0x5440,
- 0xD1BE, 0x4E2B, 0xD1BF, 0x82BD, 0xD1C0, 0x7259, 0xD1C1, 0x869C, 0xD1C2, 0x5D16, 0xD1C3, 0x8859, 0xD1C4, 0x6DAF, 0xD1C5, 0x96C5,
- 0xD1C6, 0x54D1, 0xD1C7, 0x4E9A, 0xD1C8, 0x8BB6, 0xD1C9, 0x7109, 0xD1CA, 0x54BD, 0xD1CB, 0x9609, 0xD1CC, 0x70DF, 0xD1CD, 0x6DF9,
- 0xD1CE, 0x76D0, 0xD1CF, 0x4E25, 0xD1D0, 0x7814, 0xD1D1, 0x8712, 0xD1D2, 0x5CA9, 0xD1D3, 0x5EF6, 0xD1D4, 0x8A00, 0xD1D5, 0x989C,
- 0xD1D6, 0x960E, 0xD1D7, 0x708E, 0xD1D8, 0x6CBF, 0xD1D9, 0x5944, 0xD1DA, 0x63A9, 0xD1DB, 0x773C, 0xD1DC, 0x884D, 0xD1DD, 0x6F14,
- 0xD1DE, 0x8273, 0xD1DF, 0x5830, 0xD1E0, 0x71D5, 0xD1E1, 0x538C, 0xD1E2, 0x781A, 0xD1E3, 0x96C1, 0xD1E4, 0x5501, 0xD1E5, 0x5F66,
- 0xD1E6, 0x7130, 0xD1E7, 0x5BB4, 0xD1E8, 0x8C1A, 0xD1E9, 0x9A8C, 0xD1EA, 0x6B83, 0xD1EB, 0x592E, 0xD1EC, 0x9E2F, 0xD1ED, 0x79E7,
- 0xD1EE, 0x6768, 0xD1EF, 0x626C, 0xD1F0, 0x4F6F, 0xD1F1, 0x75A1, 0xD1F2, 0x7F8A, 0xD1F3, 0x6D0B, 0xD1F4, 0x9633, 0xD1F5, 0x6C27,
- 0xD1F6, 0x4EF0, 0xD1F7, 0x75D2, 0xD1F8, 0x517B, 0xD1F9, 0x6837, 0xD1FA, 0x6F3E, 0xD1FB, 0x9080, 0xD1FC, 0x8170, 0xD1FD, 0x5996,
- 0xD1FE, 0x7476, 0xD240, 0x8938, 0xD241, 0x8939, 0xD242, 0x893A, 0xD243, 0x893B, 0xD244, 0x893C, 0xD245, 0x893D, 0xD246, 0x893E,
- 0xD247, 0x893F, 0xD248, 0x8940, 0xD249, 0x8942, 0xD24A, 0x8943, 0xD24B, 0x8945, 0xD24C, 0x8946, 0xD24D, 0x8947, 0xD24E, 0x8948,
- 0xD24F, 0x8949, 0xD250, 0x894A, 0xD251, 0x894B, 0xD252, 0x894C, 0xD253, 0x894D, 0xD254, 0x894E, 0xD255, 0x894F, 0xD256, 0x8950,
- 0xD257, 0x8951, 0xD258, 0x8952, 0xD259, 0x8953, 0xD25A, 0x8954, 0xD25B, 0x8955, 0xD25C, 0x8956, 0xD25D, 0x8957, 0xD25E, 0x8958,
- 0xD25F, 0x8959, 0xD260, 0x895A, 0xD261, 0x895B, 0xD262, 0x895C, 0xD263, 0x895D, 0xD264, 0x8960, 0xD265, 0x8961, 0xD266, 0x8962,
- 0xD267, 0x8963, 0xD268, 0x8964, 0xD269, 0x8965, 0xD26A, 0x8967, 0xD26B, 0x8968, 0xD26C, 0x8969, 0xD26D, 0x896A, 0xD26E, 0x896B,
- 0xD26F, 0x896C, 0xD270, 0x896D, 0xD271, 0x896E, 0xD272, 0x896F, 0xD273, 0x8970, 0xD274, 0x8971, 0xD275, 0x8972, 0xD276, 0x8973,
- 0xD277, 0x8974, 0xD278, 0x8975, 0xD279, 0x8976, 0xD27A, 0x8977, 0xD27B, 0x8978, 0xD27C, 0x8979, 0xD27D, 0x897A, 0xD27E, 0x897C,
- 0xD280, 0x897D, 0xD281, 0x897E, 0xD282, 0x8980, 0xD283, 0x8982, 0xD284, 0x8984, 0xD285, 0x8985, 0xD286, 0x8987, 0xD287, 0x8988,
- 0xD288, 0x8989, 0xD289, 0x898A, 0xD28A, 0x898B, 0xD28B, 0x898C, 0xD28C, 0x898D, 0xD28D, 0x898E, 0xD28E, 0x898F, 0xD28F, 0x8990,
- 0xD290, 0x8991, 0xD291, 0x8992, 0xD292, 0x8993, 0xD293, 0x8994, 0xD294, 0x8995, 0xD295, 0x8996, 0xD296, 0x8997, 0xD297, 0x8998,
- 0xD298, 0x8999, 0xD299, 0x899A, 0xD29A, 0x899B, 0xD29B, 0x899C, 0xD29C, 0x899D, 0xD29D, 0x899E, 0xD29E, 0x899F, 0xD29F, 0x89A0,
- 0xD2A0, 0x89A1, 0xD2A1, 0x6447, 0xD2A2, 0x5C27, 0xD2A3, 0x9065, 0xD2A4, 0x7A91, 0xD2A5, 0x8C23, 0xD2A6, 0x59DA, 0xD2A7, 0x54AC,
- 0xD2A8, 0x8200, 0xD2A9, 0x836F, 0xD2AA, 0x8981, 0xD2AB, 0x8000, 0xD2AC, 0x6930, 0xD2AD, 0x564E, 0xD2AE, 0x8036, 0xD2AF, 0x7237,
- 0xD2B0, 0x91CE, 0xD2B1, 0x51B6, 0xD2B2, 0x4E5F, 0xD2B3, 0x9875, 0xD2B4, 0x6396, 0xD2B5, 0x4E1A, 0xD2B6, 0x53F6, 0xD2B7, 0x66F3,
- 0xD2B8, 0x814B, 0xD2B9, 0x591C, 0xD2BA, 0x6DB2, 0xD2BB, 0x4E00, 0xD2BC, 0x58F9, 0xD2BD, 0x533B, 0xD2BE, 0x63D6, 0xD2BF, 0x94F1,
- 0xD2C0, 0x4F9D, 0xD2C1, 0x4F0A, 0xD2C2, 0x8863, 0xD2C3, 0x9890, 0xD2C4, 0x5937, 0xD2C5, 0x9057, 0xD2C6, 0x79FB, 0xD2C7, 0x4EEA,
- 0xD2C8, 0x80F0, 0xD2C9, 0x7591, 0xD2CA, 0x6C82, 0xD2CB, 0x5B9C, 0xD2CC, 0x59E8, 0xD2CD, 0x5F5D, 0xD2CE, 0x6905, 0xD2CF, 0x8681,
- 0xD2D0, 0x501A, 0xD2D1, 0x5DF2, 0xD2D2, 0x4E59, 0xD2D3, 0x77E3, 0xD2D4, 0x4EE5, 0xD2D5, 0x827A, 0xD2D6, 0x6291, 0xD2D7, 0x6613,
- 0xD2D8, 0x9091, 0xD2D9, 0x5C79, 0xD2DA, 0x4EBF, 0xD2DB, 0x5F79, 0xD2DC, 0x81C6, 0xD2DD, 0x9038, 0xD2DE, 0x8084, 0xD2DF, 0x75AB,
- 0xD2E0, 0x4EA6, 0xD2E1, 0x88D4, 0xD2E2, 0x610F, 0xD2E3, 0x6BC5, 0xD2E4, 0x5FC6, 0xD2E5, 0x4E49, 0xD2E6, 0x76CA, 0xD2E7, 0x6EA2,
- 0xD2E8, 0x8BE3, 0xD2E9, 0x8BAE, 0xD2EA, 0x8C0A, 0xD2EB, 0x8BD1, 0xD2EC, 0x5F02, 0xD2ED, 0x7FFC, 0xD2EE, 0x7FCC, 0xD2EF, 0x7ECE,
- 0xD2F0, 0x8335, 0xD2F1, 0x836B, 0xD2F2, 0x56E0, 0xD2F3, 0x6BB7, 0xD2F4, 0x97F3, 0xD2F5, 0x9634, 0xD2F6, 0x59FB, 0xD2F7, 0x541F,
- 0xD2F8, 0x94F6, 0xD2F9, 0x6DEB, 0xD2FA, 0x5BC5, 0xD2FB, 0x996E, 0xD2FC, 0x5C39, 0xD2FD, 0x5F15, 0xD2FE, 0x9690, 0xD340, 0x89A2,
- 0xD341, 0x89A3, 0xD342, 0x89A4, 0xD343, 0x89A5, 0xD344, 0x89A6, 0xD345, 0x89A7, 0xD346, 0x89A8, 0xD347, 0x89A9, 0xD348, 0x89AA,
- 0xD349, 0x89AB, 0xD34A, 0x89AC, 0xD34B, 0x89AD, 0xD34C, 0x89AE, 0xD34D, 0x89AF, 0xD34E, 0x89B0, 0xD34F, 0x89B1, 0xD350, 0x89B2,
- 0xD351, 0x89B3, 0xD352, 0x89B4, 0xD353, 0x89B5, 0xD354, 0x89B6, 0xD355, 0x89B7, 0xD356, 0x89B8, 0xD357, 0x89B9, 0xD358, 0x89BA,
- 0xD359, 0x89BB, 0xD35A, 0x89BC, 0xD35B, 0x89BD, 0xD35C, 0x89BE, 0xD35D, 0x89BF, 0xD35E, 0x89C0, 0xD35F, 0x89C3, 0xD360, 0x89CD,
- 0xD361, 0x89D3, 0xD362, 0x89D4, 0xD363, 0x89D5, 0xD364, 0x89D7, 0xD365, 0x89D8, 0xD366, 0x89D9, 0xD367, 0x89DB, 0xD368, 0x89DD,
- 0xD369, 0x89DF, 0xD36A, 0x89E0, 0xD36B, 0x89E1, 0xD36C, 0x89E2, 0xD36D, 0x89E4, 0xD36E, 0x89E7, 0xD36F, 0x89E8, 0xD370, 0x89E9,
- 0xD371, 0x89EA, 0xD372, 0x89EC, 0xD373, 0x89ED, 0xD374, 0x89EE, 0xD375, 0x89F0, 0xD376, 0x89F1, 0xD377, 0x89F2, 0xD378, 0x89F4,
- 0xD379, 0x89F5, 0xD37A, 0x89F6, 0xD37B, 0x89F7, 0xD37C, 0x89F8, 0xD37D, 0x89F9, 0xD37E, 0x89FA, 0xD380, 0x89FB, 0xD381, 0x89FC,
- 0xD382, 0x89FD, 0xD383, 0x89FE, 0xD384, 0x89FF, 0xD385, 0x8A01, 0xD386, 0x8A02, 0xD387, 0x8A03, 0xD388, 0x8A04, 0xD389, 0x8A05,
- 0xD38A, 0x8A06, 0xD38B, 0x8A08, 0xD38C, 0x8A09, 0xD38D, 0x8A0A, 0xD38E, 0x8A0B, 0xD38F, 0x8A0C, 0xD390, 0x8A0D, 0xD391, 0x8A0E,
- 0xD392, 0x8A0F, 0xD393, 0x8A10, 0xD394, 0x8A11, 0xD395, 0x8A12, 0xD396, 0x8A13, 0xD397, 0x8A14, 0xD398, 0x8A15, 0xD399, 0x8A16,
- 0xD39A, 0x8A17, 0xD39B, 0x8A18, 0xD39C, 0x8A19, 0xD39D, 0x8A1A, 0xD39E, 0x8A1B, 0xD39F, 0x8A1C, 0xD3A0, 0x8A1D, 0xD3A1, 0x5370,
- 0xD3A2, 0x82F1, 0xD3A3, 0x6A31, 0xD3A4, 0x5A74, 0xD3A5, 0x9E70, 0xD3A6, 0x5E94, 0xD3A7, 0x7F28, 0xD3A8, 0x83B9, 0xD3A9, 0x8424,
- 0xD3AA, 0x8425, 0xD3AB, 0x8367, 0xD3AC, 0x8747, 0xD3AD, 0x8FCE, 0xD3AE, 0x8D62, 0xD3AF, 0x76C8, 0xD3B0, 0x5F71, 0xD3B1, 0x9896,
- 0xD3B2, 0x786C, 0xD3B3, 0x6620, 0xD3B4, 0x54DF, 0xD3B5, 0x62E5, 0xD3B6, 0x4F63, 0xD3B7, 0x81C3, 0xD3B8, 0x75C8, 0xD3B9, 0x5EB8,
- 0xD3BA, 0x96CD, 0xD3BB, 0x8E0A, 0xD3BC, 0x86F9, 0xD3BD, 0x548F, 0xD3BE, 0x6CF3, 0xD3BF, 0x6D8C, 0xD3C0, 0x6C38, 0xD3C1, 0x607F,
- 0xD3C2, 0x52C7, 0xD3C3, 0x7528, 0xD3C4, 0x5E7D, 0xD3C5, 0x4F18, 0xD3C6, 0x60A0, 0xD3C7, 0x5FE7, 0xD3C8, 0x5C24, 0xD3C9, 0x7531,
- 0xD3CA, 0x90AE, 0xD3CB, 0x94C0, 0xD3CC, 0x72B9, 0xD3CD, 0x6CB9, 0xD3CE, 0x6E38, 0xD3CF, 0x9149, 0xD3D0, 0x6709, 0xD3D1, 0x53CB,
- 0xD3D2, 0x53F3, 0xD3D3, 0x4F51, 0xD3D4, 0x91C9, 0xD3D5, 0x8BF1, 0xD3D6, 0x53C8, 0xD3D7, 0x5E7C, 0xD3D8, 0x8FC2, 0xD3D9, 0x6DE4,
- 0xD3DA, 0x4E8E, 0xD3DB, 0x76C2, 0xD3DC, 0x6986, 0xD3DD, 0x865E, 0xD3DE, 0x611A, 0xD3DF, 0x8206, 0xD3E0, 0x4F59, 0xD3E1, 0x4FDE,
- 0xD3E2, 0x903E, 0xD3E3, 0x9C7C, 0xD3E4, 0x6109, 0xD3E5, 0x6E1D, 0xD3E6, 0x6E14, 0xD3E7, 0x9685, 0xD3E8, 0x4E88, 0xD3E9, 0x5A31,
- 0xD3EA, 0x96E8, 0xD3EB, 0x4E0E, 0xD3EC, 0x5C7F, 0xD3ED, 0x79B9, 0xD3EE, 0x5B87, 0xD3EF, 0x8BED, 0xD3F0, 0x7FBD, 0xD3F1, 0x7389,
- 0xD3F2, 0x57DF, 0xD3F3, 0x828B, 0xD3F4, 0x90C1, 0xD3F5, 0x5401, 0xD3F6, 0x9047, 0xD3F7, 0x55BB, 0xD3F8, 0x5CEA, 0xD3F9, 0x5FA1,
- 0xD3FA, 0x6108, 0xD3FB, 0x6B32, 0xD3FC, 0x72F1, 0xD3FD, 0x80B2, 0xD3FE, 0x8A89, 0xD440, 0x8A1E, 0xD441, 0x8A1F, 0xD442, 0x8A20,
- 0xD443, 0x8A21, 0xD444, 0x8A22, 0xD445, 0x8A23, 0xD446, 0x8A24, 0xD447, 0x8A25, 0xD448, 0x8A26, 0xD449, 0x8A27, 0xD44A, 0x8A28,
- 0xD44B, 0x8A29, 0xD44C, 0x8A2A, 0xD44D, 0x8A2B, 0xD44E, 0x8A2C, 0xD44F, 0x8A2D, 0xD450, 0x8A2E, 0xD451, 0x8A2F, 0xD452, 0x8A30,
- 0xD453, 0x8A31, 0xD454, 0x8A32, 0xD455, 0x8A33, 0xD456, 0x8A34, 0xD457, 0x8A35, 0xD458, 0x8A36, 0xD459, 0x8A37, 0xD45A, 0x8A38,
- 0xD45B, 0x8A39, 0xD45C, 0x8A3A, 0xD45D, 0x8A3B, 0xD45E, 0x8A3C, 0xD45F, 0x8A3D, 0xD460, 0x8A3F, 0xD461, 0x8A40, 0xD462, 0x8A41,
- 0xD463, 0x8A42, 0xD464, 0x8A43, 0xD465, 0x8A44, 0xD466, 0x8A45, 0xD467, 0x8A46, 0xD468, 0x8A47, 0xD469, 0x8A49, 0xD46A, 0x8A4A,
- 0xD46B, 0x8A4B, 0xD46C, 0x8A4C, 0xD46D, 0x8A4D, 0xD46E, 0x8A4E, 0xD46F, 0x8A4F, 0xD470, 0x8A50, 0xD471, 0x8A51, 0xD472, 0x8A52,
- 0xD473, 0x8A53, 0xD474, 0x8A54, 0xD475, 0x8A55, 0xD476, 0x8A56, 0xD477, 0x8A57, 0xD478, 0x8A58, 0xD479, 0x8A59, 0xD47A, 0x8A5A,
- 0xD47B, 0x8A5B, 0xD47C, 0x8A5C, 0xD47D, 0x8A5D, 0xD47E, 0x8A5E, 0xD480, 0x8A5F, 0xD481, 0x8A60, 0xD482, 0x8A61, 0xD483, 0x8A62,
- 0xD484, 0x8A63, 0xD485, 0x8A64, 0xD486, 0x8A65, 0xD487, 0x8A66, 0xD488, 0x8A67, 0xD489, 0x8A68, 0xD48A, 0x8A69, 0xD48B, 0x8A6A,
- 0xD48C, 0x8A6B, 0xD48D, 0x8A6C, 0xD48E, 0x8A6D, 0xD48F, 0x8A6E, 0xD490, 0x8A6F, 0xD491, 0x8A70, 0xD492, 0x8A71, 0xD493, 0x8A72,
- 0xD494, 0x8A73, 0xD495, 0x8A74, 0xD496, 0x8A75, 0xD497, 0x8A76, 0xD498, 0x8A77, 0xD499, 0x8A78, 0xD49A, 0x8A7A, 0xD49B, 0x8A7B,
- 0xD49C, 0x8A7C, 0xD49D, 0x8A7D, 0xD49E, 0x8A7E, 0xD49F, 0x8A7F, 0xD4A0, 0x8A80, 0xD4A1, 0x6D74, 0xD4A2, 0x5BD3, 0xD4A3, 0x88D5,
- 0xD4A4, 0x9884, 0xD4A5, 0x8C6B, 0xD4A6, 0x9A6D, 0xD4A7, 0x9E33, 0xD4A8, 0x6E0A, 0xD4A9, 0x51A4, 0xD4AA, 0x5143, 0xD4AB, 0x57A3,
- 0xD4AC, 0x8881, 0xD4AD, 0x539F, 0xD4AE, 0x63F4, 0xD4AF, 0x8F95, 0xD4B0, 0x56ED, 0xD4B1, 0x5458, 0xD4B2, 0x5706, 0xD4B3, 0x733F,
- 0xD4B4, 0x6E90, 0xD4B5, 0x7F18, 0xD4B6, 0x8FDC, 0xD4B7, 0x82D1, 0xD4B8, 0x613F, 0xD4B9, 0x6028, 0xD4BA, 0x9662, 0xD4BB, 0x66F0,
- 0xD4BC, 0x7EA6, 0xD4BD, 0x8D8A, 0xD4BE, 0x8DC3, 0xD4BF, 0x94A5, 0xD4C0, 0x5CB3, 0xD4C1, 0x7CA4, 0xD4C2, 0x6708, 0xD4C3, 0x60A6,
- 0xD4C4, 0x9605, 0xD4C5, 0x8018, 0xD4C6, 0x4E91, 0xD4C7, 0x90E7, 0xD4C8, 0x5300, 0xD4C9, 0x9668, 0xD4CA, 0x5141, 0xD4CB, 0x8FD0,
- 0xD4CC, 0x8574, 0xD4CD, 0x915D, 0xD4CE, 0x6655, 0xD4CF, 0x97F5, 0xD4D0, 0x5B55, 0xD4D1, 0x531D, 0xD4D2, 0x7838, 0xD4D3, 0x6742,
- 0xD4D4, 0x683D, 0xD4D5, 0x54C9, 0xD4D6, 0x707E, 0xD4D7, 0x5BB0, 0xD4D8, 0x8F7D, 0xD4D9, 0x518D, 0xD4DA, 0x5728, 0xD4DB, 0x54B1,
- 0xD4DC, 0x6512, 0xD4DD, 0x6682, 0xD4DE, 0x8D5E, 0xD4DF, 0x8D43, 0xD4E0, 0x810F, 0xD4E1, 0x846C, 0xD4E2, 0x906D, 0xD4E3, 0x7CDF,
- 0xD4E4, 0x51FF, 0xD4E5, 0x85FB, 0xD4E6, 0x67A3, 0xD4E7, 0x65E9, 0xD4E8, 0x6FA1, 0xD4E9, 0x86A4, 0xD4EA, 0x8E81, 0xD4EB, 0x566A,
- 0xD4EC, 0x9020, 0xD4ED, 0x7682, 0xD4EE, 0x7076, 0xD4EF, 0x71E5, 0xD4F0, 0x8D23, 0xD4F1, 0x62E9, 0xD4F2, 0x5219, 0xD4F3, 0x6CFD,
- 0xD4F4, 0x8D3C, 0xD4F5, 0x600E, 0xD4F6, 0x589E, 0xD4F7, 0x618E, 0xD4F8, 0x66FE, 0xD4F9, 0x8D60, 0xD4FA, 0x624E, 0xD4FB, 0x55B3,
- 0xD4FC, 0x6E23, 0xD4FD, 0x672D, 0xD4FE, 0x8F67, 0xD540, 0x8A81, 0xD541, 0x8A82, 0xD542, 0x8A83, 0xD543, 0x8A84, 0xD544, 0x8A85,
- 0xD545, 0x8A86, 0xD546, 0x8A87, 0xD547, 0x8A88, 0xD548, 0x8A8B, 0xD549, 0x8A8C, 0xD54A, 0x8A8D, 0xD54B, 0x8A8E, 0xD54C, 0x8A8F,
- 0xD54D, 0x8A90, 0xD54E, 0x8A91, 0xD54F, 0x8A92, 0xD550, 0x8A94, 0xD551, 0x8A95, 0xD552, 0x8A96, 0xD553, 0x8A97, 0xD554, 0x8A98,
- 0xD555, 0x8A99, 0xD556, 0x8A9A, 0xD557, 0x8A9B, 0xD558, 0x8A9C, 0xD559, 0x8A9D, 0xD55A, 0x8A9E, 0xD55B, 0x8A9F, 0xD55C, 0x8AA0,
- 0xD55D, 0x8AA1, 0xD55E, 0x8AA2, 0xD55F, 0x8AA3, 0xD560, 0x8AA4, 0xD561, 0x8AA5, 0xD562, 0x8AA6, 0xD563, 0x8AA7, 0xD564, 0x8AA8,
- 0xD565, 0x8AA9, 0xD566, 0x8AAA, 0xD567, 0x8AAB, 0xD568, 0x8AAC, 0xD569, 0x8AAD, 0xD56A, 0x8AAE, 0xD56B, 0x8AAF, 0xD56C, 0x8AB0,
- 0xD56D, 0x8AB1, 0xD56E, 0x8AB2, 0xD56F, 0x8AB3, 0xD570, 0x8AB4, 0xD571, 0x8AB5, 0xD572, 0x8AB6, 0xD573, 0x8AB7, 0xD574, 0x8AB8,
- 0xD575, 0x8AB9, 0xD576, 0x8ABA, 0xD577, 0x8ABB, 0xD578, 0x8ABC, 0xD579, 0x8ABD, 0xD57A, 0x8ABE, 0xD57B, 0x8ABF, 0xD57C, 0x8AC0,
- 0xD57D, 0x8AC1, 0xD57E, 0x8AC2, 0xD580, 0x8AC3, 0xD581, 0x8AC4, 0xD582, 0x8AC5, 0xD583, 0x8AC6, 0xD584, 0x8AC7, 0xD585, 0x8AC8,
- 0xD586, 0x8AC9, 0xD587, 0x8ACA, 0xD588, 0x8ACB, 0xD589, 0x8ACC, 0xD58A, 0x8ACD, 0xD58B, 0x8ACE, 0xD58C, 0x8ACF, 0xD58D, 0x8AD0,
- 0xD58E, 0x8AD1, 0xD58F, 0x8AD2, 0xD590, 0x8AD3, 0xD591, 0x8AD4, 0xD592, 0x8AD5, 0xD593, 0x8AD6, 0xD594, 0x8AD7, 0xD595, 0x8AD8,
- 0xD596, 0x8AD9, 0xD597, 0x8ADA, 0xD598, 0x8ADB, 0xD599, 0x8ADC, 0xD59A, 0x8ADD, 0xD59B, 0x8ADE, 0xD59C, 0x8ADF, 0xD59D, 0x8AE0,
- 0xD59E, 0x8AE1, 0xD59F, 0x8AE2, 0xD5A0, 0x8AE3, 0xD5A1, 0x94E1, 0xD5A2, 0x95F8, 0xD5A3, 0x7728, 0xD5A4, 0x6805, 0xD5A5, 0x69A8,
- 0xD5A6, 0x548B, 0xD5A7, 0x4E4D, 0xD5A8, 0x70B8, 0xD5A9, 0x8BC8, 0xD5AA, 0x6458, 0xD5AB, 0x658B, 0xD5AC, 0x5B85, 0xD5AD, 0x7A84,
- 0xD5AE, 0x503A, 0xD5AF, 0x5BE8, 0xD5B0, 0x77BB, 0xD5B1, 0x6BE1, 0xD5B2, 0x8A79, 0xD5B3, 0x7C98, 0xD5B4, 0x6CBE, 0xD5B5, 0x76CF,
- 0xD5B6, 0x65A9, 0xD5B7, 0x8F97, 0xD5B8, 0x5D2D, 0xD5B9, 0x5C55, 0xD5BA, 0x8638, 0xD5BB, 0x6808, 0xD5BC, 0x5360, 0xD5BD, 0x6218,
- 0xD5BE, 0x7AD9, 0xD5BF, 0x6E5B, 0xD5C0, 0x7EFD, 0xD5C1, 0x6A1F, 0xD5C2, 0x7AE0, 0xD5C3, 0x5F70, 0xD5C4, 0x6F33, 0xD5C5, 0x5F20,
- 0xD5C6, 0x638C, 0xD5C7, 0x6DA8, 0xD5C8, 0x6756, 0xD5C9, 0x4E08, 0xD5CA, 0x5E10, 0xD5CB, 0x8D26, 0xD5CC, 0x4ED7, 0xD5CD, 0x80C0,
- 0xD5CE, 0x7634, 0xD5CF, 0x969C, 0xD5D0, 0x62DB, 0xD5D1, 0x662D, 0xD5D2, 0x627E, 0xD5D3, 0x6CBC, 0xD5D4, 0x8D75, 0xD5D5, 0x7167,
- 0xD5D6, 0x7F69, 0xD5D7, 0x5146, 0xD5D8, 0x8087, 0xD5D9, 0x53EC, 0xD5DA, 0x906E, 0xD5DB, 0x6298, 0xD5DC, 0x54F2, 0xD5DD, 0x86F0,
- 0xD5DE, 0x8F99, 0xD5DF, 0x8005, 0xD5E0, 0x9517, 0xD5E1, 0x8517, 0xD5E2, 0x8FD9, 0xD5E3, 0x6D59, 0xD5E4, 0x73CD, 0xD5E5, 0x659F,
- 0xD5E6, 0x771F, 0xD5E7, 0x7504, 0xD5E8, 0x7827, 0xD5E9, 0x81FB, 0xD5EA, 0x8D1E, 0xD5EB, 0x9488, 0xD5EC, 0x4FA6, 0xD5ED, 0x6795,
- 0xD5EE, 0x75B9, 0xD5EF, 0x8BCA, 0xD5F0, 0x9707, 0xD5F1, 0x632F, 0xD5F2, 0x9547, 0xD5F3, 0x9635, 0xD5F4, 0x84B8, 0xD5F5, 0x6323,
- 0xD5F6, 0x7741, 0xD5F7, 0x5F81, 0xD5F8, 0x72F0, 0xD5F9, 0x4E89, 0xD5FA, 0x6014, 0xD5FB, 0x6574, 0xD5FC, 0x62EF, 0xD5FD, 0x6B63,
- 0xD5FE, 0x653F, 0xD640, 0x8AE4, 0xD641, 0x8AE5, 0xD642, 0x8AE6, 0xD643, 0x8AE7, 0xD644, 0x8AE8, 0xD645, 0x8AE9, 0xD646, 0x8AEA,
- 0xD647, 0x8AEB, 0xD648, 0x8AEC, 0xD649, 0x8AED, 0xD64A, 0x8AEE, 0xD64B, 0x8AEF, 0xD64C, 0x8AF0, 0xD64D, 0x8AF1, 0xD64E, 0x8AF2,
- 0xD64F, 0x8AF3, 0xD650, 0x8AF4, 0xD651, 0x8AF5, 0xD652, 0x8AF6, 0xD653, 0x8AF7, 0xD654, 0x8AF8, 0xD655, 0x8AF9, 0xD656, 0x8AFA,
- 0xD657, 0x8AFB, 0xD658, 0x8AFC, 0xD659, 0x8AFD, 0xD65A, 0x8AFE, 0xD65B, 0x8AFF, 0xD65C, 0x8B00, 0xD65D, 0x8B01, 0xD65E, 0x8B02,
- 0xD65F, 0x8B03, 0xD660, 0x8B04, 0xD661, 0x8B05, 0xD662, 0x8B06, 0xD663, 0x8B08, 0xD664, 0x8B09, 0xD665, 0x8B0A, 0xD666, 0x8B0B,
- 0xD667, 0x8B0C, 0xD668, 0x8B0D, 0xD669, 0x8B0E, 0xD66A, 0x8B0F, 0xD66B, 0x8B10, 0xD66C, 0x8B11, 0xD66D, 0x8B12, 0xD66E, 0x8B13,
- 0xD66F, 0x8B14, 0xD670, 0x8B15, 0xD671, 0x8B16, 0xD672, 0x8B17, 0xD673, 0x8B18, 0xD674, 0x8B19, 0xD675, 0x8B1A, 0xD676, 0x8B1B,
- 0xD677, 0x8B1C, 0xD678, 0x8B1D, 0xD679, 0x8B1E, 0xD67A, 0x8B1F, 0xD67B, 0x8B20, 0xD67C, 0x8B21, 0xD67D, 0x8B22, 0xD67E, 0x8B23,
- 0xD680, 0x8B24, 0xD681, 0x8B25, 0xD682, 0x8B27, 0xD683, 0x8B28, 0xD684, 0x8B29, 0xD685, 0x8B2A, 0xD686, 0x8B2B, 0xD687, 0x8B2C,
- 0xD688, 0x8B2D, 0xD689, 0x8B2E, 0xD68A, 0x8B2F, 0xD68B, 0x8B30, 0xD68C, 0x8B31, 0xD68D, 0x8B32, 0xD68E, 0x8B33, 0xD68F, 0x8B34,
- 0xD690, 0x8B35, 0xD691, 0x8B36, 0xD692, 0x8B37, 0xD693, 0x8B38, 0xD694, 0x8B39, 0xD695, 0x8B3A, 0xD696, 0x8B3B, 0xD697, 0x8B3C,
- 0xD698, 0x8B3D, 0xD699, 0x8B3E, 0xD69A, 0x8B3F, 0xD69B, 0x8B40, 0xD69C, 0x8B41, 0xD69D, 0x8B42, 0xD69E, 0x8B43, 0xD69F, 0x8B44,
- 0xD6A0, 0x8B45, 0xD6A1, 0x5E27, 0xD6A2, 0x75C7, 0xD6A3, 0x90D1, 0xD6A4, 0x8BC1, 0xD6A5, 0x829D, 0xD6A6, 0x679D, 0xD6A7, 0x652F,
- 0xD6A8, 0x5431, 0xD6A9, 0x8718, 0xD6AA, 0x77E5, 0xD6AB, 0x80A2, 0xD6AC, 0x8102, 0xD6AD, 0x6C41, 0xD6AE, 0x4E4B, 0xD6AF, 0x7EC7,
- 0xD6B0, 0x804C, 0xD6B1, 0x76F4, 0xD6B2, 0x690D, 0xD6B3, 0x6B96, 0xD6B4, 0x6267, 0xD6B5, 0x503C, 0xD6B6, 0x4F84, 0xD6B7, 0x5740,
- 0xD6B8, 0x6307, 0xD6B9, 0x6B62, 0xD6BA, 0x8DBE, 0xD6BB, 0x53EA, 0xD6BC, 0x65E8, 0xD6BD, 0x7EB8, 0xD6BE, 0x5FD7, 0xD6BF, 0x631A,
- 0xD6C0, 0x63B7, 0xD6C1, 0x81F3, 0xD6C2, 0x81F4, 0xD6C3, 0x7F6E, 0xD6C4, 0x5E1C, 0xD6C5, 0x5CD9, 0xD6C6, 0x5236, 0xD6C7, 0x667A,
- 0xD6C8, 0x79E9, 0xD6C9, 0x7A1A, 0xD6CA, 0x8D28, 0xD6CB, 0x7099, 0xD6CC, 0x75D4, 0xD6CD, 0x6EDE, 0xD6CE, 0x6CBB, 0xD6CF, 0x7A92,
- 0xD6D0, 0x4E2D, 0xD6D1, 0x76C5, 0xD6D2, 0x5FE0, 0xD6D3, 0x949F, 0xD6D4, 0x8877, 0xD6D5, 0x7EC8, 0xD6D6, 0x79CD, 0xD6D7, 0x80BF,
- 0xD6D8, 0x91CD, 0xD6D9, 0x4EF2, 0xD6DA, 0x4F17, 0xD6DB, 0x821F, 0xD6DC, 0x5468, 0xD6DD, 0x5DDE, 0xD6DE, 0x6D32, 0xD6DF, 0x8BCC,
- 0xD6E0, 0x7CA5, 0xD6E1, 0x8F74, 0xD6E2, 0x8098, 0xD6E3, 0x5E1A, 0xD6E4, 0x5492, 0xD6E5, 0x76B1, 0xD6E6, 0x5B99, 0xD6E7, 0x663C,
- 0xD6E8, 0x9AA4, 0xD6E9, 0x73E0, 0xD6EA, 0x682A, 0xD6EB, 0x86DB, 0xD6EC, 0x6731, 0xD6ED, 0x732A, 0xD6EE, 0x8BF8, 0xD6EF, 0x8BDB,
- 0xD6F0, 0x9010, 0xD6F1, 0x7AF9, 0xD6F2, 0x70DB, 0xD6F3, 0x716E, 0xD6F4, 0x62C4, 0xD6F5, 0x77A9, 0xD6F6, 0x5631, 0xD6F7, 0x4E3B,
- 0xD6F8, 0x8457, 0xD6F9, 0x67F1, 0xD6FA, 0x52A9, 0xD6FB, 0x86C0, 0xD6FC, 0x8D2E, 0xD6FD, 0x94F8, 0xD6FE, 0x7B51, 0xD740, 0x8B46,
- 0xD741, 0x8B47, 0xD742, 0x8B48, 0xD743, 0x8B49, 0xD744, 0x8B4A, 0xD745, 0x8B4B, 0xD746, 0x8B4C, 0xD747, 0x8B4D, 0xD748, 0x8B4E,
- 0xD749, 0x8B4F, 0xD74A, 0x8B50, 0xD74B, 0x8B51, 0xD74C, 0x8B52, 0xD74D, 0x8B53, 0xD74E, 0x8B54, 0xD74F, 0x8B55, 0xD750, 0x8B56,
- 0xD751, 0x8B57, 0xD752, 0x8B58, 0xD753, 0x8B59, 0xD754, 0x8B5A, 0xD755, 0x8B5B, 0xD756, 0x8B5C, 0xD757, 0x8B5D, 0xD758, 0x8B5E,
- 0xD759, 0x8B5F, 0xD75A, 0x8B60, 0xD75B, 0x8B61, 0xD75C, 0x8B62, 0xD75D, 0x8B63, 0xD75E, 0x8B64, 0xD75F, 0x8B65, 0xD760, 0x8B67,
- 0xD761, 0x8B68, 0xD762, 0x8B69, 0xD763, 0x8B6A, 0xD764, 0x8B6B, 0xD765, 0x8B6D, 0xD766, 0x8B6E, 0xD767, 0x8B6F, 0xD768, 0x8B70,
- 0xD769, 0x8B71, 0xD76A, 0x8B72, 0xD76B, 0x8B73, 0xD76C, 0x8B74, 0xD76D, 0x8B75, 0xD76E, 0x8B76, 0xD76F, 0x8B77, 0xD770, 0x8B78,
- 0xD771, 0x8B79, 0xD772, 0x8B7A, 0xD773, 0x8B7B, 0xD774, 0x8B7C, 0xD775, 0x8B7D, 0xD776, 0x8B7E, 0xD777, 0x8B7F, 0xD778, 0x8B80,
- 0xD779, 0x8B81, 0xD77A, 0x8B82, 0xD77B, 0x8B83, 0xD77C, 0x8B84, 0xD77D, 0x8B85, 0xD77E, 0x8B86, 0xD780, 0x8B87, 0xD781, 0x8B88,
- 0xD782, 0x8B89, 0xD783, 0x8B8A, 0xD784, 0x8B8B, 0xD785, 0x8B8C, 0xD786, 0x8B8D, 0xD787, 0x8B8E, 0xD788, 0x8B8F, 0xD789, 0x8B90,
- 0xD78A, 0x8B91, 0xD78B, 0x8B92, 0xD78C, 0x8B93, 0xD78D, 0x8B94, 0xD78E, 0x8B95, 0xD78F, 0x8B96, 0xD790, 0x8B97, 0xD791, 0x8B98,
- 0xD792, 0x8B99, 0xD793, 0x8B9A, 0xD794, 0x8B9B, 0xD795, 0x8B9C, 0xD796, 0x8B9D, 0xD797, 0x8B9E, 0xD798, 0x8B9F, 0xD799, 0x8BAC,
- 0xD79A, 0x8BB1, 0xD79B, 0x8BBB, 0xD79C, 0x8BC7, 0xD79D, 0x8BD0, 0xD79E, 0x8BEA, 0xD79F, 0x8C09, 0xD7A0, 0x8C1E, 0xD7A1, 0x4F4F,
- 0xD7A2, 0x6CE8, 0xD7A3, 0x795D, 0xD7A4, 0x9A7B, 0xD7A5, 0x6293, 0xD7A6, 0x722A, 0xD7A7, 0x62FD, 0xD7A8, 0x4E13, 0xD7A9, 0x7816,
- 0xD7AA, 0x8F6C, 0xD7AB, 0x64B0, 0xD7AC, 0x8D5A, 0xD7AD, 0x7BC6, 0xD7AE, 0x6869, 0xD7AF, 0x5E84, 0xD7B0, 0x88C5, 0xD7B1, 0x5986,
- 0xD7B2, 0x649E, 0xD7B3, 0x58EE, 0xD7B4, 0x72B6, 0xD7B5, 0x690E, 0xD7B6, 0x9525, 0xD7B7, 0x8FFD, 0xD7B8, 0x8D58, 0xD7B9, 0x5760,
- 0xD7BA, 0x7F00, 0xD7BB, 0x8C06, 0xD7BC, 0x51C6, 0xD7BD, 0x6349, 0xD7BE, 0x62D9, 0xD7BF, 0x5353, 0xD7C0, 0x684C, 0xD7C1, 0x7422,
- 0xD7C2, 0x8301, 0xD7C3, 0x914C, 0xD7C4, 0x5544, 0xD7C5, 0x7740, 0xD7C6, 0x707C, 0xD7C7, 0x6D4A, 0xD7C8, 0x5179, 0xD7C9, 0x54A8,
- 0xD7CA, 0x8D44, 0xD7CB, 0x59FF, 0xD7CC, 0x6ECB, 0xD7CD, 0x6DC4, 0xD7CE, 0x5B5C, 0xD7CF, 0x7D2B, 0xD7D0, 0x4ED4, 0xD7D1, 0x7C7D,
- 0xD7D2, 0x6ED3, 0xD7D3, 0x5B50, 0xD7D4, 0x81EA, 0xD7D5, 0x6E0D, 0xD7D6, 0x5B57, 0xD7D7, 0x9B03, 0xD7D8, 0x68D5, 0xD7D9, 0x8E2A,
- 0xD7DA, 0x5B97, 0xD7DB, 0x7EFC, 0xD7DC, 0x603B, 0xD7DD, 0x7EB5, 0xD7DE, 0x90B9, 0xD7DF, 0x8D70, 0xD7E0, 0x594F, 0xD7E1, 0x63CD,
- 0xD7E2, 0x79DF, 0xD7E3, 0x8DB3, 0xD7E4, 0x5352, 0xD7E5, 0x65CF, 0xD7E6, 0x7956, 0xD7E7, 0x8BC5, 0xD7E8, 0x963B, 0xD7E9, 0x7EC4,
- 0xD7EA, 0x94BB, 0xD7EB, 0x7E82, 0xD7EC, 0x5634, 0xD7ED, 0x9189, 0xD7EE, 0x6700, 0xD7EF, 0x7F6A, 0xD7F0, 0x5C0A, 0xD7F1, 0x9075,
- 0xD7F2, 0x6628, 0xD7F3, 0x5DE6, 0xD7F4, 0x4F50, 0xD7F5, 0x67DE, 0xD7F6, 0x505A, 0xD7F7, 0x4F5C, 0xD7F8, 0x5750, 0xD7F9, 0x5EA7,
- 0xD840, 0x8C38, 0xD841, 0x8C39, 0xD842, 0x8C3A, 0xD843, 0x8C3B, 0xD844, 0x8C3C, 0xD845, 0x8C3D, 0xD846, 0x8C3E, 0xD847, 0x8C3F,
- 0xD848, 0x8C40, 0xD849, 0x8C42, 0xD84A, 0x8C43, 0xD84B, 0x8C44, 0xD84C, 0x8C45, 0xD84D, 0x8C48, 0xD84E, 0x8C4A, 0xD84F, 0x8C4B,
- 0xD850, 0x8C4D, 0xD851, 0x8C4E, 0xD852, 0x8C4F, 0xD853, 0x8C50, 0xD854, 0x8C51, 0xD855, 0x8C52, 0xD856, 0x8C53, 0xD857, 0x8C54,
- 0xD858, 0x8C56, 0xD859, 0x8C57, 0xD85A, 0x8C58, 0xD85B, 0x8C59, 0xD85C, 0x8C5B, 0xD85D, 0x8C5C, 0xD85E, 0x8C5D, 0xD85F, 0x8C5E,
- 0xD860, 0x8C5F, 0xD861, 0x8C60, 0xD862, 0x8C63, 0xD863, 0x8C64, 0xD864, 0x8C65, 0xD865, 0x8C66, 0xD866, 0x8C67, 0xD867, 0x8C68,
- 0xD868, 0x8C69, 0xD869, 0x8C6C, 0xD86A, 0x8C6D, 0xD86B, 0x8C6E, 0xD86C, 0x8C6F, 0xD86D, 0x8C70, 0xD86E, 0x8C71, 0xD86F, 0x8C72,
- 0xD870, 0x8C74, 0xD871, 0x8C75, 0xD872, 0x8C76, 0xD873, 0x8C77, 0xD874, 0x8C7B, 0xD875, 0x8C7C, 0xD876, 0x8C7D, 0xD877, 0x8C7E,
- 0xD878, 0x8C7F, 0xD879, 0x8C80, 0xD87A, 0x8C81, 0xD87B, 0x8C83, 0xD87C, 0x8C84, 0xD87D, 0x8C86, 0xD87E, 0x8C87, 0xD880, 0x8C88,
- 0xD881, 0x8C8B, 0xD882, 0x8C8D, 0xD883, 0x8C8E, 0xD884, 0x8C8F, 0xD885, 0x8C90, 0xD886, 0x8C91, 0xD887, 0x8C92, 0xD888, 0x8C93,
- 0xD889, 0x8C95, 0xD88A, 0x8C96, 0xD88B, 0x8C97, 0xD88C, 0x8C99, 0xD88D, 0x8C9A, 0xD88E, 0x8C9B, 0xD88F, 0x8C9C, 0xD890, 0x8C9D,
- 0xD891, 0x8C9E, 0xD892, 0x8C9F, 0xD893, 0x8CA0, 0xD894, 0x8CA1, 0xD895, 0x8CA2, 0xD896, 0x8CA3, 0xD897, 0x8CA4, 0xD898, 0x8CA5,
- 0xD899, 0x8CA6, 0xD89A, 0x8CA7, 0xD89B, 0x8CA8, 0xD89C, 0x8CA9, 0xD89D, 0x8CAA, 0xD89E, 0x8CAB, 0xD89F, 0x8CAC, 0xD8A0, 0x8CAD,
- 0xD8A1, 0x4E8D, 0xD8A2, 0x4E0C, 0xD8A3, 0x5140, 0xD8A4, 0x4E10, 0xD8A5, 0x5EFF, 0xD8A6, 0x5345, 0xD8A7, 0x4E15, 0xD8A8, 0x4E98,
- 0xD8A9, 0x4E1E, 0xD8AA, 0x9B32, 0xD8AB, 0x5B6C, 0xD8AC, 0x5669, 0xD8AD, 0x4E28, 0xD8AE, 0x79BA, 0xD8AF, 0x4E3F, 0xD8B0, 0x5315,
- 0xD8B1, 0x4E47, 0xD8B2, 0x592D, 0xD8B3, 0x723B, 0xD8B4, 0x536E, 0xD8B5, 0x6C10, 0xD8B6, 0x56DF, 0xD8B7, 0x80E4, 0xD8B8, 0x9997,
- 0xD8B9, 0x6BD3, 0xD8BA, 0x777E, 0xD8BB, 0x9F17, 0xD8BC, 0x4E36, 0xD8BD, 0x4E9F, 0xD8BE, 0x9F10, 0xD8BF, 0x4E5C, 0xD8C0, 0x4E69,
- 0xD8C1, 0x4E93, 0xD8C2, 0x8288, 0xD8C3, 0x5B5B, 0xD8C4, 0x556C, 0xD8C5, 0x560F, 0xD8C6, 0x4EC4, 0xD8C7, 0x538D, 0xD8C8, 0x539D,
- 0xD8C9, 0x53A3, 0xD8CA, 0x53A5, 0xD8CB, 0x53AE, 0xD8CC, 0x9765, 0xD8CD, 0x8D5D, 0xD8CE, 0x531A, 0xD8CF, 0x53F5, 0xD8D0, 0x5326,
- 0xD8D1, 0x532E, 0xD8D2, 0x533E, 0xD8D3, 0x8D5C, 0xD8D4, 0x5366, 0xD8D5, 0x5363, 0xD8D6, 0x5202, 0xD8D7, 0x5208, 0xD8D8, 0x520E,
- 0xD8D9, 0x522D, 0xD8DA, 0x5233, 0xD8DB, 0x523F, 0xD8DC, 0x5240, 0xD8DD, 0x524C, 0xD8DE, 0x525E, 0xD8DF, 0x5261, 0xD8E0, 0x525C,
- 0xD8E1, 0x84AF, 0xD8E2, 0x527D, 0xD8E3, 0x5282, 0xD8E4, 0x5281, 0xD8E5, 0x5290, 0xD8E6, 0x5293, 0xD8E7, 0x5182, 0xD8E8, 0x7F54,
- 0xD8E9, 0x4EBB, 0xD8EA, 0x4EC3, 0xD8EB, 0x4EC9, 0xD8EC, 0x4EC2, 0xD8ED, 0x4EE8, 0xD8EE, 0x4EE1, 0xD8EF, 0x4EEB, 0xD8F0, 0x4EDE,
- 0xD8F1, 0x4F1B, 0xD8F2, 0x4EF3, 0xD8F3, 0x4F22, 0xD8F4, 0x4F64, 0xD8F5, 0x4EF5, 0xD8F6, 0x4F25, 0xD8F7, 0x4F27, 0xD8F8, 0x4F09,
- 0xD8F9, 0x4F2B, 0xD8FA, 0x4F5E, 0xD8FB, 0x4F67, 0xD8FC, 0x6538, 0xD8FD, 0x4F5A, 0xD8FE, 0x4F5D, 0xD940, 0x8CAE, 0xD941, 0x8CAF,
- 0xD942, 0x8CB0, 0xD943, 0x8CB1, 0xD944, 0x8CB2, 0xD945, 0x8CB3, 0xD946, 0x8CB4, 0xD947, 0x8CB5, 0xD948, 0x8CB6, 0xD949, 0x8CB7,
- 0xD94A, 0x8CB8, 0xD94B, 0x8CB9, 0xD94C, 0x8CBA, 0xD94D, 0x8CBB, 0xD94E, 0x8CBC, 0xD94F, 0x8CBD, 0xD950, 0x8CBE, 0xD951, 0x8CBF,
- 0xD952, 0x8CC0, 0xD953, 0x8CC1, 0xD954, 0x8CC2, 0xD955, 0x8CC3, 0xD956, 0x8CC4, 0xD957, 0x8CC5, 0xD958, 0x8CC6, 0xD959, 0x8CC7,
- 0xD95A, 0x8CC8, 0xD95B, 0x8CC9, 0xD95C, 0x8CCA, 0xD95D, 0x8CCB, 0xD95E, 0x8CCC, 0xD95F, 0x8CCD, 0xD960, 0x8CCE, 0xD961, 0x8CCF,
- 0xD962, 0x8CD0, 0xD963, 0x8CD1, 0xD964, 0x8CD2, 0xD965, 0x8CD3, 0xD966, 0x8CD4, 0xD967, 0x8CD5, 0xD968, 0x8CD6, 0xD969, 0x8CD7,
- 0xD96A, 0x8CD8, 0xD96B, 0x8CD9, 0xD96C, 0x8CDA, 0xD96D, 0x8CDB, 0xD96E, 0x8CDC, 0xD96F, 0x8CDD, 0xD970, 0x8CDE, 0xD971, 0x8CDF,
- 0xD972, 0x8CE0, 0xD973, 0x8CE1, 0xD974, 0x8CE2, 0xD975, 0x8CE3, 0xD976, 0x8CE4, 0xD977, 0x8CE5, 0xD978, 0x8CE6, 0xD979, 0x8CE7,
- 0xD97A, 0x8CE8, 0xD97B, 0x8CE9, 0xD97C, 0x8CEA, 0xD97D, 0x8CEB, 0xD97E, 0x8CEC, 0xD980, 0x8CED, 0xD981, 0x8CEE, 0xD982, 0x8CEF,
- 0xD983, 0x8CF0, 0xD984, 0x8CF1, 0xD985, 0x8CF2, 0xD986, 0x8CF3, 0xD987, 0x8CF4, 0xD988, 0x8CF5, 0xD989, 0x8CF6, 0xD98A, 0x8CF7,
- 0xD98B, 0x8CF8, 0xD98C, 0x8CF9, 0xD98D, 0x8CFA, 0xD98E, 0x8CFB, 0xD98F, 0x8CFC, 0xD990, 0x8CFD, 0xD991, 0x8CFE, 0xD992, 0x8CFF,
- 0xD993, 0x8D00, 0xD994, 0x8D01, 0xD995, 0x8D02, 0xD996, 0x8D03, 0xD997, 0x8D04, 0xD998, 0x8D05, 0xD999, 0x8D06, 0xD99A, 0x8D07,
- 0xD99B, 0x8D08, 0xD99C, 0x8D09, 0xD99D, 0x8D0A, 0xD99E, 0x8D0B, 0xD99F, 0x8D0C, 0xD9A0, 0x8D0D, 0xD9A1, 0x4F5F, 0xD9A2, 0x4F57,
- 0xD9A3, 0x4F32, 0xD9A4, 0x4F3D, 0xD9A5, 0x4F76, 0xD9A6, 0x4F74, 0xD9A7, 0x4F91, 0xD9A8, 0x4F89, 0xD9A9, 0x4F83, 0xD9AA, 0x4F8F,
- 0xD9AB, 0x4F7E, 0xD9AC, 0x4F7B, 0xD9AD, 0x4FAA, 0xD9AE, 0x4F7C, 0xD9AF, 0x4FAC, 0xD9B0, 0x4F94, 0xD9B1, 0x4FE6, 0xD9B2, 0x4FE8,
- 0xD9B3, 0x4FEA, 0xD9B4, 0x4FC5, 0xD9B5, 0x4FDA, 0xD9B6, 0x4FE3, 0xD9B7, 0x4FDC, 0xD9B8, 0x4FD1, 0xD9B9, 0x4FDF, 0xD9BA, 0x4FF8,
- 0xD9BB, 0x5029, 0xD9BC, 0x504C, 0xD9BD, 0x4FF3, 0xD9BE, 0x502C, 0xD9BF, 0x500F, 0xD9C0, 0x502E, 0xD9C1, 0x502D, 0xD9C2, 0x4FFE,
- 0xD9C3, 0x501C, 0xD9C4, 0x500C, 0xD9C5, 0x5025, 0xD9C6, 0x5028, 0xD9C7, 0x507E, 0xD9C8, 0x5043, 0xD9C9, 0x5055, 0xD9CA, 0x5048,
- 0xD9CB, 0x504E, 0xD9CC, 0x506C, 0xD9CD, 0x507B, 0xD9CE, 0x50A5, 0xD9CF, 0x50A7, 0xD9D0, 0x50A9, 0xD9D1, 0x50BA, 0xD9D2, 0x50D6,
- 0xD9D3, 0x5106, 0xD9D4, 0x50ED, 0xD9D5, 0x50EC, 0xD9D6, 0x50E6, 0xD9D7, 0x50EE, 0xD9D8, 0x5107, 0xD9D9, 0x510B, 0xD9DA, 0x4EDD,
- 0xD9DB, 0x6C3D, 0xD9DC, 0x4F58, 0xD9DD, 0x4F65, 0xD9DE, 0x4FCE, 0xD9DF, 0x9FA0, 0xD9E0, 0x6C46, 0xD9E1, 0x7C74, 0xD9E2, 0x516E,
- 0xD9E3, 0x5DFD, 0xD9E4, 0x9EC9, 0xD9E5, 0x9998, 0xD9E6, 0x5181, 0xD9E7, 0x5914, 0xD9E8, 0x52F9, 0xD9E9, 0x530D, 0xD9EA, 0x8A07,
- 0xD9EB, 0x5310, 0xD9EC, 0x51EB, 0xD9ED, 0x5919, 0xD9EE, 0x5155, 0xD9EF, 0x4EA0, 0xD9F0, 0x5156, 0xD9F1, 0x4EB3, 0xD9F2, 0x886E,
- 0xD9F3, 0x88A4, 0xD9F4, 0x4EB5, 0xD9F5, 0x8114, 0xD9F6, 0x88D2, 0xD9F7, 0x7980, 0xD9F8, 0x5B34, 0xD9F9, 0x8803, 0xD9FA, 0x7FB8,
- 0xD9FB, 0x51AB, 0xD9FC, 0x51B1, 0xD9FD, 0x51BD, 0xD9FE, 0x51BC, 0xDA40, 0x8D0E, 0xDA41, 0x8D0F, 0xDA42, 0x8D10, 0xDA43, 0x8D11,
- 0xDA44, 0x8D12, 0xDA45, 0x8D13, 0xDA46, 0x8D14, 0xDA47, 0x8D15, 0xDA48, 0x8D16, 0xDA49, 0x8D17, 0xDA4A, 0x8D18, 0xDA4B, 0x8D19,
- 0xDA4C, 0x8D1A, 0xDA4D, 0x8D1B, 0xDA4E, 0x8D1C, 0xDA4F, 0x8D20, 0xDA50, 0x8D51, 0xDA51, 0x8D52, 0xDA52, 0x8D57, 0xDA53, 0x8D5F,
- 0xDA54, 0x8D65, 0xDA55, 0x8D68, 0xDA56, 0x8D69, 0xDA57, 0x8D6A, 0xDA58, 0x8D6C, 0xDA59, 0x8D6E, 0xDA5A, 0x8D6F, 0xDA5B, 0x8D71,
- 0xDA5C, 0x8D72, 0xDA5D, 0x8D78, 0xDA5E, 0x8D79, 0xDA5F, 0x8D7A, 0xDA60, 0x8D7B, 0xDA61, 0x8D7C, 0xDA62, 0x8D7D, 0xDA63, 0x8D7E,
- 0xDA64, 0x8D7F, 0xDA65, 0x8D80, 0xDA66, 0x8D82, 0xDA67, 0x8D83, 0xDA68, 0x8D86, 0xDA69, 0x8D87, 0xDA6A, 0x8D88, 0xDA6B, 0x8D89,
- 0xDA6C, 0x8D8C, 0xDA6D, 0x8D8D, 0xDA6E, 0x8D8E, 0xDA6F, 0x8D8F, 0xDA70, 0x8D90, 0xDA71, 0x8D92, 0xDA72, 0x8D93, 0xDA73, 0x8D95,
- 0xDA74, 0x8D96, 0xDA75, 0x8D97, 0xDA76, 0x8D98, 0xDA77, 0x8D99, 0xDA78, 0x8D9A, 0xDA79, 0x8D9B, 0xDA7A, 0x8D9C, 0xDA7B, 0x8D9D,
- 0xDA7C, 0x8D9E, 0xDA7D, 0x8DA0, 0xDA7E, 0x8DA1, 0xDA80, 0x8DA2, 0xDA81, 0x8DA4, 0xDA82, 0x8DA5, 0xDA83, 0x8DA6, 0xDA84, 0x8DA7,
- 0xDA85, 0x8DA8, 0xDA86, 0x8DA9, 0xDA87, 0x8DAA, 0xDA88, 0x8DAB, 0xDA89, 0x8DAC, 0xDA8A, 0x8DAD, 0xDA8B, 0x8DAE, 0xDA8C, 0x8DAF,
- 0xDA8D, 0x8DB0, 0xDA8E, 0x8DB2, 0xDA8F, 0x8DB6, 0xDA90, 0x8DB7, 0xDA91, 0x8DB9, 0xDA92, 0x8DBB, 0xDA93, 0x8DBD, 0xDA94, 0x8DC0,
- 0xDA95, 0x8DC1, 0xDA96, 0x8DC2, 0xDA97, 0x8DC5, 0xDA98, 0x8DC7, 0xDA99, 0x8DC8, 0xDA9A, 0x8DC9, 0xDA9B, 0x8DCA, 0xDA9C, 0x8DCD,
- 0xDA9D, 0x8DD0, 0xDA9E, 0x8DD2, 0xDA9F, 0x8DD3, 0xDAA0, 0x8DD4, 0xDAA1, 0x51C7, 0xDAA2, 0x5196, 0xDAA3, 0x51A2, 0xDAA4, 0x51A5,
- 0xDAA5, 0x8BA0, 0xDAA6, 0x8BA6, 0xDAA7, 0x8BA7, 0xDAA8, 0x8BAA, 0xDAA9, 0x8BB4, 0xDAAA, 0x8BB5, 0xDAAB, 0x8BB7, 0xDAAC, 0x8BC2,
- 0xDAAD, 0x8BC3, 0xDAAE, 0x8BCB, 0xDAAF, 0x8BCF, 0xDAB0, 0x8BCE, 0xDAB1, 0x8BD2, 0xDAB2, 0x8BD3, 0xDAB3, 0x8BD4, 0xDAB4, 0x8BD6,
- 0xDAB5, 0x8BD8, 0xDAB6, 0x8BD9, 0xDAB7, 0x8BDC, 0xDAB8, 0x8BDF, 0xDAB9, 0x8BE0, 0xDABA, 0x8BE4, 0xDABB, 0x8BE8, 0xDABC, 0x8BE9,
- 0xDABD, 0x8BEE, 0xDABE, 0x8BF0, 0xDABF, 0x8BF3, 0xDAC0, 0x8BF6, 0xDAC1, 0x8BF9, 0xDAC2, 0x8BFC, 0xDAC3, 0x8BFF, 0xDAC4, 0x8C00,
- 0xDAC5, 0x8C02, 0xDAC6, 0x8C04, 0xDAC7, 0x8C07, 0xDAC8, 0x8C0C, 0xDAC9, 0x8C0F, 0xDACA, 0x8C11, 0xDACB, 0x8C12, 0xDACC, 0x8C14,
- 0xDACD, 0x8C15, 0xDACE, 0x8C16, 0xDACF, 0x8C19, 0xDAD0, 0x8C1B, 0xDAD1, 0x8C18, 0xDAD2, 0x8C1D, 0xDAD3, 0x8C1F, 0xDAD4, 0x8C20,
- 0xDAD5, 0x8C21, 0xDAD6, 0x8C25, 0xDAD7, 0x8C27, 0xDAD8, 0x8C2A, 0xDAD9, 0x8C2B, 0xDADA, 0x8C2E, 0xDADB, 0x8C2F, 0xDADC, 0x8C32,
- 0xDADD, 0x8C33, 0xDADE, 0x8C35, 0xDADF, 0x8C36, 0xDAE0, 0x5369, 0xDAE1, 0x537A, 0xDAE2, 0x961D, 0xDAE3, 0x9622, 0xDAE4, 0x9621,
- 0xDAE5, 0x9631, 0xDAE6, 0x962A, 0xDAE7, 0x963D, 0xDAE8, 0x963C, 0xDAE9, 0x9642, 0xDAEA, 0x9649, 0xDAEB, 0x9654, 0xDAEC, 0x965F,
- 0xDAED, 0x9667, 0xDAEE, 0x966C, 0xDAEF, 0x9672, 0xDAF0, 0x9674, 0xDAF1, 0x9688, 0xDAF2, 0x968D, 0xDAF3, 0x9697, 0xDAF4, 0x96B0,
- 0xDAF5, 0x9097, 0xDAF6, 0x909B, 0xDAF7, 0x909D, 0xDAF8, 0x9099, 0xDAF9, 0x90AC, 0xDAFA, 0x90A1, 0xDAFB, 0x90B4, 0xDAFC, 0x90B3,
- 0xDAFD, 0x90B6, 0xDAFE, 0x90BA, 0xDB40, 0x8DD5, 0xDB41, 0x8DD8, 0xDB42, 0x8DD9, 0xDB43, 0x8DDC, 0xDB44, 0x8DE0, 0xDB45, 0x8DE1,
- 0xDB46, 0x8DE2, 0xDB47, 0x8DE5, 0xDB48, 0x8DE6, 0xDB49, 0x8DE7, 0xDB4A, 0x8DE9, 0xDB4B, 0x8DED, 0xDB4C, 0x8DEE, 0xDB4D, 0x8DF0,
- 0xDB4E, 0x8DF1, 0xDB4F, 0x8DF2, 0xDB50, 0x8DF4, 0xDB51, 0x8DF6, 0xDB52, 0x8DFC, 0xDB53, 0x8DFE, 0xDB54, 0x8DFF, 0xDB55, 0x8E00,
- 0xDB56, 0x8E01, 0xDB57, 0x8E02, 0xDB58, 0x8E03, 0xDB59, 0x8E04, 0xDB5A, 0x8E06, 0xDB5B, 0x8E07, 0xDB5C, 0x8E08, 0xDB5D, 0x8E0B,
- 0xDB5E, 0x8E0D, 0xDB5F, 0x8E0E, 0xDB60, 0x8E10, 0xDB61, 0x8E11, 0xDB62, 0x8E12, 0xDB63, 0x8E13, 0xDB64, 0x8E15, 0xDB65, 0x8E16,
- 0xDB66, 0x8E17, 0xDB67, 0x8E18, 0xDB68, 0x8E19, 0xDB69, 0x8E1A, 0xDB6A, 0x8E1B, 0xDB6B, 0x8E1C, 0xDB6C, 0x8E20, 0xDB6D, 0x8E21,
- 0xDB6E, 0x8E24, 0xDB6F, 0x8E25, 0xDB70, 0x8E26, 0xDB71, 0x8E27, 0xDB72, 0x8E28, 0xDB73, 0x8E2B, 0xDB74, 0x8E2D, 0xDB75, 0x8E30,
- 0xDB76, 0x8E32, 0xDB77, 0x8E33, 0xDB78, 0x8E34, 0xDB79, 0x8E36, 0xDB7A, 0x8E37, 0xDB7B, 0x8E38, 0xDB7C, 0x8E3B, 0xDB7D, 0x8E3C,
- 0xDB7E, 0x8E3E, 0xDB80, 0x8E3F, 0xDB81, 0x8E43, 0xDB82, 0x8E45, 0xDB83, 0x8E46, 0xDB84, 0x8E4C, 0xDB85, 0x8E4D, 0xDB86, 0x8E4E,
- 0xDB87, 0x8E4F, 0xDB88, 0x8E50, 0xDB89, 0x8E53, 0xDB8A, 0x8E54, 0xDB8B, 0x8E55, 0xDB8C, 0x8E56, 0xDB8D, 0x8E57, 0xDB8E, 0x8E58,
- 0xDB8F, 0x8E5A, 0xDB90, 0x8E5B, 0xDB91, 0x8E5C, 0xDB92, 0x8E5D, 0xDB93, 0x8E5E, 0xDB94, 0x8E5F, 0xDB95, 0x8E60, 0xDB96, 0x8E61,
- 0xDB97, 0x8E62, 0xDB98, 0x8E63, 0xDB99, 0x8E64, 0xDB9A, 0x8E65, 0xDB9B, 0x8E67, 0xDB9C, 0x8E68, 0xDB9D, 0x8E6A, 0xDB9E, 0x8E6B,
- 0xDB9F, 0x8E6E, 0xDBA0, 0x8E71, 0xDBA1, 0x90B8, 0xDBA2, 0x90B0, 0xDBA3, 0x90CF, 0xDBA4, 0x90C5, 0xDBA5, 0x90BE, 0xDBA6, 0x90D0,
- 0xDBA7, 0x90C4, 0xDBA8, 0x90C7, 0xDBA9, 0x90D3, 0xDBAA, 0x90E6, 0xDBAB, 0x90E2, 0xDBAC, 0x90DC, 0xDBAD, 0x90D7, 0xDBAE, 0x90DB,
- 0xDBAF, 0x90EB, 0xDBB0, 0x90EF, 0xDBB1, 0x90FE, 0xDBB2, 0x9104, 0xDBB3, 0x9122, 0xDBB4, 0x911E, 0xDBB5, 0x9123, 0xDBB6, 0x9131,
- 0xDBB7, 0x912F, 0xDBB8, 0x9139, 0xDBB9, 0x9143, 0xDBBA, 0x9146, 0xDBBB, 0x520D, 0xDBBC, 0x5942, 0xDBBD, 0x52A2, 0xDBBE, 0x52AC,
- 0xDBBF, 0x52AD, 0xDBC0, 0x52BE, 0xDBC1, 0x54FF, 0xDBC2, 0x52D0, 0xDBC3, 0x52D6, 0xDBC4, 0x52F0, 0xDBC5, 0x53DF, 0xDBC6, 0x71EE,
- 0xDBC7, 0x77CD, 0xDBC8, 0x5EF4, 0xDBC9, 0x51F5, 0xDBCA, 0x51FC, 0xDBCB, 0x9B2F, 0xDBCC, 0x53B6, 0xDBCD, 0x5F01, 0xDBCE, 0x755A,
- 0xDBCF, 0x5DEF, 0xDBD0, 0x574C, 0xDBD1, 0x57A9, 0xDBD2, 0x57A1, 0xDBD3, 0x587E, 0xDBD4, 0x58BC, 0xDBD5, 0x58C5, 0xDBD6, 0x58D1,
- 0xDBD7, 0x5729, 0xDBD8, 0x572C, 0xDBD9, 0x572A, 0xDBDA, 0x5733, 0xDBDB, 0x5739, 0xDBDC, 0x572E, 0xDBDD, 0x572F, 0xDBDE, 0x575C,
- 0xDBDF, 0x573B, 0xDBE0, 0x5742, 0xDBE1, 0x5769, 0xDBE2, 0x5785, 0xDBE3, 0x576B, 0xDBE4, 0x5786, 0xDBE5, 0x577C, 0xDBE6, 0x577B,
- 0xDBE7, 0x5768, 0xDBE8, 0x576D, 0xDBE9, 0x5776, 0xDBEA, 0x5773, 0xDBEB, 0x57AD, 0xDBEC, 0x57A4, 0xDBED, 0x578C, 0xDBEE, 0x57B2,
- 0xDBEF, 0x57CF, 0xDBF0, 0x57A7, 0xDBF1, 0x57B4, 0xDBF2, 0x5793, 0xDBF3, 0x57A0, 0xDBF4, 0x57D5, 0xDBF5, 0x57D8, 0xDBF6, 0x57DA,
- 0xDBF7, 0x57D9, 0xDBF8, 0x57D2, 0xDBF9, 0x57B8, 0xDBFA, 0x57F4, 0xDBFB, 0x57EF, 0xDBFC, 0x57F8, 0xDBFD, 0x57E4, 0xDBFE, 0x57DD,
- 0xDC40, 0x8E73, 0xDC41, 0x8E75, 0xDC42, 0x8E77, 0xDC43, 0x8E78, 0xDC44, 0x8E79, 0xDC45, 0x8E7A, 0xDC46, 0x8E7B, 0xDC47, 0x8E7D,
- 0xDC48, 0x8E7E, 0xDC49, 0x8E80, 0xDC4A, 0x8E82, 0xDC4B, 0x8E83, 0xDC4C, 0x8E84, 0xDC4D, 0x8E86, 0xDC4E, 0x8E88, 0xDC4F, 0x8E89,
- 0xDC50, 0x8E8A, 0xDC51, 0x8E8B, 0xDC52, 0x8E8C, 0xDC53, 0x8E8D, 0xDC54, 0x8E8E, 0xDC55, 0x8E91, 0xDC56, 0x8E92, 0xDC57, 0x8E93,
- 0xDC58, 0x8E95, 0xDC59, 0x8E96, 0xDC5A, 0x8E97, 0xDC5B, 0x8E98, 0xDC5C, 0x8E99, 0xDC5D, 0x8E9A, 0xDC5E, 0x8E9B, 0xDC5F, 0x8E9D,
- 0xDC60, 0x8E9F, 0xDC61, 0x8EA0, 0xDC62, 0x8EA1, 0xDC63, 0x8EA2, 0xDC64, 0x8EA3, 0xDC65, 0x8EA4, 0xDC66, 0x8EA5, 0xDC67, 0x8EA6,
- 0xDC68, 0x8EA7, 0xDC69, 0x8EA8, 0xDC6A, 0x8EA9, 0xDC6B, 0x8EAA, 0xDC6C, 0x8EAD, 0xDC6D, 0x8EAE, 0xDC6E, 0x8EB0, 0xDC6F, 0x8EB1,
- 0xDC70, 0x8EB3, 0xDC71, 0x8EB4, 0xDC72, 0x8EB5, 0xDC73, 0x8EB6, 0xDC74, 0x8EB7, 0xDC75, 0x8EB8, 0xDC76, 0x8EB9, 0xDC77, 0x8EBB,
- 0xDC78, 0x8EBC, 0xDC79, 0x8EBD, 0xDC7A, 0x8EBE, 0xDC7B, 0x8EBF, 0xDC7C, 0x8EC0, 0xDC7D, 0x8EC1, 0xDC7E, 0x8EC2, 0xDC80, 0x8EC3,
- 0xDC81, 0x8EC4, 0xDC82, 0x8EC5, 0xDC83, 0x8EC6, 0xDC84, 0x8EC7, 0xDC85, 0x8EC8, 0xDC86, 0x8EC9, 0xDC87, 0x8ECA, 0xDC88, 0x8ECB,
- 0xDC89, 0x8ECC, 0xDC8A, 0x8ECD, 0xDC8B, 0x8ECF, 0xDC8C, 0x8ED0, 0xDC8D, 0x8ED1, 0xDC8E, 0x8ED2, 0xDC8F, 0x8ED3, 0xDC90, 0x8ED4,
- 0xDC91, 0x8ED5, 0xDC92, 0x8ED6, 0xDC93, 0x8ED7, 0xDC94, 0x8ED8, 0xDC95, 0x8ED9, 0xDC96, 0x8EDA, 0xDC97, 0x8EDB, 0xDC98, 0x8EDC,
- 0xDC99, 0x8EDD, 0xDC9A, 0x8EDE, 0xDC9B, 0x8EDF, 0xDC9C, 0x8EE0, 0xDC9D, 0x8EE1, 0xDC9E, 0x8EE2, 0xDC9F, 0x8EE3, 0xDCA0, 0x8EE4,
- 0xDCA1, 0x580B, 0xDCA2, 0x580D, 0xDCA3, 0x57FD, 0xDCA4, 0x57ED, 0xDCA5, 0x5800, 0xDCA6, 0x581E, 0xDCA7, 0x5819, 0xDCA8, 0x5844,
- 0xDCA9, 0x5820, 0xDCAA, 0x5865, 0xDCAB, 0x586C, 0xDCAC, 0x5881, 0xDCAD, 0x5889, 0xDCAE, 0x589A, 0xDCAF, 0x5880, 0xDCB0, 0x99A8,
- 0xDCB1, 0x9F19, 0xDCB2, 0x61FF, 0xDCB3, 0x8279, 0xDCB4, 0x827D, 0xDCB5, 0x827F, 0xDCB6, 0x828F, 0xDCB7, 0x828A, 0xDCB8, 0x82A8,
- 0xDCB9, 0x8284, 0xDCBA, 0x828E, 0xDCBB, 0x8291, 0xDCBC, 0x8297, 0xDCBD, 0x8299, 0xDCBE, 0x82AB, 0xDCBF, 0x82B8, 0xDCC0, 0x82BE,
- 0xDCC1, 0x82B0, 0xDCC2, 0x82C8, 0xDCC3, 0x82CA, 0xDCC4, 0x82E3, 0xDCC5, 0x8298, 0xDCC6, 0x82B7, 0xDCC7, 0x82AE, 0xDCC8, 0x82CB,
- 0xDCC9, 0x82CC, 0xDCCA, 0x82C1, 0xDCCB, 0x82A9, 0xDCCC, 0x82B4, 0xDCCD, 0x82A1, 0xDCCE, 0x82AA, 0xDCCF, 0x829F, 0xDCD0, 0x82C4,
- 0xDCD1, 0x82CE, 0xDCD2, 0x82A4, 0xDCD3, 0x82E1, 0xDCD4, 0x8309, 0xDCD5, 0x82F7, 0xDCD6, 0x82E4, 0xDCD7, 0x830F, 0xDCD8, 0x8307,
- 0xDCD9, 0x82DC, 0xDCDA, 0x82F4, 0xDCDB, 0x82D2, 0xDCDC, 0x82D8, 0xDCDD, 0x830C, 0xDCDE, 0x82FB, 0xDCDF, 0x82D3, 0xDCE0, 0x8311,
- 0xDCE1, 0x831A, 0xDCE2, 0x8306, 0xDCE3, 0x8314, 0xDCE4, 0x8315, 0xDCE5, 0x82E0, 0xDCE6, 0x82D5, 0xDCE7, 0x831C, 0xDCE8, 0x8351,
- 0xDCE9, 0x835B, 0xDCEA, 0x835C, 0xDCEB, 0x8308, 0xDCEC, 0x8392, 0xDCED, 0x833C, 0xDCEE, 0x8334, 0xDCEF, 0x8331, 0xDCF0, 0x839B,
- 0xDCF1, 0x835E, 0xDCF2, 0x832F, 0xDCF3, 0x834F, 0xDCF4, 0x8347, 0xDCF5, 0x8343, 0xDCF6, 0x835F, 0xDCF7, 0x8340, 0xDCF8, 0x8317,
- 0xDCF9, 0x8360, 0xDCFA, 0x832D, 0xDCFB, 0x833A, 0xDCFC, 0x8333, 0xDCFD, 0x8366, 0xDCFE, 0x8365, 0xDD40, 0x8EE5, 0xDD41, 0x8EE6,
- 0xDD42, 0x8EE7, 0xDD43, 0x8EE8, 0xDD44, 0x8EE9, 0xDD45, 0x8EEA, 0xDD46, 0x8EEB, 0xDD47, 0x8EEC, 0xDD48, 0x8EED, 0xDD49, 0x8EEE,
- 0xDD4A, 0x8EEF, 0xDD4B, 0x8EF0, 0xDD4C, 0x8EF1, 0xDD4D, 0x8EF2, 0xDD4E, 0x8EF3, 0xDD4F, 0x8EF4, 0xDD50, 0x8EF5, 0xDD51, 0x8EF6,
- 0xDD52, 0x8EF7, 0xDD53, 0x8EF8, 0xDD54, 0x8EF9, 0xDD55, 0x8EFA, 0xDD56, 0x8EFB, 0xDD57, 0x8EFC, 0xDD58, 0x8EFD, 0xDD59, 0x8EFE,
- 0xDD5A, 0x8EFF, 0xDD5B, 0x8F00, 0xDD5C, 0x8F01, 0xDD5D, 0x8F02, 0xDD5E, 0x8F03, 0xDD5F, 0x8F04, 0xDD60, 0x8F05, 0xDD61, 0x8F06,
- 0xDD62, 0x8F07, 0xDD63, 0x8F08, 0xDD64, 0x8F09, 0xDD65, 0x8F0A, 0xDD66, 0x8F0B, 0xDD67, 0x8F0C, 0xDD68, 0x8F0D, 0xDD69, 0x8F0E,
- 0xDD6A, 0x8F0F, 0xDD6B, 0x8F10, 0xDD6C, 0x8F11, 0xDD6D, 0x8F12, 0xDD6E, 0x8F13, 0xDD6F, 0x8F14, 0xDD70, 0x8F15, 0xDD71, 0x8F16,
- 0xDD72, 0x8F17, 0xDD73, 0x8F18, 0xDD74, 0x8F19, 0xDD75, 0x8F1A, 0xDD76, 0x8F1B, 0xDD77, 0x8F1C, 0xDD78, 0x8F1D, 0xDD79, 0x8F1E,
- 0xDD7A, 0x8F1F, 0xDD7B, 0x8F20, 0xDD7C, 0x8F21, 0xDD7D, 0x8F22, 0xDD7E, 0x8F23, 0xDD80, 0x8F24, 0xDD81, 0x8F25, 0xDD82, 0x8F26,
- 0xDD83, 0x8F27, 0xDD84, 0x8F28, 0xDD85, 0x8F29, 0xDD86, 0x8F2A, 0xDD87, 0x8F2B, 0xDD88, 0x8F2C, 0xDD89, 0x8F2D, 0xDD8A, 0x8F2E,
- 0xDD8B, 0x8F2F, 0xDD8C, 0x8F30, 0xDD8D, 0x8F31, 0xDD8E, 0x8F32, 0xDD8F, 0x8F33, 0xDD90, 0x8F34, 0xDD91, 0x8F35, 0xDD92, 0x8F36,
- 0xDD93, 0x8F37, 0xDD94, 0x8F38, 0xDD95, 0x8F39, 0xDD96, 0x8F3A, 0xDD97, 0x8F3B, 0xDD98, 0x8F3C, 0xDD99, 0x8F3D, 0xDD9A, 0x8F3E,
- 0xDD9B, 0x8F3F, 0xDD9C, 0x8F40, 0xDD9D, 0x8F41, 0xDD9E, 0x8F42, 0xDD9F, 0x8F43, 0xDDA0, 0x8F44, 0xDDA1, 0x8368, 0xDDA2, 0x831B,
- 0xDDA3, 0x8369, 0xDDA4, 0x836C, 0xDDA5, 0x836A, 0xDDA6, 0x836D, 0xDDA7, 0x836E, 0xDDA8, 0x83B0, 0xDDA9, 0x8378, 0xDDAA, 0x83B3,
- 0xDDAB, 0x83B4, 0xDDAC, 0x83A0, 0xDDAD, 0x83AA, 0xDDAE, 0x8393, 0xDDAF, 0x839C, 0xDDB0, 0x8385, 0xDDB1, 0x837C, 0xDDB2, 0x83B6,
- 0xDDB3, 0x83A9, 0xDDB4, 0x837D, 0xDDB5, 0x83B8, 0xDDB6, 0x837B, 0xDDB7, 0x8398, 0xDDB8, 0x839E, 0xDDB9, 0x83A8, 0xDDBA, 0x83BA,
- 0xDDBB, 0x83BC, 0xDDBC, 0x83C1, 0xDDBD, 0x8401, 0xDDBE, 0x83E5, 0xDDBF, 0x83D8, 0xDDC0, 0x5807, 0xDDC1, 0x8418, 0xDDC2, 0x840B,
- 0xDDC3, 0x83DD, 0xDDC4, 0x83FD, 0xDDC5, 0x83D6, 0xDDC6, 0x841C, 0xDDC7, 0x8438, 0xDDC8, 0x8411, 0xDDC9, 0x8406, 0xDDCA, 0x83D4,
- 0xDDCB, 0x83DF, 0xDDCC, 0x840F, 0xDDCD, 0x8403, 0xDDCE, 0x83F8, 0xDDCF, 0x83F9, 0xDDD0, 0x83EA, 0xDDD1, 0x83C5, 0xDDD2, 0x83C0,
- 0xDDD3, 0x8426, 0xDDD4, 0x83F0, 0xDDD5, 0x83E1, 0xDDD6, 0x845C, 0xDDD7, 0x8451, 0xDDD8, 0x845A, 0xDDD9, 0x8459, 0xDDDA, 0x8473,
- 0xDDDB, 0x8487, 0xDDDC, 0x8488, 0xDDDD, 0x847A, 0xDDDE, 0x8489, 0xDDDF, 0x8478, 0xDDE0, 0x843C, 0xDDE1, 0x8446, 0xDDE2, 0x8469,
- 0xDDE3, 0x8476, 0xDDE4, 0x848C, 0xDDE5, 0x848E, 0xDDE6, 0x8431, 0xDDE7, 0x846D, 0xDDE8, 0x84C1, 0xDDE9, 0x84CD, 0xDDEA, 0x84D0,
- 0xDDEB, 0x84E6, 0xDDEC, 0x84BD, 0xDDED, 0x84D3, 0xDDEE, 0x84CA, 0xDDEF, 0x84BF, 0xDDF0, 0x84BA, 0xDDF1, 0x84E0, 0xDDF2, 0x84A1,
- 0xDDF3, 0x84B9, 0xDDF4, 0x84B4, 0xDDF5, 0x8497, 0xDDF6, 0x84E5, 0xDDF7, 0x84E3, 0xDDF8, 0x850C, 0xDDF9, 0x750D, 0xDDFA, 0x8538,
- 0xDDFB, 0x84F0, 0xDDFC, 0x8539, 0xDDFD, 0x851F, 0xDDFE, 0x853A, 0xDE40, 0x8F45, 0xDE41, 0x8F46, 0xDE42, 0x8F47, 0xDE43, 0x8F48,
- 0xDE44, 0x8F49, 0xDE45, 0x8F4A, 0xDE46, 0x8F4B, 0xDE47, 0x8F4C, 0xDE48, 0x8F4D, 0xDE49, 0x8F4E, 0xDE4A, 0x8F4F, 0xDE4B, 0x8F50,
- 0xDE4C, 0x8F51, 0xDE4D, 0x8F52, 0xDE4E, 0x8F53, 0xDE4F, 0x8F54, 0xDE50, 0x8F55, 0xDE51, 0x8F56, 0xDE52, 0x8F57, 0xDE53, 0x8F58,
- 0xDE54, 0x8F59, 0xDE55, 0x8F5A, 0xDE56, 0x8F5B, 0xDE57, 0x8F5C, 0xDE58, 0x8F5D, 0xDE59, 0x8F5E, 0xDE5A, 0x8F5F, 0xDE5B, 0x8F60,
- 0xDE5C, 0x8F61, 0xDE5D, 0x8F62, 0xDE5E, 0x8F63, 0xDE5F, 0x8F64, 0xDE60, 0x8F65, 0xDE61, 0x8F6A, 0xDE62, 0x8F80, 0xDE63, 0x8F8C,
- 0xDE64, 0x8F92, 0xDE65, 0x8F9D, 0xDE66, 0x8FA0, 0xDE67, 0x8FA1, 0xDE68, 0x8FA2, 0xDE69, 0x8FA4, 0xDE6A, 0x8FA5, 0xDE6B, 0x8FA6,
- 0xDE6C, 0x8FA7, 0xDE6D, 0x8FAA, 0xDE6E, 0x8FAC, 0xDE6F, 0x8FAD, 0xDE70, 0x8FAE, 0xDE71, 0x8FAF, 0xDE72, 0x8FB2, 0xDE73, 0x8FB3,
- 0xDE74, 0x8FB4, 0xDE75, 0x8FB5, 0xDE76, 0x8FB7, 0xDE77, 0x8FB8, 0xDE78, 0x8FBA, 0xDE79, 0x8FBB, 0xDE7A, 0x8FBC, 0xDE7B, 0x8FBF,
- 0xDE7C, 0x8FC0, 0xDE7D, 0x8FC3, 0xDE7E, 0x8FC6, 0xDE80, 0x8FC9, 0xDE81, 0x8FCA, 0xDE82, 0x8FCB, 0xDE83, 0x8FCC, 0xDE84, 0x8FCD,
- 0xDE85, 0x8FCF, 0xDE86, 0x8FD2, 0xDE87, 0x8FD6, 0xDE88, 0x8FD7, 0xDE89, 0x8FDA, 0xDE8A, 0x8FE0, 0xDE8B, 0x8FE1, 0xDE8C, 0x8FE3,
- 0xDE8D, 0x8FE7, 0xDE8E, 0x8FEC, 0xDE8F, 0x8FEF, 0xDE90, 0x8FF1, 0xDE91, 0x8FF2, 0xDE92, 0x8FF4, 0xDE93, 0x8FF5, 0xDE94, 0x8FF6,
- 0xDE95, 0x8FFA, 0xDE96, 0x8FFB, 0xDE97, 0x8FFC, 0xDE98, 0x8FFE, 0xDE99, 0x8FFF, 0xDE9A, 0x9007, 0xDE9B, 0x9008, 0xDE9C, 0x900C,
- 0xDE9D, 0x900E, 0xDE9E, 0x9013, 0xDE9F, 0x9015, 0xDEA0, 0x9018, 0xDEA1, 0x8556, 0xDEA2, 0x853B, 0xDEA3, 0x84FF, 0xDEA4, 0x84FC,
- 0xDEA5, 0x8559, 0xDEA6, 0x8548, 0xDEA7, 0x8568, 0xDEA8, 0x8564, 0xDEA9, 0x855E, 0xDEAA, 0x857A, 0xDEAB, 0x77A2, 0xDEAC, 0x8543,
- 0xDEAD, 0x8572, 0xDEAE, 0x857B, 0xDEAF, 0x85A4, 0xDEB0, 0x85A8, 0xDEB1, 0x8587, 0xDEB2, 0x858F, 0xDEB3, 0x8579, 0xDEB4, 0x85AE,
- 0xDEB5, 0x859C, 0xDEB6, 0x8585, 0xDEB7, 0x85B9, 0xDEB8, 0x85B7, 0xDEB9, 0x85B0, 0xDEBA, 0x85D3, 0xDEBB, 0x85C1, 0xDEBC, 0x85DC,
- 0xDEBD, 0x85FF, 0xDEBE, 0x8627, 0xDEBF, 0x8605, 0xDEC0, 0x8629, 0xDEC1, 0x8616, 0xDEC2, 0x863C, 0xDEC3, 0x5EFE, 0xDEC4, 0x5F08,
- 0xDEC5, 0x593C, 0xDEC6, 0x5941, 0xDEC7, 0x8037, 0xDEC8, 0x5955, 0xDEC9, 0x595A, 0xDECA, 0x5958, 0xDECB, 0x530F, 0xDECC, 0x5C22,
- 0xDECD, 0x5C25, 0xDECE, 0x5C2C, 0xDECF, 0x5C34, 0xDED0, 0x624C, 0xDED1, 0x626A, 0xDED2, 0x629F, 0xDED3, 0x62BB, 0xDED4, 0x62CA,
- 0xDED5, 0x62DA, 0xDED6, 0x62D7, 0xDED7, 0x62EE, 0xDED8, 0x6322, 0xDED9, 0x62F6, 0xDEDA, 0x6339, 0xDEDB, 0x634B, 0xDEDC, 0x6343,
- 0xDEDD, 0x63AD, 0xDEDE, 0x63F6, 0xDEDF, 0x6371, 0xDEE0, 0x637A, 0xDEE1, 0x638E, 0xDEE2, 0x63B4, 0xDEE3, 0x636D, 0xDEE4, 0x63AC,
- 0xDEE5, 0x638A, 0xDEE6, 0x6369, 0xDEE7, 0x63AE, 0xDEE8, 0x63BC, 0xDEE9, 0x63F2, 0xDEEA, 0x63F8, 0xDEEB, 0x63E0, 0xDEEC, 0x63FF,
- 0xDEED, 0x63C4, 0xDEEE, 0x63DE, 0xDEEF, 0x63CE, 0xDEF0, 0x6452, 0xDEF1, 0x63C6, 0xDEF2, 0x63BE, 0xDEF3, 0x6445, 0xDEF4, 0x6441,
- 0xDEF5, 0x640B, 0xDEF6, 0x641B, 0xDEF7, 0x6420, 0xDEF8, 0x640C, 0xDEF9, 0x6426, 0xDEFA, 0x6421, 0xDEFB, 0x645E, 0xDEFC, 0x6484,
- 0xDEFD, 0x646D, 0xDEFE, 0x6496, 0xDF40, 0x9019, 0xDF41, 0x901C, 0xDF42, 0x9023, 0xDF43, 0x9024, 0xDF44, 0x9025, 0xDF45, 0x9027,
- 0xDF46, 0x9028, 0xDF47, 0x9029, 0xDF48, 0x902A, 0xDF49, 0x902B, 0xDF4A, 0x902C, 0xDF4B, 0x9030, 0xDF4C, 0x9031, 0xDF4D, 0x9032,
- 0xDF4E, 0x9033, 0xDF4F, 0x9034, 0xDF50, 0x9037, 0xDF51, 0x9039, 0xDF52, 0x903A, 0xDF53, 0x903D, 0xDF54, 0x903F, 0xDF55, 0x9040,
- 0xDF56, 0x9043, 0xDF57, 0x9045, 0xDF58, 0x9046, 0xDF59, 0x9048, 0xDF5A, 0x9049, 0xDF5B, 0x904A, 0xDF5C, 0x904B, 0xDF5D, 0x904C,
- 0xDF5E, 0x904E, 0xDF5F, 0x9054, 0xDF60, 0x9055, 0xDF61, 0x9056, 0xDF62, 0x9059, 0xDF63, 0x905A, 0xDF64, 0x905C, 0xDF65, 0x905D,
- 0xDF66, 0x905E, 0xDF67, 0x905F, 0xDF68, 0x9060, 0xDF69, 0x9061, 0xDF6A, 0x9064, 0xDF6B, 0x9066, 0xDF6C, 0x9067, 0xDF6D, 0x9069,
- 0xDF6E, 0x906A, 0xDF6F, 0x906B, 0xDF70, 0x906C, 0xDF71, 0x906F, 0xDF72, 0x9070, 0xDF73, 0x9071, 0xDF74, 0x9072, 0xDF75, 0x9073,
- 0xDF76, 0x9076, 0xDF77, 0x9077, 0xDF78, 0x9078, 0xDF79, 0x9079, 0xDF7A, 0x907A, 0xDF7B, 0x907B, 0xDF7C, 0x907C, 0xDF7D, 0x907E,
- 0xDF7E, 0x9081, 0xDF80, 0x9084, 0xDF81, 0x9085, 0xDF82, 0x9086, 0xDF83, 0x9087, 0xDF84, 0x9089, 0xDF85, 0x908A, 0xDF86, 0x908C,
- 0xDF87, 0x908D, 0xDF88, 0x908E, 0xDF89, 0x908F, 0xDF8A, 0x9090, 0xDF8B, 0x9092, 0xDF8C, 0x9094, 0xDF8D, 0x9096, 0xDF8E, 0x9098,
- 0xDF8F, 0x909A, 0xDF90, 0x909C, 0xDF91, 0x909E, 0xDF92, 0x909F, 0xDF93, 0x90A0, 0xDF94, 0x90A4, 0xDF95, 0x90A5, 0xDF96, 0x90A7,
- 0xDF97, 0x90A8, 0xDF98, 0x90A9, 0xDF99, 0x90AB, 0xDF9A, 0x90AD, 0xDF9B, 0x90B2, 0xDF9C, 0x90B7, 0xDF9D, 0x90BC, 0xDF9E, 0x90BD,
- 0xDF9F, 0x90BF, 0xDFA0, 0x90C0, 0xDFA1, 0x647A, 0xDFA2, 0x64B7, 0xDFA3, 0x64B8, 0xDFA4, 0x6499, 0xDFA5, 0x64BA, 0xDFA6, 0x64C0,
- 0xDFA7, 0x64D0, 0xDFA8, 0x64D7, 0xDFA9, 0x64E4, 0xDFAA, 0x64E2, 0xDFAB, 0x6509, 0xDFAC, 0x6525, 0xDFAD, 0x652E, 0xDFAE, 0x5F0B,
- 0xDFAF, 0x5FD2, 0xDFB0, 0x7519, 0xDFB1, 0x5F11, 0xDFB2, 0x535F, 0xDFB3, 0x53F1, 0xDFB4, 0x53FD, 0xDFB5, 0x53E9, 0xDFB6, 0x53E8,
- 0xDFB7, 0x53FB, 0xDFB8, 0x5412, 0xDFB9, 0x5416, 0xDFBA, 0x5406, 0xDFBB, 0x544B, 0xDFBC, 0x5452, 0xDFBD, 0x5453, 0xDFBE, 0x5454,
- 0xDFBF, 0x5456, 0xDFC0, 0x5443, 0xDFC1, 0x5421, 0xDFC2, 0x5457, 0xDFC3, 0x5459, 0xDFC4, 0x5423, 0xDFC5, 0x5432, 0xDFC6, 0x5482,
- 0xDFC7, 0x5494, 0xDFC8, 0x5477, 0xDFC9, 0x5471, 0xDFCA, 0x5464, 0xDFCB, 0x549A, 0xDFCC, 0x549B, 0xDFCD, 0x5484, 0xDFCE, 0x5476,
- 0xDFCF, 0x5466, 0xDFD0, 0x549D, 0xDFD1, 0x54D0, 0xDFD2, 0x54AD, 0xDFD3, 0x54C2, 0xDFD4, 0x54B4, 0xDFD5, 0x54D2, 0xDFD6, 0x54A7,
- 0xDFD7, 0x54A6, 0xDFD8, 0x54D3, 0xDFD9, 0x54D4, 0xDFDA, 0x5472, 0xDFDB, 0x54A3, 0xDFDC, 0x54D5, 0xDFDD, 0x54BB, 0xDFDE, 0x54BF,
- 0xDFDF, 0x54CC, 0xDFE0, 0x54D9, 0xDFE1, 0x54DA, 0xDFE2, 0x54DC, 0xDFE3, 0x54A9, 0xDFE4, 0x54AA, 0xDFE5, 0x54A4, 0xDFE6, 0x54DD,
- 0xDFE7, 0x54CF, 0xDFE8, 0x54DE, 0xDFE9, 0x551B, 0xDFEA, 0x54E7, 0xDFEB, 0x5520, 0xDFEC, 0x54FD, 0xDFED, 0x5514, 0xDFEE, 0x54F3,
- 0xDFEF, 0x5522, 0xDFF0, 0x5523, 0xDFF1, 0x550F, 0xDFF2, 0x5511, 0xDFF3, 0x5527, 0xDFF4, 0x552A, 0xDFF5, 0x5567, 0xDFF6, 0x558F,
- 0xDFF7, 0x55B5, 0xDFF8, 0x5549, 0xDFF9, 0x556D, 0xDFFA, 0x5541, 0xDFFB, 0x5555, 0xDFFC, 0x553F, 0xDFFD, 0x5550, 0xDFFE, 0x553C,
- 0xE040, 0x90C2, 0xE041, 0x90C3, 0xE042, 0x90C6, 0xE043, 0x90C8, 0xE044, 0x90C9, 0xE045, 0x90CB, 0xE046, 0x90CC, 0xE047, 0x90CD,
- 0xE048, 0x90D2, 0xE049, 0x90D4, 0xE04A, 0x90D5, 0xE04B, 0x90D6, 0xE04C, 0x90D8, 0xE04D, 0x90D9, 0xE04E, 0x90DA, 0xE04F, 0x90DE,
- 0xE050, 0x90DF, 0xE051, 0x90E0, 0xE052, 0x90E3, 0xE053, 0x90E4, 0xE054, 0x90E5, 0xE055, 0x90E9, 0xE056, 0x90EA, 0xE057, 0x90EC,
- 0xE058, 0x90EE, 0xE059, 0x90F0, 0xE05A, 0x90F1, 0xE05B, 0x90F2, 0xE05C, 0x90F3, 0xE05D, 0x90F5, 0xE05E, 0x90F6, 0xE05F, 0x90F7,
- 0xE060, 0x90F9, 0xE061, 0x90FA, 0xE062, 0x90FB, 0xE063, 0x90FC, 0xE064, 0x90FF, 0xE065, 0x9100, 0xE066, 0x9101, 0xE067, 0x9103,
- 0xE068, 0x9105, 0xE069, 0x9106, 0xE06A, 0x9107, 0xE06B, 0x9108, 0xE06C, 0x9109, 0xE06D, 0x910A, 0xE06E, 0x910B, 0xE06F, 0x910C,
- 0xE070, 0x910D, 0xE071, 0x910E, 0xE072, 0x910F, 0xE073, 0x9110, 0xE074, 0x9111, 0xE075, 0x9112, 0xE076, 0x9113, 0xE077, 0x9114,
- 0xE078, 0x9115, 0xE079, 0x9116, 0xE07A, 0x9117, 0xE07B, 0x9118, 0xE07C, 0x911A, 0xE07D, 0x911B, 0xE07E, 0x911C, 0xE080, 0x911D,
- 0xE081, 0x911F, 0xE082, 0x9120, 0xE083, 0x9121, 0xE084, 0x9124, 0xE085, 0x9125, 0xE086, 0x9126, 0xE087, 0x9127, 0xE088, 0x9128,
- 0xE089, 0x9129, 0xE08A, 0x912A, 0xE08B, 0x912B, 0xE08C, 0x912C, 0xE08D, 0x912D, 0xE08E, 0x912E, 0xE08F, 0x9130, 0xE090, 0x9132,
- 0xE091, 0x9133, 0xE092, 0x9134, 0xE093, 0x9135, 0xE094, 0x9136, 0xE095, 0x9137, 0xE096, 0x9138, 0xE097, 0x913A, 0xE098, 0x913B,
- 0xE099, 0x913C, 0xE09A, 0x913D, 0xE09B, 0x913E, 0xE09C, 0x913F, 0xE09D, 0x9140, 0xE09E, 0x9141, 0xE09F, 0x9142, 0xE0A0, 0x9144,
- 0xE0A1, 0x5537, 0xE0A2, 0x5556, 0xE0A3, 0x5575, 0xE0A4, 0x5576, 0xE0A5, 0x5577, 0xE0A6, 0x5533, 0xE0A7, 0x5530, 0xE0A8, 0x555C,
- 0xE0A9, 0x558B, 0xE0AA, 0x55D2, 0xE0AB, 0x5583, 0xE0AC, 0x55B1, 0xE0AD, 0x55B9, 0xE0AE, 0x5588, 0xE0AF, 0x5581, 0xE0B0, 0x559F,
- 0xE0B1, 0x557E, 0xE0B2, 0x55D6, 0xE0B3, 0x5591, 0xE0B4, 0x557B, 0xE0B5, 0x55DF, 0xE0B6, 0x55BD, 0xE0B7, 0x55BE, 0xE0B8, 0x5594,
- 0xE0B9, 0x5599, 0xE0BA, 0x55EA, 0xE0BB, 0x55F7, 0xE0BC, 0x55C9, 0xE0BD, 0x561F, 0xE0BE, 0x55D1, 0xE0BF, 0x55EB, 0xE0C0, 0x55EC,
- 0xE0C1, 0x55D4, 0xE0C2, 0x55E6, 0xE0C3, 0x55DD, 0xE0C4, 0x55C4, 0xE0C5, 0x55EF, 0xE0C6, 0x55E5, 0xE0C7, 0x55F2, 0xE0C8, 0x55F3,
- 0xE0C9, 0x55CC, 0xE0CA, 0x55CD, 0xE0CB, 0x55E8, 0xE0CC, 0x55F5, 0xE0CD, 0x55E4, 0xE0CE, 0x8F94, 0xE0CF, 0x561E, 0xE0D0, 0x5608,
- 0xE0D1, 0x560C, 0xE0D2, 0x5601, 0xE0D3, 0x5624, 0xE0D4, 0x5623, 0xE0D5, 0x55FE, 0xE0D6, 0x5600, 0xE0D7, 0x5627, 0xE0D8, 0x562D,
- 0xE0D9, 0x5658, 0xE0DA, 0x5639, 0xE0DB, 0x5657, 0xE0DC, 0x562C, 0xE0DD, 0x564D, 0xE0DE, 0x5662, 0xE0DF, 0x5659, 0xE0E0, 0x565C,
- 0xE0E1, 0x564C, 0xE0E2, 0x5654, 0xE0E3, 0x5686, 0xE0E4, 0x5664, 0xE0E5, 0x5671, 0xE0E6, 0x566B, 0xE0E7, 0x567B, 0xE0E8, 0x567C,
- 0xE0E9, 0x5685, 0xE0EA, 0x5693, 0xE0EB, 0x56AF, 0xE0EC, 0x56D4, 0xE0ED, 0x56D7, 0xE0EE, 0x56DD, 0xE0EF, 0x56E1, 0xE0F0, 0x56F5,
- 0xE0F1, 0x56EB, 0xE0F2, 0x56F9, 0xE0F3, 0x56FF, 0xE0F4, 0x5704, 0xE0F5, 0x570A, 0xE0F6, 0x5709, 0xE0F7, 0x571C, 0xE0F8, 0x5E0F,
- 0xE0F9, 0x5E19, 0xE0FA, 0x5E14, 0xE0FB, 0x5E11, 0xE0FC, 0x5E31, 0xE0FD, 0x5E3B, 0xE0FE, 0x5E3C, 0xE140, 0x9145, 0xE141, 0x9147,
- 0xE142, 0x9148, 0xE143, 0x9151, 0xE144, 0x9153, 0xE145, 0x9154, 0xE146, 0x9155, 0xE147, 0x9156, 0xE148, 0x9158, 0xE149, 0x9159,
- 0xE14A, 0x915B, 0xE14B, 0x915C, 0xE14C, 0x915F, 0xE14D, 0x9160, 0xE14E, 0x9166, 0xE14F, 0x9167, 0xE150, 0x9168, 0xE151, 0x916B,
- 0xE152, 0x916D, 0xE153, 0x9173, 0xE154, 0x917A, 0xE155, 0x917B, 0xE156, 0x917C, 0xE157, 0x9180, 0xE158, 0x9181, 0xE159, 0x9182,
- 0xE15A, 0x9183, 0xE15B, 0x9184, 0xE15C, 0x9186, 0xE15D, 0x9188, 0xE15E, 0x918A, 0xE15F, 0x918E, 0xE160, 0x918F, 0xE161, 0x9193,
- 0xE162, 0x9194, 0xE163, 0x9195, 0xE164, 0x9196, 0xE165, 0x9197, 0xE166, 0x9198, 0xE167, 0x9199, 0xE168, 0x919C, 0xE169, 0x919D,
- 0xE16A, 0x919E, 0xE16B, 0x919F, 0xE16C, 0x91A0, 0xE16D, 0x91A1, 0xE16E, 0x91A4, 0xE16F, 0x91A5, 0xE170, 0x91A6, 0xE171, 0x91A7,
- 0xE172, 0x91A8, 0xE173, 0x91A9, 0xE174, 0x91AB, 0xE175, 0x91AC, 0xE176, 0x91B0, 0xE177, 0x91B1, 0xE178, 0x91B2, 0xE179, 0x91B3,
- 0xE17A, 0x91B6, 0xE17B, 0x91B7, 0xE17C, 0x91B8, 0xE17D, 0x91B9, 0xE17E, 0x91BB, 0xE180, 0x91BC, 0xE181, 0x91BD, 0xE182, 0x91BE,
- 0xE183, 0x91BF, 0xE184, 0x91C0, 0xE185, 0x91C1, 0xE186, 0x91C2, 0xE187, 0x91C3, 0xE188, 0x91C4, 0xE189, 0x91C5, 0xE18A, 0x91C6,
- 0xE18B, 0x91C8, 0xE18C, 0x91CB, 0xE18D, 0x91D0, 0xE18E, 0x91D2, 0xE18F, 0x91D3, 0xE190, 0x91D4, 0xE191, 0x91D5, 0xE192, 0x91D6,
- 0xE193, 0x91D7, 0xE194, 0x91D8, 0xE195, 0x91D9, 0xE196, 0x91DA, 0xE197, 0x91DB, 0xE198, 0x91DD, 0xE199, 0x91DE, 0xE19A, 0x91DF,
- 0xE19B, 0x91E0, 0xE19C, 0x91E1, 0xE19D, 0x91E2, 0xE19E, 0x91E3, 0xE19F, 0x91E4, 0xE1A0, 0x91E5, 0xE1A1, 0x5E37, 0xE1A2, 0x5E44,
- 0xE1A3, 0x5E54, 0xE1A4, 0x5E5B, 0xE1A5, 0x5E5E, 0xE1A6, 0x5E61, 0xE1A7, 0x5C8C, 0xE1A8, 0x5C7A, 0xE1A9, 0x5C8D, 0xE1AA, 0x5C90,
- 0xE1AB, 0x5C96, 0xE1AC, 0x5C88, 0xE1AD, 0x5C98, 0xE1AE, 0x5C99, 0xE1AF, 0x5C91, 0xE1B0, 0x5C9A, 0xE1B1, 0x5C9C, 0xE1B2, 0x5CB5,
- 0xE1B3, 0x5CA2, 0xE1B4, 0x5CBD, 0xE1B5, 0x5CAC, 0xE1B6, 0x5CAB, 0xE1B7, 0x5CB1, 0xE1B8, 0x5CA3, 0xE1B9, 0x5CC1, 0xE1BA, 0x5CB7,
- 0xE1BB, 0x5CC4, 0xE1BC, 0x5CD2, 0xE1BD, 0x5CE4, 0xE1BE, 0x5CCB, 0xE1BF, 0x5CE5, 0xE1C0, 0x5D02, 0xE1C1, 0x5D03, 0xE1C2, 0x5D27,
- 0xE1C3, 0x5D26, 0xE1C4, 0x5D2E, 0xE1C5, 0x5D24, 0xE1C6, 0x5D1E, 0xE1C7, 0x5D06, 0xE1C8, 0x5D1B, 0xE1C9, 0x5D58, 0xE1CA, 0x5D3E,
- 0xE1CB, 0x5D34, 0xE1CC, 0x5D3D, 0xE1CD, 0x5D6C, 0xE1CE, 0x5D5B, 0xE1CF, 0x5D6F, 0xE1D0, 0x5D5D, 0xE1D1, 0x5D6B, 0xE1D2, 0x5D4B,
- 0xE1D3, 0x5D4A, 0xE1D4, 0x5D69, 0xE1D5, 0x5D74, 0xE1D6, 0x5D82, 0xE1D7, 0x5D99, 0xE1D8, 0x5D9D, 0xE1D9, 0x8C73, 0xE1DA, 0x5DB7,
- 0xE1DB, 0x5DC5, 0xE1DC, 0x5F73, 0xE1DD, 0x5F77, 0xE1DE, 0x5F82, 0xE1DF, 0x5F87, 0xE1E0, 0x5F89, 0xE1E1, 0x5F8C, 0xE1E2, 0x5F95,
- 0xE1E3, 0x5F99, 0xE1E4, 0x5F9C, 0xE1E5, 0x5FA8, 0xE1E6, 0x5FAD, 0xE1E7, 0x5FB5, 0xE1E8, 0x5FBC, 0xE1E9, 0x8862, 0xE1EA, 0x5F61,
- 0xE1EB, 0x72AD, 0xE1EC, 0x72B0, 0xE1ED, 0x72B4, 0xE1EE, 0x72B7, 0xE1EF, 0x72B8, 0xE1F0, 0x72C3, 0xE1F1, 0x72C1, 0xE1F2, 0x72CE,
- 0xE1F3, 0x72CD, 0xE1F4, 0x72D2, 0xE1F5, 0x72E8, 0xE1F6, 0x72EF, 0xE1F7, 0x72E9, 0xE1F8, 0x72F2, 0xE1F9, 0x72F4, 0xE1FA, 0x72F7,
- 0xE1FB, 0x7301, 0xE1FC, 0x72F3, 0xE1FD, 0x7303, 0xE1FE, 0x72FA, 0xE240, 0x91E6, 0xE241, 0x91E7, 0xE242, 0x91E8, 0xE243, 0x91E9,
- 0xE244, 0x91EA, 0xE245, 0x91EB, 0xE246, 0x91EC, 0xE247, 0x91ED, 0xE248, 0x91EE, 0xE249, 0x91EF, 0xE24A, 0x91F0, 0xE24B, 0x91F1,
- 0xE24C, 0x91F2, 0xE24D, 0x91F3, 0xE24E, 0x91F4, 0xE24F, 0x91F5, 0xE250, 0x91F6, 0xE251, 0x91F7, 0xE252, 0x91F8, 0xE253, 0x91F9,
- 0xE254, 0x91FA, 0xE255, 0x91FB, 0xE256, 0x91FC, 0xE257, 0x91FD, 0xE258, 0x91FE, 0xE259, 0x91FF, 0xE25A, 0x9200, 0xE25B, 0x9201,
- 0xE25C, 0x9202, 0xE25D, 0x9203, 0xE25E, 0x9204, 0xE25F, 0x9205, 0xE260, 0x9206, 0xE261, 0x9207, 0xE262, 0x9208, 0xE263, 0x9209,
- 0xE264, 0x920A, 0xE265, 0x920B, 0xE266, 0x920C, 0xE267, 0x920D, 0xE268, 0x920E, 0xE269, 0x920F, 0xE26A, 0x9210, 0xE26B, 0x9211,
- 0xE26C, 0x9212, 0xE26D, 0x9213, 0xE26E, 0x9214, 0xE26F, 0x9215, 0xE270, 0x9216, 0xE271, 0x9217, 0xE272, 0x9218, 0xE273, 0x9219,
- 0xE274, 0x921A, 0xE275, 0x921B, 0xE276, 0x921C, 0xE277, 0x921D, 0xE278, 0x921E, 0xE279, 0x921F, 0xE27A, 0x9220, 0xE27B, 0x9221,
- 0xE27C, 0x9222, 0xE27D, 0x9223, 0xE27E, 0x9224, 0xE280, 0x9225, 0xE281, 0x9226, 0xE282, 0x9227, 0xE283, 0x9228, 0xE284, 0x9229,
- 0xE285, 0x922A, 0xE286, 0x922B, 0xE287, 0x922C, 0xE288, 0x922D, 0xE289, 0x922E, 0xE28A, 0x922F, 0xE28B, 0x9230, 0xE28C, 0x9231,
- 0xE28D, 0x9232, 0xE28E, 0x9233, 0xE28F, 0x9234, 0xE290, 0x9235, 0xE291, 0x9236, 0xE292, 0x9237, 0xE293, 0x9238, 0xE294, 0x9239,
- 0xE295, 0x923A, 0xE296, 0x923B, 0xE297, 0x923C, 0xE298, 0x923D, 0xE299, 0x923E, 0xE29A, 0x923F, 0xE29B, 0x9240, 0xE29C, 0x9241,
- 0xE29D, 0x9242, 0xE29E, 0x9243, 0xE29F, 0x9244, 0xE2A0, 0x9245, 0xE2A1, 0x72FB, 0xE2A2, 0x7317, 0xE2A3, 0x7313, 0xE2A4, 0x7321,
- 0xE2A5, 0x730A, 0xE2A6, 0x731E, 0xE2A7, 0x731D, 0xE2A8, 0x7315, 0xE2A9, 0x7322, 0xE2AA, 0x7339, 0xE2AB, 0x7325, 0xE2AC, 0x732C,
- 0xE2AD, 0x7338, 0xE2AE, 0x7331, 0xE2AF, 0x7350, 0xE2B0, 0x734D, 0xE2B1, 0x7357, 0xE2B2, 0x7360, 0xE2B3, 0x736C, 0xE2B4, 0x736F,
- 0xE2B5, 0x737E, 0xE2B6, 0x821B, 0xE2B7, 0x5925, 0xE2B8, 0x98E7, 0xE2B9, 0x5924, 0xE2BA, 0x5902, 0xE2BB, 0x9963, 0xE2BC, 0x9967,
- 0xE2BD, 0x9968, 0xE2BE, 0x9969, 0xE2BF, 0x996A, 0xE2C0, 0x996B, 0xE2C1, 0x996C, 0xE2C2, 0x9974, 0xE2C3, 0x9977, 0xE2C4, 0x997D,
- 0xE2C5, 0x9980, 0xE2C6, 0x9984, 0xE2C7, 0x9987, 0xE2C8, 0x998A, 0xE2C9, 0x998D, 0xE2CA, 0x9990, 0xE2CB, 0x9991, 0xE2CC, 0x9993,
- 0xE2CD, 0x9994, 0xE2CE, 0x9995, 0xE2CF, 0x5E80, 0xE2D0, 0x5E91, 0xE2D1, 0x5E8B, 0xE2D2, 0x5E96, 0xE2D3, 0x5EA5, 0xE2D4, 0x5EA0,
- 0xE2D5, 0x5EB9, 0xE2D6, 0x5EB5, 0xE2D7, 0x5EBE, 0xE2D8, 0x5EB3, 0xE2D9, 0x8D53, 0xE2DA, 0x5ED2, 0xE2DB, 0x5ED1, 0xE2DC, 0x5EDB,
- 0xE2DD, 0x5EE8, 0xE2DE, 0x5EEA, 0xE2DF, 0x81BA, 0xE2E0, 0x5FC4, 0xE2E1, 0x5FC9, 0xE2E2, 0x5FD6, 0xE2E3, 0x5FCF, 0xE2E4, 0x6003,
- 0xE2E5, 0x5FEE, 0xE2E6, 0x6004, 0xE2E7, 0x5FE1, 0xE2E8, 0x5FE4, 0xE2E9, 0x5FFE, 0xE2EA, 0x6005, 0xE2EB, 0x6006, 0xE2EC, 0x5FEA,
- 0xE2ED, 0x5FED, 0xE2EE, 0x5FF8, 0xE2EF, 0x6019, 0xE2F0, 0x6035, 0xE2F1, 0x6026, 0xE2F2, 0x601B, 0xE2F3, 0x600F, 0xE2F4, 0x600D,
- 0xE2F5, 0x6029, 0xE2F6, 0x602B, 0xE2F7, 0x600A, 0xE2F8, 0x603F, 0xE2F9, 0x6021, 0xE2FA, 0x6078, 0xE2FB, 0x6079, 0xE2FC, 0x607B,
- 0xE2FD, 0x607A, 0xE2FE, 0x6042, 0xE340, 0x9246, 0xE341, 0x9247, 0xE342, 0x9248, 0xE343, 0x9249, 0xE344, 0x924A, 0xE345, 0x924B,
- 0xE346, 0x924C, 0xE347, 0x924D, 0xE348, 0x924E, 0xE349, 0x924F, 0xE34A, 0x9250, 0xE34B, 0x9251, 0xE34C, 0x9252, 0xE34D, 0x9253,
- 0xE34E, 0x9254, 0xE34F, 0x9255, 0xE350, 0x9256, 0xE351, 0x9257, 0xE352, 0x9258, 0xE353, 0x9259, 0xE354, 0x925A, 0xE355, 0x925B,
- 0xE356, 0x925C, 0xE357, 0x925D, 0xE358, 0x925E, 0xE359, 0x925F, 0xE35A, 0x9260, 0xE35B, 0x9261, 0xE35C, 0x9262, 0xE35D, 0x9263,
- 0xE35E, 0x9264, 0xE35F, 0x9265, 0xE360, 0x9266, 0xE361, 0x9267, 0xE362, 0x9268, 0xE363, 0x9269, 0xE364, 0x926A, 0xE365, 0x926B,
- 0xE366, 0x926C, 0xE367, 0x926D, 0xE368, 0x926E, 0xE369, 0x926F, 0xE36A, 0x9270, 0xE36B, 0x9271, 0xE36C, 0x9272, 0xE36D, 0x9273,
- 0xE36E, 0x9275, 0xE36F, 0x9276, 0xE370, 0x9277, 0xE371, 0x9278, 0xE372, 0x9279, 0xE373, 0x927A, 0xE374, 0x927B, 0xE375, 0x927C,
- 0xE376, 0x927D, 0xE377, 0x927E, 0xE378, 0x927F, 0xE379, 0x9280, 0xE37A, 0x9281, 0xE37B, 0x9282, 0xE37C, 0x9283, 0xE37D, 0x9284,
- 0xE37E, 0x9285, 0xE380, 0x9286, 0xE381, 0x9287, 0xE382, 0x9288, 0xE383, 0x9289, 0xE384, 0x928A, 0xE385, 0x928B, 0xE386, 0x928C,
- 0xE387, 0x928D, 0xE388, 0x928F, 0xE389, 0x9290, 0xE38A, 0x9291, 0xE38B, 0x9292, 0xE38C, 0x9293, 0xE38D, 0x9294, 0xE38E, 0x9295,
- 0xE38F, 0x9296, 0xE390, 0x9297, 0xE391, 0x9298, 0xE392, 0x9299, 0xE393, 0x929A, 0xE394, 0x929B, 0xE395, 0x929C, 0xE396, 0x929D,
- 0xE397, 0x929E, 0xE398, 0x929F, 0xE399, 0x92A0, 0xE39A, 0x92A1, 0xE39B, 0x92A2, 0xE39C, 0x92A3, 0xE39D, 0x92A4, 0xE39E, 0x92A5,
- 0xE39F, 0x92A6, 0xE3A0, 0x92A7, 0xE3A1, 0x606A, 0xE3A2, 0x607D, 0xE3A3, 0x6096, 0xE3A4, 0x609A, 0xE3A5, 0x60AD, 0xE3A6, 0x609D,
- 0xE3A7, 0x6083, 0xE3A8, 0x6092, 0xE3A9, 0x608C, 0xE3AA, 0x609B, 0xE3AB, 0x60EC, 0xE3AC, 0x60BB, 0xE3AD, 0x60B1, 0xE3AE, 0x60DD,
- 0xE3AF, 0x60D8, 0xE3B0, 0x60C6, 0xE3B1, 0x60DA, 0xE3B2, 0x60B4, 0xE3B3, 0x6120, 0xE3B4, 0x6126, 0xE3B5, 0x6115, 0xE3B6, 0x6123,
- 0xE3B7, 0x60F4, 0xE3B8, 0x6100, 0xE3B9, 0x610E, 0xE3BA, 0x612B, 0xE3BB, 0x614A, 0xE3BC, 0x6175, 0xE3BD, 0x61AC, 0xE3BE, 0x6194,
- 0xE3BF, 0x61A7, 0xE3C0, 0x61B7, 0xE3C1, 0x61D4, 0xE3C2, 0x61F5, 0xE3C3, 0x5FDD, 0xE3C4, 0x96B3, 0xE3C5, 0x95E9, 0xE3C6, 0x95EB,
- 0xE3C7, 0x95F1, 0xE3C8, 0x95F3, 0xE3C9, 0x95F5, 0xE3CA, 0x95F6, 0xE3CB, 0x95FC, 0xE3CC, 0x95FE, 0xE3CD, 0x9603, 0xE3CE, 0x9604,
- 0xE3CF, 0x9606, 0xE3D0, 0x9608, 0xE3D1, 0x960A, 0xE3D2, 0x960B, 0xE3D3, 0x960C, 0xE3D4, 0x960D, 0xE3D5, 0x960F, 0xE3D6, 0x9612,
- 0xE3D7, 0x9615, 0xE3D8, 0x9616, 0xE3D9, 0x9617, 0xE3DA, 0x9619, 0xE3DB, 0x961A, 0xE3DC, 0x4E2C, 0xE3DD, 0x723F, 0xE3DE, 0x6215,
- 0xE3DF, 0x6C35, 0xE3E0, 0x6C54, 0xE3E1, 0x6C5C, 0xE3E2, 0x6C4A, 0xE3E3, 0x6CA3, 0xE3E4, 0x6C85, 0xE3E5, 0x6C90, 0xE3E6, 0x6C94,
- 0xE3E7, 0x6C8C, 0xE3E8, 0x6C68, 0xE3E9, 0x6C69, 0xE3EA, 0x6C74, 0xE3EB, 0x6C76, 0xE3EC, 0x6C86, 0xE3ED, 0x6CA9, 0xE3EE, 0x6CD0,
- 0xE3EF, 0x6CD4, 0xE3F0, 0x6CAD, 0xE3F1, 0x6CF7, 0xE3F2, 0x6CF8, 0xE3F3, 0x6CF1, 0xE3F4, 0x6CD7, 0xE3F5, 0x6CB2, 0xE3F6, 0x6CE0,
- 0xE3F7, 0x6CD6, 0xE3F8, 0x6CFA, 0xE3F9, 0x6CEB, 0xE3FA, 0x6CEE, 0xE3FB, 0x6CB1, 0xE3FC, 0x6CD3, 0xE3FD, 0x6CEF, 0xE3FE, 0x6CFE,
- 0xE440, 0x92A8, 0xE441, 0x92A9, 0xE442, 0x92AA, 0xE443, 0x92AB, 0xE444, 0x92AC, 0xE445, 0x92AD, 0xE446, 0x92AF, 0xE447, 0x92B0,
- 0xE448, 0x92B1, 0xE449, 0x92B2, 0xE44A, 0x92B3, 0xE44B, 0x92B4, 0xE44C, 0x92B5, 0xE44D, 0x92B6, 0xE44E, 0x92B7, 0xE44F, 0x92B8,
- 0xE450, 0x92B9, 0xE451, 0x92BA, 0xE452, 0x92BB, 0xE453, 0x92BC, 0xE454, 0x92BD, 0xE455, 0x92BE, 0xE456, 0x92BF, 0xE457, 0x92C0,
- 0xE458, 0x92C1, 0xE459, 0x92C2, 0xE45A, 0x92C3, 0xE45B, 0x92C4, 0xE45C, 0x92C5, 0xE45D, 0x92C6, 0xE45E, 0x92C7, 0xE45F, 0x92C9,
- 0xE460, 0x92CA, 0xE461, 0x92CB, 0xE462, 0x92CC, 0xE463, 0x92CD, 0xE464, 0x92CE, 0xE465, 0x92CF, 0xE466, 0x92D0, 0xE467, 0x92D1,
- 0xE468, 0x92D2, 0xE469, 0x92D3, 0xE46A, 0x92D4, 0xE46B, 0x92D5, 0xE46C, 0x92D6, 0xE46D, 0x92D7, 0xE46E, 0x92D8, 0xE46F, 0x92D9,
- 0xE470, 0x92DA, 0xE471, 0x92DB, 0xE472, 0x92DC, 0xE473, 0x92DD, 0xE474, 0x92DE, 0xE475, 0x92DF, 0xE476, 0x92E0, 0xE477, 0x92E1,
- 0xE478, 0x92E2, 0xE479, 0x92E3, 0xE47A, 0x92E4, 0xE47B, 0x92E5, 0xE47C, 0x92E6, 0xE47D, 0x92E7, 0xE47E, 0x92E8, 0xE480, 0x92E9,
- 0xE481, 0x92EA, 0xE482, 0x92EB, 0xE483, 0x92EC, 0xE484, 0x92ED, 0xE485, 0x92EE, 0xE486, 0x92EF, 0xE487, 0x92F0, 0xE488, 0x92F1,
- 0xE489, 0x92F2, 0xE48A, 0x92F3, 0xE48B, 0x92F4, 0xE48C, 0x92F5, 0xE48D, 0x92F6, 0xE48E, 0x92F7, 0xE48F, 0x92F8, 0xE490, 0x92F9,
- 0xE491, 0x92FA, 0xE492, 0x92FB, 0xE493, 0x92FC, 0xE494, 0x92FD, 0xE495, 0x92FE, 0xE496, 0x92FF, 0xE497, 0x9300, 0xE498, 0x9301,
- 0xE499, 0x9302, 0xE49A, 0x9303, 0xE49B, 0x9304, 0xE49C, 0x9305, 0xE49D, 0x9306, 0xE49E, 0x9307, 0xE49F, 0x9308, 0xE4A0, 0x9309,
- 0xE4A1, 0x6D39, 0xE4A2, 0x6D27, 0xE4A3, 0x6D0C, 0xE4A4, 0x6D43, 0xE4A5, 0x6D48, 0xE4A6, 0x6D07, 0xE4A7, 0x6D04, 0xE4A8, 0x6D19,
- 0xE4A9, 0x6D0E, 0xE4AA, 0x6D2B, 0xE4AB, 0x6D4D, 0xE4AC, 0x6D2E, 0xE4AD, 0x6D35, 0xE4AE, 0x6D1A, 0xE4AF, 0x6D4F, 0xE4B0, 0x6D52,
- 0xE4B1, 0x6D54, 0xE4B2, 0x6D33, 0xE4B3, 0x6D91, 0xE4B4, 0x6D6F, 0xE4B5, 0x6D9E, 0xE4B6, 0x6DA0, 0xE4B7, 0x6D5E, 0xE4B8, 0x6D93,
- 0xE4B9, 0x6D94, 0xE4BA, 0x6D5C, 0xE4BB, 0x6D60, 0xE4BC, 0x6D7C, 0xE4BD, 0x6D63, 0xE4BE, 0x6E1A, 0xE4BF, 0x6DC7, 0xE4C0, 0x6DC5,
- 0xE4C1, 0x6DDE, 0xE4C2, 0x6E0E, 0xE4C3, 0x6DBF, 0xE4C4, 0x6DE0, 0xE4C5, 0x6E11, 0xE4C6, 0x6DE6, 0xE4C7, 0x6DDD, 0xE4C8, 0x6DD9,
- 0xE4C9, 0x6E16, 0xE4CA, 0x6DAB, 0xE4CB, 0x6E0C, 0xE4CC, 0x6DAE, 0xE4CD, 0x6E2B, 0xE4CE, 0x6E6E, 0xE4CF, 0x6E4E, 0xE4D0, 0x6E6B,
- 0xE4D1, 0x6EB2, 0xE4D2, 0x6E5F, 0xE4D3, 0x6E86, 0xE4D4, 0x6E53, 0xE4D5, 0x6E54, 0xE4D6, 0x6E32, 0xE4D7, 0x6E25, 0xE4D8, 0x6E44,
- 0xE4D9, 0x6EDF, 0xE4DA, 0x6EB1, 0xE4DB, 0x6E98, 0xE4DC, 0x6EE0, 0xE4DD, 0x6F2D, 0xE4DE, 0x6EE2, 0xE4DF, 0x6EA5, 0xE4E0, 0x6EA7,
- 0xE4E1, 0x6EBD, 0xE4E2, 0x6EBB, 0xE4E3, 0x6EB7, 0xE4E4, 0x6ED7, 0xE4E5, 0x6EB4, 0xE4E6, 0x6ECF, 0xE4E7, 0x6E8F, 0xE4E8, 0x6EC2,
- 0xE4E9, 0x6E9F, 0xE4EA, 0x6F62, 0xE4EB, 0x6F46, 0xE4EC, 0x6F47, 0xE4ED, 0x6F24, 0xE4EE, 0x6F15, 0xE4EF, 0x6EF9, 0xE4F0, 0x6F2F,
- 0xE4F1, 0x6F36, 0xE4F2, 0x6F4B, 0xE4F3, 0x6F74, 0xE4F4, 0x6F2A, 0xE4F5, 0x6F09, 0xE4F6, 0x6F29, 0xE4F7, 0x6F89, 0xE4F8, 0x6F8D,
- 0xE4F9, 0x6F8C, 0xE4FA, 0x6F78, 0xE4FB, 0x6F72, 0xE4FC, 0x6F7C, 0xE4FD, 0x6F7A, 0xE4FE, 0x6FD1, 0xE540, 0x930A, 0xE541, 0x930B,
- 0xE542, 0x930C, 0xE543, 0x930D, 0xE544, 0x930E, 0xE545, 0x930F, 0xE546, 0x9310, 0xE547, 0x9311, 0xE548, 0x9312, 0xE549, 0x9313,
- 0xE54A, 0x9314, 0xE54B, 0x9315, 0xE54C, 0x9316, 0xE54D, 0x9317, 0xE54E, 0x9318, 0xE54F, 0x9319, 0xE550, 0x931A, 0xE551, 0x931B,
- 0xE552, 0x931C, 0xE553, 0x931D, 0xE554, 0x931E, 0xE555, 0x931F, 0xE556, 0x9320, 0xE557, 0x9321, 0xE558, 0x9322, 0xE559, 0x9323,
- 0xE55A, 0x9324, 0xE55B, 0x9325, 0xE55C, 0x9326, 0xE55D, 0x9327, 0xE55E, 0x9328, 0xE55F, 0x9329, 0xE560, 0x932A, 0xE561, 0x932B,
- 0xE562, 0x932C, 0xE563, 0x932D, 0xE564, 0x932E, 0xE565, 0x932F, 0xE566, 0x9330, 0xE567, 0x9331, 0xE568, 0x9332, 0xE569, 0x9333,
- 0xE56A, 0x9334, 0xE56B, 0x9335, 0xE56C, 0x9336, 0xE56D, 0x9337, 0xE56E, 0x9338, 0xE56F, 0x9339, 0xE570, 0x933A, 0xE571, 0x933B,
- 0xE572, 0x933C, 0xE573, 0x933D, 0xE574, 0x933F, 0xE575, 0x9340, 0xE576, 0x9341, 0xE577, 0x9342, 0xE578, 0x9343, 0xE579, 0x9344,
- 0xE57A, 0x9345, 0xE57B, 0x9346, 0xE57C, 0x9347, 0xE57D, 0x9348, 0xE57E, 0x9349, 0xE580, 0x934A, 0xE581, 0x934B, 0xE582, 0x934C,
- 0xE583, 0x934D, 0xE584, 0x934E, 0xE585, 0x934F, 0xE586, 0x9350, 0xE587, 0x9351, 0xE588, 0x9352, 0xE589, 0x9353, 0xE58A, 0x9354,
- 0xE58B, 0x9355, 0xE58C, 0x9356, 0xE58D, 0x9357, 0xE58E, 0x9358, 0xE58F, 0x9359, 0xE590, 0x935A, 0xE591, 0x935B, 0xE592, 0x935C,
- 0xE593, 0x935D, 0xE594, 0x935E, 0xE595, 0x935F, 0xE596, 0x9360, 0xE597, 0x9361, 0xE598, 0x9362, 0xE599, 0x9363, 0xE59A, 0x9364,
- 0xE59B, 0x9365, 0xE59C, 0x9366, 0xE59D, 0x9367, 0xE59E, 0x9368, 0xE59F, 0x9369, 0xE5A0, 0x936B, 0xE5A1, 0x6FC9, 0xE5A2, 0x6FA7,
- 0xE5A3, 0x6FB9, 0xE5A4, 0x6FB6, 0xE5A5, 0x6FC2, 0xE5A6, 0x6FE1, 0xE5A7, 0x6FEE, 0xE5A8, 0x6FDE, 0xE5A9, 0x6FE0, 0xE5AA, 0x6FEF,
- 0xE5AB, 0x701A, 0xE5AC, 0x7023, 0xE5AD, 0x701B, 0xE5AE, 0x7039, 0xE5AF, 0x7035, 0xE5B0, 0x704F, 0xE5B1, 0x705E, 0xE5B2, 0x5B80,
- 0xE5B3, 0x5B84, 0xE5B4, 0x5B95, 0xE5B5, 0x5B93, 0xE5B6, 0x5BA5, 0xE5B7, 0x5BB8, 0xE5B8, 0x752F, 0xE5B9, 0x9A9E, 0xE5BA, 0x6434,
- 0xE5BB, 0x5BE4, 0xE5BC, 0x5BEE, 0xE5BD, 0x8930, 0xE5BE, 0x5BF0, 0xE5BF, 0x8E47, 0xE5C0, 0x8B07, 0xE5C1, 0x8FB6, 0xE5C2, 0x8FD3,
- 0xE5C3, 0x8FD5, 0xE5C4, 0x8FE5, 0xE5C5, 0x8FEE, 0xE5C6, 0x8FE4, 0xE5C7, 0x8FE9, 0xE5C8, 0x8FE6, 0xE5C9, 0x8FF3, 0xE5CA, 0x8FE8,
- 0xE5CB, 0x9005, 0xE5CC, 0x9004, 0xE5CD, 0x900B, 0xE5CE, 0x9026, 0xE5CF, 0x9011, 0xE5D0, 0x900D, 0xE5D1, 0x9016, 0xE5D2, 0x9021,
- 0xE5D3, 0x9035, 0xE5D4, 0x9036, 0xE5D5, 0x902D, 0xE5D6, 0x902F, 0xE5D7, 0x9044, 0xE5D8, 0x9051, 0xE5D9, 0x9052, 0xE5DA, 0x9050,
- 0xE5DB, 0x9068, 0xE5DC, 0x9058, 0xE5DD, 0x9062, 0xE5DE, 0x905B, 0xE5DF, 0x66B9, 0xE5E0, 0x9074, 0xE5E1, 0x907D, 0xE5E2, 0x9082,
- 0xE5E3, 0x9088, 0xE5E4, 0x9083, 0xE5E5, 0x908B, 0xE5E6, 0x5F50, 0xE5E7, 0x5F57, 0xE5E8, 0x5F56, 0xE5E9, 0x5F58, 0xE5EA, 0x5C3B,
- 0xE5EB, 0x54AB, 0xE5EC, 0x5C50, 0xE5ED, 0x5C59, 0xE5EE, 0x5B71, 0xE5EF, 0x5C63, 0xE5F0, 0x5C66, 0xE5F1, 0x7FBC, 0xE5F2, 0x5F2A,
- 0xE5F3, 0x5F29, 0xE5F4, 0x5F2D, 0xE5F5, 0x8274, 0xE5F6, 0x5F3C, 0xE5F7, 0x9B3B, 0xE5F8, 0x5C6E, 0xE5F9, 0x5981, 0xE5FA, 0x5983,
- 0xE5FB, 0x598D, 0xE5FC, 0x59A9, 0xE5FD, 0x59AA, 0xE5FE, 0x59A3, 0xE640, 0x936C, 0xE641, 0x936D, 0xE642, 0x936E, 0xE643, 0x936F,
- 0xE644, 0x9370, 0xE645, 0x9371, 0xE646, 0x9372, 0xE647, 0x9373, 0xE648, 0x9374, 0xE649, 0x9375, 0xE64A, 0x9376, 0xE64B, 0x9377,
- 0xE64C, 0x9378, 0xE64D, 0x9379, 0xE64E, 0x937A, 0xE64F, 0x937B, 0xE650, 0x937C, 0xE651, 0x937D, 0xE652, 0x937E, 0xE653, 0x937F,
- 0xE654, 0x9380, 0xE655, 0x9381, 0xE656, 0x9382, 0xE657, 0x9383, 0xE658, 0x9384, 0xE659, 0x9385, 0xE65A, 0x9386, 0xE65B, 0x9387,
- 0xE65C, 0x9388, 0xE65D, 0x9389, 0xE65E, 0x938A, 0xE65F, 0x938B, 0xE660, 0x938C, 0xE661, 0x938D, 0xE662, 0x938E, 0xE663, 0x9390,
- 0xE664, 0x9391, 0xE665, 0x9392, 0xE666, 0x9393, 0xE667, 0x9394, 0xE668, 0x9395, 0xE669, 0x9396, 0xE66A, 0x9397, 0xE66B, 0x9398,
- 0xE66C, 0x9399, 0xE66D, 0x939A, 0xE66E, 0x939B, 0xE66F, 0x939C, 0xE670, 0x939D, 0xE671, 0x939E, 0xE672, 0x939F, 0xE673, 0x93A0,
- 0xE674, 0x93A1, 0xE675, 0x93A2, 0xE676, 0x93A3, 0xE677, 0x93A4, 0xE678, 0x93A5, 0xE679, 0x93A6, 0xE67A, 0x93A7, 0xE67B, 0x93A8,
- 0xE67C, 0x93A9, 0xE67D, 0x93AA, 0xE67E, 0x93AB, 0xE680, 0x93AC, 0xE681, 0x93AD, 0xE682, 0x93AE, 0xE683, 0x93AF, 0xE684, 0x93B0,
- 0xE685, 0x93B1, 0xE686, 0x93B2, 0xE687, 0x93B3, 0xE688, 0x93B4, 0xE689, 0x93B5, 0xE68A, 0x93B6, 0xE68B, 0x93B7, 0xE68C, 0x93B8,
- 0xE68D, 0x93B9, 0xE68E, 0x93BA, 0xE68F, 0x93BB, 0xE690, 0x93BC, 0xE691, 0x93BD, 0xE692, 0x93BE, 0xE693, 0x93BF, 0xE694, 0x93C0,
- 0xE695, 0x93C1, 0xE696, 0x93C2, 0xE697, 0x93C3, 0xE698, 0x93C4, 0xE699, 0x93C5, 0xE69A, 0x93C6, 0xE69B, 0x93C7, 0xE69C, 0x93C8,
- 0xE69D, 0x93C9, 0xE69E, 0x93CB, 0xE69F, 0x93CC, 0xE6A0, 0x93CD, 0xE6A1, 0x5997, 0xE6A2, 0x59CA, 0xE6A3, 0x59AB, 0xE6A4, 0x599E,
- 0xE6A5, 0x59A4, 0xE6A6, 0x59D2, 0xE6A7, 0x59B2, 0xE6A8, 0x59AF, 0xE6A9, 0x59D7, 0xE6AA, 0x59BE, 0xE6AB, 0x5A05, 0xE6AC, 0x5A06,
- 0xE6AD, 0x59DD, 0xE6AE, 0x5A08, 0xE6AF, 0x59E3, 0xE6B0, 0x59D8, 0xE6B1, 0x59F9, 0xE6B2, 0x5A0C, 0xE6B3, 0x5A09, 0xE6B4, 0x5A32,
- 0xE6B5, 0x5A34, 0xE6B6, 0x5A11, 0xE6B7, 0x5A23, 0xE6B8, 0x5A13, 0xE6B9, 0x5A40, 0xE6BA, 0x5A67, 0xE6BB, 0x5A4A, 0xE6BC, 0x5A55,
- 0xE6BD, 0x5A3C, 0xE6BE, 0x5A62, 0xE6BF, 0x5A75, 0xE6C0, 0x80EC, 0xE6C1, 0x5AAA, 0xE6C2, 0x5A9B, 0xE6C3, 0x5A77, 0xE6C4, 0x5A7A,
- 0xE6C5, 0x5ABE, 0xE6C6, 0x5AEB, 0xE6C7, 0x5AB2, 0xE6C8, 0x5AD2, 0xE6C9, 0x5AD4, 0xE6CA, 0x5AB8, 0xE6CB, 0x5AE0, 0xE6CC, 0x5AE3,
- 0xE6CD, 0x5AF1, 0xE6CE, 0x5AD6, 0xE6CF, 0x5AE6, 0xE6D0, 0x5AD8, 0xE6D1, 0x5ADC, 0xE6D2, 0x5B09, 0xE6D3, 0x5B17, 0xE6D4, 0x5B16,
- 0xE6D5, 0x5B32, 0xE6D6, 0x5B37, 0xE6D7, 0x5B40, 0xE6D8, 0x5C15, 0xE6D9, 0x5C1C, 0xE6DA, 0x5B5A, 0xE6DB, 0x5B65, 0xE6DC, 0x5B73,
- 0xE6DD, 0x5B51, 0xE6DE, 0x5B53, 0xE6DF, 0x5B62, 0xE6E0, 0x9A75, 0xE6E1, 0x9A77, 0xE6E2, 0x9A78, 0xE6E3, 0x9A7A, 0xE6E4, 0x9A7F,
- 0xE6E5, 0x9A7D, 0xE6E6, 0x9A80, 0xE6E7, 0x9A81, 0xE6E8, 0x9A85, 0xE6E9, 0x9A88, 0xE6EA, 0x9A8A, 0xE6EB, 0x9A90, 0xE6EC, 0x9A92,
- 0xE6ED, 0x9A93, 0xE6EE, 0x9A96, 0xE6EF, 0x9A98, 0xE6F0, 0x9A9B, 0xE6F1, 0x9A9C, 0xE6F2, 0x9A9D, 0xE6F3, 0x9A9F, 0xE6F4, 0x9AA0,
- 0xE6F5, 0x9AA2, 0xE6F6, 0x9AA3, 0xE6F7, 0x9AA5, 0xE6F8, 0x9AA7, 0xE6F9, 0x7E9F, 0xE6FA, 0x7EA1, 0xE6FB, 0x7EA3, 0xE6FC, 0x7EA5,
- 0xE6FD, 0x7EA8, 0xE6FE, 0x7EA9, 0xE740, 0x93CE, 0xE741, 0x93CF, 0xE742, 0x93D0, 0xE743, 0x93D1, 0xE744, 0x93D2, 0xE745, 0x93D3,
- 0xE746, 0x93D4, 0xE747, 0x93D5, 0xE748, 0x93D7, 0xE749, 0x93D8, 0xE74A, 0x93D9, 0xE74B, 0x93DA, 0xE74C, 0x93DB, 0xE74D, 0x93DC,
- 0xE74E, 0x93DD, 0xE74F, 0x93DE, 0xE750, 0x93DF, 0xE751, 0x93E0, 0xE752, 0x93E1, 0xE753, 0x93E2, 0xE754, 0x93E3, 0xE755, 0x93E4,
- 0xE756, 0x93E5, 0xE757, 0x93E6, 0xE758, 0x93E7, 0xE759, 0x93E8, 0xE75A, 0x93E9, 0xE75B, 0x93EA, 0xE75C, 0x93EB, 0xE75D, 0x93EC,
- 0xE75E, 0x93ED, 0xE75F, 0x93EE, 0xE760, 0x93EF, 0xE761, 0x93F0, 0xE762, 0x93F1, 0xE763, 0x93F2, 0xE764, 0x93F3, 0xE765, 0x93F4,
- 0xE766, 0x93F5, 0xE767, 0x93F6, 0xE768, 0x93F7, 0xE769, 0x93F8, 0xE76A, 0x93F9, 0xE76B, 0x93FA, 0xE76C, 0x93FB, 0xE76D, 0x93FC,
- 0xE76E, 0x93FD, 0xE76F, 0x93FE, 0xE770, 0x93FF, 0xE771, 0x9400, 0xE772, 0x9401, 0xE773, 0x9402, 0xE774, 0x9403, 0xE775, 0x9404,
- 0xE776, 0x9405, 0xE777, 0x9406, 0xE778, 0x9407, 0xE779, 0x9408, 0xE77A, 0x9409, 0xE77B, 0x940A, 0xE77C, 0x940B, 0xE77D, 0x940C,
- 0xE77E, 0x940D, 0xE780, 0x940E, 0xE781, 0x940F, 0xE782, 0x9410, 0xE783, 0x9411, 0xE784, 0x9412, 0xE785, 0x9413, 0xE786, 0x9414,
- 0xE787, 0x9415, 0xE788, 0x9416, 0xE789, 0x9417, 0xE78A, 0x9418, 0xE78B, 0x9419, 0xE78C, 0x941A, 0xE78D, 0x941B, 0xE78E, 0x941C,
- 0xE78F, 0x941D, 0xE790, 0x941E, 0xE791, 0x941F, 0xE792, 0x9420, 0xE793, 0x9421, 0xE794, 0x9422, 0xE795, 0x9423, 0xE796, 0x9424,
- 0xE797, 0x9425, 0xE798, 0x9426, 0xE799, 0x9427, 0xE79A, 0x9428, 0xE79B, 0x9429, 0xE79C, 0x942A, 0xE79D, 0x942B, 0xE79E, 0x942C,
- 0xE79F, 0x942D, 0xE7A0, 0x942E, 0xE7A1, 0x7EAD, 0xE7A2, 0x7EB0, 0xE7A3, 0x7EBE, 0xE7A4, 0x7EC0, 0xE7A5, 0x7EC1, 0xE7A6, 0x7EC2,
- 0xE7A7, 0x7EC9, 0xE7A8, 0x7ECB, 0xE7A9, 0x7ECC, 0xE7AA, 0x7ED0, 0xE7AB, 0x7ED4, 0xE7AC, 0x7ED7, 0xE7AD, 0x7EDB, 0xE7AE, 0x7EE0,
- 0xE7AF, 0x7EE1, 0xE7B0, 0x7EE8, 0xE7B1, 0x7EEB, 0xE7B2, 0x7EEE, 0xE7B3, 0x7EEF, 0xE7B4, 0x7EF1, 0xE7B5, 0x7EF2, 0xE7B6, 0x7F0D,
- 0xE7B7, 0x7EF6, 0xE7B8, 0x7EFA, 0xE7B9, 0x7EFB, 0xE7BA, 0x7EFE, 0xE7BB, 0x7F01, 0xE7BC, 0x7F02, 0xE7BD, 0x7F03, 0xE7BE, 0x7F07,
- 0xE7BF, 0x7F08, 0xE7C0, 0x7F0B, 0xE7C1, 0x7F0C, 0xE7C2, 0x7F0F, 0xE7C3, 0x7F11, 0xE7C4, 0x7F12, 0xE7C5, 0x7F17, 0xE7C6, 0x7F19,
- 0xE7C7, 0x7F1C, 0xE7C8, 0x7F1B, 0xE7C9, 0x7F1F, 0xE7CA, 0x7F21, 0xE7CB, 0x7F22, 0xE7CC, 0x7F23, 0xE7CD, 0x7F24, 0xE7CE, 0x7F25,
- 0xE7CF, 0x7F26, 0xE7D0, 0x7F27, 0xE7D1, 0x7F2A, 0xE7D2, 0x7F2B, 0xE7D3, 0x7F2C, 0xE7D4, 0x7F2D, 0xE7D5, 0x7F2F, 0xE7D6, 0x7F30,
- 0xE7D7, 0x7F31, 0xE7D8, 0x7F32, 0xE7D9, 0x7F33, 0xE7DA, 0x7F35, 0xE7DB, 0x5E7A, 0xE7DC, 0x757F, 0xE7DD, 0x5DDB, 0xE7DE, 0x753E,
- 0xE7DF, 0x9095, 0xE7E0, 0x738E, 0xE7E1, 0x7391, 0xE7E2, 0x73AE, 0xE7E3, 0x73A2, 0xE7E4, 0x739F, 0xE7E5, 0x73CF, 0xE7E6, 0x73C2,
- 0xE7E7, 0x73D1, 0xE7E8, 0x73B7, 0xE7E9, 0x73B3, 0xE7EA, 0x73C0, 0xE7EB, 0x73C9, 0xE7EC, 0x73C8, 0xE7ED, 0x73E5, 0xE7EE, 0x73D9,
- 0xE7EF, 0x987C, 0xE7F0, 0x740A, 0xE7F1, 0x73E9, 0xE7F2, 0x73E7, 0xE7F3, 0x73DE, 0xE7F4, 0x73BA, 0xE7F5, 0x73F2, 0xE7F6, 0x740F,
- 0xE7F7, 0x742A, 0xE7F8, 0x745B, 0xE7F9, 0x7426, 0xE7FA, 0x7425, 0xE7FB, 0x7428, 0xE7FC, 0x7430, 0xE7FD, 0x742E, 0xE7FE, 0x742C,
- 0xE840, 0x942F, 0xE841, 0x9430, 0xE842, 0x9431, 0xE843, 0x9432, 0xE844, 0x9433, 0xE845, 0x9434, 0xE846, 0x9435, 0xE847, 0x9436,
- 0xE848, 0x9437, 0xE849, 0x9438, 0xE84A, 0x9439, 0xE84B, 0x943A, 0xE84C, 0x943B, 0xE84D, 0x943C, 0xE84E, 0x943D, 0xE84F, 0x943F,
- 0xE850, 0x9440, 0xE851, 0x9441, 0xE852, 0x9442, 0xE853, 0x9443, 0xE854, 0x9444, 0xE855, 0x9445, 0xE856, 0x9446, 0xE857, 0x9447,
- 0xE858, 0x9448, 0xE859, 0x9449, 0xE85A, 0x944A, 0xE85B, 0x944B, 0xE85C, 0x944C, 0xE85D, 0x944D, 0xE85E, 0x944E, 0xE85F, 0x944F,
- 0xE860, 0x9450, 0xE861, 0x9451, 0xE862, 0x9452, 0xE863, 0x9453, 0xE864, 0x9454, 0xE865, 0x9455, 0xE866, 0x9456, 0xE867, 0x9457,
- 0xE868, 0x9458, 0xE869, 0x9459, 0xE86A, 0x945A, 0xE86B, 0x945B, 0xE86C, 0x945C, 0xE86D, 0x945D, 0xE86E, 0x945E, 0xE86F, 0x945F,
- 0xE870, 0x9460, 0xE871, 0x9461, 0xE872, 0x9462, 0xE873, 0x9463, 0xE874, 0x9464, 0xE875, 0x9465, 0xE876, 0x9466, 0xE877, 0x9467,
- 0xE878, 0x9468, 0xE879, 0x9469, 0xE87A, 0x946A, 0xE87B, 0x946C, 0xE87C, 0x946D, 0xE87D, 0x946E, 0xE87E, 0x946F, 0xE880, 0x9470,
- 0xE881, 0x9471, 0xE882, 0x9472, 0xE883, 0x9473, 0xE884, 0x9474, 0xE885, 0x9475, 0xE886, 0x9476, 0xE887, 0x9477, 0xE888, 0x9478,
- 0xE889, 0x9479, 0xE88A, 0x947A, 0xE88B, 0x947B, 0xE88C, 0x947C, 0xE88D, 0x947D, 0xE88E, 0x947E, 0xE88F, 0x947F, 0xE890, 0x9480,
- 0xE891, 0x9481, 0xE892, 0x9482, 0xE893, 0x9483, 0xE894, 0x9484, 0xE895, 0x9491, 0xE896, 0x9496, 0xE897, 0x9498, 0xE898, 0x94C7,
- 0xE899, 0x94CF, 0xE89A, 0x94D3, 0xE89B, 0x94D4, 0xE89C, 0x94DA, 0xE89D, 0x94E6, 0xE89E, 0x94FB, 0xE89F, 0x951C, 0xE8A0, 0x9520,
- 0xE8A1, 0x741B, 0xE8A2, 0x741A, 0xE8A3, 0x7441, 0xE8A4, 0x745C, 0xE8A5, 0x7457, 0xE8A6, 0x7455, 0xE8A7, 0x7459, 0xE8A8, 0x7477,
- 0xE8A9, 0x746D, 0xE8AA, 0x747E, 0xE8AB, 0x749C, 0xE8AC, 0x748E, 0xE8AD, 0x7480, 0xE8AE, 0x7481, 0xE8AF, 0x7487, 0xE8B0, 0x748B,
- 0xE8B1, 0x749E, 0xE8B2, 0x74A8, 0xE8B3, 0x74A9, 0xE8B4, 0x7490, 0xE8B5, 0x74A7, 0xE8B6, 0x74D2, 0xE8B7, 0x74BA, 0xE8B8, 0x97EA,
- 0xE8B9, 0x97EB, 0xE8BA, 0x97EC, 0xE8BB, 0x674C, 0xE8BC, 0x6753, 0xE8BD, 0x675E, 0xE8BE, 0x6748, 0xE8BF, 0x6769, 0xE8C0, 0x67A5,
- 0xE8C1, 0x6787, 0xE8C2, 0x676A, 0xE8C3, 0x6773, 0xE8C4, 0x6798, 0xE8C5, 0x67A7, 0xE8C6, 0x6775, 0xE8C7, 0x67A8, 0xE8C8, 0x679E,
- 0xE8C9, 0x67AD, 0xE8CA, 0x678B, 0xE8CB, 0x6777, 0xE8CC, 0x677C, 0xE8CD, 0x67F0, 0xE8CE, 0x6809, 0xE8CF, 0x67D8, 0xE8D0, 0x680A,
- 0xE8D1, 0x67E9, 0xE8D2, 0x67B0, 0xE8D3, 0x680C, 0xE8D4, 0x67D9, 0xE8D5, 0x67B5, 0xE8D6, 0x67DA, 0xE8D7, 0x67B3, 0xE8D8, 0x67DD,
- 0xE8D9, 0x6800, 0xE8DA, 0x67C3, 0xE8DB, 0x67B8, 0xE8DC, 0x67E2, 0xE8DD, 0x680E, 0xE8DE, 0x67C1, 0xE8DF, 0x67FD, 0xE8E0, 0x6832,
- 0xE8E1, 0x6833, 0xE8E2, 0x6860, 0xE8E3, 0x6861, 0xE8E4, 0x684E, 0xE8E5, 0x6862, 0xE8E6, 0x6844, 0xE8E7, 0x6864, 0xE8E8, 0x6883,
- 0xE8E9, 0x681D, 0xE8EA, 0x6855, 0xE8EB, 0x6866, 0xE8EC, 0x6841, 0xE8ED, 0x6867, 0xE8EE, 0x6840, 0xE8EF, 0x683E, 0xE8F0, 0x684A,
- 0xE8F1, 0x6849, 0xE8F2, 0x6829, 0xE8F3, 0x68B5, 0xE8F4, 0x688F, 0xE8F5, 0x6874, 0xE8F6, 0x6877, 0xE8F7, 0x6893, 0xE8F8, 0x686B,
- 0xE8F9, 0x68C2, 0xE8FA, 0x696E, 0xE8FB, 0x68FC, 0xE8FC, 0x691F, 0xE8FD, 0x6920, 0xE8FE, 0x68F9, 0xE940, 0x9527, 0xE941, 0x9533,
- 0xE942, 0x953D, 0xE943, 0x9543, 0xE944, 0x9548, 0xE945, 0x954B, 0xE946, 0x9555, 0xE947, 0x955A, 0xE948, 0x9560, 0xE949, 0x956E,
- 0xE94A, 0x9574, 0xE94B, 0x9575, 0xE94C, 0x9577, 0xE94D, 0x9578, 0xE94E, 0x9579, 0xE94F, 0x957A, 0xE950, 0x957B, 0xE951, 0x957C,
- 0xE952, 0x957D, 0xE953, 0x957E, 0xE954, 0x9580, 0xE955, 0x9581, 0xE956, 0x9582, 0xE957, 0x9583, 0xE958, 0x9584, 0xE959, 0x9585,
- 0xE95A, 0x9586, 0xE95B, 0x9587, 0xE95C, 0x9588, 0xE95D, 0x9589, 0xE95E, 0x958A, 0xE95F, 0x958B, 0xE960, 0x958C, 0xE961, 0x958D,
- 0xE962, 0x958E, 0xE963, 0x958F, 0xE964, 0x9590, 0xE965, 0x9591, 0xE966, 0x9592, 0xE967, 0x9593, 0xE968, 0x9594, 0xE969, 0x9595,
- 0xE96A, 0x9596, 0xE96B, 0x9597, 0xE96C, 0x9598, 0xE96D, 0x9599, 0xE96E, 0x959A, 0xE96F, 0x959B, 0xE970, 0x959C, 0xE971, 0x959D,
- 0xE972, 0x959E, 0xE973, 0x959F, 0xE974, 0x95A0, 0xE975, 0x95A1, 0xE976, 0x95A2, 0xE977, 0x95A3, 0xE978, 0x95A4, 0xE979, 0x95A5,
- 0xE97A, 0x95A6, 0xE97B, 0x95A7, 0xE97C, 0x95A8, 0xE97D, 0x95A9, 0xE97E, 0x95AA, 0xE980, 0x95AB, 0xE981, 0x95AC, 0xE982, 0x95AD,
- 0xE983, 0x95AE, 0xE984, 0x95AF, 0xE985, 0x95B0, 0xE986, 0x95B1, 0xE987, 0x95B2, 0xE988, 0x95B3, 0xE989, 0x95B4, 0xE98A, 0x95B5,
- 0xE98B, 0x95B6, 0xE98C, 0x95B7, 0xE98D, 0x95B8, 0xE98E, 0x95B9, 0xE98F, 0x95BA, 0xE990, 0x95BB, 0xE991, 0x95BC, 0xE992, 0x95BD,
- 0xE993, 0x95BE, 0xE994, 0x95BF, 0xE995, 0x95C0, 0xE996, 0x95C1, 0xE997, 0x95C2, 0xE998, 0x95C3, 0xE999, 0x95C4, 0xE99A, 0x95C5,
- 0xE99B, 0x95C6, 0xE99C, 0x95C7, 0xE99D, 0x95C8, 0xE99E, 0x95C9, 0xE99F, 0x95CA, 0xE9A0, 0x95CB, 0xE9A1, 0x6924, 0xE9A2, 0x68F0,
- 0xE9A3, 0x690B, 0xE9A4, 0x6901, 0xE9A5, 0x6957, 0xE9A6, 0x68E3, 0xE9A7, 0x6910, 0xE9A8, 0x6971, 0xE9A9, 0x6939, 0xE9AA, 0x6960,
- 0xE9AB, 0x6942, 0xE9AC, 0x695D, 0xE9AD, 0x6984, 0xE9AE, 0x696B, 0xE9AF, 0x6980, 0xE9B0, 0x6998, 0xE9B1, 0x6978, 0xE9B2, 0x6934,
- 0xE9B3, 0x69CC, 0xE9B4, 0x6987, 0xE9B5, 0x6988, 0xE9B6, 0x69CE, 0xE9B7, 0x6989, 0xE9B8, 0x6966, 0xE9B9, 0x6963, 0xE9BA, 0x6979,
- 0xE9BB, 0x699B, 0xE9BC, 0x69A7, 0xE9BD, 0x69BB, 0xE9BE, 0x69AB, 0xE9BF, 0x69AD, 0xE9C0, 0x69D4, 0xE9C1, 0x69B1, 0xE9C2, 0x69C1,
- 0xE9C3, 0x69CA, 0xE9C4, 0x69DF, 0xE9C5, 0x6995, 0xE9C6, 0x69E0, 0xE9C7, 0x698D, 0xE9C8, 0x69FF, 0xE9C9, 0x6A2F, 0xE9CA, 0x69ED,
- 0xE9CB, 0x6A17, 0xE9CC, 0x6A18, 0xE9CD, 0x6A65, 0xE9CE, 0x69F2, 0xE9CF, 0x6A44, 0xE9D0, 0x6A3E, 0xE9D1, 0x6AA0, 0xE9D2, 0x6A50,
- 0xE9D3, 0x6A5B, 0xE9D4, 0x6A35, 0xE9D5, 0x6A8E, 0xE9D6, 0x6A79, 0xE9D7, 0x6A3D, 0xE9D8, 0x6A28, 0xE9D9, 0x6A58, 0xE9DA, 0x6A7C,
- 0xE9DB, 0x6A91, 0xE9DC, 0x6A90, 0xE9DD, 0x6AA9, 0xE9DE, 0x6A97, 0xE9DF, 0x6AAB, 0xE9E0, 0x7337, 0xE9E1, 0x7352, 0xE9E2, 0x6B81,
- 0xE9E3, 0x6B82, 0xE9E4, 0x6B87, 0xE9E5, 0x6B84, 0xE9E6, 0x6B92, 0xE9E7, 0x6B93, 0xE9E8, 0x6B8D, 0xE9E9, 0x6B9A, 0xE9EA, 0x6B9B,
- 0xE9EB, 0x6BA1, 0xE9EC, 0x6BAA, 0xE9ED, 0x8F6B, 0xE9EE, 0x8F6D, 0xE9EF, 0x8F71, 0xE9F0, 0x8F72, 0xE9F1, 0x8F73, 0xE9F2, 0x8F75,
- 0xE9F3, 0x8F76, 0xE9F4, 0x8F78, 0xE9F5, 0x8F77, 0xE9F6, 0x8F79, 0xE9F7, 0x8F7A, 0xE9F8, 0x8F7C, 0xE9F9, 0x8F7E, 0xE9FA, 0x8F81,
- 0xE9FB, 0x8F82, 0xE9FC, 0x8F84, 0xE9FD, 0x8F87, 0xE9FE, 0x8F8B, 0xEA40, 0x95CC, 0xEA41, 0x95CD, 0xEA42, 0x95CE, 0xEA43, 0x95CF,
- 0xEA44, 0x95D0, 0xEA45, 0x95D1, 0xEA46, 0x95D2, 0xEA47, 0x95D3, 0xEA48, 0x95D4, 0xEA49, 0x95D5, 0xEA4A, 0x95D6, 0xEA4B, 0x95D7,
- 0xEA4C, 0x95D8, 0xEA4D, 0x95D9, 0xEA4E, 0x95DA, 0xEA4F, 0x95DB, 0xEA50, 0x95DC, 0xEA51, 0x95DD, 0xEA52, 0x95DE, 0xEA53, 0x95DF,
- 0xEA54, 0x95E0, 0xEA55, 0x95E1, 0xEA56, 0x95E2, 0xEA57, 0x95E3, 0xEA58, 0x95E4, 0xEA59, 0x95E5, 0xEA5A, 0x95E6, 0xEA5B, 0x95E7,
- 0xEA5C, 0x95EC, 0xEA5D, 0x95FF, 0xEA5E, 0x9607, 0xEA5F, 0x9613, 0xEA60, 0x9618, 0xEA61, 0x961B, 0xEA62, 0x961E, 0xEA63, 0x9620,
- 0xEA64, 0x9623, 0xEA65, 0x9624, 0xEA66, 0x9625, 0xEA67, 0x9626, 0xEA68, 0x9627, 0xEA69, 0x9628, 0xEA6A, 0x9629, 0xEA6B, 0x962B,
- 0xEA6C, 0x962C, 0xEA6D, 0x962D, 0xEA6E, 0x962F, 0xEA6F, 0x9630, 0xEA70, 0x9637, 0xEA71, 0x9638, 0xEA72, 0x9639, 0xEA73, 0x963A,
- 0xEA74, 0x963E, 0xEA75, 0x9641, 0xEA76, 0x9643, 0xEA77, 0x964A, 0xEA78, 0x964E, 0xEA79, 0x964F, 0xEA7A, 0x9651, 0xEA7B, 0x9652,
- 0xEA7C, 0x9653, 0xEA7D, 0x9656, 0xEA7E, 0x9657, 0xEA80, 0x9658, 0xEA81, 0x9659, 0xEA82, 0x965A, 0xEA83, 0x965C, 0xEA84, 0x965D,
- 0xEA85, 0x965E, 0xEA86, 0x9660, 0xEA87, 0x9663, 0xEA88, 0x9665, 0xEA89, 0x9666, 0xEA8A, 0x966B, 0xEA8B, 0x966D, 0xEA8C, 0x966E,
- 0xEA8D, 0x966F, 0xEA8E, 0x9670, 0xEA8F, 0x9671, 0xEA90, 0x9673, 0xEA91, 0x9678, 0xEA92, 0x9679, 0xEA93, 0x967A, 0xEA94, 0x967B,
- 0xEA95, 0x967C, 0xEA96, 0x967D, 0xEA97, 0x967E, 0xEA98, 0x967F, 0xEA99, 0x9680, 0xEA9A, 0x9681, 0xEA9B, 0x9682, 0xEA9C, 0x9683,
- 0xEA9D, 0x9684, 0xEA9E, 0x9687, 0xEA9F, 0x9689, 0xEAA0, 0x968A, 0xEAA1, 0x8F8D, 0xEAA2, 0x8F8E, 0xEAA3, 0x8F8F, 0xEAA4, 0x8F98,
- 0xEAA5, 0x8F9A, 0xEAA6, 0x8ECE, 0xEAA7, 0x620B, 0xEAA8, 0x6217, 0xEAA9, 0x621B, 0xEAAA, 0x621F, 0xEAAB, 0x6222, 0xEAAC, 0x6221,
- 0xEAAD, 0x6225, 0xEAAE, 0x6224, 0xEAAF, 0x622C, 0xEAB0, 0x81E7, 0xEAB1, 0x74EF, 0xEAB2, 0x74F4, 0xEAB3, 0x74FF, 0xEAB4, 0x750F,
- 0xEAB5, 0x7511, 0xEAB6, 0x7513, 0xEAB7, 0x6534, 0xEAB8, 0x65EE, 0xEAB9, 0x65EF, 0xEABA, 0x65F0, 0xEABB, 0x660A, 0xEABC, 0x6619,
- 0xEABD, 0x6772, 0xEABE, 0x6603, 0xEABF, 0x6615, 0xEAC0, 0x6600, 0xEAC1, 0x7085, 0xEAC2, 0x66F7, 0xEAC3, 0x661D, 0xEAC4, 0x6634,
- 0xEAC5, 0x6631, 0xEAC6, 0x6636, 0xEAC7, 0x6635, 0xEAC8, 0x8006, 0xEAC9, 0x665F, 0xEACA, 0x6654, 0xEACB, 0x6641, 0xEACC, 0x664F,
- 0xEACD, 0x6656, 0xEACE, 0x6661, 0xEACF, 0x6657, 0xEAD0, 0x6677, 0xEAD1, 0x6684, 0xEAD2, 0x668C, 0xEAD3, 0x66A7, 0xEAD4, 0x669D,
- 0xEAD5, 0x66BE, 0xEAD6, 0x66DB, 0xEAD7, 0x66DC, 0xEAD8, 0x66E6, 0xEAD9, 0x66E9, 0xEADA, 0x8D32, 0xEADB, 0x8D33, 0xEADC, 0x8D36,
- 0xEADD, 0x8D3B, 0xEADE, 0x8D3D, 0xEADF, 0x8D40, 0xEAE0, 0x8D45, 0xEAE1, 0x8D46, 0xEAE2, 0x8D48, 0xEAE3, 0x8D49, 0xEAE4, 0x8D47,
- 0xEAE5, 0x8D4D, 0xEAE6, 0x8D55, 0xEAE7, 0x8D59, 0xEAE8, 0x89C7, 0xEAE9, 0x89CA, 0xEAEA, 0x89CB, 0xEAEB, 0x89CC, 0xEAEC, 0x89CE,
- 0xEAED, 0x89CF, 0xEAEE, 0x89D0, 0xEAEF, 0x89D1, 0xEAF0, 0x726E, 0xEAF1, 0x729F, 0xEAF2, 0x725D, 0xEAF3, 0x7266, 0xEAF4, 0x726F,
- 0xEAF5, 0x727E, 0xEAF6, 0x727F, 0xEAF7, 0x7284, 0xEAF8, 0x728B, 0xEAF9, 0x728D, 0xEAFA, 0x728F, 0xEAFB, 0x7292, 0xEAFC, 0x6308,
- 0xEAFD, 0x6332, 0xEAFE, 0x63B0, 0xEB40, 0x968C, 0xEB41, 0x968E, 0xEB42, 0x9691, 0xEB43, 0x9692, 0xEB44, 0x9693, 0xEB45, 0x9695,
- 0xEB46, 0x9696, 0xEB47, 0x969A, 0xEB48, 0x969B, 0xEB49, 0x969D, 0xEB4A, 0x969E, 0xEB4B, 0x969F, 0xEB4C, 0x96A0, 0xEB4D, 0x96A1,
- 0xEB4E, 0x96A2, 0xEB4F, 0x96A3, 0xEB50, 0x96A4, 0xEB51, 0x96A5, 0xEB52, 0x96A6, 0xEB53, 0x96A8, 0xEB54, 0x96A9, 0xEB55, 0x96AA,
- 0xEB56, 0x96AB, 0xEB57, 0x96AC, 0xEB58, 0x96AD, 0xEB59, 0x96AE, 0xEB5A, 0x96AF, 0xEB5B, 0x96B1, 0xEB5C, 0x96B2, 0xEB5D, 0x96B4,
- 0xEB5E, 0x96B5, 0xEB5F, 0x96B7, 0xEB60, 0x96B8, 0xEB61, 0x96BA, 0xEB62, 0x96BB, 0xEB63, 0x96BF, 0xEB64, 0x96C2, 0xEB65, 0x96C3,
- 0xEB66, 0x96C8, 0xEB67, 0x96CA, 0xEB68, 0x96CB, 0xEB69, 0x96D0, 0xEB6A, 0x96D1, 0xEB6B, 0x96D3, 0xEB6C, 0x96D4, 0xEB6D, 0x96D6,
- 0xEB6E, 0x96D7, 0xEB6F, 0x96D8, 0xEB70, 0x96D9, 0xEB71, 0x96DA, 0xEB72, 0x96DB, 0xEB73, 0x96DC, 0xEB74, 0x96DD, 0xEB75, 0x96DE,
- 0xEB76, 0x96DF, 0xEB77, 0x96E1, 0xEB78, 0x96E2, 0xEB79, 0x96E3, 0xEB7A, 0x96E4, 0xEB7B, 0x96E5, 0xEB7C, 0x96E6, 0xEB7D, 0x96E7,
- 0xEB7E, 0x96EB, 0xEB80, 0x96EC, 0xEB81, 0x96ED, 0xEB82, 0x96EE, 0xEB83, 0x96F0, 0xEB84, 0x96F1, 0xEB85, 0x96F2, 0xEB86, 0x96F4,
- 0xEB87, 0x96F5, 0xEB88, 0x96F8, 0xEB89, 0x96FA, 0xEB8A, 0x96FB, 0xEB8B, 0x96FC, 0xEB8C, 0x96FD, 0xEB8D, 0x96FF, 0xEB8E, 0x9702,
- 0xEB8F, 0x9703, 0xEB90, 0x9705, 0xEB91, 0x970A, 0xEB92, 0x970B, 0xEB93, 0x970C, 0xEB94, 0x9710, 0xEB95, 0x9711, 0xEB96, 0x9712,
- 0xEB97, 0x9714, 0xEB98, 0x9715, 0xEB99, 0x9717, 0xEB9A, 0x9718, 0xEB9B, 0x9719, 0xEB9C, 0x971A, 0xEB9D, 0x971B, 0xEB9E, 0x971D,
- 0xEB9F, 0x971F, 0xEBA0, 0x9720, 0xEBA1, 0x643F, 0xEBA2, 0x64D8, 0xEBA3, 0x8004, 0xEBA4, 0x6BEA, 0xEBA5, 0x6BF3, 0xEBA6, 0x6BFD,
- 0xEBA7, 0x6BF5, 0xEBA8, 0x6BF9, 0xEBA9, 0x6C05, 0xEBAA, 0x6C07, 0xEBAB, 0x6C06, 0xEBAC, 0x6C0D, 0xEBAD, 0x6C15, 0xEBAE, 0x6C18,
- 0xEBAF, 0x6C19, 0xEBB0, 0x6C1A, 0xEBB1, 0x6C21, 0xEBB2, 0x6C29, 0xEBB3, 0x6C24, 0xEBB4, 0x6C2A, 0xEBB5, 0x6C32, 0xEBB6, 0x6535,
- 0xEBB7, 0x6555, 0xEBB8, 0x656B, 0xEBB9, 0x724D, 0xEBBA, 0x7252, 0xEBBB, 0x7256, 0xEBBC, 0x7230, 0xEBBD, 0x8662, 0xEBBE, 0x5216,
- 0xEBBF, 0x809F, 0xEBC0, 0x809C, 0xEBC1, 0x8093, 0xEBC2, 0x80BC, 0xEBC3, 0x670A, 0xEBC4, 0x80BD, 0xEBC5, 0x80B1, 0xEBC6, 0x80AB,
- 0xEBC7, 0x80AD, 0xEBC8, 0x80B4, 0xEBC9, 0x80B7, 0xEBCA, 0x80E7, 0xEBCB, 0x80E8, 0xEBCC, 0x80E9, 0xEBCD, 0x80EA, 0xEBCE, 0x80DB,
- 0xEBCF, 0x80C2, 0xEBD0, 0x80C4, 0xEBD1, 0x80D9, 0xEBD2, 0x80CD, 0xEBD3, 0x80D7, 0xEBD4, 0x6710, 0xEBD5, 0x80DD, 0xEBD6, 0x80EB,
- 0xEBD7, 0x80F1, 0xEBD8, 0x80F4, 0xEBD9, 0x80ED, 0xEBDA, 0x810D, 0xEBDB, 0x810E, 0xEBDC, 0x80F2, 0xEBDD, 0x80FC, 0xEBDE, 0x6715,
- 0xEBDF, 0x8112, 0xEBE0, 0x8C5A, 0xEBE1, 0x8136, 0xEBE2, 0x811E, 0xEBE3, 0x812C, 0xEBE4, 0x8118, 0xEBE5, 0x8132, 0xEBE6, 0x8148,
- 0xEBE7, 0x814C, 0xEBE8, 0x8153, 0xEBE9, 0x8174, 0xEBEA, 0x8159, 0xEBEB, 0x815A, 0xEBEC, 0x8171, 0xEBED, 0x8160, 0xEBEE, 0x8169,
- 0xEBEF, 0x817C, 0xEBF0, 0x817D, 0xEBF1, 0x816D, 0xEBF2, 0x8167, 0xEBF3, 0x584D, 0xEBF4, 0x5AB5, 0xEBF5, 0x8188, 0xEBF6, 0x8182,
- 0xEBF7, 0x8191, 0xEBF8, 0x6ED5, 0xEBF9, 0x81A3, 0xEBFA, 0x81AA, 0xEBFB, 0x81CC, 0xEBFC, 0x6726, 0xEBFD, 0x81CA, 0xEBFE, 0x81BB,
- 0xEC40, 0x9721, 0xEC41, 0x9722, 0xEC42, 0x9723, 0xEC43, 0x9724, 0xEC44, 0x9725, 0xEC45, 0x9726, 0xEC46, 0x9727, 0xEC47, 0x9728,
- 0xEC48, 0x9729, 0xEC49, 0x972B, 0xEC4A, 0x972C, 0xEC4B, 0x972E, 0xEC4C, 0x972F, 0xEC4D, 0x9731, 0xEC4E, 0x9733, 0xEC4F, 0x9734,
- 0xEC50, 0x9735, 0xEC51, 0x9736, 0xEC52, 0x9737, 0xEC53, 0x973A, 0xEC54, 0x973B, 0xEC55, 0x973C, 0xEC56, 0x973D, 0xEC57, 0x973F,
- 0xEC58, 0x9740, 0xEC59, 0x9741, 0xEC5A, 0x9742, 0xEC5B, 0x9743, 0xEC5C, 0x9744, 0xEC5D, 0x9745, 0xEC5E, 0x9746, 0xEC5F, 0x9747,
- 0xEC60, 0x9748, 0xEC61, 0x9749, 0xEC62, 0x974A, 0xEC63, 0x974B, 0xEC64, 0x974C, 0xEC65, 0x974D, 0xEC66, 0x974E, 0xEC67, 0x974F,
- 0xEC68, 0x9750, 0xEC69, 0x9751, 0xEC6A, 0x9754, 0xEC6B, 0x9755, 0xEC6C, 0x9757, 0xEC6D, 0x9758, 0xEC6E, 0x975A, 0xEC6F, 0x975C,
- 0xEC70, 0x975D, 0xEC71, 0x975F, 0xEC72, 0x9763, 0xEC73, 0x9764, 0xEC74, 0x9766, 0xEC75, 0x9767, 0xEC76, 0x9768, 0xEC77, 0x976A,
- 0xEC78, 0x976B, 0xEC79, 0x976C, 0xEC7A, 0x976D, 0xEC7B, 0x976E, 0xEC7C, 0x976F, 0xEC7D, 0x9770, 0xEC7E, 0x9771, 0xEC80, 0x9772,
- 0xEC81, 0x9775, 0xEC82, 0x9777, 0xEC83, 0x9778, 0xEC84, 0x9779, 0xEC85, 0x977A, 0xEC86, 0x977B, 0xEC87, 0x977D, 0xEC88, 0x977E,
- 0xEC89, 0x977F, 0xEC8A, 0x9780, 0xEC8B, 0x9781, 0xEC8C, 0x9782, 0xEC8D, 0x9783, 0xEC8E, 0x9784, 0xEC8F, 0x9786, 0xEC90, 0x9787,
- 0xEC91, 0x9788, 0xEC92, 0x9789, 0xEC93, 0x978A, 0xEC94, 0x978C, 0xEC95, 0x978E, 0xEC96, 0x978F, 0xEC97, 0x9790, 0xEC98, 0x9793,
- 0xEC99, 0x9795, 0xEC9A, 0x9796, 0xEC9B, 0x9797, 0xEC9C, 0x9799, 0xEC9D, 0x979A, 0xEC9E, 0x979B, 0xEC9F, 0x979C, 0xECA0, 0x979D,
- 0xECA1, 0x81C1, 0xECA2, 0x81A6, 0xECA3, 0x6B24, 0xECA4, 0x6B37, 0xECA5, 0x6B39, 0xECA6, 0x6B43, 0xECA7, 0x6B46, 0xECA8, 0x6B59,
- 0xECA9, 0x98D1, 0xECAA, 0x98D2, 0xECAB, 0x98D3, 0xECAC, 0x98D5, 0xECAD, 0x98D9, 0xECAE, 0x98DA, 0xECAF, 0x6BB3, 0xECB0, 0x5F40,
- 0xECB1, 0x6BC2, 0xECB2, 0x89F3, 0xECB3, 0x6590, 0xECB4, 0x9F51, 0xECB5, 0x6593, 0xECB6, 0x65BC, 0xECB7, 0x65C6, 0xECB8, 0x65C4,
- 0xECB9, 0x65C3, 0xECBA, 0x65CC, 0xECBB, 0x65CE, 0xECBC, 0x65D2, 0xECBD, 0x65D6, 0xECBE, 0x7080, 0xECBF, 0x709C, 0xECC0, 0x7096,
- 0xECC1, 0x709D, 0xECC2, 0x70BB, 0xECC3, 0x70C0, 0xECC4, 0x70B7, 0xECC5, 0x70AB, 0xECC6, 0x70B1, 0xECC7, 0x70E8, 0xECC8, 0x70CA,
- 0xECC9, 0x7110, 0xECCA, 0x7113, 0xECCB, 0x7116, 0xECCC, 0x712F, 0xECCD, 0x7131, 0xECCE, 0x7173, 0xECCF, 0x715C, 0xECD0, 0x7168,
- 0xECD1, 0x7145, 0xECD2, 0x7172, 0xECD3, 0x714A, 0xECD4, 0x7178, 0xECD5, 0x717A, 0xECD6, 0x7198, 0xECD7, 0x71B3, 0xECD8, 0x71B5,
- 0xECD9, 0x71A8, 0xECDA, 0x71A0, 0xECDB, 0x71E0, 0xECDC, 0x71D4, 0xECDD, 0x71E7, 0xECDE, 0x71F9, 0xECDF, 0x721D, 0xECE0, 0x7228,
- 0xECE1, 0x706C, 0xECE2, 0x7118, 0xECE3, 0x7166, 0xECE4, 0x71B9, 0xECE5, 0x623E, 0xECE6, 0x623D, 0xECE7, 0x6243, 0xECE8, 0x6248,
- 0xECE9, 0x6249, 0xECEA, 0x793B, 0xECEB, 0x7940, 0xECEC, 0x7946, 0xECED, 0x7949, 0xECEE, 0x795B, 0xECEF, 0x795C, 0xECF0, 0x7953,
- 0xECF1, 0x795A, 0xECF2, 0x7962, 0xECF3, 0x7957, 0xECF4, 0x7960, 0xECF5, 0x796F, 0xECF6, 0x7967, 0xECF7, 0x797A, 0xECF8, 0x7985,
- 0xECF9, 0x798A, 0xECFA, 0x799A, 0xECFB, 0x79A7, 0xECFC, 0x79B3, 0xECFD, 0x5FD1, 0xECFE, 0x5FD0, 0xED40, 0x979E, 0xED41, 0x979F,
- 0xED42, 0x97A1, 0xED43, 0x97A2, 0xED44, 0x97A4, 0xED45, 0x97A5, 0xED46, 0x97A6, 0xED47, 0x97A7, 0xED48, 0x97A8, 0xED49, 0x97A9,
- 0xED4A, 0x97AA, 0xED4B, 0x97AC, 0xED4C, 0x97AE, 0xED4D, 0x97B0, 0xED4E, 0x97B1, 0xED4F, 0x97B3, 0xED50, 0x97B5, 0xED51, 0x97B6,
- 0xED52, 0x97B7, 0xED53, 0x97B8, 0xED54, 0x97B9, 0xED55, 0x97BA, 0xED56, 0x97BB, 0xED57, 0x97BC, 0xED58, 0x97BD, 0xED59, 0x97BE,
- 0xED5A, 0x97BF, 0xED5B, 0x97C0, 0xED5C, 0x97C1, 0xED5D, 0x97C2, 0xED5E, 0x97C3, 0xED5F, 0x97C4, 0xED60, 0x97C5, 0xED61, 0x97C6,
- 0xED62, 0x97C7, 0xED63, 0x97C8, 0xED64, 0x97C9, 0xED65, 0x97CA, 0xED66, 0x97CB, 0xED67, 0x97CC, 0xED68, 0x97CD, 0xED69, 0x97CE,
- 0xED6A, 0x97CF, 0xED6B, 0x97D0, 0xED6C, 0x97D1, 0xED6D, 0x97D2, 0xED6E, 0x97D3, 0xED6F, 0x97D4, 0xED70, 0x97D5, 0xED71, 0x97D6,
- 0xED72, 0x97D7, 0xED73, 0x97D8, 0xED74, 0x97D9, 0xED75, 0x97DA, 0xED76, 0x97DB, 0xED77, 0x97DC, 0xED78, 0x97DD, 0xED79, 0x97DE,
- 0xED7A, 0x97DF, 0xED7B, 0x97E0, 0xED7C, 0x97E1, 0xED7D, 0x97E2, 0xED7E, 0x97E3, 0xED80, 0x97E4, 0xED81, 0x97E5, 0xED82, 0x97E8,
- 0xED83, 0x97EE, 0xED84, 0x97EF, 0xED85, 0x97F0, 0xED86, 0x97F1, 0xED87, 0x97F2, 0xED88, 0x97F4, 0xED89, 0x97F7, 0xED8A, 0x97F8,
- 0xED8B, 0x97F9, 0xED8C, 0x97FA, 0xED8D, 0x97FB, 0xED8E, 0x97FC, 0xED8F, 0x97FD, 0xED90, 0x97FE, 0xED91, 0x97FF, 0xED92, 0x9800,
- 0xED93, 0x9801, 0xED94, 0x9802, 0xED95, 0x9803, 0xED96, 0x9804, 0xED97, 0x9805, 0xED98, 0x9806, 0xED99, 0x9807, 0xED9A, 0x9808,
- 0xED9B, 0x9809, 0xED9C, 0x980A, 0xED9D, 0x980B, 0xED9E, 0x980C, 0xED9F, 0x980D, 0xEDA0, 0x980E, 0xEDA1, 0x603C, 0xEDA2, 0x605D,
- 0xEDA3, 0x605A, 0xEDA4, 0x6067, 0xEDA5, 0x6041, 0xEDA6, 0x6059, 0xEDA7, 0x6063, 0xEDA8, 0x60AB, 0xEDA9, 0x6106, 0xEDAA, 0x610D,
- 0xEDAB, 0x615D, 0xEDAC, 0x61A9, 0xEDAD, 0x619D, 0xEDAE, 0x61CB, 0xEDAF, 0x61D1, 0xEDB0, 0x6206, 0xEDB1, 0x8080, 0xEDB2, 0x807F,
- 0xEDB3, 0x6C93, 0xEDB4, 0x6CF6, 0xEDB5, 0x6DFC, 0xEDB6, 0x77F6, 0xEDB7, 0x77F8, 0xEDB8, 0x7800, 0xEDB9, 0x7809, 0xEDBA, 0x7817,
- 0xEDBB, 0x7818, 0xEDBC, 0x7811, 0xEDBD, 0x65AB, 0xEDBE, 0x782D, 0xEDBF, 0x781C, 0xEDC0, 0x781D, 0xEDC1, 0x7839, 0xEDC2, 0x783A,
- 0xEDC3, 0x783B, 0xEDC4, 0x781F, 0xEDC5, 0x783C, 0xEDC6, 0x7825, 0xEDC7, 0x782C, 0xEDC8, 0x7823, 0xEDC9, 0x7829, 0xEDCA, 0x784E,
- 0xEDCB, 0x786D, 0xEDCC, 0x7856, 0xEDCD, 0x7857, 0xEDCE, 0x7826, 0xEDCF, 0x7850, 0xEDD0, 0x7847, 0xEDD1, 0x784C, 0xEDD2, 0x786A,
- 0xEDD3, 0x789B, 0xEDD4, 0x7893, 0xEDD5, 0x789A, 0xEDD6, 0x7887, 0xEDD7, 0x789C, 0xEDD8, 0x78A1, 0xEDD9, 0x78A3, 0xEDDA, 0x78B2,
- 0xEDDB, 0x78B9, 0xEDDC, 0x78A5, 0xEDDD, 0x78D4, 0xEDDE, 0x78D9, 0xEDDF, 0x78C9, 0xEDE0, 0x78EC, 0xEDE1, 0x78F2, 0xEDE2, 0x7905,
- 0xEDE3, 0x78F4, 0xEDE4, 0x7913, 0xEDE5, 0x7924, 0xEDE6, 0x791E, 0xEDE7, 0x7934, 0xEDE8, 0x9F9B, 0xEDE9, 0x9EF9, 0xEDEA, 0x9EFB,
- 0xEDEB, 0x9EFC, 0xEDEC, 0x76F1, 0xEDED, 0x7704, 0xEDEE, 0x770D, 0xEDEF, 0x76F9, 0xEDF0, 0x7707, 0xEDF1, 0x7708, 0xEDF2, 0x771A,
- 0xEDF3, 0x7722, 0xEDF4, 0x7719, 0xEDF5, 0x772D, 0xEDF6, 0x7726, 0xEDF7, 0x7735, 0xEDF8, 0x7738, 0xEDF9, 0x7750, 0xEDFA, 0x7751,
- 0xEDFB, 0x7747, 0xEDFC, 0x7743, 0xEDFD, 0x775A, 0xEDFE, 0x7768, 0xEE40, 0x980F, 0xEE41, 0x9810, 0xEE42, 0x9811, 0xEE43, 0x9812,
- 0xEE44, 0x9813, 0xEE45, 0x9814, 0xEE46, 0x9815, 0xEE47, 0x9816, 0xEE48, 0x9817, 0xEE49, 0x9818, 0xEE4A, 0x9819, 0xEE4B, 0x981A,
- 0xEE4C, 0x981B, 0xEE4D, 0x981C, 0xEE4E, 0x981D, 0xEE4F, 0x981E, 0xEE50, 0x981F, 0xEE51, 0x9820, 0xEE52, 0x9821, 0xEE53, 0x9822,
- 0xEE54, 0x9823, 0xEE55, 0x9824, 0xEE56, 0x9825, 0xEE57, 0x9826, 0xEE58, 0x9827, 0xEE59, 0x9828, 0xEE5A, 0x9829, 0xEE5B, 0x982A,
- 0xEE5C, 0x982B, 0xEE5D, 0x982C, 0xEE5E, 0x982D, 0xEE5F, 0x982E, 0xEE60, 0x982F, 0xEE61, 0x9830, 0xEE62, 0x9831, 0xEE63, 0x9832,
- 0xEE64, 0x9833, 0xEE65, 0x9834, 0xEE66, 0x9835, 0xEE67, 0x9836, 0xEE68, 0x9837, 0xEE69, 0x9838, 0xEE6A, 0x9839, 0xEE6B, 0x983A,
- 0xEE6C, 0x983B, 0xEE6D, 0x983C, 0xEE6E, 0x983D, 0xEE6F, 0x983E, 0xEE70, 0x983F, 0xEE71, 0x9840, 0xEE72, 0x9841, 0xEE73, 0x9842,
- 0xEE74, 0x9843, 0xEE75, 0x9844, 0xEE76, 0x9845, 0xEE77, 0x9846, 0xEE78, 0x9847, 0xEE79, 0x9848, 0xEE7A, 0x9849, 0xEE7B, 0x984A,
- 0xEE7C, 0x984B, 0xEE7D, 0x984C, 0xEE7E, 0x984D, 0xEE80, 0x984E, 0xEE81, 0x984F, 0xEE82, 0x9850, 0xEE83, 0x9851, 0xEE84, 0x9852,
- 0xEE85, 0x9853, 0xEE86, 0x9854, 0xEE87, 0x9855, 0xEE88, 0x9856, 0xEE89, 0x9857, 0xEE8A, 0x9858, 0xEE8B, 0x9859, 0xEE8C, 0x985A,
- 0xEE8D, 0x985B, 0xEE8E, 0x985C, 0xEE8F, 0x985D, 0xEE90, 0x985E, 0xEE91, 0x985F, 0xEE92, 0x9860, 0xEE93, 0x9861, 0xEE94, 0x9862,
- 0xEE95, 0x9863, 0xEE96, 0x9864, 0xEE97, 0x9865, 0xEE98, 0x9866, 0xEE99, 0x9867, 0xEE9A, 0x9868, 0xEE9B, 0x9869, 0xEE9C, 0x986A,
- 0xEE9D, 0x986B, 0xEE9E, 0x986C, 0xEE9F, 0x986D, 0xEEA0, 0x986E, 0xEEA1, 0x7762, 0xEEA2, 0x7765, 0xEEA3, 0x777F, 0xEEA4, 0x778D,
- 0xEEA5, 0x777D, 0xEEA6, 0x7780, 0xEEA7, 0x778C, 0xEEA8, 0x7791, 0xEEA9, 0x779F, 0xEEAA, 0x77A0, 0xEEAB, 0x77B0, 0xEEAC, 0x77B5,
- 0xEEAD, 0x77BD, 0xEEAE, 0x753A, 0xEEAF, 0x7540, 0xEEB0, 0x754E, 0xEEB1, 0x754B, 0xEEB2, 0x7548, 0xEEB3, 0x755B, 0xEEB4, 0x7572,
- 0xEEB5, 0x7579, 0xEEB6, 0x7583, 0xEEB7, 0x7F58, 0xEEB8, 0x7F61, 0xEEB9, 0x7F5F, 0xEEBA, 0x8A48, 0xEEBB, 0x7F68, 0xEEBC, 0x7F74,
- 0xEEBD, 0x7F71, 0xEEBE, 0x7F79, 0xEEBF, 0x7F81, 0xEEC0, 0x7F7E, 0xEEC1, 0x76CD, 0xEEC2, 0x76E5, 0xEEC3, 0x8832, 0xEEC4, 0x9485,
- 0xEEC5, 0x9486, 0xEEC6, 0x9487, 0xEEC7, 0x948B, 0xEEC8, 0x948A, 0xEEC9, 0x948C, 0xEECA, 0x948D, 0xEECB, 0x948F, 0xEECC, 0x9490,
- 0xEECD, 0x9494, 0xEECE, 0x9497, 0xEECF, 0x9495, 0xEED0, 0x949A, 0xEED1, 0x949B, 0xEED2, 0x949C, 0xEED3, 0x94A3, 0xEED4, 0x94A4,
- 0xEED5, 0x94AB, 0xEED6, 0x94AA, 0xEED7, 0x94AD, 0xEED8, 0x94AC, 0xEED9, 0x94AF, 0xEEDA, 0x94B0, 0xEEDB, 0x94B2, 0xEEDC, 0x94B4,
- 0xEEDD, 0x94B6, 0xEEDE, 0x94B7, 0xEEDF, 0x94B8, 0xEEE0, 0x94B9, 0xEEE1, 0x94BA, 0xEEE2, 0x94BC, 0xEEE3, 0x94BD, 0xEEE4, 0x94BF,
- 0xEEE5, 0x94C4, 0xEEE6, 0x94C8, 0xEEE7, 0x94C9, 0xEEE8, 0x94CA, 0xEEE9, 0x94CB, 0xEEEA, 0x94CC, 0xEEEB, 0x94CD, 0xEEEC, 0x94CE,
- 0xEEED, 0x94D0, 0xEEEE, 0x94D1, 0xEEEF, 0x94D2, 0xEEF0, 0x94D5, 0xEEF1, 0x94D6, 0xEEF2, 0x94D7, 0xEEF3, 0x94D9, 0xEEF4, 0x94D8,
- 0xEEF5, 0x94DB, 0xEEF6, 0x94DE, 0xEEF7, 0x94DF, 0xEEF8, 0x94E0, 0xEEF9, 0x94E2, 0xEEFA, 0x94E4, 0xEEFB, 0x94E5, 0xEEFC, 0x94E7,
- 0xEEFD, 0x94E8, 0xEEFE, 0x94EA, 0xEF40, 0x986F, 0xEF41, 0x9870, 0xEF42, 0x9871, 0xEF43, 0x9872, 0xEF44, 0x9873, 0xEF45, 0x9874,
- 0xEF46, 0x988B, 0xEF47, 0x988E, 0xEF48, 0x9892, 0xEF49, 0x9895, 0xEF4A, 0x9899, 0xEF4B, 0x98A3, 0xEF4C, 0x98A8, 0xEF4D, 0x98A9,
- 0xEF4E, 0x98AA, 0xEF4F, 0x98AB, 0xEF50, 0x98AC, 0xEF51, 0x98AD, 0xEF52, 0x98AE, 0xEF53, 0x98AF, 0xEF54, 0x98B0, 0xEF55, 0x98B1,
- 0xEF56, 0x98B2, 0xEF57, 0x98B3, 0xEF58, 0x98B4, 0xEF59, 0x98B5, 0xEF5A, 0x98B6, 0xEF5B, 0x98B7, 0xEF5C, 0x98B8, 0xEF5D, 0x98B9,
- 0xEF5E, 0x98BA, 0xEF5F, 0x98BB, 0xEF60, 0x98BC, 0xEF61, 0x98BD, 0xEF62, 0x98BE, 0xEF63, 0x98BF, 0xEF64, 0x98C0, 0xEF65, 0x98C1,
- 0xEF66, 0x98C2, 0xEF67, 0x98C3, 0xEF68, 0x98C4, 0xEF69, 0x98C5, 0xEF6A, 0x98C6, 0xEF6B, 0x98C7, 0xEF6C, 0x98C8, 0xEF6D, 0x98C9,
- 0xEF6E, 0x98CA, 0xEF6F, 0x98CB, 0xEF70, 0x98CC, 0xEF71, 0x98CD, 0xEF72, 0x98CF, 0xEF73, 0x98D0, 0xEF74, 0x98D4, 0xEF75, 0x98D6,
- 0xEF76, 0x98D7, 0xEF77, 0x98DB, 0xEF78, 0x98DC, 0xEF79, 0x98DD, 0xEF7A, 0x98E0, 0xEF7B, 0x98E1, 0xEF7C, 0x98E2, 0xEF7D, 0x98E3,
- 0xEF7E, 0x98E4, 0xEF80, 0x98E5, 0xEF81, 0x98E6, 0xEF82, 0x98E9, 0xEF83, 0x98EA, 0xEF84, 0x98EB, 0xEF85, 0x98EC, 0xEF86, 0x98ED,
- 0xEF87, 0x98EE, 0xEF88, 0x98EF, 0xEF89, 0x98F0, 0xEF8A, 0x98F1, 0xEF8B, 0x98F2, 0xEF8C, 0x98F3, 0xEF8D, 0x98F4, 0xEF8E, 0x98F5,
- 0xEF8F, 0x98F6, 0xEF90, 0x98F7, 0xEF91, 0x98F8, 0xEF92, 0x98F9, 0xEF93, 0x98FA, 0xEF94, 0x98FB, 0xEF95, 0x98FC, 0xEF96, 0x98FD,
- 0xEF97, 0x98FE, 0xEF98, 0x98FF, 0xEF99, 0x9900, 0xEF9A, 0x9901, 0xEF9B, 0x9902, 0xEF9C, 0x9903, 0xEF9D, 0x9904, 0xEF9E, 0x9905,
- 0xEF9F, 0x9906, 0xEFA0, 0x9907, 0xEFA1, 0x94E9, 0xEFA2, 0x94EB, 0xEFA3, 0x94EE, 0xEFA4, 0x94EF, 0xEFA5, 0x94F3, 0xEFA6, 0x94F4,
- 0xEFA7, 0x94F5, 0xEFA8, 0x94F7, 0xEFA9, 0x94F9, 0xEFAA, 0x94FC, 0xEFAB, 0x94FD, 0xEFAC, 0x94FF, 0xEFAD, 0x9503, 0xEFAE, 0x9502,
- 0xEFAF, 0x9506, 0xEFB0, 0x9507, 0xEFB1, 0x9509, 0xEFB2, 0x950A, 0xEFB3, 0x950D, 0xEFB4, 0x950E, 0xEFB5, 0x950F, 0xEFB6, 0x9512,
- 0xEFB7, 0x9513, 0xEFB8, 0x9514, 0xEFB9, 0x9515, 0xEFBA, 0x9516, 0xEFBB, 0x9518, 0xEFBC, 0x951B, 0xEFBD, 0x951D, 0xEFBE, 0x951E,
- 0xEFBF, 0x951F, 0xEFC0, 0x9522, 0xEFC1, 0x952A, 0xEFC2, 0x952B, 0xEFC3, 0x9529, 0xEFC4, 0x952C, 0xEFC5, 0x9531, 0xEFC6, 0x9532,
- 0xEFC7, 0x9534, 0xEFC8, 0x9536, 0xEFC9, 0x9537, 0xEFCA, 0x9538, 0xEFCB, 0x953C, 0xEFCC, 0x953E, 0xEFCD, 0x953F, 0xEFCE, 0x9542,
- 0xEFCF, 0x9535, 0xEFD0, 0x9544, 0xEFD1, 0x9545, 0xEFD2, 0x9546, 0xEFD3, 0x9549, 0xEFD4, 0x954C, 0xEFD5, 0x954E, 0xEFD6, 0x954F,
- 0xEFD7, 0x9552, 0xEFD8, 0x9553, 0xEFD9, 0x9554, 0xEFDA, 0x9556, 0xEFDB, 0x9557, 0xEFDC, 0x9558, 0xEFDD, 0x9559, 0xEFDE, 0x955B,
- 0xEFDF, 0x955E, 0xEFE0, 0x955F, 0xEFE1, 0x955D, 0xEFE2, 0x9561, 0xEFE3, 0x9562, 0xEFE4, 0x9564, 0xEFE5, 0x9565, 0xEFE6, 0x9566,
- 0xEFE7, 0x9567, 0xEFE8, 0x9568, 0xEFE9, 0x9569, 0xEFEA, 0x956A, 0xEFEB, 0x956B, 0xEFEC, 0x956C, 0xEFED, 0x956F, 0xEFEE, 0x9571,
- 0xEFEF, 0x9572, 0xEFF0, 0x9573, 0xEFF1, 0x953A, 0xEFF2, 0x77E7, 0xEFF3, 0x77EC, 0xEFF4, 0x96C9, 0xEFF5, 0x79D5, 0xEFF6, 0x79ED,
- 0xEFF7, 0x79E3, 0xEFF8, 0x79EB, 0xEFF9, 0x7A06, 0xEFFA, 0x5D47, 0xEFFB, 0x7A03, 0xEFFC, 0x7A02, 0xEFFD, 0x7A1E, 0xEFFE, 0x7A14,
- 0xF040, 0x9908, 0xF041, 0x9909, 0xF042, 0x990A, 0xF043, 0x990B, 0xF044, 0x990C, 0xF045, 0x990E, 0xF046, 0x990F, 0xF047, 0x9911,
- 0xF048, 0x9912, 0xF049, 0x9913, 0xF04A, 0x9914, 0xF04B, 0x9915, 0xF04C, 0x9916, 0xF04D, 0x9917, 0xF04E, 0x9918, 0xF04F, 0x9919,
- 0xF050, 0x991A, 0xF051, 0x991B, 0xF052, 0x991C, 0xF053, 0x991D, 0xF054, 0x991E, 0xF055, 0x991F, 0xF056, 0x9920, 0xF057, 0x9921,
- 0xF058, 0x9922, 0xF059, 0x9923, 0xF05A, 0x9924, 0xF05B, 0x9925, 0xF05C, 0x9926, 0xF05D, 0x9927, 0xF05E, 0x9928, 0xF05F, 0x9929,
- 0xF060, 0x992A, 0xF061, 0x992B, 0xF062, 0x992C, 0xF063, 0x992D, 0xF064, 0x992F, 0xF065, 0x9930, 0xF066, 0x9931, 0xF067, 0x9932,
- 0xF068, 0x9933, 0xF069, 0x9934, 0xF06A, 0x9935, 0xF06B, 0x9936, 0xF06C, 0x9937, 0xF06D, 0x9938, 0xF06E, 0x9939, 0xF06F, 0x993A,
- 0xF070, 0x993B, 0xF071, 0x993C, 0xF072, 0x993D, 0xF073, 0x993E, 0xF074, 0x993F, 0xF075, 0x9940, 0xF076, 0x9941, 0xF077, 0x9942,
- 0xF078, 0x9943, 0xF079, 0x9944, 0xF07A, 0x9945, 0xF07B, 0x9946, 0xF07C, 0x9947, 0xF07D, 0x9948, 0xF07E, 0x9949, 0xF080, 0x994A,
- 0xF081, 0x994B, 0xF082, 0x994C, 0xF083, 0x994D, 0xF084, 0x994E, 0xF085, 0x994F, 0xF086, 0x9950, 0xF087, 0x9951, 0xF088, 0x9952,
- 0xF089, 0x9953, 0xF08A, 0x9956, 0xF08B, 0x9957, 0xF08C, 0x9958, 0xF08D, 0x9959, 0xF08E, 0x995A, 0xF08F, 0x995B, 0xF090, 0x995C,
- 0xF091, 0x995D, 0xF092, 0x995E, 0xF093, 0x995F, 0xF094, 0x9960, 0xF095, 0x9961, 0xF096, 0x9962, 0xF097, 0x9964, 0xF098, 0x9966,
- 0xF099, 0x9973, 0xF09A, 0x9978, 0xF09B, 0x9979, 0xF09C, 0x997B, 0xF09D, 0x997E, 0xF09E, 0x9982, 0xF09F, 0x9983, 0xF0A0, 0x9989,
- 0xF0A1, 0x7A39, 0xF0A2, 0x7A37, 0xF0A3, 0x7A51, 0xF0A4, 0x9ECF, 0xF0A5, 0x99A5, 0xF0A6, 0x7A70, 0xF0A7, 0x7688, 0xF0A8, 0x768E,
- 0xF0A9, 0x7693, 0xF0AA, 0x7699, 0xF0AB, 0x76A4, 0xF0AC, 0x74DE, 0xF0AD, 0x74E0, 0xF0AE, 0x752C, 0xF0AF, 0x9E20, 0xF0B0, 0x9E22,
- 0xF0B1, 0x9E28, 0xF0B2, 0x9E29, 0xF0B3, 0x9E2A, 0xF0B4, 0x9E2B, 0xF0B5, 0x9E2C, 0xF0B6, 0x9E32, 0xF0B7, 0x9E31, 0xF0B8, 0x9E36,
- 0xF0B9, 0x9E38, 0xF0BA, 0x9E37, 0xF0BB, 0x9E39, 0xF0BC, 0x9E3A, 0xF0BD, 0x9E3E, 0xF0BE, 0x9E41, 0xF0BF, 0x9E42, 0xF0C0, 0x9E44,
- 0xF0C1, 0x9E46, 0xF0C2, 0x9E47, 0xF0C3, 0x9E48, 0xF0C4, 0x9E49, 0xF0C5, 0x9E4B, 0xF0C6, 0x9E4C, 0xF0C7, 0x9E4E, 0xF0C8, 0x9E51,
- 0xF0C9, 0x9E55, 0xF0CA, 0x9E57, 0xF0CB, 0x9E5A, 0xF0CC, 0x9E5B, 0xF0CD, 0x9E5C, 0xF0CE, 0x9E5E, 0xF0CF, 0x9E63, 0xF0D0, 0x9E66,
- 0xF0D1, 0x9E67, 0xF0D2, 0x9E68, 0xF0D3, 0x9E69, 0xF0D4, 0x9E6A, 0xF0D5, 0x9E6B, 0xF0D6, 0x9E6C, 0xF0D7, 0x9E71, 0xF0D8, 0x9E6D,
- 0xF0D9, 0x9E73, 0xF0DA, 0x7592, 0xF0DB, 0x7594, 0xF0DC, 0x7596, 0xF0DD, 0x75A0, 0xF0DE, 0x759D, 0xF0DF, 0x75AC, 0xF0E0, 0x75A3,
- 0xF0E1, 0x75B3, 0xF0E2, 0x75B4, 0xF0E3, 0x75B8, 0xF0E4, 0x75C4, 0xF0E5, 0x75B1, 0xF0E6, 0x75B0, 0xF0E7, 0x75C3, 0xF0E8, 0x75C2,
- 0xF0E9, 0x75D6, 0xF0EA, 0x75CD, 0xF0EB, 0x75E3, 0xF0EC, 0x75E8, 0xF0ED, 0x75E6, 0xF0EE, 0x75E4, 0xF0EF, 0x75EB, 0xF0F0, 0x75E7,
- 0xF0F1, 0x7603, 0xF0F2, 0x75F1, 0xF0F3, 0x75FC, 0xF0F4, 0x75FF, 0xF0F5, 0x7610, 0xF0F6, 0x7600, 0xF0F7, 0x7605, 0xF0F8, 0x760C,
- 0xF0F9, 0x7617, 0xF0FA, 0x760A, 0xF0FB, 0x7625, 0xF0FC, 0x7618, 0xF0FD, 0x7615, 0xF0FE, 0x7619, 0xF140, 0x998C, 0xF141, 0x998E,
- 0xF142, 0x999A, 0xF143, 0x999B, 0xF144, 0x999C, 0xF145, 0x999D, 0xF146, 0x999E, 0xF147, 0x999F, 0xF148, 0x99A0, 0xF149, 0x99A1,
- 0xF14A, 0x99A2, 0xF14B, 0x99A3, 0xF14C, 0x99A4, 0xF14D, 0x99A6, 0xF14E, 0x99A7, 0xF14F, 0x99A9, 0xF150, 0x99AA, 0xF151, 0x99AB,
- 0xF152, 0x99AC, 0xF153, 0x99AD, 0xF154, 0x99AE, 0xF155, 0x99AF, 0xF156, 0x99B0, 0xF157, 0x99B1, 0xF158, 0x99B2, 0xF159, 0x99B3,
- 0xF15A, 0x99B4, 0xF15B, 0x99B5, 0xF15C, 0x99B6, 0xF15D, 0x99B7, 0xF15E, 0x99B8, 0xF15F, 0x99B9, 0xF160, 0x99BA, 0xF161, 0x99BB,
- 0xF162, 0x99BC, 0xF163, 0x99BD, 0xF164, 0x99BE, 0xF165, 0x99BF, 0xF166, 0x99C0, 0xF167, 0x99C1, 0xF168, 0x99C2, 0xF169, 0x99C3,
- 0xF16A, 0x99C4, 0xF16B, 0x99C5, 0xF16C, 0x99C6, 0xF16D, 0x99C7, 0xF16E, 0x99C8, 0xF16F, 0x99C9, 0xF170, 0x99CA, 0xF171, 0x99CB,
- 0xF172, 0x99CC, 0xF173, 0x99CD, 0xF174, 0x99CE, 0xF175, 0x99CF, 0xF176, 0x99D0, 0xF177, 0x99D1, 0xF178, 0x99D2, 0xF179, 0x99D3,
- 0xF17A, 0x99D4, 0xF17B, 0x99D5, 0xF17C, 0x99D6, 0xF17D, 0x99D7, 0xF17E, 0x99D8, 0xF180, 0x99D9, 0xF181, 0x99DA, 0xF182, 0x99DB,
- 0xF183, 0x99DC, 0xF184, 0x99DD, 0xF185, 0x99DE, 0xF186, 0x99DF, 0xF187, 0x99E0, 0xF188, 0x99E1, 0xF189, 0x99E2, 0xF18A, 0x99E3,
- 0xF18B, 0x99E4, 0xF18C, 0x99E5, 0xF18D, 0x99E6, 0xF18E, 0x99E7, 0xF18F, 0x99E8, 0xF190, 0x99E9, 0xF191, 0x99EA, 0xF192, 0x99EB,
- 0xF193, 0x99EC, 0xF194, 0x99ED, 0xF195, 0x99EE, 0xF196, 0x99EF, 0xF197, 0x99F0, 0xF198, 0x99F1, 0xF199, 0x99F2, 0xF19A, 0x99F3,
- 0xF19B, 0x99F4, 0xF19C, 0x99F5, 0xF19D, 0x99F6, 0xF19E, 0x99F7, 0xF19F, 0x99F8, 0xF1A0, 0x99F9, 0xF1A1, 0x761B, 0xF1A2, 0x763C,
- 0xF1A3, 0x7622, 0xF1A4, 0x7620, 0xF1A5, 0x7640, 0xF1A6, 0x762D, 0xF1A7, 0x7630, 0xF1A8, 0x763F, 0xF1A9, 0x7635, 0xF1AA, 0x7643,
- 0xF1AB, 0x763E, 0xF1AC, 0x7633, 0xF1AD, 0x764D, 0xF1AE, 0x765E, 0xF1AF, 0x7654, 0xF1B0, 0x765C, 0xF1B1, 0x7656, 0xF1B2, 0x766B,
- 0xF1B3, 0x766F, 0xF1B4, 0x7FCA, 0xF1B5, 0x7AE6, 0xF1B6, 0x7A78, 0xF1B7, 0x7A79, 0xF1B8, 0x7A80, 0xF1B9, 0x7A86, 0xF1BA, 0x7A88,
- 0xF1BB, 0x7A95, 0xF1BC, 0x7AA6, 0xF1BD, 0x7AA0, 0xF1BE, 0x7AAC, 0xF1BF, 0x7AA8, 0xF1C0, 0x7AAD, 0xF1C1, 0x7AB3, 0xF1C2, 0x8864,
- 0xF1C3, 0x8869, 0xF1C4, 0x8872, 0xF1C5, 0x887D, 0xF1C6, 0x887F, 0xF1C7, 0x8882, 0xF1C8, 0x88A2, 0xF1C9, 0x88C6, 0xF1CA, 0x88B7,
- 0xF1CB, 0x88BC, 0xF1CC, 0x88C9, 0xF1CD, 0x88E2, 0xF1CE, 0x88CE, 0xF1CF, 0x88E3, 0xF1D0, 0x88E5, 0xF1D1, 0x88F1, 0xF1D2, 0x891A,
- 0xF1D3, 0x88FC, 0xF1D4, 0x88E8, 0xF1D5, 0x88FE, 0xF1D6, 0x88F0, 0xF1D7, 0x8921, 0xF1D8, 0x8919, 0xF1D9, 0x8913, 0xF1DA, 0x891B,
- 0xF1DB, 0x890A, 0xF1DC, 0x8934, 0xF1DD, 0x892B, 0xF1DE, 0x8936, 0xF1DF, 0x8941, 0xF1E0, 0x8966, 0xF1E1, 0x897B, 0xF1E2, 0x758B,
- 0xF1E3, 0x80E5, 0xF1E4, 0x76B2, 0xF1E5, 0x76B4, 0xF1E6, 0x77DC, 0xF1E7, 0x8012, 0xF1E8, 0x8014, 0xF1E9, 0x8016, 0xF1EA, 0x801C,
- 0xF1EB, 0x8020, 0xF1EC, 0x8022, 0xF1ED, 0x8025, 0xF1EE, 0x8026, 0xF1EF, 0x8027, 0xF1F0, 0x8029, 0xF1F1, 0x8028, 0xF1F2, 0x8031,
- 0xF1F3, 0x800B, 0xF1F4, 0x8035, 0xF1F5, 0x8043, 0xF1F6, 0x8046, 0xF1F7, 0x804D, 0xF1F8, 0x8052, 0xF1F9, 0x8069, 0xF1FA, 0x8071,
- 0xF1FB, 0x8983, 0xF1FC, 0x9878, 0xF1FD, 0x9880, 0xF1FE, 0x9883, 0xF240, 0x99FA, 0xF241, 0x99FB, 0xF242, 0x99FC, 0xF243, 0x99FD,
- 0xF244, 0x99FE, 0xF245, 0x99FF, 0xF246, 0x9A00, 0xF247, 0x9A01, 0xF248, 0x9A02, 0xF249, 0x9A03, 0xF24A, 0x9A04, 0xF24B, 0x9A05,
- 0xF24C, 0x9A06, 0xF24D, 0x9A07, 0xF24E, 0x9A08, 0xF24F, 0x9A09, 0xF250, 0x9A0A, 0xF251, 0x9A0B, 0xF252, 0x9A0C, 0xF253, 0x9A0D,
- 0xF254, 0x9A0E, 0xF255, 0x9A0F, 0xF256, 0x9A10, 0xF257, 0x9A11, 0xF258, 0x9A12, 0xF259, 0x9A13, 0xF25A, 0x9A14, 0xF25B, 0x9A15,
- 0xF25C, 0x9A16, 0xF25D, 0x9A17, 0xF25E, 0x9A18, 0xF25F, 0x9A19, 0xF260, 0x9A1A, 0xF261, 0x9A1B, 0xF262, 0x9A1C, 0xF263, 0x9A1D,
- 0xF264, 0x9A1E, 0xF265, 0x9A1F, 0xF266, 0x9A20, 0xF267, 0x9A21, 0xF268, 0x9A22, 0xF269, 0x9A23, 0xF26A, 0x9A24, 0xF26B, 0x9A25,
- 0xF26C, 0x9A26, 0xF26D, 0x9A27, 0xF26E, 0x9A28, 0xF26F, 0x9A29, 0xF270, 0x9A2A, 0xF271, 0x9A2B, 0xF272, 0x9A2C, 0xF273, 0x9A2D,
- 0xF274, 0x9A2E, 0xF275, 0x9A2F, 0xF276, 0x9A30, 0xF277, 0x9A31, 0xF278, 0x9A32, 0xF279, 0x9A33, 0xF27A, 0x9A34, 0xF27B, 0x9A35,
- 0xF27C, 0x9A36, 0xF27D, 0x9A37, 0xF27E, 0x9A38, 0xF280, 0x9A39, 0xF281, 0x9A3A, 0xF282, 0x9A3B, 0xF283, 0x9A3C, 0xF284, 0x9A3D,
- 0xF285, 0x9A3E, 0xF286, 0x9A3F, 0xF287, 0x9A40, 0xF288, 0x9A41, 0xF289, 0x9A42, 0xF28A, 0x9A43, 0xF28B, 0x9A44, 0xF28C, 0x9A45,
- 0xF28D, 0x9A46, 0xF28E, 0x9A47, 0xF28F, 0x9A48, 0xF290, 0x9A49, 0xF291, 0x9A4A, 0xF292, 0x9A4B, 0xF293, 0x9A4C, 0xF294, 0x9A4D,
- 0xF295, 0x9A4E, 0xF296, 0x9A4F, 0xF297, 0x9A50, 0xF298, 0x9A51, 0xF299, 0x9A52, 0xF29A, 0x9A53, 0xF29B, 0x9A54, 0xF29C, 0x9A55,
- 0xF29D, 0x9A56, 0xF29E, 0x9A57, 0xF29F, 0x9A58, 0xF2A0, 0x9A59, 0xF2A1, 0x9889, 0xF2A2, 0x988C, 0xF2A3, 0x988D, 0xF2A4, 0x988F,
- 0xF2A5, 0x9894, 0xF2A6, 0x989A, 0xF2A7, 0x989B, 0xF2A8, 0x989E, 0xF2A9, 0x989F, 0xF2AA, 0x98A1, 0xF2AB, 0x98A2, 0xF2AC, 0x98A5,
- 0xF2AD, 0x98A6, 0xF2AE, 0x864D, 0xF2AF, 0x8654, 0xF2B0, 0x866C, 0xF2B1, 0x866E, 0xF2B2, 0x867F, 0xF2B3, 0x867A, 0xF2B4, 0x867C,
- 0xF2B5, 0x867B, 0xF2B6, 0x86A8, 0xF2B7, 0x868D, 0xF2B8, 0x868B, 0xF2B9, 0x86AC, 0xF2BA, 0x869D, 0xF2BB, 0x86A7, 0xF2BC, 0x86A3,
- 0xF2BD, 0x86AA, 0xF2BE, 0x8693, 0xF2BF, 0x86A9, 0xF2C0, 0x86B6, 0xF2C1, 0x86C4, 0xF2C2, 0x86B5, 0xF2C3, 0x86CE, 0xF2C4, 0x86B0,
- 0xF2C5, 0x86BA, 0xF2C6, 0x86B1, 0xF2C7, 0x86AF, 0xF2C8, 0x86C9, 0xF2C9, 0x86CF, 0xF2CA, 0x86B4, 0xF2CB, 0x86E9, 0xF2CC, 0x86F1,
- 0xF2CD, 0x86F2, 0xF2CE, 0x86ED, 0xF2CF, 0x86F3, 0xF2D0, 0x86D0, 0xF2D1, 0x8713, 0xF2D2, 0x86DE, 0xF2D3, 0x86F4, 0xF2D4, 0x86DF,
- 0xF2D5, 0x86D8, 0xF2D6, 0x86D1, 0xF2D7, 0x8703, 0xF2D8, 0x8707, 0xF2D9, 0x86F8, 0xF2DA, 0x8708, 0xF2DB, 0x870A, 0xF2DC, 0x870D,
- 0xF2DD, 0x8709, 0xF2DE, 0x8723, 0xF2DF, 0x873B, 0xF2E0, 0x871E, 0xF2E1, 0x8725, 0xF2E2, 0x872E, 0xF2E3, 0x871A, 0xF2E4, 0x873E,
- 0xF2E5, 0x8748, 0xF2E6, 0x8734, 0xF2E7, 0x8731, 0xF2E8, 0x8729, 0xF2E9, 0x8737, 0xF2EA, 0x873F, 0xF2EB, 0x8782, 0xF2EC, 0x8722,
- 0xF2ED, 0x877D, 0xF2EE, 0x877E, 0xF2EF, 0x877B, 0xF2F0, 0x8760, 0xF2F1, 0x8770, 0xF2F2, 0x874C, 0xF2F3, 0x876E, 0xF2F4, 0x878B,
- 0xF2F5, 0x8753, 0xF2F6, 0x8763, 0xF2F7, 0x877C, 0xF2F8, 0x8764, 0xF2F9, 0x8759, 0xF2FA, 0x8765, 0xF2FB, 0x8793, 0xF2FC, 0x87AF,
- 0xF2FD, 0x87A8, 0xF2FE, 0x87D2, 0xF340, 0x9A5A, 0xF341, 0x9A5B, 0xF342, 0x9A5C, 0xF343, 0x9A5D, 0xF344, 0x9A5E, 0xF345, 0x9A5F,
- 0xF346, 0x9A60, 0xF347, 0x9A61, 0xF348, 0x9A62, 0xF349, 0x9A63, 0xF34A, 0x9A64, 0xF34B, 0x9A65, 0xF34C, 0x9A66, 0xF34D, 0x9A67,
- 0xF34E, 0x9A68, 0xF34F, 0x9A69, 0xF350, 0x9A6A, 0xF351, 0x9A6B, 0xF352, 0x9A72, 0xF353, 0x9A83, 0xF354, 0x9A89, 0xF355, 0x9A8D,
- 0xF356, 0x9A8E, 0xF357, 0x9A94, 0xF358, 0x9A95, 0xF359, 0x9A99, 0xF35A, 0x9AA6, 0xF35B, 0x9AA9, 0xF35C, 0x9AAA, 0xF35D, 0x9AAB,
- 0xF35E, 0x9AAC, 0xF35F, 0x9AAD, 0xF360, 0x9AAE, 0xF361, 0x9AAF, 0xF362, 0x9AB2, 0xF363, 0x9AB3, 0xF364, 0x9AB4, 0xF365, 0x9AB5,
- 0xF366, 0x9AB9, 0xF367, 0x9ABB, 0xF368, 0x9ABD, 0xF369, 0x9ABE, 0xF36A, 0x9ABF, 0xF36B, 0x9AC3, 0xF36C, 0x9AC4, 0xF36D, 0x9AC6,
- 0xF36E, 0x9AC7, 0xF36F, 0x9AC8, 0xF370, 0x9AC9, 0xF371, 0x9ACA, 0xF372, 0x9ACD, 0xF373, 0x9ACE, 0xF374, 0x9ACF, 0xF375, 0x9AD0,
- 0xF376, 0x9AD2, 0xF377, 0x9AD4, 0xF378, 0x9AD5, 0xF379, 0x9AD6, 0xF37A, 0x9AD7, 0xF37B, 0x9AD9, 0xF37C, 0x9ADA, 0xF37D, 0x9ADB,
- 0xF37E, 0x9ADC, 0xF380, 0x9ADD, 0xF381, 0x9ADE, 0xF382, 0x9AE0, 0xF383, 0x9AE2, 0xF384, 0x9AE3, 0xF385, 0x9AE4, 0xF386, 0x9AE5,
- 0xF387, 0x9AE7, 0xF388, 0x9AE8, 0xF389, 0x9AE9, 0xF38A, 0x9AEA, 0xF38B, 0x9AEC, 0xF38C, 0x9AEE, 0xF38D, 0x9AF0, 0xF38E, 0x9AF1,
- 0xF38F, 0x9AF2, 0xF390, 0x9AF3, 0xF391, 0x9AF4, 0xF392, 0x9AF5, 0xF393, 0x9AF6, 0xF394, 0x9AF7, 0xF395, 0x9AF8, 0xF396, 0x9AFA,
- 0xF397, 0x9AFC, 0xF398, 0x9AFD, 0xF399, 0x9AFE, 0xF39A, 0x9AFF, 0xF39B, 0x9B00, 0xF39C, 0x9B01, 0xF39D, 0x9B02, 0xF39E, 0x9B04,
- 0xF39F, 0x9B05, 0xF3A0, 0x9B06, 0xF3A1, 0x87C6, 0xF3A2, 0x8788, 0xF3A3, 0x8785, 0xF3A4, 0x87AD, 0xF3A5, 0x8797, 0xF3A6, 0x8783,
- 0xF3A7, 0x87AB, 0xF3A8, 0x87E5, 0xF3A9, 0x87AC, 0xF3AA, 0x87B5, 0xF3AB, 0x87B3, 0xF3AC, 0x87CB, 0xF3AD, 0x87D3, 0xF3AE, 0x87BD,
- 0xF3AF, 0x87D1, 0xF3B0, 0x87C0, 0xF3B1, 0x87CA, 0xF3B2, 0x87DB, 0xF3B3, 0x87EA, 0xF3B4, 0x87E0, 0xF3B5, 0x87EE, 0xF3B6, 0x8816,
- 0xF3B7, 0x8813, 0xF3B8, 0x87FE, 0xF3B9, 0x880A, 0xF3BA, 0x881B, 0xF3BB, 0x8821, 0xF3BC, 0x8839, 0xF3BD, 0x883C, 0xF3BE, 0x7F36,
- 0xF3BF, 0x7F42, 0xF3C0, 0x7F44, 0xF3C1, 0x7F45, 0xF3C2, 0x8210, 0xF3C3, 0x7AFA, 0xF3C4, 0x7AFD, 0xF3C5, 0x7B08, 0xF3C6, 0x7B03,
- 0xF3C7, 0x7B04, 0xF3C8, 0x7B15, 0xF3C9, 0x7B0A, 0xF3CA, 0x7B2B, 0xF3CB, 0x7B0F, 0xF3CC, 0x7B47, 0xF3CD, 0x7B38, 0xF3CE, 0x7B2A,
- 0xF3CF, 0x7B19, 0xF3D0, 0x7B2E, 0xF3D1, 0x7B31, 0xF3D2, 0x7B20, 0xF3D3, 0x7B25, 0xF3D4, 0x7B24, 0xF3D5, 0x7B33, 0xF3D6, 0x7B3E,
- 0xF3D7, 0x7B1E, 0xF3D8, 0x7B58, 0xF3D9, 0x7B5A, 0xF3DA, 0x7B45, 0xF3DB, 0x7B75, 0xF3DC, 0x7B4C, 0xF3DD, 0x7B5D, 0xF3DE, 0x7B60,
- 0xF3DF, 0x7B6E, 0xF3E0, 0x7B7B, 0xF3E1, 0x7B62, 0xF3E2, 0x7B72, 0xF3E3, 0x7B71, 0xF3E4, 0x7B90, 0xF3E5, 0x7BA6, 0xF3E6, 0x7BA7,
- 0xF3E7, 0x7BB8, 0xF3E8, 0x7BAC, 0xF3E9, 0x7B9D, 0xF3EA, 0x7BA8, 0xF3EB, 0x7B85, 0xF3EC, 0x7BAA, 0xF3ED, 0x7B9C, 0xF3EE, 0x7BA2,
- 0xF3EF, 0x7BAB, 0xF3F0, 0x7BB4, 0xF3F1, 0x7BD1, 0xF3F2, 0x7BC1, 0xF3F3, 0x7BCC, 0xF3F4, 0x7BDD, 0xF3F5, 0x7BDA, 0xF3F6, 0x7BE5,
- 0xF3F7, 0x7BE6, 0xF3F8, 0x7BEA, 0xF3F9, 0x7C0C, 0xF3FA, 0x7BFE, 0xF3FB, 0x7BFC, 0xF3FC, 0x7C0F, 0xF3FD, 0x7C16, 0xF3FE, 0x7C0B,
- 0xF440, 0x9B07, 0xF441, 0x9B09, 0xF442, 0x9B0A, 0xF443, 0x9B0B, 0xF444, 0x9B0C, 0xF445, 0x9B0D, 0xF446, 0x9B0E, 0xF447, 0x9B10,
- 0xF448, 0x9B11, 0xF449, 0x9B12, 0xF44A, 0x9B14, 0xF44B, 0x9B15, 0xF44C, 0x9B16, 0xF44D, 0x9B17, 0xF44E, 0x9B18, 0xF44F, 0x9B19,
- 0xF450, 0x9B1A, 0xF451, 0x9B1B, 0xF452, 0x9B1C, 0xF453, 0x9B1D, 0xF454, 0x9B1E, 0xF455, 0x9B20, 0xF456, 0x9B21, 0xF457, 0x9B22,
- 0xF458, 0x9B24, 0xF459, 0x9B25, 0xF45A, 0x9B26, 0xF45B, 0x9B27, 0xF45C, 0x9B28, 0xF45D, 0x9B29, 0xF45E, 0x9B2A, 0xF45F, 0x9B2B,
- 0xF460, 0x9B2C, 0xF461, 0x9B2D, 0xF462, 0x9B2E, 0xF463, 0x9B30, 0xF464, 0x9B31, 0xF465, 0x9B33, 0xF466, 0x9B34, 0xF467, 0x9B35,
- 0xF468, 0x9B36, 0xF469, 0x9B37, 0xF46A, 0x9B38, 0xF46B, 0x9B39, 0xF46C, 0x9B3A, 0xF46D, 0x9B3D, 0xF46E, 0x9B3E, 0xF46F, 0x9B3F,
- 0xF470, 0x9B40, 0xF471, 0x9B46, 0xF472, 0x9B4A, 0xF473, 0x9B4B, 0xF474, 0x9B4C, 0xF475, 0x9B4E, 0xF476, 0x9B50, 0xF477, 0x9B52,
- 0xF478, 0x9B53, 0xF479, 0x9B55, 0xF47A, 0x9B56, 0xF47B, 0x9B57, 0xF47C, 0x9B58, 0xF47D, 0x9B59, 0xF47E, 0x9B5A, 0xF480, 0x9B5B,
- 0xF481, 0x9B5C, 0xF482, 0x9B5D, 0xF483, 0x9B5E, 0xF484, 0x9B5F, 0xF485, 0x9B60, 0xF486, 0x9B61, 0xF487, 0x9B62, 0xF488, 0x9B63,
- 0xF489, 0x9B64, 0xF48A, 0x9B65, 0xF48B, 0x9B66, 0xF48C, 0x9B67, 0xF48D, 0x9B68, 0xF48E, 0x9B69, 0xF48F, 0x9B6A, 0xF490, 0x9B6B,
- 0xF491, 0x9B6C, 0xF492, 0x9B6D, 0xF493, 0x9B6E, 0xF494, 0x9B6F, 0xF495, 0x9B70, 0xF496, 0x9B71, 0xF497, 0x9B72, 0xF498, 0x9B73,
- 0xF499, 0x9B74, 0xF49A, 0x9B75, 0xF49B, 0x9B76, 0xF49C, 0x9B77, 0xF49D, 0x9B78, 0xF49E, 0x9B79, 0xF49F, 0x9B7A, 0xF4A0, 0x9B7B,
- 0xF4A1, 0x7C1F, 0xF4A2, 0x7C2A, 0xF4A3, 0x7C26, 0xF4A4, 0x7C38, 0xF4A5, 0x7C41, 0xF4A6, 0x7C40, 0xF4A7, 0x81FE, 0xF4A8, 0x8201,
- 0xF4A9, 0x8202, 0xF4AA, 0x8204, 0xF4AB, 0x81EC, 0xF4AC, 0x8844, 0xF4AD, 0x8221, 0xF4AE, 0x8222, 0xF4AF, 0x8223, 0xF4B0, 0x822D,
- 0xF4B1, 0x822F, 0xF4B2, 0x8228, 0xF4B3, 0x822B, 0xF4B4, 0x8238, 0xF4B5, 0x823B, 0xF4B6, 0x8233, 0xF4B7, 0x8234, 0xF4B8, 0x823E,
- 0xF4B9, 0x8244, 0xF4BA, 0x8249, 0xF4BB, 0x824B, 0xF4BC, 0x824F, 0xF4BD, 0x825A, 0xF4BE, 0x825F, 0xF4BF, 0x8268, 0xF4C0, 0x887E,
- 0xF4C1, 0x8885, 0xF4C2, 0x8888, 0xF4C3, 0x88D8, 0xF4C4, 0x88DF, 0xF4C5, 0x895E, 0xF4C6, 0x7F9D, 0xF4C7, 0x7F9F, 0xF4C8, 0x7FA7,
- 0xF4C9, 0x7FAF, 0xF4CA, 0x7FB0, 0xF4CB, 0x7FB2, 0xF4CC, 0x7C7C, 0xF4CD, 0x6549, 0xF4CE, 0x7C91, 0xF4CF, 0x7C9D, 0xF4D0, 0x7C9C,
- 0xF4D1, 0x7C9E, 0xF4D2, 0x7CA2, 0xF4D3, 0x7CB2, 0xF4D4, 0x7CBC, 0xF4D5, 0x7CBD, 0xF4D6, 0x7CC1, 0xF4D7, 0x7CC7, 0xF4D8, 0x7CCC,
- 0xF4D9, 0x7CCD, 0xF4DA, 0x7CC8, 0xF4DB, 0x7CC5, 0xF4DC, 0x7CD7, 0xF4DD, 0x7CE8, 0xF4DE, 0x826E, 0xF4DF, 0x66A8, 0xF4E0, 0x7FBF,
- 0xF4E1, 0x7FCE, 0xF4E2, 0x7FD5, 0xF4E3, 0x7FE5, 0xF4E4, 0x7FE1, 0xF4E5, 0x7FE6, 0xF4E6, 0x7FE9, 0xF4E7, 0x7FEE, 0xF4E8, 0x7FF3,
- 0xF4E9, 0x7CF8, 0xF4EA, 0x7D77, 0xF4EB, 0x7DA6, 0xF4EC, 0x7DAE, 0xF4ED, 0x7E47, 0xF4EE, 0x7E9B, 0xF4EF, 0x9EB8, 0xF4F0, 0x9EB4,
- 0xF4F1, 0x8D73, 0xF4F2, 0x8D84, 0xF4F3, 0x8D94, 0xF4F4, 0x8D91, 0xF4F5, 0x8DB1, 0xF4F6, 0x8D67, 0xF4F7, 0x8D6D, 0xF4F8, 0x8C47,
- 0xF4F9, 0x8C49, 0xF4FA, 0x914A, 0xF4FB, 0x9150, 0xF4FC, 0x914E, 0xF4FD, 0x914F, 0xF4FE, 0x9164, 0xF540, 0x9B7C, 0xF541, 0x9B7D,
- 0xF542, 0x9B7E, 0xF543, 0x9B7F, 0xF544, 0x9B80, 0xF545, 0x9B81, 0xF546, 0x9B82, 0xF547, 0x9B83, 0xF548, 0x9B84, 0xF549, 0x9B85,
- 0xF54A, 0x9B86, 0xF54B, 0x9B87, 0xF54C, 0x9B88, 0xF54D, 0x9B89, 0xF54E, 0x9B8A, 0xF54F, 0x9B8B, 0xF550, 0x9B8C, 0xF551, 0x9B8D,
- 0xF552, 0x9B8E, 0xF553, 0x9B8F, 0xF554, 0x9B90, 0xF555, 0x9B91, 0xF556, 0x9B92, 0xF557, 0x9B93, 0xF558, 0x9B94, 0xF559, 0x9B95,
- 0xF55A, 0x9B96, 0xF55B, 0x9B97, 0xF55C, 0x9B98, 0xF55D, 0x9B99, 0xF55E, 0x9B9A, 0xF55F, 0x9B9B, 0xF560, 0x9B9C, 0xF561, 0x9B9D,
- 0xF562, 0x9B9E, 0xF563, 0x9B9F, 0xF564, 0x9BA0, 0xF565, 0x9BA1, 0xF566, 0x9BA2, 0xF567, 0x9BA3, 0xF568, 0x9BA4, 0xF569, 0x9BA5,
- 0xF56A, 0x9BA6, 0xF56B, 0x9BA7, 0xF56C, 0x9BA8, 0xF56D, 0x9BA9, 0xF56E, 0x9BAA, 0xF56F, 0x9BAB, 0xF570, 0x9BAC, 0xF571, 0x9BAD,
- 0xF572, 0x9BAE, 0xF573, 0x9BAF, 0xF574, 0x9BB0, 0xF575, 0x9BB1, 0xF576, 0x9BB2, 0xF577, 0x9BB3, 0xF578, 0x9BB4, 0xF579, 0x9BB5,
- 0xF57A, 0x9BB6, 0xF57B, 0x9BB7, 0xF57C, 0x9BB8, 0xF57D, 0x9BB9, 0xF57E, 0x9BBA, 0xF580, 0x9BBB, 0xF581, 0x9BBC, 0xF582, 0x9BBD,
- 0xF583, 0x9BBE, 0xF584, 0x9BBF, 0xF585, 0x9BC0, 0xF586, 0x9BC1, 0xF587, 0x9BC2, 0xF588, 0x9BC3, 0xF589, 0x9BC4, 0xF58A, 0x9BC5,
- 0xF58B, 0x9BC6, 0xF58C, 0x9BC7, 0xF58D, 0x9BC8, 0xF58E, 0x9BC9, 0xF58F, 0x9BCA, 0xF590, 0x9BCB, 0xF591, 0x9BCC, 0xF592, 0x9BCD,
- 0xF593, 0x9BCE, 0xF594, 0x9BCF, 0xF595, 0x9BD0, 0xF596, 0x9BD1, 0xF597, 0x9BD2, 0xF598, 0x9BD3, 0xF599, 0x9BD4, 0xF59A, 0x9BD5,
- 0xF59B, 0x9BD6, 0xF59C, 0x9BD7, 0xF59D, 0x9BD8, 0xF59E, 0x9BD9, 0xF59F, 0x9BDA, 0xF5A0, 0x9BDB, 0xF5A1, 0x9162, 0xF5A2, 0x9161,
- 0xF5A3, 0x9170, 0xF5A4, 0x9169, 0xF5A5, 0x916F, 0xF5A6, 0x917D, 0xF5A7, 0x917E, 0xF5A8, 0x9172, 0xF5A9, 0x9174, 0xF5AA, 0x9179,
- 0xF5AB, 0x918C, 0xF5AC, 0x9185, 0xF5AD, 0x9190, 0xF5AE, 0x918D, 0xF5AF, 0x9191, 0xF5B0, 0x91A2, 0xF5B1, 0x91A3, 0xF5B2, 0x91AA,
- 0xF5B3, 0x91AD, 0xF5B4, 0x91AE, 0xF5B5, 0x91AF, 0xF5B6, 0x91B5, 0xF5B7, 0x91B4, 0xF5B8, 0x91BA, 0xF5B9, 0x8C55, 0xF5BA, 0x9E7E,
- 0xF5BB, 0x8DB8, 0xF5BC, 0x8DEB, 0xF5BD, 0x8E05, 0xF5BE, 0x8E59, 0xF5BF, 0x8E69, 0xF5C0, 0x8DB5, 0xF5C1, 0x8DBF, 0xF5C2, 0x8DBC,
- 0xF5C3, 0x8DBA, 0xF5C4, 0x8DC4, 0xF5C5, 0x8DD6, 0xF5C6, 0x8DD7, 0xF5C7, 0x8DDA, 0xF5C8, 0x8DDE, 0xF5C9, 0x8DCE, 0xF5CA, 0x8DCF,
- 0xF5CB, 0x8DDB, 0xF5CC, 0x8DC6, 0xF5CD, 0x8DEC, 0xF5CE, 0x8DF7, 0xF5CF, 0x8DF8, 0xF5D0, 0x8DE3, 0xF5D1, 0x8DF9, 0xF5D2, 0x8DFB,
- 0xF5D3, 0x8DE4, 0xF5D4, 0x8E09, 0xF5D5, 0x8DFD, 0xF5D6, 0x8E14, 0xF5D7, 0x8E1D, 0xF5D8, 0x8E1F, 0xF5D9, 0x8E2C, 0xF5DA, 0x8E2E,
- 0xF5DB, 0x8E23, 0xF5DC, 0x8E2F, 0xF5DD, 0x8E3A, 0xF5DE, 0x8E40, 0xF5DF, 0x8E39, 0xF5E0, 0x8E35, 0xF5E1, 0x8E3D, 0xF5E2, 0x8E31,
- 0xF5E3, 0x8E49, 0xF5E4, 0x8E41, 0xF5E5, 0x8E42, 0xF5E6, 0x8E51, 0xF5E7, 0x8E52, 0xF5E8, 0x8E4A, 0xF5E9, 0x8E70, 0xF5EA, 0x8E76,
- 0xF5EB, 0x8E7C, 0xF5EC, 0x8E6F, 0xF5ED, 0x8E74, 0xF5EE, 0x8E85, 0xF5EF, 0x8E8F, 0xF5F0, 0x8E94, 0xF5F1, 0x8E90, 0xF5F2, 0x8E9C,
- 0xF5F3, 0x8E9E, 0xF5F4, 0x8C78, 0xF5F5, 0x8C82, 0xF5F6, 0x8C8A, 0xF5F7, 0x8C85, 0xF5F8, 0x8C98, 0xF5F9, 0x8C94, 0xF5FA, 0x659B,
- 0xF5FB, 0x89D6, 0xF5FC, 0x89DE, 0xF5FD, 0x89DA, 0xF5FE, 0x89DC, 0xF640, 0x9BDC, 0xF641, 0x9BDD, 0xF642, 0x9BDE, 0xF643, 0x9BDF,
- 0xF644, 0x9BE0, 0xF645, 0x9BE1, 0xF646, 0x9BE2, 0xF647, 0x9BE3, 0xF648, 0x9BE4, 0xF649, 0x9BE5, 0xF64A, 0x9BE6, 0xF64B, 0x9BE7,
- 0xF64C, 0x9BE8, 0xF64D, 0x9BE9, 0xF64E, 0x9BEA, 0xF64F, 0x9BEB, 0xF650, 0x9BEC, 0xF651, 0x9BED, 0xF652, 0x9BEE, 0xF653, 0x9BEF,
- 0xF654, 0x9BF0, 0xF655, 0x9BF1, 0xF656, 0x9BF2, 0xF657, 0x9BF3, 0xF658, 0x9BF4, 0xF659, 0x9BF5, 0xF65A, 0x9BF6, 0xF65B, 0x9BF7,
- 0xF65C, 0x9BF8, 0xF65D, 0x9BF9, 0xF65E, 0x9BFA, 0xF65F, 0x9BFB, 0xF660, 0x9BFC, 0xF661, 0x9BFD, 0xF662, 0x9BFE, 0xF663, 0x9BFF,
- 0xF664, 0x9C00, 0xF665, 0x9C01, 0xF666, 0x9C02, 0xF667, 0x9C03, 0xF668, 0x9C04, 0xF669, 0x9C05, 0xF66A, 0x9C06, 0xF66B, 0x9C07,
- 0xF66C, 0x9C08, 0xF66D, 0x9C09, 0xF66E, 0x9C0A, 0xF66F, 0x9C0B, 0xF670, 0x9C0C, 0xF671, 0x9C0D, 0xF672, 0x9C0E, 0xF673, 0x9C0F,
- 0xF674, 0x9C10, 0xF675, 0x9C11, 0xF676, 0x9C12, 0xF677, 0x9C13, 0xF678, 0x9C14, 0xF679, 0x9C15, 0xF67A, 0x9C16, 0xF67B, 0x9C17,
- 0xF67C, 0x9C18, 0xF67D, 0x9C19, 0xF67E, 0x9C1A, 0xF680, 0x9C1B, 0xF681, 0x9C1C, 0xF682, 0x9C1D, 0xF683, 0x9C1E, 0xF684, 0x9C1F,
- 0xF685, 0x9C20, 0xF686, 0x9C21, 0xF687, 0x9C22, 0xF688, 0x9C23, 0xF689, 0x9C24, 0xF68A, 0x9C25, 0xF68B, 0x9C26, 0xF68C, 0x9C27,
- 0xF68D, 0x9C28, 0xF68E, 0x9C29, 0xF68F, 0x9C2A, 0xF690, 0x9C2B, 0xF691, 0x9C2C, 0xF692, 0x9C2D, 0xF693, 0x9C2E, 0xF694, 0x9C2F,
- 0xF695, 0x9C30, 0xF696, 0x9C31, 0xF697, 0x9C32, 0xF698, 0x9C33, 0xF699, 0x9C34, 0xF69A, 0x9C35, 0xF69B, 0x9C36, 0xF69C, 0x9C37,
- 0xF69D, 0x9C38, 0xF69E, 0x9C39, 0xF69F, 0x9C3A, 0xF6A0, 0x9C3B, 0xF6A1, 0x89E5, 0xF6A2, 0x89EB, 0xF6A3, 0x89EF, 0xF6A4, 0x8A3E,
- 0xF6A5, 0x8B26, 0xF6A6, 0x9753, 0xF6A7, 0x96E9, 0xF6A8, 0x96F3, 0xF6A9, 0x96EF, 0xF6AA, 0x9706, 0xF6AB, 0x9701, 0xF6AC, 0x9708,
- 0xF6AD, 0x970F, 0xF6AE, 0x970E, 0xF6AF, 0x972A, 0xF6B0, 0x972D, 0xF6B1, 0x9730, 0xF6B2, 0x973E, 0xF6B3, 0x9F80, 0xF6B4, 0x9F83,
- 0xF6B5, 0x9F85, 0xF6B6, 0x9F86, 0xF6B7, 0x9F87, 0xF6B8, 0x9F88, 0xF6B9, 0x9F89, 0xF6BA, 0x9F8A, 0xF6BB, 0x9F8C, 0xF6BC, 0x9EFE,
- 0xF6BD, 0x9F0B, 0xF6BE, 0x9F0D, 0xF6BF, 0x96B9, 0xF6C0, 0x96BC, 0xF6C1, 0x96BD, 0xF6C2, 0x96CE, 0xF6C3, 0x96D2, 0xF6C4, 0x77BF,
- 0xF6C5, 0x96E0, 0xF6C6, 0x928E, 0xF6C7, 0x92AE, 0xF6C8, 0x92C8, 0xF6C9, 0x933E, 0xF6CA, 0x936A, 0xF6CB, 0x93CA, 0xF6CC, 0x938F,
- 0xF6CD, 0x943E, 0xF6CE, 0x946B, 0xF6CF, 0x9C7F, 0xF6D0, 0x9C82, 0xF6D1, 0x9C85, 0xF6D2, 0x9C86, 0xF6D3, 0x9C87, 0xF6D4, 0x9C88,
- 0xF6D5, 0x7A23, 0xF6D6, 0x9C8B, 0xF6D7, 0x9C8E, 0xF6D8, 0x9C90, 0xF6D9, 0x9C91, 0xF6DA, 0x9C92, 0xF6DB, 0x9C94, 0xF6DC, 0x9C95,
- 0xF6DD, 0x9C9A, 0xF6DE, 0x9C9B, 0xF6DF, 0x9C9E, 0xF6E0, 0x9C9F, 0xF6E1, 0x9CA0, 0xF6E2, 0x9CA1, 0xF6E3, 0x9CA2, 0xF6E4, 0x9CA3,
- 0xF6E5, 0x9CA5, 0xF6E6, 0x9CA6, 0xF6E7, 0x9CA7, 0xF6E8, 0x9CA8, 0xF6E9, 0x9CA9, 0xF6EA, 0x9CAB, 0xF6EB, 0x9CAD, 0xF6EC, 0x9CAE,
- 0xF6ED, 0x9CB0, 0xF6EE, 0x9CB1, 0xF6EF, 0x9CB2, 0xF6F0, 0x9CB3, 0xF6F1, 0x9CB4, 0xF6F2, 0x9CB5, 0xF6F3, 0x9CB6, 0xF6F4, 0x9CB7,
- 0xF6F5, 0x9CBA, 0xF6F6, 0x9CBB, 0xF6F7, 0x9CBC, 0xF6F8, 0x9CBD, 0xF6F9, 0x9CC4, 0xF6FA, 0x9CC5, 0xF6FB, 0x9CC6, 0xF6FC, 0x9CC7,
- 0xF6FD, 0x9CCA, 0xF6FE, 0x9CCB, 0xF740, 0x9C3C, 0xF741, 0x9C3D, 0xF742, 0x9C3E, 0xF743, 0x9C3F, 0xF744, 0x9C40, 0xF745, 0x9C41,
- 0xF746, 0x9C42, 0xF747, 0x9C43, 0xF748, 0x9C44, 0xF749, 0x9C45, 0xF74A, 0x9C46, 0xF74B, 0x9C47, 0xF74C, 0x9C48, 0xF74D, 0x9C49,
- 0xF74E, 0x9C4A, 0xF74F, 0x9C4B, 0xF750, 0x9C4C, 0xF751, 0x9C4D, 0xF752, 0x9C4E, 0xF753, 0x9C4F, 0xF754, 0x9C50, 0xF755, 0x9C51,
- 0xF756, 0x9C52, 0xF757, 0x9C53, 0xF758, 0x9C54, 0xF759, 0x9C55, 0xF75A, 0x9C56, 0xF75B, 0x9C57, 0xF75C, 0x9C58, 0xF75D, 0x9C59,
- 0xF75E, 0x9C5A, 0xF75F, 0x9C5B, 0xF760, 0x9C5C, 0xF761, 0x9C5D, 0xF762, 0x9C5E, 0xF763, 0x9C5F, 0xF764, 0x9C60, 0xF765, 0x9C61,
- 0xF766, 0x9C62, 0xF767, 0x9C63, 0xF768, 0x9C64, 0xF769, 0x9C65, 0xF76A, 0x9C66, 0xF76B, 0x9C67, 0xF76C, 0x9C68, 0xF76D, 0x9C69,
- 0xF76E, 0x9C6A, 0xF76F, 0x9C6B, 0xF770, 0x9C6C, 0xF771, 0x9C6D, 0xF772, 0x9C6E, 0xF773, 0x9C6F, 0xF774, 0x9C70, 0xF775, 0x9C71,
- 0xF776, 0x9C72, 0xF777, 0x9C73, 0xF778, 0x9C74, 0xF779, 0x9C75, 0xF77A, 0x9C76, 0xF77B, 0x9C77, 0xF77C, 0x9C78, 0xF77D, 0x9C79,
- 0xF77E, 0x9C7A, 0xF780, 0x9C7B, 0xF781, 0x9C7D, 0xF782, 0x9C7E, 0xF783, 0x9C80, 0xF784, 0x9C83, 0xF785, 0x9C84, 0xF786, 0x9C89,
- 0xF787, 0x9C8A, 0xF788, 0x9C8C, 0xF789, 0x9C8F, 0xF78A, 0x9C93, 0xF78B, 0x9C96, 0xF78C, 0x9C97, 0xF78D, 0x9C98, 0xF78E, 0x9C99,
- 0xF78F, 0x9C9D, 0xF790, 0x9CAA, 0xF791, 0x9CAC, 0xF792, 0x9CAF, 0xF793, 0x9CB9, 0xF794, 0x9CBE, 0xF795, 0x9CBF, 0xF796, 0x9CC0,
- 0xF797, 0x9CC1, 0xF798, 0x9CC2, 0xF799, 0x9CC8, 0xF79A, 0x9CC9, 0xF79B, 0x9CD1, 0xF79C, 0x9CD2, 0xF79D, 0x9CDA, 0xF79E, 0x9CDB,
- 0xF79F, 0x9CE0, 0xF7A0, 0x9CE1, 0xF7A1, 0x9CCC, 0xF7A2, 0x9CCD, 0xF7A3, 0x9CCE, 0xF7A4, 0x9CCF, 0xF7A5, 0x9CD0, 0xF7A6, 0x9CD3,
- 0xF7A7, 0x9CD4, 0xF7A8, 0x9CD5, 0xF7A9, 0x9CD7, 0xF7AA, 0x9CD8, 0xF7AB, 0x9CD9, 0xF7AC, 0x9CDC, 0xF7AD, 0x9CDD, 0xF7AE, 0x9CDF,
- 0xF7AF, 0x9CE2, 0xF7B0, 0x977C, 0xF7B1, 0x9785, 0xF7B2, 0x9791, 0xF7B3, 0x9792, 0xF7B4, 0x9794, 0xF7B5, 0x97AF, 0xF7B6, 0x97AB,
- 0xF7B7, 0x97A3, 0xF7B8, 0x97B2, 0xF7B9, 0x97B4, 0xF7BA, 0x9AB1, 0xF7BB, 0x9AB0, 0xF7BC, 0x9AB7, 0xF7BD, 0x9E58, 0xF7BE, 0x9AB6,
- 0xF7BF, 0x9ABA, 0xF7C0, 0x9ABC, 0xF7C1, 0x9AC1, 0xF7C2, 0x9AC0, 0xF7C3, 0x9AC5, 0xF7C4, 0x9AC2, 0xF7C5, 0x9ACB, 0xF7C6, 0x9ACC,
- 0xF7C7, 0x9AD1, 0xF7C8, 0x9B45, 0xF7C9, 0x9B43, 0xF7CA, 0x9B47, 0xF7CB, 0x9B49, 0xF7CC, 0x9B48, 0xF7CD, 0x9B4D, 0xF7CE, 0x9B51,
- 0xF7CF, 0x98E8, 0xF7D0, 0x990D, 0xF7D1, 0x992E, 0xF7D2, 0x9955, 0xF7D3, 0x9954, 0xF7D4, 0x9ADF, 0xF7D5, 0x9AE1, 0xF7D6, 0x9AE6,
- 0xF7D7, 0x9AEF, 0xF7D8, 0x9AEB, 0xF7D9, 0x9AFB, 0xF7DA, 0x9AED, 0xF7DB, 0x9AF9, 0xF7DC, 0x9B08, 0xF7DD, 0x9B0F, 0xF7DE, 0x9B13,
- 0xF7DF, 0x9B1F, 0xF7E0, 0x9B23, 0xF7E1, 0x9EBD, 0xF7E2, 0x9EBE, 0xF7E3, 0x7E3B, 0xF7E4, 0x9E82, 0xF7E5, 0x9E87, 0xF7E6, 0x9E88,
- 0xF7E7, 0x9E8B, 0xF7E8, 0x9E92, 0xF7E9, 0x93D6, 0xF7EA, 0x9E9D, 0xF7EB, 0x9E9F, 0xF7EC, 0x9EDB, 0xF7ED, 0x9EDC, 0xF7EE, 0x9EDD,
- 0xF7EF, 0x9EE0, 0xF7F0, 0x9EDF, 0xF7F1, 0x9EE2, 0xF7F2, 0x9EE9, 0xF7F3, 0x9EE7, 0xF7F4, 0x9EE5, 0xF7F5, 0x9EEA, 0xF7F6, 0x9EEF,
- 0xF7F7, 0x9F22, 0xF7F8, 0x9F2C, 0xF7F9, 0x9F2F, 0xF7FA, 0x9F39, 0xF7FB, 0x9F37, 0xF7FC, 0x9F3D, 0xF7FD, 0x9F3E, 0xF7FE, 0x9F44,
- 0xF840, 0x9CE3, 0xF841, 0x9CE4, 0xF842, 0x9CE5, 0xF843, 0x9CE6, 0xF844, 0x9CE7, 0xF845, 0x9CE8, 0xF846, 0x9CE9, 0xF847, 0x9CEA,
- 0xF848, 0x9CEB, 0xF849, 0x9CEC, 0xF84A, 0x9CED, 0xF84B, 0x9CEE, 0xF84C, 0x9CEF, 0xF84D, 0x9CF0, 0xF84E, 0x9CF1, 0xF84F, 0x9CF2,
- 0xF850, 0x9CF3, 0xF851, 0x9CF4, 0xF852, 0x9CF5, 0xF853, 0x9CF6, 0xF854, 0x9CF7, 0xF855, 0x9CF8, 0xF856, 0x9CF9, 0xF857, 0x9CFA,
- 0xF858, 0x9CFB, 0xF859, 0x9CFC, 0xF85A, 0x9CFD, 0xF85B, 0x9CFE, 0xF85C, 0x9CFF, 0xF85D, 0x9D00, 0xF85E, 0x9D01, 0xF85F, 0x9D02,
- 0xF860, 0x9D03, 0xF861, 0x9D04, 0xF862, 0x9D05, 0xF863, 0x9D06, 0xF864, 0x9D07, 0xF865, 0x9D08, 0xF866, 0x9D09, 0xF867, 0x9D0A,
- 0xF868, 0x9D0B, 0xF869, 0x9D0C, 0xF86A, 0x9D0D, 0xF86B, 0x9D0E, 0xF86C, 0x9D0F, 0xF86D, 0x9D10, 0xF86E, 0x9D11, 0xF86F, 0x9D12,
- 0xF870, 0x9D13, 0xF871, 0x9D14, 0xF872, 0x9D15, 0xF873, 0x9D16, 0xF874, 0x9D17, 0xF875, 0x9D18, 0xF876, 0x9D19, 0xF877, 0x9D1A,
- 0xF878, 0x9D1B, 0xF879, 0x9D1C, 0xF87A, 0x9D1D, 0xF87B, 0x9D1E, 0xF87C, 0x9D1F, 0xF87D, 0x9D20, 0xF87E, 0x9D21, 0xF880, 0x9D22,
- 0xF881, 0x9D23, 0xF882, 0x9D24, 0xF883, 0x9D25, 0xF884, 0x9D26, 0xF885, 0x9D27, 0xF886, 0x9D28, 0xF887, 0x9D29, 0xF888, 0x9D2A,
- 0xF889, 0x9D2B, 0xF88A, 0x9D2C, 0xF88B, 0x9D2D, 0xF88C, 0x9D2E, 0xF88D, 0x9D2F, 0xF88E, 0x9D30, 0xF88F, 0x9D31, 0xF890, 0x9D32,
- 0xF891, 0x9D33, 0xF892, 0x9D34, 0xF893, 0x9D35, 0xF894, 0x9D36, 0xF895, 0x9D37, 0xF896, 0x9D38, 0xF897, 0x9D39, 0xF898, 0x9D3A,
- 0xF899, 0x9D3B, 0xF89A, 0x9D3C, 0xF89B, 0x9D3D, 0xF89C, 0x9D3E, 0xF89D, 0x9D3F, 0xF89E, 0x9D40, 0xF89F, 0x9D41, 0xF8A0, 0x9D42,
- 0xF940, 0x9D43, 0xF941, 0x9D44, 0xF942, 0x9D45, 0xF943, 0x9D46, 0xF944, 0x9D47, 0xF945, 0x9D48, 0xF946, 0x9D49, 0xF947, 0x9D4A,
- 0xF948, 0x9D4B, 0xF949, 0x9D4C, 0xF94A, 0x9D4D, 0xF94B, 0x9D4E, 0xF94C, 0x9D4F, 0xF94D, 0x9D50, 0xF94E, 0x9D51, 0xF94F, 0x9D52,
- 0xF950, 0x9D53, 0xF951, 0x9D54, 0xF952, 0x9D55, 0xF953, 0x9D56, 0xF954, 0x9D57, 0xF955, 0x9D58, 0xF956, 0x9D59, 0xF957, 0x9D5A,
- 0xF958, 0x9D5B, 0xF959, 0x9D5C, 0xF95A, 0x9D5D, 0xF95B, 0x9D5E, 0xF95C, 0x9D5F, 0xF95D, 0x9D60, 0xF95E, 0x9D61, 0xF95F, 0x9D62,
- 0xF960, 0x9D63, 0xF961, 0x9D64, 0xF962, 0x9D65, 0xF963, 0x9D66, 0xF964, 0x9D67, 0xF965, 0x9D68, 0xF966, 0x9D69, 0xF967, 0x9D6A,
- 0xF968, 0x9D6B, 0xF969, 0x9D6C, 0xF96A, 0x9D6D, 0xF96B, 0x9D6E, 0xF96C, 0x9D6F, 0xF96D, 0x9D70, 0xF96E, 0x9D71, 0xF96F, 0x9D72,
- 0xF970, 0x9D73, 0xF971, 0x9D74, 0xF972, 0x9D75, 0xF973, 0x9D76, 0xF974, 0x9D77, 0xF975, 0x9D78, 0xF976, 0x9D79, 0xF977, 0x9D7A,
- 0xF978, 0x9D7B, 0xF979, 0x9D7C, 0xF97A, 0x9D7D, 0xF97B, 0x9D7E, 0xF97C, 0x9D7F, 0xF97D, 0x9D80, 0xF97E, 0x9D81, 0xF980, 0x9D82,
- 0xF981, 0x9D83, 0xF982, 0x9D84, 0xF983, 0x9D85, 0xF984, 0x9D86, 0xF985, 0x9D87, 0xF986, 0x9D88, 0xF987, 0x9D89, 0xF988, 0x9D8A,
- 0xF989, 0x9D8B, 0xF98A, 0x9D8C, 0xF98B, 0x9D8D, 0xF98C, 0x9D8E, 0xF98D, 0x9D8F, 0xF98E, 0x9D90, 0xF98F, 0x9D91, 0xF990, 0x9D92,
- 0xF991, 0x9D93, 0xF992, 0x9D94, 0xF993, 0x9D95, 0xF994, 0x9D96, 0xF995, 0x9D97, 0xF996, 0x9D98, 0xF997, 0x9D99, 0xF998, 0x9D9A,
- 0xF999, 0x9D9B, 0xF99A, 0x9D9C, 0xF99B, 0x9D9D, 0xF99C, 0x9D9E, 0xF99D, 0x9D9F, 0xF99E, 0x9DA0, 0xF99F, 0x9DA1, 0xF9A0, 0x9DA2,
- 0xFA40, 0x9DA3, 0xFA41, 0x9DA4, 0xFA42, 0x9DA5, 0xFA43, 0x9DA6, 0xFA44, 0x9DA7, 0xFA45, 0x9DA8, 0xFA46, 0x9DA9, 0xFA47, 0x9DAA,
- 0xFA48, 0x9DAB, 0xFA49, 0x9DAC, 0xFA4A, 0x9DAD, 0xFA4B, 0x9DAE, 0xFA4C, 0x9DAF, 0xFA4D, 0x9DB0, 0xFA4E, 0x9DB1, 0xFA4F, 0x9DB2,
- 0xFA50, 0x9DB3, 0xFA51, 0x9DB4, 0xFA52, 0x9DB5, 0xFA53, 0x9DB6, 0xFA54, 0x9DB7, 0xFA55, 0x9DB8, 0xFA56, 0x9DB9, 0xFA57, 0x9DBA,
- 0xFA58, 0x9DBB, 0xFA59, 0x9DBC, 0xFA5A, 0x9DBD, 0xFA5B, 0x9DBE, 0xFA5C, 0x9DBF, 0xFA5D, 0x9DC0, 0xFA5E, 0x9DC1, 0xFA5F, 0x9DC2,
- 0xFA60, 0x9DC3, 0xFA61, 0x9DC4, 0xFA62, 0x9DC5, 0xFA63, 0x9DC6, 0xFA64, 0x9DC7, 0xFA65, 0x9DC8, 0xFA66, 0x9DC9, 0xFA67, 0x9DCA,
- 0xFA68, 0x9DCB, 0xFA69, 0x9DCC, 0xFA6A, 0x9DCD, 0xFA6B, 0x9DCE, 0xFA6C, 0x9DCF, 0xFA6D, 0x9DD0, 0xFA6E, 0x9DD1, 0xFA6F, 0x9DD2,
- 0xFA70, 0x9DD3, 0xFA71, 0x9DD4, 0xFA72, 0x9DD5, 0xFA73, 0x9DD6, 0xFA74, 0x9DD7, 0xFA75, 0x9DD8, 0xFA76, 0x9DD9, 0xFA77, 0x9DDA,
- 0xFA78, 0x9DDB, 0xFA79, 0x9DDC, 0xFA7A, 0x9DDD, 0xFA7B, 0x9DDE, 0xFA7C, 0x9DDF, 0xFA7D, 0x9DE0, 0xFA7E, 0x9DE1, 0xFA80, 0x9DE2,
- 0xFA81, 0x9DE3, 0xFA82, 0x9DE4, 0xFA83, 0x9DE5, 0xFA84, 0x9DE6, 0xFA85, 0x9DE7, 0xFA86, 0x9DE8, 0xFA87, 0x9DE9, 0xFA88, 0x9DEA,
- 0xFA89, 0x9DEB, 0xFA8A, 0x9DEC, 0xFA8B, 0x9DED, 0xFA8C, 0x9DEE, 0xFA8D, 0x9DEF, 0xFA8E, 0x9DF0, 0xFA8F, 0x9DF1, 0xFA90, 0x9DF2,
- 0xFA91, 0x9DF3, 0xFA92, 0x9DF4, 0xFA93, 0x9DF5, 0xFA94, 0x9DF6, 0xFA95, 0x9DF7, 0xFA96, 0x9DF8, 0xFA97, 0x9DF9, 0xFA98, 0x9DFA,
- 0xFA99, 0x9DFB, 0xFA9A, 0x9DFC, 0xFA9B, 0x9DFD, 0xFA9C, 0x9DFE, 0xFA9D, 0x9DFF, 0xFA9E, 0x9E00, 0xFA9F, 0x9E01, 0xFAA0, 0x9E02,
- 0xFB40, 0x9E03, 0xFB41, 0x9E04, 0xFB42, 0x9E05, 0xFB43, 0x9E06, 0xFB44, 0x9E07, 0xFB45, 0x9E08, 0xFB46, 0x9E09, 0xFB47, 0x9E0A,
- 0xFB48, 0x9E0B, 0xFB49, 0x9E0C, 0xFB4A, 0x9E0D, 0xFB4B, 0x9E0E, 0xFB4C, 0x9E0F, 0xFB4D, 0x9E10, 0xFB4E, 0x9E11, 0xFB4F, 0x9E12,
- 0xFB50, 0x9E13, 0xFB51, 0x9E14, 0xFB52, 0x9E15, 0xFB53, 0x9E16, 0xFB54, 0x9E17, 0xFB55, 0x9E18, 0xFB56, 0x9E19, 0xFB57, 0x9E1A,
- 0xFB58, 0x9E1B, 0xFB59, 0x9E1C, 0xFB5A, 0x9E1D, 0xFB5B, 0x9E1E, 0xFB5C, 0x9E24, 0xFB5D, 0x9E27, 0xFB5E, 0x9E2E, 0xFB5F, 0x9E30,
- 0xFB60, 0x9E34, 0xFB61, 0x9E3B, 0xFB62, 0x9E3C, 0xFB63, 0x9E40, 0xFB64, 0x9E4D, 0xFB65, 0x9E50, 0xFB66, 0x9E52, 0xFB67, 0x9E53,
- 0xFB68, 0x9E54, 0xFB69, 0x9E56, 0xFB6A, 0x9E59, 0xFB6B, 0x9E5D, 0xFB6C, 0x9E5F, 0xFB6D, 0x9E60, 0xFB6E, 0x9E61, 0xFB6F, 0x9E62,
- 0xFB70, 0x9E65, 0xFB71, 0x9E6E, 0xFB72, 0x9E6F, 0xFB73, 0x9E72, 0xFB74, 0x9E74, 0xFB75, 0x9E75, 0xFB76, 0x9E76, 0xFB77, 0x9E77,
- 0xFB78, 0x9E78, 0xFB79, 0x9E79, 0xFB7A, 0x9E7A, 0xFB7B, 0x9E7B, 0xFB7C, 0x9E7C, 0xFB7D, 0x9E7D, 0xFB7E, 0x9E80, 0xFB80, 0x9E81,
- 0xFB81, 0x9E83, 0xFB82, 0x9E84, 0xFB83, 0x9E85, 0xFB84, 0x9E86, 0xFB85, 0x9E89, 0xFB86, 0x9E8A, 0xFB87, 0x9E8C, 0xFB88, 0x9E8D,
- 0xFB89, 0x9E8E, 0xFB8A, 0x9E8F, 0xFB8B, 0x9E90, 0xFB8C, 0x9E91, 0xFB8D, 0x9E94, 0xFB8E, 0x9E95, 0xFB8F, 0x9E96, 0xFB90, 0x9E97,
- 0xFB91, 0x9E98, 0xFB92, 0x9E99, 0xFB93, 0x9E9A, 0xFB94, 0x9E9B, 0xFB95, 0x9E9C, 0xFB96, 0x9E9E, 0xFB97, 0x9EA0, 0xFB98, 0x9EA1,
- 0xFB99, 0x9EA2, 0xFB9A, 0x9EA3, 0xFB9B, 0x9EA4, 0xFB9C, 0x9EA5, 0xFB9D, 0x9EA7, 0xFB9E, 0x9EA8, 0xFB9F, 0x9EA9, 0xFBA0, 0x9EAA,
- 0xFC40, 0x9EAB, 0xFC41, 0x9EAC, 0xFC42, 0x9EAD, 0xFC43, 0x9EAE, 0xFC44, 0x9EAF, 0xFC45, 0x9EB0, 0xFC46, 0x9EB1, 0xFC47, 0x9EB2,
- 0xFC48, 0x9EB3, 0xFC49, 0x9EB5, 0xFC4A, 0x9EB6, 0xFC4B, 0x9EB7, 0xFC4C, 0x9EB9, 0xFC4D, 0x9EBA, 0xFC4E, 0x9EBC, 0xFC4F, 0x9EBF,
- 0xFC50, 0x9EC0, 0xFC51, 0x9EC1, 0xFC52, 0x9EC2, 0xFC53, 0x9EC3, 0xFC54, 0x9EC5, 0xFC55, 0x9EC6, 0xFC56, 0x9EC7, 0xFC57, 0x9EC8,
- 0xFC58, 0x9ECA, 0xFC59, 0x9ECB, 0xFC5A, 0x9ECC, 0xFC5B, 0x9ED0, 0xFC5C, 0x9ED2, 0xFC5D, 0x9ED3, 0xFC5E, 0x9ED5, 0xFC5F, 0x9ED6,
- 0xFC60, 0x9ED7, 0xFC61, 0x9ED9, 0xFC62, 0x9EDA, 0xFC63, 0x9EDE, 0xFC64, 0x9EE1, 0xFC65, 0x9EE3, 0xFC66, 0x9EE4, 0xFC67, 0x9EE6,
- 0xFC68, 0x9EE8, 0xFC69, 0x9EEB, 0xFC6A, 0x9EEC, 0xFC6B, 0x9EED, 0xFC6C, 0x9EEE, 0xFC6D, 0x9EF0, 0xFC6E, 0x9EF1, 0xFC6F, 0x9EF2,
- 0xFC70, 0x9EF3, 0xFC71, 0x9EF4, 0xFC72, 0x9EF5, 0xFC73, 0x9EF6, 0xFC74, 0x9EF7, 0xFC75, 0x9EF8, 0xFC76, 0x9EFA, 0xFC77, 0x9EFD,
- 0xFC78, 0x9EFF, 0xFC79, 0x9F00, 0xFC7A, 0x9F01, 0xFC7B, 0x9F02, 0xFC7C, 0x9F03, 0xFC7D, 0x9F04, 0xFC7E, 0x9F05, 0xFC80, 0x9F06,
- 0xFC81, 0x9F07, 0xFC82, 0x9F08, 0xFC83, 0x9F09, 0xFC84, 0x9F0A, 0xFC85, 0x9F0C, 0xFC86, 0x9F0F, 0xFC87, 0x9F11, 0xFC88, 0x9F12,
- 0xFC89, 0x9F14, 0xFC8A, 0x9F15, 0xFC8B, 0x9F16, 0xFC8C, 0x9F18, 0xFC8D, 0x9F1A, 0xFC8E, 0x9F1B, 0xFC8F, 0x9F1C, 0xFC90, 0x9F1D,
- 0xFC91, 0x9F1E, 0xFC92, 0x9F1F, 0xFC93, 0x9F21, 0xFC94, 0x9F23, 0xFC95, 0x9F24, 0xFC96, 0x9F25, 0xFC97, 0x9F26, 0xFC98, 0x9F27,
- 0xFC99, 0x9F28, 0xFC9A, 0x9F29, 0xFC9B, 0x9F2A, 0xFC9C, 0x9F2B, 0xFC9D, 0x9F2D, 0xFC9E, 0x9F2E, 0xFC9F, 0x9F30, 0xFCA0, 0x9F31,
- 0xFD40, 0x9F32, 0xFD41, 0x9F33, 0xFD42, 0x9F34, 0xFD43, 0x9F35, 0xFD44, 0x9F36, 0xFD45, 0x9F38, 0xFD46, 0x9F3A, 0xFD47, 0x9F3C,
- 0xFD48, 0x9F3F, 0xFD49, 0x9F40, 0xFD4A, 0x9F41, 0xFD4B, 0x9F42, 0xFD4C, 0x9F43, 0xFD4D, 0x9F45, 0xFD4E, 0x9F46, 0xFD4F, 0x9F47,
- 0xFD50, 0x9F48, 0xFD51, 0x9F49, 0xFD52, 0x9F4A, 0xFD53, 0x9F4B, 0xFD54, 0x9F4C, 0xFD55, 0x9F4D, 0xFD56, 0x9F4E, 0xFD57, 0x9F4F,
- 0xFD58, 0x9F52, 0xFD59, 0x9F53, 0xFD5A, 0x9F54, 0xFD5B, 0x9F55, 0xFD5C, 0x9F56, 0xFD5D, 0x9F57, 0xFD5E, 0x9F58, 0xFD5F, 0x9F59,
- 0xFD60, 0x9F5A, 0xFD61, 0x9F5B, 0xFD62, 0x9F5C, 0xFD63, 0x9F5D, 0xFD64, 0x9F5E, 0xFD65, 0x9F5F, 0xFD66, 0x9F60, 0xFD67, 0x9F61,
- 0xFD68, 0x9F62, 0xFD69, 0x9F63, 0xFD6A, 0x9F64, 0xFD6B, 0x9F65, 0xFD6C, 0x9F66, 0xFD6D, 0x9F67, 0xFD6E, 0x9F68, 0xFD6F, 0x9F69,
- 0xFD70, 0x9F6A, 0xFD71, 0x9F6B, 0xFD72, 0x9F6C, 0xFD73, 0x9F6D, 0xFD74, 0x9F6E, 0xFD75, 0x9F6F, 0xFD76, 0x9F70, 0xFD77, 0x9F71,
- 0xFD78, 0x9F72, 0xFD79, 0x9F73, 0xFD7A, 0x9F74, 0xFD7B, 0x9F75, 0xFD7C, 0x9F76, 0xFD7D, 0x9F77, 0xFD7E, 0x9F78, 0xFD80, 0x9F79,
- 0xFD81, 0x9F7A, 0xFD82, 0x9F7B, 0xFD83, 0x9F7C, 0xFD84, 0x9F7D, 0xFD85, 0x9F7E, 0xFD86, 0x9F81, 0xFD87, 0x9F82, 0xFD88, 0x9F8D,
- 0xFD89, 0x9F8E, 0xFD8A, 0x9F8F, 0xFD8B, 0x9F90, 0xFD8C, 0x9F91, 0xFD8D, 0x9F92, 0xFD8E, 0x9F93, 0xFD8F, 0x9F94, 0xFD90, 0x9F95,
- 0xFD91, 0x9F96, 0xFD92, 0x9F97, 0xFD93, 0x9F98, 0xFD94, 0x9F9C, 0xFD95, 0x9F9D, 0xFD96, 0x9F9E, 0xFD97, 0x9FA1, 0xFD98, 0x9FA2,
- 0xFD99, 0x9FA3, 0xFD9A, 0x9FA4, 0xFD9B, 0x9FA5, 0xFD9C, 0xF92C, 0xFD9D, 0xF979, 0xFD9E, 0xF995, 0xFD9F, 0xF9E7, 0xFDA0, 0xF9F1,
- 0xFE40, 0xFA0C, 0xFE41, 0xFA0D, 0xFE42, 0xFA0E, 0xFE43, 0xFA0F, 0xFE44, 0xFA11, 0xFE45, 0xFA13, 0xFE46, 0xFA14, 0xFE47, 0xFA18,
- 0xFE48, 0xFA1F, 0xFE49, 0xFA20, 0xFE4A, 0xFA21, 0xFE4B, 0xFA23, 0xFE4C, 0xFA24, 0xFE4D, 0xFA27, 0xFE4E, 0xFA28, 0xFE4F, 0xFA29,
- 0, 0
-};
-#endif
-
-#if FF_CODE_PAGE == 949 || FF_CODE_PAGE == 0 /* Korean */
-static const WCHAR uni2oem949[] = { /* Unicode --> Korean pairs */
- 0x00A1, 0xA2AE, 0x00A4, 0xA2B4, 0x00A7, 0xA1D7, 0x00A8, 0xA1A7, 0x00AA, 0xA8A3, 0x00AD, 0xA1A9, 0x00AE, 0xA2E7, 0x00B0, 0xA1C6,
- 0x00B1, 0xA1BE, 0x00B2, 0xA9F7, 0x00B3, 0xA9F8, 0x00B4, 0xA2A5, 0x00B6, 0xA2D2, 0x00B7, 0xA1A4, 0x00B8, 0xA2AC, 0x00B9, 0xA9F6,
- 0x00BA, 0xA8AC, 0x00BC, 0xA8F9, 0x00BD, 0xA8F6, 0x00BE, 0xA8FA, 0x00BF, 0xA2AF, 0x00C6, 0xA8A1, 0x00D0, 0xA8A2, 0x00D7, 0xA1BF,
- 0x00D8, 0xA8AA, 0x00DE, 0xA8AD, 0x00DF, 0xA9AC, 0x00E6, 0xA9A1, 0x00F0, 0xA9A3, 0x00F7, 0xA1C0, 0x00F8, 0xA9AA, 0x00FE, 0xA9AD,
- 0x0111, 0xA9A2, 0x0126, 0xA8A4, 0x0127, 0xA9A4, 0x0131, 0xA9A5, 0x0132, 0xA8A6, 0x0133, 0xA9A6, 0x0138, 0xA9A7, 0x013F, 0xA8A8,
- 0x0140, 0xA9A8, 0x0141, 0xA8A9, 0x0142, 0xA9A9, 0x0149, 0xA9B0, 0x014A, 0xA8AF, 0x014B, 0xA9AF, 0x0152, 0xA8AB, 0x0153, 0xA9AB,
- 0x0166, 0xA8AE, 0x0167, 0xA9AE, 0x02C7, 0xA2A7, 0x02D0, 0xA2B0, 0x02D8, 0xA2A8, 0x02D9, 0xA2AB, 0x02DA, 0xA2AA, 0x02DB, 0xA2AD,
- 0x02DD, 0xA2A9, 0x0391, 0xA5C1, 0x0392, 0xA5C2, 0x0393, 0xA5C3, 0x0394, 0xA5C4, 0x0395, 0xA5C5, 0x0396, 0xA5C6, 0x0397, 0xA5C7,
- 0x0398, 0xA5C8, 0x0399, 0xA5C9, 0x039A, 0xA5CA, 0x039B, 0xA5CB, 0x039C, 0xA5CC, 0x039D, 0xA5CD, 0x039E, 0xA5CE, 0x039F, 0xA5CF,
- 0x03A0, 0xA5D0, 0x03A1, 0xA5D1, 0x03A3, 0xA5D2, 0x03A4, 0xA5D3, 0x03A5, 0xA5D4, 0x03A6, 0xA5D5, 0x03A7, 0xA5D6, 0x03A8, 0xA5D7,
- 0x03A9, 0xA5D8, 0x03B1, 0xA5E1, 0x03B2, 0xA5E2, 0x03B3, 0xA5E3, 0x03B4, 0xA5E4, 0x03B5, 0xA5E5, 0x03B6, 0xA5E6, 0x03B7, 0xA5E7,
- 0x03B8, 0xA5E8, 0x03B9, 0xA5E9, 0x03BA, 0xA5EA, 0x03BB, 0xA5EB, 0x03BC, 0xA5EC, 0x03BD, 0xA5ED, 0x03BE, 0xA5EE, 0x03BF, 0xA5EF,
- 0x03C0, 0xA5F0, 0x03C1, 0xA5F1, 0x03C3, 0xA5F2, 0x03C4, 0xA5F3, 0x03C5, 0xA5F4, 0x03C6, 0xA5F5, 0x03C7, 0xA5F6, 0x03C8, 0xA5F7,
- 0x03C9, 0xA5F8, 0x0401, 0xACA7, 0x0410, 0xACA1, 0x0411, 0xACA2, 0x0412, 0xACA3, 0x0413, 0xACA4, 0x0414, 0xACA5, 0x0415, 0xACA6,
- 0x0416, 0xACA8, 0x0417, 0xACA9, 0x0418, 0xACAA, 0x0419, 0xACAB, 0x041A, 0xACAC, 0x041B, 0xACAD, 0x041C, 0xACAE, 0x041D, 0xACAF,
- 0x041E, 0xACB0, 0x041F, 0xACB1, 0x0420, 0xACB2, 0x0421, 0xACB3, 0x0422, 0xACB4, 0x0423, 0xACB5, 0x0424, 0xACB6, 0x0425, 0xACB7,
- 0x0426, 0xACB8, 0x0427, 0xACB9, 0x0428, 0xACBA, 0x0429, 0xACBB, 0x042A, 0xACBC, 0x042B, 0xACBD, 0x042C, 0xACBE, 0x042D, 0xACBF,
- 0x042E, 0xACC0, 0x042F, 0xACC1, 0x0430, 0xACD1, 0x0431, 0xACD2, 0x0432, 0xACD3, 0x0433, 0xACD4, 0x0434, 0xACD5, 0x0435, 0xACD6,
- 0x0436, 0xACD8, 0x0437, 0xACD9, 0x0438, 0xACDA, 0x0439, 0xACDB, 0x043A, 0xACDC, 0x043B, 0xACDD, 0x043C, 0xACDE, 0x043D, 0xACDF,
- 0x043E, 0xACE0, 0x043F, 0xACE1, 0x0440, 0xACE2, 0x0441, 0xACE3, 0x0442, 0xACE4, 0x0443, 0xACE5, 0x0444, 0xACE6, 0x0445, 0xACE7,
- 0x0446, 0xACE8, 0x0447, 0xACE9, 0x0448, 0xACEA, 0x0449, 0xACEB, 0x044A, 0xACEC, 0x044B, 0xACED, 0x044C, 0xACEE, 0x044D, 0xACEF,
- 0x044E, 0xACF0, 0x044F, 0xACF1, 0x0451, 0xACD7, 0x2015, 0xA1AA, 0x2018, 0xA1AE, 0x2019, 0xA1AF, 0x201C, 0xA1B0, 0x201D, 0xA1B1,
- 0x2020, 0xA2D3, 0x2021, 0xA2D4, 0x2025, 0xA1A5, 0x2026, 0xA1A6, 0x2030, 0xA2B6, 0x2032, 0xA1C7, 0x2033, 0xA1C8, 0x203B, 0xA1D8,
- 0x2074, 0xA9F9, 0x207F, 0xA9FA, 0x2081, 0xA9FB, 0x2082, 0xA9FC, 0x2083, 0xA9FD, 0x2084, 0xA9FE, 0x20AC, 0xA2E6, 0x2103, 0xA1C9,
- 0x2109, 0xA2B5, 0x2113, 0xA7A4, 0x2116, 0xA2E0, 0x2121, 0xA2E5, 0x2122, 0xA2E2, 0x2126, 0xA7D9, 0x212B, 0xA1CA, 0x2153, 0xA8F7,
- 0x2154, 0xA8F8, 0x215B, 0xA8FB, 0x215C, 0xA8FC, 0x215D, 0xA8FD, 0x215E, 0xA8FE, 0x2160, 0xA5B0, 0x2161, 0xA5B1, 0x2162, 0xA5B2,
- 0x2163, 0xA5B3, 0x2164, 0xA5B4, 0x2165, 0xA5B5, 0x2166, 0xA5B6, 0x2167, 0xA5B7, 0x2168, 0xA5B8, 0x2169, 0xA5B9, 0x2170, 0xA5A1,
- 0x2171, 0xA5A2, 0x2172, 0xA5A3, 0x2173, 0xA5A4, 0x2174, 0xA5A5, 0x2175, 0xA5A6, 0x2176, 0xA5A7, 0x2177, 0xA5A8, 0x2178, 0xA5A9,
- 0x2179, 0xA5AA, 0x2190, 0xA1E7, 0x2191, 0xA1E8, 0x2192, 0xA1E6, 0x2193, 0xA1E9, 0x2194, 0xA1EA, 0x2195, 0xA2D5, 0x2196, 0xA2D8,
- 0x2197, 0xA2D6, 0x2198, 0xA2D9, 0x2199, 0xA2D7, 0x21D2, 0xA2A1, 0x21D4, 0xA2A2, 0x2200, 0xA2A3, 0x2202, 0xA1D3, 0x2203, 0xA2A4,
- 0x2207, 0xA1D4, 0x2208, 0xA1F4, 0x220B, 0xA1F5, 0x220F, 0xA2B3, 0x2211, 0xA2B2, 0x221A, 0xA1EE, 0x221D, 0xA1F0, 0x221E, 0xA1C4,
- 0x2220, 0xA1D0, 0x2225, 0xA1AB, 0x2227, 0xA1FC, 0x2228, 0xA1FD, 0x2229, 0xA1FB, 0x222A, 0xA1FA, 0x222B, 0xA1F2, 0x222C, 0xA1F3,
- 0x222E, 0xA2B1, 0x2234, 0xA1C5, 0x2235, 0xA1F1, 0x223C, 0xA1AD, 0x223D, 0xA1EF, 0x2252, 0xA1D6, 0x2260, 0xA1C1, 0x2261, 0xA1D5,
- 0x2264, 0xA1C2, 0x2265, 0xA1C3, 0x226A, 0xA1EC, 0x226B, 0xA1ED, 0x2282, 0xA1F8, 0x2283, 0xA1F9, 0x2286, 0xA1F6, 0x2287, 0xA1F7,
- 0x2299, 0xA2C1, 0x22A5, 0xA1D1, 0x2312, 0xA1D2, 0x2460, 0xA8E7, 0x2461, 0xA8E8, 0x2462, 0xA8E9, 0x2463, 0xA8EA, 0x2464, 0xA8EB,
- 0x2465, 0xA8EC, 0x2466, 0xA8ED, 0x2467, 0xA8EE, 0x2468, 0xA8EF, 0x2469, 0xA8F0, 0x246A, 0xA8F1, 0x246B, 0xA8F2, 0x246C, 0xA8F3,
- 0x246D, 0xA8F4, 0x246E, 0xA8F5, 0x2474, 0xA9E7, 0x2475, 0xA9E8, 0x2476, 0xA9E9, 0x2477, 0xA9EA, 0x2478, 0xA9EB, 0x2479, 0xA9EC,
- 0x247A, 0xA9ED, 0x247B, 0xA9EE, 0x247C, 0xA9EF, 0x247D, 0xA9F0, 0x247E, 0xA9F1, 0x247F, 0xA9F2, 0x2480, 0xA9F3, 0x2481, 0xA9F4,
- 0x2482, 0xA9F5, 0x249C, 0xA9CD, 0x249D, 0xA9CE, 0x249E, 0xA9CF, 0x249F, 0xA9D0, 0x24A0, 0xA9D1, 0x24A1, 0xA9D2, 0x24A2, 0xA9D3,
- 0x24A3, 0xA9D4, 0x24A4, 0xA9D5, 0x24A5, 0xA9D6, 0x24A6, 0xA9D7, 0x24A7, 0xA9D8, 0x24A8, 0xA9D9, 0x24A9, 0xA9DA, 0x24AA, 0xA9DB,
- 0x24AB, 0xA9DC, 0x24AC, 0xA9DD, 0x24AD, 0xA9DE, 0x24AE, 0xA9DF, 0x24AF, 0xA9E0, 0x24B0, 0xA9E1, 0x24B1, 0xA9E2, 0x24B2, 0xA9E3,
- 0x24B3, 0xA9E4, 0x24B4, 0xA9E5, 0x24B5, 0xA9E6, 0x24D0, 0xA8CD, 0x24D1, 0xA8CE, 0x24D2, 0xA8CF, 0x24D3, 0xA8D0, 0x24D4, 0xA8D1,
- 0x24D5, 0xA8D2, 0x24D6, 0xA8D3, 0x24D7, 0xA8D4, 0x24D8, 0xA8D5, 0x24D9, 0xA8D6, 0x24DA, 0xA8D7, 0x24DB, 0xA8D8, 0x24DC, 0xA8D9,
- 0x24DD, 0xA8DA, 0x24DE, 0xA8DB, 0x24DF, 0xA8DC, 0x24E0, 0xA8DD, 0x24E1, 0xA8DE, 0x24E2, 0xA8DF, 0x24E3, 0xA8E0, 0x24E4, 0xA8E1,
- 0x24E5, 0xA8E2, 0x24E6, 0xA8E3, 0x24E7, 0xA8E4, 0x24E8, 0xA8E5, 0x24E9, 0xA8E6, 0x2500, 0xA6A1, 0x2501, 0xA6AC, 0x2502, 0xA6A2,
- 0x2503, 0xA6AD, 0x250C, 0xA6A3, 0x250D, 0xA6C8, 0x250E, 0xA6C7, 0x250F, 0xA6AE, 0x2510, 0xA6A4, 0x2511, 0xA6C2, 0x2512, 0xA6C1,
- 0x2513, 0xA6AF, 0x2514, 0xA6A6, 0x2515, 0xA6C6, 0x2516, 0xA6C5, 0x2517, 0xA6B1, 0x2518, 0xA6A5, 0x2519, 0xA6C4, 0x251A, 0xA6C3,
- 0x251B, 0xA6B0, 0x251C, 0xA6A7, 0x251D, 0xA6BC, 0x251E, 0xA6C9, 0x251F, 0xA6CA, 0x2520, 0xA6B7, 0x2521, 0xA6CB, 0x2522, 0xA6CC,
- 0x2523, 0xA6B2, 0x2524, 0xA6A9, 0x2525, 0xA6BE, 0x2526, 0xA6CD, 0x2527, 0xA6CE, 0x2528, 0xA6B9, 0x2529, 0xA6CF, 0x252A, 0xA6D0,
- 0x252B, 0xA6B4, 0x252C, 0xA6A8, 0x252D, 0xA6D1, 0x252E, 0xA6D2, 0x252F, 0xA6B8, 0x2530, 0xA6BD, 0x2531, 0xA6D3, 0x2532, 0xA6D4,
- 0x2533, 0xA6B3, 0x2534, 0xA6AA, 0x2535, 0xA6D5, 0x2536, 0xA6D6, 0x2537, 0xA6BA, 0x2538, 0xA6BF, 0x2539, 0xA6D7, 0x253A, 0xA6D8,
- 0x253B, 0xA6B5, 0x253C, 0xA6AB, 0x253D, 0xA6D9, 0x253E, 0xA6DA, 0x253F, 0xA6BB, 0x2540, 0xA6DB, 0x2541, 0xA6DC, 0x2542, 0xA6C0,
- 0x2543, 0xA6DD, 0x2544, 0xA6DE, 0x2545, 0xA6DF, 0x2546, 0xA6E0, 0x2547, 0xA6E1, 0x2548, 0xA6E2, 0x2549, 0xA6E3, 0x254A, 0xA6E4,
- 0x254B, 0xA6B6, 0x2592, 0xA2C6, 0x25A0, 0xA1E1, 0x25A1, 0xA1E0, 0x25A3, 0xA2C3, 0x25A4, 0xA2C7, 0x25A5, 0xA2C8, 0x25A6, 0xA2CB,
- 0x25A7, 0xA2CA, 0x25A8, 0xA2C9, 0x25A9, 0xA2CC, 0x25B2, 0xA1E3, 0x25B3, 0xA1E2, 0x25B6, 0xA2BA, 0x25B7, 0xA2B9, 0x25BC, 0xA1E5,
- 0x25BD, 0xA1E4, 0x25C0, 0xA2B8, 0x25C1, 0xA2B7, 0x25C6, 0xA1DF, 0x25C7, 0xA1DE, 0x25C8, 0xA2C2, 0x25CB, 0xA1DB, 0x25CE, 0xA1DD,
- 0x25CF, 0xA1DC, 0x25D0, 0xA2C4, 0x25D1, 0xA2C5, 0x2605, 0xA1DA, 0x2606, 0xA1D9, 0x260E, 0xA2CF, 0x260F, 0xA2CE, 0x261C, 0xA2D0,
- 0x261E, 0xA2D1, 0x2640, 0xA1CF, 0x2642, 0xA1CE, 0x2660, 0xA2BC, 0x2661, 0xA2BD, 0x2663, 0xA2C0, 0x2664, 0xA2BB, 0x2665, 0xA2BE,
- 0x2667, 0xA2BF, 0x2668, 0xA2CD, 0x2669, 0xA2DB, 0x266A, 0xA2DC, 0x266C, 0xA2DD, 0x266D, 0xA2DA, 0x3000, 0xA1A1, 0x3001, 0xA1A2,
- 0x3002, 0xA1A3, 0x3003, 0xA1A8, 0x3008, 0xA1B4, 0x3009, 0xA1B5, 0x300A, 0xA1B6, 0x300B, 0xA1B7, 0x300C, 0xA1B8, 0x300D, 0xA1B9,
- 0x300E, 0xA1BA, 0x300F, 0xA1BB, 0x3010, 0xA1BC, 0x3011, 0xA1BD, 0x3013, 0xA1EB, 0x3014, 0xA1B2, 0x3015, 0xA1B3, 0x3041, 0xAAA1,
- 0x3042, 0xAAA2, 0x3043, 0xAAA3, 0x3044, 0xAAA4, 0x3045, 0xAAA5, 0x3046, 0xAAA6, 0x3047, 0xAAA7, 0x3048, 0xAAA8, 0x3049, 0xAAA9,
- 0x304A, 0xAAAA, 0x304B, 0xAAAB, 0x304C, 0xAAAC, 0x304D, 0xAAAD, 0x304E, 0xAAAE, 0x304F, 0xAAAF, 0x3050, 0xAAB0, 0x3051, 0xAAB1,
- 0x3052, 0xAAB2, 0x3053, 0xAAB3, 0x3054, 0xAAB4, 0x3055, 0xAAB5, 0x3056, 0xAAB6, 0x3057, 0xAAB7, 0x3058, 0xAAB8, 0x3059, 0xAAB9,
- 0x305A, 0xAABA, 0x305B, 0xAABB, 0x305C, 0xAABC, 0x305D, 0xAABD, 0x305E, 0xAABE, 0x305F, 0xAABF, 0x3060, 0xAAC0, 0x3061, 0xAAC1,
- 0x3062, 0xAAC2, 0x3063, 0xAAC3, 0x3064, 0xAAC4, 0x3065, 0xAAC5, 0x3066, 0xAAC6, 0x3067, 0xAAC7, 0x3068, 0xAAC8, 0x3069, 0xAAC9,
- 0x306A, 0xAACA, 0x306B, 0xAACB, 0x306C, 0xAACC, 0x306D, 0xAACD, 0x306E, 0xAACE, 0x306F, 0xAACF, 0x3070, 0xAAD0, 0x3071, 0xAAD1,
- 0x3072, 0xAAD2, 0x3073, 0xAAD3, 0x3074, 0xAAD4, 0x3075, 0xAAD5, 0x3076, 0xAAD6, 0x3077, 0xAAD7, 0x3078, 0xAAD8, 0x3079, 0xAAD9,
- 0x307A, 0xAADA, 0x307B, 0xAADB, 0x307C, 0xAADC, 0x307D, 0xAADD, 0x307E, 0xAADE, 0x307F, 0xAADF, 0x3080, 0xAAE0, 0x3081, 0xAAE1,
- 0x3082, 0xAAE2, 0x3083, 0xAAE3, 0x3084, 0xAAE4, 0x3085, 0xAAE5, 0x3086, 0xAAE6, 0x3087, 0xAAE7, 0x3088, 0xAAE8, 0x3089, 0xAAE9,
- 0x308A, 0xAAEA, 0x308B, 0xAAEB, 0x308C, 0xAAEC, 0x308D, 0xAAED, 0x308E, 0xAAEE, 0x308F, 0xAAEF, 0x3090, 0xAAF0, 0x3091, 0xAAF1,
- 0x3092, 0xAAF2, 0x3093, 0xAAF3, 0x30A1, 0xABA1, 0x30A2, 0xABA2, 0x30A3, 0xABA3, 0x30A4, 0xABA4, 0x30A5, 0xABA5, 0x30A6, 0xABA6,
- 0x30A7, 0xABA7, 0x30A8, 0xABA8, 0x30A9, 0xABA9, 0x30AA, 0xABAA, 0x30AB, 0xABAB, 0x30AC, 0xABAC, 0x30AD, 0xABAD, 0x30AE, 0xABAE,
- 0x30AF, 0xABAF, 0x30B0, 0xABB0, 0x30B1, 0xABB1, 0x30B2, 0xABB2, 0x30B3, 0xABB3, 0x30B4, 0xABB4, 0x30B5, 0xABB5, 0x30B6, 0xABB6,
- 0x30B7, 0xABB7, 0x30B8, 0xABB8, 0x30B9, 0xABB9, 0x30BA, 0xABBA, 0x30BB, 0xABBB, 0x30BC, 0xABBC, 0x30BD, 0xABBD, 0x30BE, 0xABBE,
- 0x30BF, 0xABBF, 0x30C0, 0xABC0, 0x30C1, 0xABC1, 0x30C2, 0xABC2, 0x30C3, 0xABC3, 0x30C4, 0xABC4, 0x30C5, 0xABC5, 0x30C6, 0xABC6,
- 0x30C7, 0xABC7, 0x30C8, 0xABC8, 0x30C9, 0xABC9, 0x30CA, 0xABCA, 0x30CB, 0xABCB, 0x30CC, 0xABCC, 0x30CD, 0xABCD, 0x30CE, 0xABCE,
- 0x30CF, 0xABCF, 0x30D0, 0xABD0, 0x30D1, 0xABD1, 0x30D2, 0xABD2, 0x30D3, 0xABD3, 0x30D4, 0xABD4, 0x30D5, 0xABD5, 0x30D6, 0xABD6,
- 0x30D7, 0xABD7, 0x30D8, 0xABD8, 0x30D9, 0xABD9, 0x30DA, 0xABDA, 0x30DB, 0xABDB, 0x30DC, 0xABDC, 0x30DD, 0xABDD, 0x30DE, 0xABDE,
- 0x30DF, 0xABDF, 0x30E0, 0xABE0, 0x30E1, 0xABE1, 0x30E2, 0xABE2, 0x30E3, 0xABE3, 0x30E4, 0xABE4, 0x30E5, 0xABE5, 0x30E6, 0xABE6,
- 0x30E7, 0xABE7, 0x30E8, 0xABE8, 0x30E9, 0xABE9, 0x30EA, 0xABEA, 0x30EB, 0xABEB, 0x30EC, 0xABEC, 0x30ED, 0xABED, 0x30EE, 0xABEE,
- 0x30EF, 0xABEF, 0x30F0, 0xABF0, 0x30F1, 0xABF1, 0x30F2, 0xABF2, 0x30F3, 0xABF3, 0x30F4, 0xABF4, 0x30F5, 0xABF5, 0x30F6, 0xABF6,
- 0x3131, 0xA4A1, 0x3132, 0xA4A2, 0x3133, 0xA4A3, 0x3134, 0xA4A4, 0x3135, 0xA4A5, 0x3136, 0xA4A6, 0x3137, 0xA4A7, 0x3138, 0xA4A8,
- 0x3139, 0xA4A9, 0x313A, 0xA4AA, 0x313B, 0xA4AB, 0x313C, 0xA4AC, 0x313D, 0xA4AD, 0x313E, 0xA4AE, 0x313F, 0xA4AF, 0x3140, 0xA4B0,
- 0x3141, 0xA4B1, 0x3142, 0xA4B2, 0x3143, 0xA4B3, 0x3144, 0xA4B4, 0x3145, 0xA4B5, 0x3146, 0xA4B6, 0x3147, 0xA4B7, 0x3148, 0xA4B8,
- 0x3149, 0xA4B9, 0x314A, 0xA4BA, 0x314B, 0xA4BB, 0x314C, 0xA4BC, 0x314D, 0xA4BD, 0x314E, 0xA4BE, 0x314F, 0xA4BF, 0x3150, 0xA4C0,
- 0x3151, 0xA4C1, 0x3152, 0xA4C2, 0x3153, 0xA4C3, 0x3154, 0xA4C4, 0x3155, 0xA4C5, 0x3156, 0xA4C6, 0x3157, 0xA4C7, 0x3158, 0xA4C8,
- 0x3159, 0xA4C9, 0x315A, 0xA4CA, 0x315B, 0xA4CB, 0x315C, 0xA4CC, 0x315D, 0xA4CD, 0x315E, 0xA4CE, 0x315F, 0xA4CF, 0x3160, 0xA4D0,
- 0x3161, 0xA4D1, 0x3162, 0xA4D2, 0x3163, 0xA4D3, 0x3164, 0xA4D4, 0x3165, 0xA4D5, 0x3166, 0xA4D6, 0x3167, 0xA4D7, 0x3168, 0xA4D8,
- 0x3169, 0xA4D9, 0x316A, 0xA4DA, 0x316B, 0xA4DB, 0x316C, 0xA4DC, 0x316D, 0xA4DD, 0x316E, 0xA4DE, 0x316F, 0xA4DF, 0x3170, 0xA4E0,
- 0x3171, 0xA4E1, 0x3172, 0xA4E2, 0x3173, 0xA4E3, 0x3174, 0xA4E4, 0x3175, 0xA4E5, 0x3176, 0xA4E6, 0x3177, 0xA4E7, 0x3178, 0xA4E8,
- 0x3179, 0xA4E9, 0x317A, 0xA4EA, 0x317B, 0xA4EB, 0x317C, 0xA4EC, 0x317D, 0xA4ED, 0x317E, 0xA4EE, 0x317F, 0xA4EF, 0x3180, 0xA4F0,
- 0x3181, 0xA4F1, 0x3182, 0xA4F2, 0x3183, 0xA4F3, 0x3184, 0xA4F4, 0x3185, 0xA4F5, 0x3186, 0xA4F6, 0x3187, 0xA4F7, 0x3188, 0xA4F8,
- 0x3189, 0xA4F9, 0x318A, 0xA4FA, 0x318B, 0xA4FB, 0x318C, 0xA4FC, 0x318D, 0xA4FD, 0x318E, 0xA4FE, 0x3200, 0xA9B1, 0x3201, 0xA9B2,
- 0x3202, 0xA9B3, 0x3203, 0xA9B4, 0x3204, 0xA9B5, 0x3205, 0xA9B6, 0x3206, 0xA9B7, 0x3207, 0xA9B8, 0x3208, 0xA9B9, 0x3209, 0xA9BA,
- 0x320A, 0xA9BB, 0x320B, 0xA9BC, 0x320C, 0xA9BD, 0x320D, 0xA9BE, 0x320E, 0xA9BF, 0x320F, 0xA9C0, 0x3210, 0xA9C1, 0x3211, 0xA9C2,
- 0x3212, 0xA9C3, 0x3213, 0xA9C4, 0x3214, 0xA9C5, 0x3215, 0xA9C6, 0x3216, 0xA9C7, 0x3217, 0xA9C8, 0x3218, 0xA9C9, 0x3219, 0xA9CA,
- 0x321A, 0xA9CB, 0x321B, 0xA9CC, 0x321C, 0xA2DF, 0x3260, 0xA8B1, 0x3261, 0xA8B2, 0x3262, 0xA8B3, 0x3263, 0xA8B4, 0x3264, 0xA8B5,
- 0x3265, 0xA8B6, 0x3266, 0xA8B7, 0x3267, 0xA8B8, 0x3268, 0xA8B9, 0x3269, 0xA8BA, 0x326A, 0xA8BB, 0x326B, 0xA8BC, 0x326C, 0xA8BD,
- 0x326D, 0xA8BE, 0x326E, 0xA8BF, 0x326F, 0xA8C0, 0x3270, 0xA8C1, 0x3271, 0xA8C2, 0x3272, 0xA8C3, 0x3273, 0xA8C4, 0x3274, 0xA8C5,
- 0x3275, 0xA8C6, 0x3276, 0xA8C7, 0x3277, 0xA8C8, 0x3278, 0xA8C9, 0x3279, 0xA8CA, 0x327A, 0xA8CB, 0x327B, 0xA8CC, 0x327F, 0xA2DE,
- 0x3380, 0xA7C9, 0x3381, 0xA7CA, 0x3382, 0xA7CB, 0x3383, 0xA7CC, 0x3384, 0xA7CD, 0x3388, 0xA7BA, 0x3389, 0xA7BB, 0x338A, 0xA7DC,
- 0x338B, 0xA7DD, 0x338C, 0xA7DE, 0x338D, 0xA7B6, 0x338E, 0xA7B7, 0x338F, 0xA7B8, 0x3390, 0xA7D4, 0x3391, 0xA7D5, 0x3392, 0xA7D6,
- 0x3393, 0xA7D7, 0x3394, 0xA7D8, 0x3395, 0xA7A1, 0x3396, 0xA7A2, 0x3397, 0xA7A3, 0x3398, 0xA7A5, 0x3399, 0xA7AB, 0x339A, 0xA7AC,
- 0x339B, 0xA7AD, 0x339C, 0xA7AE, 0x339D, 0xA7AF, 0x339E, 0xA7B0, 0x339F, 0xA7B1, 0x33A0, 0xA7B2, 0x33A1, 0xA7B3, 0x33A2, 0xA7B4,
- 0x33A3, 0xA7A7, 0x33A4, 0xA7A8, 0x33A5, 0xA7A9, 0x33A6, 0xA7AA, 0x33A7, 0xA7BD, 0x33A8, 0xA7BE, 0x33A9, 0xA7E5, 0x33AA, 0xA7E6,
- 0x33AB, 0xA7E7, 0x33AC, 0xA7E8, 0x33AD, 0xA7E1, 0x33AE, 0xA7E2, 0x33AF, 0xA7E3, 0x33B0, 0xA7BF, 0x33B1, 0xA7C0, 0x33B2, 0xA7C1,
- 0x33B3, 0xA7C2, 0x33B4, 0xA7C3, 0x33B5, 0xA7C4, 0x33B6, 0xA7C5, 0x33B7, 0xA7C6, 0x33B8, 0xA7C7, 0x33B9, 0xA7C8, 0x33BA, 0xA7CE,
- 0x33BB, 0xA7CF, 0x33BC, 0xA7D0, 0x33BD, 0xA7D1, 0x33BE, 0xA7D2, 0x33BF, 0xA7D3, 0x33C0, 0xA7DA, 0x33C1, 0xA7DB, 0x33C2, 0xA2E3,
- 0x33C3, 0xA7EC, 0x33C4, 0xA7A6, 0x33C5, 0xA7E0, 0x33C6, 0xA7EF, 0x33C7, 0xA2E1, 0x33C8, 0xA7BC, 0x33C9, 0xA7ED, 0x33CA, 0xA7B5,
- 0x33CF, 0xA7B9, 0x33D0, 0xA7EA, 0x33D3, 0xA7EB, 0x33D6, 0xA7DF, 0x33D8, 0xA2E4, 0x33DB, 0xA7E4, 0x33DC, 0xA7EE, 0x33DD, 0xA7E9,
- 0x4E00, 0xECE9, 0x4E01, 0xEFCB, 0x4E03, 0xF6D2, 0x4E07, 0xD8B2, 0x4E08, 0xEDDB, 0x4E09, 0xDFB2, 0x4E0A, 0xDFBE, 0x4E0B, 0xF9BB,
- 0x4E0D, 0xDCF4, 0x4E11, 0xF5E4, 0x4E14, 0xF3A6, 0x4E15, 0xDDE0, 0x4E16, 0xE1A6, 0x4E18, 0xCEF8, 0x4E19, 0xDCB0, 0x4E1E, 0xE3AA,
- 0x4E2D, 0xF1E9, 0x4E32, 0xCDFA, 0x4E38, 0xFCAF, 0x4E39, 0xD3A1, 0x4E3B, 0xF1AB, 0x4E42, 0xE7D1, 0x4E43, 0xD2AC, 0x4E45, 0xCEF9,
- 0x4E4B, 0xF1FD, 0x4E4D, 0xDEBF, 0x4E4E, 0xFBBA, 0x4E4F, 0xF9B9, 0x4E56, 0xCED2, 0x4E58, 0xE3AB, 0x4E59, 0xEBE0, 0x4E5D, 0xCEFA,
- 0x4E5E, 0xCBF7, 0x4E5F, 0xE5A5, 0x4E6B, 0xCAE1, 0x4E6D, 0xD4CC, 0x4E73, 0xEAE1, 0x4E76, 0xDCE3, 0x4E77, 0xDFAD, 0x4E7E, 0xCBEB,
- 0x4E82, 0xD5AF, 0x4E86, 0xD6F5, 0x4E88, 0xE5F8, 0x4E8B, 0xDEC0, 0x4E8C, 0xECA3, 0x4E8E, 0xE9CD, 0x4E90, 0xEAA7, 0x4E91, 0xE9F6,
- 0x4E92, 0xFBBB, 0x4E94, 0xE7E9, 0x4E95, 0xEFCC, 0x4E98, 0xD0E6, 0x4E9B, 0xDEC1, 0x4E9E, 0xE4AC, 0x4EA1, 0xD8CC, 0x4EA2, 0xF9F1,
- 0x4EA4, 0xCEDF, 0x4EA5, 0xFAA4, 0x4EA6, 0xE6B2, 0x4EA8, 0xFAFB, 0x4EAB, 0xFABD, 0x4EAC, 0xCCC8, 0x4EAD, 0xEFCD, 0x4EAE, 0xD5D5,
- 0x4EB6, 0xD3A2, 0x4EBA, 0xECD1, 0x4EC0, 0xE4A7, 0x4EC1, 0xECD2, 0x4EC4, 0xF6B1, 0x4EC7, 0xCEFB, 0x4ECA, 0xD0D1, 0x4ECB, 0xCBBF,
- 0x4ECD, 0xEDA4, 0x4ED4, 0xEDA8, 0x4ED5, 0xDEC2, 0x4ED6, 0xF6E2, 0x4ED7, 0xEDDC, 0x4ED8, 0xDCF5, 0x4ED9, 0xE0B9, 0x4EDD, 0xD4CE,
- 0x4EDF, 0xF4B5, 0x4EE3, 0xD3DB, 0x4EE4, 0xD6B5, 0x4EE5, 0xECA4, 0x4EF0, 0xE4E6, 0x4EF2, 0xF1EA, 0x4EF6, 0xCBEC, 0x4EF7, 0xCBC0,
- 0x4EFB, 0xECF2, 0x4F01, 0xD0EA, 0x4F09, 0xF9F2, 0x4F0A, 0xECA5, 0x4F0B, 0xD0DF, 0x4F0D, 0xE7EA, 0x4F0E, 0xD0EB, 0x4F0F, 0xDCD1,
- 0x4F10, 0xDBE9, 0x4F11, 0xFDCC, 0x4F2F, 0xDBD7, 0x4F34, 0xDAE1, 0x4F36, 0xD6B6, 0x4F38, 0xE3DF, 0x4F3A, 0xDEC3, 0x4F3C, 0xDEC4,
- 0x4F3D, 0xCAA1, 0x4F43, 0xEEEC, 0x4F46, 0xD3A3, 0x4F47, 0xEEB7, 0x4F48, 0xF8CF, 0x4F4D, 0xEAC8, 0x4F4E, 0xEEB8, 0x4F4F, 0xF1AC,
- 0x4F50, 0xF1A5, 0x4F51, 0xE9CE, 0x4F55, 0xF9BC, 0x4F59, 0xE5F9, 0x4F5A, 0xECEA, 0x4F5B, 0xDDD6, 0x4F5C, 0xEDC2, 0x4F69, 0xF8A5,
- 0x4F6F, 0xE5BA, 0x4F70, 0xDBD8, 0x4F73, 0xCAA2, 0x4F76, 0xD1CD, 0x4F7A, 0xEEED, 0x4F7E, 0xECEB, 0x4F7F, 0xDEC5, 0x4F81, 0xE3E0,
- 0x4F83, 0xCAC9, 0x4F84, 0xF2E9, 0x4F86, 0xD5CE, 0x4F88, 0xF6B6, 0x4F8A, 0xCEC2, 0x4F8B, 0xD6C7, 0x4F8D, 0xE3B4, 0x4F8F, 0xF1AD,
- 0x4F91, 0xEAE2, 0x4F96, 0xD7C2, 0x4F98, 0xF3A7, 0x4F9B, 0xCDEA, 0x4F9D, 0xEBEE, 0x4FAE, 0xD9B2, 0x4FAF, 0xFDA5, 0x4FB5, 0xF6D5,
- 0x4FB6, 0xD5E2, 0x4FBF, 0xF8B5, 0x4FC2, 0xCCF5, 0x4FC3, 0xF5B5, 0x4FC4, 0xE4AD, 0x4FC9, 0xE7EB, 0x4FCA, 0xF1D5, 0x4FCE, 0xF0BB,
- 0x4FD1, 0xE9B5, 0x4FD3, 0xCCC9, 0x4FD4, 0xFAD5, 0x4FD7, 0xE1D4, 0x4FDA, 0xD7D6, 0x4FDD, 0xDCC1, 0x4FDF, 0xDEC6, 0x4FE0, 0xFAEF,
- 0x4FE1, 0xE3E1, 0x4FEE, 0xE1F3, 0x4FEF, 0xDCF6, 0x4FF1, 0xCEFC, 0x4FF3, 0xDBC4, 0x4FF5, 0xF8F1, 0x4FF8, 0xDCE4, 0x4FFA, 0xE5EF,
- 0x5002, 0xDCB1, 0x5006, 0xD5D6, 0x5009, 0xF3DA, 0x500B, 0xCBC1, 0x500D, 0xDBC3, 0x5011, 0xD9FA, 0x5012, 0xD3EE, 0x5016, 0xFAB8,
- 0x5019, 0xFDA6, 0x501A, 0xEBEF, 0x501C, 0xF4A6, 0x501E, 0xCCCA, 0x501F, 0xF3A8, 0x5021, 0xF3DB, 0x5023, 0xDBA7, 0x5024, 0xF6B7,
- 0x5026, 0xCFE6, 0x5027, 0xF0F2, 0x5028, 0xCBDA, 0x502A, 0xE7D2, 0x502B, 0xD7C3, 0x502C, 0xF6F0, 0x502D, 0xE8DE, 0x503B, 0xE5A6,
- 0x5043, 0xE5E7, 0x5047, 0xCAA3, 0x5048, 0xCCA7, 0x5049, 0xEAC9, 0x504F, 0xF8B6, 0x5055, 0xFAA5, 0x505A, 0xF1AE, 0x505C, 0xEFCE,
- 0x5065, 0xCBED, 0x5074, 0xF6B0, 0x5075, 0xEFCF, 0x5076, 0xE9CF, 0x5078, 0xF7DE, 0x5080, 0xCED3, 0x5085, 0xDCF7, 0x508D, 0xDBA8,
- 0x5091, 0xCBF8, 0x5098, 0xDFA1, 0x5099, 0xDDE1, 0x50AC, 0xF5CA, 0x50AD, 0xE9B6, 0x50B2, 0xE7EC, 0x50B3, 0xEEEE, 0x50B5, 0xF3F0,
- 0x50B7, 0xDFBF, 0x50BE, 0xCCCB, 0x50C5, 0xD0C1, 0x50C9, 0xF4D2, 0x50CA, 0xE0BA, 0x50CF, 0xDFC0, 0x50D1, 0xCEE0, 0x50D5, 0xDCD2,
- 0x50D6, 0xFDEA, 0x50DA, 0xD6F6, 0x50DE, 0xEACA, 0x50E5, 0xE8E9, 0x50E7, 0xE3AC, 0x50ED, 0xF3D0, 0x50F9, 0xCAA4, 0x50FB, 0xDBF8,
- 0x50FF, 0xDEC7, 0x5100, 0xEBF0, 0x5101, 0xF1D6, 0x5104, 0xE5E2, 0x5106, 0xCCCC, 0x5109, 0xCBFB, 0x5112, 0xEAE3, 0x511F, 0xDFC1,
- 0x5121, 0xD6ED, 0x512A, 0xE9D0, 0x5132, 0xEEB9, 0x5137, 0xD5E3, 0x513A, 0xD1D3, 0x513C, 0xE5F0, 0x5140, 0xE8B4, 0x5141, 0xEBC3,
- 0x5143, 0xEAAA, 0x5144, 0xFAFC, 0x5145, 0xF5F6, 0x5146, 0xF0BC, 0x5147, 0xFDD4, 0x5148, 0xE0BB, 0x5149, 0xCEC3, 0x514B, 0xD0BA,
- 0x514C, 0xF7BA, 0x514D, 0xD8F3, 0x514E, 0xF7CD, 0x5152, 0xE4AE, 0x515C, 0xD4DF, 0x5162, 0xD0E7, 0x5165, 0xECFD, 0x5167, 0xD2AE,
- 0x5168, 0xEEEF, 0x5169, 0xD5D7, 0x516A, 0xEAE4, 0x516B, 0xF8A2, 0x516C, 0xCDEB, 0x516D, 0xD7BF, 0x516E, 0xFBB1, 0x5171, 0xCDEC,
- 0x5175, 0xDCB2, 0x5176, 0xD0EC, 0x5177, 0xCEFD, 0x5178, 0xEEF0, 0x517C, 0xCCC2, 0x5180, 0xD0ED, 0x5186, 0xE5F7, 0x518A, 0xF3FC,
- 0x518D, 0xEEA2, 0x5192, 0xD9B3, 0x5195, 0xD8F4, 0x5197, 0xE9B7, 0x51A0, 0xCEAE, 0x51A5, 0xD9A2, 0x51AA, 0xD8F1, 0x51AC, 0xD4CF,
- 0x51B6, 0xE5A7, 0x51B7, 0xD5D2, 0x51BD, 0xD6A9, 0x51C4, 0xF4A2, 0x51C6, 0xF1D7, 0x51C9, 0xD5D8, 0x51CB, 0xF0BD, 0x51CC, 0xD7D0,
- 0x51CD, 0xD4D0, 0x51DC, 0xD7CF, 0x51DD, 0xEBEA, 0x51DE, 0xFDEB, 0x51E1, 0xDBED, 0x51F0, 0xFCC5, 0x51F1, 0xCBC2, 0x51F6, 0xFDD5,
- 0x51F8, 0xF4C8, 0x51F9, 0xE8EA, 0x51FA, 0xF5F3, 0x51FD, 0xF9DE, 0x5200, 0xD3EF, 0x5203, 0xECD3, 0x5206, 0xDDC2, 0x5207, 0xEFB7,
- 0x5208, 0xE7D4, 0x520A, 0xCACA, 0x520E, 0xD9FB, 0x5211, 0xFAFD, 0x5217, 0xD6AA, 0x521D, 0xF4F8, 0x5224, 0xF7F7, 0x5225, 0xDCAC,
- 0x5229, 0xD7D7, 0x522A, 0xDFA2, 0x522E, 0xCEBE, 0x5230, 0xD3F0, 0x5236, 0xF0A4, 0x5237, 0xE1EC, 0x5238, 0xCFE7, 0x5239, 0xF3CB,
- 0x523A, 0xEDA9, 0x523B, 0xCABE, 0x5243, 0xF4EF, 0x5247, 0xF6CE, 0x524A, 0xDEFB, 0x524B, 0xD0BB, 0x524C, 0xD5B7, 0x524D, 0xEEF1,
- 0x5254, 0xF4A8, 0x5256, 0xDCF8, 0x525B, 0xCBA7, 0x525D, 0xDACE, 0x5261, 0xE0E6, 0x5269, 0xEDA5, 0x526A, 0xEEF2, 0x526F, 0xDCF9,
- 0x5272, 0xF9DC, 0x5275, 0xF3DC, 0x527D, 0xF8F2, 0x527F, 0xF4F9, 0x5283, 0xFCF1, 0x5287, 0xD0BC, 0x5288, 0xDBF9, 0x5289, 0xD7B1,
- 0x528D, 0xCBFC, 0x5291, 0xF0A5, 0x5292, 0xCBFD, 0x529B, 0xD5F4, 0x529F, 0xCDED, 0x52A0, 0xCAA5, 0x52A3, 0xD6AB, 0x52A4, 0xD0C2,
- 0x52A9, 0xF0BE, 0x52AA, 0xD2BD, 0x52AB, 0xCCA4, 0x52BE, 0xFAB6, 0x52C1, 0xCCCD, 0x52C3, 0xDAFA, 0x52C5, 0xF6CF, 0x52C7, 0xE9B8,
- 0x52C9, 0xD8F5, 0x52CD, 0xCCCE, 0x52D2, 0xD7CD, 0x52D5, 0xD4D1, 0x52D6, 0xE9ED, 0x52D8, 0xCAEB, 0x52D9, 0xD9E2, 0x52DB, 0xFDB2,
- 0x52DD, 0xE3AD, 0x52DE, 0xD6CC, 0x52DF, 0xD9B4, 0x52E2, 0xE1A7, 0x52E3, 0xEED3, 0x52E4, 0xD0C3, 0x52F3, 0xFDB3, 0x52F5, 0xD5E4,
- 0x52F8, 0xCFE8, 0x52FA, 0xEDC3, 0x52FB, 0xD0B2, 0x52FE, 0xCEFE, 0x52FF, 0xDAA8, 0x5305, 0xF8D0, 0x5308, 0xFDD6, 0x530D, 0xF8D1,
- 0x530F, 0xF8D2, 0x5310, 0xDCD3, 0x5315, 0xDDE2, 0x5316, 0xFBF9, 0x5317, 0xDDC1, 0x5319, 0xE3B5, 0x5320, 0xEDDD, 0x5321, 0xCEC4,
- 0x5323, 0xCBA1, 0x532A, 0xDDE3, 0x532F, 0xFCDD, 0x5339, 0xF9AF, 0x533F, 0xD2FB, 0x5340, 0xCFA1, 0x5341, 0xE4A8, 0x5343, 0xF4B6,
- 0x5344, 0xECFE, 0x5347, 0xE3AE, 0x5348, 0xE7ED, 0x5349, 0xFDC1, 0x534A, 0xDAE2, 0x534D, 0xD8B3, 0x5351, 0xDDE4, 0x5352, 0xF0EF,
- 0x5353, 0xF6F1, 0x5354, 0xFAF0, 0x5357, 0xD1F5, 0x535A, 0xDACF, 0x535C, 0xDCD4, 0x535E, 0xDCA6, 0x5360, 0xEFBF, 0x5366, 0xCECF,
- 0x5368, 0xE0D9, 0x536F, 0xD9D6, 0x5370, 0xECD4, 0x5371, 0xEACB, 0x5374, 0xCABF, 0x5375, 0xD5B0, 0x5377, 0xCFE9, 0x537D, 0xF1ED,
- 0x537F, 0xCCCF, 0x5384, 0xE4F8, 0x5393, 0xE4ED, 0x5398, 0xD7D8, 0x539A, 0xFDA7, 0x539F, 0xEAAB, 0x53A0, 0xF6B2, 0x53A5, 0xCFF0,
- 0x53A6, 0xF9BD, 0x53AD, 0xE6F4, 0x53BB, 0xCBDB, 0x53C3, 0xF3D1, 0x53C8, 0xE9D1, 0x53C9, 0xF3A9, 0x53CA, 0xD0E0, 0x53CB, 0xE9D2,
- 0x53CD, 0xDAE3, 0x53D4, 0xE2D2, 0x53D6, 0xF6A2, 0x53D7, 0xE1F4, 0x53DB, 0xDAE4, 0x53E1, 0xE7D5, 0x53E2, 0xF5BF, 0x53E3, 0xCFA2,
- 0x53E4, 0xCDAF, 0x53E5, 0xCFA3, 0x53E9, 0xCDB0, 0x53EA, 0xF1FE, 0x53EB, 0xD0A3, 0x53EC, 0xE1AF, 0x53ED, 0xF8A3, 0x53EF, 0xCAA6,
- 0x53F0, 0xF7BB, 0x53F1, 0xF2EA, 0x53F2, 0xDEC8, 0x53F3, 0xE9D3, 0x53F8, 0xDEC9, 0x5403, 0xFDDE, 0x5404, 0xCAC0, 0x5408, 0xF9EA,
- 0x5409, 0xD1CE, 0x540A, 0xEED4, 0x540C, 0xD4D2, 0x540D, 0xD9A3, 0x540E, 0xFDA8, 0x540F, 0xD7D9, 0x5410, 0xF7CE, 0x5411, 0xFABE,
- 0x541B, 0xCFD6, 0x541D, 0xD7F0, 0x541F, 0xEBE1, 0x5420, 0xF8C5, 0x5426, 0xDCFA, 0x5429, 0xDDC3, 0x542B, 0xF9DF, 0x5433, 0xE7EF,
- 0x5438, 0xFDE5, 0x5439, 0xF6A3, 0x543B, 0xD9FC, 0x543C, 0xFDA9, 0x543E, 0xE7EE, 0x5442, 0xD5E5, 0x5448, 0xEFD0, 0x544A, 0xCDB1,
- 0x5451, 0xF7A2, 0x5468, 0xF1B2, 0x546A, 0xF1B1, 0x5471, 0xCDB2, 0x5473, 0xDAAB, 0x5475, 0xCAA7, 0x547B, 0xE3E2, 0x547C, 0xFBBC,
- 0x547D, 0xD9A4, 0x5480, 0xEEBA, 0x5486, 0xF8D3, 0x548C, 0xFBFA, 0x548E, 0xCFA4, 0x5490, 0xDCFB, 0x54A4, 0xF6E3, 0x54A8, 0xEDAA,
- 0x54AB, 0xF2A1, 0x54AC, 0xCEE1, 0x54B3, 0xFAA6, 0x54B8, 0xF9E0, 0x54BD, 0xECD6, 0x54C0, 0xE4EE, 0x54C1, 0xF9A1, 0x54C4, 0xFBEF,
- 0x54C8, 0xF9EB, 0x54C9, 0xEEA3, 0x54E1, 0xEAAC, 0x54E5, 0xCAA8, 0x54E8, 0xF4FA, 0x54ED, 0xCDD6, 0x54EE, 0xFCF6, 0x54F2, 0xF4C9,
- 0x54FA, 0xF8D4, 0x5504, 0xF8A6, 0x5506, 0xDECA, 0x5507, 0xF2C6, 0x550E, 0xD7DA, 0x5510, 0xD3D0, 0x551C, 0xD8C5, 0x552F, 0xEAE6,
- 0x5531, 0xF3DD, 0x5535, 0xE4DA, 0x553E, 0xF6E4, 0x5544, 0xF6F2, 0x5546, 0xDFC2, 0x554F, 0xD9FD, 0x5553, 0xCCF6, 0x5556, 0xD3BA,
- 0x555E, 0xE4AF, 0x5563, 0xF9E1, 0x557C, 0xF0A6, 0x5580, 0xCBD3, 0x5584, 0xE0BC, 0x5586, 0xF4CA, 0x5587, 0xD4FA, 0x5589, 0xFDAA,
- 0x558A, 0xF9E2, 0x5598, 0xF4B7, 0x5599, 0xFDC2, 0x559A, 0xFCB0, 0x559C, 0xFDEC, 0x559D, 0xCAE2, 0x55A7, 0xFDBD, 0x55A9, 0xEAE7,
- 0x55AA, 0xDFC3, 0x55AB, 0xD1D2, 0x55AC, 0xCEE2, 0x55AE, 0xD3A4, 0x55C5, 0xFDAB, 0x55C7, 0xDFE0, 0x55D4, 0xF2C7, 0x55DA, 0xE7F0,
- 0x55DC, 0xD0EE, 0x55DF, 0xF3AA, 0x55E3, 0xDECB, 0x55E4, 0xF6B8, 0x55FD, 0xE1F5, 0x55FE, 0xF1B3, 0x5606, 0xF7A3, 0x5609, 0xCAA9,
- 0x5614, 0xCFA5, 0x5617, 0xDFC4, 0x562F, 0xE1B0, 0x5632, 0xF0BF, 0x5634, 0xF6A4, 0x5636, 0xE3B6, 0x5653, 0xFAC6, 0x5668, 0xD0EF,
- 0x566B, 0xFDED, 0x5674, 0xDDC4, 0x5686, 0xFCF7, 0x56A5, 0xE6BF, 0x56AC, 0xDEAD, 0x56AE, 0xFABF, 0x56B4, 0xE5F1, 0x56BC, 0xEDC4,
- 0x56CA, 0xD2A5, 0x56CD, 0xFDEE, 0x56D1, 0xF5B6, 0x56DA, 0xE1F6, 0x56DB, 0xDECC, 0x56DE, 0xFCDE, 0x56E0, 0xECD7, 0x56F0, 0xCDDD,
- 0x56F9, 0xD6B7, 0x56FA, 0xCDB3, 0x5703, 0xF8D5, 0x5704, 0xE5D8, 0x5708, 0xCFEA, 0x570B, 0xCFD0, 0x570D, 0xEACC, 0x5712, 0xEAAE,
- 0x5713, 0xEAAD, 0x5716, 0xD3F1, 0x5718, 0xD3A5, 0x571F, 0xF7CF, 0x5728, 0xEEA4, 0x572D, 0xD0A4, 0x5730, 0xF2A2, 0x573B, 0xD0F0,
- 0x5740, 0xF2A3, 0x5742, 0xF7F8, 0x5747, 0xD0B3, 0x574A, 0xDBA9, 0x574D, 0xD3BB, 0x574E, 0xCAEC, 0x5750, 0xF1A6, 0x5751, 0xCBD5,
- 0x5761, 0xF7E7, 0x5764, 0xCDDE, 0x5766, 0xF7A4, 0x576A, 0xF8C0, 0x576E, 0xD3DD, 0x5770, 0xCCD0, 0x5775, 0xCFA6, 0x577C, 0xF6F3,
- 0x5782, 0xE1F7, 0x5788, 0xD3DC, 0x578B, 0xFAFE, 0x5793, 0xFAA7, 0x57A0, 0xEBD9, 0x57A2, 0xCFA7, 0x57A3, 0xEAAF, 0x57C3, 0xE4EF,
- 0x57C7, 0xE9B9, 0x57C8, 0xF1D8, 0x57CB, 0xD8D8, 0x57CE, 0xE0F2, 0x57DF, 0xE6B4, 0x57E0, 0xDCFC, 0x57F0, 0xF3F1, 0x57F4, 0xE3D0,
- 0x57F7, 0xF2FB, 0x57F9, 0xDBC6, 0x57FA, 0xD0F1, 0x57FC, 0xD0F2, 0x5800, 0xCFDC, 0x5802, 0xD3D1, 0x5805, 0xCCB1, 0x5806, 0xF7D8,
- 0x5808, 0xCBA8, 0x5809, 0xEBBC, 0x580A, 0xE4BE, 0x581E, 0xF4DC, 0x5821, 0xDCC2, 0x5824, 0xF0A7, 0x5827, 0xE6C0, 0x582A, 0xCAED,
- 0x582F, 0xE8EB, 0x5830, 0xE5E8, 0x5831, 0xDCC3, 0x5834, 0xEDDE, 0x5835, 0xD3F2, 0x583A, 0xCCF7, 0x584A, 0xCED4, 0x584B, 0xE7AB,
- 0x584F, 0xCBC3, 0x5851, 0xE1B1, 0x5854, 0xF7B2, 0x5857, 0xD3F3, 0x5858, 0xD3D2, 0x585A, 0xF5C0, 0x585E, 0xDFDD, 0x5861, 0xEEF3,
- 0x5862, 0xE7F1, 0x5864, 0xFDB4, 0x5875, 0xF2C8, 0x5879, 0xF3D2, 0x587C, 0xEEF4, 0x587E, 0xE2D3, 0x5883, 0xCCD1, 0x5885, 0xDFEA,
- 0x5889, 0xE9BA, 0x5893, 0xD9D7, 0x589C, 0xF5CD, 0x589E, 0xF1F2, 0x589F, 0xFAC7, 0x58A8, 0xD9F8, 0x58A9, 0xD4C2, 0x58AE, 0xF6E5,
- 0x58B3, 0xDDC5, 0x58BA, 0xE7F2, 0x58BB, 0xEDDF, 0x58BE, 0xCACB, 0x58C1, 0xDBFA, 0x58C5, 0xE8B5, 0x58C7, 0xD3A6, 0x58CE, 0xFDB5,
- 0x58D1, 0xF9C9, 0x58D3, 0xE4E2, 0x58D5, 0xFBBD, 0x58D8, 0xD7A4, 0x58D9, 0xCEC5, 0x58DE, 0xCED5, 0x58DF, 0xD6E6, 0x58E4, 0xE5BD,
- 0x58EB, 0xDECD, 0x58EC, 0xECF3, 0x58EF, 0xEDE0, 0x58F9, 0xECEC, 0x58FA, 0xFBBE, 0x58FB, 0xDFEB, 0x58FD, 0xE1F8, 0x590F, 0xF9BE,
- 0x5914, 0xD0F3, 0x5915, 0xE0AA, 0x5916, 0xE8E2, 0x5919, 0xE2D4, 0x591A, 0xD2FD, 0x591C, 0xE5A8, 0x5922, 0xD9D3, 0x5927, 0xD3DE,
- 0x5929, 0xF4B8, 0x592A, 0xF7BC, 0x592B, 0xDCFD, 0x592D, 0xE8EC, 0x592E, 0xE4E7, 0x5931, 0xE3F7, 0x5937, 0xECA8, 0x593E, 0xFAF1,
- 0x5944, 0xE5F2, 0x5947, 0xD0F4, 0x5948, 0xD2AF, 0x5949, 0xDCE5, 0x594E, 0xD0A5, 0x594F, 0xF1B4, 0x5950, 0xFCB1, 0x5951, 0xCCF8,
- 0x5954, 0xDDC6, 0x5955, 0xFAD1, 0x5957, 0xF7DF, 0x595A, 0xFAA8, 0x5960, 0xEEF5, 0x5962, 0xDECE, 0x5967, 0xE7F3, 0x596A, 0xF7AC,
- 0x596B, 0xEBC4, 0x596C, 0xEDE1, 0x596D, 0xE0AB, 0x596E, 0xDDC7, 0x5973, 0xD2B3, 0x5974, 0xD2BF, 0x5978, 0xCACC, 0x597D, 0xFBBF,
- 0x5982, 0xE5FD, 0x5983, 0xDDE5, 0x5984, 0xD8CD, 0x598A, 0xECF4, 0x5993, 0xD0F5, 0x5996, 0xE8ED, 0x5997, 0xD0D2, 0x5999, 0xD9D8,
- 0x59A5, 0xF6E6, 0x59A8, 0xDBAA, 0x59AC, 0xF7E0, 0x59B9, 0xD8D9, 0x59BB, 0xF4A3, 0x59BE, 0xF4DD, 0x59C3, 0xEFD1, 0x59C6, 0xD9B5,
- 0x59C9, 0xEDAB, 0x59CB, 0xE3B7, 0x59D0, 0xEEBB, 0x59D1, 0xCDB4, 0x59D3, 0xE0F3, 0x59D4, 0xEACD, 0x59D9, 0xECF5, 0x59DA, 0xE8EE,
- 0x59DC, 0xCBA9, 0x59DD, 0xF1AF, 0x59E6, 0xCACD, 0x59E8, 0xECA9, 0x59EA, 0xF2EB, 0x59EC, 0xFDEF, 0x59EE, 0xF9F3, 0x59F8, 0xE6C1,
- 0x59FB, 0xECD8, 0x59FF, 0xEDAC, 0x5A01, 0xEACE, 0x5A03, 0xE8DF, 0x5A11, 0xDECF, 0x5A18, 0xD2A6, 0x5A1B, 0xE7F4, 0x5A1C, 0xD1D6,
- 0x5A1F, 0xE6C2, 0x5A20, 0xE3E3, 0x5A25, 0xE4B0, 0x5A29, 0xD8B4, 0x5A36, 0xF6A5, 0x5A3C, 0xF3DE, 0x5A41, 0xD7A5, 0x5A46, 0xF7E8,
- 0x5A49, 0xE8C6, 0x5A5A, 0xFBE6, 0x5A62, 0xDDE6, 0x5A66, 0xDCFE, 0x5A92, 0xD8DA, 0x5A9A, 0xDAAC, 0x5A9B, 0xEAB0, 0x5AA4, 0xE3B8,
- 0x5AC1, 0xCAAA, 0x5AC2, 0xE1F9, 0x5AC4, 0xEAB1, 0x5AC9, 0xF2EC, 0x5ACC, 0xFAEE, 0x5AE1, 0xEED5, 0x5AE6, 0xF9F4, 0x5AE9, 0xD2EC,
- 0x5B05, 0xFBFB, 0x5B09, 0xFDF0, 0x5B0B, 0xE0BD, 0x5B0C, 0xCEE3, 0x5B16, 0xF8C6, 0x5B2A, 0xDEAE, 0x5B40, 0xDFC5, 0x5B43, 0xE5BE,
- 0x5B50, 0xEDAD, 0x5B51, 0xFAEA, 0x5B54, 0xCDEE, 0x5B55, 0xEDA6, 0x5B57, 0xEDAE, 0x5B58, 0xF0ED, 0x5B5A, 0xDDA1, 0x5B5C, 0xEDAF,
- 0x5B5D, 0xFCF8, 0x5B5F, 0xD8EB, 0x5B63, 0xCCF9, 0x5B64, 0xCDB5, 0x5B69, 0xFAA9, 0x5B6B, 0xE1DD, 0x5B70, 0xE2D5, 0x5B71, 0xEDCF,
- 0x5B75, 0xDDA2, 0x5B78, 0xF9CA, 0x5B7A, 0xEAE8, 0x5B7C, 0xE5ED, 0x5B85, 0xD3EB, 0x5B87, 0xE9D4, 0x5B88, 0xE1FA, 0x5B89, 0xE4CC,
- 0x5B8B, 0xE1E4, 0x5B8C, 0xE8C7, 0x5B8F, 0xCEDB, 0x5B93, 0xDCD5, 0x5B95, 0xF7B5, 0x5B96, 0xFCF3, 0x5B97, 0xF0F3, 0x5B98, 0xCEAF,
- 0x5B99, 0xF1B5, 0x5B9A, 0xEFD2, 0x5B9B, 0xE8C8, 0x5B9C, 0xEBF1, 0x5BA2, 0xCBD4, 0x5BA3, 0xE0BE, 0x5BA4, 0xE3F8, 0x5BA5, 0xEAE9,
- 0x5BA6, 0xFCB2, 0x5BAC, 0xE0F4, 0x5BAE, 0xCFE0, 0x5BB0, 0xEEA5, 0x5BB3, 0xFAAA, 0x5BB4, 0xE6C3, 0x5BB5, 0xE1B2, 0x5BB6, 0xCAAB,
- 0x5BB8, 0xE3E4, 0x5BB9, 0xE9BB, 0x5BBF, 0xE2D6, 0x5BC0, 0xF3F2, 0x5BC2, 0xEED6, 0x5BC3, 0xEAB2, 0x5BC4, 0xD0F6, 0x5BC5, 0xECD9,
- 0x5BC6, 0xDACB, 0x5BC7, 0xCFA8, 0x5BCC, 0xDDA3, 0x5BD0, 0xD8DB, 0x5BD2, 0xF9CE, 0x5BD3, 0xE9D5, 0x5BD4, 0xE3D1, 0x5BD7, 0xD2BC,
- 0x5BDE, 0xD8AC, 0x5BDF, 0xF3CC, 0x5BE1, 0xCDFB, 0x5BE2, 0xF6D6, 0x5BE4, 0xE7F5, 0x5BE5, 0xE8EF, 0x5BE6, 0xE3F9, 0x5BE7, 0xD2BB,
- 0x5BE8, 0xF3F3, 0x5BE9, 0xE3FB, 0x5BEB, 0xDED0, 0x5BEC, 0xCEB0, 0x5BEE, 0xD6F7, 0x5BEF, 0xF1D9, 0x5BF5, 0xF5C1, 0x5BF6, 0xDCC4,
- 0x5BF8, 0xF5BB, 0x5BFA, 0xDED1, 0x5C01, 0xDCE6, 0x5C04, 0xDED2, 0x5C07, 0xEDE2, 0x5C08, 0xEEF6, 0x5C09, 0xEACF, 0x5C0A, 0xF0EE,
- 0x5C0B, 0xE3FC, 0x5C0D, 0xD3DF, 0x5C0E, 0xD3F4, 0x5C0F, 0xE1B3, 0x5C11, 0xE1B4, 0x5C16, 0xF4D3, 0x5C19, 0xDFC6, 0x5C24, 0xE9D6,
- 0x5C28, 0xDBAB, 0x5C31, 0xF6A6, 0x5C38, 0xE3B9, 0x5C39, 0xEBC5, 0x5C3A, 0xF4A9, 0x5C3B, 0xCDB6, 0x5C3C, 0xD2F9, 0x5C3E, 0xDAAD,
- 0x5C3F, 0xD2E3, 0x5C40, 0xCFD1, 0x5C45, 0xCBDC, 0x5C46, 0xCCFA, 0x5C48, 0xCFDD, 0x5C4B, 0xE8A9, 0x5C4D, 0xE3BB, 0x5C4E, 0xE3BA,
- 0x5C51, 0xE0DA, 0x5C55, 0xEEF7, 0x5C5B, 0xDCB3, 0x5C60, 0xD3F5, 0x5C62, 0xD7A6, 0x5C64, 0xF6B5, 0x5C65, 0xD7DB, 0x5C6C, 0xE1D5,
- 0x5C6F, 0xD4EA, 0x5C71, 0xDFA3, 0x5C79, 0xFDDF, 0x5C90, 0xD0F7, 0x5C91, 0xEDD4, 0x5CA1, 0xCBAA, 0x5CA9, 0xE4DB, 0x5CAB, 0xE1FB,
- 0x5CAC, 0xCBA2, 0x5CB1, 0xD3E0, 0x5CB3, 0xE4BF, 0x5CB5, 0xFBC0, 0x5CB7, 0xDABE, 0x5CB8, 0xE4CD, 0x5CBA, 0xD6B9, 0x5CBE, 0xEFC0,
- 0x5CC0, 0xE1FC, 0x5CD9, 0xF6B9, 0x5CE0, 0xDFC7, 0x5CE8, 0xE4B1, 0x5CEF, 0xDCE7, 0x5CF0, 0xDCE8, 0x5CF4, 0xFAD6, 0x5CF6, 0xD3F6,
- 0x5CFB, 0xF1DA, 0x5CFD, 0xFAF2, 0x5D07, 0xE2FD, 0x5D0D, 0xD5CF, 0x5D0E, 0xD0F8, 0x5D11, 0xCDDF, 0x5D14, 0xF5CB, 0x5D16, 0xE4F0,
- 0x5D17, 0xCBAB, 0x5D19, 0xD7C4, 0x5D27, 0xE2FE, 0x5D29, 0xDDDA, 0x5D4B, 0xDAAE, 0x5D4C, 0xCAEE, 0x5D50, 0xD5B9, 0x5D69, 0xE3A1,
- 0x5D6C, 0xE8E3, 0x5D6F, 0xF3AB, 0x5D87, 0xCFA9, 0x5D8B, 0xD3F7, 0x5D9D, 0xD4F1, 0x5DA0, 0xCEE4, 0x5DA2, 0xE8F2, 0x5DAA, 0xE5F5,
- 0x5DB8, 0xE7AE, 0x5DBA, 0xD6BA, 0x5DBC, 0xDFEC, 0x5DBD, 0xE4C0, 0x5DCD, 0xE8E4, 0x5DD2, 0xD8B5, 0x5DD6, 0xE4DC, 0x5DDD, 0xF4B9,
- 0x5DDE, 0xF1B6, 0x5DE1, 0xE2DE, 0x5DE2, 0xE1B5, 0x5DE5, 0xCDEF, 0x5DE6, 0xF1A7, 0x5DE7, 0xCEE5, 0x5DE8, 0xCBDD, 0x5DEB, 0xD9E3,
- 0x5DEE, 0xF3AC, 0x5DF1, 0xD0F9, 0x5DF2, 0xECAB, 0x5DF3, 0xDED3, 0x5DF4, 0xF7E9, 0x5DF7, 0xF9F5, 0x5DFD, 0xE1DE, 0x5DFE, 0xCBEE,
- 0x5E02, 0xE3BC, 0x5E03, 0xF8D6, 0x5E06, 0xDBEE, 0x5E0C, 0xFDF1, 0x5E11, 0xF7B6, 0x5E16, 0xF4DE, 0x5E19, 0xF2ED, 0x5E1B, 0xDBD9,
- 0x5E1D, 0xF0A8, 0x5E25, 0xE1FD, 0x5E2B, 0xDED4, 0x5E2D, 0xE0AC, 0x5E33, 0xEDE3, 0x5E36, 0xD3E1, 0x5E38, 0xDFC8, 0x5E3D, 0xD9B6,
- 0x5E3F, 0xFDAC, 0x5E40, 0xEFD3, 0x5E44, 0xE4C1, 0x5E45, 0xF8EB, 0x5E47, 0xDBAC, 0x5E4C, 0xFCC6, 0x5E55, 0xD8AD, 0x5E5F, 0xF6BA,
- 0x5E61, 0xDBDF, 0x5E62, 0xD3D3, 0x5E63, 0xF8C7, 0x5E72, 0xCACE, 0x5E73, 0xF8C1, 0x5E74, 0xD2B4, 0x5E77, 0xDCB4, 0x5E78, 0xFAB9,
- 0x5E79, 0xCACF, 0x5E7B, 0xFCB3, 0x5E7C, 0xEAEA, 0x5E7D, 0xEAEB, 0x5E7E, 0xD0FA, 0x5E84, 0xEDE4, 0x5E87, 0xDDE7, 0x5E8A, 0xDFC9,
- 0x5E8F, 0xDFED, 0x5E95, 0xEEBC, 0x5E97, 0xEFC1, 0x5E9A, 0xCCD2, 0x5E9C, 0xDDA4, 0x5EA0, 0xDFCA, 0x5EA6, 0xD3F8, 0x5EA7, 0xF1A8,
- 0x5EAB, 0xCDB7, 0x5EAD, 0xEFD4, 0x5EB5, 0xE4DD, 0x5EB6, 0xDFEE, 0x5EB7, 0xCBAC, 0x5EB8, 0xE9BC, 0x5EBE, 0xEAEC, 0x5EC2, 0xDFCB,
- 0x5EC8, 0xF9BF, 0x5EC9, 0xD6AF, 0x5ECA, 0xD5C6, 0x5ED0, 0xCFAA, 0x5ED3, 0xCEA9, 0x5ED6, 0xD6F8, 0x5EDA, 0xF1B7, 0x5EDB, 0xEEF8,
- 0x5EDF, 0xD9D9, 0x5EE0, 0xF3DF, 0x5EE2, 0xF8C8, 0x5EE3, 0xCEC6, 0x5EEC, 0xD5E6, 0x5EF3, 0xF4E6, 0x5EF6, 0xE6C5, 0x5EF7, 0xEFD5,
- 0x5EFA, 0xCBEF, 0x5EFB, 0xFCDF, 0x5F01, 0xDCA7, 0x5F04, 0xD6E7, 0x5F0A, 0xF8C9, 0x5F0F, 0xE3D2, 0x5F11, 0xE3BD, 0x5F13, 0xCFE1,
- 0x5F14, 0xF0C0, 0x5F15, 0xECDA, 0x5F17, 0xDDD7, 0x5F18, 0xFBF0, 0x5F1B, 0xECAC, 0x5F1F, 0xF0A9, 0x5F26, 0xFAD7, 0x5F27, 0xFBC1,
- 0x5F29, 0xD2C0, 0x5F31, 0xE5B0, 0x5F35, 0xEDE5, 0x5F3A, 0xCBAD, 0x5F3C, 0xF9B0, 0x5F48, 0xF7A5, 0x5F4A, 0xCBAE, 0x5F4C, 0xDAAF,
- 0x5F4E, 0xD8B6, 0x5F56, 0xD3A7, 0x5F57, 0xFBB2, 0x5F59, 0xFDC4, 0x5F5B, 0xECAD, 0x5F62, 0xFBA1, 0x5F66, 0xE5E9, 0x5F67, 0xE9EE,
- 0x5F69, 0xF3F4, 0x5F6A, 0xF8F3, 0x5F6B, 0xF0C1, 0x5F6C, 0xDEAF, 0x5F6D, 0xF8B0, 0x5F70, 0xF3E0, 0x5F71, 0xE7AF, 0x5F77, 0xDBAD,
- 0x5F79, 0xE6B5, 0x5F7C, 0xF9A8, 0x5F7F, 0xDDD8, 0x5F80, 0xE8D9, 0x5F81, 0xEFD6, 0x5F85, 0xD3E2, 0x5F87, 0xE2DF, 0x5F8A, 0xFCE0,
- 0x5F8B, 0xD7C8, 0x5F8C, 0xFDAD, 0x5F90, 0xDFEF, 0x5F91, 0xCCD3, 0x5F92, 0xD3F9, 0x5F97, 0xD4F0, 0x5F98, 0xDBC7, 0x5F99, 0xDED5,
- 0x5F9E, 0xF0F4, 0x5FA0, 0xD5D0, 0x5FA1, 0xE5D9, 0x5FA8, 0xFCC7, 0x5FA9, 0xDCD6, 0x5FAA, 0xE2E0, 0x5FAE, 0xDAB0, 0x5FB5, 0xF3A3,
- 0x5FB7, 0xD3EC, 0x5FB9, 0xF4CB, 0x5FBD, 0xFDC5, 0x5FC3, 0xE3FD, 0x5FC5, 0xF9B1, 0x5FCC, 0xD0FB, 0x5FCD, 0xECDB, 0x5FD6, 0xF5BC,
- 0x5FD7, 0xF2A4, 0x5FD8, 0xD8CE, 0x5FD9, 0xD8CF, 0x5FE0, 0xF5F7, 0x5FEB, 0xF6E1, 0x5FF5, 0xD2B7, 0x5FFD, 0xFBEC, 0x5FFF, 0xDDC8,
- 0x600F, 0xE4E8, 0x6012, 0xD2C1, 0x6016, 0xF8D7, 0x601C, 0xD6BB, 0x601D, 0xDED6, 0x6020, 0xF7BD, 0x6021, 0xECAE, 0x6025, 0xD0E1,
- 0x6027, 0xE0F5, 0x6028, 0xEAB3, 0x602A, 0xCED6, 0x602F, 0xCCA5, 0x6041, 0xECF6, 0x6042, 0xE2E1, 0x6043, 0xE3BE, 0x604D, 0xFCC8,
- 0x6050, 0xCDF0, 0x6052, 0xF9F6, 0x6055, 0xDFF0, 0x6059, 0xE5BF, 0x605D, 0xCEBF, 0x6062, 0xFCE1, 0x6063, 0xEDB0, 0x6064, 0xFDD1,
- 0x6065, 0xF6BB, 0x6068, 0xF9CF, 0x6069, 0xEBDA, 0x606A, 0xCAC1, 0x606C, 0xD2B8, 0x606D, 0xCDF1, 0x606F, 0xE3D3, 0x6070, 0xFDE6,
- 0x6085, 0xE6ED, 0x6089, 0xE3FA, 0x608C, 0xF0AA, 0x608D, 0xF9D0, 0x6094, 0xFCE2, 0x6096, 0xF8A7, 0x609A, 0xE1E5, 0x609B, 0xEEF9,
- 0x609F, 0xE7F6, 0x60A0, 0xEAED, 0x60A3, 0xFCB4, 0x60A4, 0xF5C2, 0x60A7, 0xD7DC, 0x60B0, 0xF0F5, 0x60B2, 0xDDE8, 0x60B3, 0xD3ED,
- 0x60B4, 0xF5FC, 0x60B6, 0xDABF, 0x60B8, 0xCCFB, 0x60BC, 0xD3FA, 0x60BD, 0xF4A4, 0x60C5, 0xEFD7, 0x60C7, 0xD4C3, 0x60D1, 0xFBE3,
- 0x60DA, 0xFBED, 0x60DC, 0xE0AD, 0x60DF, 0xEAEE, 0x60E0, 0xFBB3, 0x60E1, 0xE4C2, 0x60F0, 0xF6E7, 0x60F1, 0xD2DD, 0x60F3, 0xDFCC,
- 0x60F6, 0xFCC9, 0x60F9, 0xE5A9, 0x60FA, 0xE0F6, 0x60FB, 0xF6B3, 0x6101, 0xE1FE, 0x6106, 0xCBF0, 0x6108, 0xEAEF, 0x6109, 0xEAF0,
- 0x610D, 0xDAC0, 0x610E, 0xF8B4, 0x610F, 0xEBF2, 0x6115, 0xE4C3, 0x611A, 0xE9D7, 0x611B, 0xE4F1, 0x611F, 0xCAEF, 0x6127, 0xCED7,
- 0x6130, 0xFCCA, 0x6134, 0xF3E1, 0x6137, 0xCBC4, 0x613C, 0xE3E5, 0x613E, 0xCBC5, 0x613F, 0xEAB4, 0x6142, 0xE9BD, 0x6144, 0xD7C9,
- 0x6147, 0xEBDB, 0x6148, 0xEDB1, 0x614A, 0xCCC3, 0x614B, 0xF7BE, 0x614C, 0xFCCB, 0x6153, 0xF8F4, 0x6155, 0xD9B7, 0x6158, 0xF3D3,
- 0x6159, 0xF3D4, 0x615D, 0xF7E4, 0x615F, 0xF7D1, 0x6162, 0xD8B7, 0x6163, 0xCEB1, 0x6164, 0xCAC2, 0x6167, 0xFBB4, 0x6168, 0xCBC6,
- 0x616B, 0xF0F6, 0x616E, 0xD5E7, 0x6170, 0xEAD0, 0x6176, 0xCCD4, 0x6177, 0xCBAF, 0x617D, 0xF4AA, 0x617E, 0xE9AF, 0x6181, 0xF5C3,
- 0x6182, 0xE9D8, 0x618A, 0xDDE9, 0x618E, 0xF1F3, 0x6190, 0xD5FB, 0x6191, 0xDEBB, 0x6194, 0xF4FB, 0x6198, 0xFDF3, 0x6199, 0xFDF2,
- 0x619A, 0xF7A6, 0x61A4, 0xDDC9, 0x61A7, 0xD4D3, 0x61A9, 0xCCA8, 0x61AB, 0xDAC1, 0x61AC, 0xCCD5, 0x61AE, 0xD9E4, 0x61B2, 0xFACA,
- 0x61B6, 0xE5E3, 0x61BA, 0xD3BC, 0x61BE, 0xCAF0, 0x61C3, 0xD0C4, 0x61C7, 0xCAD0, 0x61C8, 0xFAAB, 0x61C9, 0xEBEB, 0x61CA, 0xE7F8,
- 0x61CB, 0xD9E5, 0x61E6, 0xD1D7, 0x61F2, 0xF3A4, 0x61F6, 0xD4FB, 0x61F7, 0xFCE3, 0x61F8, 0xFAD8, 0x61FA, 0xF3D5, 0x61FC, 0xCFAB,
- 0x61FF, 0xEBF3, 0x6200, 0xD5FC, 0x6207, 0xD3D4, 0x6208, 0xCDFC, 0x620A, 0xD9E6, 0x620C, 0xE2F9, 0x620D, 0xE2A1, 0x620E, 0xEBD4,
- 0x6210, 0xE0F7, 0x6211, 0xE4B2, 0x6212, 0xCCFC, 0x6216, 0xFBE4, 0x621A, 0xF4AB, 0x621F, 0xD0BD, 0x6221, 0xCAF1, 0x622A, 0xEFB8,
- 0x622E, 0xD7C0, 0x6230, 0xEEFA, 0x6231, 0xFDF4, 0x6234, 0xD3E3, 0x6236, 0xFBC2, 0x623E, 0xD5E8, 0x623F, 0xDBAE, 0x6240, 0xE1B6,
- 0x6241, 0xF8B7, 0x6247, 0xE0BF, 0x6248, 0xFBC3, 0x6249, 0xDDEA, 0x624B, 0xE2A2, 0x624D, 0xEEA6, 0x6253, 0xF6E8, 0x6258, 0xF6F5,
- 0x626E, 0xDDCA, 0x6271, 0xD0E2, 0x6276, 0xDDA6, 0x6279, 0xDDEB, 0x627C, 0xE4F9, 0x627F, 0xE3AF, 0x6280, 0xD0FC, 0x6284, 0xF4FC,
- 0x6289, 0xCCBC, 0x628A, 0xF7EA, 0x6291, 0xE5E4, 0x6292, 0xDFF1, 0x6295, 0xF7E1, 0x6297, 0xF9F7, 0x6298, 0xEFB9, 0x629B, 0xF8D8,
- 0x62AB, 0xF9A9, 0x62B1, 0xF8D9, 0x62B5, 0xEEBD, 0x62B9, 0xD8C6, 0x62BC, 0xE4E3, 0x62BD, 0xF5CE, 0x62C2, 0xDDD9, 0x62C7, 0xD9E7,
- 0x62C8, 0xD2B9, 0x62C9, 0xD5C3, 0x62CC, 0xDAE5, 0x62CD, 0xDAD0, 0x62CF, 0xD1D9, 0x62D0, 0xCED8, 0x62D2, 0xCBDE, 0x62D3, 0xF4AC,
- 0x62D4, 0xDAFB, 0x62D6, 0xF6E9, 0x62D7, 0xE8F3, 0x62D8, 0xCFAC, 0x62D9, 0xF0F0, 0x62DB, 0xF4FD, 0x62DC, 0xDBC8, 0x62EC, 0xCEC0,
- 0x62ED, 0xE3D4, 0x62EE, 0xD1CF, 0x62EF, 0xF1F5, 0x62F1, 0xCDF2, 0x62F3, 0xCFEB, 0x62F7, 0xCDB8, 0x62FE, 0xE3A6, 0x62FF, 0xD1DA,
- 0x6301, 0xF2A5, 0x6307, 0xF2A6, 0x6309, 0xE4CE, 0x6311, 0xD3FB, 0x632B, 0xF1A9, 0x632F, 0xF2C9, 0x633A, 0xEFD8, 0x633B, 0xE6C9,
- 0x633D, 0xD8B8, 0x633E, 0xFAF3, 0x6349, 0xF3B5, 0x634C, 0xF8A4, 0x634F, 0xD1F3, 0x6350, 0xE6C8, 0x6355, 0xF8DA, 0x6367, 0xDCE9,
- 0x6368, 0xDED7, 0x636E, 0xCBDF, 0x6372, 0xCFEC, 0x6377, 0xF4DF, 0x637A, 0xD1F4, 0x637B, 0xD2BA, 0x637F, 0xDFF2, 0x6383, 0xE1B7,
- 0x6388, 0xE2A3, 0x6389, 0xD3FC, 0x638C, 0xEDE6, 0x6392, 0xDBC9, 0x6396, 0xE4FA, 0x6398, 0xCFDE, 0x639B, 0xCED0, 0x63A0, 0xD5D3,
- 0x63A1, 0xF3F5, 0x63A2, 0xF7AE, 0x63A5, 0xEFC8, 0x63A7, 0xCDF3, 0x63A8, 0xF5CF, 0x63A9, 0xE5F3, 0x63AA, 0xF0C2, 0x63C0, 0xCAD1,
- 0x63C4, 0xEAF1, 0x63C6, 0xD0A6, 0x63CF, 0xD9DA, 0x63D0, 0xF0AB, 0x63D6, 0xEBE7, 0x63DA, 0xE5C0, 0x63DB, 0xFCB5, 0x63E1, 0xE4C4,
- 0x63ED, 0xCCA9, 0x63EE, 0xFDC6, 0x63F4, 0xEAB5, 0x63F6, 0xE5AA, 0x63F7, 0xDFBA, 0x640D, 0xE1DF, 0x640F, 0xDAD1, 0x6414, 0xE1B8,
- 0x6416, 0xE8F4, 0x6417, 0xD3FD, 0x641C, 0xE2A4, 0x6422, 0xF2CA, 0x642C, 0xDAE6, 0x642D, 0xF7B3, 0x643A, 0xFDCD, 0x643E, 0xF3B6,
- 0x6458, 0xEED7, 0x6460, 0xF5C4, 0x6469, 0xD8A4, 0x646F, 0xF2A7, 0x6478, 0xD9B8, 0x6479, 0xD9B9, 0x647A, 0xEFC9, 0x6488, 0xD6CE,
- 0x6491, 0xF7CB, 0x6492, 0xDFAE, 0x6493, 0xE8F5, 0x649A, 0xD2B5, 0x649E, 0xD3D5, 0x64A4, 0xF4CC, 0x64A5, 0xDAFC, 0x64AB, 0xD9E8,
- 0x64AD, 0xF7EB, 0x64AE, 0xF5C9, 0x64B0, 0xF3BC, 0x64B2, 0xDAD2, 0x64BB, 0xD3B5, 0x64C1, 0xE8B6, 0x64C4, 0xD6CF, 0x64C5, 0xF4BA,
- 0x64C7, 0xF7C9, 0x64CA, 0xCCAA, 0x64CD, 0xF0C3, 0x64CE, 0xCCD6, 0x64D2, 0xD0D3, 0x64D4, 0xD3BD, 0x64D8, 0xDBFB, 0x64DA, 0xCBE0,
- 0x64E1, 0xD3E4, 0x64E2, 0xF6F7, 0x64E5, 0xD5BA, 0x64E6, 0xF3CD, 0x64E7, 0xCBE1, 0x64EC, 0xEBF4, 0x64F2, 0xF4AD, 0x64F4, 0xFCAA,
- 0x64FA, 0xF7EC, 0x64FE, 0xE8F6, 0x6500, 0xDAE7, 0x6504, 0xF7CC, 0x6518, 0xE5C1, 0x651D, 0xE0EE, 0x6523, 0xD5FD, 0x652A, 0xCEE6,
- 0x652B, 0xFCAB, 0x652C, 0xD5BB, 0x652F, 0xF2A8, 0x6536, 0xE2A5, 0x6537, 0xCDB9, 0x6538, 0xEAF2, 0x6539, 0xCBC7, 0x653B, 0xCDF4,
- 0x653E, 0xDBAF, 0x653F, 0xEFD9, 0x6545, 0xCDBA, 0x6548, 0xFCF9, 0x654D, 0xDFF3, 0x654E, 0xCEE7, 0x654F, 0xDAC2, 0x6551, 0xCFAD,
- 0x6556, 0xE7F9, 0x6557, 0xF8A8, 0x655E, 0xF3E2, 0x6562, 0xCAF2, 0x6563, 0xDFA4, 0x6566, 0xD4C4, 0x656C, 0xCCD7, 0x656D, 0xE5C2,
- 0x6572, 0xCDBB, 0x6574, 0xEFDA, 0x6575, 0xEED8, 0x6577, 0xDDA7, 0x6578, 0xE2A6, 0x657E, 0xE0C0, 0x6582, 0xD6B0, 0x6583, 0xF8CA,
- 0x6585, 0xFCFA, 0x6587, 0xD9FE, 0x658C, 0xDEB0, 0x6590, 0xDDEC, 0x6591, 0xDAE8, 0x6597, 0xD4E0, 0x6599, 0xD6F9, 0x659B, 0xCDD7,
- 0x659C, 0xDED8, 0x659F, 0xF2F8, 0x65A1, 0xE4D6, 0x65A4, 0xD0C5, 0x65A5, 0xF4AE, 0x65A7, 0xDDA8, 0x65AB, 0xEDC5, 0x65AC, 0xF3D6,
- 0x65AF, 0xDED9, 0x65B0, 0xE3E6, 0x65B7, 0xD3A8, 0x65B9, 0xDBB0, 0x65BC, 0xE5DA, 0x65BD, 0xE3BF, 0x65C1, 0xDBB1, 0x65C5, 0xD5E9,
- 0x65CB, 0xE0C1, 0x65CC, 0xEFDB, 0x65CF, 0xF0E9, 0x65D2, 0xD7B2, 0x65D7, 0xD0FD, 0x65E0, 0xD9E9, 0x65E3, 0xD0FE, 0x65E5, 0xECED,
- 0x65E6, 0xD3A9, 0x65E8, 0xF2A9, 0x65E9, 0xF0C4, 0x65EC, 0xE2E2, 0x65ED, 0xE9EF, 0x65F1, 0xF9D1, 0x65F4, 0xE9D9, 0x65FA, 0xE8DA,
- 0x65FB, 0xDAC3, 0x65FC, 0xDAC4, 0x65FD, 0xD4C5, 0x65FF, 0xE7FA, 0x6606, 0xCDE0, 0x6607, 0xE3B0, 0x6609, 0xDBB2, 0x660A, 0xFBC4,
- 0x660C, 0xF3E3, 0x660E, 0xD9A5, 0x660F, 0xFBE7, 0x6610, 0xDDCB, 0x6611, 0xD0D4, 0x6613, 0xE6B6, 0x6614, 0xE0AE, 0x6615, 0xFDDA,
- 0x661E, 0xDCB5, 0x661F, 0xE0F8, 0x6620, 0xE7B1, 0x6625, 0xF5F0, 0x6627, 0xD8DC, 0x6628, 0xEDC6, 0x662D, 0xE1B9, 0x662F, 0xE3C0,
- 0x6630, 0xF9C0, 0x6631, 0xE9F0, 0x6634, 0xD9DB, 0x6636, 0xF3E4, 0x663A, 0xDCB6, 0x663B, 0xE4E9, 0x6641, 0xF0C5, 0x6642, 0xE3C1,
- 0x6643, 0xFCCC, 0x6644, 0xFCCD, 0x6649, 0xF2CB, 0x664B, 0xF2CC, 0x664F, 0xE4CF, 0x6659, 0xF1DB, 0x665B, 0xFAD9, 0x665D, 0xF1B8,
- 0x665E, 0xFDF5, 0x665F, 0xE0F9, 0x6664, 0xE7FB, 0x6665, 0xFCB7, 0x6666, 0xFCE4, 0x6667, 0xFBC5, 0x6668, 0xE3E7, 0x6669, 0xD8B9,
- 0x666B, 0xF6F8, 0x666E, 0xDCC5, 0x666F, 0xCCD8, 0x6673, 0xE0AF, 0x6674, 0xF4E7, 0x6676, 0xEFDC, 0x6677, 0xCFFC, 0x6678, 0xEFDD,
- 0x667A, 0xF2AA, 0x6684, 0xFDBE, 0x6687, 0xCAAC, 0x6688, 0xFDBB, 0x6689, 0xFDC7, 0x668E, 0xE7B2, 0x6690, 0xEAD1, 0x6691, 0xDFF4,
- 0x6696, 0xD1EC, 0x6697, 0xE4DE, 0x6698, 0xE5C3, 0x669D, 0xD9A6, 0x66A0, 0xCDBC, 0x66A2, 0xF3E5, 0x66AB, 0xEDD5, 0x66AE, 0xD9BA,
- 0x66B2, 0xEDE7, 0x66B3, 0xFBB5, 0x66B4, 0xF8EC, 0x66B9, 0xE0E7, 0x66BB, 0xCCD9, 0x66BE, 0xD4C6, 0x66C4, 0xE7A5, 0x66C6, 0xD5F5,
- 0x66C7, 0xD3BE, 0x66C9, 0xFCFB, 0x66D6, 0xE4F2, 0x66D9, 0xDFF5, 0x66DC, 0xE8F8, 0x66DD, 0xF8ED, 0x66E0, 0xCEC7, 0x66E6, 0xFDF6,
- 0x66F0, 0xE8D8, 0x66F2, 0xCDD8, 0x66F3, 0xE7D6, 0x66F4, 0xCCDA, 0x66F7, 0xCAE3, 0x66F8, 0xDFF6, 0x66F9, 0xF0C7, 0x66FA, 0xF0C6,
- 0x66FC, 0xD8BA, 0x66FE, 0xF1F4, 0x66FF, 0xF4F0, 0x6700, 0xF5CC, 0x6703, 0xFCE5, 0x6708, 0xEAC5, 0x6709, 0xEAF3, 0x670B, 0xDDDB,
- 0x670D, 0xDCD7, 0x6714, 0xDEFD, 0x6715, 0xF2F9, 0x6717, 0xD5C7, 0x671B, 0xD8D0, 0x671D, 0xF0C8, 0x671E, 0xD1A1, 0x671F, 0xD1A2,
- 0x6726, 0xD9D4, 0x6727, 0xD6E8, 0x6728, 0xD9CA, 0x672A, 0xDAB1, 0x672B, 0xD8C7, 0x672C, 0xDCE2, 0x672D, 0xF3CE, 0x672E, 0xF5F4,
- 0x6731, 0xF1B9, 0x6734, 0xDAD3, 0x6736, 0xF6EA, 0x673A, 0xCFF5, 0x673D, 0xFDAE, 0x6746, 0xCAD2, 0x6749, 0xDFB4, 0x674E, 0xD7DD,
- 0x674F, 0xFABA, 0x6750, 0xEEA7, 0x6751, 0xF5BD, 0x6753, 0xF8F5, 0x6756, 0xEDE8, 0x675C, 0xD4E1, 0x675E, 0xD1A3, 0x675F, 0xE1D6,
- 0x676D, 0xF9F8, 0x676F, 0xDBCA, 0x6770, 0xCBF9, 0x6771, 0xD4D4, 0x6773, 0xD9DC, 0x6775, 0xEEBE, 0x6777, 0xF7ED, 0x677B, 0xD2EE,
- 0x677E, 0xE1E6, 0x677F, 0xF7F9, 0x6787, 0xDDED, 0x6789, 0xE8DB, 0x678B, 0xDBB3, 0x678F, 0xD1F7, 0x6790, 0xE0B0, 0x6793, 0xD4E2,
- 0x6795, 0xF6D7, 0x6797, 0xD7F9, 0x679A, 0xD8DD, 0x679C, 0xCDFD, 0x679D, 0xF2AB, 0x67AF, 0xCDBD, 0x67B0, 0xF8C2, 0x67B3, 0xF2AC,
- 0x67B6, 0xCAAD, 0x67B7, 0xCAAE, 0x67B8, 0xCFAE, 0x67BE, 0xE3C2, 0x67C4, 0xDCB7, 0x67CF, 0xDBDA, 0x67D0, 0xD9BB, 0x67D1, 0xCAF3,
- 0x67D2, 0xF6D3, 0x67D3, 0xE6F8, 0x67D4, 0xEAF5, 0x67DA, 0xEAF6, 0x67DD, 0xF6F9, 0x67E9, 0xCFAF, 0x67EC, 0xCAD3, 0x67EF, 0xCAAF,
- 0x67F0, 0xD2B0, 0x67F1, 0xF1BA, 0x67F3, 0xD7B3, 0x67F4, 0xE3C3, 0x67F5, 0xF3FD, 0x67F6, 0xDEDA, 0x67FB, 0xDEDB, 0x67FE, 0xEFDE,
- 0x6812, 0xE2E3, 0x6813, 0xEEFB, 0x6816, 0xDFF7, 0x6817, 0xD7CA, 0x6821, 0xCEE8, 0x6822, 0xDBDB, 0x682A, 0xF1BB, 0x682F, 0xE9F1,
- 0x6838, 0xFAB7, 0x6839, 0xD0C6, 0x683C, 0xCCAB, 0x683D, 0xEEA8, 0x6840, 0xCBFA, 0x6841, 0xF9F9, 0x6842, 0xCCFD, 0x6843, 0xD3FE,
- 0x6848, 0xE4D0, 0x684E, 0xF2EE, 0x6850, 0xD4D5, 0x6851, 0xDFCD, 0x6853, 0xFCB8, 0x6854, 0xD1D0, 0x686D, 0xF2CD, 0x6876, 0xF7D2,
- 0x687F, 0xCAD4, 0x6881, 0xD5D9, 0x6885, 0xD8DE, 0x688F, 0xCDD9, 0x6893, 0xEEA9, 0x6894, 0xF6BC, 0x6897, 0xCCDB, 0x689D, 0xF0C9,
- 0x689F, 0xFCFC, 0x68A1, 0xE8C9, 0x68A2, 0xF4FE, 0x68A7, 0xE7FC, 0x68A8, 0xD7DE, 0x68AD, 0xDEDC, 0x68AF, 0xF0AC, 0x68B0, 0xCCFE,
- 0x68B1, 0xCDE1, 0x68B3, 0xE1BA, 0x68B5, 0xDBEF, 0x68B6, 0xDAB2, 0x68C4, 0xD1A5, 0x68C5, 0xDCB8, 0x68C9, 0xD8F6, 0x68CB, 0xD1A4,
- 0x68CD, 0xCDE2, 0x68D2, 0xDCEA, 0x68D5, 0xF0F7, 0x68D7, 0xF0CA, 0x68D8, 0xD0BE, 0x68DA, 0xDDDC, 0x68DF, 0xD4D6, 0x68E0, 0xD3D6,
- 0x68E7, 0xEDD0, 0x68E8, 0xCDA1, 0x68EE, 0xDFB5, 0x68F2, 0xDFF8, 0x68F9, 0xD4A1, 0x68FA, 0xCEB2, 0x6900, 0xE8CA, 0x6905, 0xEBF5,
- 0x690D, 0xE3D5, 0x690E, 0xF5D0, 0x6912, 0xF5A1, 0x6927, 0xD9A7, 0x6930, 0xE5AB, 0x693D, 0xE6CB, 0x693F, 0xF5F1, 0x694A, 0xE5C5,
- 0x6953, 0xF9A3, 0x6954, 0xE0DB, 0x6955, 0xF6EB, 0x6957, 0xCBF1, 0x6959, 0xD9EA, 0x695A, 0xF5A2, 0x695E, 0xD7D1, 0x6960, 0xD1F8,
- 0x6961, 0xEAF8, 0x6962, 0xEAF9, 0x6963, 0xDAB3, 0x6968, 0xEFDF, 0x696B, 0xF1EF, 0x696D, 0xE5F6, 0x696E, 0xEEBF, 0x696F, 0xE2E4,
- 0x6975, 0xD0BF, 0x6977, 0xFAAC, 0x6978, 0xF5D1, 0x6979, 0xE7B3, 0x6995, 0xE9BE, 0x699B, 0xF2CE, 0x699C, 0xDBB4, 0x69A5, 0xFCCE,
- 0x69A7, 0xDDEE, 0x69AE, 0xE7B4, 0x69B4, 0xD7B4, 0x69BB, 0xF7B4, 0x69C1, 0xCDBE, 0x69C3, 0xDAE9, 0x69CB, 0xCFB0, 0x69CC, 0xF7D9,
- 0x69CD, 0xF3E6, 0x69D0, 0xCED9, 0x69E8, 0xCEAA, 0x69EA, 0xCBC8, 0x69FB, 0xD0A7, 0x69FD, 0xF0CB, 0x69FF, 0xD0C7, 0x6A02, 0xE4C5,
- 0x6A0A, 0xDBE0, 0x6A11, 0xD5DA, 0x6A13, 0xD7A7, 0x6A17, 0xEEC0, 0x6A19, 0xF8F6, 0x6A1E, 0xF5D2, 0x6A1F, 0xEDE9, 0x6A21, 0xD9BC,
- 0x6A23, 0xE5C6, 0x6A35, 0xF5A3, 0x6A38, 0xDAD4, 0x6A39, 0xE2A7, 0x6A3A, 0xFBFC, 0x6A3D, 0xF1DC, 0x6A44, 0xCAF4, 0x6A48, 0xE8FA,
- 0x6A4B, 0xCEE9, 0x6A52, 0xE9F8, 0x6A53, 0xE2E5, 0x6A58, 0xD0B9, 0x6A59, 0xD4F2, 0x6A5F, 0xD1A6, 0x6A61, 0xDFCE, 0x6A6B, 0xFCF4,
- 0x6A80, 0xD3AA, 0x6A84, 0xCCAC, 0x6A89, 0xEFE0, 0x6A8D, 0xE5E5, 0x6A8E, 0xD0D5, 0x6A97, 0xDBFC, 0x6A9C, 0xFCE6, 0x6AA2, 0xCBFE,
- 0x6AA3, 0xEDEA, 0x6AB3, 0xDEB1, 0x6ABB, 0xF9E3, 0x6AC2, 0xD4A2, 0x6AC3, 0xCFF6, 0x6AD3, 0xD6D0, 0x6ADA, 0xD5EA, 0x6ADB, 0xF1EE,
- 0x6AF6, 0xFACB, 0x6AFB, 0xE5A1, 0x6B04, 0xD5B1, 0x6B0A, 0xCFED, 0x6B0C, 0xEDEB, 0x6B12, 0xD5B2, 0x6B16, 0xD5BC, 0x6B20, 0xFDE2,
- 0x6B21, 0xF3AD, 0x6B23, 0xFDDB, 0x6B32, 0xE9B0, 0x6B3A, 0xD1A7, 0x6B3D, 0xFDE3, 0x6B3E, 0xCEB3, 0x6B46, 0xFDE4, 0x6B47, 0xFACE,
- 0x6B4C, 0xCAB0, 0x6B4E, 0xF7A7, 0x6B50, 0xCFB1, 0x6B5F, 0xE6A2, 0x6B61, 0xFCB6, 0x6B62, 0xF2AD, 0x6B63, 0xEFE1, 0x6B64, 0xF3AE,
- 0x6B65, 0xDCC6, 0x6B66, 0xD9EB, 0x6B6A, 0xE8E0, 0x6B72, 0xE1A8, 0x6B77, 0xD5F6, 0x6B78, 0xCFFD, 0x6B7B, 0xDEDD, 0x6B7F, 0xD9D1,
- 0x6B83, 0xE4EA, 0x6B84, 0xF2CF, 0x6B86, 0xF7BF, 0x6B89, 0xE2E6, 0x6B8A, 0xE2A8, 0x6B96, 0xE3D6, 0x6B98, 0xEDD1, 0x6B9E, 0xE9F9,
- 0x6BAE, 0xD6B1, 0x6BAF, 0xDEB2, 0x6BB2, 0xE0E8, 0x6BB5, 0xD3AB, 0x6BB7, 0xEBDC, 0x6BBA, 0xDFAF, 0x6BBC, 0xCAC3, 0x6BBF, 0xEEFC,
- 0x6BC1, 0xFDC3, 0x6BC5, 0xEBF6, 0x6BC6, 0xCFB2, 0x6BCB, 0xD9EC, 0x6BCD, 0xD9BD, 0x6BCF, 0xD8DF, 0x6BD2, 0xD4B8, 0x6BD3, 0xEBBE,
- 0x6BD4, 0xDDEF, 0x6BD6, 0xDDF0, 0x6BD7, 0xDDF1, 0x6BD8, 0xDDF2, 0x6BDB, 0xD9BE, 0x6BEB, 0xFBC6, 0x6BEC, 0xCFB3, 0x6C08, 0xEEFD,
- 0x6C0F, 0xE4AB, 0x6C11, 0xDAC5, 0x6C13, 0xD8EC, 0x6C23, 0xD1A8, 0x6C34, 0xE2A9, 0x6C37, 0xDEBC, 0x6C38, 0xE7B5, 0x6C3E, 0xDBF0,
- 0x6C40, 0xEFE2, 0x6C41, 0xF1F0, 0x6C42, 0xCFB4, 0x6C4E, 0xDBF1, 0x6C50, 0xE0B1, 0x6C55, 0xDFA5, 0x6C57, 0xF9D2, 0x6C5A, 0xE7FD,
- 0x6C5D, 0xE6A3, 0x6C5E, 0xFBF1, 0x6C5F, 0xCBB0, 0x6C60, 0xF2AE, 0x6C68, 0xCDE7, 0x6C6A, 0xE8DC, 0x6C6D, 0xE7D7, 0x6C70, 0xF7C0,
- 0x6C72, 0xD0E3, 0x6C76, 0xDAA1, 0x6C7A, 0xCCBD, 0x6C7D, 0xD1A9, 0x6C7E, 0xDDCC, 0x6C81, 0xE3FE, 0x6C82, 0xD1AA, 0x6C83, 0xE8AA,
- 0x6C85, 0xEAB6, 0x6C86, 0xF9FA, 0x6C87, 0xE6CC, 0x6C88, 0xF6D8, 0x6C8C, 0xD4C7, 0x6C90, 0xD9CB, 0x6C92, 0xD9D2, 0x6C93, 0xD3CB,
- 0x6C94, 0xD8F7, 0x6C95, 0xDAA9, 0x6C96, 0xF5F8, 0x6C99, 0xDEDE, 0x6C9A, 0xF2AF, 0x6C9B, 0xF8A9, 0x6CAB, 0xD8C8, 0x6CAE, 0xEEC1,
- 0x6CB3, 0xF9C1, 0x6CB8, 0xDDF3, 0x6CB9, 0xEAFA, 0x6CBB, 0xF6BD, 0x6CBC, 0xE1BB, 0x6CBD, 0xCDBF, 0x6CBE, 0xF4D4, 0x6CBF, 0xE6CD,
- 0x6CC1, 0xFCCF, 0x6CC2, 0xFBA2, 0x6CC4, 0xE0DC, 0x6CC9, 0xF4BB, 0x6CCA, 0xDAD5, 0x6CCC, 0xF9B2, 0x6CD3, 0xFBF2, 0x6CD5, 0xDBF6,
- 0x6CD7, 0xDEDF, 0x6CDB, 0xDBF2, 0x6CE1, 0xF8DC, 0x6CE2, 0xF7EE, 0x6CE3, 0xEBE8, 0x6CE5, 0xD2FA, 0x6CE8, 0xF1BC, 0x6CEB, 0xFADA,
- 0x6CEE, 0xDAEA, 0x6CEF, 0xDAC6, 0x6CF0, 0xF7C1, 0x6CF3, 0xE7B6, 0x6D0B, 0xE5C7, 0x6D0C, 0xD6AC, 0x6D11, 0xDCC7, 0x6D17, 0xE1A9,
- 0x6D19, 0xE2AA, 0x6D1B, 0xD5A6, 0x6D1E, 0xD4D7, 0x6D25, 0xF2D0, 0x6D27, 0xEAFB, 0x6D29, 0xE0DD, 0x6D2A, 0xFBF3, 0x6D32, 0xF1BD,
- 0x6D35, 0xE2E7, 0x6D36, 0xFDD7, 0x6D38, 0xCEC8, 0x6D39, 0xEAB7, 0x6D3B, 0xFCC0, 0x6D3D, 0xFDE7, 0x6D3E, 0xF7EF, 0x6D41, 0xD7B5,
- 0x6D59, 0xEFBA, 0x6D5A, 0xF1DD, 0x6D5C, 0xDEB3, 0x6D63, 0xE8CB, 0x6D66, 0xF8DD, 0x6D69, 0xFBC7, 0x6D6A, 0xD5C8, 0x6D6C, 0xD7DF,
- 0x6D6E, 0xDDA9, 0x6D74, 0xE9B1, 0x6D77, 0xFAAD, 0x6D78, 0xF6D9, 0x6D79, 0xFAF4, 0x6D7F, 0xF8AA, 0x6D85, 0xE6EE, 0x6D87, 0xCCDC,
- 0x6D88, 0xE1BC, 0x6D89, 0xE0EF, 0x6D8C, 0xE9BF, 0x6D8D, 0xFCFD, 0x6D8E, 0xE6CE, 0x6D91, 0xE1D7, 0x6D93, 0xE6CF, 0x6D95, 0xF4F1,
- 0x6DAF, 0xE4F3, 0x6DB2, 0xE4FB, 0x6DB5, 0xF9E4, 0x6DC0, 0xEFE3, 0x6DC3, 0xCFEE, 0x6DC4, 0xF6BE, 0x6DC5, 0xE0B2, 0x6DC6, 0xFCFE,
- 0x6DC7, 0xD1AB, 0x6DCB, 0xD7FA, 0x6DCF, 0xFBC8, 0x6DD1, 0xE2D7, 0x6DD8, 0xD4A3, 0x6DD9, 0xF0F8, 0x6DDA, 0xD7A8, 0x6DDE, 0xE1E7,
- 0x6DE1, 0xD3BF, 0x6DE8, 0xEFE4, 0x6DEA, 0xD7C5, 0x6DEB, 0xEBE2, 0x6DEE, 0xFCE7, 0x6DF1, 0xE4A2, 0x6DF3, 0xE2E8, 0x6DF5, 0xE6D0,
- 0x6DF7, 0xFBE8, 0x6DF8, 0xF4E8, 0x6DF9, 0xE5F4, 0x6DFA, 0xF4BC, 0x6DFB, 0xF4D5, 0x6E17, 0xDFB6, 0x6E19, 0xFCB9, 0x6E1A, 0xEEC2,
- 0x6E1B, 0xCAF5, 0x6E1F, 0xEFE5, 0x6E20, 0xCBE2, 0x6E21, 0xD4A4, 0x6E23, 0xDEE0, 0x6E24, 0xDAFD, 0x6E25, 0xE4C6, 0x6E26, 0xE8BE,
- 0x6E2B, 0xE0DE, 0x6E2C, 0xF6B4, 0x6E2D, 0xEAD2, 0x6E2F, 0xF9FB, 0x6E32, 0xE0C2, 0x6E34, 0xCAE4, 0x6E36, 0xE7B7, 0x6E38, 0xEAFD,
- 0x6E3A, 0xD9DD, 0x6E3C, 0xDAB4, 0x6E3D, 0xEEAA, 0x6E3E, 0xFBE9, 0x6E43, 0xDBCB, 0x6E44, 0xDAB5, 0x6E4A, 0xF1BE, 0x6E4D, 0xD3AC,
- 0x6E56, 0xFBC9, 0x6E58, 0xDFCF, 0x6E5B, 0xD3C0, 0x6E5C, 0xE3D7, 0x6E5E, 0xEFE6, 0x6E5F, 0xFCD0, 0x6E67, 0xE9C0, 0x6E6B, 0xF5D3,
- 0x6E6E, 0xECDC, 0x6E6F, 0xF7B7, 0x6E72, 0xEAB8, 0x6E73, 0xD1F9, 0x6E7A, 0xDCC8, 0x6E90, 0xEAB9, 0x6E96, 0xF1DE, 0x6E9C, 0xD7B6,
- 0x6E9D, 0xCFB5, 0x6E9F, 0xD9A8, 0x6EA2, 0xECEE, 0x6EA5, 0xDDAA, 0x6EAA, 0xCDA2, 0x6EAB, 0xE8AE, 0x6EAF, 0xE1BD, 0x6EB1, 0xF2D1,
- 0x6EB6, 0xE9C1, 0x6EBA, 0xD2FC, 0x6EC2, 0xDBB5, 0x6EC4, 0xF3E7, 0x6EC5, 0xD8FE, 0x6EC9, 0xFCD1, 0x6ECB, 0xEDB2, 0x6ECC, 0xF4AF,
- 0x6ECE, 0xFBA3, 0x6ED1, 0xFCC1, 0x6ED3, 0xEEAB, 0x6ED4, 0xD4A5, 0x6EEF, 0xF4F2, 0x6EF4, 0xEED9, 0x6EF8, 0xFBCA, 0x6EFE, 0xCDE3,
- 0x6EFF, 0xD8BB, 0x6F01, 0xE5DB, 0x6F02, 0xF8F7, 0x6F06, 0xF6D4, 0x6F0F, 0xD7A9, 0x6F11, 0xCBC9, 0x6F14, 0xE6D1, 0x6F15, 0xF0CC,
- 0x6F20, 0xD8AE, 0x6F22, 0xF9D3, 0x6F23, 0xD5FE, 0x6F2B, 0xD8BC, 0x6F2C, 0xF2B0, 0x6F31, 0xE2AB, 0x6F32, 0xF3E8, 0x6F38, 0xEFC2,
- 0x6F3F, 0xEDEC, 0x6F41, 0xE7B8, 0x6F51, 0xDAFE, 0x6F54, 0xCCBE, 0x6F57, 0xF2FC, 0x6F58, 0xDAEB, 0x6F5A, 0xE2D8, 0x6F5B, 0xEDD6,
- 0x6F5E, 0xD6D1, 0x6F5F, 0xE0B3, 0x6F62, 0xFCD2, 0x6F64, 0xEBC8, 0x6F6D, 0xD3C1, 0x6F6E, 0xF0CD, 0x6F70, 0xCFF7, 0x6F7A, 0xEDD2,
- 0x6F7C, 0xD4D8, 0x6F7D, 0xDCC9, 0x6F7E, 0xD7F1, 0x6F81, 0xDFBB, 0x6F84, 0xF3A5, 0x6F88, 0xF4CD, 0x6F8D, 0xF1BF, 0x6F8E, 0xF8B1,
- 0x6F90, 0xE9FA, 0x6F94, 0xFBCB, 0x6F97, 0xCAD5, 0x6FA3, 0xF9D4, 0x6FA4, 0xF7CA, 0x6FA7, 0xD6C8, 0x6FAE, 0xFCE8, 0x6FAF, 0xF3BD,
- 0x6FB1, 0xEEFE, 0x6FB3, 0xE7FE, 0x6FB9, 0xD3C2, 0x6FBE, 0xD3B6, 0x6FC0, 0xCCAD, 0x6FC1, 0xF6FA, 0x6FC2, 0xD6B2, 0x6FC3, 0xD2D8,
- 0x6FCA, 0xE7D8, 0x6FD5, 0xE3A5, 0x6FDA, 0xE7B9, 0x6FDF, 0xF0AD, 0x6FE0, 0xFBCC, 0x6FE1, 0xEBA1, 0x6FE4, 0xD4A6, 0x6FE9, 0xFBCD,
- 0x6FEB, 0xD5BD, 0x6FEC, 0xF1DF, 0x6FEF, 0xF6FB, 0x6FF1, 0xDEB4, 0x6FFE, 0xD5EB, 0x7001, 0xE5C8, 0x7005, 0xFBA4, 0x7006, 0xD4B9,
- 0x7009, 0xDEE1, 0x700B, 0xE4A3, 0x700F, 0xD7B7, 0x7011, 0xF8EE, 0x7015, 0xDEB5, 0x7018, 0xD6D2, 0x701A, 0xF9D5, 0x701B, 0xE7BA,
- 0x701C, 0xEBD5, 0x701D, 0xD5F7, 0x701E, 0xEFE7, 0x701F, 0xE1BE, 0x7023, 0xFAAE, 0x7027, 0xD6E9, 0x7028, 0xD6EE, 0x702F, 0xE7BB,
- 0x7037, 0xECCB, 0x703E, 0xD5B3, 0x704C, 0xCEB4, 0x7050, 0xFBA5, 0x7051, 0xE1EE, 0x7058, 0xF7A8, 0x705D, 0xFBCE, 0x7063, 0xD8BD,
- 0x706B, 0xFBFD, 0x7070, 0xFCE9, 0x7078, 0xCFB6, 0x707C, 0xEDC7, 0x707D, 0xEEAC, 0x7085, 0xCCDD, 0x708A, 0xF6A7, 0x708E, 0xE6FA,
- 0x7092, 0xF5A4, 0x7098, 0xFDDC, 0x7099, 0xEDB3, 0x709A, 0xCEC9, 0x70A1, 0xEFE8, 0x70A4, 0xE1BF, 0x70AB, 0xFADB, 0x70AC, 0xCBE3,
- 0x70AD, 0xF7A9, 0x70AF, 0xFBA6, 0x70B3, 0xDCB9, 0x70B7, 0xF1C0, 0x70B8, 0xEDC8, 0x70B9, 0xEFC3, 0x70C8, 0xD6AD, 0x70CB, 0xFDCE,
- 0x70CF, 0xE8A1, 0x70D8, 0xFBF4, 0x70D9, 0xD5A7, 0x70DD, 0xF1F6, 0x70DF, 0xE6D3, 0x70F1, 0xCCDE, 0x70F9, 0xF8B2, 0x70FD, 0xDCEB,
- 0x7104, 0xFDB6, 0x7109, 0xE5EA, 0x710C, 0xF1E0, 0x7119, 0xDBCC, 0x711A, 0xDDCD, 0x711E, 0xD4C8, 0x7121, 0xD9ED, 0x7126, 0xF5A5,
- 0x7130, 0xE6FB, 0x7136, 0xE6D4, 0x7147, 0xFDC8, 0x7149, 0xD6A1, 0x714A, 0xFDBF, 0x714C, 0xFCD3, 0x714E, 0xEFA1, 0x7150, 0xE7BC,
- 0x7156, 0xD1EE, 0x7159, 0xE6D5, 0x715C, 0xE9F2, 0x715E, 0xDFB0, 0x7164, 0xD8E0, 0x7165, 0xFCBA, 0x7166, 0xFDAF, 0x7167, 0xF0CE,
- 0x7169, 0xDBE1, 0x716C, 0xE5C9, 0x716E, 0xEDB4, 0x717D, 0xE0C3, 0x7184, 0xE3D8, 0x7189, 0xE9FB, 0x718A, 0xEAA8, 0x718F, 0xFDB7,
- 0x7192, 0xFBA7, 0x7194, 0xE9C2, 0x7199, 0xFDF7, 0x719F, 0xE2D9, 0x71A2, 0xDCEC, 0x71AC, 0xE8A2, 0x71B1, 0xE6F0, 0x71B9, 0xFDF8,
- 0x71BA, 0xFDF9, 0x71BE, 0xF6BF, 0x71C1, 0xE7A7, 0x71C3, 0xE6D7, 0x71C8, 0xD4F3, 0x71C9, 0xD4C9, 0x71CE, 0xD6FA, 0x71D0, 0xD7F2,
- 0x71D2, 0xE1C0, 0x71D4, 0xDBE2, 0x71D5, 0xE6D8, 0x71DF, 0xE7BD, 0x71E5, 0xF0CF, 0x71E6, 0xF3BE, 0x71E7, 0xE2AC, 0x71ED, 0xF5B7,
- 0x71EE, 0xE0F0, 0x71FB, 0xFDB8, 0x71FC, 0xE3E8, 0x71FE, 0xD4A7, 0x71FF, 0xE8FC, 0x7200, 0xFAD2, 0x7206, 0xF8EF, 0x7210, 0xD6D3,
- 0x721B, 0xD5B4, 0x722A, 0xF0D0, 0x722C, 0xF7F0, 0x722D, 0xEEB3, 0x7230, 0xEABA, 0x7232, 0xEAD3, 0x7235, 0xEDC9, 0x7236, 0xDDAB,
- 0x723A, 0xE5AC, 0x723B, 0xFDA1, 0x723D, 0xDFD0, 0x723E, 0xECB3, 0x7240, 0xDFD1, 0x7246, 0xEDED, 0x7247, 0xF8B8, 0x7248, 0xF7FA,
- 0x724C, 0xF8AB, 0x7252, 0xF4E0, 0x7258, 0xD4BA, 0x7259, 0xE4B3, 0x725B, 0xE9DA, 0x725D, 0xDEB6, 0x725F, 0xD9BF, 0x7261, 0xD9C0,
- 0x7262, 0xD6EF, 0x7267, 0xD9CC, 0x7269, 0xDAAA, 0x7272, 0xDFE5, 0x7279, 0xF7E5, 0x727D, 0xCCB2, 0x7280, 0xDFF9, 0x7281, 0xD7E0,
- 0x72A2, 0xD4BB, 0x72A7, 0xFDFA, 0x72AC, 0xCCB3, 0x72AF, 0xDBF3, 0x72C0, 0xDFD2, 0x72C2, 0xCECA, 0x72C4, 0xEEDA, 0x72CE, 0xE4E4,
- 0x72D0, 0xFBCF, 0x72D7, 0xCFB7, 0x72D9, 0xEEC3, 0x72E1, 0xCEEA, 0x72E9, 0xE2AD, 0x72F8, 0xD7E1, 0x72F9, 0xFAF5, 0x72FC, 0xD5C9,
- 0x72FD, 0xF8AC, 0x730A, 0xE7D9, 0x7316, 0xF3E9, 0x731B, 0xD8ED, 0x731C, 0xE3C4, 0x731D, 0xF0F1, 0x7325, 0xE8E5, 0x7329, 0xE0FA,
- 0x732A, 0xEEC4, 0x732B, 0xD9DE, 0x7336, 0xEBA2, 0x7337, 0xEBA3, 0x733E, 0xFCC2, 0x733F, 0xEABB, 0x7344, 0xE8AB, 0x7345, 0xDEE2,
- 0x7350, 0xEDEF, 0x7352, 0xE8A3, 0x7357, 0xCFF1, 0x7368, 0xD4BC, 0x736A, 0xFCEA, 0x7370, 0xE7BE, 0x7372, 0xFCF2, 0x7375, 0xD6B4,
- 0x7378, 0xE2AE, 0x737A, 0xD3B7, 0x737B, 0xFACC, 0x7384, 0xFADC, 0x7386, 0xEDB5, 0x7387, 0xE1E3, 0x7389, 0xE8AC, 0x738B, 0xE8DD,
- 0x738E, 0xEFE9, 0x7394, 0xF4BD, 0x7396, 0xCFB8, 0x7397, 0xE9DB, 0x7398, 0xD1AC, 0x739F, 0xDAC7, 0x73A7, 0xEBC9, 0x73A9, 0xE8CC,
- 0x73AD, 0xDEB7, 0x73B2, 0xD6BC, 0x73B3, 0xD3E5, 0x73B9, 0xFADD, 0x73C0, 0xDAD6, 0x73C2, 0xCAB1, 0x73C9, 0xDAC8, 0x73CA, 0xDFA6,
- 0x73CC, 0xF9B3, 0x73CD, 0xF2D2, 0x73CF, 0xCAC4, 0x73D6, 0xCECB, 0x73D9, 0xCDF5, 0x73DD, 0xFDB0, 0x73DE, 0xD5A8, 0x73E0, 0xF1C1,
- 0x73E3, 0xE2E9, 0x73E4, 0xDCCA, 0x73E5, 0xECB4, 0x73E6, 0xFAC0, 0x73E9, 0xFBA8, 0x73EA, 0xD0A8, 0x73ED, 0xDAEC, 0x73F7, 0xD9EE,
- 0x73F9, 0xE0FB, 0x73FD, 0xEFEA, 0x73FE, 0xFADE, 0x7401, 0xE0C4, 0x7403, 0xCFB9, 0x7405, 0xD5CA, 0x7406, 0xD7E2, 0x7407, 0xE2AF,
- 0x7409, 0xD7B8, 0x7413, 0xE8CD, 0x741B, 0xF6DA, 0x7420, 0xEFA2, 0x7421, 0xE2DA, 0x7422, 0xF6FC, 0x7425, 0xFBD0, 0x7426, 0xD1AD,
- 0x7428, 0xCDE4, 0x742A, 0xD1AE, 0x742B, 0xDCED, 0x742C, 0xE8CE, 0x742E, 0xF0F9, 0x742F, 0xCEB5, 0x7430, 0xE6FC, 0x7433, 0xD7FB,
- 0x7434, 0xD0D6, 0x7435, 0xDDF5, 0x7436, 0xF7F1, 0x7438, 0xF6FD, 0x743A, 0xDBF7, 0x743F, 0xFBEA, 0x7440, 0xE9DC, 0x7441, 0xD9C1,
- 0x7443, 0xF5F2, 0x7444, 0xE0C5, 0x744B, 0xEAD4, 0x7455, 0xF9C2, 0x7457, 0xEABC, 0x7459, 0xD2C5, 0x745A, 0xFBD1, 0x745B, 0xE7C0,
- 0x745C, 0xEBA5, 0x745E, 0xDFFA, 0x745F, 0xE3A2, 0x7460, 0xD7B9, 0x7462, 0xE9C3, 0x7464, 0xE8FD, 0x7465, 0xE8AF, 0x7468, 0xF2D3,
- 0x7469, 0xFBA9, 0x746A, 0xD8A5, 0x746F, 0xD5CB, 0x747E, 0xD0C8, 0x7482, 0xD1AF, 0x7483, 0xD7E3, 0x7487, 0xE0C6, 0x7489, 0xD6A2,
- 0x748B, 0xEDF0, 0x7498, 0xD7F3, 0x749C, 0xFCD4, 0x749E, 0xDAD7, 0x749F, 0xCCDF, 0x74A1, 0xF2D4, 0x74A3, 0xD1B0, 0x74A5, 0xCCE0,
- 0x74A7, 0xDBFD, 0x74A8, 0xF3BF, 0x74AA, 0xF0D1, 0x74B0, 0xFCBB, 0x74B2, 0xE2B0, 0x74B5, 0xE6A5, 0x74B9, 0xE2DB, 0x74BD, 0xDFDE,
- 0x74BF, 0xE0C7, 0x74C6, 0xF2EF, 0x74CA, 0xCCE1, 0x74CF, 0xD6EA, 0x74D4, 0xE7C2, 0x74D8, 0xCEB6, 0x74DA, 0xF3C0, 0x74DC, 0xCDFE,
- 0x74E0, 0xFBD2, 0x74E2, 0xF8F8, 0x74E3, 0xF7FB, 0x74E6, 0xE8BF, 0x74EE, 0xE8B7, 0x74F7, 0xEDB6, 0x7501, 0xDCBA, 0x7504, 0xCCB4,
- 0x7511, 0xF1F7, 0x7515, 0xE8B8, 0x7518, 0xCAF6, 0x751A, 0xE4A4, 0x751B, 0xF4D6, 0x751F, 0xDFE6, 0x7523, 0xDFA7, 0x7525, 0xDFE7,
- 0x7526, 0xE1C1, 0x7528, 0xE9C4, 0x752B, 0xDCCB, 0x752C, 0xE9C5, 0x7530, 0xEFA3, 0x7531, 0xEBA6, 0x7532, 0xCBA3, 0x7533, 0xE3E9,
- 0x7537, 0xD1FB, 0x7538, 0xEFA4, 0x753A, 0xEFEB, 0x7547, 0xD0B4, 0x754C, 0xCDA3, 0x754F, 0xE8E6, 0x7551, 0xEFA5, 0x7553, 0xD3CC,
- 0x7554, 0xDAED, 0x7559, 0xD7BA, 0x755B, 0xF2D5, 0x755C, 0xF5E5, 0x755D, 0xD9EF, 0x7562, 0xF9B4, 0x7565, 0xD5D4, 0x7566, 0xFDCF,
- 0x756A, 0xDBE3, 0x756F, 0xF1E1, 0x7570, 0xECB6, 0x7575, 0xFBFE, 0x7576, 0xD3D7, 0x7578, 0xD1B1, 0x757A, 0xCBB1, 0x757F, 0xD1B2,
- 0x7586, 0xCBB2, 0x7587, 0xF1C2, 0x758A, 0xF4E1, 0x758B, 0xF9B5, 0x758E, 0xE1C3, 0x758F, 0xE1C2, 0x7591, 0xEBF7, 0x759D, 0xDFA8,
- 0x75A5, 0xCBCA, 0x75AB, 0xE6B9, 0x75B1, 0xF8DE, 0x75B2, 0xF9AA, 0x75B3, 0xCAF7, 0x75B5, 0xEDB7, 0x75B8, 0xD3B8, 0x75B9, 0xF2D6,
- 0x75BC, 0xD4D9, 0x75BD, 0xEEC5, 0x75BE, 0xF2F0, 0x75C2, 0xCAB2, 0x75C5, 0xDCBB, 0x75C7, 0xF1F8, 0x75CD, 0xECB7, 0x75D2, 0xE5CA,
- 0x75D4, 0xF6C0, 0x75D5, 0xFDDD, 0x75D8, 0xD4E3, 0x75D9, 0xCCE2, 0x75DB, 0xF7D4, 0x75E2, 0xD7E5, 0x75F0, 0xD3C3, 0x75F2, 0xD8A6,
- 0x75F4, 0xF6C1, 0x75FA, 0xDDF6, 0x75FC, 0xCDC0, 0x7600, 0xE5DC, 0x760D, 0xE5CB, 0x7619, 0xE1C4, 0x761F, 0xE8B0, 0x7620, 0xF4B0,
- 0x7621, 0xF3EA, 0x7622, 0xDAEE, 0x7624, 0xD7BB, 0x7626, 0xE2B1, 0x763B, 0xD7AA, 0x7642, 0xD6FB, 0x764C, 0xE4DF, 0x764E, 0xCAD6,
- 0x7652, 0xEBA8, 0x7656, 0xDBFE, 0x7661, 0xF6C2, 0x7664, 0xEFBB, 0x7669, 0xD4FD, 0x766C, 0xE0C8, 0x7670, 0xE8B9, 0x7672, 0xEFA6,
- 0x7678, 0xCDA4, 0x767B, 0xD4F4, 0x767C, 0xDBA1, 0x767D, 0xDBDC, 0x767E, 0xDBDD, 0x7684, 0xEEDC, 0x7686, 0xCBCB, 0x7687, 0xFCD5,
- 0x768E, 0xCEEB, 0x7690, 0xCDC1, 0x7693, 0xFBD3, 0x76AE, 0xF9AB, 0x76BA, 0xF5D4, 0x76BF, 0xD9A9, 0x76C2, 0xE9DD, 0x76C3, 0xDBCD,
- 0x76C6, 0xDDCE, 0x76C8, 0xE7C3, 0x76CA, 0xECCC, 0x76D2, 0xF9EC, 0x76D6, 0xCBCC, 0x76DB, 0xE0FC, 0x76DC, 0xD4A8, 0x76DE, 0xEDD3,
- 0x76DF, 0xD8EF, 0x76E1, 0xF2D7, 0x76E3, 0xCAF8, 0x76E4, 0xDAEF, 0x76E7, 0xD6D4, 0x76EE, 0xD9CD, 0x76F2, 0xD8EE, 0x76F4, 0xF2C1,
- 0x76F8, 0xDFD3, 0x76FC, 0xDAF0, 0x76FE, 0xE2EA, 0x7701, 0xE0FD, 0x7704, 0xD8F8, 0x7708, 0xF7AF, 0x7709, 0xDAB6, 0x770B, 0xCAD7,
- 0x771E, 0xF2D8, 0x7720, 0xD8F9, 0x7729, 0xFADF, 0x7737, 0xCFEF, 0x7738, 0xD9C2, 0x773A, 0xF0D2, 0x773C, 0xE4D1, 0x7740, 0xF3B7,
- 0x774D, 0xFAE0, 0x775B, 0xEFEC, 0x7761, 0xE2B2, 0x7763, 0xD4BD, 0x7766, 0xD9CE, 0x776B, 0xF4E2, 0x7779, 0xD4A9, 0x777E, 0xCDC2,
- 0x777F, 0xE7DA, 0x778B, 0xF2D9, 0x7791, 0xD9AA, 0x779E, 0xD8BE, 0x77A5, 0xDCAD, 0x77AC, 0xE2EB, 0x77AD, 0xD6FC, 0x77B0, 0xCAF9,
- 0x77B3, 0xD4DA, 0x77BB, 0xF4D7, 0x77BC, 0xCCA1, 0x77BF, 0xCFBA, 0x77D7, 0xF5B8, 0x77DB, 0xD9C3, 0x77DC, 0xD0E8, 0x77E2, 0xE3C5,
- 0x77E3, 0xEBF8, 0x77E5, 0xF2B1, 0x77E9, 0xCFBB, 0x77ED, 0xD3AD, 0x77EE, 0xE8E1, 0x77EF, 0xCEEC, 0x77F3, 0xE0B4, 0x7802, 0xDEE3,
- 0x7812, 0xDDF7, 0x7825, 0xF2B2, 0x7826, 0xF3F6, 0x7827, 0xF6DB, 0x782C, 0xD7FE, 0x7832, 0xF8DF, 0x7834, 0xF7F2, 0x7845, 0xD0A9,
- 0x784F, 0xE6DA, 0x785D, 0xF5A6, 0x786B, 0xD7BC, 0x786C, 0xCCE3, 0x786F, 0xE6DB, 0x787C, 0xDDDD, 0x7881, 0xD1B3, 0x7887, 0xEFED,
- 0x788C, 0xD6DE, 0x788D, 0xE4F4, 0x788E, 0xE1EF, 0x7891, 0xDDF8, 0x7897, 0xE8CF, 0x78A3, 0xCAE5, 0x78A7, 0xDCA1, 0x78A9, 0xE0B5,
- 0x78BA, 0xFCAC, 0x78BB, 0xFCAD, 0x78BC, 0xD8A7, 0x78C1, 0xEDB8, 0x78C5, 0xDBB6, 0x78CA, 0xD6F0, 0x78CB, 0xF3AF, 0x78CE, 0xCDA5,
- 0x78D0, 0xDAF1, 0x78E8, 0xD8A8, 0x78EC, 0xCCE4, 0x78EF, 0xD1B4, 0x78F5, 0xCAD8, 0x78FB, 0xDAF2, 0x7901, 0xF5A7, 0x790E, 0xF5A8,
- 0x7916, 0xE6A6, 0x792A, 0xD5EC, 0x792B, 0xD5F8, 0x792C, 0xDAF3, 0x793A, 0xE3C6, 0x793E, 0xDEE4, 0x7940, 0xDEE5, 0x7941, 0xD1B5,
- 0x7947, 0xD1B6, 0x7948, 0xD1B7, 0x7949, 0xF2B3, 0x7950, 0xE9DE, 0x7956, 0xF0D3, 0x7957, 0xF2B4, 0x795A, 0xF0D4, 0x795B, 0xCBE4,
- 0x795C, 0xFBD4, 0x795D, 0xF5E6, 0x795E, 0xE3EA, 0x7960, 0xDEE6, 0x7965, 0xDFD4, 0x7968, 0xF8F9, 0x796D, 0xF0AE, 0x797A, 0xD1B8,
- 0x797F, 0xD6DF, 0x7981, 0xD0D7, 0x798D, 0xFCA1, 0x798E, 0xEFEE, 0x798F, 0xDCD8, 0x7991, 0xE9DF, 0x79A6, 0xE5DD, 0x79A7, 0xFDFB,
- 0x79AA, 0xE0C9, 0x79AE, 0xD6C9, 0x79B1, 0xD4AA, 0x79B3, 0xE5CC, 0x79B9, 0xE9E0, 0x79BD, 0xD0D8, 0x79BE, 0xFCA2, 0x79BF, 0xD4BE,
- 0x79C0, 0xE2B3, 0x79C1, 0xDEE7, 0x79C9, 0xDCBC, 0x79CA, 0xD2B6, 0x79CB, 0xF5D5, 0x79D1, 0xCEA1, 0x79D2, 0xF5A9, 0x79D5, 0xDDF9,
- 0x79D8, 0xDDFA, 0x79DF, 0xF0D5, 0x79E4, 0xF6DF, 0x79E6, 0xF2DA, 0x79E7, 0xE4EB, 0x79E9, 0xF2F1, 0x79FB, 0xECB9, 0x7A00, 0xFDFC,
- 0x7A05, 0xE1AA, 0x7A08, 0xCAD9, 0x7A0B, 0xEFEF, 0x7A0D, 0xF5AA, 0x7A14, 0xECF9, 0x7A17, 0xF8AD, 0x7A19, 0xF2C2, 0x7A1A, 0xF6C3,
- 0x7A1C, 0xD7D2, 0x7A1F, 0xF9A2, 0x7A20, 0xF0D6, 0x7A2E, 0xF0FA, 0x7A31, 0xF6E0, 0x7A36, 0xE9F3, 0x7A37, 0xF2C3, 0x7A3B, 0xD4AB,
- 0x7A3C, 0xCAB3, 0x7A3D, 0xCDA6, 0x7A3F, 0xCDC3, 0x7A40, 0xCDDA, 0x7A46, 0xD9CF, 0x7A49, 0xF6C4, 0x7A4D, 0xEEDD, 0x7A4E, 0xE7C4,
- 0x7A57, 0xE2B4, 0x7A61, 0xDFE2, 0x7A62, 0xE7DB, 0x7A69, 0xE8B1, 0x7A6B, 0xFCAE, 0x7A70, 0xE5CD, 0x7A74, 0xFAEB, 0x7A76, 0xCFBC,
- 0x7A79, 0xCFE2, 0x7A7A, 0xCDF6, 0x7A7D, 0xEFF0, 0x7A7F, 0xF4BE, 0x7A81, 0xD4CD, 0x7A84, 0xF3B8, 0x7A88, 0xE9A1, 0x7A92, 0xF2F2,
- 0x7A93, 0xF3EB, 0x7A95, 0xF0D7, 0x7A98, 0xCFD7, 0x7A9F, 0xCFDF, 0x7AA9, 0xE8C0, 0x7AAA, 0xE8C1, 0x7AAE, 0xCFE3, 0x7AAF, 0xE9A2,
- 0x7ABA, 0xD0AA, 0x7AC4, 0xF3C1, 0x7AC5, 0xD0AB, 0x7AC7, 0xD4E4, 0x7ACA, 0xEFBC, 0x7ACB, 0xD8A1, 0x7AD7, 0xD9DF, 0x7AD9, 0xF3D7,
- 0x7ADD, 0xDCBD, 0x7ADF, 0xCCE5, 0x7AE0, 0xEDF1, 0x7AE3, 0xF1E2, 0x7AE5, 0xD4DB, 0x7AEA, 0xE2B5, 0x7AED, 0xCAE6, 0x7AEF, 0xD3AE,
- 0x7AF6, 0xCCE6, 0x7AF9, 0xF1D3, 0x7AFA, 0xF5E7, 0x7AFF, 0xCADA, 0x7B0F, 0xFBEE, 0x7B11, 0xE1C5, 0x7B19, 0xDFE9, 0x7B1B, 0xEEDE,
- 0x7B1E, 0xF7C2, 0x7B20, 0xD8A2, 0x7B26, 0xDDAC, 0x7B2C, 0xF0AF, 0x7B2D, 0xD6BD, 0x7B39, 0xE1AB, 0x7B46, 0xF9B6, 0x7B49, 0xD4F5,
- 0x7B4B, 0xD0C9, 0x7B4C, 0xEFA7, 0x7B4D, 0xE2EC, 0x7B4F, 0xDBEA, 0x7B50, 0xCECC, 0x7B51, 0xF5E8, 0x7B52, 0xF7D5, 0x7B54, 0xD3CD,
- 0x7B56, 0xF3FE, 0x7B60, 0xD0B5, 0x7B6C, 0xE0FE, 0x7B6E, 0xDFFB, 0x7B75, 0xE6DD, 0x7B7D, 0xE8A4, 0x7B87, 0xCBCD, 0x7B8B, 0xEFA8,
- 0x7B8F, 0xEEB4, 0x7B94, 0xDAD8, 0x7B95, 0xD1B9, 0x7B97, 0xDFA9, 0x7B9A, 0xF3B0, 0x7B9D, 0xCCC4, 0x7BA1, 0xCEB7, 0x7BAD, 0xEFA9,
- 0x7BB1, 0xDFD5, 0x7BB4, 0xEDD7, 0x7BB8, 0xEEC6, 0x7BC0, 0xEFBD, 0x7BC1, 0xFCD6, 0x7BC4, 0xDBF4, 0x7BC6, 0xEFAA, 0x7BC7, 0xF8B9,
- 0x7BC9, 0xF5E9, 0x7BD2, 0xE3D9, 0x7BE0, 0xE1C6, 0x7BE4, 0xD4BF, 0x7BE9, 0xDEE8, 0x7C07, 0xF0EA, 0x7C12, 0xF3C2, 0x7C1E, 0xD3AF,
- 0x7C21, 0xCADB, 0x7C27, 0xFCD7, 0x7C2A, 0xEDD8, 0x7C2B, 0xE1C7, 0x7C3D, 0xF4D8, 0x7C3E, 0xD6B3, 0x7C3F, 0xDDAD, 0x7C43, 0xD5BE,
- 0x7C4C, 0xF1C3, 0x7C4D, 0xEEDF, 0x7C60, 0xD6EB, 0x7C64, 0xF4D9, 0x7C6C, 0xD7E6, 0x7C73, 0xDAB7, 0x7C83, 0xDDFB, 0x7C89, 0xDDCF,
- 0x7C92, 0xD8A3, 0x7C95, 0xDAD9, 0x7C97, 0xF0D8, 0x7C98, 0xEFC4, 0x7C9F, 0xE1D8, 0x7CA5, 0xF1D4, 0x7CA7, 0xEDF2, 0x7CAE, 0xD5DB,
- 0x7CB1, 0xD5DC, 0x7CB2, 0xF3C4, 0x7CB3, 0xCBD7, 0x7CB9, 0xE2B6, 0x7CBE, 0xEFF1, 0x7CCA, 0xFBD5, 0x7CD6, 0xD3D8, 0x7CDE, 0xDDD0,
- 0x7CDF, 0xF0D9, 0x7CE0, 0xCBB3, 0x7CE7, 0xD5DD, 0x7CFB, 0xCDA7, 0x7CFE, 0xD0AC, 0x7D00, 0xD1BA, 0x7D02, 0xF1C4, 0x7D04, 0xE5B3,
- 0x7D05, 0xFBF5, 0x7D06, 0xE9E1, 0x7D07, 0xFDE0, 0x7D08, 0xFCBC, 0x7D0A, 0xDAA2, 0x7D0B, 0xDAA3, 0x7D0D, 0xD2A1, 0x7D10, 0xD2EF,
- 0x7D14, 0xE2ED, 0x7D17, 0xDEE9, 0x7D18, 0xCEDC, 0x7D19, 0xF2B5, 0x7D1A, 0xD0E4, 0x7D1B, 0xDDD1, 0x7D20, 0xE1C8, 0x7D21, 0xDBB7,
- 0x7D22, 0xDFE3, 0x7D2B, 0xEDB9, 0x7D2C, 0xF1C5, 0x7D2E, 0xF3CF, 0x7D2F, 0xD7AB, 0x7D30, 0xE1AC, 0x7D33, 0xE3EB, 0x7D35, 0xEEC7,
- 0x7D39, 0xE1C9, 0x7D3A, 0xCAFA, 0x7D42, 0xF0FB, 0x7D43, 0xFAE1, 0x7D44, 0xF0DA, 0x7D45, 0xCCE7, 0x7D46, 0xDAF4, 0x7D50, 0xCCBF,
- 0x7D5E, 0xCEED, 0x7D61, 0xD5A9, 0x7D62, 0xFAE2, 0x7D66, 0xD0E5, 0x7D68, 0xEBD6, 0x7D6A, 0xECDF, 0x7D6E, 0xDFFC, 0x7D71, 0xF7D6,
- 0x7D72, 0xDEEA, 0x7D73, 0xCBB4, 0x7D76, 0xEFBE, 0x7D79, 0xCCB5, 0x7D7F, 0xCFBD, 0x7D8E, 0xEFF2, 0x7D8F, 0xE2B7, 0x7D93, 0xCCE8,
- 0x7D9C, 0xF0FC, 0x7DA0, 0xD6E0, 0x7DA2, 0xF1C6, 0x7DAC, 0xE2B8, 0x7DAD, 0xEBAB, 0x7DB1, 0xCBB5, 0x7DB2, 0xD8D1, 0x7DB4, 0xF4CE,
- 0x7DB5, 0xF3F7, 0x7DB8, 0xD7C6, 0x7DBA, 0xD1BB, 0x7DBB, 0xF7AA, 0x7DBD, 0xEDCA, 0x7DBE, 0xD7D3, 0x7DBF, 0xD8FA, 0x7DC7, 0xF6C5,
- 0x7DCA, 0xD1CC, 0x7DCB, 0xDDFC, 0x7DD6, 0xDFFD, 0x7DD8, 0xF9E5, 0x7DDA, 0xE0CA, 0x7DDD, 0xF2FD, 0x7DDE, 0xD3B0, 0x7DE0, 0xF4F3,
- 0x7DE1, 0xDAC9, 0x7DE3, 0xE6DE, 0x7DE8, 0xF8BA, 0x7DE9, 0xE8D0, 0x7DEC, 0xD8FB, 0x7DEF, 0xEAD5, 0x7DF4, 0xD6A3, 0x7DFB, 0xF6C6,
- 0x7E09, 0xF2DB, 0x7E0A, 0xE4FC, 0x7E15, 0xE8B2, 0x7E1B, 0xDADA, 0x7E1D, 0xF2DC, 0x7E1E, 0xFBD6, 0x7E1F, 0xE9B2, 0x7E21, 0xEEAD,
- 0x7E23, 0xFAE3, 0x7E2B, 0xDCEE, 0x7E2E, 0xF5EA, 0x7E2F, 0xE6E0, 0x7E31, 0xF0FD, 0x7E37, 0xD7AC, 0x7E3D, 0xF5C5, 0x7E3E, 0xEEE0,
- 0x7E41, 0xDBE5, 0x7E43, 0xDDDE, 0x7E46, 0xD9F0, 0x7E47, 0xE9A3, 0x7E52, 0xF1F9, 0x7E54, 0xF2C4, 0x7E55, 0xE0CB, 0x7E5E, 0xE9A4,
- 0x7E61, 0xE2B9, 0x7E69, 0xE3B1, 0x7E6A, 0xFCEB, 0x7E6B, 0xCDA8, 0x7E6D, 0xCCB6, 0x7E70, 0xF0DB, 0x7E79, 0xE6BA, 0x7E7C, 0xCDA9,
- 0x7E82, 0xF3C3, 0x7E8C, 0xE1D9, 0x7E8F, 0xEFAB, 0x7E93, 0xE7C5, 0x7E96, 0xE0E9, 0x7E98, 0xF3C5, 0x7E9B, 0xD4C0, 0x7E9C, 0xD5BF,
- 0x7F36, 0xDDAE, 0x7F38, 0xF9FC, 0x7F3A, 0xCCC0, 0x7F4C, 0xE5A2, 0x7F50, 0xCEB8, 0x7F54, 0xD8D2, 0x7F55, 0xF9D6, 0x7F6A, 0xF1AA,
- 0x7F6B, 0xCED1, 0x7F6E, 0xF6C7, 0x7F70, 0xDBEB, 0x7F72, 0xDFFE, 0x7F75, 0xD8E1, 0x7F77, 0xF7F3, 0x7F79, 0xD7E7, 0x7F85, 0xD4FE,
- 0x7F88, 0xD1BC, 0x7F8A, 0xE5CF, 0x7F8C, 0xCBB6, 0x7F8E, 0xDAB8, 0x7F94, 0xCDC4, 0x7F9A, 0xD6BE, 0x7F9E, 0xE2BA, 0x7FA4, 0xCFD8,
- 0x7FA8, 0xE0CC, 0x7FA9, 0xEBF9, 0x7FB2, 0xFDFD, 0x7FB8, 0xD7E8, 0x7FB9, 0xCBD8, 0x7FBD, 0xE9E2, 0x7FC1, 0xE8BA, 0x7FC5, 0xE3C7,
- 0x7FCA, 0xECCD, 0x7FCC, 0xECCE, 0x7FCE, 0xD6BF, 0x7FD2, 0xE3A7, 0x7FD4, 0xDFD6, 0x7FD5, 0xFDE8, 0x7FDF, 0xEEE1, 0x7FE0, 0xF6A8,
- 0x7FE1, 0xDDFD, 0x7FE9, 0xF8BB, 0x7FEB, 0xE8D1, 0x7FF0, 0xF9D7, 0x7FF9, 0xCEEE, 0x7FFC, 0xECCF, 0x8000, 0xE9A5, 0x8001, 0xD6D5,
- 0x8003, 0xCDC5, 0x8005, 0xEDBA, 0x8006, 0xD1BD, 0x8009, 0xCFBE, 0x800C, 0xECBB, 0x8010, 0xD2B1, 0x8015, 0xCCE9, 0x8017, 0xD9C4,
- 0x8018, 0xE9FC, 0x802D, 0xD1BE, 0x8033, 0xECBC, 0x8036, 0xE5AD, 0x803D, 0xF7B0, 0x803F, 0xCCEA, 0x8043, 0xD3C4, 0x8046, 0xD6C0,
- 0x804A, 0xD6FD, 0x8056, 0xE1A1, 0x8058, 0xDEBD, 0x805A, 0xF6A9, 0x805E, 0xDAA4, 0x806F, 0xD6A4, 0x8070, 0xF5C6, 0x8072, 0xE1A2,
- 0x8073, 0xE9C6, 0x8077, 0xF2C5, 0x807D, 0xF4E9, 0x807E, 0xD6EC, 0x807F, 0xEBD3, 0x8084, 0xECBD, 0x8085, 0xE2DC, 0x8086, 0xDEEB,
- 0x8087, 0xF0DC, 0x8089, 0xEBBF, 0x808B, 0xD7CE, 0x808C, 0xD1BF, 0x8096, 0xF5AB, 0x809B, 0xF9FD, 0x809D, 0xCADC, 0x80A1, 0xCDC6,
- 0x80A2, 0xF2B6, 0x80A5, 0xDDFE, 0x80A9, 0xCCB7, 0x80AA, 0xDBB8, 0x80AF, 0xD0E9, 0x80B1, 0xCEDD, 0x80B2, 0xEBC0, 0x80B4, 0xFDA2,
- 0x80BA, 0xF8CB, 0x80C3, 0xEAD6, 0x80C4, 0xF1B0, 0x80CC, 0xDBCE, 0x80CE, 0xF7C3, 0x80DA, 0xDBCF, 0x80DB, 0xCBA4, 0x80DE, 0xF8E0,
- 0x80E1, 0xFBD7, 0x80E4, 0xEBCA, 0x80E5, 0xE0A1, 0x80F1, 0xCECD, 0x80F4, 0xD4DC, 0x80F8, 0xFDD8, 0x80FD, 0xD2F6, 0x8102, 0xF2B7,
- 0x8105, 0xFAF6, 0x8106, 0xF6AA, 0x8107, 0xFAF7, 0x8108, 0xD8E6, 0x810A, 0xF4B1, 0x8118, 0xE8D2, 0x811A, 0xCAC5, 0x811B, 0xCCEB,
- 0x8123, 0xE2EE, 0x8129, 0xE2BB, 0x812B, 0xF7AD, 0x812F, 0xF8E1, 0x8139, 0xF3EC, 0x813E, 0xDEA1, 0x814B, 0xE4FD, 0x814E, 0xE3EC,
- 0x8150, 0xDDAF, 0x8151, 0xDDB0, 0x8154, 0xCBB7, 0x8155, 0xE8D3, 0x8165, 0xE1A3, 0x8166, 0xD2E0, 0x816B, 0xF0FE, 0x8170, 0xE9A6,
- 0x8171, 0xCBF2, 0x8178, 0xEDF3, 0x8179, 0xDCD9, 0x817A, 0xE0CD, 0x817F, 0xF7DA, 0x8180, 0xDBB9, 0x8188, 0xCCAE, 0x818A, 0xDADB,
- 0x818F, 0xCDC7, 0x819A, 0xDDB1, 0x819C, 0xD8AF, 0x819D, 0xE3A3, 0x81A0, 0xCEEF, 0x81A3, 0xF2F3, 0x81A8, 0xF8B3, 0x81B3, 0xE0CE,
- 0x81B5, 0xF5FD, 0x81BA, 0xEBEC, 0x81BD, 0xD3C5, 0x81BE, 0xFCEC, 0x81BF, 0xD2DB, 0x81C0, 0xD4EB, 0x81C2, 0xDEA2, 0x81C6, 0xE5E6,
- 0x81CD, 0xF0B0, 0x81D8, 0xD5C4, 0x81DF, 0xEDF4, 0x81E3, 0xE3ED, 0x81E5, 0xE8C2, 0x81E7, 0xEDF5, 0x81E8, 0xD7FC, 0x81EA, 0xEDBB,
- 0x81ED, 0xF6AB, 0x81F3, 0xF2B8, 0x81F4, 0xF6C8, 0x81FA, 0xD3E6, 0x81FB, 0xF2DD, 0x81FC, 0xCFBF, 0x81FE, 0xEBAC, 0x8205, 0xCFC0,
- 0x8207, 0xE6A8, 0x8208, 0xFDE9, 0x820A, 0xCFC1, 0x820C, 0xE0DF, 0x820D, 0xDEEC, 0x8212, 0xE0A2, 0x821B, 0xF4BF, 0x821C, 0xE2EF,
- 0x821E, 0xD9F1, 0x821F, 0xF1C7, 0x8221, 0xCBB8, 0x822A, 0xF9FE, 0x822B, 0xDBBA, 0x822C, 0xDAF5, 0x8235, 0xF6EC, 0x8236, 0xDADC,
- 0x8237, 0xFAE4, 0x8239, 0xE0CF, 0x8240, 0xDDB2, 0x8245, 0xE6A9, 0x8247, 0xEFF3, 0x8259, 0xF3ED, 0x8264, 0xEBFA, 0x8266, 0xF9E6,
- 0x826E, 0xCADD, 0x826F, 0xD5DE, 0x8271, 0xCADE, 0x8272, 0xDFE4, 0x8276, 0xE6FD, 0x8278, 0xF5AC, 0x827E, 0xE4F5, 0x828B, 0xE9E3,
- 0x828D, 0xEDCB, 0x828E, 0xCFE4, 0x8292, 0xD8D3, 0x8299, 0xDDB3, 0x829A, 0xD4EC, 0x829D, 0xF2B9, 0x829F, 0xDFB7, 0x82A5, 0xCBCE,
- 0x82A6, 0xFBD8, 0x82A9, 0xD0D9, 0x82AC, 0xDDD2, 0x82AD, 0xF7F4, 0x82AE, 0xE7DC, 0x82AF, 0xE4A5, 0x82B1, 0xFCA3, 0x82B3, 0xDBBB,
- 0x82B7, 0xF2BA, 0x82B8, 0xE9FD, 0x82B9, 0xD0CA, 0x82BB, 0xF5D6, 0x82BC, 0xD9C5, 0x82BD, 0xE4B4, 0x82BF, 0xEDA7, 0x82D1, 0xEABD,
- 0x82D2, 0xE6FE, 0x82D4, 0xF7C4, 0x82D5, 0xF5AD, 0x82D7, 0xD9E0, 0x82DB, 0xCAB4, 0x82DE, 0xF8E2, 0x82DF, 0xCFC2, 0x82E1, 0xECBE,
- 0x82E5, 0xE5B4, 0x82E6, 0xCDC8, 0x82E7, 0xEEC8, 0x82F1, 0xE7C8, 0x82FD, 0xCDC9, 0x82FE, 0xF9B7, 0x8301, 0xF1E8, 0x8302, 0xD9F2,
- 0x8303, 0xDBF5, 0x8304, 0xCAB5, 0x8305, 0xD9C6, 0x8309, 0xD8C9, 0x8317, 0xD9AB, 0x8328, 0xEDBC, 0x832B, 0xD8D4, 0x832F, 0xDCDA,
- 0x8331, 0xE2BC, 0x8334, 0xFCED, 0x8335, 0xECE0, 0x8336, 0xD2FE, 0x8338, 0xE9C7, 0x8339, 0xE6AA, 0x8340, 0xE2F0, 0x8347, 0xFABB,
- 0x8349, 0xF5AE, 0x834A, 0xFBAA, 0x834F, 0xECFB, 0x8351, 0xECBF, 0x8352, 0xFCD8, 0x8373, 0xD4E5, 0x8377, 0xF9C3, 0x837B, 0xEEE2,
- 0x8389, 0xD7E9, 0x838A, 0xEDF6, 0x838E, 0xDEED, 0x8396, 0xCCEC, 0x8398, 0xE3EE, 0x839E, 0xE8D4, 0x83A2, 0xFAF8, 0x83A9, 0xDDB4,
- 0x83AA, 0xE4B5, 0x83AB, 0xD8B0, 0x83BD, 0xD8D5, 0x83C1, 0xF4EA, 0x83C5, 0xCEB9, 0x83C9, 0xD6E1, 0x83CA, 0xCFD2, 0x83CC, 0xD0B6,
- 0x83D3, 0xCEA2, 0x83D6, 0xF3EE, 0x83DC, 0xF3F8, 0x83E9, 0xDCCC, 0x83EB, 0xD0CB, 0x83EF, 0xFCA4, 0x83F0, 0xCDCA, 0x83F1, 0xD7D4,
- 0x83F2, 0xDEA3, 0x83F4, 0xE4E0, 0x83F9, 0xEEC9, 0x83FD, 0xE2DD, 0x8403, 0xF5FE, 0x8404, 0xD4AC, 0x840A, 0xD5D1, 0x840C, 0xD8F0,
- 0x840D, 0xF8C3, 0x840E, 0xEAD7, 0x8429, 0xF5D7, 0x842C, 0xD8BF, 0x8431, 0xFDC0, 0x8438, 0xEBAD, 0x843D, 0xD5AA, 0x8449, 0xE7A8,
- 0x8457, 0xEECA, 0x845B, 0xCAE7, 0x8461, 0xF8E3, 0x8463, 0xD4DD, 0x8466, 0xEAD8, 0x846B, 0xFBD9, 0x846C, 0xEDF7, 0x846F, 0xE5B5,
- 0x8475, 0xD0AD, 0x847A, 0xF1F1, 0x8490, 0xE2BD, 0x8494, 0xE3C8, 0x8499, 0xD9D5, 0x849C, 0xDFAA, 0x84A1, 0xDBBC, 0x84B2, 0xF8E4,
- 0x84B8, 0xF1FA, 0x84BB, 0xE5B6, 0x84BC, 0xF3EF, 0x84BF, 0xFBDA, 0x84C0, 0xE1E0, 0x84C2, 0xD9AC, 0x84C4, 0xF5EB, 0x84C6, 0xE0B6,
- 0x84C9, 0xE9C8, 0x84CB, 0xCBCF, 0x84CD, 0xE3C9, 0x84D1, 0xDEEE, 0x84DA, 0xE2BE, 0x84EC, 0xDCEF, 0x84EE, 0xD6A5, 0x84F4, 0xE2F1,
- 0x84FC, 0xD6FE, 0x8511, 0xD9A1, 0x8513, 0xD8C0, 0x8514, 0xDCDB, 0x8517, 0xEDBD, 0x8518, 0xDFB8, 0x851A, 0xEAA5, 0x851E, 0xD7AD,
- 0x8521, 0xF3F9, 0x8523, 0xEDF8, 0x8525, 0xF5C7, 0x852C, 0xE1CA, 0x852D, 0xEBE3, 0x852F, 0xF2DE, 0x853D, 0xF8CC, 0x853F, 0xEAD9,
- 0x8541, 0xD3C6, 0x8543, 0xDBE6, 0x8549, 0xF5AF, 0x854E, 0xCEF0, 0x8553, 0xE9FE, 0x8559, 0xFBB6, 0x8563, 0xE2F2, 0x8568, 0xCFF2,
- 0x8569, 0xF7B9, 0x856A, 0xD9F3, 0x856D, 0xE1CB, 0x8584, 0xDADD, 0x8587, 0xDAB9, 0x858F, 0xEBFB, 0x8591, 0xCBB9, 0x8594, 0xEDF9,
- 0x859B, 0xE0E0, 0x85A6, 0xF4C0, 0x85A8, 0xFDBC, 0x85A9, 0xDFB1, 0x85AA, 0xE3EF, 0x85AF, 0xE0A3, 0x85B0, 0xFDB9, 0x85BA, 0xF0B1,
- 0x85C1, 0xCDCB, 0x85C9, 0xEDBE, 0x85CD, 0xD5C0, 0x85CE, 0xE3F0, 0x85CF, 0xEDFA, 0x85D5, 0xE9E4, 0x85DC, 0xD5ED, 0x85DD, 0xE7DD,
- 0x85E4, 0xD4F6, 0x85E5, 0xE5B7, 0x85E9, 0xDBE7, 0x85EA, 0xE2BF, 0x85F7, 0xEECB, 0x85FA, 0xD7F4, 0x85FB, 0xF0DD, 0x85FF, 0xCEAB,
- 0x8602, 0xE7DE, 0x8606, 0xD6D6, 0x8607, 0xE1CC, 0x860A, 0xE8B3, 0x8616, 0xE5EE, 0x8617, 0xDCA2, 0x861A, 0xE0D0, 0x862D, 0xD5B5,
- 0x863F, 0xD5A1, 0x864E, 0xFBDB, 0x8650, 0xF9CB, 0x8654, 0xCBF3, 0x8655, 0xF4A5, 0x865B, 0xFAC8, 0x865C, 0xD6D7, 0x865E, 0xE9E5,
- 0x865F, 0xFBDC, 0x8667, 0xFDD0, 0x8679, 0xFBF6, 0x868A, 0xDAA5, 0x868C, 0xDBBD, 0x8693, 0xECE2, 0x86A3, 0xCDF7, 0x86A4, 0xF0DE,
- 0x86A9, 0xF6C9, 0x86C7, 0xDEEF, 0x86CB, 0xD3B1, 0x86D4, 0xFCEE, 0x86D9, 0xE8C3, 0x86DB, 0xF1C8, 0x86DF, 0xCEF1, 0x86E4, 0xF9ED,
- 0x86ED, 0xF2F4, 0x86FE, 0xE4B6, 0x8700, 0xF5B9, 0x8702, 0xDCF0, 0x8703, 0xE3F1, 0x8708, 0xE8A5, 0x8718, 0xF2BB, 0x871A, 0xDEA4,
- 0x871C, 0xDACC, 0x874E, 0xCAE9, 0x8755, 0xE3DA, 0x8757, 0xFCD9, 0x875F, 0xEADA, 0x8766, 0xF9C4, 0x8768, 0xE3A4, 0x8774, 0xFBDD,
- 0x8776, 0xEFCA, 0x8778, 0xE8C4, 0x8782, 0xD5CC, 0x878D, 0xEBD7, 0x879F, 0xD9AD, 0x87A2, 0xFBAB, 0x87B3, 0xD3D9, 0x87BA, 0xD5A2,
- 0x87C4, 0xF6DE, 0x87E0, 0xDAF6, 0x87EC, 0xE0D1, 0x87EF, 0xE9A8, 0x87F2, 0xF5F9, 0x87F9, 0xFAAF, 0x87FB, 0xEBFC, 0x87FE, 0xE0EA,
- 0x8805, 0xE3B2, 0x881F, 0xD5C5, 0x8822, 0xF1E3, 0x8823, 0xD5EE, 0x8831, 0xCDCC, 0x8836, 0xEDD9, 0x883B, 0xD8C1, 0x8840, 0xFAEC,
- 0x8846, 0xF1EB, 0x884C, 0xFABC, 0x884D, 0xE6E2, 0x8852, 0xFAE5, 0x8853, 0xE2FA, 0x8857, 0xCAB6, 0x8859, 0xE4B7, 0x885B, 0xEADB,
- 0x885D, 0xF5FA, 0x8861, 0xFBAC, 0x8862, 0xCFC3, 0x8863, 0xEBFD, 0x8868, 0xF8FA, 0x886B, 0xDFB9, 0x8870, 0xE1F1, 0x8872, 0xD2A4,
- 0x8877, 0xF5FB, 0x887E, 0xD0DA, 0x887F, 0xD0DB, 0x8881, 0xEABE, 0x8882, 0xD9B1, 0x8888, 0xCAB7, 0x888B, 0xD3E7, 0x888D, 0xF8E5,
- 0x8892, 0xD3B2, 0x8896, 0xE2C0, 0x8897, 0xF2DF, 0x889E, 0xCDE5, 0x88AB, 0xF9AC, 0x88B4, 0xCDCD, 0x88C1, 0xEEAE, 0x88C2, 0xD6AE,
- 0x88CF, 0xD7EA, 0x88D4, 0xE7E0, 0x88D5, 0xEBAE, 0x88D9, 0xCFD9, 0x88DC, 0xDCCD, 0x88DD, 0xEDFB, 0x88DF, 0xDEF0, 0x88E1, 0xD7EB,
- 0x88E8, 0xDEA5, 0x88F3, 0xDFD7, 0x88F4, 0xDBD0, 0x88F5, 0xDBD1, 0x88F8, 0xD5A3, 0x88FD, 0xF0B2, 0x8907, 0xDCDC, 0x8910, 0xCAE8,
- 0x8912, 0xF8E6, 0x8913, 0xDCCE, 0x8918, 0xEADC, 0x8919, 0xDBD2, 0x8925, 0xE9B3, 0x892A, 0xF7DB, 0x8936, 0xE3A8, 0x8938, 0xD7AE,
- 0x893B, 0xE0E1, 0x8941, 0xCBBA, 0x8944, 0xE5D1, 0x895F, 0xD0DC, 0x8964, 0xD5C1, 0x896A, 0xD8CA, 0x8972, 0xE3A9, 0x897F, 0xE0A4,
- 0x8981, 0xE9A9, 0x8983, 0xD3C7, 0x8986, 0xDCDD, 0x8987, 0xF8AE, 0x898B, 0xCCB8, 0x898F, 0xD0AE, 0x8993, 0xD8F2, 0x8996, 0xE3CA,
- 0x89A1, 0xCCAF, 0x89A9, 0xD4AD, 0x89AA, 0xF6D1, 0x89B2, 0xD0CC, 0x89BA, 0xCAC6, 0x89BD, 0xD5C2, 0x89C0, 0xCEBA, 0x89D2, 0xCAC7,
- 0x89E3, 0xFAB0, 0x89F4, 0xDFD8, 0x89F8, 0xF5BA, 0x8A00, 0xE5EB, 0x8A02, 0xEFF4, 0x8A03, 0xDDB5, 0x8A08, 0xCDAA, 0x8A0A, 0xE3F2,
- 0x8A0C, 0xFBF7, 0x8A0E, 0xF7D0, 0x8A13, 0xFDBA, 0x8A16, 0xFDE1, 0x8A17, 0xF6FE, 0x8A18, 0xD1C0, 0x8A1B, 0xE8C5, 0x8A1D, 0xE4B8,
- 0x8A1F, 0xE1E8, 0x8A23, 0xCCC1, 0x8A25, 0xD2ED, 0x8A2A, 0xDBBE, 0x8A2D, 0xE0E2, 0x8A31, 0xFAC9, 0x8A34, 0xE1CD, 0x8A36, 0xCAB8,
- 0x8A3A, 0xF2E0, 0x8A3B, 0xF1C9, 0x8A50, 0xDEF1, 0x8A54, 0xF0DF, 0x8A55, 0xF8C4, 0x8A5B, 0xEECC, 0x8A5E, 0xDEF2, 0x8A60, 0xE7C9,
- 0x8A62, 0xE2F3, 0x8A63, 0xE7E1, 0x8A66, 0xE3CB, 0x8A69, 0xE3CC, 0x8A6D, 0xCFF8, 0x8A6E, 0xEFAC, 0x8A70, 0xFDFE, 0x8A71, 0xFCA5,
- 0x8A72, 0xFAB1, 0x8A73, 0xDFD9, 0x8A75, 0xE0D2, 0x8A79, 0xF4DA, 0x8A85, 0xF1CA, 0x8A87, 0xCEA3, 0x8A8C, 0xF2BC, 0x8A8D, 0xECE3,
- 0x8A93, 0xE0A5, 0x8A95, 0xF7AB, 0x8A98, 0xEBAF, 0x8A9E, 0xE5DE, 0x8AA0, 0xE1A4, 0x8AA1, 0xCDAB, 0x8AA3, 0xD9F4, 0x8AA4, 0xE8A6,
- 0x8AA5, 0xCDCE, 0x8AA6, 0xE1E9, 0x8AA8, 0xFCEF, 0x8AAA, 0xE0E3, 0x8AB0, 0xE2C1, 0x8AB2, 0xCEA4, 0x8AB9, 0xDEA6, 0x8ABC, 0xEBFE,
- 0x8ABE, 0xEBDD, 0x8ABF, 0xF0E0, 0x8AC2, 0xF4DB, 0x8AC4, 0xE2F4, 0x8AC7, 0xD3C8, 0x8ACB, 0xF4EB, 0x8ACD, 0xEEB5, 0x8ACF, 0xF5D8,
- 0x8AD2, 0xD5DF, 0x8AD6, 0xD6E5, 0x8ADB, 0xEBB0, 0x8ADC, 0xF4E3, 0x8AE1, 0xE3CD, 0x8AE6, 0xF4F4, 0x8AE7, 0xFAB2, 0x8AEA, 0xEFF5,
- 0x8AEB, 0xCADF, 0x8AED, 0xEBB1, 0x8AEE, 0xEDBF, 0x8AF1, 0xFDC9, 0x8AF6, 0xE4A6, 0x8AF7, 0xF9A4, 0x8AF8, 0xF0B3, 0x8AFA, 0xE5EC,
- 0x8AFE, 0xD1E7, 0x8B00, 0xD9C7, 0x8B01, 0xE4D7, 0x8B02, 0xEADD, 0x8B04, 0xD4F7, 0x8B0E, 0xDABA, 0x8B10, 0xDACD, 0x8B14, 0xF9CC,
- 0x8B16, 0xE1DA, 0x8B17, 0xDBBF, 0x8B19, 0xCCC5, 0x8B1A, 0xECD0, 0x8B1B, 0xCBBB, 0x8B1D, 0xDEF3, 0x8B20, 0xE9AA, 0x8B28, 0xD9C8,
- 0x8B2B, 0xEEE3, 0x8B2C, 0xD7BD, 0x8B33, 0xCFC4, 0x8B39, 0xD0CD, 0x8B41, 0xFCA6, 0x8B49, 0xF1FB, 0x8B4E, 0xFDD2, 0x8B4F, 0xD1C1,
- 0x8B58, 0xE3DB, 0x8B5A, 0xD3C9, 0x8B5C, 0xDCCF, 0x8B66, 0xCCED, 0x8B6C, 0xDEA7, 0x8B6F, 0xE6BB, 0x8B70, 0xECA1, 0x8B74, 0xCCB9,
- 0x8B77, 0xFBDE, 0x8B7D, 0xE7E2, 0x8B80, 0xD4C1, 0x8B8A, 0xDCA8, 0x8B90, 0xE2C2, 0x8B92, 0xF3D8, 0x8B93, 0xE5D3, 0x8B96, 0xF3D9,
- 0x8B9A, 0xF3C6, 0x8C37, 0xCDDB, 0x8C3F, 0xCDAC, 0x8C41, 0xFCC3, 0x8C46, 0xD4E7, 0x8C48, 0xD1C2, 0x8C4A, 0xF9A5, 0x8C4C, 0xE8D5,
- 0x8C55, 0xE3CE, 0x8C5A, 0xD4CA, 0x8C61, 0xDFDA, 0x8C6A, 0xFBDF, 0x8C6B, 0xE7E3, 0x8C79, 0xF8FB, 0x8C7A, 0xE3CF, 0x8C82, 0xF5B0,
- 0x8C8A, 0xD8E7, 0x8C8C, 0xD9C9, 0x8C9D, 0xF8AF, 0x8C9E, 0xEFF6, 0x8CA0, 0xDDB6, 0x8CA1, 0xEEAF, 0x8CA2, 0xCDF8, 0x8CA7, 0xDEB8,
- 0x8CA8, 0xFCA7, 0x8CA9, 0xF7FC, 0x8CAA, 0xF7B1, 0x8CAB, 0xCEBB, 0x8CAC, 0xF4A1, 0x8CAF, 0xEECD, 0x8CB0, 0xE1AE, 0x8CB3, 0xECC3,
- 0x8CB4, 0xCFFE, 0x8CB6, 0xF8BF, 0x8CB7, 0xD8E2, 0x8CB8, 0xD3E8, 0x8CBB, 0xDEA8, 0x8CBC, 0xF4E4, 0x8CBD, 0xECC2, 0x8CBF, 0xD9F5,
- 0x8CC0, 0xF9C5, 0x8CC1, 0xDDD3, 0x8CC2, 0xD6F1, 0x8CC3, 0xECFC, 0x8CC4, 0xFCF0, 0x8CC7, 0xEDC0, 0x8CC8, 0xCAB9, 0x8CCA, 0xEEE4,
- 0x8CD1, 0xF2E1, 0x8CD3, 0xDEB9, 0x8CDA, 0xD6F2, 0x8CDC, 0xDEF4, 0x8CDE, 0xDFDB, 0x8CE0, 0xDBD3, 0x8CE2, 0xFAE7, 0x8CE3, 0xD8E3,
- 0x8CE4, 0xF4C1, 0x8CE6, 0xDDB7, 0x8CEA, 0xF2F5, 0x8CED, 0xD4AE, 0x8CF4, 0xD6F3, 0x8CFB, 0xDDB8, 0x8CFC, 0xCFC5, 0x8CFD, 0xDFDF,
- 0x8D04, 0xF2BE, 0x8D05, 0xF6A1, 0x8D07, 0xEBCB, 0x8D08, 0xF1FC, 0x8D0A, 0xF3C7, 0x8D0D, 0xE0EB, 0x8D13, 0xEDFC, 0x8D16, 0xE1DB,
- 0x8D64, 0xEEE5, 0x8D66, 0xDEF5, 0x8D6B, 0xFAD3, 0x8D70, 0xF1CB, 0x8D73, 0xD0AF, 0x8D74, 0xDDB9, 0x8D77, 0xD1C3, 0x8D85, 0xF5B1,
- 0x8D8A, 0xEAC6, 0x8D99, 0xF0E1, 0x8DA3, 0xF6AC, 0x8DA8, 0xF5D9, 0x8DB3, 0xF0EB, 0x8DBA, 0xDDBA, 0x8DBE, 0xF2BF, 0x8DC6, 0xF7C5,
- 0x8DCB, 0xDBA2, 0x8DCC, 0xF2F6, 0x8DCF, 0xCABA, 0x8DDB, 0xF7F5, 0x8DDD, 0xCBE5, 0x8DE1, 0xEEE6, 0x8DE3, 0xE0D3, 0x8DE8, 0xCEA5,
- 0x8DEF, 0xD6D8, 0x8DF3, 0xD4AF, 0x8E0A, 0xE9C9, 0x8E0F, 0xD3CE, 0x8E10, 0xF4C2, 0x8E1E, 0xCBE6, 0x8E2A, 0xF1A1, 0x8E30, 0xEBB2,
- 0x8E35, 0xF1A2, 0x8E42, 0xEBB3, 0x8E44, 0xF0B4, 0x8E47, 0xCBF4, 0x8E48, 0xD4B0, 0x8E49, 0xF3B2, 0x8E4A, 0xFBB7, 0x8E59, 0xF5EC,
- 0x8E5F, 0xEEE7, 0x8E60, 0xF4B2, 0x8E74, 0xF5ED, 0x8E76, 0xCFF3, 0x8E81, 0xF0E2, 0x8E87, 0xEECE, 0x8E8A, 0xF1CC, 0x8E8D, 0xE5B8,
- 0x8EAA, 0xD7F5, 0x8EAB, 0xE3F3, 0x8EAC, 0xCFE5, 0x8EC0, 0xCFC6, 0x8ECA, 0xF3B3, 0x8ECB, 0xE4D8, 0x8ECC, 0xCFF9, 0x8ECD, 0xCFDA,
- 0x8ED2, 0xFACD, 0x8EDF, 0xE6E3, 0x8EEB, 0xF2E2, 0x8EF8, 0xF5EE, 0x8EFB, 0xCABB, 0x8EFE, 0xE3DC, 0x8F03, 0xCEF2, 0x8F05, 0xD6D9,
- 0x8F09, 0xEEB0, 0x8F12, 0xF4E5, 0x8F13, 0xD8C2, 0x8F14, 0xDCD0, 0x8F15, 0xCCEE, 0x8F1B, 0xD5E0, 0x8F1C, 0xF6CA, 0x8F1D, 0xFDCA,
- 0x8F1E, 0xD8D6, 0x8F1F, 0xF4CF, 0x8F26, 0xD6A6, 0x8F27, 0xDCBE, 0x8F29, 0xDBD4, 0x8F2A, 0xD7C7, 0x8F2F, 0xF2FE, 0x8F33, 0xF1CD,
- 0x8F38, 0xE2C3, 0x8F39, 0xDCDE, 0x8F3B, 0xDCDF, 0x8F3E, 0xEFAD, 0x8F3F, 0xE6AB, 0x8F44, 0xF9DD, 0x8F45, 0xEABF, 0x8F49, 0xEFAE,
- 0x8F4D, 0xF4D0, 0x8F4E, 0xCEF3, 0x8F5D, 0xE6AC, 0x8F5F, 0xCEDE, 0x8F62, 0xD5F9, 0x8F9B, 0xE3F4, 0x8F9C, 0xCDD0, 0x8FA3, 0xD5B8,
- 0x8FA6, 0xF7FD, 0x8FA8, 0xDCA9, 0x8FAD, 0xDEF6, 0x8FAF, 0xDCAA, 0x8FB0, 0xF2E3, 0x8FB1, 0xE9B4, 0x8FB2, 0xD2DC, 0x8FC2, 0xE9E6,
- 0x8FC5, 0xE3F6, 0x8FCE, 0xE7CA, 0x8FD1, 0xD0CE, 0x8FD4, 0xDAF7, 0x8FE6, 0xCABC, 0x8FEA, 0xEEE8, 0x8FEB, 0xDADE, 0x8FED, 0xF2F7,
- 0x8FF0, 0xE2FB, 0x8FF2, 0xCCA6, 0x8FF7, 0xDABB, 0x8FF9, 0xEEE9, 0x8FFD, 0xF5DA, 0x9000, 0xF7DC, 0x9001, 0xE1EA, 0x9002, 0xCEC1,
- 0x9003, 0xD4B1, 0x9005, 0xFDB1, 0x9006, 0xE6BD, 0x9008, 0xFBAD, 0x900B, 0xF8E7, 0x900D, 0xE1CE, 0x900F, 0xF7E2, 0x9010, 0xF5EF,
- 0x9011, 0xCFC7, 0x9014, 0xD4B2, 0x9015, 0xCCEF, 0x9017, 0xD4E8, 0x9019, 0xEECF, 0x901A, 0xF7D7, 0x901D, 0xE0A6, 0x901E, 0xD6C1,
- 0x901F, 0xE1DC, 0x9020, 0xF0E3, 0x9021, 0xF1E4, 0x9022, 0xDCF1, 0x9023, 0xD6A7, 0x902E, 0xF4F5, 0x9031, 0xF1CE, 0x9032, 0xF2E4,
- 0x9035, 0xD0B0, 0x9038, 0xECEF, 0x903C, 0xF9BA, 0x903E, 0xEBB5, 0x9041, 0xD4ED, 0x9042, 0xE2C4, 0x9047, 0xE9E7, 0x904A, 0xEBB4,
- 0x904B, 0xEAA1, 0x904D, 0xF8BC, 0x904E, 0xCEA6, 0x9050, 0xF9C6, 0x9051, 0xFCDA, 0x9053, 0xD4B3, 0x9054, 0xD3B9, 0x9055, 0xEADE,
- 0x9059, 0xE9AB, 0x905C, 0xE1E1, 0x905D, 0xD3CF, 0x905E, 0xF4F6, 0x9060, 0xEAC0, 0x9061, 0xE1CF, 0x9063, 0xCCBA, 0x9069, 0xEEEA,
- 0x906D, 0xF0E4, 0x906E, 0xF3B4, 0x906F, 0xD4EE, 0x9072, 0xF2C0, 0x9075, 0xF1E5, 0x9077, 0xF4C3, 0x9078, 0xE0D4, 0x907A, 0xEBB6,
- 0x907C, 0xD7A1, 0x907D, 0xCBE8, 0x907F, 0xF9AD, 0x9080, 0xE9AD, 0x9081, 0xD8E4, 0x9082, 0xFAB3, 0x9083, 0xE2C5, 0x9084, 0xFCBD,
- 0x9087, 0xECC4, 0x9088, 0xD8B1, 0x908A, 0xDCAB, 0x908F, 0xD5A4, 0x9091, 0xEBE9, 0x9095, 0xE8BB, 0x9099, 0xD8D7, 0x90A2, 0xFBAE,
- 0x90A3, 0xD1E1, 0x90A6, 0xDBC0, 0x90A8, 0xF5BE, 0x90AA, 0xDEF7, 0x90AF, 0xCAFB, 0x90B0, 0xF7C6, 0x90B1, 0xCFC8, 0x90B5, 0xE1D0,
- 0x90B8, 0xEED0, 0x90C1, 0xE9F4, 0x90CA, 0xCEF4, 0x90DE, 0xD5CD, 0x90E1, 0xCFDB, 0x90E8, 0xDDBB, 0x90ED, 0xCEAC, 0x90F5, 0xE9E8,
- 0x90FD, 0xD4B4, 0x9102, 0xE4C7, 0x9112, 0xF5DB, 0x9115, 0xFAC1, 0x9119, 0xDEA9, 0x9127, 0xD4F8, 0x912D, 0xEFF7, 0x9132, 0xD3B3,
- 0x9149, 0xEBB7, 0x914A, 0xEFF8, 0x914B, 0xF5DC, 0x914C, 0xEDCC, 0x914D, 0xDBD5, 0x914E, 0xF1CF, 0x9152, 0xF1D0, 0x9162, 0xF5B2,
- 0x9169, 0xD9AE, 0x916A, 0xD5AC, 0x916C, 0xE2C6, 0x9175, 0xFDA3, 0x9177, 0xFBE5, 0x9178, 0xDFAB, 0x9187, 0xE2F5, 0x9189, 0xF6AD,
- 0x918B, 0xF5B3, 0x918D, 0xF0B5, 0x9192, 0xE1A5, 0x919C, 0xF5DD, 0x91AB, 0xECA2, 0x91AC, 0xEDFD, 0x91AE, 0xF5B4, 0x91AF, 0xFBB8,
- 0x91B1, 0xDBA3, 0x91B4, 0xD6CA, 0x91B5, 0xCBD9, 0x91C0, 0xE5D4, 0x91C7, 0xF3FA, 0x91C9, 0xEBB8, 0x91CB, 0xE0B7, 0x91CC, 0xD7EC,
- 0x91CD, 0xF1EC, 0x91CE, 0xE5AF, 0x91CF, 0xD5E1, 0x91D0, 0xD7ED, 0x91D1, 0xD1D1, 0x91D7, 0xE1F2, 0x91D8, 0xEFF9, 0x91DC, 0xDDBC,
- 0x91DD, 0xF6DC, 0x91E3, 0xF0E5, 0x91E7, 0xF4C4, 0x91EA, 0xE9E9, 0x91F5, 0xF3FB, 0x920D, 0xD4EF, 0x9210, 0xCCA2, 0x9211, 0xF7FE,
- 0x9212, 0xDFBC, 0x9217, 0xEBCD, 0x921E, 0xD0B7, 0x9234, 0xD6C2, 0x923A, 0xE8AD, 0x923F, 0xEFAF, 0x9240, 0xCBA5, 0x9245, 0xCBE9,
- 0x9249, 0xFAE8, 0x9257, 0xCCC6, 0x925B, 0xE6E7, 0x925E, 0xEAC7, 0x9262, 0xDBA4, 0x9264, 0xCFC9, 0x9265, 0xE2FC, 0x9266, 0xEFFA,
- 0x9280, 0xEBDE, 0x9283, 0xF5C8, 0x9285, 0xD4DE, 0x9291, 0xE0D5, 0x9293, 0xEFB0, 0x9296, 0xE2C7, 0x9298, 0xD9AF, 0x929C, 0xF9E7,
- 0x92B3, 0xE7E5, 0x92B6, 0xCFCA, 0x92B7, 0xE1D1, 0x92B9, 0xE2C8, 0x92CC, 0xEFFB, 0x92CF, 0xFAF9, 0x92D2, 0xDCF2, 0x92E4, 0xE0A7,
- 0x92EA, 0xF8E8, 0x92F8, 0xCBEA, 0x92FC, 0xCBBC, 0x9304, 0xD6E2, 0x9310, 0xF5DE, 0x9318, 0xF5DF, 0x931A, 0xEEB6, 0x931E, 0xE2F6,
- 0x931F, 0xD3CA, 0x9320, 0xEFFC, 0x9321, 0xD1C4, 0x9322, 0xEFB1, 0x9324, 0xD1C5, 0x9326, 0xD0DE, 0x9328, 0xD9E1, 0x932B, 0xE0B8,
- 0x932E, 0xCDD1, 0x932F, 0xF3B9, 0x9348, 0xE7CC, 0x934A, 0xD6A8, 0x934B, 0xCEA7, 0x934D, 0xD4B5, 0x9354, 0xE4C8, 0x935B, 0xD3B4,
- 0x936E, 0xEBB9, 0x9375, 0xCBF5, 0x937C, 0xF6DD, 0x937E, 0xF1A3, 0x938C, 0xCCC7, 0x9394, 0xE9CA, 0x9396, 0xE1F0, 0x939A, 0xF5E0,
- 0x93A3, 0xFBAF, 0x93A7, 0xCBD1, 0x93AC, 0xFBE0, 0x93AD, 0xF2E5, 0x93B0, 0xECF0, 0x93C3, 0xF0EC, 0x93D1, 0xEEEB, 0x93DE, 0xE9CB,
- 0x93E1, 0xCCF0, 0x93E4, 0xD7AF, 0x93F6, 0xF3A1, 0x9404, 0xFCF5, 0x9418, 0xF1A4, 0x9425, 0xE0D6, 0x942B, 0xEFB2, 0x9435, 0xF4D1,
- 0x9438, 0xF7A1, 0x9444, 0xF1D1, 0x9451, 0xCAFC, 0x9452, 0xCAFD, 0x945B, 0xCECE, 0x947D, 0xF3C8, 0x947F, 0xF3BA, 0x9577, 0xEDFE,
- 0x9580, 0xDAA6, 0x9583, 0xE0EC, 0x9589, 0xF8CD, 0x958B, 0xCBD2, 0x958F, 0xEBCE, 0x9591, 0xF9D8, 0x9592, 0xF9D9, 0x9593, 0xCAE0,
- 0x9594, 0xDACA, 0x9598, 0xCBA6, 0x95A3, 0xCAC8, 0x95A4, 0xF9EE, 0x95A5, 0xDBEC, 0x95A8, 0xD0B1, 0x95AD, 0xD5EF, 0x95B1, 0xE6F3,
- 0x95BB, 0xE7A2, 0x95BC, 0xE4D9, 0x95C7, 0xE4E1, 0x95CA, 0xFCC4, 0x95D4, 0xF9EF, 0x95D5, 0xCFF4, 0x95D6, 0xF7E6, 0x95DC, 0xCEBC,
- 0x95E1, 0xF4C5, 0x95E2, 0xDCA3, 0x961C, 0xDDBD, 0x9621, 0xF4C6, 0x962A, 0xF8A1, 0x962E, 0xE8D6, 0x9632, 0xDBC1, 0x963B, 0xF0E6,
- 0x963F, 0xE4B9, 0x9640, 0xF6ED, 0x9642, 0xF9AE, 0x9644, 0xDDBE, 0x964B, 0xD7B0, 0x964C, 0xD8E8, 0x964D, 0xCBBD, 0x9650, 0xF9DA,
- 0x965B, 0xF8CE, 0x965C, 0xF9F0, 0x965D, 0xE0ED, 0x965E, 0xE3B3, 0x965F, 0xF4B3, 0x9662, 0xEAC2, 0x9663, 0xF2E6, 0x9664, 0xF0B6,
- 0x966A, 0xDBD6, 0x9670, 0xEBE4, 0x9673, 0xF2E7, 0x9675, 0xD7D5, 0x9676, 0xD4B6, 0x9677, 0xF9E8, 0x9678, 0xD7C1, 0x967D, 0xE5D5,
- 0x9685, 0xE9EA, 0x9686, 0xD7CC, 0x968A, 0xD3E9, 0x968B, 0xE2C9, 0x968D, 0xFCDB, 0x968E, 0xCDAD, 0x9694, 0xCCB0, 0x9695, 0xEAA2,
- 0x9698, 0xE4F6, 0x9699, 0xD0C0, 0x969B, 0xF0B7, 0x969C, 0xEEA1, 0x96A3, 0xD7F6, 0x96A7, 0xE2CA, 0x96A8, 0xE2CB, 0x96AA, 0xFACF,
- 0x96B1, 0xEBDF, 0x96B7, 0xD6CB, 0x96BB, 0xF4B4, 0x96C0, 0xEDCD, 0x96C1, 0xE4D2, 0x96C4, 0xEAA9, 0x96C5, 0xE4BA, 0x96C6, 0xF3A2,
- 0x96C7, 0xCDD2, 0x96C9, 0xF6CB, 0x96CB, 0xF1E6, 0x96CC, 0xEDC1, 0x96CD, 0xE8BC, 0x96CE, 0xEED1, 0x96D5, 0xF0E7, 0x96D6, 0xE2CC,
- 0x96D9, 0xE4AA, 0x96DB, 0xF5E1, 0x96DC, 0xEDDA, 0x96E2, 0xD7EE, 0x96E3, 0xD1F1, 0x96E8, 0xE9EB, 0x96E9, 0xE9EC, 0x96EA, 0xE0E4,
- 0x96EF, 0xDAA7, 0x96F0, 0xDDD4, 0x96F2, 0xEAA3, 0x96F6, 0xD6C3, 0x96F7, 0xD6F4, 0x96F9, 0xDADF, 0x96FB, 0xEFB3, 0x9700, 0xE2CD,
- 0x9706, 0xEFFD, 0x9707, 0xF2E8, 0x9711, 0xEFC5, 0x9713, 0xE7E7, 0x9716, 0xD7FD, 0x9719, 0xE7CE, 0x971C, 0xDFDC, 0x971E, 0xF9C7,
- 0x9727, 0xD9F6, 0x9730, 0xDFAC, 0x9732, 0xD6DA, 0x9739, 0xDCA4, 0x973D, 0xF0B8, 0x9742, 0xD5FA, 0x9744, 0xE4F7, 0x9748, 0xD6C4,
- 0x9751, 0xF4EC, 0x9756, 0xEFFE, 0x975C, 0xF0A1, 0x975E, 0xDEAA, 0x9761, 0xDABC, 0x9762, 0xD8FC, 0x9769, 0xFAD4, 0x976D, 0xECE5,
- 0x9774, 0xFCA8, 0x9777, 0xECE6, 0x977A, 0xD8CB, 0x978B, 0xFBB9, 0x978D, 0xE4D3, 0x978F, 0xCDF9, 0x97A0, 0xCFD3, 0x97A8, 0xCAEA,
- 0x97AB, 0xCFD4, 0x97AD, 0xF8BD, 0x97C6, 0xF4C7, 0x97CB, 0xEADF, 0x97D3, 0xF9DB, 0x97DC, 0xD4B7, 0x97F3, 0xEBE5, 0x97F6, 0xE1D2,
- 0x97FB, 0xEAA4, 0x97FF, 0xFAC2, 0x9800, 0xFBE1, 0x9801, 0xFAED, 0x9802, 0xF0A2, 0x9803, 0xCCF1, 0x9805, 0xFAA3, 0x9806, 0xE2F7,
- 0x9808, 0xE2CE, 0x980A, 0xE9F5, 0x980C, 0xE1EB, 0x9810, 0xE7E8, 0x9811, 0xE8D7, 0x9812, 0xDAF8, 0x9813, 0xD4CB, 0x9817, 0xF7F6,
- 0x9818, 0xD6C5, 0x982D, 0xD4E9, 0x9830, 0xFAFA, 0x9838, 0xCCF2, 0x9839, 0xF7DD, 0x983B, 0xDEBA, 0x9846, 0xCEA8, 0x984C, 0xF0B9,
- 0x984D, 0xE4FE, 0x984E, 0xE4C9, 0x9854, 0xE4D4, 0x9858, 0xEAC3, 0x985A, 0xEFB4, 0x985E, 0xD7BE, 0x9865, 0xFBE2, 0x9867, 0xCDD3,
- 0x986B, 0xEFB5, 0x986F, 0xFAE9, 0x98A8, 0xF9A6, 0x98AF, 0xDFBD, 0x98B1, 0xF7C7, 0x98C4, 0xF8FD, 0x98C7, 0xF8FC, 0x98DB, 0xDEAB,
- 0x98DC, 0xDBE8, 0x98DF, 0xE3DD, 0x98E1, 0xE1E2, 0x98E2, 0xD1C6, 0x98ED, 0xF6D0, 0x98EE, 0xEBE6, 0x98EF, 0xDAF9, 0x98F4, 0xECC7,
- 0x98FC, 0xDEF8, 0x98FD, 0xF8E9, 0x98FE, 0xE3DE, 0x9903, 0xCEF5, 0x9909, 0xFAC3, 0x990A, 0xE5D7, 0x990C, 0xECC8, 0x9910, 0xF3C9,
- 0x9913, 0xE4BB, 0x9918, 0xE6AE, 0x991E, 0xEFB6, 0x9920, 0xDCBF, 0x9928, 0xCEBD, 0x9945, 0xD8C3, 0x9949, 0xD0CF, 0x994B, 0xCFFA,
- 0x994C, 0xF3CA, 0x994D, 0xE0D7, 0x9951, 0xD1C7, 0x9952, 0xE9AE, 0x9954, 0xE8BD, 0x9957, 0xFAC4, 0x9996, 0xE2CF, 0x9999, 0xFAC5,
- 0x999D, 0xF9B8, 0x99A5, 0xDCE0, 0x99A8, 0xFBB0, 0x99AC, 0xD8A9, 0x99AD, 0xE5DF, 0x99AE, 0xF9A7, 0x99B1, 0xF6EE, 0x99B3, 0xF6CC,
- 0x99B4, 0xE2F8, 0x99B9, 0xECF1, 0x99C1, 0xDAE0, 0x99D0, 0xF1D2, 0x99D1, 0xD2CC, 0x99D2, 0xCFCB, 0x99D5, 0xCABD, 0x99D9, 0xDDBF,
- 0x99DD, 0xF6EF, 0x99DF, 0xDEF9, 0x99ED, 0xFAB4, 0x99F1, 0xD5AD, 0x99FF, 0xF1E7, 0x9A01, 0xDEBE, 0x9A08, 0xDCC0, 0x9A0E, 0xD1C8,
- 0x9A0F, 0xD1C9, 0x9A19, 0xF8BE, 0x9A2B, 0xCBF6, 0x9A30, 0xD4F9, 0x9A36, 0xF5E2, 0x9A37, 0xE1D3, 0x9A40, 0xD8E9, 0x9A43, 0xF8FE,
- 0x9A45, 0xCFCC, 0x9A4D, 0xFDA4, 0x9A55, 0xCEF6, 0x9A57, 0xFAD0, 0x9A5A, 0xCCF3, 0x9A5B, 0xE6BE, 0x9A5F, 0xF6AE, 0x9A62, 0xD5F0,
- 0x9A65, 0xD1CA, 0x9A69, 0xFCBE, 0x9A6A, 0xD5F1, 0x9AA8, 0xCDE9, 0x9AB8, 0xFAB5, 0x9AD3, 0xE2D0, 0x9AD4, 0xF4F7, 0x9AD8, 0xCDD4,
- 0x9AE5, 0xE7A3, 0x9AEE, 0xDBA5, 0x9B1A, 0xE2D1, 0x9B27, 0xD7A2, 0x9B2A, 0xF7E3, 0x9B31, 0xEAA6, 0x9B3C, 0xD0A1, 0x9B41, 0xCEDA,
- 0x9B42, 0xFBEB, 0x9B43, 0xDBA6, 0x9B44, 0xDBDE, 0x9B45, 0xD8E5, 0x9B4F, 0xEAE0, 0x9B54, 0xD8AA, 0x9B5A, 0xE5E0, 0x9B6F, 0xD6DB,
- 0x9B8E, 0xEFC6, 0x9B91, 0xF8EA, 0x9B9F, 0xE4D5, 0x9BAB, 0xCEF7, 0x9BAE, 0xE0D8, 0x9BC9, 0xD7EF, 0x9BD6, 0xF4ED, 0x9BE4, 0xCDE6,
- 0x9BE8, 0xCCF4, 0x9C0D, 0xF5E3, 0x9C10, 0xE4CA, 0x9C12, 0xDCE1, 0x9C15, 0xF9C8, 0x9C25, 0xFCBF, 0x9C32, 0xE8A7, 0x9C3B, 0xD8C4,
- 0x9C47, 0xCBBE, 0x9C49, 0xDCAE, 0x9C57, 0xD7F7, 0x9CE5, 0xF0E8, 0x9CE7, 0xDDC0, 0x9CE9, 0xCFCD, 0x9CF3, 0xDCF3, 0x9CF4, 0xD9B0,
- 0x9CF6, 0xE6E9, 0x9D09, 0xE4BC, 0x9D1B, 0xEAC4, 0x9D26, 0xE4EC, 0x9D28, 0xE4E5, 0x9D3B, 0xFBF8, 0x9D51, 0xCCBB, 0x9D5D, 0xE4BD,
- 0x9D60, 0xCDDC, 0x9D61, 0xD9F7, 0x9D6C, 0xDDDF, 0x9D72, 0xEDCE, 0x9DA9, 0xD9D0, 0x9DAF, 0xE5A3, 0x9DB4, 0xF9CD, 0x9DC4, 0xCDAE,
- 0x9DD7, 0xCFCE, 0x9DF2, 0xF6AF, 0x9DF8, 0xFDD3, 0x9DF9, 0xEBED, 0x9DFA, 0xD6DC, 0x9E1A, 0xE5A4, 0x9E1E, 0xD5B6, 0x9E75, 0xD6DD,
- 0x9E79, 0xF9E9, 0x9E7D, 0xE7A4, 0x9E7F, 0xD6E3, 0x9E92, 0xD1CB, 0x9E93, 0xD6E4, 0x9E97, 0xD5F2, 0x9E9D, 0xDEFA, 0x9E9F, 0xD7F8,
- 0x9EA5, 0xD8EA, 0x9EB4, 0xCFD5, 0x9EB5, 0xD8FD, 0x9EBB, 0xD8AB, 0x9EBE, 0xFDCB, 0x9EC3, 0xFCDC, 0x9ECD, 0xE0A8, 0x9ECE, 0xD5F3,
- 0x9ED1, 0xFDD9, 0x9ED4, 0xCCA3, 0x9ED8, 0xD9F9, 0x9EDB, 0xD3EA, 0x9EDC, 0xF5F5, 0x9EDE, 0xEFC7, 0x9EE8, 0xD3DA, 0x9EF4, 0xDABD,
- 0x9F07, 0xE8A8, 0x9F08, 0xDCAF, 0x9F0E, 0xF0A3, 0x9F13, 0xCDD5, 0x9F20, 0xE0A9, 0x9F3B, 0xDEAC, 0x9F4A, 0xF0BA, 0x9F4B, 0xEEB1,
- 0x9F4E, 0xEEB2, 0x9F52, 0xF6CD, 0x9F5F, 0xEED2, 0x9F61, 0xD6C6, 0x9F67, 0xE0E5, 0x9F6A, 0xF3BB, 0x9F6C, 0xE5E1, 0x9F77, 0xE4CB,
- 0x9F8D, 0xD7A3, 0x9F90, 0xDBC2, 0x9F95, 0xCAFE, 0x9F9C, 0xCFCF, 0xAC00, 0xB0A1, 0xAC01, 0xB0A2, 0xAC02, 0x8141, 0xAC03, 0x8142,
- 0xAC04, 0xB0A3, 0xAC05, 0x8143, 0xAC06, 0x8144, 0xAC07, 0xB0A4, 0xAC08, 0xB0A5, 0xAC09, 0xB0A6, 0xAC0A, 0xB0A7, 0xAC0B, 0x8145,
- 0xAC0C, 0x8146, 0xAC0D, 0x8147, 0xAC0E, 0x8148, 0xAC0F, 0x8149, 0xAC10, 0xB0A8, 0xAC11, 0xB0A9, 0xAC12, 0xB0AA, 0xAC13, 0xB0AB,
- 0xAC14, 0xB0AC, 0xAC15, 0xB0AD, 0xAC16, 0xB0AE, 0xAC17, 0xB0AF, 0xAC18, 0x814A, 0xAC19, 0xB0B0, 0xAC1A, 0xB0B1, 0xAC1B, 0xB0B2,
- 0xAC1C, 0xB0B3, 0xAC1D, 0xB0B4, 0xAC1E, 0x814B, 0xAC1F, 0x814C, 0xAC20, 0xB0B5, 0xAC21, 0x814D, 0xAC22, 0x814E, 0xAC23, 0x814F,
- 0xAC24, 0xB0B6, 0xAC25, 0x8150, 0xAC26, 0x8151, 0xAC27, 0x8152, 0xAC28, 0x8153, 0xAC29, 0x8154, 0xAC2A, 0x8155, 0xAC2B, 0x8156,
- 0xAC2C, 0xB0B7, 0xAC2D, 0xB0B8, 0xAC2E, 0x8157, 0xAC2F, 0xB0B9, 0xAC30, 0xB0BA, 0xAC31, 0xB0BB, 0xAC32, 0x8158, 0xAC33, 0x8159,
- 0xAC34, 0x815A, 0xAC35, 0x8161, 0xAC36, 0x8162, 0xAC37, 0x8163, 0xAC38, 0xB0BC, 0xAC39, 0xB0BD, 0xAC3A, 0x8164, 0xAC3B, 0x8165,
- 0xAC3C, 0xB0BE, 0xAC3D, 0x8166, 0xAC3E, 0x8167, 0xAC3F, 0x8168, 0xAC40, 0xB0BF, 0xAC41, 0x8169, 0xAC42, 0x816A, 0xAC43, 0x816B,
- 0xAC44, 0x816C, 0xAC45, 0x816D, 0xAC46, 0x816E, 0xAC47, 0x816F, 0xAC48, 0x8170, 0xAC49, 0x8171, 0xAC4A, 0x8172, 0xAC4B, 0xB0C0,
- 0xAC4C, 0x8173, 0xAC4D, 0xB0C1, 0xAC4E, 0x8174, 0xAC4F, 0x8175, 0xAC50, 0x8176, 0xAC51, 0x8177, 0xAC52, 0x8178, 0xAC53, 0x8179,
- 0xAC54, 0xB0C2, 0xAC55, 0x817A, 0xAC56, 0x8181, 0xAC57, 0x8182, 0xAC58, 0xB0C3, 0xAC59, 0x8183, 0xAC5A, 0x8184, 0xAC5B, 0x8185,
- 0xAC5C, 0xB0C4, 0xAC5D, 0x8186, 0xAC5E, 0x8187, 0xAC5F, 0x8188, 0xAC60, 0x8189, 0xAC61, 0x818A, 0xAC62, 0x818B, 0xAC63, 0x818C,
- 0xAC64, 0x818D, 0xAC65, 0x818E, 0xAC66, 0x818F, 0xAC67, 0x8190, 0xAC68, 0x8191, 0xAC69, 0x8192, 0xAC6A, 0x8193, 0xAC6B, 0x8194,
- 0xAC6C, 0x8195, 0xAC6D, 0x8196, 0xAC6E, 0x8197, 0xAC6F, 0x8198, 0xAC70, 0xB0C5, 0xAC71, 0xB0C6, 0xAC72, 0x8199, 0xAC73, 0x819A,
- 0xAC74, 0xB0C7, 0xAC75, 0x819B, 0xAC76, 0x819C, 0xAC77, 0xB0C8, 0xAC78, 0xB0C9, 0xAC79, 0x819D, 0xAC7A, 0xB0CA, 0xAC7B, 0x819E,
- 0xAC7C, 0x819F, 0xAC7D, 0x81A0, 0xAC7E, 0x81A1, 0xAC7F, 0x81A2, 0xAC80, 0xB0CB, 0xAC81, 0xB0CC, 0xAC82, 0x81A3, 0xAC83, 0xB0CD,
- 0xAC84, 0xB0CE, 0xAC85, 0xB0CF, 0xAC86, 0xB0D0, 0xAC87, 0x81A4, 0xAC88, 0x81A5, 0xAC89, 0xB0D1, 0xAC8A, 0xB0D2, 0xAC8B, 0xB0D3,
- 0xAC8C, 0xB0D4, 0xAC8D, 0x81A6, 0xAC8E, 0x81A7, 0xAC8F, 0x81A8, 0xAC90, 0xB0D5, 0xAC91, 0x81A9, 0xAC92, 0x81AA, 0xAC93, 0x81AB,
- 0xAC94, 0xB0D6, 0xAC95, 0x81AC, 0xAC96, 0x81AD, 0xAC97, 0x81AE, 0xAC98, 0x81AF, 0xAC99, 0x81B0, 0xAC9A, 0x81B1, 0xAC9B, 0x81B2,
- 0xAC9C, 0xB0D7, 0xAC9D, 0xB0D8, 0xAC9E, 0x81B3, 0xAC9F, 0xB0D9, 0xACA0, 0xB0DA, 0xACA1, 0xB0DB, 0xACA2, 0x81B4, 0xACA3, 0x81B5,
- 0xACA4, 0x81B6, 0xACA5, 0x81B7, 0xACA6, 0x81B8, 0xACA7, 0x81B9, 0xACA8, 0xB0DC, 0xACA9, 0xB0DD, 0xACAA, 0xB0DE, 0xACAB, 0x81BA,
- 0xACAC, 0xB0DF, 0xACAD, 0x81BB, 0xACAE, 0x81BC, 0xACAF, 0xB0E0, 0xACB0, 0xB0E1, 0xACB1, 0x81BD, 0xACB2, 0x81BE, 0xACB3, 0x81BF,
- 0xACB4, 0x81C0, 0xACB5, 0x81C1, 0xACB6, 0x81C2, 0xACB7, 0x81C3, 0xACB8, 0xB0E2, 0xACB9, 0xB0E3, 0xACBA, 0x81C4, 0xACBB, 0xB0E4,
- 0xACBC, 0xB0E5, 0xACBD, 0xB0E6, 0xACBE, 0x81C5, 0xACBF, 0x81C6, 0xACC0, 0x81C7, 0xACC1, 0xB0E7, 0xACC2, 0x81C8, 0xACC3, 0x81C9,
- 0xACC4, 0xB0E8, 0xACC5, 0x81CA, 0xACC6, 0x81CB, 0xACC7, 0x81CC, 0xACC8, 0xB0E9, 0xACC9, 0x81CD, 0xACCA, 0x81CE, 0xACCB, 0x81CF,
- 0xACCC, 0xB0EA, 0xACCD, 0x81D0, 0xACCE, 0x81D1, 0xACCF, 0x81D2, 0xACD0, 0x81D3, 0xACD1, 0x81D4, 0xACD2, 0x81D5, 0xACD3, 0x81D6,
- 0xACD4, 0x81D7, 0xACD5, 0xB0EB, 0xACD6, 0x81D8, 0xACD7, 0xB0EC, 0xACD8, 0x81D9, 0xACD9, 0x81DA, 0xACDA, 0x81DB, 0xACDB, 0x81DC,
- 0xACDC, 0x81DD, 0xACDD, 0x81DE, 0xACDE, 0x81DF, 0xACDF, 0x81E0, 0xACE0, 0xB0ED, 0xACE1, 0xB0EE, 0xACE2, 0x81E1, 0xACE3, 0x81E2,
- 0xACE4, 0xB0EF, 0xACE5, 0x81E3, 0xACE6, 0x81E4, 0xACE7, 0xB0F0, 0xACE8, 0xB0F1, 0xACE9, 0x81E5, 0xACEA, 0xB0F2, 0xACEB, 0x81E6,
- 0xACEC, 0xB0F3, 0xACED, 0x81E7, 0xACEE, 0x81E8, 0xACEF, 0xB0F4, 0xACF0, 0xB0F5, 0xACF1, 0xB0F6, 0xACF2, 0x81E9, 0xACF3, 0xB0F7,
- 0xACF4, 0x81EA, 0xACF5, 0xB0F8, 0xACF6, 0xB0F9, 0xACF7, 0x81EB, 0xACF8, 0x81EC, 0xACF9, 0x81ED, 0xACFA, 0x81EE, 0xACFB, 0x81EF,
- 0xACFC, 0xB0FA, 0xACFD, 0xB0FB, 0xACFE, 0x81F0, 0xACFF, 0x81F1, 0xAD00, 0xB0FC, 0xAD01, 0x81F2, 0xAD02, 0x81F3, 0xAD03, 0x81F4,
- 0xAD04, 0xB0FD, 0xAD05, 0x81F5, 0xAD06, 0xB0FE, 0xAD07, 0x81F6, 0xAD08, 0x81F7, 0xAD09, 0x81F8, 0xAD0A, 0x81F9, 0xAD0B, 0x81FA,
- 0xAD0C, 0xB1A1, 0xAD0D, 0xB1A2, 0xAD0E, 0x81FB, 0xAD0F, 0xB1A3, 0xAD10, 0x81FC, 0xAD11, 0xB1A4, 0xAD12, 0x81FD, 0xAD13, 0x81FE,
- 0xAD14, 0x8241, 0xAD15, 0x8242, 0xAD16, 0x8243, 0xAD17, 0x8244, 0xAD18, 0xB1A5, 0xAD19, 0x8245, 0xAD1A, 0x8246, 0xAD1B, 0x8247,
- 0xAD1C, 0xB1A6, 0xAD1D, 0x8248, 0xAD1E, 0x8249, 0xAD1F, 0x824A, 0xAD20, 0xB1A7, 0xAD21, 0x824B, 0xAD22, 0x824C, 0xAD23, 0x824D,
- 0xAD24, 0x824E, 0xAD25, 0x824F, 0xAD26, 0x8250, 0xAD27, 0x8251, 0xAD28, 0x8252, 0xAD29, 0xB1A8, 0xAD2A, 0x8253, 0xAD2B, 0x8254,
- 0xAD2C, 0xB1A9, 0xAD2D, 0xB1AA, 0xAD2E, 0x8255, 0xAD2F, 0x8256, 0xAD30, 0x8257, 0xAD31, 0x8258, 0xAD32, 0x8259, 0xAD33, 0x825A,
- 0xAD34, 0xB1AB, 0xAD35, 0xB1AC, 0xAD36, 0x8261, 0xAD37, 0x8262, 0xAD38, 0xB1AD, 0xAD39, 0x8263, 0xAD3A, 0x8264, 0xAD3B, 0x8265,
- 0xAD3C, 0xB1AE, 0xAD3D, 0x8266, 0xAD3E, 0x8267, 0xAD3F, 0x8268, 0xAD40, 0x8269, 0xAD41, 0x826A, 0xAD42, 0x826B, 0xAD43, 0x826C,
- 0xAD44, 0xB1AF, 0xAD45, 0xB1B0, 0xAD46, 0x826D, 0xAD47, 0xB1B1, 0xAD48, 0x826E, 0xAD49, 0xB1B2, 0xAD4A, 0x826F, 0xAD4B, 0x8270,
- 0xAD4C, 0x8271, 0xAD4D, 0x8272, 0xAD4E, 0x8273, 0xAD4F, 0x8274, 0xAD50, 0xB1B3, 0xAD51, 0x8275, 0xAD52, 0x8276, 0xAD53, 0x8277,
- 0xAD54, 0xB1B4, 0xAD55, 0x8278, 0xAD56, 0x8279, 0xAD57, 0x827A, 0xAD58, 0xB1B5, 0xAD59, 0x8281, 0xAD5A, 0x8282, 0xAD5B, 0x8283,
- 0xAD5C, 0x8284, 0xAD5D, 0x8285, 0xAD5E, 0x8286, 0xAD5F, 0x8287, 0xAD60, 0x8288, 0xAD61, 0xB1B6, 0xAD62, 0x8289, 0xAD63, 0xB1B7,
- 0xAD64, 0x828A, 0xAD65, 0x828B, 0xAD66, 0x828C, 0xAD67, 0x828D, 0xAD68, 0x828E, 0xAD69, 0x828F, 0xAD6A, 0x8290, 0xAD6B, 0x8291,
- 0xAD6C, 0xB1B8, 0xAD6D, 0xB1B9, 0xAD6E, 0x8292, 0xAD6F, 0x8293, 0xAD70, 0xB1BA, 0xAD71, 0x8294, 0xAD72, 0x8295, 0xAD73, 0xB1BB,
- 0xAD74, 0xB1BC, 0xAD75, 0xB1BD, 0xAD76, 0xB1BE, 0xAD77, 0x8296, 0xAD78, 0x8297, 0xAD79, 0x8298, 0xAD7A, 0x8299, 0xAD7B, 0xB1BF,
- 0xAD7C, 0xB1C0, 0xAD7D, 0xB1C1, 0xAD7E, 0x829A, 0xAD7F, 0xB1C2, 0xAD80, 0x829B, 0xAD81, 0xB1C3, 0xAD82, 0xB1C4, 0xAD83, 0x829C,
- 0xAD84, 0x829D, 0xAD85, 0x829E, 0xAD86, 0x829F, 0xAD87, 0x82A0, 0xAD88, 0xB1C5, 0xAD89, 0xB1C6, 0xAD8A, 0x82A1, 0xAD8B, 0x82A2,
- 0xAD8C, 0xB1C7, 0xAD8D, 0x82A3, 0xAD8E, 0x82A4, 0xAD8F, 0x82A5, 0xAD90, 0xB1C8, 0xAD91, 0x82A6, 0xAD92, 0x82A7, 0xAD93, 0x82A8,
- 0xAD94, 0x82A9, 0xAD95, 0x82AA, 0xAD96, 0x82AB, 0xAD97, 0x82AC, 0xAD98, 0x82AD, 0xAD99, 0x82AE, 0xAD9A, 0x82AF, 0xAD9B, 0x82B0,
- 0xAD9C, 0xB1C9, 0xAD9D, 0xB1CA, 0xAD9E, 0x82B1, 0xAD9F, 0x82B2, 0xADA0, 0x82B3, 0xADA1, 0x82B4, 0xADA2, 0x82B5, 0xADA3, 0x82B6,
- 0xADA4, 0xB1CB, 0xADA5, 0x82B7, 0xADA6, 0x82B8, 0xADA7, 0x82B9, 0xADA8, 0x82BA, 0xADA9, 0x82BB, 0xADAA, 0x82BC, 0xADAB, 0x82BD,
- 0xADAC, 0x82BE, 0xADAD, 0x82BF, 0xADAE, 0x82C0, 0xADAF, 0x82C1, 0xADB0, 0x82C2, 0xADB1, 0x82C3, 0xADB2, 0x82C4, 0xADB3, 0x82C5,
- 0xADB4, 0x82C6, 0xADB5, 0x82C7, 0xADB6, 0x82C8, 0xADB7, 0xB1CC, 0xADB8, 0x82C9, 0xADB9, 0x82CA, 0xADBA, 0x82CB, 0xADBB, 0x82CC,
- 0xADBC, 0x82CD, 0xADBD, 0x82CE, 0xADBE, 0x82CF, 0xADBF, 0x82D0, 0xADC0, 0xB1CD, 0xADC1, 0xB1CE, 0xADC2, 0x82D1, 0xADC3, 0x82D2,
- 0xADC4, 0xB1CF, 0xADC5, 0x82D3, 0xADC6, 0x82D4, 0xADC7, 0x82D5, 0xADC8, 0xB1D0, 0xADC9, 0x82D6, 0xADCA, 0x82D7, 0xADCB, 0x82D8,
- 0xADCC, 0x82D9, 0xADCD, 0x82DA, 0xADCE, 0x82DB, 0xADCF, 0x82DC, 0xADD0, 0xB1D1, 0xADD1, 0xB1D2, 0xADD2, 0x82DD, 0xADD3, 0xB1D3,
- 0xADD4, 0x82DE, 0xADD5, 0x82DF, 0xADD6, 0x82E0, 0xADD7, 0x82E1, 0xADD8, 0x82E2, 0xADD9, 0x82E3, 0xADDA, 0x82E4, 0xADDB, 0x82E5,
- 0xADDC, 0xB1D4, 0xADDD, 0x82E6, 0xADDE, 0x82E7, 0xADDF, 0x82E8, 0xADE0, 0xB1D5, 0xADE1, 0x82E9, 0xADE2, 0x82EA, 0xADE3, 0x82EB,
- 0xADE4, 0xB1D6, 0xADE5, 0x82EC, 0xADE6, 0x82ED, 0xADE7, 0x82EE, 0xADE8, 0x82EF, 0xADE9, 0x82F0, 0xADEA, 0x82F1, 0xADEB, 0x82F2,
- 0xADEC, 0x82F3, 0xADED, 0x82F4, 0xADEE, 0x82F5, 0xADEF, 0x82F6, 0xADF0, 0x82F7, 0xADF1, 0x82F8, 0xADF2, 0x82F9, 0xADF3, 0x82FA,
- 0xADF4, 0x82FB, 0xADF5, 0x82FC, 0xADF6, 0x82FD, 0xADF7, 0x82FE, 0xADF8, 0xB1D7, 0xADF9, 0xB1D8, 0xADFA, 0x8341, 0xADFB, 0x8342,
- 0xADFC, 0xB1D9, 0xADFD, 0x8343, 0xADFE, 0x8344, 0xADFF, 0xB1DA, 0xAE00, 0xB1DB, 0xAE01, 0xB1DC, 0xAE02, 0x8345, 0xAE03, 0x8346,
- 0xAE04, 0x8347, 0xAE05, 0x8348, 0xAE06, 0x8349, 0xAE07, 0x834A, 0xAE08, 0xB1DD, 0xAE09, 0xB1DE, 0xAE0A, 0x834B, 0xAE0B, 0xB1DF,
- 0xAE0C, 0x834C, 0xAE0D, 0xB1E0, 0xAE0E, 0x834D, 0xAE0F, 0x834E, 0xAE10, 0x834F, 0xAE11, 0x8350, 0xAE12, 0x8351, 0xAE13, 0x8352,
- 0xAE14, 0xB1E1, 0xAE15, 0x8353, 0xAE16, 0x8354, 0xAE17, 0x8355, 0xAE18, 0x8356, 0xAE19, 0x8357, 0xAE1A, 0x8358, 0xAE1B, 0x8359,
- 0xAE1C, 0x835A, 0xAE1D, 0x8361, 0xAE1E, 0x8362, 0xAE1F, 0x8363, 0xAE20, 0x8364, 0xAE21, 0x8365, 0xAE22, 0x8366, 0xAE23, 0x8367,
- 0xAE24, 0x8368, 0xAE25, 0x8369, 0xAE26, 0x836A, 0xAE27, 0x836B, 0xAE28, 0x836C, 0xAE29, 0x836D, 0xAE2A, 0x836E, 0xAE2B, 0x836F,
- 0xAE2C, 0x8370, 0xAE2D, 0x8371, 0xAE2E, 0x8372, 0xAE2F, 0x8373, 0xAE30, 0xB1E2, 0xAE31, 0xB1E3, 0xAE32, 0x8374, 0xAE33, 0x8375,
- 0xAE34, 0xB1E4, 0xAE35, 0x8376, 0xAE36, 0x8377, 0xAE37, 0xB1E5, 0xAE38, 0xB1E6, 0xAE39, 0x8378, 0xAE3A, 0xB1E7, 0xAE3B, 0x8379,
- 0xAE3C, 0x837A, 0xAE3D, 0x8381, 0xAE3E, 0x8382, 0xAE3F, 0x8383, 0xAE40, 0xB1E8, 0xAE41, 0xB1E9, 0xAE42, 0x8384, 0xAE43, 0xB1EA,
- 0xAE44, 0x8385, 0xAE45, 0xB1EB, 0xAE46, 0xB1EC, 0xAE47, 0x8386, 0xAE48, 0x8387, 0xAE49, 0x8388, 0xAE4A, 0xB1ED, 0xAE4B, 0x8389,
- 0xAE4C, 0xB1EE, 0xAE4D, 0xB1EF, 0xAE4E, 0xB1F0, 0xAE4F, 0x838A, 0xAE50, 0xB1F1, 0xAE51, 0x838B, 0xAE52, 0x838C, 0xAE53, 0x838D,
- 0xAE54, 0xB1F2, 0xAE55, 0x838E, 0xAE56, 0xB1F3, 0xAE57, 0x838F, 0xAE58, 0x8390, 0xAE59, 0x8391, 0xAE5A, 0x8392, 0xAE5B, 0x8393,
- 0xAE5C, 0xB1F4, 0xAE5D, 0xB1F5, 0xAE5E, 0x8394, 0xAE5F, 0xB1F6, 0xAE60, 0xB1F7, 0xAE61, 0xB1F8, 0xAE62, 0x8395, 0xAE63, 0x8396,
- 0xAE64, 0x8397, 0xAE65, 0xB1F9, 0xAE66, 0x8398, 0xAE67, 0x8399, 0xAE68, 0xB1FA, 0xAE69, 0xB1FB, 0xAE6A, 0x839A, 0xAE6B, 0x839B,
- 0xAE6C, 0xB1FC, 0xAE6D, 0x839C, 0xAE6E, 0x839D, 0xAE6F, 0x839E, 0xAE70, 0xB1FD, 0xAE71, 0x839F, 0xAE72, 0x83A0, 0xAE73, 0x83A1,
- 0xAE74, 0x83A2, 0xAE75, 0x83A3, 0xAE76, 0x83A4, 0xAE77, 0x83A5, 0xAE78, 0xB1FE, 0xAE79, 0xB2A1, 0xAE7A, 0x83A6, 0xAE7B, 0xB2A2,
- 0xAE7C, 0xB2A3, 0xAE7D, 0xB2A4, 0xAE7E, 0x83A7, 0xAE7F, 0x83A8, 0xAE80, 0x83A9, 0xAE81, 0x83AA, 0xAE82, 0x83AB, 0xAE83, 0x83AC,
- 0xAE84, 0xB2A5, 0xAE85, 0xB2A6, 0xAE86, 0x83AD, 0xAE87, 0x83AE, 0xAE88, 0x83AF, 0xAE89, 0x83B0, 0xAE8A, 0x83B1, 0xAE8B, 0x83B2,
- 0xAE8C, 0xB2A7, 0xAE8D, 0x83B3, 0xAE8E, 0x83B4, 0xAE8F, 0x83B5, 0xAE90, 0x83B6, 0xAE91, 0x83B7, 0xAE92, 0x83B8, 0xAE93, 0x83B9,
- 0xAE94, 0x83BA, 0xAE95, 0x83BB, 0xAE96, 0x83BC, 0xAE97, 0x83BD, 0xAE98, 0x83BE, 0xAE99, 0x83BF, 0xAE9A, 0x83C0, 0xAE9B, 0x83C1,
- 0xAE9C, 0x83C2, 0xAE9D, 0x83C3, 0xAE9E, 0x83C4, 0xAE9F, 0x83C5, 0xAEA0, 0x83C6, 0xAEA1, 0x83C7, 0xAEA2, 0x83C8, 0xAEA3, 0x83C9,
- 0xAEA4, 0x83CA, 0xAEA5, 0x83CB, 0xAEA6, 0x83CC, 0xAEA7, 0x83CD, 0xAEA8, 0x83CE, 0xAEA9, 0x83CF, 0xAEAA, 0x83D0, 0xAEAB, 0x83D1,
- 0xAEAC, 0x83D2, 0xAEAD, 0x83D3, 0xAEAE, 0x83D4, 0xAEAF, 0x83D5, 0xAEB0, 0x83D6, 0xAEB1, 0x83D7, 0xAEB2, 0x83D8, 0xAEB3, 0x83D9,
- 0xAEB4, 0x83DA, 0xAEB5, 0x83DB, 0xAEB6, 0x83DC, 0xAEB7, 0x83DD, 0xAEB8, 0x83DE, 0xAEB9, 0x83DF, 0xAEBA, 0x83E0, 0xAEBB, 0x83E1,
- 0xAEBC, 0xB2A8, 0xAEBD, 0xB2A9, 0xAEBE, 0xB2AA, 0xAEBF, 0x83E2, 0xAEC0, 0xB2AB, 0xAEC1, 0x83E3, 0xAEC2, 0x83E4, 0xAEC3, 0x83E5,
- 0xAEC4, 0xB2AC, 0xAEC5, 0x83E6, 0xAEC6, 0x83E7, 0xAEC7, 0x83E8, 0xAEC8, 0x83E9, 0xAEC9, 0x83EA, 0xAECA, 0x83EB, 0xAECB, 0x83EC,
- 0xAECC, 0xB2AD, 0xAECD, 0xB2AE, 0xAECE, 0x83ED, 0xAECF, 0xB2AF, 0xAED0, 0xB2B0, 0xAED1, 0xB2B1, 0xAED2, 0x83EE, 0xAED3, 0x83EF,
- 0xAED4, 0x83F0, 0xAED5, 0x83F1, 0xAED6, 0x83F2, 0xAED7, 0x83F3, 0xAED8, 0xB2B2, 0xAED9, 0xB2B3, 0xAEDA, 0x83F4, 0xAEDB, 0x83F5,
- 0xAEDC, 0xB2B4, 0xAEDD, 0x83F6, 0xAEDE, 0x83F7, 0xAEDF, 0x83F8, 0xAEE0, 0x83F9, 0xAEE1, 0x83FA, 0xAEE2, 0x83FB, 0xAEE3, 0x83FC,
- 0xAEE4, 0x83FD, 0xAEE5, 0x83FE, 0xAEE6, 0x8441, 0xAEE7, 0x8442, 0xAEE8, 0xB2B5, 0xAEE9, 0x8443, 0xAEEA, 0x8444, 0xAEEB, 0xB2B6,
- 0xAEEC, 0x8445, 0xAEED, 0xB2B7, 0xAEEE, 0x8446, 0xAEEF, 0x8447, 0xAEF0, 0x8448, 0xAEF1, 0x8449, 0xAEF2, 0x844A, 0xAEF3, 0x844B,
- 0xAEF4, 0xB2B8, 0xAEF5, 0x844C, 0xAEF6, 0x844D, 0xAEF7, 0x844E, 0xAEF8, 0xB2B9, 0xAEF9, 0x844F, 0xAEFA, 0x8450, 0xAEFB, 0x8451,
- 0xAEFC, 0xB2BA, 0xAEFD, 0x8452, 0xAEFE, 0x8453, 0xAEFF, 0x8454, 0xAF00, 0x8455, 0xAF01, 0x8456, 0xAF02, 0x8457, 0xAF03, 0x8458,
- 0xAF04, 0x8459, 0xAF05, 0x845A, 0xAF06, 0x8461, 0xAF07, 0xB2BB, 0xAF08, 0xB2BC, 0xAF09, 0x8462, 0xAF0A, 0x8463, 0xAF0B, 0x8464,
- 0xAF0C, 0x8465, 0xAF0D, 0xB2BD, 0xAF0E, 0x8466, 0xAF0F, 0x8467, 0xAF10, 0xB2BE, 0xAF11, 0x8468, 0xAF12, 0x8469, 0xAF13, 0x846A,
- 0xAF14, 0x846B, 0xAF15, 0x846C, 0xAF16, 0x846D, 0xAF17, 0x846E, 0xAF18, 0x846F, 0xAF19, 0x8470, 0xAF1A, 0x8471, 0xAF1B, 0x8472,
- 0xAF1C, 0x8473, 0xAF1D, 0x8474, 0xAF1E, 0x8475, 0xAF1F, 0x8476, 0xAF20, 0x8477, 0xAF21, 0x8478, 0xAF22, 0x8479, 0xAF23, 0x847A,
- 0xAF24, 0x8481, 0xAF25, 0x8482, 0xAF26, 0x8483, 0xAF27, 0x8484, 0xAF28, 0x8485, 0xAF29, 0x8486, 0xAF2A, 0x8487, 0xAF2B, 0x8488,
- 0xAF2C, 0xB2BF, 0xAF2D, 0xB2C0, 0xAF2E, 0x8489, 0xAF2F, 0x848A, 0xAF30, 0xB2C1, 0xAF31, 0x848B, 0xAF32, 0xB2C2, 0xAF33, 0x848C,
- 0xAF34, 0xB2C3, 0xAF35, 0x848D, 0xAF36, 0x848E, 0xAF37, 0x848F, 0xAF38, 0x8490, 0xAF39, 0x8491, 0xAF3A, 0x8492, 0xAF3B, 0x8493,
- 0xAF3C, 0xB2C4, 0xAF3D, 0xB2C5, 0xAF3E, 0x8494, 0xAF3F, 0xB2C6, 0xAF40, 0x8495, 0xAF41, 0xB2C7, 0xAF42, 0xB2C8, 0xAF43, 0xB2C9,
- 0xAF44, 0x8496, 0xAF45, 0x8497, 0xAF46, 0x8498, 0xAF47, 0x8499, 0xAF48, 0xB2CA, 0xAF49, 0xB2CB, 0xAF4A, 0x849A, 0xAF4B, 0x849B,
- 0xAF4C, 0x849C, 0xAF4D, 0x849D, 0xAF4E, 0x849E, 0xAF4F, 0x849F, 0xAF50, 0xB2CC, 0xAF51, 0x84A0, 0xAF52, 0x84A1, 0xAF53, 0x84A2,
- 0xAF54, 0x84A3, 0xAF55, 0x84A4, 0xAF56, 0x84A5, 0xAF57, 0x84A6, 0xAF58, 0x84A7, 0xAF59, 0x84A8, 0xAF5A, 0x84A9, 0xAF5B, 0x84AA,
- 0xAF5C, 0xB2CD, 0xAF5D, 0xB2CE, 0xAF5E, 0x84AB, 0xAF5F, 0x84AC, 0xAF60, 0x84AD, 0xAF61, 0x84AE, 0xAF62, 0x84AF, 0xAF63, 0x84B0,
- 0xAF64, 0xB2CF, 0xAF65, 0xB2D0, 0xAF66, 0x84B1, 0xAF67, 0x84B2, 0xAF68, 0x84B3, 0xAF69, 0x84B4, 0xAF6A, 0x84B5, 0xAF6B, 0x84B6,
- 0xAF6C, 0x84B7, 0xAF6D, 0x84B8, 0xAF6E, 0x84B9, 0xAF6F, 0x84BA, 0xAF70, 0x84BB, 0xAF71, 0x84BC, 0xAF72, 0x84BD, 0xAF73, 0x84BE,
- 0xAF74, 0x84BF, 0xAF75, 0x84C0, 0xAF76, 0x84C1, 0xAF77, 0x84C2, 0xAF78, 0x84C3, 0xAF79, 0xB2D1, 0xAF7A, 0x84C4, 0xAF7B, 0x84C5,
- 0xAF7C, 0x84C6, 0xAF7D, 0x84C7, 0xAF7E, 0x84C8, 0xAF7F, 0x84C9, 0xAF80, 0xB2D2, 0xAF81, 0x84CA, 0xAF82, 0x84CB, 0xAF83, 0x84CC,
- 0xAF84, 0xB2D3, 0xAF85, 0x84CD, 0xAF86, 0x84CE, 0xAF87, 0x84CF, 0xAF88, 0xB2D4, 0xAF89, 0x84D0, 0xAF8A, 0x84D1, 0xAF8B, 0x84D2,
- 0xAF8C, 0x84D3, 0xAF8D, 0x84D4, 0xAF8E, 0x84D5, 0xAF8F, 0x84D6, 0xAF90, 0xB2D5, 0xAF91, 0xB2D6, 0xAF92, 0x84D7, 0xAF93, 0x84D8,
- 0xAF94, 0x84D9, 0xAF95, 0xB2D7, 0xAF96, 0x84DA, 0xAF97, 0x84DB, 0xAF98, 0x84DC, 0xAF99, 0x84DD, 0xAF9A, 0x84DE, 0xAF9B, 0x84DF,
- 0xAF9C, 0xB2D8, 0xAF9D, 0x84E0, 0xAF9E, 0x84E1, 0xAF9F, 0x84E2, 0xAFA0, 0x84E3, 0xAFA1, 0x84E4, 0xAFA2, 0x84E5, 0xAFA3, 0x84E6,
- 0xAFA4, 0x84E7, 0xAFA5, 0x84E8, 0xAFA6, 0x84E9, 0xAFA7, 0x84EA, 0xAFA8, 0x84EB, 0xAFA9, 0x84EC, 0xAFAA, 0x84ED, 0xAFAB, 0x84EE,
- 0xAFAC, 0x84EF, 0xAFAD, 0x84F0, 0xAFAE, 0x84F1, 0xAFAF, 0x84F2, 0xAFB0, 0x84F3, 0xAFB1, 0x84F4, 0xAFB2, 0x84F5, 0xAFB3, 0x84F6,
- 0xAFB4, 0x84F7, 0xAFB5, 0x84F8, 0xAFB6, 0x84F9, 0xAFB7, 0x84FA, 0xAFB8, 0xB2D9, 0xAFB9, 0xB2DA, 0xAFBA, 0x84FB, 0xAFBB, 0x84FC,
- 0xAFBC, 0xB2DB, 0xAFBD, 0x84FD, 0xAFBE, 0x84FE, 0xAFBF, 0x8541, 0xAFC0, 0xB2DC, 0xAFC1, 0x8542, 0xAFC2, 0x8543, 0xAFC3, 0x8544,
- 0xAFC4, 0x8545, 0xAFC5, 0x8546, 0xAFC6, 0x8547, 0xAFC7, 0xB2DD, 0xAFC8, 0xB2DE, 0xAFC9, 0xB2DF, 0xAFCA, 0x8548, 0xAFCB, 0xB2E0,
- 0xAFCC, 0x8549, 0xAFCD, 0xB2E1, 0xAFCE, 0xB2E2, 0xAFCF, 0x854A, 0xAFD0, 0x854B, 0xAFD1, 0x854C, 0xAFD2, 0x854D, 0xAFD3, 0x854E,
- 0xAFD4, 0xB2E3, 0xAFD5, 0x854F, 0xAFD6, 0x8550, 0xAFD7, 0x8551, 0xAFD8, 0x8552, 0xAFD9, 0x8553, 0xAFDA, 0x8554, 0xAFDB, 0x8555,
- 0xAFDC, 0xB2E4, 0xAFDD, 0x8556, 0xAFDE, 0x8557, 0xAFDF, 0x8558, 0xAFE0, 0x8559, 0xAFE1, 0x855A, 0xAFE2, 0x8561, 0xAFE3, 0x8562,
- 0xAFE4, 0x8563, 0xAFE5, 0x8564, 0xAFE6, 0x8565, 0xAFE7, 0x8566, 0xAFE8, 0xB2E5, 0xAFE9, 0xB2E6, 0xAFEA, 0x8567, 0xAFEB, 0x8568,
- 0xAFEC, 0x8569, 0xAFED, 0x856A, 0xAFEE, 0x856B, 0xAFEF, 0x856C, 0xAFF0, 0xB2E7, 0xAFF1, 0xB2E8, 0xAFF2, 0x856D, 0xAFF3, 0x856E,
- 0xAFF4, 0xB2E9, 0xAFF5, 0x856F, 0xAFF6, 0x8570, 0xAFF7, 0x8571, 0xAFF8, 0xB2EA, 0xAFF9, 0x8572, 0xAFFA, 0x8573, 0xAFFB, 0x8574,
- 0xAFFC, 0x8575, 0xAFFD, 0x8576, 0xAFFE, 0x8577, 0xAFFF, 0x8578, 0xB000, 0xB2EB, 0xB001, 0xB2EC, 0xB002, 0x8579, 0xB003, 0x857A,
- 0xB004, 0xB2ED, 0xB005, 0x8581, 0xB006, 0x8582, 0xB007, 0x8583, 0xB008, 0x8584, 0xB009, 0x8585, 0xB00A, 0x8586, 0xB00B, 0x8587,
- 0xB00C, 0xB2EE, 0xB00D, 0x8588, 0xB00E, 0x8589, 0xB00F, 0x858A, 0xB010, 0xB2EF, 0xB011, 0x858B, 0xB012, 0x858C, 0xB013, 0x858D,
- 0xB014, 0xB2F0, 0xB015, 0x858E, 0xB016, 0x858F, 0xB017, 0x8590, 0xB018, 0x8591, 0xB019, 0x8592, 0xB01A, 0x8593, 0xB01B, 0x8594,
- 0xB01C, 0xB2F1, 0xB01D, 0xB2F2, 0xB01E, 0x8595, 0xB01F, 0x8596, 0xB020, 0x8597, 0xB021, 0x8598, 0xB022, 0x8599, 0xB023, 0x859A,
- 0xB024, 0x859B, 0xB025, 0x859C, 0xB026, 0x859D, 0xB027, 0x859E, 0xB028, 0xB2F3, 0xB029, 0x859F, 0xB02A, 0x85A0, 0xB02B, 0x85A1,
- 0xB02C, 0x85A2, 0xB02D, 0x85A3, 0xB02E, 0x85A4, 0xB02F, 0x85A5, 0xB030, 0x85A6, 0xB031, 0x85A7, 0xB032, 0x85A8, 0xB033, 0x85A9,
- 0xB034, 0x85AA, 0xB035, 0x85AB, 0xB036, 0x85AC, 0xB037, 0x85AD, 0xB038, 0x85AE, 0xB039, 0x85AF, 0xB03A, 0x85B0, 0xB03B, 0x85B1,
- 0xB03C, 0x85B2, 0xB03D, 0x85B3, 0xB03E, 0x85B4, 0xB03F, 0x85B5, 0xB040, 0x85B6, 0xB041, 0x85B7, 0xB042, 0x85B8, 0xB043, 0x85B9,
- 0xB044, 0xB2F4, 0xB045, 0xB2F5, 0xB046, 0x85BA, 0xB047, 0x85BB, 0xB048, 0xB2F6, 0xB049, 0x85BC, 0xB04A, 0xB2F7, 0xB04B, 0x85BD,
- 0xB04C, 0xB2F8, 0xB04D, 0x85BE, 0xB04E, 0xB2F9, 0xB04F, 0x85BF, 0xB050, 0x85C0, 0xB051, 0x85C1, 0xB052, 0x85C2, 0xB053, 0xB2FA,
- 0xB054, 0xB2FB, 0xB055, 0xB2FC, 0xB056, 0x85C3, 0xB057, 0xB2FD, 0xB058, 0x85C4, 0xB059, 0xB2FE, 0xB05A, 0x85C5, 0xB05B, 0x85C6,
- 0xB05C, 0x85C7, 0xB05D, 0xB3A1, 0xB05E, 0x85C8, 0xB05F, 0x85C9, 0xB060, 0x85CA, 0xB061, 0x85CB, 0xB062, 0x85CC, 0xB063, 0x85CD,
- 0xB064, 0x85CE, 0xB065, 0x85CF, 0xB066, 0x85D0, 0xB067, 0x85D1, 0xB068, 0x85D2, 0xB069, 0x85D3, 0xB06A, 0x85D4, 0xB06B, 0x85D5,
- 0xB06C, 0x85D6, 0xB06D, 0x85D7, 0xB06E, 0x85D8, 0xB06F, 0x85D9, 0xB070, 0x85DA, 0xB071, 0x85DB, 0xB072, 0x85DC, 0xB073, 0x85DD,
- 0xB074, 0x85DE, 0xB075, 0x85DF, 0xB076, 0x85E0, 0xB077, 0x85E1, 0xB078, 0x85E2, 0xB079, 0x85E3, 0xB07A, 0x85E4, 0xB07B, 0x85E5,
- 0xB07C, 0xB3A2, 0xB07D, 0xB3A3, 0xB07E, 0x85E6, 0xB07F, 0x85E7, 0xB080, 0xB3A4, 0xB081, 0x85E8, 0xB082, 0x85E9, 0xB083, 0x85EA,
- 0xB084, 0xB3A5, 0xB085, 0x85EB, 0xB086, 0x85EC, 0xB087, 0x85ED, 0xB088, 0x85EE, 0xB089, 0x85EF, 0xB08A, 0x85F0, 0xB08B, 0x85F1,
- 0xB08C, 0xB3A6, 0xB08D, 0xB3A7, 0xB08E, 0x85F2, 0xB08F, 0xB3A8, 0xB090, 0x85F3, 0xB091, 0xB3A9, 0xB092, 0x85F4, 0xB093, 0x85F5,
- 0xB094, 0x85F6, 0xB095, 0x85F7, 0xB096, 0x85F8, 0xB097, 0x85F9, 0xB098, 0xB3AA, 0xB099, 0xB3AB, 0xB09A, 0xB3AC, 0xB09B, 0x85FA,
- 0xB09C, 0xB3AD, 0xB09D, 0x85FB, 0xB09E, 0x85FC, 0xB09F, 0xB3AE, 0xB0A0, 0xB3AF, 0xB0A1, 0xB3B0, 0xB0A2, 0xB3B1, 0xB0A3, 0x85FD,
- 0xB0A4, 0x85FE, 0xB0A5, 0x8641, 0xB0A6, 0x8642, 0xB0A7, 0x8643, 0xB0A8, 0xB3B2, 0xB0A9, 0xB3B3, 0xB0AA, 0x8644, 0xB0AB, 0xB3B4,
- 0xB0AC, 0xB3B5, 0xB0AD, 0xB3B6, 0xB0AE, 0xB3B7, 0xB0AF, 0xB3B8, 0xB0B0, 0x8645, 0xB0B1, 0xB3B9, 0xB0B2, 0x8646, 0xB0B3, 0xB3BA,
- 0xB0B4, 0xB3BB, 0xB0B5, 0xB3BC, 0xB0B6, 0x8647, 0xB0B7, 0x8648, 0xB0B8, 0xB3BD, 0xB0B9, 0x8649, 0xB0BA, 0x864A, 0xB0BB, 0x864B,
- 0xB0BC, 0xB3BE, 0xB0BD, 0x864C, 0xB0BE, 0x864D, 0xB0BF, 0x864E, 0xB0C0, 0x864F, 0xB0C1, 0x8650, 0xB0C2, 0x8651, 0xB0C3, 0x8652,
- 0xB0C4, 0xB3BF, 0xB0C5, 0xB3C0, 0xB0C6, 0x8653, 0xB0C7, 0xB3C1, 0xB0C8, 0xB3C2, 0xB0C9, 0xB3C3, 0xB0CA, 0x8654, 0xB0CB, 0x8655,
- 0xB0CC, 0x8656, 0xB0CD, 0x8657, 0xB0CE, 0x8658, 0xB0CF, 0x8659, 0xB0D0, 0xB3C4, 0xB0D1, 0xB3C5, 0xB0D2, 0x865A, 0xB0D3, 0x8661,
- 0xB0D4, 0xB3C6, 0xB0D5, 0x8662, 0xB0D6, 0x8663, 0xB0D7, 0x8664, 0xB0D8, 0xB3C7, 0xB0D9, 0x8665, 0xB0DA, 0x8666, 0xB0DB, 0x8667,
- 0xB0DC, 0x8668, 0xB0DD, 0x8669, 0xB0DE, 0x866A, 0xB0DF, 0x866B, 0xB0E0, 0xB3C8, 0xB0E1, 0x866C, 0xB0E2, 0x866D, 0xB0E3, 0x866E,
- 0xB0E4, 0x866F, 0xB0E5, 0xB3C9, 0xB0E6, 0x8670, 0xB0E7, 0x8671, 0xB0E8, 0x8672, 0xB0E9, 0x8673, 0xB0EA, 0x8674, 0xB0EB, 0x8675,
- 0xB0EC, 0x8676, 0xB0ED, 0x8677, 0xB0EE, 0x8678, 0xB0EF, 0x8679, 0xB0F0, 0x867A, 0xB0F1, 0x8681, 0xB0F2, 0x8682, 0xB0F3, 0x8683,
- 0xB0F4, 0x8684, 0xB0F5, 0x8685, 0xB0F6, 0x8686, 0xB0F7, 0x8687, 0xB0F8, 0x8688, 0xB0F9, 0x8689, 0xB0FA, 0x868A, 0xB0FB, 0x868B,
- 0xB0FC, 0x868C, 0xB0FD, 0x868D, 0xB0FE, 0x868E, 0xB0FF, 0x868F, 0xB100, 0x8690, 0xB101, 0x8691, 0xB102, 0x8692, 0xB103, 0x8693,
- 0xB104, 0x8694, 0xB105, 0x8695, 0xB106, 0x8696, 0xB107, 0x8697, 0xB108, 0xB3CA, 0xB109, 0xB3CB, 0xB10A, 0x8698, 0xB10B, 0xB3CC,
- 0xB10C, 0xB3CD, 0xB10D, 0x8699, 0xB10E, 0x869A, 0xB10F, 0x869B, 0xB110, 0xB3CE, 0xB111, 0x869C, 0xB112, 0xB3CF, 0xB113, 0xB3D0,
- 0xB114, 0x869D, 0xB115, 0x869E, 0xB116, 0x869F, 0xB117, 0x86A0, 0xB118, 0xB3D1, 0xB119, 0xB3D2, 0xB11A, 0x86A1, 0xB11B, 0xB3D3,
- 0xB11C, 0xB3D4, 0xB11D, 0xB3D5, 0xB11E, 0x86A2, 0xB11F, 0x86A3, 0xB120, 0x86A4, 0xB121, 0x86A5, 0xB122, 0x86A6, 0xB123, 0xB3D6,
- 0xB124, 0xB3D7, 0xB125, 0xB3D8, 0xB126, 0x86A7, 0xB127, 0x86A8, 0xB128, 0xB3D9, 0xB129, 0x86A9, 0xB12A, 0x86AA, 0xB12B, 0x86AB,
- 0xB12C, 0xB3DA, 0xB12D, 0x86AC, 0xB12E, 0x86AD, 0xB12F, 0x86AE, 0xB130, 0x86AF, 0xB131, 0x86B0, 0xB132, 0x86B1, 0xB133, 0x86B2,
- 0xB134, 0xB3DB, 0xB135, 0xB3DC, 0xB136, 0x86B3, 0xB137, 0xB3DD, 0xB138, 0xB3DE, 0xB139, 0xB3DF, 0xB13A, 0x86B4, 0xB13B, 0x86B5,
- 0xB13C, 0x86B6, 0xB13D, 0x86B7, 0xB13E, 0x86B8, 0xB13F, 0x86B9, 0xB140, 0xB3E0, 0xB141, 0xB3E1, 0xB142, 0x86BA, 0xB143, 0x86BB,
- 0xB144, 0xB3E2, 0xB145, 0x86BC, 0xB146, 0x86BD, 0xB147, 0x86BE, 0xB148, 0xB3E3, 0xB149, 0x86BF, 0xB14A, 0x86C0, 0xB14B, 0x86C1,
- 0xB14C, 0x86C2, 0xB14D, 0x86C3, 0xB14E, 0x86C4, 0xB14F, 0x86C5, 0xB150, 0xB3E4, 0xB151, 0xB3E5, 0xB152, 0x86C6, 0xB153, 0x86C7,
- 0xB154, 0xB3E6, 0xB155, 0xB3E7, 0xB156, 0x86C8, 0xB157, 0x86C9, 0xB158, 0xB3E8, 0xB159, 0x86CA, 0xB15A, 0x86CB, 0xB15B, 0x86CC,
- 0xB15C, 0xB3E9, 0xB15D, 0x86CD, 0xB15E, 0x86CE, 0xB15F, 0x86CF, 0xB160, 0xB3EA, 0xB161, 0x86D0, 0xB162, 0x86D1, 0xB163, 0x86D2,
- 0xB164, 0x86D3, 0xB165, 0x86D4, 0xB166, 0x86D5, 0xB167, 0x86D6, 0xB168, 0x86D7, 0xB169, 0x86D8, 0xB16A, 0x86D9, 0xB16B, 0x86DA,
- 0xB16C, 0x86DB, 0xB16D, 0x86DC, 0xB16E, 0x86DD, 0xB16F, 0x86DE, 0xB170, 0x86DF, 0xB171, 0x86E0, 0xB172, 0x86E1, 0xB173, 0x86E2,
- 0xB174, 0x86E3, 0xB175, 0x86E4, 0xB176, 0x86E5, 0xB177, 0x86E6, 0xB178, 0xB3EB, 0xB179, 0xB3EC, 0xB17A, 0x86E7, 0xB17B, 0x86E8,
- 0xB17C, 0xB3ED, 0xB17D, 0x86E9, 0xB17E, 0x86EA, 0xB17F, 0x86EB, 0xB180, 0xB3EE, 0xB181, 0x86EC, 0xB182, 0xB3EF, 0xB183, 0x86ED,
- 0xB184, 0x86EE, 0xB185, 0x86EF, 0xB186, 0x86F0, 0xB187, 0x86F1, 0xB188, 0xB3F0, 0xB189, 0xB3F1, 0xB18A, 0x86F2, 0xB18B, 0xB3F2,
- 0xB18C, 0x86F3, 0xB18D, 0xB3F3, 0xB18E, 0x86F4, 0xB18F, 0x86F5, 0xB190, 0x86F6, 0xB191, 0x86F7, 0xB192, 0xB3F4, 0xB193, 0xB3F5,
- 0xB194, 0xB3F6, 0xB195, 0x86F8, 0xB196, 0x86F9, 0xB197, 0x86FA, 0xB198, 0xB3F7, 0xB199, 0x86FB, 0xB19A, 0x86FC, 0xB19B, 0x86FD,
- 0xB19C, 0xB3F8, 0xB19D, 0x86FE, 0xB19E, 0x8741, 0xB19F, 0x8742, 0xB1A0, 0x8743, 0xB1A1, 0x8744, 0xB1A2, 0x8745, 0xB1A3, 0x8746,
- 0xB1A4, 0x8747, 0xB1A5, 0x8748, 0xB1A6, 0x8749, 0xB1A7, 0x874A, 0xB1A8, 0xB3F9, 0xB1A9, 0x874B, 0xB1AA, 0x874C, 0xB1AB, 0x874D,
- 0xB1AC, 0x874E, 0xB1AD, 0x874F, 0xB1AE, 0x8750, 0xB1AF, 0x8751, 0xB1B0, 0x8752, 0xB1B1, 0x8753, 0xB1B2, 0x8754, 0xB1B3, 0x8755,
- 0xB1B4, 0x8756, 0xB1B5, 0x8757, 0xB1B6, 0x8758, 0xB1B7, 0x8759, 0xB1B8, 0x875A, 0xB1B9, 0x8761, 0xB1BA, 0x8762, 0xB1BB, 0x8763,
- 0xB1BC, 0x8764, 0xB1BD, 0x8765, 0xB1BE, 0x8766, 0xB1BF, 0x8767, 0xB1C0, 0x8768, 0xB1C1, 0x8769, 0xB1C2, 0x876A, 0xB1C3, 0x876B,
- 0xB1C4, 0x876C, 0xB1C5, 0x876D, 0xB1C6, 0x876E, 0xB1C7, 0x876F, 0xB1C8, 0x8770, 0xB1C9, 0x8771, 0xB1CA, 0x8772, 0xB1CB, 0x8773,
- 0xB1CC, 0xB3FA, 0xB1CD, 0x8774, 0xB1CE, 0x8775, 0xB1CF, 0x8776, 0xB1D0, 0xB3FB, 0xB1D1, 0x8777, 0xB1D2, 0x8778, 0xB1D3, 0x8779,
- 0xB1D4, 0xB3FC, 0xB1D5, 0x877A, 0xB1D6, 0x8781, 0xB1D7, 0x8782, 0xB1D8, 0x8783, 0xB1D9, 0x8784, 0xB1DA, 0x8785, 0xB1DB, 0x8786,
- 0xB1DC, 0xB3FD, 0xB1DD, 0xB3FE, 0xB1DE, 0x8787, 0xB1DF, 0xB4A1, 0xB1E0, 0x8788, 0xB1E1, 0x8789, 0xB1E2, 0x878A, 0xB1E3, 0x878B,
- 0xB1E4, 0x878C, 0xB1E5, 0x878D, 0xB1E6, 0x878E, 0xB1E7, 0x878F, 0xB1E8, 0xB4A2, 0xB1E9, 0xB4A3, 0xB1EA, 0x8790, 0xB1EB, 0x8791,
- 0xB1EC, 0xB4A4, 0xB1ED, 0x8792, 0xB1EE, 0x8793, 0xB1EF, 0x8794, 0xB1F0, 0xB4A5, 0xB1F1, 0x8795, 0xB1F2, 0x8796, 0xB1F3, 0x8797,
- 0xB1F4, 0x8798, 0xB1F5, 0x8799, 0xB1F6, 0x879A, 0xB1F7, 0x879B, 0xB1F8, 0x879C, 0xB1F9, 0xB4A6, 0xB1FA, 0x879D, 0xB1FB, 0xB4A7,
- 0xB1FC, 0x879E, 0xB1FD, 0xB4A8, 0xB1FE, 0x879F, 0xB1FF, 0x87A0, 0xB200, 0x87A1, 0xB201, 0x87A2, 0xB202, 0x87A3, 0xB203, 0x87A4,
- 0xB204, 0xB4A9, 0xB205, 0xB4AA, 0xB206, 0x87A5, 0xB207, 0x87A6, 0xB208, 0xB4AB, 0xB209, 0x87A7, 0xB20A, 0x87A8, 0xB20B, 0xB4AC,
- 0xB20C, 0xB4AD, 0xB20D, 0x87A9, 0xB20E, 0x87AA, 0xB20F, 0x87AB, 0xB210, 0x87AC, 0xB211, 0x87AD, 0xB212, 0x87AE, 0xB213, 0x87AF,
- 0xB214, 0xB4AE, 0xB215, 0xB4AF, 0xB216, 0x87B0, 0xB217, 0xB4B0, 0xB218, 0x87B1, 0xB219, 0xB4B1, 0xB21A, 0x87B2, 0xB21B, 0x87B3,
- 0xB21C, 0x87B4, 0xB21D, 0x87B5, 0xB21E, 0x87B6, 0xB21F, 0x87B7, 0xB220, 0xB4B2, 0xB221, 0x87B8, 0xB222, 0x87B9, 0xB223, 0x87BA,
- 0xB224, 0x87BB, 0xB225, 0x87BC, 0xB226, 0x87BD, 0xB227, 0x87BE, 0xB228, 0x87BF, 0xB229, 0x87C0, 0xB22A, 0x87C1, 0xB22B, 0x87C2,
- 0xB22C, 0x87C3, 0xB22D, 0x87C4, 0xB22E, 0x87C5, 0xB22F, 0x87C6, 0xB230, 0x87C7, 0xB231, 0x87C8, 0xB232, 0x87C9, 0xB233, 0x87CA,
- 0xB234, 0xB4B3, 0xB235, 0x87CB, 0xB236, 0x87CC, 0xB237, 0x87CD, 0xB238, 0x87CE, 0xB239, 0x87CF, 0xB23A, 0x87D0, 0xB23B, 0x87D1,
- 0xB23C, 0xB4B4, 0xB23D, 0x87D2, 0xB23E, 0x87D3, 0xB23F, 0x87D4, 0xB240, 0x87D5, 0xB241, 0x87D6, 0xB242, 0x87D7, 0xB243, 0x87D8,
- 0xB244, 0x87D9, 0xB245, 0x87DA, 0xB246, 0x87DB, 0xB247, 0x87DC, 0xB248, 0x87DD, 0xB249, 0x87DE, 0xB24A, 0x87DF, 0xB24B, 0x87E0,
- 0xB24C, 0x87E1, 0xB24D, 0x87E2, 0xB24E, 0x87E3, 0xB24F, 0x87E4, 0xB250, 0x87E5, 0xB251, 0x87E6, 0xB252, 0x87E7, 0xB253, 0x87E8,
- 0xB254, 0x87E9, 0xB255, 0x87EA, 0xB256, 0x87EB, 0xB257, 0x87EC, 0xB258, 0xB4B5, 0xB259, 0x87ED, 0xB25A, 0x87EE, 0xB25B, 0x87EF,
- 0xB25C, 0xB4B6, 0xB25D, 0x87F0, 0xB25E, 0x87F1, 0xB25F, 0x87F2, 0xB260, 0xB4B7, 0xB261, 0x87F3, 0xB262, 0x87F4, 0xB263, 0x87F5,
- 0xB264, 0x87F6, 0xB265, 0x87F7, 0xB266, 0x87F8, 0xB267, 0x87F9, 0xB268, 0xB4B8, 0xB269, 0xB4B9, 0xB26A, 0x87FA, 0xB26B, 0x87FB,
- 0xB26C, 0x87FC, 0xB26D, 0x87FD, 0xB26E, 0x87FE, 0xB26F, 0x8841, 0xB270, 0x8842, 0xB271, 0x8843, 0xB272, 0x8844, 0xB273, 0x8845,
- 0xB274, 0xB4BA, 0xB275, 0xB4BB, 0xB276, 0x8846, 0xB277, 0x8847, 0xB278, 0x8848, 0xB279, 0x8849, 0xB27A, 0x884A, 0xB27B, 0x884B,
- 0xB27C, 0xB4BC, 0xB27D, 0x884C, 0xB27E, 0x884D, 0xB27F, 0x884E, 0xB280, 0x884F, 0xB281, 0x8850, 0xB282, 0x8851, 0xB283, 0x8852,
- 0xB284, 0xB4BD, 0xB285, 0xB4BE, 0xB286, 0x8853, 0xB287, 0x8854, 0xB288, 0x8855, 0xB289, 0xB4BF, 0xB28A, 0x8856, 0xB28B, 0x8857,
- 0xB28C, 0x8858, 0xB28D, 0x8859, 0xB28E, 0x885A, 0xB28F, 0x8861, 0xB290, 0xB4C0, 0xB291, 0xB4C1, 0xB292, 0x8862, 0xB293, 0x8863,
- 0xB294, 0xB4C2, 0xB295, 0x8864, 0xB296, 0x8865, 0xB297, 0x8866, 0xB298, 0xB4C3, 0xB299, 0xB4C4, 0xB29A, 0xB4C5, 0xB29B, 0x8867,
- 0xB29C, 0x8868, 0xB29D, 0x8869, 0xB29E, 0x886A, 0xB29F, 0x886B, 0xB2A0, 0xB4C6, 0xB2A1, 0xB4C7, 0xB2A2, 0x886C, 0xB2A3, 0xB4C8,
- 0xB2A4, 0x886D, 0xB2A5, 0xB4C9, 0xB2A6, 0xB4CA, 0xB2A7, 0x886E, 0xB2A8, 0x886F, 0xB2A9, 0x8870, 0xB2AA, 0xB4CB, 0xB2AB, 0x8871,
- 0xB2AC, 0xB4CC, 0xB2AD, 0x8872, 0xB2AE, 0x8873, 0xB2AF, 0x8874, 0xB2B0, 0xB4CD, 0xB2B1, 0x8875, 0xB2B2, 0x8876, 0xB2B3, 0x8877,
- 0xB2B4, 0xB4CE, 0xB2B5, 0x8878, 0xB2B6, 0x8879, 0xB2B7, 0x887A, 0xB2B8, 0x8881, 0xB2B9, 0x8882, 0xB2BA, 0x8883, 0xB2BB, 0x8884,
- 0xB2BC, 0x8885, 0xB2BD, 0x8886, 0xB2BE, 0x8887, 0xB2BF, 0x8888, 0xB2C0, 0x8889, 0xB2C1, 0x888A, 0xB2C2, 0x888B, 0xB2C3, 0x888C,
- 0xB2C4, 0x888D, 0xB2C5, 0x888E, 0xB2C6, 0x888F, 0xB2C7, 0x8890, 0xB2C8, 0xB4CF, 0xB2C9, 0xB4D0, 0xB2CA, 0x8891, 0xB2CB, 0x8892,
- 0xB2CC, 0xB4D1, 0xB2CD, 0x8893, 0xB2CE, 0x8894, 0xB2CF, 0x8895, 0xB2D0, 0xB4D2, 0xB2D1, 0x8896, 0xB2D2, 0xB4D3, 0xB2D3, 0x8897,
- 0xB2D4, 0x8898, 0xB2D5, 0x8899, 0xB2D6, 0x889A, 0xB2D7, 0x889B, 0xB2D8, 0xB4D4, 0xB2D9, 0xB4D5, 0xB2DA, 0x889C, 0xB2DB, 0xB4D6,
- 0xB2DC, 0x889D, 0xB2DD, 0xB4D7, 0xB2DE, 0x889E, 0xB2DF, 0x889F, 0xB2E0, 0x88A0, 0xB2E1, 0x88A1, 0xB2E2, 0xB4D8, 0xB2E3, 0x88A2,
- 0xB2E4, 0xB4D9, 0xB2E5, 0xB4DA, 0xB2E6, 0xB4DB, 0xB2E7, 0x88A3, 0xB2E8, 0xB4DC, 0xB2E9, 0x88A4, 0xB2EA, 0x88A5, 0xB2EB, 0xB4DD,
- 0xB2EC, 0xB4DE, 0xB2ED, 0xB4DF, 0xB2EE, 0xB4E0, 0xB2EF, 0xB4E1, 0xB2F0, 0x88A6, 0xB2F1, 0x88A7, 0xB2F2, 0x88A8, 0xB2F3, 0xB4E2,
- 0xB2F4, 0xB4E3, 0xB2F5, 0xB4E4, 0xB2F6, 0x88A9, 0xB2F7, 0xB4E5, 0xB2F8, 0xB4E6, 0xB2F9, 0xB4E7, 0xB2FA, 0xB4E8, 0xB2FB, 0xB4E9,
- 0xB2FC, 0x88AA, 0xB2FD, 0x88AB, 0xB2FE, 0x88AC, 0xB2FF, 0xB4EA, 0xB300, 0xB4EB, 0xB301, 0xB4EC, 0xB302, 0x88AD, 0xB303, 0x88AE,
- 0xB304, 0xB4ED, 0xB305, 0x88AF, 0xB306, 0x88B0, 0xB307, 0x88B1, 0xB308, 0xB4EE, 0xB309, 0x88B2, 0xB30A, 0x88B3, 0xB30B, 0x88B4,
- 0xB30C, 0x88B5, 0xB30D, 0x88B6, 0xB30E, 0x88B7, 0xB30F, 0x88B8, 0xB310, 0xB4EF, 0xB311, 0xB4F0, 0xB312, 0x88B9, 0xB313, 0xB4F1,
- 0xB314, 0xB4F2, 0xB315, 0xB4F3, 0xB316, 0x88BA, 0xB317, 0x88BB, 0xB318, 0x88BC, 0xB319, 0x88BD, 0xB31A, 0x88BE, 0xB31B, 0x88BF,
- 0xB31C, 0xB4F4, 0xB31D, 0x88C0, 0xB31E, 0x88C1, 0xB31F, 0x88C2, 0xB320, 0x88C3, 0xB321, 0x88C4, 0xB322, 0x88C5, 0xB323, 0x88C6,
- 0xB324, 0x88C7, 0xB325, 0x88C8, 0xB326, 0x88C9, 0xB327, 0x88CA, 0xB328, 0x88CB, 0xB329, 0x88CC, 0xB32A, 0x88CD, 0xB32B, 0x88CE,
- 0xB32C, 0x88CF, 0xB32D, 0x88D0, 0xB32E, 0x88D1, 0xB32F, 0x88D2, 0xB330, 0x88D3, 0xB331, 0x88D4, 0xB332, 0x88D5, 0xB333, 0x88D6,
- 0xB334, 0x88D7, 0xB335, 0x88D8, 0xB336, 0x88D9, 0xB337, 0x88DA, 0xB338, 0x88DB, 0xB339, 0x88DC, 0xB33A, 0x88DD, 0xB33B, 0x88DE,
- 0xB33C, 0x88DF, 0xB33D, 0x88E0, 0xB33E, 0x88E1, 0xB33F, 0x88E2, 0xB340, 0x88E3, 0xB341, 0x88E4, 0xB342, 0x88E5, 0xB343, 0x88E6,
- 0xB344, 0x88E7, 0xB345, 0x88E8, 0xB346, 0x88E9, 0xB347, 0x88EA, 0xB348, 0x88EB, 0xB349, 0x88EC, 0xB34A, 0x88ED, 0xB34B, 0x88EE,
- 0xB34C, 0x88EF, 0xB34D, 0x88F0, 0xB34E, 0x88F1, 0xB34F, 0x88F2, 0xB350, 0x88F3, 0xB351, 0x88F4, 0xB352, 0x88F5, 0xB353, 0x88F6,
- 0xB354, 0xB4F5, 0xB355, 0xB4F6, 0xB356, 0xB4F7, 0xB357, 0x88F7, 0xB358, 0xB4F8, 0xB359, 0x88F8, 0xB35A, 0x88F9, 0xB35B, 0xB4F9,
- 0xB35C, 0xB4FA, 0xB35D, 0x88FA, 0xB35E, 0xB4FB, 0xB35F, 0xB4FC, 0xB360, 0x88FB, 0xB361, 0x88FC, 0xB362, 0x88FD, 0xB363, 0x88FE,
- 0xB364, 0xB4FD, 0xB365, 0xB4FE, 0xB366, 0x8941, 0xB367, 0xB5A1, 0xB368, 0x8942, 0xB369, 0xB5A2, 0xB36A, 0x8943, 0xB36B, 0xB5A3,
- 0xB36C, 0x8944, 0xB36D, 0x8945, 0xB36E, 0xB5A4, 0xB36F, 0x8946, 0xB370, 0xB5A5, 0xB371, 0xB5A6, 0xB372, 0x8947, 0xB373, 0x8948,
- 0xB374, 0xB5A7, 0xB375, 0x8949, 0xB376, 0x894A, 0xB377, 0x894B, 0xB378, 0xB5A8, 0xB379, 0x894C, 0xB37A, 0x894D, 0xB37B, 0x894E,
- 0xB37C, 0x894F, 0xB37D, 0x8950, 0xB37E, 0x8951, 0xB37F, 0x8952, 0xB380, 0xB5A9, 0xB381, 0xB5AA, 0xB382, 0x8953, 0xB383, 0xB5AB,
- 0xB384, 0xB5AC, 0xB385, 0xB5AD, 0xB386, 0x8954, 0xB387, 0x8955, 0xB388, 0x8956, 0xB389, 0x8957, 0xB38A, 0x8958, 0xB38B, 0x8959,
- 0xB38C, 0xB5AE, 0xB38D, 0x895A, 0xB38E, 0x8961, 0xB38F, 0x8962, 0xB390, 0xB5AF, 0xB391, 0x8963, 0xB392, 0x8964, 0xB393, 0x8965,
- 0xB394, 0xB5B0, 0xB395, 0x8966, 0xB396, 0x8967, 0xB397, 0x8968, 0xB398, 0x8969, 0xB399, 0x896A, 0xB39A, 0x896B, 0xB39B, 0x896C,
- 0xB39C, 0x896D, 0xB39D, 0x896E, 0xB39E, 0x896F, 0xB39F, 0x8970, 0xB3A0, 0xB5B1, 0xB3A1, 0xB5B2, 0xB3A2, 0x8971, 0xB3A3, 0x8972,
- 0xB3A4, 0x8973, 0xB3A5, 0x8974, 0xB3A6, 0x8975, 0xB3A7, 0x8976, 0xB3A8, 0xB5B3, 0xB3A9, 0x8977, 0xB3AA, 0x8978, 0xB3AB, 0x8979,
- 0xB3AC, 0xB5B4, 0xB3AD, 0x897A, 0xB3AE, 0x8981, 0xB3AF, 0x8982, 0xB3B0, 0x8983, 0xB3B1, 0x8984, 0xB3B2, 0x8985, 0xB3B3, 0x8986,
- 0xB3B4, 0x8987, 0xB3B5, 0x8988, 0xB3B6, 0x8989, 0xB3B7, 0x898A, 0xB3B8, 0x898B, 0xB3B9, 0x898C, 0xB3BA, 0x898D, 0xB3BB, 0x898E,
- 0xB3BC, 0x898F, 0xB3BD, 0x8990, 0xB3BE, 0x8991, 0xB3BF, 0x8992, 0xB3C0, 0x8993, 0xB3C1, 0x8994, 0xB3C2, 0x8995, 0xB3C3, 0x8996,
- 0xB3C4, 0xB5B5, 0xB3C5, 0xB5B6, 0xB3C6, 0x8997, 0xB3C7, 0x8998, 0xB3C8, 0xB5B7, 0xB3C9, 0x8999, 0xB3CA, 0x899A, 0xB3CB, 0xB5B8,
- 0xB3CC, 0xB5B9, 0xB3CD, 0x899B, 0xB3CE, 0xB5BA, 0xB3CF, 0x899C, 0xB3D0, 0xB5BB, 0xB3D1, 0x899D, 0xB3D2, 0x899E, 0xB3D3, 0x899F,
- 0xB3D4, 0xB5BC, 0xB3D5, 0xB5BD, 0xB3D6, 0x89A0, 0xB3D7, 0xB5BE, 0xB3D8, 0x89A1, 0xB3D9, 0xB5BF, 0xB3DA, 0x89A2, 0xB3DB, 0xB5C0,
- 0xB3DC, 0x89A3, 0xB3DD, 0xB5C1, 0xB3DE, 0x89A4, 0xB3DF, 0x89A5, 0xB3E0, 0xB5C2, 0xB3E1, 0x89A6, 0xB3E2, 0x89A7, 0xB3E3, 0x89A8,
- 0xB3E4, 0xB5C3, 0xB3E5, 0x89A9, 0xB3E6, 0x89AA, 0xB3E7, 0x89AB, 0xB3E8, 0xB5C4, 0xB3E9, 0x89AC, 0xB3EA, 0x89AD, 0xB3EB, 0x89AE,
- 0xB3EC, 0x89AF, 0xB3ED, 0x89B0, 0xB3EE, 0x89B1, 0xB3EF, 0x89B2, 0xB3F0, 0x89B3, 0xB3F1, 0x89B4, 0xB3F2, 0x89B5, 0xB3F3, 0x89B6,
- 0xB3F4, 0x89B7, 0xB3F5, 0x89B8, 0xB3F6, 0x89B9, 0xB3F7, 0x89BA, 0xB3F8, 0x89BB, 0xB3F9, 0x89BC, 0xB3FA, 0x89BD, 0xB3FB, 0x89BE,
- 0xB3FC, 0xB5C5, 0xB3FD, 0x89BF, 0xB3FE, 0x89C0, 0xB3FF, 0x89C1, 0xB400, 0x89C2, 0xB401, 0x89C3, 0xB402, 0x89C4, 0xB403, 0x89C5,
- 0xB404, 0x89C6, 0xB405, 0x89C7, 0xB406, 0x89C8, 0xB407, 0x89C9, 0xB408, 0x89CA, 0xB409, 0x89CB, 0xB40A, 0x89CC, 0xB40B, 0x89CD,
- 0xB40C, 0x89CE, 0xB40D, 0x89CF, 0xB40E, 0x89D0, 0xB40F, 0x89D1, 0xB410, 0xB5C6, 0xB411, 0x89D2, 0xB412, 0x89D3, 0xB413, 0x89D4,
- 0xB414, 0x89D5, 0xB415, 0x89D6, 0xB416, 0x89D7, 0xB417, 0x89D8, 0xB418, 0xB5C7, 0xB419, 0x89D9, 0xB41A, 0x89DA, 0xB41B, 0x89DB,
- 0xB41C, 0xB5C8, 0xB41D, 0x89DC, 0xB41E, 0x89DD, 0xB41F, 0x89DE, 0xB420, 0xB5C9, 0xB421, 0x89DF, 0xB422, 0x89E0, 0xB423, 0x89E1,
- 0xB424, 0x89E2, 0xB425, 0x89E3, 0xB426, 0x89E4, 0xB427, 0x89E5, 0xB428, 0xB5CA, 0xB429, 0xB5CB, 0xB42A, 0x89E6, 0xB42B, 0xB5CC,
- 0xB42C, 0x89E7, 0xB42D, 0x89E8, 0xB42E, 0x89E9, 0xB42F, 0x89EA, 0xB430, 0x89EB, 0xB431, 0x89EC, 0xB432, 0x89ED, 0xB433, 0x89EE,
- 0xB434, 0xB5CD, 0xB435, 0x89EF, 0xB436, 0x89F0, 0xB437, 0x89F1, 0xB438, 0x89F2, 0xB439, 0x89F3, 0xB43A, 0x89F4, 0xB43B, 0x89F5,
- 0xB43C, 0x89F6, 0xB43D, 0x89F7, 0xB43E, 0x89F8, 0xB43F, 0x89F9, 0xB440, 0x89FA, 0xB441, 0x89FB, 0xB442, 0x89FC, 0xB443, 0x89FD,
- 0xB444, 0x89FE, 0xB445, 0x8A41, 0xB446, 0x8A42, 0xB447, 0x8A43, 0xB448, 0x8A44, 0xB449, 0x8A45, 0xB44A, 0x8A46, 0xB44B, 0x8A47,
- 0xB44C, 0x8A48, 0xB44D, 0x8A49, 0xB44E, 0x8A4A, 0xB44F, 0x8A4B, 0xB450, 0xB5CE, 0xB451, 0xB5CF, 0xB452, 0x8A4C, 0xB453, 0x8A4D,
- 0xB454, 0xB5D0, 0xB455, 0x8A4E, 0xB456, 0x8A4F, 0xB457, 0x8A50, 0xB458, 0xB5D1, 0xB459, 0x8A51, 0xB45A, 0x8A52, 0xB45B, 0x8A53,
- 0xB45C, 0x8A54, 0xB45D, 0x8A55, 0xB45E, 0x8A56, 0xB45F, 0x8A57, 0xB460, 0xB5D2, 0xB461, 0xB5D3, 0xB462, 0x8A58, 0xB463, 0xB5D4,
- 0xB464, 0x8A59, 0xB465, 0xB5D5, 0xB466, 0x8A5A, 0xB467, 0x8A61, 0xB468, 0x8A62, 0xB469, 0x8A63, 0xB46A, 0x8A64, 0xB46B, 0x8A65,
- 0xB46C, 0xB5D6, 0xB46D, 0x8A66, 0xB46E, 0x8A67, 0xB46F, 0x8A68, 0xB470, 0x8A69, 0xB471, 0x8A6A, 0xB472, 0x8A6B, 0xB473, 0x8A6C,
- 0xB474, 0x8A6D, 0xB475, 0x8A6E, 0xB476, 0x8A6F, 0xB477, 0x8A70, 0xB478, 0x8A71, 0xB479, 0x8A72, 0xB47A, 0x8A73, 0xB47B, 0x8A74,
- 0xB47C, 0x8A75, 0xB47D, 0x8A76, 0xB47E, 0x8A77, 0xB47F, 0x8A78, 0xB480, 0xB5D7, 0xB481, 0x8A79, 0xB482, 0x8A7A, 0xB483, 0x8A81,
- 0xB484, 0x8A82, 0xB485, 0x8A83, 0xB486, 0x8A84, 0xB487, 0x8A85, 0xB488, 0xB5D8, 0xB489, 0x8A86, 0xB48A, 0x8A87, 0xB48B, 0x8A88,
- 0xB48C, 0x8A89, 0xB48D, 0x8A8A, 0xB48E, 0x8A8B, 0xB48F, 0x8A8C, 0xB490, 0x8A8D, 0xB491, 0x8A8E, 0xB492, 0x8A8F, 0xB493, 0x8A90,
- 0xB494, 0x8A91, 0xB495, 0x8A92, 0xB496, 0x8A93, 0xB497, 0x8A94, 0xB498, 0x8A95, 0xB499, 0x8A96, 0xB49A, 0x8A97, 0xB49B, 0x8A98,
- 0xB49C, 0x8A99, 0xB49D, 0xB5D9, 0xB49E, 0x8A9A, 0xB49F, 0x8A9B, 0xB4A0, 0x8A9C, 0xB4A1, 0x8A9D, 0xB4A2, 0x8A9E, 0xB4A3, 0x8A9F,
- 0xB4A4, 0xB5DA, 0xB4A5, 0x8AA0, 0xB4A6, 0x8AA1, 0xB4A7, 0x8AA2, 0xB4A8, 0xB5DB, 0xB4A9, 0x8AA3, 0xB4AA, 0x8AA4, 0xB4AB, 0x8AA5,
- 0xB4AC, 0xB5DC, 0xB4AD, 0x8AA6, 0xB4AE, 0x8AA7, 0xB4AF, 0x8AA8, 0xB4B0, 0x8AA9, 0xB4B1, 0x8AAA, 0xB4B2, 0x8AAB, 0xB4B3, 0x8AAC,
- 0xB4B4, 0x8AAD, 0xB4B5, 0xB5DD, 0xB4B6, 0x8AAE, 0xB4B7, 0xB5DE, 0xB4B8, 0x8AAF, 0xB4B9, 0xB5DF, 0xB4BA, 0x8AB0, 0xB4BB, 0x8AB1,
- 0xB4BC, 0x8AB2, 0xB4BD, 0x8AB3, 0xB4BE, 0x8AB4, 0xB4BF, 0x8AB5, 0xB4C0, 0xB5E0, 0xB4C1, 0x8AB6, 0xB4C2, 0x8AB7, 0xB4C3, 0x8AB8,
- 0xB4C4, 0xB5E1, 0xB4C5, 0x8AB9, 0xB4C6, 0x8ABA, 0xB4C7, 0x8ABB, 0xB4C8, 0xB5E2, 0xB4C9, 0x8ABC, 0xB4CA, 0x8ABD, 0xB4CB, 0x8ABE,
- 0xB4CC, 0x8ABF, 0xB4CD, 0x8AC0, 0xB4CE, 0x8AC1, 0xB4CF, 0x8AC2, 0xB4D0, 0xB5E3, 0xB4D1, 0x8AC3, 0xB4D2, 0x8AC4, 0xB4D3, 0x8AC5,
- 0xB4D4, 0x8AC6, 0xB4D5, 0xB5E4, 0xB4D6, 0x8AC7, 0xB4D7, 0x8AC8, 0xB4D8, 0x8AC9, 0xB4D9, 0x8ACA, 0xB4DA, 0x8ACB, 0xB4DB, 0x8ACC,
- 0xB4DC, 0xB5E5, 0xB4DD, 0xB5E6, 0xB4DE, 0x8ACD, 0xB4DF, 0x8ACE, 0xB4E0, 0xB5E7, 0xB4E1, 0x8ACF, 0xB4E2, 0x8AD0, 0xB4E3, 0xB5E8,
- 0xB4E4, 0xB5E9, 0xB4E5, 0x8AD1, 0xB4E6, 0xB5EA, 0xB4E7, 0x8AD2, 0xB4E8, 0x8AD3, 0xB4E9, 0x8AD4, 0xB4EA, 0x8AD5, 0xB4EB, 0x8AD6,
- 0xB4EC, 0xB5EB, 0xB4ED, 0xB5EC, 0xB4EE, 0x8AD7, 0xB4EF, 0xB5ED, 0xB4F0, 0x8AD8, 0xB4F1, 0xB5EE, 0xB4F2, 0x8AD9, 0xB4F3, 0x8ADA,
- 0xB4F4, 0x8ADB, 0xB4F5, 0x8ADC, 0xB4F6, 0x8ADD, 0xB4F7, 0x8ADE, 0xB4F8, 0xB5EF, 0xB4F9, 0x8ADF, 0xB4FA, 0x8AE0, 0xB4FB, 0x8AE1,
- 0xB4FC, 0x8AE2, 0xB4FD, 0x8AE3, 0xB4FE, 0x8AE4, 0xB4FF, 0x8AE5, 0xB500, 0x8AE6, 0xB501, 0x8AE7, 0xB502, 0x8AE8, 0xB503, 0x8AE9,
- 0xB504, 0x8AEA, 0xB505, 0x8AEB, 0xB506, 0x8AEC, 0xB507, 0x8AED, 0xB508, 0x8AEE, 0xB509, 0x8AEF, 0xB50A, 0x8AF0, 0xB50B, 0x8AF1,
- 0xB50C, 0x8AF2, 0xB50D, 0x8AF3, 0xB50E, 0x8AF4, 0xB50F, 0x8AF5, 0xB510, 0x8AF6, 0xB511, 0x8AF7, 0xB512, 0x8AF8, 0xB513, 0x8AF9,
- 0xB514, 0xB5F0, 0xB515, 0xB5F1, 0xB516, 0x8AFA, 0xB517, 0x8AFB, 0xB518, 0xB5F2, 0xB519, 0x8AFC, 0xB51A, 0x8AFD, 0xB51B, 0xB5F3,
- 0xB51C, 0xB5F4, 0xB51D, 0x8AFE, 0xB51E, 0x8B41, 0xB51F, 0x8B42, 0xB520, 0x8B43, 0xB521, 0x8B44, 0xB522, 0x8B45, 0xB523, 0x8B46,
- 0xB524, 0xB5F5, 0xB525, 0xB5F6, 0xB526, 0x8B47, 0xB527, 0xB5F7, 0xB528, 0xB5F8, 0xB529, 0xB5F9, 0xB52A, 0xB5FA, 0xB52B, 0x8B48,
- 0xB52C, 0x8B49, 0xB52D, 0x8B4A, 0xB52E, 0x8B4B, 0xB52F, 0x8B4C, 0xB530, 0xB5FB, 0xB531, 0xB5FC, 0xB532, 0x8B4D, 0xB533, 0x8B4E,
- 0xB534, 0xB5FD, 0xB535, 0x8B4F, 0xB536, 0x8B50, 0xB537, 0x8B51, 0xB538, 0xB5FE, 0xB539, 0x8B52, 0xB53A, 0x8B53, 0xB53B, 0x8B54,
- 0xB53C, 0x8B55, 0xB53D, 0x8B56, 0xB53E, 0x8B57, 0xB53F, 0x8B58, 0xB540, 0xB6A1, 0xB541, 0xB6A2, 0xB542, 0x8B59, 0xB543, 0xB6A3,
- 0xB544, 0xB6A4, 0xB545, 0xB6A5, 0xB546, 0x8B5A, 0xB547, 0x8B61, 0xB548, 0x8B62, 0xB549, 0x8B63, 0xB54A, 0x8B64, 0xB54B, 0xB6A6,
- 0xB54C, 0xB6A7, 0xB54D, 0xB6A8, 0xB54E, 0x8B65, 0xB54F, 0x8B66, 0xB550, 0xB6A9, 0xB551, 0x8B67, 0xB552, 0x8B68, 0xB553, 0x8B69,
- 0xB554, 0xB6AA, 0xB555, 0x8B6A, 0xB556, 0x8B6B, 0xB557, 0x8B6C, 0xB558, 0x8B6D, 0xB559, 0x8B6E, 0xB55A, 0x8B6F, 0xB55B, 0x8B70,
- 0xB55C, 0xB6AB, 0xB55D, 0xB6AC, 0xB55E, 0x8B71, 0xB55F, 0xB6AD, 0xB560, 0xB6AE, 0xB561, 0xB6AF, 0xB562, 0x8B72, 0xB563, 0x8B73,
- 0xB564, 0x8B74, 0xB565, 0x8B75, 0xB566, 0x8B76, 0xB567, 0x8B77, 0xB568, 0x8B78, 0xB569, 0x8B79, 0xB56A, 0x8B7A, 0xB56B, 0x8B81,
- 0xB56C, 0x8B82, 0xB56D, 0x8B83, 0xB56E, 0x8B84, 0xB56F, 0x8B85, 0xB570, 0x8B86, 0xB571, 0x8B87, 0xB572, 0x8B88, 0xB573, 0x8B89,
- 0xB574, 0x8B8A, 0xB575, 0x8B8B, 0xB576, 0x8B8C, 0xB577, 0x8B8D, 0xB578, 0x8B8E, 0xB579, 0x8B8F, 0xB57A, 0x8B90, 0xB57B, 0x8B91,
- 0xB57C, 0x8B92, 0xB57D, 0x8B93, 0xB57E, 0x8B94, 0xB57F, 0x8B95, 0xB580, 0x8B96, 0xB581, 0x8B97, 0xB582, 0x8B98, 0xB583, 0x8B99,
- 0xB584, 0x8B9A, 0xB585, 0x8B9B, 0xB586, 0x8B9C, 0xB587, 0x8B9D, 0xB588, 0x8B9E, 0xB589, 0x8B9F, 0xB58A, 0x8BA0, 0xB58B, 0x8BA1,
- 0xB58C, 0x8BA2, 0xB58D, 0x8BA3, 0xB58E, 0x8BA4, 0xB58F, 0x8BA5, 0xB590, 0x8BA6, 0xB591, 0x8BA7, 0xB592, 0x8BA8, 0xB593, 0x8BA9,
- 0xB594, 0x8BAA, 0xB595, 0x8BAB, 0xB596, 0x8BAC, 0xB597, 0x8BAD, 0xB598, 0x8BAE, 0xB599, 0x8BAF, 0xB59A, 0x8BB0, 0xB59B, 0x8BB1,
- 0xB59C, 0x8BB2, 0xB59D, 0x8BB3, 0xB59E, 0x8BB4, 0xB59F, 0x8BB5, 0xB5A0, 0xB6B0, 0xB5A1, 0xB6B1, 0xB5A2, 0x8BB6, 0xB5A3, 0x8BB7,
- 0xB5A4, 0xB6B2, 0xB5A5, 0x8BB8, 0xB5A6, 0x8BB9, 0xB5A7, 0x8BBA, 0xB5A8, 0xB6B3, 0xB5A9, 0x8BBB, 0xB5AA, 0xB6B4, 0xB5AB, 0xB6B5,
- 0xB5AC, 0x8BBC, 0xB5AD, 0x8BBD, 0xB5AE, 0x8BBE, 0xB5AF, 0x8BBF, 0xB5B0, 0xB6B6, 0xB5B1, 0xB6B7, 0xB5B2, 0x8BC0, 0xB5B3, 0xB6B8,
- 0xB5B4, 0xB6B9, 0xB5B5, 0xB6BA, 0xB5B6, 0x8BC1, 0xB5B7, 0x8BC2, 0xB5B8, 0x8BC3, 0xB5B9, 0x8BC4, 0xB5BA, 0x8BC5, 0xB5BB, 0xB6BB,
- 0xB5BC, 0xB6BC, 0xB5BD, 0xB6BD, 0xB5BE, 0x8BC6, 0xB5BF, 0x8BC7, 0xB5C0, 0xB6BE, 0xB5C1, 0x8BC8, 0xB5C2, 0x8BC9, 0xB5C3, 0x8BCA,
- 0xB5C4, 0xB6BF, 0xB5C5, 0x8BCB, 0xB5C6, 0x8BCC, 0xB5C7, 0x8BCD, 0xB5C8, 0x8BCE, 0xB5C9, 0x8BCF, 0xB5CA, 0x8BD0, 0xB5CB, 0x8BD1,
- 0xB5CC, 0xB6C0, 0xB5CD, 0xB6C1, 0xB5CE, 0x8BD2, 0xB5CF, 0xB6C2, 0xB5D0, 0xB6C3, 0xB5D1, 0xB6C4, 0xB5D2, 0x8BD3, 0xB5D3, 0x8BD4,
- 0xB5D4, 0x8BD5, 0xB5D5, 0x8BD6, 0xB5D6, 0x8BD7, 0xB5D7, 0x8BD8, 0xB5D8, 0xB6C5, 0xB5D9, 0x8BD9, 0xB5DA, 0x8BDA, 0xB5DB, 0x8BDB,
- 0xB5DC, 0x8BDC, 0xB5DD, 0x8BDD, 0xB5DE, 0x8BDE, 0xB5DF, 0x8BDF, 0xB5E0, 0x8BE0, 0xB5E1, 0x8BE1, 0xB5E2, 0x8BE2, 0xB5E3, 0x8BE3,
- 0xB5E4, 0x8BE4, 0xB5E5, 0x8BE5, 0xB5E6, 0x8BE6, 0xB5E7, 0x8BE7, 0xB5E8, 0x8BE8, 0xB5E9, 0x8BE9, 0xB5EA, 0x8BEA, 0xB5EB, 0x8BEB,
- 0xB5EC, 0xB6C6, 0xB5ED, 0x8BEC, 0xB5EE, 0x8BED, 0xB5EF, 0x8BEE, 0xB5F0, 0x8BEF, 0xB5F1, 0x8BF0, 0xB5F2, 0x8BF1, 0xB5F3, 0x8BF2,
- 0xB5F4, 0x8BF3, 0xB5F5, 0x8BF4, 0xB5F6, 0x8BF5, 0xB5F7, 0x8BF6, 0xB5F8, 0x8BF7, 0xB5F9, 0x8BF8, 0xB5FA, 0x8BF9, 0xB5FB, 0x8BFA,
- 0xB5FC, 0x8BFB, 0xB5FD, 0x8BFC, 0xB5FE, 0x8BFD, 0xB5FF, 0x8BFE, 0xB600, 0x8C41, 0xB601, 0x8C42, 0xB602, 0x8C43, 0xB603, 0x8C44,
- 0xB604, 0x8C45, 0xB605, 0x8C46, 0xB606, 0x8C47, 0xB607, 0x8C48, 0xB608, 0x8C49, 0xB609, 0x8C4A, 0xB60A, 0x8C4B, 0xB60B, 0x8C4C,
- 0xB60C, 0x8C4D, 0xB60D, 0x8C4E, 0xB60E, 0x8C4F, 0xB60F, 0x8C50, 0xB610, 0xB6C7, 0xB611, 0xB6C8, 0xB612, 0x8C51, 0xB613, 0x8C52,
- 0xB614, 0xB6C9, 0xB615, 0x8C53, 0xB616, 0x8C54, 0xB617, 0x8C55, 0xB618, 0xB6CA, 0xB619, 0x8C56, 0xB61A, 0x8C57, 0xB61B, 0x8C58,
- 0xB61C, 0x8C59, 0xB61D, 0x8C5A, 0xB61E, 0x8C61, 0xB61F, 0x8C62, 0xB620, 0x8C63, 0xB621, 0x8C64, 0xB622, 0x8C65, 0xB623, 0x8C66,
- 0xB624, 0x8C67, 0xB625, 0xB6CB, 0xB626, 0x8C68, 0xB627, 0x8C69, 0xB628, 0x8C6A, 0xB629, 0x8C6B, 0xB62A, 0x8C6C, 0xB62B, 0x8C6D,
- 0xB62C, 0xB6CC, 0xB62D, 0x8C6E, 0xB62E, 0x8C6F, 0xB62F, 0x8C70, 0xB630, 0x8C71, 0xB631, 0x8C72, 0xB632, 0x8C73, 0xB633, 0x8C74,
- 0xB634, 0xB6CD, 0xB635, 0x8C75, 0xB636, 0x8C76, 0xB637, 0x8C77, 0xB638, 0x8C78, 0xB639, 0x8C79, 0xB63A, 0x8C7A, 0xB63B, 0x8C81,
- 0xB63C, 0x8C82, 0xB63D, 0x8C83, 0xB63E, 0x8C84, 0xB63F, 0x8C85, 0xB640, 0x8C86, 0xB641, 0x8C87, 0xB642, 0x8C88, 0xB643, 0x8C89,
- 0xB644, 0x8C8A, 0xB645, 0x8C8B, 0xB646, 0x8C8C, 0xB647, 0x8C8D, 0xB648, 0xB6CE, 0xB649, 0x8C8E, 0xB64A, 0x8C8F, 0xB64B, 0x8C90,
- 0xB64C, 0x8C91, 0xB64D, 0x8C92, 0xB64E, 0x8C93, 0xB64F, 0x8C94, 0xB650, 0x8C95, 0xB651, 0x8C96, 0xB652, 0x8C97, 0xB653, 0x8C98,
- 0xB654, 0x8C99, 0xB655, 0x8C9A, 0xB656, 0x8C9B, 0xB657, 0x8C9C, 0xB658, 0x8C9D, 0xB659, 0x8C9E, 0xB65A, 0x8C9F, 0xB65B, 0x8CA0,
- 0xB65C, 0x8CA1, 0xB65D, 0x8CA2, 0xB65E, 0x8CA3, 0xB65F, 0x8CA4, 0xB660, 0x8CA5, 0xB661, 0x8CA6, 0xB662, 0x8CA7, 0xB663, 0x8CA8,
- 0xB664, 0xB6CF, 0xB665, 0x8CA9, 0xB666, 0x8CAA, 0xB667, 0x8CAB, 0xB668, 0xB6D0, 0xB669, 0x8CAC, 0xB66A, 0x8CAD, 0xB66B, 0x8CAE,
- 0xB66C, 0x8CAF, 0xB66D, 0x8CB0, 0xB66E, 0x8CB1, 0xB66F, 0x8CB2, 0xB670, 0x8CB3, 0xB671, 0x8CB4, 0xB672, 0x8CB5, 0xB673, 0x8CB6,
- 0xB674, 0x8CB7, 0xB675, 0x8CB8, 0xB676, 0x8CB9, 0xB677, 0x8CBA, 0xB678, 0x8CBB, 0xB679, 0x8CBC, 0xB67A, 0x8CBD, 0xB67B, 0x8CBE,
- 0xB67C, 0x8CBF, 0xB67D, 0x8CC0, 0xB67E, 0x8CC1, 0xB67F, 0x8CC2, 0xB680, 0x8CC3, 0xB681, 0x8CC4, 0xB682, 0x8CC5, 0xB683, 0x8CC6,
- 0xB684, 0x8CC7, 0xB685, 0x8CC8, 0xB686, 0x8CC9, 0xB687, 0x8CCA, 0xB688, 0x8CCB, 0xB689, 0x8CCC, 0xB68A, 0x8CCD, 0xB68B, 0x8CCE,
- 0xB68C, 0x8CCF, 0xB68D, 0x8CD0, 0xB68E, 0x8CD1, 0xB68F, 0x8CD2, 0xB690, 0x8CD3, 0xB691, 0x8CD4, 0xB692, 0x8CD5, 0xB693, 0x8CD6,
- 0xB694, 0x8CD7, 0xB695, 0x8CD8, 0xB696, 0x8CD9, 0xB697, 0x8CDA, 0xB698, 0x8CDB, 0xB699, 0x8CDC, 0xB69A, 0x8CDD, 0xB69B, 0x8CDE,
- 0xB69C, 0xB6D1, 0xB69D, 0xB6D2, 0xB69E, 0x8CDF, 0xB69F, 0x8CE0, 0xB6A0, 0xB6D3, 0xB6A1, 0x8CE1, 0xB6A2, 0x8CE2, 0xB6A3, 0x8CE3,
- 0xB6A4, 0xB6D4, 0xB6A5, 0x8CE4, 0xB6A6, 0x8CE5, 0xB6A7, 0x8CE6, 0xB6A8, 0x8CE7, 0xB6A9, 0x8CE8, 0xB6AA, 0x8CE9, 0xB6AB, 0xB6D5,
- 0xB6AC, 0xB6D6, 0xB6AD, 0x8CEA, 0xB6AE, 0x8CEB, 0xB6AF, 0x8CEC, 0xB6B0, 0x8CED, 0xB6B1, 0xB6D7, 0xB6B2, 0x8CEE, 0xB6B3, 0x8CEF,
- 0xB6B4, 0x8CF0, 0xB6B5, 0x8CF1, 0xB6B6, 0x8CF2, 0xB6B7, 0x8CF3, 0xB6B8, 0x8CF4, 0xB6B9, 0x8CF5, 0xB6BA, 0x8CF6, 0xB6BB, 0x8CF7,
- 0xB6BC, 0x8CF8, 0xB6BD, 0x8CF9, 0xB6BE, 0x8CFA, 0xB6BF, 0x8CFB, 0xB6C0, 0x8CFC, 0xB6C1, 0x8CFD, 0xB6C2, 0x8CFE, 0xB6C3, 0x8D41,
- 0xB6C4, 0x8D42, 0xB6C5, 0x8D43, 0xB6C6, 0x8D44, 0xB6C7, 0x8D45, 0xB6C8, 0x8D46, 0xB6C9, 0x8D47, 0xB6CA, 0x8D48, 0xB6CB, 0x8D49,
- 0xB6CC, 0x8D4A, 0xB6CD, 0x8D4B, 0xB6CE, 0x8D4C, 0xB6CF, 0x8D4D, 0xB6D0, 0x8D4E, 0xB6D1, 0x8D4F, 0xB6D2, 0x8D50, 0xB6D3, 0x8D51,
- 0xB6D4, 0xB6D8, 0xB6D5, 0x8D52, 0xB6D6, 0x8D53, 0xB6D7, 0x8D54, 0xB6D8, 0x8D55, 0xB6D9, 0x8D56, 0xB6DA, 0x8D57, 0xB6DB, 0x8D58,
- 0xB6DC, 0x8D59, 0xB6DD, 0x8D5A, 0xB6DE, 0x8D61, 0xB6DF, 0x8D62, 0xB6E0, 0x8D63, 0xB6E1, 0x8D64, 0xB6E2, 0x8D65, 0xB6E3, 0x8D66,
- 0xB6E4, 0x8D67, 0xB6E5, 0x8D68, 0xB6E6, 0x8D69, 0xB6E7, 0x8D6A, 0xB6E8, 0x8D6B, 0xB6E9, 0x8D6C, 0xB6EA, 0x8D6D, 0xB6EB, 0x8D6E,
- 0xB6EC, 0x8D6F, 0xB6ED, 0x8D70, 0xB6EE, 0x8D71, 0xB6EF, 0x8D72, 0xB6F0, 0xB6D9, 0xB6F1, 0x8D73, 0xB6F2, 0x8D74, 0xB6F3, 0x8D75,
- 0xB6F4, 0xB6DA, 0xB6F5, 0x8D76, 0xB6F6, 0x8D77, 0xB6F7, 0x8D78, 0xB6F8, 0xB6DB, 0xB6F9, 0x8D79, 0xB6FA, 0x8D7A, 0xB6FB, 0x8D81,
- 0xB6FC, 0x8D82, 0xB6FD, 0x8D83, 0xB6FE, 0x8D84, 0xB6FF, 0x8D85, 0xB700, 0xB6DC, 0xB701, 0xB6DD, 0xB702, 0x8D86, 0xB703, 0x8D87,
- 0xB704, 0x8D88, 0xB705, 0xB6DE, 0xB706, 0x8D89, 0xB707, 0x8D8A, 0xB708, 0x8D8B, 0xB709, 0x8D8C, 0xB70A, 0x8D8D, 0xB70B, 0x8D8E,
- 0xB70C, 0x8D8F, 0xB70D, 0x8D90, 0xB70E, 0x8D91, 0xB70F, 0x8D92, 0xB710, 0x8D93, 0xB711, 0x8D94, 0xB712, 0x8D95, 0xB713, 0x8D96,
- 0xB714, 0x8D97, 0xB715, 0x8D98, 0xB716, 0x8D99, 0xB717, 0x8D9A, 0xB718, 0x8D9B, 0xB719, 0x8D9C, 0xB71A, 0x8D9D, 0xB71B, 0x8D9E,
- 0xB71C, 0x8D9F, 0xB71D, 0x8DA0, 0xB71E, 0x8DA1, 0xB71F, 0x8DA2, 0xB720, 0x8DA3, 0xB721, 0x8DA4, 0xB722, 0x8DA5, 0xB723, 0x8DA6,
- 0xB724, 0x8DA7, 0xB725, 0x8DA8, 0xB726, 0x8DA9, 0xB727, 0x8DAA, 0xB728, 0xB6DF, 0xB729, 0xB6E0, 0xB72A, 0x8DAB, 0xB72B, 0x8DAC,
- 0xB72C, 0xB6E1, 0xB72D, 0x8DAD, 0xB72E, 0x8DAE, 0xB72F, 0xB6E2, 0xB730, 0xB6E3, 0xB731, 0x8DAF, 0xB732, 0x8DB0, 0xB733, 0x8DB1,
- 0xB734, 0x8DB2, 0xB735, 0x8DB3, 0xB736, 0x8DB4, 0xB737, 0x8DB5, 0xB738, 0xB6E4, 0xB739, 0xB6E5, 0xB73A, 0x8DB6, 0xB73B, 0xB6E6,
- 0xB73C, 0x8DB7, 0xB73D, 0x8DB8, 0xB73E, 0x8DB9, 0xB73F, 0x8DBA, 0xB740, 0x8DBB, 0xB741, 0x8DBC, 0xB742, 0x8DBD, 0xB743, 0x8DBE,
- 0xB744, 0xB6E7, 0xB745, 0x8DBF, 0xB746, 0x8DC0, 0xB747, 0x8DC1, 0xB748, 0xB6E8, 0xB749, 0x8DC2, 0xB74A, 0x8DC3, 0xB74B, 0x8DC4,
- 0xB74C, 0xB6E9, 0xB74D, 0x8DC5, 0xB74E, 0x8DC6, 0xB74F, 0x8DC7, 0xB750, 0x8DC8, 0xB751, 0x8DC9, 0xB752, 0x8DCA, 0xB753, 0x8DCB,
- 0xB754, 0xB6EA, 0xB755, 0xB6EB, 0xB756, 0x8DCC, 0xB757, 0x8DCD, 0xB758, 0x8DCE, 0xB759, 0x8DCF, 0xB75A, 0x8DD0, 0xB75B, 0x8DD1,
- 0xB75C, 0x8DD2, 0xB75D, 0x8DD3, 0xB75E, 0x8DD4, 0xB75F, 0x8DD5, 0xB760, 0xB6EC, 0xB761, 0x8DD6, 0xB762, 0x8DD7, 0xB763, 0x8DD8,
- 0xB764, 0xB6ED, 0xB765, 0x8DD9, 0xB766, 0x8DDA, 0xB767, 0x8DDB, 0xB768, 0xB6EE, 0xB769, 0x8DDC, 0xB76A, 0x8DDD, 0xB76B, 0x8DDE,
- 0xB76C, 0x8DDF, 0xB76D, 0x8DE0, 0xB76E, 0x8DE1, 0xB76F, 0x8DE2, 0xB770, 0xB6EF, 0xB771, 0xB6F0, 0xB772, 0x8DE3, 0xB773, 0xB6F1,
- 0xB774, 0x8DE4, 0xB775, 0xB6F2, 0xB776, 0x8DE5, 0xB777, 0x8DE6, 0xB778, 0x8DE7, 0xB779, 0x8DE8, 0xB77A, 0x8DE9, 0xB77B, 0x8DEA,
- 0xB77C, 0xB6F3, 0xB77D, 0xB6F4, 0xB77E, 0x8DEB, 0xB77F, 0x8DEC, 0xB780, 0xB6F5, 0xB781, 0x8DED, 0xB782, 0x8DEE, 0xB783, 0x8DEF,
- 0xB784, 0xB6F6, 0xB785, 0x8DF0, 0xB786, 0x8DF1, 0xB787, 0x8DF2, 0xB788, 0x8DF3, 0xB789, 0x8DF4, 0xB78A, 0x8DF5, 0xB78B, 0x8DF6,
- 0xB78C, 0xB6F7, 0xB78D, 0xB6F8, 0xB78E, 0x8DF7, 0xB78F, 0xB6F9, 0xB790, 0xB6FA, 0xB791, 0xB6FB, 0xB792, 0xB6FC, 0xB793, 0x8DF8,
- 0xB794, 0x8DF9, 0xB795, 0x8DFA, 0xB796, 0xB6FD, 0xB797, 0xB6FE, 0xB798, 0xB7A1, 0xB799, 0xB7A2, 0xB79A, 0x8DFB, 0xB79B, 0x8DFC,
- 0xB79C, 0xB7A3, 0xB79D, 0x8DFD, 0xB79E, 0x8DFE, 0xB79F, 0x8E41, 0xB7A0, 0xB7A4, 0xB7A1, 0x8E42, 0xB7A2, 0x8E43, 0xB7A3, 0x8E44,
- 0xB7A4, 0x8E45, 0xB7A5, 0x8E46, 0xB7A6, 0x8E47, 0xB7A7, 0x8E48, 0xB7A8, 0xB7A5, 0xB7A9, 0xB7A6, 0xB7AA, 0x8E49, 0xB7AB, 0xB7A7,
- 0xB7AC, 0xB7A8, 0xB7AD, 0xB7A9, 0xB7AE, 0x8E4A, 0xB7AF, 0x8E4B, 0xB7B0, 0x8E4C, 0xB7B1, 0x8E4D, 0xB7B2, 0x8E4E, 0xB7B3, 0x8E4F,
- 0xB7B4, 0xB7AA, 0xB7B5, 0xB7AB, 0xB7B6, 0x8E50, 0xB7B7, 0x8E51, 0xB7B8, 0xB7AC, 0xB7B9, 0x8E52, 0xB7BA, 0x8E53, 0xB7BB, 0x8E54,
- 0xB7BC, 0x8E55, 0xB7BD, 0x8E56, 0xB7BE, 0x8E57, 0xB7BF, 0x8E58, 0xB7C0, 0x8E59, 0xB7C1, 0x8E5A, 0xB7C2, 0x8E61, 0xB7C3, 0x8E62,
- 0xB7C4, 0x8E63, 0xB7C5, 0x8E64, 0xB7C6, 0x8E65, 0xB7C7, 0xB7AD, 0xB7C8, 0x8E66, 0xB7C9, 0xB7AE, 0xB7CA, 0x8E67, 0xB7CB, 0x8E68,
- 0xB7CC, 0x8E69, 0xB7CD, 0x8E6A, 0xB7CE, 0x8E6B, 0xB7CF, 0x8E6C, 0xB7D0, 0x8E6D, 0xB7D1, 0x8E6E, 0xB7D2, 0x8E6F, 0xB7D3, 0x8E70,
- 0xB7D4, 0x8E71, 0xB7D5, 0x8E72, 0xB7D6, 0x8E73, 0xB7D7, 0x8E74, 0xB7D8, 0x8E75, 0xB7D9, 0x8E76, 0xB7DA, 0x8E77, 0xB7DB, 0x8E78,
- 0xB7DC, 0x8E79, 0xB7DD, 0x8E7A, 0xB7DE, 0x8E81, 0xB7DF, 0x8E82, 0xB7E0, 0x8E83, 0xB7E1, 0x8E84, 0xB7E2, 0x8E85, 0xB7E3, 0x8E86,
- 0xB7E4, 0x8E87, 0xB7E5, 0x8E88, 0xB7E6, 0x8E89, 0xB7E7, 0x8E8A, 0xB7E8, 0x8E8B, 0xB7E9, 0x8E8C, 0xB7EA, 0x8E8D, 0xB7EB, 0x8E8E,
- 0xB7EC, 0xB7AF, 0xB7ED, 0xB7B0, 0xB7EE, 0x8E8F, 0xB7EF, 0x8E90, 0xB7F0, 0xB7B1, 0xB7F1, 0x8E91, 0xB7F2, 0x8E92, 0xB7F3, 0x8E93,
- 0xB7F4, 0xB7B2, 0xB7F5, 0x8E94, 0xB7F6, 0x8E95, 0xB7F7, 0x8E96, 0xB7F8, 0x8E97, 0xB7F9, 0x8E98, 0xB7FA, 0x8E99, 0xB7FB, 0x8E9A,
- 0xB7FC, 0xB7B3, 0xB7FD, 0xB7B4, 0xB7FE, 0x8E9B, 0xB7FF, 0xB7B5, 0xB800, 0xB7B6, 0xB801, 0xB7B7, 0xB802, 0x8E9C, 0xB803, 0x8E9D,
- 0xB804, 0x8E9E, 0xB805, 0x8E9F, 0xB806, 0x8EA0, 0xB807, 0xB7B8, 0xB808, 0xB7B9, 0xB809, 0xB7BA, 0xB80A, 0x8EA1, 0xB80B, 0x8EA2,
- 0xB80C, 0xB7BB, 0xB80D, 0x8EA3, 0xB80E, 0x8EA4, 0xB80F, 0x8EA5, 0xB810, 0xB7BC, 0xB811, 0x8EA6, 0xB812, 0x8EA7, 0xB813, 0x8EA8,
- 0xB814, 0x8EA9, 0xB815, 0x8EAA, 0xB816, 0x8EAB, 0xB817, 0x8EAC, 0xB818, 0xB7BD, 0xB819, 0xB7BE, 0xB81A, 0x8EAD, 0xB81B, 0xB7BF,
- 0xB81C, 0x8EAE, 0xB81D, 0xB7C0, 0xB81E, 0x8EAF, 0xB81F, 0x8EB0, 0xB820, 0x8EB1, 0xB821, 0x8EB2, 0xB822, 0x8EB3, 0xB823, 0x8EB4,
- 0xB824, 0xB7C1, 0xB825, 0xB7C2, 0xB826, 0x8EB5, 0xB827, 0x8EB6, 0xB828, 0xB7C3, 0xB829, 0x8EB7, 0xB82A, 0x8EB8, 0xB82B, 0x8EB9,
- 0xB82C, 0xB7C4, 0xB82D, 0x8EBA, 0xB82E, 0x8EBB, 0xB82F, 0x8EBC, 0xB830, 0x8EBD, 0xB831, 0x8EBE, 0xB832, 0x8EBF, 0xB833, 0x8EC0,
- 0xB834, 0xB7C5, 0xB835, 0xB7C6, 0xB836, 0x8EC1, 0xB837, 0xB7C7, 0xB838, 0xB7C8, 0xB839, 0xB7C9, 0xB83A, 0x8EC2, 0xB83B, 0x8EC3,
- 0xB83C, 0x8EC4, 0xB83D, 0x8EC5, 0xB83E, 0x8EC6, 0xB83F, 0x8EC7, 0xB840, 0xB7CA, 0xB841, 0x8EC8, 0xB842, 0x8EC9, 0xB843, 0x8ECA,
- 0xB844, 0xB7CB, 0xB845, 0x8ECB, 0xB846, 0x8ECC, 0xB847, 0x8ECD, 0xB848, 0x8ECE, 0xB849, 0x8ECF, 0xB84A, 0x8ED0, 0xB84B, 0x8ED1,
- 0xB84C, 0x8ED2, 0xB84D, 0x8ED3, 0xB84E, 0x8ED4, 0xB84F, 0x8ED5, 0xB850, 0x8ED6, 0xB851, 0xB7CC, 0xB852, 0x8ED7, 0xB853, 0xB7CD,
- 0xB854, 0x8ED8, 0xB855, 0x8ED9, 0xB856, 0x8EDA, 0xB857, 0x8EDB, 0xB858, 0x8EDC, 0xB859, 0x8EDD, 0xB85A, 0x8EDE, 0xB85B, 0x8EDF,
- 0xB85C, 0xB7CE, 0xB85D, 0xB7CF, 0xB85E, 0x8EE0, 0xB85F, 0x8EE1, 0xB860, 0xB7D0, 0xB861, 0x8EE2, 0xB862, 0x8EE3, 0xB863, 0x8EE4,
- 0xB864, 0xB7D1, 0xB865, 0x8EE5, 0xB866, 0x8EE6, 0xB867, 0x8EE7, 0xB868, 0x8EE8, 0xB869, 0x8EE9, 0xB86A, 0x8EEA, 0xB86B, 0x8EEB,
- 0xB86C, 0xB7D2, 0xB86D, 0xB7D3, 0xB86E, 0x8EEC, 0xB86F, 0xB7D4, 0xB870, 0x8EED, 0xB871, 0xB7D5, 0xB872, 0x8EEE, 0xB873, 0x8EEF,
- 0xB874, 0x8EF0, 0xB875, 0x8EF1, 0xB876, 0x8EF2, 0xB877, 0x8EF3, 0xB878, 0xB7D6, 0xB879, 0x8EF4, 0xB87A, 0x8EF5, 0xB87B, 0x8EF6,
- 0xB87C, 0xB7D7, 0xB87D, 0x8EF7, 0xB87E, 0x8EF8, 0xB87F, 0x8EF9, 0xB880, 0x8EFA, 0xB881, 0x8EFB, 0xB882, 0x8EFC, 0xB883, 0x8EFD,
- 0xB884, 0x8EFE, 0xB885, 0x8F41, 0xB886, 0x8F42, 0xB887, 0x8F43, 0xB888, 0x8F44, 0xB889, 0x8F45, 0xB88A, 0x8F46, 0xB88B, 0x8F47,
- 0xB88C, 0x8F48, 0xB88D, 0xB7D8, 0xB88E, 0x8F49, 0xB88F, 0x8F4A, 0xB890, 0x8F4B, 0xB891, 0x8F4C, 0xB892, 0x8F4D, 0xB893, 0x8F4E,
- 0xB894, 0x8F4F, 0xB895, 0x8F50, 0xB896, 0x8F51, 0xB897, 0x8F52, 0xB898, 0x8F53, 0xB899, 0x8F54, 0xB89A, 0x8F55, 0xB89B, 0x8F56,
- 0xB89C, 0x8F57, 0xB89D, 0x8F58, 0xB89E, 0x8F59, 0xB89F, 0x8F5A, 0xB8A0, 0x8F61, 0xB8A1, 0x8F62, 0xB8A2, 0x8F63, 0xB8A3, 0x8F64,
- 0xB8A4, 0x8F65, 0xB8A5, 0x8F66, 0xB8A6, 0x8F67, 0xB8A7, 0x8F68, 0xB8A8, 0xB7D9, 0xB8A9, 0x8F69, 0xB8AA, 0x8F6A, 0xB8AB, 0x8F6B,
- 0xB8AC, 0x8F6C, 0xB8AD, 0x8F6D, 0xB8AE, 0x8F6E, 0xB8AF, 0x8F6F, 0xB8B0, 0xB7DA, 0xB8B1, 0x8F70, 0xB8B2, 0x8F71, 0xB8B3, 0x8F72,
- 0xB8B4, 0xB7DB, 0xB8B5, 0x8F73, 0xB8B6, 0x8F74, 0xB8B7, 0x8F75, 0xB8B8, 0xB7DC, 0xB8B9, 0x8F76, 0xB8BA, 0x8F77, 0xB8BB, 0x8F78,
- 0xB8BC, 0x8F79, 0xB8BD, 0x8F7A, 0xB8BE, 0x8F81, 0xB8BF, 0x8F82, 0xB8C0, 0xB7DD, 0xB8C1, 0xB7DE, 0xB8C2, 0x8F83, 0xB8C3, 0xB7DF,
- 0xB8C4, 0x8F84, 0xB8C5, 0xB7E0, 0xB8C6, 0x8F85, 0xB8C7, 0x8F86, 0xB8C8, 0x8F87, 0xB8C9, 0x8F88, 0xB8CA, 0x8F89, 0xB8CB, 0x8F8A,
- 0xB8CC, 0xB7E1, 0xB8CD, 0x8F8B, 0xB8CE, 0x8F8C, 0xB8CF, 0x8F8D, 0xB8D0, 0xB7E2, 0xB8D1, 0x8F8E, 0xB8D2, 0x8F8F, 0xB8D3, 0x8F90,
- 0xB8D4, 0xB7E3, 0xB8D5, 0x8F91, 0xB8D6, 0x8F92, 0xB8D7, 0x8F93, 0xB8D8, 0x8F94, 0xB8D9, 0x8F95, 0xB8DA, 0x8F96, 0xB8DB, 0x8F97,
- 0xB8DC, 0x8F98, 0xB8DD, 0xB7E4, 0xB8DE, 0x8F99, 0xB8DF, 0xB7E5, 0xB8E0, 0x8F9A, 0xB8E1, 0xB7E6, 0xB8E2, 0x8F9B, 0xB8E3, 0x8F9C,
- 0xB8E4, 0x8F9D, 0xB8E5, 0x8F9E, 0xB8E6, 0x8F9F, 0xB8E7, 0x8FA0, 0xB8E8, 0xB7E7, 0xB8E9, 0xB7E8, 0xB8EA, 0x8FA1, 0xB8EB, 0x8FA2,
- 0xB8EC, 0xB7E9, 0xB8ED, 0x8FA3, 0xB8EE, 0x8FA4, 0xB8EF, 0x8FA5, 0xB8F0, 0xB7EA, 0xB8F1, 0x8FA6, 0xB8F2, 0x8FA7, 0xB8F3, 0x8FA8,
- 0xB8F4, 0x8FA9, 0xB8F5, 0x8FAA, 0xB8F6, 0x8FAB, 0xB8F7, 0x8FAC, 0xB8F8, 0xB7EB, 0xB8F9, 0xB7EC, 0xB8FA, 0x8FAD, 0xB8FB, 0xB7ED,
- 0xB8FC, 0x8FAE, 0xB8FD, 0xB7EE, 0xB8FE, 0x8FAF, 0xB8FF, 0x8FB0, 0xB900, 0x8FB1, 0xB901, 0x8FB2, 0xB902, 0x8FB3, 0xB903, 0x8FB4,
- 0xB904, 0xB7EF, 0xB905, 0x8FB5, 0xB906, 0x8FB6, 0xB907, 0x8FB7, 0xB908, 0x8FB8, 0xB909, 0x8FB9, 0xB90A, 0x8FBA, 0xB90B, 0x8FBB,
- 0xB90C, 0x8FBC, 0xB90D, 0x8FBD, 0xB90E, 0x8FBE, 0xB90F, 0x8FBF, 0xB910, 0x8FC0, 0xB911, 0x8FC1, 0xB912, 0x8FC2, 0xB913, 0x8FC3,
- 0xB914, 0x8FC4, 0xB915, 0x8FC5, 0xB916, 0x8FC6, 0xB917, 0x8FC7, 0xB918, 0xB7F0, 0xB919, 0x8FC8, 0xB91A, 0x8FC9, 0xB91B, 0x8FCA,
- 0xB91C, 0x8FCB, 0xB91D, 0x8FCC, 0xB91E, 0x8FCD, 0xB91F, 0x8FCE, 0xB920, 0xB7F1, 0xB921, 0x8FCF, 0xB922, 0x8FD0, 0xB923, 0x8FD1,
- 0xB924, 0x8FD2, 0xB925, 0x8FD3, 0xB926, 0x8FD4, 0xB927, 0x8FD5, 0xB928, 0x8FD6, 0xB929, 0x8FD7, 0xB92A, 0x8FD8, 0xB92B, 0x8FD9,
- 0xB92C, 0x8FDA, 0xB92D, 0x8FDB, 0xB92E, 0x8FDC, 0xB92F, 0x8FDD, 0xB930, 0x8FDE, 0xB931, 0x8FDF, 0xB932, 0x8FE0, 0xB933, 0x8FE1,
- 0xB934, 0x8FE2, 0xB935, 0x8FE3, 0xB936, 0x8FE4, 0xB937, 0x8FE5, 0xB938, 0x8FE6, 0xB939, 0x8FE7, 0xB93A, 0x8FE8, 0xB93B, 0x8FE9,
- 0xB93C, 0xB7F2, 0xB93D, 0xB7F3, 0xB93E, 0x8FEA, 0xB93F, 0x8FEB, 0xB940, 0xB7F4, 0xB941, 0x8FEC, 0xB942, 0x8FED, 0xB943, 0x8FEE,
- 0xB944, 0xB7F5, 0xB945, 0x8FEF, 0xB946, 0x8FF0, 0xB947, 0x8FF1, 0xB948, 0x8FF2, 0xB949, 0x8FF3, 0xB94A, 0x8FF4, 0xB94B, 0x8FF5,
- 0xB94C, 0xB7F6, 0xB94D, 0x8FF6, 0xB94E, 0x8FF7, 0xB94F, 0xB7F7, 0xB950, 0x8FF8, 0xB951, 0xB7F8, 0xB952, 0x8FF9, 0xB953, 0x8FFA,
- 0xB954, 0x8FFB, 0xB955, 0x8FFC, 0xB956, 0x8FFD, 0xB957, 0x8FFE, 0xB958, 0xB7F9, 0xB959, 0xB7FA, 0xB95A, 0x9041, 0xB95B, 0x9042,
- 0xB95C, 0xB7FB, 0xB95D, 0x9043, 0xB95E, 0x9044, 0xB95F, 0x9045, 0xB960, 0xB7FC, 0xB961, 0x9046, 0xB962, 0x9047, 0xB963, 0x9048,
- 0xB964, 0x9049, 0xB965, 0x904A, 0xB966, 0x904B, 0xB967, 0x904C, 0xB968, 0xB7FD, 0xB969, 0xB7FE, 0xB96A, 0x904D, 0xB96B, 0xB8A1,
- 0xB96C, 0x904E, 0xB96D, 0xB8A2, 0xB96E, 0x904F, 0xB96F, 0x9050, 0xB970, 0x9051, 0xB971, 0x9052, 0xB972, 0x9053, 0xB973, 0x9054,
- 0xB974, 0xB8A3, 0xB975, 0xB8A4, 0xB976, 0x9055, 0xB977, 0x9056, 0xB978, 0xB8A5, 0xB979, 0x9057, 0xB97A, 0x9058, 0xB97B, 0x9059,
- 0xB97C, 0xB8A6, 0xB97D, 0x905A, 0xB97E, 0x9061, 0xB97F, 0x9062, 0xB980, 0x9063, 0xB981, 0x9064, 0xB982, 0x9065, 0xB983, 0x9066,
- 0xB984, 0xB8A7, 0xB985, 0xB8A8, 0xB986, 0x9067, 0xB987, 0xB8A9, 0xB988, 0x9068, 0xB989, 0xB8AA, 0xB98A, 0xB8AB, 0xB98B, 0x9069,
- 0xB98C, 0x906A, 0xB98D, 0xB8AC, 0xB98E, 0xB8AD, 0xB98F, 0x906B, 0xB990, 0x906C, 0xB991, 0x906D, 0xB992, 0x906E, 0xB993, 0x906F,
- 0xB994, 0x9070, 0xB995, 0x9071, 0xB996, 0x9072, 0xB997, 0x9073, 0xB998, 0x9074, 0xB999, 0x9075, 0xB99A, 0x9076, 0xB99B, 0x9077,
- 0xB99C, 0x9078, 0xB99D, 0x9079, 0xB99E, 0x907A, 0xB99F, 0x9081, 0xB9A0, 0x9082, 0xB9A1, 0x9083, 0xB9A2, 0x9084, 0xB9A3, 0x9085,
- 0xB9A4, 0x9086, 0xB9A5, 0x9087, 0xB9A6, 0x9088, 0xB9A7, 0x9089, 0xB9A8, 0x908A, 0xB9A9, 0x908B, 0xB9AA, 0x908C, 0xB9AB, 0x908D,
- 0xB9AC, 0xB8AE, 0xB9AD, 0xB8AF, 0xB9AE, 0x908E, 0xB9AF, 0x908F, 0xB9B0, 0xB8B0, 0xB9B1, 0x9090, 0xB9B2, 0x9091, 0xB9B3, 0x9092,
- 0xB9B4, 0xB8B1, 0xB9B5, 0x9093, 0xB9B6, 0x9094, 0xB9B7, 0x9095, 0xB9B8, 0x9096, 0xB9B9, 0x9097, 0xB9BA, 0x9098, 0xB9BB, 0x9099,
- 0xB9BC, 0xB8B2, 0xB9BD, 0xB8B3, 0xB9BE, 0x909A, 0xB9BF, 0xB8B4, 0xB9C0, 0x909B, 0xB9C1, 0xB8B5, 0xB9C2, 0x909C, 0xB9C3, 0x909D,
- 0xB9C4, 0x909E, 0xB9C5, 0x909F, 0xB9C6, 0x90A0, 0xB9C7, 0x90A1, 0xB9C8, 0xB8B6, 0xB9C9, 0xB8B7, 0xB9CA, 0x90A2, 0xB9CB, 0x90A3,
- 0xB9CC, 0xB8B8, 0xB9CD, 0x90A4, 0xB9CE, 0xB8B9, 0xB9CF, 0xB8BA, 0xB9D0, 0xB8BB, 0xB9D1, 0xB8BC, 0xB9D2, 0xB8BD, 0xB9D3, 0x90A5,
- 0xB9D4, 0x90A6, 0xB9D5, 0x90A7, 0xB9D6, 0x90A8, 0xB9D7, 0x90A9, 0xB9D8, 0xB8BE, 0xB9D9, 0xB8BF, 0xB9DA, 0x90AA, 0xB9DB, 0xB8C0,
- 0xB9DC, 0x90AB, 0xB9DD, 0xB8C1, 0xB9DE, 0xB8C2, 0xB9DF, 0x90AC, 0xB9E0, 0x90AD, 0xB9E1, 0xB8C3, 0xB9E2, 0x90AE, 0xB9E3, 0xB8C4,
- 0xB9E4, 0xB8C5, 0xB9E5, 0xB8C6, 0xB9E6, 0x90AF, 0xB9E7, 0x90B0, 0xB9E8, 0xB8C7, 0xB9E9, 0x90B1, 0xB9EA, 0x90B2, 0xB9EB, 0x90B3,
- 0xB9EC, 0xB8C8, 0xB9ED, 0x90B4, 0xB9EE, 0x90B5, 0xB9EF, 0x90B6, 0xB9F0, 0x90B7, 0xB9F1, 0x90B8, 0xB9F2, 0x90B9, 0xB9F3, 0x90BA,
- 0xB9F4, 0xB8C9, 0xB9F5, 0xB8CA, 0xB9F6, 0x90BB, 0xB9F7, 0xB8CB, 0xB9F8, 0xB8CC, 0xB9F9, 0xB8CD, 0xB9FA, 0xB8CE, 0xB9FB, 0x90BC,
- 0xB9FC, 0x90BD, 0xB9FD, 0x90BE, 0xB9FE, 0x90BF, 0xB9FF, 0x90C0, 0xBA00, 0xB8CF, 0xBA01, 0xB8D0, 0xBA02, 0x90C1, 0xBA03, 0x90C2,
- 0xBA04, 0x90C3, 0xBA05, 0x90C4, 0xBA06, 0x90C5, 0xBA07, 0x90C6, 0xBA08, 0xB8D1, 0xBA09, 0x90C7, 0xBA0A, 0x90C8, 0xBA0B, 0x90C9,
- 0xBA0C, 0x90CA, 0xBA0D, 0x90CB, 0xBA0E, 0x90CC, 0xBA0F, 0x90CD, 0xBA10, 0x90CE, 0xBA11, 0x90CF, 0xBA12, 0x90D0, 0xBA13, 0x90D1,
- 0xBA14, 0x90D2, 0xBA15, 0xB8D2, 0xBA16, 0x90D3, 0xBA17, 0x90D4, 0xBA18, 0x90D5, 0xBA19, 0x90D6, 0xBA1A, 0x90D7, 0xBA1B, 0x90D8,
- 0xBA1C, 0x90D9, 0xBA1D, 0x90DA, 0xBA1E, 0x90DB, 0xBA1F, 0x90DC, 0xBA20, 0x90DD, 0xBA21, 0x90DE, 0xBA22, 0x90DF, 0xBA23, 0x90E0,
- 0xBA24, 0x90E1, 0xBA25, 0x90E2, 0xBA26, 0x90E3, 0xBA27, 0x90E4, 0xBA28, 0x90E5, 0xBA29, 0x90E6, 0xBA2A, 0x90E7, 0xBA2B, 0x90E8,
- 0xBA2C, 0x90E9, 0xBA2D, 0x90EA, 0xBA2E, 0x90EB, 0xBA2F, 0x90EC, 0xBA30, 0x90ED, 0xBA31, 0x90EE, 0xBA32, 0x90EF, 0xBA33, 0x90F0,
- 0xBA34, 0x90F1, 0xBA35, 0x90F2, 0xBA36, 0x90F3, 0xBA37, 0x90F4, 0xBA38, 0xB8D3, 0xBA39, 0xB8D4, 0xBA3A, 0x90F5, 0xBA3B, 0x90F6,
- 0xBA3C, 0xB8D5, 0xBA3D, 0x90F7, 0xBA3E, 0x90F8, 0xBA3F, 0x90F9, 0xBA40, 0xB8D6, 0xBA41, 0x90FA, 0xBA42, 0xB8D7, 0xBA43, 0x90FB,
- 0xBA44, 0x90FC, 0xBA45, 0x90FD, 0xBA46, 0x90FE, 0xBA47, 0x9141, 0xBA48, 0xB8D8, 0xBA49, 0xB8D9, 0xBA4A, 0x9142, 0xBA4B, 0xB8DA,
- 0xBA4C, 0x9143, 0xBA4D, 0xB8DB, 0xBA4E, 0xB8DC, 0xBA4F, 0x9144, 0xBA50, 0x9145, 0xBA51, 0x9146, 0xBA52, 0x9147, 0xBA53, 0xB8DD,
- 0xBA54, 0xB8DE, 0xBA55, 0xB8DF, 0xBA56, 0x9148, 0xBA57, 0x9149, 0xBA58, 0xB8E0, 0xBA59, 0x914A, 0xBA5A, 0x914B, 0xBA5B, 0x914C,
- 0xBA5C, 0xB8E1, 0xBA5D, 0x914D, 0xBA5E, 0x914E, 0xBA5F, 0x914F, 0xBA60, 0x9150, 0xBA61, 0x9151, 0xBA62, 0x9152, 0xBA63, 0x9153,
- 0xBA64, 0xB8E2, 0xBA65, 0xB8E3, 0xBA66, 0x9154, 0xBA67, 0xB8E4, 0xBA68, 0xB8E5, 0xBA69, 0xB8E6, 0xBA6A, 0x9155, 0xBA6B, 0x9156,
- 0xBA6C, 0x9157, 0xBA6D, 0x9158, 0xBA6E, 0x9159, 0xBA6F, 0x915A, 0xBA70, 0xB8E7, 0xBA71, 0xB8E8, 0xBA72, 0x9161, 0xBA73, 0x9162,
- 0xBA74, 0xB8E9, 0xBA75, 0x9163, 0xBA76, 0x9164, 0xBA77, 0x9165, 0xBA78, 0xB8EA, 0xBA79, 0x9166, 0xBA7A, 0x9167, 0xBA7B, 0x9168,
- 0xBA7C, 0x9169, 0xBA7D, 0x916A, 0xBA7E, 0x916B, 0xBA7F, 0x916C, 0xBA80, 0x916D, 0xBA81, 0x916E, 0xBA82, 0x916F, 0xBA83, 0xB8EB,
- 0xBA84, 0xB8EC, 0xBA85, 0xB8ED, 0xBA86, 0x9170, 0xBA87, 0xB8EE, 0xBA88, 0x9171, 0xBA89, 0x9172, 0xBA8A, 0x9173, 0xBA8B, 0x9174,
- 0xBA8C, 0xB8EF, 0xBA8D, 0x9175, 0xBA8E, 0x9176, 0xBA8F, 0x9177, 0xBA90, 0x9178, 0xBA91, 0x9179, 0xBA92, 0x917A, 0xBA93, 0x9181,
- 0xBA94, 0x9182, 0xBA95, 0x9183, 0xBA96, 0x9184, 0xBA97, 0x9185, 0xBA98, 0x9186, 0xBA99, 0x9187, 0xBA9A, 0x9188, 0xBA9B, 0x9189,
- 0xBA9C, 0x918A, 0xBA9D, 0x918B, 0xBA9E, 0x918C, 0xBA9F, 0x918D, 0xBAA0, 0x918E, 0xBAA1, 0x918F, 0xBAA2, 0x9190, 0xBAA3, 0x9191,
- 0xBAA4, 0x9192, 0xBAA5, 0x9193, 0xBAA6, 0x9194, 0xBAA7, 0x9195, 0xBAA8, 0xB8F0, 0xBAA9, 0xB8F1, 0xBAAA, 0x9196, 0xBAAB, 0xB8F2,
- 0xBAAC, 0xB8F3, 0xBAAD, 0x9197, 0xBAAE, 0x9198, 0xBAAF, 0x9199, 0xBAB0, 0xB8F4, 0xBAB1, 0x919A, 0xBAB2, 0xB8F5, 0xBAB3, 0x919B,
- 0xBAB4, 0x919C, 0xBAB5, 0x919D, 0xBAB6, 0x919E, 0xBAB7, 0x919F, 0xBAB8, 0xB8F6, 0xBAB9, 0xB8F7, 0xBABA, 0x91A0, 0xBABB, 0xB8F8,
- 0xBABC, 0x91A1, 0xBABD, 0xB8F9, 0xBABE, 0x91A2, 0xBABF, 0x91A3, 0xBAC0, 0x91A4, 0xBAC1, 0x91A5, 0xBAC2, 0x91A6, 0xBAC3, 0x91A7,
- 0xBAC4, 0xB8FA, 0xBAC5, 0x91A8, 0xBAC6, 0x91A9, 0xBAC7, 0x91AA, 0xBAC8, 0xB8FB, 0xBAC9, 0x91AB, 0xBACA, 0x91AC, 0xBACB, 0x91AD,
- 0xBACC, 0x91AE, 0xBACD, 0x91AF, 0xBACE, 0x91B0, 0xBACF, 0x91B1, 0xBAD0, 0x91B2, 0xBAD1, 0x91B3, 0xBAD2, 0x91B4, 0xBAD3, 0x91B5,
- 0xBAD4, 0x91B6, 0xBAD5, 0x91B7, 0xBAD6, 0x91B8, 0xBAD7, 0x91B9, 0xBAD8, 0xB8FC, 0xBAD9, 0xB8FD, 0xBADA, 0x91BA, 0xBADB, 0x91BB,
- 0xBADC, 0x91BC, 0xBADD, 0x91BD, 0xBADE, 0x91BE, 0xBADF, 0x91BF, 0xBAE0, 0x91C0, 0xBAE1, 0x91C1, 0xBAE2, 0x91C2, 0xBAE3, 0x91C3,
- 0xBAE4, 0x91C4, 0xBAE5, 0x91C5, 0xBAE6, 0x91C6, 0xBAE7, 0x91C7, 0xBAE8, 0x91C8, 0xBAE9, 0x91C9, 0xBAEA, 0x91CA, 0xBAEB, 0x91CB,
- 0xBAEC, 0x91CC, 0xBAED, 0x91CD, 0xBAEE, 0x91CE, 0xBAEF, 0x91CF, 0xBAF0, 0x91D0, 0xBAF1, 0x91D1, 0xBAF2, 0x91D2, 0xBAF3, 0x91D3,
- 0xBAF4, 0x91D4, 0xBAF5, 0x91D5, 0xBAF6, 0x91D6, 0xBAF7, 0x91D7, 0xBAF8, 0x91D8, 0xBAF9, 0x91D9, 0xBAFA, 0x91DA, 0xBAFB, 0x91DB,
- 0xBAFC, 0xB8FE, 0xBAFD, 0x91DC, 0xBAFE, 0x91DD, 0xBAFF, 0x91DE, 0xBB00, 0xB9A1, 0xBB01, 0x91DF, 0xBB02, 0x91E0, 0xBB03, 0x91E1,
- 0xBB04, 0xB9A2, 0xBB05, 0x91E2, 0xBB06, 0x91E3, 0xBB07, 0x91E4, 0xBB08, 0x91E5, 0xBB09, 0x91E6, 0xBB0A, 0x91E7, 0xBB0B, 0x91E8,
- 0xBB0C, 0x91E9, 0xBB0D, 0xB9A3, 0xBB0E, 0x91EA, 0xBB0F, 0xB9A4, 0xBB10, 0x91EB, 0xBB11, 0xB9A5, 0xBB12, 0x91EC, 0xBB13, 0x91ED,
- 0xBB14, 0x91EE, 0xBB15, 0x91EF, 0xBB16, 0x91F0, 0xBB17, 0x91F1, 0xBB18, 0xB9A6, 0xBB19, 0x91F2, 0xBB1A, 0x91F3, 0xBB1B, 0x91F4,
- 0xBB1C, 0xB9A7, 0xBB1D, 0x91F5, 0xBB1E, 0x91F6, 0xBB1F, 0x91F7, 0xBB20, 0xB9A8, 0xBB21, 0x91F8, 0xBB22, 0x91F9, 0xBB23, 0x91FA,
- 0xBB24, 0x91FB, 0xBB25, 0x91FC, 0xBB26, 0x91FD, 0xBB27, 0x91FE, 0xBB28, 0x9241, 0xBB29, 0xB9A9, 0xBB2A, 0x9242, 0xBB2B, 0xB9AA,
- 0xBB2C, 0x9243, 0xBB2D, 0x9244, 0xBB2E, 0x9245, 0xBB2F, 0x9246, 0xBB30, 0x9247, 0xBB31, 0x9248, 0xBB32, 0x9249, 0xBB33, 0x924A,
- 0xBB34, 0xB9AB, 0xBB35, 0xB9AC, 0xBB36, 0xB9AD, 0xBB37, 0x924B, 0xBB38, 0xB9AE, 0xBB39, 0x924C, 0xBB3A, 0x924D, 0xBB3B, 0xB9AF,
- 0xBB3C, 0xB9B0, 0xBB3D, 0xB9B1, 0xBB3E, 0xB9B2, 0xBB3F, 0x924E, 0xBB40, 0x924F, 0xBB41, 0x9250, 0xBB42, 0x9251, 0xBB43, 0x9252,
- 0xBB44, 0xB9B3, 0xBB45, 0xB9B4, 0xBB46, 0x9253, 0xBB47, 0xB9B5, 0xBB48, 0x9254, 0xBB49, 0xB9B6, 0xBB4A, 0x9255, 0xBB4B, 0x9256,
- 0xBB4C, 0x9257, 0xBB4D, 0xB9B7, 0xBB4E, 0x9258, 0xBB4F, 0xB9B8, 0xBB50, 0xB9B9, 0xBB51, 0x9259, 0xBB52, 0x925A, 0xBB53, 0x9261,
- 0xBB54, 0xB9BA, 0xBB55, 0x9262, 0xBB56, 0x9263, 0xBB57, 0x9264, 0xBB58, 0xB9BB, 0xBB59, 0x9265, 0xBB5A, 0x9266, 0xBB5B, 0x9267,
- 0xBB5C, 0x9268, 0xBB5D, 0x9269, 0xBB5E, 0x926A, 0xBB5F, 0x926B, 0xBB60, 0x926C, 0xBB61, 0xB9BC, 0xBB62, 0x926D, 0xBB63, 0xB9BD,
- 0xBB64, 0x926E, 0xBB65, 0x926F, 0xBB66, 0x9270, 0xBB67, 0x9271, 0xBB68, 0x9272, 0xBB69, 0x9273, 0xBB6A, 0x9274, 0xBB6B, 0x9275,
- 0xBB6C, 0xB9BE, 0xBB6D, 0x9276, 0xBB6E, 0x9277, 0xBB6F, 0x9278, 0xBB70, 0x9279, 0xBB71, 0x927A, 0xBB72, 0x9281, 0xBB73, 0x9282,
- 0xBB74, 0x9283, 0xBB75, 0x9284, 0xBB76, 0x9285, 0xBB77, 0x9286, 0xBB78, 0x9287, 0xBB79, 0x9288, 0xBB7A, 0x9289, 0xBB7B, 0x928A,
- 0xBB7C, 0x928B, 0xBB7D, 0x928C, 0xBB7E, 0x928D, 0xBB7F, 0x928E, 0xBB80, 0x928F, 0xBB81, 0x9290, 0xBB82, 0x9291, 0xBB83, 0x9292,
- 0xBB84, 0x9293, 0xBB85, 0x9294, 0xBB86, 0x9295, 0xBB87, 0x9296, 0xBB88, 0xB9BF, 0xBB89, 0x9297, 0xBB8A, 0x9298, 0xBB8B, 0x9299,
- 0xBB8C, 0xB9C0, 0xBB8D, 0x929A, 0xBB8E, 0x929B, 0xBB8F, 0x929C, 0xBB90, 0xB9C1, 0xBB91, 0x929D, 0xBB92, 0x929E, 0xBB93, 0x929F,
- 0xBB94, 0x92A0, 0xBB95, 0x92A1, 0xBB96, 0x92A2, 0xBB97, 0x92A3, 0xBB98, 0x92A4, 0xBB99, 0x92A5, 0xBB9A, 0x92A6, 0xBB9B, 0x92A7,
- 0xBB9C, 0x92A8, 0xBB9D, 0x92A9, 0xBB9E, 0x92AA, 0xBB9F, 0x92AB, 0xBBA0, 0x92AC, 0xBBA1, 0x92AD, 0xBBA2, 0x92AE, 0xBBA3, 0x92AF,
- 0xBBA4, 0xB9C2, 0xBBA5, 0x92B0, 0xBBA6, 0x92B1, 0xBBA7, 0x92B2, 0xBBA8, 0xB9C3, 0xBBA9, 0x92B3, 0xBBAA, 0x92B4, 0xBBAB, 0x92B5,
- 0xBBAC, 0xB9C4, 0xBBAD, 0x92B6, 0xBBAE, 0x92B7, 0xBBAF, 0x92B8, 0xBBB0, 0x92B9, 0xBBB1, 0x92BA, 0xBBB2, 0x92BB, 0xBBB3, 0x92BC,
- 0xBBB4, 0xB9C5, 0xBBB5, 0x92BD, 0xBBB6, 0x92BE, 0xBBB7, 0xB9C6, 0xBBB8, 0x92BF, 0xBBB9, 0x92C0, 0xBBBA, 0x92C1, 0xBBBB, 0x92C2,
- 0xBBBC, 0x92C3, 0xBBBD, 0x92C4, 0xBBBE, 0x92C5, 0xBBBF, 0x92C6, 0xBBC0, 0xB9C7, 0xBBC1, 0x92C7, 0xBBC2, 0x92C8, 0xBBC3, 0x92C9,
- 0xBBC4, 0xB9C8, 0xBBC5, 0x92CA, 0xBBC6, 0x92CB, 0xBBC7, 0x92CC, 0xBBC8, 0xB9C9, 0xBBC9, 0x92CD, 0xBBCA, 0x92CE, 0xBBCB, 0x92CF,
- 0xBBCC, 0x92D0, 0xBBCD, 0x92D1, 0xBBCE, 0x92D2, 0xBBCF, 0x92D3, 0xBBD0, 0xB9CA, 0xBBD1, 0x92D4, 0xBBD2, 0x92D5, 0xBBD3, 0xB9CB,
- 0xBBD4, 0x92D6, 0xBBD5, 0x92D7, 0xBBD6, 0x92D8, 0xBBD7, 0x92D9, 0xBBD8, 0x92DA, 0xBBD9, 0x92DB, 0xBBDA, 0x92DC, 0xBBDB, 0x92DD,
- 0xBBDC, 0x92DE, 0xBBDD, 0x92DF, 0xBBDE, 0x92E0, 0xBBDF, 0x92E1, 0xBBE0, 0x92E2, 0xBBE1, 0x92E3, 0xBBE2, 0x92E4, 0xBBE3, 0x92E5,
- 0xBBE4, 0x92E6, 0xBBE5, 0x92E7, 0xBBE6, 0x92E8, 0xBBE7, 0x92E9, 0xBBE8, 0x92EA, 0xBBE9, 0x92EB, 0xBBEA, 0x92EC, 0xBBEB, 0x92ED,
- 0xBBEC, 0x92EE, 0xBBED, 0x92EF, 0xBBEE, 0x92F0, 0xBBEF, 0x92F1, 0xBBF0, 0x92F2, 0xBBF1, 0x92F3, 0xBBF2, 0x92F4, 0xBBF3, 0x92F5,
- 0xBBF4, 0x92F6, 0xBBF5, 0x92F7, 0xBBF6, 0x92F8, 0xBBF7, 0x92F9, 0xBBF8, 0xB9CC, 0xBBF9, 0xB9CD, 0xBBFA, 0x92FA, 0xBBFB, 0x92FB,
- 0xBBFC, 0xB9CE, 0xBBFD, 0x92FC, 0xBBFE, 0x92FD, 0xBBFF, 0xB9CF, 0xBC00, 0xB9D0, 0xBC01, 0x92FE, 0xBC02, 0xB9D1, 0xBC03, 0x9341,
- 0xBC04, 0x9342, 0xBC05, 0x9343, 0xBC06, 0x9344, 0xBC07, 0x9345, 0xBC08, 0xB9D2, 0xBC09, 0xB9D3, 0xBC0A, 0x9346, 0xBC0B, 0xB9D4,
- 0xBC0C, 0xB9D5, 0xBC0D, 0xB9D6, 0xBC0E, 0x9347, 0xBC0F, 0xB9D7, 0xBC10, 0x9348, 0xBC11, 0xB9D8, 0xBC12, 0x9349, 0xBC13, 0x934A,
- 0xBC14, 0xB9D9, 0xBC15, 0xB9DA, 0xBC16, 0xB9DB, 0xBC17, 0xB9DC, 0xBC18, 0xB9DD, 0xBC19, 0x934B, 0xBC1A, 0x934C, 0xBC1B, 0xB9DE,
- 0xBC1C, 0xB9DF, 0xBC1D, 0xB9E0, 0xBC1E, 0xB9E1, 0xBC1F, 0xB9E2, 0xBC20, 0x934D, 0xBC21, 0x934E, 0xBC22, 0x934F, 0xBC23, 0x9350,
- 0xBC24, 0xB9E3, 0xBC25, 0xB9E4, 0xBC26, 0x9351, 0xBC27, 0xB9E5, 0xBC28, 0x9352, 0xBC29, 0xB9E6, 0xBC2A, 0x9353, 0xBC2B, 0x9354,
- 0xBC2C, 0x9355, 0xBC2D, 0xB9E7, 0xBC2E, 0x9356, 0xBC2F, 0x9357, 0xBC30, 0xB9E8, 0xBC31, 0xB9E9, 0xBC32, 0x9358, 0xBC33, 0x9359,
- 0xBC34, 0xB9EA, 0xBC35, 0x935A, 0xBC36, 0x9361, 0xBC37, 0x9362, 0xBC38, 0xB9EB, 0xBC39, 0x9363, 0xBC3A, 0x9364, 0xBC3B, 0x9365,
- 0xBC3C, 0x9366, 0xBC3D, 0x9367, 0xBC3E, 0x9368, 0xBC3F, 0x9369, 0xBC40, 0xB9EC, 0xBC41, 0xB9ED, 0xBC42, 0x936A, 0xBC43, 0xB9EE,
- 0xBC44, 0xB9EF, 0xBC45, 0xB9F0, 0xBC46, 0x936B, 0xBC47, 0x936C, 0xBC48, 0x936D, 0xBC49, 0xB9F1, 0xBC4A, 0x936E, 0xBC4B, 0x936F,
- 0xBC4C, 0xB9F2, 0xBC4D, 0xB9F3, 0xBC4E, 0x9370, 0xBC4F, 0x9371, 0xBC50, 0xB9F4, 0xBC51, 0x9372, 0xBC52, 0x9373, 0xBC53, 0x9374,
- 0xBC54, 0x9375, 0xBC55, 0x9376, 0xBC56, 0x9377, 0xBC57, 0x9378, 0xBC58, 0x9379, 0xBC59, 0x937A, 0xBC5A, 0x9381, 0xBC5B, 0x9382,
- 0xBC5C, 0x9383, 0xBC5D, 0xB9F5, 0xBC5E, 0x9384, 0xBC5F, 0x9385, 0xBC60, 0x9386, 0xBC61, 0x9387, 0xBC62, 0x9388, 0xBC63, 0x9389,
- 0xBC64, 0x938A, 0xBC65, 0x938B, 0xBC66, 0x938C, 0xBC67, 0x938D, 0xBC68, 0x938E, 0xBC69, 0x938F, 0xBC6A, 0x9390, 0xBC6B, 0x9391,
- 0xBC6C, 0x9392, 0xBC6D, 0x9393, 0xBC6E, 0x9394, 0xBC6F, 0x9395, 0xBC70, 0x9396, 0xBC71, 0x9397, 0xBC72, 0x9398, 0xBC73, 0x9399,
- 0xBC74, 0x939A, 0xBC75, 0x939B, 0xBC76, 0x939C, 0xBC77, 0x939D, 0xBC78, 0x939E, 0xBC79, 0x939F, 0xBC7A, 0x93A0, 0xBC7B, 0x93A1,
- 0xBC7C, 0x93A2, 0xBC7D, 0x93A3, 0xBC7E, 0x93A4, 0xBC7F, 0x93A5, 0xBC80, 0x93A6, 0xBC81, 0x93A7, 0xBC82, 0x93A8, 0xBC83, 0x93A9,
- 0xBC84, 0xB9F6, 0xBC85, 0xB9F7, 0xBC86, 0x93AA, 0xBC87, 0x93AB, 0xBC88, 0xB9F8, 0xBC89, 0x93AC, 0xBC8A, 0x93AD, 0xBC8B, 0xB9F9,
- 0xBC8C, 0xB9FA, 0xBC8D, 0x93AE, 0xBC8E, 0xB9FB, 0xBC8F, 0x93AF, 0xBC90, 0x93B0, 0xBC91, 0x93B1, 0xBC92, 0x93B2, 0xBC93, 0x93B3,
- 0xBC94, 0xB9FC, 0xBC95, 0xB9FD, 0xBC96, 0x93B4, 0xBC97, 0xB9FE, 0xBC98, 0x93B5, 0xBC99, 0xBAA1, 0xBC9A, 0xBAA2, 0xBC9B, 0x93B6,
- 0xBC9C, 0x93B7, 0xBC9D, 0x93B8, 0xBC9E, 0x93B9, 0xBC9F, 0x93BA, 0xBCA0, 0xBAA3, 0xBCA1, 0xBAA4, 0xBCA2, 0x93BB, 0xBCA3, 0x93BC,
- 0xBCA4, 0xBAA5, 0xBCA5, 0x93BD, 0xBCA6, 0x93BE, 0xBCA7, 0xBAA6, 0xBCA8, 0xBAA7, 0xBCA9, 0x93BF, 0xBCAA, 0x93C0, 0xBCAB, 0x93C1,
- 0xBCAC, 0x93C2, 0xBCAD, 0x93C3, 0xBCAE, 0x93C4, 0xBCAF, 0x93C5, 0xBCB0, 0xBAA8, 0xBCB1, 0xBAA9, 0xBCB2, 0x93C6, 0xBCB3, 0xBAAA,
- 0xBCB4, 0xBAAB, 0xBCB5, 0xBAAC, 0xBCB6, 0x93C7, 0xBCB7, 0x93C8, 0xBCB8, 0x93C9, 0xBCB9, 0x93CA, 0xBCBA, 0x93CB, 0xBCBB, 0x93CC,
- 0xBCBC, 0xBAAD, 0xBCBD, 0xBAAE, 0xBCBE, 0x93CD, 0xBCBF, 0x93CE, 0xBCC0, 0xBAAF, 0xBCC1, 0x93CF, 0xBCC2, 0x93D0, 0xBCC3, 0x93D1,
- 0xBCC4, 0xBAB0, 0xBCC5, 0x93D2, 0xBCC6, 0x93D3, 0xBCC7, 0x93D4, 0xBCC8, 0x93D5, 0xBCC9, 0x93D6, 0xBCCA, 0x93D7, 0xBCCB, 0x93D8,
- 0xBCCC, 0x93D9, 0xBCCD, 0xBAB1, 0xBCCE, 0x93DA, 0xBCCF, 0xBAB2, 0xBCD0, 0xBAB3, 0xBCD1, 0xBAB4, 0xBCD2, 0x93DB, 0xBCD3, 0x93DC,
- 0xBCD4, 0x93DD, 0xBCD5, 0xBAB5, 0xBCD6, 0x93DE, 0xBCD7, 0x93DF, 0xBCD8, 0xBAB6, 0xBCD9, 0x93E0, 0xBCDA, 0x93E1, 0xBCDB, 0x93E2,
- 0xBCDC, 0xBAB7, 0xBCDD, 0x93E3, 0xBCDE, 0x93E4, 0xBCDF, 0x93E5, 0xBCE0, 0x93E6, 0xBCE1, 0x93E7, 0xBCE2, 0x93E8, 0xBCE3, 0x93E9,
- 0xBCE4, 0x93EA, 0xBCE5, 0x93EB, 0xBCE6, 0x93EC, 0xBCE7, 0x93ED, 0xBCE8, 0x93EE, 0xBCE9, 0x93EF, 0xBCEA, 0x93F0, 0xBCEB, 0x93F1,
- 0xBCEC, 0x93F2, 0xBCED, 0x93F3, 0xBCEE, 0x93F4, 0xBCEF, 0x93F5, 0xBCF0, 0x93F6, 0xBCF1, 0x93F7, 0xBCF2, 0x93F8, 0xBCF3, 0x93F9,
- 0xBCF4, 0xBAB8, 0xBCF5, 0xBAB9, 0xBCF6, 0xBABA, 0xBCF7, 0x93FA, 0xBCF8, 0xBABB, 0xBCF9, 0x93FB, 0xBCFA, 0x93FC, 0xBCFB, 0x93FD,
- 0xBCFC, 0xBABC, 0xBCFD, 0x93FE, 0xBCFE, 0x9441, 0xBCFF, 0x9442, 0xBD00, 0x9443, 0xBD01, 0x9444, 0xBD02, 0x9445, 0xBD03, 0x9446,
- 0xBD04, 0xBABD, 0xBD05, 0xBABE, 0xBD06, 0x9447, 0xBD07, 0xBABF, 0xBD08, 0x9448, 0xBD09, 0xBAC0, 0xBD0A, 0x9449, 0xBD0B, 0x944A,
- 0xBD0C, 0x944B, 0xBD0D, 0x944C, 0xBD0E, 0x944D, 0xBD0F, 0x944E, 0xBD10, 0xBAC1, 0xBD11, 0x944F, 0xBD12, 0x9450, 0xBD13, 0x9451,
- 0xBD14, 0xBAC2, 0xBD15, 0x9452, 0xBD16, 0x9453, 0xBD17, 0x9454, 0xBD18, 0x9455, 0xBD19, 0x9456, 0xBD1A, 0x9457, 0xBD1B, 0x9458,
- 0xBD1C, 0x9459, 0xBD1D, 0x945A, 0xBD1E, 0x9461, 0xBD1F, 0x9462, 0xBD20, 0x9463, 0xBD21, 0x9464, 0xBD22, 0x9465, 0xBD23, 0x9466,
- 0xBD24, 0xBAC3, 0xBD25, 0x9467, 0xBD26, 0x9468, 0xBD27, 0x9469, 0xBD28, 0x946A, 0xBD29, 0x946B, 0xBD2A, 0x946C, 0xBD2B, 0x946D,
- 0xBD2C, 0xBAC4, 0xBD2D, 0x946E, 0xBD2E, 0x946F, 0xBD2F, 0x9470, 0xBD30, 0x9471, 0xBD31, 0x9472, 0xBD32, 0x9473, 0xBD33, 0x9474,
- 0xBD34, 0x9475, 0xBD35, 0x9476, 0xBD36, 0x9477, 0xBD37, 0x9478, 0xBD38, 0x9479, 0xBD39, 0x947A, 0xBD3A, 0x9481, 0xBD3B, 0x9482,
- 0xBD3C, 0x9483, 0xBD3D, 0x9484, 0xBD3E, 0x9485, 0xBD3F, 0x9486, 0xBD40, 0xBAC5, 0xBD41, 0x9487, 0xBD42, 0x9488, 0xBD43, 0x9489,
- 0xBD44, 0x948A, 0xBD45, 0x948B, 0xBD46, 0x948C, 0xBD47, 0x948D, 0xBD48, 0xBAC6, 0xBD49, 0xBAC7, 0xBD4A, 0x948E, 0xBD4B, 0x948F,
- 0xBD4C, 0xBAC8, 0xBD4D, 0x9490, 0xBD4E, 0x9491, 0xBD4F, 0x9492, 0xBD50, 0xBAC9, 0xBD51, 0x9493, 0xBD52, 0x9494, 0xBD53, 0x9495,
- 0xBD54, 0x9496, 0xBD55, 0x9497, 0xBD56, 0x9498, 0xBD57, 0x9499, 0xBD58, 0xBACA, 0xBD59, 0xBACB, 0xBD5A, 0x949A, 0xBD5B, 0x949B,
- 0xBD5C, 0x949C, 0xBD5D, 0x949D, 0xBD5E, 0x949E, 0xBD5F, 0x949F, 0xBD60, 0x94A0, 0xBD61, 0x94A1, 0xBD62, 0x94A2, 0xBD63, 0x94A3,
- 0xBD64, 0xBACC, 0xBD65, 0x94A4, 0xBD66, 0x94A5, 0xBD67, 0x94A6, 0xBD68, 0xBACD, 0xBD69, 0x94A7, 0xBD6A, 0x94A8, 0xBD6B, 0x94A9,
- 0xBD6C, 0x94AA, 0xBD6D, 0x94AB, 0xBD6E, 0x94AC, 0xBD6F, 0x94AD, 0xBD70, 0x94AE, 0xBD71, 0x94AF, 0xBD72, 0x94B0, 0xBD73, 0x94B1,
- 0xBD74, 0x94B2, 0xBD75, 0x94B3, 0xBD76, 0x94B4, 0xBD77, 0x94B5, 0xBD78, 0x94B6, 0xBD79, 0x94B7, 0xBD7A, 0x94B8, 0xBD7B, 0x94B9,
- 0xBD7C, 0x94BA, 0xBD7D, 0x94BB, 0xBD7E, 0x94BC, 0xBD7F, 0x94BD, 0xBD80, 0xBACE, 0xBD81, 0xBACF, 0xBD82, 0x94BE, 0xBD83, 0x94BF,
- 0xBD84, 0xBAD0, 0xBD85, 0x94C0, 0xBD86, 0x94C1, 0xBD87, 0xBAD1, 0xBD88, 0xBAD2, 0xBD89, 0xBAD3, 0xBD8A, 0xBAD4, 0xBD8B, 0x94C2,
- 0xBD8C, 0x94C3, 0xBD8D, 0x94C4, 0xBD8E, 0x94C5, 0xBD8F, 0x94C6, 0xBD90, 0xBAD5, 0xBD91, 0xBAD6, 0xBD92, 0x94C7, 0xBD93, 0xBAD7,
- 0xBD94, 0x94C8, 0xBD95, 0xBAD8, 0xBD96, 0x94C9, 0xBD97, 0x94CA, 0xBD98, 0x94CB, 0xBD99, 0xBAD9, 0xBD9A, 0xBADA, 0xBD9B, 0x94CC,
- 0xBD9C, 0xBADB, 0xBD9D, 0x94CD, 0xBD9E, 0x94CE, 0xBD9F, 0x94CF, 0xBDA0, 0x94D0, 0xBDA1, 0x94D1, 0xBDA2, 0x94D2, 0xBDA3, 0x94D3,
- 0xBDA4, 0xBADC, 0xBDA5, 0x94D4, 0xBDA6, 0x94D5, 0xBDA7, 0x94D6, 0xBDA8, 0x94D7, 0xBDA9, 0x94D8, 0xBDAA, 0x94D9, 0xBDAB, 0x94DA,
- 0xBDAC, 0x94DB, 0xBDAD, 0x94DC, 0xBDAE, 0x94DD, 0xBDAF, 0x94DE, 0xBDB0, 0xBADD, 0xBDB1, 0x94DF, 0xBDB2, 0x94E0, 0xBDB3, 0x94E1,
- 0xBDB4, 0x94E2, 0xBDB5, 0x94E3, 0xBDB6, 0x94E4, 0xBDB7, 0x94E5, 0xBDB8, 0xBADE, 0xBDB9, 0x94E6, 0xBDBA, 0x94E7, 0xBDBB, 0x94E8,
- 0xBDBC, 0x94E9, 0xBDBD, 0x94EA, 0xBDBE, 0x94EB, 0xBDBF, 0x94EC, 0xBDC0, 0x94ED, 0xBDC1, 0x94EE, 0xBDC2, 0x94EF, 0xBDC3, 0x94F0,
- 0xBDC4, 0x94F1, 0xBDC5, 0x94F2, 0xBDC6, 0x94F3, 0xBDC7, 0x94F4, 0xBDC8, 0x94F5, 0xBDC9, 0x94F6, 0xBDCA, 0x94F7, 0xBDCB, 0x94F8,
- 0xBDCC, 0x94F9, 0xBDCD, 0x94FA, 0xBDCE, 0x94FB, 0xBDCF, 0x94FC, 0xBDD0, 0x94FD, 0xBDD1, 0x94FE, 0xBDD2, 0x9541, 0xBDD3, 0x9542,
- 0xBDD4, 0xBADF, 0xBDD5, 0xBAE0, 0xBDD6, 0x9543, 0xBDD7, 0x9544, 0xBDD8, 0xBAE1, 0xBDD9, 0x9545, 0xBDDA, 0x9546, 0xBDDB, 0x9547,
- 0xBDDC, 0xBAE2, 0xBDDD, 0x9548, 0xBDDE, 0x9549, 0xBDDF, 0x954A, 0xBDE0, 0x954B, 0xBDE1, 0x954C, 0xBDE2, 0x954D, 0xBDE3, 0x954E,
- 0xBDE4, 0x954F, 0xBDE5, 0x9550, 0xBDE6, 0x9551, 0xBDE7, 0x9552, 0xBDE8, 0x9553, 0xBDE9, 0xBAE3, 0xBDEA, 0x9554, 0xBDEB, 0x9555,
- 0xBDEC, 0x9556, 0xBDED, 0x9557, 0xBDEE, 0x9558, 0xBDEF, 0x9559, 0xBDF0, 0xBAE4, 0xBDF1, 0x955A, 0xBDF2, 0x9561, 0xBDF3, 0x9562,
- 0xBDF4, 0xBAE5, 0xBDF5, 0x9563, 0xBDF6, 0x9564, 0xBDF7, 0x9565, 0xBDF8, 0xBAE6, 0xBDF9, 0x9566, 0xBDFA, 0x9567, 0xBDFB, 0x9568,
- 0xBDFC, 0x9569, 0xBDFD, 0x956A, 0xBDFE, 0x956B, 0xBDFF, 0x956C, 0xBE00, 0xBAE7, 0xBE01, 0x956D, 0xBE02, 0x956E, 0xBE03, 0xBAE8,
- 0xBE04, 0x956F, 0xBE05, 0xBAE9, 0xBE06, 0x9570, 0xBE07, 0x9571, 0xBE08, 0x9572, 0xBE09, 0x9573, 0xBE0A, 0x9574, 0xBE0B, 0x9575,
- 0xBE0C, 0xBAEA, 0xBE0D, 0xBAEB, 0xBE0E, 0x9576, 0xBE0F, 0x9577, 0xBE10, 0xBAEC, 0xBE11, 0x9578, 0xBE12, 0x9579, 0xBE13, 0x957A,
- 0xBE14, 0xBAED, 0xBE15, 0x9581, 0xBE16, 0x9582, 0xBE17, 0x9583, 0xBE18, 0x9584, 0xBE19, 0x9585, 0xBE1A, 0x9586, 0xBE1B, 0x9587,
- 0xBE1C, 0xBAEE, 0xBE1D, 0xBAEF, 0xBE1E, 0x9588, 0xBE1F, 0xBAF0, 0xBE20, 0x9589, 0xBE21, 0x958A, 0xBE22, 0x958B, 0xBE23, 0x958C,
- 0xBE24, 0x958D, 0xBE25, 0x958E, 0xBE26, 0x958F, 0xBE27, 0x9590, 0xBE28, 0x9591, 0xBE29, 0x9592, 0xBE2A, 0x9593, 0xBE2B, 0x9594,
- 0xBE2C, 0x9595, 0xBE2D, 0x9596, 0xBE2E, 0x9597, 0xBE2F, 0x9598, 0xBE30, 0x9599, 0xBE31, 0x959A, 0xBE32, 0x959B, 0xBE33, 0x959C,
- 0xBE34, 0x959D, 0xBE35, 0x959E, 0xBE36, 0x959F, 0xBE37, 0x95A0, 0xBE38, 0x95A1, 0xBE39, 0x95A2, 0xBE3A, 0x95A3, 0xBE3B, 0x95A4,
- 0xBE3C, 0x95A5, 0xBE3D, 0x95A6, 0xBE3E, 0x95A7, 0xBE3F, 0x95A8, 0xBE40, 0x95A9, 0xBE41, 0x95AA, 0xBE42, 0x95AB, 0xBE43, 0x95AC,
- 0xBE44, 0xBAF1, 0xBE45, 0xBAF2, 0xBE46, 0x95AD, 0xBE47, 0x95AE, 0xBE48, 0xBAF3, 0xBE49, 0x95AF, 0xBE4A, 0x95B0, 0xBE4B, 0x95B1,
- 0xBE4C, 0xBAF4, 0xBE4D, 0x95B2, 0xBE4E, 0xBAF5, 0xBE4F, 0x95B3, 0xBE50, 0x95B4, 0xBE51, 0x95B5, 0xBE52, 0x95B6, 0xBE53, 0x95B7,
- 0xBE54, 0xBAF6, 0xBE55, 0xBAF7, 0xBE56, 0x95B8, 0xBE57, 0xBAF8, 0xBE58, 0x95B9, 0xBE59, 0xBAF9, 0xBE5A, 0xBAFA, 0xBE5B, 0xBAFB,
- 0xBE5C, 0x95BA, 0xBE5D, 0x95BB, 0xBE5E, 0x95BC, 0xBE5F, 0x95BD, 0xBE60, 0xBAFC, 0xBE61, 0xBAFD, 0xBE62, 0x95BE, 0xBE63, 0x95BF,
- 0xBE64, 0xBAFE, 0xBE65, 0x95C0, 0xBE66, 0x95C1, 0xBE67, 0x95C2, 0xBE68, 0xBBA1, 0xBE69, 0x95C3, 0xBE6A, 0xBBA2, 0xBE6B, 0x95C4,
- 0xBE6C, 0x95C5, 0xBE6D, 0x95C6, 0xBE6E, 0x95C7, 0xBE6F, 0x95C8, 0xBE70, 0xBBA3, 0xBE71, 0xBBA4, 0xBE72, 0x95C9, 0xBE73, 0xBBA5,
- 0xBE74, 0xBBA6, 0xBE75, 0xBBA7, 0xBE76, 0x95CA, 0xBE77, 0x95CB, 0xBE78, 0x95CC, 0xBE79, 0x95CD, 0xBE7A, 0x95CE, 0xBE7B, 0xBBA8,
- 0xBE7C, 0xBBA9, 0xBE7D, 0xBBAA, 0xBE7E, 0x95CF, 0xBE7F, 0x95D0, 0xBE80, 0xBBAB, 0xBE81, 0x95D1, 0xBE82, 0x95D2, 0xBE83, 0x95D3,
- 0xBE84, 0xBBAC, 0xBE85, 0x95D4, 0xBE86, 0x95D5, 0xBE87, 0x95D6, 0xBE88, 0x95D7, 0xBE89, 0x95D8, 0xBE8A, 0x95D9, 0xBE8B, 0x95DA,
- 0xBE8C, 0xBBAD, 0xBE8D, 0xBBAE, 0xBE8E, 0x95DB, 0xBE8F, 0xBBAF, 0xBE90, 0xBBB0, 0xBE91, 0xBBB1, 0xBE92, 0x95DC, 0xBE93, 0x95DD,
- 0xBE94, 0x95DE, 0xBE95, 0x95DF, 0xBE96, 0x95E0, 0xBE97, 0x95E1, 0xBE98, 0xBBB2, 0xBE99, 0xBBB3, 0xBE9A, 0x95E2, 0xBE9B, 0x95E3,
- 0xBE9C, 0x95E4, 0xBE9D, 0x95E5, 0xBE9E, 0x95E6, 0xBE9F, 0x95E7, 0xBEA0, 0x95E8, 0xBEA1, 0x95E9, 0xBEA2, 0x95EA, 0xBEA3, 0x95EB,
- 0xBEA4, 0x95EC, 0xBEA5, 0x95ED, 0xBEA6, 0x95EE, 0xBEA7, 0x95EF, 0xBEA8, 0xBBB4, 0xBEA9, 0x95F0, 0xBEAA, 0x95F1, 0xBEAB, 0x95F2,
- 0xBEAC, 0x95F3, 0xBEAD, 0x95F4, 0xBEAE, 0x95F5, 0xBEAF, 0x95F6, 0xBEB0, 0x95F7, 0xBEB1, 0x95F8, 0xBEB2, 0x95F9, 0xBEB3, 0x95FA,
- 0xBEB4, 0x95FB, 0xBEB5, 0x95FC, 0xBEB6, 0x95FD, 0xBEB7, 0x95FE, 0xBEB8, 0x9641, 0xBEB9, 0x9642, 0xBEBA, 0x9643, 0xBEBB, 0x9644,
- 0xBEBC, 0x9645, 0xBEBD, 0x9646, 0xBEBE, 0x9647, 0xBEBF, 0x9648, 0xBEC0, 0x9649, 0xBEC1, 0x964A, 0xBEC2, 0x964B, 0xBEC3, 0x964C,
- 0xBEC4, 0x964D, 0xBEC5, 0x964E, 0xBEC6, 0x964F, 0xBEC7, 0x9650, 0xBEC8, 0x9651, 0xBEC9, 0x9652, 0xBECA, 0x9653, 0xBECB, 0x9654,
- 0xBECC, 0x9655, 0xBECD, 0x9656, 0xBECE, 0x9657, 0xBECF, 0x9658, 0xBED0, 0xBBB5, 0xBED1, 0xBBB6, 0xBED2, 0x9659, 0xBED3, 0x965A,
- 0xBED4, 0xBBB7, 0xBED5, 0x9661, 0xBED6, 0x9662, 0xBED7, 0xBBB8, 0xBED8, 0xBBB9, 0xBED9, 0x9663, 0xBEDA, 0x9664, 0xBEDB, 0x9665,
- 0xBEDC, 0x9666, 0xBEDD, 0x9667, 0xBEDE, 0x9668, 0xBEDF, 0x9669, 0xBEE0, 0xBBBA, 0xBEE1, 0x966A, 0xBEE2, 0x966B, 0xBEE3, 0xBBBB,
- 0xBEE4, 0xBBBC, 0xBEE5, 0xBBBD, 0xBEE6, 0x966C, 0xBEE7, 0x966D, 0xBEE8, 0x966E, 0xBEE9, 0x966F, 0xBEEA, 0x9670, 0xBEEB, 0x9671,
- 0xBEEC, 0xBBBE, 0xBEED, 0x9672, 0xBEEE, 0x9673, 0xBEEF, 0x9674, 0xBEF0, 0x9675, 0xBEF1, 0x9676, 0xBEF2, 0x9677, 0xBEF3, 0x9678,
- 0xBEF4, 0x9679, 0xBEF5, 0x967A, 0xBEF6, 0x9681, 0xBEF7, 0x9682, 0xBEF8, 0x9683, 0xBEF9, 0x9684, 0xBEFA, 0x9685, 0xBEFB, 0x9686,
- 0xBEFC, 0x9687, 0xBEFD, 0x9688, 0xBEFE, 0x9689, 0xBEFF, 0x968A, 0xBF00, 0x968B, 0xBF01, 0xBBBF, 0xBF02, 0x968C, 0xBF03, 0x968D,
- 0xBF04, 0x968E, 0xBF05, 0x968F, 0xBF06, 0x9690, 0xBF07, 0x9691, 0xBF08, 0xBBC0, 0xBF09, 0xBBC1, 0xBF0A, 0x9692, 0xBF0B, 0x9693,
- 0xBF0C, 0x9694, 0xBF0D, 0x9695, 0xBF0E, 0x9696, 0xBF0F, 0x9697, 0xBF10, 0x9698, 0xBF11, 0x9699, 0xBF12, 0x969A, 0xBF13, 0x969B,
- 0xBF14, 0x969C, 0xBF15, 0x969D, 0xBF16, 0x969E, 0xBF17, 0x969F, 0xBF18, 0xBBC2, 0xBF19, 0xBBC3, 0xBF1A, 0x96A0, 0xBF1B, 0xBBC4,
- 0xBF1C, 0xBBC5, 0xBF1D, 0xBBC6, 0xBF1E, 0x96A1, 0xBF1F, 0x96A2, 0xBF20, 0x96A3, 0xBF21, 0x96A4, 0xBF22, 0x96A5, 0xBF23, 0x96A6,
- 0xBF24, 0x96A7, 0xBF25, 0x96A8, 0xBF26, 0x96A9, 0xBF27, 0x96AA, 0xBF28, 0x96AB, 0xBF29, 0x96AC, 0xBF2A, 0x96AD, 0xBF2B, 0x96AE,
- 0xBF2C, 0x96AF, 0xBF2D, 0x96B0, 0xBF2E, 0x96B1, 0xBF2F, 0x96B2, 0xBF30, 0x96B3, 0xBF31, 0x96B4, 0xBF32, 0x96B5, 0xBF33, 0x96B6,
- 0xBF34, 0x96B7, 0xBF35, 0x96B8, 0xBF36, 0x96B9, 0xBF37, 0x96BA, 0xBF38, 0x96BB, 0xBF39, 0x96BC, 0xBF3A, 0x96BD, 0xBF3B, 0x96BE,
- 0xBF3C, 0x96BF, 0xBF3D, 0x96C0, 0xBF3E, 0x96C1, 0xBF3F, 0x96C2, 0xBF40, 0xBBC7, 0xBF41, 0xBBC8, 0xBF42, 0x96C3, 0xBF43, 0x96C4,
- 0xBF44, 0xBBC9, 0xBF45, 0x96C5, 0xBF46, 0x96C6, 0xBF47, 0x96C7, 0xBF48, 0xBBCA, 0xBF49, 0x96C8, 0xBF4A, 0x96C9, 0xBF4B, 0x96CA,
- 0xBF4C, 0x96CB, 0xBF4D, 0x96CC, 0xBF4E, 0x96CD, 0xBF4F, 0x96CE, 0xBF50, 0xBBCB, 0xBF51, 0xBBCC, 0xBF52, 0x96CF, 0xBF53, 0x96D0,
- 0xBF54, 0x96D1, 0xBF55, 0xBBCD, 0xBF56, 0x96D2, 0xBF57, 0x96D3, 0xBF58, 0x96D4, 0xBF59, 0x96D5, 0xBF5A, 0x96D6, 0xBF5B, 0x96D7,
- 0xBF5C, 0x96D8, 0xBF5D, 0x96D9, 0xBF5E, 0x96DA, 0xBF5F, 0x96DB, 0xBF60, 0x96DC, 0xBF61, 0x96DD, 0xBF62, 0x96DE, 0xBF63, 0x96DF,
- 0xBF64, 0x96E0, 0xBF65, 0x96E1, 0xBF66, 0x96E2, 0xBF67, 0x96E3, 0xBF68, 0x96E4, 0xBF69, 0x96E5, 0xBF6A, 0x96E6, 0xBF6B, 0x96E7,
- 0xBF6C, 0x96E8, 0xBF6D, 0x96E9, 0xBF6E, 0x96EA, 0xBF6F, 0x96EB, 0xBF70, 0x96EC, 0xBF71, 0x96ED, 0xBF72, 0x96EE, 0xBF73, 0x96EF,
- 0xBF74, 0x96F0, 0xBF75, 0x96F1, 0xBF76, 0x96F2, 0xBF77, 0x96F3, 0xBF78, 0x96F4, 0xBF79, 0x96F5, 0xBF7A, 0x96F6, 0xBF7B, 0x96F7,
- 0xBF7C, 0x96F8, 0xBF7D, 0x96F9, 0xBF7E, 0x96FA, 0xBF7F, 0x96FB, 0xBF80, 0x96FC, 0xBF81, 0x96FD, 0xBF82, 0x96FE, 0xBF83, 0x9741,
- 0xBF84, 0x9742, 0xBF85, 0x9743, 0xBF86, 0x9744, 0xBF87, 0x9745, 0xBF88, 0x9746, 0xBF89, 0x9747, 0xBF8A, 0x9748, 0xBF8B, 0x9749,
- 0xBF8C, 0x974A, 0xBF8D, 0x974B, 0xBF8E, 0x974C, 0xBF8F, 0x974D, 0xBF90, 0x974E, 0xBF91, 0x974F, 0xBF92, 0x9750, 0xBF93, 0x9751,
- 0xBF94, 0xBBCE, 0xBF95, 0x9752, 0xBF96, 0x9753, 0xBF97, 0x9754, 0xBF98, 0x9755, 0xBF99, 0x9756, 0xBF9A, 0x9757, 0xBF9B, 0x9758,
- 0xBF9C, 0x9759, 0xBF9D, 0x975A, 0xBF9E, 0x9761, 0xBF9F, 0x9762, 0xBFA0, 0x9763, 0xBFA1, 0x9764, 0xBFA2, 0x9765, 0xBFA3, 0x9766,
- 0xBFA4, 0x9767, 0xBFA5, 0x9768, 0xBFA6, 0x9769, 0xBFA7, 0x976A, 0xBFA8, 0x976B, 0xBFA9, 0x976C, 0xBFAA, 0x976D, 0xBFAB, 0x976E,
- 0xBFAC, 0x976F, 0xBFAD, 0x9770, 0xBFAE, 0x9771, 0xBFAF, 0x9772, 0xBFB0, 0xBBCF, 0xBFB1, 0x9773, 0xBFB2, 0x9774, 0xBFB3, 0x9775,
- 0xBFB4, 0x9776, 0xBFB5, 0x9777, 0xBFB6, 0x9778, 0xBFB7, 0x9779, 0xBFB8, 0x977A, 0xBFB9, 0x9781, 0xBFBA, 0x9782, 0xBFBB, 0x9783,
- 0xBFBC, 0x9784, 0xBFBD, 0x9785, 0xBFBE, 0x9786, 0xBFBF, 0x9787, 0xBFC0, 0x9788, 0xBFC1, 0x9789, 0xBFC2, 0x978A, 0xBFC3, 0x978B,
- 0xBFC4, 0x978C, 0xBFC5, 0xBBD0, 0xBFC6, 0x978D, 0xBFC7, 0x978E, 0xBFC8, 0x978F, 0xBFC9, 0x9790, 0xBFCA, 0x9791, 0xBFCB, 0x9792,
- 0xBFCC, 0xBBD1, 0xBFCD, 0xBBD2, 0xBFCE, 0x9793, 0xBFCF, 0x9794, 0xBFD0, 0xBBD3, 0xBFD1, 0x9795, 0xBFD2, 0x9796, 0xBFD3, 0x9797,
- 0xBFD4, 0xBBD4, 0xBFD5, 0x9798, 0xBFD6, 0x9799, 0xBFD7, 0x979A, 0xBFD8, 0x979B, 0xBFD9, 0x979C, 0xBFDA, 0x979D, 0xBFDB, 0x979E,
- 0xBFDC, 0xBBD5, 0xBFDD, 0x979F, 0xBFDE, 0x97A0, 0xBFDF, 0xBBD6, 0xBFE0, 0x97A1, 0xBFE1, 0xBBD7, 0xBFE2, 0x97A2, 0xBFE3, 0x97A3,
- 0xBFE4, 0x97A4, 0xBFE5, 0x97A5, 0xBFE6, 0x97A6, 0xBFE7, 0x97A7, 0xBFE8, 0x97A8, 0xBFE9, 0x97A9, 0xBFEA, 0x97AA, 0xBFEB, 0x97AB,
- 0xBFEC, 0x97AC, 0xBFED, 0x97AD, 0xBFEE, 0x97AE, 0xBFEF, 0x97AF, 0xBFF0, 0x97B0, 0xBFF1, 0x97B1, 0xBFF2, 0x97B2, 0xBFF3, 0x97B3,
- 0xBFF4, 0x97B4, 0xBFF5, 0x97B5, 0xBFF6, 0x97B6, 0xBFF7, 0x97B7, 0xBFF8, 0x97B8, 0xBFF9, 0x97B9, 0xBFFA, 0x97BA, 0xBFFB, 0x97BB,
- 0xBFFC, 0x97BC, 0xBFFD, 0x97BD, 0xBFFE, 0x97BE, 0xBFFF, 0x97BF, 0xC000, 0x97C0, 0xC001, 0x97C1, 0xC002, 0x97C2, 0xC003, 0x97C3,
- 0xC004, 0x97C4, 0xC005, 0x97C5, 0xC006, 0x97C6, 0xC007, 0x97C7, 0xC008, 0x97C8, 0xC009, 0x97C9, 0xC00A, 0x97CA, 0xC00B, 0x97CB,
- 0xC00C, 0x97CC, 0xC00D, 0x97CD, 0xC00E, 0x97CE, 0xC00F, 0x97CF, 0xC010, 0x97D0, 0xC011, 0x97D1, 0xC012, 0x97D2, 0xC013, 0x97D3,
- 0xC014, 0x97D4, 0xC015, 0x97D5, 0xC016, 0x97D6, 0xC017, 0x97D7, 0xC018, 0x97D8, 0xC019, 0x97D9, 0xC01A, 0x97DA, 0xC01B, 0x97DB,
- 0xC01C, 0x97DC, 0xC01D, 0x97DD, 0xC01E, 0x97DE, 0xC01F, 0x97DF, 0xC020, 0x97E0, 0xC021, 0x97E1, 0xC022, 0x97E2, 0xC023, 0x97E3,
- 0xC024, 0x97E4, 0xC025, 0x97E5, 0xC026, 0x97E6, 0xC027, 0x97E7, 0xC028, 0x97E8, 0xC029, 0x97E9, 0xC02A, 0x97EA, 0xC02B, 0x97EB,
- 0xC02C, 0x97EC, 0xC02D, 0x97ED, 0xC02E, 0x97EE, 0xC02F, 0x97EF, 0xC030, 0x97F0, 0xC031, 0x97F1, 0xC032, 0x97F2, 0xC033, 0x97F3,
- 0xC034, 0x97F4, 0xC035, 0x97F5, 0xC036, 0x97F6, 0xC037, 0x97F7, 0xC038, 0x97F8, 0xC039, 0x97F9, 0xC03A, 0x97FA, 0xC03B, 0x97FB,
- 0xC03C, 0xBBD8, 0xC03D, 0x97FC, 0xC03E, 0x97FD, 0xC03F, 0x97FE, 0xC040, 0x9841, 0xC041, 0x9842, 0xC042, 0x9843, 0xC043, 0x9844,
- 0xC044, 0x9845, 0xC045, 0x9846, 0xC046, 0x9847, 0xC047, 0x9848, 0xC048, 0x9849, 0xC049, 0x984A, 0xC04A, 0x984B, 0xC04B, 0x984C,
- 0xC04C, 0x984D, 0xC04D, 0x984E, 0xC04E, 0x984F, 0xC04F, 0x9850, 0xC050, 0x9851, 0xC051, 0xBBD9, 0xC052, 0x9852, 0xC053, 0x9853,
- 0xC054, 0x9854, 0xC055, 0x9855, 0xC056, 0x9856, 0xC057, 0x9857, 0xC058, 0xBBDA, 0xC059, 0x9858, 0xC05A, 0x9859, 0xC05B, 0x985A,
- 0xC05C, 0xBBDB, 0xC05D, 0x9861, 0xC05E, 0x9862, 0xC05F, 0x9863, 0xC060, 0xBBDC, 0xC061, 0x9864, 0xC062, 0x9865, 0xC063, 0x9866,
- 0xC064, 0x9867, 0xC065, 0x9868, 0xC066, 0x9869, 0xC067, 0x986A, 0xC068, 0xBBDD, 0xC069, 0xBBDE, 0xC06A, 0x986B, 0xC06B, 0x986C,
- 0xC06C, 0x986D, 0xC06D, 0x986E, 0xC06E, 0x986F, 0xC06F, 0x9870, 0xC070, 0x9871, 0xC071, 0x9872, 0xC072, 0x9873, 0xC073, 0x9874,
- 0xC074, 0x9875, 0xC075, 0x9876, 0xC076, 0x9877, 0xC077, 0x9878, 0xC078, 0x9879, 0xC079, 0x987A, 0xC07A, 0x9881, 0xC07B, 0x9882,
- 0xC07C, 0x9883, 0xC07D, 0x9884, 0xC07E, 0x9885, 0xC07F, 0x9886, 0xC080, 0x9887, 0xC081, 0x9888, 0xC082, 0x9889, 0xC083, 0x988A,
- 0xC084, 0x988B, 0xC085, 0x988C, 0xC086, 0x988D, 0xC087, 0x988E, 0xC088, 0x988F, 0xC089, 0x9890, 0xC08A, 0x9891, 0xC08B, 0x9892,
- 0xC08C, 0x9893, 0xC08D, 0x9894, 0xC08E, 0x9895, 0xC08F, 0x9896, 0xC090, 0xBBDF, 0xC091, 0xBBE0, 0xC092, 0x9897, 0xC093, 0x9898,
- 0xC094, 0xBBE1, 0xC095, 0x9899, 0xC096, 0x989A, 0xC097, 0x989B, 0xC098, 0xBBE2, 0xC099, 0x989C, 0xC09A, 0x989D, 0xC09B, 0x989E,
- 0xC09C, 0x989F, 0xC09D, 0x98A0, 0xC09E, 0x98A1, 0xC09F, 0x98A2, 0xC0A0, 0xBBE3, 0xC0A1, 0xBBE4, 0xC0A2, 0x98A3, 0xC0A3, 0xBBE5,
- 0xC0A4, 0x98A4, 0xC0A5, 0xBBE6, 0xC0A6, 0x98A5, 0xC0A7, 0x98A6, 0xC0A8, 0x98A7, 0xC0A9, 0x98A8, 0xC0AA, 0x98A9, 0xC0AB, 0x98AA,
- 0xC0AC, 0xBBE7, 0xC0AD, 0xBBE8, 0xC0AE, 0x98AB, 0xC0AF, 0xBBE9, 0xC0B0, 0xBBEA, 0xC0B1, 0x98AC, 0xC0B2, 0x98AD, 0xC0B3, 0xBBEB,
- 0xC0B4, 0xBBEC, 0xC0B5, 0xBBED, 0xC0B6, 0xBBEE, 0xC0B7, 0x98AE, 0xC0B8, 0x98AF, 0xC0B9, 0x98B0, 0xC0BA, 0x98B1, 0xC0BB, 0x98B2,
- 0xC0BC, 0xBBEF, 0xC0BD, 0xBBF0, 0xC0BE, 0x98B3, 0xC0BF, 0xBBF1, 0xC0C0, 0xBBF2, 0xC0C1, 0xBBF3, 0xC0C2, 0x98B4, 0xC0C3, 0x98B5,
- 0xC0C4, 0x98B6, 0xC0C5, 0xBBF4, 0xC0C6, 0x98B7, 0xC0C7, 0x98B8, 0xC0C8, 0xBBF5, 0xC0C9, 0xBBF6, 0xC0CA, 0x98B9, 0xC0CB, 0x98BA,
- 0xC0CC, 0xBBF7, 0xC0CD, 0x98BB, 0xC0CE, 0x98BC, 0xC0CF, 0x98BD, 0xC0D0, 0xBBF8, 0xC0D1, 0x98BE, 0xC0D2, 0x98BF, 0xC0D3, 0x98C0,
- 0xC0D4, 0x98C1, 0xC0D5, 0x98C2, 0xC0D6, 0x98C3, 0xC0D7, 0x98C4, 0xC0D8, 0xBBF9, 0xC0D9, 0xBBFA, 0xC0DA, 0x98C5, 0xC0DB, 0xBBFB,
- 0xC0DC, 0xBBFC, 0xC0DD, 0xBBFD, 0xC0DE, 0x98C6, 0xC0DF, 0x98C7, 0xC0E0, 0x98C8, 0xC0E1, 0x98C9, 0xC0E2, 0x98CA, 0xC0E3, 0x98CB,
- 0xC0E4, 0xBBFE, 0xC0E5, 0xBCA1, 0xC0E6, 0x98CC, 0xC0E7, 0x98CD, 0xC0E8, 0xBCA2, 0xC0E9, 0x98CE, 0xC0EA, 0x98CF, 0xC0EB, 0x98D0,
- 0xC0EC, 0xBCA3, 0xC0ED, 0x98D1, 0xC0EE, 0x98D2, 0xC0EF, 0x98D3, 0xC0F0, 0x98D4, 0xC0F1, 0x98D5, 0xC0F2, 0x98D6, 0xC0F3, 0x98D7,
- 0xC0F4, 0xBCA4, 0xC0F5, 0xBCA5, 0xC0F6, 0x98D8, 0xC0F7, 0xBCA6, 0xC0F8, 0x98D9, 0xC0F9, 0xBCA7, 0xC0FA, 0x98DA, 0xC0FB, 0x98DB,
- 0xC0FC, 0x98DC, 0xC0FD, 0x98DD, 0xC0FE, 0x98DE, 0xC0FF, 0x98DF, 0xC100, 0xBCA8, 0xC101, 0x98E0, 0xC102, 0x98E1, 0xC103, 0x98E2,
- 0xC104, 0xBCA9, 0xC105, 0x98E3, 0xC106, 0x98E4, 0xC107, 0x98E5, 0xC108, 0xBCAA, 0xC109, 0x98E6, 0xC10A, 0x98E7, 0xC10B, 0x98E8,
- 0xC10C, 0x98E9, 0xC10D, 0x98EA, 0xC10E, 0x98EB, 0xC10F, 0x98EC, 0xC110, 0xBCAB, 0xC111, 0x98ED, 0xC112, 0x98EE, 0xC113, 0x98EF,
- 0xC114, 0x98F0, 0xC115, 0xBCAC, 0xC116, 0x98F1, 0xC117, 0x98F2, 0xC118, 0x98F3, 0xC119, 0x98F4, 0xC11A, 0x98F5, 0xC11B, 0x98F6,
- 0xC11C, 0xBCAD, 0xC11D, 0xBCAE, 0xC11E, 0xBCAF, 0xC11F, 0xBCB0, 0xC120, 0xBCB1, 0xC121, 0x98F7, 0xC122, 0x98F8, 0xC123, 0xBCB2,
- 0xC124, 0xBCB3, 0xC125, 0x98F9, 0xC126, 0xBCB4, 0xC127, 0xBCB5, 0xC128, 0x98FA, 0xC129, 0x98FB, 0xC12A, 0x98FC, 0xC12B, 0x98FD,
- 0xC12C, 0xBCB6, 0xC12D, 0xBCB7, 0xC12E, 0x98FE, 0xC12F, 0xBCB8, 0xC130, 0xBCB9, 0xC131, 0xBCBA, 0xC132, 0x9941, 0xC133, 0x9942,
- 0xC134, 0x9943, 0xC135, 0x9944, 0xC136, 0xBCBB, 0xC137, 0x9945, 0xC138, 0xBCBC, 0xC139, 0xBCBD, 0xC13A, 0x9946, 0xC13B, 0x9947,
- 0xC13C, 0xBCBE, 0xC13D, 0x9948, 0xC13E, 0x9949, 0xC13F, 0x994A, 0xC140, 0xBCBF, 0xC141, 0x994B, 0xC142, 0x994C, 0xC143, 0x994D,
- 0xC144, 0x994E, 0xC145, 0x994F, 0xC146, 0x9950, 0xC147, 0x9951, 0xC148, 0xBCC0, 0xC149, 0xBCC1, 0xC14A, 0x9952, 0xC14B, 0xBCC2,
- 0xC14C, 0xBCC3, 0xC14D, 0xBCC4, 0xC14E, 0x9953, 0xC14F, 0x9954, 0xC150, 0x9955, 0xC151, 0x9956, 0xC152, 0x9957, 0xC153, 0x9958,
- 0xC154, 0xBCC5, 0xC155, 0xBCC6, 0xC156, 0x9959, 0xC157, 0x995A, 0xC158, 0xBCC7, 0xC159, 0x9961, 0xC15A, 0x9962, 0xC15B, 0x9963,
- 0xC15C, 0xBCC8, 0xC15D, 0x9964, 0xC15E, 0x9965, 0xC15F, 0x9966, 0xC160, 0x9967, 0xC161, 0x9968, 0xC162, 0x9969, 0xC163, 0x996A,
- 0xC164, 0xBCC9, 0xC165, 0xBCCA, 0xC166, 0x996B, 0xC167, 0xBCCB, 0xC168, 0xBCCC, 0xC169, 0xBCCD, 0xC16A, 0x996C, 0xC16B, 0x996D,
- 0xC16C, 0x996E, 0xC16D, 0x996F, 0xC16E, 0x9970, 0xC16F, 0x9971, 0xC170, 0xBCCE, 0xC171, 0x9972, 0xC172, 0x9973, 0xC173, 0x9974,
- 0xC174, 0xBCCF, 0xC175, 0x9975, 0xC176, 0x9976, 0xC177, 0x9977, 0xC178, 0xBCD0, 0xC179, 0x9978, 0xC17A, 0x9979, 0xC17B, 0x997A,
- 0xC17C, 0x9981, 0xC17D, 0x9982, 0xC17E, 0x9983, 0xC17F, 0x9984, 0xC180, 0x9985, 0xC181, 0x9986, 0xC182, 0x9987, 0xC183, 0x9988,
- 0xC184, 0x9989, 0xC185, 0xBCD1, 0xC186, 0x998A, 0xC187, 0x998B, 0xC188, 0x998C, 0xC189, 0x998D, 0xC18A, 0x998E, 0xC18B, 0x998F,
- 0xC18C, 0xBCD2, 0xC18D, 0xBCD3, 0xC18E, 0xBCD4, 0xC18F, 0x9990, 0xC190, 0xBCD5, 0xC191, 0x9991, 0xC192, 0x9992, 0xC193, 0x9993,
- 0xC194, 0xBCD6, 0xC195, 0x9994, 0xC196, 0xBCD7, 0xC197, 0x9995, 0xC198, 0x9996, 0xC199, 0x9997, 0xC19A, 0x9998, 0xC19B, 0x9999,
- 0xC19C, 0xBCD8, 0xC19D, 0xBCD9, 0xC19E, 0x999A, 0xC19F, 0xBCDA, 0xC1A0, 0x999B, 0xC1A1, 0xBCDB, 0xC1A2, 0x999C, 0xC1A3, 0x999D,
- 0xC1A4, 0x999E, 0xC1A5, 0xBCDC, 0xC1A6, 0x999F, 0xC1A7, 0x99A0, 0xC1A8, 0xBCDD, 0xC1A9, 0xBCDE, 0xC1AA, 0x99A1, 0xC1AB, 0x99A2,
- 0xC1AC, 0xBCDF, 0xC1AD, 0x99A3, 0xC1AE, 0x99A4, 0xC1AF, 0x99A5, 0xC1B0, 0xBCE0, 0xC1B1, 0x99A6, 0xC1B2, 0x99A7, 0xC1B3, 0x99A8,
- 0xC1B4, 0x99A9, 0xC1B5, 0x99AA, 0xC1B6, 0x99AB, 0xC1B7, 0x99AC, 0xC1B8, 0x99AD, 0xC1B9, 0x99AE, 0xC1BA, 0x99AF, 0xC1BB, 0x99B0,
- 0xC1BC, 0x99B1, 0xC1BD, 0xBCE1, 0xC1BE, 0x99B2, 0xC1BF, 0x99B3, 0xC1C0, 0x99B4, 0xC1C1, 0x99B5, 0xC1C2, 0x99B6, 0xC1C3, 0x99B7,
- 0xC1C4, 0xBCE2, 0xC1C5, 0x99B8, 0xC1C6, 0x99B9, 0xC1C7, 0x99BA, 0xC1C8, 0xBCE3, 0xC1C9, 0x99BB, 0xC1CA, 0x99BC, 0xC1CB, 0x99BD,
- 0xC1CC, 0xBCE4, 0xC1CD, 0x99BE, 0xC1CE, 0x99BF, 0xC1CF, 0x99C0, 0xC1D0, 0x99C1, 0xC1D1, 0x99C2, 0xC1D2, 0x99C3, 0xC1D3, 0x99C4,
- 0xC1D4, 0xBCE5, 0xC1D5, 0x99C5, 0xC1D6, 0x99C6, 0xC1D7, 0xBCE6, 0xC1D8, 0xBCE7, 0xC1D9, 0x99C7, 0xC1DA, 0x99C8, 0xC1DB, 0x99C9,
- 0xC1DC, 0x99CA, 0xC1DD, 0x99CB, 0xC1DE, 0x99CC, 0xC1DF, 0x99CD, 0xC1E0, 0xBCE8, 0xC1E1, 0x99CE, 0xC1E2, 0x99CF, 0xC1E3, 0x99D0,
- 0xC1E4, 0xBCE9, 0xC1E5, 0x99D1, 0xC1E6, 0x99D2, 0xC1E7, 0x99D3, 0xC1E8, 0xBCEA, 0xC1E9, 0x99D4, 0xC1EA, 0x99D5, 0xC1EB, 0x99D6,
- 0xC1EC, 0x99D7, 0xC1ED, 0x99D8, 0xC1EE, 0x99D9, 0xC1EF, 0x99DA, 0xC1F0, 0xBCEB, 0xC1F1, 0xBCEC, 0xC1F2, 0x99DB, 0xC1F3, 0xBCED,
- 0xC1F4, 0x99DC, 0xC1F5, 0x99DD, 0xC1F6, 0x99DE, 0xC1F7, 0x99DF, 0xC1F8, 0x99E0, 0xC1F9, 0x99E1, 0xC1FA, 0x99E2, 0xC1FB, 0x99E3,
- 0xC1FC, 0xBCEE, 0xC1FD, 0xBCEF, 0xC1FE, 0x99E4, 0xC1FF, 0x99E5, 0xC200, 0xBCF0, 0xC201, 0x99E6, 0xC202, 0x99E7, 0xC203, 0x99E8,
- 0xC204, 0xBCF1, 0xC205, 0x99E9, 0xC206, 0x99EA, 0xC207, 0x99EB, 0xC208, 0x99EC, 0xC209, 0x99ED, 0xC20A, 0x99EE, 0xC20B, 0x99EF,
- 0xC20C, 0xBCF2, 0xC20D, 0xBCF3, 0xC20E, 0x99F0, 0xC20F, 0xBCF4, 0xC210, 0x99F1, 0xC211, 0xBCF5, 0xC212, 0x99F2, 0xC213, 0x99F3,
- 0xC214, 0x99F4, 0xC215, 0x99F5, 0xC216, 0x99F6, 0xC217, 0x99F7, 0xC218, 0xBCF6, 0xC219, 0xBCF7, 0xC21A, 0x99F8, 0xC21B, 0x99F9,
- 0xC21C, 0xBCF8, 0xC21D, 0x99FA, 0xC21E, 0x99FB, 0xC21F, 0xBCF9, 0xC220, 0xBCFA, 0xC221, 0x99FC, 0xC222, 0x99FD, 0xC223, 0x99FE,
- 0xC224, 0x9A41, 0xC225, 0x9A42, 0xC226, 0x9A43, 0xC227, 0x9A44, 0xC228, 0xBCFB, 0xC229, 0xBCFC, 0xC22A, 0x9A45, 0xC22B, 0xBCFD,
- 0xC22C, 0x9A46, 0xC22D, 0xBCFE, 0xC22E, 0x9A47, 0xC22F, 0xBDA1, 0xC230, 0x9A48, 0xC231, 0xBDA2, 0xC232, 0xBDA3, 0xC233, 0x9A49,
- 0xC234, 0xBDA4, 0xC235, 0x9A4A, 0xC236, 0x9A4B, 0xC237, 0x9A4C, 0xC238, 0x9A4D, 0xC239, 0x9A4E, 0xC23A, 0x9A4F, 0xC23B, 0x9A50,
- 0xC23C, 0x9A51, 0xC23D, 0x9A52, 0xC23E, 0x9A53, 0xC23F, 0x9A54, 0xC240, 0x9A55, 0xC241, 0x9A56, 0xC242, 0x9A57, 0xC243, 0x9A58,
- 0xC244, 0x9A59, 0xC245, 0x9A5A, 0xC246, 0x9A61, 0xC247, 0x9A62, 0xC248, 0xBDA5, 0xC249, 0x9A63, 0xC24A, 0x9A64, 0xC24B, 0x9A65,
- 0xC24C, 0x9A66, 0xC24D, 0x9A67, 0xC24E, 0x9A68, 0xC24F, 0x9A69, 0xC250, 0xBDA6, 0xC251, 0xBDA7, 0xC252, 0x9A6A, 0xC253, 0x9A6B,
- 0xC254, 0xBDA8, 0xC255, 0x9A6C, 0xC256, 0x9A6D, 0xC257, 0x9A6E, 0xC258, 0xBDA9, 0xC259, 0x9A6F, 0xC25A, 0x9A70, 0xC25B, 0x9A71,
- 0xC25C, 0x9A72, 0xC25D, 0x9A73, 0xC25E, 0x9A74, 0xC25F, 0x9A75, 0xC260, 0xBDAA, 0xC261, 0x9A76, 0xC262, 0x9A77, 0xC263, 0x9A78,
- 0xC264, 0x9A79, 0xC265, 0xBDAB, 0xC266, 0x9A7A, 0xC267, 0x9A81, 0xC268, 0x9A82, 0xC269, 0x9A83, 0xC26A, 0x9A84, 0xC26B, 0x9A85,
- 0xC26C, 0xBDAC, 0xC26D, 0xBDAD, 0xC26E, 0x9A86, 0xC26F, 0x9A87, 0xC270, 0xBDAE, 0xC271, 0x9A88, 0xC272, 0x9A89, 0xC273, 0x9A8A,
- 0xC274, 0xBDAF, 0xC275, 0x9A8B, 0xC276, 0x9A8C, 0xC277, 0x9A8D, 0xC278, 0x9A8E, 0xC279, 0x9A8F, 0xC27A, 0x9A90, 0xC27B, 0x9A91,
- 0xC27C, 0xBDB0, 0xC27D, 0xBDB1, 0xC27E, 0x9A92, 0xC27F, 0xBDB2, 0xC280, 0x9A93, 0xC281, 0xBDB3, 0xC282, 0x9A94, 0xC283, 0x9A95,
- 0xC284, 0x9A96, 0xC285, 0x9A97, 0xC286, 0x9A98, 0xC287, 0x9A99, 0xC288, 0xBDB4, 0xC289, 0xBDB5, 0xC28A, 0x9A9A, 0xC28B, 0x9A9B,
- 0xC28C, 0x9A9C, 0xC28D, 0x9A9D, 0xC28E, 0x9A9E, 0xC28F, 0x9A9F, 0xC290, 0xBDB6, 0xC291, 0x9AA0, 0xC292, 0x9AA1, 0xC293, 0x9AA2,
- 0xC294, 0x9AA3, 0xC295, 0x9AA4, 0xC296, 0x9AA5, 0xC297, 0x9AA6, 0xC298, 0xBDB7, 0xC299, 0x9AA7, 0xC29A, 0x9AA8, 0xC29B, 0xBDB8,
- 0xC29C, 0x9AA9, 0xC29D, 0xBDB9, 0xC29E, 0x9AAA, 0xC29F, 0x9AAB, 0xC2A0, 0x9AAC, 0xC2A1, 0x9AAD, 0xC2A2, 0x9AAE, 0xC2A3, 0x9AAF,
- 0xC2A4, 0xBDBA, 0xC2A5, 0xBDBB, 0xC2A6, 0x9AB0, 0xC2A7, 0x9AB1, 0xC2A8, 0xBDBC, 0xC2A9, 0x9AB2, 0xC2AA, 0x9AB3, 0xC2AB, 0x9AB4,
- 0xC2AC, 0xBDBD, 0xC2AD, 0xBDBE, 0xC2AE, 0x9AB5, 0xC2AF, 0x9AB6, 0xC2B0, 0x9AB7, 0xC2B1, 0x9AB8, 0xC2B2, 0x9AB9, 0xC2B3, 0x9ABA,
- 0xC2B4, 0xBDBF, 0xC2B5, 0xBDC0, 0xC2B6, 0x9ABB, 0xC2B7, 0xBDC1, 0xC2B8, 0x9ABC, 0xC2B9, 0xBDC2, 0xC2BA, 0x9ABD, 0xC2BB, 0x9ABE,
- 0xC2BC, 0x9ABF, 0xC2BD, 0x9AC0, 0xC2BE, 0x9AC1, 0xC2BF, 0x9AC2, 0xC2C0, 0x9AC3, 0xC2C1, 0x9AC4, 0xC2C2, 0x9AC5, 0xC2C3, 0x9AC6,
- 0xC2C4, 0x9AC7, 0xC2C5, 0x9AC8, 0xC2C6, 0x9AC9, 0xC2C7, 0x9ACA, 0xC2C8, 0x9ACB, 0xC2C9, 0x9ACC, 0xC2CA, 0x9ACD, 0xC2CB, 0x9ACE,
- 0xC2CC, 0x9ACF, 0xC2CD, 0x9AD0, 0xC2CE, 0x9AD1, 0xC2CF, 0x9AD2, 0xC2D0, 0x9AD3, 0xC2D1, 0x9AD4, 0xC2D2, 0x9AD5, 0xC2D3, 0x9AD6,
- 0xC2D4, 0x9AD7, 0xC2D5, 0x9AD8, 0xC2D6, 0x9AD9, 0xC2D7, 0x9ADA, 0xC2D8, 0x9ADB, 0xC2D9, 0x9ADC, 0xC2DA, 0x9ADD, 0xC2DB, 0x9ADE,
- 0xC2DC, 0xBDC3, 0xC2DD, 0xBDC4, 0xC2DE, 0x9ADF, 0xC2DF, 0x9AE0, 0xC2E0, 0xBDC5, 0xC2E1, 0x9AE1, 0xC2E2, 0x9AE2, 0xC2E3, 0xBDC6,
- 0xC2E4, 0xBDC7, 0xC2E5, 0x9AE3, 0xC2E6, 0x9AE4, 0xC2E7, 0x9AE5, 0xC2E8, 0x9AE6, 0xC2E9, 0x9AE7, 0xC2EA, 0x9AE8, 0xC2EB, 0xBDC8,
- 0xC2EC, 0xBDC9, 0xC2ED, 0xBDCA, 0xC2EE, 0x9AE9, 0xC2EF, 0xBDCB, 0xC2F0, 0x9AEA, 0xC2F1, 0xBDCC, 0xC2F2, 0x9AEB, 0xC2F3, 0x9AEC,
- 0xC2F4, 0x9AED, 0xC2F5, 0x9AEE, 0xC2F6, 0xBDCD, 0xC2F7, 0x9AEF, 0xC2F8, 0xBDCE, 0xC2F9, 0xBDCF, 0xC2FA, 0x9AF0, 0xC2FB, 0xBDD0,
- 0xC2FC, 0xBDD1, 0xC2FD, 0x9AF1, 0xC2FE, 0x9AF2, 0xC2FF, 0x9AF3, 0xC300, 0xBDD2, 0xC301, 0x9AF4, 0xC302, 0x9AF5, 0xC303, 0x9AF6,
- 0xC304, 0x9AF7, 0xC305, 0x9AF8, 0xC306, 0x9AF9, 0xC307, 0x9AFA, 0xC308, 0xBDD3, 0xC309, 0xBDD4, 0xC30A, 0x9AFB, 0xC30B, 0x9AFC,
- 0xC30C, 0xBDD5, 0xC30D, 0xBDD6, 0xC30E, 0x9AFD, 0xC30F, 0x9AFE, 0xC310, 0x9B41, 0xC311, 0x9B42, 0xC312, 0x9B43, 0xC313, 0xBDD7,
- 0xC314, 0xBDD8, 0xC315, 0xBDD9, 0xC316, 0x9B44, 0xC317, 0x9B45, 0xC318, 0xBDDA, 0xC319, 0x9B46, 0xC31A, 0x9B47, 0xC31B, 0x9B48,
- 0xC31C, 0xBDDB, 0xC31D, 0x9B49, 0xC31E, 0x9B4A, 0xC31F, 0x9B4B, 0xC320, 0x9B4C, 0xC321, 0x9B4D, 0xC322, 0x9B4E, 0xC323, 0x9B4F,
- 0xC324, 0xBDDC, 0xC325, 0xBDDD, 0xC326, 0x9B50, 0xC327, 0x9B51, 0xC328, 0xBDDE, 0xC329, 0xBDDF, 0xC32A, 0x9B52, 0xC32B, 0x9B53,
- 0xC32C, 0x9B54, 0xC32D, 0x9B55, 0xC32E, 0x9B56, 0xC32F, 0x9B57, 0xC330, 0x9B58, 0xC331, 0x9B59, 0xC332, 0x9B5A, 0xC333, 0x9B61,
- 0xC334, 0x9B62, 0xC335, 0x9B63, 0xC336, 0x9B64, 0xC337, 0x9B65, 0xC338, 0x9B66, 0xC339, 0x9B67, 0xC33A, 0x9B68, 0xC33B, 0x9B69,
- 0xC33C, 0x9B6A, 0xC33D, 0x9B6B, 0xC33E, 0x9B6C, 0xC33F, 0x9B6D, 0xC340, 0x9B6E, 0xC341, 0x9B6F, 0xC342, 0x9B70, 0xC343, 0x9B71,
- 0xC344, 0x9B72, 0xC345, 0xBDE0, 0xC346, 0x9B73, 0xC347, 0x9B74, 0xC348, 0x9B75, 0xC349, 0x9B76, 0xC34A, 0x9B77, 0xC34B, 0x9B78,
- 0xC34C, 0x9B79, 0xC34D, 0x9B7A, 0xC34E, 0x9B81, 0xC34F, 0x9B82, 0xC350, 0x9B83, 0xC351, 0x9B84, 0xC352, 0x9B85, 0xC353, 0x9B86,
- 0xC354, 0x9B87, 0xC355, 0x9B88, 0xC356, 0x9B89, 0xC357, 0x9B8A, 0xC358, 0x9B8B, 0xC359, 0x9B8C, 0xC35A, 0x9B8D, 0xC35B, 0x9B8E,
- 0xC35C, 0x9B8F, 0xC35D, 0x9B90, 0xC35E, 0x9B91, 0xC35F, 0x9B92, 0xC360, 0x9B93, 0xC361, 0x9B94, 0xC362, 0x9B95, 0xC363, 0x9B96,
- 0xC364, 0x9B97, 0xC365, 0x9B98, 0xC366, 0x9B99, 0xC367, 0x9B9A, 0xC368, 0xBDE1, 0xC369, 0xBDE2, 0xC36A, 0x9B9B, 0xC36B, 0x9B9C,
- 0xC36C, 0xBDE3, 0xC36D, 0x9B9D, 0xC36E, 0x9B9E, 0xC36F, 0x9B9F, 0xC370, 0xBDE4, 0xC371, 0x9BA0, 0xC372, 0xBDE5, 0xC373, 0x9BA1,
- 0xC374, 0x9BA2, 0xC375, 0x9BA3, 0xC376, 0x9BA4, 0xC377, 0x9BA5, 0xC378, 0xBDE6, 0xC379, 0xBDE7, 0xC37A, 0x9BA6, 0xC37B, 0x9BA7,
- 0xC37C, 0xBDE8, 0xC37D, 0xBDE9, 0xC37E, 0x9BA8, 0xC37F, 0x9BA9, 0xC380, 0x9BAA, 0xC381, 0x9BAB, 0xC382, 0x9BAC, 0xC383, 0x9BAD,
- 0xC384, 0xBDEA, 0xC385, 0x9BAE, 0xC386, 0x9BAF, 0xC387, 0x9BB0, 0xC388, 0xBDEB, 0xC389, 0x9BB1, 0xC38A, 0x9BB2, 0xC38B, 0x9BB3,
- 0xC38C, 0xBDEC, 0xC38D, 0x9BB4, 0xC38E, 0x9BB5, 0xC38F, 0x9BB6, 0xC390, 0x9BB7, 0xC391, 0x9BB8, 0xC392, 0x9BB9, 0xC393, 0x9BBA,
- 0xC394, 0x9BBB, 0xC395, 0x9BBC, 0xC396, 0x9BBD, 0xC397, 0x9BBE, 0xC398, 0x9BBF, 0xC399, 0x9BC0, 0xC39A, 0x9BC1, 0xC39B, 0x9BC2,
- 0xC39C, 0x9BC3, 0xC39D, 0x9BC4, 0xC39E, 0x9BC5, 0xC39F, 0x9BC6, 0xC3A0, 0x9BC7, 0xC3A1, 0x9BC8, 0xC3A2, 0x9BC9, 0xC3A3, 0x9BCA,
- 0xC3A4, 0x9BCB, 0xC3A5, 0x9BCC, 0xC3A6, 0x9BCD, 0xC3A7, 0x9BCE, 0xC3A8, 0x9BCF, 0xC3A9, 0x9BD0, 0xC3AA, 0x9BD1, 0xC3AB, 0x9BD2,
- 0xC3AC, 0x9BD3, 0xC3AD, 0x9BD4, 0xC3AE, 0x9BD5, 0xC3AF, 0x9BD6, 0xC3B0, 0x9BD7, 0xC3B1, 0x9BD8, 0xC3B2, 0x9BD9, 0xC3B3, 0x9BDA,
- 0xC3B4, 0x9BDB, 0xC3B5, 0x9BDC, 0xC3B6, 0x9BDD, 0xC3B7, 0x9BDE, 0xC3B8, 0x9BDF, 0xC3B9, 0x9BE0, 0xC3BA, 0x9BE1, 0xC3BB, 0x9BE2,
- 0xC3BC, 0x9BE3, 0xC3BD, 0x9BE4, 0xC3BE, 0x9BE5, 0xC3BF, 0x9BE6, 0xC3C0, 0xBDED, 0xC3C1, 0x9BE7, 0xC3C2, 0x9BE8, 0xC3C3, 0x9BE9,
- 0xC3C4, 0x9BEA, 0xC3C5, 0x9BEB, 0xC3C6, 0x9BEC, 0xC3C7, 0x9BED, 0xC3C8, 0x9BEE, 0xC3C9, 0x9BEF, 0xC3CA, 0x9BF0, 0xC3CB, 0x9BF1,
- 0xC3CC, 0x9BF2, 0xC3CD, 0x9BF3, 0xC3CE, 0x9BF4, 0xC3CF, 0x9BF5, 0xC3D0, 0x9BF6, 0xC3D1, 0x9BF7, 0xC3D2, 0x9BF8, 0xC3D3, 0x9BF9,
- 0xC3D4, 0x9BFA, 0xC3D5, 0x9BFB, 0xC3D6, 0x9BFC, 0xC3D7, 0x9BFD, 0xC3D8, 0xBDEE, 0xC3D9, 0xBDEF, 0xC3DA, 0x9BFE, 0xC3DB, 0x9C41,
- 0xC3DC, 0xBDF0, 0xC3DD, 0x9C42, 0xC3DE, 0x9C43, 0xC3DF, 0xBDF1, 0xC3E0, 0xBDF2, 0xC3E1, 0x9C44, 0xC3E2, 0xBDF3, 0xC3E3, 0x9C45,
- 0xC3E4, 0x9C46, 0xC3E5, 0x9C47, 0xC3E6, 0x9C48, 0xC3E7, 0x9C49, 0xC3E8, 0xBDF4, 0xC3E9, 0xBDF5, 0xC3EA, 0x9C4A, 0xC3EB, 0x9C4B,
- 0xC3EC, 0x9C4C, 0xC3ED, 0xBDF6, 0xC3EE, 0x9C4D, 0xC3EF, 0x9C4E, 0xC3F0, 0x9C4F, 0xC3F1, 0x9C50, 0xC3F2, 0x9C51, 0xC3F3, 0x9C52,
- 0xC3F4, 0xBDF7, 0xC3F5, 0xBDF8, 0xC3F6, 0x9C53, 0xC3F7, 0x9C54, 0xC3F8, 0xBDF9, 0xC3F9, 0x9C55, 0xC3FA, 0x9C56, 0xC3FB, 0x9C57,
- 0xC3FC, 0x9C58, 0xC3FD, 0x9C59, 0xC3FE, 0x9C5A, 0xC3FF, 0x9C61, 0xC400, 0x9C62, 0xC401, 0x9C63, 0xC402, 0x9C64, 0xC403, 0x9C65,
- 0xC404, 0x9C66, 0xC405, 0x9C67, 0xC406, 0x9C68, 0xC407, 0x9C69, 0xC408, 0xBDFA, 0xC409, 0x9C6A, 0xC40A, 0x9C6B, 0xC40B, 0x9C6C,
- 0xC40C, 0x9C6D, 0xC40D, 0x9C6E, 0xC40E, 0x9C6F, 0xC40F, 0x9C70, 0xC410, 0xBDFB, 0xC411, 0x9C71, 0xC412, 0x9C72, 0xC413, 0x9C73,
- 0xC414, 0x9C74, 0xC415, 0x9C75, 0xC416, 0x9C76, 0xC417, 0x9C77, 0xC418, 0x9C78, 0xC419, 0x9C79, 0xC41A, 0x9C7A, 0xC41B, 0x9C81,
- 0xC41C, 0x9C82, 0xC41D, 0x9C83, 0xC41E, 0x9C84, 0xC41F, 0x9C85, 0xC420, 0x9C86, 0xC421, 0x9C87, 0xC422, 0x9C88, 0xC423, 0x9C89,
- 0xC424, 0xBDFC, 0xC425, 0x9C8A, 0xC426, 0x9C8B, 0xC427, 0x9C8C, 0xC428, 0x9C8D, 0xC429, 0x9C8E, 0xC42A, 0x9C8F, 0xC42B, 0x9C90,
- 0xC42C, 0xBDFD, 0xC42D, 0x9C91, 0xC42E, 0x9C92, 0xC42F, 0x9C93, 0xC430, 0xBDFE, 0xC431, 0x9C94, 0xC432, 0x9C95, 0xC433, 0x9C96,
- 0xC434, 0xBEA1, 0xC435, 0x9C97, 0xC436, 0x9C98, 0xC437, 0x9C99, 0xC438, 0x9C9A, 0xC439, 0x9C9B, 0xC43A, 0x9C9C, 0xC43B, 0x9C9D,
- 0xC43C, 0xBEA2, 0xC43D, 0xBEA3, 0xC43E, 0x9C9E, 0xC43F, 0x9C9F, 0xC440, 0x9CA0, 0xC441, 0x9CA1, 0xC442, 0x9CA2, 0xC443, 0x9CA3,
- 0xC444, 0x9CA4, 0xC445, 0x9CA5, 0xC446, 0x9CA6, 0xC447, 0x9CA7, 0xC448, 0xBEA4, 0xC449, 0x9CA8, 0xC44A, 0x9CA9, 0xC44B, 0x9CAA,
- 0xC44C, 0x9CAB, 0xC44D, 0x9CAC, 0xC44E, 0x9CAD, 0xC44F, 0x9CAE, 0xC450, 0x9CAF, 0xC451, 0x9CB0, 0xC452, 0x9CB1, 0xC453, 0x9CB2,
- 0xC454, 0x9CB3, 0xC455, 0x9CB4, 0xC456, 0x9CB5, 0xC457, 0x9CB6, 0xC458, 0x9CB7, 0xC459, 0x9CB8, 0xC45A, 0x9CB9, 0xC45B, 0x9CBA,
- 0xC45C, 0x9CBB, 0xC45D, 0x9CBC, 0xC45E, 0x9CBD, 0xC45F, 0x9CBE, 0xC460, 0x9CBF, 0xC461, 0x9CC0, 0xC462, 0x9CC1, 0xC463, 0x9CC2,
- 0xC464, 0xBEA5, 0xC465, 0xBEA6, 0xC466, 0x9CC3, 0xC467, 0x9CC4, 0xC468, 0xBEA7, 0xC469, 0x9CC5, 0xC46A, 0x9CC6, 0xC46B, 0x9CC7,
- 0xC46C, 0xBEA8, 0xC46D, 0x9CC8, 0xC46E, 0x9CC9, 0xC46F, 0x9CCA, 0xC470, 0x9CCB, 0xC471, 0x9CCC, 0xC472, 0x9CCD, 0xC473, 0x9CCE,
- 0xC474, 0xBEA9, 0xC475, 0xBEAA, 0xC476, 0x9CCF, 0xC477, 0x9CD0, 0xC478, 0x9CD1, 0xC479, 0xBEAB, 0xC47A, 0x9CD2, 0xC47B, 0x9CD3,
- 0xC47C, 0x9CD4, 0xC47D, 0x9CD5, 0xC47E, 0x9CD6, 0xC47F, 0x9CD7, 0xC480, 0xBEAC, 0xC481, 0x9CD8, 0xC482, 0x9CD9, 0xC483, 0x9CDA,
- 0xC484, 0x9CDB, 0xC485, 0x9CDC, 0xC486, 0x9CDD, 0xC487, 0x9CDE, 0xC488, 0x9CDF, 0xC489, 0x9CE0, 0xC48A, 0x9CE1, 0xC48B, 0x9CE2,
- 0xC48C, 0x9CE3, 0xC48D, 0x9CE4, 0xC48E, 0x9CE5, 0xC48F, 0x9CE6, 0xC490, 0x9CE7, 0xC491, 0x9CE8, 0xC492, 0x9CE9, 0xC493, 0x9CEA,
- 0xC494, 0xBEAD, 0xC495, 0x9CEB, 0xC496, 0x9CEC, 0xC497, 0x9CED, 0xC498, 0x9CEE, 0xC499, 0x9CEF, 0xC49A, 0x9CF0, 0xC49B, 0x9CF1,
- 0xC49C, 0xBEAE, 0xC49D, 0x9CF2, 0xC49E, 0x9CF3, 0xC49F, 0x9CF4, 0xC4A0, 0x9CF5, 0xC4A1, 0x9CF6, 0xC4A2, 0x9CF7, 0xC4A3, 0x9CF8,
- 0xC4A4, 0x9CF9, 0xC4A5, 0x9CFA, 0xC4A6, 0x9CFB, 0xC4A7, 0x9CFC, 0xC4A8, 0x9CFD, 0xC4A9, 0x9CFE, 0xC4AA, 0x9D41, 0xC4AB, 0x9D42,
- 0xC4AC, 0x9D43, 0xC4AD, 0x9D44, 0xC4AE, 0x9D45, 0xC4AF, 0x9D46, 0xC4B0, 0x9D47, 0xC4B1, 0x9D48, 0xC4B2, 0x9D49, 0xC4B3, 0x9D4A,
- 0xC4B4, 0x9D4B, 0xC4B5, 0x9D4C, 0xC4B6, 0x9D4D, 0xC4B7, 0x9D4E, 0xC4B8, 0xBEAF, 0xC4B9, 0x9D4F, 0xC4BA, 0x9D50, 0xC4BB, 0x9D51,
- 0xC4BC, 0xBEB0, 0xC4BD, 0x9D52, 0xC4BE, 0x9D53, 0xC4BF, 0x9D54, 0xC4C0, 0x9D55, 0xC4C1, 0x9D56, 0xC4C2, 0x9D57, 0xC4C3, 0x9D58,
- 0xC4C4, 0x9D59, 0xC4C5, 0x9D5A, 0xC4C6, 0x9D61, 0xC4C7, 0x9D62, 0xC4C8, 0x9D63, 0xC4C9, 0x9D64, 0xC4CA, 0x9D65, 0xC4CB, 0x9D66,
- 0xC4CC, 0x9D67, 0xC4CD, 0x9D68, 0xC4CE, 0x9D69, 0xC4CF, 0x9D6A, 0xC4D0, 0x9D6B, 0xC4D1, 0x9D6C, 0xC4D2, 0x9D6D, 0xC4D3, 0x9D6E,
- 0xC4D4, 0x9D6F, 0xC4D5, 0x9D70, 0xC4D6, 0x9D71, 0xC4D7, 0x9D72, 0xC4D8, 0x9D73, 0xC4D9, 0x9D74, 0xC4DA, 0x9D75, 0xC4DB, 0x9D76,
- 0xC4DC, 0x9D77, 0xC4DD, 0x9D78, 0xC4DE, 0x9D79, 0xC4DF, 0x9D7A, 0xC4E0, 0x9D81, 0xC4E1, 0x9D82, 0xC4E2, 0x9D83, 0xC4E3, 0x9D84,
- 0xC4E4, 0x9D85, 0xC4E5, 0x9D86, 0xC4E6, 0x9D87, 0xC4E7, 0x9D88, 0xC4E8, 0x9D89, 0xC4E9, 0xBEB1, 0xC4EA, 0x9D8A, 0xC4EB, 0x9D8B,
- 0xC4EC, 0x9D8C, 0xC4ED, 0x9D8D, 0xC4EE, 0x9D8E, 0xC4EF, 0x9D8F, 0xC4F0, 0xBEB2, 0xC4F1, 0xBEB3, 0xC4F2, 0x9D90, 0xC4F3, 0x9D91,
- 0xC4F4, 0xBEB4, 0xC4F5, 0x9D92, 0xC4F6, 0x9D93, 0xC4F7, 0x9D94, 0xC4F8, 0xBEB5, 0xC4F9, 0x9D95, 0xC4FA, 0xBEB6, 0xC4FB, 0x9D96,
- 0xC4FC, 0x9D97, 0xC4FD, 0x9D98, 0xC4FE, 0x9D99, 0xC4FF, 0xBEB7, 0xC500, 0xBEB8, 0xC501, 0xBEB9, 0xC502, 0x9D9A, 0xC503, 0x9D9B,
- 0xC504, 0x9D9C, 0xC505, 0x9D9D, 0xC506, 0x9D9E, 0xC507, 0x9D9F, 0xC508, 0x9DA0, 0xC509, 0x9DA1, 0xC50A, 0x9DA2, 0xC50B, 0x9DA3,
- 0xC50C, 0xBEBA, 0xC50D, 0x9DA4, 0xC50E, 0x9DA5, 0xC50F, 0x9DA6, 0xC510, 0xBEBB, 0xC511, 0x9DA7, 0xC512, 0x9DA8, 0xC513, 0x9DA9,
- 0xC514, 0xBEBC, 0xC515, 0x9DAA, 0xC516, 0x9DAB, 0xC517, 0x9DAC, 0xC518, 0x9DAD, 0xC519, 0x9DAE, 0xC51A, 0x9DAF, 0xC51B, 0x9DB0,
- 0xC51C, 0xBEBD, 0xC51D, 0x9DB1, 0xC51E, 0x9DB2, 0xC51F, 0x9DB3, 0xC520, 0x9DB4, 0xC521, 0x9DB5, 0xC522, 0x9DB6, 0xC523, 0x9DB7,
- 0xC524, 0x9DB8, 0xC525, 0x9DB9, 0xC526, 0x9DBA, 0xC527, 0x9DBB, 0xC528, 0xBEBE, 0xC529, 0xBEBF, 0xC52A, 0x9DBC, 0xC52B, 0x9DBD,
- 0xC52C, 0xBEC0, 0xC52D, 0x9DBE, 0xC52E, 0x9DBF, 0xC52F, 0x9DC0, 0xC530, 0xBEC1, 0xC531, 0x9DC1, 0xC532, 0x9DC2, 0xC533, 0x9DC3,
- 0xC534, 0x9DC4, 0xC535, 0x9DC5, 0xC536, 0x9DC6, 0xC537, 0x9DC7, 0xC538, 0xBEC2, 0xC539, 0xBEC3, 0xC53A, 0x9DC8, 0xC53B, 0xBEC4,
- 0xC53C, 0x9DC9, 0xC53D, 0xBEC5, 0xC53E, 0x9DCA, 0xC53F, 0x9DCB, 0xC540, 0x9DCC, 0xC541, 0x9DCD, 0xC542, 0x9DCE, 0xC543, 0x9DCF,
- 0xC544, 0xBEC6, 0xC545, 0xBEC7, 0xC546, 0x9DD0, 0xC547, 0x9DD1, 0xC548, 0xBEC8, 0xC549, 0xBEC9, 0xC54A, 0xBECA, 0xC54B, 0x9DD2,
- 0xC54C, 0xBECB, 0xC54D, 0xBECC, 0xC54E, 0xBECD, 0xC54F, 0x9DD3, 0xC550, 0x9DD4, 0xC551, 0x9DD5, 0xC552, 0x9DD6, 0xC553, 0xBECE,
- 0xC554, 0xBECF, 0xC555, 0xBED0, 0xC556, 0x9DD7, 0xC557, 0xBED1, 0xC558, 0xBED2, 0xC559, 0xBED3, 0xC55A, 0x9DD8, 0xC55B, 0x9DD9,
- 0xC55C, 0x9DDA, 0xC55D, 0xBED4, 0xC55E, 0xBED5, 0xC55F, 0x9DDB, 0xC560, 0xBED6, 0xC561, 0xBED7, 0xC562, 0x9DDC, 0xC563, 0x9DDD,
- 0xC564, 0xBED8, 0xC565, 0x9DDE, 0xC566, 0x9DDF, 0xC567, 0x9DE0, 0xC568, 0xBED9, 0xC569, 0x9DE1, 0xC56A, 0x9DE2, 0xC56B, 0x9DE3,
- 0xC56C, 0x9DE4, 0xC56D, 0x9DE5, 0xC56E, 0x9DE6, 0xC56F, 0x9DE7, 0xC570, 0xBEDA, 0xC571, 0xBEDB, 0xC572, 0x9DE8, 0xC573, 0xBEDC,
- 0xC574, 0xBEDD, 0xC575, 0xBEDE, 0xC576, 0x9DE9, 0xC577, 0x9DEA, 0xC578, 0x9DEB, 0xC579, 0x9DEC, 0xC57A, 0x9DED, 0xC57B, 0x9DEE,
- 0xC57C, 0xBEDF, 0xC57D, 0xBEE0, 0xC57E, 0x9DEF, 0xC57F, 0x9DF0, 0xC580, 0xBEE1, 0xC581, 0x9DF1, 0xC582, 0x9DF2, 0xC583, 0x9DF3,
- 0xC584, 0xBEE2, 0xC585, 0x9DF4, 0xC586, 0x9DF5, 0xC587, 0xBEE3, 0xC588, 0x9DF6, 0xC589, 0x9DF7, 0xC58A, 0x9DF8, 0xC58B, 0x9DF9,
- 0xC58C, 0xBEE4, 0xC58D, 0xBEE5, 0xC58E, 0x9DFA, 0xC58F, 0xBEE6, 0xC590, 0x9DFB, 0xC591, 0xBEE7, 0xC592, 0x9DFC, 0xC593, 0x9DFD,
- 0xC594, 0x9DFE, 0xC595, 0xBEE8, 0xC596, 0x9E41, 0xC597, 0xBEE9, 0xC598, 0xBEEA, 0xC599, 0x9E42, 0xC59A, 0x9E43, 0xC59B, 0x9E44,
- 0xC59C, 0xBEEB, 0xC59D, 0x9E45, 0xC59E, 0x9E46, 0xC59F, 0x9E47, 0xC5A0, 0xBEEC, 0xC5A1, 0x9E48, 0xC5A2, 0x9E49, 0xC5A3, 0x9E4A,
- 0xC5A4, 0x9E4B, 0xC5A5, 0x9E4C, 0xC5A6, 0x9E4D, 0xC5A7, 0x9E4E, 0xC5A8, 0x9E4F, 0xC5A9, 0xBEED, 0xC5AA, 0x9E50, 0xC5AB, 0x9E51,
- 0xC5AC, 0x9E52, 0xC5AD, 0x9E53, 0xC5AE, 0x9E54, 0xC5AF, 0x9E55, 0xC5B0, 0x9E56, 0xC5B1, 0x9E57, 0xC5B2, 0x9E58, 0xC5B3, 0x9E59,
- 0xC5B4, 0xBEEE, 0xC5B5, 0xBEEF, 0xC5B6, 0x9E5A, 0xC5B7, 0x9E61, 0xC5B8, 0xBEF0, 0xC5B9, 0xBEF1, 0xC5BA, 0x9E62, 0xC5BB, 0xBEF2,
- 0xC5BC, 0xBEF3, 0xC5BD, 0xBEF4, 0xC5BE, 0xBEF5, 0xC5BF, 0x9E63, 0xC5C0, 0x9E64, 0xC5C1, 0x9E65, 0xC5C2, 0x9E66, 0xC5C3, 0x9E67,
- 0xC5C4, 0xBEF6, 0xC5C5, 0xBEF7, 0xC5C6, 0xBEF8, 0xC5C7, 0xBEF9, 0xC5C8, 0xBEFA, 0xC5C9, 0xBEFB, 0xC5CA, 0xBEFC, 0xC5CB, 0x9E68,
- 0xC5CC, 0xBEFD, 0xC5CD, 0x9E69, 0xC5CE, 0xBEFE, 0xC5CF, 0x9E6A, 0xC5D0, 0xBFA1, 0xC5D1, 0xBFA2, 0xC5D2, 0x9E6B, 0xC5D3, 0x9E6C,
- 0xC5D4, 0xBFA3, 0xC5D5, 0x9E6D, 0xC5D6, 0x9E6E, 0xC5D7, 0x9E6F, 0xC5D8, 0xBFA4, 0xC5D9, 0x9E70, 0xC5DA, 0x9E71, 0xC5DB, 0x9E72,
- 0xC5DC, 0x9E73, 0xC5DD, 0x9E74, 0xC5DE, 0x9E75, 0xC5DF, 0x9E76, 0xC5E0, 0xBFA5, 0xC5E1, 0xBFA6, 0xC5E2, 0x9E77, 0xC5E3, 0xBFA7,
- 0xC5E4, 0x9E78, 0xC5E5, 0xBFA8, 0xC5E6, 0x9E79, 0xC5E7, 0x9E7A, 0xC5E8, 0x9E81, 0xC5E9, 0x9E82, 0xC5EA, 0x9E83, 0xC5EB, 0x9E84,
- 0xC5EC, 0xBFA9, 0xC5ED, 0xBFAA, 0xC5EE, 0xBFAB, 0xC5EF, 0x9E85, 0xC5F0, 0xBFAC, 0xC5F1, 0x9E86, 0xC5F2, 0x9E87, 0xC5F3, 0x9E88,
- 0xC5F4, 0xBFAD, 0xC5F5, 0x9E89, 0xC5F6, 0xBFAE, 0xC5F7, 0xBFAF, 0xC5F8, 0x9E8A, 0xC5F9, 0x9E8B, 0xC5FA, 0x9E8C, 0xC5FB, 0x9E8D,
- 0xC5FC, 0xBFB0, 0xC5FD, 0xBFB1, 0xC5FE, 0xBFB2, 0xC5FF, 0xBFB3, 0xC600, 0xBFB4, 0xC601, 0xBFB5, 0xC602, 0x9E8E, 0xC603, 0x9E8F,
- 0xC604, 0x9E90, 0xC605, 0xBFB6, 0xC606, 0xBFB7, 0xC607, 0xBFB8, 0xC608, 0xBFB9, 0xC609, 0x9E91, 0xC60A, 0x9E92, 0xC60B, 0x9E93,
- 0xC60C, 0xBFBA, 0xC60D, 0x9E94, 0xC60E, 0x9E95, 0xC60F, 0x9E96, 0xC610, 0xBFBB, 0xC611, 0x9E97, 0xC612, 0x9E98, 0xC613, 0x9E99,
- 0xC614, 0x9E9A, 0xC615, 0x9E9B, 0xC616, 0x9E9C, 0xC617, 0x9E9D, 0xC618, 0xBFBC, 0xC619, 0xBFBD, 0xC61A, 0x9E9E, 0xC61B, 0xBFBE,
- 0xC61C, 0xBFBF, 0xC61D, 0x9E9F, 0xC61E, 0x9EA0, 0xC61F, 0x9EA1, 0xC620, 0x9EA2, 0xC621, 0x9EA3, 0xC622, 0x9EA4, 0xC623, 0x9EA5,
- 0xC624, 0xBFC0, 0xC625, 0xBFC1, 0xC626, 0x9EA6, 0xC627, 0x9EA7, 0xC628, 0xBFC2, 0xC629, 0x9EA8, 0xC62A, 0x9EA9, 0xC62B, 0x9EAA,
- 0xC62C, 0xBFC3, 0xC62D, 0xBFC4, 0xC62E, 0xBFC5, 0xC62F, 0x9EAB, 0xC630, 0xBFC6, 0xC631, 0x9EAC, 0xC632, 0x9EAD, 0xC633, 0xBFC7,
- 0xC634, 0xBFC8, 0xC635, 0xBFC9, 0xC636, 0x9EAE, 0xC637, 0xBFCA, 0xC638, 0x9EAF, 0xC639, 0xBFCB, 0xC63A, 0x9EB0, 0xC63B, 0xBFCC,
- 0xC63C, 0x9EB1, 0xC63D, 0x9EB2, 0xC63E, 0x9EB3, 0xC63F, 0x9EB4, 0xC640, 0xBFCD, 0xC641, 0xBFCE, 0xC642, 0x9EB5, 0xC643, 0x9EB6,
- 0xC644, 0xBFCF, 0xC645, 0x9EB7, 0xC646, 0x9EB8, 0xC647, 0x9EB9, 0xC648, 0xBFD0, 0xC649, 0x9EBA, 0xC64A, 0x9EBB, 0xC64B, 0x9EBC,
- 0xC64C, 0x9EBD, 0xC64D, 0x9EBE, 0xC64E, 0x9EBF, 0xC64F, 0x9EC0, 0xC650, 0xBFD1, 0xC651, 0xBFD2, 0xC652, 0x9EC1, 0xC653, 0xBFD3,
- 0xC654, 0xBFD4, 0xC655, 0xBFD5, 0xC656, 0x9EC2, 0xC657, 0x9EC3, 0xC658, 0x9EC4, 0xC659, 0x9EC5, 0xC65A, 0x9EC6, 0xC65B, 0x9EC7,
- 0xC65C, 0xBFD6, 0xC65D, 0xBFD7, 0xC65E, 0x9EC8, 0xC65F, 0x9EC9, 0xC660, 0xBFD8, 0xC661, 0x9ECA, 0xC662, 0x9ECB, 0xC663, 0x9ECC,
- 0xC664, 0x9ECD, 0xC665, 0x9ECE, 0xC666, 0x9ECF, 0xC667, 0x9ED0, 0xC668, 0x9ED1, 0xC669, 0x9ED2, 0xC66A, 0x9ED3, 0xC66B, 0x9ED4,
- 0xC66C, 0xBFD9, 0xC66D, 0x9ED5, 0xC66E, 0x9ED6, 0xC66F, 0xBFDA, 0xC670, 0x9ED7, 0xC671, 0xBFDB, 0xC672, 0x9ED8, 0xC673, 0x9ED9,
- 0xC674, 0x9EDA, 0xC675, 0x9EDB, 0xC676, 0x9EDC, 0xC677, 0x9EDD, 0xC678, 0xBFDC, 0xC679, 0xBFDD, 0xC67A, 0x9EDE, 0xC67B, 0x9EDF,
- 0xC67C, 0xBFDE, 0xC67D, 0x9EE0, 0xC67E, 0x9EE1, 0xC67F, 0x9EE2, 0xC680, 0xBFDF, 0xC681, 0x9EE3, 0xC682, 0x9EE4, 0xC683, 0x9EE5,
- 0xC684, 0x9EE6, 0xC685, 0x9EE7, 0xC686, 0x9EE8, 0xC687, 0x9EE9, 0xC688, 0xBFE0, 0xC689, 0xBFE1, 0xC68A, 0x9EEA, 0xC68B, 0xBFE2,
- 0xC68C, 0x9EEB, 0xC68D, 0xBFE3, 0xC68E, 0x9EEC, 0xC68F, 0x9EED, 0xC690, 0x9EEE, 0xC691, 0x9EEF, 0xC692, 0x9EF0, 0xC693, 0x9EF1,
- 0xC694, 0xBFE4, 0xC695, 0xBFE5, 0xC696, 0x9EF2, 0xC697, 0x9EF3, 0xC698, 0xBFE6, 0xC699, 0x9EF4, 0xC69A, 0x9EF5, 0xC69B, 0x9EF6,
- 0xC69C, 0xBFE7, 0xC69D, 0x9EF7, 0xC69E, 0x9EF8, 0xC69F, 0x9EF9, 0xC6A0, 0x9EFA, 0xC6A1, 0x9EFB, 0xC6A2, 0x9EFC, 0xC6A3, 0x9EFD,
- 0xC6A4, 0xBFE8, 0xC6A5, 0xBFE9, 0xC6A6, 0x9EFE, 0xC6A7, 0xBFEA, 0xC6A8, 0x9F41, 0xC6A9, 0xBFEB, 0xC6AA, 0x9F42, 0xC6AB, 0x9F43,
- 0xC6AC, 0x9F44, 0xC6AD, 0x9F45, 0xC6AE, 0x9F46, 0xC6AF, 0x9F47, 0xC6B0, 0xBFEC, 0xC6B1, 0xBFED, 0xC6B2, 0x9F48, 0xC6B3, 0x9F49,
- 0xC6B4, 0xBFEE, 0xC6B5, 0x9F4A, 0xC6B6, 0x9F4B, 0xC6B7, 0x9F4C, 0xC6B8, 0xBFEF, 0xC6B9, 0xBFF0, 0xC6BA, 0xBFF1, 0xC6BB, 0x9F4D,
- 0xC6BC, 0x9F4E, 0xC6BD, 0x9F4F, 0xC6BE, 0x9F50, 0xC6BF, 0x9F51, 0xC6C0, 0xBFF2, 0xC6C1, 0xBFF3, 0xC6C2, 0x9F52, 0xC6C3, 0xBFF4,
- 0xC6C4, 0x9F53, 0xC6C5, 0xBFF5, 0xC6C6, 0x9F54, 0xC6C7, 0x9F55, 0xC6C8, 0x9F56, 0xC6C9, 0x9F57, 0xC6CA, 0x9F58, 0xC6CB, 0x9F59,
- 0xC6CC, 0xBFF6, 0xC6CD, 0xBFF7, 0xC6CE, 0x9F5A, 0xC6CF, 0x9F61, 0xC6D0, 0xBFF8, 0xC6D1, 0x9F62, 0xC6D2, 0x9F63, 0xC6D3, 0x9F64,
- 0xC6D4, 0xBFF9, 0xC6D5, 0x9F65, 0xC6D6, 0x9F66, 0xC6D7, 0x9F67, 0xC6D8, 0x9F68, 0xC6D9, 0x9F69, 0xC6DA, 0x9F6A, 0xC6DB, 0x9F6B,
- 0xC6DC, 0xBFFA, 0xC6DD, 0xBFFB, 0xC6DE, 0x9F6C, 0xC6DF, 0x9F6D, 0xC6E0, 0xBFFC, 0xC6E1, 0xBFFD, 0xC6E2, 0x9F6E, 0xC6E3, 0x9F6F,
- 0xC6E4, 0x9F70, 0xC6E5, 0x9F71, 0xC6E6, 0x9F72, 0xC6E7, 0x9F73, 0xC6E8, 0xBFFE, 0xC6E9, 0xC0A1, 0xC6EA, 0x9F74, 0xC6EB, 0x9F75,
- 0xC6EC, 0xC0A2, 0xC6ED, 0x9F76, 0xC6EE, 0x9F77, 0xC6EF, 0x9F78, 0xC6F0, 0xC0A3, 0xC6F1, 0x9F79, 0xC6F2, 0x9F7A, 0xC6F3, 0x9F81,
- 0xC6F4, 0x9F82, 0xC6F5, 0x9F83, 0xC6F6, 0x9F84, 0xC6F7, 0x9F85, 0xC6F8, 0xC0A4, 0xC6F9, 0xC0A5, 0xC6FA, 0x9F86, 0xC6FB, 0x9F87,
- 0xC6FC, 0x9F88, 0xC6FD, 0xC0A6, 0xC6FE, 0x9F89, 0xC6FF, 0x9F8A, 0xC700, 0x9F8B, 0xC701, 0x9F8C, 0xC702, 0x9F8D, 0xC703, 0x9F8E,
- 0xC704, 0xC0A7, 0xC705, 0xC0A8, 0xC706, 0x9F8F, 0xC707, 0x9F90, 0xC708, 0xC0A9, 0xC709, 0x9F91, 0xC70A, 0x9F92, 0xC70B, 0x9F93,
- 0xC70C, 0xC0AA, 0xC70D, 0x9F94, 0xC70E, 0x9F95, 0xC70F, 0x9F96, 0xC710, 0x9F97, 0xC711, 0x9F98, 0xC712, 0x9F99, 0xC713, 0x9F9A,
- 0xC714, 0xC0AB, 0xC715, 0xC0AC, 0xC716, 0x9F9B, 0xC717, 0xC0AD, 0xC718, 0x9F9C, 0xC719, 0xC0AE, 0xC71A, 0x9F9D, 0xC71B, 0x9F9E,
- 0xC71C, 0x9F9F, 0xC71D, 0x9FA0, 0xC71E, 0x9FA1, 0xC71F, 0x9FA2, 0xC720, 0xC0AF, 0xC721, 0xC0B0, 0xC722, 0x9FA3, 0xC723, 0x9FA4,
- 0xC724, 0xC0B1, 0xC725, 0x9FA5, 0xC726, 0x9FA6, 0xC727, 0x9FA7, 0xC728, 0xC0B2, 0xC729, 0x9FA8, 0xC72A, 0x9FA9, 0xC72B, 0x9FAA,
- 0xC72C, 0x9FAB, 0xC72D, 0x9FAC, 0xC72E, 0x9FAD, 0xC72F, 0x9FAE, 0xC730, 0xC0B3, 0xC731, 0xC0B4, 0xC732, 0x9FAF, 0xC733, 0xC0B5,
- 0xC734, 0x9FB0, 0xC735, 0xC0B6, 0xC736, 0x9FB1, 0xC737, 0xC0B7, 0xC738, 0x9FB2, 0xC739, 0x9FB3, 0xC73A, 0x9FB4, 0xC73B, 0x9FB5,
- 0xC73C, 0xC0B8, 0xC73D, 0xC0B9, 0xC73E, 0x9FB6, 0xC73F, 0x9FB7, 0xC740, 0xC0BA, 0xC741, 0x9FB8, 0xC742, 0x9FB9, 0xC743, 0x9FBA,
- 0xC744, 0xC0BB, 0xC745, 0x9FBB, 0xC746, 0x9FBC, 0xC747, 0x9FBD, 0xC748, 0x9FBE, 0xC749, 0x9FBF, 0xC74A, 0xC0BC, 0xC74B, 0x9FC0,
- 0xC74C, 0xC0BD, 0xC74D, 0xC0BE, 0xC74E, 0x9FC1, 0xC74F, 0xC0BF, 0xC750, 0x9FC2, 0xC751, 0xC0C0, 0xC752, 0xC0C1, 0xC753, 0xC0C2,
- 0xC754, 0xC0C3, 0xC755, 0xC0C4, 0xC756, 0xC0C5, 0xC757, 0xC0C6, 0xC758, 0xC0C7, 0xC759, 0x9FC3, 0xC75A, 0x9FC4, 0xC75B, 0x9FC5,
- 0xC75C, 0xC0C8, 0xC75D, 0x9FC6, 0xC75E, 0x9FC7, 0xC75F, 0x9FC8, 0xC760, 0xC0C9, 0xC761, 0x9FC9, 0xC762, 0x9FCA, 0xC763, 0x9FCB,
- 0xC764, 0x9FCC, 0xC765, 0x9FCD, 0xC766, 0x9FCE, 0xC767, 0x9FCF, 0xC768, 0xC0CA, 0xC769, 0x9FD0, 0xC76A, 0x9FD1, 0xC76B, 0xC0CB,
- 0xC76C, 0x9FD2, 0xC76D, 0x9FD3, 0xC76E, 0x9FD4, 0xC76F, 0x9FD5, 0xC770, 0x9FD6, 0xC771, 0x9FD7, 0xC772, 0x9FD8, 0xC773, 0x9FD9,
- 0xC774, 0xC0CC, 0xC775, 0xC0CD, 0xC776, 0x9FDA, 0xC777, 0x9FDB, 0xC778, 0xC0CE, 0xC779, 0x9FDC, 0xC77A, 0x9FDD, 0xC77B, 0x9FDE,
- 0xC77C, 0xC0CF, 0xC77D, 0xC0D0, 0xC77E, 0xC0D1, 0xC77F, 0x9FDF, 0xC780, 0x9FE0, 0xC781, 0x9FE1, 0xC782, 0x9FE2, 0xC783, 0xC0D2,
- 0xC784, 0xC0D3, 0xC785, 0xC0D4, 0xC786, 0x9FE3, 0xC787, 0xC0D5, 0xC788, 0xC0D6, 0xC789, 0xC0D7, 0xC78A, 0xC0D8, 0xC78B, 0x9FE4,
- 0xC78C, 0x9FE5, 0xC78D, 0x9FE6, 0xC78E, 0xC0D9, 0xC78F, 0x9FE7, 0xC790, 0xC0DA, 0xC791, 0xC0DB, 0xC792, 0x9FE8, 0xC793, 0x9FE9,
- 0xC794, 0xC0DC, 0xC795, 0x9FEA, 0xC796, 0xC0DD, 0xC797, 0xC0DE, 0xC798, 0xC0DF, 0xC799, 0x9FEB, 0xC79A, 0xC0E0, 0xC79B, 0x9FEC,
- 0xC79C, 0x9FED, 0xC79D, 0x9FEE, 0xC79E, 0x9FEF, 0xC79F, 0x9FF0, 0xC7A0, 0xC0E1, 0xC7A1, 0xC0E2, 0xC7A2, 0x9FF1, 0xC7A3, 0xC0E3,
- 0xC7A4, 0xC0E4, 0xC7A5, 0xC0E5, 0xC7A6, 0xC0E6, 0xC7A7, 0x9FF2, 0xC7A8, 0x9FF3, 0xC7A9, 0x9FF4, 0xC7AA, 0x9FF5, 0xC7AB, 0x9FF6,
- 0xC7AC, 0xC0E7, 0xC7AD, 0xC0E8, 0xC7AE, 0x9FF7, 0xC7AF, 0x9FF8, 0xC7B0, 0xC0E9, 0xC7B1, 0x9FF9, 0xC7B2, 0x9FFA, 0xC7B3, 0x9FFB,
- 0xC7B4, 0xC0EA, 0xC7B5, 0x9FFC, 0xC7B6, 0x9FFD, 0xC7B7, 0x9FFE, 0xC7B8, 0xA041, 0xC7B9, 0xA042, 0xC7BA, 0xA043, 0xC7BB, 0xA044,
- 0xC7BC, 0xC0EB, 0xC7BD, 0xC0EC, 0xC7BE, 0xA045, 0xC7BF, 0xC0ED, 0xC7C0, 0xC0EE, 0xC7C1, 0xC0EF, 0xC7C2, 0xA046, 0xC7C3, 0xA047,
- 0xC7C4, 0xA048, 0xC7C5, 0xA049, 0xC7C6, 0xA04A, 0xC7C7, 0xA04B, 0xC7C8, 0xC0F0, 0xC7C9, 0xC0F1, 0xC7CA, 0xA04C, 0xC7CB, 0xA04D,
- 0xC7CC, 0xC0F2, 0xC7CD, 0xA04E, 0xC7CE, 0xC0F3, 0xC7CF, 0xA04F, 0xC7D0, 0xC0F4, 0xC7D1, 0xA050, 0xC7D2, 0xA051, 0xC7D3, 0xA052,
- 0xC7D4, 0xA053, 0xC7D5, 0xA054, 0xC7D6, 0xA055, 0xC7D7, 0xA056, 0xC7D8, 0xC0F5, 0xC7D9, 0xA057, 0xC7DA, 0xA058, 0xC7DB, 0xA059,
- 0xC7DC, 0xA05A, 0xC7DD, 0xC0F6, 0xC7DE, 0xA061, 0xC7DF, 0xA062, 0xC7E0, 0xA063, 0xC7E1, 0xA064, 0xC7E2, 0xA065, 0xC7E3, 0xA066,
- 0xC7E4, 0xC0F7, 0xC7E5, 0xA067, 0xC7E6, 0xA068, 0xC7E7, 0xA069, 0xC7E8, 0xC0F8, 0xC7E9, 0xA06A, 0xC7EA, 0xA06B, 0xC7EB, 0xA06C,
- 0xC7EC, 0xC0F9, 0xC7ED, 0xA06D, 0xC7EE, 0xA06E, 0xC7EF, 0xA06F, 0xC7F0, 0xA070, 0xC7F1, 0xA071, 0xC7F2, 0xA072, 0xC7F3, 0xA073,
- 0xC7F4, 0xA074, 0xC7F5, 0xA075, 0xC7F6, 0xA076, 0xC7F7, 0xA077, 0xC7F8, 0xA078, 0xC7F9, 0xA079, 0xC7FA, 0xA07A, 0xC7FB, 0xA081,
- 0xC7FC, 0xA082, 0xC7FD, 0xA083, 0xC7FE, 0xA084, 0xC7FF, 0xA085, 0xC800, 0xC0FA, 0xC801, 0xC0FB, 0xC802, 0xA086, 0xC803, 0xA087,
- 0xC804, 0xC0FC, 0xC805, 0xA088, 0xC806, 0xA089, 0xC807, 0xA08A, 0xC808, 0xC0FD, 0xC809, 0xA08B, 0xC80A, 0xC0FE, 0xC80B, 0xA08C,
- 0xC80C, 0xA08D, 0xC80D, 0xA08E, 0xC80E, 0xA08F, 0xC80F, 0xA090, 0xC810, 0xC1A1, 0xC811, 0xC1A2, 0xC812, 0xA091, 0xC813, 0xC1A3,
- 0xC814, 0xA092, 0xC815, 0xC1A4, 0xC816, 0xC1A5, 0xC817, 0xA093, 0xC818, 0xA094, 0xC819, 0xA095, 0xC81A, 0xA096, 0xC81B, 0xA097,
- 0xC81C, 0xC1A6, 0xC81D, 0xC1A7, 0xC81E, 0xA098, 0xC81F, 0xA099, 0xC820, 0xC1A8, 0xC821, 0xA09A, 0xC822, 0xA09B, 0xC823, 0xA09C,
- 0xC824, 0xC1A9, 0xC825, 0xA09D, 0xC826, 0xA09E, 0xC827, 0xA09F, 0xC828, 0xA0A0, 0xC829, 0xA0A1, 0xC82A, 0xA0A2, 0xC82B, 0xA0A3,
- 0xC82C, 0xC1AA, 0xC82D, 0xC1AB, 0xC82E, 0xA0A4, 0xC82F, 0xC1AC, 0xC830, 0xA0A5, 0xC831, 0xC1AD, 0xC832, 0xA0A6, 0xC833, 0xA0A7,
- 0xC834, 0xA0A8, 0xC835, 0xA0A9, 0xC836, 0xA0AA, 0xC837, 0xA0AB, 0xC838, 0xC1AE, 0xC839, 0xA0AC, 0xC83A, 0xA0AD, 0xC83B, 0xA0AE,
- 0xC83C, 0xC1AF, 0xC83D, 0xA0AF, 0xC83E, 0xA0B0, 0xC83F, 0xA0B1, 0xC840, 0xC1B0, 0xC841, 0xA0B2, 0xC842, 0xA0B3, 0xC843, 0xA0B4,
- 0xC844, 0xA0B5, 0xC845, 0xA0B6, 0xC846, 0xA0B7, 0xC847, 0xA0B8, 0xC848, 0xC1B1, 0xC849, 0xC1B2, 0xC84A, 0xA0B9, 0xC84B, 0xA0BA,
- 0xC84C, 0xC1B3, 0xC84D, 0xC1B4, 0xC84E, 0xA0BB, 0xC84F, 0xA0BC, 0xC850, 0xA0BD, 0xC851, 0xA0BE, 0xC852, 0xA0BF, 0xC853, 0xA0C0,
- 0xC854, 0xC1B5, 0xC855, 0xA0C1, 0xC856, 0xA0C2, 0xC857, 0xA0C3, 0xC858, 0xA0C4, 0xC859, 0xA0C5, 0xC85A, 0xA0C6, 0xC85B, 0xA0C7,
- 0xC85C, 0xA0C8, 0xC85D, 0xA0C9, 0xC85E, 0xA0CA, 0xC85F, 0xA0CB, 0xC860, 0xA0CC, 0xC861, 0xA0CD, 0xC862, 0xA0CE, 0xC863, 0xA0CF,
- 0xC864, 0xA0D0, 0xC865, 0xA0D1, 0xC866, 0xA0D2, 0xC867, 0xA0D3, 0xC868, 0xA0D4, 0xC869, 0xA0D5, 0xC86A, 0xA0D6, 0xC86B, 0xA0D7,
- 0xC86C, 0xA0D8, 0xC86D, 0xA0D9, 0xC86E, 0xA0DA, 0xC86F, 0xA0DB, 0xC870, 0xC1B6, 0xC871, 0xC1B7, 0xC872, 0xA0DC, 0xC873, 0xA0DD,
- 0xC874, 0xC1B8, 0xC875, 0xA0DE, 0xC876, 0xA0DF, 0xC877, 0xA0E0, 0xC878, 0xC1B9, 0xC879, 0xA0E1, 0xC87A, 0xC1BA, 0xC87B, 0xA0E2,
- 0xC87C, 0xA0E3, 0xC87D, 0xA0E4, 0xC87E, 0xA0E5, 0xC87F, 0xA0E6, 0xC880, 0xC1BB, 0xC881, 0xC1BC, 0xC882, 0xA0E7, 0xC883, 0xC1BD,
- 0xC884, 0xA0E8, 0xC885, 0xC1BE, 0xC886, 0xC1BF, 0xC887, 0xC1C0, 0xC888, 0xA0E9, 0xC889, 0xA0EA, 0xC88A, 0xA0EB, 0xC88B, 0xC1C1,
- 0xC88C, 0xC1C2, 0xC88D, 0xC1C3, 0xC88E, 0xA0EC, 0xC88F, 0xA0ED, 0xC890, 0xA0EE, 0xC891, 0xA0EF, 0xC892, 0xA0F0, 0xC893, 0xA0F1,
- 0xC894, 0xC1C4, 0xC895, 0xA0F2, 0xC896, 0xA0F3, 0xC897, 0xA0F4, 0xC898, 0xA0F5, 0xC899, 0xA0F6, 0xC89A, 0xA0F7, 0xC89B, 0xA0F8,
- 0xC89C, 0xA0F9, 0xC89D, 0xC1C5, 0xC89E, 0xA0FA, 0xC89F, 0xC1C6, 0xC8A0, 0xA0FB, 0xC8A1, 0xC1C7, 0xC8A2, 0xA0FC, 0xC8A3, 0xA0FD,
- 0xC8A4, 0xA0FE, 0xC8A5, 0xA141, 0xC8A6, 0xA142, 0xC8A7, 0xA143, 0xC8A8, 0xC1C8, 0xC8A9, 0xA144, 0xC8AA, 0xA145, 0xC8AB, 0xA146,
- 0xC8AC, 0xA147, 0xC8AD, 0xA148, 0xC8AE, 0xA149, 0xC8AF, 0xA14A, 0xC8B0, 0xA14B, 0xC8B1, 0xA14C, 0xC8B2, 0xA14D, 0xC8B3, 0xA14E,
- 0xC8B4, 0xA14F, 0xC8B5, 0xA150, 0xC8B6, 0xA151, 0xC8B7, 0xA152, 0xC8B8, 0xA153, 0xC8B9, 0xA154, 0xC8BA, 0xA155, 0xC8BB, 0xA156,
- 0xC8BC, 0xC1C9, 0xC8BD, 0xC1CA, 0xC8BE, 0xA157, 0xC8BF, 0xA158, 0xC8C0, 0xA159, 0xC8C1, 0xA15A, 0xC8C2, 0xA161, 0xC8C3, 0xA162,
- 0xC8C4, 0xC1CB, 0xC8C5, 0xA163, 0xC8C6, 0xA164, 0xC8C7, 0xA165, 0xC8C8, 0xC1CC, 0xC8C9, 0xA166, 0xC8CA, 0xA167, 0xC8CB, 0xA168,
- 0xC8CC, 0xC1CD, 0xC8CD, 0xA169, 0xC8CE, 0xA16A, 0xC8CF, 0xA16B, 0xC8D0, 0xA16C, 0xC8D1, 0xA16D, 0xC8D2, 0xA16E, 0xC8D3, 0xA16F,
- 0xC8D4, 0xC1CE, 0xC8D5, 0xC1CF, 0xC8D6, 0xA170, 0xC8D7, 0xC1D0, 0xC8D8, 0xA171, 0xC8D9, 0xC1D1, 0xC8DA, 0xA172, 0xC8DB, 0xA173,
- 0xC8DC, 0xA174, 0xC8DD, 0xA175, 0xC8DE, 0xA176, 0xC8DF, 0xA177, 0xC8E0, 0xC1D2, 0xC8E1, 0xC1D3, 0xC8E2, 0xA178, 0xC8E3, 0xA179,
- 0xC8E4, 0xC1D4, 0xC8E5, 0xA17A, 0xC8E6, 0xA181, 0xC8E7, 0xA182, 0xC8E8, 0xA183, 0xC8E9, 0xA184, 0xC8EA, 0xA185, 0xC8EB, 0xA186,
- 0xC8EC, 0xA187, 0xC8ED, 0xA188, 0xC8EE, 0xA189, 0xC8EF, 0xA18A, 0xC8F0, 0xA18B, 0xC8F1, 0xA18C, 0xC8F2, 0xA18D, 0xC8F3, 0xA18E,
- 0xC8F4, 0xA18F, 0xC8F5, 0xC1D5, 0xC8F6, 0xA190, 0xC8F7, 0xA191, 0xC8F8, 0xA192, 0xC8F9, 0xA193, 0xC8FA, 0xA194, 0xC8FB, 0xA195,
- 0xC8FC, 0xC1D6, 0xC8FD, 0xC1D7, 0xC8FE, 0xA196, 0xC8FF, 0xA197, 0xC900, 0xC1D8, 0xC901, 0xA198, 0xC902, 0xA199, 0xC903, 0xA19A,
- 0xC904, 0xC1D9, 0xC905, 0xC1DA, 0xC906, 0xC1DB, 0xC907, 0xA19B, 0xC908, 0xA19C, 0xC909, 0xA19D, 0xC90A, 0xA19E, 0xC90B, 0xA19F,
- 0xC90C, 0xC1DC, 0xC90D, 0xC1DD, 0xC90E, 0xA1A0, 0xC90F, 0xC1DE, 0xC910, 0xA241, 0xC911, 0xC1DF, 0xC912, 0xA242, 0xC913, 0xA243,
- 0xC914, 0xA244, 0xC915, 0xA245, 0xC916, 0xA246, 0xC917, 0xA247, 0xC918, 0xC1E0, 0xC919, 0xA248, 0xC91A, 0xA249, 0xC91B, 0xA24A,
- 0xC91C, 0xA24B, 0xC91D, 0xA24C, 0xC91E, 0xA24D, 0xC91F, 0xA24E, 0xC920, 0xA24F, 0xC921, 0xA250, 0xC922, 0xA251, 0xC923, 0xA252,
- 0xC924, 0xA253, 0xC925, 0xA254, 0xC926, 0xA255, 0xC927, 0xA256, 0xC928, 0xA257, 0xC929, 0xA258, 0xC92A, 0xA259, 0xC92B, 0xA25A,
- 0xC92C, 0xC1E1, 0xC92D, 0xA261, 0xC92E, 0xA262, 0xC92F, 0xA263, 0xC930, 0xA264, 0xC931, 0xA265, 0xC932, 0xA266, 0xC933, 0xA267,
- 0xC934, 0xC1E2, 0xC935, 0xA268, 0xC936, 0xA269, 0xC937, 0xA26A, 0xC938, 0xA26B, 0xC939, 0xA26C, 0xC93A, 0xA26D, 0xC93B, 0xA26E,
- 0xC93C, 0xA26F, 0xC93D, 0xA270, 0xC93E, 0xA271, 0xC93F, 0xA272, 0xC940, 0xA273, 0xC941, 0xA274, 0xC942, 0xA275, 0xC943, 0xA276,
- 0xC944, 0xA277, 0xC945, 0xA278, 0xC946, 0xA279, 0xC947, 0xA27A, 0xC948, 0xA281, 0xC949, 0xA282, 0xC94A, 0xA283, 0xC94B, 0xA284,
- 0xC94C, 0xA285, 0xC94D, 0xA286, 0xC94E, 0xA287, 0xC94F, 0xA288, 0xC950, 0xC1E3, 0xC951, 0xC1E4, 0xC952, 0xA289, 0xC953, 0xA28A,
- 0xC954, 0xC1E5, 0xC955, 0xA28B, 0xC956, 0xA28C, 0xC957, 0xA28D, 0xC958, 0xC1E6, 0xC959, 0xA28E, 0xC95A, 0xA28F, 0xC95B, 0xA290,
- 0xC95C, 0xA291, 0xC95D, 0xA292, 0xC95E, 0xA293, 0xC95F, 0xA294, 0xC960, 0xC1E7, 0xC961, 0xC1E8, 0xC962, 0xA295, 0xC963, 0xC1E9,
- 0xC964, 0xA296, 0xC965, 0xA297, 0xC966, 0xA298, 0xC967, 0xA299, 0xC968, 0xA29A, 0xC969, 0xA29B, 0xC96A, 0xA29C, 0xC96B, 0xA29D,
- 0xC96C, 0xC1EA, 0xC96D, 0xA29E, 0xC96E, 0xA29F, 0xC96F, 0xA2A0, 0xC970, 0xC1EB, 0xC971, 0xA341, 0xC972, 0xA342, 0xC973, 0xA343,
- 0xC974, 0xC1EC, 0xC975, 0xA344, 0xC976, 0xA345, 0xC977, 0xA346, 0xC978, 0xA347, 0xC979, 0xA348, 0xC97A, 0xA349, 0xC97B, 0xA34A,
- 0xC97C, 0xC1ED, 0xC97D, 0xA34B, 0xC97E, 0xA34C, 0xC97F, 0xA34D, 0xC980, 0xA34E, 0xC981, 0xA34F, 0xC982, 0xA350, 0xC983, 0xA351,
- 0xC984, 0xA352, 0xC985, 0xA353, 0xC986, 0xA354, 0xC987, 0xA355, 0xC988, 0xC1EE, 0xC989, 0xC1EF, 0xC98A, 0xA356, 0xC98B, 0xA357,
- 0xC98C, 0xC1F0, 0xC98D, 0xA358, 0xC98E, 0xA359, 0xC98F, 0xA35A, 0xC990, 0xC1F1, 0xC991, 0xA361, 0xC992, 0xA362, 0xC993, 0xA363,
- 0xC994, 0xA364, 0xC995, 0xA365, 0xC996, 0xA366, 0xC997, 0xA367, 0xC998, 0xC1F2, 0xC999, 0xC1F3, 0xC99A, 0xA368, 0xC99B, 0xC1F4,
- 0xC99C, 0xA369, 0xC99D, 0xC1F5, 0xC99E, 0xA36A, 0xC99F, 0xA36B, 0xC9A0, 0xA36C, 0xC9A1, 0xA36D, 0xC9A2, 0xA36E, 0xC9A3, 0xA36F,
- 0xC9A4, 0xA370, 0xC9A5, 0xA371, 0xC9A6, 0xA372, 0xC9A7, 0xA373, 0xC9A8, 0xA374, 0xC9A9, 0xA375, 0xC9AA, 0xA376, 0xC9AB, 0xA377,
- 0xC9AC, 0xA378, 0xC9AD, 0xA379, 0xC9AE, 0xA37A, 0xC9AF, 0xA381, 0xC9B0, 0xA382, 0xC9B1, 0xA383, 0xC9B2, 0xA384, 0xC9B3, 0xA385,
- 0xC9B4, 0xA386, 0xC9B5, 0xA387, 0xC9B6, 0xA388, 0xC9B7, 0xA389, 0xC9B8, 0xA38A, 0xC9B9, 0xA38B, 0xC9BA, 0xA38C, 0xC9BB, 0xA38D,
- 0xC9BC, 0xA38E, 0xC9BD, 0xA38F, 0xC9BE, 0xA390, 0xC9BF, 0xA391, 0xC9C0, 0xC1F6, 0xC9C1, 0xC1F7, 0xC9C2, 0xA392, 0xC9C3, 0xA393,
- 0xC9C4, 0xC1F8, 0xC9C5, 0xA394, 0xC9C6, 0xA395, 0xC9C7, 0xC1F9, 0xC9C8, 0xC1FA, 0xC9C9, 0xA396, 0xC9CA, 0xC1FB, 0xC9CB, 0xA397,
- 0xC9CC, 0xA398, 0xC9CD, 0xA399, 0xC9CE, 0xA39A, 0xC9CF, 0xA39B, 0xC9D0, 0xC1FC, 0xC9D1, 0xC1FD, 0xC9D2, 0xA39C, 0xC9D3, 0xC1FE,
- 0xC9D4, 0xA39D, 0xC9D5, 0xC2A1, 0xC9D6, 0xC2A2, 0xC9D7, 0xA39E, 0xC9D8, 0xA39F, 0xC9D9, 0xC2A3, 0xC9DA, 0xC2A4, 0xC9DB, 0xA3A0,
- 0xC9DC, 0xC2A5, 0xC9DD, 0xC2A6, 0xC9DE, 0xA441, 0xC9DF, 0xA442, 0xC9E0, 0xC2A7, 0xC9E1, 0xA443, 0xC9E2, 0xC2A8, 0xC9E3, 0xA444,
- 0xC9E4, 0xC2A9, 0xC9E5, 0xA445, 0xC9E6, 0xA446, 0xC9E7, 0xC2AA, 0xC9E8, 0xA447, 0xC9E9, 0xA448, 0xC9EA, 0xA449, 0xC9EB, 0xA44A,
- 0xC9EC, 0xC2AB, 0xC9ED, 0xC2AC, 0xC9EE, 0xA44B, 0xC9EF, 0xC2AD, 0xC9F0, 0xC2AE, 0xC9F1, 0xC2AF, 0xC9F2, 0xA44C, 0xC9F3, 0xA44D,
- 0xC9F4, 0xA44E, 0xC9F5, 0xA44F, 0xC9F6, 0xA450, 0xC9F7, 0xA451, 0xC9F8, 0xC2B0, 0xC9F9, 0xC2B1, 0xC9FA, 0xA452, 0xC9FB, 0xA453,
- 0xC9FC, 0xC2B2, 0xC9FD, 0xA454, 0xC9FE, 0xA455, 0xC9FF, 0xA456, 0xCA00, 0xC2B3, 0xCA01, 0xA457, 0xCA02, 0xA458, 0xCA03, 0xA459,
- 0xCA04, 0xA45A, 0xCA05, 0xA461, 0xCA06, 0xA462, 0xCA07, 0xA463, 0xCA08, 0xC2B4, 0xCA09, 0xC2B5, 0xCA0A, 0xA464, 0xCA0B, 0xC2B6,
- 0xCA0C, 0xC2B7, 0xCA0D, 0xC2B8, 0xCA0E, 0xA465, 0xCA0F, 0xA466, 0xCA10, 0xA467, 0xCA11, 0xA468, 0xCA12, 0xA469, 0xCA13, 0xA46A,
- 0xCA14, 0xC2B9, 0xCA15, 0xA46B, 0xCA16, 0xA46C, 0xCA17, 0xA46D, 0xCA18, 0xC2BA, 0xCA19, 0xA46E, 0xCA1A, 0xA46F, 0xCA1B, 0xA470,
- 0xCA1C, 0xA471, 0xCA1D, 0xA472, 0xCA1E, 0xA473, 0xCA1F, 0xA474, 0xCA20, 0xA475, 0xCA21, 0xA476, 0xCA22, 0xA477, 0xCA23, 0xA478,
- 0xCA24, 0xA479, 0xCA25, 0xA47A, 0xCA26, 0xA481, 0xCA27, 0xA482, 0xCA28, 0xA483, 0xCA29, 0xC2BB, 0xCA2A, 0xA484, 0xCA2B, 0xA485,
- 0xCA2C, 0xA486, 0xCA2D, 0xA487, 0xCA2E, 0xA488, 0xCA2F, 0xA489, 0xCA30, 0xA48A, 0xCA31, 0xA48B, 0xCA32, 0xA48C, 0xCA33, 0xA48D,
- 0xCA34, 0xA48E, 0xCA35, 0xA48F, 0xCA36, 0xA490, 0xCA37, 0xA491, 0xCA38, 0xA492, 0xCA39, 0xA493, 0xCA3A, 0xA494, 0xCA3B, 0xA495,
- 0xCA3C, 0xA496, 0xCA3D, 0xA497, 0xCA3E, 0xA498, 0xCA3F, 0xA499, 0xCA40, 0xA49A, 0xCA41, 0xA49B, 0xCA42, 0xA49C, 0xCA43, 0xA49D,
- 0xCA44, 0xA49E, 0xCA45, 0xA49F, 0xCA46, 0xA4A0, 0xCA47, 0xA541, 0xCA48, 0xA542, 0xCA49, 0xA543, 0xCA4A, 0xA544, 0xCA4B, 0xA545,
- 0xCA4C, 0xC2BC, 0xCA4D, 0xC2BD, 0xCA4E, 0xA546, 0xCA4F, 0xA547, 0xCA50, 0xC2BE, 0xCA51, 0xA548, 0xCA52, 0xA549, 0xCA53, 0xA54A,
- 0xCA54, 0xC2BF, 0xCA55, 0xA54B, 0xCA56, 0xA54C, 0xCA57, 0xA54D, 0xCA58, 0xA54E, 0xCA59, 0xA54F, 0xCA5A, 0xA550, 0xCA5B, 0xA551,
- 0xCA5C, 0xC2C0, 0xCA5D, 0xC2C1, 0xCA5E, 0xA552, 0xCA5F, 0xC2C2, 0xCA60, 0xC2C3, 0xCA61, 0xC2C4, 0xCA62, 0xA553, 0xCA63, 0xA554,
- 0xCA64, 0xA555, 0xCA65, 0xA556, 0xCA66, 0xA557, 0xCA67, 0xA558, 0xCA68, 0xC2C5, 0xCA69, 0xA559, 0xCA6A, 0xA55A, 0xCA6B, 0xA561,
- 0xCA6C, 0xA562, 0xCA6D, 0xA563, 0xCA6E, 0xA564, 0xCA6F, 0xA565, 0xCA70, 0xA566, 0xCA71, 0xA567, 0xCA72, 0xA568, 0xCA73, 0xA569,
- 0xCA74, 0xA56A, 0xCA75, 0xA56B, 0xCA76, 0xA56C, 0xCA77, 0xA56D, 0xCA78, 0xA56E, 0xCA79, 0xA56F, 0xCA7A, 0xA570, 0xCA7B, 0xA571,
- 0xCA7C, 0xA572, 0xCA7D, 0xC2C6, 0xCA7E, 0xA573, 0xCA7F, 0xA574, 0xCA80, 0xA575, 0xCA81, 0xA576, 0xCA82, 0xA577, 0xCA83, 0xA578,
- 0xCA84, 0xC2C7, 0xCA85, 0xA579, 0xCA86, 0xA57A, 0xCA87, 0xA581, 0xCA88, 0xA582, 0xCA89, 0xA583, 0xCA8A, 0xA584, 0xCA8B, 0xA585,
- 0xCA8C, 0xA586, 0xCA8D, 0xA587, 0xCA8E, 0xA588, 0xCA8F, 0xA589, 0xCA90, 0xA58A, 0xCA91, 0xA58B, 0xCA92, 0xA58C, 0xCA93, 0xA58D,
- 0xCA94, 0xA58E, 0xCA95, 0xA58F, 0xCA96, 0xA590, 0xCA97, 0xA591, 0xCA98, 0xC2C8, 0xCA99, 0xA592, 0xCA9A, 0xA593, 0xCA9B, 0xA594,
- 0xCA9C, 0xA595, 0xCA9D, 0xA596, 0xCA9E, 0xA597, 0xCA9F, 0xA598, 0xCAA0, 0xA599, 0xCAA1, 0xA59A, 0xCAA2, 0xA59B, 0xCAA3, 0xA59C,
- 0xCAA4, 0xA59D, 0xCAA5, 0xA59E, 0xCAA6, 0xA59F, 0xCAA7, 0xA5A0, 0xCAA8, 0xA641, 0xCAA9, 0xA642, 0xCAAA, 0xA643, 0xCAAB, 0xA644,
- 0xCAAC, 0xA645, 0xCAAD, 0xA646, 0xCAAE, 0xA647, 0xCAAF, 0xA648, 0xCAB0, 0xA649, 0xCAB1, 0xA64A, 0xCAB2, 0xA64B, 0xCAB3, 0xA64C,
- 0xCAB4, 0xA64D, 0xCAB5, 0xA64E, 0xCAB6, 0xA64F, 0xCAB7, 0xA650, 0xCAB8, 0xA651, 0xCAB9, 0xA652, 0xCABA, 0xA653, 0xCABB, 0xA654,
- 0xCABC, 0xC2C9, 0xCABD, 0xC2CA, 0xCABE, 0xA655, 0xCABF, 0xA656, 0xCAC0, 0xC2CB, 0xCAC1, 0xA657, 0xCAC2, 0xA658, 0xCAC3, 0xA659,
- 0xCAC4, 0xC2CC, 0xCAC5, 0xA65A, 0xCAC6, 0xA661, 0xCAC7, 0xA662, 0xCAC8, 0xA663, 0xCAC9, 0xA664, 0xCACA, 0xA665, 0xCACB, 0xA666,
- 0xCACC, 0xC2CD, 0xCACD, 0xC2CE, 0xCACE, 0xA667, 0xCACF, 0xC2CF, 0xCAD0, 0xA668, 0xCAD1, 0xC2D0, 0xCAD2, 0xA669, 0xCAD3, 0xC2D1,
- 0xCAD4, 0xA66A, 0xCAD5, 0xA66B, 0xCAD6, 0xA66C, 0xCAD7, 0xA66D, 0xCAD8, 0xC2D2, 0xCAD9, 0xC2D3, 0xCADA, 0xA66E, 0xCADB, 0xA66F,
- 0xCADC, 0xA670, 0xCADD, 0xA671, 0xCADE, 0xA672, 0xCADF, 0xA673, 0xCAE0, 0xC2D4, 0xCAE1, 0xA674, 0xCAE2, 0xA675, 0xCAE3, 0xA676,
- 0xCAE4, 0xA677, 0xCAE5, 0xA678, 0xCAE6, 0xA679, 0xCAE7, 0xA67A, 0xCAE8, 0xA681, 0xCAE9, 0xA682, 0xCAEA, 0xA683, 0xCAEB, 0xA684,
- 0xCAEC, 0xC2D5, 0xCAED, 0xA685, 0xCAEE, 0xA686, 0xCAEF, 0xA687, 0xCAF0, 0xA688, 0xCAF1, 0xA689, 0xCAF2, 0xA68A, 0xCAF3, 0xA68B,
- 0xCAF4, 0xC2D6, 0xCAF5, 0xA68C, 0xCAF6, 0xA68D, 0xCAF7, 0xA68E, 0xCAF8, 0xA68F, 0xCAF9, 0xA690, 0xCAFA, 0xA691, 0xCAFB, 0xA692,
- 0xCAFC, 0xA693, 0xCAFD, 0xA694, 0xCAFE, 0xA695, 0xCAFF, 0xA696, 0xCB00, 0xA697, 0xCB01, 0xA698, 0xCB02, 0xA699, 0xCB03, 0xA69A,
- 0xCB04, 0xA69B, 0xCB05, 0xA69C, 0xCB06, 0xA69D, 0xCB07, 0xA69E, 0xCB08, 0xC2D7, 0xCB09, 0xA69F, 0xCB0A, 0xA6A0, 0xCB0B, 0xA741,
- 0xCB0C, 0xA742, 0xCB0D, 0xA743, 0xCB0E, 0xA744, 0xCB0F, 0xA745, 0xCB10, 0xC2D8, 0xCB11, 0xA746, 0xCB12, 0xA747, 0xCB13, 0xA748,
- 0xCB14, 0xC2D9, 0xCB15, 0xA749, 0xCB16, 0xA74A, 0xCB17, 0xA74B, 0xCB18, 0xC2DA, 0xCB19, 0xA74C, 0xCB1A, 0xA74D, 0xCB1B, 0xA74E,
- 0xCB1C, 0xA74F, 0xCB1D, 0xA750, 0xCB1E, 0xA751, 0xCB1F, 0xA752, 0xCB20, 0xC2DB, 0xCB21, 0xC2DC, 0xCB22, 0xA753, 0xCB23, 0xA754,
- 0xCB24, 0xA755, 0xCB25, 0xA756, 0xCB26, 0xA757, 0xCB27, 0xA758, 0xCB28, 0xA759, 0xCB29, 0xA75A, 0xCB2A, 0xA761, 0xCB2B, 0xA762,
- 0xCB2C, 0xA763, 0xCB2D, 0xA764, 0xCB2E, 0xA765, 0xCB2F, 0xA766, 0xCB30, 0xA767, 0xCB31, 0xA768, 0xCB32, 0xA769, 0xCB33, 0xA76A,
- 0xCB34, 0xA76B, 0xCB35, 0xA76C, 0xCB36, 0xA76D, 0xCB37, 0xA76E, 0xCB38, 0xA76F, 0xCB39, 0xA770, 0xCB3A, 0xA771, 0xCB3B, 0xA772,
- 0xCB3C, 0xA773, 0xCB3D, 0xA774, 0xCB3E, 0xA775, 0xCB3F, 0xA776, 0xCB40, 0xA777, 0xCB41, 0xC2DD, 0xCB42, 0xA778, 0xCB43, 0xA779,
- 0xCB44, 0xA77A, 0xCB45, 0xA781, 0xCB46, 0xA782, 0xCB47, 0xA783, 0xCB48, 0xC2DE, 0xCB49, 0xC2DF, 0xCB4A, 0xA784, 0xCB4B, 0xA785,
- 0xCB4C, 0xC2E0, 0xCB4D, 0xA786, 0xCB4E, 0xA787, 0xCB4F, 0xA788, 0xCB50, 0xC2E1, 0xCB51, 0xA789, 0xCB52, 0xA78A, 0xCB53, 0xA78B,
- 0xCB54, 0xA78C, 0xCB55, 0xA78D, 0xCB56, 0xA78E, 0xCB57, 0xA78F, 0xCB58, 0xC2E2, 0xCB59, 0xC2E3, 0xCB5A, 0xA790, 0xCB5B, 0xA791,
- 0xCB5C, 0xA792, 0xCB5D, 0xC2E4, 0xCB5E, 0xA793, 0xCB5F, 0xA794, 0xCB60, 0xA795, 0xCB61, 0xA796, 0xCB62, 0xA797, 0xCB63, 0xA798,
- 0xCB64, 0xC2E5, 0xCB65, 0xA799, 0xCB66, 0xA79A, 0xCB67, 0xA79B, 0xCB68, 0xA79C, 0xCB69, 0xA79D, 0xCB6A, 0xA79E, 0xCB6B, 0xA79F,
- 0xCB6C, 0xA7A0, 0xCB6D, 0xA841, 0xCB6E, 0xA842, 0xCB6F, 0xA843, 0xCB70, 0xA844, 0xCB71, 0xA845, 0xCB72, 0xA846, 0xCB73, 0xA847,
- 0xCB74, 0xA848, 0xCB75, 0xA849, 0xCB76, 0xA84A, 0xCB77, 0xA84B, 0xCB78, 0xC2E6, 0xCB79, 0xC2E7, 0xCB7A, 0xA84C, 0xCB7B, 0xA84D,
- 0xCB7C, 0xA84E, 0xCB7D, 0xA84F, 0xCB7E, 0xA850, 0xCB7F, 0xA851, 0xCB80, 0xA852, 0xCB81, 0xA853, 0xCB82, 0xA854, 0xCB83, 0xA855,
- 0xCB84, 0xA856, 0xCB85, 0xA857, 0xCB86, 0xA858, 0xCB87, 0xA859, 0xCB88, 0xA85A, 0xCB89, 0xA861, 0xCB8A, 0xA862, 0xCB8B, 0xA863,
- 0xCB8C, 0xA864, 0xCB8D, 0xA865, 0xCB8E, 0xA866, 0xCB8F, 0xA867, 0xCB90, 0xA868, 0xCB91, 0xA869, 0xCB92, 0xA86A, 0xCB93, 0xA86B,
- 0xCB94, 0xA86C, 0xCB95, 0xA86D, 0xCB96, 0xA86E, 0xCB97, 0xA86F, 0xCB98, 0xA870, 0xCB99, 0xA871, 0xCB9A, 0xA872, 0xCB9B, 0xA873,
- 0xCB9C, 0xC2E8, 0xCB9D, 0xA874, 0xCB9E, 0xA875, 0xCB9F, 0xA876, 0xCBA0, 0xA877, 0xCBA1, 0xA878, 0xCBA2, 0xA879, 0xCBA3, 0xA87A,
- 0xCBA4, 0xA881, 0xCBA5, 0xA882, 0xCBA6, 0xA883, 0xCBA7, 0xA884, 0xCBA8, 0xA885, 0xCBA9, 0xA886, 0xCBAA, 0xA887, 0xCBAB, 0xA888,
- 0xCBAC, 0xA889, 0xCBAD, 0xA88A, 0xCBAE, 0xA88B, 0xCBAF, 0xA88C, 0xCBB0, 0xA88D, 0xCBB1, 0xA88E, 0xCBB2, 0xA88F, 0xCBB3, 0xA890,
- 0xCBB4, 0xA891, 0xCBB5, 0xA892, 0xCBB6, 0xA893, 0xCBB7, 0xA894, 0xCBB8, 0xC2E9, 0xCBB9, 0xA895, 0xCBBA, 0xA896, 0xCBBB, 0xA897,
- 0xCBBC, 0xA898, 0xCBBD, 0xA899, 0xCBBE, 0xA89A, 0xCBBF, 0xA89B, 0xCBC0, 0xA89C, 0xCBC1, 0xA89D, 0xCBC2, 0xA89E, 0xCBC3, 0xA89F,
- 0xCBC4, 0xA8A0, 0xCBC5, 0xA941, 0xCBC6, 0xA942, 0xCBC7, 0xA943, 0xCBC8, 0xA944, 0xCBC9, 0xA945, 0xCBCA, 0xA946, 0xCBCB, 0xA947,
- 0xCBCC, 0xA948, 0xCBCD, 0xA949, 0xCBCE, 0xA94A, 0xCBCF, 0xA94B, 0xCBD0, 0xA94C, 0xCBD1, 0xA94D, 0xCBD2, 0xA94E, 0xCBD3, 0xA94F,
- 0xCBD4, 0xC2EA, 0xCBD5, 0xA950, 0xCBD6, 0xA951, 0xCBD7, 0xA952, 0xCBD8, 0xA953, 0xCBD9, 0xA954, 0xCBDA, 0xA955, 0xCBDB, 0xA956,
- 0xCBDC, 0xA957, 0xCBDD, 0xA958, 0xCBDE, 0xA959, 0xCBDF, 0xA95A, 0xCBE0, 0xA961, 0xCBE1, 0xA962, 0xCBE2, 0xA963, 0xCBE3, 0xA964,
- 0xCBE4, 0xC2EB, 0xCBE5, 0xA965, 0xCBE6, 0xA966, 0xCBE7, 0xC2EC, 0xCBE8, 0xA967, 0xCBE9, 0xC2ED, 0xCBEA, 0xA968, 0xCBEB, 0xA969,
- 0xCBEC, 0xA96A, 0xCBED, 0xA96B, 0xCBEE, 0xA96C, 0xCBEF, 0xA96D, 0xCBF0, 0xA96E, 0xCBF1, 0xA96F, 0xCBF2, 0xA970, 0xCBF3, 0xA971,
- 0xCBF4, 0xA972, 0xCBF5, 0xA973, 0xCBF6, 0xA974, 0xCBF7, 0xA975, 0xCBF8, 0xA976, 0xCBF9, 0xA977, 0xCBFA, 0xA978, 0xCBFB, 0xA979,
- 0xCBFC, 0xA97A, 0xCBFD, 0xA981, 0xCBFE, 0xA982, 0xCBFF, 0xA983, 0xCC00, 0xA984, 0xCC01, 0xA985, 0xCC02, 0xA986, 0xCC03, 0xA987,
- 0xCC04, 0xA988, 0xCC05, 0xA989, 0xCC06, 0xA98A, 0xCC07, 0xA98B, 0xCC08, 0xA98C, 0xCC09, 0xA98D, 0xCC0A, 0xA98E, 0xCC0B, 0xA98F,
- 0xCC0C, 0xC2EE, 0xCC0D, 0xC2EF, 0xCC0E, 0xA990, 0xCC0F, 0xA991, 0xCC10, 0xC2F0, 0xCC11, 0xA992, 0xCC12, 0xA993, 0xCC13, 0xA994,
- 0xCC14, 0xC2F1, 0xCC15, 0xA995, 0xCC16, 0xA996, 0xCC17, 0xA997, 0xCC18, 0xA998, 0xCC19, 0xA999, 0xCC1A, 0xA99A, 0xCC1B, 0xA99B,
- 0xCC1C, 0xC2F2, 0xCC1D, 0xC2F3, 0xCC1E, 0xA99C, 0xCC1F, 0xA99D, 0xCC20, 0xA99E, 0xCC21, 0xC2F4, 0xCC22, 0xC2F5, 0xCC23, 0xA99F,
- 0xCC24, 0xA9A0, 0xCC25, 0xAA41, 0xCC26, 0xAA42, 0xCC27, 0xC2F6, 0xCC28, 0xC2F7, 0xCC29, 0xC2F8, 0xCC2A, 0xAA43, 0xCC2B, 0xAA44,
- 0xCC2C, 0xC2F9, 0xCC2D, 0xAA45, 0xCC2E, 0xC2FA, 0xCC2F, 0xAA46, 0xCC30, 0xC2FB, 0xCC31, 0xAA47, 0xCC32, 0xAA48, 0xCC33, 0xAA49,
- 0xCC34, 0xAA4A, 0xCC35, 0xAA4B, 0xCC36, 0xAA4C, 0xCC37, 0xAA4D, 0xCC38, 0xC2FC, 0xCC39, 0xC2FD, 0xCC3A, 0xAA4E, 0xCC3B, 0xC2FE,
- 0xCC3C, 0xC3A1, 0xCC3D, 0xC3A2, 0xCC3E, 0xC3A3, 0xCC3F, 0xAA4F, 0xCC40, 0xAA50, 0xCC41, 0xAA51, 0xCC42, 0xAA52, 0xCC43, 0xAA53,
- 0xCC44, 0xC3A4, 0xCC45, 0xC3A5, 0xCC46, 0xAA54, 0xCC47, 0xAA55, 0xCC48, 0xC3A6, 0xCC49, 0xAA56, 0xCC4A, 0xAA57, 0xCC4B, 0xAA58,
- 0xCC4C, 0xC3A7, 0xCC4D, 0xAA59, 0xCC4E, 0xAA5A, 0xCC4F, 0xAA61, 0xCC50, 0xAA62, 0xCC51, 0xAA63, 0xCC52, 0xAA64, 0xCC53, 0xAA65,
- 0xCC54, 0xC3A8, 0xCC55, 0xC3A9, 0xCC56, 0xAA66, 0xCC57, 0xC3AA, 0xCC58, 0xC3AB, 0xCC59, 0xC3AC, 0xCC5A, 0xAA67, 0xCC5B, 0xAA68,
- 0xCC5C, 0xAA69, 0xCC5D, 0xAA6A, 0xCC5E, 0xAA6B, 0xCC5F, 0xAA6C, 0xCC60, 0xC3AD, 0xCC61, 0xAA6D, 0xCC62, 0xAA6E, 0xCC63, 0xAA6F,
- 0xCC64, 0xC3AE, 0xCC65, 0xAA70, 0xCC66, 0xC3AF, 0xCC67, 0xAA71, 0xCC68, 0xC3B0, 0xCC69, 0xAA72, 0xCC6A, 0xAA73, 0xCC6B, 0xAA74,
- 0xCC6C, 0xAA75, 0xCC6D, 0xAA76, 0xCC6E, 0xAA77, 0xCC6F, 0xAA78, 0xCC70, 0xC3B1, 0xCC71, 0xAA79, 0xCC72, 0xAA7A, 0xCC73, 0xAA81,
- 0xCC74, 0xAA82, 0xCC75, 0xC3B2, 0xCC76, 0xAA83, 0xCC77, 0xAA84, 0xCC78, 0xAA85, 0xCC79, 0xAA86, 0xCC7A, 0xAA87, 0xCC7B, 0xAA88,
- 0xCC7C, 0xAA89, 0xCC7D, 0xAA8A, 0xCC7E, 0xAA8B, 0xCC7F, 0xAA8C, 0xCC80, 0xAA8D, 0xCC81, 0xAA8E, 0xCC82, 0xAA8F, 0xCC83, 0xAA90,
- 0xCC84, 0xAA91, 0xCC85, 0xAA92, 0xCC86, 0xAA93, 0xCC87, 0xAA94, 0xCC88, 0xAA95, 0xCC89, 0xAA96, 0xCC8A, 0xAA97, 0xCC8B, 0xAA98,
- 0xCC8C, 0xAA99, 0xCC8D, 0xAA9A, 0xCC8E, 0xAA9B, 0xCC8F, 0xAA9C, 0xCC90, 0xAA9D, 0xCC91, 0xAA9E, 0xCC92, 0xAA9F, 0xCC93, 0xAAA0,
- 0xCC94, 0xAB41, 0xCC95, 0xAB42, 0xCC96, 0xAB43, 0xCC97, 0xAB44, 0xCC98, 0xC3B3, 0xCC99, 0xC3B4, 0xCC9A, 0xAB45, 0xCC9B, 0xAB46,
- 0xCC9C, 0xC3B5, 0xCC9D, 0xAB47, 0xCC9E, 0xAB48, 0xCC9F, 0xAB49, 0xCCA0, 0xC3B6, 0xCCA1, 0xAB4A, 0xCCA2, 0xAB4B, 0xCCA3, 0xAB4C,
- 0xCCA4, 0xAB4D, 0xCCA5, 0xAB4E, 0xCCA6, 0xAB4F, 0xCCA7, 0xAB50, 0xCCA8, 0xC3B7, 0xCCA9, 0xC3B8, 0xCCAA, 0xAB51, 0xCCAB, 0xC3B9,
- 0xCCAC, 0xC3BA, 0xCCAD, 0xC3BB, 0xCCAE, 0xAB52, 0xCCAF, 0xAB53, 0xCCB0, 0xAB54, 0xCCB1, 0xAB55, 0xCCB2, 0xAB56, 0xCCB3, 0xAB57,
- 0xCCB4, 0xC3BC, 0xCCB5, 0xC3BD, 0xCCB6, 0xAB58, 0xCCB7, 0xAB59, 0xCCB8, 0xC3BE, 0xCCB9, 0xAB5A, 0xCCBA, 0xAB61, 0xCCBB, 0xAB62,
- 0xCCBC, 0xC3BF, 0xCCBD, 0xAB63, 0xCCBE, 0xAB64, 0xCCBF, 0xAB65, 0xCCC0, 0xAB66, 0xCCC1, 0xAB67, 0xCCC2, 0xAB68, 0xCCC3, 0xAB69,
- 0xCCC4, 0xC3C0, 0xCCC5, 0xC3C1, 0xCCC6, 0xAB6A, 0xCCC7, 0xC3C2, 0xCCC8, 0xAB6B, 0xCCC9, 0xC3C3, 0xCCCA, 0xAB6C, 0xCCCB, 0xAB6D,
- 0xCCCC, 0xAB6E, 0xCCCD, 0xAB6F, 0xCCCE, 0xAB70, 0xCCCF, 0xAB71, 0xCCD0, 0xC3C4, 0xCCD1, 0xAB72, 0xCCD2, 0xAB73, 0xCCD3, 0xAB74,
- 0xCCD4, 0xC3C5, 0xCCD5, 0xAB75, 0xCCD6, 0xAB76, 0xCCD7, 0xAB77, 0xCCD8, 0xAB78, 0xCCD9, 0xAB79, 0xCCDA, 0xAB7A, 0xCCDB, 0xAB81,
- 0xCCDC, 0xAB82, 0xCCDD, 0xAB83, 0xCCDE, 0xAB84, 0xCCDF, 0xAB85, 0xCCE0, 0xAB86, 0xCCE1, 0xAB87, 0xCCE2, 0xAB88, 0xCCE3, 0xAB89,
- 0xCCE4, 0xC3C6, 0xCCE5, 0xAB8A, 0xCCE6, 0xAB8B, 0xCCE7, 0xAB8C, 0xCCE8, 0xAB8D, 0xCCE9, 0xAB8E, 0xCCEA, 0xAB8F, 0xCCEB, 0xAB90,
- 0xCCEC, 0xC3C7, 0xCCED, 0xAB91, 0xCCEE, 0xAB92, 0xCCEF, 0xAB93, 0xCCF0, 0xC3C8, 0xCCF1, 0xAB94, 0xCCF2, 0xAB95, 0xCCF3, 0xAB96,
- 0xCCF4, 0xAB97, 0xCCF5, 0xAB98, 0xCCF6, 0xAB99, 0xCCF7, 0xAB9A, 0xCCF8, 0xAB9B, 0xCCF9, 0xAB9C, 0xCCFA, 0xAB9D, 0xCCFB, 0xAB9E,
- 0xCCFC, 0xAB9F, 0xCCFD, 0xABA0, 0xCCFE, 0xAC41, 0xCCFF, 0xAC42, 0xCD00, 0xAC43, 0xCD01, 0xC3C9, 0xCD02, 0xAC44, 0xCD03, 0xAC45,
- 0xCD04, 0xAC46, 0xCD05, 0xAC47, 0xCD06, 0xAC48, 0xCD07, 0xAC49, 0xCD08, 0xC3CA, 0xCD09, 0xC3CB, 0xCD0A, 0xAC4A, 0xCD0B, 0xAC4B,
- 0xCD0C, 0xC3CC, 0xCD0D, 0xAC4C, 0xCD0E, 0xAC4D, 0xCD0F, 0xAC4E, 0xCD10, 0xC3CD, 0xCD11, 0xAC4F, 0xCD12, 0xAC50, 0xCD13, 0xAC51,
- 0xCD14, 0xAC52, 0xCD15, 0xAC53, 0xCD16, 0xAC54, 0xCD17, 0xAC55, 0xCD18, 0xC3CE, 0xCD19, 0xC3CF, 0xCD1A, 0xAC56, 0xCD1B, 0xC3D0,
- 0xCD1C, 0xAC57, 0xCD1D, 0xC3D1, 0xCD1E, 0xAC58, 0xCD1F, 0xAC59, 0xCD20, 0xAC5A, 0xCD21, 0xAC61, 0xCD22, 0xAC62, 0xCD23, 0xAC63,
- 0xCD24, 0xC3D2, 0xCD25, 0xAC64, 0xCD26, 0xAC65, 0xCD27, 0xAC66, 0xCD28, 0xC3D3, 0xCD29, 0xAC67, 0xCD2A, 0xAC68, 0xCD2B, 0xAC69,
- 0xCD2C, 0xC3D4, 0xCD2D, 0xAC6A, 0xCD2E, 0xAC6B, 0xCD2F, 0xAC6C, 0xCD30, 0xAC6D, 0xCD31, 0xAC6E, 0xCD32, 0xAC6F, 0xCD33, 0xAC70,
- 0xCD34, 0xAC71, 0xCD35, 0xAC72, 0xCD36, 0xAC73, 0xCD37, 0xAC74, 0xCD38, 0xAC75, 0xCD39, 0xC3D5, 0xCD3A, 0xAC76, 0xCD3B, 0xAC77,
- 0xCD3C, 0xAC78, 0xCD3D, 0xAC79, 0xCD3E, 0xAC7A, 0xCD3F, 0xAC81, 0xCD40, 0xAC82, 0xCD41, 0xAC83, 0xCD42, 0xAC84, 0xCD43, 0xAC85,
- 0xCD44, 0xAC86, 0xCD45, 0xAC87, 0xCD46, 0xAC88, 0xCD47, 0xAC89, 0xCD48, 0xAC8A, 0xCD49, 0xAC8B, 0xCD4A, 0xAC8C, 0xCD4B, 0xAC8D,
- 0xCD4C, 0xAC8E, 0xCD4D, 0xAC8F, 0xCD4E, 0xAC90, 0xCD4F, 0xAC91, 0xCD50, 0xAC92, 0xCD51, 0xAC93, 0xCD52, 0xAC94, 0xCD53, 0xAC95,
- 0xCD54, 0xAC96, 0xCD55, 0xAC97, 0xCD56, 0xAC98, 0xCD57, 0xAC99, 0xCD58, 0xAC9A, 0xCD59, 0xAC9B, 0xCD5A, 0xAC9C, 0xCD5B, 0xAC9D,
- 0xCD5C, 0xC3D6, 0xCD5D, 0xAC9E, 0xCD5E, 0xAC9F, 0xCD5F, 0xACA0, 0xCD60, 0xC3D7, 0xCD61, 0xAD41, 0xCD62, 0xAD42, 0xCD63, 0xAD43,
- 0xCD64, 0xC3D8, 0xCD65, 0xAD44, 0xCD66, 0xAD45, 0xCD67, 0xAD46, 0xCD68, 0xAD47, 0xCD69, 0xAD48, 0xCD6A, 0xAD49, 0xCD6B, 0xAD4A,
- 0xCD6C, 0xC3D9, 0xCD6D, 0xC3DA, 0xCD6E, 0xAD4B, 0xCD6F, 0xC3DB, 0xCD70, 0xAD4C, 0xCD71, 0xC3DC, 0xCD72, 0xAD4D, 0xCD73, 0xAD4E,
- 0xCD74, 0xAD4F, 0xCD75, 0xAD50, 0xCD76, 0xAD51, 0xCD77, 0xAD52, 0xCD78, 0xC3DD, 0xCD79, 0xAD53, 0xCD7A, 0xAD54, 0xCD7B, 0xAD55,
- 0xCD7C, 0xAD56, 0xCD7D, 0xAD57, 0xCD7E, 0xAD58, 0xCD7F, 0xAD59, 0xCD80, 0xAD5A, 0xCD81, 0xAD61, 0xCD82, 0xAD62, 0xCD83, 0xAD63,
- 0xCD84, 0xAD64, 0xCD85, 0xAD65, 0xCD86, 0xAD66, 0xCD87, 0xAD67, 0xCD88, 0xC3DE, 0xCD89, 0xAD68, 0xCD8A, 0xAD69, 0xCD8B, 0xAD6A,
- 0xCD8C, 0xAD6B, 0xCD8D, 0xAD6C, 0xCD8E, 0xAD6D, 0xCD8F, 0xAD6E, 0xCD90, 0xAD6F, 0xCD91, 0xAD70, 0xCD92, 0xAD71, 0xCD93, 0xAD72,
- 0xCD94, 0xC3DF, 0xCD95, 0xC3E0, 0xCD96, 0xAD73, 0xCD97, 0xAD74, 0xCD98, 0xC3E1, 0xCD99, 0xAD75, 0xCD9A, 0xAD76, 0xCD9B, 0xAD77,
- 0xCD9C, 0xC3E2, 0xCD9D, 0xAD78, 0xCD9E, 0xAD79, 0xCD9F, 0xAD7A, 0xCDA0, 0xAD81, 0xCDA1, 0xAD82, 0xCDA2, 0xAD83, 0xCDA3, 0xAD84,
- 0xCDA4, 0xC3E3, 0xCDA5, 0xC3E4, 0xCDA6, 0xAD85, 0xCDA7, 0xC3E5, 0xCDA8, 0xAD86, 0xCDA9, 0xC3E6, 0xCDAA, 0xAD87, 0xCDAB, 0xAD88,
- 0xCDAC, 0xAD89, 0xCDAD, 0xAD8A, 0xCDAE, 0xAD8B, 0xCDAF, 0xAD8C, 0xCDB0, 0xC3E7, 0xCDB1, 0xAD8D, 0xCDB2, 0xAD8E, 0xCDB3, 0xAD8F,
- 0xCDB4, 0xAD90, 0xCDB5, 0xAD91, 0xCDB6, 0xAD92, 0xCDB7, 0xAD93, 0xCDB8, 0xAD94, 0xCDB9, 0xAD95, 0xCDBA, 0xAD96, 0xCDBB, 0xAD97,
- 0xCDBC, 0xAD98, 0xCDBD, 0xAD99, 0xCDBE, 0xAD9A, 0xCDBF, 0xAD9B, 0xCDC0, 0xAD9C, 0xCDC1, 0xAD9D, 0xCDC2, 0xAD9E, 0xCDC3, 0xAD9F,
- 0xCDC4, 0xC3E8, 0xCDC5, 0xADA0, 0xCDC6, 0xAE41, 0xCDC7, 0xAE42, 0xCDC8, 0xAE43, 0xCDC9, 0xAE44, 0xCDCA, 0xAE45, 0xCDCB, 0xAE46,
- 0xCDCC, 0xC3E9, 0xCDCD, 0xAE47, 0xCDCE, 0xAE48, 0xCDCF, 0xAE49, 0xCDD0, 0xC3EA, 0xCDD1, 0xAE4A, 0xCDD2, 0xAE4B, 0xCDD3, 0xAE4C,
- 0xCDD4, 0xAE4D, 0xCDD5, 0xAE4E, 0xCDD6, 0xAE4F, 0xCDD7, 0xAE50, 0xCDD8, 0xAE51, 0xCDD9, 0xAE52, 0xCDDA, 0xAE53, 0xCDDB, 0xAE54,
- 0xCDDC, 0xAE55, 0xCDDD, 0xAE56, 0xCDDE, 0xAE57, 0xCDDF, 0xAE58, 0xCDE0, 0xAE59, 0xCDE1, 0xAE5A, 0xCDE2, 0xAE61, 0xCDE3, 0xAE62,
- 0xCDE4, 0xAE63, 0xCDE5, 0xAE64, 0xCDE6, 0xAE65, 0xCDE7, 0xAE66, 0xCDE8, 0xC3EB, 0xCDE9, 0xAE67, 0xCDEA, 0xAE68, 0xCDEB, 0xAE69,
- 0xCDEC, 0xC3EC, 0xCDED, 0xAE6A, 0xCDEE, 0xAE6B, 0xCDEF, 0xAE6C, 0xCDF0, 0xC3ED, 0xCDF1, 0xAE6D, 0xCDF2, 0xAE6E, 0xCDF3, 0xAE6F,
- 0xCDF4, 0xAE70, 0xCDF5, 0xAE71, 0xCDF6, 0xAE72, 0xCDF7, 0xAE73, 0xCDF8, 0xC3EE, 0xCDF9, 0xC3EF, 0xCDFA, 0xAE74, 0xCDFB, 0xC3F0,
- 0xCDFC, 0xAE75, 0xCDFD, 0xC3F1, 0xCDFE, 0xAE76, 0xCDFF, 0xAE77, 0xCE00, 0xAE78, 0xCE01, 0xAE79, 0xCE02, 0xAE7A, 0xCE03, 0xAE81,
- 0xCE04, 0xC3F2, 0xCE05, 0xAE82, 0xCE06, 0xAE83, 0xCE07, 0xAE84, 0xCE08, 0xC3F3, 0xCE09, 0xAE85, 0xCE0A, 0xAE86, 0xCE0B, 0xAE87,
- 0xCE0C, 0xC3F4, 0xCE0D, 0xAE88, 0xCE0E, 0xAE89, 0xCE0F, 0xAE8A, 0xCE10, 0xAE8B, 0xCE11, 0xAE8C, 0xCE12, 0xAE8D, 0xCE13, 0xAE8E,
- 0xCE14, 0xC3F5, 0xCE15, 0xAE8F, 0xCE16, 0xAE90, 0xCE17, 0xAE91, 0xCE18, 0xAE92, 0xCE19, 0xC3F6, 0xCE1A, 0xAE93, 0xCE1B, 0xAE94,
- 0xCE1C, 0xAE95, 0xCE1D, 0xAE96, 0xCE1E, 0xAE97, 0xCE1F, 0xAE98, 0xCE20, 0xC3F7, 0xCE21, 0xC3F8, 0xCE22, 0xAE99, 0xCE23, 0xAE9A,
- 0xCE24, 0xC3F9, 0xCE25, 0xAE9B, 0xCE26, 0xAE9C, 0xCE27, 0xAE9D, 0xCE28, 0xC3FA, 0xCE29, 0xAE9E, 0xCE2A, 0xAE9F, 0xCE2B, 0xAEA0,
- 0xCE2C, 0xAF41, 0xCE2D, 0xAF42, 0xCE2E, 0xAF43, 0xCE2F, 0xAF44, 0xCE30, 0xC3FB, 0xCE31, 0xC3FC, 0xCE32, 0xAF45, 0xCE33, 0xC3FD,
- 0xCE34, 0xAF46, 0xCE35, 0xC3FE, 0xCE36, 0xAF47, 0xCE37, 0xAF48, 0xCE38, 0xAF49, 0xCE39, 0xAF4A, 0xCE3A, 0xAF4B, 0xCE3B, 0xAF4C,
- 0xCE3C, 0xAF4D, 0xCE3D, 0xAF4E, 0xCE3E, 0xAF4F, 0xCE3F, 0xAF50, 0xCE40, 0xAF51, 0xCE41, 0xAF52, 0xCE42, 0xAF53, 0xCE43, 0xAF54,
- 0xCE44, 0xAF55, 0xCE45, 0xAF56, 0xCE46, 0xAF57, 0xCE47, 0xAF58, 0xCE48, 0xAF59, 0xCE49, 0xAF5A, 0xCE4A, 0xAF61, 0xCE4B, 0xAF62,
- 0xCE4C, 0xAF63, 0xCE4D, 0xAF64, 0xCE4E, 0xAF65, 0xCE4F, 0xAF66, 0xCE50, 0xAF67, 0xCE51, 0xAF68, 0xCE52, 0xAF69, 0xCE53, 0xAF6A,
- 0xCE54, 0xAF6B, 0xCE55, 0xAF6C, 0xCE56, 0xAF6D, 0xCE57, 0xAF6E, 0xCE58, 0xC4A1, 0xCE59, 0xC4A2, 0xCE5A, 0xAF6F, 0xCE5B, 0xAF70,
- 0xCE5C, 0xC4A3, 0xCE5D, 0xAF71, 0xCE5E, 0xAF72, 0xCE5F, 0xC4A4, 0xCE60, 0xC4A5, 0xCE61, 0xC4A6, 0xCE62, 0xAF73, 0xCE63, 0xAF74,
- 0xCE64, 0xAF75, 0xCE65, 0xAF76, 0xCE66, 0xAF77, 0xCE67, 0xAF78, 0xCE68, 0xC4A7, 0xCE69, 0xC4A8, 0xCE6A, 0xAF79, 0xCE6B, 0xC4A9,
- 0xCE6C, 0xAF7A, 0xCE6D, 0xC4AA, 0xCE6E, 0xAF81, 0xCE6F, 0xAF82, 0xCE70, 0xAF83, 0xCE71, 0xAF84, 0xCE72, 0xAF85, 0xCE73, 0xAF86,
- 0xCE74, 0xC4AB, 0xCE75, 0xC4AC, 0xCE76, 0xAF87, 0xCE77, 0xAF88, 0xCE78, 0xC4AD, 0xCE79, 0xAF89, 0xCE7A, 0xAF8A, 0xCE7B, 0xAF8B,
- 0xCE7C, 0xC4AE, 0xCE7D, 0xAF8C, 0xCE7E, 0xAF8D, 0xCE7F, 0xAF8E, 0xCE80, 0xAF8F, 0xCE81, 0xAF90, 0xCE82, 0xAF91, 0xCE83, 0xAF92,
- 0xCE84, 0xC4AF, 0xCE85, 0xC4B0, 0xCE86, 0xAF93, 0xCE87, 0xC4B1, 0xCE88, 0xAF94, 0xCE89, 0xC4B2, 0xCE8A, 0xAF95, 0xCE8B, 0xAF96,
- 0xCE8C, 0xAF97, 0xCE8D, 0xAF98, 0xCE8E, 0xAF99, 0xCE8F, 0xAF9A, 0xCE90, 0xC4B3, 0xCE91, 0xC4B4, 0xCE92, 0xAF9B, 0xCE93, 0xAF9C,
- 0xCE94, 0xC4B5, 0xCE95, 0xAF9D, 0xCE96, 0xAF9E, 0xCE97, 0xAF9F, 0xCE98, 0xC4B6, 0xCE99, 0xAFA0, 0xCE9A, 0xB041, 0xCE9B, 0xB042,
- 0xCE9C, 0xB043, 0xCE9D, 0xB044, 0xCE9E, 0xB045, 0xCE9F, 0xB046, 0xCEA0, 0xC4B7, 0xCEA1, 0xC4B8, 0xCEA2, 0xB047, 0xCEA3, 0xC4B9,
- 0xCEA4, 0xC4BA, 0xCEA5, 0xC4BB, 0xCEA6, 0xB048, 0xCEA7, 0xB049, 0xCEA8, 0xB04A, 0xCEA9, 0xB04B, 0xCEAA, 0xB04C, 0xCEAB, 0xB04D,
- 0xCEAC, 0xC4BC, 0xCEAD, 0xC4BD, 0xCEAE, 0xB04E, 0xCEAF, 0xB04F, 0xCEB0, 0xB050, 0xCEB1, 0xB051, 0xCEB2, 0xB052, 0xCEB3, 0xB053,
- 0xCEB4, 0xB054, 0xCEB5, 0xB055, 0xCEB6, 0xB056, 0xCEB7, 0xB057, 0xCEB8, 0xB058, 0xCEB9, 0xB059, 0xCEBA, 0xB05A, 0xCEBB, 0xB061,
- 0xCEBC, 0xB062, 0xCEBD, 0xB063, 0xCEBE, 0xB064, 0xCEBF, 0xB065, 0xCEC0, 0xB066, 0xCEC1, 0xC4BE, 0xCEC2, 0xB067, 0xCEC3, 0xB068,
- 0xCEC4, 0xB069, 0xCEC5, 0xB06A, 0xCEC6, 0xB06B, 0xCEC7, 0xB06C, 0xCEC8, 0xB06D, 0xCEC9, 0xB06E, 0xCECA, 0xB06F, 0xCECB, 0xB070,
- 0xCECC, 0xB071, 0xCECD, 0xB072, 0xCECE, 0xB073, 0xCECF, 0xB074, 0xCED0, 0xB075, 0xCED1, 0xB076, 0xCED2, 0xB077, 0xCED3, 0xB078,
- 0xCED4, 0xB079, 0xCED5, 0xB07A, 0xCED6, 0xB081, 0xCED7, 0xB082, 0xCED8, 0xB083, 0xCED9, 0xB084, 0xCEDA, 0xB085, 0xCEDB, 0xB086,
- 0xCEDC, 0xB087, 0xCEDD, 0xB088, 0xCEDE, 0xB089, 0xCEDF, 0xB08A, 0xCEE0, 0xB08B, 0xCEE1, 0xB08C, 0xCEE2, 0xB08D, 0xCEE3, 0xB08E,
- 0xCEE4, 0xC4BF, 0xCEE5, 0xC4C0, 0xCEE6, 0xB08F, 0xCEE7, 0xB090, 0xCEE8, 0xC4C1, 0xCEE9, 0xB091, 0xCEEA, 0xB092, 0xCEEB, 0xC4C2,
- 0xCEEC, 0xC4C3, 0xCEED, 0xB093, 0xCEEE, 0xB094, 0xCEEF, 0xB095, 0xCEF0, 0xB096, 0xCEF1, 0xB097, 0xCEF2, 0xB098, 0xCEF3, 0xB099,
- 0xCEF4, 0xC4C4, 0xCEF5, 0xC4C5, 0xCEF6, 0xB09A, 0xCEF7, 0xC4C6, 0xCEF8, 0xC4C7, 0xCEF9, 0xC4C8, 0xCEFA, 0xB09B, 0xCEFB, 0xB09C,
- 0xCEFC, 0xB09D, 0xCEFD, 0xB09E, 0xCEFE, 0xB09F, 0xCEFF, 0xB0A0, 0xCF00, 0xC4C9, 0xCF01, 0xC4CA, 0xCF02, 0xB141, 0xCF03, 0xB142,
- 0xCF04, 0xC4CB, 0xCF05, 0xB143, 0xCF06, 0xB144, 0xCF07, 0xB145, 0xCF08, 0xC4CC, 0xCF09, 0xB146, 0xCF0A, 0xB147, 0xCF0B, 0xB148,
- 0xCF0C, 0xB149, 0xCF0D, 0xB14A, 0xCF0E, 0xB14B, 0xCF0F, 0xB14C, 0xCF10, 0xC4CD, 0xCF11, 0xC4CE, 0xCF12, 0xB14D, 0xCF13, 0xC4CF,
- 0xCF14, 0xB14E, 0xCF15, 0xC4D0, 0xCF16, 0xB14F, 0xCF17, 0xB150, 0xCF18, 0xB151, 0xCF19, 0xB152, 0xCF1A, 0xB153, 0xCF1B, 0xB154,
- 0xCF1C, 0xC4D1, 0xCF1D, 0xB155, 0xCF1E, 0xB156, 0xCF1F, 0xB157, 0xCF20, 0xC4D2, 0xCF21, 0xB158, 0xCF22, 0xB159, 0xCF23, 0xB15A,
- 0xCF24, 0xC4D3, 0xCF25, 0xB161, 0xCF26, 0xB162, 0xCF27, 0xB163, 0xCF28, 0xB164, 0xCF29, 0xB165, 0xCF2A, 0xB166, 0xCF2B, 0xB167,
- 0xCF2C, 0xC4D4, 0xCF2D, 0xC4D5, 0xCF2E, 0xB168, 0xCF2F, 0xC4D6, 0xCF30, 0xC4D7, 0xCF31, 0xC4D8, 0xCF32, 0xB169, 0xCF33, 0xB16A,
- 0xCF34, 0xB16B, 0xCF35, 0xB16C, 0xCF36, 0xB16D, 0xCF37, 0xB16E, 0xCF38, 0xC4D9, 0xCF39, 0xB16F, 0xCF3A, 0xB170, 0xCF3B, 0xB171,
- 0xCF3C, 0xB172, 0xCF3D, 0xB173, 0xCF3E, 0xB174, 0xCF3F, 0xB175, 0xCF40, 0xB176, 0xCF41, 0xB177, 0xCF42, 0xB178, 0xCF43, 0xB179,
- 0xCF44, 0xB17A, 0xCF45, 0xB181, 0xCF46, 0xB182, 0xCF47, 0xB183, 0xCF48, 0xB184, 0xCF49, 0xB185, 0xCF4A, 0xB186, 0xCF4B, 0xB187,
- 0xCF4C, 0xB188, 0xCF4D, 0xB189, 0xCF4E, 0xB18A, 0xCF4F, 0xB18B, 0xCF50, 0xB18C, 0xCF51, 0xB18D, 0xCF52, 0xB18E, 0xCF53, 0xB18F,
- 0xCF54, 0xC4DA, 0xCF55, 0xC4DB, 0xCF56, 0xB190, 0xCF57, 0xB191, 0xCF58, 0xC4DC, 0xCF59, 0xB192, 0xCF5A, 0xB193, 0xCF5B, 0xB194,
- 0xCF5C, 0xC4DD, 0xCF5D, 0xB195, 0xCF5E, 0xB196, 0xCF5F, 0xB197, 0xCF60, 0xB198, 0xCF61, 0xB199, 0xCF62, 0xB19A, 0xCF63, 0xB19B,
- 0xCF64, 0xC4DE, 0xCF65, 0xC4DF, 0xCF66, 0xB19C, 0xCF67, 0xC4E0, 0xCF68, 0xB19D, 0xCF69, 0xC4E1, 0xCF6A, 0xB19E, 0xCF6B, 0xB19F,
- 0xCF6C, 0xB1A0, 0xCF6D, 0xB241, 0xCF6E, 0xB242, 0xCF6F, 0xB243, 0xCF70, 0xC4E2, 0xCF71, 0xC4E3, 0xCF72, 0xB244, 0xCF73, 0xB245,
- 0xCF74, 0xC4E4, 0xCF75, 0xB246, 0xCF76, 0xB247, 0xCF77, 0xB248, 0xCF78, 0xC4E5, 0xCF79, 0xB249, 0xCF7A, 0xB24A, 0xCF7B, 0xB24B,
- 0xCF7C, 0xB24C, 0xCF7D, 0xB24D, 0xCF7E, 0xB24E, 0xCF7F, 0xB24F, 0xCF80, 0xC4E6, 0xCF81, 0xB250, 0xCF82, 0xB251, 0xCF83, 0xB252,
- 0xCF84, 0xB253, 0xCF85, 0xC4E7, 0xCF86, 0xB254, 0xCF87, 0xB255, 0xCF88, 0xB256, 0xCF89, 0xB257, 0xCF8A, 0xB258, 0xCF8B, 0xB259,
- 0xCF8C, 0xC4E8, 0xCF8D, 0xB25A, 0xCF8E, 0xB261, 0xCF8F, 0xB262, 0xCF90, 0xB263, 0xCF91, 0xB264, 0xCF92, 0xB265, 0xCF93, 0xB266,
- 0xCF94, 0xB267, 0xCF95, 0xB268, 0xCF96, 0xB269, 0xCF97, 0xB26A, 0xCF98, 0xB26B, 0xCF99, 0xB26C, 0xCF9A, 0xB26D, 0xCF9B, 0xB26E,
- 0xCF9C, 0xB26F, 0xCF9D, 0xB270, 0xCF9E, 0xB271, 0xCF9F, 0xB272, 0xCFA0, 0xB273, 0xCFA1, 0xC4E9, 0xCFA2, 0xB274, 0xCFA3, 0xB275,
- 0xCFA4, 0xB276, 0xCFA5, 0xB277, 0xCFA6, 0xB278, 0xCFA7, 0xB279, 0xCFA8, 0xC4EA, 0xCFA9, 0xB27A, 0xCFAA, 0xB281, 0xCFAB, 0xB282,
- 0xCFAC, 0xB283, 0xCFAD, 0xB284, 0xCFAE, 0xB285, 0xCFAF, 0xB286, 0xCFB0, 0xC4EB, 0xCFB1, 0xB287, 0xCFB2, 0xB288, 0xCFB3, 0xB289,
- 0xCFB4, 0xB28A, 0xCFB5, 0xB28B, 0xCFB6, 0xB28C, 0xCFB7, 0xB28D, 0xCFB8, 0xB28E, 0xCFB9, 0xB28F, 0xCFBA, 0xB290, 0xCFBB, 0xB291,
- 0xCFBC, 0xB292, 0xCFBD, 0xB293, 0xCFBE, 0xB294, 0xCFBF, 0xB295, 0xCFC0, 0xB296, 0xCFC1, 0xB297, 0xCFC2, 0xB298, 0xCFC3, 0xB299,
- 0xCFC4, 0xC4EC, 0xCFC5, 0xB29A, 0xCFC6, 0xB29B, 0xCFC7, 0xB29C, 0xCFC8, 0xB29D, 0xCFC9, 0xB29E, 0xCFCA, 0xB29F, 0xCFCB, 0xB2A0,
- 0xCFCC, 0xB341, 0xCFCD, 0xB342, 0xCFCE, 0xB343, 0xCFCF, 0xB344, 0xCFD0, 0xB345, 0xCFD1, 0xB346, 0xCFD2, 0xB347, 0xCFD3, 0xB348,
- 0xCFD4, 0xB349, 0xCFD5, 0xB34A, 0xCFD6, 0xB34B, 0xCFD7, 0xB34C, 0xCFD8, 0xB34D, 0xCFD9, 0xB34E, 0xCFDA, 0xB34F, 0xCFDB, 0xB350,
- 0xCFDC, 0xB351, 0xCFDD, 0xB352, 0xCFDE, 0xB353, 0xCFDF, 0xB354, 0xCFE0, 0xC4ED, 0xCFE1, 0xC4EE, 0xCFE2, 0xB355, 0xCFE3, 0xB356,
- 0xCFE4, 0xC4EF, 0xCFE5, 0xB357, 0xCFE6, 0xB358, 0xCFE7, 0xB359, 0xCFE8, 0xC4F0, 0xCFE9, 0xB35A, 0xCFEA, 0xB361, 0xCFEB, 0xB362,
- 0xCFEC, 0xB363, 0xCFED, 0xB364, 0xCFEE, 0xB365, 0xCFEF, 0xB366, 0xCFF0, 0xC4F1, 0xCFF1, 0xC4F2, 0xCFF2, 0xB367, 0xCFF3, 0xC4F3,
- 0xCFF4, 0xB368, 0xCFF5, 0xC4F4, 0xCFF6, 0xB369, 0xCFF7, 0xB36A, 0xCFF8, 0xB36B, 0xCFF9, 0xB36C, 0xCFFA, 0xB36D, 0xCFFB, 0xB36E,
- 0xCFFC, 0xC4F5, 0xCFFD, 0xB36F, 0xCFFE, 0xB370, 0xCFFF, 0xB371, 0xD000, 0xC4F6, 0xD001, 0xB372, 0xD002, 0xB373, 0xD003, 0xB374,
- 0xD004, 0xC4F7, 0xD005, 0xB375, 0xD006, 0xB376, 0xD007, 0xB377, 0xD008, 0xB378, 0xD009, 0xB379, 0xD00A, 0xB37A, 0xD00B, 0xB381,
- 0xD00C, 0xB382, 0xD00D, 0xB383, 0xD00E, 0xB384, 0xD00F, 0xB385, 0xD010, 0xB386, 0xD011, 0xC4F8, 0xD012, 0xB387, 0xD013, 0xB388,
- 0xD014, 0xB389, 0xD015, 0xB38A, 0xD016, 0xB38B, 0xD017, 0xB38C, 0xD018, 0xC4F9, 0xD019, 0xB38D, 0xD01A, 0xB38E, 0xD01B, 0xB38F,
- 0xD01C, 0xB390, 0xD01D, 0xB391, 0xD01E, 0xB392, 0xD01F, 0xB393, 0xD020, 0xB394, 0xD021, 0xB395, 0xD022, 0xB396, 0xD023, 0xB397,
- 0xD024, 0xB398, 0xD025, 0xB399, 0xD026, 0xB39A, 0xD027, 0xB39B, 0xD028, 0xB39C, 0xD029, 0xB39D, 0xD02A, 0xB39E, 0xD02B, 0xB39F,
- 0xD02C, 0xB3A0, 0xD02D, 0xC4FA, 0xD02E, 0xB441, 0xD02F, 0xB442, 0xD030, 0xB443, 0xD031, 0xB444, 0xD032, 0xB445, 0xD033, 0xB446,
- 0xD034, 0xC4FB, 0xD035, 0xC4FC, 0xD036, 0xB447, 0xD037, 0xB448, 0xD038, 0xC4FD, 0xD039, 0xB449, 0xD03A, 0xB44A, 0xD03B, 0xB44B,
- 0xD03C, 0xC4FE, 0xD03D, 0xB44C, 0xD03E, 0xB44D, 0xD03F, 0xB44E, 0xD040, 0xB44F, 0xD041, 0xB450, 0xD042, 0xB451, 0xD043, 0xB452,
- 0xD044, 0xC5A1, 0xD045, 0xC5A2, 0xD046, 0xB453, 0xD047, 0xC5A3, 0xD048, 0xB454, 0xD049, 0xC5A4, 0xD04A, 0xB455, 0xD04B, 0xB456,
- 0xD04C, 0xB457, 0xD04D, 0xB458, 0xD04E, 0xB459, 0xD04F, 0xB45A, 0xD050, 0xC5A5, 0xD051, 0xB461, 0xD052, 0xB462, 0xD053, 0xB463,
- 0xD054, 0xC5A6, 0xD055, 0xB464, 0xD056, 0xB465, 0xD057, 0xB466, 0xD058, 0xC5A7, 0xD059, 0xB467, 0xD05A, 0xB468, 0xD05B, 0xB469,
- 0xD05C, 0xB46A, 0xD05D, 0xB46B, 0xD05E, 0xB46C, 0xD05F, 0xB46D, 0xD060, 0xC5A8, 0xD061, 0xB46E, 0xD062, 0xB46F, 0xD063, 0xB470,
- 0xD064, 0xB471, 0xD065, 0xB472, 0xD066, 0xB473, 0xD067, 0xB474, 0xD068, 0xB475, 0xD069, 0xB476, 0xD06A, 0xB477, 0xD06B, 0xB478,
- 0xD06C, 0xC5A9, 0xD06D, 0xC5AA, 0xD06E, 0xB479, 0xD06F, 0xB47A, 0xD070, 0xC5AB, 0xD071, 0xB481, 0xD072, 0xB482, 0xD073, 0xB483,
- 0xD074, 0xC5AC, 0xD075, 0xB484, 0xD076, 0xB485, 0xD077, 0xB486, 0xD078, 0xB487, 0xD079, 0xB488, 0xD07A, 0xB489, 0xD07B, 0xB48A,
- 0xD07C, 0xC5AD, 0xD07D, 0xC5AE, 0xD07E, 0xB48B, 0xD07F, 0xB48C, 0xD080, 0xB48D, 0xD081, 0xC5AF, 0xD082, 0xB48E, 0xD083, 0xB48F,
- 0xD084, 0xB490, 0xD085, 0xB491, 0xD086, 0xB492, 0xD087, 0xB493, 0xD088, 0xB494, 0xD089, 0xB495, 0xD08A, 0xB496, 0xD08B, 0xB497,
- 0xD08C, 0xB498, 0xD08D, 0xB499, 0xD08E, 0xB49A, 0xD08F, 0xB49B, 0xD090, 0xB49C, 0xD091, 0xB49D, 0xD092, 0xB49E, 0xD093, 0xB49F,
- 0xD094, 0xB4A0, 0xD095, 0xB541, 0xD096, 0xB542, 0xD097, 0xB543, 0xD098, 0xB544, 0xD099, 0xB545, 0xD09A, 0xB546, 0xD09B, 0xB547,
- 0xD09C, 0xB548, 0xD09D, 0xB549, 0xD09E, 0xB54A, 0xD09F, 0xB54B, 0xD0A0, 0xB54C, 0xD0A1, 0xB54D, 0xD0A2, 0xB54E, 0xD0A3, 0xB54F,
- 0xD0A4, 0xC5B0, 0xD0A5, 0xC5B1, 0xD0A6, 0xB550, 0xD0A7, 0xB551, 0xD0A8, 0xC5B2, 0xD0A9, 0xB552, 0xD0AA, 0xB553, 0xD0AB, 0xB554,
- 0xD0AC, 0xC5B3, 0xD0AD, 0xB555, 0xD0AE, 0xB556, 0xD0AF, 0xB557, 0xD0B0, 0xB558, 0xD0B1, 0xB559, 0xD0B2, 0xB55A, 0xD0B3, 0xB561,
- 0xD0B4, 0xC5B4, 0xD0B5, 0xC5B5, 0xD0B6, 0xB562, 0xD0B7, 0xC5B6, 0xD0B8, 0xB563, 0xD0B9, 0xC5B7, 0xD0BA, 0xB564, 0xD0BB, 0xB565,
- 0xD0BC, 0xB566, 0xD0BD, 0xB567, 0xD0BE, 0xB568, 0xD0BF, 0xB569, 0xD0C0, 0xC5B8, 0xD0C1, 0xC5B9, 0xD0C2, 0xB56A, 0xD0C3, 0xB56B,
- 0xD0C4, 0xC5BA, 0xD0C5, 0xB56C, 0xD0C6, 0xB56D, 0xD0C7, 0xB56E, 0xD0C8, 0xC5BB, 0xD0C9, 0xC5BC, 0xD0CA, 0xB56F, 0xD0CB, 0xB570,
- 0xD0CC, 0xB571, 0xD0CD, 0xB572, 0xD0CE, 0xB573, 0xD0CF, 0xB574, 0xD0D0, 0xC5BD, 0xD0D1, 0xC5BE, 0xD0D2, 0xB575, 0xD0D3, 0xC5BF,
- 0xD0D4, 0xC5C0, 0xD0D5, 0xC5C1, 0xD0D6, 0xB576, 0xD0D7, 0xB577, 0xD0D8, 0xB578, 0xD0D9, 0xB579, 0xD0DA, 0xB57A, 0xD0DB, 0xB581,
- 0xD0DC, 0xC5C2, 0xD0DD, 0xC5C3, 0xD0DE, 0xB582, 0xD0DF, 0xB583, 0xD0E0, 0xC5C4, 0xD0E1, 0xB584, 0xD0E2, 0xB585, 0xD0E3, 0xB586,
- 0xD0E4, 0xC5C5, 0xD0E5, 0xB587, 0xD0E6, 0xB588, 0xD0E7, 0xB589, 0xD0E8, 0xB58A, 0xD0E9, 0xB58B, 0xD0EA, 0xB58C, 0xD0EB, 0xB58D,
- 0xD0EC, 0xC5C6, 0xD0ED, 0xC5C7, 0xD0EE, 0xB58E, 0xD0EF, 0xC5C8, 0xD0F0, 0xC5C9, 0xD0F1, 0xC5CA, 0xD0F2, 0xB58F, 0xD0F3, 0xB590,
- 0xD0F4, 0xB591, 0xD0F5, 0xB592, 0xD0F6, 0xB593, 0xD0F7, 0xB594, 0xD0F8, 0xC5CB, 0xD0F9, 0xB595, 0xD0FA, 0xB596, 0xD0FB, 0xB597,
- 0xD0FC, 0xB598, 0xD0FD, 0xB599, 0xD0FE, 0xB59A, 0xD0FF, 0xB59B, 0xD100, 0xB59C, 0xD101, 0xB59D, 0xD102, 0xB59E, 0xD103, 0xB59F,
- 0xD104, 0xB5A0, 0xD105, 0xB641, 0xD106, 0xB642, 0xD107, 0xB643, 0xD108, 0xB644, 0xD109, 0xB645, 0xD10A, 0xB646, 0xD10B, 0xB647,
- 0xD10C, 0xB648, 0xD10D, 0xC5CC, 0xD10E, 0xB649, 0xD10F, 0xB64A, 0xD110, 0xB64B, 0xD111, 0xB64C, 0xD112, 0xB64D, 0xD113, 0xB64E,
- 0xD114, 0xB64F, 0xD115, 0xB650, 0xD116, 0xB651, 0xD117, 0xB652, 0xD118, 0xB653, 0xD119, 0xB654, 0xD11A, 0xB655, 0xD11B, 0xB656,
- 0xD11C, 0xB657, 0xD11D, 0xB658, 0xD11E, 0xB659, 0xD11F, 0xB65A, 0xD120, 0xB661, 0xD121, 0xB662, 0xD122, 0xB663, 0xD123, 0xB664,
- 0xD124, 0xB665, 0xD125, 0xB666, 0xD126, 0xB667, 0xD127, 0xB668, 0xD128, 0xB669, 0xD129, 0xB66A, 0xD12A, 0xB66B, 0xD12B, 0xB66C,
- 0xD12C, 0xB66D, 0xD12D, 0xB66E, 0xD12E, 0xB66F, 0xD12F, 0xB670, 0xD130, 0xC5CD, 0xD131, 0xC5CE, 0xD132, 0xB671, 0xD133, 0xB672,
- 0xD134, 0xC5CF, 0xD135, 0xB673, 0xD136, 0xB674, 0xD137, 0xB675, 0xD138, 0xC5D0, 0xD139, 0xB676, 0xD13A, 0xC5D1, 0xD13B, 0xB677,
- 0xD13C, 0xB678, 0xD13D, 0xB679, 0xD13E, 0xB67A, 0xD13F, 0xB681, 0xD140, 0xC5D2, 0xD141, 0xC5D3, 0xD142, 0xB682, 0xD143, 0xC5D4,
- 0xD144, 0xC5D5, 0xD145, 0xC5D6, 0xD146, 0xB683, 0xD147, 0xB684, 0xD148, 0xB685, 0xD149, 0xB686, 0xD14A, 0xB687, 0xD14B, 0xB688,
- 0xD14C, 0xC5D7, 0xD14D, 0xC5D8, 0xD14E, 0xB689, 0xD14F, 0xB68A, 0xD150, 0xC5D9, 0xD151, 0xB68B, 0xD152, 0xB68C, 0xD153, 0xB68D,
- 0xD154, 0xC5DA, 0xD155, 0xB68E, 0xD156, 0xB68F, 0xD157, 0xB690, 0xD158, 0xB691, 0xD159, 0xB692, 0xD15A, 0xB693, 0xD15B, 0xB694,
- 0xD15C, 0xC5DB, 0xD15D, 0xC5DC, 0xD15E, 0xB695, 0xD15F, 0xC5DD, 0xD160, 0xB696, 0xD161, 0xC5DE, 0xD162, 0xB697, 0xD163, 0xB698,
- 0xD164, 0xB699, 0xD165, 0xB69A, 0xD166, 0xB69B, 0xD167, 0xB69C, 0xD168, 0xC5DF, 0xD169, 0xB69D, 0xD16A, 0xB69E, 0xD16B, 0xB69F,
- 0xD16C, 0xC5E0, 0xD16D, 0xB6A0, 0xD16E, 0xB741, 0xD16F, 0xB742, 0xD170, 0xB743, 0xD171, 0xB744, 0xD172, 0xB745, 0xD173, 0xB746,
- 0xD174, 0xB747, 0xD175, 0xB748, 0xD176, 0xB749, 0xD177, 0xB74A, 0xD178, 0xB74B, 0xD179, 0xB74C, 0xD17A, 0xB74D, 0xD17B, 0xB74E,
- 0xD17C, 0xC5E1, 0xD17D, 0xB74F, 0xD17E, 0xB750, 0xD17F, 0xB751, 0xD180, 0xB752, 0xD181, 0xB753, 0xD182, 0xB754, 0xD183, 0xB755,
- 0xD184, 0xC5E2, 0xD185, 0xB756, 0xD186, 0xB757, 0xD187, 0xB758, 0xD188, 0xC5E3, 0xD189, 0xB759, 0xD18A, 0xB75A, 0xD18B, 0xB761,
- 0xD18C, 0xB762, 0xD18D, 0xB763, 0xD18E, 0xB764, 0xD18F, 0xB765, 0xD190, 0xB766, 0xD191, 0xB767, 0xD192, 0xB768, 0xD193, 0xB769,
- 0xD194, 0xB76A, 0xD195, 0xB76B, 0xD196, 0xB76C, 0xD197, 0xB76D, 0xD198, 0xB76E, 0xD199, 0xB76F, 0xD19A, 0xB770, 0xD19B, 0xB771,
- 0xD19C, 0xB772, 0xD19D, 0xB773, 0xD19E, 0xB774, 0xD19F, 0xB775, 0xD1A0, 0xC5E4, 0xD1A1, 0xC5E5, 0xD1A2, 0xB776, 0xD1A3, 0xB777,
- 0xD1A4, 0xC5E6, 0xD1A5, 0xB778, 0xD1A6, 0xB779, 0xD1A7, 0xB77A, 0xD1A8, 0xC5E7, 0xD1A9, 0xB781, 0xD1AA, 0xB782, 0xD1AB, 0xB783,
- 0xD1AC, 0xB784, 0xD1AD, 0xB785, 0xD1AE, 0xB786, 0xD1AF, 0xB787, 0xD1B0, 0xC5E8, 0xD1B1, 0xC5E9, 0xD1B2, 0xB788, 0xD1B3, 0xC5EA,
- 0xD1B4, 0xB789, 0xD1B5, 0xC5EB, 0xD1B6, 0xB78A, 0xD1B7, 0xB78B, 0xD1B8, 0xB78C, 0xD1B9, 0xB78D, 0xD1BA, 0xC5EC, 0xD1BB, 0xB78E,
- 0xD1BC, 0xC5ED, 0xD1BD, 0xB78F, 0xD1BE, 0xB790, 0xD1BF, 0xB791, 0xD1C0, 0xC5EE, 0xD1C1, 0xB792, 0xD1C2, 0xB793, 0xD1C3, 0xB794,
- 0xD1C4, 0xB795, 0xD1C5, 0xB796, 0xD1C6, 0xB797, 0xD1C7, 0xB798, 0xD1C8, 0xB799, 0xD1C9, 0xB79A, 0xD1CA, 0xB79B, 0xD1CB, 0xB79C,
- 0xD1CC, 0xB79D, 0xD1CD, 0xB79E, 0xD1CE, 0xB79F, 0xD1CF, 0xB7A0, 0xD1D0, 0xB841, 0xD1D1, 0xB842, 0xD1D2, 0xB843, 0xD1D3, 0xB844,
- 0xD1D4, 0xB845, 0xD1D5, 0xB846, 0xD1D6, 0xB847, 0xD1D7, 0xB848, 0xD1D8, 0xC5EF, 0xD1D9, 0xB849, 0xD1DA, 0xB84A, 0xD1DB, 0xB84B,
- 0xD1DC, 0xB84C, 0xD1DD, 0xB84D, 0xD1DE, 0xB84E, 0xD1DF, 0xB84F, 0xD1E0, 0xB850, 0xD1E1, 0xB851, 0xD1E2, 0xB852, 0xD1E3, 0xB853,
- 0xD1E4, 0xB854, 0xD1E5, 0xB855, 0xD1E6, 0xB856, 0xD1E7, 0xB857, 0xD1E8, 0xB858, 0xD1E9, 0xB859, 0xD1EA, 0xB85A, 0xD1EB, 0xB861,
- 0xD1EC, 0xB862, 0xD1ED, 0xB863, 0xD1EE, 0xB864, 0xD1EF, 0xB865, 0xD1F0, 0xB866, 0xD1F1, 0xB867, 0xD1F2, 0xB868, 0xD1F3, 0xB869,
- 0xD1F4, 0xC5F0, 0xD1F5, 0xB86A, 0xD1F6, 0xB86B, 0xD1F7, 0xB86C, 0xD1F8, 0xC5F1, 0xD1F9, 0xB86D, 0xD1FA, 0xB86E, 0xD1FB, 0xB86F,
- 0xD1FC, 0xB870, 0xD1FD, 0xB871, 0xD1FE, 0xB872, 0xD1FF, 0xB873, 0xD200, 0xB874, 0xD201, 0xB875, 0xD202, 0xB876, 0xD203, 0xB877,
- 0xD204, 0xB878, 0xD205, 0xB879, 0xD206, 0xB87A, 0xD207, 0xC5F2, 0xD208, 0xB881, 0xD209, 0xC5F3, 0xD20A, 0xB882, 0xD20B, 0xB883,
- 0xD20C, 0xB884, 0xD20D, 0xB885, 0xD20E, 0xB886, 0xD20F, 0xB887, 0xD210, 0xC5F4, 0xD211, 0xB888, 0xD212, 0xB889, 0xD213, 0xB88A,
- 0xD214, 0xB88B, 0xD215, 0xB88C, 0xD216, 0xB88D, 0xD217, 0xB88E, 0xD218, 0xB88F, 0xD219, 0xB890, 0xD21A, 0xB891, 0xD21B, 0xB892,
- 0xD21C, 0xB893, 0xD21D, 0xB894, 0xD21E, 0xB895, 0xD21F, 0xB896, 0xD220, 0xB897, 0xD221, 0xB898, 0xD222, 0xB899, 0xD223, 0xB89A,
- 0xD224, 0xB89B, 0xD225, 0xB89C, 0xD226, 0xB89D, 0xD227, 0xB89E, 0xD228, 0xB89F, 0xD229, 0xB8A0, 0xD22A, 0xB941, 0xD22B, 0xB942,
- 0xD22C, 0xC5F5, 0xD22D, 0xC5F6, 0xD22E, 0xB943, 0xD22F, 0xB944, 0xD230, 0xC5F7, 0xD231, 0xB945, 0xD232, 0xB946, 0xD233, 0xB947,
- 0xD234, 0xC5F8, 0xD235, 0xB948, 0xD236, 0xB949, 0xD237, 0xB94A, 0xD238, 0xB94B, 0xD239, 0xB94C, 0xD23A, 0xB94D, 0xD23B, 0xB94E,
- 0xD23C, 0xC5F9, 0xD23D, 0xC5FA, 0xD23E, 0xB94F, 0xD23F, 0xC5FB, 0xD240, 0xB950, 0xD241, 0xC5FC, 0xD242, 0xB951, 0xD243, 0xB952,
- 0xD244, 0xB953, 0xD245, 0xB954, 0xD246, 0xB955, 0xD247, 0xB956, 0xD248, 0xC5FD, 0xD249, 0xB957, 0xD24A, 0xB958, 0xD24B, 0xB959,
- 0xD24C, 0xB95A, 0xD24D, 0xB961, 0xD24E, 0xB962, 0xD24F, 0xB963, 0xD250, 0xB964, 0xD251, 0xB965, 0xD252, 0xB966, 0xD253, 0xB967,
- 0xD254, 0xB968, 0xD255, 0xB969, 0xD256, 0xB96A, 0xD257, 0xB96B, 0xD258, 0xB96C, 0xD259, 0xB96D, 0xD25A, 0xB96E, 0xD25B, 0xB96F,
- 0xD25C, 0xC5FE, 0xD25D, 0xB970, 0xD25E, 0xB971, 0xD25F, 0xB972, 0xD260, 0xB973, 0xD261, 0xB974, 0xD262, 0xB975, 0xD263, 0xB976,
- 0xD264, 0xC6A1, 0xD265, 0xB977, 0xD266, 0xB978, 0xD267, 0xB979, 0xD268, 0xB97A, 0xD269, 0xB981, 0xD26A, 0xB982, 0xD26B, 0xB983,
- 0xD26C, 0xB984, 0xD26D, 0xB985, 0xD26E, 0xB986, 0xD26F, 0xB987, 0xD270, 0xB988, 0xD271, 0xB989, 0xD272, 0xB98A, 0xD273, 0xB98B,
- 0xD274, 0xB98C, 0xD275, 0xB98D, 0xD276, 0xB98E, 0xD277, 0xB98F, 0xD278, 0xB990, 0xD279, 0xB991, 0xD27A, 0xB992, 0xD27B, 0xB993,
- 0xD27C, 0xB994, 0xD27D, 0xB995, 0xD27E, 0xB996, 0xD27F, 0xB997, 0xD280, 0xC6A2, 0xD281, 0xC6A3, 0xD282, 0xB998, 0xD283, 0xB999,
- 0xD284, 0xC6A4, 0xD285, 0xB99A, 0xD286, 0xB99B, 0xD287, 0xB99C, 0xD288, 0xC6A5, 0xD289, 0xB99D, 0xD28A, 0xB99E, 0xD28B, 0xB99F,
- 0xD28C, 0xB9A0, 0xD28D, 0xBA41, 0xD28E, 0xBA42, 0xD28F, 0xBA43, 0xD290, 0xC6A6, 0xD291, 0xC6A7, 0xD292, 0xBA44, 0xD293, 0xBA45,
- 0xD294, 0xBA46, 0xD295, 0xC6A8, 0xD296, 0xBA47, 0xD297, 0xBA48, 0xD298, 0xBA49, 0xD299, 0xBA4A, 0xD29A, 0xBA4B, 0xD29B, 0xBA4C,
- 0xD29C, 0xC6A9, 0xD29D, 0xBA4D, 0xD29E, 0xBA4E, 0xD29F, 0xBA4F, 0xD2A0, 0xC6AA, 0xD2A1, 0xBA50, 0xD2A2, 0xBA51, 0xD2A3, 0xBA52,
- 0xD2A4, 0xC6AB, 0xD2A5, 0xBA53, 0xD2A6, 0xBA54, 0xD2A7, 0xBA55, 0xD2A8, 0xBA56, 0xD2A9, 0xBA57, 0xD2AA, 0xBA58, 0xD2AB, 0xBA59,
- 0xD2AC, 0xC6AC, 0xD2AD, 0xBA5A, 0xD2AE, 0xBA61, 0xD2AF, 0xBA62, 0xD2B0, 0xBA63, 0xD2B1, 0xC6AD, 0xD2B2, 0xBA64, 0xD2B3, 0xBA65,
- 0xD2B4, 0xBA66, 0xD2B5, 0xBA67, 0xD2B6, 0xBA68, 0xD2B7, 0xBA69, 0xD2B8, 0xC6AE, 0xD2B9, 0xC6AF, 0xD2BA, 0xBA6A, 0xD2BB, 0xBA6B,
- 0xD2BC, 0xC6B0, 0xD2BD, 0xBA6C, 0xD2BE, 0xBA6D, 0xD2BF, 0xC6B1, 0xD2C0, 0xC6B2, 0xD2C1, 0xBA6E, 0xD2C2, 0xC6B3, 0xD2C3, 0xBA6F,
- 0xD2C4, 0xBA70, 0xD2C5, 0xBA71, 0xD2C6, 0xBA72, 0xD2C7, 0xBA73, 0xD2C8, 0xC6B4, 0xD2C9, 0xC6B5, 0xD2CA, 0xBA74, 0xD2CB, 0xC6B6,
- 0xD2CC, 0xBA75, 0xD2CD, 0xBA76, 0xD2CE, 0xBA77, 0xD2CF, 0xBA78, 0xD2D0, 0xBA79, 0xD2D1, 0xBA7A, 0xD2D2, 0xBA81, 0xD2D3, 0xBA82,
- 0xD2D4, 0xC6B7, 0xD2D5, 0xBA83, 0xD2D6, 0xBA84, 0xD2D7, 0xBA85, 0xD2D8, 0xC6B8, 0xD2D9, 0xBA86, 0xD2DA, 0xBA87, 0xD2DB, 0xBA88,
- 0xD2DC, 0xC6B9, 0xD2DD, 0xBA89, 0xD2DE, 0xBA8A, 0xD2DF, 0xBA8B, 0xD2E0, 0xBA8C, 0xD2E1, 0xBA8D, 0xD2E2, 0xBA8E, 0xD2E3, 0xBA8F,
- 0xD2E4, 0xC6BA, 0xD2E5, 0xC6BB, 0xD2E6, 0xBA90, 0xD2E7, 0xBA91, 0xD2E8, 0xBA92, 0xD2E9, 0xBA93, 0xD2EA, 0xBA94, 0xD2EB, 0xBA95,
- 0xD2EC, 0xBA96, 0xD2ED, 0xBA97, 0xD2EE, 0xBA98, 0xD2EF, 0xBA99, 0xD2F0, 0xC6BC, 0xD2F1, 0xC6BD, 0xD2F2, 0xBA9A, 0xD2F3, 0xBA9B,
- 0xD2F4, 0xC6BE, 0xD2F5, 0xBA9C, 0xD2F6, 0xBA9D, 0xD2F7, 0xBA9E, 0xD2F8, 0xC6BF, 0xD2F9, 0xBA9F, 0xD2FA, 0xBAA0, 0xD2FB, 0xBB41,
- 0xD2FC, 0xBB42, 0xD2FD, 0xBB43, 0xD2FE, 0xBB44, 0xD2FF, 0xBB45, 0xD300, 0xC6C0, 0xD301, 0xC6C1, 0xD302, 0xBB46, 0xD303, 0xC6C2,
- 0xD304, 0xBB47, 0xD305, 0xC6C3, 0xD306, 0xBB48, 0xD307, 0xBB49, 0xD308, 0xBB4A, 0xD309, 0xBB4B, 0xD30A, 0xBB4C, 0xD30B, 0xBB4D,
- 0xD30C, 0xC6C4, 0xD30D, 0xC6C5, 0xD30E, 0xC6C6, 0xD30F, 0xBB4E, 0xD310, 0xC6C7, 0xD311, 0xBB4F, 0xD312, 0xBB50, 0xD313, 0xBB51,
- 0xD314, 0xC6C8, 0xD315, 0xBB52, 0xD316, 0xC6C9, 0xD317, 0xBB53, 0xD318, 0xBB54, 0xD319, 0xBB55, 0xD31A, 0xBB56, 0xD31B, 0xBB57,
- 0xD31C, 0xC6CA, 0xD31D, 0xC6CB, 0xD31E, 0xBB58, 0xD31F, 0xC6CC, 0xD320, 0xC6CD, 0xD321, 0xC6CE, 0xD322, 0xBB59, 0xD323, 0xBB5A,
- 0xD324, 0xBB61, 0xD325, 0xC6CF, 0xD326, 0xBB62, 0xD327, 0xBB63, 0xD328, 0xC6D0, 0xD329, 0xC6D1, 0xD32A, 0xBB64, 0xD32B, 0xBB65,
- 0xD32C, 0xC6D2, 0xD32D, 0xBB66, 0xD32E, 0xBB67, 0xD32F, 0xBB68, 0xD330, 0xC6D3, 0xD331, 0xBB69, 0xD332, 0xBB6A, 0xD333, 0xBB6B,
- 0xD334, 0xBB6C, 0xD335, 0xBB6D, 0xD336, 0xBB6E, 0xD337, 0xBB6F, 0xD338, 0xC6D4, 0xD339, 0xC6D5, 0xD33A, 0xBB70, 0xD33B, 0xC6D6,
- 0xD33C, 0xC6D7, 0xD33D, 0xC6D8, 0xD33E, 0xBB71, 0xD33F, 0xBB72, 0xD340, 0xBB73, 0xD341, 0xBB74, 0xD342, 0xBB75, 0xD343, 0xBB76,
- 0xD344, 0xC6D9, 0xD345, 0xC6DA, 0xD346, 0xBB77, 0xD347, 0xBB78, 0xD348, 0xBB79, 0xD349, 0xBB7A, 0xD34A, 0xBB81, 0xD34B, 0xBB82,
- 0xD34C, 0xBB83, 0xD34D, 0xBB84, 0xD34E, 0xBB85, 0xD34F, 0xBB86, 0xD350, 0xBB87, 0xD351, 0xBB88, 0xD352, 0xBB89, 0xD353, 0xBB8A,
- 0xD354, 0xBB8B, 0xD355, 0xBB8C, 0xD356, 0xBB8D, 0xD357, 0xBB8E, 0xD358, 0xBB8F, 0xD359, 0xBB90, 0xD35A, 0xBB91, 0xD35B, 0xBB92,
- 0xD35C, 0xBB93, 0xD35D, 0xBB94, 0xD35E, 0xBB95, 0xD35F, 0xBB96, 0xD360, 0xBB97, 0xD361, 0xBB98, 0xD362, 0xBB99, 0xD363, 0xBB9A,
- 0xD364, 0xBB9B, 0xD365, 0xBB9C, 0xD366, 0xBB9D, 0xD367, 0xBB9E, 0xD368, 0xBB9F, 0xD369, 0xBBA0, 0xD36A, 0xBC41, 0xD36B, 0xBC42,
- 0xD36C, 0xBC43, 0xD36D, 0xBC44, 0xD36E, 0xBC45, 0xD36F, 0xBC46, 0xD370, 0xBC47, 0xD371, 0xBC48, 0xD372, 0xBC49, 0xD373, 0xBC4A,
- 0xD374, 0xBC4B, 0xD375, 0xBC4C, 0xD376, 0xBC4D, 0xD377, 0xBC4E, 0xD378, 0xBC4F, 0xD379, 0xBC50, 0xD37A, 0xBC51, 0xD37B, 0xBC52,
- 0xD37C, 0xC6DB, 0xD37D, 0xC6DC, 0xD37E, 0xBC53, 0xD37F, 0xBC54, 0xD380, 0xC6DD, 0xD381, 0xBC55, 0xD382, 0xBC56, 0xD383, 0xBC57,
- 0xD384, 0xC6DE, 0xD385, 0xBC58, 0xD386, 0xBC59, 0xD387, 0xBC5A, 0xD388, 0xBC61, 0xD389, 0xBC62, 0xD38A, 0xBC63, 0xD38B, 0xBC64,
- 0xD38C, 0xC6DF, 0xD38D, 0xC6E0, 0xD38E, 0xBC65, 0xD38F, 0xC6E1, 0xD390, 0xC6E2, 0xD391, 0xC6E3, 0xD392, 0xBC66, 0xD393, 0xBC67,
- 0xD394, 0xBC68, 0xD395, 0xBC69, 0xD396, 0xBC6A, 0xD397, 0xBC6B, 0xD398, 0xC6E4, 0xD399, 0xC6E5, 0xD39A, 0xBC6C, 0xD39B, 0xBC6D,
- 0xD39C, 0xC6E6, 0xD39D, 0xBC6E, 0xD39E, 0xBC6F, 0xD39F, 0xBC70, 0xD3A0, 0xC6E7, 0xD3A1, 0xBC71, 0xD3A2, 0xBC72, 0xD3A3, 0xBC73,
- 0xD3A4, 0xBC74, 0xD3A5, 0xBC75, 0xD3A6, 0xBC76, 0xD3A7, 0xBC77, 0xD3A8, 0xC6E8, 0xD3A9, 0xC6E9, 0xD3AA, 0xBC78, 0xD3AB, 0xC6EA,
- 0xD3AC, 0xBC79, 0xD3AD, 0xC6EB, 0xD3AE, 0xBC7A, 0xD3AF, 0xBC81, 0xD3B0, 0xBC82, 0xD3B1, 0xBC83, 0xD3B2, 0xBC84, 0xD3B3, 0xBC85,
- 0xD3B4, 0xC6EC, 0xD3B5, 0xBC86, 0xD3B6, 0xBC87, 0xD3B7, 0xBC88, 0xD3B8, 0xC6ED, 0xD3B9, 0xBC89, 0xD3BA, 0xBC8A, 0xD3BB, 0xBC8B,
- 0xD3BC, 0xC6EE, 0xD3BD, 0xBC8C, 0xD3BE, 0xBC8D, 0xD3BF, 0xBC8E, 0xD3C0, 0xBC8F, 0xD3C1, 0xBC90, 0xD3C2, 0xBC91, 0xD3C3, 0xBC92,
- 0xD3C4, 0xC6EF, 0xD3C5, 0xC6F0, 0xD3C6, 0xBC93, 0xD3C7, 0xBC94, 0xD3C8, 0xC6F1, 0xD3C9, 0xC6F2, 0xD3CA, 0xBC95, 0xD3CB, 0xBC96,
- 0xD3CC, 0xBC97, 0xD3CD, 0xBC98, 0xD3CE, 0xBC99, 0xD3CF, 0xBC9A, 0xD3D0, 0xC6F3, 0xD3D1, 0xBC9B, 0xD3D2, 0xBC9C, 0xD3D3, 0xBC9D,
- 0xD3D4, 0xBC9E, 0xD3D5, 0xBC9F, 0xD3D6, 0xBCA0, 0xD3D7, 0xBD41, 0xD3D8, 0xC6F4, 0xD3D9, 0xBD42, 0xD3DA, 0xBD43, 0xD3DB, 0xBD44,
- 0xD3DC, 0xBD45, 0xD3DD, 0xBD46, 0xD3DE, 0xBD47, 0xD3DF, 0xBD48, 0xD3E0, 0xBD49, 0xD3E1, 0xC6F5, 0xD3E2, 0xBD4A, 0xD3E3, 0xC6F6,
- 0xD3E4, 0xBD4B, 0xD3E5, 0xBD4C, 0xD3E6, 0xBD4D, 0xD3E7, 0xBD4E, 0xD3E8, 0xBD4F, 0xD3E9, 0xBD50, 0xD3EA, 0xBD51, 0xD3EB, 0xBD52,
- 0xD3EC, 0xC6F7, 0xD3ED, 0xC6F8, 0xD3EE, 0xBD53, 0xD3EF, 0xBD54, 0xD3F0, 0xC6F9, 0xD3F1, 0xBD55, 0xD3F2, 0xBD56, 0xD3F3, 0xBD57,
- 0xD3F4, 0xC6FA, 0xD3F5, 0xBD58, 0xD3F6, 0xBD59, 0xD3F7, 0xBD5A, 0xD3F8, 0xBD61, 0xD3F9, 0xBD62, 0xD3FA, 0xBD63, 0xD3FB, 0xBD64,
- 0xD3FC, 0xC6FB, 0xD3FD, 0xC6FC, 0xD3FE, 0xBD65, 0xD3FF, 0xC6FD, 0xD400, 0xBD66, 0xD401, 0xC6FE, 0xD402, 0xBD67, 0xD403, 0xBD68,
- 0xD404, 0xBD69, 0xD405, 0xBD6A, 0xD406, 0xBD6B, 0xD407, 0xBD6C, 0xD408, 0xC7A1, 0xD409, 0xBD6D, 0xD40A, 0xBD6E, 0xD40B, 0xBD6F,
- 0xD40C, 0xBD70, 0xD40D, 0xBD71, 0xD40E, 0xBD72, 0xD40F, 0xBD73, 0xD410, 0xBD74, 0xD411, 0xBD75, 0xD412, 0xBD76, 0xD413, 0xBD77,
- 0xD414, 0xBD78, 0xD415, 0xBD79, 0xD416, 0xBD7A, 0xD417, 0xBD81, 0xD418, 0xBD82, 0xD419, 0xBD83, 0xD41A, 0xBD84, 0xD41B, 0xBD85,
- 0xD41C, 0xBD86, 0xD41D, 0xC7A2, 0xD41E, 0xBD87, 0xD41F, 0xBD88, 0xD420, 0xBD89, 0xD421, 0xBD8A, 0xD422, 0xBD8B, 0xD423, 0xBD8C,
- 0xD424, 0xBD8D, 0xD425, 0xBD8E, 0xD426, 0xBD8F, 0xD427, 0xBD90, 0xD428, 0xBD91, 0xD429, 0xBD92, 0xD42A, 0xBD93, 0xD42B, 0xBD94,
- 0xD42C, 0xBD95, 0xD42D, 0xBD96, 0xD42E, 0xBD97, 0xD42F, 0xBD98, 0xD430, 0xBD99, 0xD431, 0xBD9A, 0xD432, 0xBD9B, 0xD433, 0xBD9C,
- 0xD434, 0xBD9D, 0xD435, 0xBD9E, 0xD436, 0xBD9F, 0xD437, 0xBDA0, 0xD438, 0xBE41, 0xD439, 0xBE42, 0xD43A, 0xBE43, 0xD43B, 0xBE44,
- 0xD43C, 0xBE45, 0xD43D, 0xBE46, 0xD43E, 0xBE47, 0xD43F, 0xBE48, 0xD440, 0xC7A3, 0xD441, 0xBE49, 0xD442, 0xBE4A, 0xD443, 0xBE4B,
- 0xD444, 0xC7A4, 0xD445, 0xBE4C, 0xD446, 0xBE4D, 0xD447, 0xBE4E, 0xD448, 0xBE4F, 0xD449, 0xBE50, 0xD44A, 0xBE51, 0xD44B, 0xBE52,
- 0xD44C, 0xBE53, 0xD44D, 0xBE54, 0xD44E, 0xBE55, 0xD44F, 0xBE56, 0xD450, 0xBE57, 0xD451, 0xBE58, 0xD452, 0xBE59, 0xD453, 0xBE5A,
- 0xD454, 0xBE61, 0xD455, 0xBE62, 0xD456, 0xBE63, 0xD457, 0xBE64, 0xD458, 0xBE65, 0xD459, 0xBE66, 0xD45A, 0xBE67, 0xD45B, 0xBE68,
- 0xD45C, 0xC7A5, 0xD45D, 0xBE69, 0xD45E, 0xBE6A, 0xD45F, 0xBE6B, 0xD460, 0xC7A6, 0xD461, 0xBE6C, 0xD462, 0xBE6D, 0xD463, 0xBE6E,
- 0xD464, 0xC7A7, 0xD465, 0xBE6F, 0xD466, 0xBE70, 0xD467, 0xBE71, 0xD468, 0xBE72, 0xD469, 0xBE73, 0xD46A, 0xBE74, 0xD46B, 0xBE75,
- 0xD46C, 0xBE76, 0xD46D, 0xC7A8, 0xD46E, 0xBE77, 0xD46F, 0xC7A9, 0xD470, 0xBE78, 0xD471, 0xBE79, 0xD472, 0xBE7A, 0xD473, 0xBE81,
- 0xD474, 0xBE82, 0xD475, 0xBE83, 0xD476, 0xBE84, 0xD477, 0xBE85, 0xD478, 0xC7AA, 0xD479, 0xC7AB, 0xD47A, 0xBE86, 0xD47B, 0xBE87,
- 0xD47C, 0xC7AC, 0xD47D, 0xBE88, 0xD47E, 0xBE89, 0xD47F, 0xC7AD, 0xD480, 0xC7AE, 0xD481, 0xBE8A, 0xD482, 0xC7AF, 0xD483, 0xBE8B,
- 0xD484, 0xBE8C, 0xD485, 0xBE8D, 0xD486, 0xBE8E, 0xD487, 0xBE8F, 0xD488, 0xC7B0, 0xD489, 0xC7B1, 0xD48A, 0xBE90, 0xD48B, 0xC7B2,
- 0xD48C, 0xBE91, 0xD48D, 0xC7B3, 0xD48E, 0xBE92, 0xD48F, 0xBE93, 0xD490, 0xBE94, 0xD491, 0xBE95, 0xD492, 0xBE96, 0xD493, 0xBE97,
- 0xD494, 0xC7B4, 0xD495, 0xBE98, 0xD496, 0xBE99, 0xD497, 0xBE9A, 0xD498, 0xBE9B, 0xD499, 0xBE9C, 0xD49A, 0xBE9D, 0xD49B, 0xBE9E,
- 0xD49C, 0xBE9F, 0xD49D, 0xBEA0, 0xD49E, 0xBF41, 0xD49F, 0xBF42, 0xD4A0, 0xBF43, 0xD4A1, 0xBF44, 0xD4A2, 0xBF45, 0xD4A3, 0xBF46,
- 0xD4A4, 0xBF47, 0xD4A5, 0xBF48, 0xD4A6, 0xBF49, 0xD4A7, 0xBF4A, 0xD4A8, 0xBF4B, 0xD4A9, 0xC7B5, 0xD4AA, 0xBF4C, 0xD4AB, 0xBF4D,
- 0xD4AC, 0xBF4E, 0xD4AD, 0xBF4F, 0xD4AE, 0xBF50, 0xD4AF, 0xBF51, 0xD4B0, 0xBF52, 0xD4B1, 0xBF53, 0xD4B2, 0xBF54, 0xD4B3, 0xBF55,
- 0xD4B4, 0xBF56, 0xD4B5, 0xBF57, 0xD4B6, 0xBF58, 0xD4B7, 0xBF59, 0xD4B8, 0xBF5A, 0xD4B9, 0xBF61, 0xD4BA, 0xBF62, 0xD4BB, 0xBF63,
- 0xD4BC, 0xBF64, 0xD4BD, 0xBF65, 0xD4BE, 0xBF66, 0xD4BF, 0xBF67, 0xD4C0, 0xBF68, 0xD4C1, 0xBF69, 0xD4C2, 0xBF6A, 0xD4C3, 0xBF6B,
- 0xD4C4, 0xBF6C, 0xD4C5, 0xBF6D, 0xD4C6, 0xBF6E, 0xD4C7, 0xBF6F, 0xD4C8, 0xBF70, 0xD4C9, 0xBF71, 0xD4CA, 0xBF72, 0xD4CB, 0xBF73,
- 0xD4CC, 0xC7B6, 0xD4CD, 0xBF74, 0xD4CE, 0xBF75, 0xD4CF, 0xBF76, 0xD4D0, 0xC7B7, 0xD4D1, 0xBF77, 0xD4D2, 0xBF78, 0xD4D3, 0xBF79,
- 0xD4D4, 0xC7B8, 0xD4D5, 0xBF7A, 0xD4D6, 0xBF81, 0xD4D7, 0xBF82, 0xD4D8, 0xBF83, 0xD4D9, 0xBF84, 0xD4DA, 0xBF85, 0xD4DB, 0xBF86,
- 0xD4DC, 0xC7B9, 0xD4DD, 0xBF87, 0xD4DE, 0xBF88, 0xD4DF, 0xC7BA, 0xD4E0, 0xBF89, 0xD4E1, 0xBF8A, 0xD4E2, 0xBF8B, 0xD4E3, 0xBF8C,
- 0xD4E4, 0xBF8D, 0xD4E5, 0xBF8E, 0xD4E6, 0xBF8F, 0xD4E7, 0xBF90, 0xD4E8, 0xC7BB, 0xD4E9, 0xBF91, 0xD4EA, 0xBF92, 0xD4EB, 0xBF93,
- 0xD4EC, 0xC7BC, 0xD4ED, 0xBF94, 0xD4EE, 0xBF95, 0xD4EF, 0xBF96, 0xD4F0, 0xC7BD, 0xD4F1, 0xBF97, 0xD4F2, 0xBF98, 0xD4F3, 0xBF99,
- 0xD4F4, 0xBF9A, 0xD4F5, 0xBF9B, 0xD4F6, 0xBF9C, 0xD4F7, 0xBF9D, 0xD4F8, 0xC7BE, 0xD4F9, 0xBF9E, 0xD4FA, 0xBF9F, 0xD4FB, 0xC7BF,
- 0xD4FC, 0xBFA0, 0xD4FD, 0xC7C0, 0xD4FE, 0xC041, 0xD4FF, 0xC042, 0xD500, 0xC043, 0xD501, 0xC044, 0xD502, 0xC045, 0xD503, 0xC046,
- 0xD504, 0xC7C1, 0xD505, 0xC047, 0xD506, 0xC048, 0xD507, 0xC049, 0xD508, 0xC7C2, 0xD509, 0xC04A, 0xD50A, 0xC04B, 0xD50B, 0xC04C,
- 0xD50C, 0xC7C3, 0xD50D, 0xC04D, 0xD50E, 0xC04E, 0xD50F, 0xC04F, 0xD510, 0xC050, 0xD511, 0xC051, 0xD512, 0xC052, 0xD513, 0xC053,
- 0xD514, 0xC7C4, 0xD515, 0xC7C5, 0xD516, 0xC054, 0xD517, 0xC7C6, 0xD518, 0xC055, 0xD519, 0xC056, 0xD51A, 0xC057, 0xD51B, 0xC058,
- 0xD51C, 0xC059, 0xD51D, 0xC05A, 0xD51E, 0xC061, 0xD51F, 0xC062, 0xD520, 0xC063, 0xD521, 0xC064, 0xD522, 0xC065, 0xD523, 0xC066,
- 0xD524, 0xC067, 0xD525, 0xC068, 0xD526, 0xC069, 0xD527, 0xC06A, 0xD528, 0xC06B, 0xD529, 0xC06C, 0xD52A, 0xC06D, 0xD52B, 0xC06E,
- 0xD52C, 0xC06F, 0xD52D, 0xC070, 0xD52E, 0xC071, 0xD52F, 0xC072, 0xD530, 0xC073, 0xD531, 0xC074, 0xD532, 0xC075, 0xD533, 0xC076,
- 0xD534, 0xC077, 0xD535, 0xC078, 0xD536, 0xC079, 0xD537, 0xC07A, 0xD538, 0xC081, 0xD539, 0xC082, 0xD53A, 0xC083, 0xD53B, 0xC084,
- 0xD53C, 0xC7C7, 0xD53D, 0xC7C8, 0xD53E, 0xC085, 0xD53F, 0xC086, 0xD540, 0xC7C9, 0xD541, 0xC087, 0xD542, 0xC088, 0xD543, 0xC089,
- 0xD544, 0xC7CA, 0xD545, 0xC08A, 0xD546, 0xC08B, 0xD547, 0xC08C, 0xD548, 0xC08D, 0xD549, 0xC08E, 0xD54A, 0xC08F, 0xD54B, 0xC090,
- 0xD54C, 0xC7CB, 0xD54D, 0xC7CC, 0xD54E, 0xC091, 0xD54F, 0xC7CD, 0xD550, 0xC092, 0xD551, 0xC7CE, 0xD552, 0xC093, 0xD553, 0xC094,
- 0xD554, 0xC095, 0xD555, 0xC096, 0xD556, 0xC097, 0xD557, 0xC098, 0xD558, 0xC7CF, 0xD559, 0xC7D0, 0xD55A, 0xC099, 0xD55B, 0xC09A,
- 0xD55C, 0xC7D1, 0xD55D, 0xC09B, 0xD55E, 0xC09C, 0xD55F, 0xC09D, 0xD560, 0xC7D2, 0xD561, 0xC09E, 0xD562, 0xC09F, 0xD563, 0xC0A0,
- 0xD564, 0xC141, 0xD565, 0xC7D3, 0xD566, 0xC142, 0xD567, 0xC143, 0xD568, 0xC7D4, 0xD569, 0xC7D5, 0xD56A, 0xC144, 0xD56B, 0xC7D6,
- 0xD56C, 0xC145, 0xD56D, 0xC7D7, 0xD56E, 0xC146, 0xD56F, 0xC147, 0xD570, 0xC148, 0xD571, 0xC149, 0xD572, 0xC14A, 0xD573, 0xC14B,
- 0xD574, 0xC7D8, 0xD575, 0xC7D9, 0xD576, 0xC14C, 0xD577, 0xC14D, 0xD578, 0xC7DA, 0xD579, 0xC14E, 0xD57A, 0xC14F, 0xD57B, 0xC150,
- 0xD57C, 0xC7DB, 0xD57D, 0xC151, 0xD57E, 0xC152, 0xD57F, 0xC153, 0xD580, 0xC154, 0xD581, 0xC155, 0xD582, 0xC156, 0xD583, 0xC157,
- 0xD584, 0xC7DC, 0xD585, 0xC7DD, 0xD586, 0xC158, 0xD587, 0xC7DE, 0xD588, 0xC7DF, 0xD589, 0xC7E0, 0xD58A, 0xC159, 0xD58B, 0xC15A,
- 0xD58C, 0xC161, 0xD58D, 0xC162, 0xD58E, 0xC163, 0xD58F, 0xC164, 0xD590, 0xC7E1, 0xD591, 0xC165, 0xD592, 0xC166, 0xD593, 0xC167,
- 0xD594, 0xC168, 0xD595, 0xC169, 0xD596, 0xC16A, 0xD597, 0xC16B, 0xD598, 0xC16C, 0xD599, 0xC16D, 0xD59A, 0xC16E, 0xD59B, 0xC16F,
- 0xD59C, 0xC170, 0xD59D, 0xC171, 0xD59E, 0xC172, 0xD59F, 0xC173, 0xD5A0, 0xC174, 0xD5A1, 0xC175, 0xD5A2, 0xC176, 0xD5A3, 0xC177,
- 0xD5A4, 0xC178, 0xD5A5, 0xC7E2, 0xD5A6, 0xC179, 0xD5A7, 0xC17A, 0xD5A8, 0xC181, 0xD5A9, 0xC182, 0xD5AA, 0xC183, 0xD5AB, 0xC184,
- 0xD5AC, 0xC185, 0xD5AD, 0xC186, 0xD5AE, 0xC187, 0xD5AF, 0xC188, 0xD5B0, 0xC189, 0xD5B1, 0xC18A, 0xD5B2, 0xC18B, 0xD5B3, 0xC18C,
- 0xD5B4, 0xC18D, 0xD5B5, 0xC18E, 0xD5B6, 0xC18F, 0xD5B7, 0xC190, 0xD5B8, 0xC191, 0xD5B9, 0xC192, 0xD5BA, 0xC193, 0xD5BB, 0xC194,
- 0xD5BC, 0xC195, 0xD5BD, 0xC196, 0xD5BE, 0xC197, 0xD5BF, 0xC198, 0xD5C0, 0xC199, 0xD5C1, 0xC19A, 0xD5C2, 0xC19B, 0xD5C3, 0xC19C,
- 0xD5C4, 0xC19D, 0xD5C5, 0xC19E, 0xD5C6, 0xC19F, 0xD5C7, 0xC1A0, 0xD5C8, 0xC7E3, 0xD5C9, 0xC7E4, 0xD5CA, 0xC241, 0xD5CB, 0xC242,
- 0xD5CC, 0xC7E5, 0xD5CD, 0xC243, 0xD5CE, 0xC244, 0xD5CF, 0xC245, 0xD5D0, 0xC7E6, 0xD5D1, 0xC246, 0xD5D2, 0xC7E7, 0xD5D3, 0xC247,
- 0xD5D4, 0xC248, 0xD5D5, 0xC249, 0xD5D6, 0xC24A, 0xD5D7, 0xC24B, 0xD5D8, 0xC7E8, 0xD5D9, 0xC7E9, 0xD5DA, 0xC24C, 0xD5DB, 0xC7EA,
- 0xD5DC, 0xC24D, 0xD5DD, 0xC7EB, 0xD5DE, 0xC24E, 0xD5DF, 0xC24F, 0xD5E0, 0xC250, 0xD5E1, 0xC251, 0xD5E2, 0xC252, 0xD5E3, 0xC253,
- 0xD5E4, 0xC7EC, 0xD5E5, 0xC7ED, 0xD5E6, 0xC254, 0xD5E7, 0xC255, 0xD5E8, 0xC7EE, 0xD5E9, 0xC256, 0xD5EA, 0xC257, 0xD5EB, 0xC258,
- 0xD5EC, 0xC7EF, 0xD5ED, 0xC259, 0xD5EE, 0xC25A, 0xD5EF, 0xC261, 0xD5F0, 0xC262, 0xD5F1, 0xC263, 0xD5F2, 0xC264, 0xD5F3, 0xC265,
- 0xD5F4, 0xC7F0, 0xD5F5, 0xC7F1, 0xD5F6, 0xC266, 0xD5F7, 0xC7F2, 0xD5F8, 0xC267, 0xD5F9, 0xC7F3, 0xD5FA, 0xC268, 0xD5FB, 0xC269,
- 0xD5FC, 0xC26A, 0xD5FD, 0xC26B, 0xD5FE, 0xC26C, 0xD5FF, 0xC26D, 0xD600, 0xC7F4, 0xD601, 0xC7F5, 0xD602, 0xC26E, 0xD603, 0xC26F,
- 0xD604, 0xC7F6, 0xD605, 0xC270, 0xD606, 0xC271, 0xD607, 0xC272, 0xD608, 0xC7F7, 0xD609, 0xC273, 0xD60A, 0xC274, 0xD60B, 0xC275,
- 0xD60C, 0xC276, 0xD60D, 0xC277, 0xD60E, 0xC278, 0xD60F, 0xC279, 0xD610, 0xC7F8, 0xD611, 0xC7F9, 0xD612, 0xC27A, 0xD613, 0xC7FA,
- 0xD614, 0xC7FB, 0xD615, 0xC7FC, 0xD616, 0xC281, 0xD617, 0xC282, 0xD618, 0xC283, 0xD619, 0xC284, 0xD61A, 0xC285, 0xD61B, 0xC286,
- 0xD61C, 0xC7FD, 0xD61D, 0xC287, 0xD61E, 0xC288, 0xD61F, 0xC289, 0xD620, 0xC7FE, 0xD621, 0xC28A, 0xD622, 0xC28B, 0xD623, 0xC28C,
- 0xD624, 0xC8A1, 0xD625, 0xC28D, 0xD626, 0xC28E, 0xD627, 0xC28F, 0xD628, 0xC290, 0xD629, 0xC291, 0xD62A, 0xC292, 0xD62B, 0xC293,
- 0xD62C, 0xC294, 0xD62D, 0xC8A2, 0xD62E, 0xC295, 0xD62F, 0xC296, 0xD630, 0xC297, 0xD631, 0xC298, 0xD632, 0xC299, 0xD633, 0xC29A,
- 0xD634, 0xC29B, 0xD635, 0xC29C, 0xD636, 0xC29D, 0xD637, 0xC29E, 0xD638, 0xC8A3, 0xD639, 0xC8A4, 0xD63A, 0xC29F, 0xD63B, 0xC2A0,
- 0xD63C, 0xC8A5, 0xD63D, 0xC341, 0xD63E, 0xC342, 0xD63F, 0xC343, 0xD640, 0xC8A6, 0xD641, 0xC344, 0xD642, 0xC345, 0xD643, 0xC346,
- 0xD644, 0xC347, 0xD645, 0xC8A7, 0xD646, 0xC348, 0xD647, 0xC349, 0xD648, 0xC8A8, 0xD649, 0xC8A9, 0xD64A, 0xC34A, 0xD64B, 0xC8AA,
- 0xD64C, 0xC34B, 0xD64D, 0xC8AB, 0xD64E, 0xC34C, 0xD64F, 0xC34D, 0xD650, 0xC34E, 0xD651, 0xC8AC, 0xD652, 0xC34F, 0xD653, 0xC350,
- 0xD654, 0xC8AD, 0xD655, 0xC8AE, 0xD656, 0xC351, 0xD657, 0xC352, 0xD658, 0xC8AF, 0xD659, 0xC353, 0xD65A, 0xC354, 0xD65B, 0xC355,
- 0xD65C, 0xC8B0, 0xD65D, 0xC356, 0xD65E, 0xC357, 0xD65F, 0xC358, 0xD660, 0xC359, 0xD661, 0xC35A, 0xD662, 0xC361, 0xD663, 0xC362,
- 0xD664, 0xC363, 0xD665, 0xC364, 0xD666, 0xC365, 0xD667, 0xC8B1, 0xD668, 0xC366, 0xD669, 0xC8B2, 0xD66A, 0xC367, 0xD66B, 0xC368,
- 0xD66C, 0xC369, 0xD66D, 0xC36A, 0xD66E, 0xC36B, 0xD66F, 0xC36C, 0xD670, 0xC8B3, 0xD671, 0xC8B4, 0xD672, 0xC36D, 0xD673, 0xC36E,
- 0xD674, 0xC8B5, 0xD675, 0xC36F, 0xD676, 0xC370, 0xD677, 0xC371, 0xD678, 0xC372, 0xD679, 0xC373, 0xD67A, 0xC374, 0xD67B, 0xC375,
- 0xD67C, 0xC376, 0xD67D, 0xC377, 0xD67E, 0xC378, 0xD67F, 0xC379, 0xD680, 0xC37A, 0xD681, 0xC381, 0xD682, 0xC382, 0xD683, 0xC8B6,
- 0xD684, 0xC383, 0xD685, 0xC8B7, 0xD686, 0xC384, 0xD687, 0xC385, 0xD688, 0xC386, 0xD689, 0xC387, 0xD68A, 0xC388, 0xD68B, 0xC389,
- 0xD68C, 0xC8B8, 0xD68D, 0xC8B9, 0xD68E, 0xC38A, 0xD68F, 0xC38B, 0xD690, 0xC8BA, 0xD691, 0xC38C, 0xD692, 0xC38D, 0xD693, 0xC38E,
- 0xD694, 0xC8BB, 0xD695, 0xC38F, 0xD696, 0xC390, 0xD697, 0xC391, 0xD698, 0xC392, 0xD699, 0xC393, 0xD69A, 0xC394, 0xD69B, 0xC395,
- 0xD69C, 0xC396, 0xD69D, 0xC8BC, 0xD69E, 0xC397, 0xD69F, 0xC8BD, 0xD6A0, 0xC398, 0xD6A1, 0xC8BE, 0xD6A2, 0xC399, 0xD6A3, 0xC39A,
- 0xD6A4, 0xC39B, 0xD6A5, 0xC39C, 0xD6A6, 0xC39D, 0xD6A7, 0xC39E, 0xD6A8, 0xC8BF, 0xD6A9, 0xC39F, 0xD6AA, 0xC3A0, 0xD6AB, 0xC441,
- 0xD6AC, 0xC8C0, 0xD6AD, 0xC442, 0xD6AE, 0xC443, 0xD6AF, 0xC444, 0xD6B0, 0xC8C1, 0xD6B1, 0xC445, 0xD6B2, 0xC446, 0xD6B3, 0xC447,
- 0xD6B4, 0xC448, 0xD6B5, 0xC449, 0xD6B6, 0xC44A, 0xD6B7, 0xC44B, 0xD6B8, 0xC44C, 0xD6B9, 0xC8C2, 0xD6BA, 0xC44D, 0xD6BB, 0xC8C3,
- 0xD6BC, 0xC44E, 0xD6BD, 0xC44F, 0xD6BE, 0xC450, 0xD6BF, 0xC451, 0xD6C0, 0xC452, 0xD6C1, 0xC453, 0xD6C2, 0xC454, 0xD6C3, 0xC455,
- 0xD6C4, 0xC8C4, 0xD6C5, 0xC8C5, 0xD6C6, 0xC456, 0xD6C7, 0xC457, 0xD6C8, 0xC8C6, 0xD6C9, 0xC458, 0xD6CA, 0xC459, 0xD6CB, 0xC45A,
- 0xD6CC, 0xC8C7, 0xD6CD, 0xC461, 0xD6CE, 0xC462, 0xD6CF, 0xC463, 0xD6D0, 0xC464, 0xD6D1, 0xC8C8, 0xD6D2, 0xC465, 0xD6D3, 0xC466,
- 0xD6D4, 0xC8C9, 0xD6D5, 0xC467, 0xD6D6, 0xC468, 0xD6D7, 0xC8CA, 0xD6D8, 0xC469, 0xD6D9, 0xC8CB, 0xD6DA, 0xC46A, 0xD6DB, 0xC46B,
- 0xD6DC, 0xC46C, 0xD6DD, 0xC46D, 0xD6DE, 0xC46E, 0xD6DF, 0xC46F, 0xD6E0, 0xC8CC, 0xD6E1, 0xC470, 0xD6E2, 0xC471, 0xD6E3, 0xC472,
- 0xD6E4, 0xC8CD, 0xD6E5, 0xC473, 0xD6E6, 0xC474, 0xD6E7, 0xC475, 0xD6E8, 0xC8CE, 0xD6E9, 0xC476, 0xD6EA, 0xC477, 0xD6EB, 0xC478,
- 0xD6EC, 0xC479, 0xD6ED, 0xC47A, 0xD6EE, 0xC481, 0xD6EF, 0xC482, 0xD6F0, 0xC8CF, 0xD6F1, 0xC483, 0xD6F2, 0xC484, 0xD6F3, 0xC485,
- 0xD6F4, 0xC486, 0xD6F5, 0xC8D0, 0xD6F6, 0xC487, 0xD6F7, 0xC488, 0xD6F8, 0xC489, 0xD6F9, 0xC48A, 0xD6FA, 0xC48B, 0xD6FB, 0xC48C,
- 0xD6FC, 0xC8D1, 0xD6FD, 0xC8D2, 0xD6FE, 0xC48D, 0xD6FF, 0xC48E, 0xD700, 0xC8D3, 0xD701, 0xC48F, 0xD702, 0xC490, 0xD703, 0xC491,
- 0xD704, 0xC8D4, 0xD705, 0xC492, 0xD706, 0xC493, 0xD707, 0xC494, 0xD708, 0xC495, 0xD709, 0xC496, 0xD70A, 0xC497, 0xD70B, 0xC498,
- 0xD70C, 0xC499, 0xD70D, 0xC49A, 0xD70E, 0xC49B, 0xD70F, 0xC49C, 0xD710, 0xC49D, 0xD711, 0xC8D5, 0xD712, 0xC49E, 0xD713, 0xC49F,
- 0xD714, 0xC4A0, 0xD715, 0xC541, 0xD716, 0xC542, 0xD717, 0xC543, 0xD718, 0xC8D6, 0xD719, 0xC8D7, 0xD71A, 0xC544, 0xD71B, 0xC545,
- 0xD71C, 0xC8D8, 0xD71D, 0xC546, 0xD71E, 0xC547, 0xD71F, 0xC548, 0xD720, 0xC8D9, 0xD721, 0xC549, 0xD722, 0xC54A, 0xD723, 0xC54B,
- 0xD724, 0xC54C, 0xD725, 0xC54D, 0xD726, 0xC54E, 0xD727, 0xC54F, 0xD728, 0xC8DA, 0xD729, 0xC8DB, 0xD72A, 0xC550, 0xD72B, 0xC8DC,
- 0xD72C, 0xC551, 0xD72D, 0xC8DD, 0xD72E, 0xC552, 0xD72F, 0xC553, 0xD730, 0xC554, 0xD731, 0xC555, 0xD732, 0xC556, 0xD733, 0xC557,
- 0xD734, 0xC8DE, 0xD735, 0xC8DF, 0xD736, 0xC558, 0xD737, 0xC559, 0xD738, 0xC8E0, 0xD739, 0xC55A, 0xD73A, 0xC561, 0xD73B, 0xC562,
- 0xD73C, 0xC8E1, 0xD73D, 0xC563, 0xD73E, 0xC564, 0xD73F, 0xC565, 0xD740, 0xC566, 0xD741, 0xC567, 0xD742, 0xC568, 0xD743, 0xC569,
- 0xD744, 0xC8E2, 0xD745, 0xC56A, 0xD746, 0xC56B, 0xD747, 0xC8E3, 0xD748, 0xC56C, 0xD749, 0xC8E4, 0xD74A, 0xC56D, 0xD74B, 0xC56E,
- 0xD74C, 0xC56F, 0xD74D, 0xC570, 0xD74E, 0xC571, 0xD74F, 0xC572, 0xD750, 0xC8E5, 0xD751, 0xC8E6, 0xD752, 0xC573, 0xD753, 0xC574,
- 0xD754, 0xC8E7, 0xD755, 0xC575, 0xD756, 0xC8E8, 0xD757, 0xC8E9, 0xD758, 0xC8EA, 0xD759, 0xC8EB, 0xD75A, 0xC576, 0xD75B, 0xC577,
- 0xD75C, 0xC578, 0xD75D, 0xC579, 0xD75E, 0xC57A, 0xD75F, 0xC581, 0xD760, 0xC8EC, 0xD761, 0xC8ED, 0xD762, 0xC582, 0xD763, 0xC8EE,
- 0xD764, 0xC583, 0xD765, 0xC8EF, 0xD766, 0xC584, 0xD767, 0xC585, 0xD768, 0xC586, 0xD769, 0xC8F0, 0xD76A, 0xC587, 0xD76B, 0xC588,
- 0xD76C, 0xC8F1, 0xD76D, 0xC589, 0xD76E, 0xC58A, 0xD76F, 0xC58B, 0xD770, 0xC8F2, 0xD771, 0xC58C, 0xD772, 0xC58D, 0xD773, 0xC58E,
- 0xD774, 0xC8F3, 0xD775, 0xC58F, 0xD776, 0xC590, 0xD777, 0xC591, 0xD778, 0xC592, 0xD779, 0xC593, 0xD77A, 0xC594, 0xD77B, 0xC595,
- 0xD77C, 0xC8F4, 0xD77D, 0xC8F5, 0xD77E, 0xC596, 0xD77F, 0xC597, 0xD780, 0xC598, 0xD781, 0xC8F6, 0xD782, 0xC599, 0xD783, 0xC59A,
- 0xD784, 0xC59B, 0xD785, 0xC59C, 0xD786, 0xC59D, 0xD787, 0xC59E, 0xD788, 0xC8F7, 0xD789, 0xC8F8, 0xD78A, 0xC59F, 0xD78B, 0xC5A0,
- 0xD78C, 0xC8F9, 0xD78D, 0xC641, 0xD78E, 0xC642, 0xD78F, 0xC643, 0xD790, 0xC8FA, 0xD791, 0xC644, 0xD792, 0xC645, 0xD793, 0xC646,
- 0xD794, 0xC647, 0xD795, 0xC648, 0xD796, 0xC649, 0xD797, 0xC64A, 0xD798, 0xC8FB, 0xD799, 0xC8FC, 0xD79A, 0xC64B, 0xD79B, 0xC8FD,
- 0xD79C, 0xC64C, 0xD79D, 0xC8FE, 0xD79E, 0xC64D, 0xD79F, 0xC64E, 0xD7A0, 0xC64F, 0xD7A1, 0xC650, 0xD7A2, 0xC651, 0xD7A3, 0xC652,
- 0xF900, 0xCBD0, 0xF901, 0xCBD6, 0xF902, 0xCBE7, 0xF903, 0xCDCF, 0xF904, 0xCDE8, 0xF905, 0xCEAD, 0xF906, 0xCFFB, 0xF907, 0xD0A2,
- 0xF908, 0xD0B8, 0xF909, 0xD0D0, 0xF90A, 0xD0DD, 0xF90B, 0xD1D4, 0xF90C, 0xD1D5, 0xF90D, 0xD1D8, 0xF90E, 0xD1DB, 0xF90F, 0xD1DC,
- 0xF910, 0xD1DD, 0xF911, 0xD1DE, 0xF912, 0xD1DF, 0xF913, 0xD1E0, 0xF914, 0xD1E2, 0xF915, 0xD1E3, 0xF916, 0xD1E4, 0xF917, 0xD1E5,
- 0xF918, 0xD1E6, 0xF919, 0xD1E8, 0xF91A, 0xD1E9, 0xF91B, 0xD1EA, 0xF91C, 0xD1EB, 0xF91D, 0xD1ED, 0xF91E, 0xD1EF, 0xF91F, 0xD1F0,
- 0xF920, 0xD1F2, 0xF921, 0xD1F6, 0xF922, 0xD1FA, 0xF923, 0xD1FC, 0xF924, 0xD1FD, 0xF925, 0xD1FE, 0xF926, 0xD2A2, 0xF927, 0xD2A3,
- 0xF928, 0xD2A7, 0xF929, 0xD2A8, 0xF92A, 0xD2A9, 0xF92B, 0xD2AA, 0xF92C, 0xD2AB, 0xF92D, 0xD2AD, 0xF92E, 0xD2B2, 0xF92F, 0xD2BE,
- 0xF930, 0xD2C2, 0xF931, 0xD2C3, 0xF932, 0xD2C4, 0xF933, 0xD2C6, 0xF934, 0xD2C7, 0xF935, 0xD2C8, 0xF936, 0xD2C9, 0xF937, 0xD2CA,
- 0xF938, 0xD2CB, 0xF939, 0xD2CD, 0xF93A, 0xD2CE, 0xF93B, 0xD2CF, 0xF93C, 0xD2D0, 0xF93D, 0xD2D1, 0xF93E, 0xD2D2, 0xF93F, 0xD2D3,
- 0xF940, 0xD2D4, 0xF941, 0xD2D5, 0xF942, 0xD2D6, 0xF943, 0xD2D7, 0xF944, 0xD2D9, 0xF945, 0xD2DA, 0xF946, 0xD2DE, 0xF947, 0xD2DF,
- 0xF948, 0xD2E1, 0xF949, 0xD2E2, 0xF94A, 0xD2E4, 0xF94B, 0xD2E5, 0xF94C, 0xD2E6, 0xF94D, 0xD2E7, 0xF94E, 0xD2E8, 0xF94F, 0xD2E9,
- 0xF950, 0xD2EA, 0xF951, 0xD2EB, 0xF952, 0xD2F0, 0xF953, 0xD2F1, 0xF954, 0xD2F2, 0xF955, 0xD2F3, 0xF956, 0xD2F4, 0xF957, 0xD2F5,
- 0xF958, 0xD2F7, 0xF959, 0xD2F8, 0xF95A, 0xD4E6, 0xF95B, 0xD4FC, 0xF95C, 0xD5A5, 0xF95D, 0xD5AB, 0xF95E, 0xD5AE, 0xF95F, 0xD6B8,
- 0xF960, 0xD6CD, 0xF961, 0xD7CB, 0xF962, 0xD7E4, 0xF963, 0xDBC5, 0xF964, 0xDBE4, 0xF965, 0xDCA5, 0xF966, 0xDDA5, 0xF967, 0xDDD5,
- 0xF968, 0xDDF4, 0xF969, 0xDEFC, 0xF96A, 0xDEFE, 0xF96B, 0xDFB3, 0xF96C, 0xDFE1, 0xF96D, 0xDFE8, 0xF96E, 0xE0F1, 0xF96F, 0xE1AD,
- 0xF970, 0xE1ED, 0xF971, 0xE3F5, 0xF972, 0xE4A1, 0xF973, 0xE4A9, 0xF974, 0xE5AE, 0xF975, 0xE5B1, 0xF976, 0xE5B2, 0xF977, 0xE5B9,
- 0xF978, 0xE5BB, 0xF979, 0xE5BC, 0xF97A, 0xE5C4, 0xF97B, 0xE5CE, 0xF97C, 0xE5D0, 0xF97D, 0xE5D2, 0xF97E, 0xE5D6, 0xF97F, 0xE5FA,
- 0xF980, 0xE5FB, 0xF981, 0xE5FC, 0xF982, 0xE5FE, 0xF983, 0xE6A1, 0xF984, 0xE6A4, 0xF985, 0xE6A7, 0xF986, 0xE6AD, 0xF987, 0xE6AF,
- 0xF988, 0xE6B0, 0xF989, 0xE6B1, 0xF98A, 0xE6B3, 0xF98B, 0xE6B7, 0xF98C, 0xE6B8, 0xF98D, 0xE6BC, 0xF98E, 0xE6C4, 0xF98F, 0xE6C6,
- 0xF990, 0xE6C7, 0xF991, 0xE6CA, 0xF992, 0xE6D2, 0xF993, 0xE6D6, 0xF994, 0xE6D9, 0xF995, 0xE6DC, 0xF996, 0xE6DF, 0xF997, 0xE6E1,
- 0xF998, 0xE6E4, 0xF999, 0xE6E5, 0xF99A, 0xE6E6, 0xF99B, 0xE6E8, 0xF99C, 0xE6EA, 0xF99D, 0xE6EB, 0xF99E, 0xE6EC, 0xF99F, 0xE6EF,
- 0xF9A0, 0xE6F1, 0xF9A1, 0xE6F2, 0xF9A2, 0xE6F5, 0xF9A3, 0xE6F6, 0xF9A4, 0xE6F7, 0xF9A5, 0xE6F9, 0xF9A6, 0xE7A1, 0xF9A7, 0xE7A6,
- 0xF9A8, 0xE7A9, 0xF9A9, 0xE7AA, 0xF9AA, 0xE7AC, 0xF9AB, 0xE7AD, 0xF9AC, 0xE7B0, 0xF9AD, 0xE7BF, 0xF9AE, 0xE7C1, 0xF9AF, 0xE7C6,
- 0xF9B0, 0xE7C7, 0xF9B1, 0xE7CB, 0xF9B2, 0xE7CD, 0xF9B3, 0xE7CF, 0xF9B4, 0xE7D0, 0xF9B5, 0xE7D3, 0xF9B6, 0xE7DF, 0xF9B7, 0xE7E4,
- 0xF9B8, 0xE7E6, 0xF9B9, 0xE7F7, 0xF9BA, 0xE8E7, 0xF9BB, 0xE8E8, 0xF9BC, 0xE8F0, 0xF9BD, 0xE8F1, 0xF9BE, 0xE8F7, 0xF9BF, 0xE8F9,
- 0xF9C0, 0xE8FB, 0xF9C1, 0xE8FE, 0xF9C2, 0xE9A7, 0xF9C3, 0xE9AC, 0xF9C4, 0xE9CC, 0xF9C5, 0xE9F7, 0xF9C6, 0xEAC1, 0xF9C7, 0xEAE5,
- 0xF9C8, 0xEAF4, 0xF9C9, 0xEAF7, 0xF9CA, 0xEAFC, 0xF9CB, 0xEAFE, 0xF9CC, 0xEBA4, 0xF9CD, 0xEBA7, 0xF9CE, 0xEBA9, 0xF9CF, 0xEBAA,
- 0xF9D0, 0xEBBA, 0xF9D1, 0xEBBB, 0xF9D2, 0xEBBD, 0xF9D3, 0xEBC1, 0xF9D4, 0xEBC2, 0xF9D5, 0xEBC6, 0xF9D6, 0xEBC7, 0xF9D7, 0xEBCC,
- 0xF9D8, 0xEBCF, 0xF9D9, 0xEBD0, 0xF9DA, 0xEBD1, 0xF9DB, 0xEBD2, 0xF9DC, 0xEBD8, 0xF9DD, 0xECA6, 0xF9DE, 0xECA7, 0xF9DF, 0xECAA,
- 0xF9E0, 0xECAF, 0xF9E1, 0xECB0, 0xF9E2, 0xECB1, 0xF9E3, 0xECB2, 0xF9E4, 0xECB5, 0xF9E5, 0xECB8, 0xF9E6, 0xECBA, 0xF9E7, 0xECC0,
- 0xF9E8, 0xECC1, 0xF9E9, 0xECC5, 0xF9EA, 0xECC6, 0xF9EB, 0xECC9, 0xF9EC, 0xECCA, 0xF9ED, 0xECD5, 0xF9EE, 0xECDD, 0xF9EF, 0xECDE,
- 0xF9F0, 0xECE1, 0xF9F1, 0xECE4, 0xF9F2, 0xECE7, 0xF9F3, 0xECE8, 0xF9F4, 0xECF7, 0xF9F5, 0xECF8, 0xF9F6, 0xECFA, 0xF9F7, 0xEDA1,
- 0xF9F8, 0xEDA2, 0xF9F9, 0xEDA3, 0xF9FA, 0xEDEE, 0xF9FB, 0xEEDB, 0xF9FC, 0xF2BD, 0xF9FD, 0xF2FA, 0xF9FE, 0xF3B1, 0xF9FF, 0xF4A7,
- 0xFA00, 0xF4EE, 0xFA01, 0xF6F4, 0xFA02, 0xF6F6, 0xFA03, 0xF7B8, 0xFA04, 0xF7C8, 0xFA05, 0xF7D3, 0xFA06, 0xF8DB, 0xFA07, 0xF8F0,
- 0xFA08, 0xFAA1, 0xFA09, 0xFAA2, 0xFA0A, 0xFAE6, 0xFA0B, 0xFCA9, 0xFF01, 0xA3A1, 0xFF02, 0xA3A2, 0xFF03, 0xA3A3, 0xFF04, 0xA3A4,
- 0xFF05, 0xA3A5, 0xFF06, 0xA3A6, 0xFF07, 0xA3A7, 0xFF08, 0xA3A8, 0xFF09, 0xA3A9, 0xFF0A, 0xA3AA, 0xFF0B, 0xA3AB, 0xFF0C, 0xA3AC,
- 0xFF0D, 0xA3AD, 0xFF0E, 0xA3AE, 0xFF0F, 0xA3AF, 0xFF10, 0xA3B0, 0xFF11, 0xA3B1, 0xFF12, 0xA3B2, 0xFF13, 0xA3B3, 0xFF14, 0xA3B4,
- 0xFF15, 0xA3B5, 0xFF16, 0xA3B6, 0xFF17, 0xA3B7, 0xFF18, 0xA3B8, 0xFF19, 0xA3B9, 0xFF1A, 0xA3BA, 0xFF1B, 0xA3BB, 0xFF1C, 0xA3BC,
- 0xFF1D, 0xA3BD, 0xFF1E, 0xA3BE, 0xFF1F, 0xA3BF, 0xFF20, 0xA3C0, 0xFF21, 0xA3C1, 0xFF22, 0xA3C2, 0xFF23, 0xA3C3, 0xFF24, 0xA3C4,
- 0xFF25, 0xA3C5, 0xFF26, 0xA3C6, 0xFF27, 0xA3C7, 0xFF28, 0xA3C8, 0xFF29, 0xA3C9, 0xFF2A, 0xA3CA, 0xFF2B, 0xA3CB, 0xFF2C, 0xA3CC,
- 0xFF2D, 0xA3CD, 0xFF2E, 0xA3CE, 0xFF2F, 0xA3CF, 0xFF30, 0xA3D0, 0xFF31, 0xA3D1, 0xFF32, 0xA3D2, 0xFF33, 0xA3D3, 0xFF34, 0xA3D4,
- 0xFF35, 0xA3D5, 0xFF36, 0xA3D6, 0xFF37, 0xA3D7, 0xFF38, 0xA3D8, 0xFF39, 0xA3D9, 0xFF3A, 0xA3DA, 0xFF3B, 0xA3DB, 0xFF3C, 0xA1AC,
- 0xFF3D, 0xA3DD, 0xFF3E, 0xA3DE, 0xFF3F, 0xA3DF, 0xFF40, 0xA3E0, 0xFF41, 0xA3E1, 0xFF42, 0xA3E2, 0xFF43, 0xA3E3, 0xFF44, 0xA3E4,
- 0xFF45, 0xA3E5, 0xFF46, 0xA3E6, 0xFF47, 0xA3E7, 0xFF48, 0xA3E8, 0xFF49, 0xA3E9, 0xFF4A, 0xA3EA, 0xFF4B, 0xA3EB, 0xFF4C, 0xA3EC,
- 0xFF4D, 0xA3ED, 0xFF4E, 0xA3EE, 0xFF4F, 0xA3EF, 0xFF50, 0xA3F0, 0xFF51, 0xA3F1, 0xFF52, 0xA3F2, 0xFF53, 0xA3F3, 0xFF54, 0xA3F4,
- 0xFF55, 0xA3F5, 0xFF56, 0xA3F6, 0xFF57, 0xA3F7, 0xFF58, 0xA3F8, 0xFF59, 0xA3F9, 0xFF5A, 0xA3FA, 0xFF5B, 0xA3FB, 0xFF5C, 0xA3FC,
- 0xFF5D, 0xA3FD, 0xFF5E, 0xA2A6, 0xFFE0, 0xA1CB, 0xFFE1, 0xA1CC, 0xFFE2, 0xA1FE, 0xFFE3, 0xA3FE, 0xFFE5, 0xA1CD, 0xFFE6, 0xA3DC,
- 0, 0
-};
-
-static const WCHAR oem2uni949[] = { /* Korean --> Unicode pairs */
- 0x8141, 0xAC02, 0x8142, 0xAC03, 0x8143, 0xAC05, 0x8144, 0xAC06, 0x8145, 0xAC0B, 0x8146, 0xAC0C, 0x8147, 0xAC0D, 0x8148, 0xAC0E,
- 0x8149, 0xAC0F, 0x814A, 0xAC18, 0x814B, 0xAC1E, 0x814C, 0xAC1F, 0x814D, 0xAC21, 0x814E, 0xAC22, 0x814F, 0xAC23, 0x8150, 0xAC25,
- 0x8151, 0xAC26, 0x8152, 0xAC27, 0x8153, 0xAC28, 0x8154, 0xAC29, 0x8155, 0xAC2A, 0x8156, 0xAC2B, 0x8157, 0xAC2E, 0x8158, 0xAC32,
- 0x8159, 0xAC33, 0x815A, 0xAC34, 0x8161, 0xAC35, 0x8162, 0xAC36, 0x8163, 0xAC37, 0x8164, 0xAC3A, 0x8165, 0xAC3B, 0x8166, 0xAC3D,
- 0x8167, 0xAC3E, 0x8168, 0xAC3F, 0x8169, 0xAC41, 0x816A, 0xAC42, 0x816B, 0xAC43, 0x816C, 0xAC44, 0x816D, 0xAC45, 0x816E, 0xAC46,
- 0x816F, 0xAC47, 0x8170, 0xAC48, 0x8171, 0xAC49, 0x8172, 0xAC4A, 0x8173, 0xAC4C, 0x8174, 0xAC4E, 0x8175, 0xAC4F, 0x8176, 0xAC50,
- 0x8177, 0xAC51, 0x8178, 0xAC52, 0x8179, 0xAC53, 0x817A, 0xAC55, 0x8181, 0xAC56, 0x8182, 0xAC57, 0x8183, 0xAC59, 0x8184, 0xAC5A,
- 0x8185, 0xAC5B, 0x8186, 0xAC5D, 0x8187, 0xAC5E, 0x8188, 0xAC5F, 0x8189, 0xAC60, 0x818A, 0xAC61, 0x818B, 0xAC62, 0x818C, 0xAC63,
- 0x818D, 0xAC64, 0x818E, 0xAC65, 0x818F, 0xAC66, 0x8190, 0xAC67, 0x8191, 0xAC68, 0x8192, 0xAC69, 0x8193, 0xAC6A, 0x8194, 0xAC6B,
- 0x8195, 0xAC6C, 0x8196, 0xAC6D, 0x8197, 0xAC6E, 0x8198, 0xAC6F, 0x8199, 0xAC72, 0x819A, 0xAC73, 0x819B, 0xAC75, 0x819C, 0xAC76,
- 0x819D, 0xAC79, 0x819E, 0xAC7B, 0x819F, 0xAC7C, 0x81A0, 0xAC7D, 0x81A1, 0xAC7E, 0x81A2, 0xAC7F, 0x81A3, 0xAC82, 0x81A4, 0xAC87,
- 0x81A5, 0xAC88, 0x81A6, 0xAC8D, 0x81A7, 0xAC8E, 0x81A8, 0xAC8F, 0x81A9, 0xAC91, 0x81AA, 0xAC92, 0x81AB, 0xAC93, 0x81AC, 0xAC95,
- 0x81AD, 0xAC96, 0x81AE, 0xAC97, 0x81AF, 0xAC98, 0x81B0, 0xAC99, 0x81B1, 0xAC9A, 0x81B2, 0xAC9B, 0x81B3, 0xAC9E, 0x81B4, 0xACA2,
- 0x81B5, 0xACA3, 0x81B6, 0xACA4, 0x81B7, 0xACA5, 0x81B8, 0xACA6, 0x81B9, 0xACA7, 0x81BA, 0xACAB, 0x81BB, 0xACAD, 0x81BC, 0xACAE,
- 0x81BD, 0xACB1, 0x81BE, 0xACB2, 0x81BF, 0xACB3, 0x81C0, 0xACB4, 0x81C1, 0xACB5, 0x81C2, 0xACB6, 0x81C3, 0xACB7, 0x81C4, 0xACBA,
- 0x81C5, 0xACBE, 0x81C6, 0xACBF, 0x81C7, 0xACC0, 0x81C8, 0xACC2, 0x81C9, 0xACC3, 0x81CA, 0xACC5, 0x81CB, 0xACC6, 0x81CC, 0xACC7,
- 0x81CD, 0xACC9, 0x81CE, 0xACCA, 0x81CF, 0xACCB, 0x81D0, 0xACCD, 0x81D1, 0xACCE, 0x81D2, 0xACCF, 0x81D3, 0xACD0, 0x81D4, 0xACD1,
- 0x81D5, 0xACD2, 0x81D6, 0xACD3, 0x81D7, 0xACD4, 0x81D8, 0xACD6, 0x81D9, 0xACD8, 0x81DA, 0xACD9, 0x81DB, 0xACDA, 0x81DC, 0xACDB,
- 0x81DD, 0xACDC, 0x81DE, 0xACDD, 0x81DF, 0xACDE, 0x81E0, 0xACDF, 0x81E1, 0xACE2, 0x81E2, 0xACE3, 0x81E3, 0xACE5, 0x81E4, 0xACE6,
- 0x81E5, 0xACE9, 0x81E6, 0xACEB, 0x81E7, 0xACED, 0x81E8, 0xACEE, 0x81E9, 0xACF2, 0x81EA, 0xACF4, 0x81EB, 0xACF7, 0x81EC, 0xACF8,
- 0x81ED, 0xACF9, 0x81EE, 0xACFA, 0x81EF, 0xACFB, 0x81F0, 0xACFE, 0x81F1, 0xACFF, 0x81F2, 0xAD01, 0x81F3, 0xAD02, 0x81F4, 0xAD03,
- 0x81F5, 0xAD05, 0x81F6, 0xAD07, 0x81F7, 0xAD08, 0x81F8, 0xAD09, 0x81F9, 0xAD0A, 0x81FA, 0xAD0B, 0x81FB, 0xAD0E, 0x81FC, 0xAD10,
- 0x81FD, 0xAD12, 0x81FE, 0xAD13, 0x8241, 0xAD14, 0x8242, 0xAD15, 0x8243, 0xAD16, 0x8244, 0xAD17, 0x8245, 0xAD19, 0x8246, 0xAD1A,
- 0x8247, 0xAD1B, 0x8248, 0xAD1D, 0x8249, 0xAD1E, 0x824A, 0xAD1F, 0x824B, 0xAD21, 0x824C, 0xAD22, 0x824D, 0xAD23, 0x824E, 0xAD24,
- 0x824F, 0xAD25, 0x8250, 0xAD26, 0x8251, 0xAD27, 0x8252, 0xAD28, 0x8253, 0xAD2A, 0x8254, 0xAD2B, 0x8255, 0xAD2E, 0x8256, 0xAD2F,
- 0x8257, 0xAD30, 0x8258, 0xAD31, 0x8259, 0xAD32, 0x825A, 0xAD33, 0x8261, 0xAD36, 0x8262, 0xAD37, 0x8263, 0xAD39, 0x8264, 0xAD3A,
- 0x8265, 0xAD3B, 0x8266, 0xAD3D, 0x8267, 0xAD3E, 0x8268, 0xAD3F, 0x8269, 0xAD40, 0x826A, 0xAD41, 0x826B, 0xAD42, 0x826C, 0xAD43,
- 0x826D, 0xAD46, 0x826E, 0xAD48, 0x826F, 0xAD4A, 0x8270, 0xAD4B, 0x8271, 0xAD4C, 0x8272, 0xAD4D, 0x8273, 0xAD4E, 0x8274, 0xAD4F,
- 0x8275, 0xAD51, 0x8276, 0xAD52, 0x8277, 0xAD53, 0x8278, 0xAD55, 0x8279, 0xAD56, 0x827A, 0xAD57, 0x8281, 0xAD59, 0x8282, 0xAD5A,
- 0x8283, 0xAD5B, 0x8284, 0xAD5C, 0x8285, 0xAD5D, 0x8286, 0xAD5E, 0x8287, 0xAD5F, 0x8288, 0xAD60, 0x8289, 0xAD62, 0x828A, 0xAD64,
- 0x828B, 0xAD65, 0x828C, 0xAD66, 0x828D, 0xAD67, 0x828E, 0xAD68, 0x828F, 0xAD69, 0x8290, 0xAD6A, 0x8291, 0xAD6B, 0x8292, 0xAD6E,
- 0x8293, 0xAD6F, 0x8294, 0xAD71, 0x8295, 0xAD72, 0x8296, 0xAD77, 0x8297, 0xAD78, 0x8298, 0xAD79, 0x8299, 0xAD7A, 0x829A, 0xAD7E,
- 0x829B, 0xAD80, 0x829C, 0xAD83, 0x829D, 0xAD84, 0x829E, 0xAD85, 0x829F, 0xAD86, 0x82A0, 0xAD87, 0x82A1, 0xAD8A, 0x82A2, 0xAD8B,
- 0x82A3, 0xAD8D, 0x82A4, 0xAD8E, 0x82A5, 0xAD8F, 0x82A6, 0xAD91, 0x82A7, 0xAD92, 0x82A8, 0xAD93, 0x82A9, 0xAD94, 0x82AA, 0xAD95,
- 0x82AB, 0xAD96, 0x82AC, 0xAD97, 0x82AD, 0xAD98, 0x82AE, 0xAD99, 0x82AF, 0xAD9A, 0x82B0, 0xAD9B, 0x82B1, 0xAD9E, 0x82B2, 0xAD9F,
- 0x82B3, 0xADA0, 0x82B4, 0xADA1, 0x82B5, 0xADA2, 0x82B6, 0xADA3, 0x82B7, 0xADA5, 0x82B8, 0xADA6, 0x82B9, 0xADA7, 0x82BA, 0xADA8,
- 0x82BB, 0xADA9, 0x82BC, 0xADAA, 0x82BD, 0xADAB, 0x82BE, 0xADAC, 0x82BF, 0xADAD, 0x82C0, 0xADAE, 0x82C1, 0xADAF, 0x82C2, 0xADB0,
- 0x82C3, 0xADB1, 0x82C4, 0xADB2, 0x82C5, 0xADB3, 0x82C6, 0xADB4, 0x82C7, 0xADB5, 0x82C8, 0xADB6, 0x82C9, 0xADB8, 0x82CA, 0xADB9,
- 0x82CB, 0xADBA, 0x82CC, 0xADBB, 0x82CD, 0xADBC, 0x82CE, 0xADBD, 0x82CF, 0xADBE, 0x82D0, 0xADBF, 0x82D1, 0xADC2, 0x82D2, 0xADC3,
- 0x82D3, 0xADC5, 0x82D4, 0xADC6, 0x82D5, 0xADC7, 0x82D6, 0xADC9, 0x82D7, 0xADCA, 0x82D8, 0xADCB, 0x82D9, 0xADCC, 0x82DA, 0xADCD,
- 0x82DB, 0xADCE, 0x82DC, 0xADCF, 0x82DD, 0xADD2, 0x82DE, 0xADD4, 0x82DF, 0xADD5, 0x82E0, 0xADD6, 0x82E1, 0xADD7, 0x82E2, 0xADD8,
- 0x82E3, 0xADD9, 0x82E4, 0xADDA, 0x82E5, 0xADDB, 0x82E6, 0xADDD, 0x82E7, 0xADDE, 0x82E8, 0xADDF, 0x82E9, 0xADE1, 0x82EA, 0xADE2,
- 0x82EB, 0xADE3, 0x82EC, 0xADE5, 0x82ED, 0xADE6, 0x82EE, 0xADE7, 0x82EF, 0xADE8, 0x82F0, 0xADE9, 0x82F1, 0xADEA, 0x82F2, 0xADEB,
- 0x82F3, 0xADEC, 0x82F4, 0xADED, 0x82F5, 0xADEE, 0x82F6, 0xADEF, 0x82F7, 0xADF0, 0x82F8, 0xADF1, 0x82F9, 0xADF2, 0x82FA, 0xADF3,
- 0x82FB, 0xADF4, 0x82FC, 0xADF5, 0x82FD, 0xADF6, 0x82FE, 0xADF7, 0x8341, 0xADFA, 0x8342, 0xADFB, 0x8343, 0xADFD, 0x8344, 0xADFE,
- 0x8345, 0xAE02, 0x8346, 0xAE03, 0x8347, 0xAE04, 0x8348, 0xAE05, 0x8349, 0xAE06, 0x834A, 0xAE07, 0x834B, 0xAE0A, 0x834C, 0xAE0C,
- 0x834D, 0xAE0E, 0x834E, 0xAE0F, 0x834F, 0xAE10, 0x8350, 0xAE11, 0x8351, 0xAE12, 0x8352, 0xAE13, 0x8353, 0xAE15, 0x8354, 0xAE16,
- 0x8355, 0xAE17, 0x8356, 0xAE18, 0x8357, 0xAE19, 0x8358, 0xAE1A, 0x8359, 0xAE1B, 0x835A, 0xAE1C, 0x8361, 0xAE1D, 0x8362, 0xAE1E,
- 0x8363, 0xAE1F, 0x8364, 0xAE20, 0x8365, 0xAE21, 0x8366, 0xAE22, 0x8367, 0xAE23, 0x8368, 0xAE24, 0x8369, 0xAE25, 0x836A, 0xAE26,
- 0x836B, 0xAE27, 0x836C, 0xAE28, 0x836D, 0xAE29, 0x836E, 0xAE2A, 0x836F, 0xAE2B, 0x8370, 0xAE2C, 0x8371, 0xAE2D, 0x8372, 0xAE2E,
- 0x8373, 0xAE2F, 0x8374, 0xAE32, 0x8375, 0xAE33, 0x8376, 0xAE35, 0x8377, 0xAE36, 0x8378, 0xAE39, 0x8379, 0xAE3B, 0x837A, 0xAE3C,
- 0x8381, 0xAE3D, 0x8382, 0xAE3E, 0x8383, 0xAE3F, 0x8384, 0xAE42, 0x8385, 0xAE44, 0x8386, 0xAE47, 0x8387, 0xAE48, 0x8388, 0xAE49,
- 0x8389, 0xAE4B, 0x838A, 0xAE4F, 0x838B, 0xAE51, 0x838C, 0xAE52, 0x838D, 0xAE53, 0x838E, 0xAE55, 0x838F, 0xAE57, 0x8390, 0xAE58,
- 0x8391, 0xAE59, 0x8392, 0xAE5A, 0x8393, 0xAE5B, 0x8394, 0xAE5E, 0x8395, 0xAE62, 0x8396, 0xAE63, 0x8397, 0xAE64, 0x8398, 0xAE66,
- 0x8399, 0xAE67, 0x839A, 0xAE6A, 0x839B, 0xAE6B, 0x839C, 0xAE6D, 0x839D, 0xAE6E, 0x839E, 0xAE6F, 0x839F, 0xAE71, 0x83A0, 0xAE72,
- 0x83A1, 0xAE73, 0x83A2, 0xAE74, 0x83A3, 0xAE75, 0x83A4, 0xAE76, 0x83A5, 0xAE77, 0x83A6, 0xAE7A, 0x83A7, 0xAE7E, 0x83A8, 0xAE7F,
- 0x83A9, 0xAE80, 0x83AA, 0xAE81, 0x83AB, 0xAE82, 0x83AC, 0xAE83, 0x83AD, 0xAE86, 0x83AE, 0xAE87, 0x83AF, 0xAE88, 0x83B0, 0xAE89,
- 0x83B1, 0xAE8A, 0x83B2, 0xAE8B, 0x83B3, 0xAE8D, 0x83B4, 0xAE8E, 0x83B5, 0xAE8F, 0x83B6, 0xAE90, 0x83B7, 0xAE91, 0x83B8, 0xAE92,
- 0x83B9, 0xAE93, 0x83BA, 0xAE94, 0x83BB, 0xAE95, 0x83BC, 0xAE96, 0x83BD, 0xAE97, 0x83BE, 0xAE98, 0x83BF, 0xAE99, 0x83C0, 0xAE9A,
- 0x83C1, 0xAE9B, 0x83C2, 0xAE9C, 0x83C3, 0xAE9D, 0x83C4, 0xAE9E, 0x83C5, 0xAE9F, 0x83C6, 0xAEA0, 0x83C7, 0xAEA1, 0x83C8, 0xAEA2,
- 0x83C9, 0xAEA3, 0x83CA, 0xAEA4, 0x83CB, 0xAEA5, 0x83CC, 0xAEA6, 0x83CD, 0xAEA7, 0x83CE, 0xAEA8, 0x83CF, 0xAEA9, 0x83D0, 0xAEAA,
- 0x83D1, 0xAEAB, 0x83D2, 0xAEAC, 0x83D3, 0xAEAD, 0x83D4, 0xAEAE, 0x83D5, 0xAEAF, 0x83D6, 0xAEB0, 0x83D7, 0xAEB1, 0x83D8, 0xAEB2,
- 0x83D9, 0xAEB3, 0x83DA, 0xAEB4, 0x83DB, 0xAEB5, 0x83DC, 0xAEB6, 0x83DD, 0xAEB7, 0x83DE, 0xAEB8, 0x83DF, 0xAEB9, 0x83E0, 0xAEBA,
- 0x83E1, 0xAEBB, 0x83E2, 0xAEBF, 0x83E3, 0xAEC1, 0x83E4, 0xAEC2, 0x83E5, 0xAEC3, 0x83E6, 0xAEC5, 0x83E7, 0xAEC6, 0x83E8, 0xAEC7,
- 0x83E9, 0xAEC8, 0x83EA, 0xAEC9, 0x83EB, 0xAECA, 0x83EC, 0xAECB, 0x83ED, 0xAECE, 0x83EE, 0xAED2, 0x83EF, 0xAED3, 0x83F0, 0xAED4,
- 0x83F1, 0xAED5, 0x83F2, 0xAED6, 0x83F3, 0xAED7, 0x83F4, 0xAEDA, 0x83F5, 0xAEDB, 0x83F6, 0xAEDD, 0x83F7, 0xAEDE, 0x83F8, 0xAEDF,
- 0x83F9, 0xAEE0, 0x83FA, 0xAEE1, 0x83FB, 0xAEE2, 0x83FC, 0xAEE3, 0x83FD, 0xAEE4, 0x83FE, 0xAEE5, 0x8441, 0xAEE6, 0x8442, 0xAEE7,
- 0x8443, 0xAEE9, 0x8444, 0xAEEA, 0x8445, 0xAEEC, 0x8446, 0xAEEE, 0x8447, 0xAEEF, 0x8448, 0xAEF0, 0x8449, 0xAEF1, 0x844A, 0xAEF2,
- 0x844B, 0xAEF3, 0x844C, 0xAEF5, 0x844D, 0xAEF6, 0x844E, 0xAEF7, 0x844F, 0xAEF9, 0x8450, 0xAEFA, 0x8451, 0xAEFB, 0x8452, 0xAEFD,
- 0x8453, 0xAEFE, 0x8454, 0xAEFF, 0x8455, 0xAF00, 0x8456, 0xAF01, 0x8457, 0xAF02, 0x8458, 0xAF03, 0x8459, 0xAF04, 0x845A, 0xAF05,
- 0x8461, 0xAF06, 0x8462, 0xAF09, 0x8463, 0xAF0A, 0x8464, 0xAF0B, 0x8465, 0xAF0C, 0x8466, 0xAF0E, 0x8467, 0xAF0F, 0x8468, 0xAF11,
- 0x8469, 0xAF12, 0x846A, 0xAF13, 0x846B, 0xAF14, 0x846C, 0xAF15, 0x846D, 0xAF16, 0x846E, 0xAF17, 0x846F, 0xAF18, 0x8470, 0xAF19,
- 0x8471, 0xAF1A, 0x8472, 0xAF1B, 0x8473, 0xAF1C, 0x8474, 0xAF1D, 0x8475, 0xAF1E, 0x8476, 0xAF1F, 0x8477, 0xAF20, 0x8478, 0xAF21,
- 0x8479, 0xAF22, 0x847A, 0xAF23, 0x8481, 0xAF24, 0x8482, 0xAF25, 0x8483, 0xAF26, 0x8484, 0xAF27, 0x8485, 0xAF28, 0x8486, 0xAF29,
- 0x8487, 0xAF2A, 0x8488, 0xAF2B, 0x8489, 0xAF2E, 0x848A, 0xAF2F, 0x848B, 0xAF31, 0x848C, 0xAF33, 0x848D, 0xAF35, 0x848E, 0xAF36,
- 0x848F, 0xAF37, 0x8490, 0xAF38, 0x8491, 0xAF39, 0x8492, 0xAF3A, 0x8493, 0xAF3B, 0x8494, 0xAF3E, 0x8495, 0xAF40, 0x8496, 0xAF44,
- 0x8497, 0xAF45, 0x8498, 0xAF46, 0x8499, 0xAF47, 0x849A, 0xAF4A, 0x849B, 0xAF4B, 0x849C, 0xAF4C, 0x849D, 0xAF4D, 0x849E, 0xAF4E,
- 0x849F, 0xAF4F, 0x84A0, 0xAF51, 0x84A1, 0xAF52, 0x84A2, 0xAF53, 0x84A3, 0xAF54, 0x84A4, 0xAF55, 0x84A5, 0xAF56, 0x84A6, 0xAF57,
- 0x84A7, 0xAF58, 0x84A8, 0xAF59, 0x84A9, 0xAF5A, 0x84AA, 0xAF5B, 0x84AB, 0xAF5E, 0x84AC, 0xAF5F, 0x84AD, 0xAF60, 0x84AE, 0xAF61,
- 0x84AF, 0xAF62, 0x84B0, 0xAF63, 0x84B1, 0xAF66, 0x84B2, 0xAF67, 0x84B3, 0xAF68, 0x84B4, 0xAF69, 0x84B5, 0xAF6A, 0x84B6, 0xAF6B,
- 0x84B7, 0xAF6C, 0x84B8, 0xAF6D, 0x84B9, 0xAF6E, 0x84BA, 0xAF6F, 0x84BB, 0xAF70, 0x84BC, 0xAF71, 0x84BD, 0xAF72, 0x84BE, 0xAF73,
- 0x84BF, 0xAF74, 0x84C0, 0xAF75, 0x84C1, 0xAF76, 0x84C2, 0xAF77, 0x84C3, 0xAF78, 0x84C4, 0xAF7A, 0x84C5, 0xAF7B, 0x84C6, 0xAF7C,
- 0x84C7, 0xAF7D, 0x84C8, 0xAF7E, 0x84C9, 0xAF7F, 0x84CA, 0xAF81, 0x84CB, 0xAF82, 0x84CC, 0xAF83, 0x84CD, 0xAF85, 0x84CE, 0xAF86,
- 0x84CF, 0xAF87, 0x84D0, 0xAF89, 0x84D1, 0xAF8A, 0x84D2, 0xAF8B, 0x84D3, 0xAF8C, 0x84D4, 0xAF8D, 0x84D5, 0xAF8E, 0x84D6, 0xAF8F,
- 0x84D7, 0xAF92, 0x84D8, 0xAF93, 0x84D9, 0xAF94, 0x84DA, 0xAF96, 0x84DB, 0xAF97, 0x84DC, 0xAF98, 0x84DD, 0xAF99, 0x84DE, 0xAF9A,
- 0x84DF, 0xAF9B, 0x84E0, 0xAF9D, 0x84E1, 0xAF9E, 0x84E2, 0xAF9F, 0x84E3, 0xAFA0, 0x84E4, 0xAFA1, 0x84E5, 0xAFA2, 0x84E6, 0xAFA3,
- 0x84E7, 0xAFA4, 0x84E8, 0xAFA5, 0x84E9, 0xAFA6, 0x84EA, 0xAFA7, 0x84EB, 0xAFA8, 0x84EC, 0xAFA9, 0x84ED, 0xAFAA, 0x84EE, 0xAFAB,
- 0x84EF, 0xAFAC, 0x84F0, 0xAFAD, 0x84F1, 0xAFAE, 0x84F2, 0xAFAF, 0x84F3, 0xAFB0, 0x84F4, 0xAFB1, 0x84F5, 0xAFB2, 0x84F6, 0xAFB3,
- 0x84F7, 0xAFB4, 0x84F8, 0xAFB5, 0x84F9, 0xAFB6, 0x84FA, 0xAFB7, 0x84FB, 0xAFBA, 0x84FC, 0xAFBB, 0x84FD, 0xAFBD, 0x84FE, 0xAFBE,
- 0x8541, 0xAFBF, 0x8542, 0xAFC1, 0x8543, 0xAFC2, 0x8544, 0xAFC3, 0x8545, 0xAFC4, 0x8546, 0xAFC5, 0x8547, 0xAFC6, 0x8548, 0xAFCA,
- 0x8549, 0xAFCC, 0x854A, 0xAFCF, 0x854B, 0xAFD0, 0x854C, 0xAFD1, 0x854D, 0xAFD2, 0x854E, 0xAFD3, 0x854F, 0xAFD5, 0x8550, 0xAFD6,
- 0x8551, 0xAFD7, 0x8552, 0xAFD8, 0x8553, 0xAFD9, 0x8554, 0xAFDA, 0x8555, 0xAFDB, 0x8556, 0xAFDD, 0x8557, 0xAFDE, 0x8558, 0xAFDF,
- 0x8559, 0xAFE0, 0x855A, 0xAFE1, 0x8561, 0xAFE2, 0x8562, 0xAFE3, 0x8563, 0xAFE4, 0x8564, 0xAFE5, 0x8565, 0xAFE6, 0x8566, 0xAFE7,
- 0x8567, 0xAFEA, 0x8568, 0xAFEB, 0x8569, 0xAFEC, 0x856A, 0xAFED, 0x856B, 0xAFEE, 0x856C, 0xAFEF, 0x856D, 0xAFF2, 0x856E, 0xAFF3,
- 0x856F, 0xAFF5, 0x8570, 0xAFF6, 0x8571, 0xAFF7, 0x8572, 0xAFF9, 0x8573, 0xAFFA, 0x8574, 0xAFFB, 0x8575, 0xAFFC, 0x8576, 0xAFFD,
- 0x8577, 0xAFFE, 0x8578, 0xAFFF, 0x8579, 0xB002, 0x857A, 0xB003, 0x8581, 0xB005, 0x8582, 0xB006, 0x8583, 0xB007, 0x8584, 0xB008,
- 0x8585, 0xB009, 0x8586, 0xB00A, 0x8587, 0xB00B, 0x8588, 0xB00D, 0x8589, 0xB00E, 0x858A, 0xB00F, 0x858B, 0xB011, 0x858C, 0xB012,
- 0x858D, 0xB013, 0x858E, 0xB015, 0x858F, 0xB016, 0x8590, 0xB017, 0x8591, 0xB018, 0x8592, 0xB019, 0x8593, 0xB01A, 0x8594, 0xB01B,
- 0x8595, 0xB01E, 0x8596, 0xB01F, 0x8597, 0xB020, 0x8598, 0xB021, 0x8599, 0xB022, 0x859A, 0xB023, 0x859B, 0xB024, 0x859C, 0xB025,
- 0x859D, 0xB026, 0x859E, 0xB027, 0x859F, 0xB029, 0x85A0, 0xB02A, 0x85A1, 0xB02B, 0x85A2, 0xB02C, 0x85A3, 0xB02D, 0x85A4, 0xB02E,
- 0x85A5, 0xB02F, 0x85A6, 0xB030, 0x85A7, 0xB031, 0x85A8, 0xB032, 0x85A9, 0xB033, 0x85AA, 0xB034, 0x85AB, 0xB035, 0x85AC, 0xB036,
- 0x85AD, 0xB037, 0x85AE, 0xB038, 0x85AF, 0xB039, 0x85B0, 0xB03A, 0x85B1, 0xB03B, 0x85B2, 0xB03C, 0x85B3, 0xB03D, 0x85B4, 0xB03E,
- 0x85B5, 0xB03F, 0x85B6, 0xB040, 0x85B7, 0xB041, 0x85B8, 0xB042, 0x85B9, 0xB043, 0x85BA, 0xB046, 0x85BB, 0xB047, 0x85BC, 0xB049,
- 0x85BD, 0xB04B, 0x85BE, 0xB04D, 0x85BF, 0xB04F, 0x85C0, 0xB050, 0x85C1, 0xB051, 0x85C2, 0xB052, 0x85C3, 0xB056, 0x85C4, 0xB058,
- 0x85C5, 0xB05A, 0x85C6, 0xB05B, 0x85C7, 0xB05C, 0x85C8, 0xB05E, 0x85C9, 0xB05F, 0x85CA, 0xB060, 0x85CB, 0xB061, 0x85CC, 0xB062,
- 0x85CD, 0xB063, 0x85CE, 0xB064, 0x85CF, 0xB065, 0x85D0, 0xB066, 0x85D1, 0xB067, 0x85D2, 0xB068, 0x85D3, 0xB069, 0x85D4, 0xB06A,
- 0x85D5, 0xB06B, 0x85D6, 0xB06C, 0x85D7, 0xB06D, 0x85D8, 0xB06E, 0x85D9, 0xB06F, 0x85DA, 0xB070, 0x85DB, 0xB071, 0x85DC, 0xB072,
- 0x85DD, 0xB073, 0x85DE, 0xB074, 0x85DF, 0xB075, 0x85E0, 0xB076, 0x85E1, 0xB077, 0x85E2, 0xB078, 0x85E3, 0xB079, 0x85E4, 0xB07A,
- 0x85E5, 0xB07B, 0x85E6, 0xB07E, 0x85E7, 0xB07F, 0x85E8, 0xB081, 0x85E9, 0xB082, 0x85EA, 0xB083, 0x85EB, 0xB085, 0x85EC, 0xB086,
- 0x85ED, 0xB087, 0x85EE, 0xB088, 0x85EF, 0xB089, 0x85F0, 0xB08A, 0x85F1, 0xB08B, 0x85F2, 0xB08E, 0x85F3, 0xB090, 0x85F4, 0xB092,
- 0x85F5, 0xB093, 0x85F6, 0xB094, 0x85F7, 0xB095, 0x85F8, 0xB096, 0x85F9, 0xB097, 0x85FA, 0xB09B, 0x85FB, 0xB09D, 0x85FC, 0xB09E,
- 0x85FD, 0xB0A3, 0x85FE, 0xB0A4, 0x8641, 0xB0A5, 0x8642, 0xB0A6, 0x8643, 0xB0A7, 0x8644, 0xB0AA, 0x8645, 0xB0B0, 0x8646, 0xB0B2,
- 0x8647, 0xB0B6, 0x8648, 0xB0B7, 0x8649, 0xB0B9, 0x864A, 0xB0BA, 0x864B, 0xB0BB, 0x864C, 0xB0BD, 0x864D, 0xB0BE, 0x864E, 0xB0BF,
- 0x864F, 0xB0C0, 0x8650, 0xB0C1, 0x8651, 0xB0C2, 0x8652, 0xB0C3, 0x8653, 0xB0C6, 0x8654, 0xB0CA, 0x8655, 0xB0CB, 0x8656, 0xB0CC,
- 0x8657, 0xB0CD, 0x8658, 0xB0CE, 0x8659, 0xB0CF, 0x865A, 0xB0D2, 0x8661, 0xB0D3, 0x8662, 0xB0D5, 0x8663, 0xB0D6, 0x8664, 0xB0D7,
- 0x8665, 0xB0D9, 0x8666, 0xB0DA, 0x8667, 0xB0DB, 0x8668, 0xB0DC, 0x8669, 0xB0DD, 0x866A, 0xB0DE, 0x866B, 0xB0DF, 0x866C, 0xB0E1,
- 0x866D, 0xB0E2, 0x866E, 0xB0E3, 0x866F, 0xB0E4, 0x8670, 0xB0E6, 0x8671, 0xB0E7, 0x8672, 0xB0E8, 0x8673, 0xB0E9, 0x8674, 0xB0EA,
- 0x8675, 0xB0EB, 0x8676, 0xB0EC, 0x8677, 0xB0ED, 0x8678, 0xB0EE, 0x8679, 0xB0EF, 0x867A, 0xB0F0, 0x8681, 0xB0F1, 0x8682, 0xB0F2,
- 0x8683, 0xB0F3, 0x8684, 0xB0F4, 0x8685, 0xB0F5, 0x8686, 0xB0F6, 0x8687, 0xB0F7, 0x8688, 0xB0F8, 0x8689, 0xB0F9, 0x868A, 0xB0FA,
- 0x868B, 0xB0FB, 0x868C, 0xB0FC, 0x868D, 0xB0FD, 0x868E, 0xB0FE, 0x868F, 0xB0FF, 0x8690, 0xB100, 0x8691, 0xB101, 0x8692, 0xB102,
- 0x8693, 0xB103, 0x8694, 0xB104, 0x8695, 0xB105, 0x8696, 0xB106, 0x8697, 0xB107, 0x8698, 0xB10A, 0x8699, 0xB10D, 0x869A, 0xB10E,
- 0x869B, 0xB10F, 0x869C, 0xB111, 0x869D, 0xB114, 0x869E, 0xB115, 0x869F, 0xB116, 0x86A0, 0xB117, 0x86A1, 0xB11A, 0x86A2, 0xB11E,
- 0x86A3, 0xB11F, 0x86A4, 0xB120, 0x86A5, 0xB121, 0x86A6, 0xB122, 0x86A7, 0xB126, 0x86A8, 0xB127, 0x86A9, 0xB129, 0x86AA, 0xB12A,
- 0x86AB, 0xB12B, 0x86AC, 0xB12D, 0x86AD, 0xB12E, 0x86AE, 0xB12F, 0x86AF, 0xB130, 0x86B0, 0xB131, 0x86B1, 0xB132, 0x86B2, 0xB133,
- 0x86B3, 0xB136, 0x86B4, 0xB13A, 0x86B5, 0xB13B, 0x86B6, 0xB13C, 0x86B7, 0xB13D, 0x86B8, 0xB13E, 0x86B9, 0xB13F, 0x86BA, 0xB142,
- 0x86BB, 0xB143, 0x86BC, 0xB145, 0x86BD, 0xB146, 0x86BE, 0xB147, 0x86BF, 0xB149, 0x86C0, 0xB14A, 0x86C1, 0xB14B, 0x86C2, 0xB14C,
- 0x86C3, 0xB14D, 0x86C4, 0xB14E, 0x86C5, 0xB14F, 0x86C6, 0xB152, 0x86C7, 0xB153, 0x86C8, 0xB156, 0x86C9, 0xB157, 0x86CA, 0xB159,
- 0x86CB, 0xB15A, 0x86CC, 0xB15B, 0x86CD, 0xB15D, 0x86CE, 0xB15E, 0x86CF, 0xB15F, 0x86D0, 0xB161, 0x86D1, 0xB162, 0x86D2, 0xB163,
- 0x86D3, 0xB164, 0x86D4, 0xB165, 0x86D5, 0xB166, 0x86D6, 0xB167, 0x86D7, 0xB168, 0x86D8, 0xB169, 0x86D9, 0xB16A, 0x86DA, 0xB16B,
- 0x86DB, 0xB16C, 0x86DC, 0xB16D, 0x86DD, 0xB16E, 0x86DE, 0xB16F, 0x86DF, 0xB170, 0x86E0, 0xB171, 0x86E1, 0xB172, 0x86E2, 0xB173,
- 0x86E3, 0xB174, 0x86E4, 0xB175, 0x86E5, 0xB176, 0x86E6, 0xB177, 0x86E7, 0xB17A, 0x86E8, 0xB17B, 0x86E9, 0xB17D, 0x86EA, 0xB17E,
- 0x86EB, 0xB17F, 0x86EC, 0xB181, 0x86ED, 0xB183, 0x86EE, 0xB184, 0x86EF, 0xB185, 0x86F0, 0xB186, 0x86F1, 0xB187, 0x86F2, 0xB18A,
- 0x86F3, 0xB18C, 0x86F4, 0xB18E, 0x86F5, 0xB18F, 0x86F6, 0xB190, 0x86F7, 0xB191, 0x86F8, 0xB195, 0x86F9, 0xB196, 0x86FA, 0xB197,
- 0x86FB, 0xB199, 0x86FC, 0xB19A, 0x86FD, 0xB19B, 0x86FE, 0xB19D, 0x8741, 0xB19E, 0x8742, 0xB19F, 0x8743, 0xB1A0, 0x8744, 0xB1A1,
- 0x8745, 0xB1A2, 0x8746, 0xB1A3, 0x8747, 0xB1A4, 0x8748, 0xB1A5, 0x8749, 0xB1A6, 0x874A, 0xB1A7, 0x874B, 0xB1A9, 0x874C, 0xB1AA,
- 0x874D, 0xB1AB, 0x874E, 0xB1AC, 0x874F, 0xB1AD, 0x8750, 0xB1AE, 0x8751, 0xB1AF, 0x8752, 0xB1B0, 0x8753, 0xB1B1, 0x8754, 0xB1B2,
- 0x8755, 0xB1B3, 0x8756, 0xB1B4, 0x8757, 0xB1B5, 0x8758, 0xB1B6, 0x8759, 0xB1B7, 0x875A, 0xB1B8, 0x8761, 0xB1B9, 0x8762, 0xB1BA,
- 0x8763, 0xB1BB, 0x8764, 0xB1BC, 0x8765, 0xB1BD, 0x8766, 0xB1BE, 0x8767, 0xB1BF, 0x8768, 0xB1C0, 0x8769, 0xB1C1, 0x876A, 0xB1C2,
- 0x876B, 0xB1C3, 0x876C, 0xB1C4, 0x876D, 0xB1C5, 0x876E, 0xB1C6, 0x876F, 0xB1C7, 0x8770, 0xB1C8, 0x8771, 0xB1C9, 0x8772, 0xB1CA,
- 0x8773, 0xB1CB, 0x8774, 0xB1CD, 0x8775, 0xB1CE, 0x8776, 0xB1CF, 0x8777, 0xB1D1, 0x8778, 0xB1D2, 0x8779, 0xB1D3, 0x877A, 0xB1D5,
- 0x8781, 0xB1D6, 0x8782, 0xB1D7, 0x8783, 0xB1D8, 0x8784, 0xB1D9, 0x8785, 0xB1DA, 0x8786, 0xB1DB, 0x8787, 0xB1DE, 0x8788, 0xB1E0,
- 0x8789, 0xB1E1, 0x878A, 0xB1E2, 0x878B, 0xB1E3, 0x878C, 0xB1E4, 0x878D, 0xB1E5, 0x878E, 0xB1E6, 0x878F, 0xB1E7, 0x8790, 0xB1EA,
- 0x8791, 0xB1EB, 0x8792, 0xB1ED, 0x8793, 0xB1EE, 0x8794, 0xB1EF, 0x8795, 0xB1F1, 0x8796, 0xB1F2, 0x8797, 0xB1F3, 0x8798, 0xB1F4,
- 0x8799, 0xB1F5, 0x879A, 0xB1F6, 0x879B, 0xB1F7, 0x879C, 0xB1F8, 0x879D, 0xB1FA, 0x879E, 0xB1FC, 0x879F, 0xB1FE, 0x87A0, 0xB1FF,
- 0x87A1, 0xB200, 0x87A2, 0xB201, 0x87A3, 0xB202, 0x87A4, 0xB203, 0x87A5, 0xB206, 0x87A6, 0xB207, 0x87A7, 0xB209, 0x87A8, 0xB20A,
- 0x87A9, 0xB20D, 0x87AA, 0xB20E, 0x87AB, 0xB20F, 0x87AC, 0xB210, 0x87AD, 0xB211, 0x87AE, 0xB212, 0x87AF, 0xB213, 0x87B0, 0xB216,
- 0x87B1, 0xB218, 0x87B2, 0xB21A, 0x87B3, 0xB21B, 0x87B4, 0xB21C, 0x87B5, 0xB21D, 0x87B6, 0xB21E, 0x87B7, 0xB21F, 0x87B8, 0xB221,
- 0x87B9, 0xB222, 0x87BA, 0xB223, 0x87BB, 0xB224, 0x87BC, 0xB225, 0x87BD, 0xB226, 0x87BE, 0xB227, 0x87BF, 0xB228, 0x87C0, 0xB229,
- 0x87C1, 0xB22A, 0x87C2, 0xB22B, 0x87C3, 0xB22C, 0x87C4, 0xB22D, 0x87C5, 0xB22E, 0x87C6, 0xB22F, 0x87C7, 0xB230, 0x87C8, 0xB231,
- 0x87C9, 0xB232, 0x87CA, 0xB233, 0x87CB, 0xB235, 0x87CC, 0xB236, 0x87CD, 0xB237, 0x87CE, 0xB238, 0x87CF, 0xB239, 0x87D0, 0xB23A,
- 0x87D1, 0xB23B, 0x87D2, 0xB23D, 0x87D3, 0xB23E, 0x87D4, 0xB23F, 0x87D5, 0xB240, 0x87D6, 0xB241, 0x87D7, 0xB242, 0x87D8, 0xB243,
- 0x87D9, 0xB244, 0x87DA, 0xB245, 0x87DB, 0xB246, 0x87DC, 0xB247, 0x87DD, 0xB248, 0x87DE, 0xB249, 0x87DF, 0xB24A, 0x87E0, 0xB24B,
- 0x87E1, 0xB24C, 0x87E2, 0xB24D, 0x87E3, 0xB24E, 0x87E4, 0xB24F, 0x87E5, 0xB250, 0x87E6, 0xB251, 0x87E7, 0xB252, 0x87E8, 0xB253,
- 0x87E9, 0xB254, 0x87EA, 0xB255, 0x87EB, 0xB256, 0x87EC, 0xB257, 0x87ED, 0xB259, 0x87EE, 0xB25A, 0x87EF, 0xB25B, 0x87F0, 0xB25D,
- 0x87F1, 0xB25E, 0x87F2, 0xB25F, 0x87F3, 0xB261, 0x87F4, 0xB262, 0x87F5, 0xB263, 0x87F6, 0xB264, 0x87F7, 0xB265, 0x87F8, 0xB266,
- 0x87F9, 0xB267, 0x87FA, 0xB26A, 0x87FB, 0xB26B, 0x87FC, 0xB26C, 0x87FD, 0xB26D, 0x87FE, 0xB26E, 0x8841, 0xB26F, 0x8842, 0xB270,
- 0x8843, 0xB271, 0x8844, 0xB272, 0x8845, 0xB273, 0x8846, 0xB276, 0x8847, 0xB277, 0x8848, 0xB278, 0x8849, 0xB279, 0x884A, 0xB27A,
- 0x884B, 0xB27B, 0x884C, 0xB27D, 0x884D, 0xB27E, 0x884E, 0xB27F, 0x884F, 0xB280, 0x8850, 0xB281, 0x8851, 0xB282, 0x8852, 0xB283,
- 0x8853, 0xB286, 0x8854, 0xB287, 0x8855, 0xB288, 0x8856, 0xB28A, 0x8857, 0xB28B, 0x8858, 0xB28C, 0x8859, 0xB28D, 0x885A, 0xB28E,
- 0x8861, 0xB28F, 0x8862, 0xB292, 0x8863, 0xB293, 0x8864, 0xB295, 0x8865, 0xB296, 0x8866, 0xB297, 0x8867, 0xB29B, 0x8868, 0xB29C,
- 0x8869, 0xB29D, 0x886A, 0xB29E, 0x886B, 0xB29F, 0x886C, 0xB2A2, 0x886D, 0xB2A4, 0x886E, 0xB2A7, 0x886F, 0xB2A8, 0x8870, 0xB2A9,
- 0x8871, 0xB2AB, 0x8872, 0xB2AD, 0x8873, 0xB2AE, 0x8874, 0xB2AF, 0x8875, 0xB2B1, 0x8876, 0xB2B2, 0x8877, 0xB2B3, 0x8878, 0xB2B5,
- 0x8879, 0xB2B6, 0x887A, 0xB2B7, 0x8881, 0xB2B8, 0x8882, 0xB2B9, 0x8883, 0xB2BA, 0x8884, 0xB2BB, 0x8885, 0xB2BC, 0x8886, 0xB2BD,
- 0x8887, 0xB2BE, 0x8888, 0xB2BF, 0x8889, 0xB2C0, 0x888A, 0xB2C1, 0x888B, 0xB2C2, 0x888C, 0xB2C3, 0x888D, 0xB2C4, 0x888E, 0xB2C5,
- 0x888F, 0xB2C6, 0x8890, 0xB2C7, 0x8891, 0xB2CA, 0x8892, 0xB2CB, 0x8893, 0xB2CD, 0x8894, 0xB2CE, 0x8895, 0xB2CF, 0x8896, 0xB2D1,
- 0x8897, 0xB2D3, 0x8898, 0xB2D4, 0x8899, 0xB2D5, 0x889A, 0xB2D6, 0x889B, 0xB2D7, 0x889C, 0xB2DA, 0x889D, 0xB2DC, 0x889E, 0xB2DE,
- 0x889F, 0xB2DF, 0x88A0, 0xB2E0, 0x88A1, 0xB2E1, 0x88A2, 0xB2E3, 0x88A3, 0xB2E7, 0x88A4, 0xB2E9, 0x88A5, 0xB2EA, 0x88A6, 0xB2F0,
- 0x88A7, 0xB2F1, 0x88A8, 0xB2F2, 0x88A9, 0xB2F6, 0x88AA, 0xB2FC, 0x88AB, 0xB2FD, 0x88AC, 0xB2FE, 0x88AD, 0xB302, 0x88AE, 0xB303,
- 0x88AF, 0xB305, 0x88B0, 0xB306, 0x88B1, 0xB307, 0x88B2, 0xB309, 0x88B3, 0xB30A, 0x88B4, 0xB30B, 0x88B5, 0xB30C, 0x88B6, 0xB30D,
- 0x88B7, 0xB30E, 0x88B8, 0xB30F, 0x88B9, 0xB312, 0x88BA, 0xB316, 0x88BB, 0xB317, 0x88BC, 0xB318, 0x88BD, 0xB319, 0x88BE, 0xB31A,
- 0x88BF, 0xB31B, 0x88C0, 0xB31D, 0x88C1, 0xB31E, 0x88C2, 0xB31F, 0x88C3, 0xB320, 0x88C4, 0xB321, 0x88C5, 0xB322, 0x88C6, 0xB323,
- 0x88C7, 0xB324, 0x88C8, 0xB325, 0x88C9, 0xB326, 0x88CA, 0xB327, 0x88CB, 0xB328, 0x88CC, 0xB329, 0x88CD, 0xB32A, 0x88CE, 0xB32B,
- 0x88CF, 0xB32C, 0x88D0, 0xB32D, 0x88D1, 0xB32E, 0x88D2, 0xB32F, 0x88D3, 0xB330, 0x88D4, 0xB331, 0x88D5, 0xB332, 0x88D6, 0xB333,
- 0x88D7, 0xB334, 0x88D8, 0xB335, 0x88D9, 0xB336, 0x88DA, 0xB337, 0x88DB, 0xB338, 0x88DC, 0xB339, 0x88DD, 0xB33A, 0x88DE, 0xB33B,
- 0x88DF, 0xB33C, 0x88E0, 0xB33D, 0x88E1, 0xB33E, 0x88E2, 0xB33F, 0x88E3, 0xB340, 0x88E4, 0xB341, 0x88E5, 0xB342, 0x88E6, 0xB343,
- 0x88E7, 0xB344, 0x88E8, 0xB345, 0x88E9, 0xB346, 0x88EA, 0xB347, 0x88EB, 0xB348, 0x88EC, 0xB349, 0x88ED, 0xB34A, 0x88EE, 0xB34B,
- 0x88EF, 0xB34C, 0x88F0, 0xB34D, 0x88F1, 0xB34E, 0x88F2, 0xB34F, 0x88F3, 0xB350, 0x88F4, 0xB351, 0x88F5, 0xB352, 0x88F6, 0xB353,
- 0x88F7, 0xB357, 0x88F8, 0xB359, 0x88F9, 0xB35A, 0x88FA, 0xB35D, 0x88FB, 0xB360, 0x88FC, 0xB361, 0x88FD, 0xB362, 0x88FE, 0xB363,
- 0x8941, 0xB366, 0x8942, 0xB368, 0x8943, 0xB36A, 0x8944, 0xB36C, 0x8945, 0xB36D, 0x8946, 0xB36F, 0x8947, 0xB372, 0x8948, 0xB373,
- 0x8949, 0xB375, 0x894A, 0xB376, 0x894B, 0xB377, 0x894C, 0xB379, 0x894D, 0xB37A, 0x894E, 0xB37B, 0x894F, 0xB37C, 0x8950, 0xB37D,
- 0x8951, 0xB37E, 0x8952, 0xB37F, 0x8953, 0xB382, 0x8954, 0xB386, 0x8955, 0xB387, 0x8956, 0xB388, 0x8957, 0xB389, 0x8958, 0xB38A,
- 0x8959, 0xB38B, 0x895A, 0xB38D, 0x8961, 0xB38E, 0x8962, 0xB38F, 0x8963, 0xB391, 0x8964, 0xB392, 0x8965, 0xB393, 0x8966, 0xB395,
- 0x8967, 0xB396, 0x8968, 0xB397, 0x8969, 0xB398, 0x896A, 0xB399, 0x896B, 0xB39A, 0x896C, 0xB39B, 0x896D, 0xB39C, 0x896E, 0xB39D,
- 0x896F, 0xB39E, 0x8970, 0xB39F, 0x8971, 0xB3A2, 0x8972, 0xB3A3, 0x8973, 0xB3A4, 0x8974, 0xB3A5, 0x8975, 0xB3A6, 0x8976, 0xB3A7,
- 0x8977, 0xB3A9, 0x8978, 0xB3AA, 0x8979, 0xB3AB, 0x897A, 0xB3AD, 0x8981, 0xB3AE, 0x8982, 0xB3AF, 0x8983, 0xB3B0, 0x8984, 0xB3B1,
- 0x8985, 0xB3B2, 0x8986, 0xB3B3, 0x8987, 0xB3B4, 0x8988, 0xB3B5, 0x8989, 0xB3B6, 0x898A, 0xB3B7, 0x898B, 0xB3B8, 0x898C, 0xB3B9,
- 0x898D, 0xB3BA, 0x898E, 0xB3BB, 0x898F, 0xB3BC, 0x8990, 0xB3BD, 0x8991, 0xB3BE, 0x8992, 0xB3BF, 0x8993, 0xB3C0, 0x8994, 0xB3C1,
- 0x8995, 0xB3C2, 0x8996, 0xB3C3, 0x8997, 0xB3C6, 0x8998, 0xB3C7, 0x8999, 0xB3C9, 0x899A, 0xB3CA, 0x899B, 0xB3CD, 0x899C, 0xB3CF,
- 0x899D, 0xB3D1, 0x899E, 0xB3D2, 0x899F, 0xB3D3, 0x89A0, 0xB3D6, 0x89A1, 0xB3D8, 0x89A2, 0xB3DA, 0x89A3, 0xB3DC, 0x89A4, 0xB3DE,
- 0x89A5, 0xB3DF, 0x89A6, 0xB3E1, 0x89A7, 0xB3E2, 0x89A8, 0xB3E3, 0x89A9, 0xB3E5, 0x89AA, 0xB3E6, 0x89AB, 0xB3E7, 0x89AC, 0xB3E9,
- 0x89AD, 0xB3EA, 0x89AE, 0xB3EB, 0x89AF, 0xB3EC, 0x89B0, 0xB3ED, 0x89B1, 0xB3EE, 0x89B2, 0xB3EF, 0x89B3, 0xB3F0, 0x89B4, 0xB3F1,
- 0x89B5, 0xB3F2, 0x89B6, 0xB3F3, 0x89B7, 0xB3F4, 0x89B8, 0xB3F5, 0x89B9, 0xB3F6, 0x89BA, 0xB3F7, 0x89BB, 0xB3F8, 0x89BC, 0xB3F9,
- 0x89BD, 0xB3FA, 0x89BE, 0xB3FB, 0x89BF, 0xB3FD, 0x89C0, 0xB3FE, 0x89C1, 0xB3FF, 0x89C2, 0xB400, 0x89C3, 0xB401, 0x89C4, 0xB402,
- 0x89C5, 0xB403, 0x89C6, 0xB404, 0x89C7, 0xB405, 0x89C8, 0xB406, 0x89C9, 0xB407, 0x89CA, 0xB408, 0x89CB, 0xB409, 0x89CC, 0xB40A,
- 0x89CD, 0xB40B, 0x89CE, 0xB40C, 0x89CF, 0xB40D, 0x89D0, 0xB40E, 0x89D1, 0xB40F, 0x89D2, 0xB411, 0x89D3, 0xB412, 0x89D4, 0xB413,
- 0x89D5, 0xB414, 0x89D6, 0xB415, 0x89D7, 0xB416, 0x89D8, 0xB417, 0x89D9, 0xB419, 0x89DA, 0xB41A, 0x89DB, 0xB41B, 0x89DC, 0xB41D,
- 0x89DD, 0xB41E, 0x89DE, 0xB41F, 0x89DF, 0xB421, 0x89E0, 0xB422, 0x89E1, 0xB423, 0x89E2, 0xB424, 0x89E3, 0xB425, 0x89E4, 0xB426,
- 0x89E5, 0xB427, 0x89E6, 0xB42A, 0x89E7, 0xB42C, 0x89E8, 0xB42D, 0x89E9, 0xB42E, 0x89EA, 0xB42F, 0x89EB, 0xB430, 0x89EC, 0xB431,
- 0x89ED, 0xB432, 0x89EE, 0xB433, 0x89EF, 0xB435, 0x89F0, 0xB436, 0x89F1, 0xB437, 0x89F2, 0xB438, 0x89F3, 0xB439, 0x89F4, 0xB43A,
- 0x89F5, 0xB43B, 0x89F6, 0xB43C, 0x89F7, 0xB43D, 0x89F8, 0xB43E, 0x89F9, 0xB43F, 0x89FA, 0xB440, 0x89FB, 0xB441, 0x89FC, 0xB442,
- 0x89FD, 0xB443, 0x89FE, 0xB444, 0x8A41, 0xB445, 0x8A42, 0xB446, 0x8A43, 0xB447, 0x8A44, 0xB448, 0x8A45, 0xB449, 0x8A46, 0xB44A,
- 0x8A47, 0xB44B, 0x8A48, 0xB44C, 0x8A49, 0xB44D, 0x8A4A, 0xB44E, 0x8A4B, 0xB44F, 0x8A4C, 0xB452, 0x8A4D, 0xB453, 0x8A4E, 0xB455,
- 0x8A4F, 0xB456, 0x8A50, 0xB457, 0x8A51, 0xB459, 0x8A52, 0xB45A, 0x8A53, 0xB45B, 0x8A54, 0xB45C, 0x8A55, 0xB45D, 0x8A56, 0xB45E,
- 0x8A57, 0xB45F, 0x8A58, 0xB462, 0x8A59, 0xB464, 0x8A5A, 0xB466, 0x8A61, 0xB467, 0x8A62, 0xB468, 0x8A63, 0xB469, 0x8A64, 0xB46A,
- 0x8A65, 0xB46B, 0x8A66, 0xB46D, 0x8A67, 0xB46E, 0x8A68, 0xB46F, 0x8A69, 0xB470, 0x8A6A, 0xB471, 0x8A6B, 0xB472, 0x8A6C, 0xB473,
- 0x8A6D, 0xB474, 0x8A6E, 0xB475, 0x8A6F, 0xB476, 0x8A70, 0xB477, 0x8A71, 0xB478, 0x8A72, 0xB479, 0x8A73, 0xB47A, 0x8A74, 0xB47B,
- 0x8A75, 0xB47C, 0x8A76, 0xB47D, 0x8A77, 0xB47E, 0x8A78, 0xB47F, 0x8A79, 0xB481, 0x8A7A, 0xB482, 0x8A81, 0xB483, 0x8A82, 0xB484,
- 0x8A83, 0xB485, 0x8A84, 0xB486, 0x8A85, 0xB487, 0x8A86, 0xB489, 0x8A87, 0xB48A, 0x8A88, 0xB48B, 0x8A89, 0xB48C, 0x8A8A, 0xB48D,
- 0x8A8B, 0xB48E, 0x8A8C, 0xB48F, 0x8A8D, 0xB490, 0x8A8E, 0xB491, 0x8A8F, 0xB492, 0x8A90, 0xB493, 0x8A91, 0xB494, 0x8A92, 0xB495,
- 0x8A93, 0xB496, 0x8A94, 0xB497, 0x8A95, 0xB498, 0x8A96, 0xB499, 0x8A97, 0xB49A, 0x8A98, 0xB49B, 0x8A99, 0xB49C, 0x8A9A, 0xB49E,
- 0x8A9B, 0xB49F, 0x8A9C, 0xB4A0, 0x8A9D, 0xB4A1, 0x8A9E, 0xB4A2, 0x8A9F, 0xB4A3, 0x8AA0, 0xB4A5, 0x8AA1, 0xB4A6, 0x8AA2, 0xB4A7,
- 0x8AA3, 0xB4A9, 0x8AA4, 0xB4AA, 0x8AA5, 0xB4AB, 0x8AA6, 0xB4AD, 0x8AA7, 0xB4AE, 0x8AA8, 0xB4AF, 0x8AA9, 0xB4B0, 0x8AAA, 0xB4B1,
- 0x8AAB, 0xB4B2, 0x8AAC, 0xB4B3, 0x8AAD, 0xB4B4, 0x8AAE, 0xB4B6, 0x8AAF, 0xB4B8, 0x8AB0, 0xB4BA, 0x8AB1, 0xB4BB, 0x8AB2, 0xB4BC,
- 0x8AB3, 0xB4BD, 0x8AB4, 0xB4BE, 0x8AB5, 0xB4BF, 0x8AB6, 0xB4C1, 0x8AB7, 0xB4C2, 0x8AB8, 0xB4C3, 0x8AB9, 0xB4C5, 0x8ABA, 0xB4C6,
- 0x8ABB, 0xB4C7, 0x8ABC, 0xB4C9, 0x8ABD, 0xB4CA, 0x8ABE, 0xB4CB, 0x8ABF, 0xB4CC, 0x8AC0, 0xB4CD, 0x8AC1, 0xB4CE, 0x8AC2, 0xB4CF,
- 0x8AC3, 0xB4D1, 0x8AC4, 0xB4D2, 0x8AC5, 0xB4D3, 0x8AC6, 0xB4D4, 0x8AC7, 0xB4D6, 0x8AC8, 0xB4D7, 0x8AC9, 0xB4D8, 0x8ACA, 0xB4D9,
- 0x8ACB, 0xB4DA, 0x8ACC, 0xB4DB, 0x8ACD, 0xB4DE, 0x8ACE, 0xB4DF, 0x8ACF, 0xB4E1, 0x8AD0, 0xB4E2, 0x8AD1, 0xB4E5, 0x8AD2, 0xB4E7,
- 0x8AD3, 0xB4E8, 0x8AD4, 0xB4E9, 0x8AD5, 0xB4EA, 0x8AD6, 0xB4EB, 0x8AD7, 0xB4EE, 0x8AD8, 0xB4F0, 0x8AD9, 0xB4F2, 0x8ADA, 0xB4F3,
- 0x8ADB, 0xB4F4, 0x8ADC, 0xB4F5, 0x8ADD, 0xB4F6, 0x8ADE, 0xB4F7, 0x8ADF, 0xB4F9, 0x8AE0, 0xB4FA, 0x8AE1, 0xB4FB, 0x8AE2, 0xB4FC,
- 0x8AE3, 0xB4FD, 0x8AE4, 0xB4FE, 0x8AE5, 0xB4FF, 0x8AE6, 0xB500, 0x8AE7, 0xB501, 0x8AE8, 0xB502, 0x8AE9, 0xB503, 0x8AEA, 0xB504,
- 0x8AEB, 0xB505, 0x8AEC, 0xB506, 0x8AED, 0xB507, 0x8AEE, 0xB508, 0x8AEF, 0xB509, 0x8AF0, 0xB50A, 0x8AF1, 0xB50B, 0x8AF2, 0xB50C,
- 0x8AF3, 0xB50D, 0x8AF4, 0xB50E, 0x8AF5, 0xB50F, 0x8AF6, 0xB510, 0x8AF7, 0xB511, 0x8AF8, 0xB512, 0x8AF9, 0xB513, 0x8AFA, 0xB516,
- 0x8AFB, 0xB517, 0x8AFC, 0xB519, 0x8AFD, 0xB51A, 0x8AFE, 0xB51D, 0x8B41, 0xB51E, 0x8B42, 0xB51F, 0x8B43, 0xB520, 0x8B44, 0xB521,
- 0x8B45, 0xB522, 0x8B46, 0xB523, 0x8B47, 0xB526, 0x8B48, 0xB52B, 0x8B49, 0xB52C, 0x8B4A, 0xB52D, 0x8B4B, 0xB52E, 0x8B4C, 0xB52F,
- 0x8B4D, 0xB532, 0x8B4E, 0xB533, 0x8B4F, 0xB535, 0x8B50, 0xB536, 0x8B51, 0xB537, 0x8B52, 0xB539, 0x8B53, 0xB53A, 0x8B54, 0xB53B,
- 0x8B55, 0xB53C, 0x8B56, 0xB53D, 0x8B57, 0xB53E, 0x8B58, 0xB53F, 0x8B59, 0xB542, 0x8B5A, 0xB546, 0x8B61, 0xB547, 0x8B62, 0xB548,
- 0x8B63, 0xB549, 0x8B64, 0xB54A, 0x8B65, 0xB54E, 0x8B66, 0xB54F, 0x8B67, 0xB551, 0x8B68, 0xB552, 0x8B69, 0xB553, 0x8B6A, 0xB555,
- 0x8B6B, 0xB556, 0x8B6C, 0xB557, 0x8B6D, 0xB558, 0x8B6E, 0xB559, 0x8B6F, 0xB55A, 0x8B70, 0xB55B, 0x8B71, 0xB55E, 0x8B72, 0xB562,
- 0x8B73, 0xB563, 0x8B74, 0xB564, 0x8B75, 0xB565, 0x8B76, 0xB566, 0x8B77, 0xB567, 0x8B78, 0xB568, 0x8B79, 0xB569, 0x8B7A, 0xB56A,
- 0x8B81, 0xB56B, 0x8B82, 0xB56C, 0x8B83, 0xB56D, 0x8B84, 0xB56E, 0x8B85, 0xB56F, 0x8B86, 0xB570, 0x8B87, 0xB571, 0x8B88, 0xB572,
- 0x8B89, 0xB573, 0x8B8A, 0xB574, 0x8B8B, 0xB575, 0x8B8C, 0xB576, 0x8B8D, 0xB577, 0x8B8E, 0xB578, 0x8B8F, 0xB579, 0x8B90, 0xB57A,
- 0x8B91, 0xB57B, 0x8B92, 0xB57C, 0x8B93, 0xB57D, 0x8B94, 0xB57E, 0x8B95, 0xB57F, 0x8B96, 0xB580, 0x8B97, 0xB581, 0x8B98, 0xB582,
- 0x8B99, 0xB583, 0x8B9A, 0xB584, 0x8B9B, 0xB585, 0x8B9C, 0xB586, 0x8B9D, 0xB587, 0x8B9E, 0xB588, 0x8B9F, 0xB589, 0x8BA0, 0xB58A,
- 0x8BA1, 0xB58B, 0x8BA2, 0xB58C, 0x8BA3, 0xB58D, 0x8BA4, 0xB58E, 0x8BA5, 0xB58F, 0x8BA6, 0xB590, 0x8BA7, 0xB591, 0x8BA8, 0xB592,
- 0x8BA9, 0xB593, 0x8BAA, 0xB594, 0x8BAB, 0xB595, 0x8BAC, 0xB596, 0x8BAD, 0xB597, 0x8BAE, 0xB598, 0x8BAF, 0xB599, 0x8BB0, 0xB59A,
- 0x8BB1, 0xB59B, 0x8BB2, 0xB59C, 0x8BB3, 0xB59D, 0x8BB4, 0xB59E, 0x8BB5, 0xB59F, 0x8BB6, 0xB5A2, 0x8BB7, 0xB5A3, 0x8BB8, 0xB5A5,
- 0x8BB9, 0xB5A6, 0x8BBA, 0xB5A7, 0x8BBB, 0xB5A9, 0x8BBC, 0xB5AC, 0x8BBD, 0xB5AD, 0x8BBE, 0xB5AE, 0x8BBF, 0xB5AF, 0x8BC0, 0xB5B2,
- 0x8BC1, 0xB5B6, 0x8BC2, 0xB5B7, 0x8BC3, 0xB5B8, 0x8BC4, 0xB5B9, 0x8BC5, 0xB5BA, 0x8BC6, 0xB5BE, 0x8BC7, 0xB5BF, 0x8BC8, 0xB5C1,
- 0x8BC9, 0xB5C2, 0x8BCA, 0xB5C3, 0x8BCB, 0xB5C5, 0x8BCC, 0xB5C6, 0x8BCD, 0xB5C7, 0x8BCE, 0xB5C8, 0x8BCF, 0xB5C9, 0x8BD0, 0xB5CA,
- 0x8BD1, 0xB5CB, 0x8BD2, 0xB5CE, 0x8BD3, 0xB5D2, 0x8BD4, 0xB5D3, 0x8BD5, 0xB5D4, 0x8BD6, 0xB5D5, 0x8BD7, 0xB5D6, 0x8BD8, 0xB5D7,
- 0x8BD9, 0xB5D9, 0x8BDA, 0xB5DA, 0x8BDB, 0xB5DB, 0x8BDC, 0xB5DC, 0x8BDD, 0xB5DD, 0x8BDE, 0xB5DE, 0x8BDF, 0xB5DF, 0x8BE0, 0xB5E0,
- 0x8BE1, 0xB5E1, 0x8BE2, 0xB5E2, 0x8BE3, 0xB5E3, 0x8BE4, 0xB5E4, 0x8BE5, 0xB5E5, 0x8BE6, 0xB5E6, 0x8BE7, 0xB5E7, 0x8BE8, 0xB5E8,
- 0x8BE9, 0xB5E9, 0x8BEA, 0xB5EA, 0x8BEB, 0xB5EB, 0x8BEC, 0xB5ED, 0x8BED, 0xB5EE, 0x8BEE, 0xB5EF, 0x8BEF, 0xB5F0, 0x8BF0, 0xB5F1,
- 0x8BF1, 0xB5F2, 0x8BF2, 0xB5F3, 0x8BF3, 0xB5F4, 0x8BF4, 0xB5F5, 0x8BF5, 0xB5F6, 0x8BF6, 0xB5F7, 0x8BF7, 0xB5F8, 0x8BF8, 0xB5F9,
- 0x8BF9, 0xB5FA, 0x8BFA, 0xB5FB, 0x8BFB, 0xB5FC, 0x8BFC, 0xB5FD, 0x8BFD, 0xB5FE, 0x8BFE, 0xB5FF, 0x8C41, 0xB600, 0x8C42, 0xB601,
- 0x8C43, 0xB602, 0x8C44, 0xB603, 0x8C45, 0xB604, 0x8C46, 0xB605, 0x8C47, 0xB606, 0x8C48, 0xB607, 0x8C49, 0xB608, 0x8C4A, 0xB609,
- 0x8C4B, 0xB60A, 0x8C4C, 0xB60B, 0x8C4D, 0xB60C, 0x8C4E, 0xB60D, 0x8C4F, 0xB60E, 0x8C50, 0xB60F, 0x8C51, 0xB612, 0x8C52, 0xB613,
- 0x8C53, 0xB615, 0x8C54, 0xB616, 0x8C55, 0xB617, 0x8C56, 0xB619, 0x8C57, 0xB61A, 0x8C58, 0xB61B, 0x8C59, 0xB61C, 0x8C5A, 0xB61D,
- 0x8C61, 0xB61E, 0x8C62, 0xB61F, 0x8C63, 0xB620, 0x8C64, 0xB621, 0x8C65, 0xB622, 0x8C66, 0xB623, 0x8C67, 0xB624, 0x8C68, 0xB626,
- 0x8C69, 0xB627, 0x8C6A, 0xB628, 0x8C6B, 0xB629, 0x8C6C, 0xB62A, 0x8C6D, 0xB62B, 0x8C6E, 0xB62D, 0x8C6F, 0xB62E, 0x8C70, 0xB62F,
- 0x8C71, 0xB630, 0x8C72, 0xB631, 0x8C73, 0xB632, 0x8C74, 0xB633, 0x8C75, 0xB635, 0x8C76, 0xB636, 0x8C77, 0xB637, 0x8C78, 0xB638,
- 0x8C79, 0xB639, 0x8C7A, 0xB63A, 0x8C81, 0xB63B, 0x8C82, 0xB63C, 0x8C83, 0xB63D, 0x8C84, 0xB63E, 0x8C85, 0xB63F, 0x8C86, 0xB640,
- 0x8C87, 0xB641, 0x8C88, 0xB642, 0x8C89, 0xB643, 0x8C8A, 0xB644, 0x8C8B, 0xB645, 0x8C8C, 0xB646, 0x8C8D, 0xB647, 0x8C8E, 0xB649,
- 0x8C8F, 0xB64A, 0x8C90, 0xB64B, 0x8C91, 0xB64C, 0x8C92, 0xB64D, 0x8C93, 0xB64E, 0x8C94, 0xB64F, 0x8C95, 0xB650, 0x8C96, 0xB651,
- 0x8C97, 0xB652, 0x8C98, 0xB653, 0x8C99, 0xB654, 0x8C9A, 0xB655, 0x8C9B, 0xB656, 0x8C9C, 0xB657, 0x8C9D, 0xB658, 0x8C9E, 0xB659,
- 0x8C9F, 0xB65A, 0x8CA0, 0xB65B, 0x8CA1, 0xB65C, 0x8CA2, 0xB65D, 0x8CA3, 0xB65E, 0x8CA4, 0xB65F, 0x8CA5, 0xB660, 0x8CA6, 0xB661,
- 0x8CA7, 0xB662, 0x8CA8, 0xB663, 0x8CA9, 0xB665, 0x8CAA, 0xB666, 0x8CAB, 0xB667, 0x8CAC, 0xB669, 0x8CAD, 0xB66A, 0x8CAE, 0xB66B,
- 0x8CAF, 0xB66C, 0x8CB0, 0xB66D, 0x8CB1, 0xB66E, 0x8CB2, 0xB66F, 0x8CB3, 0xB670, 0x8CB4, 0xB671, 0x8CB5, 0xB672, 0x8CB6, 0xB673,
- 0x8CB7, 0xB674, 0x8CB8, 0xB675, 0x8CB9, 0xB676, 0x8CBA, 0xB677, 0x8CBB, 0xB678, 0x8CBC, 0xB679, 0x8CBD, 0xB67A, 0x8CBE, 0xB67B,
- 0x8CBF, 0xB67C, 0x8CC0, 0xB67D, 0x8CC1, 0xB67E, 0x8CC2, 0xB67F, 0x8CC3, 0xB680, 0x8CC4, 0xB681, 0x8CC5, 0xB682, 0x8CC6, 0xB683,
- 0x8CC7, 0xB684, 0x8CC8, 0xB685, 0x8CC9, 0xB686, 0x8CCA, 0xB687, 0x8CCB, 0xB688, 0x8CCC, 0xB689, 0x8CCD, 0xB68A, 0x8CCE, 0xB68B,
- 0x8CCF, 0xB68C, 0x8CD0, 0xB68D, 0x8CD1, 0xB68E, 0x8CD2, 0xB68F, 0x8CD3, 0xB690, 0x8CD4, 0xB691, 0x8CD5, 0xB692, 0x8CD6, 0xB693,
- 0x8CD7, 0xB694, 0x8CD8, 0xB695, 0x8CD9, 0xB696, 0x8CDA, 0xB697, 0x8CDB, 0xB698, 0x8CDC, 0xB699, 0x8CDD, 0xB69A, 0x8CDE, 0xB69B,
- 0x8CDF, 0xB69E, 0x8CE0, 0xB69F, 0x8CE1, 0xB6A1, 0x8CE2, 0xB6A2, 0x8CE3, 0xB6A3, 0x8CE4, 0xB6A5, 0x8CE5, 0xB6A6, 0x8CE6, 0xB6A7,
- 0x8CE7, 0xB6A8, 0x8CE8, 0xB6A9, 0x8CE9, 0xB6AA, 0x8CEA, 0xB6AD, 0x8CEB, 0xB6AE, 0x8CEC, 0xB6AF, 0x8CED, 0xB6B0, 0x8CEE, 0xB6B2,
- 0x8CEF, 0xB6B3, 0x8CF0, 0xB6B4, 0x8CF1, 0xB6B5, 0x8CF2, 0xB6B6, 0x8CF3, 0xB6B7, 0x8CF4, 0xB6B8, 0x8CF5, 0xB6B9, 0x8CF6, 0xB6BA,
- 0x8CF7, 0xB6BB, 0x8CF8, 0xB6BC, 0x8CF9, 0xB6BD, 0x8CFA, 0xB6BE, 0x8CFB, 0xB6BF, 0x8CFC, 0xB6C0, 0x8CFD, 0xB6C1, 0x8CFE, 0xB6C2,
- 0x8D41, 0xB6C3, 0x8D42, 0xB6C4, 0x8D43, 0xB6C5, 0x8D44, 0xB6C6, 0x8D45, 0xB6C7, 0x8D46, 0xB6C8, 0x8D47, 0xB6C9, 0x8D48, 0xB6CA,
- 0x8D49, 0xB6CB, 0x8D4A, 0xB6CC, 0x8D4B, 0xB6CD, 0x8D4C, 0xB6CE, 0x8D4D, 0xB6CF, 0x8D4E, 0xB6D0, 0x8D4F, 0xB6D1, 0x8D50, 0xB6D2,
- 0x8D51, 0xB6D3, 0x8D52, 0xB6D5, 0x8D53, 0xB6D6, 0x8D54, 0xB6D7, 0x8D55, 0xB6D8, 0x8D56, 0xB6D9, 0x8D57, 0xB6DA, 0x8D58, 0xB6DB,
- 0x8D59, 0xB6DC, 0x8D5A, 0xB6DD, 0x8D61, 0xB6DE, 0x8D62, 0xB6DF, 0x8D63, 0xB6E0, 0x8D64, 0xB6E1, 0x8D65, 0xB6E2, 0x8D66, 0xB6E3,
- 0x8D67, 0xB6E4, 0x8D68, 0xB6E5, 0x8D69, 0xB6E6, 0x8D6A, 0xB6E7, 0x8D6B, 0xB6E8, 0x8D6C, 0xB6E9, 0x8D6D, 0xB6EA, 0x8D6E, 0xB6EB,
- 0x8D6F, 0xB6EC, 0x8D70, 0xB6ED, 0x8D71, 0xB6EE, 0x8D72, 0xB6EF, 0x8D73, 0xB6F1, 0x8D74, 0xB6F2, 0x8D75, 0xB6F3, 0x8D76, 0xB6F5,
- 0x8D77, 0xB6F6, 0x8D78, 0xB6F7, 0x8D79, 0xB6F9, 0x8D7A, 0xB6FA, 0x8D81, 0xB6FB, 0x8D82, 0xB6FC, 0x8D83, 0xB6FD, 0x8D84, 0xB6FE,
- 0x8D85, 0xB6FF, 0x8D86, 0xB702, 0x8D87, 0xB703, 0x8D88, 0xB704, 0x8D89, 0xB706, 0x8D8A, 0xB707, 0x8D8B, 0xB708, 0x8D8C, 0xB709,
- 0x8D8D, 0xB70A, 0x8D8E, 0xB70B, 0x8D8F, 0xB70C, 0x8D90, 0xB70D, 0x8D91, 0xB70E, 0x8D92, 0xB70F, 0x8D93, 0xB710, 0x8D94, 0xB711,
- 0x8D95, 0xB712, 0x8D96, 0xB713, 0x8D97, 0xB714, 0x8D98, 0xB715, 0x8D99, 0xB716, 0x8D9A, 0xB717, 0x8D9B, 0xB718, 0x8D9C, 0xB719,
- 0x8D9D, 0xB71A, 0x8D9E, 0xB71B, 0x8D9F, 0xB71C, 0x8DA0, 0xB71D, 0x8DA1, 0xB71E, 0x8DA2, 0xB71F, 0x8DA3, 0xB720, 0x8DA4, 0xB721,
- 0x8DA5, 0xB722, 0x8DA6, 0xB723, 0x8DA7, 0xB724, 0x8DA8, 0xB725, 0x8DA9, 0xB726, 0x8DAA, 0xB727, 0x8DAB, 0xB72A, 0x8DAC, 0xB72B,
- 0x8DAD, 0xB72D, 0x8DAE, 0xB72E, 0x8DAF, 0xB731, 0x8DB0, 0xB732, 0x8DB1, 0xB733, 0x8DB2, 0xB734, 0x8DB3, 0xB735, 0x8DB4, 0xB736,
- 0x8DB5, 0xB737, 0x8DB6, 0xB73A, 0x8DB7, 0xB73C, 0x8DB8, 0xB73D, 0x8DB9, 0xB73E, 0x8DBA, 0xB73F, 0x8DBB, 0xB740, 0x8DBC, 0xB741,
- 0x8DBD, 0xB742, 0x8DBE, 0xB743, 0x8DBF, 0xB745, 0x8DC0, 0xB746, 0x8DC1, 0xB747, 0x8DC2, 0xB749, 0x8DC3, 0xB74A, 0x8DC4, 0xB74B,
- 0x8DC5, 0xB74D, 0x8DC6, 0xB74E, 0x8DC7, 0xB74F, 0x8DC8, 0xB750, 0x8DC9, 0xB751, 0x8DCA, 0xB752, 0x8DCB, 0xB753, 0x8DCC, 0xB756,
- 0x8DCD, 0xB757, 0x8DCE, 0xB758, 0x8DCF, 0xB759, 0x8DD0, 0xB75A, 0x8DD1, 0xB75B, 0x8DD2, 0xB75C, 0x8DD3, 0xB75D, 0x8DD4, 0xB75E,
- 0x8DD5, 0xB75F, 0x8DD6, 0xB761, 0x8DD7, 0xB762, 0x8DD8, 0xB763, 0x8DD9, 0xB765, 0x8DDA, 0xB766, 0x8DDB, 0xB767, 0x8DDC, 0xB769,
- 0x8DDD, 0xB76A, 0x8DDE, 0xB76B, 0x8DDF, 0xB76C, 0x8DE0, 0xB76D, 0x8DE1, 0xB76E, 0x8DE2, 0xB76F, 0x8DE3, 0xB772, 0x8DE4, 0xB774,
- 0x8DE5, 0xB776, 0x8DE6, 0xB777, 0x8DE7, 0xB778, 0x8DE8, 0xB779, 0x8DE9, 0xB77A, 0x8DEA, 0xB77B, 0x8DEB, 0xB77E, 0x8DEC, 0xB77F,
- 0x8DED, 0xB781, 0x8DEE, 0xB782, 0x8DEF, 0xB783, 0x8DF0, 0xB785, 0x8DF1, 0xB786, 0x8DF2, 0xB787, 0x8DF3, 0xB788, 0x8DF4, 0xB789,
- 0x8DF5, 0xB78A, 0x8DF6, 0xB78B, 0x8DF7, 0xB78E, 0x8DF8, 0xB793, 0x8DF9, 0xB794, 0x8DFA, 0xB795, 0x8DFB, 0xB79A, 0x8DFC, 0xB79B,
- 0x8DFD, 0xB79D, 0x8DFE, 0xB79E, 0x8E41, 0xB79F, 0x8E42, 0xB7A1, 0x8E43, 0xB7A2, 0x8E44, 0xB7A3, 0x8E45, 0xB7A4, 0x8E46, 0xB7A5,
- 0x8E47, 0xB7A6, 0x8E48, 0xB7A7, 0x8E49, 0xB7AA, 0x8E4A, 0xB7AE, 0x8E4B, 0xB7AF, 0x8E4C, 0xB7B0, 0x8E4D, 0xB7B1, 0x8E4E, 0xB7B2,
- 0x8E4F, 0xB7B3, 0x8E50, 0xB7B6, 0x8E51, 0xB7B7, 0x8E52, 0xB7B9, 0x8E53, 0xB7BA, 0x8E54, 0xB7BB, 0x8E55, 0xB7BC, 0x8E56, 0xB7BD,
- 0x8E57, 0xB7BE, 0x8E58, 0xB7BF, 0x8E59, 0xB7C0, 0x8E5A, 0xB7C1, 0x8E61, 0xB7C2, 0x8E62, 0xB7C3, 0x8E63, 0xB7C4, 0x8E64, 0xB7C5,
- 0x8E65, 0xB7C6, 0x8E66, 0xB7C8, 0x8E67, 0xB7CA, 0x8E68, 0xB7CB, 0x8E69, 0xB7CC, 0x8E6A, 0xB7CD, 0x8E6B, 0xB7CE, 0x8E6C, 0xB7CF,
- 0x8E6D, 0xB7D0, 0x8E6E, 0xB7D1, 0x8E6F, 0xB7D2, 0x8E70, 0xB7D3, 0x8E71, 0xB7D4, 0x8E72, 0xB7D5, 0x8E73, 0xB7D6, 0x8E74, 0xB7D7,
- 0x8E75, 0xB7D8, 0x8E76, 0xB7D9, 0x8E77, 0xB7DA, 0x8E78, 0xB7DB, 0x8E79, 0xB7DC, 0x8E7A, 0xB7DD, 0x8E81, 0xB7DE, 0x8E82, 0xB7DF,
- 0x8E83, 0xB7E0, 0x8E84, 0xB7E1, 0x8E85, 0xB7E2, 0x8E86, 0xB7E3, 0x8E87, 0xB7E4, 0x8E88, 0xB7E5, 0x8E89, 0xB7E6, 0x8E8A, 0xB7E7,
- 0x8E8B, 0xB7E8, 0x8E8C, 0xB7E9, 0x8E8D, 0xB7EA, 0x8E8E, 0xB7EB, 0x8E8F, 0xB7EE, 0x8E90, 0xB7EF, 0x8E91, 0xB7F1, 0x8E92, 0xB7F2,
- 0x8E93, 0xB7F3, 0x8E94, 0xB7F5, 0x8E95, 0xB7F6, 0x8E96, 0xB7F7, 0x8E97, 0xB7F8, 0x8E98, 0xB7F9, 0x8E99, 0xB7FA, 0x8E9A, 0xB7FB,
- 0x8E9B, 0xB7FE, 0x8E9C, 0xB802, 0x8E9D, 0xB803, 0x8E9E, 0xB804, 0x8E9F, 0xB805, 0x8EA0, 0xB806, 0x8EA1, 0xB80A, 0x8EA2, 0xB80B,
- 0x8EA3, 0xB80D, 0x8EA4, 0xB80E, 0x8EA5, 0xB80F, 0x8EA6, 0xB811, 0x8EA7, 0xB812, 0x8EA8, 0xB813, 0x8EA9, 0xB814, 0x8EAA, 0xB815,
- 0x8EAB, 0xB816, 0x8EAC, 0xB817, 0x8EAD, 0xB81A, 0x8EAE, 0xB81C, 0x8EAF, 0xB81E, 0x8EB0, 0xB81F, 0x8EB1, 0xB820, 0x8EB2, 0xB821,
- 0x8EB3, 0xB822, 0x8EB4, 0xB823, 0x8EB5, 0xB826, 0x8EB6, 0xB827, 0x8EB7, 0xB829, 0x8EB8, 0xB82A, 0x8EB9, 0xB82B, 0x8EBA, 0xB82D,
- 0x8EBB, 0xB82E, 0x8EBC, 0xB82F, 0x8EBD, 0xB830, 0x8EBE, 0xB831, 0x8EBF, 0xB832, 0x8EC0, 0xB833, 0x8EC1, 0xB836, 0x8EC2, 0xB83A,
- 0x8EC3, 0xB83B, 0x8EC4, 0xB83C, 0x8EC5, 0xB83D, 0x8EC6, 0xB83E, 0x8EC7, 0xB83F, 0x8EC8, 0xB841, 0x8EC9, 0xB842, 0x8ECA, 0xB843,
- 0x8ECB, 0xB845, 0x8ECC, 0xB846, 0x8ECD, 0xB847, 0x8ECE, 0xB848, 0x8ECF, 0xB849, 0x8ED0, 0xB84A, 0x8ED1, 0xB84B, 0x8ED2, 0xB84C,
- 0x8ED3, 0xB84D, 0x8ED4, 0xB84E, 0x8ED5, 0xB84F, 0x8ED6, 0xB850, 0x8ED7, 0xB852, 0x8ED8, 0xB854, 0x8ED9, 0xB855, 0x8EDA, 0xB856,
- 0x8EDB, 0xB857, 0x8EDC, 0xB858, 0x8EDD, 0xB859, 0x8EDE, 0xB85A, 0x8EDF, 0xB85B, 0x8EE0, 0xB85E, 0x8EE1, 0xB85F, 0x8EE2, 0xB861,
- 0x8EE3, 0xB862, 0x8EE4, 0xB863, 0x8EE5, 0xB865, 0x8EE6, 0xB866, 0x8EE7, 0xB867, 0x8EE8, 0xB868, 0x8EE9, 0xB869, 0x8EEA, 0xB86A,
- 0x8EEB, 0xB86B, 0x8EEC, 0xB86E, 0x8EED, 0xB870, 0x8EEE, 0xB872, 0x8EEF, 0xB873, 0x8EF0, 0xB874, 0x8EF1, 0xB875, 0x8EF2, 0xB876,
- 0x8EF3, 0xB877, 0x8EF4, 0xB879, 0x8EF5, 0xB87A, 0x8EF6, 0xB87B, 0x8EF7, 0xB87D, 0x8EF8, 0xB87E, 0x8EF9, 0xB87F, 0x8EFA, 0xB880,
- 0x8EFB, 0xB881, 0x8EFC, 0xB882, 0x8EFD, 0xB883, 0x8EFE, 0xB884, 0x8F41, 0xB885, 0x8F42, 0xB886, 0x8F43, 0xB887, 0x8F44, 0xB888,
- 0x8F45, 0xB889, 0x8F46, 0xB88A, 0x8F47, 0xB88B, 0x8F48, 0xB88C, 0x8F49, 0xB88E, 0x8F4A, 0xB88F, 0x8F4B, 0xB890, 0x8F4C, 0xB891,
- 0x8F4D, 0xB892, 0x8F4E, 0xB893, 0x8F4F, 0xB894, 0x8F50, 0xB895, 0x8F51, 0xB896, 0x8F52, 0xB897, 0x8F53, 0xB898, 0x8F54, 0xB899,
- 0x8F55, 0xB89A, 0x8F56, 0xB89B, 0x8F57, 0xB89C, 0x8F58, 0xB89D, 0x8F59, 0xB89E, 0x8F5A, 0xB89F, 0x8F61, 0xB8A0, 0x8F62, 0xB8A1,
- 0x8F63, 0xB8A2, 0x8F64, 0xB8A3, 0x8F65, 0xB8A4, 0x8F66, 0xB8A5, 0x8F67, 0xB8A6, 0x8F68, 0xB8A7, 0x8F69, 0xB8A9, 0x8F6A, 0xB8AA,
- 0x8F6B, 0xB8AB, 0x8F6C, 0xB8AC, 0x8F6D, 0xB8AD, 0x8F6E, 0xB8AE, 0x8F6F, 0xB8AF, 0x8F70, 0xB8B1, 0x8F71, 0xB8B2, 0x8F72, 0xB8B3,
- 0x8F73, 0xB8B5, 0x8F74, 0xB8B6, 0x8F75, 0xB8B7, 0x8F76, 0xB8B9, 0x8F77, 0xB8BA, 0x8F78, 0xB8BB, 0x8F79, 0xB8BC, 0x8F7A, 0xB8BD,
- 0x8F81, 0xB8BE, 0x8F82, 0xB8BF, 0x8F83, 0xB8C2, 0x8F84, 0xB8C4, 0x8F85, 0xB8C6, 0x8F86, 0xB8C7, 0x8F87, 0xB8C8, 0x8F88, 0xB8C9,
- 0x8F89, 0xB8CA, 0x8F8A, 0xB8CB, 0x8F8B, 0xB8CD, 0x8F8C, 0xB8CE, 0x8F8D, 0xB8CF, 0x8F8E, 0xB8D1, 0x8F8F, 0xB8D2, 0x8F90, 0xB8D3,
- 0x8F91, 0xB8D5, 0x8F92, 0xB8D6, 0x8F93, 0xB8D7, 0x8F94, 0xB8D8, 0x8F95, 0xB8D9, 0x8F96, 0xB8DA, 0x8F97, 0xB8DB, 0x8F98, 0xB8DC,
- 0x8F99, 0xB8DE, 0x8F9A, 0xB8E0, 0x8F9B, 0xB8E2, 0x8F9C, 0xB8E3, 0x8F9D, 0xB8E4, 0x8F9E, 0xB8E5, 0x8F9F, 0xB8E6, 0x8FA0, 0xB8E7,
- 0x8FA1, 0xB8EA, 0x8FA2, 0xB8EB, 0x8FA3, 0xB8ED, 0x8FA4, 0xB8EE, 0x8FA5, 0xB8EF, 0x8FA6, 0xB8F1, 0x8FA7, 0xB8F2, 0x8FA8, 0xB8F3,
- 0x8FA9, 0xB8F4, 0x8FAA, 0xB8F5, 0x8FAB, 0xB8F6, 0x8FAC, 0xB8F7, 0x8FAD, 0xB8FA, 0x8FAE, 0xB8FC, 0x8FAF, 0xB8FE, 0x8FB0, 0xB8FF,
- 0x8FB1, 0xB900, 0x8FB2, 0xB901, 0x8FB3, 0xB902, 0x8FB4, 0xB903, 0x8FB5, 0xB905, 0x8FB6, 0xB906, 0x8FB7, 0xB907, 0x8FB8, 0xB908,
- 0x8FB9, 0xB909, 0x8FBA, 0xB90A, 0x8FBB, 0xB90B, 0x8FBC, 0xB90C, 0x8FBD, 0xB90D, 0x8FBE, 0xB90E, 0x8FBF, 0xB90F, 0x8FC0, 0xB910,
- 0x8FC1, 0xB911, 0x8FC2, 0xB912, 0x8FC3, 0xB913, 0x8FC4, 0xB914, 0x8FC5, 0xB915, 0x8FC6, 0xB916, 0x8FC7, 0xB917, 0x8FC8, 0xB919,
- 0x8FC9, 0xB91A, 0x8FCA, 0xB91B, 0x8FCB, 0xB91C, 0x8FCC, 0xB91D, 0x8FCD, 0xB91E, 0x8FCE, 0xB91F, 0x8FCF, 0xB921, 0x8FD0, 0xB922,
- 0x8FD1, 0xB923, 0x8FD2, 0xB924, 0x8FD3, 0xB925, 0x8FD4, 0xB926, 0x8FD5, 0xB927, 0x8FD6, 0xB928, 0x8FD7, 0xB929, 0x8FD8, 0xB92A,
- 0x8FD9, 0xB92B, 0x8FDA, 0xB92C, 0x8FDB, 0xB92D, 0x8FDC, 0xB92E, 0x8FDD, 0xB92F, 0x8FDE, 0xB930, 0x8FDF, 0xB931, 0x8FE0, 0xB932,
- 0x8FE1, 0xB933, 0x8FE2, 0xB934, 0x8FE3, 0xB935, 0x8FE4, 0xB936, 0x8FE5, 0xB937, 0x8FE6, 0xB938, 0x8FE7, 0xB939, 0x8FE8, 0xB93A,
- 0x8FE9, 0xB93B, 0x8FEA, 0xB93E, 0x8FEB, 0xB93F, 0x8FEC, 0xB941, 0x8FED, 0xB942, 0x8FEE, 0xB943, 0x8FEF, 0xB945, 0x8FF0, 0xB946,
- 0x8FF1, 0xB947, 0x8FF2, 0xB948, 0x8FF3, 0xB949, 0x8FF4, 0xB94A, 0x8FF5, 0xB94B, 0x8FF6, 0xB94D, 0x8FF7, 0xB94E, 0x8FF8, 0xB950,
- 0x8FF9, 0xB952, 0x8FFA, 0xB953, 0x8FFB, 0xB954, 0x8FFC, 0xB955, 0x8FFD, 0xB956, 0x8FFE, 0xB957, 0x9041, 0xB95A, 0x9042, 0xB95B,
- 0x9043, 0xB95D, 0x9044, 0xB95E, 0x9045, 0xB95F, 0x9046, 0xB961, 0x9047, 0xB962, 0x9048, 0xB963, 0x9049, 0xB964, 0x904A, 0xB965,
- 0x904B, 0xB966, 0x904C, 0xB967, 0x904D, 0xB96A, 0x904E, 0xB96C, 0x904F, 0xB96E, 0x9050, 0xB96F, 0x9051, 0xB970, 0x9052, 0xB971,
- 0x9053, 0xB972, 0x9054, 0xB973, 0x9055, 0xB976, 0x9056, 0xB977, 0x9057, 0xB979, 0x9058, 0xB97A, 0x9059, 0xB97B, 0x905A, 0xB97D,
- 0x9061, 0xB97E, 0x9062, 0xB97F, 0x9063, 0xB980, 0x9064, 0xB981, 0x9065, 0xB982, 0x9066, 0xB983, 0x9067, 0xB986, 0x9068, 0xB988,
- 0x9069, 0xB98B, 0x906A, 0xB98C, 0x906B, 0xB98F, 0x906C, 0xB990, 0x906D, 0xB991, 0x906E, 0xB992, 0x906F, 0xB993, 0x9070, 0xB994,
- 0x9071, 0xB995, 0x9072, 0xB996, 0x9073, 0xB997, 0x9074, 0xB998, 0x9075, 0xB999, 0x9076, 0xB99A, 0x9077, 0xB99B, 0x9078, 0xB99C,
- 0x9079, 0xB99D, 0x907A, 0xB99E, 0x9081, 0xB99F, 0x9082, 0xB9A0, 0x9083, 0xB9A1, 0x9084, 0xB9A2, 0x9085, 0xB9A3, 0x9086, 0xB9A4,
- 0x9087, 0xB9A5, 0x9088, 0xB9A6, 0x9089, 0xB9A7, 0x908A, 0xB9A8, 0x908B, 0xB9A9, 0x908C, 0xB9AA, 0x908D, 0xB9AB, 0x908E, 0xB9AE,
- 0x908F, 0xB9AF, 0x9090, 0xB9B1, 0x9091, 0xB9B2, 0x9092, 0xB9B3, 0x9093, 0xB9B5, 0x9094, 0xB9B6, 0x9095, 0xB9B7, 0x9096, 0xB9B8,
- 0x9097, 0xB9B9, 0x9098, 0xB9BA, 0x9099, 0xB9BB, 0x909A, 0xB9BE, 0x909B, 0xB9C0, 0x909C, 0xB9C2, 0x909D, 0xB9C3, 0x909E, 0xB9C4,
- 0x909F, 0xB9C5, 0x90A0, 0xB9C6, 0x90A1, 0xB9C7, 0x90A2, 0xB9CA, 0x90A3, 0xB9CB, 0x90A4, 0xB9CD, 0x90A5, 0xB9D3, 0x90A6, 0xB9D4,
- 0x90A7, 0xB9D5, 0x90A8, 0xB9D6, 0x90A9, 0xB9D7, 0x90AA, 0xB9DA, 0x90AB, 0xB9DC, 0x90AC, 0xB9DF, 0x90AD, 0xB9E0, 0x90AE, 0xB9E2,
- 0x90AF, 0xB9E6, 0x90B0, 0xB9E7, 0x90B1, 0xB9E9, 0x90B2, 0xB9EA, 0x90B3, 0xB9EB, 0x90B4, 0xB9ED, 0x90B5, 0xB9EE, 0x90B6, 0xB9EF,
- 0x90B7, 0xB9F0, 0x90B8, 0xB9F1, 0x90B9, 0xB9F2, 0x90BA, 0xB9F3, 0x90BB, 0xB9F6, 0x90BC, 0xB9FB, 0x90BD, 0xB9FC, 0x90BE, 0xB9FD,
- 0x90BF, 0xB9FE, 0x90C0, 0xB9FF, 0x90C1, 0xBA02, 0x90C2, 0xBA03, 0x90C3, 0xBA04, 0x90C4, 0xBA05, 0x90C5, 0xBA06, 0x90C6, 0xBA07,
- 0x90C7, 0xBA09, 0x90C8, 0xBA0A, 0x90C9, 0xBA0B, 0x90CA, 0xBA0C, 0x90CB, 0xBA0D, 0x90CC, 0xBA0E, 0x90CD, 0xBA0F, 0x90CE, 0xBA10,
- 0x90CF, 0xBA11, 0x90D0, 0xBA12, 0x90D1, 0xBA13, 0x90D2, 0xBA14, 0x90D3, 0xBA16, 0x90D4, 0xBA17, 0x90D5, 0xBA18, 0x90D6, 0xBA19,
- 0x90D7, 0xBA1A, 0x90D8, 0xBA1B, 0x90D9, 0xBA1C, 0x90DA, 0xBA1D, 0x90DB, 0xBA1E, 0x90DC, 0xBA1F, 0x90DD, 0xBA20, 0x90DE, 0xBA21,
- 0x90DF, 0xBA22, 0x90E0, 0xBA23, 0x90E1, 0xBA24, 0x90E2, 0xBA25, 0x90E3, 0xBA26, 0x90E4, 0xBA27, 0x90E5, 0xBA28, 0x90E6, 0xBA29,
- 0x90E7, 0xBA2A, 0x90E8, 0xBA2B, 0x90E9, 0xBA2C, 0x90EA, 0xBA2D, 0x90EB, 0xBA2E, 0x90EC, 0xBA2F, 0x90ED, 0xBA30, 0x90EE, 0xBA31,
- 0x90EF, 0xBA32, 0x90F0, 0xBA33, 0x90F1, 0xBA34, 0x90F2, 0xBA35, 0x90F3, 0xBA36, 0x90F4, 0xBA37, 0x90F5, 0xBA3A, 0x90F6, 0xBA3B,
- 0x90F7, 0xBA3D, 0x90F8, 0xBA3E, 0x90F9, 0xBA3F, 0x90FA, 0xBA41, 0x90FB, 0xBA43, 0x90FC, 0xBA44, 0x90FD, 0xBA45, 0x90FE, 0xBA46,
- 0x9141, 0xBA47, 0x9142, 0xBA4A, 0x9143, 0xBA4C, 0x9144, 0xBA4F, 0x9145, 0xBA50, 0x9146, 0xBA51, 0x9147, 0xBA52, 0x9148, 0xBA56,
- 0x9149, 0xBA57, 0x914A, 0xBA59, 0x914B, 0xBA5A, 0x914C, 0xBA5B, 0x914D, 0xBA5D, 0x914E, 0xBA5E, 0x914F, 0xBA5F, 0x9150, 0xBA60,
- 0x9151, 0xBA61, 0x9152, 0xBA62, 0x9153, 0xBA63, 0x9154, 0xBA66, 0x9155, 0xBA6A, 0x9156, 0xBA6B, 0x9157, 0xBA6C, 0x9158, 0xBA6D,
- 0x9159, 0xBA6E, 0x915A, 0xBA6F, 0x9161, 0xBA72, 0x9162, 0xBA73, 0x9163, 0xBA75, 0x9164, 0xBA76, 0x9165, 0xBA77, 0x9166, 0xBA79,
- 0x9167, 0xBA7A, 0x9168, 0xBA7B, 0x9169, 0xBA7C, 0x916A, 0xBA7D, 0x916B, 0xBA7E, 0x916C, 0xBA7F, 0x916D, 0xBA80, 0x916E, 0xBA81,
- 0x916F, 0xBA82, 0x9170, 0xBA86, 0x9171, 0xBA88, 0x9172, 0xBA89, 0x9173, 0xBA8A, 0x9174, 0xBA8B, 0x9175, 0xBA8D, 0x9176, 0xBA8E,
- 0x9177, 0xBA8F, 0x9178, 0xBA90, 0x9179, 0xBA91, 0x917A, 0xBA92, 0x9181, 0xBA93, 0x9182, 0xBA94, 0x9183, 0xBA95, 0x9184, 0xBA96,
- 0x9185, 0xBA97, 0x9186, 0xBA98, 0x9187, 0xBA99, 0x9188, 0xBA9A, 0x9189, 0xBA9B, 0x918A, 0xBA9C, 0x918B, 0xBA9D, 0x918C, 0xBA9E,
- 0x918D, 0xBA9F, 0x918E, 0xBAA0, 0x918F, 0xBAA1, 0x9190, 0xBAA2, 0x9191, 0xBAA3, 0x9192, 0xBAA4, 0x9193, 0xBAA5, 0x9194, 0xBAA6,
- 0x9195, 0xBAA7, 0x9196, 0xBAAA, 0x9197, 0xBAAD, 0x9198, 0xBAAE, 0x9199, 0xBAAF, 0x919A, 0xBAB1, 0x919B, 0xBAB3, 0x919C, 0xBAB4,
- 0x919D, 0xBAB5, 0x919E, 0xBAB6, 0x919F, 0xBAB7, 0x91A0, 0xBABA, 0x91A1, 0xBABC, 0x91A2, 0xBABE, 0x91A3, 0xBABF, 0x91A4, 0xBAC0,
- 0x91A5, 0xBAC1, 0x91A6, 0xBAC2, 0x91A7, 0xBAC3, 0x91A8, 0xBAC5, 0x91A9, 0xBAC6, 0x91AA, 0xBAC7, 0x91AB, 0xBAC9, 0x91AC, 0xBACA,
- 0x91AD, 0xBACB, 0x91AE, 0xBACC, 0x91AF, 0xBACD, 0x91B0, 0xBACE, 0x91B1, 0xBACF, 0x91B2, 0xBAD0, 0x91B3, 0xBAD1, 0x91B4, 0xBAD2,
- 0x91B5, 0xBAD3, 0x91B6, 0xBAD4, 0x91B7, 0xBAD5, 0x91B8, 0xBAD6, 0x91B9, 0xBAD7, 0x91BA, 0xBADA, 0x91BB, 0xBADB, 0x91BC, 0xBADC,
- 0x91BD, 0xBADD, 0x91BE, 0xBADE, 0x91BF, 0xBADF, 0x91C0, 0xBAE0, 0x91C1, 0xBAE1, 0x91C2, 0xBAE2, 0x91C3, 0xBAE3, 0x91C4, 0xBAE4,
- 0x91C5, 0xBAE5, 0x91C6, 0xBAE6, 0x91C7, 0xBAE7, 0x91C8, 0xBAE8, 0x91C9, 0xBAE9, 0x91CA, 0xBAEA, 0x91CB, 0xBAEB, 0x91CC, 0xBAEC,
- 0x91CD, 0xBAED, 0x91CE, 0xBAEE, 0x91CF, 0xBAEF, 0x91D0, 0xBAF0, 0x91D1, 0xBAF1, 0x91D2, 0xBAF2, 0x91D3, 0xBAF3, 0x91D4, 0xBAF4,
- 0x91D5, 0xBAF5, 0x91D6, 0xBAF6, 0x91D7, 0xBAF7, 0x91D8, 0xBAF8, 0x91D9, 0xBAF9, 0x91DA, 0xBAFA, 0x91DB, 0xBAFB, 0x91DC, 0xBAFD,
- 0x91DD, 0xBAFE, 0x91DE, 0xBAFF, 0x91DF, 0xBB01, 0x91E0, 0xBB02, 0x91E1, 0xBB03, 0x91E2, 0xBB05, 0x91E3, 0xBB06, 0x91E4, 0xBB07,
- 0x91E5, 0xBB08, 0x91E6, 0xBB09, 0x91E7, 0xBB0A, 0x91E8, 0xBB0B, 0x91E9, 0xBB0C, 0x91EA, 0xBB0E, 0x91EB, 0xBB10, 0x91EC, 0xBB12,
- 0x91ED, 0xBB13, 0x91EE, 0xBB14, 0x91EF, 0xBB15, 0x91F0, 0xBB16, 0x91F1, 0xBB17, 0x91F2, 0xBB19, 0x91F3, 0xBB1A, 0x91F4, 0xBB1B,
- 0x91F5, 0xBB1D, 0x91F6, 0xBB1E, 0x91F7, 0xBB1F, 0x91F8, 0xBB21, 0x91F9, 0xBB22, 0x91FA, 0xBB23, 0x91FB, 0xBB24, 0x91FC, 0xBB25,
- 0x91FD, 0xBB26, 0x91FE, 0xBB27, 0x9241, 0xBB28, 0x9242, 0xBB2A, 0x9243, 0xBB2C, 0x9244, 0xBB2D, 0x9245, 0xBB2E, 0x9246, 0xBB2F,
- 0x9247, 0xBB30, 0x9248, 0xBB31, 0x9249, 0xBB32, 0x924A, 0xBB33, 0x924B, 0xBB37, 0x924C, 0xBB39, 0x924D, 0xBB3A, 0x924E, 0xBB3F,
- 0x924F, 0xBB40, 0x9250, 0xBB41, 0x9251, 0xBB42, 0x9252, 0xBB43, 0x9253, 0xBB46, 0x9254, 0xBB48, 0x9255, 0xBB4A, 0x9256, 0xBB4B,
- 0x9257, 0xBB4C, 0x9258, 0xBB4E, 0x9259, 0xBB51, 0x925A, 0xBB52, 0x9261, 0xBB53, 0x9262, 0xBB55, 0x9263, 0xBB56, 0x9264, 0xBB57,
- 0x9265, 0xBB59, 0x9266, 0xBB5A, 0x9267, 0xBB5B, 0x9268, 0xBB5C, 0x9269, 0xBB5D, 0x926A, 0xBB5E, 0x926B, 0xBB5F, 0x926C, 0xBB60,
- 0x926D, 0xBB62, 0x926E, 0xBB64, 0x926F, 0xBB65, 0x9270, 0xBB66, 0x9271, 0xBB67, 0x9272, 0xBB68, 0x9273, 0xBB69, 0x9274, 0xBB6A,
- 0x9275, 0xBB6B, 0x9276, 0xBB6D, 0x9277, 0xBB6E, 0x9278, 0xBB6F, 0x9279, 0xBB70, 0x927A, 0xBB71, 0x9281, 0xBB72, 0x9282, 0xBB73,
- 0x9283, 0xBB74, 0x9284, 0xBB75, 0x9285, 0xBB76, 0x9286, 0xBB77, 0x9287, 0xBB78, 0x9288, 0xBB79, 0x9289, 0xBB7A, 0x928A, 0xBB7B,
- 0x928B, 0xBB7C, 0x928C, 0xBB7D, 0x928D, 0xBB7E, 0x928E, 0xBB7F, 0x928F, 0xBB80, 0x9290, 0xBB81, 0x9291, 0xBB82, 0x9292, 0xBB83,
- 0x9293, 0xBB84, 0x9294, 0xBB85, 0x9295, 0xBB86, 0x9296, 0xBB87, 0x9297, 0xBB89, 0x9298, 0xBB8A, 0x9299, 0xBB8B, 0x929A, 0xBB8D,
- 0x929B, 0xBB8E, 0x929C, 0xBB8F, 0x929D, 0xBB91, 0x929E, 0xBB92, 0x929F, 0xBB93, 0x92A0, 0xBB94, 0x92A1, 0xBB95, 0x92A2, 0xBB96,
- 0x92A3, 0xBB97, 0x92A4, 0xBB98, 0x92A5, 0xBB99, 0x92A6, 0xBB9A, 0x92A7, 0xBB9B, 0x92A8, 0xBB9C, 0x92A9, 0xBB9D, 0x92AA, 0xBB9E,
- 0x92AB, 0xBB9F, 0x92AC, 0xBBA0, 0x92AD, 0xBBA1, 0x92AE, 0xBBA2, 0x92AF, 0xBBA3, 0x92B0, 0xBBA5, 0x92B1, 0xBBA6, 0x92B2, 0xBBA7,
- 0x92B3, 0xBBA9, 0x92B4, 0xBBAA, 0x92B5, 0xBBAB, 0x92B6, 0xBBAD, 0x92B7, 0xBBAE, 0x92B8, 0xBBAF, 0x92B9, 0xBBB0, 0x92BA, 0xBBB1,
- 0x92BB, 0xBBB2, 0x92BC, 0xBBB3, 0x92BD, 0xBBB5, 0x92BE, 0xBBB6, 0x92BF, 0xBBB8, 0x92C0, 0xBBB9, 0x92C1, 0xBBBA, 0x92C2, 0xBBBB,
- 0x92C3, 0xBBBC, 0x92C4, 0xBBBD, 0x92C5, 0xBBBE, 0x92C6, 0xBBBF, 0x92C7, 0xBBC1, 0x92C8, 0xBBC2, 0x92C9, 0xBBC3, 0x92CA, 0xBBC5,
- 0x92CB, 0xBBC6, 0x92CC, 0xBBC7, 0x92CD, 0xBBC9, 0x92CE, 0xBBCA, 0x92CF, 0xBBCB, 0x92D0, 0xBBCC, 0x92D1, 0xBBCD, 0x92D2, 0xBBCE,
- 0x92D3, 0xBBCF, 0x92D4, 0xBBD1, 0x92D5, 0xBBD2, 0x92D6, 0xBBD4, 0x92D7, 0xBBD5, 0x92D8, 0xBBD6, 0x92D9, 0xBBD7, 0x92DA, 0xBBD8,
- 0x92DB, 0xBBD9, 0x92DC, 0xBBDA, 0x92DD, 0xBBDB, 0x92DE, 0xBBDC, 0x92DF, 0xBBDD, 0x92E0, 0xBBDE, 0x92E1, 0xBBDF, 0x92E2, 0xBBE0,
- 0x92E3, 0xBBE1, 0x92E4, 0xBBE2, 0x92E5, 0xBBE3, 0x92E6, 0xBBE4, 0x92E7, 0xBBE5, 0x92E8, 0xBBE6, 0x92E9, 0xBBE7, 0x92EA, 0xBBE8,
- 0x92EB, 0xBBE9, 0x92EC, 0xBBEA, 0x92ED, 0xBBEB, 0x92EE, 0xBBEC, 0x92EF, 0xBBED, 0x92F0, 0xBBEE, 0x92F1, 0xBBEF, 0x92F2, 0xBBF0,
- 0x92F3, 0xBBF1, 0x92F4, 0xBBF2, 0x92F5, 0xBBF3, 0x92F6, 0xBBF4, 0x92F7, 0xBBF5, 0x92F8, 0xBBF6, 0x92F9, 0xBBF7, 0x92FA, 0xBBFA,
- 0x92FB, 0xBBFB, 0x92FC, 0xBBFD, 0x92FD, 0xBBFE, 0x92FE, 0xBC01, 0x9341, 0xBC03, 0x9342, 0xBC04, 0x9343, 0xBC05, 0x9344, 0xBC06,
- 0x9345, 0xBC07, 0x9346, 0xBC0A, 0x9347, 0xBC0E, 0x9348, 0xBC10, 0x9349, 0xBC12, 0x934A, 0xBC13, 0x934B, 0xBC19, 0x934C, 0xBC1A,
- 0x934D, 0xBC20, 0x934E, 0xBC21, 0x934F, 0xBC22, 0x9350, 0xBC23, 0x9351, 0xBC26, 0x9352, 0xBC28, 0x9353, 0xBC2A, 0x9354, 0xBC2B,
- 0x9355, 0xBC2C, 0x9356, 0xBC2E, 0x9357, 0xBC2F, 0x9358, 0xBC32, 0x9359, 0xBC33, 0x935A, 0xBC35, 0x9361, 0xBC36, 0x9362, 0xBC37,
- 0x9363, 0xBC39, 0x9364, 0xBC3A, 0x9365, 0xBC3B, 0x9366, 0xBC3C, 0x9367, 0xBC3D, 0x9368, 0xBC3E, 0x9369, 0xBC3F, 0x936A, 0xBC42,
- 0x936B, 0xBC46, 0x936C, 0xBC47, 0x936D, 0xBC48, 0x936E, 0xBC4A, 0x936F, 0xBC4B, 0x9370, 0xBC4E, 0x9371, 0xBC4F, 0x9372, 0xBC51,
- 0x9373, 0xBC52, 0x9374, 0xBC53, 0x9375, 0xBC54, 0x9376, 0xBC55, 0x9377, 0xBC56, 0x9378, 0xBC57, 0x9379, 0xBC58, 0x937A, 0xBC59,
- 0x9381, 0xBC5A, 0x9382, 0xBC5B, 0x9383, 0xBC5C, 0x9384, 0xBC5E, 0x9385, 0xBC5F, 0x9386, 0xBC60, 0x9387, 0xBC61, 0x9388, 0xBC62,
- 0x9389, 0xBC63, 0x938A, 0xBC64, 0x938B, 0xBC65, 0x938C, 0xBC66, 0x938D, 0xBC67, 0x938E, 0xBC68, 0x938F, 0xBC69, 0x9390, 0xBC6A,
- 0x9391, 0xBC6B, 0x9392, 0xBC6C, 0x9393, 0xBC6D, 0x9394, 0xBC6E, 0x9395, 0xBC6F, 0x9396, 0xBC70, 0x9397, 0xBC71, 0x9398, 0xBC72,
- 0x9399, 0xBC73, 0x939A, 0xBC74, 0x939B, 0xBC75, 0x939C, 0xBC76, 0x939D, 0xBC77, 0x939E, 0xBC78, 0x939F, 0xBC79, 0x93A0, 0xBC7A,
- 0x93A1, 0xBC7B, 0x93A2, 0xBC7C, 0x93A3, 0xBC7D, 0x93A4, 0xBC7E, 0x93A5, 0xBC7F, 0x93A6, 0xBC80, 0x93A7, 0xBC81, 0x93A8, 0xBC82,
- 0x93A9, 0xBC83, 0x93AA, 0xBC86, 0x93AB, 0xBC87, 0x93AC, 0xBC89, 0x93AD, 0xBC8A, 0x93AE, 0xBC8D, 0x93AF, 0xBC8F, 0x93B0, 0xBC90,
- 0x93B1, 0xBC91, 0x93B2, 0xBC92, 0x93B3, 0xBC93, 0x93B4, 0xBC96, 0x93B5, 0xBC98, 0x93B6, 0xBC9B, 0x93B7, 0xBC9C, 0x93B8, 0xBC9D,
- 0x93B9, 0xBC9E, 0x93BA, 0xBC9F, 0x93BB, 0xBCA2, 0x93BC, 0xBCA3, 0x93BD, 0xBCA5, 0x93BE, 0xBCA6, 0x93BF, 0xBCA9, 0x93C0, 0xBCAA,
- 0x93C1, 0xBCAB, 0x93C2, 0xBCAC, 0x93C3, 0xBCAD, 0x93C4, 0xBCAE, 0x93C5, 0xBCAF, 0x93C6, 0xBCB2, 0x93C7, 0xBCB6, 0x93C8, 0xBCB7,
- 0x93C9, 0xBCB8, 0x93CA, 0xBCB9, 0x93CB, 0xBCBA, 0x93CC, 0xBCBB, 0x93CD, 0xBCBE, 0x93CE, 0xBCBF, 0x93CF, 0xBCC1, 0x93D0, 0xBCC2,
- 0x93D1, 0xBCC3, 0x93D2, 0xBCC5, 0x93D3, 0xBCC6, 0x93D4, 0xBCC7, 0x93D5, 0xBCC8, 0x93D6, 0xBCC9, 0x93D7, 0xBCCA, 0x93D8, 0xBCCB,
- 0x93D9, 0xBCCC, 0x93DA, 0xBCCE, 0x93DB, 0xBCD2, 0x93DC, 0xBCD3, 0x93DD, 0xBCD4, 0x93DE, 0xBCD6, 0x93DF, 0xBCD7, 0x93E0, 0xBCD9,
- 0x93E1, 0xBCDA, 0x93E2, 0xBCDB, 0x93E3, 0xBCDD, 0x93E4, 0xBCDE, 0x93E5, 0xBCDF, 0x93E6, 0xBCE0, 0x93E7, 0xBCE1, 0x93E8, 0xBCE2,
- 0x93E9, 0xBCE3, 0x93EA, 0xBCE4, 0x93EB, 0xBCE5, 0x93EC, 0xBCE6, 0x93ED, 0xBCE7, 0x93EE, 0xBCE8, 0x93EF, 0xBCE9, 0x93F0, 0xBCEA,
- 0x93F1, 0xBCEB, 0x93F2, 0xBCEC, 0x93F3, 0xBCED, 0x93F4, 0xBCEE, 0x93F5, 0xBCEF, 0x93F6, 0xBCF0, 0x93F7, 0xBCF1, 0x93F8, 0xBCF2,
- 0x93F9, 0xBCF3, 0x93FA, 0xBCF7, 0x93FB, 0xBCF9, 0x93FC, 0xBCFA, 0x93FD, 0xBCFB, 0x93FE, 0xBCFD, 0x9441, 0xBCFE, 0x9442, 0xBCFF,
- 0x9443, 0xBD00, 0x9444, 0xBD01, 0x9445, 0xBD02, 0x9446, 0xBD03, 0x9447, 0xBD06, 0x9448, 0xBD08, 0x9449, 0xBD0A, 0x944A, 0xBD0B,
- 0x944B, 0xBD0C, 0x944C, 0xBD0D, 0x944D, 0xBD0E, 0x944E, 0xBD0F, 0x944F, 0xBD11, 0x9450, 0xBD12, 0x9451, 0xBD13, 0x9452, 0xBD15,
- 0x9453, 0xBD16, 0x9454, 0xBD17, 0x9455, 0xBD18, 0x9456, 0xBD19, 0x9457, 0xBD1A, 0x9458, 0xBD1B, 0x9459, 0xBD1C, 0x945A, 0xBD1D,
- 0x9461, 0xBD1E, 0x9462, 0xBD1F, 0x9463, 0xBD20, 0x9464, 0xBD21, 0x9465, 0xBD22, 0x9466, 0xBD23, 0x9467, 0xBD25, 0x9468, 0xBD26,
- 0x9469, 0xBD27, 0x946A, 0xBD28, 0x946B, 0xBD29, 0x946C, 0xBD2A, 0x946D, 0xBD2B, 0x946E, 0xBD2D, 0x946F, 0xBD2E, 0x9470, 0xBD2F,
- 0x9471, 0xBD30, 0x9472, 0xBD31, 0x9473, 0xBD32, 0x9474, 0xBD33, 0x9475, 0xBD34, 0x9476, 0xBD35, 0x9477, 0xBD36, 0x9478, 0xBD37,
- 0x9479, 0xBD38, 0x947A, 0xBD39, 0x9481, 0xBD3A, 0x9482, 0xBD3B, 0x9483, 0xBD3C, 0x9484, 0xBD3D, 0x9485, 0xBD3E, 0x9486, 0xBD3F,
- 0x9487, 0xBD41, 0x9488, 0xBD42, 0x9489, 0xBD43, 0x948A, 0xBD44, 0x948B, 0xBD45, 0x948C, 0xBD46, 0x948D, 0xBD47, 0x948E, 0xBD4A,
- 0x948F, 0xBD4B, 0x9490, 0xBD4D, 0x9491, 0xBD4E, 0x9492, 0xBD4F, 0x9493, 0xBD51, 0x9494, 0xBD52, 0x9495, 0xBD53, 0x9496, 0xBD54,
- 0x9497, 0xBD55, 0x9498, 0xBD56, 0x9499, 0xBD57, 0x949A, 0xBD5A, 0x949B, 0xBD5B, 0x949C, 0xBD5C, 0x949D, 0xBD5D, 0x949E, 0xBD5E,
- 0x949F, 0xBD5F, 0x94A0, 0xBD60, 0x94A1, 0xBD61, 0x94A2, 0xBD62, 0x94A3, 0xBD63, 0x94A4, 0xBD65, 0x94A5, 0xBD66, 0x94A6, 0xBD67,
- 0x94A7, 0xBD69, 0x94A8, 0xBD6A, 0x94A9, 0xBD6B, 0x94AA, 0xBD6C, 0x94AB, 0xBD6D, 0x94AC, 0xBD6E, 0x94AD, 0xBD6F, 0x94AE, 0xBD70,
- 0x94AF, 0xBD71, 0x94B0, 0xBD72, 0x94B1, 0xBD73, 0x94B2, 0xBD74, 0x94B3, 0xBD75, 0x94B4, 0xBD76, 0x94B5, 0xBD77, 0x94B6, 0xBD78,
- 0x94B7, 0xBD79, 0x94B8, 0xBD7A, 0x94B9, 0xBD7B, 0x94BA, 0xBD7C, 0x94BB, 0xBD7D, 0x94BC, 0xBD7E, 0x94BD, 0xBD7F, 0x94BE, 0xBD82,
- 0x94BF, 0xBD83, 0x94C0, 0xBD85, 0x94C1, 0xBD86, 0x94C2, 0xBD8B, 0x94C3, 0xBD8C, 0x94C4, 0xBD8D, 0x94C5, 0xBD8E, 0x94C6, 0xBD8F,
- 0x94C7, 0xBD92, 0x94C8, 0xBD94, 0x94C9, 0xBD96, 0x94CA, 0xBD97, 0x94CB, 0xBD98, 0x94CC, 0xBD9B, 0x94CD, 0xBD9D, 0x94CE, 0xBD9E,
- 0x94CF, 0xBD9F, 0x94D0, 0xBDA0, 0x94D1, 0xBDA1, 0x94D2, 0xBDA2, 0x94D3, 0xBDA3, 0x94D4, 0xBDA5, 0x94D5, 0xBDA6, 0x94D6, 0xBDA7,
- 0x94D7, 0xBDA8, 0x94D8, 0xBDA9, 0x94D9, 0xBDAA, 0x94DA, 0xBDAB, 0x94DB, 0xBDAC, 0x94DC, 0xBDAD, 0x94DD, 0xBDAE, 0x94DE, 0xBDAF,
- 0x94DF, 0xBDB1, 0x94E0, 0xBDB2, 0x94E1, 0xBDB3, 0x94E2, 0xBDB4, 0x94E3, 0xBDB5, 0x94E4, 0xBDB6, 0x94E5, 0xBDB7, 0x94E6, 0xBDB9,
- 0x94E7, 0xBDBA, 0x94E8, 0xBDBB, 0x94E9, 0xBDBC, 0x94EA, 0xBDBD, 0x94EB, 0xBDBE, 0x94EC, 0xBDBF, 0x94ED, 0xBDC0, 0x94EE, 0xBDC1,
- 0x94EF, 0xBDC2, 0x94F0, 0xBDC3, 0x94F1, 0xBDC4, 0x94F2, 0xBDC5, 0x94F3, 0xBDC6, 0x94F4, 0xBDC7, 0x94F5, 0xBDC8, 0x94F6, 0xBDC9,
- 0x94F7, 0xBDCA, 0x94F8, 0xBDCB, 0x94F9, 0xBDCC, 0x94FA, 0xBDCD, 0x94FB, 0xBDCE, 0x94FC, 0xBDCF, 0x94FD, 0xBDD0, 0x94FE, 0xBDD1,
- 0x9541, 0xBDD2, 0x9542, 0xBDD3, 0x9543, 0xBDD6, 0x9544, 0xBDD7, 0x9545, 0xBDD9, 0x9546, 0xBDDA, 0x9547, 0xBDDB, 0x9548, 0xBDDD,
- 0x9549, 0xBDDE, 0x954A, 0xBDDF, 0x954B, 0xBDE0, 0x954C, 0xBDE1, 0x954D, 0xBDE2, 0x954E, 0xBDE3, 0x954F, 0xBDE4, 0x9550, 0xBDE5,
- 0x9551, 0xBDE6, 0x9552, 0xBDE7, 0x9553, 0xBDE8, 0x9554, 0xBDEA, 0x9555, 0xBDEB, 0x9556, 0xBDEC, 0x9557, 0xBDED, 0x9558, 0xBDEE,
- 0x9559, 0xBDEF, 0x955A, 0xBDF1, 0x9561, 0xBDF2, 0x9562, 0xBDF3, 0x9563, 0xBDF5, 0x9564, 0xBDF6, 0x9565, 0xBDF7, 0x9566, 0xBDF9,
- 0x9567, 0xBDFA, 0x9568, 0xBDFB, 0x9569, 0xBDFC, 0x956A, 0xBDFD, 0x956B, 0xBDFE, 0x956C, 0xBDFF, 0x956D, 0xBE01, 0x956E, 0xBE02,
- 0x956F, 0xBE04, 0x9570, 0xBE06, 0x9571, 0xBE07, 0x9572, 0xBE08, 0x9573, 0xBE09, 0x9574, 0xBE0A, 0x9575, 0xBE0B, 0x9576, 0xBE0E,
- 0x9577, 0xBE0F, 0x9578, 0xBE11, 0x9579, 0xBE12, 0x957A, 0xBE13, 0x9581, 0xBE15, 0x9582, 0xBE16, 0x9583, 0xBE17, 0x9584, 0xBE18,
- 0x9585, 0xBE19, 0x9586, 0xBE1A, 0x9587, 0xBE1B, 0x9588, 0xBE1E, 0x9589, 0xBE20, 0x958A, 0xBE21, 0x958B, 0xBE22, 0x958C, 0xBE23,
- 0x958D, 0xBE24, 0x958E, 0xBE25, 0x958F, 0xBE26, 0x9590, 0xBE27, 0x9591, 0xBE28, 0x9592, 0xBE29, 0x9593, 0xBE2A, 0x9594, 0xBE2B,
- 0x9595, 0xBE2C, 0x9596, 0xBE2D, 0x9597, 0xBE2E, 0x9598, 0xBE2F, 0x9599, 0xBE30, 0x959A, 0xBE31, 0x959B, 0xBE32, 0x959C, 0xBE33,
- 0x959D, 0xBE34, 0x959E, 0xBE35, 0x959F, 0xBE36, 0x95A0, 0xBE37, 0x95A1, 0xBE38, 0x95A2, 0xBE39, 0x95A3, 0xBE3A, 0x95A4, 0xBE3B,
- 0x95A5, 0xBE3C, 0x95A6, 0xBE3D, 0x95A7, 0xBE3E, 0x95A8, 0xBE3F, 0x95A9, 0xBE40, 0x95AA, 0xBE41, 0x95AB, 0xBE42, 0x95AC, 0xBE43,
- 0x95AD, 0xBE46, 0x95AE, 0xBE47, 0x95AF, 0xBE49, 0x95B0, 0xBE4A, 0x95B1, 0xBE4B, 0x95B2, 0xBE4D, 0x95B3, 0xBE4F, 0x95B4, 0xBE50,
- 0x95B5, 0xBE51, 0x95B6, 0xBE52, 0x95B7, 0xBE53, 0x95B8, 0xBE56, 0x95B9, 0xBE58, 0x95BA, 0xBE5C, 0x95BB, 0xBE5D, 0x95BC, 0xBE5E,
- 0x95BD, 0xBE5F, 0x95BE, 0xBE62, 0x95BF, 0xBE63, 0x95C0, 0xBE65, 0x95C1, 0xBE66, 0x95C2, 0xBE67, 0x95C3, 0xBE69, 0x95C4, 0xBE6B,
- 0x95C5, 0xBE6C, 0x95C6, 0xBE6D, 0x95C7, 0xBE6E, 0x95C8, 0xBE6F, 0x95C9, 0xBE72, 0x95CA, 0xBE76, 0x95CB, 0xBE77, 0x95CC, 0xBE78,
- 0x95CD, 0xBE79, 0x95CE, 0xBE7A, 0x95CF, 0xBE7E, 0x95D0, 0xBE7F, 0x95D1, 0xBE81, 0x95D2, 0xBE82, 0x95D3, 0xBE83, 0x95D4, 0xBE85,
- 0x95D5, 0xBE86, 0x95D6, 0xBE87, 0x95D7, 0xBE88, 0x95D8, 0xBE89, 0x95D9, 0xBE8A, 0x95DA, 0xBE8B, 0x95DB, 0xBE8E, 0x95DC, 0xBE92,
- 0x95DD, 0xBE93, 0x95DE, 0xBE94, 0x95DF, 0xBE95, 0x95E0, 0xBE96, 0x95E1, 0xBE97, 0x95E2, 0xBE9A, 0x95E3, 0xBE9B, 0x95E4, 0xBE9C,
- 0x95E5, 0xBE9D, 0x95E6, 0xBE9E, 0x95E7, 0xBE9F, 0x95E8, 0xBEA0, 0x95E9, 0xBEA1, 0x95EA, 0xBEA2, 0x95EB, 0xBEA3, 0x95EC, 0xBEA4,
- 0x95ED, 0xBEA5, 0x95EE, 0xBEA6, 0x95EF, 0xBEA7, 0x95F0, 0xBEA9, 0x95F1, 0xBEAA, 0x95F2, 0xBEAB, 0x95F3, 0xBEAC, 0x95F4, 0xBEAD,
- 0x95F5, 0xBEAE, 0x95F6, 0xBEAF, 0x95F7, 0xBEB0, 0x95F8, 0xBEB1, 0x95F9, 0xBEB2, 0x95FA, 0xBEB3, 0x95FB, 0xBEB4, 0x95FC, 0xBEB5,
- 0x95FD, 0xBEB6, 0x95FE, 0xBEB7, 0x9641, 0xBEB8, 0x9642, 0xBEB9, 0x9643, 0xBEBA, 0x9644, 0xBEBB, 0x9645, 0xBEBC, 0x9646, 0xBEBD,
- 0x9647, 0xBEBE, 0x9648, 0xBEBF, 0x9649, 0xBEC0, 0x964A, 0xBEC1, 0x964B, 0xBEC2, 0x964C, 0xBEC3, 0x964D, 0xBEC4, 0x964E, 0xBEC5,
- 0x964F, 0xBEC6, 0x9650, 0xBEC7, 0x9651, 0xBEC8, 0x9652, 0xBEC9, 0x9653, 0xBECA, 0x9654, 0xBECB, 0x9655, 0xBECC, 0x9656, 0xBECD,
- 0x9657, 0xBECE, 0x9658, 0xBECF, 0x9659, 0xBED2, 0x965A, 0xBED3, 0x9661, 0xBED5, 0x9662, 0xBED6, 0x9663, 0xBED9, 0x9664, 0xBEDA,
- 0x9665, 0xBEDB, 0x9666, 0xBEDC, 0x9667, 0xBEDD, 0x9668, 0xBEDE, 0x9669, 0xBEDF, 0x966A, 0xBEE1, 0x966B, 0xBEE2, 0x966C, 0xBEE6,
- 0x966D, 0xBEE7, 0x966E, 0xBEE8, 0x966F, 0xBEE9, 0x9670, 0xBEEA, 0x9671, 0xBEEB, 0x9672, 0xBEED, 0x9673, 0xBEEE, 0x9674, 0xBEEF,
- 0x9675, 0xBEF0, 0x9676, 0xBEF1, 0x9677, 0xBEF2, 0x9678, 0xBEF3, 0x9679, 0xBEF4, 0x967A, 0xBEF5, 0x9681, 0xBEF6, 0x9682, 0xBEF7,
- 0x9683, 0xBEF8, 0x9684, 0xBEF9, 0x9685, 0xBEFA, 0x9686, 0xBEFB, 0x9687, 0xBEFC, 0x9688, 0xBEFD, 0x9689, 0xBEFE, 0x968A, 0xBEFF,
- 0x968B, 0xBF00, 0x968C, 0xBF02, 0x968D, 0xBF03, 0x968E, 0xBF04, 0x968F, 0xBF05, 0x9690, 0xBF06, 0x9691, 0xBF07, 0x9692, 0xBF0A,
- 0x9693, 0xBF0B, 0x9694, 0xBF0C, 0x9695, 0xBF0D, 0x9696, 0xBF0E, 0x9697, 0xBF0F, 0x9698, 0xBF10, 0x9699, 0xBF11, 0x969A, 0xBF12,
- 0x969B, 0xBF13, 0x969C, 0xBF14, 0x969D, 0xBF15, 0x969E, 0xBF16, 0x969F, 0xBF17, 0x96A0, 0xBF1A, 0x96A1, 0xBF1E, 0x96A2, 0xBF1F,
- 0x96A3, 0xBF20, 0x96A4, 0xBF21, 0x96A5, 0xBF22, 0x96A6, 0xBF23, 0x96A7, 0xBF24, 0x96A8, 0xBF25, 0x96A9, 0xBF26, 0x96AA, 0xBF27,
- 0x96AB, 0xBF28, 0x96AC, 0xBF29, 0x96AD, 0xBF2A, 0x96AE, 0xBF2B, 0x96AF, 0xBF2C, 0x96B0, 0xBF2D, 0x96B1, 0xBF2E, 0x96B2, 0xBF2F,
- 0x96B3, 0xBF30, 0x96B4, 0xBF31, 0x96B5, 0xBF32, 0x96B6, 0xBF33, 0x96B7, 0xBF34, 0x96B8, 0xBF35, 0x96B9, 0xBF36, 0x96BA, 0xBF37,
- 0x96BB, 0xBF38, 0x96BC, 0xBF39, 0x96BD, 0xBF3A, 0x96BE, 0xBF3B, 0x96BF, 0xBF3C, 0x96C0, 0xBF3D, 0x96C1, 0xBF3E, 0x96C2, 0xBF3F,
- 0x96C3, 0xBF42, 0x96C4, 0xBF43, 0x96C5, 0xBF45, 0x96C6, 0xBF46, 0x96C7, 0xBF47, 0x96C8, 0xBF49, 0x96C9, 0xBF4A, 0x96CA, 0xBF4B,
- 0x96CB, 0xBF4C, 0x96CC, 0xBF4D, 0x96CD, 0xBF4E, 0x96CE, 0xBF4F, 0x96CF, 0xBF52, 0x96D0, 0xBF53, 0x96D1, 0xBF54, 0x96D2, 0xBF56,
- 0x96D3, 0xBF57, 0x96D4, 0xBF58, 0x96D5, 0xBF59, 0x96D6, 0xBF5A, 0x96D7, 0xBF5B, 0x96D8, 0xBF5C, 0x96D9, 0xBF5D, 0x96DA, 0xBF5E,
- 0x96DB, 0xBF5F, 0x96DC, 0xBF60, 0x96DD, 0xBF61, 0x96DE, 0xBF62, 0x96DF, 0xBF63, 0x96E0, 0xBF64, 0x96E1, 0xBF65, 0x96E2, 0xBF66,
- 0x96E3, 0xBF67, 0x96E4, 0xBF68, 0x96E5, 0xBF69, 0x96E6, 0xBF6A, 0x96E7, 0xBF6B, 0x96E8, 0xBF6C, 0x96E9, 0xBF6D, 0x96EA, 0xBF6E,
- 0x96EB, 0xBF6F, 0x96EC, 0xBF70, 0x96ED, 0xBF71, 0x96EE, 0xBF72, 0x96EF, 0xBF73, 0x96F0, 0xBF74, 0x96F1, 0xBF75, 0x96F2, 0xBF76,
- 0x96F3, 0xBF77, 0x96F4, 0xBF78, 0x96F5, 0xBF79, 0x96F6, 0xBF7A, 0x96F7, 0xBF7B, 0x96F8, 0xBF7C, 0x96F9, 0xBF7D, 0x96FA, 0xBF7E,
- 0x96FB, 0xBF7F, 0x96FC, 0xBF80, 0x96FD, 0xBF81, 0x96FE, 0xBF82, 0x9741, 0xBF83, 0x9742, 0xBF84, 0x9743, 0xBF85, 0x9744, 0xBF86,
- 0x9745, 0xBF87, 0x9746, 0xBF88, 0x9747, 0xBF89, 0x9748, 0xBF8A, 0x9749, 0xBF8B, 0x974A, 0xBF8C, 0x974B, 0xBF8D, 0x974C, 0xBF8E,
- 0x974D, 0xBF8F, 0x974E, 0xBF90, 0x974F, 0xBF91, 0x9750, 0xBF92, 0x9751, 0xBF93, 0x9752, 0xBF95, 0x9753, 0xBF96, 0x9754, 0xBF97,
- 0x9755, 0xBF98, 0x9756, 0xBF99, 0x9757, 0xBF9A, 0x9758, 0xBF9B, 0x9759, 0xBF9C, 0x975A, 0xBF9D, 0x9761, 0xBF9E, 0x9762, 0xBF9F,
- 0x9763, 0xBFA0, 0x9764, 0xBFA1, 0x9765, 0xBFA2, 0x9766, 0xBFA3, 0x9767, 0xBFA4, 0x9768, 0xBFA5, 0x9769, 0xBFA6, 0x976A, 0xBFA7,
- 0x976B, 0xBFA8, 0x976C, 0xBFA9, 0x976D, 0xBFAA, 0x976E, 0xBFAB, 0x976F, 0xBFAC, 0x9770, 0xBFAD, 0x9771, 0xBFAE, 0x9772, 0xBFAF,
- 0x9773, 0xBFB1, 0x9774, 0xBFB2, 0x9775, 0xBFB3, 0x9776, 0xBFB4, 0x9777, 0xBFB5, 0x9778, 0xBFB6, 0x9779, 0xBFB7, 0x977A, 0xBFB8,
- 0x9781, 0xBFB9, 0x9782, 0xBFBA, 0x9783, 0xBFBB, 0x9784, 0xBFBC, 0x9785, 0xBFBD, 0x9786, 0xBFBE, 0x9787, 0xBFBF, 0x9788, 0xBFC0,
- 0x9789, 0xBFC1, 0x978A, 0xBFC2, 0x978B, 0xBFC3, 0x978C, 0xBFC4, 0x978D, 0xBFC6, 0x978E, 0xBFC7, 0x978F, 0xBFC8, 0x9790, 0xBFC9,
- 0x9791, 0xBFCA, 0x9792, 0xBFCB, 0x9793, 0xBFCE, 0x9794, 0xBFCF, 0x9795, 0xBFD1, 0x9796, 0xBFD2, 0x9797, 0xBFD3, 0x9798, 0xBFD5,
- 0x9799, 0xBFD6, 0x979A, 0xBFD7, 0x979B, 0xBFD8, 0x979C, 0xBFD9, 0x979D, 0xBFDA, 0x979E, 0xBFDB, 0x979F, 0xBFDD, 0x97A0, 0xBFDE,
- 0x97A1, 0xBFE0, 0x97A2, 0xBFE2, 0x97A3, 0xBFE3, 0x97A4, 0xBFE4, 0x97A5, 0xBFE5, 0x97A6, 0xBFE6, 0x97A7, 0xBFE7, 0x97A8, 0xBFE8,
- 0x97A9, 0xBFE9, 0x97AA, 0xBFEA, 0x97AB, 0xBFEB, 0x97AC, 0xBFEC, 0x97AD, 0xBFED, 0x97AE, 0xBFEE, 0x97AF, 0xBFEF, 0x97B0, 0xBFF0,
- 0x97B1, 0xBFF1, 0x97B2, 0xBFF2, 0x97B3, 0xBFF3, 0x97B4, 0xBFF4, 0x97B5, 0xBFF5, 0x97B6, 0xBFF6, 0x97B7, 0xBFF7, 0x97B8, 0xBFF8,
- 0x97B9, 0xBFF9, 0x97BA, 0xBFFA, 0x97BB, 0xBFFB, 0x97BC, 0xBFFC, 0x97BD, 0xBFFD, 0x97BE, 0xBFFE, 0x97BF, 0xBFFF, 0x97C0, 0xC000,
- 0x97C1, 0xC001, 0x97C2, 0xC002, 0x97C3, 0xC003, 0x97C4, 0xC004, 0x97C5, 0xC005, 0x97C6, 0xC006, 0x97C7, 0xC007, 0x97C8, 0xC008,
- 0x97C9, 0xC009, 0x97CA, 0xC00A, 0x97CB, 0xC00B, 0x97CC, 0xC00C, 0x97CD, 0xC00D, 0x97CE, 0xC00E, 0x97CF, 0xC00F, 0x97D0, 0xC010,
- 0x97D1, 0xC011, 0x97D2, 0xC012, 0x97D3, 0xC013, 0x97D4, 0xC014, 0x97D5, 0xC015, 0x97D6, 0xC016, 0x97D7, 0xC017, 0x97D8, 0xC018,
- 0x97D9, 0xC019, 0x97DA, 0xC01A, 0x97DB, 0xC01B, 0x97DC, 0xC01C, 0x97DD, 0xC01D, 0x97DE, 0xC01E, 0x97DF, 0xC01F, 0x97E0, 0xC020,
- 0x97E1, 0xC021, 0x97E2, 0xC022, 0x97E3, 0xC023, 0x97E4, 0xC024, 0x97E5, 0xC025, 0x97E6, 0xC026, 0x97E7, 0xC027, 0x97E8, 0xC028,
- 0x97E9, 0xC029, 0x97EA, 0xC02A, 0x97EB, 0xC02B, 0x97EC, 0xC02C, 0x97ED, 0xC02D, 0x97EE, 0xC02E, 0x97EF, 0xC02F, 0x97F0, 0xC030,
- 0x97F1, 0xC031, 0x97F2, 0xC032, 0x97F3, 0xC033, 0x97F4, 0xC034, 0x97F5, 0xC035, 0x97F6, 0xC036, 0x97F7, 0xC037, 0x97F8, 0xC038,
- 0x97F9, 0xC039, 0x97FA, 0xC03A, 0x97FB, 0xC03B, 0x97FC, 0xC03D, 0x97FD, 0xC03E, 0x97FE, 0xC03F, 0x9841, 0xC040, 0x9842, 0xC041,
- 0x9843, 0xC042, 0x9844, 0xC043, 0x9845, 0xC044, 0x9846, 0xC045, 0x9847, 0xC046, 0x9848, 0xC047, 0x9849, 0xC048, 0x984A, 0xC049,
- 0x984B, 0xC04A, 0x984C, 0xC04B, 0x984D, 0xC04C, 0x984E, 0xC04D, 0x984F, 0xC04E, 0x9850, 0xC04F, 0x9851, 0xC050, 0x9852, 0xC052,
- 0x9853, 0xC053, 0x9854, 0xC054, 0x9855, 0xC055, 0x9856, 0xC056, 0x9857, 0xC057, 0x9858, 0xC059, 0x9859, 0xC05A, 0x985A, 0xC05B,
- 0x9861, 0xC05D, 0x9862, 0xC05E, 0x9863, 0xC05F, 0x9864, 0xC061, 0x9865, 0xC062, 0x9866, 0xC063, 0x9867, 0xC064, 0x9868, 0xC065,
- 0x9869, 0xC066, 0x986A, 0xC067, 0x986B, 0xC06A, 0x986C, 0xC06B, 0x986D, 0xC06C, 0x986E, 0xC06D, 0x986F, 0xC06E, 0x9870, 0xC06F,
- 0x9871, 0xC070, 0x9872, 0xC071, 0x9873, 0xC072, 0x9874, 0xC073, 0x9875, 0xC074, 0x9876, 0xC075, 0x9877, 0xC076, 0x9878, 0xC077,
- 0x9879, 0xC078, 0x987A, 0xC079, 0x9881, 0xC07A, 0x9882, 0xC07B, 0x9883, 0xC07C, 0x9884, 0xC07D, 0x9885, 0xC07E, 0x9886, 0xC07F,
- 0x9887, 0xC080, 0x9888, 0xC081, 0x9889, 0xC082, 0x988A, 0xC083, 0x988B, 0xC084, 0x988C, 0xC085, 0x988D, 0xC086, 0x988E, 0xC087,
- 0x988F, 0xC088, 0x9890, 0xC089, 0x9891, 0xC08A, 0x9892, 0xC08B, 0x9893, 0xC08C, 0x9894, 0xC08D, 0x9895, 0xC08E, 0x9896, 0xC08F,
- 0x9897, 0xC092, 0x9898, 0xC093, 0x9899, 0xC095, 0x989A, 0xC096, 0x989B, 0xC097, 0x989C, 0xC099, 0x989D, 0xC09A, 0x989E, 0xC09B,
- 0x989F, 0xC09C, 0x98A0, 0xC09D, 0x98A1, 0xC09E, 0x98A2, 0xC09F, 0x98A3, 0xC0A2, 0x98A4, 0xC0A4, 0x98A5, 0xC0A6, 0x98A6, 0xC0A7,
- 0x98A7, 0xC0A8, 0x98A8, 0xC0A9, 0x98A9, 0xC0AA, 0x98AA, 0xC0AB, 0x98AB, 0xC0AE, 0x98AC, 0xC0B1, 0x98AD, 0xC0B2, 0x98AE, 0xC0B7,
- 0x98AF, 0xC0B8, 0x98B0, 0xC0B9, 0x98B1, 0xC0BA, 0x98B2, 0xC0BB, 0x98B3, 0xC0BE, 0x98B4, 0xC0C2, 0x98B5, 0xC0C3, 0x98B6, 0xC0C4,
- 0x98B7, 0xC0C6, 0x98B8, 0xC0C7, 0x98B9, 0xC0CA, 0x98BA, 0xC0CB, 0x98BB, 0xC0CD, 0x98BC, 0xC0CE, 0x98BD, 0xC0CF, 0x98BE, 0xC0D1,
- 0x98BF, 0xC0D2, 0x98C0, 0xC0D3, 0x98C1, 0xC0D4, 0x98C2, 0xC0D5, 0x98C3, 0xC0D6, 0x98C4, 0xC0D7, 0x98C5, 0xC0DA, 0x98C6, 0xC0DE,
- 0x98C7, 0xC0DF, 0x98C8, 0xC0E0, 0x98C9, 0xC0E1, 0x98CA, 0xC0E2, 0x98CB, 0xC0E3, 0x98CC, 0xC0E6, 0x98CD, 0xC0E7, 0x98CE, 0xC0E9,
- 0x98CF, 0xC0EA, 0x98D0, 0xC0EB, 0x98D1, 0xC0ED, 0x98D2, 0xC0EE, 0x98D3, 0xC0EF, 0x98D4, 0xC0F0, 0x98D5, 0xC0F1, 0x98D6, 0xC0F2,
- 0x98D7, 0xC0F3, 0x98D8, 0xC0F6, 0x98D9, 0xC0F8, 0x98DA, 0xC0FA, 0x98DB, 0xC0FB, 0x98DC, 0xC0FC, 0x98DD, 0xC0FD, 0x98DE, 0xC0FE,
- 0x98DF, 0xC0FF, 0x98E0, 0xC101, 0x98E1, 0xC102, 0x98E2, 0xC103, 0x98E3, 0xC105, 0x98E4, 0xC106, 0x98E5, 0xC107, 0x98E6, 0xC109,
- 0x98E7, 0xC10A, 0x98E8, 0xC10B, 0x98E9, 0xC10C, 0x98EA, 0xC10D, 0x98EB, 0xC10E, 0x98EC, 0xC10F, 0x98ED, 0xC111, 0x98EE, 0xC112,
- 0x98EF, 0xC113, 0x98F0, 0xC114, 0x98F1, 0xC116, 0x98F2, 0xC117, 0x98F3, 0xC118, 0x98F4, 0xC119, 0x98F5, 0xC11A, 0x98F6, 0xC11B,
- 0x98F7, 0xC121, 0x98F8, 0xC122, 0x98F9, 0xC125, 0x98FA, 0xC128, 0x98FB, 0xC129, 0x98FC, 0xC12A, 0x98FD, 0xC12B, 0x98FE, 0xC12E,
- 0x9941, 0xC132, 0x9942, 0xC133, 0x9943, 0xC134, 0x9944, 0xC135, 0x9945, 0xC137, 0x9946, 0xC13A, 0x9947, 0xC13B, 0x9948, 0xC13D,
- 0x9949, 0xC13E, 0x994A, 0xC13F, 0x994B, 0xC141, 0x994C, 0xC142, 0x994D, 0xC143, 0x994E, 0xC144, 0x994F, 0xC145, 0x9950, 0xC146,
- 0x9951, 0xC147, 0x9952, 0xC14A, 0x9953, 0xC14E, 0x9954, 0xC14F, 0x9955, 0xC150, 0x9956, 0xC151, 0x9957, 0xC152, 0x9958, 0xC153,
- 0x9959, 0xC156, 0x995A, 0xC157, 0x9961, 0xC159, 0x9962, 0xC15A, 0x9963, 0xC15B, 0x9964, 0xC15D, 0x9965, 0xC15E, 0x9966, 0xC15F,
- 0x9967, 0xC160, 0x9968, 0xC161, 0x9969, 0xC162, 0x996A, 0xC163, 0x996B, 0xC166, 0x996C, 0xC16A, 0x996D, 0xC16B, 0x996E, 0xC16C,
- 0x996F, 0xC16D, 0x9970, 0xC16E, 0x9971, 0xC16F, 0x9972, 0xC171, 0x9973, 0xC172, 0x9974, 0xC173, 0x9975, 0xC175, 0x9976, 0xC176,
- 0x9977, 0xC177, 0x9978, 0xC179, 0x9979, 0xC17A, 0x997A, 0xC17B, 0x9981, 0xC17C, 0x9982, 0xC17D, 0x9983, 0xC17E, 0x9984, 0xC17F,
- 0x9985, 0xC180, 0x9986, 0xC181, 0x9987, 0xC182, 0x9988, 0xC183, 0x9989, 0xC184, 0x998A, 0xC186, 0x998B, 0xC187, 0x998C, 0xC188,
- 0x998D, 0xC189, 0x998E, 0xC18A, 0x998F, 0xC18B, 0x9990, 0xC18F, 0x9991, 0xC191, 0x9992, 0xC192, 0x9993, 0xC193, 0x9994, 0xC195,
- 0x9995, 0xC197, 0x9996, 0xC198, 0x9997, 0xC199, 0x9998, 0xC19A, 0x9999, 0xC19B, 0x999A, 0xC19E, 0x999B, 0xC1A0, 0x999C, 0xC1A2,
- 0x999D, 0xC1A3, 0x999E, 0xC1A4, 0x999F, 0xC1A6, 0x99A0, 0xC1A7, 0x99A1, 0xC1AA, 0x99A2, 0xC1AB, 0x99A3, 0xC1AD, 0x99A4, 0xC1AE,
- 0x99A5, 0xC1AF, 0x99A6, 0xC1B1, 0x99A7, 0xC1B2, 0x99A8, 0xC1B3, 0x99A9, 0xC1B4, 0x99AA, 0xC1B5, 0x99AB, 0xC1B6, 0x99AC, 0xC1B7,
- 0x99AD, 0xC1B8, 0x99AE, 0xC1B9, 0x99AF, 0xC1BA, 0x99B0, 0xC1BB, 0x99B1, 0xC1BC, 0x99B2, 0xC1BE, 0x99B3, 0xC1BF, 0x99B4, 0xC1C0,
- 0x99B5, 0xC1C1, 0x99B6, 0xC1C2, 0x99B7, 0xC1C3, 0x99B8, 0xC1C5, 0x99B9, 0xC1C6, 0x99BA, 0xC1C7, 0x99BB, 0xC1C9, 0x99BC, 0xC1CA,
- 0x99BD, 0xC1CB, 0x99BE, 0xC1CD, 0x99BF, 0xC1CE, 0x99C0, 0xC1CF, 0x99C1, 0xC1D0, 0x99C2, 0xC1D1, 0x99C3, 0xC1D2, 0x99C4, 0xC1D3,
- 0x99C5, 0xC1D5, 0x99C6, 0xC1D6, 0x99C7, 0xC1D9, 0x99C8, 0xC1DA, 0x99C9, 0xC1DB, 0x99CA, 0xC1DC, 0x99CB, 0xC1DD, 0x99CC, 0xC1DE,
- 0x99CD, 0xC1DF, 0x99CE, 0xC1E1, 0x99CF, 0xC1E2, 0x99D0, 0xC1E3, 0x99D1, 0xC1E5, 0x99D2, 0xC1E6, 0x99D3, 0xC1E7, 0x99D4, 0xC1E9,
- 0x99D5, 0xC1EA, 0x99D6, 0xC1EB, 0x99D7, 0xC1EC, 0x99D8, 0xC1ED, 0x99D9, 0xC1EE, 0x99DA, 0xC1EF, 0x99DB, 0xC1F2, 0x99DC, 0xC1F4,
- 0x99DD, 0xC1F5, 0x99DE, 0xC1F6, 0x99DF, 0xC1F7, 0x99E0, 0xC1F8, 0x99E1, 0xC1F9, 0x99E2, 0xC1FA, 0x99E3, 0xC1FB, 0x99E4, 0xC1FE,
- 0x99E5, 0xC1FF, 0x99E6, 0xC201, 0x99E7, 0xC202, 0x99E8, 0xC203, 0x99E9, 0xC205, 0x99EA, 0xC206, 0x99EB, 0xC207, 0x99EC, 0xC208,
- 0x99ED, 0xC209, 0x99EE, 0xC20A, 0x99EF, 0xC20B, 0x99F0, 0xC20E, 0x99F1, 0xC210, 0x99F2, 0xC212, 0x99F3, 0xC213, 0x99F4, 0xC214,
- 0x99F5, 0xC215, 0x99F6, 0xC216, 0x99F7, 0xC217, 0x99F8, 0xC21A, 0x99F9, 0xC21B, 0x99FA, 0xC21D, 0x99FB, 0xC21E, 0x99FC, 0xC221,
- 0x99FD, 0xC222, 0x99FE, 0xC223, 0x9A41, 0xC224, 0x9A42, 0xC225, 0x9A43, 0xC226, 0x9A44, 0xC227, 0x9A45, 0xC22A, 0x9A46, 0xC22C,
- 0x9A47, 0xC22E, 0x9A48, 0xC230, 0x9A49, 0xC233, 0x9A4A, 0xC235, 0x9A4B, 0xC236, 0x9A4C, 0xC237, 0x9A4D, 0xC238, 0x9A4E, 0xC239,
- 0x9A4F, 0xC23A, 0x9A50, 0xC23B, 0x9A51, 0xC23C, 0x9A52, 0xC23D, 0x9A53, 0xC23E, 0x9A54, 0xC23F, 0x9A55, 0xC240, 0x9A56, 0xC241,
- 0x9A57, 0xC242, 0x9A58, 0xC243, 0x9A59, 0xC244, 0x9A5A, 0xC245, 0x9A61, 0xC246, 0x9A62, 0xC247, 0x9A63, 0xC249, 0x9A64, 0xC24A,
- 0x9A65, 0xC24B, 0x9A66, 0xC24C, 0x9A67, 0xC24D, 0x9A68, 0xC24E, 0x9A69, 0xC24F, 0x9A6A, 0xC252, 0x9A6B, 0xC253, 0x9A6C, 0xC255,
- 0x9A6D, 0xC256, 0x9A6E, 0xC257, 0x9A6F, 0xC259, 0x9A70, 0xC25A, 0x9A71, 0xC25B, 0x9A72, 0xC25C, 0x9A73, 0xC25D, 0x9A74, 0xC25E,
- 0x9A75, 0xC25F, 0x9A76, 0xC261, 0x9A77, 0xC262, 0x9A78, 0xC263, 0x9A79, 0xC264, 0x9A7A, 0xC266, 0x9A81, 0xC267, 0x9A82, 0xC268,
- 0x9A83, 0xC269, 0x9A84, 0xC26A, 0x9A85, 0xC26B, 0x9A86, 0xC26E, 0x9A87, 0xC26F, 0x9A88, 0xC271, 0x9A89, 0xC272, 0x9A8A, 0xC273,
- 0x9A8B, 0xC275, 0x9A8C, 0xC276, 0x9A8D, 0xC277, 0x9A8E, 0xC278, 0x9A8F, 0xC279, 0x9A90, 0xC27A, 0x9A91, 0xC27B, 0x9A92, 0xC27E,
- 0x9A93, 0xC280, 0x9A94, 0xC282, 0x9A95, 0xC283, 0x9A96, 0xC284, 0x9A97, 0xC285, 0x9A98, 0xC286, 0x9A99, 0xC287, 0x9A9A, 0xC28A,
- 0x9A9B, 0xC28B, 0x9A9C, 0xC28C, 0x9A9D, 0xC28D, 0x9A9E, 0xC28E, 0x9A9F, 0xC28F, 0x9AA0, 0xC291, 0x9AA1, 0xC292, 0x9AA2, 0xC293,
- 0x9AA3, 0xC294, 0x9AA4, 0xC295, 0x9AA5, 0xC296, 0x9AA6, 0xC297, 0x9AA7, 0xC299, 0x9AA8, 0xC29A, 0x9AA9, 0xC29C, 0x9AAA, 0xC29E,
- 0x9AAB, 0xC29F, 0x9AAC, 0xC2A0, 0x9AAD, 0xC2A1, 0x9AAE, 0xC2A2, 0x9AAF, 0xC2A3, 0x9AB0, 0xC2A6, 0x9AB1, 0xC2A7, 0x9AB2, 0xC2A9,
- 0x9AB3, 0xC2AA, 0x9AB4, 0xC2AB, 0x9AB5, 0xC2AE, 0x9AB6, 0xC2AF, 0x9AB7, 0xC2B0, 0x9AB8, 0xC2B1, 0x9AB9, 0xC2B2, 0x9ABA, 0xC2B3,
- 0x9ABB, 0xC2B6, 0x9ABC, 0xC2B8, 0x9ABD, 0xC2BA, 0x9ABE, 0xC2BB, 0x9ABF, 0xC2BC, 0x9AC0, 0xC2BD, 0x9AC1, 0xC2BE, 0x9AC2, 0xC2BF,
- 0x9AC3, 0xC2C0, 0x9AC4, 0xC2C1, 0x9AC5, 0xC2C2, 0x9AC6, 0xC2C3, 0x9AC7, 0xC2C4, 0x9AC8, 0xC2C5, 0x9AC9, 0xC2C6, 0x9ACA, 0xC2C7,
- 0x9ACB, 0xC2C8, 0x9ACC, 0xC2C9, 0x9ACD, 0xC2CA, 0x9ACE, 0xC2CB, 0x9ACF, 0xC2CC, 0x9AD0, 0xC2CD, 0x9AD1, 0xC2CE, 0x9AD2, 0xC2CF,
- 0x9AD3, 0xC2D0, 0x9AD4, 0xC2D1, 0x9AD5, 0xC2D2, 0x9AD6, 0xC2D3, 0x9AD7, 0xC2D4, 0x9AD8, 0xC2D5, 0x9AD9, 0xC2D6, 0x9ADA, 0xC2D7,
- 0x9ADB, 0xC2D8, 0x9ADC, 0xC2D9, 0x9ADD, 0xC2DA, 0x9ADE, 0xC2DB, 0x9ADF, 0xC2DE, 0x9AE0, 0xC2DF, 0x9AE1, 0xC2E1, 0x9AE2, 0xC2E2,
- 0x9AE3, 0xC2E5, 0x9AE4, 0xC2E6, 0x9AE5, 0xC2E7, 0x9AE6, 0xC2E8, 0x9AE7, 0xC2E9, 0x9AE8, 0xC2EA, 0x9AE9, 0xC2EE, 0x9AEA, 0xC2F0,
- 0x9AEB, 0xC2F2, 0x9AEC, 0xC2F3, 0x9AED, 0xC2F4, 0x9AEE, 0xC2F5, 0x9AEF, 0xC2F7, 0x9AF0, 0xC2FA, 0x9AF1, 0xC2FD, 0x9AF2, 0xC2FE,
- 0x9AF3, 0xC2FF, 0x9AF4, 0xC301, 0x9AF5, 0xC302, 0x9AF6, 0xC303, 0x9AF7, 0xC304, 0x9AF8, 0xC305, 0x9AF9, 0xC306, 0x9AFA, 0xC307,
- 0x9AFB, 0xC30A, 0x9AFC, 0xC30B, 0x9AFD, 0xC30E, 0x9AFE, 0xC30F, 0x9B41, 0xC310, 0x9B42, 0xC311, 0x9B43, 0xC312, 0x9B44, 0xC316,
- 0x9B45, 0xC317, 0x9B46, 0xC319, 0x9B47, 0xC31A, 0x9B48, 0xC31B, 0x9B49, 0xC31D, 0x9B4A, 0xC31E, 0x9B4B, 0xC31F, 0x9B4C, 0xC320,
- 0x9B4D, 0xC321, 0x9B4E, 0xC322, 0x9B4F, 0xC323, 0x9B50, 0xC326, 0x9B51, 0xC327, 0x9B52, 0xC32A, 0x9B53, 0xC32B, 0x9B54, 0xC32C,
- 0x9B55, 0xC32D, 0x9B56, 0xC32E, 0x9B57, 0xC32F, 0x9B58, 0xC330, 0x9B59, 0xC331, 0x9B5A, 0xC332, 0x9B61, 0xC333, 0x9B62, 0xC334,
- 0x9B63, 0xC335, 0x9B64, 0xC336, 0x9B65, 0xC337, 0x9B66, 0xC338, 0x9B67, 0xC339, 0x9B68, 0xC33A, 0x9B69, 0xC33B, 0x9B6A, 0xC33C,
- 0x9B6B, 0xC33D, 0x9B6C, 0xC33E, 0x9B6D, 0xC33F, 0x9B6E, 0xC340, 0x9B6F, 0xC341, 0x9B70, 0xC342, 0x9B71, 0xC343, 0x9B72, 0xC344,
- 0x9B73, 0xC346, 0x9B74, 0xC347, 0x9B75, 0xC348, 0x9B76, 0xC349, 0x9B77, 0xC34A, 0x9B78, 0xC34B, 0x9B79, 0xC34C, 0x9B7A, 0xC34D,
- 0x9B81, 0xC34E, 0x9B82, 0xC34F, 0x9B83, 0xC350, 0x9B84, 0xC351, 0x9B85, 0xC352, 0x9B86, 0xC353, 0x9B87, 0xC354, 0x9B88, 0xC355,
- 0x9B89, 0xC356, 0x9B8A, 0xC357, 0x9B8B, 0xC358, 0x9B8C, 0xC359, 0x9B8D, 0xC35A, 0x9B8E, 0xC35B, 0x9B8F, 0xC35C, 0x9B90, 0xC35D,
- 0x9B91, 0xC35E, 0x9B92, 0xC35F, 0x9B93, 0xC360, 0x9B94, 0xC361, 0x9B95, 0xC362, 0x9B96, 0xC363, 0x9B97, 0xC364, 0x9B98, 0xC365,
- 0x9B99, 0xC366, 0x9B9A, 0xC367, 0x9B9B, 0xC36A, 0x9B9C, 0xC36B, 0x9B9D, 0xC36D, 0x9B9E, 0xC36E, 0x9B9F, 0xC36F, 0x9BA0, 0xC371,
- 0x9BA1, 0xC373, 0x9BA2, 0xC374, 0x9BA3, 0xC375, 0x9BA4, 0xC376, 0x9BA5, 0xC377, 0x9BA6, 0xC37A, 0x9BA7, 0xC37B, 0x9BA8, 0xC37E,
- 0x9BA9, 0xC37F, 0x9BAA, 0xC380, 0x9BAB, 0xC381, 0x9BAC, 0xC382, 0x9BAD, 0xC383, 0x9BAE, 0xC385, 0x9BAF, 0xC386, 0x9BB0, 0xC387,
- 0x9BB1, 0xC389, 0x9BB2, 0xC38A, 0x9BB3, 0xC38B, 0x9BB4, 0xC38D, 0x9BB5, 0xC38E, 0x9BB6, 0xC38F, 0x9BB7, 0xC390, 0x9BB8, 0xC391,
- 0x9BB9, 0xC392, 0x9BBA, 0xC393, 0x9BBB, 0xC394, 0x9BBC, 0xC395, 0x9BBD, 0xC396, 0x9BBE, 0xC397, 0x9BBF, 0xC398, 0x9BC0, 0xC399,
- 0x9BC1, 0xC39A, 0x9BC2, 0xC39B, 0x9BC3, 0xC39C, 0x9BC4, 0xC39D, 0x9BC5, 0xC39E, 0x9BC6, 0xC39F, 0x9BC7, 0xC3A0, 0x9BC8, 0xC3A1,
- 0x9BC9, 0xC3A2, 0x9BCA, 0xC3A3, 0x9BCB, 0xC3A4, 0x9BCC, 0xC3A5, 0x9BCD, 0xC3A6, 0x9BCE, 0xC3A7, 0x9BCF, 0xC3A8, 0x9BD0, 0xC3A9,
- 0x9BD1, 0xC3AA, 0x9BD2, 0xC3AB, 0x9BD3, 0xC3AC, 0x9BD4, 0xC3AD, 0x9BD5, 0xC3AE, 0x9BD6, 0xC3AF, 0x9BD7, 0xC3B0, 0x9BD8, 0xC3B1,
- 0x9BD9, 0xC3B2, 0x9BDA, 0xC3B3, 0x9BDB, 0xC3B4, 0x9BDC, 0xC3B5, 0x9BDD, 0xC3B6, 0x9BDE, 0xC3B7, 0x9BDF, 0xC3B8, 0x9BE0, 0xC3B9,
- 0x9BE1, 0xC3BA, 0x9BE2, 0xC3BB, 0x9BE3, 0xC3BC, 0x9BE4, 0xC3BD, 0x9BE5, 0xC3BE, 0x9BE6, 0xC3BF, 0x9BE7, 0xC3C1, 0x9BE8, 0xC3C2,
- 0x9BE9, 0xC3C3, 0x9BEA, 0xC3C4, 0x9BEB, 0xC3C5, 0x9BEC, 0xC3C6, 0x9BED, 0xC3C7, 0x9BEE, 0xC3C8, 0x9BEF, 0xC3C9, 0x9BF0, 0xC3CA,
- 0x9BF1, 0xC3CB, 0x9BF2, 0xC3CC, 0x9BF3, 0xC3CD, 0x9BF4, 0xC3CE, 0x9BF5, 0xC3CF, 0x9BF6, 0xC3D0, 0x9BF7, 0xC3D1, 0x9BF8, 0xC3D2,
- 0x9BF9, 0xC3D3, 0x9BFA, 0xC3D4, 0x9BFB, 0xC3D5, 0x9BFC, 0xC3D6, 0x9BFD, 0xC3D7, 0x9BFE, 0xC3DA, 0x9C41, 0xC3DB, 0x9C42, 0xC3DD,
- 0x9C43, 0xC3DE, 0x9C44, 0xC3E1, 0x9C45, 0xC3E3, 0x9C46, 0xC3E4, 0x9C47, 0xC3E5, 0x9C48, 0xC3E6, 0x9C49, 0xC3E7, 0x9C4A, 0xC3EA,
- 0x9C4B, 0xC3EB, 0x9C4C, 0xC3EC, 0x9C4D, 0xC3EE, 0x9C4E, 0xC3EF, 0x9C4F, 0xC3F0, 0x9C50, 0xC3F1, 0x9C51, 0xC3F2, 0x9C52, 0xC3F3,
- 0x9C53, 0xC3F6, 0x9C54, 0xC3F7, 0x9C55, 0xC3F9, 0x9C56, 0xC3FA, 0x9C57, 0xC3FB, 0x9C58, 0xC3FC, 0x9C59, 0xC3FD, 0x9C5A, 0xC3FE,
- 0x9C61, 0xC3FF, 0x9C62, 0xC400, 0x9C63, 0xC401, 0x9C64, 0xC402, 0x9C65, 0xC403, 0x9C66, 0xC404, 0x9C67, 0xC405, 0x9C68, 0xC406,
- 0x9C69, 0xC407, 0x9C6A, 0xC409, 0x9C6B, 0xC40A, 0x9C6C, 0xC40B, 0x9C6D, 0xC40C, 0x9C6E, 0xC40D, 0x9C6F, 0xC40E, 0x9C70, 0xC40F,
- 0x9C71, 0xC411, 0x9C72, 0xC412, 0x9C73, 0xC413, 0x9C74, 0xC414, 0x9C75, 0xC415, 0x9C76, 0xC416, 0x9C77, 0xC417, 0x9C78, 0xC418,
- 0x9C79, 0xC419, 0x9C7A, 0xC41A, 0x9C81, 0xC41B, 0x9C82, 0xC41C, 0x9C83, 0xC41D, 0x9C84, 0xC41E, 0x9C85, 0xC41F, 0x9C86, 0xC420,
- 0x9C87, 0xC421, 0x9C88, 0xC422, 0x9C89, 0xC423, 0x9C8A, 0xC425, 0x9C8B, 0xC426, 0x9C8C, 0xC427, 0x9C8D, 0xC428, 0x9C8E, 0xC429,
- 0x9C8F, 0xC42A, 0x9C90, 0xC42B, 0x9C91, 0xC42D, 0x9C92, 0xC42E, 0x9C93, 0xC42F, 0x9C94, 0xC431, 0x9C95, 0xC432, 0x9C96, 0xC433,
- 0x9C97, 0xC435, 0x9C98, 0xC436, 0x9C99, 0xC437, 0x9C9A, 0xC438, 0x9C9B, 0xC439, 0x9C9C, 0xC43A, 0x9C9D, 0xC43B, 0x9C9E, 0xC43E,
- 0x9C9F, 0xC43F, 0x9CA0, 0xC440, 0x9CA1, 0xC441, 0x9CA2, 0xC442, 0x9CA3, 0xC443, 0x9CA4, 0xC444, 0x9CA5, 0xC445, 0x9CA6, 0xC446,
- 0x9CA7, 0xC447, 0x9CA8, 0xC449, 0x9CA9, 0xC44A, 0x9CAA, 0xC44B, 0x9CAB, 0xC44C, 0x9CAC, 0xC44D, 0x9CAD, 0xC44E, 0x9CAE, 0xC44F,
- 0x9CAF, 0xC450, 0x9CB0, 0xC451, 0x9CB1, 0xC452, 0x9CB2, 0xC453, 0x9CB3, 0xC454, 0x9CB4, 0xC455, 0x9CB5, 0xC456, 0x9CB6, 0xC457,
- 0x9CB7, 0xC458, 0x9CB8, 0xC459, 0x9CB9, 0xC45A, 0x9CBA, 0xC45B, 0x9CBB, 0xC45C, 0x9CBC, 0xC45D, 0x9CBD, 0xC45E, 0x9CBE, 0xC45F,
- 0x9CBF, 0xC460, 0x9CC0, 0xC461, 0x9CC1, 0xC462, 0x9CC2, 0xC463, 0x9CC3, 0xC466, 0x9CC4, 0xC467, 0x9CC5, 0xC469, 0x9CC6, 0xC46A,
- 0x9CC7, 0xC46B, 0x9CC8, 0xC46D, 0x9CC9, 0xC46E, 0x9CCA, 0xC46F, 0x9CCB, 0xC470, 0x9CCC, 0xC471, 0x9CCD, 0xC472, 0x9CCE, 0xC473,
- 0x9CCF, 0xC476, 0x9CD0, 0xC477, 0x9CD1, 0xC478, 0x9CD2, 0xC47A, 0x9CD3, 0xC47B, 0x9CD4, 0xC47C, 0x9CD5, 0xC47D, 0x9CD6, 0xC47E,
- 0x9CD7, 0xC47F, 0x9CD8, 0xC481, 0x9CD9, 0xC482, 0x9CDA, 0xC483, 0x9CDB, 0xC484, 0x9CDC, 0xC485, 0x9CDD, 0xC486, 0x9CDE, 0xC487,
- 0x9CDF, 0xC488, 0x9CE0, 0xC489, 0x9CE1, 0xC48A, 0x9CE2, 0xC48B, 0x9CE3, 0xC48C, 0x9CE4, 0xC48D, 0x9CE5, 0xC48E, 0x9CE6, 0xC48F,
- 0x9CE7, 0xC490, 0x9CE8, 0xC491, 0x9CE9, 0xC492, 0x9CEA, 0xC493, 0x9CEB, 0xC495, 0x9CEC, 0xC496, 0x9CED, 0xC497, 0x9CEE, 0xC498,
- 0x9CEF, 0xC499, 0x9CF0, 0xC49A, 0x9CF1, 0xC49B, 0x9CF2, 0xC49D, 0x9CF3, 0xC49E, 0x9CF4, 0xC49F, 0x9CF5, 0xC4A0, 0x9CF6, 0xC4A1,
- 0x9CF7, 0xC4A2, 0x9CF8, 0xC4A3, 0x9CF9, 0xC4A4, 0x9CFA, 0xC4A5, 0x9CFB, 0xC4A6, 0x9CFC, 0xC4A7, 0x9CFD, 0xC4A8, 0x9CFE, 0xC4A9,
- 0x9D41, 0xC4AA, 0x9D42, 0xC4AB, 0x9D43, 0xC4AC, 0x9D44, 0xC4AD, 0x9D45, 0xC4AE, 0x9D46, 0xC4AF, 0x9D47, 0xC4B0, 0x9D48, 0xC4B1,
- 0x9D49, 0xC4B2, 0x9D4A, 0xC4B3, 0x9D4B, 0xC4B4, 0x9D4C, 0xC4B5, 0x9D4D, 0xC4B6, 0x9D4E, 0xC4B7, 0x9D4F, 0xC4B9, 0x9D50, 0xC4BA,
- 0x9D51, 0xC4BB, 0x9D52, 0xC4BD, 0x9D53, 0xC4BE, 0x9D54, 0xC4BF, 0x9D55, 0xC4C0, 0x9D56, 0xC4C1, 0x9D57, 0xC4C2, 0x9D58, 0xC4C3,
- 0x9D59, 0xC4C4, 0x9D5A, 0xC4C5, 0x9D61, 0xC4C6, 0x9D62, 0xC4C7, 0x9D63, 0xC4C8, 0x9D64, 0xC4C9, 0x9D65, 0xC4CA, 0x9D66, 0xC4CB,
- 0x9D67, 0xC4CC, 0x9D68, 0xC4CD, 0x9D69, 0xC4CE, 0x9D6A, 0xC4CF, 0x9D6B, 0xC4D0, 0x9D6C, 0xC4D1, 0x9D6D, 0xC4D2, 0x9D6E, 0xC4D3,
- 0x9D6F, 0xC4D4, 0x9D70, 0xC4D5, 0x9D71, 0xC4D6, 0x9D72, 0xC4D7, 0x9D73, 0xC4D8, 0x9D74, 0xC4D9, 0x9D75, 0xC4DA, 0x9D76, 0xC4DB,
- 0x9D77, 0xC4DC, 0x9D78, 0xC4DD, 0x9D79, 0xC4DE, 0x9D7A, 0xC4DF, 0x9D81, 0xC4E0, 0x9D82, 0xC4E1, 0x9D83, 0xC4E2, 0x9D84, 0xC4E3,
- 0x9D85, 0xC4E4, 0x9D86, 0xC4E5, 0x9D87, 0xC4E6, 0x9D88, 0xC4E7, 0x9D89, 0xC4E8, 0x9D8A, 0xC4EA, 0x9D8B, 0xC4EB, 0x9D8C, 0xC4EC,
- 0x9D8D, 0xC4ED, 0x9D8E, 0xC4EE, 0x9D8F, 0xC4EF, 0x9D90, 0xC4F2, 0x9D91, 0xC4F3, 0x9D92, 0xC4F5, 0x9D93, 0xC4F6, 0x9D94, 0xC4F7,
- 0x9D95, 0xC4F9, 0x9D96, 0xC4FB, 0x9D97, 0xC4FC, 0x9D98, 0xC4FD, 0x9D99, 0xC4FE, 0x9D9A, 0xC502, 0x9D9B, 0xC503, 0x9D9C, 0xC504,
- 0x9D9D, 0xC505, 0x9D9E, 0xC506, 0x9D9F, 0xC507, 0x9DA0, 0xC508, 0x9DA1, 0xC509, 0x9DA2, 0xC50A, 0x9DA3, 0xC50B, 0x9DA4, 0xC50D,
- 0x9DA5, 0xC50E, 0x9DA6, 0xC50F, 0x9DA7, 0xC511, 0x9DA8, 0xC512, 0x9DA9, 0xC513, 0x9DAA, 0xC515, 0x9DAB, 0xC516, 0x9DAC, 0xC517,
- 0x9DAD, 0xC518, 0x9DAE, 0xC519, 0x9DAF, 0xC51A, 0x9DB0, 0xC51B, 0x9DB1, 0xC51D, 0x9DB2, 0xC51E, 0x9DB3, 0xC51F, 0x9DB4, 0xC520,
- 0x9DB5, 0xC521, 0x9DB6, 0xC522, 0x9DB7, 0xC523, 0x9DB8, 0xC524, 0x9DB9, 0xC525, 0x9DBA, 0xC526, 0x9DBB, 0xC527, 0x9DBC, 0xC52A,
- 0x9DBD, 0xC52B, 0x9DBE, 0xC52D, 0x9DBF, 0xC52E, 0x9DC0, 0xC52F, 0x9DC1, 0xC531, 0x9DC2, 0xC532, 0x9DC3, 0xC533, 0x9DC4, 0xC534,
- 0x9DC5, 0xC535, 0x9DC6, 0xC536, 0x9DC7, 0xC537, 0x9DC8, 0xC53A, 0x9DC9, 0xC53C, 0x9DCA, 0xC53E, 0x9DCB, 0xC53F, 0x9DCC, 0xC540,
- 0x9DCD, 0xC541, 0x9DCE, 0xC542, 0x9DCF, 0xC543, 0x9DD0, 0xC546, 0x9DD1, 0xC547, 0x9DD2, 0xC54B, 0x9DD3, 0xC54F, 0x9DD4, 0xC550,
- 0x9DD5, 0xC551, 0x9DD6, 0xC552, 0x9DD7, 0xC556, 0x9DD8, 0xC55A, 0x9DD9, 0xC55B, 0x9DDA, 0xC55C, 0x9DDB, 0xC55F, 0x9DDC, 0xC562,
- 0x9DDD, 0xC563, 0x9DDE, 0xC565, 0x9DDF, 0xC566, 0x9DE0, 0xC567, 0x9DE1, 0xC569, 0x9DE2, 0xC56A, 0x9DE3, 0xC56B, 0x9DE4, 0xC56C,
- 0x9DE5, 0xC56D, 0x9DE6, 0xC56E, 0x9DE7, 0xC56F, 0x9DE8, 0xC572, 0x9DE9, 0xC576, 0x9DEA, 0xC577, 0x9DEB, 0xC578, 0x9DEC, 0xC579,
- 0x9DED, 0xC57A, 0x9DEE, 0xC57B, 0x9DEF, 0xC57E, 0x9DF0, 0xC57F, 0x9DF1, 0xC581, 0x9DF2, 0xC582, 0x9DF3, 0xC583, 0x9DF4, 0xC585,
- 0x9DF5, 0xC586, 0x9DF6, 0xC588, 0x9DF7, 0xC589, 0x9DF8, 0xC58A, 0x9DF9, 0xC58B, 0x9DFA, 0xC58E, 0x9DFB, 0xC590, 0x9DFC, 0xC592,
- 0x9DFD, 0xC593, 0x9DFE, 0xC594, 0x9E41, 0xC596, 0x9E42, 0xC599, 0x9E43, 0xC59A, 0x9E44, 0xC59B, 0x9E45, 0xC59D, 0x9E46, 0xC59E,
- 0x9E47, 0xC59F, 0x9E48, 0xC5A1, 0x9E49, 0xC5A2, 0x9E4A, 0xC5A3, 0x9E4B, 0xC5A4, 0x9E4C, 0xC5A5, 0x9E4D, 0xC5A6, 0x9E4E, 0xC5A7,
- 0x9E4F, 0xC5A8, 0x9E50, 0xC5AA, 0x9E51, 0xC5AB, 0x9E52, 0xC5AC, 0x9E53, 0xC5AD, 0x9E54, 0xC5AE, 0x9E55, 0xC5AF, 0x9E56, 0xC5B0,
- 0x9E57, 0xC5B1, 0x9E58, 0xC5B2, 0x9E59, 0xC5B3, 0x9E5A, 0xC5B6, 0x9E61, 0xC5B7, 0x9E62, 0xC5BA, 0x9E63, 0xC5BF, 0x9E64, 0xC5C0,
- 0x9E65, 0xC5C1, 0x9E66, 0xC5C2, 0x9E67, 0xC5C3, 0x9E68, 0xC5CB, 0x9E69, 0xC5CD, 0x9E6A, 0xC5CF, 0x9E6B, 0xC5D2, 0x9E6C, 0xC5D3,
- 0x9E6D, 0xC5D5, 0x9E6E, 0xC5D6, 0x9E6F, 0xC5D7, 0x9E70, 0xC5D9, 0x9E71, 0xC5DA, 0x9E72, 0xC5DB, 0x9E73, 0xC5DC, 0x9E74, 0xC5DD,
- 0x9E75, 0xC5DE, 0x9E76, 0xC5DF, 0x9E77, 0xC5E2, 0x9E78, 0xC5E4, 0x9E79, 0xC5E6, 0x9E7A, 0xC5E7, 0x9E81, 0xC5E8, 0x9E82, 0xC5E9,
- 0x9E83, 0xC5EA, 0x9E84, 0xC5EB, 0x9E85, 0xC5EF, 0x9E86, 0xC5F1, 0x9E87, 0xC5F2, 0x9E88, 0xC5F3, 0x9E89, 0xC5F5, 0x9E8A, 0xC5F8,
- 0x9E8B, 0xC5F9, 0x9E8C, 0xC5FA, 0x9E8D, 0xC5FB, 0x9E8E, 0xC602, 0x9E8F, 0xC603, 0x9E90, 0xC604, 0x9E91, 0xC609, 0x9E92, 0xC60A,
- 0x9E93, 0xC60B, 0x9E94, 0xC60D, 0x9E95, 0xC60E, 0x9E96, 0xC60F, 0x9E97, 0xC611, 0x9E98, 0xC612, 0x9E99, 0xC613, 0x9E9A, 0xC614,
- 0x9E9B, 0xC615, 0x9E9C, 0xC616, 0x9E9D, 0xC617, 0x9E9E, 0xC61A, 0x9E9F, 0xC61D, 0x9EA0, 0xC61E, 0x9EA1, 0xC61F, 0x9EA2, 0xC620,
- 0x9EA3, 0xC621, 0x9EA4, 0xC622, 0x9EA5, 0xC623, 0x9EA6, 0xC626, 0x9EA7, 0xC627, 0x9EA8, 0xC629, 0x9EA9, 0xC62A, 0x9EAA, 0xC62B,
- 0x9EAB, 0xC62F, 0x9EAC, 0xC631, 0x9EAD, 0xC632, 0x9EAE, 0xC636, 0x9EAF, 0xC638, 0x9EB0, 0xC63A, 0x9EB1, 0xC63C, 0x9EB2, 0xC63D,
- 0x9EB3, 0xC63E, 0x9EB4, 0xC63F, 0x9EB5, 0xC642, 0x9EB6, 0xC643, 0x9EB7, 0xC645, 0x9EB8, 0xC646, 0x9EB9, 0xC647, 0x9EBA, 0xC649,
- 0x9EBB, 0xC64A, 0x9EBC, 0xC64B, 0x9EBD, 0xC64C, 0x9EBE, 0xC64D, 0x9EBF, 0xC64E, 0x9EC0, 0xC64F, 0x9EC1, 0xC652, 0x9EC2, 0xC656,
- 0x9EC3, 0xC657, 0x9EC4, 0xC658, 0x9EC5, 0xC659, 0x9EC6, 0xC65A, 0x9EC7, 0xC65B, 0x9EC8, 0xC65E, 0x9EC9, 0xC65F, 0x9ECA, 0xC661,
- 0x9ECB, 0xC662, 0x9ECC, 0xC663, 0x9ECD, 0xC664, 0x9ECE, 0xC665, 0x9ECF, 0xC666, 0x9ED0, 0xC667, 0x9ED1, 0xC668, 0x9ED2, 0xC669,
- 0x9ED3, 0xC66A, 0x9ED4, 0xC66B, 0x9ED5, 0xC66D, 0x9ED6, 0xC66E, 0x9ED7, 0xC670, 0x9ED8, 0xC672, 0x9ED9, 0xC673, 0x9EDA, 0xC674,
- 0x9EDB, 0xC675, 0x9EDC, 0xC676, 0x9EDD, 0xC677, 0x9EDE, 0xC67A, 0x9EDF, 0xC67B, 0x9EE0, 0xC67D, 0x9EE1, 0xC67E, 0x9EE2, 0xC67F,
- 0x9EE3, 0xC681, 0x9EE4, 0xC682, 0x9EE5, 0xC683, 0x9EE6, 0xC684, 0x9EE7, 0xC685, 0x9EE8, 0xC686, 0x9EE9, 0xC687, 0x9EEA, 0xC68A,
- 0x9EEB, 0xC68C, 0x9EEC, 0xC68E, 0x9EED, 0xC68F, 0x9EEE, 0xC690, 0x9EEF, 0xC691, 0x9EF0, 0xC692, 0x9EF1, 0xC693, 0x9EF2, 0xC696,
- 0x9EF3, 0xC697, 0x9EF4, 0xC699, 0x9EF5, 0xC69A, 0x9EF6, 0xC69B, 0x9EF7, 0xC69D, 0x9EF8, 0xC69E, 0x9EF9, 0xC69F, 0x9EFA, 0xC6A0,
- 0x9EFB, 0xC6A1, 0x9EFC, 0xC6A2, 0x9EFD, 0xC6A3, 0x9EFE, 0xC6A6, 0x9F41, 0xC6A8, 0x9F42, 0xC6AA, 0x9F43, 0xC6AB, 0x9F44, 0xC6AC,
- 0x9F45, 0xC6AD, 0x9F46, 0xC6AE, 0x9F47, 0xC6AF, 0x9F48, 0xC6B2, 0x9F49, 0xC6B3, 0x9F4A, 0xC6B5, 0x9F4B, 0xC6B6, 0x9F4C, 0xC6B7,
- 0x9F4D, 0xC6BB, 0x9F4E, 0xC6BC, 0x9F4F, 0xC6BD, 0x9F50, 0xC6BE, 0x9F51, 0xC6BF, 0x9F52, 0xC6C2, 0x9F53, 0xC6C4, 0x9F54, 0xC6C6,
- 0x9F55, 0xC6C7, 0x9F56, 0xC6C8, 0x9F57, 0xC6C9, 0x9F58, 0xC6CA, 0x9F59, 0xC6CB, 0x9F5A, 0xC6CE, 0x9F61, 0xC6CF, 0x9F62, 0xC6D1,
- 0x9F63, 0xC6D2, 0x9F64, 0xC6D3, 0x9F65, 0xC6D5, 0x9F66, 0xC6D6, 0x9F67, 0xC6D7, 0x9F68, 0xC6D8, 0x9F69, 0xC6D9, 0x9F6A, 0xC6DA,
- 0x9F6B, 0xC6DB, 0x9F6C, 0xC6DE, 0x9F6D, 0xC6DF, 0x9F6E, 0xC6E2, 0x9F6F, 0xC6E3, 0x9F70, 0xC6E4, 0x9F71, 0xC6E5, 0x9F72, 0xC6E6,
- 0x9F73, 0xC6E7, 0x9F74, 0xC6EA, 0x9F75, 0xC6EB, 0x9F76, 0xC6ED, 0x9F77, 0xC6EE, 0x9F78, 0xC6EF, 0x9F79, 0xC6F1, 0x9F7A, 0xC6F2,
- 0x9F81, 0xC6F3, 0x9F82, 0xC6F4, 0x9F83, 0xC6F5, 0x9F84, 0xC6F6, 0x9F85, 0xC6F7, 0x9F86, 0xC6FA, 0x9F87, 0xC6FB, 0x9F88, 0xC6FC,
- 0x9F89, 0xC6FE, 0x9F8A, 0xC6FF, 0x9F8B, 0xC700, 0x9F8C, 0xC701, 0x9F8D, 0xC702, 0x9F8E, 0xC703, 0x9F8F, 0xC706, 0x9F90, 0xC707,
- 0x9F91, 0xC709, 0x9F92, 0xC70A, 0x9F93, 0xC70B, 0x9F94, 0xC70D, 0x9F95, 0xC70E, 0x9F96, 0xC70F, 0x9F97, 0xC710, 0x9F98, 0xC711,
- 0x9F99, 0xC712, 0x9F9A, 0xC713, 0x9F9B, 0xC716, 0x9F9C, 0xC718, 0x9F9D, 0xC71A, 0x9F9E, 0xC71B, 0x9F9F, 0xC71C, 0x9FA0, 0xC71D,
- 0x9FA1, 0xC71E, 0x9FA2, 0xC71F, 0x9FA3, 0xC722, 0x9FA4, 0xC723, 0x9FA5, 0xC725, 0x9FA6, 0xC726, 0x9FA7, 0xC727, 0x9FA8, 0xC729,
- 0x9FA9, 0xC72A, 0x9FAA, 0xC72B, 0x9FAB, 0xC72C, 0x9FAC, 0xC72D, 0x9FAD, 0xC72E, 0x9FAE, 0xC72F, 0x9FAF, 0xC732, 0x9FB0, 0xC734,
- 0x9FB1, 0xC736, 0x9FB2, 0xC738, 0x9FB3, 0xC739, 0x9FB4, 0xC73A, 0x9FB5, 0xC73B, 0x9FB6, 0xC73E, 0x9FB7, 0xC73F, 0x9FB8, 0xC741,
- 0x9FB9, 0xC742, 0x9FBA, 0xC743, 0x9FBB, 0xC745, 0x9FBC, 0xC746, 0x9FBD, 0xC747, 0x9FBE, 0xC748, 0x9FBF, 0xC749, 0x9FC0, 0xC74B,
- 0x9FC1, 0xC74E, 0x9FC2, 0xC750, 0x9FC3, 0xC759, 0x9FC4, 0xC75A, 0x9FC5, 0xC75B, 0x9FC6, 0xC75D, 0x9FC7, 0xC75E, 0x9FC8, 0xC75F,
- 0x9FC9, 0xC761, 0x9FCA, 0xC762, 0x9FCB, 0xC763, 0x9FCC, 0xC764, 0x9FCD, 0xC765, 0x9FCE, 0xC766, 0x9FCF, 0xC767, 0x9FD0, 0xC769,
- 0x9FD1, 0xC76A, 0x9FD2, 0xC76C, 0x9FD3, 0xC76D, 0x9FD4, 0xC76E, 0x9FD5, 0xC76F, 0x9FD6, 0xC770, 0x9FD7, 0xC771, 0x9FD8, 0xC772,
- 0x9FD9, 0xC773, 0x9FDA, 0xC776, 0x9FDB, 0xC777, 0x9FDC, 0xC779, 0x9FDD, 0xC77A, 0x9FDE, 0xC77B, 0x9FDF, 0xC77F, 0x9FE0, 0xC780,
- 0x9FE1, 0xC781, 0x9FE2, 0xC782, 0x9FE3, 0xC786, 0x9FE4, 0xC78B, 0x9FE5, 0xC78C, 0x9FE6, 0xC78D, 0x9FE7, 0xC78F, 0x9FE8, 0xC792,
- 0x9FE9, 0xC793, 0x9FEA, 0xC795, 0x9FEB, 0xC799, 0x9FEC, 0xC79B, 0x9FED, 0xC79C, 0x9FEE, 0xC79D, 0x9FEF, 0xC79E, 0x9FF0, 0xC79F,
- 0x9FF1, 0xC7A2, 0x9FF2, 0xC7A7, 0x9FF3, 0xC7A8, 0x9FF4, 0xC7A9, 0x9FF5, 0xC7AA, 0x9FF6, 0xC7AB, 0x9FF7, 0xC7AE, 0x9FF8, 0xC7AF,
- 0x9FF9, 0xC7B1, 0x9FFA, 0xC7B2, 0x9FFB, 0xC7B3, 0x9FFC, 0xC7B5, 0x9FFD, 0xC7B6, 0x9FFE, 0xC7B7, 0xA041, 0xC7B8, 0xA042, 0xC7B9,
- 0xA043, 0xC7BA, 0xA044, 0xC7BB, 0xA045, 0xC7BE, 0xA046, 0xC7C2, 0xA047, 0xC7C3, 0xA048, 0xC7C4, 0xA049, 0xC7C5, 0xA04A, 0xC7C6,
- 0xA04B, 0xC7C7, 0xA04C, 0xC7CA, 0xA04D, 0xC7CB, 0xA04E, 0xC7CD, 0xA04F, 0xC7CF, 0xA050, 0xC7D1, 0xA051, 0xC7D2, 0xA052, 0xC7D3,
- 0xA053, 0xC7D4, 0xA054, 0xC7D5, 0xA055, 0xC7D6, 0xA056, 0xC7D7, 0xA057, 0xC7D9, 0xA058, 0xC7DA, 0xA059, 0xC7DB, 0xA05A, 0xC7DC,
- 0xA061, 0xC7DE, 0xA062, 0xC7DF, 0xA063, 0xC7E0, 0xA064, 0xC7E1, 0xA065, 0xC7E2, 0xA066, 0xC7E3, 0xA067, 0xC7E5, 0xA068, 0xC7E6,
- 0xA069, 0xC7E7, 0xA06A, 0xC7E9, 0xA06B, 0xC7EA, 0xA06C, 0xC7EB, 0xA06D, 0xC7ED, 0xA06E, 0xC7EE, 0xA06F, 0xC7EF, 0xA070, 0xC7F0,
- 0xA071, 0xC7F1, 0xA072, 0xC7F2, 0xA073, 0xC7F3, 0xA074, 0xC7F4, 0xA075, 0xC7F5, 0xA076, 0xC7F6, 0xA077, 0xC7F7, 0xA078, 0xC7F8,
- 0xA079, 0xC7F9, 0xA07A, 0xC7FA, 0xA081, 0xC7FB, 0xA082, 0xC7FC, 0xA083, 0xC7FD, 0xA084, 0xC7FE, 0xA085, 0xC7FF, 0xA086, 0xC802,
- 0xA087, 0xC803, 0xA088, 0xC805, 0xA089, 0xC806, 0xA08A, 0xC807, 0xA08B, 0xC809, 0xA08C, 0xC80B, 0xA08D, 0xC80C, 0xA08E, 0xC80D,
- 0xA08F, 0xC80E, 0xA090, 0xC80F, 0xA091, 0xC812, 0xA092, 0xC814, 0xA093, 0xC817, 0xA094, 0xC818, 0xA095, 0xC819, 0xA096, 0xC81A,
- 0xA097, 0xC81B, 0xA098, 0xC81E, 0xA099, 0xC81F, 0xA09A, 0xC821, 0xA09B, 0xC822, 0xA09C, 0xC823, 0xA09D, 0xC825, 0xA09E, 0xC826,
- 0xA09F, 0xC827, 0xA0A0, 0xC828, 0xA0A1, 0xC829, 0xA0A2, 0xC82A, 0xA0A3, 0xC82B, 0xA0A4, 0xC82E, 0xA0A5, 0xC830, 0xA0A6, 0xC832,
- 0xA0A7, 0xC833, 0xA0A8, 0xC834, 0xA0A9, 0xC835, 0xA0AA, 0xC836, 0xA0AB, 0xC837, 0xA0AC, 0xC839, 0xA0AD, 0xC83A, 0xA0AE, 0xC83B,
- 0xA0AF, 0xC83D, 0xA0B0, 0xC83E, 0xA0B1, 0xC83F, 0xA0B2, 0xC841, 0xA0B3, 0xC842, 0xA0B4, 0xC843, 0xA0B5, 0xC844, 0xA0B6, 0xC845,
- 0xA0B7, 0xC846, 0xA0B8, 0xC847, 0xA0B9, 0xC84A, 0xA0BA, 0xC84B, 0xA0BB, 0xC84E, 0xA0BC, 0xC84F, 0xA0BD, 0xC850, 0xA0BE, 0xC851,
- 0xA0BF, 0xC852, 0xA0C0, 0xC853, 0xA0C1, 0xC855, 0xA0C2, 0xC856, 0xA0C3, 0xC857, 0xA0C4, 0xC858, 0xA0C5, 0xC859, 0xA0C6, 0xC85A,
- 0xA0C7, 0xC85B, 0xA0C8, 0xC85C, 0xA0C9, 0xC85D, 0xA0CA, 0xC85E, 0xA0CB, 0xC85F, 0xA0CC, 0xC860, 0xA0CD, 0xC861, 0xA0CE, 0xC862,
- 0xA0CF, 0xC863, 0xA0D0, 0xC864, 0xA0D1, 0xC865, 0xA0D2, 0xC866, 0xA0D3, 0xC867, 0xA0D4, 0xC868, 0xA0D5, 0xC869, 0xA0D6, 0xC86A,
- 0xA0D7, 0xC86B, 0xA0D8, 0xC86C, 0xA0D9, 0xC86D, 0xA0DA, 0xC86E, 0xA0DB, 0xC86F, 0xA0DC, 0xC872, 0xA0DD, 0xC873, 0xA0DE, 0xC875,
- 0xA0DF, 0xC876, 0xA0E0, 0xC877, 0xA0E1, 0xC879, 0xA0E2, 0xC87B, 0xA0E3, 0xC87C, 0xA0E4, 0xC87D, 0xA0E5, 0xC87E, 0xA0E6, 0xC87F,
- 0xA0E7, 0xC882, 0xA0E8, 0xC884, 0xA0E9, 0xC888, 0xA0EA, 0xC889, 0xA0EB, 0xC88A, 0xA0EC, 0xC88E, 0xA0ED, 0xC88F, 0xA0EE, 0xC890,
- 0xA0EF, 0xC891, 0xA0F0, 0xC892, 0xA0F1, 0xC893, 0xA0F2, 0xC895, 0xA0F3, 0xC896, 0xA0F4, 0xC897, 0xA0F5, 0xC898, 0xA0F6, 0xC899,
- 0xA0F7, 0xC89A, 0xA0F8, 0xC89B, 0xA0F9, 0xC89C, 0xA0FA, 0xC89E, 0xA0FB, 0xC8A0, 0xA0FC, 0xC8A2, 0xA0FD, 0xC8A3, 0xA0FE, 0xC8A4,
- 0xA141, 0xC8A5, 0xA142, 0xC8A6, 0xA143, 0xC8A7, 0xA144, 0xC8A9, 0xA145, 0xC8AA, 0xA146, 0xC8AB, 0xA147, 0xC8AC, 0xA148, 0xC8AD,
- 0xA149, 0xC8AE, 0xA14A, 0xC8AF, 0xA14B, 0xC8B0, 0xA14C, 0xC8B1, 0xA14D, 0xC8B2, 0xA14E, 0xC8B3, 0xA14F, 0xC8B4, 0xA150, 0xC8B5,
- 0xA151, 0xC8B6, 0xA152, 0xC8B7, 0xA153, 0xC8B8, 0xA154, 0xC8B9, 0xA155, 0xC8BA, 0xA156, 0xC8BB, 0xA157, 0xC8BE, 0xA158, 0xC8BF,
- 0xA159, 0xC8C0, 0xA15A, 0xC8C1, 0xA161, 0xC8C2, 0xA162, 0xC8C3, 0xA163, 0xC8C5, 0xA164, 0xC8C6, 0xA165, 0xC8C7, 0xA166, 0xC8C9,
- 0xA167, 0xC8CA, 0xA168, 0xC8CB, 0xA169, 0xC8CD, 0xA16A, 0xC8CE, 0xA16B, 0xC8CF, 0xA16C, 0xC8D0, 0xA16D, 0xC8D1, 0xA16E, 0xC8D2,
- 0xA16F, 0xC8D3, 0xA170, 0xC8D6, 0xA171, 0xC8D8, 0xA172, 0xC8DA, 0xA173, 0xC8DB, 0xA174, 0xC8DC, 0xA175, 0xC8DD, 0xA176, 0xC8DE,
- 0xA177, 0xC8DF, 0xA178, 0xC8E2, 0xA179, 0xC8E3, 0xA17A, 0xC8E5, 0xA181, 0xC8E6, 0xA182, 0xC8E7, 0xA183, 0xC8E8, 0xA184, 0xC8E9,
- 0xA185, 0xC8EA, 0xA186, 0xC8EB, 0xA187, 0xC8EC, 0xA188, 0xC8ED, 0xA189, 0xC8EE, 0xA18A, 0xC8EF, 0xA18B, 0xC8F0, 0xA18C, 0xC8F1,
- 0xA18D, 0xC8F2, 0xA18E, 0xC8F3, 0xA18F, 0xC8F4, 0xA190, 0xC8F6, 0xA191, 0xC8F7, 0xA192, 0xC8F8, 0xA193, 0xC8F9, 0xA194, 0xC8FA,
- 0xA195, 0xC8FB, 0xA196, 0xC8FE, 0xA197, 0xC8FF, 0xA198, 0xC901, 0xA199, 0xC902, 0xA19A, 0xC903, 0xA19B, 0xC907, 0xA19C, 0xC908,
- 0xA19D, 0xC909, 0xA19E, 0xC90A, 0xA19F, 0xC90B, 0xA1A0, 0xC90E, 0xA1A1, 0x3000, 0xA1A2, 0x3001, 0xA1A3, 0x3002, 0xA1A4, 0x00B7,
- 0xA1A5, 0x2025, 0xA1A6, 0x2026, 0xA1A7, 0x00A8, 0xA1A8, 0x3003, 0xA1A9, 0x00AD, 0xA1AA, 0x2015, 0xA1AB, 0x2225, 0xA1AC, 0xFF3C,
- 0xA1AD, 0x223C, 0xA1AE, 0x2018, 0xA1AF, 0x2019, 0xA1B0, 0x201C, 0xA1B1, 0x201D, 0xA1B2, 0x3014, 0xA1B3, 0x3015, 0xA1B4, 0x3008,
- 0xA1B5, 0x3009, 0xA1B6, 0x300A, 0xA1B7, 0x300B, 0xA1B8, 0x300C, 0xA1B9, 0x300D, 0xA1BA, 0x300E, 0xA1BB, 0x300F, 0xA1BC, 0x3010,
- 0xA1BD, 0x3011, 0xA1BE, 0x00B1, 0xA1BF, 0x00D7, 0xA1C0, 0x00F7, 0xA1C1, 0x2260, 0xA1C2, 0x2264, 0xA1C3, 0x2265, 0xA1C4, 0x221E,
- 0xA1C5, 0x2234, 0xA1C6, 0x00B0, 0xA1C7, 0x2032, 0xA1C8, 0x2033, 0xA1C9, 0x2103, 0xA1CA, 0x212B, 0xA1CB, 0xFFE0, 0xA1CC, 0xFFE1,
- 0xA1CD, 0xFFE5, 0xA1CE, 0x2642, 0xA1CF, 0x2640, 0xA1D0, 0x2220, 0xA1D1, 0x22A5, 0xA1D2, 0x2312, 0xA1D3, 0x2202, 0xA1D4, 0x2207,
- 0xA1D5, 0x2261, 0xA1D6, 0x2252, 0xA1D7, 0x00A7, 0xA1D8, 0x203B, 0xA1D9, 0x2606, 0xA1DA, 0x2605, 0xA1DB, 0x25CB, 0xA1DC, 0x25CF,
- 0xA1DD, 0x25CE, 0xA1DE, 0x25C7, 0xA1DF, 0x25C6, 0xA1E0, 0x25A1, 0xA1E1, 0x25A0, 0xA1E2, 0x25B3, 0xA1E3, 0x25B2, 0xA1E4, 0x25BD,
- 0xA1E5, 0x25BC, 0xA1E6, 0x2192, 0xA1E7, 0x2190, 0xA1E8, 0x2191, 0xA1E9, 0x2193, 0xA1EA, 0x2194, 0xA1EB, 0x3013, 0xA1EC, 0x226A,
- 0xA1ED, 0x226B, 0xA1EE, 0x221A, 0xA1EF, 0x223D, 0xA1F0, 0x221D, 0xA1F1, 0x2235, 0xA1F2, 0x222B, 0xA1F3, 0x222C, 0xA1F4, 0x2208,
- 0xA1F5, 0x220B, 0xA1F6, 0x2286, 0xA1F7, 0x2287, 0xA1F8, 0x2282, 0xA1F9, 0x2283, 0xA1FA, 0x222A, 0xA1FB, 0x2229, 0xA1FC, 0x2227,
- 0xA1FD, 0x2228, 0xA1FE, 0xFFE2, 0xA241, 0xC910, 0xA242, 0xC912, 0xA243, 0xC913, 0xA244, 0xC914, 0xA245, 0xC915, 0xA246, 0xC916,
- 0xA247, 0xC917, 0xA248, 0xC919, 0xA249, 0xC91A, 0xA24A, 0xC91B, 0xA24B, 0xC91C, 0xA24C, 0xC91D, 0xA24D, 0xC91E, 0xA24E, 0xC91F,
- 0xA24F, 0xC920, 0xA250, 0xC921, 0xA251, 0xC922, 0xA252, 0xC923, 0xA253, 0xC924, 0xA254, 0xC925, 0xA255, 0xC926, 0xA256, 0xC927,
- 0xA257, 0xC928, 0xA258, 0xC929, 0xA259, 0xC92A, 0xA25A, 0xC92B, 0xA261, 0xC92D, 0xA262, 0xC92E, 0xA263, 0xC92F, 0xA264, 0xC930,
- 0xA265, 0xC931, 0xA266, 0xC932, 0xA267, 0xC933, 0xA268, 0xC935, 0xA269, 0xC936, 0xA26A, 0xC937, 0xA26B, 0xC938, 0xA26C, 0xC939,
- 0xA26D, 0xC93A, 0xA26E, 0xC93B, 0xA26F, 0xC93C, 0xA270, 0xC93D, 0xA271, 0xC93E, 0xA272, 0xC93F, 0xA273, 0xC940, 0xA274, 0xC941,
- 0xA275, 0xC942, 0xA276, 0xC943, 0xA277, 0xC944, 0xA278, 0xC945, 0xA279, 0xC946, 0xA27A, 0xC947, 0xA281, 0xC948, 0xA282, 0xC949,
- 0xA283, 0xC94A, 0xA284, 0xC94B, 0xA285, 0xC94C, 0xA286, 0xC94D, 0xA287, 0xC94E, 0xA288, 0xC94F, 0xA289, 0xC952, 0xA28A, 0xC953,
- 0xA28B, 0xC955, 0xA28C, 0xC956, 0xA28D, 0xC957, 0xA28E, 0xC959, 0xA28F, 0xC95A, 0xA290, 0xC95B, 0xA291, 0xC95C, 0xA292, 0xC95D,
- 0xA293, 0xC95E, 0xA294, 0xC95F, 0xA295, 0xC962, 0xA296, 0xC964, 0xA297, 0xC965, 0xA298, 0xC966, 0xA299, 0xC967, 0xA29A, 0xC968,
- 0xA29B, 0xC969, 0xA29C, 0xC96A, 0xA29D, 0xC96B, 0xA29E, 0xC96D, 0xA29F, 0xC96E, 0xA2A0, 0xC96F, 0xA2A1, 0x21D2, 0xA2A2, 0x21D4,
- 0xA2A3, 0x2200, 0xA2A4, 0x2203, 0xA2A5, 0x00B4, 0xA2A6, 0xFF5E, 0xA2A7, 0x02C7, 0xA2A8, 0x02D8, 0xA2A9, 0x02DD, 0xA2AA, 0x02DA,
- 0xA2AB, 0x02D9, 0xA2AC, 0x00B8, 0xA2AD, 0x02DB, 0xA2AE, 0x00A1, 0xA2AF, 0x00BF, 0xA2B0, 0x02D0, 0xA2B1, 0x222E, 0xA2B2, 0x2211,
- 0xA2B3, 0x220F, 0xA2B4, 0x00A4, 0xA2B5, 0x2109, 0xA2B6, 0x2030, 0xA2B7, 0x25C1, 0xA2B8, 0x25C0, 0xA2B9, 0x25B7, 0xA2BA, 0x25B6,
- 0xA2BB, 0x2664, 0xA2BC, 0x2660, 0xA2BD, 0x2661, 0xA2BE, 0x2665, 0xA2BF, 0x2667, 0xA2C0, 0x2663, 0xA2C1, 0x2299, 0xA2C2, 0x25C8,
- 0xA2C3, 0x25A3, 0xA2C4, 0x25D0, 0xA2C5, 0x25D1, 0xA2C6, 0x2592, 0xA2C7, 0x25A4, 0xA2C8, 0x25A5, 0xA2C9, 0x25A8, 0xA2CA, 0x25A7,
- 0xA2CB, 0x25A6, 0xA2CC, 0x25A9, 0xA2CD, 0x2668, 0xA2CE, 0x260F, 0xA2CF, 0x260E, 0xA2D0, 0x261C, 0xA2D1, 0x261E, 0xA2D2, 0x00B6,
- 0xA2D3, 0x2020, 0xA2D4, 0x2021, 0xA2D5, 0x2195, 0xA2D6, 0x2197, 0xA2D7, 0x2199, 0xA2D8, 0x2196, 0xA2D9, 0x2198, 0xA2DA, 0x266D,
- 0xA2DB, 0x2669, 0xA2DC, 0x266A, 0xA2DD, 0x266C, 0xA2DE, 0x327F, 0xA2DF, 0x321C, 0xA2E0, 0x2116, 0xA2E1, 0x33C7, 0xA2E2, 0x2122,
- 0xA2E3, 0x33C2, 0xA2E4, 0x33D8, 0xA2E5, 0x2121, 0xA2E6, 0x20AC, 0xA2E7, 0x00AE, 0xA341, 0xC971, 0xA342, 0xC972, 0xA343, 0xC973,
- 0xA344, 0xC975, 0xA345, 0xC976, 0xA346, 0xC977, 0xA347, 0xC978, 0xA348, 0xC979, 0xA349, 0xC97A, 0xA34A, 0xC97B, 0xA34B, 0xC97D,
- 0xA34C, 0xC97E, 0xA34D, 0xC97F, 0xA34E, 0xC980, 0xA34F, 0xC981, 0xA350, 0xC982, 0xA351, 0xC983, 0xA352, 0xC984, 0xA353, 0xC985,
- 0xA354, 0xC986, 0xA355, 0xC987, 0xA356, 0xC98A, 0xA357, 0xC98B, 0xA358, 0xC98D, 0xA359, 0xC98E, 0xA35A, 0xC98F, 0xA361, 0xC991,
- 0xA362, 0xC992, 0xA363, 0xC993, 0xA364, 0xC994, 0xA365, 0xC995, 0xA366, 0xC996, 0xA367, 0xC997, 0xA368, 0xC99A, 0xA369, 0xC99C,
- 0xA36A, 0xC99E, 0xA36B, 0xC99F, 0xA36C, 0xC9A0, 0xA36D, 0xC9A1, 0xA36E, 0xC9A2, 0xA36F, 0xC9A3, 0xA370, 0xC9A4, 0xA371, 0xC9A5,
- 0xA372, 0xC9A6, 0xA373, 0xC9A7, 0xA374, 0xC9A8, 0xA375, 0xC9A9, 0xA376, 0xC9AA, 0xA377, 0xC9AB, 0xA378, 0xC9AC, 0xA379, 0xC9AD,
- 0xA37A, 0xC9AE, 0xA381, 0xC9AF, 0xA382, 0xC9B0, 0xA383, 0xC9B1, 0xA384, 0xC9B2, 0xA385, 0xC9B3, 0xA386, 0xC9B4, 0xA387, 0xC9B5,
- 0xA388, 0xC9B6, 0xA389, 0xC9B7, 0xA38A, 0xC9B8, 0xA38B, 0xC9B9, 0xA38C, 0xC9BA, 0xA38D, 0xC9BB, 0xA38E, 0xC9BC, 0xA38F, 0xC9BD,
- 0xA390, 0xC9BE, 0xA391, 0xC9BF, 0xA392, 0xC9C2, 0xA393, 0xC9C3, 0xA394, 0xC9C5, 0xA395, 0xC9C6, 0xA396, 0xC9C9, 0xA397, 0xC9CB,
- 0xA398, 0xC9CC, 0xA399, 0xC9CD, 0xA39A, 0xC9CE, 0xA39B, 0xC9CF, 0xA39C, 0xC9D2, 0xA39D, 0xC9D4, 0xA39E, 0xC9D7, 0xA39F, 0xC9D8,
- 0xA3A0, 0xC9DB, 0xA3A1, 0xFF01, 0xA3A2, 0xFF02, 0xA3A3, 0xFF03, 0xA3A4, 0xFF04, 0xA3A5, 0xFF05, 0xA3A6, 0xFF06, 0xA3A7, 0xFF07,
- 0xA3A8, 0xFF08, 0xA3A9, 0xFF09, 0xA3AA, 0xFF0A, 0xA3AB, 0xFF0B, 0xA3AC, 0xFF0C, 0xA3AD, 0xFF0D, 0xA3AE, 0xFF0E, 0xA3AF, 0xFF0F,
- 0xA3B0, 0xFF10, 0xA3B1, 0xFF11, 0xA3B2, 0xFF12, 0xA3B3, 0xFF13, 0xA3B4, 0xFF14, 0xA3B5, 0xFF15, 0xA3B6, 0xFF16, 0xA3B7, 0xFF17,
- 0xA3B8, 0xFF18, 0xA3B9, 0xFF19, 0xA3BA, 0xFF1A, 0xA3BB, 0xFF1B, 0xA3BC, 0xFF1C, 0xA3BD, 0xFF1D, 0xA3BE, 0xFF1E, 0xA3BF, 0xFF1F,
- 0xA3C0, 0xFF20, 0xA3C1, 0xFF21, 0xA3C2, 0xFF22, 0xA3C3, 0xFF23, 0xA3C4, 0xFF24, 0xA3C5, 0xFF25, 0xA3C6, 0xFF26, 0xA3C7, 0xFF27,
- 0xA3C8, 0xFF28, 0xA3C9, 0xFF29, 0xA3CA, 0xFF2A, 0xA3CB, 0xFF2B, 0xA3CC, 0xFF2C, 0xA3CD, 0xFF2D, 0xA3CE, 0xFF2E, 0xA3CF, 0xFF2F,
- 0xA3D0, 0xFF30, 0xA3D1, 0xFF31, 0xA3D2, 0xFF32, 0xA3D3, 0xFF33, 0xA3D4, 0xFF34, 0xA3D5, 0xFF35, 0xA3D6, 0xFF36, 0xA3D7, 0xFF37,
- 0xA3D8, 0xFF38, 0xA3D9, 0xFF39, 0xA3DA, 0xFF3A, 0xA3DB, 0xFF3B, 0xA3DC, 0xFFE6, 0xA3DD, 0xFF3D, 0xA3DE, 0xFF3E, 0xA3DF, 0xFF3F,
- 0xA3E0, 0xFF40, 0xA3E1, 0xFF41, 0xA3E2, 0xFF42, 0xA3E3, 0xFF43, 0xA3E4, 0xFF44, 0xA3E5, 0xFF45, 0xA3E6, 0xFF46, 0xA3E7, 0xFF47,
- 0xA3E8, 0xFF48, 0xA3E9, 0xFF49, 0xA3EA, 0xFF4A, 0xA3EB, 0xFF4B, 0xA3EC, 0xFF4C, 0xA3ED, 0xFF4D, 0xA3EE, 0xFF4E, 0xA3EF, 0xFF4F,
- 0xA3F0, 0xFF50, 0xA3F1, 0xFF51, 0xA3F2, 0xFF52, 0xA3F3, 0xFF53, 0xA3F4, 0xFF54, 0xA3F5, 0xFF55, 0xA3F6, 0xFF56, 0xA3F7, 0xFF57,
- 0xA3F8, 0xFF58, 0xA3F9, 0xFF59, 0xA3FA, 0xFF5A, 0xA3FB, 0xFF5B, 0xA3FC, 0xFF5C, 0xA3FD, 0xFF5D, 0xA3FE, 0xFFE3, 0xA441, 0xC9DE,
- 0xA442, 0xC9DF, 0xA443, 0xC9E1, 0xA444, 0xC9E3, 0xA445, 0xC9E5, 0xA446, 0xC9E6, 0xA447, 0xC9E8, 0xA448, 0xC9E9, 0xA449, 0xC9EA,
- 0xA44A, 0xC9EB, 0xA44B, 0xC9EE, 0xA44C, 0xC9F2, 0xA44D, 0xC9F3, 0xA44E, 0xC9F4, 0xA44F, 0xC9F5, 0xA450, 0xC9F6, 0xA451, 0xC9F7,
- 0xA452, 0xC9FA, 0xA453, 0xC9FB, 0xA454, 0xC9FD, 0xA455, 0xC9FE, 0xA456, 0xC9FF, 0xA457, 0xCA01, 0xA458, 0xCA02, 0xA459, 0xCA03,
- 0xA45A, 0xCA04, 0xA461, 0xCA05, 0xA462, 0xCA06, 0xA463, 0xCA07, 0xA464, 0xCA0A, 0xA465, 0xCA0E, 0xA466, 0xCA0F, 0xA467, 0xCA10,
- 0xA468, 0xCA11, 0xA469, 0xCA12, 0xA46A, 0xCA13, 0xA46B, 0xCA15, 0xA46C, 0xCA16, 0xA46D, 0xCA17, 0xA46E, 0xCA19, 0xA46F, 0xCA1A,
- 0xA470, 0xCA1B, 0xA471, 0xCA1C, 0xA472, 0xCA1D, 0xA473, 0xCA1E, 0xA474, 0xCA1F, 0xA475, 0xCA20, 0xA476, 0xCA21, 0xA477, 0xCA22,
- 0xA478, 0xCA23, 0xA479, 0xCA24, 0xA47A, 0xCA25, 0xA481, 0xCA26, 0xA482, 0xCA27, 0xA483, 0xCA28, 0xA484, 0xCA2A, 0xA485, 0xCA2B,
- 0xA486, 0xCA2C, 0xA487, 0xCA2D, 0xA488, 0xCA2E, 0xA489, 0xCA2F, 0xA48A, 0xCA30, 0xA48B, 0xCA31, 0xA48C, 0xCA32, 0xA48D, 0xCA33,
- 0xA48E, 0xCA34, 0xA48F, 0xCA35, 0xA490, 0xCA36, 0xA491, 0xCA37, 0xA492, 0xCA38, 0xA493, 0xCA39, 0xA494, 0xCA3A, 0xA495, 0xCA3B,
- 0xA496, 0xCA3C, 0xA497, 0xCA3D, 0xA498, 0xCA3E, 0xA499, 0xCA3F, 0xA49A, 0xCA40, 0xA49B, 0xCA41, 0xA49C, 0xCA42, 0xA49D, 0xCA43,
- 0xA49E, 0xCA44, 0xA49F, 0xCA45, 0xA4A0, 0xCA46, 0xA4A1, 0x3131, 0xA4A2, 0x3132, 0xA4A3, 0x3133, 0xA4A4, 0x3134, 0xA4A5, 0x3135,
- 0xA4A6, 0x3136, 0xA4A7, 0x3137, 0xA4A8, 0x3138, 0xA4A9, 0x3139, 0xA4AA, 0x313A, 0xA4AB, 0x313B, 0xA4AC, 0x313C, 0xA4AD, 0x313D,
- 0xA4AE, 0x313E, 0xA4AF, 0x313F, 0xA4B0, 0x3140, 0xA4B1, 0x3141, 0xA4B2, 0x3142, 0xA4B3, 0x3143, 0xA4B4, 0x3144, 0xA4B5, 0x3145,
- 0xA4B6, 0x3146, 0xA4B7, 0x3147, 0xA4B8, 0x3148, 0xA4B9, 0x3149, 0xA4BA, 0x314A, 0xA4BB, 0x314B, 0xA4BC, 0x314C, 0xA4BD, 0x314D,
- 0xA4BE, 0x314E, 0xA4BF, 0x314F, 0xA4C0, 0x3150, 0xA4C1, 0x3151, 0xA4C2, 0x3152, 0xA4C3, 0x3153, 0xA4C4, 0x3154, 0xA4C5, 0x3155,
- 0xA4C6, 0x3156, 0xA4C7, 0x3157, 0xA4C8, 0x3158, 0xA4C9, 0x3159, 0xA4CA, 0x315A, 0xA4CB, 0x315B, 0xA4CC, 0x315C, 0xA4CD, 0x315D,
- 0xA4CE, 0x315E, 0xA4CF, 0x315F, 0xA4D0, 0x3160, 0xA4D1, 0x3161, 0xA4D2, 0x3162, 0xA4D3, 0x3163, 0xA4D4, 0x3164, 0xA4D5, 0x3165,
- 0xA4D6, 0x3166, 0xA4D7, 0x3167, 0xA4D8, 0x3168, 0xA4D9, 0x3169, 0xA4DA, 0x316A, 0xA4DB, 0x316B, 0xA4DC, 0x316C, 0xA4DD, 0x316D,
- 0xA4DE, 0x316E, 0xA4DF, 0x316F, 0xA4E0, 0x3170, 0xA4E1, 0x3171, 0xA4E2, 0x3172, 0xA4E3, 0x3173, 0xA4E4, 0x3174, 0xA4E5, 0x3175,
- 0xA4E6, 0x3176, 0xA4E7, 0x3177, 0xA4E8, 0x3178, 0xA4E9, 0x3179, 0xA4EA, 0x317A, 0xA4EB, 0x317B, 0xA4EC, 0x317C, 0xA4ED, 0x317D,
- 0xA4EE, 0x317E, 0xA4EF, 0x317F, 0xA4F0, 0x3180, 0xA4F1, 0x3181, 0xA4F2, 0x3182, 0xA4F3, 0x3183, 0xA4F4, 0x3184, 0xA4F5, 0x3185,
- 0xA4F6, 0x3186, 0xA4F7, 0x3187, 0xA4F8, 0x3188, 0xA4F9, 0x3189, 0xA4FA, 0x318A, 0xA4FB, 0x318B, 0xA4FC, 0x318C, 0xA4FD, 0x318D,
- 0xA4FE, 0x318E, 0xA541, 0xCA47, 0xA542, 0xCA48, 0xA543, 0xCA49, 0xA544, 0xCA4A, 0xA545, 0xCA4B, 0xA546, 0xCA4E, 0xA547, 0xCA4F,
- 0xA548, 0xCA51, 0xA549, 0xCA52, 0xA54A, 0xCA53, 0xA54B, 0xCA55, 0xA54C, 0xCA56, 0xA54D, 0xCA57, 0xA54E, 0xCA58, 0xA54F, 0xCA59,
- 0xA550, 0xCA5A, 0xA551, 0xCA5B, 0xA552, 0xCA5E, 0xA553, 0xCA62, 0xA554, 0xCA63, 0xA555, 0xCA64, 0xA556, 0xCA65, 0xA557, 0xCA66,
- 0xA558, 0xCA67, 0xA559, 0xCA69, 0xA55A, 0xCA6A, 0xA561, 0xCA6B, 0xA562, 0xCA6C, 0xA563, 0xCA6D, 0xA564, 0xCA6E, 0xA565, 0xCA6F,
- 0xA566, 0xCA70, 0xA567, 0xCA71, 0xA568, 0xCA72, 0xA569, 0xCA73, 0xA56A, 0xCA74, 0xA56B, 0xCA75, 0xA56C, 0xCA76, 0xA56D, 0xCA77,
- 0xA56E, 0xCA78, 0xA56F, 0xCA79, 0xA570, 0xCA7A, 0xA571, 0xCA7B, 0xA572, 0xCA7C, 0xA573, 0xCA7E, 0xA574, 0xCA7F, 0xA575, 0xCA80,
- 0xA576, 0xCA81, 0xA577, 0xCA82, 0xA578, 0xCA83, 0xA579, 0xCA85, 0xA57A, 0xCA86, 0xA581, 0xCA87, 0xA582, 0xCA88, 0xA583, 0xCA89,
- 0xA584, 0xCA8A, 0xA585, 0xCA8B, 0xA586, 0xCA8C, 0xA587, 0xCA8D, 0xA588, 0xCA8E, 0xA589, 0xCA8F, 0xA58A, 0xCA90, 0xA58B, 0xCA91,
- 0xA58C, 0xCA92, 0xA58D, 0xCA93, 0xA58E, 0xCA94, 0xA58F, 0xCA95, 0xA590, 0xCA96, 0xA591, 0xCA97, 0xA592, 0xCA99, 0xA593, 0xCA9A,
- 0xA594, 0xCA9B, 0xA595, 0xCA9C, 0xA596, 0xCA9D, 0xA597, 0xCA9E, 0xA598, 0xCA9F, 0xA599, 0xCAA0, 0xA59A, 0xCAA1, 0xA59B, 0xCAA2,
- 0xA59C, 0xCAA3, 0xA59D, 0xCAA4, 0xA59E, 0xCAA5, 0xA59F, 0xCAA6, 0xA5A0, 0xCAA7, 0xA5A1, 0x2170, 0xA5A2, 0x2171, 0xA5A3, 0x2172,
- 0xA5A4, 0x2173, 0xA5A5, 0x2174, 0xA5A6, 0x2175, 0xA5A7, 0x2176, 0xA5A8, 0x2177, 0xA5A9, 0x2178, 0xA5AA, 0x2179, 0xA5B0, 0x2160,
- 0xA5B1, 0x2161, 0xA5B2, 0x2162, 0xA5B3, 0x2163, 0xA5B4, 0x2164, 0xA5B5, 0x2165, 0xA5B6, 0x2166, 0xA5B7, 0x2167, 0xA5B8, 0x2168,
- 0xA5B9, 0x2169, 0xA5C1, 0x0391, 0xA5C2, 0x0392, 0xA5C3, 0x0393, 0xA5C4, 0x0394, 0xA5C5, 0x0395, 0xA5C6, 0x0396, 0xA5C7, 0x0397,
- 0xA5C8, 0x0398, 0xA5C9, 0x0399, 0xA5CA, 0x039A, 0xA5CB, 0x039B, 0xA5CC, 0x039C, 0xA5CD, 0x039D, 0xA5CE, 0x039E, 0xA5CF, 0x039F,
- 0xA5D0, 0x03A0, 0xA5D1, 0x03A1, 0xA5D2, 0x03A3, 0xA5D3, 0x03A4, 0xA5D4, 0x03A5, 0xA5D5, 0x03A6, 0xA5D6, 0x03A7, 0xA5D7, 0x03A8,
- 0xA5D8, 0x03A9, 0xA5E1, 0x03B1, 0xA5E2, 0x03B2, 0xA5E3, 0x03B3, 0xA5E4, 0x03B4, 0xA5E5, 0x03B5, 0xA5E6, 0x03B6, 0xA5E7, 0x03B7,
- 0xA5E8, 0x03B8, 0xA5E9, 0x03B9, 0xA5EA, 0x03BA, 0xA5EB, 0x03BB, 0xA5EC, 0x03BC, 0xA5ED, 0x03BD, 0xA5EE, 0x03BE, 0xA5EF, 0x03BF,
- 0xA5F0, 0x03C0, 0xA5F1, 0x03C1, 0xA5F2, 0x03C3, 0xA5F3, 0x03C4, 0xA5F4, 0x03C5, 0xA5F5, 0x03C6, 0xA5F6, 0x03C7, 0xA5F7, 0x03C8,
- 0xA5F8, 0x03C9, 0xA641, 0xCAA8, 0xA642, 0xCAA9, 0xA643, 0xCAAA, 0xA644, 0xCAAB, 0xA645, 0xCAAC, 0xA646, 0xCAAD, 0xA647, 0xCAAE,
- 0xA648, 0xCAAF, 0xA649, 0xCAB0, 0xA64A, 0xCAB1, 0xA64B, 0xCAB2, 0xA64C, 0xCAB3, 0xA64D, 0xCAB4, 0xA64E, 0xCAB5, 0xA64F, 0xCAB6,
- 0xA650, 0xCAB7, 0xA651, 0xCAB8, 0xA652, 0xCAB9, 0xA653, 0xCABA, 0xA654, 0xCABB, 0xA655, 0xCABE, 0xA656, 0xCABF, 0xA657, 0xCAC1,
- 0xA658, 0xCAC2, 0xA659, 0xCAC3, 0xA65A, 0xCAC5, 0xA661, 0xCAC6, 0xA662, 0xCAC7, 0xA663, 0xCAC8, 0xA664, 0xCAC9, 0xA665, 0xCACA,
- 0xA666, 0xCACB, 0xA667, 0xCACE, 0xA668, 0xCAD0, 0xA669, 0xCAD2, 0xA66A, 0xCAD4, 0xA66B, 0xCAD5, 0xA66C, 0xCAD6, 0xA66D, 0xCAD7,
- 0xA66E, 0xCADA, 0xA66F, 0xCADB, 0xA670, 0xCADC, 0xA671, 0xCADD, 0xA672, 0xCADE, 0xA673, 0xCADF, 0xA674, 0xCAE1, 0xA675, 0xCAE2,
- 0xA676, 0xCAE3, 0xA677, 0xCAE4, 0xA678, 0xCAE5, 0xA679, 0xCAE6, 0xA67A, 0xCAE7, 0xA681, 0xCAE8, 0xA682, 0xCAE9, 0xA683, 0xCAEA,
- 0xA684, 0xCAEB, 0xA685, 0xCAED, 0xA686, 0xCAEE, 0xA687, 0xCAEF, 0xA688, 0xCAF0, 0xA689, 0xCAF1, 0xA68A, 0xCAF2, 0xA68B, 0xCAF3,
- 0xA68C, 0xCAF5, 0xA68D, 0xCAF6, 0xA68E, 0xCAF7, 0xA68F, 0xCAF8, 0xA690, 0xCAF9, 0xA691, 0xCAFA, 0xA692, 0xCAFB, 0xA693, 0xCAFC,
- 0xA694, 0xCAFD, 0xA695, 0xCAFE, 0xA696, 0xCAFF, 0xA697, 0xCB00, 0xA698, 0xCB01, 0xA699, 0xCB02, 0xA69A, 0xCB03, 0xA69B, 0xCB04,
- 0xA69C, 0xCB05, 0xA69D, 0xCB06, 0xA69E, 0xCB07, 0xA69F, 0xCB09, 0xA6A0, 0xCB0A, 0xA6A1, 0x2500, 0xA6A2, 0x2502, 0xA6A3, 0x250C,
- 0xA6A4, 0x2510, 0xA6A5, 0x2518, 0xA6A6, 0x2514, 0xA6A7, 0x251C, 0xA6A8, 0x252C, 0xA6A9, 0x2524, 0xA6AA, 0x2534, 0xA6AB, 0x253C,
- 0xA6AC, 0x2501, 0xA6AD, 0x2503, 0xA6AE, 0x250F, 0xA6AF, 0x2513, 0xA6B0, 0x251B, 0xA6B1, 0x2517, 0xA6B2, 0x2523, 0xA6B3, 0x2533,
- 0xA6B4, 0x252B, 0xA6B5, 0x253B, 0xA6B6, 0x254B, 0xA6B7, 0x2520, 0xA6B8, 0x252F, 0xA6B9, 0x2528, 0xA6BA, 0x2537, 0xA6BB, 0x253F,
- 0xA6BC, 0x251D, 0xA6BD, 0x2530, 0xA6BE, 0x2525, 0xA6BF, 0x2538, 0xA6C0, 0x2542, 0xA6C1, 0x2512, 0xA6C2, 0x2511, 0xA6C3, 0x251A,
- 0xA6C4, 0x2519, 0xA6C5, 0x2516, 0xA6C6, 0x2515, 0xA6C7, 0x250E, 0xA6C8, 0x250D, 0xA6C9, 0x251E, 0xA6CA, 0x251F, 0xA6CB, 0x2521,
- 0xA6CC, 0x2522, 0xA6CD, 0x2526, 0xA6CE, 0x2527, 0xA6CF, 0x2529, 0xA6D0, 0x252A, 0xA6D1, 0x252D, 0xA6D2, 0x252E, 0xA6D3, 0x2531,
- 0xA6D4, 0x2532, 0xA6D5, 0x2535, 0xA6D6, 0x2536, 0xA6D7, 0x2539, 0xA6D8, 0x253A, 0xA6D9, 0x253D, 0xA6DA, 0x253E, 0xA6DB, 0x2540,
- 0xA6DC, 0x2541, 0xA6DD, 0x2543, 0xA6DE, 0x2544, 0xA6DF, 0x2545, 0xA6E0, 0x2546, 0xA6E1, 0x2547, 0xA6E2, 0x2548, 0xA6E3, 0x2549,
- 0xA6E4, 0x254A, 0xA741, 0xCB0B, 0xA742, 0xCB0C, 0xA743, 0xCB0D, 0xA744, 0xCB0E, 0xA745, 0xCB0F, 0xA746, 0xCB11, 0xA747, 0xCB12,
- 0xA748, 0xCB13, 0xA749, 0xCB15, 0xA74A, 0xCB16, 0xA74B, 0xCB17, 0xA74C, 0xCB19, 0xA74D, 0xCB1A, 0xA74E, 0xCB1B, 0xA74F, 0xCB1C,
- 0xA750, 0xCB1D, 0xA751, 0xCB1E, 0xA752, 0xCB1F, 0xA753, 0xCB22, 0xA754, 0xCB23, 0xA755, 0xCB24, 0xA756, 0xCB25, 0xA757, 0xCB26,
- 0xA758, 0xCB27, 0xA759, 0xCB28, 0xA75A, 0xCB29, 0xA761, 0xCB2A, 0xA762, 0xCB2B, 0xA763, 0xCB2C, 0xA764, 0xCB2D, 0xA765, 0xCB2E,
- 0xA766, 0xCB2F, 0xA767, 0xCB30, 0xA768, 0xCB31, 0xA769, 0xCB32, 0xA76A, 0xCB33, 0xA76B, 0xCB34, 0xA76C, 0xCB35, 0xA76D, 0xCB36,
- 0xA76E, 0xCB37, 0xA76F, 0xCB38, 0xA770, 0xCB39, 0xA771, 0xCB3A, 0xA772, 0xCB3B, 0xA773, 0xCB3C, 0xA774, 0xCB3D, 0xA775, 0xCB3E,
- 0xA776, 0xCB3F, 0xA777, 0xCB40, 0xA778, 0xCB42, 0xA779, 0xCB43, 0xA77A, 0xCB44, 0xA781, 0xCB45, 0xA782, 0xCB46, 0xA783, 0xCB47,
- 0xA784, 0xCB4A, 0xA785, 0xCB4B, 0xA786, 0xCB4D, 0xA787, 0xCB4E, 0xA788, 0xCB4F, 0xA789, 0xCB51, 0xA78A, 0xCB52, 0xA78B, 0xCB53,
- 0xA78C, 0xCB54, 0xA78D, 0xCB55, 0xA78E, 0xCB56, 0xA78F, 0xCB57, 0xA790, 0xCB5A, 0xA791, 0xCB5B, 0xA792, 0xCB5C, 0xA793, 0xCB5E,
- 0xA794, 0xCB5F, 0xA795, 0xCB60, 0xA796, 0xCB61, 0xA797, 0xCB62, 0xA798, 0xCB63, 0xA799, 0xCB65, 0xA79A, 0xCB66, 0xA79B, 0xCB67,
- 0xA79C, 0xCB68, 0xA79D, 0xCB69, 0xA79E, 0xCB6A, 0xA79F, 0xCB6B, 0xA7A0, 0xCB6C, 0xA7A1, 0x3395, 0xA7A2, 0x3396, 0xA7A3, 0x3397,
- 0xA7A4, 0x2113, 0xA7A5, 0x3398, 0xA7A6, 0x33C4, 0xA7A7, 0x33A3, 0xA7A8, 0x33A4, 0xA7A9, 0x33A5, 0xA7AA, 0x33A6, 0xA7AB, 0x3399,
- 0xA7AC, 0x339A, 0xA7AD, 0x339B, 0xA7AE, 0x339C, 0xA7AF, 0x339D, 0xA7B0, 0x339E, 0xA7B1, 0x339F, 0xA7B2, 0x33A0, 0xA7B3, 0x33A1,
- 0xA7B4, 0x33A2, 0xA7B5, 0x33CA, 0xA7B6, 0x338D, 0xA7B7, 0x338E, 0xA7B8, 0x338F, 0xA7B9, 0x33CF, 0xA7BA, 0x3388, 0xA7BB, 0x3389,
- 0xA7BC, 0x33C8, 0xA7BD, 0x33A7, 0xA7BE, 0x33A8, 0xA7BF, 0x33B0, 0xA7C0, 0x33B1, 0xA7C1, 0x33B2, 0xA7C2, 0x33B3, 0xA7C3, 0x33B4,
- 0xA7C4, 0x33B5, 0xA7C5, 0x33B6, 0xA7C6, 0x33B7, 0xA7C7, 0x33B8, 0xA7C8, 0x33B9, 0xA7C9, 0x3380, 0xA7CA, 0x3381, 0xA7CB, 0x3382,
- 0xA7CC, 0x3383, 0xA7CD, 0x3384, 0xA7CE, 0x33BA, 0xA7CF, 0x33BB, 0xA7D0, 0x33BC, 0xA7D1, 0x33BD, 0xA7D2, 0x33BE, 0xA7D3, 0x33BF,
- 0xA7D4, 0x3390, 0xA7D5, 0x3391, 0xA7D6, 0x3392, 0xA7D7, 0x3393, 0xA7D8, 0x3394, 0xA7D9, 0x2126, 0xA7DA, 0x33C0, 0xA7DB, 0x33C1,
- 0xA7DC, 0x338A, 0xA7DD, 0x338B, 0xA7DE, 0x338C, 0xA7DF, 0x33D6, 0xA7E0, 0x33C5, 0xA7E1, 0x33AD, 0xA7E2, 0x33AE, 0xA7E3, 0x33AF,
- 0xA7E4, 0x33DB, 0xA7E5, 0x33A9, 0xA7E6, 0x33AA, 0xA7E7, 0x33AB, 0xA7E8, 0x33AC, 0xA7E9, 0x33DD, 0xA7EA, 0x33D0, 0xA7EB, 0x33D3,
- 0xA7EC, 0x33C3, 0xA7ED, 0x33C9, 0xA7EE, 0x33DC, 0xA7EF, 0x33C6, 0xA841, 0xCB6D, 0xA842, 0xCB6E, 0xA843, 0xCB6F, 0xA844, 0xCB70,
- 0xA845, 0xCB71, 0xA846, 0xCB72, 0xA847, 0xCB73, 0xA848, 0xCB74, 0xA849, 0xCB75, 0xA84A, 0xCB76, 0xA84B, 0xCB77, 0xA84C, 0xCB7A,
- 0xA84D, 0xCB7B, 0xA84E, 0xCB7C, 0xA84F, 0xCB7D, 0xA850, 0xCB7E, 0xA851, 0xCB7F, 0xA852, 0xCB80, 0xA853, 0xCB81, 0xA854, 0xCB82,
- 0xA855, 0xCB83, 0xA856, 0xCB84, 0xA857, 0xCB85, 0xA858, 0xCB86, 0xA859, 0xCB87, 0xA85A, 0xCB88, 0xA861, 0xCB89, 0xA862, 0xCB8A,
- 0xA863, 0xCB8B, 0xA864, 0xCB8C, 0xA865, 0xCB8D, 0xA866, 0xCB8E, 0xA867, 0xCB8F, 0xA868, 0xCB90, 0xA869, 0xCB91, 0xA86A, 0xCB92,
- 0xA86B, 0xCB93, 0xA86C, 0xCB94, 0xA86D, 0xCB95, 0xA86E, 0xCB96, 0xA86F, 0xCB97, 0xA870, 0xCB98, 0xA871, 0xCB99, 0xA872, 0xCB9A,
- 0xA873, 0xCB9B, 0xA874, 0xCB9D, 0xA875, 0xCB9E, 0xA876, 0xCB9F, 0xA877, 0xCBA0, 0xA878, 0xCBA1, 0xA879, 0xCBA2, 0xA87A, 0xCBA3,
- 0xA881, 0xCBA4, 0xA882, 0xCBA5, 0xA883, 0xCBA6, 0xA884, 0xCBA7, 0xA885, 0xCBA8, 0xA886, 0xCBA9, 0xA887, 0xCBAA, 0xA888, 0xCBAB,
- 0xA889, 0xCBAC, 0xA88A, 0xCBAD, 0xA88B, 0xCBAE, 0xA88C, 0xCBAF, 0xA88D, 0xCBB0, 0xA88E, 0xCBB1, 0xA88F, 0xCBB2, 0xA890, 0xCBB3,
- 0xA891, 0xCBB4, 0xA892, 0xCBB5, 0xA893, 0xCBB6, 0xA894, 0xCBB7, 0xA895, 0xCBB9, 0xA896, 0xCBBA, 0xA897, 0xCBBB, 0xA898, 0xCBBC,
- 0xA899, 0xCBBD, 0xA89A, 0xCBBE, 0xA89B, 0xCBBF, 0xA89C, 0xCBC0, 0xA89D, 0xCBC1, 0xA89E, 0xCBC2, 0xA89F, 0xCBC3, 0xA8A0, 0xCBC4,
- 0xA8A1, 0x00C6, 0xA8A2, 0x00D0, 0xA8A3, 0x00AA, 0xA8A4, 0x0126, 0xA8A6, 0x0132, 0xA8A8, 0x013F, 0xA8A9, 0x0141, 0xA8AA, 0x00D8,
- 0xA8AB, 0x0152, 0xA8AC, 0x00BA, 0xA8AD, 0x00DE, 0xA8AE, 0x0166, 0xA8AF, 0x014A, 0xA8B1, 0x3260, 0xA8B2, 0x3261, 0xA8B3, 0x3262,
- 0xA8B4, 0x3263, 0xA8B5, 0x3264, 0xA8B6, 0x3265, 0xA8B7, 0x3266, 0xA8B8, 0x3267, 0xA8B9, 0x3268, 0xA8BA, 0x3269, 0xA8BB, 0x326A,
- 0xA8BC, 0x326B, 0xA8BD, 0x326C, 0xA8BE, 0x326D, 0xA8BF, 0x326E, 0xA8C0, 0x326F, 0xA8C1, 0x3270, 0xA8C2, 0x3271, 0xA8C3, 0x3272,
- 0xA8C4, 0x3273, 0xA8C5, 0x3274, 0xA8C6, 0x3275, 0xA8C7, 0x3276, 0xA8C8, 0x3277, 0xA8C9, 0x3278, 0xA8CA, 0x3279, 0xA8CB, 0x327A,
- 0xA8CC, 0x327B, 0xA8CD, 0x24D0, 0xA8CE, 0x24D1, 0xA8CF, 0x24D2, 0xA8D0, 0x24D3, 0xA8D1, 0x24D4, 0xA8D2, 0x24D5, 0xA8D3, 0x24D6,
- 0xA8D4, 0x24D7, 0xA8D5, 0x24D8, 0xA8D6, 0x24D9, 0xA8D7, 0x24DA, 0xA8D8, 0x24DB, 0xA8D9, 0x24DC, 0xA8DA, 0x24DD, 0xA8DB, 0x24DE,
- 0xA8DC, 0x24DF, 0xA8DD, 0x24E0, 0xA8DE, 0x24E1, 0xA8DF, 0x24E2, 0xA8E0, 0x24E3, 0xA8E1, 0x24E4, 0xA8E2, 0x24E5, 0xA8E3, 0x24E6,
- 0xA8E4, 0x24E7, 0xA8E5, 0x24E8, 0xA8E6, 0x24E9, 0xA8E7, 0x2460, 0xA8E8, 0x2461, 0xA8E9, 0x2462, 0xA8EA, 0x2463, 0xA8EB, 0x2464,
- 0xA8EC, 0x2465, 0xA8ED, 0x2466, 0xA8EE, 0x2467, 0xA8EF, 0x2468, 0xA8F0, 0x2469, 0xA8F1, 0x246A, 0xA8F2, 0x246B, 0xA8F3, 0x246C,
- 0xA8F4, 0x246D, 0xA8F5, 0x246E, 0xA8F6, 0x00BD, 0xA8F7, 0x2153, 0xA8F8, 0x2154, 0xA8F9, 0x00BC, 0xA8FA, 0x00BE, 0xA8FB, 0x215B,
- 0xA8FC, 0x215C, 0xA8FD, 0x215D, 0xA8FE, 0x215E, 0xA941, 0xCBC5, 0xA942, 0xCBC6, 0xA943, 0xCBC7, 0xA944, 0xCBC8, 0xA945, 0xCBC9,
- 0xA946, 0xCBCA, 0xA947, 0xCBCB, 0xA948, 0xCBCC, 0xA949, 0xCBCD, 0xA94A, 0xCBCE, 0xA94B, 0xCBCF, 0xA94C, 0xCBD0, 0xA94D, 0xCBD1,
- 0xA94E, 0xCBD2, 0xA94F, 0xCBD3, 0xA950, 0xCBD5, 0xA951, 0xCBD6, 0xA952, 0xCBD7, 0xA953, 0xCBD8, 0xA954, 0xCBD9, 0xA955, 0xCBDA,
- 0xA956, 0xCBDB, 0xA957, 0xCBDC, 0xA958, 0xCBDD, 0xA959, 0xCBDE, 0xA95A, 0xCBDF, 0xA961, 0xCBE0, 0xA962, 0xCBE1, 0xA963, 0xCBE2,
- 0xA964, 0xCBE3, 0xA965, 0xCBE5, 0xA966, 0xCBE6, 0xA967, 0xCBE8, 0xA968, 0xCBEA, 0xA969, 0xCBEB, 0xA96A, 0xCBEC, 0xA96B, 0xCBED,
- 0xA96C, 0xCBEE, 0xA96D, 0xCBEF, 0xA96E, 0xCBF0, 0xA96F, 0xCBF1, 0xA970, 0xCBF2, 0xA971, 0xCBF3, 0xA972, 0xCBF4, 0xA973, 0xCBF5,
- 0xA974, 0xCBF6, 0xA975, 0xCBF7, 0xA976, 0xCBF8, 0xA977, 0xCBF9, 0xA978, 0xCBFA, 0xA979, 0xCBFB, 0xA97A, 0xCBFC, 0xA981, 0xCBFD,
- 0xA982, 0xCBFE, 0xA983, 0xCBFF, 0xA984, 0xCC00, 0xA985, 0xCC01, 0xA986, 0xCC02, 0xA987, 0xCC03, 0xA988, 0xCC04, 0xA989, 0xCC05,
- 0xA98A, 0xCC06, 0xA98B, 0xCC07, 0xA98C, 0xCC08, 0xA98D, 0xCC09, 0xA98E, 0xCC0A, 0xA98F, 0xCC0B, 0xA990, 0xCC0E, 0xA991, 0xCC0F,
- 0xA992, 0xCC11, 0xA993, 0xCC12, 0xA994, 0xCC13, 0xA995, 0xCC15, 0xA996, 0xCC16, 0xA997, 0xCC17, 0xA998, 0xCC18, 0xA999, 0xCC19,
- 0xA99A, 0xCC1A, 0xA99B, 0xCC1B, 0xA99C, 0xCC1E, 0xA99D, 0xCC1F, 0xA99E, 0xCC20, 0xA99F, 0xCC23, 0xA9A0, 0xCC24, 0xA9A1, 0x00E6,
- 0xA9A2, 0x0111, 0xA9A3, 0x00F0, 0xA9A4, 0x0127, 0xA9A5, 0x0131, 0xA9A6, 0x0133, 0xA9A7, 0x0138, 0xA9A8, 0x0140, 0xA9A9, 0x0142,
- 0xA9AA, 0x00F8, 0xA9AB, 0x0153, 0xA9AC, 0x00DF, 0xA9AD, 0x00FE, 0xA9AE, 0x0167, 0xA9AF, 0x014B, 0xA9B0, 0x0149, 0xA9B1, 0x3200,
- 0xA9B2, 0x3201, 0xA9B3, 0x3202, 0xA9B4, 0x3203, 0xA9B5, 0x3204, 0xA9B6, 0x3205, 0xA9B7, 0x3206, 0xA9B8, 0x3207, 0xA9B9, 0x3208,
- 0xA9BA, 0x3209, 0xA9BB, 0x320A, 0xA9BC, 0x320B, 0xA9BD, 0x320C, 0xA9BE, 0x320D, 0xA9BF, 0x320E, 0xA9C0, 0x320F, 0xA9C1, 0x3210,
- 0xA9C2, 0x3211, 0xA9C3, 0x3212, 0xA9C4, 0x3213, 0xA9C5, 0x3214, 0xA9C6, 0x3215, 0xA9C7, 0x3216, 0xA9C8, 0x3217, 0xA9C9, 0x3218,
- 0xA9CA, 0x3219, 0xA9CB, 0x321A, 0xA9CC, 0x321B, 0xA9CD, 0x249C, 0xA9CE, 0x249D, 0xA9CF, 0x249E, 0xA9D0, 0x249F, 0xA9D1, 0x24A0,
- 0xA9D2, 0x24A1, 0xA9D3, 0x24A2, 0xA9D4, 0x24A3, 0xA9D5, 0x24A4, 0xA9D6, 0x24A5, 0xA9D7, 0x24A6, 0xA9D8, 0x24A7, 0xA9D9, 0x24A8,
- 0xA9DA, 0x24A9, 0xA9DB, 0x24AA, 0xA9DC, 0x24AB, 0xA9DD, 0x24AC, 0xA9DE, 0x24AD, 0xA9DF, 0x24AE, 0xA9E0, 0x24AF, 0xA9E1, 0x24B0,
- 0xA9E2, 0x24B1, 0xA9E3, 0x24B2, 0xA9E4, 0x24B3, 0xA9E5, 0x24B4, 0xA9E6, 0x24B5, 0xA9E7, 0x2474, 0xA9E8, 0x2475, 0xA9E9, 0x2476,
- 0xA9EA, 0x2477, 0xA9EB, 0x2478, 0xA9EC, 0x2479, 0xA9ED, 0x247A, 0xA9EE, 0x247B, 0xA9EF, 0x247C, 0xA9F0, 0x247D, 0xA9F1, 0x247E,
- 0xA9F2, 0x247F, 0xA9F3, 0x2480, 0xA9F4, 0x2481, 0xA9F5, 0x2482, 0xA9F6, 0x00B9, 0xA9F7, 0x00B2, 0xA9F8, 0x00B3, 0xA9F9, 0x2074,
- 0xA9FA, 0x207F, 0xA9FB, 0x2081, 0xA9FC, 0x2082, 0xA9FD, 0x2083, 0xA9FE, 0x2084, 0xAA41, 0xCC25, 0xAA42, 0xCC26, 0xAA43, 0xCC2A,
- 0xAA44, 0xCC2B, 0xAA45, 0xCC2D, 0xAA46, 0xCC2F, 0xAA47, 0xCC31, 0xAA48, 0xCC32, 0xAA49, 0xCC33, 0xAA4A, 0xCC34, 0xAA4B, 0xCC35,
- 0xAA4C, 0xCC36, 0xAA4D, 0xCC37, 0xAA4E, 0xCC3A, 0xAA4F, 0xCC3F, 0xAA50, 0xCC40, 0xAA51, 0xCC41, 0xAA52, 0xCC42, 0xAA53, 0xCC43,
- 0xAA54, 0xCC46, 0xAA55, 0xCC47, 0xAA56, 0xCC49, 0xAA57, 0xCC4A, 0xAA58, 0xCC4B, 0xAA59, 0xCC4D, 0xAA5A, 0xCC4E, 0xAA61, 0xCC4F,
- 0xAA62, 0xCC50, 0xAA63, 0xCC51, 0xAA64, 0xCC52, 0xAA65, 0xCC53, 0xAA66, 0xCC56, 0xAA67, 0xCC5A, 0xAA68, 0xCC5B, 0xAA69, 0xCC5C,
- 0xAA6A, 0xCC5D, 0xAA6B, 0xCC5E, 0xAA6C, 0xCC5F, 0xAA6D, 0xCC61, 0xAA6E, 0xCC62, 0xAA6F, 0xCC63, 0xAA70, 0xCC65, 0xAA71, 0xCC67,
- 0xAA72, 0xCC69, 0xAA73, 0xCC6A, 0xAA74, 0xCC6B, 0xAA75, 0xCC6C, 0xAA76, 0xCC6D, 0xAA77, 0xCC6E, 0xAA78, 0xCC6F, 0xAA79, 0xCC71,
- 0xAA7A, 0xCC72, 0xAA81, 0xCC73, 0xAA82, 0xCC74, 0xAA83, 0xCC76, 0xAA84, 0xCC77, 0xAA85, 0xCC78, 0xAA86, 0xCC79, 0xAA87, 0xCC7A,
- 0xAA88, 0xCC7B, 0xAA89, 0xCC7C, 0xAA8A, 0xCC7D, 0xAA8B, 0xCC7E, 0xAA8C, 0xCC7F, 0xAA8D, 0xCC80, 0xAA8E, 0xCC81, 0xAA8F, 0xCC82,
- 0xAA90, 0xCC83, 0xAA91, 0xCC84, 0xAA92, 0xCC85, 0xAA93, 0xCC86, 0xAA94, 0xCC87, 0xAA95, 0xCC88, 0xAA96, 0xCC89, 0xAA97, 0xCC8A,
- 0xAA98, 0xCC8B, 0xAA99, 0xCC8C, 0xAA9A, 0xCC8D, 0xAA9B, 0xCC8E, 0xAA9C, 0xCC8F, 0xAA9D, 0xCC90, 0xAA9E, 0xCC91, 0xAA9F, 0xCC92,
- 0xAAA0, 0xCC93, 0xAAA1, 0x3041, 0xAAA2, 0x3042, 0xAAA3, 0x3043, 0xAAA4, 0x3044, 0xAAA5, 0x3045, 0xAAA6, 0x3046, 0xAAA7, 0x3047,
- 0xAAA8, 0x3048, 0xAAA9, 0x3049, 0xAAAA, 0x304A, 0xAAAB, 0x304B, 0xAAAC, 0x304C, 0xAAAD, 0x304D, 0xAAAE, 0x304E, 0xAAAF, 0x304F,
- 0xAAB0, 0x3050, 0xAAB1, 0x3051, 0xAAB2, 0x3052, 0xAAB3, 0x3053, 0xAAB4, 0x3054, 0xAAB5, 0x3055, 0xAAB6, 0x3056, 0xAAB7, 0x3057,
- 0xAAB8, 0x3058, 0xAAB9, 0x3059, 0xAABA, 0x305A, 0xAABB, 0x305B, 0xAABC, 0x305C, 0xAABD, 0x305D, 0xAABE, 0x305E, 0xAABF, 0x305F,
- 0xAAC0, 0x3060, 0xAAC1, 0x3061, 0xAAC2, 0x3062, 0xAAC3, 0x3063, 0xAAC4, 0x3064, 0xAAC5, 0x3065, 0xAAC6, 0x3066, 0xAAC7, 0x3067,
- 0xAAC8, 0x3068, 0xAAC9, 0x3069, 0xAACA, 0x306A, 0xAACB, 0x306B, 0xAACC, 0x306C, 0xAACD, 0x306D, 0xAACE, 0x306E, 0xAACF, 0x306F,
- 0xAAD0, 0x3070, 0xAAD1, 0x3071, 0xAAD2, 0x3072, 0xAAD3, 0x3073, 0xAAD4, 0x3074, 0xAAD5, 0x3075, 0xAAD6, 0x3076, 0xAAD7, 0x3077,
- 0xAAD8, 0x3078, 0xAAD9, 0x3079, 0xAADA, 0x307A, 0xAADB, 0x307B, 0xAADC, 0x307C, 0xAADD, 0x307D, 0xAADE, 0x307E, 0xAADF, 0x307F,
- 0xAAE0, 0x3080, 0xAAE1, 0x3081, 0xAAE2, 0x3082, 0xAAE3, 0x3083, 0xAAE4, 0x3084, 0xAAE5, 0x3085, 0xAAE6, 0x3086, 0xAAE7, 0x3087,
- 0xAAE8, 0x3088, 0xAAE9, 0x3089, 0xAAEA, 0x308A, 0xAAEB, 0x308B, 0xAAEC, 0x308C, 0xAAED, 0x308D, 0xAAEE, 0x308E, 0xAAEF, 0x308F,
- 0xAAF0, 0x3090, 0xAAF1, 0x3091, 0xAAF2, 0x3092, 0xAAF3, 0x3093, 0xAB41, 0xCC94, 0xAB42, 0xCC95, 0xAB43, 0xCC96, 0xAB44, 0xCC97,
- 0xAB45, 0xCC9A, 0xAB46, 0xCC9B, 0xAB47, 0xCC9D, 0xAB48, 0xCC9E, 0xAB49, 0xCC9F, 0xAB4A, 0xCCA1, 0xAB4B, 0xCCA2, 0xAB4C, 0xCCA3,
- 0xAB4D, 0xCCA4, 0xAB4E, 0xCCA5, 0xAB4F, 0xCCA6, 0xAB50, 0xCCA7, 0xAB51, 0xCCAA, 0xAB52, 0xCCAE, 0xAB53, 0xCCAF, 0xAB54, 0xCCB0,
- 0xAB55, 0xCCB1, 0xAB56, 0xCCB2, 0xAB57, 0xCCB3, 0xAB58, 0xCCB6, 0xAB59, 0xCCB7, 0xAB5A, 0xCCB9, 0xAB61, 0xCCBA, 0xAB62, 0xCCBB,
- 0xAB63, 0xCCBD, 0xAB64, 0xCCBE, 0xAB65, 0xCCBF, 0xAB66, 0xCCC0, 0xAB67, 0xCCC1, 0xAB68, 0xCCC2, 0xAB69, 0xCCC3, 0xAB6A, 0xCCC6,
- 0xAB6B, 0xCCC8, 0xAB6C, 0xCCCA, 0xAB6D, 0xCCCB, 0xAB6E, 0xCCCC, 0xAB6F, 0xCCCD, 0xAB70, 0xCCCE, 0xAB71, 0xCCCF, 0xAB72, 0xCCD1,
- 0xAB73, 0xCCD2, 0xAB74, 0xCCD3, 0xAB75, 0xCCD5, 0xAB76, 0xCCD6, 0xAB77, 0xCCD7, 0xAB78, 0xCCD8, 0xAB79, 0xCCD9, 0xAB7A, 0xCCDA,
- 0xAB81, 0xCCDB, 0xAB82, 0xCCDC, 0xAB83, 0xCCDD, 0xAB84, 0xCCDE, 0xAB85, 0xCCDF, 0xAB86, 0xCCE0, 0xAB87, 0xCCE1, 0xAB88, 0xCCE2,
- 0xAB89, 0xCCE3, 0xAB8A, 0xCCE5, 0xAB8B, 0xCCE6, 0xAB8C, 0xCCE7, 0xAB8D, 0xCCE8, 0xAB8E, 0xCCE9, 0xAB8F, 0xCCEA, 0xAB90, 0xCCEB,
- 0xAB91, 0xCCED, 0xAB92, 0xCCEE, 0xAB93, 0xCCEF, 0xAB94, 0xCCF1, 0xAB95, 0xCCF2, 0xAB96, 0xCCF3, 0xAB97, 0xCCF4, 0xAB98, 0xCCF5,
- 0xAB99, 0xCCF6, 0xAB9A, 0xCCF7, 0xAB9B, 0xCCF8, 0xAB9C, 0xCCF9, 0xAB9D, 0xCCFA, 0xAB9E, 0xCCFB, 0xAB9F, 0xCCFC, 0xABA0, 0xCCFD,
- 0xABA1, 0x30A1, 0xABA2, 0x30A2, 0xABA3, 0x30A3, 0xABA4, 0x30A4, 0xABA5, 0x30A5, 0xABA6, 0x30A6, 0xABA7, 0x30A7, 0xABA8, 0x30A8,
- 0xABA9, 0x30A9, 0xABAA, 0x30AA, 0xABAB, 0x30AB, 0xABAC, 0x30AC, 0xABAD, 0x30AD, 0xABAE, 0x30AE, 0xABAF, 0x30AF, 0xABB0, 0x30B0,
- 0xABB1, 0x30B1, 0xABB2, 0x30B2, 0xABB3, 0x30B3, 0xABB4, 0x30B4, 0xABB5, 0x30B5, 0xABB6, 0x30B6, 0xABB7, 0x30B7, 0xABB8, 0x30B8,
- 0xABB9, 0x30B9, 0xABBA, 0x30BA, 0xABBB, 0x30BB, 0xABBC, 0x30BC, 0xABBD, 0x30BD, 0xABBE, 0x30BE, 0xABBF, 0x30BF, 0xABC0, 0x30C0,
- 0xABC1, 0x30C1, 0xABC2, 0x30C2, 0xABC3, 0x30C3, 0xABC4, 0x30C4, 0xABC5, 0x30C5, 0xABC6, 0x30C6, 0xABC7, 0x30C7, 0xABC8, 0x30C8,
- 0xABC9, 0x30C9, 0xABCA, 0x30CA, 0xABCB, 0x30CB, 0xABCC, 0x30CC, 0xABCD, 0x30CD, 0xABCE, 0x30CE, 0xABCF, 0x30CF, 0xABD0, 0x30D0,
- 0xABD1, 0x30D1, 0xABD2, 0x30D2, 0xABD3, 0x30D3, 0xABD4, 0x30D4, 0xABD5, 0x30D5, 0xABD6, 0x30D6, 0xABD7, 0x30D7, 0xABD8, 0x30D8,
- 0xABD9, 0x30D9, 0xABDA, 0x30DA, 0xABDB, 0x30DB, 0xABDC, 0x30DC, 0xABDD, 0x30DD, 0xABDE, 0x30DE, 0xABDF, 0x30DF, 0xABE0, 0x30E0,
- 0xABE1, 0x30E1, 0xABE2, 0x30E2, 0xABE3, 0x30E3, 0xABE4, 0x30E4, 0xABE5, 0x30E5, 0xABE6, 0x30E6, 0xABE7, 0x30E7, 0xABE8, 0x30E8,
- 0xABE9, 0x30E9, 0xABEA, 0x30EA, 0xABEB, 0x30EB, 0xABEC, 0x30EC, 0xABED, 0x30ED, 0xABEE, 0x30EE, 0xABEF, 0x30EF, 0xABF0, 0x30F0,
- 0xABF1, 0x30F1, 0xABF2, 0x30F2, 0xABF3, 0x30F3, 0xABF4, 0x30F4, 0xABF5, 0x30F5, 0xABF6, 0x30F6, 0xAC41, 0xCCFE, 0xAC42, 0xCCFF,
- 0xAC43, 0xCD00, 0xAC44, 0xCD02, 0xAC45, 0xCD03, 0xAC46, 0xCD04, 0xAC47, 0xCD05, 0xAC48, 0xCD06, 0xAC49, 0xCD07, 0xAC4A, 0xCD0A,
- 0xAC4B, 0xCD0B, 0xAC4C, 0xCD0D, 0xAC4D, 0xCD0E, 0xAC4E, 0xCD0F, 0xAC4F, 0xCD11, 0xAC50, 0xCD12, 0xAC51, 0xCD13, 0xAC52, 0xCD14,
- 0xAC53, 0xCD15, 0xAC54, 0xCD16, 0xAC55, 0xCD17, 0xAC56, 0xCD1A, 0xAC57, 0xCD1C, 0xAC58, 0xCD1E, 0xAC59, 0xCD1F, 0xAC5A, 0xCD20,
- 0xAC61, 0xCD21, 0xAC62, 0xCD22, 0xAC63, 0xCD23, 0xAC64, 0xCD25, 0xAC65, 0xCD26, 0xAC66, 0xCD27, 0xAC67, 0xCD29, 0xAC68, 0xCD2A,
- 0xAC69, 0xCD2B, 0xAC6A, 0xCD2D, 0xAC6B, 0xCD2E, 0xAC6C, 0xCD2F, 0xAC6D, 0xCD30, 0xAC6E, 0xCD31, 0xAC6F, 0xCD32, 0xAC70, 0xCD33,
- 0xAC71, 0xCD34, 0xAC72, 0xCD35, 0xAC73, 0xCD36, 0xAC74, 0xCD37, 0xAC75, 0xCD38, 0xAC76, 0xCD3A, 0xAC77, 0xCD3B, 0xAC78, 0xCD3C,
- 0xAC79, 0xCD3D, 0xAC7A, 0xCD3E, 0xAC81, 0xCD3F, 0xAC82, 0xCD40, 0xAC83, 0xCD41, 0xAC84, 0xCD42, 0xAC85, 0xCD43, 0xAC86, 0xCD44,
- 0xAC87, 0xCD45, 0xAC88, 0xCD46, 0xAC89, 0xCD47, 0xAC8A, 0xCD48, 0xAC8B, 0xCD49, 0xAC8C, 0xCD4A, 0xAC8D, 0xCD4B, 0xAC8E, 0xCD4C,
- 0xAC8F, 0xCD4D, 0xAC90, 0xCD4E, 0xAC91, 0xCD4F, 0xAC92, 0xCD50, 0xAC93, 0xCD51, 0xAC94, 0xCD52, 0xAC95, 0xCD53, 0xAC96, 0xCD54,
- 0xAC97, 0xCD55, 0xAC98, 0xCD56, 0xAC99, 0xCD57, 0xAC9A, 0xCD58, 0xAC9B, 0xCD59, 0xAC9C, 0xCD5A, 0xAC9D, 0xCD5B, 0xAC9E, 0xCD5D,
- 0xAC9F, 0xCD5E, 0xACA0, 0xCD5F, 0xACA1, 0x0410, 0xACA2, 0x0411, 0xACA3, 0x0412, 0xACA4, 0x0413, 0xACA5, 0x0414, 0xACA6, 0x0415,
- 0xACA7, 0x0401, 0xACA8, 0x0416, 0xACA9, 0x0417, 0xACAA, 0x0418, 0xACAB, 0x0419, 0xACAC, 0x041A, 0xACAD, 0x041B, 0xACAE, 0x041C,
- 0xACAF, 0x041D, 0xACB0, 0x041E, 0xACB1, 0x041F, 0xACB2, 0x0420, 0xACB3, 0x0421, 0xACB4, 0x0422, 0xACB5, 0x0423, 0xACB6, 0x0424,
- 0xACB7, 0x0425, 0xACB8, 0x0426, 0xACB9, 0x0427, 0xACBA, 0x0428, 0xACBB, 0x0429, 0xACBC, 0x042A, 0xACBD, 0x042B, 0xACBE, 0x042C,
- 0xACBF, 0x042D, 0xACC0, 0x042E, 0xACC1, 0x042F, 0xACD1, 0x0430, 0xACD2, 0x0431, 0xACD3, 0x0432, 0xACD4, 0x0433, 0xACD5, 0x0434,
- 0xACD6, 0x0435, 0xACD7, 0x0451, 0xACD8, 0x0436, 0xACD9, 0x0437, 0xACDA, 0x0438, 0xACDB, 0x0439, 0xACDC, 0x043A, 0xACDD, 0x043B,
- 0xACDE, 0x043C, 0xACDF, 0x043D, 0xACE0, 0x043E, 0xACE1, 0x043F, 0xACE2, 0x0440, 0xACE3, 0x0441, 0xACE4, 0x0442, 0xACE5, 0x0443,
- 0xACE6, 0x0444, 0xACE7, 0x0445, 0xACE8, 0x0446, 0xACE9, 0x0447, 0xACEA, 0x0448, 0xACEB, 0x0449, 0xACEC, 0x044A, 0xACED, 0x044B,
- 0xACEE, 0x044C, 0xACEF, 0x044D, 0xACF0, 0x044E, 0xACF1, 0x044F, 0xAD41, 0xCD61, 0xAD42, 0xCD62, 0xAD43, 0xCD63, 0xAD44, 0xCD65,
- 0xAD45, 0xCD66, 0xAD46, 0xCD67, 0xAD47, 0xCD68, 0xAD48, 0xCD69, 0xAD49, 0xCD6A, 0xAD4A, 0xCD6B, 0xAD4B, 0xCD6E, 0xAD4C, 0xCD70,
- 0xAD4D, 0xCD72, 0xAD4E, 0xCD73, 0xAD4F, 0xCD74, 0xAD50, 0xCD75, 0xAD51, 0xCD76, 0xAD52, 0xCD77, 0xAD53, 0xCD79, 0xAD54, 0xCD7A,
- 0xAD55, 0xCD7B, 0xAD56, 0xCD7C, 0xAD57, 0xCD7D, 0xAD58, 0xCD7E, 0xAD59, 0xCD7F, 0xAD5A, 0xCD80, 0xAD61, 0xCD81, 0xAD62, 0xCD82,
- 0xAD63, 0xCD83, 0xAD64, 0xCD84, 0xAD65, 0xCD85, 0xAD66, 0xCD86, 0xAD67, 0xCD87, 0xAD68, 0xCD89, 0xAD69, 0xCD8A, 0xAD6A, 0xCD8B,
- 0xAD6B, 0xCD8C, 0xAD6C, 0xCD8D, 0xAD6D, 0xCD8E, 0xAD6E, 0xCD8F, 0xAD6F, 0xCD90, 0xAD70, 0xCD91, 0xAD71, 0xCD92, 0xAD72, 0xCD93,
- 0xAD73, 0xCD96, 0xAD74, 0xCD97, 0xAD75, 0xCD99, 0xAD76, 0xCD9A, 0xAD77, 0xCD9B, 0xAD78, 0xCD9D, 0xAD79, 0xCD9E, 0xAD7A, 0xCD9F,
- 0xAD81, 0xCDA0, 0xAD82, 0xCDA1, 0xAD83, 0xCDA2, 0xAD84, 0xCDA3, 0xAD85, 0xCDA6, 0xAD86, 0xCDA8, 0xAD87, 0xCDAA, 0xAD88, 0xCDAB,
- 0xAD89, 0xCDAC, 0xAD8A, 0xCDAD, 0xAD8B, 0xCDAE, 0xAD8C, 0xCDAF, 0xAD8D, 0xCDB1, 0xAD8E, 0xCDB2, 0xAD8F, 0xCDB3, 0xAD90, 0xCDB4,
- 0xAD91, 0xCDB5, 0xAD92, 0xCDB6, 0xAD93, 0xCDB7, 0xAD94, 0xCDB8, 0xAD95, 0xCDB9, 0xAD96, 0xCDBA, 0xAD97, 0xCDBB, 0xAD98, 0xCDBC,
- 0xAD99, 0xCDBD, 0xAD9A, 0xCDBE, 0xAD9B, 0xCDBF, 0xAD9C, 0xCDC0, 0xAD9D, 0xCDC1, 0xAD9E, 0xCDC2, 0xAD9F, 0xCDC3, 0xADA0, 0xCDC5,
- 0xAE41, 0xCDC6, 0xAE42, 0xCDC7, 0xAE43, 0xCDC8, 0xAE44, 0xCDC9, 0xAE45, 0xCDCA, 0xAE46, 0xCDCB, 0xAE47, 0xCDCD, 0xAE48, 0xCDCE,
- 0xAE49, 0xCDCF, 0xAE4A, 0xCDD1, 0xAE4B, 0xCDD2, 0xAE4C, 0xCDD3, 0xAE4D, 0xCDD4, 0xAE4E, 0xCDD5, 0xAE4F, 0xCDD6, 0xAE50, 0xCDD7,
- 0xAE51, 0xCDD8, 0xAE52, 0xCDD9, 0xAE53, 0xCDDA, 0xAE54, 0xCDDB, 0xAE55, 0xCDDC, 0xAE56, 0xCDDD, 0xAE57, 0xCDDE, 0xAE58, 0xCDDF,
- 0xAE59, 0xCDE0, 0xAE5A, 0xCDE1, 0xAE61, 0xCDE2, 0xAE62, 0xCDE3, 0xAE63, 0xCDE4, 0xAE64, 0xCDE5, 0xAE65, 0xCDE6, 0xAE66, 0xCDE7,
- 0xAE67, 0xCDE9, 0xAE68, 0xCDEA, 0xAE69, 0xCDEB, 0xAE6A, 0xCDED, 0xAE6B, 0xCDEE, 0xAE6C, 0xCDEF, 0xAE6D, 0xCDF1, 0xAE6E, 0xCDF2,
- 0xAE6F, 0xCDF3, 0xAE70, 0xCDF4, 0xAE71, 0xCDF5, 0xAE72, 0xCDF6, 0xAE73, 0xCDF7, 0xAE74, 0xCDFA, 0xAE75, 0xCDFC, 0xAE76, 0xCDFE,
- 0xAE77, 0xCDFF, 0xAE78, 0xCE00, 0xAE79, 0xCE01, 0xAE7A, 0xCE02, 0xAE81, 0xCE03, 0xAE82, 0xCE05, 0xAE83, 0xCE06, 0xAE84, 0xCE07,
- 0xAE85, 0xCE09, 0xAE86, 0xCE0A, 0xAE87, 0xCE0B, 0xAE88, 0xCE0D, 0xAE89, 0xCE0E, 0xAE8A, 0xCE0F, 0xAE8B, 0xCE10, 0xAE8C, 0xCE11,
- 0xAE8D, 0xCE12, 0xAE8E, 0xCE13, 0xAE8F, 0xCE15, 0xAE90, 0xCE16, 0xAE91, 0xCE17, 0xAE92, 0xCE18, 0xAE93, 0xCE1A, 0xAE94, 0xCE1B,
- 0xAE95, 0xCE1C, 0xAE96, 0xCE1D, 0xAE97, 0xCE1E, 0xAE98, 0xCE1F, 0xAE99, 0xCE22, 0xAE9A, 0xCE23, 0xAE9B, 0xCE25, 0xAE9C, 0xCE26,
- 0xAE9D, 0xCE27, 0xAE9E, 0xCE29, 0xAE9F, 0xCE2A, 0xAEA0, 0xCE2B, 0xAF41, 0xCE2C, 0xAF42, 0xCE2D, 0xAF43, 0xCE2E, 0xAF44, 0xCE2F,
- 0xAF45, 0xCE32, 0xAF46, 0xCE34, 0xAF47, 0xCE36, 0xAF48, 0xCE37, 0xAF49, 0xCE38, 0xAF4A, 0xCE39, 0xAF4B, 0xCE3A, 0xAF4C, 0xCE3B,
- 0xAF4D, 0xCE3C, 0xAF4E, 0xCE3D, 0xAF4F, 0xCE3E, 0xAF50, 0xCE3F, 0xAF51, 0xCE40, 0xAF52, 0xCE41, 0xAF53, 0xCE42, 0xAF54, 0xCE43,
- 0xAF55, 0xCE44, 0xAF56, 0xCE45, 0xAF57, 0xCE46, 0xAF58, 0xCE47, 0xAF59, 0xCE48, 0xAF5A, 0xCE49, 0xAF61, 0xCE4A, 0xAF62, 0xCE4B,
- 0xAF63, 0xCE4C, 0xAF64, 0xCE4D, 0xAF65, 0xCE4E, 0xAF66, 0xCE4F, 0xAF67, 0xCE50, 0xAF68, 0xCE51, 0xAF69, 0xCE52, 0xAF6A, 0xCE53,
- 0xAF6B, 0xCE54, 0xAF6C, 0xCE55, 0xAF6D, 0xCE56, 0xAF6E, 0xCE57, 0xAF6F, 0xCE5A, 0xAF70, 0xCE5B, 0xAF71, 0xCE5D, 0xAF72, 0xCE5E,
- 0xAF73, 0xCE62, 0xAF74, 0xCE63, 0xAF75, 0xCE64, 0xAF76, 0xCE65, 0xAF77, 0xCE66, 0xAF78, 0xCE67, 0xAF79, 0xCE6A, 0xAF7A, 0xCE6C,
- 0xAF81, 0xCE6E, 0xAF82, 0xCE6F, 0xAF83, 0xCE70, 0xAF84, 0xCE71, 0xAF85, 0xCE72, 0xAF86, 0xCE73, 0xAF87, 0xCE76, 0xAF88, 0xCE77,
- 0xAF89, 0xCE79, 0xAF8A, 0xCE7A, 0xAF8B, 0xCE7B, 0xAF8C, 0xCE7D, 0xAF8D, 0xCE7E, 0xAF8E, 0xCE7F, 0xAF8F, 0xCE80, 0xAF90, 0xCE81,
- 0xAF91, 0xCE82, 0xAF92, 0xCE83, 0xAF93, 0xCE86, 0xAF94, 0xCE88, 0xAF95, 0xCE8A, 0xAF96, 0xCE8B, 0xAF97, 0xCE8C, 0xAF98, 0xCE8D,
- 0xAF99, 0xCE8E, 0xAF9A, 0xCE8F, 0xAF9B, 0xCE92, 0xAF9C, 0xCE93, 0xAF9D, 0xCE95, 0xAF9E, 0xCE96, 0xAF9F, 0xCE97, 0xAFA0, 0xCE99,
- 0xB041, 0xCE9A, 0xB042, 0xCE9B, 0xB043, 0xCE9C, 0xB044, 0xCE9D, 0xB045, 0xCE9E, 0xB046, 0xCE9F, 0xB047, 0xCEA2, 0xB048, 0xCEA6,
- 0xB049, 0xCEA7, 0xB04A, 0xCEA8, 0xB04B, 0xCEA9, 0xB04C, 0xCEAA, 0xB04D, 0xCEAB, 0xB04E, 0xCEAE, 0xB04F, 0xCEAF, 0xB050, 0xCEB0,
- 0xB051, 0xCEB1, 0xB052, 0xCEB2, 0xB053, 0xCEB3, 0xB054, 0xCEB4, 0xB055, 0xCEB5, 0xB056, 0xCEB6, 0xB057, 0xCEB7, 0xB058, 0xCEB8,
- 0xB059, 0xCEB9, 0xB05A, 0xCEBA, 0xB061, 0xCEBB, 0xB062, 0xCEBC, 0xB063, 0xCEBD, 0xB064, 0xCEBE, 0xB065, 0xCEBF, 0xB066, 0xCEC0,
- 0xB067, 0xCEC2, 0xB068, 0xCEC3, 0xB069, 0xCEC4, 0xB06A, 0xCEC5, 0xB06B, 0xCEC6, 0xB06C, 0xCEC7, 0xB06D, 0xCEC8, 0xB06E, 0xCEC9,
- 0xB06F, 0xCECA, 0xB070, 0xCECB, 0xB071, 0xCECC, 0xB072, 0xCECD, 0xB073, 0xCECE, 0xB074, 0xCECF, 0xB075, 0xCED0, 0xB076, 0xCED1,
- 0xB077, 0xCED2, 0xB078, 0xCED3, 0xB079, 0xCED4, 0xB07A, 0xCED5, 0xB081, 0xCED6, 0xB082, 0xCED7, 0xB083, 0xCED8, 0xB084, 0xCED9,
- 0xB085, 0xCEDA, 0xB086, 0xCEDB, 0xB087, 0xCEDC, 0xB088, 0xCEDD, 0xB089, 0xCEDE, 0xB08A, 0xCEDF, 0xB08B, 0xCEE0, 0xB08C, 0xCEE1,
- 0xB08D, 0xCEE2, 0xB08E, 0xCEE3, 0xB08F, 0xCEE6, 0xB090, 0xCEE7, 0xB091, 0xCEE9, 0xB092, 0xCEEA, 0xB093, 0xCEED, 0xB094, 0xCEEE,
- 0xB095, 0xCEEF, 0xB096, 0xCEF0, 0xB097, 0xCEF1, 0xB098, 0xCEF2, 0xB099, 0xCEF3, 0xB09A, 0xCEF6, 0xB09B, 0xCEFA, 0xB09C, 0xCEFB,
- 0xB09D, 0xCEFC, 0xB09E, 0xCEFD, 0xB09F, 0xCEFE, 0xB0A0, 0xCEFF, 0xB0A1, 0xAC00, 0xB0A2, 0xAC01, 0xB0A3, 0xAC04, 0xB0A4, 0xAC07,
- 0xB0A5, 0xAC08, 0xB0A6, 0xAC09, 0xB0A7, 0xAC0A, 0xB0A8, 0xAC10, 0xB0A9, 0xAC11, 0xB0AA, 0xAC12, 0xB0AB, 0xAC13, 0xB0AC, 0xAC14,
- 0xB0AD, 0xAC15, 0xB0AE, 0xAC16, 0xB0AF, 0xAC17, 0xB0B0, 0xAC19, 0xB0B1, 0xAC1A, 0xB0B2, 0xAC1B, 0xB0B3, 0xAC1C, 0xB0B4, 0xAC1D,
- 0xB0B5, 0xAC20, 0xB0B6, 0xAC24, 0xB0B7, 0xAC2C, 0xB0B8, 0xAC2D, 0xB0B9, 0xAC2F, 0xB0BA, 0xAC30, 0xB0BB, 0xAC31, 0xB0BC, 0xAC38,
- 0xB0BD, 0xAC39, 0xB0BE, 0xAC3C, 0xB0BF, 0xAC40, 0xB0C0, 0xAC4B, 0xB0C1, 0xAC4D, 0xB0C2, 0xAC54, 0xB0C3, 0xAC58, 0xB0C4, 0xAC5C,
- 0xB0C5, 0xAC70, 0xB0C6, 0xAC71, 0xB0C7, 0xAC74, 0xB0C8, 0xAC77, 0xB0C9, 0xAC78, 0xB0CA, 0xAC7A, 0xB0CB, 0xAC80, 0xB0CC, 0xAC81,
- 0xB0CD, 0xAC83, 0xB0CE, 0xAC84, 0xB0CF, 0xAC85, 0xB0D0, 0xAC86, 0xB0D1, 0xAC89, 0xB0D2, 0xAC8A, 0xB0D3, 0xAC8B, 0xB0D4, 0xAC8C,
- 0xB0D5, 0xAC90, 0xB0D6, 0xAC94, 0xB0D7, 0xAC9C, 0xB0D8, 0xAC9D, 0xB0D9, 0xAC9F, 0xB0DA, 0xACA0, 0xB0DB, 0xACA1, 0xB0DC, 0xACA8,
- 0xB0DD, 0xACA9, 0xB0DE, 0xACAA, 0xB0DF, 0xACAC, 0xB0E0, 0xACAF, 0xB0E1, 0xACB0, 0xB0E2, 0xACB8, 0xB0E3, 0xACB9, 0xB0E4, 0xACBB,
- 0xB0E5, 0xACBC, 0xB0E6, 0xACBD, 0xB0E7, 0xACC1, 0xB0E8, 0xACC4, 0xB0E9, 0xACC8, 0xB0EA, 0xACCC, 0xB0EB, 0xACD5, 0xB0EC, 0xACD7,
- 0xB0ED, 0xACE0, 0xB0EE, 0xACE1, 0xB0EF, 0xACE4, 0xB0F0, 0xACE7, 0xB0F1, 0xACE8, 0xB0F2, 0xACEA, 0xB0F3, 0xACEC, 0xB0F4, 0xACEF,
- 0xB0F5, 0xACF0, 0xB0F6, 0xACF1, 0xB0F7, 0xACF3, 0xB0F8, 0xACF5, 0xB0F9, 0xACF6, 0xB0FA, 0xACFC, 0xB0FB, 0xACFD, 0xB0FC, 0xAD00,
- 0xB0FD, 0xAD04, 0xB0FE, 0xAD06, 0xB141, 0xCF02, 0xB142, 0xCF03, 0xB143, 0xCF05, 0xB144, 0xCF06, 0xB145, 0xCF07, 0xB146, 0xCF09,
- 0xB147, 0xCF0A, 0xB148, 0xCF0B, 0xB149, 0xCF0C, 0xB14A, 0xCF0D, 0xB14B, 0xCF0E, 0xB14C, 0xCF0F, 0xB14D, 0xCF12, 0xB14E, 0xCF14,
- 0xB14F, 0xCF16, 0xB150, 0xCF17, 0xB151, 0xCF18, 0xB152, 0xCF19, 0xB153, 0xCF1A, 0xB154, 0xCF1B, 0xB155, 0xCF1D, 0xB156, 0xCF1E,
- 0xB157, 0xCF1F, 0xB158, 0xCF21, 0xB159, 0xCF22, 0xB15A, 0xCF23, 0xB161, 0xCF25, 0xB162, 0xCF26, 0xB163, 0xCF27, 0xB164, 0xCF28,
- 0xB165, 0xCF29, 0xB166, 0xCF2A, 0xB167, 0xCF2B, 0xB168, 0xCF2E, 0xB169, 0xCF32, 0xB16A, 0xCF33, 0xB16B, 0xCF34, 0xB16C, 0xCF35,
- 0xB16D, 0xCF36, 0xB16E, 0xCF37, 0xB16F, 0xCF39, 0xB170, 0xCF3A, 0xB171, 0xCF3B, 0xB172, 0xCF3C, 0xB173, 0xCF3D, 0xB174, 0xCF3E,
- 0xB175, 0xCF3F, 0xB176, 0xCF40, 0xB177, 0xCF41, 0xB178, 0xCF42, 0xB179, 0xCF43, 0xB17A, 0xCF44, 0xB181, 0xCF45, 0xB182, 0xCF46,
- 0xB183, 0xCF47, 0xB184, 0xCF48, 0xB185, 0xCF49, 0xB186, 0xCF4A, 0xB187, 0xCF4B, 0xB188, 0xCF4C, 0xB189, 0xCF4D, 0xB18A, 0xCF4E,
- 0xB18B, 0xCF4F, 0xB18C, 0xCF50, 0xB18D, 0xCF51, 0xB18E, 0xCF52, 0xB18F, 0xCF53, 0xB190, 0xCF56, 0xB191, 0xCF57, 0xB192, 0xCF59,
- 0xB193, 0xCF5A, 0xB194, 0xCF5B, 0xB195, 0xCF5D, 0xB196, 0xCF5E, 0xB197, 0xCF5F, 0xB198, 0xCF60, 0xB199, 0xCF61, 0xB19A, 0xCF62,
- 0xB19B, 0xCF63, 0xB19C, 0xCF66, 0xB19D, 0xCF68, 0xB19E, 0xCF6A, 0xB19F, 0xCF6B, 0xB1A0, 0xCF6C, 0xB1A1, 0xAD0C, 0xB1A2, 0xAD0D,
- 0xB1A3, 0xAD0F, 0xB1A4, 0xAD11, 0xB1A5, 0xAD18, 0xB1A6, 0xAD1C, 0xB1A7, 0xAD20, 0xB1A8, 0xAD29, 0xB1A9, 0xAD2C, 0xB1AA, 0xAD2D,
- 0xB1AB, 0xAD34, 0xB1AC, 0xAD35, 0xB1AD, 0xAD38, 0xB1AE, 0xAD3C, 0xB1AF, 0xAD44, 0xB1B0, 0xAD45, 0xB1B1, 0xAD47, 0xB1B2, 0xAD49,
- 0xB1B3, 0xAD50, 0xB1B4, 0xAD54, 0xB1B5, 0xAD58, 0xB1B6, 0xAD61, 0xB1B7, 0xAD63, 0xB1B8, 0xAD6C, 0xB1B9, 0xAD6D, 0xB1BA, 0xAD70,
- 0xB1BB, 0xAD73, 0xB1BC, 0xAD74, 0xB1BD, 0xAD75, 0xB1BE, 0xAD76, 0xB1BF, 0xAD7B, 0xB1C0, 0xAD7C, 0xB1C1, 0xAD7D, 0xB1C2, 0xAD7F,
- 0xB1C3, 0xAD81, 0xB1C4, 0xAD82, 0xB1C5, 0xAD88, 0xB1C6, 0xAD89, 0xB1C7, 0xAD8C, 0xB1C8, 0xAD90, 0xB1C9, 0xAD9C, 0xB1CA, 0xAD9D,
- 0xB1CB, 0xADA4, 0xB1CC, 0xADB7, 0xB1CD, 0xADC0, 0xB1CE, 0xADC1, 0xB1CF, 0xADC4, 0xB1D0, 0xADC8, 0xB1D1, 0xADD0, 0xB1D2, 0xADD1,
- 0xB1D3, 0xADD3, 0xB1D4, 0xADDC, 0xB1D5, 0xADE0, 0xB1D6, 0xADE4, 0xB1D7, 0xADF8, 0xB1D8, 0xADF9, 0xB1D9, 0xADFC, 0xB1DA, 0xADFF,
- 0xB1DB, 0xAE00, 0xB1DC, 0xAE01, 0xB1DD, 0xAE08, 0xB1DE, 0xAE09, 0xB1DF, 0xAE0B, 0xB1E0, 0xAE0D, 0xB1E1, 0xAE14, 0xB1E2, 0xAE30,
- 0xB1E3, 0xAE31, 0xB1E4, 0xAE34, 0xB1E5, 0xAE37, 0xB1E6, 0xAE38, 0xB1E7, 0xAE3A, 0xB1E8, 0xAE40, 0xB1E9, 0xAE41, 0xB1EA, 0xAE43,
- 0xB1EB, 0xAE45, 0xB1EC, 0xAE46, 0xB1ED, 0xAE4A, 0xB1EE, 0xAE4C, 0xB1EF, 0xAE4D, 0xB1F0, 0xAE4E, 0xB1F1, 0xAE50, 0xB1F2, 0xAE54,
- 0xB1F3, 0xAE56, 0xB1F4, 0xAE5C, 0xB1F5, 0xAE5D, 0xB1F6, 0xAE5F, 0xB1F7, 0xAE60, 0xB1F8, 0xAE61, 0xB1F9, 0xAE65, 0xB1FA, 0xAE68,
- 0xB1FB, 0xAE69, 0xB1FC, 0xAE6C, 0xB1FD, 0xAE70, 0xB1FE, 0xAE78, 0xB241, 0xCF6D, 0xB242, 0xCF6E, 0xB243, 0xCF6F, 0xB244, 0xCF72,
- 0xB245, 0xCF73, 0xB246, 0xCF75, 0xB247, 0xCF76, 0xB248, 0xCF77, 0xB249, 0xCF79, 0xB24A, 0xCF7A, 0xB24B, 0xCF7B, 0xB24C, 0xCF7C,
- 0xB24D, 0xCF7D, 0xB24E, 0xCF7E, 0xB24F, 0xCF7F, 0xB250, 0xCF81, 0xB251, 0xCF82, 0xB252, 0xCF83, 0xB253, 0xCF84, 0xB254, 0xCF86,
- 0xB255, 0xCF87, 0xB256, 0xCF88, 0xB257, 0xCF89, 0xB258, 0xCF8A, 0xB259, 0xCF8B, 0xB25A, 0xCF8D, 0xB261, 0xCF8E, 0xB262, 0xCF8F,
- 0xB263, 0xCF90, 0xB264, 0xCF91, 0xB265, 0xCF92, 0xB266, 0xCF93, 0xB267, 0xCF94, 0xB268, 0xCF95, 0xB269, 0xCF96, 0xB26A, 0xCF97,
- 0xB26B, 0xCF98, 0xB26C, 0xCF99, 0xB26D, 0xCF9A, 0xB26E, 0xCF9B, 0xB26F, 0xCF9C, 0xB270, 0xCF9D, 0xB271, 0xCF9E, 0xB272, 0xCF9F,
- 0xB273, 0xCFA0, 0xB274, 0xCFA2, 0xB275, 0xCFA3, 0xB276, 0xCFA4, 0xB277, 0xCFA5, 0xB278, 0xCFA6, 0xB279, 0xCFA7, 0xB27A, 0xCFA9,
- 0xB281, 0xCFAA, 0xB282, 0xCFAB, 0xB283, 0xCFAC, 0xB284, 0xCFAD, 0xB285, 0xCFAE, 0xB286, 0xCFAF, 0xB287, 0xCFB1, 0xB288, 0xCFB2,
- 0xB289, 0xCFB3, 0xB28A, 0xCFB4, 0xB28B, 0xCFB5, 0xB28C, 0xCFB6, 0xB28D, 0xCFB7, 0xB28E, 0xCFB8, 0xB28F, 0xCFB9, 0xB290, 0xCFBA,
- 0xB291, 0xCFBB, 0xB292, 0xCFBC, 0xB293, 0xCFBD, 0xB294, 0xCFBE, 0xB295, 0xCFBF, 0xB296, 0xCFC0, 0xB297, 0xCFC1, 0xB298, 0xCFC2,
- 0xB299, 0xCFC3, 0xB29A, 0xCFC5, 0xB29B, 0xCFC6, 0xB29C, 0xCFC7, 0xB29D, 0xCFC8, 0xB29E, 0xCFC9, 0xB29F, 0xCFCA, 0xB2A0, 0xCFCB,
- 0xB2A1, 0xAE79, 0xB2A2, 0xAE7B, 0xB2A3, 0xAE7C, 0xB2A4, 0xAE7D, 0xB2A5, 0xAE84, 0xB2A6, 0xAE85, 0xB2A7, 0xAE8C, 0xB2A8, 0xAEBC,
- 0xB2A9, 0xAEBD, 0xB2AA, 0xAEBE, 0xB2AB, 0xAEC0, 0xB2AC, 0xAEC4, 0xB2AD, 0xAECC, 0xB2AE, 0xAECD, 0xB2AF, 0xAECF, 0xB2B0, 0xAED0,
- 0xB2B1, 0xAED1, 0xB2B2, 0xAED8, 0xB2B3, 0xAED9, 0xB2B4, 0xAEDC, 0xB2B5, 0xAEE8, 0xB2B6, 0xAEEB, 0xB2B7, 0xAEED, 0xB2B8, 0xAEF4,
- 0xB2B9, 0xAEF8, 0xB2BA, 0xAEFC, 0xB2BB, 0xAF07, 0xB2BC, 0xAF08, 0xB2BD, 0xAF0D, 0xB2BE, 0xAF10, 0xB2BF, 0xAF2C, 0xB2C0, 0xAF2D,
- 0xB2C1, 0xAF30, 0xB2C2, 0xAF32, 0xB2C3, 0xAF34, 0xB2C4, 0xAF3C, 0xB2C5, 0xAF3D, 0xB2C6, 0xAF3F, 0xB2C7, 0xAF41, 0xB2C8, 0xAF42,
- 0xB2C9, 0xAF43, 0xB2CA, 0xAF48, 0xB2CB, 0xAF49, 0xB2CC, 0xAF50, 0xB2CD, 0xAF5C, 0xB2CE, 0xAF5D, 0xB2CF, 0xAF64, 0xB2D0, 0xAF65,
- 0xB2D1, 0xAF79, 0xB2D2, 0xAF80, 0xB2D3, 0xAF84, 0xB2D4, 0xAF88, 0xB2D5, 0xAF90, 0xB2D6, 0xAF91, 0xB2D7, 0xAF95, 0xB2D8, 0xAF9C,
- 0xB2D9, 0xAFB8, 0xB2DA, 0xAFB9, 0xB2DB, 0xAFBC, 0xB2DC, 0xAFC0, 0xB2DD, 0xAFC7, 0xB2DE, 0xAFC8, 0xB2DF, 0xAFC9, 0xB2E0, 0xAFCB,
- 0xB2E1, 0xAFCD, 0xB2E2, 0xAFCE, 0xB2E3, 0xAFD4, 0xB2E4, 0xAFDC, 0xB2E5, 0xAFE8, 0xB2E6, 0xAFE9, 0xB2E7, 0xAFF0, 0xB2E8, 0xAFF1,
- 0xB2E9, 0xAFF4, 0xB2EA, 0xAFF8, 0xB2EB, 0xB000, 0xB2EC, 0xB001, 0xB2ED, 0xB004, 0xB2EE, 0xB00C, 0xB2EF, 0xB010, 0xB2F0, 0xB014,
- 0xB2F1, 0xB01C, 0xB2F2, 0xB01D, 0xB2F3, 0xB028, 0xB2F4, 0xB044, 0xB2F5, 0xB045, 0xB2F6, 0xB048, 0xB2F7, 0xB04A, 0xB2F8, 0xB04C,
- 0xB2F9, 0xB04E, 0xB2FA, 0xB053, 0xB2FB, 0xB054, 0xB2FC, 0xB055, 0xB2FD, 0xB057, 0xB2FE, 0xB059, 0xB341, 0xCFCC, 0xB342, 0xCFCD,
- 0xB343, 0xCFCE, 0xB344, 0xCFCF, 0xB345, 0xCFD0, 0xB346, 0xCFD1, 0xB347, 0xCFD2, 0xB348, 0xCFD3, 0xB349, 0xCFD4, 0xB34A, 0xCFD5,
- 0xB34B, 0xCFD6, 0xB34C, 0xCFD7, 0xB34D, 0xCFD8, 0xB34E, 0xCFD9, 0xB34F, 0xCFDA, 0xB350, 0xCFDB, 0xB351, 0xCFDC, 0xB352, 0xCFDD,
- 0xB353, 0xCFDE, 0xB354, 0xCFDF, 0xB355, 0xCFE2, 0xB356, 0xCFE3, 0xB357, 0xCFE5, 0xB358, 0xCFE6, 0xB359, 0xCFE7, 0xB35A, 0xCFE9,
- 0xB361, 0xCFEA, 0xB362, 0xCFEB, 0xB363, 0xCFEC, 0xB364, 0xCFED, 0xB365, 0xCFEE, 0xB366, 0xCFEF, 0xB367, 0xCFF2, 0xB368, 0xCFF4,
- 0xB369, 0xCFF6, 0xB36A, 0xCFF7, 0xB36B, 0xCFF8, 0xB36C, 0xCFF9, 0xB36D, 0xCFFA, 0xB36E, 0xCFFB, 0xB36F, 0xCFFD, 0xB370, 0xCFFE,
- 0xB371, 0xCFFF, 0xB372, 0xD001, 0xB373, 0xD002, 0xB374, 0xD003, 0xB375, 0xD005, 0xB376, 0xD006, 0xB377, 0xD007, 0xB378, 0xD008,
- 0xB379, 0xD009, 0xB37A, 0xD00A, 0xB381, 0xD00B, 0xB382, 0xD00C, 0xB383, 0xD00D, 0xB384, 0xD00E, 0xB385, 0xD00F, 0xB386, 0xD010,
- 0xB387, 0xD012, 0xB388, 0xD013, 0xB389, 0xD014, 0xB38A, 0xD015, 0xB38B, 0xD016, 0xB38C, 0xD017, 0xB38D, 0xD019, 0xB38E, 0xD01A,
- 0xB38F, 0xD01B, 0xB390, 0xD01C, 0xB391, 0xD01D, 0xB392, 0xD01E, 0xB393, 0xD01F, 0xB394, 0xD020, 0xB395, 0xD021, 0xB396, 0xD022,
- 0xB397, 0xD023, 0xB398, 0xD024, 0xB399, 0xD025, 0xB39A, 0xD026, 0xB39B, 0xD027, 0xB39C, 0xD028, 0xB39D, 0xD029, 0xB39E, 0xD02A,
- 0xB39F, 0xD02B, 0xB3A0, 0xD02C, 0xB3A1, 0xB05D, 0xB3A2, 0xB07C, 0xB3A3, 0xB07D, 0xB3A4, 0xB080, 0xB3A5, 0xB084, 0xB3A6, 0xB08C,
- 0xB3A7, 0xB08D, 0xB3A8, 0xB08F, 0xB3A9, 0xB091, 0xB3AA, 0xB098, 0xB3AB, 0xB099, 0xB3AC, 0xB09A, 0xB3AD, 0xB09C, 0xB3AE, 0xB09F,
- 0xB3AF, 0xB0A0, 0xB3B0, 0xB0A1, 0xB3B1, 0xB0A2, 0xB3B2, 0xB0A8, 0xB3B3, 0xB0A9, 0xB3B4, 0xB0AB, 0xB3B5, 0xB0AC, 0xB3B6, 0xB0AD,
- 0xB3B7, 0xB0AE, 0xB3B8, 0xB0AF, 0xB3B9, 0xB0B1, 0xB3BA, 0xB0B3, 0xB3BB, 0xB0B4, 0xB3BC, 0xB0B5, 0xB3BD, 0xB0B8, 0xB3BE, 0xB0BC,
- 0xB3BF, 0xB0C4, 0xB3C0, 0xB0C5, 0xB3C1, 0xB0C7, 0xB3C2, 0xB0C8, 0xB3C3, 0xB0C9, 0xB3C4, 0xB0D0, 0xB3C5, 0xB0D1, 0xB3C6, 0xB0D4,
- 0xB3C7, 0xB0D8, 0xB3C8, 0xB0E0, 0xB3C9, 0xB0E5, 0xB3CA, 0xB108, 0xB3CB, 0xB109, 0xB3CC, 0xB10B, 0xB3CD, 0xB10C, 0xB3CE, 0xB110,
- 0xB3CF, 0xB112, 0xB3D0, 0xB113, 0xB3D1, 0xB118, 0xB3D2, 0xB119, 0xB3D3, 0xB11B, 0xB3D4, 0xB11C, 0xB3D5, 0xB11D, 0xB3D6, 0xB123,
- 0xB3D7, 0xB124, 0xB3D8, 0xB125, 0xB3D9, 0xB128, 0xB3DA, 0xB12C, 0xB3DB, 0xB134, 0xB3DC, 0xB135, 0xB3DD, 0xB137, 0xB3DE, 0xB138,
- 0xB3DF, 0xB139, 0xB3E0, 0xB140, 0xB3E1, 0xB141, 0xB3E2, 0xB144, 0xB3E3, 0xB148, 0xB3E4, 0xB150, 0xB3E5, 0xB151, 0xB3E6, 0xB154,
- 0xB3E7, 0xB155, 0xB3E8, 0xB158, 0xB3E9, 0xB15C, 0xB3EA, 0xB160, 0xB3EB, 0xB178, 0xB3EC, 0xB179, 0xB3ED, 0xB17C, 0xB3EE, 0xB180,
- 0xB3EF, 0xB182, 0xB3F0, 0xB188, 0xB3F1, 0xB189, 0xB3F2, 0xB18B, 0xB3F3, 0xB18D, 0xB3F4, 0xB192, 0xB3F5, 0xB193, 0xB3F6, 0xB194,
- 0xB3F7, 0xB198, 0xB3F8, 0xB19C, 0xB3F9, 0xB1A8, 0xB3FA, 0xB1CC, 0xB3FB, 0xB1D0, 0xB3FC, 0xB1D4, 0xB3FD, 0xB1DC, 0xB3FE, 0xB1DD,
- 0xB441, 0xD02E, 0xB442, 0xD02F, 0xB443, 0xD030, 0xB444, 0xD031, 0xB445, 0xD032, 0xB446, 0xD033, 0xB447, 0xD036, 0xB448, 0xD037,
- 0xB449, 0xD039, 0xB44A, 0xD03A, 0xB44B, 0xD03B, 0xB44C, 0xD03D, 0xB44D, 0xD03E, 0xB44E, 0xD03F, 0xB44F, 0xD040, 0xB450, 0xD041,
- 0xB451, 0xD042, 0xB452, 0xD043, 0xB453, 0xD046, 0xB454, 0xD048, 0xB455, 0xD04A, 0xB456, 0xD04B, 0xB457, 0xD04C, 0xB458, 0xD04D,
- 0xB459, 0xD04E, 0xB45A, 0xD04F, 0xB461, 0xD051, 0xB462, 0xD052, 0xB463, 0xD053, 0xB464, 0xD055, 0xB465, 0xD056, 0xB466, 0xD057,
- 0xB467, 0xD059, 0xB468, 0xD05A, 0xB469, 0xD05B, 0xB46A, 0xD05C, 0xB46B, 0xD05D, 0xB46C, 0xD05E, 0xB46D, 0xD05F, 0xB46E, 0xD061,
- 0xB46F, 0xD062, 0xB470, 0xD063, 0xB471, 0xD064, 0xB472, 0xD065, 0xB473, 0xD066, 0xB474, 0xD067, 0xB475, 0xD068, 0xB476, 0xD069,
- 0xB477, 0xD06A, 0xB478, 0xD06B, 0xB479, 0xD06E, 0xB47A, 0xD06F, 0xB481, 0xD071, 0xB482, 0xD072, 0xB483, 0xD073, 0xB484, 0xD075,
- 0xB485, 0xD076, 0xB486, 0xD077, 0xB487, 0xD078, 0xB488, 0xD079, 0xB489, 0xD07A, 0xB48A, 0xD07B, 0xB48B, 0xD07E, 0xB48C, 0xD07F,
- 0xB48D, 0xD080, 0xB48E, 0xD082, 0xB48F, 0xD083, 0xB490, 0xD084, 0xB491, 0xD085, 0xB492, 0xD086, 0xB493, 0xD087, 0xB494, 0xD088,
- 0xB495, 0xD089, 0xB496, 0xD08A, 0xB497, 0xD08B, 0xB498, 0xD08C, 0xB499, 0xD08D, 0xB49A, 0xD08E, 0xB49B, 0xD08F, 0xB49C, 0xD090,
- 0xB49D, 0xD091, 0xB49E, 0xD092, 0xB49F, 0xD093, 0xB4A0, 0xD094, 0xB4A1, 0xB1DF, 0xB4A2, 0xB1E8, 0xB4A3, 0xB1E9, 0xB4A4, 0xB1EC,
- 0xB4A5, 0xB1F0, 0xB4A6, 0xB1F9, 0xB4A7, 0xB1FB, 0xB4A8, 0xB1FD, 0xB4A9, 0xB204, 0xB4AA, 0xB205, 0xB4AB, 0xB208, 0xB4AC, 0xB20B,
- 0xB4AD, 0xB20C, 0xB4AE, 0xB214, 0xB4AF, 0xB215, 0xB4B0, 0xB217, 0xB4B1, 0xB219, 0xB4B2, 0xB220, 0xB4B3, 0xB234, 0xB4B4, 0xB23C,
- 0xB4B5, 0xB258, 0xB4B6, 0xB25C, 0xB4B7, 0xB260, 0xB4B8, 0xB268, 0xB4B9, 0xB269, 0xB4BA, 0xB274, 0xB4BB, 0xB275, 0xB4BC, 0xB27C,
- 0xB4BD, 0xB284, 0xB4BE, 0xB285, 0xB4BF, 0xB289, 0xB4C0, 0xB290, 0xB4C1, 0xB291, 0xB4C2, 0xB294, 0xB4C3, 0xB298, 0xB4C4, 0xB299,
- 0xB4C5, 0xB29A, 0xB4C6, 0xB2A0, 0xB4C7, 0xB2A1, 0xB4C8, 0xB2A3, 0xB4C9, 0xB2A5, 0xB4CA, 0xB2A6, 0xB4CB, 0xB2AA, 0xB4CC, 0xB2AC,
- 0xB4CD, 0xB2B0, 0xB4CE, 0xB2B4, 0xB4CF, 0xB2C8, 0xB4D0, 0xB2C9, 0xB4D1, 0xB2CC, 0xB4D2, 0xB2D0, 0xB4D3, 0xB2D2, 0xB4D4, 0xB2D8,
- 0xB4D5, 0xB2D9, 0xB4D6, 0xB2DB, 0xB4D7, 0xB2DD, 0xB4D8, 0xB2E2, 0xB4D9, 0xB2E4, 0xB4DA, 0xB2E5, 0xB4DB, 0xB2E6, 0xB4DC, 0xB2E8,
- 0xB4DD, 0xB2EB, 0xB4DE, 0xB2EC, 0xB4DF, 0xB2ED, 0xB4E0, 0xB2EE, 0xB4E1, 0xB2EF, 0xB4E2, 0xB2F3, 0xB4E3, 0xB2F4, 0xB4E4, 0xB2F5,
- 0xB4E5, 0xB2F7, 0xB4E6, 0xB2F8, 0xB4E7, 0xB2F9, 0xB4E8, 0xB2FA, 0xB4E9, 0xB2FB, 0xB4EA, 0xB2FF, 0xB4EB, 0xB300, 0xB4EC, 0xB301,
- 0xB4ED, 0xB304, 0xB4EE, 0xB308, 0xB4EF, 0xB310, 0xB4F0, 0xB311, 0xB4F1, 0xB313, 0xB4F2, 0xB314, 0xB4F3, 0xB315, 0xB4F4, 0xB31C,
- 0xB4F5, 0xB354, 0xB4F6, 0xB355, 0xB4F7, 0xB356, 0xB4F8, 0xB358, 0xB4F9, 0xB35B, 0xB4FA, 0xB35C, 0xB4FB, 0xB35E, 0xB4FC, 0xB35F,
- 0xB4FD, 0xB364, 0xB4FE, 0xB365, 0xB541, 0xD095, 0xB542, 0xD096, 0xB543, 0xD097, 0xB544, 0xD098, 0xB545, 0xD099, 0xB546, 0xD09A,
- 0xB547, 0xD09B, 0xB548, 0xD09C, 0xB549, 0xD09D, 0xB54A, 0xD09E, 0xB54B, 0xD09F, 0xB54C, 0xD0A0, 0xB54D, 0xD0A1, 0xB54E, 0xD0A2,
- 0xB54F, 0xD0A3, 0xB550, 0xD0A6, 0xB551, 0xD0A7, 0xB552, 0xD0A9, 0xB553, 0xD0AA, 0xB554, 0xD0AB, 0xB555, 0xD0AD, 0xB556, 0xD0AE,
- 0xB557, 0xD0AF, 0xB558, 0xD0B0, 0xB559, 0xD0B1, 0xB55A, 0xD0B2, 0xB561, 0xD0B3, 0xB562, 0xD0B6, 0xB563, 0xD0B8, 0xB564, 0xD0BA,
- 0xB565, 0xD0BB, 0xB566, 0xD0BC, 0xB567, 0xD0BD, 0xB568, 0xD0BE, 0xB569, 0xD0BF, 0xB56A, 0xD0C2, 0xB56B, 0xD0C3, 0xB56C, 0xD0C5,
- 0xB56D, 0xD0C6, 0xB56E, 0xD0C7, 0xB56F, 0xD0CA, 0xB570, 0xD0CB, 0xB571, 0xD0CC, 0xB572, 0xD0CD, 0xB573, 0xD0CE, 0xB574, 0xD0CF,
- 0xB575, 0xD0D2, 0xB576, 0xD0D6, 0xB577, 0xD0D7, 0xB578, 0xD0D8, 0xB579, 0xD0D9, 0xB57A, 0xD0DA, 0xB581, 0xD0DB, 0xB582, 0xD0DE,
- 0xB583, 0xD0DF, 0xB584, 0xD0E1, 0xB585, 0xD0E2, 0xB586, 0xD0E3, 0xB587, 0xD0E5, 0xB588, 0xD0E6, 0xB589, 0xD0E7, 0xB58A, 0xD0E8,
- 0xB58B, 0xD0E9, 0xB58C, 0xD0EA, 0xB58D, 0xD0EB, 0xB58E, 0xD0EE, 0xB58F, 0xD0F2, 0xB590, 0xD0F3, 0xB591, 0xD0F4, 0xB592, 0xD0F5,
- 0xB593, 0xD0F6, 0xB594, 0xD0F7, 0xB595, 0xD0F9, 0xB596, 0xD0FA, 0xB597, 0xD0FB, 0xB598, 0xD0FC, 0xB599, 0xD0FD, 0xB59A, 0xD0FE,
- 0xB59B, 0xD0FF, 0xB59C, 0xD100, 0xB59D, 0xD101, 0xB59E, 0xD102, 0xB59F, 0xD103, 0xB5A0, 0xD104, 0xB5A1, 0xB367, 0xB5A2, 0xB369,
- 0xB5A3, 0xB36B, 0xB5A4, 0xB36E, 0xB5A5, 0xB370, 0xB5A6, 0xB371, 0xB5A7, 0xB374, 0xB5A8, 0xB378, 0xB5A9, 0xB380, 0xB5AA, 0xB381,
- 0xB5AB, 0xB383, 0xB5AC, 0xB384, 0xB5AD, 0xB385, 0xB5AE, 0xB38C, 0xB5AF, 0xB390, 0xB5B0, 0xB394, 0xB5B1, 0xB3A0, 0xB5B2, 0xB3A1,
- 0xB5B3, 0xB3A8, 0xB5B4, 0xB3AC, 0xB5B5, 0xB3C4, 0xB5B6, 0xB3C5, 0xB5B7, 0xB3C8, 0xB5B8, 0xB3CB, 0xB5B9, 0xB3CC, 0xB5BA, 0xB3CE,
- 0xB5BB, 0xB3D0, 0xB5BC, 0xB3D4, 0xB5BD, 0xB3D5, 0xB5BE, 0xB3D7, 0xB5BF, 0xB3D9, 0xB5C0, 0xB3DB, 0xB5C1, 0xB3DD, 0xB5C2, 0xB3E0,
- 0xB5C3, 0xB3E4, 0xB5C4, 0xB3E8, 0xB5C5, 0xB3FC, 0xB5C6, 0xB410, 0xB5C7, 0xB418, 0xB5C8, 0xB41C, 0xB5C9, 0xB420, 0xB5CA, 0xB428,
- 0xB5CB, 0xB429, 0xB5CC, 0xB42B, 0xB5CD, 0xB434, 0xB5CE, 0xB450, 0xB5CF, 0xB451, 0xB5D0, 0xB454, 0xB5D1, 0xB458, 0xB5D2, 0xB460,
- 0xB5D3, 0xB461, 0xB5D4, 0xB463, 0xB5D5, 0xB465, 0xB5D6, 0xB46C, 0xB5D7, 0xB480, 0xB5D8, 0xB488, 0xB5D9, 0xB49D, 0xB5DA, 0xB4A4,
- 0xB5DB, 0xB4A8, 0xB5DC, 0xB4AC, 0xB5DD, 0xB4B5, 0xB5DE, 0xB4B7, 0xB5DF, 0xB4B9, 0xB5E0, 0xB4C0, 0xB5E1, 0xB4C4, 0xB5E2, 0xB4C8,
- 0xB5E3, 0xB4D0, 0xB5E4, 0xB4D5, 0xB5E5, 0xB4DC, 0xB5E6, 0xB4DD, 0xB5E7, 0xB4E0, 0xB5E8, 0xB4E3, 0xB5E9, 0xB4E4, 0xB5EA, 0xB4E6,
- 0xB5EB, 0xB4EC, 0xB5EC, 0xB4ED, 0xB5ED, 0xB4EF, 0xB5EE, 0xB4F1, 0xB5EF, 0xB4F8, 0xB5F0, 0xB514, 0xB5F1, 0xB515, 0xB5F2, 0xB518,
- 0xB5F3, 0xB51B, 0xB5F4, 0xB51C, 0xB5F5, 0xB524, 0xB5F6, 0xB525, 0xB5F7, 0xB527, 0xB5F8, 0xB528, 0xB5F9, 0xB529, 0xB5FA, 0xB52A,
- 0xB5FB, 0xB530, 0xB5FC, 0xB531, 0xB5FD, 0xB534, 0xB5FE, 0xB538, 0xB641, 0xD105, 0xB642, 0xD106, 0xB643, 0xD107, 0xB644, 0xD108,
- 0xB645, 0xD109, 0xB646, 0xD10A, 0xB647, 0xD10B, 0xB648, 0xD10C, 0xB649, 0xD10E, 0xB64A, 0xD10F, 0xB64B, 0xD110, 0xB64C, 0xD111,
- 0xB64D, 0xD112, 0xB64E, 0xD113, 0xB64F, 0xD114, 0xB650, 0xD115, 0xB651, 0xD116, 0xB652, 0xD117, 0xB653, 0xD118, 0xB654, 0xD119,
- 0xB655, 0xD11A, 0xB656, 0xD11B, 0xB657, 0xD11C, 0xB658, 0xD11D, 0xB659, 0xD11E, 0xB65A, 0xD11F, 0xB661, 0xD120, 0xB662, 0xD121,
- 0xB663, 0xD122, 0xB664, 0xD123, 0xB665, 0xD124, 0xB666, 0xD125, 0xB667, 0xD126, 0xB668, 0xD127, 0xB669, 0xD128, 0xB66A, 0xD129,
- 0xB66B, 0xD12A, 0xB66C, 0xD12B, 0xB66D, 0xD12C, 0xB66E, 0xD12D, 0xB66F, 0xD12E, 0xB670, 0xD12F, 0xB671, 0xD132, 0xB672, 0xD133,
- 0xB673, 0xD135, 0xB674, 0xD136, 0xB675, 0xD137, 0xB676, 0xD139, 0xB677, 0xD13B, 0xB678, 0xD13C, 0xB679, 0xD13D, 0xB67A, 0xD13E,
- 0xB681, 0xD13F, 0xB682, 0xD142, 0xB683, 0xD146, 0xB684, 0xD147, 0xB685, 0xD148, 0xB686, 0xD149, 0xB687, 0xD14A, 0xB688, 0xD14B,
- 0xB689, 0xD14E, 0xB68A, 0xD14F, 0xB68B, 0xD151, 0xB68C, 0xD152, 0xB68D, 0xD153, 0xB68E, 0xD155, 0xB68F, 0xD156, 0xB690, 0xD157,
- 0xB691, 0xD158, 0xB692, 0xD159, 0xB693, 0xD15A, 0xB694, 0xD15B, 0xB695, 0xD15E, 0xB696, 0xD160, 0xB697, 0xD162, 0xB698, 0xD163,
- 0xB699, 0xD164, 0xB69A, 0xD165, 0xB69B, 0xD166, 0xB69C, 0xD167, 0xB69D, 0xD169, 0xB69E, 0xD16A, 0xB69F, 0xD16B, 0xB6A0, 0xD16D,
- 0xB6A1, 0xB540, 0xB6A2, 0xB541, 0xB6A3, 0xB543, 0xB6A4, 0xB544, 0xB6A5, 0xB545, 0xB6A6, 0xB54B, 0xB6A7, 0xB54C, 0xB6A8, 0xB54D,
- 0xB6A9, 0xB550, 0xB6AA, 0xB554, 0xB6AB, 0xB55C, 0xB6AC, 0xB55D, 0xB6AD, 0xB55F, 0xB6AE, 0xB560, 0xB6AF, 0xB561, 0xB6B0, 0xB5A0,
- 0xB6B1, 0xB5A1, 0xB6B2, 0xB5A4, 0xB6B3, 0xB5A8, 0xB6B4, 0xB5AA, 0xB6B5, 0xB5AB, 0xB6B6, 0xB5B0, 0xB6B7, 0xB5B1, 0xB6B8, 0xB5B3,
- 0xB6B9, 0xB5B4, 0xB6BA, 0xB5B5, 0xB6BB, 0xB5BB, 0xB6BC, 0xB5BC, 0xB6BD, 0xB5BD, 0xB6BE, 0xB5C0, 0xB6BF, 0xB5C4, 0xB6C0, 0xB5CC,
- 0xB6C1, 0xB5CD, 0xB6C2, 0xB5CF, 0xB6C3, 0xB5D0, 0xB6C4, 0xB5D1, 0xB6C5, 0xB5D8, 0xB6C6, 0xB5EC, 0xB6C7, 0xB610, 0xB6C8, 0xB611,
- 0xB6C9, 0xB614, 0xB6CA, 0xB618, 0xB6CB, 0xB625, 0xB6CC, 0xB62C, 0xB6CD, 0xB634, 0xB6CE, 0xB648, 0xB6CF, 0xB664, 0xB6D0, 0xB668,
- 0xB6D1, 0xB69C, 0xB6D2, 0xB69D, 0xB6D3, 0xB6A0, 0xB6D4, 0xB6A4, 0xB6D5, 0xB6AB, 0xB6D6, 0xB6AC, 0xB6D7, 0xB6B1, 0xB6D8, 0xB6D4,
- 0xB6D9, 0xB6F0, 0xB6DA, 0xB6F4, 0xB6DB, 0xB6F8, 0xB6DC, 0xB700, 0xB6DD, 0xB701, 0xB6DE, 0xB705, 0xB6DF, 0xB728, 0xB6E0, 0xB729,
- 0xB6E1, 0xB72C, 0xB6E2, 0xB72F, 0xB6E3, 0xB730, 0xB6E4, 0xB738, 0xB6E5, 0xB739, 0xB6E6, 0xB73B, 0xB6E7, 0xB744, 0xB6E8, 0xB748,
- 0xB6E9, 0xB74C, 0xB6EA, 0xB754, 0xB6EB, 0xB755, 0xB6EC, 0xB760, 0xB6ED, 0xB764, 0xB6EE, 0xB768, 0xB6EF, 0xB770, 0xB6F0, 0xB771,
- 0xB6F1, 0xB773, 0xB6F2, 0xB775, 0xB6F3, 0xB77C, 0xB6F4, 0xB77D, 0xB6F5, 0xB780, 0xB6F6, 0xB784, 0xB6F7, 0xB78C, 0xB6F8, 0xB78D,
- 0xB6F9, 0xB78F, 0xB6FA, 0xB790, 0xB6FB, 0xB791, 0xB6FC, 0xB792, 0xB6FD, 0xB796, 0xB6FE, 0xB797, 0xB741, 0xD16E, 0xB742, 0xD16F,
- 0xB743, 0xD170, 0xB744, 0xD171, 0xB745, 0xD172, 0xB746, 0xD173, 0xB747, 0xD174, 0xB748, 0xD175, 0xB749, 0xD176, 0xB74A, 0xD177,
- 0xB74B, 0xD178, 0xB74C, 0xD179, 0xB74D, 0xD17A, 0xB74E, 0xD17B, 0xB74F, 0xD17D, 0xB750, 0xD17E, 0xB751, 0xD17F, 0xB752, 0xD180,
- 0xB753, 0xD181, 0xB754, 0xD182, 0xB755, 0xD183, 0xB756, 0xD185, 0xB757, 0xD186, 0xB758, 0xD187, 0xB759, 0xD189, 0xB75A, 0xD18A,
- 0xB761, 0xD18B, 0xB762, 0xD18C, 0xB763, 0xD18D, 0xB764, 0xD18E, 0xB765, 0xD18F, 0xB766, 0xD190, 0xB767, 0xD191, 0xB768, 0xD192,
- 0xB769, 0xD193, 0xB76A, 0xD194, 0xB76B, 0xD195, 0xB76C, 0xD196, 0xB76D, 0xD197, 0xB76E, 0xD198, 0xB76F, 0xD199, 0xB770, 0xD19A,
- 0xB771, 0xD19B, 0xB772, 0xD19C, 0xB773, 0xD19D, 0xB774, 0xD19E, 0xB775, 0xD19F, 0xB776, 0xD1A2, 0xB777, 0xD1A3, 0xB778, 0xD1A5,
- 0xB779, 0xD1A6, 0xB77A, 0xD1A7, 0xB781, 0xD1A9, 0xB782, 0xD1AA, 0xB783, 0xD1AB, 0xB784, 0xD1AC, 0xB785, 0xD1AD, 0xB786, 0xD1AE,
- 0xB787, 0xD1AF, 0xB788, 0xD1B2, 0xB789, 0xD1B4, 0xB78A, 0xD1B6, 0xB78B, 0xD1B7, 0xB78C, 0xD1B8, 0xB78D, 0xD1B9, 0xB78E, 0xD1BB,
- 0xB78F, 0xD1BD, 0xB790, 0xD1BE, 0xB791, 0xD1BF, 0xB792, 0xD1C1, 0xB793, 0xD1C2, 0xB794, 0xD1C3, 0xB795, 0xD1C4, 0xB796, 0xD1C5,
- 0xB797, 0xD1C6, 0xB798, 0xD1C7, 0xB799, 0xD1C8, 0xB79A, 0xD1C9, 0xB79B, 0xD1CA, 0xB79C, 0xD1CB, 0xB79D, 0xD1CC, 0xB79E, 0xD1CD,
- 0xB79F, 0xD1CE, 0xB7A0, 0xD1CF, 0xB7A1, 0xB798, 0xB7A2, 0xB799, 0xB7A3, 0xB79C, 0xB7A4, 0xB7A0, 0xB7A5, 0xB7A8, 0xB7A6, 0xB7A9,
- 0xB7A7, 0xB7AB, 0xB7A8, 0xB7AC, 0xB7A9, 0xB7AD, 0xB7AA, 0xB7B4, 0xB7AB, 0xB7B5, 0xB7AC, 0xB7B8, 0xB7AD, 0xB7C7, 0xB7AE, 0xB7C9,
- 0xB7AF, 0xB7EC, 0xB7B0, 0xB7ED, 0xB7B1, 0xB7F0, 0xB7B2, 0xB7F4, 0xB7B3, 0xB7FC, 0xB7B4, 0xB7FD, 0xB7B5, 0xB7FF, 0xB7B6, 0xB800,
- 0xB7B7, 0xB801, 0xB7B8, 0xB807, 0xB7B9, 0xB808, 0xB7BA, 0xB809, 0xB7BB, 0xB80C, 0xB7BC, 0xB810, 0xB7BD, 0xB818, 0xB7BE, 0xB819,
- 0xB7BF, 0xB81B, 0xB7C0, 0xB81D, 0xB7C1, 0xB824, 0xB7C2, 0xB825, 0xB7C3, 0xB828, 0xB7C4, 0xB82C, 0xB7C5, 0xB834, 0xB7C6, 0xB835,
- 0xB7C7, 0xB837, 0xB7C8, 0xB838, 0xB7C9, 0xB839, 0xB7CA, 0xB840, 0xB7CB, 0xB844, 0xB7CC, 0xB851, 0xB7CD, 0xB853, 0xB7CE, 0xB85C,
- 0xB7CF, 0xB85D, 0xB7D0, 0xB860, 0xB7D1, 0xB864, 0xB7D2, 0xB86C, 0xB7D3, 0xB86D, 0xB7D4, 0xB86F, 0xB7D5, 0xB871, 0xB7D6, 0xB878,
- 0xB7D7, 0xB87C, 0xB7D8, 0xB88D, 0xB7D9, 0xB8A8, 0xB7DA, 0xB8B0, 0xB7DB, 0xB8B4, 0xB7DC, 0xB8B8, 0xB7DD, 0xB8C0, 0xB7DE, 0xB8C1,
- 0xB7DF, 0xB8C3, 0xB7E0, 0xB8C5, 0xB7E1, 0xB8CC, 0xB7E2, 0xB8D0, 0xB7E3, 0xB8D4, 0xB7E4, 0xB8DD, 0xB7E5, 0xB8DF, 0xB7E6, 0xB8E1,
- 0xB7E7, 0xB8E8, 0xB7E8, 0xB8E9, 0xB7E9, 0xB8EC, 0xB7EA, 0xB8F0, 0xB7EB, 0xB8F8, 0xB7EC, 0xB8F9, 0xB7ED, 0xB8FB, 0xB7EE, 0xB8FD,
- 0xB7EF, 0xB904, 0xB7F0, 0xB918, 0xB7F1, 0xB920, 0xB7F2, 0xB93C, 0xB7F3, 0xB93D, 0xB7F4, 0xB940, 0xB7F5, 0xB944, 0xB7F6, 0xB94C,
- 0xB7F7, 0xB94F, 0xB7F8, 0xB951, 0xB7F9, 0xB958, 0xB7FA, 0xB959, 0xB7FB, 0xB95C, 0xB7FC, 0xB960, 0xB7FD, 0xB968, 0xB7FE, 0xB969,
- 0xB841, 0xD1D0, 0xB842, 0xD1D1, 0xB843, 0xD1D2, 0xB844, 0xD1D3, 0xB845, 0xD1D4, 0xB846, 0xD1D5, 0xB847, 0xD1D6, 0xB848, 0xD1D7,
- 0xB849, 0xD1D9, 0xB84A, 0xD1DA, 0xB84B, 0xD1DB, 0xB84C, 0xD1DC, 0xB84D, 0xD1DD, 0xB84E, 0xD1DE, 0xB84F, 0xD1DF, 0xB850, 0xD1E0,
- 0xB851, 0xD1E1, 0xB852, 0xD1E2, 0xB853, 0xD1E3, 0xB854, 0xD1E4, 0xB855, 0xD1E5, 0xB856, 0xD1E6, 0xB857, 0xD1E7, 0xB858, 0xD1E8,
- 0xB859, 0xD1E9, 0xB85A, 0xD1EA, 0xB861, 0xD1EB, 0xB862, 0xD1EC, 0xB863, 0xD1ED, 0xB864, 0xD1EE, 0xB865, 0xD1EF, 0xB866, 0xD1F0,
- 0xB867, 0xD1F1, 0xB868, 0xD1F2, 0xB869, 0xD1F3, 0xB86A, 0xD1F5, 0xB86B, 0xD1F6, 0xB86C, 0xD1F7, 0xB86D, 0xD1F9, 0xB86E, 0xD1FA,
- 0xB86F, 0xD1FB, 0xB870, 0xD1FC, 0xB871, 0xD1FD, 0xB872, 0xD1FE, 0xB873, 0xD1FF, 0xB874, 0xD200, 0xB875, 0xD201, 0xB876, 0xD202,
- 0xB877, 0xD203, 0xB878, 0xD204, 0xB879, 0xD205, 0xB87A, 0xD206, 0xB881, 0xD208, 0xB882, 0xD20A, 0xB883, 0xD20B, 0xB884, 0xD20C,
- 0xB885, 0xD20D, 0xB886, 0xD20E, 0xB887, 0xD20F, 0xB888, 0xD211, 0xB889, 0xD212, 0xB88A, 0xD213, 0xB88B, 0xD214, 0xB88C, 0xD215,
- 0xB88D, 0xD216, 0xB88E, 0xD217, 0xB88F, 0xD218, 0xB890, 0xD219, 0xB891, 0xD21A, 0xB892, 0xD21B, 0xB893, 0xD21C, 0xB894, 0xD21D,
- 0xB895, 0xD21E, 0xB896, 0xD21F, 0xB897, 0xD220, 0xB898, 0xD221, 0xB899, 0xD222, 0xB89A, 0xD223, 0xB89B, 0xD224, 0xB89C, 0xD225,
- 0xB89D, 0xD226, 0xB89E, 0xD227, 0xB89F, 0xD228, 0xB8A0, 0xD229, 0xB8A1, 0xB96B, 0xB8A2, 0xB96D, 0xB8A3, 0xB974, 0xB8A4, 0xB975,
- 0xB8A5, 0xB978, 0xB8A6, 0xB97C, 0xB8A7, 0xB984, 0xB8A8, 0xB985, 0xB8A9, 0xB987, 0xB8AA, 0xB989, 0xB8AB, 0xB98A, 0xB8AC, 0xB98D,
- 0xB8AD, 0xB98E, 0xB8AE, 0xB9AC, 0xB8AF, 0xB9AD, 0xB8B0, 0xB9B0, 0xB8B1, 0xB9B4, 0xB8B2, 0xB9BC, 0xB8B3, 0xB9BD, 0xB8B4, 0xB9BF,
- 0xB8B5, 0xB9C1, 0xB8B6, 0xB9C8, 0xB8B7, 0xB9C9, 0xB8B8, 0xB9CC, 0xB8B9, 0xB9CE, 0xB8BA, 0xB9CF, 0xB8BB, 0xB9D0, 0xB8BC, 0xB9D1,
- 0xB8BD, 0xB9D2, 0xB8BE, 0xB9D8, 0xB8BF, 0xB9D9, 0xB8C0, 0xB9DB, 0xB8C1, 0xB9DD, 0xB8C2, 0xB9DE, 0xB8C3, 0xB9E1, 0xB8C4, 0xB9E3,
- 0xB8C5, 0xB9E4, 0xB8C6, 0xB9E5, 0xB8C7, 0xB9E8, 0xB8C8, 0xB9EC, 0xB8C9, 0xB9F4, 0xB8CA, 0xB9F5, 0xB8CB, 0xB9F7, 0xB8CC, 0xB9F8,
- 0xB8CD, 0xB9F9, 0xB8CE, 0xB9FA, 0xB8CF, 0xBA00, 0xB8D0, 0xBA01, 0xB8D1, 0xBA08, 0xB8D2, 0xBA15, 0xB8D3, 0xBA38, 0xB8D4, 0xBA39,
- 0xB8D5, 0xBA3C, 0xB8D6, 0xBA40, 0xB8D7, 0xBA42, 0xB8D8, 0xBA48, 0xB8D9, 0xBA49, 0xB8DA, 0xBA4B, 0xB8DB, 0xBA4D, 0xB8DC, 0xBA4E,
- 0xB8DD, 0xBA53, 0xB8DE, 0xBA54, 0xB8DF, 0xBA55, 0xB8E0, 0xBA58, 0xB8E1, 0xBA5C, 0xB8E2, 0xBA64, 0xB8E3, 0xBA65, 0xB8E4, 0xBA67,
- 0xB8E5, 0xBA68, 0xB8E6, 0xBA69, 0xB8E7, 0xBA70, 0xB8E8, 0xBA71, 0xB8E9, 0xBA74, 0xB8EA, 0xBA78, 0xB8EB, 0xBA83, 0xB8EC, 0xBA84,
- 0xB8ED, 0xBA85, 0xB8EE, 0xBA87, 0xB8EF, 0xBA8C, 0xB8F0, 0xBAA8, 0xB8F1, 0xBAA9, 0xB8F2, 0xBAAB, 0xB8F3, 0xBAAC, 0xB8F4, 0xBAB0,
- 0xB8F5, 0xBAB2, 0xB8F6, 0xBAB8, 0xB8F7, 0xBAB9, 0xB8F8, 0xBABB, 0xB8F9, 0xBABD, 0xB8FA, 0xBAC4, 0xB8FB, 0xBAC8, 0xB8FC, 0xBAD8,
- 0xB8FD, 0xBAD9, 0xB8FE, 0xBAFC, 0xB941, 0xD22A, 0xB942, 0xD22B, 0xB943, 0xD22E, 0xB944, 0xD22F, 0xB945, 0xD231, 0xB946, 0xD232,
- 0xB947, 0xD233, 0xB948, 0xD235, 0xB949, 0xD236, 0xB94A, 0xD237, 0xB94B, 0xD238, 0xB94C, 0xD239, 0xB94D, 0xD23A, 0xB94E, 0xD23B,
- 0xB94F, 0xD23E, 0xB950, 0xD240, 0xB951, 0xD242, 0xB952, 0xD243, 0xB953, 0xD244, 0xB954, 0xD245, 0xB955, 0xD246, 0xB956, 0xD247,
- 0xB957, 0xD249, 0xB958, 0xD24A, 0xB959, 0xD24B, 0xB95A, 0xD24C, 0xB961, 0xD24D, 0xB962, 0xD24E, 0xB963, 0xD24F, 0xB964, 0xD250,
- 0xB965, 0xD251, 0xB966, 0xD252, 0xB967, 0xD253, 0xB968, 0xD254, 0xB969, 0xD255, 0xB96A, 0xD256, 0xB96B, 0xD257, 0xB96C, 0xD258,
- 0xB96D, 0xD259, 0xB96E, 0xD25A, 0xB96F, 0xD25B, 0xB970, 0xD25D, 0xB971, 0xD25E, 0xB972, 0xD25F, 0xB973, 0xD260, 0xB974, 0xD261,
- 0xB975, 0xD262, 0xB976, 0xD263, 0xB977, 0xD265, 0xB978, 0xD266, 0xB979, 0xD267, 0xB97A, 0xD268, 0xB981, 0xD269, 0xB982, 0xD26A,
- 0xB983, 0xD26B, 0xB984, 0xD26C, 0xB985, 0xD26D, 0xB986, 0xD26E, 0xB987, 0xD26F, 0xB988, 0xD270, 0xB989, 0xD271, 0xB98A, 0xD272,
- 0xB98B, 0xD273, 0xB98C, 0xD274, 0xB98D, 0xD275, 0xB98E, 0xD276, 0xB98F, 0xD277, 0xB990, 0xD278, 0xB991, 0xD279, 0xB992, 0xD27A,
- 0xB993, 0xD27B, 0xB994, 0xD27C, 0xB995, 0xD27D, 0xB996, 0xD27E, 0xB997, 0xD27F, 0xB998, 0xD282, 0xB999, 0xD283, 0xB99A, 0xD285,
- 0xB99B, 0xD286, 0xB99C, 0xD287, 0xB99D, 0xD289, 0xB99E, 0xD28A, 0xB99F, 0xD28B, 0xB9A0, 0xD28C, 0xB9A1, 0xBB00, 0xB9A2, 0xBB04,
- 0xB9A3, 0xBB0D, 0xB9A4, 0xBB0F, 0xB9A5, 0xBB11, 0xB9A6, 0xBB18, 0xB9A7, 0xBB1C, 0xB9A8, 0xBB20, 0xB9A9, 0xBB29, 0xB9AA, 0xBB2B,
- 0xB9AB, 0xBB34, 0xB9AC, 0xBB35, 0xB9AD, 0xBB36, 0xB9AE, 0xBB38, 0xB9AF, 0xBB3B, 0xB9B0, 0xBB3C, 0xB9B1, 0xBB3D, 0xB9B2, 0xBB3E,
- 0xB9B3, 0xBB44, 0xB9B4, 0xBB45, 0xB9B5, 0xBB47, 0xB9B6, 0xBB49, 0xB9B7, 0xBB4D, 0xB9B8, 0xBB4F, 0xB9B9, 0xBB50, 0xB9BA, 0xBB54,
- 0xB9BB, 0xBB58, 0xB9BC, 0xBB61, 0xB9BD, 0xBB63, 0xB9BE, 0xBB6C, 0xB9BF, 0xBB88, 0xB9C0, 0xBB8C, 0xB9C1, 0xBB90, 0xB9C2, 0xBBA4,
- 0xB9C3, 0xBBA8, 0xB9C4, 0xBBAC, 0xB9C5, 0xBBB4, 0xB9C6, 0xBBB7, 0xB9C7, 0xBBC0, 0xB9C8, 0xBBC4, 0xB9C9, 0xBBC8, 0xB9CA, 0xBBD0,
- 0xB9CB, 0xBBD3, 0xB9CC, 0xBBF8, 0xB9CD, 0xBBF9, 0xB9CE, 0xBBFC, 0xB9CF, 0xBBFF, 0xB9D0, 0xBC00, 0xB9D1, 0xBC02, 0xB9D2, 0xBC08,
- 0xB9D3, 0xBC09, 0xB9D4, 0xBC0B, 0xB9D5, 0xBC0C, 0xB9D6, 0xBC0D, 0xB9D7, 0xBC0F, 0xB9D8, 0xBC11, 0xB9D9, 0xBC14, 0xB9DA, 0xBC15,
- 0xB9DB, 0xBC16, 0xB9DC, 0xBC17, 0xB9DD, 0xBC18, 0xB9DE, 0xBC1B, 0xB9DF, 0xBC1C, 0xB9E0, 0xBC1D, 0xB9E1, 0xBC1E, 0xB9E2, 0xBC1F,
- 0xB9E3, 0xBC24, 0xB9E4, 0xBC25, 0xB9E5, 0xBC27, 0xB9E6, 0xBC29, 0xB9E7, 0xBC2D, 0xB9E8, 0xBC30, 0xB9E9, 0xBC31, 0xB9EA, 0xBC34,
- 0xB9EB, 0xBC38, 0xB9EC, 0xBC40, 0xB9ED, 0xBC41, 0xB9EE, 0xBC43, 0xB9EF, 0xBC44, 0xB9F0, 0xBC45, 0xB9F1, 0xBC49, 0xB9F2, 0xBC4C,
- 0xB9F3, 0xBC4D, 0xB9F4, 0xBC50, 0xB9F5, 0xBC5D, 0xB9F6, 0xBC84, 0xB9F7, 0xBC85, 0xB9F8, 0xBC88, 0xB9F9, 0xBC8B, 0xB9FA, 0xBC8C,
- 0xB9FB, 0xBC8E, 0xB9FC, 0xBC94, 0xB9FD, 0xBC95, 0xB9FE, 0xBC97, 0xBA41, 0xD28D, 0xBA42, 0xD28E, 0xBA43, 0xD28F, 0xBA44, 0xD292,
- 0xBA45, 0xD293, 0xBA46, 0xD294, 0xBA47, 0xD296, 0xBA48, 0xD297, 0xBA49, 0xD298, 0xBA4A, 0xD299, 0xBA4B, 0xD29A, 0xBA4C, 0xD29B,
- 0xBA4D, 0xD29D, 0xBA4E, 0xD29E, 0xBA4F, 0xD29F, 0xBA50, 0xD2A1, 0xBA51, 0xD2A2, 0xBA52, 0xD2A3, 0xBA53, 0xD2A5, 0xBA54, 0xD2A6,
- 0xBA55, 0xD2A7, 0xBA56, 0xD2A8, 0xBA57, 0xD2A9, 0xBA58, 0xD2AA, 0xBA59, 0xD2AB, 0xBA5A, 0xD2AD, 0xBA61, 0xD2AE, 0xBA62, 0xD2AF,
- 0xBA63, 0xD2B0, 0xBA64, 0xD2B2, 0xBA65, 0xD2B3, 0xBA66, 0xD2B4, 0xBA67, 0xD2B5, 0xBA68, 0xD2B6, 0xBA69, 0xD2B7, 0xBA6A, 0xD2BA,
- 0xBA6B, 0xD2BB, 0xBA6C, 0xD2BD, 0xBA6D, 0xD2BE, 0xBA6E, 0xD2C1, 0xBA6F, 0xD2C3, 0xBA70, 0xD2C4, 0xBA71, 0xD2C5, 0xBA72, 0xD2C6,
- 0xBA73, 0xD2C7, 0xBA74, 0xD2CA, 0xBA75, 0xD2CC, 0xBA76, 0xD2CD, 0xBA77, 0xD2CE, 0xBA78, 0xD2CF, 0xBA79, 0xD2D0, 0xBA7A, 0xD2D1,
- 0xBA81, 0xD2D2, 0xBA82, 0xD2D3, 0xBA83, 0xD2D5, 0xBA84, 0xD2D6, 0xBA85, 0xD2D7, 0xBA86, 0xD2D9, 0xBA87, 0xD2DA, 0xBA88, 0xD2DB,
- 0xBA89, 0xD2DD, 0xBA8A, 0xD2DE, 0xBA8B, 0xD2DF, 0xBA8C, 0xD2E0, 0xBA8D, 0xD2E1, 0xBA8E, 0xD2E2, 0xBA8F, 0xD2E3, 0xBA90, 0xD2E6,
- 0xBA91, 0xD2E7, 0xBA92, 0xD2E8, 0xBA93, 0xD2E9, 0xBA94, 0xD2EA, 0xBA95, 0xD2EB, 0xBA96, 0xD2EC, 0xBA97, 0xD2ED, 0xBA98, 0xD2EE,
- 0xBA99, 0xD2EF, 0xBA9A, 0xD2F2, 0xBA9B, 0xD2F3, 0xBA9C, 0xD2F5, 0xBA9D, 0xD2F6, 0xBA9E, 0xD2F7, 0xBA9F, 0xD2F9, 0xBAA0, 0xD2FA,
- 0xBAA1, 0xBC99, 0xBAA2, 0xBC9A, 0xBAA3, 0xBCA0, 0xBAA4, 0xBCA1, 0xBAA5, 0xBCA4, 0xBAA6, 0xBCA7, 0xBAA7, 0xBCA8, 0xBAA8, 0xBCB0,
- 0xBAA9, 0xBCB1, 0xBAAA, 0xBCB3, 0xBAAB, 0xBCB4, 0xBAAC, 0xBCB5, 0xBAAD, 0xBCBC, 0xBAAE, 0xBCBD, 0xBAAF, 0xBCC0, 0xBAB0, 0xBCC4,
- 0xBAB1, 0xBCCD, 0xBAB2, 0xBCCF, 0xBAB3, 0xBCD0, 0xBAB4, 0xBCD1, 0xBAB5, 0xBCD5, 0xBAB6, 0xBCD8, 0xBAB7, 0xBCDC, 0xBAB8, 0xBCF4,
- 0xBAB9, 0xBCF5, 0xBABA, 0xBCF6, 0xBABB, 0xBCF8, 0xBABC, 0xBCFC, 0xBABD, 0xBD04, 0xBABE, 0xBD05, 0xBABF, 0xBD07, 0xBAC0, 0xBD09,
- 0xBAC1, 0xBD10, 0xBAC2, 0xBD14, 0xBAC3, 0xBD24, 0xBAC4, 0xBD2C, 0xBAC5, 0xBD40, 0xBAC6, 0xBD48, 0xBAC7, 0xBD49, 0xBAC8, 0xBD4C,
- 0xBAC9, 0xBD50, 0xBACA, 0xBD58, 0xBACB, 0xBD59, 0xBACC, 0xBD64, 0xBACD, 0xBD68, 0xBACE, 0xBD80, 0xBACF, 0xBD81, 0xBAD0, 0xBD84,
- 0xBAD1, 0xBD87, 0xBAD2, 0xBD88, 0xBAD3, 0xBD89, 0xBAD4, 0xBD8A, 0xBAD5, 0xBD90, 0xBAD6, 0xBD91, 0xBAD7, 0xBD93, 0xBAD8, 0xBD95,
- 0xBAD9, 0xBD99, 0xBADA, 0xBD9A, 0xBADB, 0xBD9C, 0xBADC, 0xBDA4, 0xBADD, 0xBDB0, 0xBADE, 0xBDB8, 0xBADF, 0xBDD4, 0xBAE0, 0xBDD5,
- 0xBAE1, 0xBDD8, 0xBAE2, 0xBDDC, 0xBAE3, 0xBDE9, 0xBAE4, 0xBDF0, 0xBAE5, 0xBDF4, 0xBAE6, 0xBDF8, 0xBAE7, 0xBE00, 0xBAE8, 0xBE03,
- 0xBAE9, 0xBE05, 0xBAEA, 0xBE0C, 0xBAEB, 0xBE0D, 0xBAEC, 0xBE10, 0xBAED, 0xBE14, 0xBAEE, 0xBE1C, 0xBAEF, 0xBE1D, 0xBAF0, 0xBE1F,
- 0xBAF1, 0xBE44, 0xBAF2, 0xBE45, 0xBAF3, 0xBE48, 0xBAF4, 0xBE4C, 0xBAF5, 0xBE4E, 0xBAF6, 0xBE54, 0xBAF7, 0xBE55, 0xBAF8, 0xBE57,
- 0xBAF9, 0xBE59, 0xBAFA, 0xBE5A, 0xBAFB, 0xBE5B, 0xBAFC, 0xBE60, 0xBAFD, 0xBE61, 0xBAFE, 0xBE64, 0xBB41, 0xD2FB, 0xBB42, 0xD2FC,
- 0xBB43, 0xD2FD, 0xBB44, 0xD2FE, 0xBB45, 0xD2FF, 0xBB46, 0xD302, 0xBB47, 0xD304, 0xBB48, 0xD306, 0xBB49, 0xD307, 0xBB4A, 0xD308,
- 0xBB4B, 0xD309, 0xBB4C, 0xD30A, 0xBB4D, 0xD30B, 0xBB4E, 0xD30F, 0xBB4F, 0xD311, 0xBB50, 0xD312, 0xBB51, 0xD313, 0xBB52, 0xD315,
- 0xBB53, 0xD317, 0xBB54, 0xD318, 0xBB55, 0xD319, 0xBB56, 0xD31A, 0xBB57, 0xD31B, 0xBB58, 0xD31E, 0xBB59, 0xD322, 0xBB5A, 0xD323,
- 0xBB61, 0xD324, 0xBB62, 0xD326, 0xBB63, 0xD327, 0xBB64, 0xD32A, 0xBB65, 0xD32B, 0xBB66, 0xD32D, 0xBB67, 0xD32E, 0xBB68, 0xD32F,
- 0xBB69, 0xD331, 0xBB6A, 0xD332, 0xBB6B, 0xD333, 0xBB6C, 0xD334, 0xBB6D, 0xD335, 0xBB6E, 0xD336, 0xBB6F, 0xD337, 0xBB70, 0xD33A,
- 0xBB71, 0xD33E, 0xBB72, 0xD33F, 0xBB73, 0xD340, 0xBB74, 0xD341, 0xBB75, 0xD342, 0xBB76, 0xD343, 0xBB77, 0xD346, 0xBB78, 0xD347,
- 0xBB79, 0xD348, 0xBB7A, 0xD349, 0xBB81, 0xD34A, 0xBB82, 0xD34B, 0xBB83, 0xD34C, 0xBB84, 0xD34D, 0xBB85, 0xD34E, 0xBB86, 0xD34F,
- 0xBB87, 0xD350, 0xBB88, 0xD351, 0xBB89, 0xD352, 0xBB8A, 0xD353, 0xBB8B, 0xD354, 0xBB8C, 0xD355, 0xBB8D, 0xD356, 0xBB8E, 0xD357,
- 0xBB8F, 0xD358, 0xBB90, 0xD359, 0xBB91, 0xD35A, 0xBB92, 0xD35B, 0xBB93, 0xD35C, 0xBB94, 0xD35D, 0xBB95, 0xD35E, 0xBB96, 0xD35F,
- 0xBB97, 0xD360, 0xBB98, 0xD361, 0xBB99, 0xD362, 0xBB9A, 0xD363, 0xBB9B, 0xD364, 0xBB9C, 0xD365, 0xBB9D, 0xD366, 0xBB9E, 0xD367,
- 0xBB9F, 0xD368, 0xBBA0, 0xD369, 0xBBA1, 0xBE68, 0xBBA2, 0xBE6A, 0xBBA3, 0xBE70, 0xBBA4, 0xBE71, 0xBBA5, 0xBE73, 0xBBA6, 0xBE74,
- 0xBBA7, 0xBE75, 0xBBA8, 0xBE7B, 0xBBA9, 0xBE7C, 0xBBAA, 0xBE7D, 0xBBAB, 0xBE80, 0xBBAC, 0xBE84, 0xBBAD, 0xBE8C, 0xBBAE, 0xBE8D,
- 0xBBAF, 0xBE8F, 0xBBB0, 0xBE90, 0xBBB1, 0xBE91, 0xBBB2, 0xBE98, 0xBBB3, 0xBE99, 0xBBB4, 0xBEA8, 0xBBB5, 0xBED0, 0xBBB6, 0xBED1,
- 0xBBB7, 0xBED4, 0xBBB8, 0xBED7, 0xBBB9, 0xBED8, 0xBBBA, 0xBEE0, 0xBBBB, 0xBEE3, 0xBBBC, 0xBEE4, 0xBBBD, 0xBEE5, 0xBBBE, 0xBEEC,
- 0xBBBF, 0xBF01, 0xBBC0, 0xBF08, 0xBBC1, 0xBF09, 0xBBC2, 0xBF18, 0xBBC3, 0xBF19, 0xBBC4, 0xBF1B, 0xBBC5, 0xBF1C, 0xBBC6, 0xBF1D,
- 0xBBC7, 0xBF40, 0xBBC8, 0xBF41, 0xBBC9, 0xBF44, 0xBBCA, 0xBF48, 0xBBCB, 0xBF50, 0xBBCC, 0xBF51, 0xBBCD, 0xBF55, 0xBBCE, 0xBF94,
- 0xBBCF, 0xBFB0, 0xBBD0, 0xBFC5, 0xBBD1, 0xBFCC, 0xBBD2, 0xBFCD, 0xBBD3, 0xBFD0, 0xBBD4, 0xBFD4, 0xBBD5, 0xBFDC, 0xBBD6, 0xBFDF,
- 0xBBD7, 0xBFE1, 0xBBD8, 0xC03C, 0xBBD9, 0xC051, 0xBBDA, 0xC058, 0xBBDB, 0xC05C, 0xBBDC, 0xC060, 0xBBDD, 0xC068, 0xBBDE, 0xC069,
- 0xBBDF, 0xC090, 0xBBE0, 0xC091, 0xBBE1, 0xC094, 0xBBE2, 0xC098, 0xBBE3, 0xC0A0, 0xBBE4, 0xC0A1, 0xBBE5, 0xC0A3, 0xBBE6, 0xC0A5,
- 0xBBE7, 0xC0AC, 0xBBE8, 0xC0AD, 0xBBE9, 0xC0AF, 0xBBEA, 0xC0B0, 0xBBEB, 0xC0B3, 0xBBEC, 0xC0B4, 0xBBED, 0xC0B5, 0xBBEE, 0xC0B6,
- 0xBBEF, 0xC0BC, 0xBBF0, 0xC0BD, 0xBBF1, 0xC0BF, 0xBBF2, 0xC0C0, 0xBBF3, 0xC0C1, 0xBBF4, 0xC0C5, 0xBBF5, 0xC0C8, 0xBBF6, 0xC0C9,
- 0xBBF7, 0xC0CC, 0xBBF8, 0xC0D0, 0xBBF9, 0xC0D8, 0xBBFA, 0xC0D9, 0xBBFB, 0xC0DB, 0xBBFC, 0xC0DC, 0xBBFD, 0xC0DD, 0xBBFE, 0xC0E4,
- 0xBC41, 0xD36A, 0xBC42, 0xD36B, 0xBC43, 0xD36C, 0xBC44, 0xD36D, 0xBC45, 0xD36E, 0xBC46, 0xD36F, 0xBC47, 0xD370, 0xBC48, 0xD371,
- 0xBC49, 0xD372, 0xBC4A, 0xD373, 0xBC4B, 0xD374, 0xBC4C, 0xD375, 0xBC4D, 0xD376, 0xBC4E, 0xD377, 0xBC4F, 0xD378, 0xBC50, 0xD379,
- 0xBC51, 0xD37A, 0xBC52, 0xD37B, 0xBC53, 0xD37E, 0xBC54, 0xD37F, 0xBC55, 0xD381, 0xBC56, 0xD382, 0xBC57, 0xD383, 0xBC58, 0xD385,
- 0xBC59, 0xD386, 0xBC5A, 0xD387, 0xBC61, 0xD388, 0xBC62, 0xD389, 0xBC63, 0xD38A, 0xBC64, 0xD38B, 0xBC65, 0xD38E, 0xBC66, 0xD392,
- 0xBC67, 0xD393, 0xBC68, 0xD394, 0xBC69, 0xD395, 0xBC6A, 0xD396, 0xBC6B, 0xD397, 0xBC6C, 0xD39A, 0xBC6D, 0xD39B, 0xBC6E, 0xD39D,
- 0xBC6F, 0xD39E, 0xBC70, 0xD39F, 0xBC71, 0xD3A1, 0xBC72, 0xD3A2, 0xBC73, 0xD3A3, 0xBC74, 0xD3A4, 0xBC75, 0xD3A5, 0xBC76, 0xD3A6,
- 0xBC77, 0xD3A7, 0xBC78, 0xD3AA, 0xBC79, 0xD3AC, 0xBC7A, 0xD3AE, 0xBC81, 0xD3AF, 0xBC82, 0xD3B0, 0xBC83, 0xD3B1, 0xBC84, 0xD3B2,
- 0xBC85, 0xD3B3, 0xBC86, 0xD3B5, 0xBC87, 0xD3B6, 0xBC88, 0xD3B7, 0xBC89, 0xD3B9, 0xBC8A, 0xD3BA, 0xBC8B, 0xD3BB, 0xBC8C, 0xD3BD,
- 0xBC8D, 0xD3BE, 0xBC8E, 0xD3BF, 0xBC8F, 0xD3C0, 0xBC90, 0xD3C1, 0xBC91, 0xD3C2, 0xBC92, 0xD3C3, 0xBC93, 0xD3C6, 0xBC94, 0xD3C7,
- 0xBC95, 0xD3CA, 0xBC96, 0xD3CB, 0xBC97, 0xD3CC, 0xBC98, 0xD3CD, 0xBC99, 0xD3CE, 0xBC9A, 0xD3CF, 0xBC9B, 0xD3D1, 0xBC9C, 0xD3D2,
- 0xBC9D, 0xD3D3, 0xBC9E, 0xD3D4, 0xBC9F, 0xD3D5, 0xBCA0, 0xD3D6, 0xBCA1, 0xC0E5, 0xBCA2, 0xC0E8, 0xBCA3, 0xC0EC, 0xBCA4, 0xC0F4,
- 0xBCA5, 0xC0F5, 0xBCA6, 0xC0F7, 0xBCA7, 0xC0F9, 0xBCA8, 0xC100, 0xBCA9, 0xC104, 0xBCAA, 0xC108, 0xBCAB, 0xC110, 0xBCAC, 0xC115,
- 0xBCAD, 0xC11C, 0xBCAE, 0xC11D, 0xBCAF, 0xC11E, 0xBCB0, 0xC11F, 0xBCB1, 0xC120, 0xBCB2, 0xC123, 0xBCB3, 0xC124, 0xBCB4, 0xC126,
- 0xBCB5, 0xC127, 0xBCB6, 0xC12C, 0xBCB7, 0xC12D, 0xBCB8, 0xC12F, 0xBCB9, 0xC130, 0xBCBA, 0xC131, 0xBCBB, 0xC136, 0xBCBC, 0xC138,
- 0xBCBD, 0xC139, 0xBCBE, 0xC13C, 0xBCBF, 0xC140, 0xBCC0, 0xC148, 0xBCC1, 0xC149, 0xBCC2, 0xC14B, 0xBCC3, 0xC14C, 0xBCC4, 0xC14D,
- 0xBCC5, 0xC154, 0xBCC6, 0xC155, 0xBCC7, 0xC158, 0xBCC8, 0xC15C, 0xBCC9, 0xC164, 0xBCCA, 0xC165, 0xBCCB, 0xC167, 0xBCCC, 0xC168,
- 0xBCCD, 0xC169, 0xBCCE, 0xC170, 0xBCCF, 0xC174, 0xBCD0, 0xC178, 0xBCD1, 0xC185, 0xBCD2, 0xC18C, 0xBCD3, 0xC18D, 0xBCD4, 0xC18E,
- 0xBCD5, 0xC190, 0xBCD6, 0xC194, 0xBCD7, 0xC196, 0xBCD8, 0xC19C, 0xBCD9, 0xC19D, 0xBCDA, 0xC19F, 0xBCDB, 0xC1A1, 0xBCDC, 0xC1A5,
- 0xBCDD, 0xC1A8, 0xBCDE, 0xC1A9, 0xBCDF, 0xC1AC, 0xBCE0, 0xC1B0, 0xBCE1, 0xC1BD, 0xBCE2, 0xC1C4, 0xBCE3, 0xC1C8, 0xBCE4, 0xC1CC,
- 0xBCE5, 0xC1D4, 0xBCE6, 0xC1D7, 0xBCE7, 0xC1D8, 0xBCE8, 0xC1E0, 0xBCE9, 0xC1E4, 0xBCEA, 0xC1E8, 0xBCEB, 0xC1F0, 0xBCEC, 0xC1F1,
- 0xBCED, 0xC1F3, 0xBCEE, 0xC1FC, 0xBCEF, 0xC1FD, 0xBCF0, 0xC200, 0xBCF1, 0xC204, 0xBCF2, 0xC20C, 0xBCF3, 0xC20D, 0xBCF4, 0xC20F,
- 0xBCF5, 0xC211, 0xBCF6, 0xC218, 0xBCF7, 0xC219, 0xBCF8, 0xC21C, 0xBCF9, 0xC21F, 0xBCFA, 0xC220, 0xBCFB, 0xC228, 0xBCFC, 0xC229,
- 0xBCFD, 0xC22B, 0xBCFE, 0xC22D, 0xBD41, 0xD3D7, 0xBD42, 0xD3D9, 0xBD43, 0xD3DA, 0xBD44, 0xD3DB, 0xBD45, 0xD3DC, 0xBD46, 0xD3DD,
- 0xBD47, 0xD3DE, 0xBD48, 0xD3DF, 0xBD49, 0xD3E0, 0xBD4A, 0xD3E2, 0xBD4B, 0xD3E4, 0xBD4C, 0xD3E5, 0xBD4D, 0xD3E6, 0xBD4E, 0xD3E7,
- 0xBD4F, 0xD3E8, 0xBD50, 0xD3E9, 0xBD51, 0xD3EA, 0xBD52, 0xD3EB, 0xBD53, 0xD3EE, 0xBD54, 0xD3EF, 0xBD55, 0xD3F1, 0xBD56, 0xD3F2,
- 0xBD57, 0xD3F3, 0xBD58, 0xD3F5, 0xBD59, 0xD3F6, 0xBD5A, 0xD3F7, 0xBD61, 0xD3F8, 0xBD62, 0xD3F9, 0xBD63, 0xD3FA, 0xBD64, 0xD3FB,
- 0xBD65, 0xD3FE, 0xBD66, 0xD400, 0xBD67, 0xD402, 0xBD68, 0xD403, 0xBD69, 0xD404, 0xBD6A, 0xD405, 0xBD6B, 0xD406, 0xBD6C, 0xD407,
- 0xBD6D, 0xD409, 0xBD6E, 0xD40A, 0xBD6F, 0xD40B, 0xBD70, 0xD40C, 0xBD71, 0xD40D, 0xBD72, 0xD40E, 0xBD73, 0xD40F, 0xBD74, 0xD410,
- 0xBD75, 0xD411, 0xBD76, 0xD412, 0xBD77, 0xD413, 0xBD78, 0xD414, 0xBD79, 0xD415, 0xBD7A, 0xD416, 0xBD81, 0xD417, 0xBD82, 0xD418,
- 0xBD83, 0xD419, 0xBD84, 0xD41A, 0xBD85, 0xD41B, 0xBD86, 0xD41C, 0xBD87, 0xD41E, 0xBD88, 0xD41F, 0xBD89, 0xD420, 0xBD8A, 0xD421,
- 0xBD8B, 0xD422, 0xBD8C, 0xD423, 0xBD8D, 0xD424, 0xBD8E, 0xD425, 0xBD8F, 0xD426, 0xBD90, 0xD427, 0xBD91, 0xD428, 0xBD92, 0xD429,
- 0xBD93, 0xD42A, 0xBD94, 0xD42B, 0xBD95, 0xD42C, 0xBD96, 0xD42D, 0xBD97, 0xD42E, 0xBD98, 0xD42F, 0xBD99, 0xD430, 0xBD9A, 0xD431,
- 0xBD9B, 0xD432, 0xBD9C, 0xD433, 0xBD9D, 0xD434, 0xBD9E, 0xD435, 0xBD9F, 0xD436, 0xBDA0, 0xD437, 0xBDA1, 0xC22F, 0xBDA2, 0xC231,
- 0xBDA3, 0xC232, 0xBDA4, 0xC234, 0xBDA5, 0xC248, 0xBDA6, 0xC250, 0xBDA7, 0xC251, 0xBDA8, 0xC254, 0xBDA9, 0xC258, 0xBDAA, 0xC260,
- 0xBDAB, 0xC265, 0xBDAC, 0xC26C, 0xBDAD, 0xC26D, 0xBDAE, 0xC270, 0xBDAF, 0xC274, 0xBDB0, 0xC27C, 0xBDB1, 0xC27D, 0xBDB2, 0xC27F,
- 0xBDB3, 0xC281, 0xBDB4, 0xC288, 0xBDB5, 0xC289, 0xBDB6, 0xC290, 0xBDB7, 0xC298, 0xBDB8, 0xC29B, 0xBDB9, 0xC29D, 0xBDBA, 0xC2A4,
- 0xBDBB, 0xC2A5, 0xBDBC, 0xC2A8, 0xBDBD, 0xC2AC, 0xBDBE, 0xC2AD, 0xBDBF, 0xC2B4, 0xBDC0, 0xC2B5, 0xBDC1, 0xC2B7, 0xBDC2, 0xC2B9,
- 0xBDC3, 0xC2DC, 0xBDC4, 0xC2DD, 0xBDC5, 0xC2E0, 0xBDC6, 0xC2E3, 0xBDC7, 0xC2E4, 0xBDC8, 0xC2EB, 0xBDC9, 0xC2EC, 0xBDCA, 0xC2ED,
- 0xBDCB, 0xC2EF, 0xBDCC, 0xC2F1, 0xBDCD, 0xC2F6, 0xBDCE, 0xC2F8, 0xBDCF, 0xC2F9, 0xBDD0, 0xC2FB, 0xBDD1, 0xC2FC, 0xBDD2, 0xC300,
- 0xBDD3, 0xC308, 0xBDD4, 0xC309, 0xBDD5, 0xC30C, 0xBDD6, 0xC30D, 0xBDD7, 0xC313, 0xBDD8, 0xC314, 0xBDD9, 0xC315, 0xBDDA, 0xC318,
- 0xBDDB, 0xC31C, 0xBDDC, 0xC324, 0xBDDD, 0xC325, 0xBDDE, 0xC328, 0xBDDF, 0xC329, 0xBDE0, 0xC345, 0xBDE1, 0xC368, 0xBDE2, 0xC369,
- 0xBDE3, 0xC36C, 0xBDE4, 0xC370, 0xBDE5, 0xC372, 0xBDE6, 0xC378, 0xBDE7, 0xC379, 0xBDE8, 0xC37C, 0xBDE9, 0xC37D, 0xBDEA, 0xC384,
- 0xBDEB, 0xC388, 0xBDEC, 0xC38C, 0xBDED, 0xC3C0, 0xBDEE, 0xC3D8, 0xBDEF, 0xC3D9, 0xBDF0, 0xC3DC, 0xBDF1, 0xC3DF, 0xBDF2, 0xC3E0,
- 0xBDF3, 0xC3E2, 0xBDF4, 0xC3E8, 0xBDF5, 0xC3E9, 0xBDF6, 0xC3ED, 0xBDF7, 0xC3F4, 0xBDF8, 0xC3F5, 0xBDF9, 0xC3F8, 0xBDFA, 0xC408,
- 0xBDFB, 0xC410, 0xBDFC, 0xC424, 0xBDFD, 0xC42C, 0xBDFE, 0xC430, 0xBE41, 0xD438, 0xBE42, 0xD439, 0xBE43, 0xD43A, 0xBE44, 0xD43B,
- 0xBE45, 0xD43C, 0xBE46, 0xD43D, 0xBE47, 0xD43E, 0xBE48, 0xD43F, 0xBE49, 0xD441, 0xBE4A, 0xD442, 0xBE4B, 0xD443, 0xBE4C, 0xD445,
- 0xBE4D, 0xD446, 0xBE4E, 0xD447, 0xBE4F, 0xD448, 0xBE50, 0xD449, 0xBE51, 0xD44A, 0xBE52, 0xD44B, 0xBE53, 0xD44C, 0xBE54, 0xD44D,
- 0xBE55, 0xD44E, 0xBE56, 0xD44F, 0xBE57, 0xD450, 0xBE58, 0xD451, 0xBE59, 0xD452, 0xBE5A, 0xD453, 0xBE61, 0xD454, 0xBE62, 0xD455,
- 0xBE63, 0xD456, 0xBE64, 0xD457, 0xBE65, 0xD458, 0xBE66, 0xD459, 0xBE67, 0xD45A, 0xBE68, 0xD45B, 0xBE69, 0xD45D, 0xBE6A, 0xD45E,
- 0xBE6B, 0xD45F, 0xBE6C, 0xD461, 0xBE6D, 0xD462, 0xBE6E, 0xD463, 0xBE6F, 0xD465, 0xBE70, 0xD466, 0xBE71, 0xD467, 0xBE72, 0xD468,
- 0xBE73, 0xD469, 0xBE74, 0xD46A, 0xBE75, 0xD46B, 0xBE76, 0xD46C, 0xBE77, 0xD46E, 0xBE78, 0xD470, 0xBE79, 0xD471, 0xBE7A, 0xD472,
- 0xBE81, 0xD473, 0xBE82, 0xD474, 0xBE83, 0xD475, 0xBE84, 0xD476, 0xBE85, 0xD477, 0xBE86, 0xD47A, 0xBE87, 0xD47B, 0xBE88, 0xD47D,
- 0xBE89, 0xD47E, 0xBE8A, 0xD481, 0xBE8B, 0xD483, 0xBE8C, 0xD484, 0xBE8D, 0xD485, 0xBE8E, 0xD486, 0xBE8F, 0xD487, 0xBE90, 0xD48A,
- 0xBE91, 0xD48C, 0xBE92, 0xD48E, 0xBE93, 0xD48F, 0xBE94, 0xD490, 0xBE95, 0xD491, 0xBE96, 0xD492, 0xBE97, 0xD493, 0xBE98, 0xD495,
- 0xBE99, 0xD496, 0xBE9A, 0xD497, 0xBE9B, 0xD498, 0xBE9C, 0xD499, 0xBE9D, 0xD49A, 0xBE9E, 0xD49B, 0xBE9F, 0xD49C, 0xBEA0, 0xD49D,
- 0xBEA1, 0xC434, 0xBEA2, 0xC43C, 0xBEA3, 0xC43D, 0xBEA4, 0xC448, 0xBEA5, 0xC464, 0xBEA6, 0xC465, 0xBEA7, 0xC468, 0xBEA8, 0xC46C,
- 0xBEA9, 0xC474, 0xBEAA, 0xC475, 0xBEAB, 0xC479, 0xBEAC, 0xC480, 0xBEAD, 0xC494, 0xBEAE, 0xC49C, 0xBEAF, 0xC4B8, 0xBEB0, 0xC4BC,
- 0xBEB1, 0xC4E9, 0xBEB2, 0xC4F0, 0xBEB3, 0xC4F1, 0xBEB4, 0xC4F4, 0xBEB5, 0xC4F8, 0xBEB6, 0xC4FA, 0xBEB7, 0xC4FF, 0xBEB8, 0xC500,
- 0xBEB9, 0xC501, 0xBEBA, 0xC50C, 0xBEBB, 0xC510, 0xBEBC, 0xC514, 0xBEBD, 0xC51C, 0xBEBE, 0xC528, 0xBEBF, 0xC529, 0xBEC0, 0xC52C,
- 0xBEC1, 0xC530, 0xBEC2, 0xC538, 0xBEC3, 0xC539, 0xBEC4, 0xC53B, 0xBEC5, 0xC53D, 0xBEC6, 0xC544, 0xBEC7, 0xC545, 0xBEC8, 0xC548,
- 0xBEC9, 0xC549, 0xBECA, 0xC54A, 0xBECB, 0xC54C, 0xBECC, 0xC54D, 0xBECD, 0xC54E, 0xBECE, 0xC553, 0xBECF, 0xC554, 0xBED0, 0xC555,
- 0xBED1, 0xC557, 0xBED2, 0xC558, 0xBED3, 0xC559, 0xBED4, 0xC55D, 0xBED5, 0xC55E, 0xBED6, 0xC560, 0xBED7, 0xC561, 0xBED8, 0xC564,
- 0xBED9, 0xC568, 0xBEDA, 0xC570, 0xBEDB, 0xC571, 0xBEDC, 0xC573, 0xBEDD, 0xC574, 0xBEDE, 0xC575, 0xBEDF, 0xC57C, 0xBEE0, 0xC57D,
- 0xBEE1, 0xC580, 0xBEE2, 0xC584, 0xBEE3, 0xC587, 0xBEE4, 0xC58C, 0xBEE5, 0xC58D, 0xBEE6, 0xC58F, 0xBEE7, 0xC591, 0xBEE8, 0xC595,
- 0xBEE9, 0xC597, 0xBEEA, 0xC598, 0xBEEB, 0xC59C, 0xBEEC, 0xC5A0, 0xBEED, 0xC5A9, 0xBEEE, 0xC5B4, 0xBEEF, 0xC5B5, 0xBEF0, 0xC5B8,
- 0xBEF1, 0xC5B9, 0xBEF2, 0xC5BB, 0xBEF3, 0xC5BC, 0xBEF4, 0xC5BD, 0xBEF5, 0xC5BE, 0xBEF6, 0xC5C4, 0xBEF7, 0xC5C5, 0xBEF8, 0xC5C6,
- 0xBEF9, 0xC5C7, 0xBEFA, 0xC5C8, 0xBEFB, 0xC5C9, 0xBEFC, 0xC5CA, 0xBEFD, 0xC5CC, 0xBEFE, 0xC5CE, 0xBF41, 0xD49E, 0xBF42, 0xD49F,
- 0xBF43, 0xD4A0, 0xBF44, 0xD4A1, 0xBF45, 0xD4A2, 0xBF46, 0xD4A3, 0xBF47, 0xD4A4, 0xBF48, 0xD4A5, 0xBF49, 0xD4A6, 0xBF4A, 0xD4A7,
- 0xBF4B, 0xD4A8, 0xBF4C, 0xD4AA, 0xBF4D, 0xD4AB, 0xBF4E, 0xD4AC, 0xBF4F, 0xD4AD, 0xBF50, 0xD4AE, 0xBF51, 0xD4AF, 0xBF52, 0xD4B0,
- 0xBF53, 0xD4B1, 0xBF54, 0xD4B2, 0xBF55, 0xD4B3, 0xBF56, 0xD4B4, 0xBF57, 0xD4B5, 0xBF58, 0xD4B6, 0xBF59, 0xD4B7, 0xBF5A, 0xD4B8,
- 0xBF61, 0xD4B9, 0xBF62, 0xD4BA, 0xBF63, 0xD4BB, 0xBF64, 0xD4BC, 0xBF65, 0xD4BD, 0xBF66, 0xD4BE, 0xBF67, 0xD4BF, 0xBF68, 0xD4C0,
- 0xBF69, 0xD4C1, 0xBF6A, 0xD4C2, 0xBF6B, 0xD4C3, 0xBF6C, 0xD4C4, 0xBF6D, 0xD4C5, 0xBF6E, 0xD4C6, 0xBF6F, 0xD4C7, 0xBF70, 0xD4C8,
- 0xBF71, 0xD4C9, 0xBF72, 0xD4CA, 0xBF73, 0xD4CB, 0xBF74, 0xD4CD, 0xBF75, 0xD4CE, 0xBF76, 0xD4CF, 0xBF77, 0xD4D1, 0xBF78, 0xD4D2,
- 0xBF79, 0xD4D3, 0xBF7A, 0xD4D5, 0xBF81, 0xD4D6, 0xBF82, 0xD4D7, 0xBF83, 0xD4D8, 0xBF84, 0xD4D9, 0xBF85, 0xD4DA, 0xBF86, 0xD4DB,
- 0xBF87, 0xD4DD, 0xBF88, 0xD4DE, 0xBF89, 0xD4E0, 0xBF8A, 0xD4E1, 0xBF8B, 0xD4E2, 0xBF8C, 0xD4E3, 0xBF8D, 0xD4E4, 0xBF8E, 0xD4E5,
- 0xBF8F, 0xD4E6, 0xBF90, 0xD4E7, 0xBF91, 0xD4E9, 0xBF92, 0xD4EA, 0xBF93, 0xD4EB, 0xBF94, 0xD4ED, 0xBF95, 0xD4EE, 0xBF96, 0xD4EF,
- 0xBF97, 0xD4F1, 0xBF98, 0xD4F2, 0xBF99, 0xD4F3, 0xBF9A, 0xD4F4, 0xBF9B, 0xD4F5, 0xBF9C, 0xD4F6, 0xBF9D, 0xD4F7, 0xBF9E, 0xD4F9,
- 0xBF9F, 0xD4FA, 0xBFA0, 0xD4FC, 0xBFA1, 0xC5D0, 0xBFA2, 0xC5D1, 0xBFA3, 0xC5D4, 0xBFA4, 0xC5D8, 0xBFA5, 0xC5E0, 0xBFA6, 0xC5E1,
- 0xBFA7, 0xC5E3, 0xBFA8, 0xC5E5, 0xBFA9, 0xC5EC, 0xBFAA, 0xC5ED, 0xBFAB, 0xC5EE, 0xBFAC, 0xC5F0, 0xBFAD, 0xC5F4, 0xBFAE, 0xC5F6,
- 0xBFAF, 0xC5F7, 0xBFB0, 0xC5FC, 0xBFB1, 0xC5FD, 0xBFB2, 0xC5FE, 0xBFB3, 0xC5FF, 0xBFB4, 0xC600, 0xBFB5, 0xC601, 0xBFB6, 0xC605,
- 0xBFB7, 0xC606, 0xBFB8, 0xC607, 0xBFB9, 0xC608, 0xBFBA, 0xC60C, 0xBFBB, 0xC610, 0xBFBC, 0xC618, 0xBFBD, 0xC619, 0xBFBE, 0xC61B,
- 0xBFBF, 0xC61C, 0xBFC0, 0xC624, 0xBFC1, 0xC625, 0xBFC2, 0xC628, 0xBFC3, 0xC62C, 0xBFC4, 0xC62D, 0xBFC5, 0xC62E, 0xBFC6, 0xC630,
- 0xBFC7, 0xC633, 0xBFC8, 0xC634, 0xBFC9, 0xC635, 0xBFCA, 0xC637, 0xBFCB, 0xC639, 0xBFCC, 0xC63B, 0xBFCD, 0xC640, 0xBFCE, 0xC641,
- 0xBFCF, 0xC644, 0xBFD0, 0xC648, 0xBFD1, 0xC650, 0xBFD2, 0xC651, 0xBFD3, 0xC653, 0xBFD4, 0xC654, 0xBFD5, 0xC655, 0xBFD6, 0xC65C,
- 0xBFD7, 0xC65D, 0xBFD8, 0xC660, 0xBFD9, 0xC66C, 0xBFDA, 0xC66F, 0xBFDB, 0xC671, 0xBFDC, 0xC678, 0xBFDD, 0xC679, 0xBFDE, 0xC67C,
- 0xBFDF, 0xC680, 0xBFE0, 0xC688, 0xBFE1, 0xC689, 0xBFE2, 0xC68B, 0xBFE3, 0xC68D, 0xBFE4, 0xC694, 0xBFE5, 0xC695, 0xBFE6, 0xC698,
- 0xBFE7, 0xC69C, 0xBFE8, 0xC6A4, 0xBFE9, 0xC6A5, 0xBFEA, 0xC6A7, 0xBFEB, 0xC6A9, 0xBFEC, 0xC6B0, 0xBFED, 0xC6B1, 0xBFEE, 0xC6B4,
- 0xBFEF, 0xC6B8, 0xBFF0, 0xC6B9, 0xBFF1, 0xC6BA, 0xBFF2, 0xC6C0, 0xBFF3, 0xC6C1, 0xBFF4, 0xC6C3, 0xBFF5, 0xC6C5, 0xBFF6, 0xC6CC,
- 0xBFF7, 0xC6CD, 0xBFF8, 0xC6D0, 0xBFF9, 0xC6D4, 0xBFFA, 0xC6DC, 0xBFFB, 0xC6DD, 0xBFFC, 0xC6E0, 0xBFFD, 0xC6E1, 0xBFFE, 0xC6E8,
- 0xC041, 0xD4FE, 0xC042, 0xD4FF, 0xC043, 0xD500, 0xC044, 0xD501, 0xC045, 0xD502, 0xC046, 0xD503, 0xC047, 0xD505, 0xC048, 0xD506,
- 0xC049, 0xD507, 0xC04A, 0xD509, 0xC04B, 0xD50A, 0xC04C, 0xD50B, 0xC04D, 0xD50D, 0xC04E, 0xD50E, 0xC04F, 0xD50F, 0xC050, 0xD510,
- 0xC051, 0xD511, 0xC052, 0xD512, 0xC053, 0xD513, 0xC054, 0xD516, 0xC055, 0xD518, 0xC056, 0xD519, 0xC057, 0xD51A, 0xC058, 0xD51B,
- 0xC059, 0xD51C, 0xC05A, 0xD51D, 0xC061, 0xD51E, 0xC062, 0xD51F, 0xC063, 0xD520, 0xC064, 0xD521, 0xC065, 0xD522, 0xC066, 0xD523,
- 0xC067, 0xD524, 0xC068, 0xD525, 0xC069, 0xD526, 0xC06A, 0xD527, 0xC06B, 0xD528, 0xC06C, 0xD529, 0xC06D, 0xD52A, 0xC06E, 0xD52B,
- 0xC06F, 0xD52C, 0xC070, 0xD52D, 0xC071, 0xD52E, 0xC072, 0xD52F, 0xC073, 0xD530, 0xC074, 0xD531, 0xC075, 0xD532, 0xC076, 0xD533,
- 0xC077, 0xD534, 0xC078, 0xD535, 0xC079, 0xD536, 0xC07A, 0xD537, 0xC081, 0xD538, 0xC082, 0xD539, 0xC083, 0xD53A, 0xC084, 0xD53B,
- 0xC085, 0xD53E, 0xC086, 0xD53F, 0xC087, 0xD541, 0xC088, 0xD542, 0xC089, 0xD543, 0xC08A, 0xD545, 0xC08B, 0xD546, 0xC08C, 0xD547,
- 0xC08D, 0xD548, 0xC08E, 0xD549, 0xC08F, 0xD54A, 0xC090, 0xD54B, 0xC091, 0xD54E, 0xC092, 0xD550, 0xC093, 0xD552, 0xC094, 0xD553,
- 0xC095, 0xD554, 0xC096, 0xD555, 0xC097, 0xD556, 0xC098, 0xD557, 0xC099, 0xD55A, 0xC09A, 0xD55B, 0xC09B, 0xD55D, 0xC09C, 0xD55E,
- 0xC09D, 0xD55F, 0xC09E, 0xD561, 0xC09F, 0xD562, 0xC0A0, 0xD563, 0xC0A1, 0xC6E9, 0xC0A2, 0xC6EC, 0xC0A3, 0xC6F0, 0xC0A4, 0xC6F8,
- 0xC0A5, 0xC6F9, 0xC0A6, 0xC6FD, 0xC0A7, 0xC704, 0xC0A8, 0xC705, 0xC0A9, 0xC708, 0xC0AA, 0xC70C, 0xC0AB, 0xC714, 0xC0AC, 0xC715,
- 0xC0AD, 0xC717, 0xC0AE, 0xC719, 0xC0AF, 0xC720, 0xC0B0, 0xC721, 0xC0B1, 0xC724, 0xC0B2, 0xC728, 0xC0B3, 0xC730, 0xC0B4, 0xC731,
- 0xC0B5, 0xC733, 0xC0B6, 0xC735, 0xC0B7, 0xC737, 0xC0B8, 0xC73C, 0xC0B9, 0xC73D, 0xC0BA, 0xC740, 0xC0BB, 0xC744, 0xC0BC, 0xC74A,
- 0xC0BD, 0xC74C, 0xC0BE, 0xC74D, 0xC0BF, 0xC74F, 0xC0C0, 0xC751, 0xC0C1, 0xC752, 0xC0C2, 0xC753, 0xC0C3, 0xC754, 0xC0C4, 0xC755,
- 0xC0C5, 0xC756, 0xC0C6, 0xC757, 0xC0C7, 0xC758, 0xC0C8, 0xC75C, 0xC0C9, 0xC760, 0xC0CA, 0xC768, 0xC0CB, 0xC76B, 0xC0CC, 0xC774,
- 0xC0CD, 0xC775, 0xC0CE, 0xC778, 0xC0CF, 0xC77C, 0xC0D0, 0xC77D, 0xC0D1, 0xC77E, 0xC0D2, 0xC783, 0xC0D3, 0xC784, 0xC0D4, 0xC785,
- 0xC0D5, 0xC787, 0xC0D6, 0xC788, 0xC0D7, 0xC789, 0xC0D8, 0xC78A, 0xC0D9, 0xC78E, 0xC0DA, 0xC790, 0xC0DB, 0xC791, 0xC0DC, 0xC794,
- 0xC0DD, 0xC796, 0xC0DE, 0xC797, 0xC0DF, 0xC798, 0xC0E0, 0xC79A, 0xC0E1, 0xC7A0, 0xC0E2, 0xC7A1, 0xC0E3, 0xC7A3, 0xC0E4, 0xC7A4,
- 0xC0E5, 0xC7A5, 0xC0E6, 0xC7A6, 0xC0E7, 0xC7AC, 0xC0E8, 0xC7AD, 0xC0E9, 0xC7B0, 0xC0EA, 0xC7B4, 0xC0EB, 0xC7BC, 0xC0EC, 0xC7BD,
- 0xC0ED, 0xC7BF, 0xC0EE, 0xC7C0, 0xC0EF, 0xC7C1, 0xC0F0, 0xC7C8, 0xC0F1, 0xC7C9, 0xC0F2, 0xC7CC, 0xC0F3, 0xC7CE, 0xC0F4, 0xC7D0,
- 0xC0F5, 0xC7D8, 0xC0F6, 0xC7DD, 0xC0F7, 0xC7E4, 0xC0F8, 0xC7E8, 0xC0F9, 0xC7EC, 0xC0FA, 0xC800, 0xC0FB, 0xC801, 0xC0FC, 0xC804,
- 0xC0FD, 0xC808, 0xC0FE, 0xC80A, 0xC141, 0xD564, 0xC142, 0xD566, 0xC143, 0xD567, 0xC144, 0xD56A, 0xC145, 0xD56C, 0xC146, 0xD56E,
- 0xC147, 0xD56F, 0xC148, 0xD570, 0xC149, 0xD571, 0xC14A, 0xD572, 0xC14B, 0xD573, 0xC14C, 0xD576, 0xC14D, 0xD577, 0xC14E, 0xD579,
- 0xC14F, 0xD57A, 0xC150, 0xD57B, 0xC151, 0xD57D, 0xC152, 0xD57E, 0xC153, 0xD57F, 0xC154, 0xD580, 0xC155, 0xD581, 0xC156, 0xD582,
- 0xC157, 0xD583, 0xC158, 0xD586, 0xC159, 0xD58A, 0xC15A, 0xD58B, 0xC161, 0xD58C, 0xC162, 0xD58D, 0xC163, 0xD58E, 0xC164, 0xD58F,
- 0xC165, 0xD591, 0xC166, 0xD592, 0xC167, 0xD593, 0xC168, 0xD594, 0xC169, 0xD595, 0xC16A, 0xD596, 0xC16B, 0xD597, 0xC16C, 0xD598,
- 0xC16D, 0xD599, 0xC16E, 0xD59A, 0xC16F, 0xD59B, 0xC170, 0xD59C, 0xC171, 0xD59D, 0xC172, 0xD59E, 0xC173, 0xD59F, 0xC174, 0xD5A0,
- 0xC175, 0xD5A1, 0xC176, 0xD5A2, 0xC177, 0xD5A3, 0xC178, 0xD5A4, 0xC179, 0xD5A6, 0xC17A, 0xD5A7, 0xC181, 0xD5A8, 0xC182, 0xD5A9,
- 0xC183, 0xD5AA, 0xC184, 0xD5AB, 0xC185, 0xD5AC, 0xC186, 0xD5AD, 0xC187, 0xD5AE, 0xC188, 0xD5AF, 0xC189, 0xD5B0, 0xC18A, 0xD5B1,
- 0xC18B, 0xD5B2, 0xC18C, 0xD5B3, 0xC18D, 0xD5B4, 0xC18E, 0xD5B5, 0xC18F, 0xD5B6, 0xC190, 0xD5B7, 0xC191, 0xD5B8, 0xC192, 0xD5B9,
- 0xC193, 0xD5BA, 0xC194, 0xD5BB, 0xC195, 0xD5BC, 0xC196, 0xD5BD, 0xC197, 0xD5BE, 0xC198, 0xD5BF, 0xC199, 0xD5C0, 0xC19A, 0xD5C1,
- 0xC19B, 0xD5C2, 0xC19C, 0xD5C3, 0xC19D, 0xD5C4, 0xC19E, 0xD5C5, 0xC19F, 0xD5C6, 0xC1A0, 0xD5C7, 0xC1A1, 0xC810, 0xC1A2, 0xC811,
- 0xC1A3, 0xC813, 0xC1A4, 0xC815, 0xC1A5, 0xC816, 0xC1A6, 0xC81C, 0xC1A7, 0xC81D, 0xC1A8, 0xC820, 0xC1A9, 0xC824, 0xC1AA, 0xC82C,
- 0xC1AB, 0xC82D, 0xC1AC, 0xC82F, 0xC1AD, 0xC831, 0xC1AE, 0xC838, 0xC1AF, 0xC83C, 0xC1B0, 0xC840, 0xC1B1, 0xC848, 0xC1B2, 0xC849,
- 0xC1B3, 0xC84C, 0xC1B4, 0xC84D, 0xC1B5, 0xC854, 0xC1B6, 0xC870, 0xC1B7, 0xC871, 0xC1B8, 0xC874, 0xC1B9, 0xC878, 0xC1BA, 0xC87A,
- 0xC1BB, 0xC880, 0xC1BC, 0xC881, 0xC1BD, 0xC883, 0xC1BE, 0xC885, 0xC1BF, 0xC886, 0xC1C0, 0xC887, 0xC1C1, 0xC88B, 0xC1C2, 0xC88C,
- 0xC1C3, 0xC88D, 0xC1C4, 0xC894, 0xC1C5, 0xC89D, 0xC1C6, 0xC89F, 0xC1C7, 0xC8A1, 0xC1C8, 0xC8A8, 0xC1C9, 0xC8BC, 0xC1CA, 0xC8BD,
- 0xC1CB, 0xC8C4, 0xC1CC, 0xC8C8, 0xC1CD, 0xC8CC, 0xC1CE, 0xC8D4, 0xC1CF, 0xC8D5, 0xC1D0, 0xC8D7, 0xC1D1, 0xC8D9, 0xC1D2, 0xC8E0,
- 0xC1D3, 0xC8E1, 0xC1D4, 0xC8E4, 0xC1D5, 0xC8F5, 0xC1D6, 0xC8FC, 0xC1D7, 0xC8FD, 0xC1D8, 0xC900, 0xC1D9, 0xC904, 0xC1DA, 0xC905,
- 0xC1DB, 0xC906, 0xC1DC, 0xC90C, 0xC1DD, 0xC90D, 0xC1DE, 0xC90F, 0xC1DF, 0xC911, 0xC1E0, 0xC918, 0xC1E1, 0xC92C, 0xC1E2, 0xC934,
- 0xC1E3, 0xC950, 0xC1E4, 0xC951, 0xC1E5, 0xC954, 0xC1E6, 0xC958, 0xC1E7, 0xC960, 0xC1E8, 0xC961, 0xC1E9, 0xC963, 0xC1EA, 0xC96C,
- 0xC1EB, 0xC970, 0xC1EC, 0xC974, 0xC1ED, 0xC97C, 0xC1EE, 0xC988, 0xC1EF, 0xC989, 0xC1F0, 0xC98C, 0xC1F1, 0xC990, 0xC1F2, 0xC998,
- 0xC1F3, 0xC999, 0xC1F4, 0xC99B, 0xC1F5, 0xC99D, 0xC1F6, 0xC9C0, 0xC1F7, 0xC9C1, 0xC1F8, 0xC9C4, 0xC1F9, 0xC9C7, 0xC1FA, 0xC9C8,
- 0xC1FB, 0xC9CA, 0xC1FC, 0xC9D0, 0xC1FD, 0xC9D1, 0xC1FE, 0xC9D3, 0xC241, 0xD5CA, 0xC242, 0xD5CB, 0xC243, 0xD5CD, 0xC244, 0xD5CE,
- 0xC245, 0xD5CF, 0xC246, 0xD5D1, 0xC247, 0xD5D3, 0xC248, 0xD5D4, 0xC249, 0xD5D5, 0xC24A, 0xD5D6, 0xC24B, 0xD5D7, 0xC24C, 0xD5DA,
- 0xC24D, 0xD5DC, 0xC24E, 0xD5DE, 0xC24F, 0xD5DF, 0xC250, 0xD5E0, 0xC251, 0xD5E1, 0xC252, 0xD5E2, 0xC253, 0xD5E3, 0xC254, 0xD5E6,
- 0xC255, 0xD5E7, 0xC256, 0xD5E9, 0xC257, 0xD5EA, 0xC258, 0xD5EB, 0xC259, 0xD5ED, 0xC25A, 0xD5EE, 0xC261, 0xD5EF, 0xC262, 0xD5F0,
- 0xC263, 0xD5F1, 0xC264, 0xD5F2, 0xC265, 0xD5F3, 0xC266, 0xD5F6, 0xC267, 0xD5F8, 0xC268, 0xD5FA, 0xC269, 0xD5FB, 0xC26A, 0xD5FC,
- 0xC26B, 0xD5FD, 0xC26C, 0xD5FE, 0xC26D, 0xD5FF, 0xC26E, 0xD602, 0xC26F, 0xD603, 0xC270, 0xD605, 0xC271, 0xD606, 0xC272, 0xD607,
- 0xC273, 0xD609, 0xC274, 0xD60A, 0xC275, 0xD60B, 0xC276, 0xD60C, 0xC277, 0xD60D, 0xC278, 0xD60E, 0xC279, 0xD60F, 0xC27A, 0xD612,
- 0xC281, 0xD616, 0xC282, 0xD617, 0xC283, 0xD618, 0xC284, 0xD619, 0xC285, 0xD61A, 0xC286, 0xD61B, 0xC287, 0xD61D, 0xC288, 0xD61E,
- 0xC289, 0xD61F, 0xC28A, 0xD621, 0xC28B, 0xD622, 0xC28C, 0xD623, 0xC28D, 0xD625, 0xC28E, 0xD626, 0xC28F, 0xD627, 0xC290, 0xD628,
- 0xC291, 0xD629, 0xC292, 0xD62A, 0xC293, 0xD62B, 0xC294, 0xD62C, 0xC295, 0xD62E, 0xC296, 0xD62F, 0xC297, 0xD630, 0xC298, 0xD631,
- 0xC299, 0xD632, 0xC29A, 0xD633, 0xC29B, 0xD634, 0xC29C, 0xD635, 0xC29D, 0xD636, 0xC29E, 0xD637, 0xC29F, 0xD63A, 0xC2A0, 0xD63B,
- 0xC2A1, 0xC9D5, 0xC2A2, 0xC9D6, 0xC2A3, 0xC9D9, 0xC2A4, 0xC9DA, 0xC2A5, 0xC9DC, 0xC2A6, 0xC9DD, 0xC2A7, 0xC9E0, 0xC2A8, 0xC9E2,
- 0xC2A9, 0xC9E4, 0xC2AA, 0xC9E7, 0xC2AB, 0xC9EC, 0xC2AC, 0xC9ED, 0xC2AD, 0xC9EF, 0xC2AE, 0xC9F0, 0xC2AF, 0xC9F1, 0xC2B0, 0xC9F8,
- 0xC2B1, 0xC9F9, 0xC2B2, 0xC9FC, 0xC2B3, 0xCA00, 0xC2B4, 0xCA08, 0xC2B5, 0xCA09, 0xC2B6, 0xCA0B, 0xC2B7, 0xCA0C, 0xC2B8, 0xCA0D,
- 0xC2B9, 0xCA14, 0xC2BA, 0xCA18, 0xC2BB, 0xCA29, 0xC2BC, 0xCA4C, 0xC2BD, 0xCA4D, 0xC2BE, 0xCA50, 0xC2BF, 0xCA54, 0xC2C0, 0xCA5C,
- 0xC2C1, 0xCA5D, 0xC2C2, 0xCA5F, 0xC2C3, 0xCA60, 0xC2C4, 0xCA61, 0xC2C5, 0xCA68, 0xC2C6, 0xCA7D, 0xC2C7, 0xCA84, 0xC2C8, 0xCA98,
- 0xC2C9, 0xCABC, 0xC2CA, 0xCABD, 0xC2CB, 0xCAC0, 0xC2CC, 0xCAC4, 0xC2CD, 0xCACC, 0xC2CE, 0xCACD, 0xC2CF, 0xCACF, 0xC2D0, 0xCAD1,
- 0xC2D1, 0xCAD3, 0xC2D2, 0xCAD8, 0xC2D3, 0xCAD9, 0xC2D4, 0xCAE0, 0xC2D5, 0xCAEC, 0xC2D6, 0xCAF4, 0xC2D7, 0xCB08, 0xC2D8, 0xCB10,
- 0xC2D9, 0xCB14, 0xC2DA, 0xCB18, 0xC2DB, 0xCB20, 0xC2DC, 0xCB21, 0xC2DD, 0xCB41, 0xC2DE, 0xCB48, 0xC2DF, 0xCB49, 0xC2E0, 0xCB4C,
- 0xC2E1, 0xCB50, 0xC2E2, 0xCB58, 0xC2E3, 0xCB59, 0xC2E4, 0xCB5D, 0xC2E5, 0xCB64, 0xC2E6, 0xCB78, 0xC2E7, 0xCB79, 0xC2E8, 0xCB9C,
- 0xC2E9, 0xCBB8, 0xC2EA, 0xCBD4, 0xC2EB, 0xCBE4, 0xC2EC, 0xCBE7, 0xC2ED, 0xCBE9, 0xC2EE, 0xCC0C, 0xC2EF, 0xCC0D, 0xC2F0, 0xCC10,
- 0xC2F1, 0xCC14, 0xC2F2, 0xCC1C, 0xC2F3, 0xCC1D, 0xC2F4, 0xCC21, 0xC2F5, 0xCC22, 0xC2F6, 0xCC27, 0xC2F7, 0xCC28, 0xC2F8, 0xCC29,
- 0xC2F9, 0xCC2C, 0xC2FA, 0xCC2E, 0xC2FB, 0xCC30, 0xC2FC, 0xCC38, 0xC2FD, 0xCC39, 0xC2FE, 0xCC3B, 0xC341, 0xD63D, 0xC342, 0xD63E,
- 0xC343, 0xD63F, 0xC344, 0xD641, 0xC345, 0xD642, 0xC346, 0xD643, 0xC347, 0xD644, 0xC348, 0xD646, 0xC349, 0xD647, 0xC34A, 0xD64A,
- 0xC34B, 0xD64C, 0xC34C, 0xD64E, 0xC34D, 0xD64F, 0xC34E, 0xD650, 0xC34F, 0xD652, 0xC350, 0xD653, 0xC351, 0xD656, 0xC352, 0xD657,
- 0xC353, 0xD659, 0xC354, 0xD65A, 0xC355, 0xD65B, 0xC356, 0xD65D, 0xC357, 0xD65E, 0xC358, 0xD65F, 0xC359, 0xD660, 0xC35A, 0xD661,
- 0xC361, 0xD662, 0xC362, 0xD663, 0xC363, 0xD664, 0xC364, 0xD665, 0xC365, 0xD666, 0xC366, 0xD668, 0xC367, 0xD66A, 0xC368, 0xD66B,
- 0xC369, 0xD66C, 0xC36A, 0xD66D, 0xC36B, 0xD66E, 0xC36C, 0xD66F, 0xC36D, 0xD672, 0xC36E, 0xD673, 0xC36F, 0xD675, 0xC370, 0xD676,
- 0xC371, 0xD677, 0xC372, 0xD678, 0xC373, 0xD679, 0xC374, 0xD67A, 0xC375, 0xD67B, 0xC376, 0xD67C, 0xC377, 0xD67D, 0xC378, 0xD67E,
- 0xC379, 0xD67F, 0xC37A, 0xD680, 0xC381, 0xD681, 0xC382, 0xD682, 0xC383, 0xD684, 0xC384, 0xD686, 0xC385, 0xD687, 0xC386, 0xD688,
- 0xC387, 0xD689, 0xC388, 0xD68A, 0xC389, 0xD68B, 0xC38A, 0xD68E, 0xC38B, 0xD68F, 0xC38C, 0xD691, 0xC38D, 0xD692, 0xC38E, 0xD693,
- 0xC38F, 0xD695, 0xC390, 0xD696, 0xC391, 0xD697, 0xC392, 0xD698, 0xC393, 0xD699, 0xC394, 0xD69A, 0xC395, 0xD69B, 0xC396, 0xD69C,
- 0xC397, 0xD69E, 0xC398, 0xD6A0, 0xC399, 0xD6A2, 0xC39A, 0xD6A3, 0xC39B, 0xD6A4, 0xC39C, 0xD6A5, 0xC39D, 0xD6A6, 0xC39E, 0xD6A7,
- 0xC39F, 0xD6A9, 0xC3A0, 0xD6AA, 0xC3A1, 0xCC3C, 0xC3A2, 0xCC3D, 0xC3A3, 0xCC3E, 0xC3A4, 0xCC44, 0xC3A5, 0xCC45, 0xC3A6, 0xCC48,
- 0xC3A7, 0xCC4C, 0xC3A8, 0xCC54, 0xC3A9, 0xCC55, 0xC3AA, 0xCC57, 0xC3AB, 0xCC58, 0xC3AC, 0xCC59, 0xC3AD, 0xCC60, 0xC3AE, 0xCC64,
- 0xC3AF, 0xCC66, 0xC3B0, 0xCC68, 0xC3B1, 0xCC70, 0xC3B2, 0xCC75, 0xC3B3, 0xCC98, 0xC3B4, 0xCC99, 0xC3B5, 0xCC9C, 0xC3B6, 0xCCA0,
- 0xC3B7, 0xCCA8, 0xC3B8, 0xCCA9, 0xC3B9, 0xCCAB, 0xC3BA, 0xCCAC, 0xC3BB, 0xCCAD, 0xC3BC, 0xCCB4, 0xC3BD, 0xCCB5, 0xC3BE, 0xCCB8,
- 0xC3BF, 0xCCBC, 0xC3C0, 0xCCC4, 0xC3C1, 0xCCC5, 0xC3C2, 0xCCC7, 0xC3C3, 0xCCC9, 0xC3C4, 0xCCD0, 0xC3C5, 0xCCD4, 0xC3C6, 0xCCE4,
- 0xC3C7, 0xCCEC, 0xC3C8, 0xCCF0, 0xC3C9, 0xCD01, 0xC3CA, 0xCD08, 0xC3CB, 0xCD09, 0xC3CC, 0xCD0C, 0xC3CD, 0xCD10, 0xC3CE, 0xCD18,
- 0xC3CF, 0xCD19, 0xC3D0, 0xCD1B, 0xC3D1, 0xCD1D, 0xC3D2, 0xCD24, 0xC3D3, 0xCD28, 0xC3D4, 0xCD2C, 0xC3D5, 0xCD39, 0xC3D6, 0xCD5C,
- 0xC3D7, 0xCD60, 0xC3D8, 0xCD64, 0xC3D9, 0xCD6C, 0xC3DA, 0xCD6D, 0xC3DB, 0xCD6F, 0xC3DC, 0xCD71, 0xC3DD, 0xCD78, 0xC3DE, 0xCD88,
- 0xC3DF, 0xCD94, 0xC3E0, 0xCD95, 0xC3E1, 0xCD98, 0xC3E2, 0xCD9C, 0xC3E3, 0xCDA4, 0xC3E4, 0xCDA5, 0xC3E5, 0xCDA7, 0xC3E6, 0xCDA9,
- 0xC3E7, 0xCDB0, 0xC3E8, 0xCDC4, 0xC3E9, 0xCDCC, 0xC3EA, 0xCDD0, 0xC3EB, 0xCDE8, 0xC3EC, 0xCDEC, 0xC3ED, 0xCDF0, 0xC3EE, 0xCDF8,
- 0xC3EF, 0xCDF9, 0xC3F0, 0xCDFB, 0xC3F1, 0xCDFD, 0xC3F2, 0xCE04, 0xC3F3, 0xCE08, 0xC3F4, 0xCE0C, 0xC3F5, 0xCE14, 0xC3F6, 0xCE19,
- 0xC3F7, 0xCE20, 0xC3F8, 0xCE21, 0xC3F9, 0xCE24, 0xC3FA, 0xCE28, 0xC3FB, 0xCE30, 0xC3FC, 0xCE31, 0xC3FD, 0xCE33, 0xC3FE, 0xCE35,
- 0xC441, 0xD6AB, 0xC442, 0xD6AD, 0xC443, 0xD6AE, 0xC444, 0xD6AF, 0xC445, 0xD6B1, 0xC446, 0xD6B2, 0xC447, 0xD6B3, 0xC448, 0xD6B4,
- 0xC449, 0xD6B5, 0xC44A, 0xD6B6, 0xC44B, 0xD6B7, 0xC44C, 0xD6B8, 0xC44D, 0xD6BA, 0xC44E, 0xD6BC, 0xC44F, 0xD6BD, 0xC450, 0xD6BE,
- 0xC451, 0xD6BF, 0xC452, 0xD6C0, 0xC453, 0xD6C1, 0xC454, 0xD6C2, 0xC455, 0xD6C3, 0xC456, 0xD6C6, 0xC457, 0xD6C7, 0xC458, 0xD6C9,
- 0xC459, 0xD6CA, 0xC45A, 0xD6CB, 0xC461, 0xD6CD, 0xC462, 0xD6CE, 0xC463, 0xD6CF, 0xC464, 0xD6D0, 0xC465, 0xD6D2, 0xC466, 0xD6D3,
- 0xC467, 0xD6D5, 0xC468, 0xD6D6, 0xC469, 0xD6D8, 0xC46A, 0xD6DA, 0xC46B, 0xD6DB, 0xC46C, 0xD6DC, 0xC46D, 0xD6DD, 0xC46E, 0xD6DE,
- 0xC46F, 0xD6DF, 0xC470, 0xD6E1, 0xC471, 0xD6E2, 0xC472, 0xD6E3, 0xC473, 0xD6E5, 0xC474, 0xD6E6, 0xC475, 0xD6E7, 0xC476, 0xD6E9,
- 0xC477, 0xD6EA, 0xC478, 0xD6EB, 0xC479, 0xD6EC, 0xC47A, 0xD6ED, 0xC481, 0xD6EE, 0xC482, 0xD6EF, 0xC483, 0xD6F1, 0xC484, 0xD6F2,
- 0xC485, 0xD6F3, 0xC486, 0xD6F4, 0xC487, 0xD6F6, 0xC488, 0xD6F7, 0xC489, 0xD6F8, 0xC48A, 0xD6F9, 0xC48B, 0xD6FA, 0xC48C, 0xD6FB,
- 0xC48D, 0xD6FE, 0xC48E, 0xD6FF, 0xC48F, 0xD701, 0xC490, 0xD702, 0xC491, 0xD703, 0xC492, 0xD705, 0xC493, 0xD706, 0xC494, 0xD707,
- 0xC495, 0xD708, 0xC496, 0xD709, 0xC497, 0xD70A, 0xC498, 0xD70B, 0xC499, 0xD70C, 0xC49A, 0xD70D, 0xC49B, 0xD70E, 0xC49C, 0xD70F,
- 0xC49D, 0xD710, 0xC49E, 0xD712, 0xC49F, 0xD713, 0xC4A0, 0xD714, 0xC4A1, 0xCE58, 0xC4A2, 0xCE59, 0xC4A3, 0xCE5C, 0xC4A4, 0xCE5F,
- 0xC4A5, 0xCE60, 0xC4A6, 0xCE61, 0xC4A7, 0xCE68, 0xC4A8, 0xCE69, 0xC4A9, 0xCE6B, 0xC4AA, 0xCE6D, 0xC4AB, 0xCE74, 0xC4AC, 0xCE75,
- 0xC4AD, 0xCE78, 0xC4AE, 0xCE7C, 0xC4AF, 0xCE84, 0xC4B0, 0xCE85, 0xC4B1, 0xCE87, 0xC4B2, 0xCE89, 0xC4B3, 0xCE90, 0xC4B4, 0xCE91,
- 0xC4B5, 0xCE94, 0xC4B6, 0xCE98, 0xC4B7, 0xCEA0, 0xC4B8, 0xCEA1, 0xC4B9, 0xCEA3, 0xC4BA, 0xCEA4, 0xC4BB, 0xCEA5, 0xC4BC, 0xCEAC,
- 0xC4BD, 0xCEAD, 0xC4BE, 0xCEC1, 0xC4BF, 0xCEE4, 0xC4C0, 0xCEE5, 0xC4C1, 0xCEE8, 0xC4C2, 0xCEEB, 0xC4C3, 0xCEEC, 0xC4C4, 0xCEF4,
- 0xC4C5, 0xCEF5, 0xC4C6, 0xCEF7, 0xC4C7, 0xCEF8, 0xC4C8, 0xCEF9, 0xC4C9, 0xCF00, 0xC4CA, 0xCF01, 0xC4CB, 0xCF04, 0xC4CC, 0xCF08,
- 0xC4CD, 0xCF10, 0xC4CE, 0xCF11, 0xC4CF, 0xCF13, 0xC4D0, 0xCF15, 0xC4D1, 0xCF1C, 0xC4D2, 0xCF20, 0xC4D3, 0xCF24, 0xC4D4, 0xCF2C,
- 0xC4D5, 0xCF2D, 0xC4D6, 0xCF2F, 0xC4D7, 0xCF30, 0xC4D8, 0xCF31, 0xC4D9, 0xCF38, 0xC4DA, 0xCF54, 0xC4DB, 0xCF55, 0xC4DC, 0xCF58,
- 0xC4DD, 0xCF5C, 0xC4DE, 0xCF64, 0xC4DF, 0xCF65, 0xC4E0, 0xCF67, 0xC4E1, 0xCF69, 0xC4E2, 0xCF70, 0xC4E3, 0xCF71, 0xC4E4, 0xCF74,
- 0xC4E5, 0xCF78, 0xC4E6, 0xCF80, 0xC4E7, 0xCF85, 0xC4E8, 0xCF8C, 0xC4E9, 0xCFA1, 0xC4EA, 0xCFA8, 0xC4EB, 0xCFB0, 0xC4EC, 0xCFC4,
- 0xC4ED, 0xCFE0, 0xC4EE, 0xCFE1, 0xC4EF, 0xCFE4, 0xC4F0, 0xCFE8, 0xC4F1, 0xCFF0, 0xC4F2, 0xCFF1, 0xC4F3, 0xCFF3, 0xC4F4, 0xCFF5,
- 0xC4F5, 0xCFFC, 0xC4F6, 0xD000, 0xC4F7, 0xD004, 0xC4F8, 0xD011, 0xC4F9, 0xD018, 0xC4FA, 0xD02D, 0xC4FB, 0xD034, 0xC4FC, 0xD035,
- 0xC4FD, 0xD038, 0xC4FE, 0xD03C, 0xC541, 0xD715, 0xC542, 0xD716, 0xC543, 0xD717, 0xC544, 0xD71A, 0xC545, 0xD71B, 0xC546, 0xD71D,
- 0xC547, 0xD71E, 0xC548, 0xD71F, 0xC549, 0xD721, 0xC54A, 0xD722, 0xC54B, 0xD723, 0xC54C, 0xD724, 0xC54D, 0xD725, 0xC54E, 0xD726,
- 0xC54F, 0xD727, 0xC550, 0xD72A, 0xC551, 0xD72C, 0xC552, 0xD72E, 0xC553, 0xD72F, 0xC554, 0xD730, 0xC555, 0xD731, 0xC556, 0xD732,
- 0xC557, 0xD733, 0xC558, 0xD736, 0xC559, 0xD737, 0xC55A, 0xD739, 0xC561, 0xD73A, 0xC562, 0xD73B, 0xC563, 0xD73D, 0xC564, 0xD73E,
- 0xC565, 0xD73F, 0xC566, 0xD740, 0xC567, 0xD741, 0xC568, 0xD742, 0xC569, 0xD743, 0xC56A, 0xD745, 0xC56B, 0xD746, 0xC56C, 0xD748,
- 0xC56D, 0xD74A, 0xC56E, 0xD74B, 0xC56F, 0xD74C, 0xC570, 0xD74D, 0xC571, 0xD74E, 0xC572, 0xD74F, 0xC573, 0xD752, 0xC574, 0xD753,
- 0xC575, 0xD755, 0xC576, 0xD75A, 0xC577, 0xD75B, 0xC578, 0xD75C, 0xC579, 0xD75D, 0xC57A, 0xD75E, 0xC581, 0xD75F, 0xC582, 0xD762,
- 0xC583, 0xD764, 0xC584, 0xD766, 0xC585, 0xD767, 0xC586, 0xD768, 0xC587, 0xD76A, 0xC588, 0xD76B, 0xC589, 0xD76D, 0xC58A, 0xD76E,
- 0xC58B, 0xD76F, 0xC58C, 0xD771, 0xC58D, 0xD772, 0xC58E, 0xD773, 0xC58F, 0xD775, 0xC590, 0xD776, 0xC591, 0xD777, 0xC592, 0xD778,
- 0xC593, 0xD779, 0xC594, 0xD77A, 0xC595, 0xD77B, 0xC596, 0xD77E, 0xC597, 0xD77F, 0xC598, 0xD780, 0xC599, 0xD782, 0xC59A, 0xD783,
- 0xC59B, 0xD784, 0xC59C, 0xD785, 0xC59D, 0xD786, 0xC59E, 0xD787, 0xC59F, 0xD78A, 0xC5A0, 0xD78B, 0xC5A1, 0xD044, 0xC5A2, 0xD045,
- 0xC5A3, 0xD047, 0xC5A4, 0xD049, 0xC5A5, 0xD050, 0xC5A6, 0xD054, 0xC5A7, 0xD058, 0xC5A8, 0xD060, 0xC5A9, 0xD06C, 0xC5AA, 0xD06D,
- 0xC5AB, 0xD070, 0xC5AC, 0xD074, 0xC5AD, 0xD07C, 0xC5AE, 0xD07D, 0xC5AF, 0xD081, 0xC5B0, 0xD0A4, 0xC5B1, 0xD0A5, 0xC5B2, 0xD0A8,
- 0xC5B3, 0xD0AC, 0xC5B4, 0xD0B4, 0xC5B5, 0xD0B5, 0xC5B6, 0xD0B7, 0xC5B7, 0xD0B9, 0xC5B8, 0xD0C0, 0xC5B9, 0xD0C1, 0xC5BA, 0xD0C4,
- 0xC5BB, 0xD0C8, 0xC5BC, 0xD0C9, 0xC5BD, 0xD0D0, 0xC5BE, 0xD0D1, 0xC5BF, 0xD0D3, 0xC5C0, 0xD0D4, 0xC5C1, 0xD0D5, 0xC5C2, 0xD0DC,
- 0xC5C3, 0xD0DD, 0xC5C4, 0xD0E0, 0xC5C5, 0xD0E4, 0xC5C6, 0xD0EC, 0xC5C7, 0xD0ED, 0xC5C8, 0xD0EF, 0xC5C9, 0xD0F0, 0xC5CA, 0xD0F1,
- 0xC5CB, 0xD0F8, 0xC5CC, 0xD10D, 0xC5CD, 0xD130, 0xC5CE, 0xD131, 0xC5CF, 0xD134, 0xC5D0, 0xD138, 0xC5D1, 0xD13A, 0xC5D2, 0xD140,
- 0xC5D3, 0xD141, 0xC5D4, 0xD143, 0xC5D5, 0xD144, 0xC5D6, 0xD145, 0xC5D7, 0xD14C, 0xC5D8, 0xD14D, 0xC5D9, 0xD150, 0xC5DA, 0xD154,
- 0xC5DB, 0xD15C, 0xC5DC, 0xD15D, 0xC5DD, 0xD15F, 0xC5DE, 0xD161, 0xC5DF, 0xD168, 0xC5E0, 0xD16C, 0xC5E1, 0xD17C, 0xC5E2, 0xD184,
- 0xC5E3, 0xD188, 0xC5E4, 0xD1A0, 0xC5E5, 0xD1A1, 0xC5E6, 0xD1A4, 0xC5E7, 0xD1A8, 0xC5E8, 0xD1B0, 0xC5E9, 0xD1B1, 0xC5EA, 0xD1B3,
- 0xC5EB, 0xD1B5, 0xC5EC, 0xD1BA, 0xC5ED, 0xD1BC, 0xC5EE, 0xD1C0, 0xC5EF, 0xD1D8, 0xC5F0, 0xD1F4, 0xC5F1, 0xD1F8, 0xC5F2, 0xD207,
- 0xC5F3, 0xD209, 0xC5F4, 0xD210, 0xC5F5, 0xD22C, 0xC5F6, 0xD22D, 0xC5F7, 0xD230, 0xC5F8, 0xD234, 0xC5F9, 0xD23C, 0xC5FA, 0xD23D,
- 0xC5FB, 0xD23F, 0xC5FC, 0xD241, 0xC5FD, 0xD248, 0xC5FE, 0xD25C, 0xC641, 0xD78D, 0xC642, 0xD78E, 0xC643, 0xD78F, 0xC644, 0xD791,
- 0xC645, 0xD792, 0xC646, 0xD793, 0xC647, 0xD794, 0xC648, 0xD795, 0xC649, 0xD796, 0xC64A, 0xD797, 0xC64B, 0xD79A, 0xC64C, 0xD79C,
- 0xC64D, 0xD79E, 0xC64E, 0xD79F, 0xC64F, 0xD7A0, 0xC650, 0xD7A1, 0xC651, 0xD7A2, 0xC652, 0xD7A3, 0xC6A1, 0xD264, 0xC6A2, 0xD280,
- 0xC6A3, 0xD281, 0xC6A4, 0xD284, 0xC6A5, 0xD288, 0xC6A6, 0xD290, 0xC6A7, 0xD291, 0xC6A8, 0xD295, 0xC6A9, 0xD29C, 0xC6AA, 0xD2A0,
- 0xC6AB, 0xD2A4, 0xC6AC, 0xD2AC, 0xC6AD, 0xD2B1, 0xC6AE, 0xD2B8, 0xC6AF, 0xD2B9, 0xC6B0, 0xD2BC, 0xC6B1, 0xD2BF, 0xC6B2, 0xD2C0,
- 0xC6B3, 0xD2C2, 0xC6B4, 0xD2C8, 0xC6B5, 0xD2C9, 0xC6B6, 0xD2CB, 0xC6B7, 0xD2D4, 0xC6B8, 0xD2D8, 0xC6B9, 0xD2DC, 0xC6BA, 0xD2E4,
- 0xC6BB, 0xD2E5, 0xC6BC, 0xD2F0, 0xC6BD, 0xD2F1, 0xC6BE, 0xD2F4, 0xC6BF, 0xD2F8, 0xC6C0, 0xD300, 0xC6C1, 0xD301, 0xC6C2, 0xD303,
- 0xC6C3, 0xD305, 0xC6C4, 0xD30C, 0xC6C5, 0xD30D, 0xC6C6, 0xD30E, 0xC6C7, 0xD310, 0xC6C8, 0xD314, 0xC6C9, 0xD316, 0xC6CA, 0xD31C,
- 0xC6CB, 0xD31D, 0xC6CC, 0xD31F, 0xC6CD, 0xD320, 0xC6CE, 0xD321, 0xC6CF, 0xD325, 0xC6D0, 0xD328, 0xC6D1, 0xD329, 0xC6D2, 0xD32C,
- 0xC6D3, 0xD330, 0xC6D4, 0xD338, 0xC6D5, 0xD339, 0xC6D6, 0xD33B, 0xC6D7, 0xD33C, 0xC6D8, 0xD33D, 0xC6D9, 0xD344, 0xC6DA, 0xD345,
- 0xC6DB, 0xD37C, 0xC6DC, 0xD37D, 0xC6DD, 0xD380, 0xC6DE, 0xD384, 0xC6DF, 0xD38C, 0xC6E0, 0xD38D, 0xC6E1, 0xD38F, 0xC6E2, 0xD390,
- 0xC6E3, 0xD391, 0xC6E4, 0xD398, 0xC6E5, 0xD399, 0xC6E6, 0xD39C, 0xC6E7, 0xD3A0, 0xC6E8, 0xD3A8, 0xC6E9, 0xD3A9, 0xC6EA, 0xD3AB,
- 0xC6EB, 0xD3AD, 0xC6EC, 0xD3B4, 0xC6ED, 0xD3B8, 0xC6EE, 0xD3BC, 0xC6EF, 0xD3C4, 0xC6F0, 0xD3C5, 0xC6F1, 0xD3C8, 0xC6F2, 0xD3C9,
- 0xC6F3, 0xD3D0, 0xC6F4, 0xD3D8, 0xC6F5, 0xD3E1, 0xC6F6, 0xD3E3, 0xC6F7, 0xD3EC, 0xC6F8, 0xD3ED, 0xC6F9, 0xD3F0, 0xC6FA, 0xD3F4,
- 0xC6FB, 0xD3FC, 0xC6FC, 0xD3FD, 0xC6FD, 0xD3FF, 0xC6FE, 0xD401, 0xC7A1, 0xD408, 0xC7A2, 0xD41D, 0xC7A3, 0xD440, 0xC7A4, 0xD444,
- 0xC7A5, 0xD45C, 0xC7A6, 0xD460, 0xC7A7, 0xD464, 0xC7A8, 0xD46D, 0xC7A9, 0xD46F, 0xC7AA, 0xD478, 0xC7AB, 0xD479, 0xC7AC, 0xD47C,
- 0xC7AD, 0xD47F, 0xC7AE, 0xD480, 0xC7AF, 0xD482, 0xC7B0, 0xD488, 0xC7B1, 0xD489, 0xC7B2, 0xD48B, 0xC7B3, 0xD48D, 0xC7B4, 0xD494,
- 0xC7B5, 0xD4A9, 0xC7B6, 0xD4CC, 0xC7B7, 0xD4D0, 0xC7B8, 0xD4D4, 0xC7B9, 0xD4DC, 0xC7BA, 0xD4DF, 0xC7BB, 0xD4E8, 0xC7BC, 0xD4EC,
- 0xC7BD, 0xD4F0, 0xC7BE, 0xD4F8, 0xC7BF, 0xD4FB, 0xC7C0, 0xD4FD, 0xC7C1, 0xD504, 0xC7C2, 0xD508, 0xC7C3, 0xD50C, 0xC7C4, 0xD514,
- 0xC7C5, 0xD515, 0xC7C6, 0xD517, 0xC7C7, 0xD53C, 0xC7C8, 0xD53D, 0xC7C9, 0xD540, 0xC7CA, 0xD544, 0xC7CB, 0xD54C, 0xC7CC, 0xD54D,
- 0xC7CD, 0xD54F, 0xC7CE, 0xD551, 0xC7CF, 0xD558, 0xC7D0, 0xD559, 0xC7D1, 0xD55C, 0xC7D2, 0xD560, 0xC7D3, 0xD565, 0xC7D4, 0xD568,
- 0xC7D5, 0xD569, 0xC7D6, 0xD56B, 0xC7D7, 0xD56D, 0xC7D8, 0xD574, 0xC7D9, 0xD575, 0xC7DA, 0xD578, 0xC7DB, 0xD57C, 0xC7DC, 0xD584,
- 0xC7DD, 0xD585, 0xC7DE, 0xD587, 0xC7DF, 0xD588, 0xC7E0, 0xD589, 0xC7E1, 0xD590, 0xC7E2, 0xD5A5, 0xC7E3, 0xD5C8, 0xC7E4, 0xD5C9,
- 0xC7E5, 0xD5CC, 0xC7E6, 0xD5D0, 0xC7E7, 0xD5D2, 0xC7E8, 0xD5D8, 0xC7E9, 0xD5D9, 0xC7EA, 0xD5DB, 0xC7EB, 0xD5DD, 0xC7EC, 0xD5E4,
- 0xC7ED, 0xD5E5, 0xC7EE, 0xD5E8, 0xC7EF, 0xD5EC, 0xC7F0, 0xD5F4, 0xC7F1, 0xD5F5, 0xC7F2, 0xD5F7, 0xC7F3, 0xD5F9, 0xC7F4, 0xD600,
- 0xC7F5, 0xD601, 0xC7F6, 0xD604, 0xC7F7, 0xD608, 0xC7F8, 0xD610, 0xC7F9, 0xD611, 0xC7FA, 0xD613, 0xC7FB, 0xD614, 0xC7FC, 0xD615,
- 0xC7FD, 0xD61C, 0xC7FE, 0xD620, 0xC8A1, 0xD624, 0xC8A2, 0xD62D, 0xC8A3, 0xD638, 0xC8A4, 0xD639, 0xC8A5, 0xD63C, 0xC8A6, 0xD640,
- 0xC8A7, 0xD645, 0xC8A8, 0xD648, 0xC8A9, 0xD649, 0xC8AA, 0xD64B, 0xC8AB, 0xD64D, 0xC8AC, 0xD651, 0xC8AD, 0xD654, 0xC8AE, 0xD655,
- 0xC8AF, 0xD658, 0xC8B0, 0xD65C, 0xC8B1, 0xD667, 0xC8B2, 0xD669, 0xC8B3, 0xD670, 0xC8B4, 0xD671, 0xC8B5, 0xD674, 0xC8B6, 0xD683,
- 0xC8B7, 0xD685, 0xC8B8, 0xD68C, 0xC8B9, 0xD68D, 0xC8BA, 0xD690, 0xC8BB, 0xD694, 0xC8BC, 0xD69D, 0xC8BD, 0xD69F, 0xC8BE, 0xD6A1,
- 0xC8BF, 0xD6A8, 0xC8C0, 0xD6AC, 0xC8C1, 0xD6B0, 0xC8C2, 0xD6B9, 0xC8C3, 0xD6BB, 0xC8C4, 0xD6C4, 0xC8C5, 0xD6C5, 0xC8C6, 0xD6C8,
- 0xC8C7, 0xD6CC, 0xC8C8, 0xD6D1, 0xC8C9, 0xD6D4, 0xC8CA, 0xD6D7, 0xC8CB, 0xD6D9, 0xC8CC, 0xD6E0, 0xC8CD, 0xD6E4, 0xC8CE, 0xD6E8,
- 0xC8CF, 0xD6F0, 0xC8D0, 0xD6F5, 0xC8D1, 0xD6FC, 0xC8D2, 0xD6FD, 0xC8D3, 0xD700, 0xC8D4, 0xD704, 0xC8D5, 0xD711, 0xC8D6, 0xD718,
- 0xC8D7, 0xD719, 0xC8D8, 0xD71C, 0xC8D9, 0xD720, 0xC8DA, 0xD728, 0xC8DB, 0xD729, 0xC8DC, 0xD72B, 0xC8DD, 0xD72D, 0xC8DE, 0xD734,
- 0xC8DF, 0xD735, 0xC8E0, 0xD738, 0xC8E1, 0xD73C, 0xC8E2, 0xD744, 0xC8E3, 0xD747, 0xC8E4, 0xD749, 0xC8E5, 0xD750, 0xC8E6, 0xD751,
- 0xC8E7, 0xD754, 0xC8E8, 0xD756, 0xC8E9, 0xD757, 0xC8EA, 0xD758, 0xC8EB, 0xD759, 0xC8EC, 0xD760, 0xC8ED, 0xD761, 0xC8EE, 0xD763,
- 0xC8EF, 0xD765, 0xC8F0, 0xD769, 0xC8F1, 0xD76C, 0xC8F2, 0xD770, 0xC8F3, 0xD774, 0xC8F4, 0xD77C, 0xC8F5, 0xD77D, 0xC8F6, 0xD781,
- 0xC8F7, 0xD788, 0xC8F8, 0xD789, 0xC8F9, 0xD78C, 0xC8FA, 0xD790, 0xC8FB, 0xD798, 0xC8FC, 0xD799, 0xC8FD, 0xD79B, 0xC8FE, 0xD79D,
- 0xCAA1, 0x4F3D, 0xCAA2, 0x4F73, 0xCAA3, 0x5047, 0xCAA4, 0x50F9, 0xCAA5, 0x52A0, 0xCAA6, 0x53EF, 0xCAA7, 0x5475, 0xCAA8, 0x54E5,
- 0xCAA9, 0x5609, 0xCAAA, 0x5AC1, 0xCAAB, 0x5BB6, 0xCAAC, 0x6687, 0xCAAD, 0x67B6, 0xCAAE, 0x67B7, 0xCAAF, 0x67EF, 0xCAB0, 0x6B4C,
- 0xCAB1, 0x73C2, 0xCAB2, 0x75C2, 0xCAB3, 0x7A3C, 0xCAB4, 0x82DB, 0xCAB5, 0x8304, 0xCAB6, 0x8857, 0xCAB7, 0x8888, 0xCAB8, 0x8A36,
- 0xCAB9, 0x8CC8, 0xCABA, 0x8DCF, 0xCABB, 0x8EFB, 0xCABC, 0x8FE6, 0xCABD, 0x99D5, 0xCABE, 0x523B, 0xCABF, 0x5374, 0xCAC0, 0x5404,
- 0xCAC1, 0x606A, 0xCAC2, 0x6164, 0xCAC3, 0x6BBC, 0xCAC4, 0x73CF, 0xCAC5, 0x811A, 0xCAC6, 0x89BA, 0xCAC7, 0x89D2, 0xCAC8, 0x95A3,
- 0xCAC9, 0x4F83, 0xCACA, 0x520A, 0xCACB, 0x58BE, 0xCACC, 0x5978, 0xCACD, 0x59E6, 0xCACE, 0x5E72, 0xCACF, 0x5E79, 0xCAD0, 0x61C7,
- 0xCAD1, 0x63C0, 0xCAD2, 0x6746, 0xCAD3, 0x67EC, 0xCAD4, 0x687F, 0xCAD5, 0x6F97, 0xCAD6, 0x764E, 0xCAD7, 0x770B, 0xCAD8, 0x78F5,
- 0xCAD9, 0x7A08, 0xCADA, 0x7AFF, 0xCADB, 0x7C21, 0xCADC, 0x809D, 0xCADD, 0x826E, 0xCADE, 0x8271, 0xCADF, 0x8AEB, 0xCAE0, 0x9593,
- 0xCAE1, 0x4E6B, 0xCAE2, 0x559D, 0xCAE3, 0x66F7, 0xCAE4, 0x6E34, 0xCAE5, 0x78A3, 0xCAE6, 0x7AED, 0xCAE7, 0x845B, 0xCAE8, 0x8910,
- 0xCAE9, 0x874E, 0xCAEA, 0x97A8, 0xCAEB, 0x52D8, 0xCAEC, 0x574E, 0xCAED, 0x582A, 0xCAEE, 0x5D4C, 0xCAEF, 0x611F, 0xCAF0, 0x61BE,
- 0xCAF1, 0x6221, 0xCAF2, 0x6562, 0xCAF3, 0x67D1, 0xCAF4, 0x6A44, 0xCAF5, 0x6E1B, 0xCAF6, 0x7518, 0xCAF7, 0x75B3, 0xCAF8, 0x76E3,
- 0xCAF9, 0x77B0, 0xCAFA, 0x7D3A, 0xCAFB, 0x90AF, 0xCAFC, 0x9451, 0xCAFD, 0x9452, 0xCAFE, 0x9F95, 0xCBA1, 0x5323, 0xCBA2, 0x5CAC,
- 0xCBA3, 0x7532, 0xCBA4, 0x80DB, 0xCBA5, 0x9240, 0xCBA6, 0x9598, 0xCBA7, 0x525B, 0xCBA8, 0x5808, 0xCBA9, 0x59DC, 0xCBAA, 0x5CA1,
- 0xCBAB, 0x5D17, 0xCBAC, 0x5EB7, 0xCBAD, 0x5F3A, 0xCBAE, 0x5F4A, 0xCBAF, 0x6177, 0xCBB0, 0x6C5F, 0xCBB1, 0x757A, 0xCBB2, 0x7586,
- 0xCBB3, 0x7CE0, 0xCBB4, 0x7D73, 0xCBB5, 0x7DB1, 0xCBB6, 0x7F8C, 0xCBB7, 0x8154, 0xCBB8, 0x8221, 0xCBB9, 0x8591, 0xCBBA, 0x8941,
- 0xCBBB, 0x8B1B, 0xCBBC, 0x92FC, 0xCBBD, 0x964D, 0xCBBE, 0x9C47, 0xCBBF, 0x4ECB, 0xCBC0, 0x4EF7, 0xCBC1, 0x500B, 0xCBC2, 0x51F1,
- 0xCBC3, 0x584F, 0xCBC4, 0x6137, 0xCBC5, 0x613E, 0xCBC6, 0x6168, 0xCBC7, 0x6539, 0xCBC8, 0x69EA, 0xCBC9, 0x6F11, 0xCBCA, 0x75A5,
- 0xCBCB, 0x7686, 0xCBCC, 0x76D6, 0xCBCD, 0x7B87, 0xCBCE, 0x82A5, 0xCBCF, 0x84CB, 0xCBD0, 0xF900, 0xCBD1, 0x93A7, 0xCBD2, 0x958B,
- 0xCBD3, 0x5580, 0xCBD4, 0x5BA2, 0xCBD5, 0x5751, 0xCBD6, 0xF901, 0xCBD7, 0x7CB3, 0xCBD8, 0x7FB9, 0xCBD9, 0x91B5, 0xCBDA, 0x5028,
- 0xCBDB, 0x53BB, 0xCBDC, 0x5C45, 0xCBDD, 0x5DE8, 0xCBDE, 0x62D2, 0xCBDF, 0x636E, 0xCBE0, 0x64DA, 0xCBE1, 0x64E7, 0xCBE2, 0x6E20,
- 0xCBE3, 0x70AC, 0xCBE4, 0x795B, 0xCBE5, 0x8DDD, 0xCBE6, 0x8E1E, 0xCBE7, 0xF902, 0xCBE8, 0x907D, 0xCBE9, 0x9245, 0xCBEA, 0x92F8,
- 0xCBEB, 0x4E7E, 0xCBEC, 0x4EF6, 0xCBED, 0x5065, 0xCBEE, 0x5DFE, 0xCBEF, 0x5EFA, 0xCBF0, 0x6106, 0xCBF1, 0x6957, 0xCBF2, 0x8171,
- 0xCBF3, 0x8654, 0xCBF4, 0x8E47, 0xCBF5, 0x9375, 0xCBF6, 0x9A2B, 0xCBF7, 0x4E5E, 0xCBF8, 0x5091, 0xCBF9, 0x6770, 0xCBFA, 0x6840,
- 0xCBFB, 0x5109, 0xCBFC, 0x528D, 0xCBFD, 0x5292, 0xCBFE, 0x6AA2, 0xCCA1, 0x77BC, 0xCCA2, 0x9210, 0xCCA3, 0x9ED4, 0xCCA4, 0x52AB,
- 0xCCA5, 0x602F, 0xCCA6, 0x8FF2, 0xCCA7, 0x5048, 0xCCA8, 0x61A9, 0xCCA9, 0x63ED, 0xCCAA, 0x64CA, 0xCCAB, 0x683C, 0xCCAC, 0x6A84,
- 0xCCAD, 0x6FC0, 0xCCAE, 0x8188, 0xCCAF, 0x89A1, 0xCCB0, 0x9694, 0xCCB1, 0x5805, 0xCCB2, 0x727D, 0xCCB3, 0x72AC, 0xCCB4, 0x7504,
- 0xCCB5, 0x7D79, 0xCCB6, 0x7E6D, 0xCCB7, 0x80A9, 0xCCB8, 0x898B, 0xCCB9, 0x8B74, 0xCCBA, 0x9063, 0xCCBB, 0x9D51, 0xCCBC, 0x6289,
- 0xCCBD, 0x6C7A, 0xCCBE, 0x6F54, 0xCCBF, 0x7D50, 0xCCC0, 0x7F3A, 0xCCC1, 0x8A23, 0xCCC2, 0x517C, 0xCCC3, 0x614A, 0xCCC4, 0x7B9D,
- 0xCCC5, 0x8B19, 0xCCC6, 0x9257, 0xCCC7, 0x938C, 0xCCC8, 0x4EAC, 0xCCC9, 0x4FD3, 0xCCCA, 0x501E, 0xCCCB, 0x50BE, 0xCCCC, 0x5106,
- 0xCCCD, 0x52C1, 0xCCCE, 0x52CD, 0xCCCF, 0x537F, 0xCCD0, 0x5770, 0xCCD1, 0x5883, 0xCCD2, 0x5E9A, 0xCCD3, 0x5F91, 0xCCD4, 0x6176,
- 0xCCD5, 0x61AC, 0xCCD6, 0x64CE, 0xCCD7, 0x656C, 0xCCD8, 0x666F, 0xCCD9, 0x66BB, 0xCCDA, 0x66F4, 0xCCDB, 0x6897, 0xCCDC, 0x6D87,
- 0xCCDD, 0x7085, 0xCCDE, 0x70F1, 0xCCDF, 0x749F, 0xCCE0, 0x74A5, 0xCCE1, 0x74CA, 0xCCE2, 0x75D9, 0xCCE3, 0x786C, 0xCCE4, 0x78EC,
- 0xCCE5, 0x7ADF, 0xCCE6, 0x7AF6, 0xCCE7, 0x7D45, 0xCCE8, 0x7D93, 0xCCE9, 0x8015, 0xCCEA, 0x803F, 0xCCEB, 0x811B, 0xCCEC, 0x8396,
- 0xCCED, 0x8B66, 0xCCEE, 0x8F15, 0xCCEF, 0x9015, 0xCCF0, 0x93E1, 0xCCF1, 0x9803, 0xCCF2, 0x9838, 0xCCF3, 0x9A5A, 0xCCF4, 0x9BE8,
- 0xCCF5, 0x4FC2, 0xCCF6, 0x5553, 0xCCF7, 0x583A, 0xCCF8, 0x5951, 0xCCF9, 0x5B63, 0xCCFA, 0x5C46, 0xCCFB, 0x60B8, 0xCCFC, 0x6212,
- 0xCCFD, 0x6842, 0xCCFE, 0x68B0, 0xCDA1, 0x68E8, 0xCDA2, 0x6EAA, 0xCDA3, 0x754C, 0xCDA4, 0x7678, 0xCDA5, 0x78CE, 0xCDA6, 0x7A3D,
- 0xCDA7, 0x7CFB, 0xCDA8, 0x7E6B, 0xCDA9, 0x7E7C, 0xCDAA, 0x8A08, 0xCDAB, 0x8AA1, 0xCDAC, 0x8C3F, 0xCDAD, 0x968E, 0xCDAE, 0x9DC4,
- 0xCDAF, 0x53E4, 0xCDB0, 0x53E9, 0xCDB1, 0x544A, 0xCDB2, 0x5471, 0xCDB3, 0x56FA, 0xCDB4, 0x59D1, 0xCDB5, 0x5B64, 0xCDB6, 0x5C3B,
- 0xCDB7, 0x5EAB, 0xCDB8, 0x62F7, 0xCDB9, 0x6537, 0xCDBA, 0x6545, 0xCDBB, 0x6572, 0xCDBC, 0x66A0, 0xCDBD, 0x67AF, 0xCDBE, 0x69C1,
- 0xCDBF, 0x6CBD, 0xCDC0, 0x75FC, 0xCDC1, 0x7690, 0xCDC2, 0x777E, 0xCDC3, 0x7A3F, 0xCDC4, 0x7F94, 0xCDC5, 0x8003, 0xCDC6, 0x80A1,
- 0xCDC7, 0x818F, 0xCDC8, 0x82E6, 0xCDC9, 0x82FD, 0xCDCA, 0x83F0, 0xCDCB, 0x85C1, 0xCDCC, 0x8831, 0xCDCD, 0x88B4, 0xCDCE, 0x8AA5,
- 0xCDCF, 0xF903, 0xCDD0, 0x8F9C, 0xCDD1, 0x932E, 0xCDD2, 0x96C7, 0xCDD3, 0x9867, 0xCDD4, 0x9AD8, 0xCDD5, 0x9F13, 0xCDD6, 0x54ED,
- 0xCDD7, 0x659B, 0xCDD8, 0x66F2, 0xCDD9, 0x688F, 0xCDDA, 0x7A40, 0xCDDB, 0x8C37, 0xCDDC, 0x9D60, 0xCDDD, 0x56F0, 0xCDDE, 0x5764,
- 0xCDDF, 0x5D11, 0xCDE0, 0x6606, 0xCDE1, 0x68B1, 0xCDE2, 0x68CD, 0xCDE3, 0x6EFE, 0xCDE4, 0x7428, 0xCDE5, 0x889E, 0xCDE6, 0x9BE4,
- 0xCDE7, 0x6C68, 0xCDE8, 0xF904, 0xCDE9, 0x9AA8, 0xCDEA, 0x4F9B, 0xCDEB, 0x516C, 0xCDEC, 0x5171, 0xCDED, 0x529F, 0xCDEE, 0x5B54,
- 0xCDEF, 0x5DE5, 0xCDF0, 0x6050, 0xCDF1, 0x606D, 0xCDF2, 0x62F1, 0xCDF3, 0x63A7, 0xCDF4, 0x653B, 0xCDF5, 0x73D9, 0xCDF6, 0x7A7A,
- 0xCDF7, 0x86A3, 0xCDF8, 0x8CA2, 0xCDF9, 0x978F, 0xCDFA, 0x4E32, 0xCDFB, 0x5BE1, 0xCDFC, 0x6208, 0xCDFD, 0x679C, 0xCDFE, 0x74DC,
- 0xCEA1, 0x79D1, 0xCEA2, 0x83D3, 0xCEA3, 0x8A87, 0xCEA4, 0x8AB2, 0xCEA5, 0x8DE8, 0xCEA6, 0x904E, 0xCEA7, 0x934B, 0xCEA8, 0x9846,
- 0xCEA9, 0x5ED3, 0xCEAA, 0x69E8, 0xCEAB, 0x85FF, 0xCEAC, 0x90ED, 0xCEAD, 0xF905, 0xCEAE, 0x51A0, 0xCEAF, 0x5B98, 0xCEB0, 0x5BEC,
- 0xCEB1, 0x6163, 0xCEB2, 0x68FA, 0xCEB3, 0x6B3E, 0xCEB4, 0x704C, 0xCEB5, 0x742F, 0xCEB6, 0x74D8, 0xCEB7, 0x7BA1, 0xCEB8, 0x7F50,
- 0xCEB9, 0x83C5, 0xCEBA, 0x89C0, 0xCEBB, 0x8CAB, 0xCEBC, 0x95DC, 0xCEBD, 0x9928, 0xCEBE, 0x522E, 0xCEBF, 0x605D, 0xCEC0, 0x62EC,
- 0xCEC1, 0x9002, 0xCEC2, 0x4F8A, 0xCEC3, 0x5149, 0xCEC4, 0x5321, 0xCEC5, 0x58D9, 0xCEC6, 0x5EE3, 0xCEC7, 0x66E0, 0xCEC8, 0x6D38,
- 0xCEC9, 0x709A, 0xCECA, 0x72C2, 0xCECB, 0x73D6, 0xCECC, 0x7B50, 0xCECD, 0x80F1, 0xCECE, 0x945B, 0xCECF, 0x5366, 0xCED0, 0x639B,
- 0xCED1, 0x7F6B, 0xCED2, 0x4E56, 0xCED3, 0x5080, 0xCED4, 0x584A, 0xCED5, 0x58DE, 0xCED6, 0x602A, 0xCED7, 0x6127, 0xCED8, 0x62D0,
- 0xCED9, 0x69D0, 0xCEDA, 0x9B41, 0xCEDB, 0x5B8F, 0xCEDC, 0x7D18, 0xCEDD, 0x80B1, 0xCEDE, 0x8F5F, 0xCEDF, 0x4EA4, 0xCEE0, 0x50D1,
- 0xCEE1, 0x54AC, 0xCEE2, 0x55AC, 0xCEE3, 0x5B0C, 0xCEE4, 0x5DA0, 0xCEE5, 0x5DE7, 0xCEE6, 0x652A, 0xCEE7, 0x654E, 0xCEE8, 0x6821,
- 0xCEE9, 0x6A4B, 0xCEEA, 0x72E1, 0xCEEB, 0x768E, 0xCEEC, 0x77EF, 0xCEED, 0x7D5E, 0xCEEE, 0x7FF9, 0xCEEF, 0x81A0, 0xCEF0, 0x854E,
- 0xCEF1, 0x86DF, 0xCEF2, 0x8F03, 0xCEF3, 0x8F4E, 0xCEF4, 0x90CA, 0xCEF5, 0x9903, 0xCEF6, 0x9A55, 0xCEF7, 0x9BAB, 0xCEF8, 0x4E18,
- 0xCEF9, 0x4E45, 0xCEFA, 0x4E5D, 0xCEFB, 0x4EC7, 0xCEFC, 0x4FF1, 0xCEFD, 0x5177, 0xCEFE, 0x52FE, 0xCFA1, 0x5340, 0xCFA2, 0x53E3,
- 0xCFA3, 0x53E5, 0xCFA4, 0x548E, 0xCFA5, 0x5614, 0xCFA6, 0x5775, 0xCFA7, 0x57A2, 0xCFA8, 0x5BC7, 0xCFA9, 0x5D87, 0xCFAA, 0x5ED0,
- 0xCFAB, 0x61FC, 0xCFAC, 0x62D8, 0xCFAD, 0x6551, 0xCFAE, 0x67B8, 0xCFAF, 0x67E9, 0xCFB0, 0x69CB, 0xCFB1, 0x6B50, 0xCFB2, 0x6BC6,
- 0xCFB3, 0x6BEC, 0xCFB4, 0x6C42, 0xCFB5, 0x6E9D, 0xCFB6, 0x7078, 0xCFB7, 0x72D7, 0xCFB8, 0x7396, 0xCFB9, 0x7403, 0xCFBA, 0x77BF,
- 0xCFBB, 0x77E9, 0xCFBC, 0x7A76, 0xCFBD, 0x7D7F, 0xCFBE, 0x8009, 0xCFBF, 0x81FC, 0xCFC0, 0x8205, 0xCFC1, 0x820A, 0xCFC2, 0x82DF,
- 0xCFC3, 0x8862, 0xCFC4, 0x8B33, 0xCFC5, 0x8CFC, 0xCFC6, 0x8EC0, 0xCFC7, 0x9011, 0xCFC8, 0x90B1, 0xCFC9, 0x9264, 0xCFCA, 0x92B6,
- 0xCFCB, 0x99D2, 0xCFCC, 0x9A45, 0xCFCD, 0x9CE9, 0xCFCE, 0x9DD7, 0xCFCF, 0x9F9C, 0xCFD0, 0x570B, 0xCFD1, 0x5C40, 0xCFD2, 0x83CA,
- 0xCFD3, 0x97A0, 0xCFD4, 0x97AB, 0xCFD5, 0x9EB4, 0xCFD6, 0x541B, 0xCFD7, 0x7A98, 0xCFD8, 0x7FA4, 0xCFD9, 0x88D9, 0xCFDA, 0x8ECD,
- 0xCFDB, 0x90E1, 0xCFDC, 0x5800, 0xCFDD, 0x5C48, 0xCFDE, 0x6398, 0xCFDF, 0x7A9F, 0xCFE0, 0x5BAE, 0xCFE1, 0x5F13, 0xCFE2, 0x7A79,
- 0xCFE3, 0x7AAE, 0xCFE4, 0x828E, 0xCFE5, 0x8EAC, 0xCFE6, 0x5026, 0xCFE7, 0x5238, 0xCFE8, 0x52F8, 0xCFE9, 0x5377, 0xCFEA, 0x5708,
- 0xCFEB, 0x62F3, 0xCFEC, 0x6372, 0xCFED, 0x6B0A, 0xCFEE, 0x6DC3, 0xCFEF, 0x7737, 0xCFF0, 0x53A5, 0xCFF1, 0x7357, 0xCFF2, 0x8568,
- 0xCFF3, 0x8E76, 0xCFF4, 0x95D5, 0xCFF5, 0x673A, 0xCFF6, 0x6AC3, 0xCFF7, 0x6F70, 0xCFF8, 0x8A6D, 0xCFF9, 0x8ECC, 0xCFFA, 0x994B,
- 0xCFFB, 0xF906, 0xCFFC, 0x6677, 0xCFFD, 0x6B78, 0xCFFE, 0x8CB4, 0xD0A1, 0x9B3C, 0xD0A2, 0xF907, 0xD0A3, 0x53EB, 0xD0A4, 0x572D,
- 0xD0A5, 0x594E, 0xD0A6, 0x63C6, 0xD0A7, 0x69FB, 0xD0A8, 0x73EA, 0xD0A9, 0x7845, 0xD0AA, 0x7ABA, 0xD0AB, 0x7AC5, 0xD0AC, 0x7CFE,
- 0xD0AD, 0x8475, 0xD0AE, 0x898F, 0xD0AF, 0x8D73, 0xD0B0, 0x9035, 0xD0B1, 0x95A8, 0xD0B2, 0x52FB, 0xD0B3, 0x5747, 0xD0B4, 0x7547,
- 0xD0B5, 0x7B60, 0xD0B6, 0x83CC, 0xD0B7, 0x921E, 0xD0B8, 0xF908, 0xD0B9, 0x6A58, 0xD0BA, 0x514B, 0xD0BB, 0x524B, 0xD0BC, 0x5287,
- 0xD0BD, 0x621F, 0xD0BE, 0x68D8, 0xD0BF, 0x6975, 0xD0C0, 0x9699, 0xD0C1, 0x50C5, 0xD0C2, 0x52A4, 0xD0C3, 0x52E4, 0xD0C4, 0x61C3,
- 0xD0C5, 0x65A4, 0xD0C6, 0x6839, 0xD0C7, 0x69FF, 0xD0C8, 0x747E, 0xD0C9, 0x7B4B, 0xD0CA, 0x82B9, 0xD0CB, 0x83EB, 0xD0CC, 0x89B2,
- 0xD0CD, 0x8B39, 0xD0CE, 0x8FD1, 0xD0CF, 0x9949, 0xD0D0, 0xF909, 0xD0D1, 0x4ECA, 0xD0D2, 0x5997, 0xD0D3, 0x64D2, 0xD0D4, 0x6611,
- 0xD0D5, 0x6A8E, 0xD0D6, 0x7434, 0xD0D7, 0x7981, 0xD0D8, 0x79BD, 0xD0D9, 0x82A9, 0xD0DA, 0x887E, 0xD0DB, 0x887F, 0xD0DC, 0x895F,
- 0xD0DD, 0xF90A, 0xD0DE, 0x9326, 0xD0DF, 0x4F0B, 0xD0E0, 0x53CA, 0xD0E1, 0x6025, 0xD0E2, 0x6271, 0xD0E3, 0x6C72, 0xD0E4, 0x7D1A,
- 0xD0E5, 0x7D66, 0xD0E6, 0x4E98, 0xD0E7, 0x5162, 0xD0E8, 0x77DC, 0xD0E9, 0x80AF, 0xD0EA, 0x4F01, 0xD0EB, 0x4F0E, 0xD0EC, 0x5176,
- 0xD0ED, 0x5180, 0xD0EE, 0x55DC, 0xD0EF, 0x5668, 0xD0F0, 0x573B, 0xD0F1, 0x57FA, 0xD0F2, 0x57FC, 0xD0F3, 0x5914, 0xD0F4, 0x5947,
- 0xD0F5, 0x5993, 0xD0F6, 0x5BC4, 0xD0F7, 0x5C90, 0xD0F8, 0x5D0E, 0xD0F9, 0x5DF1, 0xD0FA, 0x5E7E, 0xD0FB, 0x5FCC, 0xD0FC, 0x6280,
- 0xD0FD, 0x65D7, 0xD0FE, 0x65E3, 0xD1A1, 0x671E, 0xD1A2, 0x671F, 0xD1A3, 0x675E, 0xD1A4, 0x68CB, 0xD1A5, 0x68C4, 0xD1A6, 0x6A5F,
- 0xD1A7, 0x6B3A, 0xD1A8, 0x6C23, 0xD1A9, 0x6C7D, 0xD1AA, 0x6C82, 0xD1AB, 0x6DC7, 0xD1AC, 0x7398, 0xD1AD, 0x7426, 0xD1AE, 0x742A,
- 0xD1AF, 0x7482, 0xD1B0, 0x74A3, 0xD1B1, 0x7578, 0xD1B2, 0x757F, 0xD1B3, 0x7881, 0xD1B4, 0x78EF, 0xD1B5, 0x7941, 0xD1B6, 0x7947,
- 0xD1B7, 0x7948, 0xD1B8, 0x797A, 0xD1B9, 0x7B95, 0xD1BA, 0x7D00, 0xD1BB, 0x7DBA, 0xD1BC, 0x7F88, 0xD1BD, 0x8006, 0xD1BE, 0x802D,
- 0xD1BF, 0x808C, 0xD1C0, 0x8A18, 0xD1C1, 0x8B4F, 0xD1C2, 0x8C48, 0xD1C3, 0x8D77, 0xD1C4, 0x9321, 0xD1C5, 0x9324, 0xD1C6, 0x98E2,
- 0xD1C7, 0x9951, 0xD1C8, 0x9A0E, 0xD1C9, 0x9A0F, 0xD1CA, 0x9A65, 0xD1CB, 0x9E92, 0xD1CC, 0x7DCA, 0xD1CD, 0x4F76, 0xD1CE, 0x5409,
- 0xD1CF, 0x62EE, 0xD1D0, 0x6854, 0xD1D1, 0x91D1, 0xD1D2, 0x55AB, 0xD1D3, 0x513A, 0xD1D4, 0xF90B, 0xD1D5, 0xF90C, 0xD1D6, 0x5A1C,
- 0xD1D7, 0x61E6, 0xD1D8, 0xF90D, 0xD1D9, 0x62CF, 0xD1DA, 0x62FF, 0xD1DB, 0xF90E, 0xD1DC, 0xF90F, 0xD1DD, 0xF910, 0xD1DE, 0xF911,
- 0xD1DF, 0xF912, 0xD1E0, 0xF913, 0xD1E1, 0x90A3, 0xD1E2, 0xF914, 0xD1E3, 0xF915, 0xD1E4, 0xF916, 0xD1E5, 0xF917, 0xD1E6, 0xF918,
- 0xD1E7, 0x8AFE, 0xD1E8, 0xF919, 0xD1E9, 0xF91A, 0xD1EA, 0xF91B, 0xD1EB, 0xF91C, 0xD1EC, 0x6696, 0xD1ED, 0xF91D, 0xD1EE, 0x7156,
- 0xD1EF, 0xF91E, 0xD1F0, 0xF91F, 0xD1F1, 0x96E3, 0xD1F2, 0xF920, 0xD1F3, 0x634F, 0xD1F4, 0x637A, 0xD1F5, 0x5357, 0xD1F6, 0xF921,
- 0xD1F7, 0x678F, 0xD1F8, 0x6960, 0xD1F9, 0x6E73, 0xD1FA, 0xF922, 0xD1FB, 0x7537, 0xD1FC, 0xF923, 0xD1FD, 0xF924, 0xD1FE, 0xF925,
- 0xD2A1, 0x7D0D, 0xD2A2, 0xF926, 0xD2A3, 0xF927, 0xD2A4, 0x8872, 0xD2A5, 0x56CA, 0xD2A6, 0x5A18, 0xD2A7, 0xF928, 0xD2A8, 0xF929,
- 0xD2A9, 0xF92A, 0xD2AA, 0xF92B, 0xD2AB, 0xF92C, 0xD2AC, 0x4E43, 0xD2AD, 0xF92D, 0xD2AE, 0x5167, 0xD2AF, 0x5948, 0xD2B0, 0x67F0,
- 0xD2B1, 0x8010, 0xD2B2, 0xF92E, 0xD2B3, 0x5973, 0xD2B4, 0x5E74, 0xD2B5, 0x649A, 0xD2B6, 0x79CA, 0xD2B7, 0x5FF5, 0xD2B8, 0x606C,
- 0xD2B9, 0x62C8, 0xD2BA, 0x637B, 0xD2BB, 0x5BE7, 0xD2BC, 0x5BD7, 0xD2BD, 0x52AA, 0xD2BE, 0xF92F, 0xD2BF, 0x5974, 0xD2C0, 0x5F29,
- 0xD2C1, 0x6012, 0xD2C2, 0xF930, 0xD2C3, 0xF931, 0xD2C4, 0xF932, 0xD2C5, 0x7459, 0xD2C6, 0xF933, 0xD2C7, 0xF934, 0xD2C8, 0xF935,
- 0xD2C9, 0xF936, 0xD2CA, 0xF937, 0xD2CB, 0xF938, 0xD2CC, 0x99D1, 0xD2CD, 0xF939, 0xD2CE, 0xF93A, 0xD2CF, 0xF93B, 0xD2D0, 0xF93C,
- 0xD2D1, 0xF93D, 0xD2D2, 0xF93E, 0xD2D3, 0xF93F, 0xD2D4, 0xF940, 0xD2D5, 0xF941, 0xD2D6, 0xF942, 0xD2D7, 0xF943, 0xD2D8, 0x6FC3,
- 0xD2D9, 0xF944, 0xD2DA, 0xF945, 0xD2DB, 0x81BF, 0xD2DC, 0x8FB2, 0xD2DD, 0x60F1, 0xD2DE, 0xF946, 0xD2DF, 0xF947, 0xD2E0, 0x8166,
- 0xD2E1, 0xF948, 0xD2E2, 0xF949, 0xD2E3, 0x5C3F, 0xD2E4, 0xF94A, 0xD2E5, 0xF94B, 0xD2E6, 0xF94C, 0xD2E7, 0xF94D, 0xD2E8, 0xF94E,
- 0xD2E9, 0xF94F, 0xD2EA, 0xF950, 0xD2EB, 0xF951, 0xD2EC, 0x5AE9, 0xD2ED, 0x8A25, 0xD2EE, 0x677B, 0xD2EF, 0x7D10, 0xD2F0, 0xF952,
- 0xD2F1, 0xF953, 0xD2F2, 0xF954, 0xD2F3, 0xF955, 0xD2F4, 0xF956, 0xD2F5, 0xF957, 0xD2F6, 0x80FD, 0xD2F7, 0xF958, 0xD2F8, 0xF959,
- 0xD2F9, 0x5C3C, 0xD2FA, 0x6CE5, 0xD2FB, 0x533F, 0xD2FC, 0x6EBA, 0xD2FD, 0x591A, 0xD2FE, 0x8336, 0xD3A1, 0x4E39, 0xD3A2, 0x4EB6,
- 0xD3A3, 0x4F46, 0xD3A4, 0x55AE, 0xD3A5, 0x5718, 0xD3A6, 0x58C7, 0xD3A7, 0x5F56, 0xD3A8, 0x65B7, 0xD3A9, 0x65E6, 0xD3AA, 0x6A80,
- 0xD3AB, 0x6BB5, 0xD3AC, 0x6E4D, 0xD3AD, 0x77ED, 0xD3AE, 0x7AEF, 0xD3AF, 0x7C1E, 0xD3B0, 0x7DDE, 0xD3B1, 0x86CB, 0xD3B2, 0x8892,
- 0xD3B3, 0x9132, 0xD3B4, 0x935B, 0xD3B5, 0x64BB, 0xD3B6, 0x6FBE, 0xD3B7, 0x737A, 0xD3B8, 0x75B8, 0xD3B9, 0x9054, 0xD3BA, 0x5556,
- 0xD3BB, 0x574D, 0xD3BC, 0x61BA, 0xD3BD, 0x64D4, 0xD3BE, 0x66C7, 0xD3BF, 0x6DE1, 0xD3C0, 0x6E5B, 0xD3C1, 0x6F6D, 0xD3C2, 0x6FB9,
- 0xD3C3, 0x75F0, 0xD3C4, 0x8043, 0xD3C5, 0x81BD, 0xD3C6, 0x8541, 0xD3C7, 0x8983, 0xD3C8, 0x8AC7, 0xD3C9, 0x8B5A, 0xD3CA, 0x931F,
- 0xD3CB, 0x6C93, 0xD3CC, 0x7553, 0xD3CD, 0x7B54, 0xD3CE, 0x8E0F, 0xD3CF, 0x905D, 0xD3D0, 0x5510, 0xD3D1, 0x5802, 0xD3D2, 0x5858,
- 0xD3D3, 0x5E62, 0xD3D4, 0x6207, 0xD3D5, 0x649E, 0xD3D6, 0x68E0, 0xD3D7, 0x7576, 0xD3D8, 0x7CD6, 0xD3D9, 0x87B3, 0xD3DA, 0x9EE8,
- 0xD3DB, 0x4EE3, 0xD3DC, 0x5788, 0xD3DD, 0x576E, 0xD3DE, 0x5927, 0xD3DF, 0x5C0D, 0xD3E0, 0x5CB1, 0xD3E1, 0x5E36, 0xD3E2, 0x5F85,
- 0xD3E3, 0x6234, 0xD3E4, 0x64E1, 0xD3E5, 0x73B3, 0xD3E6, 0x81FA, 0xD3E7, 0x888B, 0xD3E8, 0x8CB8, 0xD3E9, 0x968A, 0xD3EA, 0x9EDB,
- 0xD3EB, 0x5B85, 0xD3EC, 0x5FB7, 0xD3ED, 0x60B3, 0xD3EE, 0x5012, 0xD3EF, 0x5200, 0xD3F0, 0x5230, 0xD3F1, 0x5716, 0xD3F2, 0x5835,
- 0xD3F3, 0x5857, 0xD3F4, 0x5C0E, 0xD3F5, 0x5C60, 0xD3F6, 0x5CF6, 0xD3F7, 0x5D8B, 0xD3F8, 0x5EA6, 0xD3F9, 0x5F92, 0xD3FA, 0x60BC,
- 0xD3FB, 0x6311, 0xD3FC, 0x6389, 0xD3FD, 0x6417, 0xD3FE, 0x6843, 0xD4A1, 0x68F9, 0xD4A2, 0x6AC2, 0xD4A3, 0x6DD8, 0xD4A4, 0x6E21,
- 0xD4A5, 0x6ED4, 0xD4A6, 0x6FE4, 0xD4A7, 0x71FE, 0xD4A8, 0x76DC, 0xD4A9, 0x7779, 0xD4AA, 0x79B1, 0xD4AB, 0x7A3B, 0xD4AC, 0x8404,
- 0xD4AD, 0x89A9, 0xD4AE, 0x8CED, 0xD4AF, 0x8DF3, 0xD4B0, 0x8E48, 0xD4B1, 0x9003, 0xD4B2, 0x9014, 0xD4B3, 0x9053, 0xD4B4, 0x90FD,
- 0xD4B5, 0x934D, 0xD4B6, 0x9676, 0xD4B7, 0x97DC, 0xD4B8, 0x6BD2, 0xD4B9, 0x7006, 0xD4BA, 0x7258, 0xD4BB, 0x72A2, 0xD4BC, 0x7368,
- 0xD4BD, 0x7763, 0xD4BE, 0x79BF, 0xD4BF, 0x7BE4, 0xD4C0, 0x7E9B, 0xD4C1, 0x8B80, 0xD4C2, 0x58A9, 0xD4C3, 0x60C7, 0xD4C4, 0x6566,
- 0xD4C5, 0x65FD, 0xD4C6, 0x66BE, 0xD4C7, 0x6C8C, 0xD4C8, 0x711E, 0xD4C9, 0x71C9, 0xD4CA, 0x8C5A, 0xD4CB, 0x9813, 0xD4CC, 0x4E6D,
- 0xD4CD, 0x7A81, 0xD4CE, 0x4EDD, 0xD4CF, 0x51AC, 0xD4D0, 0x51CD, 0xD4D1, 0x52D5, 0xD4D2, 0x540C, 0xD4D3, 0x61A7, 0xD4D4, 0x6771,
- 0xD4D5, 0x6850, 0xD4D6, 0x68DF, 0xD4D7, 0x6D1E, 0xD4D8, 0x6F7C, 0xD4D9, 0x75BC, 0xD4DA, 0x77B3, 0xD4DB, 0x7AE5, 0xD4DC, 0x80F4,
- 0xD4DD, 0x8463, 0xD4DE, 0x9285, 0xD4DF, 0x515C, 0xD4E0, 0x6597, 0xD4E1, 0x675C, 0xD4E2, 0x6793, 0xD4E3, 0x75D8, 0xD4E4, 0x7AC7,
- 0xD4E5, 0x8373, 0xD4E6, 0xF95A, 0xD4E7, 0x8C46, 0xD4E8, 0x9017, 0xD4E9, 0x982D, 0xD4EA, 0x5C6F, 0xD4EB, 0x81C0, 0xD4EC, 0x829A,
- 0xD4ED, 0x9041, 0xD4EE, 0x906F, 0xD4EF, 0x920D, 0xD4F0, 0x5F97, 0xD4F1, 0x5D9D, 0xD4F2, 0x6A59, 0xD4F3, 0x71C8, 0xD4F4, 0x767B,
- 0xD4F5, 0x7B49, 0xD4F6, 0x85E4, 0xD4F7, 0x8B04, 0xD4F8, 0x9127, 0xD4F9, 0x9A30, 0xD4FA, 0x5587, 0xD4FB, 0x61F6, 0xD4FC, 0xF95B,
- 0xD4FD, 0x7669, 0xD4FE, 0x7F85, 0xD5A1, 0x863F, 0xD5A2, 0x87BA, 0xD5A3, 0x88F8, 0xD5A4, 0x908F, 0xD5A5, 0xF95C, 0xD5A6, 0x6D1B,
- 0xD5A7, 0x70D9, 0xD5A8, 0x73DE, 0xD5A9, 0x7D61, 0xD5AA, 0x843D, 0xD5AB, 0xF95D, 0xD5AC, 0x916A, 0xD5AD, 0x99F1, 0xD5AE, 0xF95E,
- 0xD5AF, 0x4E82, 0xD5B0, 0x5375, 0xD5B1, 0x6B04, 0xD5B2, 0x6B12, 0xD5B3, 0x703E, 0xD5B4, 0x721B, 0xD5B5, 0x862D, 0xD5B6, 0x9E1E,
- 0xD5B7, 0x524C, 0xD5B8, 0x8FA3, 0xD5B9, 0x5D50, 0xD5BA, 0x64E5, 0xD5BB, 0x652C, 0xD5BC, 0x6B16, 0xD5BD, 0x6FEB, 0xD5BE, 0x7C43,
- 0xD5BF, 0x7E9C, 0xD5C0, 0x85CD, 0xD5C1, 0x8964, 0xD5C2, 0x89BD, 0xD5C3, 0x62C9, 0xD5C4, 0x81D8, 0xD5C5, 0x881F, 0xD5C6, 0x5ECA,
- 0xD5C7, 0x6717, 0xD5C8, 0x6D6A, 0xD5C9, 0x72FC, 0xD5CA, 0x7405, 0xD5CB, 0x746F, 0xD5CC, 0x8782, 0xD5CD, 0x90DE, 0xD5CE, 0x4F86,
- 0xD5CF, 0x5D0D, 0xD5D0, 0x5FA0, 0xD5D1, 0x840A, 0xD5D2, 0x51B7, 0xD5D3, 0x63A0, 0xD5D4, 0x7565, 0xD5D5, 0x4EAE, 0xD5D6, 0x5006,
- 0xD5D7, 0x5169, 0xD5D8, 0x51C9, 0xD5D9, 0x6881, 0xD5DA, 0x6A11, 0xD5DB, 0x7CAE, 0xD5DC, 0x7CB1, 0xD5DD, 0x7CE7, 0xD5DE, 0x826F,
- 0xD5DF, 0x8AD2, 0xD5E0, 0x8F1B, 0xD5E1, 0x91CF, 0xD5E2, 0x4FB6, 0xD5E3, 0x5137, 0xD5E4, 0x52F5, 0xD5E5, 0x5442, 0xD5E6, 0x5EEC,
- 0xD5E7, 0x616E, 0xD5E8, 0x623E, 0xD5E9, 0x65C5, 0xD5EA, 0x6ADA, 0xD5EB, 0x6FFE, 0xD5EC, 0x792A, 0xD5ED, 0x85DC, 0xD5EE, 0x8823,
- 0xD5EF, 0x95AD, 0xD5F0, 0x9A62, 0xD5F1, 0x9A6A, 0xD5F2, 0x9E97, 0xD5F3, 0x9ECE, 0xD5F4, 0x529B, 0xD5F5, 0x66C6, 0xD5F6, 0x6B77,
- 0xD5F7, 0x701D, 0xD5F8, 0x792B, 0xD5F9, 0x8F62, 0xD5FA, 0x9742, 0xD5FB, 0x6190, 0xD5FC, 0x6200, 0xD5FD, 0x6523, 0xD5FE, 0x6F23,
- 0xD6A1, 0x7149, 0xD6A2, 0x7489, 0xD6A3, 0x7DF4, 0xD6A4, 0x806F, 0xD6A5, 0x84EE, 0xD6A6, 0x8F26, 0xD6A7, 0x9023, 0xD6A8, 0x934A,
- 0xD6A9, 0x51BD, 0xD6AA, 0x5217, 0xD6AB, 0x52A3, 0xD6AC, 0x6D0C, 0xD6AD, 0x70C8, 0xD6AE, 0x88C2, 0xD6AF, 0x5EC9, 0xD6B0, 0x6582,
- 0xD6B1, 0x6BAE, 0xD6B2, 0x6FC2, 0xD6B3, 0x7C3E, 0xD6B4, 0x7375, 0xD6B5, 0x4EE4, 0xD6B6, 0x4F36, 0xD6B7, 0x56F9, 0xD6B8, 0xF95F,
- 0xD6B9, 0x5CBA, 0xD6BA, 0x5DBA, 0xD6BB, 0x601C, 0xD6BC, 0x73B2, 0xD6BD, 0x7B2D, 0xD6BE, 0x7F9A, 0xD6BF, 0x7FCE, 0xD6C0, 0x8046,
- 0xD6C1, 0x901E, 0xD6C2, 0x9234, 0xD6C3, 0x96F6, 0xD6C4, 0x9748, 0xD6C5, 0x9818, 0xD6C6, 0x9F61, 0xD6C7, 0x4F8B, 0xD6C8, 0x6FA7,
- 0xD6C9, 0x79AE, 0xD6CA, 0x91B4, 0xD6CB, 0x96B7, 0xD6CC, 0x52DE, 0xD6CD, 0xF960, 0xD6CE, 0x6488, 0xD6CF, 0x64C4, 0xD6D0, 0x6AD3,
- 0xD6D1, 0x6F5E, 0xD6D2, 0x7018, 0xD6D3, 0x7210, 0xD6D4, 0x76E7, 0xD6D5, 0x8001, 0xD6D6, 0x8606, 0xD6D7, 0x865C, 0xD6D8, 0x8DEF,
- 0xD6D9, 0x8F05, 0xD6DA, 0x9732, 0xD6DB, 0x9B6F, 0xD6DC, 0x9DFA, 0xD6DD, 0x9E75, 0xD6DE, 0x788C, 0xD6DF, 0x797F, 0xD6E0, 0x7DA0,
- 0xD6E1, 0x83C9, 0xD6E2, 0x9304, 0xD6E3, 0x9E7F, 0xD6E4, 0x9E93, 0xD6E5, 0x8AD6, 0xD6E6, 0x58DF, 0xD6E7, 0x5F04, 0xD6E8, 0x6727,
- 0xD6E9, 0x7027, 0xD6EA, 0x74CF, 0xD6EB, 0x7C60, 0xD6EC, 0x807E, 0xD6ED, 0x5121, 0xD6EE, 0x7028, 0xD6EF, 0x7262, 0xD6F0, 0x78CA,
- 0xD6F1, 0x8CC2, 0xD6F2, 0x8CDA, 0xD6F3, 0x8CF4, 0xD6F4, 0x96F7, 0xD6F5, 0x4E86, 0xD6F6, 0x50DA, 0xD6F7, 0x5BEE, 0xD6F8, 0x5ED6,
- 0xD6F9, 0x6599, 0xD6FA, 0x71CE, 0xD6FB, 0x7642, 0xD6FC, 0x77AD, 0xD6FD, 0x804A, 0xD6FE, 0x84FC, 0xD7A1, 0x907C, 0xD7A2, 0x9B27,
- 0xD7A3, 0x9F8D, 0xD7A4, 0x58D8, 0xD7A5, 0x5A41, 0xD7A6, 0x5C62, 0xD7A7, 0x6A13, 0xD7A8, 0x6DDA, 0xD7A9, 0x6F0F, 0xD7AA, 0x763B,
- 0xD7AB, 0x7D2F, 0xD7AC, 0x7E37, 0xD7AD, 0x851E, 0xD7AE, 0x8938, 0xD7AF, 0x93E4, 0xD7B0, 0x964B, 0xD7B1, 0x5289, 0xD7B2, 0x65D2,
- 0xD7B3, 0x67F3, 0xD7B4, 0x69B4, 0xD7B5, 0x6D41, 0xD7B6, 0x6E9C, 0xD7B7, 0x700F, 0xD7B8, 0x7409, 0xD7B9, 0x7460, 0xD7BA, 0x7559,
- 0xD7BB, 0x7624, 0xD7BC, 0x786B, 0xD7BD, 0x8B2C, 0xD7BE, 0x985E, 0xD7BF, 0x516D, 0xD7C0, 0x622E, 0xD7C1, 0x9678, 0xD7C2, 0x4F96,
- 0xD7C3, 0x502B, 0xD7C4, 0x5D19, 0xD7C5, 0x6DEA, 0xD7C6, 0x7DB8, 0xD7C7, 0x8F2A, 0xD7C8, 0x5F8B, 0xD7C9, 0x6144, 0xD7CA, 0x6817,
- 0xD7CB, 0xF961, 0xD7CC, 0x9686, 0xD7CD, 0x52D2, 0xD7CE, 0x808B, 0xD7CF, 0x51DC, 0xD7D0, 0x51CC, 0xD7D1, 0x695E, 0xD7D2, 0x7A1C,
- 0xD7D3, 0x7DBE, 0xD7D4, 0x83F1, 0xD7D5, 0x9675, 0xD7D6, 0x4FDA, 0xD7D7, 0x5229, 0xD7D8, 0x5398, 0xD7D9, 0x540F, 0xD7DA, 0x550E,
- 0xD7DB, 0x5C65, 0xD7DC, 0x60A7, 0xD7DD, 0x674E, 0xD7DE, 0x68A8, 0xD7DF, 0x6D6C, 0xD7E0, 0x7281, 0xD7E1, 0x72F8, 0xD7E2, 0x7406,
- 0xD7E3, 0x7483, 0xD7E4, 0xF962, 0xD7E5, 0x75E2, 0xD7E6, 0x7C6C, 0xD7E7, 0x7F79, 0xD7E8, 0x7FB8, 0xD7E9, 0x8389, 0xD7EA, 0x88CF,
- 0xD7EB, 0x88E1, 0xD7EC, 0x91CC, 0xD7ED, 0x91D0, 0xD7EE, 0x96E2, 0xD7EF, 0x9BC9, 0xD7F0, 0x541D, 0xD7F1, 0x6F7E, 0xD7F2, 0x71D0,
- 0xD7F3, 0x7498, 0xD7F4, 0x85FA, 0xD7F5, 0x8EAA, 0xD7F6, 0x96A3, 0xD7F7, 0x9C57, 0xD7F8, 0x9E9F, 0xD7F9, 0x6797, 0xD7FA, 0x6DCB,
- 0xD7FB, 0x7433, 0xD7FC, 0x81E8, 0xD7FD, 0x9716, 0xD7FE, 0x782C, 0xD8A1, 0x7ACB, 0xD8A2, 0x7B20, 0xD8A3, 0x7C92, 0xD8A4, 0x6469,
- 0xD8A5, 0x746A, 0xD8A6, 0x75F2, 0xD8A7, 0x78BC, 0xD8A8, 0x78E8, 0xD8A9, 0x99AC, 0xD8AA, 0x9B54, 0xD8AB, 0x9EBB, 0xD8AC, 0x5BDE,
- 0xD8AD, 0x5E55, 0xD8AE, 0x6F20, 0xD8AF, 0x819C, 0xD8B0, 0x83AB, 0xD8B1, 0x9088, 0xD8B2, 0x4E07, 0xD8B3, 0x534D, 0xD8B4, 0x5A29,
- 0xD8B5, 0x5DD2, 0xD8B6, 0x5F4E, 0xD8B7, 0x6162, 0xD8B8, 0x633D, 0xD8B9, 0x6669, 0xD8BA, 0x66FC, 0xD8BB, 0x6EFF, 0xD8BC, 0x6F2B,
- 0xD8BD, 0x7063, 0xD8BE, 0x779E, 0xD8BF, 0x842C, 0xD8C0, 0x8513, 0xD8C1, 0x883B, 0xD8C2, 0x8F13, 0xD8C3, 0x9945, 0xD8C4, 0x9C3B,
- 0xD8C5, 0x551C, 0xD8C6, 0x62B9, 0xD8C7, 0x672B, 0xD8C8, 0x6CAB, 0xD8C9, 0x8309, 0xD8CA, 0x896A, 0xD8CB, 0x977A, 0xD8CC, 0x4EA1,
- 0xD8CD, 0x5984, 0xD8CE, 0x5FD8, 0xD8CF, 0x5FD9, 0xD8D0, 0x671B, 0xD8D1, 0x7DB2, 0xD8D2, 0x7F54, 0xD8D3, 0x8292, 0xD8D4, 0x832B,
- 0xD8D5, 0x83BD, 0xD8D6, 0x8F1E, 0xD8D7, 0x9099, 0xD8D8, 0x57CB, 0xD8D9, 0x59B9, 0xD8DA, 0x5A92, 0xD8DB, 0x5BD0, 0xD8DC, 0x6627,
- 0xD8DD, 0x679A, 0xD8DE, 0x6885, 0xD8DF, 0x6BCF, 0xD8E0, 0x7164, 0xD8E1, 0x7F75, 0xD8E2, 0x8CB7, 0xD8E3, 0x8CE3, 0xD8E4, 0x9081,
- 0xD8E5, 0x9B45, 0xD8E6, 0x8108, 0xD8E7, 0x8C8A, 0xD8E8, 0x964C, 0xD8E9, 0x9A40, 0xD8EA, 0x9EA5, 0xD8EB, 0x5B5F, 0xD8EC, 0x6C13,
- 0xD8ED, 0x731B, 0xD8EE, 0x76F2, 0xD8EF, 0x76DF, 0xD8F0, 0x840C, 0xD8F1, 0x51AA, 0xD8F2, 0x8993, 0xD8F3, 0x514D, 0xD8F4, 0x5195,
- 0xD8F5, 0x52C9, 0xD8F6, 0x68C9, 0xD8F7, 0x6C94, 0xD8F8, 0x7704, 0xD8F9, 0x7720, 0xD8FA, 0x7DBF, 0xD8FB, 0x7DEC, 0xD8FC, 0x9762,
- 0xD8FD, 0x9EB5, 0xD8FE, 0x6EC5, 0xD9A1, 0x8511, 0xD9A2, 0x51A5, 0xD9A3, 0x540D, 0xD9A4, 0x547D, 0xD9A5, 0x660E, 0xD9A6, 0x669D,
- 0xD9A7, 0x6927, 0xD9A8, 0x6E9F, 0xD9A9, 0x76BF, 0xD9AA, 0x7791, 0xD9AB, 0x8317, 0xD9AC, 0x84C2, 0xD9AD, 0x879F, 0xD9AE, 0x9169,
- 0xD9AF, 0x9298, 0xD9B0, 0x9CF4, 0xD9B1, 0x8882, 0xD9B2, 0x4FAE, 0xD9B3, 0x5192, 0xD9B4, 0x52DF, 0xD9B5, 0x59C6, 0xD9B6, 0x5E3D,
- 0xD9B7, 0x6155, 0xD9B8, 0x6478, 0xD9B9, 0x6479, 0xD9BA, 0x66AE, 0xD9BB, 0x67D0, 0xD9BC, 0x6A21, 0xD9BD, 0x6BCD, 0xD9BE, 0x6BDB,
- 0xD9BF, 0x725F, 0xD9C0, 0x7261, 0xD9C1, 0x7441, 0xD9C2, 0x7738, 0xD9C3, 0x77DB, 0xD9C4, 0x8017, 0xD9C5, 0x82BC, 0xD9C6, 0x8305,
- 0xD9C7, 0x8B00, 0xD9C8, 0x8B28, 0xD9C9, 0x8C8C, 0xD9CA, 0x6728, 0xD9CB, 0x6C90, 0xD9CC, 0x7267, 0xD9CD, 0x76EE, 0xD9CE, 0x7766,
- 0xD9CF, 0x7A46, 0xD9D0, 0x9DA9, 0xD9D1, 0x6B7F, 0xD9D2, 0x6C92, 0xD9D3, 0x5922, 0xD9D4, 0x6726, 0xD9D5, 0x8499, 0xD9D6, 0x536F,
- 0xD9D7, 0x5893, 0xD9D8, 0x5999, 0xD9D9, 0x5EDF, 0xD9DA, 0x63CF, 0xD9DB, 0x6634, 0xD9DC, 0x6773, 0xD9DD, 0x6E3A, 0xD9DE, 0x732B,
- 0xD9DF, 0x7AD7, 0xD9E0, 0x82D7, 0xD9E1, 0x9328, 0xD9E2, 0x52D9, 0xD9E3, 0x5DEB, 0xD9E4, 0x61AE, 0xD9E5, 0x61CB, 0xD9E6, 0x620A,
- 0xD9E7, 0x62C7, 0xD9E8, 0x64AB, 0xD9E9, 0x65E0, 0xD9EA, 0x6959, 0xD9EB, 0x6B66, 0xD9EC, 0x6BCB, 0xD9ED, 0x7121, 0xD9EE, 0x73F7,
- 0xD9EF, 0x755D, 0xD9F0, 0x7E46, 0xD9F1, 0x821E, 0xD9F2, 0x8302, 0xD9F3, 0x856A, 0xD9F4, 0x8AA3, 0xD9F5, 0x8CBF, 0xD9F6, 0x9727,
- 0xD9F7, 0x9D61, 0xD9F8, 0x58A8, 0xD9F9, 0x9ED8, 0xD9FA, 0x5011, 0xD9FB, 0x520E, 0xD9FC, 0x543B, 0xD9FD, 0x554F, 0xD9FE, 0x6587,
- 0xDAA1, 0x6C76, 0xDAA2, 0x7D0A, 0xDAA3, 0x7D0B, 0xDAA4, 0x805E, 0xDAA5, 0x868A, 0xDAA6, 0x9580, 0xDAA7, 0x96EF, 0xDAA8, 0x52FF,
- 0xDAA9, 0x6C95, 0xDAAA, 0x7269, 0xDAAB, 0x5473, 0xDAAC, 0x5A9A, 0xDAAD, 0x5C3E, 0xDAAE, 0x5D4B, 0xDAAF, 0x5F4C, 0xDAB0, 0x5FAE,
- 0xDAB1, 0x672A, 0xDAB2, 0x68B6, 0xDAB3, 0x6963, 0xDAB4, 0x6E3C, 0xDAB5, 0x6E44, 0xDAB6, 0x7709, 0xDAB7, 0x7C73, 0xDAB8, 0x7F8E,
- 0xDAB9, 0x8587, 0xDABA, 0x8B0E, 0xDABB, 0x8FF7, 0xDABC, 0x9761, 0xDABD, 0x9EF4, 0xDABE, 0x5CB7, 0xDABF, 0x60B6, 0xDAC0, 0x610D,
- 0xDAC1, 0x61AB, 0xDAC2, 0x654F, 0xDAC3, 0x65FB, 0xDAC4, 0x65FC, 0xDAC5, 0x6C11, 0xDAC6, 0x6CEF, 0xDAC7, 0x739F, 0xDAC8, 0x73C9,
- 0xDAC9, 0x7DE1, 0xDACA, 0x9594, 0xDACB, 0x5BC6, 0xDACC, 0x871C, 0xDACD, 0x8B10, 0xDACE, 0x525D, 0xDACF, 0x535A, 0xDAD0, 0x62CD,
- 0xDAD1, 0x640F, 0xDAD2, 0x64B2, 0xDAD3, 0x6734, 0xDAD4, 0x6A38, 0xDAD5, 0x6CCA, 0xDAD6, 0x73C0, 0xDAD7, 0x749E, 0xDAD8, 0x7B94,
- 0xDAD9, 0x7C95, 0xDADA, 0x7E1B, 0xDADB, 0x818A, 0xDADC, 0x8236, 0xDADD, 0x8584, 0xDADE, 0x8FEB, 0xDADF, 0x96F9, 0xDAE0, 0x99C1,
- 0xDAE1, 0x4F34, 0xDAE2, 0x534A, 0xDAE3, 0x53CD, 0xDAE4, 0x53DB, 0xDAE5, 0x62CC, 0xDAE6, 0x642C, 0xDAE7, 0x6500, 0xDAE8, 0x6591,
- 0xDAE9, 0x69C3, 0xDAEA, 0x6CEE, 0xDAEB, 0x6F58, 0xDAEC, 0x73ED, 0xDAED, 0x7554, 0xDAEE, 0x7622, 0xDAEF, 0x76E4, 0xDAF0, 0x76FC,
- 0xDAF1, 0x78D0, 0xDAF2, 0x78FB, 0xDAF3, 0x792C, 0xDAF4, 0x7D46, 0xDAF5, 0x822C, 0xDAF6, 0x87E0, 0xDAF7, 0x8FD4, 0xDAF8, 0x9812,
- 0xDAF9, 0x98EF, 0xDAFA, 0x52C3, 0xDAFB, 0x62D4, 0xDAFC, 0x64A5, 0xDAFD, 0x6E24, 0xDAFE, 0x6F51, 0xDBA1, 0x767C, 0xDBA2, 0x8DCB,
- 0xDBA3, 0x91B1, 0xDBA4, 0x9262, 0xDBA5, 0x9AEE, 0xDBA6, 0x9B43, 0xDBA7, 0x5023, 0xDBA8, 0x508D, 0xDBA9, 0x574A, 0xDBAA, 0x59A8,
- 0xDBAB, 0x5C28, 0xDBAC, 0x5E47, 0xDBAD, 0x5F77, 0xDBAE, 0x623F, 0xDBAF, 0x653E, 0xDBB0, 0x65B9, 0xDBB1, 0x65C1, 0xDBB2, 0x6609,
- 0xDBB3, 0x678B, 0xDBB4, 0x699C, 0xDBB5, 0x6EC2, 0xDBB6, 0x78C5, 0xDBB7, 0x7D21, 0xDBB8, 0x80AA, 0xDBB9, 0x8180, 0xDBBA, 0x822B,
- 0xDBBB, 0x82B3, 0xDBBC, 0x84A1, 0xDBBD, 0x868C, 0xDBBE, 0x8A2A, 0xDBBF, 0x8B17, 0xDBC0, 0x90A6, 0xDBC1, 0x9632, 0xDBC2, 0x9F90,
- 0xDBC3, 0x500D, 0xDBC4, 0x4FF3, 0xDBC5, 0xF963, 0xDBC6, 0x57F9, 0xDBC7, 0x5F98, 0xDBC8, 0x62DC, 0xDBC9, 0x6392, 0xDBCA, 0x676F,
- 0xDBCB, 0x6E43, 0xDBCC, 0x7119, 0xDBCD, 0x76C3, 0xDBCE, 0x80CC, 0xDBCF, 0x80DA, 0xDBD0, 0x88F4, 0xDBD1, 0x88F5, 0xDBD2, 0x8919,
- 0xDBD3, 0x8CE0, 0xDBD4, 0x8F29, 0xDBD5, 0x914D, 0xDBD6, 0x966A, 0xDBD7, 0x4F2F, 0xDBD8, 0x4F70, 0xDBD9, 0x5E1B, 0xDBDA, 0x67CF,
- 0xDBDB, 0x6822, 0xDBDC, 0x767D, 0xDBDD, 0x767E, 0xDBDE, 0x9B44, 0xDBDF, 0x5E61, 0xDBE0, 0x6A0A, 0xDBE1, 0x7169, 0xDBE2, 0x71D4,
- 0xDBE3, 0x756A, 0xDBE4, 0xF964, 0xDBE5, 0x7E41, 0xDBE6, 0x8543, 0xDBE7, 0x85E9, 0xDBE8, 0x98DC, 0xDBE9, 0x4F10, 0xDBEA, 0x7B4F,
- 0xDBEB, 0x7F70, 0xDBEC, 0x95A5, 0xDBED, 0x51E1, 0xDBEE, 0x5E06, 0xDBEF, 0x68B5, 0xDBF0, 0x6C3E, 0xDBF1, 0x6C4E, 0xDBF2, 0x6CDB,
- 0xDBF3, 0x72AF, 0xDBF4, 0x7BC4, 0xDBF5, 0x8303, 0xDBF6, 0x6CD5, 0xDBF7, 0x743A, 0xDBF8, 0x50FB, 0xDBF9, 0x5288, 0xDBFA, 0x58C1,
- 0xDBFB, 0x64D8, 0xDBFC, 0x6A97, 0xDBFD, 0x74A7, 0xDBFE, 0x7656, 0xDCA1, 0x78A7, 0xDCA2, 0x8617, 0xDCA3, 0x95E2, 0xDCA4, 0x9739,
- 0xDCA5, 0xF965, 0xDCA6, 0x535E, 0xDCA7, 0x5F01, 0xDCA8, 0x8B8A, 0xDCA9, 0x8FA8, 0xDCAA, 0x8FAF, 0xDCAB, 0x908A, 0xDCAC, 0x5225,
- 0xDCAD, 0x77A5, 0xDCAE, 0x9C49, 0xDCAF, 0x9F08, 0xDCB0, 0x4E19, 0xDCB1, 0x5002, 0xDCB2, 0x5175, 0xDCB3, 0x5C5B, 0xDCB4, 0x5E77,
- 0xDCB5, 0x661E, 0xDCB6, 0x663A, 0xDCB7, 0x67C4, 0xDCB8, 0x68C5, 0xDCB9, 0x70B3, 0xDCBA, 0x7501, 0xDCBB, 0x75C5, 0xDCBC, 0x79C9,
- 0xDCBD, 0x7ADD, 0xDCBE, 0x8F27, 0xDCBF, 0x9920, 0xDCC0, 0x9A08, 0xDCC1, 0x4FDD, 0xDCC2, 0x5821, 0xDCC3, 0x5831, 0xDCC4, 0x5BF6,
- 0xDCC5, 0x666E, 0xDCC6, 0x6B65, 0xDCC7, 0x6D11, 0xDCC8, 0x6E7A, 0xDCC9, 0x6F7D, 0xDCCA, 0x73E4, 0xDCCB, 0x752B, 0xDCCC, 0x83E9,
- 0xDCCD, 0x88DC, 0xDCCE, 0x8913, 0xDCCF, 0x8B5C, 0xDCD0, 0x8F14, 0xDCD1, 0x4F0F, 0xDCD2, 0x50D5, 0xDCD3, 0x5310, 0xDCD4, 0x535C,
- 0xDCD5, 0x5B93, 0xDCD6, 0x5FA9, 0xDCD7, 0x670D, 0xDCD8, 0x798F, 0xDCD9, 0x8179, 0xDCDA, 0x832F, 0xDCDB, 0x8514, 0xDCDC, 0x8907,
- 0xDCDD, 0x8986, 0xDCDE, 0x8F39, 0xDCDF, 0x8F3B, 0xDCE0, 0x99A5, 0xDCE1, 0x9C12, 0xDCE2, 0x672C, 0xDCE3, 0x4E76, 0xDCE4, 0x4FF8,
- 0xDCE5, 0x5949, 0xDCE6, 0x5C01, 0xDCE7, 0x5CEF, 0xDCE8, 0x5CF0, 0xDCE9, 0x6367, 0xDCEA, 0x68D2, 0xDCEB, 0x70FD, 0xDCEC, 0x71A2,
- 0xDCED, 0x742B, 0xDCEE, 0x7E2B, 0xDCEF, 0x84EC, 0xDCF0, 0x8702, 0xDCF1, 0x9022, 0xDCF2, 0x92D2, 0xDCF3, 0x9CF3, 0xDCF4, 0x4E0D,
- 0xDCF5, 0x4ED8, 0xDCF6, 0x4FEF, 0xDCF7, 0x5085, 0xDCF8, 0x5256, 0xDCF9, 0x526F, 0xDCFA, 0x5426, 0xDCFB, 0x5490, 0xDCFC, 0x57E0,
- 0xDCFD, 0x592B, 0xDCFE, 0x5A66, 0xDDA1, 0x5B5A, 0xDDA2, 0x5B75, 0xDDA3, 0x5BCC, 0xDDA4, 0x5E9C, 0xDDA5, 0xF966, 0xDDA6, 0x6276,
- 0xDDA7, 0x6577, 0xDDA8, 0x65A7, 0xDDA9, 0x6D6E, 0xDDAA, 0x6EA5, 0xDDAB, 0x7236, 0xDDAC, 0x7B26, 0xDDAD, 0x7C3F, 0xDDAE, 0x7F36,
- 0xDDAF, 0x8150, 0xDDB0, 0x8151, 0xDDB1, 0x819A, 0xDDB2, 0x8240, 0xDDB3, 0x8299, 0xDDB4, 0x83A9, 0xDDB5, 0x8A03, 0xDDB6, 0x8CA0,
- 0xDDB7, 0x8CE6, 0xDDB8, 0x8CFB, 0xDDB9, 0x8D74, 0xDDBA, 0x8DBA, 0xDDBB, 0x90E8, 0xDDBC, 0x91DC, 0xDDBD, 0x961C, 0xDDBE, 0x9644,
- 0xDDBF, 0x99D9, 0xDDC0, 0x9CE7, 0xDDC1, 0x5317, 0xDDC2, 0x5206, 0xDDC3, 0x5429, 0xDDC4, 0x5674, 0xDDC5, 0x58B3, 0xDDC6, 0x5954,
- 0xDDC7, 0x596E, 0xDDC8, 0x5FFF, 0xDDC9, 0x61A4, 0xDDCA, 0x626E, 0xDDCB, 0x6610, 0xDDCC, 0x6C7E, 0xDDCD, 0x711A, 0xDDCE, 0x76C6,
- 0xDDCF, 0x7C89, 0xDDD0, 0x7CDE, 0xDDD1, 0x7D1B, 0xDDD2, 0x82AC, 0xDDD3, 0x8CC1, 0xDDD4, 0x96F0, 0xDDD5, 0xF967, 0xDDD6, 0x4F5B,
- 0xDDD7, 0x5F17, 0xDDD8, 0x5F7F, 0xDDD9, 0x62C2, 0xDDDA, 0x5D29, 0xDDDB, 0x670B, 0xDDDC, 0x68DA, 0xDDDD, 0x787C, 0xDDDE, 0x7E43,
- 0xDDDF, 0x9D6C, 0xDDE0, 0x4E15, 0xDDE1, 0x5099, 0xDDE2, 0x5315, 0xDDE3, 0x532A, 0xDDE4, 0x5351, 0xDDE5, 0x5983, 0xDDE6, 0x5A62,
- 0xDDE7, 0x5E87, 0xDDE8, 0x60B2, 0xDDE9, 0x618A, 0xDDEA, 0x6249, 0xDDEB, 0x6279, 0xDDEC, 0x6590, 0xDDED, 0x6787, 0xDDEE, 0x69A7,
- 0xDDEF, 0x6BD4, 0xDDF0, 0x6BD6, 0xDDF1, 0x6BD7, 0xDDF2, 0x6BD8, 0xDDF3, 0x6CB8, 0xDDF4, 0xF968, 0xDDF5, 0x7435, 0xDDF6, 0x75FA,
- 0xDDF7, 0x7812, 0xDDF8, 0x7891, 0xDDF9, 0x79D5, 0xDDFA, 0x79D8, 0xDDFB, 0x7C83, 0xDDFC, 0x7DCB, 0xDDFD, 0x7FE1, 0xDDFE, 0x80A5,
- 0xDEA1, 0x813E, 0xDEA2, 0x81C2, 0xDEA3, 0x83F2, 0xDEA4, 0x871A, 0xDEA5, 0x88E8, 0xDEA6, 0x8AB9, 0xDEA7, 0x8B6C, 0xDEA8, 0x8CBB,
- 0xDEA9, 0x9119, 0xDEAA, 0x975E, 0xDEAB, 0x98DB, 0xDEAC, 0x9F3B, 0xDEAD, 0x56AC, 0xDEAE, 0x5B2A, 0xDEAF, 0x5F6C, 0xDEB0, 0x658C,
- 0xDEB1, 0x6AB3, 0xDEB2, 0x6BAF, 0xDEB3, 0x6D5C, 0xDEB4, 0x6FF1, 0xDEB5, 0x7015, 0xDEB6, 0x725D, 0xDEB7, 0x73AD, 0xDEB8, 0x8CA7,
- 0xDEB9, 0x8CD3, 0xDEBA, 0x983B, 0xDEBB, 0x6191, 0xDEBC, 0x6C37, 0xDEBD, 0x8058, 0xDEBE, 0x9A01, 0xDEBF, 0x4E4D, 0xDEC0, 0x4E8B,
- 0xDEC1, 0x4E9B, 0xDEC2, 0x4ED5, 0xDEC3, 0x4F3A, 0xDEC4, 0x4F3C, 0xDEC5, 0x4F7F, 0xDEC6, 0x4FDF, 0xDEC7, 0x50FF, 0xDEC8, 0x53F2,
- 0xDEC9, 0x53F8, 0xDECA, 0x5506, 0xDECB, 0x55E3, 0xDECC, 0x56DB, 0xDECD, 0x58EB, 0xDECE, 0x5962, 0xDECF, 0x5A11, 0xDED0, 0x5BEB,
- 0xDED1, 0x5BFA, 0xDED2, 0x5C04, 0xDED3, 0x5DF3, 0xDED4, 0x5E2B, 0xDED5, 0x5F99, 0xDED6, 0x601D, 0xDED7, 0x6368, 0xDED8, 0x659C,
- 0xDED9, 0x65AF, 0xDEDA, 0x67F6, 0xDEDB, 0x67FB, 0xDEDC, 0x68AD, 0xDEDD, 0x6B7B, 0xDEDE, 0x6C99, 0xDEDF, 0x6CD7, 0xDEE0, 0x6E23,
- 0xDEE1, 0x7009, 0xDEE2, 0x7345, 0xDEE3, 0x7802, 0xDEE4, 0x793E, 0xDEE5, 0x7940, 0xDEE6, 0x7960, 0xDEE7, 0x79C1, 0xDEE8, 0x7BE9,
- 0xDEE9, 0x7D17, 0xDEEA, 0x7D72, 0xDEEB, 0x8086, 0xDEEC, 0x820D, 0xDEED, 0x838E, 0xDEEE, 0x84D1, 0xDEEF, 0x86C7, 0xDEF0, 0x88DF,
- 0xDEF1, 0x8A50, 0xDEF2, 0x8A5E, 0xDEF3, 0x8B1D, 0xDEF4, 0x8CDC, 0xDEF5, 0x8D66, 0xDEF6, 0x8FAD, 0xDEF7, 0x90AA, 0xDEF8, 0x98FC,
- 0xDEF9, 0x99DF, 0xDEFA, 0x9E9D, 0xDEFB, 0x524A, 0xDEFC, 0xF969, 0xDEFD, 0x6714, 0xDEFE, 0xF96A, 0xDFA1, 0x5098, 0xDFA2, 0x522A,
- 0xDFA3, 0x5C71, 0xDFA4, 0x6563, 0xDFA5, 0x6C55, 0xDFA6, 0x73CA, 0xDFA7, 0x7523, 0xDFA8, 0x759D, 0xDFA9, 0x7B97, 0xDFAA, 0x849C,
- 0xDFAB, 0x9178, 0xDFAC, 0x9730, 0xDFAD, 0x4E77, 0xDFAE, 0x6492, 0xDFAF, 0x6BBA, 0xDFB0, 0x715E, 0xDFB1, 0x85A9, 0xDFB2, 0x4E09,
- 0xDFB3, 0xF96B, 0xDFB4, 0x6749, 0xDFB5, 0x68EE, 0xDFB6, 0x6E17, 0xDFB7, 0x829F, 0xDFB8, 0x8518, 0xDFB9, 0x886B, 0xDFBA, 0x63F7,
- 0xDFBB, 0x6F81, 0xDFBC, 0x9212, 0xDFBD, 0x98AF, 0xDFBE, 0x4E0A, 0xDFBF, 0x50B7, 0xDFC0, 0x50CF, 0xDFC1, 0x511F, 0xDFC2, 0x5546,
- 0xDFC3, 0x55AA, 0xDFC4, 0x5617, 0xDFC5, 0x5B40, 0xDFC6, 0x5C19, 0xDFC7, 0x5CE0, 0xDFC8, 0x5E38, 0xDFC9, 0x5E8A, 0xDFCA, 0x5EA0,
- 0xDFCB, 0x5EC2, 0xDFCC, 0x60F3, 0xDFCD, 0x6851, 0xDFCE, 0x6A61, 0xDFCF, 0x6E58, 0xDFD0, 0x723D, 0xDFD1, 0x7240, 0xDFD2, 0x72C0,
- 0xDFD3, 0x76F8, 0xDFD4, 0x7965, 0xDFD5, 0x7BB1, 0xDFD6, 0x7FD4, 0xDFD7, 0x88F3, 0xDFD8, 0x89F4, 0xDFD9, 0x8A73, 0xDFDA, 0x8C61,
- 0xDFDB, 0x8CDE, 0xDFDC, 0x971C, 0xDFDD, 0x585E, 0xDFDE, 0x74BD, 0xDFDF, 0x8CFD, 0xDFE0, 0x55C7, 0xDFE1, 0xF96C, 0xDFE2, 0x7A61,
- 0xDFE3, 0x7D22, 0xDFE4, 0x8272, 0xDFE5, 0x7272, 0xDFE6, 0x751F, 0xDFE7, 0x7525, 0xDFE8, 0xF96D, 0xDFE9, 0x7B19, 0xDFEA, 0x5885,
- 0xDFEB, 0x58FB, 0xDFEC, 0x5DBC, 0xDFED, 0x5E8F, 0xDFEE, 0x5EB6, 0xDFEF, 0x5F90, 0xDFF0, 0x6055, 0xDFF1, 0x6292, 0xDFF2, 0x637F,
- 0xDFF3, 0x654D, 0xDFF4, 0x6691, 0xDFF5, 0x66D9, 0xDFF6, 0x66F8, 0xDFF7, 0x6816, 0xDFF8, 0x68F2, 0xDFF9, 0x7280, 0xDFFA, 0x745E,
- 0xDFFB, 0x7B6E, 0xDFFC, 0x7D6E, 0xDFFD, 0x7DD6, 0xDFFE, 0x7F72, 0xE0A1, 0x80E5, 0xE0A2, 0x8212, 0xE0A3, 0x85AF, 0xE0A4, 0x897F,
- 0xE0A5, 0x8A93, 0xE0A6, 0x901D, 0xE0A7, 0x92E4, 0xE0A8, 0x9ECD, 0xE0A9, 0x9F20, 0xE0AA, 0x5915, 0xE0AB, 0x596D, 0xE0AC, 0x5E2D,
- 0xE0AD, 0x60DC, 0xE0AE, 0x6614, 0xE0AF, 0x6673, 0xE0B0, 0x6790, 0xE0B1, 0x6C50, 0xE0B2, 0x6DC5, 0xE0B3, 0x6F5F, 0xE0B4, 0x77F3,
- 0xE0B5, 0x78A9, 0xE0B6, 0x84C6, 0xE0B7, 0x91CB, 0xE0B8, 0x932B, 0xE0B9, 0x4ED9, 0xE0BA, 0x50CA, 0xE0BB, 0x5148, 0xE0BC, 0x5584,
- 0xE0BD, 0x5B0B, 0xE0BE, 0x5BA3, 0xE0BF, 0x6247, 0xE0C0, 0x657E, 0xE0C1, 0x65CB, 0xE0C2, 0x6E32, 0xE0C3, 0x717D, 0xE0C4, 0x7401,
- 0xE0C5, 0x7444, 0xE0C6, 0x7487, 0xE0C7, 0x74BF, 0xE0C8, 0x766C, 0xE0C9, 0x79AA, 0xE0CA, 0x7DDA, 0xE0CB, 0x7E55, 0xE0CC, 0x7FA8,
- 0xE0CD, 0x817A, 0xE0CE, 0x81B3, 0xE0CF, 0x8239, 0xE0D0, 0x861A, 0xE0D1, 0x87EC, 0xE0D2, 0x8A75, 0xE0D3, 0x8DE3, 0xE0D4, 0x9078,
- 0xE0D5, 0x9291, 0xE0D6, 0x9425, 0xE0D7, 0x994D, 0xE0D8, 0x9BAE, 0xE0D9, 0x5368, 0xE0DA, 0x5C51, 0xE0DB, 0x6954, 0xE0DC, 0x6CC4,
- 0xE0DD, 0x6D29, 0xE0DE, 0x6E2B, 0xE0DF, 0x820C, 0xE0E0, 0x859B, 0xE0E1, 0x893B, 0xE0E2, 0x8A2D, 0xE0E3, 0x8AAA, 0xE0E4, 0x96EA,
- 0xE0E5, 0x9F67, 0xE0E6, 0x5261, 0xE0E7, 0x66B9, 0xE0E8, 0x6BB2, 0xE0E9, 0x7E96, 0xE0EA, 0x87FE, 0xE0EB, 0x8D0D, 0xE0EC, 0x9583,
- 0xE0ED, 0x965D, 0xE0EE, 0x651D, 0xE0EF, 0x6D89, 0xE0F0, 0x71EE, 0xE0F1, 0xF96E, 0xE0F2, 0x57CE, 0xE0F3, 0x59D3, 0xE0F4, 0x5BAC,
- 0xE0F5, 0x6027, 0xE0F6, 0x60FA, 0xE0F7, 0x6210, 0xE0F8, 0x661F, 0xE0F9, 0x665F, 0xE0FA, 0x7329, 0xE0FB, 0x73F9, 0xE0FC, 0x76DB,
- 0xE0FD, 0x7701, 0xE0FE, 0x7B6C, 0xE1A1, 0x8056, 0xE1A2, 0x8072, 0xE1A3, 0x8165, 0xE1A4, 0x8AA0, 0xE1A5, 0x9192, 0xE1A6, 0x4E16,
- 0xE1A7, 0x52E2, 0xE1A8, 0x6B72, 0xE1A9, 0x6D17, 0xE1AA, 0x7A05, 0xE1AB, 0x7B39, 0xE1AC, 0x7D30, 0xE1AD, 0xF96F, 0xE1AE, 0x8CB0,
- 0xE1AF, 0x53EC, 0xE1B0, 0x562F, 0xE1B1, 0x5851, 0xE1B2, 0x5BB5, 0xE1B3, 0x5C0F, 0xE1B4, 0x5C11, 0xE1B5, 0x5DE2, 0xE1B6, 0x6240,
- 0xE1B7, 0x6383, 0xE1B8, 0x6414, 0xE1B9, 0x662D, 0xE1BA, 0x68B3, 0xE1BB, 0x6CBC, 0xE1BC, 0x6D88, 0xE1BD, 0x6EAF, 0xE1BE, 0x701F,
- 0xE1BF, 0x70A4, 0xE1C0, 0x71D2, 0xE1C1, 0x7526, 0xE1C2, 0x758F, 0xE1C3, 0x758E, 0xE1C4, 0x7619, 0xE1C5, 0x7B11, 0xE1C6, 0x7BE0,
- 0xE1C7, 0x7C2B, 0xE1C8, 0x7D20, 0xE1C9, 0x7D39, 0xE1CA, 0x852C, 0xE1CB, 0x856D, 0xE1CC, 0x8607, 0xE1CD, 0x8A34, 0xE1CE, 0x900D,
- 0xE1CF, 0x9061, 0xE1D0, 0x90B5, 0xE1D1, 0x92B7, 0xE1D2, 0x97F6, 0xE1D3, 0x9A37, 0xE1D4, 0x4FD7, 0xE1D5, 0x5C6C, 0xE1D6, 0x675F,
- 0xE1D7, 0x6D91, 0xE1D8, 0x7C9F, 0xE1D9, 0x7E8C, 0xE1DA, 0x8B16, 0xE1DB, 0x8D16, 0xE1DC, 0x901F, 0xE1DD, 0x5B6B, 0xE1DE, 0x5DFD,
- 0xE1DF, 0x640D, 0xE1E0, 0x84C0, 0xE1E1, 0x905C, 0xE1E2, 0x98E1, 0xE1E3, 0x7387, 0xE1E4, 0x5B8B, 0xE1E5, 0x609A, 0xE1E6, 0x677E,
- 0xE1E7, 0x6DDE, 0xE1E8, 0x8A1F, 0xE1E9, 0x8AA6, 0xE1EA, 0x9001, 0xE1EB, 0x980C, 0xE1EC, 0x5237, 0xE1ED, 0xF970, 0xE1EE, 0x7051,
- 0xE1EF, 0x788E, 0xE1F0, 0x9396, 0xE1F1, 0x8870, 0xE1F2, 0x91D7, 0xE1F3, 0x4FEE, 0xE1F4, 0x53D7, 0xE1F5, 0x55FD, 0xE1F6, 0x56DA,
- 0xE1F7, 0x5782, 0xE1F8, 0x58FD, 0xE1F9, 0x5AC2, 0xE1FA, 0x5B88, 0xE1FB, 0x5CAB, 0xE1FC, 0x5CC0, 0xE1FD, 0x5E25, 0xE1FE, 0x6101,
- 0xE2A1, 0x620D, 0xE2A2, 0x624B, 0xE2A3, 0x6388, 0xE2A4, 0x641C, 0xE2A5, 0x6536, 0xE2A6, 0x6578, 0xE2A7, 0x6A39, 0xE2A8, 0x6B8A,
- 0xE2A9, 0x6C34, 0xE2AA, 0x6D19, 0xE2AB, 0x6F31, 0xE2AC, 0x71E7, 0xE2AD, 0x72E9, 0xE2AE, 0x7378, 0xE2AF, 0x7407, 0xE2B0, 0x74B2,
- 0xE2B1, 0x7626, 0xE2B2, 0x7761, 0xE2B3, 0x79C0, 0xE2B4, 0x7A57, 0xE2B5, 0x7AEA, 0xE2B6, 0x7CB9, 0xE2B7, 0x7D8F, 0xE2B8, 0x7DAC,
- 0xE2B9, 0x7E61, 0xE2BA, 0x7F9E, 0xE2BB, 0x8129, 0xE2BC, 0x8331, 0xE2BD, 0x8490, 0xE2BE, 0x84DA, 0xE2BF, 0x85EA, 0xE2C0, 0x8896,
- 0xE2C1, 0x8AB0, 0xE2C2, 0x8B90, 0xE2C3, 0x8F38, 0xE2C4, 0x9042, 0xE2C5, 0x9083, 0xE2C6, 0x916C, 0xE2C7, 0x9296, 0xE2C8, 0x92B9,
- 0xE2C9, 0x968B, 0xE2CA, 0x96A7, 0xE2CB, 0x96A8, 0xE2CC, 0x96D6, 0xE2CD, 0x9700, 0xE2CE, 0x9808, 0xE2CF, 0x9996, 0xE2D0, 0x9AD3,
- 0xE2D1, 0x9B1A, 0xE2D2, 0x53D4, 0xE2D3, 0x587E, 0xE2D4, 0x5919, 0xE2D5, 0x5B70, 0xE2D6, 0x5BBF, 0xE2D7, 0x6DD1, 0xE2D8, 0x6F5A,
- 0xE2D9, 0x719F, 0xE2DA, 0x7421, 0xE2DB, 0x74B9, 0xE2DC, 0x8085, 0xE2DD, 0x83FD, 0xE2DE, 0x5DE1, 0xE2DF, 0x5F87, 0xE2E0, 0x5FAA,
- 0xE2E1, 0x6042, 0xE2E2, 0x65EC, 0xE2E3, 0x6812, 0xE2E4, 0x696F, 0xE2E5, 0x6A53, 0xE2E6, 0x6B89, 0xE2E7, 0x6D35, 0xE2E8, 0x6DF3,
- 0xE2E9, 0x73E3, 0xE2EA, 0x76FE, 0xE2EB, 0x77AC, 0xE2EC, 0x7B4D, 0xE2ED, 0x7D14, 0xE2EE, 0x8123, 0xE2EF, 0x821C, 0xE2F0, 0x8340,
- 0xE2F1, 0x84F4, 0xE2F2, 0x8563, 0xE2F3, 0x8A62, 0xE2F4, 0x8AC4, 0xE2F5, 0x9187, 0xE2F6, 0x931E, 0xE2F7, 0x9806, 0xE2F8, 0x99B4,
- 0xE2F9, 0x620C, 0xE2FA, 0x8853, 0xE2FB, 0x8FF0, 0xE2FC, 0x9265, 0xE2FD, 0x5D07, 0xE2FE, 0x5D27, 0xE3A1, 0x5D69, 0xE3A2, 0x745F,
- 0xE3A3, 0x819D, 0xE3A4, 0x8768, 0xE3A5, 0x6FD5, 0xE3A6, 0x62FE, 0xE3A7, 0x7FD2, 0xE3A8, 0x8936, 0xE3A9, 0x8972, 0xE3AA, 0x4E1E,
- 0xE3AB, 0x4E58, 0xE3AC, 0x50E7, 0xE3AD, 0x52DD, 0xE3AE, 0x5347, 0xE3AF, 0x627F, 0xE3B0, 0x6607, 0xE3B1, 0x7E69, 0xE3B2, 0x8805,
- 0xE3B3, 0x965E, 0xE3B4, 0x4F8D, 0xE3B5, 0x5319, 0xE3B6, 0x5636, 0xE3B7, 0x59CB, 0xE3B8, 0x5AA4, 0xE3B9, 0x5C38, 0xE3BA, 0x5C4E,
- 0xE3BB, 0x5C4D, 0xE3BC, 0x5E02, 0xE3BD, 0x5F11, 0xE3BE, 0x6043, 0xE3BF, 0x65BD, 0xE3C0, 0x662F, 0xE3C1, 0x6642, 0xE3C2, 0x67BE,
- 0xE3C3, 0x67F4, 0xE3C4, 0x731C, 0xE3C5, 0x77E2, 0xE3C6, 0x793A, 0xE3C7, 0x7FC5, 0xE3C8, 0x8494, 0xE3C9, 0x84CD, 0xE3CA, 0x8996,
- 0xE3CB, 0x8A66, 0xE3CC, 0x8A69, 0xE3CD, 0x8AE1, 0xE3CE, 0x8C55, 0xE3CF, 0x8C7A, 0xE3D0, 0x57F4, 0xE3D1, 0x5BD4, 0xE3D2, 0x5F0F,
- 0xE3D3, 0x606F, 0xE3D4, 0x62ED, 0xE3D5, 0x690D, 0xE3D6, 0x6B96, 0xE3D7, 0x6E5C, 0xE3D8, 0x7184, 0xE3D9, 0x7BD2, 0xE3DA, 0x8755,
- 0xE3DB, 0x8B58, 0xE3DC, 0x8EFE, 0xE3DD, 0x98DF, 0xE3DE, 0x98FE, 0xE3DF, 0x4F38, 0xE3E0, 0x4F81, 0xE3E1, 0x4FE1, 0xE3E2, 0x547B,
- 0xE3E3, 0x5A20, 0xE3E4, 0x5BB8, 0xE3E5, 0x613C, 0xE3E6, 0x65B0, 0xE3E7, 0x6668, 0xE3E8, 0x71FC, 0xE3E9, 0x7533, 0xE3EA, 0x795E,
- 0xE3EB, 0x7D33, 0xE3EC, 0x814E, 0xE3ED, 0x81E3, 0xE3EE, 0x8398, 0xE3EF, 0x85AA, 0xE3F0, 0x85CE, 0xE3F1, 0x8703, 0xE3F2, 0x8A0A,
- 0xE3F3, 0x8EAB, 0xE3F4, 0x8F9B, 0xE3F5, 0xF971, 0xE3F6, 0x8FC5, 0xE3F7, 0x5931, 0xE3F8, 0x5BA4, 0xE3F9, 0x5BE6, 0xE3FA, 0x6089,
- 0xE3FB, 0x5BE9, 0xE3FC, 0x5C0B, 0xE3FD, 0x5FC3, 0xE3FE, 0x6C81, 0xE4A1, 0xF972, 0xE4A2, 0x6DF1, 0xE4A3, 0x700B, 0xE4A4, 0x751A,
- 0xE4A5, 0x82AF, 0xE4A6, 0x8AF6, 0xE4A7, 0x4EC0, 0xE4A8, 0x5341, 0xE4A9, 0xF973, 0xE4AA, 0x96D9, 0xE4AB, 0x6C0F, 0xE4AC, 0x4E9E,
- 0xE4AD, 0x4FC4, 0xE4AE, 0x5152, 0xE4AF, 0x555E, 0xE4B0, 0x5A25, 0xE4B1, 0x5CE8, 0xE4B2, 0x6211, 0xE4B3, 0x7259, 0xE4B4, 0x82BD,
- 0xE4B5, 0x83AA, 0xE4B6, 0x86FE, 0xE4B7, 0x8859, 0xE4B8, 0x8A1D, 0xE4B9, 0x963F, 0xE4BA, 0x96C5, 0xE4BB, 0x9913, 0xE4BC, 0x9D09,
- 0xE4BD, 0x9D5D, 0xE4BE, 0x580A, 0xE4BF, 0x5CB3, 0xE4C0, 0x5DBD, 0xE4C1, 0x5E44, 0xE4C2, 0x60E1, 0xE4C3, 0x6115, 0xE4C4, 0x63E1,
- 0xE4C5, 0x6A02, 0xE4C6, 0x6E25, 0xE4C7, 0x9102, 0xE4C8, 0x9354, 0xE4C9, 0x984E, 0xE4CA, 0x9C10, 0xE4CB, 0x9F77, 0xE4CC, 0x5B89,
- 0xE4CD, 0x5CB8, 0xE4CE, 0x6309, 0xE4CF, 0x664F, 0xE4D0, 0x6848, 0xE4D1, 0x773C, 0xE4D2, 0x96C1, 0xE4D3, 0x978D, 0xE4D4, 0x9854,
- 0xE4D5, 0x9B9F, 0xE4D6, 0x65A1, 0xE4D7, 0x8B01, 0xE4D8, 0x8ECB, 0xE4D9, 0x95BC, 0xE4DA, 0x5535, 0xE4DB, 0x5CA9, 0xE4DC, 0x5DD6,
- 0xE4DD, 0x5EB5, 0xE4DE, 0x6697, 0xE4DF, 0x764C, 0xE4E0, 0x83F4, 0xE4E1, 0x95C7, 0xE4E2, 0x58D3, 0xE4E3, 0x62BC, 0xE4E4, 0x72CE,
- 0xE4E5, 0x9D28, 0xE4E6, 0x4EF0, 0xE4E7, 0x592E, 0xE4E8, 0x600F, 0xE4E9, 0x663B, 0xE4EA, 0x6B83, 0xE4EB, 0x79E7, 0xE4EC, 0x9D26,
- 0xE4ED, 0x5393, 0xE4EE, 0x54C0, 0xE4EF, 0x57C3, 0xE4F0, 0x5D16, 0xE4F1, 0x611B, 0xE4F2, 0x66D6, 0xE4F3, 0x6DAF, 0xE4F4, 0x788D,
- 0xE4F5, 0x827E, 0xE4F6, 0x9698, 0xE4F7, 0x9744, 0xE4F8, 0x5384, 0xE4F9, 0x627C, 0xE4FA, 0x6396, 0xE4FB, 0x6DB2, 0xE4FC, 0x7E0A,
- 0xE4FD, 0x814B, 0xE4FE, 0x984D, 0xE5A1, 0x6AFB, 0xE5A2, 0x7F4C, 0xE5A3, 0x9DAF, 0xE5A4, 0x9E1A, 0xE5A5, 0x4E5F, 0xE5A6, 0x503B,
- 0xE5A7, 0x51B6, 0xE5A8, 0x591C, 0xE5A9, 0x60F9, 0xE5AA, 0x63F6, 0xE5AB, 0x6930, 0xE5AC, 0x723A, 0xE5AD, 0x8036, 0xE5AE, 0xF974,
- 0xE5AF, 0x91CE, 0xE5B0, 0x5F31, 0xE5B1, 0xF975, 0xE5B2, 0xF976, 0xE5B3, 0x7D04, 0xE5B4, 0x82E5, 0xE5B5, 0x846F, 0xE5B6, 0x84BB,
- 0xE5B7, 0x85E5, 0xE5B8, 0x8E8D, 0xE5B9, 0xF977, 0xE5BA, 0x4F6F, 0xE5BB, 0xF978, 0xE5BC, 0xF979, 0xE5BD, 0x58E4, 0xE5BE, 0x5B43,
- 0xE5BF, 0x6059, 0xE5C0, 0x63DA, 0xE5C1, 0x6518, 0xE5C2, 0x656D, 0xE5C3, 0x6698, 0xE5C4, 0xF97A, 0xE5C5, 0x694A, 0xE5C6, 0x6A23,
- 0xE5C7, 0x6D0B, 0xE5C8, 0x7001, 0xE5C9, 0x716C, 0xE5CA, 0x75D2, 0xE5CB, 0x760D, 0xE5CC, 0x79B3, 0xE5CD, 0x7A70, 0xE5CE, 0xF97B,
- 0xE5CF, 0x7F8A, 0xE5D0, 0xF97C, 0xE5D1, 0x8944, 0xE5D2, 0xF97D, 0xE5D3, 0x8B93, 0xE5D4, 0x91C0, 0xE5D5, 0x967D, 0xE5D6, 0xF97E,
- 0xE5D7, 0x990A, 0xE5D8, 0x5704, 0xE5D9, 0x5FA1, 0xE5DA, 0x65BC, 0xE5DB, 0x6F01, 0xE5DC, 0x7600, 0xE5DD, 0x79A6, 0xE5DE, 0x8A9E,
- 0xE5DF, 0x99AD, 0xE5E0, 0x9B5A, 0xE5E1, 0x9F6C, 0xE5E2, 0x5104, 0xE5E3, 0x61B6, 0xE5E4, 0x6291, 0xE5E5, 0x6A8D, 0xE5E6, 0x81C6,
- 0xE5E7, 0x5043, 0xE5E8, 0x5830, 0xE5E9, 0x5F66, 0xE5EA, 0x7109, 0xE5EB, 0x8A00, 0xE5EC, 0x8AFA, 0xE5ED, 0x5B7C, 0xE5EE, 0x8616,
- 0xE5EF, 0x4FFA, 0xE5F0, 0x513C, 0xE5F1, 0x56B4, 0xE5F2, 0x5944, 0xE5F3, 0x63A9, 0xE5F4, 0x6DF9, 0xE5F5, 0x5DAA, 0xE5F6, 0x696D,
- 0xE5F7, 0x5186, 0xE5F8, 0x4E88, 0xE5F9, 0x4F59, 0xE5FA, 0xF97F, 0xE5FB, 0xF980, 0xE5FC, 0xF981, 0xE5FD, 0x5982, 0xE5FE, 0xF982,
- 0xE6A1, 0xF983, 0xE6A2, 0x6B5F, 0xE6A3, 0x6C5D, 0xE6A4, 0xF984, 0xE6A5, 0x74B5, 0xE6A6, 0x7916, 0xE6A7, 0xF985, 0xE6A8, 0x8207,
- 0xE6A9, 0x8245, 0xE6AA, 0x8339, 0xE6AB, 0x8F3F, 0xE6AC, 0x8F5D, 0xE6AD, 0xF986, 0xE6AE, 0x9918, 0xE6AF, 0xF987, 0xE6B0, 0xF988,
- 0xE6B1, 0xF989, 0xE6B2, 0x4EA6, 0xE6B3, 0xF98A, 0xE6B4, 0x57DF, 0xE6B5, 0x5F79, 0xE6B6, 0x6613, 0xE6B7, 0xF98B, 0xE6B8, 0xF98C,
- 0xE6B9, 0x75AB, 0xE6BA, 0x7E79, 0xE6BB, 0x8B6F, 0xE6BC, 0xF98D, 0xE6BD, 0x9006, 0xE6BE, 0x9A5B, 0xE6BF, 0x56A5, 0xE6C0, 0x5827,
- 0xE6C1, 0x59F8, 0xE6C2, 0x5A1F, 0xE6C3, 0x5BB4, 0xE6C4, 0xF98E, 0xE6C5, 0x5EF6, 0xE6C6, 0xF98F, 0xE6C7, 0xF990, 0xE6C8, 0x6350,
- 0xE6C9, 0x633B, 0xE6CA, 0xF991, 0xE6CB, 0x693D, 0xE6CC, 0x6C87, 0xE6CD, 0x6CBF, 0xE6CE, 0x6D8E, 0xE6CF, 0x6D93, 0xE6D0, 0x6DF5,
- 0xE6D1, 0x6F14, 0xE6D2, 0xF992, 0xE6D3, 0x70DF, 0xE6D4, 0x7136, 0xE6D5, 0x7159, 0xE6D6, 0xF993, 0xE6D7, 0x71C3, 0xE6D8, 0x71D5,
- 0xE6D9, 0xF994, 0xE6DA, 0x784F, 0xE6DB, 0x786F, 0xE6DC, 0xF995, 0xE6DD, 0x7B75, 0xE6DE, 0x7DE3, 0xE6DF, 0xF996, 0xE6E0, 0x7E2F,
- 0xE6E1, 0xF997, 0xE6E2, 0x884D, 0xE6E3, 0x8EDF, 0xE6E4, 0xF998, 0xE6E5, 0xF999, 0xE6E6, 0xF99A, 0xE6E7, 0x925B, 0xE6E8, 0xF99B,
- 0xE6E9, 0x9CF6, 0xE6EA, 0xF99C, 0xE6EB, 0xF99D, 0xE6EC, 0xF99E, 0xE6ED, 0x6085, 0xE6EE, 0x6D85, 0xE6EF, 0xF99F, 0xE6F0, 0x71B1,
- 0xE6F1, 0xF9A0, 0xE6F2, 0xF9A1, 0xE6F3, 0x95B1, 0xE6F4, 0x53AD, 0xE6F5, 0xF9A2, 0xE6F6, 0xF9A3, 0xE6F7, 0xF9A4, 0xE6F8, 0x67D3,
- 0xE6F9, 0xF9A5, 0xE6FA, 0x708E, 0xE6FB, 0x7130, 0xE6FC, 0x7430, 0xE6FD, 0x8276, 0xE6FE, 0x82D2, 0xE7A1, 0xF9A6, 0xE7A2, 0x95BB,
- 0xE7A3, 0x9AE5, 0xE7A4, 0x9E7D, 0xE7A5, 0x66C4, 0xE7A6, 0xF9A7, 0xE7A7, 0x71C1, 0xE7A8, 0x8449, 0xE7A9, 0xF9A8, 0xE7AA, 0xF9A9,
- 0xE7AB, 0x584B, 0xE7AC, 0xF9AA, 0xE7AD, 0xF9AB, 0xE7AE, 0x5DB8, 0xE7AF, 0x5F71, 0xE7B0, 0xF9AC, 0xE7B1, 0x6620, 0xE7B2, 0x668E,
- 0xE7B3, 0x6979, 0xE7B4, 0x69AE, 0xE7B5, 0x6C38, 0xE7B6, 0x6CF3, 0xE7B7, 0x6E36, 0xE7B8, 0x6F41, 0xE7B9, 0x6FDA, 0xE7BA, 0x701B,
- 0xE7BB, 0x702F, 0xE7BC, 0x7150, 0xE7BD, 0x71DF, 0xE7BE, 0x7370, 0xE7BF, 0xF9AD, 0xE7C0, 0x745B, 0xE7C1, 0xF9AE, 0xE7C2, 0x74D4,
- 0xE7C3, 0x76C8, 0xE7C4, 0x7A4E, 0xE7C5, 0x7E93, 0xE7C6, 0xF9AF, 0xE7C7, 0xF9B0, 0xE7C8, 0x82F1, 0xE7C9, 0x8A60, 0xE7CA, 0x8FCE,
- 0xE7CB, 0xF9B1, 0xE7CC, 0x9348, 0xE7CD, 0xF9B2, 0xE7CE, 0x9719, 0xE7CF, 0xF9B3, 0xE7D0, 0xF9B4, 0xE7D1, 0x4E42, 0xE7D2, 0x502A,
- 0xE7D3, 0xF9B5, 0xE7D4, 0x5208, 0xE7D5, 0x53E1, 0xE7D6, 0x66F3, 0xE7D7, 0x6C6D, 0xE7D8, 0x6FCA, 0xE7D9, 0x730A, 0xE7DA, 0x777F,
- 0xE7DB, 0x7A62, 0xE7DC, 0x82AE, 0xE7DD, 0x85DD, 0xE7DE, 0x8602, 0xE7DF, 0xF9B6, 0xE7E0, 0x88D4, 0xE7E1, 0x8A63, 0xE7E2, 0x8B7D,
- 0xE7E3, 0x8C6B, 0xE7E4, 0xF9B7, 0xE7E5, 0x92B3, 0xE7E6, 0xF9B8, 0xE7E7, 0x9713, 0xE7E8, 0x9810, 0xE7E9, 0x4E94, 0xE7EA, 0x4F0D,
- 0xE7EB, 0x4FC9, 0xE7EC, 0x50B2, 0xE7ED, 0x5348, 0xE7EE, 0x543E, 0xE7EF, 0x5433, 0xE7F0, 0x55DA, 0xE7F1, 0x5862, 0xE7F2, 0x58BA,
- 0xE7F3, 0x5967, 0xE7F4, 0x5A1B, 0xE7F5, 0x5BE4, 0xE7F6, 0x609F, 0xE7F7, 0xF9B9, 0xE7F8, 0x61CA, 0xE7F9, 0x6556, 0xE7FA, 0x65FF,
- 0xE7FB, 0x6664, 0xE7FC, 0x68A7, 0xE7FD, 0x6C5A, 0xE7FE, 0x6FB3, 0xE8A1, 0x70CF, 0xE8A2, 0x71AC, 0xE8A3, 0x7352, 0xE8A4, 0x7B7D,
- 0xE8A5, 0x8708, 0xE8A6, 0x8AA4, 0xE8A7, 0x9C32, 0xE8A8, 0x9F07, 0xE8A9, 0x5C4B, 0xE8AA, 0x6C83, 0xE8AB, 0x7344, 0xE8AC, 0x7389,
- 0xE8AD, 0x923A, 0xE8AE, 0x6EAB, 0xE8AF, 0x7465, 0xE8B0, 0x761F, 0xE8B1, 0x7A69, 0xE8B2, 0x7E15, 0xE8B3, 0x860A, 0xE8B4, 0x5140,
- 0xE8B5, 0x58C5, 0xE8B6, 0x64C1, 0xE8B7, 0x74EE, 0xE8B8, 0x7515, 0xE8B9, 0x7670, 0xE8BA, 0x7FC1, 0xE8BB, 0x9095, 0xE8BC, 0x96CD,
- 0xE8BD, 0x9954, 0xE8BE, 0x6E26, 0xE8BF, 0x74E6, 0xE8C0, 0x7AA9, 0xE8C1, 0x7AAA, 0xE8C2, 0x81E5, 0xE8C3, 0x86D9, 0xE8C4, 0x8778,
- 0xE8C5, 0x8A1B, 0xE8C6, 0x5A49, 0xE8C7, 0x5B8C, 0xE8C8, 0x5B9B, 0xE8C9, 0x68A1, 0xE8CA, 0x6900, 0xE8CB, 0x6D63, 0xE8CC, 0x73A9,
- 0xE8CD, 0x7413, 0xE8CE, 0x742C, 0xE8CF, 0x7897, 0xE8D0, 0x7DE9, 0xE8D1, 0x7FEB, 0xE8D2, 0x8118, 0xE8D3, 0x8155, 0xE8D4, 0x839E,
- 0xE8D5, 0x8C4C, 0xE8D6, 0x962E, 0xE8D7, 0x9811, 0xE8D8, 0x66F0, 0xE8D9, 0x5F80, 0xE8DA, 0x65FA, 0xE8DB, 0x6789, 0xE8DC, 0x6C6A,
- 0xE8DD, 0x738B, 0xE8DE, 0x502D, 0xE8DF, 0x5A03, 0xE8E0, 0x6B6A, 0xE8E1, 0x77EE, 0xE8E2, 0x5916, 0xE8E3, 0x5D6C, 0xE8E4, 0x5DCD,
- 0xE8E5, 0x7325, 0xE8E6, 0x754F, 0xE8E7, 0xF9BA, 0xE8E8, 0xF9BB, 0xE8E9, 0x50E5, 0xE8EA, 0x51F9, 0xE8EB, 0x582F, 0xE8EC, 0x592D,
- 0xE8ED, 0x5996, 0xE8EE, 0x59DA, 0xE8EF, 0x5BE5, 0xE8F0, 0xF9BC, 0xE8F1, 0xF9BD, 0xE8F2, 0x5DA2, 0xE8F3, 0x62D7, 0xE8F4, 0x6416,
- 0xE8F5, 0x6493, 0xE8F6, 0x64FE, 0xE8F7, 0xF9BE, 0xE8F8, 0x66DC, 0xE8F9, 0xF9BF, 0xE8FA, 0x6A48, 0xE8FB, 0xF9C0, 0xE8FC, 0x71FF,
- 0xE8FD, 0x7464, 0xE8FE, 0xF9C1, 0xE9A1, 0x7A88, 0xE9A2, 0x7AAF, 0xE9A3, 0x7E47, 0xE9A4, 0x7E5E, 0xE9A5, 0x8000, 0xE9A6, 0x8170,
- 0xE9A7, 0xF9C2, 0xE9A8, 0x87EF, 0xE9A9, 0x8981, 0xE9AA, 0x8B20, 0xE9AB, 0x9059, 0xE9AC, 0xF9C3, 0xE9AD, 0x9080, 0xE9AE, 0x9952,
- 0xE9AF, 0x617E, 0xE9B0, 0x6B32, 0xE9B1, 0x6D74, 0xE9B2, 0x7E1F, 0xE9B3, 0x8925, 0xE9B4, 0x8FB1, 0xE9B5, 0x4FD1, 0xE9B6, 0x50AD,
- 0xE9B7, 0x5197, 0xE9B8, 0x52C7, 0xE9B9, 0x57C7, 0xE9BA, 0x5889, 0xE9BB, 0x5BB9, 0xE9BC, 0x5EB8, 0xE9BD, 0x6142, 0xE9BE, 0x6995,
- 0xE9BF, 0x6D8C, 0xE9C0, 0x6E67, 0xE9C1, 0x6EB6, 0xE9C2, 0x7194, 0xE9C3, 0x7462, 0xE9C4, 0x7528, 0xE9C5, 0x752C, 0xE9C6, 0x8073,
- 0xE9C7, 0x8338, 0xE9C8, 0x84C9, 0xE9C9, 0x8E0A, 0xE9CA, 0x9394, 0xE9CB, 0x93DE, 0xE9CC, 0xF9C4, 0xE9CD, 0x4E8E, 0xE9CE, 0x4F51,
- 0xE9CF, 0x5076, 0xE9D0, 0x512A, 0xE9D1, 0x53C8, 0xE9D2, 0x53CB, 0xE9D3, 0x53F3, 0xE9D4, 0x5B87, 0xE9D5, 0x5BD3, 0xE9D6, 0x5C24,
- 0xE9D7, 0x611A, 0xE9D8, 0x6182, 0xE9D9, 0x65F4, 0xE9DA, 0x725B, 0xE9DB, 0x7397, 0xE9DC, 0x7440, 0xE9DD, 0x76C2, 0xE9DE, 0x7950,
- 0xE9DF, 0x7991, 0xE9E0, 0x79B9, 0xE9E1, 0x7D06, 0xE9E2, 0x7FBD, 0xE9E3, 0x828B, 0xE9E4, 0x85D5, 0xE9E5, 0x865E, 0xE9E6, 0x8FC2,
- 0xE9E7, 0x9047, 0xE9E8, 0x90F5, 0xE9E9, 0x91EA, 0xE9EA, 0x9685, 0xE9EB, 0x96E8, 0xE9EC, 0x96E9, 0xE9ED, 0x52D6, 0xE9EE, 0x5F67,
- 0xE9EF, 0x65ED, 0xE9F0, 0x6631, 0xE9F1, 0x682F, 0xE9F2, 0x715C, 0xE9F3, 0x7A36, 0xE9F4, 0x90C1, 0xE9F5, 0x980A, 0xE9F6, 0x4E91,
- 0xE9F7, 0xF9C5, 0xE9F8, 0x6A52, 0xE9F9, 0x6B9E, 0xE9FA, 0x6F90, 0xE9FB, 0x7189, 0xE9FC, 0x8018, 0xE9FD, 0x82B8, 0xE9FE, 0x8553,
- 0xEAA1, 0x904B, 0xEAA2, 0x9695, 0xEAA3, 0x96F2, 0xEAA4, 0x97FB, 0xEAA5, 0x851A, 0xEAA6, 0x9B31, 0xEAA7, 0x4E90, 0xEAA8, 0x718A,
- 0xEAA9, 0x96C4, 0xEAAA, 0x5143, 0xEAAB, 0x539F, 0xEAAC, 0x54E1, 0xEAAD, 0x5713, 0xEAAE, 0x5712, 0xEAAF, 0x57A3, 0xEAB0, 0x5A9B,
- 0xEAB1, 0x5AC4, 0xEAB2, 0x5BC3, 0xEAB3, 0x6028, 0xEAB4, 0x613F, 0xEAB5, 0x63F4, 0xEAB6, 0x6C85, 0xEAB7, 0x6D39, 0xEAB8, 0x6E72,
- 0xEAB9, 0x6E90, 0xEABA, 0x7230, 0xEABB, 0x733F, 0xEABC, 0x7457, 0xEABD, 0x82D1, 0xEABE, 0x8881, 0xEABF, 0x8F45, 0xEAC0, 0x9060,
- 0xEAC1, 0xF9C6, 0xEAC2, 0x9662, 0xEAC3, 0x9858, 0xEAC4, 0x9D1B, 0xEAC5, 0x6708, 0xEAC6, 0x8D8A, 0xEAC7, 0x925E, 0xEAC8, 0x4F4D,
- 0xEAC9, 0x5049, 0xEACA, 0x50DE, 0xEACB, 0x5371, 0xEACC, 0x570D, 0xEACD, 0x59D4, 0xEACE, 0x5A01, 0xEACF, 0x5C09, 0xEAD0, 0x6170,
- 0xEAD1, 0x6690, 0xEAD2, 0x6E2D, 0xEAD3, 0x7232, 0xEAD4, 0x744B, 0xEAD5, 0x7DEF, 0xEAD6, 0x80C3, 0xEAD7, 0x840E, 0xEAD8, 0x8466,
- 0xEAD9, 0x853F, 0xEADA, 0x875F, 0xEADB, 0x885B, 0xEADC, 0x8918, 0xEADD, 0x8B02, 0xEADE, 0x9055, 0xEADF, 0x97CB, 0xEAE0, 0x9B4F,
- 0xEAE1, 0x4E73, 0xEAE2, 0x4F91, 0xEAE3, 0x5112, 0xEAE4, 0x516A, 0xEAE5, 0xF9C7, 0xEAE6, 0x552F, 0xEAE7, 0x55A9, 0xEAE8, 0x5B7A,
- 0xEAE9, 0x5BA5, 0xEAEA, 0x5E7C, 0xEAEB, 0x5E7D, 0xEAEC, 0x5EBE, 0xEAED, 0x60A0, 0xEAEE, 0x60DF, 0xEAEF, 0x6108, 0xEAF0, 0x6109,
- 0xEAF1, 0x63C4, 0xEAF2, 0x6538, 0xEAF3, 0x6709, 0xEAF4, 0xF9C8, 0xEAF5, 0x67D4, 0xEAF6, 0x67DA, 0xEAF7, 0xF9C9, 0xEAF8, 0x6961,
- 0xEAF9, 0x6962, 0xEAFA, 0x6CB9, 0xEAFB, 0x6D27, 0xEAFC, 0xF9CA, 0xEAFD, 0x6E38, 0xEAFE, 0xF9CB, 0xEBA1, 0x6FE1, 0xEBA2, 0x7336,
- 0xEBA3, 0x7337, 0xEBA4, 0xF9CC, 0xEBA5, 0x745C, 0xEBA6, 0x7531, 0xEBA7, 0xF9CD, 0xEBA8, 0x7652, 0xEBA9, 0xF9CE, 0xEBAA, 0xF9CF,
- 0xEBAB, 0x7DAD, 0xEBAC, 0x81FE, 0xEBAD, 0x8438, 0xEBAE, 0x88D5, 0xEBAF, 0x8A98, 0xEBB0, 0x8ADB, 0xEBB1, 0x8AED, 0xEBB2, 0x8E30,
- 0xEBB3, 0x8E42, 0xEBB4, 0x904A, 0xEBB5, 0x903E, 0xEBB6, 0x907A, 0xEBB7, 0x9149, 0xEBB8, 0x91C9, 0xEBB9, 0x936E, 0xEBBA, 0xF9D0,
- 0xEBBB, 0xF9D1, 0xEBBC, 0x5809, 0xEBBD, 0xF9D2, 0xEBBE, 0x6BD3, 0xEBBF, 0x8089, 0xEBC0, 0x80B2, 0xEBC1, 0xF9D3, 0xEBC2, 0xF9D4,
- 0xEBC3, 0x5141, 0xEBC4, 0x596B, 0xEBC5, 0x5C39, 0xEBC6, 0xF9D5, 0xEBC7, 0xF9D6, 0xEBC8, 0x6F64, 0xEBC9, 0x73A7, 0xEBCA, 0x80E4,
- 0xEBCB, 0x8D07, 0xEBCC, 0xF9D7, 0xEBCD, 0x9217, 0xEBCE, 0x958F, 0xEBCF, 0xF9D8, 0xEBD0, 0xF9D9, 0xEBD1, 0xF9DA, 0xEBD2, 0xF9DB,
- 0xEBD3, 0x807F, 0xEBD4, 0x620E, 0xEBD5, 0x701C, 0xEBD6, 0x7D68, 0xEBD7, 0x878D, 0xEBD8, 0xF9DC, 0xEBD9, 0x57A0, 0xEBDA, 0x6069,
- 0xEBDB, 0x6147, 0xEBDC, 0x6BB7, 0xEBDD, 0x8ABE, 0xEBDE, 0x9280, 0xEBDF, 0x96B1, 0xEBE0, 0x4E59, 0xEBE1, 0x541F, 0xEBE2, 0x6DEB,
- 0xEBE3, 0x852D, 0xEBE4, 0x9670, 0xEBE5, 0x97F3, 0xEBE6, 0x98EE, 0xEBE7, 0x63D6, 0xEBE8, 0x6CE3, 0xEBE9, 0x9091, 0xEBEA, 0x51DD,
- 0xEBEB, 0x61C9, 0xEBEC, 0x81BA, 0xEBED, 0x9DF9, 0xEBEE, 0x4F9D, 0xEBEF, 0x501A, 0xEBF0, 0x5100, 0xEBF1, 0x5B9C, 0xEBF2, 0x610F,
- 0xEBF3, 0x61FF, 0xEBF4, 0x64EC, 0xEBF5, 0x6905, 0xEBF6, 0x6BC5, 0xEBF7, 0x7591, 0xEBF8, 0x77E3, 0xEBF9, 0x7FA9, 0xEBFA, 0x8264,
- 0xEBFB, 0x858F, 0xEBFC, 0x87FB, 0xEBFD, 0x8863, 0xEBFE, 0x8ABC, 0xECA1, 0x8B70, 0xECA2, 0x91AB, 0xECA3, 0x4E8C, 0xECA4, 0x4EE5,
- 0xECA5, 0x4F0A, 0xECA6, 0xF9DD, 0xECA7, 0xF9DE, 0xECA8, 0x5937, 0xECA9, 0x59E8, 0xECAA, 0xF9DF, 0xECAB, 0x5DF2, 0xECAC, 0x5F1B,
- 0xECAD, 0x5F5B, 0xECAE, 0x6021, 0xECAF, 0xF9E0, 0xECB0, 0xF9E1, 0xECB1, 0xF9E2, 0xECB2, 0xF9E3, 0xECB3, 0x723E, 0xECB4, 0x73E5,
- 0xECB5, 0xF9E4, 0xECB6, 0x7570, 0xECB7, 0x75CD, 0xECB8, 0xF9E5, 0xECB9, 0x79FB, 0xECBA, 0xF9E6, 0xECBB, 0x800C, 0xECBC, 0x8033,
- 0xECBD, 0x8084, 0xECBE, 0x82E1, 0xECBF, 0x8351, 0xECC0, 0xF9E7, 0xECC1, 0xF9E8, 0xECC2, 0x8CBD, 0xECC3, 0x8CB3, 0xECC4, 0x9087,
- 0xECC5, 0xF9E9, 0xECC6, 0xF9EA, 0xECC7, 0x98F4, 0xECC8, 0x990C, 0xECC9, 0xF9EB, 0xECCA, 0xF9EC, 0xECCB, 0x7037, 0xECCC, 0x76CA,
- 0xECCD, 0x7FCA, 0xECCE, 0x7FCC, 0xECCF, 0x7FFC, 0xECD0, 0x8B1A, 0xECD1, 0x4EBA, 0xECD2, 0x4EC1, 0xECD3, 0x5203, 0xECD4, 0x5370,
- 0xECD5, 0xF9ED, 0xECD6, 0x54BD, 0xECD7, 0x56E0, 0xECD8, 0x59FB, 0xECD9, 0x5BC5, 0xECDA, 0x5F15, 0xECDB, 0x5FCD, 0xECDC, 0x6E6E,
- 0xECDD, 0xF9EE, 0xECDE, 0xF9EF, 0xECDF, 0x7D6A, 0xECE0, 0x8335, 0xECE1, 0xF9F0, 0xECE2, 0x8693, 0xECE3, 0x8A8D, 0xECE4, 0xF9F1,
- 0xECE5, 0x976D, 0xECE6, 0x9777, 0xECE7, 0xF9F2, 0xECE8, 0xF9F3, 0xECE9, 0x4E00, 0xECEA, 0x4F5A, 0xECEB, 0x4F7E, 0xECEC, 0x58F9,
- 0xECED, 0x65E5, 0xECEE, 0x6EA2, 0xECEF, 0x9038, 0xECF0, 0x93B0, 0xECF1, 0x99B9, 0xECF2, 0x4EFB, 0xECF3, 0x58EC, 0xECF4, 0x598A,
- 0xECF5, 0x59D9, 0xECF6, 0x6041, 0xECF7, 0xF9F4, 0xECF8, 0xF9F5, 0xECF9, 0x7A14, 0xECFA, 0xF9F6, 0xECFB, 0x834F, 0xECFC, 0x8CC3,
- 0xECFD, 0x5165, 0xECFE, 0x5344, 0xEDA1, 0xF9F7, 0xEDA2, 0xF9F8, 0xEDA3, 0xF9F9, 0xEDA4, 0x4ECD, 0xEDA5, 0x5269, 0xEDA6, 0x5B55,
- 0xEDA7, 0x82BF, 0xEDA8, 0x4ED4, 0xEDA9, 0x523A, 0xEDAA, 0x54A8, 0xEDAB, 0x59C9, 0xEDAC, 0x59FF, 0xEDAD, 0x5B50, 0xEDAE, 0x5B57,
- 0xEDAF, 0x5B5C, 0xEDB0, 0x6063, 0xEDB1, 0x6148, 0xEDB2, 0x6ECB, 0xEDB3, 0x7099, 0xEDB4, 0x716E, 0xEDB5, 0x7386, 0xEDB6, 0x74F7,
- 0xEDB7, 0x75B5, 0xEDB8, 0x78C1, 0xEDB9, 0x7D2B, 0xEDBA, 0x8005, 0xEDBB, 0x81EA, 0xEDBC, 0x8328, 0xEDBD, 0x8517, 0xEDBE, 0x85C9,
- 0xEDBF, 0x8AEE, 0xEDC0, 0x8CC7, 0xEDC1, 0x96CC, 0xEDC2, 0x4F5C, 0xEDC3, 0x52FA, 0xEDC4, 0x56BC, 0xEDC5, 0x65AB, 0xEDC6, 0x6628,
- 0xEDC7, 0x707C, 0xEDC8, 0x70B8, 0xEDC9, 0x7235, 0xEDCA, 0x7DBD, 0xEDCB, 0x828D, 0xEDCC, 0x914C, 0xEDCD, 0x96C0, 0xEDCE, 0x9D72,
- 0xEDCF, 0x5B71, 0xEDD0, 0x68E7, 0xEDD1, 0x6B98, 0xEDD2, 0x6F7A, 0xEDD3, 0x76DE, 0xEDD4, 0x5C91, 0xEDD5, 0x66AB, 0xEDD6, 0x6F5B,
- 0xEDD7, 0x7BB4, 0xEDD8, 0x7C2A, 0xEDD9, 0x8836, 0xEDDA, 0x96DC, 0xEDDB, 0x4E08, 0xEDDC, 0x4ED7, 0xEDDD, 0x5320, 0xEDDE, 0x5834,
- 0xEDDF, 0x58BB, 0xEDE0, 0x58EF, 0xEDE1, 0x596C, 0xEDE2, 0x5C07, 0xEDE3, 0x5E33, 0xEDE4, 0x5E84, 0xEDE5, 0x5F35, 0xEDE6, 0x638C,
- 0xEDE7, 0x66B2, 0xEDE8, 0x6756, 0xEDE9, 0x6A1F, 0xEDEA, 0x6AA3, 0xEDEB, 0x6B0C, 0xEDEC, 0x6F3F, 0xEDED, 0x7246, 0xEDEE, 0xF9FA,
- 0xEDEF, 0x7350, 0xEDF0, 0x748B, 0xEDF1, 0x7AE0, 0xEDF2, 0x7CA7, 0xEDF3, 0x8178, 0xEDF4, 0x81DF, 0xEDF5, 0x81E7, 0xEDF6, 0x838A,
- 0xEDF7, 0x846C, 0xEDF8, 0x8523, 0xEDF9, 0x8594, 0xEDFA, 0x85CF, 0xEDFB, 0x88DD, 0xEDFC, 0x8D13, 0xEDFD, 0x91AC, 0xEDFE, 0x9577,
- 0xEEA1, 0x969C, 0xEEA2, 0x518D, 0xEEA3, 0x54C9, 0xEEA4, 0x5728, 0xEEA5, 0x5BB0, 0xEEA6, 0x624D, 0xEEA7, 0x6750, 0xEEA8, 0x683D,
- 0xEEA9, 0x6893, 0xEEAA, 0x6E3D, 0xEEAB, 0x6ED3, 0xEEAC, 0x707D, 0xEEAD, 0x7E21, 0xEEAE, 0x88C1, 0xEEAF, 0x8CA1, 0xEEB0, 0x8F09,
- 0xEEB1, 0x9F4B, 0xEEB2, 0x9F4E, 0xEEB3, 0x722D, 0xEEB4, 0x7B8F, 0xEEB5, 0x8ACD, 0xEEB6, 0x931A, 0xEEB7, 0x4F47, 0xEEB8, 0x4F4E,
- 0xEEB9, 0x5132, 0xEEBA, 0x5480, 0xEEBB, 0x59D0, 0xEEBC, 0x5E95, 0xEEBD, 0x62B5, 0xEEBE, 0x6775, 0xEEBF, 0x696E, 0xEEC0, 0x6A17,
- 0xEEC1, 0x6CAE, 0xEEC2, 0x6E1A, 0xEEC3, 0x72D9, 0xEEC4, 0x732A, 0xEEC5, 0x75BD, 0xEEC6, 0x7BB8, 0xEEC7, 0x7D35, 0xEEC8, 0x82E7,
- 0xEEC9, 0x83F9, 0xEECA, 0x8457, 0xEECB, 0x85F7, 0xEECC, 0x8A5B, 0xEECD, 0x8CAF, 0xEECE, 0x8E87, 0xEECF, 0x9019, 0xEED0, 0x90B8,
- 0xEED1, 0x96CE, 0xEED2, 0x9F5F, 0xEED3, 0x52E3, 0xEED4, 0x540A, 0xEED5, 0x5AE1, 0xEED6, 0x5BC2, 0xEED7, 0x6458, 0xEED8, 0x6575,
- 0xEED9, 0x6EF4, 0xEEDA, 0x72C4, 0xEEDB, 0xF9FB, 0xEEDC, 0x7684, 0xEEDD, 0x7A4D, 0xEEDE, 0x7B1B, 0xEEDF, 0x7C4D, 0xEEE0, 0x7E3E,
- 0xEEE1, 0x7FDF, 0xEEE2, 0x837B, 0xEEE3, 0x8B2B, 0xEEE4, 0x8CCA, 0xEEE5, 0x8D64, 0xEEE6, 0x8DE1, 0xEEE7, 0x8E5F, 0xEEE8, 0x8FEA,
- 0xEEE9, 0x8FF9, 0xEEEA, 0x9069, 0xEEEB, 0x93D1, 0xEEEC, 0x4F43, 0xEEED, 0x4F7A, 0xEEEE, 0x50B3, 0xEEEF, 0x5168, 0xEEF0, 0x5178,
- 0xEEF1, 0x524D, 0xEEF2, 0x526A, 0xEEF3, 0x5861, 0xEEF4, 0x587C, 0xEEF5, 0x5960, 0xEEF6, 0x5C08, 0xEEF7, 0x5C55, 0xEEF8, 0x5EDB,
- 0xEEF9, 0x609B, 0xEEFA, 0x6230, 0xEEFB, 0x6813, 0xEEFC, 0x6BBF, 0xEEFD, 0x6C08, 0xEEFE, 0x6FB1, 0xEFA1, 0x714E, 0xEFA2, 0x7420,
- 0xEFA3, 0x7530, 0xEFA4, 0x7538, 0xEFA5, 0x7551, 0xEFA6, 0x7672, 0xEFA7, 0x7B4C, 0xEFA8, 0x7B8B, 0xEFA9, 0x7BAD, 0xEFAA, 0x7BC6,
- 0xEFAB, 0x7E8F, 0xEFAC, 0x8A6E, 0xEFAD, 0x8F3E, 0xEFAE, 0x8F49, 0xEFAF, 0x923F, 0xEFB0, 0x9293, 0xEFB1, 0x9322, 0xEFB2, 0x942B,
- 0xEFB3, 0x96FB, 0xEFB4, 0x985A, 0xEFB5, 0x986B, 0xEFB6, 0x991E, 0xEFB7, 0x5207, 0xEFB8, 0x622A, 0xEFB9, 0x6298, 0xEFBA, 0x6D59,
- 0xEFBB, 0x7664, 0xEFBC, 0x7ACA, 0xEFBD, 0x7BC0, 0xEFBE, 0x7D76, 0xEFBF, 0x5360, 0xEFC0, 0x5CBE, 0xEFC1, 0x5E97, 0xEFC2, 0x6F38,
- 0xEFC3, 0x70B9, 0xEFC4, 0x7C98, 0xEFC5, 0x9711, 0xEFC6, 0x9B8E, 0xEFC7, 0x9EDE, 0xEFC8, 0x63A5, 0xEFC9, 0x647A, 0xEFCA, 0x8776,
- 0xEFCB, 0x4E01, 0xEFCC, 0x4E95, 0xEFCD, 0x4EAD, 0xEFCE, 0x505C, 0xEFCF, 0x5075, 0xEFD0, 0x5448, 0xEFD1, 0x59C3, 0xEFD2, 0x5B9A,
- 0xEFD3, 0x5E40, 0xEFD4, 0x5EAD, 0xEFD5, 0x5EF7, 0xEFD6, 0x5F81, 0xEFD7, 0x60C5, 0xEFD8, 0x633A, 0xEFD9, 0x653F, 0xEFDA, 0x6574,
- 0xEFDB, 0x65CC, 0xEFDC, 0x6676, 0xEFDD, 0x6678, 0xEFDE, 0x67FE, 0xEFDF, 0x6968, 0xEFE0, 0x6A89, 0xEFE1, 0x6B63, 0xEFE2, 0x6C40,
- 0xEFE3, 0x6DC0, 0xEFE4, 0x6DE8, 0xEFE5, 0x6E1F, 0xEFE6, 0x6E5E, 0xEFE7, 0x701E, 0xEFE8, 0x70A1, 0xEFE9, 0x738E, 0xEFEA, 0x73FD,
- 0xEFEB, 0x753A, 0xEFEC, 0x775B, 0xEFED, 0x7887, 0xEFEE, 0x798E, 0xEFEF, 0x7A0B, 0xEFF0, 0x7A7D, 0xEFF1, 0x7CBE, 0xEFF2, 0x7D8E,
- 0xEFF3, 0x8247, 0xEFF4, 0x8A02, 0xEFF5, 0x8AEA, 0xEFF6, 0x8C9E, 0xEFF7, 0x912D, 0xEFF8, 0x914A, 0xEFF9, 0x91D8, 0xEFFA, 0x9266,
- 0xEFFB, 0x92CC, 0xEFFC, 0x9320, 0xEFFD, 0x9706, 0xEFFE, 0x9756, 0xF0A1, 0x975C, 0xF0A2, 0x9802, 0xF0A3, 0x9F0E, 0xF0A4, 0x5236,
- 0xF0A5, 0x5291, 0xF0A6, 0x557C, 0xF0A7, 0x5824, 0xF0A8, 0x5E1D, 0xF0A9, 0x5F1F, 0xF0AA, 0x608C, 0xF0AB, 0x63D0, 0xF0AC, 0x68AF,
- 0xF0AD, 0x6FDF, 0xF0AE, 0x796D, 0xF0AF, 0x7B2C, 0xF0B0, 0x81CD, 0xF0B1, 0x85BA, 0xF0B2, 0x88FD, 0xF0B3, 0x8AF8, 0xF0B4, 0x8E44,
- 0xF0B5, 0x918D, 0xF0B6, 0x9664, 0xF0B7, 0x969B, 0xF0B8, 0x973D, 0xF0B9, 0x984C, 0xF0BA, 0x9F4A, 0xF0BB, 0x4FCE, 0xF0BC, 0x5146,
- 0xF0BD, 0x51CB, 0xF0BE, 0x52A9, 0xF0BF, 0x5632, 0xF0C0, 0x5F14, 0xF0C1, 0x5F6B, 0xF0C2, 0x63AA, 0xF0C3, 0x64CD, 0xF0C4, 0x65E9,
- 0xF0C5, 0x6641, 0xF0C6, 0x66FA, 0xF0C7, 0x66F9, 0xF0C8, 0x671D, 0xF0C9, 0x689D, 0xF0CA, 0x68D7, 0xF0CB, 0x69FD, 0xF0CC, 0x6F15,
- 0xF0CD, 0x6F6E, 0xF0CE, 0x7167, 0xF0CF, 0x71E5, 0xF0D0, 0x722A, 0xF0D1, 0x74AA, 0xF0D2, 0x773A, 0xF0D3, 0x7956, 0xF0D4, 0x795A,
- 0xF0D5, 0x79DF, 0xF0D6, 0x7A20, 0xF0D7, 0x7A95, 0xF0D8, 0x7C97, 0xF0D9, 0x7CDF, 0xF0DA, 0x7D44, 0xF0DB, 0x7E70, 0xF0DC, 0x8087,
- 0xF0DD, 0x85FB, 0xF0DE, 0x86A4, 0xF0DF, 0x8A54, 0xF0E0, 0x8ABF, 0xF0E1, 0x8D99, 0xF0E2, 0x8E81, 0xF0E3, 0x9020, 0xF0E4, 0x906D,
- 0xF0E5, 0x91E3, 0xF0E6, 0x963B, 0xF0E7, 0x96D5, 0xF0E8, 0x9CE5, 0xF0E9, 0x65CF, 0xF0EA, 0x7C07, 0xF0EB, 0x8DB3, 0xF0EC, 0x93C3,
- 0xF0ED, 0x5B58, 0xF0EE, 0x5C0A, 0xF0EF, 0x5352, 0xF0F0, 0x62D9, 0xF0F1, 0x731D, 0xF0F2, 0x5027, 0xF0F3, 0x5B97, 0xF0F4, 0x5F9E,
- 0xF0F5, 0x60B0, 0xF0F6, 0x616B, 0xF0F7, 0x68D5, 0xF0F8, 0x6DD9, 0xF0F9, 0x742E, 0xF0FA, 0x7A2E, 0xF0FB, 0x7D42, 0xF0FC, 0x7D9C,
- 0xF0FD, 0x7E31, 0xF0FE, 0x816B, 0xF1A1, 0x8E2A, 0xF1A2, 0x8E35, 0xF1A3, 0x937E, 0xF1A4, 0x9418, 0xF1A5, 0x4F50, 0xF1A6, 0x5750,
- 0xF1A7, 0x5DE6, 0xF1A8, 0x5EA7, 0xF1A9, 0x632B, 0xF1AA, 0x7F6A, 0xF1AB, 0x4E3B, 0xF1AC, 0x4F4F, 0xF1AD, 0x4F8F, 0xF1AE, 0x505A,
- 0xF1AF, 0x59DD, 0xF1B0, 0x80C4, 0xF1B1, 0x546A, 0xF1B2, 0x5468, 0xF1B3, 0x55FE, 0xF1B4, 0x594F, 0xF1B5, 0x5B99, 0xF1B6, 0x5DDE,
- 0xF1B7, 0x5EDA, 0xF1B8, 0x665D, 0xF1B9, 0x6731, 0xF1BA, 0x67F1, 0xF1BB, 0x682A, 0xF1BC, 0x6CE8, 0xF1BD, 0x6D32, 0xF1BE, 0x6E4A,
- 0xF1BF, 0x6F8D, 0xF1C0, 0x70B7, 0xF1C1, 0x73E0, 0xF1C2, 0x7587, 0xF1C3, 0x7C4C, 0xF1C4, 0x7D02, 0xF1C5, 0x7D2C, 0xF1C6, 0x7DA2,
- 0xF1C7, 0x821F, 0xF1C8, 0x86DB, 0xF1C9, 0x8A3B, 0xF1CA, 0x8A85, 0xF1CB, 0x8D70, 0xF1CC, 0x8E8A, 0xF1CD, 0x8F33, 0xF1CE, 0x9031,
- 0xF1CF, 0x914E, 0xF1D0, 0x9152, 0xF1D1, 0x9444, 0xF1D2, 0x99D0, 0xF1D3, 0x7AF9, 0xF1D4, 0x7CA5, 0xF1D5, 0x4FCA, 0xF1D6, 0x5101,
- 0xF1D7, 0x51C6, 0xF1D8, 0x57C8, 0xF1D9, 0x5BEF, 0xF1DA, 0x5CFB, 0xF1DB, 0x6659, 0xF1DC, 0x6A3D, 0xF1DD, 0x6D5A, 0xF1DE, 0x6E96,
- 0xF1DF, 0x6FEC, 0xF1E0, 0x710C, 0xF1E1, 0x756F, 0xF1E2, 0x7AE3, 0xF1E3, 0x8822, 0xF1E4, 0x9021, 0xF1E5, 0x9075, 0xF1E6, 0x96CB,
- 0xF1E7, 0x99FF, 0xF1E8, 0x8301, 0xF1E9, 0x4E2D, 0xF1EA, 0x4EF2, 0xF1EB, 0x8846, 0xF1EC, 0x91CD, 0xF1ED, 0x537D, 0xF1EE, 0x6ADB,
- 0xF1EF, 0x696B, 0xF1F0, 0x6C41, 0xF1F1, 0x847A, 0xF1F2, 0x589E, 0xF1F3, 0x618E, 0xF1F4, 0x66FE, 0xF1F5, 0x62EF, 0xF1F6, 0x70DD,
- 0xF1F7, 0x7511, 0xF1F8, 0x75C7, 0xF1F9, 0x7E52, 0xF1FA, 0x84B8, 0xF1FB, 0x8B49, 0xF1FC, 0x8D08, 0xF1FD, 0x4E4B, 0xF1FE, 0x53EA,
- 0xF2A1, 0x54AB, 0xF2A2, 0x5730, 0xF2A3, 0x5740, 0xF2A4, 0x5FD7, 0xF2A5, 0x6301, 0xF2A6, 0x6307, 0xF2A7, 0x646F, 0xF2A8, 0x652F,
- 0xF2A9, 0x65E8, 0xF2AA, 0x667A, 0xF2AB, 0x679D, 0xF2AC, 0x67B3, 0xF2AD, 0x6B62, 0xF2AE, 0x6C60, 0xF2AF, 0x6C9A, 0xF2B0, 0x6F2C,
- 0xF2B1, 0x77E5, 0xF2B2, 0x7825, 0xF2B3, 0x7949, 0xF2B4, 0x7957, 0xF2B5, 0x7D19, 0xF2B6, 0x80A2, 0xF2B7, 0x8102, 0xF2B8, 0x81F3,
- 0xF2B9, 0x829D, 0xF2BA, 0x82B7, 0xF2BB, 0x8718, 0xF2BC, 0x8A8C, 0xF2BD, 0xF9FC, 0xF2BE, 0x8D04, 0xF2BF, 0x8DBE, 0xF2C0, 0x9072,
- 0xF2C1, 0x76F4, 0xF2C2, 0x7A19, 0xF2C3, 0x7A37, 0xF2C4, 0x7E54, 0xF2C5, 0x8077, 0xF2C6, 0x5507, 0xF2C7, 0x55D4, 0xF2C8, 0x5875,
- 0xF2C9, 0x632F, 0xF2CA, 0x6422, 0xF2CB, 0x6649, 0xF2CC, 0x664B, 0xF2CD, 0x686D, 0xF2CE, 0x699B, 0xF2CF, 0x6B84, 0xF2D0, 0x6D25,
- 0xF2D1, 0x6EB1, 0xF2D2, 0x73CD, 0xF2D3, 0x7468, 0xF2D4, 0x74A1, 0xF2D5, 0x755B, 0xF2D6, 0x75B9, 0xF2D7, 0x76E1, 0xF2D8, 0x771E,
- 0xF2D9, 0x778B, 0xF2DA, 0x79E6, 0xF2DB, 0x7E09, 0xF2DC, 0x7E1D, 0xF2DD, 0x81FB, 0xF2DE, 0x852F, 0xF2DF, 0x8897, 0xF2E0, 0x8A3A,
- 0xF2E1, 0x8CD1, 0xF2E2, 0x8EEB, 0xF2E3, 0x8FB0, 0xF2E4, 0x9032, 0xF2E5, 0x93AD, 0xF2E6, 0x9663, 0xF2E7, 0x9673, 0xF2E8, 0x9707,
- 0xF2E9, 0x4F84, 0xF2EA, 0x53F1, 0xF2EB, 0x59EA, 0xF2EC, 0x5AC9, 0xF2ED, 0x5E19, 0xF2EE, 0x684E, 0xF2EF, 0x74C6, 0xF2F0, 0x75BE,
- 0xF2F1, 0x79E9, 0xF2F2, 0x7A92, 0xF2F3, 0x81A3, 0xF2F4, 0x86ED, 0xF2F5, 0x8CEA, 0xF2F6, 0x8DCC, 0xF2F7, 0x8FED, 0xF2F8, 0x659F,
- 0xF2F9, 0x6715, 0xF2FA, 0xF9FD, 0xF2FB, 0x57F7, 0xF2FC, 0x6F57, 0xF2FD, 0x7DDD, 0xF2FE, 0x8F2F, 0xF3A1, 0x93F6, 0xF3A2, 0x96C6,
- 0xF3A3, 0x5FB5, 0xF3A4, 0x61F2, 0xF3A5, 0x6F84, 0xF3A6, 0x4E14, 0xF3A7, 0x4F98, 0xF3A8, 0x501F, 0xF3A9, 0x53C9, 0xF3AA, 0x55DF,
- 0xF3AB, 0x5D6F, 0xF3AC, 0x5DEE, 0xF3AD, 0x6B21, 0xF3AE, 0x6B64, 0xF3AF, 0x78CB, 0xF3B0, 0x7B9A, 0xF3B1, 0xF9FE, 0xF3B2, 0x8E49,
- 0xF3B3, 0x8ECA, 0xF3B4, 0x906E, 0xF3B5, 0x6349, 0xF3B6, 0x643E, 0xF3B7, 0x7740, 0xF3B8, 0x7A84, 0xF3B9, 0x932F, 0xF3BA, 0x947F,
- 0xF3BB, 0x9F6A, 0xF3BC, 0x64B0, 0xF3BD, 0x6FAF, 0xF3BE, 0x71E6, 0xF3BF, 0x74A8, 0xF3C0, 0x74DA, 0xF3C1, 0x7AC4, 0xF3C2, 0x7C12,
- 0xF3C3, 0x7E82, 0xF3C4, 0x7CB2, 0xF3C5, 0x7E98, 0xF3C6, 0x8B9A, 0xF3C7, 0x8D0A, 0xF3C8, 0x947D, 0xF3C9, 0x9910, 0xF3CA, 0x994C,
- 0xF3CB, 0x5239, 0xF3CC, 0x5BDF, 0xF3CD, 0x64E6, 0xF3CE, 0x672D, 0xF3CF, 0x7D2E, 0xF3D0, 0x50ED, 0xF3D1, 0x53C3, 0xF3D2, 0x5879,
- 0xF3D3, 0x6158, 0xF3D4, 0x6159, 0xF3D5, 0x61FA, 0xF3D6, 0x65AC, 0xF3D7, 0x7AD9, 0xF3D8, 0x8B92, 0xF3D9, 0x8B96, 0xF3DA, 0x5009,
- 0xF3DB, 0x5021, 0xF3DC, 0x5275, 0xF3DD, 0x5531, 0xF3DE, 0x5A3C, 0xF3DF, 0x5EE0, 0xF3E0, 0x5F70, 0xF3E1, 0x6134, 0xF3E2, 0x655E,
- 0xF3E3, 0x660C, 0xF3E4, 0x6636, 0xF3E5, 0x66A2, 0xF3E6, 0x69CD, 0xF3E7, 0x6EC4, 0xF3E8, 0x6F32, 0xF3E9, 0x7316, 0xF3EA, 0x7621,
- 0xF3EB, 0x7A93, 0xF3EC, 0x8139, 0xF3ED, 0x8259, 0xF3EE, 0x83D6, 0xF3EF, 0x84BC, 0xF3F0, 0x50B5, 0xF3F1, 0x57F0, 0xF3F2, 0x5BC0,
- 0xF3F3, 0x5BE8, 0xF3F4, 0x5F69, 0xF3F5, 0x63A1, 0xF3F6, 0x7826, 0xF3F7, 0x7DB5, 0xF3F8, 0x83DC, 0xF3F9, 0x8521, 0xF3FA, 0x91C7,
- 0xF3FB, 0x91F5, 0xF3FC, 0x518A, 0xF3FD, 0x67F5, 0xF3FE, 0x7B56, 0xF4A1, 0x8CAC, 0xF4A2, 0x51C4, 0xF4A3, 0x59BB, 0xF4A4, 0x60BD,
- 0xF4A5, 0x8655, 0xF4A6, 0x501C, 0xF4A7, 0xF9FF, 0xF4A8, 0x5254, 0xF4A9, 0x5C3A, 0xF4AA, 0x617D, 0xF4AB, 0x621A, 0xF4AC, 0x62D3,
- 0xF4AD, 0x64F2, 0xF4AE, 0x65A5, 0xF4AF, 0x6ECC, 0xF4B0, 0x7620, 0xF4B1, 0x810A, 0xF4B2, 0x8E60, 0xF4B3, 0x965F, 0xF4B4, 0x96BB,
- 0xF4B5, 0x4EDF, 0xF4B6, 0x5343, 0xF4B7, 0x5598, 0xF4B8, 0x5929, 0xF4B9, 0x5DDD, 0xF4BA, 0x64C5, 0xF4BB, 0x6CC9, 0xF4BC, 0x6DFA,
- 0xF4BD, 0x7394, 0xF4BE, 0x7A7F, 0xF4BF, 0x821B, 0xF4C0, 0x85A6, 0xF4C1, 0x8CE4, 0xF4C2, 0x8E10, 0xF4C3, 0x9077, 0xF4C4, 0x91E7,
- 0xF4C5, 0x95E1, 0xF4C6, 0x9621, 0xF4C7, 0x97C6, 0xF4C8, 0x51F8, 0xF4C9, 0x54F2, 0xF4CA, 0x5586, 0xF4CB, 0x5FB9, 0xF4CC, 0x64A4,
- 0xF4CD, 0x6F88, 0xF4CE, 0x7DB4, 0xF4CF, 0x8F1F, 0xF4D0, 0x8F4D, 0xF4D1, 0x9435, 0xF4D2, 0x50C9, 0xF4D3, 0x5C16, 0xF4D4, 0x6CBE,
- 0xF4D5, 0x6DFB, 0xF4D6, 0x751B, 0xF4D7, 0x77BB, 0xF4D8, 0x7C3D, 0xF4D9, 0x7C64, 0xF4DA, 0x8A79, 0xF4DB, 0x8AC2, 0xF4DC, 0x581E,
- 0xF4DD, 0x59BE, 0xF4DE, 0x5E16, 0xF4DF, 0x6377, 0xF4E0, 0x7252, 0xF4E1, 0x758A, 0xF4E2, 0x776B, 0xF4E3, 0x8ADC, 0xF4E4, 0x8CBC,
- 0xF4E5, 0x8F12, 0xF4E6, 0x5EF3, 0xF4E7, 0x6674, 0xF4E8, 0x6DF8, 0xF4E9, 0x807D, 0xF4EA, 0x83C1, 0xF4EB, 0x8ACB, 0xF4EC, 0x9751,
- 0xF4ED, 0x9BD6, 0xF4EE, 0xFA00, 0xF4EF, 0x5243, 0xF4F0, 0x66FF, 0xF4F1, 0x6D95, 0xF4F2, 0x6EEF, 0xF4F3, 0x7DE0, 0xF4F4, 0x8AE6,
- 0xF4F5, 0x902E, 0xF4F6, 0x905E, 0xF4F7, 0x9AD4, 0xF4F8, 0x521D, 0xF4F9, 0x527F, 0xF4FA, 0x54E8, 0xF4FB, 0x6194, 0xF4FC, 0x6284,
- 0xF4FD, 0x62DB, 0xF4FE, 0x68A2, 0xF5A1, 0x6912, 0xF5A2, 0x695A, 0xF5A3, 0x6A35, 0xF5A4, 0x7092, 0xF5A5, 0x7126, 0xF5A6, 0x785D,
- 0xF5A7, 0x7901, 0xF5A8, 0x790E, 0xF5A9, 0x79D2, 0xF5AA, 0x7A0D, 0xF5AB, 0x8096, 0xF5AC, 0x8278, 0xF5AD, 0x82D5, 0xF5AE, 0x8349,
- 0xF5AF, 0x8549, 0xF5B0, 0x8C82, 0xF5B1, 0x8D85, 0xF5B2, 0x9162, 0xF5B3, 0x918B, 0xF5B4, 0x91AE, 0xF5B5, 0x4FC3, 0xF5B6, 0x56D1,
- 0xF5B7, 0x71ED, 0xF5B8, 0x77D7, 0xF5B9, 0x8700, 0xF5BA, 0x89F8, 0xF5BB, 0x5BF8, 0xF5BC, 0x5FD6, 0xF5BD, 0x6751, 0xF5BE, 0x90A8,
- 0xF5BF, 0x53E2, 0xF5C0, 0x585A, 0xF5C1, 0x5BF5, 0xF5C2, 0x60A4, 0xF5C3, 0x6181, 0xF5C4, 0x6460, 0xF5C5, 0x7E3D, 0xF5C6, 0x8070,
- 0xF5C7, 0x8525, 0xF5C8, 0x9283, 0xF5C9, 0x64AE, 0xF5CA, 0x50AC, 0xF5CB, 0x5D14, 0xF5CC, 0x6700, 0xF5CD, 0x589C, 0xF5CE, 0x62BD,
- 0xF5CF, 0x63A8, 0xF5D0, 0x690E, 0xF5D1, 0x6978, 0xF5D2, 0x6A1E, 0xF5D3, 0x6E6B, 0xF5D4, 0x76BA, 0xF5D5, 0x79CB, 0xF5D6, 0x82BB,
- 0xF5D7, 0x8429, 0xF5D8, 0x8ACF, 0xF5D9, 0x8DA8, 0xF5DA, 0x8FFD, 0xF5DB, 0x9112, 0xF5DC, 0x914B, 0xF5DD, 0x919C, 0xF5DE, 0x9310,
- 0xF5DF, 0x9318, 0xF5E0, 0x939A, 0xF5E1, 0x96DB, 0xF5E2, 0x9A36, 0xF5E3, 0x9C0D, 0xF5E4, 0x4E11, 0xF5E5, 0x755C, 0xF5E6, 0x795D,
- 0xF5E7, 0x7AFA, 0xF5E8, 0x7B51, 0xF5E9, 0x7BC9, 0xF5EA, 0x7E2E, 0xF5EB, 0x84C4, 0xF5EC, 0x8E59, 0xF5ED, 0x8E74, 0xF5EE, 0x8EF8,
- 0xF5EF, 0x9010, 0xF5F0, 0x6625, 0xF5F1, 0x693F, 0xF5F2, 0x7443, 0xF5F3, 0x51FA, 0xF5F4, 0x672E, 0xF5F5, 0x9EDC, 0xF5F6, 0x5145,
- 0xF5F7, 0x5FE0, 0xF5F8, 0x6C96, 0xF5F9, 0x87F2, 0xF5FA, 0x885D, 0xF5FB, 0x8877, 0xF5FC, 0x60B4, 0xF5FD, 0x81B5, 0xF5FE, 0x8403,
- 0xF6A1, 0x8D05, 0xF6A2, 0x53D6, 0xF6A3, 0x5439, 0xF6A4, 0x5634, 0xF6A5, 0x5A36, 0xF6A6, 0x5C31, 0xF6A7, 0x708A, 0xF6A8, 0x7FE0,
- 0xF6A9, 0x805A, 0xF6AA, 0x8106, 0xF6AB, 0x81ED, 0xF6AC, 0x8DA3, 0xF6AD, 0x9189, 0xF6AE, 0x9A5F, 0xF6AF, 0x9DF2, 0xF6B0, 0x5074,
- 0xF6B1, 0x4EC4, 0xF6B2, 0x53A0, 0xF6B3, 0x60FB, 0xF6B4, 0x6E2C, 0xF6B5, 0x5C64, 0xF6B6, 0x4F88, 0xF6B7, 0x5024, 0xF6B8, 0x55E4,
- 0xF6B9, 0x5CD9, 0xF6BA, 0x5E5F, 0xF6BB, 0x6065, 0xF6BC, 0x6894, 0xF6BD, 0x6CBB, 0xF6BE, 0x6DC4, 0xF6BF, 0x71BE, 0xF6C0, 0x75D4,
- 0xF6C1, 0x75F4, 0xF6C2, 0x7661, 0xF6C3, 0x7A1A, 0xF6C4, 0x7A49, 0xF6C5, 0x7DC7, 0xF6C6, 0x7DFB, 0xF6C7, 0x7F6E, 0xF6C8, 0x81F4,
- 0xF6C9, 0x86A9, 0xF6CA, 0x8F1C, 0xF6CB, 0x96C9, 0xF6CC, 0x99B3, 0xF6CD, 0x9F52, 0xF6CE, 0x5247, 0xF6CF, 0x52C5, 0xF6D0, 0x98ED,
- 0xF6D1, 0x89AA, 0xF6D2, 0x4E03, 0xF6D3, 0x67D2, 0xF6D4, 0x6F06, 0xF6D5, 0x4FB5, 0xF6D6, 0x5BE2, 0xF6D7, 0x6795, 0xF6D8, 0x6C88,
- 0xF6D9, 0x6D78, 0xF6DA, 0x741B, 0xF6DB, 0x7827, 0xF6DC, 0x91DD, 0xF6DD, 0x937C, 0xF6DE, 0x87C4, 0xF6DF, 0x79E4, 0xF6E0, 0x7A31,
- 0xF6E1, 0x5FEB, 0xF6E2, 0x4ED6, 0xF6E3, 0x54A4, 0xF6E4, 0x553E, 0xF6E5, 0x58AE, 0xF6E6, 0x59A5, 0xF6E7, 0x60F0, 0xF6E8, 0x6253,
- 0xF6E9, 0x62D6, 0xF6EA, 0x6736, 0xF6EB, 0x6955, 0xF6EC, 0x8235, 0xF6ED, 0x9640, 0xF6EE, 0x99B1, 0xF6EF, 0x99DD, 0xF6F0, 0x502C,
- 0xF6F1, 0x5353, 0xF6F2, 0x5544, 0xF6F3, 0x577C, 0xF6F4, 0xFA01, 0xF6F5, 0x6258, 0xF6F6, 0xFA02, 0xF6F7, 0x64E2, 0xF6F8, 0x666B,
- 0xF6F9, 0x67DD, 0xF6FA, 0x6FC1, 0xF6FB, 0x6FEF, 0xF6FC, 0x7422, 0xF6FD, 0x7438, 0xF6FE, 0x8A17, 0xF7A1, 0x9438, 0xF7A2, 0x5451,
- 0xF7A3, 0x5606, 0xF7A4, 0x5766, 0xF7A5, 0x5F48, 0xF7A6, 0x619A, 0xF7A7, 0x6B4E, 0xF7A8, 0x7058, 0xF7A9, 0x70AD, 0xF7AA, 0x7DBB,
- 0xF7AB, 0x8A95, 0xF7AC, 0x596A, 0xF7AD, 0x812B, 0xF7AE, 0x63A2, 0xF7AF, 0x7708, 0xF7B0, 0x803D, 0xF7B1, 0x8CAA, 0xF7B2, 0x5854,
- 0xF7B3, 0x642D, 0xF7B4, 0x69BB, 0xF7B5, 0x5B95, 0xF7B6, 0x5E11, 0xF7B7, 0x6E6F, 0xF7B8, 0xFA03, 0xF7B9, 0x8569, 0xF7BA, 0x514C,
- 0xF7BB, 0x53F0, 0xF7BC, 0x592A, 0xF7BD, 0x6020, 0xF7BE, 0x614B, 0xF7BF, 0x6B86, 0xF7C0, 0x6C70, 0xF7C1, 0x6CF0, 0xF7C2, 0x7B1E,
- 0xF7C3, 0x80CE, 0xF7C4, 0x82D4, 0xF7C5, 0x8DC6, 0xF7C6, 0x90B0, 0xF7C7, 0x98B1, 0xF7C8, 0xFA04, 0xF7C9, 0x64C7, 0xF7CA, 0x6FA4,
- 0xF7CB, 0x6491, 0xF7CC, 0x6504, 0xF7CD, 0x514E, 0xF7CE, 0x5410, 0xF7CF, 0x571F, 0xF7D0, 0x8A0E, 0xF7D1, 0x615F, 0xF7D2, 0x6876,
- 0xF7D3, 0xFA05, 0xF7D4, 0x75DB, 0xF7D5, 0x7B52, 0xF7D6, 0x7D71, 0xF7D7, 0x901A, 0xF7D8, 0x5806, 0xF7D9, 0x69CC, 0xF7DA, 0x817F,
- 0xF7DB, 0x892A, 0xF7DC, 0x9000, 0xF7DD, 0x9839, 0xF7DE, 0x5078, 0xF7DF, 0x5957, 0xF7E0, 0x59AC, 0xF7E1, 0x6295, 0xF7E2, 0x900F,
- 0xF7E3, 0x9B2A, 0xF7E4, 0x615D, 0xF7E5, 0x7279, 0xF7E6, 0x95D6, 0xF7E7, 0x5761, 0xF7E8, 0x5A46, 0xF7E9, 0x5DF4, 0xF7EA, 0x628A,
- 0xF7EB, 0x64AD, 0xF7EC, 0x64FA, 0xF7ED, 0x6777, 0xF7EE, 0x6CE2, 0xF7EF, 0x6D3E, 0xF7F0, 0x722C, 0xF7F1, 0x7436, 0xF7F2, 0x7834,
- 0xF7F3, 0x7F77, 0xF7F4, 0x82AD, 0xF7F5, 0x8DDB, 0xF7F6, 0x9817, 0xF7F7, 0x5224, 0xF7F8, 0x5742, 0xF7F9, 0x677F, 0xF7FA, 0x7248,
- 0xF7FB, 0x74E3, 0xF7FC, 0x8CA9, 0xF7FD, 0x8FA6, 0xF7FE, 0x9211, 0xF8A1, 0x962A, 0xF8A2, 0x516B, 0xF8A3, 0x53ED, 0xF8A4, 0x634C,
- 0xF8A5, 0x4F69, 0xF8A6, 0x5504, 0xF8A7, 0x6096, 0xF8A8, 0x6557, 0xF8A9, 0x6C9B, 0xF8AA, 0x6D7F, 0xF8AB, 0x724C, 0xF8AC, 0x72FD,
- 0xF8AD, 0x7A17, 0xF8AE, 0x8987, 0xF8AF, 0x8C9D, 0xF8B0, 0x5F6D, 0xF8B1, 0x6F8E, 0xF8B2, 0x70F9, 0xF8B3, 0x81A8, 0xF8B4, 0x610E,
- 0xF8B5, 0x4FBF, 0xF8B6, 0x504F, 0xF8B7, 0x6241, 0xF8B8, 0x7247, 0xF8B9, 0x7BC7, 0xF8BA, 0x7DE8, 0xF8BB, 0x7FE9, 0xF8BC, 0x904D,
- 0xF8BD, 0x97AD, 0xF8BE, 0x9A19, 0xF8BF, 0x8CB6, 0xF8C0, 0x576A, 0xF8C1, 0x5E73, 0xF8C2, 0x67B0, 0xF8C3, 0x840D, 0xF8C4, 0x8A55,
- 0xF8C5, 0x5420, 0xF8C6, 0x5B16, 0xF8C7, 0x5E63, 0xF8C8, 0x5EE2, 0xF8C9, 0x5F0A, 0xF8CA, 0x6583, 0xF8CB, 0x80BA, 0xF8CC, 0x853D,
- 0xF8CD, 0x9589, 0xF8CE, 0x965B, 0xF8CF, 0x4F48, 0xF8D0, 0x5305, 0xF8D1, 0x530D, 0xF8D2, 0x530F, 0xF8D3, 0x5486, 0xF8D4, 0x54FA,
- 0xF8D5, 0x5703, 0xF8D6, 0x5E03, 0xF8D7, 0x6016, 0xF8D8, 0x629B, 0xF8D9, 0x62B1, 0xF8DA, 0x6355, 0xF8DB, 0xFA06, 0xF8DC, 0x6CE1,
- 0xF8DD, 0x6D66, 0xF8DE, 0x75B1, 0xF8DF, 0x7832, 0xF8E0, 0x80DE, 0xF8E1, 0x812F, 0xF8E2, 0x82DE, 0xF8E3, 0x8461, 0xF8E4, 0x84B2,
- 0xF8E5, 0x888D, 0xF8E6, 0x8912, 0xF8E7, 0x900B, 0xF8E8, 0x92EA, 0xF8E9, 0x98FD, 0xF8EA, 0x9B91, 0xF8EB, 0x5E45, 0xF8EC, 0x66B4,
- 0xF8ED, 0x66DD, 0xF8EE, 0x7011, 0xF8EF, 0x7206, 0xF8F0, 0xFA07, 0xF8F1, 0x4FF5, 0xF8F2, 0x527D, 0xF8F3, 0x5F6A, 0xF8F4, 0x6153,
- 0xF8F5, 0x6753, 0xF8F6, 0x6A19, 0xF8F7, 0x6F02, 0xF8F8, 0x74E2, 0xF8F9, 0x7968, 0xF8FA, 0x8868, 0xF8FB, 0x8C79, 0xF8FC, 0x98C7,
- 0xF8FD, 0x98C4, 0xF8FE, 0x9A43, 0xF9A1, 0x54C1, 0xF9A2, 0x7A1F, 0xF9A3, 0x6953, 0xF9A4, 0x8AF7, 0xF9A5, 0x8C4A, 0xF9A6, 0x98A8,
- 0xF9A7, 0x99AE, 0xF9A8, 0x5F7C, 0xF9A9, 0x62AB, 0xF9AA, 0x75B2, 0xF9AB, 0x76AE, 0xF9AC, 0x88AB, 0xF9AD, 0x907F, 0xF9AE, 0x9642,
- 0xF9AF, 0x5339, 0xF9B0, 0x5F3C, 0xF9B1, 0x5FC5, 0xF9B2, 0x6CCC, 0xF9B3, 0x73CC, 0xF9B4, 0x7562, 0xF9B5, 0x758B, 0xF9B6, 0x7B46,
- 0xF9B7, 0x82FE, 0xF9B8, 0x999D, 0xF9B9, 0x4E4F, 0xF9BA, 0x903C, 0xF9BB, 0x4E0B, 0xF9BC, 0x4F55, 0xF9BD, 0x53A6, 0xF9BE, 0x590F,
- 0xF9BF, 0x5EC8, 0xF9C0, 0x6630, 0xF9C1, 0x6CB3, 0xF9C2, 0x7455, 0xF9C3, 0x8377, 0xF9C4, 0x8766, 0xF9C5, 0x8CC0, 0xF9C6, 0x9050,
- 0xF9C7, 0x971E, 0xF9C8, 0x9C15, 0xF9C9, 0x58D1, 0xF9CA, 0x5B78, 0xF9CB, 0x8650, 0xF9CC, 0x8B14, 0xF9CD, 0x9DB4, 0xF9CE, 0x5BD2,
- 0xF9CF, 0x6068, 0xF9D0, 0x608D, 0xF9D1, 0x65F1, 0xF9D2, 0x6C57, 0xF9D3, 0x6F22, 0xF9D4, 0x6FA3, 0xF9D5, 0x701A, 0xF9D6, 0x7F55,
- 0xF9D7, 0x7FF0, 0xF9D8, 0x9591, 0xF9D9, 0x9592, 0xF9DA, 0x9650, 0xF9DB, 0x97D3, 0xF9DC, 0x5272, 0xF9DD, 0x8F44, 0xF9DE, 0x51FD,
- 0xF9DF, 0x542B, 0xF9E0, 0x54B8, 0xF9E1, 0x5563, 0xF9E2, 0x558A, 0xF9E3, 0x6ABB, 0xF9E4, 0x6DB5, 0xF9E5, 0x7DD8, 0xF9E6, 0x8266,
- 0xF9E7, 0x929C, 0xF9E8, 0x9677, 0xF9E9, 0x9E79, 0xF9EA, 0x5408, 0xF9EB, 0x54C8, 0xF9EC, 0x76D2, 0xF9ED, 0x86E4, 0xF9EE, 0x95A4,
- 0xF9EF, 0x95D4, 0xF9F0, 0x965C, 0xF9F1, 0x4EA2, 0xF9F2, 0x4F09, 0xF9F3, 0x59EE, 0xF9F4, 0x5AE6, 0xF9F5, 0x5DF7, 0xF9F6, 0x6052,
- 0xF9F7, 0x6297, 0xF9F8, 0x676D, 0xF9F9, 0x6841, 0xF9FA, 0x6C86, 0xF9FB, 0x6E2F, 0xF9FC, 0x7F38, 0xF9FD, 0x809B, 0xF9FE, 0x822A,
- 0xFAA1, 0xFA08, 0xFAA2, 0xFA09, 0xFAA3, 0x9805, 0xFAA4, 0x4EA5, 0xFAA5, 0x5055, 0xFAA6, 0x54B3, 0xFAA7, 0x5793, 0xFAA8, 0x595A,
- 0xFAA9, 0x5B69, 0xFAAA, 0x5BB3, 0xFAAB, 0x61C8, 0xFAAC, 0x6977, 0xFAAD, 0x6D77, 0xFAAE, 0x7023, 0xFAAF, 0x87F9, 0xFAB0, 0x89E3,
- 0xFAB1, 0x8A72, 0xFAB2, 0x8AE7, 0xFAB3, 0x9082, 0xFAB4, 0x99ED, 0xFAB5, 0x9AB8, 0xFAB6, 0x52BE, 0xFAB7, 0x6838, 0xFAB8, 0x5016,
- 0xFAB9, 0x5E78, 0xFABA, 0x674F, 0xFABB, 0x8347, 0xFABC, 0x884C, 0xFABD, 0x4EAB, 0xFABE, 0x5411, 0xFABF, 0x56AE, 0xFAC0, 0x73E6,
- 0xFAC1, 0x9115, 0xFAC2, 0x97FF, 0xFAC3, 0x9909, 0xFAC4, 0x9957, 0xFAC5, 0x9999, 0xFAC6, 0x5653, 0xFAC7, 0x589F, 0xFAC8, 0x865B,
- 0xFAC9, 0x8A31, 0xFACA, 0x61B2, 0xFACB, 0x6AF6, 0xFACC, 0x737B, 0xFACD, 0x8ED2, 0xFACE, 0x6B47, 0xFACF, 0x96AA, 0xFAD0, 0x9A57,
- 0xFAD1, 0x5955, 0xFAD2, 0x7200, 0xFAD3, 0x8D6B, 0xFAD4, 0x9769, 0xFAD5, 0x4FD4, 0xFAD6, 0x5CF4, 0xFAD7, 0x5F26, 0xFAD8, 0x61F8,
- 0xFAD9, 0x665B, 0xFADA, 0x6CEB, 0xFADB, 0x70AB, 0xFADC, 0x7384, 0xFADD, 0x73B9, 0xFADE, 0x73FE, 0xFADF, 0x7729, 0xFAE0, 0x774D,
- 0xFAE1, 0x7D43, 0xFAE2, 0x7D62, 0xFAE3, 0x7E23, 0xFAE4, 0x8237, 0xFAE5, 0x8852, 0xFAE6, 0xFA0A, 0xFAE7, 0x8CE2, 0xFAE8, 0x9249,
- 0xFAE9, 0x986F, 0xFAEA, 0x5B51, 0xFAEB, 0x7A74, 0xFAEC, 0x8840, 0xFAED, 0x9801, 0xFAEE, 0x5ACC, 0xFAEF, 0x4FE0, 0xFAF0, 0x5354,
- 0xFAF1, 0x593E, 0xFAF2, 0x5CFD, 0xFAF3, 0x633E, 0xFAF4, 0x6D79, 0xFAF5, 0x72F9, 0xFAF6, 0x8105, 0xFAF7, 0x8107, 0xFAF8, 0x83A2,
- 0xFAF9, 0x92CF, 0xFAFA, 0x9830, 0xFAFB, 0x4EA8, 0xFAFC, 0x5144, 0xFAFD, 0x5211, 0xFAFE, 0x578B, 0xFBA1, 0x5F62, 0xFBA2, 0x6CC2,
- 0xFBA3, 0x6ECE, 0xFBA4, 0x7005, 0xFBA5, 0x7050, 0xFBA6, 0x70AF, 0xFBA7, 0x7192, 0xFBA8, 0x73E9, 0xFBA9, 0x7469, 0xFBAA, 0x834A,
- 0xFBAB, 0x87A2, 0xFBAC, 0x8861, 0xFBAD, 0x9008, 0xFBAE, 0x90A2, 0xFBAF, 0x93A3, 0xFBB0, 0x99A8, 0xFBB1, 0x516E, 0xFBB2, 0x5F57,
- 0xFBB3, 0x60E0, 0xFBB4, 0x6167, 0xFBB5, 0x66B3, 0xFBB6, 0x8559, 0xFBB7, 0x8E4A, 0xFBB8, 0x91AF, 0xFBB9, 0x978B, 0xFBBA, 0x4E4E,
- 0xFBBB, 0x4E92, 0xFBBC, 0x547C, 0xFBBD, 0x58D5, 0xFBBE, 0x58FA, 0xFBBF, 0x597D, 0xFBC0, 0x5CB5, 0xFBC1, 0x5F27, 0xFBC2, 0x6236,
- 0xFBC3, 0x6248, 0xFBC4, 0x660A, 0xFBC5, 0x6667, 0xFBC6, 0x6BEB, 0xFBC7, 0x6D69, 0xFBC8, 0x6DCF, 0xFBC9, 0x6E56, 0xFBCA, 0x6EF8,
- 0xFBCB, 0x6F94, 0xFBCC, 0x6FE0, 0xFBCD, 0x6FE9, 0xFBCE, 0x705D, 0xFBCF, 0x72D0, 0xFBD0, 0x7425, 0xFBD1, 0x745A, 0xFBD2, 0x74E0,
- 0xFBD3, 0x7693, 0xFBD4, 0x795C, 0xFBD5, 0x7CCA, 0xFBD6, 0x7E1E, 0xFBD7, 0x80E1, 0xFBD8, 0x82A6, 0xFBD9, 0x846B, 0xFBDA, 0x84BF,
- 0xFBDB, 0x864E, 0xFBDC, 0x865F, 0xFBDD, 0x8774, 0xFBDE, 0x8B77, 0xFBDF, 0x8C6A, 0xFBE0, 0x93AC, 0xFBE1, 0x9800, 0xFBE2, 0x9865,
- 0xFBE3, 0x60D1, 0xFBE4, 0x6216, 0xFBE5, 0x9177, 0xFBE6, 0x5A5A, 0xFBE7, 0x660F, 0xFBE8, 0x6DF7, 0xFBE9, 0x6E3E, 0xFBEA, 0x743F,
- 0xFBEB, 0x9B42, 0xFBEC, 0x5FFD, 0xFBED, 0x60DA, 0xFBEE, 0x7B0F, 0xFBEF, 0x54C4, 0xFBF0, 0x5F18, 0xFBF1, 0x6C5E, 0xFBF2, 0x6CD3,
- 0xFBF3, 0x6D2A, 0xFBF4, 0x70D8, 0xFBF5, 0x7D05, 0xFBF6, 0x8679, 0xFBF7, 0x8A0C, 0xFBF8, 0x9D3B, 0xFBF9, 0x5316, 0xFBFA, 0x548C,
- 0xFBFB, 0x5B05, 0xFBFC, 0x6A3A, 0xFBFD, 0x706B, 0xFBFE, 0x7575, 0xFCA1, 0x798D, 0xFCA2, 0x79BE, 0xFCA3, 0x82B1, 0xFCA4, 0x83EF,
- 0xFCA5, 0x8A71, 0xFCA6, 0x8B41, 0xFCA7, 0x8CA8, 0xFCA8, 0x9774, 0xFCA9, 0xFA0B, 0xFCAA, 0x64F4, 0xFCAB, 0x652B, 0xFCAC, 0x78BA,
- 0xFCAD, 0x78BB, 0xFCAE, 0x7A6B, 0xFCAF, 0x4E38, 0xFCB0, 0x559A, 0xFCB1, 0x5950, 0xFCB2, 0x5BA6, 0xFCB3, 0x5E7B, 0xFCB4, 0x60A3,
- 0xFCB5, 0x63DB, 0xFCB6, 0x6B61, 0xFCB7, 0x6665, 0xFCB8, 0x6853, 0xFCB9, 0x6E19, 0xFCBA, 0x7165, 0xFCBB, 0x74B0, 0xFCBC, 0x7D08,
- 0xFCBD, 0x9084, 0xFCBE, 0x9A69, 0xFCBF, 0x9C25, 0xFCC0, 0x6D3B, 0xFCC1, 0x6ED1, 0xFCC2, 0x733E, 0xFCC3, 0x8C41, 0xFCC4, 0x95CA,
- 0xFCC5, 0x51F0, 0xFCC6, 0x5E4C, 0xFCC7, 0x5FA8, 0xFCC8, 0x604D, 0xFCC9, 0x60F6, 0xFCCA, 0x6130, 0xFCCB, 0x614C, 0xFCCC, 0x6643,
- 0xFCCD, 0x6644, 0xFCCE, 0x69A5, 0xFCCF, 0x6CC1, 0xFCD0, 0x6E5F, 0xFCD1, 0x6EC9, 0xFCD2, 0x6F62, 0xFCD3, 0x714C, 0xFCD4, 0x749C,
- 0xFCD5, 0x7687, 0xFCD6, 0x7BC1, 0xFCD7, 0x7C27, 0xFCD8, 0x8352, 0xFCD9, 0x8757, 0xFCDA, 0x9051, 0xFCDB, 0x968D, 0xFCDC, 0x9EC3,
- 0xFCDD, 0x532F, 0xFCDE, 0x56DE, 0xFCDF, 0x5EFB, 0xFCE0, 0x5F8A, 0xFCE1, 0x6062, 0xFCE2, 0x6094, 0xFCE3, 0x61F7, 0xFCE4, 0x6666,
- 0xFCE5, 0x6703, 0xFCE6, 0x6A9C, 0xFCE7, 0x6DEE, 0xFCE8, 0x6FAE, 0xFCE9, 0x7070, 0xFCEA, 0x736A, 0xFCEB, 0x7E6A, 0xFCEC, 0x81BE,
- 0xFCED, 0x8334, 0xFCEE, 0x86D4, 0xFCEF, 0x8AA8, 0xFCF0, 0x8CC4, 0xFCF1, 0x5283, 0xFCF2, 0x7372, 0xFCF3, 0x5B96, 0xFCF4, 0x6A6B,
- 0xFCF5, 0x9404, 0xFCF6, 0x54EE, 0xFCF7, 0x5686, 0xFCF8, 0x5B5D, 0xFCF9, 0x6548, 0xFCFA, 0x6585, 0xFCFB, 0x66C9, 0xFCFC, 0x689F,
- 0xFCFD, 0x6D8D, 0xFCFE, 0x6DC6, 0xFDA1, 0x723B, 0xFDA2, 0x80B4, 0xFDA3, 0x9175, 0xFDA4, 0x9A4D, 0xFDA5, 0x4FAF, 0xFDA6, 0x5019,
- 0xFDA7, 0x539A, 0xFDA8, 0x540E, 0xFDA9, 0x543C, 0xFDAA, 0x5589, 0xFDAB, 0x55C5, 0xFDAC, 0x5E3F, 0xFDAD, 0x5F8C, 0xFDAE, 0x673D,
- 0xFDAF, 0x7166, 0xFDB0, 0x73DD, 0xFDB1, 0x9005, 0xFDB2, 0x52DB, 0xFDB3, 0x52F3, 0xFDB4, 0x5864, 0xFDB5, 0x58CE, 0xFDB6, 0x7104,
- 0xFDB7, 0x718F, 0xFDB8, 0x71FB, 0xFDB9, 0x85B0, 0xFDBA, 0x8A13, 0xFDBB, 0x6688, 0xFDBC, 0x85A8, 0xFDBD, 0x55A7, 0xFDBE, 0x6684,
- 0xFDBF, 0x714A, 0xFDC0, 0x8431, 0xFDC1, 0x5349, 0xFDC2, 0x5599, 0xFDC3, 0x6BC1, 0xFDC4, 0x5F59, 0xFDC5, 0x5FBD, 0xFDC6, 0x63EE,
- 0xFDC7, 0x6689, 0xFDC8, 0x7147, 0xFDC9, 0x8AF1, 0xFDCA, 0x8F1D, 0xFDCB, 0x9EBE, 0xFDCC, 0x4F11, 0xFDCD, 0x643A, 0xFDCE, 0x70CB,
- 0xFDCF, 0x7566, 0xFDD0, 0x8667, 0xFDD1, 0x6064, 0xFDD2, 0x8B4E, 0xFDD3, 0x9DF8, 0xFDD4, 0x5147, 0xFDD5, 0x51F6, 0xFDD6, 0x5308,
- 0xFDD7, 0x6D36, 0xFDD8, 0x80F8, 0xFDD9, 0x9ED1, 0xFDDA, 0x6615, 0xFDDB, 0x6B23, 0xFDDC, 0x7098, 0xFDDD, 0x75D5, 0xFDDE, 0x5403,
- 0xFDDF, 0x5C79, 0xFDE0, 0x7D07, 0xFDE1, 0x8A16, 0xFDE2, 0x6B20, 0xFDE3, 0x6B3D, 0xFDE4, 0x6B46, 0xFDE5, 0x5438, 0xFDE6, 0x6070,
- 0xFDE7, 0x6D3D, 0xFDE8, 0x7FD5, 0xFDE9, 0x8208, 0xFDEA, 0x50D6, 0xFDEB, 0x51DE, 0xFDEC, 0x559C, 0xFDED, 0x566B, 0xFDEE, 0x56CD,
- 0xFDEF, 0x59EC, 0xFDF0, 0x5B09, 0xFDF1, 0x5E0C, 0xFDF2, 0x6199, 0xFDF3, 0x6198, 0xFDF4, 0x6231, 0xFDF5, 0x665E, 0xFDF6, 0x66E6,
- 0xFDF7, 0x7199, 0xFDF8, 0x71B9, 0xFDF9, 0x71BA, 0xFDFA, 0x72A7, 0xFDFB, 0x79A7, 0xFDFC, 0x7A00, 0xFDFD, 0x7FB2, 0xFDFE, 0x8A70,
- 0, 0
-};
-#endif
-
-#if FF_CODE_PAGE == 950 || FF_CODE_PAGE == 0 /* Traditional Chinese */
-static const WCHAR uni2oem950[] = { /* Unicode --> Big5 pairs */
- 0x00A7, 0xA1B1, 0x00AF, 0xA1C2, 0x00B0, 0xA258, 0x00B1, 0xA1D3, 0x00B7, 0xA150, 0x00D7, 0xA1D1, 0x00F7, 0xA1D2, 0x02C7, 0xA3BE,
- 0x02C9, 0xA3BC, 0x02CA, 0xA3BD, 0x02CB, 0xA3BF, 0x02CD, 0xA1C5, 0x02D9, 0xA3BB, 0x0391, 0xA344, 0x0392, 0xA345, 0x0393, 0xA346,
- 0x0394, 0xA347, 0x0395, 0xA348, 0x0396, 0xA349, 0x0397, 0xA34A, 0x0398, 0xA34B, 0x0399, 0xA34C, 0x039A, 0xA34D, 0x039B, 0xA34E,
- 0x039C, 0xA34F, 0x039D, 0xA350, 0x039E, 0xA351, 0x039F, 0xA352, 0x03A0, 0xA353, 0x03A1, 0xA354, 0x03A3, 0xA355, 0x03A4, 0xA356,
- 0x03A5, 0xA357, 0x03A6, 0xA358, 0x03A7, 0xA359, 0x03A8, 0xA35A, 0x03A9, 0xA35B, 0x03B1, 0xA35C, 0x03B2, 0xA35D, 0x03B3, 0xA35E,
- 0x03B4, 0xA35F, 0x03B5, 0xA360, 0x03B6, 0xA361, 0x03B7, 0xA362, 0x03B8, 0xA363, 0x03B9, 0xA364, 0x03BA, 0xA365, 0x03BB, 0xA366,
- 0x03BC, 0xA367, 0x03BD, 0xA368, 0x03BE, 0xA369, 0x03BF, 0xA36A, 0x03C0, 0xA36B, 0x03C1, 0xA36C, 0x03C3, 0xA36D, 0x03C4, 0xA36E,
- 0x03C5, 0xA36F, 0x03C6, 0xA370, 0x03C7, 0xA371, 0x03C8, 0xA372, 0x03C9, 0xA373, 0x2013, 0xA156, 0x2014, 0xA158, 0x2018, 0xA1A5,
- 0x2019, 0xA1A6, 0x201C, 0xA1A7, 0x201D, 0xA1A8, 0x2025, 0xA14C, 0x2026, 0xA14B, 0x2027, 0xA145, 0x2032, 0xA1AC, 0x2035, 0xA1AB,
- 0x203B, 0xA1B0, 0x20AC, 0xA3E1, 0x2103, 0xA24A, 0x2105, 0xA1C1, 0x2109, 0xA24B, 0x2160, 0xA2B9, 0x2161, 0xA2BA, 0x2162, 0xA2BB,
- 0x2163, 0xA2BC, 0x2164, 0xA2BD, 0x2165, 0xA2BE, 0x2166, 0xA2BF, 0x2167, 0xA2C0, 0x2168, 0xA2C1, 0x2169, 0xA2C2, 0x2190, 0xA1F6,
- 0x2191, 0xA1F4, 0x2192, 0xA1F7, 0x2193, 0xA1F5, 0x2196, 0xA1F8, 0x2197, 0xA1F9, 0x2198, 0xA1FB, 0x2199, 0xA1FA, 0x2215, 0xA241,
- 0x221A, 0xA1D4, 0x221E, 0xA1DB, 0x221F, 0xA1E8, 0x2220, 0xA1E7, 0x2223, 0xA1FD, 0x2225, 0xA1FC, 0x2229, 0xA1E4, 0x222A, 0xA1E5,
- 0x222B, 0xA1EC, 0x222E, 0xA1ED, 0x2234, 0xA1EF, 0x2235, 0xA1EE, 0x2252, 0xA1DC, 0x2260, 0xA1DA, 0x2261, 0xA1DD, 0x2266, 0xA1D8,
- 0x2267, 0xA1D9, 0x2295, 0xA1F2, 0x2299, 0xA1F3, 0x22A5, 0xA1E6, 0x22BF, 0xA1E9, 0x2500, 0xA277, 0x2502, 0xA278, 0x250C, 0xA27A,
- 0x2510, 0xA27B, 0x2514, 0xA27C, 0x2518, 0xA27D, 0x251C, 0xA275, 0x2524, 0xA274, 0x252C, 0xA273, 0x2534, 0xA272, 0x253C, 0xA271,
- 0x2550, 0xA2A4, 0x2550, 0xF9F9, 0x2551, 0xF9F8, 0x2552, 0xF9E6, 0x2553, 0xF9EF, 0x2554, 0xF9DD, 0x2555, 0xF9E8, 0x2556, 0xF9F1,
- 0x2557, 0xF9DF, 0x2558, 0xF9EC, 0x2559, 0xF9F5, 0x255A, 0xF9E3, 0x255B, 0xF9EE, 0x255C, 0xF9F7, 0x255D, 0xF9E5, 0x255E, 0xA2A5,
- 0x255E, 0xF9E9, 0x255F, 0xF9F2, 0x2560, 0xF9E0, 0x2561, 0xA2A7, 0x2561, 0xF9EB, 0x2562, 0xF9F4, 0x2563, 0xF9E2, 0x2564, 0xF9E7,
- 0x2565, 0xF9F0, 0x2566, 0xF9DE, 0x2567, 0xF9ED, 0x2568, 0xF9F6, 0x2569, 0xF9E4, 0x256A, 0xA2A6, 0x256A, 0xF9EA, 0x256B, 0xF9F3,
- 0x256C, 0xF9E1, 0x256D, 0xA27E, 0x256D, 0xF9FA, 0x256E, 0xA2A1, 0x256E, 0xF9FB, 0x256F, 0xA2A3, 0x256F, 0xF9FD, 0x2570, 0xA2A2,
- 0x2570, 0xF9FC, 0x2571, 0xA2AC, 0x2572, 0xA2AD, 0x2573, 0xA2AE, 0x2574, 0xA15A, 0x2581, 0xA262, 0x2582, 0xA263, 0x2583, 0xA264,
- 0x2584, 0xA265, 0x2585, 0xA266, 0x2586, 0xA267, 0x2587, 0xA268, 0x2588, 0xA269, 0x2589, 0xA270, 0x258A, 0xA26F, 0x258B, 0xA26E,
- 0x258C, 0xA26D, 0x258D, 0xA26C, 0x258E, 0xA26B, 0x258F, 0xA26A, 0x2593, 0xF9FE, 0x2594, 0xA276, 0x2595, 0xA279, 0x25A0, 0xA1BD,
- 0x25A1, 0xA1BC, 0x25B2, 0xA1B6, 0x25B3, 0xA1B5, 0x25BC, 0xA1BF, 0x25BD, 0xA1BE, 0x25C6, 0xA1BB, 0x25C7, 0xA1BA, 0x25CB, 0xA1B3,
- 0x25CE, 0xA1B7, 0x25CF, 0xA1B4, 0x25E2, 0xA2A8, 0x25E3, 0xA2A9, 0x25E4, 0xA2AB, 0x25E5, 0xA2AA, 0x2605, 0xA1B9, 0x2606, 0xA1B8,
- 0x2640, 0xA1F0, 0x2642, 0xA1F1, 0x3000, 0xA140, 0x3001, 0xA142, 0x3002, 0xA143, 0x3003, 0xA1B2, 0x3008, 0xA171, 0x3009, 0xA172,
- 0x300A, 0xA16D, 0x300B, 0xA16E, 0x300C, 0xA175, 0x300D, 0xA176, 0x300E, 0xA179, 0x300F, 0xA17A, 0x3010, 0xA169, 0x3011, 0xA16A,
- 0x3012, 0xA245, 0x3014, 0xA165, 0x3015, 0xA166, 0x301D, 0xA1A9, 0x301E, 0xA1AA, 0x3021, 0xA2C3, 0x3022, 0xA2C4, 0x3023, 0xA2C5,
- 0x3024, 0xA2C6, 0x3025, 0xA2C7, 0x3026, 0xA2C8, 0x3027, 0xA2C9, 0x3028, 0xA2CA, 0x3029, 0xA2CB, 0x3105, 0xA374, 0x3106, 0xA375,
- 0x3107, 0xA376, 0x3108, 0xA377, 0x3109, 0xA378, 0x310A, 0xA379, 0x310B, 0xA37A, 0x310C, 0xA37B, 0x310D, 0xA37C, 0x310E, 0xA37D,
- 0x310F, 0xA37E, 0x3110, 0xA3A1, 0x3111, 0xA3A2, 0x3112, 0xA3A3, 0x3113, 0xA3A4, 0x3114, 0xA3A5, 0x3115, 0xA3A6, 0x3116, 0xA3A7,
- 0x3117, 0xA3A8, 0x3118, 0xA3A9, 0x3119, 0xA3AA, 0x311A, 0xA3AB, 0x311B, 0xA3AC, 0x311C, 0xA3AD, 0x311D, 0xA3AE, 0x311E, 0xA3AF,
- 0x311F, 0xA3B0, 0x3120, 0xA3B1, 0x3121, 0xA3B2, 0x3122, 0xA3B3, 0x3123, 0xA3B4, 0x3124, 0xA3B5, 0x3125, 0xA3B6, 0x3126, 0xA3B7,
- 0x3127, 0xA3B8, 0x3128, 0xA3B9, 0x3129, 0xA3BA, 0x32A3, 0xA1C0, 0x338E, 0xA255, 0x338F, 0xA256, 0x339C, 0xA250, 0x339D, 0xA251,
- 0x339E, 0xA252, 0x33A1, 0xA254, 0x33C4, 0xA257, 0x33CE, 0xA253, 0x33D1, 0xA1EB, 0x33D2, 0xA1EA, 0x33D5, 0xA24F, 0x4E00, 0xA440,
- 0x4E01, 0xA442, 0x4E03, 0xA443, 0x4E07, 0xC945, 0x4E08, 0xA456, 0x4E09, 0xA454, 0x4E0A, 0xA457, 0x4E0B, 0xA455, 0x4E0C, 0xC946,
- 0x4E0D, 0xA4A3, 0x4E0E, 0xC94F, 0x4E0F, 0xC94D, 0x4E10, 0xA4A2, 0x4E11, 0xA4A1, 0x4E14, 0xA542, 0x4E15, 0xA541, 0x4E16, 0xA540,
- 0x4E18, 0xA543, 0x4E19, 0xA4FE, 0x4E1E, 0xA5E0, 0x4E1F, 0xA5E1, 0x4E26, 0xA8C3, 0x4E2B, 0xA458, 0x4E2D, 0xA4A4, 0x4E2E, 0xC950,
- 0x4E30, 0xA4A5, 0x4E31, 0xC963, 0x4E32, 0xA6EA, 0x4E33, 0xCBB1, 0x4E38, 0xA459, 0x4E39, 0xA4A6, 0x4E3B, 0xA544, 0x4E3C, 0xC964,
- 0x4E42, 0xC940, 0x4E43, 0xA444, 0x4E45, 0xA45B, 0x4E47, 0xC947, 0x4E48, 0xA45C, 0x4E4B, 0xA4A7, 0x4E4D, 0xA545, 0x4E4E, 0xA547,
- 0x4E4F, 0xA546, 0x4E52, 0xA5E2, 0x4E53, 0xA5E3, 0x4E56, 0xA8C4, 0x4E58, 0xADBC, 0x4E59, 0xA441, 0x4E5C, 0xC941, 0x4E5D, 0xA445,
- 0x4E5E, 0xA45E, 0x4E5F, 0xA45D, 0x4E69, 0xA5E4, 0x4E73, 0xA8C5, 0x4E7E, 0xB0AE, 0x4E7F, 0xD44B, 0x4E82, 0xB6C3, 0x4E83, 0xDCB1,
- 0x4E84, 0xDCB2, 0x4E86, 0xA446, 0x4E88, 0xA4A9, 0x4E8B, 0xA8C6, 0x4E8C, 0xA447, 0x4E8D, 0xC948, 0x4E8E, 0xA45F, 0x4E91, 0xA4AA,
- 0x4E92, 0xA4AC, 0x4E93, 0xC951, 0x4E94, 0xA4AD, 0x4E95, 0xA4AB, 0x4E99, 0xA5E5, 0x4E9B, 0xA8C7, 0x4E9E, 0xA8C8, 0x4E9F, 0xAB45,
- 0x4EA1, 0xA460, 0x4EA2, 0xA4AE, 0x4EA4, 0xA5E6, 0x4EA5, 0xA5E8, 0x4EA6, 0xA5E7, 0x4EA8, 0xA6EB, 0x4EAB, 0xA8C9, 0x4EAC, 0xA8CA,
- 0x4EAD, 0xAB46, 0x4EAE, 0xAB47, 0x4EB3, 0xADBD, 0x4EB6, 0xDCB3, 0x4EB9, 0xF6D6, 0x4EBA, 0xA448, 0x4EC0, 0xA4B0, 0x4EC1, 0xA4AF,
- 0x4EC2, 0xC952, 0x4EC3, 0xA4B1, 0x4EC4, 0xA4B7, 0x4EC6, 0xA4B2, 0x4EC7, 0xA4B3, 0x4EC8, 0xC954, 0x4EC9, 0xC953, 0x4ECA, 0xA4B5,
- 0x4ECB, 0xA4B6, 0x4ECD, 0xA4B4, 0x4ED4, 0xA54A, 0x4ED5, 0xA54B, 0x4ED6, 0xA54C, 0x4ED7, 0xA54D, 0x4ED8, 0xA549, 0x4ED9, 0xA550,
- 0x4EDA, 0xC96A, 0x4EDC, 0xC966, 0x4EDD, 0xC969, 0x4EDE, 0xA551, 0x4EDF, 0xA561, 0x4EE1, 0xC968, 0x4EE3, 0xA54E, 0x4EE4, 0xA54F,
- 0x4EE5, 0xA548, 0x4EE8, 0xC965, 0x4EE9, 0xC967, 0x4EF0, 0xA5F5, 0x4EF1, 0xC9B0, 0x4EF2, 0xA5F2, 0x4EF3, 0xA5F6, 0x4EF4, 0xC9BA,
- 0x4EF5, 0xC9AE, 0x4EF6, 0xA5F3, 0x4EF7, 0xC9B2, 0x4EFB, 0xA5F4, 0x4EFD, 0xA5F7, 0x4EFF, 0xA5E9, 0x4F00, 0xC9B1, 0x4F01, 0xA5F8,
- 0x4F02, 0xC9B5, 0x4F04, 0xC9B9, 0x4F05, 0xC9B6, 0x4F08, 0xC9B3, 0x4F09, 0xA5EA, 0x4F0A, 0xA5EC, 0x4F0B, 0xA5F9, 0x4F0D, 0xA5EE,
- 0x4F0E, 0xC9AB, 0x4F0F, 0xA5F1, 0x4F10, 0xA5EF, 0x4F11, 0xA5F0, 0x4F12, 0xC9BB, 0x4F13, 0xC9B8, 0x4F14, 0xC9AF, 0x4F15, 0xA5ED,
- 0x4F18, 0xC9AC, 0x4F19, 0xA5EB, 0x4F1D, 0xC9B4, 0x4F22, 0xC9B7, 0x4F2C, 0xC9AD, 0x4F2D, 0xCA66, 0x4F2F, 0xA742, 0x4F30, 0xA6F4,
- 0x4F33, 0xCA67, 0x4F34, 0xA6F1, 0x4F36, 0xA744, 0x4F38, 0xA6F9, 0x4F3A, 0xA6F8, 0x4F3B, 0xCA5B, 0x4F3C, 0xA6FC, 0x4F3D, 0xA6F7,
- 0x4F3E, 0xCA60, 0x4F3F, 0xCA68, 0x4F41, 0xCA64, 0x4F43, 0xA6FA, 0x4F46, 0xA6FD, 0x4F47, 0xA6EE, 0x4F48, 0xA747, 0x4F49, 0xCA5D,
- 0x4F4C, 0xCBBD, 0x4F4D, 0xA6EC, 0x4F4E, 0xA743, 0x4F4F, 0xA6ED, 0x4F50, 0xA6F5, 0x4F51, 0xA6F6, 0x4F52, 0xCA62, 0x4F53, 0xCA5E,
- 0x4F54, 0xA6FB, 0x4F55, 0xA6F3, 0x4F56, 0xCA5A, 0x4F57, 0xA6EF, 0x4F58, 0xCA65, 0x4F59, 0xA745, 0x4F5A, 0xA748, 0x4F5B, 0xA6F2,
- 0x4F5C, 0xA740, 0x4F5D, 0xA746, 0x4F5E, 0xA6F0, 0x4F5F, 0xCA63, 0x4F60, 0xA741, 0x4F61, 0xCA69, 0x4F62, 0xCA5C, 0x4F63, 0xA6FE,
- 0x4F64, 0xCA5F, 0x4F67, 0xCA61, 0x4F69, 0xA8D8, 0x4F6A, 0xCBBF, 0x4F6B, 0xCBCB, 0x4F6C, 0xA8D0, 0x4F6E, 0xCBCC, 0x4F6F, 0xA8CB,
- 0x4F70, 0xA8D5, 0x4F73, 0xA8CE, 0x4F74, 0xCBB9, 0x4F75, 0xA8D6, 0x4F76, 0xCBB8, 0x4F77, 0xCBBC, 0x4F78, 0xCBC3, 0x4F79, 0xCBC1,
- 0x4F7A, 0xA8DE, 0x4F7B, 0xA8D9, 0x4F7C, 0xCBB3, 0x4F7D, 0xCBB5, 0x4F7E, 0xA8DB, 0x4F7F, 0xA8CF, 0x4F80, 0xCBB6, 0x4F81, 0xCBC2,
- 0x4F82, 0xCBC9, 0x4F83, 0xA8D4, 0x4F84, 0xCBBB, 0x4F85, 0xCBB4, 0x4F86, 0xA8D3, 0x4F87, 0xCBB7, 0x4F88, 0xA8D7, 0x4F89, 0xCBBA,
- 0x4F8B, 0xA8D2, 0x4F8D, 0xA8CD, 0x4F8F, 0xA8DC, 0x4F90, 0xCBC4, 0x4F91, 0xA8DD, 0x4F92, 0xCBC8, 0x4F94, 0xCBC6, 0x4F95, 0xCBCA,
- 0x4F96, 0xA8DA, 0x4F97, 0xCBBE, 0x4F98, 0xCBB2, 0x4F9A, 0xCBC0, 0x4F9B, 0xA8D1, 0x4F9C, 0xCBC5, 0x4F9D, 0xA8CC, 0x4F9E, 0xCBC7,
- 0x4FAE, 0xAB56, 0x4FAF, 0xAB4A, 0x4FB2, 0xCDE0, 0x4FB3, 0xCDE8, 0x4FB5, 0xAB49, 0x4FB6, 0xAB51, 0x4FB7, 0xAB5D, 0x4FB9, 0xCDEE,
- 0x4FBA, 0xCDEC, 0x4FBB, 0xCDE7, 0x4FBF, 0xAB4B, 0x4FC0, 0xCDED, 0x4FC1, 0xCDE3, 0x4FC2, 0xAB59, 0x4FC3, 0xAB50, 0x4FC4, 0xAB58,
- 0x4FC5, 0xCDDE, 0x4FC7, 0xCDEA, 0x4FC9, 0xCDE1, 0x4FCA, 0xAB54, 0x4FCB, 0xCDE2, 0x4FCD, 0xCDDD, 0x4FCE, 0xAB5B, 0x4FCF, 0xAB4E,
- 0x4FD0, 0xAB57, 0x4FD1, 0xAB4D, 0x4FD3, 0xCDDF, 0x4FD4, 0xCDE4, 0x4FD6, 0xCDEB, 0x4FD7, 0xAB55, 0x4FD8, 0xAB52, 0x4FD9, 0xCDE6,
- 0x4FDA, 0xAB5A, 0x4FDB, 0xCDE9, 0x4FDC, 0xCDE5, 0x4FDD, 0xAB4F, 0x4FDE, 0xAB5C, 0x4FDF, 0xAB53, 0x4FE0, 0xAB4C, 0x4FE1, 0xAB48,
- 0x4FEC, 0xCDEF, 0x4FEE, 0xADD7, 0x4FEF, 0xADC1, 0x4FF1, 0xADD1, 0x4FF3, 0xADD6, 0x4FF4, 0xD0D0, 0x4FF5, 0xD0CF, 0x4FF6, 0xD0D4,
- 0x4FF7, 0xD0D5, 0x4FF8, 0xADC4, 0x4FFA, 0xADCD, 0x4FFE, 0xADDA, 0x5000, 0xADCE, 0x5005, 0xD0C9, 0x5006, 0xADC7, 0x5007, 0xD0CA,
- 0x5009, 0xADDC, 0x500B, 0xADD3, 0x500C, 0xADBE, 0x500D, 0xADBF, 0x500E, 0xD0DD, 0x500F, 0xB0BF, 0x5011, 0xADCC, 0x5012, 0xADCB,
- 0x5013, 0xD0CB, 0x5014, 0xADCF, 0x5015, 0xD45B, 0x5016, 0xADC6, 0x5017, 0xD0D6, 0x5018, 0xADD5, 0x5019, 0xADD4, 0x501A, 0xADCA,
- 0x501B, 0xD0CE, 0x501C, 0xD0D7, 0x501E, 0xD0C8, 0x501F, 0xADC9, 0x5020, 0xD0D8, 0x5021, 0xADD2, 0x5022, 0xD0CC, 0x5023, 0xADC0,
- 0x5025, 0xADC3, 0x5026, 0xADC2, 0x5027, 0xD0D9, 0x5028, 0xADD0, 0x5029, 0xADC5, 0x502A, 0xADD9, 0x502B, 0xADDB, 0x502C, 0xD0D3,
- 0x502D, 0xADD8, 0x502F, 0xD0DB, 0x5030, 0xD0CD, 0x5031, 0xD0DC, 0x5033, 0xD0D1, 0x5035, 0xD0DA, 0x5037, 0xD0D2, 0x503C, 0xADC8,
- 0x5040, 0xD463, 0x5041, 0xD457, 0x5043, 0xB0B3, 0x5045, 0xD45C, 0x5046, 0xD462, 0x5047, 0xB0B2, 0x5048, 0xD455, 0x5049, 0xB0B6,
- 0x504A, 0xD459, 0x504B, 0xD452, 0x504C, 0xB0B4, 0x504D, 0xD456, 0x504E, 0xB0B9, 0x504F, 0xB0BE, 0x5051, 0xD467, 0x5053, 0xD451,
- 0x5055, 0xB0BA, 0x5057, 0xD466, 0x505A, 0xB0B5, 0x505B, 0xD458, 0x505C, 0xB0B1, 0x505D, 0xD453, 0x505E, 0xD44F, 0x505F, 0xD45D,
- 0x5060, 0xD450, 0x5061, 0xD44E, 0x5062, 0xD45A, 0x5063, 0xD460, 0x5064, 0xD461, 0x5065, 0xB0B7, 0x5068, 0xD85B, 0x5069, 0xD45E,
- 0x506A, 0xD44D, 0x506B, 0xD45F, 0x506D, 0xB0C1, 0x506E, 0xD464, 0x506F, 0xB0C0, 0x5070, 0xD44C, 0x5072, 0xD454, 0x5073, 0xD465,
- 0x5074, 0xB0BC, 0x5075, 0xB0BB, 0x5076, 0xB0B8, 0x5077, 0xB0BD, 0x507A, 0xB0AF, 0x507D, 0xB0B0, 0x5080, 0xB3C8, 0x5082, 0xD85E,
- 0x5083, 0xD857, 0x5085, 0xB3C5, 0x5087, 0xD85F, 0x508B, 0xD855, 0x508C, 0xD858, 0x508D, 0xB3C4, 0x508E, 0xD859, 0x5091, 0xB3C7,
- 0x5092, 0xD85D, 0x5094, 0xD853, 0x5095, 0xD852, 0x5096, 0xB3C9, 0x5098, 0xB3CA, 0x5099, 0xB3C6, 0x509A, 0xB3CB, 0x509B, 0xD851,
- 0x509C, 0xD85C, 0x509D, 0xD85A, 0x509E, 0xD854, 0x50A2, 0xB3C3, 0x50A3, 0xD856, 0x50AC, 0xB6CA, 0x50AD, 0xB6C4, 0x50AE, 0xDCB7,
- 0x50AF, 0xB6CD, 0x50B0, 0xDCBD, 0x50B1, 0xDCC0, 0x50B2, 0xB6C6, 0x50B3, 0xB6C7, 0x50B4, 0xDCBA, 0x50B5, 0xB6C5, 0x50B6, 0xDCC3,
- 0x50B7, 0xB6CB, 0x50B8, 0xDCC4, 0x50BA, 0xDCBF, 0x50BB, 0xB6CC, 0x50BD, 0xDCB4, 0x50BE, 0xB6C9, 0x50BF, 0xDCB5, 0x50C1, 0xDCBE,
- 0x50C2, 0xDCBC, 0x50C4, 0xDCB8, 0x50C5, 0xB6C8, 0x50C6, 0xDCB6, 0x50C7, 0xB6CE, 0x50C8, 0xDCBB, 0x50C9, 0xDCC2, 0x50CA, 0xDCB9,
- 0x50CB, 0xDCC1, 0x50CE, 0xB9B6, 0x50CF, 0xB9B3, 0x50D1, 0xB9B4, 0x50D3, 0xE0F9, 0x50D4, 0xE0F1, 0x50D5, 0xB9B2, 0x50D6, 0xB9AF,
- 0x50D7, 0xE0F2, 0x50DA, 0xB9B1, 0x50DB, 0xE0F5, 0x50DD, 0xE0F7, 0x50E0, 0xE0FE, 0x50E3, 0xE0FD, 0x50E4, 0xE0F8, 0x50E5, 0xB9AE,
- 0x50E6, 0xE0F0, 0x50E7, 0xB9AC, 0x50E8, 0xE0F3, 0x50E9, 0xB9B7, 0x50EA, 0xE0F6, 0x50EC, 0xE0FA, 0x50ED, 0xB9B0, 0x50EE, 0xB9AD,
- 0x50EF, 0xE0FC, 0x50F0, 0xE0FB, 0x50F1, 0xB9B5, 0x50F3, 0xE0F4, 0x50F5, 0xBBF8, 0x50F6, 0xE4EC, 0x50F8, 0xE4E9, 0x50F9, 0xBBF9,
- 0x50FB, 0xBBF7, 0x50FD, 0xE4F0, 0x50FE, 0xE4ED, 0x50FF, 0xE4E6, 0x5100, 0xBBF6, 0x5102, 0xBBFA, 0x5103, 0xE4E7, 0x5104, 0xBBF5,
- 0x5105, 0xBBFD, 0x5106, 0xE4EA, 0x5107, 0xE4EB, 0x5108, 0xBBFB, 0x5109, 0xBBFC, 0x510A, 0xE4F1, 0x510B, 0xE4EE, 0x510C, 0xE4EF,
- 0x5110, 0xBEAA, 0x5111, 0xE8F8, 0x5112, 0xBEA7, 0x5113, 0xE8F5, 0x5114, 0xBEA9, 0x5115, 0xBEAB, 0x5117, 0xE8F6, 0x5118, 0xBEA8,
- 0x511A, 0xE8F7, 0x511C, 0xE8F4, 0x511F, 0xC076, 0x5120, 0xECBD, 0x5121, 0xC077, 0x5122, 0xECBB, 0x5124, 0xECBC, 0x5125, 0xECBA,
- 0x5126, 0xECB9, 0x5129, 0xECBE, 0x512A, 0xC075, 0x512D, 0xEFB8, 0x512E, 0xEFB9, 0x5130, 0xE4E8, 0x5131, 0xEFB7, 0x5132, 0xC078,
- 0x5133, 0xC35F, 0x5134, 0xF1EB, 0x5135, 0xF1EC, 0x5137, 0xC4D7, 0x5138, 0xC4D8, 0x5139, 0xF5C1, 0x513A, 0xF5C0, 0x513B, 0xC56C,
- 0x513C, 0xC56B, 0x513D, 0xF7D0, 0x513F, 0xA449, 0x5140, 0xA461, 0x5141, 0xA4B9, 0x5143, 0xA4B8, 0x5144, 0xA553, 0x5145, 0xA552,
- 0x5146, 0xA5FC, 0x5147, 0xA5FB, 0x5148, 0xA5FD, 0x5149, 0xA5FA, 0x514B, 0xA74A, 0x514C, 0xA749, 0x514D, 0xA74B, 0x5152, 0xA8E0,
- 0x5154, 0xA8DF, 0x5155, 0xA8E1, 0x5157, 0xAB5E, 0x5159, 0xA259, 0x515A, 0xD0DE, 0x515B, 0xA25A, 0x515C, 0xB0C2, 0x515D, 0xA25C,
- 0x515E, 0xA25B, 0x515F, 0xD860, 0x5161, 0xA25D, 0x5162, 0xB9B8, 0x5163, 0xA25E, 0x5165, 0xA44A, 0x5167, 0xA4BA, 0x5168, 0xA5FE,
- 0x5169, 0xA8E2, 0x516B, 0xA44B, 0x516C, 0xA4BD, 0x516D, 0xA4BB, 0x516E, 0xA4BC, 0x5171, 0xA640, 0x5175, 0xA74C, 0x5176, 0xA8E4,
- 0x5177, 0xA8E3, 0x5178, 0xA8E5, 0x517C, 0xADDD, 0x5180, 0xBEAC, 0x5187, 0xC94E, 0x5189, 0xA554, 0x518A, 0xA555, 0x518D, 0xA641,
- 0x518F, 0xCA6A, 0x5191, 0xAB60, 0x5192, 0xAB5F, 0x5193, 0xD0E0, 0x5194, 0xD0DF, 0x5195, 0xB0C3, 0x5197, 0xA4BE, 0x5198, 0xC955,
- 0x519E, 0xCBCD, 0x51A0, 0xAB61, 0x51A2, 0xADE0, 0x51A4, 0xADDE, 0x51A5, 0xADDF, 0x51AA, 0xBEAD, 0x51AC, 0xA556, 0x51B0, 0xA642,
- 0x51B1, 0xC9BC, 0x51B6, 0xA74D, 0x51B7, 0xA74E, 0x51B9, 0xCA6B, 0x51BC, 0xCBCE, 0x51BD, 0xA8E6, 0x51BE, 0xCBCF, 0x51C4, 0xD0E2,
- 0x51C5, 0xD0E3, 0x51C6, 0xADE3, 0x51C8, 0xD0E4, 0x51CA, 0xD0E1, 0x51CB, 0xADE4, 0x51CC, 0xADE2, 0x51CD, 0xADE1, 0x51CE, 0xD0E5,
- 0x51D0, 0xD468, 0x51D4, 0xD861, 0x51D7, 0xDCC5, 0x51D8, 0xE140, 0x51DC, 0xBBFE, 0x51DD, 0xBEAE, 0x51DE, 0xE8F9, 0x51E0, 0xA44C,
- 0x51E1, 0xA45A, 0x51F0, 0xB0C4, 0x51F1, 0xB3CD, 0x51F3, 0xB9B9, 0x51F5, 0xC942, 0x51F6, 0xA4BF, 0x51F8, 0xA559, 0x51F9, 0xA557,
- 0x51FA, 0xA558, 0x51FD, 0xA8E7, 0x5200, 0xA44D, 0x5201, 0xA44E, 0x5203, 0xA462, 0x5206, 0xA4C0, 0x5207, 0xA4C1, 0x5208, 0xA4C2,
- 0x5209, 0xC9BE, 0x520A, 0xA55A, 0x520C, 0xC96B, 0x520E, 0xA646, 0x5210, 0xC9BF, 0x5211, 0xA644, 0x5212, 0xA645, 0x5213, 0xC9BD,
- 0x5216, 0xA647, 0x5217, 0xA643, 0x521C, 0xCA6C, 0x521D, 0xAAEC, 0x521E, 0xCA6D, 0x5221, 0xCA6E, 0x5224, 0xA750, 0x5225, 0xA74F,
- 0x5228, 0xA753, 0x5229, 0xA751, 0x522A, 0xA752, 0x522E, 0xA8ED, 0x5230, 0xA8EC, 0x5231, 0xCBD4, 0x5232, 0xCBD1, 0x5233, 0xCBD2,
- 0x5235, 0xCBD0, 0x5236, 0xA8EE, 0x5237, 0xA8EA, 0x5238, 0xA8E9, 0x523A, 0xA8EB, 0x523B, 0xA8E8, 0x5241, 0xA8EF, 0x5243, 0xAB63,
- 0x5244, 0xCDF0, 0x5246, 0xCBD3, 0x5247, 0xAB68, 0x5249, 0xCDF1, 0x524A, 0xAB64, 0x524B, 0xAB67, 0x524C, 0xAB66, 0x524D, 0xAB65,
- 0x524E, 0xAB62, 0x5252, 0xD0E8, 0x5254, 0xADE7, 0x5255, 0xD0EB, 0x5256, 0xADE5, 0x525A, 0xD0E7, 0x525B, 0xADE8, 0x525C, 0xADE6,
- 0x525D, 0xADE9, 0x525E, 0xD0E9, 0x525F, 0xD0EA, 0x5261, 0xD0E6, 0x5262, 0xD0EC, 0x5269, 0xB3D1, 0x526A, 0xB0C5, 0x526B, 0xD469,
- 0x526C, 0xD46B, 0x526D, 0xD46A, 0x526E, 0xD46C, 0x526F, 0xB0C6, 0x5272, 0xB3CE, 0x5274, 0xB3CF, 0x5275, 0xB3D0, 0x5277, 0xB6D0,
- 0x5278, 0xDCC7, 0x527A, 0xDCC6, 0x527B, 0xDCC8, 0x527C, 0xDCC9, 0x527D, 0xB6D1, 0x527F, 0xB6CF, 0x5280, 0xE141, 0x5281, 0xE142,
- 0x5282, 0xB9BB, 0x5283, 0xB9BA, 0x5284, 0xE35A, 0x5287, 0xBC40, 0x5288, 0xBC41, 0x5289, 0xBC42, 0x528A, 0xBC44, 0x528B, 0xE4F2,
- 0x528C, 0xE4F3, 0x528D, 0xBC43, 0x5291, 0xBEAF, 0x5293, 0xBEB0, 0x5296, 0xF1ED, 0x5297, 0xF5C3, 0x5298, 0xF5C2, 0x5299, 0xF7D1,
- 0x529B, 0xA44F, 0x529F, 0xA55C, 0x52A0, 0xA55B, 0x52A3, 0xA648, 0x52A6, 0xC9C0, 0x52A9, 0xA755, 0x52AA, 0xA756, 0x52AB, 0xA754,
- 0x52AC, 0xA757, 0x52AD, 0xCA6F, 0x52AE, 0xCA70, 0x52BB, 0xA8F1, 0x52BC, 0xCBD5, 0x52BE, 0xA8F0, 0x52C0, 0xCDF2, 0x52C1, 0xAB6C,
- 0x52C2, 0xCDF3, 0x52C3, 0xAB6B, 0x52C7, 0xAB69, 0x52C9, 0xAB6A, 0x52CD, 0xD0ED, 0x52D2, 0xB0C7, 0x52D3, 0xD46E, 0x52D5, 0xB0CA,
- 0x52D6, 0xD46D, 0x52D7, 0xB1E5, 0x52D8, 0xB0C9, 0x52D9, 0xB0C8, 0x52DB, 0xB3D4, 0x52DD, 0xB3D3, 0x52DE, 0xB3D2, 0x52DF, 0xB6D2,
- 0x52E2, 0xB6D5, 0x52E3, 0xB6D6, 0x52E4, 0xB6D4, 0x52E6, 0xB6D3, 0x52E9, 0xE143, 0x52EB, 0xE144, 0x52EF, 0xE4F5, 0x52F0, 0xBC45,
- 0x52F1, 0xE4F4, 0x52F3, 0xBEB1, 0x52F4, 0xECBF, 0x52F5, 0xC079, 0x52F7, 0xF1EE, 0x52F8, 0xC455, 0x52FA, 0xA463, 0x52FB, 0xA4C3,
- 0x52FC, 0xC956, 0x52FE, 0xA4C4, 0x52FF, 0xA4C5, 0x5305, 0xA55D, 0x5306, 0xA55E, 0x5308, 0xA649, 0x5309, 0xCA71, 0x530A, 0xCBD6,
- 0x530B, 0xCBD7, 0x530D, 0xAB6D, 0x530E, 0xD0EE, 0x530F, 0xB0CC, 0x5310, 0xB0CB, 0x5311, 0xD863, 0x5312, 0xD862, 0x5315, 0xA450,
- 0x5316, 0xA4C6, 0x5317, 0xA55F, 0x5319, 0xB0CD, 0x531A, 0xC943, 0x531C, 0xC96C, 0x531D, 0xA560, 0x531F, 0xC9C2, 0x5320, 0xA64B,
- 0x5321, 0xA64A, 0x5322, 0xC9C1, 0x5323, 0xA758, 0x532A, 0xADEA, 0x532D, 0xD46F, 0x532F, 0xB6D7, 0x5330, 0xE145, 0x5331, 0xB9BC,
- 0x5334, 0xE8FA, 0x5337, 0xF3FD, 0x5339, 0xA4C7, 0x533C, 0xCBD8, 0x533D, 0xCDF4, 0x533E, 0xB0D0, 0x533F, 0xB0CE, 0x5340, 0xB0CF,
- 0x5341, 0xA2CC, 0x5341, 0xA451, 0x5343, 0xA464, 0x5344, 0xA2CD, 0x5345, 0xA2CE, 0x5345, 0xA4CA, 0x5347, 0xA4C9, 0x5348, 0xA4C8,
- 0x5349, 0xA563, 0x534A, 0xA562, 0x534C, 0xC96D, 0x534D, 0xC9C3, 0x5351, 0xA8F5, 0x5352, 0xA8F2, 0x5353, 0xA8F4, 0x5354, 0xA8F3,
- 0x5357, 0xAB6E, 0x535A, 0xB3D5, 0x535C, 0xA452, 0x535E, 0xA4CB, 0x5360, 0xA565, 0x5361, 0xA564, 0x5363, 0xCA72, 0x5366, 0xA8F6,
- 0x536C, 0xC957, 0x536E, 0xA567, 0x536F, 0xA566, 0x5370, 0xA64C, 0x5371, 0xA64D, 0x5372, 0xCA73, 0x5373, 0xA759, 0x5375, 0xA75A,
- 0x5377, 0xA8F7, 0x5378, 0xA8F8, 0x5379, 0xA8F9, 0x537B, 0xAB6F, 0x537C, 0xCDF5, 0x537F, 0xADEB, 0x5382, 0xC944, 0x5384, 0xA4CC,
- 0x538A, 0xC9C4, 0x538E, 0xCA74, 0x538F, 0xCA75, 0x5392, 0xCBD9, 0x5394, 0xCBDA, 0x5396, 0xCDF7, 0x5397, 0xCDF6, 0x5398, 0xCDF9,
- 0x5399, 0xCDF8, 0x539A, 0xAB70, 0x539C, 0xD470, 0x539D, 0xADED, 0x539E, 0xD0EF, 0x539F, 0xADEC, 0x53A4, 0xD864, 0x53A5, 0xB3D6,
- 0x53A7, 0xD865, 0x53AC, 0xE146, 0x53AD, 0xB9BD, 0x53B2, 0xBC46, 0x53B4, 0xF1EF, 0x53B9, 0xC958, 0x53BB, 0xA568, 0x53C3, 0xB0D1,
- 0x53C8, 0xA453, 0x53C9, 0xA465, 0x53CA, 0xA4CE, 0x53CB, 0xA4CD, 0x53CD, 0xA4CF, 0x53D4, 0xA8FB, 0x53D6, 0xA8FA, 0x53D7, 0xA8FC,
- 0x53DB, 0xAB71, 0x53DF, 0xADEE, 0x53E1, 0xE8FB, 0x53E2, 0xC24F, 0x53E3, 0xA466, 0x53E4, 0xA56A, 0x53E5, 0xA579, 0x53E6, 0xA574,
- 0x53E8, 0xA56F, 0x53E9, 0xA56E, 0x53EA, 0xA575, 0x53EB, 0xA573, 0x53EC, 0xA56C, 0x53ED, 0xA57A, 0x53EE, 0xA56D, 0x53EF, 0xA569,
- 0x53F0, 0xA578, 0x53F1, 0xA577, 0x53F2, 0xA576, 0x53F3, 0xA56B, 0x53F5, 0xA572, 0x53F8, 0xA571, 0x53FB, 0xA57B, 0x53FC, 0xA570,
- 0x5401, 0xA653, 0x5403, 0xA659, 0x5404, 0xA655, 0x5406, 0xA65B, 0x5407, 0xC9C5, 0x5408, 0xA658, 0x5409, 0xA64E, 0x540A, 0xA651,
- 0x540B, 0xA654, 0x540C, 0xA650, 0x540D, 0xA657, 0x540E, 0xA65A, 0x540F, 0xA64F, 0x5410, 0xA652, 0x5411, 0xA656, 0x5412, 0xA65C,
- 0x5418, 0xCA7E, 0x5419, 0xCA7B, 0x541B, 0xA767, 0x541C, 0xCA7C, 0x541D, 0xA75B, 0x541E, 0xA75D, 0x541F, 0xA775, 0x5420, 0xA770,
- 0x5424, 0xCAA5, 0x5425, 0xCA7D, 0x5426, 0xA75F, 0x5427, 0xA761, 0x5428, 0xCAA4, 0x5429, 0xA768, 0x542A, 0xCA78, 0x542B, 0xA774,
- 0x542C, 0xA776, 0x542D, 0xA75C, 0x542E, 0xA76D, 0x5430, 0xCA76, 0x5431, 0xA773, 0x5433, 0xA764, 0x5435, 0xA76E, 0x5436, 0xA76F,
- 0x5437, 0xCA77, 0x5438, 0xA76C, 0x5439, 0xA76A, 0x543B, 0xA76B, 0x543C, 0xA771, 0x543D, 0xCAA1, 0x543E, 0xA75E, 0x5440, 0xA772,
- 0x5441, 0xCAA3, 0x5442, 0xA766, 0x5443, 0xA763, 0x5445, 0xCA7A, 0x5446, 0xA762, 0x5447, 0xCAA6, 0x5448, 0xA765, 0x544A, 0xA769,
- 0x544E, 0xA760, 0x544F, 0xCAA2, 0x5454, 0xCA79, 0x5460, 0xCBEB, 0x5461, 0xCBEA, 0x5462, 0xA94F, 0x5463, 0xCBED, 0x5464, 0xCBEF,
- 0x5465, 0xCBE4, 0x5466, 0xCBE7, 0x5467, 0xCBEE, 0x5468, 0xA950, 0x546B, 0xCBE1, 0x546C, 0xCBE5, 0x546F, 0xCBE9, 0x5470, 0xCE49,
- 0x5471, 0xA94B, 0x5472, 0xCE4D, 0x5473, 0xA8FD, 0x5474, 0xCBE6, 0x5475, 0xA8FE, 0x5476, 0xA94C, 0x5477, 0xA945, 0x5478, 0xA941,
- 0x547A, 0xCBE2, 0x547B, 0xA944, 0x547C, 0xA949, 0x547D, 0xA952, 0x547E, 0xCBE3, 0x547F, 0xCBDC, 0x5480, 0xA943, 0x5481, 0xCBDD,
- 0x5482, 0xCBDF, 0x5484, 0xA946, 0x5486, 0xA948, 0x5487, 0xCBDB, 0x5488, 0xCBE0, 0x548B, 0xA951, 0x548C, 0xA94D, 0x548D, 0xCBE8,
- 0x548E, 0xA953, 0x5490, 0xA94A, 0x5491, 0xCBDE, 0x5492, 0xA947, 0x5495, 0xA942, 0x5496, 0xA940, 0x5498, 0xCBEC, 0x549A, 0xA94E,
- 0x54A0, 0xCE48, 0x54A1, 0xCDFB, 0x54A2, 0xCE4B, 0x54A5, 0xCDFD, 0x54A6, 0xAB78, 0x54A7, 0xABA8, 0x54A8, 0xAB74, 0x54A9, 0xABA7,
- 0x54AA, 0xAB7D, 0x54AB, 0xABA4, 0x54AC, 0xAB72, 0x54AD, 0xCDFC, 0x54AE, 0xCE43, 0x54AF, 0xABA3, 0x54B0, 0xCE4F, 0x54B1, 0xABA5,
- 0x54B3, 0xAB79, 0x54B6, 0xCE45, 0x54B7, 0xCE42, 0x54B8, 0xAB77, 0x54BA, 0xCDFA, 0x54BB, 0xABA6, 0x54BC, 0xCE4A, 0x54BD, 0xAB7C,
- 0x54BE, 0xCE4C, 0x54BF, 0xABA9, 0x54C0, 0xAB73, 0x54C1, 0xAB7E, 0x54C2, 0xAB7B, 0x54C3, 0xCE40, 0x54C4, 0xABA1, 0x54C5, 0xCE46,
- 0x54C6, 0xCE47, 0x54C7, 0xAB7A, 0x54C8, 0xABA2, 0x54C9, 0xAB76, 0x54CE, 0xAB75, 0x54CF, 0xCDFE, 0x54D6, 0xCE44, 0x54DE, 0xCE4E,
- 0x54E0, 0xD144, 0x54E1, 0xADFB, 0x54E2, 0xD0F1, 0x54E4, 0xD0F6, 0x54E5, 0xADF4, 0x54E6, 0xAE40, 0x54E7, 0xD0F4, 0x54E8, 0xADEF,
- 0x54E9, 0xADF9, 0x54EA, 0xADFE, 0x54EB, 0xD0FB, 0x54ED, 0xADFA, 0x54EE, 0xADFD, 0x54F1, 0xD0FE, 0x54F2, 0xADF5, 0x54F3, 0xD0F5,
- 0x54F7, 0xD142, 0x54F8, 0xD143, 0x54FA, 0xADF7, 0x54FB, 0xD141, 0x54FC, 0xADF3, 0x54FD, 0xAE43, 0x54FF, 0xD0F8, 0x5501, 0xADF1,
- 0x5503, 0xD146, 0x5504, 0xD0F9, 0x5505, 0xD0FD, 0x5506, 0xADF6, 0x5507, 0xAE42, 0x5508, 0xD0FA, 0x5509, 0xADFC, 0x550A, 0xD140,
- 0x550B, 0xD147, 0x550C, 0xD4A1, 0x550E, 0xD145, 0x550F, 0xAE44, 0x5510, 0xADF0, 0x5511, 0xD0FC, 0x5512, 0xD0F3, 0x5514, 0xADF8,
- 0x5517, 0xD0F2, 0x551A, 0xD0F7, 0x5526, 0xD0F0, 0x5527, 0xAE41, 0x552A, 0xD477, 0x552C, 0xB0E4, 0x552D, 0xD4A7, 0x552E, 0xB0E2,
- 0x552F, 0xB0DF, 0x5530, 0xD47C, 0x5531, 0xB0DB, 0x5532, 0xD4A2, 0x5533, 0xB0E6, 0x5534, 0xD476, 0x5535, 0xD47B, 0x5536, 0xD47A,
- 0x5537, 0xADF2, 0x5538, 0xB0E1, 0x5539, 0xD4A5, 0x553B, 0xD4A8, 0x553C, 0xD473, 0x553E, 0xB3E8, 0x5540, 0xD4A9, 0x5541, 0xB0E7,
- 0x5543, 0xB0D9, 0x5544, 0xB0D6, 0x5545, 0xD47E, 0x5546, 0xB0D3, 0x5548, 0xD4A6, 0x554A, 0xB0DA, 0x554B, 0xD4AA, 0x554D, 0xD474,
- 0x554E, 0xD4A4, 0x554F, 0xB0DD, 0x5550, 0xD475, 0x5551, 0xD478, 0x5552, 0xD47D, 0x5555, 0xB0DE, 0x5556, 0xB0DC, 0x5557, 0xB0E8,
- 0x555C, 0xB0E3, 0x555E, 0xB0D7, 0x555F, 0xB1D2, 0x5561, 0xB0D8, 0x5562, 0xD479, 0x5563, 0xB0E5, 0x5564, 0xB0E0, 0x5565, 0xD4A3,
- 0x5566, 0xB0D5, 0x556A, 0xB0D4, 0x5575, 0xD471, 0x5576, 0xD472, 0x5577, 0xD86A, 0x557B, 0xB3D7, 0x557C, 0xB3DA, 0x557D, 0xD875,
- 0x557E, 0xB3EE, 0x557F, 0xD878, 0x5580, 0xB3D8, 0x5581, 0xD871, 0x5582, 0xB3DE, 0x5583, 0xB3E4, 0x5584, 0xB5BD, 0x5587, 0xB3E2,
- 0x5588, 0xD86E, 0x5589, 0xB3EF, 0x558A, 0xB3DB, 0x558B, 0xB3E3, 0x558C, 0xD876, 0x558D, 0xDCD7, 0x558E, 0xD87B, 0x558F, 0xD86F,
- 0x5591, 0xD866, 0x5592, 0xD873, 0x5593, 0xD86D, 0x5594, 0xB3E1, 0x5595, 0xD879, 0x5598, 0xB3DD, 0x5599, 0xB3F1, 0x559A, 0xB3EA,
- 0x559C, 0xB3DF, 0x559D, 0xB3DC, 0x559F, 0xB3E7, 0x55A1, 0xD87A, 0x55A2, 0xD86C, 0x55A3, 0xD872, 0x55A4, 0xD874, 0x55A5, 0xD868,
- 0x55A6, 0xD877, 0x55A7, 0xB3D9, 0x55A8, 0xD867, 0x55AA, 0xB3E0, 0x55AB, 0xB3F0, 0x55AC, 0xB3EC, 0x55AD, 0xD869, 0x55AE, 0xB3E6,
- 0x55B1, 0xB3ED, 0x55B2, 0xB3E9, 0x55B3, 0xB3E5, 0x55B5, 0xD870, 0x55BB, 0xB3EB, 0x55BF, 0xDCD5, 0x55C0, 0xDCD1, 0x55C2, 0xDCE0,
- 0x55C3, 0xDCCA, 0x55C4, 0xDCD3, 0x55C5, 0xB6E5, 0x55C6, 0xB6E6, 0x55C7, 0xB6DE, 0x55C8, 0xDCDC, 0x55C9, 0xB6E8, 0x55CA, 0xDCCF,
- 0x55CB, 0xDCCE, 0x55CC, 0xDCCC, 0x55CD, 0xDCDE, 0x55CE, 0xB6DC, 0x55CF, 0xDCD8, 0x55D0, 0xDCCD, 0x55D1, 0xB6DF, 0x55D2, 0xDCD6,
- 0x55D3, 0xB6DA, 0x55D4, 0xDCD2, 0x55D5, 0xDCD9, 0x55D6, 0xDCDB, 0x55D9, 0xDCDF, 0x55DA, 0xB6E3, 0x55DB, 0xDCCB, 0x55DC, 0xB6DD,
- 0x55DD, 0xDCD0, 0x55DF, 0xB6D8, 0x55E1, 0xB6E4, 0x55E2, 0xDCDA, 0x55E3, 0xB6E0, 0x55E4, 0xB6E1, 0x55E5, 0xB6E7, 0x55E6, 0xB6DB,
- 0x55E7, 0xA25F, 0x55E8, 0xB6D9, 0x55E9, 0xDCD4, 0x55EF, 0xB6E2, 0x55F2, 0xDCDD, 0x55F6, 0xB9CD, 0x55F7, 0xB9C8, 0x55F9, 0xE155,
- 0x55FA, 0xE151, 0x55FC, 0xE14B, 0x55FD, 0xB9C2, 0x55FE, 0xB9BE, 0x55FF, 0xE154, 0x5600, 0xB9BF, 0x5601, 0xE14E, 0x5602, 0xE150,
- 0x5604, 0xE153, 0x5606, 0xB9C4, 0x5608, 0xB9CB, 0x5609, 0xB9C5, 0x560C, 0xE149, 0x560D, 0xB9C6, 0x560E, 0xB9C7, 0x560F, 0xE14C,
- 0x5610, 0xB9CC, 0x5612, 0xE14A, 0x5613, 0xE14F, 0x5614, 0xB9C3, 0x5615, 0xE148, 0x5616, 0xB9C9, 0x5617, 0xB9C1, 0x561B, 0xB9C0,
- 0x561C, 0xE14D, 0x561D, 0xE152, 0x561F, 0xB9CA, 0x5627, 0xE147, 0x5629, 0xBC4D, 0x562A, 0xE547, 0x562C, 0xE544, 0x562E, 0xBC47,
- 0x562F, 0xBC53, 0x5630, 0xBC54, 0x5632, 0xBC4A, 0x5633, 0xE542, 0x5634, 0xBC4C, 0x5635, 0xE4F9, 0x5636, 0xBC52, 0x5638, 0xE546,
- 0x5639, 0xBC49, 0x563A, 0xE548, 0x563B, 0xBC48, 0x563D, 0xE543, 0x563E, 0xE545, 0x563F, 0xBC4B, 0x5640, 0xE541, 0x5641, 0xE4FA,
- 0x5642, 0xE4F7, 0x5645, 0xD86B, 0x5646, 0xE4FD, 0x5648, 0xE4F6, 0x5649, 0xE4FC, 0x564A, 0xE4FB, 0x564C, 0xE4F8, 0x564E, 0xBC4F,
- 0x5653, 0xBC4E, 0x5657, 0xBC50, 0x5658, 0xE4FE, 0x5659, 0xBEB2, 0x565A, 0xE540, 0x565E, 0xE945, 0x5660, 0xE8FD, 0x5662, 0xBEBE,
- 0x5663, 0xE942, 0x5664, 0xBEB6, 0x5665, 0xBEBA, 0x5666, 0xE941, 0x5668, 0xBEB9, 0x5669, 0xBEB5, 0x566A, 0xBEB8, 0x566B, 0xBEB3,
- 0x566C, 0xBEBD, 0x566D, 0xE943, 0x566E, 0xE8FE, 0x566F, 0xBEBC, 0x5670, 0xE8FC, 0x5671, 0xBEBB, 0x5672, 0xE944, 0x5673, 0xE940,
- 0x5674, 0xBC51, 0x5676, 0xBEBF, 0x5677, 0xE946, 0x5678, 0xBEB7, 0x5679, 0xBEB4, 0x567E, 0xECC6, 0x567F, 0xECC8, 0x5680, 0xC07B,
- 0x5681, 0xECC9, 0x5682, 0xECC7, 0x5683, 0xECC5, 0x5684, 0xECC4, 0x5685, 0xC07D, 0x5686, 0xECC3, 0x5687, 0xC07E, 0x568C, 0xECC1,
- 0x568D, 0xECC2, 0x568E, 0xC07A, 0x568F, 0xC0A1, 0x5690, 0xC07C, 0x5693, 0xECC0, 0x5695, 0xC250, 0x5697, 0xEFBC, 0x5698, 0xEFBA,
- 0x5699, 0xEFBF, 0x569A, 0xEFBD, 0x569C, 0xEFBB, 0x569D, 0xEFBE, 0x56A5, 0xC360, 0x56A6, 0xF1F2, 0x56A7, 0xF1F3, 0x56A8, 0xC456,
- 0x56AA, 0xF1F4, 0x56AB, 0xF1F0, 0x56AC, 0xF1F5, 0x56AD, 0xF1F1, 0x56AE, 0xC251, 0x56B2, 0xF3FE, 0x56B3, 0xF441, 0x56B4, 0xC459,
- 0x56B5, 0xF440, 0x56B6, 0xC458, 0x56B7, 0xC457, 0x56BC, 0xC45A, 0x56BD, 0xF5C5, 0x56BE, 0xF5C6, 0x56C0, 0xC4DA, 0x56C1, 0xC4D9,
- 0x56C2, 0xC4DB, 0x56C3, 0xF5C4, 0x56C5, 0xF6D8, 0x56C6, 0xF6D7, 0x56C8, 0xC56D, 0x56C9, 0xC56F, 0x56CA, 0xC56E, 0x56CB, 0xF6D9,
- 0x56CC, 0xC5C8, 0x56CD, 0xF8A6, 0x56D1, 0xC5F1, 0x56D3, 0xF8A5, 0x56D4, 0xF8EE, 0x56D7, 0xC949, 0x56DA, 0xA57D, 0x56DB, 0xA57C,
- 0x56DD, 0xA65F, 0x56DE, 0xA65E, 0x56DF, 0xC9C7, 0x56E0, 0xA65D, 0x56E1, 0xC9C6, 0x56E4, 0xA779, 0x56E5, 0xCAA9, 0x56E7, 0xCAA8,
- 0x56EA, 0xA777, 0x56EB, 0xA77A, 0x56EE, 0xCAA7, 0x56F0, 0xA778, 0x56F7, 0xCBF0, 0x56F9, 0xCBF1, 0x56FA, 0xA954, 0x56FF, 0xABAA,
- 0x5701, 0xD148, 0x5702, 0xD149, 0x5703, 0xAE45, 0x5704, 0xAE46, 0x5707, 0xD4AC, 0x5708, 0xB0E9, 0x5709, 0xB0EB, 0x570A, 0xD4AB,
- 0x570B, 0xB0EA, 0x570C, 0xD87C, 0x570D, 0xB3F2, 0x5712, 0xB6E9, 0x5713, 0xB6EA, 0x5714, 0xDCE1, 0x5716, 0xB9CF, 0x5718, 0xB9CE,
- 0x571A, 0xE549, 0x571B, 0xE948, 0x571C, 0xE947, 0x571E, 0xF96B, 0x571F, 0xA467, 0x5720, 0xC959, 0x5722, 0xC96E, 0x5723, 0xC96F,
- 0x5728, 0xA662, 0x5729, 0xA666, 0x572A, 0xC9C9, 0x572C, 0xA664, 0x572D, 0xA663, 0x572E, 0xC9C8, 0x572F, 0xA665, 0x5730, 0xA661,
- 0x5733, 0xA660, 0x5734, 0xC9CA, 0x573B, 0xA7A6, 0x573E, 0xA7A3, 0x5740, 0xA77D, 0x5741, 0xCAAA, 0x5745, 0xCAAB, 0x5747, 0xA7A1,
- 0x5749, 0xCAAD, 0x574A, 0xA77B, 0x574B, 0xCAAE, 0x574C, 0xCAAC, 0x574D, 0xA77E, 0x574E, 0xA7A2, 0x574F, 0xA7A5, 0x5750, 0xA7A4,
- 0x5751, 0xA77C, 0x5752, 0xCAAF, 0x5761, 0xA959, 0x5762, 0xCBFE, 0x5764, 0xA95B, 0x5766, 0xA95A, 0x5768, 0xCC40, 0x5769, 0xA958,
- 0x576A, 0xA957, 0x576B, 0xCBF5, 0x576D, 0xCBF4, 0x576F, 0xCBF2, 0x5770, 0xCBF7, 0x5771, 0xCBF6, 0x5772, 0xCBF3, 0x5773, 0xCBFC,
- 0x5774, 0xCBFD, 0x5775, 0xCBFA, 0x5776, 0xCBF8, 0x5777, 0xA956, 0x577B, 0xCBFB, 0x577C, 0xA95C, 0x577D, 0xCC41, 0x5780, 0xCBF9,
- 0x5782, 0xABAB, 0x5783, 0xA955, 0x578B, 0xABAC, 0x578C, 0xCE54, 0x578F, 0xCE5A, 0x5793, 0xABB2, 0x5794, 0xCE58, 0x5795, 0xCE5E,
- 0x5797, 0xCE55, 0x5798, 0xCE59, 0x5799, 0xCE5B, 0x579A, 0xCE5D, 0x579B, 0xCE57, 0x579D, 0xCE56, 0x579E, 0xCE51, 0x579F, 0xCE52,
- 0x57A0, 0xABAD, 0x57A2, 0xABAF, 0x57A3, 0xABAE, 0x57A4, 0xCE53, 0x57A5, 0xCE5C, 0x57AE, 0xABB1, 0x57B5, 0xCE50, 0x57B6, 0xD153,
- 0x57B8, 0xD152, 0x57B9, 0xD157, 0x57BA, 0xD14E, 0x57BC, 0xD151, 0x57BD, 0xD150, 0x57BF, 0xD154, 0x57C1, 0xD158, 0x57C2, 0xAE47,
- 0x57C3, 0xAE4A, 0x57C6, 0xD14F, 0x57C7, 0xD155, 0x57CB, 0xAE49, 0x57CC, 0xD14A, 0x57CE, 0xABB0, 0x57CF, 0xD4BA, 0x57D0, 0xD156,
- 0x57D2, 0xD14D, 0x57D4, 0xAE48, 0x57D5, 0xD14C, 0x57DC, 0xD4B1, 0x57DF, 0xB0EC, 0x57E0, 0xB0F0, 0x57E1, 0xD4C1, 0x57E2, 0xD4AF,
- 0x57E3, 0xD4BD, 0x57E4, 0xB0F1, 0x57E5, 0xD4BF, 0x57E7, 0xD4C5, 0x57E9, 0xD4C9, 0x57EC, 0xD4C0, 0x57ED, 0xD4B4, 0x57EE, 0xD4BC,
- 0x57F0, 0xD4CA, 0x57F1, 0xD4C8, 0x57F2, 0xD4BE, 0x57F3, 0xD4B9, 0x57F4, 0xD4B2, 0x57F5, 0xD8A6, 0x57F6, 0xD4B0, 0x57F7, 0xB0F5,
- 0x57F8, 0xD4B7, 0x57F9, 0xB0F6, 0x57FA, 0xB0F2, 0x57FB, 0xD4AD, 0x57FC, 0xD4C3, 0x57FD, 0xD4B5, 0x5800, 0xD4B3, 0x5801, 0xD4C6,
- 0x5802, 0xB0F3, 0x5804, 0xD4CC, 0x5805, 0xB0ED, 0x5806, 0xB0EF, 0x5807, 0xD4BB, 0x5808, 0xD4B6, 0x5809, 0xAE4B, 0x580A, 0xB0EE,
- 0x580B, 0xD4B8, 0x580C, 0xD4C7, 0x580D, 0xD4CB, 0x580E, 0xD4C2, 0x5810, 0xD4C4, 0x5814, 0xD4AE, 0x5819, 0xD8A1, 0x581B, 0xD8AA,
- 0x581C, 0xD8A9, 0x581D, 0xB3FA, 0x581E, 0xD8A2, 0x5820, 0xB3FB, 0x5821, 0xB3F9, 0x5823, 0xD8A4, 0x5824, 0xB3F6, 0x5825, 0xD8A8,
- 0x5827, 0xD8A3, 0x5828, 0xD8A5, 0x5829, 0xD87D, 0x582A, 0xB3F4, 0x582C, 0xD8B2, 0x582D, 0xD8B1, 0x582E, 0xD8AE, 0x582F, 0xB3F3,
- 0x5830, 0xB3F7, 0x5831, 0xB3F8, 0x5832, 0xD14B, 0x5833, 0xD8AB, 0x5834, 0xB3F5, 0x5835, 0xB0F4, 0x5836, 0xD8AD, 0x5837, 0xD87E,
- 0x5838, 0xD8B0, 0x5839, 0xD8AF, 0x583B, 0xD8B3, 0x583D, 0xDCEF, 0x583F, 0xD8AC, 0x5848, 0xD8A7, 0x5849, 0xDCE7, 0x584A, 0xB6F4,
- 0x584B, 0xB6F7, 0x584C, 0xB6F2, 0x584D, 0xDCE6, 0x584E, 0xDCEA, 0x584F, 0xDCE5, 0x5851, 0xB6EC, 0x5852, 0xB6F6, 0x5853, 0xDCE2,
- 0x5854, 0xB6F0, 0x5855, 0xDCE9, 0x5857, 0xB6EE, 0x5858, 0xB6ED, 0x5859, 0xDCEC, 0x585A, 0xB6EF, 0x585B, 0xDCEE, 0x585D, 0xDCEB,
- 0x585E, 0xB6EB, 0x5862, 0xB6F5, 0x5863, 0xDCF0, 0x5864, 0xDCE4, 0x5865, 0xDCED, 0x5868, 0xDCE3, 0x586B, 0xB6F1, 0x586D, 0xB6F3,
- 0x586F, 0xDCE8, 0x5871, 0xDCF1, 0x5874, 0xE15D, 0x5875, 0xB9D0, 0x5876, 0xE163, 0x5879, 0xB9D5, 0x587A, 0xE15F, 0x587B, 0xE166,
- 0x587C, 0xE157, 0x587D, 0xB9D7, 0x587E, 0xB9D1, 0x587F, 0xE15C, 0x5880, 0xBC55, 0x5881, 0xE15B, 0x5882, 0xE164, 0x5883, 0xB9D2,
- 0x5885, 0xB9D6, 0x5886, 0xE15A, 0x5887, 0xE160, 0x5888, 0xE165, 0x5889, 0xE156, 0x588A, 0xB9D4, 0x588B, 0xE15E, 0x588E, 0xE162,
- 0x588F, 0xE168, 0x5890, 0xE158, 0x5891, 0xE161, 0x5893, 0xB9D3, 0x5894, 0xE167, 0x5898, 0xE159, 0x589C, 0xBC59, 0x589D, 0xE54B,
- 0x589E, 0xBC57, 0x589F, 0xBC56, 0x58A0, 0xE54D, 0x58A1, 0xE552, 0x58A3, 0xE54E, 0x58A5, 0xE551, 0x58A6, 0xBC5C, 0x58A8, 0xBEA5,
- 0x58A9, 0xBC5B, 0x58AB, 0xE54A, 0x58AC, 0xE550, 0x58AE, 0xBC5A, 0x58AF, 0xE54F, 0x58B1, 0xE54C, 0x58B3, 0xBC58, 0x58BA, 0xE94D,
- 0x58BB, 0xF9D9, 0x58BC, 0xE94F, 0x58BD, 0xE94A, 0x58BE, 0xBEC1, 0x58BF, 0xE94C, 0x58C1, 0xBEC0, 0x58C2, 0xE94E, 0x58C5, 0xBEC3,
- 0x58C6, 0xE950, 0x58C7, 0xBEC2, 0x58C8, 0xE949, 0x58C9, 0xE94B, 0x58CE, 0xC0A5, 0x58CF, 0xECCC, 0x58D1, 0xC0A4, 0x58D2, 0xECCD,
- 0x58D3, 0xC0A3, 0x58D4, 0xECCB, 0x58D5, 0xC0A2, 0x58D6, 0xECCA, 0x58D8, 0xC253, 0x58D9, 0xC252, 0x58DA, 0xF1F6, 0x58DB, 0xF1F8,
- 0x58DD, 0xF1F7, 0x58DE, 0xC361, 0x58DF, 0xC362, 0x58E2, 0xC363, 0x58E3, 0xF442, 0x58E4, 0xC45B, 0x58E7, 0xF7D3, 0x58E8, 0xF7D2,
- 0x58E9, 0xC5F2, 0x58EB, 0xA468, 0x58EC, 0xA4D0, 0x58EF, 0xA7A7, 0x58F4, 0xCE5F, 0x58F9, 0xB3FC, 0x58FA, 0xB3FD, 0x58FC, 0xDCF2,
- 0x58FD, 0xB9D8, 0x58FE, 0xE169, 0x58FF, 0xE553, 0x5903, 0xC95A, 0x5906, 0xCAB0, 0x590C, 0xCC42, 0x590D, 0xCE60, 0x590E, 0xD159,
- 0x590F, 0xAE4C, 0x5912, 0xF1F9, 0x5914, 0xC4DC, 0x5915, 0xA469, 0x5916, 0xA57E, 0x5917, 0xC970, 0x5919, 0xA667, 0x591A, 0xA668,
- 0x591C, 0xA95D, 0x5920, 0xB0F7, 0x5922, 0xB9DA, 0x5924, 0xB9DB, 0x5925, 0xB9D9, 0x5927, 0xA46A, 0x5929, 0xA4D1, 0x592A, 0xA4D3,
- 0x592B, 0xA4D2, 0x592C, 0xC95B, 0x592D, 0xA4D4, 0x592E, 0xA5A1, 0x592F, 0xC971, 0x5931, 0xA5A2, 0x5937, 0xA669, 0x5938, 0xA66A,
- 0x593C, 0xC9CB, 0x593E, 0xA7A8, 0x5940, 0xCAB1, 0x5944, 0xA961, 0x5945, 0xCC43, 0x5947, 0xA95F, 0x5948, 0xA960, 0x5949, 0xA95E,
- 0x594A, 0xD15A, 0x594E, 0xABB6, 0x594F, 0xABB5, 0x5950, 0xABB7, 0x5951, 0xABB4, 0x5953, 0xCE61, 0x5954, 0xA962, 0x5955, 0xABB3,
- 0x5957, 0xAE4D, 0x5958, 0xAE4E, 0x595A, 0xAE4F, 0x595C, 0xD4CD, 0x5960, 0xB3FE, 0x5961, 0xD8B4, 0x5962, 0xB0F8, 0x5967, 0xB6F8,
- 0x5969, 0xB9DD, 0x596A, 0xB9DC, 0x596B, 0xE16A, 0x596D, 0xBC5D, 0x596E, 0xBEC4, 0x5970, 0xEFC0, 0x5971, 0xF6DA, 0x5972, 0xF7D4,
- 0x5973, 0xA46B, 0x5974, 0xA5A3, 0x5976, 0xA5A4, 0x5977, 0xC9D1, 0x5978, 0xA66C, 0x5979, 0xA66F, 0x597B, 0xC9CF, 0x597C, 0xC9CD,
- 0x597D, 0xA66E, 0x597E, 0xC9D0, 0x597F, 0xC9D2, 0x5980, 0xC9CC, 0x5981, 0xA671, 0x5982, 0xA670, 0x5983, 0xA66D, 0x5984, 0xA66B,
- 0x5985, 0xC9CE, 0x598A, 0xA7B3, 0x598D, 0xA7B0, 0x598E, 0xCAB6, 0x598F, 0xCAB9, 0x5990, 0xCAB8, 0x5992, 0xA7AA, 0x5993, 0xA7B2,
- 0x5996, 0xA7AF, 0x5997, 0xCAB5, 0x5998, 0xCAB3, 0x5999, 0xA7AE, 0x599D, 0xA7A9, 0x599E, 0xA7AC, 0x59A0, 0xCAB4, 0x59A1, 0xCABB,
- 0x59A2, 0xCAB7, 0x59A3, 0xA7AD, 0x59A4, 0xA7B1, 0x59A5, 0xA7B4, 0x59A6, 0xCAB2, 0x59A7, 0xCABA, 0x59A8, 0xA7AB, 0x59AE, 0xA967,
- 0x59AF, 0xA96F, 0x59B1, 0xCC4F, 0x59B2, 0xCC48, 0x59B3, 0xA970, 0x59B4, 0xCC53, 0x59B5, 0xCC44, 0x59B6, 0xCC4B, 0x59B9, 0xA966,
- 0x59BA, 0xCC45, 0x59BB, 0xA964, 0x59BC, 0xCC4C, 0x59BD, 0xCC50, 0x59BE, 0xA963, 0x59C0, 0xCC51, 0x59C1, 0xCC4A, 0x59C3, 0xCC4D,
- 0x59C5, 0xA972, 0x59C6, 0xA969, 0x59C7, 0xCC54, 0x59C8, 0xCC52, 0x59CA, 0xA96E, 0x59CB, 0xA96C, 0x59CC, 0xCC49, 0x59CD, 0xA96B,
- 0x59CE, 0xCC47, 0x59CF, 0xCC46, 0x59D0, 0xA96A, 0x59D1, 0xA968, 0x59D2, 0xA971, 0x59D3, 0xA96D, 0x59D4, 0xA965, 0x59D6, 0xCC4E,
- 0x59D8, 0xABB9, 0x59DA, 0xABC0, 0x59DB, 0xCE6F, 0x59DC, 0xABB8, 0x59DD, 0xCE67, 0x59DE, 0xCE63, 0x59E0, 0xCE73, 0x59E1, 0xCE62,
- 0x59E3, 0xABBB, 0x59E4, 0xCE6C, 0x59E5, 0xABBE, 0x59E6, 0xABC1, 0x59E8, 0xABBC, 0x59E9, 0xCE70, 0x59EA, 0xABBF, 0x59EC, 0xAE56,
- 0x59ED, 0xCE76, 0x59EE, 0xCE64, 0x59F1, 0xCE66, 0x59F2, 0xCE6D, 0x59F3, 0xCE71, 0x59F4, 0xCE75, 0x59F5, 0xCE72, 0x59F6, 0xCE6B,
- 0x59F7, 0xCE6E, 0x59FA, 0xCE68, 0x59FB, 0xABC3, 0x59FC, 0xCE6A, 0x59FD, 0xCE69, 0x59FE, 0xCE74, 0x59FF, 0xABBA, 0x5A00, 0xCE65,
- 0x5A01, 0xABC2, 0x5A03, 0xABBD, 0x5A09, 0xAE5C, 0x5A0A, 0xD162, 0x5A0C, 0xAE5B, 0x5A0F, 0xD160, 0x5A11, 0xAE50, 0x5A13, 0xAE55,
- 0x5A15, 0xD15F, 0x5A16, 0xD15C, 0x5A17, 0xD161, 0x5A18, 0xAE51, 0x5A19, 0xD15B, 0x5A1B, 0xAE54, 0x5A1C, 0xAE52, 0x5A1E, 0xD163,
- 0x5A1F, 0xAE53, 0x5A20, 0xAE57, 0x5A23, 0xAE58, 0x5A25, 0xAE5A, 0x5A29, 0xAE59, 0x5A2D, 0xD15D, 0x5A2E, 0xD15E, 0x5A33, 0xD164,
- 0x5A35, 0xD4D4, 0x5A36, 0xB0F9, 0x5A37, 0xD8C2, 0x5A38, 0xD4D3, 0x5A39, 0xD4E6, 0x5A3C, 0xB140, 0x5A3E, 0xD4E4, 0x5A40, 0xB0FE,
- 0x5A41, 0xB0FA, 0x5A42, 0xD4ED, 0x5A43, 0xD4DD, 0x5A44, 0xD4E0, 0x5A46, 0xB143, 0x5A47, 0xD4EA, 0x5A48, 0xD4E2, 0x5A49, 0xB0FB,
- 0x5A4A, 0xB144, 0x5A4C, 0xD4E7, 0x5A4D, 0xD4E5, 0x5A50, 0xD4D6, 0x5A51, 0xD4EB, 0x5A52, 0xD4DF, 0x5A53, 0xD4DA, 0x5A55, 0xD4D0,
- 0x5A56, 0xD4EC, 0x5A57, 0xD4DC, 0x5A58, 0xD4CF, 0x5A5A, 0xB142, 0x5A5B, 0xD4E1, 0x5A5C, 0xD4EE, 0x5A5D, 0xD4DE, 0x5A5E, 0xD4D2,
- 0x5A5F, 0xD4D7, 0x5A60, 0xD4CE, 0x5A62, 0xB141, 0x5A64, 0xD4DB, 0x5A65, 0xD4D8, 0x5A66, 0xB0FC, 0x5A67, 0xD4D1, 0x5A69, 0xD4E9,
- 0x5A6A, 0xB0FD, 0x5A6C, 0xD4D9, 0x5A6D, 0xD4D5, 0x5A70, 0xD4E8, 0x5A77, 0xB440, 0x5A78, 0xD8BB, 0x5A7A, 0xD8B8, 0x5A7B, 0xD8C9,
- 0x5A7C, 0xD8BD, 0x5A7D, 0xD8CA, 0x5A7F, 0xB442, 0x5A83, 0xD8C6, 0x5A84, 0xD8C3, 0x5A8A, 0xD8C4, 0x5A8B, 0xD8C7, 0x5A8C, 0xD8CB,
- 0x5A8E, 0xD4E3, 0x5A8F, 0xD8CD, 0x5A90, 0xDD47, 0x5A92, 0xB443, 0x5A93, 0xD8CE, 0x5A94, 0xD8B6, 0x5A95, 0xD8C0, 0x5A97, 0xD8C5,
- 0x5A9A, 0xB441, 0x5A9B, 0xB444, 0x5A9C, 0xD8CC, 0x5A9D, 0xD8CF, 0x5A9E, 0xD8BA, 0x5A9F, 0xD8B7, 0x5AA2, 0xD8B9, 0x5AA5, 0xD8BE,
- 0x5AA6, 0xD8BC, 0x5AA7, 0xB445, 0x5AA9, 0xD8C8, 0x5AAC, 0xD8BF, 0x5AAE, 0xD8C1, 0x5AAF, 0xD8B5, 0x5AB0, 0xDCFA, 0x5AB1, 0xDCF8,
- 0x5AB2, 0xB742, 0x5AB3, 0xB740, 0x5AB4, 0xDD43, 0x5AB5, 0xDCF9, 0x5AB6, 0xDD44, 0x5AB7, 0xDD40, 0x5AB8, 0xDCF7, 0x5AB9, 0xDD46,
- 0x5ABA, 0xDCF6, 0x5ABB, 0xDCFD, 0x5ABC, 0xB6FE, 0x5ABD, 0xB6FD, 0x5ABE, 0xB6FC, 0x5ABF, 0xDCFB, 0x5AC0, 0xDD41, 0x5AC1, 0xB6F9,
- 0x5AC2, 0xB741, 0x5AC4, 0xDCF4, 0x5AC6, 0xDCFE, 0x5AC7, 0xDCF3, 0x5AC8, 0xDCFC, 0x5AC9, 0xB6FA, 0x5ACA, 0xDD42, 0x5ACB, 0xDCF5,
- 0x5ACC, 0xB6FB, 0x5ACD, 0xDD45, 0x5AD5, 0xE16E, 0x5AD6, 0xB9E2, 0x5AD7, 0xB9E1, 0x5AD8, 0xB9E3, 0x5AD9, 0xE17A, 0x5ADA, 0xE170,
- 0x5ADB, 0xE176, 0x5ADC, 0xE16B, 0x5ADD, 0xE179, 0x5ADE, 0xE178, 0x5ADF, 0xE17C, 0x5AE0, 0xE175, 0x5AE1, 0xB9DE, 0x5AE2, 0xE174,
- 0x5AE3, 0xB9E4, 0x5AE5, 0xE16D, 0x5AE6, 0xB9DF, 0x5AE8, 0xE17B, 0x5AE9, 0xB9E0, 0x5AEA, 0xE16F, 0x5AEB, 0xE172, 0x5AEC, 0xE177,
- 0x5AED, 0xE171, 0x5AEE, 0xE16C, 0x5AF3, 0xE173, 0x5AF4, 0xE555, 0x5AF5, 0xBC61, 0x5AF6, 0xE558, 0x5AF7, 0xE557, 0x5AF8, 0xE55A,
- 0x5AF9, 0xE55C, 0x5AFA, 0xF9DC, 0x5AFB, 0xBC5F, 0x5AFD, 0xE556, 0x5AFF, 0xE554, 0x5B01, 0xE55D, 0x5B02, 0xE55B, 0x5B03, 0xE559,
- 0x5B05, 0xE55F, 0x5B07, 0xE55E, 0x5B08, 0xBC63, 0x5B09, 0xBC5E, 0x5B0B, 0xBC60, 0x5B0C, 0xBC62, 0x5B0F, 0xE560, 0x5B10, 0xE957,
- 0x5B13, 0xE956, 0x5B14, 0xE955, 0x5B16, 0xE958, 0x5B17, 0xE951, 0x5B19, 0xE952, 0x5B1A, 0xE95A, 0x5B1B, 0xE953, 0x5B1D, 0xBEC5,
- 0x5B1E, 0xE95C, 0x5B20, 0xE95B, 0x5B21, 0xE954, 0x5B23, 0xECD1, 0x5B24, 0xC0A8, 0x5B25, 0xECCF, 0x5B26, 0xECD4, 0x5B27, 0xECD3,
- 0x5B28, 0xE959, 0x5B2A, 0xC0A7, 0x5B2C, 0xECD2, 0x5B2D, 0xECCE, 0x5B2E, 0xECD6, 0x5B2F, 0xECD5, 0x5B30, 0xC0A6, 0x5B32, 0xECD0,
- 0x5B34, 0xBEC6, 0x5B38, 0xC254, 0x5B3C, 0xEFC1, 0x5B3D, 0xF1FA, 0x5B3E, 0xF1FB, 0x5B3F, 0xF1FC, 0x5B40, 0xC45C, 0x5B43, 0xC45D,
- 0x5B45, 0xF443, 0x5B47, 0xF5C8, 0x5B48, 0xF5C7, 0x5B4B, 0xF6DB, 0x5B4C, 0xF6DC, 0x5B4D, 0xF7D5, 0x5B4E, 0xF8A7, 0x5B50, 0xA46C,
- 0x5B51, 0xA46D, 0x5B53, 0xA46E, 0x5B54, 0xA4D5, 0x5B55, 0xA5A5, 0x5B56, 0xC9D3, 0x5B57, 0xA672, 0x5B58, 0xA673, 0x5B5A, 0xA7B7,
- 0x5B5B, 0xA7B8, 0x5B5C, 0xA7B6, 0x5B5D, 0xA7B5, 0x5B5F, 0xA973, 0x5B62, 0xCC55, 0x5B63, 0xA975, 0x5B64, 0xA974, 0x5B65, 0xCC56,
- 0x5B69, 0xABC4, 0x5B6B, 0xAE5D, 0x5B6C, 0xD165, 0x5B6E, 0xD4F0, 0x5B70, 0xB145, 0x5B71, 0xB447, 0x5B72, 0xD4EF, 0x5B73, 0xB446,
- 0x5B75, 0xB9E5, 0x5B77, 0xE17D, 0x5B78, 0xBEC7, 0x5B7A, 0xC0A9, 0x5B7B, 0xECD7, 0x5B7D, 0xC45E, 0x5B7F, 0xC570, 0x5B81, 0xC972,
- 0x5B83, 0xA5A6, 0x5B84, 0xC973, 0x5B85, 0xA676, 0x5B87, 0xA674, 0x5B88, 0xA675, 0x5B89, 0xA677, 0x5B8B, 0xA7BA, 0x5B8C, 0xA7B9,
- 0x5B8E, 0xCABC, 0x5B8F, 0xA7BB, 0x5B92, 0xCABD, 0x5B93, 0xCC57, 0x5B95, 0xCC58, 0x5B97, 0xA976, 0x5B98, 0xA978, 0x5B99, 0xA97A,
- 0x5B9A, 0xA977, 0x5B9B, 0xA97B, 0x5B9C, 0xA979, 0x5BA2, 0xABC8, 0x5BA3, 0xABC5, 0x5BA4, 0xABC7, 0x5BA5, 0xABC9, 0x5BA6, 0xABC6,
- 0x5BA7, 0xD166, 0x5BA8, 0xCE77, 0x5BAC, 0xD168, 0x5BAD, 0xD167, 0x5BAE, 0xAE63, 0x5BB0, 0xAE5F, 0x5BB3, 0xAE60, 0x5BB4, 0xAE62,
- 0x5BB5, 0xAE64, 0x5BB6, 0xAE61, 0x5BB8, 0xAE66, 0x5BB9, 0xAE65, 0x5BBF, 0xB14A, 0x5BC0, 0xD4F2, 0x5BC1, 0xD4F1, 0x5BC2, 0xB149,
- 0x5BC4, 0xB148, 0x5BC5, 0xB147, 0x5BC6, 0xB14B, 0x5BC7, 0xB146, 0x5BCA, 0xD8D5, 0x5BCB, 0xD8D2, 0x5BCC, 0xB449, 0x5BCD, 0xD8D1,
- 0x5BCE, 0xD8D6, 0x5BD0, 0xB44B, 0x5BD1, 0xD8D4, 0x5BD2, 0xB448, 0x5BD3, 0xB44A, 0x5BD4, 0xD8D3, 0x5BD6, 0xDD48, 0x5BD8, 0xDD49,
- 0x5BD9, 0xDD4A, 0x5BDE, 0xB9E6, 0x5BDF, 0xB9EE, 0x5BE0, 0xE17E, 0x5BE1, 0xB9E8, 0x5BE2, 0xB9EC, 0x5BE3, 0xE1A1, 0x5BE4, 0xB9ED,
- 0x5BE5, 0xB9E9, 0x5BE6, 0xB9EA, 0x5BE7, 0xB9E7, 0x5BE8, 0xB9EB, 0x5BE9, 0xBC66, 0x5BEA, 0xD8D0, 0x5BEB, 0xBC67, 0x5BEC, 0xBC65,
- 0x5BEE, 0xBC64, 0x5BEF, 0xE95D, 0x5BF0, 0xBEC8, 0x5BF1, 0xECD8, 0x5BF2, 0xECD9, 0x5BF5, 0xC364, 0x5BF6, 0xC45F, 0x5BF8, 0xA46F,
- 0x5BFA, 0xA678, 0x5C01, 0xABCA, 0x5C03, 0xD169, 0x5C04, 0xAE67, 0x5C07, 0xB14E, 0x5C08, 0xB14D, 0x5C09, 0xB14C, 0x5C0A, 0xB44C,
- 0x5C0B, 0xB44D, 0x5C0C, 0xD8D7, 0x5C0D, 0xB9EF, 0x5C0E, 0xBEC9, 0x5C0F, 0xA470, 0x5C10, 0xC95C, 0x5C11, 0xA4D6, 0x5C12, 0xC974,
- 0x5C15, 0xC9D4, 0x5C16, 0xA679, 0x5C1A, 0xA97C, 0x5C1F, 0xDD4B, 0x5C22, 0xA471, 0x5C24, 0xA4D7, 0x5C25, 0xC9D5, 0x5C28, 0xCABE,
- 0x5C2A, 0xCABF, 0x5C2C, 0xA7BC, 0x5C30, 0xD8D8, 0x5C31, 0xB44E, 0x5C33, 0xDD4C, 0x5C37, 0xC0AA, 0x5C38, 0xA472, 0x5C39, 0xA4A8,
- 0x5C3A, 0xA4D8, 0x5C3B, 0xC975, 0x5C3C, 0xA5A7, 0x5C3E, 0xA7C0, 0x5C3F, 0xA7BF, 0x5C40, 0xA7BD, 0x5C41, 0xA7BE, 0x5C44, 0xCC59,
- 0x5C45, 0xA97E, 0x5C46, 0xA9A1, 0x5C47, 0xCC5A, 0x5C48, 0xA97D, 0x5C4B, 0xABCE, 0x5C4C, 0xCE78, 0x5C4D, 0xABCD, 0x5C4E, 0xABCB,
- 0x5C4F, 0xABCC, 0x5C50, 0xAE6A, 0x5C51, 0xAE68, 0x5C54, 0xD16B, 0x5C55, 0xAE69, 0x5C56, 0xD16A, 0x5C58, 0xAE5E, 0x5C59, 0xD4F3,
- 0x5C5C, 0xB150, 0x5C5D, 0xB151, 0x5C60, 0xB14F, 0x5C62, 0xB9F0, 0x5C63, 0xE1A2, 0x5C64, 0xBC68, 0x5C65, 0xBC69, 0x5C67, 0xE561,
- 0x5C68, 0xC0AB, 0x5C69, 0xEFC2, 0x5C6A, 0xEFC3, 0x5C6C, 0xC4DD, 0x5C6D, 0xF8A8, 0x5C6E, 0xC94B, 0x5C6F, 0xA4D9, 0x5C71, 0xA473,
- 0x5C73, 0xC977, 0x5C74, 0xC976, 0x5C79, 0xA67A, 0x5C7A, 0xC9D7, 0x5C7B, 0xC9D8, 0x5C7C, 0xC9D6, 0x5C7E, 0xC9D9, 0x5C86, 0xCAC7,
- 0x5C88, 0xCAC2, 0x5C89, 0xCAC4, 0x5C8A, 0xCAC6, 0x5C8B, 0xCAC3, 0x5C8C, 0xA7C4, 0x5C8D, 0xCAC0, 0x5C8F, 0xCAC1, 0x5C90, 0xA7C1,
- 0x5C91, 0xA7C2, 0x5C92, 0xCAC5, 0x5C93, 0xCAC8, 0x5C94, 0xA7C3, 0x5C95, 0xCAC9, 0x5C9D, 0xCC68, 0x5C9F, 0xCC62, 0x5CA0, 0xCC5D,
- 0x5CA1, 0xA9A3, 0x5CA2, 0xCC65, 0x5CA3, 0xCC63, 0x5CA4, 0xCC5C, 0x5CA5, 0xCC69, 0x5CA6, 0xCC6C, 0x5CA7, 0xCC67, 0x5CA8, 0xCC60,
- 0x5CA9, 0xA9A5, 0x5CAA, 0xCC66, 0x5CAB, 0xA9A6, 0x5CAC, 0xCC61, 0x5CAD, 0xCC64, 0x5CAE, 0xCC5B, 0x5CAF, 0xCC5F, 0x5CB0, 0xCC6B,
- 0x5CB1, 0xA9A7, 0x5CB3, 0xA9A8, 0x5CB5, 0xCC5E, 0x5CB6, 0xCC6A, 0x5CB7, 0xA9A2, 0x5CB8, 0xA9A4, 0x5CC6, 0xCEAB, 0x5CC7, 0xCEA4,
- 0x5CC8, 0xCEAA, 0x5CC9, 0xCEA3, 0x5CCA, 0xCEA5, 0x5CCB, 0xCE7D, 0x5CCC, 0xCE7B, 0x5CCE, 0xCEAC, 0x5CCF, 0xCEA9, 0x5CD0, 0xCE79,
- 0x5CD2, 0xABD0, 0x5CD3, 0xCEA7, 0x5CD4, 0xCEA8, 0x5CD6, 0xCEA6, 0x5CD7, 0xCE7C, 0x5CD8, 0xCE7A, 0x5CD9, 0xABCF, 0x5CDA, 0xCEA2,
- 0x5CDB, 0xCE7E, 0x5CDE, 0xCEA1, 0x5CDF, 0xCEAD, 0x5CE8, 0xAE6F, 0x5CEA, 0xAE6E, 0x5CEC, 0xD16C, 0x5CED, 0xAE6B, 0x5CEE, 0xD16E,
- 0x5CF0, 0xAE70, 0x5CF1, 0xD16F, 0x5CF4, 0xAE73, 0x5CF6, 0xAE71, 0x5CF7, 0xD170, 0x5CF8, 0xCEAE, 0x5CF9, 0xD172, 0x5CFB, 0xAE6D,
- 0x5CFD, 0xAE6C, 0x5CFF, 0xD16D, 0x5D00, 0xD171, 0x5D01, 0xAE72, 0x5D06, 0xB153, 0x5D07, 0xB152, 0x5D0B, 0xD4F5, 0x5D0C, 0xD4F9,
- 0x5D0D, 0xD4FB, 0x5D0E, 0xB154, 0x5D0F, 0xD4FE, 0x5D11, 0xB158, 0x5D12, 0xD541, 0x5D14, 0xB15A, 0x5D16, 0xB156, 0x5D17, 0xB15E,
- 0x5D19, 0xB15B, 0x5D1A, 0xD4F7, 0x5D1B, 0xB155, 0x5D1D, 0xD4F6, 0x5D1E, 0xD4F4, 0x5D1F, 0xD543, 0x5D20, 0xD4F8, 0x5D22, 0xB157,
- 0x5D23, 0xD542, 0x5D24, 0xB15C, 0x5D25, 0xD4FD, 0x5D26, 0xD4FC, 0x5D27, 0xB15D, 0x5D28, 0xD4FA, 0x5D29, 0xB159, 0x5D2E, 0xD544,
- 0x5D30, 0xD540, 0x5D31, 0xD8E7, 0x5D32, 0xD8EE, 0x5D33, 0xD8E3, 0x5D34, 0xB451, 0x5D35, 0xD8DF, 0x5D36, 0xD8EF, 0x5D37, 0xD8D9,
- 0x5D38, 0xD8EC, 0x5D39, 0xD8EA, 0x5D3A, 0xD8E4, 0x5D3C, 0xD8ED, 0x5D3D, 0xD8E6, 0x5D3F, 0xD8DE, 0x5D40, 0xD8F0, 0x5D41, 0xD8DC,
- 0x5D42, 0xD8E9, 0x5D43, 0xD8DA, 0x5D45, 0xD8F1, 0x5D47, 0xB452, 0x5D49, 0xD8EB, 0x5D4A, 0xDD4F, 0x5D4B, 0xD8DD, 0x5D4C, 0xB44F,
- 0x5D4E, 0xD8E1, 0x5D50, 0xB450, 0x5D51, 0xD8E0, 0x5D52, 0xD8E5, 0x5D55, 0xD8E2, 0x5D59, 0xD8E8, 0x5D5E, 0xDD53, 0x5D62, 0xDD56,
- 0x5D63, 0xDD4E, 0x5D65, 0xDD50, 0x5D67, 0xDD55, 0x5D68, 0xDD54, 0x5D69, 0xB743, 0x5D6B, 0xD8DB, 0x5D6C, 0xDD52, 0x5D6F, 0xB744,
- 0x5D71, 0xDD4D, 0x5D72, 0xDD51, 0x5D77, 0xE1A9, 0x5D79, 0xE1B0, 0x5D7A, 0xE1A7, 0x5D7C, 0xE1AE, 0x5D7D, 0xE1A5, 0x5D7E, 0xE1AD,
- 0x5D7F, 0xE1B1, 0x5D80, 0xE1A4, 0x5D81, 0xE1A8, 0x5D82, 0xE1A3, 0x5D84, 0xB9F1, 0x5D86, 0xE1A6, 0x5D87, 0xB9F2, 0x5D88, 0xE1AC,
- 0x5D89, 0xE1AB, 0x5D8A, 0xE1AA, 0x5D8D, 0xE1AF, 0x5D92, 0xE565, 0x5D93, 0xE567, 0x5D94, 0xBC6B, 0x5D95, 0xE568, 0x5D97, 0xE563,
- 0x5D99, 0xE562, 0x5D9A, 0xE56C, 0x5D9C, 0xE56A, 0x5D9D, 0xBC6A, 0x5D9E, 0xE56D, 0x5D9F, 0xE564, 0x5DA0, 0xE569, 0x5DA1, 0xE56B,
- 0x5DA2, 0xE566, 0x5DA7, 0xE961, 0x5DA8, 0xE966, 0x5DA9, 0xE960, 0x5DAA, 0xE965, 0x5DAC, 0xE95E, 0x5DAD, 0xE968, 0x5DAE, 0xE964,
- 0x5DAF, 0xE969, 0x5DB0, 0xE963, 0x5DB1, 0xE95F, 0x5DB2, 0xE967, 0x5DB4, 0xE96A, 0x5DB5, 0xE962, 0x5DB7, 0xECDA, 0x5DB8, 0xC0AF,
- 0x5DBA, 0xC0AD, 0x5DBC, 0xC0AC, 0x5DBD, 0xC0AE, 0x5DC0, 0xEFC4, 0x5DC2, 0xF172, 0x5DC3, 0xF1FD, 0x5DC6, 0xF444, 0x5DC7, 0xF445,
- 0x5DC9, 0xC460, 0x5DCB, 0xF5C9, 0x5DCD, 0xC4DE, 0x5DCF, 0xF5CA, 0x5DD1, 0xF6DE, 0x5DD2, 0xC572, 0x5DD4, 0xC571, 0x5DD5, 0xF6DD,
- 0x5DD6, 0xC5C9, 0x5DD8, 0xF7D6, 0x5DDD, 0xA474, 0x5DDE, 0xA67B, 0x5DDF, 0xC9DA, 0x5DE0, 0xCACA, 0x5DE1, 0xA8B5, 0x5DE2, 0xB15F,
- 0x5DE5, 0xA475, 0x5DE6, 0xA5AA, 0x5DE7, 0xA5A9, 0x5DE8, 0xA5A8, 0x5DEB, 0xA7C5, 0x5DEE, 0xAE74, 0x5DF0, 0xDD57, 0x5DF1, 0xA476,
- 0x5DF2, 0xA477, 0x5DF3, 0xA478, 0x5DF4, 0xA4DA, 0x5DF7, 0xABD1, 0x5DF9, 0xCEAF, 0x5DFD, 0xB453, 0x5DFE, 0xA479, 0x5DFF, 0xC95D,
- 0x5E02, 0xA5AB, 0x5E03, 0xA5AC, 0x5E04, 0xC978, 0x5E06, 0xA67C, 0x5E0A, 0xCACB, 0x5E0C, 0xA7C6, 0x5E0E, 0xCACC, 0x5E11, 0xA9AE,
- 0x5E14, 0xCC6E, 0x5E15, 0xA9AC, 0x5E16, 0xA9AB, 0x5E17, 0xCC6D, 0x5E18, 0xA9A9, 0x5E19, 0xCC6F, 0x5E1A, 0xA9AA, 0x5E1B, 0xA9AD,
- 0x5E1D, 0xABD2, 0x5E1F, 0xABD4, 0x5E20, 0xCEB3, 0x5E21, 0xCEB0, 0x5E22, 0xCEB1, 0x5E23, 0xCEB2, 0x5E24, 0xCEB4, 0x5E25, 0xABD3,
- 0x5E28, 0xD174, 0x5E29, 0xD173, 0x5E2B, 0xAE76, 0x5E2D, 0xAE75, 0x5E33, 0xB162, 0x5E34, 0xD546, 0x5E36, 0xB161, 0x5E37, 0xB163,
- 0x5E38, 0xB160, 0x5E3D, 0xB455, 0x5E3E, 0xD545, 0x5E40, 0xB456, 0x5E41, 0xD8F3, 0x5E43, 0xB457, 0x5E44, 0xD8F2, 0x5E45, 0xB454,
- 0x5E4A, 0xDD5A, 0x5E4B, 0xDD5C, 0x5E4C, 0xB745, 0x5E4D, 0xDD5B, 0x5E4E, 0xDD59, 0x5E4F, 0xDD58, 0x5E53, 0xE1B4, 0x5E54, 0xB9F7,
- 0x5E55, 0xB9F5, 0x5E57, 0xB9F6, 0x5E58, 0xE1B2, 0x5E59, 0xE1B3, 0x5E5B, 0xB9F3, 0x5E5C, 0xE571, 0x5E5D, 0xE56F, 0x5E5F, 0xBC6D,
- 0x5E60, 0xE570, 0x5E61, 0xBC6E, 0x5E62, 0xBC6C, 0x5E63, 0xB9F4, 0x5E66, 0xE96D, 0x5E67, 0xE96B, 0x5E68, 0xE96C, 0x5E69, 0xE56E,
- 0x5E6A, 0xECDC, 0x5E6B, 0xC0B0, 0x5E6C, 0xECDB, 0x5E6D, 0xEFC5, 0x5E6E, 0xEFC6, 0x5E6F, 0xE96E, 0x5E70, 0xF1FE, 0x5E72, 0xA47A,
- 0x5E73, 0xA5AD, 0x5E74, 0xA67E, 0x5E75, 0xC9DB, 0x5E76, 0xA67D, 0x5E78, 0xA9AF, 0x5E79, 0xB746, 0x5E7B, 0xA4DB, 0x5E7C, 0xA5AE,
- 0x5E7D, 0xABD5, 0x5E7E, 0xB458, 0x5E80, 0xC979, 0x5E82, 0xC97A, 0x5E84, 0xC9DC, 0x5E87, 0xA7C8, 0x5E88, 0xCAD0, 0x5E89, 0xCACE,
- 0x5E8A, 0xA7C9, 0x5E8B, 0xCACD, 0x5E8C, 0xCACF, 0x5E8D, 0xCAD1, 0x5E8F, 0xA7C7, 0x5E95, 0xA9B3, 0x5E96, 0xA9B4, 0x5E97, 0xA9B1,
- 0x5E9A, 0xA9B0, 0x5E9B, 0xCEB8, 0x5E9C, 0xA9B2, 0x5EA0, 0xABD6, 0x5EA2, 0xCEB7, 0x5EA3, 0xCEB9, 0x5EA4, 0xCEB6, 0x5EA5, 0xCEBA,
- 0x5EA6, 0xABD7, 0x5EA7, 0xAE79, 0x5EA8, 0xD175, 0x5EAA, 0xD177, 0x5EAB, 0xAE77, 0x5EAC, 0xD178, 0x5EAD, 0xAE78, 0x5EAE, 0xD176,
- 0x5EB0, 0xCEB5, 0x5EB1, 0xD547, 0x5EB2, 0xD54A, 0x5EB3, 0xD54B, 0x5EB4, 0xD548, 0x5EB5, 0xB167, 0x5EB6, 0xB166, 0x5EB7, 0xB164,
- 0x5EB8, 0xB165, 0x5EB9, 0xD549, 0x5EBE, 0xB168, 0x5EC1, 0xB45A, 0x5EC2, 0xB45B, 0x5EC4, 0xB45C, 0x5EC5, 0xDD5D, 0x5EC6, 0xDD5F,
- 0x5EC7, 0xDD61, 0x5EC8, 0xB748, 0x5EC9, 0xB747, 0x5ECA, 0xB459, 0x5ECB, 0xDD60, 0x5ECC, 0xDD5E, 0x5ECE, 0xE1B8, 0x5ED1, 0xE1B6,
- 0x5ED2, 0xE1BC, 0x5ED3, 0xB9F8, 0x5ED4, 0xE1BD, 0x5ED5, 0xE1BA, 0x5ED6, 0xB9F9, 0x5ED7, 0xE1B7, 0x5ED8, 0xE1B5, 0x5ED9, 0xE1BB,
- 0x5EDA, 0xBC70, 0x5EDB, 0xE573, 0x5EDC, 0xE1B9, 0x5EDD, 0xBC72, 0x5EDE, 0xE574, 0x5EDF, 0xBC71, 0x5EE0, 0xBC74, 0x5EE1, 0xE575,
- 0x5EE2, 0xBC6F, 0x5EE3, 0xBC73, 0x5EE5, 0xE973, 0x5EE6, 0xE971, 0x5EE7, 0xE970, 0x5EE8, 0xE972, 0x5EE9, 0xE96F, 0x5EEC, 0xC366,
- 0x5EEE, 0xF446, 0x5EEF, 0xF447, 0x5EF1, 0xF5CB, 0x5EF2, 0xF6DF, 0x5EF3, 0xC655, 0x5EF6, 0xA9B5, 0x5EF7, 0xA7CA, 0x5EFA, 0xABD8,
- 0x5EFE, 0xA47B, 0x5EFF, 0xA4DC, 0x5F01, 0xA5AF, 0x5F02, 0xC9DD, 0x5F04, 0xA7CB, 0x5F05, 0xCAD2, 0x5F07, 0xCEBB, 0x5F08, 0xABD9,
- 0x5F0A, 0xB9FA, 0x5F0B, 0xA47C, 0x5F0F, 0xA6A1, 0x5F12, 0xB749, 0x5F13, 0xA47D, 0x5F14, 0xA4DD, 0x5F15, 0xA4DE, 0x5F17, 0xA5B1,
- 0x5F18, 0xA5B0, 0x5F1A, 0xC9DE, 0x5F1B, 0xA6A2, 0x5F1D, 0xCAD3, 0x5F1F, 0xA7CC, 0x5F22, 0xCC71, 0x5F23, 0xCC72, 0x5F24, 0xCC73,
- 0x5F26, 0xA9B6, 0x5F27, 0xA9B7, 0x5F28, 0xCC70, 0x5F29, 0xA9B8, 0x5F2D, 0xABDA, 0x5F2E, 0xCEBC, 0x5F30, 0xD17A, 0x5F31, 0xAE7A,
- 0x5F33, 0xD179, 0x5F35, 0xB169, 0x5F36, 0xD54C, 0x5F37, 0xB16A, 0x5F38, 0xD54D, 0x5F3C, 0xB45D, 0x5F40, 0xDD62, 0x5F43, 0xE1BF,
- 0x5F44, 0xE1BE, 0x5F46, 0xB9FB, 0x5F48, 0xBC75, 0x5F49, 0xE576, 0x5F4A, 0xBECA, 0x5F4B, 0xE974, 0x5F4C, 0xC0B1, 0x5F4E, 0xC573,
- 0x5F4F, 0xF7D8, 0x5F54, 0xCC74, 0x5F56, 0xCEBD, 0x5F57, 0xB16B, 0x5F58, 0xD8F4, 0x5F59, 0xB74A, 0x5F5D, 0xC255, 0x5F62, 0xA7CE,
- 0x5F64, 0xA7CD, 0x5F65, 0xABDB, 0x5F67, 0xD17B, 0x5F69, 0xB16D, 0x5F6A, 0xB343, 0x5F6B, 0xB16E, 0x5F6C, 0xB16C, 0x5F6D, 0xB45E,
- 0x5F6F, 0xE1C0, 0x5F70, 0xB9FC, 0x5F71, 0xBC76, 0x5F73, 0xC94C, 0x5F74, 0xC9DF, 0x5F76, 0xCAD5, 0x5F77, 0xA7CF, 0x5F78, 0xCAD4,
- 0x5F79, 0xA7D0, 0x5F7C, 0xA9BC, 0x5F7D, 0xCC77, 0x5F7E, 0xCC76, 0x5F7F, 0xA9BB, 0x5F80, 0xA9B9, 0x5F81, 0xA9BA, 0x5F82, 0xCC75,
- 0x5F85, 0xABDD, 0x5F86, 0xCEBE, 0x5F87, 0xABE0, 0x5F88, 0xABDC, 0x5F89, 0xABE2, 0x5F8A, 0xABDE, 0x5F8B, 0xABDF, 0x5F8C, 0xABE1,
- 0x5F90, 0xAE7D, 0x5F91, 0xAE7C, 0x5F92, 0xAE7B, 0x5F96, 0xD54F, 0x5F97, 0xB16F, 0x5F98, 0xB172, 0x5F99, 0xB170, 0x5F9B, 0xD54E,
- 0x5F9C, 0xB175, 0x5F9E, 0xB171, 0x5F9F, 0xD550, 0x5FA0, 0xB174, 0x5FA1, 0xB173, 0x5FA5, 0xD8F6, 0x5FA6, 0xD8F5, 0x5FA8, 0xB461,
- 0x5FA9, 0xB45F, 0x5FAA, 0xB460, 0x5FAB, 0xD8F7, 0x5FAC, 0xB74B, 0x5FAD, 0xDD64, 0x5FAE, 0xB74C, 0x5FAF, 0xDD63, 0x5FB2, 0xE577,
- 0x5FB5, 0xBC78, 0x5FB6, 0xE1C1, 0x5FB7, 0xBC77, 0x5FB9, 0xB9FD, 0x5FBB, 0xECDE, 0x5FBC, 0xE975, 0x5FBD, 0xC0B2, 0x5FBE, 0xECDD,
- 0x5FBF, 0xF240, 0x5FC0, 0xF448, 0x5FC1, 0xF449, 0x5FC3, 0xA4DF, 0x5FC5, 0xA5B2, 0x5FC9, 0xC97B, 0x5FCC, 0xA7D2, 0x5FCD, 0xA7D4,
- 0x5FCF, 0xC9E2, 0x5FD0, 0xCAD8, 0x5FD1, 0xCAD7, 0x5FD2, 0xCAD6, 0x5FD4, 0xC9E1, 0x5FD5, 0xC9E0, 0x5FD6, 0xA6A4, 0x5FD7, 0xA7D3,
- 0x5FD8, 0xA7D1, 0x5FD9, 0xA6A3, 0x5FDD, 0xA9BD, 0x5FDE, 0xCC78, 0x5FE0, 0xA9BE, 0x5FE1, 0xCADD, 0x5FE3, 0xCADF, 0x5FE4, 0xCADE,
- 0x5FE5, 0xCC79, 0x5FE8, 0xCADA, 0x5FEA, 0xA7D8, 0x5FEB, 0xA7D6, 0x5FED, 0xCAD9, 0x5FEE, 0xCADB, 0x5FEF, 0xCAE1, 0x5FF1, 0xA7D5,
- 0x5FF3, 0xCADC, 0x5FF4, 0xCAE5, 0x5FF5, 0xA9C0, 0x5FF7, 0xCAE2, 0x5FF8, 0xA7D7, 0x5FFA, 0xCAE0, 0x5FFB, 0xCAE3, 0x5FFD, 0xA9BF,
- 0x5FFF, 0xA9C1, 0x6000, 0xCAE4, 0x6009, 0xCCAF, 0x600A, 0xCCA2, 0x600B, 0xCC7E, 0x600C, 0xCCAE, 0x600D, 0xCCA9, 0x600E, 0xABE7,
- 0x600F, 0xA9C2, 0x6010, 0xCCAA, 0x6011, 0xCCAD, 0x6012, 0xABE3, 0x6013, 0xCCAC, 0x6014, 0xA9C3, 0x6015, 0xA9C8, 0x6016, 0xA9C6,
- 0x6017, 0xCCA3, 0x6019, 0xCC7C, 0x601A, 0xCCA5, 0x601B, 0xA9CD, 0x601C, 0xCCB0, 0x601D, 0xABE4, 0x601E, 0xCCA6, 0x6020, 0xABE5,
- 0x6021, 0xA9C9, 0x6022, 0xCCA8, 0x6024, 0xCECD, 0x6025, 0xABE6, 0x6026, 0xCC7B, 0x6027, 0xA9CA, 0x6028, 0xABE8, 0x6029, 0xA9CB,
- 0x602A, 0xA9C7, 0x602B, 0xA9CC, 0x602C, 0xCCA7, 0x602D, 0xCC7A, 0x602E, 0xCCAB, 0x602F, 0xA9C4, 0x6032, 0xCC7D, 0x6033, 0xCCA4,
- 0x6034, 0xCCA1, 0x6035, 0xA9C5, 0x6037, 0xCEBF, 0x6039, 0xCEC0, 0x6040, 0xCECA, 0x6041, 0xD1A1, 0x6042, 0xCECB, 0x6043, 0xABEE,
- 0x6044, 0xCECE, 0x6045, 0xCEC4, 0x6046, 0xABED, 0x6047, 0xCEC6, 0x6049, 0xCEC7, 0x604C, 0xCEC9, 0x604D, 0xABE9, 0x6050, 0xAEA3,
- 0x6052, 0xF9DA, 0x6053, 0xCEC5, 0x6054, 0xCEC1, 0x6055, 0xAEA4, 0x6058, 0xCECF, 0x6059, 0xAE7E, 0x605A, 0xD17D, 0x605B, 0xCEC8,
- 0x605D, 0xD17C, 0x605E, 0xCEC3, 0x605F, 0xCECC, 0x6062, 0xABEC, 0x6063, 0xAEA1, 0x6064, 0xABF2, 0x6065, 0xAEA2, 0x6066, 0xCED0,
- 0x6067, 0xD17E, 0x6068, 0xABEB, 0x6069, 0xAEA6, 0x606A, 0xABF1, 0x606B, 0xABF0, 0x606C, 0xABEF, 0x606D, 0xAEA5, 0x606E, 0xCED1,
- 0x606F, 0xAEA7, 0x6070, 0xABEA, 0x6072, 0xCEC2, 0x607F, 0xB176, 0x6080, 0xD1A4, 0x6081, 0xD1A6, 0x6083, 0xD1A8, 0x6084, 0xAEA8,
- 0x6085, 0xAEAE, 0x6086, 0xD553, 0x6087, 0xD1AC, 0x6088, 0xD1A3, 0x6089, 0xB178, 0x608A, 0xD551, 0x608C, 0xAEAD, 0x608D, 0xAEAB,
- 0x608E, 0xD1AE, 0x6090, 0xD552, 0x6092, 0xD1A5, 0x6094, 0xAEAC, 0x6095, 0xD1A9, 0x6096, 0xAEAF, 0x6097, 0xD1AB, 0x609A, 0xAEAA,
- 0x609B, 0xD1AA, 0x609C, 0xD1AD, 0x609D, 0xD1A7, 0x609F, 0xAEA9, 0x60A0, 0xB179, 0x60A2, 0xD1A2, 0x60A3, 0xB177, 0x60A8, 0xB17A,
- 0x60B0, 0xD555, 0x60B1, 0xD55E, 0x60B2, 0xB464, 0x60B4, 0xB17C, 0x60B5, 0xB1A3, 0x60B6, 0xB465, 0x60B7, 0xD560, 0x60B8, 0xB1AA,
- 0x60B9, 0xD8F9, 0x60BA, 0xD556, 0x60BB, 0xB1A2, 0x60BC, 0xB1A5, 0x60BD, 0xB17E, 0x60BE, 0xD554, 0x60BF, 0xD562, 0x60C0, 0xD565,
- 0x60C1, 0xD949, 0x60C3, 0xD563, 0x60C4, 0xD8FD, 0x60C5, 0xB1A1, 0x60C6, 0xB1A8, 0x60C7, 0xB1AC, 0x60C8, 0xD55D, 0x60C9, 0xD8F8,
- 0x60CA, 0xD561, 0x60CB, 0xB17B, 0x60CC, 0xD8FA, 0x60CD, 0xD564, 0x60CE, 0xD8FC, 0x60CF, 0xD559, 0x60D1, 0xB462, 0x60D3, 0xD557,
- 0x60D4, 0xD558, 0x60D5, 0xB1A7, 0x60D8, 0xB1A6, 0x60D9, 0xD55B, 0x60DA, 0xB1AB, 0x60DB, 0xD55F, 0x60DC, 0xB1A4, 0x60DD, 0xD55C,
- 0x60DF, 0xB1A9, 0x60E0, 0xB466, 0x60E1, 0xB463, 0x60E2, 0xD8FB, 0x60E4, 0xD55A, 0x60E6, 0xB17D, 0x60F0, 0xB46B, 0x60F1, 0xB46F,
- 0x60F2, 0xD940, 0x60F3, 0xB751, 0x60F4, 0xB46D, 0x60F5, 0xD944, 0x60F6, 0xB471, 0x60F7, 0xDD65, 0x60F8, 0xD946, 0x60F9, 0xB753,
- 0x60FA, 0xB469, 0x60FB, 0xB46C, 0x60FC, 0xD947, 0x60FE, 0xD948, 0x60FF, 0xD94E, 0x6100, 0xB473, 0x6101, 0xB754, 0x6103, 0xD94A,
- 0x6104, 0xD94F, 0x6105, 0xD943, 0x6106, 0xB75E, 0x6108, 0xB755, 0x6109, 0xB472, 0x610A, 0xD941, 0x610B, 0xD950, 0x610D, 0xB75D,
- 0x610E, 0xB470, 0x610F, 0xB74E, 0x6110, 0xD94D, 0x6112, 0xB474, 0x6113, 0xD945, 0x6114, 0xD8FE, 0x6115, 0xB46A, 0x6116, 0xD942,
- 0x6118, 0xD94B, 0x611A, 0xB74D, 0x611B, 0xB752, 0x611C, 0xB467, 0x611D, 0xD94C, 0x611F, 0xB750, 0x6123, 0xB468, 0x6127, 0xB75C,
- 0x6128, 0xE1C3, 0x6129, 0xDD70, 0x612B, 0xDD68, 0x612C, 0xE1C2, 0x612E, 0xDD6C, 0x612F, 0xDD6E, 0x6132, 0xDD6B, 0x6134, 0xB75B,
- 0x6136, 0xDD6A, 0x6137, 0xB75F, 0x613B, 0xE1D2, 0x613E, 0xB75A, 0x613F, 0xBA40, 0x6140, 0xDD71, 0x6141, 0xE1C4, 0x6144, 0xB758,
- 0x6145, 0xDD69, 0x6146, 0xDD6D, 0x6147, 0xB9FE, 0x6148, 0xB74F, 0x6149, 0xDD66, 0x614A, 0xDD67, 0x614B, 0xBA41, 0x614C, 0xB757,
- 0x614D, 0xB759, 0x614E, 0xB756, 0x614F, 0xDD6F, 0x6152, 0xE1C8, 0x6153, 0xE1C9, 0x6154, 0xE1CE, 0x6155, 0xBC7D, 0x6156, 0xE1D5,
- 0x6158, 0xBA47, 0x615A, 0xBA46, 0x615B, 0xE1D0, 0x615D, 0xBC7C, 0x615E, 0xE1C5, 0x615F, 0xBA45, 0x6161, 0xE1D4, 0x6162, 0xBA43,
- 0x6163, 0xBA44, 0x6165, 0xE1D1, 0x6166, 0xE5AA, 0x6167, 0xBC7A, 0x6168, 0xB46E, 0x616A, 0xE1D3, 0x616B, 0xBCA3, 0x616C, 0xE1CB,
- 0x616E, 0xBC7B, 0x6170, 0xBCA2, 0x6171, 0xE1C6, 0x6172, 0xE1CA, 0x6173, 0xE1C7, 0x6174, 0xE1CD, 0x6175, 0xBA48, 0x6176, 0xBC79,
- 0x6177, 0xBA42, 0x6179, 0xE57A, 0x617A, 0xE1CF, 0x617C, 0xBCA1, 0x617E, 0xBCA4, 0x6180, 0xE1CC, 0x6182, 0xBC7E, 0x6183, 0xE579,
- 0x6189, 0xE57E, 0x618A, 0xBECE, 0x618B, 0xE578, 0x618C, 0xE9A3, 0x618D, 0xE5A9, 0x618E, 0xBCA8, 0x6190, 0xBCA6, 0x6191, 0xBECC,
- 0x6192, 0xE5A6, 0x6193, 0xE5A2, 0x6194, 0xBCAC, 0x6196, 0xE978, 0x619A, 0xBCAA, 0x619B, 0xE5A1, 0x619D, 0xE976, 0x619F, 0xE5A5,
- 0x61A1, 0xE5A8, 0x61A2, 0xE57D, 0x61A4, 0xBCAB, 0x61A7, 0xBCA5, 0x61A8, 0xE977, 0x61A9, 0xBECD, 0x61AA, 0xE5A7, 0x61AB, 0xBCA7,
- 0x61AC, 0xBCA9, 0x61AD, 0xE5A4, 0x61AE, 0xBCAD, 0x61AF, 0xE5A3, 0x61B0, 0xE57C, 0x61B1, 0xE57B, 0x61B2, 0xBECB, 0x61B3, 0xE5AB,
- 0x61B4, 0xE97A, 0x61B5, 0xECE0, 0x61B6, 0xBED0, 0x61B8, 0xE9A2, 0x61BA, 0xE97E, 0x61BC, 0xECE1, 0x61BE, 0xBED1, 0x61BF, 0xE9A1,
- 0x61C1, 0xE97C, 0x61C2, 0xC0B4, 0x61C3, 0xECDF, 0x61C5, 0xE979, 0x61C6, 0xE97B, 0x61C7, 0xC0B5, 0x61C8, 0xBED3, 0x61C9, 0xC0B3,
- 0x61CA, 0xBED2, 0x61CB, 0xC0B7, 0x61CC, 0xE97D, 0x61CD, 0xBECF, 0x61D6, 0xEFCF, 0x61D8, 0xEFC7, 0x61DE, 0xECE7, 0x61DF, 0xEFC8,
- 0x61E0, 0xECE3, 0x61E3, 0xC256, 0x61E4, 0xECE5, 0x61E5, 0xECE4, 0x61E6, 0xC0B6, 0x61E7, 0xECE2, 0x61E8, 0xECE6, 0x61E9, 0xEFD0,
- 0x61EA, 0xEFCC, 0x61EB, 0xEFCE, 0x61ED, 0xEFC9, 0x61EE, 0xEFCA, 0x61F0, 0xEFCD, 0x61F1, 0xEFCB, 0x61F2, 0xC367, 0x61F5, 0xC36A,
- 0x61F6, 0xC369, 0x61F7, 0xC368, 0x61F8, 0xC461, 0x61F9, 0xF44A, 0x61FA, 0xC462, 0x61FB, 0xF241, 0x61FC, 0xC4DF, 0x61FD, 0xF5CC,
- 0x61FE, 0xC4E0, 0x61FF, 0xC574, 0x6200, 0xC5CA, 0x6201, 0xF7D9, 0x6203, 0xF7DA, 0x6204, 0xF7DB, 0x6207, 0xF9BA, 0x6208, 0xA4E0,
- 0x6209, 0xC97C, 0x620A, 0xA5B3, 0x620C, 0xA6A6, 0x620D, 0xA6A7, 0x620E, 0xA6A5, 0x6210, 0xA6A8, 0x6211, 0xA7DA, 0x6212, 0xA7D9,
- 0x6214, 0xCCB1, 0x6215, 0xA9CF, 0x6216, 0xA9CE, 0x6219, 0xD1AF, 0x621A, 0xB1AD, 0x621B, 0xB1AE, 0x621F, 0xB475, 0x6220, 0xDD72,
- 0x6221, 0xB760, 0x6222, 0xB761, 0x6223, 0xDD74, 0x6224, 0xDD76, 0x6225, 0xDD75, 0x6227, 0xE1D7, 0x6229, 0xE1D6, 0x622A, 0xBA49,
- 0x622B, 0xE1D8, 0x622D, 0xE5AC, 0x622E, 0xBCAE, 0x6230, 0xBED4, 0x6232, 0xC0B8, 0x6233, 0xC257, 0x6234, 0xC0B9, 0x6236, 0xA4E1,
- 0x623A, 0xCAE6, 0x623D, 0xCCB2, 0x623E, 0xA9D1, 0x623F, 0xA9D0, 0x6240, 0xA9D2, 0x6241, 0xABF3, 0x6242, 0xCED2, 0x6243, 0xCED3,
- 0x6246, 0xD1B0, 0x6247, 0xAEB0, 0x6248, 0xB1AF, 0x6249, 0xB476, 0x624A, 0xD951, 0x624B, 0xA4E2, 0x624D, 0xA47E, 0x624E, 0xA4E3,
- 0x6250, 0xC97D, 0x6251, 0xA5B7, 0x6252, 0xA5B6, 0x6253, 0xA5B4, 0x6254, 0xA5B5, 0x6258, 0xA6AB, 0x6259, 0xC9E9, 0x625A, 0xC9EB,
- 0x625B, 0xA6AA, 0x625C, 0xC9E3, 0x625E, 0xC9E4, 0x6260, 0xC9EA, 0x6261, 0xC9E6, 0x6262, 0xC9E8, 0x6263, 0xA6A9, 0x6264, 0xC9E5,
- 0x6265, 0xC9EC, 0x6266, 0xC9E7, 0x626D, 0xA7E1, 0x626E, 0xA7EA, 0x626F, 0xA7E8, 0x6270, 0xCAF0, 0x6271, 0xCAED, 0x6272, 0xCAF5,
- 0x6273, 0xA7E6, 0x6274, 0xCAF6, 0x6276, 0xA7DF, 0x6277, 0xCAF3, 0x6279, 0xA7E5, 0x627A, 0xCAEF, 0x627B, 0xCAEE, 0x627C, 0xA7E3,
- 0x627D, 0xCAF4, 0x627E, 0xA7E4, 0x627F, 0xA9D3, 0x6280, 0xA7DE, 0x6281, 0xCAF1, 0x6283, 0xCAE7, 0x6284, 0xA7DB, 0x6286, 0xA7EE,
- 0x6287, 0xCAEC, 0x6288, 0xCAF2, 0x6289, 0xA7E0, 0x628A, 0xA7E2, 0x628C, 0xCAE8, 0x628E, 0xCAE9, 0x628F, 0xCAEA, 0x6291, 0xA7ED,
- 0x6292, 0xA7E7, 0x6293, 0xA7EC, 0x6294, 0xCAEB, 0x6295, 0xA7EB, 0x6296, 0xA7DD, 0x6297, 0xA7DC, 0x6298, 0xA7E9, 0x62A8, 0xA9E1,
- 0x62A9, 0xCCBE, 0x62AA, 0xCCB7, 0x62AB, 0xA9DC, 0x62AC, 0xA9EF, 0x62AD, 0xCCB3, 0x62AE, 0xCCBA, 0x62AF, 0xCCBC, 0x62B0, 0xCCBF,
- 0x62B1, 0xA9EA, 0x62B3, 0xCCBB, 0x62B4, 0xCCB4, 0x62B5, 0xA9E8, 0x62B6, 0xCCB8, 0x62B8, 0xCCC0, 0x62B9, 0xA9D9, 0x62BB, 0xCCBD,
- 0x62BC, 0xA9E3, 0x62BD, 0xA9E2, 0x62BE, 0xCCB6, 0x62BF, 0xA9D7, 0x62C2, 0xA9D8, 0x62C4, 0xA9D6, 0x62C6, 0xA9EE, 0x62C7, 0xA9E6,
- 0x62C8, 0xA9E0, 0x62C9, 0xA9D4, 0x62CA, 0xCCB9, 0x62CB, 0xA9DF, 0x62CC, 0xA9D5, 0x62CD, 0xA9E7, 0x62CE, 0xA9F0, 0x62CF, 0xCED4,
- 0x62D0, 0xA9E4, 0x62D1, 0xCCB5, 0x62D2, 0xA9DA, 0x62D3, 0xA9DD, 0x62D4, 0xA9DE, 0x62D6, 0xA9EC, 0x62D7, 0xA9ED, 0x62D8, 0xA9EB,
- 0x62D9, 0xA9E5, 0x62DA, 0xA9E9, 0x62DB, 0xA9DB, 0x62DC, 0xABF4, 0x62EB, 0xCEDA, 0x62EC, 0xAC41, 0x62ED, 0xABF8, 0x62EE, 0xABFA,
- 0x62EF, 0xAC40, 0x62F0, 0xCEE6, 0x62F1, 0xABFD, 0x62F2, 0xD1B1, 0x62F3, 0xAEB1, 0x62F4, 0xAC43, 0x62F5, 0xCED7, 0x62F6, 0xCEDF,
- 0x62F7, 0xABFE, 0x62F8, 0xCEDE, 0x62F9, 0xCEDB, 0x62FA, 0xCEE3, 0x62FB, 0xCEE5, 0x62FC, 0xABF7, 0x62FD, 0xABFB, 0x62FE, 0xAC42,
- 0x62FF, 0xAEB3, 0x6300, 0xCEE0, 0x6301, 0xABF9, 0x6302, 0xAC45, 0x6303, 0xCED9, 0x6307, 0xABFC, 0x6308, 0xAEB2, 0x6309, 0xABF6,
- 0x630B, 0xCED6, 0x630C, 0xCEDD, 0x630D, 0xCED5, 0x630E, 0xCED8, 0x630F, 0xCEDC, 0x6310, 0xD1B2, 0x6311, 0xAC44, 0x6313, 0xCEE1,
- 0x6314, 0xCEE2, 0x6315, 0xCEE4, 0x6316, 0xABF5, 0x6328, 0xAEC1, 0x6329, 0xD1BE, 0x632A, 0xAEBF, 0x632B, 0xAEC0, 0x632C, 0xD1B4,
- 0x632D, 0xD1C4, 0x632F, 0xAEB6, 0x6332, 0xD566, 0x6333, 0xD1C6, 0x6334, 0xD1C0, 0x6336, 0xD1B7, 0x6338, 0xD1C9, 0x6339, 0xD1BA,
- 0x633A, 0xAEBC, 0x633B, 0xD57D, 0x633C, 0xD1BD, 0x633D, 0xAEBE, 0x633E, 0xAEB5, 0x6340, 0xD1CB, 0x6341, 0xD1BF, 0x6342, 0xAEB8,
- 0x6343, 0xD1B8, 0x6344, 0xD1B5, 0x6345, 0xD1B6, 0x6346, 0xAEB9, 0x6347, 0xD1C5, 0x6348, 0xD1CC, 0x6349, 0xAEBB, 0x634A, 0xD1BC,
- 0x634B, 0xD1BB, 0x634C, 0xAEC3, 0x634D, 0xAEC2, 0x634E, 0xAEB4, 0x634F, 0xAEBA, 0x6350, 0xAEBD, 0x6351, 0xD1C8, 0x6354, 0xD1C2,
- 0x6355, 0xAEB7, 0x6356, 0xD1B3, 0x6357, 0xD1CA, 0x6358, 0xD1C1, 0x6359, 0xD1C3, 0x635A, 0xD1C7, 0x6365, 0xD567, 0x6367, 0xB1B7,
- 0x6368, 0xB1CB, 0x6369, 0xB1CA, 0x636B, 0xB1BF, 0x636D, 0xD579, 0x636E, 0xD575, 0x636F, 0xD572, 0x6370, 0xD5A6, 0x6371, 0xB1BA,
- 0x6372, 0xB1B2, 0x6375, 0xD577, 0x6376, 0xB4A8, 0x6377, 0xB1B6, 0x6378, 0xD5A1, 0x637A, 0xB1CC, 0x637B, 0xB1C9, 0x637C, 0xD57B,
- 0x637D, 0xD56A, 0x6380, 0xB1C8, 0x6381, 0xD5A3, 0x6382, 0xD569, 0x6383, 0xB1BD, 0x6384, 0xB1C1, 0x6385, 0xD5A2, 0x6387, 0xD573,
- 0x6388, 0xB1C2, 0x6389, 0xB1BC, 0x638A, 0xD568, 0x638C, 0xB478, 0x638D, 0xD5A5, 0x638E, 0xD571, 0x638F, 0xB1C7, 0x6390, 0xD574,
- 0x6391, 0xD5A4, 0x6392, 0xB1C6, 0x6394, 0xD952, 0x6396, 0xB1B3, 0x6397, 0xD56F, 0x6398, 0xB1B8, 0x6399, 0xB1C3, 0x639B, 0xB1BE,
- 0x639C, 0xD578, 0x639D, 0xD56E, 0x639E, 0xD56C, 0x639F, 0xD57E, 0x63A0, 0xB1B0, 0x63A1, 0xB1C4, 0x63A2, 0xB1B4, 0x63A3, 0xB477,
- 0x63A4, 0xD57C, 0x63A5, 0xB1B5, 0x63A7, 0xB1B1, 0x63A8, 0xB1C0, 0x63A9, 0xB1BB, 0x63AA, 0xB1B9, 0x63AB, 0xD570, 0x63AC, 0xB1C5,
- 0x63AD, 0xD56D, 0x63AE, 0xD57A, 0x63AF, 0xD576, 0x63B0, 0xD954, 0x63B1, 0xD953, 0x63BD, 0xD56B, 0x63BE, 0xD964, 0x63C0, 0xB47A,
- 0x63C2, 0xD96A, 0x63C3, 0xD959, 0x63C4, 0xD967, 0x63C5, 0xDD77, 0x63C6, 0xB47D, 0x63C7, 0xD96B, 0x63C8, 0xD96E, 0x63C9, 0xB47C,
- 0x63CA, 0xD95C, 0x63CB, 0xD96D, 0x63CC, 0xD96C, 0x63CD, 0xB47E, 0x63CE, 0xD955, 0x63CF, 0xB479, 0x63D0, 0xB4A3, 0x63D2, 0xB4A1,
- 0x63D3, 0xD969, 0x63D5, 0xD95F, 0x63D6, 0xB4A5, 0x63D7, 0xD970, 0x63D8, 0xD968, 0x63D9, 0xD971, 0x63DA, 0xB4AD, 0x63DB, 0xB4AB,
- 0x63DC, 0xD966, 0x63DD, 0xD965, 0x63DF, 0xD963, 0x63E0, 0xD95D, 0x63E1, 0xB4A4, 0x63E3, 0xB4A2, 0x63E4, 0xD1B9, 0x63E5, 0xD956,
- 0x63E7, 0xDDB7, 0x63E8, 0xD957, 0x63E9, 0xB47B, 0x63EA, 0xB4AA, 0x63EB, 0xDD79, 0x63ED, 0xB4A6, 0x63EE, 0xB4A7, 0x63EF, 0xD958,
- 0x63F0, 0xD96F, 0x63F1, 0xDD78, 0x63F2, 0xD960, 0x63F3, 0xD95B, 0x63F4, 0xB4A9, 0x63F5, 0xD961, 0x63F6, 0xD95E, 0x63F9, 0xB4AE,
- 0x6406, 0xB770, 0x6409, 0xDD7C, 0x640A, 0xDDB1, 0x640B, 0xDDB6, 0x640C, 0xDDAA, 0x640D, 0xB76C, 0x640E, 0xDDBB, 0x640F, 0xB769,
- 0x6410, 0xDD7A, 0x6412, 0xDD7B, 0x6413, 0xB762, 0x6414, 0xB76B, 0x6415, 0xDDA4, 0x6416, 0xB76E, 0x6417, 0xB76F, 0x6418, 0xDDA5,
- 0x641A, 0xDDB2, 0x641B, 0xDDB8, 0x641C, 0xB76A, 0x641E, 0xB764, 0x641F, 0xDDA3, 0x6420, 0xDD7D, 0x6421, 0xDDBA, 0x6422, 0xDDA8,
- 0x6423, 0xDDA9, 0x6424, 0xDD7E, 0x6425, 0xDDB4, 0x6426, 0xDDAB, 0x6427, 0xDDB5, 0x6428, 0xDDAD, 0x642A, 0xB765, 0x642B, 0xE1D9,
- 0x642C, 0xB768, 0x642D, 0xB766, 0x642E, 0xDDB9, 0x642F, 0xDDB0, 0x6430, 0xDDAC, 0x6433, 0xDDA1, 0x6434, 0xBA53, 0x6435, 0xDDAF,
- 0x6436, 0xB76D, 0x6437, 0xDDA7, 0x6439, 0xDDA6, 0x643D, 0xB767, 0x643E, 0xB763, 0x643F, 0xE1EE, 0x6440, 0xDDB3, 0x6441, 0xDDAE,
- 0x6443, 0xDDA2, 0x644B, 0xE1E9, 0x644D, 0xE1DA, 0x644E, 0xE1E5, 0x6450, 0xE1EC, 0x6451, 0xBA51, 0x6452, 0xB4AC, 0x6453, 0xE1EA,
- 0x6454, 0xBA4C, 0x6458, 0xBA4B, 0x6459, 0xE1F1, 0x645B, 0xE1DB, 0x645C, 0xE1E8, 0x645D, 0xE1DC, 0x645E, 0xE1E7, 0x645F, 0xBA4F,
- 0x6460, 0xE1EB, 0x6461, 0xD962, 0x6465, 0xE1F2, 0x6466, 0xE1E3, 0x6467, 0xBA52, 0x6468, 0xE5BA, 0x6469, 0xBCAF, 0x646B, 0xE1F0,
- 0x646C, 0xE1EF, 0x646D, 0xBA54, 0x646E, 0xE5AD, 0x646F, 0xBCB0, 0x6470, 0xE5AE, 0x6472, 0xE1DF, 0x6473, 0xE1E0, 0x6474, 0xE1DD,
- 0x6475, 0xE1E2, 0x6476, 0xE1DE, 0x6477, 0xE1F3, 0x6478, 0xBA4E, 0x6479, 0xBCB1, 0x647A, 0xBA50, 0x647B, 0xBA55, 0x647D, 0xE1E1,
- 0x647F, 0xE1ED, 0x6482, 0xE1E6, 0x6485, 0xE5B1, 0x6487, 0xBA4A, 0x6488, 0xBCB4, 0x6489, 0xE9AA, 0x648A, 0xE5B6, 0x648B, 0xE5B5,
- 0x648C, 0xE5B7, 0x648F, 0xE5B4, 0x6490, 0xBCB5, 0x6492, 0xBCBB, 0x6493, 0xBCB8, 0x6495, 0xBCB9, 0x6496, 0xE5AF, 0x6497, 0xE5B2,
- 0x6498, 0xE5BC, 0x6499, 0xBCC1, 0x649A, 0xBCBF, 0x649C, 0xE5B3, 0x649D, 0xD95A, 0x649E, 0xBCB2, 0x649F, 0xE5B9, 0x64A0, 0xE5B0,
- 0x64A2, 0xBCC2, 0x64A3, 0xE5B8, 0x64A4, 0xBA4D, 0x64A5, 0xBCB7, 0x64A6, 0xE1E4, 0x64A9, 0xBCBA, 0x64AB, 0xBCBE, 0x64AC, 0xBCC0,
- 0x64AD, 0xBCBD, 0x64AE, 0xBCBC, 0x64B0, 0xBCB6, 0x64B1, 0xE5BB, 0x64B2, 0xBCB3, 0x64B3, 0xBCC3, 0x64BB, 0xBED8, 0x64BC, 0xBED9,
- 0x64BD, 0xE9A9, 0x64BE, 0xBEE2, 0x64BF, 0xBEDF, 0x64C1, 0xBED6, 0x64C2, 0xBEDD, 0x64C3, 0xE9AB, 0x64C4, 0xBEDB, 0x64C5, 0xBED5,
- 0x64C7, 0xBEDC, 0x64C9, 0xE9A8, 0x64CA, 0xC0BB, 0x64CB, 0xBED7, 0x64CD, 0xBEDE, 0x64CE, 0xC0BA, 0x64CF, 0xE9A7, 0x64D0, 0xE9A6,
- 0x64D2, 0xBEE0, 0x64D4, 0xBEE1, 0x64D6, 0xE9A5, 0x64D7, 0xE9A4, 0x64D8, 0xC0BC, 0x64D9, 0xE9AE, 0x64DA, 0xBEDA, 0x64DB, 0xE9AC,
- 0x64E0, 0xC0BD, 0x64E2, 0xC0C2, 0x64E3, 0xECEA, 0x64E4, 0xECEC, 0x64E6, 0xC0BF, 0x64E8, 0xECED, 0x64E9, 0xECE9, 0x64EB, 0xECEB,
- 0x64EC, 0xC0C0, 0x64ED, 0xC0C3, 0x64EF, 0xECE8, 0x64F0, 0xC0BE, 0x64F1, 0xC0C1, 0x64F2, 0xC259, 0x64F3, 0xE9AD, 0x64F4, 0xC258,
- 0x64F7, 0xC25E, 0x64F8, 0xEFD4, 0x64FA, 0xC25C, 0x64FB, 0xC25D, 0x64FC, 0xEFD7, 0x64FD, 0xEFD3, 0x64FE, 0xC25A, 0x64FF, 0xEFD1,
- 0x6500, 0xC36B, 0x6501, 0xEFD5, 0x6503, 0xEFD6, 0x6504, 0xEFD2, 0x6506, 0xC25B, 0x6507, 0xF242, 0x6509, 0xF245, 0x650C, 0xF246,
- 0x650D, 0xF244, 0x650E, 0xF247, 0x650F, 0xC36C, 0x6510, 0xF243, 0x6513, 0xF44E, 0x6514, 0xC464, 0x6515, 0xF44D, 0x6516, 0xF44C,
- 0x6517, 0xF44B, 0x6518, 0xC463, 0x6519, 0xC465, 0x651B, 0xF5CD, 0x651C, 0xC4E2, 0x651D, 0xC4E1, 0x6520, 0xF6E1, 0x6521, 0xF6E0,
- 0x6522, 0xF6E3, 0x6523, 0xC5CB, 0x6524, 0xC575, 0x6525, 0xF7DD, 0x6526, 0xF6E2, 0x6529, 0xF7DC, 0x652A, 0xC5CD, 0x652B, 0xC5CC,
- 0x652C, 0xC5F3, 0x652D, 0xF8A9, 0x652E, 0xF8EF, 0x652F, 0xA4E4, 0x6532, 0xD972, 0x6533, 0xE9AF, 0x6536, 0xA6AC, 0x6537, 0xCAF7,
- 0x6538, 0xA7F1, 0x6539, 0xA7EF, 0x653B, 0xA7F0, 0x653D, 0xCCC1, 0x653E, 0xA9F1, 0x653F, 0xAC46, 0x6541, 0xCEE7, 0x6543, 0xCEE8,
- 0x6545, 0xAC47, 0x6546, 0xD1CE, 0x6548, 0xAEC4, 0x6549, 0xAEC5, 0x654A, 0xD1CD, 0x654F, 0xB1D3, 0x6551, 0xB1CF, 0x6553, 0xD5A7,
- 0x6554, 0xB1D6, 0x6555, 0xB1D5, 0x6556, 0xB1CE, 0x6557, 0xB1D1, 0x6558, 0xB1D4, 0x6559, 0xB1D0, 0x655C, 0xD976, 0x655D, 0xB1CD,
- 0x655E, 0xB4AF, 0x6562, 0xB4B1, 0x6563, 0xB4B2, 0x6564, 0xD975, 0x6565, 0xD978, 0x6566, 0xB4B0, 0x6567, 0xD973, 0x6568, 0xD977,
- 0x656A, 0xD974, 0x656C, 0xB771, 0x656F, 0xDDBC, 0x6572, 0xBA56, 0x6573, 0xE1F4, 0x6574, 0xBEE3, 0x6575, 0xBCC4, 0x6576, 0xE5BD,
- 0x6577, 0xBCC5, 0x6578, 0xBCC6, 0x6579, 0xE5BF, 0x657A, 0xE5BE, 0x657B, 0xE5C0, 0x657C, 0xE9B1, 0x657F, 0xE9B0, 0x6580, 0xECEF,
- 0x6581, 0xECEE, 0x6582, 0xC0C4, 0x6583, 0xC0C5, 0x6584, 0xF248, 0x6587, 0xA4E5, 0x658C, 0xD979, 0x6590, 0xB4B4, 0x6591, 0xB4B3,
- 0x6592, 0xDDBD, 0x6594, 0xEFD8, 0x6595, 0xC4E3, 0x6596, 0xF7DE, 0x6597, 0xA4E6, 0x6599, 0xAEC6, 0x659B, 0xB1D8, 0x659C, 0xB1D7,
- 0x659D, 0xD97A, 0x659E, 0xD97B, 0x659F, 0xB772, 0x65A0, 0xE1F5, 0x65A1, 0xBA57, 0x65A2, 0xE9B2, 0x65A4, 0xA4E7, 0x65A5, 0xA5B8,
- 0x65A7, 0xA9F2, 0x65A8, 0xCCC2, 0x65AA, 0xCEE9, 0x65AB, 0xAC48, 0x65AC, 0xB1D9, 0x65AE, 0xD97C, 0x65AF, 0xB4B5, 0x65B0, 0xB773,
- 0x65B2, 0xE5C1, 0x65B3, 0xE5C2, 0x65B6, 0xECF0, 0x65B7, 0xC25F, 0x65B8, 0xF8F0, 0x65B9, 0xA4E8, 0x65BB, 0xCCC3, 0x65BC, 0xA9F3,
- 0x65BD, 0xAC49, 0x65BF, 0xCEEA, 0x65C1, 0xAEC7, 0x65C2, 0xD1D2, 0x65C3, 0xD1D0, 0x65C4, 0xD1D1, 0x65C5, 0xAEC8, 0x65C6, 0xD1CF,
- 0x65CB, 0xB1DB, 0x65CC, 0xB1DC, 0x65CD, 0xD5A8, 0x65CE, 0xB1DD, 0x65CF, 0xB1DA, 0x65D0, 0xD97D, 0x65D2, 0xD97E, 0x65D3, 0xDDBE,
- 0x65D6, 0xBA59, 0x65D7, 0xBA58, 0x65DA, 0xECF1, 0x65DB, 0xEFD9, 0x65DD, 0xF24A, 0x65DE, 0xF249, 0x65DF, 0xF44F, 0x65E1, 0xC95E,
- 0x65E2, 0xAC4A, 0x65E5, 0xA4E9, 0x65E6, 0xA5B9, 0x65E8, 0xA6AE, 0x65E9, 0xA6AD, 0x65EC, 0xA6AF, 0x65ED, 0xA6B0, 0x65EE, 0xC9EE,
- 0x65EF, 0xC9ED, 0x65F0, 0xCAF8, 0x65F1, 0xA7F2, 0x65F2, 0xCAFB, 0x65F3, 0xCAFA, 0x65F4, 0xCAF9, 0x65F5, 0xCAFC, 0x65FA, 0xA9F4,
- 0x65FB, 0xCCC9, 0x65FC, 0xCCC5, 0x65FD, 0xCCCE, 0x6600, 0xA9FB, 0x6602, 0xA9F9, 0x6603, 0xCCCA, 0x6604, 0xCCC6, 0x6605, 0xCCCD,
- 0x6606, 0xA9F8, 0x6607, 0xAA40, 0x6608, 0xCCC8, 0x6609, 0xCCC4, 0x660A, 0xA9FE, 0x660B, 0xCCCB, 0x660C, 0xA9F7, 0x660D, 0xCCCC,
- 0x660E, 0xA9FA, 0x660F, 0xA9FC, 0x6610, 0xCCD0, 0x6611, 0xCCCF, 0x6612, 0xCCC7, 0x6613, 0xA9F6, 0x6614, 0xA9F5, 0x6615, 0xA9FD,
- 0x661C, 0xCEEF, 0x661D, 0xCEF5, 0x661F, 0xAC50, 0x6620, 0xAC4D, 0x6621, 0xCEEC, 0x6622, 0xCEF1, 0x6624, 0xAC53, 0x6625, 0xAC4B,
- 0x6626, 0xCEF0, 0x6627, 0xAC4E, 0x6628, 0xAC51, 0x662B, 0xCEF3, 0x662D, 0xAC4C, 0x662E, 0xCEF8, 0x662F, 0xAC4F, 0x6631, 0xAC52,
- 0x6632, 0xCEED, 0x6633, 0xCEF2, 0x6634, 0xCEF6, 0x6635, 0xCEEE, 0x6636, 0xCEEB, 0x6639, 0xCEF7, 0x663A, 0xCEF4, 0x6641, 0xAED0,
- 0x6642, 0xAEC9, 0x6643, 0xAECC, 0x6645, 0xAECF, 0x6647, 0xD1D5, 0x6649, 0xAECA, 0x664A, 0xD1D3, 0x664C, 0xAECE, 0x664F, 0xAECB,
- 0x6651, 0xD1D6, 0x6652, 0xAECD, 0x6659, 0xD5AC, 0x665A, 0xB1DF, 0x665B, 0xD5AB, 0x665C, 0xD5AD, 0x665D, 0xB1DE, 0x665E, 0xB1E3,
- 0x665F, 0xD1D4, 0x6661, 0xD5AA, 0x6662, 0xD5AE, 0x6664, 0xB1E0, 0x6665, 0xD5A9, 0x6666, 0xB1E2, 0x6668, 0xB1E1, 0x666A, 0xD9A7,
- 0x666C, 0xD9A2, 0x666E, 0xB4B6, 0x666F, 0xB4BA, 0x6670, 0xB4B7, 0x6671, 0xD9A5, 0x6672, 0xD9A8, 0x6674, 0xB4B8, 0x6676, 0xB4B9,
- 0x6677, 0xB4BE, 0x6678, 0xDDC7, 0x6679, 0xD9A6, 0x667A, 0xB4BC, 0x667B, 0xD9A3, 0x667C, 0xD9A1, 0x667E, 0xB4BD, 0x6680, 0xD9A4,
- 0x6684, 0xB779, 0x6686, 0xDDBF, 0x6687, 0xB776, 0x6688, 0xB777, 0x6689, 0xB775, 0x668A, 0xDDC4, 0x668B, 0xDDC3, 0x668C, 0xDDC0,
- 0x668D, 0xB77B, 0x6690, 0xDDC2, 0x6691, 0xB4BB, 0x6694, 0xDDC6, 0x6695, 0xDDC1, 0x6696, 0xB778, 0x6697, 0xB774, 0x6698, 0xB77A,
- 0x6699, 0xDDC5, 0x669D, 0xBA5C, 0x669F, 0xE1F8, 0x66A0, 0xE1F7, 0x66A1, 0xE1F6, 0x66A2, 0xBA5A, 0x66A8, 0xBA5B, 0x66A9, 0xE5C5,
- 0x66AA, 0xE5C8, 0x66AB, 0xBCC8, 0x66AE, 0xBCC7, 0x66AF, 0xE5C9, 0x66B0, 0xE5C4, 0x66B1, 0xBCCA, 0x66B2, 0xE5C6, 0x66B4, 0xBCC9,
- 0x66B5, 0xE5C3, 0x66B7, 0xE5C7, 0x66B8, 0xBEE9, 0x66B9, 0xBEE6, 0x66BA, 0xE9BB, 0x66BB, 0xE9BA, 0x66BD, 0xE9B9, 0x66BE, 0xE9B4,
- 0x66C0, 0xE9B5, 0x66C4, 0xBEE7, 0x66C6, 0xBEE4, 0x66C7, 0xBEE8, 0x66C8, 0xE9B3, 0x66C9, 0xBEE5, 0x66CA, 0xE9B6, 0x66CB, 0xE9B7,
- 0x66CC, 0xE9BC, 0x66CF, 0xE9B8, 0x66D2, 0xECF2, 0x66D6, 0xC0C7, 0x66D8, 0xEFDC, 0x66D9, 0xC0C6, 0x66DA, 0xEFDA, 0x66DB, 0xEFDB,
- 0x66DC, 0xC260, 0x66DD, 0xC36E, 0x66DE, 0xF24B, 0x66E0, 0xC36D, 0x66E3, 0xF451, 0x66E4, 0xF452, 0x66E6, 0xC466, 0x66E8, 0xF450,
- 0x66E9, 0xC4E4, 0x66EB, 0xF7DF, 0x66EC, 0xC5CE, 0x66ED, 0xF8AA, 0x66EE, 0xF8AB, 0x66F0, 0xA4EA, 0x66F2, 0xA6B1, 0x66F3, 0xA6B2,
- 0x66F4, 0xA7F3, 0x66F6, 0xCCD1, 0x66F7, 0xAC54, 0x66F8, 0xAED1, 0x66F9, 0xB1E4, 0x66FC, 0xB0D2, 0x66FE, 0xB4BF, 0x66FF, 0xB4C0,
- 0x6700, 0xB3CC, 0x6701, 0xD9A9, 0x6703, 0xB77C, 0x6704, 0xE1FA, 0x6705, 0xE1F9, 0x6708, 0xA4EB, 0x6709, 0xA6B3, 0x670A, 0xCCD2,
- 0x670B, 0xAA42, 0x670D, 0xAA41, 0x670F, 0xCEF9, 0x6710, 0xCEFA, 0x6712, 0xD1D7, 0x6713, 0xD1D8, 0x6714, 0xAED2, 0x6715, 0xAED3,
- 0x6717, 0xAED4, 0x6718, 0xD5AF, 0x671B, 0xB1E6, 0x671D, 0xB4C2, 0x671F, 0xB4C1, 0x6720, 0xDDC8, 0x6721, 0xDF7A, 0x6722, 0xE1FB,
- 0x6723, 0xE9BD, 0x6726, 0xC261, 0x6727, 0xC467, 0x6728, 0xA4EC, 0x672A, 0xA5BC, 0x672B, 0xA5BD, 0x672C, 0xA5BB, 0x672D, 0xA5BE,
- 0x672E, 0xA5BA, 0x6731, 0xA6B6, 0x6733, 0xC9F6, 0x6734, 0xA6B5, 0x6735, 0xA6B7, 0x6738, 0xC9F1, 0x6739, 0xC9F0, 0x673A, 0xC9F3,
- 0x673B, 0xC9F2, 0x673C, 0xC9F5, 0x673D, 0xA6B4, 0x673E, 0xC9EF, 0x673F, 0xC9F4, 0x6745, 0xCAFD, 0x6746, 0xA7FD, 0x6747, 0xCAFE,
- 0x6748, 0xCB43, 0x6749, 0xA7FC, 0x674B, 0xCB47, 0x674C, 0xCB42, 0x674D, 0xCB45, 0x674E, 0xA7F5, 0x674F, 0xA7F6, 0x6750, 0xA7F7,
- 0x6751, 0xA7F8, 0x6753, 0xA840, 0x6755, 0xCB41, 0x6756, 0xA7FA, 0x6757, 0xA841, 0x6759, 0xCB40, 0x675A, 0xCB46, 0x675C, 0xA7F9,
- 0x675D, 0xCB44, 0x675E, 0xA7FB, 0x675F, 0xA7F4, 0x6760, 0xA7FE, 0x676A, 0xAA57, 0x676C, 0xCCD4, 0x676D, 0xAA43, 0x676F, 0xAA4D,
- 0x6770, 0xAA4E, 0x6771, 0xAA46, 0x6772, 0xAA58, 0x6773, 0xAA48, 0x6774, 0xCCDC, 0x6775, 0xAA53, 0x6776, 0xCCD7, 0x6777, 0xAA49,
- 0x6778, 0xCCE6, 0x6779, 0xCCE7, 0x677A, 0xCCDF, 0x677B, 0xCCD8, 0x677C, 0xAA56, 0x677D, 0xCCE4, 0x677E, 0xAA51, 0x677F, 0xAA4F,
- 0x6781, 0xCCE5, 0x6783, 0xCCE3, 0x6784, 0xCCDB, 0x6785, 0xCCD3, 0x6786, 0xCCDA, 0x6787, 0xAA4A, 0x6789, 0xAA50, 0x678B, 0xAA44,
- 0x678C, 0xCCDE, 0x678D, 0xCCDD, 0x678E, 0xCCD5, 0x6790, 0xAA52, 0x6791, 0xCCE1, 0x6792, 0xCCD6, 0x6793, 0xAA55, 0x6794, 0xCCE8,
- 0x6795, 0xAA45, 0x6797, 0xAA4C, 0x6798, 0xCCD9, 0x6799, 0xCCE2, 0x679A, 0xAA54, 0x679C, 0xAA47, 0x679D, 0xAA4B, 0x679F, 0xCCE0,
- 0x67AE, 0xCF5B, 0x67AF, 0xAC5C, 0x67B0, 0xAC69, 0x67B2, 0xCF56, 0x67B3, 0xCF4C, 0x67B4, 0xAC62, 0x67B5, 0xCF4A, 0x67B6, 0xAC5B,
- 0x67B7, 0xCF45, 0x67B8, 0xAC65, 0x67B9, 0xCF52, 0x67BA, 0xCEFE, 0x67BB, 0xCF41, 0x67C0, 0xCF44, 0x67C1, 0xCEFB, 0x67C2, 0xCF51,
- 0x67C3, 0xCF61, 0x67C4, 0xAC60, 0x67C5, 0xCF46, 0x67C6, 0xCF58, 0x67C8, 0xCEFD, 0x67C9, 0xCF5F, 0x67CA, 0xCF60, 0x67CB, 0xCF63,
- 0x67CC, 0xCF5A, 0x67CD, 0xCF4B, 0x67CE, 0xCF53, 0x67CF, 0xAC66, 0x67D0, 0xAC59, 0x67D1, 0xAC61, 0x67D2, 0xAC6D, 0x67D3, 0xAC56,
- 0x67D4, 0xAC58, 0x67D8, 0xCF43, 0x67D9, 0xAC6A, 0x67DA, 0xAC63, 0x67DB, 0xCF5D, 0x67DC, 0xCF40, 0x67DD, 0xAC6C, 0x67DE, 0xAC67,
- 0x67DF, 0xCF49, 0x67E2, 0xAC6B, 0x67E3, 0xCF50, 0x67E4, 0xCF48, 0x67E5, 0xAC64, 0x67E6, 0xCF5C, 0x67E7, 0xCF54, 0x67E9, 0xAC5E,
- 0x67EA, 0xCF62, 0x67EB, 0xCF47, 0x67EC, 0xAC5A, 0x67ED, 0xCF59, 0x67EE, 0xCF4F, 0x67EF, 0xAC5F, 0x67F0, 0xCF55, 0x67F1, 0xAC57,
- 0x67F2, 0xCEFC, 0x67F3, 0xAC68, 0x67F4, 0xAEE3, 0x67F5, 0xAC5D, 0x67F6, 0xCF4E, 0x67F7, 0xCF4D, 0x67F8, 0xCF42, 0x67FA, 0xCF5E,
- 0x67FC, 0xCF57, 0x67FF, 0xAC55, 0x6812, 0xD1EC, 0x6813, 0xAEEA, 0x6814, 0xD1ED, 0x6816, 0xD1E1, 0x6817, 0xAEDF, 0x6818, 0xAEEB,
- 0x681A, 0xD1DA, 0x681C, 0xD1E3, 0x681D, 0xD1EB, 0x681F, 0xD1D9, 0x6820, 0xD1F4, 0x6821, 0xAED5, 0x6825, 0xD1F3, 0x6826, 0xD1EE,
- 0x6828, 0xD1EF, 0x6829, 0xAEDD, 0x682A, 0xAEE8, 0x682B, 0xD1E5, 0x682D, 0xD1E6, 0x682E, 0xD1F0, 0x682F, 0xD1E7, 0x6831, 0xD1E2,
- 0x6832, 0xD1DC, 0x6833, 0xD1DD, 0x6834, 0xD1EA, 0x6835, 0xD1E4, 0x6838, 0xAED6, 0x6839, 0xAEDA, 0x683A, 0xD1F2, 0x683B, 0xD1DE,
- 0x683C, 0xAEE6, 0x683D, 0xAEE2, 0x6840, 0xAEE5, 0x6841, 0xAEEC, 0x6842, 0xAEDB, 0x6843, 0xAEE7, 0x6844, 0xD1E9, 0x6845, 0xAEE9,
- 0x6846, 0xAED8, 0x6848, 0xAED7, 0x6849, 0xD1DB, 0x684B, 0xD1DF, 0x684C, 0xAEE0, 0x684D, 0xD1F1, 0x684E, 0xD1E8, 0x684F, 0xD1E0,
- 0x6850, 0xAEE4, 0x6851, 0xAEE1, 0x6853, 0xAED9, 0x6854, 0xAEDC, 0x686B, 0xD5C4, 0x686D, 0xD5B4, 0x686E, 0xD5B5, 0x686F, 0xD5B9,
- 0x6871, 0xD5C8, 0x6872, 0xD5C5, 0x6874, 0xD5BE, 0x6875, 0xD5BD, 0x6876, 0xB1ED, 0x6877, 0xD5C1, 0x6878, 0xD5D0, 0x6879, 0xD5B0,
- 0x687B, 0xD5D1, 0x687C, 0xD5C3, 0x687D, 0xD5D5, 0x687E, 0xD5C9, 0x687F, 0xB1EC, 0x6880, 0xD5C7, 0x6881, 0xB1E7, 0x6882, 0xB1FC,
- 0x6883, 0xB1F2, 0x6885, 0xB1F6, 0x6886, 0xB1F5, 0x6887, 0xD5B1, 0x6889, 0xD5CE, 0x688A, 0xD5D4, 0x688B, 0xD5CC, 0x688C, 0xD5D3,
- 0x688F, 0xD5C0, 0x6890, 0xD5B2, 0x6891, 0xD5D2, 0x6892, 0xD5C2, 0x6893, 0xB1EA, 0x6894, 0xB1F7, 0x6896, 0xD5CB, 0x6897, 0xB1F0,
- 0x689B, 0xD5CA, 0x689C, 0xD5B3, 0x689D, 0xB1F8, 0x689F, 0xB1FA, 0x68A0, 0xD5CD, 0x68A1, 0xB1FB, 0x68A2, 0xB1E9, 0x68A3, 0xD5BA,
- 0x68A4, 0xD5CF, 0x68A7, 0xB1EF, 0x68A8, 0xB1F9, 0x68A9, 0xD5BC, 0x68AA, 0xD5C6, 0x68AB, 0xD5B7, 0x68AC, 0xD5BB, 0x68AD, 0xB1F4,
- 0x68AE, 0xD5B6, 0x68AF, 0xB1E8, 0x68B0, 0xB1F1, 0x68B1, 0xB1EE, 0x68B2, 0xD5BF, 0x68B3, 0xAEDE, 0x68B4, 0xD9C0, 0x68B5, 0xB1EB,
- 0x68C4, 0xB1F3, 0x68C6, 0xD9C3, 0x68C7, 0xD9D9, 0x68C8, 0xD9CE, 0x68C9, 0xB4D6, 0x68CB, 0xB4D1, 0x68CC, 0xD9BD, 0x68CD, 0xB4D2,
- 0x68CE, 0xD9CD, 0x68D0, 0xD9C6, 0x68D1, 0xD9D3, 0x68D2, 0xB4CE, 0x68D3, 0xD9AB, 0x68D4, 0xD9D5, 0x68D5, 0xB4C4, 0x68D6, 0xD9B3,
- 0x68D7, 0xB4C7, 0x68D8, 0xB4C6, 0x68DA, 0xB4D7, 0x68DC, 0xD9AD, 0x68DD, 0xD9CF, 0x68DE, 0xD9D0, 0x68DF, 0xB4C9, 0x68E0, 0xB4C5,
- 0x68E1, 0xD9BB, 0x68E3, 0xB4D0, 0x68E4, 0xD9B6, 0x68E6, 0xD9D1, 0x68E7, 0xB4CC, 0x68E8, 0xD9C9, 0x68E9, 0xD9D6, 0x68EA, 0xD9B0,
- 0x68EB, 0xD9B5, 0x68EC, 0xD9AF, 0x68EE, 0xB4CB, 0x68EF, 0xD9C2, 0x68F0, 0xDDDE, 0x68F1, 0xD9B1, 0x68F2, 0xB4CF, 0x68F3, 0xD9BA,
- 0x68F4, 0xD9D2, 0x68F5, 0xB4CA, 0x68F6, 0xD9B7, 0x68F7, 0xD9B4, 0x68F8, 0xD9C5, 0x68F9, 0xB4CD, 0x68FA, 0xB4C3, 0x68FB, 0xB4D9,
- 0x68FC, 0xD9C8, 0x68FD, 0xD9C7, 0x6904, 0xD9AC, 0x6905, 0xB4C8, 0x6906, 0xD9D4, 0x6907, 0xD9BC, 0x6908, 0xD9BE, 0x690A, 0xD9CB,
- 0x690B, 0xD9CA, 0x690C, 0xD9AA, 0x690D, 0xB4D3, 0x690E, 0xB4D5, 0x690F, 0xD9B2, 0x6910, 0xD9B9, 0x6911, 0xD9C1, 0x6912, 0xB4D4,
- 0x6913, 0xD9B8, 0x6914, 0xD9C4, 0x6915, 0xD9D7, 0x6917, 0xD9CC, 0x6925, 0xD9D8, 0x692A, 0xD9AE, 0x692F, 0xDDF2, 0x6930, 0xB7A6,
- 0x6932, 0xDDF0, 0x6933, 0xDDDB, 0x6934, 0xDDE0, 0x6935, 0xDDD9, 0x6937, 0xDDEC, 0x6938, 0xDDCB, 0x6939, 0xDDD2, 0x693B, 0xDDEA,
- 0x693C, 0xDDF4, 0x693D, 0xDDDC, 0x693F, 0xDDCF, 0x6940, 0xDDE2, 0x6941, 0xDDE7, 0x6942, 0xDDD3, 0x6944, 0xDDE4, 0x6945, 0xDDD0,
- 0x6948, 0xDDD7, 0x6949, 0xDDD8, 0x694A, 0xB7A8, 0x694B, 0xDDEB, 0x694C, 0xDDE9, 0x694E, 0xDDCC, 0x694F, 0xDDEE, 0x6951, 0xDDEF,
- 0x6952, 0xDDF1, 0x6953, 0xB7AC, 0x6954, 0xB7A4, 0x6956, 0xD5B8, 0x6957, 0xDDD4, 0x6958, 0xDDE6, 0x6959, 0xDDD5, 0x695A, 0xB7A1,
- 0x695B, 0xB7B1, 0x695C, 0xDDED, 0x695D, 0xB7AF, 0x695E, 0xB7AB, 0x695F, 0xDDCA, 0x6960, 0xB7A3, 0x6962, 0xDDCD, 0x6963, 0xB7B0,
- 0x6965, 0xDDDD, 0x6966, 0xDDC9, 0x6968, 0xB7A9, 0x6969, 0xDDE1, 0x696A, 0xDDD1, 0x696B, 0xB7AA, 0x696C, 0xDDDA, 0x696D, 0xB77E,
- 0x696E, 0xB4D8, 0x696F, 0xDDE3, 0x6970, 0xD9BF, 0x6971, 0xDDCE, 0x6974, 0xDDE8, 0x6975, 0xB7A5, 0x6976, 0xDDE5, 0x6977, 0xB7A2,
- 0x6978, 0xDDDF, 0x6979, 0xB7AD, 0x697A, 0xDDD6, 0x697B, 0xDDF3, 0x6982, 0xB7A7, 0x6983, 0xDEC6, 0x6986, 0xB7AE, 0x698D, 0xE24A,
- 0x698E, 0xE248, 0x6990, 0xE25E, 0x6991, 0xE246, 0x6993, 0xE258, 0x6994, 0xB77D, 0x6995, 0xBA5F, 0x6996, 0xE242, 0x6997, 0xE25D,
- 0x6999, 0xE247, 0x699A, 0xE255, 0x699B, 0xBA64, 0x699C, 0xBA5D, 0x699E, 0xE25B, 0x69A0, 0xE240, 0x69A1, 0xE25A, 0x69A3, 0xBA6F,
- 0x69A4, 0xE251, 0x69A5, 0xE261, 0x69A6, 0xBA6D, 0x69A7, 0xE249, 0x69A8, 0xBA5E, 0x69A9, 0xE24B, 0x69AA, 0xE259, 0x69AB, 0xBA67,
- 0x69AC, 0xE244, 0x69AD, 0xBA6B, 0x69AE, 0xBA61, 0x69AF, 0xE24D, 0x69B0, 0xE243, 0x69B1, 0xE1FC, 0x69B3, 0xE257, 0x69B4, 0xBA68,
- 0x69B5, 0xE260, 0x69B6, 0xE1FD, 0x69B7, 0xBA65, 0x69B9, 0xE253, 0x69BB, 0xBA66, 0x69BC, 0xE245, 0x69BD, 0xE250, 0x69BE, 0xE24C,
- 0x69BF, 0xE24E, 0x69C1, 0xBA60, 0x69C2, 0xE25F, 0x69C3, 0xBA6E, 0x69C4, 0xE24F, 0x69C6, 0xE262, 0x69C9, 0xE1FE, 0x69CA, 0xE254,
- 0x69CB, 0xBA63, 0x69CC, 0xBA6C, 0x69CD, 0xBA6A, 0x69CE, 0xE241, 0x69CF, 0xE256, 0x69D0, 0xBA69, 0x69D3, 0xBA62, 0x69D4, 0xE252,
- 0x69D9, 0xE25C, 0x69E2, 0xE5D5, 0x69E4, 0xE5D1, 0x69E5, 0xE5CD, 0x69E6, 0xE5E1, 0x69E7, 0xE5DE, 0x69E8, 0xBCCD, 0x69EB, 0xE5E5,
- 0x69EC, 0xE5D4, 0x69ED, 0xBCD8, 0x69EE, 0xE5DB, 0x69F1, 0xE5D0, 0x69F2, 0xE5DA, 0x69F3, 0xBCD5, 0x69F4, 0xE5EE, 0x69F6, 0xE5EB,
- 0x69F7, 0xE5DD, 0x69F8, 0xE5CE, 0x69FB, 0xE5E2, 0x69FC, 0xE5E4, 0x69FD, 0xBCD1, 0x69FE, 0xE5D8, 0x69FF, 0xE5D3, 0x6A00, 0xE5CA,
- 0x6A01, 0xBCCE, 0x6A02, 0xBCD6, 0x6A04, 0xE5E7, 0x6A05, 0xBCD7, 0x6A06, 0xE5CB, 0x6A07, 0xE5ED, 0x6A08, 0xE5E0, 0x6A09, 0xE5E6,
- 0x6A0A, 0xBCD4, 0x6A0D, 0xE5E3, 0x6A0F, 0xE5EA, 0x6A11, 0xBCD9, 0x6A13, 0xBCD3, 0x6A14, 0xE5DC, 0x6A15, 0xE5CF, 0x6A16, 0xE5EF,
- 0x6A17, 0xE5CC, 0x6A18, 0xE5E8, 0x6A19, 0xBCD0, 0x6A1B, 0xE5D6, 0x6A1D, 0xE5D7, 0x6A1E, 0xBCCF, 0x6A1F, 0xBCCC, 0x6A20, 0xE5D2,
- 0x6A21, 0xBCD2, 0x6A23, 0xBCCB, 0x6A25, 0xE5E9, 0x6A26, 0xE5EC, 0x6A27, 0xE5D9, 0x6A28, 0xE9CA, 0x6A32, 0xE9C2, 0x6A34, 0xE9BE,
- 0x6A35, 0xBEF6, 0x6A38, 0xBEEB, 0x6A39, 0xBEF0, 0x6A3A, 0xBEEC, 0x6A3B, 0xE9CC, 0x6A3C, 0xE9D7, 0x6A3D, 0xBEEA, 0x6A3E, 0xE9C4,
- 0x6A3F, 0xE9CD, 0x6A40, 0xE5DF, 0x6A41, 0xE9CE, 0x6A44, 0xBEF1, 0x6A46, 0xE9DD, 0x6A47, 0xBEF5, 0x6A48, 0xBEF8, 0x6A49, 0xE9C0,
- 0x6A4B, 0xBEF4, 0x6A4D, 0xE9DB, 0x6A4E, 0xE9DC, 0x6A4F, 0xE9D2, 0x6A50, 0xE9D1, 0x6A51, 0xE9C9, 0x6A54, 0xE9D3, 0x6A55, 0xE9DA,
- 0x6A56, 0xE9D9, 0x6A58, 0xBEEF, 0x6A59, 0xBEED, 0x6A5A, 0xE9CB, 0x6A5B, 0xE9C8, 0x6A5D, 0xE9C5, 0x6A5E, 0xE9D8, 0x6A5F, 0xBEF7,
- 0x6A60, 0xE9D6, 0x6A61, 0xBEF3, 0x6A62, 0xBEF2, 0x6A64, 0xE9D0, 0x6A66, 0xE9BF, 0x6A67, 0xE9C1, 0x6A68, 0xE9C3, 0x6A69, 0xE9D5,
- 0x6A6A, 0xE9CF, 0x6A6B, 0xBEEE, 0x6A6D, 0xE9C6, 0x6A6F, 0xE9D4, 0x6A76, 0xE9C7, 0x6A7E, 0xC0CF, 0x6A7F, 0xED45, 0x6A80, 0xC0C8,
- 0x6A81, 0xECF5, 0x6A83, 0xED41, 0x6A84, 0xC0CA, 0x6A85, 0xED48, 0x6A87, 0xECFC, 0x6A89, 0xECF7, 0x6A8C, 0xED49, 0x6A8D, 0xECF3,
- 0x6A8E, 0xECFE, 0x6A90, 0xC0D1, 0x6A91, 0xED44, 0x6A92, 0xED4A, 0x6A93, 0xECFD, 0x6A94, 0xC0C9, 0x6A95, 0xED40, 0x6A96, 0xECF4,
- 0x6A97, 0xC0D0, 0x6A9A, 0xED47, 0x6A9B, 0xECF9, 0x6A9C, 0xC0CC, 0x6A9E, 0xECFB, 0x6A9F, 0xECF8, 0x6AA0, 0xC0D2, 0x6AA1, 0xECFA,
- 0x6AA2, 0xC0CB, 0x6AA3, 0xC0CE, 0x6AA4, 0xED43, 0x6AA5, 0xECF6, 0x6AA6, 0xED46, 0x6AA8, 0xED42, 0x6AAC, 0xC263, 0x6AAD, 0xEFE7,
- 0x6AAE, 0xC268, 0x6AAF, 0xC269, 0x6AB3, 0xC262, 0x6AB4, 0xEFE6, 0x6AB6, 0xEFE3, 0x6AB7, 0xEFE4, 0x6AB8, 0xC266, 0x6AB9, 0xEFDE,
- 0x6ABA, 0xEFE2, 0x6ABB, 0xC265, 0x6ABD, 0xEFDF, 0x6AC2, 0xC267, 0x6AC3, 0xC264, 0x6AC5, 0xEFDD, 0x6AC6, 0xEFE1, 0x6AC7, 0xEFE5,
- 0x6ACB, 0xF251, 0x6ACC, 0xF24E, 0x6ACD, 0xF257, 0x6ACF, 0xF256, 0x6AD0, 0xF254, 0x6AD1, 0xF24F, 0x6AD3, 0xC372, 0x6AD9, 0xF250,
- 0x6ADA, 0xC371, 0x6ADB, 0xC0CD, 0x6ADC, 0xF253, 0x6ADD, 0xC370, 0x6ADE, 0xF258, 0x6ADF, 0xF252, 0x6AE0, 0xF24D, 0x6AE1, 0xEFE0,
- 0x6AE5, 0xC36F, 0x6AE7, 0xF24C, 0x6AE8, 0xF456, 0x6AEA, 0xF455, 0x6AEB, 0xF255, 0x6AEC, 0xC468, 0x6AEE, 0xF459, 0x6AEF, 0xF45A,
- 0x6AF0, 0xF454, 0x6AF1, 0xF458, 0x6AF3, 0xF453, 0x6AF8, 0xF5D1, 0x6AF9, 0xF457, 0x6AFA, 0xC4E7, 0x6AFB, 0xC4E5, 0x6AFC, 0xF5CF,
- 0x6B00, 0xF5D2, 0x6B02, 0xF5CE, 0x6B03, 0xF5D0, 0x6B04, 0xC4E6, 0x6B08, 0xF6E5, 0x6B09, 0xF6E6, 0x6B0A, 0xC576, 0x6B0B, 0xF6E4,
- 0x6B0F, 0xF7E2, 0x6B10, 0xC5CF, 0x6B11, 0xF7E0, 0x6B12, 0xF7E1, 0x6B13, 0xF8AC, 0x6B16, 0xC656, 0x6B17, 0xF8F3, 0x6B18, 0xF8F1,
- 0x6B19, 0xF8F2, 0x6B1A, 0xF8F4, 0x6B1E, 0xF9BB, 0x6B20, 0xA4ED, 0x6B21, 0xA6B8, 0x6B23, 0xAA59, 0x6B25, 0xCCE9, 0x6B28, 0xCF64,
- 0x6B2C, 0xD1F5, 0x6B2D, 0xD1F7, 0x6B2F, 0xD1F6, 0x6B31, 0xD1F8, 0x6B32, 0xB1FD, 0x6B33, 0xD5D7, 0x6B34, 0xD1F9, 0x6B36, 0xD5D6,
- 0x6B37, 0xD5D8, 0x6B38, 0xD5D9, 0x6B39, 0xD9DA, 0x6B3A, 0xB4DB, 0x6B3B, 0xD9DB, 0x6B3C, 0xD9DD, 0x6B3D, 0xB4DC, 0x6B3E, 0xB4DA,
- 0x6B3F, 0xD9DC, 0x6B41, 0xDDFA, 0x6B42, 0xDDF8, 0x6B43, 0xDDF7, 0x6B45, 0xDDF6, 0x6B46, 0xDDF5, 0x6B47, 0xB7B2, 0x6B48, 0xDDF9,
- 0x6B49, 0xBA70, 0x6B4A, 0xE263, 0x6B4B, 0xE265, 0x6B4C, 0xBA71, 0x6B4D, 0xE264, 0x6B4E, 0xBCDB, 0x6B50, 0xBCDA, 0x6B51, 0xE5F0,
- 0x6B54, 0xE9DF, 0x6B55, 0xE9DE, 0x6B56, 0xE9E0, 0x6B59, 0xBEF9, 0x6B5B, 0xED4B, 0x6B5C, 0xC0D3, 0x6B5E, 0xEFE8, 0x6B5F, 0xC26A,
- 0x6B60, 0xF259, 0x6B61, 0xC577, 0x6B62, 0xA4EE, 0x6B63, 0xA5BF, 0x6B64, 0xA6B9, 0x6B65, 0xA842, 0x6B66, 0xAA5A, 0x6B67, 0xAA5B,
- 0x6B6A, 0xAC6E, 0x6B6D, 0xD1FA, 0x6B72, 0xB7B3, 0x6B76, 0xE6D1, 0x6B77, 0xBEFA, 0x6B78, 0xC26B, 0x6B79, 0xA4EF, 0x6B7B, 0xA6BA,
- 0x6B7E, 0xCCEB, 0x6B7F, 0xAA5C, 0x6B80, 0xCCEA, 0x6B82, 0xCF65, 0x6B83, 0xAC6F, 0x6B84, 0xCF66, 0x6B86, 0xAC70, 0x6B88, 0xD1FC,
- 0x6B89, 0xAEEE, 0x6B8A, 0xAEED, 0x6B8C, 0xD5DE, 0x6B8D, 0xD5DC, 0x6B8E, 0xD5DD, 0x6B8F, 0xD5DB, 0x6B91, 0xD5DA, 0x6B94, 0xD9DE,
- 0x6B95, 0xD9E1, 0x6B96, 0xB4DE, 0x6B97, 0xD9DF, 0x6B98, 0xB4DD, 0x6B99, 0xD9E0, 0x6B9B, 0xDDFB, 0x6B9E, 0xE266, 0x6B9F, 0xE267,
- 0x6BA0, 0xE268, 0x6BA2, 0xE5F3, 0x6BA3, 0xE5F2, 0x6BA4, 0xBCDC, 0x6BA5, 0xE5F1, 0x6BA6, 0xE5F4, 0x6BA7, 0xE9E1, 0x6BAA, 0xE9E2,
- 0x6BAB, 0xE9E3, 0x6BAD, 0xED4C, 0x6BAE, 0xC0D4, 0x6BAF, 0xC26C, 0x6BB0, 0xF25A, 0x6BB2, 0xC4E8, 0x6BB3, 0xC95F, 0x6BB5, 0xAC71,
- 0x6BB6, 0xCF67, 0x6BB7, 0xAEEF, 0x6BBA, 0xB1FE, 0x6BBC, 0xB4DF, 0x6BBD, 0xD9E2, 0x6BBF, 0xB7B5, 0x6BC0, 0xB7B4, 0x6BC3, 0xE269,
- 0x6BC4, 0xE26A, 0x6BC5, 0xBCDD, 0x6BC6, 0xBCDE, 0x6BC7, 0xE9E5, 0x6BC8, 0xE9E4, 0x6BC9, 0xEFE9, 0x6BCA, 0xF7E3, 0x6BCB, 0xA4F0,
- 0x6BCC, 0xC960, 0x6BCD, 0xA5C0, 0x6BCF, 0xA843, 0x6BD0, 0xCB48, 0x6BD2, 0xAC72, 0x6BD3, 0xB7B6, 0x6BD4, 0xA4F1, 0x6BD6, 0xCF68,
- 0x6BD7, 0xAC73, 0x6BD8, 0xCF69, 0x6BDA, 0xC0D5, 0x6BDB, 0xA4F2, 0x6BDE, 0xCCEC, 0x6BE0, 0xCF6A, 0x6BE2, 0xD242, 0x6BE3, 0xD241,
- 0x6BE4, 0xD1FE, 0x6BE6, 0xD1FD, 0x6BE7, 0xD243, 0x6BE8, 0xD240, 0x6BEB, 0xB240, 0x6BEC, 0xB241, 0x6BEF, 0xB4E0, 0x6BF0, 0xD9E3,
- 0x6BF2, 0xD9E4, 0x6BF3, 0xD9E5, 0x6BF7, 0xDE41, 0x6BF8, 0xDE42, 0x6BF9, 0xDE40, 0x6BFB, 0xDDFD, 0x6BFC, 0xDDFE, 0x6BFD, 0xB7B7,
- 0x6BFE, 0xE26B, 0x6BFF, 0xE5F7, 0x6C00, 0xE5F6, 0x6C01, 0xE5F5, 0x6C02, 0xE5F8, 0x6C03, 0xE9E7, 0x6C04, 0xE9E6, 0x6C05, 0xBEFB,
- 0x6C06, 0xE9E8, 0x6C08, 0xC0D6, 0x6C09, 0xED4D, 0x6C0B, 0xEFEA, 0x6C0C, 0xF25B, 0x6C0D, 0xF6E7, 0x6C0F, 0xA4F3, 0x6C10, 0xA5C2,
- 0x6C11, 0xA5C1, 0x6C13, 0xAA5D, 0x6C14, 0xC961, 0x6C15, 0xC97E, 0x6C16, 0xA6BB, 0x6C18, 0xC9F7, 0x6C19, 0xCB49, 0x6C1A, 0xCB4A,
- 0x6C1B, 0xAA5E, 0x6C1D, 0xCCED, 0x6C1F, 0xAC74, 0x6C20, 0xCF6B, 0x6C21, 0xCF6C, 0x6C23, 0xAEF0, 0x6C24, 0xAEF4, 0x6C25, 0xD244,
- 0x6C26, 0xAEF3, 0x6C27, 0xAEF1, 0x6C28, 0xAEF2, 0x6C2A, 0xD5DF, 0x6C2B, 0xB242, 0x6C2C, 0xB4E3, 0x6C2E, 0xB4E1, 0x6C2F, 0xB4E2,
- 0x6C30, 0xD9E6, 0x6C33, 0xBA72, 0x6C34, 0xA4F4, 0x6C36, 0xC9A1, 0x6C38, 0xA5C3, 0x6C3B, 0xC9A4, 0x6C3E, 0xA5C6, 0x6C3F, 0xC9A3,
- 0x6C40, 0xA5C5, 0x6C41, 0xA5C4, 0x6C42, 0xA844, 0x6C43, 0xC9A2, 0x6C46, 0xC9F8, 0x6C4A, 0xC9FC, 0x6C4B, 0xC9FE, 0x6C4C, 0xCA40,
- 0x6C4D, 0xA6C5, 0x6C4E, 0xA6C6, 0x6C4F, 0xC9FB, 0x6C50, 0xA6C1, 0x6C52, 0xC9F9, 0x6C54, 0xC9FD, 0x6C55, 0xA6C2, 0x6C57, 0xA6BD,
- 0x6C59, 0xA6BE, 0x6C5B, 0xA6C4, 0x6C5C, 0xC9FA, 0x6C5D, 0xA6BC, 0x6C5E, 0xA845, 0x6C5F, 0xA6BF, 0x6C60, 0xA6C0, 0x6C61, 0xA6C3,
- 0x6C65, 0xCB5B, 0x6C66, 0xCB59, 0x6C67, 0xCB4C, 0x6C68, 0xA851, 0x6C69, 0xCB53, 0x6C6A, 0xA84C, 0x6C6B, 0xCB4D, 0x6C6D, 0xCB55,
- 0x6C6F, 0xCB52, 0x6C70, 0xA84F, 0x6C71, 0xCB51, 0x6C72, 0xA856, 0x6C73, 0xCB5A, 0x6C74, 0xA858, 0x6C76, 0xA85A, 0x6C78, 0xCB4B,
- 0x6C7A, 0xA84D, 0x6C7B, 0xCB5C, 0x6C7D, 0xA854, 0x6C7E, 0xA857, 0x6C80, 0xCD45, 0x6C81, 0xA847, 0x6C82, 0xA85E, 0x6C83, 0xA855,
- 0x6C84, 0xCB4E, 0x6C85, 0xA84A, 0x6C86, 0xA859, 0x6C87, 0xCB56, 0x6C88, 0xA848, 0x6C89, 0xA849, 0x6C8A, 0xCD43, 0x6C8B, 0xCB4F,
- 0x6C8C, 0xA850, 0x6C8D, 0xA85B, 0x6C8E, 0xCB5D, 0x6C8F, 0xCB50, 0x6C90, 0xA84E, 0x6C92, 0xA853, 0x6C93, 0xCCEE, 0x6C94, 0xA85C,
- 0x6C95, 0xCB57, 0x6C96, 0xA852, 0x6C98, 0xA85D, 0x6C99, 0xA846, 0x6C9A, 0xCB54, 0x6C9B, 0xA84B, 0x6C9C, 0xCB58, 0x6C9D, 0xCD44,
- 0x6CAB, 0xAA6A, 0x6CAC, 0xAA7A, 0x6CAD, 0xCCF5, 0x6CAE, 0xAA71, 0x6CB0, 0xCD4B, 0x6CB1, 0xAA62, 0x6CB3, 0xAA65, 0x6CB4, 0xCD42,
- 0x6CB6, 0xCCF3, 0x6CB7, 0xCCF7, 0x6CB8, 0xAA6D, 0x6CB9, 0xAA6F, 0x6CBA, 0xCCFA, 0x6CBB, 0xAA76, 0x6CBC, 0xAA68, 0x6CBD, 0xAA66,
- 0x6CBE, 0xAA67, 0x6CBF, 0xAA75, 0x6CC0, 0xCD47, 0x6CC1, 0xAA70, 0x6CC2, 0xCCF9, 0x6CC3, 0xCCFB, 0x6CC4, 0xAA6E, 0x6CC5, 0xAA73,
- 0x6CC6, 0xCCFC, 0x6CC7, 0xCD4A, 0x6CC9, 0xAC75, 0x6CCA, 0xAA79, 0x6CCC, 0xAA63, 0x6CCD, 0xCD49, 0x6CCF, 0xCD4D, 0x6CD0, 0xCCF8,
- 0x6CD1, 0xCD4F, 0x6CD2, 0xCD40, 0x6CD3, 0xAA6C, 0x6CD4, 0xCCF4, 0x6CD5, 0xAA6B, 0x6CD6, 0xAA7D, 0x6CD7, 0xAA72, 0x6CD9, 0xCCF2,
- 0x6CDA, 0xCF75, 0x6CDB, 0xAA78, 0x6CDC, 0xAA7C, 0x6CDD, 0xCD41, 0x6CDE, 0xCD46, 0x6CE0, 0xAA7E, 0x6CE1, 0xAA77, 0x6CE2, 0xAA69,
- 0x6CE3, 0xAA5F, 0x6CE5, 0xAA64, 0x6CE7, 0xCCF6, 0x6CE8, 0xAA60, 0x6CE9, 0xCD4E, 0x6CEB, 0xCCF0, 0x6CEC, 0xCCEF, 0x6CED, 0xCCFD,
- 0x6CEE, 0xCCF1, 0x6CEF, 0xAA7B, 0x6CF0, 0xAEF5, 0x6CF1, 0xAA74, 0x6CF2, 0xCCFE, 0x6CF3, 0xAA61, 0x6CF5, 0xACA6, 0x6CF9, 0xCD4C,
- 0x6D00, 0xCF7C, 0x6D01, 0xCFA1, 0x6D03, 0xCFA4, 0x6D04, 0xCF77, 0x6D07, 0xCFA7, 0x6D08, 0xCFAA, 0x6D09, 0xCFAC, 0x6D0A, 0xCF74,
- 0x6D0B, 0xAC76, 0x6D0C, 0xAC7B, 0x6D0D, 0xD249, 0x6D0E, 0xACAD, 0x6D0F, 0xCFA5, 0x6D10, 0xCFAD, 0x6D11, 0xCF7B, 0x6D12, 0xCF73,
- 0x6D16, 0xD264, 0x6D17, 0xAC7E, 0x6D18, 0xCFA2, 0x6D19, 0xCF78, 0x6D1A, 0xCF7A, 0x6D1B, 0xACA5, 0x6D1D, 0xCF7D, 0x6D1E, 0xAC7D,
- 0x6D1F, 0xCF70, 0x6D20, 0xCFA8, 0x6D22, 0xCFAB, 0x6D25, 0xAC7A, 0x6D27, 0xACA8, 0x6D28, 0xCF6D, 0x6D29, 0xACAA, 0x6D2A, 0xAC78,
- 0x6D2B, 0xACAE, 0x6D2C, 0xCFA9, 0x6D2D, 0xCF6F, 0x6D2E, 0xACAB, 0x6D2F, 0xD25E, 0x6D30, 0xCD48, 0x6D31, 0xAC7C, 0x6D32, 0xAC77,
- 0x6D33, 0xCF76, 0x6D34, 0xCF6E, 0x6D35, 0xACAC, 0x6D36, 0xACA4, 0x6D37, 0xCFA3, 0x6D38, 0xACA9, 0x6D39, 0xACA7, 0x6D3A, 0xCF79,
- 0x6D3B, 0xACA1, 0x6D3C, 0xCF71, 0x6D3D, 0xACA2, 0x6D3E, 0xACA3, 0x6D3F, 0xCF72, 0x6D40, 0xCFA6, 0x6D41, 0xAC79, 0x6D42, 0xCF7E,
- 0x6D58, 0xD24C, 0x6D59, 0xAEFD, 0x6D5A, 0xAF43, 0x6D5E, 0xD255, 0x6D5F, 0xD25B, 0x6D60, 0xD257, 0x6D61, 0xD24A, 0x6D62, 0xD24D,
- 0x6D63, 0xD246, 0x6D64, 0xD247, 0x6D65, 0xAF4A, 0x6D66, 0xAEFA, 0x6D67, 0xD256, 0x6D68, 0xD25F, 0x6D69, 0xAF45, 0x6D6A, 0xAEF6,
- 0x6D6C, 0xAF40, 0x6D6D, 0xD24E, 0x6D6E, 0xAF42, 0x6D6F, 0xD24F, 0x6D70, 0xD259, 0x6D74, 0xAF44, 0x6D75, 0xD268, 0x6D76, 0xD248,
- 0x6D77, 0xAEFC, 0x6D78, 0xAEFB, 0x6D79, 0xAF48, 0x6D7A, 0xD245, 0x6D7B, 0xD266, 0x6D7C, 0xD25A, 0x6D7D, 0xD267, 0x6D7E, 0xD261,
- 0x6D7F, 0xD253, 0x6D80, 0xD262, 0x6D82, 0xD25C, 0x6D83, 0xD265, 0x6D84, 0xD263, 0x6D85, 0xAF49, 0x6D86, 0xD254, 0x6D87, 0xAEF9,
- 0x6D88, 0xAEF8, 0x6D89, 0xAF41, 0x6D8A, 0xAF47, 0x6D8B, 0xD260, 0x6D8C, 0xAF46, 0x6D8D, 0xD251, 0x6D8E, 0xB243, 0x6D90, 0xD269,
- 0x6D91, 0xD250, 0x6D92, 0xD24B, 0x6D93, 0xAEFE, 0x6D94, 0xAF4B, 0x6D95, 0xAEF7, 0x6D97, 0xD258, 0x6D98, 0xD25D, 0x6DAA, 0xB265,
- 0x6DAB, 0xD5E1, 0x6DAC, 0xD5E5, 0x6DAE, 0xB252, 0x6DAF, 0xB250, 0x6DB2, 0xB247, 0x6DB3, 0xD5E3, 0x6DB4, 0xD5E2, 0x6DB5, 0xB25B,
- 0x6DB7, 0xD5E8, 0x6DB8, 0xB255, 0x6DBA, 0xD5FA, 0x6DBB, 0xD647, 0x6DBC, 0xB244, 0x6DBD, 0xD5F7, 0x6DBE, 0xD5F0, 0x6DBF, 0xB267,
- 0x6DC0, 0xD5E0, 0x6DC2, 0xD5FC, 0x6DC4, 0xB264, 0x6DC5, 0xB258, 0x6DC6, 0xB263, 0x6DC7, 0xB24E, 0x6DC8, 0xD5EC, 0x6DC9, 0xD5FE,
- 0x6DCA, 0xD5F6, 0x6DCB, 0xB24F, 0x6DCC, 0xB249, 0x6DCD, 0xD645, 0x6DCF, 0xD5FD, 0x6DD0, 0xD640, 0x6DD1, 0xB251, 0x6DD2, 0xB259,
- 0x6DD3, 0xD642, 0x6DD4, 0xD5EA, 0x6DD5, 0xD5FB, 0x6DD6, 0xD5EF, 0x6DD7, 0xD644, 0x6DD8, 0xB25E, 0x6DD9, 0xB246, 0x6DDA, 0xB25C,
- 0x6DDB, 0xD5F4, 0x6DDC, 0xD5F2, 0x6DDD, 0xD5F3, 0x6DDE, 0xB253, 0x6DDF, 0xD5EE, 0x6DE0, 0xD5ED, 0x6DE1, 0xB248, 0x6DE2, 0xD5E7,
- 0x6DE3, 0xD646, 0x6DE4, 0xB24A, 0x6DE5, 0xD5F1, 0x6DE6, 0xB268, 0x6DE8, 0xB262, 0x6DE9, 0xD5E6, 0x6DEA, 0xB25F, 0x6DEB, 0xB25D,
- 0x6DEC, 0xB266, 0x6DED, 0xD5F8, 0x6DEE, 0xB261, 0x6DEF, 0xD252, 0x6DF0, 0xD5F9, 0x6DF1, 0xB260, 0x6DF2, 0xD641, 0x6DF3, 0xB245,
- 0x6DF4, 0xD5F5, 0x6DF5, 0xB257, 0x6DF6, 0xD5E9, 0x6DF7, 0xB256, 0x6DF9, 0xB254, 0x6DFA, 0xB24C, 0x6DFB, 0xB24B, 0x6DFC, 0xD9E7,
- 0x6DFD, 0xD643, 0x6E00, 0xD5EB, 0x6E03, 0xD9FC, 0x6E05, 0xB24D, 0x6E19, 0xB541, 0x6E1A, 0xB25A, 0x6E1B, 0xB4EE, 0x6E1C, 0xD9F6,
- 0x6E1D, 0xB4FC, 0x6E1F, 0xD9EA, 0x6E20, 0xB4EB, 0x6E21, 0xB4E7, 0x6E22, 0xDA49, 0x6E23, 0xB4ED, 0x6E24, 0xB4F1, 0x6E25, 0xB4EC,
- 0x6E26, 0xB4F5, 0x6E27, 0xDA4D, 0x6E28, 0xDA44, 0x6E2B, 0xD9F1, 0x6E2C, 0xB4FA, 0x6E2D, 0xB4F4, 0x6E2E, 0xD9FD, 0x6E2F, 0xB4E4,
- 0x6E30, 0xDA4A, 0x6E31, 0xDA43, 0x6E32, 0xB4E8, 0x6E33, 0xD9F7, 0x6E34, 0xB4F7, 0x6E35, 0xDA55, 0x6E36, 0xDA56, 0x6E38, 0xB4E5,
- 0x6E39, 0xDA48, 0x6E3A, 0xB4F9, 0x6E3B, 0xD9FB, 0x6E3C, 0xD9ED, 0x6E3D, 0xD9EE, 0x6E3E, 0xB4FD, 0x6E3F, 0xD9F2, 0x6E40, 0xD9F9,
- 0x6E41, 0xD9F3, 0x6E43, 0xB4FB, 0x6E44, 0xB544, 0x6E45, 0xD9EF, 0x6E46, 0xD9E8, 0x6E47, 0xD9E9, 0x6E49, 0xD9EB, 0x6E4A, 0xB4EA,
- 0x6E4B, 0xD9F8, 0x6E4D, 0xB4F8, 0x6E4E, 0xB542, 0x6E51, 0xD9FA, 0x6E52, 0xDA53, 0x6E53, 0xDA4B, 0x6E54, 0xB4E6, 0x6E55, 0xDA51,
- 0x6E56, 0xB4F2, 0x6E58, 0xB4F0, 0x6E5A, 0xDA57, 0x6E5B, 0xB4EF, 0x6E5C, 0xDA41, 0x6E5D, 0xD9F4, 0x6E5E, 0xD9FE, 0x6E5F, 0xB547,
- 0x6E60, 0xDA45, 0x6E61, 0xDA42, 0x6E62, 0xD9F0, 0x6E63, 0xB543, 0x6E64, 0xDA4F, 0x6E65, 0xDA4C, 0x6E66, 0xDA54, 0x6E67, 0xB4E9,
- 0x6E68, 0xDA40, 0x6E69, 0xB546, 0x6E6B, 0xDA47, 0x6E6E, 0xB4F3, 0x6E6F, 0xB4F6, 0x6E71, 0xDA46, 0x6E72, 0xB545, 0x6E73, 0xD9F5,
- 0x6E74, 0xD5E4, 0x6E77, 0xDA50, 0x6E78, 0xDA4E, 0x6E79, 0xDA52, 0x6E88, 0xD9EC, 0x6E89, 0xB540, 0x6E8D, 0xDE61, 0x6E8E, 0xDE60,
- 0x6E8F, 0xDE46, 0x6E90, 0xB7BD, 0x6E92, 0xDE5F, 0x6E93, 0xDE49, 0x6E94, 0xDE4A, 0x6E96, 0xB7C7, 0x6E97, 0xDE68, 0x6E98, 0xB7C2,
- 0x6E99, 0xDE5E, 0x6E9B, 0xDE43, 0x6E9C, 0xB7C8, 0x6E9D, 0xB7BE, 0x6E9E, 0xDE52, 0x6E9F, 0xDE48, 0x6EA0, 0xDE4B, 0x6EA1, 0xDE63,
- 0x6EA2, 0xB7B8, 0x6EA3, 0xDE6A, 0x6EA4, 0xDE62, 0x6EA5, 0xB7C1, 0x6EA6, 0xDE57, 0x6EA7, 0xB7CC, 0x6EAA, 0xB7CB, 0x6EAB, 0xB7C5,
- 0x6EAE, 0xDE69, 0x6EAF, 0xB7B9, 0x6EB0, 0xDE55, 0x6EB1, 0xDE4C, 0x6EB2, 0xDE59, 0x6EB3, 0xDE65, 0x6EB4, 0xB7CD, 0x6EB6, 0xB7BB,
- 0x6EB7, 0xDE54, 0x6EB9, 0xDE4D, 0x6EBA, 0xB7C4, 0x6EBC, 0xB7C3, 0x6EBD, 0xDE50, 0x6EBE, 0xDE5A, 0x6EBF, 0xDE64, 0x6EC0, 0xDE47,
- 0x6EC1, 0xDE51, 0x6EC2, 0xB7BC, 0x6EC3, 0xDE5B, 0x6EC4, 0xB7C9, 0x6EC5, 0xB7C0, 0x6EC6, 0xDE4E, 0x6EC7, 0xB7BF, 0x6EC8, 0xDE45,
- 0x6EC9, 0xDE53, 0x6ECA, 0xDE67, 0x6ECB, 0xB4FE, 0x6ECC, 0xBAB0, 0x6ECD, 0xDE56, 0x6ECE, 0xE26C, 0x6ECF, 0xDE58, 0x6ED0, 0xDE66,
- 0x6ED1, 0xB7C6, 0x6ED2, 0xDE4F, 0x6ED3, 0xB7BA, 0x6ED4, 0xB7CA, 0x6ED5, 0xBCF0, 0x6ED6, 0xDE44, 0x6ED8, 0xDE5D, 0x6EDC, 0xDE5C,
- 0x6EEB, 0xE2AA, 0x6EEC, 0xBAAD, 0x6EED, 0xE27D, 0x6EEE, 0xE2A4, 0x6EEF, 0xBAA2, 0x6EF1, 0xE26E, 0x6EF2, 0xBAAF, 0x6EF4, 0xBA77,
- 0x6EF5, 0xE26D, 0x6EF6, 0xE2B0, 0x6EF7, 0xBAB1, 0x6EF8, 0xE271, 0x6EF9, 0xE2A3, 0x6EFB, 0xE273, 0x6EFC, 0xE2B3, 0x6EFD, 0xE2AF,
- 0x6EFE, 0xBA75, 0x6EFF, 0xBAA1, 0x6F00, 0xE653, 0x6F01, 0xBAAE, 0x6F02, 0xBA7D, 0x6F03, 0xE26F, 0x6F05, 0xE2AE, 0x6F06, 0xBAA3,
- 0x6F07, 0xE2AB, 0x6F08, 0xE2B8, 0x6F09, 0xE275, 0x6F0A, 0xE27E, 0x6F0D, 0xE2B6, 0x6F0E, 0xE2AC, 0x6F0F, 0xBA7C, 0x6F12, 0xE27C,
- 0x6F13, 0xBA76, 0x6F14, 0xBA74, 0x6F15, 0xBAA8, 0x6F18, 0xE27A, 0x6F19, 0xE277, 0x6F1A, 0xE278, 0x6F1C, 0xE2B2, 0x6F1E, 0xE2B7,
- 0x6F1F, 0xE2B5, 0x6F20, 0xBA7A, 0x6F21, 0xE2B9, 0x6F22, 0xBA7E, 0x6F23, 0xBAA7, 0x6F25, 0xE270, 0x6F26, 0xE5FA, 0x6F27, 0xE279,
- 0x6F29, 0xBA78, 0x6F2A, 0xBAAC, 0x6F2B, 0xBAA9, 0x6F2C, 0xBA7B, 0x6F2D, 0xE2A5, 0x6F2E, 0xE274, 0x6F2F, 0xBAAA, 0x6F30, 0xE2A7,
- 0x6F31, 0xBAA4, 0x6F32, 0xBAA6, 0x6F33, 0xBA73, 0x6F35, 0xE2A9, 0x6F36, 0xE2A1, 0x6F37, 0xE272, 0x6F38, 0xBAA5, 0x6F39, 0xE2B1,
- 0x6F3A, 0xE2B4, 0x6F3B, 0xE27B, 0x6F3C, 0xE2A8, 0x6F3E, 0xBA79, 0x6F3F, 0xBCDF, 0x6F40, 0xE2A6, 0x6F41, 0xE5F9, 0x6F43, 0xE2AD,
- 0x6F4E, 0xE276, 0x6F4F, 0xE644, 0x6F50, 0xE64E, 0x6F51, 0xBCE2, 0x6F52, 0xE64D, 0x6F53, 0xE659, 0x6F54, 0xBCE4, 0x6F55, 0xE64B,
- 0x6F57, 0xE64F, 0x6F58, 0xBCEF, 0x6F5A, 0xE646, 0x6F5B, 0xBCE7, 0x6F5D, 0xE652, 0x6F5E, 0xE9F0, 0x6F5F, 0xBCF3, 0x6F60, 0xBCF2,
- 0x6F61, 0xE654, 0x6F62, 0xE643, 0x6F63, 0xE65E, 0x6F64, 0xBCED, 0x6F66, 0xBCE3, 0x6F67, 0xE657, 0x6F69, 0xE65B, 0x6F6A, 0xE660,
- 0x6F6B, 0xE655, 0x6F6C, 0xE649, 0x6F6D, 0xBCE6, 0x6F6E, 0xBCE9, 0x6F6F, 0xBCF1, 0x6F70, 0xBCEC, 0x6F72, 0xE64C, 0x6F73, 0xE2A2,
- 0x6F76, 0xE648, 0x6F77, 0xE65F, 0x6F78, 0xBCE8, 0x6F7A, 0xBCEB, 0x6F7B, 0xE661, 0x6F7C, 0xBCE0, 0x6F7D, 0xE656, 0x6F7E, 0xE5FB,
- 0x6F7F, 0xE65C, 0x6F80, 0xC0DF, 0x6F82, 0xE64A, 0x6F84, 0xBCE1, 0x6F85, 0xE645, 0x6F86, 0xBCE5, 0x6F87, 0xE5FC, 0x6F88, 0xBAAB,
- 0x6F89, 0xE641, 0x6F8B, 0xE65A, 0x6F8C, 0xE642, 0x6F8D, 0xE640, 0x6F8E, 0xBCEA, 0x6F90, 0xE658, 0x6F92, 0xE5FE, 0x6F93, 0xE651,
- 0x6F94, 0xE650, 0x6F95, 0xE65D, 0x6F96, 0xE647, 0x6F97, 0xBCEE, 0x6F9E, 0xE9F3, 0x6FA0, 0xBF49, 0x6FA1, 0xBEFE, 0x6FA2, 0xEA40,
- 0x6FA3, 0xE9EB, 0x6FA4, 0xBF41, 0x6FA5, 0xE9F7, 0x6FA6, 0xBF48, 0x6FA7, 0xBF43, 0x6FA8, 0xE9F5, 0x6FA9, 0xED4F, 0x6FAA, 0xE9FB,
- 0x6FAB, 0xEA42, 0x6FAC, 0xE9FA, 0x6FAD, 0xE9E9, 0x6FAE, 0xE9F8, 0x6FAF, 0xEA44, 0x6FB0, 0xEA46, 0x6FB1, 0xBEFD, 0x6FB2, 0xEA45,
- 0x6FB3, 0xBF44, 0x6FB4, 0xBF4A, 0x6FB6, 0xBF47, 0x6FB8, 0xE9FE, 0x6FB9, 0xBF46, 0x6FBA, 0xE9F9, 0x6FBC, 0xE9ED, 0x6FBD, 0xE9F2,
- 0x6FBF, 0xE9FD, 0x6FC0, 0xBF45, 0x6FC1, 0xBF42, 0x6FC2, 0xBEFC, 0x6FC3, 0xBF40, 0x6FC4, 0xE9F1, 0x6FC6, 0xE5FD, 0x6FC7, 0xE9EC,
- 0x6FC8, 0xE9EF, 0x6FC9, 0xEA41, 0x6FCA, 0xE9F4, 0x6FCB, 0xE9EA, 0x6FCC, 0xED4E, 0x6FCD, 0xEA43, 0x6FCE, 0xE9EE, 0x6FCF, 0xE9FC,
- 0x6FD4, 0xED51, 0x6FD5, 0xC0E3, 0x6FD8, 0xC0D7, 0x6FDB, 0xC0DB, 0x6FDC, 0xED53, 0x6FDD, 0xED59, 0x6FDE, 0xED57, 0x6FDF, 0xC0D9,
- 0x6FE0, 0xC0DA, 0x6FE1, 0xC0E1, 0x6FE2, 0xED5A, 0x6FE3, 0xED52, 0x6FE4, 0xC0DC, 0x6FE6, 0xED56, 0x6FE7, 0xED55, 0x6FE8, 0xED5B,
- 0x6FE9, 0xC0E2, 0x6FEB, 0xC0DD, 0x6FEC, 0xC0E0, 0x6FED, 0xED54, 0x6FEE, 0xC0E4, 0x6FEF, 0xC0DE, 0x6FF0, 0xC0E5, 0x6FF1, 0xC0D8,
- 0x6FF2, 0xED58, 0x6FF4, 0xED50, 0x6FF7, 0xEFF7, 0x6FFA, 0xC271, 0x6FFB, 0xEFF4, 0x6FFC, 0xEFF6, 0x6FFE, 0xC26F, 0x6FFF, 0xEFF2,
- 0x7000, 0xEFF3, 0x7001, 0xEFEE, 0x7004, 0xE9F6, 0x7005, 0xEFEF, 0x7006, 0xC270, 0x7007, 0xEFEB, 0x7009, 0xC26D, 0x700A, 0xEFF8,
- 0x700B, 0xC26E, 0x700C, 0xEFEC, 0x700D, 0xEFED, 0x700E, 0xEFF1, 0x700F, 0xC273, 0x7011, 0xC272, 0x7014, 0xEFF0, 0x7015, 0xC378,
- 0x7016, 0xF25F, 0x7017, 0xF265, 0x7018, 0xC379, 0x7019, 0xF25C, 0x701A, 0xC376, 0x701B, 0xC373, 0x701C, 0xF267, 0x701D, 0xC377,
- 0x701F, 0xC374, 0x7020, 0xF25E, 0x7021, 0xF261, 0x7022, 0xF262, 0x7023, 0xF263, 0x7024, 0xF266, 0x7026, 0xEFF5, 0x7027, 0xF25D,
- 0x7028, 0xC375, 0x7029, 0xF264, 0x702A, 0xF268, 0x702B, 0xF260, 0x702F, 0xF45D, 0x7030, 0xC46A, 0x7031, 0xF460, 0x7032, 0xC46B,
- 0x7033, 0xF468, 0x7034, 0xF45F, 0x7035, 0xF45C, 0x7037, 0xF45E, 0x7038, 0xF462, 0x7039, 0xF465, 0x703A, 0xF464, 0x703B, 0xF467,
- 0x703C, 0xF45B, 0x703E, 0xC469, 0x703F, 0xF463, 0x7040, 0xF466, 0x7041, 0xF469, 0x7042, 0xF461, 0x7043, 0xF5D3, 0x7044, 0xF5D4,
- 0x7045, 0xF5D8, 0x7046, 0xF5D9, 0x7048, 0xF5D6, 0x7049, 0xF5D7, 0x704A, 0xF5D5, 0x704C, 0xC4E9, 0x7051, 0xC578, 0x7052, 0xF6EB,
- 0x7055, 0xF6E8, 0x7056, 0xF6E9, 0x7057, 0xF6EA, 0x7058, 0xC579, 0x705A, 0xF7E5, 0x705B, 0xF7E4, 0x705D, 0xF8AF, 0x705E, 0xC5F4,
- 0x705F, 0xF8AD, 0x7060, 0xF8B0, 0x7061, 0xF8AE, 0x7062, 0xF8F5, 0x7063, 0xC657, 0x7064, 0xC665, 0x7065, 0xF9A3, 0x7066, 0xF96C,
- 0x7068, 0xF9A2, 0x7069, 0xF9D0, 0x706A, 0xF9D1, 0x706B, 0xA4F5, 0x7070, 0xA6C7, 0x7071, 0xCA41, 0x7074, 0xCB5E, 0x7076, 0xA85F,
- 0x7078, 0xA862, 0x707A, 0xCB5F, 0x707C, 0xA860, 0x707D, 0xA861, 0x7082, 0xCD58, 0x7083, 0xCD5A, 0x7084, 0xCD55, 0x7085, 0xCD52,
- 0x7086, 0xCD54, 0x708A, 0xAAA4, 0x708E, 0xAAA2, 0x7091, 0xCD56, 0x7092, 0xAAA3, 0x7093, 0xCD53, 0x7094, 0xCD50, 0x7095, 0xAAA1,
- 0x7096, 0xCD57, 0x7098, 0xCD51, 0x7099, 0xAAA5, 0x709A, 0xCD59, 0x709F, 0xCFAF, 0x70A1, 0xCFB3, 0x70A4, 0xACB7, 0x70A9, 0xCFB6,
- 0x70AB, 0xACAF, 0x70AC, 0xACB2, 0x70AD, 0xACB4, 0x70AE, 0xACB6, 0x70AF, 0xACB3, 0x70B0, 0xCFB2, 0x70B1, 0xCFB1, 0x70B3, 0xACB1,
- 0x70B4, 0xCFB4, 0x70B5, 0xCFB5, 0x70B7, 0xCFAE, 0x70B8, 0xACB5, 0x70BA, 0xACB0, 0x70BE, 0xCFB0, 0x70C5, 0xD277, 0x70C6, 0xD278,
- 0x70C7, 0xD279, 0x70C8, 0xAF50, 0x70CA, 0xAF4C, 0x70CB, 0xD26E, 0x70CD, 0xD276, 0x70CE, 0xD27B, 0x70CF, 0xAF51, 0x70D1, 0xD26C,
- 0x70D2, 0xD272, 0x70D3, 0xD26B, 0x70D4, 0xD275, 0x70D7, 0xD271, 0x70D8, 0xAF4D, 0x70D9, 0xAF4F, 0x70DA, 0xD27A, 0x70DC, 0xD26A,
- 0x70DD, 0xD26D, 0x70DE, 0xD273, 0x70E0, 0xD274, 0x70E1, 0xD27C, 0x70E2, 0xD270, 0x70E4, 0xAF4E, 0x70EF, 0xB26D, 0x70F0, 0xD64E,
- 0x70F3, 0xD650, 0x70F4, 0xD64C, 0x70F6, 0xD658, 0x70F7, 0xD64A, 0x70F8, 0xD657, 0x70F9, 0xB269, 0x70FA, 0xD648, 0x70FB, 0xDA5B,
- 0x70FC, 0xD652, 0x70FD, 0xB26C, 0x70FF, 0xD653, 0x7100, 0xD656, 0x7102, 0xD65A, 0x7104, 0xD64F, 0x7106, 0xD654, 0x7109, 0xB26A,
- 0x710A, 0xB26B, 0x710B, 0xD659, 0x710C, 0xD64D, 0x710D, 0xD649, 0x710E, 0xD65B, 0x7110, 0xD651, 0x7113, 0xD655, 0x7117, 0xD64B,
- 0x7119, 0xB548, 0x711A, 0xB549, 0x711B, 0xDA65, 0x711C, 0xB54F, 0x711E, 0xDA59, 0x711F, 0xDA62, 0x7120, 0xDA58, 0x7121, 0xB54C,
- 0x7122, 0xDA60, 0x7123, 0xDA5E, 0x7125, 0xDA5F, 0x7126, 0xB54A, 0x7128, 0xDA63, 0x712E, 0xDA5C, 0x712F, 0xDA5A, 0x7130, 0xB54B,
- 0x7131, 0xDA5D, 0x7132, 0xDA61, 0x7136, 0xB54D, 0x713A, 0xDA64, 0x7141, 0xDE70, 0x7142, 0xDE77, 0x7143, 0xDE79, 0x7144, 0xDEA1,
- 0x7146, 0xB7DA, 0x7147, 0xDE6B, 0x7149, 0xB7D2, 0x714B, 0xDE7A, 0x714C, 0xB7D7, 0x714D, 0xDEA2, 0x714E, 0xB7CE, 0x7150, 0xDE7D,
- 0x7152, 0xDE6D, 0x7153, 0xDE7E, 0x7154, 0xDE6C, 0x7156, 0xB7DC, 0x7158, 0xDE78, 0x7159, 0xB7CF, 0x715A, 0xDEA3, 0x715C, 0xB7D4,
- 0x715D, 0xDE71, 0x715E, 0xB7D9, 0x715F, 0xDE7C, 0x7160, 0xDE6F, 0x7161, 0xDE76, 0x7162, 0xDE72, 0x7163, 0xDE6E, 0x7164, 0xB7D1,
- 0x7165, 0xB7D8, 0x7166, 0xB7D6, 0x7167, 0xB7D3, 0x7168, 0xB7DB, 0x7169, 0xB7D0, 0x716A, 0xDE75, 0x716C, 0xB7D5, 0x716E, 0xB54E,
- 0x7170, 0xDE7B, 0x7172, 0xDE73, 0x7178, 0xDE74, 0x717B, 0xE2C1, 0x717D, 0xBAB4, 0x7180, 0xE2BD, 0x7181, 0xE2C3, 0x7182, 0xE2BF,
- 0x7184, 0xBAB6, 0x7185, 0xE2BE, 0x7186, 0xE2C2, 0x7187, 0xE2BA, 0x7189, 0xE2BC, 0x718A, 0xBAB5, 0x718F, 0xE2C0, 0x7190, 0xE2BB,
- 0x7192, 0xBAB7, 0x7194, 0xBAB2, 0x7197, 0xE2C4, 0x7199, 0xBAB3, 0x719A, 0xE667, 0x719B, 0xE664, 0x719C, 0xE670, 0x719D, 0xE66A,
- 0x719E, 0xE66C, 0x719F, 0xBCF4, 0x71A0, 0xE666, 0x71A1, 0xE66E, 0x71A4, 0xE66D, 0x71A5, 0xE66B, 0x71A7, 0xE671, 0x71A8, 0xBCF7,
- 0x71A9, 0xE668, 0x71AA, 0xE66F, 0x71AC, 0xBCF5, 0x71AF, 0xE663, 0x71B0, 0xE665, 0x71B1, 0xBCF6, 0x71B2, 0xE662, 0x71B3, 0xE672,
- 0x71B5, 0xE669, 0x71B8, 0xEA4A, 0x71B9, 0xBF51, 0x71BC, 0xEA55, 0x71BD, 0xEA53, 0x71BE, 0xBF4B, 0x71BF, 0xEA49, 0x71C0, 0xEA4C,
- 0x71C1, 0xEA4D, 0x71C2, 0xEA48, 0x71C3, 0xBF55, 0x71C4, 0xBF56, 0x71C5, 0xEA47, 0x71C6, 0xEA56, 0x71C7, 0xEA51, 0x71C8, 0xBF4F,
- 0x71C9, 0xBF4C, 0x71CA, 0xEA50, 0x71CB, 0xEA4E, 0x71CE, 0xBF52, 0x71CF, 0xEA52, 0x71D0, 0xBF4D, 0x71D2, 0xBF4E, 0x71D4, 0xEA4F,
- 0x71D5, 0xBF50, 0x71D6, 0xEA4B, 0x71D8, 0xEA54, 0x71D9, 0xBF53, 0x71DA, 0xEA57, 0x71DB, 0xEA58, 0x71DC, 0xBF54, 0x71DF, 0xC0E7,
- 0x71E0, 0xC0EE, 0x71E1, 0xED5C, 0x71E2, 0xED62, 0x71E4, 0xED60, 0x71E5, 0xC0EA, 0x71E6, 0xC0E9, 0x71E7, 0xC0E6, 0x71E8, 0xED5E,
- 0x71EC, 0xC0EC, 0x71ED, 0xC0EB, 0x71EE, 0xC0E8, 0x71F0, 0xED61, 0x71F1, 0xED5D, 0x71F2, 0xED5F, 0x71F4, 0xC0ED, 0x71F8, 0xC277,
- 0x71F9, 0xEFFB, 0x71FB, 0xC274, 0x71FC, 0xC275, 0x71FD, 0xEFFD, 0x71FE, 0xC276, 0x71FF, 0xEFFA, 0x7201, 0xEFF9, 0x7202, 0xF26C,
- 0x7203, 0xEFFC, 0x7205, 0xF26D, 0x7206, 0xC37A, 0x7207, 0xF26B, 0x720A, 0xF26A, 0x720C, 0xF269, 0x720D, 0xC37B, 0x7210, 0xC46C,
- 0x7213, 0xF46A, 0x7214, 0xF46B, 0x7219, 0xF5DC, 0x721A, 0xF5DB, 0x721B, 0xC4EA, 0x721D, 0xF5DA, 0x721E, 0xF6EC, 0x721F, 0xF6ED,
- 0x7222, 0xF7E6, 0x7223, 0xF8B1, 0x7226, 0xF8F6, 0x7227, 0xF9BC, 0x7228, 0xC679, 0x7229, 0xF9C6, 0x722A, 0xA4F6, 0x722C, 0xAAA6,
- 0x722D, 0xAAA7, 0x7230, 0xACB8, 0x7235, 0xC0EF, 0x7236, 0xA4F7, 0x7238, 0xAAA8, 0x7239, 0xAF52, 0x723A, 0xB7DD, 0x723B, 0xA4F8,
- 0x723D, 0xB26E, 0x723E, 0xBAB8, 0x723F, 0xC962, 0x7241, 0xCFB7, 0x7242, 0xD27D, 0x7244, 0xE2C5, 0x7246, 0xC0F0, 0x7247, 0xA4F9,
- 0x7248, 0xAAA9, 0x7249, 0xCFB8, 0x724A, 0xCFB9, 0x724B, 0xDA66, 0x724C, 0xB550, 0x724F, 0xDEA4, 0x7252, 0xB7DE, 0x7253, 0xE2C6,
- 0x7256, 0xBCF8, 0x7258, 0xC37C, 0x7259, 0xA4FA, 0x725A, 0xDA67, 0x725B, 0xA4FB, 0x725D, 0xA6C9, 0x725E, 0xCA42, 0x725F, 0xA6C8,
- 0x7260, 0xA865, 0x7261, 0xA864, 0x7262, 0xA863, 0x7263, 0xCB60, 0x7267, 0xAAAA, 0x7269, 0xAAAB, 0x726A, 0xCD5B, 0x726C, 0xCFBA,
- 0x726E, 0xCFBD, 0x726F, 0xACBA, 0x7270, 0xCFBB, 0x7272, 0xACB9, 0x7273, 0xCFBC, 0x7274, 0xACBB, 0x7276, 0xD2A2, 0x7277, 0xD2A1,
- 0x7278, 0xD27E, 0x7279, 0xAF53, 0x727B, 0xD65D, 0x727C, 0xD65E, 0x727D, 0xB26F, 0x727E, 0xD65C, 0x727F, 0xD65F, 0x7280, 0xB552,
- 0x7281, 0xB270, 0x7284, 0xB551, 0x7285, 0xDA6B, 0x7286, 0xDA6A, 0x7288, 0xDA68, 0x7289, 0xDA69, 0x728B, 0xDA6C, 0x728C, 0xDEA6,
- 0x728D, 0xDEA5, 0x728E, 0xDEA9, 0x7290, 0xDEA8, 0x7291, 0xDEA7, 0x7292, 0xBAB9, 0x7293, 0xE2C9, 0x7295, 0xE2C8, 0x7296, 0xBABA,
- 0x7297, 0xE2C7, 0x7298, 0xE673, 0x729A, 0xE674, 0x729B, 0xBCF9, 0x729D, 0xEA59, 0x729E, 0xEA5A, 0x72A1, 0xF272, 0x72A2, 0xC37D,
- 0x72A3, 0xF271, 0x72A4, 0xF270, 0x72A5, 0xF26E, 0x72A6, 0xF26F, 0x72A7, 0xC4EB, 0x72A8, 0xF46C, 0x72A9, 0xF6EE, 0x72AA, 0xF8F7,
- 0x72AC, 0xA4FC, 0x72AE, 0xC9A5, 0x72AF, 0xA5C7, 0x72B0, 0xC9A6, 0x72B4, 0xCA43, 0x72B5, 0xCA44, 0x72BA, 0xCB66, 0x72BD, 0xCB62,
- 0x72BF, 0xCB61, 0x72C0, 0xAAAC, 0x72C1, 0xCB65, 0x72C2, 0xA867, 0x72C3, 0xCB63, 0x72C4, 0xA866, 0x72C5, 0xCB67, 0x72C6, 0xCB64,
- 0x72C9, 0xCD5F, 0x72CA, 0xCFBE, 0x72CB, 0xCD5D, 0x72CC, 0xCD64, 0x72CE, 0xAAAD, 0x72D0, 0xAAB0, 0x72D1, 0xCD65, 0x72D2, 0xCD61,
- 0x72D4, 0xCD62, 0x72D6, 0xCD5C, 0x72D7, 0xAAAF, 0x72D8, 0xCD5E, 0x72D9, 0xAAAE, 0x72DA, 0xCD63, 0x72DC, 0xCD60, 0x72DF, 0xCFC2,
- 0x72E0, 0xACBD, 0x72E1, 0xACBE, 0x72E3, 0xCFC5, 0x72E4, 0xCFBF, 0x72E6, 0xCFC4, 0x72E8, 0xCFC0, 0x72E9, 0xACBC, 0x72EA, 0xCFC3,
- 0x72EB, 0xCFC1, 0x72F3, 0xD2A8, 0x72F4, 0xD2A5, 0x72F6, 0xD2A7, 0x72F7, 0xAF58, 0x72F8, 0xAF57, 0x72F9, 0xAF55, 0x72FA, 0xD2A4,
- 0x72FB, 0xD2A9, 0x72FC, 0xAF54, 0x72FD, 0xAF56, 0x72FE, 0xD2A6, 0x72FF, 0xD667, 0x7300, 0xD2A3, 0x7301, 0xD2AA, 0x7307, 0xD662,
- 0x7308, 0xD666, 0x730A, 0xD665, 0x730B, 0xDA6E, 0x730C, 0xDA79, 0x730F, 0xD668, 0x7311, 0xD663, 0x7312, 0xDA6D, 0x7313, 0xB274,
- 0x7316, 0xB273, 0x7317, 0xD661, 0x7318, 0xD664, 0x7319, 0xB275, 0x731B, 0xB272, 0x731C, 0xB271, 0x731D, 0xD660, 0x731E, 0xD669,
- 0x7322, 0xDA70, 0x7323, 0xDA77, 0x7325, 0xB554, 0x7326, 0xDA76, 0x7327, 0xDA73, 0x7329, 0xB556, 0x732D, 0xDA75, 0x7330, 0xDA6F,
- 0x7331, 0xDA71, 0x7332, 0xDA74, 0x7333, 0xDA72, 0x7334, 0xB555, 0x7335, 0xDA78, 0x7336, 0xB553, 0x7337, 0xB7DF, 0x733A, 0xDEAD,
- 0x733B, 0xDEAC, 0x733C, 0xDEAA, 0x733E, 0xB7E2, 0x733F, 0xB7E1, 0x7340, 0xDEAE, 0x7342, 0xDEAB, 0x7343, 0xE2CA, 0x7344, 0xBABB,
- 0x7345, 0xB7E0, 0x7349, 0xDEB0, 0x734A, 0xDEAF, 0x734C, 0xE2CD, 0x734D, 0xE2CB, 0x734E, 0xBCFA, 0x7350, 0xBABC, 0x7351, 0xE2CC,
- 0x7352, 0xE676, 0x7357, 0xBCFB, 0x7358, 0xE675, 0x7359, 0xE67E, 0x735A, 0xE67D, 0x735B, 0xE67B, 0x735D, 0xE67A, 0x735E, 0xE677,
- 0x735F, 0xE678, 0x7360, 0xE679, 0x7361, 0xE67C, 0x7362, 0xE6A1, 0x7365, 0xEA5F, 0x7366, 0xEA5C, 0x7367, 0xEA5D, 0x7368, 0xBF57,
- 0x7369, 0xEA5B, 0x736A, 0xEA61, 0x736B, 0xEA60, 0x736C, 0xEA5E, 0x736E, 0xED64, 0x736F, 0xED65, 0x7370, 0xC0F1, 0x7372, 0xC0F2,
- 0x7373, 0xED63, 0x7375, 0xC279, 0x7376, 0xEFFE, 0x7377, 0xC278, 0x7378, 0xC37E, 0x737A, 0xC3A1, 0x737B, 0xC46D, 0x737C, 0xF46E,
- 0x737D, 0xF46D, 0x737E, 0xF5DD, 0x737F, 0xF6EF, 0x7380, 0xC57A, 0x7381, 0xF7E8, 0x7382, 0xF7E7, 0x7383, 0xF7E9, 0x7384, 0xA5C8,
- 0x7385, 0xCFC6, 0x7386, 0xAF59, 0x7387, 0xB276, 0x7388, 0xD66A, 0x7389, 0xA5C9, 0x738A, 0xC9A7, 0x738B, 0xA4FD, 0x738E, 0xCA45,
- 0x7392, 0xCB6C, 0x7393, 0xCB6A, 0x7394, 0xCB6B, 0x7395, 0xCB68, 0x7396, 0xA868, 0x7397, 0xCB69, 0x739D, 0xCD6D, 0x739F, 0xAAB3,
- 0x73A0, 0xCD6B, 0x73A1, 0xCD67, 0x73A2, 0xCD6A, 0x73A4, 0xCD66, 0x73A5, 0xAAB5, 0x73A6, 0xCD69, 0x73A8, 0xAAB2, 0x73A9, 0xAAB1,
- 0x73AB, 0xAAB4, 0x73AC, 0xCD6C, 0x73AD, 0xCD68, 0x73B2, 0xACC2, 0x73B3, 0xACC5, 0x73B4, 0xCFCE, 0x73B5, 0xCFCD, 0x73B6, 0xCFCC,
- 0x73B7, 0xACBF, 0x73B8, 0xCFD5, 0x73B9, 0xCFCB, 0x73BB, 0xACC1, 0x73BC, 0xD2AF, 0x73BE, 0xCFD2, 0x73BF, 0xCFD0, 0x73C0, 0xACC4,
- 0x73C2, 0xCFC8, 0x73C3, 0xCFD3, 0x73C5, 0xCFCA, 0x73C6, 0xCFD4, 0x73C7, 0xCFD1, 0x73C8, 0xCFC9, 0x73CA, 0xACC0, 0x73CB, 0xCFD6,
- 0x73CC, 0xCFC7, 0x73CD, 0xACC3, 0x73D2, 0xD2B4, 0x73D3, 0xD2AB, 0x73D4, 0xD2B6, 0x73D6, 0xD2AE, 0x73D7, 0xD2B9, 0x73D8, 0xD2BA,
- 0x73D9, 0xD2AC, 0x73DA, 0xD2B8, 0x73DB, 0xD2B5, 0x73DC, 0xD2B3, 0x73DD, 0xD2B7, 0x73DE, 0xAF5F, 0x73E0, 0xAF5D, 0x73E3, 0xD2B1,
- 0x73E5, 0xD2AD, 0x73E7, 0xD2B0, 0x73E8, 0xD2BB, 0x73E9, 0xD2B2, 0x73EA, 0xAF5E, 0x73EB, 0xCFCF, 0x73ED, 0xAF5A, 0x73EE, 0xAF5C,
- 0x73F4, 0xD678, 0x73F5, 0xD66D, 0x73F6, 0xD66B, 0x73F8, 0xD66C, 0x73FA, 0xD673, 0x73FC, 0xD674, 0x73FD, 0xD670, 0x73FE, 0xB27B,
- 0x73FF, 0xD675, 0x7400, 0xD672, 0x7401, 0xD66F, 0x7403, 0xB279, 0x7404, 0xD66E, 0x7405, 0xB277, 0x7406, 0xB27A, 0x7407, 0xD671,
- 0x7408, 0xD679, 0x7409, 0xAF5B, 0x740A, 0xB278, 0x740B, 0xD677, 0x740C, 0xD676, 0x740D, 0xB27C, 0x7416, 0xDA7E, 0x741A, 0xDAA1,
- 0x741B, 0xB560, 0x741D, 0xDAA7, 0x7420, 0xDAA9, 0x7421, 0xDAA2, 0x7422, 0xB55A, 0x7423, 0xDAA6, 0x7424, 0xDAA5, 0x7425, 0xB55B,
- 0x7426, 0xB561, 0x7428, 0xB562, 0x7429, 0xDAA8, 0x742A, 0xB558, 0x742B, 0xDA7D, 0x742C, 0xDA7B, 0x742D, 0xDAA3, 0x742E, 0xDA7A,
- 0x742F, 0xB55F, 0x7430, 0xDA7C, 0x7431, 0xDAA4, 0x7432, 0xDAAA, 0x7433, 0xB559, 0x7434, 0xB55E, 0x7435, 0xB55C, 0x7436, 0xB55D,
- 0x743A, 0xB557, 0x743F, 0xB7E9, 0x7440, 0xDEB7, 0x7441, 0xB7E8, 0x7442, 0xDEBB, 0x7444, 0xDEB1, 0x7446, 0xDEBC, 0x744A, 0xDEB2,
- 0x744B, 0xDEB3, 0x744D, 0xDEBD, 0x744E, 0xDEBA, 0x744F, 0xDEB8, 0x7450, 0xDEB9, 0x7451, 0xDEB5, 0x7452, 0xDEB4, 0x7454, 0xDEBE,
- 0x7455, 0xB7E5, 0x7457, 0xDEB6, 0x7459, 0xB7EA, 0x745A, 0xB7E4, 0x745B, 0xB7EB, 0x745C, 0xB7EC, 0x745E, 0xB7E7, 0x745F, 0xB7E6,
- 0x7462, 0xE2CE, 0x7463, 0xBABE, 0x7464, 0xBABD, 0x7467, 0xE2D3, 0x7469, 0xBCFC, 0x746A, 0xBABF, 0x746D, 0xBAC1, 0x746E, 0xE2D4,
- 0x746F, 0xB7E3, 0x7470, 0xBAC0, 0x7471, 0xE2D0, 0x7472, 0xE2D2, 0x7473, 0xE2CF, 0x7475, 0xE2D1, 0x7479, 0xE6AB, 0x747C, 0xE6AA,
- 0x747D, 0xE6A7, 0x747E, 0xBD40, 0x747F, 0xEA62, 0x7480, 0xBD41, 0x7481, 0xE6A6, 0x7483, 0xBCFE, 0x7485, 0xE6A8, 0x7486, 0xE6A5,
- 0x7487, 0xE6A2, 0x7488, 0xE6A9, 0x7489, 0xE6A3, 0x748A, 0xE6A4, 0x748B, 0xBCFD, 0x7490, 0xED69, 0x7492, 0xEA66, 0x7494, 0xEA65,
- 0x7495, 0xEA67, 0x7497, 0xED66, 0x7498, 0xBF5A, 0x749A, 0xEA63, 0x749C, 0xBF58, 0x749E, 0xBF5C, 0x749F, 0xBF5B, 0x74A0, 0xEA64,
- 0x74A1, 0xEA68, 0x74A3, 0xBF59, 0x74A5, 0xED6D, 0x74A6, 0xC0F5, 0x74A7, 0xC27A, 0x74A8, 0xC0F6, 0x74A9, 0xC0F3, 0x74AA, 0xED6A,
- 0x74AB, 0xED68, 0x74AD, 0xED6B, 0x74AF, 0xED6E, 0x74B0, 0xC0F4, 0x74B1, 0xED6C, 0x74B2, 0xED67, 0x74B5, 0xF042, 0x74B6, 0xF045,
- 0x74B7, 0xF275, 0x74B8, 0xF040, 0x74BA, 0xF46F, 0x74BB, 0xF046, 0x74BD, 0xC3A2, 0x74BE, 0xF044, 0x74BF, 0xC27B, 0x74C0, 0xF041,
- 0x74C1, 0xF043, 0x74C2, 0xF047, 0x74C3, 0xF276, 0x74C5, 0xF274, 0x74CA, 0xC3A3, 0x74CB, 0xF273, 0x74CF, 0xC46E, 0x74D4, 0xC4ED,
- 0x74D5, 0xF6F1, 0x74D6, 0xC4EC, 0x74D7, 0xF6F3, 0x74D8, 0xF6F0, 0x74D9, 0xF6F2, 0x74DA, 0xC5D0, 0x74DB, 0xF8B2, 0x74DC, 0xA5CA,
- 0x74DD, 0xCD6E, 0x74DE, 0xD2BC, 0x74DF, 0xD2BD, 0x74E0, 0xB27D, 0x74E1, 0xDEBF, 0x74E2, 0xBF5D, 0x74E3, 0xC3A4, 0x74E4, 0xC57B,
- 0x74E5, 0xF8B3, 0x74E6, 0xA5CB, 0x74E8, 0xCD6F, 0x74E9, 0xA260, 0x74EC, 0xCFD7, 0x74EE, 0xCFD8, 0x74F4, 0xD2BE, 0x74F5, 0xD2BF,
- 0x74F6, 0xB27E, 0x74F7, 0xB2A1, 0x74FB, 0xDAAB, 0x74FD, 0xDEC2, 0x74FE, 0xDEC1, 0x74FF, 0xDEC0, 0x7500, 0xE2D5, 0x7502, 0xE2D6,
- 0x7503, 0xE2D7, 0x7504, 0xBAC2, 0x7507, 0xE6AD, 0x7508, 0xE6AC, 0x750B, 0xEA69, 0x750C, 0xBF5E, 0x750D, 0xBF5F, 0x750F, 0xED72,
- 0x7510, 0xED6F, 0x7511, 0xED70, 0x7512, 0xED71, 0x7513, 0xF049, 0x7514, 0xF048, 0x7515, 0xC27C, 0x7516, 0xF277, 0x7517, 0xF5DE,
- 0x7518, 0xA5CC, 0x751A, 0xACC6, 0x751C, 0xB2A2, 0x751D, 0xDEC3, 0x751F, 0xA5CD, 0x7521, 0xD2C0, 0x7522, 0xB2A3, 0x7525, 0xB563,
- 0x7526, 0xB564, 0x7528, 0xA5CE, 0x7529, 0xA5CF, 0x752A, 0xCA46, 0x752B, 0xA86A, 0x752C, 0xA869, 0x752D, 0xACC7, 0x752E, 0xCFD9,
- 0x752F, 0xDAAC, 0x7530, 0xA5D0, 0x7531, 0xA5D1, 0x7532, 0xA5D2, 0x7533, 0xA5D3, 0x7537, 0xA86B, 0x7538, 0xA86C, 0x7539, 0xCB6E,
- 0x753A, 0xCB6D, 0x753D, 0xAAB6, 0x753E, 0xCD72, 0x753F, 0xCD70, 0x7540, 0xCD71, 0x7547, 0xCFDA, 0x7548, 0xCFDB, 0x754B, 0xACCB,
- 0x754C, 0xACC9, 0x754E, 0xACCA, 0x754F, 0xACC8, 0x7554, 0xAF60, 0x7559, 0xAF64, 0x755A, 0xAF63, 0x755B, 0xD2C1, 0x755C, 0xAF62,
- 0x755D, 0xAF61, 0x755F, 0xD2C2, 0x7562, 0xB2A6, 0x7563, 0xD67B, 0x7564, 0xD67A, 0x7565, 0xB2A4, 0x7566, 0xB2A5, 0x756A, 0xB566,
- 0x756B, 0xB565, 0x756C, 0xDAAE, 0x756F, 0xDAAD, 0x7570, 0xB2A7, 0x7576, 0xB7ED, 0x7577, 0xDEC5, 0x7578, 0xB7EE, 0x7579, 0xDEC4,
- 0x757D, 0xE2D8, 0x757E, 0xE6AE, 0x757F, 0xBD42, 0x7580, 0xEA6A, 0x7584, 0xED73, 0x7586, 0xC3A6, 0x7587, 0xC3A5, 0x758A, 0xC57C,
- 0x758B, 0xA5D4, 0x758C, 0xCD73, 0x758F, 0xB2A8, 0x7590, 0xE2D9, 0x7591, 0xBAC3, 0x7594, 0xCB6F, 0x7595, 0xCB70, 0x7598, 0xCD74,
- 0x7599, 0xAAB8, 0x759A, 0xAAB9, 0x759D, 0xAAB7, 0x75A2, 0xACCF, 0x75A3, 0xACD0, 0x75A4, 0xACCD, 0x75A5, 0xACCE, 0x75A7, 0xCFDC,
- 0x75AA, 0xCFDD, 0x75AB, 0xACCC, 0x75B0, 0xD2C3, 0x75B2, 0xAF68, 0x75B3, 0xAF69, 0x75B5, 0xB2AB, 0x75B6, 0xD2C9, 0x75B8, 0xAF6E,
- 0x75B9, 0xAF6C, 0x75BA, 0xD2CA, 0x75BB, 0xD2C5, 0x75BC, 0xAF6B, 0x75BD, 0xAF6A, 0x75BE, 0xAF65, 0x75BF, 0xD2C8, 0x75C0, 0xD2C7,
- 0x75C1, 0xD2C4, 0x75C2, 0xAF6D, 0x75C4, 0xD2C6, 0x75C5, 0xAF66, 0x75C7, 0xAF67, 0x75CA, 0xB2AC, 0x75CB, 0xD6A1, 0x75CC, 0xD6A2,
- 0x75CD, 0xB2AD, 0x75CE, 0xD67C, 0x75CF, 0xD67E, 0x75D0, 0xD6A4, 0x75D1, 0xD6A3, 0x75D2, 0xD67D, 0x75D4, 0xB2A9, 0x75D5, 0xB2AA,
- 0x75D7, 0xDAB6, 0x75D8, 0xB56B, 0x75D9, 0xB56A, 0x75DA, 0xDAB0, 0x75DB, 0xB568, 0x75DD, 0xDAB3, 0x75DE, 0xB56C, 0x75DF, 0xDAB4,
- 0x75E0, 0xB56D, 0x75E1, 0xDAB1, 0x75E2, 0xB567, 0x75E3, 0xB569, 0x75E4, 0xDAB5, 0x75E6, 0xDAB2, 0x75E7, 0xDAAF, 0x75ED, 0xDED2,
- 0x75EF, 0xDEC7, 0x75F0, 0xB7F0, 0x75F1, 0xB7F3, 0x75F2, 0xB7F2, 0x75F3, 0xB7F7, 0x75F4, 0xB7F6, 0x75F5, 0xDED3, 0x75F6, 0xDED1,
- 0x75F7, 0xDECA, 0x75F8, 0xDECE, 0x75F9, 0xDECD, 0x75FA, 0xB7F4, 0x75FB, 0xDED0, 0x75FC, 0xDECC, 0x75FD, 0xDED4, 0x75FE, 0xDECB,
- 0x75FF, 0xB7F5, 0x7600, 0xB7EF, 0x7601, 0xB7F1, 0x7603, 0xDEC9, 0x7608, 0xE2DB, 0x7609, 0xBAC7, 0x760A, 0xE2DF, 0x760B, 0xBAC6,
- 0x760C, 0xE2DC, 0x760D, 0xBAC5, 0x760F, 0xDEC8, 0x7610, 0xDECF, 0x7611, 0xE2DE, 0x7613, 0xBAC8, 0x7614, 0xE2E0, 0x7615, 0xE2DD,
- 0x7616, 0xE2DA, 0x7619, 0xE6B1, 0x761A, 0xE6B5, 0x761B, 0xE6B7, 0x761C, 0xE6B3, 0x761D, 0xE6B2, 0x761E, 0xE6B0, 0x761F, 0xBD45,
- 0x7620, 0xBD43, 0x7621, 0xBD48, 0x7622, 0xBD49, 0x7623, 0xE6B4, 0x7624, 0xBD46, 0x7625, 0xE6AF, 0x7626, 0xBD47, 0x7627, 0xBAC4,
- 0x7628, 0xE6B6, 0x7629, 0xBD44, 0x762D, 0xEA6C, 0x762F, 0xEA6B, 0x7630, 0xEA73, 0x7631, 0xEA6D, 0x7632, 0xEA72, 0x7633, 0xEA6F,
- 0x7634, 0xBF60, 0x7635, 0xEA71, 0x7638, 0xBF61, 0x763A, 0xBF62, 0x763C, 0xEA70, 0x763D, 0xEA6E, 0x7642, 0xC0F8, 0x7643, 0xED74,
- 0x7646, 0xC0F7, 0x7647, 0xED77, 0x7648, 0xED75, 0x7649, 0xED76, 0x764C, 0xC0F9, 0x7650, 0xF04D, 0x7652, 0xC2A1, 0x7653, 0xF04E,
- 0x7656, 0xC27D, 0x7657, 0xF04F, 0x7658, 0xC27E, 0x7659, 0xF04C, 0x765A, 0xF050, 0x765C, 0xF04A, 0x765F, 0xC3A7, 0x7660, 0xF278,
- 0x7661, 0xC3A8, 0x7662, 0xC46F, 0x7664, 0xF04B, 0x7665, 0xC470, 0x7669, 0xC4EE, 0x766A, 0xF5DF, 0x766C, 0xC57E, 0x766D, 0xF6F4,
- 0x766E, 0xC57D, 0x7670, 0xF7EA, 0x7671, 0xC5F5, 0x7672, 0xC5F6, 0x7675, 0xF9CC, 0x7678, 0xACD1, 0x7679, 0xCFDE, 0x767B, 0xB56E,
- 0x767C, 0xB56F, 0x767D, 0xA5D5, 0x767E, 0xA6CA, 0x767F, 0xCA47, 0x7681, 0xCB71, 0x7682, 0xA86D, 0x7684, 0xAABA, 0x7686, 0xACD2,
- 0x7687, 0xACD3, 0x7688, 0xACD4, 0x7689, 0xD6A6, 0x768A, 0xD2CB, 0x768B, 0xAF6F, 0x768E, 0xB2AE, 0x768F, 0xD6A5, 0x7692, 0xDAB8,
- 0x7693, 0xB571, 0x7695, 0xDAB7, 0x7696, 0xB570, 0x7699, 0xDED5, 0x769A, 0xBD4A, 0x769B, 0xE6BB, 0x769C, 0xE6B8, 0x769D, 0xE6B9,
- 0x769E, 0xE6BA, 0x76A4, 0xED78, 0x76A6, 0xF051, 0x76AA, 0xF471, 0x76AB, 0xF470, 0x76AD, 0xF6F5, 0x76AE, 0xA5D6, 0x76AF, 0xCD75,
- 0x76B0, 0xAF70, 0x76B4, 0xB572, 0x76B5, 0xDED6, 0x76B8, 0xE2E1, 0x76BA, 0xBD4B, 0x76BB, 0xEA74, 0x76BD, 0xF052, 0x76BE, 0xF472,
- 0x76BF, 0xA5D7, 0x76C2, 0xAABB, 0x76C3, 0xACD7, 0x76C4, 0xCFDF, 0x76C5, 0xACD8, 0x76C6, 0xACD6, 0x76C8, 0xACD5, 0x76C9, 0xD2CC,
- 0x76CA, 0xAF71, 0x76CD, 0xAF72, 0x76CE, 0xAF73, 0x76D2, 0xB2B0, 0x76D3, 0xD6A7, 0x76D4, 0xB2AF, 0x76DA, 0xDAB9, 0x76DB, 0xB2B1,
- 0x76DC, 0xB573, 0x76DD, 0xDED7, 0x76DE, 0xB7F8, 0x76DF, 0xB7F9, 0x76E1, 0xBAC9, 0x76E3, 0xBACA, 0x76E4, 0xBD4C, 0x76E5, 0xBF64,
- 0x76E6, 0xEA75, 0x76E7, 0xBF63, 0x76E9, 0xED79, 0x76EA, 0xC0FA, 0x76EC, 0xF053, 0x76ED, 0xF473, 0x76EE, 0xA5D8, 0x76EF, 0xA86E,
- 0x76F0, 0xCD78, 0x76F1, 0xCD77, 0x76F2, 0xAABC, 0x76F3, 0xCD76, 0x76F4, 0xAABD, 0x76F5, 0xCD79, 0x76F7, 0xCFE5, 0x76F8, 0xACDB,
- 0x76F9, 0xACDA, 0x76FA, 0xCFE7, 0x76FB, 0xCFE6, 0x76FC, 0xACDF, 0x76FE, 0xACDE, 0x7701, 0xACD9, 0x7703, 0xCFE1, 0x7704, 0xCFE2,
- 0x7705, 0xCFE3, 0x7707, 0xACE0, 0x7708, 0xCFE0, 0x7709, 0xACDC, 0x770A, 0xCFE4, 0x770B, 0xACDD, 0x7710, 0xD2CF, 0x7711, 0xD2D3,
- 0x7712, 0xD2D1, 0x7713, 0xD2D0, 0x7715, 0xD2D4, 0x7719, 0xD2D5, 0x771A, 0xD2D6, 0x771B, 0xD2CE, 0x771D, 0xD2CD, 0x771F, 0xAF75,
- 0x7720, 0xAF76, 0x7722, 0xD2D7, 0x7723, 0xD2D2, 0x7725, 0xD6B0, 0x7727, 0xD2D8, 0x7728, 0xAF77, 0x7729, 0xAF74, 0x772D, 0xD6AA,
- 0x772F, 0xD6A9, 0x7731, 0xD6AB, 0x7732, 0xD6AC, 0x7733, 0xD6AE, 0x7734, 0xD6AD, 0x7735, 0xD6B2, 0x7736, 0xB2B5, 0x7737, 0xB2B2,
- 0x7738, 0xB2B6, 0x7739, 0xD6A8, 0x773A, 0xB2B7, 0x773B, 0xD6B1, 0x773C, 0xB2B4, 0x773D, 0xD6AF, 0x773E, 0xB2B3, 0x7744, 0xDABC,
- 0x7745, 0xDABE, 0x7746, 0xDABA, 0x7747, 0xDABB, 0x774A, 0xDABF, 0x774B, 0xDAC1, 0x774C, 0xDAC2, 0x774D, 0xDABD, 0x774E, 0xDAC0,
- 0x774F, 0xB574, 0x7752, 0xDEDB, 0x7754, 0xDEE0, 0x7755, 0xDED8, 0x7756, 0xDEDC, 0x7759, 0xDEE1, 0x775A, 0xDEDD, 0x775B, 0xB7FA,
- 0x775C, 0xB843, 0x775E, 0xB7FD, 0x775F, 0xDED9, 0x7760, 0xDEDA, 0x7761, 0xBACE, 0x7762, 0xB846, 0x7763, 0xB7FE, 0x7765, 0xB844,
- 0x7766, 0xB7FC, 0x7767, 0xDEDF, 0x7768, 0xB845, 0x7769, 0xDEDE, 0x776A, 0xB841, 0x776B, 0xB7FB, 0x776C, 0xB842, 0x776D, 0xDEE2,
- 0x776E, 0xE2E6, 0x776F, 0xE2E8, 0x7779, 0xB840, 0x777C, 0xE2E3, 0x777D, 0xBACC, 0x777E, 0xE2E9, 0x777F, 0xBACD, 0x7780, 0xE2E7,
- 0x7781, 0xE2E2, 0x7782, 0xE2E5, 0x7783, 0xE2EA, 0x7784, 0xBACB, 0x7785, 0xE2E4, 0x7787, 0xBD4E, 0x7788, 0xE6BF, 0x7789, 0xE6BE,
- 0x778B, 0xBD51, 0x778C, 0xBD4F, 0x778D, 0xE6BC, 0x778E, 0xBD4D, 0x778F, 0xE6BD, 0x7791, 0xBD50, 0x7795, 0xEA7D, 0x7797, 0xEAA1,
- 0x7799, 0xEA7E, 0x779A, 0xEA76, 0x779B, 0xEA7A, 0x779C, 0xEA79, 0x779D, 0xEA77, 0x779E, 0xBF66, 0x779F, 0xBF67, 0x77A0, 0xBF65,
- 0x77A1, 0xEA78, 0x77A2, 0xEA7B, 0x77A3, 0xEA7C, 0x77A5, 0xBF68, 0x77A7, 0xC140, 0x77A8, 0xEDA3, 0x77AA, 0xC0FC, 0x77AB, 0xED7B,
- 0x77AC, 0xC0FE, 0x77AD, 0xC141, 0x77B0, 0xC0FD, 0x77B1, 0xEDA2, 0x77B2, 0xED7C, 0x77B3, 0xC0FB, 0x77B4, 0xEDA1, 0x77B5, 0xED7A,
- 0x77B6, 0xED7E, 0x77B7, 0xED7D, 0x77BA, 0xF055, 0x77BB, 0xC2A4, 0x77BC, 0xC2A5, 0x77BD, 0xC2A2, 0x77BF, 0xC2A3, 0x77C2, 0xF054,
- 0x77C4, 0xF27B, 0x77C7, 0xC3A9, 0x77C9, 0xF279, 0x77CA, 0xF27A, 0x77CC, 0xF474, 0x77CD, 0xF477, 0x77CE, 0xF475, 0x77CF, 0xF476,
- 0x77D0, 0xF5E0, 0x77D3, 0xC4EF, 0x77D4, 0xF7EB, 0x77D5, 0xF8B4, 0x77D7, 0xC5F7, 0x77D8, 0xF8F8, 0x77D9, 0xF8F9, 0x77DA, 0xC666,
- 0x77DB, 0xA5D9, 0x77DC, 0xACE1, 0x77DE, 0xDAC3, 0x77E0, 0xDEE3, 0x77E2, 0xA5DA, 0x77E3, 0xA86F, 0x77E5, 0xAABE, 0x77E7, 0xCFE8,
- 0x77E8, 0xCFE9, 0x77E9, 0xAF78, 0x77EC, 0xDAC4, 0x77ED, 0xB575, 0x77EE, 0xB847, 0x77EF, 0xC142, 0x77F0, 0xEDA4, 0x77F1, 0xF27C,
- 0x77F2, 0xF478, 0x77F3, 0xA5DB, 0x77F7, 0xCDA1, 0x77F8, 0xCD7A, 0x77F9, 0xCD7C, 0x77FA, 0xCD7E, 0x77FB, 0xCD7D, 0x77FC, 0xCD7B,
- 0x77FD, 0xAABF, 0x7802, 0xACE2, 0x7803, 0xCFF2, 0x7805, 0xCFED, 0x7806, 0xCFEA, 0x7809, 0xCFF1, 0x780C, 0xACE4, 0x780D, 0xACE5,
- 0x780E, 0xCFF0, 0x780F, 0xCFEF, 0x7810, 0xCFEE, 0x7811, 0xCFEB, 0x7812, 0xCFEC, 0x7813, 0xCFF3, 0x7814, 0xACE3, 0x781D, 0xAF7C,
- 0x781F, 0xAFA4, 0x7820, 0xAFA3, 0x7821, 0xD2E1, 0x7822, 0xD2DB, 0x7823, 0xD2D9, 0x7825, 0xAFA1, 0x7826, 0xD6B9, 0x7827, 0xAF7A,
- 0x7828, 0xD2DE, 0x7829, 0xD2E2, 0x782A, 0xD2E4, 0x782B, 0xD2E0, 0x782C, 0xD2DA, 0x782D, 0xAFA2, 0x782E, 0xD2DF, 0x782F, 0xD2DD,
- 0x7830, 0xAF79, 0x7831, 0xD2E5, 0x7832, 0xAFA5, 0x7833, 0xD2E3, 0x7834, 0xAF7D, 0x7835, 0xD2DC, 0x7837, 0xAF7E, 0x7838, 0xAF7B,
- 0x7843, 0xB2B9, 0x7845, 0xD6BA, 0x7848, 0xD6B3, 0x7849, 0xD6B5, 0x784A, 0xD6B7, 0x784C, 0xD6B8, 0x784D, 0xD6B6, 0x784E, 0xB2BA,
- 0x7850, 0xD6BB, 0x7852, 0xD6B4, 0x785C, 0xDAC8, 0x785D, 0xB576, 0x785E, 0xDAD0, 0x7860, 0xDAC5, 0x7862, 0xDAD1, 0x7864, 0xDAC6,
- 0x7865, 0xDAC7, 0x7868, 0xDACF, 0x7869, 0xDACE, 0x786A, 0xDACB, 0x786B, 0xB2B8, 0x786C, 0xB577, 0x786D, 0xDAC9, 0x786E, 0xDACC,
- 0x786F, 0xB578, 0x7870, 0xDACD, 0x7871, 0xDACA, 0x7879, 0xDEEE, 0x787B, 0xDEF2, 0x787C, 0xB84E, 0x787E, 0xE2F0, 0x787F, 0xB851,
- 0x7880, 0xDEF0, 0x7881, 0xF9D6, 0x7883, 0xDEED, 0x7884, 0xDEE8, 0x7885, 0xDEEA, 0x7886, 0xDEEB, 0x7887, 0xDEE4, 0x7889, 0xB84D,
- 0x788C, 0xB84C, 0x788E, 0xB848, 0x788F, 0xDEE7, 0x7891, 0xB84F, 0x7893, 0xB850, 0x7894, 0xDEE6, 0x7895, 0xDEE9, 0x7896, 0xDEF1,
- 0x7897, 0xB84A, 0x7898, 0xB84B, 0x7899, 0xDEEF, 0x789A, 0xDEE5, 0x789E, 0xE2F2, 0x789F, 0xBAD0, 0x78A0, 0xE2F4, 0x78A1, 0xDEEC,
- 0x78A2, 0xE2F6, 0x78A3, 0xBAD4, 0x78A4, 0xE2F7, 0x78A5, 0xE2F3, 0x78A7, 0xBAD1, 0x78A8, 0xE2EF, 0x78A9, 0xBAD3, 0x78AA, 0xE2EC,
- 0x78AB, 0xE2F1, 0x78AC, 0xE2F5, 0x78AD, 0xE2EE, 0x78B0, 0xB849, 0x78B2, 0xE2EB, 0x78B3, 0xBAD2, 0x78B4, 0xE2ED, 0x78BA, 0xBD54,
- 0x78BB, 0xE6C1, 0x78BC, 0xBD58, 0x78BE, 0xBD56, 0x78C1, 0xBACF, 0x78C3, 0xE6C8, 0x78C4, 0xE6C9, 0x78C5, 0xBD53, 0x78C8, 0xE6C7,
- 0x78C9, 0xE6CA, 0x78CA, 0xBD55, 0x78CB, 0xBD52, 0x78CC, 0xE6C3, 0x78CD, 0xE6C0, 0x78CE, 0xE6C5, 0x78CF, 0xE6C2, 0x78D0, 0xBD59,
- 0x78D1, 0xE6C4, 0x78D4, 0xE6C6, 0x78D5, 0xBD57, 0x78DA, 0xBF6A, 0x78DB, 0xEAA8, 0x78DD, 0xEAA2, 0x78DE, 0xEAA6, 0x78DF, 0xEAAC,
- 0x78E0, 0xEAAD, 0x78E1, 0xEAA9, 0x78E2, 0xEAAA, 0x78E3, 0xEAA7, 0x78E5, 0xEAA4, 0x78E7, 0xBF6C, 0x78E8, 0xBF69, 0x78E9, 0xEAA3,
- 0x78EA, 0xEAA5, 0x78EC, 0xBF6B, 0x78ED, 0xEAAB, 0x78EF, 0xC146, 0x78F2, 0xEDAA, 0x78F3, 0xEDA5, 0x78F4, 0xC145, 0x78F7, 0xC143,
- 0x78F9, 0xEDAC, 0x78FA, 0xC144, 0x78FB, 0xEDA8, 0x78FC, 0xEDA9, 0x78FD, 0xEDA6, 0x78FE, 0xEDAD, 0x78FF, 0xF056, 0x7901, 0xC147,
- 0x7902, 0xEDA7, 0x7904, 0xEDAE, 0x7905, 0xEDAB, 0x7909, 0xF05A, 0x790C, 0xF057, 0x790E, 0xC2A6, 0x7910, 0xF05B, 0x7911, 0xF05D,
- 0x7912, 0xF05C, 0x7913, 0xF058, 0x7914, 0xF059, 0x7917, 0xF2A3, 0x7919, 0xC3AA, 0x791B, 0xF27E, 0x791C, 0xF2A2, 0x791D, 0xF27D,
- 0x791E, 0xF2A4, 0x7921, 0xF2A1, 0x7923, 0xF47A, 0x7924, 0xF47D, 0x7925, 0xF479, 0x7926, 0xC471, 0x7927, 0xF47B, 0x7928, 0xF47C,
- 0x7929, 0xF47E, 0x792A, 0xC472, 0x792B, 0xC474, 0x792C, 0xC473, 0x792D, 0xF5E1, 0x792F, 0xF5E3, 0x7931, 0xF5E2, 0x7935, 0xF6F6,
- 0x7938, 0xF8B5, 0x7939, 0xF8FA, 0x793A, 0xA5DC, 0x793D, 0xCB72, 0x793E, 0xAAC0, 0x793F, 0xCDA3, 0x7940, 0xAAC1, 0x7941, 0xAAC2,
- 0x7942, 0xCDA2, 0x7944, 0xCFF8, 0x7945, 0xCFF7, 0x7946, 0xACE6, 0x7947, 0xACE9, 0x7948, 0xACE8, 0x7949, 0xACE7, 0x794A, 0xCFF4,
- 0x794B, 0xCFF6, 0x794C, 0xCFF5, 0x794F, 0xD2E8, 0x7950, 0xAFA7, 0x7951, 0xD2EC, 0x7952, 0xD2EB, 0x7953, 0xD2EA, 0x7954, 0xD2E6,
- 0x7955, 0xAFA6, 0x7956, 0xAFAA, 0x7957, 0xAFAD, 0x795A, 0xAFAE, 0x795B, 0xD2E7, 0x795C, 0xD2E9, 0x795D, 0xAFAC, 0x795E, 0xAFAB,
- 0x795F, 0xAFA9, 0x7960, 0xAFA8, 0x7961, 0xD6C2, 0x7963, 0xD6C0, 0x7964, 0xD6BC, 0x7965, 0xB2BB, 0x7967, 0xD6BD, 0x7968, 0xB2BC,
- 0x7969, 0xD6BE, 0x796A, 0xD6BF, 0x796B, 0xD6C1, 0x796D, 0xB2BD, 0x7970, 0xDAD5, 0x7972, 0xDAD4, 0x7973, 0xDAD3, 0x7974, 0xDAD2,
- 0x7979, 0xDEF6, 0x797A, 0xB852, 0x797C, 0xDEF3, 0x797D, 0xDEF5, 0x797F, 0xB853, 0x7981, 0xB854, 0x7982, 0xDEF4, 0x7988, 0xE341,
- 0x798A, 0xE2F9, 0x798B, 0xE2FA, 0x798D, 0xBAD7, 0x798E, 0xBAD5, 0x798F, 0xBAD6, 0x7990, 0xE343, 0x7992, 0xE342, 0x7993, 0xE2FE,
- 0x7994, 0xE2FD, 0x7995, 0xE2FC, 0x7996, 0xE2FB, 0x7997, 0xE340, 0x7998, 0xE2F8, 0x799A, 0xE6CB, 0x799B, 0xE6D0, 0x799C, 0xE6CE,
- 0x79A0, 0xE6CD, 0x79A1, 0xE6CC, 0x79A2, 0xE6CF, 0x79A4, 0xEAAE, 0x79A6, 0xBF6D, 0x79A7, 0xC148, 0x79A8, 0xEDB0, 0x79AA, 0xC149,
- 0x79AB, 0xEDAF, 0x79AC, 0xF05F, 0x79AD, 0xF05E, 0x79AE, 0xC2A7, 0x79B0, 0xF2A5, 0x79B1, 0xC3AB, 0x79B2, 0xF4A1, 0x79B3, 0xC5A1,
- 0x79B4, 0xF6F7, 0x79B6, 0xF8B7, 0x79B7, 0xF8B6, 0x79B8, 0xC9A8, 0x79B9, 0xACEA, 0x79BA, 0xACEB, 0x79BB, 0xD6C3, 0x79BD, 0xB856,
- 0x79BE, 0xA5DD, 0x79BF, 0xA872, 0x79C0, 0xA871, 0x79C1, 0xA870, 0x79C5, 0xCDA4, 0x79C8, 0xAAC4, 0x79C9, 0xAAC3, 0x79CB, 0xACEE,
- 0x79CD, 0xCFFA, 0x79CE, 0xCFFD, 0x79CF, 0xCFFB, 0x79D1, 0xACEC, 0x79D2, 0xACED, 0x79D5, 0xCFF9, 0x79D6, 0xCFFC, 0x79D8, 0xAFB5,
- 0x79DC, 0xD2F3, 0x79DD, 0xD2F5, 0x79DE, 0xD2F4, 0x79DF, 0xAFB2, 0x79E0, 0xD2EF, 0x79E3, 0xAFB0, 0x79E4, 0xAFAF, 0x79E6, 0xAFB3,
- 0x79E7, 0xAFB1, 0x79E9, 0xAFB4, 0x79EA, 0xD2F2, 0x79EB, 0xD2ED, 0x79EC, 0xD2EE, 0x79ED, 0xD2F1, 0x79EE, 0xD2F0, 0x79F6, 0xD6C6,
- 0x79F7, 0xD6C7, 0x79F8, 0xD6C5, 0x79FA, 0xD6C4, 0x79FB, 0xB2BE, 0x7A00, 0xB57D, 0x7A02, 0xDAD6, 0x7A03, 0xDAD8, 0x7A04, 0xDADA,
- 0x7A05, 0xB57C, 0x7A08, 0xB57A, 0x7A0A, 0xDAD7, 0x7A0B, 0xB57B, 0x7A0C, 0xDAD9, 0x7A0D, 0xB579, 0x7A10, 0xDF41, 0x7A11, 0xDEF7,
- 0x7A12, 0xDEFA, 0x7A13, 0xDEFE, 0x7A14, 0xB85A, 0x7A15, 0xDEFC, 0x7A17, 0xDEFB, 0x7A18, 0xDEF8, 0x7A19, 0xDEF9, 0x7A1A, 0xB858,
- 0x7A1B, 0xDF40, 0x7A1C, 0xB857, 0x7A1E, 0xB85C, 0x7A1F, 0xB85B, 0x7A20, 0xB859, 0x7A22, 0xDEFD, 0x7A26, 0xE349, 0x7A28, 0xE348,
- 0x7A2B, 0xE344, 0x7A2E, 0xBAD8, 0x7A2F, 0xE347, 0x7A30, 0xE346, 0x7A31, 0xBAD9, 0x7A37, 0xBD5E, 0x7A39, 0xE6D2, 0x7A3B, 0xBD5F,
- 0x7A3C, 0xBD5B, 0x7A3D, 0xBD5D, 0x7A3F, 0xBD5A, 0x7A40, 0xBD5C, 0x7A44, 0xEAAF, 0x7A46, 0xBF70, 0x7A47, 0xEAB1, 0x7A48, 0xEAB0,
- 0x7A4A, 0xE345, 0x7A4B, 0xBF72, 0x7A4C, 0xBF71, 0x7A4D, 0xBF6E, 0x7A4E, 0xBF6F, 0x7A54, 0xEDB5, 0x7A56, 0xEDB3, 0x7A57, 0xC14A,
- 0x7A58, 0xEDB4, 0x7A5A, 0xEDB6, 0x7A5B, 0xEDB2, 0x7A5C, 0xEDB1, 0x7A5F, 0xF060, 0x7A60, 0xC2AA, 0x7A61, 0xC2A8, 0x7A62, 0xC2A9,
- 0x7A67, 0xF2A6, 0x7A68, 0xF2A7, 0x7A69, 0xC3AD, 0x7A6B, 0xC3AC, 0x7A6C, 0xF4A3, 0x7A6D, 0xF4A4, 0x7A6E, 0xF4A2, 0x7A70, 0xF6F8,
- 0x7A71, 0xF6F9, 0x7A74, 0xA5DE, 0x7A75, 0xCA48, 0x7A76, 0xA873, 0x7A78, 0xCDA5, 0x7A79, 0xAAC6, 0x7A7A, 0xAAC5, 0x7A7B, 0xCDA6,
- 0x7A7E, 0xD040, 0x7A7F, 0xACEF, 0x7A80, 0xCFFE, 0x7A81, 0xACF0, 0x7A84, 0xAFB6, 0x7A85, 0xD2F8, 0x7A86, 0xD2F6, 0x7A87, 0xD2FC,
- 0x7A88, 0xAFB7, 0x7A89, 0xD2F7, 0x7A8A, 0xD2FB, 0x7A8B, 0xD2F9, 0x7A8C, 0xD2FA, 0x7A8F, 0xD6C8, 0x7A90, 0xD6CA, 0x7A92, 0xB2BF,
- 0x7A94, 0xD6C9, 0x7A95, 0xB2C0, 0x7A96, 0xB5A2, 0x7A97, 0xB5A1, 0x7A98, 0xB57E, 0x7A99, 0xDADB, 0x7A9E, 0xDF44, 0x7A9F, 0xB85D,
- 0x7AA0, 0xB85E, 0x7AA2, 0xDF43, 0x7AA3, 0xDF42, 0x7AA8, 0xE34A, 0x7AA9, 0xBADB, 0x7AAA, 0xBADA, 0x7AAB, 0xE34B, 0x7AAC, 0xE34C,
- 0x7AAE, 0xBD61, 0x7AAF, 0xBD60, 0x7AB1, 0xEAB5, 0x7AB2, 0xE6D3, 0x7AB3, 0xE6D5, 0x7AB4, 0xE6D4, 0x7AB5, 0xEAB4, 0x7AB6, 0xEAB2,
- 0x7AB7, 0xEAB6, 0x7AB8, 0xEAB3, 0x7ABA, 0xBF73, 0x7ABE, 0xEDB7, 0x7ABF, 0xC14B, 0x7AC0, 0xEDB8, 0x7AC1, 0xEDB9, 0x7AC4, 0xC2AB,
- 0x7AC5, 0xC2AC, 0x7AC7, 0xC475, 0x7ACA, 0xC5D1, 0x7ACB, 0xA5DF, 0x7AD1, 0xD041, 0x7AD8, 0xD2FD, 0x7AD9, 0xAFB8, 0x7ADF, 0xB3BA,
- 0x7AE0, 0xB3B9, 0x7AE3, 0xB5A4, 0x7AE4, 0xDADD, 0x7AE5, 0xB5A3, 0x7AE6, 0xDADC, 0x7AEB, 0xDF45, 0x7AED, 0xBADC, 0x7AEE, 0xE34D,
- 0x7AEF, 0xBADD, 0x7AF6, 0xC476, 0x7AF7, 0xF4A5, 0x7AF9, 0xA6CB, 0x7AFA, 0xAAC7, 0x7AFB, 0xCDA7, 0x7AFD, 0xACF2, 0x7AFF, 0xACF1,
- 0x7B00, 0xD042, 0x7B01, 0xD043, 0x7B04, 0xD340, 0x7B05, 0xD342, 0x7B06, 0xAFB9, 0x7B08, 0xD344, 0x7B09, 0xD347, 0x7B0A, 0xD345,
- 0x7B0E, 0xD346, 0x7B0F, 0xD343, 0x7B10, 0xD2FE, 0x7B11, 0xAFBA, 0x7B12, 0xD348, 0x7B13, 0xD341, 0x7B18, 0xD6D3, 0x7B19, 0xB2C6,
- 0x7B1A, 0xD6DC, 0x7B1B, 0xB2C3, 0x7B1D, 0xD6D5, 0x7B1E, 0xB2C7, 0x7B20, 0xB2C1, 0x7B22, 0xD6D0, 0x7B23, 0xD6DD, 0x7B24, 0xD6D1,
- 0x7B25, 0xD6CE, 0x7B26, 0xB2C5, 0x7B28, 0xB2C2, 0x7B2A, 0xD6D4, 0x7B2B, 0xD6D7, 0x7B2C, 0xB2C4, 0x7B2D, 0xD6D8, 0x7B2E, 0xB2C8,
- 0x7B2F, 0xD6D9, 0x7B30, 0xD6CF, 0x7B31, 0xD6D6, 0x7B32, 0xD6DA, 0x7B33, 0xD6D2, 0x7B34, 0xD6CD, 0x7B35, 0xD6CB, 0x7B38, 0xD6DB,
- 0x7B3B, 0xDADF, 0x7B40, 0xDAE4, 0x7B44, 0xDAE0, 0x7B45, 0xDAE6, 0x7B46, 0xB5A7, 0x7B47, 0xD6CC, 0x7B48, 0xDAE1, 0x7B49, 0xB5A5,
- 0x7B4A, 0xDADE, 0x7B4B, 0xB5AC, 0x7B4C, 0xDAE2, 0x7B4D, 0xB5AB, 0x7B4E, 0xDAE3, 0x7B4F, 0xB5AD, 0x7B50, 0xB5A8, 0x7B51, 0xB5AE,
- 0x7B52, 0xB5A9, 0x7B54, 0xB5AA, 0x7B56, 0xB5A6, 0x7B58, 0xDAE5, 0x7B60, 0xB861, 0x7B61, 0xDF50, 0x7B63, 0xDF53, 0x7B64, 0xDF47,
- 0x7B65, 0xDF4C, 0x7B66, 0xDF46, 0x7B67, 0xB863, 0x7B69, 0xDF4A, 0x7B6D, 0xDF48, 0x7B6E, 0xB862, 0x7B70, 0xDF4F, 0x7B71, 0xDF4E,
- 0x7B72, 0xDF4B, 0x7B73, 0xDF4D, 0x7B74, 0xDF49, 0x7B75, 0xBAE1, 0x7B76, 0xDF52, 0x7B77, 0xB85F, 0x7B78, 0xDF51, 0x7B82, 0xE35D,
- 0x7B84, 0xBAE8, 0x7B85, 0xE358, 0x7B87, 0xBAE7, 0x7B88, 0xE34E, 0x7B8A, 0xE350, 0x7B8B, 0xBAE0, 0x7B8C, 0xE355, 0x7B8D, 0xE354,
- 0x7B8E, 0xE357, 0x7B8F, 0xBAE5, 0x7B90, 0xE352, 0x7B91, 0xE351, 0x7B94, 0xBAE4, 0x7B95, 0xBADF, 0x7B96, 0xE353, 0x7B97, 0xBAE2,
- 0x7B98, 0xE359, 0x7B99, 0xE35B, 0x7B9B, 0xE356, 0x7B9C, 0xE34F, 0x7B9D, 0xBAE3, 0x7BA0, 0xBD69, 0x7BA1, 0xBADE, 0x7BA4, 0xE35C,
- 0x7BAC, 0xE6D9, 0x7BAD, 0xBD62, 0x7BAF, 0xE6DB, 0x7BB1, 0xBD63, 0x7BB4, 0xBD65, 0x7BB5, 0xE6DE, 0x7BB7, 0xE6D6, 0x7BB8, 0xBAE6,
- 0x7BB9, 0xE6DC, 0x7BBE, 0xE6D8, 0x7BC0, 0xB860, 0x7BC1, 0xBD68, 0x7BC4, 0xBD64, 0x7BC6, 0xBD66, 0x7BC7, 0xBD67, 0x7BC9, 0xBF76,
- 0x7BCA, 0xE6DD, 0x7BCB, 0xE6D7, 0x7BCC, 0xBD6A, 0x7BCE, 0xE6DA, 0x7BD4, 0xEAC0, 0x7BD5, 0xEABB, 0x7BD8, 0xEAC5, 0x7BD9, 0xBF74,
- 0x7BDA, 0xEABD, 0x7BDB, 0xBF78, 0x7BDC, 0xEAC3, 0x7BDD, 0xEABA, 0x7BDE, 0xEAB7, 0x7BDF, 0xEAC6, 0x7BE0, 0xC151, 0x7BE1, 0xBF79,
- 0x7BE2, 0xEAC2, 0x7BE3, 0xEAB8, 0x7BE4, 0xBF77, 0x7BE5, 0xEABC, 0x7BE6, 0xBF7B, 0x7BE7, 0xEAB9, 0x7BE8, 0xEABE, 0x7BE9, 0xBF7A,
- 0x7BEA, 0xEAC1, 0x7BEB, 0xEAC4, 0x7BF0, 0xEDCB, 0x7BF1, 0xEDCC, 0x7BF2, 0xEDBC, 0x7BF3, 0xEDC3, 0x7BF4, 0xEDC1, 0x7BF7, 0xC14F,
- 0x7BF8, 0xEDC8, 0x7BF9, 0xEABF, 0x7BFB, 0xEDBF, 0x7BFD, 0xEDC9, 0x7BFE, 0xC14E, 0x7BFF, 0xEDBE, 0x7C00, 0xEDBD, 0x7C01, 0xEDC7,
- 0x7C02, 0xEDC4, 0x7C03, 0xEDC6, 0x7C05, 0xEDBA, 0x7C06, 0xEDCA, 0x7C07, 0xC14C, 0x7C09, 0xEDC5, 0x7C0A, 0xEDCE, 0x7C0B, 0xEDC2,
- 0x7C0C, 0xC150, 0x7C0D, 0xC14D, 0x7C0E, 0xEDC0, 0x7C0F, 0xEDBB, 0x7C10, 0xEDCD, 0x7C11, 0xBF75, 0x7C19, 0xF063, 0x7C1C, 0xF061,
- 0x7C1D, 0xF067, 0x7C1E, 0xC2B0, 0x7C1F, 0xF065, 0x7C20, 0xF064, 0x7C21, 0xC2B2, 0x7C22, 0xF06A, 0x7C23, 0xC2B1, 0x7C25, 0xF06B,
- 0x7C26, 0xF068, 0x7C27, 0xC2AE, 0x7C28, 0xF069, 0x7C29, 0xF062, 0x7C2A, 0xC2AF, 0x7C2B, 0xC2AD, 0x7C2C, 0xF2AB, 0x7C2D, 0xF066,
- 0x7C30, 0xF06C, 0x7C33, 0xF2A8, 0x7C37, 0xC3B2, 0x7C38, 0xC3B0, 0x7C39, 0xF2AA, 0x7C3B, 0xF2AC, 0x7C3C, 0xF2A9, 0x7C3D, 0xC3B1,
- 0x7C3E, 0xC3AE, 0x7C3F, 0xC3AF, 0x7C40, 0xC3B3, 0x7C43, 0xC478, 0x7C45, 0xF4AA, 0x7C47, 0xF4A9, 0x7C48, 0xF4A7, 0x7C49, 0xF4A6,
- 0x7C4A, 0xF4A8, 0x7C4C, 0xC477, 0x7C4D, 0xC479, 0x7C50, 0xC4F0, 0x7C53, 0xF5E5, 0x7C54, 0xF5E4, 0x7C57, 0xF6FA, 0x7C59, 0xF6FC,
- 0x7C5A, 0xF6FE, 0x7C5B, 0xF6FD, 0x7C5C, 0xF6FB, 0x7C5F, 0xC5A3, 0x7C60, 0xC5A2, 0x7C63, 0xC5D3, 0x7C64, 0xC5D2, 0x7C65, 0xC5D4,
- 0x7C66, 0xF7ED, 0x7C67, 0xF7EC, 0x7C69, 0xF8FB, 0x7C6A, 0xF8B8, 0x7C6B, 0xF8FC, 0x7C6C, 0xC658, 0x7C6E, 0xC659, 0x7C6F, 0xF96D,
- 0x7C72, 0xC67E, 0x7C73, 0xA6CC, 0x7C75, 0xCDA8, 0x7C78, 0xD045, 0x7C79, 0xD046, 0x7C7A, 0xD044, 0x7C7D, 0xACF3, 0x7C7F, 0xD047,
- 0x7C80, 0xD048, 0x7C81, 0xD049, 0x7C84, 0xD349, 0x7C85, 0xD34F, 0x7C88, 0xD34D, 0x7C89, 0xAFBB, 0x7C8A, 0xD34B, 0x7C8C, 0xD34C,
- 0x7C8D, 0xD34E, 0x7C91, 0xD34A, 0x7C92, 0xB2C9, 0x7C94, 0xD6DE, 0x7C95, 0xB2CB, 0x7C96, 0xD6E0, 0x7C97, 0xB2CA, 0x7C98, 0xD6DF,
- 0x7C9E, 0xDAE8, 0x7C9F, 0xB5AF, 0x7CA1, 0xDAEA, 0x7CA2, 0xDAE7, 0x7CA3, 0xD6E1, 0x7CA5, 0xB5B0, 0x7CA7, 0xF9DB, 0x7CA8, 0xDAE9,
- 0x7CAF, 0xDF56, 0x7CB1, 0xB864, 0x7CB2, 0xDF54, 0x7CB3, 0xB865, 0x7CB4, 0xDF55, 0x7CB5, 0xB866, 0x7CB9, 0xBAE9, 0x7CBA, 0xE361,
- 0x7CBB, 0xE35E, 0x7CBC, 0xE360, 0x7CBD, 0xBAEA, 0x7CBE, 0xBAEB, 0x7CBF, 0xE35F, 0x7CC5, 0xE6DF, 0x7CC8, 0xE6E0, 0x7CCA, 0xBD6B,
- 0x7CCB, 0xE6E2, 0x7CCC, 0xE6E1, 0x7CCE, 0xA261, 0x7CD0, 0xEACA, 0x7CD1, 0xEACB, 0x7CD2, 0xEAC7, 0x7CD4, 0xEAC8, 0x7CD5, 0xBF7C,
- 0x7CD6, 0xBF7D, 0x7CD7, 0xEAC9, 0x7CD9, 0xC157, 0x7CDC, 0xC153, 0x7CDD, 0xC158, 0x7CDE, 0xC154, 0x7CDF, 0xC156, 0x7CE0, 0xC152,
- 0x7CE2, 0xC155, 0x7CE7, 0xC2B3, 0x7CE8, 0xEDCF, 0x7CEA, 0xF2AE, 0x7CEC, 0xF2AD, 0x7CEE, 0xF4AB, 0x7CEF, 0xC47A, 0x7CF0, 0xC47B,
- 0x7CF1, 0xF741, 0x7CF2, 0xF5E6, 0x7CF4, 0xF740, 0x7CF6, 0xF8FD, 0x7CF7, 0xF9A4, 0x7CF8, 0xA6CD, 0x7CFB, 0xA874, 0x7CFD, 0xCDA9,
- 0x7CFE, 0xAAC8, 0x7D00, 0xACF6, 0x7D01, 0xD04C, 0x7D02, 0xACF4, 0x7D03, 0xD04A, 0x7D04, 0xACF9, 0x7D05, 0xACF5, 0x7D06, 0xACFA,
- 0x7D07, 0xACF8, 0x7D08, 0xD04B, 0x7D09, 0xACF7, 0x7D0A, 0xAFBF, 0x7D0B, 0xAFBE, 0x7D0C, 0xD35A, 0x7D0D, 0xAFC7, 0x7D0E, 0xD353,
- 0x7D0F, 0xD359, 0x7D10, 0xAFC3, 0x7D11, 0xD352, 0x7D12, 0xD358, 0x7D13, 0xD356, 0x7D14, 0xAFC2, 0x7D15, 0xAFC4, 0x7D16, 0xD355,
- 0x7D17, 0xAFBD, 0x7D18, 0xD354, 0x7D19, 0xAFC8, 0x7D1A, 0xAFC5, 0x7D1B, 0xAFC9, 0x7D1C, 0xAFC6, 0x7D1D, 0xD351, 0x7D1E, 0xD350,
- 0x7D1F, 0xD357, 0x7D20, 0xAFC0, 0x7D21, 0xAFBC, 0x7D22, 0xAFC1, 0x7D28, 0xD6F0, 0x7D29, 0xD6E9, 0x7D2B, 0xB5B5, 0x7D2C, 0xD6E8,
- 0x7D2E, 0xB2CF, 0x7D2F, 0xB2D6, 0x7D30, 0xB2D3, 0x7D31, 0xB2D9, 0x7D32, 0xB2D8, 0x7D33, 0xB2D4, 0x7D35, 0xD6E2, 0x7D36, 0xD6E5,
- 0x7D38, 0xD6E4, 0x7D39, 0xB2D0, 0x7D3A, 0xD6E6, 0x7D3B, 0xD6EF, 0x7D3C, 0xB2D1, 0x7D3D, 0xD6E3, 0x7D3E, 0xD6EC, 0x7D3F, 0xD6ED,
- 0x7D40, 0xB2D2, 0x7D41, 0xD6EA, 0x7D42, 0xB2D7, 0x7D43, 0xB2CD, 0x7D44, 0xB2D5, 0x7D45, 0xD6E7, 0x7D46, 0xB2CC, 0x7D47, 0xD6EB,
- 0x7D4A, 0xD6EE, 0x7D4E, 0xDAFB, 0x7D4F, 0xDAF2, 0x7D50, 0xB5B2, 0x7D51, 0xDAF9, 0x7D52, 0xDAF6, 0x7D53, 0xDAEE, 0x7D54, 0xDAF7,
- 0x7D55, 0xB5B4, 0x7D56, 0xDAEF, 0x7D58, 0xDAEB, 0x7D5B, 0xB86C, 0x7D5C, 0xDAF4, 0x7D5E, 0xB5B1, 0x7D5F, 0xDAFA, 0x7D61, 0xB5B8,
- 0x7D62, 0xB5BA, 0x7D63, 0xDAED, 0x7D66, 0xB5B9, 0x7D67, 0xDAF0, 0x7D68, 0xB5B3, 0x7D69, 0xDAF8, 0x7D6A, 0xDAF1, 0x7D6B, 0xDAF5,
- 0x7D6D, 0xDAF3, 0x7D6E, 0xB5B6, 0x7D6F, 0xDAEC, 0x7D70, 0xB5BB, 0x7D71, 0xB2CE, 0x7D72, 0xB5B7, 0x7D73, 0xB5BC, 0x7D79, 0xB868,
- 0x7D7A, 0xDF5D, 0x7D7B, 0xDF5F, 0x7D7C, 0xDF61, 0x7D7D, 0xDF65, 0x7D7F, 0xDF5B, 0x7D80, 0xDF59, 0x7D81, 0xB86A, 0x7D83, 0xDF60,
- 0x7D84, 0xDF64, 0x7D85, 0xDF5C, 0x7D86, 0xDF58, 0x7D88, 0xDF57, 0x7D8C, 0xDF62, 0x7D8D, 0xDF5A, 0x7D8E, 0xDF5E, 0x7D8F, 0xB86B,
- 0x7D91, 0xB869, 0x7D92, 0xDF66, 0x7D93, 0xB867, 0x7D94, 0xDF63, 0x7D96, 0xE372, 0x7D9C, 0xBAEE, 0x7D9D, 0xE36A, 0x7D9E, 0xBD78,
- 0x7D9F, 0xE374, 0x7DA0, 0xBAF1, 0x7DA1, 0xE378, 0x7DA2, 0xBAF7, 0x7DA3, 0xE365, 0x7DA6, 0xE375, 0x7DA7, 0xE362, 0x7DA9, 0xE377,
- 0x7DAA, 0xE366, 0x7DAC, 0xBAFE, 0x7DAD, 0xBAFB, 0x7DAE, 0xE376, 0x7DAF, 0xE370, 0x7DB0, 0xBAED, 0x7DB1, 0xBAF5, 0x7DB2, 0xBAF4,
- 0x7DB4, 0xBAF3, 0x7DB5, 0xBAF9, 0x7DB7, 0xE363, 0x7DB8, 0xBAFA, 0x7DB9, 0xE371, 0x7DBA, 0xBAF6, 0x7DBB, 0xBAEC, 0x7DBC, 0xE373,
- 0x7DBD, 0xBAEF, 0x7DBE, 0xBAF0, 0x7DBF, 0xBAF8, 0x7DC0, 0xE368, 0x7DC1, 0xE367, 0x7DC2, 0xE364, 0x7DC4, 0xE36C, 0x7DC5, 0xE369,
- 0x7DC6, 0xE36D, 0x7DC7, 0xBAFD, 0x7DC9, 0xE379, 0x7DCA, 0xBAF2, 0x7DCB, 0xE36E, 0x7DCC, 0xE36F, 0x7DCE, 0xE36B, 0x7DD2, 0xBAFC,
- 0x7DD7, 0xE6E7, 0x7DD8, 0xBD70, 0x7DD9, 0xBD79, 0x7DDA, 0xBD75, 0x7DDB, 0xE6E4, 0x7DDD, 0xBD72, 0x7DDE, 0xBD76, 0x7DDF, 0xE6F0,
- 0x7DE0, 0xBD6C, 0x7DE1, 0xE6E8, 0x7DE3, 0xBD74, 0x7DE6, 0xE6EB, 0x7DE7, 0xE6E6, 0x7DE8, 0xBD73, 0x7DE9, 0xBD77, 0x7DEA, 0xE6E5,
- 0x7DEC, 0xBD71, 0x7DEE, 0xE6EF, 0x7DEF, 0xBD6E, 0x7DF0, 0xE6EE, 0x7DF1, 0xE6ED, 0x7DF2, 0xBD7A, 0x7DF3, 0xE572, 0x7DF4, 0xBD6D,
- 0x7DF6, 0xE6EC, 0x7DF7, 0xE6E3, 0x7DF9, 0xBD7B, 0x7DFA, 0xE6EA, 0x7DFB, 0xBD6F, 0x7E03, 0xE6E9, 0x7E08, 0xBFA2, 0x7E09, 0xBFA7,
- 0x7E0A, 0xBF7E, 0x7E0B, 0xEAD8, 0x7E0C, 0xEACF, 0x7E0D, 0xEADB, 0x7E0E, 0xEAD3, 0x7E0F, 0xEAD9, 0x7E10, 0xBFA8, 0x7E11, 0xBFA1,
- 0x7E12, 0xEACC, 0x7E13, 0xEAD2, 0x7E14, 0xEADC, 0x7E15, 0xEAD5, 0x7E16, 0xEADA, 0x7E17, 0xEACE, 0x7E1A, 0xEAD6, 0x7E1B, 0xBFA3,
- 0x7E1C, 0xEAD4, 0x7E1D, 0xBFA6, 0x7E1E, 0xBFA5, 0x7E1F, 0xEAD0, 0x7E20, 0xEAD1, 0x7E21, 0xEACD, 0x7E22, 0xEAD7, 0x7E23, 0xBFA4,
- 0x7E24, 0xEADE, 0x7E25, 0xEADD, 0x7E29, 0xEDDA, 0x7E2A, 0xEDD6, 0x7E2B, 0xC15F, 0x7E2D, 0xEDD0, 0x7E2E, 0xC159, 0x7E2F, 0xC169,
- 0x7E30, 0xEDDC, 0x7E31, 0xC161, 0x7E32, 0xC15D, 0x7E33, 0xEDD3, 0x7E34, 0xC164, 0x7E35, 0xC167, 0x7E36, 0xEDDE, 0x7E37, 0xC15C,
- 0x7E38, 0xEDD5, 0x7E39, 0xC165, 0x7E3A, 0xEDE0, 0x7E3B, 0xEDDD, 0x7E3C, 0xEDD1, 0x7E3D, 0xC160, 0x7E3E, 0xC15A, 0x7E3F, 0xC168,
- 0x7E40, 0xEDD8, 0x7E41, 0xC163, 0x7E42, 0xEDD2, 0x7E43, 0xC15E, 0x7E44, 0xEDDF, 0x7E45, 0xC162, 0x7E46, 0xC15B, 0x7E47, 0xEDD9,
- 0x7E48, 0xC166, 0x7E49, 0xEDD7, 0x7E4C, 0xEDDB, 0x7E50, 0xF06E, 0x7E51, 0xF074, 0x7E52, 0xC2B9, 0x7E53, 0xF077, 0x7E54, 0xC2B4,
- 0x7E55, 0xC2B5, 0x7E56, 0xF06F, 0x7E57, 0xF076, 0x7E58, 0xF071, 0x7E59, 0xC2BA, 0x7E5A, 0xC2B7, 0x7E5C, 0xF06D, 0x7E5E, 0xC2B6,
- 0x7E5F, 0xF073, 0x7E60, 0xF075, 0x7E61, 0xC2B8, 0x7E62, 0xF072, 0x7E63, 0xF070, 0x7E68, 0xF2B8, 0x7E69, 0xC3B7, 0x7E6A, 0xC3B8,
- 0x7E6B, 0xC3B4, 0x7E6D, 0xC3B5, 0x7E6F, 0xF2B4, 0x7E70, 0xF2B2, 0x7E72, 0xF2B6, 0x7E73, 0xC3BA, 0x7E74, 0xF2B7, 0x7E75, 0xF2B0,
- 0x7E76, 0xF2AF, 0x7E77, 0xF2B3, 0x7E78, 0xF2B1, 0x7E79, 0xC3B6, 0x7E7A, 0xF2B5, 0x7E7B, 0xF4AC, 0x7E7C, 0xC47E, 0x7E7D, 0xC47D,
- 0x7E7E, 0xF4AD, 0x7E80, 0xF4AF, 0x7E81, 0xF4AE, 0x7E82, 0xC4A1, 0x7E86, 0xF5EB, 0x7E87, 0xF5E8, 0x7E88, 0xF5E9, 0x7E8A, 0xF5E7,
- 0x7E8B, 0xF5EA, 0x7E8C, 0xC4F2, 0x7E8D, 0xF5EC, 0x7E8F, 0xC4F1, 0x7E91, 0xF742, 0x7E93, 0xC5D5, 0x7E94, 0xC5D7, 0x7E95, 0xF7EE,
- 0x7E96, 0xC5D6, 0x7E97, 0xF8B9, 0x7E98, 0xF940, 0x7E99, 0xF942, 0x7E9A, 0xF8FE, 0x7E9B, 0xF941, 0x7E9C, 0xC66C, 0x7F36, 0xA6CE,
- 0x7F38, 0xACFB, 0x7F39, 0xD26F, 0x7F3A, 0xAFCA, 0x7F3D, 0xB2DA, 0x7F3E, 0xDAFC, 0x7F3F, 0xDAFD, 0x7F43, 0xEADF, 0x7F44, 0xC16A,
- 0x7F45, 0xEDE1, 0x7F48, 0xC2BB, 0x7F4A, 0xF2BA, 0x7F4B, 0xF2B9, 0x7F4C, 0xC4A2, 0x7F4D, 0xF5ED, 0x7F4F, 0xF743, 0x7F50, 0xC5F8,
- 0x7F51, 0xCA49, 0x7F54, 0xAAC9, 0x7F55, 0xA875, 0x7F58, 0xD04D, 0x7F5B, 0xD360, 0x7F5C, 0xD35B, 0x7F5D, 0xD35F, 0x7F5E, 0xD35D,
- 0x7F5F, 0xAFCB, 0x7F60, 0xD35E, 0x7F61, 0xD35C, 0x7F63, 0xD6F1, 0x7F65, 0xDAFE, 0x7F66, 0xDB40, 0x7F67, 0xDF69, 0x7F68, 0xDF6A,
- 0x7F69, 0xB86E, 0x7F6A, 0xB86F, 0x7F6B, 0xDF68, 0x7F6C, 0xDF6B, 0x7F6D, 0xDF67, 0x7F6E, 0xB86D, 0x7F70, 0xBB40, 0x7F72, 0xB870,
- 0x7F73, 0xE37A, 0x7F75, 0xBD7C, 0x7F76, 0xE6F1, 0x7F77, 0xBD7D, 0x7F79, 0xBFA9, 0x7F7A, 0xEAE2, 0x7F7B, 0xEAE0, 0x7F7C, 0xEAE1,
- 0x7F7D, 0xEDE4, 0x7F7E, 0xEDE3, 0x7F7F, 0xEDE2, 0x7F83, 0xF2BB, 0x7F85, 0xC3B9, 0x7F86, 0xF2BC, 0x7F87, 0xF744, 0x7F88, 0xC5F9,
- 0x7F89, 0xF8BA, 0x7F8A, 0xA6CF, 0x7F8B, 0xAACB, 0x7F8C, 0xAACA, 0x7F8D, 0xD04F, 0x7F8E, 0xACFC, 0x7F91, 0xD04E, 0x7F92, 0xD362,
- 0x7F94, 0xAFCC, 0x7F95, 0xD6F2, 0x7F96, 0xD361, 0x7F9A, 0xB2DC, 0x7F9B, 0xD6F5, 0x7F9C, 0xD6F3, 0x7F9D, 0xD6F4, 0x7F9E, 0xB2DB,
- 0x7FA0, 0xDB42, 0x7FA1, 0xDB43, 0x7FA2, 0xDB41, 0x7FA4, 0xB873, 0x7FA5, 0xDF6D, 0x7FA6, 0xDF6C, 0x7FA7, 0xDF6E, 0x7FA8, 0xB872,
- 0x7FA9, 0xB871, 0x7FAC, 0xE6F2, 0x7FAD, 0xE6F4, 0x7FAF, 0xBD7E, 0x7FB0, 0xE6F3, 0x7FB1, 0xEAE3, 0x7FB2, 0xBFAA, 0x7FB3, 0xF079,
- 0x7FB5, 0xF078, 0x7FB6, 0xC3BB, 0x7FB7, 0xF2BD, 0x7FB8, 0xC3BD, 0x7FB9, 0xC3BC, 0x7FBA, 0xF4B0, 0x7FBB, 0xF5EE, 0x7FBC, 0xC4F3,
- 0x7FBD, 0xA6D0, 0x7FBE, 0xD050, 0x7FBF, 0xACFD, 0x7FC0, 0xD365, 0x7FC1, 0xAFCE, 0x7FC2, 0xD364, 0x7FC3, 0xD363, 0x7FC5, 0xAFCD,
- 0x7FC7, 0xD6FB, 0x7FC9, 0xD6FD, 0x7FCA, 0xD6F6, 0x7FCB, 0xD6F7, 0x7FCC, 0xB2DD, 0x7FCD, 0xD6F8, 0x7FCE, 0xB2DE, 0x7FCF, 0xD6FC,
- 0x7FD0, 0xD6F9, 0x7FD1, 0xD6FA, 0x7FD2, 0xB2DF, 0x7FD4, 0xB5BE, 0x7FD5, 0xB5BF, 0x7FD7, 0xDB44, 0x7FDB, 0xDF6F, 0x7FDC, 0xDF70,
- 0x7FDE, 0xE37E, 0x7FDF, 0xBB43, 0x7FE0, 0xBB41, 0x7FE1, 0xBB42, 0x7FE2, 0xE37B, 0x7FE3, 0xE37C, 0x7FE5, 0xE37D, 0x7FE6, 0xE6F9,
- 0x7FE8, 0xE6FA, 0x7FE9, 0xBDA1, 0x7FEA, 0xE6F7, 0x7FEB, 0xE6F6, 0x7FEC, 0xE6F8, 0x7FED, 0xE6F5, 0x7FEE, 0xBFAD, 0x7FEF, 0xEAE4,
- 0x7FF0, 0xBFAB, 0x7FF1, 0xBFAC, 0x7FF2, 0xEDE6, 0x7FF3, 0xC16B, 0x7FF4, 0xEDE5, 0x7FF5, 0xEFA8, 0x7FF7, 0xF07A, 0x7FF8, 0xF07B,
- 0x7FF9, 0xC2BC, 0x7FFB, 0xC2BD, 0x7FFC, 0xC16C, 0x7FFD, 0xF2BE, 0x7FFE, 0xF2BF, 0x7FFF, 0xF4B1, 0x8000, 0xC4A3, 0x8001, 0xA6D1,
- 0x8003, 0xA6D2, 0x8004, 0xACFE, 0x8005, 0xAACC, 0x8006, 0xAFCF, 0x8007, 0xD051, 0x800B, 0xB5C0, 0x800C, 0xA6D3, 0x800D, 0xAD41,
- 0x800E, 0xD052, 0x800F, 0xD053, 0x8010, 0xAD40, 0x8011, 0xAD42, 0x8012, 0xA6D4, 0x8014, 0xD054, 0x8015, 0xAFD1, 0x8016, 0xD366,
- 0x8017, 0xAFD3, 0x8018, 0xAFD0, 0x8019, 0xAFD2, 0x801B, 0xD741, 0x801C, 0xB2E0, 0x801E, 0xD740, 0x801F, 0xD6FE, 0x8021, 0xDF71,
- 0x8024, 0xE3A1, 0x8026, 0xBDA2, 0x8028, 0xBFAE, 0x8029, 0xEAE6, 0x802A, 0xEAE5, 0x802C, 0xEDE7, 0x8030, 0xF5EF, 0x8033, 0xA6D5,
- 0x8034, 0xCB73, 0x8035, 0xCDAA, 0x8036, 0xAD43, 0x8037, 0xD055, 0x8039, 0xD368, 0x803D, 0xAFD4, 0x803E, 0xD367, 0x803F, 0xAFD5,
- 0x8043, 0xD743, 0x8046, 0xB2E2, 0x8047, 0xD742, 0x8048, 0xD744, 0x804A, 0xB2E1, 0x804F, 0xDB46, 0x8050, 0xDB47, 0x8051, 0xDB45,
- 0x8052, 0xB5C1, 0x8056, 0xB874, 0x8058, 0xB875, 0x805A, 0xBB45, 0x805C, 0xE3A3, 0x805D, 0xE3A2, 0x805E, 0xBB44, 0x8064, 0xE6FB,
- 0x8067, 0xE6FC, 0x806C, 0xEAE7, 0x806F, 0xC170, 0x8070, 0xC16F, 0x8071, 0xC16D, 0x8072, 0xC16E, 0x8073, 0xC171, 0x8075, 0xF07C,
- 0x8076, 0xC2BF, 0x8077, 0xC2BE, 0x8078, 0xF2C0, 0x8079, 0xF4B2, 0x807D, 0xC5A5, 0x807E, 0xC5A4, 0x807F, 0xA6D6, 0x8082, 0xD1FB,
- 0x8084, 0xB877, 0x8085, 0xB5C2, 0x8086, 0xB876, 0x8087, 0xBB46, 0x8089, 0xA6D7, 0x808A, 0xC9A9, 0x808B, 0xA6D8, 0x808C, 0xA6D9,
- 0x808F, 0xCDAB, 0x8090, 0xCB76, 0x8092, 0xCB77, 0x8093, 0xA877, 0x8095, 0xCB74, 0x8096, 0xA876, 0x8098, 0xA879, 0x8099, 0xCB75,
- 0x809A, 0xA87B, 0x809B, 0xA87A, 0x809C, 0xCB78, 0x809D, 0xA878, 0x80A1, 0xAAD1, 0x80A2, 0xAACF, 0x80A3, 0xCDAD, 0x80A5, 0xAACE,
- 0x80A9, 0xAAD3, 0x80AA, 0xAAD5, 0x80AB, 0xAAD2, 0x80AD, 0xCDB0, 0x80AE, 0xCDAC, 0x80AF, 0xAAD6, 0x80B1, 0xAAD0, 0x80B2, 0xA87C,
- 0x80B4, 0xAAD4, 0x80B5, 0xCDAF, 0x80B8, 0xCDAE, 0x80BA, 0xAACD, 0x80C2, 0xD05B, 0x80C3, 0xAD47, 0x80C4, 0xAD48, 0x80C5, 0xD05D,
- 0x80C7, 0xD057, 0x80C8, 0xD05A, 0x80C9, 0xD063, 0x80CA, 0xD061, 0x80CC, 0xAD49, 0x80CD, 0xD067, 0x80CE, 0xAD4C, 0x80CF, 0xD064,
- 0x80D0, 0xD05C, 0x80D1, 0xD059, 0x80D4, 0xDB49, 0x80D5, 0xD062, 0x80D6, 0xAD44, 0x80D7, 0xD065, 0x80D8, 0xD056, 0x80D9, 0xD05F,
- 0x80DA, 0xAD46, 0x80DB, 0xAD4B, 0x80DC, 0xD060, 0x80DD, 0xAD4F, 0x80DE, 0xAD4D, 0x80E0, 0xD058, 0x80E1, 0xAD4A, 0x80E3, 0xD05E,
- 0x80E4, 0xAD4E, 0x80E5, 0xAD45, 0x80E6, 0xD066, 0x80ED, 0xAFDA, 0x80EF, 0xAFE3, 0x80F0, 0xAFD8, 0x80F1, 0xAFD6, 0x80F2, 0xD36A,
- 0x80F3, 0xAFDE, 0x80F4, 0xAFDB, 0x80F5, 0xD36C, 0x80F8, 0xAFDD, 0x80F9, 0xD36B, 0x80FA, 0xD369, 0x80FB, 0xD36E, 0x80FC, 0xAFE2,
- 0x80FD, 0xAFE0, 0x80FE, 0xDB48, 0x8100, 0xD36F, 0x8101, 0xD36D, 0x8102, 0xAFD7, 0x8105, 0xAFD9, 0x8106, 0xAFDC, 0x8108, 0xAFDF,
- 0x810A, 0xAFE1, 0x8115, 0xD74E, 0x8116, 0xB2E4, 0x8118, 0xD745, 0x8119, 0xD747, 0x811B, 0xD748, 0x811D, 0xD750, 0x811E, 0xD74C,
- 0x811F, 0xD74A, 0x8121, 0xD74D, 0x8122, 0xD751, 0x8123, 0xB2E5, 0x8124, 0xB2E9, 0x8125, 0xD746, 0x8127, 0xD74F, 0x8129, 0xB2E7,
- 0x812B, 0xB2E6, 0x812C, 0xD74B, 0x812D, 0xD749, 0x812F, 0xB2E3, 0x8130, 0xB2E8, 0x8139, 0xB5C8, 0x813A, 0xDB51, 0x813D, 0xDB4F,
- 0x813E, 0xB5CA, 0x8143, 0xDB4A, 0x8144, 0xDFA1, 0x8146, 0xB5C9, 0x8147, 0xDB4E, 0x814A, 0xDB4B, 0x814B, 0xB5C5, 0x814C, 0xB5CB,
- 0x814D, 0xDB50, 0x814E, 0xB5C7, 0x814F, 0xDB4D, 0x8150, 0xBB47, 0x8151, 0xB5C6, 0x8152, 0xDB4C, 0x8153, 0xB5CC, 0x8154, 0xB5C4,
- 0x8155, 0xB5C3, 0x815B, 0xDF77, 0x815C, 0xDF75, 0x815E, 0xDF7B, 0x8160, 0xDF73, 0x8161, 0xDFA2, 0x8162, 0xDF78, 0x8164, 0xDF72,
- 0x8165, 0xB87B, 0x8166, 0xB8A3, 0x8167, 0xDF7D, 0x8169, 0xDF76, 0x816B, 0xB87E, 0x816E, 0xB87C, 0x816F, 0xDF7E, 0x8170, 0xB879,
- 0x8171, 0xB878, 0x8172, 0xDF79, 0x8173, 0xB87D, 0x8174, 0xB5CD, 0x8176, 0xDF7C, 0x8177, 0xDF74, 0x8178, 0xB87A, 0x8179, 0xB8A1,
- 0x817A, 0xB8A2, 0x817F, 0xBB4C, 0x8180, 0xBB48, 0x8182, 0xBB4D, 0x8183, 0xE3A6, 0x8186, 0xE3A5, 0x8187, 0xE3A7, 0x8188, 0xBB4A,
- 0x8189, 0xE3A4, 0x818A, 0xBB4B, 0x818B, 0xE3AA, 0x818C, 0xE3A9, 0x818D, 0xE3A8, 0x818F, 0xBB49, 0x8195, 0xE741, 0x8197, 0xE744,
- 0x8198, 0xBDA8, 0x8199, 0xE743, 0x819A, 0xBDA7, 0x819B, 0xBDA3, 0x819C, 0xBDA4, 0x819D, 0xBDA5, 0x819E, 0xE740, 0x819F, 0xE6FE,
- 0x81A0, 0xBDA6, 0x81A2, 0xE742, 0x81A3, 0xE6FD, 0x81A6, 0xEAE9, 0x81A7, 0xEAF3, 0x81A8, 0xBFB1, 0x81A9, 0xBFB0, 0x81AB, 0xEAED,
- 0x81AC, 0xEAEF, 0x81AE, 0xEAEA, 0x81B0, 0xEAEE, 0x81B1, 0xEAE8, 0x81B2, 0xEAF1, 0x81B3, 0xBFAF, 0x81B4, 0xEAF0, 0x81B5, 0xEAEC,
- 0x81B7, 0xEAF2, 0x81B9, 0xEAEB, 0x81BA, 0xC174, 0x81BB, 0xEDE8, 0x81BC, 0xEDEE, 0x81BD, 0xC178, 0x81BE, 0xC17A, 0x81BF, 0xC177,
- 0x81C0, 0xC176, 0x81C2, 0xC175, 0x81C3, 0xC173, 0x81C4, 0xEDE9, 0x81C5, 0xEDEC, 0x81C6, 0xC172, 0x81C7, 0xEDED, 0x81C9, 0xC179,
- 0x81CA, 0xEDEB, 0x81CC, 0xEDEA, 0x81CD, 0xC2C0, 0x81CF, 0xC2C1, 0x81D0, 0xF0A1, 0x81D1, 0xF07D, 0x81D2, 0xF07E, 0x81D5, 0xF2C2,
- 0x81D7, 0xF2C1, 0x81D8, 0xC3BE, 0x81D9, 0xF4B4, 0x81DA, 0xC4A4, 0x81DB, 0xF4B3, 0x81DD, 0xF5F0, 0x81DE, 0xF745, 0x81DF, 0xC5A6,
- 0x81E0, 0xF943, 0x81E1, 0xF944, 0x81E2, 0xC5D8, 0x81E3, 0xA6DA, 0x81E5, 0xAAD7, 0x81E6, 0xDB52, 0x81E7, 0xBB4E, 0x81E8, 0xC17B,
- 0x81E9, 0xEDEF, 0x81EA, 0xA6DB, 0x81EC, 0xAFE5, 0x81ED, 0xAFE4, 0x81EE, 0xDB53, 0x81F2, 0xEAF4, 0x81F3, 0xA6DC, 0x81F4, 0xAD50,
- 0x81F7, 0xDB54, 0x81F8, 0xDB55, 0x81F9, 0xDB56, 0x81FA, 0xBB4F, 0x81FB, 0xBFB2, 0x81FC, 0xA6DD, 0x81FE, 0xAAD8, 0x81FF, 0xD068,
- 0x8200, 0xAFE6, 0x8201, 0xD370, 0x8202, 0xB2EA, 0x8204, 0xDB57, 0x8205, 0xB8A4, 0x8207, 0xBB50, 0x8208, 0xBFB3, 0x8209, 0xC17C,
- 0x820A, 0xC2C2, 0x820B, 0xF4B5, 0x820C, 0xA6DE, 0x820D, 0xAAD9, 0x8210, 0xAFE7, 0x8211, 0xD752, 0x8212, 0xB5CE, 0x8214, 0xBB51,
- 0x8215, 0xE3AB, 0x8216, 0xE745, 0x821B, 0xA6DF, 0x821C, 0xB5CF, 0x821D, 0xDFA3, 0x821E, 0xBB52, 0x821F, 0xA6E0, 0x8220, 0xCDB1,
- 0x8221, 0xD069, 0x8222, 0xAD51, 0x8225, 0xD372, 0x8228, 0xAFEA, 0x822A, 0xAFE8, 0x822B, 0xAFE9, 0x822C, 0xAFEB, 0x822F, 0xD371,
- 0x8232, 0xD757, 0x8233, 0xD754, 0x8234, 0xD756, 0x8235, 0xB2EB, 0x8236, 0xB2ED, 0x8237, 0xB2EC, 0x8238, 0xD753, 0x8239, 0xB2EE,
- 0x823A, 0xD755, 0x823C, 0xDB58, 0x823D, 0xDB59, 0x823F, 0xDB5A, 0x8240, 0xDFA6, 0x8242, 0xDFA7, 0x8244, 0xDFA5, 0x8245, 0xDFA8,
- 0x8247, 0xB8A5, 0x8249, 0xDFA4, 0x824B, 0xBB53, 0x824E, 0xE74A, 0x824F, 0xE746, 0x8250, 0xE749, 0x8251, 0xE74B, 0x8252, 0xE748,
- 0x8253, 0xE747, 0x8255, 0xEAF5, 0x8256, 0xEAF6, 0x8257, 0xEAF7, 0x8258, 0xBFB4, 0x8259, 0xBFB5, 0x825A, 0xEDF1, 0x825B, 0xEDF0,
- 0x825C, 0xEDF2, 0x825E, 0xF0A3, 0x825F, 0xF0A2, 0x8261, 0xF2C4, 0x8263, 0xF2C5, 0x8264, 0xF2C3, 0x8266, 0xC4A5, 0x8268, 0xF4B6,
- 0x8269, 0xF4B7, 0x826B, 0xF746, 0x826C, 0xF7EF, 0x826D, 0xF8BB, 0x826E, 0xA6E1, 0x826F, 0xA87D, 0x8271, 0xC17D, 0x8272, 0xA6E2,
- 0x8274, 0xD758, 0x8275, 0xDB5B, 0x8277, 0xC641, 0x8278, 0xCA4A, 0x827C, 0xCA4B, 0x827D, 0xCA4D, 0x827E, 0xA6E3, 0x827F, 0xCA4E,
- 0x8280, 0xCA4C, 0x8283, 0xCBA2, 0x8284, 0xCBA3, 0x8285, 0xCB7B, 0x828A, 0xCBA1, 0x828B, 0xA8A1, 0x828D, 0xA8A2, 0x828E, 0xCB7C,
- 0x828F, 0xCB7A, 0x8290, 0xCB79, 0x8291, 0xCB7D, 0x8292, 0xA87E, 0x8293, 0xCB7E, 0x8294, 0xD06A, 0x8298, 0xCDB6, 0x8299, 0xAADC,
- 0x829A, 0xCDB5, 0x829B, 0xCDB7, 0x829D, 0xAADB, 0x829E, 0xCDBC, 0x829F, 0xAADF, 0x82A0, 0xCDB2, 0x82A1, 0xCDC0, 0x82A2, 0xCDC6,
- 0x82A3, 0xAAE6, 0x82A4, 0xCDC3, 0x82A5, 0xAAE3, 0x82A7, 0xCDB9, 0x82A8, 0xCDBF, 0x82A9, 0xCDC1, 0x82AB, 0xCDB4, 0x82AC, 0xAAE2,
- 0x82AD, 0xAADD, 0x82AE, 0xCDBA, 0x82AF, 0xAAE4, 0x82B0, 0xAAE7, 0x82B1, 0xAAE1, 0x82B3, 0xAADA, 0x82B4, 0xCDBE, 0x82B5, 0xCDB8,
- 0x82B6, 0xCDC5, 0x82B7, 0xAAE9, 0x82B8, 0xAAE5, 0x82B9, 0xAAE0, 0x82BA, 0xCDBD, 0x82BB, 0xAFEC, 0x82BC, 0xCDBB, 0x82BD, 0xAADE,
- 0x82BE, 0xAAE8, 0x82C0, 0xCDB3, 0x82C2, 0xCDC2, 0x82C3, 0xCDC4, 0x82D1, 0xAD62, 0x82D2, 0xAD5C, 0x82D3, 0xAD64, 0x82D4, 0xAD61,
- 0x82D5, 0xD071, 0x82D6, 0xD074, 0x82D7, 0xAD5D, 0x82D9, 0xD06B, 0x82DB, 0xAD56, 0x82DC, 0xAD60, 0x82DE, 0xAD63, 0x82DF, 0xAD65,
- 0x82E0, 0xD0A2, 0x82E1, 0xD077, 0x82E3, 0xAD55, 0x82E4, 0xD0A1, 0x82E5, 0xAD59, 0x82E6, 0xAD57, 0x82E7, 0xAD52, 0x82E8, 0xD06F,
- 0x82EA, 0xD07E, 0x82EB, 0xD073, 0x82EC, 0xD076, 0x82ED, 0xD0A5, 0x82EF, 0xAD66, 0x82F0, 0xD07D, 0x82F1, 0xAD5E, 0x82F2, 0xD078,
- 0x82F3, 0xD0A4, 0x82F4, 0xD075, 0x82F5, 0xD079, 0x82F6, 0xD07C, 0x82F9, 0xD06D, 0x82FA, 0xD0A3, 0x82FB, 0xD07B, 0x82FE, 0xD06C,
- 0x8300, 0xD070, 0x8301, 0xAD5F, 0x8302, 0xAD5A, 0x8303, 0xAD53, 0x8304, 0xAD58, 0x8305, 0xAD54, 0x8306, 0xAD67, 0x8307, 0xD06E,
- 0x8308, 0xD3A5, 0x8309, 0xAD5B, 0x830C, 0xD07A, 0x830D, 0xCE41, 0x8316, 0xD3A8, 0x8317, 0xAFFA, 0x8319, 0xD376, 0x831B, 0xD3A3,
- 0x831C, 0xD37D, 0x831E, 0xD3B2, 0x8320, 0xD3AA, 0x8322, 0xD37E, 0x8324, 0xD3A9, 0x8325, 0xD378, 0x8326, 0xD37C, 0x8327, 0xD3B5,
- 0x8328, 0xAFFD, 0x8329, 0xD3AD, 0x832A, 0xD3A4, 0x832B, 0xAFED, 0x832C, 0xD3B3, 0x832D, 0xD374, 0x832F, 0xD3AC, 0x8331, 0xAFFC,
- 0x8332, 0xAFF7, 0x8333, 0xD373, 0x8334, 0xAFF5, 0x8335, 0xAFF4, 0x8336, 0xAFF9, 0x8337, 0xD3AB, 0x8338, 0xAFF1, 0x8339, 0xAFF8,
- 0x833A, 0xD072, 0x833B, 0xDB5C, 0x833C, 0xD3A6, 0x833F, 0xD37A, 0x8340, 0xAFFB, 0x8341, 0xD37B, 0x8342, 0xD3A1, 0x8343, 0xAFFE,
- 0x8344, 0xD375, 0x8345, 0xD3AF, 0x8347, 0xD3AE, 0x8348, 0xD3B6, 0x8349, 0xAFF3, 0x834A, 0xAFF0, 0x834B, 0xD3B4, 0x834C, 0xD3B0,
- 0x834D, 0xD3A7, 0x834E, 0xD3A2, 0x834F, 0xAFF6, 0x8350, 0xAFF2, 0x8351, 0xD377, 0x8352, 0xAFEE, 0x8353, 0xD3B1, 0x8354, 0xAFEF,
- 0x8356, 0xD379, 0x8373, 0xD75E, 0x8374, 0xD760, 0x8375, 0xD765, 0x8376, 0xD779, 0x8377, 0xB2FC, 0x8378, 0xB2F2, 0x837A, 0xD75D,
- 0x837B, 0xB2FD, 0x837C, 0xB2FE, 0x837D, 0xD768, 0x837E, 0xD76F, 0x837F, 0xD775, 0x8381, 0xD762, 0x8383, 0xD769, 0x8386, 0xB340,
- 0x8387, 0xD777, 0x8388, 0xD772, 0x8389, 0xB2FA, 0x838A, 0xB2F8, 0x838B, 0xD76E, 0x838C, 0xD76A, 0x838D, 0xD75C, 0x838E, 0xB2EF,
- 0x838F, 0xD761, 0x8390, 0xD759, 0x8392, 0xB2F7, 0x8393, 0xB2F9, 0x8394, 0xD766, 0x8395, 0xD763, 0x8396, 0xB2F4, 0x8397, 0xD773,
- 0x8398, 0xB2F1, 0x8399, 0xD764, 0x839A, 0xD77A, 0x839B, 0xD76C, 0x839D, 0xD76B, 0x839E, 0xB2F0, 0x83A0, 0xB2FB, 0x83A2, 0xB2F3,
- 0x83A3, 0xD75A, 0x83A4, 0xD75F, 0x83A5, 0xD770, 0x83A6, 0xD776, 0x83A7, 0xB341, 0x83A8, 0xD75B, 0x83A9, 0xD767, 0x83AA, 0xD76D,
- 0x83AB, 0xB2F6, 0x83AE, 0xD778, 0x83AF, 0xD771, 0x83B0, 0xD774, 0x83BD, 0xB2F5, 0x83BF, 0xDB6C, 0x83C0, 0xDB60, 0x83C1, 0xB5D7,
- 0x83C2, 0xDB7D, 0x83C3, 0xDBA7, 0x83C4, 0xDBAA, 0x83C5, 0xB5D5, 0x83C6, 0xDB68, 0x83C7, 0xDBA3, 0x83C8, 0xDB69, 0x83C9, 0xDB77,
- 0x83CA, 0xB5E2, 0x83CB, 0xDB73, 0x83CC, 0xB5DF, 0x83CE, 0xDB74, 0x83CF, 0xDB5D, 0x83D1, 0xDBA4, 0x83D4, 0xB5E8, 0x83D5, 0xDBA1,
- 0x83D6, 0xDB75, 0x83D7, 0xDBAC, 0x83D8, 0xDB70, 0x83D9, 0xDFC8, 0x83DB, 0xDBAF, 0x83DC, 0xB5E6, 0x83DD, 0xDB6E, 0x83DE, 0xDB7A,
- 0x83DF, 0xB5E9, 0x83E0, 0xB5D4, 0x83E1, 0xDB72, 0x83E2, 0xDBAD, 0x83E3, 0xDB6B, 0x83E4, 0xDB64, 0x83E5, 0xDB6F, 0x83E7, 0xDB63,
- 0x83E8, 0xDB61, 0x83E9, 0xB5D0, 0x83EA, 0xDBA5, 0x83EB, 0xDB6A, 0x83EC, 0xDBA8, 0x83EE, 0xDBA9, 0x83EF, 0xB5D8, 0x83F0, 0xB5DD,
- 0x83F1, 0xB5D9, 0x83F2, 0xB5E1, 0x83F3, 0xDB7E, 0x83F4, 0xB5DA, 0x83F5, 0xDB76, 0x83F6, 0xDB66, 0x83F8, 0xB5D2, 0x83F9, 0xDB5E,
- 0x83FA, 0xDBA2, 0x83FB, 0xDBAB, 0x83FC, 0xDB65, 0x83FD, 0xB5E0, 0x83FE, 0xDBB0, 0x83FF, 0xDB71, 0x8401, 0xDB6D, 0x8403, 0xB5D1,
- 0x8404, 0xB5E5, 0x8406, 0xDB7C, 0x8407, 0xB5E7, 0x8409, 0xDB78, 0x840A, 0xB5DC, 0x840B, 0xB5D6, 0x840C, 0xB5DE, 0x840D, 0xB5D3,
- 0x840E, 0xB5E4, 0x840F, 0xDB79, 0x8410, 0xDB67, 0x8411, 0xDB7B, 0x8412, 0xDB62, 0x8413, 0xDBA6, 0x841B, 0xDBAE, 0x8423, 0xDB5F,
- 0x8429, 0xDFC7, 0x842B, 0xDFDD, 0x842C, 0xB855, 0x842D, 0xDFCC, 0x842F, 0xDFCA, 0x8430, 0xDFB5, 0x8431, 0xB8A9, 0x8432, 0xDFC5,
- 0x8433, 0xDFD9, 0x8434, 0xDFC1, 0x8435, 0xB8B1, 0x8436, 0xDFD8, 0x8437, 0xDFBF, 0x8438, 0xB5E3, 0x8439, 0xDFCF, 0x843A, 0xDFC0,
- 0x843B, 0xDFD6, 0x843C, 0xB8B0, 0x843D, 0xB8A8, 0x843F, 0xDFAA, 0x8440, 0xDFB2, 0x8442, 0xDFCB, 0x8443, 0xDFC3, 0x8444, 0xDFDC,
- 0x8445, 0xDFC6, 0x8446, 0xB8B6, 0x8447, 0xDFD7, 0x8449, 0xB8AD, 0x844B, 0xDFC9, 0x844C, 0xDFD1, 0x844D, 0xDFB6, 0x844E, 0xDFD0,
- 0x8450, 0xDFE1, 0x8451, 0xDFB1, 0x8452, 0xDFD2, 0x8454, 0xDFDF, 0x8456, 0xDFAB, 0x8457, 0xB5DB, 0x8459, 0xDFB9, 0x845A, 0xDFB8,
- 0x845B, 0xB8AF, 0x845D, 0xDFBC, 0x845E, 0xDFBE, 0x845F, 0xDFCD, 0x8460, 0xDFDE, 0x8461, 0xB8B2, 0x8463, 0xB8B3, 0x8465, 0xDFB0,
- 0x8466, 0xB8AB, 0x8467, 0xDFB4, 0x8468, 0xDFDA, 0x8469, 0xB8B4, 0x846B, 0xB8AC, 0x846C, 0xB8AE, 0x846D, 0xB8B5, 0x846E, 0xDFE0,
- 0x846F, 0xDFD3, 0x8470, 0xDFCE, 0x8473, 0xDFBB, 0x8474, 0xDFBA, 0x8475, 0xB8AA, 0x8476, 0xDFAC, 0x8477, 0xB8A7, 0x8478, 0xDFC4,
- 0x8479, 0xDFAD, 0x847A, 0xDFC2, 0x847D, 0xDFB7, 0x847E, 0xDFDB, 0x8482, 0xB8A6, 0x8486, 0xDFB3, 0x848D, 0xDFAF, 0x848E, 0xDFD5,
- 0x848F, 0xDFAE, 0x8490, 0xBB60, 0x8491, 0xE3D3, 0x8494, 0xE3C2, 0x8497, 0xE3AC, 0x8498, 0xE3CA, 0x8499, 0xBB58, 0x849A, 0xE3BB,
- 0x849B, 0xE3C5, 0x849C, 0xBB5B, 0x849D, 0xE3BE, 0x849E, 0xBB59, 0x849F, 0xE3AF, 0x84A0, 0xE3CD, 0x84A1, 0xE3AE, 0x84A2, 0xE3C1,
- 0x84A4, 0xE3AD, 0x84A7, 0xE3BF, 0x84A8, 0xE3C8, 0x84A9, 0xE3C6, 0x84AA, 0xE3BA, 0x84AB, 0xE3B5, 0x84AC, 0xE3B3, 0x84AE, 0xE3B4,
- 0x84AF, 0xE3C7, 0x84B0, 0xE3D2, 0x84B1, 0xE3BC, 0x84B2, 0xBB5A, 0x84B4, 0xE3B7, 0x84B6, 0xE3CB, 0x84B8, 0xBB5D, 0x84B9, 0xE3B6,
- 0x84BA, 0xE3B0, 0x84BB, 0xE3C0, 0x84BC, 0xBB61, 0x84BF, 0xBB55, 0x84C0, 0xBB5E, 0x84C1, 0xE3B8, 0x84C2, 0xE3B2, 0x84C4, 0xBB57,
- 0x84C5, 0xDFD4, 0x84C6, 0xBB56, 0x84C7, 0xE3C3, 0x84C9, 0xBB54, 0x84CA, 0xBB63, 0x84CB, 0xBB5C, 0x84CC, 0xE3C4, 0x84CD, 0xE3B9,
- 0x84CE, 0xE3B1, 0x84CF, 0xE3CC, 0x84D0, 0xE3BD, 0x84D1, 0xBB62, 0x84D2, 0xE3D0, 0x84D3, 0xBB5F, 0x84D4, 0xE3CF, 0x84D6, 0xE3C9,
- 0x84D7, 0xE3CE, 0x84DB, 0xE3D1, 0x84E7, 0xE773, 0x84E8, 0xE774, 0x84E9, 0xE767, 0x84EA, 0xE766, 0x84EB, 0xE762, 0x84EC, 0xBDB4,
- 0x84EE, 0xBDAC, 0x84EF, 0xE776, 0x84F0, 0xE775, 0x84F1, 0xDFA9, 0x84F2, 0xE75F, 0x84F3, 0xE763, 0x84F4, 0xE75D, 0x84F6, 0xE770,
- 0x84F7, 0xE761, 0x84F9, 0xE777, 0x84FA, 0xE75A, 0x84FB, 0xE758, 0x84FC, 0xE764, 0x84FD, 0xE76E, 0x84FE, 0xE769, 0x84FF, 0xBDB6,
- 0x8500, 0xE74F, 0x8502, 0xE76D, 0x8506, 0xBDB7, 0x8507, 0xDFBD, 0x8508, 0xE75B, 0x8509, 0xE752, 0x850A, 0xE755, 0x850B, 0xE77B,
- 0x850C, 0xE75C, 0x850D, 0xE753, 0x850E, 0xE751, 0x850F, 0xE74E, 0x8511, 0xBDB0, 0x8512, 0xE765, 0x8513, 0xBDAF, 0x8514, 0xBDB3,
- 0x8515, 0xE760, 0x8516, 0xE768, 0x8517, 0xBDA9, 0x8518, 0xE778, 0x8519, 0xE77C, 0x851A, 0xBDAB, 0x851C, 0xE757, 0x851D, 0xE76B,
- 0x851E, 0xE76F, 0x851F, 0xE754, 0x8520, 0xE779, 0x8521, 0xBDB2, 0x8523, 0xBDB1, 0x8524, 0xE74C, 0x8525, 0xBDB5, 0x8526, 0xE772,
- 0x8527, 0xE756, 0x8528, 0xE76A, 0x8529, 0xE750, 0x852A, 0xE75E, 0x852B, 0xE759, 0x852C, 0xBDAD, 0x852D, 0xBDAE, 0x852E, 0xE76C,
- 0x852F, 0xE77D, 0x8530, 0xE77A, 0x8531, 0xE771, 0x853B, 0xE74D, 0x853D, 0xBDAA, 0x853E, 0xEB49, 0x8540, 0xEB40, 0x8541, 0xEB43,
- 0x8543, 0xBFBB, 0x8544, 0xEB45, 0x8545, 0xEAF9, 0x8546, 0xEB41, 0x8547, 0xEB47, 0x8548, 0xBFB8, 0x8549, 0xBFBC, 0x854A, 0xBFB6,
- 0x854D, 0xEAFB, 0x854E, 0xEB4C, 0x8551, 0xEB46, 0x8553, 0xEAFC, 0x8554, 0xEB55, 0x8555, 0xEB4F, 0x8556, 0xEAF8, 0x8557, 0xEE46,
- 0x8558, 0xEAFE, 0x8559, 0xBFB7, 0x855B, 0xEB4A, 0x855D, 0xEB54, 0x855E, 0xBFBF, 0x8560, 0xEB51, 0x8561, 0xEAFD, 0x8562, 0xEB44,
- 0x8563, 0xEB48, 0x8564, 0xEB42, 0x8565, 0xEB56, 0x8566, 0xEB53, 0x8567, 0xEB50, 0x8568, 0xBFB9, 0x8569, 0xBFBA, 0x856A, 0xBFBE,
- 0x856B, 0xEAFA, 0x856C, 0xEB57, 0x856D, 0xBFBD, 0x856E, 0xEB4D, 0x8571, 0xEB4B, 0x8575, 0xEB4E, 0x8576, 0xEE53, 0x8577, 0xEE40,
- 0x8578, 0xEE45, 0x8579, 0xEE52, 0x857A, 0xEE44, 0x857B, 0xEDFB, 0x857C, 0xEE41, 0x857E, 0xC1A2, 0x8580, 0xEDF4, 0x8581, 0xEE4D,
- 0x8582, 0xEE4F, 0x8583, 0xEDF3, 0x8584, 0xC1A1, 0x8585, 0xEE51, 0x8586, 0xEE49, 0x8587, 0xC1A8, 0x8588, 0xEE50, 0x8589, 0xEE42,
- 0x858A, 0xC1AA, 0x858B, 0xEDF9, 0x858C, 0xEB52, 0x858D, 0xEE4A, 0x858E, 0xEE47, 0x858F, 0xEDF5, 0x8590, 0xEE55, 0x8591, 0xC1A4,
- 0x8594, 0xC1A5, 0x8595, 0xEDF7, 0x8596, 0xEE48, 0x8598, 0xEE54, 0x8599, 0xEE4B, 0x859A, 0xEDFD, 0x859B, 0xC1A7, 0x859C, 0xC1A3,
- 0x859D, 0xEE4C, 0x859E, 0xEDFE, 0x859F, 0xEE56, 0x85A0, 0xEDF8, 0x85A1, 0xEE43, 0x85A2, 0xEE4E, 0x85A3, 0xEDFA, 0x85A4, 0xEDFC,
- 0x85A6, 0xC2CB, 0x85A7, 0xEDF6, 0x85A8, 0xC1A9, 0x85A9, 0xC2C4, 0x85AA, 0xC17E, 0x85AF, 0xC1A6, 0x85B0, 0xC2C8, 0x85B1, 0xF0B3,
- 0x85B3, 0xF0A9, 0x85B4, 0xF0A4, 0x85B5, 0xF0AA, 0x85B6, 0xF0B4, 0x85B7, 0xF0B8, 0x85B8, 0xF0B7, 0x85B9, 0xC2CA, 0x85BA, 0xC2C9,
- 0x85BD, 0xF0AB, 0x85BE, 0xF0B9, 0x85BF, 0xF0AE, 0x85C0, 0xF0A6, 0x85C2, 0xF0A8, 0x85C3, 0xF0A7, 0x85C4, 0xF0AD, 0x85C5, 0xF0B2,
- 0x85C6, 0xF0A5, 0x85C7, 0xF0AC, 0x85C8, 0xF0B1, 0x85C9, 0xC2C7, 0x85CB, 0xF0AF, 0x85CD, 0xC2C5, 0x85CE, 0xF0B0, 0x85CF, 0xC2C3,
- 0x85D0, 0xC2C6, 0x85D1, 0xF2D5, 0x85D2, 0xF0B5, 0x85D5, 0xC3C2, 0x85D7, 0xF2CD, 0x85D8, 0xF2D1, 0x85D9, 0xF2C9, 0x85DA, 0xF2CC,
- 0x85DC, 0xF2D4, 0x85DD, 0xC3C0, 0x85DE, 0xF2D9, 0x85DF, 0xF2D2, 0x85E1, 0xF2CA, 0x85E2, 0xF2DA, 0x85E3, 0xF2D3, 0x85E4, 0xC3C3,
- 0x85E5, 0xC3C4, 0x85E6, 0xF2D7, 0x85E8, 0xF2CB, 0x85E9, 0xC3BF, 0x85EA, 0xC3C1, 0x85EB, 0xF2C6, 0x85EC, 0xF2CE, 0x85ED, 0xF2C8,
- 0x85EF, 0xF2D8, 0x85F0, 0xF2D6, 0x85F1, 0xF2C7, 0x85F2, 0xF2CF, 0x85F6, 0xF4BE, 0x85F7, 0xC3C5, 0x85F8, 0xF2D0, 0x85F9, 0xC4A7,
- 0x85FA, 0xC4A9, 0x85FB, 0xC4A6, 0x85FD, 0xF4C3, 0x85FE, 0xF4BB, 0x85FF, 0xF4B9, 0x8600, 0xF4BD, 0x8601, 0xF4BA, 0x8604, 0xF4BF,
- 0x8605, 0xF4C1, 0x8606, 0xC4AA, 0x8607, 0xC4AC, 0x8609, 0xF4C0, 0x860A, 0xC4AD, 0x860B, 0xC4AB, 0x860C, 0xF4C2, 0x8611, 0xC4A8,
- 0x8617, 0xC4F4, 0x8618, 0xF5F1, 0x8619, 0xF5F7, 0x861A, 0xC4F6, 0x861B, 0xF4BC, 0x861C, 0xF5F6, 0x861E, 0xF5FD, 0x861F, 0xF5F4,
- 0x8620, 0xF5FB, 0x8621, 0xF5FA, 0x8622, 0xF4B8, 0x8623, 0xF5F5, 0x8624, 0xF0B6, 0x8625, 0xF5FE, 0x8626, 0xF5F3, 0x8627, 0xF5F8,
- 0x8629, 0xF5FC, 0x862A, 0xF5F2, 0x862C, 0xF74A, 0x862D, 0xC4F5, 0x862E, 0xF5F9, 0x8631, 0xF7F4, 0x8632, 0xF74B, 0x8633, 0xF749,
- 0x8634, 0xF747, 0x8635, 0xF748, 0x8636, 0xF74C, 0x8638, 0xC5D9, 0x8639, 0xF7F2, 0x863A, 0xF7F0, 0x863B, 0xF7F5, 0x863C, 0xF7F3,
- 0x863E, 0xF7F6, 0x863F, 0xC5DA, 0x8640, 0xF7F1, 0x8643, 0xF8BC, 0x8646, 0xF945, 0x8647, 0xF946, 0x8648, 0xF947, 0x864B, 0xF9C7,
- 0x864C, 0xF9BD, 0x864D, 0xCA4F, 0x864E, 0xAAEA, 0x8650, 0xAD68, 0x8652, 0xD3B8, 0x8653, 0xD3B7, 0x8654, 0xB040, 0x8655, 0xB342,
- 0x8656, 0xD77C, 0x8659, 0xD77B, 0x865B, 0xB5EA, 0x865C, 0xB8B8, 0x865E, 0xB8B7, 0x865F, 0xB8B9, 0x8661, 0xE3D4, 0x8662, 0xE77E,
- 0x8663, 0xEB58, 0x8664, 0xEB5A, 0x8665, 0xEB59, 0x8667, 0xC1AB, 0x8668, 0xEE57, 0x8669, 0xF0BA, 0x866A, 0xF9A5, 0x866B, 0xA6E4,
- 0x866D, 0xCDC9, 0x866E, 0xCDCA, 0x866F, 0xCDC8, 0x8670, 0xCDC7, 0x8671, 0xAAEB, 0x8673, 0xD0A9, 0x8674, 0xD0A7, 0x8677, 0xD0A6,
- 0x8679, 0xAD69, 0x867A, 0xAD6B, 0x867B, 0xAD6A, 0x867C, 0xD0A8, 0x8685, 0xD3C4, 0x8686, 0xD3C1, 0x8687, 0xD3BF, 0x868A, 0xB041,
- 0x868B, 0xD3C2, 0x868C, 0xB046, 0x868D, 0xD3BC, 0x868E, 0xD3CB, 0x8690, 0xD3CD, 0x8691, 0xD3BD, 0x8693, 0xB043, 0x8694, 0xD3CE,
- 0x8695, 0xD3C9, 0x8696, 0xD3BB, 0x8697, 0xD3C0, 0x8698, 0xD3CA, 0x8699, 0xD3C6, 0x869A, 0xD3C3, 0x869C, 0xB048, 0x869D, 0xD3CC,
- 0x869E, 0xD3BE, 0x86A1, 0xD3C7, 0x86A2, 0xD3B9, 0x86A3, 0xB047, 0x86A4, 0xB044, 0x86A5, 0xD3C5, 0x86A7, 0xD3C8, 0x86A8, 0xD3BA,
- 0x86A9, 0xB045, 0x86AA, 0xB042, 0x86AF, 0xB34C, 0x86B0, 0xD7A5, 0x86B1, 0xB34B, 0x86B3, 0xD7A8, 0x86B4, 0xD7AB, 0x86B5, 0xB348,
- 0x86B6, 0xB346, 0x86B7, 0xD77E, 0x86B8, 0xD7A9, 0x86B9, 0xD7A7, 0x86BA, 0xD7A4, 0x86BB, 0xD7AC, 0x86BC, 0xD7AD, 0x86BD, 0xD7AF,
- 0x86BE, 0xD7B0, 0x86BF, 0xD77D, 0x86C0, 0xB345, 0x86C1, 0xD7A2, 0x86C2, 0xD7A1, 0x86C3, 0xD7AE, 0x86C4, 0xB347, 0x86C5, 0xD7A3,
- 0x86C6, 0xB349, 0x86C7, 0xB344, 0x86C8, 0xD7A6, 0x86C9, 0xB34D, 0x86CB, 0xB34A, 0x86CC, 0xD7AA, 0x86D0, 0xB5F1, 0x86D1, 0xDBBF,
- 0x86D3, 0xDBB4, 0x86D4, 0xB5EE, 0x86D6, 0xDFE7, 0x86D7, 0xDBBD, 0x86D8, 0xDBB1, 0x86D9, 0xB5EC, 0x86DA, 0xDBB6, 0x86DB, 0xB5EF,
- 0x86DC, 0xDBBA, 0x86DD, 0xDBB8, 0x86DE, 0xB5F2, 0x86DF, 0xB5EB, 0x86E2, 0xDBB2, 0x86E3, 0xDBB5, 0x86E4, 0xB5F0, 0x86E6, 0xDBB3,
- 0x86E8, 0xDBBE, 0x86E9, 0xDBBC, 0x86EA, 0xDBB7, 0x86EB, 0xDBB9, 0x86EC, 0xDBBB, 0x86ED, 0xB5ED, 0x86F5, 0xDFE8, 0x86F6, 0xDFEE,
- 0x86F7, 0xDFE4, 0x86F8, 0xDFEA, 0x86F9, 0xB8BA, 0x86FA, 0xDFE6, 0x86FB, 0xB8C0, 0x86FE, 0xB8BF, 0x8700, 0xB8BE, 0x8701, 0xDFED,
- 0x8702, 0xB8C1, 0x8703, 0xB8C2, 0x8704, 0xDFE3, 0x8705, 0xDFF0, 0x8706, 0xB8C3, 0x8707, 0xB8BD, 0x8708, 0xB8BC, 0x8709, 0xDFEC,
- 0x870A, 0xB8C4, 0x870B, 0xDFE2, 0x870C, 0xDFE5, 0x870D, 0xDFEF, 0x870E, 0xDFEB, 0x8711, 0xE3F4, 0x8712, 0xE3E9, 0x8713, 0xB8BB,
- 0x8718, 0xBB6A, 0x8719, 0xE3DD, 0x871A, 0xE3F2, 0x871B, 0xE3DE, 0x871C, 0xBB65, 0x871E, 0xE3DB, 0x8720, 0xE3E4, 0x8721, 0xE3DC,
- 0x8722, 0xBB67, 0x8723, 0xE3D6, 0x8724, 0xE3F1, 0x8725, 0xBB68, 0x8726, 0xE3EE, 0x8727, 0xE3EF, 0x8728, 0xE3D7, 0x8729, 0xBB6D,
- 0x872A, 0xE3E6, 0x872C, 0xE3E0, 0x872D, 0xE3E7, 0x872E, 0xE3DA, 0x8730, 0xE3F3, 0x8731, 0xE3EB, 0x8732, 0xE3E5, 0x8733, 0xE3D5,
- 0x8734, 0xBB69, 0x8735, 0xE3EC, 0x8737, 0xBB6C, 0x8738, 0xE3F0, 0x873A, 0xE3EA, 0x873B, 0xBB66, 0x873C, 0xE3E8, 0x873E, 0xE3E2,
- 0x873F, 0xBB64, 0x8740, 0xE3D9, 0x8741, 0xE3E1, 0x8742, 0xE3ED, 0x8743, 0xE3DF, 0x8746, 0xE3E3, 0x874C, 0xBDC1, 0x874D, 0xDFE9,
- 0x874E, 0xE7B2, 0x874F, 0xE7BB, 0x8750, 0xE7B1, 0x8751, 0xE7AD, 0x8752, 0xE7AA, 0x8753, 0xBDC2, 0x8754, 0xE7A8, 0x8755, 0xBB6B,
- 0x8756, 0xE7A1, 0x8757, 0xBDC0, 0x8758, 0xE7A7, 0x8759, 0xBDBF, 0x875A, 0xE7AC, 0x875B, 0xE7A9, 0x875C, 0xE7B9, 0x875D, 0xE7B4,
- 0x875E, 0xE7AE, 0x875F, 0xE7B3, 0x8760, 0xBDBB, 0x8761, 0xE7AB, 0x8762, 0xE7BE, 0x8763, 0xE7A2, 0x8764, 0xE7A3, 0x8765, 0xE7BA,
- 0x8766, 0xBDBC, 0x8767, 0xE7BF, 0x8768, 0xBDBE, 0x8769, 0xE7C0, 0x876A, 0xE7B0, 0x876B, 0xE3D8, 0x876C, 0xE7B6, 0x876D, 0xE7AF,
- 0x876E, 0xE7B8, 0x876F, 0xE7B5, 0x8773, 0xE7A6, 0x8774, 0xBDB9, 0x8775, 0xE7BD, 0x8776, 0xBDBA, 0x8777, 0xE7A4, 0x8778, 0xBDBD,
- 0x8779, 0xEB64, 0x877A, 0xE7B7, 0x877B, 0xE7BC, 0x8781, 0xEB61, 0x8782, 0xBDB8, 0x8783, 0xBFC0, 0x8784, 0xEB6B, 0x8785, 0xEB67,
- 0x8787, 0xEB65, 0x8788, 0xEB60, 0x8789, 0xEB6F, 0x878D, 0xBFC4, 0x878F, 0xEB5C, 0x8790, 0xEB68, 0x8791, 0xEB69, 0x8792, 0xEB5F,
- 0x8793, 0xEB5E, 0x8794, 0xEB6C, 0x8796, 0xEB62, 0x8797, 0xEB5D, 0x8798, 0xEB63, 0x879A, 0xEB6E, 0x879B, 0xEB5B, 0x879C, 0xEB6D,
- 0x879D, 0xEB6A, 0x879E, 0xBFC2, 0x879F, 0xBFC1, 0x87A2, 0xBFC3, 0x87A3, 0xEB66, 0x87A4, 0xF0CB, 0x87AA, 0xEE59, 0x87AB, 0xC1B1,
- 0x87AC, 0xEE5D, 0x87AD, 0xEE5A, 0x87AE, 0xEE61, 0x87AF, 0xEE67, 0x87B0, 0xEE5C, 0x87B2, 0xEE70, 0x87B3, 0xC1AE, 0x87B4, 0xEE6A,
- 0x87B5, 0xEE5F, 0x87B6, 0xEE6B, 0x87B7, 0xEE66, 0x87B8, 0xEE6D, 0x87B9, 0xEE5E, 0x87BA, 0xC1B3, 0x87BB, 0xC1B2, 0x87BC, 0xEE60,
- 0x87BD, 0xEE6E, 0x87BE, 0xEE58, 0x87BF, 0xEE6C, 0x87C0, 0xC1AC, 0x87C2, 0xEE64, 0x87C3, 0xEE63, 0x87C4, 0xEE68, 0x87C5, 0xEE5B,
- 0x87C6, 0xC1B0, 0x87C8, 0xC1B4, 0x87C9, 0xEE62, 0x87CA, 0xEE69, 0x87CB, 0xC1B5, 0x87CC, 0xEE65, 0x87D1, 0xC1AD, 0x87D2, 0xC1AF,
- 0x87D3, 0xF0C7, 0x87D4, 0xF0C5, 0x87D7, 0xF0CC, 0x87D8, 0xF0C9, 0x87D9, 0xF0CD, 0x87DB, 0xF0BE, 0x87DC, 0xF0C6, 0x87DD, 0xF0D1,
- 0x87DE, 0xEE6F, 0x87DF, 0xF0C2, 0x87E0, 0xC2CF, 0x87E1, 0xE7A5, 0x87E2, 0xF0BD, 0x87E3, 0xF0CA, 0x87E4, 0xF0C4, 0x87E5, 0xF0C1,
- 0x87E6, 0xF0BC, 0x87E7, 0xF0BB, 0x87E8, 0xF0D0, 0x87EA, 0xF0C0, 0x87EB, 0xF0BF, 0x87EC, 0xC2CD, 0x87ED, 0xF0C8, 0x87EF, 0xC2CC,
- 0x87F2, 0xC2CE, 0x87F3, 0xF0C3, 0x87F4, 0xF0CF, 0x87F6, 0xF2DE, 0x87F7, 0xF2DF, 0x87F9, 0xC3C9, 0x87FA, 0xF2DC, 0x87FB, 0xC3C6,
- 0x87FC, 0xF2E4, 0x87FE, 0xC3CA, 0x87FF, 0xF2E6, 0x8800, 0xF2DB, 0x8801, 0xF0CE, 0x8802, 0xF2E8, 0x8803, 0xF2DD, 0x8805, 0xC3C7,
- 0x8806, 0xF2E3, 0x8808, 0xF2E5, 0x8809, 0xF2E0, 0x880A, 0xF2E7, 0x880B, 0xF2E2, 0x880C, 0xF2E1, 0x880D, 0xC3C8, 0x8810, 0xF4C5,
- 0x8811, 0xF4C6, 0x8813, 0xF4C8, 0x8814, 0xC4AE, 0x8815, 0xC4AF, 0x8816, 0xF4C9, 0x8817, 0xF4C7, 0x8819, 0xF4C4, 0x881B, 0xF642,
- 0x881C, 0xF645, 0x881D, 0xF641, 0x881F, 0xC4FA, 0x8820, 0xF643, 0x8821, 0xC4F9, 0x8822, 0xC4F8, 0x8823, 0xC4F7, 0x8824, 0xF644,
- 0x8825, 0xF751, 0x8826, 0xF74F, 0x8828, 0xF74E, 0x8829, 0xF640, 0x882A, 0xF750, 0x882B, 0xF646, 0x882C, 0xF74D, 0x882E, 0xF7F9,
- 0x882F, 0xF7D7, 0x8830, 0xF7F7, 0x8831, 0xC5DB, 0x8832, 0xF7F8, 0x8833, 0xF7FA, 0x8835, 0xF8BF, 0x8836, 0xC5FA, 0x8837, 0xF8BE,
- 0x8838, 0xF8BD, 0x8839, 0xC5FB, 0x883B, 0xC65A, 0x883C, 0xF96E, 0x883D, 0xF9A7, 0x883E, 0xF9A6, 0x883F, 0xF9A8, 0x8840, 0xA6E5,
- 0x8841, 0xD0AA, 0x8843, 0xD3CF, 0x8844, 0xD3D0, 0x8848, 0xDBC0, 0x884A, 0xF647, 0x884B, 0xF8C0, 0x884C, 0xA6E6, 0x884D, 0xAD6C,
- 0x884E, 0xD0AB, 0x8852, 0xD7B1, 0x8853, 0xB34E, 0x8855, 0xDBC2, 0x8856, 0xDBC1, 0x8857, 0xB5F3, 0x8859, 0xB8C5, 0x885A, 0xE7C1,
- 0x885B, 0xBDC3, 0x885D, 0xBDC4, 0x8861, 0xBFC5, 0x8862, 0xC5FC, 0x8863, 0xA6E7, 0x8867, 0xD0AC, 0x8868, 0xAAED, 0x8869, 0xD0AE,
- 0x886A, 0xD0AD, 0x886B, 0xAD6D, 0x886D, 0xD3D1, 0x886F, 0xD3D8, 0x8870, 0xB049, 0x8871, 0xD3D6, 0x8872, 0xD3D4, 0x8874, 0xD3DB,
- 0x8875, 0xD3D2, 0x8876, 0xD3D3, 0x8877, 0xB04A, 0x8879, 0xB04E, 0x887C, 0xD3DC, 0x887D, 0xB04D, 0x887E, 0xD3DA, 0x887F, 0xD3D7,
- 0x8880, 0xD3D5, 0x8881, 0xB04B, 0x8882, 0xB04C, 0x8883, 0xD3D9, 0x8888, 0xB350, 0x8889, 0xD7B2, 0x888B, 0xB355, 0x888C, 0xD7C2,
- 0x888D, 0xB354, 0x888E, 0xD7C4, 0x8891, 0xD7B8, 0x8892, 0xB352, 0x8893, 0xD7C3, 0x8895, 0xD7B3, 0x8896, 0xB353, 0x8897, 0xD7BF,
- 0x8898, 0xD7BB, 0x8899, 0xD7BD, 0x889A, 0xD7B7, 0x889B, 0xD7BE, 0x889E, 0xB34F, 0x889F, 0xD7BA, 0x88A1, 0xD7B9, 0x88A2, 0xD7B5,
- 0x88A4, 0xD7C0, 0x88A7, 0xD7BC, 0x88A8, 0xD7B4, 0x88AA, 0xD7B6, 0x88AB, 0xB351, 0x88AC, 0xD7C1, 0x88B1, 0xB5F6, 0x88B2, 0xDBCD,
- 0x88B6, 0xDBC9, 0x88B7, 0xDBCB, 0x88B8, 0xDBC6, 0x88B9, 0xDBC5, 0x88BA, 0xDBC3, 0x88BC, 0xDBCA, 0x88BD, 0xDBCC, 0x88BE, 0xDBC8,
- 0x88C0, 0xDBC7, 0x88C1, 0xB5F4, 0x88C2, 0xB5F5, 0x88C9, 0xDBCF, 0x88CA, 0xB8CD, 0x88CB, 0xDFF2, 0x88CC, 0xDFF8, 0x88CD, 0xDFF3,
- 0x88CE, 0xDFF4, 0x88CF, 0xF9D8, 0x88D0, 0xDFF9, 0x88D2, 0xB8CF, 0x88D4, 0xB8C7, 0x88D5, 0xB8CE, 0x88D6, 0xDFF1, 0x88D7, 0xDBC4,
- 0x88D8, 0xB8CA, 0x88D9, 0xB8C8, 0x88DA, 0xDFF7, 0x88DB, 0xDFF6, 0x88DC, 0xB8C9, 0x88DD, 0xB8CB, 0x88DE, 0xDFF5, 0x88DF, 0xB8C6,
- 0x88E1, 0xB8CC, 0x88E7, 0xE3F6, 0x88E8, 0xBB74, 0x88EB, 0xE442, 0x88EC, 0xE441, 0x88EE, 0xE3FB, 0x88EF, 0xBB76, 0x88F0, 0xE440,
- 0x88F1, 0xE3F7, 0x88F2, 0xE3F8, 0x88F3, 0xBB6E, 0x88F4, 0xBB70, 0x88F6, 0xE3FD, 0x88F7, 0xE3F5, 0x88F8, 0xBB72, 0x88F9, 0xBB71,
- 0x88FA, 0xE3F9, 0x88FB, 0xE3FE, 0x88FC, 0xE3FC, 0x88FD, 0xBB73, 0x88FE, 0xE3FA, 0x8901, 0xDBCE, 0x8902, 0xBB6F, 0x8905, 0xE7C2,
- 0x8906, 0xE7C9, 0x8907, 0xBDC6, 0x8909, 0xE7CD, 0x890A, 0xBDCA, 0x890B, 0xE7C5, 0x890C, 0xE7C3, 0x890E, 0xE7CC, 0x8910, 0xBDC5,
- 0x8911, 0xE7CB, 0x8912, 0xBDC7, 0x8913, 0xBDC8, 0x8914, 0xE7C4, 0x8915, 0xBDC9, 0x8916, 0xE7CA, 0x8917, 0xE7C6, 0x8918, 0xE7C7,
- 0x8919, 0xE7C8, 0x891A, 0xBB75, 0x891E, 0xEB70, 0x891F, 0xEB7C, 0x8921, 0xBFCA, 0x8922, 0xEB77, 0x8923, 0xEB79, 0x8925, 0xBFC8,
- 0x8926, 0xEB71, 0x8927, 0xEB75, 0x8929, 0xEB78, 0x892A, 0xBFC6, 0x892B, 0xBFC9, 0x892C, 0xEB7B, 0x892D, 0xEB73, 0x892E, 0xEB74,
- 0x892F, 0xEB7A, 0x8930, 0xEB72, 0x8931, 0xEB76, 0x8932, 0xBFC7, 0x8933, 0xEE72, 0x8935, 0xEE71, 0x8936, 0xC1B7, 0x8937, 0xEE77,
- 0x8938, 0xC1B9, 0x893B, 0xC1B6, 0x893C, 0xEE73, 0x893D, 0xC1BA, 0x893E, 0xEE74, 0x8941, 0xEE75, 0x8942, 0xEE78, 0x8944, 0xC1B8,
- 0x8946, 0xF0D6, 0x8949, 0xF0D9, 0x894B, 0xF0D3, 0x894C, 0xF0D5, 0x894F, 0xF0D4, 0x8950, 0xF0D7, 0x8951, 0xF0D8, 0x8952, 0xEE76,
- 0x8953, 0xF0D2, 0x8956, 0xC3CD, 0x8957, 0xF2EC, 0x8958, 0xF2EF, 0x8959, 0xF2F1, 0x895A, 0xF2EA, 0x895B, 0xF2EB, 0x895C, 0xF2EE,
- 0x895D, 0xF2F0, 0x895E, 0xC3CE, 0x895F, 0xC3CC, 0x8960, 0xC3CB, 0x8961, 0xF2ED, 0x8962, 0xF2E9, 0x8963, 0xF4CA, 0x8964, 0xC4B0,
- 0x8966, 0xF4CB, 0x8969, 0xF649, 0x896A, 0xC4FB, 0x896B, 0xF64B, 0x896C, 0xC4FC, 0x896D, 0xF648, 0x896E, 0xF64A, 0x896F, 0xC5A8,
- 0x8971, 0xF752, 0x8972, 0xC5A7, 0x8973, 0xF7FD, 0x8974, 0xF7FC, 0x8976, 0xF7FB, 0x8979, 0xF948, 0x897A, 0xF949, 0x897B, 0xF94B,
- 0x897C, 0xF94A, 0x897E, 0xCA50, 0x897F, 0xA6E8, 0x8981, 0xAD6E, 0x8982, 0xD7C5, 0x8983, 0xB5F7, 0x8985, 0xDFFA, 0x8986, 0xC2D0,
- 0x8988, 0xF2F2, 0x898B, 0xA8A3, 0x898F, 0xB357, 0x8993, 0xB356, 0x8995, 0xDBD0, 0x8996, 0xB5F8, 0x8997, 0xDBD2, 0x8998, 0xDBD1,
- 0x899B, 0xDFFB, 0x899C, 0xB8D0, 0x899D, 0xE443, 0x899E, 0xE446, 0x899F, 0xE445, 0x89A1, 0xE444, 0x89A2, 0xE7CE, 0x89A3, 0xE7D0,
- 0x89A4, 0xE7CF, 0x89A6, 0xBFCC, 0x89AA, 0xBFCB, 0x89AC, 0xC1BB, 0x89AD, 0xEE79, 0x89AE, 0xEE7B, 0x89AF, 0xEE7A, 0x89B2, 0xC2D1,
- 0x89B6, 0xF2F4, 0x89B7, 0xF2F3, 0x89B9, 0xF4CC, 0x89BA, 0xC4B1, 0x89BD, 0xC4FD, 0x89BE, 0xF754, 0x89BF, 0xF753, 0x89C0, 0xC65B,
- 0x89D2, 0xA8A4, 0x89D3, 0xD0AF, 0x89D4, 0xAD6F, 0x89D5, 0xD7C8, 0x89D6, 0xD7C6, 0x89D9, 0xD7C7, 0x89DA, 0xDBD4, 0x89DB, 0xDBD5,
- 0x89DC, 0xE043, 0x89DD, 0xDBD3, 0x89DF, 0xDFFC, 0x89E0, 0xE041, 0x89E1, 0xE040, 0x89E2, 0xE042, 0x89E3, 0xB8D1, 0x89E4, 0xDFFE,
- 0x89E5, 0xDFFD, 0x89E6, 0xE044, 0x89E8, 0xE449, 0x89E9, 0xE447, 0x89EB, 0xE448, 0x89EC, 0xE7D3, 0x89ED, 0xE7D1, 0x89F0, 0xE7D2,
- 0x89F1, 0xEB7D, 0x89F2, 0xEE7C, 0x89F3, 0xEE7D, 0x89F4, 0xC2D2, 0x89F6, 0xF2F5, 0x89F7, 0xF4CD, 0x89F8, 0xC4B2, 0x89FA, 0xF64C,
- 0x89FB, 0xF755, 0x89FC, 0xC5A9, 0x89FE, 0xF7FE, 0x89FF, 0xF94C, 0x8A00, 0xA8A5, 0x8A02, 0xAD71, 0x8A03, 0xAD72, 0x8A04, 0xD0B0,
- 0x8A07, 0xD0B1, 0x8A08, 0xAD70, 0x8A0A, 0xB054, 0x8A0C, 0xB052, 0x8A0E, 0xB051, 0x8A0F, 0xB058, 0x8A10, 0xB050, 0x8A11, 0xB059,
- 0x8A12, 0xD3DD, 0x8A13, 0xB056, 0x8A15, 0xB053, 0x8A16, 0xB057, 0x8A17, 0xB055, 0x8A18, 0xB04F, 0x8A1B, 0xB35F, 0x8A1D, 0xB359,
- 0x8A1E, 0xD7CC, 0x8A1F, 0xB35E, 0x8A22, 0xB360, 0x8A23, 0xB35A, 0x8A25, 0xB35B, 0x8A27, 0xD7CA, 0x8A2A, 0xB358, 0x8A2C, 0xD7CB,
- 0x8A2D, 0xB35D, 0x8A30, 0xD7C9, 0x8A31, 0xB35C, 0x8A34, 0xB644, 0x8A36, 0xB646, 0x8A39, 0xDBD8, 0x8A3A, 0xB645, 0x8A3B, 0xB5F9,
- 0x8A3C, 0xB5FD, 0x8A3E, 0xB8E4, 0x8A3F, 0xE049, 0x8A40, 0xDBDA, 0x8A41, 0xB5FE, 0x8A44, 0xDBDD, 0x8A45, 0xDBDE, 0x8A46, 0xB643,
- 0x8A48, 0xDBE0, 0x8A4A, 0xDBE2, 0x8A4C, 0xDBE3, 0x8A4D, 0xDBD7, 0x8A4E, 0xDBD6, 0x8A4F, 0xDBE4, 0x8A50, 0xB642, 0x8A51, 0xDBE1,
- 0x8A52, 0xDBDF, 0x8A54, 0xB640, 0x8A55, 0xB5FB, 0x8A56, 0xB647, 0x8A57, 0xDBDB, 0x8A58, 0xDBDC, 0x8A59, 0xDBD9, 0x8A5B, 0xB641,
- 0x8A5E, 0xB5FC, 0x8A60, 0xB5FA, 0x8A61, 0xE048, 0x8A62, 0xB8DF, 0x8A63, 0xB8DA, 0x8A66, 0xB8D5, 0x8A68, 0xB8E5, 0x8A69, 0xB8D6,
- 0x8A6B, 0xB8D2, 0x8A6C, 0xB8E1, 0x8A6D, 0xB8DE, 0x8A6E, 0xB8E0, 0x8A70, 0xB8D7, 0x8A71, 0xB8DC, 0x8A72, 0xB8D3, 0x8A73, 0xB8D4,
- 0x8A74, 0xE050, 0x8A75, 0xE04D, 0x8A76, 0xE045, 0x8A77, 0xE04A, 0x8A79, 0xB8E2, 0x8A7A, 0xE051, 0x8A7B, 0xB8E3, 0x8A7C, 0xB8D9,
- 0x8A7F, 0xE047, 0x8A81, 0xE04F, 0x8A82, 0xE04B, 0x8A83, 0xE04E, 0x8A84, 0xE04C, 0x8A85, 0xB8DD, 0x8A86, 0xE046, 0x8A87, 0xB8D8,
- 0x8A8B, 0xE44C, 0x8A8C, 0xBB78, 0x8A8D, 0xBB7B, 0x8A8F, 0xE44E, 0x8A91, 0xBBA5, 0x8A92, 0xE44D, 0x8A93, 0xBB7D, 0x8A95, 0xBDCF,
- 0x8A96, 0xE44F, 0x8A98, 0xBBA4, 0x8A99, 0xE44B, 0x8A9A, 0xBBA6, 0x8A9E, 0xBB79, 0x8AA0, 0xB8DB, 0x8AA1, 0xBB7C, 0x8AA3, 0xBB7A,
- 0x8AA4, 0xBB7E, 0x8AA5, 0xBBA2, 0x8AA6, 0xBB77, 0x8AA7, 0xBBA7, 0x8AA8, 0xBBA3, 0x8AAA, 0xBBA1, 0x8AAB, 0xE44A, 0x8AB0, 0xBDD6,
- 0x8AB2, 0xBDD2, 0x8AB6, 0xBDD9, 0x8AB8, 0xE7D6, 0x8AB9, 0xBDDA, 0x8ABA, 0xE7E2, 0x8ABB, 0xE7DB, 0x8ABC, 0xBDCB, 0x8ABD, 0xE7E3,
- 0x8ABE, 0xE7DD, 0x8ABF, 0xBDD5, 0x8AC0, 0xE7DE, 0x8AC2, 0xBDD4, 0x8AC3, 0xE7E1, 0x8AC4, 0xBDCE, 0x8AC5, 0xE7DF, 0x8AC6, 0xE7D5,
- 0x8AC7, 0xBDCD, 0x8AC8, 0xEBAA, 0x8AC9, 0xBDD3, 0x8ACB, 0xBDD0, 0x8ACD, 0xBDD8, 0x8ACF, 0xE7D4, 0x8AD1, 0xE7D8, 0x8AD2, 0xBDCC,
- 0x8AD3, 0xE7D7, 0x8AD4, 0xE7D9, 0x8AD5, 0xE7DA, 0x8AD6, 0xBDD7, 0x8AD7, 0xE7DC, 0x8AD8, 0xE7E0, 0x8AD9, 0xE7E4, 0x8ADB, 0xBDDB,
- 0x8ADC, 0xBFD2, 0x8ADD, 0xEBA5, 0x8ADE, 0xEBAB, 0x8ADF, 0xEBA8, 0x8AE0, 0xEB7E, 0x8AE1, 0xEBAC, 0x8AE2, 0xEBA1, 0x8AE4, 0xEBA7,
- 0x8AE6, 0xBFCD, 0x8AE7, 0xBFD3, 0x8AE8, 0xEBAD, 0x8AEB, 0xBFCF, 0x8AED, 0xBFD9, 0x8AEE, 0xBFD4, 0x8AEF, 0xEBAF, 0x8AF0, 0xEBA9,
- 0x8AF1, 0xBFD0, 0x8AF2, 0xEBA2, 0x8AF3, 0xBFDA, 0x8AF4, 0xEBA3, 0x8AF5, 0xEBA4, 0x8AF6, 0xBFDB, 0x8AF7, 0xBFD8, 0x8AF8, 0xBDD1,
- 0x8AFA, 0xBFCE, 0x8AFB, 0xEBB0, 0x8AFC, 0xBFDC, 0x8AFE, 0xBFD5, 0x8AFF, 0xEBAE, 0x8B00, 0xBFD1, 0x8B01, 0xBFD6, 0x8B02, 0xBFD7,
- 0x8B04, 0xC1C3, 0x8B05, 0xEEA4, 0x8B06, 0xEEAD, 0x8B07, 0xEEAA, 0x8B08, 0xEEAC, 0x8B0A, 0xC1C0, 0x8B0B, 0xEEA5, 0x8B0D, 0xEEAB,
- 0x8B0E, 0xC1BC, 0x8B0F, 0xEEA7, 0x8B10, 0xC1C4, 0x8B11, 0xEEA3, 0x8B12, 0xEEA8, 0x8B13, 0xEEAF, 0x8B14, 0xEBA6, 0x8B15, 0xEEA9,
- 0x8B16, 0xEEA2, 0x8B17, 0xC1BD, 0x8B18, 0xEEA1, 0x8B19, 0xC1BE, 0x8B1A, 0xEEB0, 0x8B1B, 0xC1BF, 0x8B1C, 0xEEAE, 0x8B1D, 0xC1C2,
- 0x8B1E, 0xEE7E, 0x8B20, 0xC1C1, 0x8B22, 0xEEA6, 0x8B23, 0xF0DC, 0x8B24, 0xF0EA, 0x8B25, 0xF0E5, 0x8B26, 0xF0E7, 0x8B27, 0xF0DB,
- 0x8B28, 0xC2D3, 0x8B2A, 0xF0DA, 0x8B2B, 0xC2D6, 0x8B2C, 0xC2D5, 0x8B2E, 0xF0E9, 0x8B2F, 0xF0E1, 0x8B30, 0xF0DE, 0x8B31, 0xF0E4,
- 0x8B33, 0xF0DD, 0x8B35, 0xF0DF, 0x8B36, 0xF0E8, 0x8B37, 0xF0E6, 0x8B39, 0xC2D4, 0x8B3A, 0xF0ED, 0x8B3B, 0xF0EB, 0x8B3C, 0xF0E2,
- 0x8B3D, 0xF0EC, 0x8B3E, 0xF0E3, 0x8B40, 0xF2F9, 0x8B41, 0xC3CF, 0x8B42, 0xF341, 0x8B45, 0xF64F, 0x8B46, 0xC3D6, 0x8B47, 0xF0E0,
- 0x8B48, 0xF2F7, 0x8B49, 0xC3D2, 0x8B4A, 0xF2F8, 0x8B4B, 0xF2FD, 0x8B4E, 0xC3D4, 0x8B4F, 0xC3D5, 0x8B50, 0xF2F6, 0x8B51, 0xF340,
- 0x8B52, 0xF342, 0x8B53, 0xF2FA, 0x8B54, 0xF2FC, 0x8B55, 0xF2FE, 0x8B56, 0xF2FB, 0x8B57, 0xF343, 0x8B58, 0xC3D1, 0x8B59, 0xC3D7,
- 0x8B5A, 0xC3D3, 0x8B5C, 0xC3D0, 0x8B5D, 0xF4D0, 0x8B5F, 0xC4B7, 0x8B60, 0xF4CE, 0x8B63, 0xF4D2, 0x8B65, 0xF4D3, 0x8B66, 0xC4B5,
- 0x8B67, 0xF4D4, 0x8B68, 0xF4D1, 0x8B6A, 0xF4CF, 0x8B6B, 0xC4B8, 0x8B6C, 0xC4B4, 0x8B6D, 0xF4D5, 0x8B6F, 0xC4B6, 0x8B70, 0xC4B3,
- 0x8B74, 0xC4FE, 0x8B77, 0xC540, 0x8B78, 0xF64E, 0x8B79, 0xF64D, 0x8B7A, 0xF650, 0x8B7B, 0xF651, 0x8B7D, 0xC541, 0x8B7E, 0xF756,
- 0x8B7F, 0xF75B, 0x8B80, 0xC5AA, 0x8B82, 0xF758, 0x8B84, 0xF757, 0x8B85, 0xF75A, 0x8B86, 0xF759, 0x8B88, 0xF843, 0x8B8A, 0xC5DC,
- 0x8B8B, 0xF842, 0x8B8C, 0xF840, 0x8B8E, 0xF841, 0x8B92, 0xC5FE, 0x8B93, 0xC5FD, 0x8B94, 0xF8C1, 0x8B95, 0xF8C2, 0x8B96, 0xC640,
- 0x8B98, 0xF94D, 0x8B99, 0xF94E, 0x8B9A, 0xC667, 0x8B9C, 0xC66D, 0x8B9E, 0xF9A9, 0x8B9F, 0xF9C8, 0x8C37, 0xA8A6, 0x8C39, 0xD7CD,
- 0x8C3B, 0xD7CE, 0x8C3C, 0xE052, 0x8C3D, 0xE450, 0x8C3E, 0xE7E5, 0x8C3F, 0xC1C6, 0x8C41, 0xC1C5, 0x8C42, 0xF0EE, 0x8C43, 0xF344,
- 0x8C45, 0xF844, 0x8C46, 0xA8A7, 0x8C47, 0xD3DE, 0x8C48, 0xB05A, 0x8C49, 0xB361, 0x8C4A, 0xE054, 0x8C4B, 0xE053, 0x8C4C, 0xBDDC,
- 0x8C4D, 0xE7E6, 0x8C4E, 0xBDDD, 0x8C4F, 0xEEB1, 0x8C50, 0xC2D7, 0x8C54, 0xC676, 0x8C55, 0xA8A8, 0x8C56, 0xCDCB, 0x8C57, 0xD3DF,
- 0x8C5A, 0xB362, 0x8C5C, 0xD7CF, 0x8C5D, 0xD7D0, 0x8C5F, 0xDBE5, 0x8C61, 0xB648, 0x8C62, 0xB8E6, 0x8C64, 0xE056, 0x8C65, 0xE055,
- 0x8C66, 0xE057, 0x8C68, 0xE451, 0x8C69, 0xE452, 0x8C6A, 0xBBA8, 0x8C6B, 0xBFDD, 0x8C6C, 0xBDDE, 0x8C6D, 0xBFDE, 0x8C6F, 0xEEB5,
- 0x8C70, 0xEEB2, 0x8C71, 0xEEB4, 0x8C72, 0xEEB3, 0x8C73, 0xC1C7, 0x8C75, 0xF0EF, 0x8C76, 0xF346, 0x8C77, 0xF345, 0x8C78, 0xCBA4,
- 0x8C79, 0xB05C, 0x8C7A, 0xB05B, 0x8C7B, 0xD3E0, 0x8C7D, 0xD7D1, 0x8C80, 0xDBE7, 0x8C81, 0xDBE6, 0x8C82, 0xB649, 0x8C84, 0xE059,
- 0x8C85, 0xE05A, 0x8C86, 0xE058, 0x8C89, 0xB8E8, 0x8C8A, 0xB8E7, 0x8C8C, 0xBBAA, 0x8C8D, 0xBBA9, 0x8C8F, 0xE7E7, 0x8C90, 0xEBB3,
- 0x8C91, 0xEBB1, 0x8C92, 0xEBB2, 0x8C93, 0xBFDF, 0x8C94, 0xEEB7, 0x8C95, 0xEEB6, 0x8C97, 0xF0F2, 0x8C98, 0xF0F1, 0x8C99, 0xF0F0,
- 0x8C9A, 0xF347, 0x8C9C, 0xF9AA, 0x8C9D, 0xA8A9, 0x8C9E, 0xAD73, 0x8CA0, 0xAD74, 0x8CA1, 0xB05D, 0x8CA2, 0xB05E, 0x8CA3, 0xD3E2,
- 0x8CA4, 0xD3E1, 0x8CA5, 0xD7D2, 0x8CA7, 0xB368, 0x8CA8, 0xB366, 0x8CA9, 0xB363, 0x8CAA, 0xB367, 0x8CAB, 0xB365, 0x8CAC, 0xB364,
- 0x8CAF, 0xB64A, 0x8CB0, 0xDBEA, 0x8CB2, 0xB8ED, 0x8CB3, 0xB64C, 0x8CB4, 0xB651, 0x8CB5, 0xDBEC, 0x8CB6, 0xB653, 0x8CB7, 0xB652,
- 0x8CB8, 0xB655, 0x8CB9, 0xDBEB, 0x8CBA, 0xDBE8, 0x8CBB, 0xB64F, 0x8CBC, 0xB64B, 0x8CBD, 0xB64D, 0x8CBE, 0xDBE9, 0x8CBF, 0xB654,
- 0x8CC0, 0xB650, 0x8CC1, 0xB64E, 0x8CC2, 0xB8EF, 0x8CC3, 0xB8EE, 0x8CC4, 0xB8EC, 0x8CC5, 0xB8F0, 0x8CC7, 0xB8EA, 0x8CC8, 0xB8EB,
- 0x8CCA, 0xB8E9, 0x8CCC, 0xE05B, 0x8CCF, 0xE454, 0x8CD1, 0xBBAC, 0x8CD2, 0xBBAD, 0x8CD3, 0xBBAB, 0x8CD5, 0xE453, 0x8CD7, 0xE455,
- 0x8CD9, 0xE7EA, 0x8CDA, 0xE7EC, 0x8CDC, 0xBDE7, 0x8CDD, 0xE7ED, 0x8CDE, 0xBDE0, 0x8CDF, 0xE7E9, 0x8CE0, 0xBDDF, 0x8CE1, 0xBDE9,
- 0x8CE2, 0xBDE5, 0x8CE3, 0xBDE6, 0x8CE4, 0xBDE2, 0x8CE5, 0xE7E8, 0x8CE6, 0xBDE1, 0x8CE7, 0xE7EE, 0x8CE8, 0xE7EB, 0x8CEA, 0xBDE8,
- 0x8CEC, 0xBDE3, 0x8CED, 0xBDE4, 0x8CEE, 0xEBB5, 0x8CF0, 0xEBB7, 0x8CF1, 0xEBB6, 0x8CF3, 0xEBB8, 0x8CF4, 0xBFE0, 0x8CF5, 0xEBB4,
- 0x8CF8, 0xC1CB, 0x8CF9, 0xEEB8, 0x8CFA, 0xC1C8, 0x8CFB, 0xC1CC, 0x8CFC, 0xC1CA, 0x8CFD, 0xC1C9, 0x8CFE, 0xF0F3, 0x8D00, 0xF0F6,
- 0x8D02, 0xF0F5, 0x8D04, 0xF0F4, 0x8D05, 0xC2D8, 0x8D06, 0xF348, 0x8D07, 0xF349, 0x8D08, 0xC3D8, 0x8D09, 0xF34A, 0x8D0A, 0xC3D9,
- 0x8D0D, 0xC4BA, 0x8D0F, 0xC4B9, 0x8D10, 0xF652, 0x8D13, 0xC542, 0x8D14, 0xF653, 0x8D15, 0xF75C, 0x8D16, 0xC5AB, 0x8D17, 0xC5AC,
- 0x8D19, 0xF845, 0x8D1B, 0xC642, 0x8D64, 0xA8AA, 0x8D66, 0xB36A, 0x8D67, 0xB369, 0x8D68, 0xE05C, 0x8D69, 0xE05D, 0x8D6B, 0xBBAE,
- 0x8D6C, 0xEBB9, 0x8D6D, 0xBDEA, 0x8D6E, 0xEBBA, 0x8D6F, 0xEEB9, 0x8D70, 0xA8AB, 0x8D72, 0xD0B2, 0x8D73, 0xAD76, 0x8D74, 0xAD75,
- 0x8D76, 0xD3E3, 0x8D77, 0xB05F, 0x8D78, 0xD3E4, 0x8D79, 0xD7D5, 0x8D7B, 0xD7D4, 0x8D7D, 0xD7D3, 0x8D80, 0xDBEE, 0x8D81, 0xB658,
- 0x8D84, 0xDBED, 0x8D85, 0xB657, 0x8D89, 0xDBEF, 0x8D8A, 0xB656, 0x8D8C, 0xE05F, 0x8D8D, 0xE062, 0x8D8E, 0xE060, 0x8D8F, 0xE061,
- 0x8D90, 0xE065, 0x8D91, 0xE05E, 0x8D92, 0xE066, 0x8D93, 0xE063, 0x8D94, 0xE064, 0x8D95, 0xBBB0, 0x8D96, 0xE456, 0x8D99, 0xBBAF,
- 0x8D9B, 0xE7F2, 0x8D9C, 0xE7F0, 0x8D9F, 0xBDEB, 0x8DA0, 0xE7EF, 0x8DA1, 0xE7F1, 0x8DA3, 0xBDEC, 0x8DA5, 0xEBBB, 0x8DA7, 0xEBBC,
- 0x8DA8, 0xC1CD, 0x8DAA, 0xF34C, 0x8DAB, 0xF34E, 0x8DAC, 0xF34B, 0x8DAD, 0xF34D, 0x8DAE, 0xF4D6, 0x8DAF, 0xF654, 0x8DB2, 0xF96F,
- 0x8DB3, 0xA8AC, 0x8DB4, 0xAD77, 0x8DB5, 0xD3E5, 0x8DB6, 0xD3E7, 0x8DB7, 0xD3E6, 0x8DB9, 0xD7D8, 0x8DBA, 0xB36C, 0x8DBC, 0xD7D6,
- 0x8DBE, 0xB36B, 0x8DBF, 0xD7D9, 0x8DC1, 0xD7DA, 0x8DC2, 0xD7D7, 0x8DC5, 0xDBFB, 0x8DC6, 0xB660, 0x8DC7, 0xDBF3, 0x8DC8, 0xDBF9,
- 0x8DCB, 0xB65B, 0x8DCC, 0xB65E, 0x8DCD, 0xDBF2, 0x8DCE, 0xB659, 0x8DCF, 0xDBF6, 0x8DD0, 0xE06C, 0x8DD1, 0xB65D, 0x8DD3, 0xDBF1,
- 0x8DD5, 0xDBF7, 0x8DD6, 0xDBF4, 0x8DD7, 0xDBFA, 0x8DD8, 0xDBF0, 0x8DD9, 0xDBF8, 0x8DDA, 0xB65C, 0x8DDB, 0xB65F, 0x8DDC, 0xDBF5,
- 0x8DDD, 0xB65A, 0x8DDF, 0xB8F2, 0x8DE0, 0xE068, 0x8DE1, 0xB8F1, 0x8DE2, 0xE06F, 0x8DE3, 0xE06E, 0x8DE4, 0xB8F8, 0x8DE6, 0xB8F9,
- 0x8DE7, 0xE070, 0x8DE8, 0xB8F3, 0x8DE9, 0xE06D, 0x8DEA, 0xB8F7, 0x8DEB, 0xE072, 0x8DEC, 0xE069, 0x8DEE, 0xE06B, 0x8DEF, 0xB8F4,
- 0x8DF0, 0xE067, 0x8DF1, 0xE06A, 0x8DF2, 0xE071, 0x8DF3, 0xB8F5, 0x8DF4, 0xE073, 0x8DFA, 0xB8F6, 0x8DFC, 0xBBB1, 0x8DFD, 0xE45B,
- 0x8DFE, 0xE461, 0x8DFF, 0xE459, 0x8E00, 0xE462, 0x8E02, 0xE458, 0x8E03, 0xE45D, 0x8E04, 0xE463, 0x8E05, 0xE460, 0x8E06, 0xE45F,
- 0x8E07, 0xE45E, 0x8E09, 0xE457, 0x8E0A, 0xE45C, 0x8E0D, 0xE45A, 0x8E0F, 0xBDF1, 0x8E10, 0xBDEE, 0x8E11, 0xE7FB, 0x8E12, 0xE841,
- 0x8E13, 0xE843, 0x8E14, 0xE840, 0x8E15, 0xE7F8, 0x8E16, 0xE7FA, 0x8E17, 0xE845, 0x8E18, 0xE842, 0x8E19, 0xE7FC, 0x8E1A, 0xE846,
- 0x8E1B, 0xE7F9, 0x8E1C, 0xE844, 0x8E1D, 0xBDEF, 0x8E1E, 0xBDF5, 0x8E1F, 0xBDF3, 0x8E20, 0xE7F3, 0x8E21, 0xBDF4, 0x8E22, 0xBDF0,
- 0x8E23, 0xE7F4, 0x8E24, 0xE7F6, 0x8E25, 0xE7F5, 0x8E26, 0xE7FD, 0x8E27, 0xE7FE, 0x8E29, 0xBDF2, 0x8E2B, 0xBDED, 0x8E2E, 0xE7F7,
- 0x8E30, 0xEBC6, 0x8E31, 0xBFE2, 0x8E33, 0xEBBD, 0x8E34, 0xBFE3, 0x8E35, 0xBFE6, 0x8E36, 0xEBC2, 0x8E38, 0xEBBF, 0x8E39, 0xBFE5,
- 0x8E3C, 0xEBC3, 0x8E3D, 0xEBC4, 0x8E3E, 0xEBBE, 0x8E3F, 0xEBC7, 0x8E40, 0xEBC0, 0x8E41, 0xEBC5, 0x8E42, 0xBFE4, 0x8E44, 0xBFE1,
- 0x8E45, 0xEBC1, 0x8E47, 0xEEBF, 0x8E48, 0xC1D0, 0x8E49, 0xC1CE, 0x8E4A, 0xC1D1, 0x8E4B, 0xC1CF, 0x8E4C, 0xEEBE, 0x8E4D, 0xEEBB,
- 0x8E4E, 0xEEBA, 0x8E50, 0xEEBD, 0x8E53, 0xEEBC, 0x8E54, 0xF145, 0x8E55, 0xC2DE, 0x8E56, 0xF0FB, 0x8E57, 0xF0FA, 0x8E59, 0xC2D9,
- 0x8E5A, 0xF141, 0x8E5B, 0xF140, 0x8E5C, 0xF0F7, 0x8E5D, 0xF143, 0x8E5E, 0xF0FC, 0x8E5F, 0xC2DD, 0x8E60, 0xF0F9, 0x8E61, 0xF142,
- 0x8E62, 0xF0F8, 0x8E63, 0xC2DA, 0x8E64, 0xC2DC, 0x8E65, 0xF0FD, 0x8E66, 0xC2DB, 0x8E67, 0xF0FE, 0x8E69, 0xF144, 0x8E6A, 0xF352,
- 0x8E6C, 0xC3DE, 0x8E6D, 0xF34F, 0x8E6F, 0xF353, 0x8E72, 0xC3DB, 0x8E73, 0xF351, 0x8E74, 0xC3E0, 0x8E76, 0xC3DD, 0x8E78, 0xF350,
- 0x8E7A, 0xC3DF, 0x8E7B, 0xF354, 0x8E7C, 0xC3DA, 0x8E81, 0xC4BC, 0x8E82, 0xC4BE, 0x8E84, 0xF4D9, 0x8E85, 0xC4BD, 0x8E86, 0xF4D7,
- 0x8E87, 0xC3DC, 0x8E88, 0xF4D8, 0x8E89, 0xC4BB, 0x8E8A, 0xC543, 0x8E8B, 0xC545, 0x8E8C, 0xF656, 0x8E8D, 0xC544, 0x8E8E, 0xF655,
- 0x8E90, 0xF761, 0x8E91, 0xC5AD, 0x8E92, 0xF760, 0x8E93, 0xC5AE, 0x8E94, 0xF75E, 0x8E95, 0xF75D, 0x8E96, 0xF762, 0x8E97, 0xF763,
- 0x8E98, 0xF846, 0x8E9A, 0xF75F, 0x8E9D, 0xF8C6, 0x8E9E, 0xF8C3, 0x8E9F, 0xF8C4, 0x8EA0, 0xF8C5, 0x8EA1, 0xC65C, 0x8EA3, 0xF951,
- 0x8EA4, 0xF950, 0x8EA5, 0xF94F, 0x8EA6, 0xF970, 0x8EA8, 0xF9BE, 0x8EA9, 0xF9AB, 0x8EAA, 0xC66E, 0x8EAB, 0xA8AD, 0x8EAC, 0xB060,
- 0x8EB2, 0xB8FA, 0x8EBA, 0xBDF6, 0x8EBD, 0xEBC8, 0x8EC0, 0xC2DF, 0x8EC2, 0xF355, 0x8EC9, 0xF9AC, 0x8ECA, 0xA8AE, 0x8ECB, 0xAAEE,
- 0x8ECC, 0xAD79, 0x8ECD, 0xAD78, 0x8ECF, 0xB063, 0x8ED1, 0xD3E8, 0x8ED2, 0xB061, 0x8ED3, 0xD3E9, 0x8ED4, 0xB062, 0x8ED7, 0xD7DF,
- 0x8ED8, 0xD7DB, 0x8EDB, 0xB36D, 0x8EDC, 0xD7DE, 0x8EDD, 0xD7DD, 0x8EDE, 0xD7DC, 0x8EDF, 0xB36E, 0x8EE0, 0xD7E0, 0x8EE1, 0xD7E1,
- 0x8EE5, 0xDC43, 0x8EE6, 0xDC41, 0x8EE7, 0xDC45, 0x8EE8, 0xDC46, 0x8EE9, 0xDC4C, 0x8EEB, 0xDC48, 0x8EEC, 0xDC4A, 0x8EEE, 0xDC42,
- 0x8EEF, 0xDBFC, 0x8EF1, 0xDC49, 0x8EF4, 0xDC4B, 0x8EF5, 0xDC44, 0x8EF6, 0xDC47, 0x8EF7, 0xDBFD, 0x8EF8, 0xB662, 0x8EF9, 0xDC40,
- 0x8EFA, 0xDBFE, 0x8EFB, 0xB661, 0x8EFC, 0xB663, 0x8EFE, 0xB8FD, 0x8EFF, 0xE075, 0x8F00, 0xE077, 0x8F01, 0xE076, 0x8F02, 0xE07B,
- 0x8F03, 0xB8FB, 0x8F05, 0xE078, 0x8F06, 0xE074, 0x8F07, 0xE079, 0x8F08, 0xE07A, 0x8F09, 0xB8FC, 0x8F0A, 0xB8FE, 0x8F0B, 0xE07C,
- 0x8F0D, 0xE467, 0x8F0E, 0xE466, 0x8F10, 0xE464, 0x8F11, 0xE465, 0x8F12, 0xBBB3, 0x8F13, 0xBBB5, 0x8F14, 0xBBB2, 0x8F15, 0xBBB4,
- 0x8F16, 0xE84D, 0x8F17, 0xE84E, 0x8F18, 0xE849, 0x8F1A, 0xE84A, 0x8F1B, 0xBDF8, 0x8F1C, 0xBDFD, 0x8F1D, 0xBDF7, 0x8F1E, 0xBDFE,
- 0x8F1F, 0xBDF9, 0x8F20, 0xE84B, 0x8F23, 0xE84C, 0x8F24, 0xE848, 0x8F25, 0xBE40, 0x8F26, 0xBDFB, 0x8F29, 0xBDFA, 0x8F2A, 0xBDFC,
- 0x8F2C, 0xE847, 0x8F2E, 0xEBCA, 0x8F2F, 0xBFE8, 0x8F32, 0xEBCC, 0x8F33, 0xBFEA, 0x8F34, 0xEBCF, 0x8F35, 0xEBCB, 0x8F36, 0xEBC9,
- 0x8F37, 0xEBCE, 0x8F38, 0xBFE9, 0x8F39, 0xEBCD, 0x8F3B, 0xBFE7, 0x8F3E, 0xC1D3, 0x8F3F, 0xC1D6, 0x8F40, 0xEEC1, 0x8F42, 0xC1D4,
- 0x8F43, 0xEEC0, 0x8F44, 0xC1D2, 0x8F45, 0xC1D5, 0x8F46, 0xF146, 0x8F47, 0xF147, 0x8F48, 0xF148, 0x8F49, 0xC2E0, 0x8F4B, 0xF149,
- 0x8F4D, 0xC2E1, 0x8F4E, 0xC3E2, 0x8F4F, 0xF358, 0x8F50, 0xF359, 0x8F51, 0xF357, 0x8F52, 0xF356, 0x8F53, 0xF35A, 0x8F54, 0xC3E1,
- 0x8F55, 0xF4DD, 0x8F56, 0xF4DB, 0x8F57, 0xF4DC, 0x8F58, 0xF4DE, 0x8F59, 0xF4DA, 0x8F5A, 0xF4DF, 0x8F5B, 0xF658, 0x8F5D, 0xF659,
- 0x8F5E, 0xF657, 0x8F5F, 0xC546, 0x8F60, 0xF764, 0x8F61, 0xC5AF, 0x8F62, 0xF765, 0x8F63, 0xF848, 0x8F64, 0xF847, 0x8F9B, 0xA8AF,
- 0x8F9C, 0xB664, 0x8F9F, 0xB940, 0x8FA3, 0xBBB6, 0x8FA6, 0xBFEC, 0x8FA8, 0xBFEB, 0x8FAD, 0xC3E3, 0x8FAE, 0xC47C, 0x8FAF, 0xC547,
- 0x8FB0, 0xA8B0, 0x8FB1, 0xB064, 0x8FB2, 0xB941, 0x8FB4, 0xF35B, 0x8FBF, 0xCBA6, 0x8FC2, 0xA8B1, 0x8FC4, 0xA8B4, 0x8FC5, 0xA8B3,
- 0x8FC6, 0xA8B2, 0x8FC9, 0xCBA5, 0x8FCB, 0xCDCD, 0x8FCD, 0xCDCF, 0x8FCE, 0xAAEF, 0x8FD1, 0xAAF1, 0x8FD2, 0xCDCC, 0x8FD3, 0xCDCE,
- 0x8FD4, 0xAAF0, 0x8FD5, 0xCDD1, 0x8FD6, 0xCDD0, 0x8FD7, 0xCDD2, 0x8FE0, 0xD0B6, 0x8FE1, 0xD0B4, 0x8FE2, 0xAD7C, 0x8FE3, 0xD0B3,
- 0x8FE4, 0xADA3, 0x8FE5, 0xAD7E, 0x8FE6, 0xAD7B, 0x8FE8, 0xADA4, 0x8FEA, 0xAD7D, 0x8FEB, 0xADA2, 0x8FED, 0xADA1, 0x8FEE, 0xD0B5,
- 0x8FF0, 0xAD7A, 0x8FF4, 0xB06A, 0x8FF5, 0xD3EB, 0x8FF6, 0xD3F1, 0x8FF7, 0xB067, 0x8FF8, 0xB06E, 0x8FFA, 0xB069, 0x8FFB, 0xD3EE,
- 0x8FFC, 0xD3F0, 0x8FFD, 0xB06C, 0x8FFE, 0xD3EA, 0x8FFF, 0xD3ED, 0x9000, 0xB068, 0x9001, 0xB065, 0x9002, 0xD3EC, 0x9003, 0xB06B,
- 0x9004, 0xD3EF, 0x9005, 0xB06D, 0x9006, 0xB066, 0x900B, 0xD7E3, 0x900C, 0xD7E6, 0x900D, 0xB370, 0x900F, 0xB37A, 0x9010, 0xB376,
- 0x9011, 0xD7E4, 0x9014, 0xB37E, 0x9015, 0xB377, 0x9016, 0xB37C, 0x9017, 0xB372, 0x9019, 0xB36F, 0x901A, 0xB371, 0x901B, 0xB37D,
- 0x901C, 0xD7E5, 0x901D, 0xB375, 0x901E, 0xB378, 0x901F, 0xB374, 0x9020, 0xB379, 0x9021, 0xD7E7, 0x9022, 0xB37B, 0x9023, 0xB373,
- 0x9024, 0xD7E2, 0x902D, 0xDC4D, 0x902E, 0xB665, 0x902F, 0xDC4F, 0x9031, 0xB667, 0x9032, 0xB669, 0x9034, 0xDC4E, 0x9035, 0xB666,
- 0x9036, 0xB66A, 0x9038, 0xB668, 0x903C, 0xB947, 0x903D, 0xE0A3, 0x903E, 0xB94F, 0x903F, 0xE07E, 0x9041, 0xB950, 0x9042, 0xB945,
- 0x9044, 0xE0A1, 0x9047, 0xB94A, 0x9049, 0xE0A2, 0x904A, 0xB943, 0x904B, 0xB942, 0x904D, 0xB94D, 0x904E, 0xB94C, 0x904F, 0xB94B,
- 0x9050, 0xB949, 0x9051, 0xB94E, 0x9052, 0xE07D, 0x9053, 0xB944, 0x9054, 0xB946, 0x9055, 0xB948, 0x9058, 0xBBB8, 0x9059, 0xBBBB,
- 0x905B, 0xBBBF, 0x905C, 0xBBB9, 0x905D, 0xBBBE, 0x905E, 0xBBBC, 0x9060, 0xBBB7, 0x9062, 0xBBBD, 0x9063, 0xBBBA, 0x9067, 0xE852,
- 0x9068, 0xBE43, 0x9069, 0xBE41, 0x906B, 0xE853, 0x906D, 0xBE44, 0x906E, 0xBE42, 0x906F, 0xE851, 0x9070, 0xE850, 0x9072, 0xBFF0,
- 0x9073, 0xE84F, 0x9074, 0xBFEE, 0x9075, 0xBFED, 0x9076, 0xEBD0, 0x9077, 0xBE45, 0x9078, 0xBFEF, 0x9079, 0xEBD1, 0x907A, 0xBFF2,
- 0x907B, 0xEBD2, 0x907C, 0xBFF1, 0x907D, 0xC1D8, 0x907E, 0xEEC3, 0x907F, 0xC1D7, 0x9080, 0xC1DC, 0x9081, 0xC1DA, 0x9082, 0xC1DB,
- 0x9083, 0xC2E3, 0x9084, 0xC1D9, 0x9085, 0xEEC2, 0x9086, 0xEBD3, 0x9087, 0xC2E2, 0x9088, 0xC2E4, 0x908A, 0xC3E4, 0x908B, 0xC3E5,
- 0x908D, 0xF4E0, 0x908F, 0xC5DE, 0x9090, 0xC5DD, 0x9091, 0xA8B6, 0x9094, 0xCA55, 0x9095, 0xB06F, 0x9097, 0xCA52, 0x9098, 0xCA53,
- 0x9099, 0xCA51, 0x909B, 0xCA54, 0x909E, 0xCBAA, 0x909F, 0xCBA7, 0x90A0, 0xCBAC, 0x90A1, 0xCBA8, 0x90A2, 0xA8B7, 0x90A3, 0xA8BA,
- 0x90A5, 0xCBA9, 0x90A6, 0xA8B9, 0x90A7, 0xCBAB, 0x90AA, 0xA8B8, 0x90AF, 0xCDD5, 0x90B0, 0xCDD7, 0x90B1, 0xAAF4, 0x90B2, 0xCDD3,
- 0x90B3, 0xCDD6, 0x90B4, 0xCDD4, 0x90B5, 0xAAF2, 0x90B6, 0xAAF5, 0x90B8, 0xAAF3, 0x90BD, 0xD0B8, 0x90BE, 0xD0BC, 0x90BF, 0xD0B9,
- 0x90C1, 0xADA7, 0x90C3, 0xADA8, 0x90C5, 0xD0BB, 0x90C7, 0xD0BD, 0x90C8, 0xD0BF, 0x90CA, 0xADA5, 0x90CB, 0xD0BE, 0x90CE, 0xADA6,
- 0x90D4, 0xD7EE, 0x90D5, 0xD0BA, 0x90D6, 0xD3F2, 0x90D7, 0xD3FB, 0x90D8, 0xD3F9, 0x90D9, 0xD3F4, 0x90DA, 0xD3F5, 0x90DB, 0xD3FA,
- 0x90DC, 0xD3FC, 0x90DD, 0xB071, 0x90DF, 0xD3F7, 0x90E0, 0xD3F3, 0x90E1, 0xB070, 0x90E2, 0xB072, 0x90E3, 0xD3F6, 0x90E4, 0xD3FD,
- 0x90E5, 0xD3F8, 0x90E8, 0xB3A1, 0x90E9, 0xD7F1, 0x90EA, 0xD7E9, 0x90EB, 0xD7EF, 0x90EC, 0xD7F0, 0x90ED, 0xB3A2, 0x90EF, 0xD7E8,
- 0x90F0, 0xD7EA, 0x90F1, 0xD0B7, 0x90F2, 0xD7EC, 0x90F3, 0xD7ED, 0x90F4, 0xD7EB, 0x90F5, 0xB66C, 0x90F9, 0xDC56, 0x90FA, 0xEBD4,
- 0x90FB, 0xDC57, 0x90FC, 0xDC54, 0x90FD, 0xB3A3, 0x90FE, 0xB66E, 0x90FF, 0xDC53, 0x9100, 0xDC59, 0x9101, 0xDC58, 0x9102, 0xB66B,
- 0x9103, 0xDC5C, 0x9104, 0xDC52, 0x9105, 0xDC5B, 0x9106, 0xDC50, 0x9107, 0xDC5A, 0x9108, 0xDC55, 0x9109, 0xB66D, 0x910B, 0xE0AA,
- 0x910D, 0xE0A5, 0x910E, 0xE0AB, 0x910F, 0xE0A6, 0x9110, 0xE0A4, 0x9111, 0xE0A7, 0x9112, 0xB951, 0x9114, 0xE0A9, 0x9116, 0xE0A8,
- 0x9117, 0xB952, 0x9118, 0xBBC1, 0x9119, 0xBBC0, 0x911A, 0xE46E, 0x911B, 0xE471, 0x911C, 0xE469, 0x911D, 0xE46D, 0x911E, 0xBBC2,
- 0x911F, 0xE46C, 0x9120, 0xE46A, 0x9121, 0xE470, 0x9122, 0xE46B, 0x9123, 0xE468, 0x9124, 0xE46F, 0x9126, 0xE859, 0x9127, 0xBE48,
- 0x9128, 0xF14A, 0x9129, 0xE856, 0x912A, 0xE857, 0x912B, 0xE855, 0x912C, 0xDC51, 0x912D, 0xBE47, 0x912E, 0xE85A, 0x912F, 0xE854,
- 0x9130, 0xBE46, 0x9131, 0xBE49, 0x9132, 0xE858, 0x9133, 0xEBD5, 0x9134, 0xBFF3, 0x9135, 0xEBD6, 0x9136, 0xEBD7, 0x9138, 0xEEC4,
- 0x9139, 0xC1DD, 0x913A, 0xF14B, 0x913B, 0xF14C, 0x913E, 0xF14D, 0x913F, 0xF35D, 0x9140, 0xF35C, 0x9141, 0xF4E2, 0x9143, 0xF4E1,
- 0x9144, 0xF65B, 0x9145, 0xF65C, 0x9146, 0xF65A, 0x9147, 0xF766, 0x9148, 0xC5B0, 0x9149, 0xA8BB, 0x914A, 0xADAA, 0x914B, 0xADA9,
- 0x914C, 0xB075, 0x914D, 0xB074, 0x914E, 0xD440, 0x914F, 0xD441, 0x9150, 0xD3FE, 0x9152, 0xB073, 0x9153, 0xD7F5, 0x9155, 0xD7F6,
- 0x9156, 0xD7F2, 0x9157, 0xB3A4, 0x9158, 0xD7F3, 0x915A, 0xD7F4, 0x915F, 0xDC5F, 0x9160, 0xDC61, 0x9161, 0xDC5D, 0x9162, 0xDC60,
- 0x9163, 0xB66F, 0x9164, 0xDC5E, 0x9165, 0xB670, 0x9168, 0xDD73, 0x9169, 0xB955, 0x916A, 0xB954, 0x916C, 0xB953, 0x916E, 0xE0AC,
- 0x916F, 0xE0AD, 0x9172, 0xE473, 0x9173, 0xE475, 0x9174, 0xBBC6, 0x9175, 0xBBC3, 0x9177, 0xBBC5, 0x9178, 0xBBC4, 0x9179, 0xE474,
- 0x917A, 0xE472, 0x9180, 0xE861, 0x9181, 0xE85E, 0x9182, 0xE85F, 0x9183, 0xBE4D, 0x9184, 0xE860, 0x9185, 0xE85B, 0x9186, 0xE85C,
- 0x9187, 0xBE4A, 0x9189, 0xBE4B, 0x918A, 0xE85D, 0x918B, 0xBE4C, 0x918D, 0xEBDB, 0x918F, 0xEBDC, 0x9190, 0xEBD9, 0x9191, 0xEBDA,
- 0x9192, 0xBFF4, 0x9193, 0xEBD8, 0x9199, 0xEEC8, 0x919A, 0xEEC5, 0x919B, 0xEEC7, 0x919C, 0xC1E0, 0x919D, 0xEECB, 0x919E, 0xC1DF,
- 0x919F, 0xEEC9, 0x91A0, 0xEECC, 0x91A1, 0xEECA, 0x91A2, 0xEEC6, 0x91A3, 0xC1DE, 0x91A5, 0xF14F, 0x91A7, 0xF150, 0x91A8, 0xF14E,
- 0x91AA, 0xF152, 0x91AB, 0xC2E5, 0x91AC, 0xC2E6, 0x91AD, 0xF35F, 0x91AE, 0xC3E7, 0x91AF, 0xF151, 0x91B0, 0xF35E, 0x91B1, 0xC3E6,
- 0x91B2, 0xF4E5, 0x91B3, 0xF4E6, 0x91B4, 0xC4BF, 0x91B5, 0xF4E4, 0x91B7, 0xF4E3, 0x91B9, 0xF65D, 0x91BA, 0xC548, 0x91BC, 0xF849,
- 0x91BD, 0xF8C8, 0x91BE, 0xF8C7, 0x91C0, 0xC643, 0x91C1, 0xC65D, 0x91C2, 0xF8C9, 0x91C3, 0xF971, 0x91C5, 0xC66F, 0x91C6, 0xA8BC,
- 0x91C7, 0xAAF6, 0x91C9, 0xB956, 0x91CB, 0xC4C0, 0x91CC, 0xA8BD, 0x91CD, 0xADAB, 0x91CE, 0xB3A5, 0x91CF, 0xB671, 0x91D0, 0xC2E7,
- 0x91D1, 0xAAF7, 0x91D3, 0xD0C1, 0x91D4, 0xD0C0, 0x91D5, 0xD442, 0x91D7, 0xB078, 0x91D8, 0xB076, 0x91D9, 0xB07A, 0x91DA, 0xD444,
- 0x91DC, 0xB079, 0x91DD, 0xB077, 0x91E2, 0xD443, 0x91E3, 0xB3A8, 0x91E4, 0xD7FC, 0x91E6, 0xB3A7, 0x91E7, 0xB3A9, 0x91E8, 0xD842,
- 0x91E9, 0xB3AB, 0x91EA, 0xD7FE, 0x91EB, 0xD840, 0x91EC, 0xD7F7, 0x91ED, 0xB3AA, 0x91EE, 0xD843, 0x91F1, 0xD7F9, 0x91F3, 0xD7FA,
- 0x91F4, 0xD7F8, 0x91F5, 0xB3A6, 0x91F7, 0xD841, 0x91F8, 0xD7FB, 0x91F9, 0xD7FD, 0x91FD, 0xDC6D, 0x91FF, 0xDC6C, 0x9200, 0xDC6A,
- 0x9201, 0xDC62, 0x9202, 0xDC71, 0x9203, 0xDC65, 0x9204, 0xDC6F, 0x9205, 0xDC76, 0x9206, 0xDC6E, 0x9207, 0xB679, 0x9209, 0xB675,
- 0x920A, 0xDC63, 0x920C, 0xDC69, 0x920D, 0xB677, 0x920F, 0xDC68, 0x9210, 0xB678, 0x9211, 0xB67A, 0x9212, 0xDC6B, 0x9214, 0xB672,
- 0x9215, 0xB673, 0x9216, 0xDC77, 0x9217, 0xDC75, 0x9219, 0xDC74, 0x921A, 0xDC66, 0x921C, 0xDC72, 0x921E, 0xB676, 0x9223, 0xB674,
- 0x9224, 0xDC73, 0x9225, 0xDC64, 0x9226, 0xDC67, 0x9227, 0xDC70, 0x922D, 0xE4BA, 0x922E, 0xE0B7, 0x9230, 0xE0B0, 0x9231, 0xE0C3,
- 0x9232, 0xE0CC, 0x9233, 0xE0B3, 0x9234, 0xB961, 0x9236, 0xE0C0, 0x9237, 0xB957, 0x9238, 0xB959, 0x9239, 0xB965, 0x923A, 0xE0B1,
- 0x923D, 0xB95A, 0x923E, 0xB95C, 0x923F, 0xB966, 0x9240, 0xB95B, 0x9245, 0xB964, 0x9246, 0xE0B9, 0x9248, 0xE0AE, 0x9249, 0xB962,
- 0x924A, 0xE0B8, 0x924B, 0xB95E, 0x924C, 0xE0CA, 0x924D, 0xB963, 0x924E, 0xE0C8, 0x924F, 0xE0BC, 0x9250, 0xE0C6, 0x9251, 0xB960,
- 0x9252, 0xE0AF, 0x9253, 0xE0C9, 0x9254, 0xE0C4, 0x9256, 0xE0CB, 0x9257, 0xB958, 0x925A, 0xB967, 0x925B, 0xB95D, 0x925E, 0xE0B5,
- 0x9260, 0xE0BD, 0x9261, 0xE0C1, 0x9263, 0xE0C5, 0x9264, 0xB95F, 0x9265, 0xE0B4, 0x9266, 0xE0B2, 0x9267, 0xE0BE, 0x926C, 0xE0BB,
- 0x926D, 0xE0BA, 0x926F, 0xE0BF, 0x9270, 0xE0C2, 0x9272, 0xE0C7, 0x9276, 0xE478, 0x9278, 0xBBC7, 0x9279, 0xE4A4, 0x927A, 0xE47A,
- 0x927B, 0xBBCC, 0x927C, 0xBBD0, 0x927D, 0xE4AD, 0x927E, 0xE4B5, 0x927F, 0xE4A6, 0x9280, 0xBBC8, 0x9282, 0xE4AA, 0x9283, 0xE0B6,
- 0x9285, 0xBBC9, 0x9286, 0xE4B1, 0x9287, 0xE4B6, 0x9288, 0xE4AE, 0x928A, 0xE4B0, 0x928B, 0xE4B9, 0x928C, 0xE4B2, 0x928D, 0xE47E,
- 0x928E, 0xE4A9, 0x9291, 0xBBD1, 0x9293, 0xBBCD, 0x9294, 0xE47C, 0x9295, 0xE4AB, 0x9296, 0xBBCB, 0x9297, 0xE4A5, 0x9298, 0xBBCA,
- 0x9299, 0xE4B3, 0x929A, 0xE4A2, 0x929B, 0xE479, 0x929C, 0xBBCE, 0x929D, 0xE4B8, 0x92A0, 0xE47B, 0x92A1, 0xE4AF, 0x92A2, 0xE4AC,
- 0x92A3, 0xE4A7, 0x92A4, 0xE477, 0x92A5, 0xE476, 0x92A6, 0xE4A1, 0x92A7, 0xE4B4, 0x92A8, 0xBBCF, 0x92A9, 0xE4B7, 0x92AA, 0xE47D,
- 0x92AB, 0xE4A3, 0x92AC, 0xBE52, 0x92B2, 0xBE5A, 0x92B3, 0xBE55, 0x92B4, 0xE8A4, 0x92B5, 0xE8A1, 0x92B6, 0xE867, 0x92B7, 0xBE50,
- 0x92B9, 0xF9D7, 0x92BB, 0xBE4F, 0x92BC, 0xBE56, 0x92C0, 0xE865, 0x92C1, 0xBE54, 0x92C2, 0xE871, 0x92C3, 0xE863, 0x92C4, 0xE864,
- 0x92C5, 0xBE4E, 0x92C6, 0xE8A3, 0x92C7, 0xBE58, 0x92C8, 0xE874, 0x92C9, 0xE879, 0x92CA, 0xE873, 0x92CB, 0xEBEE, 0x92CC, 0xE86F,
- 0x92CD, 0xE877, 0x92CE, 0xE875, 0x92CF, 0xE868, 0x92D0, 0xE862, 0x92D1, 0xE87D, 0x92D2, 0xBE57, 0x92D3, 0xE87E, 0x92D5, 0xE878,
- 0x92D7, 0xE86D, 0x92D8, 0xE86B, 0x92D9, 0xE866, 0x92DD, 0xE86E, 0x92DE, 0xE87B, 0x92DF, 0xE86A, 0x92E0, 0xE87A, 0x92E1, 0xE8A2,
- 0x92E4, 0xBE53, 0x92E6, 0xE876, 0x92E7, 0xE87C, 0x92E8, 0xE872, 0x92E9, 0xE86C, 0x92EA, 0xBE51, 0x92EE, 0xE4A8, 0x92EF, 0xE870,
- 0x92F0, 0xBE59, 0x92F1, 0xE869, 0x92F7, 0xEBF4, 0x92F8, 0xBFF7, 0x92F9, 0xEBF3, 0x92FA, 0xEBF0, 0x92FB, 0xEC44, 0x92FC, 0xBFFB,
- 0x92FE, 0xEC41, 0x92FF, 0xEBF8, 0x9300, 0xEC43, 0x9301, 0xEBE9, 0x9302, 0xEBF6, 0x9304, 0xBFFD, 0x9306, 0xEBE1, 0x9308, 0xEBDF,
- 0x9309, 0xEC42, 0x930B, 0xEC40, 0x930C, 0xEBFE, 0x930D, 0xEBED, 0x930E, 0xEBEC, 0x930F, 0xEBE2, 0x9310, 0xC040, 0x9312, 0xEBE8,
- 0x9313, 0xEBF2, 0x9314, 0xEBFD, 0x9315, 0xC043, 0x9316, 0xEC45, 0x9318, 0xC1E8, 0x9319, 0xC045, 0x931A, 0xBFFE, 0x931B, 0xEBE6,
- 0x931D, 0xEBEF, 0x931E, 0xEBDE, 0x931F, 0xEBE0, 0x9320, 0xBFF5, 0x9321, 0xC042, 0x9322, 0xBFFA, 0x9323, 0xEBE7, 0x9324, 0xEBF7,
- 0x9325, 0xEBF1, 0x9326, 0xC041, 0x9327, 0xEBDD, 0x9328, 0xC1E3, 0x9329, 0xEBF9, 0x932A, 0xEBFC, 0x932B, 0xBFFC, 0x932D, 0xEBEB,
- 0x932E, 0xC044, 0x932F, 0xBFF9, 0x9333, 0xBFF8, 0x9334, 0xEBF5, 0x9335, 0xEBFB, 0x9336, 0xBFF6, 0x9338, 0xEBE4, 0x9339, 0xEBFA,
- 0x933C, 0xEBE5, 0x9346, 0xEBEA, 0x9347, 0xEED2, 0x9349, 0xEED7, 0x934A, 0xC1E5, 0x934B, 0xC1E7, 0x934C, 0xEEDD, 0x934D, 0xC1E1,
- 0x934E, 0xEEEC, 0x934F, 0xEEE3, 0x9350, 0xEED8, 0x9351, 0xEED9, 0x9352, 0xEEE2, 0x9354, 0xC1EE, 0x9355, 0xEEE1, 0x9356, 0xEED1,
- 0x9357, 0xEEE0, 0x9358, 0xEED4, 0x9359, 0xEEED, 0x935A, 0xC1ED, 0x935B, 0xC1EB, 0x935C, 0xEED5, 0x935E, 0xEEE8, 0x9360, 0xEEDA,
- 0x9361, 0xEEE7, 0x9363, 0xEEE9, 0x9364, 0xEED0, 0x9365, 0xC1E6, 0x9367, 0xEEEA, 0x936A, 0xEEDE, 0x936C, 0xC1EA, 0x936D, 0xEEDB,
- 0x9370, 0xC1EC, 0x9371, 0xEEE4, 0x9375, 0xC1E4, 0x9376, 0xEED6, 0x9377, 0xEEE5, 0x9379, 0xEEDF, 0x937A, 0xEBE3, 0x937B, 0xEEE6,
- 0x937C, 0xEED3, 0x937E, 0xC1E9, 0x9380, 0xEEEB, 0x9382, 0xC1E2, 0x9383, 0xEECE, 0x9388, 0xF160, 0x9389, 0xF159, 0x938A, 0xC2E9,
- 0x938C, 0xF154, 0x938D, 0xF163, 0x938E, 0xF15B, 0x938F, 0xEEDC, 0x9391, 0xF165, 0x9392, 0xF155, 0x9394, 0xC2E8, 0x9395, 0xF15F,
- 0x9396, 0xC2EA, 0x9397, 0xC2F2, 0x9398, 0xC2F0, 0x9399, 0xF161, 0x939A, 0xC2F1, 0x939B, 0xF157, 0x939D, 0xF158, 0x939E, 0xF15D,
- 0x939F, 0xF162, 0x93A1, 0xEECD, 0x93A2, 0xC2EB, 0x93A3, 0xF16A, 0x93A4, 0xF167, 0x93A5, 0xF16B, 0x93A6, 0xF15E, 0x93A7, 0xF15A,
- 0x93A8, 0xF168, 0x93A9, 0xF36A, 0x93AA, 0xF15C, 0x93AC, 0xC2EE, 0x93AE, 0xC2ED, 0x93AF, 0xEECF, 0x93B0, 0xC2EF, 0x93B1, 0xF164,
- 0x93B2, 0xF166, 0x93B3, 0xC2EC, 0x93B4, 0xF169, 0x93B5, 0xF153, 0x93B7, 0xF156, 0x93C0, 0xF373, 0x93C2, 0xF363, 0x93C3, 0xC3EB,
- 0x93C4, 0xF371, 0x93C7, 0xF361, 0x93C8, 0xC3EC, 0x93CA, 0xF36C, 0x93CC, 0xF368, 0x93CD, 0xC3F1, 0x93CE, 0xF372, 0x93CF, 0xF362,
- 0x93D0, 0xF365, 0x93D1, 0xC3E9, 0x93D2, 0xF374, 0x93D4, 0xF36D, 0x93D5, 0xF370, 0x93D6, 0xC3EF, 0x93D7, 0xC3F4, 0x93D8, 0xC3F2,
- 0x93D9, 0xF369, 0x93DA, 0xF364, 0x93DC, 0xC3ED, 0x93DD, 0xC3EE, 0x93DE, 0xF360, 0x93DF, 0xC3EA, 0x93E1, 0xC3E8, 0x93E2, 0xC3F0,
- 0x93E3, 0xF36F, 0x93E4, 0xC3F3, 0x93E6, 0xF36B, 0x93E7, 0xF375, 0x93E8, 0xC3F5, 0x93EC, 0xF367, 0x93EE, 0xF36E, 0x93F5, 0xF4F3,
- 0x93F6, 0xF542, 0x93F7, 0xF4F5, 0x93F8, 0xF4FC, 0x93F9, 0xF366, 0x93FA, 0xF4FA, 0x93FB, 0xF4E9, 0x93FC, 0xF540, 0x93FD, 0xC4C3,
- 0x93FE, 0xF4ED, 0x93FF, 0xF4FE, 0x9400, 0xF4F4, 0x9403, 0xC4C2, 0x9406, 0xF544, 0x9407, 0xF4F6, 0x9409, 0xF4FB, 0x940A, 0xF4FD,
- 0x940B, 0xF4E7, 0x940C, 0xF541, 0x940D, 0xF4F2, 0x940E, 0xF4F7, 0x940F, 0xF4EB, 0x9410, 0xF4EF, 0x9411, 0xF543, 0x9412, 0xF4F9,
- 0x9413, 0xF4E8, 0x9414, 0xF4EC, 0x9415, 0xF4EE, 0x9416, 0xF4F8, 0x9418, 0xC4C1, 0x9419, 0xF4F1, 0x9420, 0xF4EA, 0x9428, 0xF4F0,
- 0x9429, 0xF661, 0x942A, 0xF666, 0x942B, 0xC54F, 0x942C, 0xF668, 0x942E, 0xC549, 0x9430, 0xF664, 0x9431, 0xF66A, 0x9432, 0xC54E,
- 0x9433, 0xC54A, 0x9435, 0xC54B, 0x9436, 0xF660, 0x9437, 0xF667, 0x9438, 0xC54D, 0x9439, 0xF665, 0x943A, 0xC54C, 0x943B, 0xF65F,
- 0x943C, 0xF663, 0x943D, 0xF662, 0x943F, 0xF65E, 0x9440, 0xF669, 0x9444, 0xC5B1, 0x9445, 0xF76D, 0x9446, 0xF770, 0x9447, 0xF76C,
- 0x9448, 0xF76E, 0x9449, 0xF76F, 0x944A, 0xF769, 0x944B, 0xF76A, 0x944C, 0xF767, 0x944F, 0xF76B, 0x9450, 0xF768, 0x9451, 0xC5B2,
- 0x9452, 0xC5B3, 0x9455, 0xF84B, 0x9457, 0xF84D, 0x945D, 0xF84C, 0x945E, 0xF84E, 0x9460, 0xC5E0, 0x9462, 0xF84A, 0x9463, 0xC5DF,
- 0x9464, 0xC5E1, 0x9468, 0xF8CB, 0x9469, 0xF8CC, 0x946A, 0xC644, 0x946B, 0xF8CA, 0x946D, 0xF953, 0x946E, 0xF952, 0x946F, 0xF954,
- 0x9470, 0xC65F, 0x9471, 0xF955, 0x9472, 0xC65E, 0x9473, 0xF956, 0x9474, 0xF972, 0x9475, 0xF975, 0x9476, 0xF974, 0x9477, 0xC668,
- 0x9478, 0xF973, 0x947C, 0xC672, 0x947D, 0xC670, 0x947E, 0xC671, 0x947F, 0xC677, 0x9480, 0xF9C0, 0x9481, 0xF9C1, 0x9482, 0xF9BF,
- 0x9483, 0xF9C9, 0x9577, 0xAAF8, 0x957A, 0xD844, 0x957B, 0xDC78, 0x957C, 0xE8A5, 0x957D, 0xF376, 0x9580, 0xAAF9, 0x9582, 0xADAC,
- 0x9583, 0xB07B, 0x9586, 0xD845, 0x9588, 0xD846, 0x9589, 0xB3AC, 0x958B, 0xB67D, 0x958C, 0xDC7A, 0x958D, 0xDC79, 0x958E, 0xB6A3,
- 0x958F, 0xB67C, 0x9590, 0xDC7B, 0x9591, 0xB67E, 0x9592, 0xB6A2, 0x9593, 0xB6A1, 0x9594, 0xB67B, 0x9598, 0xB968, 0x959B, 0xE0D0,
- 0x959C, 0xE0CE, 0x959E, 0xE0CF, 0x959F, 0xE0CD, 0x95A1, 0xBBD2, 0x95A3, 0xBBD5, 0x95A4, 0xBBD7, 0x95A5, 0xBBD6, 0x95A8, 0xBBD3,
- 0x95A9, 0xBBD4, 0x95AB, 0xE8A7, 0x95AC, 0xE8A6, 0x95AD, 0xBE5B, 0x95AE, 0xE8A8, 0x95B0, 0xE8A9, 0x95B1, 0xBE5C, 0x95B5, 0xEC4D,
- 0x95B6, 0xEC4B, 0x95B7, 0xEEF3, 0x95B9, 0xEC49, 0x95BA, 0xEC4A, 0x95BB, 0xC046, 0x95BC, 0xEC46, 0x95BD, 0xEC4E, 0x95BE, 0xEC48,
- 0x95BF, 0xEC4C, 0x95C0, 0xEEEF, 0x95C3, 0xEEF1, 0x95C5, 0xEEF2, 0x95C6, 0xC1F3, 0x95C7, 0xEEEE, 0x95C8, 0xC1F2, 0x95C9, 0xEEF0,
- 0x95CA, 0xC1EF, 0x95CB, 0xC1F0, 0x95CC, 0xC1F1, 0x95CD, 0xEC47, 0x95D0, 0xC2F5, 0x95D1, 0xF16E, 0x95D2, 0xF16C, 0x95D3, 0xF16D,
- 0x95D4, 0xC2F3, 0x95D5, 0xC2F6, 0x95D6, 0xC2F4, 0x95DA, 0xF377, 0x95DB, 0xF378, 0x95DC, 0xC3F6, 0x95DE, 0xF545, 0x95DF, 0xF547,
- 0x95E0, 0xF546, 0x95E1, 0xC4C4, 0x95E2, 0xC550, 0x95E3, 0xF66D, 0x95E4, 0xF66C, 0x95E5, 0xF66B, 0x961C, 0xAAFA, 0x961E, 0xC9AA,
- 0x9620, 0xCA58, 0x9621, 0xA6E9, 0x9622, 0xCA56, 0x9623, 0xCA59, 0x9624, 0xCA57, 0x9628, 0xCBAE, 0x962A, 0xA8C1, 0x962C, 0xA8C2,
- 0x962D, 0xCBB0, 0x962E, 0xA8BF, 0x962F, 0xCBAF, 0x9630, 0xCBAD, 0x9631, 0xA8C0, 0x9632, 0xA8BE, 0x9639, 0xCDD8, 0x963A, 0xCDDB,
- 0x963B, 0xAAFD, 0x963C, 0xCDDA, 0x963D, 0xCDD9, 0x963F, 0xAAFC, 0x9640, 0xAAFB, 0x9642, 0xAB40, 0x9643, 0xCDDC, 0x9644, 0xAAFE,
- 0x964A, 0xD0C6, 0x964B, 0xADAE, 0x964C, 0xADAF, 0x964D, 0xADB0, 0x964E, 0xD0C7, 0x964F, 0xD0C3, 0x9650, 0xADAD, 0x9651, 0xD0C4,
- 0x9653, 0xD0C5, 0x9654, 0xD0C2, 0x9658, 0xB0A4, 0x965B, 0xB0A1, 0x965C, 0xD445, 0x965D, 0xB0A2, 0x965E, 0xB0A5, 0x965F, 0xD446,
- 0x9661, 0xB07E, 0x9662, 0xB07C, 0x9663, 0xB07D, 0x9664, 0xB0A3, 0x966A, 0xB3AD, 0x966B, 0xD849, 0x966C, 0xB3B5, 0x966D, 0xD848,
- 0x966F, 0xD84B, 0x9670, 0xB3B1, 0x9671, 0xD84A, 0x9672, 0xB6AB, 0x9673, 0xB3AF, 0x9674, 0xB3B2, 0x9675, 0xB3AE, 0x9676, 0xB3B3,
- 0x9677, 0xB3B4, 0x9678, 0xB3B0, 0x967C, 0xD847, 0x967D, 0xB6A7, 0x967E, 0xDC7D, 0x9680, 0xDCA3, 0x9683, 0xDCA2, 0x9684, 0xB6AC,
- 0x9685, 0xB6A8, 0x9686, 0xB6A9, 0x9687, 0xDC7C, 0x9688, 0xDC7E, 0x9689, 0xDCA1, 0x968A, 0xB6A4, 0x968B, 0xB6A6, 0x968D, 0xB6AA,
- 0x968E, 0xB6A5, 0x9691, 0xE0D3, 0x9692, 0xE0D1, 0x9693, 0xE0D2, 0x9694, 0xB96A, 0x9695, 0xB96B, 0x9697, 0xE0D4, 0x9698, 0xB969,
- 0x9699, 0xBBD8, 0x969B, 0xBBDA, 0x969C, 0xBBD9, 0x969E, 0xE4BB, 0x96A1, 0xE4BC, 0x96A2, 0xE8AB, 0x96A4, 0xE8AA, 0x96A7, 0xC047,
- 0x96A8, 0xC048, 0x96A9, 0xEC4F, 0x96AA, 0xC049, 0x96AC, 0xEEF6, 0x96AE, 0xEEF4, 0x96B0, 0xEEF5, 0x96B1, 0xC1F4, 0x96B3, 0xF16F,
- 0x96B4, 0xC3F7, 0x96B8, 0xC1F5, 0x96B9, 0xAB41, 0x96BB, 0xB0A6, 0x96BC, 0xD447, 0x96BF, 0xD84C, 0x96C0, 0xB3B6, 0x96C1, 0xB6AD,
- 0x96C2, 0xDCA4, 0x96C3, 0xDCA6, 0x96C4, 0xB6AF, 0x96C5, 0xB6AE, 0x96C6, 0xB6B0, 0x96C7, 0xB6B1, 0x96C8, 0xDCA5, 0x96C9, 0xB96E,
- 0x96CA, 0xB96F, 0x96CB, 0xB96D, 0x96CC, 0xBBDB, 0x96CD, 0xB96C, 0x96CE, 0xE0D5, 0x96D2, 0xBBDC, 0x96D3, 0xE8AC, 0x96D4, 0xEC50,
- 0x96D5, 0xC04A, 0x96D6, 0xC1F6, 0x96D7, 0xF170, 0x96D8, 0xF174, 0x96D9, 0xC2F9, 0x96DA, 0xF171, 0x96DB, 0xC2FA, 0x96DC, 0xC2F8,
- 0x96DD, 0xF175, 0x96DE, 0xC2FB, 0x96DF, 0xF173, 0x96E1, 0xF379, 0x96E2, 0xC2F7, 0x96E3, 0xC3F8, 0x96E5, 0xF8CD, 0x96E8, 0xAB42,
- 0x96E9, 0xB3B8, 0x96EA, 0xB3B7, 0x96EF, 0xB6B2, 0x96F0, 0xDCA8, 0x96F1, 0xDCA7, 0x96F2, 0xB6B3, 0x96F5, 0xE0D9, 0x96F6, 0xB973,
- 0x96F7, 0xB970, 0x96F8, 0xE0D8, 0x96F9, 0xB972, 0x96FA, 0xE0D6, 0x96FB, 0xB971, 0x96FD, 0xE0D7, 0x96FF, 0xE4BD, 0x9700, 0xBBDD,
- 0x9702, 0xE8AF, 0x9704, 0xBE5D, 0x9705, 0xE8AD, 0x9706, 0xBE5E, 0x9707, 0xBE5F, 0x9708, 0xE8AE, 0x9709, 0xBE60, 0x970B, 0xEC51,
- 0x970D, 0xC04E, 0x970E, 0xC04B, 0x970F, 0xC050, 0x9710, 0xEC53, 0x9711, 0xC04C, 0x9712, 0xEC52, 0x9713, 0xC04F, 0x9716, 0xC04D,
- 0x9718, 0xEEF9, 0x9719, 0xEEFB, 0x971C, 0xC1F7, 0x971D, 0xEEFA, 0x971E, 0xC1F8, 0x971F, 0xEEF8, 0x9720, 0xEEF7, 0x9722, 0xF177,
- 0x9723, 0xF176, 0x9724, 0xC2FC, 0x9725, 0xF178, 0x9726, 0xF37E, 0x9727, 0xC3FA, 0x9728, 0xF37D, 0x9729, 0xF37A, 0x972A, 0xC3F9,
- 0x972B, 0xF37B, 0x972C, 0xF37C, 0x972E, 0xF548, 0x972F, 0xF549, 0x9730, 0xC4C5, 0x9732, 0xC553, 0x9735, 0xF66E, 0x9738, 0xC551,
- 0x9739, 0xC552, 0x973A, 0xF66F, 0x973D, 0xC5B4, 0x973E, 0xC5B5, 0x973F, 0xF771, 0x9742, 0xC645, 0x9743, 0xF8CF, 0x9744, 0xC647,
- 0x9746, 0xF8CE, 0x9747, 0xF8D0, 0x9748, 0xC646, 0x9749, 0xF957, 0x974B, 0xF9AD, 0x9752, 0xAB43, 0x9756, 0xB974, 0x9758, 0xE4BE,
- 0x975A, 0xE8B0, 0x975B, 0xC051, 0x975C, 0xC052, 0x975E, 0xAB44, 0x9760, 0xBE61, 0x9761, 0xC3FB, 0x9762, 0xADB1, 0x9766, 0xC053,
- 0x9768, 0xC5E2, 0x9769, 0xADB2, 0x976A, 0xD84D, 0x976C, 0xDCA9, 0x976E, 0xDCAB, 0x9770, 0xDCAA, 0x9772, 0xE0DD, 0x9773, 0xE0DA,
- 0x9774, 0xB975, 0x9776, 0xB976, 0x9777, 0xE0DB, 0x9778, 0xE0DC, 0x977A, 0xE4C0, 0x977B, 0xE4C5, 0x977C, 0xBBDE, 0x977D, 0xE4BF,
- 0x977E, 0xE4C1, 0x977F, 0xE4C8, 0x9780, 0xE4C3, 0x9781, 0xE4C7, 0x9782, 0xE4C4, 0x9783, 0xE4C2, 0x9784, 0xE4C6, 0x9785, 0xBBDF,
- 0x9788, 0xE8B3, 0x978A, 0xE8B1, 0x978B, 0xBE63, 0x978D, 0xBE62, 0x978E, 0xE8B2, 0x978F, 0xBE64, 0x9794, 0xEC56, 0x9797, 0xEC55,
- 0x9798, 0xC054, 0x9799, 0xEC54, 0x979A, 0xEEFC, 0x979C, 0xEEFE, 0x979D, 0xEF41, 0x979E, 0xEF40, 0x97A0, 0xC1F9, 0x97A1, 0xEEFD,
- 0x97A2, 0xF1A1, 0x97A3, 0xC2FD, 0x97A4, 0xF17D, 0x97A5, 0xF1A2, 0x97A6, 0xC2FE, 0x97A8, 0xF17B, 0x97AA, 0xF17E, 0x97AB, 0xF17C,
- 0x97AC, 0xF179, 0x97AD, 0xC340, 0x97AE, 0xF17A, 0x97B3, 0xF3A1, 0x97B6, 0xF3A3, 0x97B7, 0xF3A2, 0x97B9, 0xF54A, 0x97BB, 0xF54B,
- 0x97BF, 0xF670, 0x97C1, 0xC5B7, 0x97C3, 0xC5B6, 0x97C4, 0xF84F, 0x97C5, 0xF850, 0x97C6, 0xC648, 0x97C7, 0xF8D1, 0x97C9, 0xC669,
- 0x97CB, 0xADB3, 0x97CC, 0xB6B4, 0x97CD, 0xE4CA, 0x97CE, 0xE4C9, 0x97CF, 0xE8B5, 0x97D0, 0xE8B4, 0x97D3, 0xC1FA, 0x97D4, 0xEF43,
- 0x97D5, 0xEF42, 0x97D6, 0xF1A5, 0x97D7, 0xF1A3, 0x97D8, 0xF1A6, 0x97D9, 0xF1A4, 0x97DC, 0xC3FC, 0x97DD, 0xF3A4, 0x97DE, 0xF3A5,
- 0x97DF, 0xF3A6, 0x97E1, 0xF671, 0x97E3, 0xF772, 0x97E5, 0xF8D2, 0x97ED, 0xADB4, 0x97F0, 0xEC57, 0x97F1, 0xEF44, 0x97F3, 0xADB5,
- 0x97F6, 0xBBE0, 0x97F8, 0xEC58, 0x97F9, 0xC341, 0x97FA, 0xF1A7, 0x97FB, 0xC3FD, 0x97FD, 0xF54C, 0x97FE, 0xF54D, 0x97FF, 0xC554,
- 0x9800, 0xF851, 0x9801, 0xADB6, 0x9802, 0xB3BB, 0x9803, 0xB3BC, 0x9804, 0xD84E, 0x9805, 0xB6B5, 0x9806, 0xB6B6, 0x9807, 0xDCAC,
- 0x9808, 0xB6B7, 0x980A, 0xB97A, 0x980C, 0xB97C, 0x980D, 0xE0DF, 0x980E, 0xE0E0, 0x980F, 0xE0DE, 0x9810, 0xB977, 0x9811, 0xB978,
- 0x9812, 0xB97B, 0x9813, 0xB979, 0x9816, 0xE4CB, 0x9817, 0xBBE1, 0x9818, 0xBBE2, 0x981B, 0xE8BC, 0x981C, 0xBE67, 0x981D, 0xE8B7,
- 0x981E, 0xE8B6, 0x9820, 0xE8BB, 0x9821, 0xBE65, 0x9824, 0xC05B, 0x9826, 0xE8B8, 0x9827, 0xE8BD, 0x9828, 0xE8BA, 0x9829, 0xE8B9,
- 0x982B, 0xBE66, 0x982D, 0xC059, 0x982F, 0xEC5A, 0x9830, 0xC055, 0x9832, 0xEC5B, 0x9835, 0xEC59, 0x9837, 0xC058, 0x9838, 0xC056,
- 0x9839, 0xC05A, 0x983B, 0xC057, 0x9841, 0xEF45, 0x9843, 0xEF4A, 0x9844, 0xEF46, 0x9845, 0xEF49, 0x9846, 0xC1FB, 0x9848, 0xEDD4,
- 0x9849, 0xEF48, 0x984A, 0xEF47, 0x984C, 0xC344, 0x984D, 0xC342, 0x984E, 0xC345, 0x984F, 0xC343, 0x9850, 0xF1A8, 0x9851, 0xF1A9,
- 0x9852, 0xF1AA, 0x9853, 0xC346, 0x9857, 0xF3AA, 0x9858, 0xC440, 0x9859, 0xF3A8, 0x985B, 0xC441, 0x985C, 0xF3A7, 0x985D, 0xF3A9,
- 0x985E, 0xC3FE, 0x985F, 0xF551, 0x9860, 0xF54E, 0x9862, 0xF54F, 0x9863, 0xF550, 0x9864, 0xF672, 0x9865, 0xC556, 0x9867, 0xC555,
- 0x9869, 0xF774, 0x986A, 0xF773, 0x986B, 0xC5B8, 0x986F, 0xC5E3, 0x9870, 0xC649, 0x9871, 0xC660, 0x9872, 0xF958, 0x9873, 0xF9AE,
- 0x9874, 0xF9AF, 0x98A8, 0xADB7, 0x98A9, 0xDCAD, 0x98AC, 0xE0E1, 0x98AD, 0xE4CC, 0x98AE, 0xE4CD, 0x98AF, 0xBBE3, 0x98B1, 0xBBE4,
- 0x98B2, 0xE8BE, 0x98B3, 0xBE68, 0x98B6, 0xC1FC, 0x98B8, 0xF1AB, 0x98BA, 0xC347, 0x98BB, 0xF3AD, 0x98BC, 0xC442, 0x98BD, 0xF3AC,
- 0x98BE, 0xF3AE, 0x98BF, 0xF3AB, 0x98C0, 0xF675, 0x98C1, 0xF552, 0x98C2, 0xF553, 0x98C4, 0xC4C6, 0x98C6, 0xF674, 0x98C9, 0xF673,
- 0x98CB, 0xF775, 0x98CC, 0xF9B0, 0x98DB, 0xADB8, 0x98DF, 0xADB9, 0x98E2, 0xB0A7, 0x98E3, 0xD448, 0x98E5, 0xD84F, 0x98E7, 0xB6B8,
- 0x98E9, 0xB6BB, 0x98EA, 0xB6B9, 0x98EB, 0xDCAE, 0x98ED, 0xB6BD, 0x98EF, 0xB6BA, 0x98F2, 0xB6BC, 0x98F4, 0xB97E, 0x98F6, 0xE0E2,
- 0x98F9, 0xE0E3, 0x98FA, 0xE8C0, 0x98FC, 0xB97D, 0x98FD, 0xB9A1, 0x98FE, 0xB9A2, 0x9900, 0xE4CF, 0x9902, 0xE4CE, 0x9903, 0xBBE5,
- 0x9905, 0xBBE6, 0x9907, 0xE4D0, 0x9908, 0xE8BF, 0x9909, 0xBBE8, 0x990A, 0xBE69, 0x990C, 0xBBE7, 0x9910, 0xC05C, 0x9911, 0xE8C1,
- 0x9912, 0xBE6B, 0x9913, 0xBE6A, 0x9914, 0xE8C2, 0x9915, 0xE8C5, 0x9916, 0xE8C3, 0x9917, 0xE8C4, 0x9918, 0xBE6C, 0x991A, 0xC061,
- 0x991B, 0xC05F, 0x991E, 0xC05E, 0x991F, 0xEC5D, 0x9921, 0xC060, 0x9924, 0xEC5C, 0x9925, 0xEF4B, 0x9927, 0xEC5E, 0x9928, 0xC05D,
- 0x9929, 0xEC5F, 0x992A, 0xEF4E, 0x992B, 0xEF4C, 0x992C, 0xEF4D, 0x992D, 0xEF52, 0x992E, 0xC34B, 0x992F, 0xEF51, 0x9930, 0xEF54,
- 0x9931, 0xEF53, 0x9932, 0xEF50, 0x9933, 0xEF4F, 0x9935, 0xC1FD, 0x993A, 0xF1AE, 0x993C, 0xF1AD, 0x993D, 0xC34A, 0x993E, 0xC348,
- 0x993F, 0xC349, 0x9941, 0xF1AC, 0x9943, 0xF3B1, 0x9945, 0xC443, 0x9947, 0xF3B0, 0x9948, 0xF3AF, 0x9949, 0xC444, 0x994B, 0xF558,
- 0x994C, 0xF557, 0x994E, 0xF555, 0x9950, 0xF554, 0x9951, 0xC4C8, 0x9952, 0xC4C7, 0x9953, 0xF559, 0x9954, 0xF776, 0x9955, 0xC5B9,
- 0x9956, 0xF677, 0x9957, 0xC557, 0x9958, 0xF676, 0x9959, 0xF556, 0x995B, 0xF777, 0x995C, 0xC5E4, 0x995E, 0xC661, 0x995F, 0xF959,
- 0x9961, 0xF9B1, 0x9996, 0xADBA, 0x9997, 0xD850, 0x9998, 0xEF55, 0x9999, 0xADBB, 0x999C, 0xE4D2, 0x999D, 0xE4D1, 0x999E, 0xEC60,
- 0x99A1, 0xEF57, 0x99A3, 0xEF56, 0x99A5, 0xC34C, 0x99A6, 0xF3B2, 0x99A7, 0xF3B3, 0x99A8, 0xC4C9, 0x99AB, 0xF9B2, 0x99AC, 0xB0A8,
- 0x99AD, 0xB6BF, 0x99AE, 0xB6BE, 0x99AF, 0xE0E4, 0x99B0, 0xE0E6, 0x99B1, 0xB9A4, 0x99B2, 0xE0E5, 0x99B3, 0xB9A3, 0x99B4, 0xB9A5,
- 0x99B5, 0xE0E7, 0x99B9, 0xE4D4, 0x99BA, 0xE4D6, 0x99BB, 0xE4D5, 0x99BD, 0xE4D8, 0x99C1, 0xBBE9, 0x99C2, 0xE4D7, 0x99C3, 0xE4D3,
- 0x99C7, 0xE4D9, 0x99C9, 0xE8CC, 0x99CB, 0xE8CF, 0x99CC, 0xE8D1, 0x99CD, 0xE8C7, 0x99CE, 0xE8CB, 0x99CF, 0xE8C8, 0x99D0, 0xBE6E,
- 0x99D1, 0xBE71, 0x99D2, 0xBE73, 0x99D3, 0xE8C9, 0x99D4, 0xE8CA, 0x99D5, 0xBE72, 0x99D6, 0xE8CD, 0x99D7, 0xE8D0, 0x99D8, 0xE8CE,
- 0x99D9, 0xBE74, 0x99DB, 0xBE70, 0x99DC, 0xE8C6, 0x99DD, 0xBE6D, 0x99DF, 0xBE6F, 0x99E2, 0xC063, 0x99E3, 0xEC66, 0x99E4, 0xEC64,
- 0x99E5, 0xEC63, 0x99E7, 0xEC69, 0x99E9, 0xEC68, 0x99EA, 0xEC67, 0x99EC, 0xEC62, 0x99ED, 0xC062, 0x99EE, 0xEC61, 0x99F0, 0xEC65,
- 0x99F1, 0xC064, 0x99F4, 0xEF5A, 0x99F6, 0xEF5E, 0x99F7, 0xEF5B, 0x99F8, 0xEF5D, 0x99F9, 0xEF5C, 0x99FA, 0xEF59, 0x99FB, 0xEF5F,
- 0x99FC, 0xEF62, 0x99FD, 0xEF60, 0x99FE, 0xEF61, 0x99FF, 0xC240, 0x9A01, 0xC1FE, 0x9A02, 0xEF58, 0x9A03, 0xEF63, 0x9A04, 0xF1B3,
- 0x9A05, 0xF1B6, 0x9A06, 0xF1B8, 0x9A07, 0xF1B7, 0x9A09, 0xF1B1, 0x9A0A, 0xF1B5, 0x9A0B, 0xF1B0, 0x9A0D, 0xF1B2, 0x9A0E, 0xC34D,
- 0x9A0F, 0xF1AF, 0x9A11, 0xF1B4, 0x9A14, 0xF3C0, 0x9A15, 0xF3B5, 0x9A16, 0xC445, 0x9A19, 0xC446, 0x9A1A, 0xF3B4, 0x9A1B, 0xF3B9,
- 0x9A1C, 0xF3BF, 0x9A1D, 0xF3B7, 0x9A1E, 0xF3BE, 0x9A20, 0xF3BB, 0x9A22, 0xF3BA, 0x9A23, 0xF3BD, 0x9A24, 0xF3B8, 0x9A25, 0xF3B6,
- 0x9A27, 0xF3BC, 0x9A29, 0xF560, 0x9A2A, 0xF55E, 0x9A2B, 0xC4CA, 0x9A2C, 0xF55D, 0x9A2D, 0xF563, 0x9A2E, 0xF561, 0x9A30, 0xC4CB,
- 0x9A31, 0xF55C, 0x9A32, 0xF55A, 0x9A34, 0xF55B, 0x9A35, 0xC4CD, 0x9A36, 0xF55F, 0x9A37, 0xC4CC, 0x9A38, 0xF562, 0x9A39, 0xF678,
- 0x9A3A, 0xF67E, 0x9A3D, 0xF679, 0x9A3E, 0xC55B, 0x9A3F, 0xF6A1, 0x9A40, 0xC55A, 0x9A41, 0xF67D, 0x9A42, 0xF67C, 0x9A43, 0xC559,
- 0x9A44, 0xF67B, 0x9A45, 0xC558, 0x9A46, 0xF67A, 0x9A48, 0xF77D, 0x9A49, 0xF7A1, 0x9A4A, 0xF77E, 0x9A4C, 0xF77B, 0x9A4D, 0xC5BB,
- 0x9A4E, 0xF778, 0x9A4F, 0xF77C, 0x9A50, 0xF7A3, 0x9A52, 0xF7A2, 0x9A53, 0xF779, 0x9A54, 0xF77A, 0x9A55, 0xC5BA, 0x9A56, 0xF852,
- 0x9A57, 0xC5E7, 0x9A59, 0xF853, 0x9A5A, 0xC5E5, 0x9A5B, 0xC5E6, 0x9A5E, 0xF8D3, 0x9A5F, 0xC64A, 0x9A60, 0xF976, 0x9A62, 0xC66A,
- 0x9A64, 0xF9B3, 0x9A65, 0xC66B, 0x9A66, 0xF9B4, 0x9A67, 0xF9B5, 0x9A68, 0xF9C3, 0x9A69, 0xF9C2, 0x9A6A, 0xC67A, 0x9A6B, 0xF9CD,
- 0x9AA8, 0xB0A9, 0x9AAB, 0xE0E9, 0x9AAD, 0xE0E8, 0x9AAF, 0xBBEA, 0x9AB0, 0xBBEB, 0x9AB1, 0xE4DA, 0x9AB3, 0xE8D2, 0x9AB4, 0xEC6C,
- 0x9AB7, 0xBE75, 0x9AB8, 0xC065, 0x9AB9, 0xEC6A, 0x9ABB, 0xEC6D, 0x9ABC, 0xC066, 0x9ABE, 0xEF64, 0x9ABF, 0xEC6B, 0x9AC0, 0xF1B9,
- 0x9AC1, 0xC34E, 0x9AC2, 0xF3C1, 0x9AC6, 0xF566, 0x9AC7, 0xF564, 0x9ACA, 0xF565, 0x9ACD, 0xF6A2, 0x9ACF, 0xC55C, 0x9AD0, 0xF7A4,
- 0x9AD1, 0xC5EA, 0x9AD2, 0xC5BC, 0x9AD3, 0xC5E8, 0x9AD4, 0xC5E9, 0x9AD5, 0xF8D4, 0x9AD6, 0xC662, 0x9AD8, 0xB0AA, 0x9ADC, 0xF1BA,
- 0x9ADF, 0xD449, 0x9AE1, 0xB9A6, 0x9AE3, 0xE4DB, 0x9AE6, 0xBBEC, 0x9AE7, 0xE4DC, 0x9AEB, 0xE8D4, 0x9AEC, 0xE8D3, 0x9AED, 0xC068,
- 0x9AEE, 0xBE76, 0x9AEF, 0xBE77, 0x9AF1, 0xE8D7, 0x9AF2, 0xE8D6, 0x9AF3, 0xE8D5, 0x9AF6, 0xEC6E, 0x9AF7, 0xEC71, 0x9AF9, 0xEC70,
- 0x9AFA, 0xEC6F, 0x9AFB, 0xC067, 0x9AFC, 0xEF68, 0x9AFD, 0xEF66, 0x9AFE, 0xEF65, 0x9B01, 0xEF67, 0x9B03, 0xC34F, 0x9B04, 0xF1BC,
- 0x9B05, 0xF1BD, 0x9B06, 0xC350, 0x9B08, 0xF1BB, 0x9B0A, 0xF3C3, 0x9B0B, 0xF3C2, 0x9B0C, 0xF3C5, 0x9B0D, 0xC447, 0x9B0E, 0xF3C4,
- 0x9B10, 0xF567, 0x9B11, 0xF569, 0x9B12, 0xF568, 0x9B15, 0xF6A3, 0x9B16, 0xF6A6, 0x9B17, 0xF6A4, 0x9B18, 0xF6A5, 0x9B19, 0xF7A5,
- 0x9B1A, 0xC5BD, 0x9B1E, 0xF854, 0x9B1F, 0xF855, 0x9B20, 0xF856, 0x9B22, 0xC64B, 0x9B23, 0xC663, 0x9B24, 0xF9B6, 0x9B25, 0xB0AB,
- 0x9B27, 0xBE78, 0x9B28, 0xC069, 0x9B29, 0xF1BE, 0x9B2B, 0xF7A6, 0x9B2E, 0xF9C4, 0x9B2F, 0xD44A, 0x9B31, 0xC67B, 0x9B32, 0xB0AC,
- 0x9B33, 0xEC72, 0x9B35, 0xF1BF, 0x9B37, 0xF3C6, 0x9B3A, 0xF6A7, 0x9B3B, 0xF7A7, 0x9B3C, 0xB0AD, 0x9B3E, 0xE4DD, 0x9B3F, 0xE4DE,
- 0x9B41, 0xBBED, 0x9B42, 0xBBEE, 0x9B43, 0xE8D9, 0x9B44, 0xBE7A, 0x9B45, 0xBE79, 0x9B46, 0xE8D8, 0x9B48, 0xEF69, 0x9B4A, 0xF1C0,
- 0x9B4B, 0xF1C2, 0x9B4C, 0xF1C1, 0x9B4D, 0xC353, 0x9B4E, 0xC352, 0x9B4F, 0xC351, 0x9B51, 0xC55E, 0x9B52, 0xF6A8, 0x9B54, 0xC55D,
- 0x9B55, 0xF7A9, 0x9B56, 0xF7A8, 0x9B58, 0xC64C, 0x9B59, 0xF8D5, 0x9B5A, 0xB3BD, 0x9B5B, 0xE0EA, 0x9B5F, 0xE4E1, 0x9B60, 0xE4DF,
- 0x9B61, 0xE4E0, 0x9B64, 0xE8E2, 0x9B66, 0xE8DD, 0x9B67, 0xE8DA, 0x9B68, 0xE8E1, 0x9B6C, 0xE8E3, 0x9B6F, 0xBE7C, 0x9B70, 0xE8E0,
- 0x9B71, 0xE8DC, 0x9B74, 0xE8DB, 0x9B75, 0xE8DF, 0x9B76, 0xE8DE, 0x9B77, 0xBE7B, 0x9B7A, 0xEC7D, 0x9B7B, 0xEC78, 0x9B7C, 0xEC76,
- 0x9B7D, 0xECA1, 0x9B7E, 0xEC77, 0x9B80, 0xEC73, 0x9B82, 0xEC79, 0x9B85, 0xEC74, 0x9B86, 0xEF72, 0x9B87, 0xEC75, 0x9B88, 0xECA2,
- 0x9B90, 0xEC7C, 0x9B91, 0xC06A, 0x9B92, 0xEC7B, 0x9B93, 0xEC7A, 0x9B95, 0xEC7E, 0x9B9A, 0xEF6A, 0x9B9B, 0xEF6D, 0x9B9E, 0xEF6C,
- 0x9BA0, 0xEF74, 0x9BA1, 0xEF6F, 0x9BA2, 0xEF73, 0x9BA4, 0xEF71, 0x9BA5, 0xEF70, 0x9BA6, 0xEF6E, 0x9BA8, 0xEF6B, 0x9BAA, 0xC243,
- 0x9BAB, 0xC242, 0x9BAD, 0xC244, 0x9BAE, 0xC241, 0x9BAF, 0xEF75, 0x9BB5, 0xF1C8, 0x9BB6, 0xF1CB, 0x9BB8, 0xF1C9, 0x9BB9, 0xF1CD,
- 0x9BBD, 0xF1CE, 0x9BBF, 0xF1C6, 0x9BC0, 0xC358, 0x9BC1, 0xF1C7, 0x9BC3, 0xF1C5, 0x9BC4, 0xF1CC, 0x9BC6, 0xF1C4, 0x9BC7, 0xF1C3,
- 0x9BC8, 0xC357, 0x9BC9, 0xC355, 0x9BCA, 0xC354, 0x9BD3, 0xF1CA, 0x9BD4, 0xF3CF, 0x9BD5, 0xF3D5, 0x9BD6, 0xC44A, 0x9BD7, 0xF3D0,
- 0x9BD9, 0xF3D3, 0x9BDA, 0xF3D7, 0x9BDB, 0xC44B, 0x9BDC, 0xF3D2, 0x9BDE, 0xF3CA, 0x9BE0, 0xF3C9, 0x9BE1, 0xF3D6, 0x9BE2, 0xF3CD,
- 0x9BE4, 0xF3CB, 0x9BE5, 0xF3D4, 0x9BE6, 0xF3CC, 0x9BE7, 0xC449, 0x9BE8, 0xC448, 0x9BEA, 0xF3C7, 0x9BEB, 0xF3C8, 0x9BEC, 0xF3D1,
- 0x9BF0, 0xF3CE, 0x9BF7, 0xF56C, 0x9BF8, 0xF56F, 0x9BFD, 0xC356, 0x9C05, 0xF56D, 0x9C06, 0xF573, 0x9C07, 0xF571, 0x9C08, 0xF56B,
- 0x9C09, 0xF576, 0x9C0B, 0xF56A, 0x9C0D, 0xC4CF, 0x9C0E, 0xF572, 0x9C12, 0xF56E, 0x9C13, 0xC4CE, 0x9C14, 0xF575, 0x9C17, 0xF574,
- 0x9C1C, 0xF6AB, 0x9C1D, 0xF6AA, 0x9C21, 0xF6B1, 0x9C23, 0xF6AD, 0x9C24, 0xF6B0, 0x9C25, 0xC560, 0x9C28, 0xF6AE, 0x9C29, 0xF6AF,
- 0x9C2B, 0xF6A9, 0x9C2C, 0xF6AC, 0x9C2D, 0xC55F, 0x9C31, 0xC5BF, 0x9C32, 0xF7B4, 0x9C33, 0xF7AF, 0x9C34, 0xF7B3, 0x9C36, 0xF7B6,
- 0x9C37, 0xF7B2, 0x9C39, 0xF7AE, 0x9C3B, 0xC5C1, 0x9C3C, 0xF7B1, 0x9C3D, 0xF7B5, 0x9C3E, 0xC5C0, 0x9C3F, 0xF7AC, 0x9C40, 0xF570,
- 0x9C41, 0xF7B0, 0x9C44, 0xF7AD, 0x9C46, 0xF7AA, 0x9C48, 0xF7AB, 0x9C49, 0xC5BE, 0x9C4A, 0xF85A, 0x9C4B, 0xF85C, 0x9C4C, 0xF85F,
- 0x9C4D, 0xF85B, 0x9C4E, 0xF860, 0x9C50, 0xF859, 0x9C52, 0xF857, 0x9C54, 0xC5EB, 0x9C55, 0xF85D, 0x9C56, 0xC5ED, 0x9C57, 0xC5EC,
- 0x9C58, 0xF858, 0x9C59, 0xF85E, 0x9C5E, 0xF8DA, 0x9C5F, 0xC64D, 0x9C60, 0xF8DB, 0x9C62, 0xF8D9, 0x9C63, 0xF8D6, 0x9C66, 0xF8D8,
- 0x9C67, 0xF8D7, 0x9C68, 0xF95A, 0x9C6D, 0xF95C, 0x9C6E, 0xF95B, 0x9C71, 0xF979, 0x9C73, 0xF978, 0x9C74, 0xF977, 0x9C75, 0xF97A,
- 0x9C77, 0xC673, 0x9C78, 0xC674, 0x9C79, 0xF9CA, 0x9C7A, 0xF9CE, 0x9CE5, 0xB3BE, 0x9CE6, 0xDCAF, 0x9CE7, 0xE0ED, 0x9CE9, 0xB9A7,
- 0x9CEA, 0xE0EB, 0x9CED, 0xE0EC, 0x9CF1, 0xE4E2, 0x9CF2, 0xE4E3, 0x9CF3, 0xBBF1, 0x9CF4, 0xBBEF, 0x9CF5, 0xE4E4, 0x9CF6, 0xBBF0,
- 0x9CF7, 0xE8E8, 0x9CF9, 0xE8EB, 0x9CFA, 0xE8E5, 0x9CFB, 0xE8EC, 0x9CFC, 0xE8E4, 0x9CFD, 0xE8E6, 0x9CFF, 0xE8E7, 0x9D00, 0xE8EA,
- 0x9D03, 0xBEA1, 0x9D04, 0xE8EF, 0x9D05, 0xE8EE, 0x9D06, 0xBE7D, 0x9D07, 0xE8E9, 0x9D08, 0xE8ED, 0x9D09, 0xBE7E, 0x9D10, 0xECAC,
- 0x9D12, 0xC06F, 0x9D14, 0xECA7, 0x9D15, 0xC06B, 0x9D17, 0xECA4, 0x9D18, 0xECAA, 0x9D19, 0xECAD, 0x9D1B, 0xC070, 0x9D1D, 0xECA9,
- 0x9D1E, 0xECA6, 0x9D1F, 0xECAE, 0x9D20, 0xECA5, 0x9D22, 0xECAB, 0x9D23, 0xC06C, 0x9D25, 0xECA3, 0x9D26, 0xC06D, 0x9D28, 0xC06E,
- 0x9D29, 0xECA8, 0x9D2D, 0xEFA9, 0x9D2E, 0xEF7A, 0x9D2F, 0xEF7B, 0x9D30, 0xEF7E, 0x9D31, 0xEF7C, 0x9D33, 0xEF76, 0x9D36, 0xEF79,
- 0x9D37, 0xEFA5, 0x9D38, 0xEF7D, 0x9D3B, 0xC245, 0x9D3D, 0xEFA7, 0x9D3E, 0xEFA4, 0x9D3F, 0xC246, 0x9D40, 0xEFA6, 0x9D41, 0xEF77,
- 0x9D42, 0xEFA2, 0x9D43, 0xEFA3, 0x9D45, 0xEFA1, 0x9D4A, 0xF1D2, 0x9D4B, 0xF1D4, 0x9D4C, 0xF1D7, 0x9D4F, 0xF1D1, 0x9D51, 0xC359,
- 0x9D52, 0xF1D9, 0x9D53, 0xF1D0, 0x9D54, 0xF1DA, 0x9D56, 0xF1D6, 0x9D57, 0xF1D8, 0x9D58, 0xF1DC, 0x9D59, 0xF1D5, 0x9D5A, 0xF1DD,
- 0x9D5B, 0xF1D3, 0x9D5C, 0xF1CF, 0x9D5D, 0xC35A, 0x9D5F, 0xF1DB, 0x9D60, 0xC35B, 0x9D61, 0xC44D, 0x9D67, 0xEF78, 0x9D68, 0xF3F1,
- 0x9D69, 0xF3E8, 0x9D6A, 0xC44F, 0x9D6B, 0xF3E4, 0x9D6C, 0xC450, 0x9D6F, 0xF3ED, 0x9D70, 0xF3E7, 0x9D71, 0xF3DD, 0x9D72, 0xC44E,
- 0x9D73, 0xF3EA, 0x9D74, 0xF3E5, 0x9D75, 0xF3E6, 0x9D77, 0xF3D8, 0x9D78, 0xF3DF, 0x9D79, 0xF3EE, 0x9D7B, 0xF3EB, 0x9D7D, 0xF3E3,
- 0x9D7F, 0xF3EF, 0x9D80, 0xF3DE, 0x9D81, 0xF3D9, 0x9D82, 0xF3EC, 0x9D84, 0xF3DB, 0x9D85, 0xF3E9, 0x9D86, 0xF3E0, 0x9D87, 0xF3F0,
- 0x9D88, 0xF3DC, 0x9D89, 0xC44C, 0x9D8A, 0xF3DA, 0x9D8B, 0xF3E1, 0x9D8C, 0xF3E2, 0x9D90, 0xF57D, 0x9D92, 0xF57B, 0x9D94, 0xF5A2,
- 0x9D96, 0xF5AE, 0x9D97, 0xF5A5, 0x9D98, 0xF57C, 0x9D99, 0xF578, 0x9D9A, 0xF5A7, 0x9D9B, 0xF57E, 0x9D9C, 0xF5A3, 0x9D9D, 0xF57A,
- 0x9D9E, 0xF5AA, 0x9D9F, 0xF577, 0x9DA0, 0xF5A1, 0x9DA1, 0xF5A6, 0x9DA2, 0xF5A8, 0x9DA3, 0xF5AB, 0x9DA4, 0xF579, 0x9DA6, 0xF5AF,
- 0x9DA7, 0xF5B0, 0x9DA8, 0xF5A9, 0x9DA9, 0xF5AD, 0x9DAA, 0xF5A4, 0x9DAC, 0xF6C1, 0x9DAD, 0xF6C4, 0x9DAF, 0xC561, 0x9DB1, 0xF6C3,
- 0x9DB2, 0xF6C8, 0x9DB3, 0xF6C6, 0x9DB4, 0xC562, 0x9DB5, 0xF6BD, 0x9DB6, 0xF6B3, 0x9DB7, 0xF6B2, 0x9DB8, 0xC564, 0x9DB9, 0xF6BF,
- 0x9DBA, 0xF6C0, 0x9DBB, 0xF6BC, 0x9DBC, 0xF6B4, 0x9DBE, 0xF6B9, 0x9DBF, 0xF5AC, 0x9DC1, 0xF6B5, 0x9DC2, 0xC563, 0x9DC3, 0xF6BB,
- 0x9DC5, 0xF6BA, 0x9DC7, 0xF6B6, 0x9DC8, 0xF6C2, 0x9DCA, 0xF6B7, 0x9DCB, 0xF7BB, 0x9DCC, 0xF6C5, 0x9DCD, 0xF6C7, 0x9DCE, 0xF6BE,
- 0x9DCF, 0xF6B8, 0x9DD0, 0xF7BC, 0x9DD1, 0xF7BE, 0x9DD2, 0xF7B8, 0x9DD3, 0xC5C2, 0x9DD5, 0xF7C5, 0x9DD6, 0xF7C3, 0x9DD7, 0xC5C3,
- 0x9DD8, 0xF7C2, 0x9DD9, 0xF7C1, 0x9DDA, 0xF7BA, 0x9DDB, 0xF7B7, 0x9DDC, 0xF7BD, 0x9DDD, 0xF7C6, 0x9DDE, 0xF7B9, 0x9DDF, 0xF7BF,
- 0x9DE1, 0xF869, 0x9DE2, 0xF86E, 0x9DE3, 0xF864, 0x9DE4, 0xF867, 0x9DE5, 0xC5EE, 0x9DE6, 0xF86B, 0x9DE8, 0xF872, 0x9DE9, 0xF7C0,
- 0x9DEB, 0xF865, 0x9DEC, 0xF86F, 0x9DED, 0xF873, 0x9DEE, 0xF86A, 0x9DEF, 0xF863, 0x9DF0, 0xF86D, 0x9DF2, 0xF86C, 0x9DF3, 0xF871,
- 0x9DF4, 0xF870, 0x9DF5, 0xF7C4, 0x9DF6, 0xF868, 0x9DF7, 0xF862, 0x9DF8, 0xF866, 0x9DF9, 0xC64E, 0x9DFA, 0xC64F, 0x9DFB, 0xF861,
- 0x9DFD, 0xF8E6, 0x9DFE, 0xF8DD, 0x9DFF, 0xF8E5, 0x9E00, 0xF8E2, 0x9E01, 0xF8E3, 0x9E02, 0xF8DC, 0x9E03, 0xF8DF, 0x9E04, 0xF8E7,
- 0x9E05, 0xF8E1, 0x9E06, 0xF8E0, 0x9E07, 0xF8DE, 0x9E09, 0xF8E4, 0x9E0B, 0xF95D, 0x9E0D, 0xF95E, 0x9E0F, 0xF960, 0x9E10, 0xF95F,
- 0x9E11, 0xF962, 0x9E12, 0xF961, 0x9E13, 0xF97C, 0x9E14, 0xF97B, 0x9E15, 0xF9B7, 0x9E17, 0xF9B8, 0x9E19, 0xF9C5, 0x9E1A, 0xC678,
- 0x9E1B, 0xC67C, 0x9E1D, 0xF9CF, 0x9E1E, 0xC67D, 0x9E75, 0xB3BF, 0x9E79, 0xC4D0, 0x9E7A, 0xF6C9, 0x9E7C, 0xC650, 0x9E7D, 0xC651,
- 0x9E7F, 0xB3C0, 0x9E80, 0xE0EE, 0x9E82, 0xB9A8, 0x9E83, 0xE8F0, 0x9E86, 0xECB0, 0x9E87, 0xECB1, 0x9E88, 0xECAF, 0x9E89, 0xEFAB,
- 0x9E8A, 0xEFAA, 0x9E8B, 0xC247, 0x9E8C, 0xF1DF, 0x9E8D, 0xEFAC, 0x9E8E, 0xF1DE, 0x9E91, 0xF3F3, 0x9E92, 0xC451, 0x9E93, 0xC453,
- 0x9E94, 0xF3F2, 0x9E97, 0xC452, 0x9E99, 0xF5B1, 0x9E9A, 0xF5B3, 0x9E9B, 0xF5B2, 0x9E9C, 0xF6CA, 0x9E9D, 0xC565, 0x9E9F, 0xC5EF,
- 0x9EA0, 0xF8E8, 0x9EA1, 0xF963, 0x9EA4, 0xF9D2, 0x9EA5, 0xB3C1, 0x9EA7, 0xE4E5, 0x9EA9, 0xBEA2, 0x9EAD, 0xECB3, 0x9EAE, 0xECB2,
- 0x9EB0, 0xEFAD, 0x9EB4, 0xC454, 0x9EB5, 0xC4D1, 0x9EB6, 0xF7C7, 0x9EB7, 0xF9CB, 0x9EBB, 0xB3C2, 0x9EBC, 0xBBF2, 0x9EBE, 0xBEA3,
- 0x9EC0, 0xF3F4, 0x9EC2, 0xF874, 0x9EC3, 0xB6C0, 0x9EC8, 0xEFAE, 0x9ECC, 0xC664, 0x9ECD, 0xB6C1, 0x9ECE, 0xBEA4, 0x9ECF, 0xC248,
- 0x9ED0, 0xF875, 0x9ED1, 0xB6C2, 0x9ED3, 0xE8F1, 0x9ED4, 0xC072, 0x9ED5, 0xECB4, 0x9ED6, 0xECB5, 0x9ED8, 0xC071, 0x9EDA, 0xEFAF,
- 0x9EDB, 0xC24C, 0x9EDC, 0xC24A, 0x9EDD, 0xC24B, 0x9EDE, 0xC249, 0x9EDF, 0xF1E0, 0x9EE0, 0xC35C, 0x9EE4, 0xF5B5, 0x9EE5, 0xF5B4,
- 0x9EE6, 0xF5B7, 0x9EE7, 0xF5B6, 0x9EE8, 0xC4D2, 0x9EEB, 0xF6CB, 0x9EED, 0xF6CD, 0x9EEE, 0xF6CC, 0x9EEF, 0xC566, 0x9EF0, 0xF7C8,
- 0x9EF2, 0xF876, 0x9EF3, 0xF877, 0x9EF4, 0xC5F0, 0x9EF5, 0xF964, 0x9EF6, 0xF97D, 0x9EF7, 0xC675, 0x9EF9, 0xDCB0, 0x9EFA, 0xECB6,
- 0x9EFB, 0xEFB0, 0x9EFC, 0xF3F5, 0x9EFD, 0xE0EF, 0x9EFF, 0xEFB1, 0x9F00, 0xF1E2, 0x9F01, 0xF1E1, 0x9F06, 0xF878, 0x9F07, 0xC652,
- 0x9F09, 0xF965, 0x9F0A, 0xF97E, 0x9F0E, 0xB9A9, 0x9F0F, 0xE8F2, 0x9F10, 0xE8F3, 0x9F12, 0xECB7, 0x9F13, 0xB9AA, 0x9F15, 0xC35D,
- 0x9F16, 0xF1E3, 0x9F18, 0xF6CF, 0x9F19, 0xC567, 0x9F1A, 0xF6D0, 0x9F1B, 0xF6CE, 0x9F1C, 0xF879, 0x9F1E, 0xF8E9, 0x9F20, 0xB9AB,
- 0x9F22, 0xEFB4, 0x9F23, 0xEFB3, 0x9F24, 0xEFB2, 0x9F25, 0xF1E4, 0x9F28, 0xF1E8, 0x9F29, 0xF1E7, 0x9F2A, 0xF1E6, 0x9F2B, 0xF1E5,
- 0x9F2C, 0xC35E, 0x9F2D, 0xF3F6, 0x9F2E, 0xF5B9, 0x9F2F, 0xC4D3, 0x9F30, 0xF5B8, 0x9F31, 0xF6D1, 0x9F32, 0xF7CB, 0x9F33, 0xF7CA,
- 0x9F34, 0xC5C4, 0x9F35, 0xF7C9, 0x9F36, 0xF87C, 0x9F37, 0xF87B, 0x9F38, 0xF87A, 0x9F3B, 0xBBF3, 0x9F3D, 0xECB8, 0x9F3E, 0xC24D,
- 0x9F40, 0xF3F7, 0x9F41, 0xF3F8, 0x9F42, 0xF7CC, 0x9F43, 0xF87D, 0x9F46, 0xF8EA, 0x9F47, 0xF966, 0x9F48, 0xF9B9, 0x9F49, 0xF9D4,
- 0x9F4A, 0xBBF4, 0x9F4B, 0xC24E, 0x9F4C, 0xF1E9, 0x9F4D, 0xF3F9, 0x9F4E, 0xF6D2, 0x9F4F, 0xF87E, 0x9F52, 0xBEA6, 0x9F54, 0xEFB5,
- 0x9F55, 0xF1EA, 0x9F56, 0xF3FA, 0x9F57, 0xF3FB, 0x9F58, 0xF3FC, 0x9F59, 0xF5BE, 0x9F5B, 0xF5BA, 0x9F5C, 0xC568, 0x9F5D, 0xF5BD,
- 0x9F5E, 0xF5BC, 0x9F5F, 0xC4D4, 0x9F60, 0xF5BB, 0x9F61, 0xC4D6, 0x9F63, 0xC4D5, 0x9F64, 0xF6D4, 0x9F65, 0xF6D3, 0x9F66, 0xC569,
- 0x9F67, 0xC56A, 0x9F6A, 0xC5C6, 0x9F6B, 0xF7CD, 0x9F6C, 0xC5C5, 0x9F6E, 0xF8A3, 0x9F6F, 0xF8A4, 0x9F70, 0xF8A2, 0x9F71, 0xF8A1,
- 0x9F72, 0xC654, 0x9F74, 0xF8EB, 0x9F75, 0xF8EC, 0x9F76, 0xF8ED, 0x9F77, 0xC653, 0x9F78, 0xF967, 0x9F79, 0xF96A, 0x9F7A, 0xF969,
- 0x9F7B, 0xF968, 0x9F7E, 0xF9D3, 0x9F8D, 0xC073, 0x9F90, 0xC365, 0x9F91, 0xF5BF, 0x9F92, 0xF6D5, 0x9F94, 0xC5C7, 0x9F95, 0xF7CE,
- 0x9F98, 0xF9D5, 0x9F9C, 0xC074, 0x9FA0, 0xEFB6, 0x9FA2, 0xF7CF, 0x9FA4, 0xF9A1, 0xFA0C, 0xC94A, 0xFA0D, 0xDDFC, 0xFE30, 0xA14A,
- 0xFE31, 0xA157, 0xFE33, 0xA159, 0xFE34, 0xA15B, 0xFE35, 0xA15F, 0xFE36, 0xA160, 0xFE37, 0xA163, 0xFE38, 0xA164, 0xFE39, 0xA167,
- 0xFE3A, 0xA168, 0xFE3B, 0xA16B, 0xFE3C, 0xA16C, 0xFE3D, 0xA16F, 0xFE3E, 0xA170, 0xFE3F, 0xA173, 0xFE40, 0xA174, 0xFE41, 0xA177,
- 0xFE42, 0xA178, 0xFE43, 0xA17B, 0xFE44, 0xA17C, 0xFE49, 0xA1C6, 0xFE4A, 0xA1C7, 0xFE4B, 0xA1CA, 0xFE4C, 0xA1CB, 0xFE4D, 0xA1C8,
- 0xFE4E, 0xA1C9, 0xFE4F, 0xA15C, 0xFE50, 0xA14D, 0xFE51, 0xA14E, 0xFE52, 0xA14F, 0xFE54, 0xA151, 0xFE55, 0xA152, 0xFE56, 0xA153,
- 0xFE57, 0xA154, 0xFE59, 0xA17D, 0xFE5A, 0xA17E, 0xFE5B, 0xA1A1, 0xFE5C, 0xA1A2, 0xFE5D, 0xA1A3, 0xFE5E, 0xA1A4, 0xFE5F, 0xA1CC,
- 0xFE60, 0xA1CD, 0xFE61, 0xA1CE, 0xFE62, 0xA1DE, 0xFE63, 0xA1DF, 0xFE64, 0xA1E0, 0xFE65, 0xA1E1, 0xFE66, 0xA1E2, 0xFE68, 0xA242,
- 0xFE69, 0xA24C, 0xFE6A, 0xA24D, 0xFE6B, 0xA24E, 0xFF01, 0xA149, 0xFF03, 0xA1AD, 0xFF04, 0xA243, 0xFF05, 0xA248, 0xFF06, 0xA1AE,
- 0xFF08, 0xA15D, 0xFF09, 0xA15E, 0xFF0A, 0xA1AF, 0xFF0B, 0xA1CF, 0xFF0C, 0xA141, 0xFF0D, 0xA1D0, 0xFF0E, 0xA144, 0xFF0F, 0xA1FE,
- 0xFF10, 0xA2AF, 0xFF11, 0xA2B0, 0xFF12, 0xA2B1, 0xFF13, 0xA2B2, 0xFF14, 0xA2B3, 0xFF15, 0xA2B4, 0xFF16, 0xA2B5, 0xFF17, 0xA2B6,
- 0xFF18, 0xA2B7, 0xFF19, 0xA2B8, 0xFF1A, 0xA147, 0xFF1B, 0xA146, 0xFF1C, 0xA1D5, 0xFF1D, 0xA1D7, 0xFF1E, 0xA1D6, 0xFF1F, 0xA148,
- 0xFF20, 0xA249, 0xFF21, 0xA2CF, 0xFF22, 0xA2D0, 0xFF23, 0xA2D1, 0xFF24, 0xA2D2, 0xFF25, 0xA2D3, 0xFF26, 0xA2D4, 0xFF27, 0xA2D5,
- 0xFF28, 0xA2D6, 0xFF29, 0xA2D7, 0xFF2A, 0xA2D8, 0xFF2B, 0xA2D9, 0xFF2C, 0xA2DA, 0xFF2D, 0xA2DB, 0xFF2E, 0xA2DC, 0xFF2F, 0xA2DD,
- 0xFF30, 0xA2DE, 0xFF31, 0xA2DF, 0xFF32, 0xA2E0, 0xFF33, 0xA2E1, 0xFF34, 0xA2E2, 0xFF35, 0xA2E3, 0xFF36, 0xA2E4, 0xFF37, 0xA2E5,
- 0xFF38, 0xA2E6, 0xFF39, 0xA2E7, 0xFF3A, 0xA2E8, 0xFF3C, 0xA240, 0xFF3F, 0xA1C4, 0xFF41, 0xA2E9, 0xFF42, 0xA2EA, 0xFF43, 0xA2EB,
- 0xFF44, 0xA2EC, 0xFF45, 0xA2ED, 0xFF46, 0xA2EE, 0xFF47, 0xA2EF, 0xFF48, 0xA2F0, 0xFF49, 0xA2F1, 0xFF4A, 0xA2F2, 0xFF4B, 0xA2F3,
- 0xFF4C, 0xA2F4, 0xFF4D, 0xA2F5, 0xFF4E, 0xA2F6, 0xFF4F, 0xA2F7, 0xFF50, 0xA2F8, 0xFF51, 0xA2F9, 0xFF52, 0xA2FA, 0xFF53, 0xA2FB,
- 0xFF54, 0xA2FC, 0xFF55, 0xA2FD, 0xFF56, 0xA2FE, 0xFF57, 0xA340, 0xFF58, 0xA341, 0xFF59, 0xA342, 0xFF5A, 0xA343, 0xFF5B, 0xA161,
- 0xFF5C, 0xA155, 0xFF5D, 0xA162, 0xFF5E, 0xA1E3, 0xFFE0, 0xA246, 0xFFE1, 0xA247, 0xFFE3, 0xA1C3, 0xFFE5, 0xA244, 0, 0
-};
-
-static const WCHAR oem2uni950[] = { /* Big5 --> Unicode pairs */
- 0xA140, 0x3000, 0xA141, 0xFF0C, 0xA142, 0x3001, 0xA143, 0x3002, 0xA144, 0xFF0E, 0xA145, 0x2027, 0xA146, 0xFF1B, 0xA147, 0xFF1A,
- 0xA148, 0xFF1F, 0xA149, 0xFF01, 0xA14A, 0xFE30, 0xA14B, 0x2026, 0xA14C, 0x2025, 0xA14D, 0xFE50, 0xA14E, 0xFE51, 0xA14F, 0xFE52,
- 0xA150, 0x00B7, 0xA151, 0xFE54, 0xA152, 0xFE55, 0xA153, 0xFE56, 0xA154, 0xFE57, 0xA155, 0xFF5C, 0xA156, 0x2013, 0xA157, 0xFE31,
- 0xA158, 0x2014, 0xA159, 0xFE33, 0xA15A, 0x2574, 0xA15B, 0xFE34, 0xA15C, 0xFE4F, 0xA15D, 0xFF08, 0xA15E, 0xFF09, 0xA15F, 0xFE35,
- 0xA160, 0xFE36, 0xA161, 0xFF5B, 0xA162, 0xFF5D, 0xA163, 0xFE37, 0xA164, 0xFE38, 0xA165, 0x3014, 0xA166, 0x3015, 0xA167, 0xFE39,
- 0xA168, 0xFE3A, 0xA169, 0x3010, 0xA16A, 0x3011, 0xA16B, 0xFE3B, 0xA16C, 0xFE3C, 0xA16D, 0x300A, 0xA16E, 0x300B, 0xA16F, 0xFE3D,
- 0xA170, 0xFE3E, 0xA171, 0x3008, 0xA172, 0x3009, 0xA173, 0xFE3F, 0xA174, 0xFE40, 0xA175, 0x300C, 0xA176, 0x300D, 0xA177, 0xFE41,
- 0xA178, 0xFE42, 0xA179, 0x300E, 0xA17A, 0x300F, 0xA17B, 0xFE43, 0xA17C, 0xFE44, 0xA17D, 0xFE59, 0xA17E, 0xFE5A, 0xA1A1, 0xFE5B,
- 0xA1A2, 0xFE5C, 0xA1A3, 0xFE5D, 0xA1A4, 0xFE5E, 0xA1A5, 0x2018, 0xA1A6, 0x2019, 0xA1A7, 0x201C, 0xA1A8, 0x201D, 0xA1A9, 0x301D,
- 0xA1AA, 0x301E, 0xA1AB, 0x2035, 0xA1AC, 0x2032, 0xA1AD, 0xFF03, 0xA1AE, 0xFF06, 0xA1AF, 0xFF0A, 0xA1B0, 0x203B, 0xA1B1, 0x00A7,
- 0xA1B2, 0x3003, 0xA1B3, 0x25CB, 0xA1B4, 0x25CF, 0xA1B5, 0x25B3, 0xA1B6, 0x25B2, 0xA1B7, 0x25CE, 0xA1B8, 0x2606, 0xA1B9, 0x2605,
- 0xA1BA, 0x25C7, 0xA1BB, 0x25C6, 0xA1BC, 0x25A1, 0xA1BD, 0x25A0, 0xA1BE, 0x25BD, 0xA1BF, 0x25BC, 0xA1C0, 0x32A3, 0xA1C1, 0x2105,
- 0xA1C2, 0x00AF, 0xA1C3, 0xFFE3, 0xA1C4, 0xFF3F, 0xA1C5, 0x02CD, 0xA1C6, 0xFE49, 0xA1C7, 0xFE4A, 0xA1C8, 0xFE4D, 0xA1C9, 0xFE4E,
- 0xA1CA, 0xFE4B, 0xA1CB, 0xFE4C, 0xA1CC, 0xFE5F, 0xA1CD, 0xFE60, 0xA1CE, 0xFE61, 0xA1CF, 0xFF0B, 0xA1D0, 0xFF0D, 0xA1D1, 0x00D7,
- 0xA1D2, 0x00F7, 0xA1D3, 0x00B1, 0xA1D4, 0x221A, 0xA1D5, 0xFF1C, 0xA1D6, 0xFF1E, 0xA1D7, 0xFF1D, 0xA1D8, 0x2266, 0xA1D9, 0x2267,
- 0xA1DA, 0x2260, 0xA1DB, 0x221E, 0xA1DC, 0x2252, 0xA1DD, 0x2261, 0xA1DE, 0xFE62, 0xA1DF, 0xFE63, 0xA1E0, 0xFE64, 0xA1E1, 0xFE65,
- 0xA1E2, 0xFE66, 0xA1E3, 0xFF5E, 0xA1E4, 0x2229, 0xA1E5, 0x222A, 0xA1E6, 0x22A5, 0xA1E7, 0x2220, 0xA1E8, 0x221F, 0xA1E9, 0x22BF,
- 0xA1EA, 0x33D2, 0xA1EB, 0x33D1, 0xA1EC, 0x222B, 0xA1ED, 0x222E, 0xA1EE, 0x2235, 0xA1EF, 0x2234, 0xA1F0, 0x2640, 0xA1F1, 0x2642,
- 0xA1F2, 0x2295, 0xA1F3, 0x2299, 0xA1F4, 0x2191, 0xA1F5, 0x2193, 0xA1F6, 0x2190, 0xA1F7, 0x2192, 0xA1F8, 0x2196, 0xA1F9, 0x2197,
- 0xA1FA, 0x2199, 0xA1FB, 0x2198, 0xA1FC, 0x2225, 0xA1FD, 0x2223, 0xA1FE, 0xFF0F, 0xA240, 0xFF3C, 0xA241, 0x2215, 0xA242, 0xFE68,
- 0xA243, 0xFF04, 0xA244, 0xFFE5, 0xA245, 0x3012, 0xA246, 0xFFE0, 0xA247, 0xFFE1, 0xA248, 0xFF05, 0xA249, 0xFF20, 0xA24A, 0x2103,
- 0xA24B, 0x2109, 0xA24C, 0xFE69, 0xA24D, 0xFE6A, 0xA24E, 0xFE6B, 0xA24F, 0x33D5, 0xA250, 0x339C, 0xA251, 0x339D, 0xA252, 0x339E,
- 0xA253, 0x33CE, 0xA254, 0x33A1, 0xA255, 0x338E, 0xA256, 0x338F, 0xA257, 0x33C4, 0xA258, 0x00B0, 0xA259, 0x5159, 0xA25A, 0x515B,
- 0xA25B, 0x515E, 0xA25C, 0x515D, 0xA25D, 0x5161, 0xA25E, 0x5163, 0xA25F, 0x55E7, 0xA260, 0x74E9, 0xA261, 0x7CCE, 0xA262, 0x2581,
- 0xA263, 0x2582, 0xA264, 0x2583, 0xA265, 0x2584, 0xA266, 0x2585, 0xA267, 0x2586, 0xA268, 0x2587, 0xA269, 0x2588, 0xA26A, 0x258F,
- 0xA26B, 0x258E, 0xA26C, 0x258D, 0xA26D, 0x258C, 0xA26E, 0x258B, 0xA26F, 0x258A, 0xA270, 0x2589, 0xA271, 0x253C, 0xA272, 0x2534,
- 0xA273, 0x252C, 0xA274, 0x2524, 0xA275, 0x251C, 0xA276, 0x2594, 0xA277, 0x2500, 0xA278, 0x2502, 0xA279, 0x2595, 0xA27A, 0x250C,
- 0xA27B, 0x2510, 0xA27C, 0x2514, 0xA27D, 0x2518, 0xA27E, 0x256D, 0xA2A1, 0x256E, 0xA2A2, 0x2570, 0xA2A3, 0x256F, 0xA2A4, 0x2550,
- 0xA2A5, 0x255E, 0xA2A6, 0x256A, 0xA2A7, 0x2561, 0xA2A8, 0x25E2, 0xA2A9, 0x25E3, 0xA2AA, 0x25E5, 0xA2AB, 0x25E4, 0xA2AC, 0x2571,
- 0xA2AD, 0x2572, 0xA2AE, 0x2573, 0xA2AF, 0xFF10, 0xA2B0, 0xFF11, 0xA2B1, 0xFF12, 0xA2B2, 0xFF13, 0xA2B3, 0xFF14, 0xA2B4, 0xFF15,
- 0xA2B5, 0xFF16, 0xA2B6, 0xFF17, 0xA2B7, 0xFF18, 0xA2B8, 0xFF19, 0xA2B9, 0x2160, 0xA2BA, 0x2161, 0xA2BB, 0x2162, 0xA2BC, 0x2163,
- 0xA2BD, 0x2164, 0xA2BE, 0x2165, 0xA2BF, 0x2166, 0xA2C0, 0x2167, 0xA2C1, 0x2168, 0xA2C2, 0x2169, 0xA2C3, 0x3021, 0xA2C4, 0x3022,
- 0xA2C5, 0x3023, 0xA2C6, 0x3024, 0xA2C7, 0x3025, 0xA2C8, 0x3026, 0xA2C9, 0x3027, 0xA2CA, 0x3028, 0xA2CB, 0x3029, 0xA2CC, 0x5341,
- 0xA2CD, 0x5344, 0xA2CE, 0x5345, 0xA2CF, 0xFF21, 0xA2D0, 0xFF22, 0xA2D1, 0xFF23, 0xA2D2, 0xFF24, 0xA2D3, 0xFF25, 0xA2D4, 0xFF26,
- 0xA2D5, 0xFF27, 0xA2D6, 0xFF28, 0xA2D7, 0xFF29, 0xA2D8, 0xFF2A, 0xA2D9, 0xFF2B, 0xA2DA, 0xFF2C, 0xA2DB, 0xFF2D, 0xA2DC, 0xFF2E,
- 0xA2DD, 0xFF2F, 0xA2DE, 0xFF30, 0xA2DF, 0xFF31, 0xA2E0, 0xFF32, 0xA2E1, 0xFF33, 0xA2E2, 0xFF34, 0xA2E3, 0xFF35, 0xA2E4, 0xFF36,
- 0xA2E5, 0xFF37, 0xA2E6, 0xFF38, 0xA2E7, 0xFF39, 0xA2E8, 0xFF3A, 0xA2E9, 0xFF41, 0xA2EA, 0xFF42, 0xA2EB, 0xFF43, 0xA2EC, 0xFF44,
- 0xA2ED, 0xFF45, 0xA2EE, 0xFF46, 0xA2EF, 0xFF47, 0xA2F0, 0xFF48, 0xA2F1, 0xFF49, 0xA2F2, 0xFF4A, 0xA2F3, 0xFF4B, 0xA2F4, 0xFF4C,
- 0xA2F5, 0xFF4D, 0xA2F6, 0xFF4E, 0xA2F7, 0xFF4F, 0xA2F8, 0xFF50, 0xA2F9, 0xFF51, 0xA2FA, 0xFF52, 0xA2FB, 0xFF53, 0xA2FC, 0xFF54,
- 0xA2FD, 0xFF55, 0xA2FE, 0xFF56, 0xA340, 0xFF57, 0xA341, 0xFF58, 0xA342, 0xFF59, 0xA343, 0xFF5A, 0xA344, 0x0391, 0xA345, 0x0392,
- 0xA346, 0x0393, 0xA347, 0x0394, 0xA348, 0x0395, 0xA349, 0x0396, 0xA34A, 0x0397, 0xA34B, 0x0398, 0xA34C, 0x0399, 0xA34D, 0x039A,
- 0xA34E, 0x039B, 0xA34F, 0x039C, 0xA350, 0x039D, 0xA351, 0x039E, 0xA352, 0x039F, 0xA353, 0x03A0, 0xA354, 0x03A1, 0xA355, 0x03A3,
- 0xA356, 0x03A4, 0xA357, 0x03A5, 0xA358, 0x03A6, 0xA359, 0x03A7, 0xA35A, 0x03A8, 0xA35B, 0x03A9, 0xA35C, 0x03B1, 0xA35D, 0x03B2,
- 0xA35E, 0x03B3, 0xA35F, 0x03B4, 0xA360, 0x03B5, 0xA361, 0x03B6, 0xA362, 0x03B7, 0xA363, 0x03B8, 0xA364, 0x03B9, 0xA365, 0x03BA,
- 0xA366, 0x03BB, 0xA367, 0x03BC, 0xA368, 0x03BD, 0xA369, 0x03BE, 0xA36A, 0x03BF, 0xA36B, 0x03C0, 0xA36C, 0x03C1, 0xA36D, 0x03C3,
- 0xA36E, 0x03C4, 0xA36F, 0x03C5, 0xA370, 0x03C6, 0xA371, 0x03C7, 0xA372, 0x03C8, 0xA373, 0x03C9, 0xA374, 0x3105, 0xA375, 0x3106,
- 0xA376, 0x3107, 0xA377, 0x3108, 0xA378, 0x3109, 0xA379, 0x310A, 0xA37A, 0x310B, 0xA37B, 0x310C, 0xA37C, 0x310D, 0xA37D, 0x310E,
- 0xA37E, 0x310F, 0xA3A1, 0x3110, 0xA3A2, 0x3111, 0xA3A3, 0x3112, 0xA3A4, 0x3113, 0xA3A5, 0x3114, 0xA3A6, 0x3115, 0xA3A7, 0x3116,
- 0xA3A8, 0x3117, 0xA3A9, 0x3118, 0xA3AA, 0x3119, 0xA3AB, 0x311A, 0xA3AC, 0x311B, 0xA3AD, 0x311C, 0xA3AE, 0x311D, 0xA3AF, 0x311E,
- 0xA3B0, 0x311F, 0xA3B1, 0x3120, 0xA3B2, 0x3121, 0xA3B3, 0x3122, 0xA3B4, 0x3123, 0xA3B5, 0x3124, 0xA3B6, 0x3125, 0xA3B7, 0x3126,
- 0xA3B8, 0x3127, 0xA3B9, 0x3128, 0xA3BA, 0x3129, 0xA3BB, 0x02D9, 0xA3BC, 0x02C9, 0xA3BD, 0x02CA, 0xA3BE, 0x02C7, 0xA3BF, 0x02CB,
- 0xA3E1, 0x20AC, 0xA440, 0x4E00, 0xA441, 0x4E59, 0xA442, 0x4E01, 0xA443, 0x4E03, 0xA444, 0x4E43, 0xA445, 0x4E5D, 0xA446, 0x4E86,
- 0xA447, 0x4E8C, 0xA448, 0x4EBA, 0xA449, 0x513F, 0xA44A, 0x5165, 0xA44B, 0x516B, 0xA44C, 0x51E0, 0xA44D, 0x5200, 0xA44E, 0x5201,
- 0xA44F, 0x529B, 0xA450, 0x5315, 0xA451, 0x5341, 0xA452, 0x535C, 0xA453, 0x53C8, 0xA454, 0x4E09, 0xA455, 0x4E0B, 0xA456, 0x4E08,
- 0xA457, 0x4E0A, 0xA458, 0x4E2B, 0xA459, 0x4E38, 0xA45A, 0x51E1, 0xA45B, 0x4E45, 0xA45C, 0x4E48, 0xA45D, 0x4E5F, 0xA45E, 0x4E5E,
- 0xA45F, 0x4E8E, 0xA460, 0x4EA1, 0xA461, 0x5140, 0xA462, 0x5203, 0xA463, 0x52FA, 0xA464, 0x5343, 0xA465, 0x53C9, 0xA466, 0x53E3,
- 0xA467, 0x571F, 0xA468, 0x58EB, 0xA469, 0x5915, 0xA46A, 0x5927, 0xA46B, 0x5973, 0xA46C, 0x5B50, 0xA46D, 0x5B51, 0xA46E, 0x5B53,
- 0xA46F, 0x5BF8, 0xA470, 0x5C0F, 0xA471, 0x5C22, 0xA472, 0x5C38, 0xA473, 0x5C71, 0xA474, 0x5DDD, 0xA475, 0x5DE5, 0xA476, 0x5DF1,
- 0xA477, 0x5DF2, 0xA478, 0x5DF3, 0xA479, 0x5DFE, 0xA47A, 0x5E72, 0xA47B, 0x5EFE, 0xA47C, 0x5F0B, 0xA47D, 0x5F13, 0xA47E, 0x624D,
- 0xA4A1, 0x4E11, 0xA4A2, 0x4E10, 0xA4A3, 0x4E0D, 0xA4A4, 0x4E2D, 0xA4A5, 0x4E30, 0xA4A6, 0x4E39, 0xA4A7, 0x4E4B, 0xA4A8, 0x5C39,
- 0xA4A9, 0x4E88, 0xA4AA, 0x4E91, 0xA4AB, 0x4E95, 0xA4AC, 0x4E92, 0xA4AD, 0x4E94, 0xA4AE, 0x4EA2, 0xA4AF, 0x4EC1, 0xA4B0, 0x4EC0,
- 0xA4B1, 0x4EC3, 0xA4B2, 0x4EC6, 0xA4B3, 0x4EC7, 0xA4B4, 0x4ECD, 0xA4B5, 0x4ECA, 0xA4B6, 0x4ECB, 0xA4B7, 0x4EC4, 0xA4B8, 0x5143,
- 0xA4B9, 0x5141, 0xA4BA, 0x5167, 0xA4BB, 0x516D, 0xA4BC, 0x516E, 0xA4BD, 0x516C, 0xA4BE, 0x5197, 0xA4BF, 0x51F6, 0xA4C0, 0x5206,
- 0xA4C1, 0x5207, 0xA4C2, 0x5208, 0xA4C3, 0x52FB, 0xA4C4, 0x52FE, 0xA4C5, 0x52FF, 0xA4C6, 0x5316, 0xA4C7, 0x5339, 0xA4C8, 0x5348,
- 0xA4C9, 0x5347, 0xA4CA, 0x5345, 0xA4CB, 0x535E, 0xA4CC, 0x5384, 0xA4CD, 0x53CB, 0xA4CE, 0x53CA, 0xA4CF, 0x53CD, 0xA4D0, 0x58EC,
- 0xA4D1, 0x5929, 0xA4D2, 0x592B, 0xA4D3, 0x592A, 0xA4D4, 0x592D, 0xA4D5, 0x5B54, 0xA4D6, 0x5C11, 0xA4D7, 0x5C24, 0xA4D8, 0x5C3A,
- 0xA4D9, 0x5C6F, 0xA4DA, 0x5DF4, 0xA4DB, 0x5E7B, 0xA4DC, 0x5EFF, 0xA4DD, 0x5F14, 0xA4DE, 0x5F15, 0xA4DF, 0x5FC3, 0xA4E0, 0x6208,
- 0xA4E1, 0x6236, 0xA4E2, 0x624B, 0xA4E3, 0x624E, 0xA4E4, 0x652F, 0xA4E5, 0x6587, 0xA4E6, 0x6597, 0xA4E7, 0x65A4, 0xA4E8, 0x65B9,
- 0xA4E9, 0x65E5, 0xA4EA, 0x66F0, 0xA4EB, 0x6708, 0xA4EC, 0x6728, 0xA4ED, 0x6B20, 0xA4EE, 0x6B62, 0xA4EF, 0x6B79, 0xA4F0, 0x6BCB,
- 0xA4F1, 0x6BD4, 0xA4F2, 0x6BDB, 0xA4F3, 0x6C0F, 0xA4F4, 0x6C34, 0xA4F5, 0x706B, 0xA4F6, 0x722A, 0xA4F7, 0x7236, 0xA4F8, 0x723B,
- 0xA4F9, 0x7247, 0xA4FA, 0x7259, 0xA4FB, 0x725B, 0xA4FC, 0x72AC, 0xA4FD, 0x738B, 0xA4FE, 0x4E19, 0xA540, 0x4E16, 0xA541, 0x4E15,
- 0xA542, 0x4E14, 0xA543, 0x4E18, 0xA544, 0x4E3B, 0xA545, 0x4E4D, 0xA546, 0x4E4F, 0xA547, 0x4E4E, 0xA548, 0x4EE5, 0xA549, 0x4ED8,
- 0xA54A, 0x4ED4, 0xA54B, 0x4ED5, 0xA54C, 0x4ED6, 0xA54D, 0x4ED7, 0xA54E, 0x4EE3, 0xA54F, 0x4EE4, 0xA550, 0x4ED9, 0xA551, 0x4EDE,
- 0xA552, 0x5145, 0xA553, 0x5144, 0xA554, 0x5189, 0xA555, 0x518A, 0xA556, 0x51AC, 0xA557, 0x51F9, 0xA558, 0x51FA, 0xA559, 0x51F8,
- 0xA55A, 0x520A, 0xA55B, 0x52A0, 0xA55C, 0x529F, 0xA55D, 0x5305, 0xA55E, 0x5306, 0xA55F, 0x5317, 0xA560, 0x531D, 0xA561, 0x4EDF,
- 0xA562, 0x534A, 0xA563, 0x5349, 0xA564, 0x5361, 0xA565, 0x5360, 0xA566, 0x536F, 0xA567, 0x536E, 0xA568, 0x53BB, 0xA569, 0x53EF,
- 0xA56A, 0x53E4, 0xA56B, 0x53F3, 0xA56C, 0x53EC, 0xA56D, 0x53EE, 0xA56E, 0x53E9, 0xA56F, 0x53E8, 0xA570, 0x53FC, 0xA571, 0x53F8,
- 0xA572, 0x53F5, 0xA573, 0x53EB, 0xA574, 0x53E6, 0xA575, 0x53EA, 0xA576, 0x53F2, 0xA577, 0x53F1, 0xA578, 0x53F0, 0xA579, 0x53E5,
- 0xA57A, 0x53ED, 0xA57B, 0x53FB, 0xA57C, 0x56DB, 0xA57D, 0x56DA, 0xA57E, 0x5916, 0xA5A1, 0x592E, 0xA5A2, 0x5931, 0xA5A3, 0x5974,
- 0xA5A4, 0x5976, 0xA5A5, 0x5B55, 0xA5A6, 0x5B83, 0xA5A7, 0x5C3C, 0xA5A8, 0x5DE8, 0xA5A9, 0x5DE7, 0xA5AA, 0x5DE6, 0xA5AB, 0x5E02,
- 0xA5AC, 0x5E03, 0xA5AD, 0x5E73, 0xA5AE, 0x5E7C, 0xA5AF, 0x5F01, 0xA5B0, 0x5F18, 0xA5B1, 0x5F17, 0xA5B2, 0x5FC5, 0xA5B3, 0x620A,
- 0xA5B4, 0x6253, 0xA5B5, 0x6254, 0xA5B6, 0x6252, 0xA5B7, 0x6251, 0xA5B8, 0x65A5, 0xA5B9, 0x65E6, 0xA5BA, 0x672E, 0xA5BB, 0x672C,
- 0xA5BC, 0x672A, 0xA5BD, 0x672B, 0xA5BE, 0x672D, 0xA5BF, 0x6B63, 0xA5C0, 0x6BCD, 0xA5C1, 0x6C11, 0xA5C2, 0x6C10, 0xA5C3, 0x6C38,
- 0xA5C4, 0x6C41, 0xA5C5, 0x6C40, 0xA5C6, 0x6C3E, 0xA5C7, 0x72AF, 0xA5C8, 0x7384, 0xA5C9, 0x7389, 0xA5CA, 0x74DC, 0xA5CB, 0x74E6,
- 0xA5CC, 0x7518, 0xA5CD, 0x751F, 0xA5CE, 0x7528, 0xA5CF, 0x7529, 0xA5D0, 0x7530, 0xA5D1, 0x7531, 0xA5D2, 0x7532, 0xA5D3, 0x7533,
- 0xA5D4, 0x758B, 0xA5D5, 0x767D, 0xA5D6, 0x76AE, 0xA5D7, 0x76BF, 0xA5D8, 0x76EE, 0xA5D9, 0x77DB, 0xA5DA, 0x77E2, 0xA5DB, 0x77F3,
- 0xA5DC, 0x793A, 0xA5DD, 0x79BE, 0xA5DE, 0x7A74, 0xA5DF, 0x7ACB, 0xA5E0, 0x4E1E, 0xA5E1, 0x4E1F, 0xA5E2, 0x4E52, 0xA5E3, 0x4E53,
- 0xA5E4, 0x4E69, 0xA5E5, 0x4E99, 0xA5E6, 0x4EA4, 0xA5E7, 0x4EA6, 0xA5E8, 0x4EA5, 0xA5E9, 0x4EFF, 0xA5EA, 0x4F09, 0xA5EB, 0x4F19,
- 0xA5EC, 0x4F0A, 0xA5ED, 0x4F15, 0xA5EE, 0x4F0D, 0xA5EF, 0x4F10, 0xA5F0, 0x4F11, 0xA5F1, 0x4F0F, 0xA5F2, 0x4EF2, 0xA5F3, 0x4EF6,
- 0xA5F4, 0x4EFB, 0xA5F5, 0x4EF0, 0xA5F6, 0x4EF3, 0xA5F7, 0x4EFD, 0xA5F8, 0x4F01, 0xA5F9, 0x4F0B, 0xA5FA, 0x5149, 0xA5FB, 0x5147,
- 0xA5FC, 0x5146, 0xA5FD, 0x5148, 0xA5FE, 0x5168, 0xA640, 0x5171, 0xA641, 0x518D, 0xA642, 0x51B0, 0xA643, 0x5217, 0xA644, 0x5211,
- 0xA645, 0x5212, 0xA646, 0x520E, 0xA647, 0x5216, 0xA648, 0x52A3, 0xA649, 0x5308, 0xA64A, 0x5321, 0xA64B, 0x5320, 0xA64C, 0x5370,
- 0xA64D, 0x5371, 0xA64E, 0x5409, 0xA64F, 0x540F, 0xA650, 0x540C, 0xA651, 0x540A, 0xA652, 0x5410, 0xA653, 0x5401, 0xA654, 0x540B,
- 0xA655, 0x5404, 0xA656, 0x5411, 0xA657, 0x540D, 0xA658, 0x5408, 0xA659, 0x5403, 0xA65A, 0x540E, 0xA65B, 0x5406, 0xA65C, 0x5412,
- 0xA65D, 0x56E0, 0xA65E, 0x56DE, 0xA65F, 0x56DD, 0xA660, 0x5733, 0xA661, 0x5730, 0xA662, 0x5728, 0xA663, 0x572D, 0xA664, 0x572C,
- 0xA665, 0x572F, 0xA666, 0x5729, 0xA667, 0x5919, 0xA668, 0x591A, 0xA669, 0x5937, 0xA66A, 0x5938, 0xA66B, 0x5984, 0xA66C, 0x5978,
- 0xA66D, 0x5983, 0xA66E, 0x597D, 0xA66F, 0x5979, 0xA670, 0x5982, 0xA671, 0x5981, 0xA672, 0x5B57, 0xA673, 0x5B58, 0xA674, 0x5B87,
- 0xA675, 0x5B88, 0xA676, 0x5B85, 0xA677, 0x5B89, 0xA678, 0x5BFA, 0xA679, 0x5C16, 0xA67A, 0x5C79, 0xA67B, 0x5DDE, 0xA67C, 0x5E06,
- 0xA67D, 0x5E76, 0xA67E, 0x5E74, 0xA6A1, 0x5F0F, 0xA6A2, 0x5F1B, 0xA6A3, 0x5FD9, 0xA6A4, 0x5FD6, 0xA6A5, 0x620E, 0xA6A6, 0x620C,
- 0xA6A7, 0x620D, 0xA6A8, 0x6210, 0xA6A9, 0x6263, 0xA6AA, 0x625B, 0xA6AB, 0x6258, 0xA6AC, 0x6536, 0xA6AD, 0x65E9, 0xA6AE, 0x65E8,
- 0xA6AF, 0x65EC, 0xA6B0, 0x65ED, 0xA6B1, 0x66F2, 0xA6B2, 0x66F3, 0xA6B3, 0x6709, 0xA6B4, 0x673D, 0xA6B5, 0x6734, 0xA6B6, 0x6731,
- 0xA6B7, 0x6735, 0xA6B8, 0x6B21, 0xA6B9, 0x6B64, 0xA6BA, 0x6B7B, 0xA6BB, 0x6C16, 0xA6BC, 0x6C5D, 0xA6BD, 0x6C57, 0xA6BE, 0x6C59,
- 0xA6BF, 0x6C5F, 0xA6C0, 0x6C60, 0xA6C1, 0x6C50, 0xA6C2, 0x6C55, 0xA6C3, 0x6C61, 0xA6C4, 0x6C5B, 0xA6C5, 0x6C4D, 0xA6C6, 0x6C4E,
- 0xA6C7, 0x7070, 0xA6C8, 0x725F, 0xA6C9, 0x725D, 0xA6CA, 0x767E, 0xA6CB, 0x7AF9, 0xA6CC, 0x7C73, 0xA6CD, 0x7CF8, 0xA6CE, 0x7F36,
- 0xA6CF, 0x7F8A, 0xA6D0, 0x7FBD, 0xA6D1, 0x8001, 0xA6D2, 0x8003, 0xA6D3, 0x800C, 0xA6D4, 0x8012, 0xA6D5, 0x8033, 0xA6D6, 0x807F,
- 0xA6D7, 0x8089, 0xA6D8, 0x808B, 0xA6D9, 0x808C, 0xA6DA, 0x81E3, 0xA6DB, 0x81EA, 0xA6DC, 0x81F3, 0xA6DD, 0x81FC, 0xA6DE, 0x820C,
- 0xA6DF, 0x821B, 0xA6E0, 0x821F, 0xA6E1, 0x826E, 0xA6E2, 0x8272, 0xA6E3, 0x827E, 0xA6E4, 0x866B, 0xA6E5, 0x8840, 0xA6E6, 0x884C,
- 0xA6E7, 0x8863, 0xA6E8, 0x897F, 0xA6E9, 0x9621, 0xA6EA, 0x4E32, 0xA6EB, 0x4EA8, 0xA6EC, 0x4F4D, 0xA6ED, 0x4F4F, 0xA6EE, 0x4F47,
- 0xA6EF, 0x4F57, 0xA6F0, 0x4F5E, 0xA6F1, 0x4F34, 0xA6F2, 0x4F5B, 0xA6F3, 0x4F55, 0xA6F4, 0x4F30, 0xA6F5, 0x4F50, 0xA6F6, 0x4F51,
- 0xA6F7, 0x4F3D, 0xA6F8, 0x4F3A, 0xA6F9, 0x4F38, 0xA6FA, 0x4F43, 0xA6FB, 0x4F54, 0xA6FC, 0x4F3C, 0xA6FD, 0x4F46, 0xA6FE, 0x4F63,
- 0xA740, 0x4F5C, 0xA741, 0x4F60, 0xA742, 0x4F2F, 0xA743, 0x4F4E, 0xA744, 0x4F36, 0xA745, 0x4F59, 0xA746, 0x4F5D, 0xA747, 0x4F48,
- 0xA748, 0x4F5A, 0xA749, 0x514C, 0xA74A, 0x514B, 0xA74B, 0x514D, 0xA74C, 0x5175, 0xA74D, 0x51B6, 0xA74E, 0x51B7, 0xA74F, 0x5225,
- 0xA750, 0x5224, 0xA751, 0x5229, 0xA752, 0x522A, 0xA753, 0x5228, 0xA754, 0x52AB, 0xA755, 0x52A9, 0xA756, 0x52AA, 0xA757, 0x52AC,
- 0xA758, 0x5323, 0xA759, 0x5373, 0xA75A, 0x5375, 0xA75B, 0x541D, 0xA75C, 0x542D, 0xA75D, 0x541E, 0xA75E, 0x543E, 0xA75F, 0x5426,
- 0xA760, 0x544E, 0xA761, 0x5427, 0xA762, 0x5446, 0xA763, 0x5443, 0xA764, 0x5433, 0xA765, 0x5448, 0xA766, 0x5442, 0xA767, 0x541B,
- 0xA768, 0x5429, 0xA769, 0x544A, 0xA76A, 0x5439, 0xA76B, 0x543B, 0xA76C, 0x5438, 0xA76D, 0x542E, 0xA76E, 0x5435, 0xA76F, 0x5436,
- 0xA770, 0x5420, 0xA771, 0x543C, 0xA772, 0x5440, 0xA773, 0x5431, 0xA774, 0x542B, 0xA775, 0x541F, 0xA776, 0x542C, 0xA777, 0x56EA,
- 0xA778, 0x56F0, 0xA779, 0x56E4, 0xA77A, 0x56EB, 0xA77B, 0x574A, 0xA77C, 0x5751, 0xA77D, 0x5740, 0xA77E, 0x574D, 0xA7A1, 0x5747,
- 0xA7A2, 0x574E, 0xA7A3, 0x573E, 0xA7A4, 0x5750, 0xA7A5, 0x574F, 0xA7A6, 0x573B, 0xA7A7, 0x58EF, 0xA7A8, 0x593E, 0xA7A9, 0x599D,
- 0xA7AA, 0x5992, 0xA7AB, 0x59A8, 0xA7AC, 0x599E, 0xA7AD, 0x59A3, 0xA7AE, 0x5999, 0xA7AF, 0x5996, 0xA7B0, 0x598D, 0xA7B1, 0x59A4,
- 0xA7B2, 0x5993, 0xA7B3, 0x598A, 0xA7B4, 0x59A5, 0xA7B5, 0x5B5D, 0xA7B6, 0x5B5C, 0xA7B7, 0x5B5A, 0xA7B8, 0x5B5B, 0xA7B9, 0x5B8C,
- 0xA7BA, 0x5B8B, 0xA7BB, 0x5B8F, 0xA7BC, 0x5C2C, 0xA7BD, 0x5C40, 0xA7BE, 0x5C41, 0xA7BF, 0x5C3F, 0xA7C0, 0x5C3E, 0xA7C1, 0x5C90,
- 0xA7C2, 0x5C91, 0xA7C3, 0x5C94, 0xA7C4, 0x5C8C, 0xA7C5, 0x5DEB, 0xA7C6, 0x5E0C, 0xA7C7, 0x5E8F, 0xA7C8, 0x5E87, 0xA7C9, 0x5E8A,
- 0xA7CA, 0x5EF7, 0xA7CB, 0x5F04, 0xA7CC, 0x5F1F, 0xA7CD, 0x5F64, 0xA7CE, 0x5F62, 0xA7CF, 0x5F77, 0xA7D0, 0x5F79, 0xA7D1, 0x5FD8,
- 0xA7D2, 0x5FCC, 0xA7D3, 0x5FD7, 0xA7D4, 0x5FCD, 0xA7D5, 0x5FF1, 0xA7D6, 0x5FEB, 0xA7D7, 0x5FF8, 0xA7D8, 0x5FEA, 0xA7D9, 0x6212,
- 0xA7DA, 0x6211, 0xA7DB, 0x6284, 0xA7DC, 0x6297, 0xA7DD, 0x6296, 0xA7DE, 0x6280, 0xA7DF, 0x6276, 0xA7E0, 0x6289, 0xA7E1, 0x626D,
- 0xA7E2, 0x628A, 0xA7E3, 0x627C, 0xA7E4, 0x627E, 0xA7E5, 0x6279, 0xA7E6, 0x6273, 0xA7E7, 0x6292, 0xA7E8, 0x626F, 0xA7E9, 0x6298,
- 0xA7EA, 0x626E, 0xA7EB, 0x6295, 0xA7EC, 0x6293, 0xA7ED, 0x6291, 0xA7EE, 0x6286, 0xA7EF, 0x6539, 0xA7F0, 0x653B, 0xA7F1, 0x6538,
- 0xA7F2, 0x65F1, 0xA7F3, 0x66F4, 0xA7F4, 0x675F, 0xA7F5, 0x674E, 0xA7F6, 0x674F, 0xA7F7, 0x6750, 0xA7F8, 0x6751, 0xA7F9, 0x675C,
- 0xA7FA, 0x6756, 0xA7FB, 0x675E, 0xA7FC, 0x6749, 0xA7FD, 0x6746, 0xA7FE, 0x6760, 0xA840, 0x6753, 0xA841, 0x6757, 0xA842, 0x6B65,
- 0xA843, 0x6BCF, 0xA844, 0x6C42, 0xA845, 0x6C5E, 0xA846, 0x6C99, 0xA847, 0x6C81, 0xA848, 0x6C88, 0xA849, 0x6C89, 0xA84A, 0x6C85,
- 0xA84B, 0x6C9B, 0xA84C, 0x6C6A, 0xA84D, 0x6C7A, 0xA84E, 0x6C90, 0xA84F, 0x6C70, 0xA850, 0x6C8C, 0xA851, 0x6C68, 0xA852, 0x6C96,
- 0xA853, 0x6C92, 0xA854, 0x6C7D, 0xA855, 0x6C83, 0xA856, 0x6C72, 0xA857, 0x6C7E, 0xA858, 0x6C74, 0xA859, 0x6C86, 0xA85A, 0x6C76,
- 0xA85B, 0x6C8D, 0xA85C, 0x6C94, 0xA85D, 0x6C98, 0xA85E, 0x6C82, 0xA85F, 0x7076, 0xA860, 0x707C, 0xA861, 0x707D, 0xA862, 0x7078,
- 0xA863, 0x7262, 0xA864, 0x7261, 0xA865, 0x7260, 0xA866, 0x72C4, 0xA867, 0x72C2, 0xA868, 0x7396, 0xA869, 0x752C, 0xA86A, 0x752B,
- 0xA86B, 0x7537, 0xA86C, 0x7538, 0xA86D, 0x7682, 0xA86E, 0x76EF, 0xA86F, 0x77E3, 0xA870, 0x79C1, 0xA871, 0x79C0, 0xA872, 0x79BF,
- 0xA873, 0x7A76, 0xA874, 0x7CFB, 0xA875, 0x7F55, 0xA876, 0x8096, 0xA877, 0x8093, 0xA878, 0x809D, 0xA879, 0x8098, 0xA87A, 0x809B,
- 0xA87B, 0x809A, 0xA87C, 0x80B2, 0xA87D, 0x826F, 0xA87E, 0x8292, 0xA8A1, 0x828B, 0xA8A2, 0x828D, 0xA8A3, 0x898B, 0xA8A4, 0x89D2,
- 0xA8A5, 0x8A00, 0xA8A6, 0x8C37, 0xA8A7, 0x8C46, 0xA8A8, 0x8C55, 0xA8A9, 0x8C9D, 0xA8AA, 0x8D64, 0xA8AB, 0x8D70, 0xA8AC, 0x8DB3,
- 0xA8AD, 0x8EAB, 0xA8AE, 0x8ECA, 0xA8AF, 0x8F9B, 0xA8B0, 0x8FB0, 0xA8B1, 0x8FC2, 0xA8B2, 0x8FC6, 0xA8B3, 0x8FC5, 0xA8B4, 0x8FC4,
- 0xA8B5, 0x5DE1, 0xA8B6, 0x9091, 0xA8B7, 0x90A2, 0xA8B8, 0x90AA, 0xA8B9, 0x90A6, 0xA8BA, 0x90A3, 0xA8BB, 0x9149, 0xA8BC, 0x91C6,
- 0xA8BD, 0x91CC, 0xA8BE, 0x9632, 0xA8BF, 0x962E, 0xA8C0, 0x9631, 0xA8C1, 0x962A, 0xA8C2, 0x962C, 0xA8C3, 0x4E26, 0xA8C4, 0x4E56,
- 0xA8C5, 0x4E73, 0xA8C6, 0x4E8B, 0xA8C7, 0x4E9B, 0xA8C8, 0x4E9E, 0xA8C9, 0x4EAB, 0xA8CA, 0x4EAC, 0xA8CB, 0x4F6F, 0xA8CC, 0x4F9D,
- 0xA8CD, 0x4F8D, 0xA8CE, 0x4F73, 0xA8CF, 0x4F7F, 0xA8D0, 0x4F6C, 0xA8D1, 0x4F9B, 0xA8D2, 0x4F8B, 0xA8D3, 0x4F86, 0xA8D4, 0x4F83,
- 0xA8D5, 0x4F70, 0xA8D6, 0x4F75, 0xA8D7, 0x4F88, 0xA8D8, 0x4F69, 0xA8D9, 0x4F7B, 0xA8DA, 0x4F96, 0xA8DB, 0x4F7E, 0xA8DC, 0x4F8F,
- 0xA8DD, 0x4F91, 0xA8DE, 0x4F7A, 0xA8DF, 0x5154, 0xA8E0, 0x5152, 0xA8E1, 0x5155, 0xA8E2, 0x5169, 0xA8E3, 0x5177, 0xA8E4, 0x5176,
- 0xA8E5, 0x5178, 0xA8E6, 0x51BD, 0xA8E7, 0x51FD, 0xA8E8, 0x523B, 0xA8E9, 0x5238, 0xA8EA, 0x5237, 0xA8EB, 0x523A, 0xA8EC, 0x5230,
- 0xA8ED, 0x522E, 0xA8EE, 0x5236, 0xA8EF, 0x5241, 0xA8F0, 0x52BE, 0xA8F1, 0x52BB, 0xA8F2, 0x5352, 0xA8F3, 0x5354, 0xA8F4, 0x5353,
- 0xA8F5, 0x5351, 0xA8F6, 0x5366, 0xA8F7, 0x5377, 0xA8F8, 0x5378, 0xA8F9, 0x5379, 0xA8FA, 0x53D6, 0xA8FB, 0x53D4, 0xA8FC, 0x53D7,
- 0xA8FD, 0x5473, 0xA8FE, 0x5475, 0xA940, 0x5496, 0xA941, 0x5478, 0xA942, 0x5495, 0xA943, 0x5480, 0xA944, 0x547B, 0xA945, 0x5477,
- 0xA946, 0x5484, 0xA947, 0x5492, 0xA948, 0x5486, 0xA949, 0x547C, 0xA94A, 0x5490, 0xA94B, 0x5471, 0xA94C, 0x5476, 0xA94D, 0x548C,
- 0xA94E, 0x549A, 0xA94F, 0x5462, 0xA950, 0x5468, 0xA951, 0x548B, 0xA952, 0x547D, 0xA953, 0x548E, 0xA954, 0x56FA, 0xA955, 0x5783,
- 0xA956, 0x5777, 0xA957, 0x576A, 0xA958, 0x5769, 0xA959, 0x5761, 0xA95A, 0x5766, 0xA95B, 0x5764, 0xA95C, 0x577C, 0xA95D, 0x591C,
- 0xA95E, 0x5949, 0xA95F, 0x5947, 0xA960, 0x5948, 0xA961, 0x5944, 0xA962, 0x5954, 0xA963, 0x59BE, 0xA964, 0x59BB, 0xA965, 0x59D4,
- 0xA966, 0x59B9, 0xA967, 0x59AE, 0xA968, 0x59D1, 0xA969, 0x59C6, 0xA96A, 0x59D0, 0xA96B, 0x59CD, 0xA96C, 0x59CB, 0xA96D, 0x59D3,
- 0xA96E, 0x59CA, 0xA96F, 0x59AF, 0xA970, 0x59B3, 0xA971, 0x59D2, 0xA972, 0x59C5, 0xA973, 0x5B5F, 0xA974, 0x5B64, 0xA975, 0x5B63,
- 0xA976, 0x5B97, 0xA977, 0x5B9A, 0xA978, 0x5B98, 0xA979, 0x5B9C, 0xA97A, 0x5B99, 0xA97B, 0x5B9B, 0xA97C, 0x5C1A, 0xA97D, 0x5C48,
- 0xA97E, 0x5C45, 0xA9A1, 0x5C46, 0xA9A2, 0x5CB7, 0xA9A3, 0x5CA1, 0xA9A4, 0x5CB8, 0xA9A5, 0x5CA9, 0xA9A6, 0x5CAB, 0xA9A7, 0x5CB1,
- 0xA9A8, 0x5CB3, 0xA9A9, 0x5E18, 0xA9AA, 0x5E1A, 0xA9AB, 0x5E16, 0xA9AC, 0x5E15, 0xA9AD, 0x5E1B, 0xA9AE, 0x5E11, 0xA9AF, 0x5E78,
- 0xA9B0, 0x5E9A, 0xA9B1, 0x5E97, 0xA9B2, 0x5E9C, 0xA9B3, 0x5E95, 0xA9B4, 0x5E96, 0xA9B5, 0x5EF6, 0xA9B6, 0x5F26, 0xA9B7, 0x5F27,
- 0xA9B8, 0x5F29, 0xA9B9, 0x5F80, 0xA9BA, 0x5F81, 0xA9BB, 0x5F7F, 0xA9BC, 0x5F7C, 0xA9BD, 0x5FDD, 0xA9BE, 0x5FE0, 0xA9BF, 0x5FFD,
- 0xA9C0, 0x5FF5, 0xA9C1, 0x5FFF, 0xA9C2, 0x600F, 0xA9C3, 0x6014, 0xA9C4, 0x602F, 0xA9C5, 0x6035, 0xA9C6, 0x6016, 0xA9C7, 0x602A,
- 0xA9C8, 0x6015, 0xA9C9, 0x6021, 0xA9CA, 0x6027, 0xA9CB, 0x6029, 0xA9CC, 0x602B, 0xA9CD, 0x601B, 0xA9CE, 0x6216, 0xA9CF, 0x6215,
- 0xA9D0, 0x623F, 0xA9D1, 0x623E, 0xA9D2, 0x6240, 0xA9D3, 0x627F, 0xA9D4, 0x62C9, 0xA9D5, 0x62CC, 0xA9D6, 0x62C4, 0xA9D7, 0x62BF,
- 0xA9D8, 0x62C2, 0xA9D9, 0x62B9, 0xA9DA, 0x62D2, 0xA9DB, 0x62DB, 0xA9DC, 0x62AB, 0xA9DD, 0x62D3, 0xA9DE, 0x62D4, 0xA9DF, 0x62CB,
- 0xA9E0, 0x62C8, 0xA9E1, 0x62A8, 0xA9E2, 0x62BD, 0xA9E3, 0x62BC, 0xA9E4, 0x62D0, 0xA9E5, 0x62D9, 0xA9E6, 0x62C7, 0xA9E7, 0x62CD,
- 0xA9E8, 0x62B5, 0xA9E9, 0x62DA, 0xA9EA, 0x62B1, 0xA9EB, 0x62D8, 0xA9EC, 0x62D6, 0xA9ED, 0x62D7, 0xA9EE, 0x62C6, 0xA9EF, 0x62AC,
- 0xA9F0, 0x62CE, 0xA9F1, 0x653E, 0xA9F2, 0x65A7, 0xA9F3, 0x65BC, 0xA9F4, 0x65FA, 0xA9F5, 0x6614, 0xA9F6, 0x6613, 0xA9F7, 0x660C,
- 0xA9F8, 0x6606, 0xA9F9, 0x6602, 0xA9FA, 0x660E, 0xA9FB, 0x6600, 0xA9FC, 0x660F, 0xA9FD, 0x6615, 0xA9FE, 0x660A, 0xAA40, 0x6607,
- 0xAA41, 0x670D, 0xAA42, 0x670B, 0xAA43, 0x676D, 0xAA44, 0x678B, 0xAA45, 0x6795, 0xAA46, 0x6771, 0xAA47, 0x679C, 0xAA48, 0x6773,
- 0xAA49, 0x6777, 0xAA4A, 0x6787, 0xAA4B, 0x679D, 0xAA4C, 0x6797, 0xAA4D, 0x676F, 0xAA4E, 0x6770, 0xAA4F, 0x677F, 0xAA50, 0x6789,
- 0xAA51, 0x677E, 0xAA52, 0x6790, 0xAA53, 0x6775, 0xAA54, 0x679A, 0xAA55, 0x6793, 0xAA56, 0x677C, 0xAA57, 0x676A, 0xAA58, 0x6772,
- 0xAA59, 0x6B23, 0xAA5A, 0x6B66, 0xAA5B, 0x6B67, 0xAA5C, 0x6B7F, 0xAA5D, 0x6C13, 0xAA5E, 0x6C1B, 0xAA5F, 0x6CE3, 0xAA60, 0x6CE8,
- 0xAA61, 0x6CF3, 0xAA62, 0x6CB1, 0xAA63, 0x6CCC, 0xAA64, 0x6CE5, 0xAA65, 0x6CB3, 0xAA66, 0x6CBD, 0xAA67, 0x6CBE, 0xAA68, 0x6CBC,
- 0xAA69, 0x6CE2, 0xAA6A, 0x6CAB, 0xAA6B, 0x6CD5, 0xAA6C, 0x6CD3, 0xAA6D, 0x6CB8, 0xAA6E, 0x6CC4, 0xAA6F, 0x6CB9, 0xAA70, 0x6CC1,
- 0xAA71, 0x6CAE, 0xAA72, 0x6CD7, 0xAA73, 0x6CC5, 0xAA74, 0x6CF1, 0xAA75, 0x6CBF, 0xAA76, 0x6CBB, 0xAA77, 0x6CE1, 0xAA78, 0x6CDB,
- 0xAA79, 0x6CCA, 0xAA7A, 0x6CAC, 0xAA7B, 0x6CEF, 0xAA7C, 0x6CDC, 0xAA7D, 0x6CD6, 0xAA7E, 0x6CE0, 0xAAA1, 0x7095, 0xAAA2, 0x708E,
- 0xAAA3, 0x7092, 0xAAA4, 0x708A, 0xAAA5, 0x7099, 0xAAA6, 0x722C, 0xAAA7, 0x722D, 0xAAA8, 0x7238, 0xAAA9, 0x7248, 0xAAAA, 0x7267,
- 0xAAAB, 0x7269, 0xAAAC, 0x72C0, 0xAAAD, 0x72CE, 0xAAAE, 0x72D9, 0xAAAF, 0x72D7, 0xAAB0, 0x72D0, 0xAAB1, 0x73A9, 0xAAB2, 0x73A8,
- 0xAAB3, 0x739F, 0xAAB4, 0x73AB, 0xAAB5, 0x73A5, 0xAAB6, 0x753D, 0xAAB7, 0x759D, 0xAAB8, 0x7599, 0xAAB9, 0x759A, 0xAABA, 0x7684,
- 0xAABB, 0x76C2, 0xAABC, 0x76F2, 0xAABD, 0x76F4, 0xAABE, 0x77E5, 0xAABF, 0x77FD, 0xAAC0, 0x793E, 0xAAC1, 0x7940, 0xAAC2, 0x7941,
- 0xAAC3, 0x79C9, 0xAAC4, 0x79C8, 0xAAC5, 0x7A7A, 0xAAC6, 0x7A79, 0xAAC7, 0x7AFA, 0xAAC8, 0x7CFE, 0xAAC9, 0x7F54, 0xAACA, 0x7F8C,
- 0xAACB, 0x7F8B, 0xAACC, 0x8005, 0xAACD, 0x80BA, 0xAACE, 0x80A5, 0xAACF, 0x80A2, 0xAAD0, 0x80B1, 0xAAD1, 0x80A1, 0xAAD2, 0x80AB,
- 0xAAD3, 0x80A9, 0xAAD4, 0x80B4, 0xAAD5, 0x80AA, 0xAAD6, 0x80AF, 0xAAD7, 0x81E5, 0xAAD8, 0x81FE, 0xAAD9, 0x820D, 0xAADA, 0x82B3,
- 0xAADB, 0x829D, 0xAADC, 0x8299, 0xAADD, 0x82AD, 0xAADE, 0x82BD, 0xAADF, 0x829F, 0xAAE0, 0x82B9, 0xAAE1, 0x82B1, 0xAAE2, 0x82AC,
- 0xAAE3, 0x82A5, 0xAAE4, 0x82AF, 0xAAE5, 0x82B8, 0xAAE6, 0x82A3, 0xAAE7, 0x82B0, 0xAAE8, 0x82BE, 0xAAE9, 0x82B7, 0xAAEA, 0x864E,
- 0xAAEB, 0x8671, 0xAAEC, 0x521D, 0xAAED, 0x8868, 0xAAEE, 0x8ECB, 0xAAEF, 0x8FCE, 0xAAF0, 0x8FD4, 0xAAF1, 0x8FD1, 0xAAF2, 0x90B5,
- 0xAAF3, 0x90B8, 0xAAF4, 0x90B1, 0xAAF5, 0x90B6, 0xAAF6, 0x91C7, 0xAAF7, 0x91D1, 0xAAF8, 0x9577, 0xAAF9, 0x9580, 0xAAFA, 0x961C,
- 0xAAFB, 0x9640, 0xAAFC, 0x963F, 0xAAFD, 0x963B, 0xAAFE, 0x9644, 0xAB40, 0x9642, 0xAB41, 0x96B9, 0xAB42, 0x96E8, 0xAB43, 0x9752,
- 0xAB44, 0x975E, 0xAB45, 0x4E9F, 0xAB46, 0x4EAD, 0xAB47, 0x4EAE, 0xAB48, 0x4FE1, 0xAB49, 0x4FB5, 0xAB4A, 0x4FAF, 0xAB4B, 0x4FBF,
- 0xAB4C, 0x4FE0, 0xAB4D, 0x4FD1, 0xAB4E, 0x4FCF, 0xAB4F, 0x4FDD, 0xAB50, 0x4FC3, 0xAB51, 0x4FB6, 0xAB52, 0x4FD8, 0xAB53, 0x4FDF,
- 0xAB54, 0x4FCA, 0xAB55, 0x4FD7, 0xAB56, 0x4FAE, 0xAB57, 0x4FD0, 0xAB58, 0x4FC4, 0xAB59, 0x4FC2, 0xAB5A, 0x4FDA, 0xAB5B, 0x4FCE,
- 0xAB5C, 0x4FDE, 0xAB5D, 0x4FB7, 0xAB5E, 0x5157, 0xAB5F, 0x5192, 0xAB60, 0x5191, 0xAB61, 0x51A0, 0xAB62, 0x524E, 0xAB63, 0x5243,
- 0xAB64, 0x524A, 0xAB65, 0x524D, 0xAB66, 0x524C, 0xAB67, 0x524B, 0xAB68, 0x5247, 0xAB69, 0x52C7, 0xAB6A, 0x52C9, 0xAB6B, 0x52C3,
- 0xAB6C, 0x52C1, 0xAB6D, 0x530D, 0xAB6E, 0x5357, 0xAB6F, 0x537B, 0xAB70, 0x539A, 0xAB71, 0x53DB, 0xAB72, 0x54AC, 0xAB73, 0x54C0,
- 0xAB74, 0x54A8, 0xAB75, 0x54CE, 0xAB76, 0x54C9, 0xAB77, 0x54B8, 0xAB78, 0x54A6, 0xAB79, 0x54B3, 0xAB7A, 0x54C7, 0xAB7B, 0x54C2,
- 0xAB7C, 0x54BD, 0xAB7D, 0x54AA, 0xAB7E, 0x54C1, 0xABA1, 0x54C4, 0xABA2, 0x54C8, 0xABA3, 0x54AF, 0xABA4, 0x54AB, 0xABA5, 0x54B1,
- 0xABA6, 0x54BB, 0xABA7, 0x54A9, 0xABA8, 0x54A7, 0xABA9, 0x54BF, 0xABAA, 0x56FF, 0xABAB, 0x5782, 0xABAC, 0x578B, 0xABAD, 0x57A0,
- 0xABAE, 0x57A3, 0xABAF, 0x57A2, 0xABB0, 0x57CE, 0xABB1, 0x57AE, 0xABB2, 0x5793, 0xABB3, 0x5955, 0xABB4, 0x5951, 0xABB5, 0x594F,
- 0xABB6, 0x594E, 0xABB7, 0x5950, 0xABB8, 0x59DC, 0xABB9, 0x59D8, 0xABBA, 0x59FF, 0xABBB, 0x59E3, 0xABBC, 0x59E8, 0xABBD, 0x5A03,
- 0xABBE, 0x59E5, 0xABBF, 0x59EA, 0xABC0, 0x59DA, 0xABC1, 0x59E6, 0xABC2, 0x5A01, 0xABC3, 0x59FB, 0xABC4, 0x5B69, 0xABC5, 0x5BA3,
- 0xABC6, 0x5BA6, 0xABC7, 0x5BA4, 0xABC8, 0x5BA2, 0xABC9, 0x5BA5, 0xABCA, 0x5C01, 0xABCB, 0x5C4E, 0xABCC, 0x5C4F, 0xABCD, 0x5C4D,
- 0xABCE, 0x5C4B, 0xABCF, 0x5CD9, 0xABD0, 0x5CD2, 0xABD1, 0x5DF7, 0xABD2, 0x5E1D, 0xABD3, 0x5E25, 0xABD4, 0x5E1F, 0xABD5, 0x5E7D,
- 0xABD6, 0x5EA0, 0xABD7, 0x5EA6, 0xABD8, 0x5EFA, 0xABD9, 0x5F08, 0xABDA, 0x5F2D, 0xABDB, 0x5F65, 0xABDC, 0x5F88, 0xABDD, 0x5F85,
- 0xABDE, 0x5F8A, 0xABDF, 0x5F8B, 0xABE0, 0x5F87, 0xABE1, 0x5F8C, 0xABE2, 0x5F89, 0xABE3, 0x6012, 0xABE4, 0x601D, 0xABE5, 0x6020,
- 0xABE6, 0x6025, 0xABE7, 0x600E, 0xABE8, 0x6028, 0xABE9, 0x604D, 0xABEA, 0x6070, 0xABEB, 0x6068, 0xABEC, 0x6062, 0xABED, 0x6046,
- 0xABEE, 0x6043, 0xABEF, 0x606C, 0xABF0, 0x606B, 0xABF1, 0x606A, 0xABF2, 0x6064, 0xABF3, 0x6241, 0xABF4, 0x62DC, 0xABF5, 0x6316,
- 0xABF6, 0x6309, 0xABF7, 0x62FC, 0xABF8, 0x62ED, 0xABF9, 0x6301, 0xABFA, 0x62EE, 0xABFB, 0x62FD, 0xABFC, 0x6307, 0xABFD, 0x62F1,
- 0xABFE, 0x62F7, 0xAC40, 0x62EF, 0xAC41, 0x62EC, 0xAC42, 0x62FE, 0xAC43, 0x62F4, 0xAC44, 0x6311, 0xAC45, 0x6302, 0xAC46, 0x653F,
- 0xAC47, 0x6545, 0xAC48, 0x65AB, 0xAC49, 0x65BD, 0xAC4A, 0x65E2, 0xAC4B, 0x6625, 0xAC4C, 0x662D, 0xAC4D, 0x6620, 0xAC4E, 0x6627,
- 0xAC4F, 0x662F, 0xAC50, 0x661F, 0xAC51, 0x6628, 0xAC52, 0x6631, 0xAC53, 0x6624, 0xAC54, 0x66F7, 0xAC55, 0x67FF, 0xAC56, 0x67D3,
- 0xAC57, 0x67F1, 0xAC58, 0x67D4, 0xAC59, 0x67D0, 0xAC5A, 0x67EC, 0xAC5B, 0x67B6, 0xAC5C, 0x67AF, 0xAC5D, 0x67F5, 0xAC5E, 0x67E9,
- 0xAC5F, 0x67EF, 0xAC60, 0x67C4, 0xAC61, 0x67D1, 0xAC62, 0x67B4, 0xAC63, 0x67DA, 0xAC64, 0x67E5, 0xAC65, 0x67B8, 0xAC66, 0x67CF,
- 0xAC67, 0x67DE, 0xAC68, 0x67F3, 0xAC69, 0x67B0, 0xAC6A, 0x67D9, 0xAC6B, 0x67E2, 0xAC6C, 0x67DD, 0xAC6D, 0x67D2, 0xAC6E, 0x6B6A,
- 0xAC6F, 0x6B83, 0xAC70, 0x6B86, 0xAC71, 0x6BB5, 0xAC72, 0x6BD2, 0xAC73, 0x6BD7, 0xAC74, 0x6C1F, 0xAC75, 0x6CC9, 0xAC76, 0x6D0B,
- 0xAC77, 0x6D32, 0xAC78, 0x6D2A, 0xAC79, 0x6D41, 0xAC7A, 0x6D25, 0xAC7B, 0x6D0C, 0xAC7C, 0x6D31, 0xAC7D, 0x6D1E, 0xAC7E, 0x6D17,
- 0xACA1, 0x6D3B, 0xACA2, 0x6D3D, 0xACA3, 0x6D3E, 0xACA4, 0x6D36, 0xACA5, 0x6D1B, 0xACA6, 0x6CF5, 0xACA7, 0x6D39, 0xACA8, 0x6D27,
- 0xACA9, 0x6D38, 0xACAA, 0x6D29, 0xACAB, 0x6D2E, 0xACAC, 0x6D35, 0xACAD, 0x6D0E, 0xACAE, 0x6D2B, 0xACAF, 0x70AB, 0xACB0, 0x70BA,
- 0xACB1, 0x70B3, 0xACB2, 0x70AC, 0xACB3, 0x70AF, 0xACB4, 0x70AD, 0xACB5, 0x70B8, 0xACB6, 0x70AE, 0xACB7, 0x70A4, 0xACB8, 0x7230,
- 0xACB9, 0x7272, 0xACBA, 0x726F, 0xACBB, 0x7274, 0xACBC, 0x72E9, 0xACBD, 0x72E0, 0xACBE, 0x72E1, 0xACBF, 0x73B7, 0xACC0, 0x73CA,
- 0xACC1, 0x73BB, 0xACC2, 0x73B2, 0xACC3, 0x73CD, 0xACC4, 0x73C0, 0xACC5, 0x73B3, 0xACC6, 0x751A, 0xACC7, 0x752D, 0xACC8, 0x754F,
- 0xACC9, 0x754C, 0xACCA, 0x754E, 0xACCB, 0x754B, 0xACCC, 0x75AB, 0xACCD, 0x75A4, 0xACCE, 0x75A5, 0xACCF, 0x75A2, 0xACD0, 0x75A3,
- 0xACD1, 0x7678, 0xACD2, 0x7686, 0xACD3, 0x7687, 0xACD4, 0x7688, 0xACD5, 0x76C8, 0xACD6, 0x76C6, 0xACD7, 0x76C3, 0xACD8, 0x76C5,
- 0xACD9, 0x7701, 0xACDA, 0x76F9, 0xACDB, 0x76F8, 0xACDC, 0x7709, 0xACDD, 0x770B, 0xACDE, 0x76FE, 0xACDF, 0x76FC, 0xACE0, 0x7707,
- 0xACE1, 0x77DC, 0xACE2, 0x7802, 0xACE3, 0x7814, 0xACE4, 0x780C, 0xACE5, 0x780D, 0xACE6, 0x7946, 0xACE7, 0x7949, 0xACE8, 0x7948,
- 0xACE9, 0x7947, 0xACEA, 0x79B9, 0xACEB, 0x79BA, 0xACEC, 0x79D1, 0xACED, 0x79D2, 0xACEE, 0x79CB, 0xACEF, 0x7A7F, 0xACF0, 0x7A81,
- 0xACF1, 0x7AFF, 0xACF2, 0x7AFD, 0xACF3, 0x7C7D, 0xACF4, 0x7D02, 0xACF5, 0x7D05, 0xACF6, 0x7D00, 0xACF7, 0x7D09, 0xACF8, 0x7D07,
- 0xACF9, 0x7D04, 0xACFA, 0x7D06, 0xACFB, 0x7F38, 0xACFC, 0x7F8E, 0xACFD, 0x7FBF, 0xACFE, 0x8004, 0xAD40, 0x8010, 0xAD41, 0x800D,
- 0xAD42, 0x8011, 0xAD43, 0x8036, 0xAD44, 0x80D6, 0xAD45, 0x80E5, 0xAD46, 0x80DA, 0xAD47, 0x80C3, 0xAD48, 0x80C4, 0xAD49, 0x80CC,
- 0xAD4A, 0x80E1, 0xAD4B, 0x80DB, 0xAD4C, 0x80CE, 0xAD4D, 0x80DE, 0xAD4E, 0x80E4, 0xAD4F, 0x80DD, 0xAD50, 0x81F4, 0xAD51, 0x8222,
- 0xAD52, 0x82E7, 0xAD53, 0x8303, 0xAD54, 0x8305, 0xAD55, 0x82E3, 0xAD56, 0x82DB, 0xAD57, 0x82E6, 0xAD58, 0x8304, 0xAD59, 0x82E5,
- 0xAD5A, 0x8302, 0xAD5B, 0x8309, 0xAD5C, 0x82D2, 0xAD5D, 0x82D7, 0xAD5E, 0x82F1, 0xAD5F, 0x8301, 0xAD60, 0x82DC, 0xAD61, 0x82D4,
- 0xAD62, 0x82D1, 0xAD63, 0x82DE, 0xAD64, 0x82D3, 0xAD65, 0x82DF, 0xAD66, 0x82EF, 0xAD67, 0x8306, 0xAD68, 0x8650, 0xAD69, 0x8679,
- 0xAD6A, 0x867B, 0xAD6B, 0x867A, 0xAD6C, 0x884D, 0xAD6D, 0x886B, 0xAD6E, 0x8981, 0xAD6F, 0x89D4, 0xAD70, 0x8A08, 0xAD71, 0x8A02,
- 0xAD72, 0x8A03, 0xAD73, 0x8C9E, 0xAD74, 0x8CA0, 0xAD75, 0x8D74, 0xAD76, 0x8D73, 0xAD77, 0x8DB4, 0xAD78, 0x8ECD, 0xAD79, 0x8ECC,
- 0xAD7A, 0x8FF0, 0xAD7B, 0x8FE6, 0xAD7C, 0x8FE2, 0xAD7D, 0x8FEA, 0xAD7E, 0x8FE5, 0xADA1, 0x8FED, 0xADA2, 0x8FEB, 0xADA3, 0x8FE4,
- 0xADA4, 0x8FE8, 0xADA5, 0x90CA, 0xADA6, 0x90CE, 0xADA7, 0x90C1, 0xADA8, 0x90C3, 0xADA9, 0x914B, 0xADAA, 0x914A, 0xADAB, 0x91CD,
- 0xADAC, 0x9582, 0xADAD, 0x9650, 0xADAE, 0x964B, 0xADAF, 0x964C, 0xADB0, 0x964D, 0xADB1, 0x9762, 0xADB2, 0x9769, 0xADB3, 0x97CB,
- 0xADB4, 0x97ED, 0xADB5, 0x97F3, 0xADB6, 0x9801, 0xADB7, 0x98A8, 0xADB8, 0x98DB, 0xADB9, 0x98DF, 0xADBA, 0x9996, 0xADBB, 0x9999,
- 0xADBC, 0x4E58, 0xADBD, 0x4EB3, 0xADBE, 0x500C, 0xADBF, 0x500D, 0xADC0, 0x5023, 0xADC1, 0x4FEF, 0xADC2, 0x5026, 0xADC3, 0x5025,
- 0xADC4, 0x4FF8, 0xADC5, 0x5029, 0xADC6, 0x5016, 0xADC7, 0x5006, 0xADC8, 0x503C, 0xADC9, 0x501F, 0xADCA, 0x501A, 0xADCB, 0x5012,
- 0xADCC, 0x5011, 0xADCD, 0x4FFA, 0xADCE, 0x5000, 0xADCF, 0x5014, 0xADD0, 0x5028, 0xADD1, 0x4FF1, 0xADD2, 0x5021, 0xADD3, 0x500B,
- 0xADD4, 0x5019, 0xADD5, 0x5018, 0xADD6, 0x4FF3, 0xADD7, 0x4FEE, 0xADD8, 0x502D, 0xADD9, 0x502A, 0xADDA, 0x4FFE, 0xADDB, 0x502B,
- 0xADDC, 0x5009, 0xADDD, 0x517C, 0xADDE, 0x51A4, 0xADDF, 0x51A5, 0xADE0, 0x51A2, 0xADE1, 0x51CD, 0xADE2, 0x51CC, 0xADE3, 0x51C6,
- 0xADE4, 0x51CB, 0xADE5, 0x5256, 0xADE6, 0x525C, 0xADE7, 0x5254, 0xADE8, 0x525B, 0xADE9, 0x525D, 0xADEA, 0x532A, 0xADEB, 0x537F,
- 0xADEC, 0x539F, 0xADED, 0x539D, 0xADEE, 0x53DF, 0xADEF, 0x54E8, 0xADF0, 0x5510, 0xADF1, 0x5501, 0xADF2, 0x5537, 0xADF3, 0x54FC,
- 0xADF4, 0x54E5, 0xADF5, 0x54F2, 0xADF6, 0x5506, 0xADF7, 0x54FA, 0xADF8, 0x5514, 0xADF9, 0x54E9, 0xADFA, 0x54ED, 0xADFB, 0x54E1,
- 0xADFC, 0x5509, 0xADFD, 0x54EE, 0xADFE, 0x54EA, 0xAE40, 0x54E6, 0xAE41, 0x5527, 0xAE42, 0x5507, 0xAE43, 0x54FD, 0xAE44, 0x550F,
- 0xAE45, 0x5703, 0xAE46, 0x5704, 0xAE47, 0x57C2, 0xAE48, 0x57D4, 0xAE49, 0x57CB, 0xAE4A, 0x57C3, 0xAE4B, 0x5809, 0xAE4C, 0x590F,
- 0xAE4D, 0x5957, 0xAE4E, 0x5958, 0xAE4F, 0x595A, 0xAE50, 0x5A11, 0xAE51, 0x5A18, 0xAE52, 0x5A1C, 0xAE53, 0x5A1F, 0xAE54, 0x5A1B,
- 0xAE55, 0x5A13, 0xAE56, 0x59EC, 0xAE57, 0x5A20, 0xAE58, 0x5A23, 0xAE59, 0x5A29, 0xAE5A, 0x5A25, 0xAE5B, 0x5A0C, 0xAE5C, 0x5A09,
- 0xAE5D, 0x5B6B, 0xAE5E, 0x5C58, 0xAE5F, 0x5BB0, 0xAE60, 0x5BB3, 0xAE61, 0x5BB6, 0xAE62, 0x5BB4, 0xAE63, 0x5BAE, 0xAE64, 0x5BB5,
- 0xAE65, 0x5BB9, 0xAE66, 0x5BB8, 0xAE67, 0x5C04, 0xAE68, 0x5C51, 0xAE69, 0x5C55, 0xAE6A, 0x5C50, 0xAE6B, 0x5CED, 0xAE6C, 0x5CFD,
- 0xAE6D, 0x5CFB, 0xAE6E, 0x5CEA, 0xAE6F, 0x5CE8, 0xAE70, 0x5CF0, 0xAE71, 0x5CF6, 0xAE72, 0x5D01, 0xAE73, 0x5CF4, 0xAE74, 0x5DEE,
- 0xAE75, 0x5E2D, 0xAE76, 0x5E2B, 0xAE77, 0x5EAB, 0xAE78, 0x5EAD, 0xAE79, 0x5EA7, 0xAE7A, 0x5F31, 0xAE7B, 0x5F92, 0xAE7C, 0x5F91,
- 0xAE7D, 0x5F90, 0xAE7E, 0x6059, 0xAEA1, 0x6063, 0xAEA2, 0x6065, 0xAEA3, 0x6050, 0xAEA4, 0x6055, 0xAEA5, 0x606D, 0xAEA6, 0x6069,
- 0xAEA7, 0x606F, 0xAEA8, 0x6084, 0xAEA9, 0x609F, 0xAEAA, 0x609A, 0xAEAB, 0x608D, 0xAEAC, 0x6094, 0xAEAD, 0x608C, 0xAEAE, 0x6085,
- 0xAEAF, 0x6096, 0xAEB0, 0x6247, 0xAEB1, 0x62F3, 0xAEB2, 0x6308, 0xAEB3, 0x62FF, 0xAEB4, 0x634E, 0xAEB5, 0x633E, 0xAEB6, 0x632F,
- 0xAEB7, 0x6355, 0xAEB8, 0x6342, 0xAEB9, 0x6346, 0xAEBA, 0x634F, 0xAEBB, 0x6349, 0xAEBC, 0x633A, 0xAEBD, 0x6350, 0xAEBE, 0x633D,
- 0xAEBF, 0x632A, 0xAEC0, 0x632B, 0xAEC1, 0x6328, 0xAEC2, 0x634D, 0xAEC3, 0x634C, 0xAEC4, 0x6548, 0xAEC5, 0x6549, 0xAEC6, 0x6599,
- 0xAEC7, 0x65C1, 0xAEC8, 0x65C5, 0xAEC9, 0x6642, 0xAECA, 0x6649, 0xAECB, 0x664F, 0xAECC, 0x6643, 0xAECD, 0x6652, 0xAECE, 0x664C,
- 0xAECF, 0x6645, 0xAED0, 0x6641, 0xAED1, 0x66F8, 0xAED2, 0x6714, 0xAED3, 0x6715, 0xAED4, 0x6717, 0xAED5, 0x6821, 0xAED6, 0x6838,
- 0xAED7, 0x6848, 0xAED8, 0x6846, 0xAED9, 0x6853, 0xAEDA, 0x6839, 0xAEDB, 0x6842, 0xAEDC, 0x6854, 0xAEDD, 0x6829, 0xAEDE, 0x68B3,
- 0xAEDF, 0x6817, 0xAEE0, 0x684C, 0xAEE1, 0x6851, 0xAEE2, 0x683D, 0xAEE3, 0x67F4, 0xAEE4, 0x6850, 0xAEE5, 0x6840, 0xAEE6, 0x683C,
- 0xAEE7, 0x6843, 0xAEE8, 0x682A, 0xAEE9, 0x6845, 0xAEEA, 0x6813, 0xAEEB, 0x6818, 0xAEEC, 0x6841, 0xAEED, 0x6B8A, 0xAEEE, 0x6B89,
- 0xAEEF, 0x6BB7, 0xAEF0, 0x6C23, 0xAEF1, 0x6C27, 0xAEF2, 0x6C28, 0xAEF3, 0x6C26, 0xAEF4, 0x6C24, 0xAEF5, 0x6CF0, 0xAEF6, 0x6D6A,
- 0xAEF7, 0x6D95, 0xAEF8, 0x6D88, 0xAEF9, 0x6D87, 0xAEFA, 0x6D66, 0xAEFB, 0x6D78, 0xAEFC, 0x6D77, 0xAEFD, 0x6D59, 0xAEFE, 0x6D93,
- 0xAF40, 0x6D6C, 0xAF41, 0x6D89, 0xAF42, 0x6D6E, 0xAF43, 0x6D5A, 0xAF44, 0x6D74, 0xAF45, 0x6D69, 0xAF46, 0x6D8C, 0xAF47, 0x6D8A,
- 0xAF48, 0x6D79, 0xAF49, 0x6D85, 0xAF4A, 0x6D65, 0xAF4B, 0x6D94, 0xAF4C, 0x70CA, 0xAF4D, 0x70D8, 0xAF4E, 0x70E4, 0xAF4F, 0x70D9,
- 0xAF50, 0x70C8, 0xAF51, 0x70CF, 0xAF52, 0x7239, 0xAF53, 0x7279, 0xAF54, 0x72FC, 0xAF55, 0x72F9, 0xAF56, 0x72FD, 0xAF57, 0x72F8,
- 0xAF58, 0x72F7, 0xAF59, 0x7386, 0xAF5A, 0x73ED, 0xAF5B, 0x7409, 0xAF5C, 0x73EE, 0xAF5D, 0x73E0, 0xAF5E, 0x73EA, 0xAF5F, 0x73DE,
- 0xAF60, 0x7554, 0xAF61, 0x755D, 0xAF62, 0x755C, 0xAF63, 0x755A, 0xAF64, 0x7559, 0xAF65, 0x75BE, 0xAF66, 0x75C5, 0xAF67, 0x75C7,
- 0xAF68, 0x75B2, 0xAF69, 0x75B3, 0xAF6A, 0x75BD, 0xAF6B, 0x75BC, 0xAF6C, 0x75B9, 0xAF6D, 0x75C2, 0xAF6E, 0x75B8, 0xAF6F, 0x768B,
- 0xAF70, 0x76B0, 0xAF71, 0x76CA, 0xAF72, 0x76CD, 0xAF73, 0x76CE, 0xAF74, 0x7729, 0xAF75, 0x771F, 0xAF76, 0x7720, 0xAF77, 0x7728,
- 0xAF78, 0x77E9, 0xAF79, 0x7830, 0xAF7A, 0x7827, 0xAF7B, 0x7838, 0xAF7C, 0x781D, 0xAF7D, 0x7834, 0xAF7E, 0x7837, 0xAFA1, 0x7825,
- 0xAFA2, 0x782D, 0xAFA3, 0x7820, 0xAFA4, 0x781F, 0xAFA5, 0x7832, 0xAFA6, 0x7955, 0xAFA7, 0x7950, 0xAFA8, 0x7960, 0xAFA9, 0x795F,
- 0xAFAA, 0x7956, 0xAFAB, 0x795E, 0xAFAC, 0x795D, 0xAFAD, 0x7957, 0xAFAE, 0x795A, 0xAFAF, 0x79E4, 0xAFB0, 0x79E3, 0xAFB1, 0x79E7,
- 0xAFB2, 0x79DF, 0xAFB3, 0x79E6, 0xAFB4, 0x79E9, 0xAFB5, 0x79D8, 0xAFB6, 0x7A84, 0xAFB7, 0x7A88, 0xAFB8, 0x7AD9, 0xAFB9, 0x7B06,
- 0xAFBA, 0x7B11, 0xAFBB, 0x7C89, 0xAFBC, 0x7D21, 0xAFBD, 0x7D17, 0xAFBE, 0x7D0B, 0xAFBF, 0x7D0A, 0xAFC0, 0x7D20, 0xAFC1, 0x7D22,
- 0xAFC2, 0x7D14, 0xAFC3, 0x7D10, 0xAFC4, 0x7D15, 0xAFC5, 0x7D1A, 0xAFC6, 0x7D1C, 0xAFC7, 0x7D0D, 0xAFC8, 0x7D19, 0xAFC9, 0x7D1B,
- 0xAFCA, 0x7F3A, 0xAFCB, 0x7F5F, 0xAFCC, 0x7F94, 0xAFCD, 0x7FC5, 0xAFCE, 0x7FC1, 0xAFCF, 0x8006, 0xAFD0, 0x8018, 0xAFD1, 0x8015,
- 0xAFD2, 0x8019, 0xAFD3, 0x8017, 0xAFD4, 0x803D, 0xAFD5, 0x803F, 0xAFD6, 0x80F1, 0xAFD7, 0x8102, 0xAFD8, 0x80F0, 0xAFD9, 0x8105,
- 0xAFDA, 0x80ED, 0xAFDB, 0x80F4, 0xAFDC, 0x8106, 0xAFDD, 0x80F8, 0xAFDE, 0x80F3, 0xAFDF, 0x8108, 0xAFE0, 0x80FD, 0xAFE1, 0x810A,
- 0xAFE2, 0x80FC, 0xAFE3, 0x80EF, 0xAFE4, 0x81ED, 0xAFE5, 0x81EC, 0xAFE6, 0x8200, 0xAFE7, 0x8210, 0xAFE8, 0x822A, 0xAFE9, 0x822B,
- 0xAFEA, 0x8228, 0xAFEB, 0x822C, 0xAFEC, 0x82BB, 0xAFED, 0x832B, 0xAFEE, 0x8352, 0xAFEF, 0x8354, 0xAFF0, 0x834A, 0xAFF1, 0x8338,
- 0xAFF2, 0x8350, 0xAFF3, 0x8349, 0xAFF4, 0x8335, 0xAFF5, 0x8334, 0xAFF6, 0x834F, 0xAFF7, 0x8332, 0xAFF8, 0x8339, 0xAFF9, 0x8336,
- 0xAFFA, 0x8317, 0xAFFB, 0x8340, 0xAFFC, 0x8331, 0xAFFD, 0x8328, 0xAFFE, 0x8343, 0xB040, 0x8654, 0xB041, 0x868A, 0xB042, 0x86AA,
- 0xB043, 0x8693, 0xB044, 0x86A4, 0xB045, 0x86A9, 0xB046, 0x868C, 0xB047, 0x86A3, 0xB048, 0x869C, 0xB049, 0x8870, 0xB04A, 0x8877,
- 0xB04B, 0x8881, 0xB04C, 0x8882, 0xB04D, 0x887D, 0xB04E, 0x8879, 0xB04F, 0x8A18, 0xB050, 0x8A10, 0xB051, 0x8A0E, 0xB052, 0x8A0C,
- 0xB053, 0x8A15, 0xB054, 0x8A0A, 0xB055, 0x8A17, 0xB056, 0x8A13, 0xB057, 0x8A16, 0xB058, 0x8A0F, 0xB059, 0x8A11, 0xB05A, 0x8C48,
- 0xB05B, 0x8C7A, 0xB05C, 0x8C79, 0xB05D, 0x8CA1, 0xB05E, 0x8CA2, 0xB05F, 0x8D77, 0xB060, 0x8EAC, 0xB061, 0x8ED2, 0xB062, 0x8ED4,
- 0xB063, 0x8ECF, 0xB064, 0x8FB1, 0xB065, 0x9001, 0xB066, 0x9006, 0xB067, 0x8FF7, 0xB068, 0x9000, 0xB069, 0x8FFA, 0xB06A, 0x8FF4,
- 0xB06B, 0x9003, 0xB06C, 0x8FFD, 0xB06D, 0x9005, 0xB06E, 0x8FF8, 0xB06F, 0x9095, 0xB070, 0x90E1, 0xB071, 0x90DD, 0xB072, 0x90E2,
- 0xB073, 0x9152, 0xB074, 0x914D, 0xB075, 0x914C, 0xB076, 0x91D8, 0xB077, 0x91DD, 0xB078, 0x91D7, 0xB079, 0x91DC, 0xB07A, 0x91D9,
- 0xB07B, 0x9583, 0xB07C, 0x9662, 0xB07D, 0x9663, 0xB07E, 0x9661, 0xB0A1, 0x965B, 0xB0A2, 0x965D, 0xB0A3, 0x9664, 0xB0A4, 0x9658,
- 0xB0A5, 0x965E, 0xB0A6, 0x96BB, 0xB0A7, 0x98E2, 0xB0A8, 0x99AC, 0xB0A9, 0x9AA8, 0xB0AA, 0x9AD8, 0xB0AB, 0x9B25, 0xB0AC, 0x9B32,
- 0xB0AD, 0x9B3C, 0xB0AE, 0x4E7E, 0xB0AF, 0x507A, 0xB0B0, 0x507D, 0xB0B1, 0x505C, 0xB0B2, 0x5047, 0xB0B3, 0x5043, 0xB0B4, 0x504C,
- 0xB0B5, 0x505A, 0xB0B6, 0x5049, 0xB0B7, 0x5065, 0xB0B8, 0x5076, 0xB0B9, 0x504E, 0xB0BA, 0x5055, 0xB0BB, 0x5075, 0xB0BC, 0x5074,
- 0xB0BD, 0x5077, 0xB0BE, 0x504F, 0xB0BF, 0x500F, 0xB0C0, 0x506F, 0xB0C1, 0x506D, 0xB0C2, 0x515C, 0xB0C3, 0x5195, 0xB0C4, 0x51F0,
- 0xB0C5, 0x526A, 0xB0C6, 0x526F, 0xB0C7, 0x52D2, 0xB0C8, 0x52D9, 0xB0C9, 0x52D8, 0xB0CA, 0x52D5, 0xB0CB, 0x5310, 0xB0CC, 0x530F,
- 0xB0CD, 0x5319, 0xB0CE, 0x533F, 0xB0CF, 0x5340, 0xB0D0, 0x533E, 0xB0D1, 0x53C3, 0xB0D2, 0x66FC, 0xB0D3, 0x5546, 0xB0D4, 0x556A,
- 0xB0D5, 0x5566, 0xB0D6, 0x5544, 0xB0D7, 0x555E, 0xB0D8, 0x5561, 0xB0D9, 0x5543, 0xB0DA, 0x554A, 0xB0DB, 0x5531, 0xB0DC, 0x5556,
- 0xB0DD, 0x554F, 0xB0DE, 0x5555, 0xB0DF, 0x552F, 0xB0E0, 0x5564, 0xB0E1, 0x5538, 0xB0E2, 0x552E, 0xB0E3, 0x555C, 0xB0E4, 0x552C,
- 0xB0E5, 0x5563, 0xB0E6, 0x5533, 0xB0E7, 0x5541, 0xB0E8, 0x5557, 0xB0E9, 0x5708, 0xB0EA, 0x570B, 0xB0EB, 0x5709, 0xB0EC, 0x57DF,
- 0xB0ED, 0x5805, 0xB0EE, 0x580A, 0xB0EF, 0x5806, 0xB0F0, 0x57E0, 0xB0F1, 0x57E4, 0xB0F2, 0x57FA, 0xB0F3, 0x5802, 0xB0F4, 0x5835,
- 0xB0F5, 0x57F7, 0xB0F6, 0x57F9, 0xB0F7, 0x5920, 0xB0F8, 0x5962, 0xB0F9, 0x5A36, 0xB0FA, 0x5A41, 0xB0FB, 0x5A49, 0xB0FC, 0x5A66,
- 0xB0FD, 0x5A6A, 0xB0FE, 0x5A40, 0xB140, 0x5A3C, 0xB141, 0x5A62, 0xB142, 0x5A5A, 0xB143, 0x5A46, 0xB144, 0x5A4A, 0xB145, 0x5B70,
- 0xB146, 0x5BC7, 0xB147, 0x5BC5, 0xB148, 0x5BC4, 0xB149, 0x5BC2, 0xB14A, 0x5BBF, 0xB14B, 0x5BC6, 0xB14C, 0x5C09, 0xB14D, 0x5C08,
- 0xB14E, 0x5C07, 0xB14F, 0x5C60, 0xB150, 0x5C5C, 0xB151, 0x5C5D, 0xB152, 0x5D07, 0xB153, 0x5D06, 0xB154, 0x5D0E, 0xB155, 0x5D1B,
- 0xB156, 0x5D16, 0xB157, 0x5D22, 0xB158, 0x5D11, 0xB159, 0x5D29, 0xB15A, 0x5D14, 0xB15B, 0x5D19, 0xB15C, 0x5D24, 0xB15D, 0x5D27,
- 0xB15E, 0x5D17, 0xB15F, 0x5DE2, 0xB160, 0x5E38, 0xB161, 0x5E36, 0xB162, 0x5E33, 0xB163, 0x5E37, 0xB164, 0x5EB7, 0xB165, 0x5EB8,
- 0xB166, 0x5EB6, 0xB167, 0x5EB5, 0xB168, 0x5EBE, 0xB169, 0x5F35, 0xB16A, 0x5F37, 0xB16B, 0x5F57, 0xB16C, 0x5F6C, 0xB16D, 0x5F69,
- 0xB16E, 0x5F6B, 0xB16F, 0x5F97, 0xB170, 0x5F99, 0xB171, 0x5F9E, 0xB172, 0x5F98, 0xB173, 0x5FA1, 0xB174, 0x5FA0, 0xB175, 0x5F9C,
- 0xB176, 0x607F, 0xB177, 0x60A3, 0xB178, 0x6089, 0xB179, 0x60A0, 0xB17A, 0x60A8, 0xB17B, 0x60CB, 0xB17C, 0x60B4, 0xB17D, 0x60E6,
- 0xB17E, 0x60BD, 0xB1A1, 0x60C5, 0xB1A2, 0x60BB, 0xB1A3, 0x60B5, 0xB1A4, 0x60DC, 0xB1A5, 0x60BC, 0xB1A6, 0x60D8, 0xB1A7, 0x60D5,
- 0xB1A8, 0x60C6, 0xB1A9, 0x60DF, 0xB1AA, 0x60B8, 0xB1AB, 0x60DA, 0xB1AC, 0x60C7, 0xB1AD, 0x621A, 0xB1AE, 0x621B, 0xB1AF, 0x6248,
- 0xB1B0, 0x63A0, 0xB1B1, 0x63A7, 0xB1B2, 0x6372, 0xB1B3, 0x6396, 0xB1B4, 0x63A2, 0xB1B5, 0x63A5, 0xB1B6, 0x6377, 0xB1B7, 0x6367,
- 0xB1B8, 0x6398, 0xB1B9, 0x63AA, 0xB1BA, 0x6371, 0xB1BB, 0x63A9, 0xB1BC, 0x6389, 0xB1BD, 0x6383, 0xB1BE, 0x639B, 0xB1BF, 0x636B,
- 0xB1C0, 0x63A8, 0xB1C1, 0x6384, 0xB1C2, 0x6388, 0xB1C3, 0x6399, 0xB1C4, 0x63A1, 0xB1C5, 0x63AC, 0xB1C6, 0x6392, 0xB1C7, 0x638F,
- 0xB1C8, 0x6380, 0xB1C9, 0x637B, 0xB1CA, 0x6369, 0xB1CB, 0x6368, 0xB1CC, 0x637A, 0xB1CD, 0x655D, 0xB1CE, 0x6556, 0xB1CF, 0x6551,
- 0xB1D0, 0x6559, 0xB1D1, 0x6557, 0xB1D2, 0x555F, 0xB1D3, 0x654F, 0xB1D4, 0x6558, 0xB1D5, 0x6555, 0xB1D6, 0x6554, 0xB1D7, 0x659C,
- 0xB1D8, 0x659B, 0xB1D9, 0x65AC, 0xB1DA, 0x65CF, 0xB1DB, 0x65CB, 0xB1DC, 0x65CC, 0xB1DD, 0x65CE, 0xB1DE, 0x665D, 0xB1DF, 0x665A,
- 0xB1E0, 0x6664, 0xB1E1, 0x6668, 0xB1E2, 0x6666, 0xB1E3, 0x665E, 0xB1E4, 0x66F9, 0xB1E5, 0x52D7, 0xB1E6, 0x671B, 0xB1E7, 0x6881,
- 0xB1E8, 0x68AF, 0xB1E9, 0x68A2, 0xB1EA, 0x6893, 0xB1EB, 0x68B5, 0xB1EC, 0x687F, 0xB1ED, 0x6876, 0xB1EE, 0x68B1, 0xB1EF, 0x68A7,
- 0xB1F0, 0x6897, 0xB1F1, 0x68B0, 0xB1F2, 0x6883, 0xB1F3, 0x68C4, 0xB1F4, 0x68AD, 0xB1F5, 0x6886, 0xB1F6, 0x6885, 0xB1F7, 0x6894,
- 0xB1F8, 0x689D, 0xB1F9, 0x68A8, 0xB1FA, 0x689F, 0xB1FB, 0x68A1, 0xB1FC, 0x6882, 0xB1FD, 0x6B32, 0xB1FE, 0x6BBA, 0xB240, 0x6BEB,
- 0xB241, 0x6BEC, 0xB242, 0x6C2B, 0xB243, 0x6D8E, 0xB244, 0x6DBC, 0xB245, 0x6DF3, 0xB246, 0x6DD9, 0xB247, 0x6DB2, 0xB248, 0x6DE1,
- 0xB249, 0x6DCC, 0xB24A, 0x6DE4, 0xB24B, 0x6DFB, 0xB24C, 0x6DFA, 0xB24D, 0x6E05, 0xB24E, 0x6DC7, 0xB24F, 0x6DCB, 0xB250, 0x6DAF,
- 0xB251, 0x6DD1, 0xB252, 0x6DAE, 0xB253, 0x6DDE, 0xB254, 0x6DF9, 0xB255, 0x6DB8, 0xB256, 0x6DF7, 0xB257, 0x6DF5, 0xB258, 0x6DC5,
- 0xB259, 0x6DD2, 0xB25A, 0x6E1A, 0xB25B, 0x6DB5, 0xB25C, 0x6DDA, 0xB25D, 0x6DEB, 0xB25E, 0x6DD8, 0xB25F, 0x6DEA, 0xB260, 0x6DF1,
- 0xB261, 0x6DEE, 0xB262, 0x6DE8, 0xB263, 0x6DC6, 0xB264, 0x6DC4, 0xB265, 0x6DAA, 0xB266, 0x6DEC, 0xB267, 0x6DBF, 0xB268, 0x6DE6,
- 0xB269, 0x70F9, 0xB26A, 0x7109, 0xB26B, 0x710A, 0xB26C, 0x70FD, 0xB26D, 0x70EF, 0xB26E, 0x723D, 0xB26F, 0x727D, 0xB270, 0x7281,
- 0xB271, 0x731C, 0xB272, 0x731B, 0xB273, 0x7316, 0xB274, 0x7313, 0xB275, 0x7319, 0xB276, 0x7387, 0xB277, 0x7405, 0xB278, 0x740A,
- 0xB279, 0x7403, 0xB27A, 0x7406, 0xB27B, 0x73FE, 0xB27C, 0x740D, 0xB27D, 0x74E0, 0xB27E, 0x74F6, 0xB2A1, 0x74F7, 0xB2A2, 0x751C,
- 0xB2A3, 0x7522, 0xB2A4, 0x7565, 0xB2A5, 0x7566, 0xB2A6, 0x7562, 0xB2A7, 0x7570, 0xB2A8, 0x758F, 0xB2A9, 0x75D4, 0xB2AA, 0x75D5,
- 0xB2AB, 0x75B5, 0xB2AC, 0x75CA, 0xB2AD, 0x75CD, 0xB2AE, 0x768E, 0xB2AF, 0x76D4, 0xB2B0, 0x76D2, 0xB2B1, 0x76DB, 0xB2B2, 0x7737,
- 0xB2B3, 0x773E, 0xB2B4, 0x773C, 0xB2B5, 0x7736, 0xB2B6, 0x7738, 0xB2B7, 0x773A, 0xB2B8, 0x786B, 0xB2B9, 0x7843, 0xB2BA, 0x784E,
- 0xB2BB, 0x7965, 0xB2BC, 0x7968, 0xB2BD, 0x796D, 0xB2BE, 0x79FB, 0xB2BF, 0x7A92, 0xB2C0, 0x7A95, 0xB2C1, 0x7B20, 0xB2C2, 0x7B28,
- 0xB2C3, 0x7B1B, 0xB2C4, 0x7B2C, 0xB2C5, 0x7B26, 0xB2C6, 0x7B19, 0xB2C7, 0x7B1E, 0xB2C8, 0x7B2E, 0xB2C9, 0x7C92, 0xB2CA, 0x7C97,
- 0xB2CB, 0x7C95, 0xB2CC, 0x7D46, 0xB2CD, 0x7D43, 0xB2CE, 0x7D71, 0xB2CF, 0x7D2E, 0xB2D0, 0x7D39, 0xB2D1, 0x7D3C, 0xB2D2, 0x7D40,
- 0xB2D3, 0x7D30, 0xB2D4, 0x7D33, 0xB2D5, 0x7D44, 0xB2D6, 0x7D2F, 0xB2D7, 0x7D42, 0xB2D8, 0x7D32, 0xB2D9, 0x7D31, 0xB2DA, 0x7F3D,
- 0xB2DB, 0x7F9E, 0xB2DC, 0x7F9A, 0xB2DD, 0x7FCC, 0xB2DE, 0x7FCE, 0xB2DF, 0x7FD2, 0xB2E0, 0x801C, 0xB2E1, 0x804A, 0xB2E2, 0x8046,
- 0xB2E3, 0x812F, 0xB2E4, 0x8116, 0xB2E5, 0x8123, 0xB2E6, 0x812B, 0xB2E7, 0x8129, 0xB2E8, 0x8130, 0xB2E9, 0x8124, 0xB2EA, 0x8202,
- 0xB2EB, 0x8235, 0xB2EC, 0x8237, 0xB2ED, 0x8236, 0xB2EE, 0x8239, 0xB2EF, 0x838E, 0xB2F0, 0x839E, 0xB2F1, 0x8398, 0xB2F2, 0x8378,
- 0xB2F3, 0x83A2, 0xB2F4, 0x8396, 0xB2F5, 0x83BD, 0xB2F6, 0x83AB, 0xB2F7, 0x8392, 0xB2F8, 0x838A, 0xB2F9, 0x8393, 0xB2FA, 0x8389,
- 0xB2FB, 0x83A0, 0xB2FC, 0x8377, 0xB2FD, 0x837B, 0xB2FE, 0x837C, 0xB340, 0x8386, 0xB341, 0x83A7, 0xB342, 0x8655, 0xB343, 0x5F6A,
- 0xB344, 0x86C7, 0xB345, 0x86C0, 0xB346, 0x86B6, 0xB347, 0x86C4, 0xB348, 0x86B5, 0xB349, 0x86C6, 0xB34A, 0x86CB, 0xB34B, 0x86B1,
- 0xB34C, 0x86AF, 0xB34D, 0x86C9, 0xB34E, 0x8853, 0xB34F, 0x889E, 0xB350, 0x8888, 0xB351, 0x88AB, 0xB352, 0x8892, 0xB353, 0x8896,
- 0xB354, 0x888D, 0xB355, 0x888B, 0xB356, 0x8993, 0xB357, 0x898F, 0xB358, 0x8A2A, 0xB359, 0x8A1D, 0xB35A, 0x8A23, 0xB35B, 0x8A25,
- 0xB35C, 0x8A31, 0xB35D, 0x8A2D, 0xB35E, 0x8A1F, 0xB35F, 0x8A1B, 0xB360, 0x8A22, 0xB361, 0x8C49, 0xB362, 0x8C5A, 0xB363, 0x8CA9,
- 0xB364, 0x8CAC, 0xB365, 0x8CAB, 0xB366, 0x8CA8, 0xB367, 0x8CAA, 0xB368, 0x8CA7, 0xB369, 0x8D67, 0xB36A, 0x8D66, 0xB36B, 0x8DBE,
- 0xB36C, 0x8DBA, 0xB36D, 0x8EDB, 0xB36E, 0x8EDF, 0xB36F, 0x9019, 0xB370, 0x900D, 0xB371, 0x901A, 0xB372, 0x9017, 0xB373, 0x9023,
- 0xB374, 0x901F, 0xB375, 0x901D, 0xB376, 0x9010, 0xB377, 0x9015, 0xB378, 0x901E, 0xB379, 0x9020, 0xB37A, 0x900F, 0xB37B, 0x9022,
- 0xB37C, 0x9016, 0xB37D, 0x901B, 0xB37E, 0x9014, 0xB3A1, 0x90E8, 0xB3A2, 0x90ED, 0xB3A3, 0x90FD, 0xB3A4, 0x9157, 0xB3A5, 0x91CE,
- 0xB3A6, 0x91F5, 0xB3A7, 0x91E6, 0xB3A8, 0x91E3, 0xB3A9, 0x91E7, 0xB3AA, 0x91ED, 0xB3AB, 0x91E9, 0xB3AC, 0x9589, 0xB3AD, 0x966A,
- 0xB3AE, 0x9675, 0xB3AF, 0x9673, 0xB3B0, 0x9678, 0xB3B1, 0x9670, 0xB3B2, 0x9674, 0xB3B3, 0x9676, 0xB3B4, 0x9677, 0xB3B5, 0x966C,
- 0xB3B6, 0x96C0, 0xB3B7, 0x96EA, 0xB3B8, 0x96E9, 0xB3B9, 0x7AE0, 0xB3BA, 0x7ADF, 0xB3BB, 0x9802, 0xB3BC, 0x9803, 0xB3BD, 0x9B5A,
- 0xB3BE, 0x9CE5, 0xB3BF, 0x9E75, 0xB3C0, 0x9E7F, 0xB3C1, 0x9EA5, 0xB3C2, 0x9EBB, 0xB3C3, 0x50A2, 0xB3C4, 0x508D, 0xB3C5, 0x5085,
- 0xB3C6, 0x5099, 0xB3C7, 0x5091, 0xB3C8, 0x5080, 0xB3C9, 0x5096, 0xB3CA, 0x5098, 0xB3CB, 0x509A, 0xB3CC, 0x6700, 0xB3CD, 0x51F1,
- 0xB3CE, 0x5272, 0xB3CF, 0x5274, 0xB3D0, 0x5275, 0xB3D1, 0x5269, 0xB3D2, 0x52DE, 0xB3D3, 0x52DD, 0xB3D4, 0x52DB, 0xB3D5, 0x535A,
- 0xB3D6, 0x53A5, 0xB3D7, 0x557B, 0xB3D8, 0x5580, 0xB3D9, 0x55A7, 0xB3DA, 0x557C, 0xB3DB, 0x558A, 0xB3DC, 0x559D, 0xB3DD, 0x5598,
- 0xB3DE, 0x5582, 0xB3DF, 0x559C, 0xB3E0, 0x55AA, 0xB3E1, 0x5594, 0xB3E2, 0x5587, 0xB3E3, 0x558B, 0xB3E4, 0x5583, 0xB3E5, 0x55B3,
- 0xB3E6, 0x55AE, 0xB3E7, 0x559F, 0xB3E8, 0x553E, 0xB3E9, 0x55B2, 0xB3EA, 0x559A, 0xB3EB, 0x55BB, 0xB3EC, 0x55AC, 0xB3ED, 0x55B1,
- 0xB3EE, 0x557E, 0xB3EF, 0x5589, 0xB3F0, 0x55AB, 0xB3F1, 0x5599, 0xB3F2, 0x570D, 0xB3F3, 0x582F, 0xB3F4, 0x582A, 0xB3F5, 0x5834,
- 0xB3F6, 0x5824, 0xB3F7, 0x5830, 0xB3F8, 0x5831, 0xB3F9, 0x5821, 0xB3FA, 0x581D, 0xB3FB, 0x5820, 0xB3FC, 0x58F9, 0xB3FD, 0x58FA,
- 0xB3FE, 0x5960, 0xB440, 0x5A77, 0xB441, 0x5A9A, 0xB442, 0x5A7F, 0xB443, 0x5A92, 0xB444, 0x5A9B, 0xB445, 0x5AA7, 0xB446, 0x5B73,
- 0xB447, 0x5B71, 0xB448, 0x5BD2, 0xB449, 0x5BCC, 0xB44A, 0x5BD3, 0xB44B, 0x5BD0, 0xB44C, 0x5C0A, 0xB44D, 0x5C0B, 0xB44E, 0x5C31,
- 0xB44F, 0x5D4C, 0xB450, 0x5D50, 0xB451, 0x5D34, 0xB452, 0x5D47, 0xB453, 0x5DFD, 0xB454, 0x5E45, 0xB455, 0x5E3D, 0xB456, 0x5E40,
- 0xB457, 0x5E43, 0xB458, 0x5E7E, 0xB459, 0x5ECA, 0xB45A, 0x5EC1, 0xB45B, 0x5EC2, 0xB45C, 0x5EC4, 0xB45D, 0x5F3C, 0xB45E, 0x5F6D,
- 0xB45F, 0x5FA9, 0xB460, 0x5FAA, 0xB461, 0x5FA8, 0xB462, 0x60D1, 0xB463, 0x60E1, 0xB464, 0x60B2, 0xB465, 0x60B6, 0xB466, 0x60E0,
- 0xB467, 0x611C, 0xB468, 0x6123, 0xB469, 0x60FA, 0xB46A, 0x6115, 0xB46B, 0x60F0, 0xB46C, 0x60FB, 0xB46D, 0x60F4, 0xB46E, 0x6168,
- 0xB46F, 0x60F1, 0xB470, 0x610E, 0xB471, 0x60F6, 0xB472, 0x6109, 0xB473, 0x6100, 0xB474, 0x6112, 0xB475, 0x621F, 0xB476, 0x6249,
- 0xB477, 0x63A3, 0xB478, 0x638C, 0xB479, 0x63CF, 0xB47A, 0x63C0, 0xB47B, 0x63E9, 0xB47C, 0x63C9, 0xB47D, 0x63C6, 0xB47E, 0x63CD,
- 0xB4A1, 0x63D2, 0xB4A2, 0x63E3, 0xB4A3, 0x63D0, 0xB4A4, 0x63E1, 0xB4A5, 0x63D6, 0xB4A6, 0x63ED, 0xB4A7, 0x63EE, 0xB4A8, 0x6376,
- 0xB4A9, 0x63F4, 0xB4AA, 0x63EA, 0xB4AB, 0x63DB, 0xB4AC, 0x6452, 0xB4AD, 0x63DA, 0xB4AE, 0x63F9, 0xB4AF, 0x655E, 0xB4B0, 0x6566,
- 0xB4B1, 0x6562, 0xB4B2, 0x6563, 0xB4B3, 0x6591, 0xB4B4, 0x6590, 0xB4B5, 0x65AF, 0xB4B6, 0x666E, 0xB4B7, 0x6670, 0xB4B8, 0x6674,
- 0xB4B9, 0x6676, 0xB4BA, 0x666F, 0xB4BB, 0x6691, 0xB4BC, 0x667A, 0xB4BD, 0x667E, 0xB4BE, 0x6677, 0xB4BF, 0x66FE, 0xB4C0, 0x66FF,
- 0xB4C1, 0x671F, 0xB4C2, 0x671D, 0xB4C3, 0x68FA, 0xB4C4, 0x68D5, 0xB4C5, 0x68E0, 0xB4C6, 0x68D8, 0xB4C7, 0x68D7, 0xB4C8, 0x6905,
- 0xB4C9, 0x68DF, 0xB4CA, 0x68F5, 0xB4CB, 0x68EE, 0xB4CC, 0x68E7, 0xB4CD, 0x68F9, 0xB4CE, 0x68D2, 0xB4CF, 0x68F2, 0xB4D0, 0x68E3,
- 0xB4D1, 0x68CB, 0xB4D2, 0x68CD, 0xB4D3, 0x690D, 0xB4D4, 0x6912, 0xB4D5, 0x690E, 0xB4D6, 0x68C9, 0xB4D7, 0x68DA, 0xB4D8, 0x696E,
- 0xB4D9, 0x68FB, 0xB4DA, 0x6B3E, 0xB4DB, 0x6B3A, 0xB4DC, 0x6B3D, 0xB4DD, 0x6B98, 0xB4DE, 0x6B96, 0xB4DF, 0x6BBC, 0xB4E0, 0x6BEF,
- 0xB4E1, 0x6C2E, 0xB4E2, 0x6C2F, 0xB4E3, 0x6C2C, 0xB4E4, 0x6E2F, 0xB4E5, 0x6E38, 0xB4E6, 0x6E54, 0xB4E7, 0x6E21, 0xB4E8, 0x6E32,
- 0xB4E9, 0x6E67, 0xB4EA, 0x6E4A, 0xB4EB, 0x6E20, 0xB4EC, 0x6E25, 0xB4ED, 0x6E23, 0xB4EE, 0x6E1B, 0xB4EF, 0x6E5B, 0xB4F0, 0x6E58,
- 0xB4F1, 0x6E24, 0xB4F2, 0x6E56, 0xB4F3, 0x6E6E, 0xB4F4, 0x6E2D, 0xB4F5, 0x6E26, 0xB4F6, 0x6E6F, 0xB4F7, 0x6E34, 0xB4F8, 0x6E4D,
- 0xB4F9, 0x6E3A, 0xB4FA, 0x6E2C, 0xB4FB, 0x6E43, 0xB4FC, 0x6E1D, 0xB4FD, 0x6E3E, 0xB4FE, 0x6ECB, 0xB540, 0x6E89, 0xB541, 0x6E19,
- 0xB542, 0x6E4E, 0xB543, 0x6E63, 0xB544, 0x6E44, 0xB545, 0x6E72, 0xB546, 0x6E69, 0xB547, 0x6E5F, 0xB548, 0x7119, 0xB549, 0x711A,
- 0xB54A, 0x7126, 0xB54B, 0x7130, 0xB54C, 0x7121, 0xB54D, 0x7136, 0xB54E, 0x716E, 0xB54F, 0x711C, 0xB550, 0x724C, 0xB551, 0x7284,
- 0xB552, 0x7280, 0xB553, 0x7336, 0xB554, 0x7325, 0xB555, 0x7334, 0xB556, 0x7329, 0xB557, 0x743A, 0xB558, 0x742A, 0xB559, 0x7433,
- 0xB55A, 0x7422, 0xB55B, 0x7425, 0xB55C, 0x7435, 0xB55D, 0x7436, 0xB55E, 0x7434, 0xB55F, 0x742F, 0xB560, 0x741B, 0xB561, 0x7426,
- 0xB562, 0x7428, 0xB563, 0x7525, 0xB564, 0x7526, 0xB565, 0x756B, 0xB566, 0x756A, 0xB567, 0x75E2, 0xB568, 0x75DB, 0xB569, 0x75E3,
- 0xB56A, 0x75D9, 0xB56B, 0x75D8, 0xB56C, 0x75DE, 0xB56D, 0x75E0, 0xB56E, 0x767B, 0xB56F, 0x767C, 0xB570, 0x7696, 0xB571, 0x7693,
- 0xB572, 0x76B4, 0xB573, 0x76DC, 0xB574, 0x774F, 0xB575, 0x77ED, 0xB576, 0x785D, 0xB577, 0x786C, 0xB578, 0x786F, 0xB579, 0x7A0D,
- 0xB57A, 0x7A08, 0xB57B, 0x7A0B, 0xB57C, 0x7A05, 0xB57D, 0x7A00, 0xB57E, 0x7A98, 0xB5A1, 0x7A97, 0xB5A2, 0x7A96, 0xB5A3, 0x7AE5,
- 0xB5A4, 0x7AE3, 0xB5A5, 0x7B49, 0xB5A6, 0x7B56, 0xB5A7, 0x7B46, 0xB5A8, 0x7B50, 0xB5A9, 0x7B52, 0xB5AA, 0x7B54, 0xB5AB, 0x7B4D,
- 0xB5AC, 0x7B4B, 0xB5AD, 0x7B4F, 0xB5AE, 0x7B51, 0xB5AF, 0x7C9F, 0xB5B0, 0x7CA5, 0xB5B1, 0x7D5E, 0xB5B2, 0x7D50, 0xB5B3, 0x7D68,
- 0xB5B4, 0x7D55, 0xB5B5, 0x7D2B, 0xB5B6, 0x7D6E, 0xB5B7, 0x7D72, 0xB5B8, 0x7D61, 0xB5B9, 0x7D66, 0xB5BA, 0x7D62, 0xB5BB, 0x7D70,
- 0xB5BC, 0x7D73, 0xB5BD, 0x5584, 0xB5BE, 0x7FD4, 0xB5BF, 0x7FD5, 0xB5C0, 0x800B, 0xB5C1, 0x8052, 0xB5C2, 0x8085, 0xB5C3, 0x8155,
- 0xB5C4, 0x8154, 0xB5C5, 0x814B, 0xB5C6, 0x8151, 0xB5C7, 0x814E, 0xB5C8, 0x8139, 0xB5C9, 0x8146, 0xB5CA, 0x813E, 0xB5CB, 0x814C,
- 0xB5CC, 0x8153, 0xB5CD, 0x8174, 0xB5CE, 0x8212, 0xB5CF, 0x821C, 0xB5D0, 0x83E9, 0xB5D1, 0x8403, 0xB5D2, 0x83F8, 0xB5D3, 0x840D,
- 0xB5D4, 0x83E0, 0xB5D5, 0x83C5, 0xB5D6, 0x840B, 0xB5D7, 0x83C1, 0xB5D8, 0x83EF, 0xB5D9, 0x83F1, 0xB5DA, 0x83F4, 0xB5DB, 0x8457,
- 0xB5DC, 0x840A, 0xB5DD, 0x83F0, 0xB5DE, 0x840C, 0xB5DF, 0x83CC, 0xB5E0, 0x83FD, 0xB5E1, 0x83F2, 0xB5E2, 0x83CA, 0xB5E3, 0x8438,
- 0xB5E4, 0x840E, 0xB5E5, 0x8404, 0xB5E6, 0x83DC, 0xB5E7, 0x8407, 0xB5E8, 0x83D4, 0xB5E9, 0x83DF, 0xB5EA, 0x865B, 0xB5EB, 0x86DF,
- 0xB5EC, 0x86D9, 0xB5ED, 0x86ED, 0xB5EE, 0x86D4, 0xB5EF, 0x86DB, 0xB5F0, 0x86E4, 0xB5F1, 0x86D0, 0xB5F2, 0x86DE, 0xB5F3, 0x8857,
- 0xB5F4, 0x88C1, 0xB5F5, 0x88C2, 0xB5F6, 0x88B1, 0xB5F7, 0x8983, 0xB5F8, 0x8996, 0xB5F9, 0x8A3B, 0xB5FA, 0x8A60, 0xB5FB, 0x8A55,
- 0xB5FC, 0x8A5E, 0xB5FD, 0x8A3C, 0xB5FE, 0x8A41, 0xB640, 0x8A54, 0xB641, 0x8A5B, 0xB642, 0x8A50, 0xB643, 0x8A46, 0xB644, 0x8A34,
- 0xB645, 0x8A3A, 0xB646, 0x8A36, 0xB647, 0x8A56, 0xB648, 0x8C61, 0xB649, 0x8C82, 0xB64A, 0x8CAF, 0xB64B, 0x8CBC, 0xB64C, 0x8CB3,
- 0xB64D, 0x8CBD, 0xB64E, 0x8CC1, 0xB64F, 0x8CBB, 0xB650, 0x8CC0, 0xB651, 0x8CB4, 0xB652, 0x8CB7, 0xB653, 0x8CB6, 0xB654, 0x8CBF,
- 0xB655, 0x8CB8, 0xB656, 0x8D8A, 0xB657, 0x8D85, 0xB658, 0x8D81, 0xB659, 0x8DCE, 0xB65A, 0x8DDD, 0xB65B, 0x8DCB, 0xB65C, 0x8DDA,
- 0xB65D, 0x8DD1, 0xB65E, 0x8DCC, 0xB65F, 0x8DDB, 0xB660, 0x8DC6, 0xB661, 0x8EFB, 0xB662, 0x8EF8, 0xB663, 0x8EFC, 0xB664, 0x8F9C,
- 0xB665, 0x902E, 0xB666, 0x9035, 0xB667, 0x9031, 0xB668, 0x9038, 0xB669, 0x9032, 0xB66A, 0x9036, 0xB66B, 0x9102, 0xB66C, 0x90F5,
- 0xB66D, 0x9109, 0xB66E, 0x90FE, 0xB66F, 0x9163, 0xB670, 0x9165, 0xB671, 0x91CF, 0xB672, 0x9214, 0xB673, 0x9215, 0xB674, 0x9223,
- 0xB675, 0x9209, 0xB676, 0x921E, 0xB677, 0x920D, 0xB678, 0x9210, 0xB679, 0x9207, 0xB67A, 0x9211, 0xB67B, 0x9594, 0xB67C, 0x958F,
- 0xB67D, 0x958B, 0xB67E, 0x9591, 0xB6A1, 0x9593, 0xB6A2, 0x9592, 0xB6A3, 0x958E, 0xB6A4, 0x968A, 0xB6A5, 0x968E, 0xB6A6, 0x968B,
- 0xB6A7, 0x967D, 0xB6A8, 0x9685, 0xB6A9, 0x9686, 0xB6AA, 0x968D, 0xB6AB, 0x9672, 0xB6AC, 0x9684, 0xB6AD, 0x96C1, 0xB6AE, 0x96C5,
- 0xB6AF, 0x96C4, 0xB6B0, 0x96C6, 0xB6B1, 0x96C7, 0xB6B2, 0x96EF, 0xB6B3, 0x96F2, 0xB6B4, 0x97CC, 0xB6B5, 0x9805, 0xB6B6, 0x9806,
- 0xB6B7, 0x9808, 0xB6B8, 0x98E7, 0xB6B9, 0x98EA, 0xB6BA, 0x98EF, 0xB6BB, 0x98E9, 0xB6BC, 0x98F2, 0xB6BD, 0x98ED, 0xB6BE, 0x99AE,
- 0xB6BF, 0x99AD, 0xB6C0, 0x9EC3, 0xB6C1, 0x9ECD, 0xB6C2, 0x9ED1, 0xB6C3, 0x4E82, 0xB6C4, 0x50AD, 0xB6C5, 0x50B5, 0xB6C6, 0x50B2,
- 0xB6C7, 0x50B3, 0xB6C8, 0x50C5, 0xB6C9, 0x50BE, 0xB6CA, 0x50AC, 0xB6CB, 0x50B7, 0xB6CC, 0x50BB, 0xB6CD, 0x50AF, 0xB6CE, 0x50C7,
- 0xB6CF, 0x527F, 0xB6D0, 0x5277, 0xB6D1, 0x527D, 0xB6D2, 0x52DF, 0xB6D3, 0x52E6, 0xB6D4, 0x52E4, 0xB6D5, 0x52E2, 0xB6D6, 0x52E3,
- 0xB6D7, 0x532F, 0xB6D8, 0x55DF, 0xB6D9, 0x55E8, 0xB6DA, 0x55D3, 0xB6DB, 0x55E6, 0xB6DC, 0x55CE, 0xB6DD, 0x55DC, 0xB6DE, 0x55C7,
- 0xB6DF, 0x55D1, 0xB6E0, 0x55E3, 0xB6E1, 0x55E4, 0xB6E2, 0x55EF, 0xB6E3, 0x55DA, 0xB6E4, 0x55E1, 0xB6E5, 0x55C5, 0xB6E6, 0x55C6,
- 0xB6E7, 0x55E5, 0xB6E8, 0x55C9, 0xB6E9, 0x5712, 0xB6EA, 0x5713, 0xB6EB, 0x585E, 0xB6EC, 0x5851, 0xB6ED, 0x5858, 0xB6EE, 0x5857,
- 0xB6EF, 0x585A, 0xB6F0, 0x5854, 0xB6F1, 0x586B, 0xB6F2, 0x584C, 0xB6F3, 0x586D, 0xB6F4, 0x584A, 0xB6F5, 0x5862, 0xB6F6, 0x5852,
- 0xB6F7, 0x584B, 0xB6F8, 0x5967, 0xB6F9, 0x5AC1, 0xB6FA, 0x5AC9, 0xB6FB, 0x5ACC, 0xB6FC, 0x5ABE, 0xB6FD, 0x5ABD, 0xB6FE, 0x5ABC,
- 0xB740, 0x5AB3, 0xB741, 0x5AC2, 0xB742, 0x5AB2, 0xB743, 0x5D69, 0xB744, 0x5D6F, 0xB745, 0x5E4C, 0xB746, 0x5E79, 0xB747, 0x5EC9,
- 0xB748, 0x5EC8, 0xB749, 0x5F12, 0xB74A, 0x5F59, 0xB74B, 0x5FAC, 0xB74C, 0x5FAE, 0xB74D, 0x611A, 0xB74E, 0x610F, 0xB74F, 0x6148,
- 0xB750, 0x611F, 0xB751, 0x60F3, 0xB752, 0x611B, 0xB753, 0x60F9, 0xB754, 0x6101, 0xB755, 0x6108, 0xB756, 0x614E, 0xB757, 0x614C,
- 0xB758, 0x6144, 0xB759, 0x614D, 0xB75A, 0x613E, 0xB75B, 0x6134, 0xB75C, 0x6127, 0xB75D, 0x610D, 0xB75E, 0x6106, 0xB75F, 0x6137,
- 0xB760, 0x6221, 0xB761, 0x6222, 0xB762, 0x6413, 0xB763, 0x643E, 0xB764, 0x641E, 0xB765, 0x642A, 0xB766, 0x642D, 0xB767, 0x643D,
- 0xB768, 0x642C, 0xB769, 0x640F, 0xB76A, 0x641C, 0xB76B, 0x6414, 0xB76C, 0x640D, 0xB76D, 0x6436, 0xB76E, 0x6416, 0xB76F, 0x6417,
- 0xB770, 0x6406, 0xB771, 0x656C, 0xB772, 0x659F, 0xB773, 0x65B0, 0xB774, 0x6697, 0xB775, 0x6689, 0xB776, 0x6687, 0xB777, 0x6688,
- 0xB778, 0x6696, 0xB779, 0x6684, 0xB77A, 0x6698, 0xB77B, 0x668D, 0xB77C, 0x6703, 0xB77D, 0x6994, 0xB77E, 0x696D, 0xB7A1, 0x695A,
- 0xB7A2, 0x6977, 0xB7A3, 0x6960, 0xB7A4, 0x6954, 0xB7A5, 0x6975, 0xB7A6, 0x6930, 0xB7A7, 0x6982, 0xB7A8, 0x694A, 0xB7A9, 0x6968,
- 0xB7AA, 0x696B, 0xB7AB, 0x695E, 0xB7AC, 0x6953, 0xB7AD, 0x6979, 0xB7AE, 0x6986, 0xB7AF, 0x695D, 0xB7B0, 0x6963, 0xB7B1, 0x695B,
- 0xB7B2, 0x6B47, 0xB7B3, 0x6B72, 0xB7B4, 0x6BC0, 0xB7B5, 0x6BBF, 0xB7B6, 0x6BD3, 0xB7B7, 0x6BFD, 0xB7B8, 0x6EA2, 0xB7B9, 0x6EAF,
- 0xB7BA, 0x6ED3, 0xB7BB, 0x6EB6, 0xB7BC, 0x6EC2, 0xB7BD, 0x6E90, 0xB7BE, 0x6E9D, 0xB7BF, 0x6EC7, 0xB7C0, 0x6EC5, 0xB7C1, 0x6EA5,
- 0xB7C2, 0x6E98, 0xB7C3, 0x6EBC, 0xB7C4, 0x6EBA, 0xB7C5, 0x6EAB, 0xB7C6, 0x6ED1, 0xB7C7, 0x6E96, 0xB7C8, 0x6E9C, 0xB7C9, 0x6EC4,
- 0xB7CA, 0x6ED4, 0xB7CB, 0x6EAA, 0xB7CC, 0x6EA7, 0xB7CD, 0x6EB4, 0xB7CE, 0x714E, 0xB7CF, 0x7159, 0xB7D0, 0x7169, 0xB7D1, 0x7164,
- 0xB7D2, 0x7149, 0xB7D3, 0x7167, 0xB7D4, 0x715C, 0xB7D5, 0x716C, 0xB7D6, 0x7166, 0xB7D7, 0x714C, 0xB7D8, 0x7165, 0xB7D9, 0x715E,
- 0xB7DA, 0x7146, 0xB7DB, 0x7168, 0xB7DC, 0x7156, 0xB7DD, 0x723A, 0xB7DE, 0x7252, 0xB7DF, 0x7337, 0xB7E0, 0x7345, 0xB7E1, 0x733F,
- 0xB7E2, 0x733E, 0xB7E3, 0x746F, 0xB7E4, 0x745A, 0xB7E5, 0x7455, 0xB7E6, 0x745F, 0xB7E7, 0x745E, 0xB7E8, 0x7441, 0xB7E9, 0x743F,
- 0xB7EA, 0x7459, 0xB7EB, 0x745B, 0xB7EC, 0x745C, 0xB7ED, 0x7576, 0xB7EE, 0x7578, 0xB7EF, 0x7600, 0xB7F0, 0x75F0, 0xB7F1, 0x7601,
- 0xB7F2, 0x75F2, 0xB7F3, 0x75F1, 0xB7F4, 0x75FA, 0xB7F5, 0x75FF, 0xB7F6, 0x75F4, 0xB7F7, 0x75F3, 0xB7F8, 0x76DE, 0xB7F9, 0x76DF,
- 0xB7FA, 0x775B, 0xB7FB, 0x776B, 0xB7FC, 0x7766, 0xB7FD, 0x775E, 0xB7FE, 0x7763, 0xB840, 0x7779, 0xB841, 0x776A, 0xB842, 0x776C,
- 0xB843, 0x775C, 0xB844, 0x7765, 0xB845, 0x7768, 0xB846, 0x7762, 0xB847, 0x77EE, 0xB848, 0x788E, 0xB849, 0x78B0, 0xB84A, 0x7897,
- 0xB84B, 0x7898, 0xB84C, 0x788C, 0xB84D, 0x7889, 0xB84E, 0x787C, 0xB84F, 0x7891, 0xB850, 0x7893, 0xB851, 0x787F, 0xB852, 0x797A,
- 0xB853, 0x797F, 0xB854, 0x7981, 0xB855, 0x842C, 0xB856, 0x79BD, 0xB857, 0x7A1C, 0xB858, 0x7A1A, 0xB859, 0x7A20, 0xB85A, 0x7A14,
- 0xB85B, 0x7A1F, 0xB85C, 0x7A1E, 0xB85D, 0x7A9F, 0xB85E, 0x7AA0, 0xB85F, 0x7B77, 0xB860, 0x7BC0, 0xB861, 0x7B60, 0xB862, 0x7B6E,
- 0xB863, 0x7B67, 0xB864, 0x7CB1, 0xB865, 0x7CB3, 0xB866, 0x7CB5, 0xB867, 0x7D93, 0xB868, 0x7D79, 0xB869, 0x7D91, 0xB86A, 0x7D81,
- 0xB86B, 0x7D8F, 0xB86C, 0x7D5B, 0xB86D, 0x7F6E, 0xB86E, 0x7F69, 0xB86F, 0x7F6A, 0xB870, 0x7F72, 0xB871, 0x7FA9, 0xB872, 0x7FA8,
- 0xB873, 0x7FA4, 0xB874, 0x8056, 0xB875, 0x8058, 0xB876, 0x8086, 0xB877, 0x8084, 0xB878, 0x8171, 0xB879, 0x8170, 0xB87A, 0x8178,
- 0xB87B, 0x8165, 0xB87C, 0x816E, 0xB87D, 0x8173, 0xB87E, 0x816B, 0xB8A1, 0x8179, 0xB8A2, 0x817A, 0xB8A3, 0x8166, 0xB8A4, 0x8205,
- 0xB8A5, 0x8247, 0xB8A6, 0x8482, 0xB8A7, 0x8477, 0xB8A8, 0x843D, 0xB8A9, 0x8431, 0xB8AA, 0x8475, 0xB8AB, 0x8466, 0xB8AC, 0x846B,
- 0xB8AD, 0x8449, 0xB8AE, 0x846C, 0xB8AF, 0x845B, 0xB8B0, 0x843C, 0xB8B1, 0x8435, 0xB8B2, 0x8461, 0xB8B3, 0x8463, 0xB8B4, 0x8469,
- 0xB8B5, 0x846D, 0xB8B6, 0x8446, 0xB8B7, 0x865E, 0xB8B8, 0x865C, 0xB8B9, 0x865F, 0xB8BA, 0x86F9, 0xB8BB, 0x8713, 0xB8BC, 0x8708,
- 0xB8BD, 0x8707, 0xB8BE, 0x8700, 0xB8BF, 0x86FE, 0xB8C0, 0x86FB, 0xB8C1, 0x8702, 0xB8C2, 0x8703, 0xB8C3, 0x8706, 0xB8C4, 0x870A,
- 0xB8C5, 0x8859, 0xB8C6, 0x88DF, 0xB8C7, 0x88D4, 0xB8C8, 0x88D9, 0xB8C9, 0x88DC, 0xB8CA, 0x88D8, 0xB8CB, 0x88DD, 0xB8CC, 0x88E1,
- 0xB8CD, 0x88CA, 0xB8CE, 0x88D5, 0xB8CF, 0x88D2, 0xB8D0, 0x899C, 0xB8D1, 0x89E3, 0xB8D2, 0x8A6B, 0xB8D3, 0x8A72, 0xB8D4, 0x8A73,
- 0xB8D5, 0x8A66, 0xB8D6, 0x8A69, 0xB8D7, 0x8A70, 0xB8D8, 0x8A87, 0xB8D9, 0x8A7C, 0xB8DA, 0x8A63, 0xB8DB, 0x8AA0, 0xB8DC, 0x8A71,
- 0xB8DD, 0x8A85, 0xB8DE, 0x8A6D, 0xB8DF, 0x8A62, 0xB8E0, 0x8A6E, 0xB8E1, 0x8A6C, 0xB8E2, 0x8A79, 0xB8E3, 0x8A7B, 0xB8E4, 0x8A3E,
- 0xB8E5, 0x8A68, 0xB8E6, 0x8C62, 0xB8E7, 0x8C8A, 0xB8E8, 0x8C89, 0xB8E9, 0x8CCA, 0xB8EA, 0x8CC7, 0xB8EB, 0x8CC8, 0xB8EC, 0x8CC4,
- 0xB8ED, 0x8CB2, 0xB8EE, 0x8CC3, 0xB8EF, 0x8CC2, 0xB8F0, 0x8CC5, 0xB8F1, 0x8DE1, 0xB8F2, 0x8DDF, 0xB8F3, 0x8DE8, 0xB8F4, 0x8DEF,
- 0xB8F5, 0x8DF3, 0xB8F6, 0x8DFA, 0xB8F7, 0x8DEA, 0xB8F8, 0x8DE4, 0xB8F9, 0x8DE6, 0xB8FA, 0x8EB2, 0xB8FB, 0x8F03, 0xB8FC, 0x8F09,
- 0xB8FD, 0x8EFE, 0xB8FE, 0x8F0A, 0xB940, 0x8F9F, 0xB941, 0x8FB2, 0xB942, 0x904B, 0xB943, 0x904A, 0xB944, 0x9053, 0xB945, 0x9042,
- 0xB946, 0x9054, 0xB947, 0x903C, 0xB948, 0x9055, 0xB949, 0x9050, 0xB94A, 0x9047, 0xB94B, 0x904F, 0xB94C, 0x904E, 0xB94D, 0x904D,
- 0xB94E, 0x9051, 0xB94F, 0x903E, 0xB950, 0x9041, 0xB951, 0x9112, 0xB952, 0x9117, 0xB953, 0x916C, 0xB954, 0x916A, 0xB955, 0x9169,
- 0xB956, 0x91C9, 0xB957, 0x9237, 0xB958, 0x9257, 0xB959, 0x9238, 0xB95A, 0x923D, 0xB95B, 0x9240, 0xB95C, 0x923E, 0xB95D, 0x925B,
- 0xB95E, 0x924B, 0xB95F, 0x9264, 0xB960, 0x9251, 0xB961, 0x9234, 0xB962, 0x9249, 0xB963, 0x924D, 0xB964, 0x9245, 0xB965, 0x9239,
- 0xB966, 0x923F, 0xB967, 0x925A, 0xB968, 0x9598, 0xB969, 0x9698, 0xB96A, 0x9694, 0xB96B, 0x9695, 0xB96C, 0x96CD, 0xB96D, 0x96CB,
- 0xB96E, 0x96C9, 0xB96F, 0x96CA, 0xB970, 0x96F7, 0xB971, 0x96FB, 0xB972, 0x96F9, 0xB973, 0x96F6, 0xB974, 0x9756, 0xB975, 0x9774,
- 0xB976, 0x9776, 0xB977, 0x9810, 0xB978, 0x9811, 0xB979, 0x9813, 0xB97A, 0x980A, 0xB97B, 0x9812, 0xB97C, 0x980C, 0xB97D, 0x98FC,
- 0xB97E, 0x98F4, 0xB9A1, 0x98FD, 0xB9A2, 0x98FE, 0xB9A3, 0x99B3, 0xB9A4, 0x99B1, 0xB9A5, 0x99B4, 0xB9A6, 0x9AE1, 0xB9A7, 0x9CE9,
- 0xB9A8, 0x9E82, 0xB9A9, 0x9F0E, 0xB9AA, 0x9F13, 0xB9AB, 0x9F20, 0xB9AC, 0x50E7, 0xB9AD, 0x50EE, 0xB9AE, 0x50E5, 0xB9AF, 0x50D6,
- 0xB9B0, 0x50ED, 0xB9B1, 0x50DA, 0xB9B2, 0x50D5, 0xB9B3, 0x50CF, 0xB9B4, 0x50D1, 0xB9B5, 0x50F1, 0xB9B6, 0x50CE, 0xB9B7, 0x50E9,
- 0xB9B8, 0x5162, 0xB9B9, 0x51F3, 0xB9BA, 0x5283, 0xB9BB, 0x5282, 0xB9BC, 0x5331, 0xB9BD, 0x53AD, 0xB9BE, 0x55FE, 0xB9BF, 0x5600,
- 0xB9C0, 0x561B, 0xB9C1, 0x5617, 0xB9C2, 0x55FD, 0xB9C3, 0x5614, 0xB9C4, 0x5606, 0xB9C5, 0x5609, 0xB9C6, 0x560D, 0xB9C7, 0x560E,
- 0xB9C8, 0x55F7, 0xB9C9, 0x5616, 0xB9CA, 0x561F, 0xB9CB, 0x5608, 0xB9CC, 0x5610, 0xB9CD, 0x55F6, 0xB9CE, 0x5718, 0xB9CF, 0x5716,
- 0xB9D0, 0x5875, 0xB9D1, 0x587E, 0xB9D2, 0x5883, 0xB9D3, 0x5893, 0xB9D4, 0x588A, 0xB9D5, 0x5879, 0xB9D6, 0x5885, 0xB9D7, 0x587D,
- 0xB9D8, 0x58FD, 0xB9D9, 0x5925, 0xB9DA, 0x5922, 0xB9DB, 0x5924, 0xB9DC, 0x596A, 0xB9DD, 0x5969, 0xB9DE, 0x5AE1, 0xB9DF, 0x5AE6,
- 0xB9E0, 0x5AE9, 0xB9E1, 0x5AD7, 0xB9E2, 0x5AD6, 0xB9E3, 0x5AD8, 0xB9E4, 0x5AE3, 0xB9E5, 0x5B75, 0xB9E6, 0x5BDE, 0xB9E7, 0x5BE7,
- 0xB9E8, 0x5BE1, 0xB9E9, 0x5BE5, 0xB9EA, 0x5BE6, 0xB9EB, 0x5BE8, 0xB9EC, 0x5BE2, 0xB9ED, 0x5BE4, 0xB9EE, 0x5BDF, 0xB9EF, 0x5C0D,
- 0xB9F0, 0x5C62, 0xB9F1, 0x5D84, 0xB9F2, 0x5D87, 0xB9F3, 0x5E5B, 0xB9F4, 0x5E63, 0xB9F5, 0x5E55, 0xB9F6, 0x5E57, 0xB9F7, 0x5E54,
- 0xB9F8, 0x5ED3, 0xB9F9, 0x5ED6, 0xB9FA, 0x5F0A, 0xB9FB, 0x5F46, 0xB9FC, 0x5F70, 0xB9FD, 0x5FB9, 0xB9FE, 0x6147, 0xBA40, 0x613F,
- 0xBA41, 0x614B, 0xBA42, 0x6177, 0xBA43, 0x6162, 0xBA44, 0x6163, 0xBA45, 0x615F, 0xBA46, 0x615A, 0xBA47, 0x6158, 0xBA48, 0x6175,
- 0xBA49, 0x622A, 0xBA4A, 0x6487, 0xBA4B, 0x6458, 0xBA4C, 0x6454, 0xBA4D, 0x64A4, 0xBA4E, 0x6478, 0xBA4F, 0x645F, 0xBA50, 0x647A,
- 0xBA51, 0x6451, 0xBA52, 0x6467, 0xBA53, 0x6434, 0xBA54, 0x646D, 0xBA55, 0x647B, 0xBA56, 0x6572, 0xBA57, 0x65A1, 0xBA58, 0x65D7,
- 0xBA59, 0x65D6, 0xBA5A, 0x66A2, 0xBA5B, 0x66A8, 0xBA5C, 0x669D, 0xBA5D, 0x699C, 0xBA5E, 0x69A8, 0xBA5F, 0x6995, 0xBA60, 0x69C1,
- 0xBA61, 0x69AE, 0xBA62, 0x69D3, 0xBA63, 0x69CB, 0xBA64, 0x699B, 0xBA65, 0x69B7, 0xBA66, 0x69BB, 0xBA67, 0x69AB, 0xBA68, 0x69B4,
- 0xBA69, 0x69D0, 0xBA6A, 0x69CD, 0xBA6B, 0x69AD, 0xBA6C, 0x69CC, 0xBA6D, 0x69A6, 0xBA6E, 0x69C3, 0xBA6F, 0x69A3, 0xBA70, 0x6B49,
- 0xBA71, 0x6B4C, 0xBA72, 0x6C33, 0xBA73, 0x6F33, 0xBA74, 0x6F14, 0xBA75, 0x6EFE, 0xBA76, 0x6F13, 0xBA77, 0x6EF4, 0xBA78, 0x6F29,
- 0xBA79, 0x6F3E, 0xBA7A, 0x6F20, 0xBA7B, 0x6F2C, 0xBA7C, 0x6F0F, 0xBA7D, 0x6F02, 0xBA7E, 0x6F22, 0xBAA1, 0x6EFF, 0xBAA2, 0x6EEF,
- 0xBAA3, 0x6F06, 0xBAA4, 0x6F31, 0xBAA5, 0x6F38, 0xBAA6, 0x6F32, 0xBAA7, 0x6F23, 0xBAA8, 0x6F15, 0xBAA9, 0x6F2B, 0xBAAA, 0x6F2F,
- 0xBAAB, 0x6F88, 0xBAAC, 0x6F2A, 0xBAAD, 0x6EEC, 0xBAAE, 0x6F01, 0xBAAF, 0x6EF2, 0xBAB0, 0x6ECC, 0xBAB1, 0x6EF7, 0xBAB2, 0x7194,
- 0xBAB3, 0x7199, 0xBAB4, 0x717D, 0xBAB5, 0x718A, 0xBAB6, 0x7184, 0xBAB7, 0x7192, 0xBAB8, 0x723E, 0xBAB9, 0x7292, 0xBABA, 0x7296,
- 0xBABB, 0x7344, 0xBABC, 0x7350, 0xBABD, 0x7464, 0xBABE, 0x7463, 0xBABF, 0x746A, 0xBAC0, 0x7470, 0xBAC1, 0x746D, 0xBAC2, 0x7504,
- 0xBAC3, 0x7591, 0xBAC4, 0x7627, 0xBAC5, 0x760D, 0xBAC6, 0x760B, 0xBAC7, 0x7609, 0xBAC8, 0x7613, 0xBAC9, 0x76E1, 0xBACA, 0x76E3,
- 0xBACB, 0x7784, 0xBACC, 0x777D, 0xBACD, 0x777F, 0xBACE, 0x7761, 0xBACF, 0x78C1, 0xBAD0, 0x789F, 0xBAD1, 0x78A7, 0xBAD2, 0x78B3,
- 0xBAD3, 0x78A9, 0xBAD4, 0x78A3, 0xBAD5, 0x798E, 0xBAD6, 0x798F, 0xBAD7, 0x798D, 0xBAD8, 0x7A2E, 0xBAD9, 0x7A31, 0xBADA, 0x7AAA,
- 0xBADB, 0x7AA9, 0xBADC, 0x7AED, 0xBADD, 0x7AEF, 0xBADE, 0x7BA1, 0xBADF, 0x7B95, 0xBAE0, 0x7B8B, 0xBAE1, 0x7B75, 0xBAE2, 0x7B97,
- 0xBAE3, 0x7B9D, 0xBAE4, 0x7B94, 0xBAE5, 0x7B8F, 0xBAE6, 0x7BB8, 0xBAE7, 0x7B87, 0xBAE8, 0x7B84, 0xBAE9, 0x7CB9, 0xBAEA, 0x7CBD,
- 0xBAEB, 0x7CBE, 0xBAEC, 0x7DBB, 0xBAED, 0x7DB0, 0xBAEE, 0x7D9C, 0xBAEF, 0x7DBD, 0xBAF0, 0x7DBE, 0xBAF1, 0x7DA0, 0xBAF2, 0x7DCA,
- 0xBAF3, 0x7DB4, 0xBAF4, 0x7DB2, 0xBAF5, 0x7DB1, 0xBAF6, 0x7DBA, 0xBAF7, 0x7DA2, 0xBAF8, 0x7DBF, 0xBAF9, 0x7DB5, 0xBAFA, 0x7DB8,
- 0xBAFB, 0x7DAD, 0xBAFC, 0x7DD2, 0xBAFD, 0x7DC7, 0xBAFE, 0x7DAC, 0xBB40, 0x7F70, 0xBB41, 0x7FE0, 0xBB42, 0x7FE1, 0xBB43, 0x7FDF,
- 0xBB44, 0x805E, 0xBB45, 0x805A, 0xBB46, 0x8087, 0xBB47, 0x8150, 0xBB48, 0x8180, 0xBB49, 0x818F, 0xBB4A, 0x8188, 0xBB4B, 0x818A,
- 0xBB4C, 0x817F, 0xBB4D, 0x8182, 0xBB4E, 0x81E7, 0xBB4F, 0x81FA, 0xBB50, 0x8207, 0xBB51, 0x8214, 0xBB52, 0x821E, 0xBB53, 0x824B,
- 0xBB54, 0x84C9, 0xBB55, 0x84BF, 0xBB56, 0x84C6, 0xBB57, 0x84C4, 0xBB58, 0x8499, 0xBB59, 0x849E, 0xBB5A, 0x84B2, 0xBB5B, 0x849C,
- 0xBB5C, 0x84CB, 0xBB5D, 0x84B8, 0xBB5E, 0x84C0, 0xBB5F, 0x84D3, 0xBB60, 0x8490, 0xBB61, 0x84BC, 0xBB62, 0x84D1, 0xBB63, 0x84CA,
- 0xBB64, 0x873F, 0xBB65, 0x871C, 0xBB66, 0x873B, 0xBB67, 0x8722, 0xBB68, 0x8725, 0xBB69, 0x8734, 0xBB6A, 0x8718, 0xBB6B, 0x8755,
- 0xBB6C, 0x8737, 0xBB6D, 0x8729, 0xBB6E, 0x88F3, 0xBB6F, 0x8902, 0xBB70, 0x88F4, 0xBB71, 0x88F9, 0xBB72, 0x88F8, 0xBB73, 0x88FD,
- 0xBB74, 0x88E8, 0xBB75, 0x891A, 0xBB76, 0x88EF, 0xBB77, 0x8AA6, 0xBB78, 0x8A8C, 0xBB79, 0x8A9E, 0xBB7A, 0x8AA3, 0xBB7B, 0x8A8D,
- 0xBB7C, 0x8AA1, 0xBB7D, 0x8A93, 0xBB7E, 0x8AA4, 0xBBA1, 0x8AAA, 0xBBA2, 0x8AA5, 0xBBA3, 0x8AA8, 0xBBA4, 0x8A98, 0xBBA5, 0x8A91,
- 0xBBA6, 0x8A9A, 0xBBA7, 0x8AA7, 0xBBA8, 0x8C6A, 0xBBA9, 0x8C8D, 0xBBAA, 0x8C8C, 0xBBAB, 0x8CD3, 0xBBAC, 0x8CD1, 0xBBAD, 0x8CD2,
- 0xBBAE, 0x8D6B, 0xBBAF, 0x8D99, 0xBBB0, 0x8D95, 0xBBB1, 0x8DFC, 0xBBB2, 0x8F14, 0xBBB3, 0x8F12, 0xBBB4, 0x8F15, 0xBBB5, 0x8F13,
- 0xBBB6, 0x8FA3, 0xBBB7, 0x9060, 0xBBB8, 0x9058, 0xBBB9, 0x905C, 0xBBBA, 0x9063, 0xBBBB, 0x9059, 0xBBBC, 0x905E, 0xBBBD, 0x9062,
- 0xBBBE, 0x905D, 0xBBBF, 0x905B, 0xBBC0, 0x9119, 0xBBC1, 0x9118, 0xBBC2, 0x911E, 0xBBC3, 0x9175, 0xBBC4, 0x9178, 0xBBC5, 0x9177,
- 0xBBC6, 0x9174, 0xBBC7, 0x9278, 0xBBC8, 0x9280, 0xBBC9, 0x9285, 0xBBCA, 0x9298, 0xBBCB, 0x9296, 0xBBCC, 0x927B, 0xBBCD, 0x9293,
- 0xBBCE, 0x929C, 0xBBCF, 0x92A8, 0xBBD0, 0x927C, 0xBBD1, 0x9291, 0xBBD2, 0x95A1, 0xBBD3, 0x95A8, 0xBBD4, 0x95A9, 0xBBD5, 0x95A3,
- 0xBBD6, 0x95A5, 0xBBD7, 0x95A4, 0xBBD8, 0x9699, 0xBBD9, 0x969C, 0xBBDA, 0x969B, 0xBBDB, 0x96CC, 0xBBDC, 0x96D2, 0xBBDD, 0x9700,
- 0xBBDE, 0x977C, 0xBBDF, 0x9785, 0xBBE0, 0x97F6, 0xBBE1, 0x9817, 0xBBE2, 0x9818, 0xBBE3, 0x98AF, 0xBBE4, 0x98B1, 0xBBE5, 0x9903,
- 0xBBE6, 0x9905, 0xBBE7, 0x990C, 0xBBE8, 0x9909, 0xBBE9, 0x99C1, 0xBBEA, 0x9AAF, 0xBBEB, 0x9AB0, 0xBBEC, 0x9AE6, 0xBBED, 0x9B41,
- 0xBBEE, 0x9B42, 0xBBEF, 0x9CF4, 0xBBF0, 0x9CF6, 0xBBF1, 0x9CF3, 0xBBF2, 0x9EBC, 0xBBF3, 0x9F3B, 0xBBF4, 0x9F4A, 0xBBF5, 0x5104,
- 0xBBF6, 0x5100, 0xBBF7, 0x50FB, 0xBBF8, 0x50F5, 0xBBF9, 0x50F9, 0xBBFA, 0x5102, 0xBBFB, 0x5108, 0xBBFC, 0x5109, 0xBBFD, 0x5105,
- 0xBBFE, 0x51DC, 0xBC40, 0x5287, 0xBC41, 0x5288, 0xBC42, 0x5289, 0xBC43, 0x528D, 0xBC44, 0x528A, 0xBC45, 0x52F0, 0xBC46, 0x53B2,
- 0xBC47, 0x562E, 0xBC48, 0x563B, 0xBC49, 0x5639, 0xBC4A, 0x5632, 0xBC4B, 0x563F, 0xBC4C, 0x5634, 0xBC4D, 0x5629, 0xBC4E, 0x5653,
- 0xBC4F, 0x564E, 0xBC50, 0x5657, 0xBC51, 0x5674, 0xBC52, 0x5636, 0xBC53, 0x562F, 0xBC54, 0x5630, 0xBC55, 0x5880, 0xBC56, 0x589F,
- 0xBC57, 0x589E, 0xBC58, 0x58B3, 0xBC59, 0x589C, 0xBC5A, 0x58AE, 0xBC5B, 0x58A9, 0xBC5C, 0x58A6, 0xBC5D, 0x596D, 0xBC5E, 0x5B09,
- 0xBC5F, 0x5AFB, 0xBC60, 0x5B0B, 0xBC61, 0x5AF5, 0xBC62, 0x5B0C, 0xBC63, 0x5B08, 0xBC64, 0x5BEE, 0xBC65, 0x5BEC, 0xBC66, 0x5BE9,
- 0xBC67, 0x5BEB, 0xBC68, 0x5C64, 0xBC69, 0x5C65, 0xBC6A, 0x5D9D, 0xBC6B, 0x5D94, 0xBC6C, 0x5E62, 0xBC6D, 0x5E5F, 0xBC6E, 0x5E61,
- 0xBC6F, 0x5EE2, 0xBC70, 0x5EDA, 0xBC71, 0x5EDF, 0xBC72, 0x5EDD, 0xBC73, 0x5EE3, 0xBC74, 0x5EE0, 0xBC75, 0x5F48, 0xBC76, 0x5F71,
- 0xBC77, 0x5FB7, 0xBC78, 0x5FB5, 0xBC79, 0x6176, 0xBC7A, 0x6167, 0xBC7B, 0x616E, 0xBC7C, 0x615D, 0xBC7D, 0x6155, 0xBC7E, 0x6182,
- 0xBCA1, 0x617C, 0xBCA2, 0x6170, 0xBCA3, 0x616B, 0xBCA4, 0x617E, 0xBCA5, 0x61A7, 0xBCA6, 0x6190, 0xBCA7, 0x61AB, 0xBCA8, 0x618E,
- 0xBCA9, 0x61AC, 0xBCAA, 0x619A, 0xBCAB, 0x61A4, 0xBCAC, 0x6194, 0xBCAD, 0x61AE, 0xBCAE, 0x622E, 0xBCAF, 0x6469, 0xBCB0, 0x646F,
- 0xBCB1, 0x6479, 0xBCB2, 0x649E, 0xBCB3, 0x64B2, 0xBCB4, 0x6488, 0xBCB5, 0x6490, 0xBCB6, 0x64B0, 0xBCB7, 0x64A5, 0xBCB8, 0x6493,
- 0xBCB9, 0x6495, 0xBCBA, 0x64A9, 0xBCBB, 0x6492, 0xBCBC, 0x64AE, 0xBCBD, 0x64AD, 0xBCBE, 0x64AB, 0xBCBF, 0x649A, 0xBCC0, 0x64AC,
- 0xBCC1, 0x6499, 0xBCC2, 0x64A2, 0xBCC3, 0x64B3, 0xBCC4, 0x6575, 0xBCC5, 0x6577, 0xBCC6, 0x6578, 0xBCC7, 0x66AE, 0xBCC8, 0x66AB,
- 0xBCC9, 0x66B4, 0xBCCA, 0x66B1, 0xBCCB, 0x6A23, 0xBCCC, 0x6A1F, 0xBCCD, 0x69E8, 0xBCCE, 0x6A01, 0xBCCF, 0x6A1E, 0xBCD0, 0x6A19,
- 0xBCD1, 0x69FD, 0xBCD2, 0x6A21, 0xBCD3, 0x6A13, 0xBCD4, 0x6A0A, 0xBCD5, 0x69F3, 0xBCD6, 0x6A02, 0xBCD7, 0x6A05, 0xBCD8, 0x69ED,
- 0xBCD9, 0x6A11, 0xBCDA, 0x6B50, 0xBCDB, 0x6B4E, 0xBCDC, 0x6BA4, 0xBCDD, 0x6BC5, 0xBCDE, 0x6BC6, 0xBCDF, 0x6F3F, 0xBCE0, 0x6F7C,
- 0xBCE1, 0x6F84, 0xBCE2, 0x6F51, 0xBCE3, 0x6F66, 0xBCE4, 0x6F54, 0xBCE5, 0x6F86, 0xBCE6, 0x6F6D, 0xBCE7, 0x6F5B, 0xBCE8, 0x6F78,
- 0xBCE9, 0x6F6E, 0xBCEA, 0x6F8E, 0xBCEB, 0x6F7A, 0xBCEC, 0x6F70, 0xBCED, 0x6F64, 0xBCEE, 0x6F97, 0xBCEF, 0x6F58, 0xBCF0, 0x6ED5,
- 0xBCF1, 0x6F6F, 0xBCF2, 0x6F60, 0xBCF3, 0x6F5F, 0xBCF4, 0x719F, 0xBCF5, 0x71AC, 0xBCF6, 0x71B1, 0xBCF7, 0x71A8, 0xBCF8, 0x7256,
- 0xBCF9, 0x729B, 0xBCFA, 0x734E, 0xBCFB, 0x7357, 0xBCFC, 0x7469, 0xBCFD, 0x748B, 0xBCFE, 0x7483, 0xBD40, 0x747E, 0xBD41, 0x7480,
- 0xBD42, 0x757F, 0xBD43, 0x7620, 0xBD44, 0x7629, 0xBD45, 0x761F, 0xBD46, 0x7624, 0xBD47, 0x7626, 0xBD48, 0x7621, 0xBD49, 0x7622,
- 0xBD4A, 0x769A, 0xBD4B, 0x76BA, 0xBD4C, 0x76E4, 0xBD4D, 0x778E, 0xBD4E, 0x7787, 0xBD4F, 0x778C, 0xBD50, 0x7791, 0xBD51, 0x778B,
- 0xBD52, 0x78CB, 0xBD53, 0x78C5, 0xBD54, 0x78BA, 0xBD55, 0x78CA, 0xBD56, 0x78BE, 0xBD57, 0x78D5, 0xBD58, 0x78BC, 0xBD59, 0x78D0,
- 0xBD5A, 0x7A3F, 0xBD5B, 0x7A3C, 0xBD5C, 0x7A40, 0xBD5D, 0x7A3D, 0xBD5E, 0x7A37, 0xBD5F, 0x7A3B, 0xBD60, 0x7AAF, 0xBD61, 0x7AAE,
- 0xBD62, 0x7BAD, 0xBD63, 0x7BB1, 0xBD64, 0x7BC4, 0xBD65, 0x7BB4, 0xBD66, 0x7BC6, 0xBD67, 0x7BC7, 0xBD68, 0x7BC1, 0xBD69, 0x7BA0,
- 0xBD6A, 0x7BCC, 0xBD6B, 0x7CCA, 0xBD6C, 0x7DE0, 0xBD6D, 0x7DF4, 0xBD6E, 0x7DEF, 0xBD6F, 0x7DFB, 0xBD70, 0x7DD8, 0xBD71, 0x7DEC,
- 0xBD72, 0x7DDD, 0xBD73, 0x7DE8, 0xBD74, 0x7DE3, 0xBD75, 0x7DDA, 0xBD76, 0x7DDE, 0xBD77, 0x7DE9, 0xBD78, 0x7D9E, 0xBD79, 0x7DD9,
- 0xBD7A, 0x7DF2, 0xBD7B, 0x7DF9, 0xBD7C, 0x7F75, 0xBD7D, 0x7F77, 0xBD7E, 0x7FAF, 0xBDA1, 0x7FE9, 0xBDA2, 0x8026, 0xBDA3, 0x819B,
- 0xBDA4, 0x819C, 0xBDA5, 0x819D, 0xBDA6, 0x81A0, 0xBDA7, 0x819A, 0xBDA8, 0x8198, 0xBDA9, 0x8517, 0xBDAA, 0x853D, 0xBDAB, 0x851A,
- 0xBDAC, 0x84EE, 0xBDAD, 0x852C, 0xBDAE, 0x852D, 0xBDAF, 0x8513, 0xBDB0, 0x8511, 0xBDB1, 0x8523, 0xBDB2, 0x8521, 0xBDB3, 0x8514,
- 0xBDB4, 0x84EC, 0xBDB5, 0x8525, 0xBDB6, 0x84FF, 0xBDB7, 0x8506, 0xBDB8, 0x8782, 0xBDB9, 0x8774, 0xBDBA, 0x8776, 0xBDBB, 0x8760,
- 0xBDBC, 0x8766, 0xBDBD, 0x8778, 0xBDBE, 0x8768, 0xBDBF, 0x8759, 0xBDC0, 0x8757, 0xBDC1, 0x874C, 0xBDC2, 0x8753, 0xBDC3, 0x885B,
- 0xBDC4, 0x885D, 0xBDC5, 0x8910, 0xBDC6, 0x8907, 0xBDC7, 0x8912, 0xBDC8, 0x8913, 0xBDC9, 0x8915, 0xBDCA, 0x890A, 0xBDCB, 0x8ABC,
- 0xBDCC, 0x8AD2, 0xBDCD, 0x8AC7, 0xBDCE, 0x8AC4, 0xBDCF, 0x8A95, 0xBDD0, 0x8ACB, 0xBDD1, 0x8AF8, 0xBDD2, 0x8AB2, 0xBDD3, 0x8AC9,
- 0xBDD4, 0x8AC2, 0xBDD5, 0x8ABF, 0xBDD6, 0x8AB0, 0xBDD7, 0x8AD6, 0xBDD8, 0x8ACD, 0xBDD9, 0x8AB6, 0xBDDA, 0x8AB9, 0xBDDB, 0x8ADB,
- 0xBDDC, 0x8C4C, 0xBDDD, 0x8C4E, 0xBDDE, 0x8C6C, 0xBDDF, 0x8CE0, 0xBDE0, 0x8CDE, 0xBDE1, 0x8CE6, 0xBDE2, 0x8CE4, 0xBDE3, 0x8CEC,
- 0xBDE4, 0x8CED, 0xBDE5, 0x8CE2, 0xBDE6, 0x8CE3, 0xBDE7, 0x8CDC, 0xBDE8, 0x8CEA, 0xBDE9, 0x8CE1, 0xBDEA, 0x8D6D, 0xBDEB, 0x8D9F,
- 0xBDEC, 0x8DA3, 0xBDED, 0x8E2B, 0xBDEE, 0x8E10, 0xBDEF, 0x8E1D, 0xBDF0, 0x8E22, 0xBDF1, 0x8E0F, 0xBDF2, 0x8E29, 0xBDF3, 0x8E1F,
- 0xBDF4, 0x8E21, 0xBDF5, 0x8E1E, 0xBDF6, 0x8EBA, 0xBDF7, 0x8F1D, 0xBDF8, 0x8F1B, 0xBDF9, 0x8F1F, 0xBDFA, 0x8F29, 0xBDFB, 0x8F26,
- 0xBDFC, 0x8F2A, 0xBDFD, 0x8F1C, 0xBDFE, 0x8F1E, 0xBE40, 0x8F25, 0xBE41, 0x9069, 0xBE42, 0x906E, 0xBE43, 0x9068, 0xBE44, 0x906D,
- 0xBE45, 0x9077, 0xBE46, 0x9130, 0xBE47, 0x912D, 0xBE48, 0x9127, 0xBE49, 0x9131, 0xBE4A, 0x9187, 0xBE4B, 0x9189, 0xBE4C, 0x918B,
- 0xBE4D, 0x9183, 0xBE4E, 0x92C5, 0xBE4F, 0x92BB, 0xBE50, 0x92B7, 0xBE51, 0x92EA, 0xBE52, 0x92AC, 0xBE53, 0x92E4, 0xBE54, 0x92C1,
- 0xBE55, 0x92B3, 0xBE56, 0x92BC, 0xBE57, 0x92D2, 0xBE58, 0x92C7, 0xBE59, 0x92F0, 0xBE5A, 0x92B2, 0xBE5B, 0x95AD, 0xBE5C, 0x95B1,
- 0xBE5D, 0x9704, 0xBE5E, 0x9706, 0xBE5F, 0x9707, 0xBE60, 0x9709, 0xBE61, 0x9760, 0xBE62, 0x978D, 0xBE63, 0x978B, 0xBE64, 0x978F,
- 0xBE65, 0x9821, 0xBE66, 0x982B, 0xBE67, 0x981C, 0xBE68, 0x98B3, 0xBE69, 0x990A, 0xBE6A, 0x9913, 0xBE6B, 0x9912, 0xBE6C, 0x9918,
- 0xBE6D, 0x99DD, 0xBE6E, 0x99D0, 0xBE6F, 0x99DF, 0xBE70, 0x99DB, 0xBE71, 0x99D1, 0xBE72, 0x99D5, 0xBE73, 0x99D2, 0xBE74, 0x99D9,
- 0xBE75, 0x9AB7, 0xBE76, 0x9AEE, 0xBE77, 0x9AEF, 0xBE78, 0x9B27, 0xBE79, 0x9B45, 0xBE7A, 0x9B44, 0xBE7B, 0x9B77, 0xBE7C, 0x9B6F,
- 0xBE7D, 0x9D06, 0xBE7E, 0x9D09, 0xBEA1, 0x9D03, 0xBEA2, 0x9EA9, 0xBEA3, 0x9EBE, 0xBEA4, 0x9ECE, 0xBEA5, 0x58A8, 0xBEA6, 0x9F52,
- 0xBEA7, 0x5112, 0xBEA8, 0x5118, 0xBEA9, 0x5114, 0xBEAA, 0x5110, 0xBEAB, 0x5115, 0xBEAC, 0x5180, 0xBEAD, 0x51AA, 0xBEAE, 0x51DD,
- 0xBEAF, 0x5291, 0xBEB0, 0x5293, 0xBEB1, 0x52F3, 0xBEB2, 0x5659, 0xBEB3, 0x566B, 0xBEB4, 0x5679, 0xBEB5, 0x5669, 0xBEB6, 0x5664,
- 0xBEB7, 0x5678, 0xBEB8, 0x566A, 0xBEB9, 0x5668, 0xBEBA, 0x5665, 0xBEBB, 0x5671, 0xBEBC, 0x566F, 0xBEBD, 0x566C, 0xBEBE, 0x5662,
- 0xBEBF, 0x5676, 0xBEC0, 0x58C1, 0xBEC1, 0x58BE, 0xBEC2, 0x58C7, 0xBEC3, 0x58C5, 0xBEC4, 0x596E, 0xBEC5, 0x5B1D, 0xBEC6, 0x5B34,
- 0xBEC7, 0x5B78, 0xBEC8, 0x5BF0, 0xBEC9, 0x5C0E, 0xBECA, 0x5F4A, 0xBECB, 0x61B2, 0xBECC, 0x6191, 0xBECD, 0x61A9, 0xBECE, 0x618A,
- 0xBECF, 0x61CD, 0xBED0, 0x61B6, 0xBED1, 0x61BE, 0xBED2, 0x61CA, 0xBED3, 0x61C8, 0xBED4, 0x6230, 0xBED5, 0x64C5, 0xBED6, 0x64C1,
- 0xBED7, 0x64CB, 0xBED8, 0x64BB, 0xBED9, 0x64BC, 0xBEDA, 0x64DA, 0xBEDB, 0x64C4, 0xBEDC, 0x64C7, 0xBEDD, 0x64C2, 0xBEDE, 0x64CD,
- 0xBEDF, 0x64BF, 0xBEE0, 0x64D2, 0xBEE1, 0x64D4, 0xBEE2, 0x64BE, 0xBEE3, 0x6574, 0xBEE4, 0x66C6, 0xBEE5, 0x66C9, 0xBEE6, 0x66B9,
- 0xBEE7, 0x66C4, 0xBEE8, 0x66C7, 0xBEE9, 0x66B8, 0xBEEA, 0x6A3D, 0xBEEB, 0x6A38, 0xBEEC, 0x6A3A, 0xBEED, 0x6A59, 0xBEEE, 0x6A6B,
- 0xBEEF, 0x6A58, 0xBEF0, 0x6A39, 0xBEF1, 0x6A44, 0xBEF2, 0x6A62, 0xBEF3, 0x6A61, 0xBEF4, 0x6A4B, 0xBEF5, 0x6A47, 0xBEF6, 0x6A35,
- 0xBEF7, 0x6A5F, 0xBEF8, 0x6A48, 0xBEF9, 0x6B59, 0xBEFA, 0x6B77, 0xBEFB, 0x6C05, 0xBEFC, 0x6FC2, 0xBEFD, 0x6FB1, 0xBEFE, 0x6FA1,
- 0xBF40, 0x6FC3, 0xBF41, 0x6FA4, 0xBF42, 0x6FC1, 0xBF43, 0x6FA7, 0xBF44, 0x6FB3, 0xBF45, 0x6FC0, 0xBF46, 0x6FB9, 0xBF47, 0x6FB6,
- 0xBF48, 0x6FA6, 0xBF49, 0x6FA0, 0xBF4A, 0x6FB4, 0xBF4B, 0x71BE, 0xBF4C, 0x71C9, 0xBF4D, 0x71D0, 0xBF4E, 0x71D2, 0xBF4F, 0x71C8,
- 0xBF50, 0x71D5, 0xBF51, 0x71B9, 0xBF52, 0x71CE, 0xBF53, 0x71D9, 0xBF54, 0x71DC, 0xBF55, 0x71C3, 0xBF56, 0x71C4, 0xBF57, 0x7368,
- 0xBF58, 0x749C, 0xBF59, 0x74A3, 0xBF5A, 0x7498, 0xBF5B, 0x749F, 0xBF5C, 0x749E, 0xBF5D, 0x74E2, 0xBF5E, 0x750C, 0xBF5F, 0x750D,
- 0xBF60, 0x7634, 0xBF61, 0x7638, 0xBF62, 0x763A, 0xBF63, 0x76E7, 0xBF64, 0x76E5, 0xBF65, 0x77A0, 0xBF66, 0x779E, 0xBF67, 0x779F,
- 0xBF68, 0x77A5, 0xBF69, 0x78E8, 0xBF6A, 0x78DA, 0xBF6B, 0x78EC, 0xBF6C, 0x78E7, 0xBF6D, 0x79A6, 0xBF6E, 0x7A4D, 0xBF6F, 0x7A4E,
- 0xBF70, 0x7A46, 0xBF71, 0x7A4C, 0xBF72, 0x7A4B, 0xBF73, 0x7ABA, 0xBF74, 0x7BD9, 0xBF75, 0x7C11, 0xBF76, 0x7BC9, 0xBF77, 0x7BE4,
- 0xBF78, 0x7BDB, 0xBF79, 0x7BE1, 0xBF7A, 0x7BE9, 0xBF7B, 0x7BE6, 0xBF7C, 0x7CD5, 0xBF7D, 0x7CD6, 0xBF7E, 0x7E0A, 0xBFA1, 0x7E11,
- 0xBFA2, 0x7E08, 0xBFA3, 0x7E1B, 0xBFA4, 0x7E23, 0xBFA5, 0x7E1E, 0xBFA6, 0x7E1D, 0xBFA7, 0x7E09, 0xBFA8, 0x7E10, 0xBFA9, 0x7F79,
- 0xBFAA, 0x7FB2, 0xBFAB, 0x7FF0, 0xBFAC, 0x7FF1, 0xBFAD, 0x7FEE, 0xBFAE, 0x8028, 0xBFAF, 0x81B3, 0xBFB0, 0x81A9, 0xBFB1, 0x81A8,
- 0xBFB2, 0x81FB, 0xBFB3, 0x8208, 0xBFB4, 0x8258, 0xBFB5, 0x8259, 0xBFB6, 0x854A, 0xBFB7, 0x8559, 0xBFB8, 0x8548, 0xBFB9, 0x8568,
- 0xBFBA, 0x8569, 0xBFBB, 0x8543, 0xBFBC, 0x8549, 0xBFBD, 0x856D, 0xBFBE, 0x856A, 0xBFBF, 0x855E, 0xBFC0, 0x8783, 0xBFC1, 0x879F,
- 0xBFC2, 0x879E, 0xBFC3, 0x87A2, 0xBFC4, 0x878D, 0xBFC5, 0x8861, 0xBFC6, 0x892A, 0xBFC7, 0x8932, 0xBFC8, 0x8925, 0xBFC9, 0x892B,
- 0xBFCA, 0x8921, 0xBFCB, 0x89AA, 0xBFCC, 0x89A6, 0xBFCD, 0x8AE6, 0xBFCE, 0x8AFA, 0xBFCF, 0x8AEB, 0xBFD0, 0x8AF1, 0xBFD1, 0x8B00,
- 0xBFD2, 0x8ADC, 0xBFD3, 0x8AE7, 0xBFD4, 0x8AEE, 0xBFD5, 0x8AFE, 0xBFD6, 0x8B01, 0xBFD7, 0x8B02, 0xBFD8, 0x8AF7, 0xBFD9, 0x8AED,
- 0xBFDA, 0x8AF3, 0xBFDB, 0x8AF6, 0xBFDC, 0x8AFC, 0xBFDD, 0x8C6B, 0xBFDE, 0x8C6D, 0xBFDF, 0x8C93, 0xBFE0, 0x8CF4, 0xBFE1, 0x8E44,
- 0xBFE2, 0x8E31, 0xBFE3, 0x8E34, 0xBFE4, 0x8E42, 0xBFE5, 0x8E39, 0xBFE6, 0x8E35, 0xBFE7, 0x8F3B, 0xBFE8, 0x8F2F, 0xBFE9, 0x8F38,
- 0xBFEA, 0x8F33, 0xBFEB, 0x8FA8, 0xBFEC, 0x8FA6, 0xBFED, 0x9075, 0xBFEE, 0x9074, 0xBFEF, 0x9078, 0xBFF0, 0x9072, 0xBFF1, 0x907C,
- 0xBFF2, 0x907A, 0xBFF3, 0x9134, 0xBFF4, 0x9192, 0xBFF5, 0x9320, 0xBFF6, 0x9336, 0xBFF7, 0x92F8, 0xBFF8, 0x9333, 0xBFF9, 0x932F,
- 0xBFFA, 0x9322, 0xBFFB, 0x92FC, 0xBFFC, 0x932B, 0xBFFD, 0x9304, 0xBFFE, 0x931A, 0xC040, 0x9310, 0xC041, 0x9326, 0xC042, 0x9321,
- 0xC043, 0x9315, 0xC044, 0x932E, 0xC045, 0x9319, 0xC046, 0x95BB, 0xC047, 0x96A7, 0xC048, 0x96A8, 0xC049, 0x96AA, 0xC04A, 0x96D5,
- 0xC04B, 0x970E, 0xC04C, 0x9711, 0xC04D, 0x9716, 0xC04E, 0x970D, 0xC04F, 0x9713, 0xC050, 0x970F, 0xC051, 0x975B, 0xC052, 0x975C,
- 0xC053, 0x9766, 0xC054, 0x9798, 0xC055, 0x9830, 0xC056, 0x9838, 0xC057, 0x983B, 0xC058, 0x9837, 0xC059, 0x982D, 0xC05A, 0x9839,
- 0xC05B, 0x9824, 0xC05C, 0x9910, 0xC05D, 0x9928, 0xC05E, 0x991E, 0xC05F, 0x991B, 0xC060, 0x9921, 0xC061, 0x991A, 0xC062, 0x99ED,
- 0xC063, 0x99E2, 0xC064, 0x99F1, 0xC065, 0x9AB8, 0xC066, 0x9ABC, 0xC067, 0x9AFB, 0xC068, 0x9AED, 0xC069, 0x9B28, 0xC06A, 0x9B91,
- 0xC06B, 0x9D15, 0xC06C, 0x9D23, 0xC06D, 0x9D26, 0xC06E, 0x9D28, 0xC06F, 0x9D12, 0xC070, 0x9D1B, 0xC071, 0x9ED8, 0xC072, 0x9ED4,
- 0xC073, 0x9F8D, 0xC074, 0x9F9C, 0xC075, 0x512A, 0xC076, 0x511F, 0xC077, 0x5121, 0xC078, 0x5132, 0xC079, 0x52F5, 0xC07A, 0x568E,
- 0xC07B, 0x5680, 0xC07C, 0x5690, 0xC07D, 0x5685, 0xC07E, 0x5687, 0xC0A1, 0x568F, 0xC0A2, 0x58D5, 0xC0A3, 0x58D3, 0xC0A4, 0x58D1,
- 0xC0A5, 0x58CE, 0xC0A6, 0x5B30, 0xC0A7, 0x5B2A, 0xC0A8, 0x5B24, 0xC0A9, 0x5B7A, 0xC0AA, 0x5C37, 0xC0AB, 0x5C68, 0xC0AC, 0x5DBC,
- 0xC0AD, 0x5DBA, 0xC0AE, 0x5DBD, 0xC0AF, 0x5DB8, 0xC0B0, 0x5E6B, 0xC0B1, 0x5F4C, 0xC0B2, 0x5FBD, 0xC0B3, 0x61C9, 0xC0B4, 0x61C2,
- 0xC0B5, 0x61C7, 0xC0B6, 0x61E6, 0xC0B7, 0x61CB, 0xC0B8, 0x6232, 0xC0B9, 0x6234, 0xC0BA, 0x64CE, 0xC0BB, 0x64CA, 0xC0BC, 0x64D8,
- 0xC0BD, 0x64E0, 0xC0BE, 0x64F0, 0xC0BF, 0x64E6, 0xC0C0, 0x64EC, 0xC0C1, 0x64F1, 0xC0C2, 0x64E2, 0xC0C3, 0x64ED, 0xC0C4, 0x6582,
- 0xC0C5, 0x6583, 0xC0C6, 0x66D9, 0xC0C7, 0x66D6, 0xC0C8, 0x6A80, 0xC0C9, 0x6A94, 0xC0CA, 0x6A84, 0xC0CB, 0x6AA2, 0xC0CC, 0x6A9C,
- 0xC0CD, 0x6ADB, 0xC0CE, 0x6AA3, 0xC0CF, 0x6A7E, 0xC0D0, 0x6A97, 0xC0D1, 0x6A90, 0xC0D2, 0x6AA0, 0xC0D3, 0x6B5C, 0xC0D4, 0x6BAE,
- 0xC0D5, 0x6BDA, 0xC0D6, 0x6C08, 0xC0D7, 0x6FD8, 0xC0D8, 0x6FF1, 0xC0D9, 0x6FDF, 0xC0DA, 0x6FE0, 0xC0DB, 0x6FDB, 0xC0DC, 0x6FE4,
- 0xC0DD, 0x6FEB, 0xC0DE, 0x6FEF, 0xC0DF, 0x6F80, 0xC0E0, 0x6FEC, 0xC0E1, 0x6FE1, 0xC0E2, 0x6FE9, 0xC0E3, 0x6FD5, 0xC0E4, 0x6FEE,
- 0xC0E5, 0x6FF0, 0xC0E6, 0x71E7, 0xC0E7, 0x71DF, 0xC0E8, 0x71EE, 0xC0E9, 0x71E6, 0xC0EA, 0x71E5, 0xC0EB, 0x71ED, 0xC0EC, 0x71EC,
- 0xC0ED, 0x71F4, 0xC0EE, 0x71E0, 0xC0EF, 0x7235, 0xC0F0, 0x7246, 0xC0F1, 0x7370, 0xC0F2, 0x7372, 0xC0F3, 0x74A9, 0xC0F4, 0x74B0,
- 0xC0F5, 0x74A6, 0xC0F6, 0x74A8, 0xC0F7, 0x7646, 0xC0F8, 0x7642, 0xC0F9, 0x764C, 0xC0FA, 0x76EA, 0xC0FB, 0x77B3, 0xC0FC, 0x77AA,
- 0xC0FD, 0x77B0, 0xC0FE, 0x77AC, 0xC140, 0x77A7, 0xC141, 0x77AD, 0xC142, 0x77EF, 0xC143, 0x78F7, 0xC144, 0x78FA, 0xC145, 0x78F4,
- 0xC146, 0x78EF, 0xC147, 0x7901, 0xC148, 0x79A7, 0xC149, 0x79AA, 0xC14A, 0x7A57, 0xC14B, 0x7ABF, 0xC14C, 0x7C07, 0xC14D, 0x7C0D,
- 0xC14E, 0x7BFE, 0xC14F, 0x7BF7, 0xC150, 0x7C0C, 0xC151, 0x7BE0, 0xC152, 0x7CE0, 0xC153, 0x7CDC, 0xC154, 0x7CDE, 0xC155, 0x7CE2,
- 0xC156, 0x7CDF, 0xC157, 0x7CD9, 0xC158, 0x7CDD, 0xC159, 0x7E2E, 0xC15A, 0x7E3E, 0xC15B, 0x7E46, 0xC15C, 0x7E37, 0xC15D, 0x7E32,
- 0xC15E, 0x7E43, 0xC15F, 0x7E2B, 0xC160, 0x7E3D, 0xC161, 0x7E31, 0xC162, 0x7E45, 0xC163, 0x7E41, 0xC164, 0x7E34, 0xC165, 0x7E39,
- 0xC166, 0x7E48, 0xC167, 0x7E35, 0xC168, 0x7E3F, 0xC169, 0x7E2F, 0xC16A, 0x7F44, 0xC16B, 0x7FF3, 0xC16C, 0x7FFC, 0xC16D, 0x8071,
- 0xC16E, 0x8072, 0xC16F, 0x8070, 0xC170, 0x806F, 0xC171, 0x8073, 0xC172, 0x81C6, 0xC173, 0x81C3, 0xC174, 0x81BA, 0xC175, 0x81C2,
- 0xC176, 0x81C0, 0xC177, 0x81BF, 0xC178, 0x81BD, 0xC179, 0x81C9, 0xC17A, 0x81BE, 0xC17B, 0x81E8, 0xC17C, 0x8209, 0xC17D, 0x8271,
- 0xC17E, 0x85AA, 0xC1A1, 0x8584, 0xC1A2, 0x857E, 0xC1A3, 0x859C, 0xC1A4, 0x8591, 0xC1A5, 0x8594, 0xC1A6, 0x85AF, 0xC1A7, 0x859B,
- 0xC1A8, 0x8587, 0xC1A9, 0x85A8, 0xC1AA, 0x858A, 0xC1AB, 0x8667, 0xC1AC, 0x87C0, 0xC1AD, 0x87D1, 0xC1AE, 0x87B3, 0xC1AF, 0x87D2,
- 0xC1B0, 0x87C6, 0xC1B1, 0x87AB, 0xC1B2, 0x87BB, 0xC1B3, 0x87BA, 0xC1B4, 0x87C8, 0xC1B5, 0x87CB, 0xC1B6, 0x893B, 0xC1B7, 0x8936,
- 0xC1B8, 0x8944, 0xC1B9, 0x8938, 0xC1BA, 0x893D, 0xC1BB, 0x89AC, 0xC1BC, 0x8B0E, 0xC1BD, 0x8B17, 0xC1BE, 0x8B19, 0xC1BF, 0x8B1B,
- 0xC1C0, 0x8B0A, 0xC1C1, 0x8B20, 0xC1C2, 0x8B1D, 0xC1C3, 0x8B04, 0xC1C4, 0x8B10, 0xC1C5, 0x8C41, 0xC1C6, 0x8C3F, 0xC1C7, 0x8C73,
- 0xC1C8, 0x8CFA, 0xC1C9, 0x8CFD, 0xC1CA, 0x8CFC, 0xC1CB, 0x8CF8, 0xC1CC, 0x8CFB, 0xC1CD, 0x8DA8, 0xC1CE, 0x8E49, 0xC1CF, 0x8E4B,
- 0xC1D0, 0x8E48, 0xC1D1, 0x8E4A, 0xC1D2, 0x8F44, 0xC1D3, 0x8F3E, 0xC1D4, 0x8F42, 0xC1D5, 0x8F45, 0xC1D6, 0x8F3F, 0xC1D7, 0x907F,
- 0xC1D8, 0x907D, 0xC1D9, 0x9084, 0xC1DA, 0x9081, 0xC1DB, 0x9082, 0xC1DC, 0x9080, 0xC1DD, 0x9139, 0xC1DE, 0x91A3, 0xC1DF, 0x919E,
- 0xC1E0, 0x919C, 0xC1E1, 0x934D, 0xC1E2, 0x9382, 0xC1E3, 0x9328, 0xC1E4, 0x9375, 0xC1E5, 0x934A, 0xC1E6, 0x9365, 0xC1E7, 0x934B,
- 0xC1E8, 0x9318, 0xC1E9, 0x937E, 0xC1EA, 0x936C, 0xC1EB, 0x935B, 0xC1EC, 0x9370, 0xC1ED, 0x935A, 0xC1EE, 0x9354, 0xC1EF, 0x95CA,
- 0xC1F0, 0x95CB, 0xC1F1, 0x95CC, 0xC1F2, 0x95C8, 0xC1F3, 0x95C6, 0xC1F4, 0x96B1, 0xC1F5, 0x96B8, 0xC1F6, 0x96D6, 0xC1F7, 0x971C,
- 0xC1F8, 0x971E, 0xC1F9, 0x97A0, 0xC1FA, 0x97D3, 0xC1FB, 0x9846, 0xC1FC, 0x98B6, 0xC1FD, 0x9935, 0xC1FE, 0x9A01, 0xC240, 0x99FF,
- 0xC241, 0x9BAE, 0xC242, 0x9BAB, 0xC243, 0x9BAA, 0xC244, 0x9BAD, 0xC245, 0x9D3B, 0xC246, 0x9D3F, 0xC247, 0x9E8B, 0xC248, 0x9ECF,
- 0xC249, 0x9EDE, 0xC24A, 0x9EDC, 0xC24B, 0x9EDD, 0xC24C, 0x9EDB, 0xC24D, 0x9F3E, 0xC24E, 0x9F4B, 0xC24F, 0x53E2, 0xC250, 0x5695,
- 0xC251, 0x56AE, 0xC252, 0x58D9, 0xC253, 0x58D8, 0xC254, 0x5B38, 0xC255, 0x5F5D, 0xC256, 0x61E3, 0xC257, 0x6233, 0xC258, 0x64F4,
- 0xC259, 0x64F2, 0xC25A, 0x64FE, 0xC25B, 0x6506, 0xC25C, 0x64FA, 0xC25D, 0x64FB, 0xC25E, 0x64F7, 0xC25F, 0x65B7, 0xC260, 0x66DC,
- 0xC261, 0x6726, 0xC262, 0x6AB3, 0xC263, 0x6AAC, 0xC264, 0x6AC3, 0xC265, 0x6ABB, 0xC266, 0x6AB8, 0xC267, 0x6AC2, 0xC268, 0x6AAE,
- 0xC269, 0x6AAF, 0xC26A, 0x6B5F, 0xC26B, 0x6B78, 0xC26C, 0x6BAF, 0xC26D, 0x7009, 0xC26E, 0x700B, 0xC26F, 0x6FFE, 0xC270, 0x7006,
- 0xC271, 0x6FFA, 0xC272, 0x7011, 0xC273, 0x700F, 0xC274, 0x71FB, 0xC275, 0x71FC, 0xC276, 0x71FE, 0xC277, 0x71F8, 0xC278, 0x7377,
- 0xC279, 0x7375, 0xC27A, 0x74A7, 0xC27B, 0x74BF, 0xC27C, 0x7515, 0xC27D, 0x7656, 0xC27E, 0x7658, 0xC2A1, 0x7652, 0xC2A2, 0x77BD,
- 0xC2A3, 0x77BF, 0xC2A4, 0x77BB, 0xC2A5, 0x77BC, 0xC2A6, 0x790E, 0xC2A7, 0x79AE, 0xC2A8, 0x7A61, 0xC2A9, 0x7A62, 0xC2AA, 0x7A60,
- 0xC2AB, 0x7AC4, 0xC2AC, 0x7AC5, 0xC2AD, 0x7C2B, 0xC2AE, 0x7C27, 0xC2AF, 0x7C2A, 0xC2B0, 0x7C1E, 0xC2B1, 0x7C23, 0xC2B2, 0x7C21,
- 0xC2B3, 0x7CE7, 0xC2B4, 0x7E54, 0xC2B5, 0x7E55, 0xC2B6, 0x7E5E, 0xC2B7, 0x7E5A, 0xC2B8, 0x7E61, 0xC2B9, 0x7E52, 0xC2BA, 0x7E59,
- 0xC2BB, 0x7F48, 0xC2BC, 0x7FF9, 0xC2BD, 0x7FFB, 0xC2BE, 0x8077, 0xC2BF, 0x8076, 0xC2C0, 0x81CD, 0xC2C1, 0x81CF, 0xC2C2, 0x820A,
- 0xC2C3, 0x85CF, 0xC2C4, 0x85A9, 0xC2C5, 0x85CD, 0xC2C6, 0x85D0, 0xC2C7, 0x85C9, 0xC2C8, 0x85B0, 0xC2C9, 0x85BA, 0xC2CA, 0x85B9,
- 0xC2CB, 0x85A6, 0xC2CC, 0x87EF, 0xC2CD, 0x87EC, 0xC2CE, 0x87F2, 0xC2CF, 0x87E0, 0xC2D0, 0x8986, 0xC2D1, 0x89B2, 0xC2D2, 0x89F4,
- 0xC2D3, 0x8B28, 0xC2D4, 0x8B39, 0xC2D5, 0x8B2C, 0xC2D6, 0x8B2B, 0xC2D7, 0x8C50, 0xC2D8, 0x8D05, 0xC2D9, 0x8E59, 0xC2DA, 0x8E63,
- 0xC2DB, 0x8E66, 0xC2DC, 0x8E64, 0xC2DD, 0x8E5F, 0xC2DE, 0x8E55, 0xC2DF, 0x8EC0, 0xC2E0, 0x8F49, 0xC2E1, 0x8F4D, 0xC2E2, 0x9087,
- 0xC2E3, 0x9083, 0xC2E4, 0x9088, 0xC2E5, 0x91AB, 0xC2E6, 0x91AC, 0xC2E7, 0x91D0, 0xC2E8, 0x9394, 0xC2E9, 0x938A, 0xC2EA, 0x9396,
- 0xC2EB, 0x93A2, 0xC2EC, 0x93B3, 0xC2ED, 0x93AE, 0xC2EE, 0x93AC, 0xC2EF, 0x93B0, 0xC2F0, 0x9398, 0xC2F1, 0x939A, 0xC2F2, 0x9397,
- 0xC2F3, 0x95D4, 0xC2F4, 0x95D6, 0xC2F5, 0x95D0, 0xC2F6, 0x95D5, 0xC2F7, 0x96E2, 0xC2F8, 0x96DC, 0xC2F9, 0x96D9, 0xC2FA, 0x96DB,
- 0xC2FB, 0x96DE, 0xC2FC, 0x9724, 0xC2FD, 0x97A3, 0xC2FE, 0x97A6, 0xC340, 0x97AD, 0xC341, 0x97F9, 0xC342, 0x984D, 0xC343, 0x984F,
- 0xC344, 0x984C, 0xC345, 0x984E, 0xC346, 0x9853, 0xC347, 0x98BA, 0xC348, 0x993E, 0xC349, 0x993F, 0xC34A, 0x993D, 0xC34B, 0x992E,
- 0xC34C, 0x99A5, 0xC34D, 0x9A0E, 0xC34E, 0x9AC1, 0xC34F, 0x9B03, 0xC350, 0x9B06, 0xC351, 0x9B4F, 0xC352, 0x9B4E, 0xC353, 0x9B4D,
- 0xC354, 0x9BCA, 0xC355, 0x9BC9, 0xC356, 0x9BFD, 0xC357, 0x9BC8, 0xC358, 0x9BC0, 0xC359, 0x9D51, 0xC35A, 0x9D5D, 0xC35B, 0x9D60,
- 0xC35C, 0x9EE0, 0xC35D, 0x9F15, 0xC35E, 0x9F2C, 0xC35F, 0x5133, 0xC360, 0x56A5, 0xC361, 0x58DE, 0xC362, 0x58DF, 0xC363, 0x58E2,
- 0xC364, 0x5BF5, 0xC365, 0x9F90, 0xC366, 0x5EEC, 0xC367, 0x61F2, 0xC368, 0x61F7, 0xC369, 0x61F6, 0xC36A, 0x61F5, 0xC36B, 0x6500,
- 0xC36C, 0x650F, 0xC36D, 0x66E0, 0xC36E, 0x66DD, 0xC36F, 0x6AE5, 0xC370, 0x6ADD, 0xC371, 0x6ADA, 0xC372, 0x6AD3, 0xC373, 0x701B,
- 0xC374, 0x701F, 0xC375, 0x7028, 0xC376, 0x701A, 0xC377, 0x701D, 0xC378, 0x7015, 0xC379, 0x7018, 0xC37A, 0x7206, 0xC37B, 0x720D,
- 0xC37C, 0x7258, 0xC37D, 0x72A2, 0xC37E, 0x7378, 0xC3A1, 0x737A, 0xC3A2, 0x74BD, 0xC3A3, 0x74CA, 0xC3A4, 0x74E3, 0xC3A5, 0x7587,
- 0xC3A6, 0x7586, 0xC3A7, 0x765F, 0xC3A8, 0x7661, 0xC3A9, 0x77C7, 0xC3AA, 0x7919, 0xC3AB, 0x79B1, 0xC3AC, 0x7A6B, 0xC3AD, 0x7A69,
- 0xC3AE, 0x7C3E, 0xC3AF, 0x7C3F, 0xC3B0, 0x7C38, 0xC3B1, 0x7C3D, 0xC3B2, 0x7C37, 0xC3B3, 0x7C40, 0xC3B4, 0x7E6B, 0xC3B5, 0x7E6D,
- 0xC3B6, 0x7E79, 0xC3B7, 0x7E69, 0xC3B8, 0x7E6A, 0xC3B9, 0x7F85, 0xC3BA, 0x7E73, 0xC3BB, 0x7FB6, 0xC3BC, 0x7FB9, 0xC3BD, 0x7FB8,
- 0xC3BE, 0x81D8, 0xC3BF, 0x85E9, 0xC3C0, 0x85DD, 0xC3C1, 0x85EA, 0xC3C2, 0x85D5, 0xC3C3, 0x85E4, 0xC3C4, 0x85E5, 0xC3C5, 0x85F7,
- 0xC3C6, 0x87FB, 0xC3C7, 0x8805, 0xC3C8, 0x880D, 0xC3C9, 0x87F9, 0xC3CA, 0x87FE, 0xC3CB, 0x8960, 0xC3CC, 0x895F, 0xC3CD, 0x8956,
- 0xC3CE, 0x895E, 0xC3CF, 0x8B41, 0xC3D0, 0x8B5C, 0xC3D1, 0x8B58, 0xC3D2, 0x8B49, 0xC3D3, 0x8B5A, 0xC3D4, 0x8B4E, 0xC3D5, 0x8B4F,
- 0xC3D6, 0x8B46, 0xC3D7, 0x8B59, 0xC3D8, 0x8D08, 0xC3D9, 0x8D0A, 0xC3DA, 0x8E7C, 0xC3DB, 0x8E72, 0xC3DC, 0x8E87, 0xC3DD, 0x8E76,
- 0xC3DE, 0x8E6C, 0xC3DF, 0x8E7A, 0xC3E0, 0x8E74, 0xC3E1, 0x8F54, 0xC3E2, 0x8F4E, 0xC3E3, 0x8FAD, 0xC3E4, 0x908A, 0xC3E5, 0x908B,
- 0xC3E6, 0x91B1, 0xC3E7, 0x91AE, 0xC3E8, 0x93E1, 0xC3E9, 0x93D1, 0xC3EA, 0x93DF, 0xC3EB, 0x93C3, 0xC3EC, 0x93C8, 0xC3ED, 0x93DC,
- 0xC3EE, 0x93DD, 0xC3EF, 0x93D6, 0xC3F0, 0x93E2, 0xC3F1, 0x93CD, 0xC3F2, 0x93D8, 0xC3F3, 0x93E4, 0xC3F4, 0x93D7, 0xC3F5, 0x93E8,
- 0xC3F6, 0x95DC, 0xC3F7, 0x96B4, 0xC3F8, 0x96E3, 0xC3F9, 0x972A, 0xC3FA, 0x9727, 0xC3FB, 0x9761, 0xC3FC, 0x97DC, 0xC3FD, 0x97FB,
- 0xC3FE, 0x985E, 0xC440, 0x9858, 0xC441, 0x985B, 0xC442, 0x98BC, 0xC443, 0x9945, 0xC444, 0x9949, 0xC445, 0x9A16, 0xC446, 0x9A19,
- 0xC447, 0x9B0D, 0xC448, 0x9BE8, 0xC449, 0x9BE7, 0xC44A, 0x9BD6, 0xC44B, 0x9BDB, 0xC44C, 0x9D89, 0xC44D, 0x9D61, 0xC44E, 0x9D72,
- 0xC44F, 0x9D6A, 0xC450, 0x9D6C, 0xC451, 0x9E92, 0xC452, 0x9E97, 0xC453, 0x9E93, 0xC454, 0x9EB4, 0xC455, 0x52F8, 0xC456, 0x56A8,
- 0xC457, 0x56B7, 0xC458, 0x56B6, 0xC459, 0x56B4, 0xC45A, 0x56BC, 0xC45B, 0x58E4, 0xC45C, 0x5B40, 0xC45D, 0x5B43, 0xC45E, 0x5B7D,
- 0xC45F, 0x5BF6, 0xC460, 0x5DC9, 0xC461, 0x61F8, 0xC462, 0x61FA, 0xC463, 0x6518, 0xC464, 0x6514, 0xC465, 0x6519, 0xC466, 0x66E6,
- 0xC467, 0x6727, 0xC468, 0x6AEC, 0xC469, 0x703E, 0xC46A, 0x7030, 0xC46B, 0x7032, 0xC46C, 0x7210, 0xC46D, 0x737B, 0xC46E, 0x74CF,
- 0xC46F, 0x7662, 0xC470, 0x7665, 0xC471, 0x7926, 0xC472, 0x792A, 0xC473, 0x792C, 0xC474, 0x792B, 0xC475, 0x7AC7, 0xC476, 0x7AF6,
- 0xC477, 0x7C4C, 0xC478, 0x7C43, 0xC479, 0x7C4D, 0xC47A, 0x7CEF, 0xC47B, 0x7CF0, 0xC47C, 0x8FAE, 0xC47D, 0x7E7D, 0xC47E, 0x7E7C,
- 0xC4A1, 0x7E82, 0xC4A2, 0x7F4C, 0xC4A3, 0x8000, 0xC4A4, 0x81DA, 0xC4A5, 0x8266, 0xC4A6, 0x85FB, 0xC4A7, 0x85F9, 0xC4A8, 0x8611,
- 0xC4A9, 0x85FA, 0xC4AA, 0x8606, 0xC4AB, 0x860B, 0xC4AC, 0x8607, 0xC4AD, 0x860A, 0xC4AE, 0x8814, 0xC4AF, 0x8815, 0xC4B0, 0x8964,
- 0xC4B1, 0x89BA, 0xC4B2, 0x89F8, 0xC4B3, 0x8B70, 0xC4B4, 0x8B6C, 0xC4B5, 0x8B66, 0xC4B6, 0x8B6F, 0xC4B7, 0x8B5F, 0xC4B8, 0x8B6B,
- 0xC4B9, 0x8D0F, 0xC4BA, 0x8D0D, 0xC4BB, 0x8E89, 0xC4BC, 0x8E81, 0xC4BD, 0x8E85, 0xC4BE, 0x8E82, 0xC4BF, 0x91B4, 0xC4C0, 0x91CB,
- 0xC4C1, 0x9418, 0xC4C2, 0x9403, 0xC4C3, 0x93FD, 0xC4C4, 0x95E1, 0xC4C5, 0x9730, 0xC4C6, 0x98C4, 0xC4C7, 0x9952, 0xC4C8, 0x9951,
- 0xC4C9, 0x99A8, 0xC4CA, 0x9A2B, 0xC4CB, 0x9A30, 0xC4CC, 0x9A37, 0xC4CD, 0x9A35, 0xC4CE, 0x9C13, 0xC4CF, 0x9C0D, 0xC4D0, 0x9E79,
- 0xC4D1, 0x9EB5, 0xC4D2, 0x9EE8, 0xC4D3, 0x9F2F, 0xC4D4, 0x9F5F, 0xC4D5, 0x9F63, 0xC4D6, 0x9F61, 0xC4D7, 0x5137, 0xC4D8, 0x5138,
- 0xC4D9, 0x56C1, 0xC4DA, 0x56C0, 0xC4DB, 0x56C2, 0xC4DC, 0x5914, 0xC4DD, 0x5C6C, 0xC4DE, 0x5DCD, 0xC4DF, 0x61FC, 0xC4E0, 0x61FE,
- 0xC4E1, 0x651D, 0xC4E2, 0x651C, 0xC4E3, 0x6595, 0xC4E4, 0x66E9, 0xC4E5, 0x6AFB, 0xC4E6, 0x6B04, 0xC4E7, 0x6AFA, 0xC4E8, 0x6BB2,
- 0xC4E9, 0x704C, 0xC4EA, 0x721B, 0xC4EB, 0x72A7, 0xC4EC, 0x74D6, 0xC4ED, 0x74D4, 0xC4EE, 0x7669, 0xC4EF, 0x77D3, 0xC4F0, 0x7C50,
- 0xC4F1, 0x7E8F, 0xC4F2, 0x7E8C, 0xC4F3, 0x7FBC, 0xC4F4, 0x8617, 0xC4F5, 0x862D, 0xC4F6, 0x861A, 0xC4F7, 0x8823, 0xC4F8, 0x8822,
- 0xC4F9, 0x8821, 0xC4FA, 0x881F, 0xC4FB, 0x896A, 0xC4FC, 0x896C, 0xC4FD, 0x89BD, 0xC4FE, 0x8B74, 0xC540, 0x8B77, 0xC541, 0x8B7D,
- 0xC542, 0x8D13, 0xC543, 0x8E8A, 0xC544, 0x8E8D, 0xC545, 0x8E8B, 0xC546, 0x8F5F, 0xC547, 0x8FAF, 0xC548, 0x91BA, 0xC549, 0x942E,
- 0xC54A, 0x9433, 0xC54B, 0x9435, 0xC54C, 0x943A, 0xC54D, 0x9438, 0xC54E, 0x9432, 0xC54F, 0x942B, 0xC550, 0x95E2, 0xC551, 0x9738,
- 0xC552, 0x9739, 0xC553, 0x9732, 0xC554, 0x97FF, 0xC555, 0x9867, 0xC556, 0x9865, 0xC557, 0x9957, 0xC558, 0x9A45, 0xC559, 0x9A43,
- 0xC55A, 0x9A40, 0xC55B, 0x9A3E, 0xC55C, 0x9ACF, 0xC55D, 0x9B54, 0xC55E, 0x9B51, 0xC55F, 0x9C2D, 0xC560, 0x9C25, 0xC561, 0x9DAF,
- 0xC562, 0x9DB4, 0xC563, 0x9DC2, 0xC564, 0x9DB8, 0xC565, 0x9E9D, 0xC566, 0x9EEF, 0xC567, 0x9F19, 0xC568, 0x9F5C, 0xC569, 0x9F66,
- 0xC56A, 0x9F67, 0xC56B, 0x513C, 0xC56C, 0x513B, 0xC56D, 0x56C8, 0xC56E, 0x56CA, 0xC56F, 0x56C9, 0xC570, 0x5B7F, 0xC571, 0x5DD4,
- 0xC572, 0x5DD2, 0xC573, 0x5F4E, 0xC574, 0x61FF, 0xC575, 0x6524, 0xC576, 0x6B0A, 0xC577, 0x6B61, 0xC578, 0x7051, 0xC579, 0x7058,
- 0xC57A, 0x7380, 0xC57B, 0x74E4, 0xC57C, 0x758A, 0xC57D, 0x766E, 0xC57E, 0x766C, 0xC5A1, 0x79B3, 0xC5A2, 0x7C60, 0xC5A3, 0x7C5F,
- 0xC5A4, 0x807E, 0xC5A5, 0x807D, 0xC5A6, 0x81DF, 0xC5A7, 0x8972, 0xC5A8, 0x896F, 0xC5A9, 0x89FC, 0xC5AA, 0x8B80, 0xC5AB, 0x8D16,
- 0xC5AC, 0x8D17, 0xC5AD, 0x8E91, 0xC5AE, 0x8E93, 0xC5AF, 0x8F61, 0xC5B0, 0x9148, 0xC5B1, 0x9444, 0xC5B2, 0x9451, 0xC5B3, 0x9452,
- 0xC5B4, 0x973D, 0xC5B5, 0x973E, 0xC5B6, 0x97C3, 0xC5B7, 0x97C1, 0xC5B8, 0x986B, 0xC5B9, 0x9955, 0xC5BA, 0x9A55, 0xC5BB, 0x9A4D,
- 0xC5BC, 0x9AD2, 0xC5BD, 0x9B1A, 0xC5BE, 0x9C49, 0xC5BF, 0x9C31, 0xC5C0, 0x9C3E, 0xC5C1, 0x9C3B, 0xC5C2, 0x9DD3, 0xC5C3, 0x9DD7,
- 0xC5C4, 0x9F34, 0xC5C5, 0x9F6C, 0xC5C6, 0x9F6A, 0xC5C7, 0x9F94, 0xC5C8, 0x56CC, 0xC5C9, 0x5DD6, 0xC5CA, 0x6200, 0xC5CB, 0x6523,
- 0xC5CC, 0x652B, 0xC5CD, 0x652A, 0xC5CE, 0x66EC, 0xC5CF, 0x6B10, 0xC5D0, 0x74DA, 0xC5D1, 0x7ACA, 0xC5D2, 0x7C64, 0xC5D3, 0x7C63,
- 0xC5D4, 0x7C65, 0xC5D5, 0x7E93, 0xC5D6, 0x7E96, 0xC5D7, 0x7E94, 0xC5D8, 0x81E2, 0xC5D9, 0x8638, 0xC5DA, 0x863F, 0xC5DB, 0x8831,
- 0xC5DC, 0x8B8A, 0xC5DD, 0x9090, 0xC5DE, 0x908F, 0xC5DF, 0x9463, 0xC5E0, 0x9460, 0xC5E1, 0x9464, 0xC5E2, 0x9768, 0xC5E3, 0x986F,
- 0xC5E4, 0x995C, 0xC5E5, 0x9A5A, 0xC5E6, 0x9A5B, 0xC5E7, 0x9A57, 0xC5E8, 0x9AD3, 0xC5E9, 0x9AD4, 0xC5EA, 0x9AD1, 0xC5EB, 0x9C54,
- 0xC5EC, 0x9C57, 0xC5ED, 0x9C56, 0xC5EE, 0x9DE5, 0xC5EF, 0x9E9F, 0xC5F0, 0x9EF4, 0xC5F1, 0x56D1, 0xC5F2, 0x58E9, 0xC5F3, 0x652C,
- 0xC5F4, 0x705E, 0xC5F5, 0x7671, 0xC5F6, 0x7672, 0xC5F7, 0x77D7, 0xC5F8, 0x7F50, 0xC5F9, 0x7F88, 0xC5FA, 0x8836, 0xC5FB, 0x8839,
- 0xC5FC, 0x8862, 0xC5FD, 0x8B93, 0xC5FE, 0x8B92, 0xC640, 0x8B96, 0xC641, 0x8277, 0xC642, 0x8D1B, 0xC643, 0x91C0, 0xC644, 0x946A,
- 0xC645, 0x9742, 0xC646, 0x9748, 0xC647, 0x9744, 0xC648, 0x97C6, 0xC649, 0x9870, 0xC64A, 0x9A5F, 0xC64B, 0x9B22, 0xC64C, 0x9B58,
- 0xC64D, 0x9C5F, 0xC64E, 0x9DF9, 0xC64F, 0x9DFA, 0xC650, 0x9E7C, 0xC651, 0x9E7D, 0xC652, 0x9F07, 0xC653, 0x9F77, 0xC654, 0x9F72,
- 0xC655, 0x5EF3, 0xC656, 0x6B16, 0xC657, 0x7063, 0xC658, 0x7C6C, 0xC659, 0x7C6E, 0xC65A, 0x883B, 0xC65B, 0x89C0, 0xC65C, 0x8EA1,
- 0xC65D, 0x91C1, 0xC65E, 0x9472, 0xC65F, 0x9470, 0xC660, 0x9871, 0xC661, 0x995E, 0xC662, 0x9AD6, 0xC663, 0x9B23, 0xC664, 0x9ECC,
- 0xC665, 0x7064, 0xC666, 0x77DA, 0xC667, 0x8B9A, 0xC668, 0x9477, 0xC669, 0x97C9, 0xC66A, 0x9A62, 0xC66B, 0x9A65, 0xC66C, 0x7E9C,
- 0xC66D, 0x8B9C, 0xC66E, 0x8EAA, 0xC66F, 0x91C5, 0xC670, 0x947D, 0xC671, 0x947E, 0xC672, 0x947C, 0xC673, 0x9C77, 0xC674, 0x9C78,
- 0xC675, 0x9EF7, 0xC676, 0x8C54, 0xC677, 0x947F, 0xC678, 0x9E1A, 0xC679, 0x7228, 0xC67A, 0x9A6A, 0xC67B, 0x9B31, 0xC67C, 0x9E1B,
- 0xC67D, 0x9E1E, 0xC67E, 0x7C72, 0xC940, 0x4E42, 0xC941, 0x4E5C, 0xC942, 0x51F5, 0xC943, 0x531A, 0xC944, 0x5382, 0xC945, 0x4E07,
- 0xC946, 0x4E0C, 0xC947, 0x4E47, 0xC948, 0x4E8D, 0xC949, 0x56D7, 0xC94A, 0xFA0C, 0xC94B, 0x5C6E, 0xC94C, 0x5F73, 0xC94D, 0x4E0F,
- 0xC94E, 0x5187, 0xC94F, 0x4E0E, 0xC950, 0x4E2E, 0xC951, 0x4E93, 0xC952, 0x4EC2, 0xC953, 0x4EC9, 0xC954, 0x4EC8, 0xC955, 0x5198,
- 0xC956, 0x52FC, 0xC957, 0x536C, 0xC958, 0x53B9, 0xC959, 0x5720, 0xC95A, 0x5903, 0xC95B, 0x592C, 0xC95C, 0x5C10, 0xC95D, 0x5DFF,
- 0xC95E, 0x65E1, 0xC95F, 0x6BB3, 0xC960, 0x6BCC, 0xC961, 0x6C14, 0xC962, 0x723F, 0xC963, 0x4E31, 0xC964, 0x4E3C, 0xC965, 0x4EE8,
- 0xC966, 0x4EDC, 0xC967, 0x4EE9, 0xC968, 0x4EE1, 0xC969, 0x4EDD, 0xC96A, 0x4EDA, 0xC96B, 0x520C, 0xC96C, 0x531C, 0xC96D, 0x534C,
- 0xC96E, 0x5722, 0xC96F, 0x5723, 0xC970, 0x5917, 0xC971, 0x592F, 0xC972, 0x5B81, 0xC973, 0x5B84, 0xC974, 0x5C12, 0xC975, 0x5C3B,
- 0xC976, 0x5C74, 0xC977, 0x5C73, 0xC978, 0x5E04, 0xC979, 0x5E80, 0xC97A, 0x5E82, 0xC97B, 0x5FC9, 0xC97C, 0x6209, 0xC97D, 0x6250,
- 0xC97E, 0x6C15, 0xC9A1, 0x6C36, 0xC9A2, 0x6C43, 0xC9A3, 0x6C3F, 0xC9A4, 0x6C3B, 0xC9A5, 0x72AE, 0xC9A6, 0x72B0, 0xC9A7, 0x738A,
- 0xC9A8, 0x79B8, 0xC9A9, 0x808A, 0xC9AA, 0x961E, 0xC9AB, 0x4F0E, 0xC9AC, 0x4F18, 0xC9AD, 0x4F2C, 0xC9AE, 0x4EF5, 0xC9AF, 0x4F14,
- 0xC9B0, 0x4EF1, 0xC9B1, 0x4F00, 0xC9B2, 0x4EF7, 0xC9B3, 0x4F08, 0xC9B4, 0x4F1D, 0xC9B5, 0x4F02, 0xC9B6, 0x4F05, 0xC9B7, 0x4F22,
- 0xC9B8, 0x4F13, 0xC9B9, 0x4F04, 0xC9BA, 0x4EF4, 0xC9BB, 0x4F12, 0xC9BC, 0x51B1, 0xC9BD, 0x5213, 0xC9BE, 0x5209, 0xC9BF, 0x5210,
- 0xC9C0, 0x52A6, 0xC9C1, 0x5322, 0xC9C2, 0x531F, 0xC9C3, 0x534D, 0xC9C4, 0x538A, 0xC9C5, 0x5407, 0xC9C6, 0x56E1, 0xC9C7, 0x56DF,
- 0xC9C8, 0x572E, 0xC9C9, 0x572A, 0xC9CA, 0x5734, 0xC9CB, 0x593C, 0xC9CC, 0x5980, 0xC9CD, 0x597C, 0xC9CE, 0x5985, 0xC9CF, 0x597B,
- 0xC9D0, 0x597E, 0xC9D1, 0x5977, 0xC9D2, 0x597F, 0xC9D3, 0x5B56, 0xC9D4, 0x5C15, 0xC9D5, 0x5C25, 0xC9D6, 0x5C7C, 0xC9D7, 0x5C7A,
- 0xC9D8, 0x5C7B, 0xC9D9, 0x5C7E, 0xC9DA, 0x5DDF, 0xC9DB, 0x5E75, 0xC9DC, 0x5E84, 0xC9DD, 0x5F02, 0xC9DE, 0x5F1A, 0xC9DF, 0x5F74,
- 0xC9E0, 0x5FD5, 0xC9E1, 0x5FD4, 0xC9E2, 0x5FCF, 0xC9E3, 0x625C, 0xC9E4, 0x625E, 0xC9E5, 0x6264, 0xC9E6, 0x6261, 0xC9E7, 0x6266,
- 0xC9E8, 0x6262, 0xC9E9, 0x6259, 0xC9EA, 0x6260, 0xC9EB, 0x625A, 0xC9EC, 0x6265, 0xC9ED, 0x65EF, 0xC9EE, 0x65EE, 0xC9EF, 0x673E,
- 0xC9F0, 0x6739, 0xC9F1, 0x6738, 0xC9F2, 0x673B, 0xC9F3, 0x673A, 0xC9F4, 0x673F, 0xC9F5, 0x673C, 0xC9F6, 0x6733, 0xC9F7, 0x6C18,
- 0xC9F8, 0x6C46, 0xC9F9, 0x6C52, 0xC9FA, 0x6C5C, 0xC9FB, 0x6C4F, 0xC9FC, 0x6C4A, 0xC9FD, 0x6C54, 0xC9FE, 0x6C4B, 0xCA40, 0x6C4C,
- 0xCA41, 0x7071, 0xCA42, 0x725E, 0xCA43, 0x72B4, 0xCA44, 0x72B5, 0xCA45, 0x738E, 0xCA46, 0x752A, 0xCA47, 0x767F, 0xCA48, 0x7A75,
- 0xCA49, 0x7F51, 0xCA4A, 0x8278, 0xCA4B, 0x827C, 0xCA4C, 0x8280, 0xCA4D, 0x827D, 0xCA4E, 0x827F, 0xCA4F, 0x864D, 0xCA50, 0x897E,
- 0xCA51, 0x9099, 0xCA52, 0x9097, 0xCA53, 0x9098, 0xCA54, 0x909B, 0xCA55, 0x9094, 0xCA56, 0x9622, 0xCA57, 0x9624, 0xCA58, 0x9620,
- 0xCA59, 0x9623, 0xCA5A, 0x4F56, 0xCA5B, 0x4F3B, 0xCA5C, 0x4F62, 0xCA5D, 0x4F49, 0xCA5E, 0x4F53, 0xCA5F, 0x4F64, 0xCA60, 0x4F3E,
- 0xCA61, 0x4F67, 0xCA62, 0x4F52, 0xCA63, 0x4F5F, 0xCA64, 0x4F41, 0xCA65, 0x4F58, 0xCA66, 0x4F2D, 0xCA67, 0x4F33, 0xCA68, 0x4F3F,
- 0xCA69, 0x4F61, 0xCA6A, 0x518F, 0xCA6B, 0x51B9, 0xCA6C, 0x521C, 0xCA6D, 0x521E, 0xCA6E, 0x5221, 0xCA6F, 0x52AD, 0xCA70, 0x52AE,
- 0xCA71, 0x5309, 0xCA72, 0x5363, 0xCA73, 0x5372, 0xCA74, 0x538E, 0xCA75, 0x538F, 0xCA76, 0x5430, 0xCA77, 0x5437, 0xCA78, 0x542A,
- 0xCA79, 0x5454, 0xCA7A, 0x5445, 0xCA7B, 0x5419, 0xCA7C, 0x541C, 0xCA7D, 0x5425, 0xCA7E, 0x5418, 0xCAA1, 0x543D, 0xCAA2, 0x544F,
- 0xCAA3, 0x5441, 0xCAA4, 0x5428, 0xCAA5, 0x5424, 0xCAA6, 0x5447, 0xCAA7, 0x56EE, 0xCAA8, 0x56E7, 0xCAA9, 0x56E5, 0xCAAA, 0x5741,
- 0xCAAB, 0x5745, 0xCAAC, 0x574C, 0xCAAD, 0x5749, 0xCAAE, 0x574B, 0xCAAF, 0x5752, 0xCAB0, 0x5906, 0xCAB1, 0x5940, 0xCAB2, 0x59A6,
- 0xCAB3, 0x5998, 0xCAB4, 0x59A0, 0xCAB5, 0x5997, 0xCAB6, 0x598E, 0xCAB7, 0x59A2, 0xCAB8, 0x5990, 0xCAB9, 0x598F, 0xCABA, 0x59A7,
- 0xCABB, 0x59A1, 0xCABC, 0x5B8E, 0xCABD, 0x5B92, 0xCABE, 0x5C28, 0xCABF, 0x5C2A, 0xCAC0, 0x5C8D, 0xCAC1, 0x5C8F, 0xCAC2, 0x5C88,
- 0xCAC3, 0x5C8B, 0xCAC4, 0x5C89, 0xCAC5, 0x5C92, 0xCAC6, 0x5C8A, 0xCAC7, 0x5C86, 0xCAC8, 0x5C93, 0xCAC9, 0x5C95, 0xCACA, 0x5DE0,
- 0xCACB, 0x5E0A, 0xCACC, 0x5E0E, 0xCACD, 0x5E8B, 0xCACE, 0x5E89, 0xCACF, 0x5E8C, 0xCAD0, 0x5E88, 0xCAD1, 0x5E8D, 0xCAD2, 0x5F05,
- 0xCAD3, 0x5F1D, 0xCAD4, 0x5F78, 0xCAD5, 0x5F76, 0xCAD6, 0x5FD2, 0xCAD7, 0x5FD1, 0xCAD8, 0x5FD0, 0xCAD9, 0x5FED, 0xCADA, 0x5FE8,
- 0xCADB, 0x5FEE, 0xCADC, 0x5FF3, 0xCADD, 0x5FE1, 0xCADE, 0x5FE4, 0xCADF, 0x5FE3, 0xCAE0, 0x5FFA, 0xCAE1, 0x5FEF, 0xCAE2, 0x5FF7,
- 0xCAE3, 0x5FFB, 0xCAE4, 0x6000, 0xCAE5, 0x5FF4, 0xCAE6, 0x623A, 0xCAE7, 0x6283, 0xCAE8, 0x628C, 0xCAE9, 0x628E, 0xCAEA, 0x628F,
- 0xCAEB, 0x6294, 0xCAEC, 0x6287, 0xCAED, 0x6271, 0xCAEE, 0x627B, 0xCAEF, 0x627A, 0xCAF0, 0x6270, 0xCAF1, 0x6281, 0xCAF2, 0x6288,
- 0xCAF3, 0x6277, 0xCAF4, 0x627D, 0xCAF5, 0x6272, 0xCAF6, 0x6274, 0xCAF7, 0x6537, 0xCAF8, 0x65F0, 0xCAF9, 0x65F4, 0xCAFA, 0x65F3,
- 0xCAFB, 0x65F2, 0xCAFC, 0x65F5, 0xCAFD, 0x6745, 0xCAFE, 0x6747, 0xCB40, 0x6759, 0xCB41, 0x6755, 0xCB42, 0x674C, 0xCB43, 0x6748,
- 0xCB44, 0x675D, 0xCB45, 0x674D, 0xCB46, 0x675A, 0xCB47, 0x674B, 0xCB48, 0x6BD0, 0xCB49, 0x6C19, 0xCB4A, 0x6C1A, 0xCB4B, 0x6C78,
- 0xCB4C, 0x6C67, 0xCB4D, 0x6C6B, 0xCB4E, 0x6C84, 0xCB4F, 0x6C8B, 0xCB50, 0x6C8F, 0xCB51, 0x6C71, 0xCB52, 0x6C6F, 0xCB53, 0x6C69,
- 0xCB54, 0x6C9A, 0xCB55, 0x6C6D, 0xCB56, 0x6C87, 0xCB57, 0x6C95, 0xCB58, 0x6C9C, 0xCB59, 0x6C66, 0xCB5A, 0x6C73, 0xCB5B, 0x6C65,
- 0xCB5C, 0x6C7B, 0xCB5D, 0x6C8E, 0xCB5E, 0x7074, 0xCB5F, 0x707A, 0xCB60, 0x7263, 0xCB61, 0x72BF, 0xCB62, 0x72BD, 0xCB63, 0x72C3,
- 0xCB64, 0x72C6, 0xCB65, 0x72C1, 0xCB66, 0x72BA, 0xCB67, 0x72C5, 0xCB68, 0x7395, 0xCB69, 0x7397, 0xCB6A, 0x7393, 0xCB6B, 0x7394,
- 0xCB6C, 0x7392, 0xCB6D, 0x753A, 0xCB6E, 0x7539, 0xCB6F, 0x7594, 0xCB70, 0x7595, 0xCB71, 0x7681, 0xCB72, 0x793D, 0xCB73, 0x8034,
- 0xCB74, 0x8095, 0xCB75, 0x8099, 0xCB76, 0x8090, 0xCB77, 0x8092, 0xCB78, 0x809C, 0xCB79, 0x8290, 0xCB7A, 0x828F, 0xCB7B, 0x8285,
- 0xCB7C, 0x828E, 0xCB7D, 0x8291, 0xCB7E, 0x8293, 0xCBA1, 0x828A, 0xCBA2, 0x8283, 0xCBA3, 0x8284, 0xCBA4, 0x8C78, 0xCBA5, 0x8FC9,
- 0xCBA6, 0x8FBF, 0xCBA7, 0x909F, 0xCBA8, 0x90A1, 0xCBA9, 0x90A5, 0xCBAA, 0x909E, 0xCBAB, 0x90A7, 0xCBAC, 0x90A0, 0xCBAD, 0x9630,
- 0xCBAE, 0x9628, 0xCBAF, 0x962F, 0xCBB0, 0x962D, 0xCBB1, 0x4E33, 0xCBB2, 0x4F98, 0xCBB3, 0x4F7C, 0xCBB4, 0x4F85, 0xCBB5, 0x4F7D,
- 0xCBB6, 0x4F80, 0xCBB7, 0x4F87, 0xCBB8, 0x4F76, 0xCBB9, 0x4F74, 0xCBBA, 0x4F89, 0xCBBB, 0x4F84, 0xCBBC, 0x4F77, 0xCBBD, 0x4F4C,
- 0xCBBE, 0x4F97, 0xCBBF, 0x4F6A, 0xCBC0, 0x4F9A, 0xCBC1, 0x4F79, 0xCBC2, 0x4F81, 0xCBC3, 0x4F78, 0xCBC4, 0x4F90, 0xCBC5, 0x4F9C,
- 0xCBC6, 0x4F94, 0xCBC7, 0x4F9E, 0xCBC8, 0x4F92, 0xCBC9, 0x4F82, 0xCBCA, 0x4F95, 0xCBCB, 0x4F6B, 0xCBCC, 0x4F6E, 0xCBCD, 0x519E,
- 0xCBCE, 0x51BC, 0xCBCF, 0x51BE, 0xCBD0, 0x5235, 0xCBD1, 0x5232, 0xCBD2, 0x5233, 0xCBD3, 0x5246, 0xCBD4, 0x5231, 0xCBD5, 0x52BC,
- 0xCBD6, 0x530A, 0xCBD7, 0x530B, 0xCBD8, 0x533C, 0xCBD9, 0x5392, 0xCBDA, 0x5394, 0xCBDB, 0x5487, 0xCBDC, 0x547F, 0xCBDD, 0x5481,
- 0xCBDE, 0x5491, 0xCBDF, 0x5482, 0xCBE0, 0x5488, 0xCBE1, 0x546B, 0xCBE2, 0x547A, 0xCBE3, 0x547E, 0xCBE4, 0x5465, 0xCBE5, 0x546C,
- 0xCBE6, 0x5474, 0xCBE7, 0x5466, 0xCBE8, 0x548D, 0xCBE9, 0x546F, 0xCBEA, 0x5461, 0xCBEB, 0x5460, 0xCBEC, 0x5498, 0xCBED, 0x5463,
- 0xCBEE, 0x5467, 0xCBEF, 0x5464, 0xCBF0, 0x56F7, 0xCBF1, 0x56F9, 0xCBF2, 0x576F, 0xCBF3, 0x5772, 0xCBF4, 0x576D, 0xCBF5, 0x576B,
- 0xCBF6, 0x5771, 0xCBF7, 0x5770, 0xCBF8, 0x5776, 0xCBF9, 0x5780, 0xCBFA, 0x5775, 0xCBFB, 0x577B, 0xCBFC, 0x5773, 0xCBFD, 0x5774,
- 0xCBFE, 0x5762, 0xCC40, 0x5768, 0xCC41, 0x577D, 0xCC42, 0x590C, 0xCC43, 0x5945, 0xCC44, 0x59B5, 0xCC45, 0x59BA, 0xCC46, 0x59CF,
- 0xCC47, 0x59CE, 0xCC48, 0x59B2, 0xCC49, 0x59CC, 0xCC4A, 0x59C1, 0xCC4B, 0x59B6, 0xCC4C, 0x59BC, 0xCC4D, 0x59C3, 0xCC4E, 0x59D6,
- 0xCC4F, 0x59B1, 0xCC50, 0x59BD, 0xCC51, 0x59C0, 0xCC52, 0x59C8, 0xCC53, 0x59B4, 0xCC54, 0x59C7, 0xCC55, 0x5B62, 0xCC56, 0x5B65,
- 0xCC57, 0x5B93, 0xCC58, 0x5B95, 0xCC59, 0x5C44, 0xCC5A, 0x5C47, 0xCC5B, 0x5CAE, 0xCC5C, 0x5CA4, 0xCC5D, 0x5CA0, 0xCC5E, 0x5CB5,
- 0xCC5F, 0x5CAF, 0xCC60, 0x5CA8, 0xCC61, 0x5CAC, 0xCC62, 0x5C9F, 0xCC63, 0x5CA3, 0xCC64, 0x5CAD, 0xCC65, 0x5CA2, 0xCC66, 0x5CAA,
- 0xCC67, 0x5CA7, 0xCC68, 0x5C9D, 0xCC69, 0x5CA5, 0xCC6A, 0x5CB6, 0xCC6B, 0x5CB0, 0xCC6C, 0x5CA6, 0xCC6D, 0x5E17, 0xCC6E, 0x5E14,
- 0xCC6F, 0x5E19, 0xCC70, 0x5F28, 0xCC71, 0x5F22, 0xCC72, 0x5F23, 0xCC73, 0x5F24, 0xCC74, 0x5F54, 0xCC75, 0x5F82, 0xCC76, 0x5F7E,
- 0xCC77, 0x5F7D, 0xCC78, 0x5FDE, 0xCC79, 0x5FE5, 0xCC7A, 0x602D, 0xCC7B, 0x6026, 0xCC7C, 0x6019, 0xCC7D, 0x6032, 0xCC7E, 0x600B,
- 0xCCA1, 0x6034, 0xCCA2, 0x600A, 0xCCA3, 0x6017, 0xCCA4, 0x6033, 0xCCA5, 0x601A, 0xCCA6, 0x601E, 0xCCA7, 0x602C, 0xCCA8, 0x6022,
- 0xCCA9, 0x600D, 0xCCAA, 0x6010, 0xCCAB, 0x602E, 0xCCAC, 0x6013, 0xCCAD, 0x6011, 0xCCAE, 0x600C, 0xCCAF, 0x6009, 0xCCB0, 0x601C,
- 0xCCB1, 0x6214, 0xCCB2, 0x623D, 0xCCB3, 0x62AD, 0xCCB4, 0x62B4, 0xCCB5, 0x62D1, 0xCCB6, 0x62BE, 0xCCB7, 0x62AA, 0xCCB8, 0x62B6,
- 0xCCB9, 0x62CA, 0xCCBA, 0x62AE, 0xCCBB, 0x62B3, 0xCCBC, 0x62AF, 0xCCBD, 0x62BB, 0xCCBE, 0x62A9, 0xCCBF, 0x62B0, 0xCCC0, 0x62B8,
- 0xCCC1, 0x653D, 0xCCC2, 0x65A8, 0xCCC3, 0x65BB, 0xCCC4, 0x6609, 0xCCC5, 0x65FC, 0xCCC6, 0x6604, 0xCCC7, 0x6612, 0xCCC8, 0x6608,
- 0xCCC9, 0x65FB, 0xCCCA, 0x6603, 0xCCCB, 0x660B, 0xCCCC, 0x660D, 0xCCCD, 0x6605, 0xCCCE, 0x65FD, 0xCCCF, 0x6611, 0xCCD0, 0x6610,
- 0xCCD1, 0x66F6, 0xCCD2, 0x670A, 0xCCD3, 0x6785, 0xCCD4, 0x676C, 0xCCD5, 0x678E, 0xCCD6, 0x6792, 0xCCD7, 0x6776, 0xCCD8, 0x677B,
- 0xCCD9, 0x6798, 0xCCDA, 0x6786, 0xCCDB, 0x6784, 0xCCDC, 0x6774, 0xCCDD, 0x678D, 0xCCDE, 0x678C, 0xCCDF, 0x677A, 0xCCE0, 0x679F,
- 0xCCE1, 0x6791, 0xCCE2, 0x6799, 0xCCE3, 0x6783, 0xCCE4, 0x677D, 0xCCE5, 0x6781, 0xCCE6, 0x6778, 0xCCE7, 0x6779, 0xCCE8, 0x6794,
- 0xCCE9, 0x6B25, 0xCCEA, 0x6B80, 0xCCEB, 0x6B7E, 0xCCEC, 0x6BDE, 0xCCED, 0x6C1D, 0xCCEE, 0x6C93, 0xCCEF, 0x6CEC, 0xCCF0, 0x6CEB,
- 0xCCF1, 0x6CEE, 0xCCF2, 0x6CD9, 0xCCF3, 0x6CB6, 0xCCF4, 0x6CD4, 0xCCF5, 0x6CAD, 0xCCF6, 0x6CE7, 0xCCF7, 0x6CB7, 0xCCF8, 0x6CD0,
- 0xCCF9, 0x6CC2, 0xCCFA, 0x6CBA, 0xCCFB, 0x6CC3, 0xCCFC, 0x6CC6, 0xCCFD, 0x6CED, 0xCCFE, 0x6CF2, 0xCD40, 0x6CD2, 0xCD41, 0x6CDD,
- 0xCD42, 0x6CB4, 0xCD43, 0x6C8A, 0xCD44, 0x6C9D, 0xCD45, 0x6C80, 0xCD46, 0x6CDE, 0xCD47, 0x6CC0, 0xCD48, 0x6D30, 0xCD49, 0x6CCD,
- 0xCD4A, 0x6CC7, 0xCD4B, 0x6CB0, 0xCD4C, 0x6CF9, 0xCD4D, 0x6CCF, 0xCD4E, 0x6CE9, 0xCD4F, 0x6CD1, 0xCD50, 0x7094, 0xCD51, 0x7098,
- 0xCD52, 0x7085, 0xCD53, 0x7093, 0xCD54, 0x7086, 0xCD55, 0x7084, 0xCD56, 0x7091, 0xCD57, 0x7096, 0xCD58, 0x7082, 0xCD59, 0x709A,
- 0xCD5A, 0x7083, 0xCD5B, 0x726A, 0xCD5C, 0x72D6, 0xCD5D, 0x72CB, 0xCD5E, 0x72D8, 0xCD5F, 0x72C9, 0xCD60, 0x72DC, 0xCD61, 0x72D2,
- 0xCD62, 0x72D4, 0xCD63, 0x72DA, 0xCD64, 0x72CC, 0xCD65, 0x72D1, 0xCD66, 0x73A4, 0xCD67, 0x73A1, 0xCD68, 0x73AD, 0xCD69, 0x73A6,
- 0xCD6A, 0x73A2, 0xCD6B, 0x73A0, 0xCD6C, 0x73AC, 0xCD6D, 0x739D, 0xCD6E, 0x74DD, 0xCD6F, 0x74E8, 0xCD70, 0x753F, 0xCD71, 0x7540,
- 0xCD72, 0x753E, 0xCD73, 0x758C, 0xCD74, 0x7598, 0xCD75, 0x76AF, 0xCD76, 0x76F3, 0xCD77, 0x76F1, 0xCD78, 0x76F0, 0xCD79, 0x76F5,
- 0xCD7A, 0x77F8, 0xCD7B, 0x77FC, 0xCD7C, 0x77F9, 0xCD7D, 0x77FB, 0xCD7E, 0x77FA, 0xCDA1, 0x77F7, 0xCDA2, 0x7942, 0xCDA3, 0x793F,
- 0xCDA4, 0x79C5, 0xCDA5, 0x7A78, 0xCDA6, 0x7A7B, 0xCDA7, 0x7AFB, 0xCDA8, 0x7C75, 0xCDA9, 0x7CFD, 0xCDAA, 0x8035, 0xCDAB, 0x808F,
- 0xCDAC, 0x80AE, 0xCDAD, 0x80A3, 0xCDAE, 0x80B8, 0xCDAF, 0x80B5, 0xCDB0, 0x80AD, 0xCDB1, 0x8220, 0xCDB2, 0x82A0, 0xCDB3, 0x82C0,
- 0xCDB4, 0x82AB, 0xCDB5, 0x829A, 0xCDB6, 0x8298, 0xCDB7, 0x829B, 0xCDB8, 0x82B5, 0xCDB9, 0x82A7, 0xCDBA, 0x82AE, 0xCDBB, 0x82BC,
- 0xCDBC, 0x829E, 0xCDBD, 0x82BA, 0xCDBE, 0x82B4, 0xCDBF, 0x82A8, 0xCDC0, 0x82A1, 0xCDC1, 0x82A9, 0xCDC2, 0x82C2, 0xCDC3, 0x82A4,
- 0xCDC4, 0x82C3, 0xCDC5, 0x82B6, 0xCDC6, 0x82A2, 0xCDC7, 0x8670, 0xCDC8, 0x866F, 0xCDC9, 0x866D, 0xCDCA, 0x866E, 0xCDCB, 0x8C56,
- 0xCDCC, 0x8FD2, 0xCDCD, 0x8FCB, 0xCDCE, 0x8FD3, 0xCDCF, 0x8FCD, 0xCDD0, 0x8FD6, 0xCDD1, 0x8FD5, 0xCDD2, 0x8FD7, 0xCDD3, 0x90B2,
- 0xCDD4, 0x90B4, 0xCDD5, 0x90AF, 0xCDD6, 0x90B3, 0xCDD7, 0x90B0, 0xCDD8, 0x9639, 0xCDD9, 0x963D, 0xCDDA, 0x963C, 0xCDDB, 0x963A,
- 0xCDDC, 0x9643, 0xCDDD, 0x4FCD, 0xCDDE, 0x4FC5, 0xCDDF, 0x4FD3, 0xCDE0, 0x4FB2, 0xCDE1, 0x4FC9, 0xCDE2, 0x4FCB, 0xCDE3, 0x4FC1,
- 0xCDE4, 0x4FD4, 0xCDE5, 0x4FDC, 0xCDE6, 0x4FD9, 0xCDE7, 0x4FBB, 0xCDE8, 0x4FB3, 0xCDE9, 0x4FDB, 0xCDEA, 0x4FC7, 0xCDEB, 0x4FD6,
- 0xCDEC, 0x4FBA, 0xCDED, 0x4FC0, 0xCDEE, 0x4FB9, 0xCDEF, 0x4FEC, 0xCDF0, 0x5244, 0xCDF1, 0x5249, 0xCDF2, 0x52C0, 0xCDF3, 0x52C2,
- 0xCDF4, 0x533D, 0xCDF5, 0x537C, 0xCDF6, 0x5397, 0xCDF7, 0x5396, 0xCDF8, 0x5399, 0xCDF9, 0x5398, 0xCDFA, 0x54BA, 0xCDFB, 0x54A1,
- 0xCDFC, 0x54AD, 0xCDFD, 0x54A5, 0xCDFE, 0x54CF, 0xCE40, 0x54C3, 0xCE41, 0x830D, 0xCE42, 0x54B7, 0xCE43, 0x54AE, 0xCE44, 0x54D6,
- 0xCE45, 0x54B6, 0xCE46, 0x54C5, 0xCE47, 0x54C6, 0xCE48, 0x54A0, 0xCE49, 0x5470, 0xCE4A, 0x54BC, 0xCE4B, 0x54A2, 0xCE4C, 0x54BE,
- 0xCE4D, 0x5472, 0xCE4E, 0x54DE, 0xCE4F, 0x54B0, 0xCE50, 0x57B5, 0xCE51, 0x579E, 0xCE52, 0x579F, 0xCE53, 0x57A4, 0xCE54, 0x578C,
- 0xCE55, 0x5797, 0xCE56, 0x579D, 0xCE57, 0x579B, 0xCE58, 0x5794, 0xCE59, 0x5798, 0xCE5A, 0x578F, 0xCE5B, 0x5799, 0xCE5C, 0x57A5,
- 0xCE5D, 0x579A, 0xCE5E, 0x5795, 0xCE5F, 0x58F4, 0xCE60, 0x590D, 0xCE61, 0x5953, 0xCE62, 0x59E1, 0xCE63, 0x59DE, 0xCE64, 0x59EE,
- 0xCE65, 0x5A00, 0xCE66, 0x59F1, 0xCE67, 0x59DD, 0xCE68, 0x59FA, 0xCE69, 0x59FD, 0xCE6A, 0x59FC, 0xCE6B, 0x59F6, 0xCE6C, 0x59E4,
- 0xCE6D, 0x59F2, 0xCE6E, 0x59F7, 0xCE6F, 0x59DB, 0xCE70, 0x59E9, 0xCE71, 0x59F3, 0xCE72, 0x59F5, 0xCE73, 0x59E0, 0xCE74, 0x59FE,
- 0xCE75, 0x59F4, 0xCE76, 0x59ED, 0xCE77, 0x5BA8, 0xCE78, 0x5C4C, 0xCE79, 0x5CD0, 0xCE7A, 0x5CD8, 0xCE7B, 0x5CCC, 0xCE7C, 0x5CD7,
- 0xCE7D, 0x5CCB, 0xCE7E, 0x5CDB, 0xCEA1, 0x5CDE, 0xCEA2, 0x5CDA, 0xCEA3, 0x5CC9, 0xCEA4, 0x5CC7, 0xCEA5, 0x5CCA, 0xCEA6, 0x5CD6,
- 0xCEA7, 0x5CD3, 0xCEA8, 0x5CD4, 0xCEA9, 0x5CCF, 0xCEAA, 0x5CC8, 0xCEAB, 0x5CC6, 0xCEAC, 0x5CCE, 0xCEAD, 0x5CDF, 0xCEAE, 0x5CF8,
- 0xCEAF, 0x5DF9, 0xCEB0, 0x5E21, 0xCEB1, 0x5E22, 0xCEB2, 0x5E23, 0xCEB3, 0x5E20, 0xCEB4, 0x5E24, 0xCEB5, 0x5EB0, 0xCEB6, 0x5EA4,
- 0xCEB7, 0x5EA2, 0xCEB8, 0x5E9B, 0xCEB9, 0x5EA3, 0xCEBA, 0x5EA5, 0xCEBB, 0x5F07, 0xCEBC, 0x5F2E, 0xCEBD, 0x5F56, 0xCEBE, 0x5F86,
- 0xCEBF, 0x6037, 0xCEC0, 0x6039, 0xCEC1, 0x6054, 0xCEC2, 0x6072, 0xCEC3, 0x605E, 0xCEC4, 0x6045, 0xCEC5, 0x6053, 0xCEC6, 0x6047,
- 0xCEC7, 0x6049, 0xCEC8, 0x605B, 0xCEC9, 0x604C, 0xCECA, 0x6040, 0xCECB, 0x6042, 0xCECC, 0x605F, 0xCECD, 0x6024, 0xCECE, 0x6044,
- 0xCECF, 0x6058, 0xCED0, 0x6066, 0xCED1, 0x606E, 0xCED2, 0x6242, 0xCED3, 0x6243, 0xCED4, 0x62CF, 0xCED5, 0x630D, 0xCED6, 0x630B,
- 0xCED7, 0x62F5, 0xCED8, 0x630E, 0xCED9, 0x6303, 0xCEDA, 0x62EB, 0xCEDB, 0x62F9, 0xCEDC, 0x630F, 0xCEDD, 0x630C, 0xCEDE, 0x62F8,
- 0xCEDF, 0x62F6, 0xCEE0, 0x6300, 0xCEE1, 0x6313, 0xCEE2, 0x6314, 0xCEE3, 0x62FA, 0xCEE4, 0x6315, 0xCEE5, 0x62FB, 0xCEE6, 0x62F0,
- 0xCEE7, 0x6541, 0xCEE8, 0x6543, 0xCEE9, 0x65AA, 0xCEEA, 0x65BF, 0xCEEB, 0x6636, 0xCEEC, 0x6621, 0xCEED, 0x6632, 0xCEEE, 0x6635,
- 0xCEEF, 0x661C, 0xCEF0, 0x6626, 0xCEF1, 0x6622, 0xCEF2, 0x6633, 0xCEF3, 0x662B, 0xCEF4, 0x663A, 0xCEF5, 0x661D, 0xCEF6, 0x6634,
- 0xCEF7, 0x6639, 0xCEF8, 0x662E, 0xCEF9, 0x670F, 0xCEFA, 0x6710, 0xCEFB, 0x67C1, 0xCEFC, 0x67F2, 0xCEFD, 0x67C8, 0xCEFE, 0x67BA,
- 0xCF40, 0x67DC, 0xCF41, 0x67BB, 0xCF42, 0x67F8, 0xCF43, 0x67D8, 0xCF44, 0x67C0, 0xCF45, 0x67B7, 0xCF46, 0x67C5, 0xCF47, 0x67EB,
- 0xCF48, 0x67E4, 0xCF49, 0x67DF, 0xCF4A, 0x67B5, 0xCF4B, 0x67CD, 0xCF4C, 0x67B3, 0xCF4D, 0x67F7, 0xCF4E, 0x67F6, 0xCF4F, 0x67EE,
- 0xCF50, 0x67E3, 0xCF51, 0x67C2, 0xCF52, 0x67B9, 0xCF53, 0x67CE, 0xCF54, 0x67E7, 0xCF55, 0x67F0, 0xCF56, 0x67B2, 0xCF57, 0x67FC,
- 0xCF58, 0x67C6, 0xCF59, 0x67ED, 0xCF5A, 0x67CC, 0xCF5B, 0x67AE, 0xCF5C, 0x67E6, 0xCF5D, 0x67DB, 0xCF5E, 0x67FA, 0xCF5F, 0x67C9,
- 0xCF60, 0x67CA, 0xCF61, 0x67C3, 0xCF62, 0x67EA, 0xCF63, 0x67CB, 0xCF64, 0x6B28, 0xCF65, 0x6B82, 0xCF66, 0x6B84, 0xCF67, 0x6BB6,
- 0xCF68, 0x6BD6, 0xCF69, 0x6BD8, 0xCF6A, 0x6BE0, 0xCF6B, 0x6C20, 0xCF6C, 0x6C21, 0xCF6D, 0x6D28, 0xCF6E, 0x6D34, 0xCF6F, 0x6D2D,
- 0xCF70, 0x6D1F, 0xCF71, 0x6D3C, 0xCF72, 0x6D3F, 0xCF73, 0x6D12, 0xCF74, 0x6D0A, 0xCF75, 0x6CDA, 0xCF76, 0x6D33, 0xCF77, 0x6D04,
- 0xCF78, 0x6D19, 0xCF79, 0x6D3A, 0xCF7A, 0x6D1A, 0xCF7B, 0x6D11, 0xCF7C, 0x6D00, 0xCF7D, 0x6D1D, 0xCF7E, 0x6D42, 0xCFA1, 0x6D01,
- 0xCFA2, 0x6D18, 0xCFA3, 0x6D37, 0xCFA4, 0x6D03, 0xCFA5, 0x6D0F, 0xCFA6, 0x6D40, 0xCFA7, 0x6D07, 0xCFA8, 0x6D20, 0xCFA9, 0x6D2C,
- 0xCFAA, 0x6D08, 0xCFAB, 0x6D22, 0xCFAC, 0x6D09, 0xCFAD, 0x6D10, 0xCFAE, 0x70B7, 0xCFAF, 0x709F, 0xCFB0, 0x70BE, 0xCFB1, 0x70B1,
- 0xCFB2, 0x70B0, 0xCFB3, 0x70A1, 0xCFB4, 0x70B4, 0xCFB5, 0x70B5, 0xCFB6, 0x70A9, 0xCFB7, 0x7241, 0xCFB8, 0x7249, 0xCFB9, 0x724A,
- 0xCFBA, 0x726C, 0xCFBB, 0x7270, 0xCFBC, 0x7273, 0xCFBD, 0x726E, 0xCFBE, 0x72CA, 0xCFBF, 0x72E4, 0xCFC0, 0x72E8, 0xCFC1, 0x72EB,
- 0xCFC2, 0x72DF, 0xCFC3, 0x72EA, 0xCFC4, 0x72E6, 0xCFC5, 0x72E3, 0xCFC6, 0x7385, 0xCFC7, 0x73CC, 0xCFC8, 0x73C2, 0xCFC9, 0x73C8,
- 0xCFCA, 0x73C5, 0xCFCB, 0x73B9, 0xCFCC, 0x73B6, 0xCFCD, 0x73B5, 0xCFCE, 0x73B4, 0xCFCF, 0x73EB, 0xCFD0, 0x73BF, 0xCFD1, 0x73C7,
- 0xCFD2, 0x73BE, 0xCFD3, 0x73C3, 0xCFD4, 0x73C6, 0xCFD5, 0x73B8, 0xCFD6, 0x73CB, 0xCFD7, 0x74EC, 0xCFD8, 0x74EE, 0xCFD9, 0x752E,
- 0xCFDA, 0x7547, 0xCFDB, 0x7548, 0xCFDC, 0x75A7, 0xCFDD, 0x75AA, 0xCFDE, 0x7679, 0xCFDF, 0x76C4, 0xCFE0, 0x7708, 0xCFE1, 0x7703,
- 0xCFE2, 0x7704, 0xCFE3, 0x7705, 0xCFE4, 0x770A, 0xCFE5, 0x76F7, 0xCFE6, 0x76FB, 0xCFE7, 0x76FA, 0xCFE8, 0x77E7, 0xCFE9, 0x77E8,
- 0xCFEA, 0x7806, 0xCFEB, 0x7811, 0xCFEC, 0x7812, 0xCFED, 0x7805, 0xCFEE, 0x7810, 0xCFEF, 0x780F, 0xCFF0, 0x780E, 0xCFF1, 0x7809,
- 0xCFF2, 0x7803, 0xCFF3, 0x7813, 0xCFF4, 0x794A, 0xCFF5, 0x794C, 0xCFF6, 0x794B, 0xCFF7, 0x7945, 0xCFF8, 0x7944, 0xCFF9, 0x79D5,
- 0xCFFA, 0x79CD, 0xCFFB, 0x79CF, 0xCFFC, 0x79D6, 0xCFFD, 0x79CE, 0xCFFE, 0x7A80, 0xD040, 0x7A7E, 0xD041, 0x7AD1, 0xD042, 0x7B00,
- 0xD043, 0x7B01, 0xD044, 0x7C7A, 0xD045, 0x7C78, 0xD046, 0x7C79, 0xD047, 0x7C7F, 0xD048, 0x7C80, 0xD049, 0x7C81, 0xD04A, 0x7D03,
- 0xD04B, 0x7D08, 0xD04C, 0x7D01, 0xD04D, 0x7F58, 0xD04E, 0x7F91, 0xD04F, 0x7F8D, 0xD050, 0x7FBE, 0xD051, 0x8007, 0xD052, 0x800E,
- 0xD053, 0x800F, 0xD054, 0x8014, 0xD055, 0x8037, 0xD056, 0x80D8, 0xD057, 0x80C7, 0xD058, 0x80E0, 0xD059, 0x80D1, 0xD05A, 0x80C8,
- 0xD05B, 0x80C2, 0xD05C, 0x80D0, 0xD05D, 0x80C5, 0xD05E, 0x80E3, 0xD05F, 0x80D9, 0xD060, 0x80DC, 0xD061, 0x80CA, 0xD062, 0x80D5,
- 0xD063, 0x80C9, 0xD064, 0x80CF, 0xD065, 0x80D7, 0xD066, 0x80E6, 0xD067, 0x80CD, 0xD068, 0x81FF, 0xD069, 0x8221, 0xD06A, 0x8294,
- 0xD06B, 0x82D9, 0xD06C, 0x82FE, 0xD06D, 0x82F9, 0xD06E, 0x8307, 0xD06F, 0x82E8, 0xD070, 0x8300, 0xD071, 0x82D5, 0xD072, 0x833A,
- 0xD073, 0x82EB, 0xD074, 0x82D6, 0xD075, 0x82F4, 0xD076, 0x82EC, 0xD077, 0x82E1, 0xD078, 0x82F2, 0xD079, 0x82F5, 0xD07A, 0x830C,
- 0xD07B, 0x82FB, 0xD07C, 0x82F6, 0xD07D, 0x82F0, 0xD07E, 0x82EA, 0xD0A1, 0x82E4, 0xD0A2, 0x82E0, 0xD0A3, 0x82FA, 0xD0A4, 0x82F3,
- 0xD0A5, 0x82ED, 0xD0A6, 0x8677, 0xD0A7, 0x8674, 0xD0A8, 0x867C, 0xD0A9, 0x8673, 0xD0AA, 0x8841, 0xD0AB, 0x884E, 0xD0AC, 0x8867,
- 0xD0AD, 0x886A, 0xD0AE, 0x8869, 0xD0AF, 0x89D3, 0xD0B0, 0x8A04, 0xD0B1, 0x8A07, 0xD0B2, 0x8D72, 0xD0B3, 0x8FE3, 0xD0B4, 0x8FE1,
- 0xD0B5, 0x8FEE, 0xD0B6, 0x8FE0, 0xD0B7, 0x90F1, 0xD0B8, 0x90BD, 0xD0B9, 0x90BF, 0xD0BA, 0x90D5, 0xD0BB, 0x90C5, 0xD0BC, 0x90BE,
- 0xD0BD, 0x90C7, 0xD0BE, 0x90CB, 0xD0BF, 0x90C8, 0xD0C0, 0x91D4, 0xD0C1, 0x91D3, 0xD0C2, 0x9654, 0xD0C3, 0x964F, 0xD0C4, 0x9651,
- 0xD0C5, 0x9653, 0xD0C6, 0x964A, 0xD0C7, 0x964E, 0xD0C8, 0x501E, 0xD0C9, 0x5005, 0xD0CA, 0x5007, 0xD0CB, 0x5013, 0xD0CC, 0x5022,
- 0xD0CD, 0x5030, 0xD0CE, 0x501B, 0xD0CF, 0x4FF5, 0xD0D0, 0x4FF4, 0xD0D1, 0x5033, 0xD0D2, 0x5037, 0xD0D3, 0x502C, 0xD0D4, 0x4FF6,
- 0xD0D5, 0x4FF7, 0xD0D6, 0x5017, 0xD0D7, 0x501C, 0xD0D8, 0x5020, 0xD0D9, 0x5027, 0xD0DA, 0x5035, 0xD0DB, 0x502F, 0xD0DC, 0x5031,
- 0xD0DD, 0x500E, 0xD0DE, 0x515A, 0xD0DF, 0x5194, 0xD0E0, 0x5193, 0xD0E1, 0x51CA, 0xD0E2, 0x51C4, 0xD0E3, 0x51C5, 0xD0E4, 0x51C8,
- 0xD0E5, 0x51CE, 0xD0E6, 0x5261, 0xD0E7, 0x525A, 0xD0E8, 0x5252, 0xD0E9, 0x525E, 0xD0EA, 0x525F, 0xD0EB, 0x5255, 0xD0EC, 0x5262,
- 0xD0ED, 0x52CD, 0xD0EE, 0x530E, 0xD0EF, 0x539E, 0xD0F0, 0x5526, 0xD0F1, 0x54E2, 0xD0F2, 0x5517, 0xD0F3, 0x5512, 0xD0F4, 0x54E7,
- 0xD0F5, 0x54F3, 0xD0F6, 0x54E4, 0xD0F7, 0x551A, 0xD0F8, 0x54FF, 0xD0F9, 0x5504, 0xD0FA, 0x5508, 0xD0FB, 0x54EB, 0xD0FC, 0x5511,
- 0xD0FD, 0x5505, 0xD0FE, 0x54F1, 0xD140, 0x550A, 0xD141, 0x54FB, 0xD142, 0x54F7, 0xD143, 0x54F8, 0xD144, 0x54E0, 0xD145, 0x550E,
- 0xD146, 0x5503, 0xD147, 0x550B, 0xD148, 0x5701, 0xD149, 0x5702, 0xD14A, 0x57CC, 0xD14B, 0x5832, 0xD14C, 0x57D5, 0xD14D, 0x57D2,
- 0xD14E, 0x57BA, 0xD14F, 0x57C6, 0xD150, 0x57BD, 0xD151, 0x57BC, 0xD152, 0x57B8, 0xD153, 0x57B6, 0xD154, 0x57BF, 0xD155, 0x57C7,
- 0xD156, 0x57D0, 0xD157, 0x57B9, 0xD158, 0x57C1, 0xD159, 0x590E, 0xD15A, 0x594A, 0xD15B, 0x5A19, 0xD15C, 0x5A16, 0xD15D, 0x5A2D,
- 0xD15E, 0x5A2E, 0xD15F, 0x5A15, 0xD160, 0x5A0F, 0xD161, 0x5A17, 0xD162, 0x5A0A, 0xD163, 0x5A1E, 0xD164, 0x5A33, 0xD165, 0x5B6C,
- 0xD166, 0x5BA7, 0xD167, 0x5BAD, 0xD168, 0x5BAC, 0xD169, 0x5C03, 0xD16A, 0x5C56, 0xD16B, 0x5C54, 0xD16C, 0x5CEC, 0xD16D, 0x5CFF,
- 0xD16E, 0x5CEE, 0xD16F, 0x5CF1, 0xD170, 0x5CF7, 0xD171, 0x5D00, 0xD172, 0x5CF9, 0xD173, 0x5E29, 0xD174, 0x5E28, 0xD175, 0x5EA8,
- 0xD176, 0x5EAE, 0xD177, 0x5EAA, 0xD178, 0x5EAC, 0xD179, 0x5F33, 0xD17A, 0x5F30, 0xD17B, 0x5F67, 0xD17C, 0x605D, 0xD17D, 0x605A,
- 0xD17E, 0x6067, 0xD1A1, 0x6041, 0xD1A2, 0x60A2, 0xD1A3, 0x6088, 0xD1A4, 0x6080, 0xD1A5, 0x6092, 0xD1A6, 0x6081, 0xD1A7, 0x609D,
- 0xD1A8, 0x6083, 0xD1A9, 0x6095, 0xD1AA, 0x609B, 0xD1AB, 0x6097, 0xD1AC, 0x6087, 0xD1AD, 0x609C, 0xD1AE, 0x608E, 0xD1AF, 0x6219,
- 0xD1B0, 0x6246, 0xD1B1, 0x62F2, 0xD1B2, 0x6310, 0xD1B3, 0x6356, 0xD1B4, 0x632C, 0xD1B5, 0x6344, 0xD1B6, 0x6345, 0xD1B7, 0x6336,
- 0xD1B8, 0x6343, 0xD1B9, 0x63E4, 0xD1BA, 0x6339, 0xD1BB, 0x634B, 0xD1BC, 0x634A, 0xD1BD, 0x633C, 0xD1BE, 0x6329, 0xD1BF, 0x6341,
- 0xD1C0, 0x6334, 0xD1C1, 0x6358, 0xD1C2, 0x6354, 0xD1C3, 0x6359, 0xD1C4, 0x632D, 0xD1C5, 0x6347, 0xD1C6, 0x6333, 0xD1C7, 0x635A,
- 0xD1C8, 0x6351, 0xD1C9, 0x6338, 0xD1CA, 0x6357, 0xD1CB, 0x6340, 0xD1CC, 0x6348, 0xD1CD, 0x654A, 0xD1CE, 0x6546, 0xD1CF, 0x65C6,
- 0xD1D0, 0x65C3, 0xD1D1, 0x65C4, 0xD1D2, 0x65C2, 0xD1D3, 0x664A, 0xD1D4, 0x665F, 0xD1D5, 0x6647, 0xD1D6, 0x6651, 0xD1D7, 0x6712,
- 0xD1D8, 0x6713, 0xD1D9, 0x681F, 0xD1DA, 0x681A, 0xD1DB, 0x6849, 0xD1DC, 0x6832, 0xD1DD, 0x6833, 0xD1DE, 0x683B, 0xD1DF, 0x684B,
- 0xD1E0, 0x684F, 0xD1E1, 0x6816, 0xD1E2, 0x6831, 0xD1E3, 0x681C, 0xD1E4, 0x6835, 0xD1E5, 0x682B, 0xD1E6, 0x682D, 0xD1E7, 0x682F,
- 0xD1E8, 0x684E, 0xD1E9, 0x6844, 0xD1EA, 0x6834, 0xD1EB, 0x681D, 0xD1EC, 0x6812, 0xD1ED, 0x6814, 0xD1EE, 0x6826, 0xD1EF, 0x6828,
- 0xD1F0, 0x682E, 0xD1F1, 0x684D, 0xD1F2, 0x683A, 0xD1F3, 0x6825, 0xD1F4, 0x6820, 0xD1F5, 0x6B2C, 0xD1F6, 0x6B2F, 0xD1F7, 0x6B2D,
- 0xD1F8, 0x6B31, 0xD1F9, 0x6B34, 0xD1FA, 0x6B6D, 0xD1FB, 0x8082, 0xD1FC, 0x6B88, 0xD1FD, 0x6BE6, 0xD1FE, 0x6BE4, 0xD240, 0x6BE8,
- 0xD241, 0x6BE3, 0xD242, 0x6BE2, 0xD243, 0x6BE7, 0xD244, 0x6C25, 0xD245, 0x6D7A, 0xD246, 0x6D63, 0xD247, 0x6D64, 0xD248, 0x6D76,
- 0xD249, 0x6D0D, 0xD24A, 0x6D61, 0xD24B, 0x6D92, 0xD24C, 0x6D58, 0xD24D, 0x6D62, 0xD24E, 0x6D6D, 0xD24F, 0x6D6F, 0xD250, 0x6D91,
- 0xD251, 0x6D8D, 0xD252, 0x6DEF, 0xD253, 0x6D7F, 0xD254, 0x6D86, 0xD255, 0x6D5E, 0xD256, 0x6D67, 0xD257, 0x6D60, 0xD258, 0x6D97,
- 0xD259, 0x6D70, 0xD25A, 0x6D7C, 0xD25B, 0x6D5F, 0xD25C, 0x6D82, 0xD25D, 0x6D98, 0xD25E, 0x6D2F, 0xD25F, 0x6D68, 0xD260, 0x6D8B,
- 0xD261, 0x6D7E, 0xD262, 0x6D80, 0xD263, 0x6D84, 0xD264, 0x6D16, 0xD265, 0x6D83, 0xD266, 0x6D7B, 0xD267, 0x6D7D, 0xD268, 0x6D75,
- 0xD269, 0x6D90, 0xD26A, 0x70DC, 0xD26B, 0x70D3, 0xD26C, 0x70D1, 0xD26D, 0x70DD, 0xD26E, 0x70CB, 0xD26F, 0x7F39, 0xD270, 0x70E2,
- 0xD271, 0x70D7, 0xD272, 0x70D2, 0xD273, 0x70DE, 0xD274, 0x70E0, 0xD275, 0x70D4, 0xD276, 0x70CD, 0xD277, 0x70C5, 0xD278, 0x70C6,
- 0xD279, 0x70C7, 0xD27A, 0x70DA, 0xD27B, 0x70CE, 0xD27C, 0x70E1, 0xD27D, 0x7242, 0xD27E, 0x7278, 0xD2A1, 0x7277, 0xD2A2, 0x7276,
- 0xD2A3, 0x7300, 0xD2A4, 0x72FA, 0xD2A5, 0x72F4, 0xD2A6, 0x72FE, 0xD2A7, 0x72F6, 0xD2A8, 0x72F3, 0xD2A9, 0x72FB, 0xD2AA, 0x7301,
- 0xD2AB, 0x73D3, 0xD2AC, 0x73D9, 0xD2AD, 0x73E5, 0xD2AE, 0x73D6, 0xD2AF, 0x73BC, 0xD2B0, 0x73E7, 0xD2B1, 0x73E3, 0xD2B2, 0x73E9,
- 0xD2B3, 0x73DC, 0xD2B4, 0x73D2, 0xD2B5, 0x73DB, 0xD2B6, 0x73D4, 0xD2B7, 0x73DD, 0xD2B8, 0x73DA, 0xD2B9, 0x73D7, 0xD2BA, 0x73D8,
- 0xD2BB, 0x73E8, 0xD2BC, 0x74DE, 0xD2BD, 0x74DF, 0xD2BE, 0x74F4, 0xD2BF, 0x74F5, 0xD2C0, 0x7521, 0xD2C1, 0x755B, 0xD2C2, 0x755F,
- 0xD2C3, 0x75B0, 0xD2C4, 0x75C1, 0xD2C5, 0x75BB, 0xD2C6, 0x75C4, 0xD2C7, 0x75C0, 0xD2C8, 0x75BF, 0xD2C9, 0x75B6, 0xD2CA, 0x75BA,
- 0xD2CB, 0x768A, 0xD2CC, 0x76C9, 0xD2CD, 0x771D, 0xD2CE, 0x771B, 0xD2CF, 0x7710, 0xD2D0, 0x7713, 0xD2D1, 0x7712, 0xD2D2, 0x7723,
- 0xD2D3, 0x7711, 0xD2D4, 0x7715, 0xD2D5, 0x7719, 0xD2D6, 0x771A, 0xD2D7, 0x7722, 0xD2D8, 0x7727, 0xD2D9, 0x7823, 0xD2DA, 0x782C,
- 0xD2DB, 0x7822, 0xD2DC, 0x7835, 0xD2DD, 0x782F, 0xD2DE, 0x7828, 0xD2DF, 0x782E, 0xD2E0, 0x782B, 0xD2E1, 0x7821, 0xD2E2, 0x7829,
- 0xD2E3, 0x7833, 0xD2E4, 0x782A, 0xD2E5, 0x7831, 0xD2E6, 0x7954, 0xD2E7, 0x795B, 0xD2E8, 0x794F, 0xD2E9, 0x795C, 0xD2EA, 0x7953,
- 0xD2EB, 0x7952, 0xD2EC, 0x7951, 0xD2ED, 0x79EB, 0xD2EE, 0x79EC, 0xD2EF, 0x79E0, 0xD2F0, 0x79EE, 0xD2F1, 0x79ED, 0xD2F2, 0x79EA,
- 0xD2F3, 0x79DC, 0xD2F4, 0x79DE, 0xD2F5, 0x79DD, 0xD2F6, 0x7A86, 0xD2F7, 0x7A89, 0xD2F8, 0x7A85, 0xD2F9, 0x7A8B, 0xD2FA, 0x7A8C,
- 0xD2FB, 0x7A8A, 0xD2FC, 0x7A87, 0xD2FD, 0x7AD8, 0xD2FE, 0x7B10, 0xD340, 0x7B04, 0xD341, 0x7B13, 0xD342, 0x7B05, 0xD343, 0x7B0F,
- 0xD344, 0x7B08, 0xD345, 0x7B0A, 0xD346, 0x7B0E, 0xD347, 0x7B09, 0xD348, 0x7B12, 0xD349, 0x7C84, 0xD34A, 0x7C91, 0xD34B, 0x7C8A,
- 0xD34C, 0x7C8C, 0xD34D, 0x7C88, 0xD34E, 0x7C8D, 0xD34F, 0x7C85, 0xD350, 0x7D1E, 0xD351, 0x7D1D, 0xD352, 0x7D11, 0xD353, 0x7D0E,
- 0xD354, 0x7D18, 0xD355, 0x7D16, 0xD356, 0x7D13, 0xD357, 0x7D1F, 0xD358, 0x7D12, 0xD359, 0x7D0F, 0xD35A, 0x7D0C, 0xD35B, 0x7F5C,
- 0xD35C, 0x7F61, 0xD35D, 0x7F5E, 0xD35E, 0x7F60, 0xD35F, 0x7F5D, 0xD360, 0x7F5B, 0xD361, 0x7F96, 0xD362, 0x7F92, 0xD363, 0x7FC3,
- 0xD364, 0x7FC2, 0xD365, 0x7FC0, 0xD366, 0x8016, 0xD367, 0x803E, 0xD368, 0x8039, 0xD369, 0x80FA, 0xD36A, 0x80F2, 0xD36B, 0x80F9,
- 0xD36C, 0x80F5, 0xD36D, 0x8101, 0xD36E, 0x80FB, 0xD36F, 0x8100, 0xD370, 0x8201, 0xD371, 0x822F, 0xD372, 0x8225, 0xD373, 0x8333,
- 0xD374, 0x832D, 0xD375, 0x8344, 0xD376, 0x8319, 0xD377, 0x8351, 0xD378, 0x8325, 0xD379, 0x8356, 0xD37A, 0x833F, 0xD37B, 0x8341,
- 0xD37C, 0x8326, 0xD37D, 0x831C, 0xD37E, 0x8322, 0xD3A1, 0x8342, 0xD3A2, 0x834E, 0xD3A3, 0x831B, 0xD3A4, 0x832A, 0xD3A5, 0x8308,
- 0xD3A6, 0x833C, 0xD3A7, 0x834D, 0xD3A8, 0x8316, 0xD3A9, 0x8324, 0xD3AA, 0x8320, 0xD3AB, 0x8337, 0xD3AC, 0x832F, 0xD3AD, 0x8329,
- 0xD3AE, 0x8347, 0xD3AF, 0x8345, 0xD3B0, 0x834C, 0xD3B1, 0x8353, 0xD3B2, 0x831E, 0xD3B3, 0x832C, 0xD3B4, 0x834B, 0xD3B5, 0x8327,
- 0xD3B6, 0x8348, 0xD3B7, 0x8653, 0xD3B8, 0x8652, 0xD3B9, 0x86A2, 0xD3BA, 0x86A8, 0xD3BB, 0x8696, 0xD3BC, 0x868D, 0xD3BD, 0x8691,
- 0xD3BE, 0x869E, 0xD3BF, 0x8687, 0xD3C0, 0x8697, 0xD3C1, 0x8686, 0xD3C2, 0x868B, 0xD3C3, 0x869A, 0xD3C4, 0x8685, 0xD3C5, 0x86A5,
- 0xD3C6, 0x8699, 0xD3C7, 0x86A1, 0xD3C8, 0x86A7, 0xD3C9, 0x8695, 0xD3CA, 0x8698, 0xD3CB, 0x868E, 0xD3CC, 0x869D, 0xD3CD, 0x8690,
- 0xD3CE, 0x8694, 0xD3CF, 0x8843, 0xD3D0, 0x8844, 0xD3D1, 0x886D, 0xD3D2, 0x8875, 0xD3D3, 0x8876, 0xD3D4, 0x8872, 0xD3D5, 0x8880,
- 0xD3D6, 0x8871, 0xD3D7, 0x887F, 0xD3D8, 0x886F, 0xD3D9, 0x8883, 0xD3DA, 0x887E, 0xD3DB, 0x8874, 0xD3DC, 0x887C, 0xD3DD, 0x8A12,
- 0xD3DE, 0x8C47, 0xD3DF, 0x8C57, 0xD3E0, 0x8C7B, 0xD3E1, 0x8CA4, 0xD3E2, 0x8CA3, 0xD3E3, 0x8D76, 0xD3E4, 0x8D78, 0xD3E5, 0x8DB5,
- 0xD3E6, 0x8DB7, 0xD3E7, 0x8DB6, 0xD3E8, 0x8ED1, 0xD3E9, 0x8ED3, 0xD3EA, 0x8FFE, 0xD3EB, 0x8FF5, 0xD3EC, 0x9002, 0xD3ED, 0x8FFF,
- 0xD3EE, 0x8FFB, 0xD3EF, 0x9004, 0xD3F0, 0x8FFC, 0xD3F1, 0x8FF6, 0xD3F2, 0x90D6, 0xD3F3, 0x90E0, 0xD3F4, 0x90D9, 0xD3F5, 0x90DA,
- 0xD3F6, 0x90E3, 0xD3F7, 0x90DF, 0xD3F8, 0x90E5, 0xD3F9, 0x90D8, 0xD3FA, 0x90DB, 0xD3FB, 0x90D7, 0xD3FC, 0x90DC, 0xD3FD, 0x90E4,
- 0xD3FE, 0x9150, 0xD440, 0x914E, 0xD441, 0x914F, 0xD442, 0x91D5, 0xD443, 0x91E2, 0xD444, 0x91DA, 0xD445, 0x965C, 0xD446, 0x965F,
- 0xD447, 0x96BC, 0xD448, 0x98E3, 0xD449, 0x9ADF, 0xD44A, 0x9B2F, 0xD44B, 0x4E7F, 0xD44C, 0x5070, 0xD44D, 0x506A, 0xD44E, 0x5061,
- 0xD44F, 0x505E, 0xD450, 0x5060, 0xD451, 0x5053, 0xD452, 0x504B, 0xD453, 0x505D, 0xD454, 0x5072, 0xD455, 0x5048, 0xD456, 0x504D,
- 0xD457, 0x5041, 0xD458, 0x505B, 0xD459, 0x504A, 0xD45A, 0x5062, 0xD45B, 0x5015, 0xD45C, 0x5045, 0xD45D, 0x505F, 0xD45E, 0x5069,
- 0xD45F, 0x506B, 0xD460, 0x5063, 0xD461, 0x5064, 0xD462, 0x5046, 0xD463, 0x5040, 0xD464, 0x506E, 0xD465, 0x5073, 0xD466, 0x5057,
- 0xD467, 0x5051, 0xD468, 0x51D0, 0xD469, 0x526B, 0xD46A, 0x526D, 0xD46B, 0x526C, 0xD46C, 0x526E, 0xD46D, 0x52D6, 0xD46E, 0x52D3,
- 0xD46F, 0x532D, 0xD470, 0x539C, 0xD471, 0x5575, 0xD472, 0x5576, 0xD473, 0x553C, 0xD474, 0x554D, 0xD475, 0x5550, 0xD476, 0x5534,
- 0xD477, 0x552A, 0xD478, 0x5551, 0xD479, 0x5562, 0xD47A, 0x5536, 0xD47B, 0x5535, 0xD47C, 0x5530, 0xD47D, 0x5552, 0xD47E, 0x5545,
- 0xD4A1, 0x550C, 0xD4A2, 0x5532, 0xD4A3, 0x5565, 0xD4A4, 0x554E, 0xD4A5, 0x5539, 0xD4A6, 0x5548, 0xD4A7, 0x552D, 0xD4A8, 0x553B,
- 0xD4A9, 0x5540, 0xD4AA, 0x554B, 0xD4AB, 0x570A, 0xD4AC, 0x5707, 0xD4AD, 0x57FB, 0xD4AE, 0x5814, 0xD4AF, 0x57E2, 0xD4B0, 0x57F6,
- 0xD4B1, 0x57DC, 0xD4B2, 0x57F4, 0xD4B3, 0x5800, 0xD4B4, 0x57ED, 0xD4B5, 0x57FD, 0xD4B6, 0x5808, 0xD4B7, 0x57F8, 0xD4B8, 0x580B,
- 0xD4B9, 0x57F3, 0xD4BA, 0x57CF, 0xD4BB, 0x5807, 0xD4BC, 0x57EE, 0xD4BD, 0x57E3, 0xD4BE, 0x57F2, 0xD4BF, 0x57E5, 0xD4C0, 0x57EC,
- 0xD4C1, 0x57E1, 0xD4C2, 0x580E, 0xD4C3, 0x57FC, 0xD4C4, 0x5810, 0xD4C5, 0x57E7, 0xD4C6, 0x5801, 0xD4C7, 0x580C, 0xD4C8, 0x57F1,
- 0xD4C9, 0x57E9, 0xD4CA, 0x57F0, 0xD4CB, 0x580D, 0xD4CC, 0x5804, 0xD4CD, 0x595C, 0xD4CE, 0x5A60, 0xD4CF, 0x5A58, 0xD4D0, 0x5A55,
- 0xD4D1, 0x5A67, 0xD4D2, 0x5A5E, 0xD4D3, 0x5A38, 0xD4D4, 0x5A35, 0xD4D5, 0x5A6D, 0xD4D6, 0x5A50, 0xD4D7, 0x5A5F, 0xD4D8, 0x5A65,
- 0xD4D9, 0x5A6C, 0xD4DA, 0x5A53, 0xD4DB, 0x5A64, 0xD4DC, 0x5A57, 0xD4DD, 0x5A43, 0xD4DE, 0x5A5D, 0xD4DF, 0x5A52, 0xD4E0, 0x5A44,
- 0xD4E1, 0x5A5B, 0xD4E2, 0x5A48, 0xD4E3, 0x5A8E, 0xD4E4, 0x5A3E, 0xD4E5, 0x5A4D, 0xD4E6, 0x5A39, 0xD4E7, 0x5A4C, 0xD4E8, 0x5A70,
- 0xD4E9, 0x5A69, 0xD4EA, 0x5A47, 0xD4EB, 0x5A51, 0xD4EC, 0x5A56, 0xD4ED, 0x5A42, 0xD4EE, 0x5A5C, 0xD4EF, 0x5B72, 0xD4F0, 0x5B6E,
- 0xD4F1, 0x5BC1, 0xD4F2, 0x5BC0, 0xD4F3, 0x5C59, 0xD4F4, 0x5D1E, 0xD4F5, 0x5D0B, 0xD4F6, 0x5D1D, 0xD4F7, 0x5D1A, 0xD4F8, 0x5D20,
- 0xD4F9, 0x5D0C, 0xD4FA, 0x5D28, 0xD4FB, 0x5D0D, 0xD4FC, 0x5D26, 0xD4FD, 0x5D25, 0xD4FE, 0x5D0F, 0xD540, 0x5D30, 0xD541, 0x5D12,
- 0xD542, 0x5D23, 0xD543, 0x5D1F, 0xD544, 0x5D2E, 0xD545, 0x5E3E, 0xD546, 0x5E34, 0xD547, 0x5EB1, 0xD548, 0x5EB4, 0xD549, 0x5EB9,
- 0xD54A, 0x5EB2, 0xD54B, 0x5EB3, 0xD54C, 0x5F36, 0xD54D, 0x5F38, 0xD54E, 0x5F9B, 0xD54F, 0x5F96, 0xD550, 0x5F9F, 0xD551, 0x608A,
- 0xD552, 0x6090, 0xD553, 0x6086, 0xD554, 0x60BE, 0xD555, 0x60B0, 0xD556, 0x60BA, 0xD557, 0x60D3, 0xD558, 0x60D4, 0xD559, 0x60CF,
- 0xD55A, 0x60E4, 0xD55B, 0x60D9, 0xD55C, 0x60DD, 0xD55D, 0x60C8, 0xD55E, 0x60B1, 0xD55F, 0x60DB, 0xD560, 0x60B7, 0xD561, 0x60CA,
- 0xD562, 0x60BF, 0xD563, 0x60C3, 0xD564, 0x60CD, 0xD565, 0x60C0, 0xD566, 0x6332, 0xD567, 0x6365, 0xD568, 0x638A, 0xD569, 0x6382,
- 0xD56A, 0x637D, 0xD56B, 0x63BD, 0xD56C, 0x639E, 0xD56D, 0x63AD, 0xD56E, 0x639D, 0xD56F, 0x6397, 0xD570, 0x63AB, 0xD571, 0x638E,
- 0xD572, 0x636F, 0xD573, 0x6387, 0xD574, 0x6390, 0xD575, 0x636E, 0xD576, 0x63AF, 0xD577, 0x6375, 0xD578, 0x639C, 0xD579, 0x636D,
- 0xD57A, 0x63AE, 0xD57B, 0x637C, 0xD57C, 0x63A4, 0xD57D, 0x633B, 0xD57E, 0x639F, 0xD5A1, 0x6378, 0xD5A2, 0x6385, 0xD5A3, 0x6381,
- 0xD5A4, 0x6391, 0xD5A5, 0x638D, 0xD5A6, 0x6370, 0xD5A7, 0x6553, 0xD5A8, 0x65CD, 0xD5A9, 0x6665, 0xD5AA, 0x6661, 0xD5AB, 0x665B,
- 0xD5AC, 0x6659, 0xD5AD, 0x665C, 0xD5AE, 0x6662, 0xD5AF, 0x6718, 0xD5B0, 0x6879, 0xD5B1, 0x6887, 0xD5B2, 0x6890, 0xD5B3, 0x689C,
- 0xD5B4, 0x686D, 0xD5B5, 0x686E, 0xD5B6, 0x68AE, 0xD5B7, 0x68AB, 0xD5B8, 0x6956, 0xD5B9, 0x686F, 0xD5BA, 0x68A3, 0xD5BB, 0x68AC,
- 0xD5BC, 0x68A9, 0xD5BD, 0x6875, 0xD5BE, 0x6874, 0xD5BF, 0x68B2, 0xD5C0, 0x688F, 0xD5C1, 0x6877, 0xD5C2, 0x6892, 0xD5C3, 0x687C,
- 0xD5C4, 0x686B, 0xD5C5, 0x6872, 0xD5C6, 0x68AA, 0xD5C7, 0x6880, 0xD5C8, 0x6871, 0xD5C9, 0x687E, 0xD5CA, 0x689B, 0xD5CB, 0x6896,
- 0xD5CC, 0x688B, 0xD5CD, 0x68A0, 0xD5CE, 0x6889, 0xD5CF, 0x68A4, 0xD5D0, 0x6878, 0xD5D1, 0x687B, 0xD5D2, 0x6891, 0xD5D3, 0x688C,
- 0xD5D4, 0x688A, 0xD5D5, 0x687D, 0xD5D6, 0x6B36, 0xD5D7, 0x6B33, 0xD5D8, 0x6B37, 0xD5D9, 0x6B38, 0xD5DA, 0x6B91, 0xD5DB, 0x6B8F,
- 0xD5DC, 0x6B8D, 0xD5DD, 0x6B8E, 0xD5DE, 0x6B8C, 0xD5DF, 0x6C2A, 0xD5E0, 0x6DC0, 0xD5E1, 0x6DAB, 0xD5E2, 0x6DB4, 0xD5E3, 0x6DB3,
- 0xD5E4, 0x6E74, 0xD5E5, 0x6DAC, 0xD5E6, 0x6DE9, 0xD5E7, 0x6DE2, 0xD5E8, 0x6DB7, 0xD5E9, 0x6DF6, 0xD5EA, 0x6DD4, 0xD5EB, 0x6E00,
- 0xD5EC, 0x6DC8, 0xD5ED, 0x6DE0, 0xD5EE, 0x6DDF, 0xD5EF, 0x6DD6, 0xD5F0, 0x6DBE, 0xD5F1, 0x6DE5, 0xD5F2, 0x6DDC, 0xD5F3, 0x6DDD,
- 0xD5F4, 0x6DDB, 0xD5F5, 0x6DF4, 0xD5F6, 0x6DCA, 0xD5F7, 0x6DBD, 0xD5F8, 0x6DED, 0xD5F9, 0x6DF0, 0xD5FA, 0x6DBA, 0xD5FB, 0x6DD5,
- 0xD5FC, 0x6DC2, 0xD5FD, 0x6DCF, 0xD5FE, 0x6DC9, 0xD640, 0x6DD0, 0xD641, 0x6DF2, 0xD642, 0x6DD3, 0xD643, 0x6DFD, 0xD644, 0x6DD7,
- 0xD645, 0x6DCD, 0xD646, 0x6DE3, 0xD647, 0x6DBB, 0xD648, 0x70FA, 0xD649, 0x710D, 0xD64A, 0x70F7, 0xD64B, 0x7117, 0xD64C, 0x70F4,
- 0xD64D, 0x710C, 0xD64E, 0x70F0, 0xD64F, 0x7104, 0xD650, 0x70F3, 0xD651, 0x7110, 0xD652, 0x70FC, 0xD653, 0x70FF, 0xD654, 0x7106,
- 0xD655, 0x7113, 0xD656, 0x7100, 0xD657, 0x70F8, 0xD658, 0x70F6, 0xD659, 0x710B, 0xD65A, 0x7102, 0xD65B, 0x710E, 0xD65C, 0x727E,
- 0xD65D, 0x727B, 0xD65E, 0x727C, 0xD65F, 0x727F, 0xD660, 0x731D, 0xD661, 0x7317, 0xD662, 0x7307, 0xD663, 0x7311, 0xD664, 0x7318,
- 0xD665, 0x730A, 0xD666, 0x7308, 0xD667, 0x72FF, 0xD668, 0x730F, 0xD669, 0x731E, 0xD66A, 0x7388, 0xD66B, 0x73F6, 0xD66C, 0x73F8,
- 0xD66D, 0x73F5, 0xD66E, 0x7404, 0xD66F, 0x7401, 0xD670, 0x73FD, 0xD671, 0x7407, 0xD672, 0x7400, 0xD673, 0x73FA, 0xD674, 0x73FC,
- 0xD675, 0x73FF, 0xD676, 0x740C, 0xD677, 0x740B, 0xD678, 0x73F4, 0xD679, 0x7408, 0xD67A, 0x7564, 0xD67B, 0x7563, 0xD67C, 0x75CE,
- 0xD67D, 0x75D2, 0xD67E, 0x75CF, 0xD6A1, 0x75CB, 0xD6A2, 0x75CC, 0xD6A3, 0x75D1, 0xD6A4, 0x75D0, 0xD6A5, 0x768F, 0xD6A6, 0x7689,
- 0xD6A7, 0x76D3, 0xD6A8, 0x7739, 0xD6A9, 0x772F, 0xD6AA, 0x772D, 0xD6AB, 0x7731, 0xD6AC, 0x7732, 0xD6AD, 0x7734, 0xD6AE, 0x7733,
- 0xD6AF, 0x773D, 0xD6B0, 0x7725, 0xD6B1, 0x773B, 0xD6B2, 0x7735, 0xD6B3, 0x7848, 0xD6B4, 0x7852, 0xD6B5, 0x7849, 0xD6B6, 0x784D,
- 0xD6B7, 0x784A, 0xD6B8, 0x784C, 0xD6B9, 0x7826, 0xD6BA, 0x7845, 0xD6BB, 0x7850, 0xD6BC, 0x7964, 0xD6BD, 0x7967, 0xD6BE, 0x7969,
- 0xD6BF, 0x796A, 0xD6C0, 0x7963, 0xD6C1, 0x796B, 0xD6C2, 0x7961, 0xD6C3, 0x79BB, 0xD6C4, 0x79FA, 0xD6C5, 0x79F8, 0xD6C6, 0x79F6,
- 0xD6C7, 0x79F7, 0xD6C8, 0x7A8F, 0xD6C9, 0x7A94, 0xD6CA, 0x7A90, 0xD6CB, 0x7B35, 0xD6CC, 0x7B47, 0xD6CD, 0x7B34, 0xD6CE, 0x7B25,
- 0xD6CF, 0x7B30, 0xD6D0, 0x7B22, 0xD6D1, 0x7B24, 0xD6D2, 0x7B33, 0xD6D3, 0x7B18, 0xD6D4, 0x7B2A, 0xD6D5, 0x7B1D, 0xD6D6, 0x7B31,
- 0xD6D7, 0x7B2B, 0xD6D8, 0x7B2D, 0xD6D9, 0x7B2F, 0xD6DA, 0x7B32, 0xD6DB, 0x7B38, 0xD6DC, 0x7B1A, 0xD6DD, 0x7B23, 0xD6DE, 0x7C94,
- 0xD6DF, 0x7C98, 0xD6E0, 0x7C96, 0xD6E1, 0x7CA3, 0xD6E2, 0x7D35, 0xD6E3, 0x7D3D, 0xD6E4, 0x7D38, 0xD6E5, 0x7D36, 0xD6E6, 0x7D3A,
- 0xD6E7, 0x7D45, 0xD6E8, 0x7D2C, 0xD6E9, 0x7D29, 0xD6EA, 0x7D41, 0xD6EB, 0x7D47, 0xD6EC, 0x7D3E, 0xD6ED, 0x7D3F, 0xD6EE, 0x7D4A,
- 0xD6EF, 0x7D3B, 0xD6F0, 0x7D28, 0xD6F1, 0x7F63, 0xD6F2, 0x7F95, 0xD6F3, 0x7F9C, 0xD6F4, 0x7F9D, 0xD6F5, 0x7F9B, 0xD6F6, 0x7FCA,
- 0xD6F7, 0x7FCB, 0xD6F8, 0x7FCD, 0xD6F9, 0x7FD0, 0xD6FA, 0x7FD1, 0xD6FB, 0x7FC7, 0xD6FC, 0x7FCF, 0xD6FD, 0x7FC9, 0xD6FE, 0x801F,
- 0xD740, 0x801E, 0xD741, 0x801B, 0xD742, 0x8047, 0xD743, 0x8043, 0xD744, 0x8048, 0xD745, 0x8118, 0xD746, 0x8125, 0xD747, 0x8119,
- 0xD748, 0x811B, 0xD749, 0x812D, 0xD74A, 0x811F, 0xD74B, 0x812C, 0xD74C, 0x811E, 0xD74D, 0x8121, 0xD74E, 0x8115, 0xD74F, 0x8127,
- 0xD750, 0x811D, 0xD751, 0x8122, 0xD752, 0x8211, 0xD753, 0x8238, 0xD754, 0x8233, 0xD755, 0x823A, 0xD756, 0x8234, 0xD757, 0x8232,
- 0xD758, 0x8274, 0xD759, 0x8390, 0xD75A, 0x83A3, 0xD75B, 0x83A8, 0xD75C, 0x838D, 0xD75D, 0x837A, 0xD75E, 0x8373, 0xD75F, 0x83A4,
- 0xD760, 0x8374, 0xD761, 0x838F, 0xD762, 0x8381, 0xD763, 0x8395, 0xD764, 0x8399, 0xD765, 0x8375, 0xD766, 0x8394, 0xD767, 0x83A9,
- 0xD768, 0x837D, 0xD769, 0x8383, 0xD76A, 0x838C, 0xD76B, 0x839D, 0xD76C, 0x839B, 0xD76D, 0x83AA, 0xD76E, 0x838B, 0xD76F, 0x837E,
- 0xD770, 0x83A5, 0xD771, 0x83AF, 0xD772, 0x8388, 0xD773, 0x8397, 0xD774, 0x83B0, 0xD775, 0x837F, 0xD776, 0x83A6, 0xD777, 0x8387,
- 0xD778, 0x83AE, 0xD779, 0x8376, 0xD77A, 0x839A, 0xD77B, 0x8659, 0xD77C, 0x8656, 0xD77D, 0x86BF, 0xD77E, 0x86B7, 0xD7A1, 0x86C2,
- 0xD7A2, 0x86C1, 0xD7A3, 0x86C5, 0xD7A4, 0x86BA, 0xD7A5, 0x86B0, 0xD7A6, 0x86C8, 0xD7A7, 0x86B9, 0xD7A8, 0x86B3, 0xD7A9, 0x86B8,
- 0xD7AA, 0x86CC, 0xD7AB, 0x86B4, 0xD7AC, 0x86BB, 0xD7AD, 0x86BC, 0xD7AE, 0x86C3, 0xD7AF, 0x86BD, 0xD7B0, 0x86BE, 0xD7B1, 0x8852,
- 0xD7B2, 0x8889, 0xD7B3, 0x8895, 0xD7B4, 0x88A8, 0xD7B5, 0x88A2, 0xD7B6, 0x88AA, 0xD7B7, 0x889A, 0xD7B8, 0x8891, 0xD7B9, 0x88A1,
- 0xD7BA, 0x889F, 0xD7BB, 0x8898, 0xD7BC, 0x88A7, 0xD7BD, 0x8899, 0xD7BE, 0x889B, 0xD7BF, 0x8897, 0xD7C0, 0x88A4, 0xD7C1, 0x88AC,
- 0xD7C2, 0x888C, 0xD7C3, 0x8893, 0xD7C4, 0x888E, 0xD7C5, 0x8982, 0xD7C6, 0x89D6, 0xD7C7, 0x89D9, 0xD7C8, 0x89D5, 0xD7C9, 0x8A30,
- 0xD7CA, 0x8A27, 0xD7CB, 0x8A2C, 0xD7CC, 0x8A1E, 0xD7CD, 0x8C39, 0xD7CE, 0x8C3B, 0xD7CF, 0x8C5C, 0xD7D0, 0x8C5D, 0xD7D1, 0x8C7D,
- 0xD7D2, 0x8CA5, 0xD7D3, 0x8D7D, 0xD7D4, 0x8D7B, 0xD7D5, 0x8D79, 0xD7D6, 0x8DBC, 0xD7D7, 0x8DC2, 0xD7D8, 0x8DB9, 0xD7D9, 0x8DBF,
- 0xD7DA, 0x8DC1, 0xD7DB, 0x8ED8, 0xD7DC, 0x8EDE, 0xD7DD, 0x8EDD, 0xD7DE, 0x8EDC, 0xD7DF, 0x8ED7, 0xD7E0, 0x8EE0, 0xD7E1, 0x8EE1,
- 0xD7E2, 0x9024, 0xD7E3, 0x900B, 0xD7E4, 0x9011, 0xD7E5, 0x901C, 0xD7E6, 0x900C, 0xD7E7, 0x9021, 0xD7E8, 0x90EF, 0xD7E9, 0x90EA,
- 0xD7EA, 0x90F0, 0xD7EB, 0x90F4, 0xD7EC, 0x90F2, 0xD7ED, 0x90F3, 0xD7EE, 0x90D4, 0xD7EF, 0x90EB, 0xD7F0, 0x90EC, 0xD7F1, 0x90E9,
- 0xD7F2, 0x9156, 0xD7F3, 0x9158, 0xD7F4, 0x915A, 0xD7F5, 0x9153, 0xD7F6, 0x9155, 0xD7F7, 0x91EC, 0xD7F8, 0x91F4, 0xD7F9, 0x91F1,
- 0xD7FA, 0x91F3, 0xD7FB, 0x91F8, 0xD7FC, 0x91E4, 0xD7FD, 0x91F9, 0xD7FE, 0x91EA, 0xD840, 0x91EB, 0xD841, 0x91F7, 0xD842, 0x91E8,
- 0xD843, 0x91EE, 0xD844, 0x957A, 0xD845, 0x9586, 0xD846, 0x9588, 0xD847, 0x967C, 0xD848, 0x966D, 0xD849, 0x966B, 0xD84A, 0x9671,
- 0xD84B, 0x966F, 0xD84C, 0x96BF, 0xD84D, 0x976A, 0xD84E, 0x9804, 0xD84F, 0x98E5, 0xD850, 0x9997, 0xD851, 0x509B, 0xD852, 0x5095,
- 0xD853, 0x5094, 0xD854, 0x509E, 0xD855, 0x508B, 0xD856, 0x50A3, 0xD857, 0x5083, 0xD858, 0x508C, 0xD859, 0x508E, 0xD85A, 0x509D,
- 0xD85B, 0x5068, 0xD85C, 0x509C, 0xD85D, 0x5092, 0xD85E, 0x5082, 0xD85F, 0x5087, 0xD860, 0x515F, 0xD861, 0x51D4, 0xD862, 0x5312,
- 0xD863, 0x5311, 0xD864, 0x53A4, 0xD865, 0x53A7, 0xD866, 0x5591, 0xD867, 0x55A8, 0xD868, 0x55A5, 0xD869, 0x55AD, 0xD86A, 0x5577,
- 0xD86B, 0x5645, 0xD86C, 0x55A2, 0xD86D, 0x5593, 0xD86E, 0x5588, 0xD86F, 0x558F, 0xD870, 0x55B5, 0xD871, 0x5581, 0xD872, 0x55A3,
- 0xD873, 0x5592, 0xD874, 0x55A4, 0xD875, 0x557D, 0xD876, 0x558C, 0xD877, 0x55A6, 0xD878, 0x557F, 0xD879, 0x5595, 0xD87A, 0x55A1,
- 0xD87B, 0x558E, 0xD87C, 0x570C, 0xD87D, 0x5829, 0xD87E, 0x5837, 0xD8A1, 0x5819, 0xD8A2, 0x581E, 0xD8A3, 0x5827, 0xD8A4, 0x5823,
- 0xD8A5, 0x5828, 0xD8A6, 0x57F5, 0xD8A7, 0x5848, 0xD8A8, 0x5825, 0xD8A9, 0x581C, 0xD8AA, 0x581B, 0xD8AB, 0x5833, 0xD8AC, 0x583F,
- 0xD8AD, 0x5836, 0xD8AE, 0x582E, 0xD8AF, 0x5839, 0xD8B0, 0x5838, 0xD8B1, 0x582D, 0xD8B2, 0x582C, 0xD8B3, 0x583B, 0xD8B4, 0x5961,
- 0xD8B5, 0x5AAF, 0xD8B6, 0x5A94, 0xD8B7, 0x5A9F, 0xD8B8, 0x5A7A, 0xD8B9, 0x5AA2, 0xD8BA, 0x5A9E, 0xD8BB, 0x5A78, 0xD8BC, 0x5AA6,
- 0xD8BD, 0x5A7C, 0xD8BE, 0x5AA5, 0xD8BF, 0x5AAC, 0xD8C0, 0x5A95, 0xD8C1, 0x5AAE, 0xD8C2, 0x5A37, 0xD8C3, 0x5A84, 0xD8C4, 0x5A8A,
- 0xD8C5, 0x5A97, 0xD8C6, 0x5A83, 0xD8C7, 0x5A8B, 0xD8C8, 0x5AA9, 0xD8C9, 0x5A7B, 0xD8CA, 0x5A7D, 0xD8CB, 0x5A8C, 0xD8CC, 0x5A9C,
- 0xD8CD, 0x5A8F, 0xD8CE, 0x5A93, 0xD8CF, 0x5A9D, 0xD8D0, 0x5BEA, 0xD8D1, 0x5BCD, 0xD8D2, 0x5BCB, 0xD8D3, 0x5BD4, 0xD8D4, 0x5BD1,
- 0xD8D5, 0x5BCA, 0xD8D6, 0x5BCE, 0xD8D7, 0x5C0C, 0xD8D8, 0x5C30, 0xD8D9, 0x5D37, 0xD8DA, 0x5D43, 0xD8DB, 0x5D6B, 0xD8DC, 0x5D41,
- 0xD8DD, 0x5D4B, 0xD8DE, 0x5D3F, 0xD8DF, 0x5D35, 0xD8E0, 0x5D51, 0xD8E1, 0x5D4E, 0xD8E2, 0x5D55, 0xD8E3, 0x5D33, 0xD8E4, 0x5D3A,
- 0xD8E5, 0x5D52, 0xD8E6, 0x5D3D, 0xD8E7, 0x5D31, 0xD8E8, 0x5D59, 0xD8E9, 0x5D42, 0xD8EA, 0x5D39, 0xD8EB, 0x5D49, 0xD8EC, 0x5D38,
- 0xD8ED, 0x5D3C, 0xD8EE, 0x5D32, 0xD8EF, 0x5D36, 0xD8F0, 0x5D40, 0xD8F1, 0x5D45, 0xD8F2, 0x5E44, 0xD8F3, 0x5E41, 0xD8F4, 0x5F58,
- 0xD8F5, 0x5FA6, 0xD8F6, 0x5FA5, 0xD8F7, 0x5FAB, 0xD8F8, 0x60C9, 0xD8F9, 0x60B9, 0xD8FA, 0x60CC, 0xD8FB, 0x60E2, 0xD8FC, 0x60CE,
- 0xD8FD, 0x60C4, 0xD8FE, 0x6114, 0xD940, 0x60F2, 0xD941, 0x610A, 0xD942, 0x6116, 0xD943, 0x6105, 0xD944, 0x60F5, 0xD945, 0x6113,
- 0xD946, 0x60F8, 0xD947, 0x60FC, 0xD948, 0x60FE, 0xD949, 0x60C1, 0xD94A, 0x6103, 0xD94B, 0x6118, 0xD94C, 0x611D, 0xD94D, 0x6110,
- 0xD94E, 0x60FF, 0xD94F, 0x6104, 0xD950, 0x610B, 0xD951, 0x624A, 0xD952, 0x6394, 0xD953, 0x63B1, 0xD954, 0x63B0, 0xD955, 0x63CE,
- 0xD956, 0x63E5, 0xD957, 0x63E8, 0xD958, 0x63EF, 0xD959, 0x63C3, 0xD95A, 0x649D, 0xD95B, 0x63F3, 0xD95C, 0x63CA, 0xD95D, 0x63E0,
- 0xD95E, 0x63F6, 0xD95F, 0x63D5, 0xD960, 0x63F2, 0xD961, 0x63F5, 0xD962, 0x6461, 0xD963, 0x63DF, 0xD964, 0x63BE, 0xD965, 0x63DD,
- 0xD966, 0x63DC, 0xD967, 0x63C4, 0xD968, 0x63D8, 0xD969, 0x63D3, 0xD96A, 0x63C2, 0xD96B, 0x63C7, 0xD96C, 0x63CC, 0xD96D, 0x63CB,
- 0xD96E, 0x63C8, 0xD96F, 0x63F0, 0xD970, 0x63D7, 0xD971, 0x63D9, 0xD972, 0x6532, 0xD973, 0x6567, 0xD974, 0x656A, 0xD975, 0x6564,
- 0xD976, 0x655C, 0xD977, 0x6568, 0xD978, 0x6565, 0xD979, 0x658C, 0xD97A, 0x659D, 0xD97B, 0x659E, 0xD97C, 0x65AE, 0xD97D, 0x65D0,
- 0xD97E, 0x65D2, 0xD9A1, 0x667C, 0xD9A2, 0x666C, 0xD9A3, 0x667B, 0xD9A4, 0x6680, 0xD9A5, 0x6671, 0xD9A6, 0x6679, 0xD9A7, 0x666A,
- 0xD9A8, 0x6672, 0xD9A9, 0x6701, 0xD9AA, 0x690C, 0xD9AB, 0x68D3, 0xD9AC, 0x6904, 0xD9AD, 0x68DC, 0xD9AE, 0x692A, 0xD9AF, 0x68EC,
- 0xD9B0, 0x68EA, 0xD9B1, 0x68F1, 0xD9B2, 0x690F, 0xD9B3, 0x68D6, 0xD9B4, 0x68F7, 0xD9B5, 0x68EB, 0xD9B6, 0x68E4, 0xD9B7, 0x68F6,
- 0xD9B8, 0x6913, 0xD9B9, 0x6910, 0xD9BA, 0x68F3, 0xD9BB, 0x68E1, 0xD9BC, 0x6907, 0xD9BD, 0x68CC, 0xD9BE, 0x6908, 0xD9BF, 0x6970,
- 0xD9C0, 0x68B4, 0xD9C1, 0x6911, 0xD9C2, 0x68EF, 0xD9C3, 0x68C6, 0xD9C4, 0x6914, 0xD9C5, 0x68F8, 0xD9C6, 0x68D0, 0xD9C7, 0x68FD,
- 0xD9C8, 0x68FC, 0xD9C9, 0x68E8, 0xD9CA, 0x690B, 0xD9CB, 0x690A, 0xD9CC, 0x6917, 0xD9CD, 0x68CE, 0xD9CE, 0x68C8, 0xD9CF, 0x68DD,
- 0xD9D0, 0x68DE, 0xD9D1, 0x68E6, 0xD9D2, 0x68F4, 0xD9D3, 0x68D1, 0xD9D4, 0x6906, 0xD9D5, 0x68D4, 0xD9D6, 0x68E9, 0xD9D7, 0x6915,
- 0xD9D8, 0x6925, 0xD9D9, 0x68C7, 0xD9DA, 0x6B39, 0xD9DB, 0x6B3B, 0xD9DC, 0x6B3F, 0xD9DD, 0x6B3C, 0xD9DE, 0x6B94, 0xD9DF, 0x6B97,
- 0xD9E0, 0x6B99, 0xD9E1, 0x6B95, 0xD9E2, 0x6BBD, 0xD9E3, 0x6BF0, 0xD9E4, 0x6BF2, 0xD9E5, 0x6BF3, 0xD9E6, 0x6C30, 0xD9E7, 0x6DFC,
- 0xD9E8, 0x6E46, 0xD9E9, 0x6E47, 0xD9EA, 0x6E1F, 0xD9EB, 0x6E49, 0xD9EC, 0x6E88, 0xD9ED, 0x6E3C, 0xD9EE, 0x6E3D, 0xD9EF, 0x6E45,
- 0xD9F0, 0x6E62, 0xD9F1, 0x6E2B, 0xD9F2, 0x6E3F, 0xD9F3, 0x6E41, 0xD9F4, 0x6E5D, 0xD9F5, 0x6E73, 0xD9F6, 0x6E1C, 0xD9F7, 0x6E33,
- 0xD9F8, 0x6E4B, 0xD9F9, 0x6E40, 0xD9FA, 0x6E51, 0xD9FB, 0x6E3B, 0xD9FC, 0x6E03, 0xD9FD, 0x6E2E, 0xD9FE, 0x6E5E, 0xDA40, 0x6E68,
- 0xDA41, 0x6E5C, 0xDA42, 0x6E61, 0xDA43, 0x6E31, 0xDA44, 0x6E28, 0xDA45, 0x6E60, 0xDA46, 0x6E71, 0xDA47, 0x6E6B, 0xDA48, 0x6E39,
- 0xDA49, 0x6E22, 0xDA4A, 0x6E30, 0xDA4B, 0x6E53, 0xDA4C, 0x6E65, 0xDA4D, 0x6E27, 0xDA4E, 0x6E78, 0xDA4F, 0x6E64, 0xDA50, 0x6E77,
- 0xDA51, 0x6E55, 0xDA52, 0x6E79, 0xDA53, 0x6E52, 0xDA54, 0x6E66, 0xDA55, 0x6E35, 0xDA56, 0x6E36, 0xDA57, 0x6E5A, 0xDA58, 0x7120,
- 0xDA59, 0x711E, 0xDA5A, 0x712F, 0xDA5B, 0x70FB, 0xDA5C, 0x712E, 0xDA5D, 0x7131, 0xDA5E, 0x7123, 0xDA5F, 0x7125, 0xDA60, 0x7122,
- 0xDA61, 0x7132, 0xDA62, 0x711F, 0xDA63, 0x7128, 0xDA64, 0x713A, 0xDA65, 0x711B, 0xDA66, 0x724B, 0xDA67, 0x725A, 0xDA68, 0x7288,
- 0xDA69, 0x7289, 0xDA6A, 0x7286, 0xDA6B, 0x7285, 0xDA6C, 0x728B, 0xDA6D, 0x7312, 0xDA6E, 0x730B, 0xDA6F, 0x7330, 0xDA70, 0x7322,
- 0xDA71, 0x7331, 0xDA72, 0x7333, 0xDA73, 0x7327, 0xDA74, 0x7332, 0xDA75, 0x732D, 0xDA76, 0x7326, 0xDA77, 0x7323, 0xDA78, 0x7335,
- 0xDA79, 0x730C, 0xDA7A, 0x742E, 0xDA7B, 0x742C, 0xDA7C, 0x7430, 0xDA7D, 0x742B, 0xDA7E, 0x7416, 0xDAA1, 0x741A, 0xDAA2, 0x7421,
- 0xDAA3, 0x742D, 0xDAA4, 0x7431, 0xDAA5, 0x7424, 0xDAA6, 0x7423, 0xDAA7, 0x741D, 0xDAA8, 0x7429, 0xDAA9, 0x7420, 0xDAAA, 0x7432,
- 0xDAAB, 0x74FB, 0xDAAC, 0x752F, 0xDAAD, 0x756F, 0xDAAE, 0x756C, 0xDAAF, 0x75E7, 0xDAB0, 0x75DA, 0xDAB1, 0x75E1, 0xDAB2, 0x75E6,
- 0xDAB3, 0x75DD, 0xDAB4, 0x75DF, 0xDAB5, 0x75E4, 0xDAB6, 0x75D7, 0xDAB7, 0x7695, 0xDAB8, 0x7692, 0xDAB9, 0x76DA, 0xDABA, 0x7746,
- 0xDABB, 0x7747, 0xDABC, 0x7744, 0xDABD, 0x774D, 0xDABE, 0x7745, 0xDABF, 0x774A, 0xDAC0, 0x774E, 0xDAC1, 0x774B, 0xDAC2, 0x774C,
- 0xDAC3, 0x77DE, 0xDAC4, 0x77EC, 0xDAC5, 0x7860, 0xDAC6, 0x7864, 0xDAC7, 0x7865, 0xDAC8, 0x785C, 0xDAC9, 0x786D, 0xDACA, 0x7871,
- 0xDACB, 0x786A, 0xDACC, 0x786E, 0xDACD, 0x7870, 0xDACE, 0x7869, 0xDACF, 0x7868, 0xDAD0, 0x785E, 0xDAD1, 0x7862, 0xDAD2, 0x7974,
- 0xDAD3, 0x7973, 0xDAD4, 0x7972, 0xDAD5, 0x7970, 0xDAD6, 0x7A02, 0xDAD7, 0x7A0A, 0xDAD8, 0x7A03, 0xDAD9, 0x7A0C, 0xDADA, 0x7A04,
- 0xDADB, 0x7A99, 0xDADC, 0x7AE6, 0xDADD, 0x7AE4, 0xDADE, 0x7B4A, 0xDADF, 0x7B3B, 0xDAE0, 0x7B44, 0xDAE1, 0x7B48, 0xDAE2, 0x7B4C,
- 0xDAE3, 0x7B4E, 0xDAE4, 0x7B40, 0xDAE5, 0x7B58, 0xDAE6, 0x7B45, 0xDAE7, 0x7CA2, 0xDAE8, 0x7C9E, 0xDAE9, 0x7CA8, 0xDAEA, 0x7CA1,
- 0xDAEB, 0x7D58, 0xDAEC, 0x7D6F, 0xDAED, 0x7D63, 0xDAEE, 0x7D53, 0xDAEF, 0x7D56, 0xDAF0, 0x7D67, 0xDAF1, 0x7D6A, 0xDAF2, 0x7D4F,
- 0xDAF3, 0x7D6D, 0xDAF4, 0x7D5C, 0xDAF5, 0x7D6B, 0xDAF6, 0x7D52, 0xDAF7, 0x7D54, 0xDAF8, 0x7D69, 0xDAF9, 0x7D51, 0xDAFA, 0x7D5F,
- 0xDAFB, 0x7D4E, 0xDAFC, 0x7F3E, 0xDAFD, 0x7F3F, 0xDAFE, 0x7F65, 0xDB40, 0x7F66, 0xDB41, 0x7FA2, 0xDB42, 0x7FA0, 0xDB43, 0x7FA1,
- 0xDB44, 0x7FD7, 0xDB45, 0x8051, 0xDB46, 0x804F, 0xDB47, 0x8050, 0xDB48, 0x80FE, 0xDB49, 0x80D4, 0xDB4A, 0x8143, 0xDB4B, 0x814A,
- 0xDB4C, 0x8152, 0xDB4D, 0x814F, 0xDB4E, 0x8147, 0xDB4F, 0x813D, 0xDB50, 0x814D, 0xDB51, 0x813A, 0xDB52, 0x81E6, 0xDB53, 0x81EE,
- 0xDB54, 0x81F7, 0xDB55, 0x81F8, 0xDB56, 0x81F9, 0xDB57, 0x8204, 0xDB58, 0x823C, 0xDB59, 0x823D, 0xDB5A, 0x823F, 0xDB5B, 0x8275,
- 0xDB5C, 0x833B, 0xDB5D, 0x83CF, 0xDB5E, 0x83F9, 0xDB5F, 0x8423, 0xDB60, 0x83C0, 0xDB61, 0x83E8, 0xDB62, 0x8412, 0xDB63, 0x83E7,
- 0xDB64, 0x83E4, 0xDB65, 0x83FC, 0xDB66, 0x83F6, 0xDB67, 0x8410, 0xDB68, 0x83C6, 0xDB69, 0x83C8, 0xDB6A, 0x83EB, 0xDB6B, 0x83E3,
- 0xDB6C, 0x83BF, 0xDB6D, 0x8401, 0xDB6E, 0x83DD, 0xDB6F, 0x83E5, 0xDB70, 0x83D8, 0xDB71, 0x83FF, 0xDB72, 0x83E1, 0xDB73, 0x83CB,
- 0xDB74, 0x83CE, 0xDB75, 0x83D6, 0xDB76, 0x83F5, 0xDB77, 0x83C9, 0xDB78, 0x8409, 0xDB79, 0x840F, 0xDB7A, 0x83DE, 0xDB7B, 0x8411,
- 0xDB7C, 0x8406, 0xDB7D, 0x83C2, 0xDB7E, 0x83F3, 0xDBA1, 0x83D5, 0xDBA2, 0x83FA, 0xDBA3, 0x83C7, 0xDBA4, 0x83D1, 0xDBA5, 0x83EA,
- 0xDBA6, 0x8413, 0xDBA7, 0x83C3, 0xDBA8, 0x83EC, 0xDBA9, 0x83EE, 0xDBAA, 0x83C4, 0xDBAB, 0x83FB, 0xDBAC, 0x83D7, 0xDBAD, 0x83E2,
- 0xDBAE, 0x841B, 0xDBAF, 0x83DB, 0xDBB0, 0x83FE, 0xDBB1, 0x86D8, 0xDBB2, 0x86E2, 0xDBB3, 0x86E6, 0xDBB4, 0x86D3, 0xDBB5, 0x86E3,
- 0xDBB6, 0x86DA, 0xDBB7, 0x86EA, 0xDBB8, 0x86DD, 0xDBB9, 0x86EB, 0xDBBA, 0x86DC, 0xDBBB, 0x86EC, 0xDBBC, 0x86E9, 0xDBBD, 0x86D7,
- 0xDBBE, 0x86E8, 0xDBBF, 0x86D1, 0xDBC0, 0x8848, 0xDBC1, 0x8856, 0xDBC2, 0x8855, 0xDBC3, 0x88BA, 0xDBC4, 0x88D7, 0xDBC5, 0x88B9,
- 0xDBC6, 0x88B8, 0xDBC7, 0x88C0, 0xDBC8, 0x88BE, 0xDBC9, 0x88B6, 0xDBCA, 0x88BC, 0xDBCB, 0x88B7, 0xDBCC, 0x88BD, 0xDBCD, 0x88B2,
- 0xDBCE, 0x8901, 0xDBCF, 0x88C9, 0xDBD0, 0x8995, 0xDBD1, 0x8998, 0xDBD2, 0x8997, 0xDBD3, 0x89DD, 0xDBD4, 0x89DA, 0xDBD5, 0x89DB,
- 0xDBD6, 0x8A4E, 0xDBD7, 0x8A4D, 0xDBD8, 0x8A39, 0xDBD9, 0x8A59, 0xDBDA, 0x8A40, 0xDBDB, 0x8A57, 0xDBDC, 0x8A58, 0xDBDD, 0x8A44,
- 0xDBDE, 0x8A45, 0xDBDF, 0x8A52, 0xDBE0, 0x8A48, 0xDBE1, 0x8A51, 0xDBE2, 0x8A4A, 0xDBE3, 0x8A4C, 0xDBE4, 0x8A4F, 0xDBE5, 0x8C5F,
- 0xDBE6, 0x8C81, 0xDBE7, 0x8C80, 0xDBE8, 0x8CBA, 0xDBE9, 0x8CBE, 0xDBEA, 0x8CB0, 0xDBEB, 0x8CB9, 0xDBEC, 0x8CB5, 0xDBED, 0x8D84,
- 0xDBEE, 0x8D80, 0xDBEF, 0x8D89, 0xDBF0, 0x8DD8, 0xDBF1, 0x8DD3, 0xDBF2, 0x8DCD, 0xDBF3, 0x8DC7, 0xDBF4, 0x8DD6, 0xDBF5, 0x8DDC,
- 0xDBF6, 0x8DCF, 0xDBF7, 0x8DD5, 0xDBF8, 0x8DD9, 0xDBF9, 0x8DC8, 0xDBFA, 0x8DD7, 0xDBFB, 0x8DC5, 0xDBFC, 0x8EEF, 0xDBFD, 0x8EF7,
- 0xDBFE, 0x8EFA, 0xDC40, 0x8EF9, 0xDC41, 0x8EE6, 0xDC42, 0x8EEE, 0xDC43, 0x8EE5, 0xDC44, 0x8EF5, 0xDC45, 0x8EE7, 0xDC46, 0x8EE8,
- 0xDC47, 0x8EF6, 0xDC48, 0x8EEB, 0xDC49, 0x8EF1, 0xDC4A, 0x8EEC, 0xDC4B, 0x8EF4, 0xDC4C, 0x8EE9, 0xDC4D, 0x902D, 0xDC4E, 0x9034,
- 0xDC4F, 0x902F, 0xDC50, 0x9106, 0xDC51, 0x912C, 0xDC52, 0x9104, 0xDC53, 0x90FF, 0xDC54, 0x90FC, 0xDC55, 0x9108, 0xDC56, 0x90F9,
- 0xDC57, 0x90FB, 0xDC58, 0x9101, 0xDC59, 0x9100, 0xDC5A, 0x9107, 0xDC5B, 0x9105, 0xDC5C, 0x9103, 0xDC5D, 0x9161, 0xDC5E, 0x9164,
- 0xDC5F, 0x915F, 0xDC60, 0x9162, 0xDC61, 0x9160, 0xDC62, 0x9201, 0xDC63, 0x920A, 0xDC64, 0x9225, 0xDC65, 0x9203, 0xDC66, 0x921A,
- 0xDC67, 0x9226, 0xDC68, 0x920F, 0xDC69, 0x920C, 0xDC6A, 0x9200, 0xDC6B, 0x9212, 0xDC6C, 0x91FF, 0xDC6D, 0x91FD, 0xDC6E, 0x9206,
- 0xDC6F, 0x9204, 0xDC70, 0x9227, 0xDC71, 0x9202, 0xDC72, 0x921C, 0xDC73, 0x9224, 0xDC74, 0x9219, 0xDC75, 0x9217, 0xDC76, 0x9205,
- 0xDC77, 0x9216, 0xDC78, 0x957B, 0xDC79, 0x958D, 0xDC7A, 0x958C, 0xDC7B, 0x9590, 0xDC7C, 0x9687, 0xDC7D, 0x967E, 0xDC7E, 0x9688,
- 0xDCA1, 0x9689, 0xDCA2, 0x9683, 0xDCA3, 0x9680, 0xDCA4, 0x96C2, 0xDCA5, 0x96C8, 0xDCA6, 0x96C3, 0xDCA7, 0x96F1, 0xDCA8, 0x96F0,
- 0xDCA9, 0x976C, 0xDCAA, 0x9770, 0xDCAB, 0x976E, 0xDCAC, 0x9807, 0xDCAD, 0x98A9, 0xDCAE, 0x98EB, 0xDCAF, 0x9CE6, 0xDCB0, 0x9EF9,
- 0xDCB1, 0x4E83, 0xDCB2, 0x4E84, 0xDCB3, 0x4EB6, 0xDCB4, 0x50BD, 0xDCB5, 0x50BF, 0xDCB6, 0x50C6, 0xDCB7, 0x50AE, 0xDCB8, 0x50C4,
- 0xDCB9, 0x50CA, 0xDCBA, 0x50B4, 0xDCBB, 0x50C8, 0xDCBC, 0x50C2, 0xDCBD, 0x50B0, 0xDCBE, 0x50C1, 0xDCBF, 0x50BA, 0xDCC0, 0x50B1,
- 0xDCC1, 0x50CB, 0xDCC2, 0x50C9, 0xDCC3, 0x50B6, 0xDCC4, 0x50B8, 0xDCC5, 0x51D7, 0xDCC6, 0x527A, 0xDCC7, 0x5278, 0xDCC8, 0x527B,
- 0xDCC9, 0x527C, 0xDCCA, 0x55C3, 0xDCCB, 0x55DB, 0xDCCC, 0x55CC, 0xDCCD, 0x55D0, 0xDCCE, 0x55CB, 0xDCCF, 0x55CA, 0xDCD0, 0x55DD,
- 0xDCD1, 0x55C0, 0xDCD2, 0x55D4, 0xDCD3, 0x55C4, 0xDCD4, 0x55E9, 0xDCD5, 0x55BF, 0xDCD6, 0x55D2, 0xDCD7, 0x558D, 0xDCD8, 0x55CF,
- 0xDCD9, 0x55D5, 0xDCDA, 0x55E2, 0xDCDB, 0x55D6, 0xDCDC, 0x55C8, 0xDCDD, 0x55F2, 0xDCDE, 0x55CD, 0xDCDF, 0x55D9, 0xDCE0, 0x55C2,
- 0xDCE1, 0x5714, 0xDCE2, 0x5853, 0xDCE3, 0x5868, 0xDCE4, 0x5864, 0xDCE5, 0x584F, 0xDCE6, 0x584D, 0xDCE7, 0x5849, 0xDCE8, 0x586F,
- 0xDCE9, 0x5855, 0xDCEA, 0x584E, 0xDCEB, 0x585D, 0xDCEC, 0x5859, 0xDCED, 0x5865, 0xDCEE, 0x585B, 0xDCEF, 0x583D, 0xDCF0, 0x5863,
- 0xDCF1, 0x5871, 0xDCF2, 0x58FC, 0xDCF3, 0x5AC7, 0xDCF4, 0x5AC4, 0xDCF5, 0x5ACB, 0xDCF6, 0x5ABA, 0xDCF7, 0x5AB8, 0xDCF8, 0x5AB1,
- 0xDCF9, 0x5AB5, 0xDCFA, 0x5AB0, 0xDCFB, 0x5ABF, 0xDCFC, 0x5AC8, 0xDCFD, 0x5ABB, 0xDCFE, 0x5AC6, 0xDD40, 0x5AB7, 0xDD41, 0x5AC0,
- 0xDD42, 0x5ACA, 0xDD43, 0x5AB4, 0xDD44, 0x5AB6, 0xDD45, 0x5ACD, 0xDD46, 0x5AB9, 0xDD47, 0x5A90, 0xDD48, 0x5BD6, 0xDD49, 0x5BD8,
- 0xDD4A, 0x5BD9, 0xDD4B, 0x5C1F, 0xDD4C, 0x5C33, 0xDD4D, 0x5D71, 0xDD4E, 0x5D63, 0xDD4F, 0x5D4A, 0xDD50, 0x5D65, 0xDD51, 0x5D72,
- 0xDD52, 0x5D6C, 0xDD53, 0x5D5E, 0xDD54, 0x5D68, 0xDD55, 0x5D67, 0xDD56, 0x5D62, 0xDD57, 0x5DF0, 0xDD58, 0x5E4F, 0xDD59, 0x5E4E,
- 0xDD5A, 0x5E4A, 0xDD5B, 0x5E4D, 0xDD5C, 0x5E4B, 0xDD5D, 0x5EC5, 0xDD5E, 0x5ECC, 0xDD5F, 0x5EC6, 0xDD60, 0x5ECB, 0xDD61, 0x5EC7,
- 0xDD62, 0x5F40, 0xDD63, 0x5FAF, 0xDD64, 0x5FAD, 0xDD65, 0x60F7, 0xDD66, 0x6149, 0xDD67, 0x614A, 0xDD68, 0x612B, 0xDD69, 0x6145,
- 0xDD6A, 0x6136, 0xDD6B, 0x6132, 0xDD6C, 0x612E, 0xDD6D, 0x6146, 0xDD6E, 0x612F, 0xDD6F, 0x614F, 0xDD70, 0x6129, 0xDD71, 0x6140,
- 0xDD72, 0x6220, 0xDD73, 0x9168, 0xDD74, 0x6223, 0xDD75, 0x6225, 0xDD76, 0x6224, 0xDD77, 0x63C5, 0xDD78, 0x63F1, 0xDD79, 0x63EB,
- 0xDD7A, 0x6410, 0xDD7B, 0x6412, 0xDD7C, 0x6409, 0xDD7D, 0x6420, 0xDD7E, 0x6424, 0xDDA1, 0x6433, 0xDDA2, 0x6443, 0xDDA3, 0x641F,
- 0xDDA4, 0x6415, 0xDDA5, 0x6418, 0xDDA6, 0x6439, 0xDDA7, 0x6437, 0xDDA8, 0x6422, 0xDDA9, 0x6423, 0xDDAA, 0x640C, 0xDDAB, 0x6426,
- 0xDDAC, 0x6430, 0xDDAD, 0x6428, 0xDDAE, 0x6441, 0xDDAF, 0x6435, 0xDDB0, 0x642F, 0xDDB1, 0x640A, 0xDDB2, 0x641A, 0xDDB3, 0x6440,
- 0xDDB4, 0x6425, 0xDDB5, 0x6427, 0xDDB6, 0x640B, 0xDDB7, 0x63E7, 0xDDB8, 0x641B, 0xDDB9, 0x642E, 0xDDBA, 0x6421, 0xDDBB, 0x640E,
- 0xDDBC, 0x656F, 0xDDBD, 0x6592, 0xDDBE, 0x65D3, 0xDDBF, 0x6686, 0xDDC0, 0x668C, 0xDDC1, 0x6695, 0xDDC2, 0x6690, 0xDDC3, 0x668B,
- 0xDDC4, 0x668A, 0xDDC5, 0x6699, 0xDDC6, 0x6694, 0xDDC7, 0x6678, 0xDDC8, 0x6720, 0xDDC9, 0x6966, 0xDDCA, 0x695F, 0xDDCB, 0x6938,
- 0xDDCC, 0x694E, 0xDDCD, 0x6962, 0xDDCE, 0x6971, 0xDDCF, 0x693F, 0xDDD0, 0x6945, 0xDDD1, 0x696A, 0xDDD2, 0x6939, 0xDDD3, 0x6942,
- 0xDDD4, 0x6957, 0xDDD5, 0x6959, 0xDDD6, 0x697A, 0xDDD7, 0x6948, 0xDDD8, 0x6949, 0xDDD9, 0x6935, 0xDDDA, 0x696C, 0xDDDB, 0x6933,
- 0xDDDC, 0x693D, 0xDDDD, 0x6965, 0xDDDE, 0x68F0, 0xDDDF, 0x6978, 0xDDE0, 0x6934, 0xDDE1, 0x6969, 0xDDE2, 0x6940, 0xDDE3, 0x696F,
- 0xDDE4, 0x6944, 0xDDE5, 0x6976, 0xDDE6, 0x6958, 0xDDE7, 0x6941, 0xDDE8, 0x6974, 0xDDE9, 0x694C, 0xDDEA, 0x693B, 0xDDEB, 0x694B,
- 0xDDEC, 0x6937, 0xDDED, 0x695C, 0xDDEE, 0x694F, 0xDDEF, 0x6951, 0xDDF0, 0x6932, 0xDDF1, 0x6952, 0xDDF2, 0x692F, 0xDDF3, 0x697B,
- 0xDDF4, 0x693C, 0xDDF5, 0x6B46, 0xDDF6, 0x6B45, 0xDDF7, 0x6B43, 0xDDF8, 0x6B42, 0xDDF9, 0x6B48, 0xDDFA, 0x6B41, 0xDDFB, 0x6B9B,
- 0xDDFC, 0xFA0D, 0xDDFD, 0x6BFB, 0xDDFE, 0x6BFC, 0xDE40, 0x6BF9, 0xDE41, 0x6BF7, 0xDE42, 0x6BF8, 0xDE43, 0x6E9B, 0xDE44, 0x6ED6,
- 0xDE45, 0x6EC8, 0xDE46, 0x6E8F, 0xDE47, 0x6EC0, 0xDE48, 0x6E9F, 0xDE49, 0x6E93, 0xDE4A, 0x6E94, 0xDE4B, 0x6EA0, 0xDE4C, 0x6EB1,
- 0xDE4D, 0x6EB9, 0xDE4E, 0x6EC6, 0xDE4F, 0x6ED2, 0xDE50, 0x6EBD, 0xDE51, 0x6EC1, 0xDE52, 0x6E9E, 0xDE53, 0x6EC9, 0xDE54, 0x6EB7,
- 0xDE55, 0x6EB0, 0xDE56, 0x6ECD, 0xDE57, 0x6EA6, 0xDE58, 0x6ECF, 0xDE59, 0x6EB2, 0xDE5A, 0x6EBE, 0xDE5B, 0x6EC3, 0xDE5C, 0x6EDC,
- 0xDE5D, 0x6ED8, 0xDE5E, 0x6E99, 0xDE5F, 0x6E92, 0xDE60, 0x6E8E, 0xDE61, 0x6E8D, 0xDE62, 0x6EA4, 0xDE63, 0x6EA1, 0xDE64, 0x6EBF,
- 0xDE65, 0x6EB3, 0xDE66, 0x6ED0, 0xDE67, 0x6ECA, 0xDE68, 0x6E97, 0xDE69, 0x6EAE, 0xDE6A, 0x6EA3, 0xDE6B, 0x7147, 0xDE6C, 0x7154,
- 0xDE6D, 0x7152, 0xDE6E, 0x7163, 0xDE6F, 0x7160, 0xDE70, 0x7141, 0xDE71, 0x715D, 0xDE72, 0x7162, 0xDE73, 0x7172, 0xDE74, 0x7178,
- 0xDE75, 0x716A, 0xDE76, 0x7161, 0xDE77, 0x7142, 0xDE78, 0x7158, 0xDE79, 0x7143, 0xDE7A, 0x714B, 0xDE7B, 0x7170, 0xDE7C, 0x715F,
- 0xDE7D, 0x7150, 0xDE7E, 0x7153, 0xDEA1, 0x7144, 0xDEA2, 0x714D, 0xDEA3, 0x715A, 0xDEA4, 0x724F, 0xDEA5, 0x728D, 0xDEA6, 0x728C,
- 0xDEA7, 0x7291, 0xDEA8, 0x7290, 0xDEA9, 0x728E, 0xDEAA, 0x733C, 0xDEAB, 0x7342, 0xDEAC, 0x733B, 0xDEAD, 0x733A, 0xDEAE, 0x7340,
- 0xDEAF, 0x734A, 0xDEB0, 0x7349, 0xDEB1, 0x7444, 0xDEB2, 0x744A, 0xDEB3, 0x744B, 0xDEB4, 0x7452, 0xDEB5, 0x7451, 0xDEB6, 0x7457,
- 0xDEB7, 0x7440, 0xDEB8, 0x744F, 0xDEB9, 0x7450, 0xDEBA, 0x744E, 0xDEBB, 0x7442, 0xDEBC, 0x7446, 0xDEBD, 0x744D, 0xDEBE, 0x7454,
- 0xDEBF, 0x74E1, 0xDEC0, 0x74FF, 0xDEC1, 0x74FE, 0xDEC2, 0x74FD, 0xDEC3, 0x751D, 0xDEC4, 0x7579, 0xDEC5, 0x7577, 0xDEC6, 0x6983,
- 0xDEC7, 0x75EF, 0xDEC8, 0x760F, 0xDEC9, 0x7603, 0xDECA, 0x75F7, 0xDECB, 0x75FE, 0xDECC, 0x75FC, 0xDECD, 0x75F9, 0xDECE, 0x75F8,
- 0xDECF, 0x7610, 0xDED0, 0x75FB, 0xDED1, 0x75F6, 0xDED2, 0x75ED, 0xDED3, 0x75F5, 0xDED4, 0x75FD, 0xDED5, 0x7699, 0xDED6, 0x76B5,
- 0xDED7, 0x76DD, 0xDED8, 0x7755, 0xDED9, 0x775F, 0xDEDA, 0x7760, 0xDEDB, 0x7752, 0xDEDC, 0x7756, 0xDEDD, 0x775A, 0xDEDE, 0x7769,
- 0xDEDF, 0x7767, 0xDEE0, 0x7754, 0xDEE1, 0x7759, 0xDEE2, 0x776D, 0xDEE3, 0x77E0, 0xDEE4, 0x7887, 0xDEE5, 0x789A, 0xDEE6, 0x7894,
- 0xDEE7, 0x788F, 0xDEE8, 0x7884, 0xDEE9, 0x7895, 0xDEEA, 0x7885, 0xDEEB, 0x7886, 0xDEEC, 0x78A1, 0xDEED, 0x7883, 0xDEEE, 0x7879,
- 0xDEEF, 0x7899, 0xDEF0, 0x7880, 0xDEF1, 0x7896, 0xDEF2, 0x787B, 0xDEF3, 0x797C, 0xDEF4, 0x7982, 0xDEF5, 0x797D, 0xDEF6, 0x7979,
- 0xDEF7, 0x7A11, 0xDEF8, 0x7A18, 0xDEF9, 0x7A19, 0xDEFA, 0x7A12, 0xDEFB, 0x7A17, 0xDEFC, 0x7A15, 0xDEFD, 0x7A22, 0xDEFE, 0x7A13,
- 0xDF40, 0x7A1B, 0xDF41, 0x7A10, 0xDF42, 0x7AA3, 0xDF43, 0x7AA2, 0xDF44, 0x7A9E, 0xDF45, 0x7AEB, 0xDF46, 0x7B66, 0xDF47, 0x7B64,
- 0xDF48, 0x7B6D, 0xDF49, 0x7B74, 0xDF4A, 0x7B69, 0xDF4B, 0x7B72, 0xDF4C, 0x7B65, 0xDF4D, 0x7B73, 0xDF4E, 0x7B71, 0xDF4F, 0x7B70,
- 0xDF50, 0x7B61, 0xDF51, 0x7B78, 0xDF52, 0x7B76, 0xDF53, 0x7B63, 0xDF54, 0x7CB2, 0xDF55, 0x7CB4, 0xDF56, 0x7CAF, 0xDF57, 0x7D88,
- 0xDF58, 0x7D86, 0xDF59, 0x7D80, 0xDF5A, 0x7D8D, 0xDF5B, 0x7D7F, 0xDF5C, 0x7D85, 0xDF5D, 0x7D7A, 0xDF5E, 0x7D8E, 0xDF5F, 0x7D7B,
- 0xDF60, 0x7D83, 0xDF61, 0x7D7C, 0xDF62, 0x7D8C, 0xDF63, 0x7D94, 0xDF64, 0x7D84, 0xDF65, 0x7D7D, 0xDF66, 0x7D92, 0xDF67, 0x7F6D,
- 0xDF68, 0x7F6B, 0xDF69, 0x7F67, 0xDF6A, 0x7F68, 0xDF6B, 0x7F6C, 0xDF6C, 0x7FA6, 0xDF6D, 0x7FA5, 0xDF6E, 0x7FA7, 0xDF6F, 0x7FDB,
- 0xDF70, 0x7FDC, 0xDF71, 0x8021, 0xDF72, 0x8164, 0xDF73, 0x8160, 0xDF74, 0x8177, 0xDF75, 0x815C, 0xDF76, 0x8169, 0xDF77, 0x815B,
- 0xDF78, 0x8162, 0xDF79, 0x8172, 0xDF7A, 0x6721, 0xDF7B, 0x815E, 0xDF7C, 0x8176, 0xDF7D, 0x8167, 0xDF7E, 0x816F, 0xDFA1, 0x8144,
- 0xDFA2, 0x8161, 0xDFA3, 0x821D, 0xDFA4, 0x8249, 0xDFA5, 0x8244, 0xDFA6, 0x8240, 0xDFA7, 0x8242, 0xDFA8, 0x8245, 0xDFA9, 0x84F1,
- 0xDFAA, 0x843F, 0xDFAB, 0x8456, 0xDFAC, 0x8476, 0xDFAD, 0x8479, 0xDFAE, 0x848F, 0xDFAF, 0x848D, 0xDFB0, 0x8465, 0xDFB1, 0x8451,
- 0xDFB2, 0x8440, 0xDFB3, 0x8486, 0xDFB4, 0x8467, 0xDFB5, 0x8430, 0xDFB6, 0x844D, 0xDFB7, 0x847D, 0xDFB8, 0x845A, 0xDFB9, 0x8459,
- 0xDFBA, 0x8474, 0xDFBB, 0x8473, 0xDFBC, 0x845D, 0xDFBD, 0x8507, 0xDFBE, 0x845E, 0xDFBF, 0x8437, 0xDFC0, 0x843A, 0xDFC1, 0x8434,
- 0xDFC2, 0x847A, 0xDFC3, 0x8443, 0xDFC4, 0x8478, 0xDFC5, 0x8432, 0xDFC6, 0x8445, 0xDFC7, 0x8429, 0xDFC8, 0x83D9, 0xDFC9, 0x844B,
- 0xDFCA, 0x842F, 0xDFCB, 0x8442, 0xDFCC, 0x842D, 0xDFCD, 0x845F, 0xDFCE, 0x8470, 0xDFCF, 0x8439, 0xDFD0, 0x844E, 0xDFD1, 0x844C,
- 0xDFD2, 0x8452, 0xDFD3, 0x846F, 0xDFD4, 0x84C5, 0xDFD5, 0x848E, 0xDFD6, 0x843B, 0xDFD7, 0x8447, 0xDFD8, 0x8436, 0xDFD9, 0x8433,
- 0xDFDA, 0x8468, 0xDFDB, 0x847E, 0xDFDC, 0x8444, 0xDFDD, 0x842B, 0xDFDE, 0x8460, 0xDFDF, 0x8454, 0xDFE0, 0x846E, 0xDFE1, 0x8450,
- 0xDFE2, 0x870B, 0xDFE3, 0x8704, 0xDFE4, 0x86F7, 0xDFE5, 0x870C, 0xDFE6, 0x86FA, 0xDFE7, 0x86D6, 0xDFE8, 0x86F5, 0xDFE9, 0x874D,
- 0xDFEA, 0x86F8, 0xDFEB, 0x870E, 0xDFEC, 0x8709, 0xDFED, 0x8701, 0xDFEE, 0x86F6, 0xDFEF, 0x870D, 0xDFF0, 0x8705, 0xDFF1, 0x88D6,
- 0xDFF2, 0x88CB, 0xDFF3, 0x88CD, 0xDFF4, 0x88CE, 0xDFF5, 0x88DE, 0xDFF6, 0x88DB, 0xDFF7, 0x88DA, 0xDFF8, 0x88CC, 0xDFF9, 0x88D0,
- 0xDFFA, 0x8985, 0xDFFB, 0x899B, 0xDFFC, 0x89DF, 0xDFFD, 0x89E5, 0xDFFE, 0x89E4, 0xE040, 0x89E1, 0xE041, 0x89E0, 0xE042, 0x89E2,
- 0xE043, 0x89DC, 0xE044, 0x89E6, 0xE045, 0x8A76, 0xE046, 0x8A86, 0xE047, 0x8A7F, 0xE048, 0x8A61, 0xE049, 0x8A3F, 0xE04A, 0x8A77,
- 0xE04B, 0x8A82, 0xE04C, 0x8A84, 0xE04D, 0x8A75, 0xE04E, 0x8A83, 0xE04F, 0x8A81, 0xE050, 0x8A74, 0xE051, 0x8A7A, 0xE052, 0x8C3C,
- 0xE053, 0x8C4B, 0xE054, 0x8C4A, 0xE055, 0x8C65, 0xE056, 0x8C64, 0xE057, 0x8C66, 0xE058, 0x8C86, 0xE059, 0x8C84, 0xE05A, 0x8C85,
- 0xE05B, 0x8CCC, 0xE05C, 0x8D68, 0xE05D, 0x8D69, 0xE05E, 0x8D91, 0xE05F, 0x8D8C, 0xE060, 0x8D8E, 0xE061, 0x8D8F, 0xE062, 0x8D8D,
- 0xE063, 0x8D93, 0xE064, 0x8D94, 0xE065, 0x8D90, 0xE066, 0x8D92, 0xE067, 0x8DF0, 0xE068, 0x8DE0, 0xE069, 0x8DEC, 0xE06A, 0x8DF1,
- 0xE06B, 0x8DEE, 0xE06C, 0x8DD0, 0xE06D, 0x8DE9, 0xE06E, 0x8DE3, 0xE06F, 0x8DE2, 0xE070, 0x8DE7, 0xE071, 0x8DF2, 0xE072, 0x8DEB,
- 0xE073, 0x8DF4, 0xE074, 0x8F06, 0xE075, 0x8EFF, 0xE076, 0x8F01, 0xE077, 0x8F00, 0xE078, 0x8F05, 0xE079, 0x8F07, 0xE07A, 0x8F08,
- 0xE07B, 0x8F02, 0xE07C, 0x8F0B, 0xE07D, 0x9052, 0xE07E, 0x903F, 0xE0A1, 0x9044, 0xE0A2, 0x9049, 0xE0A3, 0x903D, 0xE0A4, 0x9110,
- 0xE0A5, 0x910D, 0xE0A6, 0x910F, 0xE0A7, 0x9111, 0xE0A8, 0x9116, 0xE0A9, 0x9114, 0xE0AA, 0x910B, 0xE0AB, 0x910E, 0xE0AC, 0x916E,
- 0xE0AD, 0x916F, 0xE0AE, 0x9248, 0xE0AF, 0x9252, 0xE0B0, 0x9230, 0xE0B1, 0x923A, 0xE0B2, 0x9266, 0xE0B3, 0x9233, 0xE0B4, 0x9265,
- 0xE0B5, 0x925E, 0xE0B6, 0x9283, 0xE0B7, 0x922E, 0xE0B8, 0x924A, 0xE0B9, 0x9246, 0xE0BA, 0x926D, 0xE0BB, 0x926C, 0xE0BC, 0x924F,
- 0xE0BD, 0x9260, 0xE0BE, 0x9267, 0xE0BF, 0x926F, 0xE0C0, 0x9236, 0xE0C1, 0x9261, 0xE0C2, 0x9270, 0xE0C3, 0x9231, 0xE0C4, 0x9254,
- 0xE0C5, 0x9263, 0xE0C6, 0x9250, 0xE0C7, 0x9272, 0xE0C8, 0x924E, 0xE0C9, 0x9253, 0xE0CA, 0x924C, 0xE0CB, 0x9256, 0xE0CC, 0x9232,
- 0xE0CD, 0x959F, 0xE0CE, 0x959C, 0xE0CF, 0x959E, 0xE0D0, 0x959B, 0xE0D1, 0x9692, 0xE0D2, 0x9693, 0xE0D3, 0x9691, 0xE0D4, 0x9697,
- 0xE0D5, 0x96CE, 0xE0D6, 0x96FA, 0xE0D7, 0x96FD, 0xE0D8, 0x96F8, 0xE0D9, 0x96F5, 0xE0DA, 0x9773, 0xE0DB, 0x9777, 0xE0DC, 0x9778,
- 0xE0DD, 0x9772, 0xE0DE, 0x980F, 0xE0DF, 0x980D, 0xE0E0, 0x980E, 0xE0E1, 0x98AC, 0xE0E2, 0x98F6, 0xE0E3, 0x98F9, 0xE0E4, 0x99AF,
- 0xE0E5, 0x99B2, 0xE0E6, 0x99B0, 0xE0E7, 0x99B5, 0xE0E8, 0x9AAD, 0xE0E9, 0x9AAB, 0xE0EA, 0x9B5B, 0xE0EB, 0x9CEA, 0xE0EC, 0x9CED,
- 0xE0ED, 0x9CE7, 0xE0EE, 0x9E80, 0xE0EF, 0x9EFD, 0xE0F0, 0x50E6, 0xE0F1, 0x50D4, 0xE0F2, 0x50D7, 0xE0F3, 0x50E8, 0xE0F4, 0x50F3,
- 0xE0F5, 0x50DB, 0xE0F6, 0x50EA, 0xE0F7, 0x50DD, 0xE0F8, 0x50E4, 0xE0F9, 0x50D3, 0xE0FA, 0x50EC, 0xE0FB, 0x50F0, 0xE0FC, 0x50EF,
- 0xE0FD, 0x50E3, 0xE0FE, 0x50E0, 0xE140, 0x51D8, 0xE141, 0x5280, 0xE142, 0x5281, 0xE143, 0x52E9, 0xE144, 0x52EB, 0xE145, 0x5330,
- 0xE146, 0x53AC, 0xE147, 0x5627, 0xE148, 0x5615, 0xE149, 0x560C, 0xE14A, 0x5612, 0xE14B, 0x55FC, 0xE14C, 0x560F, 0xE14D, 0x561C,
- 0xE14E, 0x5601, 0xE14F, 0x5613, 0xE150, 0x5602, 0xE151, 0x55FA, 0xE152, 0x561D, 0xE153, 0x5604, 0xE154, 0x55FF, 0xE155, 0x55F9,
- 0xE156, 0x5889, 0xE157, 0x587C, 0xE158, 0x5890, 0xE159, 0x5898, 0xE15A, 0x5886, 0xE15B, 0x5881, 0xE15C, 0x587F, 0xE15D, 0x5874,
- 0xE15E, 0x588B, 0xE15F, 0x587A, 0xE160, 0x5887, 0xE161, 0x5891, 0xE162, 0x588E, 0xE163, 0x5876, 0xE164, 0x5882, 0xE165, 0x5888,
- 0xE166, 0x587B, 0xE167, 0x5894, 0xE168, 0x588F, 0xE169, 0x58FE, 0xE16A, 0x596B, 0xE16B, 0x5ADC, 0xE16C, 0x5AEE, 0xE16D, 0x5AE5,
- 0xE16E, 0x5AD5, 0xE16F, 0x5AEA, 0xE170, 0x5ADA, 0xE171, 0x5AED, 0xE172, 0x5AEB, 0xE173, 0x5AF3, 0xE174, 0x5AE2, 0xE175, 0x5AE0,
- 0xE176, 0x5ADB, 0xE177, 0x5AEC, 0xE178, 0x5ADE, 0xE179, 0x5ADD, 0xE17A, 0x5AD9, 0xE17B, 0x5AE8, 0xE17C, 0x5ADF, 0xE17D, 0x5B77,
- 0xE17E, 0x5BE0, 0xE1A1, 0x5BE3, 0xE1A2, 0x5C63, 0xE1A3, 0x5D82, 0xE1A4, 0x5D80, 0xE1A5, 0x5D7D, 0xE1A6, 0x5D86, 0xE1A7, 0x5D7A,
- 0xE1A8, 0x5D81, 0xE1A9, 0x5D77, 0xE1AA, 0x5D8A, 0xE1AB, 0x5D89, 0xE1AC, 0x5D88, 0xE1AD, 0x5D7E, 0xE1AE, 0x5D7C, 0xE1AF, 0x5D8D,
- 0xE1B0, 0x5D79, 0xE1B1, 0x5D7F, 0xE1B2, 0x5E58, 0xE1B3, 0x5E59, 0xE1B4, 0x5E53, 0xE1B5, 0x5ED8, 0xE1B6, 0x5ED1, 0xE1B7, 0x5ED7,
- 0xE1B8, 0x5ECE, 0xE1B9, 0x5EDC, 0xE1BA, 0x5ED5, 0xE1BB, 0x5ED9, 0xE1BC, 0x5ED2, 0xE1BD, 0x5ED4, 0xE1BE, 0x5F44, 0xE1BF, 0x5F43,
- 0xE1C0, 0x5F6F, 0xE1C1, 0x5FB6, 0xE1C2, 0x612C, 0xE1C3, 0x6128, 0xE1C4, 0x6141, 0xE1C5, 0x615E, 0xE1C6, 0x6171, 0xE1C7, 0x6173,
- 0xE1C8, 0x6152, 0xE1C9, 0x6153, 0xE1CA, 0x6172, 0xE1CB, 0x616C, 0xE1CC, 0x6180, 0xE1CD, 0x6174, 0xE1CE, 0x6154, 0xE1CF, 0x617A,
- 0xE1D0, 0x615B, 0xE1D1, 0x6165, 0xE1D2, 0x613B, 0xE1D3, 0x616A, 0xE1D4, 0x6161, 0xE1D5, 0x6156, 0xE1D6, 0x6229, 0xE1D7, 0x6227,
- 0xE1D8, 0x622B, 0xE1D9, 0x642B, 0xE1DA, 0x644D, 0xE1DB, 0x645B, 0xE1DC, 0x645D, 0xE1DD, 0x6474, 0xE1DE, 0x6476, 0xE1DF, 0x6472,
- 0xE1E0, 0x6473, 0xE1E1, 0x647D, 0xE1E2, 0x6475, 0xE1E3, 0x6466, 0xE1E4, 0x64A6, 0xE1E5, 0x644E, 0xE1E6, 0x6482, 0xE1E7, 0x645E,
- 0xE1E8, 0x645C, 0xE1E9, 0x644B, 0xE1EA, 0x6453, 0xE1EB, 0x6460, 0xE1EC, 0x6450, 0xE1ED, 0x647F, 0xE1EE, 0x643F, 0xE1EF, 0x646C,
- 0xE1F0, 0x646B, 0xE1F1, 0x6459, 0xE1F2, 0x6465, 0xE1F3, 0x6477, 0xE1F4, 0x6573, 0xE1F5, 0x65A0, 0xE1F6, 0x66A1, 0xE1F7, 0x66A0,
- 0xE1F8, 0x669F, 0xE1F9, 0x6705, 0xE1FA, 0x6704, 0xE1FB, 0x6722, 0xE1FC, 0x69B1, 0xE1FD, 0x69B6, 0xE1FE, 0x69C9, 0xE240, 0x69A0,
- 0xE241, 0x69CE, 0xE242, 0x6996, 0xE243, 0x69B0, 0xE244, 0x69AC, 0xE245, 0x69BC, 0xE246, 0x6991, 0xE247, 0x6999, 0xE248, 0x698E,
- 0xE249, 0x69A7, 0xE24A, 0x698D, 0xE24B, 0x69A9, 0xE24C, 0x69BE, 0xE24D, 0x69AF, 0xE24E, 0x69BF, 0xE24F, 0x69C4, 0xE250, 0x69BD,
- 0xE251, 0x69A4, 0xE252, 0x69D4, 0xE253, 0x69B9, 0xE254, 0x69CA, 0xE255, 0x699A, 0xE256, 0x69CF, 0xE257, 0x69B3, 0xE258, 0x6993,
- 0xE259, 0x69AA, 0xE25A, 0x69A1, 0xE25B, 0x699E, 0xE25C, 0x69D9, 0xE25D, 0x6997, 0xE25E, 0x6990, 0xE25F, 0x69C2, 0xE260, 0x69B5,
- 0xE261, 0x69A5, 0xE262, 0x69C6, 0xE263, 0x6B4A, 0xE264, 0x6B4D, 0xE265, 0x6B4B, 0xE266, 0x6B9E, 0xE267, 0x6B9F, 0xE268, 0x6BA0,
- 0xE269, 0x6BC3, 0xE26A, 0x6BC4, 0xE26B, 0x6BFE, 0xE26C, 0x6ECE, 0xE26D, 0x6EF5, 0xE26E, 0x6EF1, 0xE26F, 0x6F03, 0xE270, 0x6F25,
- 0xE271, 0x6EF8, 0xE272, 0x6F37, 0xE273, 0x6EFB, 0xE274, 0x6F2E, 0xE275, 0x6F09, 0xE276, 0x6F4E, 0xE277, 0x6F19, 0xE278, 0x6F1A,
- 0xE279, 0x6F27, 0xE27A, 0x6F18, 0xE27B, 0x6F3B, 0xE27C, 0x6F12, 0xE27D, 0x6EED, 0xE27E, 0x6F0A, 0xE2A1, 0x6F36, 0xE2A2, 0x6F73,
- 0xE2A3, 0x6EF9, 0xE2A4, 0x6EEE, 0xE2A5, 0x6F2D, 0xE2A6, 0x6F40, 0xE2A7, 0x6F30, 0xE2A8, 0x6F3C, 0xE2A9, 0x6F35, 0xE2AA, 0x6EEB,
- 0xE2AB, 0x6F07, 0xE2AC, 0x6F0E, 0xE2AD, 0x6F43, 0xE2AE, 0x6F05, 0xE2AF, 0x6EFD, 0xE2B0, 0x6EF6, 0xE2B1, 0x6F39, 0xE2B2, 0x6F1C,
- 0xE2B3, 0x6EFC, 0xE2B4, 0x6F3A, 0xE2B5, 0x6F1F, 0xE2B6, 0x6F0D, 0xE2B7, 0x6F1E, 0xE2B8, 0x6F08, 0xE2B9, 0x6F21, 0xE2BA, 0x7187,
- 0xE2BB, 0x7190, 0xE2BC, 0x7189, 0xE2BD, 0x7180, 0xE2BE, 0x7185, 0xE2BF, 0x7182, 0xE2C0, 0x718F, 0xE2C1, 0x717B, 0xE2C2, 0x7186,
- 0xE2C3, 0x7181, 0xE2C4, 0x7197, 0xE2C5, 0x7244, 0xE2C6, 0x7253, 0xE2C7, 0x7297, 0xE2C8, 0x7295, 0xE2C9, 0x7293, 0xE2CA, 0x7343,
- 0xE2CB, 0x734D, 0xE2CC, 0x7351, 0xE2CD, 0x734C, 0xE2CE, 0x7462, 0xE2CF, 0x7473, 0xE2D0, 0x7471, 0xE2D1, 0x7475, 0xE2D2, 0x7472,
- 0xE2D3, 0x7467, 0xE2D4, 0x746E, 0xE2D5, 0x7500, 0xE2D6, 0x7502, 0xE2D7, 0x7503, 0xE2D8, 0x757D, 0xE2D9, 0x7590, 0xE2DA, 0x7616,
- 0xE2DB, 0x7608, 0xE2DC, 0x760C, 0xE2DD, 0x7615, 0xE2DE, 0x7611, 0xE2DF, 0x760A, 0xE2E0, 0x7614, 0xE2E1, 0x76B8, 0xE2E2, 0x7781,
- 0xE2E3, 0x777C, 0xE2E4, 0x7785, 0xE2E5, 0x7782, 0xE2E6, 0x776E, 0xE2E7, 0x7780, 0xE2E8, 0x776F, 0xE2E9, 0x777E, 0xE2EA, 0x7783,
- 0xE2EB, 0x78B2, 0xE2EC, 0x78AA, 0xE2ED, 0x78B4, 0xE2EE, 0x78AD, 0xE2EF, 0x78A8, 0xE2F0, 0x787E, 0xE2F1, 0x78AB, 0xE2F2, 0x789E,
- 0xE2F3, 0x78A5, 0xE2F4, 0x78A0, 0xE2F5, 0x78AC, 0xE2F6, 0x78A2, 0xE2F7, 0x78A4, 0xE2F8, 0x7998, 0xE2F9, 0x798A, 0xE2FA, 0x798B,
- 0xE2FB, 0x7996, 0xE2FC, 0x7995, 0xE2FD, 0x7994, 0xE2FE, 0x7993, 0xE340, 0x7997, 0xE341, 0x7988, 0xE342, 0x7992, 0xE343, 0x7990,
- 0xE344, 0x7A2B, 0xE345, 0x7A4A, 0xE346, 0x7A30, 0xE347, 0x7A2F, 0xE348, 0x7A28, 0xE349, 0x7A26, 0xE34A, 0x7AA8, 0xE34B, 0x7AAB,
- 0xE34C, 0x7AAC, 0xE34D, 0x7AEE, 0xE34E, 0x7B88, 0xE34F, 0x7B9C, 0xE350, 0x7B8A, 0xE351, 0x7B91, 0xE352, 0x7B90, 0xE353, 0x7B96,
- 0xE354, 0x7B8D, 0xE355, 0x7B8C, 0xE356, 0x7B9B, 0xE357, 0x7B8E, 0xE358, 0x7B85, 0xE359, 0x7B98, 0xE35A, 0x5284, 0xE35B, 0x7B99,
- 0xE35C, 0x7BA4, 0xE35D, 0x7B82, 0xE35E, 0x7CBB, 0xE35F, 0x7CBF, 0xE360, 0x7CBC, 0xE361, 0x7CBA, 0xE362, 0x7DA7, 0xE363, 0x7DB7,
- 0xE364, 0x7DC2, 0xE365, 0x7DA3, 0xE366, 0x7DAA, 0xE367, 0x7DC1, 0xE368, 0x7DC0, 0xE369, 0x7DC5, 0xE36A, 0x7D9D, 0xE36B, 0x7DCE,
- 0xE36C, 0x7DC4, 0xE36D, 0x7DC6, 0xE36E, 0x7DCB, 0xE36F, 0x7DCC, 0xE370, 0x7DAF, 0xE371, 0x7DB9, 0xE372, 0x7D96, 0xE373, 0x7DBC,
- 0xE374, 0x7D9F, 0xE375, 0x7DA6, 0xE376, 0x7DAE, 0xE377, 0x7DA9, 0xE378, 0x7DA1, 0xE379, 0x7DC9, 0xE37A, 0x7F73, 0xE37B, 0x7FE2,
- 0xE37C, 0x7FE3, 0xE37D, 0x7FE5, 0xE37E, 0x7FDE, 0xE3A1, 0x8024, 0xE3A2, 0x805D, 0xE3A3, 0x805C, 0xE3A4, 0x8189, 0xE3A5, 0x8186,
- 0xE3A6, 0x8183, 0xE3A7, 0x8187, 0xE3A8, 0x818D, 0xE3A9, 0x818C, 0xE3AA, 0x818B, 0xE3AB, 0x8215, 0xE3AC, 0x8497, 0xE3AD, 0x84A4,
- 0xE3AE, 0x84A1, 0xE3AF, 0x849F, 0xE3B0, 0x84BA, 0xE3B1, 0x84CE, 0xE3B2, 0x84C2, 0xE3B3, 0x84AC, 0xE3B4, 0x84AE, 0xE3B5, 0x84AB,
- 0xE3B6, 0x84B9, 0xE3B7, 0x84B4, 0xE3B8, 0x84C1, 0xE3B9, 0x84CD, 0xE3BA, 0x84AA, 0xE3BB, 0x849A, 0xE3BC, 0x84B1, 0xE3BD, 0x84D0,
- 0xE3BE, 0x849D, 0xE3BF, 0x84A7, 0xE3C0, 0x84BB, 0xE3C1, 0x84A2, 0xE3C2, 0x8494, 0xE3C3, 0x84C7, 0xE3C4, 0x84CC, 0xE3C5, 0x849B,
- 0xE3C6, 0x84A9, 0xE3C7, 0x84AF, 0xE3C8, 0x84A8, 0xE3C9, 0x84D6, 0xE3CA, 0x8498, 0xE3CB, 0x84B6, 0xE3CC, 0x84CF, 0xE3CD, 0x84A0,
- 0xE3CE, 0x84D7, 0xE3CF, 0x84D4, 0xE3D0, 0x84D2, 0xE3D1, 0x84DB, 0xE3D2, 0x84B0, 0xE3D3, 0x8491, 0xE3D4, 0x8661, 0xE3D5, 0x8733,
- 0xE3D6, 0x8723, 0xE3D7, 0x8728, 0xE3D8, 0x876B, 0xE3D9, 0x8740, 0xE3DA, 0x872E, 0xE3DB, 0x871E, 0xE3DC, 0x8721, 0xE3DD, 0x8719,
- 0xE3DE, 0x871B, 0xE3DF, 0x8743, 0xE3E0, 0x872C, 0xE3E1, 0x8741, 0xE3E2, 0x873E, 0xE3E3, 0x8746, 0xE3E4, 0x8720, 0xE3E5, 0x8732,
- 0xE3E6, 0x872A, 0xE3E7, 0x872D, 0xE3E8, 0x873C, 0xE3E9, 0x8712, 0xE3EA, 0x873A, 0xE3EB, 0x8731, 0xE3EC, 0x8735, 0xE3ED, 0x8742,
- 0xE3EE, 0x8726, 0xE3EF, 0x8727, 0xE3F0, 0x8738, 0xE3F1, 0x8724, 0xE3F2, 0x871A, 0xE3F3, 0x8730, 0xE3F4, 0x8711, 0xE3F5, 0x88F7,
- 0xE3F6, 0x88E7, 0xE3F7, 0x88F1, 0xE3F8, 0x88F2, 0xE3F9, 0x88FA, 0xE3FA, 0x88FE, 0xE3FB, 0x88EE, 0xE3FC, 0x88FC, 0xE3FD, 0x88F6,
- 0xE3FE, 0x88FB, 0xE440, 0x88F0, 0xE441, 0x88EC, 0xE442, 0x88EB, 0xE443, 0x899D, 0xE444, 0x89A1, 0xE445, 0x899F, 0xE446, 0x899E,
- 0xE447, 0x89E9, 0xE448, 0x89EB, 0xE449, 0x89E8, 0xE44A, 0x8AAB, 0xE44B, 0x8A99, 0xE44C, 0x8A8B, 0xE44D, 0x8A92, 0xE44E, 0x8A8F,
- 0xE44F, 0x8A96, 0xE450, 0x8C3D, 0xE451, 0x8C68, 0xE452, 0x8C69, 0xE453, 0x8CD5, 0xE454, 0x8CCF, 0xE455, 0x8CD7, 0xE456, 0x8D96,
- 0xE457, 0x8E09, 0xE458, 0x8E02, 0xE459, 0x8DFF, 0xE45A, 0x8E0D, 0xE45B, 0x8DFD, 0xE45C, 0x8E0A, 0xE45D, 0x8E03, 0xE45E, 0x8E07,
- 0xE45F, 0x8E06, 0xE460, 0x8E05, 0xE461, 0x8DFE, 0xE462, 0x8E00, 0xE463, 0x8E04, 0xE464, 0x8F10, 0xE465, 0x8F11, 0xE466, 0x8F0E,
- 0xE467, 0x8F0D, 0xE468, 0x9123, 0xE469, 0x911C, 0xE46A, 0x9120, 0xE46B, 0x9122, 0xE46C, 0x911F, 0xE46D, 0x911D, 0xE46E, 0x911A,
- 0xE46F, 0x9124, 0xE470, 0x9121, 0xE471, 0x911B, 0xE472, 0x917A, 0xE473, 0x9172, 0xE474, 0x9179, 0xE475, 0x9173, 0xE476, 0x92A5,
- 0xE477, 0x92A4, 0xE478, 0x9276, 0xE479, 0x929B, 0xE47A, 0x927A, 0xE47B, 0x92A0, 0xE47C, 0x9294, 0xE47D, 0x92AA, 0xE47E, 0x928D,
- 0xE4A1, 0x92A6, 0xE4A2, 0x929A, 0xE4A3, 0x92AB, 0xE4A4, 0x9279, 0xE4A5, 0x9297, 0xE4A6, 0x927F, 0xE4A7, 0x92A3, 0xE4A8, 0x92EE,
- 0xE4A9, 0x928E, 0xE4AA, 0x9282, 0xE4AB, 0x9295, 0xE4AC, 0x92A2, 0xE4AD, 0x927D, 0xE4AE, 0x9288, 0xE4AF, 0x92A1, 0xE4B0, 0x928A,
- 0xE4B1, 0x9286, 0xE4B2, 0x928C, 0xE4B3, 0x9299, 0xE4B4, 0x92A7, 0xE4B5, 0x927E, 0xE4B6, 0x9287, 0xE4B7, 0x92A9, 0xE4B8, 0x929D,
- 0xE4B9, 0x928B, 0xE4BA, 0x922D, 0xE4BB, 0x969E, 0xE4BC, 0x96A1, 0xE4BD, 0x96FF, 0xE4BE, 0x9758, 0xE4BF, 0x977D, 0xE4C0, 0x977A,
- 0xE4C1, 0x977E, 0xE4C2, 0x9783, 0xE4C3, 0x9780, 0xE4C4, 0x9782, 0xE4C5, 0x977B, 0xE4C6, 0x9784, 0xE4C7, 0x9781, 0xE4C8, 0x977F,
- 0xE4C9, 0x97CE, 0xE4CA, 0x97CD, 0xE4CB, 0x9816, 0xE4CC, 0x98AD, 0xE4CD, 0x98AE, 0xE4CE, 0x9902, 0xE4CF, 0x9900, 0xE4D0, 0x9907,
- 0xE4D1, 0x999D, 0xE4D2, 0x999C, 0xE4D3, 0x99C3, 0xE4D4, 0x99B9, 0xE4D5, 0x99BB, 0xE4D6, 0x99BA, 0xE4D7, 0x99C2, 0xE4D8, 0x99BD,
- 0xE4D9, 0x99C7, 0xE4DA, 0x9AB1, 0xE4DB, 0x9AE3, 0xE4DC, 0x9AE7, 0xE4DD, 0x9B3E, 0xE4DE, 0x9B3F, 0xE4DF, 0x9B60, 0xE4E0, 0x9B61,
- 0xE4E1, 0x9B5F, 0xE4E2, 0x9CF1, 0xE4E3, 0x9CF2, 0xE4E4, 0x9CF5, 0xE4E5, 0x9EA7, 0xE4E6, 0x50FF, 0xE4E7, 0x5103, 0xE4E8, 0x5130,
- 0xE4E9, 0x50F8, 0xE4EA, 0x5106, 0xE4EB, 0x5107, 0xE4EC, 0x50F6, 0xE4ED, 0x50FE, 0xE4EE, 0x510B, 0xE4EF, 0x510C, 0xE4F0, 0x50FD,
- 0xE4F1, 0x510A, 0xE4F2, 0x528B, 0xE4F3, 0x528C, 0xE4F4, 0x52F1, 0xE4F5, 0x52EF, 0xE4F6, 0x5648, 0xE4F7, 0x5642, 0xE4F8, 0x564C,
- 0xE4F9, 0x5635, 0xE4FA, 0x5641, 0xE4FB, 0x564A, 0xE4FC, 0x5649, 0xE4FD, 0x5646, 0xE4FE, 0x5658, 0xE540, 0x565A, 0xE541, 0x5640,
- 0xE542, 0x5633, 0xE543, 0x563D, 0xE544, 0x562C, 0xE545, 0x563E, 0xE546, 0x5638, 0xE547, 0x562A, 0xE548, 0x563A, 0xE549, 0x571A,
- 0xE54A, 0x58AB, 0xE54B, 0x589D, 0xE54C, 0x58B1, 0xE54D, 0x58A0, 0xE54E, 0x58A3, 0xE54F, 0x58AF, 0xE550, 0x58AC, 0xE551, 0x58A5,
- 0xE552, 0x58A1, 0xE553, 0x58FF, 0xE554, 0x5AFF, 0xE555, 0x5AF4, 0xE556, 0x5AFD, 0xE557, 0x5AF7, 0xE558, 0x5AF6, 0xE559, 0x5B03,
- 0xE55A, 0x5AF8, 0xE55B, 0x5B02, 0xE55C, 0x5AF9, 0xE55D, 0x5B01, 0xE55E, 0x5B07, 0xE55F, 0x5B05, 0xE560, 0x5B0F, 0xE561, 0x5C67,
- 0xE562, 0x5D99, 0xE563, 0x5D97, 0xE564, 0x5D9F, 0xE565, 0x5D92, 0xE566, 0x5DA2, 0xE567, 0x5D93, 0xE568, 0x5D95, 0xE569, 0x5DA0,
- 0xE56A, 0x5D9C, 0xE56B, 0x5DA1, 0xE56C, 0x5D9A, 0xE56D, 0x5D9E, 0xE56E, 0x5E69, 0xE56F, 0x5E5D, 0xE570, 0x5E60, 0xE571, 0x5E5C,
- 0xE572, 0x7DF3, 0xE573, 0x5EDB, 0xE574, 0x5EDE, 0xE575, 0x5EE1, 0xE576, 0x5F49, 0xE577, 0x5FB2, 0xE578, 0x618B, 0xE579, 0x6183,
- 0xE57A, 0x6179, 0xE57B, 0x61B1, 0xE57C, 0x61B0, 0xE57D, 0x61A2, 0xE57E, 0x6189, 0xE5A1, 0x619B, 0xE5A2, 0x6193, 0xE5A3, 0x61AF,
- 0xE5A4, 0x61AD, 0xE5A5, 0x619F, 0xE5A6, 0x6192, 0xE5A7, 0x61AA, 0xE5A8, 0x61A1, 0xE5A9, 0x618D, 0xE5AA, 0x6166, 0xE5AB, 0x61B3,
- 0xE5AC, 0x622D, 0xE5AD, 0x646E, 0xE5AE, 0x6470, 0xE5AF, 0x6496, 0xE5B0, 0x64A0, 0xE5B1, 0x6485, 0xE5B2, 0x6497, 0xE5B3, 0x649C,
- 0xE5B4, 0x648F, 0xE5B5, 0x648B, 0xE5B6, 0x648A, 0xE5B7, 0x648C, 0xE5B8, 0x64A3, 0xE5B9, 0x649F, 0xE5BA, 0x6468, 0xE5BB, 0x64B1,
- 0xE5BC, 0x6498, 0xE5BD, 0x6576, 0xE5BE, 0x657A, 0xE5BF, 0x6579, 0xE5C0, 0x657B, 0xE5C1, 0x65B2, 0xE5C2, 0x65B3, 0xE5C3, 0x66B5,
- 0xE5C4, 0x66B0, 0xE5C5, 0x66A9, 0xE5C6, 0x66B2, 0xE5C7, 0x66B7, 0xE5C8, 0x66AA, 0xE5C9, 0x66AF, 0xE5CA, 0x6A00, 0xE5CB, 0x6A06,
- 0xE5CC, 0x6A17, 0xE5CD, 0x69E5, 0xE5CE, 0x69F8, 0xE5CF, 0x6A15, 0xE5D0, 0x69F1, 0xE5D1, 0x69E4, 0xE5D2, 0x6A20, 0xE5D3, 0x69FF,
- 0xE5D4, 0x69EC, 0xE5D5, 0x69E2, 0xE5D6, 0x6A1B, 0xE5D7, 0x6A1D, 0xE5D8, 0x69FE, 0xE5D9, 0x6A27, 0xE5DA, 0x69F2, 0xE5DB, 0x69EE,
- 0xE5DC, 0x6A14, 0xE5DD, 0x69F7, 0xE5DE, 0x69E7, 0xE5DF, 0x6A40, 0xE5E0, 0x6A08, 0xE5E1, 0x69E6, 0xE5E2, 0x69FB, 0xE5E3, 0x6A0D,
- 0xE5E4, 0x69FC, 0xE5E5, 0x69EB, 0xE5E6, 0x6A09, 0xE5E7, 0x6A04, 0xE5E8, 0x6A18, 0xE5E9, 0x6A25, 0xE5EA, 0x6A0F, 0xE5EB, 0x69F6,
- 0xE5EC, 0x6A26, 0xE5ED, 0x6A07, 0xE5EE, 0x69F4, 0xE5EF, 0x6A16, 0xE5F0, 0x6B51, 0xE5F1, 0x6BA5, 0xE5F2, 0x6BA3, 0xE5F3, 0x6BA2,
- 0xE5F4, 0x6BA6, 0xE5F5, 0x6C01, 0xE5F6, 0x6C00, 0xE5F7, 0x6BFF, 0xE5F8, 0x6C02, 0xE5F9, 0x6F41, 0xE5FA, 0x6F26, 0xE5FB, 0x6F7E,
- 0xE5FC, 0x6F87, 0xE5FD, 0x6FC6, 0xE5FE, 0x6F92, 0xE640, 0x6F8D, 0xE641, 0x6F89, 0xE642, 0x6F8C, 0xE643, 0x6F62, 0xE644, 0x6F4F,
- 0xE645, 0x6F85, 0xE646, 0x6F5A, 0xE647, 0x6F96, 0xE648, 0x6F76, 0xE649, 0x6F6C, 0xE64A, 0x6F82, 0xE64B, 0x6F55, 0xE64C, 0x6F72,
- 0xE64D, 0x6F52, 0xE64E, 0x6F50, 0xE64F, 0x6F57, 0xE650, 0x6F94, 0xE651, 0x6F93, 0xE652, 0x6F5D, 0xE653, 0x6F00, 0xE654, 0x6F61,
- 0xE655, 0x6F6B, 0xE656, 0x6F7D, 0xE657, 0x6F67, 0xE658, 0x6F90, 0xE659, 0x6F53, 0xE65A, 0x6F8B, 0xE65B, 0x6F69, 0xE65C, 0x6F7F,
- 0xE65D, 0x6F95, 0xE65E, 0x6F63, 0xE65F, 0x6F77, 0xE660, 0x6F6A, 0xE661, 0x6F7B, 0xE662, 0x71B2, 0xE663, 0x71AF, 0xE664, 0x719B,
- 0xE665, 0x71B0, 0xE666, 0x71A0, 0xE667, 0x719A, 0xE668, 0x71A9, 0xE669, 0x71B5, 0xE66A, 0x719D, 0xE66B, 0x71A5, 0xE66C, 0x719E,
- 0xE66D, 0x71A4, 0xE66E, 0x71A1, 0xE66F, 0x71AA, 0xE670, 0x719C, 0xE671, 0x71A7, 0xE672, 0x71B3, 0xE673, 0x7298, 0xE674, 0x729A,
- 0xE675, 0x7358, 0xE676, 0x7352, 0xE677, 0x735E, 0xE678, 0x735F, 0xE679, 0x7360, 0xE67A, 0x735D, 0xE67B, 0x735B, 0xE67C, 0x7361,
- 0xE67D, 0x735A, 0xE67E, 0x7359, 0xE6A1, 0x7362, 0xE6A2, 0x7487, 0xE6A3, 0x7489, 0xE6A4, 0x748A, 0xE6A5, 0x7486, 0xE6A6, 0x7481,
- 0xE6A7, 0x747D, 0xE6A8, 0x7485, 0xE6A9, 0x7488, 0xE6AA, 0x747C, 0xE6AB, 0x7479, 0xE6AC, 0x7508, 0xE6AD, 0x7507, 0xE6AE, 0x757E,
- 0xE6AF, 0x7625, 0xE6B0, 0x761E, 0xE6B1, 0x7619, 0xE6B2, 0x761D, 0xE6B3, 0x761C, 0xE6B4, 0x7623, 0xE6B5, 0x761A, 0xE6B6, 0x7628,
- 0xE6B7, 0x761B, 0xE6B8, 0x769C, 0xE6B9, 0x769D, 0xE6BA, 0x769E, 0xE6BB, 0x769B, 0xE6BC, 0x778D, 0xE6BD, 0x778F, 0xE6BE, 0x7789,
- 0xE6BF, 0x7788, 0xE6C0, 0x78CD, 0xE6C1, 0x78BB, 0xE6C2, 0x78CF, 0xE6C3, 0x78CC, 0xE6C4, 0x78D1, 0xE6C5, 0x78CE, 0xE6C6, 0x78D4,
- 0xE6C7, 0x78C8, 0xE6C8, 0x78C3, 0xE6C9, 0x78C4, 0xE6CA, 0x78C9, 0xE6CB, 0x799A, 0xE6CC, 0x79A1, 0xE6CD, 0x79A0, 0xE6CE, 0x799C,
- 0xE6CF, 0x79A2, 0xE6D0, 0x799B, 0xE6D1, 0x6B76, 0xE6D2, 0x7A39, 0xE6D3, 0x7AB2, 0xE6D4, 0x7AB4, 0xE6D5, 0x7AB3, 0xE6D6, 0x7BB7,
- 0xE6D7, 0x7BCB, 0xE6D8, 0x7BBE, 0xE6D9, 0x7BAC, 0xE6DA, 0x7BCE, 0xE6DB, 0x7BAF, 0xE6DC, 0x7BB9, 0xE6DD, 0x7BCA, 0xE6DE, 0x7BB5,
- 0xE6DF, 0x7CC5, 0xE6E0, 0x7CC8, 0xE6E1, 0x7CCC, 0xE6E2, 0x7CCB, 0xE6E3, 0x7DF7, 0xE6E4, 0x7DDB, 0xE6E5, 0x7DEA, 0xE6E6, 0x7DE7,
- 0xE6E7, 0x7DD7, 0xE6E8, 0x7DE1, 0xE6E9, 0x7E03, 0xE6EA, 0x7DFA, 0xE6EB, 0x7DE6, 0xE6EC, 0x7DF6, 0xE6ED, 0x7DF1, 0xE6EE, 0x7DF0,
- 0xE6EF, 0x7DEE, 0xE6F0, 0x7DDF, 0xE6F1, 0x7F76, 0xE6F2, 0x7FAC, 0xE6F3, 0x7FB0, 0xE6F4, 0x7FAD, 0xE6F5, 0x7FED, 0xE6F6, 0x7FEB,
- 0xE6F7, 0x7FEA, 0xE6F8, 0x7FEC, 0xE6F9, 0x7FE6, 0xE6FA, 0x7FE8, 0xE6FB, 0x8064, 0xE6FC, 0x8067, 0xE6FD, 0x81A3, 0xE6FE, 0x819F,
- 0xE740, 0x819E, 0xE741, 0x8195, 0xE742, 0x81A2, 0xE743, 0x8199, 0xE744, 0x8197, 0xE745, 0x8216, 0xE746, 0x824F, 0xE747, 0x8253,
- 0xE748, 0x8252, 0xE749, 0x8250, 0xE74A, 0x824E, 0xE74B, 0x8251, 0xE74C, 0x8524, 0xE74D, 0x853B, 0xE74E, 0x850F, 0xE74F, 0x8500,
- 0xE750, 0x8529, 0xE751, 0x850E, 0xE752, 0x8509, 0xE753, 0x850D, 0xE754, 0x851F, 0xE755, 0x850A, 0xE756, 0x8527, 0xE757, 0x851C,
- 0xE758, 0x84FB, 0xE759, 0x852B, 0xE75A, 0x84FA, 0xE75B, 0x8508, 0xE75C, 0x850C, 0xE75D, 0x84F4, 0xE75E, 0x852A, 0xE75F, 0x84F2,
- 0xE760, 0x8515, 0xE761, 0x84F7, 0xE762, 0x84EB, 0xE763, 0x84F3, 0xE764, 0x84FC, 0xE765, 0x8512, 0xE766, 0x84EA, 0xE767, 0x84E9,
- 0xE768, 0x8516, 0xE769, 0x84FE, 0xE76A, 0x8528, 0xE76B, 0x851D, 0xE76C, 0x852E, 0xE76D, 0x8502, 0xE76E, 0x84FD, 0xE76F, 0x851E,
- 0xE770, 0x84F6, 0xE771, 0x8531, 0xE772, 0x8526, 0xE773, 0x84E7, 0xE774, 0x84E8, 0xE775, 0x84F0, 0xE776, 0x84EF, 0xE777, 0x84F9,
- 0xE778, 0x8518, 0xE779, 0x8520, 0xE77A, 0x8530, 0xE77B, 0x850B, 0xE77C, 0x8519, 0xE77D, 0x852F, 0xE77E, 0x8662, 0xE7A1, 0x8756,
- 0xE7A2, 0x8763, 0xE7A3, 0x8764, 0xE7A4, 0x8777, 0xE7A5, 0x87E1, 0xE7A6, 0x8773, 0xE7A7, 0x8758, 0xE7A8, 0x8754, 0xE7A9, 0x875B,
- 0xE7AA, 0x8752, 0xE7AB, 0x8761, 0xE7AC, 0x875A, 0xE7AD, 0x8751, 0xE7AE, 0x875E, 0xE7AF, 0x876D, 0xE7B0, 0x876A, 0xE7B1, 0x8750,
- 0xE7B2, 0x874E, 0xE7B3, 0x875F, 0xE7B4, 0x875D, 0xE7B5, 0x876F, 0xE7B6, 0x876C, 0xE7B7, 0x877A, 0xE7B8, 0x876E, 0xE7B9, 0x875C,
- 0xE7BA, 0x8765, 0xE7BB, 0x874F, 0xE7BC, 0x877B, 0xE7BD, 0x8775, 0xE7BE, 0x8762, 0xE7BF, 0x8767, 0xE7C0, 0x8769, 0xE7C1, 0x885A,
- 0xE7C2, 0x8905, 0xE7C3, 0x890C, 0xE7C4, 0x8914, 0xE7C5, 0x890B, 0xE7C6, 0x8917, 0xE7C7, 0x8918, 0xE7C8, 0x8919, 0xE7C9, 0x8906,
- 0xE7CA, 0x8916, 0xE7CB, 0x8911, 0xE7CC, 0x890E, 0xE7CD, 0x8909, 0xE7CE, 0x89A2, 0xE7CF, 0x89A4, 0xE7D0, 0x89A3, 0xE7D1, 0x89ED,
- 0xE7D2, 0x89F0, 0xE7D3, 0x89EC, 0xE7D4, 0x8ACF, 0xE7D5, 0x8AC6, 0xE7D6, 0x8AB8, 0xE7D7, 0x8AD3, 0xE7D8, 0x8AD1, 0xE7D9, 0x8AD4,
- 0xE7DA, 0x8AD5, 0xE7DB, 0x8ABB, 0xE7DC, 0x8AD7, 0xE7DD, 0x8ABE, 0xE7DE, 0x8AC0, 0xE7DF, 0x8AC5, 0xE7E0, 0x8AD8, 0xE7E1, 0x8AC3,
- 0xE7E2, 0x8ABA, 0xE7E3, 0x8ABD, 0xE7E4, 0x8AD9, 0xE7E5, 0x8C3E, 0xE7E6, 0x8C4D, 0xE7E7, 0x8C8F, 0xE7E8, 0x8CE5, 0xE7E9, 0x8CDF,
- 0xE7EA, 0x8CD9, 0xE7EB, 0x8CE8, 0xE7EC, 0x8CDA, 0xE7ED, 0x8CDD, 0xE7EE, 0x8CE7, 0xE7EF, 0x8DA0, 0xE7F0, 0x8D9C, 0xE7F1, 0x8DA1,
- 0xE7F2, 0x8D9B, 0xE7F3, 0x8E20, 0xE7F4, 0x8E23, 0xE7F5, 0x8E25, 0xE7F6, 0x8E24, 0xE7F7, 0x8E2E, 0xE7F8, 0x8E15, 0xE7F9, 0x8E1B,
- 0xE7FA, 0x8E16, 0xE7FB, 0x8E11, 0xE7FC, 0x8E19, 0xE7FD, 0x8E26, 0xE7FE, 0x8E27, 0xE840, 0x8E14, 0xE841, 0x8E12, 0xE842, 0x8E18,
- 0xE843, 0x8E13, 0xE844, 0x8E1C, 0xE845, 0x8E17, 0xE846, 0x8E1A, 0xE847, 0x8F2C, 0xE848, 0x8F24, 0xE849, 0x8F18, 0xE84A, 0x8F1A,
- 0xE84B, 0x8F20, 0xE84C, 0x8F23, 0xE84D, 0x8F16, 0xE84E, 0x8F17, 0xE84F, 0x9073, 0xE850, 0x9070, 0xE851, 0x906F, 0xE852, 0x9067,
- 0xE853, 0x906B, 0xE854, 0x912F, 0xE855, 0x912B, 0xE856, 0x9129, 0xE857, 0x912A, 0xE858, 0x9132, 0xE859, 0x9126, 0xE85A, 0x912E,
- 0xE85B, 0x9185, 0xE85C, 0x9186, 0xE85D, 0x918A, 0xE85E, 0x9181, 0xE85F, 0x9182, 0xE860, 0x9184, 0xE861, 0x9180, 0xE862, 0x92D0,
- 0xE863, 0x92C3, 0xE864, 0x92C4, 0xE865, 0x92C0, 0xE866, 0x92D9, 0xE867, 0x92B6, 0xE868, 0x92CF, 0xE869, 0x92F1, 0xE86A, 0x92DF,
- 0xE86B, 0x92D8, 0xE86C, 0x92E9, 0xE86D, 0x92D7, 0xE86E, 0x92DD, 0xE86F, 0x92CC, 0xE870, 0x92EF, 0xE871, 0x92C2, 0xE872, 0x92E8,
- 0xE873, 0x92CA, 0xE874, 0x92C8, 0xE875, 0x92CE, 0xE876, 0x92E6, 0xE877, 0x92CD, 0xE878, 0x92D5, 0xE879, 0x92C9, 0xE87A, 0x92E0,
- 0xE87B, 0x92DE, 0xE87C, 0x92E7, 0xE87D, 0x92D1, 0xE87E, 0x92D3, 0xE8A1, 0x92B5, 0xE8A2, 0x92E1, 0xE8A3, 0x92C6, 0xE8A4, 0x92B4,
- 0xE8A5, 0x957C, 0xE8A6, 0x95AC, 0xE8A7, 0x95AB, 0xE8A8, 0x95AE, 0xE8A9, 0x95B0, 0xE8AA, 0x96A4, 0xE8AB, 0x96A2, 0xE8AC, 0x96D3,
- 0xE8AD, 0x9705, 0xE8AE, 0x9708, 0xE8AF, 0x9702, 0xE8B0, 0x975A, 0xE8B1, 0x978A, 0xE8B2, 0x978E, 0xE8B3, 0x9788, 0xE8B4, 0x97D0,
- 0xE8B5, 0x97CF, 0xE8B6, 0x981E, 0xE8B7, 0x981D, 0xE8B8, 0x9826, 0xE8B9, 0x9829, 0xE8BA, 0x9828, 0xE8BB, 0x9820, 0xE8BC, 0x981B,
- 0xE8BD, 0x9827, 0xE8BE, 0x98B2, 0xE8BF, 0x9908, 0xE8C0, 0x98FA, 0xE8C1, 0x9911, 0xE8C2, 0x9914, 0xE8C3, 0x9916, 0xE8C4, 0x9917,
- 0xE8C5, 0x9915, 0xE8C6, 0x99DC, 0xE8C7, 0x99CD, 0xE8C8, 0x99CF, 0xE8C9, 0x99D3, 0xE8CA, 0x99D4, 0xE8CB, 0x99CE, 0xE8CC, 0x99C9,
- 0xE8CD, 0x99D6, 0xE8CE, 0x99D8, 0xE8CF, 0x99CB, 0xE8D0, 0x99D7, 0xE8D1, 0x99CC, 0xE8D2, 0x9AB3, 0xE8D3, 0x9AEC, 0xE8D4, 0x9AEB,
- 0xE8D5, 0x9AF3, 0xE8D6, 0x9AF2, 0xE8D7, 0x9AF1, 0xE8D8, 0x9B46, 0xE8D9, 0x9B43, 0xE8DA, 0x9B67, 0xE8DB, 0x9B74, 0xE8DC, 0x9B71,
- 0xE8DD, 0x9B66, 0xE8DE, 0x9B76, 0xE8DF, 0x9B75, 0xE8E0, 0x9B70, 0xE8E1, 0x9B68, 0xE8E2, 0x9B64, 0xE8E3, 0x9B6C, 0xE8E4, 0x9CFC,
- 0xE8E5, 0x9CFA, 0xE8E6, 0x9CFD, 0xE8E7, 0x9CFF, 0xE8E8, 0x9CF7, 0xE8E9, 0x9D07, 0xE8EA, 0x9D00, 0xE8EB, 0x9CF9, 0xE8EC, 0x9CFB,
- 0xE8ED, 0x9D08, 0xE8EE, 0x9D05, 0xE8EF, 0x9D04, 0xE8F0, 0x9E83, 0xE8F1, 0x9ED3, 0xE8F2, 0x9F0F, 0xE8F3, 0x9F10, 0xE8F4, 0x511C,
- 0xE8F5, 0x5113, 0xE8F6, 0x5117, 0xE8F7, 0x511A, 0xE8F8, 0x5111, 0xE8F9, 0x51DE, 0xE8FA, 0x5334, 0xE8FB, 0x53E1, 0xE8FC, 0x5670,
- 0xE8FD, 0x5660, 0xE8FE, 0x566E, 0xE940, 0x5673, 0xE941, 0x5666, 0xE942, 0x5663, 0xE943, 0x566D, 0xE944, 0x5672, 0xE945, 0x565E,
- 0xE946, 0x5677, 0xE947, 0x571C, 0xE948, 0x571B, 0xE949, 0x58C8, 0xE94A, 0x58BD, 0xE94B, 0x58C9, 0xE94C, 0x58BF, 0xE94D, 0x58BA,
- 0xE94E, 0x58C2, 0xE94F, 0x58BC, 0xE950, 0x58C6, 0xE951, 0x5B17, 0xE952, 0x5B19, 0xE953, 0x5B1B, 0xE954, 0x5B21, 0xE955, 0x5B14,
- 0xE956, 0x5B13, 0xE957, 0x5B10, 0xE958, 0x5B16, 0xE959, 0x5B28, 0xE95A, 0x5B1A, 0xE95B, 0x5B20, 0xE95C, 0x5B1E, 0xE95D, 0x5BEF,
- 0xE95E, 0x5DAC, 0xE95F, 0x5DB1, 0xE960, 0x5DA9, 0xE961, 0x5DA7, 0xE962, 0x5DB5, 0xE963, 0x5DB0, 0xE964, 0x5DAE, 0xE965, 0x5DAA,
- 0xE966, 0x5DA8, 0xE967, 0x5DB2, 0xE968, 0x5DAD, 0xE969, 0x5DAF, 0xE96A, 0x5DB4, 0xE96B, 0x5E67, 0xE96C, 0x5E68, 0xE96D, 0x5E66,
- 0xE96E, 0x5E6F, 0xE96F, 0x5EE9, 0xE970, 0x5EE7, 0xE971, 0x5EE6, 0xE972, 0x5EE8, 0xE973, 0x5EE5, 0xE974, 0x5F4B, 0xE975, 0x5FBC,
- 0xE976, 0x619D, 0xE977, 0x61A8, 0xE978, 0x6196, 0xE979, 0x61C5, 0xE97A, 0x61B4, 0xE97B, 0x61C6, 0xE97C, 0x61C1, 0xE97D, 0x61CC,
- 0xE97E, 0x61BA, 0xE9A1, 0x61BF, 0xE9A2, 0x61B8, 0xE9A3, 0x618C, 0xE9A4, 0x64D7, 0xE9A5, 0x64D6, 0xE9A6, 0x64D0, 0xE9A7, 0x64CF,
- 0xE9A8, 0x64C9, 0xE9A9, 0x64BD, 0xE9AA, 0x6489, 0xE9AB, 0x64C3, 0xE9AC, 0x64DB, 0xE9AD, 0x64F3, 0xE9AE, 0x64D9, 0xE9AF, 0x6533,
- 0xE9B0, 0x657F, 0xE9B1, 0x657C, 0xE9B2, 0x65A2, 0xE9B3, 0x66C8, 0xE9B4, 0x66BE, 0xE9B5, 0x66C0, 0xE9B6, 0x66CA, 0xE9B7, 0x66CB,
- 0xE9B8, 0x66CF, 0xE9B9, 0x66BD, 0xE9BA, 0x66BB, 0xE9BB, 0x66BA, 0xE9BC, 0x66CC, 0xE9BD, 0x6723, 0xE9BE, 0x6A34, 0xE9BF, 0x6A66,
- 0xE9C0, 0x6A49, 0xE9C1, 0x6A67, 0xE9C2, 0x6A32, 0xE9C3, 0x6A68, 0xE9C4, 0x6A3E, 0xE9C5, 0x6A5D, 0xE9C6, 0x6A6D, 0xE9C7, 0x6A76,
- 0xE9C8, 0x6A5B, 0xE9C9, 0x6A51, 0xE9CA, 0x6A28, 0xE9CB, 0x6A5A, 0xE9CC, 0x6A3B, 0xE9CD, 0x6A3F, 0xE9CE, 0x6A41, 0xE9CF, 0x6A6A,
- 0xE9D0, 0x6A64, 0xE9D1, 0x6A50, 0xE9D2, 0x6A4F, 0xE9D3, 0x6A54, 0xE9D4, 0x6A6F, 0xE9D5, 0x6A69, 0xE9D6, 0x6A60, 0xE9D7, 0x6A3C,
- 0xE9D8, 0x6A5E, 0xE9D9, 0x6A56, 0xE9DA, 0x6A55, 0xE9DB, 0x6A4D, 0xE9DC, 0x6A4E, 0xE9DD, 0x6A46, 0xE9DE, 0x6B55, 0xE9DF, 0x6B54,
- 0xE9E0, 0x6B56, 0xE9E1, 0x6BA7, 0xE9E2, 0x6BAA, 0xE9E3, 0x6BAB, 0xE9E4, 0x6BC8, 0xE9E5, 0x6BC7, 0xE9E6, 0x6C04, 0xE9E7, 0x6C03,
- 0xE9E8, 0x6C06, 0xE9E9, 0x6FAD, 0xE9EA, 0x6FCB, 0xE9EB, 0x6FA3, 0xE9EC, 0x6FC7, 0xE9ED, 0x6FBC, 0xE9EE, 0x6FCE, 0xE9EF, 0x6FC8,
- 0xE9F0, 0x6F5E, 0xE9F1, 0x6FC4, 0xE9F2, 0x6FBD, 0xE9F3, 0x6F9E, 0xE9F4, 0x6FCA, 0xE9F5, 0x6FA8, 0xE9F6, 0x7004, 0xE9F7, 0x6FA5,
- 0xE9F8, 0x6FAE, 0xE9F9, 0x6FBA, 0xE9FA, 0x6FAC, 0xE9FB, 0x6FAA, 0xE9FC, 0x6FCF, 0xE9FD, 0x6FBF, 0xE9FE, 0x6FB8, 0xEA40, 0x6FA2,
- 0xEA41, 0x6FC9, 0xEA42, 0x6FAB, 0xEA43, 0x6FCD, 0xEA44, 0x6FAF, 0xEA45, 0x6FB2, 0xEA46, 0x6FB0, 0xEA47, 0x71C5, 0xEA48, 0x71C2,
- 0xEA49, 0x71BF, 0xEA4A, 0x71B8, 0xEA4B, 0x71D6, 0xEA4C, 0x71C0, 0xEA4D, 0x71C1, 0xEA4E, 0x71CB, 0xEA4F, 0x71D4, 0xEA50, 0x71CA,
- 0xEA51, 0x71C7, 0xEA52, 0x71CF, 0xEA53, 0x71BD, 0xEA54, 0x71D8, 0xEA55, 0x71BC, 0xEA56, 0x71C6, 0xEA57, 0x71DA, 0xEA58, 0x71DB,
- 0xEA59, 0x729D, 0xEA5A, 0x729E, 0xEA5B, 0x7369, 0xEA5C, 0x7366, 0xEA5D, 0x7367, 0xEA5E, 0x736C, 0xEA5F, 0x7365, 0xEA60, 0x736B,
- 0xEA61, 0x736A, 0xEA62, 0x747F, 0xEA63, 0x749A, 0xEA64, 0x74A0, 0xEA65, 0x7494, 0xEA66, 0x7492, 0xEA67, 0x7495, 0xEA68, 0x74A1,
- 0xEA69, 0x750B, 0xEA6A, 0x7580, 0xEA6B, 0x762F, 0xEA6C, 0x762D, 0xEA6D, 0x7631, 0xEA6E, 0x763D, 0xEA6F, 0x7633, 0xEA70, 0x763C,
- 0xEA71, 0x7635, 0xEA72, 0x7632, 0xEA73, 0x7630, 0xEA74, 0x76BB, 0xEA75, 0x76E6, 0xEA76, 0x779A, 0xEA77, 0x779D, 0xEA78, 0x77A1,
- 0xEA79, 0x779C, 0xEA7A, 0x779B, 0xEA7B, 0x77A2, 0xEA7C, 0x77A3, 0xEA7D, 0x7795, 0xEA7E, 0x7799, 0xEAA1, 0x7797, 0xEAA2, 0x78DD,
- 0xEAA3, 0x78E9, 0xEAA4, 0x78E5, 0xEAA5, 0x78EA, 0xEAA6, 0x78DE, 0xEAA7, 0x78E3, 0xEAA8, 0x78DB, 0xEAA9, 0x78E1, 0xEAAA, 0x78E2,
- 0xEAAB, 0x78ED, 0xEAAC, 0x78DF, 0xEAAD, 0x78E0, 0xEAAE, 0x79A4, 0xEAAF, 0x7A44, 0xEAB0, 0x7A48, 0xEAB1, 0x7A47, 0xEAB2, 0x7AB6,
- 0xEAB3, 0x7AB8, 0xEAB4, 0x7AB5, 0xEAB5, 0x7AB1, 0xEAB6, 0x7AB7, 0xEAB7, 0x7BDE, 0xEAB8, 0x7BE3, 0xEAB9, 0x7BE7, 0xEABA, 0x7BDD,
- 0xEABB, 0x7BD5, 0xEABC, 0x7BE5, 0xEABD, 0x7BDA, 0xEABE, 0x7BE8, 0xEABF, 0x7BF9, 0xEAC0, 0x7BD4, 0xEAC1, 0x7BEA, 0xEAC2, 0x7BE2,
- 0xEAC3, 0x7BDC, 0xEAC4, 0x7BEB, 0xEAC5, 0x7BD8, 0xEAC6, 0x7BDF, 0xEAC7, 0x7CD2, 0xEAC8, 0x7CD4, 0xEAC9, 0x7CD7, 0xEACA, 0x7CD0,
- 0xEACB, 0x7CD1, 0xEACC, 0x7E12, 0xEACD, 0x7E21, 0xEACE, 0x7E17, 0xEACF, 0x7E0C, 0xEAD0, 0x7E1F, 0xEAD1, 0x7E20, 0xEAD2, 0x7E13,
- 0xEAD3, 0x7E0E, 0xEAD4, 0x7E1C, 0xEAD5, 0x7E15, 0xEAD6, 0x7E1A, 0xEAD7, 0x7E22, 0xEAD8, 0x7E0B, 0xEAD9, 0x7E0F, 0xEADA, 0x7E16,
- 0xEADB, 0x7E0D, 0xEADC, 0x7E14, 0xEADD, 0x7E25, 0xEADE, 0x7E24, 0xEADF, 0x7F43, 0xEAE0, 0x7F7B, 0xEAE1, 0x7F7C, 0xEAE2, 0x7F7A,
- 0xEAE3, 0x7FB1, 0xEAE4, 0x7FEF, 0xEAE5, 0x802A, 0xEAE6, 0x8029, 0xEAE7, 0x806C, 0xEAE8, 0x81B1, 0xEAE9, 0x81A6, 0xEAEA, 0x81AE,
- 0xEAEB, 0x81B9, 0xEAEC, 0x81B5, 0xEAED, 0x81AB, 0xEAEE, 0x81B0, 0xEAEF, 0x81AC, 0xEAF0, 0x81B4, 0xEAF1, 0x81B2, 0xEAF2, 0x81B7,
- 0xEAF3, 0x81A7, 0xEAF4, 0x81F2, 0xEAF5, 0x8255, 0xEAF6, 0x8256, 0xEAF7, 0x8257, 0xEAF8, 0x8556, 0xEAF9, 0x8545, 0xEAFA, 0x856B,
- 0xEAFB, 0x854D, 0xEAFC, 0x8553, 0xEAFD, 0x8561, 0xEAFE, 0x8558, 0xEB40, 0x8540, 0xEB41, 0x8546, 0xEB42, 0x8564, 0xEB43, 0x8541,
- 0xEB44, 0x8562, 0xEB45, 0x8544, 0xEB46, 0x8551, 0xEB47, 0x8547, 0xEB48, 0x8563, 0xEB49, 0x853E, 0xEB4A, 0x855B, 0xEB4B, 0x8571,
- 0xEB4C, 0x854E, 0xEB4D, 0x856E, 0xEB4E, 0x8575, 0xEB4F, 0x8555, 0xEB50, 0x8567, 0xEB51, 0x8560, 0xEB52, 0x858C, 0xEB53, 0x8566,
- 0xEB54, 0x855D, 0xEB55, 0x8554, 0xEB56, 0x8565, 0xEB57, 0x856C, 0xEB58, 0x8663, 0xEB59, 0x8665, 0xEB5A, 0x8664, 0xEB5B, 0x879B,
- 0xEB5C, 0x878F, 0xEB5D, 0x8797, 0xEB5E, 0x8793, 0xEB5F, 0x8792, 0xEB60, 0x8788, 0xEB61, 0x8781, 0xEB62, 0x8796, 0xEB63, 0x8798,
- 0xEB64, 0x8779, 0xEB65, 0x8787, 0xEB66, 0x87A3, 0xEB67, 0x8785, 0xEB68, 0x8790, 0xEB69, 0x8791, 0xEB6A, 0x879D, 0xEB6B, 0x8784,
- 0xEB6C, 0x8794, 0xEB6D, 0x879C, 0xEB6E, 0x879A, 0xEB6F, 0x8789, 0xEB70, 0x891E, 0xEB71, 0x8926, 0xEB72, 0x8930, 0xEB73, 0x892D,
- 0xEB74, 0x892E, 0xEB75, 0x8927, 0xEB76, 0x8931, 0xEB77, 0x8922, 0xEB78, 0x8929, 0xEB79, 0x8923, 0xEB7A, 0x892F, 0xEB7B, 0x892C,
- 0xEB7C, 0x891F, 0xEB7D, 0x89F1, 0xEB7E, 0x8AE0, 0xEBA1, 0x8AE2, 0xEBA2, 0x8AF2, 0xEBA3, 0x8AF4, 0xEBA4, 0x8AF5, 0xEBA5, 0x8ADD,
- 0xEBA6, 0x8B14, 0xEBA7, 0x8AE4, 0xEBA8, 0x8ADF, 0xEBA9, 0x8AF0, 0xEBAA, 0x8AC8, 0xEBAB, 0x8ADE, 0xEBAC, 0x8AE1, 0xEBAD, 0x8AE8,
- 0xEBAE, 0x8AFF, 0xEBAF, 0x8AEF, 0xEBB0, 0x8AFB, 0xEBB1, 0x8C91, 0xEBB2, 0x8C92, 0xEBB3, 0x8C90, 0xEBB4, 0x8CF5, 0xEBB5, 0x8CEE,
- 0xEBB6, 0x8CF1, 0xEBB7, 0x8CF0, 0xEBB8, 0x8CF3, 0xEBB9, 0x8D6C, 0xEBBA, 0x8D6E, 0xEBBB, 0x8DA5, 0xEBBC, 0x8DA7, 0xEBBD, 0x8E33,
- 0xEBBE, 0x8E3E, 0xEBBF, 0x8E38, 0xEBC0, 0x8E40, 0xEBC1, 0x8E45, 0xEBC2, 0x8E36, 0xEBC3, 0x8E3C, 0xEBC4, 0x8E3D, 0xEBC5, 0x8E41,
- 0xEBC6, 0x8E30, 0xEBC7, 0x8E3F, 0xEBC8, 0x8EBD, 0xEBC9, 0x8F36, 0xEBCA, 0x8F2E, 0xEBCB, 0x8F35, 0xEBCC, 0x8F32, 0xEBCD, 0x8F39,
- 0xEBCE, 0x8F37, 0xEBCF, 0x8F34, 0xEBD0, 0x9076, 0xEBD1, 0x9079, 0xEBD2, 0x907B, 0xEBD3, 0x9086, 0xEBD4, 0x90FA, 0xEBD5, 0x9133,
- 0xEBD6, 0x9135, 0xEBD7, 0x9136, 0xEBD8, 0x9193, 0xEBD9, 0x9190, 0xEBDA, 0x9191, 0xEBDB, 0x918D, 0xEBDC, 0x918F, 0xEBDD, 0x9327,
- 0xEBDE, 0x931E, 0xEBDF, 0x9308, 0xEBE0, 0x931F, 0xEBE1, 0x9306, 0xEBE2, 0x930F, 0xEBE3, 0x937A, 0xEBE4, 0x9338, 0xEBE5, 0x933C,
- 0xEBE6, 0x931B, 0xEBE7, 0x9323, 0xEBE8, 0x9312, 0xEBE9, 0x9301, 0xEBEA, 0x9346, 0xEBEB, 0x932D, 0xEBEC, 0x930E, 0xEBED, 0x930D,
- 0xEBEE, 0x92CB, 0xEBEF, 0x931D, 0xEBF0, 0x92FA, 0xEBF1, 0x9325, 0xEBF2, 0x9313, 0xEBF3, 0x92F9, 0xEBF4, 0x92F7, 0xEBF5, 0x9334,
- 0xEBF6, 0x9302, 0xEBF7, 0x9324, 0xEBF8, 0x92FF, 0xEBF9, 0x9329, 0xEBFA, 0x9339, 0xEBFB, 0x9335, 0xEBFC, 0x932A, 0xEBFD, 0x9314,
- 0xEBFE, 0x930C, 0xEC40, 0x930B, 0xEC41, 0x92FE, 0xEC42, 0x9309, 0xEC43, 0x9300, 0xEC44, 0x92FB, 0xEC45, 0x9316, 0xEC46, 0x95BC,
- 0xEC47, 0x95CD, 0xEC48, 0x95BE, 0xEC49, 0x95B9, 0xEC4A, 0x95BA, 0xEC4B, 0x95B6, 0xEC4C, 0x95BF, 0xEC4D, 0x95B5, 0xEC4E, 0x95BD,
- 0xEC4F, 0x96A9, 0xEC50, 0x96D4, 0xEC51, 0x970B, 0xEC52, 0x9712, 0xEC53, 0x9710, 0xEC54, 0x9799, 0xEC55, 0x9797, 0xEC56, 0x9794,
- 0xEC57, 0x97F0, 0xEC58, 0x97F8, 0xEC59, 0x9835, 0xEC5A, 0x982F, 0xEC5B, 0x9832, 0xEC5C, 0x9924, 0xEC5D, 0x991F, 0xEC5E, 0x9927,
- 0xEC5F, 0x9929, 0xEC60, 0x999E, 0xEC61, 0x99EE, 0xEC62, 0x99EC, 0xEC63, 0x99E5, 0xEC64, 0x99E4, 0xEC65, 0x99F0, 0xEC66, 0x99E3,
- 0xEC67, 0x99EA, 0xEC68, 0x99E9, 0xEC69, 0x99E7, 0xEC6A, 0x9AB9, 0xEC6B, 0x9ABF, 0xEC6C, 0x9AB4, 0xEC6D, 0x9ABB, 0xEC6E, 0x9AF6,
- 0xEC6F, 0x9AFA, 0xEC70, 0x9AF9, 0xEC71, 0x9AF7, 0xEC72, 0x9B33, 0xEC73, 0x9B80, 0xEC74, 0x9B85, 0xEC75, 0x9B87, 0xEC76, 0x9B7C,
- 0xEC77, 0x9B7E, 0xEC78, 0x9B7B, 0xEC79, 0x9B82, 0xEC7A, 0x9B93, 0xEC7B, 0x9B92, 0xEC7C, 0x9B90, 0xEC7D, 0x9B7A, 0xEC7E, 0x9B95,
- 0xECA1, 0x9B7D, 0xECA2, 0x9B88, 0xECA3, 0x9D25, 0xECA4, 0x9D17, 0xECA5, 0x9D20, 0xECA6, 0x9D1E, 0xECA7, 0x9D14, 0xECA8, 0x9D29,
- 0xECA9, 0x9D1D, 0xECAA, 0x9D18, 0xECAB, 0x9D22, 0xECAC, 0x9D10, 0xECAD, 0x9D19, 0xECAE, 0x9D1F, 0xECAF, 0x9E88, 0xECB0, 0x9E86,
- 0xECB1, 0x9E87, 0xECB2, 0x9EAE, 0xECB3, 0x9EAD, 0xECB4, 0x9ED5, 0xECB5, 0x9ED6, 0xECB6, 0x9EFA, 0xECB7, 0x9F12, 0xECB8, 0x9F3D,
- 0xECB9, 0x5126, 0xECBA, 0x5125, 0xECBB, 0x5122, 0xECBC, 0x5124, 0xECBD, 0x5120, 0xECBE, 0x5129, 0xECBF, 0x52F4, 0xECC0, 0x5693,
- 0xECC1, 0x568C, 0xECC2, 0x568D, 0xECC3, 0x5686, 0xECC4, 0x5684, 0xECC5, 0x5683, 0xECC6, 0x567E, 0xECC7, 0x5682, 0xECC8, 0x567F,
- 0xECC9, 0x5681, 0xECCA, 0x58D6, 0xECCB, 0x58D4, 0xECCC, 0x58CF, 0xECCD, 0x58D2, 0xECCE, 0x5B2D, 0xECCF, 0x5B25, 0xECD0, 0x5B32,
- 0xECD1, 0x5B23, 0xECD2, 0x5B2C, 0xECD3, 0x5B27, 0xECD4, 0x5B26, 0xECD5, 0x5B2F, 0xECD6, 0x5B2E, 0xECD7, 0x5B7B, 0xECD8, 0x5BF1,
- 0xECD9, 0x5BF2, 0xECDA, 0x5DB7, 0xECDB, 0x5E6C, 0xECDC, 0x5E6A, 0xECDD, 0x5FBE, 0xECDE, 0x5FBB, 0xECDF, 0x61C3, 0xECE0, 0x61B5,
- 0xECE1, 0x61BC, 0xECE2, 0x61E7, 0xECE3, 0x61E0, 0xECE4, 0x61E5, 0xECE5, 0x61E4, 0xECE6, 0x61E8, 0xECE7, 0x61DE, 0xECE8, 0x64EF,
- 0xECE9, 0x64E9, 0xECEA, 0x64E3, 0xECEB, 0x64EB, 0xECEC, 0x64E4, 0xECED, 0x64E8, 0xECEE, 0x6581, 0xECEF, 0x6580, 0xECF0, 0x65B6,
- 0xECF1, 0x65DA, 0xECF2, 0x66D2, 0xECF3, 0x6A8D, 0xECF4, 0x6A96, 0xECF5, 0x6A81, 0xECF6, 0x6AA5, 0xECF7, 0x6A89, 0xECF8, 0x6A9F,
- 0xECF9, 0x6A9B, 0xECFA, 0x6AA1, 0xECFB, 0x6A9E, 0xECFC, 0x6A87, 0xECFD, 0x6A93, 0xECFE, 0x6A8E, 0xED40, 0x6A95, 0xED41, 0x6A83,
- 0xED42, 0x6AA8, 0xED43, 0x6AA4, 0xED44, 0x6A91, 0xED45, 0x6A7F, 0xED46, 0x6AA6, 0xED47, 0x6A9A, 0xED48, 0x6A85, 0xED49, 0x6A8C,
- 0xED4A, 0x6A92, 0xED4B, 0x6B5B, 0xED4C, 0x6BAD, 0xED4D, 0x6C09, 0xED4E, 0x6FCC, 0xED4F, 0x6FA9, 0xED50, 0x6FF4, 0xED51, 0x6FD4,
- 0xED52, 0x6FE3, 0xED53, 0x6FDC, 0xED54, 0x6FED, 0xED55, 0x6FE7, 0xED56, 0x6FE6, 0xED57, 0x6FDE, 0xED58, 0x6FF2, 0xED59, 0x6FDD,
- 0xED5A, 0x6FE2, 0xED5B, 0x6FE8, 0xED5C, 0x71E1, 0xED5D, 0x71F1, 0xED5E, 0x71E8, 0xED5F, 0x71F2, 0xED60, 0x71E4, 0xED61, 0x71F0,
- 0xED62, 0x71E2, 0xED63, 0x7373, 0xED64, 0x736E, 0xED65, 0x736F, 0xED66, 0x7497, 0xED67, 0x74B2, 0xED68, 0x74AB, 0xED69, 0x7490,
- 0xED6A, 0x74AA, 0xED6B, 0x74AD, 0xED6C, 0x74B1, 0xED6D, 0x74A5, 0xED6E, 0x74AF, 0xED6F, 0x7510, 0xED70, 0x7511, 0xED71, 0x7512,
- 0xED72, 0x750F, 0xED73, 0x7584, 0xED74, 0x7643, 0xED75, 0x7648, 0xED76, 0x7649, 0xED77, 0x7647, 0xED78, 0x76A4, 0xED79, 0x76E9,
- 0xED7A, 0x77B5, 0xED7B, 0x77AB, 0xED7C, 0x77B2, 0xED7D, 0x77B7, 0xED7E, 0x77B6, 0xEDA1, 0x77B4, 0xEDA2, 0x77B1, 0xEDA3, 0x77A8,
- 0xEDA4, 0x77F0, 0xEDA5, 0x78F3, 0xEDA6, 0x78FD, 0xEDA7, 0x7902, 0xEDA8, 0x78FB, 0xEDA9, 0x78FC, 0xEDAA, 0x78F2, 0xEDAB, 0x7905,
- 0xEDAC, 0x78F9, 0xEDAD, 0x78FE, 0xEDAE, 0x7904, 0xEDAF, 0x79AB, 0xEDB0, 0x79A8, 0xEDB1, 0x7A5C, 0xEDB2, 0x7A5B, 0xEDB3, 0x7A56,
- 0xEDB4, 0x7A58, 0xEDB5, 0x7A54, 0xEDB6, 0x7A5A, 0xEDB7, 0x7ABE, 0xEDB8, 0x7AC0, 0xEDB9, 0x7AC1, 0xEDBA, 0x7C05, 0xEDBB, 0x7C0F,
- 0xEDBC, 0x7BF2, 0xEDBD, 0x7C00, 0xEDBE, 0x7BFF, 0xEDBF, 0x7BFB, 0xEDC0, 0x7C0E, 0xEDC1, 0x7BF4, 0xEDC2, 0x7C0B, 0xEDC3, 0x7BF3,
- 0xEDC4, 0x7C02, 0xEDC5, 0x7C09, 0xEDC6, 0x7C03, 0xEDC7, 0x7C01, 0xEDC8, 0x7BF8, 0xEDC9, 0x7BFD, 0xEDCA, 0x7C06, 0xEDCB, 0x7BF0,
- 0xEDCC, 0x7BF1, 0xEDCD, 0x7C10, 0xEDCE, 0x7C0A, 0xEDCF, 0x7CE8, 0xEDD0, 0x7E2D, 0xEDD1, 0x7E3C, 0xEDD2, 0x7E42, 0xEDD3, 0x7E33,
- 0xEDD4, 0x9848, 0xEDD5, 0x7E38, 0xEDD6, 0x7E2A, 0xEDD7, 0x7E49, 0xEDD8, 0x7E40, 0xEDD9, 0x7E47, 0xEDDA, 0x7E29, 0xEDDB, 0x7E4C,
- 0xEDDC, 0x7E30, 0xEDDD, 0x7E3B, 0xEDDE, 0x7E36, 0xEDDF, 0x7E44, 0xEDE0, 0x7E3A, 0xEDE1, 0x7F45, 0xEDE2, 0x7F7F, 0xEDE3, 0x7F7E,
- 0xEDE4, 0x7F7D, 0xEDE5, 0x7FF4, 0xEDE6, 0x7FF2, 0xEDE7, 0x802C, 0xEDE8, 0x81BB, 0xEDE9, 0x81C4, 0xEDEA, 0x81CC, 0xEDEB, 0x81CA,
- 0xEDEC, 0x81C5, 0xEDED, 0x81C7, 0xEDEE, 0x81BC, 0xEDEF, 0x81E9, 0xEDF0, 0x825B, 0xEDF1, 0x825A, 0xEDF2, 0x825C, 0xEDF3, 0x8583,
- 0xEDF4, 0x8580, 0xEDF5, 0x858F, 0xEDF6, 0x85A7, 0xEDF7, 0x8595, 0xEDF8, 0x85A0, 0xEDF9, 0x858B, 0xEDFA, 0x85A3, 0xEDFB, 0x857B,
- 0xEDFC, 0x85A4, 0xEDFD, 0x859A, 0xEDFE, 0x859E, 0xEE40, 0x8577, 0xEE41, 0x857C, 0xEE42, 0x8589, 0xEE43, 0x85A1, 0xEE44, 0x857A,
- 0xEE45, 0x8578, 0xEE46, 0x8557, 0xEE47, 0x858E, 0xEE48, 0x8596, 0xEE49, 0x8586, 0xEE4A, 0x858D, 0xEE4B, 0x8599, 0xEE4C, 0x859D,
- 0xEE4D, 0x8581, 0xEE4E, 0x85A2, 0xEE4F, 0x8582, 0xEE50, 0x8588, 0xEE51, 0x8585, 0xEE52, 0x8579, 0xEE53, 0x8576, 0xEE54, 0x8598,
- 0xEE55, 0x8590, 0xEE56, 0x859F, 0xEE57, 0x8668, 0xEE58, 0x87BE, 0xEE59, 0x87AA, 0xEE5A, 0x87AD, 0xEE5B, 0x87C5, 0xEE5C, 0x87B0,
- 0xEE5D, 0x87AC, 0xEE5E, 0x87B9, 0xEE5F, 0x87B5, 0xEE60, 0x87BC, 0xEE61, 0x87AE, 0xEE62, 0x87C9, 0xEE63, 0x87C3, 0xEE64, 0x87C2,
- 0xEE65, 0x87CC, 0xEE66, 0x87B7, 0xEE67, 0x87AF, 0xEE68, 0x87C4, 0xEE69, 0x87CA, 0xEE6A, 0x87B4, 0xEE6B, 0x87B6, 0xEE6C, 0x87BF,
- 0xEE6D, 0x87B8, 0xEE6E, 0x87BD, 0xEE6F, 0x87DE, 0xEE70, 0x87B2, 0xEE71, 0x8935, 0xEE72, 0x8933, 0xEE73, 0x893C, 0xEE74, 0x893E,
- 0xEE75, 0x8941, 0xEE76, 0x8952, 0xEE77, 0x8937, 0xEE78, 0x8942, 0xEE79, 0x89AD, 0xEE7A, 0x89AF, 0xEE7B, 0x89AE, 0xEE7C, 0x89F2,
- 0xEE7D, 0x89F3, 0xEE7E, 0x8B1E, 0xEEA1, 0x8B18, 0xEEA2, 0x8B16, 0xEEA3, 0x8B11, 0xEEA4, 0x8B05, 0xEEA5, 0x8B0B, 0xEEA6, 0x8B22,
- 0xEEA7, 0x8B0F, 0xEEA8, 0x8B12, 0xEEA9, 0x8B15, 0xEEAA, 0x8B07, 0xEEAB, 0x8B0D, 0xEEAC, 0x8B08, 0xEEAD, 0x8B06, 0xEEAE, 0x8B1C,
- 0xEEAF, 0x8B13, 0xEEB0, 0x8B1A, 0xEEB1, 0x8C4F, 0xEEB2, 0x8C70, 0xEEB3, 0x8C72, 0xEEB4, 0x8C71, 0xEEB5, 0x8C6F, 0xEEB6, 0x8C95,
- 0xEEB7, 0x8C94, 0xEEB8, 0x8CF9, 0xEEB9, 0x8D6F, 0xEEBA, 0x8E4E, 0xEEBB, 0x8E4D, 0xEEBC, 0x8E53, 0xEEBD, 0x8E50, 0xEEBE, 0x8E4C,
- 0xEEBF, 0x8E47, 0xEEC0, 0x8F43, 0xEEC1, 0x8F40, 0xEEC2, 0x9085, 0xEEC3, 0x907E, 0xEEC4, 0x9138, 0xEEC5, 0x919A, 0xEEC6, 0x91A2,
- 0xEEC7, 0x919B, 0xEEC8, 0x9199, 0xEEC9, 0x919F, 0xEECA, 0x91A1, 0xEECB, 0x919D, 0xEECC, 0x91A0, 0xEECD, 0x93A1, 0xEECE, 0x9383,
- 0xEECF, 0x93AF, 0xEED0, 0x9364, 0xEED1, 0x9356, 0xEED2, 0x9347, 0xEED3, 0x937C, 0xEED4, 0x9358, 0xEED5, 0x935C, 0xEED6, 0x9376,
- 0xEED7, 0x9349, 0xEED8, 0x9350, 0xEED9, 0x9351, 0xEEDA, 0x9360, 0xEEDB, 0x936D, 0xEEDC, 0x938F, 0xEEDD, 0x934C, 0xEEDE, 0x936A,
- 0xEEDF, 0x9379, 0xEEE0, 0x9357, 0xEEE1, 0x9355, 0xEEE2, 0x9352, 0xEEE3, 0x934F, 0xEEE4, 0x9371, 0xEEE5, 0x9377, 0xEEE6, 0x937B,
- 0xEEE7, 0x9361, 0xEEE8, 0x935E, 0xEEE9, 0x9363, 0xEEEA, 0x9367, 0xEEEB, 0x9380, 0xEEEC, 0x934E, 0xEEED, 0x9359, 0xEEEE, 0x95C7,
- 0xEEEF, 0x95C0, 0xEEF0, 0x95C9, 0xEEF1, 0x95C3, 0xEEF2, 0x95C5, 0xEEF3, 0x95B7, 0xEEF4, 0x96AE, 0xEEF5, 0x96B0, 0xEEF6, 0x96AC,
- 0xEEF7, 0x9720, 0xEEF8, 0x971F, 0xEEF9, 0x9718, 0xEEFA, 0x971D, 0xEEFB, 0x9719, 0xEEFC, 0x979A, 0xEEFD, 0x97A1, 0xEEFE, 0x979C,
- 0xEF40, 0x979E, 0xEF41, 0x979D, 0xEF42, 0x97D5, 0xEF43, 0x97D4, 0xEF44, 0x97F1, 0xEF45, 0x9841, 0xEF46, 0x9844, 0xEF47, 0x984A,
- 0xEF48, 0x9849, 0xEF49, 0x9845, 0xEF4A, 0x9843, 0xEF4B, 0x9925, 0xEF4C, 0x992B, 0xEF4D, 0x992C, 0xEF4E, 0x992A, 0xEF4F, 0x9933,
- 0xEF50, 0x9932, 0xEF51, 0x992F, 0xEF52, 0x992D, 0xEF53, 0x9931, 0xEF54, 0x9930, 0xEF55, 0x9998, 0xEF56, 0x99A3, 0xEF57, 0x99A1,
- 0xEF58, 0x9A02, 0xEF59, 0x99FA, 0xEF5A, 0x99F4, 0xEF5B, 0x99F7, 0xEF5C, 0x99F9, 0xEF5D, 0x99F8, 0xEF5E, 0x99F6, 0xEF5F, 0x99FB,
- 0xEF60, 0x99FD, 0xEF61, 0x99FE, 0xEF62, 0x99FC, 0xEF63, 0x9A03, 0xEF64, 0x9ABE, 0xEF65, 0x9AFE, 0xEF66, 0x9AFD, 0xEF67, 0x9B01,
- 0xEF68, 0x9AFC, 0xEF69, 0x9B48, 0xEF6A, 0x9B9A, 0xEF6B, 0x9BA8, 0xEF6C, 0x9B9E, 0xEF6D, 0x9B9B, 0xEF6E, 0x9BA6, 0xEF6F, 0x9BA1,
- 0xEF70, 0x9BA5, 0xEF71, 0x9BA4, 0xEF72, 0x9B86, 0xEF73, 0x9BA2, 0xEF74, 0x9BA0, 0xEF75, 0x9BAF, 0xEF76, 0x9D33, 0xEF77, 0x9D41,
- 0xEF78, 0x9D67, 0xEF79, 0x9D36, 0xEF7A, 0x9D2E, 0xEF7B, 0x9D2F, 0xEF7C, 0x9D31, 0xEF7D, 0x9D38, 0xEF7E, 0x9D30, 0xEFA1, 0x9D45,
- 0xEFA2, 0x9D42, 0xEFA3, 0x9D43, 0xEFA4, 0x9D3E, 0xEFA5, 0x9D37, 0xEFA6, 0x9D40, 0xEFA7, 0x9D3D, 0xEFA8, 0x7FF5, 0xEFA9, 0x9D2D,
- 0xEFAA, 0x9E8A, 0xEFAB, 0x9E89, 0xEFAC, 0x9E8D, 0xEFAD, 0x9EB0, 0xEFAE, 0x9EC8, 0xEFAF, 0x9EDA, 0xEFB0, 0x9EFB, 0xEFB1, 0x9EFF,
- 0xEFB2, 0x9F24, 0xEFB3, 0x9F23, 0xEFB4, 0x9F22, 0xEFB5, 0x9F54, 0xEFB6, 0x9FA0, 0xEFB7, 0x5131, 0xEFB8, 0x512D, 0xEFB9, 0x512E,
- 0xEFBA, 0x5698, 0xEFBB, 0x569C, 0xEFBC, 0x5697, 0xEFBD, 0x569A, 0xEFBE, 0x569D, 0xEFBF, 0x5699, 0xEFC0, 0x5970, 0xEFC1, 0x5B3C,
- 0xEFC2, 0x5C69, 0xEFC3, 0x5C6A, 0xEFC4, 0x5DC0, 0xEFC5, 0x5E6D, 0xEFC6, 0x5E6E, 0xEFC7, 0x61D8, 0xEFC8, 0x61DF, 0xEFC9, 0x61ED,
- 0xEFCA, 0x61EE, 0xEFCB, 0x61F1, 0xEFCC, 0x61EA, 0xEFCD, 0x61F0, 0xEFCE, 0x61EB, 0xEFCF, 0x61D6, 0xEFD0, 0x61E9, 0xEFD1, 0x64FF,
- 0xEFD2, 0x6504, 0xEFD3, 0x64FD, 0xEFD4, 0x64F8, 0xEFD5, 0x6501, 0xEFD6, 0x6503, 0xEFD7, 0x64FC, 0xEFD8, 0x6594, 0xEFD9, 0x65DB,
- 0xEFDA, 0x66DA, 0xEFDB, 0x66DB, 0xEFDC, 0x66D8, 0xEFDD, 0x6AC5, 0xEFDE, 0x6AB9, 0xEFDF, 0x6ABD, 0xEFE0, 0x6AE1, 0xEFE1, 0x6AC6,
- 0xEFE2, 0x6ABA, 0xEFE3, 0x6AB6, 0xEFE4, 0x6AB7, 0xEFE5, 0x6AC7, 0xEFE6, 0x6AB4, 0xEFE7, 0x6AAD, 0xEFE8, 0x6B5E, 0xEFE9, 0x6BC9,
- 0xEFEA, 0x6C0B, 0xEFEB, 0x7007, 0xEFEC, 0x700C, 0xEFED, 0x700D, 0xEFEE, 0x7001, 0xEFEF, 0x7005, 0xEFF0, 0x7014, 0xEFF1, 0x700E,
- 0xEFF2, 0x6FFF, 0xEFF3, 0x7000, 0xEFF4, 0x6FFB, 0xEFF5, 0x7026, 0xEFF6, 0x6FFC, 0xEFF7, 0x6FF7, 0xEFF8, 0x700A, 0xEFF9, 0x7201,
- 0xEFFA, 0x71FF, 0xEFFB, 0x71F9, 0xEFFC, 0x7203, 0xEFFD, 0x71FD, 0xEFFE, 0x7376, 0xF040, 0x74B8, 0xF041, 0x74C0, 0xF042, 0x74B5,
- 0xF043, 0x74C1, 0xF044, 0x74BE, 0xF045, 0x74B6, 0xF046, 0x74BB, 0xF047, 0x74C2, 0xF048, 0x7514, 0xF049, 0x7513, 0xF04A, 0x765C,
- 0xF04B, 0x7664, 0xF04C, 0x7659, 0xF04D, 0x7650, 0xF04E, 0x7653, 0xF04F, 0x7657, 0xF050, 0x765A, 0xF051, 0x76A6, 0xF052, 0x76BD,
- 0xF053, 0x76EC, 0xF054, 0x77C2, 0xF055, 0x77BA, 0xF056, 0x78FF, 0xF057, 0x790C, 0xF058, 0x7913, 0xF059, 0x7914, 0xF05A, 0x7909,
- 0xF05B, 0x7910, 0xF05C, 0x7912, 0xF05D, 0x7911, 0xF05E, 0x79AD, 0xF05F, 0x79AC, 0xF060, 0x7A5F, 0xF061, 0x7C1C, 0xF062, 0x7C29,
- 0xF063, 0x7C19, 0xF064, 0x7C20, 0xF065, 0x7C1F, 0xF066, 0x7C2D, 0xF067, 0x7C1D, 0xF068, 0x7C26, 0xF069, 0x7C28, 0xF06A, 0x7C22,
- 0xF06B, 0x7C25, 0xF06C, 0x7C30, 0xF06D, 0x7E5C, 0xF06E, 0x7E50, 0xF06F, 0x7E56, 0xF070, 0x7E63, 0xF071, 0x7E58, 0xF072, 0x7E62,
- 0xF073, 0x7E5F, 0xF074, 0x7E51, 0xF075, 0x7E60, 0xF076, 0x7E57, 0xF077, 0x7E53, 0xF078, 0x7FB5, 0xF079, 0x7FB3, 0xF07A, 0x7FF7,
- 0xF07B, 0x7FF8, 0xF07C, 0x8075, 0xF07D, 0x81D1, 0xF07E, 0x81D2, 0xF0A1, 0x81D0, 0xF0A2, 0x825F, 0xF0A3, 0x825E, 0xF0A4, 0x85B4,
- 0xF0A5, 0x85C6, 0xF0A6, 0x85C0, 0xF0A7, 0x85C3, 0xF0A8, 0x85C2, 0xF0A9, 0x85B3, 0xF0AA, 0x85B5, 0xF0AB, 0x85BD, 0xF0AC, 0x85C7,
- 0xF0AD, 0x85C4, 0xF0AE, 0x85BF, 0xF0AF, 0x85CB, 0xF0B0, 0x85CE, 0xF0B1, 0x85C8, 0xF0B2, 0x85C5, 0xF0B3, 0x85B1, 0xF0B4, 0x85B6,
- 0xF0B5, 0x85D2, 0xF0B6, 0x8624, 0xF0B7, 0x85B8, 0xF0B8, 0x85B7, 0xF0B9, 0x85BE, 0xF0BA, 0x8669, 0xF0BB, 0x87E7, 0xF0BC, 0x87E6,
- 0xF0BD, 0x87E2, 0xF0BE, 0x87DB, 0xF0BF, 0x87EB, 0xF0C0, 0x87EA, 0xF0C1, 0x87E5, 0xF0C2, 0x87DF, 0xF0C3, 0x87F3, 0xF0C4, 0x87E4,
- 0xF0C5, 0x87D4, 0xF0C6, 0x87DC, 0xF0C7, 0x87D3, 0xF0C8, 0x87ED, 0xF0C9, 0x87D8, 0xF0CA, 0x87E3, 0xF0CB, 0x87A4, 0xF0CC, 0x87D7,
- 0xF0CD, 0x87D9, 0xF0CE, 0x8801, 0xF0CF, 0x87F4, 0xF0D0, 0x87E8, 0xF0D1, 0x87DD, 0xF0D2, 0x8953, 0xF0D3, 0x894B, 0xF0D4, 0x894F,
- 0xF0D5, 0x894C, 0xF0D6, 0x8946, 0xF0D7, 0x8950, 0xF0D8, 0x8951, 0xF0D9, 0x8949, 0xF0DA, 0x8B2A, 0xF0DB, 0x8B27, 0xF0DC, 0x8B23,
- 0xF0DD, 0x8B33, 0xF0DE, 0x8B30, 0xF0DF, 0x8B35, 0xF0E0, 0x8B47, 0xF0E1, 0x8B2F, 0xF0E2, 0x8B3C, 0xF0E3, 0x8B3E, 0xF0E4, 0x8B31,
- 0xF0E5, 0x8B25, 0xF0E6, 0x8B37, 0xF0E7, 0x8B26, 0xF0E8, 0x8B36, 0xF0E9, 0x8B2E, 0xF0EA, 0x8B24, 0xF0EB, 0x8B3B, 0xF0EC, 0x8B3D,
- 0xF0ED, 0x8B3A, 0xF0EE, 0x8C42, 0xF0EF, 0x8C75, 0xF0F0, 0x8C99, 0xF0F1, 0x8C98, 0xF0F2, 0x8C97, 0xF0F3, 0x8CFE, 0xF0F4, 0x8D04,
- 0xF0F5, 0x8D02, 0xF0F6, 0x8D00, 0xF0F7, 0x8E5C, 0xF0F8, 0x8E62, 0xF0F9, 0x8E60, 0xF0FA, 0x8E57, 0xF0FB, 0x8E56, 0xF0FC, 0x8E5E,
- 0xF0FD, 0x8E65, 0xF0FE, 0x8E67, 0xF140, 0x8E5B, 0xF141, 0x8E5A, 0xF142, 0x8E61, 0xF143, 0x8E5D, 0xF144, 0x8E69, 0xF145, 0x8E54,
- 0xF146, 0x8F46, 0xF147, 0x8F47, 0xF148, 0x8F48, 0xF149, 0x8F4B, 0xF14A, 0x9128, 0xF14B, 0x913A, 0xF14C, 0x913B, 0xF14D, 0x913E,
- 0xF14E, 0x91A8, 0xF14F, 0x91A5, 0xF150, 0x91A7, 0xF151, 0x91AF, 0xF152, 0x91AA, 0xF153, 0x93B5, 0xF154, 0x938C, 0xF155, 0x9392,
- 0xF156, 0x93B7, 0xF157, 0x939B, 0xF158, 0x939D, 0xF159, 0x9389, 0xF15A, 0x93A7, 0xF15B, 0x938E, 0xF15C, 0x93AA, 0xF15D, 0x939E,
- 0xF15E, 0x93A6, 0xF15F, 0x9395, 0xF160, 0x9388, 0xF161, 0x9399, 0xF162, 0x939F, 0xF163, 0x938D, 0xF164, 0x93B1, 0xF165, 0x9391,
- 0xF166, 0x93B2, 0xF167, 0x93A4, 0xF168, 0x93A8, 0xF169, 0x93B4, 0xF16A, 0x93A3, 0xF16B, 0x93A5, 0xF16C, 0x95D2, 0xF16D, 0x95D3,
- 0xF16E, 0x95D1, 0xF16F, 0x96B3, 0xF170, 0x96D7, 0xF171, 0x96DA, 0xF172, 0x5DC2, 0xF173, 0x96DF, 0xF174, 0x96D8, 0xF175, 0x96DD,
- 0xF176, 0x9723, 0xF177, 0x9722, 0xF178, 0x9725, 0xF179, 0x97AC, 0xF17A, 0x97AE, 0xF17B, 0x97A8, 0xF17C, 0x97AB, 0xF17D, 0x97A4,
- 0xF17E, 0x97AA, 0xF1A1, 0x97A2, 0xF1A2, 0x97A5, 0xF1A3, 0x97D7, 0xF1A4, 0x97D9, 0xF1A5, 0x97D6, 0xF1A6, 0x97D8, 0xF1A7, 0x97FA,
- 0xF1A8, 0x9850, 0xF1A9, 0x9851, 0xF1AA, 0x9852, 0xF1AB, 0x98B8, 0xF1AC, 0x9941, 0xF1AD, 0x993C, 0xF1AE, 0x993A, 0xF1AF, 0x9A0F,
- 0xF1B0, 0x9A0B, 0xF1B1, 0x9A09, 0xF1B2, 0x9A0D, 0xF1B3, 0x9A04, 0xF1B4, 0x9A11, 0xF1B5, 0x9A0A, 0xF1B6, 0x9A05, 0xF1B7, 0x9A07,
- 0xF1B8, 0x9A06, 0xF1B9, 0x9AC0, 0xF1BA, 0x9ADC, 0xF1BB, 0x9B08, 0xF1BC, 0x9B04, 0xF1BD, 0x9B05, 0xF1BE, 0x9B29, 0xF1BF, 0x9B35,
- 0xF1C0, 0x9B4A, 0xF1C1, 0x9B4C, 0xF1C2, 0x9B4B, 0xF1C3, 0x9BC7, 0xF1C4, 0x9BC6, 0xF1C5, 0x9BC3, 0xF1C6, 0x9BBF, 0xF1C7, 0x9BC1,
- 0xF1C8, 0x9BB5, 0xF1C9, 0x9BB8, 0xF1CA, 0x9BD3, 0xF1CB, 0x9BB6, 0xF1CC, 0x9BC4, 0xF1CD, 0x9BB9, 0xF1CE, 0x9BBD, 0xF1CF, 0x9D5C,
- 0xF1D0, 0x9D53, 0xF1D1, 0x9D4F, 0xF1D2, 0x9D4A, 0xF1D3, 0x9D5B, 0xF1D4, 0x9D4B, 0xF1D5, 0x9D59, 0xF1D6, 0x9D56, 0xF1D7, 0x9D4C,
- 0xF1D8, 0x9D57, 0xF1D9, 0x9D52, 0xF1DA, 0x9D54, 0xF1DB, 0x9D5F, 0xF1DC, 0x9D58, 0xF1DD, 0x9D5A, 0xF1DE, 0x9E8E, 0xF1DF, 0x9E8C,
- 0xF1E0, 0x9EDF, 0xF1E1, 0x9F01, 0xF1E2, 0x9F00, 0xF1E3, 0x9F16, 0xF1E4, 0x9F25, 0xF1E5, 0x9F2B, 0xF1E6, 0x9F2A, 0xF1E7, 0x9F29,
- 0xF1E8, 0x9F28, 0xF1E9, 0x9F4C, 0xF1EA, 0x9F55, 0xF1EB, 0x5134, 0xF1EC, 0x5135, 0xF1ED, 0x5296, 0xF1EE, 0x52F7, 0xF1EF, 0x53B4,
- 0xF1F0, 0x56AB, 0xF1F1, 0x56AD, 0xF1F2, 0x56A6, 0xF1F3, 0x56A7, 0xF1F4, 0x56AA, 0xF1F5, 0x56AC, 0xF1F6, 0x58DA, 0xF1F7, 0x58DD,
- 0xF1F8, 0x58DB, 0xF1F9, 0x5912, 0xF1FA, 0x5B3D, 0xF1FB, 0x5B3E, 0xF1FC, 0x5B3F, 0xF1FD, 0x5DC3, 0xF1FE, 0x5E70, 0xF240, 0x5FBF,
- 0xF241, 0x61FB, 0xF242, 0x6507, 0xF243, 0x6510, 0xF244, 0x650D, 0xF245, 0x6509, 0xF246, 0x650C, 0xF247, 0x650E, 0xF248, 0x6584,
- 0xF249, 0x65DE, 0xF24A, 0x65DD, 0xF24B, 0x66DE, 0xF24C, 0x6AE7, 0xF24D, 0x6AE0, 0xF24E, 0x6ACC, 0xF24F, 0x6AD1, 0xF250, 0x6AD9,
- 0xF251, 0x6ACB, 0xF252, 0x6ADF, 0xF253, 0x6ADC, 0xF254, 0x6AD0, 0xF255, 0x6AEB, 0xF256, 0x6ACF, 0xF257, 0x6ACD, 0xF258, 0x6ADE,
- 0xF259, 0x6B60, 0xF25A, 0x6BB0, 0xF25B, 0x6C0C, 0xF25C, 0x7019, 0xF25D, 0x7027, 0xF25E, 0x7020, 0xF25F, 0x7016, 0xF260, 0x702B,
- 0xF261, 0x7021, 0xF262, 0x7022, 0xF263, 0x7023, 0xF264, 0x7029, 0xF265, 0x7017, 0xF266, 0x7024, 0xF267, 0x701C, 0xF268, 0x702A,
- 0xF269, 0x720C, 0xF26A, 0x720A, 0xF26B, 0x7207, 0xF26C, 0x7202, 0xF26D, 0x7205, 0xF26E, 0x72A5, 0xF26F, 0x72A6, 0xF270, 0x72A4,
- 0xF271, 0x72A3, 0xF272, 0x72A1, 0xF273, 0x74CB, 0xF274, 0x74C5, 0xF275, 0x74B7, 0xF276, 0x74C3, 0xF277, 0x7516, 0xF278, 0x7660,
- 0xF279, 0x77C9, 0xF27A, 0x77CA, 0xF27B, 0x77C4, 0xF27C, 0x77F1, 0xF27D, 0x791D, 0xF27E, 0x791B, 0xF2A1, 0x7921, 0xF2A2, 0x791C,
- 0xF2A3, 0x7917, 0xF2A4, 0x791E, 0xF2A5, 0x79B0, 0xF2A6, 0x7A67, 0xF2A7, 0x7A68, 0xF2A8, 0x7C33, 0xF2A9, 0x7C3C, 0xF2AA, 0x7C39,
- 0xF2AB, 0x7C2C, 0xF2AC, 0x7C3B, 0xF2AD, 0x7CEC, 0xF2AE, 0x7CEA, 0xF2AF, 0x7E76, 0xF2B0, 0x7E75, 0xF2B1, 0x7E78, 0xF2B2, 0x7E70,
- 0xF2B3, 0x7E77, 0xF2B4, 0x7E6F, 0xF2B5, 0x7E7A, 0xF2B6, 0x7E72, 0xF2B7, 0x7E74, 0xF2B8, 0x7E68, 0xF2B9, 0x7F4B, 0xF2BA, 0x7F4A,
- 0xF2BB, 0x7F83, 0xF2BC, 0x7F86, 0xF2BD, 0x7FB7, 0xF2BE, 0x7FFD, 0xF2BF, 0x7FFE, 0xF2C0, 0x8078, 0xF2C1, 0x81D7, 0xF2C2, 0x81D5,
- 0xF2C3, 0x8264, 0xF2C4, 0x8261, 0xF2C5, 0x8263, 0xF2C6, 0x85EB, 0xF2C7, 0x85F1, 0xF2C8, 0x85ED, 0xF2C9, 0x85D9, 0xF2CA, 0x85E1,
- 0xF2CB, 0x85E8, 0xF2CC, 0x85DA, 0xF2CD, 0x85D7, 0xF2CE, 0x85EC, 0xF2CF, 0x85F2, 0xF2D0, 0x85F8, 0xF2D1, 0x85D8, 0xF2D2, 0x85DF,
- 0xF2D3, 0x85E3, 0xF2D4, 0x85DC, 0xF2D5, 0x85D1, 0xF2D6, 0x85F0, 0xF2D7, 0x85E6, 0xF2D8, 0x85EF, 0xF2D9, 0x85DE, 0xF2DA, 0x85E2,
- 0xF2DB, 0x8800, 0xF2DC, 0x87FA, 0xF2DD, 0x8803, 0xF2DE, 0x87F6, 0xF2DF, 0x87F7, 0xF2E0, 0x8809, 0xF2E1, 0x880C, 0xF2E2, 0x880B,
- 0xF2E3, 0x8806, 0xF2E4, 0x87FC, 0xF2E5, 0x8808, 0xF2E6, 0x87FF, 0xF2E7, 0x880A, 0xF2E8, 0x8802, 0xF2E9, 0x8962, 0xF2EA, 0x895A,
- 0xF2EB, 0x895B, 0xF2EC, 0x8957, 0xF2ED, 0x8961, 0xF2EE, 0x895C, 0xF2EF, 0x8958, 0xF2F0, 0x895D, 0xF2F1, 0x8959, 0xF2F2, 0x8988,
- 0xF2F3, 0x89B7, 0xF2F4, 0x89B6, 0xF2F5, 0x89F6, 0xF2F6, 0x8B50, 0xF2F7, 0x8B48, 0xF2F8, 0x8B4A, 0xF2F9, 0x8B40, 0xF2FA, 0x8B53,
- 0xF2FB, 0x8B56, 0xF2FC, 0x8B54, 0xF2FD, 0x8B4B, 0xF2FE, 0x8B55, 0xF340, 0x8B51, 0xF341, 0x8B42, 0xF342, 0x8B52, 0xF343, 0x8B57,
- 0xF344, 0x8C43, 0xF345, 0x8C77, 0xF346, 0x8C76, 0xF347, 0x8C9A, 0xF348, 0x8D06, 0xF349, 0x8D07, 0xF34A, 0x8D09, 0xF34B, 0x8DAC,
- 0xF34C, 0x8DAA, 0xF34D, 0x8DAD, 0xF34E, 0x8DAB, 0xF34F, 0x8E6D, 0xF350, 0x8E78, 0xF351, 0x8E73, 0xF352, 0x8E6A, 0xF353, 0x8E6F,
- 0xF354, 0x8E7B, 0xF355, 0x8EC2, 0xF356, 0x8F52, 0xF357, 0x8F51, 0xF358, 0x8F4F, 0xF359, 0x8F50, 0xF35A, 0x8F53, 0xF35B, 0x8FB4,
- 0xF35C, 0x9140, 0xF35D, 0x913F, 0xF35E, 0x91B0, 0xF35F, 0x91AD, 0xF360, 0x93DE, 0xF361, 0x93C7, 0xF362, 0x93CF, 0xF363, 0x93C2,
- 0xF364, 0x93DA, 0xF365, 0x93D0, 0xF366, 0x93F9, 0xF367, 0x93EC, 0xF368, 0x93CC, 0xF369, 0x93D9, 0xF36A, 0x93A9, 0xF36B, 0x93E6,
- 0xF36C, 0x93CA, 0xF36D, 0x93D4, 0xF36E, 0x93EE, 0xF36F, 0x93E3, 0xF370, 0x93D5, 0xF371, 0x93C4, 0xF372, 0x93CE, 0xF373, 0x93C0,
- 0xF374, 0x93D2, 0xF375, 0x93E7, 0xF376, 0x957D, 0xF377, 0x95DA, 0xF378, 0x95DB, 0xF379, 0x96E1, 0xF37A, 0x9729, 0xF37B, 0x972B,
- 0xF37C, 0x972C, 0xF37D, 0x9728, 0xF37E, 0x9726, 0xF3A1, 0x97B3, 0xF3A2, 0x97B7, 0xF3A3, 0x97B6, 0xF3A4, 0x97DD, 0xF3A5, 0x97DE,
- 0xF3A6, 0x97DF, 0xF3A7, 0x985C, 0xF3A8, 0x9859, 0xF3A9, 0x985D, 0xF3AA, 0x9857, 0xF3AB, 0x98BF, 0xF3AC, 0x98BD, 0xF3AD, 0x98BB,
- 0xF3AE, 0x98BE, 0xF3AF, 0x9948, 0xF3B0, 0x9947, 0xF3B1, 0x9943, 0xF3B2, 0x99A6, 0xF3B3, 0x99A7, 0xF3B4, 0x9A1A, 0xF3B5, 0x9A15,
- 0xF3B6, 0x9A25, 0xF3B7, 0x9A1D, 0xF3B8, 0x9A24, 0xF3B9, 0x9A1B, 0xF3BA, 0x9A22, 0xF3BB, 0x9A20, 0xF3BC, 0x9A27, 0xF3BD, 0x9A23,
- 0xF3BE, 0x9A1E, 0xF3BF, 0x9A1C, 0xF3C0, 0x9A14, 0xF3C1, 0x9AC2, 0xF3C2, 0x9B0B, 0xF3C3, 0x9B0A, 0xF3C4, 0x9B0E, 0xF3C5, 0x9B0C,
- 0xF3C6, 0x9B37, 0xF3C7, 0x9BEA, 0xF3C8, 0x9BEB, 0xF3C9, 0x9BE0, 0xF3CA, 0x9BDE, 0xF3CB, 0x9BE4, 0xF3CC, 0x9BE6, 0xF3CD, 0x9BE2,
- 0xF3CE, 0x9BF0, 0xF3CF, 0x9BD4, 0xF3D0, 0x9BD7, 0xF3D1, 0x9BEC, 0xF3D2, 0x9BDC, 0xF3D3, 0x9BD9, 0xF3D4, 0x9BE5, 0xF3D5, 0x9BD5,
- 0xF3D6, 0x9BE1, 0xF3D7, 0x9BDA, 0xF3D8, 0x9D77, 0xF3D9, 0x9D81, 0xF3DA, 0x9D8A, 0xF3DB, 0x9D84, 0xF3DC, 0x9D88, 0xF3DD, 0x9D71,
- 0xF3DE, 0x9D80, 0xF3DF, 0x9D78, 0xF3E0, 0x9D86, 0xF3E1, 0x9D8B, 0xF3E2, 0x9D8C, 0xF3E3, 0x9D7D, 0xF3E4, 0x9D6B, 0xF3E5, 0x9D74,
- 0xF3E6, 0x9D75, 0xF3E7, 0x9D70, 0xF3E8, 0x9D69, 0xF3E9, 0x9D85, 0xF3EA, 0x9D73, 0xF3EB, 0x9D7B, 0xF3EC, 0x9D82, 0xF3ED, 0x9D6F,
- 0xF3EE, 0x9D79, 0xF3EF, 0x9D7F, 0xF3F0, 0x9D87, 0xF3F1, 0x9D68, 0xF3F2, 0x9E94, 0xF3F3, 0x9E91, 0xF3F4, 0x9EC0, 0xF3F5, 0x9EFC,
- 0xF3F6, 0x9F2D, 0xF3F7, 0x9F40, 0xF3F8, 0x9F41, 0xF3F9, 0x9F4D, 0xF3FA, 0x9F56, 0xF3FB, 0x9F57, 0xF3FC, 0x9F58, 0xF3FD, 0x5337,
- 0xF3FE, 0x56B2, 0xF440, 0x56B5, 0xF441, 0x56B3, 0xF442, 0x58E3, 0xF443, 0x5B45, 0xF444, 0x5DC6, 0xF445, 0x5DC7, 0xF446, 0x5EEE,
- 0xF447, 0x5EEF, 0xF448, 0x5FC0, 0xF449, 0x5FC1, 0xF44A, 0x61F9, 0xF44B, 0x6517, 0xF44C, 0x6516, 0xF44D, 0x6515, 0xF44E, 0x6513,
- 0xF44F, 0x65DF, 0xF450, 0x66E8, 0xF451, 0x66E3, 0xF452, 0x66E4, 0xF453, 0x6AF3, 0xF454, 0x6AF0, 0xF455, 0x6AEA, 0xF456, 0x6AE8,
- 0xF457, 0x6AF9, 0xF458, 0x6AF1, 0xF459, 0x6AEE, 0xF45A, 0x6AEF, 0xF45B, 0x703C, 0xF45C, 0x7035, 0xF45D, 0x702F, 0xF45E, 0x7037,
- 0xF45F, 0x7034, 0xF460, 0x7031, 0xF461, 0x7042, 0xF462, 0x7038, 0xF463, 0x703F, 0xF464, 0x703A, 0xF465, 0x7039, 0xF466, 0x7040,
- 0xF467, 0x703B, 0xF468, 0x7033, 0xF469, 0x7041, 0xF46A, 0x7213, 0xF46B, 0x7214, 0xF46C, 0x72A8, 0xF46D, 0x737D, 0xF46E, 0x737C,
- 0xF46F, 0x74BA, 0xF470, 0x76AB, 0xF471, 0x76AA, 0xF472, 0x76BE, 0xF473, 0x76ED, 0xF474, 0x77CC, 0xF475, 0x77CE, 0xF476, 0x77CF,
- 0xF477, 0x77CD, 0xF478, 0x77F2, 0xF479, 0x7925, 0xF47A, 0x7923, 0xF47B, 0x7927, 0xF47C, 0x7928, 0xF47D, 0x7924, 0xF47E, 0x7929,
- 0xF4A1, 0x79B2, 0xF4A2, 0x7A6E, 0xF4A3, 0x7A6C, 0xF4A4, 0x7A6D, 0xF4A5, 0x7AF7, 0xF4A6, 0x7C49, 0xF4A7, 0x7C48, 0xF4A8, 0x7C4A,
- 0xF4A9, 0x7C47, 0xF4AA, 0x7C45, 0xF4AB, 0x7CEE, 0xF4AC, 0x7E7B, 0xF4AD, 0x7E7E, 0xF4AE, 0x7E81, 0xF4AF, 0x7E80, 0xF4B0, 0x7FBA,
- 0xF4B1, 0x7FFF, 0xF4B2, 0x8079, 0xF4B3, 0x81DB, 0xF4B4, 0x81D9, 0xF4B5, 0x820B, 0xF4B6, 0x8268, 0xF4B7, 0x8269, 0xF4B8, 0x8622,
- 0xF4B9, 0x85FF, 0xF4BA, 0x8601, 0xF4BB, 0x85FE, 0xF4BC, 0x861B, 0xF4BD, 0x8600, 0xF4BE, 0x85F6, 0xF4BF, 0x8604, 0xF4C0, 0x8609,
- 0xF4C1, 0x8605, 0xF4C2, 0x860C, 0xF4C3, 0x85FD, 0xF4C4, 0x8819, 0xF4C5, 0x8810, 0xF4C6, 0x8811, 0xF4C7, 0x8817, 0xF4C8, 0x8813,
- 0xF4C9, 0x8816, 0xF4CA, 0x8963, 0xF4CB, 0x8966, 0xF4CC, 0x89B9, 0xF4CD, 0x89F7, 0xF4CE, 0x8B60, 0xF4CF, 0x8B6A, 0xF4D0, 0x8B5D,
- 0xF4D1, 0x8B68, 0xF4D2, 0x8B63, 0xF4D3, 0x8B65, 0xF4D4, 0x8B67, 0xF4D5, 0x8B6D, 0xF4D6, 0x8DAE, 0xF4D7, 0x8E86, 0xF4D8, 0x8E88,
- 0xF4D9, 0x8E84, 0xF4DA, 0x8F59, 0xF4DB, 0x8F56, 0xF4DC, 0x8F57, 0xF4DD, 0x8F55, 0xF4DE, 0x8F58, 0xF4DF, 0x8F5A, 0xF4E0, 0x908D,
- 0xF4E1, 0x9143, 0xF4E2, 0x9141, 0xF4E3, 0x91B7, 0xF4E4, 0x91B5, 0xF4E5, 0x91B2, 0xF4E6, 0x91B3, 0xF4E7, 0x940B, 0xF4E8, 0x9413,
- 0xF4E9, 0x93FB, 0xF4EA, 0x9420, 0xF4EB, 0x940F, 0xF4EC, 0x9414, 0xF4ED, 0x93FE, 0xF4EE, 0x9415, 0xF4EF, 0x9410, 0xF4F0, 0x9428,
- 0xF4F1, 0x9419, 0xF4F2, 0x940D, 0xF4F3, 0x93F5, 0xF4F4, 0x9400, 0xF4F5, 0x93F7, 0xF4F6, 0x9407, 0xF4F7, 0x940E, 0xF4F8, 0x9416,
- 0xF4F9, 0x9412, 0xF4FA, 0x93FA, 0xF4FB, 0x9409, 0xF4FC, 0x93F8, 0xF4FD, 0x940A, 0xF4FE, 0x93FF, 0xF540, 0x93FC, 0xF541, 0x940C,
- 0xF542, 0x93F6, 0xF543, 0x9411, 0xF544, 0x9406, 0xF545, 0x95DE, 0xF546, 0x95E0, 0xF547, 0x95DF, 0xF548, 0x972E, 0xF549, 0x972F,
- 0xF54A, 0x97B9, 0xF54B, 0x97BB, 0xF54C, 0x97FD, 0xF54D, 0x97FE, 0xF54E, 0x9860, 0xF54F, 0x9862, 0xF550, 0x9863, 0xF551, 0x985F,
- 0xF552, 0x98C1, 0xF553, 0x98C2, 0xF554, 0x9950, 0xF555, 0x994E, 0xF556, 0x9959, 0xF557, 0x994C, 0xF558, 0x994B, 0xF559, 0x9953,
- 0xF55A, 0x9A32, 0xF55B, 0x9A34, 0xF55C, 0x9A31, 0xF55D, 0x9A2C, 0xF55E, 0x9A2A, 0xF55F, 0x9A36, 0xF560, 0x9A29, 0xF561, 0x9A2E,
- 0xF562, 0x9A38, 0xF563, 0x9A2D, 0xF564, 0x9AC7, 0xF565, 0x9ACA, 0xF566, 0x9AC6, 0xF567, 0x9B10, 0xF568, 0x9B12, 0xF569, 0x9B11,
- 0xF56A, 0x9C0B, 0xF56B, 0x9C08, 0xF56C, 0x9BF7, 0xF56D, 0x9C05, 0xF56E, 0x9C12, 0xF56F, 0x9BF8, 0xF570, 0x9C40, 0xF571, 0x9C07,
- 0xF572, 0x9C0E, 0xF573, 0x9C06, 0xF574, 0x9C17, 0xF575, 0x9C14, 0xF576, 0x9C09, 0xF577, 0x9D9F, 0xF578, 0x9D99, 0xF579, 0x9DA4,
- 0xF57A, 0x9D9D, 0xF57B, 0x9D92, 0xF57C, 0x9D98, 0xF57D, 0x9D90, 0xF57E, 0x9D9B, 0xF5A1, 0x9DA0, 0xF5A2, 0x9D94, 0xF5A3, 0x9D9C,
- 0xF5A4, 0x9DAA, 0xF5A5, 0x9D97, 0xF5A6, 0x9DA1, 0xF5A7, 0x9D9A, 0xF5A8, 0x9DA2, 0xF5A9, 0x9DA8, 0xF5AA, 0x9D9E, 0xF5AB, 0x9DA3,
- 0xF5AC, 0x9DBF, 0xF5AD, 0x9DA9, 0xF5AE, 0x9D96, 0xF5AF, 0x9DA6, 0xF5B0, 0x9DA7, 0xF5B1, 0x9E99, 0xF5B2, 0x9E9B, 0xF5B3, 0x9E9A,
- 0xF5B4, 0x9EE5, 0xF5B5, 0x9EE4, 0xF5B6, 0x9EE7, 0xF5B7, 0x9EE6, 0xF5B8, 0x9F30, 0xF5B9, 0x9F2E, 0xF5BA, 0x9F5B, 0xF5BB, 0x9F60,
- 0xF5BC, 0x9F5E, 0xF5BD, 0x9F5D, 0xF5BE, 0x9F59, 0xF5BF, 0x9F91, 0xF5C0, 0x513A, 0xF5C1, 0x5139, 0xF5C2, 0x5298, 0xF5C3, 0x5297,
- 0xF5C4, 0x56C3, 0xF5C5, 0x56BD, 0xF5C6, 0x56BE, 0xF5C7, 0x5B48, 0xF5C8, 0x5B47, 0xF5C9, 0x5DCB, 0xF5CA, 0x5DCF, 0xF5CB, 0x5EF1,
- 0xF5CC, 0x61FD, 0xF5CD, 0x651B, 0xF5CE, 0x6B02, 0xF5CF, 0x6AFC, 0xF5D0, 0x6B03, 0xF5D1, 0x6AF8, 0xF5D2, 0x6B00, 0xF5D3, 0x7043,
- 0xF5D4, 0x7044, 0xF5D5, 0x704A, 0xF5D6, 0x7048, 0xF5D7, 0x7049, 0xF5D8, 0x7045, 0xF5D9, 0x7046, 0xF5DA, 0x721D, 0xF5DB, 0x721A,
- 0xF5DC, 0x7219, 0xF5DD, 0x737E, 0xF5DE, 0x7517, 0xF5DF, 0x766A, 0xF5E0, 0x77D0, 0xF5E1, 0x792D, 0xF5E2, 0x7931, 0xF5E3, 0x792F,
- 0xF5E4, 0x7C54, 0xF5E5, 0x7C53, 0xF5E6, 0x7CF2, 0xF5E7, 0x7E8A, 0xF5E8, 0x7E87, 0xF5E9, 0x7E88, 0xF5EA, 0x7E8B, 0xF5EB, 0x7E86,
- 0xF5EC, 0x7E8D, 0xF5ED, 0x7F4D, 0xF5EE, 0x7FBB, 0xF5EF, 0x8030, 0xF5F0, 0x81DD, 0xF5F1, 0x8618, 0xF5F2, 0x862A, 0xF5F3, 0x8626,
- 0xF5F4, 0x861F, 0xF5F5, 0x8623, 0xF5F6, 0x861C, 0xF5F7, 0x8619, 0xF5F8, 0x8627, 0xF5F9, 0x862E, 0xF5FA, 0x8621, 0xF5FB, 0x8620,
- 0xF5FC, 0x8629, 0xF5FD, 0x861E, 0xF5FE, 0x8625, 0xF640, 0x8829, 0xF641, 0x881D, 0xF642, 0x881B, 0xF643, 0x8820, 0xF644, 0x8824,
- 0xF645, 0x881C, 0xF646, 0x882B, 0xF647, 0x884A, 0xF648, 0x896D, 0xF649, 0x8969, 0xF64A, 0x896E, 0xF64B, 0x896B, 0xF64C, 0x89FA,
- 0xF64D, 0x8B79, 0xF64E, 0x8B78, 0xF64F, 0x8B45, 0xF650, 0x8B7A, 0xF651, 0x8B7B, 0xF652, 0x8D10, 0xF653, 0x8D14, 0xF654, 0x8DAF,
- 0xF655, 0x8E8E, 0xF656, 0x8E8C, 0xF657, 0x8F5E, 0xF658, 0x8F5B, 0xF659, 0x8F5D, 0xF65A, 0x9146, 0xF65B, 0x9144, 0xF65C, 0x9145,
- 0xF65D, 0x91B9, 0xF65E, 0x943F, 0xF65F, 0x943B, 0xF660, 0x9436, 0xF661, 0x9429, 0xF662, 0x943D, 0xF663, 0x943C, 0xF664, 0x9430,
- 0xF665, 0x9439, 0xF666, 0x942A, 0xF667, 0x9437, 0xF668, 0x942C, 0xF669, 0x9440, 0xF66A, 0x9431, 0xF66B, 0x95E5, 0xF66C, 0x95E4,
- 0xF66D, 0x95E3, 0xF66E, 0x9735, 0xF66F, 0x973A, 0xF670, 0x97BF, 0xF671, 0x97E1, 0xF672, 0x9864, 0xF673, 0x98C9, 0xF674, 0x98C6,
- 0xF675, 0x98C0, 0xF676, 0x9958, 0xF677, 0x9956, 0xF678, 0x9A39, 0xF679, 0x9A3D, 0xF67A, 0x9A46, 0xF67B, 0x9A44, 0xF67C, 0x9A42,
- 0xF67D, 0x9A41, 0xF67E, 0x9A3A, 0xF6A1, 0x9A3F, 0xF6A2, 0x9ACD, 0xF6A3, 0x9B15, 0xF6A4, 0x9B17, 0xF6A5, 0x9B18, 0xF6A6, 0x9B16,
- 0xF6A7, 0x9B3A, 0xF6A8, 0x9B52, 0xF6A9, 0x9C2B, 0xF6AA, 0x9C1D, 0xF6AB, 0x9C1C, 0xF6AC, 0x9C2C, 0xF6AD, 0x9C23, 0xF6AE, 0x9C28,
- 0xF6AF, 0x9C29, 0xF6B0, 0x9C24, 0xF6B1, 0x9C21, 0xF6B2, 0x9DB7, 0xF6B3, 0x9DB6, 0xF6B4, 0x9DBC, 0xF6B5, 0x9DC1, 0xF6B6, 0x9DC7,
- 0xF6B7, 0x9DCA, 0xF6B8, 0x9DCF, 0xF6B9, 0x9DBE, 0xF6BA, 0x9DC5, 0xF6BB, 0x9DC3, 0xF6BC, 0x9DBB, 0xF6BD, 0x9DB5, 0xF6BE, 0x9DCE,
- 0xF6BF, 0x9DB9, 0xF6C0, 0x9DBA, 0xF6C1, 0x9DAC, 0xF6C2, 0x9DC8, 0xF6C3, 0x9DB1, 0xF6C4, 0x9DAD, 0xF6C5, 0x9DCC, 0xF6C6, 0x9DB3,
- 0xF6C7, 0x9DCD, 0xF6C8, 0x9DB2, 0xF6C9, 0x9E7A, 0xF6CA, 0x9E9C, 0xF6CB, 0x9EEB, 0xF6CC, 0x9EEE, 0xF6CD, 0x9EED, 0xF6CE, 0x9F1B,
- 0xF6CF, 0x9F18, 0xF6D0, 0x9F1A, 0xF6D1, 0x9F31, 0xF6D2, 0x9F4E, 0xF6D3, 0x9F65, 0xF6D4, 0x9F64, 0xF6D5, 0x9F92, 0xF6D6, 0x4EB9,
- 0xF6D7, 0x56C6, 0xF6D8, 0x56C5, 0xF6D9, 0x56CB, 0xF6DA, 0x5971, 0xF6DB, 0x5B4B, 0xF6DC, 0x5B4C, 0xF6DD, 0x5DD5, 0xF6DE, 0x5DD1,
- 0xF6DF, 0x5EF2, 0xF6E0, 0x6521, 0xF6E1, 0x6520, 0xF6E2, 0x6526, 0xF6E3, 0x6522, 0xF6E4, 0x6B0B, 0xF6E5, 0x6B08, 0xF6E6, 0x6B09,
- 0xF6E7, 0x6C0D, 0xF6E8, 0x7055, 0xF6E9, 0x7056, 0xF6EA, 0x7057, 0xF6EB, 0x7052, 0xF6EC, 0x721E, 0xF6ED, 0x721F, 0xF6EE, 0x72A9,
- 0xF6EF, 0x737F, 0xF6F0, 0x74D8, 0xF6F1, 0x74D5, 0xF6F2, 0x74D9, 0xF6F3, 0x74D7, 0xF6F4, 0x766D, 0xF6F5, 0x76AD, 0xF6F6, 0x7935,
- 0xF6F7, 0x79B4, 0xF6F8, 0x7A70, 0xF6F9, 0x7A71, 0xF6FA, 0x7C57, 0xF6FB, 0x7C5C, 0xF6FC, 0x7C59, 0xF6FD, 0x7C5B, 0xF6FE, 0x7C5A,
- 0xF740, 0x7CF4, 0xF741, 0x7CF1, 0xF742, 0x7E91, 0xF743, 0x7F4F, 0xF744, 0x7F87, 0xF745, 0x81DE, 0xF746, 0x826B, 0xF747, 0x8634,
- 0xF748, 0x8635, 0xF749, 0x8633, 0xF74A, 0x862C, 0xF74B, 0x8632, 0xF74C, 0x8636, 0xF74D, 0x882C, 0xF74E, 0x8828, 0xF74F, 0x8826,
- 0xF750, 0x882A, 0xF751, 0x8825, 0xF752, 0x8971, 0xF753, 0x89BF, 0xF754, 0x89BE, 0xF755, 0x89FB, 0xF756, 0x8B7E, 0xF757, 0x8B84,
- 0xF758, 0x8B82, 0xF759, 0x8B86, 0xF75A, 0x8B85, 0xF75B, 0x8B7F, 0xF75C, 0x8D15, 0xF75D, 0x8E95, 0xF75E, 0x8E94, 0xF75F, 0x8E9A,
- 0xF760, 0x8E92, 0xF761, 0x8E90, 0xF762, 0x8E96, 0xF763, 0x8E97, 0xF764, 0x8F60, 0xF765, 0x8F62, 0xF766, 0x9147, 0xF767, 0x944C,
- 0xF768, 0x9450, 0xF769, 0x944A, 0xF76A, 0x944B, 0xF76B, 0x944F, 0xF76C, 0x9447, 0xF76D, 0x9445, 0xF76E, 0x9448, 0xF76F, 0x9449,
- 0xF770, 0x9446, 0xF771, 0x973F, 0xF772, 0x97E3, 0xF773, 0x986A, 0xF774, 0x9869, 0xF775, 0x98CB, 0xF776, 0x9954, 0xF777, 0x995B,
- 0xF778, 0x9A4E, 0xF779, 0x9A53, 0xF77A, 0x9A54, 0xF77B, 0x9A4C, 0xF77C, 0x9A4F, 0xF77D, 0x9A48, 0xF77E, 0x9A4A, 0xF7A1, 0x9A49,
- 0xF7A2, 0x9A52, 0xF7A3, 0x9A50, 0xF7A4, 0x9AD0, 0xF7A5, 0x9B19, 0xF7A6, 0x9B2B, 0xF7A7, 0x9B3B, 0xF7A8, 0x9B56, 0xF7A9, 0x9B55,
- 0xF7AA, 0x9C46, 0xF7AB, 0x9C48, 0xF7AC, 0x9C3F, 0xF7AD, 0x9C44, 0xF7AE, 0x9C39, 0xF7AF, 0x9C33, 0xF7B0, 0x9C41, 0xF7B1, 0x9C3C,
- 0xF7B2, 0x9C37, 0xF7B3, 0x9C34, 0xF7B4, 0x9C32, 0xF7B5, 0x9C3D, 0xF7B6, 0x9C36, 0xF7B7, 0x9DDB, 0xF7B8, 0x9DD2, 0xF7B9, 0x9DDE,
- 0xF7BA, 0x9DDA, 0xF7BB, 0x9DCB, 0xF7BC, 0x9DD0, 0xF7BD, 0x9DDC, 0xF7BE, 0x9DD1, 0xF7BF, 0x9DDF, 0xF7C0, 0x9DE9, 0xF7C1, 0x9DD9,
- 0xF7C2, 0x9DD8, 0xF7C3, 0x9DD6, 0xF7C4, 0x9DF5, 0xF7C5, 0x9DD5, 0xF7C6, 0x9DDD, 0xF7C7, 0x9EB6, 0xF7C8, 0x9EF0, 0xF7C9, 0x9F35,
- 0xF7CA, 0x9F33, 0xF7CB, 0x9F32, 0xF7CC, 0x9F42, 0xF7CD, 0x9F6B, 0xF7CE, 0x9F95, 0xF7CF, 0x9FA2, 0xF7D0, 0x513D, 0xF7D1, 0x5299,
- 0xF7D2, 0x58E8, 0xF7D3, 0x58E7, 0xF7D4, 0x5972, 0xF7D5, 0x5B4D, 0xF7D6, 0x5DD8, 0xF7D7, 0x882F, 0xF7D8, 0x5F4F, 0xF7D9, 0x6201,
- 0xF7DA, 0x6203, 0xF7DB, 0x6204, 0xF7DC, 0x6529, 0xF7DD, 0x6525, 0xF7DE, 0x6596, 0xF7DF, 0x66EB, 0xF7E0, 0x6B11, 0xF7E1, 0x6B12,
- 0xF7E2, 0x6B0F, 0xF7E3, 0x6BCA, 0xF7E4, 0x705B, 0xF7E5, 0x705A, 0xF7E6, 0x7222, 0xF7E7, 0x7382, 0xF7E8, 0x7381, 0xF7E9, 0x7383,
- 0xF7EA, 0x7670, 0xF7EB, 0x77D4, 0xF7EC, 0x7C67, 0xF7ED, 0x7C66, 0xF7EE, 0x7E95, 0xF7EF, 0x826C, 0xF7F0, 0x863A, 0xF7F1, 0x8640,
- 0xF7F2, 0x8639, 0xF7F3, 0x863C, 0xF7F4, 0x8631, 0xF7F5, 0x863B, 0xF7F6, 0x863E, 0xF7F7, 0x8830, 0xF7F8, 0x8832, 0xF7F9, 0x882E,
- 0xF7FA, 0x8833, 0xF7FB, 0x8976, 0xF7FC, 0x8974, 0xF7FD, 0x8973, 0xF7FE, 0x89FE, 0xF840, 0x8B8C, 0xF841, 0x8B8E, 0xF842, 0x8B8B,
- 0xF843, 0x8B88, 0xF844, 0x8C45, 0xF845, 0x8D19, 0xF846, 0x8E98, 0xF847, 0x8F64, 0xF848, 0x8F63, 0xF849, 0x91BC, 0xF84A, 0x9462,
- 0xF84B, 0x9455, 0xF84C, 0x945D, 0xF84D, 0x9457, 0xF84E, 0x945E, 0xF84F, 0x97C4, 0xF850, 0x97C5, 0xF851, 0x9800, 0xF852, 0x9A56,
- 0xF853, 0x9A59, 0xF854, 0x9B1E, 0xF855, 0x9B1F, 0xF856, 0x9B20, 0xF857, 0x9C52, 0xF858, 0x9C58, 0xF859, 0x9C50, 0xF85A, 0x9C4A,
- 0xF85B, 0x9C4D, 0xF85C, 0x9C4B, 0xF85D, 0x9C55, 0xF85E, 0x9C59, 0xF85F, 0x9C4C, 0xF860, 0x9C4E, 0xF861, 0x9DFB, 0xF862, 0x9DF7,
- 0xF863, 0x9DEF, 0xF864, 0x9DE3, 0xF865, 0x9DEB, 0xF866, 0x9DF8, 0xF867, 0x9DE4, 0xF868, 0x9DF6, 0xF869, 0x9DE1, 0xF86A, 0x9DEE,
- 0xF86B, 0x9DE6, 0xF86C, 0x9DF2, 0xF86D, 0x9DF0, 0xF86E, 0x9DE2, 0xF86F, 0x9DEC, 0xF870, 0x9DF4, 0xF871, 0x9DF3, 0xF872, 0x9DE8,
- 0xF873, 0x9DED, 0xF874, 0x9EC2, 0xF875, 0x9ED0, 0xF876, 0x9EF2, 0xF877, 0x9EF3, 0xF878, 0x9F06, 0xF879, 0x9F1C, 0xF87A, 0x9F38,
- 0xF87B, 0x9F37, 0xF87C, 0x9F36, 0xF87D, 0x9F43, 0xF87E, 0x9F4F, 0xF8A1, 0x9F71, 0xF8A2, 0x9F70, 0xF8A3, 0x9F6E, 0xF8A4, 0x9F6F,
- 0xF8A5, 0x56D3, 0xF8A6, 0x56CD, 0xF8A7, 0x5B4E, 0xF8A8, 0x5C6D, 0xF8A9, 0x652D, 0xF8AA, 0x66ED, 0xF8AB, 0x66EE, 0xF8AC, 0x6B13,
- 0xF8AD, 0x705F, 0xF8AE, 0x7061, 0xF8AF, 0x705D, 0xF8B0, 0x7060, 0xF8B1, 0x7223, 0xF8B2, 0x74DB, 0xF8B3, 0x74E5, 0xF8B4, 0x77D5,
- 0xF8B5, 0x7938, 0xF8B6, 0x79B7, 0xF8B7, 0x79B6, 0xF8B8, 0x7C6A, 0xF8B9, 0x7E97, 0xF8BA, 0x7F89, 0xF8BB, 0x826D, 0xF8BC, 0x8643,
- 0xF8BD, 0x8838, 0xF8BE, 0x8837, 0xF8BF, 0x8835, 0xF8C0, 0x884B, 0xF8C1, 0x8B94, 0xF8C2, 0x8B95, 0xF8C3, 0x8E9E, 0xF8C4, 0x8E9F,
- 0xF8C5, 0x8EA0, 0xF8C6, 0x8E9D, 0xF8C7, 0x91BE, 0xF8C8, 0x91BD, 0xF8C9, 0x91C2, 0xF8CA, 0x946B, 0xF8CB, 0x9468, 0xF8CC, 0x9469,
- 0xF8CD, 0x96E5, 0xF8CE, 0x9746, 0xF8CF, 0x9743, 0xF8D0, 0x9747, 0xF8D1, 0x97C7, 0xF8D2, 0x97E5, 0xF8D3, 0x9A5E, 0xF8D4, 0x9AD5,
- 0xF8D5, 0x9B59, 0xF8D6, 0x9C63, 0xF8D7, 0x9C67, 0xF8D8, 0x9C66, 0xF8D9, 0x9C62, 0xF8DA, 0x9C5E, 0xF8DB, 0x9C60, 0xF8DC, 0x9E02,
- 0xF8DD, 0x9DFE, 0xF8DE, 0x9E07, 0xF8DF, 0x9E03, 0xF8E0, 0x9E06, 0xF8E1, 0x9E05, 0xF8E2, 0x9E00, 0xF8E3, 0x9E01, 0xF8E4, 0x9E09,
- 0xF8E5, 0x9DFF, 0xF8E6, 0x9DFD, 0xF8E7, 0x9E04, 0xF8E8, 0x9EA0, 0xF8E9, 0x9F1E, 0xF8EA, 0x9F46, 0xF8EB, 0x9F74, 0xF8EC, 0x9F75,
- 0xF8ED, 0x9F76, 0xF8EE, 0x56D4, 0xF8EF, 0x652E, 0xF8F0, 0x65B8, 0xF8F1, 0x6B18, 0xF8F2, 0x6B19, 0xF8F3, 0x6B17, 0xF8F4, 0x6B1A,
- 0xF8F5, 0x7062, 0xF8F6, 0x7226, 0xF8F7, 0x72AA, 0xF8F8, 0x77D8, 0xF8F9, 0x77D9, 0xF8FA, 0x7939, 0xF8FB, 0x7C69, 0xF8FC, 0x7C6B,
- 0xF8FD, 0x7CF6, 0xF8FE, 0x7E9A, 0xF940, 0x7E98, 0xF941, 0x7E9B, 0xF942, 0x7E99, 0xF943, 0x81E0, 0xF944, 0x81E1, 0xF945, 0x8646,
- 0xF946, 0x8647, 0xF947, 0x8648, 0xF948, 0x8979, 0xF949, 0x897A, 0xF94A, 0x897C, 0xF94B, 0x897B, 0xF94C, 0x89FF, 0xF94D, 0x8B98,
- 0xF94E, 0x8B99, 0xF94F, 0x8EA5, 0xF950, 0x8EA4, 0xF951, 0x8EA3, 0xF952, 0x946E, 0xF953, 0x946D, 0xF954, 0x946F, 0xF955, 0x9471,
- 0xF956, 0x9473, 0xF957, 0x9749, 0xF958, 0x9872, 0xF959, 0x995F, 0xF95A, 0x9C68, 0xF95B, 0x9C6E, 0xF95C, 0x9C6D, 0xF95D, 0x9E0B,
- 0xF95E, 0x9E0D, 0xF95F, 0x9E10, 0xF960, 0x9E0F, 0xF961, 0x9E12, 0xF962, 0x9E11, 0xF963, 0x9EA1, 0xF964, 0x9EF5, 0xF965, 0x9F09,
- 0xF966, 0x9F47, 0xF967, 0x9F78, 0xF968, 0x9F7B, 0xF969, 0x9F7A, 0xF96A, 0x9F79, 0xF96B, 0x571E, 0xF96C, 0x7066, 0xF96D, 0x7C6F,
- 0xF96E, 0x883C, 0xF96F, 0x8DB2, 0xF970, 0x8EA6, 0xF971, 0x91C3, 0xF972, 0x9474, 0xF973, 0x9478, 0xF974, 0x9476, 0xF975, 0x9475,
- 0xF976, 0x9A60, 0xF977, 0x9C74, 0xF978, 0x9C73, 0xF979, 0x9C71, 0xF97A, 0x9C75, 0xF97B, 0x9E14, 0xF97C, 0x9E13, 0xF97D, 0x9EF6,
- 0xF97E, 0x9F0A, 0xF9A1, 0x9FA4, 0xF9A2, 0x7068, 0xF9A3, 0x7065, 0xF9A4, 0x7CF7, 0xF9A5, 0x866A, 0xF9A6, 0x883E, 0xF9A7, 0x883D,
- 0xF9A8, 0x883F, 0xF9A9, 0x8B9E, 0xF9AA, 0x8C9C, 0xF9AB, 0x8EA9, 0xF9AC, 0x8EC9, 0xF9AD, 0x974B, 0xF9AE, 0x9873, 0xF9AF, 0x9874,
- 0xF9B0, 0x98CC, 0xF9B1, 0x9961, 0xF9B2, 0x99AB, 0xF9B3, 0x9A64, 0xF9B4, 0x9A66, 0xF9B5, 0x9A67, 0xF9B6, 0x9B24, 0xF9B7, 0x9E15,
- 0xF9B8, 0x9E17, 0xF9B9, 0x9F48, 0xF9BA, 0x6207, 0xF9BB, 0x6B1E, 0xF9BC, 0x7227, 0xF9BD, 0x864C, 0xF9BE, 0x8EA8, 0xF9BF, 0x9482,
- 0xF9C0, 0x9480, 0xF9C1, 0x9481, 0xF9C2, 0x9A69, 0xF9C3, 0x9A68, 0xF9C4, 0x9B2E, 0xF9C5, 0x9E19, 0xF9C6, 0x7229, 0xF9C7, 0x864B,
- 0xF9C8, 0x8B9F, 0xF9C9, 0x9483, 0xF9CA, 0x9C79, 0xF9CB, 0x9EB7, 0xF9CC, 0x7675, 0xF9CD, 0x9A6B, 0xF9CE, 0x9C7A, 0xF9CF, 0x9E1D,
- 0xF9D0, 0x7069, 0xF9D1, 0x706A, 0xF9D2, 0x9EA4, 0xF9D3, 0x9F7E, 0xF9D4, 0x9F49, 0xF9D5, 0x9F98, 0xF9D6, 0x7881, 0xF9D7, 0x92B9,
- 0xF9D8, 0x88CF, 0xF9D9, 0x58BB, 0xF9DA, 0x6052, 0xF9DB, 0x7CA7, 0xF9DC, 0x5AFA, 0xF9DD, 0x2554, 0xF9DE, 0x2566, 0xF9DF, 0x2557,
- 0xF9E0, 0x2560, 0xF9E1, 0x256C, 0xF9E2, 0x2563, 0xF9E3, 0x255A, 0xF9E4, 0x2569, 0xF9E5, 0x255D, 0xF9E6, 0x2552, 0xF9E7, 0x2564,
- 0xF9E8, 0x2555, 0xF9E9, 0x255E, 0xF9EA, 0x256A, 0xF9EB, 0x2561, 0xF9EC, 0x2558, 0xF9ED, 0x2567, 0xF9EE, 0x255B, 0xF9EF, 0x2553,
- 0xF9F0, 0x2565, 0xF9F1, 0x2556, 0xF9F2, 0x255F, 0xF9F3, 0x256B, 0xF9F4, 0x2562, 0xF9F5, 0x2559, 0xF9F6, 0x2568, 0xF9F7, 0x255C,
- 0xF9F8, 0x2551, 0xF9F9, 0x2550, 0xF9FA, 0x256D, 0xF9FB, 0x256E, 0xF9FC, 0x2570, 0xF9FD, 0x256F, 0xF9FE, 0x2593, 0, 0
-};
-#endif
-
-#if FF_CODE_PAGE == 437 || FF_CODE_PAGE == 0
-static const WCHAR uc437[] = { /* CP437(U.S.) to Unicode conversion table */
- 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5,
- 0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, 0x00FF, 0x00D6, 0x00DC, 0x00A2, 0x00A3, 0x00A5, 0x20A7, 0x0192,
- 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, 0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB,
- 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510,
- 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
- 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
- 0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229,
- 0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0
-};
-#endif
-#if FF_CODE_PAGE == 720 || FF_CODE_PAGE == 0
-static const WCHAR uc720[] = { /* CP720(Arabic) to Unicode conversion table */
- 0x0000, 0x0000, 0x00E9, 0x00E2, 0x0000, 0x00E0, 0x0000, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0651, 0x0652, 0x00F4, 0x00A4, 0x0640, 0x00FB, 0x00F9, 0x0621, 0x0622, 0x0623, 0x0624, 0x00A3, 0x0625, 0x0626, 0x0627,
- 0x0628, 0x0629, 0x062A, 0x062B, 0x062C, 0x062D, 0x062E, 0x062F, 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x00AB, 0x00BB,
- 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510,
- 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
- 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
- 0x0636, 0x0637, 0x0638, 0x0639, 0x063A, 0x0641, 0x00B5, 0x0642, 0x0643, 0x0644, 0x0645, 0x0646, 0x0647, 0x0648, 0x0649, 0x064A,
- 0x2261, 0x064B, 0x064C, 0x064D, 0x064E, 0x064F, 0x0650, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0
-};
-#endif
-#if FF_CODE_PAGE == 737 || FF_CODE_PAGE == 0
-static const WCHAR uc737[] = { /* CP737(Greek) to Unicode conversion table */
- 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F, 0x03A0,
- 0x03A1, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, 0x03A9, 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, 0x03B8,
- 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, 0x03C0, 0x03C1, 0x03C3, 0x03C2, 0x03C4, 0x03C5, 0x03C6, 0x03C7, 0x03C8,
- 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510,
- 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
- 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
- 0x03C9, 0x03AC, 0x03AD, 0x03AE, 0x03CA, 0x03AF, 0x03CC, 0x03CD, 0x03CB, 0x03CE, 0x0386, 0x0388, 0x0389, 0x038A, 0x038C, 0x038E,
- 0x038F, 0x00B1, 0x2265, 0x2264, 0x03AA, 0x03AB, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0
-};
-#endif
-#if FF_CODE_PAGE == 771 || FF_CODE_PAGE == 0
-static const WCHAR uc771[] = { /* CP771(KBL) to Unicode conversion table */
- 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F,
- 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F,
- 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F,
- 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x2558, 0x2510,
- 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
- 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x0104, 0x0105, 0x010C, 0x010D,
- 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F,
- 0x0118, 0x0119, 0x0116, 0x0117, 0x012E, 0x012F, 0x0160, 0x0161, 0x0172, 0x0173, 0x016A, 0x016B, 0x017D, 0x017E, 0x25A0, 0x00A0
-};
-#endif
-#if FF_CODE_PAGE == 775 || FF_CODE_PAGE == 0
-static const WCHAR uc775[] = { /* CP775(Baltic) to Unicode conversion table */
- 0x0106, 0x00FC, 0x00E9, 0x0101, 0x00E4, 0x0123, 0x00E5, 0x0107, 0x0142, 0x0113, 0x0156, 0x0157, 0x012B, 0x0179, 0x00C4, 0x00C5,
- 0x00C9, 0x00E6, 0x00C6, 0x014D, 0x00F6, 0x0122, 0x00A2, 0x015A, 0x015B, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x00D7, 0x00A4,
- 0x0100, 0x012A, 0x00F3, 0x017B, 0x017C, 0x017A, 0x201D, 0x00A6, 0x00A9, 0x00AE, 0x00AC, 0x00BD, 0x00BC, 0x0141, 0x00AB, 0x00BB,
- 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x0104, 0x010C, 0x0118, 0x0116, 0x2563, 0x2551, 0x2557, 0x255D, 0x012E, 0x0160, 0x2510,
- 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x0172, 0x016A, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x017D,
- 0x0105, 0x010D, 0x0119, 0x0117, 0x012F, 0x0161, 0x0173, 0x016B, 0x017E, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
- 0x00D3, 0x00DF, 0x014C, 0x0143, 0x00F5, 0x00D5, 0x00B5, 0x0144, 0x0136, 0x0137, 0x013B, 0x013C, 0x0146, 0x0112, 0x0145, 0x2019,
- 0x00AD, 0x00B1, 0x201C, 0x00BE, 0x00B6, 0x00A7, 0x00F7, 0x201E, 0x00B0, 0x2219, 0x00B7, 0x00B9, 0x00B3, 0x00B2, 0x25A0, 0x00A0
-};
-#endif
-#if FF_CODE_PAGE == 850 || FF_CODE_PAGE == 0
-static const WCHAR uc850[] = { /* CP850(Latin 1) to Unicode conversion table */
- 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5,
- 0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, 0x00FF, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x00D7, 0x0192,
- 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, 0x00BF, 0x00AE, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB,
- 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00C1, 0x00C2, 0x00C0, 0x00A9, 0x2563, 0x2551, 0x2557, 0x255D, 0x00A2, 0x00A5, 0x2510,
- 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x00E3, 0x00C3, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4,
- 0x00F0, 0x00D0, 0x00CA, 0x00CB, 0x00C8, 0x0131, 0x00CD, 0x00CE, 0x00CF, 0x2518, 0x250C, 0x2588, 0x2584, 0x00A6, 0x00CC, 0x2580,
- 0x00D3, 0x00DF, 0x00D4, 0x00D2, 0x00F5, 0x00D5, 0x00B5, 0x00FE, 0x00DE, 0x00DA, 0x00DB, 0x00D9, 0x00FD, 0x00DD, 0x00AF, 0x00B4,
- 0x00AD, 0x00B1, 0x2017, 0x00BE, 0x00B6, 0x00A7, 0x00F7, 0x00B8, 0x00B0, 0x00A8, 0x00B7, 0x00B9, 0x00B3, 0x00B2, 0x25A0, 0x00A0
-};
-#endif
-#if FF_CODE_PAGE == 852 || FF_CODE_PAGE == 0
-static const WCHAR uc852[] = { /* CP852(Latin 2) to Unicode conversion table */
- 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x016F, 0x0107, 0x00E7, 0x0142, 0x00EB, 0x0150, 0x0151, 0x00EE, 0x0179, 0x00C4, 0x0106,
- 0x00C9, 0x0139, 0x013A, 0x00F4, 0x00F6, 0x013D, 0x013E, 0x015A, 0x015B, 0x00D6, 0x00DC, 0x0164, 0x0165, 0x0141, 0x00D7, 0x010D,
- 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x0104, 0x0105, 0x017D, 0x017E, 0x0118, 0x0119, 0x00AC, 0x017A, 0x010C, 0x015F, 0x00AB, 0x00BB,
- 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00C1, 0x00C2, 0x011A, 0x015E, 0x2563, 0x2551, 0x2557, 0x255D, 0x017B, 0x017C, 0x2510,
- 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x0102, 0x0103, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4,
- 0x0111, 0x0110, 0x010E, 0x00CB, 0x010F, 0x0147, 0x00CD, 0x00CE, 0x011B, 0x2518, 0x250C, 0x2588, 0x2584, 0x0162, 0x016E, 0x2580,
- 0x00D3, 0x00DF, 0x00D4, 0x0143, 0x0144, 0x0148, 0x0160, 0x0161, 0x0154, 0x00DA, 0x0155, 0x0170, 0x00FD, 0x00DD, 0x0163, 0x00B4,
- 0x00AD, 0x02DD, 0x02DB, 0x02C7, 0x02D8, 0x00A7, 0x00F7, 0x00B8, 0x00B0, 0x00A8, 0x02D9, 0x0171, 0x0158, 0x0159, 0x25A0, 0x00A0
-};
-#endif
-#if FF_CODE_PAGE == 855 || FF_CODE_PAGE == 0
-static const WCHAR uc855[] = { /* CP855(Cyrillic) to Unicode conversion table */
- 0x0452, 0x0402, 0x0453, 0x0403, 0x0451, 0x0401, 0x0454, 0x0404, 0x0455, 0x0405, 0x0456, 0x0406, 0x0457, 0x0407, 0x0458, 0x0408,
- 0x0459, 0x0409, 0x045A, 0x040A, 0x045B, 0x040B, 0x045C, 0x040C, 0x045E, 0x040E, 0x045F, 0x040F, 0x044E, 0x042E, 0x044A, 0x042A,
- 0x0430, 0x0410, 0x0431, 0x0411, 0x0446, 0x0426, 0x0434, 0x0414, 0x0435, 0x0415, 0x0444, 0x0424, 0x0433, 0x0413, 0x00AB, 0x00BB,
- 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x0445, 0x0425, 0x0438, 0x0418, 0x2563, 0x2551, 0x2557, 0x255D, 0x0439, 0x0419, 0x2510,
- 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x043A, 0x041A, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4,
- 0x043B, 0x041B, 0x043C, 0x041C, 0x043D, 0x041D, 0x043E, 0x041E, 0x043F, 0x2518, 0x250C, 0x2588, 0x2584, 0x041F, 0x044F, 0x2580,
- 0x042F, 0x0440, 0x0420, 0x0441, 0x0421, 0x0442, 0x0422, 0x0443, 0x0423, 0x0436, 0x0416, 0x0432, 0x0412, 0x044C, 0x042C, 0x2116,
- 0x00AD, 0x044B, 0x042B, 0x0437, 0x0417, 0x0448, 0x0428, 0x044D, 0x042D, 0x0449, 0x0429, 0x0447, 0x0427, 0x00A7, 0x25A0, 0x00A0
-};
-#endif
-#if FF_CODE_PAGE == 857 || FF_CODE_PAGE == 0
-static const WCHAR uc857[] = { /* CP857(Turkish) to Unicode conversion table */
- 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x0131, 0x00C4, 0x00C5,
- 0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, 0x0130, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x015E, 0x015F,
- 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x011E, 0x011F, 0x00BF, 0x00AE, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB,
- 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00C1, 0x00C2, 0x00C0, 0x00A9, 0x2563, 0x2551, 0x2557, 0x255D, 0x00A2, 0x00A5, 0x2510,
- 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x00E3, 0x00C3, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4,
- 0x00BA, 0x00AA, 0x00CA, 0x00CB, 0x00C8, 0x0000, 0x00CD, 0x00CE, 0x00CF, 0x2518, 0x250C, 0x2588, 0x2584, 0x00A6, 0x00CC, 0x2580,
- 0x00D3, 0x00DF, 0x00D4, 0x00D2, 0x00F5, 0x00D5, 0x00B5, 0x0000, 0x00D7, 0x00DA, 0x00DB, 0x00D9, 0x00EC, 0x00FF, 0x00AF, 0x00B4,
- 0x00AD, 0x00B1, 0x0000, 0x00BE, 0x00B6, 0x00A7, 0x00F7, 0x00B8, 0x00B0, 0x00A8, 0x00B7, 0x00B9, 0x00B3, 0x00B2, 0x25A0, 0x00A0
-};
-#endif
-#if FF_CODE_PAGE == 860 || FF_CODE_PAGE == 0
-static const WCHAR uc860[] = { /* CP860(Portuguese) to Unicode conversion table */
- 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E3, 0x00E0, 0x00C1, 0x00E7, 0x00EA, 0x00CA, 0x00E8, 0x00CD, 0x00D4, 0x00EC, 0x00C3, 0x00C2,
- 0x00C9, 0x00C0, 0x00C8, 0x00F4, 0x00F5, 0x00F2, 0x00DA, 0x00F9, 0x00CC, 0x00D5, 0x00DC, 0x00A2, 0x00A3, 0x00D9, 0x20A7, 0x00D3,
- 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, 0x00BF, 0x00D2, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB,
- 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x2558, 0x2510,
- 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
- 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
- 0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229,
- 0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0
-};
-#endif
-#if FF_CODE_PAGE == 861 || FF_CODE_PAGE == 0
-static const WCHAR uc861[] = { /* CP861(Icelandic) to Unicode conversion table */
- 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E6, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00D0, 0x00F0, 0x00DE, 0x00C4, 0x00C5,
- 0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00FE, 0x00FB, 0x00DD, 0x00FD, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x20A7, 0x0192,
- 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00C1, 0x00CD, 0x00D3, 0x00DA, 0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB,
- 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510,
- 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
- 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
- 0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229,
- 0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0
-};
-#endif
-#if FF_CODE_PAGE == 862 || FF_CODE_PAGE == 0
-static const WCHAR uc862[] = { /* CP862(Hebrew) to Unicode conversion table */
- 0x05D0, 0x05D1, 0x05D2, 0x05D3, 0x05D4, 0x05D5, 0x05D6, 0x05D7, 0x05D8, 0x05D9, 0x05DA, 0x05DB, 0x05DC, 0x05DD, 0x05DE, 0x05DF,
- 0x05E0, 0x05E1, 0x05E2, 0x05E3, 0x05E4, 0x05E5, 0x05E6, 0x05E7, 0x05E8, 0x05E9, 0x05EA, 0x00A2, 0x00A3, 0x00A5, 0x20A7, 0x0192,
- 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, 0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB,
- 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510,
- 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
- 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
- 0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229,
- 0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0
-};
-#endif
-#if FF_CODE_PAGE == 863 || FF_CODE_PAGE == 0
-static const WCHAR uc863[] = { /* CP863(Canadian French) to Unicode conversion table */
- 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00C2, 0x00E0, 0x00B6, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x2017, 0x00C0,
- 0x00C9, 0x00C8, 0x00CA, 0x00F4, 0x00CB, 0x00CF, 0x00FB, 0x00F9, 0x00A4, 0x00D4, 0x00DC, 0x00A2, 0x00A3, 0x00D9, 0x00DB, 0x0192,
- 0x00A6, 0x00B4, 0x00F3, 0x00FA, 0x00A8, 0x00BB, 0x00B3, 0x00AF, 0x00CE, 0x3210, 0x00AC, 0x00BD, 0x00BC, 0x00BE, 0x00AB, 0x00BB,
- 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510,
- 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
- 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
- 0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2219,
- 0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0
-};
-#endif
-#if FF_CODE_PAGE == 864 || FF_CODE_PAGE == 0
-static const WCHAR uc864[] = { /* CP864(Arabic) to Unicode conversion table */
- 0x00B0, 0x00B7, 0x2219, 0x221A, 0x2592, 0x2500, 0x2502, 0x253C, 0x2524, 0x252C, 0x251C, 0x2534, 0x2510, 0x250C, 0x2514, 0x2518,
- 0x03B2, 0x221E, 0x03C6, 0x00B1, 0x00BD, 0x00BC, 0x2248, 0x00AB, 0x00BB, 0xFEF7, 0xFEF8, 0x0000, 0x0000, 0xFEFB, 0xFEFC, 0x0000,
- 0x00A0, 0x00AD, 0xFE82, 0x00A3, 0x00A4, 0xFE84, 0x0000, 0x20AC, 0xFE8E, 0xFE8F, 0xFE95, 0xFE99, 0x060C, 0xFE9D, 0xFEA1, 0xFEA5,
- 0x0660, 0x0661, 0x0662, 0x0663, 0x0664, 0x0665, 0x0666, 0x0667, 0x0668, 0x0669, 0xFED1, 0x061B, 0xFEB1, 0xFEB5, 0xFEB9, 0x061F,
- 0x00A2, 0xFE80, 0xFE81, 0xFE83, 0xFE85, 0xFECA, 0xFE8B, 0xFE8D, 0xFE91, 0xFE93, 0xFE97, 0xFE9B, 0xFE9F, 0xFEA3, 0xFEA7, 0xFEA9,
- 0xFEAB, 0xFEAD, 0xFEAF, 0xFEB3, 0xFEB7, 0xFEBB, 0xFEBF, 0xFEC1, 0xFEC5, 0xFECB, 0xFECF, 0x00A6, 0x00AC, 0x00F7, 0x00D7, 0xFEC9,
- 0x0640, 0xFED3, 0xFED7, 0xFEDB, 0xFEDF, 0xFEE3, 0xFEE7, 0xFEEB, 0xFEED, 0xFEEF, 0xFEF3, 0xFEBD, 0xFECC, 0xFECE, 0xFECD, 0xFEE1,
- 0xFE7D, 0x0651, 0xFEE5, 0xFEE9, 0xFEEC, 0xFEF0, 0xFEF2, 0xFED0, 0xFED5, 0xFEF5, 0xFEF6, 0xFEDD, 0xFED9, 0xFEF1, 0x25A0, 0x0000
-};
-#endif
-#if FF_CODE_PAGE == 865 || FF_CODE_PAGE == 0
-static const WCHAR uc865[] = { /* CP865(Nordic) to Unicode conversion table */
- 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5,
- 0x00C5, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, 0x00FF, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x20A7, 0x0192,
- 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, 0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00A4,
- 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x2558, 0x2510,
- 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
- 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
- 0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229,
- 0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0
-};
-#endif
-#if FF_CODE_PAGE == 866 || FF_CODE_PAGE == 0
-static const WCHAR uc866[] = { /* CP866(Russian) to Unicode conversion table */
- 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F,
- 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F,
- 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F,
- 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510,
- 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
- 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
- 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F,
- 0x0401, 0x0451, 0x0404, 0x0454, 0x0407, 0x0457, 0x040E, 0x045E, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x2116, 0x00A4, 0x25A0, 0x00A0
-};
-#endif
-#if FF_CODE_PAGE == 869 || FF_CODE_PAGE == 0
-static const WCHAR uc869[] = { /* CP869(Greek 2) to Unicode conversion table */
- 0x00B7, 0x00B7, 0x00B7, 0x00B7, 0x00B7, 0x00B7, 0x0386, 0x00B7, 0x00B7, 0x00AC, 0x00A6, 0x2018, 0x2019, 0x0388, 0x2015, 0x0389,
- 0x038A, 0x03AA, 0x038C, 0x00B7, 0x00B7, 0x038E, 0x03AB, 0x00A9, 0x038F, 0x00B2, 0x00B3, 0x03AC, 0x00A3, 0x03AD, 0x03AE, 0x03AF,
- 0x03CA, 0x0390, 0x03CC, 0x03CD, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x00BD, 0x0398, 0x0399, 0x00AB, 0x00BB,
- 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x039A, 0x039B, 0x039C, 0x039D, 0x2563, 0x2551, 0x2557, 0x255D, 0x039E, 0x039F, 0x2510,
- 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x0A30, 0x03A1, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x03A3,
- 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, 0x03A9, 0x03B1, 0x03B2, 0x03B3, 0x2518, 0x250C, 0x2588, 0x2584, 0x03B4, 0x03B5, 0x2580,
- 0x03B6, 0x03B7, 0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, 0x03C0, 0x03C1, 0x03C3, 0x03C2, 0x03C4, 0x0384,
- 0x00AD, 0x00B1, 0x03C5, 0x03C6, 0x03C7, 0x00A7, 0x03C8, 0x0385, 0x00B0, 0x00A8, 0x03C9, 0x03CB, 0x03B0, 0x03CE, 0x25A0, 0x00A0
-};
-#endif
-
-
-
-
-/*------------------------------------------------------------------------*/
-/* OEM <==> Unicode conversions for static code page configuration */
-/* SBCS fixed code page */
-/*------------------------------------------------------------------------*/
-
-#if FF_CODE_PAGE != 0 && FF_CODE_PAGE < 900
-WCHAR ff_uni2oem ( /* Returns OEM code character, zero on error */
- DWORD uni, /* UTF-16 encoded character to be converted */
- WORD cp /* Code page for the conversion */
-)
-{
- WCHAR c = 0;
- const WCHAR *p = CVTBL(uc, FF_CODE_PAGE);
-
-
- if (uni < 0x80) { /* ASCII? */
- c = (WCHAR)uni;
-
- } else { /* Non-ASCII */
- if (uni < 0x10000 && cp == FF_CODE_PAGE) { /* Is it in BMP and valid code page? */
- for (c = 0; c < 0x80 && uni != p[c]; c++) ;
- c = (c + 0x80) & 0xFF;
- }
- }
-
- return c;
-}
-
-WCHAR ff_oem2uni ( /* Returns Unicode character, zero on error */
- WCHAR oem, /* OEM code to be converted */
- WORD cp /* Code page for the conversion */
-)
-{
- WCHAR c = 0;
- const WCHAR *p = CVTBL(uc, FF_CODE_PAGE);
-
-
- if (oem < 0x80) { /* ASCII? */
- c = oem;
-
- } else { /* Extended char */
- if (cp == FF_CODE_PAGE) { /* Is it a valid code page? */
- if (oem < 0x100) c = p[oem - 0x80];
- }
- }
-
- return c;
-}
-
-#endif
-
-
-
-/*------------------------------------------------------------------------*/
-/* OEM <==> Unicode conversions for static code page configuration */
-/* DBCS fixed code page */
-/*------------------------------------------------------------------------*/
-
-#if FF_CODE_PAGE >= 900
-WCHAR ff_uni2oem ( /* Returns OEM code character, zero on error */
- DWORD uni, /* UTF-16 encoded character to be converted */
- WORD cp /* Code page for the conversion */
-)
-{
- const WCHAR *p;
- WCHAR c = 0, uc;
- UINT i = 0, n, li, hi;
-
-
- if (uni < 0x80) { /* ASCII? */
- c = (WCHAR)uni;
-
- } else { /* Non-ASCII */
- if (uni < 0x10000 && cp == FF_CODE_PAGE) { /* Is it in BMP and valid code page? */
- uc = (WCHAR)uni;
- p = CVTBL(uni2oem, FF_CODE_PAGE);
- hi = sizeof CVTBL(uni2oem, FF_CODE_PAGE) / 4 - 1;
- li = 0;
- for (n = 16; n; n--) {
- i = li + (hi - li) / 2;
- if (uc == p[i * 2]) break;
- if (uc > p[i * 2]) {
- li = i;
- } else {
- hi = i;
- }
- }
- if (n != 0) c = p[i * 2 + 1];
- }
- }
-
- return c;
-}
-
-
-WCHAR ff_oem2uni ( /* Returns Unicode character, zero on error */
- WCHAR oem, /* OEM code to be converted */
- WORD cp /* Code page for the conversion */
-)
-{
- const WCHAR *p;
- WCHAR c = 0;
- UINT i = 0, n, li, hi;
-
-
- if (oem < 0x80) { /* ASCII? */
- c = oem;
-
- } else { /* Extended char */
- if (cp == FF_CODE_PAGE) { /* Is it valid code page? */
- p = CVTBL(oem2uni, FF_CODE_PAGE);
- hi = sizeof CVTBL(oem2uni, FF_CODE_PAGE) / 4 - 1;
- li = 0;
- for (n = 16; n; n--) {
- i = li + (hi - li) / 2;
- if (oem == p[i * 2]) break;
- if (oem > p[i * 2]) {
- li = i;
- } else {
- hi = i;
- }
- }
- if (n != 0) c = p[i * 2 + 1];
- }
- }
-
- return c;
-}
-#endif
-
-
-
-/*------------------------------------------------------------------------*/
-/* OEM <==> Unicode conversions for dynamic code page configuration */
-/*------------------------------------------------------------------------*/
-
-#if FF_CODE_PAGE == 0
-
-static const WORD cp_code[] = { 437, 720, 737, 771, 775, 850, 852, 855, 857, 860, 861, 862, 863, 864, 865, 866, 869, 0};
-static const WCHAR* const cp_table[] = {uc437, uc720, uc737, uc771, uc775, uc850, uc852, uc855, uc857, uc860, uc861, uc862, uc863, uc864, uc865, uc866, uc869, 0};
-
-
-WCHAR ff_uni2oem ( /* Returns OEM code character, zero on error */
- DWORD uni, /* UTF-16 encoded character to be converted */
- WORD cp /* Code page for the conversion */
-)
-{
- const WCHAR *p;
- WCHAR c = 0, uc;
- UINT i, n, li, hi;
-
-
- if (uni < 0x80) { /* ASCII? */
- c = (WCHAR)uni;
-
- } else { /* Non-ASCII */
- if (uni < 0x10000) { /* Is it in BMP? */
- uc = (WCHAR)uni;
- p = 0;
- if (cp < 900) { /* SBCS */
- for (i = 0; cp_code[i] != 0 && cp_code[i] != cp; i++) ; /* Get conversion table */
- p = cp_table[i];
- if (p) { /* Is it valid code page ? */
- for (c = 0; c < 0x80 && uc != p[c]; c++) ; /* Find OEM code in the table */
- c = (c + 0x80) & 0xFF;
- }
- } else { /* DBCS */
- switch (cp) { /* Get conversion table */
- case 932 : p = uni2oem932; hi = sizeof uni2oem932 / 4 - 1; break;
- case 936 : p = uni2oem936; hi = sizeof uni2oem936 / 4 - 1; break;
- case 949 : p = uni2oem949; hi = sizeof uni2oem949 / 4 - 1; break;
- case 950 : p = uni2oem950; hi = sizeof uni2oem950 / 4 - 1; break;
- }
- if (p) { /* Is it valid code page? */
- li = 0;
- for (n = 16; n; n--) { /* Find OEM code */
- i = li + (hi - li) / 2;
- if (uc == p[i * 2]) break;
- if (uc > p[i * 2]) {
- li = i;
- } else {
- hi = i;
- }
- }
- if (n != 0) c = p[i * 2 + 1];
- }
- }
- }
- }
-
- return c;
-}
-
-
-WCHAR ff_oem2uni ( /* Returns Unicode character, zero on error */
- WCHAR oem, /* OEM code to be converted (DBC if >=0x100) */
- WORD cp /* Code page for the conversion */
-)
-{
- const WCHAR *p;
- WCHAR c = 0;
- UINT i, n, li, hi;
-
-
- if (oem < 0x80) { /* ASCII? */
- c = oem;
-
- } else { /* Extended char */
- p = 0;
- if (cp < 900) { /* SBCS */
- for (i = 0; cp_code[i] != 0 && cp_code[i] != cp; i++) ; /* Get table */
- p = cp_table[i];
- if (p) { /* Is it a valid CP ? */
- if (oem < 0x100) c = p[oem - 0x80];
- }
- } else { /* DBCS */
- switch (cp) {
- case 932 : p = oem2uni932; hi = sizeof oem2uni932 / 4 - 1; break;
- case 936 : p = oem2uni936; hi = sizeof oem2uni936 / 4 - 1; break;
- case 949 : p = oem2uni949; hi = sizeof oem2uni949 / 4 - 1; break;
- case 950 : p = oem2uni950; hi = sizeof oem2uni950 / 4 - 1; break;
- }
- if (p) {
- li = 0;
- for (n = 16; n; n--) {
- i = li + (hi - li) / 2;
- if (oem == p[i * 2]) break;
- if (oem > p[i * 2]) {
- li = i;
- } else {
- hi = i;
- }
- }
- if (n != 0) c = p[i * 2 + 1];
- }
- }
- }
-
- return c;
-}
-#endif
-
-
-
-/*------------------------------------------------------------------------*/
-/* Unicode up-case conversion */
-/*------------------------------------------------------------------------*/
-
-DWORD ff_wtoupper ( /* Returns up-converted code point */
- DWORD uni /* Unicode code point to be up-converted */
-)
-{
- const WORD *p;
- WORD uc, bc, nc, cmd;
- static const WORD cvt1[] = { /* Compressed up conversion table for U+0000 - U+0FFF */
- /* Basic Latin */
- 0x0061,0x031A,
- /* Latin-1 Supplement */
- 0x00E0,0x0317,
- 0x00F8,0x0307,
- 0x00FF,0x0001,0x0178,
- /* Latin Extended-A */
- 0x0100,0x0130,
- 0x0132,0x0106,
- 0x0139,0x0110,
- 0x014A,0x012E,
- 0x0179,0x0106,
- /* Latin Extended-B */
- 0x0180,0x004D,0x0243,0x0181,0x0182,0x0182,0x0184,0x0184,0x0186,0x0187,0x0187,0x0189,0x018A,0x018B,0x018B,0x018D,0x018E,0x018F,0x0190,0x0191,0x0191,0x0193,0x0194,0x01F6,0x0196,0x0197,0x0198,0x0198,0x023D,0x019B,0x019C,0x019D,0x0220,0x019F,0x01A0,0x01A0,0x01A2,0x01A2,0x01A4,0x01A4,0x01A6,0x01A7,0x01A7,0x01A9,0x01AA,0x01AB,0x01AC,0x01AC,0x01AE,0x01AF,0x01AF,0x01B1,0x01B2,0x01B3,0x01B3,0x01B5,0x01B5,0x01B7,0x01B8,0x01B8,0x01BA,0x01BB,0x01BC,0x01BC,0x01BE,0x01F7,0x01C0,0x01C1,0x01C2,0x01C3,0x01C4,0x01C5,0x01C4,0x01C7,0x01C8,0x01C7,0x01CA,0x01CB,0x01CA,
- 0x01CD,0x0110,
- 0x01DD,0x0001,0x018E,
- 0x01DE,0x0112,
- 0x01F3,0x0003,0x01F1,0x01F4,0x01F4,
- 0x01F8,0x0128,
- 0x0222,0x0112,
- 0x023A,0x0009,0x2C65,0x023B,0x023B,0x023D,0x2C66,0x023F,0x0240,0x0241,0x0241,
- 0x0246,0x010A,
- /* IPA Extensions */
- 0x0253,0x0040,0x0181,0x0186,0x0255,0x0189,0x018A,0x0258,0x018F,0x025A,0x0190,0x025C,0x025D,0x025E,0x025F,0x0193,0x0261,0x0262,0x0194,0x0264,0x0265,0x0266,0x0267,0x0197,0x0196,0x026A,0x2C62,0x026C,0x026D,0x026E,0x019C,0x0270,0x0271,0x019D,0x0273,0x0274,0x019F,0x0276,0x0277,0x0278,0x0279,0x027A,0x027B,0x027C,0x2C64,0x027E,0x027F,0x01A6,0x0281,0x0282,0x01A9,0x0284,0x0285,0x0286,0x0287,0x01AE,0x0244,0x01B1,0x01B2,0x0245,0x028D,0x028E,0x028F,0x0290,0x0291,0x01B7,
- /* Greek, Coptic */
- 0x037B,0x0003,0x03FD,0x03FE,0x03FF,
- 0x03AC,0x0004,0x0386,0x0388,0x0389,0x038A,
- 0x03B1,0x0311,
- 0x03C2,0x0002,0x03A3,0x03A3,
- 0x03C4,0x0308,
- 0x03CC,0x0003,0x038C,0x038E,0x038F,
- 0x03D8,0x0118,
- 0x03F2,0x000A,0x03F9,0x03F3,0x03F4,0x03F5,0x03F6,0x03F7,0x03F7,0x03F9,0x03FA,0x03FA,
- /* Cyrillic */
- 0x0430,0x0320,
- 0x0450,0x0710,
- 0x0460,0x0122,
- 0x048A,0x0136,
- 0x04C1,0x010E,
- 0x04CF,0x0001,0x04C0,
- 0x04D0,0x0144,
- /* Armenian */
- 0x0561,0x0426,
-
- 0x0000 /* EOT */
- };
- static const WORD cvt2[] = { /* Compressed up conversion table for U+1000 - U+FFFF */
- /* Phonetic Extensions */
- 0x1D7D,0x0001,0x2C63,
- /* Latin Extended Additional */
- 0x1E00,0x0196,
- 0x1EA0,0x015A,
- /* Greek Extended */
- 0x1F00,0x0608,
- 0x1F10,0x0606,
- 0x1F20,0x0608,
- 0x1F30,0x0608,
- 0x1F40,0x0606,
- 0x1F51,0x0007,0x1F59,0x1F52,0x1F5B,0x1F54,0x1F5D,0x1F56,0x1F5F,
- 0x1F60,0x0608,
- 0x1F70,0x000E,0x1FBA,0x1FBB,0x1FC8,0x1FC9,0x1FCA,0x1FCB,0x1FDA,0x1FDB,0x1FF8,0x1FF9,0x1FEA,0x1FEB,0x1FFA,0x1FFB,
- 0x1F80,0x0608,
- 0x1F90,0x0608,
- 0x1FA0,0x0608,
- 0x1FB0,0x0004,0x1FB8,0x1FB9,0x1FB2,0x1FBC,
- 0x1FCC,0x0001,0x1FC3,
- 0x1FD0,0x0602,
- 0x1FE0,0x0602,
- 0x1FE5,0x0001,0x1FEC,
- 0x1FF3,0x0001,0x1FFC,
- /* Letterlike Symbols */
- 0x214E,0x0001,0x2132,
- /* Number forms */
- 0x2170,0x0210,
- 0x2184,0x0001,0x2183,
- /* Enclosed Alphanumerics */
- 0x24D0,0x051A,
- 0x2C30,0x042F,
- /* Latin Extended-C */
- 0x2C60,0x0102,
- 0x2C67,0x0106, 0x2C75,0x0102,
- /* Coptic */
- 0x2C80,0x0164,
- /* Georgian Supplement */
- 0x2D00,0x0826,
- /* Full-width */
- 0xFF41,0x031A,
-
- 0x0000 /* EOT */
- };
-
-
- if (uni < 0x10000) { /* Is it in BMP? */
- uc = (WORD)uni;
- p = uc < 0x1000 ? cvt1 : cvt2;
- for (;;) {
- bc = *p++; /* Get the block base */
- if (bc == 0 || uc < bc) break; /* Not matched? */
- nc = *p++; cmd = nc >> 8; nc &= 0xFF; /* Get processing command and block size */
- if (uc < bc + nc) { /* In the block? */
- switch (cmd) {
- case 0: uc = p[uc - bc]; break; /* Table conversion */
- case 1: uc -= (uc - bc) & 1; break; /* Case pairs */
- case 2: uc -= 16; break; /* Shift -16 */
- case 3: uc -= 32; break; /* Shift -32 */
- case 4: uc -= 48; break; /* Shift -48 */
- case 5: uc -= 26; break; /* Shift -26 */
- case 6: uc += 8; break; /* Shift +8 */
- case 7: uc -= 80; break; /* Shift -80 */
- case 8: uc -= 0x1C60; break; /* Shift -0x1C60 */
- }
- break;
- }
- if (cmd == 0) p += nc; /* Skip table if needed */
- }
- uni = uc;
- }
-
- return uni;
-}
-
-
-#endif /* #if FF_USE_LFN */
diff --git a/third-party/fatfs-0.1.3/integer.h b/third-party/fatfs-0.1.3/integer.h
deleted file mode 100644
index 98250da733f8305e1fe5191c7a27981eb438b5d6..0000000000000000000000000000000000000000
--- a/third-party/fatfs-0.1.3/integer.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*-------------------------------------------*/
-/* Integer type definitions for FatFs module */
-/*-------------------------------------------*/
-
-#ifndef FF_INTEGER
-#define FF_INTEGER
-
-#ifdef _WIN32 /* FatFs development platform */
-
-#define _TCHAR_DEFINED
-
-#include
-typedef unsigned __int64 QWORD;
-
-#else /* Embedded platform */
-
-/* These types MUST be 16-bit or 32-bit */
-typedef int INT;
-typedef unsigned int UINT;
-
-/* This type MUST be 8-bit */
-typedef unsigned char BYTE;
-
-/* These types MUST be 16-bit */
-typedef short SHORT;
-typedef unsigned short WORD;
-typedef unsigned short WCHAR;
-
-/* These types MUST be 32-bit */
-typedef long LONG;
-typedef unsigned long DWORD;
-
-/* This type MUST be 64-bit (Remove this for ANSI C (C89) compatibility) */
-typedef unsigned long long QWORD;
-
-#endif
-
-#endif
diff --git a/third-party/fatfs-0.1.3/port/fsata_controller/diskio.h b/third-party/fatfs-0.1.3/port/fsata_controller/diskio.h
deleted file mode 100644
index 1fa4400ea048cf7a70118f5a98d6167cbcc34378..0000000000000000000000000000000000000000
--- a/third-party/fatfs-0.1.3/port/fsata_controller/diskio.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/*-----------------------------------------------------------------------/
-/ Low level disk interface modlue include file (C)ChaN, 2014 /
-/-----------------------------------------------------------------------*/
-
-#ifndef _DISKIO_DEFINED
-#define _DISKIO_DEFINED
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "integer.h"
-
-
-/* Status of Disk Functions */
-typedef BYTE DSTATUS;
-
-/* Results of Disk Functions */
-typedef enum {
- RES_OK = 0, /* 0: Successful */
- RES_ERROR, /* 1: R/W Error */
- RES_WRPRT, /* 2: Write Protected */
- RES_NOTRDY, /* 3: Not Ready */
- RES_PARERR /* 4: Invalid Parameter */
-} DRESULT;
-
-
-/*---------------------------------------*/
-/* Prototypes for disk control functions */
-
-
-DSTATUS disk_initialize (BYTE pdrv);
-DSTATUS disk_status (BYTE pdrv);
-DRESULT disk_read (BYTE pdrv, BYTE* buff, DWORD sector, UINT count);
-DRESULT disk_write (BYTE pdrv, const BYTE* buff, DWORD sector, UINT count);
-DRESULT disk_ioctl (BYTE pdrv, BYTE cmd, void* buff);
-
-
-/* Disk Status Bits (DSTATUS) */
-
-#define STA_NOINIT 0x01 /* Drive not initialized */
-#define STA_NODISK 0x02 /* No medium in the drive */
-#define STA_PROTECT 0x04 /* Write protected */
-
-
-/* Command code for disk_ioctrl fucntion */
-
-/* Generic command (Used by FatFs) */
-#define CTRL_SYNC 0 /* Complete pending write process (needed at FF_FS_READONLY == 0) */
-#define GET_SECTOR_COUNT 1 /* Get media size (needed at FF_USE_MKFS == 1) */
-#define GET_SECTOR_SIZE 2 /* Get sector size (needed at FF_MAX_SS != FF_MIN_SS) */
-#define GET_BLOCK_SIZE 3 /* Get erase block size (needed at FF_USE_MKFS == 1) */
-#define CTRL_TRIM 4 /* Inform device that the data on the block of sectors is no longer used (needed at FF_USE_TRIM == 1) */
-
-/* Generic command (Not used by FatFs) */
-#define CTRL_POWER 5 /* Get/Set power status */
-#define CTRL_LOCK 6 /* Lock/Unlock media removal */
-#define CTRL_EJECT 7 /* Eject media */
-#define CTRL_FORMAT 8 /* Create physical format on the media */
-
-/* MMC/SDC specific ioctl command */
-#define MMC_GET_TYPE 10 /* Get card type */
-#define MMC_GET_CSD 11 /* Get CSD */
-#define MMC_GET_CID 12 /* Get CID */
-#define MMC_GET_OCR 13 /* Get OCR */
-#define MMC_GET_SDSTAT 14 /* Get SD status */
-#define ISDIO_READ 55 /* Read data form SD iSDIO register */
-#define ISDIO_WRITE 56 /* Write data to SD iSDIO register */
-#define ISDIO_MRITE 57 /* Masked write data to SD iSDIO register */
-
-/* ATA/CF specific ioctl command */
-#define ATA_GET_REV 20 /* Get F/W revision */
-#define ATA_GET_MODEL 21 /* Get model name */
-#define ATA_GET_SN 22 /* Get serial number */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/third-party/fatfs-0.1.3/port/fsata_pcie/diskio.h b/third-party/fatfs-0.1.3/port/fsata_pcie/diskio.h
deleted file mode 100644
index 1fa4400ea048cf7a70118f5a98d6167cbcc34378..0000000000000000000000000000000000000000
--- a/third-party/fatfs-0.1.3/port/fsata_pcie/diskio.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/*-----------------------------------------------------------------------/
-/ Low level disk interface modlue include file (C)ChaN, 2014 /
-/-----------------------------------------------------------------------*/
-
-#ifndef _DISKIO_DEFINED
-#define _DISKIO_DEFINED
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "integer.h"
-
-
-/* Status of Disk Functions */
-typedef BYTE DSTATUS;
-
-/* Results of Disk Functions */
-typedef enum {
- RES_OK = 0, /* 0: Successful */
- RES_ERROR, /* 1: R/W Error */
- RES_WRPRT, /* 2: Write Protected */
- RES_NOTRDY, /* 3: Not Ready */
- RES_PARERR /* 4: Invalid Parameter */
-} DRESULT;
-
-
-/*---------------------------------------*/
-/* Prototypes for disk control functions */
-
-
-DSTATUS disk_initialize (BYTE pdrv);
-DSTATUS disk_status (BYTE pdrv);
-DRESULT disk_read (BYTE pdrv, BYTE* buff, DWORD sector, UINT count);
-DRESULT disk_write (BYTE pdrv, const BYTE* buff, DWORD sector, UINT count);
-DRESULT disk_ioctl (BYTE pdrv, BYTE cmd, void* buff);
-
-
-/* Disk Status Bits (DSTATUS) */
-
-#define STA_NOINIT 0x01 /* Drive not initialized */
-#define STA_NODISK 0x02 /* No medium in the drive */
-#define STA_PROTECT 0x04 /* Write protected */
-
-
-/* Command code for disk_ioctrl fucntion */
-
-/* Generic command (Used by FatFs) */
-#define CTRL_SYNC 0 /* Complete pending write process (needed at FF_FS_READONLY == 0) */
-#define GET_SECTOR_COUNT 1 /* Get media size (needed at FF_USE_MKFS == 1) */
-#define GET_SECTOR_SIZE 2 /* Get sector size (needed at FF_MAX_SS != FF_MIN_SS) */
-#define GET_BLOCK_SIZE 3 /* Get erase block size (needed at FF_USE_MKFS == 1) */
-#define CTRL_TRIM 4 /* Inform device that the data on the block of sectors is no longer used (needed at FF_USE_TRIM == 1) */
-
-/* Generic command (Not used by FatFs) */
-#define CTRL_POWER 5 /* Get/Set power status */
-#define CTRL_LOCK 6 /* Lock/Unlock media removal */
-#define CTRL_EJECT 7 /* Eject media */
-#define CTRL_FORMAT 8 /* Create physical format on the media */
-
-/* MMC/SDC specific ioctl command */
-#define MMC_GET_TYPE 10 /* Get card type */
-#define MMC_GET_CSD 11 /* Get CSD */
-#define MMC_GET_CID 12 /* Get CID */
-#define MMC_GET_OCR 13 /* Get OCR */
-#define MMC_GET_SDSTAT 14 /* Get SD status */
-#define ISDIO_READ 55 /* Read data form SD iSDIO register */
-#define ISDIO_WRITE 56 /* Write data to SD iSDIO register */
-#define ISDIO_MRITE 57 /* Masked write data to SD iSDIO register */
-
-/* ATA/CF specific ioctl command */
-#define ATA_GET_REV 20 /* Get F/W revision */
-#define ATA_GET_MODEL 21 /* Get model name */
-#define ATA_GET_SN 22 /* Get serial number */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/third-party/fatfs-0.1.4/Kconfig b/third-party/fatfs-0.1.4/Kconfig
new file mode 100644
index 0000000000000000000000000000000000000000..31cd44f789970ced241f581fecbe6b4e1ec7f78c
--- /dev/null
+++ b/third-party/fatfs-0.1.4/Kconfig
@@ -0,0 +1 @@
+source "$STANDALONE_DIR/third-party/fatfs-0.1.4/Kconfig"
\ No newline at end of file
diff --git a/third-party/fatfs-0.1.4/fatfs.mk b/third-party/fatfs-0.1.4/fatfs.mk
new file mode 100644
index 0000000000000000000000000000000000000000..ef810a6e27c4e8299124912ca9d9e2b42117ee63
--- /dev/null
+++ b/third-party/fatfs-0.1.4/fatfs.mk
@@ -0,0 +1,24 @@
+FATFS_OS_DIR := $(FREERTOS_SDK_ROOT)/third-party/fatfs-0.1.4
+FATFS_BM_DIR := $(STANDALONE_DIR)/third-party/fatfs-0.1.4
+
+include $(FATFS_BM_DIR)/fatfs.mk
+
+ifdef CONFIG_USE_FREERTOS
+ INC_DIR += $(FATFS_OS_DIR)/osal
+ SRC_DIR += $(FATFS_OS_DIR)/osal
+
+ ifdef CONFIG_FATFS_FSATA
+ INC_DIR += $(FATFS_OS_DIR)/port/fsata_controller
+ SRC_DIR += $(FATFS_OS_DIR)/port/fsata_controller
+ endif
+
+ ifdef CONFIG_FATFS_FSATA_PCIE
+ INC_DIR += $(FATFS_OS_DIR)/port/fsata_pcie
+ SRC_DIR += $(FATFS_OS_DIR)/port/fsata_pcie
+ endif
+
+ ifdef CONFIG_FATFS_USB
+ INC_DIR += $(FATFS_OS_DIR)/port/fusb
+ SRC_DIR += $(FATFS_OS_DIR)/port/fusb
+ endif
+endif #CONFIG_USE_FREERTOS
\ No newline at end of file
diff --git a/third-party/fatfs-0.1.3/ffsystem.c b/third-party/fatfs-0.1.4/osal/ffsystem.c
similarity index 55%
rename from third-party/fatfs-0.1.3/ffsystem.c
rename to third-party/fatfs-0.1.4/osal/ffsystem.c
index 2e70709fef70eb1250ee701255560f5520714844..06098af3e85c2ea9eed808e2f8c06131831cacfb 100644
--- a/third-party/fatfs-0.1.3/ffsystem.c
+++ b/third-party/fatfs-0.1.4/osal/ffsystem.c
@@ -1,37 +1,88 @@
/*------------------------------------------------------------------------*/
/* Sample Code of OS Dependent Functions for FatFs */
-/* (C)ChaN, 2017 */
+/* (C)ChaN, 2018 */
/*------------------------------------------------------------------------*/
+#include
#include
#include "ff.h"
+#include "fassert.h"
+#include "sdkconfig.h"
+#ifdef CONFIG_FATFS_ALLOC_PREFER_MEMP
+#include "fmemory_pool.h"
+#endif
+
+#ifdef CONFIG_FATFS_ALLOC_PREFER_MEMP
+#define FATFS_MEMP_TOTAL_SIZE (CONFIG_FATFS_MEMP_SIZE * SZ_1M)
+static FMemp ff_memp;
+static u8 memp_buf[FATFS_MEMP_TOTAL_SIZE] __attribute((aligned(64)));
+
+void ff_mempinit(void)
+{
+ /* create memory pool to support dynamic memory allocation */
+ FASSERT (FT_SUCCESS == FMempInit(&ff_memp, &memp_buf[0], &memp_buf[0] + FATFS_MEMP_TOTAL_SIZE));
+}
+#endif
-#if FF_USE_LFN == 3 /* Dynamic memory allocation */
/*------------------------------------------------------------------------*/
/* Allocate a memory block */
/*------------------------------------------------------------------------*/
-void* ff_memalloc ( /* Returns pointer to the allocated memory block (null on not enough core) */
+void* ff_memalloc ( /* Returns pointer to the allocated memory block (null if not enough core) */
UINT msize /* Number of bytes to allocate */
)
{
- return pvPortMalloc(msize); /* Allocate a new memory block with Freertos API */
+ void *result = NULL;
+
+#ifdef CONFIG_FATFS_ALLOC_PREFER_MEMP
+ result = FMempMalloc(&ff_memp, msize);
+#else
+ result = malloc(msize); /* Allocate a new memory block with POSIX API */
+#endif
+ if (NULL != result){
+ memset(result, 0, msize);
+ }
+
+ return result;
}
+void* ff_memalign( /* Returns pointer to the allocated memory block (null if not enough core) */
+ UINT msize, /* Number of bytes to allocate */
+ UINT align /* Alignment */
+)
+{
+ void *result = NULL;
+
+#ifdef CONFIG_FATFS_ALLOC_PREFER_MEMP
+ result = FMempMallocAlign(&ff_memp, msize, align);
+#else
+ #error "allocate aligned memory is not supported !!!"
+ result = malloc(msize); /* Allocate a new memory block with POSIX API */
+#endif
+
+ if (NULL != result){
+ memset(result, 0, msize);
+ }
+
+ return result;
+}
/*------------------------------------------------------------------------*/
/* Free a memory block */
/*------------------------------------------------------------------------*/
void ff_memfree (
- void* mblock /* Pointer to the memory block to free (nothing to do for null) */
+ void* mblock /* Pointer to the memory block to free (nothing to do if null) */
)
{
- vPortFree(mblock); /* Free the memory block with Freertos API */
+#ifdef CONFIG_FATFS_ALLOC_PREFER_MEMP
+ FMempFree(&ff_memp, mblock);
+#else
+ free(mblock); /* Free the memory block with POSIX API */
+#endif
}
-#endif
#if FF_FS_REENTRANT /* Mutal exclusion */
@@ -44,14 +95,12 @@ void ff_memfree (
/ When a 0 is returned, the f_mount() function fails with FR_INT_ERR.
*/
-//const osMutexDef_t Mutex[FF_VOLUMES]; /* CMSIS-RTOS */
-
-
int ff_cre_syncobj ( /* 1:Function succeeded, 0:Could not create the sync object */
BYTE vol, /* Corresponding volume (logical drive number) */
FF_SYNC_t* sobj /* Pointer to return the created sync object */
)
{
+ /* FreeRTOS */
*sobj = xSemaphoreCreateMutex();
return (int)(*sobj != NULL);
}
@@ -69,7 +118,8 @@ int ff_del_syncobj ( /* 1:Function succeeded, 0:Could not delete due to an error
FF_SYNC_t sobj /* Sync object tied to the logical drive to be deleted */
)
{
- vSemaphoreDelete(sobj);
+ /* FreeRTOS */
+ vSemaphoreDelete(sobj);
return 1;
}
@@ -85,6 +135,7 @@ int ff_req_grant ( /* 1:Got a grant to access the volume, 0:Could not get a gran
FF_SYNC_t sobj /* Sync object to wait */
)
{
+ /* FreeRTOS */
return (int)(xSemaphoreTake(sobj, FF_FS_TIMEOUT) == pdTRUE);
}
@@ -99,8 +150,50 @@ void ff_rel_grant (
FF_SYNC_t sobj /* Sync object to be signaled */
)
{
+ /* FreeRTOS */
xSemaphoreGive(sobj);
}
#endif
+DWORD get_fattime(void) /* TODO: impl file time with RTC */
+{
+ return ((DWORD)(2022 - 1980) << 25) /* bit31:25, Year origin from the 1980 (0..127, e.g. 37 for 2017) */
+ | ((DWORD)(11) << 21) /* bit24:21, Month (1..12) */
+ | ((DWORD)2 << 16) /* bit20:16, Day of the month (1..31) */
+ | (WORD)(9 << 11) /* bit15:11, Hour (0..23) */
+ | (WORD)(3 << 5) /* bit10:5, Minute (0..59) */
+ | (WORD)(15 >> 1); /* bit4:0, Second / 2 (0..29, e.g. 25 for 50) */
+}
+
+
+void ff_systimer_start(void)
+{
+ /* no need to start systimer */
+}
+
+QWORD ff_systimer_get_tick(void)
+{
+ return (QWORD)xTaskGetTickCount();
+}
+
+void ff_systimer_tick_to_time(QWORD ticks, DWORD *sec, DWORD *msec)
+{
+
+ if (sec)
+ {
+ *sec = (DWORD)(ticks / (u32)configTICK_RATE_HZ);
+ }
+
+ if (msec)
+ {
+ *msec = (DWORD)(ticks % (DWORD)configTICK_RATE_HZ /
+ (((DWORD)configTICK_RATE_HZ * 1 + 999) / 1000));
+ }
+
+}
+
+void ff_systimer_stop(void)
+{
+ /* no need to stop systimer */
+}
\ No newline at end of file
diff --git a/third-party/fatfs-0.1.3/port/fsata_controller/diskio.c b/third-party/fatfs-0.1.4/port/fsata_controller/diskio_sata_controller.c
similarity index 38%
rename from third-party/fatfs-0.1.3/port/fsata_controller/diskio.c
rename to third-party/fatfs-0.1.4/port/fsata_controller/diskio_sata_controller.c
index d0fb49104863f032f7082d28188d2f94263a19d1..72448b138f67613296fb9c4938e1ca8d13d5b603 100644
--- a/third-party/fatfs-0.1.3/port/fsata_controller/diskio.c
+++ b/third-party/fatfs-0.1.4/port/fsata_controller/diskio_sata_controller.c
@@ -12,7 +12,7 @@
#include "fdebug.h"
#include "finterrupt.h"
#include "ff.h"
-#include "diskio.h" /* FatFs lower layer API */
+#include "diskio.h" /* FatFs lower layer API */
#include "fsata.h"
#include "fsata_hw.h"
@@ -27,36 +27,52 @@ static u8 mem[50000] __attribute__((aligned(1024))) = {0};
#define ADDR_ALIGNMENT 1024
-static FSataCtrl sata_device[FSATA_INSTANCE_NUM];//最多支持16个ahci控制器,可以自行定义个数
+static FSataCtrl sata_device[FSATA_NUM];//最多支持16个ahci控制器,可以自行定义个数
static boolean sata_ok = FALSE;
-static u32 host_num = 0; /* sata host */
+static u32 host_num = 0; /* sata host */
static u32 port_num = 0; /* sata link port */
/*-----------------------------------------------------------------------*/
/* Get Drive Status */
/*-----------------------------------------------------------------------*/
+typedef struct
+{
+ DWORD id;
+ DWORD sector_sz;
+ DWORD sector_cnt;
+ FSataCtrl sata;
+ boolean init_ok;
+ BYTE pdrv;
+} ff_sata_disk;
+
+static ff_sata_disk sata_disk =
+{
+ .pdrv = FF_DRV_NOT_USED,
+ .init_ok = FALSE,
+};
-DSTATUS
-disk_status(
- BYTE pdrv /* Physical drive nmuber to identify the drive */
+DSTATUS sata_disk_status(
+ BYTE pdrv /* Physical drive nmuber to identify the drive */
)
{
- DSTATUS status = STA_NOINIT;
+ DSTATUS status = STA_NOINIT;
- if (FT_COMPONENT_IS_READY == sata_device[host_num].is_ready)
- status &= ~STA_NOINIT; /* 假设Sata处于插入状态 */
+ if (FT_COMPONENT_IS_READY == sata_device[host_num].is_ready)
+ {
+ status &= ~STA_NOINIT; /* 假设Sata处于插入状态 */
+ }
- return status;
+ return status;
}
static int FSataInit(void)
-{
+{
u32 instance_id = 0;
- u32 port = 0;
- u32 port_mem_count = 0;
- u8 link_success = 0;
+ u32 port = 0;
+ u32 port_mem_count = 0;
+ u8 link_success = 0;
const FSataConfig *config_p = NULL;
FSataCtrl *instance_p;
@@ -65,100 +81,104 @@ static int FSataInit(void)
if (sata_ok == TRUE)
{
- FSATA_WARN("sata already init\r\n");
+ FSATA_WARN("Sata already init.\r\n");
return 0;
}
- for (instance_id = 0; instance_id < FSATA_INSTANCE_NUM; instance_id++)
- {
+ for (instance_id = 0; instance_id < FSATA_NUM; instance_id++)
+ {
host_valid = FALSE;
- config_p = FSataLookupConfig(instance_id, FSATA_TYPE_CONTROLLER);
- if(config_p != NULL)
+ config_p = FSataLookupConfig(instance_id, FSATA_TYPE_CONTROLLER);
+ if (config_p != NULL)
{
ret = FSataCfgInitialize(&sata_device[instance_id], config_p);
if (FSATA_SUCCESS != ret)
{
- FSATA_ERROR("init sata failed, ret: 0x%x", ret);
+ FSATA_ERROR("Init sata failed, ret: 0x%x.", ret);
continue;
}
- FSATA_DEBUG("plat ahci host[%d] base_addr = 0x%x", instance_id, sata_device[instance_id].config.base_addr);
- FSATA_DEBUG("plat ahci host[%d] irq_num = %d", instance_id, sata_device[instance_id].config.irq_num);
- }
+ FSATA_DEBUG("Plat ahci host[%d] base_addr = 0x%x.", instance_id, sata_device[instance_id].config.base_addr);
+ FSATA_DEBUG("Plat ahci host[%d] irq_num = %d.", instance_id, sata_device[instance_id].config.irq_num);
+ }
else
{
- continue;
- }
+ continue;
+ }
- instance_p = &sata_device[instance_id];
+ instance_p = &sata_device[instance_id];
- /* init ahci controller and port */
- ret = FSataAhciInit(instance_p);
- if (FSATA_SUCCESS != ret)
- {
- FSataCfgDeInitialize(instance_p);
- FSATA_ERROR("FSataAhciInit sata failed, ret: 0x%x", ret);
- continue;
- }
+ /* init ahci controller and port */
+ ret = FSataAhciInit(instance_p);
+ if (FSATA_SUCCESS != ret)
+ {
+ FSataCfgDeInitialize(instance_p);
+ FSATA_ERROR("FSataAhciInit sata failed, ret: 0x%x.", ret);
+ continue;
+ }
- FSATA_DEBUG("instance_p->n_ports = %d\n", instance_p->n_ports);
+ FSATA_DEBUG("instance_p->n_ports = %d.\n", instance_p->n_ports);
for (port = 0; port < instance_p->n_ports; port++)
- {
- u32 port_map = instance_p->port_map;
- if (!(port_map & BIT(port)))
- continue;
+ {
+ u32 port_map = instance_p->port_map;
+ if (!(port_map & BIT(port)))
+ {
+ continue;
+ }
/* command list address must be 1K-byte aligned */
ret = FSataAhciPortStart(instance_p, port,
(uintptr)mem + PALIGN_UP(FSATA_AHCI_PORT_PRIV_DMA_SZ, ADDR_ALIGNMENT) * port_mem_count);
port_mem_count++;
- if (FSATA_SUCCESS != ret)
- {
- FSATA_ERROR("FSataAhciPortStart %d-%d failed, ret: 0x%x", instance_id, port, ret);
- continue;
- }
-
- ret = FSataAhciReadInfo(instance_p, port);
- if (FSATA_SUCCESS != ret)
- {
- FSataCfgDeInitialize(instance_p);
- FSATA_ERROR("FSataAhciReadInfo %d-%d failed, ret: 0x%x", instance_id, port, ret);
- continue;
- }
- if(FSATA_SUCCESS == ret)
+ if (FSATA_SUCCESS != ret)
+ {
+ FSATA_ERROR("FSataAhciPortStart %d-%d failed, ret: 0x%x.", instance_id, port, ret);
+ continue;
+ }
+
+ ret = FSataAhciReadInfo(instance_p, port);
+ if (FSATA_SUCCESS != ret)
+ {
+ FSataCfgDeInitialize(instance_p);
+ FSATA_ERROR("FSataAhciReadInfo %d-%d failed, ret: 0x%x.", instance_id, port, ret);
+ continue;
+ }
+ if (FSATA_SUCCESS == ret)
{
host_valid = TRUE;
}
- }
-
- }
-
+ }
+
+ }
+
sata_ok = TRUE;
- /* get host number and port number which link success */
- for(host_num = 0; host_num < FSATA_INSTANCE_NUM; host_num++)
+ /* get host number and port number which link success */
+ for (host_num = 0; host_num < FSATA_NUM; host_num++)
{
for (port_num = 0; port_num < sata_device[host_num].n_ports; port_num++)
{
if (!(sata_device[host_num].link_port_map & BIT(port_num)))
{
- printf("host_num %d port_num %d is not link\n", host_num, port_num);
+ FSATA_ERROR("host_num %d port_num %d is not link.\n", host_num, port_num);
continue;
}
else
{
- printf("host_num %d port_num %d is link\n", host_num, port_num);
+ FSATA_INFO("host_num %d port_num %d is link.\n", host_num, port_num);
link_success = 1;
break;
}
}
- if(link_success == 1)
+ if (link_success == 1)
+ {
break;
+ }
}
- if(link_success != 1)
+ if (link_success != 1)
{
- FSATA_ERROR("Sata host port link failed\n");
+ FSATA_ERROR("Sata host port link failed.\n");
return -1;
}
@@ -170,120 +190,138 @@ static int FSataInit(void)
/* Inidialize a Drive */
/*-----------------------------------------------------------------------*/
-DSTATUS disk_initialize (
- BYTE pdrv /* Physical drive nmuber to identify the drive */
+DSTATUS sata_disk_initialize(
+ BYTE pdrv /* Physical drive nmuber to identify the drive */
)
{
- DSTATUS status = STA_NOINIT;
+ DSTATUS status = STA_NOINIT;
if (FSATA_SUCCESS == FSataInit())
- {
- status &= ~STA_NOINIT;
- FSATA_INFO("init sata driver ok");
- }
- else
- {
- FSATA_ERROR("init sata driver failed");
- }
-
- return status;
-}
-
+ {
+ status &= ~STA_NOINIT;
+ FSATA_INFO("Init sata driver successfully.");
+ }
+ else
+ {
+ FSATA_ERROR("Init sata driver failed.");
+ }
+ return status;
+}
/*-----------------------------------------------------------------------*/
/* Read Sector(s) */
/*-----------------------------------------------------------------------*/
-DRESULT disk_read (
- BYTE pdrv, /* Physical drive nmuber to identify the drive */
- BYTE *buff, /* Data buffer to store read data */
- DWORD sector, /* Start sector in LBA */
- UINT count /* Number of sectors to read */
+DRESULT sata_disk_read(
+ BYTE pdrv, /* Physical drive nmuber to identify the drive */
+ BYTE *buff, /* Data buffer to store read data */
+ DWORD sector, /* Start sector in LBA */
+ UINT count /* Number of sectors to read */
)
{
- DRESULT status = RES_OK;
- BYTE *io_buf = buff;
- UINT err = FSATA_SUCCESS;
+ DRESULT status = RES_OK;
+ BYTE *io_buf = buff;
+ UINT err = FSATA_SUCCESS;
- err = FSataReadWrite(&sata_device[host_num], port_num, sector, count, io_buf, FALSE, FALSE);
+ err = FSataReadWrite(&sata_device[host_num], port_num, sector, count, io_buf, FALSE, FALSE);
- if (FSATA_SUCCESS != err)
- {
- FSATA_ERROR("read sata controller sector [%d-%d] failed: 0x%x", sector, sector + count, err);
- status = RES_ERROR;
- }
+ if (FSATA_SUCCESS != err)
+ {
+ FSATA_ERROR("Read sata controller sector [%d-%d] failed: 0x%x.", sector, sector + count, err);
+ status = RES_ERROR;
+ }
- return status;
+ return status;
}
/*-----------------------------------------------------------------------*/
/* Write Sector(s) */
/*-----------------------------------------------------------------------*/
-DRESULT disk_write (
- BYTE pdrv, /* Physical drive nmuber to identify the drive */
- const BYTE *buff, /* Data to be written */
- DWORD sector, /* Start sector in LBA */
- UINT count /* Number of sectors to write */
+DRESULT sata_disk_write(
+ BYTE pdrv, /* Physical drive nmuber to identify the drive */
+ const BYTE *buff, /* Data to be written */
+ DWORD sector, /* Start sector in LBA */
+ UINT count /* Number of sectors to write */
)
{
- DRESULT status = RES_OK;
- const BYTE *io_buf = buff;
- UINT err = FSATA_SUCCESS;
-
- err = FSataReadWrite(&sata_device[host_num], port_num, sector, count, (u8 *)io_buf, FALSE, TRUE);
-
- if (FSATA_SUCCESS != err)
- {
- FSATA_ERROR("write sata controller sector [%d-%d] failed: 0x%x", sector, sector + count, err);
- status = RES_ERROR;
- }
-
- return status;
+ DRESULT status = RES_OK;
+ const BYTE *io_buf = buff;
+ UINT err = FSATA_SUCCESS;
+
+ err = FSataReadWrite(&sata_device[host_num], port_num, sector, count, (u8 *)io_buf, FALSE, TRUE);
+
+ if (FSATA_SUCCESS != err)
+ {
+ FSATA_ERROR("Write sata controller sector [%d-%d] failed: 0x%x.", sector, sector + count, err);
+ status = RES_ERROR;
+ }
+
+ return status;
}
/*-----------------------------------------------------------------------*/
/* Miscellaneous Functions */
/*-----------------------------------------------------------------------*/
-DRESULT disk_ioctl (
- BYTE pdrv, /* Physical drive nmuber (0..) */
- BYTE cmd, /* Control code */
- void *buff /* Buffer to send/receive control data */
+DRESULT sata_disk_ioctl(
+ BYTE pdrv, /* Physical drive nmuber (0..) */
+ BYTE cmd, /* Control code */
+ void *buff /* Buffer to send/receive control data */
)
{
- DRESULT res = RES_ERROR;
-
- switch (cmd)
- {
- /* 确保磁盘驱动器已经完成了写处理,当磁盘I/O有一个写回缓存,
- 立即刷新原扇区,只读配置下不适用此命令 */
- case CTRL_SYNC:
- res = RES_OK;
- break;
- /* 所有可用的扇区数目(逻辑寻址即LBA寻址方式) */
- case GET_SECTOR_COUNT:
- *((DWORD *)buff) = sata_device[host_num].port[port_num].dev_info.lba512;
- res = RES_OK;
- break;
- /* 返回磁盘扇区大小, 只用于f_mkfs() */
- case GET_SECTOR_SIZE:
- res = RES_PARERR;
- break;
- /* 每个扇区有多少个字节 */
- case GET_BLOCK_SIZE:
- *((DWORD *)buff) = sata_device[host_num].port[port_num].dev_info.blksz;
- res = RES_OK;
- break;
- case CTRL_TRIM:
- res = RES_PARERR;
- break;
- }
-
- FSATA_INFO("cmd %d, buff: %p", cmd, *((DWORD*) buff));
- return res;
+ DRESULT res = RES_ERROR;
+
+ switch (cmd)
+ {
+ /* 确保磁盘驱动器已经完成了写处理,当磁盘I/O有一个写回缓存,
+ 立即刷新原扇区,只读配置下不适用此命令 */
+ case CTRL_SYNC:
+ res = RES_OK;
+ break;
+ /* 所有可用的扇区数目(逻辑寻址即LBA寻址方式) */
+ case GET_SECTOR_COUNT:
+ *((DWORD *)buff) = sata_device[host_num].port[port_num].dev_info.lba512;
+ res = RES_OK;
+ break;
+ /* 返回磁盘扇区大小, 只用于f_mkfs() */
+ case GET_SECTOR_SIZE:
+ res = RES_PARERR;
+ break;
+ /* 每个扇区有多少个字节 */
+ case GET_BLOCK_SIZE:
+ *((DWORD *)buff) = sata_device[host_num].port[port_num].dev_info.blksz;
+ res = RES_OK;
+ break;
+ case CTRL_TRIM:
+ res = RES_PARERR;
+ break;
+ }
+
+ FSATA_INFO("cmd %d, buff: %p", cmd, *((DWORD *) buff));
+ return res;
}
+static const ff_diskio_driver_t sata_disk_drv =
+{
+ .init = &sata_disk_initialize,
+ .status = &sata_disk_status,
+ .read = &sata_disk_read,
+ .write = &sata_disk_write,
+ .ioctl = &sata_disk_ioctl
+};
+
+void ff_diskio_register_sata(BYTE pdrv)
+{
+ ff_sata_disk *disk = &sata_disk;
+
+ disk->id = FSATA0_ID;
+ disk->init_ok = FALSE;
+ disk->pdrv = pdrv; /* assign volume for sata disk */
+ ff_diskio_register(pdrv, &sata_disk_drv);
+
+ FSATA_INFO("Create sata disk as driver-%d.", disk->pdrv);
+}
diff --git a/third-party/fatfs-0.1.3/port/fsata_pcie/diskio.c b/third-party/fatfs-0.1.4/port/fsata_pcie/diskio_sata_pcie.c
similarity index 33%
rename from third-party/fatfs-0.1.3/port/fsata_pcie/diskio.c
rename to third-party/fatfs-0.1.4/port/fsata_pcie/diskio_sata_pcie.c
index 27d10ccfee251047aafba985381fa8298a11b118..5fa1ce5f54c6321b37155e133d5f55024de0aa6a 100644
--- a/third-party/fatfs-0.1.3/port/fsata_pcie/diskio.c
+++ b/third-party/fatfs-0.1.4/port/fsata_pcie/diskio_sata_pcie.c
@@ -14,7 +14,7 @@
#include "fdebug.h"
#include "finterrupt.h"
#include "ff.h"
-#include "diskio.h" /* FatFs lower layer API */
+#include "diskio.h" /* FatFs lower layer API */
#include "fpcie.h"
#include "fpcie_common.h"
#include "fsata.h"
@@ -29,7 +29,7 @@
/* 64位需要预留给内存池更大的空间 */
static u8 mem[50000] __attribute__((aligned(1024))) = {0};
-#define PCI_CLASS_STORAGE_SATA_AHCI 0x010601
+#define PCI_CLASS_STORAGE_SATA_AHCI 0x010601
#define SATA_HOST_MAX_NUM PLAT_AHCI_HOST_MAX_COUNT
@@ -40,24 +40,42 @@ static s32 sata_host_count = 0;
static boolean sata_ok = FALSE;
-static s32 host_num = 0; /* sata host */
+static s32 host_num = 0; /* sata host */
static u32 port_num = 0; /* sata link port */
static FPcie pcie_obj = {0};
+
+typedef struct
+{
+ DWORD id;
+ DWORD sector_sz;
+ DWORD sector_cnt;
+ FSataCtrl sata;
+ boolean init_ok;
+ BYTE pdrv;
+} ff_sata_pcie_disk;
+
+static ff_sata_pcie_disk sata_pcie_disk =
+{
+ .pdrv = FF_DRV_NOT_USED,
+ .init_ok = FALSE,
+};
/*-----------------------------------------------------------------------*/
/* Get Drive Status */
/*-----------------------------------------------------------------------*/
-DSTATUS disk_status (
- BYTE pdrv /* Physical drive nmuber to identify the drive */
+DSTATUS sata_pcie_disk_status(
+ BYTE pdrv /* Physical drive nmuber to identify the drive */
)
{
- DSTATUS status = STA_NOINIT;
+ DSTATUS status = STA_NOINIT;
- if (FT_COMPONENT_IS_READY == sata_device[host_num].is_ready)
- status &= ~STA_NOINIT; /* 假设Sata处于插入状态 */
+ if (FT_COMPONENT_IS_READY == sata_device[host_num].is_ready)
+ {
+ status &= ~STA_NOINIT; /* 假设Sata处于插入状态 */
+ }
- return status;
+ return status;
}
static void FSataPcieIrqHandler(void *param)
@@ -65,194 +83,200 @@ static void FSataPcieIrqHandler(void *param)
FSataIrqHandler(0, param);
}
-static void PCieIntxInit(FPcie* instance_p)
+static void PCieIntxInit(FPcie *instance_p)
{
- InterruptSetPriority(FT_PCI_INTA_IRQ_NUM, 0);
-
- InterruptInstall(FT_PCI_INTA_IRQ_NUM, (IrqHandler)FPcieIntxIrqHandler, instance_p, "pcieInta");
- InterruptUmask(FT_PCI_INTA_IRQ_NUM);
- InterruptSetPriority(FT_PCI_INTB_IRQ_NUM, 0);
- InterruptInstall(FT_PCI_INTB_IRQ_NUM, (IrqHandler)FPcieIntxIrqHandler, instance_p, "pcieIntB");
- InterruptUmask(FT_PCI_INTB_IRQ_NUM);
- InterruptSetPriority(FT_PCI_INTC_IRQ_NUM, 0);
- InterruptInstall(FT_PCI_INTC_IRQ_NUM, (IrqHandler)FPcieIntxIrqHandler, instance_p, "pcieIntC");
- InterruptUmask(FT_PCI_INTC_IRQ_NUM);
- InterruptSetPriority(FT_PCI_INTD_IRQ_NUM, 0);
- InterruptInstall(FT_PCI_INTD_IRQ_NUM, (IrqHandler)FPcieIntxIrqHandler, instance_p, "pcieIntD");
- InterruptUmask(FT_PCI_INTD_IRQ_NUM);
+ InterruptSetPriority(FPCI_INTA_IRQ_NUM, 0);
+
+ InterruptInstall(FPCI_INTA_IRQ_NUM, (IrqHandler)FPcieIntxIrqHandler, instance_p, "pcieInta");
+ InterruptUmask(FPCI_INTA_IRQ_NUM);
+ InterruptSetPriority(FPCI_INTB_IRQ_NUM, 0);
+ InterruptInstall(FPCI_INTB_IRQ_NUM, (IrqHandler)FPcieIntxIrqHandler, instance_p, "pcieIntB");
+ InterruptUmask(FPCI_INTB_IRQ_NUM);
+ InterruptSetPriority(FPCI_INTC_IRQ_NUM, 0);
+ InterruptInstall(FPCI_INTC_IRQ_NUM, (IrqHandler)FPcieIntxIrqHandler, instance_p, "pcieIntC");
+ InterruptUmask(FPCI_INTC_IRQ_NUM);
+ InterruptSetPriority(FPCI_INTD_IRQ_NUM, 0);
+ InterruptInstall(FPCI_INTD_IRQ_NUM, (IrqHandler)FPcieIntxIrqHandler, instance_p, "pcieIntD");
+ InterruptUmask(FPCI_INTD_IRQ_NUM);
}
static void FPcieInit()
-{
- /* 第一步初始化pcie_obj这个实例,初始化mem,io资源成员 */
- FPcieCfgInitialize(&pcie_obj, FPcieLookupConfig(FT_PCIE0_ID));
+{
+ /* 第一步初始化pcie_obj这个实例,初始化mem,io资源成员 */
+ FPcieCfgInitialize(&pcie_obj, FPcieLookupConfig(FPCIE0_ID));
FSATA_DEBUG("\n");
- FSATA_DEBUG(" PCI:\n");
- FSATA_DEBUG(" B:D:F VID:PID parent_BDF class_code\n");
+ FSATA_DEBUG(" PCI:\n");
+ FSATA_DEBUG(" B:D:F VID:PID parent_BDF class_code\n");
FPcieScanBus(&pcie_obj, 0, 0xffffffff);
- PCieIntxInit(&pcie_obj);
+ PCieIntxInit(&pcie_obj);
}
-static uintptr_t SataPcieIrqInstall(FSataCtrl* ahci_ctl, u32 bdf)
+static uintptr_t SataPcieIrqInstall(FSataCtrl *ahci_ctl, u32 bdf)
{
- int ret = FT_SUCCESS;
-
- FPcieIntxFun intx_fun;
+ int ret = FT_SUCCESS;
+
+ FPcieIntxFun intx_fun;
intx_fun.IntxCallBack = FSataPcieIrqHandler;
- intx_fun.args = ahci_ctl;
- intx_fun.bdf = bdf;
+ intx_fun.args = ahci_ctl;
+ intx_fun.bdf = bdf;
ret = FPcieIntxRegiterIrqHandler(&pcie_obj, bdf, &intx_fun);
- if(ret != FT_SUCCESS)
+ if (ret != FT_SUCCESS)
{
return ret;
}
- return 0;
+ return 0;
}
static int FSataInit(void)
{
- int ret;
- s32 host = 0;
- u32 port = 0;
- u32 bdf;
- u32 class;
- u16 pci_command;
- const u32 class_code = PCI_CLASS_STORAGE_SATA_AHCI;
- uintptr bar_addr = 0;
- u16 vid, did;
+ int ret;
+ s32 host = 0;
+ u32 port = 0;
+ u32 bdf;
+ u32 class;
+ u16 pci_command;
+ const u32 class_code = PCI_CLASS_STORAGE_SATA_AHCI;
+ uintptr bar_addr = 0;
+ u16 vid, did;
u32 port_mem_count = 0;
- u8 link_success = 0;
+ u8 link_success = 0;
const FSataConfig *config_p = NULL;
FSataCtrl *instance_p;
FError status = FSATA_SUCCESS;
- FPcie *pcie = &pcie_obj;
+ FPcie *pcie = &pcie_obj;
- if (sata_ok == TRUE)
+ if (sata_ok == TRUE)
{
- FSATA_WARN("sata already init\r\n");
+ FSATA_WARN("Sata already init.\r\n");
return 0;
}
- for(host = 0; host < SATA_HOST_MAX_NUM; host++)
+ for (host = 0; host < SATA_HOST_MAX_NUM; host++)
{
- instance_p = &sata_device[host];
- memset(instance_p, 0, sizeof(*instance_p));
+ instance_p = &sata_device[host];
+ memset(instance_p, 0, sizeof(*instance_p));
config_p = FSataLookupConfig(host, FSATA_TYPE_PCIE);
status = FSataCfgInitialize(&sata_device[host], config_p);
if (FSATA_SUCCESS != status)
{
- FSATA_ERROR("init sata failed, status: 0x%x", status);
+ FSATA_ERROR("Init sata failed, status: 0x%x.", status);
continue;
}
- }
+ }
- /* find host from pcie instance */
- for(host = 0; host < pcie->scaned_bdf_count; host++)
- {
- bdf = pcie->scaned_bdf_array[host];
- FPcieEcamReadConfig32bit(pcie->config.ecam, bdf, FPCI_CLASS_REVISION, &class) ;
+ /* find host from pcie instance */
+ for (host = 0; host < pcie->scaned_bdf_count; host++)
+ {
+ bdf = pcie->scaned_bdf_array[host];
+ FPcieEcamReadConfig32bit(pcie->config.ecam, bdf, FPCI_CLASS_REVISION, &class) ;
class = (class) >> 8 ;
- if(class == class_code)
- {
- FPcieEcamReadConfig16bit(pcie->config.ecam, bdf, FPCIE_VENDOR_REG, &vid) ;
- FPcieEcamReadConfig16bit(pcie->config.ecam, bdf, FPCIE_DEVICE_ID_REG, &did);
+ if (class == class_code)
+ {
+ FPcieEcamReadConfig16bit(pcie->config.ecam, bdf, FPCIE_VENDOR_REG, &vid) ;
+ FPcieEcamReadConfig16bit(pcie->config.ecam, bdf, FPCIE_DEVICE_ID_REG, &did);
+
+ FSATA_DEBUG("AHCI-PCI HOST found !!!, b.d.f = %x.%x.%x\n", FPCIE_BUS(bdf), FPCIE_DEV(bdf), FPCIE_FUNC(bdf));
- FSATA_DEBUG("AHCI-PCI HOST found !!!, b.d.f = %x.%x.%x\n", FPCIE_BUS(bdf), FPCIE_DEV(bdf), FPCIE_FUNC(bdf));
-
- FPcieEcamReadConfig32bit(pcie->config.ecam, bdf, FPCIE_BASE_ADDRESS_5, (u32*)&bar_addr);
- FSATA_DEBUG("FSataPcieIntrInstall BarAddress %p", bar_addr);
+ FPcieEcamReadConfig32bit(pcie->config.ecam, bdf, FPCIE_BASE_ADDRESS_5, (u32 *)&bar_addr);
+ FSATA_DEBUG("FSataPcieIntrInstall BarAddress %p.", bar_addr);
- if (0x0 == bar_addr)
+ if (0x0 == bar_addr)
{
- FSATA_ERROR("Bar address: 0x%lx", bar_addr);
+ FSATA_ERROR("Bar address: 0x%lx.", bar_addr);
return -1;
}
- FPcieEcamReadConfig16bit(pcie->config.ecam, bdf, FPCIE_COMMAND_REG, &pci_command);
- pci_command |= FPCIE_COMMAND_MASTER;
- FPcieEcamWriteConfig16bit(pcie->config.ecam, bdf, FPCIE_COMMAND_REG, pci_command);
-
- SataPcieIrqInstall(&sata_device[sata_host_count] ,bdf);
- sata_device[sata_host_count].config.base_addr = bar_addr;
- FSATA_DEBUG("sata_device[%d].config.base_addr = 0x%x\n", sata_host_count, sata_device[sata_host_count].config.base_addr);
- sata_host_count++;
- if(sata_host_count >= SATA_HOST_MAX_NUM)
+ FPcieEcamReadConfig16bit(pcie->config.ecam, bdf, FPCIE_COMMAND_REG, &pci_command);
+ pci_command |= FPCIE_COMMAND_MASTER;
+ FPcieEcamWriteConfig16bit(pcie->config.ecam, bdf, FPCIE_COMMAND_REG, pci_command);
+
+ SataPcieIrqInstall(&sata_device[sata_host_count], bdf);
+ sata_device[sata_host_count].config.base_addr = bar_addr;
+ FSATA_DEBUG("sata_device[%d].config.base_addr = 0x%x.\n", sata_host_count, sata_device[sata_host_count].config.base_addr);
+ sata_host_count++;
+ if (sata_host_count >= SATA_HOST_MAX_NUM)
+ {
break;
- }
- }
-
- FSATA_DEBUG("scaned %d ahci host\n", sata_host_count);
-
- for(host = 0; host < sata_host_count; host++)
- {
- instance_p = &sata_device[host];
-
- /* Initialization */
- status = FSataAhciInit(instance_p);
- if (FSATA_SUCCESS != status)
- {
- FSataCfgDeInitialize(instance_p);
- FSATA_ERROR("FSataAhciInit sata failed, ret: 0x%x", status);
- continue;
- }
-
- for (port = 0; port < instance_p->n_ports; port++)
- {
- u32 port_map = instance_p->port_map;
- if (!(port_map & BIT(port)))
- continue;
-
- /* command list address must be 1K-byte aligned */
+ }
+ }
+ }
+
+ FSATA_DEBUG("Scaned %d ahci host.\n", sata_host_count);
+
+ for (host = 0; host < sata_host_count; host++)
+ {
+ instance_p = &sata_device[host];
+
+ /* Initialization */
+ status = FSataAhciInit(instance_p);
+ if (FSATA_SUCCESS != status)
+ {
+ FSataCfgDeInitialize(instance_p);
+ FSATA_ERROR("FSataAhciInit sata failed, ret: 0x%x.", status);
+ continue;
+ }
+
+ for (port = 0; port < instance_p->n_ports; port++)
+ {
+ u32 port_map = instance_p->port_map;
+ if (!(port_map & BIT(port)))
+ {
+ continue;
+ }
+
+ /* command list address must be 1K-byte aligned */
ret = FSataAhciPortStart(instance_p, port,
(uintptr)mem + PALIGN_UP(FSATA_AHCI_PORT_PRIV_DMA_SZ, ADDR_ALIGNMENT) * port_mem_count);
-
- port_mem_count++;
- if (FSATA_SUCCESS != ret)
- {
- FSATA_ERROR("FSataAhciPortStart port %d failed, ret: 0x%x", port, ret);
- continue;
- }
-
- status = FSataAhciReadInfo(instance_p, port);
- if (FSATA_SUCCESS != status)
- {
- FSataCfgDeInitialize(instance_p);
- FSATA_ERROR("FSataAhciReadInfo failed, ret: 0x%x", status);
- continue;
- }
-
- }
- }
-
+
+ port_mem_count++;
+ if (FSATA_SUCCESS != ret)
+ {
+ FSATA_ERROR("FSataAhciPortStart port %d failed, ret: 0x%x.", port, ret);
+ continue;
+ }
+
+ status = FSataAhciReadInfo(instance_p, port);
+ if (FSATA_SUCCESS != status)
+ {
+ FSataCfgDeInitialize(instance_p);
+ FSATA_ERROR("FSataAhciReadInfo failed, ret: 0x%x.", status);
+ continue;
+ }
+
+ }
+ }
+
sata_ok = TRUE;
- /* get host number and port number which link success */
- for(host_num = 0; host_num < sata_host_count; host_num++)
+ /* get host number and port number which link success */
+ for (host_num = 0; host_num < sata_host_count; host_num++)
{
for (port_num = 0; port_num < sata_device[host_num].n_ports; port_num++)
{
if (!(sata_device[host_num].link_port_map & BIT(port_num)))
{
- printf("host_num %d port_num %d is not link\n", host_num, port_num);
+ FSATA_DEBUG("host_num %d port_num %d is not link.\n", host_num, port_num);
continue;
}
else
{
- printf("host_num %d port_num %d is link\n", host_num, port_num);
+ FSATA_DEBUG("host_num %d port_num %d is link.\n", host_num, port_num);
link_success = 1;
break;
}
}
- if(link_success == 1)
+ if (link_success == 1)
+ {
break;
+ }
}
- if(link_success != 1)
+ if (link_success != 1)
{
- FSATA_ERROR("Sata host port link failed\n");
+ FSATA_ERROR("Sata host port link failed.\n");
return -1;
}
@@ -264,29 +288,29 @@ static int FSataInit(void)
/* Inidialize a Drive */
/*-----------------------------------------------------------------------*/
-DSTATUS disk_initialize (
- BYTE pdrv /* Physical drive nmuber to identify the drive */
+DSTATUS sata_pcie_disk_initialize(
+ BYTE pdrv /* Physical drive nmuber to identify the drive */
)
{
- DSTATUS status = STA_NOINIT;
+ DSTATUS status = STA_NOINIT;
static u8 flag = 0;
if (flag == 0)
{
FPcieInit();
flag = 1;
}
-
+
if (FSATA_SUCCESS == FSataInit())
- {
- status &= ~STA_NOINIT;
- FSATA_INFO("init sata driver ok");
- }
- else
- {
- FSATA_ERROR("init sata driver failed");
- }
-
- return status;
+ {
+ status &= ~STA_NOINIT;
+ FSATA_INFO("Init sata driver successfully.");
+ }
+ else
+ {
+ FSATA_ERROR("Init sata driver failed.");
+ }
+
+ return status;
}
@@ -295,98 +319,116 @@ DSTATUS disk_initialize (
/* Read Sector(s) */
/*-----------------------------------------------------------------------*/
-DRESULT disk_read (
- BYTE pdrv, /* Physical drive nmuber to identify the drive */
- BYTE *buff, /* Data buffer to store read data */
- DWORD sector, /* Start sector in LBA */
- UINT count /* Number of sectors to read */
+DRESULT sata_pcie_disk_read(
+ BYTE pdrv, /* Physical drive nmuber to identify the drive */
+ BYTE *buff, /* Data buffer to store read data */
+ DWORD sector, /* Start sector in LBA */
+ UINT count /* Number of sectors to read */
)
{
- DRESULT status = RES_OK;
- BYTE *io_buf = buff;
- UINT err = FSATA_SUCCESS;
+ DRESULT status = RES_OK;
+ BYTE *io_buf = buff;
+ UINT err = FSATA_SUCCESS;
- err = FSataReadWrite(&sata_device[host_num], port_num, sector, count, io_buf, FALSE, FALSE);
+ err = FSataReadWrite(&sata_device[host_num], port_num, sector, count, io_buf, FALSE, FALSE);
- if (FSATA_SUCCESS != err)
- {
- FSATA_ERROR("read pcie sata sector [%d-%d] failed: 0x%x", sector, sector + count, err);
- status = RES_ERROR;
- }
+ if (FSATA_SUCCESS != err)
+ {
+ FSATA_ERROR("Read pcie sata sector [%d-%d] failed: 0x%x.", sector, sector + count, err);
+ status = RES_ERROR;
+ }
- return status;
+ return status;
}
/*-----------------------------------------------------------------------*/
/* Write Sector(s) */
/*-----------------------------------------------------------------------*/
-DRESULT disk_write (
- BYTE pdrv, /* Physical drive nmuber to identify the drive */
- const BYTE *buff, /* Data to be written */
- DWORD sector, /* Start sector in LBA */
- UINT count /* Number of sectors to write */
+DRESULT sata_pcie_disk_write(
+ BYTE pdrv, /* Physical drive nmuber to identify the drive */
+ const BYTE *buff, /* Data to be written */
+ DWORD sector, /* Start sector in LBA */
+ UINT count /* Number of sectors to write */
)
{
- DRESULT status = RES_OK;
- const BYTE *io_buf = buff;
- UINT err = FSATA_SUCCESS;
-
- err = FSataReadWrite(&sata_device[host_num], port_num, sector, count, (u8 *)io_buf, FALSE, TRUE);
-
- if (FSATA_SUCCESS != err)
- {
- FSATA_ERROR("write pcie sata sector [%d-%d] failed: 0x%x", sector, sector + count, err);
- status = RES_ERROR;
- }
-
- return status;
+ DRESULT status = RES_OK;
+ const BYTE *io_buf = buff;
+ UINT err = FSATA_SUCCESS;
+
+ err = FSataReadWrite(&sata_device[host_num], port_num, sector, count, (u8 *)io_buf, FALSE, TRUE);
+
+ if (FSATA_SUCCESS != err)
+ {
+ FSATA_ERROR("Write pcie sata sector [%d-%d] failed: 0x%x.", sector, sector + count, err);
+ status = RES_ERROR;
+ }
+
+ return status;
}
/*-----------------------------------------------------------------------*/
/* Miscellaneous Functions */
/*-----------------------------------------------------------------------*/
-DRESULT disk_ioctl (
- BYTE pdrv, /* Physical drive nmuber (0..) */
- BYTE cmd, /* Control code */
- void *buff /* Buffer to send/receive control data */
+DRESULT sata_pcie_disk_ioctl(
+ BYTE pdrv, /* Physical drive nmuber (0..) */
+ BYTE cmd, /* Control code */
+ void *buff /* Buffer to send/receive control data */
)
{
- DRESULT res = RES_ERROR;
-
- switch (cmd)
- {
- /* 确保磁盘驱动器已经完成了写处理,当磁盘I/O有一个写回缓存,
- 立即刷新原扇区,只读配置下不适用此命令 */
- case CTRL_SYNC:
- res = RES_OK;
- break;
- /* 所有可用的扇区数目(逻辑寻址即LBA寻址方式) */
- case GET_SECTOR_COUNT:
- *((DWORD *)buff) = sata_device[host_num].port[port_num].dev_info.lba512;
- res = RES_OK; /* 最多使用1000个sector */
- break;
- /* 返回磁盘扇区大小, 只用于f_mkfs() */
- case GET_SECTOR_SIZE:
- res = RES_PARERR;
- break;
- /* 每个扇区有多少个字节 */
- case GET_BLOCK_SIZE:
- *((DWORD *)buff) = sata_device[host_num].port[port_num].dev_info.blksz;
- res = RES_OK;
- break;
- case CTRL_TRIM:
- res = RES_PARERR;
- break;
- }
-
- FSATA_INFO("cmd %d, buff: %p", cmd, *((DWORD*) buff));
- return res;
+ DRESULT res = RES_ERROR;
+
+ switch (cmd)
+ {
+ /* 确保磁盘驱动器已经完成了写处理,当磁盘I/O有一个写回缓存,
+ 立即刷新原扇区,只读配置下不适用此命令 */
+ case CTRL_SYNC:
+ res = RES_OK;
+ break;
+ /* 所有可用的扇区数目(逻辑寻址即LBA寻址方式) */
+ case GET_SECTOR_COUNT:
+ *((DWORD *)buff) = sata_device[host_num].port[port_num].dev_info.lba512;
+ res = RES_OK; /* 最多使用1000个sector */
+ break;
+ /* 返回磁盘扇区大小, 只用于f_mkfs() */
+ case GET_SECTOR_SIZE:
+ res = RES_PARERR;
+ break;
+ /* 每个扇区有多少个字节 */
+ case GET_BLOCK_SIZE:
+ *((DWORD *)buff) = sata_device[host_num].port[port_num].dev_info.blksz;
+ res = RES_OK;
+ break;
+ case CTRL_TRIM:
+ res = RES_PARERR;
+ break;
+ }
+
+ FSATA_INFO("cmd %d, buff: %p", cmd, *((DWORD *) buff));
+ return res;
}
+static const ff_diskio_driver_t sata_pcie_disk_drv =
+{
+ .init = &sata_pcie_disk_initialize,
+ .status = &sata_pcie_disk_status,
+ .read = &sata_pcie_disk_read,
+ .write = &sata_pcie_disk_write,
+ .ioctl = &sata_pcie_disk_ioctl
+};
+
+void ff_diskio_register_sata_pcie(BYTE pdrv)
+{
+ ff_sata_pcie_disk *disk = &sata_pcie_disk;
+ disk->id = FSATA0_ID;
+ disk->init_ok = FALSE;
+ disk->pdrv = pdrv; /* assign volume for sata pcie disk */
+ ff_diskio_register(pdrv, &sata_pcie_disk_drv);
+ FSATA_INFO("Create sata pcie disk as driver-%d.", disk->pdrv);
+}
diff --git a/third-party/fatfs-0.1.4/port/fusb/diskio_usb.c b/third-party/fatfs-0.1.4/port/fusb/diskio_usb.c
new file mode 100644
index 0000000000000000000000000000000000000000..3865a9ac2967a973966eb26de0bd20cd2db7bfe4
--- /dev/null
+++ b/third-party/fatfs-0.1.4/port/fusb/diskio_usb.c
@@ -0,0 +1,342 @@
+/*-----------------------------------------------------------------------*/
+/* Low level disk I/O module skeleton for FatFs (C)ChaN, 2016 */
+/*-----------------------------------------------------------------------*/
+/* If a working storage control module is available, it should be */
+/* attached to the FatFs via a glue function rather than modifying it. */
+/* This is an example of glue functions to attach various exsisting */
+/* storage control modules to the FatFs module with a defined API. */
+/*-----------------------------------------------------------------------*/
+
+#include
+#include
+#include "fparameters.h"
+#include "fdebug.h"
+#include "fkernel.h"
+#include "fparameters.h"
+#include "fassert.h"
+#include "fcache.h"
+#include "finterrupt.h"
+#include "fcpu_info.h"
+#include "diskio.h"
+#include "ffconf.h"
+#include "ff.h"
+#include "fmemory_pool.h"
+#include "sdkconfig.h"
+
+#include "usbh_core.h"
+#include "usbh_msc.h"
+
+#define FF_DEBUG_TAG "DISKIO-USB"
+#define FF_ERROR(format, ...) FT_DEBUG_PRINT_E(FF_DEBUG_TAG, format, ##__VA_ARGS__)
+#define FF_INFO(format, ...) FT_DEBUG_PRINT_I(FF_DEBUG_TAG, format, ##__VA_ARGS__)
+#define FF_DEBUG(format, ...) FT_DEBUG_PRINT_D(FF_DEBUG_TAG, format, ##__VA_ARGS__)
+#define FF_WARN(format, ...) FT_DEBUG_PRINT_W(FF_DEBUG_TAG, format, ##__VA_ARGS__)
+
+#define FUSB_MEMP_TOTAL_SIZE SZ_1M
+#define FUSB_FATFS_ID FUSB3_ID_0
+
+static FMemp memp;
+static u8 memp_buf[FUSB_MEMP_TOTAL_SIZE];
+FASSERT_STATIC(FUSB_FATFS_ID < FUSB3_NUM);
+
+static const u32 usb_irq_num[FUSB3_NUM] =
+{
+ [FUSB3_ID_0] = FUSB3_0_IRQ_NUM,
+ [FUSB3_ID_1] = FUSB3_1_IRQ_NUM
+};
+
+static const uintptr xhci_base_addr[FUSB3_NUM] =
+{
+ [FUSB3_ID_0] = FUSB3_0_BASE_ADDR + FUSB3_XHCI_OFFSET,
+ [FUSB3_ID_1] = FUSB3_1_BASE_ADDR + FUSB3_XHCI_OFFSET
+};
+
+typedef struct
+{
+ DWORD id;
+ boolean init_ok;
+ BYTE pdrv;
+ const TCHAR *disk_name;
+} ff_usb_disk;
+
+static ff_usb_disk usb_disk =
+{
+ .pdrv = FF_DRV_NOT_USED,
+ .init_ok = FALSE,
+ .disk_name = "/dev/sda"
+};
+
+/*****************************************************************************/
+extern void USBH_IRQHandler(void);
+
+static void UsbHcInterrruptHandler(s32 vector, void *param)
+{
+ USBH_IRQHandler();
+}
+
+static void UsbHcSetupInterrupt(void)
+{
+ u32 cpu_id;
+ u32 irq_num = usb_irq_num[FUSB_FATFS_ID];
+ u32 irq_priority = 13U;
+
+ GetCpuId(&cpu_id);
+ InterruptSetTargetCpus(irq_num, cpu_id);
+
+ InterruptSetPriority(irq_num, irq_priority);
+
+ /* register intr callback */
+ InterruptInstall(irq_num,
+ UsbHcInterrruptHandler,
+ NULL,
+ NULL);
+
+ /* enable irq */
+ InterruptUmask(irq_num);
+}
+
+void UsbHcSetupMemp(void)
+{
+ if (FT_COMPONENT_IS_READY != memp.is_ready)
+ {
+ USB_ASSERT(FT_SUCCESS == FMempInit(&memp, &memp_buf[0], &memp_buf[0] + FUSB_MEMP_TOTAL_SIZE));
+ }
+}
+
+/* implement cherryusb weak functions */
+void usb_hc_low_level_init(void)
+{
+ UsbHcSetupMemp();
+ UsbHcSetupInterrupt();
+}
+
+unsigned long usb_hc_get_register_base(void)
+{
+ return xhci_base_addr[FUSB_FATFS_ID];
+}
+
+void *usb_hc_malloc(size_t size)
+{
+ return usb_hc_malloc_align(sizeof(void *), size);
+}
+
+void *usb_hc_malloc_align(size_t align, size_t size)
+{
+ void *result = FMempMallocAlign(&memp, size, align);
+
+ if (result)
+ {
+ memset(result, 0U, size);
+ }
+
+ return result;
+}
+
+void usb_hc_free(void *ptr)
+{
+ if (NULL != ptr)
+ {
+ FMempFree(&memp, ptr);
+ }
+}
+
+void usb_assert(const char *filename, int linenum)
+{
+ FAssert(filename, linenum, 0xff);
+}
+
+void usb_hc_dcache_invalidate(void *addr, unsigned long len)
+{
+ FCacheDCacheInvalidateRange((uintptr)addr, len);
+}
+/*****************************************/
+
+/*-----------------------------------------------------------------------*/
+/* Get Drive Status */
+/*-----------------------------------------------------------------------*/
+
+static DSTATUS usb_disk_status(
+ BYTE pdrv /* Physical drive nmuber to identify the drive */
+)
+{
+ DSTATUS status = STA_NOINIT;
+ ff_usb_disk *disk = &usb_disk;
+
+ if (disk->init_ok)
+ {
+ status &= ~STA_NOINIT;
+ }
+
+ return status;
+}
+
+/*-----------------------------------------------------------------------*/
+/* Inidialize a Drive */
+/*-----------------------------------------------------------------------*/
+
+static DSTATUS usb_disk_initialize(
+ BYTE pdrv /* Physical drive nmuber to identify the drive */
+)
+{
+ DSTATUS status = STA_NOINIT;
+ ff_usb_disk *disk = &usb_disk;
+ int retries = 10000;
+
+ if (FF_DRV_NOT_USED == disk->pdrv)
+ {
+ return STA_NOINIT;
+ }
+
+ if (FALSE == disk->init_ok)
+ {
+ (void)usbh_initialize(); /* start a task to emurate usb hub and attached usb disk */
+ while (TRUE)
+ {
+ if (NULL != usbh_find_class_instance(disk->disk_name))
+ {
+ break;
+ }
+
+ if (retries-- < 0)
+ {
+ FF_ERROR("Init cherryusb host failed or usb disk device not found !!!");
+ return STA_NOINIT;
+ }
+
+ vTaskDelay(10); /* may need to wait while for usb disk emuration */
+ }
+
+ disk->init_ok = TRUE;
+ }
+
+ status &= ~STA_NOINIT;
+ return status;
+}
+
+/*-----------------------------------------------------------------------*/
+/* Read Sector(s) */
+/*-----------------------------------------------------------------------*/
+
+static DRESULT usb_disk_read(
+ BYTE pdrv, /* Physical drive nmuber to identify the drive */
+ BYTE *buff, /* Data buffer to store read data */
+ DWORD sector, /* Start sector in LBA */
+ UINT count /* Number of sectors to read */
+)
+{
+ DRESULT status = RES_OK;
+ ff_usb_disk *disk = &usb_disk;
+ struct usbh_msc *msc_class = (struct usbh_msc *)usbh_find_class_instance(disk->disk_name);
+
+ if (msc_class)
+ {
+ if (0 > usbh_msc_scsi_read10(msc_class, sector, buff, count))
+ {
+ FF_ERROR("Read usb sector [%d-%d] failed: 0x%x.", sector, sector + count);
+ status = RES_ERROR;
+ }
+ }
+ else
+ {
+ status = RES_PARERR;
+ }
+
+ return status;
+}
+
+/*-----------------------------------------------------------------------*/
+/* Write Sector(s) */
+/*-----------------------------------------------------------------------*/
+
+static DRESULT usb_disk_write(
+ BYTE pdrv, /* Physical drive nmuber to identify the drive */
+ const BYTE *buff, /* Data to be written */
+ DWORD sector, /* Start sector in LBA */
+ UINT count /* Number of sectors to write */
+)
+{
+ DRESULT status = RES_OK;
+ ff_usb_disk *disk = &usb_disk;
+ struct usbh_msc *msc_class = (struct usbh_msc *)usbh_find_class_instance(disk->disk_name);
+
+ if (msc_class)
+ {
+ if (0 > usbh_msc_scsi_write10(msc_class, sector, buff, count))
+ {
+ FF_ERROR("Write usb sector [%d-%d] failed: 0x%x.", sector, sector + count);
+ status = RES_ERROR;
+ }
+ }
+ else
+ {
+ status = RES_PARERR;
+ }
+
+ return status;
+}
+
+/*-----------------------------------------------------------------------*/
+/* Miscellaneous Functions */
+/*-----------------------------------------------------------------------*/
+
+DRESULT usb_disk_ioctl(
+ BYTE pdrv, /* Physical drive nmuber (0..) */
+ BYTE cmd, /* Control code */
+ void *buff /* Buffer to send/receive control data */
+)
+{
+ DRESULT res;
+ ff_usb_disk *disk = &usb_disk;
+ struct usbh_msc *msc_class = (struct usbh_msc *)usbh_find_class_instance(disk->disk_name);
+
+ res = RES_PARERR;
+ if (NULL == msc_class)
+ {
+ return res;
+ }
+
+ switch (cmd)
+ {
+ case CTRL_SYNC: /* Nothing to do */
+ res = RES_OK;
+ break;
+
+ case GET_SECTOR_COUNT: /* Get number of sectors on the drive */
+ *(DWORD *)buff = msc_class->blocknum;
+ res = RES_OK;
+ break;
+
+ case GET_SECTOR_SIZE: /* Get size of sector for generic read/write */
+ *(WORD *)buff = msc_class->blocksize;
+ res = RES_OK;
+ break;
+
+ case GET_BLOCK_SIZE:
+ *(DWORD *)buff = 1; /* This is not flash storage that can be erase by command, return 1 */
+ res = RES_OK;
+ break;
+ }
+
+ return res;
+}
+
+static const ff_diskio_driver_t usb_disk_drv =
+{
+ .init = &usb_disk_initialize,
+ .status = &usb_disk_status,
+ .read = &usb_disk_read,
+ .write = &usb_disk_write,
+ .ioctl = &usb_disk_ioctl
+};
+
+void ff_diskio_register_usb(BYTE pdrv)
+{
+ ff_usb_disk *disk = &usb_disk;
+
+ disk->id = FUSB_FATFS_ID;
+ disk->init_ok = FALSE;
+ disk->pdrv = pdrv; /* assign volume for usb disk */
+ ff_diskio_register(pdrv, &usb_disk_drv);
+
+ FF_INFO("Create usb disk as driver-%d.", disk->pdrv);
+}
\ No newline at end of file
diff --git a/third-party/freertos/Kconfig b/third-party/freertos/Kconfig
new file mode 100644
index 0000000000000000000000000000000000000000..a04ab000f1bcc4e5cfd9b71886429e14febd8e68
--- /dev/null
+++ b/third-party/freertos/Kconfig
@@ -0,0 +1,198 @@
+
+
+ config FREERTOS_OPTIMIZED_SCHEDULER
+ bool "Enable FreeRTOS platform optimized scheduler"
+ default y
+ help
+ On most platforms there are instructions can speedup the ready task
+ searching. Enabling this option the FreeRTOS with this instructions
+ support will be built.
+
+ config FREERTOS_HZ
+ int "Tick rate (Hz)"
+ range 1 10000
+ default 1000
+ help
+ Select the tick rate at which FreeRTOS does pre-emptive context switching.
+
+ config FREERTOS_MAX_PRIORITIES
+ int "Max task priority"
+ range 1 32
+ default 32
+ help
+ Sets the maximum priority that can be assigned to a task. Tasks can be assigned a priority
+ from zero, which is the lowest priority, to (FREERTOS_MAX_PRIORITIES - 1), which is the highest
+ priority.
+
+ config FREERTOS_KERNEL_INTERRUPT_PRIORITIES
+ int "Kernel interrupt priority"
+ range 1 13
+ default 13
+ help
+ Sets the interrupt priority used by the tick interrupt, and must always be set to the
+ lowest possible interrupt priority.
+
+ config FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES
+ int "Max api call interrupt priority"
+ range 1 15
+ default 11
+ help
+ Sets the highest interrupt priority from which interrupt-safe FreeRTOS API functions can
+ be called.
+
+
+ config FREERTOS_THREAD_LOCAL_STORAGE_POINTERS
+ int "Number of thread local storage pointers"
+ range 1 256
+ default 1
+ help
+ FreeRTOS has the ability to store per-thread pointers in the task
+ control block. This controls the number of pointers available.
+
+ This value must be at least 1. Index 0 is reserved for use by the pthreads API
+ thread-local-storage. Other indexes can be used for any desired purpose.
+
+
+ config FREERTOS_MINIMAL_TASK_STACKSIZE
+ int "Minimal Task stack size"
+ range 768 32768
+ default 1024
+ help
+ The idle task has its own stack, sized in bytes. The default size is enough for most uses. Size can be
+ reduced to 768 bytes if no (or simple) FreeRTOS idle hooks are used and pthread local storage or FreeRTOS
+ local storage cleanup callbacks are not used.
+
+ The stack size may need to be increased above the default if the app installs idle or thread local storage
+ cleanup hooks that use a lot of stack memory.
+
+
+ config FREERTOS_MAX_TASK_NAME_LEN
+ int "Maximum task name length"
+ range 1 256
+ default 32
+ help
+ Changes the maximum task name length. Each task allocated will
+ include this many bytes for a task name. Using a shorter value
+ saves a small amount of RAM, a longer value allows more complex
+ names.
+
+ For most uses, the default of 16 is OK.
+
+
+ config FREERTOS_TIMER_TASK_PRIORITY
+ int "FreeRTOS timer task priority"
+ range 1 25
+ default 1
+ help
+ The timer service task (primarily) makes use of existing FreeRTOS features, allowing timer
+ functionality to be added to an application with minimal impact on the size of the application's
+ executable binary.
+
+ Use this constant to define the priority that the timer task will run at.
+
+ config FREERTOS_TIMER_TASK_STACK_DEPTH
+ int "FreeRTOS timer task stack size"
+ range 1536 32768
+ default 2048
+ help
+ The timer service task (primarily) makes use of existing FreeRTOS features, allowing timer
+ functionality to be added to an application with minimal impact on the size of the application's
+ executable binary.
+
+ Use this constant to define the size (in bytes) of the stack allocated for the timer task.
+
+ config FREERTOS_TIMER_QUEUE_LENGTH
+ int "FreeRTOS timer queue length"
+ range 5 20
+ default 10
+ help
+ FreeRTOS provides a set of timer related API functions. Many of these functions use a standard
+ FreeRTOS queue to send commands to the timer service task. The queue used for this purpose is
+ called the 'timer command queue'. The 'timer command queue' is private to the FreeRTOS timer
+ implementation, and cannot be accessed directly.
+
+ For most uses the default value of 10 is OK.
+
+ config FREERTOS_QUEUE_REGISTRY_SIZE
+ int "FreeRTOS queue registry size"
+ range 0 20
+ default 0
+ help
+ FreeRTOS uses the queue registry as a means for kernel aware debuggers to locate queues, semaphores,
+ and mutexes. The registry allows for a textual name to be associated with a queue for easy identification
+ within a debugging GUI. A value of 0 will disable queue registry functionality, and a value larger than 0
+ will specify the number of queues/semaphores/mutexes that the registry can hold.
+
+ config FREERTOS_GENERATE_RUN_TIME_STATS
+ bool "Enable FreeRTOS to collect run time stats"
+ default y
+ select FREERTOS_USE_TRACE_FACILITY
+ select FREERTOS_USE_STATS_FORMATTING_FUNCTIONS
+ help
+ If enabled, configGENERATE_RUN_TIME_STATS will be defined as 1 in
+ FreeRTOS. This will allow FreeRTOS to collect information regarding the
+ usage of processor time amongst FreeRTOS tasks.
+ The function vTaskGetRunTimeStats() will also be available
+ if FREERTOS_USE_STATS_FORMATTING_FUNCTIONS and
+ FREERTOS_USE_TRACE_FACILITY are enabled. vTaskGetRunTimeStats() will
+ display the run time of each task as a % of the total run time of all
+ CPUs (task run time / no of CPUs) / (total run time / 100 )
+
+ config FREERTOS_USE_TRACE_FACILITY
+ bool "Enable FreeRTOS trace facility"
+ default n
+ help
+ If enabled, configUSE_TRACE_FACILITY will be defined as 1 in FreeRTOS.
+ This will allow the usage of trace facility functions such as
+ uxTaskGetSystemState().
+
+ config FREERTOS_USE_STATS_FORMATTING_FUNCTIONS
+ bool "Enable FreeRTOS stats formatting functions"
+ depends on FREERTOS_USE_TRACE_FACILITY
+ default n
+ help
+ If enabled, configUSE_STATS_FORMATTING_FUNCTIONS will be defined as 1 in
+ FreeRTOS. This will allow the usage of stats formatting functions such
+ as vTaskList().
+
+ config FREERTOS_USE_TICKLESS_IDLE
+ bool "Tickless idle support"
+ default n
+ help
+ If power management support is enabled, FreeRTOS will be able to put
+ the system into light sleep mode when no tasks need to run for a number
+ of ticks. This number can be set using FREERTOS_IDLE_TIME_BEFORE_SLEEP option.
+ This feature is also known as "automatic light sleep".
+
+ Note that timers created using APIs may prevent the system from
+ entering sleep mode, even when no tasks need to run.
+ To skip unnecessary wake-up initialize a timer with the "skip_unhandled_events" option as true.
+
+ If disabled, automatic light sleep support will be disabled.
+
+ config FREERTOS_IDLE_TIME_BEFORE_SLEEP
+ int "Minimum number of ticks to enter sleep mode for"
+ depends on FREERTOS_USE_TICKLESS_IDLE
+ default 3
+ range 2 4294967295
+ # Minimal value is 2 because of a check in FreeRTOS.h (search configEXPECTED_IDLE_TIME_BEFORE_SLEEP)
+ help
+ FreeRTOS will enter light sleep mode if no tasks need to run for this number
+ of ticks.
+
+ config FREERTOS_TOTAL_HEAP_SIZE
+ int "Total amount of RAM available in the FreeRTOS heap, unit kbytes"
+ range 1 65535
+ default 10240
+ help
+ Set the total amount of RAM available in the FreeRTOS heap, unit kbytes, less than RAM_SIZE_MB.
+
+
+ config FREERTOS_TASK_FPU_SUPPORT
+ int "Use floating point support"
+ default 1
+ range 1 2
+ help
+ If set to 1, tasks are created without an FPU context and must call vPortTaskUsesFPU() to give
+ themselves an FPU context before using any FPU instructions.
+ If set to 2, all tasks will have an FPU context by default.
\ No newline at end of file
diff --git a/third-party/freertos/portable/GCC/ft_platform/aarch32/FreeRTOSConfig.h b/third-party/freertos/portable/GCC/ft_platform/FreeRTOSConfig.h
similarity index 62%
rename from third-party/freertos/portable/GCC/ft_platform/aarch32/FreeRTOSConfig.h
rename to third-party/freertos/portable/GCC/ft_platform/FreeRTOSConfig.h
index bf267016ee752e4332f15701d26f3bf32a1422d9..dce41b973e9a874dacd58be91a9255e1e8c31077 100644
--- a/third-party/freertos/portable/GCC/ft_platform/aarch32/FreeRTOSConfig.h
+++ b/third-party/freertos/portable/GCC/ft_platform/FreeRTOSConfig.h
@@ -28,9 +28,10 @@
#ifndef FREERTOS_CONFIG_H
#define FREERTOS_CONFIG_H
-#if !defined(__ASSEMBLER__)
-#include "fparameters.h"
-#include "finterrupt.h"
+#include "sdkconfig.h"
+#if !defined(__ASSEMBLER__)
+ #include "fparameters.h"
+ #include "finterrupt.h"
#endif
/*-----------------------------------------------------------
@@ -67,22 +68,35 @@
*
*/
-/* 在不安全group1 中,16 is steps ,3 是其中等级*/
-#define configKERNEL_INTERRUPT_PRIORITY IRQ_PRIORITY_VALUE_11
-/* 在不安全group1 中 ,0x8 ~0xb 不可以使用安全api(优先级越低越高)*/
-#define configMAX_API_CALL_INTERRUPT_PRIORITY IRQ_PRIORITY_VALUE_11
+/* the interrupt priority used by the tick interrupt */
+#define configKERNEL_INTERRUPT_PRIORITY ( CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES )
+/* the highest interrupt priority from which interrupt-safe FreeRTOS API functions can be called */
+#define configMAX_API_CALL_INTERRUPT_PRIORITY ( CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES )
-#define configUSE_PORT_OPTIMISED_TASK_SELECTION 1 //Method to select the next task
-#define configUSE_TICKLESS_IDLE 0 //disable tickless mode
-#define configTICK_RATE_HZ ((TickType_t)1000) //system timer rate 1ms
-#define configUSE_PREEMPTION 1 //preemption task
+#ifdef CONFIG_FREERTOS_OPTIMIZED_SCHEDULER
+ #define configUSE_PORT_OPTIMISED_TASK_SELECTION 1
+#endif
+
+#ifdef CONFIG_FREERTOS_USE_TICKLESS_IDLE
+ #define configUSE_TICKLESS_IDLE 1
+ #define configEXPECTED_IDLE_TIME_BEFORE_SLEEP CONFIG_FREERTOS_IDLE_TIME_BEFORE_SLEEP
+#endif
+
+#define configTICK_RATE_HZ ( CONFIG_FREERTOS_HZ )
+#define configUSE_PREEMPTION 1
#define configUSE_IDLE_HOOK 1
#define configUSE_TICK_HOOK 1
-#define configMAX_PRIORITIES (7)
-#define configMINIMAL_STACK_SIZE ((unsigned short)1024) //min task stack size 100*4 bytes
-#define configTOTAL_HEAP_SIZE (10 * 1024 * 1024) //total heap size
-#define configMAX_TASK_NAME_LEN (32)
-#define configUSE_TRACE_FACILITY 1 //启用可视化跟踪调试
+#define configMAX_PRIORITIES ( CONFIG_FREERTOS_MAX_PRIORITIES )
+#define configMINIMAL_STACK_SIZE ( CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE )
+#define configTOTAL_HEAP_SIZE ( CONFIG_FREERTOS_TOTAL_HEAP_SIZE * 1024)
+#define configMAX_TASK_NAME_LEN ( CONFIG_FREERTOS_MAX_TASK_NAME_LEN )
+#ifdef CONFIG_FREERTOS_USE_TRACE_FACILITY
+ #define configUSE_TRACE_FACILITY 1 /* Used by uxTaskGetSystemState(), and other trace facility functions */
+#endif
+
+#define configUSE_TASK_FPU_SUPPORT (CONFIG_FREERTOS_TASK_FPU_SUPPORT)
+
+
/* 与宏 configUSE_TRACE_FACILITY 同时为 1 时会编译下面 3 个函数
* prvWriteNameToBuffer()
* vTaskList(),
@@ -91,7 +105,7 @@
#define configUSE_16_BIT_TICKS 0 //use 32 bit ticktype
#define configIDLE_SHOULD_YIELD 1 //idle task would not yield for task with same priority
#define configUSE_MUTEXES 1
-#define configQUEUE_REGISTRY_SIZE 8 //max queue and semp member
+#define configQUEUE_REGISTRY_SIZE ( CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE )
#define configCHECK_FOR_STACK_OVERFLOW 0
#define configUSE_RECURSIVE_MUTEXES 1
#define configUSE_MALLOC_FAILED_HOOK 1
@@ -101,25 +115,15 @@
#define configSUPPORT_STATIC_ALLOCATION 1 //use dynamic memory allocation
#define configSUPPORT_DYNAMIC_ALLOCATION 1
-/* Include the query-heap CLI command to query the free heap space. */
-#define configINCLUDE_QUERY_HEAP_COMMAND 1
-
/* Co-routine definitions. */
#define configUSE_CO_ROUTINES 0 //disable co-routines
#define configMAX_CO_ROUTINE_PRIORITIES (2)
/* Software timer definitions. */
-#define configUSE_TIMERS 1 //use software timer
-#define configTIMER_TASK_PRIORITY (configMAX_PRIORITIES - 1)
-#define configTIMER_QUEUE_LENGTH 5
-#define configTIMER_TASK_STACK_DEPTH (configMINIMAL_STACK_SIZE * 2)
-
-/* If configUSE_TASK_FPU_SUPPORT is set to 1 (or undefined) then each task will
-be created without an FPU context, and a task must call vTaskUsesFPU() before
-making use of any FPU registers. If configUSE_TASK_FPU_SUPPORT is set to 2 then
-tasks are created with an FPU context by default, and calling vTaskUsesFPU() has
-no effect. */
-#define configUSE_TASK_FPU_SUPPORT 1
+#define configUSE_TIMERS 1
+#define configTIMER_TASK_PRIORITY ( CONFIG_FREERTOS_TIMER_TASK_PRIORITY )
+#define configTIMER_QUEUE_LENGTH ( CONFIG_FREERTOS_TIMER_QUEUE_LENGTH )
+#define configTIMER_TASK_STACK_DEPTH ( CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH )
/* Set the following definitions to 1 to include the API function, or zero
to exclude the API function. */
@@ -137,23 +141,29 @@ to exclude the API function. */
#define INCLUDE_xTaskGetHandle 1
#define INCLUDE_xSemaphoreGetMutexHolder 1
-#define configNUM_THREAD_LOCAL_STORAGE_POINTERS 5
+#define configNUM_THREAD_LOCAL_STORAGE_POINTERS ( CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS )
#define INCLUDE_xTaskGetIdleTaskHandle 1
/* This demo makes use of one or more example stats formatting functions. These
format the raw data provided by the uxTaskGetSystemState() function in to human
readable ASCII form. See the notes in the implementation of vTaskList() within
FreeRTOS/Source/tasks.c for limitations. */
-#define configUSE_STATS_FORMATTING_FUNCTIONS 1
+#ifdef CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS
+ #define configUSE_STATS_FORMATTING_FUNCTIONS 1 /* Used by vTaskList() */
+#endif
+
/* Run time stats are not generated. portCONFIGURE_TIMER_FOR_RUN_TIME_STATS and
portGET_RUN_TIME_COUNTER_VALUE must be defined if configGENERATE_RUN_TIME_STATS
is set to 1. */
-#define configGENERATE_RUN_TIME_STATS 1 //启用运行时间统计功能
+#ifdef CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS
+ #define configGENERATE_RUN_TIME_STATS 1
+#endif
+
#ifndef __ASSEMBLER__ // skip when preprocess asm
-extern volatile unsigned int gCpuRuntime;
-#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() (gCpuRuntime = 0ul)
-#define portGET_RUN_TIME_COUNTER_VALUE() gCpuRuntime
+ extern volatile unsigned int gCpuRuntime;
+ #define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() (gCpuRuntime = 0ul)
+ #define portGET_RUN_TIME_COUNTER_VALUE() gCpuRuntime
#endif
/* The size of the global output buffer that is available for use when there
@@ -177,13 +187,6 @@ header file. */
} while (0);
-/* If configTASK_RETURN_ADDRESS is not defined then a task that attempts to
-return from its implementing function will end up in a "task exit error"
-function - which contains a call to configASSERT(). However this can give GCC
-some problems when it tries to unwind the stack, as the exit error function has
-nothing to return to. To avoid this define configTASK_RETURN_ADDRESS to 0. */
-#define configTASK_RETURN_ADDRESS NULL
-
/****** Hardware specific settings. *******************************************/
/*
@@ -193,7 +196,6 @@ nothing to return to. To avoid this define configTASK_RETURN_ADDRESS to 0. */
* be installed as the peripheral's interrupt handler.
*/
-
#define configSETUP_TICK_INTERRUPT() \
do \
{ \
@@ -209,52 +211,27 @@ nothing to return to. To avoid this define configTASK_RETURN_ADDRESS to 0. */
vClearTickInterrupt(); \
}while (0)
-#define FreeRTOS_IRQ_Handler IRQHandler
-#define FreeRTOS_SWI_Handler SWIHandler
-#define configINTERRUPT_CONTROLLER_BASE_ADDRESS (0x71800000)
+#ifdef CONFIG_TARGET_ARMV8_AARCH32
+ #define FreeRTOS_IRQ_Handler IRQHandler
+ #define FreeRTOS_SWI_Handler SWIHandler
+#endif
+
+#ifdef CONFIG_TARGET_ARMV8_AARCH64
+ #define FreeRTOS_IRQ_Handler IRQInterruptHandler
+ #define FreeRTOS_SWI_Handler SynchronousInterruptHandler
+#endif
+
+/* The following constant describe the hardware, and are correct for the
+QEMU-Virt. */
+#define configINTERRUPT_CONTROLLER_BASE_ADDRESS (GICV3_DISTRIBUTOR_BASE_ADDR)
#define configINTERRUPT_CONTROLLER_CPU_INTERFACE_OFFSET (0x2000UL)
#define configUNIQUE_INTERRUPT_PRIORITIES 16
-/****** Network configuration settings - only used when the lwIP example is
-built. See the page that documents this demo on the http://www.FreeRTOS.org
-website for more information. ***********************************************/
-
-/* The priority for the task that unblocked by the MAC interrupt to process
-received packets. */
-#define configMAC_INPUT_TASK_PRIORITY (configMAX_PRIORITIES - 1)
-
-/* The priority of the task that runs the lwIP stack. */
-#define configLWIP_TASK_PRIORITY (configMAX_PRIORITIES - 2)
-
-/* The priority of the task that uses lwIP sockets to provide a simple command
-line interface. */
-#define configCLI_TASK_PRIORITY (tskIDLE_PRIORITY)
-
-/* MAC address configuration. */
-#define configMAC_ADDR0 0x00
-#define configMAC_ADDR1 0x13
-#define configMAC_ADDR2 0x14
-#define configMAC_ADDR3 0x15
-#define configMAC_ADDR4 0x15
-#define configMAC_ADDR5 0x16
-
-/* IP address configuration. */
-#define configIP_ADDR0 172
-#define configIP_ADDR1 25
-#define configIP_ADDR2 218
-#define configIP_ADDR3 200
-
-/* Netmask configuration. */
-#define configNET_MASK0 255
-#define configNET_MASK1 255
-#define configNET_MASK2 255
-#define configNET_MASK3 0
-
-#if !defined(__ASSEMBLER__)
-void vPrintString(const char *pcString);
-void vPrintStringAndNumber(const char *pcString, uint32_t ulValue);
-void vPrintf(const char *format, ...);
+#if !defined(__ASSEMBLER__)
+ void vPrintString(const char *pcString);
+ void vPrintStringAndNumber(const char *pcString, uint32_t ulValue);
+ void vPrintf(const char *format, ...);
#endif
#endif /* FREERTOS_CONFIG_H */
diff --git a/third-party/freertos/portable/GCC/ft_platform/aarch32/port.c b/third-party/freertos/portable/GCC/ft_platform/aarch32/port.c
index 98a87b880b952e84f7462a207265a0a3b53c9e89..3b5e1c13c0262724d51185fedbd1b8101af80676 100644
--- a/third-party/freertos/portable/GCC/ft_platform/aarch32/port.c
+++ b/third-party/freertos/portable/GCC/ft_platform/aarch32/port.c
@@ -28,56 +28,56 @@
/* Standard includes. */
#include
#include
+#include
#include "faarch32.h"
-
/* Scheduler includes. */
#include "FreeRTOS.h"
#include "task.h"
#ifndef configINTERRUPT_CONTROLLER_BASE_ADDRESS
-#error configINTERRUPT_CONTROLLER_BASE_ADDRESS must be defined. See https://www.FreeRTOS.org/Using-FreeRTOS-on-Cortex-A-Embedded-Processors.html
+ #error configINTERRUPT_CONTROLLER_BASE_ADDRESS must be defined. See https://www.FreeRTOS.org/Using-FreeRTOS-on-Cortex-A-Embedded-Processors.html
#endif
#ifndef configINTERRUPT_CONTROLLER_CPU_INTERFACE_OFFSET
-#error configINTERRUPT_CONTROLLER_CPU_INTERFACE_OFFSET must be defined. See https://www.FreeRTOS.org/Using-FreeRTOS-on-Cortex-A-Embedded-Processors.html
+ #error configINTERRUPT_CONTROLLER_CPU_INTERFACE_OFFSET must be defined. See https://www.FreeRTOS.org/Using-FreeRTOS-on-Cortex-A-Embedded-Processors.html
#endif
#ifndef configUNIQUE_INTERRUPT_PRIORITIES
-#error configUNIQUE_INTERRUPT_PRIORITIES must be defined. See https://www.FreeRTOS.org/Using-FreeRTOS-on-Cortex-A-Embedded-Processors.html
+ #error configUNIQUE_INTERRUPT_PRIORITIES must be defined. See https://www.FreeRTOS.org/Using-FreeRTOS-on-Cortex-A-Embedded-Processors.html
#endif
#ifndef configSETUP_TICK_INTERRUPT
-#error configSETUP_TICK_INTERRUPT() must be defined. See https://www.FreeRTOS.org/Using-FreeRTOS-on-Cortex-A-Embedded-Processors.html
+ #error configSETUP_TICK_INTERRUPT() must be defined. See https://www.FreeRTOS.org/Using-FreeRTOS-on-Cortex-A-Embedded-Processors.html
#endif /* configSETUP_TICK_INTERRUPT */
#ifndef configMAX_API_CALL_INTERRUPT_PRIORITY
-#error configMAX_API_CALL_INTERRUPT_PRIORITY must be defined. See https://www.FreeRTOS.org/Using-FreeRTOS-on-Cortex-A-Embedded-Processors.html
+ #error configMAX_API_CALL_INTERRUPT_PRIORITY must be defined. See https://www.FreeRTOS.org/Using-FreeRTOS-on-Cortex-A-Embedded-Processors.html
#endif
#if configMAX_API_CALL_INTERRUPT_PRIORITY == 0
-#error configMAX_API_CALL_INTERRUPT_PRIORITY must not be set to 0
+ #error configMAX_API_CALL_INTERRUPT_PRIORITY must not be set to 0
#endif
#if configMAX_API_CALL_INTERRUPT_PRIORITY > configUNIQUE_INTERRUPT_PRIORITIES
-#error configMAX_API_CALL_INTERRUPT_PRIORITY must be less than or equal to configUNIQUE_INTERRUPT_PRIORITIES as the lower the numeric priority value the higher the logical interrupt priority
+ #error configMAX_API_CALL_INTERRUPT_PRIORITY must be less than or equal to configUNIQUE_INTERRUPT_PRIORITIES as the lower the numeric priority value the higher the logical interrupt priority
#endif
#if configUSE_PORT_OPTIMISED_TASK_SELECTION == 1
-/* Check the configuration. */
-#if (configMAX_PRIORITIES > 32)
-#error configUSE_PORT_OPTIMISED_TASK_SELECTION can only be set to 1 when configMAX_PRIORITIES is less than or equal to 32. It is very rare that a system requires more than 10 to 15 difference priorities as tasks that share a priority will time slice.
-#endif
+ /* Check the configuration. */
+ #if (configMAX_PRIORITIES > 32)
+ #error configUSE_PORT_OPTIMISED_TASK_SELECTION can only be set to 1 when configMAX_PRIORITIES is less than or equal to 32. It is very rare that a system requires more than 10 to 15 difference priorities as tasks that share a priority will time slice.
+ #endif
#endif /* configUSE_PORT_OPTIMISED_TASK_SELECTION */
/* In case security extensions are implemented. */
#if configMAX_API_CALL_INTERRUPT_PRIORITY <= (configUNIQUE_INTERRUPT_PRIORITIES / 2)
-#error configMAX_API_CALL_INTERRUPT_PRIORITY must be greater than ( configUNIQUE_INTERRUPT_PRIORITIES / 2 )
+ #error configMAX_API_CALL_INTERRUPT_PRIORITY must be greater than ( configUNIQUE_INTERRUPT_PRIORITIES / 2 )
#endif
/* Some vendor specific files default configCLEAR_TICK_INTERRUPT() in
portmacro.h. */
#ifndef configCLEAR_TICK_INTERRUPT
-#define configCLEAR_TICK_INTERRUPT()
+ #define configCLEAR_TICK_INTERRUPT()
#endif
/* A critical section is exited when the critical section nesting count reaches
@@ -86,7 +86,7 @@ this value. */
/* In all GICs 255 can be written to the priority mask register to unmask all
(but the lowest) interrupt priority. */
-#define portUNMASK_VALUE (0xF0UL)
+#define portUNMASK_VALUE (0xFFUL)
/* Tasks are not created with a floating point context, but can be given a
floating point context after they have been created. A variable is stored as
@@ -116,26 +116,26 @@ mode. */
determined priority level. Sometimes it is necessary to turn interrupt off in
the CPU itself before modifying certain hardware registers. */
#define portCPU_IRQ_DISABLE() \
- __asm volatile("CPSID i" :: \
- : "memory"); \
- __asm volatile("DSB"); \
- __asm volatile("ISB");
+ __asm volatile("CPSID i" :: \
+ : "memory"); \
+ __asm volatile("DSB"); \
+ __asm volatile("ISB");
#define portCPU_IRQ_ENABLE() \
- __asm volatile("CPSIE i" :: \
- : "memory"); \
- __asm volatile("DSB"); \
- __asm volatile("ISB");
+ __asm volatile("CPSIE i" :: \
+ : "memory"); \
+ __asm volatile("DSB"); \
+ __asm volatile("ISB");
/* Macro to unmask all interrupt priorities. */
#define portCLEAR_INTERRUPT_MASK() \
- { \
- portCPU_IRQ_DISABLE(); \
- sys_icc_pmr_set(portUNMASK_VALUE); \
- __asm volatile("DSB \n" \
- "ISB \n"); \
- portCPU_IRQ_ENABLE(); \
- }
+ { \
+ portCPU_IRQ_DISABLE(); \
+ sys_icc_pmr_set(portUNMASK_VALUE); \
+ __asm volatile("DSB \n" \
+ "ISB \n"); \
+ portCPU_IRQ_ENABLE(); \
+ }
/* Hardware specifics used when sanity checking the configuration. */
#define portINTERRUPT_PRIORITY_REGISTER_OFFSET (0x400UL + 32UL) //
@@ -146,9 +146,9 @@ the CPU itself before modifying certain hardware registers. */
prvTaskExitError() in case it messes up unwinding of the stack in the
debugger. */
#ifdef configTASK_RETURN_ADDRESS
-#define portTASK_RETURN_ADDRESS configTASK_RETURN_ADDRESS
+ #define portTASK_RETURN_ADDRESS configTASK_RETURN_ADDRESS
#else
-#define portTASK_RETURN_ADDRESS prvTaskExitError
+ #define portTASK_RETURN_ADDRESS prvTaskExitError
#endif
/* The space on the stack required to hold the FPU registers. This is 32 64-bit
@@ -209,11 +209,13 @@ volatile uint32_t ulPortYieldRequired = pdFALSE;
if the nesting depth is 0. */
volatile uint32_t ulPortInterruptNesting = 0UL;
+
+#define PRIORITY_TRANSLATE_SET(x) ((((x)>> 1) | 0x80) & 0xff)
+
+#define PRIORITY_TRANSLATE_GET(x) (((x)<< 1) & 0xff)
+
/* Used in the asm file. */
-// __attribute__((used)) const uint32_t ulICCIAR = portICCIAR_INTERRUPT_ACKNOWLEDGE_REGISTER_ADDRESS;
-// __attribute__((used)) const uint32_t ulICCEOIR = portICCEOIR_END_OF_INTERRUPT_REGISTER_ADDRESS;
-// __attribute__((used)) const uint32_t ulICCPMR = portICCPMR_PRIORITY_MASK_REGISTER_ADDRESS;
-__attribute__((used)) const uint32_t ulMaxAPIPriorityMask = (configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT);
+__attribute__((used)) const uint32_t ulMaxAPIPriorityMask = PRIORITY_TRANSLATE_SET(configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT);
/*-----------------------------------------------------------*/
@@ -222,230 +224,229 @@ __attribute__((used)) const uint32_t ulMaxAPIPriorityMask = (configMAX_API_CALL_
*/
StackType_t *pxPortInitialiseStack(StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters)
{
- /* Setup the initial stack of the task. The stack is set exactly as
- expected by the portRESTORE_CONTEXT() macro.
-
- The fist real value on the stack is the status register, which is set for
- system mode, with interrupts enabled. A few NULLs are added first to ensure
- GDB does not try decoding a non-existent return address. */
- *pxTopOfStack = (StackType_t)NULL;
- pxTopOfStack--;
- *pxTopOfStack = (StackType_t)NULL;
- pxTopOfStack--;
- *pxTopOfStack = (StackType_t)NULL;
- pxTopOfStack--;
- *pxTopOfStack = (StackType_t)portINITIAL_SPSR;
-
- if (((uint32_t)pxCode & portTHUMB_MODE_ADDRESS) != 0x00UL)
- {
- /* The task will start in THUMB mode. */
- *pxTopOfStack |= portTHUMB_MODE_BIT;
- }
-
- pxTopOfStack--;
-
- /* Next the return address, which in this case is the start of the task. */
- *pxTopOfStack = (StackType_t)pxCode;
- pxTopOfStack--;
-
- /* Next all the registers other than the stack pointer. */
- *pxTopOfStack = (StackType_t)portTASK_RETURN_ADDRESS; /* R14 */
- pxTopOfStack--;
- *pxTopOfStack = (StackType_t)0x12121212; /* R12 */
- pxTopOfStack--;
- *pxTopOfStack = (StackType_t)0x11111111; /* R11 */
- pxTopOfStack--;
- *pxTopOfStack = (StackType_t)0x10101010; /* R10 */
- pxTopOfStack--;
- *pxTopOfStack = (StackType_t)0x09090909; /* R9 */
- pxTopOfStack--;
- *pxTopOfStack = (StackType_t)0x08080808; /* R8 */
- pxTopOfStack--;
- *pxTopOfStack = (StackType_t)0x07070707; /* R7 */
- pxTopOfStack--;
- *pxTopOfStack = (StackType_t)0x06060606; /* R6 */
- pxTopOfStack--;
- *pxTopOfStack = (StackType_t)0x05050505; /* R5 */
- pxTopOfStack--;
- *pxTopOfStack = (StackType_t)0x04040404; /* R4 */
- pxTopOfStack--;
- *pxTopOfStack = (StackType_t)0x03030303; /* R3 */
- pxTopOfStack--;
- *pxTopOfStack = (StackType_t)0x02020202; /* R2 */
- pxTopOfStack--;
- *pxTopOfStack = (StackType_t)0x01010101; /* R1 */
- pxTopOfStack--;
- *pxTopOfStack = (StackType_t)pvParameters; /* R0 */
- pxTopOfStack--;
-
- /* The task will start with a critical nesting count of 0 as interrupts are
- enabled. */
- *pxTopOfStack = portNO_CRITICAL_NESTING;
+ /* Setup the initial stack of the task. The stack is set exactly as
+ expected by the portRESTORE_CONTEXT() macro.
+ The fist real value on the stack is the status register, which is set for
+ system mode, with interrupts enabled. A few NULLs are added first to ensure
+ GDB does not try decoding a non-existent return address. */
+ *pxTopOfStack = (StackType_t)NULL;
+ pxTopOfStack--;
+ *pxTopOfStack = (StackType_t)NULL;
+ pxTopOfStack--;
+ *pxTopOfStack = (StackType_t)NULL;
+ pxTopOfStack--;
+ *pxTopOfStack = (StackType_t)portINITIAL_SPSR;
+
+ if (((uint32_t)pxCode & portTHUMB_MODE_ADDRESS) != 0x00UL)
+ {
+ /* The task will start in THUMB mode. */
+ *pxTopOfStack |= portTHUMB_MODE_BIT;
+ }
+
+ pxTopOfStack--;
+
+ /* Next the return address, which in this case is the start of the task. */
+ *pxTopOfStack = (StackType_t)pxCode;
+ pxTopOfStack--;
+
+ /* Next all the registers other than the stack pointer. */
+ *pxTopOfStack = (StackType_t)portTASK_RETURN_ADDRESS; /* R14 */
+ pxTopOfStack--;
+ *pxTopOfStack = (StackType_t)0x12121212; /* R12 */
+ pxTopOfStack--;
+ *pxTopOfStack = (StackType_t)0x11111111; /* R11 */
+ pxTopOfStack--;
+ *pxTopOfStack = (StackType_t)0x10101010; /* R10 */
+ pxTopOfStack--;
+ *pxTopOfStack = (StackType_t)0x09090909; /* R9 */
+ pxTopOfStack--;
+ *pxTopOfStack = (StackType_t)0x08080808; /* R8 */
+ pxTopOfStack--;
+ *pxTopOfStack = (StackType_t)0x07070707; /* R7 */
+ pxTopOfStack--;
+ *pxTopOfStack = (StackType_t)0x06060606; /* R6 */
+ pxTopOfStack--;
+ *pxTopOfStack = (StackType_t)0x05050505; /* R5 */
+ pxTopOfStack--;
+ *pxTopOfStack = (StackType_t)0x04040404; /* R4 */
+ pxTopOfStack--;
+ *pxTopOfStack = (StackType_t)0x03030303; /* R3 */
+ pxTopOfStack--;
+ *pxTopOfStack = (StackType_t)0x02020202; /* R2 */
+ pxTopOfStack--;
+ *pxTopOfStack = (StackType_t)0x01010101; /* R1 */
+ pxTopOfStack--;
+ *pxTopOfStack = (StackType_t)pvParameters; /* R0 */
+ pxTopOfStack--;
+
+ /* The task will start with a critical nesting count of 0 as interrupts are
+ enabled. */
+ *pxTopOfStack = portNO_CRITICAL_NESTING;
#if (configUSE_TASK_FPU_SUPPORT == 1)
- {
- /* The task will start without a floating point context. A task that
- uses the floating point hardware must call vPortTaskUsesFPU() before
- executing any floating point instructions. */
- pxTopOfStack--;
- *pxTopOfStack = portNO_FLOATING_POINT_CONTEXT;
- }
+ {
+ /* The task will start without a floating point context. A task that
+ uses the floating point hardware must call vPortTaskUsesFPU() before
+ executing any floating point instructions. */
+ pxTopOfStack--;
+ *pxTopOfStack = portNO_FLOATING_POINT_CONTEXT;
+ }
#elif (configUSE_TASK_FPU_SUPPORT == 2)
- {
- /* The task will start with a floating point context. Leave enough
- space for the registers - and ensure they are initialised to 0. */
- pxTopOfStack -= portFPU_REGISTER_WORDS;
- memset(pxTopOfStack, 0x00, portFPU_REGISTER_WORDS * sizeof(StackType_t));
-
- pxTopOfStack--;
- *pxTopOfStack = pdTRUE;
- ulPortTaskHasFPUContext = pdTRUE;
- }
+ {
+ /* The task will start with a floating point context. Leave enough
+ space for the registers - and ensure they are initialised to 0. */
+ pxTopOfStack -= portFPU_REGISTER_WORDS;
+ memset(pxTopOfStack, 0x00, portFPU_REGISTER_WORDS * sizeof(StackType_t));
+
+ pxTopOfStack--;
+ *pxTopOfStack = pdTRUE;
+ ulPortTaskHasFPUContext = pdTRUE;
+ }
#else
- {
+ {
#error Invalid configUSE_TASK_FPU_SUPPORT setting - configUSE_TASK_FPU_SUPPORT must be set to 1, 2, or left undefined.
- }
+ }
#endif
- return pxTopOfStack;
+ return pxTopOfStack;
}
/*-----------------------------------------------------------*/
static void prvTaskExitError(void)
{
- /* A function that implements a task must not exit or attempt to return to
- its caller as there is nothing to return to. If a task wants to exit it
- should instead call vTaskDelete( NULL ).
-
- Artificially force an assert() to be triggered if configASSERT() is
- defined, then stop here so application writers can catch the error. */
- configASSERT(ulPortInterruptNesting == ~0UL);
- portDISABLE_INTERRUPTS();
- for (;;)
- ;
+ /* A function that implements a task must not exit or attempt to return to
+ its caller as there is nothing to return to. If a task wants to exit it
+ should instead call vTaskDelete( NULL ).
+
+ Artificially force an assert() to be triggered if configASSERT() is
+ defined, then stop here so application writers can catch the error. */
+ configASSERT(ulPortInterruptNesting == ~0UL);
+ portDISABLE_INTERRUPTS();
+ for (;;)
+ ;
}
/*-----------------------------------------------------------*/
BaseType_t xPortStartScheduler(void)
{
- uint32_t ulAPSR;
-
- /* Only continue if the CPU is not in User mode. The CPU must be in a
- Privileged mode for the scheduler to start. */
- __asm volatile("MRS %0, APSR"
- : "=r"(ulAPSR)::"memory");
-
- ulAPSR &= portAPSR_MODE_BITS_MASK;
-
- configASSERT(ulAPSR != portAPSR_USER_MODE);
-
- if (ulAPSR != portAPSR_USER_MODE)
- {
- /* Only continue if the binary point value is set to its lowest possible
- setting. See the comments in vPortValidateInterruptPriority() below for
- more information. */
-
- configASSERT((sys_icc_bpr_get() & portBINARY_POINT_BITS) <= portMAX_BINARY_POINT_VALUE);
-
- if ((sys_icc_bpr_get() & portBINARY_POINT_BITS) <= portMAX_BINARY_POINT_VALUE)
- {
- /* Interrupts are turned off in the CPU itself to ensure tick does
- not execute while the scheduler is being started. Interrupts are
- automatically turned back on in the CPU when the first task starts
- executing. */
- portCPU_IRQ_DISABLE();
-
- /* Start the timer that generates the tick ISR. */
- configSETUP_TICK_INTERRUPT();
-
- /* Start the first task executing. */
- vPortRestoreTaskContext();
- }
- }
-
- /* Will only get here if vTaskStartScheduler() was called with the CPU in
- a non-privileged mode or the binary point register was not set to its lowest
- possible value. prvTaskExitError() is referenced to prevent a compiler
- warning about it being defined but not referenced in the case that the user
- defines their own exit address. */
- (void)prvTaskExitError;
- return 0;
+ uint32_t ulAPSR;
+
+ /* Only continue if the CPU is not in User mode. The CPU must be in a
+ Privileged mode for the scheduler to start. */
+ __asm volatile("MRS %0, APSR"
+ : "=r"(ulAPSR)::"memory");
+
+ ulAPSR &= portAPSR_MODE_BITS_MASK;
+
+ configASSERT(ulAPSR != portAPSR_USER_MODE);
+
+ if (ulAPSR != portAPSR_USER_MODE)
+ {
+ /* Only continue if the binary point value is set to its lowest possible
+ setting. See the comments in vPortValidateInterruptPriority() below for
+ more information. */
+
+ configASSERT((sys_icc_bpr_get() & portBINARY_POINT_BITS) <= portMAX_BINARY_POINT_VALUE);
+
+ if ((sys_icc_bpr_get() & portBINARY_POINT_BITS) <= portMAX_BINARY_POINT_VALUE)
+ {
+ /* Interrupts are turned off in the CPU itself to ensure tick does
+ not execute while the scheduler is being started. Interrupts are
+ automatically turned back on in the CPU when the first task starts
+ executing. */
+ portCPU_IRQ_DISABLE();
+
+ /* Start the timer that generates the tick ISR. */
+ configSETUP_TICK_INTERRUPT();
+
+ /* Start the first task executing. */
+ vPortRestoreTaskContext();
+ }
+ }
+
+ /* Will only get here if vTaskStartScheduler() was called with the CPU in
+ a non-privileged mode or the binary point register was not set to its lowest
+ possible value. prvTaskExitError() is referenced to prevent a compiler
+ warning about it being defined but not referenced in the case that the user
+ defines their own exit address. */
+ (void)prvTaskExitError;
+ return 0;
}
/*-----------------------------------------------------------*/
void vPortEndScheduler(void)
{
- /* Not implemented in ports where there is nothing to return to.
- Artificially force an assert. */
- configASSERT(ulCriticalNesting == 1000UL);
+ /* Not implemented in ports where there is nothing to return to.
+ Artificially force an assert. */
+ configASSERT(ulCriticalNesting == 1000UL);
}
/*-----------------------------------------------------------*/
void vPortEnterCritical(void)
{
- /* Mask interrupts up to the max syscall interrupt priority. */
- ulPortSetInterruptMask();
-
- /* Now interrupts are disabled ulCriticalNesting can be accessed
- directly. Increment ulCriticalNesting to keep a count of how many times
- portENTER_CRITICAL() has been called. */
- ulCriticalNesting++;
-
- /* This is not the interrupt safe version of the enter critical function so
- assert() if it is being called from an interrupt context. Only API
- functions that end in "FromISR" can be used in an interrupt. Only assert if
- the critical nesting count is 1 to protect against recursive calls if the
- assert function also uses a critical section. */
- if (ulCriticalNesting == 1)
- {
- configASSERT(ulPortInterruptNesting == 0);
- }
+ /* Mask interrupts up to the max syscall interrupt priority. */
+ ulPortSetInterruptMask();
+
+ /* Now interrupts are disabled ulCriticalNesting can be accessed
+ directly. Increment ulCriticalNesting to keep a count of how many times
+ portENTER_CRITICAL() has been called. */
+ ulCriticalNesting++;
+
+ /* This is not the interrupt safe version of the enter critical function so
+ assert() if it is being called from an interrupt context. Only API
+ functions that end in "FromISR" can be used in an interrupt. Only assert if
+ the critical nesting count is 1 to protect against recursive calls if the
+ assert function also uses a critical section. */
+ if (ulCriticalNesting == 1)
+ {
+ configASSERT(ulPortInterruptNesting == 0);
+ }
}
/*-----------------------------------------------------------*/
void vPortExitCritical(void)
{
- if (ulCriticalNesting > portNO_CRITICAL_NESTING)
- {
- /* Decrement the nesting count as the critical section is being
- exited. */
- ulCriticalNesting--;
-
- /* If the nesting level has reached zero then all interrupt
- priorities must be re-enabled. */
- if (ulCriticalNesting == portNO_CRITICAL_NESTING)
- {
- /* Critical nesting has reached zero so all interrupt priorities
- should be unmasked. */
- portCLEAR_INTERRUPT_MASK();
- }
- }
+ if (ulCriticalNesting > portNO_CRITICAL_NESTING)
+ {
+ /* Decrement the nesting count as the critical section is being
+ exited. */
+ ulCriticalNesting--;
+
+ /* If the nesting level has reached zero then all interrupt
+ priorities must be re-enabled. */
+ if (ulCriticalNesting == portNO_CRITICAL_NESTING)
+ {
+ /* Critical nesting has reached zero so all interrupt priorities
+ should be unmasked. */
+ portCLEAR_INTERRUPT_MASK();
+ }
+ }
}
/*-----------------------------------------------------------*/
void FreeRTOS_Tick_Handler(void)
{
- /* Set interrupt mask before altering scheduler structures. The tick
- handler runs at the lowest priority, so interrupts cannot already be masked,
- so there is no need to save and restore the current mask value. It is
- necessary to turn off interrupts in the CPU itself while the ICCPMR is being
- updated. */
- portCPU_IRQ_DISABLE();
- sys_icc_pmr_set((uint32_t)(configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT));
- // portICCPMR_PRIORITY_MASK_REGISTER = (uint32_t)(configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT);
- __asm volatile("dsb \n"
- "isb \n" ::
- : "memory");
- portCPU_IRQ_ENABLE();
- /* Increment the RTOS tick. */
- if (xTaskIncrementTick() != pdFALSE)
- {
- ulPortYieldRequired = pdTRUE;
- }
-
- /* Ensure all interrupt priorities are active again. */
- portCLEAR_INTERRUPT_MASK();
- configCLEAR_TICK_INTERRUPT();
+ /* Set interrupt mask before altering scheduler structures. The tick
+ handler runs at the lowest priority, so interrupts cannot already be masked,
+ so there is no need to save and restore the current mask value. It is
+ necessary to turn off interrupts in the CPU itself while the ICCPMR is being
+ updated. */
+ portCPU_IRQ_DISABLE();
+ sys_icc_pmr_set((uint32_t)(configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT));
+ // portICCPMR_PRIORITY_MASK_REGISTER = (uint32_t)(configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT);
+ __asm volatile("dsb \n"
+ "isb \n" ::
+ : "memory");
+ portCPU_IRQ_ENABLE();
+ /* Increment the RTOS tick. */
+ if (xTaskIncrementTick() != pdFALSE)
+ {
+ ulPortYieldRequired = pdTRUE;
+ }
+
+ /* Ensure all interrupt priorities are active again. */
+ portCLEAR_INTERRUPT_MASK();
+ configCLEAR_TICK_INTERRUPT();
}
/*-----------------------------------------------------------*/
@@ -453,15 +454,15 @@ void FreeRTOS_Tick_Handler(void)
void vPortTaskUsesFPU(void)
{
- uint32_t ulInitialFPSCR = 0;
+ uint32_t ulInitialFPSCR = 0;
- /* A task is registering the fact that it needs an FPU context. Set the
- FPU flag (which is saved as part of the task context). */
- ulPortTaskHasFPUContext = pdTRUE;
+ /* A task is registering the fact that it needs an FPU context. Set the
+ FPU flag (which is saved as part of the task context). */
+ ulPortTaskHasFPUContext = pdTRUE;
- /* Initialise the floating point status register. */
- __asm volatile("FMXR FPSCR, %0" ::"r"(ulInitialFPSCR)
- : "memory");
+ /* Initialise the floating point status register. */
+ __asm volatile("FMXR FPSCR, %0" ::"r"(ulInitialFPSCR)
+ : "memory");
}
#endif /* configUSE_TASK_FPU_SUPPORT */
@@ -469,37 +470,61 @@ void vPortTaskUsesFPU(void)
void vPortClearInterruptMask(uint32_t ulNewMaskValue)
{
- if (ulNewMaskValue == pdFALSE)
- {
- portCLEAR_INTERRUPT_MASK();
- }
+ if (ulNewMaskValue == pdFALSE)
+ {
+ portCLEAR_INTERRUPT_MASK();
+ }
}
/*-----------------------------------------------------------*/
+/*-----------------------------------------------------------*/
+/*
+Set current interrupt priority mask and translate, ICC_PMR
+• The value is right-shifted by one bit.
+• Bit [7] of the value is set to 1.
+*/
+void vPortSetPriorityMask(uint32_t value)
+{
+ uint32_t priority = PRIORITY_TRANSLATE_SET(value);
+ sys_icc_pmr_set(priority);
+}
+
+/* Get current interrupt priority mask and translate, ICC_PMR, priority << portPRIORITY_SHIFT */
+uint32_t vPortGetPriorityMask(void)
+{
+ return PRIORITY_TRANSLATE_GET(sys_icc_pmr_get());
+}
+
+/* Get current interrupt priority and translate, ICC_RPR, priority << portPRIORITY_SHIFT */
+uint32_t vPortGetCurrentPriority(void)
+{
+ return PRIORITY_TRANSLATE_GET(sys_icc_rpr_get());
+}
+
+
+
uint32_t ulPortSetInterruptMask(void)
{
- uint32_t ulReturn;
-
- /* Interrupt in the CPU must be turned off while the ICCPMR is being
- updated. */
- portCPU_IRQ_DISABLE();
- if (sys_icc_pmr_get() == (uint32_t)(configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT))
- {
- /* Interrupts were already masked. */
- ulReturn = pdTRUE;
- }
- else
- {
- ulReturn = pdFALSE;
- sys_icc_pmr_set((uint32_t)(configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT));
- // portICCPMR_PRIORITY_MASK_REGISTER = (uint32_t)(configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT);
- __asm volatile("dsb \n"
- "isb \n" ::
- : "memory");
- }
- portCPU_IRQ_ENABLE();
-
- return ulReturn;
+ uint32_t ulReturn;
+
+ /* Interrupt in the CPU must be turned off while the ICCPMR is being
+ updated. */
+ portCPU_IRQ_DISABLE();
+ if (vPortGetPriorityMask() == (uint32_t)(configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT))
+ {
+ /* Interrupts were already masked. */
+ ulReturn = pdTRUE;
+ }
+ else
+ {
+ ulReturn = pdFALSE;
+ vPortSetPriorityMask((uint32_t)(configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT));
+ __asm volatile("dsb \n"
+ "isb \n" ::
+ : "memory");
+ }
+ portCPU_IRQ_ENABLE();
+ return ulReturn;
}
/*-----------------------------------------------------------*/
@@ -507,33 +532,33 @@ uint32_t ulPortSetInterruptMask(void)
void vPortValidateInterruptPriority(void)
{
- /* The following assertion will fail if a service routine (ISR) for
- an interrupt that has been assigned a priority above
- configMAX_SYSCALL_INTERRUPT_PRIORITY calls an ISR safe FreeRTOS API
- function. ISR safe FreeRTOS API functions must *only* be called
- from interrupts that have been assigned a priority at or below
- configMAX_SYSCALL_INTERRUPT_PRIORITY.
-
- Numerically low interrupt priority numbers represent logically high
- interrupt priorities, therefore the priority of the interrupt must
- be set to a value equal to or numerically *higher* than
- configMAX_SYSCALL_INTERRUPT_PRIORITY.
-
- FreeRTOS maintains separate thread and ISR API functions to ensure
- interrupt entry is as fast and simple as possible. */
- configASSERT(sys_icc_rpr_get() >= (uint32_t)(configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT));
-
- /* Priority grouping: The interrupt controller (GIC) allows the bits
- that define each interrupt's priority to be split between bits that
- define the interrupt's pre-emption priority bits and bits that define
- the interrupt's sub-priority. For simplicity all bits must be defined
- to be pre-emption priority bits. The following assertion will fail if
- this is not the case (if some bits represent a sub-priority).
-
- The priority grouping is configured by the GIC's binary point register
- (ICCBPR). Writting 0 to ICCBPR will ensure it is set to its lowest
- possible value (which may be above 0). */
- configASSERT((sys_icc_bpr_get() & portBINARY_POINT_BITS) <= portMAX_BINARY_POINT_VALUE);
+ /* The following assertion will fail if a service routine (ISR) for
+ an interrupt that has been assigned a priority above
+ configMAX_SYSCALL_INTERRUPT_PRIORITY calls an ISR safe FreeRTOS API
+ function. ISR safe FreeRTOS API functions must *only* be called
+ from interrupts that have been assigned a priority at or below
+ configMAX_SYSCALL_INTERRUPT_PRIORITY.
+
+ Numerically low interrupt priority numbers represent logically high
+ interrupt priorities, therefore the priority of the interrupt must
+ be set to a value equal to or numerically *higher* than
+ configMAX_SYSCALL_INTERRUPT_PRIORITY.
+
+ FreeRTOS maintains separate thread and ISR API functions to ensure
+ interrupt entry is as fast and simple as possible. */
+ configASSERT(vPortGetCurrentPriority() >= (uint32_t)(configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT));
+
+ /* Priority grouping: The interrupt controller (GIC) allows the bits
+ that define each interrupt's priority to be split between bits that
+ define the interrupt's pre-emption priority bits and bits that define
+ the interrupt's sub-priority. For simplicity all bits must be defined
+ to be pre-emption priority bits. The following assertion will fail if
+ this is not the case (if some bits represent a sub-priority).
+
+ The priority grouping is configured by the GIC's binary point register
+ (ICCBPR). Writting 0 to ICCBPR will ensure it is set to its lowest
+ possible value (which may be above 0). */
+ configASSERT((sys_icc_bpr_get() & portBINARY_POINT_BITS) <= portMAX_BINARY_POINT_VALUE);
}
#endif /* configASSERT_DEFINED */
diff --git a/third-party/freertos/portable/GCC/ft_platform/aarch32/portASM.S b/third-party/freertos/portable/GCC/ft_platform/aarch32/portASM.S
index 9ecf83e4fd0063595ee85ef645e30e4c4d897812..77bf3a9eadb4ce8b2743f209199d05e8c22df23b 100644
--- a/third-party/freertos/portable/GCC/ft_platform/aarch32/portASM.S
+++ b/third-party/freertos/portable/GCC/ft_platform/aarch32/portASM.S
@@ -73,6 +73,7 @@
FMRXNE R1, FPSCR
VPUSHNE {D0-D15}
VPUSHNE {D16-D31}
+
PUSHNE {R1}
diff --git a/third-party/freertos/portable/GCC/ft_platform/aarch32/portmacro.h b/third-party/freertos/portable/GCC/ft_platform/aarch32/portmacro.h
index bbf98f732ab697c268fffaeed2236738fd761783..2af406a221b28421ed8c94b29d56f44a40b8dead 100644
--- a/third-party/freertos/portable/GCC/ft_platform/aarch32/portmacro.h
+++ b/third-party/freertos/portable/GCC/ft_platform/aarch32/portmacro.h
@@ -52,11 +52,11 @@ extern "C"
#define portSTACK_TYPE uint32_t
#define portBASE_TYPE long
- typedef portSTACK_TYPE StackType_t;
- typedef long BaseType_t;
- typedef unsigned long UBaseType_t;
+typedef portSTACK_TYPE StackType_t;
+typedef long BaseType_t;
+typedef unsigned long UBaseType_t;
- typedef uint32_t TickType_t;
+typedef uint32_t TickType_t;
#define portMAX_DELAY (TickType_t)0xffffffffUL
/* 32-bit tick type on a 32-bit architecture, so reads of the tick count do
@@ -76,28 +76,28 @@ not need to be guarded with a critical section. */
/* Called at the end of an ISR that can cause a context switch. */
#define portEND_SWITCHING_ISR(xSwitchRequired) \
- { \
- extern uint32_t ulPortYieldRequired; \
+ { \
+ extern uint32_t ulPortYieldRequired; \
\
- if (xSwitchRequired != pdFALSE) \
- { \
- ulPortYieldRequired = pdTRUE; \
- } \
- }
+ if (xSwitchRequired != pdFALSE) \
+ { \
+ ulPortYieldRequired = pdTRUE; \
+ } \
+ }
#define portYIELD_FROM_ISR(x) portEND_SWITCHING_ISR(x)
#define portYIELD() __asm volatile("SWI 0" :: \
- : "memory");
+ : "memory");
- /*-----------------------------------------------------------
- * Critical section control
- *----------------------------------------------------------*/
+/*-----------------------------------------------------------
+* Critical section control
+*----------------------------------------------------------*/
- extern void vPortEnterCritical(void);
- extern void vPortExitCritical(void);
- extern uint32_t ulPortSetInterruptMask(void);
- extern void vPortClearInterruptMask(uint32_t ulNewMaskValue);
- extern void vPortInstallFreeRTOSVectorTable(void);
+extern void vPortEnterCritical(void);
+extern void vPortExitCritical(void);
+extern uint32_t ulPortSetInterruptMask(void);
+extern void vPortClearInterruptMask(uint32_t ulNewMaskValue);
+extern void vPortInstallFreeRTOSVectorTable(void);
/* These macros do not globally disable/enable interrupts. They do mask off
interrupts that have a priority below configMAX_API_CALL_INTERRUPT_PRIORITY. */
@@ -105,8 +105,6 @@ interrupts that have a priority below configMAX_API_CALL_INTERRUPT_PRIORITY. */
#define portEXIT_CRITICAL() vPortExitCritical();
#define portDISABLE_INTERRUPTS() ulPortSetInterruptMask()
#define portENABLE_INTERRUPTS() vPortClearInterruptMask(0)
-#define portSET_INTERRUPT_MASK_FROM_ISR() ulPortSetInterruptMask()
-#define portCLEAR_INTERRUPT_MASK_FROM_ISR(x) vPortClearInterruptMask(x)
/*-----------------------------------------------------------*/
@@ -116,9 +114,9 @@ macros is used. */
#define portTASK_FUNCTION_PROTO(vFunction, pvParameters) void vFunction(void *pvParameters)
#define portTASK_FUNCTION(vFunction, pvParameters) void vFunction(void *pvParameters)
- /* Prototype of the FreeRTOS tick handler. This must be installed as the
+/* Prototype of the FreeRTOS tick handler. This must be installed as the
handler for whichever peripheral is used to generate the RTOS tick. */
- void FreeRTOS_Tick_Handler(void);
+void FreeRTOS_Tick_Handler(void);
/* If configUSE_TASK_FPU_SUPPORT is set to 1 (or left undefined) then tasks are
created without an FPU context and must call vPortTaskUsesFPU() to give
@@ -126,10 +124,10 @@ themselves an FPU context before using any FPU instructions. If
configUSE_TASK_FPU_SUPPORT is set to 2 then all tasks will have an FPU context
by default. */
#if (configUSE_TASK_FPU_SUPPORT != 2)
- void vPortTaskUsesFPU(void);
+void vPortTaskUsesFPU(void);
#else
/* Each task has an FPU context already, so define this function away to
- nothing to prevent it being called accidentally. */
+ nothing to prevent it being called accidentally. */
#define vPortTaskUsesFPU()
#endif
#define portTASK_USES_FLOATING_POINT() vPortTaskUsesFPU()
@@ -148,14 +146,14 @@ by default. */
#define portRECORD_READY_PRIORITY(uxPriority, uxReadyPriorities) (uxReadyPriorities) |= (1UL << (uxPriority))
#define portRESET_READY_PRIORITY(uxPriority, uxReadyPriorities) (uxReadyPriorities) &= ~(1UL << (uxPriority))
- /*-----------------------------------------------------------*/
+/*-----------------------------------------------------------*/
#define portGET_HIGHEST_PRIORITY(uxTopPriority, uxReadyPriorities) uxTopPriority = (31UL - (uint32_t)__builtin_clz(uxReadyPriorities))
#endif /* configUSE_PORT_OPTIMISED_TASK_SELECTION */
#ifdef configASSERT
- void vPortValidateInterruptPriority(void);
+void vPortValidateInterruptPriority(void);
#define portASSERT_IF_INTERRUPT_PRIORITY_INVALID() vPortValidateInterruptPriority()
#endif /* configASSERT */
@@ -169,22 +167,22 @@ by default. */
/* The number of bits to shift for an interrupt priority is dependent on the
number of bits implemented by the interrupt controller. */
#if configUNIQUE_INTERRUPT_PRIORITIES == 16
-#define portPRIORITY_SHIFT 4
-#define portMAX_BINARY_POINT_VALUE 3
+ #define portPRIORITY_SHIFT 4
+ #define portMAX_BINARY_POINT_VALUE 3
#elif configUNIQUE_INTERRUPT_PRIORITIES == 32
-#define portPRIORITY_SHIFT 3
-#define portMAX_BINARY_POINT_VALUE 2
+ #define portPRIORITY_SHIFT 3
+ #define portMAX_BINARY_POINT_VALUE 2
#elif configUNIQUE_INTERRUPT_PRIORITIES == 64
-#define portPRIORITY_SHIFT 2
-#define portMAX_BINARY_POINT_VALUE 1
+ #define portPRIORITY_SHIFT 2
+ #define portMAX_BINARY_POINT_VALUE 1
#elif configUNIQUE_INTERRUPT_PRIORITIES == 128
-#define portPRIORITY_SHIFT 1
-#define portMAX_BINARY_POINT_VALUE 0
+ #define portPRIORITY_SHIFT 1
+ #define portMAX_BINARY_POINT_VALUE 0
#elif configUNIQUE_INTERRUPT_PRIORITIES == 256
-#define portPRIORITY_SHIFT 0
-#define portMAX_BINARY_POINT_VALUE 0
+ #define portPRIORITY_SHIFT 0
+ #define portMAX_BINARY_POINT_VALUE 0
#else
-#error Invalid configUNIQUE_INTERRUPT_PRIORITIES setting. configUNIQUE_INTERRUPT_PRIORITIES must be set to the number of unique priorities implemented by the target hardware
+ #error Invalid configUNIQUE_INTERRUPT_PRIORITIES setting. configUNIQUE_INTERRUPT_PRIORITIES must be set to the number of unique priorities implemented by the target hardware
#endif
/* Interrupt controller access addresses. */
@@ -196,6 +194,6 @@ number of bits implemented by the interrupt controller. */
#define portMEMORY_BARRIER() __asm volatile("" :: \
- : "memory")
+ : "memory")
#endif /* PORTMACRO_H */
diff --git a/third-party/freertos/portable/GCC/ft_platform/aarch64/FreeRTOSConfig.h b/third-party/freertos/portable/GCC/ft_platform/aarch64/FreeRTOSConfig.h
deleted file mode 100644
index 594e8dd2934cbf4cae712c41722f3e03da0683d9..0000000000000000000000000000000000000000
--- a/third-party/freertos/portable/GCC/ft_platform/aarch64/FreeRTOSConfig.h
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- * FreeRTOS Kernel V10.0.1
- * Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy of
- * this software and associated documentation files (the "Software"), to deal in
- * the Software without restriction, including without limitation the rights to
- * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
- * the Software, and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
- * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
- * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * http://www.FreeRTOS.org
- * http://aws.amazon.com/freertos
- *
- * 1 tab == 4 spaces!
- */
-
-#ifndef FREERTOS_CONFIG_H
-#define FREERTOS_CONFIG_H
-
-#include "finterrupt.h"
-
-/*-----------------------------------------------------------
- * Application specific definitions.
- *
- * These definitions should be adjusted for your particular hardware and
- * application requirements.
- *
- * THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE
- * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.
- *
- * See http://www.freertos.org/a00110.html.
- *----------------------------------------------------------*/
-
-/*
- * The FreeRTOS Cortex-A port implements a full interrupt nesting model.
- *
- * Interrupts that are assigned a priority at or below
- * configMAX_API_CALL_INTERRUPT_PRIORITY (which counter-intuitively in the ARM
- * generic interrupt controller [GIC] means a priority that has a numerical
- * value above configMAX_API_CALL_INTERRUPT_PRIORITY) can call FreeRTOS safe API
- * functions and will nest.
- *
- * Interrupts that are assigned a priority above
- * configMAX_API_CALL_INTERRUPT_PRIORITY (which in the GIC means a numerical
- * value below configMAX_API_CALL_INTERRUPT_PRIORITY) cannot call any FreeRTOS
- * API functions, will nest, and will not be masked by FreeRTOS critical
- * sections (although it is necessary for interrupts to be globally disabled
- * extremely briefly as the interrupt mask is updated in the GIC).
- *
- * FreeRTOS functions that can be called from an interrupt are those that end in
- * "FromISR". FreeRTOS maintains a separate interrupt safe API to enable
- * interrupt entry to be shorter, faster, simpler and smaller.
- *
- * For the purpose of setting configMAX_API_CALL_INTERRUPT_PRIORITY 255
- * represents the lowest priority.
- */
-
-/* 在不安全group1 中,16 is steps ,3 是其中等级*/
-#define configKERNEL_INTERRUPT_PRIORITY IRQ_PRIORITY_VALUE_11
-/* 在不安全group1 中 ,0x8 ~0xb 不可以使用安全api(优先级越低越高)*/
-#define configMAX_API_CALL_INTERRUPT_PRIORITY IRQ_PRIORITY_VALUE_11
-
-
-#define configUSE_PORT_OPTIMISED_TASK_SELECTION 1
-#define configUSE_TICKLESS_IDLE 0
-#define configTICK_RATE_HZ ((TickType_t)1000)
-#define configUSE_PREEMPTION 1
-#define configUSE_IDLE_HOOK 1
-#define configUSE_TICK_HOOK 1
-#define configMAX_PRIORITIES (8)
-#define configMINIMAL_STACK_SIZE ((unsigned short)1024)
-#define configTOTAL_HEAP_SIZE (1024 * 1024 * 12)
-#define configMAX_TASK_NAME_LEN (32)
-#define configUSE_16_BIT_TICKS 0
-#define configIDLE_SHOULD_YIELD 1
-#define configUSE_MUTEXES 1
-#define configQUEUE_REGISTRY_SIZE 8
-#define configCHECK_FOR_STACK_OVERFLOW 1
-#define configUSE_RECURSIVE_MUTEXES 1
-#define configUSE_APPLICATION_TASK_TAG 0
-#define configUSE_COUNTING_SEMAPHORES 1
-#define configUSE_QUEUE_SETS 1
-
-/* This demo creates RTOS objects using both static and dynamic allocation. */
-#define configSUPPORT_STATIC_ALLOCATION 1
-#define configSUPPORT_DYNAMIC_ALLOCATION 1 /* Defaults to 1 anyway. */
-
-/* Co-routine definitions. */
-#define configUSE_CO_ROUTINES 0
-#define configMAX_CO_ROUTINE_PRIORITIES (2)
-
-/* Software timer definitions. */
-#define configUSE_TIMERS 1
-#define configTIMER_TASK_PRIORITY (configMAX_PRIORITIES - 1)
-#define configTIMER_QUEUE_LENGTH 5
-#define configTIMER_TASK_STACK_DEPTH (configMINIMAL_STACK_SIZE * 2)
-
-/* Set the following definitions to 1 to include the API function, or zero
-to exclude the API function. */
-#define INCLUDE_vTaskPrioritySet 1
-#define INCLUDE_uxTaskPriorityGet 1
-#define INCLUDE_vTaskDelete 1
-#define INCLUDE_vTaskCleanUpResources 1
-#define INCLUDE_vTaskSuspend 1
-#define INCLUDE_vTaskDelayUntil 1
-#define INCLUDE_vTaskDelay 1
-#define INCLUDE_xTimerPendFunctionCall 1
-#define INCLUDE_eTaskGetState 1
-#define INCLUDE_xTaskAbortDelay 1
-#define INCLUDE_xTaskGetHandle 1
-
-#define INCLUDE_xSemaphoreGetMutexHolder 1
-#define configNUM_THREAD_LOCAL_STORAGE_POINTERS 5
-#define INCLUDE_xTaskGetIdleTaskHandle 1
-
-/* This demo makes use of one or more example stats formatting functions. These
-format the raw data provided by the uxTaskGetSystemState() function in to human
-readable ASCII form. See the notes in the implementation of vTaskList() within
-FreeRTOS/Source/tasks.c for limitations. */
-#define configUSE_STATS_FORMATTING_FUNCTIONS 1
-
-/* Run time stats are not generated. portCONFIGURE_TIMER_FOR_RUN_TIME_STATS and
-portGET_RUN_TIME_COUNTER_VALUE must be defined if configGENERATE_RUN_TIME_STATS
-is set to 1. */
-#define configGENERATE_RUN_TIME_STATS 1 //启用运行时间统计功能
-extern volatile unsigned int gCpuRuntime;
-#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() (gCpuRuntime = 0ul)
-#define portGET_RUN_TIME_COUNTER_VALUE() gCpuRuntime
-
-/* The size of the global output buffer that is available for use when there
-are multiple command interpreters running at once (for example, one on a UART
-and one on TCP/IP). This is done to prevent an output buffer being defined by
-each implementation - which would waste RAM. In this case, there is only one
-command interpreter running. */
-#define configCOMMAND_INT_MAX_OUTPUT_SIZE 2096
-
-/* Normal assert() semantics without relying on the provision of an assert.h
-header file. */
-void vMainAssertCalled(const char *pcFileName, uint32_t ulLineNumber);
-#define configASSERT(x) \
- if ((x) == 0) \
- { \
- vMainAssertCalled(__FILE__, __LINE__); \
- }
-
-/* If configTASK_RETURN_ADDRESS is not defined then a task that attempts to
-return from its implementing function will end up in a "task exit error"
-function - which contains a call to configASSERT(). However this can give GCC
-some problems when it tries to unwind the stack, as the exit error function has
-nothing to return to. To avoid this define configTASK_RETURN_ADDRESS to 0. */
-#define configTASK_RETURN_ADDRESS NULL
-
-/* Bump up the priority of recmuCONTROLLING_TASK_PRIORITY to prevent false
-positive errors being reported considering the priority of other tasks in the
-system. */
-#define recmuCONTROLLING_TASK_PRIORITY (configMAX_PRIORITIES - 2)
-
-/****** Hardware specific settings. *******************************************/
-
-/*
- * The application must provide a function that configures a peripheral to
- * create the FreeRTOS tick interrupt, then define configSETUP_TICK_INTERRUPT()
- * in FreeRTOSConfig.h to call the function. This file contains a function
- * that is suitable for use on the Zynq MPU. FreeRTOS_Tick_Handler() must
- * be installed as the peripheral's interrupt handler.
- */
-void vConfigureTickInterrupt(void);
-#define configSETUP_TICK_INTERRUPT() vConfigureTickInterrupt()
-
-void vClearTickInterrupt(void);
-#define configCLEAR_TICK_INTERRUPT() vClearTickInterrupt()
-
-/* The following constant describe the hardware, and are correct for the
-QEMU-Virt. */
-#define configINTERRUPT_CONTROLLER_BASE_ADDRESS (GICV3_DISTRIBUTOR_BASEADDRESS)
-#define configUNIQUE_INTERRUPT_PRIORITIES 16
-
-#define fabs(x) __builtin_fabs(x)
-
-#define configUSE_TRACE_FACILITY 1
-
-
-#define FreeRTOS_IRQ_Handler IRQInterruptHandler
-#define FreeRTOS_SWI_Handler SynchronousInterruptHandler
-
-void vPrintString(const char *pcString);
-void vPrintStringAndNumber(const char *pcString, uint32_t ulValue);
-void vPrintf(const char *format, ...);
-
-#endif /* FREERTOS_CONFIG_H */
diff --git a/third-party/freertos/portable/GCC/ft_platform/aarch64/port.c b/third-party/freertos/portable/GCC/ft_platform/aarch64/port.c
index a3371d4384377476180a68f82f9f7d6c637b7e91..30d55b892e0e3839ab904d9ec0179d4134ed376f 100644
--- a/third-party/freertos/portable/GCC/ft_platform/aarch64/port.c
+++ b/third-party/freertos/portable/GCC/ft_platform/aarch64/port.c
@@ -28,6 +28,7 @@
/* Standard includes. */
#include
#include
+#include
/* Scheduler includes. */
#include "FreeRTOS.h"
#include "task.h"
@@ -35,41 +36,41 @@
#include "finterrupt.h"
#include "fgic_cpu_interface.h"
#ifndef configUNIQUE_INTERRUPT_PRIORITIES
-#error configUNIQUE_INTERRUPT_PRIORITIES must be defined. See http://www.freertos.org/Using-FreeRTOS-on-Cortex-A-Embedded-Processors.html
+ #error configUNIQUE_INTERRUPT_PRIORITIES must be defined. See http://www.freertos.org/Using-FreeRTOS-on-Cortex-A-Embedded-Processors.html
#endif
#ifndef configSETUP_TICK_INTERRUPT
-#error configSETUP_TICK_INTERRUPT() must be defined. See http://www.freertos.org/Using-FreeRTOS-on-Cortex-A-Embedded-Processors.html
+ #error configSETUP_TICK_INTERRUPT() must be defined. See http://www.freertos.org/Using-FreeRTOS-on-Cortex-A-Embedded-Processors.html
#endif /* configSETUP_TICK_INTERRUPT */
#ifndef configMAX_API_CALL_INTERRUPT_PRIORITY
-#error configMAX_API_CALL_INTERRUPT_PRIORITY must be defined. See http://www.freertos.org/Using-FreeRTOS-on-Cortex-A-Embedded-Processors.html
+ #error configMAX_API_CALL_INTERRUPT_PRIORITY must be defined. See http://www.freertos.org/Using-FreeRTOS-on-Cortex-A-Embedded-Processors.html
#endif
#if configMAX_API_CALL_INTERRUPT_PRIORITY == 0
-#error configMAX_API_CALL_INTERRUPT_PRIORITY must not be set to 0
+ #error configMAX_API_CALL_INTERRUPT_PRIORITY must not be set to 0
#endif
#if configMAX_API_CALL_INTERRUPT_PRIORITY > configUNIQUE_INTERRUPT_PRIORITIES
-#error configMAX_API_CALL_INTERRUPT_PRIORITY must be less than or equal to configUNIQUE_INTERRUPT_PRIORITIES as the lower the numeric priority value the higher the logical interrupt priority
+ #error configMAX_API_CALL_INTERRUPT_PRIORITY must be less than or equal to configUNIQUE_INTERRUPT_PRIORITIES as the lower the numeric priority value the higher the logical interrupt priority
#endif
#if configUSE_PORT_OPTIMISED_TASK_SELECTION == 1
-/* Check the configuration. */
-#if (configMAX_PRIORITIES > 32)
-#error configUSE_PORT_OPTIMISED_TASK_SELECTION can only be set to 1 when configMAX_PRIORITIES is less than or equal to 32. It is very rare that a system requires more than 10 to 15 difference priorities as tasks that share a priority will time slice.
-#endif
+ /* Check the configuration. */
+ #if (configMAX_PRIORITIES > 32)
+ #error configUSE_PORT_OPTIMISED_TASK_SELECTION can only be set to 1 when configMAX_PRIORITIES is less than or equal to 32. It is very rare that a system requires more than 10 to 15 difference priorities as tasks that share a priority will time slice.
+ #endif
#endif /* configUSE_PORT_OPTIMISED_TASK_SELECTION */
/* In case security extensions are implemented. */
#if configMAX_API_CALL_INTERRUPT_PRIORITY <= (configUNIQUE_INTERRUPT_PRIORITIES / 2)
-#error configMAX_API_CALL_INTERRUPT_PRIORITY must be greater than ( configUNIQUE_INTERRUPT_PRIORITIES / 2 )
+ #error configMAX_API_CALL_INTERRUPT_PRIORITY must be greater than ( configUNIQUE_INTERRUPT_PRIORITIES / 2 )
#endif
/* Some vendor specific files default configCLEAR_TICK_INTERRUPT() in
portmacro.h. */
#ifndef configCLEAR_TICK_INTERRUPT
-#define configCLEAR_TICK_INTERRUPT()
+ #define configCLEAR_TICK_INTERRUPT()
#endif
/* A critical section is exited when the critical section nesting count reaches
@@ -78,7 +79,7 @@ this value. */
/* In all GICs 255 can be written to the priority mask register to unmask all
(but the lowest) interrupt priority. */
-#define portUNMASK_VALUE (0xF0UL)
+#define portUNMASK_VALUE (0xFFUL)
/* Tasks are not created with a floating point context, but can be given a
floating point context after they have been created. A variable is stored as
@@ -92,12 +93,12 @@ context. */
#define portSP_EL0 ((StackType_t)0x00)
#if defined(GUEST)
-#define portEL1 ((StackType_t)0x04)
-#define portINITIAL_PSTATE (portEL1 | portSP_EL0)
+ #define portEL1 ((StackType_t)0x04)
+ #define portINITIAL_PSTATE (portEL1 | portSP_EL0)
#else
-#define portEL3 ((StackType_t)0x0c)
-/* At the time of writing, the BSP only supports EL3. */
-#define portINITIAL_PSTATE (portEL3 | portSP_EL0)
+ #define portEL3 ((StackType_t)0x0c)
+ /* At the time of writing, the BSP only supports EL3. */
+ #define portINITIAL_PSTATE (portEL3 | portSP_EL0)
#endif
/* Used by portASSERT_IF_INTERRUPT_PRIORITY_INVALID() when ensuring the binary
@@ -112,13 +113,13 @@ point is zero. */
/* Macro to unmask all interrupt priorities. */
#define portCLEAR_INTERRUPT_MASK() \
- { \
- portDISABLE_INTERRUPTS(); \
- InterruptSetPriorityMask(portUNMASK_VALUE); \
- __asm volatile("DSB SY \n" \
- "ISB SY \n"); \
- portENABLE_INTERRUPTS(); \
- }
+ { \
+ portDISABLE_INTERRUPTS(); \
+ InterruptSetPriorityMask(portUNMASK_VALUE); \
+ __asm volatile("DSB SY \n" \
+ "ISB SY \n"); \
+ portENABLE_INTERRUPTS(); \
+ }
/* Hardware specifics used when sanity checking the configuration. */
#define portINTERRUPT_PRIORITY_REGISTER_OFFSET (0x400UL + 32UL) //
@@ -153,8 +154,16 @@ uint64_t ullPortYieldRequired = pdFALSE;
if the nesting depth is 0. */
uint64_t ullPortInterruptNesting = pdFALSE;
+/* The space on the stack required to hold the FPU registers. This is 32 128-bit
+ * registers, that means (64 * 8) 64 double words */
+#define portFPU_REGISTER_DOUBLE_WORDS ( 64 )
+
+#define PRIORITY_TRANSLATE_SET(x) ((((x)>> 1) | 0x80) & 0xff)
+
+#define PRIORITY_TRANSLATE_GET(x) (((x)<< 1) & 0xff)
+
/* Used in the ASM code. */
-__attribute__((used)) const uint64_t ullMaxAPIPriorityMask = (configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT);
+__attribute__((used)) const uint64_t ullMaxAPIPriorityMask = PRIORITY_TRANSLATE_SET(configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT);
/*-----------------------------------------------------------*/
@@ -163,308 +172,350 @@ __attribute__((used)) const uint64_t ullMaxAPIPriorityMask = (configMAX_API_CALL
*/
StackType_t *pxPortInitialiseStack(StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters)
{
- /* Setup the initial stack of the task. The stack is set exactly as
- expected by the portRESTORE_CONTEXT() macro. */
-
- /* First all the general purpose registers. */
- pxTopOfStack--;
- *pxTopOfStack = 0x0101010101010101ULL; /* R1 */
- pxTopOfStack--;
- *pxTopOfStack = (StackType_t)pvParameters; /* R0 */
- pxTopOfStack--;
- *pxTopOfStack = 0x0303030303030303ULL; /* R3 */
- pxTopOfStack--;
- *pxTopOfStack = 0x0202020202020202ULL; /* R2 */
- pxTopOfStack--;
- *pxTopOfStack = 0x0505050505050505ULL; /* R5 */
- pxTopOfStack--;
- *pxTopOfStack = 0x0404040404040404ULL; /* R4 */
- pxTopOfStack--;
- *pxTopOfStack = 0x0707070707070707ULL; /* R7 */
- pxTopOfStack--;
- *pxTopOfStack = 0x0606060606060606ULL; /* R6 */
- pxTopOfStack--;
- *pxTopOfStack = 0x0909090909090909ULL; /* R9 */
- pxTopOfStack--;
- *pxTopOfStack = 0x0808080808080808ULL; /* R8 */
- pxTopOfStack--;
- *pxTopOfStack = 0x1111111111111111ULL; /* R11 */
- pxTopOfStack--;
- *pxTopOfStack = 0x1010101010101010ULL; /* R10 */
- pxTopOfStack--;
- *pxTopOfStack = 0x1313131313131313ULL; /* R13 */
- pxTopOfStack--;
- *pxTopOfStack = 0x1212121212121212ULL; /* R12 */
- pxTopOfStack--;
- *pxTopOfStack = 0x1515151515151515ULL; /* R15 */
- pxTopOfStack--;
- *pxTopOfStack = 0x1414141414141414ULL; /* R14 */
- pxTopOfStack--;
- *pxTopOfStack = 0x1717171717171717ULL; /* R17 */
- pxTopOfStack--;
- *pxTopOfStack = 0x1616161616161616ULL; /* R16 */
- pxTopOfStack--;
- *pxTopOfStack = 0x1919191919191919ULL; /* R19 */
- pxTopOfStack--;
- *pxTopOfStack = 0x1818181818181818ULL; /* R18 */
- pxTopOfStack--;
- *pxTopOfStack = 0x2121212121212121ULL; /* R21 */
- pxTopOfStack--;
- *pxTopOfStack = 0x2020202020202020ULL; /* R20 */
- pxTopOfStack--;
- *pxTopOfStack = 0x2323232323232323ULL; /* R23 */
- pxTopOfStack--;
- *pxTopOfStack = 0x2222222222222222ULL; /* R22 */
- pxTopOfStack--;
- *pxTopOfStack = 0x2525252525252525ULL; /* R25 */
- pxTopOfStack--;
- *pxTopOfStack = 0x2424242424242424ULL; /* R24 */
- pxTopOfStack--;
- *pxTopOfStack = 0x2727272727272727ULL; /* R27 */
- pxTopOfStack--;
- *pxTopOfStack = 0x2626262626262626ULL; /* R26 */
- pxTopOfStack--;
- *pxTopOfStack = 0x2929292929292929ULL; /* R29 */
- pxTopOfStack--;
- *pxTopOfStack = 0x2828282828282828ULL; /* R28 */
- pxTopOfStack--;
- *pxTopOfStack = (StackType_t)0x00; /* XZR - has no effect, used so there are an even number of registers. */
- pxTopOfStack--;
- *pxTopOfStack = (StackType_t)0x00; /* R30 - procedure call link register. */
- pxTopOfStack--;
-
- *pxTopOfStack = portINITIAL_PSTATE;
- pxTopOfStack--;
-
- *pxTopOfStack = (StackType_t)pxCode; /* Exception return address. */
- pxTopOfStack--;
-
- /* The task will start with a critical nesting count of 0 as interrupts are
- enabled. */
- *pxTopOfStack = portNO_CRITICAL_NESTING;
- pxTopOfStack--;
-
- /* The task will start without a floating point context. A task that uses
- the floating point hardware must call vPortTaskUsesFPU() before executing
- any floating point instructions. */
- *pxTopOfStack = portNO_FLOATING_POINT_CONTEXT;
-
- return pxTopOfStack;
+ /* Setup the initial stack of the task. The stack is set exactly as
+ expected by the portRESTORE_CONTEXT() macro. */
+
+ /* First all the general purpose registers. */
+ pxTopOfStack--;
+ *pxTopOfStack = 0x0101010101010101ULL; /* R1 */
+ pxTopOfStack--;
+ *pxTopOfStack = (StackType_t)pvParameters; /* R0 */
+ pxTopOfStack--;
+ *pxTopOfStack = 0x0303030303030303ULL; /* R3 */
+ pxTopOfStack--;
+ *pxTopOfStack = 0x0202020202020202ULL; /* R2 */
+ pxTopOfStack--;
+ *pxTopOfStack = 0x0505050505050505ULL; /* R5 */
+ pxTopOfStack--;
+ *pxTopOfStack = 0x0404040404040404ULL; /* R4 */
+ pxTopOfStack--;
+ *pxTopOfStack = 0x0707070707070707ULL; /* R7 */
+ pxTopOfStack--;
+ *pxTopOfStack = 0x0606060606060606ULL; /* R6 */
+ pxTopOfStack--;
+ *pxTopOfStack = 0x0909090909090909ULL; /* R9 */
+ pxTopOfStack--;
+ *pxTopOfStack = 0x0808080808080808ULL; /* R8 */
+ pxTopOfStack--;
+ *pxTopOfStack = 0x1111111111111111ULL; /* R11 */
+ pxTopOfStack--;
+ *pxTopOfStack = 0x1010101010101010ULL; /* R10 */
+ pxTopOfStack--;
+ *pxTopOfStack = 0x1313131313131313ULL; /* R13 */
+ pxTopOfStack--;
+ *pxTopOfStack = 0x1212121212121212ULL; /* R12 */
+ pxTopOfStack--;
+ *pxTopOfStack = 0x1515151515151515ULL; /* R15 */
+ pxTopOfStack--;
+ *pxTopOfStack = 0x1414141414141414ULL; /* R14 */
+ pxTopOfStack--;
+ *pxTopOfStack = 0x1717171717171717ULL; /* R17 */
+ pxTopOfStack--;
+ *pxTopOfStack = 0x1616161616161616ULL; /* R16 */
+ pxTopOfStack--;
+ *pxTopOfStack = 0x1919191919191919ULL; /* R19 */
+ pxTopOfStack--;
+ *pxTopOfStack = 0x1818181818181818ULL; /* R18 */
+ pxTopOfStack--;
+ *pxTopOfStack = 0x2121212121212121ULL; /* R21 */
+ pxTopOfStack--;
+ *pxTopOfStack = 0x2020202020202020ULL; /* R20 */
+ pxTopOfStack--;
+ *pxTopOfStack = 0x2323232323232323ULL; /* R23 */
+ pxTopOfStack--;
+ *pxTopOfStack = 0x2222222222222222ULL; /* R22 */
+ pxTopOfStack--;
+ *pxTopOfStack = 0x2525252525252525ULL; /* R25 */
+ pxTopOfStack--;
+ *pxTopOfStack = 0x2424242424242424ULL; /* R24 */
+ pxTopOfStack--;
+ *pxTopOfStack = 0x2727272727272727ULL; /* R27 */
+ pxTopOfStack--;
+ *pxTopOfStack = 0x2626262626262626ULL; /* R26 */
+ pxTopOfStack--;
+ *pxTopOfStack = 0x2929292929292929ULL; /* R29 */
+ pxTopOfStack--;
+ *pxTopOfStack = 0x2828282828282828ULL; /* R28 */
+ pxTopOfStack--;
+ *pxTopOfStack = (StackType_t)0x00; /* XZR - has no effect, used so there are an even number of registers. */
+ pxTopOfStack--;
+ *pxTopOfStack = (StackType_t)0x00; /* R30 - procedure call link register. */
+ pxTopOfStack--;
+
+ *pxTopOfStack = portINITIAL_PSTATE;
+ pxTopOfStack--;
+
+ *pxTopOfStack = (StackType_t)pxCode; /* Exception return address. */
+ pxTopOfStack--;
+
+#if( configUSE_TASK_FPU_SUPPORT == 1 )
+ {
+ /* The task will start with a critical nesting count of 0 as interrupts are
+ enabled. */
+ *pxTopOfStack = portNO_CRITICAL_NESTING;
+ /* The task will start without a floating point context. A task that uses
+ the floating point hardware must call vPortTaskUsesFPU() before executing
+ any floating point instructions. */
+ pxTopOfStack--;
+ *pxTopOfStack = portNO_FLOATING_POINT_CONTEXT;
+ }
+#elif( configUSE_TASK_FPU_SUPPORT == 2 )
+ {
+ /* The task will start with a floating point context. Leave enough
+ * space for the registers - and ensure they are initialised to 0. */
+ pxTopOfStack -= (portFPU_REGISTER_DOUBLE_WORDS - 1);
+ memset(pxTopOfStack, 0x00, portFPU_REGISTER_DOUBLE_WORDS * sizeof(StackType_t));
+
+ /* The task will start with a critical nesting count of 0 as interrupts are
+ enabled. */
+ pxTopOfStack--;
+ *pxTopOfStack = portNO_CRITICAL_NESTING;
+ pxTopOfStack--;
+ *pxTopOfStack = pdTRUE;
+ ullPortTaskHasFPUContext = pdTRUE;
+ }
+#else
+ {
+#error Invalid configUSE_TASK_FPU_SUPPORT setting - configUSE_TASK_FPU_SUPPORT must be set to 1, 2, or left undefined.
+ }
+#endif
+
+ return pxTopOfStack;
}
/*-----------------------------------------------------------*/
BaseType_t xPortStartScheduler(void)
{
- uint32_t ulAPSR;
+ uint32_t ulAPSR;
#if (configASSERT_DEFINED == 1)
- {
- volatile uint32_t ulOriginalPriority;
- volatile uint8_t *const pucFirstUserPriorityRegister = (volatile uint8_t *const)(configINTERRUPT_CONTROLLER_BASE_ADDRESS + portINTERRUPT_PRIORITY_REGISTER_OFFSET);
- volatile uint8_t ucMaxPriorityValue;
- if(pucFirstUserPriorityRegister != 0)
- {
- /* Determine how many priority bits are implemented in the GIC.
- Save the interrupt priority value that is about to be clobbered. */
- ulOriginalPriority = *pucFirstUserPriorityRegister;
- /* Determine the number of priority bits available. First write to
- all possible bits. */
- *pucFirstUserPriorityRegister = portMAX_8_BIT_VALUE;
-
- /* Read the value back to see how many bits stuck. */
- ucMaxPriorityValue = *pucFirstUserPriorityRegister;
-
- if(ucMaxPriorityValue != 0)
- {
- /* Shift to the least significant bits. */
- while ((ucMaxPriorityValue & portBIT_0_SET) != portBIT_0_SET)
- {
- ucMaxPriorityValue >>= (uint8_t)0x01;
- }
- /* Sanity check configUNIQUE_INTERRUPT_PRIORITIES matches the read
- value. */
- configASSERT(ucMaxPriorityValue >= portLOWEST_INTERRUPT_PRIORITY);
- }
-
- /* Restore the clobbered interrupt priority register to its original
- value. */
- *pucFirstUserPriorityRegister = ulOriginalPriority;
- }
-
- }
+ {
+ volatile uint32_t ulOriginalPriority;
+ volatile uint8_t *const pucFirstUserPriorityRegister = (volatile uint8_t *const)(configINTERRUPT_CONTROLLER_BASE_ADDRESS + portINTERRUPT_PRIORITY_REGISTER_OFFSET);
+ volatile uint8_t ucMaxPriorityValue;
+ if (pucFirstUserPriorityRegister != 0)
+ {
+ /* Determine how many priority bits are implemented in the GIC.
+ Save the interrupt priority value that is about to be clobbered. */
+ ulOriginalPriority = *pucFirstUserPriorityRegister;
+ /* Determine the number of priority bits available. First write to
+ all possible bits. */
+ *pucFirstUserPriorityRegister = portMAX_8_BIT_VALUE;
+
+ /* Read the value back to see how many bits stuck. */
+ ucMaxPriorityValue = *pucFirstUserPriorityRegister;
+
+ if (ucMaxPriorityValue != 0)
+ {
+ /* Shift to the least significant bits. */
+ while ((ucMaxPriorityValue & portBIT_0_SET) != portBIT_0_SET)
+ {
+ ucMaxPriorityValue >>= (uint8_t)0x01;
+ }
+ /* Sanity check configUNIQUE_INTERRUPT_PRIORITIES matches the read
+ value. */
+ configASSERT(ucMaxPriorityValue >= portLOWEST_INTERRUPT_PRIORITY);
+ }
+
+ /* Restore the clobbered interrupt priority register to its original
+ value. */
+ *pucFirstUserPriorityRegister = ulOriginalPriority;
+ }
+
+ }
#endif /* conifgASSERT_DEFINED */
- /* At the time of writing, the BSP only supports EL1. */
- __asm volatile("MRS %0, CurrentEL"
- : "=r"(ulAPSR));
- ulAPSR &= portAPSR_MODE_BITS_MASK;
+ /* At the time of writing, the BSP only supports EL1. */
+ __asm volatile("MRS %0, CurrentEL"
+ : "=r"(ulAPSR));
+ ulAPSR &= portAPSR_MODE_BITS_MASK;
#if defined(GUEST)
- configASSERT(ulAPSR == portEL1);
- if (ulAPSR == portEL1)
+ configASSERT(ulAPSR == portEL1);
+ if (ulAPSR == portEL1)
#else
- configASSERT(ulAPSR == portEL3);
- if (ulAPSR == portEL3)
+ configASSERT(ulAPSR == portEL3);
+ if (ulAPSR == portEL3)
#endif
- {
- /* Only continue if the binary point value is set to its lowest possible
- setting. See the comments in vPortValidateInterruptPriority() below for
- more information. */
- // configASSERT((portICCBPR_BINARY_POINT_REGISTER & portBINARY_POINT_BITS) <= portMAX_BINARY_POINT_VALUE);
- configASSERT((FGicGetICC_BPR1() & portBINARY_POINT_BITS) <= portMAX_BINARY_POINT_VALUE);
-
- // if ((portICCBPR_BINARY_POINT_REGISTER & portBINARY_POINT_BITS) <= portMAX_BINARY_POINT_VALUE)
- if ((FGicGetICC_BPR1() & portBINARY_POINT_BITS) <= portMAX_BINARY_POINT_VALUE)
- {
- /* Interrupts are turned off in the CPU itself to ensure a tick does
- not execute while the scheduler is being started. Interrupts are
- automatically turned back on in the CPU when the first task starts
- executing. */
- portDISABLE_INTERRUPTS();
-
- /* Start the timer that generates the tick ISR. */
- configSETUP_TICK_INTERRUPT();
- /* Start the first task executing. */
- vPortRestoreTaskContext();
- }
- }
-
- return 0;
+ {
+ /* Only continue if the binary point value is set to its lowest possible
+ setting. See the comments in vPortValidateInterruptPriority() below for
+ more information. */
+ // configASSERT((portICCBPR_BINARY_POINT_REGISTER & portBINARY_POINT_BITS) <= portMAX_BINARY_POINT_VALUE);
+ configASSERT((FGicGetICC_BPR1() & portBINARY_POINT_BITS) <= portMAX_BINARY_POINT_VALUE);
+
+ // if ((portICCBPR_BINARY_POINT_REGISTER & portBINARY_POINT_BITS) <= portMAX_BINARY_POINT_VALUE)
+ if ((FGicGetICC_BPR1() & portBINARY_POINT_BITS) <= portMAX_BINARY_POINT_VALUE)
+ {
+ /* Interrupts are turned off in the CPU itself to ensure a tick does
+ not execute while the scheduler is being started. Interrupts are
+ automatically turned back on in the CPU when the first task starts
+ executing. */
+ portDISABLE_INTERRUPTS();
+
+ /* Start the timer that generates the tick ISR. */
+ configSETUP_TICK_INTERRUPT();
+ /* Start the first task executing. */
+ vPortRestoreTaskContext();
+ }
+ }
+
+ return 0;
}
/*-----------------------------------------------------------*/
void vPortEndScheduler(void)
{
- /* Not implemented in ports where there is nothing to return to.
- Artificially force an assert. */
- configASSERT(ullCriticalNesting == 1000ULL);
+ /* Not implemented in ports where there is nothing to return to.
+ Artificially force an assert. */
+ configASSERT(ullCriticalNesting == 1000ULL);
}
/*-----------------------------------------------------------*/
void vPortEnterCritical(void)
{
- /* Mask interrupts up to the max syscall interrupt priority. */
- uxPortSetInterruptMask();
-
- /* Now interrupts are disabled ullCriticalNesting can be accessed
- directly. Increment ullCriticalNesting to keep a count of how many times
- portENTER_CRITICAL() has been called. */
- ullCriticalNesting++;
-
- /* This is not the interrupt safe version of the enter critical function so
- assert() if it is being called from an interrupt context. Only API
- functions that end in "FromISR" can be used in an interrupt. Only assert if
- the critical nesting count is 1 to protect against recursive calls if the
- assert function also uses a critical section. */
- if (ullCriticalNesting == 1ULL)
- {
- configASSERT(ullPortInterruptNesting == 0);
- }
+ /* Mask interrupts up to the max syscall interrupt priority. */
+ uxPortSetInterruptMask();
+
+ /* Now interrupts are disabled ullCriticalNesting can be accessed
+ directly. Increment ullCriticalNesting to keep a count of how many times
+ portENTER_CRITICAL() has been called. */
+ ullCriticalNesting++;
+
+ /* This is not the interrupt safe version of the enter critical function so
+ assert() if it is being called from an interrupt context. Only API
+ functions that end in "FromISR" can be used in an interrupt. Only assert if
+ the critical nesting count is 1 to protect against recursive calls if the
+ assert function also uses a critical section. */
+ if (ullCriticalNesting == 1ULL)
+ {
+ configASSERT(ullPortInterruptNesting == 0);
+ }
}
/*-----------------------------------------------------------*/
void vPortExitCritical(void)
{
- if (ullCriticalNesting > portNO_CRITICAL_NESTING)
- {
- /* Decrement the nesting count as the critical section is being
- exited. */
- ullCriticalNesting--;
-
- /* If the nesting level has reached zero then all interrupt
- priorities must be re-enabled. */
- if (ullCriticalNesting == portNO_CRITICAL_NESTING)
- {
- /* Critical nesting has reached zero so all interrupt priorities
- should be unmasked. */
- portCLEAR_INTERRUPT_MASK();
- }
- }
+ if (ullCriticalNesting > portNO_CRITICAL_NESTING)
+ {
+ /* Decrement the nesting count as the critical section is being
+ exited. */
+ ullCriticalNesting--;
+
+ /* If the nesting level has reached zero then all interrupt
+ priorities must be re-enabled. */
+ if (ullCriticalNesting == portNO_CRITICAL_NESTING)
+ {
+ /* Critical nesting has reached zero so all interrupt priorities
+ should be unmasked. */
+ portCLEAR_INTERRUPT_MASK();
+ }
+ }
}
/*-----------------------------------------------------------*/
void FreeRTOS_Tick_Handler(void)
{
-/* Interrupts should not be enabled before this point. */
+ /* Interrupts should not be enabled before this point. */
#if (configASSERT_DEFINED == 1)
- {
- uint32_t ulMaskBits;
+ {
+ uint32_t ulMaskBits;
- __asm volatile("mrs %0, daif"
- : "=r"(ulMaskBits)::"memory");
- configASSERT((ulMaskBits & portDAIF_I) != 0);
- }
+ __asm volatile("mrs %0, daif"
+ : "=r"(ulMaskBits)::"memory");
+ configASSERT((ulMaskBits & portDAIF_I) != 0);
+ }
#endif /* configASSERT_DEFINED */
- /* Set interrupt mask before altering scheduler structures. The tick
- handler runs at the lowest priority, so interrupts cannot already be masked,
- so there is no need to save and restore the current mask value. It is
- necessary to turn off interrupts in the CPU itself while the ICCPMR is being
- updated. */
-
- InterruptSetPriorityMask(configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT);
- __asm volatile("dsb sy \n"
- "isb sy \n" ::
- : "memory");
-
- /* Ok to enable interrupts after the interrupt source has been cleared. */
- configCLEAR_TICK_INTERRUPT();
- portENABLE_INTERRUPTS();
-
- /* Increment the RTOS tick. */
- if (xTaskIncrementTick() != pdFALSE)
- {
- ullPortYieldRequired = pdTRUE;
- }
-
- /* Ensure all interrupt priorities are active again. */
- portCLEAR_INTERRUPT_MASK();
+ /* Set interrupt mask before altering scheduler structures. The tick
+ handler runs at the lowest priority, so interrupts cannot already be masked,
+ so there is no need to save and restore the current mask value. It is
+ necessary to turn off interrupts in the CPU itself while the ICCPMR is being
+ updated. */
+
+ InterruptSetPriorityMask(configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT);
+ __asm volatile("dsb sy \n"
+ "isb sy \n" ::
+ : "memory");
+
+ /* Ok to enable interrupts after the interrupt source has been cleared. */
+ configCLEAR_TICK_INTERRUPT();
+ portENABLE_INTERRUPTS();
+
+ /* Increment the RTOS tick. */
+ if (xTaskIncrementTick() != pdFALSE)
+ {
+ ullPortYieldRequired = pdTRUE;
+ }
+
+ /* Ensure all interrupt priorities are active again. */
+ portCLEAR_INTERRUPT_MASK();
}
/*-----------------------------------------------------------*/
void vPortTaskUsesFPU(void)
{
- /* A task is registering the fact that it needs an FPU context. Set the
- FPU flag (which is saved as part of the task context). */
- ullPortTaskHasFPUContext = pdTRUE;
- printf("ullPortTaskHasFPUContext %x \r\n", ullPortTaskHasFPUContext);
- /* Consider initialising the FPSR here - but probably not necessary in
- AArch64. */
+ /* A task is registering the fact that it needs an FPU context. Set the
+ FPU flag (which is saved as part of the task context). */
+ ullPortTaskHasFPUContext = pdTRUE;
+ /* Consider initialising the FPSR here - but probably not necessary in
+ AArch64. */
}
/*-----------------------------------------------------------*/
void vPortClearInterruptMask(UBaseType_t uxNewMaskValue)
{
- if (uxNewMaskValue == pdFALSE)
- {
- portCLEAR_INTERRUPT_MASK();
- }
+ if (uxNewMaskValue == pdFALSE)
+ {
+ portCLEAR_INTERRUPT_MASK();
+ }
}
/*-----------------------------------------------------------*/
+/*
+Set current interrupt priority mask and translate, ICC_PMR
+• The value is right-shifted by one bit.
+• Bit [7] of the value is set to 1.
+*/
+void vPortSetPriorityMask(uint32_t value)
+{
+ uint32_t priority = PRIORITY_TRANSLATE_SET(value);
+ InterruptSetPriorityMask(priority);
+}
+
+/* Get current interrupt priority mask and translate, ICC_PMR, priority << portPRIORITY_SHIFT */
+uint32_t vPortGetPriorityMask(void)
+{
+ return PRIORITY_TRANSLATE_GET(InterruptGetPriorityMask());
+}
+
+/* Get current interrupt priority and translate, ICC_RPR, priority << portPRIORITY_SHIFT */
+uint32_t vPortGetCurrentPriority(void)
+{
+ return PRIORITY_TRANSLATE_GET(FGicGetICC_RPR());
+}
+
UBaseType_t uxPortSetInterruptMask(void)
{
- uint32_t ulReturn;
-
- /* Interrupt in the CPU must be turned off while the ICCPMR is being
- updated. */
- portDISABLE_INTERRUPTS();
- if (FGicGetICC_PMR() == (uint32_t)(configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT))
- {
- /* Interrupts were already masked. */
- ulReturn = pdTRUE;
- }
- else
- {
- ulReturn = pdFALSE;
- InterruptSetPriorityMask(configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT);
- // portICCPMR_PRIORITY_MASK_REGISTER = (uint32_t)(configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT);
- __asm volatile("dsb sy \n"
- "isb sy \n" ::
- : "memory");
- }
- portENABLE_INTERRUPTS();
-
- return ulReturn;
+ uint32_t ulReturn;
+
+ /* Interrupt in the CPU must be turned off while the ICCPMR is being
+ updated. */
+ portDISABLE_INTERRUPTS();
+ if (vPortGetPriorityMask() == (uint32_t)(configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT))
+ {
+ /* Interrupts were already masked. */
+ ulReturn = pdTRUE;
+ }
+ else
+ {
+ ulReturn = pdFALSE;
+ vPortSetPriorityMask(configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT);
+ __asm volatile("dsb sy \n"
+ "isb sy \n" ::
+ : "memory");
+ }
+ portENABLE_INTERRUPTS();
+ return ulReturn;
}
/*-----------------------------------------------------------*/
@@ -472,33 +523,33 @@ UBaseType_t uxPortSetInterruptMask(void)
void vPortValidateInterruptPriority(void)
{
- /* The following assertion will fail if a service routine (ISR) for
- an interrupt that has been assigned a priority above
- configMAX_SYSCALL_INTERRUPT_PRIORITY calls an ISR safe FreeRTOS API
- function. ISR safe FreeRTOS API functions must *only* be called
- from interrupts that have been assigned a priority at or below
- configMAX_SYSCALL_INTERRUPT_PRIORITY.
-
- Numerically low interrupt priority numbers represent logically high
- interrupt priorities, therefore the priority of the interrupt must
- be set to a value equal to or numerically *higher* than
- configMAX_SYSCALL_INTERRUPT_PRIORITY.
-
- FreeRTOS maintains separate thread and ISR API functions to ensure
- interrupt entry is as fast and simple as possible. */
- configASSERT(FGicGetICC_RPR() >= (uint32_t)(configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT));
-
- /* Priority grouping: The interrupt controller (GIC) allows the bits
- that define each interrupt's priority to be split between bits that
- define the interrupt's pre-emption priority bits and bits that define
- the interrupt's sub-priority. For simplicity all bits must be defined
- to be pre-emption priority bits. The following assertion will fail if
- this is not the case (if some bits represent a sub-priority).
-
- The priority grouping is configured by the GIC's binary point register
- (ICCBPR). Writting 0 to ICCBPR will ensure it is set to its lowest
- possible value (which may be above 0). */
- configASSERT((FGicGetICC_BPR1() & portBINARY_POINT_BITS) <= portMAX_BINARY_POINT_VALUE);
+ /* The following assertion will fail if a service routine (ISR) for
+ an interrupt that has been assigned a priority above
+ configMAX_SYSCALL_INTERRUPT_PRIORITY calls an ISR safe FreeRTOS API
+ function. ISR safe FreeRTOS API functions must *only* be called
+ from interrupts that have been assigned a priority at or below
+ configMAX_SYSCALL_INTERRUPT_PRIORITY.
+
+ Numerically low interrupt priority numbers represent logically high
+ interrupt priorities, therefore the priority of the interrupt must
+ be set to a value equal to or numerically *higher* than
+ configMAX_SYSCALL_INTERRUPT_PRIORITY.
+
+ FreeRTOS maintains separate thread and ISR API functions to ensure
+ interrupt entry is as fast and simple as possible. */
+ configASSERT(vPortGetCurrentPriority() >= (uint32_t)(configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT));
+
+ /* Priority grouping: The interrupt controller (GIC) allows the bits
+ that define each interrupt's priority to be split between bits that
+ define the interrupt's pre-emption priority bits and bits that define
+ the interrupt's sub-priority. For simplicity all bits must be defined
+ to be pre-emption priority bits. The following assertion will fail if
+ this is not the case (if some bits represent a sub-priority).
+
+ The priority grouping is configured by the GIC's binary point register
+ (ICCBPR). Writting 0 to ICCBPR will ensure it is set to its lowest
+ possible value (which may be above 0). */
+ configASSERT((FGicGetICC_BPR1() & portBINARY_POINT_BITS) <= portMAX_BINARY_POINT_VALUE);
}
#endif /* configASSERT_DEFINED */
diff --git a/third-party/freertos/portable/GCC/ft_platform/aarch64/portASM.S b/third-party/freertos/portable/GCC/ft_platform/aarch64/portASM.S
index 0536517403ae927d687994b09de41283fcce93fe..834fffc9e243870b9f2f3bb16655e93d96f11d10 100644
--- a/third-party/freertos/portable/GCC/ft_platform/aarch64/portASM.S
+++ b/third-party/freertos/portable/GCC/ft_platform/aarch64/portASM.S
@@ -25,48 +25,8 @@
* 1 tab == 4 spaces!
*/
- #define ICC_AP0R0_EL1 S3_0_C12_C8_4
-#define ICC_AP0R1_EL1 S3_0_C12_C8_5
-#define ICC_AP0R2_EL1 S3_0_C12_C8_6
-#define ICC_AP0R3_EL1 S3_0_C12_C8_7
-
-#define ICC_AP1R0_EL1 S3_0_C12_C9_0
-#define ICC_AP1R1_EL1 S3_0_C12_C9_1
-#define ICC_AP1R2_EL1 S3_0_C12_C9_2
-#define ICC_AP1R3_EL1 S3_0_C12_C9_3
-
-#define ICC_ASGI1R_EL1 S3_0_C12_C11_6
-
-#define ICC_BPR0_EL1 S3_0_C12_C8_3
-#define ICC_BPR1_EL1 S3_0_C12_C12_3
-
-#define ICC_CTLR_EL1 S3_0_C12_C12_4
-#define ICC_CTLR_EL3 S3_6_C12_C12_4
-
-#define ICC_DIR_EL1 S3_0_C12_C11_1
-
-#define ICC_EOIR0_EL1 S3_0_C12_C8_1
-#define ICC_EOIR1_EL1 S3_0_C12_C12_1
-
-#define ICC_HPPIR0_EL1 S3_0_C12_C8_2
-#define ICC_HPPIR1_EL1 S3_0_C12_C12_2
-
-#define ICC_IAR0_EL1 S3_0_C12_C8_0
-#define ICC_IAR1_EL1 S3_0_C12_C12_0
-
-#define ICC_IGRPEN0_EL1 S3_0_C12_C12_6
-#define ICC_IGRPEN1_EL1 S3_0_C12_C12_7
-#define ICC_IGRPEN1_EL3 S3_6_C12_C12_7
-
-#define ICC_PMR_EL1 S3_0_C4_C6_0
-#define ICC_RPR_EL1 S3_0_C12_C11_3
-
-#define ICC_SGI0R_EL1 S3_0_C12_C11_7
-#define ICC_SGI1R_EL1 S3_0_C12_C11_5
-
-#define ICC_SRE_EL1 S3_0_C12_C12_5
-#define ICC_SRE_EL2 S3_4_C12_C9_5
-#define ICC_SRE_EL3 S3_6_C12_C12_5
+#define ICC_EOIR1_EL1 S3_0_C12_C12_1
+#define ICC_IAR1_EL1 S3_0_C12_C12_0
.text
diff --git a/third-party/freertos/portable/GCC/ft_platform/aarch64/portAsm_debug.c b/third-party/freertos/portable/GCC/ft_platform/aarch64/portAsm_debug.c
index 318e8a887459d80fa43c0be09380206fe47fa3c5..ee0f4d89a340af1189baa52a7389ed2d91250e2f 100644
--- a/third-party/freertos/portable/GCC/ft_platform/aarch64/portAsm_debug.c
+++ b/third-party/freertos/portable/GCC/ft_platform/aarch64/portAsm_debug.c
@@ -1,32 +1,34 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: portAsm_debug.c
* Date: 2022-02-24 13:42:19
* LastEditTime: 2022-03-21 17:03:36
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
+ * Description: This file is for the port asm debug functions
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2021/12/14 first release
+ * 1.1 wangxiaodong 2022/8/9 adapt E2000D
*/
#include
-void test_value(void * x0 ,void * x1,void * x2 ,void * x3)
+void test_value(void *x0, void *x1, void *x2, void *x3)
{
- printf("x2 %p \r\n",x2) ;
+ printf("x2 %p \r\n", x2) ;
while (1) ;
}
\ No newline at end of file
diff --git a/third-party/freertos/portable/GCC/ft_platform/aarch64/portmacro.h b/third-party/freertos/portable/GCC/ft_platform/aarch64/portmacro.h
index 6b84fab1f6796c0a56344ae2664c6062567bbc06..9ede21f403fe9beff99355c091ff15b42993e7d6 100644
--- a/third-party/freertos/portable/GCC/ft_platform/aarch64/portmacro.h
+++ b/third-party/freertos/portable/GCC/ft_platform/aarch64/portmacro.h
@@ -52,11 +52,11 @@ extern "C"
#define portSTACK_TYPE size_t
#define portBASE_TYPE long
- typedef portSTACK_TYPE StackType_t;
- typedef portBASE_TYPE BaseType_t;
- typedef uint64_t UBaseType_t;
+typedef portSTACK_TYPE StackType_t;
+typedef portBASE_TYPE BaseType_t;
+typedef uint64_t UBaseType_t;
- typedef uint64_t TickType_t;
+typedef uint64_t TickType_t;
#define portMAX_DELAY ((TickType_t)0xffffffffffffffff)
/* 32-bit tick type on a 32-bit architecture, so reads of the tick count do
@@ -77,51 +77,49 @@ not need to be guarded with a critical section. */
/* Called at the end of an ISR that can cause a context switch. */
#define portEND_SWITCHING_ISR(xSwitchRequired) \
- { \
- extern uint64_t ullPortYieldRequired; \
+ { \
+ extern uint64_t ullPortYieldRequired; \
\
- if (xSwitchRequired != pdFALSE) \
- { \
- ullPortYieldRequired = pdTRUE; \
- } \
- }
+ if (xSwitchRequired != pdFALSE) \
+ { \
+ ullPortYieldRequired = pdTRUE; \
+ } \
+ }
#define portYIELD_FROM_ISR(x) portEND_SWITCHING_ISR(x)
#if defined(GUEST)
#define portYIELD() __asm volatile("SVC 0" :: \
- : "memory")
+ : "memory")
#else
#define portYIELD() __asm volatile("SMC 0" :: \
- : "memory")
+ : "memory")
#endif
- /*-----------------------------------------------------------
- * Critical section control
- *----------------------------------------------------------*/
+/*-----------------------------------------------------------
+* Critical section control
+*----------------------------------------------------------*/
- extern void vPortEnterCritical(void);
- extern void vPortExitCritical(void);
- extern UBaseType_t uxPortSetInterruptMask(void);
- extern void vPortClearInterruptMask(UBaseType_t uxNewMaskValue);
- extern void vPortInstallFreeRTOSVectorTable(void);
+extern void vPortEnterCritical(void);
+extern void vPortExitCritical(void);
+extern UBaseType_t uxPortSetInterruptMask(void);
+extern void vPortClearInterruptMask(UBaseType_t uxNewMaskValue);
+extern void vPortInstallFreeRTOSVectorTable(void);
#define portDISABLE_INTERRUPTS() \
- __asm volatile("MSR DAIFSET, #2" :: \
- : "memory"); \
- __asm volatile("DSB SY"); \
- __asm volatile("ISB SY");
+ __asm volatile("MSR DAIFSET, #2" :: \
+ : "memory"); \
+ __asm volatile("DSB SY"); \
+ __asm volatile("ISB SY");
#define portENABLE_INTERRUPTS() \
- __asm volatile("MSR DAIFCLR, #2" :: \
- : "memory"); \
- __asm volatile("DSB SY"); \
- __asm volatile("ISB SY");
+ __asm volatile("MSR DAIFCLR, #2" :: \
+ : "memory"); \
+ __asm volatile("DSB SY"); \
+ __asm volatile("ISB SY");
/* These macros do not globally disable/enable interrupts. They do mask off
interrupts that have a priority below configMAX_API_CALL_INTERRUPT_PRIORITY. */
#define portENTER_CRITICAL() vPortEnterCritical();
#define portEXIT_CRITICAL() vPortExitCritical();
-#define portSET_INTERRUPT_MASK_FROM_ISR() uxPortSetInterruptMask()
-#define portCLEAR_INTERRUPT_MASK_FROM_ISR(x) vPortClearInterruptMask(x)
/*-----------------------------------------------------------*/
@@ -131,13 +129,13 @@ macros is used. */
#define portTASK_FUNCTION_PROTO(vFunction, pvParameters) void vFunction(void *pvParameters)
#define portTASK_FUNCTION(vFunction, pvParameters) void vFunction(void *pvParameters)
- /* Prototype of the FreeRTOS tick handler. This must be installed as the
+/* Prototype of the FreeRTOS tick handler. This must be installed as the
handler for whichever peripheral is used to generate the RTOS tick. */
- void FreeRTOS_Tick_Handler(void);
+void FreeRTOS_Tick_Handler(void);
- /* Any task that uses the floating point unit MUST call vPortTaskUsesFPU()
+/* Any task that uses the floating point unit MUST call vPortTaskUsesFPU()
before any floating point instructions are executed. */
- void vPortTaskUsesFPU(void);
+void vPortTaskUsesFPU(void);
#define portTASK_USES_FLOATING_POINT() vPortTaskUsesFPU()
#define portLOWEST_INTERRUPT_PRIORITY (((uint32_t)configUNIQUE_INTERRUPT_PRIORITIES) - 1UL)
@@ -154,14 +152,14 @@ before any floating point instructions are executed. */
#define portRECORD_READY_PRIORITY(uxPriority, uxReadyPriorities) (uxReadyPriorities) |= (1UL << (uxPriority))
#define portRESET_READY_PRIORITY(uxPriority, uxReadyPriorities) (uxReadyPriorities) &= ~(1UL << (uxPriority))
- /*-----------------------------------------------------------*/
+/*-----------------------------------------------------------*/
#define portGET_HIGHEST_PRIORITY(uxTopPriority, uxReadyPriorities) uxTopPriority = (31 - __builtin_clz(uxReadyPriorities))
#endif /* configUSE_PORT_OPTIMISED_TASK_SELECTION */
#ifdef configASSERT
- void vPortValidateInterruptPriority(void);
+void vPortValidateInterruptPriority(void);
#define portASSERT_IF_INTERRUPT_PRIORITY_INVALID() vPortValidateInterruptPriority()
#endif /* configASSERT */
@@ -175,22 +173,22 @@ before any floating point instructions are executed. */
/* The number of bits to shift for an interrupt priority is dependent on the
number of bits implemented by the interrupt controller. */
#if configUNIQUE_INTERRUPT_PRIORITIES == 16
-#define portPRIORITY_SHIFT 4
-#define portMAX_BINARY_POINT_VALUE 3
+ #define portPRIORITY_SHIFT 4
+ #define portMAX_BINARY_POINT_VALUE 3
#elif configUNIQUE_INTERRUPT_PRIORITIES == 32
-#define portPRIORITY_SHIFT 3
-#define portMAX_BINARY_POINT_VALUE 2
+ #define portPRIORITY_SHIFT 3
+ #define portMAX_BINARY_POINT_VALUE 2
#elif configUNIQUE_INTERRUPT_PRIORITIES == 64
-#define portPRIORITY_SHIFT 2
-#define portMAX_BINARY_POINT_VALUE 1
+ #define portPRIORITY_SHIFT 2
+ #define portMAX_BINARY_POINT_VALUE 1
#elif configUNIQUE_INTERRUPT_PRIORITIES == 128
-#define portPRIORITY_SHIFT 1
-#define portMAX_BINARY_POINT_VALUE 0
+ #define portPRIORITY_SHIFT 1
+ #define portMAX_BINARY_POINT_VALUE 0
#elif configUNIQUE_INTERRUPT_PRIORITIES == 256
-#define portPRIORITY_SHIFT 0
-#define portMAX_BINARY_POINT_VALUE 0
+ #define portPRIORITY_SHIFT 0
+ #define portMAX_BINARY_POINT_VALUE 0
#else
-#error Invalid configUNIQUE_INTERRUPT_PRIORITIES setting. configUNIQUE_INTERRUPT_PRIORITIES must be set to the number of unique priorities implemented by the target hardware
+ #error Invalid configUNIQUE_INTERRUPT_PRIORITIES setting. configUNIQUE_INTERRUPT_PRIORITIES must be set to the number of unique priorities implemented by the target hardware
#endif
/* Interrupt controller access addresses. */
@@ -200,12 +198,4 @@ number of bits implemented by the interrupt controller. */
#define portICCBPR_BINARY_POINT_OFFSET (0x08)
#define portICCRPR_RUNNING_PRIORITY_OFFSET (0x14)
-// #define portINTERRUPT_CONTROLLER_CPU_INTERFACE_ADDRESS (GIC_GICC_BASE)
-// #define portICCPMR_PRIORITY_MASK_REGISTER (*((volatile uint32_t *)(portINTERRUPT_CONTROLLER_CPU_INTERFACE_ADDRESS + portICCPMR_PRIORITY_MASK_OFFSET)))
-// #define portICCIAR_INTERRUPT_ACKNOWLEDGE_REGISTER_ADDRESS (portINTERRUPT_CONTROLLER_CPU_INTERFACE_ADDRESS + portICCIAR_INTERRUPT_ACKNOWLEDGE_OFFSET)
-// #define portICCEOIR_END_OF_INTERRUPT_REGISTER_ADDRESS (portINTERRUPT_CONTROLLER_CPU_INTERFACE_ADDRESS + portICCEOIR_END_OF_INTERRUPT_OFFSET)
-// #define portICCPMR_PRIORITY_MASK_REGISTER_ADDRESS (portINTERRUPT_CONTROLLER_CPU_INTERFACE_ADDRESS + portICCPMR_PRIORITY_MASK_OFFSET)
-// #define portICCBPR_BINARY_POINT_REGISTER (*((const volatile uint32_t *)(portINTERRUPT_CONTROLLER_CPU_INTERFACE_ADDRESS + portICCBPR_BINARY_POINT_OFFSET)))
-// #define portICCRPR_RUNNING_PRIORITY_REGISTER (*((const volatile uint32_t *)(portINTERRUPT_CONTROLLER_CPU_INTERFACE_ADDRESS + portICCRPR_RUNNING_PRIORITY_OFFSET)))
-
#endif /* PORTMACRO_H */
diff --git a/third-party/freertos/portable/freertos_configs.c b/third-party/freertos/portable/freertos_configs.c
index f5c8f4e63fc5c4e032efbeca086dff76a107b377..64587790c6f3099f7b1fab31f0188e29a9c24de1 100644
--- a/third-party/freertos/portable/freertos_configs.c
+++ b/third-party/freertos/portable/freertos_configs.c
@@ -1,24 +1,29 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: freertos_configs.c
* Date: 2022-02-24 13:42:19
* LastEditTime: 2022-03-21 17:03:31
- * Description: This file is for
- *
- * Modify History:
+ * Description: This file is for the freertos config functions
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2021/9/26 first release
+ * 1.1 wangxiaodong 2021/12/24 adapt new standalone
+ * 1.2 wangxiaodong 2022/6/20 v0.1.0
+ * 2.0 wangxiaodong 2022/8/9 adapt E2000D
+ * 2.1 liuzhihong 2023/1/12 improve lwip functions
*/
#include "FreeRTOS.h"
@@ -34,18 +39,20 @@
#include "fexception.h"
#include "fprintf.h"
+static volatile u32 is_in_irq = 0 ;
+
void vMainAssertCalled(const char *pcFileName, uint32_t ulLineNumber)
{
- printf("Assert Error is %s : %d \r\n", pcFileName, ulLineNumber);
+ printf("Assert Error is %s : %d .\r\n", pcFileName, ulLineNumber);
for (;;)
;
}
void vApplicationMallocFailedHook(void)
{
- u32 cpu_id;
+ u32 cpu_id;
GetCpuId(&cpu_id);
- printf("cpu %d Malloc Failed\r\n",cpu_id);
+ printf("CPU %d Malloc Failed.\r\n", cpu_id);
while (1)
;
}
@@ -64,7 +71,7 @@ void vApplicationIdleHook(void)
u32 PlatformGetGicDistBase(void)
{
- return GICV3_BASEADDRESS;
+ return GICV3_BASE_ADDR;
}
static u32 cntfrq; /* System frequency */
@@ -75,7 +82,7 @@ void vConfigureTickInterrupt(void)
GenericTimerStop();
/* Get system frequency */
cntfrq = GenericTimerFrequecy();
-
+
/* Set tick rate */
GenericTimerCompare(cntfrq / configTICK_RATE_HZ);
GenericTimerInterruptEnable();
@@ -97,10 +104,10 @@ volatile unsigned int gCpuRuntime;
void vApplicationInterruptHandler(uint32_t ulICCIAR)
{
int ulInterruptID;
-
+ is_in_irq ++;
/* Interrupts cannot be re-enabled until the source of the interrupt is
- cleared. The ID of the interrupt is obtained by bitwise ANDing the ICCIAR
- value with 0x3FF. */
+ cleared. The ID of the interrupt is obtained by bitwise ANDing the ICCIAR
+ value with 0x3FF. */
ulInterruptID = ulICCIAR & 0x3FFUL;
/* call handler function */
@@ -114,106 +121,120 @@ void vApplicationInterruptHandler(uint32_t ulICCIAR)
{
FExceptionInterruptHandler((void *)(uintptr)ulInterruptID);
}
+ is_in_irq --;
+}
+
+
+/**
+ * @name: vApplicationInIrq
+ * @msg: Used to indicate whether you are currently in an interrupt
+ * @return {int} 1:is in an irq ,0 is not in
+ * @note:
+ */
+
+int vApplicationInIrq(void)
+{
+ return is_in_irq;
}
static InterruptDrvType finterrupt;
void vApplicationInitIrq(void)
{
- InterruptInit(&finterrupt,INTERRUPT_DRV_INTS_ID,INTERRUPT_ROLE_MASTER);
+ InterruptInit(&finterrupt, INTERRUPT_DRV_INTS_ID, INTERRUPT_ROLE_MASTER);
}
void vApplicationStackOverflowHook(xTaskHandle pxTask, signed char *pcTaskName)
{
- (void) pxTask;
- (void) pcTaskName;
+ (void) pxTask;
+ (void) pcTaskName;
+
+ taskDISABLE_INTERRUPTS();
+ FASSERT(FALSE);
- taskDISABLE_INTERRUPTS();
- FASSERT(FALSE);
-
}
/* configSUPPORT_STATIC_ALLOCATION is set to 1, so the application must provide an
* implementation of vApplicationGetIdleTaskMemory() to provide the memory that is
* used by the Idle task. */
-void vApplicationGetIdleTaskMemory( StaticTask_t **ppxIdleTaskTCBBuffer, StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize )
+void vApplicationGetIdleTaskMemory(StaticTask_t **ppxIdleTaskTCBBuffer, StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize)
{
- /* If the buffers to be provided to the Idle task are declared inside this
- * function then they must be declared static - otherwise they will be allocated on
- * the stack and so not exists after this function exits. */
- static StaticTask_t xIdleTaskTCB;
- static StackType_t uxIdleTaskStack[ configMINIMAL_STACK_SIZE ];
-
- /* Pass out a pointer to the StaticTask_t structure in which the Idle task's
- state will be stored. */
- *ppxIdleTaskTCBBuffer = &xIdleTaskTCB;
-
- /* Pass out the array that will be used as the Idle task's stack. */
- *ppxIdleTaskStackBuffer = uxIdleTaskStack;
-
- /* Pass out the size of the array pointed to by *ppxIdleTaskStackBuffer.
- Note that, as the array is necessarily of type StackType_t,
- configMINIMAL_STACK_SIZE is specified in words, not bytes. */
- *pulIdleTaskStackSize = configMINIMAL_STACK_SIZE;
+ /* If the buffers to be provided to the Idle task are declared inside this
+ * function then they must be declared static - otherwise they will be allocated on
+ * the stack and so not exists after this function exits. */
+ static StaticTask_t xIdleTaskTCB;
+ static StackType_t uxIdleTaskStack[ configMINIMAL_STACK_SIZE ];
+
+ /* Pass out a pointer to the StaticTask_t structure in which the Idle task's
+ state will be stored. */
+ *ppxIdleTaskTCBBuffer = &xIdleTaskTCB;
+
+ /* Pass out the array that will be used as the Idle task's stack. */
+ *ppxIdleTaskStackBuffer = uxIdleTaskStack;
+
+ /* Pass out the size of the array pointed to by *ppxIdleTaskStackBuffer.
+ Note that, as the array is necessarily of type StackType_t,
+ configMINIMAL_STACK_SIZE is specified in words, not bytes. */
+ *pulIdleTaskStackSize = configMINIMAL_STACK_SIZE;
}
/* configSUPPORT_STATIC_ALLOCATION and configUSE_TIMERS are both set to 1, so the
* application must provide an implementation of `vApplicationGetTimerTaskMemory()
* to provide the memory that is used by the Timer service task. */
-void vApplicationGetTimerTaskMemory( StaticTask_t **ppxTimerTaskTCBBuffer, StackType_t **ppxTimerTaskStackBuffer, uint32_t *pulTimerTaskStackSize )
+void vApplicationGetTimerTaskMemory(StaticTask_t **ppxTimerTaskTCBBuffer, StackType_t **ppxTimerTaskStackBuffer, uint32_t *pulTimerTaskStackSize)
{
- /* If the buffers to be provided to the Timer task are declared inside this
- * function then they must be declared static - otherwise they will be allocated on
- * the stack and so not exists after this function exits. */
- static StaticTask_t xTimerTaskTCB;
- static StackType_t uxTimerTaskStack[ configTIMER_TASK_STACK_DEPTH ];
-
- /* Pass out a pointer to the StaticTask_t structure in which the Timer
- task's state will be stored. */
- *ppxTimerTaskTCBBuffer = &xTimerTaskTCB;
-
- /* Pass out the array that will be used as the Timer task's stack. */
- *ppxTimerTaskStackBuffer = uxTimerTaskStack;
-
- /* Pass out the size of the array pointed to by *ppxTimerTaskStackBuffer.
- Note that, as the array is necessarily of type StackType_t,
- configTIMER_TASK_STACK_DEPTH is specified in words, not bytes. */
- *pulTimerTaskStackSize = configTIMER_TASK_STACK_DEPTH;
+ /* If the buffers to be provided to the Timer task are declared inside this
+ * function then they must be declared static - otherwise they will be allocated on
+ * the stack and so not exists after this function exits. */
+ static StaticTask_t xTimerTaskTCB;
+ static StackType_t uxTimerTaskStack[ configTIMER_TASK_STACK_DEPTH ];
+
+ /* Pass out a pointer to the StaticTask_t structure in which the Timer
+ task's state will be stored. */
+ *ppxTimerTaskTCBBuffer = &xTimerTaskTCB;
+
+ /* Pass out the array that will be used as the Timer task's stack. */
+ *ppxTimerTaskStackBuffer = uxTimerTaskStack;
+
+ /* Pass out the size of the array pointed to by *ppxTimerTaskStackBuffer.
+ Note that, as the array is necessarily of type StackType_t,
+ configTIMER_TASK_STACK_DEPTH is specified in words, not bytes. */
+ *pulTimerTaskStackSize = configTIMER_TASK_STACK_DEPTH;
}
-void vPrintString( const char *pcString )
+void vPrintString(const char *pcString)
{
- /* Print the string, using a critical section as a crude method of mutual
- exclusion. */
- taskENTER_CRITICAL();
- {
- printf( "%s\r\n", pcString );
- }
- taskEXIT_CRITICAL();
+ /* Print the string, using a critical section as a crude method of mutual
+ exclusion. */
+ taskENTER_CRITICAL();
+ {
+ printf("%s\r\n", pcString);
+ }
+ taskEXIT_CRITICAL();
}
-void vPrintStringAndNumber( const char *pcString, uint32_t ulValue )
+void vPrintStringAndNumber(const char *pcString, uint32_t ulValue)
{
- /* Print the string, using a critical section as a crude method of mutual
- exclusion. */
- taskENTER_CRITICAL();
- {
- printf( "%s %lu\r\n", pcString, ulValue );
- }
- taskEXIT_CRITICAL();
+ /* Print the string, using a critical section as a crude method of mutual
+ exclusion. */
+ taskENTER_CRITICAL();
+ {
+ printf("%s %lu\r\n", pcString, ulValue);
+ }
+ taskEXIT_CRITICAL();
}
void vPrintf(const char *format, ...)
{
- /* Print the string, using a critical section as a crude method of mutual exclusion. */
- taskENTER_CRITICAL();
- {
- va_list args;
- va_start(args, format);
- vprintf(format, args);
- va_end(args);
- }
- taskEXIT_CRITICAL();
+ /* Print the string, using a critical section as a crude method of mutual exclusion. */
+ taskENTER_CRITICAL();
+ {
+ va_list args;
+ va_start(args, format);
+ vprintf(format, args);
+ va_end(args);
+ }
+ taskEXIT_CRITICAL();
}
diff --git a/third-party/letter-shell-3.1/port/cmd/cmd_bootelf.c b/third-party/letter-shell-3.1/port/cmd/cmd_bootelf.c
index 5fc8e66a75da453d375cd35817e5064739ee82d1..0a145b03ae0bd02f90bf8af6602d5a827d74a30c 100644
--- a/third-party/letter-shell-3.1/port/cmd/cmd_bootelf.c
+++ b/third-party/letter-shell-3.1/port/cmd/cmd_bootelf.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: cmd_bootelf.c
* Date: 2022-02-24 18:24:53
* LastEditTime: 2022-03-21 17:03:44
- * Description: This file is for
- *
- * Modify History:
+ * Description: This file is for the bootelf command functions
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
+ * 1.0 huanghe 2022/3/25 first release
*/
#include
@@ -30,8 +31,8 @@ static unsigned long image_load_addr = 0x80100000;
static void BootelfCmdUsage()
{
- printf("usage:\r\n");
- printf(" bootelf [-p|-s] [address] \r\n");
+ printf("usage:\r\n");
+ printf(" bootelf [-p|-s] [address] \r\n");
printf(" load ELF image at [address] via program headers (-p)\r\n");
printf(" or via section headers (-s)\r\n");
}
@@ -39,71 +40,83 @@ static void BootelfCmdUsage()
static int BootelfCmdEntry(int argc, char *argv[])
{
unsigned long addr; /* Address of the ELF image */
- unsigned long rc = 0; /* Return value from user code */
+ unsigned long rc = 0; /* Return value from user code */
unsigned long load_flg = 0;
- char *sload = NULL;
+ char *sload = NULL;
- if(argc < 2)
- {
- BootelfCmdUsage();
+ if (argc < 2)
+ {
+ BootelfCmdUsage();
return -1;
- }
+ }
+
+ /* Consume 'bootelf' */
+ argc--;
+ argv++;
- /* Consume 'bootelf' */
- argc--; argv++;
-
- /* Check for flag. */
- if (argc >= 1 && (argv[0][0] == '-' && (argv[0][1] == 'p' || argv[0][1] == 's')))
+ /* Check for flag. */
+ if (argc >= 1 && (argv[0][0] == '-' && (argv[0][1] == 'p' || argv[0][1] == 's')))
{
- sload = argv[0];
- /* Consume flag. */
- argc--; argv++;
- }
+ sload = argv[0];
+ /* Consume flag. */
+ argc--;
+ argv++;
+ }
- if (argc >= 1 && (argv[0][0] == '-' && (argv[0][1] == 'l')))
+ if (argc >= 1 && (argv[0][0] == '-' && (argv[0][1] == 'l')))
{
- /* Consume flag. */
- argc--; argv++;
- load_flg = 1;
- }
+ /* Consume flag. */
+ argc--;
+ argv++;
+ load_flg = 1;
+ }
- /* Check for address. */
- if (argc >= 1 && strict_strtoul(argv[0], 16, &addr) == 0)
+ /* Check for address. */
+ if (argc >= 1 && strict_strtoul(argv[0], 16, &addr) == 0)
{
- /* Consume address */
- argc--; argv++;
- }
+ /* Consume address */
+ argc--;
+ argv++;
+ }
else
{
- addr = image_load_addr;
+ addr = image_load_addr;
+ }
+
+ if (!ElfIsImageValid(addr))
+ {
+ return 1;
}
- if (!ElfIsImageValid(addr))
- return 1;
+ if (sload && sload[1] == 'p')
+ {
+ addr = ElfLoadElfImagePhdr(addr);
+ }
+ else
+ {
+ addr = ElfLoadElfImageShdr(addr);
+ }
- if (sload && sload[1] == 'p')
- addr = ElfLoadElfImagePhdr(addr);
- else
- addr = ElfLoadElfImageShdr(addr);
-
- /*
- * pass address parameter as argv[0] (aka command name),
- * and all remaining args
- */
- if (load_flg == 1 )
+ /*
+ * pass address parameter as argv[0] (aka command name),
+ * and all remaining args
+ */
+ if (load_flg == 1)
{
- printf("## Load application at 0x%08lx ...\n", addr);
- }else{
- printf("## Starting application at 0x%08lx ...\n", addr);
- rc = ElfExecBootElf((void *)addr, argc, argv);
- }
+ printf("## Load application at 0x%08lx ...\n", addr);
+ }
+ else
+ {
+ printf("## Starting application at 0x%08lx ...\n", addr);
+ rc = ElfExecBootElf((void *)addr, argc, argv);
+ }
- printf("## Application terminated, rc = 0x%lx\n", rc);
+ printf("## Application terminated, rc = 0x%lx.\n", rc);
return (int)rc;
}
-SHELL_EXPORT_CMD(SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN),
+SHELL_EXPORT_CMD(SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN),
bootelf, BootelfCmdEntry, Boot from an ELF image in memory);
diff --git a/third-party/letter-shell-3.1/port/cmd/cmd_codeloader.c b/third-party/letter-shell-3.1/port/cmd/cmd_codeloader.c
index d3e4bf388304171060de7ad39866ee14635fb4b0..ec540a40d35affa13f44f986694b8e951a3d2a4b 100644
--- a/third-party/letter-shell-3.1/port/cmd/cmd_codeloader.c
+++ b/third-party/letter-shell-3.1/port/cmd/cmd_codeloader.c
@@ -1,12 +1,26 @@
/*
- * @Author: your name
- * @Date: 2021-09-06 17:11:48
- * @LastEditTime: 2022-02-10 15:01:05
- * @LastEditors: Please set LastEditors
- * @Description: In User Settings Edit
- * @FilePath: \phytium-standalone-sdk\third-party\letter-shell-3.1\port\cmd\cmd_codelode.c
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * All Rights Reserved.
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the Phytium Public License for more details.
+ *
+ *
+ * FilePath: cmd_md.c
+ * Date: 2022-02-24 18:24:53
+ * LastEditTime: 2022-03-21 17:03:53
+ * Description: This file is for the codeloader command functions
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 huanghe 2022/3/25 first release
*/
-
#include
#include "../src/shell.h"
#include "strto.h"
@@ -16,65 +30,71 @@ static unsigned long image_load_addr = 0x80100000;
static void LoadElfCmdUsage()
{
- printf("usage:\r\n");
- printf(" loadelf [-p|-s] [address] \r\n");
- printf(" load ELF image at [address] via program headers (-p)\r\n");
- printf(" or via section headers (-s)\r\n");
+ printf("usage:\r\n");
+ printf(" loadelf [-p|-s] [address] \r\n");
+ printf(" load ELF image at [address] via program headers (-p)\r\n");
+ printf(" or via section headers (-s)\r\n");
}
static int LoadElfCmdEntry(int argc, char *argv[])
{
- unsigned long addr; /* Address of the ELF image */
- unsigned long rc; /* Return value from user code */
- unsigned long load_flg = 0;
- char *sload = NULL;
+ unsigned long addr; /* Address of the ELF image */
+ unsigned long rc; /* Return value from user code */
+ unsigned long load_flg = 0;
+ char *sload = NULL;
- if (argc < 2)
- {
- LoadElfCmdUsage();
- return -1;
- }
- /* Consume 'LoadElf' */
- argc--;
- argv++;
+ if (argc < 2)
+ {
+ LoadElfCmdUsage();
+ return -1;
+ }
+ /* Consume 'LoadElf' */
+ argc--;
+ argv++;
- /* Check for flag. */
- if (argc >= 1 && (argv[0][0] == '-' && (argv[0][1] == 'p' || argv[0][1] == 's')))
- {
- sload = argv[0];
- /* Consume flag. */
- argc--;
- argv++;
- }
+ /* Check for flag. */
+ if (argc >= 1 && (argv[0][0] == '-' && (argv[0][1] == 'p' || argv[0][1] == 's')))
+ {
+ sload = argv[0];
+ /* Consume flag. */
+ argc--;
+ argv++;
+ }
- /* Check for address. */
- if (argc >= 1 && strict_strtoul(argv[0], 16, &addr) == 0)
- {
- /* Consume address */
- argc--;
- argv++;
- }
- else
- {
- addr = image_load_addr;
- }
+ /* Check for address. */
+ if (argc >= 1 && strict_strtoul(argv[0], 16, &addr) == 0)
+ {
+ /* Consume address */
+ argc--;
+ argv++;
+ }
+ else
+ {
+ addr = image_load_addr;
+ }
- if (!ElfIsImageValid(addr))
- return 1;
+ if (!ElfIsImageValid(addr))
+ {
+ return 1;
+ }
- if (sload && sload[1] == 'p')
- addr = ElfLoadElfImagePhdr(addr);
- else
- addr = ElfLoadElfImageShdr(addr);
+ if (sload && sload[1] == 'p')
+ {
+ addr = ElfLoadElfImagePhdr(addr);
+ }
+ else
+ {
+ addr = ElfLoadElfImageShdr(addr);
+ }
- /*
- * pass address parameter as argv[0] (aka command name),
- * and all remaining args
- */
- printf("## Load application at 0x%08lx ...\n", addr);
+ /*
+ * pass address parameter as argv[0] (aka command name),
+ * and all remaining args
+ */
+ printf("## Load application at 0x%08lx ...\n", addr);
- return 0;
+ return 0;
}
SHELL_EXPORT_CMD(SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN),
- loadelf, LoadElfCmdEntry, Load from an ELF image in memory);
\ No newline at end of file
+ loadelf, LoadElfCmdEntry, Load from an ELF image in memory);
\ No newline at end of file
diff --git a/third-party/letter-shell-3.1/port/cmd/cmd_echo.c b/third-party/letter-shell-3.1/port/cmd/cmd_echo.c
index 477b2720c3a61af2a4ad6175daee91b2a96b12d1..53456affd8809defff599cb79bd685055340ab8c 100644
--- a/third-party/letter-shell-3.1/port/cmd/cmd_echo.c
+++ b/third-party/letter-shell-3.1/port/cmd/cmd_echo.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: cmd_echo.c
* Date: 2022-02-24 18:24:53
* LastEditTime: 2022-03-21 17:03:49
- * Description: This file is for
- *
- * Modify History:
+ * Description: This file is for the echo command functions
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
+ * 1.0 huanghe 2022/3/25 first release
*/
#include
@@ -30,8 +31,8 @@
static void EchoCmdUsage()
{
- printf("usage:\r\n");
- printf(" echo [str] [str] \r\n");
+ printf("usage:\r\n");
+ printf(" echo [str] [str] \r\n");
printf(" printf to shell\r\n");
}
@@ -39,11 +40,11 @@ static int EchoCmdEntry(int argc, char *argv[])
{
int loop;
- if(argc < 2)
- {
- EchoCmdUsage();
+ if (argc < 2)
+ {
+ EchoCmdUsage();
return -1;
- }
+ }
for (loop = 1; loop < argc; loop++)
{
diff --git a/third-party/letter-shell-3.1/port/cmd/cmd_md.c b/third-party/letter-shell-3.1/port/cmd/cmd_md.c
index 9860fb6e30752e7f93deeb1800c639894d69c030..13d99dd67492c3461ee718e37d51726d590444ed 100644
--- a/third-party/letter-shell-3.1/port/cmd/cmd_md.c
+++ b/third-party/letter-shell-3.1/port/cmd/cmd_md.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: cmd_md.c
* Date: 2022-02-24 18:24:53
* LastEditTime: 2022-03-21 17:03:53
- * Description: This file is for
- *
- * Modify History:
+ * Description: This file is for the md command functions
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
+ * 1.0 huanghe 2022/3/25 first release
*/
#include
@@ -30,121 +31,133 @@
static void MdCmdUsage()
{
- printf("usage:\r\n");
- printf(" md [-b|-w|-l|-q] address [-c count]\r\n");
+ printf("usage:\r\n");
+ printf(" md [-b|-w|-l|-q] address [-c count]\r\n");
}
static int MdCmdEntry(int argc, char *argv[])
{
- uintptr addr = 0;
- char buf[16];
- int n = 64, size = 1;
- int i, len;
- u8 b;
- u16 w;
- u32 l;
- u64 q;
+ uintptr addr = 0;
+ char buf[16];
+ int n = 64, size = 1;
+ int i, len;
+ u8 b;
+ u16 w;
+ u32 l;
+ u64 q;
- if (argc < 2)
- {
- MdCmdUsage();
- return -1;
- }
+ if (argc < 2)
+ {
+ MdCmdUsage();
+ return -1;
+ }
- for (i = 1; i < argc; i++)
- {
- if (!strcmp(argv[i], "-b"))
- size = 1;
- else if (!strcmp(argv[i], "-w"))
- size = 2;
- else if (!strcmp(argv[i], "-l"))
- size = 4;
- else if (!strcmp(argv[i], "-q"))
- size = 8;
- else if (!strcmp(argv[i], "-c") && (argc > i + 1))
- {
- n = strtoul(argv[i + 1], NULL, 0);
- i++;
- }
- else if (*argv[i] == '-')
- {
- MdCmdUsage();
- return (-1);
- }
- else if (*argv[i] != '-' && strcmp(argv[i], "-") != 0)
- {
- addr = strtoul(argv[i], NULL, 0);
- }
- }
+ for (i = 1; i < argc; i++)
+ {
+ if (!strcmp(argv[i], "-b"))
+ {
+ size = 1;
+ }
+ else if (!strcmp(argv[i], "-w"))
+ {
+ size = 2;
+ }
+ else if (!strcmp(argv[i], "-l"))
+ {
+ size = 4;
+ }
+ else if (!strcmp(argv[i], "-q"))
+ {
+ size = 8;
+ }
+ else if (!strcmp(argv[i], "-c") && (argc > i + 1))
+ {
+ n = strtoul(argv[i + 1], NULL, 0);
+ i++;
+ }
+ else if (*argv[i] == '-')
+ {
+ MdCmdUsage();
+ return (-1);
+ }
+ else if (*argv[i] != '-' && strcmp(argv[i], "-") != 0)
+ {
+ addr = strtoul(argv[i], NULL, 0);
+ }
+ }
- if (size == 1)
- {
- addr &= ~((uintptr)0x0);
- }
- else if (size == 2)
- {
- addr &= ~((uintptr)0x1);
- }
- else if (size == 4)
- {
- addr &= ~((uintptr)0x3);
- }
- else if (size == 8)
- {
- addr &= ~((uintptr)0x7);
- }
- n = n * size;
+ if (size == 1)
+ {
+ addr &= ~((uintptr)0x0);
+ }
+ else if (size == 2)
+ {
+ addr &= ~((uintptr)0x1);
+ }
+ else if (size == 4)
+ {
+ addr &= ~((uintptr)0x3);
+ }
+ else if (size == 8)
+ {
+ addr &= ~((uintptr)0x7);
+ }
+ n = n * size;
- while (n > 0)
- {
- len = (n > 16) ? 16 : n;
- printf("%08lx: ", addr);
- if (size == 1)
- {
- for (i = 0; i < len; i += size)
- {
- FtOut8((uintptr)(&buf[i]), (b = FtIn8(addr + i)));
- printf(" %02lx", b);
- }
- }
- else if (size == 2)
- {
- for (i = 0; i < len; i += size)
- {
- FtOut16((uintptr)(&buf[i]), (w = FtIn16(addr + i)));
- printf(" %04lx", w);
- }
- }
- else if (size == 4)
- {
- for (i = 0; i < len; i += size)
- {
- FtOut32((uintptr)(&buf[i]), (l = FtIn32(addr + i)));
- printf(" %08lx", l);
- }
- }
- else if (size == 8)
- {
- for (i = 0; i < len; i += size)
- {
- FtOut64((uintptr)(&buf[i]), (q = FtIn64(addr + i)));
- printf(" %016llx", q);
- }
- }
- printf("%*s", (16 - len) * 2 + (16 - len) / size + 4, "");
- for (i = 0; i < len; i++)
- {
- if ((buf[i] < 0x20) || (buf[i] > 0x7e))
- printf(".");
- else
- printf("%c", buf[i]);
- }
- addr += len;
- n -= len;
- printf("\r\n");
- }
+ while (n > 0)
+ {
+ len = (n > 16) ? 16 : n;
+ printf("%08lx: ", addr);
+ if (size == 1)
+ {
+ for (i = 0; i < len; i += size)
+ {
+ FtOut8((uintptr)(&buf[i]), (b = FtIn8(addr + i)));
+ printf(" %02lx", b);
+ }
+ }
+ else if (size == 2)
+ {
+ for (i = 0; i < len; i += size)
+ {
+ FtOut16((uintptr)(&buf[i]), (w = FtIn16(addr + i)));
+ printf(" %04lx", w);
+ }
+ }
+ else if (size == 4)
+ {
+ for (i = 0; i < len; i += size)
+ {
+ FtOut32((uintptr)(&buf[i]), (l = FtIn32(addr + i)));
+ printf(" %08lx", l);
+ }
+ }
+ else if (size == 8)
+ {
+ for (i = 0; i < len; i += size)
+ {
+ FtOut64((uintptr)(&buf[i]), (q = FtIn64(addr + i)));
+ printf(" %016llx", q);
+ }
+ }
+ printf("%*s", (16 - len) * 2 + (16 - len) / size + 4, "");
+ for (i = 0; i < len; i++)
+ {
+ if ((buf[i] < 0x20) || (buf[i] > 0x7e))
+ {
+ printf(".");
+ }
+ else
+ {
+ printf("%c", buf[i]);
+ }
+ }
+ addr += len;
+ n -= len;
+ printf("\r\n");
+ }
- return 0;
+ return 0;
}
SHELL_EXPORT_CMD(SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN), md, MdCmdEntry, dump a memory region);
\ No newline at end of file
diff --git a/third-party/letter-shell-3.1/port/cmd/cmd_mw.c b/third-party/letter-shell-3.1/port/cmd/cmd_mw.c
index 477ebd547ad7a3aa99958e6b520a8c97536c5d40..ce0d2412a8ae26f5451a8738ab6ec4a75a403e52 100644
--- a/third-party/letter-shell-3.1/port/cmd/cmd_mw.c
+++ b/third-party/letter-shell-3.1/port/cmd/cmd_mw.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: cmd_mw.c
* Date: 2022-02-24 18:24:53
* LastEditTime: 2022-03-21 17:03:57
- * Description: This file is for
- *
- * Modify History:
+ * Description: This file is for the mw command functions
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
+ * 1.0 huanghe 2022/3/25 first release
*/
#include
@@ -30,97 +31,117 @@
static void MwUsage()
{
- printf("usage:\r\n");
- printf(" mw [-b|-w|-l|-q] address value [-c count]\r\n");
+ printf("usage:\r\n");
+ printf(" mw [-b|-w|-l|-q] address value [-c count]\r\n");
}
static int MwCmdEntry(int argc, char **argv)
{
- uintptr addr = 0;
- u64 value = 0;
- int size = 1, n = 1;
- int index = 0;
- int i;
+ uintptr addr = 0;
+ u64 value = 0;
+ int size = 1, n = 1;
+ int index = 0;
+ int i;
- if (argc < 3)
- {
- MwUsage();
- return -1;
- }
+ if (argc < 3)
+ {
+ MwUsage();
+ return -1;
+ }
- for (i = 1; i < argc; i++)
- {
- if (!strcmp(argv[i], "-b"))
- size = 1;
- else if (!strcmp(argv[i], "-w"))
- size = 2;
- else if (!strcmp(argv[i], "-l"))
- size = 4;
- else if (!strcmp(argv[i], "-q"))
- size = 8;
- else if (!strcmp(argv[i], "-c") && (argc > i + 1))
- {
- n = strtoul(argv[i + 1], NULL, 0);
- if (n == 0)
- {
- printf("mw: the writing count is zero by '-c %s'", argv[i + 1]);
- return -1;
- }
- i++;
- }
- else if (*argv[i] == '-')
- {
- MwUsage();
- return -1;
- }
- else if (*argv[i] != '-' && strcmp(argv[i], "-") != 0)
- {
- if (index == 0)
- addr = strtoul(argv[i], NULL, 0);
- else if (index == 1)
- value = strtoull(argv[i], NULL, 0);
- else if (index >= 2)
- {
- printf("mw: invalid paramter '%s'\r\n", argv[i]);
- printf("try 'help mw' for more information.\r\n");
- return (-1);
- }
- index++;
- }
- }
+ for (i = 1; i < argc; i++)
+ {
+ if (!strcmp(argv[i], "-b"))
+ {
+ size = 1;
+ }
+ else if (!strcmp(argv[i], "-w"))
+ {
+ size = 2;
+ }
+ else if (!strcmp(argv[i], "-l"))
+ {
+ size = 4;
+ }
+ else if (!strcmp(argv[i], "-q"))
+ {
+ size = 8;
+ }
+ else if (!strcmp(argv[i], "-c") && (argc > i + 1))
+ {
+ n = strtoul(argv[i + 1], NULL, 0);
+ if (n == 0)
+ {
+ printf("mw: the writing count is zero by '-c %s'.", argv[i + 1]);
+ return -1;
+ }
+ i++;
+ }
+ else if (*argv[i] == '-')
+ {
+ MwUsage();
+ return -1;
+ }
+ else if (*argv[i] != '-' && strcmp(argv[i], "-") != 0)
+ {
+ if (index == 0)
+ {
+ addr = strtoul(argv[i], NULL, 0);
+ }
+ else if (index == 1)
+ {
+ value = strtoull(argv[i], NULL, 0);
+ }
+ else if (index >= 2)
+ {
+ printf("mw: invalid paramter '%s'\r\n", argv[i]);
+ printf("try 'help mw' for more information.\r\n");
+ return (-1);
+ }
+ index++;
+ }
+ }
- if (size == 1)
- {
- addr &= ~((uintptr)0x0);
- }
- else if (size == 2)
- {
- addr &= ~((uintptr)0x1);
- }
- else if (size == 4)
- {
- addr &= ~((uintptr)0x3);
- }
- else if (size == 8)
- {
- addr &= ~((uintptr)0x7);
- }
- n = n * size;
+ if (size == 1)
+ {
+ addr &= ~((uintptr)0x0);
+ }
+ else if (size == 2)
+ {
+ addr &= ~((uintptr)0x1);
+ }
+ else if (size == 4)
+ {
+ addr &= ~((uintptr)0x3);
+ }
+ else if (size == 8)
+ {
+ addr &= ~((uintptr)0x7);
+ }
+ n = n * size;
- for (i = 0; i < n; i += size)
- {
- if (size == 1)
- FtOut8((uintptr)(addr + i), (u8)value);
- else if (size == 2)
- FtOut16((uintptr)(addr + i), (u16)value);
- else if (size == 4)
- FtOut32((uintptr)(addr + i), (u32)value);
- else if (size == 8)
- FtOut64((uintptr)(addr + i), (u64)value);
- }
- printf("write done.\r\n");
+ for (i = 0; i < n; i += size)
+ {
+ if (size == 1)
+ {
+ FtOut8((uintptr)(addr + i), (u8)value);
+ }
+ else if (size == 2)
+ {
+ FtOut16((uintptr)(addr + i), (u16)value);
+ }
+ else if (size == 4)
+ {
+ FtOut32((uintptr)(addr + i), (u32)value);
+ }
+ else if (size == 8)
+ {
+ FtOut64((uintptr)(addr + i), (u64)value);
+ }
+ }
+ printf("Write done.\r\n");
- return 0;
+ return 0;
}
SHELL_EXPORT_CMD(SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN), mw, MwCmdEntry, write values to memory region);
\ No newline at end of file
diff --git a/third-party/letter-shell-3.1/port/cmd/cmd_os_stats.c b/third-party/letter-shell-3.1/port/cmd/cmd_ps.c
similarity index 71%
rename from third-party/letter-shell-3.1/port/cmd/cmd_os_stats.c
rename to third-party/letter-shell-3.1/port/cmd/cmd_ps.c
index 52270073eda949be570900fadb8b6cdedad4928d..f165834b749eb23047afeebbb77cbb0cc825ec59 100644
--- a/third-party/letter-shell-3.1/port/cmd/cmd_os_stats.c
+++ b/third-party/letter-shell-3.1/port/cmd/cmd_ps.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: cmd_os_stats.c
* Date: 2022-02-25 08:34:53
* LastEditTime: 2022-02-25 08:34:53
- * Description: This file is for
- *
- * Modify History:
-* Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
+ * Description: This file is for the ps command functions
+ *
+ * Modify History:
+* Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 wangxiaodong 2022/11/24 first release
*/
#include "FreeRTOS.h"
#include "task.h"
@@ -35,18 +36,18 @@ static int DisplayTaskStats(int argc, char *argv[])
memset(CPU_RunInfo, 0, PS_LENGTH); /*信息缓冲区清零*/
vTaskList((char *)&CPU_RunInfo); //获取任务运行时间信息
- printf("---------------------------------------------\r\n");
- printf("task_name\ttask_state\tpriority\tstack\ttask_num\r\n");
- printf("%s", CPU_RunInfo);
+ printf("---------------------------------------------\r\n");
+ printf("task_name\ttask_state\tpriority\tstack\ttask_num\r\n");
+ printf("%s", CPU_RunInfo);
printf("---------------------------------------------\r\n");
memset(CPU_RunInfo, 0, PS_LENGTH); //信息缓冲区清零
vTaskGetRunTimeStats((char *)&CPU_RunInfo);
- printf("task_name\trun_time_count\tusage_rate\r\n");
- printf("%s", CPU_RunInfo);
- printf("---------------------------------------------\r\n\n");
+ printf("task_name\trun_time_count\tusage_rate\r\n");
+ printf("%s", CPU_RunInfo);
+ printf("---------------------------------------------\r\n\n");
return 0;
}
diff --git a/third-party/letter-shell-3.1/port/cmd/cmd_reboot.c b/third-party/letter-shell-3.1/port/cmd/cmd_reboot.c
index edb079d3bc99e44c294e8cf994129c94f45177a6..2b63c167b52125f7bb6ca851ac4ecf87674b46f3 100644
--- a/third-party/letter-shell-3.1/port/cmd/cmd_reboot.c
+++ b/third-party/letter-shell-3.1/port/cmd/cmd_reboot.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: cmd_reboot.c
* Date: 2022-02-24 18:24:53
* LastEditTime: 2022-03-21 17:04:01
- * Description: This file is for
- *
- * Modify History:
+ * Description: This file is for the reboot command functions
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
+ * 1.0 huanghe 2022/3/25 first release
*/
#include "../src/shell.h"
@@ -30,5 +31,5 @@ int RebootCmdEntry()
PsciCpuReset();
return 0;
}
-SHELL_EXPORT_CMD(SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN), reboot,
+SHELL_EXPORT_CMD(SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN), reboot,
RebootCmdEntry, reboot board by psci);
\ No newline at end of file
diff --git a/third-party/letter-shell-3.1/port/cmd/cmd_rw.c b/third-party/letter-shell-3.1/port/cmd/cmd_rw.c
index e762f85cabd1d9052557b4711e89838ab7fc78be..bfd99218157494664e4820663d4ac040904eb094 100644
--- a/third-party/letter-shell-3.1/port/cmd/cmd_rw.c
+++ b/third-party/letter-shell-3.1/port/cmd/cmd_rw.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: cmd_rw.c
* Date: 2022-02-24 18:24:53
* LastEditTime: 2022-03-21 17:04:05
- * Description: This file is for
- *
- * Modify History:
+ * Description: This file is for the rw command functions
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
+ * 1.0 huanghe 2022/3/25 first release
*/
#include
@@ -32,113 +33,129 @@
static int RwWriteRegister(u32 reg_addr, u32 reg_val, u32 bit_width)
{
- if (bit_width > 4)
- return -1;
-
- if (4 == bit_width)
- FtOut32((uintptr)reg_addr, reg_val);
- else if (2 == bit_width)
- FtOut16((uintptr)reg_addr, (u16)reg_val);
- else if (1 == bit_width)
- FtOut8((uintptr)reg_addr, (u8)reg_val);
-
- return 0;
+ if (bit_width > 4)
+ {
+ return -1;
+ }
+
+ if (4 == bit_width)
+ {
+ FtOut32((uintptr)reg_addr, reg_val);
+ }
+ else if (2 == bit_width)
+ {
+ FtOut16((uintptr)reg_addr, (u16)reg_val);
+ }
+ else if (1 == bit_width)
+ {
+ FtOut8((uintptr)reg_addr, (u8)reg_val);
+ }
+
+ return 0;
}
static int RwReadRegister(u32 reg_addr, u32 *reg_val_p, u32 bit_width, u32 len)
{
- if ((bit_width > 4) || (NULL == reg_val_p))
- return -1;
-
- if (4 == bit_width)
- *reg_val_p = FtIn32(reg_addr);
- else if (2 == bit_width)
- *reg_val_p = FtIn16(reg_addr);
- else if (1 == bit_width)
- *reg_val_p = FtIn8(reg_addr);
-
- if (1 < len)
- {
- FtDumpHexByte((u8 *)(uintptr)reg_addr, len);
- }
-
- return 0;
+ if ((bit_width > 4) || (NULL == reg_val_p))
+ {
+ return -1;
+ }
+
+ if (4 == bit_width)
+ {
+ *reg_val_p = FtIn32(reg_addr);
+ }
+ else if (2 == bit_width)
+ {
+ *reg_val_p = FtIn16(reg_addr);
+ }
+ else if (1 == bit_width)
+ {
+ *reg_val_p = FtIn8(reg_addr);
+ }
+
+ if (1 < len)
+ {
+ FtDumpHexByte((u8 *)(uintptr)reg_addr, len);
+ }
+
+ return 0;
}
static void RwCmdUsage()
{
- printf("usage:\r\n");
- printf(" rw [-w|-r] address register_val \r\n");
- printf(" rw -w [bit width] [address] [value]: write bits to address with value\r\n");
- printf(" rw -r [bit width] [address] [cnt=1]: read bits from address and print, by default read 1 bits\r\n");
+ printf("usage:\r\n");
+ printf(" rw [-w|-r] address register_val \r\n");
+ printf(" rw -w [bit width] [address] [value]: write bits to address with value\r\n");
+ printf(" rw -r [bit width] [address] [cnt=1]: read bits from address and print, by default read 1 bits\r\n");
}
static int RwCmdEntry(int argc, char *argv[])
{
- int ret = 0;
- u32 reg_addr = 0;
- u32 reg_val = 0;
- u32 bit_width = 0;
- u32 read_cnt = 1;
-
- if (argc < 4)
- {
- RwCmdUsage();
- return -1;
- }
-
- if (!strcmp(argv[1], "-w"))
- {
- if (argc < 5)
- {
- RwCmdUsage();
- return -2;
- }
-
- bit_width = strtoul(argv[2], NULL, 0);
- reg_addr = strtoul(argv[3], NULL, 0);
- reg_val = strtoul(argv[4], NULL, 0);
- ret = RwWriteRegister(reg_addr, reg_val, bit_width);
-
- if (0 != ret)
- {
- printf("write failed: %d\r\n", ret);
- }
- else
- {
- LSUserPrintf("set 0x%x = 0x%x\r\n", reg_addr, reg_val);
- }
- }
- else if (!strcmp(argv[1], "-r"))
- {
- if (argc < 4)
- {
- RwCmdUsage();
- return -3;
- }
-
- bit_width = strtoul(argv[2], NULL, 0);
- reg_addr = strtoul(argv[3], NULL, 0);
- reg_val = 0;
-
- if (argc = 4)
- {
- read_cnt = strtoul(argv[4], NULL, 0);
- }
-
- ret = RwReadRegister(reg_addr, ®_val, bit_width, read_cnt);
-
- if (0 != ret)
- {
- printf("read failed: %d\r\n", ret);
- }
- else
- {
- LSUserPrintf("get 0x%x = 0x%x\r\n", reg_addr, reg_val);
- LSUserSetResult(reg_val);
- }
- }
-
- return ret;
+ int ret = 0;
+ u32 reg_addr = 0;
+ u32 reg_val = 0;
+ u32 bit_width = 0;
+ u32 read_cnt = 1;
+
+ if (argc < 4)
+ {
+ RwCmdUsage();
+ return -1;
+ }
+
+ if (!strcmp(argv[1], "-w"))
+ {
+ if (argc < 5)
+ {
+ RwCmdUsage();
+ return -2;
+ }
+
+ bit_width = strtoul(argv[2], NULL, 0);
+ reg_addr = strtoul(argv[3], NULL, 0);
+ reg_val = strtoul(argv[4], NULL, 0);
+ ret = RwWriteRegister(reg_addr, reg_val, bit_width);
+
+ if (0 != ret)
+ {
+ printf("Write failed: %d.\r\n", ret);
+ }
+ else
+ {
+ LSUserPrintf("Set 0x%x = 0x%x.\r\n", reg_addr, reg_val);
+ }
+ }
+ else if (!strcmp(argv[1], "-r"))
+ {
+ if (argc < 4)
+ {
+ RwCmdUsage();
+ return -3;
+ }
+
+ bit_width = strtoul(argv[2], NULL, 0);
+ reg_addr = strtoul(argv[3], NULL, 0);
+ reg_val = 0;
+
+ if (argc = 4)
+ {
+ read_cnt = strtoul(argv[4], NULL, 0);
+ }
+
+ ret = RwReadRegister(reg_addr, ®_val, bit_width, read_cnt);
+
+ if (0 != ret)
+ {
+ printf("Read failed: %d.\r\n", ret);
+ }
+ else
+ {
+ LSUserPrintf("Get 0x%x = 0x%x.\r\n", reg_addr, reg_val);
+ LSUserSetResult(reg_val);
+ }
+ }
+
+ return ret;
}
SHELL_EXPORT_CMD(SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN), rw, RwCmdEntry, read or write register value);
\ No newline at end of file
diff --git a/third-party/letter-shell-3.1/port/cmd/cmd_sleep.c b/third-party/letter-shell-3.1/port/cmd/cmd_sleep.c
index af1c27cf6d0b0ce1bb0810cfce1aee2de0c36f8d..bffd32628142a390248e57f445dca73193c629ae 100644
--- a/third-party/letter-shell-3.1/port/cmd/cmd_sleep.c
+++ b/third-party/letter-shell-3.1/port/cmd/cmd_sleep.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: cmd_sleep.c
* Date: 2022-02-24 18:24:53
* LastEditTime: 2022-03-21 17:04:10
- * Description: This file is for
- *
- * Modify History:
+ * Description: This file is for the sleep command functions
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
+ * 1.0 huanghe 2022/3/25 first release
*/
#include
@@ -31,8 +32,8 @@
static void SleepCmdUsage()
{
- printf("usage:\r\n");
- printf(" sleep [-s | -m | -u] [num] \r\n");
+ printf("usage:\r\n");
+ printf(" sleep [-s | -m | -u] [num] \r\n");
printf(" sleep for num of seconds (-s), mill-seconds(-m), micro-seconds (-u)\r\n");
}
@@ -42,21 +43,21 @@ static int SleepCmdEntry(int argc, char *argv[])
if (argc < 3)
{
- SleepCmdUsage();
+ SleepCmdUsage();
return -1;
- }
+ }
- if(!strcmp(argv[1], "-s"))
+ if (!strcmp(argv[1], "-s"))
{
time = strtoul(argv[2], NULL, 0);
fsleep_seconds(time);
}
- else if(!strcmp(argv[1], "-m"))
+ else if (!strcmp(argv[1], "-m"))
{
time = strtoul(argv[2], NULL, 0);
fsleep_millisec(time);
}
- else if(!strcmp(argv[1], "-u"))
+ else if (!strcmp(argv[1], "-u"))
{
time = strtoul(argv[2], NULL, 0);
fsleep_microsec(time);
diff --git a/third-party/letter-shell-3.1/port/cmd/cmd_version.c b/third-party/letter-shell-3.1/port/cmd/cmd_version.c
index 5a1c3eead50c8bf7d11e912f362067157175c088..dd18ec17adc2696f097090fe395d77a22daadc54 100644
--- a/third-party/letter-shell-3.1/port/cmd/cmd_version.c
+++ b/third-party/letter-shell-3.1/port/cmd/cmd_version.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: cmd_version.c
* Date: 2022-02-24 18:24:53
* LastEditTime: 2022-03-21 17:04:14
- * Description: This file is for
- *
- * Modify History:
+ * Description: This file is for the version command functions
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
+ * 1.0 huanghe 2022/3/25 first release
*/
#include
@@ -33,5 +34,5 @@ static int VersionCmdEntry(int argc, char *argv[])
LSUShowVersion();
return 0;
}
-SHELL_EXPORT_CMD(SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN), version,
+SHELL_EXPORT_CMD(SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN), version,
VersionCmdEntry, show version of cur shell);
\ No newline at end of file
diff --git a/third-party/letter-shell-3.1/port/pl011/fpl011_os_port.c b/third-party/letter-shell-3.1/port/pl011/fpl011_os_port.c
index f80831f0964dc1aef5a2a474dc9565d5e2bf8829..2e6c7e5e00de6267bbff33bbd76f7ab6ec9bdba4 100644
--- a/third-party/letter-shell-3.1/port/pl011/fpl011_os_port.c
+++ b/third-party/letter-shell-3.1/port/pl011/fpl011_os_port.c
@@ -1,24 +1,26 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: fpl011_os_port.c
* Date: 2022-02-24 21:42:27
* LastEditTime: 2022-02-24 21:42:27
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
+ * Description: This file is for letter shell port to serial pl011
+ *
+ * Modify History:
+ * Ver Who Date Changes
+ * ----- ------ -------- --------------------------------------
+ * 1.0 huanghe 2022/4/21 first release
+ * 1.1 wangxiaodong 2022/6/20 improve functions,adapt E2000
*/
@@ -35,15 +37,15 @@ static char data[64];
#ifdef CONFIG_DEFAULT_LETTER_SHELL_USE_UART1
-#define LETTER_SHELL_UART_ID UART1_ID
+ #define LETTER_SHELL_UART_ID UART1_ID
#endif
#ifdef CONFIG_DEFAULT_LETTER_SHELL_USE_UART0
-#define LETTER_SHELL_UART_ID UART0_ID
+ #define LETTER_SHELL_UART_ID UART0_ID
#endif
#ifdef CONFIG_DEFAULT_LETTER_SHELL_USE_UART2
-#define LETTER_SHELL_UART_ID UART2_ID
+ #define LETTER_SHELL_UART_ID UART2_ID
#endif
extern void FtFreertosUartIntrInit(FtFreertosUart *uart_p);
@@ -56,7 +58,7 @@ extern void FtFreertosUartIntrInit(FtFreertosUart *uart_p);
void LSUserShellWrite(char data)
{
// FtFreertosUartBlcokingSend(&os_uart1, &data, 1);
- FPl011Send(&os_uart1.bsp_uart,&data, 1);
+ FPl011Send(&os_uart1.bsp_uart, &data, 1);
}
/**
@@ -74,14 +76,14 @@ signed char LSUserShellRead(char *data)
void LSSerialConfig(void)
{
- FtFreertosUartConfig config =
+ FtFreertosUartConfig config =
{
.uart_instance = LETTER_SHELL_UART_ID, /* select uart global object */
.isr_priority = IRQ_PRIORITY_VALUE_13, /* irq Priority */
- .isr_event_mask = (RTOS_UART_ISR_OEIM_MASK|RTOS_UART_ISR_BEIM_MASK|RTOS_UART_ISR_PEIM_MASK|RTOS_UART_ISR_FEIM_MASK|RTOS_UART_ISR_RTIM_MASK|RTOS_UART_ISR_RXIM_MASK),
+ .isr_event_mask = (RTOS_UART_ISR_OEIM_MASK | RTOS_UART_ISR_BEIM_MASK | RTOS_UART_ISR_PEIM_MASK | RTOS_UART_ISR_FEIM_MASK | RTOS_UART_ISR_RTIM_MASK | RTOS_UART_ISR_RXIM_MASK),
.uart_baudrate = 115200
};
- FtFreertosUartInit(&os_uart1,&config);
+ FtFreertosUartInit(&os_uart1, &config);
}
void LSSerialWaitLoop(void)
diff --git a/third-party/letter-shell-3.1/port/shell_port.c b/third-party/letter-shell-3.1/port/shell_port.c
index 7c3fde201021a89f36ee49504cd50aafa1718439..bf8dc97d00f8e96f20efb1455730fd26b80d9fd2 100644
--- a/third-party/letter-shell-3.1/port/shell_port.c
+++ b/third-party/letter-shell-3.1/port/shell_port.c
@@ -1,24 +1,25 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: shell_port.c
* Date: 2022-02-24 22:03:27
* LastEditTime: 2022-02-24 22:03:28
- * Description: This file is for
- *
- * Modify History:
+ * Description: This file is for the shell port related functions
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
+ * 1.0 huanghe 2022/3/25 first release
*/
#include "shell.h"
@@ -40,7 +41,7 @@ extern void LSSerialConfig();
extern void LSSerialWaitLoop();
-void LSUserShellTaskCreate( void * args)
+void LSUserShellTaskCreate(void *args)
{
BaseType_t ret;
LSSerialConfig();
@@ -50,14 +51,14 @@ void LSUserShellTaskCreate( void * args)
shellInit(&shell_object, shell_buffer, 4096);
- ret = xTaskCreate((TaskFunction_t )LSSerialWaitLoop, /* 任务入口函数 */
- (const char* )"LSSerialWaitLoop",/* 任务名字 */
- (uint16_t )1024, /* 任务栈大小 */
- (void* )NULL,/* 任务入口函数参数 */
- (UBaseType_t )2, /* 任务的优先级 */
- NULL); /* 任务控制块指针 */
+ ret = xTaskCreate((TaskFunction_t)LSSerialWaitLoop, /* 任务入口函数 */
+ (const char *)"LSSerialWaitLoop",/* 任务名字 */
+ (uint16_t)1024, /* 任务栈大小 */
+ (void *)NULL,/* 任务入口函数参数 */
+ (UBaseType_t)2, /* 任务的优先级 */
+ NULL); /* 任务控制块指针 */
- FASSERT_MSG(ret == pdPASS,"LSUserShellTask create is failed");
+ FASSERT_MSG(ret == pdPASS, "LSUserShellTask create is failed");
vTaskDelete(NULL);
}
@@ -69,12 +70,12 @@ void LSUserShellTaskCreate( void * args)
*/
BaseType_t LSUserShellTask(void)
{
- return xTaskCreate((TaskFunction_t )LSUserShellTaskCreate, /* 任务入口函数 */
- (const char* )"LSUserShellTaskCreate",/* 任务名字 */
- (uint16_t )1024, /* 任务栈大小 */
- (void* )NULL,/* 任务入口函数参数 */
- (UBaseType_t )2, /* 任务的优先级 */
- NULL); /* 任务控制块指针 */
+ return xTaskCreate((TaskFunction_t)LSUserShellTaskCreate, /* 任务入口函数 */
+ (const char *)"LSUserShellTaskCreate",/* 任务名字 */
+ (uint16_t)1024, /* 任务栈大小 */
+ (void *)NULL,/* 任务入口函数参数 */
+ (UBaseType_t)2, /* 任务的优先级 */
+ NULL); /* 任务控制块指针 */
}
@@ -91,7 +92,7 @@ int LSUserGetLastRet(void)
/**
* @name: 通过letter shell执行一行命令
- * @msg:
+ * @msg:
* @return {*}
* @param {char} *cmd
*/
diff --git a/third-party/letter-shell-3.1/port/shell_port.h b/third-party/letter-shell-3.1/port/shell_port.h
index 744d08d7b587911f15fedc40caef3301faebb86e..dc680467f24f299e89e1123c3983ac47def8af0b 100644
--- a/third-party/letter-shell-3.1/port/shell_port.h
+++ b/third-party/letter-shell-3.1/port/shell_port.h
@@ -1,35 +1,41 @@
/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
+ * Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
+ *
+ * This program is OPEN SOURCE software: you can redistribute it and/or modify it
+ * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
+ * either version 1.0 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
+ * See the Phytium Public License for more details.
+ *
+ *
* FilePath: shell_port.h
* Date: 2022-02-24 22:03:34
* LastEditTime: 2022-02-24 22:03:34
- * Description: This file is for
- *
- * Modify History:
+ * Description: This file is for the shell port related functions definition
+ *
+ * Modify History:
* Ver Who Date Changes
* ----- ------ -------- --------------------------------------
+ * 1.0 huanghe 2022/3/25 first release
*/
-#ifndef THIRD_LETTER_SHELL_OS_PORT_H
-#define THIRD_LETTER_SHELL_OS_PORT_H
+#ifndef SHELL_PORT_H
+#define SHELL_PORT_H
#include "shell.h"
#include "ftypes.h"
#include "FreeRTOS.h"
#include "task.h"
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
extern Shell shell;
BaseType_t LSUserShellTask(void);
void LSUserExec(const char *cmd);
@@ -45,4 +51,8 @@ void LSUShowVersion(void);
printf(format, ##__VA_ARGS__); \
}
+#ifdef __cplusplus
+}
+#endif
+
#endif
diff --git a/third-party/lwip-2.1.2/FILES b/third-party/lwip-2.1.2/FILES
deleted file mode 100644
index 0be0741d0858c6ebbc4098fba8dbb641057b778a..0000000000000000000000000000000000000000
--- a/third-party/lwip-2.1.2/FILES
+++ /dev/null
@@ -1,15 +0,0 @@
-api/ - The code for the high-level wrapper API. Not needed if
- you use the lowel-level call-back/raw API.
-
-apps/ - Higher layer applications that are specifically programmed
- with the lwIP low-level raw API.
-
-core/ - The core of the TPC/IP stack; protocol implementations,
- memory and buffer management, and the low-level raw API.
-
-include/ - lwIP include files.
-
-netif/ - Generic network interface device drivers are kept here.
-
-For more information on the various subdirectories, check the FILES
-file in each directory.
diff --git a/third-party/lwip-2.1.2/Kconfig b/third-party/lwip-2.1.2/Kconfig
index 4109d99dbf0a8107d7d48f55b8ad668503acb55d..da1139961ad702d8e524699c0bec85b525b4a0b5 100644
--- a/third-party/lwip-2.1.2/Kconfig
+++ b/third-party/lwip-2.1.2/Kconfig
@@ -1,981 +1,94 @@
-menu "LWIP Configuration"
- source "$(FREERTOS_SDK_ROOT)/third-party/lwip-2.1.2/ports/Kconfig"
- config LWIP_LOCAL_HOSTNAME
- string "Local netif hostname"
- default 'phytium'
- help
- The default name this device will report to other devices on the network.
-
-# Lwip Memory config
- menu "memory configuration"
- choice LWIP_USE_MEMORY_TYPE
- prompt "Select memory type"
- default LWIP_USE_MEM_POOL
- help
- If LWIP_USE_MEM_POOL is selected, MEMP_MEM_MALLOC will be activated.
- If LWIP_USE_MEM_HEAP is selected ,lwip memory heap will be activated
-
- config LWIP_USE_MEM_POOL
- bool "use mem pool"
- config LWIP_USE_MEM_HEAP
- bool "the size of the heap memory"
- endchoice
-
- if LWIP_USE_MEM_HEAP
- config MEM_SIZE
- int "Memory pool Size (MB)"
- range 1 16
- default 1
- endif
-
- if LWIP_USE_MEM_POOL
- config MEMP_NUM_PBUF
- int "the number of memp struct pbufs"
- range 16 1024
- default 64
- endif
-
- config MEM_ALIGNMENT
- int "alignment of the CPU"
- range 16 1024
- default 64
-
- endmenu
-
-# Network Interfaces options
- menu "NETWORK_INTERFACE_OPTIONS"
- config LWIP_NETIF_API
- bool "Enable usage of standard POSIX APIs in LWIP"
- default n
- help
- If this feature is enabled, standard POSIX APIs: if_indextoname(), if_nametoindex()
- could be used to convert network interface index to name
-
- config LWIP_NETIF_STATUS_CALLBACK
- bool "Enable status callback for network interfaces"
- default n
- help
- Enable callbacks when the network interface is up/down and addresses are changed.
-
- endmenu
+menu "LWIP Freertos Port Configuration"
-# LOOPIF options
- menu "LOOPIF"
- menuconfig LWIP_NETIF_LOOPBACK
- bool "Support per-interface loopback"
- default y
+ choice LWIP_GMAC_CTRL_TYPE
+ prompt "Gmac Drivers"
+ default LWIP_FGMAC
help
- Enabling this option means that if a packet is sent with a destination
- address equal to the interface's own IP address, it will "loop back" and
- be received by this interface.
- Disabling this option disables support of loopback interface in lwIP
+ Select Gmac Driver for Lwip
- config LWIP_LOOPBACK_MAX_PBUFS
- int "Max queued loopback packets per interface"
- range 0 16
- default 8
- depends on LWIP_NETIF_LOOPBACK
- help
- Configure the maximum number of packets which can be queued for
- loopback on a given interface. Reducing this number may cause packets
- to be dropped, but will avoid filling memory with queued packet data.
- endmenu
-# SLIPIF options
-
- menu "SLIPIF"
- menuconfig LWIP_SLIP_SUPPORT
- bool "Enable SLIP support (new/experimental)"
- default n
- help
- Enable SLIP stack. Now only SLIP over serial is possible.
-
- SLIP over serial support is experimental and unsupported.
-
- config LWIP_SLIP_DEBUG_ON
- bool "Enable SLIP debug log output"
- depends on LWIP_SLIP_SUPPORT
- default n
- help
- Enable SLIP debug log output
- endmenu
-
- menu "Pbuf options"
- config PBUF_POOL_BUFSIZE
- int "the size of each pbuf in the pbuf pool (KB)"
- range 2 64
- default 2
- help
- the size of each pbuf in the pbuf pool. The default is
- designed to accommodate single full size TCP frame in one pbuf, including
- TCP_MSS, IP header, and link header.
-
- endmenu
+ config LWIP_FXMAC
+ select FREERTOS_USE_XMAC
+ bool "FXMAC"
+
+ config LWIP_FGMAC
+ select FREERTOS_USE_GMAC
+ bool "FGMAC"
-# Internal Memory Pool Size
- menu "Internal Memory Pool Sizes"
+ endchoice # LWIP_GMAC_CTRL_TYPE
+ source "$(STANDALONE_DIR)/third-party/lwip-2.1.2/Kconfig"
- config PBUF_POOL_SIZE
- int "the number of buffers in the pbuf pool (KB)"
- default 1
- help
- the number of buffers in the pbuf pool.
- endmenu
-
-
- config LWIP_MAX_SOCKETS
- int "Max number of open sockets"
- range 1 16
- default 10
- help
- Sockets take up a certain amount of memory, and allowing fewer
- sockets to be open at the same time conserves memory. Specify
- the maximum amount of sockets here. The valid value is from 1
- to 16.
-
- menu "LWIP RAW API"
-
- config LWIP_MAX_RAW_PCBS
- int "Maximum LWIP RAW PCBs"
- range 1 1024
- default 16
- help
- The maximum number of simultaneously active LWIP
- RAW protocol control blocks. The practical maximum
- limit is determined by available heap memory at runtime.
-
- endmenu # LWIP RAW API
-
-
- menu "TCP"
-
- config LWIP_MAX_ACTIVE_TCP
- int "Maximum active TCP Connections"
- range 1 1024
- default 16
- help
- The maximum number of simultaneously active TCP
- connections. The practical maximum limit is
- determined by available heap memory at runtime.
-
- Changing this value by itself does not substantially
- change the memory usage of LWIP, except for preventing
- new TCP connections after the limit is reached.
-
- config LWIP_MAX_LISTENING_TCP
- int "Maximum listening TCP Connections"
- range 1 1024
- default 16
- help
- The maximum number of simultaneously listening TCP
- connections. The practical maximum limit is
- determined by available heap memory at runtime.
-
- Changing this value by itself does not substantially
- change the memory usage of LWIP, except for preventing
- new listening TCP connections after the limit is reached.
-
- config LWIP_TCP_HIGH_SPEED_RETRANSMISSION
- bool "TCP high speed retransmissions"
- default y
- help
- Speed up the TCP retransmission interval. If disabled,
- it is recommended to change the number of SYN retransmissions to 6,
- and TCP initial rto time to 3000.
-
- config LWIP_TCP_MAXRTX
- int "Maximum number of retransmissions of data segments"
- default 12
- range 3 12
- help
- Set maximum number of retransmissions of data segments.
-
- config LWIP_TCP_SYNMAXRTX
- int "Maximum number of retransmissions of SYN segments"
- default 6 if !LWIP_TCP_HIGH_SPEED_RETRANSMISSION
- default 12 if LWIP_TCP_HIGH_SPEED_RETRANSMISSION
- range 3 12
- help
- Set maximum number of retransmissions of SYN segments.
-
- config LWIP_TCP_MSS
- int "Maximum Segment Size (MSS)"
- default 1440
- range 536 1460
- help
- Set maximum segment size for TCP transmission.
-
- Can be set lower to save RAM, the default value 1460(ipv4)/1440(ipv6) will give best throughput.
- IPv4 TCP_MSS Range: 576 <= TCP_MSS <= 1460
- IPv6 TCP_MSS Range: 1220<= TCP_mSS <= 1440
-
- config LWIP_TCP_TMR_INTERVAL
- int "TCP timer interval(ms)"
- default 250
- help
- Set TCP timer interval in milliseconds.
-
- Can be used to speed connections on bad networks.
- A lower value will redeliver unacked packets faster.
-
- config LWIP_TCP_MSL
- int "Maximum segment lifetime (MSL)"
- default 60000
- help
- Set maximum segment lifetime in in milliseconds.
-
- config LWIP_TCP_SND_BUF_DEFAULT
- int "Default send buffer size"
- default 5744 # 4 * default MSS
- range 2440 65535 if !LWIP_WND_SCALE
- range 2440 1024000 if LWIP_WND_SCALE
- help
- Set default send buffer size for new TCP sockets.
-
- Per-socket send buffer size can be changed at runtime
- with lwip_setsockopt(s, TCP_SNDBUF, ...).
-
- This value must be at least 2x the MSS size, and the default
- is 4x the default MSS size.
-
- Setting a smaller default SNDBUF size can save some RAM, but
- will decrease performance.
-
- config LWIP_TCP_WND_DEFAULT
- int "Default receive window size"
- default 5744 # 4 * default MSS
- range 2440 65535 if !LWIP_WND_SCALE
- range 2440 1024000 if LWIP_WND_SCALE
+ menu "Tcp/ip task resource configuration"
+ config LWIP_TCPIP_TASK_STACK_SIZE
+ int "TCP/IP Task Stack Size"
+ default 3072
+ # for high log levels, tcpip_adapter API calls can end up
+ # a few calls deep and logging there can trigger a stack overflow
+ range 2048 65536
+ help
+ Configure TCP/IP task stack size, used by LWIP to process multi-threaded TCP/IP operations.
+ Setting this stack too small will result in stack overflow crashes.
+
+ config LWIP_TCPIP_TASK_PRIO
+ int "TCP/IP Task priority"
+ default 6
help
- Set default TCP receive window size for new TCP sockets.
-
- Per-socket receive window size can be changed at runtime
- with lwip_setsockopt(s, TCP_WINDOW, ...).
-
- Setting a smaller default receive window size can save some RAM,
- but will significantly decrease performance.
+ Configure TCP/IP task priority, used by LWIP to process multi-threaded TCP/IP operations.
- config LWIP_TCP_RECVMBOX_SIZE
- int "Default TCP receive mail box size"
- default 6
+ config LWIP_TCPIP_RECVMBOX_SIZE
+ int "TCPIP task receive mail box size"
+ default 32
range 6 64 if !LWIP_WND_SCALE
range 6 1024 if LWIP_WND_SCALE
help
- Set TCP receive mail box size. Generally bigger value means higher throughput
- but more memory. The recommended value is: LWIP_TCP_WND_DEFAULT/TCP_MSS + 2, e.g. if
- LWIP_TCP_WND_DEFAULT=14360, TCP_MSS=1436, then the recommended receive mail box size is
- (14360/1436 + 2) = 12.
-
- TCP receive mail box is a per socket mail box, when the application receives packets
- from TCP socket, LWIP core firstly posts the packets to TCP receive mail box and the
- application then fetches the packets from mail box. It means LWIP can caches maximum
- LWIP_TCP_RECCVMBOX_SIZE packets for each TCP socket, so the maximum possible cached TCP packets
- for all TCP sockets is LWIP_TCP_RECCVMBOX_SIZE multiples the maximum TCP socket number. In other
- words, the bigger LWIP_TCP_RECVMBOX_SIZE means more memory.
- On the other hand, if the receiv mail box is too small, the mail box may be full. If the
- mail box is full, the LWIP drops the packets. So generally we need to make sure the TCP
- receive mail box is big enough to avoid packet drop between LWIP core and application.
+ Set TCPIP task receive mail box size. Generally bigger value means higher throughput
+ but more memory. The value should be bigger than UDP/TCP mail box size.
+ endmenu
- config LWIP_TCP_QUEUE_OOSEQ
- bool "Queue incoming out-of-order segments"
+
+ menu "lwip port thread Configuration"
+ config LWIP_PORT_USE_RECEIVE_THREAD
+ bool "Use Rx Thread"
default y
- help
- Queue incoming out-of-order segments for later use.
-
- Disable this option to save some RAM during TCP sessions, at the expense
- of increased retransmissions if segments arrive out of order.
-
- config LWIP_TCP_SACK_OUT
- bool "Support sending selective acknowledgements"
- default n
- depends on LWIP_TCP_QUEUE_OOSEQ
- help
- TCP will support sending selective acknowledgements (SACKs).
-
-
- choice LWIP_TCP_OVERSIZE
- prompt "Pre-allocate transmit PBUF size"
- default LWIP_TCP_OVERSIZE_MSS
- help
- Allows enabling "oversize" allocation of TCP transmission pbufs ahead of time,
- which can reduce the length of pbuf chains used for transmission.
-
- This will not make a difference to sockets where Nagle's algorithm
- is disabled.
-
- Default value of MSS is fine for most applications, 25% MSS may save
- some RAM when only transmitting small amounts of data. Disabled will
- have worst performance and fragmentation characteristics, but uses
- least RAM overall.
-
- config LWIP_TCP_OVERSIZE_MSS
- bool "MSS"
- config LWIP_TCP_OVERSIZE_QUARTER_MSS
- bool "25% MSS"
- config LWIP_TCP_OVERSIZE_DISABLE
- bool "Disabled"
-
- endchoice
- endmenu # TCP
-
- menu "UDP"
-
- config LWIP_MAX_UDP_PCBS
- int "Maximum active UDP control blocks"
- range 1 1024
- default 16
- help
- The maximum number of active UDP "connections" (ie
- UDP sockets sending/receiving data).
- The practical maximum limit is determined by available
- heap memory at runtime.
-
- config LWIP_UDP_RECVMBOX_SIZE
- int "Default UDP receive mail box size"
- default 6
- range 6 64
- help
- Set UDP receive mail box size. The recommended value is 6.
-
- UDP receive mail box is a per socket mail box, when the application receives packets
- from UDP socket, LWIP core firstly posts the packets to UDP receive mail box and the
- application then fetches the packets from mail box. It means LWIP can caches maximum
- UDP_RECCVMBOX_SIZE packets for each UDP socket, so the maximum possible cached UDP packets
- for all UDP sockets is UDP_RECCVMBOX_SIZE multiples the maximum UDP socket number. In other
- words, the bigger UDP_RECVMBOX_SIZE means more memory.
- On the other hand, if the receiv mail box is too small, the mail box may be full. If the
- mail box is full, the LWIP drops the packets. So generally we need to make sure the UDP
- receive mail box is big enough to avoid packet drop between LWIP core and application.
-
-
- # UDP options
- config LWIP_NETBUF_RECVINFO
- bool "Enable IP_PKTINFO option"
- default n
- help
- Enabling this option allows checking for the destination address
- of a received IPv4 Packet.
-
-
- endmenu # UDP
-
-# IP options
- menu "IPv4"
- config USE_IPV4_ONLY
- bool "Only use IPv4 packets"
- default n
- help
- If this switch is enabled, ipv6 cannot be used simultaneously
- config LWIP_IP4_REASSEMBLY
- bool "Enable reassembly incoming fragmented IP4 packets"
- default n
- help
- Enabling this option allows reassemblying incoming fragmented IP4 packets.
-
- config LWIP_IP4_FRAG
- bool "Enable fragment outgoing IP4 packets"
- default y
- help
- Enabling this option allows fragmenting outgoing IP4 packets if their size
- exceeds MTU.
-
- config LWIP_IP_FORWARD
- bool "Enable IP forwarding"
- default n
- help
- Enabling this option allows packets forwarding across multiple interfaces.
-
- config LWIP_IPV4_NAPT
- bool "Enable NAT (new/experimental)"
- depends on LWIP_IP_FORWARD
- select LWIP_L2_TO_L3_COPY
- default n
- help
- Enabling this option allows Network Address and Port Translation.
-
- config IP_REASS_MAX_PBUFS
- int "Total maximum amount of pbufs waiting to be reassembled"
- default 16
- range 1 45
- help
- Total maximum amount of pbufs waiting to be reassembled.
- Since the received pbufs are enqueued, be sure to configure
- PBUF_POOL_SIZE > IP_REASS_MAX_PBUFS so that the stack is still able to receive
- packets even if the maximum amount of fragments is enqueued for reassembly!
-
- endmenu # IP
-
-# ICMP
- menu "ICMP"
-
- config LWIP_ICMP
- bool "ICMP: Enable ICMP"
+ if LWIP_PORT_USE_RECEIVE_THREAD
+ config LWIP_PORT_RECEIVE_THREAD_STACKSIZE
+ int "the stack size of the receive thread"
+ default 2048 if TARGET_ARMV8_AARCH64
+ default 1024
+ config LWIP_PORT_RECEIVE_THREAD_PRIORITY
+ int "the stack priority of the receive thread"
+ default 5
+ endif
+
+ config LWIP_PORT_USE_LINK_DETECT_THREAD
+ bool "Use Link detect Thread"
default y
- help
- Enable ICMP module for check network stability
-
- config LWIP_MULTICAST_PING
- bool "Respond to multicast pings"
- default n
- depends on LWIP_ICMP6 || LWIP_ICMP
-
- config LWIP_BROADCAST_PING
- bool "Respond to broadcast pings"
- default n
- depends on LWIP_ICMP
-
- endmenu # ICMP
-
-# DHCP options
- menu "DHCP"
- config LWIP_DHCP_ENABLE
- bool "Enable DHCP module."
- default n
-
- config LWIP_DHCP_DOES_ARP_CHECK
- bool "DHCP: Perform ARP check on any offered address"
- default y
- help
- Enabling this option performs a check (via ARP request) if the offered IP address
- is not already in use by another host on the network.
-
- config LWIP_DHCP_GET_NTP_SRV
- bool "Request NTP servers from DHCP"
- default n
- help
- If enabled, LWIP will add 'NTP' to Parameter-Request Option sent via DHCP-request.
- DHCP server might reply with an NTP server address in option 42.
- SNTP callback for such replies should be set accordingly (see sntp_servermode_dhcp() func.)
-
- config LWIP_DHCP_DISABLE_CLIENT_ID
- bool "DHCP: Disable Use of HW address as client identification"
- default n
- help
- This option could be used to disable DHCP client identification with its MAC address.
- (Client id is used by DHCP servers to uniquely identify clients and are included
- in the DHCP packets as an option 61)
- Set this option to "y" in order to exclude option 61 from DHCP packets.
-
- config LWIP_DHCP_RESTORE_LAST_IP
- bool "DHCP: Restore last IP obtained from DHCP server"
- default n
- help
- When this option is enabled, DHCP client tries to re-obtain last valid IP address obtained from DHCP
- server. Last valid DHCP configuration is stored in nvs and restored after reset/power-up. If IP is still
- available, there is no need for sending discovery message to DHCP server and save some time.
-
- config LWIP_DHCP_MAX_NTP_SERVERS
- int "Maximum number of NTP servers aquired via DHCP"
- default 1
- range 1 16
- depends on LWIP_DHCP_GET_NTP_SRV
- help
- Set maximum number of NTP servers aquired via DHCP-offer.
- Should be less or equal to "Maximum number of NTP servers", any extra servers would be just ignored.
-
- config LWIP_DHCP_OPTIONS_LEN
- int "DHCP total option length"
- default 68 if LWIP_DHCP_DISABLE_VENDOR_CLASS_ID
- default 108 if !LWIP_DHCP_DISABLE_VENDOR_CLASS_ID
- range 68 255
- help
- Set total length of outgoing DHCP option msg. Generally bigger value means it can carry more
- options and values. If your code meets LWIP_ASSERT due to option value is too long.
- Please increase the LWIP_DHCP_OPTIONS_LEN value.
-
-
- config LWIP_DHCP_DISABLE_VENDOR_CLASS_ID
- bool "DHCP: Disable Use of vendor class identification"
- default y
- help
- This option could be used to disable DHCP client vendor class identification.
- Set this option to "y" in order to exclude option 60 from DHCP packets.
- endmenu # DHCP
-
-# AUTOIP options
+ if LWIP_PORT_USE_LINK_DETECT_THREAD
+ config LWIP_PORT_LINK_DETECT_STACKSIZE
+ int "the stack size of the mac link detect thread"
+ default 2048 if TARGET_ARMV8_AARCH64
+ default 1024
+ config LWIP_PORT_LINK_DETECT_PRIORITY
+ int "the stack priority of the mac link detect thread"
+ default 5
+ endif
- menu "AUTOIP"
- menuconfig LWIP_AUTOIP
- bool "Enable IPV4 Link-Local Addressing (AUTOIP)"
- default n
- help
- Enabling this option allows the device to self-assign an address
- in the 169.256/16 range if none is assigned statically or via DHCP.
-
- See RFC 3927.
-
- config LWIP_AUTOIP_TRIES
- int "DHCP Probes before self-assigning IPv4 LL address"
- range 1 100
- default 2
- depends on LWIP_AUTOIP
- help
- DHCP client will send this many probes before self-assigning a
- link local address.
-
- From LWIP help: "This can be set as low as 1 to get an AutoIP
- address very quickly, but you should be prepared to handle a
- changing IP address when DHCP overrides AutoIP."
-
- config LWIP_AUTOIP_MAX_CONFLICTS
- int "Max IP conflicts before rate limiting"
- range 1 100
- default 9
- depends on LWIP_AUTOIP
- help
- If the AUTOIP functionality detects this many IP conflicts while
- self-assigning an address, it will go into a rate limited mode.
-
- config LWIP_AUTOIP_RATE_LIMIT_INTERVAL
- int "Rate limited interval (seconds)"
- range 5 120
- default 20
- depends on LWIP_AUTOIP
- help
- If rate limiting self-assignment requests, wait this long between
- each request.
- endmenu # AUTOIP
-
-# DNS options
- menu "DNS"
- config LWIP_DNS_SUPPORT_MDNS_QUERIES
- bool "Enable mDNS queries in resolving host name"
- default y
- help
- If this feature is enabled, standard API such as gethostbyname
- support .local addresses by sending one shot multicast mDNS
- query
- endmenu # DNS
-
-
-# TCP options
- menu "TCP options"
- config LWIP_TCP_WND_DEFAULT
- int "Default receive window size"
- default 5744 # 4 * default MSS
- range 2440 65535 if !LWIP_WND_SCALE
- range 2440 1024000 if LWIP_WND_SCALE
- help
- Set default TCP receive window size for new TCP sockets.
-
- Per-socket receive window size can be changed at runtime
- with lwip_setsockopt(s, TCP_WINDOW, ...).
-
- Setting a smaller default receive window size can save some RAM,
- but will significantly decrease performance.
-
- config LWIP_TCP_MAXRTX
- int "Maximum number of retransmissions of data segments"
- default 12
- range 3 12
- help
- Set maximum number of retransmissions of data segments.
-
- config LWIP_TCP_SYNMAXRTX
- int "Maximum number of retransmissions of SYN segments"
- default 6 if !LWIP_TCP_HIGH_SPEED_RETRANSMISSION
- default 12 if LWIP_TCP_HIGH_SPEED_RETRANSMISSION
- range 3 12
- help
- Set maximum number of retransmissions of SYN segments.
-
- config LWIP_TCP_QUEUE_OOSEQ
- bool "Queue incoming out-of-order segments"
- default y
- help
- Queue incoming out-of-order segments for later use.
-
- Disable this option to save some RAM during TCP sessions, at the expense
- of increased retransmissions if segments arrive out of order.
-
-
- config LWIP_TCP_SACK_OUT
- bool "Support sending selective acknowledgements"
- default n
- depends on LWIP_TCP_QUEUE_OOSEQ
- help
- TCP will support sending selective acknowledgements (SACKs).
-
- config LWIP_TCP_MSS
- int "Maximum Segment Size (MSS)"
- default 1440
- range 536 1460
- help
- Set maximum segment size for TCP transmission.
-
- Can be set lower to save RAM, the default value 1460(ipv4)/1440(ipv6) will give best throughput.
- IPv4 TCP_MSS Range: 576 <= TCP_MSS <= 1460
- IPv6 TCP_MSS Range: 1220<= TCP_mSS <= 1440
-
- config LWIP_WND_SCALE
- bool "Support TCP window scale"
- depends on SPIRAM_TRY_ALLOCATE_WIFI_LWIP
- default n
- help
- Enable this feature to support TCP window scaling.
-
-
- config LWIP_TCP_SND_BUF_DEFAULT
- int "Default send buffer size"
- default 5744 # 4 * default MSS
- range 2440 65535 if !LWIP_WND_SCALE
- range 2440 1024000 if LWIP_WND_SCALE
- help
- Set default send buffer size for new TCP sockets.
-
- Per-socket send buffer size can be changed at runtime
- with lwip_setsockopt(s, TCP_SNDBUF, ...).
-
- This value must be at least 2x the MSS size, and the default
- is 4x the default MSS size.
-
- Setting a smaller default SNDBUF size can save some RAM, but
- will decrease performance.
-
- config LWIP_TCP_RTO_TIME
- int "Default TCP rto time"
- default 3000 if !LWIP_TCP_HIGH_SPEED_RETRANSMISSION
- default 1500 if LWIP_TCP_HIGH_SPEED_RETRANSMISSION
- help
- Set default TCP rto time for a reasonable initial rto.
- In bad network environment, recommend set value of rto time to 1500.
- endmenu # TCP options
-
-# Platform specific locking
-
- config LWIP_TCPIP_CORE_LOCKING
- bool "Enable tcpip core locking"
- default n
- help
- If Enable tcpip core locking,Creates a global mutex that is held
- during TCPIP thread operations.Can be locked by client code to perform
- lwIP operations without changing into TCPIP thread using callbacks.
- See LOCK_TCPIP_CORE() and UNLOCK_TCPIP_CORE().
-
- If disable tcpip core locking,TCP IP will perform tasks through context switching.
-
-
-# socket
- menu "socket"
- config LWIP_SO_LINGER
- bool "Enable SO_LINGER processing"
- default n
- help
- Enabling this option allows SO_LINGER processing.
- l_onoff = 1,l_linger can set the timeout.
-
- If l_linger=0, When a connection is closed, TCP will terminate the connection.
- This means that TCP will discard any data packets stored in the socket send buffer
- and send an RST to the peer.
-
- If l_linger!=0,Then closesocket() calls to block the process until
- the remaining data packets has been sent or timed out.
-
- config LWIP_SO_REUSE
- bool "Enable SO_REUSEADDR option"
- default y
- help
- Enabling this option allows binding to a port which remains in
- TIME_WAIT.
-
- config LWIP_SO_REUSE_RXTOALL
- bool "SO_REUSEADDR copies broadcast/multicast to all matches"
- depends on LWIP_SO_REUSE
- default y
- help
- Enabling this option means that any incoming broadcast or multicast
- packet will be copied to all of the local sockets that it matches
- (may be more than one if SO_REUSEADDR is set on the socket.)
-
- This increases memory overhead as the packets need to be copied,
- however they are only copied per matching socket. You can safely
- disable it if you don't plan to receive broadcast or multicast
- traffic on more than one socket at a time.
- endmenu # TCP options
-
-# Statistics options
- config LWIP_STATS
- bool "Enable LWIP statistics"
- default n
- help
- Enabling this option allows LWIP statistics
-
-
-# PPP options
- menu "PPP"
- menuconfig LWIP_PPP_SUPPORT
- bool "Enable PPP support (new/experimental)"
- default n
- help
- Enable PPP stack. Now only PPP over serial is possible.
-
- PPP over serial support is experimental and unsupported.
-
- config LWIP_PPP_ENABLE_IPV6
- bool "Enable IPV6 support for PPP connections (IPV6CP)"
- depends on LWIP_PPP_SUPPORT && LWIP_IPV6
- default y
- help
- Enable IPV6 support in PPP for the local link between the DTE (processor) and DCE (modem).
- There are some modems which do not support the IPV6 addressing in the local link.
- If they are requested for IPV6CP negotiation, they may time out.
- This would in turn fail the configuration for the whole link.
- If your modem is not responding correctly to PPP Phase Network, try to disable IPV6 support.
-
- config LWIP_IPV6_MEMP_NUM_ND6_QUEUE
- int "Max number of IPv6 packets to queue during MAC resolution"
- depends on LWIP_IPV6
- range 3 20
- default 3
- help
- Config max number of IPv6 packets to queue during MAC resolution.
-
- config LWIP_IPV6_ND6_NUM_NEIGHBORS
- int "Max number of entries in IPv6 neighbor cache"
- depends on LWIP_IPV6
- range 3 10
- default 5
- help
- Config max number of entries in IPv6 neighbor cache
-
- config LWIP_PPP_NOTIFY_PHASE_SUPPORT
- bool "Enable Notify Phase Callback"
- depends on LWIP_PPP_SUPPORT
- default n
- help
- Enable to set a callback which is called on change of the internal PPP state machine.
-
- config LWIP_PPP_PAP_SUPPORT
- bool "Enable PAP support"
- depends on LWIP_PPP_SUPPORT
- default n
- help
- Enable Password Authentication Protocol (PAP) support
-
- config LWIP_PPP_CHAP_SUPPORT
- bool "Enable CHAP support"
- depends on LWIP_PPP_SUPPORT
- default n
- help
- Enable Challenge Handshake Authentication Protocol (CHAP) support
-
- config LWIP_PPP_MSCHAP_SUPPORT
- bool "Enable MSCHAP support"
- depends on LWIP_PPP_SUPPORT
- default n
- help
- Enable Microsoft version of the Challenge-Handshake Authentication Protocol (MSCHAP) support
-
- config LWIP_PPP_MPPE_SUPPORT
- bool "Enable MPPE support"
- depends on LWIP_PPP_SUPPORT
- default n
- help
- Enable Microsoft Point-to-Point Encryption (MPPE) support
-
- config LWIP_ENABLE_LCP_ECHO
- bool "Enable LCP ECHO"
- depends on LWIP_PPP_SUPPORT
- default n
- help
- Enable LCP echo keepalive requests
-
- config LWIP_LCP_ECHOINTERVAL
- int "Echo interval (s)"
- range 0 1000000
- depends on LWIP_ENABLE_LCP_ECHO
- default 3
- help
- Interval in seconds between keepalive LCP echo requests, 0 to disable.
-
- config LWIP_LCP_MAXECHOFAILS
- int "Maximum echo failures"
- range 0 100000
- depends on LWIP_ENABLE_LCP_ECHO
- default 3
- help
- Number of consecutive unanswered echo requests before failure is indicated.
-
- config LWIP_PPP_DEBUG_ON
- bool "Enable PPP debug log output"
- depends on LWIP_PPP_SUPPORT
- default n
- help
- Enable PPP debug log output
- endmenu # PPP
-
-# Checksums
-
- menu "Checksums"
-
- config LWIP_CHECKSUM_CHECK_IP
- bool "Enable LWIP IP checksums"
- default n
- help
- Enable checksum checking for received IP messages
-
- config LWIP_CHECKSUM_CHECK_UDP
- bool "Enable LWIP UDP checksums"
- default n
- help
- Enable checksum checking for received UDP messages
-
- config LWIP_CHECKSUM_CHECK_ICMP
- bool "Enable LWIP ICMP checksums"
+ config LWIP_PORT_DHCP_THREAD
+ bool "Use dhcp thread"
default y
- help
- Enable checksum checking for received ICMP messages
-
- endmenu # Checksums
-
-# ipv6
- menu "ipv6"
- config LWIP_IPV6
- bool "Enable IPv6"
- default y
- help
- Enable IPv6 function. If not use IPv6 function, set this option to n.
- If disabling LWIP_IPV6 then some other components (coap and asio) will
- no longer be available.
-
- config LWIP_IPV6_AUTOCONFIG
- bool "Enable IPV6 stateless address autoconfiguration (SLAAC)"
- depends on LWIP_IPV6
- default n
- help
- Enabling this option allows the devices to IPV6 stateless address autoconfiguration (SLAAC).
-
- See RFC 4862.
-
- config LWIP_IPV6_NUM_ADDRESSES
- int "Number of IPv6 addresses on each network interface"
- depends on LWIP_IPV6
- default 3
- help
- The maximum number of IPv6 addresses on each interface. Any additional
- addresses will be discarded.
-
- config LWIP_IPV6_FORWARD
- bool "Enable IPv6 forwarding between interfaces"
- depends on LWIP_IPV6
- default n
- help
- Forwarding IPv6 packets between interfaces is only required when acting as
- a router.
-
- config LWIP_IPV6_RDNSS_MAX_DNS_SERVERS
- int "Use IPv6 Router Advertisement Recursive DNS Server Option"
- depends on LWIP_IPV6_AUTOCONFIG
- default 0
- help
- Use IPv6 Router Advertisement Recursive DNS Server Option (as per RFC 6106) to
- copy a defined maximum number of DNS servers to the DNS module.
- Set this option to a number of desired DNS servers advertised in the RA protocol.
- This feature is disabled when set to 0.
-
- config LWIP_IPV6_DHCP6
- bool "Enable DHCPv6 stateless address autoconfiguration"
- depends on LWIP_IPV6_AUTOCONFIG
- default n
- help
- Enable DHCPv6 for IPv6 stateless address autoconfiguration.
- Note that the dhcpv6 client has to be started using dhcp6_enable_stateless(netif);
- Note that the stateful address autoconfiguration is not supported.
-
- config LWIP_IP6_FRAG
- bool "Enable fragment outgoing IP6 packets"
- default y
- depends on LWIP_IPV6
- help
- Enabling this option allows fragmenting outgoing IP6 packets if their size
- exceeds MTU.
-
- config LWIP_IP6_REASSEMBLY
- bool "Enable reassembly incoming fragmented IP6 packets"
- default n
- depends on LWIP_IPV6
- help
- Enabling this option allows reassemblying incoming fragmented IP6 packets.
- endmenu
-
-
-
-#defbug
-
- menuconfig LWIP_DEBUG
- bool "Enable LWIP Debug"
- default n
- help
- Enabling this option allows different kinds of lwIP debug output.
-
- All lwIP debug features increase the size of the final binary.
-
- config LWIP_NETIF_DEBUG
- bool "Enable netif debug messages"
- depends on LWIP_DEBUG
- default n
-
- config LWIP_PBUF_DEBUG
- bool "Enable pbuf debug messages"
- depends on LWIP_DEBUG
- default n
-
- config LWIP_ETHARP_DEBUG
- bool "Enable etharp debug messages"
- depends on LWIP_DEBUG
- default n
-
- config LWIP_API_LIB_DEBUG
- bool "Enable api lib debug messages"
- depends on LWIP_DEBUG
- default n
-
- config LWIP_SOCKETS_DEBUG
- bool "Enable socket debug messages"
- depends on LWIP_DEBUG
- default n
-
- config LWIP_IP_DEBUG
- bool "Enable IP debug messages"
- depends on LWIP_DEBUG
- default n
-
- config LWIP_ICMP_DEBUG
- bool "Enable ICMP debug messages"
- depends on LWIP_DEBUG && LWIP_ICMP
- default n
-
- config LWIP_DHCP_DEBUG
- bool "Enable DHCP debug messages"
- depends on LWIP_DEBUG
- default n
-
- config LWIP_IP6_DEBUG
- bool "Enable IP6 debug messages"
- depends on LWIP_DEBUG
- default n
-
- config LWIP_ICMP6_DEBUG
- bool "Enable ICMP6 debug messages"
- depends on LWIP_DEBUG
- default n
-
- config LWIP_TCP_DEBUG
- bool "Enable TCP debug messages"
- depends on LWIP_DEBUG
- default n
-
- config LWIP_SNTP_DEBUG
- bool "Enable SNTP debug messages"
- depends on LWIP_DEBUG
- default n
-
- config LWIP_DNS_DEBUG
- bool "Enable DNS debug messages"
- depends on LWIP_DEBUG
- default n
+ if LWIP_PORT_DHCP_THREAD
+ config LWIP_PORT_DHCP_STACKSIZE
+ int "the stack size of the dhcp thread"
+ default 4096 if TARGET_ARMV8_AARCH64
+ default 2048
+ config LWIP_PORT_DHCP_PRIORITY
+ int "the stack priority of the dhcp thread"
+ default 5
+ endif
+
endmenu
+endmenu
\ No newline at end of file
diff --git a/third-party/lwip-2.1.2/api/api_lib.c b/third-party/lwip-2.1.2/api/api_lib.c
deleted file mode 100644
index e03b8b74515862e0b998bf253898c5a435fa4d0b..0000000000000000000000000000000000000000
--- a/third-party/lwip-2.1.2/api/api_lib.c
+++ /dev/null
@@ -1,1367 +0,0 @@
-/**
- * @file
- * Sequential API External module
- *
- * @defgroup netconn Netconn API
- * @ingroup sequential_api
- * Thread-safe, to be called from non-TCPIP threads only.
- * TX/RX handling based on @ref netbuf (containing @ref pbuf)
- * to avoid copying data around.
- *
- * @defgroup netconn_common Common functions
- * @ingroup netconn
- * For use with TCP and UDP
- *
- * @defgroup netconn_tcp TCP only
- * @ingroup netconn
- * TCP only functions
- *
- * @defgroup netconn_udp UDP only
- * @ingroup netconn
- * UDP only functions
- */
-
-/*
- * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
- * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
- * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
- * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
- * OF SUCH DAMAGE.
- *
- * This file is part of the lwIP TCP/IP stack.
- *
- * Author: Adam Dunkels
- */
-
-/* This is the part of the API that is linked with
- the application */
-
-#include "lwip/opt.h"
-
-#if LWIP_NETCONN /* don't build if not configured for use in lwipopts.h */
-
-#include "lwip/api.h"
-#include "lwip/memp.h"
-
-#include "lwip/ip.h"
-#include "lwip/raw.h"
-#include "lwip/udp.h"
-#include "lwip/priv/api_msg.h"
-#include "lwip/priv/tcp_priv.h"
-#include "lwip/priv/tcpip_priv.h"
-
-#ifdef LWIP_HOOK_FILENAME
-#include LWIP_HOOK_FILENAME
-#endif
-
-#include
-
-#define API_MSG_VAR_REF(name) API_VAR_REF(name)
-#define API_MSG_VAR_DECLARE(name) API_VAR_DECLARE(struct api_msg, name)
-#define API_MSG_VAR_ALLOC(name) API_VAR_ALLOC(struct api_msg, MEMP_API_MSG, name, ERR_MEM)
-#define API_MSG_VAR_ALLOC_RETURN_NULL(name) API_VAR_ALLOC(struct api_msg, MEMP_API_MSG, name, NULL)
-#define API_MSG_VAR_FREE(name) API_VAR_FREE(MEMP_API_MSG, name)
-
-#if TCP_LISTEN_BACKLOG
-/* need to allocate API message for accept so empty message pool does not result in event loss
- * see bug #47512: MPU_COMPATIBLE may fail on empty pool */
-#define API_MSG_VAR_ALLOC_ACCEPT(msg) API_MSG_VAR_ALLOC(msg)
-#define API_MSG_VAR_FREE_ACCEPT(msg) API_MSG_VAR_FREE(msg)
-#else /* TCP_LISTEN_BACKLOG */
-#define API_MSG_VAR_ALLOC_ACCEPT(msg)
-#define API_MSG_VAR_FREE_ACCEPT(msg)
-#endif /* TCP_LISTEN_BACKLOG */
-
-#if LWIP_NETCONN_FULLDUPLEX
-#define NETCONN_RECVMBOX_WAITABLE(conn) (sys_mbox_valid(&(conn)->recvmbox) && (((conn)->flags & NETCONN_FLAG_MBOXINVALID) == 0))
-#define NETCONN_ACCEPTMBOX_WAITABLE(conn) (sys_mbox_valid(&(conn)->acceptmbox) && (((conn)->flags & (NETCONN_FLAG_MBOXCLOSED|NETCONN_FLAG_MBOXINVALID)) == 0))
-#define NETCONN_MBOX_WAITING_INC(conn) SYS_ARCH_INC(conn->mbox_threads_waiting, 1)
-#define NETCONN_MBOX_WAITING_DEC(conn) SYS_ARCH_DEC(conn->mbox_threads_waiting, 1)
-#else /* LWIP_NETCONN_FULLDUPLEX */
-#define NETCONN_RECVMBOX_WAITABLE(conn) sys_mbox_valid(&(conn)->recvmbox)
-#define NETCONN_ACCEPTMBOX_WAITABLE(conn) (sys_mbox_valid(&(conn)->acceptmbox) && (((conn)->flags & NETCONN_FLAG_MBOXCLOSED) == 0))
-#define NETCONN_MBOX_WAITING_INC(conn)
-#define NETCONN_MBOX_WAITING_DEC(conn)
-#endif /* LWIP_NETCONN_FULLDUPLEX */
-
-static err_t netconn_close_shutdown(struct netconn *conn, u8_t how);
-
-/**
- * Call the lower part of a netconn_* function
- * This function is then running in the thread context
- * of tcpip_thread and has exclusive access to lwIP core code.
- *
- * @param fn function to call
- * @param apimsg a struct containing the function to call and its parameters
- * @return ERR_OK if the function was called, another err_t if not
- */
-static err_t
-netconn_apimsg(tcpip_callback_fn fn, struct api_msg *apimsg)
-{
- err_t err;
-
-#ifdef LWIP_DEBUG
- /* catch functions that don't set err */
- apimsg->err = ERR_VAL;
-#endif /* LWIP_DEBUG */
-
-#if LWIP_NETCONN_SEM_PER_THREAD
- apimsg->op_completed_sem = LWIP_NETCONN_THREAD_SEM_GET();
-#endif /* LWIP_NETCONN_SEM_PER_THREAD */
-
- err = tcpip_send_msg_wait_sem(fn, apimsg, LWIP_API_MSG_SEM(apimsg));
- if (err == ERR_OK) {
- return apimsg->err;
- }
- return err;
-}
-
-/**
- * Create a new netconn (of a specific type) that has a callback function.
- * The corresponding pcb is also created.
- *
- * @param t the type of 'connection' to create (@see enum netconn_type)
- * @param proto the IP protocol for RAW IP pcbs
- * @param callback a function to call on status changes (RX available, TX'ed)
- * @return a newly allocated struct netconn or
- * NULL on memory error
- */
-struct netconn *
-netconn_new_with_proto_and_callback(enum netconn_type t, u8_t proto, netconn_callback callback)
-{
- struct netconn *conn;
- API_MSG_VAR_DECLARE(msg);
- API_MSG_VAR_ALLOC_RETURN_NULL(msg);
-
- conn = netconn_alloc(t, callback);
- if (conn != NULL) {
- err_t err;
-
- API_MSG_VAR_REF(msg).msg.n.proto = proto;
- API_MSG_VAR_REF(msg).conn = conn;
- err = netconn_apimsg(lwip_netconn_do_newconn, &API_MSG_VAR_REF(msg));
- if (err != ERR_OK) {
- LWIP_ASSERT("freeing conn without freeing pcb", conn->pcb.tcp == NULL);
- LWIP_ASSERT("conn has no recvmbox", sys_mbox_valid(&conn->recvmbox));
-#if LWIP_TCP
- LWIP_ASSERT("conn->acceptmbox shouldn't exist", !sys_mbox_valid(&conn->acceptmbox));
-#endif /* LWIP_TCP */
-#if !LWIP_NETCONN_SEM_PER_THREAD
- LWIP_ASSERT("conn has no op_completed", sys_sem_valid(&conn->op_completed));
- sys_sem_free(&conn->op_completed);
-#endif /* !LWIP_NETCONN_SEM_PER_THREAD */
- sys_mbox_free(&conn->recvmbox);
- memp_free(MEMP_NETCONN, conn);
- API_MSG_VAR_FREE(msg);
- return NULL;
- }
- }
- API_MSG_VAR_FREE(msg);
- return conn;
-}
-
-/**
- * @ingroup netconn_common
- * Close a netconn 'connection' and free all its resources but not the netconn itself.
- * UDP and RAW connection are completely closed, TCP pcbs might still be in a waitstate
- * after this returns.
- *
- * @param conn the netconn to delete
- * @return ERR_OK if the connection was deleted
- */
-err_t
-netconn_prepare_delete(struct netconn *conn)
-{
- err_t err;
- API_MSG_VAR_DECLARE(msg);
-
- /* No ASSERT here because possible to get a (conn == NULL) if we got an accept error */
- if (conn == NULL) {
- return ERR_OK;
- }
-
- API_MSG_VAR_ALLOC(msg);
- API_MSG_VAR_REF(msg).conn = conn;
-#if LWIP_SO_SNDTIMEO || LWIP_SO_LINGER
- /* get the time we started, which is later compared to
- sys_now() + conn->send_timeout */
- API_MSG_VAR_REF(msg).msg.sd.time_started = sys_now();
-#else /* LWIP_SO_SNDTIMEO || LWIP_SO_LINGER */
-#if LWIP_TCP
- API_MSG_VAR_REF(msg).msg.sd.polls_left =
- ((LWIP_TCP_CLOSE_TIMEOUT_MS_DEFAULT + TCP_SLOW_INTERVAL - 1) / TCP_SLOW_INTERVAL) + 1;
-#endif /* LWIP_TCP */
-#endif /* LWIP_SO_SNDTIMEO || LWIP_SO_LINGER */
- err = netconn_apimsg(lwip_netconn_do_delconn, &API_MSG_VAR_REF(msg));
- API_MSG_VAR_FREE(msg);
-
- if (err != ERR_OK) {
- return err;
- }
- return ERR_OK;
-}
-
-/**
- * @ingroup netconn_common
- * Close a netconn 'connection' and free its resources.
- * UDP and RAW connection are completely closed, TCP pcbs might still be in a waitstate
- * after this returns.
- *
- * @param conn the netconn to delete
- * @return ERR_OK if the connection was deleted
- */
-err_t
-netconn_delete(struct netconn *conn)
-{
- err_t err;
-
- /* No ASSERT here because possible to get a (conn == NULL) if we got an accept error */
- if (conn == NULL) {
- return ERR_OK;
- }
-
-#if LWIP_NETCONN_FULLDUPLEX
- if (conn->flags & NETCONN_FLAG_MBOXINVALID) {
- /* Already called netconn_prepare_delete() before */
- err = ERR_OK;
- } else
-#endif /* LWIP_NETCONN_FULLDUPLEX */
- {
- err = netconn_prepare_delete(conn);
- }
- if (err == ERR_OK) {
- netconn_free(conn);
- }
- return err;
-}
-
-/**
- * Get the local or remote IP address and port of a netconn.
- * For RAW netconns, this returns the protocol instead of a port!
- *
- * @param conn the netconn to query
- * @param addr a pointer to which to save the IP address
- * @param port a pointer to which to save the port (or protocol for RAW)
- * @param local 1 to get the local IP address, 0 to get the remote one
- * @return ERR_CONN for invalid connections
- * ERR_OK if the information was retrieved
- */
-err_t
-netconn_getaddr(struct netconn *conn, ip_addr_t *addr, u16_t *port, u8_t local)
-{
- API_MSG_VAR_DECLARE(msg);
- err_t err;
-
- LWIP_ERROR("netconn_getaddr: invalid conn", (conn != NULL), return ERR_ARG;);
- LWIP_ERROR("netconn_getaddr: invalid addr", (addr != NULL), return ERR_ARG;);
- LWIP_ERROR("netconn_getaddr: invalid port", (port != NULL), return ERR_ARG;);
-
- API_MSG_VAR_ALLOC(msg);
- API_MSG_VAR_REF(msg).conn = conn;
- API_MSG_VAR_REF(msg).msg.ad.local = local;
-#if LWIP_MPU_COMPATIBLE
- err = netconn_apimsg(lwip_netconn_do_getaddr, &API_MSG_VAR_REF(msg));
- *addr = msg->msg.ad.ipaddr;
- *port = msg->msg.ad.port;
-#else /* LWIP_MPU_COMPATIBLE */
- msg.msg.ad.ipaddr = addr;
- msg.msg.ad.port = port;
- err = netconn_apimsg(lwip_netconn_do_getaddr, &msg);
-#endif /* LWIP_MPU_COMPATIBLE */
- API_MSG_VAR_FREE(msg);
-
- return err;
-}
-
-/**
- * @ingroup netconn_common
- * Bind a netconn to a specific local IP address and port.
- * Binding one netconn twice might not always be checked correctly!
- *
- * @param conn the netconn to bind
- * @param addr the local IP address to bind the netconn to
- * (use IP4_ADDR_ANY/IP6_ADDR_ANY to bind to all addresses)
- * @param port the local port to bind the netconn to (not used for RAW)
- * @return ERR_OK if bound, any other err_t on failure
- */
-err_t
-netconn_bind(struct netconn *conn, const ip_addr_t *addr, u16_t port)
-{
- API_MSG_VAR_DECLARE(msg);
- err_t err;
-
- LWIP_ERROR("netconn_bind: invalid conn", (conn != NULL), return ERR_ARG;);
-
-#if LWIP_IPV4
- /* Don't propagate NULL pointer (IP_ADDR_ANY alias) to subsequent functions */
- if (addr == NULL) {
- addr = IP4_ADDR_ANY;
- }
-#endif /* LWIP_IPV4 */
-
-#if LWIP_IPV4 && LWIP_IPV6
- /* "Socket API like" dual-stack support: If IP to bind to is IP6_ADDR_ANY,
- * and NETCONN_FLAG_IPV6_V6ONLY is 0, use IP_ANY_TYPE to bind
- */
- if ((netconn_get_ipv6only(conn) == 0) &&
- ip_addr_cmp(addr, IP6_ADDR_ANY)) {
- addr = IP_ANY_TYPE;
- }
-#endif /* LWIP_IPV4 && LWIP_IPV6 */
-
- API_MSG_VAR_ALLOC(msg);
- API_MSG_VAR_REF(msg).conn = conn;
- API_MSG_VAR_REF(msg).msg.bc.ipaddr = API_MSG_VAR_REF(addr);
- API_MSG_VAR_REF(msg).msg.bc.port = port;
- err = netconn_apimsg(lwip_netconn_do_bind, &API_MSG_VAR_REF(msg));
- API_MSG_VAR_FREE(msg);
-
- return err;
-}
-
-/**
- * @ingroup netconn_common
- * Bind a netconn to a specific interface and port.
- * Binding one netconn twice might not always be checked correctly!
- *
- * @param conn the netconn to bind
- * @param if_idx the local interface index to bind the netconn to
- * @return ERR_OK if bound, any other err_t on failure
- */
-err_t
-netconn_bind_if(struct netconn *conn, u8_t if_idx)
-{
- API_MSG_VAR_DECLARE(msg);
- err_t err;
-
- LWIP_ERROR("netconn_bind_if: invalid conn", (conn != NULL), return ERR_ARG;);
-
- API_MSG_VAR_ALLOC(msg);
- API_MSG_VAR_REF(msg).conn = conn;
- API_MSG_VAR_REF(msg).msg.bc.if_idx = if_idx;
- err = netconn_apimsg(lwip_netconn_do_bind_if, &API_MSG_VAR_REF(msg));
- API_MSG_VAR_FREE(msg);
-
- return err;
-}
-
-/**
- * @ingroup netconn_common
- * Connect a netconn to a specific remote IP address and port.
- *
- * @param conn the netconn to connect
- * @param addr the remote IP address to connect to
- * @param port the remote port to connect to (no used for RAW)
- * @return ERR_OK if connected, return value of tcp_/udp_/raw_connect otherwise
- */
-err_t
-netconn_connect(struct netconn *conn, const ip_addr_t *addr, u16_t port)
-{
- API_MSG_VAR_DECLARE(msg);
- err_t err;
-
- LWIP_ERROR("netconn_connect: invalid conn", (conn != NULL), return ERR_ARG;);
-
-#if LWIP_IPV4
- /* Don't propagate NULL pointer (IP_ADDR_ANY alias) to subsequent functions */
- if (addr == NULL) {
- addr = IP4_ADDR_ANY;
- }
-#endif /* LWIP_IPV4 */
-
- API_MSG_VAR_ALLOC(msg);
- API_MSG_VAR_REF(msg).conn = conn;
- API_MSG_VAR_REF(msg).msg.bc.ipaddr = API_MSG_VAR_REF(addr);
- API_MSG_VAR_REF(msg).msg.bc.port = port;
- err = netconn_apimsg(lwip_netconn_do_connect, &API_MSG_VAR_REF(msg));
- API_MSG_VAR_FREE(msg);
-
- return err;
-}
-
-/**
- * @ingroup netconn_udp
- * Disconnect a netconn from its current peer (only valid for UDP netconns).
- *
- * @param conn the netconn to disconnect
- * @return See @ref err_t
- */
-err_t
-netconn_disconnect(struct netconn *conn)
-{
- API_MSG_VAR_DECLARE(msg);
- err_t err;
-
- LWIP_ERROR("netconn_disconnect: invalid conn", (conn != NULL), return ERR_ARG;);
-
- API_MSG_VAR_ALLOC(msg);
- API_MSG_VAR_REF(msg).conn = conn;
- err = netconn_apimsg(lwip_netconn_do_disconnect, &API_MSG_VAR_REF(msg));
- API_MSG_VAR_FREE(msg);
-
- return err;
-}
-
-/**
- * @ingroup netconn_tcp
- * Set a TCP netconn into listen mode
- *
- * @param conn the tcp netconn to set to listen mode
- * @param backlog the listen backlog, only used if TCP_LISTEN_BACKLOG==1
- * @return ERR_OK if the netconn was set to listen (UDP and RAW netconns
- * don't return any error (yet?))
- */
-err_t
-netconn_listen_with_backlog(struct netconn *conn, u8_t backlog)
-{
-#if LWIP_TCP
- API_MSG_VAR_DECLARE(msg);
- err_t err;
-
- /* This does no harm. If TCP_LISTEN_BACKLOG is off, backlog is unused. */
- LWIP_UNUSED_ARG(backlog);
-
- LWIP_ERROR("netconn_listen: invalid conn", (conn != NULL), return ERR_ARG;);
-
- API_MSG_VAR_ALLOC(msg);
- API_MSG_VAR_REF(msg).conn = conn;
-#if TCP_LISTEN_BACKLOG
- API_MSG_VAR_REF(msg).msg.lb.backlog = backlog;
-#endif /* TCP_LISTEN_BACKLOG */
- err = netconn_apimsg(lwip_netconn_do_listen, &API_MSG_VAR_REF(msg));
- API_MSG_VAR_FREE(msg);
-
- return err;
-#else /* LWIP_TCP */
- LWIP_UNUSED_ARG(conn);
- LWIP_UNUSED_ARG(backlog);
- return ERR_ARG;
-#endif /* LWIP_TCP */
-}
-
-/**
- * @ingroup netconn_tcp
- * Accept a new connection on a TCP listening netconn.
- *
- * @param conn the TCP listen netconn
- * @param new_conn pointer where the new connection is stored
- * @return ERR_OK if a new connection has been received or an error
- * code otherwise
- */
-err_t
-netconn_accept(struct netconn *conn, struct netconn **new_conn)
-{
-#if LWIP_TCP
- err_t err;
- void *accept_ptr;
- struct netconn *newconn;
-#if TCP_LISTEN_BACKLOG
- API_MSG_VAR_DECLARE(msg);
-#endif /* TCP_LISTEN_BACKLOG */
-
- LWIP_ERROR("netconn_accept: invalid pointer", (new_conn != NULL), return ERR_ARG;);
- *new_conn = NULL;
- LWIP_ERROR("netconn_accept: invalid conn", (conn != NULL), return ERR_ARG;);
-
- /* NOTE: Although the opengroup spec says a pending error shall be returned to
- send/recv/getsockopt(SO_ERROR) only, we return it for listening
- connections also, to handle embedded-system errors */
- err = netconn_err(conn);
- if (err != ERR_OK) {
- /* return pending error */
- return err;
- }
- if (!NETCONN_ACCEPTMBOX_WAITABLE(conn)) {
- /* don't accept if closed: this might block the application task
- waiting on acceptmbox forever! */
- return ERR_CLSD;
- }
-
- API_MSG_VAR_ALLOC_ACCEPT(msg);
-
- NETCONN_MBOX_WAITING_INC(conn);
- if (netconn_is_nonblocking(conn)) {
- if (sys_arch_mbox_tryfetch(&conn->acceptmbox, &accept_ptr) == SYS_ARCH_TIMEOUT) {
- API_MSG_VAR_FREE_ACCEPT(msg);
- NETCONN_MBOX_WAITING_DEC(conn);
- return ERR_WOULDBLOCK;
- }
- } else {
-#if LWIP_SO_RCVTIMEO
- if (sys_arch_mbox_fetch(&conn->acceptmbox, &accept_ptr, conn->recv_timeout) == SYS_ARCH_TIMEOUT) {
- API_MSG_VAR_FREE_ACCEPT(msg);
- NETCONN_MBOX_WAITING_DEC(conn);
- return ERR_TIMEOUT;
- }
-#else
- sys_arch_mbox_fetch(&conn->acceptmbox, &accept_ptr, 0);
-#endif /* LWIP_SO_RCVTIMEO*/
- }
- NETCONN_MBOX_WAITING_DEC(conn);
-#if LWIP_NETCONN_FULLDUPLEX
- if (conn->flags & NETCONN_FLAG_MBOXINVALID) {
- if (lwip_netconn_is_deallocated_msg(accept_ptr)) {
- /* the netconn has been closed from another thread */
- API_MSG_VAR_FREE_ACCEPT(msg);
- return ERR_CONN;
- }
- }
-#endif
-
- /* Register event with callback */
- API_EVENT(conn, NETCONN_EVT_RCVMINUS, 0);
-
- if (lwip_netconn_is_err_msg(accept_ptr, &err)) {
- /* a connection has been aborted: e.g. out of pcbs or out of netconns during accept */
- API_MSG_VAR_FREE_ACCEPT(msg);
- return err;
- }
- if (accept_ptr == NULL) {
- /* connection has been aborted */
- API_MSG_VAR_FREE_ACCEPT(msg);
- return ERR_CLSD;
- }
- newconn = (struct netconn *)accept_ptr;
-#if TCP_LISTEN_BACKLOG
- /* Let the stack know that we have accepted the connection. */
- API_MSG_VAR_REF(msg).conn = newconn;
- /* don't care for the return value of lwip_netconn_do_recv */
- netconn_apimsg(lwip_netconn_do_accepted, &API_MSG_VAR_REF(msg));
- API_MSG_VAR_FREE(msg);
-#endif /* TCP_LISTEN_BACKLOG */
-
- *new_conn = newconn;
- /* don't set conn->last_err: it's only ERR_OK, anyway */
- return ERR_OK;
-#else /* LWIP_TCP */
- LWIP_UNUSED_ARG(conn);
- LWIP_UNUSED_ARG(new_conn);
- return ERR_ARG;
-#endif /* LWIP_TCP */
-}
-
-/**
- * @ingroup netconn_common
- * Receive data: actual implementation that doesn't care whether pbuf or netbuf
- * is received (this is internal, it's just here for describing common errors)
- *
- * @param conn the netconn from which to receive data
- * @param new_buf pointer where a new pbuf/netbuf is stored when received data
- * @param apiflags flags that control function behaviour. For now only:
- * - NETCONN_DONTBLOCK: only read data that is available now, don't wait for more data
- * @return ERR_OK if data has been received, an error code otherwise (timeout,
- * memory error or another error)
- * ERR_CONN if not connected
- * ERR_CLSD if TCP connection has been closed
- * ERR_WOULDBLOCK if the netconn is nonblocking but would block to wait for data
- * ERR_TIMEOUT if the netconn has a receive timeout and no data was received
- */
-static err_t
-netconn_recv_data(struct netconn *conn, void **new_buf, u8_t apiflags)
-{
- void *buf = NULL;
- u16_t len;
-
- LWIP_ERROR("netconn_recv: invalid pointer", (new_buf != NULL), return ERR_ARG;);
- *new_buf = NULL;
- LWIP_ERROR("netconn_recv: invalid conn", (conn != NULL), return ERR_ARG;);
-
- if (!NETCONN_RECVMBOX_WAITABLE(conn)) {
- err_t err = netconn_err(conn);
- if (err != ERR_OK) {
- /* return pending error */
- return err;
- }
- return ERR_CONN;
- }
-
- NETCONN_MBOX_WAITING_INC(conn);
- if (netconn_is_nonblocking(conn) || (apiflags & NETCONN_DONTBLOCK) ||
- (conn->flags & NETCONN_FLAG_MBOXCLOSED) || (conn->pending_err != ERR_OK)) {
- if (sys_arch_mbox_tryfetch(&conn->recvmbox, &buf) == SYS_ARCH_TIMEOUT) {
- err_t err;
- NETCONN_MBOX_WAITING_DEC(conn);
- err = netconn_err(conn);
- if (err != ERR_OK) {
- /* return pending error */
- return err;
- }
- if (conn->flags & NETCONN_FLAG_MBOXCLOSED) {
- return ERR_CONN;
- }
- return ERR_WOULDBLOCK;
- }
- } else {
-#if LWIP_SO_RCVTIMEO
- if (sys_arch_mbox_fetch(&conn->recvmbox, &buf, conn->recv_timeout) == SYS_ARCH_TIMEOUT) {
- NETCONN_MBOX_WAITING_DEC(conn);
- return ERR_TIMEOUT;
- }
-#else
- sys_arch_mbox_fetch(&conn->recvmbox, &buf, 0);
-#endif /* LWIP_SO_RCVTIMEO*/
- }
- NETCONN_MBOX_WAITING_DEC(conn);
-#if LWIP_NETCONN_FULLDUPLEX
- if (conn->flags & NETCONN_FLAG_MBOXINVALID) {
- if (lwip_netconn_is_deallocated_msg(buf)) {
- /* the netconn has been closed from another thread */
- API_MSG_VAR_FREE_ACCEPT(msg);
- return ERR_CONN;
- }
- }
-#endif
-
-#if LWIP_TCP
-#if (LWIP_UDP || LWIP_RAW)
- if (NETCONNTYPE_GROUP(conn->type) == NETCONN_TCP)
-#endif /* (LWIP_UDP || LWIP_RAW) */
- {
- err_t err;
- /* Check if this is an error message or a pbuf */
- if (lwip_netconn_is_err_msg(buf, &err)) {
- /* new_buf has been zeroed above already */
- if (err == ERR_CLSD) {
- /* connection closed translates to ERR_OK with *new_buf == NULL */
- return ERR_OK;
- }
- return err;
- }
- len = ((struct pbuf *)buf)->tot_len;
- }
-#endif /* LWIP_TCP */
-#if LWIP_TCP && (LWIP_UDP || LWIP_RAW)
- else
-#endif /* LWIP_TCP && (LWIP_UDP || LWIP_RAW) */
-#if (LWIP_UDP || LWIP_RAW)
- {
- LWIP_ASSERT("buf != NULL", buf != NULL);
- len = netbuf_len((struct netbuf *)buf);
- }
-#endif /* (LWIP_UDP || LWIP_RAW) */
-
-#if LWIP_SO_RCVBUF
- SYS_ARCH_DEC(conn->recv_avail, len);
-#endif /* LWIP_SO_RCVBUF */
- /* Register event with callback */
- API_EVENT(conn, NETCONN_EVT_RCVMINUS, len);
-
- LWIP_DEBUGF(API_LIB_DEBUG, ("netconn_recv_data: received %p, len=%"U16_F"\n", buf, len));
-
- *new_buf = buf;
- /* don't set conn->last_err: it's only ERR_OK, anyway */
- return ERR_OK;
-}
-
-#if LWIP_TCP
-static err_t
-netconn_tcp_recvd_msg(struct netconn *conn, size_t len, struct api_msg *msg)
-{
- LWIP_ERROR("netconn_recv_tcp_pbuf: invalid conn", (conn != NULL) &&
- NETCONNTYPE_GROUP(netconn_type(conn)) == NETCONN_TCP, return ERR_ARG;);
-
- msg->conn = conn;
- msg->msg.r.len = len;
-
- return netconn_apimsg(lwip_netconn_do_recv, msg);
-}
-
-err_t
-netconn_tcp_recvd(struct netconn *conn, size_t len)
-{
- err_t err;
- API_MSG_VAR_DECLARE(msg);
- LWIP_ERROR("netconn_recv_tcp_pbuf: invalid conn", (conn != NULL) &&
- NETCONNTYPE_GROUP(netconn_type(conn)) == NETCONN_TCP, return ERR_ARG;);
-
- API_MSG_VAR_ALLOC(msg);
- err = netconn_tcp_recvd_msg(conn, len, &API_VAR_REF(msg));
- API_MSG_VAR_FREE(msg);
- return err;
-}
-
-static err_t
-netconn_recv_data_tcp(struct netconn *conn, struct pbuf **new_buf, u8_t apiflags)
-{
- err_t err;
- struct pbuf *buf;
- API_MSG_VAR_DECLARE(msg);
-#if LWIP_MPU_COMPATIBLE
- msg = NULL;
-#endif
-
- if (!NETCONN_RECVMBOX_WAITABLE(conn)) {
- /* This only happens when calling this function more than once *after* receiving FIN */
- return ERR_CONN;
- }
- if (netconn_is_flag_set(conn, NETCONN_FIN_RX_PENDING)) {
- netconn_clear_flags(conn, NETCONN_FIN_RX_PENDING);
- goto handle_fin;
- }
-
- if (!(apiflags & NETCONN_NOAUTORCVD)) {
- /* need to allocate API message here so empty message pool does not result in event loss
- * see bug #47512: MPU_COMPATIBLE may fail on empty pool */
- API_MSG_VAR_ALLOC(msg);
- }
-
- err = netconn_recv_data(conn, (void **)new_buf, apiflags);
- if (err != ERR_OK) {
- if (!(apiflags & NETCONN_NOAUTORCVD)) {
- API_MSG_VAR_FREE(msg);
- }
- return err;
- }
- buf = *new_buf;
- if (!(apiflags & NETCONN_NOAUTORCVD)) {
- /* Let the stack know that we have taken the data. */
- u16_t len = buf ? buf->tot_len : 1;
- /* don't care for the return value of lwip_netconn_do_recv */
- /* @todo: this should really be fixed, e.g. by retrying in poll on error */
- netconn_tcp_recvd_msg(conn, len, &API_VAR_REF(msg));
- API_MSG_VAR_FREE(msg);
- }
-
- /* If we are closed, we indicate that we no longer wish to use the socket */
- if (buf == NULL) {
- if (apiflags & NETCONN_NOFIN) {
- /* received a FIN but the caller cannot handle it right now:
- re-enqueue it and return "no data" */
- netconn_set_flags(conn, NETCONN_FIN_RX_PENDING);
- return ERR_WOULDBLOCK;
- } else {
-handle_fin:
- API_EVENT(conn, NETCONN_EVT_RCVMINUS, 0);
- if (conn->pcb.ip == NULL) {
- /* race condition: RST during recv */
- err = netconn_err(conn);
- if (err != ERR_OK) {
- return err;
- }
- return ERR_RST;
- }
- /* RX side is closed, so deallocate the recvmbox */
- netconn_close_shutdown(conn, NETCONN_SHUT_RD);
- /* Don' store ERR_CLSD as conn->err since we are only half-closed */
- return ERR_CLSD;
- }
- }
- return err;
-}
-
-/**
- * @ingroup netconn_tcp
- * Receive data (in form of a pbuf) from a TCP netconn
- *
- * @param conn the netconn from which to receive data
- * @param new_buf pointer where a new pbuf is stored when received data
- * @return ERR_OK if data has been received, an error code otherwise (timeout,
- * memory error or another error, @see netconn_recv_data)
- * ERR_ARG if conn is not a TCP netconn
- */
-err_t
-netconn_recv_tcp_pbuf(struct netconn *conn, struct pbuf **new_buf)
-{
- LWIP_ERROR("netconn_recv_tcp_pbuf: invalid conn", (conn != NULL) &&
- NETCONNTYPE_GROUP(netconn_type(conn)) == NETCONN_TCP, return ERR_ARG;);
-
- return netconn_recv_data_tcp(conn, new_buf, 0);
-}
-
-/**
- * @ingroup netconn_tcp
- * Receive data (in form of a pbuf) from a TCP netconn
- *
- * @param conn the netconn from which to receive data
- * @param new_buf pointer where a new pbuf is stored when received data
- * @param apiflags flags that control function behaviour. For now only:
- * - NETCONN_DONTBLOCK: only read data that is available now, don't wait for more data
- * @return ERR_OK if data has been received, an error code otherwise (timeout,
- * memory error or another error, @see netconn_recv_data)
- * ERR_ARG if conn is not a TCP netconn
- */
-err_t
-netconn_recv_tcp_pbuf_flags(struct netconn *conn, struct pbuf **new_buf, u8_t apiflags)
-{
- LWIP_ERROR("netconn_recv_tcp_pbuf: invalid conn", (conn != NULL) &&
- NETCONNTYPE_GROUP(netconn_type(conn)) == NETCONN_TCP, return ERR_ARG;);
-
- return netconn_recv_data_tcp(conn, new_buf, apiflags);
-}
-#endif /* LWIP_TCP */
-
-/**
- * Receive data (in form of a netbuf) from a UDP or RAW netconn
- *
- * @param conn the netconn from which to receive data
- * @param new_buf pointer where a new netbuf is stored when received data
- * @return ERR_OK if data has been received, an error code otherwise (timeout,
- * memory error or another error)
- * ERR_ARG if conn is not a UDP/RAW netconn
- */
-err_t
-netconn_recv_udp_raw_netbuf(struct netconn *conn, struct netbuf **new_buf)
-{
- LWIP_ERROR("netconn_recv_udp_raw_netbuf: invalid conn", (conn != NULL) &&
- NETCONNTYPE_GROUP(netconn_type(conn)) != NETCONN_TCP, return ERR_ARG;);
-
- return netconn_recv_data(conn, (void **)new_buf, 0);
-}
-
-/**
- * Receive data (in form of a netbuf) from a UDP or RAW netconn
- *
- * @param conn the netconn from which to receive data
- * @param new_buf pointer where a new netbuf is stored when received data
- * @param apiflags flags that control function behaviour. For now only:
- * - NETCONN_DONTBLOCK: only read data that is available now, don't wait for more data
- * @return ERR_OK if data has been received, an error code otherwise (timeout,
- * memory error or another error)
- * ERR_ARG if conn is not a UDP/RAW netconn
- */
-err_t
-netconn_recv_udp_raw_netbuf_flags(struct netconn *conn, struct netbuf **new_buf, u8_t apiflags)
-{
- LWIP_ERROR("netconn_recv_udp_raw_netbuf: invalid conn", (conn != NULL) &&
- NETCONNTYPE_GROUP(netconn_type(conn)) != NETCONN_TCP, return ERR_ARG;);
-
- return netconn_recv_data(conn, (void **)new_buf, apiflags);
-}
-
-/**
- * @ingroup netconn_common
- * Receive data (in form of a netbuf containing a packet buffer) from a netconn
- *
- * @param conn the netconn from which to receive data
- * @param new_buf pointer where a new netbuf is stored when received data
- * @return ERR_OK if data has been received, an error code otherwise (timeout,
- * memory error or another error)
- */
-err_t
-netconn_recv(struct netconn *conn, struct netbuf **new_buf)
-{
-#if LWIP_TCP
- struct netbuf *buf = NULL;
- err_t err;
-#endif /* LWIP_TCP */
-
- LWIP_ERROR("netconn_recv: invalid pointer", (new_buf != NULL), return ERR_ARG;);
- *new_buf = NULL;
- LWIP_ERROR("netconn_recv: invalid conn", (conn != NULL), return ERR_ARG;);
-
-#if LWIP_TCP
-#if (LWIP_UDP || LWIP_RAW)
- if (NETCONNTYPE_GROUP(conn->type) == NETCONN_TCP)
-#endif /* (LWIP_UDP || LWIP_RAW) */
- {
- struct pbuf *p = NULL;
- /* This is not a listening netconn, since recvmbox is set */
-
- buf = (struct netbuf *)memp_malloc(MEMP_NETBUF);
- if (buf == NULL) {
- return ERR_MEM;
- }
-
- err = netconn_recv_data_tcp(conn, &p, 0);
- if (err != ERR_OK) {
- memp_free(MEMP_NETBUF, buf);
- return err;
- }
- LWIP_ASSERT("p != NULL", p != NULL);
-
- buf->p = p;
- buf->ptr = p;
- buf->port = 0;
- ip_addr_set_zero(&buf->addr);
- *new_buf = buf;
- /* don't set conn->last_err: it's only ERR_OK, anyway */
- return ERR_OK;
- }
-#endif /* LWIP_TCP */
-#if LWIP_TCP && (LWIP_UDP || LWIP_RAW)
- else
-#endif /* LWIP_TCP && (LWIP_UDP || LWIP_RAW) */
- {
-#if (LWIP_UDP || LWIP_RAW)
- return netconn_recv_data(conn, (void **)new_buf, 0);
-#endif /* (LWIP_UDP || LWIP_RAW) */
- }
-}
-
-/**
- * @ingroup netconn_udp
- * Send data (in form of a netbuf) to a specific remote IP address and port.
- * Only to be used for UDP and RAW netconns (not TCP).
- *
- * @param conn the netconn over which to send data
- * @param buf a netbuf containing the data to send
- * @param addr the remote IP address to which to send the data
- * @param port the remote port to which to send the data
- * @return ERR_OK if data was sent, any other err_t on error
- */
-err_t
-netconn_sendto(struct netconn *conn, struct netbuf *buf, const ip_addr_t *addr, u16_t port)
-{
- if (buf != NULL) {
- ip_addr_set(&buf->addr, addr);
- buf->port = port;
- return netconn_send(conn, buf);
- }
- return ERR_VAL;
-}
-
-/**
- * @ingroup netconn_udp
- * Send data over a UDP or RAW netconn (that is already connected).
- *
- * @param conn the UDP or RAW netconn over which to send data
- * @param buf a netbuf containing the data to send
- * @return ERR_OK if data was sent, any other err_t on error
- */
-err_t
-netconn_send(struct netconn *conn, struct netbuf *buf)
-{
- API_MSG_VAR_DECLARE(msg);
- err_t err;
-
- LWIP_ERROR("netconn_send: invalid conn", (conn != NULL), return ERR_ARG;);
-
- LWIP_DEBUGF(API_LIB_DEBUG, ("netconn_send: sending %"U16_F" bytes\n", buf->p->tot_len));
-
- API_MSG_VAR_ALLOC(msg);
- API_MSG_VAR_REF(msg).conn = conn;
- API_MSG_VAR_REF(msg).msg.b = buf;
- err = netconn_apimsg(lwip_netconn_do_send, &API_MSG_VAR_REF(msg));
- API_MSG_VAR_FREE(msg);
-
- return err;
-}
-
-/**
- * @ingroup netconn_tcp
- * Send data over a TCP netconn.
- *
- * @param conn the TCP netconn over which to send data
- * @param dataptr pointer to the application buffer that contains the data to send
- * @param size size of the application data to send
- * @param apiflags combination of following flags :
- * - NETCONN_COPY: data will be copied into memory belonging to the stack
- * - NETCONN_MORE: for TCP connection, PSH flag will be set on last segment sent
- * - NETCONN_DONTBLOCK: only write the data if all data can be written at once
- * @param bytes_written pointer to a location that receives the number of written bytes
- * @return ERR_OK if data was sent, any other err_t on error
- */
-err_t
-netconn_write_partly(struct netconn *conn, const void *dataptr, size_t size,
- u8_t apiflags, size_t *bytes_written)
-{
- struct netvector vector;
- vector.ptr = dataptr;
- vector.len = size;
- return netconn_write_vectors_partly(conn, &vector, 1, apiflags, bytes_written);
-}
-
-/**
- * Send vectorized data atomically over a TCP netconn.
- *
- * @param conn the TCP netconn over which to send data
- * @param vectors array of vectors containing data to send
- * @param vectorcnt number of vectors in the array
- * @param apiflags combination of following flags :
- * - NETCONN_COPY: data will be copied into memory belonging to the stack
- * - NETCONN_MORE: for TCP connection, PSH flag will be set on last segment sent
- * - NETCONN_DONTBLOCK: only write the data if all data can be written at once
- * @param bytes_written pointer to a location that receives the number of written bytes
- * @return ERR_OK if data was sent, any other err_t on error
- */
-err_t
-netconn_write_vectors_partly(struct netconn *conn, struct netvector *vectors, u16_t vectorcnt,
- u8_t apiflags, size_t *bytes_written)
-{
- API_MSG_VAR_DECLARE(msg);
- err_t err;
- u8_t dontblock;
- size_t size;
- int i;
-
- LWIP_ERROR("netconn_write: invalid conn", (conn != NULL), return ERR_ARG;);
- LWIP_ERROR("netconn_write: invalid conn->type", (NETCONNTYPE_GROUP(conn->type) == NETCONN_TCP), return ERR_VAL;);
- dontblock = netconn_is_nonblocking(conn) || (apiflags & NETCONN_DONTBLOCK);
-#if LWIP_SO_SNDTIMEO
- if (conn->send_timeout != 0) {
- dontblock = 1;
- }
-#endif /* LWIP_SO_SNDTIMEO */
- if (dontblock && !bytes_written) {
- /* This implies netconn_write() cannot be used for non-blocking send, since
- it has no way to return the number of bytes written. */
- return ERR_VAL;
- }
-
- /* sum up the total size */
- size = 0;
- for (i = 0; i < vectorcnt; i++) {
- size += vectors[i].len;
- if (size < vectors[i].len) {
- /* overflow */
- return ERR_VAL;
- }
- }
- if (size == 0) {
- return ERR_OK;
- } else if (size > SSIZE_MAX) {
- ssize_t limited;
- /* this is required by the socket layer (cannot send full size_t range) */
- if (!bytes_written) {
- return ERR_VAL;
- }
- /* limit the amount of data to send */
- limited = SSIZE_MAX;
- size = (size_t)limited;
- }
-
- API_MSG_VAR_ALLOC(msg);
- /* non-blocking write sends as much */
- API_MSG_VAR_REF(msg).conn = conn;
- API_MSG_VAR_REF(msg).msg.w.vector = vectors;
- API_MSG_VAR_REF(msg).msg.w.vector_cnt = vectorcnt;
- API_MSG_VAR_REF(msg).msg.w.vector_off = 0;
- API_MSG_VAR_REF(msg).msg.w.apiflags = apiflags;
- API_MSG_VAR_REF(msg).msg.w.len = size;
- API_MSG_VAR_REF(msg).msg.w.offset = 0;
-#if LWIP_SO_SNDTIMEO
- if (conn->send_timeout != 0) {
- /* get the time we started, which is later compared to
- sys_now() + conn->send_timeout */
- API_MSG_VAR_REF(msg).msg.w.time_started = sys_now();
- } else {
- API_MSG_VAR_REF(msg).msg.w.time_started = 0;
- }
-#endif /* LWIP_SO_SNDTIMEO */
-
- /* For locking the core: this _can_ be delayed on low memory/low send buffer,
- but if it is, this is done inside api_msg.c:do_write(), so we can use the
- non-blocking version here. */
- err = netconn_apimsg(lwip_netconn_do_write, &API_MSG_VAR_REF(msg));
- if (err == ERR_OK) {
- if (bytes_written != NULL) {
- *bytes_written = API_MSG_VAR_REF(msg).msg.w.offset;
- }
- /* for blocking, check all requested bytes were written, NOTE: send_timeout is
- treated as dontblock (see dontblock assignment above) */
- if (!dontblock) {
- LWIP_ASSERT("do_write failed to write all bytes", API_MSG_VAR_REF(msg).msg.w.offset == size);
- }
- }
- API_MSG_VAR_FREE(msg);
-
- return err;
-}
-
-/**
- * @ingroup netconn_tcp
- * Close or shutdown a TCP netconn (doesn't delete it).
- *
- * @param conn the TCP netconn to close or shutdown
- * @param how fully close or only shutdown one side?
- * @return ERR_OK if the netconn was closed, any other err_t on error
- */
-static err_t
-netconn_close_shutdown(struct netconn *conn, u8_t how)
-{
- API_MSG_VAR_DECLARE(msg);
- err_t err;
- LWIP_UNUSED_ARG(how);
-
- LWIP_ERROR("netconn_close: invalid conn", (conn != NULL), return ERR_ARG;);
-
- API_MSG_VAR_ALLOC(msg);
- API_MSG_VAR_REF(msg).conn = conn;
-#if LWIP_TCP
- /* shutting down both ends is the same as closing */
- API_MSG_VAR_REF(msg).msg.sd.shut = how;
-#if LWIP_SO_SNDTIMEO || LWIP_SO_LINGER
- /* get the time we started, which is later compared to
- sys_now() + conn->send_timeout */
- API_MSG_VAR_REF(msg).msg.sd.time_started = sys_now();
-#else /* LWIP_SO_SNDTIMEO || LWIP_SO_LINGER */
- API_MSG_VAR_REF(msg).msg.sd.polls_left =
- ((LWIP_TCP_CLOSE_TIMEOUT_MS_DEFAULT + TCP_SLOW_INTERVAL - 1) / TCP_SLOW_INTERVAL) + 1;
-#endif /* LWIP_SO_SNDTIMEO || LWIP_SO_LINGER */
-#endif /* LWIP_TCP */
- err = netconn_apimsg(lwip_netconn_do_close, &API_MSG_VAR_REF(msg));
- API_MSG_VAR_FREE(msg);
-
- return err;
-}
-
-/**
- * @ingroup netconn_tcp
- * Close a TCP netconn (doesn't delete it).
- *
- * @param conn the TCP netconn to close
- * @return ERR_OK if the netconn was closed, any other err_t on error
- */
-err_t
-netconn_close(struct netconn *conn)
-{
- /* shutting down both ends is the same as closing */
- return netconn_close_shutdown(conn, NETCONN_SHUT_RDWR);
-}
-
-/**
- * @ingroup netconn_common
- * Get and reset pending error on a netconn
- *
- * @param conn the netconn to get the error from
- * @return and pending error or ERR_OK if no error was pending
- */
-err_t
-netconn_err(struct netconn *conn)
-{
- err_t err;
- SYS_ARCH_DECL_PROTECT(lev);
- if (conn == NULL) {
- return ERR_OK;
- }
- SYS_ARCH_PROTECT(lev);
- err = conn->pending_err;
- conn->pending_err = ERR_OK;
- SYS_ARCH_UNPROTECT(lev);
- return err;
-}
-
-/**
- * @ingroup netconn_tcp
- * Shut down one or both sides of a TCP netconn (doesn't delete it).
- *
- * @param conn the TCP netconn to shut down
- * @param shut_rx shut down the RX side (no more read possible after this)
- * @param shut_tx shut down the TX side (no more write possible after this)
- * @return ERR_OK if the netconn was closed, any other err_t on error
- */
-err_t
-netconn_shutdown(struct netconn *conn, u8_t shut_rx, u8_t shut_tx)
-{
- return netconn_close_shutdown(conn, (u8_t)((shut_rx ? NETCONN_SHUT_RD : 0) | (shut_tx ? NETCONN_SHUT_WR : 0)));
-}
-
-#if LWIP_IGMP || (LWIP_IPV6 && LWIP_IPV6_MLD)
-/**
- * @ingroup netconn_udp
- * Join multicast groups for UDP netconns.
- *
- * @param conn the UDP netconn for which to change multicast addresses
- * @param multiaddr IP address of the multicast group to join or leave
- * @param netif_addr the IP address of the network interface on which to send
- * the igmp message
- * @param join_or_leave flag whether to send a join- or leave-message
- * @return ERR_OK if the action was taken, any err_t on error
- */
-err_t
-netconn_join_leave_group(struct netconn *conn,
- const ip_addr_t *multiaddr,
- const ip_addr_t *netif_addr,
- enum netconn_igmp join_or_leave)
-{
- API_MSG_VAR_DECLARE(msg);
- err_t err;
-
- LWIP_ERROR("netconn_join_leave_group: invalid conn", (conn != NULL), return ERR_ARG;);
-
- API_MSG_VAR_ALLOC(msg);
-
-#if LWIP_IPV4
- /* Don't propagate NULL pointer (IP_ADDR_ANY alias) to subsequent functions */
- if (multiaddr == NULL) {
- multiaddr = IP4_ADDR_ANY;
- }
- if (netif_addr == NULL) {
- netif_addr = IP4_ADDR_ANY;
- }
-#endif /* LWIP_IPV4 */
-
- API_MSG_VAR_REF(msg).conn = conn;
- API_MSG_VAR_REF(msg).msg.jl.multiaddr = API_MSG_VAR_REF(multiaddr);
- API_MSG_VAR_REF(msg).msg.jl.netif_addr = API_MSG_VAR_REF(netif_addr);
- API_MSG_VAR_REF(msg).msg.jl.join_or_leave = join_or_leave;
- err = netconn_apimsg(lwip_netconn_do_join_leave_group, &API_MSG_VAR_REF(msg));
- API_MSG_VAR_FREE(msg);
-
- return err;
-}
-/**
- * @ingroup netconn_udp
- * Join multicast groups for UDP netconns.
- *
- * @param conn the UDP netconn for which to change multicast addresses
- * @param multiaddr IP address of the multicast group to join or leave
- * @param if_idx the index of the netif
- * @param join_or_leave flag whether to send a join- or leave-message
- * @return ERR_OK if the action was taken, any err_t on error
- */
-err_t
-netconn_join_leave_group_netif(struct netconn *conn,
- const ip_addr_t *multiaddr,
- u8_t if_idx,
- enum netconn_igmp join_or_leave)
-{
- API_MSG_VAR_DECLARE(msg);
- err_t err;
-
- LWIP_ERROR("netconn_join_leave_group: invalid conn", (conn != NULL), return ERR_ARG;);
-
- API_MSG_VAR_ALLOC(msg);
-
-#if LWIP_IPV4
- /* Don't propagate NULL pointer (IP_ADDR_ANY alias) to subsequent functions */
- if (multiaddr == NULL) {
- multiaddr = IP4_ADDR_ANY;
- }
- if (if_idx == NETIF_NO_INDEX) {
- return ERR_IF;
- }
-#endif /* LWIP_IPV4 */
-
- API_MSG_VAR_REF(msg).conn = conn;
- API_MSG_VAR_REF(msg).msg.jl.multiaddr = API_MSG_VAR_REF(multiaddr);
- API_MSG_VAR_REF(msg).msg.jl.if_idx = if_idx;
- API_MSG_VAR_REF(msg).msg.jl.join_or_leave = join_or_leave;
- err = netconn_apimsg(lwip_netconn_do_join_leave_group_netif, &API_MSG_VAR_REF(msg));
- API_MSG_VAR_FREE(msg);
-
- return err;
-}
-#endif /* LWIP_IGMP || (LWIP_IPV6 && LWIP_IPV6_MLD) */
-
-#if LWIP_DNS
-/**
- * @ingroup netconn_common
- * Execute a DNS query, only one IP address is returned
- *
- * @param name a string representation of the DNS host name to query
- * @param addr a preallocated ip_addr_t where to store the resolved IP address
- * @param dns_addrtype IP address type (IPv4 / IPv6)
- * @return ERR_OK: resolving succeeded
- * ERR_MEM: memory error, try again later
- * ERR_ARG: dns client not initialized or invalid hostname
- * ERR_VAL: dns server response was invalid
- */
-#if LWIP_IPV4 && LWIP_IPV6
-err_t
-netconn_gethostbyname_addrtype(const char *name, ip_addr_t *addr, u8_t dns_addrtype)
-#else
-err_t
-netconn_gethostbyname(const char *name, ip_addr_t *addr)
-#endif
-{
- API_VAR_DECLARE(struct dns_api_msg, msg);
-#if !LWIP_MPU_COMPATIBLE
- sys_sem_t sem;
-#endif /* LWIP_MPU_COMPATIBLE */
- err_t err;
- err_t cberr;
-
- LWIP_ERROR("netconn_gethostbyname: invalid name", (name != NULL), return ERR_ARG;);
- LWIP_ERROR("netconn_gethostbyname: invalid addr", (addr != NULL), return ERR_ARG;);
-#if LWIP_MPU_COMPATIBLE
- if (strlen(name) >= DNS_MAX_NAME_LENGTH) {
- return ERR_ARG;
- }
-#endif
-
-#ifdef LWIP_HOOK_NETCONN_EXTERNAL_RESOLVE
-#if LWIP_IPV4 && LWIP_IPV6
- if (LWIP_HOOK_NETCONN_EXTERNAL_RESOLVE(name, addr, dns_addrtype, &err)) {
-#else
- if (LWIP_HOOK_NETCONN_EXTERNAL_RESOLVE(name, addr, NETCONN_DNS_DEFAULT, &err)) {
-#endif /* LWIP_IPV4 && LWIP_IPV6 */
- return err;
- }
-#endif /* LWIP_HOOK_NETCONN_EXTERNAL_RESOLVE */
-
- API_VAR_ALLOC(struct dns_api_msg, MEMP_DNS_API_MSG, msg, ERR_MEM);
-#if LWIP_MPU_COMPATIBLE
- strncpy(API_VAR_REF(msg).name, name, DNS_MAX_NAME_LENGTH - 1);
- API_VAR_REF(msg).name[DNS_MAX_NAME_LENGTH - 1] = 0;
-#else /* LWIP_MPU_COMPATIBLE */
- msg.err = &err;
- msg.sem = &sem;
- API_VAR_REF(msg).addr = API_VAR_REF(addr);
- API_VAR_REF(msg).name = name;
-#endif /* LWIP_MPU_COMPATIBLE */
-#if LWIP_IPV4 && LWIP_IPV6
- API_VAR_REF(msg).dns_addrtype = dns_addrtype;
-#endif /* LWIP_IPV4 && LWIP_IPV6 */
-#if LWIP_NETCONN_SEM_PER_THREAD
- API_VAR_REF(msg).sem = LWIP_NETCONN_THREAD_SEM_GET();
-#else /* LWIP_NETCONN_SEM_PER_THREAD*/
- err = sys_sem_new(API_EXPR_REF(API_VAR_REF(msg).sem), 0);
- if (err != ERR_OK) {
- API_VAR_FREE(MEMP_DNS_API_MSG, msg);
- return err;
- }
-#endif /* LWIP_NETCONN_SEM_PER_THREAD */
-
- cberr = tcpip_send_msg_wait_sem(lwip_netconn_do_gethostbyname, &API_VAR_REF(msg), API_EXPR_REF(API_VAR_REF(msg).sem));
-#if !LWIP_NETCONN_SEM_PER_THREAD
- sys_sem_free(API_EXPR_REF(API_VAR_REF(msg).sem));
-#endif /* !LWIP_NETCONN_SEM_PER_THREAD */
- if (cberr != ERR_OK) {
- API_VAR_FREE(MEMP_DNS_API_MSG, msg);
- return cberr;
- }
-
-#if LWIP_MPU_COMPATIBLE
- *addr = msg->addr;
- err = msg->err;
-#endif /* LWIP_MPU_COMPATIBLE */
-
- API_VAR_FREE(MEMP_DNS_API_MSG, msg);
- return err;
-}
-#endif /* LWIP_DNS*/
-
-#if LWIP_NETCONN_SEM_PER_THREAD
-void
-netconn_thread_init(void)
-{
- sys_sem_t *sem = LWIP_NETCONN_THREAD_SEM_GET();
- if ((sem == NULL) || !sys_sem_valid(sem)) {
- /* call alloc only once */
- LWIP_NETCONN_THREAD_SEM_ALLOC();
- LWIP_ASSERT("LWIP_NETCONN_THREAD_SEM_ALLOC() failed", sys_sem_valid(LWIP_NETCONN_THREAD_SEM_GET()));
- }
-}
-
-void
-netconn_thread_cleanup(void)
-{
- sys_sem_t *sem = LWIP_NETCONN_THREAD_SEM_GET();
- if ((sem != NULL) && sys_sem_valid(sem)) {
- /* call free only once */
- LWIP_NETCONN_THREAD_SEM_FREE();
- }
-}
-#endif /* LWIP_NETCONN_SEM_PER_THREAD */
-
-#endif /* LWIP_NETCONN */
diff --git a/third-party/lwip-2.1.2/api/api_msg.c b/third-party/lwip-2.1.2/api/api_msg.c
deleted file mode 100644
index 39531024ec3ba54ef98ec344623dba35f140a1ff..0000000000000000000000000000000000000000
--- a/third-party/lwip-2.1.2/api/api_msg.c
+++ /dev/null
@@ -1,2173 +0,0 @@
-/**
- * @file
- * Sequential API Internal module
- *
- */
-
-/*
- * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
- * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
- * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
- * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
- * OF SUCH DAMAGE.
- *
- * This file is part of the lwIP TCP/IP stack.
- *
- * Author: Adam Dunkels
- *
- */
-
-#include "lwip/opt.h"
-
-#if LWIP_NETCONN /* don't build if not configured for use in lwipopts.h */
-
-#include "lwip/priv/api_msg.h"
-
-#include "lwip/ip.h"
-#include "lwip/ip_addr.h"
-#include "lwip/udp.h"
-#include "lwip/tcp.h"
-#include "lwip/raw.h"
-
-#include "lwip/memp.h"
-#include "lwip/igmp.h"
-#include "lwip/dns.h"
-#include "lwip/mld6.h"
-#include "lwip/priv/tcpip_priv.h"
-
-#include
-
-/* netconns are polled once per second (e.g. continue write on memory error) */
-#define NETCONN_TCP_POLL_INTERVAL 2
-
-#define SET_NONBLOCKING_CONNECT(conn, val) do { if (val) { \
- netconn_set_flags(conn, NETCONN_FLAG_IN_NONBLOCKING_CONNECT); \
-} else { \
- netconn_clear_flags(conn, NETCONN_FLAG_IN_NONBLOCKING_CONNECT); }} while(0)
-#define IN_NONBLOCKING_CONNECT(conn) netconn_is_flag_set(conn, NETCONN_FLAG_IN_NONBLOCKING_CONNECT)
-
-#if LWIP_NETCONN_FULLDUPLEX
-#define NETCONN_MBOX_VALID(conn, mbox) (sys_mbox_valid(mbox) && ((conn->flags & NETCONN_FLAG_MBOXINVALID) == 0))
-#else
-#define NETCONN_MBOX_VALID(conn, mbox) sys_mbox_valid(mbox)
-#endif
-
-/* forward declarations */
-#if LWIP_TCP
-#if LWIP_TCPIP_CORE_LOCKING
-#define WRITE_DELAYED , 1
-#define WRITE_DELAYED_PARAM , u8_t delayed
-#else /* LWIP_TCPIP_CORE_LOCKING */
-#define WRITE_DELAYED
-#define WRITE_DELAYED_PARAM
-#endif /* LWIP_TCPIP_CORE_LOCKING */
-static err_t lwip_netconn_do_writemore(struct netconn *conn WRITE_DELAYED_PARAM);
-static err_t lwip_netconn_do_close_internal(struct netconn *conn WRITE_DELAYED_PARAM);
-#endif
-
-static void netconn_drain(struct netconn *conn);
-
-#if LWIP_TCPIP_CORE_LOCKING
-#define TCPIP_APIMSG_ACK(m)
-#else /* LWIP_TCPIP_CORE_LOCKING */
-#define TCPIP_APIMSG_ACK(m) do { sys_sem_signal(LWIP_API_MSG_SEM(m)); } while(0)
-#endif /* LWIP_TCPIP_CORE_LOCKING */
-
-#if LWIP_NETCONN_FULLDUPLEX
-const u8_t netconn_deleted = 0;
-
-int
-lwip_netconn_is_deallocated_msg(void *msg)
-{
- if (msg == &netconn_deleted) {
- return 1;
- }
- return 0;
-}
-#endif /* LWIP_NETCONN_FULLDUPLEX */
-
-#if LWIP_TCP
-const u8_t netconn_aborted = 0;
-const u8_t netconn_reset = 0;
-const u8_t netconn_closed = 0;
-
-/** Translate an error to a unique void* passed via an mbox */
-static void *
-lwip_netconn_err_to_msg(err_t err)
-{
- switch (err) {
- case ERR_ABRT:
- return LWIP_CONST_CAST(void *, &netconn_aborted);
- case ERR_RST:
- return LWIP_CONST_CAST(void *, &netconn_reset);
- case ERR_CLSD:
- return LWIP_CONST_CAST(void *, &netconn_closed);
- default:
- LWIP_ASSERT("unhandled error", err == ERR_OK);
- return NULL;
- }
-}
-
-int
-lwip_netconn_is_err_msg(void *msg, err_t *err)
-{
- LWIP_ASSERT("err != NULL", err != NULL);
-
- if (msg == &netconn_aborted) {
- *err = ERR_ABRT;
- return 1;
- } else if (msg == &netconn_reset) {
- *err = ERR_RST;
- return 1;
- } else if (msg == &netconn_closed) {
- *err = ERR_CLSD;
- return 1;
- }
- return 0;
-}
-#endif /* LWIP_TCP */
-
-
-#if LWIP_RAW
-/**
- * Receive callback function for RAW netconns.
- * Doesn't 'eat' the packet, only copies it and sends it to
- * conn->recvmbox
- *
- * @see raw.h (struct raw_pcb.recv) for parameters and return value
- */
-static u8_t
-recv_raw(void *arg, struct raw_pcb *pcb, struct pbuf *p,
- const ip_addr_t *addr)
-{
- struct pbuf *q;
- struct netbuf *buf;
- struct netconn *conn;
-
- LWIP_UNUSED_ARG(addr);
- conn = (struct netconn *)arg;
-
- if ((conn != NULL) && NETCONN_MBOX_VALID(conn, &conn->recvmbox)) {
-#if LWIP_SO_RCVBUF
- int recv_avail;
- SYS_ARCH_GET(conn->recv_avail, recv_avail);
- if ((recv_avail + (int)(p->tot_len)) > conn->recv_bufsize) {
- return 0;
- }
-#endif /* LWIP_SO_RCVBUF */
- /* copy the whole packet into new pbufs */
- q = pbuf_clone(PBUF_RAW, PBUF_RAM, p);
- if (q != NULL) {
- u16_t len;
- buf = (struct netbuf *)memp_malloc(MEMP_NETBUF);
- if (buf == NULL) {
- pbuf_free(q);
- return 0;
- }
-
- buf->p = q;
- buf->ptr = q;
- ip_addr_copy(buf->addr, *ip_current_src_addr());
- buf->port = pcb->protocol;
-
- len = q->tot_len;
- if (sys_mbox_trypost(&conn->recvmbox, buf) != ERR_OK) {
- netbuf_delete(buf);
- return 0;
- } else {
-#if LWIP_SO_RCVBUF
- SYS_ARCH_INC(conn->recv_avail, len);
-#endif /* LWIP_SO_RCVBUF */
- /* Register event with callback */
- API_EVENT(conn, NETCONN_EVT_RCVPLUS, len);
- }
- }
- }
-
- return 0; /* do not eat the packet */
-}
-#endif /* LWIP_RAW*/
-
-#if LWIP_UDP
-/**
- * Receive callback function for UDP netconns.
- * Posts the packet to conn->recvmbox or deletes it on memory error.
- *
- * @see udp.h (struct udp_pcb.recv) for parameters
- */
-static void
-recv_udp(void *arg, struct udp_pcb *pcb, struct pbuf *p,
- const ip_addr_t *addr, u16_t port)
-{
- struct netbuf *buf;
- struct netconn *conn;
- u16_t len;
-#if LWIP_SO_RCVBUF
- int recv_avail;
-#endif /* LWIP_SO_RCVBUF */
-
- LWIP_UNUSED_ARG(pcb); /* only used for asserts... */
- LWIP_ASSERT("recv_udp must have a pcb argument", pcb != NULL);
- LWIP_ASSERT("recv_udp must have an argument", arg != NULL);
- conn = (struct netconn *)arg;
-
- if (conn == NULL) {
- pbuf_free(p);
- return;
- }
-
- LWIP_ASSERT("recv_udp: recv for wrong pcb!", conn->pcb.udp == pcb);
-
-#if LWIP_SO_RCVBUF
- SYS_ARCH_GET(conn->recv_avail, recv_avail);
- if (!NETCONN_MBOX_VALID(conn, &conn->recvmbox) ||
- ((recv_avail + (int)(p->tot_len)) > conn->recv_bufsize)) {
-#else /* LWIP_SO_RCVBUF */
- if (!NETCONN_MBOX_VALID(conn, &conn->recvmbox)) {
-#endif /* LWIP_SO_RCVBUF */
- pbuf_free(p);
- return;
- }
-
- buf = (struct netbuf *)memp_malloc(MEMP_NETBUF);
- if (buf == NULL) {
- pbuf_free(p);
- return;
- } else {
- buf->p = p;
- buf->ptr = p;
- ip_addr_set(&buf->addr, addr);
- buf->port = port;
-#if LWIP_NETBUF_RECVINFO
- if (conn->flags & NETCONN_FLAG_PKTINFO) {
- /* get the UDP header - always in the first pbuf, ensured by udp_input */
- const struct udp_hdr *udphdr = (const struct udp_hdr *)ip_next_header_ptr();
- buf->flags = NETBUF_FLAG_DESTADDR;
- ip_addr_set(&buf->toaddr, ip_current_dest_addr());
- buf->toport_chksum = udphdr->dest;
- }
-#endif /* LWIP_NETBUF_RECVINFO */
- }
-
- len = p->tot_len;
- if (sys_mbox_trypost(&conn->recvmbox, buf) != ERR_OK) {
- netbuf_delete(buf);
- return;
- } else {
-#if LWIP_SO_RCVBUF
- SYS_ARCH_INC(conn->recv_avail, len);
-#endif /* LWIP_SO_RCVBUF */
- /* Register event with callback */
- API_EVENT(conn, NETCONN_EVT_RCVPLUS, len);
- }
-}
-#endif /* LWIP_UDP */
-
-#if LWIP_TCP
-/**
- * Receive callback function for TCP netconns.
- * Posts the packet to conn->recvmbox, but doesn't delete it on errors.
- *
- * @see tcp.h (struct tcp_pcb.recv) for parameters and return value
- */
-static err_t
-recv_tcp(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err)
-{
- struct netconn *conn;
- u16_t len;
- void *msg;
-
- LWIP_UNUSED_ARG(pcb);
- LWIP_ASSERT("recv_tcp must have a pcb argument", pcb != NULL);
- LWIP_ASSERT("recv_tcp must have an argument", arg != NULL);
- LWIP_ASSERT("err != ERR_OK unhandled", err == ERR_OK);
- LWIP_UNUSED_ARG(err); /* for LWIP_NOASSERT */
- conn = (struct netconn *)arg;
-
- if (conn == NULL) {
- return ERR_VAL;
- }
- LWIP_ASSERT("recv_tcp: recv for wrong pcb!", conn->pcb.tcp == pcb);
-
- if (!NETCONN_MBOX_VALID(conn, &conn->recvmbox)) {
- /* recvmbox already deleted */
- if (p != NULL) {
- tcp_recved(pcb, p->tot_len);
- pbuf_free(p);
- }
- return ERR_OK;
- }
- /* Unlike for UDP or RAW pcbs, don't check for available space
- using recv_avail since that could break the connection
- (data is already ACKed) */
-
- if (p != NULL) {
- msg = p;
- len = p->tot_len;
- } else {
- msg = LWIP_CONST_CAST(void *, &netconn_closed);
- len = 0;
- }
-
- if (sys_mbox_trypost(&conn->recvmbox, msg) != ERR_OK) {
- /* don't deallocate p: it is presented to us later again from tcp_fasttmr! */
- return ERR_MEM;
- } else {
-#if LWIP_SO_RCVBUF
- SYS_ARCH_INC(conn->recv_avail, len);
-#endif /* LWIP_SO_RCVBUF */
- /* Register event with callback */
- API_EVENT(conn, NETCONN_EVT_RCVPLUS, len);
- }
-
- return ERR_OK;
-}
-
-/**
- * Poll callback function for TCP netconns.
- * Wakes up an application thread that waits for a connection to close
- * or data to be sent. The application thread then takes the
- * appropriate action to go on.
- *
- * Signals the conn->sem.
- * netconn_close waits for conn->sem if closing failed.
- *
- * @see tcp.h (struct tcp_pcb.poll) for parameters and return value
- */
-static err_t
-poll_tcp(void *arg, struct tcp_pcb *pcb)
-{
- struct netconn *conn = (struct netconn *)arg;
-
- LWIP_UNUSED_ARG(pcb);
- LWIP_ASSERT("conn != NULL", (conn != NULL));
-
- if (conn->state == NETCONN_WRITE) {
- lwip_netconn_do_writemore(conn WRITE_DELAYED);
- } else if (conn->state == NETCONN_CLOSE) {
-#if !LWIP_SO_SNDTIMEO && !LWIP_SO_LINGER
- if (conn->current_msg && conn->current_msg->msg.sd.polls_left) {
- conn->current_msg->msg.sd.polls_left--;
- }
-#endif /* !LWIP_SO_SNDTIMEO && !LWIP_SO_LINGER */
- lwip_netconn_do_close_internal(conn WRITE_DELAYED);
- }
- /* @todo: implement connect timeout here? */
-
- /* Did a nonblocking write fail before? Then check available write-space. */
- if (conn->flags & NETCONN_FLAG_CHECK_WRITESPACE) {
- /* If the queued byte- or pbuf-count drops below the configured low-water limit,
- let select mark this pcb as writable again. */
- if ((conn->pcb.tcp != NULL) && (tcp_sndbuf(conn->pcb.tcp) > TCP_SNDLOWAT) &&
- (tcp_sndqueuelen(conn->pcb.tcp) < TCP_SNDQUEUELOWAT)) {
- netconn_clear_flags(conn, NETCONN_FLAG_CHECK_WRITESPACE);
- API_EVENT(conn, NETCONN_EVT_SENDPLUS, 0);
- }
- }
-
- return ERR_OK;
-}
-
-/**
- * Sent callback function for TCP netconns.
- * Signals the conn->sem and calls API_EVENT.
- * netconn_write waits for conn->sem if send buffer is low.
- *
- * @see tcp.h (struct tcp_pcb.sent) for parameters and return value
- */
-static err_t
-sent_tcp(void *arg, struct tcp_pcb *pcb, u16_t len)
-{
- struct netconn *conn = (struct netconn *)arg;
-
- LWIP_UNUSED_ARG(pcb);
- LWIP_ASSERT("conn != NULL", (conn != NULL));
-
- if (conn) {
- if (conn->state == NETCONN_WRITE) {
- lwip_netconn_do_writemore(conn WRITE_DELAYED);
- } else if (conn->state == NETCONN_CLOSE) {
- lwip_netconn_do_close_internal(conn WRITE_DELAYED);
- }
-
- /* If the queued byte- or pbuf-count drops below the configured low-water limit,
- let select mark this pcb as writable again. */
- if ((conn->pcb.tcp != NULL) && (tcp_sndbuf(conn->pcb.tcp) > TCP_SNDLOWAT) &&
- (tcp_sndqueuelen(conn->pcb.tcp) < TCP_SNDQUEUELOWAT)) {
- netconn_clear_flags(conn, NETCONN_FLAG_CHECK_WRITESPACE);
- API_EVENT(conn, NETCONN_EVT_SENDPLUS, len);
- }
- }
-
- return ERR_OK;
-}
-
-/**
- * Error callback function for TCP netconns.
- * Signals conn->sem, posts to all conn mboxes and calls API_EVENT.
- * The application thread has then to decide what to do.
- *
- * @see tcp.h (struct tcp_pcb.err) for parameters
- */
-static void
-err_tcp(void *arg, err_t err)
-{
- struct netconn *conn;
- enum netconn_state old_state;
- void *mbox_msg;
- SYS_ARCH_DECL_PROTECT(lev);
-
- conn = (struct netconn *)arg;
- LWIP_ASSERT("conn != NULL", (conn != NULL));
-
- SYS_ARCH_PROTECT(lev);
-
- /* when err is called, the pcb is deallocated, so delete the reference */
- conn->pcb.tcp = NULL;
- /* store pending error */
- conn->pending_err = err;
- /* prevent application threads from blocking on 'recvmbox'/'acceptmbox' */
- conn->flags |= NETCONN_FLAG_MBOXCLOSED;
-
- /* reset conn->state now before waking up other threads */
- old_state = conn->state;
- conn->state = NETCONN_NONE;
-
- SYS_ARCH_UNPROTECT(lev);
-
- /* Notify the user layer about a connection error. Used to signal select. */
- API_EVENT(conn, NETCONN_EVT_ERROR, 0);
- /* Try to release selects pending on 'read' or 'write', too.
- They will get an error if they actually try to read or write. */
- API_EVENT(conn, NETCONN_EVT_RCVPLUS, 0);
- API_EVENT(conn, NETCONN_EVT_SENDPLUS, 0);
-
- mbox_msg = lwip_netconn_err_to_msg(err);
- /* pass error message to recvmbox to wake up pending recv */
- if (NETCONN_MBOX_VALID(conn, &conn->recvmbox)) {
- /* use trypost to prevent deadlock */
- sys_mbox_trypost(&conn->recvmbox, mbox_msg);
- }
- /* pass error message to acceptmbox to wake up pending accept */
- if (NETCONN_MBOX_VALID(conn, &conn->acceptmbox)) {
- /* use trypost to preven deadlock */
- sys_mbox_trypost(&conn->acceptmbox, mbox_msg);
- }
-
- if ((old_state == NETCONN_WRITE) || (old_state == NETCONN_CLOSE) ||
- (old_state == NETCONN_CONNECT)) {
- /* calling lwip_netconn_do_writemore/lwip_netconn_do_close_internal is not necessary
- since the pcb has already been deleted! */
- int was_nonblocking_connect = IN_NONBLOCKING_CONNECT(conn);
- SET_NONBLOCKING_CONNECT(conn, 0);
-
- if (!was_nonblocking_connect) {
- sys_sem_t *op_completed_sem;
- /* set error return code */
- LWIP_ASSERT("conn->current_msg != NULL", conn->current_msg != NULL);
- if (old_state == NETCONN_CLOSE) {
- /* let close succeed: the connection is closed after all... */
- conn->current_msg->err = ERR_OK;
- } else {
- /* Write and connect fail */
- conn->current_msg->err = err;
- }
- op_completed_sem = LWIP_API_MSG_SEM(conn->current_msg);
- LWIP_ASSERT("inavlid op_completed_sem", sys_sem_valid(op_completed_sem));
- conn->current_msg = NULL;
- /* wake up the waiting task */
- sys_sem_signal(op_completed_sem);
- } else {
- /* @todo: test what happens for error on nonblocking connect */
- }
- } else {
- LWIP_ASSERT("conn->current_msg == NULL", conn->current_msg == NULL);
- }
-}
-
-/**
- * Setup a tcp_pcb with the correct callback function pointers
- * and their arguments.
- *
- * @param conn the TCP netconn to setup
- */
-static void
-setup_tcp(struct netconn *conn)
-{
- struct tcp_pcb *pcb;
-
- pcb = conn->pcb.tcp;
- tcp_arg(pcb, conn);
- tcp_recv(pcb, recv_tcp);
- tcp_sent(pcb, sent_tcp);
- tcp_poll(pcb, poll_tcp, NETCONN_TCP_POLL_INTERVAL);
- tcp_err(pcb, err_tcp);
-}
-
-/**
- * Accept callback function for TCP netconns.
- * Allocates a new netconn and posts that to conn->acceptmbox.
- *
- * @see tcp.h (struct tcp_pcb_listen.accept) for parameters and return value
- */
-static err_t
-accept_function(void *arg, struct tcp_pcb *newpcb, err_t err)
-{
- struct netconn *newconn;
- struct netconn *conn = (struct netconn *)arg;
-
- if (conn == NULL) {
- return ERR_VAL;
- }
- if (!NETCONN_MBOX_VALID(conn, &conn->acceptmbox)) {
- LWIP_DEBUGF(API_MSG_DEBUG, ("accept_function: acceptmbox already deleted\n"));
- return ERR_VAL;
- }
-
- if (newpcb == NULL) {
- /* out-of-pcbs during connect: pass on this error to the application */
- if (sys_mbox_trypost(&conn->acceptmbox, lwip_netconn_err_to_msg(ERR_ABRT)) == ERR_OK) {
- /* Register event with callback */
- API_EVENT(conn, NETCONN_EVT_RCVPLUS, 0);
- }
- return ERR_VAL;
- }
- LWIP_ASSERT("expect newpcb == NULL or err == ERR_OK", err == ERR_OK);
- LWIP_UNUSED_ARG(err); /* for LWIP_NOASSERT */
-
- LWIP_DEBUGF(API_MSG_DEBUG, ("accept_function: newpcb->state: %s\n", tcp_debug_state_str(newpcb->state)));
-
- /* We have to set the callback here even though
- * the new socket is unknown. newconn->socket is marked as -1. */
- newconn = netconn_alloc(conn->type, conn->callback);
- if (newconn == NULL) {
- /* outof netconns: pass on this error to the application */
- if (sys_mbox_trypost(&conn->acceptmbox, lwip_netconn_err_to_msg(ERR_ABRT)) == ERR_OK) {
- /* Register event with callback */
- API_EVENT(conn, NETCONN_EVT_RCVPLUS, 0);
- }
- return ERR_MEM;
- }
- newconn->pcb.tcp = newpcb;
- setup_tcp(newconn);
-
- /* handle backlog counter */
- tcp_backlog_delayed(newpcb);
-
- if (sys_mbox_trypost(&conn->acceptmbox, newconn) != ERR_OK) {
- /* When returning != ERR_OK, the pcb is aborted in tcp_process(),
- so do nothing here! */
- /* remove all references to this netconn from the pcb */
- struct tcp_pcb *pcb = newconn->pcb.tcp;
- tcp_arg(pcb, NULL);
- tcp_recv(pcb, NULL);
- tcp_sent(pcb, NULL);
- tcp_poll(pcb, NULL, 0);
- tcp_err(pcb, NULL);
- /* remove reference from to the pcb from this netconn */
- newconn->pcb.tcp = NULL;
- /* no need to drain since we know the recvmbox is empty. */
- sys_mbox_free(&newconn->recvmbox);
- sys_mbox_set_invalid(&newconn->recvmbox);
- netconn_free(newconn);
- return ERR_MEM;
- } else {
- /* Register event with callback */
- API_EVENT(conn, NETCONN_EVT_RCVPLUS, 0);
- }
-
- return ERR_OK;
-}
-#endif /* LWIP_TCP */
-
-/**
- * Create a new pcb of a specific type.
- * Called from lwip_netconn_do_newconn().
- *
- * @param msg the api_msg describing the connection type
- */
-static void
-pcb_new(struct api_msg *msg)
-{
- enum lwip_ip_addr_type iptype = IPADDR_TYPE_V4;
-
- LWIP_ASSERT("pcb_new: pcb already allocated", msg->conn->pcb.tcp == NULL);
-
-#if LWIP_IPV6 && LWIP_IPV4
- /* IPv6: Dual-stack by default, unless netconn_set_ipv6only() is called */
- if (NETCONNTYPE_ISIPV6(netconn_type(msg->conn))) {
- iptype = IPADDR_TYPE_ANY;
- }
-#endif
-
- /* Allocate a PCB for this connection */
- switch (NETCONNTYPE_GROUP(msg->conn->type)) {
-#if LWIP_RAW
- case NETCONN_RAW:
- msg->conn->pcb.raw = raw_new_ip_type(iptype, msg->msg.n.proto);
- if (msg->conn->pcb.raw != NULL) {
-#if LWIP_IPV6
- /* ICMPv6 packets should always have checksum calculated by the stack as per RFC 3542 chapter 3.1 */
- if (NETCONNTYPE_ISIPV6(msg->conn->type) && msg->conn->pcb.raw->protocol == IP6_NEXTH_ICMP6) {
- msg->conn->pcb.raw->chksum_reqd = 1;
- msg->conn->pcb.raw->chksum_offset = 2;
- }
-#endif /* LWIP_IPV6 */
- raw_recv(msg->conn->pcb.raw, recv_raw, msg->conn);
- }
- break;
-#endif /* LWIP_RAW */
-#if LWIP_UDP
- case NETCONN_UDP:
- msg->conn->pcb.udp = udp_new_ip_type(iptype);
- if (msg->conn->pcb.udp != NULL) {
-#if LWIP_UDPLITE
- if (NETCONNTYPE_ISUDPLITE(msg->conn->type)) {
- udp_setflags(msg->conn->pcb.udp, UDP_FLAGS_UDPLITE);
- }
-#endif /* LWIP_UDPLITE */
- if (NETCONNTYPE_ISUDPNOCHKSUM(msg->conn->type)) {
- udp_setflags(msg->conn->pcb.udp, UDP_FLAGS_NOCHKSUM);
- }
- udp_recv(msg->conn->pcb.udp, recv_udp, msg->conn);
- }
- break;
-#endif /* LWIP_UDP */
-#if LWIP_TCP
- case NETCONN_TCP:
- msg->conn->pcb.tcp = tcp_new_ip_type(iptype);
- if (msg->conn->pcb.tcp != NULL) {
- setup_tcp(msg->conn);
- }
- break;
-#endif /* LWIP_TCP */
- default:
- /* Unsupported netconn type, e.g. protocol disabled */
- msg->err = ERR_VAL;
- return;
- }
- if (msg->conn->pcb.ip == NULL) {
- msg->err = ERR_MEM;
- }
-}
-
-/**
- * Create a new pcb of a specific type inside a netconn.
- * Called from netconn_new_with_proto_and_callback.
- *
- * @param m the api_msg describing the connection type
- */
-void
-lwip_netconn_do_newconn(void *m)
-{
- struct api_msg *msg = (struct api_msg *)m;
-
- msg->err = ERR_OK;
- if (msg->conn->pcb.tcp == NULL) {
- pcb_new(msg);
- }
- /* Else? This "new" connection already has a PCB allocated. */
- /* Is this an error condition? Should it be deleted? */
- /* We currently just are happy and return. */
-
- TCPIP_APIMSG_ACK(msg);
-}
-
-/**
- * Create a new netconn (of a specific type) that has a callback function.
- * The corresponding pcb is NOT created!
- *
- * @param t the type of 'connection' to create (@see enum netconn_type)
- * @param callback a function to call on status changes (RX available, TX'ed)
- * @return a newly allocated struct netconn or
- * NULL on memory error
- */
-struct netconn *
-netconn_alloc(enum netconn_type t, netconn_callback callback)
-{
- struct netconn *conn;
- int size;
- u8_t init_flags = 0;
-
- conn = (struct netconn *)memp_malloc(MEMP_NETCONN);
- if (conn == NULL) {
- return NULL;
- }
-
- conn->pending_err = ERR_OK;
- conn->type = t;
- conn->pcb.tcp = NULL;
-
- /* If all sizes are the same, every compiler should optimize this switch to nothing */
- switch (NETCONNTYPE_GROUP(t)) {
-#if LWIP_RAW
- case NETCONN_RAW:
- size = DEFAULT_RAW_RECVMBOX_SIZE;
- break;
-#endif /* LWIP_RAW */
-#if LWIP_UDP
- case NETCONN_UDP:
- size = DEFAULT_UDP_RECVMBOX_SIZE;
-#if LWIP_NETBUF_RECVINFO
- init_flags |= NETCONN_FLAG_PKTINFO;
-#endif /* LWIP_NETBUF_RECVINFO */
- break;
-#endif /* LWIP_UDP */
-#if LWIP_TCP
- case NETCONN_TCP:
- size = DEFAULT_TCP_RECVMBOX_SIZE;
- break;
-#endif /* LWIP_TCP */
- default:
- LWIP_ASSERT("netconn_alloc: undefined netconn_type", 0);
- goto free_and_return;
- }
-
- if (sys_mbox_new(&conn->recvmbox, size) != ERR_OK) {
- goto free_and_return;
- }
-#if !LWIP_NETCONN_SEM_PER_THREAD
- if (sys_sem_new(&conn->op_completed, 0) != ERR_OK) {
- sys_mbox_free(&conn->recvmbox);
- goto free_and_return;
- }
-#endif
-
-#if LWIP_TCP
- sys_mbox_set_invalid(&conn->acceptmbox);
-#endif
- conn->state = NETCONN_NONE;
-#if LWIP_SOCKET
- /* initialize socket to -1 since 0 is a valid socket */
- conn->socket = -1;
-#endif /* LWIP_SOCKET */
- conn->callback = callback;
-#if LWIP_TCP
- conn->current_msg = NULL;
-#endif /* LWIP_TCP */
-#if LWIP_SO_SNDTIMEO
- conn->send_timeout = 0;
-#endif /* LWIP_SO_SNDTIMEO */
-#if LWIP_SO_RCVTIMEO
- conn->recv_timeout = 0;
-#endif /* LWIP_SO_RCVTIMEO */
-#if LWIP_SO_RCVBUF
- conn->recv_bufsize = RECV_BUFSIZE_DEFAULT;
- conn->recv_avail = 0;
-#endif /* LWIP_SO_RCVBUF */
-#if LWIP_SO_LINGER
- conn->linger = -1;
-#endif /* LWIP_SO_LINGER */
- conn->flags = init_flags;
- return conn;
-free_and_return:
- memp_free(MEMP_NETCONN, conn);
- return NULL;
-}
-
-/**
- * Delete a netconn and all its resources.
- * The pcb is NOT freed (since we might not be in the right thread context do this).
- *
- * @param conn the netconn to free
- */
-void
-netconn_free(struct netconn *conn)
-{
- LWIP_ASSERT("PCB must be deallocated outside this function", conn->pcb.tcp == NULL);
-
-#if LWIP_NETCONN_FULLDUPLEX
- /* in fullduplex, netconn is drained here */
- netconn_drain(conn);
-#endif /* LWIP_NETCONN_FULLDUPLEX */
-
- LWIP_ASSERT("recvmbox must be deallocated before calling this function",
- !sys_mbox_valid(&conn->recvmbox));
-#if LWIP_TCP
- LWIP_ASSERT("acceptmbox must be deallocated before calling this function",
- !sys_mbox_valid(&conn->acceptmbox));
-#endif /* LWIP_TCP */
-
-#if !LWIP_NETCONN_SEM_PER_THREAD
- sys_sem_free(&conn->op_completed);
- sys_sem_set_invalid(&conn->op_completed);
-#endif
-
- memp_free(MEMP_NETCONN, conn);
-}
-
-/**
- * Delete rcvmbox and acceptmbox of a netconn and free the left-over data in
- * these mboxes
- *
- * @param conn the netconn to free
- * @bytes_drained bytes drained from recvmbox
- * @accepts_drained pending connections drained from acceptmbox
- */
-static void
-netconn_drain(struct netconn *conn)
-{
- void *mem;
-
- /* This runs when mbox and netconn are marked as closed,
- so we don't need to lock against rx packets */
-#if LWIP_NETCONN_FULLDUPLEX
- LWIP_ASSERT("netconn marked closed", conn->flags & NETCONN_FLAG_MBOXINVALID);
-#endif /* LWIP_NETCONN_FULLDUPLEX */
-
- /* Delete and drain the recvmbox. */
- if (sys_mbox_valid(&conn->recvmbox)) {
- while (sys_mbox_tryfetch(&conn->recvmbox, &mem) != SYS_MBOX_EMPTY) {
-#if LWIP_NETCONN_FULLDUPLEX
- if (!lwip_netconn_is_deallocated_msg(mem))
-#endif /* LWIP_NETCONN_FULLDUPLEX */
- {
-#if LWIP_TCP
- if (NETCONNTYPE_GROUP(conn->type) == NETCONN_TCP) {
- err_t err;
- if (!lwip_netconn_is_err_msg(mem, &err)) {
- pbuf_free((struct pbuf *)mem);
- }
- } else
-#endif /* LWIP_TCP */
- {
- netbuf_delete((struct netbuf *)mem);
- }
- }
- }
- sys_mbox_free(&conn->recvmbox);
- sys_mbox_set_invalid(&conn->recvmbox);
- }
-
- /* Delete and drain the acceptmbox. */
-#if LWIP_TCP
- if (sys_mbox_valid(&conn->acceptmbox)) {
- while (sys_mbox_tryfetch(&conn->acceptmbox, &mem) != SYS_MBOX_EMPTY) {
-#if LWIP_NETCONN_FULLDUPLEX
- if (!lwip_netconn_is_deallocated_msg(mem))
-#endif /* LWIP_NETCONN_FULLDUPLEX */
- {
- err_t err;
- if (!lwip_netconn_is_err_msg(mem, &err)) {
- struct netconn *newconn = (struct netconn *)mem;
- /* Only tcp pcbs have an acceptmbox, so no need to check conn->type */
- /* pcb might be set to NULL already by err_tcp() */
- /* drain recvmbox */
- netconn_drain(newconn);
- if (newconn->pcb.tcp != NULL) {
- tcp_abort(newconn->pcb.tcp);
- newconn->pcb.tcp = NULL;
- }
- netconn_free(newconn);
- }
- }
- }
- sys_mbox_free(&conn->acceptmbox);
- sys_mbox_set_invalid(&conn->acceptmbox);
- }
-#endif /* LWIP_TCP */
-}
-
-#if LWIP_NETCONN_FULLDUPLEX
-static void
-netconn_mark_mbox_invalid(struct netconn *conn)
-{
- int i, num_waiting;
- void *msg = LWIP_CONST_CAST(void *, &netconn_deleted);
-
- /* Prevent new calls/threads from reading from the mbox */
- conn->flags |= NETCONN_FLAG_MBOXINVALID;
-
- SYS_ARCH_LOCKED(num_waiting = conn->mbox_threads_waiting);
- for (i = 0; i < num_waiting; i++) {
- if (sys_mbox_valid_val(conn->recvmbox)) {
- sys_mbox_trypost(&conn->recvmbox, msg);
- } else {
- sys_mbox_trypost(&conn->acceptmbox, msg);
- }
- }
-}
-#endif /* LWIP_NETCONN_FULLDUPLEX */
-
-#if LWIP_TCP
-/**
- * Internal helper function to close a TCP netconn: since this sometimes
- * doesn't work at the first attempt, this function is called from multiple
- * places.
- *
- * @param conn the TCP netconn to close
- */
-static err_t
-lwip_netconn_do_close_internal(struct netconn *conn WRITE_DELAYED_PARAM)
-{
- err_t err;
- u8_t shut, shut_rx, shut_tx, shut_close;
- u8_t close_finished = 0;
- struct tcp_pcb *tpcb;
-#if LWIP_SO_LINGER
- u8_t linger_wait_required = 0;
-#endif /* LWIP_SO_LINGER */
-
- LWIP_ASSERT("invalid conn", (conn != NULL));
- LWIP_ASSERT("this is for tcp netconns only", (NETCONNTYPE_GROUP(conn->type) == NETCONN_TCP));
- LWIP_ASSERT("conn must be in state NETCONN_CLOSE", (conn->state == NETCONN_CLOSE));
- LWIP_ASSERT("pcb already closed", (conn->pcb.tcp != NULL));
- LWIP_ASSERT("conn->current_msg != NULL", conn->current_msg != NULL);
-
- tpcb = conn->pcb.tcp;
- shut = conn->current_msg->msg.sd.shut;
- shut_rx = shut & NETCONN_SHUT_RD;
- shut_tx = shut & NETCONN_SHUT_WR;
- /* shutting down both ends is the same as closing
- (also if RD or WR side was shut down before already) */
- if (shut == NETCONN_SHUT_RDWR) {
- shut_close = 1;
- } else if (shut_rx &&
- ((tpcb->state == FIN_WAIT_1) ||
- (tpcb->state == FIN_WAIT_2) ||
- (tpcb->state == CLOSING))) {
- shut_close = 1;
- } else if (shut_tx && ((tpcb->flags & TF_RXCLOSED) != 0)) {
- shut_close = 1;
- } else {
- shut_close = 0;
- }
-
- /* Set back some callback pointers */
- if (shut_close) {
- tcp_arg(tpcb, NULL);
- }
- if (tpcb->state == LISTEN) {
- tcp_accept(tpcb, NULL);
- } else {
- /* some callbacks have to be reset if tcp_close is not successful */
- if (shut_rx) {
- tcp_recv(tpcb, NULL);
- tcp_accept(tpcb, NULL);
- }
- if (shut_tx) {
- tcp_sent(tpcb, NULL);
- }
- if (shut_close) {
- tcp_poll(tpcb, NULL, 0);
- tcp_err(tpcb, NULL);
- }
- }
- /* Try to close the connection */
- if (shut_close) {
-#if LWIP_SO_LINGER
- /* check linger possibilites before calling tcp_close */
- err = ERR_OK;
- /* linger enabled/required at all? (i.e. is there untransmitted data left?) */
- if ((conn->linger >= 0) && (conn->pcb.tcp->unsent || conn->pcb.tcp->unacked)) {
- if ((conn->linger == 0)) {
- /* data left but linger prevents waiting */
- tcp_abort(tpcb);
- tpcb = NULL;
- } else if (conn->linger > 0) {
- /* data left and linger says we should wait */
- if (netconn_is_nonblocking(conn)) {
- /* data left on a nonblocking netconn -> cannot linger */
- err = ERR_WOULDBLOCK;
- } else if ((s32_t)(sys_now() - conn->current_msg->msg.sd.time_started) >=
- (conn->linger * 1000)) {
- /* data left but linger timeout has expired (this happens on further
- calls to this function through poll_tcp */
- tcp_abort(tpcb);
- tpcb = NULL;
- } else {
- /* data left -> need to wait for ACK after successful close */
- linger_wait_required = 1;
- }
- }
- }
- if ((err == ERR_OK) && (tpcb != NULL))
-#endif /* LWIP_SO_LINGER */
- {
- err = tcp_close(tpcb);
- }
- } else {
- err = tcp_shutdown(tpcb, shut_rx, shut_tx);
- }
- if (err == ERR_OK) {
- close_finished = 1;
-#if LWIP_SO_LINGER
- if (linger_wait_required) {
- /* wait for ACK of all unsent/unacked data by just getting called again */
- close_finished = 0;
- err = ERR_INPROGRESS;
- }
-#endif /* LWIP_SO_LINGER */
- } else {
- if (err == ERR_MEM) {
- /* Closing failed because of memory shortage, try again later. Even for
- nonblocking netconns, we have to wait since no standard socket application
- is prepared for close failing because of resource shortage.
- Check the timeout: this is kind of an lwip addition to the standard sockets:
- we wait for some time when failing to allocate a segment for the FIN */
-#if LWIP_SO_SNDTIMEO || LWIP_SO_LINGER
- s32_t close_timeout = LWIP_TCP_CLOSE_TIMEOUT_MS_DEFAULT;
-#if LWIP_SO_SNDTIMEO
- if (conn->send_timeout > 0) {
- close_timeout = conn->send_timeout;
- }
-#endif /* LWIP_SO_SNDTIMEO */
-#if LWIP_SO_LINGER
- if (conn->linger >= 0) {
- /* use linger timeout (seconds) */
- close_timeout = conn->linger * 1000U;
- }
-#endif
- if ((s32_t)(sys_now() - conn->current_msg->msg.sd.time_started) >= close_timeout) {
-#else /* LWIP_SO_SNDTIMEO || LWIP_SO_LINGER */
- if (conn->current_msg->msg.sd.polls_left == 0) {
-#endif /* LWIP_SO_SNDTIMEO || LWIP_SO_LINGER */
- close_finished = 1;
- if (shut_close) {
- /* in this case, we want to RST the connection */
- tcp_abort(tpcb);
- err = ERR_OK;
- }
- }
- } else {
- /* Closing failed for a non-memory error: give up */
- close_finished = 1;
- }
- }
- if (close_finished) {
- /* Closing done (succeeded, non-memory error, nonblocking error or timeout) */
- sys_sem_t *op_completed_sem = LWIP_API_MSG_SEM(conn->current_msg);
- conn->current_msg->err = err;
- conn->current_msg = NULL;
- conn->state = NETCONN_NONE;
- if (err == ERR_OK) {
- if (shut_close) {
- /* Set back some callback pointers as conn is going away */
- conn->pcb.tcp = NULL;
- /* Trigger select() in socket layer. Make sure everybody notices activity
- on the connection, error first! */
- API_EVENT(conn, NETCONN_EVT_ERROR, 0);
- }
- if (shut_rx) {
- API_EVENT(conn, NETCONN_EVT_RCVPLUS, 0);
- }
- if (shut_tx) {
- API_EVENT(conn, NETCONN_EVT_SENDPLUS, 0);
- }
- }
-#if LWIP_TCPIP_CORE_LOCKING
- if (delayed)
-#endif
- {
- /* wake up the application task */
- sys_sem_signal(op_completed_sem);
- }
- return ERR_OK;
- }
- if (!close_finished) {
- /* Closing failed and we want to wait: restore some of the callbacks */
- /* Closing of listen pcb will never fail! */
- LWIP_ASSERT("Closing a listen pcb may not fail!", (tpcb->state != LISTEN));
- if (shut_tx) {
- tcp_sent(tpcb, sent_tcp);
- }
- /* when waiting for close, set up poll interval to 500ms */
- tcp_poll(tpcb, poll_tcp, 1);
- tcp_err(tpcb, err_tcp);
- tcp_arg(tpcb, conn);
- /* don't restore recv callback: we don't want to receive any more data */
- }
- /* If closing didn't succeed, we get called again either
- from poll_tcp or from sent_tcp */
- LWIP_ASSERT("err != ERR_OK", err != ERR_OK);
- return err;
-}
-#endif /* LWIP_TCP */
-
-/**
- * Delete the pcb inside a netconn.
- * Called from netconn_delete.
- *
- * @param m the api_msg pointing to the connection
- */
-void
-lwip_netconn_do_delconn(void *m)
-{
- struct api_msg *msg = (struct api_msg *)m;
-
- enum netconn_state state = msg->conn->state;
- LWIP_ASSERT("netconn state error", /* this only happens for TCP netconns */
- (state == NETCONN_NONE) || (NETCONNTYPE_GROUP(msg->conn->type) == NETCONN_TCP));
-#if LWIP_NETCONN_FULLDUPLEX
- /* In full duplex mode, blocking write/connect is aborted with ERR_CLSD */
- if (state != NETCONN_NONE) {
- if ((state == NETCONN_WRITE) ||
- ((state == NETCONN_CONNECT) && !IN_NONBLOCKING_CONNECT(msg->conn))) {
- /* close requested, abort running write/connect */
- sys_sem_t *op_completed_sem;
- LWIP_ASSERT("msg->conn->current_msg != NULL", msg->conn->current_msg != NULL);
- op_completed_sem = LWIP_API_MSG_SEM(msg->conn->current_msg);
- msg->conn->current_msg->err = ERR_CLSD;
- msg->conn->current_msg = NULL;
- msg->conn->state = NETCONN_NONE;
- sys_sem_signal(op_completed_sem);
- }
- }
-#else /* LWIP_NETCONN_FULLDUPLEX */
- if (((state != NETCONN_NONE) &&
- (state != NETCONN_LISTEN) &&
- (state != NETCONN_CONNECT)) ||
- ((state == NETCONN_CONNECT) && !IN_NONBLOCKING_CONNECT(msg->conn))) {
- /* This means either a blocking write or blocking connect is running
- (nonblocking write returns and sets state to NONE) */
- msg->err = ERR_INPROGRESS;
- } else
-#endif /* LWIP_NETCONN_FULLDUPLEX */
- {
- LWIP_ASSERT("blocking connect in progress",
- (state != NETCONN_CONNECT) || IN_NONBLOCKING_CONNECT(msg->conn));
- msg->err = ERR_OK;
-#if LWIP_NETCONN_FULLDUPLEX
- /* Mark mboxes invalid */
- netconn_mark_mbox_invalid(msg->conn);
-#else /* LWIP_NETCONN_FULLDUPLEX */
- netconn_drain(msg->conn);
-#endif /* LWIP_NETCONN_FULLDUPLEX */
-
- if (msg->conn->pcb.tcp != NULL) {
-
- switch (NETCONNTYPE_GROUP(msg->conn->type)) {
-#if LWIP_RAW
- case NETCONN_RAW:
- raw_remove(msg->conn->pcb.raw);
- break;
-#endif /* LWIP_RAW */
-#if LWIP_UDP
- case NETCONN_UDP:
- msg->conn->pcb.udp->recv_arg = NULL;
- udp_remove(msg->conn->pcb.udp);
- break;
-#endif /* LWIP_UDP */
-#if LWIP_TCP
- case NETCONN_TCP:
- LWIP_ASSERT("already writing or closing", msg->conn->current_msg == NULL);
- msg->conn->state = NETCONN_CLOSE;
- msg->msg.sd.shut = NETCONN_SHUT_RDWR;
- msg->conn->current_msg = msg;
-#if LWIP_TCPIP_CORE_LOCKING
- if (lwip_netconn_do_close_internal(msg->conn, 0) != ERR_OK) {
- LWIP_ASSERT("state!", msg->conn->state == NETCONN_CLOSE);
- UNLOCK_TCPIP_CORE();
- sys_arch_sem_wait(LWIP_API_MSG_SEM(msg), 0);
- LOCK_TCPIP_CORE();
- LWIP_ASSERT("state!", msg->conn->state == NETCONN_NONE);
- }
-#else /* LWIP_TCPIP_CORE_LOCKING */
- lwip_netconn_do_close_internal(msg->conn);
-#endif /* LWIP_TCPIP_CORE_LOCKING */
- /* API_EVENT is called inside lwip_netconn_do_close_internal, before releasing
- the application thread, so we can return at this point! */
- return;
-#endif /* LWIP_TCP */
- default:
- break;
- }
- msg->conn->pcb.tcp = NULL;
- }
- /* tcp netconns don't come here! */
-
- /* @todo: this lets select make the socket readable and writable,
- which is wrong! errfd instead? */
- API_EVENT(msg->conn, NETCONN_EVT_RCVPLUS, 0);
- API_EVENT(msg->conn, NETCONN_EVT_SENDPLUS, 0);
- }
- if (sys_sem_valid(LWIP_API_MSG_SEM(msg))) {
- TCPIP_APIMSG_ACK(msg);
- }
-}
-
-/**
- * Bind a pcb contained in a netconn
- * Called from netconn_bind.
- *
- * @param m the api_msg pointing to the connection and containing
- * the IP address and port to bind to
- */
-void
-lwip_netconn_do_bind(void *m)
-{
- struct api_msg *msg = (struct api_msg *)m;
- err_t err;
-
- if (msg->conn->pcb.tcp != NULL) {
- switch (NETCONNTYPE_GROUP(msg->conn->type)) {
-#if LWIP_RAW
- case NETCONN_RAW:
- err = raw_bind(msg->conn->pcb.raw, API_EXPR_REF(msg->msg.bc.ipaddr));
- break;
-#endif /* LWIP_RAW */
-#if LWIP_UDP
- case NETCONN_UDP:
- err = udp_bind(msg->conn->pcb.udp, API_EXPR_REF(msg->msg.bc.ipaddr), msg->msg.bc.port);
- break;
-#endif /* LWIP_UDP */
-#if LWIP_TCP
- case NETCONN_TCP:
- err = tcp_bind(msg->conn->pcb.tcp, API_EXPR_REF(msg->msg.bc.ipaddr), msg->msg.bc.port);
- break;
-#endif /* LWIP_TCP */
- default:
- err = ERR_VAL;
- break;
- }
- } else {
- err = ERR_VAL;
- }
- msg->err = err;
- TCPIP_APIMSG_ACK(msg);
-}
-/**
- * Bind a pcb contained in a netconn to an interface
- * Called from netconn_bind_if.
- *
- * @param m the api_msg pointing to the connection and containing
- * the IP address and port to bind to
- */
-void
-lwip_netconn_do_bind_if(void *m)
-{
- struct netif *netif;
- struct api_msg *msg = (struct api_msg *)m;
- err_t err;
-
- netif = netif_get_by_index(msg->msg.bc.if_idx);
-
- if ((netif != NULL) && (msg->conn->pcb.tcp != NULL)) {
- err = ERR_OK;
- switch (NETCONNTYPE_GROUP(msg->conn->type)) {
-#if LWIP_RAW
- case NETCONN_RAW:
- raw_bind_netif(msg->conn->pcb.raw, netif);
- break;
-#endif /* LWIP_RAW */
-#if LWIP_UDP
- case NETCONN_UDP:
- udp_bind_netif(msg->conn->pcb.udp, netif);
- break;
-#endif /* LWIP_UDP */
-#if LWIP_TCP
- case NETCONN_TCP:
- tcp_bind_netif(msg->conn->pcb.tcp, netif);
- break;
-#endif /* LWIP_TCP */
- default:
- err = ERR_VAL;
- break;
- }
- } else {
- err = ERR_VAL;
- }
- msg->err = err;
- TCPIP_APIMSG_ACK(msg);
-}
-
-#if LWIP_TCP
-/**
- * TCP callback function if a connection (opened by tcp_connect/lwip_netconn_do_connect) has
- * been established (or reset by the remote host).
- *
- * @see tcp.h (struct tcp_pcb.connected) for parameters and return values
- */
-static err_t
-lwip_netconn_do_connected(void *arg, struct tcp_pcb *pcb, err_t err)
-{
- struct netconn *conn;
- int was_blocking;
- sys_sem_t *op_completed_sem = NULL;
-
- LWIP_UNUSED_ARG(pcb);
-
- conn = (struct netconn *)arg;
-
- if (conn == NULL) {
- return ERR_VAL;
- }
-
- LWIP_ASSERT("conn->state == NETCONN_CONNECT", conn->state == NETCONN_CONNECT);
- LWIP_ASSERT("(conn->current_msg != NULL) || conn->in_non_blocking_connect",
- (conn->current_msg != NULL) || IN_NONBLOCKING_CONNECT(conn));
-
- if (conn->current_msg != NULL) {
- conn->current_msg->err = err;
- op_completed_sem = LWIP_API_MSG_SEM(conn->current_msg);
- }
- if ((NETCONNTYPE_GROUP(conn->type) == NETCONN_TCP) && (err == ERR_OK)) {
- setup_tcp(conn);
- }
- was_blocking = !IN_NONBLOCKING_CONNECT(conn);
- SET_NONBLOCKING_CONNECT(conn, 0);
- LWIP_ASSERT("blocking connect state error",
- (was_blocking && op_completed_sem != NULL) ||
- (!was_blocking && op_completed_sem == NULL));
- conn->current_msg = NULL;
- conn->state = NETCONN_NONE;
- API_EVENT(conn, NETCONN_EVT_SENDPLUS, 0);
-
- if (was_blocking) {
- sys_sem_signal(op_completed_sem);
- }
- return ERR_OK;
-}
-#endif /* LWIP_TCP */
-
-/**
- * Connect a pcb contained inside a netconn
- * Called from netconn_connect.
- *
- * @param m the api_msg pointing to the connection and containing
- * the IP address and port to connect to
- */
-void
-lwip_netconn_do_connect(void *m)
-{
- struct api_msg *msg = (struct api_msg *)m;
- err_t err;
-
- if (msg->conn->pcb.tcp == NULL) {
- /* This may happen when calling netconn_connect() a second time */
- err = ERR_CLSD;
- } else {
- switch (NETCONNTYPE_GROUP(msg->conn->type)) {
-#if LWIP_RAW
- case NETCONN_RAW:
- err = raw_connect(msg->conn->pcb.raw, API_EXPR_REF(msg->msg.bc.ipaddr));
- break;
-#endif /* LWIP_RAW */
-#if LWIP_UDP
- case NETCONN_UDP:
- err = udp_connect(msg->conn->pcb.udp, API_EXPR_REF(msg->msg.bc.ipaddr), msg->msg.bc.port);
- break;
-#endif /* LWIP_UDP */
-#if LWIP_TCP
- case NETCONN_TCP:
- /* Prevent connect while doing any other action. */
- if (msg->conn->state == NETCONN_CONNECT) {
- err = ERR_ALREADY;
- } else if (msg->conn->state != NETCONN_NONE) {
- err = ERR_ISCONN;
- } else {
- setup_tcp(msg->conn);
- err = tcp_connect(msg->conn->pcb.tcp, API_EXPR_REF(msg->msg.bc.ipaddr),
- msg->msg.bc.port, lwip_netconn_do_connected);
- if (err == ERR_OK) {
- u8_t non_blocking = netconn_is_nonblocking(msg->conn);
- msg->conn->state = NETCONN_CONNECT;
- SET_NONBLOCKING_CONNECT(msg->conn, non_blocking);
- if (non_blocking) {
- err = ERR_INPROGRESS;
- } else {
- msg->conn->current_msg = msg;
- /* sys_sem_signal() is called from lwip_netconn_do_connected (or err_tcp()),
- when the connection is established! */
-#if LWIP_TCPIP_CORE_LOCKING
- LWIP_ASSERT("state!", msg->conn->state == NETCONN_CONNECT);
- UNLOCK_TCPIP_CORE();
- sys_arch_sem_wait(LWIP_API_MSG_SEM(msg), 0);
- LOCK_TCPIP_CORE();
- LWIP_ASSERT("state!", msg->conn->state != NETCONN_CONNECT);
-#endif /* LWIP_TCPIP_CORE_LOCKING */
- return;
- }
- }
- }
- break;
-#endif /* LWIP_TCP */
- default:
- LWIP_ERROR("Invalid netconn type", 0, do {
- err = ERR_VAL;
- } while (0));
- break;
- }
- }
- msg->err = err;
- /* For all other protocols, netconn_connect() calls netconn_apimsg(),
- so use TCPIP_APIMSG_ACK() here. */
- TCPIP_APIMSG_ACK(msg);
-}
-
-/**
- * Disconnect a pcb contained inside a netconn
- * Only used for UDP netconns.
- * Called from netconn_disconnect.
- *
- * @param m the api_msg pointing to the connection to disconnect
- */
-void
-lwip_netconn_do_disconnect(void *m)
-{
- struct api_msg *msg = (struct api_msg *)m;
-
-#if LWIP_UDP
- if (NETCONNTYPE_GROUP(msg->conn->type) == NETCONN_UDP) {
- udp_disconnect(msg->conn->pcb.udp);
- msg->err = ERR_OK;
- } else
-#endif /* LWIP_UDP */
- {
- msg->err = ERR_VAL;
- }
- TCPIP_APIMSG_ACK(msg);
-}
-
-#if LWIP_TCP
-/**
- * Set a TCP pcb contained in a netconn into listen mode
- * Called from netconn_listen.
- *
- * @param m the api_msg pointing to the connection
- */
-void
-lwip_netconn_do_listen(void *m)
-{
- struct api_msg *msg = (struct api_msg *)m;
- err_t err;
-
- if (msg->conn->pcb.tcp != NULL) {
- if (NETCONNTYPE_GROUP(msg->conn->type) == NETCONN_TCP) {
- if (msg->conn->state == NETCONN_NONE) {
- struct tcp_pcb *lpcb;
- if (msg->conn->pcb.tcp->state != CLOSED) {
- /* connection is not closed, cannot listen */
- err = ERR_VAL;
- } else {
- u8_t backlog;
-#if TCP_LISTEN_BACKLOG
- backlog = msg->msg.lb.backlog;
-#else /* TCP_LISTEN_BACKLOG */
- backlog = TCP_DEFAULT_LISTEN_BACKLOG;
-#endif /* TCP_LISTEN_BACKLOG */
-#if LWIP_IPV4 && LWIP_IPV6
- /* "Socket API like" dual-stack support: If IP to listen to is IP6_ADDR_ANY,
- * and NETCONN_FLAG_IPV6_V6ONLY is NOT set, use IP_ANY_TYPE to listen
- */
- if (ip_addr_cmp(&msg->conn->pcb.ip->local_ip, IP6_ADDR_ANY) &&
- (netconn_get_ipv6only(msg->conn) == 0)) {
- /* change PCB type to IPADDR_TYPE_ANY */
- IP_SET_TYPE_VAL(msg->conn->pcb.tcp->local_ip, IPADDR_TYPE_ANY);
- IP_SET_TYPE_VAL(msg->conn->pcb.tcp->remote_ip, IPADDR_TYPE_ANY);
- }
-#endif /* LWIP_IPV4 && LWIP_IPV6 */
-
- lpcb = tcp_listen_with_backlog_and_err(msg->conn->pcb.tcp, backlog, &err);
-
- if (lpcb == NULL) {
- /* in this case, the old pcb is still allocated */
- } else {
- /* delete the recvmbox and allocate the acceptmbox */
- if (sys_mbox_valid(&msg->conn->recvmbox)) {
- /** @todo: should we drain the recvmbox here? */
- sys_mbox_free(&msg->conn->recvmbox);
- sys_mbox_set_invalid(&msg->conn->recvmbox);
- }
- err = ERR_OK;
- if (!sys_mbox_valid(&msg->conn->acceptmbox)) {
- err = sys_mbox_new(&msg->conn->acceptmbox, DEFAULT_ACCEPTMBOX_SIZE);
- }
- if (err == ERR_OK) {
- msg->conn->state = NETCONN_LISTEN;
- msg->conn->pcb.tcp = lpcb;
- tcp_arg(msg->conn->pcb.tcp, msg->conn);
- tcp_accept(msg->conn->pcb.tcp, accept_function);
- } else {
- /* since the old pcb is already deallocated, free lpcb now */
- tcp_close(lpcb);
- msg->conn->pcb.tcp = NULL;
- }
- }
- }
- } else if (msg->conn->state == NETCONN_LISTEN) {
- /* already listening, allow updating of the backlog */
- err = ERR_OK;
- tcp_backlog_set(msg->conn->pcb.tcp, msg->msg.lb.backlog);
- } else {
- err = ERR_CONN;
- }
- } else {
- err = ERR_ARG;
- }
- } else {
- err = ERR_CONN;
- }
- msg->err = err;
- TCPIP_APIMSG_ACK(msg);
-}
-#endif /* LWIP_TCP */
-
-/**
- * Send some data on a RAW or UDP pcb contained in a netconn
- * Called from netconn_send
- *
- * @param m the api_msg pointing to the connection
- */
-void
-lwip_netconn_do_send(void *m)
-{
- struct api_msg *msg = (struct api_msg *)m;
-
- err_t err = netconn_err(msg->conn);
- if (err == ERR_OK) {
- if (msg->conn->pcb.tcp != NULL) {
- switch (NETCONNTYPE_GROUP(msg->conn->type)) {
-#if LWIP_RAW
- case NETCONN_RAW:
- if (ip_addr_isany(&msg->msg.b->addr) || IP_IS_ANY_TYPE_VAL(msg->msg.b->addr)) {
- err = raw_send(msg->conn->pcb.raw, msg->msg.b->p);
- } else {
- err = raw_sendto(msg->conn->pcb.raw, msg->msg.b->p, &msg->msg.b->addr);
- }
- break;
-#endif
-#if LWIP_UDP
- case NETCONN_UDP:
-#if LWIP_CHECKSUM_ON_COPY
- if (ip_addr_isany(&msg->msg.b->addr) || IP_IS_ANY_TYPE_VAL(msg->msg.b->addr)) {
- err = udp_send_chksum(msg->conn->pcb.udp, msg->msg.b->p,
- msg->msg.b->flags & NETBUF_FLAG_CHKSUM, msg->msg.b->toport_chksum);
- } else {
- err = udp_sendto_chksum(msg->conn->pcb.udp, msg->msg.b->p,
- &msg->msg.b->addr, msg->msg.b->port,
- msg->msg.b->flags & NETBUF_FLAG_CHKSUM, msg->msg.b->toport_chksum);
- }
-#else /* LWIP_CHECKSUM_ON_COPY */
- if (ip_addr_isany_val(msg->msg.b->addr) || IP_IS_ANY_TYPE_VAL(msg->msg.b->addr)) {
- err = udp_send(msg->conn->pcb.udp, msg->msg.b->p);
- } else {
- err = udp_sendto(msg->conn->pcb.udp, msg->msg.b->p, &msg->msg.b->addr, msg->msg.b->port);
- }
-#endif /* LWIP_CHECKSUM_ON_COPY */
- break;
-#endif /* LWIP_UDP */
- default:
- err = ERR_CONN;
- break;
- }
- } else {
- err = ERR_CONN;
- }
- }
- msg->err = err;
- TCPIP_APIMSG_ACK(msg);
-}
-
-#if LWIP_TCP
-/**
- * Indicate data has been received from a TCP pcb contained in a netconn
- * Called from netconn_recv
- *
- * @param m the api_msg pointing to the connection
- */
-void
-lwip_netconn_do_recv(void *m)
-{
- struct api_msg *msg = (struct api_msg *)m;
-
- msg->err = ERR_OK;
- if (msg->conn->pcb.tcp != NULL) {
- if (NETCONNTYPE_GROUP(msg->conn->type) == NETCONN_TCP) {
- size_t remaining = msg->msg.r.len;
- do {
- u16_t recved = (u16_t)((remaining > 0xffff) ? 0xffff : remaining);
- tcp_recved(msg->conn->pcb.tcp, recved);
- remaining -= recved;
- } while (remaining != 0);
- }
- }
- TCPIP_APIMSG_ACK(msg);
-}
-
-#if TCP_LISTEN_BACKLOG
-/** Indicate that a TCP pcb has been accepted
- * Called from netconn_accept
- *
- * @param m the api_msg pointing to the connection
- */
-void
-lwip_netconn_do_accepted(void *m)
-{
- struct api_msg *msg = (struct api_msg *)m;
-
- msg->err = ERR_OK;
- if (msg->conn->pcb.tcp != NULL) {
- if (NETCONNTYPE_GROUP(msg->conn->type) == NETCONN_TCP) {
- tcp_backlog_accepted(msg->conn->pcb.tcp);
- }
- }
- TCPIP_APIMSG_ACK(msg);
-}
-#endif /* TCP_LISTEN_BACKLOG */
-
-/**
- * See if more data needs to be written from a previous call to netconn_write.
- * Called initially from lwip_netconn_do_write. If the first call can't send all data
- * (because of low memory or empty send-buffer), this function is called again
- * from sent_tcp() or poll_tcp() to send more data. If all data is sent, the
- * blocking application thread (waiting in netconn_write) is released.
- *
- * @param conn netconn (that is currently in state NETCONN_WRITE) to process
- * @return ERR_OK
- * ERR_MEM if LWIP_TCPIP_CORE_LOCKING=1 and sending hasn't yet finished
- */
-static err_t
-lwip_netconn_do_writemore(struct netconn *conn WRITE_DELAYED_PARAM)
-{
- err_t err;
- const void *dataptr;
- u16_t len, available;
- u8_t write_finished = 0;
- size_t diff;
- u8_t dontblock;
- u8_t apiflags;
- u8_t write_more;
-
- LWIP_ASSERT("conn != NULL", conn != NULL);
- LWIP_ASSERT("conn->state == NETCONN_WRITE", (conn->state == NETCONN_WRITE));
- LWIP_ASSERT("conn->current_msg != NULL", conn->current_msg != NULL);
- LWIP_ASSERT("conn->pcb.tcp != NULL", conn->pcb.tcp != NULL);
- LWIP_ASSERT("conn->current_msg->msg.w.offset < conn->current_msg->msg.w.len",
- conn->current_msg->msg.w.offset < conn->current_msg->msg.w.len);
- LWIP_ASSERT("conn->current_msg->msg.w.vector_cnt > 0", conn->current_msg->msg.w.vector_cnt > 0);
-
- apiflags = conn->current_msg->msg.w.apiflags;
- dontblock = netconn_is_nonblocking(conn) || (apiflags & NETCONN_DONTBLOCK);
-
-#if LWIP_SO_SNDTIMEO
- if ((conn->send_timeout != 0) &&
- ((s32_t)(sys_now() - conn->current_msg->msg.w.time_started) >= conn->send_timeout)) {
- write_finished = 1;
- if (conn->current_msg->msg.w.offset == 0) {
- /* nothing has been written */
- err = ERR_WOULDBLOCK;
- } else {
- /* partial write */
- err = ERR_OK;
- }
- } else
-#endif /* LWIP_SO_SNDTIMEO */
- {
- do {
- dataptr = (const u8_t *)conn->current_msg->msg.w.vector->ptr + conn->current_msg->msg.w.vector_off;
- diff = conn->current_msg->msg.w.vector->len - conn->current_msg->msg.w.vector_off;
- if (diff > 0xffffUL) { /* max_u16_t */
- len = 0xffff;
- apiflags |= TCP_WRITE_FLAG_MORE;
- } else {
- len = (u16_t)diff;
- }
- available = tcp_sndbuf(conn->pcb.tcp);
- if (available < len) {
- /* don't try to write more than sendbuf */
- len = available;
- if (dontblock) {
- if (!len) {
- /* set error according to partial write or not */
- err = (conn->current_msg->msg.w.offset == 0) ? ERR_WOULDBLOCK : ERR_OK;
- goto err_mem;
- }
- } else {
- apiflags |= TCP_WRITE_FLAG_MORE;
- }
- }
- LWIP_ASSERT("lwip_netconn_do_writemore: invalid length!",
- ((conn->current_msg->msg.w.vector_off + len) <= conn->current_msg->msg.w.vector->len));
- /* we should loop around for more sending in the following cases:
- 1) We couldn't finish the current vector because of 16-bit size limitations.
- tcp_write() and tcp_sndbuf() both are limited to 16-bit sizes
- 2) We are sending the remainder of the current vector and have more */
- if ((len == 0xffff && diff > 0xffffUL) ||
- (len == (u16_t)diff && conn->current_msg->msg.w.vector_cnt > 1)) {
- write_more = 1;
- apiflags |= TCP_WRITE_FLAG_MORE;
- } else {
- write_more = 0;
- }
- err = tcp_write(conn->pcb.tcp, dataptr, len, apiflags);
- if (err == ERR_OK) {
- conn->current_msg->msg.w.offset += len;
- conn->current_msg->msg.w.vector_off += len;
- /* check if current vector is finished */
- if (conn->current_msg->msg.w.vector_off == conn->current_msg->msg.w.vector->len) {
- conn->current_msg->msg.w.vector_cnt--;
- /* if we have additional vectors, move on to them */
- if (conn->current_msg->msg.w.vector_cnt > 0) {
- conn->current_msg->msg.w.vector++;
- conn->current_msg->msg.w.vector_off = 0;
- }
- }
- }
- } while (write_more && err == ERR_OK);
- /* if OK or memory error, check available space */
- if ((err == ERR_OK) || (err == ERR_MEM)) {
-err_mem:
- if (dontblock && (conn->current_msg->msg.w.offset < conn->current_msg->msg.w.len)) {
- /* non-blocking write did not write everything: mark the pcb non-writable
- and let poll_tcp check writable space to mark the pcb writable again */
- API_EVENT(conn, NETCONN_EVT_SENDMINUS, 0);
- conn->flags |= NETCONN_FLAG_CHECK_WRITESPACE;
- } else if ((tcp_sndbuf(conn->pcb.tcp) <= TCP_SNDLOWAT) ||
- (tcp_sndqueuelen(conn->pcb.tcp) >= TCP_SNDQUEUELOWAT)) {
- /* The queued byte- or pbuf-count exceeds the configured low-water limit,
- let select mark this pcb as non-writable. */
- API_EVENT(conn, NETCONN_EVT_SENDMINUS, 0);
- }
- }
-
- if (err == ERR_OK) {
- err_t out_err;
- if ((conn->current_msg->msg.w.offset == conn->current_msg->msg.w.len) || dontblock) {
- /* return sent length (caller reads length from msg.w.offset) */
- write_finished = 1;
- }
- out_err = tcp_output(conn->pcb.tcp);
- if (out_err == ERR_RTE) {
- /* If tcp_output fails because no route is found,
- don't try writing any more but return the error
- to the application thread. */
- err = out_err;
- write_finished = 1;
- }
- } else if (err == ERR_MEM) {
- /* If ERR_MEM, we wait for sent_tcp or poll_tcp to be called.
- For blocking sockets, we do NOT return to the application
- thread, since ERR_MEM is only a temporary error! Non-blocking
- will remain non-writable until sent_tcp/poll_tcp is called */
-
- /* tcp_write returned ERR_MEM, try tcp_output anyway */
- err_t out_err = tcp_output(conn->pcb.tcp);
- if (out_err == ERR_RTE) {
- /* If tcp_output fails because no route is found,
- don't try writing any more but return the error
- to the application thread. */
- err = out_err;
- write_finished = 1;
- } else if (dontblock) {
- /* non-blocking write is done on ERR_MEM, set error according
- to partial write or not */
- err = (conn->current_msg->msg.w.offset == 0) ? ERR_WOULDBLOCK : ERR_OK;
- write_finished = 1;
- }
- } else {
- /* On errors != ERR_MEM, we don't try writing any more but return
- the error to the application thread. */
- write_finished = 1;
- }
- }
- if (write_finished) {
- /* everything was written: set back connection state
- and back to application task */
- sys_sem_t *op_completed_sem = LWIP_API_MSG_SEM(conn->current_msg);
- conn->current_msg->err = err;
- conn->current_msg = NULL;
- conn->state = NETCONN_NONE;
-#if LWIP_TCPIP_CORE_LOCKING
- if (delayed)
-#endif
- {
- sys_sem_signal(op_completed_sem);
- }
- }
-#if LWIP_TCPIP_CORE_LOCKING
- else {
- return ERR_MEM;
- }
-#endif
- return ERR_OK;
-}
-#endif /* LWIP_TCP */
-
-/**
- * Send some data on a TCP pcb contained in a netconn
- * Called from netconn_write
- *
- * @param m the api_msg pointing to the connection
- */
-void
-lwip_netconn_do_write(void *m)
-{
- struct api_msg *msg = (struct api_msg *)m;
-
- err_t err = netconn_err(msg->conn);
- if (err == ERR_OK) {
- if (NETCONNTYPE_GROUP(msg->conn->type) == NETCONN_TCP) {
-#if LWIP_TCP
- if (msg->conn->state != NETCONN_NONE) {
- /* netconn is connecting, closing or in blocking write */
- err = ERR_INPROGRESS;
- } else if (msg->conn->pcb.tcp != NULL) {
- msg->conn->state = NETCONN_WRITE;
- /* set all the variables used by lwip_netconn_do_writemore */
- LWIP_ASSERT("already writing or closing", msg->conn->current_msg == NULL);
- LWIP_ASSERT("msg->msg.w.len != 0", msg->msg.w.len != 0);
- msg->conn->current_msg = msg;
-#if LWIP_TCPIP_CORE_LOCKING
- if (lwip_netconn_do_writemore(msg->conn, 0) != ERR_OK) {
- LWIP_ASSERT("state!", msg->conn->state == NETCONN_WRITE);
- UNLOCK_TCPIP_CORE();
- sys_arch_sem_wait(LWIP_API_MSG_SEM(msg), 0);
- LOCK_TCPIP_CORE();
- LWIP_ASSERT("state!", msg->conn->state != NETCONN_WRITE);
- }
-#else /* LWIP_TCPIP_CORE_LOCKING */
- lwip_netconn_do_writemore(msg->conn);
-#endif /* LWIP_TCPIP_CORE_LOCKING */
- /* for both cases: if lwip_netconn_do_writemore was called, don't ACK the APIMSG
- since lwip_netconn_do_writemore ACKs it! */
- return;
- } else {
- err = ERR_CONN;
- }
-#else /* LWIP_TCP */
- err = ERR_VAL;
-#endif /* LWIP_TCP */
-#if (LWIP_UDP || LWIP_RAW)
- } else {
- err = ERR_VAL;
-#endif /* (LWIP_UDP || LWIP_RAW) */
- }
- }
- msg->err = err;
- TCPIP_APIMSG_ACK(msg);
-}
-
-/**
- * Return a connection's local or remote address
- * Called from netconn_getaddr
- *
- * @param m the api_msg pointing to the connection
- */
-void
-lwip_netconn_do_getaddr(void *m)
-{
- struct api_msg *msg = (struct api_msg *)m;
-
- if (msg->conn->pcb.ip != NULL) {
- if (msg->msg.ad.local) {
- ip_addr_copy(API_EXPR_DEREF(msg->msg.ad.ipaddr),
- msg->conn->pcb.ip->local_ip);
- } else {
- ip_addr_copy(API_EXPR_DEREF(msg->msg.ad.ipaddr),
- msg->conn->pcb.ip->remote_ip);
- }
-
- msg->err = ERR_OK;
- switch (NETCONNTYPE_GROUP(msg->conn->type)) {
-#if LWIP_RAW
- case NETCONN_RAW:
- if (msg->msg.ad.local) {
- API_EXPR_DEREF(msg->msg.ad.port) = msg->conn->pcb.raw->protocol;
- } else {
- /* return an error as connecting is only a helper for upper layers */
- msg->err = ERR_CONN;
- }
- break;
-#endif /* LWIP_RAW */
-#if LWIP_UDP
- case NETCONN_UDP:
- if (msg->msg.ad.local) {
- API_EXPR_DEREF(msg->msg.ad.port) = msg->conn->pcb.udp->local_port;
- } else {
- if ((msg->conn->pcb.udp->flags & UDP_FLAGS_CONNECTED) == 0) {
- msg->err = ERR_CONN;
- } else {
- API_EXPR_DEREF(msg->msg.ad.port) = msg->conn->pcb.udp->remote_port;
- }
- }
- break;
-#endif /* LWIP_UDP */
-#if LWIP_TCP
- case NETCONN_TCP:
- if ((msg->msg.ad.local == 0) &&
- ((msg->conn->pcb.tcp->state == CLOSED) || (msg->conn->pcb.tcp->state == LISTEN))) {
- /* pcb is not connected and remote name is requested */
- msg->err = ERR_CONN;
- } else {
- API_EXPR_DEREF(msg->msg.ad.port) = (msg->msg.ad.local ? msg->conn->pcb.tcp->local_port : msg->conn->pcb.tcp->remote_port);
- }
- break;
-#endif /* LWIP_TCP */
- default:
- LWIP_ASSERT("invalid netconn_type", 0);
- break;
- }
- } else {
- msg->err = ERR_CONN;
- }
- TCPIP_APIMSG_ACK(msg);
-}
-
-/**
- * Close or half-shutdown a TCP pcb contained in a netconn
- * Called from netconn_close
- * In contrast to closing sockets, the netconn is not deallocated.
- *
- * @param m the api_msg pointing to the connection
- */
-void
-lwip_netconn_do_close(void *m)
-{
- struct api_msg *msg = (struct api_msg *)m;
-
-#if LWIP_TCP
- enum netconn_state state = msg->conn->state;
- /* First check if this is a TCP netconn and if it is in a correct state
- (LISTEN doesn't support half shutdown) */
- if ((msg->conn->pcb.tcp != NULL) &&
- (NETCONNTYPE_GROUP(msg->conn->type) == NETCONN_TCP) &&
- ((msg->msg.sd.shut == NETCONN_SHUT_RDWR) || (state != NETCONN_LISTEN))) {
- /* Check if we are in a connected state */
- if (state == NETCONN_CONNECT) {
- /* TCP connect in progress: cannot shutdown */
- msg->err = ERR_CONN;
- } else if (state == NETCONN_WRITE) {
-#if LWIP_NETCONN_FULLDUPLEX
- if (msg->msg.sd.shut & NETCONN_SHUT_WR) {
- /* close requested, abort running write */
- sys_sem_t *write_completed_sem;
- LWIP_ASSERT("msg->conn->current_msg != NULL", msg->conn->current_msg != NULL);
- write_completed_sem = LWIP_API_MSG_SEM(msg->conn->current_msg);
- msg->conn->current_msg->err = ERR_CLSD;
- msg->conn->current_msg = NULL;
- msg->conn->state = NETCONN_NONE;
- state = NETCONN_NONE;
- sys_sem_signal(write_completed_sem);
- } else {
- LWIP_ASSERT("msg->msg.sd.shut == NETCONN_SHUT_RD", msg->msg.sd.shut == NETCONN_SHUT_RD);
- /* In this case, let the write continue and do not interfere with
- conn->current_msg or conn->state! */
- msg->err = tcp_shutdown(msg->conn->pcb.tcp, 1, 0);
- }
- }
- if (state == NETCONN_NONE) {
-#else /* LWIP_NETCONN_FULLDUPLEX */
- msg->err = ERR_INPROGRESS;
- } else {
-#endif /* LWIP_NETCONN_FULLDUPLEX */
- if (msg->msg.sd.shut & NETCONN_SHUT_RD) {
-#if LWIP_NETCONN_FULLDUPLEX
- /* Mark mboxes invalid */
- netconn_mark_mbox_invalid(msg->conn);
-#else /* LWIP_NETCONN_FULLDUPLEX */
- netconn_drain(msg->conn);
-#endif /* LWIP_NETCONN_FULLDUPLEX */
- }
- LWIP_ASSERT("already writing or closing", msg->conn->current_msg == NULL);
- msg->conn->state = NETCONN_CLOSE;
- msg->conn->current_msg = msg;
-#if LWIP_TCPIP_CORE_LOCKING
- if (lwip_netconn_do_close_internal(msg->conn, 0) != ERR_OK) {
- LWIP_ASSERT("state!", msg->conn->state == NETCONN_CLOSE);
- UNLOCK_TCPIP_CORE();
- sys_arch_sem_wait(LWIP_API_MSG_SEM(msg), 0);
- LOCK_TCPIP_CORE();
- LWIP_ASSERT("state!", msg->conn->state == NETCONN_NONE);
- }
-#else /* LWIP_TCPIP_CORE_LOCKING */
- lwip_netconn_do_close_internal(msg->conn);
-#endif /* LWIP_TCPIP_CORE_LOCKING */
- /* for tcp netconns, lwip_netconn_do_close_internal ACKs the message */
- return;
- }
- } else
-#endif /* LWIP_TCP */
- {
- msg->err = ERR_CONN;
- }
- TCPIP_APIMSG_ACK(msg);
-}
-
-#if LWIP_IGMP || (LWIP_IPV6 && LWIP_IPV6_MLD)
-/**
- * Join multicast groups for UDP netconns.
- * Called from netconn_join_leave_group
- *
- * @param m the api_msg pointing to the connection
- */
-void
-lwip_netconn_do_join_leave_group(void *m)
-{
- struct api_msg *msg = (struct api_msg *)m;
-
- msg->err = ERR_CONN;
- if (msg->conn->pcb.tcp != NULL) {
- if (NETCONNTYPE_GROUP(msg->conn->type) == NETCONN_UDP) {
-#if LWIP_UDP
-#if LWIP_IPV6 && LWIP_IPV6_MLD
- if (NETCONNTYPE_ISIPV6(msg->conn->type)) {
- if (msg->msg.jl.join_or_leave == NETCONN_JOIN) {
- msg->err = mld6_joingroup(ip_2_ip6(API_EXPR_REF(msg->msg.jl.netif_addr)),
- ip_2_ip6(API_EXPR_REF(msg->msg.jl.multiaddr)));
- } else {
- msg->err = mld6_leavegroup(ip_2_ip6(API_EXPR_REF(msg->msg.jl.netif_addr)),
- ip_2_ip6(API_EXPR_REF(msg->msg.jl.multiaddr)));
- }
- } else
-#endif /* LWIP_IPV6 && LWIP_IPV6_MLD */
- {
-#if LWIP_IGMP
- if (msg->msg.jl.join_or_leave == NETCONN_JOIN) {
- msg->err = igmp_joingroup(ip_2_ip4(API_EXPR_REF(msg->msg.jl.netif_addr)),
- ip_2_ip4(API_EXPR_REF(msg->msg.jl.multiaddr)));
- } else {
- msg->err = igmp_leavegroup(ip_2_ip4(API_EXPR_REF(msg->msg.jl.netif_addr)),
- ip_2_ip4(API_EXPR_REF(msg->msg.jl.multiaddr)));
- }
-#endif /* LWIP_IGMP */
- }
-#endif /* LWIP_UDP */
-#if (LWIP_TCP || LWIP_RAW)
- } else {
- msg->err = ERR_VAL;
-#endif /* (LWIP_TCP || LWIP_RAW) */
- }
- }
- TCPIP_APIMSG_ACK(msg);
-}
-/**
- * Join multicast groups for UDP netconns.
- * Called from netconn_join_leave_group_netif
- *
- * @param m the api_msg pointing to the connection
- */
-void
-lwip_netconn_do_join_leave_group_netif(void *m)
-{
- struct api_msg *msg = (struct api_msg *)m;
- struct netif *netif;
-
- netif = netif_get_by_index(msg->msg.jl.if_idx);
- if (netif == NULL) {
- msg->err = ERR_IF;
- goto done;
- }
-
- msg->err = ERR_CONN;
- if (msg->conn->pcb.tcp != NULL) {
- if (NETCONNTYPE_GROUP(msg->conn->type) == NETCONN_UDP) {
-#if LWIP_UDP
-#if LWIP_IPV6 && LWIP_IPV6_MLD
- if (NETCONNTYPE_ISIPV6(msg->conn->type)) {
- if (msg->msg.jl.join_or_leave == NETCONN_JOIN) {
- msg->err = mld6_joingroup_netif(netif,
- ip_2_ip6(API_EXPR_REF(msg->msg.jl.multiaddr)));
- } else {
- msg->err = mld6_leavegroup_netif(netif,
- ip_2_ip6(API_EXPR_REF(msg->msg.jl.multiaddr)));
- }
- } else
-#endif /* LWIP_IPV6 && LWIP_IPV6_MLD */
- {
-#if LWIP_IGMP
- if (msg->msg.jl.join_or_leave == NETCONN_JOIN) {
- msg->err = igmp_joingroup_netif(netif,
- ip_2_ip4(API_EXPR_REF(msg->msg.jl.multiaddr)));
- } else {
- msg->err = igmp_leavegroup_netif(netif,
- ip_2_ip4(API_EXPR_REF(msg->msg.jl.multiaddr)));
- }
-#endif /* LWIP_IGMP */
- }
-#endif /* LWIP_UDP */
-#if (LWIP_TCP || LWIP_RAW)
- } else {
- msg->err = ERR_VAL;
-#endif /* (LWIP_TCP || LWIP_RAW) */
- }
- }
-
-done:
- TCPIP_APIMSG_ACK(msg);
-}
-#endif /* LWIP_IGMP || (LWIP_IPV6 && LWIP_IPV6_MLD) */
-
-#if LWIP_DNS
-/**
- * Callback function that is called when DNS name is resolved
- * (or on timeout). A waiting application thread is waked up by
- * signaling the semaphore.
- */
-static void
-lwip_netconn_do_dns_found(const char *name, const ip_addr_t *ipaddr, void *arg)
-{
- struct dns_api_msg *msg = (struct dns_api_msg *)arg;
-
- /* we trust the internal implementation to be correct :-) */
- LWIP_UNUSED_ARG(name);
-
- if (ipaddr == NULL) {
- /* timeout or memory error */
- API_EXPR_DEREF(msg->err) = ERR_VAL;
- } else {
- /* address was resolved */
- API_EXPR_DEREF(msg->err) = ERR_OK;
- API_EXPR_DEREF(msg->addr) = *ipaddr;
- }
- /* wake up the application task waiting in netconn_gethostbyname */
- sys_sem_signal(API_EXPR_REF_SEM(msg->sem));
-}
-
-/**
- * Execute a DNS query
- * Called from netconn_gethostbyname
- *
- * @param arg the dns_api_msg pointing to the query
- */
-void
-lwip_netconn_do_gethostbyname(void *arg)
-{
- struct dns_api_msg *msg = (struct dns_api_msg *)arg;
- u8_t addrtype =
-#if LWIP_IPV4 && LWIP_IPV6
- msg->dns_addrtype;
-#else
- LWIP_DNS_ADDRTYPE_DEFAULT;
-#endif
-
- API_EXPR_DEREF(msg->err) = dns_gethostbyname_addrtype(msg->name,
- API_EXPR_REF(msg->addr), lwip_netconn_do_dns_found, msg, addrtype);
-#if LWIP_TCPIP_CORE_LOCKING
- /* For core locking, only block if we need to wait for answer/timeout */
- if (API_EXPR_DEREF(msg->err) == ERR_INPROGRESS) {
- UNLOCK_TCPIP_CORE();
- sys_sem_wait(API_EXPR_REF_SEM(msg->sem));
- LOCK_TCPIP_CORE();
- LWIP_ASSERT("do_gethostbyname still in progress!!", API_EXPR_DEREF(msg->err) != ERR_INPROGRESS);
- }
-#else /* LWIP_TCPIP_CORE_LOCKING */
- if (API_EXPR_DEREF(msg->err) != ERR_INPROGRESS) {
- /* on error or immediate success, wake up the application
- * task waiting in netconn_gethostbyname */
- sys_sem_signal(API_EXPR_REF_SEM(msg->sem));
- }
-#endif /* LWIP_TCPIP_CORE_LOCKING */
-}
-#endif /* LWIP_DNS */
-
-#endif /* LWIP_NETCONN */
diff --git a/third-party/lwip-2.1.2/api/err.c b/third-party/lwip-2.1.2/api/err.c
deleted file mode 100644
index dd2b62dab12297fd4bce230051b856581e9acf52..0000000000000000000000000000000000000000
--- a/third-party/lwip-2.1.2/api/err.c
+++ /dev/null
@@ -1,115 +0,0 @@
-/**
- * @file
- * Error Management module
- *
- */
-
-/*
- * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
- * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
- * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
- * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
- * OF SUCH DAMAGE.
- *
- * This file is part of the lwIP TCP/IP stack.
- *
- * Author: Adam Dunkels
- *
- */
-
-#include "lwip/err.h"
-#include "lwip/def.h"
-#include "lwip/sys.h"
-
-#include "lwip/errno.h"
-
-#if !NO_SYS
-/** Table to quickly map an lwIP error (err_t) to a socket error
- * by using -err as an index */
-static const int err_to_errno_table[] = {
- 0, /* ERR_OK 0 No error, everything OK. */
- ENOMEM, /* ERR_MEM -1 Out of memory error. */
- ENOBUFS, /* ERR_BUF -2 Buffer error. */
- EWOULDBLOCK, /* ERR_TIMEOUT -3 Timeout */
- EHOSTUNREACH, /* ERR_RTE -4 Routing problem. */
- EINPROGRESS, /* ERR_INPROGRESS -5 Operation in progress */
- EINVAL, /* ERR_VAL -6 Illegal value. */
- EWOULDBLOCK, /* ERR_WOULDBLOCK -7 Operation would block. */
- EADDRINUSE, /* ERR_USE -8 Address in use. */
- EALREADY, /* ERR_ALREADY -9 Already connecting. */
- EISCONN, /* ERR_ISCONN -10 Conn already established.*/
- ENOTCONN, /* ERR_CONN -11 Not connected. */
- -1, /* ERR_IF -12 Low-level netif error */
- ECONNABORTED, /* ERR_ABRT -13 Connection aborted. */
- ECONNRESET, /* ERR_RST -14 Connection reset. */
- ENOTCONN, /* ERR_CLSD -15 Connection closed. */
- EIO /* ERR_ARG -16 Illegal argument. */
-};
-
-int
-err_to_errno(err_t err)
-{
- if ((err > 0) || (-err >= (err_t)LWIP_ARRAYSIZE(err_to_errno_table))) {
- return EIO;
- }
- return err_to_errno_table[-err];
-}
-#endif /* !NO_SYS */
-
-#ifdef LWIP_DEBUG
-
-static const char *err_strerr[] = {
- "Ok.", /* ERR_OK 0 */
- "Out of memory error.", /* ERR_MEM -1 */
- "Buffer error.", /* ERR_BUF -2 */
- "Timeout.", /* ERR_TIMEOUT -3 */
- "Routing problem.", /* ERR_RTE -4 */
- "Operation in progress.", /* ERR_INPROGRESS -5 */
- "Illegal value.", /* ERR_VAL -6 */
- "Operation would block.", /* ERR_WOULDBLOCK -7 */
- "Address in use.", /* ERR_USE -8 */
- "Already connecting.", /* ERR_ALREADY -9 */
- "Already connected.", /* ERR_ISCONN -10 */
- "Not connected.", /* ERR_CONN -11 */
- "Low-level netif error.", /* ERR_IF -12 */
- "Connection aborted.", /* ERR_ABRT -13 */
- "Connection reset.", /* ERR_RST -14 */
- "Connection closed.", /* ERR_CLSD -15 */
- "Illegal argument." /* ERR_ARG -16 */
-};
-
-/**
- * Convert an lwip internal error to a string representation.
- *
- * @param err an lwip internal err_t
- * @return a string representation for err
- */
-const char *
-lwip_strerr(err_t err)
-{
- if ((err > 0) || (-err >= (err_t)LWIP_ARRAYSIZE(err_strerr))) {
- return "Unknown error.";
- }
- return err_strerr[-err];
-}
-
-#endif /* LWIP_DEBUG */
diff --git a/third-party/lwip-2.1.2/api/if_api.c b/third-party/lwip-2.1.2/api/if_api.c
deleted file mode 100644
index 8e094d090acede243f54a71034273347df3bad6b..0000000000000000000000000000000000000000
--- a/third-party/lwip-2.1.2/api/if_api.c
+++ /dev/null
@@ -1,102 +0,0 @@
-/**
- * @file
- * Interface Identification APIs from:
- * RFC 3493: Basic Socket Interface Extensions for IPv6
- * Section 4: Interface Identification
- *
- * @defgroup if_api Interface Identification API
- * @ingroup socket
- */
-
-/*
- * Copyright (c) 2017 Joel Cunningham, Garmin International, Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
- * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
- * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
- * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
- * OF SUCH DAMAGE.
- *
- * This file is part of the lwIP TCP/IP stack.
- *
- * Author: Joel Cunningham
- *
- */
-#include "lwip/opt.h"
-
-#if LWIP_SOCKET
-
-#include "lwip/errno.h"
-#include "lwip/if_api.h"
-#include "lwip/netifapi.h"
-#include "lwip/priv/sockets_priv.h"
-
-/**
- * @ingroup if_api
- * Maps an interface index to its corresponding name.
- * @param ifindex interface index
- * @param ifname shall point to a buffer of at least {IF_NAMESIZE} bytes
- * @return If ifindex is an interface index, then the function shall return the
- * value supplied in ifname, which points to a buffer now containing the interface name.
- * Otherwise, the function shall return a NULL pointer.
- */
-char *
-lwip_if_indextoname(unsigned int ifindex, char *ifname)
-{
-#if LWIP_NETIF_API
- if (ifindex <= 0xff) {
- err_t err = netifapi_netif_index_to_name((u8_t)ifindex, ifname);
- if (!err && ifname[0] != '\0') {
- return ifname;
- }
- }
-#else /* LWIP_NETIF_API */
- LWIP_UNUSED_ARG(ifindex);
- LWIP_UNUSED_ARG(ifname);
-#endif /* LWIP_NETIF_API */
- set_errno(ENXIO);
- return NULL;
-}
-
-/**
- * @ingroup if_api
- * Returs the interface index corresponding to name ifname.
- * @param ifname Interface name
- * @return The corresponding index if ifname is the name of an interface;
- * otherwise, zero.
- */
-unsigned int
-lwip_if_nametoindex(const char *ifname)
-{
-#if LWIP_NETIF_API
- err_t err;
- u8_t idx;
-
- err = netifapi_netif_name_to_index(ifname, &idx);
- if (!err) {
- return idx;
- }
-#else /* LWIP_NETIF_API */
- LWIP_UNUSED_ARG(ifname);
-#endif /* LWIP_NETIF_API */
- return 0; /* invalid index */
-}
-
-#endif /* LWIP_SOCKET */
diff --git a/third-party/lwip-2.1.2/api/netbuf.c b/third-party/lwip-2.1.2/api/netbuf.c
deleted file mode 100644
index 3b910de10661f2a3143dff9326eaf4528c9a3fb5..0000000000000000000000000000000000000000
--- a/third-party/lwip-2.1.2/api/netbuf.c
+++ /dev/null
@@ -1,250 +0,0 @@
-/**
- * @file
- * Network buffer management
- *
- * @defgroup netbuf Network buffers
- * @ingroup netconn
- * Network buffer descriptor for @ref netconn. Based on @ref pbuf internally
- * to avoid copying data around.\n
- * Buffers must not be shared accross multiple threads, all functions except
- * netbuf_new() and netbuf_delete() are not thread-safe.
- */
-
-/*
- * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
- * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
- * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
- * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
- * OF SUCH DAMAGE.
- *
- * This file is part of the lwIP TCP/IP stack.
- *
- * Author: Adam Dunkels
- *
- */
-
-#include "lwip/opt.h"
-
-#if LWIP_NETCONN /* don't build if not configured for use in lwipopts.h */
-
-#include "lwip/netbuf.h"
-#include "lwip/memp.h"
-
-#include
-
-/**
- * @ingroup netbuf
- * Create (allocate) and initialize a new netbuf.
- * The netbuf doesn't yet contain a packet buffer!
- *
- * @return a pointer to a new netbuf
- * NULL on lack of memory
- */
-struct
-netbuf *netbuf_new(void)
-{
- struct netbuf *buf;
-
- buf = (struct netbuf *)memp_malloc(MEMP_NETBUF);
- if (buf != NULL) {
- memset(buf, 0, sizeof(struct netbuf));
- }
- return buf;
-}
-
-/**
- * @ingroup netbuf
- * Deallocate a netbuf allocated by netbuf_new().
- *
- * @param buf pointer to a netbuf allocated by netbuf_new()
- */
-void
-netbuf_delete(struct netbuf *buf)
-{
- if (buf != NULL) {
- if (buf->p != NULL) {
- pbuf_free(buf->p);
- buf->p = buf->ptr = NULL;
- }
- memp_free(MEMP_NETBUF, buf);
- }
-}
-
-/**
- * @ingroup netbuf
- * Allocate memory for a packet buffer for a given netbuf.
- *
- * @param buf the netbuf for which to allocate a packet buffer
- * @param size the size of the packet buffer to allocate
- * @return pointer to the allocated memory
- * NULL if no memory could be allocated
- */
-void *
-netbuf_alloc(struct netbuf *buf, u16_t size)
-{
- LWIP_ERROR("netbuf_alloc: invalid buf", (buf != NULL), return NULL;);
-
- /* Deallocate any previously allocated memory. */
- if (buf->p != NULL) {
- pbuf_free(buf->p);
- }
- buf->p = pbuf_alloc(PBUF_TRANSPORT, size, PBUF_RAM);
- if (buf->p == NULL) {
- return NULL;
- }
- LWIP_ASSERT("check that first pbuf can hold size",
- (buf->p->len >= size));
- buf->ptr = buf->p;
- return buf->p->payload;
-}
-
-/**
- * @ingroup netbuf
- * Free the packet buffer included in a netbuf
- *
- * @param buf pointer to the netbuf which contains the packet buffer to free
- */
-void
-netbuf_free(struct netbuf *buf)
-{
- LWIP_ERROR("netbuf_free: invalid buf", (buf != NULL), return;);
- if (buf->p != NULL) {
- pbuf_free(buf->p);
- }
- buf->p = buf->ptr = NULL;
-#if LWIP_CHECKSUM_ON_COPY
- buf->flags = 0;
- buf->toport_chksum = 0;
-#endif /* LWIP_CHECKSUM_ON_COPY */
-}
-
-/**
- * @ingroup netbuf
- * Let a netbuf reference existing (non-volatile) data.
- *
- * @param buf netbuf which should reference the data
- * @param dataptr pointer to the data to reference
- * @param size size of the data
- * @return ERR_OK if data is referenced
- * ERR_MEM if data couldn't be referenced due to lack of memory
- */
-err_t
-netbuf_ref(struct netbuf *buf, const void *dataptr, u16_t size)
-{
- LWIP_ERROR("netbuf_ref: invalid buf", (buf != NULL), return ERR_ARG;);
- if (buf->p != NULL) {
- pbuf_free(buf->p);
- }
- buf->p = pbuf_alloc(PBUF_TRANSPORT, 0, PBUF_REF);
- if (buf->p == NULL) {
- buf->ptr = NULL;
- return ERR_MEM;
- }
- ((struct pbuf_rom *)buf->p)->payload = dataptr;
- buf->p->len = buf->p->tot_len = size;
- buf->ptr = buf->p;
- return ERR_OK;
-}
-
-/**
- * @ingroup netbuf
- * Chain one netbuf to another (@see pbuf_chain)
- *
- * @param head the first netbuf
- * @param tail netbuf to chain after head, freed by this function, may not be reference after returning
- */
-void
-netbuf_chain(struct netbuf *head, struct netbuf *tail)
-{
- LWIP_ERROR("netbuf_chain: invalid head", (head != NULL), return;);
- LWIP_ERROR("netbuf_chain: invalid tail", (tail != NULL), return;);
- pbuf_cat(head->p, tail->p);
- head->ptr = head->p;
- memp_free(MEMP_NETBUF, tail);
-}
-
-/**
- * @ingroup netbuf
- * Get the data pointer and length of the data inside a netbuf.
- *
- * @param buf netbuf to get the data from
- * @param dataptr pointer to a void pointer where to store the data pointer
- * @param len pointer to an u16_t where the length of the data is stored
- * @return ERR_OK if the information was retrieved,
- * ERR_BUF on error.
- */
-err_t
-netbuf_data(struct netbuf *buf, void **dataptr, u16_t *len)
-{
- LWIP_ERROR("netbuf_data: invalid buf", (buf != NULL), return ERR_ARG;);
- LWIP_ERROR("netbuf_data: invalid dataptr", (dataptr != NULL), return ERR_ARG;);
- LWIP_ERROR("netbuf_data: invalid len", (len != NULL), return ERR_ARG;);
-
- if (buf->ptr == NULL) {
- return ERR_BUF;
- }
- *dataptr = buf->ptr->payload;
- *len = buf->ptr->len;
- return ERR_OK;
-}
-
-/**
- * @ingroup netbuf
- * Move the current data pointer of a packet buffer contained in a netbuf
- * to the next part.
- * The packet buffer itself is not modified.
- *
- * @param buf the netbuf to modify
- * @return -1 if there is no next part
- * 1 if moved to the next part but now there is no next part
- * 0 if moved to the next part and there are still more parts
- */
-s8_t
-netbuf_next(struct netbuf *buf)
-{
- LWIP_ERROR("netbuf_next: invalid buf", (buf != NULL), return -1;);
- if (buf->ptr->next == NULL) {
- return -1;
- }
- buf->ptr = buf->ptr->next;
- if (buf->ptr->next == NULL) {
- return 1;
- }
- return 0;
-}
-
-/**
- * @ingroup netbuf
- * Move the current data pointer of a packet buffer contained in a netbuf
- * to the beginning of the packet.
- * The packet buffer itself is not modified.
- *
- * @param buf the netbuf to modify
- */
-void
-netbuf_first(struct netbuf *buf)
-{
- LWIP_ERROR("netbuf_first: invalid buf", (buf != NULL), return;);
- buf->ptr = buf->p;
-}
-
-#endif /* LWIP_NETCONN */
diff --git a/third-party/lwip-2.1.2/api/netdb.c b/third-party/lwip-2.1.2/api/netdb.c
deleted file mode 100644
index 87714259d55dc680be4501392bcd3afcabe4bcec..0000000000000000000000000000000000000000
--- a/third-party/lwip-2.1.2/api/netdb.c
+++ /dev/null
@@ -1,414 +0,0 @@
-/**
- * @file
- * API functions for name resolving
- *
- * @defgroup netdbapi NETDB API
- * @ingroup socket
- */
-
-/*
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
- * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
- * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
- * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
- * OF SUCH DAMAGE.
- *
- * This file is part of the lwIP TCP/IP stack.
- *
- * Author: Simon Goldschmidt
- *
- */
-
-#include "lwip/netdb.h"
-
-#if LWIP_DNS && LWIP_SOCKET
-
-#include "lwip/err.h"
-#include "lwip/mem.h"
-#include "lwip/memp.h"
-#include "lwip/ip_addr.h"
-#include "lwip/api.h"
-#include "lwip/dns.h"
-
-#include /* memset */
-#include /* atoi */
-
-/** helper struct for gethostbyname_r to access the char* buffer */
-struct gethostbyname_r_helper {
- ip_addr_t *addr_list[2];
- ip_addr_t addr;
- char *aliases;
-};
-
-/** h_errno is exported in netdb.h for access by applications. */
-#if LWIP_DNS_API_DECLARE_H_ERRNO
-int h_errno;
-#endif /* LWIP_DNS_API_DECLARE_H_ERRNO */
-
-/** define "hostent" variables storage: 0 if we use a static (but unprotected)
- * set of variables for lwip_gethostbyname, 1 if we use a local storage */
-#ifndef LWIP_DNS_API_HOSTENT_STORAGE
-#define LWIP_DNS_API_HOSTENT_STORAGE 0
-#endif
-
-/** define "hostent" variables storage */
-#if LWIP_DNS_API_HOSTENT_STORAGE
-#define HOSTENT_STORAGE
-#else
-#define HOSTENT_STORAGE static
-#endif /* LWIP_DNS_API_STATIC_HOSTENT */
-
-/**
- * Returns an entry containing addresses of address family AF_INET
- * for the host with name name.
- * Due to dns_gethostbyname limitations, only one address is returned.
- *
- * @param name the hostname to resolve
- * @return an entry containing addresses of address family AF_INET
- * for the host with name name
- */
-struct hostent *
-lwip_gethostbyname(const char *name)
-{
- err_t err;
- ip_addr_t addr;
-
- /* buffer variables for lwip_gethostbyname() */
- HOSTENT_STORAGE struct hostent s_hostent;
- HOSTENT_STORAGE char *s_aliases;
- HOSTENT_STORAGE ip_addr_t s_hostent_addr;
- HOSTENT_STORAGE ip_addr_t *s_phostent_addr[2];
- HOSTENT_STORAGE char s_hostname[DNS_MAX_NAME_LENGTH + 1];
-
- /* query host IP address */
- err = netconn_gethostbyname(name, &addr);
- if (err != ERR_OK) {
- LWIP_DEBUGF(DNS_DEBUG, ("lwip_gethostbyname(%s) failed, err=%d\n", name, err));
- h_errno = HOST_NOT_FOUND;
- return NULL;
- }
-
- /* fill hostent */
- s_hostent_addr = addr;
- s_phostent_addr[0] = &s_hostent_addr;
- s_phostent_addr[1] = NULL;
- strncpy(s_hostname, name, DNS_MAX_NAME_LENGTH);
- s_hostname[DNS_MAX_NAME_LENGTH] = 0;
- s_hostent.h_name = s_hostname;
- s_aliases = NULL;
- s_hostent.h_aliases = &s_aliases;
- s_hostent.h_addrtype = AF_INET;
- s_hostent.h_length = sizeof(ip_addr_t);
- s_hostent.h_addr_list = (char **)&s_phostent_addr;
-
-#if DNS_DEBUG
- /* dump hostent */
- LWIP_DEBUGF(DNS_DEBUG, ("hostent.h_name == %s\n", s_hostent.h_name));
- LWIP_DEBUGF(DNS_DEBUG, ("hostent.h_aliases == %p\n", (void *)s_hostent.h_aliases));
- /* h_aliases are always empty */
- LWIP_DEBUGF(DNS_DEBUG, ("hostent.h_addrtype == %d\n", s_hostent.h_addrtype));
- LWIP_DEBUGF(DNS_DEBUG, ("hostent.h_length == %d\n", s_hostent.h_length));
- LWIP_DEBUGF(DNS_DEBUG, ("hostent.h_addr_list == %p\n", (void *)s_hostent.h_addr_list));
- if (s_hostent.h_addr_list != NULL) {
- u8_t idx;
- for (idx = 0; s_hostent.h_addr_list[idx]; idx++) {
- LWIP_DEBUGF(DNS_DEBUG, ("hostent.h_addr_list[%i] == %p\n", idx, s_hostent.h_addr_list[idx]));
- LWIP_DEBUGF(DNS_DEBUG, ("hostent.h_addr_list[%i]-> == %s\n", idx, ipaddr_ntoa((ip_addr_t *)s_hostent.h_addr_list[idx])));
- }
- }
-#endif /* DNS_DEBUG */
-
-#if LWIP_DNS_API_HOSTENT_STORAGE
- /* this function should return the "per-thread" hostent after copy from s_hostent */
- return sys_thread_hostent(&s_hostent);
-#else
- return &s_hostent;
-#endif /* LWIP_DNS_API_HOSTENT_STORAGE */
-}
-
-/**
- * Thread-safe variant of lwip_gethostbyname: instead of using a static
- * buffer, this function takes buffer and errno pointers as arguments
- * and uses these for the result.
- *
- * @param name the hostname to resolve
- * @param ret pre-allocated struct where to store the result
- * @param buf pre-allocated buffer where to store additional data
- * @param buflen the size of buf
- * @param result pointer to a hostent pointer that is set to ret on success
- * and set to zero on error
- * @param h_errnop pointer to an int where to store errors (instead of modifying
- * the global h_errno)
- * @return 0 on success, non-zero on error, additional error information
- * is stored in *h_errnop instead of h_errno to be thread-safe
- */
-int
-lwip_gethostbyname_r(const char *name, struct hostent *ret, char *buf,
- size_t buflen, struct hostent **result, int *h_errnop)
-{
- err_t err;
- struct gethostbyname_r_helper *h;
- char *hostname;
- size_t namelen;
- int lh_errno;
-
- if (h_errnop == NULL) {
- /* ensure h_errnop is never NULL */
- h_errnop = &lh_errno;
- }
-
- if (result == NULL) {
- /* not all arguments given */
- *h_errnop = EINVAL;
- return -1;
- }
- /* first thing to do: set *result to nothing */
- *result = NULL;
- if ((name == NULL) || (ret == NULL) || (buf == NULL)) {
- /* not all arguments given */
- *h_errnop = EINVAL;
- return -1;
- }
-
- namelen = strlen(name);
- if (buflen < (sizeof(struct gethostbyname_r_helper) + LWIP_MEM_ALIGN_BUFFER(namelen + 1))) {
- /* buf can't hold the data needed + a copy of name */
- *h_errnop = ERANGE;
- return -1;
- }
-
- h = (struct gethostbyname_r_helper *)LWIP_MEM_ALIGN(buf);
- hostname = ((char *)h) + sizeof(struct gethostbyname_r_helper);
-
- /* query host IP address */
- err = netconn_gethostbyname(name, &h->addr);
- if (err != ERR_OK) {
- LWIP_DEBUGF(DNS_DEBUG, ("lwip_gethostbyname(%s) failed, err=%d\n", name, err));
- *h_errnop = HOST_NOT_FOUND;
- return -1;
- }
-
- /* copy the hostname into buf */
- MEMCPY(hostname, name, namelen);
- hostname[namelen] = 0;
-
- /* fill hostent */
- h->addr_list[0] = &h->addr;
- h->addr_list[1] = NULL;
- h->aliases = NULL;
- ret->h_name = hostname;
- ret->h_aliases = &h->aliases;
- ret->h_addrtype = AF_INET;
- ret->h_length = sizeof(ip_addr_t);
- ret->h_addr_list = (char **)&h->addr_list;
-
- /* set result != NULL */
- *result = ret;
-
- /* return success */
- return 0;
-}
-
-/**
- * Frees one or more addrinfo structures returned by getaddrinfo(), along with
- * any additional storage associated with those structures. If the ai_next field
- * of the structure is not null, the entire list of structures is freed.
- *
- * @param ai struct addrinfo to free
- */
-void
-lwip_freeaddrinfo(struct addrinfo *ai)
-{
- struct addrinfo *next;
-
- while (ai != NULL) {
- next = ai->ai_next;
- memp_free(MEMP_NETDB, ai);
- ai = next;
- }
-}
-
-/**
- * Translates the name of a service location (for example, a host name) and/or
- * a service name and returns a set of socket addresses and associated
- * information to be used in creating a socket with which to address the
- * specified service.
- * Memory for the result is allocated internally and must be freed by calling
- * lwip_freeaddrinfo()!
- *
- * Due to a limitation in dns_gethostbyname, only the first address of a
- * host is returned.
- * Also, service names are not supported (only port numbers)!
- *
- * @param nodename descriptive name or address string of the host
- * (may be NULL -> local address)
- * @param servname port number as string of NULL
- * @param hints structure containing input values that set socktype and protocol
- * @param res pointer to a pointer where to store the result (set to NULL on failure)
- * @return 0 on success, non-zero on failure
- *
- * @todo: implement AI_V4MAPPED, AI_ADDRCONFIG
- */
-int
-lwip_getaddrinfo(const char *nodename, const char *servname,
- const struct addrinfo *hints, struct addrinfo **res)
-{
- err_t err;
- ip_addr_t addr;
- struct addrinfo *ai;
- struct sockaddr_storage *sa = NULL;
- int port_nr = 0;
- size_t total_size;
- size_t namelen = 0;
- int ai_family;
-
- if (res == NULL) {
- return EAI_FAIL;
- }
- *res = NULL;
- if ((nodename == NULL) && (servname == NULL)) {
- return EAI_NONAME;
- }
-
- if (hints != NULL) {
- ai_family = hints->ai_family;
- if ((ai_family != AF_UNSPEC)
-#if LWIP_IPV4
- && (ai_family != AF_INET)
-#endif /* LWIP_IPV4 */
-#if LWIP_IPV6
- && (ai_family != AF_INET6)
-#endif /* LWIP_IPV6 */
- ) {
- return EAI_FAMILY;
- }
- } else {
- ai_family = AF_UNSPEC;
- }
-
- if (servname != NULL) {
- /* service name specified: convert to port number
- * @todo?: currently, only ASCII integers (port numbers) are supported (AI_NUMERICSERV)! */
- port_nr = atoi(servname);
- if ((port_nr <= 0) || (port_nr > 0xffff)) {
- return EAI_SERVICE;
- }
- }
-
- if (nodename != NULL) {
- /* service location specified, try to resolve */
- if ((hints != NULL) && (hints->ai_flags & AI_NUMERICHOST)) {
- /* no DNS lookup, just parse for an address string */
- if (!ipaddr_aton(nodename, &addr)) {
- return EAI_NONAME;
- }
-#if LWIP_IPV4 && LWIP_IPV6
- if ((IP_IS_V6_VAL(addr) && ai_family == AF_INET) ||
- (IP_IS_V4_VAL(addr) && ai_family == AF_INET6)) {
- return EAI_NONAME;
- }
-#endif /* LWIP_IPV4 && LWIP_IPV6 */
- } else {
-#if LWIP_IPV4 && LWIP_IPV6
- /* AF_UNSPEC: prefer IPv4 */
- u8_t type = NETCONN_DNS_IPV4_IPV6;
- if (ai_family == AF_INET) {
- type = NETCONN_DNS_IPV4;
- } else if (ai_family == AF_INET6) {
- type = NETCONN_DNS_IPV6;
- }
-#endif /* LWIP_IPV4 && LWIP_IPV6 */
- err = netconn_gethostbyname_addrtype(nodename, &addr, type);
- if (err != ERR_OK) {
- return EAI_FAIL;
- }
- }
- } else {
- /* service location specified, use loopback address */
- if ((hints != NULL) && (hints->ai_flags & AI_PASSIVE)) {
- ip_addr_set_any_val(ai_family == AF_INET6, addr);
- } else {
- ip_addr_set_loopback_val(ai_family == AF_INET6, addr);
- }
- }
-
- total_size = sizeof(struct addrinfo) + sizeof(struct sockaddr_storage);
- if (nodename != NULL) {
- namelen = strlen(nodename);
- if (namelen > DNS_MAX_NAME_LENGTH) {
- /* invalid name length */
- return EAI_FAIL;
- }
- LWIP_ASSERT("namelen is too long", total_size + namelen + 1 > total_size);
- total_size += namelen + 1;
- }
- /* If this fails, please report to lwip-devel! :-) */
- LWIP_ASSERT("total_size <= NETDB_ELEM_SIZE: please report this!",
- total_size <= NETDB_ELEM_SIZE);
- ai = (struct addrinfo *)memp_malloc(MEMP_NETDB);
- if (ai == NULL) {
- return EAI_MEMORY;
- }
- memset(ai, 0, total_size);
- /* cast through void* to get rid of alignment warnings */
- sa = (struct sockaddr_storage *)(void *)((u8_t *)ai + sizeof(struct addrinfo));
- if (IP_IS_V6_VAL(addr)) {
-#if LWIP_IPV6
- struct sockaddr_in6 *sa6 = (struct sockaddr_in6 *)sa;
- /* set up sockaddr */
- inet6_addr_from_ip6addr(&sa6->sin6_addr, ip_2_ip6(&addr));
- sa6->sin6_family = AF_INET6;
- sa6->sin6_len = sizeof(struct sockaddr_in6);
- sa6->sin6_port = lwip_htons((u16_t)port_nr);
- sa6->sin6_scope_id = ip6_addr_zone(ip_2_ip6(&addr));
- ai->ai_family = AF_INET6;
-#endif /* LWIP_IPV6 */
- } else {
-#if LWIP_IPV4
- struct sockaddr_in *sa4 = (struct sockaddr_in *)sa;
- /* set up sockaddr */
- inet_addr_from_ip4addr(&sa4->sin_addr, ip_2_ip4(&addr));
- sa4->sin_family = AF_INET;
- sa4->sin_len = sizeof(struct sockaddr_in);
- sa4->sin_port = lwip_htons((u16_t)port_nr);
- ai->ai_family = AF_INET;
-#endif /* LWIP_IPV4 */
- }
-
- /* set up addrinfo */
- if (hints != NULL) {
- /* copy socktype & protocol from hints if specified */
- ai->ai_socktype = hints->ai_socktype;
- ai->ai_protocol = hints->ai_protocol;
- }
- if (nodename != NULL) {
- /* copy nodename to canonname if specified */
- ai->ai_canonname = ((char *)ai + sizeof(struct addrinfo) + sizeof(struct sockaddr_storage));
- MEMCPY(ai->ai_canonname, nodename, namelen);
- ai->ai_canonname[namelen] = 0;
- }
- ai->ai_addrlen = sizeof(struct sockaddr_storage);
- ai->ai_addr = (struct sockaddr *)sa;
-
- *res = ai;
-
- return 0;
-}
-
-#endif /* LWIP_DNS && LWIP_SOCKET */
diff --git a/third-party/lwip-2.1.2/api/netifapi.c b/third-party/lwip-2.1.2/api/netifapi.c
deleted file mode 100644
index 25957cd5c3db742ddb81ab4ea4bd0725d6173036..0000000000000000000000000000000000000000
--- a/third-party/lwip-2.1.2/api/netifapi.c
+++ /dev/null
@@ -1,380 +0,0 @@
-/**
- * @file
- * Network Interface Sequential API module
- *
- * @defgroup netifapi NETIF API
- * @ingroup sequential_api
- * Thread-safe functions to be called from non-TCPIP threads
- *
- * @defgroup netifapi_netif NETIF related
- * @ingroup netifapi
- * To be called from non-TCPIP threads
- */
-
-/*
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
- * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
- * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
- * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
- * OF SUCH DAMAGE.
- *
- * This file is part of the lwIP TCP/IP stack.
- *
- */
-
-#include "lwip/opt.h"
-
-#if LWIP_NETIF_API /* don't build if not configured for use in lwipopts.h */
-
-#include "lwip/etharp.h"
-#include "lwip/netifapi.h"
-#include "lwip/memp.h"
-#include "lwip/priv/tcpip_priv.h"
-
-#include /* strncpy */
-
-#define NETIFAPI_VAR_REF(name) API_VAR_REF(name)
-#define NETIFAPI_VAR_DECLARE(name) API_VAR_DECLARE(struct netifapi_msg, name)
-#define NETIFAPI_VAR_ALLOC(name) API_VAR_ALLOC(struct netifapi_msg, MEMP_NETIFAPI_MSG, name, ERR_MEM)
-#define NETIFAPI_VAR_FREE(name) API_VAR_FREE(MEMP_NETIFAPI_MSG, name)
-
-/**
- * Call netif_add() inside the tcpip_thread context.
- */
-static err_t
-netifapi_do_netif_add(struct tcpip_api_call_data *m)
-{
- /* cast through void* to silence alignment warnings.
- * We know it works because the structs have been instantiated as struct netifapi_msg */
- struct netifapi_msg *msg = (struct netifapi_msg *)(void *)m;
-
- if (!netif_add( msg->netif,
-#if LWIP_IPV4
- API_EXPR_REF(msg->msg.add.ipaddr),
- API_EXPR_REF(msg->msg.add.netmask),
- API_EXPR_REF(msg->msg.add.gw),
-#endif /* LWIP_IPV4 */
- msg->msg.add.state,
- msg->msg.add.init,
- msg->msg.add.input)) {
- return ERR_IF;
- } else {
- return ERR_OK;
- }
-}
-
-#if LWIP_IPV4
-/**
- * Call netif_set_addr() inside the tcpip_thread context.
- */
-static err_t
-netifapi_do_netif_set_addr(struct tcpip_api_call_data *m)
-{
- /* cast through void* to silence alignment warnings.
- * We know it works because the structs have been instantiated as struct netifapi_msg */
- struct netifapi_msg *msg = (struct netifapi_msg *)(void *)m;
-
- netif_set_addr( msg->netif,
- API_EXPR_REF(msg->msg.add.ipaddr),
- API_EXPR_REF(msg->msg.add.netmask),
- API_EXPR_REF(msg->msg.add.gw));
- return ERR_OK;
-}
-#endif /* LWIP_IPV4 */
-
-/**
-* Call netif_name_to_index() inside the tcpip_thread context.
-*/
-static err_t
-netifapi_do_name_to_index(struct tcpip_api_call_data *m)
-{
- /* cast through void* to silence alignment warnings.
- * We know it works because the structs have been instantiated as struct netifapi_msg */
- struct netifapi_msg *msg = (struct netifapi_msg *)(void *)m;
-
- msg->msg.ifs.index = netif_name_to_index(msg->msg.ifs.name);
- return ERR_OK;
-}
-
-/**
-* Call netif_index_to_name() inside the tcpip_thread context.
-*/
-static err_t
-netifapi_do_index_to_name(struct tcpip_api_call_data *m)
-{
- /* cast through void* to silence alignment warnings.
- * We know it works because the structs have been instantiated as struct netifapi_msg */
- struct netifapi_msg *msg = (struct netifapi_msg *)(void *)m;
-
- if (!netif_index_to_name(msg->msg.ifs.index, msg->msg.ifs.name)) {
- /* return failure via empty name */
- msg->msg.ifs.name[0] = '\0';
- }
- return ERR_OK;
-}
-
-/**
- * Call the "errtfunc" (or the "voidfunc" if "errtfunc" is NULL) inside the
- * tcpip_thread context.
- */
-static err_t
-netifapi_do_netif_common(struct tcpip_api_call_data *m)
-{
- /* cast through void* to silence alignment warnings.
- * We know it works because the structs have been instantiated as struct netifapi_msg */
- struct netifapi_msg *msg = (struct netifapi_msg *)(void *)m;
-
- if (msg->msg.common.errtfunc != NULL) {
- return msg->msg.common.errtfunc(msg->netif);
- } else {
- msg->msg.common.voidfunc(msg->netif);
- return ERR_OK;
- }
-}
-
-#if LWIP_ARP && LWIP_IPV4
-/**
- * @ingroup netifapi_arp
- * Add or update an entry in the ARP cache.
- * For an update, ipaddr is used to find the cache entry.
- *
- * @param ipaddr IPv4 address of cache entry
- * @param ethaddr hardware address mapped to ipaddr
- * @param type type of ARP cache entry
- * @return ERR_OK: entry added/updated, else error from err_t
- */
-err_t
-netifapi_arp_add(const ip4_addr_t *ipaddr, struct eth_addr *ethaddr, enum netifapi_arp_entry type)
-{
- err_t err;
-
- /* We only support permanent entries currently */
- LWIP_UNUSED_ARG(type);
-
-#if ETHARP_SUPPORT_STATIC_ENTRIES && LWIP_TCPIP_CORE_LOCKING
- LOCK_TCPIP_CORE();
- err = etharp_add_static_entry(ipaddr, ethaddr);
- UNLOCK_TCPIP_CORE();
-#else
- /* @todo add new vars to struct netifapi_msg and create a 'do' func */
- LWIP_UNUSED_ARG(ipaddr);
- LWIP_UNUSED_ARG(ethaddr);
- err = ERR_VAL;
-#endif /* ETHARP_SUPPORT_STATIC_ENTRIES && LWIP_TCPIP_CORE_LOCKING */
-
- return err;
-}
-
-/**
- * @ingroup netifapi_arp
- * Remove an entry in the ARP cache identified by ipaddr
- *
- * @param ipaddr IPv4 address of cache entry
- * @param type type of ARP cache entry
- * @return ERR_OK: entry removed, else error from err_t
- */
-err_t
-netifapi_arp_remove(const ip4_addr_t *ipaddr, enum netifapi_arp_entry type)
-{
- err_t err;
-
- /* We only support permanent entries currently */
- LWIP_UNUSED_ARG(type);
-
-#if ETHARP_SUPPORT_STATIC_ENTRIES && LWIP_TCPIP_CORE_LOCKING
- LOCK_TCPIP_CORE();
- err = etharp_remove_static_entry(ipaddr);
- UNLOCK_TCPIP_CORE();
-#else
- /* @todo add new vars to struct netifapi_msg and create a 'do' func */
- LWIP_UNUSED_ARG(ipaddr);
- err = ERR_VAL;
-#endif /* ETHARP_SUPPORT_STATIC_ENTRIES && LWIP_TCPIP_CORE_LOCKING */
-
- return err;
-}
-#endif /* LWIP_ARP && LWIP_IPV4 */
-
-/**
- * @ingroup netifapi_netif
- * Call netif_add() in a thread-safe way by running that function inside the
- * tcpip_thread context.
- *
- * @note for params @see netif_add()
- */
-err_t
-netifapi_netif_add(struct netif *netif,
-#if LWIP_IPV4
- const ip4_addr_t *ipaddr, const ip4_addr_t *netmask, const ip4_addr_t *gw,
-#endif /* LWIP_IPV4 */
- void *state, netif_init_fn init, netif_input_fn input)
-{
- err_t err;
- NETIFAPI_VAR_DECLARE(msg);
- NETIFAPI_VAR_ALLOC(msg);
-
-#if LWIP_IPV4
- if (ipaddr == NULL) {
- ipaddr = IP4_ADDR_ANY4;
- }
- if (netmask == NULL) {
- netmask = IP4_ADDR_ANY4;
- }
- if (gw == NULL) {
- gw = IP4_ADDR_ANY4;
- }
-#endif /* LWIP_IPV4 */
-
- NETIFAPI_VAR_REF(msg).netif = netif;
-#if LWIP_IPV4
- NETIFAPI_VAR_REF(msg).msg.add.ipaddr = NETIFAPI_VAR_REF(ipaddr);
- NETIFAPI_VAR_REF(msg).msg.add.netmask = NETIFAPI_VAR_REF(netmask);
- NETIFAPI_VAR_REF(msg).msg.add.gw = NETIFAPI_VAR_REF(gw);
-#endif /* LWIP_IPV4 */
- NETIFAPI_VAR_REF(msg).msg.add.state = state;
- NETIFAPI_VAR_REF(msg).msg.add.init = init;
- NETIFAPI_VAR_REF(msg).msg.add.input = input;
- err = tcpip_api_call(netifapi_do_netif_add, &API_VAR_REF(msg).call);
- NETIFAPI_VAR_FREE(msg);
- return err;
-}
-
-#if LWIP_IPV4
-/**
- * @ingroup netifapi_netif
- * Call netif_set_addr() in a thread-safe way by running that function inside the
- * tcpip_thread context.
- *
- * @note for params @see netif_set_addr()
- */
-err_t
-netifapi_netif_set_addr(struct netif *netif,
- const ip4_addr_t *ipaddr,
- const ip4_addr_t *netmask,
- const ip4_addr_t *gw)
-{
- err_t err;
- NETIFAPI_VAR_DECLARE(msg);
- NETIFAPI_VAR_ALLOC(msg);
-
- if (ipaddr == NULL) {
- ipaddr = IP4_ADDR_ANY4;
- }
- if (netmask == NULL) {
- netmask = IP4_ADDR_ANY4;
- }
- if (gw == NULL) {
- gw = IP4_ADDR_ANY4;
- }
-
- NETIFAPI_VAR_REF(msg).netif = netif;
- NETIFAPI_VAR_REF(msg).msg.add.ipaddr = NETIFAPI_VAR_REF(ipaddr);
- NETIFAPI_VAR_REF(msg).msg.add.netmask = NETIFAPI_VAR_REF(netmask);
- NETIFAPI_VAR_REF(msg).msg.add.gw = NETIFAPI_VAR_REF(gw);
- err = tcpip_api_call(netifapi_do_netif_set_addr, &API_VAR_REF(msg).call);
- NETIFAPI_VAR_FREE(msg);
- return err;
-}
-#endif /* LWIP_IPV4 */
-
-/**
- * call the "errtfunc" (or the "voidfunc" if "errtfunc" is NULL) in a thread-safe
- * way by running that function inside the tcpip_thread context.
- *
- * @note use only for functions where there is only "netif" parameter.
- */
-err_t
-netifapi_netif_common(struct netif *netif, netifapi_void_fn voidfunc,
- netifapi_errt_fn errtfunc)
-{
- err_t err;
- NETIFAPI_VAR_DECLARE(msg);
- NETIFAPI_VAR_ALLOC(msg);
-
- NETIFAPI_VAR_REF(msg).netif = netif;
- NETIFAPI_VAR_REF(msg).msg.common.voidfunc = voidfunc;
- NETIFAPI_VAR_REF(msg).msg.common.errtfunc = errtfunc;
- err = tcpip_api_call(netifapi_do_netif_common, &API_VAR_REF(msg).call);
- NETIFAPI_VAR_FREE(msg);
- return err;
-}
-
-/**
-* @ingroup netifapi_netif
-* Call netif_name_to_index() in a thread-safe way by running that function inside the
-* tcpip_thread context.
-*
-* @param name the interface name of the netif
-* @param idx output index of the found netif
-*/
-err_t
-netifapi_netif_name_to_index(const char *name, u8_t *idx)
-{
- err_t err;
- NETIFAPI_VAR_DECLARE(msg);
- NETIFAPI_VAR_ALLOC(msg);
-
- *idx = 0;
-
-#if LWIP_MPU_COMPATIBLE
- strncpy(NETIFAPI_VAR_REF(msg).msg.ifs.name, name, NETIF_NAMESIZE - 1);
- NETIFAPI_VAR_REF(msg).msg.ifs.name[NETIF_NAMESIZE - 1] = '\0';
-#else
- NETIFAPI_VAR_REF(msg).msg.ifs.name = LWIP_CONST_CAST(char *, name);
-#endif /* LWIP_MPU_COMPATIBLE */
- err = tcpip_api_call(netifapi_do_name_to_index, &API_VAR_REF(msg).call);
- if (!err) {
- *idx = NETIFAPI_VAR_REF(msg).msg.ifs.index;
- }
- NETIFAPI_VAR_FREE(msg);
- return err;
-}
-
-/**
-* @ingroup netifapi_netif
-* Call netif_index_to_name() in a thread-safe way by running that function inside the
-* tcpip_thread context.
-*
-* @param idx the interface index of the netif
-* @param name output name of the found netif, empty '\0' string if netif not found.
-* name should be of at least NETIF_NAMESIZE bytes
-*/
-err_t
-netifapi_netif_index_to_name(u8_t idx, char *name)
-{
- err_t err;
- NETIFAPI_VAR_DECLARE(msg);
- NETIFAPI_VAR_ALLOC(msg);
-
- NETIFAPI_VAR_REF(msg).msg.ifs.index = idx;
-#if !LWIP_MPU_COMPATIBLE
- NETIFAPI_VAR_REF(msg).msg.ifs.name = name;
-#endif /* LWIP_MPU_COMPATIBLE */
- err = tcpip_api_call(netifapi_do_index_to_name, &API_VAR_REF(msg).call);
-#if LWIP_MPU_COMPATIBLE
- if (!err) {
- strncpy(name, NETIFAPI_VAR_REF(msg).msg.ifs.name, NETIF_NAMESIZE - 1);
- name[NETIF_NAMESIZE - 1] = '\0';
- }
-#endif /* LWIP_MPU_COMPATIBLE */
- NETIFAPI_VAR_FREE(msg);
- return err;
-}
-
-#endif /* LWIP_NETIF_API */
diff --git a/third-party/lwip-2.1.2/api/sockets.c b/third-party/lwip-2.1.2/api/sockets.c
deleted file mode 100644
index cb7df914fa91b561e9df16a5edb94080d1c700af..0000000000000000000000000000000000000000
--- a/third-party/lwip-2.1.2/api/sockets.c
+++ /dev/null
@@ -1,4160 +0,0 @@
-/**
- * @file
- * Sockets BSD-Like API module
- */
-
-/*
- * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
- * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
- * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
- * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
- * OF SUCH DAMAGE.
- *
- * This file is part of the lwIP TCP/IP stack.
- *
- * Author: Adam Dunkels
- *
- * Improved by Marc Boucher and David Haas
- *
- */
-
-#include "lwip/opt.h"
-
-#if LWIP_SOCKET /* don't build if not configured for use in lwipopts.h */
-
-#include "lwip/sockets.h"
-#include "lwip/priv/sockets_priv.h"
-#include "lwip/api.h"
-#include "lwip/igmp.h"
-#include "lwip/inet.h"
-#include "lwip/tcp.h"
-#include "lwip/raw.h"
-#include "lwip/udp.h"
-#include "lwip/memp.h"
-#include "lwip/pbuf.h"
-#include "lwip/netif.h"
-#include "lwip/priv/tcpip_priv.h"
-#include "lwip/mld6.h"
-#if LWIP_CHECKSUM_ON_COPY
-#include "lwip/inet_chksum.h"
-#endif
-
-#if LWIP_COMPAT_SOCKETS == 2 && LWIP_POSIX_SOCKETS_IO_NAMES
-#include
-#endif
-
-#include
-
-#ifdef LWIP_HOOK_FILENAME
-#include LWIP_HOOK_FILENAME
-#endif
-
-/* If the netconn API is not required publicly, then we include the necessary
- files here to get the implementation */
-#if !LWIP_NETCONN
-#undef LWIP_NETCONN
-#define LWIP_NETCONN 1
-#include "api_msg.c"
-#include "api_lib.c"
-#include "netbuf.c"
-#undef LWIP_NETCONN
-#define LWIP_NETCONN 0
-#endif
-
-#define API_SELECT_CB_VAR_REF(name) API_VAR_REF(name)
-#define API_SELECT_CB_VAR_DECLARE(name) API_VAR_DECLARE(struct lwip_select_cb, name)
-#define API_SELECT_CB_VAR_ALLOC(name, retblock) API_VAR_ALLOC_EXT(struct lwip_select_cb, MEMP_SELECT_CB, name, retblock)
-#define API_SELECT_CB_VAR_FREE(name) API_VAR_FREE(MEMP_SELECT_CB, name)
-
-#if LWIP_IPV4
-#define IP4ADDR_PORT_TO_SOCKADDR(sin, ipaddr, port) do { \
- (sin)->sin_len = sizeof(struct sockaddr_in); \
- (sin)->sin_family = AF_INET; \
- (sin)->sin_port = lwip_htons((port)); \
- inet_addr_from_ip4addr(&(sin)->sin_addr, ipaddr); \
- memset((sin)->sin_zero, 0, SIN_ZERO_LEN); }while(0)
-#define SOCKADDR4_TO_IP4ADDR_PORT(sin, ipaddr, port) do { \
- inet_addr_to_ip4addr(ip_2_ip4(ipaddr), &((sin)->sin_addr)); \
- (port) = lwip_ntohs((sin)->sin_port); }while(0)
-#endif /* LWIP_IPV4 */
-
-#if LWIP_IPV6
-#define IP6ADDR_PORT_TO_SOCKADDR(sin6, ipaddr, port) do { \
- (sin6)->sin6_len = sizeof(struct sockaddr_in6); \
- (sin6)->sin6_family = AF_INET6; \
- (sin6)->sin6_port = lwip_htons((port)); \
- (sin6)->sin6_flowinfo = 0; \
- inet6_addr_from_ip6addr(&(sin6)->sin6_addr, ipaddr); \
- (sin6)->sin6_scope_id = ip6_addr_zone(ipaddr); }while(0)
-#define SOCKADDR6_TO_IP6ADDR_PORT(sin6, ipaddr, port) do { \
- inet6_addr_to_ip6addr(ip_2_ip6(ipaddr), &((sin6)->sin6_addr)); \
- if (ip6_addr_has_scope(ip_2_ip6(ipaddr), IP6_UNKNOWN)) { \
- ip6_addr_set_zone(ip_2_ip6(ipaddr), (u8_t)((sin6)->sin6_scope_id)); \
- } \
- (port) = lwip_ntohs((sin6)->sin6_port); }while(0)
-#endif /* LWIP_IPV6 */
-
-#if LWIP_IPV4 && LWIP_IPV6
-static void sockaddr_to_ipaddr_port(const struct sockaddr *sockaddr, ip_addr_t *ipaddr, u16_t *port);
-
-#define IS_SOCK_ADDR_LEN_VALID(namelen) (((namelen) == sizeof(struct sockaddr_in)) || \
- ((namelen) == sizeof(struct sockaddr_in6)))
-#define IS_SOCK_ADDR_TYPE_VALID(name) (((name)->sa_family == AF_INET) || \
- ((name)->sa_family == AF_INET6))
-#define SOCK_ADDR_TYPE_MATCH(name, sock) \
- ((((name)->sa_family == AF_INET) && !(NETCONNTYPE_ISIPV6((sock)->conn->type))) || \
- (((name)->sa_family == AF_INET6) && (NETCONNTYPE_ISIPV6((sock)->conn->type))))
-#define IPADDR_PORT_TO_SOCKADDR(sockaddr, ipaddr, port) do { \
- if (IP_IS_ANY_TYPE_VAL(*ipaddr) || IP_IS_V6_VAL(*ipaddr)) { \
- IP6ADDR_PORT_TO_SOCKADDR((struct sockaddr_in6*)(void*)(sockaddr), ip_2_ip6(ipaddr), port); \
- } else { \
- IP4ADDR_PORT_TO_SOCKADDR((struct sockaddr_in*)(void*)(sockaddr), ip_2_ip4(ipaddr), port); \
- } } while(0)
-#define SOCKADDR_TO_IPADDR_PORT(sockaddr, ipaddr, port) sockaddr_to_ipaddr_port(sockaddr, ipaddr, &(port))
-#define DOMAIN_TO_NETCONN_TYPE(domain, type) (((domain) == AF_INET) ? \
- (type) : (enum netconn_type)((type) | NETCONN_TYPE_IPV6))
-#elif LWIP_IPV6 /* LWIP_IPV4 && LWIP_IPV6 */
-#define IS_SOCK_ADDR_LEN_VALID(namelen) ((namelen) == sizeof(struct sockaddr_in6))
-#define IS_SOCK_ADDR_TYPE_VALID(name) ((name)->sa_family == AF_INET6)
-#define SOCK_ADDR_TYPE_MATCH(name, sock) 1
-#define IPADDR_PORT_TO_SOCKADDR(sockaddr, ipaddr, port) \
- IP6ADDR_PORT_TO_SOCKADDR((struct sockaddr_in6*)(void*)(sockaddr), ip_2_ip6(ipaddr), port)
-#define SOCKADDR_TO_IPADDR_PORT(sockaddr, ipaddr, port) \
- SOCKADDR6_TO_IP6ADDR_PORT((const struct sockaddr_in6*)(const void*)(sockaddr), ipaddr, port)
-#define DOMAIN_TO_NETCONN_TYPE(domain, netconn_type) (netconn_type)
-#else /*-> LWIP_IPV4: LWIP_IPV4 && LWIP_IPV6 */
-#define IS_SOCK_ADDR_LEN_VALID(namelen) ((namelen) == sizeof(struct sockaddr_in))
-#define IS_SOCK_ADDR_TYPE_VALID(name) ((name)->sa_family == AF_INET)
-#define SOCK_ADDR_TYPE_MATCH(name, sock) 1
-#define IPADDR_PORT_TO_SOCKADDR(sockaddr, ipaddr, port) \
- IP4ADDR_PORT_TO_SOCKADDR((struct sockaddr_in*)(void*)(sockaddr), ip_2_ip4(ipaddr), port)
-#define SOCKADDR_TO_IPADDR_PORT(sockaddr, ipaddr, port) \
- SOCKADDR4_TO_IP4ADDR_PORT((const struct sockaddr_in*)(const void*)(sockaddr), ipaddr, port)
-#define DOMAIN_TO_NETCONN_TYPE(domain, netconn_type) (netconn_type)
-#endif /* LWIP_IPV6 */
-
-#define IS_SOCK_ADDR_TYPE_VALID_OR_UNSPEC(name) (((name)->sa_family == AF_UNSPEC) || \
- IS_SOCK_ADDR_TYPE_VALID(name))
-#define SOCK_ADDR_TYPE_MATCH_OR_UNSPEC(name, sock) (((name)->sa_family == AF_UNSPEC) || \
- SOCK_ADDR_TYPE_MATCH(name, sock))
-#define IS_SOCK_ADDR_ALIGNED(name) ((((mem_ptr_t)(name)) % 4) == 0)
-
-
-#define LWIP_SOCKOPT_CHECK_OPTLEN(sock, optlen, opttype) do { if ((optlen) < sizeof(opttype)) { done_socket(sock); return EINVAL; }}while(0)
-#define LWIP_SOCKOPT_CHECK_OPTLEN_CONN(sock, optlen, opttype) do { \
- LWIP_SOCKOPT_CHECK_OPTLEN(sock, optlen, opttype); \
- if ((sock)->conn == NULL) { done_socket(sock); return EINVAL; } }while(0)
-#define LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB(sock, optlen, opttype) do { \
- LWIP_SOCKOPT_CHECK_OPTLEN(sock, optlen, opttype); \
- if (((sock)->conn == NULL) || ((sock)->conn->pcb.tcp == NULL)) { done_socket(sock); return EINVAL; } }while(0)
-#define LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB_TYPE(sock, optlen, opttype, netconntype) do { \
- LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB(sock, optlen, opttype); \
- if (NETCONNTYPE_GROUP(netconn_type((sock)->conn)) != netconntype) { done_socket(sock); return ENOPROTOOPT; } }while(0)
-
-
-#define LWIP_SETGETSOCKOPT_DATA_VAR_REF(name) API_VAR_REF(name)
-#define LWIP_SETGETSOCKOPT_DATA_VAR_DECLARE(name) API_VAR_DECLARE(struct lwip_setgetsockopt_data, name)
-#define LWIP_SETGETSOCKOPT_DATA_VAR_FREE(name) API_VAR_FREE(MEMP_SOCKET_SETGETSOCKOPT_DATA, name)
-#if LWIP_MPU_COMPATIBLE
-#define LWIP_SETGETSOCKOPT_DATA_VAR_ALLOC(name, sock) do { \
- name = (struct lwip_setgetsockopt_data *)memp_malloc(MEMP_SOCKET_SETGETSOCKOPT_DATA); \
- if (name == NULL) { \
- sock_set_errno(sock, ENOMEM); \
- done_socket(sock); \
- return -1; \
- } }while(0)
-#else /* LWIP_MPU_COMPATIBLE */
-#define LWIP_SETGETSOCKOPT_DATA_VAR_ALLOC(name, sock)
-#endif /* LWIP_MPU_COMPATIBLE */
-
-#if LWIP_SO_SNDRCVTIMEO_NONSTANDARD
-#define LWIP_SO_SNDRCVTIMEO_OPTTYPE int
-#define LWIP_SO_SNDRCVTIMEO_SET(optval, val) (*(int *)(optval) = (val))
-#define LWIP_SO_SNDRCVTIMEO_GET_MS(optval) ((long)*(const int*)(optval))
-#else
-#define LWIP_SO_SNDRCVTIMEO_OPTTYPE struct timeval
-#define LWIP_SO_SNDRCVTIMEO_SET(optval, val) do { \
- u32_t loc = (val); \
- ((struct timeval *)(optval))->tv_sec = (long)((loc) / 1000U); \
- ((struct timeval *)(optval))->tv_usec = (long)(((loc) % 1000U) * 1000U); }while(0)
-#define LWIP_SO_SNDRCVTIMEO_GET_MS(optval) ((((const struct timeval *)(optval))->tv_sec * 1000) + (((const struct timeval *)(optval))->tv_usec / 1000))
-#endif
-
-
-/** A struct sockaddr replacement that has the same alignment as sockaddr_in/
- * sockaddr_in6 if instantiated.
- */
-union sockaddr_aligned {
- struct sockaddr sa;
-#if LWIP_IPV6
- struct sockaddr_in6 sin6;
-#endif /* LWIP_IPV6 */
-#if LWIP_IPV4
- struct sockaddr_in sin;
-#endif /* LWIP_IPV4 */
-};
-
-/* Define the number of IPv4 multicast memberships, default is one per socket */
-#ifndef LWIP_SOCKET_MAX_MEMBERSHIPS
-#define LWIP_SOCKET_MAX_MEMBERSHIPS NUM_SOCKETS
-#endif
-
-#if LWIP_IGMP
-/* This is to keep track of IP_ADD_MEMBERSHIP calls to drop the membership when
- a socket is closed */
-struct lwip_socket_multicast_pair {
- /** the socket */
- struct lwip_sock *sock;
- /** the interface address */
- ip4_addr_t if_addr;
- /** the group address */
- ip4_addr_t multi_addr;
-};
-
-static struct lwip_socket_multicast_pair socket_ipv4_multicast_memberships[LWIP_SOCKET_MAX_MEMBERSHIPS];
-
-static int lwip_socket_register_membership(int s, const ip4_addr_t *if_addr, const ip4_addr_t *multi_addr);
-static void lwip_socket_unregister_membership(int s, const ip4_addr_t *if_addr, const ip4_addr_t *multi_addr);
-static void lwip_socket_drop_registered_memberships(int s);
-#endif /* LWIP_IGMP */
-
-#if LWIP_IPV6_MLD
-/* This is to keep track of IP_JOIN_GROUP calls to drop the membership when
- a socket is closed */
-struct lwip_socket_multicast_mld6_pair {
- /** the socket */
- struct lwip_sock *sock;
- /** the interface index */
- u8_t if_idx;
- /** the group address */
- ip6_addr_t multi_addr;
-};
-
-static struct lwip_socket_multicast_mld6_pair socket_ipv6_multicast_memberships[LWIP_SOCKET_MAX_MEMBERSHIPS];
-
-static int lwip_socket_register_mld6_membership(int s, unsigned int if_idx, const ip6_addr_t *multi_addr);
-static void lwip_socket_unregister_mld6_membership(int s, unsigned int if_idx, const ip6_addr_t *multi_addr);
-static void lwip_socket_drop_registered_mld6_memberships(int s);
-#endif /* LWIP_IPV6_MLD */
-
-/** The global array of available sockets */
-static struct lwip_sock sockets[NUM_SOCKETS];
-
-#if LWIP_SOCKET_SELECT || LWIP_SOCKET_POLL
-#if LWIP_TCPIP_CORE_LOCKING
-/* protect the select_cb_list using core lock */
-#define LWIP_SOCKET_SELECT_DECL_PROTECT(lev)
-#define LWIP_SOCKET_SELECT_PROTECT(lev) LOCK_TCPIP_CORE()
-#define LWIP_SOCKET_SELECT_UNPROTECT(lev) UNLOCK_TCPIP_CORE()
-#else /* LWIP_TCPIP_CORE_LOCKING */
-/* protect the select_cb_list using SYS_LIGHTWEIGHT_PROT */
-#define LWIP_SOCKET_SELECT_DECL_PROTECT(lev) SYS_ARCH_DECL_PROTECT(lev)
-#define LWIP_SOCKET_SELECT_PROTECT(lev) SYS_ARCH_PROTECT(lev)
-#define LWIP_SOCKET_SELECT_UNPROTECT(lev) SYS_ARCH_UNPROTECT(lev)
-/** This counter is increased from lwip_select when the list is changed
- and checked in select_check_waiters to see if it has changed. */
-static volatile int select_cb_ctr;
-#endif /* LWIP_TCPIP_CORE_LOCKING */
-/** The global list of tasks waiting for select */
-static struct lwip_select_cb *select_cb_list;
-#endif /* LWIP_SOCKET_SELECT || LWIP_SOCKET_POLL */
-
-#define sock_set_errno(sk, e) do { \
- const int sockerr = (e); \
- set_errno(sockerr); \
-} while (0)
-
-/* Forward declaration of some functions */
-#if LWIP_SOCKET_SELECT || LWIP_SOCKET_POLL
-static void event_callback(struct netconn *conn, enum netconn_evt evt, u16_t len);
-#define DEFAULT_SOCKET_EVENTCB event_callback
-static void select_check_waiters(int s, int has_recvevent, int has_sendevent, int has_errevent);
-#else
-#define DEFAULT_SOCKET_EVENTCB NULL
-#endif
-#if !LWIP_TCPIP_CORE_LOCKING
-static void lwip_getsockopt_callback(void *arg);
-static void lwip_setsockopt_callback(void *arg);
-#endif
-static int lwip_getsockopt_impl(int s, int level, int optname, void *optval, socklen_t *optlen);
-static int lwip_setsockopt_impl(int s, int level, int optname, const void *optval, socklen_t optlen);
-static int free_socket_locked(struct lwip_sock *sock, int is_tcp, struct netconn **conn,
- union lwip_sock_lastdata *lastdata);
-static void free_socket_free_elements(int is_tcp, struct netconn *conn, union lwip_sock_lastdata *lastdata);
-
-#if LWIP_IPV4 && LWIP_IPV6
-static void
-sockaddr_to_ipaddr_port(const struct sockaddr *sockaddr, ip_addr_t *ipaddr, u16_t *port)
-{
- if ((sockaddr->sa_family) == AF_INET6) {
- SOCKADDR6_TO_IP6ADDR_PORT((const struct sockaddr_in6 *)(const void *)(sockaddr), ipaddr, *port);
- ipaddr->type = IPADDR_TYPE_V6;
- } else {
- SOCKADDR4_TO_IP4ADDR_PORT((const struct sockaddr_in *)(const void *)(sockaddr), ipaddr, *port);
- ipaddr->type = IPADDR_TYPE_V4;
- }
-}
-#endif /* LWIP_IPV4 && LWIP_IPV6 */
-
-/** LWIP_NETCONN_SEM_PER_THREAD==1: initialize thread-local semaphore */
-void
-lwip_socket_thread_init(void)
-{
- netconn_thread_init();
-}
-
-/** LWIP_NETCONN_SEM_PER_THREAD==1: destroy thread-local semaphore */
-void
-lwip_socket_thread_cleanup(void)
-{
- netconn_thread_cleanup();
-}
-
-#if LWIP_NETCONN_FULLDUPLEX
-/* Thread-safe increment of sock->fd_used, with overflow check */
-static int
-sock_inc_used(struct lwip_sock *sock)
-{
- int ret;
- SYS_ARCH_DECL_PROTECT(lev);
-
- LWIP_ASSERT("sock != NULL", sock != NULL);
-
- SYS_ARCH_PROTECT(lev);
- if (sock->fd_free_pending) {
- /* prevent new usage of this socket if free is pending */
- ret = 0;
- } else {
- ++sock->fd_used;
- ret = 1;
- LWIP_ASSERT("sock->fd_used != 0", sock->fd_used != 0);
- }
- SYS_ARCH_UNPROTECT(lev);
- return ret;
-}
-
-/* Like sock_inc_used(), but called under SYS_ARCH_PROTECT lock. */
-static int
-sock_inc_used_locked(struct lwip_sock *sock)
-{
- LWIP_ASSERT("sock != NULL", sock != NULL);
-
- if (sock->fd_free_pending) {
- LWIP_ASSERT("sock->fd_used != 0", sock->fd_used != 0);
- return 0;
- }
-
- ++sock->fd_used;
- LWIP_ASSERT("sock->fd_used != 0", sock->fd_used != 0);
- return 1;
-}
-
-/* In full-duplex mode,sock->fd_used != 0 prevents a socket descriptor from being
- * released (and possibly reused) when used from more than one thread
- * (e.g. read-while-write or close-while-write, etc)
- * This function is called at the end of functions using (try)get_socket*().
- */
-static void
-done_socket(struct lwip_sock *sock)
-{
- int freed = 0;
- int is_tcp = 0;
- struct netconn *conn = NULL;
- union lwip_sock_lastdata lastdata;
- SYS_ARCH_DECL_PROTECT(lev);
- LWIP_ASSERT("sock != NULL", sock != NULL);
-
- SYS_ARCH_PROTECT(lev);
- LWIP_ASSERT("sock->fd_used > 0", sock->fd_used > 0);
- if (--sock->fd_used == 0) {
- if (sock->fd_free_pending) {
- /* free the socket */
- sock->fd_used = 1;
- is_tcp = sock->fd_free_pending & LWIP_SOCK_FD_FREE_TCP;
- freed = free_socket_locked(sock, is_tcp, &conn, &lastdata);
- }
- }
- SYS_ARCH_UNPROTECT(lev);
-
- if (freed) {
- free_socket_free_elements(is_tcp, conn, &lastdata);
- }
-}
-
-#else /* LWIP_NETCONN_FULLDUPLEX */
-#define sock_inc_used(sock) 1
-#define sock_inc_used_locked(sock) 1
-#define done_socket(sock)
-#endif /* LWIP_NETCONN_FULLDUPLEX */
-
-/* Translate a socket 'int' into a pointer (only fails if the index is invalid) */
-static struct lwip_sock *
-tryget_socket_unconn_nouse(int fd)
-{
- int s = fd - LWIP_SOCKET_OFFSET;
- if ((s < 0) || (s >= NUM_SOCKETS)) {
- LWIP_DEBUGF(SOCKETS_DEBUG, ("tryget_socket_unconn(%d): invalid\n", fd));
- return NULL;
- }
- return &sockets[s];
-}
-
-struct lwip_sock *
-lwip_socket_dbg_get_socket(int fd)
-{
- return tryget_socket_unconn_nouse(fd);
-}
-
-/* Translate a socket 'int' into a pointer (only fails if the index is invalid) */
-static struct lwip_sock *
-tryget_socket_unconn(int fd)
-{
- struct lwip_sock *ret = tryget_socket_unconn_nouse(fd);
- if (ret != NULL) {
- if (!sock_inc_used(ret)) {
- return NULL;
- }
- }
- return ret;
-}
-
-/* Like tryget_socket_unconn(), but called under SYS_ARCH_PROTECT lock. */
-static struct lwip_sock *
-tryget_socket_unconn_locked(int fd)
-{
- struct lwip_sock *ret = tryget_socket_unconn_nouse(fd);
- if (ret != NULL) {
- if (!sock_inc_used_locked(ret)) {
- return NULL;
- }
- }
- return ret;
-}
-
-/**
- * Same as get_socket but doesn't set errno
- *
- * @param fd externally used socket index
- * @return struct lwip_sock for the socket or NULL if not found
- */
-static struct lwip_sock *
-tryget_socket(int fd)
-{
- struct lwip_sock *sock = tryget_socket_unconn(fd);
- if (sock != NULL) {
- if (sock->conn) {
- return sock;
- }
- done_socket(sock);
- }
- return NULL;
-}
-
-/**
- * Map a externally used socket index to the internal socket representation.
- *
- * @param fd externally used socket index
- * @return struct lwip_sock for the socket or NULL if not found
- */
-static struct lwip_sock *
-get_socket(int fd)
-{
- struct lwip_sock *sock = tryget_socket(fd);
- if (!sock) {
- if ((fd < LWIP_SOCKET_OFFSET) || (fd >= (LWIP_SOCKET_OFFSET + NUM_SOCKETS))) {
- LWIP_DEBUGF(SOCKETS_DEBUG, ("get_socket(%d): invalid\n", fd));
- }
- set_errno(EBADF);
- return NULL;
- }
- return sock;
-}
-
-/**
- * Allocate a new socket for a given netconn.
- *
- * @param newconn the netconn for which to allocate a socket
- * @param accepted 1 if socket has been created by accept(),
- * 0 if socket has been created by socket()
- * @return the index of the new socket; -1 on error
- */
-static int
-alloc_socket(struct netconn *newconn, int accepted)
-{
- int i;
- SYS_ARCH_DECL_PROTECT(lev);
- LWIP_UNUSED_ARG(accepted);
-
- /* allocate a new socket identifier */
- for (i = 0; i < NUM_SOCKETS; ++i) {
- /* Protect socket array */
- SYS_ARCH_PROTECT(lev);
- if (!sockets[i].conn) {
-#if LWIP_NETCONN_FULLDUPLEX
- if (sockets[i].fd_used) {
- SYS_ARCH_UNPROTECT(lev);
- continue;
- }
- sockets[i].fd_used = 1;
- sockets[i].fd_free_pending = 0;
-#endif
- sockets[i].conn = newconn;
- /* The socket is not yet known to anyone, so no need to protect
- after having marked it as used. */
- SYS_ARCH_UNPROTECT(lev);
- sockets[i].lastdata.pbuf = NULL;
-#if LWIP_SOCKET_SELECT || LWIP_SOCKET_POLL
- LWIP_ASSERT("sockets[i].select_waiting == 0", sockets[i].select_waiting == 0);
- sockets[i].rcvevent = 0;
- /* TCP sendbuf is empty, but the socket is not yet writable until connected
- * (unless it has been created by accept()). */
- sockets[i].sendevent = (NETCONNTYPE_GROUP(newconn->type) == NETCONN_TCP ? (accepted != 0) : 1);
- sockets[i].errevent = 0;
-#endif /* LWIP_SOCKET_SELECT || LWIP_SOCKET_POLL */
- return i + LWIP_SOCKET_OFFSET;
- }
- SYS_ARCH_UNPROTECT(lev);
- }
- return -1;
-}
-
-/** Free a socket (under lock)
- *
- * @param sock the socket to free
- * @param is_tcp != 0 for TCP sockets, used to free lastdata
- * @param conn the socekt's netconn is stored here, must be freed externally
- * @param lastdata lastdata is stored here, must be freed externally
- */
-static int
-free_socket_locked(struct lwip_sock *sock, int is_tcp, struct netconn **conn,
- union lwip_sock_lastdata *lastdata)
-{
-#if LWIP_NETCONN_FULLDUPLEX
- LWIP_ASSERT("sock->fd_used > 0", sock->fd_used > 0);
- sock->fd_used--;
- if (sock->fd_used > 0) {
- sock->fd_free_pending = LWIP_SOCK_FD_FREE_FREE | (is_tcp ? LWIP_SOCK_FD_FREE_TCP : 0);
- return 0;
- }
-#else /* LWIP_NETCONN_FULLDUPLEX */
- LWIP_UNUSED_ARG(is_tcp);
-#endif /* LWIP_NETCONN_FULLDUPLEX */
-
- *lastdata = sock->lastdata;
- sock->lastdata.pbuf = NULL;
- *conn = sock->conn;
- sock->conn = NULL;
- return 1;
-}
-
-/** Free a socket's leftover members.
- */
-static void
-free_socket_free_elements(int is_tcp, struct netconn *conn, union lwip_sock_lastdata *lastdata)
-{
- if (lastdata->pbuf != NULL) {
- if (is_tcp) {
- pbuf_free(lastdata->pbuf);
- } else {
- netbuf_delete(lastdata->netbuf);
- }
- }
- if (conn != NULL) {
- /* netconn_prepare_delete() has already been called, here we only free the conn */
- netconn_delete(conn);
- }
-}
-
-/** Free a socket. The socket's netconn must have been
- * delete before!
- *
- * @param sock the socket to free
- * @param is_tcp != 0 for TCP sockets, used to free lastdata
- */
-static void
-free_socket(struct lwip_sock *sock, int is_tcp)
-{
- int freed;
- struct netconn *conn;
- union lwip_sock_lastdata lastdata;
- SYS_ARCH_DECL_PROTECT(lev);
-
- /* Protect socket array */
- SYS_ARCH_PROTECT(lev);
-
- freed = free_socket_locked(sock, is_tcp, &conn, &lastdata);
- SYS_ARCH_UNPROTECT(lev);
- /* don't use 'sock' after this line, as another task might have allocated it */
-
- if (freed) {
- free_socket_free_elements(is_tcp, conn, &lastdata);
- }
-}
-
-/* Below this, the well-known socket functions are implemented.
- * Use google.com or opengroup.org to get a good description :-)
- *
- * Exceptions are documented!
- */
-
-int
-lwip_accept(int s, struct sockaddr *addr, socklen_t *addrlen)
-{
- struct lwip_sock *sock, *nsock;
- struct netconn *newconn;
- ip_addr_t naddr;
- u16_t port = 0;
- int newsock;
- err_t err;
- int recvevent;
- SYS_ARCH_DECL_PROTECT(lev);
-
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_accept(%d)...\n", s));
- sock = get_socket(s);
- if (!sock) {
- return -1;
- }
-
- /* wait for a new connection */
- err = netconn_accept(sock->conn, &newconn);
- if (err != ERR_OK) {
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_accept(%d): netconn_acept failed, err=%d\n", s, err));
- if (NETCONNTYPE_GROUP(netconn_type(sock->conn)) != NETCONN_TCP) {
- sock_set_errno(sock, EOPNOTSUPP);
- } else if (err == ERR_CLSD) {
- sock_set_errno(sock, EINVAL);
- } else {
- sock_set_errno(sock, err_to_errno(err));
- }
- done_socket(sock);
- return -1;
- }
- LWIP_ASSERT("newconn != NULL", newconn != NULL);
-
- newsock = alloc_socket(newconn, 1);
- if (newsock == -1) {
- netconn_delete(newconn);
- sock_set_errno(sock, ENFILE);
- done_socket(sock);
- return -1;
- }
- LWIP_ASSERT("invalid socket index", (newsock >= LWIP_SOCKET_OFFSET) && (newsock < NUM_SOCKETS + LWIP_SOCKET_OFFSET));
- nsock = &sockets[newsock - LWIP_SOCKET_OFFSET];
-
- /* See event_callback: If data comes in right away after an accept, even
- * though the server task might not have created a new socket yet.
- * In that case, newconn->socket is counted down (newconn->socket--),
- * so nsock->rcvevent is >= 1 here!
- */
- SYS_ARCH_PROTECT(lev);
- recvevent = (s16_t)(-1 - newconn->socket);
- newconn->socket = newsock;
- SYS_ARCH_UNPROTECT(lev);
-
- if (newconn->callback) {
- LOCK_TCPIP_CORE();
- while (recvevent > 0) {
- recvevent--;
- newconn->callback(newconn, NETCONN_EVT_RCVPLUS, 0);
- }
- UNLOCK_TCPIP_CORE();
- }
-
- /* Note that POSIX only requires us to check addr is non-NULL. addrlen must
- * not be NULL if addr is valid.
- */
- if ((addr != NULL) && (addrlen != NULL)) {
- union sockaddr_aligned tempaddr;
- /* get the IP address and port of the remote host */
- err = netconn_peer(newconn, &naddr, &port);
- if (err != ERR_OK) {
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_accept(%d): netconn_peer failed, err=%d\n", s, err));
- netconn_delete(newconn);
- free_socket(nsock, 1);
- sock_set_errno(sock, err_to_errno(err));
- done_socket(sock);
- return -1;
- }
-
- IPADDR_PORT_TO_SOCKADDR(&tempaddr, &naddr, port);
- if (*addrlen > tempaddr.sa.sa_len) {
- *addrlen = tempaddr.sa.sa_len;
- }
- MEMCPY(addr, &tempaddr, *addrlen);
-
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_accept(%d) returning new sock=%d addr=", s, newsock));
- ip_addr_debug_print_val(SOCKETS_DEBUG, naddr);
- LWIP_DEBUGF(SOCKETS_DEBUG, (" port=%"U16_F"\n", port));
- } else {
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_accept(%d) returning new sock=%d", s, newsock));
- }
-
- sock_set_errno(sock, 0);
- done_socket(sock);
- done_socket(nsock);
- return newsock;
-}
-
-int
-lwip_bind(int s, const struct sockaddr *name, socklen_t namelen)
-{
- struct lwip_sock *sock;
- ip_addr_t local_addr;
- u16_t local_port;
- err_t err;
-
- sock = get_socket(s);
- if (!sock) {
- return -1;
- }
-
- if (!SOCK_ADDR_TYPE_MATCH(name, sock)) {
- /* sockaddr does not match socket type (IPv4/IPv6) */
- sock_set_errno(sock, err_to_errno(ERR_VAL));
- done_socket(sock);
- return -1;
- }
-
- /* check size, family and alignment of 'name' */
- LWIP_ERROR("lwip_bind: invalid address", (IS_SOCK_ADDR_LEN_VALID(namelen) &&
- IS_SOCK_ADDR_TYPE_VALID(name) && IS_SOCK_ADDR_ALIGNED(name)),
- sock_set_errno(sock, err_to_errno(ERR_ARG)); done_socket(sock); return -1;);
- LWIP_UNUSED_ARG(namelen);
-
- SOCKADDR_TO_IPADDR_PORT(name, &local_addr, local_port);
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_bind(%d, addr=", s));
- ip_addr_debug_print_val(SOCKETS_DEBUG, local_addr);
- LWIP_DEBUGF(SOCKETS_DEBUG, (" port=%"U16_F")\n", local_port));
-
-#if LWIP_IPV4 && LWIP_IPV6
- /* Dual-stack: Unmap IPv4 mapped IPv6 addresses */
- if (IP_IS_V6_VAL(local_addr) && ip6_addr_isipv4mappedipv6(ip_2_ip6(&local_addr))) {
- unmap_ipv4_mapped_ipv6(ip_2_ip4(&local_addr), ip_2_ip6(&local_addr));
- IP_SET_TYPE_VAL(local_addr, IPADDR_TYPE_V4);
- }
-#endif /* LWIP_IPV4 && LWIP_IPV6 */
-
- err = netconn_bind(sock->conn, &local_addr, local_port);
-
- if (err != ERR_OK) {
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_bind(%d) failed, err=%d\n", s, err));
- sock_set_errno(sock, err_to_errno(err));
- done_socket(sock);
- return -1;
- }
-
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_bind(%d) succeeded\n", s));
- sock_set_errno(sock, 0);
- done_socket(sock);
- return 0;
-}
-
-int
-lwip_close(int s)
-{
- struct lwip_sock *sock;
- int is_tcp = 0;
- err_t err;
-
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_close(%d)\n", s));
-
- sock = get_socket(s);
- if (!sock) {
- return -1;
- }
-
- if (sock->conn != NULL) {
- is_tcp = NETCONNTYPE_GROUP(netconn_type(sock->conn)) == NETCONN_TCP;
- } else {
- LWIP_ASSERT("sock->lastdata == NULL", sock->lastdata.pbuf == NULL);
- }
-
-#if LWIP_IGMP
- /* drop all possibly joined IGMP memberships */
- lwip_socket_drop_registered_memberships(s);
-#endif /* LWIP_IGMP */
-#if LWIP_IPV6_MLD
- /* drop all possibly joined MLD6 memberships */
- lwip_socket_drop_registered_mld6_memberships(s);
-#endif /* LWIP_IPV6_MLD */
-
- err = netconn_prepare_delete(sock->conn);
- if (err != ERR_OK) {
- sock_set_errno(sock, err_to_errno(err));
- done_socket(sock);
- return -1;
- }
-
- free_socket(sock, is_tcp);
- set_errno(0);
- return 0;
-}
-
-int
-lwip_connect(int s, const struct sockaddr *name, socklen_t namelen)
-{
- struct lwip_sock *sock;
- err_t err;
-
- sock = get_socket(s);
- if (!sock) {
- return -1;
- }
-
- if (!SOCK_ADDR_TYPE_MATCH_OR_UNSPEC(name, sock)) {
- /* sockaddr does not match socket type (IPv4/IPv6) */
- sock_set_errno(sock, err_to_errno(ERR_VAL));
- done_socket(sock);
- return -1;
- }
-
- LWIP_UNUSED_ARG(namelen);
- if (name->sa_family == AF_UNSPEC) {
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_connect(%d, AF_UNSPEC)\n", s));
- err = netconn_disconnect(sock->conn);
- } else {
- ip_addr_t remote_addr;
- u16_t remote_port;
-
- /* check size, family and alignment of 'name' */
- LWIP_ERROR("lwip_connect: invalid address", IS_SOCK_ADDR_LEN_VALID(namelen) &&
- IS_SOCK_ADDR_TYPE_VALID_OR_UNSPEC(name) && IS_SOCK_ADDR_ALIGNED(name),
- sock_set_errno(sock, err_to_errno(ERR_ARG)); done_socket(sock); return -1;);
-
- SOCKADDR_TO_IPADDR_PORT(name, &remote_addr, remote_port);
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_connect(%d, addr=", s));
- ip_addr_debug_print_val(SOCKETS_DEBUG, remote_addr);
- LWIP_DEBUGF(SOCKETS_DEBUG, (" port=%"U16_F")\n", remote_port));
-
-#if LWIP_IPV4 && LWIP_IPV6
- /* Dual-stack: Unmap IPv4 mapped IPv6 addresses */
- if (IP_IS_V6_VAL(remote_addr) && ip6_addr_isipv4mappedipv6(ip_2_ip6(&remote_addr))) {
- unmap_ipv4_mapped_ipv6(ip_2_ip4(&remote_addr), ip_2_ip6(&remote_addr));
- IP_SET_TYPE_VAL(remote_addr, IPADDR_TYPE_V4);
- }
-#endif /* LWIP_IPV4 && LWIP_IPV6 */
-
- err = netconn_connect(sock->conn, &remote_addr, remote_port);
- }
-
- if (err != ERR_OK) {
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_connect(%d) failed, err=%d\n", s, err));
- sock_set_errno(sock, err_to_errno(err));
- done_socket(sock);
- return -1;
- }
-
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_connect(%d) succeeded\n", s));
- sock_set_errno(sock, 0);
- done_socket(sock);
- return 0;
-}
-
-/**
- * Set a socket into listen mode.
- * The socket may not have been used for another connection previously.
- *
- * @param s the socket to set to listening mode
- * @param backlog (ATTENTION: needs TCP_LISTEN_BACKLOG=1)
- * @return 0 on success, non-zero on failure
- */
-int
-lwip_listen(int s, int backlog)
-{
- struct lwip_sock *sock;
- err_t err;
-
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_listen(%d, backlog=%d)\n", s, backlog));
-
- sock = get_socket(s);
- if (!sock) {
- return -1;
- }
-
- /* limit the "backlog" parameter to fit in an u8_t */
- backlog = LWIP_MIN(LWIP_MAX(backlog, 0), 0xff);
-
- err = netconn_listen_with_backlog(sock->conn, (u8_t)backlog);
-
- if (err != ERR_OK) {
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_listen(%d) failed, err=%d\n", s, err));
- if (NETCONNTYPE_GROUP(netconn_type(sock->conn)) != NETCONN_TCP) {
- sock_set_errno(sock, EOPNOTSUPP);
- } else {
- sock_set_errno(sock, err_to_errno(err));
- }
- done_socket(sock);
- return -1;
- }
-
- sock_set_errno(sock, 0);
- done_socket(sock);
- return 0;
-}
-
-#if LWIP_TCP
-/* Helper function to loop over receiving pbufs from netconn
- * until "len" bytes are received or we're otherwise done.
- * Keeps sock->lastdata for peeking or partly copying.
- */
-static ssize_t
-lwip_recv_tcp(struct lwip_sock *sock, void *mem, size_t len, int flags)
-{
- u8_t apiflags = NETCONN_NOAUTORCVD;
- ssize_t recvd = 0;
- ssize_t recv_left = (len <= SSIZE_MAX) ? (ssize_t)len : SSIZE_MAX;
-
- LWIP_ASSERT("no socket given", sock != NULL);
- LWIP_ASSERT("this should be checked internally", NETCONNTYPE_GROUP(netconn_type(sock->conn)) == NETCONN_TCP);
-
- if (flags & MSG_DONTWAIT) {
- apiflags |= NETCONN_DONTBLOCK;
- }
-
- do {
- struct pbuf *p;
- err_t err;
- u16_t copylen;
-
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_recv_tcp: top while sock->lastdata=%p\n", (void *)sock->lastdata.pbuf));
- /* Check if there is data left from the last recv operation. */
- if (sock->lastdata.pbuf) {
- p = sock->lastdata.pbuf;
- } else {
- /* No data was left from the previous operation, so we try to get
- some from the network. */
- err = netconn_recv_tcp_pbuf_flags(sock->conn, &p, apiflags);
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_recv_tcp: netconn_recv err=%d, pbuf=%p\n",
- err, (void *)p));
-
- if (err != ERR_OK) {
- if (recvd > 0) {
- /* already received data, return that (this trusts in getting the same error from
- netconn layer again next time netconn_recv is called) */
- goto lwip_recv_tcp_done;
- }
- /* We should really do some error checking here. */
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_recv_tcp: p == NULL, error is \"%s\"!\n",
- lwip_strerr(err)));
- sock_set_errno(sock, err_to_errno(err));
- if (err == ERR_CLSD) {
- return 0;
- } else {
- return -1;
- }
- }
- LWIP_ASSERT("p != NULL", p != NULL);
- sock->lastdata.pbuf = p;
- }
-
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_recv_tcp: buflen=%"U16_F" recv_left=%d off=%d\n",
- p->tot_len, (int)recv_left, (int)recvd));
-
- if (recv_left > p->tot_len) {
- copylen = p->tot_len;
- } else {
- copylen = (u16_t)recv_left;
- }
- if (recvd + copylen < recvd) {
- /* overflow */
- copylen = (u16_t)(SSIZE_MAX - recvd);
- }
-
- /* copy the contents of the received buffer into
- the supplied memory pointer mem */
- pbuf_copy_partial(p, (u8_t *)mem + recvd, copylen, 0);
-
- recvd += copylen;
-
- /* TCP combines multiple pbufs for one recv */
- LWIP_ASSERT("invalid copylen, len would underflow", recv_left >= copylen);
- recv_left -= copylen;
-
- /* Unless we peek the incoming message... */
- if ((flags & MSG_PEEK) == 0) {
- /* ... check if there is data left in the pbuf */
- LWIP_ASSERT("invalid copylen", p->tot_len >= copylen);
- if (p->tot_len - copylen > 0) {
- /* If so, it should be saved in the sock structure for the next recv call.
- We store the pbuf but hide/free the consumed data: */
- sock->lastdata.pbuf = pbuf_free_header(p, copylen);
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_recv_tcp: lastdata now pbuf=%p\n", (void *)sock->lastdata.pbuf));
- } else {
- sock->lastdata.pbuf = NULL;
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_recv_tcp: deleting pbuf=%p\n", (void *)p));
- pbuf_free(p);
- }
- }
- /* once we have some data to return, only add more if we don't need to wait */
- apiflags |= NETCONN_DONTBLOCK | NETCONN_NOFIN;
- /* @todo: do we need to support peeking more than one pbuf? */
- } while ((recv_left > 0) && !(flags & MSG_PEEK));
-lwip_recv_tcp_done:
- if ((recvd > 0) && !(flags & MSG_PEEK)) {
- /* ensure window update after copying all data */
- netconn_tcp_recvd(sock->conn, (size_t)recvd);
- }
- sock_set_errno(sock, 0);
- return recvd;
-}
-#endif
-
-/* Convert a netbuf's address data to struct sockaddr */
-static int
-lwip_sock_make_addr(struct netconn *conn, ip_addr_t *fromaddr, u16_t port,
- struct sockaddr *from, socklen_t *fromlen)
-{
- int truncated = 0;
- union sockaddr_aligned saddr;
-
- LWIP_UNUSED_ARG(conn);
-
- LWIP_ASSERT("fromaddr != NULL", fromaddr != NULL);
- LWIP_ASSERT("from != NULL", from != NULL);
- LWIP_ASSERT("fromlen != NULL", fromlen != NULL);
-
-#if LWIP_IPV4 && LWIP_IPV6
- /* Dual-stack: Map IPv4 addresses to IPv4 mapped IPv6 */
- if (NETCONNTYPE_ISIPV6(netconn_type(conn)) && IP_IS_V4(fromaddr)) {
- ip4_2_ipv4_mapped_ipv6(ip_2_ip6(fromaddr), ip_2_ip4(fromaddr));
- IP_SET_TYPE(fromaddr, IPADDR_TYPE_V6);
- }
-#endif /* LWIP_IPV4 && LWIP_IPV6 */
-
- IPADDR_PORT_TO_SOCKADDR(&saddr, fromaddr, port);
- if (*fromlen < saddr.sa.sa_len) {
- truncated = 1;
- } else if (*fromlen > saddr.sa.sa_len) {
- *fromlen = saddr.sa.sa_len;
- }
- MEMCPY(from, &saddr, *fromlen);
- return truncated;
-}
-
-#if LWIP_TCP
-/* Helper function to get a tcp socket's remote address info */
-static int
-lwip_recv_tcp_from(struct lwip_sock *sock, struct sockaddr *from, socklen_t *fromlen, const char *dbg_fn, int dbg_s, ssize_t dbg_ret)
-{
- if (sock == NULL) {
- return 0;
- }
- LWIP_UNUSED_ARG(dbg_fn);
- LWIP_UNUSED_ARG(dbg_s);
- LWIP_UNUSED_ARG(dbg_ret);
-
-#if !SOCKETS_DEBUG
- if (from && fromlen)
-#endif /* !SOCKETS_DEBUG */
- {
- /* get remote addr/port from tcp_pcb */
- u16_t port;
- ip_addr_t tmpaddr;
- netconn_getaddr(sock->conn, &tmpaddr, &port, 0);
- LWIP_DEBUGF(SOCKETS_DEBUG, ("%s(%d): addr=", dbg_fn, dbg_s));
- ip_addr_debug_print_val(SOCKETS_DEBUG, tmpaddr);
- LWIP_DEBUGF(SOCKETS_DEBUG, (" port=%"U16_F" len=%d\n", port, (int)dbg_ret));
- if (from && fromlen) {
- return lwip_sock_make_addr(sock->conn, &tmpaddr, port, from, fromlen);
- }
- }
- return 0;
-}
-#endif
-
-/* Helper function to receive a netbuf from a udp or raw netconn.
- * Keeps sock->lastdata for peeking.
- */
-static err_t
-lwip_recvfrom_udp_raw(struct lwip_sock *sock, int flags, struct msghdr *msg, u16_t *datagram_len, int dbg_s)
-{
- struct netbuf *buf;
- u8_t apiflags;
- err_t err;
- u16_t buflen, copylen, copied;
- int i;
-
- LWIP_UNUSED_ARG(dbg_s);
- LWIP_ERROR("lwip_recvfrom_udp_raw: invalid arguments", (msg->msg_iov != NULL) || (msg->msg_iovlen <= 0), return ERR_ARG;);
-
- if (flags & MSG_DONTWAIT) {
- apiflags = NETCONN_DONTBLOCK;
- } else {
- apiflags = 0;
- }
-
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_recvfrom_udp_raw[UDP/RAW]: top sock->lastdata=%p\n", (void *)sock->lastdata.netbuf));
- /* Check if there is data left from the last recv operation. */
- buf = sock->lastdata.netbuf;
- if (buf == NULL) {
- /* No data was left from the previous operation, so we try to get
- some from the network. */
- err = netconn_recv_udp_raw_netbuf_flags(sock->conn, &buf, apiflags);
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_recvfrom_udp_raw[UDP/RAW]: netconn_recv err=%d, netbuf=%p\n",
- err, (void *)buf));
-
- if (err != ERR_OK) {
- return err;
- }
- LWIP_ASSERT("buf != NULL", buf != NULL);
- sock->lastdata.netbuf = buf;
- }
- buflen = buf->p->tot_len;
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_recvfrom_udp_raw: buflen=%"U16_F"\n", buflen));
-
- copied = 0;
- /* copy the pbuf payload into the iovs */
- for (i = 0; (i < msg->msg_iovlen) && (copied < buflen); i++) {
- u16_t len_left = (u16_t)(buflen - copied);
- if (msg->msg_iov[i].iov_len > len_left) {
- copylen = len_left;
- } else {
- copylen = (u16_t)msg->msg_iov[i].iov_len;
- }
-
- /* copy the contents of the received buffer into
- the supplied memory buffer */
- pbuf_copy_partial(buf->p, (u8_t *)msg->msg_iov[i].iov_base, copylen, copied);
- copied = (u16_t)(copied + copylen);
- }
-
- /* Check to see from where the data was.*/
-#if !SOCKETS_DEBUG
- if (msg->msg_name && msg->msg_namelen)
-#endif /* !SOCKETS_DEBUG */
- {
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_recvfrom_udp_raw(%d): addr=", dbg_s));
- ip_addr_debug_print_val(SOCKETS_DEBUG, *netbuf_fromaddr(buf));
- LWIP_DEBUGF(SOCKETS_DEBUG, (" port=%"U16_F" len=%d\n", netbuf_fromport(buf), copied));
- if (msg->msg_name && msg->msg_namelen) {
- lwip_sock_make_addr(sock->conn, netbuf_fromaddr(buf), netbuf_fromport(buf),
- (struct sockaddr *)msg->msg_name, &msg->msg_namelen);
- }
- }
-
- /* Initialize flag output */
- msg->msg_flags = 0;
-
- if (msg->msg_control) {
- u8_t wrote_msg = 0;
-#if LWIP_NETBUF_RECVINFO
- /* Check if packet info was recorded */
- if (buf->flags & NETBUF_FLAG_DESTADDR) {
- if (IP_IS_V4(&buf->toaddr)) {
-#if LWIP_IPV4
- if (msg->msg_controllen >= CMSG_SPACE(sizeof(struct in_pktinfo))) {
- struct cmsghdr *chdr = CMSG_FIRSTHDR(msg); /* This will always return a header!! */
- struct in_pktinfo *pkti = (struct in_pktinfo *)CMSG_DATA(chdr);
- chdr->cmsg_level = IPPROTO_IP;
- chdr->cmsg_type = IP_PKTINFO;
- chdr->cmsg_len = CMSG_LEN(sizeof(struct in_pktinfo));
- pkti->ipi_ifindex = buf->p->if_idx;
- inet_addr_from_ip4addr(&pkti->ipi_addr, ip_2_ip4(netbuf_destaddr(buf)));
- msg->msg_controllen = CMSG_SPACE(sizeof(struct in_pktinfo));
- wrote_msg = 1;
- } else {
- msg->msg_flags |= MSG_CTRUNC;
- }
-#endif /* LWIP_IPV4 */
- }
- }
-#endif /* LWIP_NETBUF_RECVINFO */
-
- if (!wrote_msg) {
- msg->msg_controllen = 0;
- }
- }
-
- /* If we don't peek the incoming message: zero lastdata pointer and free the netbuf */
- if ((flags & MSG_PEEK) == 0) {
- sock->lastdata.netbuf = NULL;
- netbuf_delete(buf);
- }
- if (datagram_len) {
- *datagram_len = buflen;
- }
- return ERR_OK;
-}
-
-ssize_t
-lwip_recvfrom(int s, void *mem, size_t len, int flags,
- struct sockaddr *from, socklen_t *fromlen)
-{
- struct lwip_sock *sock;
- ssize_t ret;
-
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_recvfrom(%d, %p, %"SZT_F", 0x%x, ..)\n", s, mem, len, flags));
- sock = get_socket(s);
- if (!sock) {
- return -1;
- }
-#if LWIP_TCP
- if (NETCONNTYPE_GROUP(netconn_type(sock->conn)) == NETCONN_TCP) {
- ret = lwip_recv_tcp(sock, mem, len, flags);
- lwip_recv_tcp_from(sock, from, fromlen, "lwip_recvfrom", s, ret);
- done_socket(sock);
- return ret;
- } else
-#endif
- {
- u16_t datagram_len = 0;
- struct iovec vec;
- struct msghdr msg;
- err_t err;
- vec.iov_base = mem;
- vec.iov_len = len;
- msg.msg_control = NULL;
- msg.msg_controllen = 0;
- msg.msg_flags = 0;
- msg.msg_iov = &vec;
- msg.msg_iovlen = 1;
- msg.msg_name = from;
- msg.msg_namelen = (fromlen ? *fromlen : 0);
- err = lwip_recvfrom_udp_raw(sock, flags, &msg, &datagram_len, s);
- if (err != ERR_OK) {
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_recvfrom[UDP/RAW](%d): buf == NULL, error is \"%s\"!\n",
- s, lwip_strerr(err)));
- sock_set_errno(sock, err_to_errno(err));
- done_socket(sock);
- return -1;
- }
- ret = (ssize_t)LWIP_MIN(LWIP_MIN(len, datagram_len), SSIZE_MAX);
- if (fromlen) {
- *fromlen = msg.msg_namelen;
- }
- }
-
- sock_set_errno(sock, 0);
- done_socket(sock);
- return ret;
-}
-
-ssize_t
-lwip_read(int s, void *mem, size_t len)
-{
- return lwip_recvfrom(s, mem, len, 0, NULL, NULL);
-}
-
-ssize_t
-lwip_readv(int s, const struct iovec *iov, int iovcnt)
-{
- struct msghdr msg;
-
- msg.msg_name = NULL;
- msg.msg_namelen = 0;
- /* Hack: we have to cast via number to cast from 'const' pointer to non-const.
- Blame the opengroup standard for this inconsistency. */
- msg.msg_iov = LWIP_CONST_CAST(struct iovec *, iov);
- msg.msg_iovlen = iovcnt;
- msg.msg_control = NULL;
- msg.msg_controllen = 0;
- msg.msg_flags = 0;
- return lwip_recvmsg(s, &msg, 0);
-}
-
-ssize_t
-lwip_recv(int s, void *mem, size_t len, int flags)
-{
- return lwip_recvfrom(s, mem, len, flags, NULL, NULL);
-}
-
-ssize_t
-lwip_recvmsg(int s, struct msghdr *message, int flags)
-{
- struct lwip_sock *sock;
- int i;
- ssize_t buflen;
-
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_recvmsg(%d, message=%p, flags=0x%x)\n", s, (void *)message, flags));
- LWIP_ERROR("lwip_recvmsg: invalid message pointer", message != NULL, return ERR_ARG;);
- LWIP_ERROR("lwip_recvmsg: unsupported flags", (flags & ~(MSG_PEEK|MSG_DONTWAIT)) == 0,
- set_errno(EOPNOTSUPP); return -1;);
-
- if ((message->msg_iovlen <= 0) || (message->msg_iovlen > IOV_MAX)) {
- set_errno(EMSGSIZE);
- return -1;
- }
-
- sock = get_socket(s);
- if (!sock) {
- return -1;
- }
-
- /* check for valid vectors */
- buflen = 0;
- for (i = 0; i < message->msg_iovlen; i++) {
- if ((message->msg_iov[i].iov_base == NULL) || ((ssize_t)message->msg_iov[i].iov_len <= 0) ||
- ((size_t)(ssize_t)message->msg_iov[i].iov_len != message->msg_iov[i].iov_len) ||
- ((ssize_t)(buflen + (ssize_t)message->msg_iov[i].iov_len) <= 0)) {
- sock_set_errno(sock, err_to_errno(ERR_VAL));
- done_socket(sock);
- return -1;
- }
- buflen = (ssize_t)(buflen + (ssize_t)message->msg_iov[i].iov_len);
- }
-
- if (NETCONNTYPE_GROUP(netconn_type(sock->conn)) == NETCONN_TCP) {
-#if LWIP_TCP
- int recv_flags = flags;
- message->msg_flags = 0;
- /* recv the data */
- buflen = 0;
- for (i = 0; i < message->msg_iovlen; i++) {
- /* try to receive into this vector's buffer */
- ssize_t recvd_local = lwip_recv_tcp(sock, message->msg_iov[i].iov_base, message->msg_iov[i].iov_len, recv_flags);
- if (recvd_local > 0) {
- /* sum up received bytes */
- buflen += recvd_local;
- }
- if ((recvd_local < 0) || (recvd_local < (int)message->msg_iov[i].iov_len) ||
- (flags & MSG_PEEK)) {
- /* returned prematurely (or peeking, which might actually be limitated to the first iov) */
- if (buflen <= 0) {
- /* nothing received at all, propagate the error */
- buflen = recvd_local;
- }
- break;
- }
- /* pass MSG_DONTWAIT to lwip_recv_tcp() to prevent waiting for more data */
- recv_flags |= MSG_DONTWAIT;
- }
- if (buflen > 0) {
- /* reset socket error since we have received something */
- sock_set_errno(sock, 0);
- }
- /* " If the socket is connected, the msg_name and msg_namelen members shall be ignored." */
- done_socket(sock);
- return buflen;
-#else /* LWIP_TCP */
- sock_set_errno(sock, err_to_errno(ERR_ARG));
- done_socket(sock);
- return -1;
-#endif /* LWIP_TCP */
- }
- /* else, UDP and RAW NETCONNs */
-#if LWIP_UDP || LWIP_RAW
- {
- u16_t datagram_len = 0;
- err_t err;
- err = lwip_recvfrom_udp_raw(sock, flags, message, &datagram_len, s);
- if (err != ERR_OK) {
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_recvmsg[UDP/RAW](%d): buf == NULL, error is \"%s\"!\n",
- s, lwip_strerr(err)));
- sock_set_errno(sock, err_to_errno(err));
- done_socket(sock);
- return -1;
- }
- if (datagram_len > buflen) {
- message->msg_flags |= MSG_TRUNC;
- }
-
- sock_set_errno(sock, 0);
- done_socket(sock);
- return (int)datagram_len;
- }
-#else /* LWIP_UDP || LWIP_RAW */
- sock_set_errno(sock, err_to_errno(ERR_ARG));
- done_socket(sock);
- return -1;
-#endif /* LWIP_UDP || LWIP_RAW */
-}
-
-ssize_t
-lwip_send(int s, const void *data, size_t size, int flags)
-{
- struct lwip_sock *sock;
- err_t err;
- u8_t write_flags;
- size_t written;
-
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_send(%d, data=%p, size=%"SZT_F", flags=0x%x)\n",
- s, data, size, flags));
-
- sock = get_socket(s);
- if (!sock) {
- return -1;
- }
-
- if (NETCONNTYPE_GROUP(netconn_type(sock->conn)) != NETCONN_TCP) {
-#if (LWIP_UDP || LWIP_RAW)
- done_socket(sock);
- return lwip_sendto(s, data, size, flags, NULL, 0);
-#else /* (LWIP_UDP || LWIP_RAW) */
- sock_set_errno(sock, err_to_errno(ERR_ARG));
- done_socket(sock);
- return -1;
-#endif /* (LWIP_UDP || LWIP_RAW) */
- }
-
- write_flags = (u8_t)(NETCONN_COPY |
- ((flags & MSG_MORE) ? NETCONN_MORE : 0) |
- ((flags & MSG_DONTWAIT) ? NETCONN_DONTBLOCK : 0));
- written = 0;
- err = netconn_write_partly(sock->conn, data, size, write_flags, &written);
-
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_send(%d) err=%d written=%"SZT_F"\n", s, err, written));
- sock_set_errno(sock, err_to_errno(err));
- done_socket(sock);
- /* casting 'written' to ssize_t is OK here since the netconn API limits it to SSIZE_MAX */
- return (err == ERR_OK ? (ssize_t)written : -1);
-}
-
-ssize_t
-lwip_sendmsg(int s, const struct msghdr *msg, int flags)
-{
- struct lwip_sock *sock;
-#if LWIP_TCP
- u8_t write_flags;
- size_t written;
-#endif
- err_t err = ERR_OK;
-
- sock = get_socket(s);
- if (!sock) {
- return -1;
- }
-
- LWIP_ERROR("lwip_sendmsg: invalid msghdr", msg != NULL,
- sock_set_errno(sock, err_to_errno(ERR_ARG)); done_socket(sock); return -1;);
- LWIP_ERROR("lwip_sendmsg: invalid msghdr iov", msg->msg_iov != NULL,
- sock_set_errno(sock, err_to_errno(ERR_ARG)); done_socket(sock); return -1;);
- LWIP_ERROR("lwip_sendmsg: maximum iovs exceeded", (msg->msg_iovlen > 0) && (msg->msg_iovlen <= IOV_MAX),
- sock_set_errno(sock, EMSGSIZE); done_socket(sock); return -1;);
- LWIP_ERROR("lwip_sendmsg: unsupported flags", (flags & ~(MSG_DONTWAIT | MSG_MORE)) == 0,
- sock_set_errno(sock, EOPNOTSUPP); done_socket(sock); return -1;);
-
- LWIP_UNUSED_ARG(msg->msg_control);
- LWIP_UNUSED_ARG(msg->msg_controllen);
- LWIP_UNUSED_ARG(msg->msg_flags);
-
- if (NETCONNTYPE_GROUP(netconn_type(sock->conn)) == NETCONN_TCP) {
-#if LWIP_TCP
- write_flags = (u8_t)(NETCONN_COPY |
- ((flags & MSG_MORE) ? NETCONN_MORE : 0) |
- ((flags & MSG_DONTWAIT) ? NETCONN_DONTBLOCK : 0));
-
- written = 0;
- err = netconn_write_vectors_partly(sock->conn, (struct netvector *)msg->msg_iov, (u16_t)msg->msg_iovlen, write_flags, &written);
- sock_set_errno(sock, err_to_errno(err));
- done_socket(sock);
- /* casting 'written' to ssize_t is OK here since the netconn API limits it to SSIZE_MAX */
- return (err == ERR_OK ? (ssize_t)written : -1);
-#else /* LWIP_TCP */
- sock_set_errno(sock, err_to_errno(ERR_ARG));
- done_socket(sock);
- return -1;
-#endif /* LWIP_TCP */
- }
- /* else, UDP and RAW NETCONNs */
-#if LWIP_UDP || LWIP_RAW
- {
- struct netbuf chain_buf;
- int i;
- ssize_t size = 0;
-
- LWIP_UNUSED_ARG(flags);
- LWIP_ERROR("lwip_sendmsg: invalid msghdr name", (((msg->msg_name == NULL) && (msg->msg_namelen == 0)) ||
- IS_SOCK_ADDR_LEN_VALID(msg->msg_namelen)),
- sock_set_errno(sock, err_to_errno(ERR_ARG)); done_socket(sock); return -1;);
-
- /* initialize chain buffer with destination */
- memset(&chain_buf, 0, sizeof(struct netbuf));
- if (msg->msg_name) {
- u16_t remote_port;
- SOCKADDR_TO_IPADDR_PORT((const struct sockaddr *)msg->msg_name, &chain_buf.addr, remote_port);
- netbuf_fromport(&chain_buf) = remote_port;
- }
-#if LWIP_NETIF_TX_SINGLE_PBUF
- for (i = 0; i < msg->msg_iovlen; i++) {
- size += msg->msg_iov[i].iov_len;
- if ((msg->msg_iov[i].iov_len > INT_MAX) || (size < (int)msg->msg_iov[i].iov_len)) {
- /* overflow */
- goto sendmsg_emsgsize;
- }
- }
- if (size > 0xFFFF) {
- /* overflow */
- goto sendmsg_emsgsize;
- }
- /* Allocate a new netbuf and copy the data into it. */
- if (netbuf_alloc(&chain_buf, (u16_t)size) == NULL) {
- err = ERR_MEM;
- } else {
- /* flatten the IO vectors */
- size_t offset = 0;
- for (i = 0; i < msg->msg_iovlen; i++) {
- MEMCPY(&((u8_t *)chain_buf.p->payload)[offset], msg->msg_iov[i].iov_base, msg->msg_iov[i].iov_len);
- offset += msg->msg_iov[i].iov_len;
- }
-#if LWIP_CHECKSUM_ON_COPY
- {
- /* This can be improved by using LWIP_CHKSUM_COPY() and aggregating the checksum for each IO vector */
- u16_t chksum = ~inet_chksum_pbuf(chain_buf.p);
- netbuf_set_chksum(&chain_buf, chksum);
- }
-#endif /* LWIP_CHECKSUM_ON_COPY */
- err = ERR_OK;
- }
-#else /* LWIP_NETIF_TX_SINGLE_PBUF */
- /* create a chained netbuf from the IO vectors. NOTE: we assemble a pbuf chain
- manually to avoid having to allocate, chain, and delete a netbuf for each iov */
- for (i = 0; i < msg->msg_iovlen; i++) {
- struct pbuf *p;
- if (msg->msg_iov[i].iov_len > 0xFFFF) {
- /* overflow */
- goto sendmsg_emsgsize;
- }
- p = pbuf_alloc(PBUF_TRANSPORT, 0, PBUF_REF);
- if (p == NULL) {
- err = ERR_MEM; /* let netbuf_delete() cleanup chain_buf */
- break;
- }
- p->payload = msg->msg_iov[i].iov_base;
- p->len = p->tot_len = (u16_t)msg->msg_iov[i].iov_len;
- /* netbuf empty, add new pbuf */
- if (chain_buf.p == NULL) {
- chain_buf.p = chain_buf.ptr = p;
- /* add pbuf to existing pbuf chain */
- } else {
- if (chain_buf.p->tot_len + p->len > 0xffff) {
- /* overflow */
- pbuf_free(p);
- goto sendmsg_emsgsize;
- }
- pbuf_cat(chain_buf.p, p);
- }
- }
- /* save size of total chain */
- if (err == ERR_OK) {
- size = netbuf_len(&chain_buf);
- }
-#endif /* LWIP_NETIF_TX_SINGLE_PBUF */
-
- if (err == ERR_OK) {
-#if LWIP_IPV4 && LWIP_IPV6
- /* Dual-stack: Unmap IPv4 mapped IPv6 addresses */
- if (IP_IS_V6_VAL(chain_buf.addr) && ip6_addr_isipv4mappedipv6(ip_2_ip6(&chain_buf.addr))) {
- unmap_ipv4_mapped_ipv6(ip_2_ip4(&chain_buf.addr), ip_2_ip6(&chain_buf.addr));
- IP_SET_TYPE_VAL(chain_buf.addr, IPADDR_TYPE_V4);
- }
-#endif /* LWIP_IPV4 && LWIP_IPV6 */
-
- /* send the data */
- err = netconn_send(sock->conn, &chain_buf);
- }
-
- /* deallocated the buffer */
- netbuf_free(&chain_buf);
-
- sock_set_errno(sock, err_to_errno(err));
- done_socket(sock);
- return (err == ERR_OK ? size : -1);
-sendmsg_emsgsize:
- sock_set_errno(sock, EMSGSIZE);
- netbuf_free(&chain_buf);
- done_socket(sock);
- return -1;
- }
-#else /* LWIP_UDP || LWIP_RAW */
- sock_set_errno(sock, err_to_errno(ERR_ARG));
- done_socket(sock);
- return -1;
-#endif /* LWIP_UDP || LWIP_RAW */
-}
-
-ssize_t
-lwip_sendto(int s, const void *data, size_t size, int flags,
- const struct sockaddr *to, socklen_t tolen)
-{
- struct lwip_sock *sock;
- err_t err;
- u16_t short_size;
- u16_t remote_port;
- struct netbuf buf;
-
- sock = get_socket(s);
- if (!sock) {
- return -1;
- }
-
- if (NETCONNTYPE_GROUP(netconn_type(sock->conn)) == NETCONN_TCP) {
-#if LWIP_TCP
- done_socket(sock);
- return lwip_send(s, data, size, flags);
-#else /* LWIP_TCP */
- LWIP_UNUSED_ARG(flags);
- sock_set_errno(sock, err_to_errno(ERR_ARG));
- done_socket(sock);
- return -1;
-#endif /* LWIP_TCP */
- }
-
- if (size > LWIP_MIN(0xFFFF, SSIZE_MAX)) {
- /* cannot fit into one datagram (at least for us) */
- sock_set_errno(sock, EMSGSIZE);
- done_socket(sock);
- return -1;
- }
- short_size = (u16_t)size;
- LWIP_ERROR("lwip_sendto: invalid address", (((to == NULL) && (tolen == 0)) ||
- (IS_SOCK_ADDR_LEN_VALID(tolen) &&
- ((to != NULL) && (IS_SOCK_ADDR_TYPE_VALID(to) && IS_SOCK_ADDR_ALIGNED(to))))),
- sock_set_errno(sock, err_to_errno(ERR_ARG)); done_socket(sock); return -1;);
- LWIP_UNUSED_ARG(tolen);
-
- /* initialize a buffer */
- buf.p = buf.ptr = NULL;
-#if LWIP_CHECKSUM_ON_COPY
- buf.flags = 0;
-#endif /* LWIP_CHECKSUM_ON_COPY */
- if (to) {
- SOCKADDR_TO_IPADDR_PORT(to, &buf.addr, remote_port);
- } else {
- remote_port = 0;
- ip_addr_set_any(NETCONNTYPE_ISIPV6(netconn_type(sock->conn)), &buf.addr);
- }
- netbuf_fromport(&buf) = remote_port;
-
-
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_sendto(%d, data=%p, short_size=%"U16_F", flags=0x%x to=",
- s, data, short_size, flags));
- ip_addr_debug_print_val(SOCKETS_DEBUG, buf.addr);
- LWIP_DEBUGF(SOCKETS_DEBUG, (" port=%"U16_F"\n", remote_port));
-
- /* make the buffer point to the data that should be sent */
-#if LWIP_NETIF_TX_SINGLE_PBUF
- /* Allocate a new netbuf and copy the data into it. */
- if (netbuf_alloc(&buf, short_size) == NULL) {
- err = ERR_MEM;
- } else {
-#if LWIP_CHECKSUM_ON_COPY
- if (NETCONNTYPE_GROUP(netconn_type(sock->conn)) != NETCONN_RAW) {
- u16_t chksum = LWIP_CHKSUM_COPY(buf.p->payload, data, short_size);
- netbuf_set_chksum(&buf, chksum);
- } else
-#endif /* LWIP_CHECKSUM_ON_COPY */
- {
- MEMCPY(buf.p->payload, data, short_size);
- }
- err = ERR_OK;
- }
-#else /* LWIP_NETIF_TX_SINGLE_PBUF */
- err = netbuf_ref(&buf, data, short_size);
-#endif /* LWIP_NETIF_TX_SINGLE_PBUF */
- if (err == ERR_OK) {
-#if LWIP_IPV4 && LWIP_IPV6
- /* Dual-stack: Unmap IPv4 mapped IPv6 addresses */
- if (IP_IS_V6_VAL(buf.addr) && ip6_addr_isipv4mappedipv6(ip_2_ip6(&buf.addr))) {
- unmap_ipv4_mapped_ipv6(ip_2_ip4(&buf.addr), ip_2_ip6(&buf.addr));
- IP_SET_TYPE_VAL(buf.addr, IPADDR_TYPE_V4);
- }
-#endif /* LWIP_IPV4 && LWIP_IPV6 */
-
- /* send the data */
- err = netconn_send(sock->conn, &buf);
- }
-
- /* deallocated the buffer */
- netbuf_free(&buf);
-
- sock_set_errno(sock, err_to_errno(err));
- done_socket(sock);
- return (err == ERR_OK ? short_size : -1);
-}
-
-int
-lwip_socket(int domain, int type, int protocol)
-{
- struct netconn *conn;
- int i;
-
- LWIP_UNUSED_ARG(domain); /* @todo: check this */
-
- /* create a netconn */
- switch (type) {
- case SOCK_RAW:
- conn = netconn_new_with_proto_and_callback(DOMAIN_TO_NETCONN_TYPE(domain, NETCONN_RAW),
- (u8_t)protocol, DEFAULT_SOCKET_EVENTCB);
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_socket(%s, SOCK_RAW, %d) = ",
- domain == PF_INET ? "PF_INET" : "UNKNOWN", protocol));
- break;
- case SOCK_DGRAM:
- conn = netconn_new_with_callback(DOMAIN_TO_NETCONN_TYPE(domain,
- ((protocol == IPPROTO_UDPLITE) ? NETCONN_UDPLITE : NETCONN_UDP)),
- DEFAULT_SOCKET_EVENTCB);
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_socket(%s, SOCK_DGRAM, %d) = ",
- domain == PF_INET ? "PF_INET" : "UNKNOWN", protocol));
-#if LWIP_NETBUF_RECVINFO
- if (conn) {
- /* netconn layer enables pktinfo by default, sockets default to off */
- conn->flags &= ~NETCONN_FLAG_PKTINFO;
- }
-#endif /* LWIP_NETBUF_RECVINFO */
- break;
- case SOCK_STREAM:
- conn = netconn_new_with_callback(DOMAIN_TO_NETCONN_TYPE(domain, NETCONN_TCP), DEFAULT_SOCKET_EVENTCB);
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_socket(%s, SOCK_STREAM, %d) = ",
- domain == PF_INET ? "PF_INET" : "UNKNOWN", protocol));
- break;
- default:
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_socket(%d, %d/UNKNOWN, %d) = -1\n",
- domain, type, protocol));
- set_errno(EINVAL);
- return -1;
- }
-
- if (!conn) {
- LWIP_DEBUGF(SOCKETS_DEBUG, ("-1 / ENOBUFS (could not create netconn)\n"));
- set_errno(ENOBUFS);
- return -1;
- }
-
- i = alloc_socket(conn, 0);
-
- if (i == -1) {
- netconn_delete(conn);
- set_errno(ENFILE);
- return -1;
- }
- conn->socket = i;
- done_socket(&sockets[i - LWIP_SOCKET_OFFSET]);
- LWIP_DEBUGF(SOCKETS_DEBUG, ("%d\n", i));
- set_errno(0);
- return i;
-}
-
-ssize_t
-lwip_write(int s, const void *data, size_t size)
-{
- return lwip_send(s, data, size, 0);
-}
-
-ssize_t
-lwip_writev(int s, const struct iovec *iov, int iovcnt)
-{
- struct msghdr msg;
-
- msg.msg_name = NULL;
- msg.msg_namelen = 0;
- /* Hack: we have to cast via number to cast from 'const' pointer to non-const.
- Blame the opengroup standard for this inconsistency. */
- msg.msg_iov = LWIP_CONST_CAST(struct iovec *, iov);
- msg.msg_iovlen = iovcnt;
- msg.msg_control = NULL;
- msg.msg_controllen = 0;
- msg.msg_flags = 0;
- return lwip_sendmsg(s, &msg, 0);
-}
-
-#if LWIP_SOCKET_SELECT || LWIP_SOCKET_POLL
-/* Add select_cb to select_cb_list. */
-static void
-lwip_link_select_cb(struct lwip_select_cb *select_cb)
-{
- LWIP_SOCKET_SELECT_DECL_PROTECT(lev);
-
- /* Protect the select_cb_list */
- LWIP_SOCKET_SELECT_PROTECT(lev);
-
- /* Put this select_cb on top of list */
- select_cb->next = select_cb_list;
- if (select_cb_list != NULL) {
- select_cb_list->prev = select_cb;
- }
- select_cb_list = select_cb;
-#if !LWIP_TCPIP_CORE_LOCKING
- /* Increasing this counter tells select_check_waiters that the list has changed. */
- select_cb_ctr++;
-#endif
-
- /* Now we can safely unprotect */
- LWIP_SOCKET_SELECT_UNPROTECT(lev);
-}
-
-/* Remove select_cb from select_cb_list. */
-static void
-lwip_unlink_select_cb(struct lwip_select_cb *select_cb)
-{
- LWIP_SOCKET_SELECT_DECL_PROTECT(lev);
-
- /* Take us off the list */
- LWIP_SOCKET_SELECT_PROTECT(lev);
- if (select_cb->next != NULL) {
- select_cb->next->prev = select_cb->prev;
- }
- if (select_cb_list == select_cb) {
- LWIP_ASSERT("select_cb->prev == NULL", select_cb->prev == NULL);
- select_cb_list = select_cb->next;
- } else {
- LWIP_ASSERT("select_cb->prev != NULL", select_cb->prev != NULL);
- select_cb->prev->next = select_cb->next;
- }
-#if !LWIP_TCPIP_CORE_LOCKING
- /* Increasing this counter tells select_check_waiters that the list has changed. */
- select_cb_ctr++;
-#endif
- LWIP_SOCKET_SELECT_UNPROTECT(lev);
-}
-#endif /* LWIP_SOCKET_SELECT || LWIP_SOCKET_POLL */
-
-#if LWIP_SOCKET_SELECT
-/**
- * Go through the readset and writeset lists and see which socket of the sockets
- * set in the sets has events. On return, readset, writeset and exceptset have
- * the sockets enabled that had events.
- *
- * @param maxfdp1 the highest socket index in the sets
- * @param readset_in set of sockets to check for read events
- * @param writeset_in set of sockets to check for write events
- * @param exceptset_in set of sockets to check for error events
- * @param readset_out set of sockets that had read events
- * @param writeset_out set of sockets that had write events
- * @param exceptset_out set os sockets that had error events
- * @return number of sockets that had events (read/write/exception) (>= 0)
- */
-static int
-lwip_selscan(int maxfdp1, fd_set *readset_in, fd_set *writeset_in, fd_set *exceptset_in,
- fd_set *readset_out, fd_set *writeset_out, fd_set *exceptset_out)
-{
- int i, nready = 0;
- fd_set lreadset, lwriteset, lexceptset;
- struct lwip_sock *sock;
- SYS_ARCH_DECL_PROTECT(lev);
-
- FD_ZERO(&lreadset);
- FD_ZERO(&lwriteset);
- FD_ZERO(&lexceptset);
-
- /* Go through each socket in each list to count number of sockets which
- currently match */
- for (i = LWIP_SOCKET_OFFSET; i < maxfdp1; i++) {
- /* if this FD is not in the set, continue */
- if (!(readset_in && FD_ISSET(i, readset_in)) &&
- !(writeset_in && FD_ISSET(i, writeset_in)) &&
- !(exceptset_in && FD_ISSET(i, exceptset_in))) {
- continue;
- }
- /* First get the socket's status (protected)... */
- SYS_ARCH_PROTECT(lev);
- sock = tryget_socket_unconn_locked(i);
- if (sock != NULL) {
- void *lastdata = sock->lastdata.pbuf;
- s16_t rcvevent = sock->rcvevent;
- u16_t sendevent = sock->sendevent;
- u16_t errevent = sock->errevent;
- SYS_ARCH_UNPROTECT(lev);
-
- /* ... then examine it: */
- /* See if netconn of this socket is ready for read */
- if (readset_in && FD_ISSET(i, readset_in) && ((lastdata != NULL) || (rcvevent > 0))) {
- FD_SET(i, &lreadset);
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_selscan: fd=%d ready for reading\n", i));
- nready++;
- }
- /* See if netconn of this socket is ready for write */
- if (writeset_in && FD_ISSET(i, writeset_in) && (sendevent != 0)) {
- FD_SET(i, &lwriteset);
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_selscan: fd=%d ready for writing\n", i));
- nready++;
- }
- /* See if netconn of this socket had an error */
- if (exceptset_in && FD_ISSET(i, exceptset_in) && (errevent != 0)) {
- FD_SET(i, &lexceptset);
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_selscan: fd=%d ready for exception\n", i));
- nready++;
- }
- done_socket(sock);
- } else {
- SYS_ARCH_UNPROTECT(lev);
- /* no a valid open socket */
- return -1;
- }
- }
- /* copy local sets to the ones provided as arguments */
- *readset_out = lreadset;
- *writeset_out = lwriteset;
- *exceptset_out = lexceptset;
-
- LWIP_ASSERT("nready >= 0", nready >= 0);
- return nready;
-}
-
-#if LWIP_NETCONN_FULLDUPLEX
-/* Mark all of the set sockets in one of the three fdsets passed to select as used.
- * All sockets are marked (and later unmarked), whether they are open or not.
- * This is OK as lwip_selscan aborts select when non-open sockets are found.
- */
-static void
-lwip_select_inc_sockets_used_set(int maxfdp, fd_set *fdset, fd_set *used_sockets)
-{
- SYS_ARCH_DECL_PROTECT(lev);
- if (fdset) {
- int i;
- for (i = LWIP_SOCKET_OFFSET; i < maxfdp; i++) {
- /* if this FD is in the set, lock it (unless already done) */
- if (FD_ISSET(i, fdset) && !FD_ISSET(i, used_sockets)) {
- struct lwip_sock *sock;
- SYS_ARCH_PROTECT(lev);
- sock = tryget_socket_unconn_locked(i);
- if (sock != NULL) {
- /* leave the socket used until released by lwip_select_dec_sockets_used */
- FD_SET(i, used_sockets);
- }
- SYS_ARCH_UNPROTECT(lev);
- }
- }
- }
-}
-
-/* Mark all sockets passed to select as used to prevent them from being freed
- * from other threads while select is running.
- * Marked sockets are added to 'used_sockets' to mark them only once an be able
- * to unmark them correctly.
- */
-static void
-lwip_select_inc_sockets_used(int maxfdp, fd_set *fdset1, fd_set *fdset2, fd_set *fdset3, fd_set *used_sockets)
-{
- FD_ZERO(used_sockets);
- lwip_select_inc_sockets_used_set(maxfdp, fdset1, used_sockets);
- lwip_select_inc_sockets_used_set(maxfdp, fdset2, used_sockets);
- lwip_select_inc_sockets_used_set(maxfdp, fdset3, used_sockets);
-}
-
-/* Let go all sockets that were marked as used when starting select */
-static void
-lwip_select_dec_sockets_used(int maxfdp, fd_set *used_sockets)
-{
- int i;
- for (i = LWIP_SOCKET_OFFSET; i < maxfdp; i++) {
- /* if this FD is not in the set, continue */
- if (FD_ISSET(i, used_sockets)) {
- struct lwip_sock *sock = tryget_socket_unconn_nouse(i);
- LWIP_ASSERT("socket gone at the end of select", sock != NULL);
- if (sock != NULL) {
- done_socket(sock);
- }
- }
- }
-}
-#else /* LWIP_NETCONN_FULLDUPLEX */
-#define lwip_select_inc_sockets_used(maxfdp1, readset, writeset, exceptset, used_sockets)
-#define lwip_select_dec_sockets_used(maxfdp1, used_sockets)
-#endif /* LWIP_NETCONN_FULLDUPLEX */
-
-int
-lwip_select(int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *exceptset,
- struct timeval *timeout)
-{
- u32_t waitres = 0;
- int nready;
- fd_set lreadset, lwriteset, lexceptset;
- u32_t msectimeout;
- int i;
- int maxfdp2;
-#if LWIP_NETCONN_SEM_PER_THREAD
- int waited = 0;
-#endif
-#if LWIP_NETCONN_FULLDUPLEX
- fd_set used_sockets;
-#endif
- SYS_ARCH_DECL_PROTECT(lev);
-
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_select(%d, %p, %p, %p, tvsec=%"S32_F" tvusec=%"S32_F")\n",
- maxfdp1, (void *)readset, (void *) writeset, (void *) exceptset,
- timeout ? (s32_t)timeout->tv_sec : (s32_t) - 1,
- timeout ? (s32_t)timeout->tv_usec : (s32_t) - 1));
-
- if ((maxfdp1 < 0) || (maxfdp1 > LWIP_SELECT_MAXNFDS)) {
- set_errno(EINVAL);
- return -1;
- }
-
- lwip_select_inc_sockets_used(maxfdp1, readset, writeset, exceptset, &used_sockets);
-
- /* Go through each socket in each list to count number of sockets which
- currently match */
- nready = lwip_selscan(maxfdp1, readset, writeset, exceptset, &lreadset, &lwriteset, &lexceptset);
-
- if (nready < 0) {
- /* one of the sockets in one of the fd_sets was invalid */
- set_errno(EBADF);
- lwip_select_dec_sockets_used(maxfdp1, &used_sockets);
- return -1;
- } else if (nready > 0) {
- /* one or more sockets are set, no need to wait */
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_select: nready=%d\n", nready));
- } else {
- /* If we don't have any current events, then suspend if we are supposed to */
- if (timeout && timeout->tv_sec == 0 && timeout->tv_usec == 0) {
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_select: no timeout, returning 0\n"));
- /* This is OK as the local fdsets are empty and nready is zero,
- or we would have returned earlier. */
- } else {
- /* None ready: add our semaphore to list:
- We don't actually need any dynamic memory. Our entry on the
- list is only valid while we are in this function, so it's ok
- to use local variables (unless we're running in MPU compatible
- mode). */
- API_SELECT_CB_VAR_DECLARE(select_cb);
- API_SELECT_CB_VAR_ALLOC(select_cb, set_errno(ENOMEM); lwip_select_dec_sockets_used(maxfdp1, &used_sockets); return -1);
- memset(&API_SELECT_CB_VAR_REF(select_cb), 0, sizeof(struct lwip_select_cb));
-
- API_SELECT_CB_VAR_REF(select_cb).readset = readset;
- API_SELECT_CB_VAR_REF(select_cb).writeset = writeset;
- API_SELECT_CB_VAR_REF(select_cb).exceptset = exceptset;
-#if LWIP_NETCONN_SEM_PER_THREAD
- API_SELECT_CB_VAR_REF(select_cb).sem = LWIP_NETCONN_THREAD_SEM_GET();
-#else /* LWIP_NETCONN_SEM_PER_THREAD */
- if (sys_sem_new(&API_SELECT_CB_VAR_REF(select_cb).sem, 0) != ERR_OK) {
- /* failed to create semaphore */
- set_errno(ENOMEM);
- lwip_select_dec_sockets_used(maxfdp1, &used_sockets);
- API_SELECT_CB_VAR_FREE(select_cb);
- return -1;
- }
-#endif /* LWIP_NETCONN_SEM_PER_THREAD */
-
- lwip_link_select_cb(&API_SELECT_CB_VAR_REF(select_cb));
-
- /* Increase select_waiting for each socket we are interested in */
- maxfdp2 = maxfdp1;
- for (i = LWIP_SOCKET_OFFSET; i < maxfdp1; i++) {
- if ((readset && FD_ISSET(i, readset)) ||
- (writeset && FD_ISSET(i, writeset)) ||
- (exceptset && FD_ISSET(i, exceptset))) {
- struct lwip_sock *sock;
- SYS_ARCH_PROTECT(lev);
- sock = tryget_socket_unconn_locked(i);
- if (sock != NULL) {
- sock->select_waiting++;
- if (sock->select_waiting == 0) {
- /* overflow - too many threads waiting */
- sock->select_waiting--;
- nready = -1;
- maxfdp2 = i;
- SYS_ARCH_UNPROTECT(lev);
- done_socket(sock);
- set_errno(EBUSY);
- break;
- }
- SYS_ARCH_UNPROTECT(lev);
- done_socket(sock);
- } else {
- /* Not a valid socket */
- nready = -1;
- maxfdp2 = i;
- SYS_ARCH_UNPROTECT(lev);
- set_errno(EBADF);
- break;
- }
- }
- }
-
- if (nready >= 0) {
- /* Call lwip_selscan again: there could have been events between
- the last scan (without us on the list) and putting us on the list! */
- nready = lwip_selscan(maxfdp1, readset, writeset, exceptset, &lreadset, &lwriteset, &lexceptset);
- if (!nready) {
- /* Still none ready, just wait to be woken */
- if (timeout == 0) {
- /* Wait forever */
- msectimeout = 0;
- } else {
- long msecs_long = ((timeout->tv_sec * 1000) + ((timeout->tv_usec + 500) / 1000));
- if (msecs_long <= 0) {
- /* Wait 1ms at least (0 means wait forever) */
- msectimeout = 1;
- } else {
- msectimeout = (u32_t)msecs_long;
- }
- }
-
- waitres = sys_arch_sem_wait(SELECT_SEM_PTR(API_SELECT_CB_VAR_REF(select_cb).sem), msectimeout);
-#if LWIP_NETCONN_SEM_PER_THREAD
- waited = 1;
-#endif
- }
- }
-
- /* Decrease select_waiting for each socket we are interested in */
- for (i = LWIP_SOCKET_OFFSET; i < maxfdp2; i++) {
- if ((readset && FD_ISSET(i, readset)) ||
- (writeset && FD_ISSET(i, writeset)) ||
- (exceptset && FD_ISSET(i, exceptset))) {
- struct lwip_sock *sock;
- SYS_ARCH_PROTECT(lev);
- sock = tryget_socket_unconn_locked(i);
- if (sock != NULL) {
- /* for now, handle select_waiting==0... */
- LWIP_ASSERT("sock->select_waiting > 0", sock->select_waiting > 0);
- if (sock->select_waiting > 0) {
- sock->select_waiting--;
- }
- SYS_ARCH_UNPROTECT(lev);
- done_socket(sock);
- } else {
- SYS_ARCH_UNPROTECT(lev);
- /* Not a valid socket */
- nready = -1;
- set_errno(EBADF);
- }
- }
- }
-
- lwip_unlink_select_cb(&API_SELECT_CB_VAR_REF(select_cb));
-
-#if LWIP_NETCONN_SEM_PER_THREAD
- if (API_SELECT_CB_VAR_REF(select_cb).sem_signalled && (!waited || (waitres == SYS_ARCH_TIMEOUT))) {
- /* don't leave the thread-local semaphore signalled */
- sys_arch_sem_wait(API_SELECT_CB_VAR_REF(select_cb).sem, 1);
- }
-#else /* LWIP_NETCONN_SEM_PER_THREAD */
- sys_sem_free(&API_SELECT_CB_VAR_REF(select_cb).sem);
-#endif /* LWIP_NETCONN_SEM_PER_THREAD */
- API_SELECT_CB_VAR_FREE(select_cb);
-
- if (nready < 0) {
- /* This happens when a socket got closed while waiting */
- lwip_select_dec_sockets_used(maxfdp1, &used_sockets);
- return -1;
- }
-
- if (waitres == SYS_ARCH_TIMEOUT) {
- /* Timeout */
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_select: timeout expired\n"));
- /* This is OK as the local fdsets are empty and nready is zero,
- or we would have returned earlier. */
- } else {
- /* See what's set now after waiting */
- nready = lwip_selscan(maxfdp1, readset, writeset, exceptset, &lreadset, &lwriteset, &lexceptset);
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_select: nready=%d\n", nready));
- }
- }
- }
-
- lwip_select_dec_sockets_used(maxfdp1, &used_sockets);
- set_errno(0);
- if (readset) {
- *readset = lreadset;
- }
- if (writeset) {
- *writeset = lwriteset;
- }
- if (exceptset) {
- *exceptset = lexceptset;
- }
- return nready;
-}
-#endif /* LWIP_SOCKET_SELECT */
-
-#if LWIP_SOCKET_POLL
-/** Options for the lwip_pollscan function. */
-enum lwip_pollscan_opts
-{
- /** Clear revents in each struct pollfd. */
- LWIP_POLLSCAN_CLEAR = 1,
-
- /** Increment select_waiting in each struct lwip_sock. */
- LWIP_POLLSCAN_INC_WAIT = 2,
-
- /** Decrement select_waiting in each struct lwip_sock. */
- LWIP_POLLSCAN_DEC_WAIT = 4
-};
-
-/**
- * Update revents in each struct pollfd.
- * Optionally update select_waiting in struct lwip_sock.
- *
- * @param fds array of structures to update
- * @param nfds number of structures in fds
- * @param opts what to update and how
- * @return number of structures that have revents != 0
- */
-static int
-lwip_pollscan(struct pollfd *fds, nfds_t nfds, enum lwip_pollscan_opts opts)
-{
- int nready = 0;
- nfds_t fdi;
- struct lwip_sock *sock;
- SYS_ARCH_DECL_PROTECT(lev);
-
- /* Go through each struct pollfd in the array. */
- for (fdi = 0; fdi < nfds; fdi++) {
- if ((opts & LWIP_POLLSCAN_CLEAR) != 0) {
- fds[fdi].revents = 0;
- }
-
- /* Negative fd means the caller wants us to ignore this struct.
- POLLNVAL means we already detected that the fd is invalid;
- if another thread has since opened a new socket with that fd,
- we must not use that socket. */
- if (fds[fdi].fd >= 0 && (fds[fdi].revents & POLLNVAL) == 0) {
- /* First get the socket's status (protected)... */
- SYS_ARCH_PROTECT(lev);
- sock = tryget_socket_unconn_locked(fds[fdi].fd);
- if (sock != NULL) {
- void* lastdata = sock->lastdata.pbuf;
- s16_t rcvevent = sock->rcvevent;
- u16_t sendevent = sock->sendevent;
- u16_t errevent = sock->errevent;
-
- if ((opts & LWIP_POLLSCAN_INC_WAIT) != 0) {
- sock->select_waiting++;
- if (sock->select_waiting == 0) {
- /* overflow - too many threads waiting */
- sock->select_waiting--;
- nready = -1;
- SYS_ARCH_UNPROTECT(lev);
- done_socket(sock);
- break;
- }
- } else if ((opts & LWIP_POLLSCAN_DEC_WAIT) != 0) {
- /* for now, handle select_waiting==0... */
- LWIP_ASSERT("sock->select_waiting > 0", sock->select_waiting > 0);
- if (sock->select_waiting > 0) {
- sock->select_waiting--;
- }
- }
- SYS_ARCH_UNPROTECT(lev);
- done_socket(sock);
-
- /* ... then examine it: */
- /* See if netconn of this socket is ready for read */
- if ((fds[fdi].events & POLLIN) != 0 && ((lastdata != NULL) || (rcvevent > 0))) {
- fds[fdi].revents |= POLLIN;
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_pollscan: fd=%d ready for reading\n", fds[fdi].fd));
- }
- /* See if netconn of this socket is ready for write */
- if ((fds[fdi].events & POLLOUT) != 0 && (sendevent != 0)) {
- fds[fdi].revents |= POLLOUT;
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_pollscan: fd=%d ready for writing\n", fds[fdi].fd));
- }
- /* See if netconn of this socket had an error */
- if (errevent != 0) {
- /* POLLERR is output only. */
- fds[fdi].revents |= POLLERR;
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_pollscan: fd=%d ready for exception\n", fds[fdi].fd));
- }
- } else {
- /* Not a valid socket */
- SYS_ARCH_UNPROTECT(lev);
- /* POLLNVAL is output only. */
- fds[fdi].revents |= POLLNVAL;
- return -1;
- }
- }
-
- /* Will return the number of structures that have events,
- not the number of events. */
- if (fds[fdi].revents != 0) {
- nready++;
- }
- }
-
- LWIP_ASSERT("nready >= 0", nready >= 0);
- return nready;
-}
-
-#if LWIP_NETCONN_FULLDUPLEX
-/* Mark all sockets as used.
- *
- * All sockets are marked (and later unmarked), whether they are open or not.
- * This is OK as lwip_pollscan aborts select when non-open sockets are found.
- */
-static void
-lwip_poll_inc_sockets_used(struct pollfd *fds, nfds_t nfds)
-{
- nfds_t fdi;
-
- if(fds) {
- /* Go through each struct pollfd in the array. */
- for (fdi = 0; fdi < nfds; fdi++) {
- /* Increase the reference counter */
- tryget_socket_unconn(fds[fdi].fd);
- }
- }
-}
-
-/* Let go all sockets that were marked as used when starting poll */
-static void
-lwip_poll_dec_sockets_used(struct pollfd *fds, nfds_t nfds)
-{
- nfds_t fdi;
-
- if(fds) {
- /* Go through each struct pollfd in the array. */
- for (fdi = 0; fdi < nfds; fdi++) {
- struct lwip_sock *sock = tryget_socket_unconn_nouse(fds[fdi].fd);
- if (sock != NULL) {
- done_socket(sock);
- }
- }
- }
-}
-#else /* LWIP_NETCONN_FULLDUPLEX */
-#define lwip_poll_inc_sockets_used(fds, nfds)
-#define lwip_poll_dec_sockets_used(fds, nfds)
-#endif /* LWIP_NETCONN_FULLDUPLEX */
-
-int
-lwip_poll(struct pollfd *fds, nfds_t nfds, int timeout)
-{
- u32_t waitres = 0;
- int nready;
- u32_t msectimeout;
-#if LWIP_NETCONN_SEM_PER_THREAD
- int waited = 0;
-#endif
-
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_poll(%p, %d, %d)\n",
- (void*)fds, (int)nfds, timeout));
- LWIP_ERROR("lwip_poll: invalid fds", ((fds != NULL && nfds > 0) || (fds == NULL && nfds == 0)),
- set_errno(EINVAL); return -1;);
-
- lwip_poll_inc_sockets_used(fds, nfds);
-
- /* Go through each struct pollfd to count number of structures
- which currently match */
- nready = lwip_pollscan(fds, nfds, LWIP_POLLSCAN_CLEAR);
-
- if (nready < 0) {
- lwip_poll_dec_sockets_used(fds, nfds);
- return -1;
- }
-
- /* If we don't have any current events, then suspend if we are supposed to */
- if (!nready) {
- API_SELECT_CB_VAR_DECLARE(select_cb);
-
- if (timeout == 0) {
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_poll: no timeout, returning 0\n"));
- goto return_success;
- }
- API_SELECT_CB_VAR_ALLOC(select_cb, set_errno(EAGAIN); lwip_poll_dec_sockets_used(fds, nfds); return -1);
- memset(&API_SELECT_CB_VAR_REF(select_cb), 0, sizeof(struct lwip_select_cb));
-
- /* None ready: add our semaphore to list:
- We don't actually need any dynamic memory. Our entry on the
- list is only valid while we are in this function, so it's ok
- to use local variables. */
-
- API_SELECT_CB_VAR_REF(select_cb).poll_fds = fds;
- API_SELECT_CB_VAR_REF(select_cb).poll_nfds = nfds;
-#if LWIP_NETCONN_SEM_PER_THREAD
- API_SELECT_CB_VAR_REF(select_cb).sem = LWIP_NETCONN_THREAD_SEM_GET();
-#else /* LWIP_NETCONN_SEM_PER_THREAD */
- if (sys_sem_new(&API_SELECT_CB_VAR_REF(select_cb).sem, 0) != ERR_OK) {
- /* failed to create semaphore */
- set_errno(EAGAIN);
- lwip_poll_dec_sockets_used(fds, nfds);
- API_SELECT_CB_VAR_FREE(select_cb);
- return -1;
- }
-#endif /* LWIP_NETCONN_SEM_PER_THREAD */
-
- lwip_link_select_cb(&API_SELECT_CB_VAR_REF(select_cb));
-
- /* Increase select_waiting for each socket we are interested in.
- Also, check for events again: there could have been events between
- the last scan (without us on the list) and putting us on the list! */
- nready = lwip_pollscan(fds, nfds, LWIP_POLLSCAN_INC_WAIT);
-
- if (!nready) {
- /* Still none ready, just wait to be woken */
- if (timeout < 0) {
- /* Wait forever */
- msectimeout = 0;
- } else {
- /* timeout == 0 would have been handled earlier. */
- LWIP_ASSERT("timeout > 0", timeout > 0);
- msectimeout = timeout;
- }
- waitres = sys_arch_sem_wait(SELECT_SEM_PTR(API_SELECT_CB_VAR_REF(select_cb).sem), msectimeout);
-#if LWIP_NETCONN_SEM_PER_THREAD
- waited = 1;
-#endif
- }
-
- /* Decrease select_waiting for each socket we are interested in,
- and check which events occurred while we waited. */
- nready = lwip_pollscan(fds, nfds, LWIP_POLLSCAN_DEC_WAIT);
-
- lwip_unlink_select_cb(&API_SELECT_CB_VAR_REF(select_cb));
-
-#if LWIP_NETCONN_SEM_PER_THREAD
- if (select_cb.sem_signalled && (!waited || (waitres == SYS_ARCH_TIMEOUT))) {
- /* don't leave the thread-local semaphore signalled */
- sys_arch_sem_wait(API_SELECT_CB_VAR_REF(select_cb).sem, 1);
- }
-#else /* LWIP_NETCONN_SEM_PER_THREAD */
- sys_sem_free(&API_SELECT_CB_VAR_REF(select_cb).sem);
-#endif /* LWIP_NETCONN_SEM_PER_THREAD */
- API_SELECT_CB_VAR_FREE(select_cb);
-
- if (nready < 0) {
- /* This happens when a socket got closed while waiting */
- lwip_poll_dec_sockets_used(fds, nfds);
- return -1;
- }
-
- if (waitres == SYS_ARCH_TIMEOUT) {
- /* Timeout */
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_poll: timeout expired\n"));
- goto return_success;
- }
- }
-
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_poll: nready=%d\n", nready));
-return_success:
- lwip_poll_dec_sockets_used(fds, nfds);
- set_errno(0);
- return nready;
-}
-
-/**
- * Check whether event_callback should wake up a thread waiting in
- * lwip_poll.
- */
-static int
-lwip_poll_should_wake(const struct lwip_select_cb *scb, int fd, int has_recvevent, int has_sendevent, int has_errevent)
-{
- nfds_t fdi;
- for (fdi = 0; fdi < scb->poll_nfds; fdi++) {
- const struct pollfd *pollfd = &scb->poll_fds[fdi];
- if (pollfd->fd == fd) {
- /* Do not update pollfd->revents right here;
- that would be a data race because lwip_pollscan
- accesses revents without protecting. */
- if (has_recvevent && (pollfd->events & POLLIN) != 0) {
- return 1;
- }
- if (has_sendevent && (pollfd->events & POLLOUT) != 0) {
- return 1;
- }
- if (has_errevent) {
- /* POLLERR is output only. */
- return 1;
- }
- }
- }
- return 0;
-}
-#endif /* LWIP_SOCKET_POLL */
-
-#if LWIP_SOCKET_SELECT || LWIP_SOCKET_POLL
-/**
- * Callback registered in the netconn layer for each socket-netconn.
- * Processes recvevent (data available) and wakes up tasks waiting for select.
- *
- * @note for LWIP_TCPIP_CORE_LOCKING any caller of this function
- * must have the core lock held when signaling the following events
- * as they might cause select_list_cb to be checked:
- * NETCONN_EVT_RCVPLUS
- * NETCONN_EVT_SENDPLUS
- * NETCONN_EVT_ERROR
- * This requirement will be asserted in select_check_waiters()
- */
-static void
-event_callback(struct netconn *conn, enum netconn_evt evt, u16_t len)
-{
- int s, check_waiters;
- struct lwip_sock *sock;
- SYS_ARCH_DECL_PROTECT(lev);
-
- LWIP_UNUSED_ARG(len);
-
- /* Get socket */
- if (conn) {
- s = conn->socket;
- if (s < 0) {
- /* Data comes in right away after an accept, even though
- * the server task might not have created a new socket yet.
- * Just count down (or up) if that's the case and we
- * will use the data later. Note that only receive events
- * can happen before the new socket is set up. */
- SYS_ARCH_PROTECT(lev);
- if (conn->socket < 0) {
- if (evt == NETCONN_EVT_RCVPLUS) {
- /* conn->socket is -1 on initialization
- lwip_accept adjusts sock->recvevent if conn->socket < -1 */
- conn->socket--;
- }
- SYS_ARCH_UNPROTECT(lev);
- return;
- }
- s = conn->socket;
- SYS_ARCH_UNPROTECT(lev);
- }
-
- sock = get_socket(s);
- if (!sock) {
- return;
- }
- } else {
- return;
- }
-
- check_waiters = 1;
- SYS_ARCH_PROTECT(lev);
- /* Set event as required */
- switch (evt) {
- case NETCONN_EVT_RCVPLUS:
- sock->rcvevent++;
- if (sock->rcvevent > 1) {
- check_waiters = 0;
- }
- break;
- case NETCONN_EVT_RCVMINUS:
- sock->rcvevent--;
- check_waiters = 0;
- break;
- case NETCONN_EVT_SENDPLUS:
- if (sock->sendevent) {
- check_waiters = 0;
- }
- sock->sendevent = 1;
- break;
- case NETCONN_EVT_SENDMINUS:
- sock->sendevent = 0;
- check_waiters = 0;
- break;
- case NETCONN_EVT_ERROR:
- sock->errevent = 1;
- break;
- default:
- LWIP_ASSERT("unknown event", 0);
- break;
- }
-
- if (sock->select_waiting && check_waiters) {
- /* Save which events are active */
- int has_recvevent, has_sendevent, has_errevent;
- has_recvevent = sock->rcvevent > 0;
- has_sendevent = sock->sendevent != 0;
- has_errevent = sock->errevent != 0;
- SYS_ARCH_UNPROTECT(lev);
- /* Check any select calls waiting on this socket */
- select_check_waiters(s, has_recvevent, has_sendevent, has_errevent);
- } else {
- SYS_ARCH_UNPROTECT(lev);
- }
- done_socket(sock);
-}
-
-/**
- * Check if any select waiters are waiting on this socket and its events
- *
- * @note on synchronization of select_cb_list:
- * LWIP_TCPIP_CORE_LOCKING: the select_cb_list must only be accessed while holding
- * the core lock. We do a single pass through the list and signal any waiters.
- * Core lock should already be held when calling here!!!!
-
- * !LWIP_TCPIP_CORE_LOCKING: we use SYS_ARCH_PROTECT but unlock on each iteration
- * of the loop, thus creating a possibility where a thread could modify the
- * select_cb_list during our UNPROTECT/PROTECT. We use a generational counter to
- * detect this change and restart the list walk. The list is expected to be small
- */
-static void select_check_waiters(int s, int has_recvevent, int has_sendevent, int has_errevent)
-{
- struct lwip_select_cb *scb;
-#if !LWIP_TCPIP_CORE_LOCKING
- int last_select_cb_ctr;
- SYS_ARCH_DECL_PROTECT(lev);
-#endif /* !LWIP_TCPIP_CORE_LOCKING */
-
- LWIP_ASSERT_CORE_LOCKED();
-
-#if !LWIP_TCPIP_CORE_LOCKING
- SYS_ARCH_PROTECT(lev);
-again:
- /* remember the state of select_cb_list to detect changes */
- last_select_cb_ctr = select_cb_ctr;
-#endif /* !LWIP_TCPIP_CORE_LOCKING */
- for (scb = select_cb_list; scb != NULL; scb = scb->next) {
- if (scb->sem_signalled == 0) {
- /* semaphore not signalled yet */
- int do_signal = 0;
-#if LWIP_SOCKET_POLL
- if (scb->poll_fds != NULL) {
- do_signal = lwip_poll_should_wake(scb, s, has_recvevent, has_sendevent, has_errevent);
- }
-#endif /* LWIP_SOCKET_POLL */
-#if LWIP_SOCKET_SELECT && LWIP_SOCKET_POLL
- else
-#endif /* LWIP_SOCKET_SELECT && LWIP_SOCKET_POLL */
-#if LWIP_SOCKET_SELECT
- {
- /* Test this select call for our socket */
- if (has_recvevent) {
- if (scb->readset && FD_ISSET(s, scb->readset)) {
- do_signal = 1;
- }
- }
- if (has_sendevent) {
- if (!do_signal && scb->writeset && FD_ISSET(s, scb->writeset)) {
- do_signal = 1;
- }
- }
- if (has_errevent) {
- if (!do_signal && scb->exceptset && FD_ISSET(s, scb->exceptset)) {
- do_signal = 1;
- }
- }
- }
-#endif /* LWIP_SOCKET_SELECT */
- if (do_signal) {
- scb->sem_signalled = 1;
- /* For !LWIP_TCPIP_CORE_LOCKING, we don't call SYS_ARCH_UNPROTECT() before signaling
- the semaphore, as this might lead to the select thread taking itself off the list,
- invalidating the semaphore. */
- sys_sem_signal(SELECT_SEM_PTR(scb->sem));
- }
- }
-#if LWIP_TCPIP_CORE_LOCKING
- }
-#else
- /* unlock interrupts with each step */
- SYS_ARCH_UNPROTECT(lev);
- /* this makes sure interrupt protection time is short */
- SYS_ARCH_PROTECT(lev);
- if (last_select_cb_ctr != select_cb_ctr) {
- /* someone has changed select_cb_list, restart at the beginning */
- goto again;
- }
- /* remember the state of select_cb_list to detect changes */
- last_select_cb_ctr = select_cb_ctr;
- }
- SYS_ARCH_UNPROTECT(lev);
-#endif
-}
-#endif /* LWIP_SOCKET_SELECT || LWIP_SOCKET_POLL */
-
-/**
- * Close one end of a full-duplex connection.
- */
-int
-lwip_shutdown(int s, int how)
-{
- struct lwip_sock *sock;
- err_t err;
- u8_t shut_rx = 0, shut_tx = 0;
-
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_shutdown(%d, how=%d)\n", s, how));
-
- sock = get_socket(s);
- if (!sock) {
- return -1;
- }
-
- if (sock->conn != NULL) {
- if (NETCONNTYPE_GROUP(netconn_type(sock->conn)) != NETCONN_TCP) {
- sock_set_errno(sock, EOPNOTSUPP);
- done_socket(sock);
- return -1;
- }
- } else {
- sock_set_errno(sock, ENOTCONN);
- done_socket(sock);
- return -1;
- }
-
- if (how == SHUT_RD) {
- shut_rx = 1;
- } else if (how == SHUT_WR) {
- shut_tx = 1;
- } else if (how == SHUT_RDWR) {
- shut_rx = 1;
- shut_tx = 1;
- } else {
- sock_set_errno(sock, EINVAL);
- done_socket(sock);
- return -1;
- }
- err = netconn_shutdown(sock->conn, shut_rx, shut_tx);
-
- sock_set_errno(sock, err_to_errno(err));
- done_socket(sock);
- return (err == ERR_OK ? 0 : -1);
-}
-
-static int
-lwip_getaddrname(int s, struct sockaddr *name, socklen_t *namelen, u8_t local)
-{
- struct lwip_sock *sock;
- union sockaddr_aligned saddr;
- ip_addr_t naddr;
- u16_t port;
- err_t err;
-
- sock = get_socket(s);
- if (!sock) {
- return -1;
- }
-
- /* get the IP address and port */
- err = netconn_getaddr(sock->conn, &naddr, &port, local);
- if (err != ERR_OK) {
- sock_set_errno(sock, err_to_errno(err));
- done_socket(sock);
- return -1;
- }
-
-#if LWIP_IPV4 && LWIP_IPV6
- /* Dual-stack: Map IPv4 addresses to IPv4 mapped IPv6 */
- if (NETCONNTYPE_ISIPV6(netconn_type(sock->conn)) &&
- IP_IS_V4_VAL(naddr)) {
- ip4_2_ipv4_mapped_ipv6(ip_2_ip6(&naddr), ip_2_ip4(&naddr));
- IP_SET_TYPE_VAL(naddr, IPADDR_TYPE_V6);
- }
-#endif /* LWIP_IPV4 && LWIP_IPV6 */
-
- IPADDR_PORT_TO_SOCKADDR(&saddr, &naddr, port);
-
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getaddrname(%d, addr=", s));
- ip_addr_debug_print_val(SOCKETS_DEBUG, naddr);
- LWIP_DEBUGF(SOCKETS_DEBUG, (" port=%"U16_F")\n", port));
-
- if (*namelen > saddr.sa.sa_len) {
- *namelen = saddr.sa.sa_len;
- }
- MEMCPY(name, &saddr, *namelen);
-
- sock_set_errno(sock, 0);
- done_socket(sock);
- return 0;
-}
-
-int
-lwip_getpeername(int s, struct sockaddr *name, socklen_t *namelen)
-{
- return lwip_getaddrname(s, name, namelen, 0);
-}
-
-int
-lwip_getsockname(int s, struct sockaddr *name, socklen_t *namelen)
-{
- return lwip_getaddrname(s, name, namelen, 1);
-}
-
-int
-lwip_getsockopt(int s, int level, int optname, void *optval, socklen_t *optlen)
-{
- int err;
- struct lwip_sock *sock = get_socket(s);
-#if !LWIP_TCPIP_CORE_LOCKING
- err_t cberr;
- LWIP_SETGETSOCKOPT_DATA_VAR_DECLARE(data);
-#endif /* !LWIP_TCPIP_CORE_LOCKING */
-
- if (!sock) {
- return -1;
- }
-
- if ((NULL == optval) || (NULL == optlen)) {
- sock_set_errno(sock, EFAULT);
- done_socket(sock);
- return -1;
- }
-
-#if LWIP_TCPIP_CORE_LOCKING
- /* core-locking can just call the -impl function */
- LOCK_TCPIP_CORE();
- err = lwip_getsockopt_impl(s, level, optname, optval, optlen);
- UNLOCK_TCPIP_CORE();
-
-#else /* LWIP_TCPIP_CORE_LOCKING */
-
-#if LWIP_MPU_COMPATIBLE
- /* MPU_COMPATIBLE copies the optval data, so check for max size here */
- if (*optlen > LWIP_SETGETSOCKOPT_MAXOPTLEN) {
- sock_set_errno(sock, ENOBUFS);
- done_socket(sock);
- return -1;
- }
-#endif /* LWIP_MPU_COMPATIBLE */
-
- LWIP_SETGETSOCKOPT_DATA_VAR_ALLOC(data, sock);
- LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).s = s;
- LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).level = level;
- LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).optname = optname;
- LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).optlen = *optlen;
-#if !LWIP_MPU_COMPATIBLE
- LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).optval.p = optval;
-#endif /* !LWIP_MPU_COMPATIBLE */
- LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).err = 0;
-#if LWIP_NETCONN_SEM_PER_THREAD
- LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).completed_sem = LWIP_NETCONN_THREAD_SEM_GET();
-#else
- LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).completed_sem = &sock->conn->op_completed;
-#endif
- cberr = tcpip_callback(lwip_getsockopt_callback, &LWIP_SETGETSOCKOPT_DATA_VAR_REF(data));
- if (cberr != ERR_OK) {
- LWIP_SETGETSOCKOPT_DATA_VAR_FREE(data);
- sock_set_errno(sock, err_to_errno(cberr));
- done_socket(sock);
- return -1;
- }
- sys_arch_sem_wait((sys_sem_t *)(LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).completed_sem), 0);
-
- /* write back optlen and optval */
- *optlen = LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).optlen;
-#if LWIP_MPU_COMPATIBLE
- MEMCPY(optval, LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).optval,
- LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).optlen);
-#endif /* LWIP_MPU_COMPATIBLE */
-
- /* maybe lwip_getsockopt_internal has changed err */
- err = LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).err;
- LWIP_SETGETSOCKOPT_DATA_VAR_FREE(data);
-#endif /* LWIP_TCPIP_CORE_LOCKING */
-
- sock_set_errno(sock, err);
- done_socket(sock);
- return err ? -1 : 0;
-}
-
-#if !LWIP_TCPIP_CORE_LOCKING
-/** lwip_getsockopt_callback: only used without CORE_LOCKING
- * to get into the tcpip_thread
- */
-static void
-lwip_getsockopt_callback(void *arg)
-{
- struct lwip_setgetsockopt_data *data;
- LWIP_ASSERT("arg != NULL", arg != NULL);
- data = (struct lwip_setgetsockopt_data *)arg;
-
- data->err = lwip_getsockopt_impl(data->s, data->level, data->optname,
-#if LWIP_MPU_COMPATIBLE
- data->optval,
-#else /* LWIP_MPU_COMPATIBLE */
- data->optval.p,
-#endif /* LWIP_MPU_COMPATIBLE */
- &data->optlen);
-
- sys_sem_signal((sys_sem_t *)(data->completed_sem));
-}
-#endif /* LWIP_TCPIP_CORE_LOCKING */
-
-static int
-lwip_sockopt_to_ipopt(int optname)
-{
- /* Map SO_* values to our internal SOF_* values
- * We should not rely on #defines in socket.h
- * being in sync with ip.h.
- */
- switch (optname) {
- case SO_BROADCAST:
- return SOF_BROADCAST;
- case SO_KEEPALIVE:
- return SOF_KEEPALIVE;
- case SO_REUSEADDR:
- return SOF_REUSEADDR;
- default:
- LWIP_ASSERT("Unknown socket option", 0);
- return 0;
- }
-}
-
-/** lwip_getsockopt_impl: the actual implementation of getsockopt:
- * same argument as lwip_getsockopt, either called directly or through callback
- */
-static int
-lwip_getsockopt_impl(int s, int level, int optname, void *optval, socklen_t *optlen)
-{
- int err = 0;
- struct lwip_sock *sock = tryget_socket(s);
- if (!sock) {
- return EBADF;
- }
-
-#ifdef LWIP_HOOK_SOCKETS_GETSOCKOPT
- if (LWIP_HOOK_SOCKETS_GETSOCKOPT(s, sock, level, optname, optval, optlen, &err)) {
- return err;
- }
-#endif
-
- switch (level) {
-
- /* Level: SOL_SOCKET */
- case SOL_SOCKET:
- switch (optname) {
-
-#if LWIP_TCP
- case SO_ACCEPTCONN:
- LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB(sock, *optlen, int);
- if (NETCONNTYPE_GROUP(sock->conn->type) != NETCONN_TCP) {
- done_socket(sock);
- return ENOPROTOOPT;
- }
- if ((sock->conn->pcb.tcp != NULL) && (sock->conn->pcb.tcp->state == LISTEN)) {
- *(int *)optval = 1;
- } else {
- *(int *)optval = 0;
- }
- break;
-#endif /* LWIP_TCP */
-
- /* The option flags */
- case SO_BROADCAST:
- case SO_KEEPALIVE:
-#if SO_REUSE
- case SO_REUSEADDR:
-#endif /* SO_REUSE */
- if ((optname == SO_BROADCAST) &&
- (NETCONNTYPE_GROUP(sock->conn->type) != NETCONN_UDP)) {
- done_socket(sock);
- return ENOPROTOOPT;
- }
-
- optname = lwip_sockopt_to_ipopt(optname);
-
- LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB(sock, *optlen, int);
- *(int *)optval = ip_get_option(sock->conn->pcb.ip, optname);
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, SOL_SOCKET, optname=0x%x, ..) = %s\n",
- s, optname, (*(int *)optval ? "on" : "off")));
- break;
-
- case SO_TYPE:
- LWIP_SOCKOPT_CHECK_OPTLEN_CONN(sock, *optlen, int);
- switch (NETCONNTYPE_GROUP(netconn_type(sock->conn))) {
- case NETCONN_RAW:
- *(int *)optval = SOCK_RAW;
- break;
- case NETCONN_TCP:
- *(int *)optval = SOCK_STREAM;
- break;
- case NETCONN_UDP:
- *(int *)optval = SOCK_DGRAM;
- break;
- default: /* unrecognized socket type */
- *(int *)optval = netconn_type(sock->conn);
- LWIP_DEBUGF(SOCKETS_DEBUG,
- ("lwip_getsockopt(%d, SOL_SOCKET, SO_TYPE): unrecognized socket type %d\n",
- s, *(int *)optval));
- } /* switch (netconn_type(sock->conn)) */
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, SOL_SOCKET, SO_TYPE) = %d\n",
- s, *(int *)optval));
- break;
-
- case SO_ERROR:
- LWIP_SOCKOPT_CHECK_OPTLEN(sock, *optlen, int);
- *(int *)optval = err_to_errno(netconn_err(sock->conn));
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, SOL_SOCKET, SO_ERROR) = %d\n",
- s, *(int *)optval));
- break;
-
-#if LWIP_SO_SNDTIMEO
- case SO_SNDTIMEO:
- LWIP_SOCKOPT_CHECK_OPTLEN_CONN(sock, *optlen, LWIP_SO_SNDRCVTIMEO_OPTTYPE);
- LWIP_SO_SNDRCVTIMEO_SET(optval, netconn_get_sendtimeout(sock->conn));
- break;
-#endif /* LWIP_SO_SNDTIMEO */
-#if LWIP_SO_RCVTIMEO
- case SO_RCVTIMEO:
- LWIP_SOCKOPT_CHECK_OPTLEN_CONN(sock, *optlen, LWIP_SO_SNDRCVTIMEO_OPTTYPE);
- LWIP_SO_SNDRCVTIMEO_SET(optval, netconn_get_recvtimeout(sock->conn));
- break;
-#endif /* LWIP_SO_RCVTIMEO */
-#if LWIP_SO_RCVBUF
- case SO_RCVBUF:
- LWIP_SOCKOPT_CHECK_OPTLEN_CONN(sock, *optlen, int);
- *(int *)optval = netconn_get_recvbufsize(sock->conn);
- break;
-#endif /* LWIP_SO_RCVBUF */
-#if LWIP_SO_LINGER
- case SO_LINGER: {
- s16_t conn_linger;
- struct linger *linger = (struct linger *)optval;
- LWIP_SOCKOPT_CHECK_OPTLEN_CONN(sock, *optlen, struct linger);
- conn_linger = sock->conn->linger;
- if (conn_linger >= 0) {
- linger->l_onoff = 1;
- linger->l_linger = (int)conn_linger;
- } else {
- linger->l_onoff = 0;
- linger->l_linger = 0;
- }
- }
- break;
-#endif /* LWIP_SO_LINGER */
-#if LWIP_UDP
- case SO_NO_CHECK:
- LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB_TYPE(sock, *optlen, int, NETCONN_UDP);
-#if LWIP_UDPLITE
- if (udp_is_flag_set(sock->conn->pcb.udp, UDP_FLAGS_UDPLITE)) {
- /* this flag is only available for UDP, not for UDP lite */
- done_socket(sock);
- return EAFNOSUPPORT;
- }
-#endif /* LWIP_UDPLITE */
- *(int *)optval = udp_is_flag_set(sock->conn->pcb.udp, UDP_FLAGS_NOCHKSUM) ? 1 : 0;
- break;
-#endif /* LWIP_UDP*/
- default:
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, SOL_SOCKET, UNIMPL: optname=0x%x, ..)\n",
- s, optname));
- err = ENOPROTOOPT;
- break;
- } /* switch (optname) */
- break;
-
- /* Level: IPPROTO_IP */
- case IPPROTO_IP:
- switch (optname) {
- case IP_TTL:
- LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB(sock, *optlen, int);
- *(int *)optval = sock->conn->pcb.ip->ttl;
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_IP, IP_TTL) = %d\n",
- s, *(int *)optval));
- break;
- case IP_TOS:
- LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB(sock, *optlen, int);
- *(int *)optval = sock->conn->pcb.ip->tos;
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_IP, IP_TOS) = %d\n",
- s, *(int *)optval));
- break;
-#if LWIP_IPV4 && LWIP_MULTICAST_TX_OPTIONS && LWIP_UDP
- case IP_MULTICAST_TTL:
- LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB(sock, *optlen, u8_t);
- if (NETCONNTYPE_GROUP(netconn_type(sock->conn)) != NETCONN_UDP) {
- done_socket(sock);
- return ENOPROTOOPT;
- }
- *(u8_t *)optval = udp_get_multicast_ttl(sock->conn->pcb.udp);
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_IP, IP_MULTICAST_TTL) = %d\n",
- s, *(int *)optval));
- break;
- case IP_MULTICAST_IF:
- LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB(sock, *optlen, struct in_addr);
- if (NETCONNTYPE_GROUP(netconn_type(sock->conn)) != NETCONN_UDP) {
- done_socket(sock);
- return ENOPROTOOPT;
- }
- inet_addr_from_ip4addr((struct in_addr *)optval, udp_get_multicast_netif_addr(sock->conn->pcb.udp));
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_IP, IP_MULTICAST_IF) = 0x%"X32_F"\n",
- s, *(u32_t *)optval));
- break;
- case IP_MULTICAST_LOOP:
- LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB(sock, *optlen, u8_t);
- if ((sock->conn->pcb.udp->flags & UDP_FLAGS_MULTICAST_LOOP) != 0) {
- *(u8_t *)optval = 1;
- } else {
- *(u8_t *)optval = 0;
- }
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_IP, IP_MULTICAST_LOOP) = %d\n",
- s, *(int *)optval));
- break;
-#endif /* LWIP_IPV4 && LWIP_MULTICAST_TX_OPTIONS && LWIP_UDP */
- default:
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_IP, UNIMPL: optname=0x%x, ..)\n",
- s, optname));
- err = ENOPROTOOPT;
- break;
- } /* switch (optname) */
- break;
-
-#if LWIP_TCP
- /* Level: IPPROTO_TCP */
- case IPPROTO_TCP:
- /* Special case: all IPPROTO_TCP option take an int */
- LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB_TYPE(sock, *optlen, int, NETCONN_TCP);
- if (sock->conn->pcb.tcp->state == LISTEN) {
- done_socket(sock);
- return EINVAL;
- }
- switch (optname) {
- case TCP_NODELAY:
- *(int *)optval = tcp_nagle_disabled(sock->conn->pcb.tcp);
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_TCP, TCP_NODELAY) = %s\n",
- s, (*(int *)optval) ? "on" : "off") );
- break;
- case TCP_KEEPALIVE:
- *(int *)optval = (int)sock->conn->pcb.tcp->keep_idle;
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_TCP, TCP_KEEPALIVE) = %d\n",
- s, *(int *)optval));
- break;
-
-#if LWIP_TCP_KEEPALIVE
- case TCP_KEEPIDLE:
- *(int *)optval = (int)(sock->conn->pcb.tcp->keep_idle / 1000);
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_TCP, TCP_KEEPIDLE) = %d\n",
- s, *(int *)optval));
- break;
- case TCP_KEEPINTVL:
- *(int *)optval = (int)(sock->conn->pcb.tcp->keep_intvl / 1000);
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_TCP, TCP_KEEPINTVL) = %d\n",
- s, *(int *)optval));
- break;
- case TCP_KEEPCNT:
- *(int *)optval = (int)sock->conn->pcb.tcp->keep_cnt;
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_TCP, TCP_KEEPCNT) = %d\n",
- s, *(int *)optval));
- break;
-#endif /* LWIP_TCP_KEEPALIVE */
- default:
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_TCP, UNIMPL: optname=0x%x, ..)\n",
- s, optname));
- err = ENOPROTOOPT;
- break;
- } /* switch (optname) */
- break;
-#endif /* LWIP_TCP */
-
-#if LWIP_IPV6
- /* Level: IPPROTO_IPV6 */
- case IPPROTO_IPV6:
- switch (optname) {
- case IPV6_V6ONLY:
- LWIP_SOCKOPT_CHECK_OPTLEN_CONN(sock, *optlen, int);
- *(int *)optval = (netconn_get_ipv6only(sock->conn) ? 1 : 0);
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_IPV6, IPV6_V6ONLY) = %d\n",
- s, *(int *)optval));
- break;
- default:
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_IPV6, UNIMPL: optname=0x%x, ..)\n",
- s, optname));
- err = ENOPROTOOPT;
- break;
- } /* switch (optname) */
- break;
-#endif /* LWIP_IPV6 */
-
-#if LWIP_UDP && LWIP_UDPLITE
- /* Level: IPPROTO_UDPLITE */
- case IPPROTO_UDPLITE:
- /* Special case: all IPPROTO_UDPLITE option take an int */
- LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB(sock, *optlen, int);
- /* If this is no UDP lite socket, ignore any options. */
- if (!NETCONNTYPE_ISUDPLITE(netconn_type(sock->conn))) {
- done_socket(sock);
- return ENOPROTOOPT;
- }
- switch (optname) {
- case UDPLITE_SEND_CSCOV:
- *(int *)optval = sock->conn->pcb.udp->chksum_len_tx;
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_UDPLITE, UDPLITE_SEND_CSCOV) = %d\n",
- s, (*(int *)optval)) );
- break;
- case UDPLITE_RECV_CSCOV:
- *(int *)optval = sock->conn->pcb.udp->chksum_len_rx;
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_UDPLITE, UDPLITE_RECV_CSCOV) = %d\n",
- s, (*(int *)optval)) );
- break;
- default:
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_UDPLITE, UNIMPL: optname=0x%x, ..)\n",
- s, optname));
- err = ENOPROTOOPT;
- break;
- } /* switch (optname) */
- break;
-#endif /* LWIP_UDP */
- /* Level: IPPROTO_RAW */
- case IPPROTO_RAW:
- switch (optname) {
-#if LWIP_IPV6 && LWIP_RAW
- case IPV6_CHECKSUM:
- LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB_TYPE(sock, *optlen, int, NETCONN_RAW);
- if (sock->conn->pcb.raw->chksum_reqd == 0) {
- *(int *)optval = -1;
- } else {
- *(int *)optval = sock->conn->pcb.raw->chksum_offset;
- }
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_RAW, IPV6_CHECKSUM) = %d\n",
- s, (*(int *)optval)) );
- break;
-#endif /* LWIP_IPV6 && LWIP_RAW */
- default:
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, IPPROTO_RAW, UNIMPL: optname=0x%x, ..)\n",
- s, optname));
- err = ENOPROTOOPT;
- break;
- } /* switch (optname) */
- break;
- default:
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, level=0x%x, UNIMPL: optname=0x%x, ..)\n",
- s, level, optname));
- err = ENOPROTOOPT;
- break;
- } /* switch (level) */
-
- done_socket(sock);
- return err;
-}
-
-int
-lwip_setsockopt(int s, int level, int optname, const void *optval, socklen_t optlen)
-{
- int err = 0;
- struct lwip_sock *sock = get_socket(s);
-#if !LWIP_TCPIP_CORE_LOCKING
- err_t cberr;
- LWIP_SETGETSOCKOPT_DATA_VAR_DECLARE(data);
-#endif /* !LWIP_TCPIP_CORE_LOCKING */
-
- if (!sock) {
- return -1;
- }
-
- if (NULL == optval) {
- sock_set_errno(sock, EFAULT);
- done_socket(sock);
- return -1;
- }
-
-#if LWIP_TCPIP_CORE_LOCKING
- /* core-locking can just call the -impl function */
- LOCK_TCPIP_CORE();
- err = lwip_setsockopt_impl(s, level, optname, optval, optlen);
- UNLOCK_TCPIP_CORE();
-
-#else /* LWIP_TCPIP_CORE_LOCKING */
-
-#if LWIP_MPU_COMPATIBLE
- /* MPU_COMPATIBLE copies the optval data, so check for max size here */
- if (optlen > LWIP_SETGETSOCKOPT_MAXOPTLEN) {
- sock_set_errno(sock, ENOBUFS);
- done_socket(sock);
- return -1;
- }
-#endif /* LWIP_MPU_COMPATIBLE */
-
- LWIP_SETGETSOCKOPT_DATA_VAR_ALLOC(data, sock);
- LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).s = s;
- LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).level = level;
- LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).optname = optname;
- LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).optlen = optlen;
-#if LWIP_MPU_COMPATIBLE
- MEMCPY(LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).optval, optval, optlen);
-#else /* LWIP_MPU_COMPATIBLE */
- LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).optval.pc = (const void *)optval;
-#endif /* LWIP_MPU_COMPATIBLE */
- LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).err = 0;
-#if LWIP_NETCONN_SEM_PER_THREAD
- LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).completed_sem = LWIP_NETCONN_THREAD_SEM_GET();
-#else
- LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).completed_sem = &sock->conn->op_completed;
-#endif
- cberr = tcpip_callback(lwip_setsockopt_callback, &LWIP_SETGETSOCKOPT_DATA_VAR_REF(data));
- if (cberr != ERR_OK) {
- LWIP_SETGETSOCKOPT_DATA_VAR_FREE(data);
- sock_set_errno(sock, err_to_errno(cberr));
- done_socket(sock);
- return -1;
- }
- sys_arch_sem_wait((sys_sem_t *)(LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).completed_sem), 0);
-
- /* maybe lwip_getsockopt_internal has changed err */
- err = LWIP_SETGETSOCKOPT_DATA_VAR_REF(data).err;
- LWIP_SETGETSOCKOPT_DATA_VAR_FREE(data);
-#endif /* LWIP_TCPIP_CORE_LOCKING */
-
- sock_set_errno(sock, err);
- done_socket(sock);
- return err ? -1 : 0;
-}
-
-#if !LWIP_TCPIP_CORE_LOCKING
-/** lwip_setsockopt_callback: only used without CORE_LOCKING
- * to get into the tcpip_thread
- */
-static void
-lwip_setsockopt_callback(void *arg)
-{
- struct lwip_setgetsockopt_data *data;
- LWIP_ASSERT("arg != NULL", arg != NULL);
- data = (struct lwip_setgetsockopt_data *)arg;
-
- data->err = lwip_setsockopt_impl(data->s, data->level, data->optname,
-#if LWIP_MPU_COMPATIBLE
- data->optval,
-#else /* LWIP_MPU_COMPATIBLE */
- data->optval.pc,
-#endif /* LWIP_MPU_COMPATIBLE */
- data->optlen);
-
- sys_sem_signal((sys_sem_t *)(data->completed_sem));
-}
-#endif /* LWIP_TCPIP_CORE_LOCKING */
-
-/** lwip_setsockopt_impl: the actual implementation of setsockopt:
- * same argument as lwip_setsockopt, either called directly or through callback
- */
-static int
-lwip_setsockopt_impl(int s, int level, int optname, const void *optval, socklen_t optlen)
-{
- int err = 0;
- struct lwip_sock *sock = tryget_socket(s);
- if (!sock) {
- return EBADF;
- }
-
-#ifdef LWIP_HOOK_SOCKETS_SETSOCKOPT
- if (LWIP_HOOK_SOCKETS_SETSOCKOPT(s, sock, level, optname, optval, optlen, &err)) {
- return err;
- }
-#endif
-
- switch (level) {
-
- /* Level: SOL_SOCKET */
- case SOL_SOCKET:
- switch (optname) {
-
- /* SO_ACCEPTCONN is get-only */
-
- /* The option flags */
- case SO_BROADCAST:
- case SO_KEEPALIVE:
-#if SO_REUSE
- case SO_REUSEADDR:
-#endif /* SO_REUSE */
- if ((optname == SO_BROADCAST) &&
- (NETCONNTYPE_GROUP(sock->conn->type) != NETCONN_UDP)) {
- done_socket(sock);
- return ENOPROTOOPT;
- }
-
- optname = lwip_sockopt_to_ipopt(optname);
-
- LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB(sock, optlen, int);
- if (*(const int *)optval) {
- ip_set_option(sock->conn->pcb.ip, optname);
- } else {
- ip_reset_option(sock->conn->pcb.ip, optname);
- }
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, SOL_SOCKET, optname=0x%x, ..) -> %s\n",
- s, optname, (*(const int *)optval ? "on" : "off")));
- break;
-
- /* SO_TYPE is get-only */
- /* SO_ERROR is get-only */
-
-#if LWIP_SO_SNDTIMEO
- case SO_SNDTIMEO: {
- long ms_long;
- LWIP_SOCKOPT_CHECK_OPTLEN_CONN(sock, optlen, LWIP_SO_SNDRCVTIMEO_OPTTYPE);
- ms_long = LWIP_SO_SNDRCVTIMEO_GET_MS(optval);
- if (ms_long < 0) {
- done_socket(sock);
- return EINVAL;
- }
- netconn_set_sendtimeout(sock->conn, ms_long);
- break;
- }
-#endif /* LWIP_SO_SNDTIMEO */
-#if LWIP_SO_RCVTIMEO
- case SO_RCVTIMEO: {
- long ms_long;
- LWIP_SOCKOPT_CHECK_OPTLEN_CONN(sock, optlen, LWIP_SO_SNDRCVTIMEO_OPTTYPE);
- ms_long = LWIP_SO_SNDRCVTIMEO_GET_MS(optval);
- if (ms_long < 0) {
- done_socket(sock);
- return EINVAL;
- }
- netconn_set_recvtimeout(sock->conn, (u32_t)ms_long);
- break;
- }
-#endif /* LWIP_SO_RCVTIMEO */
-#if LWIP_SO_RCVBUF
- case SO_RCVBUF:
- LWIP_SOCKOPT_CHECK_OPTLEN_CONN(sock, optlen, int);
- netconn_set_recvbufsize(sock->conn, *(const int *)optval);
- break;
-#endif /* LWIP_SO_RCVBUF */
-#if LWIP_SO_LINGER
- case SO_LINGER: {
- const struct linger *linger = (const struct linger *)optval;
- LWIP_SOCKOPT_CHECK_OPTLEN_CONN(sock, optlen, struct linger);
- if (linger->l_onoff) {
- int lingersec = linger->l_linger;
- if (lingersec < 0) {
- done_socket(sock);
- return EINVAL;
- }
- if (lingersec > 0xFFFF) {
- lingersec = 0xFFFF;
- }
- sock->conn->linger = (s16_t)lingersec;
- } else {
- sock->conn->linger = -1;
- }
- }
- break;
-#endif /* LWIP_SO_LINGER */
-#if LWIP_UDP
- case SO_NO_CHECK:
- LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB_TYPE(sock, optlen, int, NETCONN_UDP);
-#if LWIP_UDPLITE
- if (udp_is_flag_set(sock->conn->pcb.udp, UDP_FLAGS_UDPLITE)) {
- /* this flag is only available for UDP, not for UDP lite */
- done_socket(sock);
- return EAFNOSUPPORT;
- }
-#endif /* LWIP_UDPLITE */
- if (*(const int *)optval) {
- udp_set_flags(sock->conn->pcb.udp, UDP_FLAGS_NOCHKSUM);
- } else {
- udp_clear_flags(sock->conn->pcb.udp, UDP_FLAGS_NOCHKSUM);
- }
- break;
-#endif /* LWIP_UDP */
- case SO_BINDTODEVICE: {
- const struct ifreq *iface;
- struct netif *n = NULL;
-
- LWIP_SOCKOPT_CHECK_OPTLEN_CONN(sock, optlen, struct ifreq);
-
- iface = (const struct ifreq *)optval;
- if (iface->ifr_name[0] != 0) {
- n = netif_find(iface->ifr_name);
- if (n == NULL) {
- done_socket(sock);
- return ENODEV;
- }
- }
-
- switch (NETCONNTYPE_GROUP(netconn_type(sock->conn))) {
-#if LWIP_TCP
- case NETCONN_TCP:
- tcp_bind_netif(sock->conn->pcb.tcp, n);
- break;
-#endif
-#if LWIP_UDP
- case NETCONN_UDP:
- udp_bind_netif(sock->conn->pcb.udp, n);
- break;
-#endif
-#if LWIP_RAW
- case NETCONN_RAW:
- raw_bind_netif(sock->conn->pcb.raw, n);
- break;
-#endif
- default:
- LWIP_ASSERT("Unhandled netconn type in SO_BINDTODEVICE", 0);
- break;
- }
- }
- break;
- default:
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, SOL_SOCKET, UNIMPL: optname=0x%x, ..)\n",
- s, optname));
- err = ENOPROTOOPT;
- break;
- } /* switch (optname) */
- break;
-
- /* Level: IPPROTO_IP */
- case IPPROTO_IP:
- switch (optname) {
- case IP_TTL:
- LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB(sock, optlen, int);
- sock->conn->pcb.ip->ttl = (u8_t)(*(const int *)optval);
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, IPPROTO_IP, IP_TTL, ..) -> %d\n",
- s, sock->conn->pcb.ip->ttl));
- break;
- case IP_TOS:
- LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB(sock, optlen, int);
- sock->conn->pcb.ip->tos = (u8_t)(*(const int *)optval);
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, IPPROTO_IP, IP_TOS, ..)-> %d\n",
- s, sock->conn->pcb.ip->tos));
- break;
-#if LWIP_NETBUF_RECVINFO
- case IP_PKTINFO:
- LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB_TYPE(sock, optlen, int, NETCONN_UDP);
- if (*(const int *)optval) {
- sock->conn->flags |= NETCONN_FLAG_PKTINFO;
- } else {
- sock->conn->flags &= ~NETCONN_FLAG_PKTINFO;
- }
- break;
-#endif /* LWIP_NETBUF_RECVINFO */
-#if LWIP_IPV4 && LWIP_MULTICAST_TX_OPTIONS && LWIP_UDP
- case IP_MULTICAST_TTL:
- LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB_TYPE(sock, optlen, u8_t, NETCONN_UDP);
- udp_set_multicast_ttl(sock->conn->pcb.udp, (u8_t)(*(const u8_t *)optval));
- break;
- case IP_MULTICAST_IF: {
- ip4_addr_t if_addr;
- LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB_TYPE(sock, optlen, struct in_addr, NETCONN_UDP);
- inet_addr_to_ip4addr(&if_addr, (const struct in_addr *)optval);
- udp_set_multicast_netif_addr(sock->conn->pcb.udp, &if_addr);
- }
- break;
- case IP_MULTICAST_LOOP:
- LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB_TYPE(sock, optlen, u8_t, NETCONN_UDP);
- if (*(const u8_t *)optval) {
- udp_set_flags(sock->conn->pcb.udp, UDP_FLAGS_MULTICAST_LOOP);
- } else {
- udp_clear_flags(sock->conn->pcb.udp, UDP_FLAGS_MULTICAST_LOOP);
- }
- break;
-#endif /* LWIP_IPV4 && LWIP_MULTICAST_TX_OPTIONS && LWIP_UDP */
-#if LWIP_IGMP
- case IP_ADD_MEMBERSHIP:
- case IP_DROP_MEMBERSHIP: {
- /* If this is a TCP or a RAW socket, ignore these options. */
- err_t igmp_err;
- const struct ip_mreq *imr = (const struct ip_mreq *)optval;
- ip4_addr_t if_addr;
- ip4_addr_t multi_addr;
- LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB_TYPE(sock, optlen, struct ip_mreq, NETCONN_UDP);
- inet_addr_to_ip4addr(&if_addr, &imr->imr_interface);
- inet_addr_to_ip4addr(&multi_addr, &imr->imr_multiaddr);
- if (optname == IP_ADD_MEMBERSHIP) {
- if (!lwip_socket_register_membership(s, &if_addr, &multi_addr)) {
- /* cannot track membership (out of memory) */
- err = ENOMEM;
- igmp_err = ERR_OK;
- } else {
- igmp_err = igmp_joingroup(&if_addr, &multi_addr);
- }
- } else {
- igmp_err = igmp_leavegroup(&if_addr, &multi_addr);
- lwip_socket_unregister_membership(s, &if_addr, &multi_addr);
- }
- if (igmp_err != ERR_OK) {
- err = EADDRNOTAVAIL;
- }
- }
- break;
-#endif /* LWIP_IGMP */
- default:
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, IPPROTO_IP, UNIMPL: optname=0x%x, ..)\n",
- s, optname));
- err = ENOPROTOOPT;
- break;
- } /* switch (optname) */
- break;
-
-#if LWIP_TCP
- /* Level: IPPROTO_TCP */
- case IPPROTO_TCP:
- /* Special case: all IPPROTO_TCP option take an int */
- LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB_TYPE(sock, optlen, int, NETCONN_TCP);
- if (sock->conn->pcb.tcp->state == LISTEN) {
- done_socket(sock);
- return EINVAL;
- }
- switch (optname) {
- case TCP_NODELAY:
- if (*(const int *)optval) {
- tcp_nagle_disable(sock->conn->pcb.tcp);
- } else {
- tcp_nagle_enable(sock->conn->pcb.tcp);
- }
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, IPPROTO_TCP, TCP_NODELAY) -> %s\n",
- s, (*(const int *)optval) ? "on" : "off") );
- break;
- case TCP_KEEPALIVE:
- sock->conn->pcb.tcp->keep_idle = (u32_t)(*(const int *)optval);
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, IPPROTO_TCP, TCP_KEEPALIVE) -> %"U32_F"\n",
- s, sock->conn->pcb.tcp->keep_idle));
- break;
-
-#if LWIP_TCP_KEEPALIVE
- case TCP_KEEPIDLE:
- sock->conn->pcb.tcp->keep_idle = 1000 * (u32_t)(*(const int *)optval);
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, IPPROTO_TCP, TCP_KEEPIDLE) -> %"U32_F"\n",
- s, sock->conn->pcb.tcp->keep_idle));
- break;
- case TCP_KEEPINTVL:
- sock->conn->pcb.tcp->keep_intvl = 1000 * (u32_t)(*(const int *)optval);
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, IPPROTO_TCP, TCP_KEEPINTVL) -> %"U32_F"\n",
- s, sock->conn->pcb.tcp->keep_intvl));
- break;
- case TCP_KEEPCNT:
- sock->conn->pcb.tcp->keep_cnt = (u32_t)(*(const int *)optval);
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, IPPROTO_TCP, TCP_KEEPCNT) -> %"U32_F"\n",
- s, sock->conn->pcb.tcp->keep_cnt));
- break;
-#endif /* LWIP_TCP_KEEPALIVE */
- default:
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, IPPROTO_TCP, UNIMPL: optname=0x%x, ..)\n",
- s, optname));
- err = ENOPROTOOPT;
- break;
- } /* switch (optname) */
- break;
-#endif /* LWIP_TCP*/
-
-#if LWIP_IPV6
- /* Level: IPPROTO_IPV6 */
- case IPPROTO_IPV6:
- switch (optname) {
- case IPV6_V6ONLY:
- LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB(sock, optlen, int);
- if (*(const int *)optval) {
- netconn_set_ipv6only(sock->conn, 1);
- } else {
- netconn_set_ipv6only(sock->conn, 0);
- }
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, IPPROTO_IPV6, IPV6_V6ONLY, ..) -> %d\n",
- s, (netconn_get_ipv6only(sock->conn) ? 1 : 0)));
- break;
-#if LWIP_IPV6_MLD
- case IPV6_JOIN_GROUP:
- case IPV6_LEAVE_GROUP: {
- /* If this is a TCP or a RAW socket, ignore these options. */
- err_t mld6_err;
- struct netif *netif;
- ip6_addr_t multi_addr;
- const struct ipv6_mreq *imr = (const struct ipv6_mreq *)optval;
- LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB_TYPE(sock, optlen, struct ipv6_mreq, NETCONN_UDP);
- inet6_addr_to_ip6addr(&multi_addr, &imr->ipv6mr_multiaddr);
- LWIP_ASSERT("Invalid netif index", imr->ipv6mr_interface <= 0xFFu);
- netif = netif_get_by_index((u8_t)imr->ipv6mr_interface);
- if (netif == NULL) {
- err = EADDRNOTAVAIL;
- break;
- }
-
- if (optname == IPV6_JOIN_GROUP) {
- if (!lwip_socket_register_mld6_membership(s, imr->ipv6mr_interface, &multi_addr)) {
- /* cannot track membership (out of memory) */
- err = ENOMEM;
- mld6_err = ERR_OK;
- } else {
- mld6_err = mld6_joingroup_netif(netif, &multi_addr);
- }
- } else {
- mld6_err = mld6_leavegroup_netif(netif, &multi_addr);
- lwip_socket_unregister_mld6_membership(s, imr->ipv6mr_interface, &multi_addr);
- }
- if (mld6_err != ERR_OK) {
- err = EADDRNOTAVAIL;
- }
- }
- break;
-#endif /* LWIP_IPV6_MLD */
- default:
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, IPPROTO_IPV6, UNIMPL: optname=0x%x, ..)\n",
- s, optname));
- err = ENOPROTOOPT;
- break;
- } /* switch (optname) */
- break;
-#endif /* LWIP_IPV6 */
-
-#if LWIP_UDP && LWIP_UDPLITE
- /* Level: IPPROTO_UDPLITE */
- case IPPROTO_UDPLITE:
- /* Special case: all IPPROTO_UDPLITE option take an int */
- LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB(sock, optlen, int);
- /* If this is no UDP lite socket, ignore any options. */
- if (!NETCONNTYPE_ISUDPLITE(netconn_type(sock->conn))) {
- done_socket(sock);
- return ENOPROTOOPT;
- }
- switch (optname) {
- case UDPLITE_SEND_CSCOV:
- if ((*(const int *)optval != 0) && ((*(const int *)optval < 8) || (*(const int *)optval > 0xffff))) {
- /* don't allow illegal values! */
- sock->conn->pcb.udp->chksum_len_tx = 8;
- } else {
- sock->conn->pcb.udp->chksum_len_tx = (u16_t) * (const int *)optval;
- }
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, IPPROTO_UDPLITE, UDPLITE_SEND_CSCOV) -> %d\n",
- s, (*(const int *)optval)) );
- break;
- case UDPLITE_RECV_CSCOV:
- if ((*(const int *)optval != 0) && ((*(const int *)optval < 8) || (*(const int *)optval > 0xffff))) {
- /* don't allow illegal values! */
- sock->conn->pcb.udp->chksum_len_rx = 8;
- } else {
- sock->conn->pcb.udp->chksum_len_rx = (u16_t) * (const int *)optval;
- }
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, IPPROTO_UDPLITE, UDPLITE_RECV_CSCOV) -> %d\n",
- s, (*(const int *)optval)) );
- break;
- default:
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, IPPROTO_UDPLITE, UNIMPL: optname=0x%x, ..)\n",
- s, optname));
- err = ENOPROTOOPT;
- break;
- } /* switch (optname) */
- break;
-#endif /* LWIP_UDP */
- /* Level: IPPROTO_RAW */
- case IPPROTO_RAW:
- switch (optname) {
-#if LWIP_IPV6 && LWIP_RAW
- case IPV6_CHECKSUM:
- /* It should not be possible to disable the checksum generation with ICMPv6
- * as per RFC 3542 chapter 3.1 */
- if (sock->conn->pcb.raw->protocol == IPPROTO_ICMPV6) {
- done_socket(sock);
- return EINVAL;
- }
-
- LWIP_SOCKOPT_CHECK_OPTLEN_CONN_PCB_TYPE(sock, optlen, int, NETCONN_RAW);
- if (*(const int *)optval < 0) {
- sock->conn->pcb.raw->chksum_reqd = 0;
- } else if (*(const int *)optval & 1) {
- /* Per RFC3542, odd offsets are not allowed */
- done_socket(sock);
- return EINVAL;
- } else {
- sock->conn->pcb.raw->chksum_reqd = 1;
- sock->conn->pcb.raw->chksum_offset = (u16_t) * (const int *)optval;
- }
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, IPPROTO_RAW, IPV6_CHECKSUM, ..) -> %d\n",
- s, sock->conn->pcb.raw->chksum_reqd));
- break;
-#endif /* LWIP_IPV6 && LWIP_RAW */
- default:
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, IPPROTO_RAW, UNIMPL: optname=0x%x, ..)\n",
- s, optname));
- err = ENOPROTOOPT;
- break;
- } /* switch (optname) */
- break;
- default:
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_setsockopt(%d, level=0x%x, UNIMPL: optname=0x%x, ..)\n",
- s, level, optname));
- err = ENOPROTOOPT;
- break;
- } /* switch (level) */
-
- done_socket(sock);
- return err;
-}
-
-int
-lwip_ioctl(int s, long cmd, void *argp)
-{
- struct lwip_sock *sock = get_socket(s);
- u8_t val;
-#if LWIP_SO_RCVBUF
- int recv_avail;
-#endif /* LWIP_SO_RCVBUF */
-
- if (!sock) {
- return -1;
- }
-
- switch (cmd) {
-#if LWIP_SO_RCVBUF || LWIP_FIONREAD_LINUXMODE
- case FIONREAD:
- if (!argp) {
- sock_set_errno(sock, EINVAL);
- done_socket(sock);
- return -1;
- }
-#if LWIP_FIONREAD_LINUXMODE
- if (NETCONNTYPE_GROUP(netconn_type(sock->conn)) != NETCONN_TCP) {
- struct netbuf *nb;
- if (sock->lastdata.netbuf) {
- nb = sock->lastdata.netbuf;
- *((int *)argp) = nb->p->tot_len;
- } else {
- struct netbuf *rxbuf;
- err_t err = netconn_recv_udp_raw_netbuf_flags(sock->conn, &rxbuf, NETCONN_DONTBLOCK);
- if (err != ERR_OK) {
- *((int *)argp) = 0;
- } else {
- sock->lastdata.netbuf = rxbuf;
- *((int *)argp) = rxbuf->p->tot_len;
- }
- }
- done_socket(sock);
- return 0;
- }
-#endif /* LWIP_FIONREAD_LINUXMODE */
-
-#if LWIP_SO_RCVBUF
- /* we come here if either LWIP_FIONREAD_LINUXMODE==0 or this is a TCP socket */
- SYS_ARCH_GET(sock->conn->recv_avail, recv_avail);
- if (recv_avail < 0) {
- recv_avail = 0;
- }
-
- /* Check if there is data left from the last recv operation. /maq 041215 */
- if (sock->lastdata.netbuf) {
- if (NETCONNTYPE_GROUP(netconn_type(sock->conn)) == NETCONN_TCP) {
- recv_avail += sock->lastdata.pbuf->tot_len;
- } else {
- recv_avail += sock->lastdata.netbuf->p->tot_len;
- }
- }
- *((int *)argp) = recv_avail;
-
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_ioctl(%d, FIONREAD, %p) = %"U16_F"\n", s, argp, *((u16_t *)argp)));
- sock_set_errno(sock, 0);
- done_socket(sock);
- return 0;
-#else /* LWIP_SO_RCVBUF */
- break;
-#endif /* LWIP_SO_RCVBUF */
-#endif /* LWIP_SO_RCVBUF || LWIP_FIONREAD_LINUXMODE */
-
- case (long)FIONBIO:
- val = 0;
- if (argp && *(int *)argp) {
- val = 1;
- }
- netconn_set_nonblocking(sock->conn, val);
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_ioctl(%d, FIONBIO, %d)\n", s, val));
- sock_set_errno(sock, 0);
- done_socket(sock);
- return 0;
-
- default:
- break;
- } /* switch (cmd) */
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_ioctl(%d, UNIMPL: 0x%lx, %p)\n", s, cmd, argp));
- sock_set_errno(sock, ENOSYS); /* not yet implemented */
- done_socket(sock);
- return -1;
-}
-
-/** A minimal implementation of fcntl.
- * Currently only the commands F_GETFL and F_SETFL are implemented.
- * The flag O_NONBLOCK and access modes are supported for F_GETFL, only
- * the flag O_NONBLOCK is implemented for F_SETFL.
- */
-int
-lwip_fcntl(int s, int cmd, int val)
-{
- struct lwip_sock *sock = get_socket(s);
- int ret = -1;
- int op_mode = 0;
-
- if (!sock) {
- return -1;
- }
-
- switch (cmd) {
- case F_GETFL:
- ret = netconn_is_nonblocking(sock->conn) ? O_NONBLOCK : 0;
- sock_set_errno(sock, 0);
-
- if (NETCONNTYPE_GROUP(netconn_type(sock->conn)) == NETCONN_TCP) {
-#if LWIP_TCPIP_CORE_LOCKING
- LOCK_TCPIP_CORE();
-#else
- SYS_ARCH_DECL_PROTECT(lev);
- /* the proper thing to do here would be to get into the tcpip_thread,
- but locking should be OK as well since we only *read* some flags */
- SYS_ARCH_PROTECT(lev);
-#endif
-#if LWIP_TCP
- if (sock->conn->pcb.tcp) {
- if (!(sock->conn->pcb.tcp->flags & TF_RXCLOSED)) {
- op_mode |= O_RDONLY;
- }
- if (!(sock->conn->pcb.tcp->flags & TF_FIN)) {
- op_mode |= O_WRONLY;
- }
- }
-#endif
-#if LWIP_TCPIP_CORE_LOCKING
- UNLOCK_TCPIP_CORE();
-#else
- SYS_ARCH_UNPROTECT(lev);
-#endif
- } else {
- op_mode |= O_RDWR;
- }
-
- /* ensure O_RDWR for (O_RDONLY|O_WRONLY) != O_RDWR cases */
- ret |= (op_mode == (O_RDONLY | O_WRONLY)) ? O_RDWR : op_mode;
-
- break;
- case F_SETFL:
- /* Bits corresponding to the file access mode and the file creation flags [..] that are set in arg shall be ignored */
- val &= ~(O_RDONLY | O_WRONLY | O_RDWR);
- if ((val & ~O_NONBLOCK) == 0) {
- /* only O_NONBLOCK, all other bits are zero */
- netconn_set_nonblocking(sock->conn, val & O_NONBLOCK);
- ret = 0;
- sock_set_errno(sock, 0);
- } else {
- sock_set_errno(sock, ENOSYS); /* not yet implemented */
- }
- break;
- default:
- LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_fcntl(%d, UNIMPL: %d, %d)\n", s, cmd, val));
- sock_set_errno(sock, ENOSYS); /* not yet implemented */
- break;
- }
- done_socket(sock);
- return ret;
-}
-
-#if LWIP_COMPAT_SOCKETS == 2 && LWIP_POSIX_SOCKETS_IO_NAMES
-int
-fcntl(int s, int cmd, ...)
-{
- va_list ap;
- int val;
-
- va_start(ap, cmd);
- val = va_arg(ap, int);
- va_end(ap);
- return lwip_fcntl(s, cmd, val);
-}
-#endif
-
-const char *
-lwip_inet_ntop(int af, const void *src, char *dst, socklen_t size)
-{
- const char *ret = NULL;
- int size_int = (int)size;
- if (size_int < 0) {
- set_errno(ENOSPC);
- return NULL;
- }
- switch (af) {
-#if LWIP_IPV4
- case AF_INET:
- ret = ip4addr_ntoa_r((const ip4_addr_t *)src, dst, size_int);
- if (ret == NULL) {
- set_errno(ENOSPC);
- }
- break;
-#endif
-#if LWIP_IPV6
- case AF_INET6:
- ret = ip6addr_ntoa_r((const ip6_addr_t *)src, dst, size_int);
- if (ret == NULL) {
- set_errno(ENOSPC);
- }
- break;
-#endif
- default:
- set_errno(EAFNOSUPPORT);
- break;
- }
- return ret;
-}
-
-int
-lwip_inet_pton(int af, const char *src, void *dst)
-{
- int err;
- switch (af) {
-#if LWIP_IPV4
- case AF_INET:
- err = ip4addr_aton(src, (ip4_addr_t *)dst);
- break;
-#endif
-#if LWIP_IPV6
- case AF_INET6: {
- /* convert into temporary variable since ip6_addr_t might be larger
- than in6_addr when scopes are enabled */
- ip6_addr_t addr;
- err = ip6addr_aton(src, &addr);
- if (err) {
- memcpy(dst, &addr.addr, sizeof(addr.addr));
- }
- break;
- }
-#endif
- default:
- err = -1;
- set_errno(EAFNOSUPPORT);
- break;
- }
- return err;
-}
-
-#if LWIP_IGMP
-/** Register a new IGMP membership. On socket close, the membership is dropped automatically.
- *
- * ATTENTION: this function is called from tcpip_thread (or under CORE_LOCK).
- *
- * @return 1 on success, 0 on failure
- */
-static int
-lwip_socket_register_membership(int s, const ip4_addr_t *if_addr, const ip4_addr_t *multi_addr)
-{
- struct lwip_sock *sock = get_socket(s);
- int i;
-
- if (!sock) {
- return 0;
- }
-
- for (i = 0; i < LWIP_SOCKET_MAX_MEMBERSHIPS; i++) {
- if (socket_ipv4_multicast_memberships[i].sock == NULL) {
- socket_ipv4_multicast_memberships[i].sock = sock;
- ip4_addr_copy(socket_ipv4_multicast_memberships[i].if_addr, *if_addr);
- ip4_addr_copy(socket_ipv4_multicast_memberships[i].multi_addr, *multi_addr);
- done_socket(sock);
- return 1;
- }
- }
- done_socket(sock);
- return 0;
-}
-
-/** Unregister a previously registered membership. This prevents dropping the membership
- * on socket close.
- *
- * ATTENTION: this function is called from tcpip_thread (or under CORE_LOCK).
- */
-static void
-lwip_socket_unregister_membership(int s, const ip4_addr_t *if_addr, const ip4_addr_t *multi_addr)
-{
- struct lwip_sock *sock = get_socket(s);
- int i;
-
- if (!sock) {
- return;
- }
-
- for (i = 0; i < LWIP_SOCKET_MAX_MEMBERSHIPS; i++) {
- if ((socket_ipv4_multicast_memberships[i].sock == sock) &&
- ip4_addr_cmp(&socket_ipv4_multicast_memberships[i].if_addr, if_addr) &&
- ip4_addr_cmp(&socket_ipv4_multicast_memberships[i].multi_addr, multi_addr)) {
- socket_ipv4_multicast_memberships[i].sock = NULL;
- ip4_addr_set_zero(&socket_ipv4_multicast_memberships[i].if_addr);
- ip4_addr_set_zero(&socket_ipv4_multicast_memberships[i].multi_addr);
- break;
- }
- }
- done_socket(sock);
-}
-
-/** Drop all memberships of a socket that were not dropped explicitly via setsockopt.
- *
- * ATTENTION: this function is NOT called from tcpip_thread (or under CORE_LOCK).
- */
-static void
-lwip_socket_drop_registered_memberships(int s)
-{
- struct lwip_sock *sock = get_socket(s);
- int i;
-
- if (!sock) {
- return;
- }
-
- for (i = 0; i < LWIP_SOCKET_MAX_MEMBERSHIPS; i++) {
- if (socket_ipv4_multicast_memberships[i].sock == sock) {
- ip_addr_t multi_addr, if_addr;
- ip_addr_copy_from_ip4(multi_addr, socket_ipv4_multicast_memberships[i].multi_addr);
- ip_addr_copy_from_ip4(if_addr, socket_ipv4_multicast_memberships[i].if_addr);
- socket_ipv4_multicast_memberships[i].sock = NULL;
- ip4_addr_set_zero(&socket_ipv4_multicast_memberships[i].if_addr);
- ip4_addr_set_zero(&socket_ipv4_multicast_memberships[i].multi_addr);
-
- netconn_join_leave_group(sock->conn, &multi_addr, &if_addr, NETCONN_LEAVE);
- }
- }
- done_socket(sock);
-}
-#endif /* LWIP_IGMP */
-
-#if LWIP_IPV6_MLD
-/** Register a new MLD6 membership. On socket close, the membership is dropped automatically.
- *
- * ATTENTION: this function is called from tcpip_thread (or under CORE_LOCK).
- *
- * @return 1 on success, 0 on failure
- */
-static int
-lwip_socket_register_mld6_membership(int s, unsigned int if_idx, const ip6_addr_t *multi_addr)
-{
- struct lwip_sock *sock = get_socket(s);
- int i;
-
- if (!sock) {
- return 0;
- }
-
- for (i = 0; i < LWIP_SOCKET_MAX_MEMBERSHIPS; i++) {
- if (socket_ipv6_multicast_memberships[i].sock == NULL) {
- socket_ipv6_multicast_memberships[i].sock = sock;
- socket_ipv6_multicast_memberships[i].if_idx = (u8_t)if_idx;
- ip6_addr_copy(socket_ipv6_multicast_memberships[i].multi_addr, *multi_addr);
- done_socket(sock);
- return 1;
- }
- }
- done_socket(sock);
- return 0;
-}
-
-/** Unregister a previously registered MLD6 membership. This prevents dropping the membership
- * on socket close.
- *
- * ATTENTION: this function is called from tcpip_thread (or under CORE_LOCK).
- */
-static void
-lwip_socket_unregister_mld6_membership(int s, unsigned int if_idx, const ip6_addr_t *multi_addr)
-{
- struct lwip_sock *sock = get_socket(s);
- int i;
-
- if (!sock) {
- return;
- }
-
- for (i = 0; i < LWIP_SOCKET_MAX_MEMBERSHIPS; i++) {
- if ((socket_ipv6_multicast_memberships[i].sock == sock) &&
- (socket_ipv6_multicast_memberships[i].if_idx == if_idx) &&
- ip6_addr_cmp(&socket_ipv6_multicast_memberships[i].multi_addr, multi_addr)) {
- socket_ipv6_multicast_memberships[i].sock = NULL;
- socket_ipv6_multicast_memberships[i].if_idx = NETIF_NO_INDEX;
- ip6_addr_set_zero(&socket_ipv6_multicast_memberships[i].multi_addr);
- break;
- }
- }
- done_socket(sock);
-}
-
-/** Drop all MLD6 memberships of a socket that were not dropped explicitly via setsockopt.
- *
- * ATTENTION: this function is NOT called from tcpip_thread (or under CORE_LOCK).
- */
-static void
-lwip_socket_drop_registered_mld6_memberships(int s)
-{
- struct lwip_sock *sock = get_socket(s);
- int i;
-
- if (!sock) {
- return;
- }
-
- for (i = 0; i < LWIP_SOCKET_MAX_MEMBERSHIPS; i++) {
- if (socket_ipv6_multicast_memberships[i].sock == sock) {
- ip_addr_t multi_addr;
- u8_t if_idx;
-
- ip_addr_copy_from_ip6(multi_addr, socket_ipv6_multicast_memberships[i].multi_addr);
- if_idx = socket_ipv6_multicast_memberships[i].if_idx;
-
- socket_ipv6_multicast_memberships[i].sock = NULL;
- socket_ipv6_multicast_memberships[i].if_idx = NETIF_NO_INDEX;
- ip6_addr_set_zero(&socket_ipv6_multicast_memberships[i].multi_addr);
-
- netconn_join_leave_group_netif(sock->conn, &multi_addr, if_idx, NETCONN_LEAVE);
- }
- }
- done_socket(sock);
-}
-#endif /* LWIP_IPV6_MLD */
-
-#endif /* LWIP_SOCKET */
diff --git a/third-party/lwip-2.1.2/api/tcpip.c b/third-party/lwip-2.1.2/api/tcpip.c
deleted file mode 100644
index 8ce5e48b1506296a8b776f382745b5f3c415cfa1..0000000000000000000000000000000000000000
--- a/third-party/lwip-2.1.2/api/tcpip.c
+++ /dev/null
@@ -1,661 +0,0 @@
-/**
- * @file
- * Sequential API Main thread module
- *
- */
-
-/*
- * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
- * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
- * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
- * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
- * OF SUCH DAMAGE.
- *
- * This file is part of the lwIP TCP/IP stack.
- *
- * Author: Adam Dunkels
- *
- */
-
-#include "lwip/opt.h"
-
-#if !NO_SYS /* don't build if not configured for use in lwipopts.h */
-
-#include "lwip/priv/tcpip_priv.h"
-#include "lwip/sys.h"
-#include "lwip/memp.h"
-#include "lwip/mem.h"
-#include "lwip/init.h"
-#include "lwip/ip.h"
-#include "lwip/pbuf.h"
-#include "lwip/etharp.h"
-#include "netif/ethernet.h"
-
-#define TCPIP_MSG_VAR_REF(name) API_VAR_REF(name)
-#define TCPIP_MSG_VAR_DECLARE(name) API_VAR_DECLARE(struct tcpip_msg, name)
-#define TCPIP_MSG_VAR_ALLOC(name) API_VAR_ALLOC(struct tcpip_msg, MEMP_TCPIP_MSG_API, name, ERR_MEM)
-#define TCPIP_MSG_VAR_FREE(name) API_VAR_FREE(MEMP_TCPIP_MSG_API, name)
-
-/* global variables */
-static tcpip_init_done_fn tcpip_init_done;
-static void *tcpip_init_done_arg;
-static sys_mbox_t tcpip_mbox;
-
-#if LWIP_TCPIP_CORE_LOCKING
-/** The global semaphore to lock the stack. */
-sys_mutex_t lock_tcpip_core;
-#endif /* LWIP_TCPIP_CORE_LOCKING */
-
-static void tcpip_thread_handle_msg(struct tcpip_msg *msg);
-
-#if !LWIP_TIMERS
-/* wait for a message with timers disabled (e.g. pass a timer-check trigger into tcpip_thread) */
-#define TCPIP_MBOX_FETCH(mbox, msg) sys_mbox_fetch(mbox, msg)
-#else /* !LWIP_TIMERS */
-/* wait for a message, timeouts are processed while waiting */
-#define TCPIP_MBOX_FETCH(mbox, msg) tcpip_timeouts_mbox_fetch(mbox, msg)
-/**
- * Wait (forever) for a message to arrive in an mbox.
- * While waiting, timeouts are processed.
- *
- * @param mbox the mbox to fetch the message from
- * @param msg the place to store the message
- */
-static void
-tcpip_timeouts_mbox_fetch(sys_mbox_t *mbox, void **msg)
-{
- u32_t sleeptime, res;
-
-again:
- LWIP_ASSERT_CORE_LOCKED();
-
- sleeptime = sys_timeouts_sleeptime();
- if (sleeptime == SYS_TIMEOUTS_SLEEPTIME_INFINITE) {
- UNLOCK_TCPIP_CORE();
- sys_arch_mbox_fetch(mbox, msg, 0);
- LOCK_TCPIP_CORE();
- return;
- } else if (sleeptime == 0) {
- sys_check_timeouts();
- /* We try again to fetch a message from the mbox. */
- goto again;
- }
-
- UNLOCK_TCPIP_CORE();
- res = sys_arch_mbox_fetch(mbox, msg, sleeptime);
- LOCK_TCPIP_CORE();
- if (res == SYS_ARCH_TIMEOUT) {
- /* If a SYS_ARCH_TIMEOUT value is returned, a timeout occurred
- before a message could be fetched. */
- sys_check_timeouts();
- /* We try again to fetch a message from the mbox. */
- goto again;
- }
-}
-#endif /* !LWIP_TIMERS */
-
-/**
- * The main lwIP thread. This thread has exclusive access to lwIP core functions
- * (unless access to them is not locked). Other threads communicate with this
- * thread using message boxes.
- *
- * It also starts all the timers to make sure they are running in the right
- * thread context.
- *
- * @param arg unused argument
- */
-static void
-tcpip_thread(void *arg)
-{
- struct tcpip_msg *msg;
- LWIP_UNUSED_ARG(arg);
-
- LWIP_MARK_TCPIP_THREAD();
-
- LOCK_TCPIP_CORE();
- if (tcpip_init_done != NULL) {
- tcpip_init_done(tcpip_init_done_arg);
- }
-
- while (1) { /* MAIN Loop */
- LWIP_TCPIP_THREAD_ALIVE();
- /* wait for a message, timeouts are processed while waiting */
- TCPIP_MBOX_FETCH(&tcpip_mbox, (void **)&msg);
- if (msg == NULL) {
- LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: invalid message: NULL\n"));
- LWIP_ASSERT("tcpip_thread: invalid message", 0);
- continue;
- }
- tcpip_thread_handle_msg(msg);
- }
-}
-
-/* Handle a single tcpip_msg
- * This is in its own function for access by tests only.
- */
-static void
-tcpip_thread_handle_msg(struct tcpip_msg *msg)
-{
- switch (msg->type) {
-#if !LWIP_TCPIP_CORE_LOCKING
- case TCPIP_MSG_API:
- LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: API message %p\n", (void *)msg));
- msg->msg.api_msg.function(msg->msg.api_msg.msg);
- break;
- case TCPIP_MSG_API_CALL:
- LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: API CALL message %p\n", (void *)msg));
- msg->msg.api_call.arg->err = msg->msg.api_call.function(msg->msg.api_call.arg);
- sys_sem_signal(msg->msg.api_call.sem);
- break;
-#endif /* !LWIP_TCPIP_CORE_LOCKING */
-
-#if !LWIP_TCPIP_CORE_LOCKING_INPUT
- case TCPIP_MSG_INPKT:
- LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: PACKET %p\n", (void *)msg));
- if (msg->msg.inp.input_fn(msg->msg.inp.p, msg->msg.inp.netif) != ERR_OK) {
- pbuf_free(msg->msg.inp.p);
- }
- memp_free(MEMP_TCPIP_MSG_INPKT, msg);
- break;
-#endif /* !LWIP_TCPIP_CORE_LOCKING_INPUT */
-
-#if LWIP_TCPIP_TIMEOUT && LWIP_TIMERS
- case TCPIP_MSG_TIMEOUT:
- LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: TIMEOUT %p\n", (void *)msg));
- sys_timeout(msg->msg.tmo.msecs, msg->msg.tmo.h, msg->msg.tmo.arg);
- memp_free(MEMP_TCPIP_MSG_API, msg);
- break;
- case TCPIP_MSG_UNTIMEOUT:
- LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: UNTIMEOUT %p\n", (void *)msg));
- sys_untimeout(msg->msg.tmo.h, msg->msg.tmo.arg);
- memp_free(MEMP_TCPIP_MSG_API, msg);
- break;
-#endif /* LWIP_TCPIP_TIMEOUT && LWIP_TIMERS */
-
- case TCPIP_MSG_CALLBACK:
- LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: CALLBACK %p\n", (void *)msg));
- msg->msg.cb.function(msg->msg.cb.ctx);
- memp_free(MEMP_TCPIP_MSG_API, msg);
- break;
-
- case TCPIP_MSG_CALLBACK_STATIC:
- LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: CALLBACK_STATIC %p\n", (void *)msg));
- msg->msg.cb.function(msg->msg.cb.ctx);
- break;
-
- default:
- LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: invalid message: %d\n", msg->type));
- LWIP_ASSERT("tcpip_thread: invalid message", 0);
- break;
- }
-}
-
-#ifdef TCPIP_THREAD_TEST
-/** Work on queued items in single-threaded test mode */
-int
-tcpip_thread_poll_one(void)
-{
- int ret = 0;
- struct tcpip_msg *msg;
-
- if (sys_arch_mbox_tryfetch(&tcpip_mbox, (void **)&msg) != SYS_ARCH_TIMEOUT) {
- LOCK_TCPIP_CORE();
- if (msg != NULL) {
- tcpip_thread_handle_msg(msg);
- ret = 1;
- }
- UNLOCK_TCPIP_CORE();
- }
- return ret;
-}
-#endif
-
-/**
- * Pass a received packet to tcpip_thread for input processing
- *
- * @param p the received packet
- * @param inp the network interface on which the packet was received
- * @param input_fn input function to call
- */
-err_t
-tcpip_inpkt(struct pbuf *p, struct netif *inp, netif_input_fn input_fn)
-{
-#if LWIP_TCPIP_CORE_LOCKING_INPUT
- err_t ret;
- LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_inpkt: PACKET %p/%p\n", (void *)p, (void *)inp));
- LOCK_TCPIP_CORE();
- ret = input_fn(p, inp);
- UNLOCK_TCPIP_CORE();
- return ret;
-#else /* LWIP_TCPIP_CORE_LOCKING_INPUT */
- struct tcpip_msg *msg;
-
- LWIP_ASSERT("Invalid mbox", sys_mbox_valid_val(tcpip_mbox));
-
- msg = (struct tcpip_msg *)memp_malloc(MEMP_TCPIP_MSG_INPKT);
- if (msg == NULL) {
- return ERR_MEM;
- }
-
- msg->type = TCPIP_MSG_INPKT;
- msg->msg.inp.p = p;
- msg->msg.inp.netif = inp;
- msg->msg.inp.input_fn = input_fn;
- if (sys_mbox_trypost(&tcpip_mbox, msg) != ERR_OK) {
- memp_free(MEMP_TCPIP_MSG_INPKT, msg);
- return ERR_MEM;
- }
- return ERR_OK;
-#endif /* LWIP_TCPIP_CORE_LOCKING_INPUT */
-}
-
-/**
- * @ingroup lwip_os
- * Pass a received packet to tcpip_thread for input processing with
- * ethernet_input or ip_input. Don't call directly, pass to netif_add()
- * and call netif->input().
- *
- * @param p the received packet, p->payload pointing to the Ethernet header or
- * to an IP header (if inp doesn't have NETIF_FLAG_ETHARP or
- * NETIF_FLAG_ETHERNET flags)
- * @param inp the network interface on which the packet was received
- */
-err_t
-tcpip_input(struct pbuf *p, struct netif *inp)
-{
-#if LWIP_ETHERNET
- if (inp->flags & (NETIF_FLAG_ETHARP | NETIF_FLAG_ETHERNET)) {
- return tcpip_inpkt(p, inp, ethernet_input);
- } else
-#endif /* LWIP_ETHERNET */
- return tcpip_inpkt(p, inp, ip_input);
-}
-
-/**
- * @ingroup lwip_os
- * Call a specific function in the thread context of
- * tcpip_thread for easy access synchronization.
- * A function called in that way may access lwIP core code
- * without fearing concurrent access.
- * Blocks until the request is posted.
- * Must not be called from interrupt context!
- *
- * @param function the function to call
- * @param ctx parameter passed to f
- * @return ERR_OK if the function was called, another err_t if not
- *
- * @see tcpip_try_callback
- */
-err_t
-tcpip_callback(tcpip_callback_fn function, void *ctx)
-{
- struct tcpip_msg *msg;
-
- LWIP_ASSERT("Invalid mbox", sys_mbox_valid_val(tcpip_mbox));
-
- msg = (struct tcpip_msg *)memp_malloc(MEMP_TCPIP_MSG_API);
- if (msg == NULL) {
- return ERR_MEM;
- }
-
- msg->type = TCPIP_MSG_CALLBACK;
- msg->msg.cb.function = function;
- msg->msg.cb.ctx = ctx;
-
- sys_mbox_post(&tcpip_mbox, msg);
- return ERR_OK;
-}
-
-/**
- * @ingroup lwip_os
- * Call a specific function in the thread context of
- * tcpip_thread for easy access synchronization.
- * A function called in that way may access lwIP core code
- * without fearing concurrent access.
- * Does NOT block when the request cannot be posted because the
- * tcpip_mbox is full, but returns ERR_MEM instead.
- * Can be called from interrupt context.
- *
- * @param function the function to call
- * @param ctx parameter passed to f
- * @return ERR_OK if the function was called, another err_t if not
- *
- * @see tcpip_callback
- */
-err_t
-tcpip_try_callback(tcpip_callback_fn function, void *ctx)
-{
- struct tcpip_msg *msg;
-
- LWIP_ASSERT("Invalid mbox", sys_mbox_valid_val(tcpip_mbox));
-
- msg = (struct tcpip_msg *)memp_malloc(MEMP_TCPIP_MSG_API);
- if (msg == NULL) {
- return ERR_MEM;
- }
-
- msg->type = TCPIP_MSG_CALLBACK;
- msg->msg.cb.function = function;
- msg->msg.cb.ctx = ctx;
-
- if (sys_mbox_trypost(&tcpip_mbox, msg) != ERR_OK) {
- memp_free(MEMP_TCPIP_MSG_API, msg);
- return ERR_MEM;
- }
- return ERR_OK;
-}
-
-#if LWIP_TCPIP_TIMEOUT && LWIP_TIMERS
-/**
- * call sys_timeout in tcpip_thread
- *
- * @param msecs time in milliseconds for timeout
- * @param h function to be called on timeout
- * @param arg argument to pass to timeout function h
- * @return ERR_MEM on memory error, ERR_OK otherwise
- */
-err_t
-tcpip_timeout(u32_t msecs, sys_timeout_handler h, void *arg)
-{
- struct tcpip_msg *msg;
-
- LWIP_ASSERT("Invalid mbox", sys_mbox_valid_val(tcpip_mbox));
-
- msg = (struct tcpip_msg *)memp_malloc(MEMP_TCPIP_MSG_API);
- if (msg == NULL) {
- return ERR_MEM;
- }
-
- msg->type = TCPIP_MSG_TIMEOUT;
- msg->msg.tmo.msecs = msecs;
- msg->msg.tmo.h = h;
- msg->msg.tmo.arg = arg;
- sys_mbox_post(&tcpip_mbox, msg);
- return ERR_OK;
-}
-
-/**
- * call sys_untimeout in tcpip_thread
- *
- * @param h function to be called on timeout
- * @param arg argument to pass to timeout function h
- * @return ERR_MEM on memory error, ERR_OK otherwise
- */
-err_t
-tcpip_untimeout(sys_timeout_handler h, void *arg)
-{
- struct tcpip_msg *msg;
-
- LWIP_ASSERT("Invalid mbox", sys_mbox_valid_val(tcpip_mbox));
-
- msg = (struct tcpip_msg *)memp_malloc(MEMP_TCPIP_MSG_API);
- if (msg == NULL) {
- return ERR_MEM;
- }
-
- msg->type = TCPIP_MSG_UNTIMEOUT;
- msg->msg.tmo.h = h;
- msg->msg.tmo.arg = arg;
- sys_mbox_post(&tcpip_mbox, msg);
- return ERR_OK;
-}
-#endif /* LWIP_TCPIP_TIMEOUT && LWIP_TIMERS */
-
-
-/**
- * Sends a message to TCPIP thread to call a function. Caller thread blocks on
- * on a provided semaphore, which ist NOT automatically signalled by TCPIP thread,
- * this has to be done by the user.
- * It is recommended to use LWIP_TCPIP_CORE_LOCKING since this is the way
- * with least runtime overhead.
- *
- * @param fn function to be called from TCPIP thread
- * @param apimsg argument to API function
- * @param sem semaphore to wait on
- * @return ERR_OK if the function was called, another err_t if not
- */
-err_t
-tcpip_send_msg_wait_sem(tcpip_callback_fn fn, void *apimsg, sys_sem_t *sem)
-{
-#if LWIP_TCPIP_CORE_LOCKING
- LWIP_UNUSED_ARG(sem);
- LOCK_TCPIP_CORE();
- fn(apimsg);
- UNLOCK_TCPIP_CORE();
- return ERR_OK;
-#else /* LWIP_TCPIP_CORE_LOCKING */
- TCPIP_MSG_VAR_DECLARE(msg);
-
- LWIP_ASSERT("semaphore not initialized", sys_sem_valid(sem));
- LWIP_ASSERT("Invalid mbox", sys_mbox_valid_val(tcpip_mbox));
-
- TCPIP_MSG_VAR_ALLOC(msg);
- TCPIP_MSG_VAR_REF(msg).type = TCPIP_MSG_API;
- TCPIP_MSG_VAR_REF(msg).msg.api_msg.function = fn;
- TCPIP_MSG_VAR_REF(msg).msg.api_msg.msg = apimsg;
- sys_mbox_post(&tcpip_mbox, &TCPIP_MSG_VAR_REF(msg));
- sys_arch_sem_wait(sem, 0);
- TCPIP_MSG_VAR_FREE(msg);
- return ERR_OK;
-#endif /* LWIP_TCPIP_CORE_LOCKING */
-}
-
-/**
- * Synchronously calls function in TCPIP thread and waits for its completion.
- * It is recommended to use LWIP_TCPIP_CORE_LOCKING (preferred) or
- * LWIP_NETCONN_SEM_PER_THREAD.
- * If not, a semaphore is created and destroyed on every call which is usually
- * an expensive/slow operation.
- * @param fn Function to call
- * @param call Call parameters
- * @return Return value from tcpip_api_call_fn
- */
-err_t
-tcpip_api_call(tcpip_api_call_fn fn, struct tcpip_api_call_data *call)
-{
-#if LWIP_TCPIP_CORE_LOCKING
- err_t err;
- LOCK_TCPIP_CORE();
- err = fn(call);
- UNLOCK_TCPIP_CORE();
- return err;
-#else /* LWIP_TCPIP_CORE_LOCKING */
- TCPIP_MSG_VAR_DECLARE(msg);
-
-#if !LWIP_NETCONN_SEM_PER_THREAD
- err_t err = sys_sem_new(&call->sem, 0);
- if (err != ERR_OK) {
- return err;
- }
-#endif /* LWIP_NETCONN_SEM_PER_THREAD */
-
- LWIP_ASSERT("Invalid mbox", sys_mbox_valid_val(tcpip_mbox));
-
- TCPIP_MSG_VAR_ALLOC(msg);
- TCPIP_MSG_VAR_REF(msg).type = TCPIP_MSG_API_CALL;
- TCPIP_MSG_VAR_REF(msg).msg.api_call.arg = call;
- TCPIP_MSG_VAR_REF(msg).msg.api_call.function = fn;
-#if LWIP_NETCONN_SEM_PER_THREAD
- TCPIP_MSG_VAR_REF(msg).msg.api_call.sem = LWIP_NETCONN_THREAD_SEM_GET();
-#else /* LWIP_NETCONN_SEM_PER_THREAD */
- TCPIP_MSG_VAR_REF(msg).msg.api_call.sem = &call->sem;
-#endif /* LWIP_NETCONN_SEM_PER_THREAD */
- sys_mbox_post(&tcpip_mbox, &TCPIP_MSG_VAR_REF(msg));
- sys_arch_sem_wait(TCPIP_MSG_VAR_REF(msg).msg.api_call.sem, 0);
- TCPIP_MSG_VAR_FREE(msg);
-
-#if !LWIP_NETCONN_SEM_PER_THREAD
- sys_sem_free(&call->sem);
-#endif /* LWIP_NETCONN_SEM_PER_THREAD */
-
- return call->err;
-#endif /* LWIP_TCPIP_CORE_LOCKING */
-}
-
-/**
- * @ingroup lwip_os
- * Allocate a structure for a static callback message and initialize it.
- * The message has a special type such that lwIP never frees it.
- * This is intended to be used to send "static" messages from interrupt context,
- * e.g. the message is allocated once and posted several times from an IRQ
- * using tcpip_callbackmsg_trycallback().
- * Example usage: Trigger execution of an ethernet IRQ DPC routine in lwIP thread context.
- *
- * @param function the function to call
- * @param ctx parameter passed to function
- * @return a struct pointer to pass to tcpip_callbackmsg_trycallback().
- *
- * @see tcpip_callbackmsg_trycallback()
- * @see tcpip_callbackmsg_delete()
- */
-struct tcpip_callback_msg *
-tcpip_callbackmsg_new(tcpip_callback_fn function, void *ctx)
-{
- struct tcpip_msg *msg = (struct tcpip_msg *)memp_malloc(MEMP_TCPIP_MSG_API);
- if (msg == NULL) {
- return NULL;
- }
- msg->type = TCPIP_MSG_CALLBACK_STATIC;
- msg->msg.cb.function = function;
- msg->msg.cb.ctx = ctx;
- return (struct tcpip_callback_msg *)msg;
-}
-
-/**
- * @ingroup lwip_os
- * Free a callback message allocated by tcpip_callbackmsg_new().
- *
- * @param msg the message to free
- *
- * @see tcpip_callbackmsg_new()
- */
-void
-tcpip_callbackmsg_delete(struct tcpip_callback_msg *msg)
-{
- memp_free(MEMP_TCPIP_MSG_API, msg);
-}
-
-/**
- * @ingroup lwip_os
- * Try to post a callback-message to the tcpip_thread tcpip_mbox.
- *
- * @param msg pointer to the message to post
- * @return sys_mbox_trypost() return code
- *
- * @see tcpip_callbackmsg_new()
- */
-err_t
-tcpip_callbackmsg_trycallback(struct tcpip_callback_msg *msg)
-{
- LWIP_ASSERT("Invalid mbox", sys_mbox_valid_val(tcpip_mbox));
- return sys_mbox_trypost(&tcpip_mbox, msg);
-}
-
-/**
- * @ingroup lwip_os
- * Try to post a callback-message to the tcpip_thread mbox.
- * Same as @ref tcpip_callbackmsg_trycallback but calls sys_mbox_trypost_fromisr(),
- * mainly to help FreeRTOS, where calls differ between task level and ISR level.
- *
- * @param msg pointer to the message to post
- * @return sys_mbox_trypost_fromisr() return code (without change, so this
- * knowledge can be used to e.g. propagate "bool needs_scheduling")
- *
- * @see tcpip_callbackmsg_new()
- */
-err_t
-tcpip_callbackmsg_trycallback_fromisr(struct tcpip_callback_msg *msg)
-{
- LWIP_ASSERT("Invalid mbox", sys_mbox_valid_val(tcpip_mbox));
- return sys_mbox_trypost_fromisr(&tcpip_mbox, msg);
-}
-
-/**
- * @ingroup lwip_os
- * Initialize this module:
- * - initialize all sub modules
- * - start the tcpip_thread
- *
- * @param initfunc a function to call when tcpip_thread is running and finished initializing
- * @param arg argument to pass to initfunc
- */
-void
-tcpip_init(tcpip_init_done_fn initfunc, void *arg)
-{
-
- lwip_init();
-
- tcpip_init_done = initfunc;
- tcpip_init_done_arg = arg;
- if (sys_mbox_new(&tcpip_mbox, TCPIP_MBOX_SIZE) != ERR_OK) {
- LWIP_ASSERT("failed to create tcpip_thread mbox", 0);
- }
-
-#if LWIP_TCPIP_CORE_LOCKING
- if (sys_mutex_new(&lock_tcpip_core) != ERR_OK) {
- LWIP_ASSERT("failed to create lock_tcpip_core", 0);
- }
-#endif /* LWIP_TCPIP_CORE_LOCKING */
-
- sys_thread_new(TCPIP_THREAD_NAME, tcpip_thread, NULL, TCPIP_THREAD_STACKSIZE, TCPIP_THREAD_PRIO);
-
-}
-
-/**
- * Simple callback function used with tcpip_callback to free a pbuf
- * (pbuf_free has a wrong signature for tcpip_callback)
- *
- * @param p The pbuf (chain) to be dereferenced.
- */
-static void
-pbuf_free_int(void *p)
-{
- struct pbuf *q = (struct pbuf *)p;
- pbuf_free(q);
-}
-
-/**
- * A simple wrapper function that allows you to free a pbuf from interrupt context.
- *
- * @param p The pbuf (chain) to be dereferenced.
- * @return ERR_OK if callback could be enqueued, an err_t if not
- */
-err_t
-pbuf_free_callback(struct pbuf *p)
-{
- return tcpip_try_callback(pbuf_free_int, p);
-}
-
-/**
- * A simple wrapper function that allows you to free heap memory from
- * interrupt context.
- *
- * @param m the heap memory to free
- * @return ERR_OK if callback could be enqueued, an err_t if not
- */
-err_t
-mem_free_callback(void *m)
-{
- return tcpip_try_callback(mem_free, m);
-}
-
-#endif /* !NO_SYS */
diff --git a/third-party/lwip-2.1.2/apps/ping/ping.c b/third-party/lwip-2.1.2/apps/ping/ping.c
deleted file mode 100644
index fd8b0e26de078a99f6b67291517af82435b34249..0000000000000000000000000000000000000000
--- a/third-party/lwip-2.1.2/apps/ping/ping.c
+++ /dev/null
@@ -1,482 +0,0 @@
-/**
- * @file
- * Ping sender module
- *
- */
-
-/*
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
- * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
- * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
- * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
- * OF SUCH DAMAGE.
- *
- * This file is part of the lwIP TCP/IP stack.
- *
- */
-
-/**
- * This is an example of a "ping" sender (with raw API and socket API).
- * It can be used as a start point to maintain opened a network connection, or
- * like a network "watchdog" for your device.
- *
- */
-
-#include "lwip/opt.h"
-#include "strto.h"
-#if LWIP_RAW /* don't build if not configured for use in lwipopts.h */
-
-#include "ping.h"
-
-#include "lwip/mem.h"
-#include "lwip/raw.h"
-#include "lwip/icmp.h"
-#include "lwip/netif.h"
-#include "lwip/sys.h"
-#include "lwip/timeouts.h"
-#include "lwip/inet_chksum.h"
-#include "lwip/prot/ip4.h"
-
-#if PING_USE_SOCKETS
-#include "lwip/sockets.h"
-#include
-#include "lwip/inet.h"
-#include
-#endif /* PING_USE_SOCKETS */
-
-#include "../src/shell.h"
-
-
-/**
- * PING_DEBUG: Enable debugging for PING.
- */
-#ifndef PING_DEBUG
-#define PING_DEBUG LWIP_DBG_ON
-#endif
-
-/** ping receive timeout - in milliseconds */
-#ifndef PING_RCV_TIMEO
-#define PING_RCV_TIMEO 1000
-#endif
-
-/** ping delay - in milliseconds */
-#ifndef PING_DELAY
-#define PING_DELAY 1000
-#endif
-
-/** ping identifier - must fit on a u16_t */
-#ifndef PING_ID
-#define PING_ID 0xAFAF
-#endif
-
-/** ping additional data size to include in the packet */
-#ifndef PING_DATA_SIZE
-#define PING_DATA_SIZE 32
-#endif
-
-/** ping result action - no default action */
-#ifndef PING_RESULT
-#define PING_RESULT(ping_ok)
-#endif
-
-/* ping variables */
-static const ip_addr_t* ping_target;
-static u16_t ping_seq_num;
-#ifdef LWIP_DEBUG
-static u32_t ping_time;
-#endif /* LWIP_DEBUG */
-#if !PING_USE_SOCKETS
-static struct raw_pcb *ping_pcb;
-#endif /* PING_USE_SOCKETS */
-
-/** Prepare a echo ICMP request */
-static void
-ping_prepare_echo( struct icmp_echo_hdr *iecho, u16_t len)
-{
- size_t i;
- size_t data_len = len - sizeof(struct icmp_echo_hdr);
-
- ICMPH_TYPE_SET(iecho, ICMP_ECHO);
- ICMPH_CODE_SET(iecho, 0);
- iecho->chksum = 0;
- iecho->id = PING_ID;
- iecho->seqno = lwip_htons(++ping_seq_num);
-
- /* fill the additional data buffer with some data */
- for(i = 0; i < data_len; i++) {
- ((char*)iecho)[sizeof(struct icmp_echo_hdr) + i] = (char)i;
- }
-
- iecho->chksum = inet_chksum(iecho, len);
-}
-
-#if PING_USE_SOCKETS
-
-/* Ping using the socket ip */
-static err_t
-ping_send(int s, const ip_addr_t *addr)
-{
- int err;
- struct icmp_echo_hdr *iecho;
- struct sockaddr_storage to;
- size_t ping_size = sizeof(struct icmp_echo_hdr) + PING_DATA_SIZE;
- LWIP_ASSERT("ping_size is too big", ping_size <= 0xffff);
-
-#if LWIP_IPV6
- if(IP_IS_V6(addr) && !ip6_addr_isipv4mappedipv6(ip_2_ip6(addr))) {
- /* todo: support ICMP6 echo */
- return ERR_VAL;
- }
-#endif /* LWIP_IPV6 */
-
- iecho = (struct icmp_echo_hdr *)mem_malloc((mem_size_t)ping_size);
- if (!iecho) {
- return ERR_MEM;
- }
-
- ping_prepare_echo(iecho, (u16_t)ping_size);
-
-#if LWIP_IPV4
- if(IP_IS_V4(addr)) {
- struct sockaddr_in *to4 = (struct sockaddr_in*)&to;
- to4->sin_len = sizeof(to4);
- to4->sin_family = AF_INET;
- inet_addr_from_ip4addr(&to4->sin_addr, ip_2_ip4(addr));
- }
-#endif /* LWIP_IPV4 */
-
-#if LWIP_IPV6
- if(IP_IS_V6(addr)) {
- struct sockaddr_in6 *to6 = (struct sockaddr_in6*)&to;
- to6->sin6_len = sizeof(to6);
- to6->sin6_family = AF_INET6;
- inet6_addr_from_ip6addr(&to6->sin6_addr, ip_2_ip6(addr));
- }
-#endif /* LWIP_IPV6 */
-
- err = lwip_sendto(s, iecho, ping_size, 0, (struct sockaddr*)&to, sizeof(to));
-
- mem_free(iecho);
-
- return (err ? ERR_OK : ERR_VAL);
-}
-
-void
-ping_recv(int s)
-{
- char buf[64];
- int len;
- struct sockaddr_storage from;
- int fromlen = sizeof(from);
-
- while((len = lwip_recvfrom(s, buf, sizeof(buf), 0, (struct sockaddr*)&from, (socklen_t*)&fromlen)) > 0) {
- if (len >= (int)(sizeof(struct ip_hdr)+sizeof(struct icmp_echo_hdr))) {
- ip_addr_t fromaddr;
- memset(&fromaddr, 0, sizeof(fromaddr));
-
-#if LWIP_IPV4
- if(from.ss_family == AF_INET) {
- struct sockaddr_in *from4 = (struct sockaddr_in*)&from;
- inet_addr_to_ip4addr(ip_2_ip4(&fromaddr), &from4->sin_addr);
- IP_SET_TYPE_VAL(fromaddr, IPADDR_TYPE_V4);
- }
-#endif /* LWIP_IPV4 */
-
-#if LWIP_IPV6
- if(from.ss_family == AF_INET6) {
- struct sockaddr_in6 *from6 = (struct sockaddr_in6*)&from;
- inet6_addr_to_ip6addr(ip_2_ip6(&fromaddr), &from6->sin6_addr);
- IP_SET_TYPE_VAL(fromaddr, IPADDR_TYPE_V6);
- }
-#endif /* LWIP_IPV6 */
-
- /* todo: support ICMP6 echo */
-#if LWIP_IPV4
- if (IP_IS_V4_VAL(fromaddr)) {
- struct ip_hdr *iphdr;
- struct icmp_echo_hdr *iecho;
-
- iphdr = (struct ip_hdr *)buf;
- iecho = (struct icmp_echo_hdr *)(buf + (IPH_HL(iphdr) * 4));
- if ((iecho->id == PING_ID) && (iecho->seqno == lwip_htons(ping_seq_num)))
- {
- LWIP_DEBUGF( PING_DEBUG, ("ping: recv "));
- ip_addr_debug_print_val(PING_DEBUG, fromaddr);
- LWIP_DEBUGF( PING_DEBUG, (" %"U32_F" ms\n", (sys_now() - ping_time)));
-
- /* do some ping result processing */
- PING_RESULT((ICMPH_TYPE(iecho) == ICMP_ER));
- return;
- }
- else
- {
- // LWIP_DEBUGF( PING_DEBUG, ("ping: drop\n"));
- }
- }
-#endif /* LWIP_IPV4 */
- }
- fromlen = sizeof(from);
- }
-
- if (len == 0) {
- LWIP_DEBUGF( PING_DEBUG, ("ping: recv - %"U32_F" ms - timeout\n", (sys_now()-ping_time)));
- }
-
- /* do some ping result processing */
- PING_RESULT(0);
-}
-
-static void
-ping_thread(void *arg)
-{
- int s;
- int ret;
- u32 times = 0,cnt = 0;
-
-#if LWIP_SO_SNDRCVTIMEO_NONSTANDARD
- int timeout = PING_RCV_TIMEO;
-#else
- struct timeval timeout;
- timeout.tv_sec = PING_RCV_TIMEO/1000;
- timeout.tv_usec = (PING_RCV_TIMEO%1000)*1000;
-#endif
-
- times = *(u32*)(arg);
-
- if(times == 0)
- {
- times = 4;
- }
- printf("times: %d\n", times);
-#if LWIP_IPV6
- if(IP_IS_V4(ping_target) || ip6_addr_isipv4mappedipv6(ip_2_ip6(ping_target))) {
- s = lwip_socket(AF_INET6, SOCK_RAW, IP_PROTO_ICMP);
- } else {
- s = lwip_socket(AF_INET6, SOCK_RAW, IP6_NEXTH_ICMP6);
- }
-#else
- printf("start to lwip_socket \r\n");
- s = lwip_socket(AF_INET, SOCK_RAW, IP_PROTO_ICMP);
-#endif
- if (s < 0) {
- vTaskDelete(NULL);
- return;
- }
- ret = lwip_setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(timeout));
- LWIP_ASSERT("setting receive timeout failed", ret == 0);
- LWIP_UNUSED_ARG(ret);
- while (1)
- {
- if(cnt ++ > times)
- {
- break;
- }
- if (ping_send(s, ping_target) == ERR_OK) {
- LWIP_DEBUGF( PING_DEBUG, ("ping: send "));
- ip_addr_debug_print(PING_DEBUG, ping_target);
- LWIP_DEBUGF( PING_DEBUG, ("\n"));
-
-#ifdef LWIP_DEBUG
- ping_time = sys_now();
-#endif /* LWIP_DEBUG */
- ping_recv(s);
- } else {
- LWIP_DEBUGF( PING_DEBUG, ("ping: send "));
- ip_addr_debug_print(PING_DEBUG, ping_target);
- LWIP_DEBUGF( PING_DEBUG, (" - error\n"));
- }
- sys_msleep(PING_DELAY);
- }
- printf("ping test is over \r\n");
- lwip_close(s);
- vTaskDelete(NULL);
-}
-
-#else /* PING_USE_SOCKETS */
-
-/* Ping using the raw ip */
-static u8_t
-ping_recv(void *arg, struct raw_pcb *pcb, struct pbuf *p, const ip_addr_t *addr)
-{
- struct icmp_echo_hdr *iecho;
- LWIP_UNUSED_ARG(arg);
- LWIP_UNUSED_ARG(pcb);
- LWIP_UNUSED_ARG(addr);
- LWIP_ASSERT("p != NULL", p != NULL);
-
- printf("ping ping_recv \r\n");
-
- if ((p->tot_len >= (PBUF_IP_HLEN + sizeof(struct icmp_echo_hdr))) &&
- pbuf_remove_header(p, PBUF_IP_HLEN) == 0) {
- iecho = (struct icmp_echo_hdr *)p->payload;
-
- if ((iecho->id == PING_ID) && (iecho->seqno == lwip_htons(ping_seq_num))) {
- /* 接收到对方返回的数据包,ping成功,显示延时 */
- printf("ping success: recv %d ms\r\n", (sys_now()-ping_time));
- ip_addr_debug_print(PING_DEBUG, addr);
-
- /* do some ping result processing */
- PING_RESULT(1);
- pbuf_free(p);
- return 1; /* eat the packet */
- }
- /* not eaten, restore original packet */
- pbuf_add_header(p, PBUF_IP_HLEN);
- }
-
- return 0; /* don't eat the packet */
-}
-
-static void
-ping_send(struct raw_pcb *raw, const ip_addr_t *addr)
-{
- struct pbuf *p;
- struct icmp_echo_hdr *iecho;
- size_t ping_size = sizeof(struct icmp_echo_hdr) + PING_DATA_SIZE;
-
- LWIP_DEBUGF( PING_DEBUG, ("ping: send "));
- ip_addr_debug_print(PING_DEBUG, addr);
- LWIP_DEBUGF( PING_DEBUG, ("\n"));
- LWIP_ASSERT("ping_size <= 0xffff", ping_size <= 0xffff);
-
- p = pbuf_alloc(PBUF_IP, (u16_t)ping_size, PBUF_RAM);
- if (!p) {
- return;
- }
- if ((p->len == p->tot_len) && (p->next == NULL)) {
- iecho = (struct icmp_echo_hdr *)p->payload;
-
- ping_prepare_echo(iecho, (u16_t)ping_size);
-
- raw_sendto(raw, p, addr);
-#ifdef LWIP_DEBUG
- ping_time = sys_now();
-#endif /* LWIP_DEBUG */
- }
- pbuf_free(p);
-}
-
-static void
-ping_timeout(void *arg)
-{
- struct raw_pcb *pcb = (struct raw_pcb*)arg;
-
- LWIP_ASSERT("ping_timeout: no pcb given!", pcb != NULL);
-
- ping_send(pcb, ping_target);
-
- sys_timeout(PING_DELAY, ping_timeout, pcb);
-}
-
-static void
-ping_raw_init(void)
-{
- ping_pcb = raw_new(IP_PROTO_ICMP);
- LWIP_ASSERT("ping_pcb != NULL", ping_pcb != NULL);
-
- raw_recv(ping_pcb, ping_recv, NULL);
- raw_bind(ping_pcb, IP_ADDR_ANY);
- sys_timeout(PING_DELAY, ping_timeout, ping_pcb);
-}
-
-void
-ping_send_now(void)
-{
- LWIP_ASSERT("ping_pcb != NULL", ping_pcb != NULL);
- ping_send(ping_pcb, ping_target);
-}
-
-#endif /* PING_USE_SOCKETS */
-
-void
-ping_init(const ip_addr_t* ping_addr,u32 cnt)
-{
- ping_target = ping_addr;
- sys_thread_t ret;
- static u32 times = 0;
- times = cnt;
-#if PING_USE_SOCKETS
- ret = sys_thread_new("ping_thread", ping_thread, ×, DEFAULT_THREAD_STACKSIZE, DEFAULT_THREAD_PRIO);
-#else /* PING_USE_SOCKETS */
-
- ping_raw_init();
-#endif /* PING_USE_SOCKETS */
- printf("sys_thread_new is %p \r\n",ret);
-}
-
-void
-ping_deinit(void)
-{
-
-}
-
-
-static ip_addr_t target_addr;
-static int ping(int argc, char *argv[])
-{
- u32 id = 0;
- u32 type = 0;
- struct sockaddr_in *h = NULL;
- struct in_addr ina;
- char *target_name;
- int times = 4;
-
- if (argc == 1)
- {
- printf("Please input: ping \n");
- return -1;
- }
- else
- {
- target_name = argv[1];
- }
-
- if(argc == 3)
- {
- times = (u32)simple_strtoul(argv[2], NULL, 10);
- }
-
- printf("%s\n", target_name);
-
-#if LWIP_IPV4
- if (inet_aton(target_name, &target_addr) == 0)
- {
- printf("ping: unknown host %s\n", target_name);
- return -1;
- }
-#else
- if (inet6_aton(target_name, &target_addr) == 0)
- {
- printf("ping: unknown host %s\n", target_name);
- return -1;
- }
-
-#endif
-
- ping_init(&target_addr,times);
-
- return 0;
-
-}
-
-
-SHELL_EXPORT_CMD(SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN), ping, ping, processing ping task);
-
-
-#endif
\ No newline at end of file
diff --git a/third-party/lwip-2.1.2/apps/ping/ping.h b/third-party/lwip-2.1.2/apps/ping/ping.h
deleted file mode 100644
index 23bc5aa853cbc9681d822f59426030912b10fd8a..0000000000000000000000000000000000000000
--- a/third-party/lwip-2.1.2/apps/ping/ping.h
+++ /dev/null
@@ -1,21 +0,0 @@
-#ifndef LWIP_PING_H
-#define LWIP_PING_H
-
-#include "lwip/ip_addr.h"
-
-/**
- * PING_USE_SOCKETS: Set to 1 to use sockets, otherwise the raw api is used
- */
-#ifndef PING_USE_SOCKETS
-#define PING_USE_SOCKETS LWIP_SOCKET
-#endif
-
-void
-ping_init(const ip_addr_t* ping_addr,u32 cnt);
-void ping_deinit();
-
-#if !PING_USE_SOCKETS
-void ping_send_now(void);
-#endif /* !PING_USE_SOCKETS */
-
-#endif /* LWIP_PING_H */
diff --git a/third-party/lwip-2.1.2/apps/tftp/tftp.c b/third-party/lwip-2.1.2/apps/tftp/tftp.c
deleted file mode 100644
index 4a0dd5cd937f9792cb12a31db8e97df453e022bc..0000000000000000000000000000000000000000
--- a/third-party/lwip-2.1.2/apps/tftp/tftp.c
+++ /dev/null
@@ -1,614 +0,0 @@
-/**
- *
- * @file tftp.c
- *
- * @author Logan Gunthorpe
- * Dirk Ziegelmeier
- *
- * @brief Trivial File Transfer Protocol (RFC 1350)
- *
- * Copyright (c) Deltatee Enterprises Ltd. 2013
- * All rights reserved.
- *
- */
-
-/*
- * Redistribution and use in source and binary forms, with or without
- * modification,are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
- * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
- * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * Author: Logan Gunthorpe
- * Dirk Ziegelmeier
- *
- */
-
-/**
- * @defgroup tftp TFTP client/server
- * @ingroup apps
- *
- * This is simple TFTP client/server for the lwIP raw API.
- * You need to increase MEMP_NUM_SYS_TIMEOUT by one if you use TFTP!
- */
-#include
-#include "fdebug.h"
-#include "tftp_client.h"
-#include "tftp_server.h"
-
-#if LWIP_UDP
-
-#include "lwip/udp.h"
-#include "lwip/timeouts.h"
-#include "lwip/debug.h"
-
-#if LWIP_IPV4
-#define ip4_addr_eq(addr1, addr2) ((addr1)->addr == (addr2)->addr)
-#define ip_addr_eq(addr1, addr2) ip4_addr_eq(addr1, addr2)
-
-#else
-#define ip_addr_eq(addr1, addr2) ip6_addr_eq(addr1, addr2)
-#endif
-
-#define TFTP_MAX_PAYLOAD_SIZE 512
-#define TFTP_HEADER_LENGTH 4
-
-/* TFTP报文的头两个字节表示操作码,共有5种操作码 */
-/* 读请求和写请求功能码的数据报文格式是一样的,报文格式为请求包,
- 还有数据包、确认包和差错包 */
-#define TFTP_RRQ 1 /* 读请求,即下载 */
-#define TFTP_WRQ 2 /* 写请求,即上传 */
-#define TFTP_DATA 3 /* 表示数据包 */
-#define TFTP_ACK 4 /* 确认码 */
-#define TFTP_ERROR 5 /* 错误 */
-
-enum tftp_error
-{
- TFTP_ERROR_FILE_NOT_FOUND = 1,
- TFTP_ERROR_ACCESS_VIOLATION = 2,
- TFTP_ERROR_DISK_FULL = 3,
- TFTP_ERROR_ILLEGAL_OPERATION = 4,
- TFTP_ERROR_UNKNOWN_TRFR_ID = 5,
- TFTP_ERROR_FILE_EXISTS = 6,
- TFTP_ERROR_NO_SUCH_USER = 7
-};
-
-struct tftp_state
-{
- const struct tftp_context *ctx;
- void *handle;
- struct pbuf *last_data;
- struct udp_pcb *upcb;
- ip_addr_t addr;
- u16_t port;
- int timer;
- int last_pkt;
- u16_t blknum;
- u8_t retries;
- u8_t mode_write;
- u8_t tftp_mode;
-};
-
-static struct tftp_state tftp_state;
-
-static void tftp_tmr(void *arg);
-
-static void
-close_handle(void)
-{
- tftp_state.port = 0;
- ip_addr_set_any(0, &tftp_state.addr);
-
- if (tftp_state.last_data != NULL)
- {
- pbuf_free(tftp_state.last_data);
- tftp_state.last_data = NULL;
- }
-
- sys_untimeout(tftp_tmr, NULL);
-
- if (tftp_state.handle)
- {
- tftp_state.ctx->close(tftp_state.handle);
- tftp_state.handle = NULL;
- LWIP_DEBUGF(TFTP_DEBUG | LWIP_DBG_STATE, ("tftp: closing\n"));
- }
-}
-
-static struct pbuf *
-init_packet(u16_t opcode, u16_t extra, size_t size)
-{
- /* 申请空间 */
- struct pbuf *p = pbuf_alloc(PBUF_TRANSPORT, (u16_t)(TFTP_HEADER_LENGTH + size), PBUF_RAM);
- u16_t *payload;
-
- if (p != NULL)
- {
- /* 填充包内容 */
- payload = (u16_t *)p->payload;
- payload[0] = PP_HTONS(opcode);
- payload[1] = lwip_htons(extra);
- }
-
- return p;
-}
-
-static err_t
-send_request(const ip_addr_t *addr, u16_t port, u16_t opcode, const char *fname, const char *mode)
-{
- size_t fname_length = strlen(fname) + 1;
- size_t mode_length = strlen(mode) + 1;
- struct pbuf *p = init_packet(opcode, 0, fname_length + mode_length - 2);
- char *payload;
- err_t ret;
-
- if (p == NULL)
- {
- return ERR_MEM;
- }
-
- payload = (char *)p->payload;
- MEMCPY(payload + 2, fname, fname_length);
- MEMCPY(payload + 2 + fname_length, mode, mode_length);
-
- ret = udp_sendto(tftp_state.upcb, p, addr, port);
- pbuf_free(p);
- return ret;
-}
-
-static err_t
-send_error(const ip_addr_t *addr, u16_t port, enum tftp_error code, const char *str)
-{
- int str_length = strlen(str);
- struct pbuf *p;
- u16_t *payload;
- err_t ret;
-
- p = init_packet(TFTP_ERROR, code, str_length + 1);
- if (p == NULL)
- {
- return ERR_MEM;
- }
-
- payload = (u16_t *)p->payload;
- MEMCPY(&payload[2], str, str_length + 1);
-
- ret = udp_sendto(tftp_state.upcb, p, addr, port);
- pbuf_free(p);
- return ret;
-}
-
-static err_t
-send_ack(const ip_addr_t *addr, u16_t port, u16_t blknum)
-{
- struct pbuf *p;
- err_t ret;
-
- p = init_packet(TFTP_ACK, blknum, 0);
- if (p == NULL)
- {
- return ERR_MEM;
- }
-
- ret = udp_sendto(tftp_state.upcb, p, addr, port);
- pbuf_free(p);
- return ret;
-}
-
-static err_t
-resend_data(const ip_addr_t *addr, u16_t port)
-{
- err_t ret;
- struct pbuf *p = pbuf_alloc(PBUF_TRANSPORT, tftp_state.last_data->len, PBUF_RAM);
- if (p == NULL)
- {
- return ERR_MEM;
- }
-
- ret = pbuf_copy(p, tftp_state.last_data);
- if (ret != ERR_OK)
- {
- pbuf_free(p);
- return ret;
- }
-
- ret = udp_sendto(tftp_state.upcb, p, addr, port);
- pbuf_free(p);
- return ret;
-}
-
-static void
-send_data(const ip_addr_t *addr, u16_t port)
-{
- u16_t *payload;
- int ret;
-
- /* 不需重传,清除上次发送的数据包 */
- if (tftp_state.last_data != NULL)
- {
- pbuf_free(tftp_state.last_data);
- }
-
- tftp_state.last_data = init_packet(TFTP_DATA, tftp_state.blknum, TFTP_MAX_PAYLOAD_SIZE);
- if (tftp_state.last_data == NULL)
- {
- return;
- }
-
- payload = (u16_t *)tftp_state.last_data->payload;
-
- /* 将内容读进包中 */
- ret = tftp_state.ctx->read(tftp_state.handle, &payload[2], TFTP_MAX_PAYLOAD_SIZE);
- if (ret < 0)
- {
- send_error(addr, port, TFTP_ERROR_ACCESS_VIOLATION, "Error occurred while reading the file.");
- close_handle();
- return;
- }
-
- pbuf_realloc(tftp_state.last_data, (u16_t)(TFTP_HEADER_LENGTH + ret));
- resend_data(addr, port);
-}
-
-static void
-tftp_recv(void *arg, struct udp_pcb *upcb, struct pbuf *p, const ip_addr_t *addr, u16_t port)
-{
- u16_t *sbuf = (u16_t *)p->payload;
- int opcode;
-
- LWIP_UNUSED_ARG(arg);
- LWIP_UNUSED_ARG(upcb);
-
- if (((tftp_state.port != 0) && (port != tftp_state.port)) ||
- (!ip_addr_isany_val(tftp_state.addr) && !ip_addr_eq(&tftp_state.addr, addr)))
- {
- send_error(addr, port, TFTP_ERROR_ACCESS_VIOLATION, "Only one connection at a time is supported");
- pbuf_free(p);
- return;
- }
-
- opcode = sbuf[0];
-
- tftp_state.last_pkt = tftp_state.timer;
- tftp_state.retries = 0;
-
- switch (opcode)
- {
- case PP_HTONS(TFTP_RRQ): /* fall through */
- case PP_HTONS(TFTP_WRQ):
- {
- const char tftp_null = 0;
- char filename[TFTP_MAX_FILENAME_LEN + 1];
- char mode[TFTP_MAX_MODE_LEN + 1];
- u16_t filename_end_offset;
- u16_t mode_end_offset;
-
- if (tftp_state.handle != NULL)
- {
- send_error(addr, port, TFTP_ERROR_ACCESS_VIOLATION, "Only one connection at a time is supported");
- break;
- }
-
- if ((tftp_state.tftp_mode & LWIP_TFTP_MODE_SERVER) == 0)
- {
- send_error(addr, port, TFTP_ERROR_ACCESS_VIOLATION, "TFTP server not enabled");
- break;
- }
-
- sys_timeout(TFTP_TIMER_MSECS, tftp_tmr, NULL);
-
- /* find \0 in pbuf -> end of filename string */
- filename_end_offset = pbuf_memfind(p, &tftp_null, sizeof(tftp_null), 2);
- if ((u16_t)(filename_end_offset - 1) > sizeof(filename))
- {
- send_error(addr, port, TFTP_ERROR_ACCESS_VIOLATION, "Filename too long/not NULL terminated");
- break;
- }
- pbuf_copy_partial(p, filename, filename_end_offset - 1, 2);
-
- /* find \0 in pbuf -> end of mode string */
- mode_end_offset = pbuf_memfind(p, &tftp_null, sizeof(tftp_null), filename_end_offset + 1);
- if ((u16_t)(mode_end_offset - filename_end_offset) > sizeof(mode))
- {
- send_error(addr, port, TFTP_ERROR_ACCESS_VIOLATION, "Mode too long/not NULL terminated");
- break;
- }
- pbuf_copy_partial(p, mode, mode_end_offset - filename_end_offset, filename_end_offset + 1);
-
- tftp_state.handle = tftp_state.ctx->open(filename, mode, opcode == PP_HTONS(TFTP_WRQ));
- tftp_state.blknum = 1;
-
- if (!tftp_state.handle)
- {
- send_error(addr, port, TFTP_ERROR_FILE_NOT_FOUND, "Unable to open requested file.");
- break;
- }
-
- LWIP_DEBUGF(TFTP_DEBUG | LWIP_DBG_STATE, ("tftp: %s request from ", (opcode == PP_HTONS(TFTP_WRQ)) ? "write" : "read"));
- ip_addr_debug_print(TFTP_DEBUG | LWIP_DBG_STATE, addr);
- LWIP_DEBUGF(TFTP_DEBUG | LWIP_DBG_STATE, (" for '%s' mode '%s'\n", filename, mode));
-
- ip_addr_copy(tftp_state.addr, *addr);
- tftp_state.port = port;
-
- if (opcode == PP_HTONS(TFTP_WRQ))
- {
- tftp_state.mode_write = 1;
- send_ack(addr, port, 0);
- }
- else
- {
- tftp_state.mode_write = 0;
- send_data(addr, port);
- }
-
- break;
- }
-
- case PP_HTONS(TFTP_DATA):
- {
- int ret;
- u16_t blknum;
-
- if (tftp_state.handle == NULL)
- {
- send_error(addr, port, TFTP_ERROR_ACCESS_VIOLATION, "No connection");
- break;
- }
-
- if (tftp_state.mode_write != 1)
- {
- send_error(addr, port, TFTP_ERROR_ACCESS_VIOLATION, "Not a write connection");
- break;
- }
-
- blknum = lwip_ntohs(sbuf[1]);
- if (blknum == tftp_state.blknum)
- {
- pbuf_remove_header(p, TFTP_HEADER_LENGTH);
- ret = tftp_state.ctx->write(tftp_state.handle, p);
- if (ret < 0)
- {
- send_error(addr, port, TFTP_ERROR_ACCESS_VIOLATION, "error writing file");
- close_handle();
- }
- else
- {
- send_ack(addr, port, blknum);
- }
-
- if (p->tot_len < TFTP_MAX_PAYLOAD_SIZE)
- {
- close_handle();
- }
- else
- {
- tftp_state.blknum++;
- }
- }
- else if ((u16_t)(blknum + 1) == tftp_state.blknum)
- {
- /* retransmit of previous block, ack again (casting to u16_t to care for overflow) */
- send_ack(addr, port, blknum);
- }
- else
- {
- send_error(addr, port, TFTP_ERROR_UNKNOWN_TRFR_ID, "Wrong block number");
- }
- break;
- }
-
- case PP_HTONS(TFTP_ACK):
- {
- u16_t blknum;
- int lastpkt;
-
- if (tftp_state.handle == NULL)
- {
- send_error(addr, port, TFTP_ERROR_ACCESS_VIOLATION, "No connection");
- break;
- }
-
- if (tftp_state.mode_write != 0)
- {
- send_error(addr, port, TFTP_ERROR_ACCESS_VIOLATION, "Not a read connection");
- break;
- }
-
- blknum = lwip_ntohs(sbuf[1]);
- if (blknum != tftp_state.blknum)
- {
- send_error(addr, port, TFTP_ERROR_UNKNOWN_TRFR_ID, "Wrong block number");
- break;
- }
-
- lastpkt = 0;
-
- if (tftp_state.last_data != NULL)
- {
- lastpkt = tftp_state.last_data->tot_len != (TFTP_MAX_PAYLOAD_SIZE + TFTP_HEADER_LENGTH);
- }
-
- if (!lastpkt)
- {
- tftp_state.blknum++;
- send_data(addr, port);
- }
- else
- {
- close_handle();
- }
-
- break;
- }
- case PP_HTONS(TFTP_ERROR):
- if (tftp_state.handle != NULL)
- {
- pbuf_remove_header(p, TFTP_HEADER_LENGTH);
- tftp_state.ctx->error(tftp_state.handle, sbuf[1], (const char *)p->payload, p->len);
- close_handle();
- }
- break;
- default:
- send_error(addr, port, TFTP_ERROR_ILLEGAL_OPERATION, "Unknown operation");
- break;
- }
-
- pbuf_free(p);
-}
-
-static void
-tftp_tmr(void *arg)
-{
- LWIP_UNUSED_ARG(arg);
-
- tftp_state.timer++;
-
- if (tftp_state.handle == NULL)
- {
- return;
- }
-
- sys_timeout(TFTP_TIMER_MSECS, tftp_tmr, NULL);
-
- if ((tftp_state.timer - tftp_state.last_pkt) > (TFTP_TIMEOUT_MSECS / TFTP_TIMER_MSECS))
- {
- if ((tftp_state.last_data != NULL) && (tftp_state.retries < TFTP_MAX_RETRIES))
- {
- LWIP_DEBUGF(TFTP_DEBUG | LWIP_DBG_STATE, ("tftp: timeout, retrying\n"));
- resend_data(&tftp_state.addr, tftp_state.port);
- tftp_state.retries++;
- }
- else
- {
- LWIP_DEBUGF(TFTP_DEBUG | LWIP_DBG_STATE, ("tftp: timeout\n"));
- close_handle();
- }
- }
-}
-
-/**
- * Initialize TFTP client/server.
- * @param mode TFTP mode (client/server)
- * @param ctx TFTP callback struct
- */
-err_t tftp_init_common(u8_t mode, const struct tftp_context *ctx)
-{
- err_t ret;
-
- /* LWIP_ASSERT_CORE_LOCKED(); is checked by udp_new() */
- struct udp_pcb *pcb = udp_new_ip_type(IPADDR_TYPE_ANY);
- if (pcb == NULL)
- {
- return ERR_MEM;
- }
-
- ret = udp_bind(pcb, IP_ANY_TYPE, TFTP_PORT);
- if (ret != ERR_OK)
- {
- udp_remove(pcb);
- return ret;
- }
-
- tftp_state.handle = NULL;
- tftp_state.port = 0;
- tftp_state.ctx = ctx;
- tftp_state.timer = 0;
- tftp_state.last_data = NULL; /* last data, 为了符合tftp的重传机制 */
- tftp_state.upcb = pcb;
- tftp_state.tftp_mode = mode;
-
- /* 注册接收回调函数 */
- udp_recv(pcb, tftp_recv, NULL);
-
- return ERR_OK;
-}
-
-/** @ingroup tftp
- * Initialize TFTP server.
- * @param ctx TFTP callback struct
- */
-err_t tftp_init_server(const struct tftp_context *ctx)
-{
- return tftp_init_common(LWIP_TFTP_MODE_SERVER, ctx);
-}
-
-/** @ingroup tftp
- * Initialize TFTP client.
- * @param ctx TFTP callback struct
- */
-err_t tftp_init_client(const struct tftp_context *ctx)
-{
- return tftp_init_common(LWIP_TFTP_MODE_CLIENT, ctx);
-}
-
-/** @ingroup tftp
- * Deinitialize ("turn off") TFTP client/server.
- */
-void tftp_cleanup(void)
-{
- LWIP_ASSERT("Cleanup called on non-initialized TFTP", tftp_state.upcb != NULL);
- udp_remove(tftp_state.upcb);
- close_handle();
- memset(&tftp_state, 0, sizeof(tftp_state));
-}
-
-static const char *
-mode_to_string(enum tftp_transfer_mode mode)
-{
- if (mode == TFTP_MODE_OCTET)
- {
- return "octet";
- }
- if (mode == TFTP_MODE_NETASCII)
- {
- return "netascii";
- }
- if (mode == TFTP_MODE_BINARY)
- {
- return "binary";
- }
- return NULL;
-}
-
-err_t tftp_get(void *handle, const ip_addr_t *addr, u16_t port, const char *fname, enum tftp_transfer_mode mode)
-{
- LWIP_ERROR("TFTP client is not enabled (tftp_init)", (tftp_state.tftp_mode & LWIP_TFTP_MODE_CLIENT) != 0, return ERR_VAL);
- LWIP_ERROR("tftp_get: invalid file name", fname != NULL, return ERR_VAL);
- LWIP_ERROR("tftp_get: invalid mode", mode <= TFTP_MODE_BINARY, return ERR_VAL);
-
- tftp_state.handle = handle;
- tftp_state.blknum = 1;
- tftp_state.mode_write = 1; /* We want to receive data */
- return send_request(addr, port, TFTP_RRQ, fname, mode_to_string(mode));
-}
-
-err_t tftp_put(void *handle, const ip_addr_t *addr, u16_t port, const char *fname, enum tftp_transfer_mode mode)
-{
- LWIP_ERROR("TFTP client is not enabled (tftp_init)", (tftp_state.tftp_mode & LWIP_TFTP_MODE_CLIENT) != 0, return ERR_VAL);
- LWIP_ERROR("tftp_put: invalid file name", fname != NULL, return ERR_VAL);
- LWIP_ERROR("tftp_put: invalid mode", mode <= TFTP_MODE_BINARY, return ERR_VAL);
-
- tftp_state.handle = handle;
- tftp_state.blknum = 1;
- tftp_state.mode_write = 0; /* We want to send data */
- return send_request(addr, port, TFTP_WRQ, fname, mode_to_string(mode));
-}
-
-#endif /* LWIP_UDP */
diff --git a/third-party/lwip-2.1.2/apps/tftp/tftp_client.h b/third-party/lwip-2.1.2/apps/tftp/tftp_client.h
deleted file mode 100644
index 753b3459bc0d3b6729220c66fdef035cb7f4eba9..0000000000000000000000000000000000000000
--- a/third-party/lwip-2.1.2/apps/tftp/tftp_client.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
- * All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
- * FilePath: tftp_client.h
- * Date: 2022-04-02 16:18:06
- * LastEditTime: 2022-04-22 17:07:46
- * Description: This file is for
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
- */
-/**
- *
- * @file tftp_client.h
- * TFTP client header
- *
- */
-
-/*
- * Redistribution and use in source and binary forms, with or without
- * modification,are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
- * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
- * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * This file is part of the lwIP TCP/IP stack.
- *
- */
-
-#ifndef LWIP_HDR_APPS_TFTP_CLIENT_H
-#define LWIP_HDR_APPS_TFTP_CLIENT_H
-
-#include "tftp_common.h"
-
-enum tftp_transfer_mode {
- TFTP_MODE_OCTET,
- TFTP_MODE_NETASCII,
- TFTP_MODE_BINARY /* used in old versions only */
-};
-
-err_t tftp_init_client(const struct tftp_context* ctx);
-err_t tftp_get(void* handle, const ip_addr_t *addr, u16_t port, const char* fname, enum tftp_transfer_mode mode);
-err_t tftp_put(void* handle, const ip_addr_t *addr, u16_t port, const char* fname, enum tftp_transfer_mode mode);
-
-#endif /* LWIP_HDR_APPS_TFTP_CLIENT_H */
diff --git a/third-party/lwip-2.1.2/apps/tftp/tftp_common.h b/third-party/lwip-2.1.2/apps/tftp/tftp_common.h
deleted file mode 100644
index 08deb1bca9d5627929984e73126c305fca04c9b3..0000000000000000000000000000000000000000
--- a/third-party/lwip-2.1.2/apps/tftp/tftp_common.h
+++ /dev/null
@@ -1,108 +0,0 @@
-/**
- *
- * @file tftp_common.h
- *
- * @author Logan Gunthorpe
- *
- * @brief Trivial File Transfer Protocol (RFC 1350)
- *
- * Copyright (c) Deltatee Enterprises Ltd. 2013
- * All rights reserved.
- *
- */
-
-/*
- * Redistribution and use in source and binary forms, with or without
- * modification,are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
- * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
- * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * Author: Logan Gunthorpe
- *
- */
-
-#ifndef LWIP_HDR_APPS_TFTP_COMMON_H
-#define LWIP_HDR_APPS_TFTP_COMMON_H
-
-#include "tftp_opts.h"
-#include "lwip/err.h"
-#include "lwip/pbuf.h"
-#include "lwip/ip_addr.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** @ingroup tftp
- * TFTP context containing callback functions for TFTP transfers
- */
-struct tftp_context {
- /**
- * Open file for read/write (server mode only).
- * @param fname Filename
- * @param mode Mode string from TFTP RFC 1350 (netascii, octet, mail)
- * @param write Flag indicating read (0) or write (!= 0) access
- * @returns File handle supplied to other functions
- */
- void* (*open)(const char* fname, const char* mode, u8_t write);
- /**
- * Close file handle
- * @param handle File handle returned by open()/tftp_put()/tftp_get()
- */
- void (*close)(void* handle);
- /**
- * Read from file
- * @param handle File handle returned by open()/tftp_put()/tftp_get()
- * @param buf Target buffer to copy read data to
- * @param bytes Number of bytes to copy to buf
- * @returns >= 0: Success; < 0: Error
- */
- int (*read)(void* handle, void* buf, int bytes);
- /**
- * Write to file
- * @param handle File handle returned by open()/tftp_put()/tftp_get()
- * @param pbuf PBUF adjusted such that payload pointer points
- * to the beginning of write data. In other words,
- * TFTP headers are stripped off.
- * @returns >= 0: Success; < 0: Error
- */
- int (*write)(void* handle, struct pbuf* p);
- /**
- * Error indication from client or response from server
- * @param handle File handle set by open()/tftp_get()/tftp_put()
- * @param err error code from client or server
- * @param msg error message from client or server
- * @param size size of msg
- */
- void (*error)(void* handle, int err, const char* msg, int size);
-};
-
-#define LWIP_TFTP_MODE_SERVER 0x01
-#define LWIP_TFTP_MODE_CLIENT 0x02
-#define LWIP_TFTP_MODE_CLIENTSERVER (LWIP_TFTP_MODE_SERVER | LWIP_TFTP_MODE_CLIENT)
-
-err_t tftp_init_common(u8_t mode, const struct tftp_context* ctx);
-void tftp_cleanup(void);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LWIP_HDR_APPS_TFTP_COMMON_H */
diff --git a/third-party/lwip-2.1.2/apps/tftp/tftp_opts.h b/third-party/lwip-2.1.2/apps/tftp/tftp_opts.h
deleted file mode 100644
index 509fabd6795d242e1578b3660d8a9a91a3ee4edd..0000000000000000000000000000000000000000
--- a/third-party/lwip-2.1.2/apps/tftp/tftp_opts.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/**
- *
- * @file tftp_opts.h
- *
- * @author Logan Gunthorpe
- *
- * @brief Trivial File Transfer Protocol (RFC 1350) implementation options
- *
- * Copyright (c) Deltatee Enterprises Ltd. 2013
- * All rights reserved.
- *
- */
-
-/*
- * Redistribution and use in source and binary forms, with or without
- * modification,are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
- * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
- * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * Author: Logan Gunthorpe
- *
- */
-
-#ifndef LWIP_HDR_APPS_TFTP_OPTS_H
-#define LWIP_HDR_APPS_TFTP_OPTS_H
-
-#include "lwip/opt.h"
-#include "lwip/prot/iana.h"
-
-/**
- * @defgroup tftp_opts Options
- * @ingroup tftp
- * @{
- */
-
-/**
- * Enable TFTP debug messages
- */
-#if !defined TFTP_DEBUG || defined __DOXYGEN__
-#define TFTP_DEBUG LWIP_DBG_OFF
-#endif
-
-/**
- * TFTP server port
- */
-#if !defined TFTP_PORT || defined __DOXYGEN__
-#define TFTP_PORT LWIP_IANA_PORT_TFTP
-#endif
-
-/**
- * TFTP timeout
- */
-#if !defined TFTP_TIMEOUT_MSECS || defined __DOXYGEN__
-#define TFTP_TIMEOUT_MSECS 10000
-#endif
-
-/**
- * Max. number of retries when a file is read from server
- */
-#if !defined TFTP_MAX_RETRIES || defined __DOXYGEN__
-#define TFTP_MAX_RETRIES 5
-#endif
-
-/**
- * TFTP timer cyclic interval
- */
-#if !defined TFTP_TIMER_MSECS || defined __DOXYGEN__
-#define TFTP_TIMER_MSECS (TFTP_TIMEOUT_MSECS / 10)
-#endif
-
-/**
- * Max. length of TFTP filename
- */
-#if !defined TFTP_MAX_FILENAME_LEN || defined __DOXYGEN__
-#define TFTP_MAX_FILENAME_LEN 20
-#endif
-
-/**
- * Max. length of TFTP mode
- */
-#if !defined TFTP_MAX_MODE_LEN || defined __DOXYGEN__
-#define TFTP_MAX_MODE_LEN 10
-#endif
-
-/**
- * @}
- */
-
-#endif /* LWIP_HDR_APPS_TFTP_OPTS_H */
diff --git a/third-party/lwip-2.1.2/apps/tftp/tftp_server.h b/third-party/lwip-2.1.2/apps/tftp/tftp_server.h
deleted file mode 100644
index c2577cd2a6a17a8b0b8ae357fb04d17e56196535..0000000000000000000000000000000000000000
--- a/third-party/lwip-2.1.2/apps/tftp/tftp_server.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- *
- * @file tftp_server.h
- * TFTP server header
- *
- */
-
-/*
- * Redistribution and use in source and binary forms, with or without
- * modification,are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
- * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
- * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * This file is part of the lwIP TCP/IP stack.
- *
- */
-
-#ifndef LWIP_HDR_APPS_TFTP_SERVER_H
-#define LWIP_HDR_APPS_TFTP_SERVER_H
-
-#include "tftp_common.h"
-
-err_t tftp_init_server(const struct tftp_context* ctx);
-
-#endif /* LWIP_HDR_APPS_TFTP_SERVER_H */
diff --git a/third-party/lwip-2.1.2/core/altcp.c b/third-party/lwip-2.1.2/core/altcp.c
deleted file mode 100644
index d46d6cdb1d5de468ebf209b57e7837211b6efd26..0000000000000000000000000000000000000000
--- a/third-party/lwip-2.1.2/core/altcp.c
+++ /dev/null
@@ -1,681 +0,0 @@
-/**
- * @file
- * @defgroup altcp Application layered TCP Functions
- * @ingroup altcp_api
- *
- * This file contains the common functions for altcp to work.
- * For more details see @ref altcp_api.
- */
-
-/**
- * @defgroup altcp_api Application layered TCP Introduction
- * @ingroup callbackstyle_api
- *
- * Overview
- * --------
- * altcp (application layered TCP connection API; to be used from TCPIP thread)
- * is an abstraction layer that prevents applications linking hard against the
- * @ref tcp.h functions while providing the same functionality. It is used to
- * e.g. add SSL/TLS (see LWIP_ALTCP_TLS) or proxy-connect support to an application
- * written for the tcp callback API without that application knowing the
- * protocol details.
- *
- * * This interface mimics the tcp callback API to the application while preventing
- * direct linking (much like virtual functions).
- * * This way, an application can make use of other application layer protocols
- * on top of TCP without knowing the details (e.g. TLS, proxy connection).
- * * This is achieved by simply including "lwip/altcp.h" instead of "lwip/tcp.h",
- * replacing "struct tcp_pcb" with "struct altcp_pcb" and prefixing all functions
- * with "altcp_" instead of "tcp_".
- *
- * With altcp support disabled (LWIP_ALTCP==0), applications written against the
- * altcp API can still be compiled but are directly linked against the tcp.h
- * callback API and then cannot use layered protocols. To minimize code changes
- * in this case, the use of altcp_allocators is strongly suggested.
- *
- * Usage
- * -----
- * To make use of this API from an existing tcp raw API application:
- * * Include "lwip/altcp.h" instead of "lwip/tcp.h"
- * * Replace "struct tcp_pcb" with "struct altcp_pcb"
- * * Prefix all called tcp API functions with "altcp_" instead of "tcp_" to link
- * against the altcp functions
- * * @ref altcp_new (and @ref altcp_new_ip_type/@ref altcp_new_ip6) take
- * an @ref altcp_allocator_t as an argument, whereas the original tcp API
- * functions take no arguments.
- * * An @ref altcp_allocator_t allocator is an object that holds a pointer to an
- * allocator object and a corresponding state (e.g. for TLS, the corresponding
- * state may hold certificates or keys). This way, the application does not
- * even need to know if it uses TLS or pure TCP, this is handled at runtime
- * by passing a specific allocator.
- * * An application can alternatively bind hard to the altcp_tls API by calling
- * @ref altcp_tls_new or @ref altcp_tls_wrap.
- * * The TLS layer is not directly implemented by lwIP, but a port to mbedTLS is
- * provided.
- * * Another altcp layer is proxy-connect to use TLS behind a HTTP proxy (see
- * @ref altcp_proxyconnect.h)
- *
- * altcp_allocator_t
- * -----------------
- * An altcp allocator is created by the application by combining an allocator
- * callback function and a corresponding state, e.g.:\code{.c}
- * static const unsigned char cert[] = {0x2D, ... (see mbedTLS doc for how to create this)};
- * struct altcp_tls_config * conf = altcp_tls_create_config_client(cert, sizeof(cert));
- * altcp_allocator_t tls_allocator = {
- * altcp_tls_alloc, conf
- * };
- * \endcode
- *
- *
- * struct altcp_tls_config
- * -----------------------
- * The struct altcp_tls_config holds state that is needed to create new TLS client
- * or server connections (e.g. certificates and private keys).
- *
- * It is not defined by lwIP itself but by the TLS port (e.g. altcp_tls to mbedTLS
- * adaption). However, the parameters used to create it are defined in @ref
- * altcp_tls.h (see @ref altcp_tls_create_config_server_privkey_cert for servers
- * and @ref altcp_tls_create_config_client/@ref altcp_tls_create_config_client_2wayauth
- * for clients).
- *
- * For mbedTLS, ensure that certificates can be parsed by 'mbedtls_x509_crt_parse()' and
- * private keys can be parsed by 'mbedtls_pk_parse_key()'.
- */
-
-/*
- * Copyright (c) 2017 Simon Goldschmidt
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
- * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
- * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
- * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
- * OF SUCH DAMAGE.
- *
- * This file is part of the lwIP TCP/IP stack.
- *
- * Author: Simon Goldschmidt
- *
- */
-
-#include "lwip/opt.h"
-
-#if LWIP_ALTCP /* don't build if not configured for use in lwipopts.h */
-
-#include "lwip/altcp.h"
-#include "lwip/priv/altcp_priv.h"
-#include "lwip/altcp_tcp.h"
-#include "lwip/tcp.h"
-#include "lwip/mem.h"
-
-#include
-
-extern const struct altcp_functions altcp_tcp_functions;
-
-/**
- * For altcp layer implementations only: allocate a new struct altcp_pcb from the pool
- * and zero the memory
- */
-struct altcp_pcb *
-altcp_alloc(void)
-{
- struct altcp_pcb *ret = (struct altcp_pcb *)memp_malloc(MEMP_ALTCP_PCB);
- if (ret != NULL) {
- memset(ret, 0, sizeof(struct altcp_pcb));
- }
- return ret;
-}
-
-/**
- * For altcp layer implementations only: return a struct altcp_pcb to the pool
- */
-void
-altcp_free(struct altcp_pcb *conn)
-{
- if (conn) {
- if (conn->fns && conn->fns->dealloc) {
- conn->fns->dealloc(conn);
- }
- memp_free(MEMP_ALTCP_PCB, conn);
- }
-}
-
-/**
- * @ingroup altcp
- * altcp_new_ip6: @ref altcp_new for IPv6
- */
-struct altcp_pcb *
-altcp_new_ip6(altcp_allocator_t *allocator)
-{
- return altcp_new_ip_type(allocator, IPADDR_TYPE_V6);
-}
-
-/**
- * @ingroup altcp
- * altcp_new: @ref altcp_new for IPv4
- */
-struct altcp_pcb *
-altcp_new(altcp_allocator_t *allocator)
-{
- return altcp_new_ip_type(allocator, IPADDR_TYPE_V4);
-}
-
-/**
- * @ingroup altcp
- * altcp_new_ip_type: called by applications to allocate a new pcb with the help of an
- * allocator function.
- *
- * @param allocator allocator function and argument
- * @param ip_type IP version of the pcb (@ref lwip_ip_addr_type)
- * @return a new altcp_pcb or NULL on error
- */
-struct altcp_pcb *
-altcp_new_ip_type(altcp_allocator_t *allocator, u8_t ip_type)
-{
- struct altcp_pcb *conn;
- if (allocator == NULL) {
- /* no allocator given, create a simple TCP connection */
- return altcp_tcp_new_ip_type(ip_type);
- }
- if (allocator->alloc == NULL) {
- /* illegal allocator */
- return NULL;
- }
- conn = allocator->alloc(allocator->arg, ip_type);
- if (conn == NULL) {
- /* allocation failed */
- return NULL;
- }
- return conn;
-}
-
-/**
- * @ingroup altcp
- * @see tcp_arg()
- */
-void
-altcp_arg(struct altcp_pcb *conn, void *arg)
-{
- if (conn) {
- conn->arg = arg;
- }
-}
-
-/**
- * @ingroup altcp
- * @see tcp_accept()
- */
-void
-altcp_accept(struct altcp_pcb *conn, altcp_accept_fn accept)
-{
- if (conn != NULL) {
- conn->accept = accept;
- }
-}
-
-/**
- * @ingroup altcp
- * @see tcp_recv()
- */
-void
-altcp_recv(struct altcp_pcb *conn, altcp_recv_fn recv)
-{
- if (conn) {
- conn->recv = recv;
- }
-}
-
-/**
- * @ingroup altcp
- * @see tcp_sent()
- */
-void
-altcp_sent(struct altcp_pcb *conn, altcp_sent_fn sent)
-{
- if (conn) {
- conn->sent = sent;
- }
-}
-
-/**
- * @ingroup altcp
- * @see tcp_poll()
- */
-void
-altcp_poll(struct altcp_pcb *conn, altcp_poll_fn poll, u8_t interval)
-{
- if (conn) {
- conn->poll = poll;
- conn->pollinterval = interval;
- if (conn->fns && conn->fns->set_poll) {
- conn->fns->set_poll(conn, interval);
- }
- }
-}
-
-/**
- * @ingroup altcp
- * @see tcp_err()
- */
-void
-altcp_err(struct altcp_pcb *conn, altcp_err_fn err)
-{
- if (conn) {
- conn->err = err;
- }
-}
-
-/* Generic functions calling the "virtual" ones */
-
-/**
- * @ingroup altcp
- * @see tcp_recved()
- */
-void
-altcp_recved(struct altcp_pcb *conn, u16_t len)
-{
- if (conn && conn->fns && conn->fns->recved) {
- conn->fns->recved(conn, len);
- }
-}
-
-/**
- * @ingroup altcp
- * @see tcp_bind()
- */
-err_t
-altcp_bind(struct altcp_pcb *conn, const ip_addr_t *ipaddr, u16_t port)
-{
- if (conn && conn->fns && conn->fns->bind) {
- return conn->fns->bind(conn, ipaddr, port);
- }
- return ERR_VAL;
-}
-
-/**
- * @ingroup altcp
- * @see tcp_connect()
- */
-err_t
-altcp_connect(struct altcp_pcb *conn, const ip_addr_t *ipaddr, u16_t port, altcp_connected_fn connected)
-{
- if (conn && conn->fns && conn->fns->connect) {
- return conn->fns->connect(conn, ipaddr, port, connected);
- }
- return ERR_VAL;
-}
-
-/**
- * @ingroup altcp
- * @see tcp_listen_with_backlog_and_err()
- */
-struct altcp_pcb *
-altcp_listen_with_backlog_and_err(struct altcp_pcb *conn, u8_t backlog, err_t *err)
-{
- if (conn && conn->fns && conn->fns->listen) {
- return conn->fns->listen(conn, backlog, err);
- }
- return NULL;
-}
-
-/**
- * @ingroup altcp
- * @see tcp_abort()
- */
-void
-altcp_abort(struct altcp_pcb *conn)
-{
- if (conn && conn->fns && conn->fns->abort) {
- conn->fns->abort(conn);
- }
-}
-
-/**
- * @ingroup altcp
- * @see tcp_close()
- */
-err_t
-altcp_close(struct altcp_pcb *conn)
-{
- if (conn && conn->fns && conn->fns->close) {
- return conn->fns->close(conn);
- }
- return ERR_VAL;
-}
-
-/**
- * @ingroup altcp
- * @see tcp_shutdown()
- */
-err_t
-altcp_shutdown(struct altcp_pcb *conn, int shut_rx, int shut_tx)
-{
- if (conn && conn->fns && conn->fns->shutdown) {
- return conn->fns->shutdown(conn, shut_rx, shut_tx);
- }
- return ERR_VAL;
-}
-
-/**
- * @ingroup altcp
- * @see tcp_write()
- */
-err_t
-altcp_write(struct altcp_pcb *conn, const void *dataptr, u16_t len, u8_t apiflags)
-{
- if (conn && conn->fns && conn->fns->write) {
- return conn->fns->write(conn, dataptr, len, apiflags);
- }
- return ERR_VAL;
-}
-
-/**
- * @ingroup altcp
- * @see tcp_output()
- */
-err_t
-altcp_output(struct altcp_pcb *conn)
-{
- if (conn && conn->fns && conn->fns->output) {
- return conn->fns->output(conn);
- }
- return ERR_VAL;
-}
-
-/**
- * @ingroup altcp
- * @see tcp_mss()
- */
-u16_t
-altcp_mss(struct altcp_pcb *conn)
-{
- if (conn && conn->fns && conn->fns->mss) {
- return conn->fns->mss(conn);
- }
- return 0;
-}
-
-/**
- * @ingroup altcp
- * @see tcp_sndbuf()
- */
-u16_t
-altcp_sndbuf(struct altcp_pcb *conn)
-{
- if (conn && conn->fns && conn->fns->sndbuf) {
- return conn->fns->sndbuf(conn);
- }
- return 0;
-}
-
-/**
- * @ingroup altcp
- * @see tcp_sndqueuelen()
- */
-u16_t
-altcp_sndqueuelen(struct altcp_pcb *conn)
-{
- if (conn && conn->fns && conn->fns->sndqueuelen) {
- return conn->fns->sndqueuelen(conn);
- }
- return 0;
-}
-
-void
-altcp_nagle_disable(struct altcp_pcb *conn)
-{
- if (conn && conn->fns && conn->fns->nagle_disable) {
- conn->fns->nagle_disable(conn);
- }
-}
-
-void
-altcp_nagle_enable(struct altcp_pcb *conn)
-{
- if (conn && conn->fns && conn->fns->nagle_enable) {
- conn->fns->nagle_enable(conn);
- }
-}
-
-int
-altcp_nagle_disabled(struct altcp_pcb *conn)
-{
- if (conn && conn->fns && conn->fns->nagle_disabled) {
- return conn->fns->nagle_disabled(conn);
- }
- return 0;
-}
-
-/**
- * @ingroup altcp
- * @see tcp_setprio()
- */
-void
-altcp_setprio(struct altcp_pcb *conn, u8_t prio)
-{
- if (conn && conn->fns && conn->fns->setprio) {
- conn->fns->setprio(conn, prio);
- }
-}
-
-err_t
-altcp_get_tcp_addrinfo(struct altcp_pcb *conn, int local, ip_addr_t *addr, u16_t *port)
-{
- if (conn && conn->fns && conn->fns->addrinfo) {
- return conn->fns->addrinfo(conn, local, addr, port);
- }
- return ERR_VAL;
-}
-
-ip_addr_t *
-altcp_get_ip(struct altcp_pcb *conn, int local)
-{
- if (conn && conn->fns && conn->fns->getip) {
- return conn->fns->getip(conn, local);
- }
- return NULL;
-}
-
-u16_t
-altcp_get_port(struct altcp_pcb *conn, int local)
-{
- if (conn && conn->fns && conn->fns->getport) {
- return conn->fns->getport(conn, local);
- }
- return 0;
-}
-
-#ifdef LWIP_DEBUG
-enum tcp_state
-altcp_dbg_get_tcp_state(struct altcp_pcb *conn)
-{
- if (conn && conn->fns && conn->fns->dbg_get_tcp_state) {
- return conn->fns->dbg_get_tcp_state(conn);
- }
- return CLOSED;
-}
-#endif
-
-/* Default implementations for the "virtual" functions */
-
-void
-altcp_default_set_poll(struct altcp_pcb *conn, u8_t interval)
-{
- if (conn && conn->inner_conn) {
- altcp_poll(conn->inner_conn, conn->poll, interval);
- }
-}
-
-void
-altcp_default_recved(struct altcp_pcb *conn, u16_t len)
-{
- if (conn && conn->inner_conn) {
- altcp_recved(conn->inner_conn, len);
- }
-}
-
-err_t
-altcp_default_bind(struct altcp_pcb *conn, const ip_addr_t *ipaddr, u16_t port)
-{
- if (conn && conn->inner_conn) {
- return altcp_bind(conn->inner_conn, ipaddr, port);
- }
- return ERR_VAL;
-}
-
-err_t
-altcp_default_shutdown(struct altcp_pcb *conn, int shut_rx, int shut_tx)
-{
- if (conn) {
- if (shut_rx && shut_tx && conn->fns && conn->fns->close) {
- /* default shutdown for both sides is close */
- return conn->fns->close(conn);
- }
- if (conn->inner_conn) {
- return altcp_shutdown(conn->inner_conn, shut_rx, shut_tx);
- }
- }
- return ERR_VAL;
-}
-
-err_t
-altcp_default_write(struct altcp_pcb *conn, const void *dataptr, u16_t len, u8_t apiflags)
-{
- if (conn && conn->inner_conn) {
- return altcp_write(conn->inner_conn, dataptr, len, apiflags);
- }
- return ERR_VAL;
-}
-
-err_t
-altcp_default_output(struct altcp_pcb *conn)
-{
- if (conn && conn->inner_conn) {
- return altcp_output(conn->inner_conn);
- }
- return ERR_VAL;
-}
-
-u16_t
-altcp_default_mss(struct altcp_pcb *conn)
-{
- if (conn && conn->inner_conn) {
- return altcp_mss(conn->inner_conn);
- }
- return 0;
-}
-
-u16_t
-altcp_default_sndbuf(struct altcp_pcb *conn)
-{
- if (conn && conn->inner_conn) {
- return altcp_sndbuf(conn->inner_conn);
- }
- return 0;
-}
-
-u16_t
-altcp_default_sndqueuelen(struct altcp_pcb *conn)
-{
- if (conn && conn->inner_conn) {
- return altcp_sndqueuelen(conn->inner_conn);
- }
- return 0;
-}
-
-void
-altcp_default_nagle_disable(struct altcp_pcb *conn)
-{
- if (conn && conn->inner_conn) {
- altcp_nagle_disable(conn->inner_conn);
- }
-}
-
-void
-altcp_default_nagle_enable(struct altcp_pcb *conn)
-{
- if (conn && conn->inner_conn) {
- altcp_nagle_enable(conn->inner_conn);
- }
-}
-
-int
-altcp_default_nagle_disabled(struct altcp_pcb *conn)
-{
- if (conn && conn->inner_conn) {
- return altcp_nagle_disabled(conn->inner_conn);
- }
- return 0;
-}
-
-void
-altcp_default_setprio(struct altcp_pcb *conn, u8_t prio)
-{
- if (conn && conn->inner_conn) {
- altcp_setprio(conn->inner_conn, prio);
- }
-}
-
-void
-altcp_default_dealloc(struct altcp_pcb *conn)
-{
- LWIP_UNUSED_ARG(conn);
- /* nothing to do */
-}
-
-err_t
-altcp_default_get_tcp_addrinfo(struct altcp_pcb *conn, int local, ip_addr_t *addr, u16_t *port)
-{
- if (conn && conn->inner_conn) {
- return altcp_get_tcp_addrinfo(conn->inner_conn, local, addr, port);
- }
- return ERR_VAL;
-}
-
-ip_addr_t *
-altcp_default_get_ip(struct altcp_pcb *conn, int local)
-{
- if (conn && conn->inner_conn) {
- return altcp_get_ip(conn->inner_conn, local);
- }
- return NULL;
-}
-
-u16_t
-altcp_default_get_port(struct altcp_pcb *conn, int local)
-{
- if (conn && conn->inner_conn) {
- return altcp_get_port(conn->inner_conn, local);
- }
- return 0;
-}
-
-#ifdef LWIP_DEBUG
-enum tcp_state
-altcp_default_dbg_get_tcp_state(struct altcp_pcb *conn)
-{
- if (conn && conn->inner_conn) {
- return altcp_dbg_get_tcp_state(conn->inner_conn);
- }
- return CLOSED;
-}
-#endif
-
-
-#endif /* LWIP_ALTCP */
diff --git a/third-party/lwip-2.1.2/core/altcp_alloc.c b/third-party/lwip-2.1.2/core/altcp_alloc.c
deleted file mode 100644
index cd619bc1b10566ae35c71e46aa12ab31fa12ca83..0000000000000000000000000000000000000000
--- a/third-party/lwip-2.1.2/core/altcp_alloc.c
+++ /dev/null
@@ -1,87 +0,0 @@
-/**
- * @file
- * Application layered TCP connection API (to be used from TCPIP thread)\n
- * This interface mimics the tcp callback API to the application while preventing
- * direct linking (much like virtual functions).
- * This way, an application can make use of other application layer protocols
- * on top of TCP without knowing the details (e.g. TLS, proxy connection).
- *
- * This file contains allocation implementation that combine several layers.
- */
-
-/*
- * Copyright (c) 2017 Simon Goldschmidt
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
- * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
- * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
- * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
- * OF SUCH DAMAGE.
- *
- * This file is part of the lwIP TCP/IP stack.
- *
- * Author: Simon Goldschmidt
- *
- */
-
-#include "lwip/opt.h"
-
-#if LWIP_ALTCP /* don't build if not configured for use in lwipopts.h */
-
-#include "lwip/altcp.h"
-#include "lwip/altcp_tcp.h"
-#include "lwip/altcp_tls.h"
-#include "lwip/priv/altcp_priv.h"
-#include "lwip/mem.h"
-
-#include
-
-#if LWIP_ALTCP_TLS
-
-/** This standard allocator function creates an altcp pcb for
- * TLS over TCP */
-struct altcp_pcb *
-altcp_tls_new(struct altcp_tls_config *config, u8_t ip_type)
-{
- struct altcp_pcb *inner_conn, *ret;
- LWIP_UNUSED_ARG(ip_type);
-
- inner_conn = altcp_tcp_new_ip_type(ip_type);
- if (inner_conn == NULL) {
- return NULL;
- }
- ret = altcp_tls_wrap(config, inner_conn);
- if (ret == NULL) {
- altcp_close(inner_conn);
- }
- return ret;
-}
-
-/** This standard allocator function creates an altcp pcb for
- * TLS over TCP */
-struct altcp_pcb *
-altcp_tls_alloc(void *arg, u8_t ip_type)
-{
- return altcp_tls_new((struct altcp_tls_config *)arg, ip_type);
-}
-
-#endif /* LWIP_ALTCP_TLS */
-
-#endif /* LWIP_ALTCP */
diff --git a/third-party/lwip-2.1.2/core/altcp_tcp.c b/third-party/lwip-2.1.2/core/altcp_tcp.c
deleted file mode 100644
index b715f045709b466437c290376083d299b97ae9a6..0000000000000000000000000000000000000000
--- a/third-party/lwip-2.1.2/core/altcp_tcp.c
+++ /dev/null
@@ -1,543 +0,0 @@
-/**
- * @file
- * Application layered TCP connection API (to be used from TCPIP thread)\n
- * This interface mimics the tcp callback API to the application while preventing
- * direct linking (much like virtual functions).
- * This way, an application can make use of other application layer protocols
- * on top of TCP without knowing the details (e.g. TLS, proxy connection).
- *
- * This file contains the base implementation calling into tcp.
- */
-
-/*
- * Copyright (c) 2017 Simon Goldschmidt
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
- * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
- * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
- * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
- * OF SUCH DAMAGE.
- *
- * This file is part of the lwIP TCP/IP stack.
- *
- * Author: Simon Goldschmidt
- *
- */
-
-#include "lwip/opt.h"
-
-#if LWIP_ALTCP /* don't build if not configured for use in lwipopts.h */
-
-#include "lwip/altcp.h"
-#include "lwip/altcp_tcp.h"
-#include "lwip/priv/altcp_priv.h"
-#include "lwip/tcp.h"
-#include "lwip/mem.h"
-
-#include
-
-#define ALTCP_TCP_ASSERT_CONN(conn) do { \
- LWIP_ASSERT("conn->inner_conn == NULL", (conn)->inner_conn == NULL); \
- LWIP_UNUSED_ARG(conn); /* for LWIP_NOASSERT */ } while(0)
-#define ALTCP_TCP_ASSERT_CONN_PCB(conn, tpcb) do { \
- LWIP_ASSERT("pcb mismatch", (conn)->state == tpcb); \
- LWIP_UNUSED_ARG(tpcb); /* for LWIP_NOASSERT */ \
- ALTCP_TCP_ASSERT_CONN(conn); } while(0)
-
-
-/* Variable prototype, the actual declaration is at the end of this file
- since it contains pointers to static functions declared here */
-extern const struct altcp_functions altcp_tcp_functions;
-
-static void altcp_tcp_setup(struct altcp_pcb *conn, struct tcp_pcb *tpcb);
-
-/* callback functions for TCP */
-static err_t
-altcp_tcp_accept(void *arg, struct tcp_pcb *new_tpcb, err_t err)
-{
- struct altcp_pcb *listen_conn = (struct altcp_pcb *)arg;
- if (listen_conn && listen_conn->accept) {
- /* create a new altcp_conn to pass to the next 'accept' callback */
- struct altcp_pcb *new_conn = altcp_alloc();
- if (new_conn == NULL) {
- return ERR_MEM;
- }
- altcp_tcp_setup(new_conn, new_tpcb);
- return listen_conn->accept(listen_conn->arg, new_conn, err);
- }
- return ERR_ARG;
-}
-
-static err_t
-altcp_tcp_connected(void *arg, struct tcp_pcb *tpcb, err_t err)
-{
- struct altcp_pcb *conn = (struct altcp_pcb *)arg;
- if (conn) {
- ALTCP_TCP_ASSERT_CONN_PCB(conn, tpcb);
- if (conn->connected) {
- return conn->connected(conn->arg, conn, err);
- }
- }
- return ERR_OK;
-}
-
-static err_t
-altcp_tcp_recv(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err)
-{
- struct altcp_pcb *conn = (struct altcp_pcb *)arg;
- if (conn) {
- ALTCP_TCP_ASSERT_CONN_PCB(conn, tpcb);
- if (conn->recv) {
- return conn->recv(conn->arg, conn, p, err);
- }
- }
- if (p != NULL) {
- /* prevent memory leaks */
- pbuf_free(p);
- }
- return ERR_OK;
-}
-
-static err_t
-altcp_tcp_sent(void *arg, struct tcp_pcb *tpcb, u16_t len)
-{
- struct altcp_pcb *conn = (struct altcp_pcb *)arg;
- if (conn) {
- ALTCP_TCP_ASSERT_CONN_PCB(conn, tpcb);
- if (conn->sent) {
- return conn->sent(conn->arg, conn, len);
- }
- }
- return ERR_OK;
-}
-
-static err_t
-altcp_tcp_poll(void *arg, struct tcp_pcb *tpcb)
-{
- struct altcp_pcb *conn = (struct altcp_pcb *)arg;
- if (conn) {
- ALTCP_TCP_ASSERT_CONN_PCB(conn, tpcb);
- if (conn->poll) {
- return conn->poll(conn->arg, conn);
- }
- }
- return ERR_OK;
-}
-
-static void
-altcp_tcp_err(void *arg, err_t err)
-{
- struct altcp_pcb *conn = (struct altcp_pcb *)arg;
- if (conn) {
- conn->state = NULL; /* already freed */
- if (conn->err) {
- conn->err(conn->arg, err);
- }
- altcp_free(conn);
- }
-}
-
-/* setup functions */
-
-static void
-altcp_tcp_remove_callbacks(struct tcp_pcb *tpcb)
-{
- tcp_arg(tpcb, NULL);
- tcp_recv(tpcb, NULL);
- tcp_sent(tpcb, NULL);
- tcp_err(tpcb, NULL);
- tcp_poll(tpcb, NULL, tpcb->pollinterval);
-}
-
-static void
-altcp_tcp_setup_callbacks(struct altcp_pcb *conn, struct tcp_pcb *tpcb)
-{
- tcp_arg(tpcb, conn);
- tcp_recv(tpcb, altcp_tcp_recv);
- tcp_sent(tpcb, altcp_tcp_sent);
- tcp_err(tpcb, altcp_tcp_err);
- /* tcp_poll is set when interval is set by application */
- /* listen is set totally different :-) */
-}
-
-static void
-altcp_tcp_setup(struct altcp_pcb *conn, struct tcp_pcb *tpcb)
-{
- altcp_tcp_setup_callbacks(conn, tpcb);
- conn->state = tpcb;
- conn->fns = &altcp_tcp_functions;
-}
-
-struct altcp_pcb *
-altcp_tcp_new_ip_type(u8_t ip_type)
-{
- /* Allocate the tcp pcb first to invoke the priority handling code
- if we're out of pcbs */
- struct tcp_pcb *tpcb = tcp_new_ip_type(ip_type);
- if (tpcb != NULL) {
- struct altcp_pcb *ret = altcp_alloc();
- if (ret != NULL) {
- altcp_tcp_setup(ret, tpcb);
- return ret;
- } else {
- /* altcp_pcb allocation failed -> free the tcp_pcb too */
- tcp_close(tpcb);
- }
- }
- return NULL;
-}
-
-/** altcp_tcp allocator function fitting to @ref altcp_allocator_t / @ref altcp_new.
-*
-* arg pointer is not used for TCP.
-*/
-struct altcp_pcb *
-altcp_tcp_alloc(void *arg, u8_t ip_type)
-{
- LWIP_UNUSED_ARG(arg);
- return altcp_tcp_new_ip_type(ip_type);
-}
-
-struct altcp_pcb *
-altcp_tcp_wrap(struct tcp_pcb *tpcb)
-{
- if (tpcb != NULL) {
- struct altcp_pcb *ret = altcp_alloc();
- if (ret != NULL) {
- altcp_tcp_setup(ret, tpcb);
- return ret;
- }
- }
- return NULL;
-}
-
-
-/* "virtual" functions calling into tcp */
-static void
-altcp_tcp_set_poll(struct altcp_pcb *conn, u8_t interval)
-{
- if (conn != NULL) {
- struct tcp_pcb *pcb = (struct tcp_pcb *)conn->state;
- ALTCP_TCP_ASSERT_CONN(conn);
- tcp_poll(pcb, altcp_tcp_poll, interval);
- }
-}
-
-static void
-altcp_tcp_recved(struct altcp_pcb *conn, u16_t len)
-{
- if (conn != NULL) {
- struct tcp_pcb *pcb = (struct tcp_pcb *)conn->state;
- ALTCP_TCP_ASSERT_CONN(conn);
- tcp_recved(pcb, len);
- }
-}
-
-static err_t
-altcp_tcp_bind(struct altcp_pcb *conn, const ip_addr_t *ipaddr, u16_t port)
-{
- struct tcp_pcb *pcb;
- if (conn == NULL) {
- return ERR_VAL;
- }
- ALTCP_TCP_ASSERT_CONN(conn);
- pcb = (struct tcp_pcb *)conn->state;
- return tcp_bind(pcb, ipaddr, port);
-}
-
-static err_t
-altcp_tcp_connect(struct altcp_pcb *conn, const ip_addr_t *ipaddr, u16_t port, altcp_connected_fn connected)
-{
- struct tcp_pcb *pcb;
- if (conn == NULL) {
- return ERR_VAL;
- }
- ALTCP_TCP_ASSERT_CONN(conn);
- conn->connected = connected;
- pcb = (struct tcp_pcb *)conn->state;
- return tcp_connect(pcb, ipaddr, port, altcp_tcp_connected);
-}
-
-static struct altcp_pcb *
-altcp_tcp_listen(struct altcp_pcb *conn, u8_t backlog, err_t *err)
-{
- struct tcp_pcb *pcb;
- struct tcp_pcb *lpcb;
- if (conn == NULL) {
- return NULL;
- }
- ALTCP_TCP_ASSERT_CONN(conn);
- pcb = (struct tcp_pcb *)conn->state;
- lpcb = tcp_listen_with_backlog_and_err(pcb, backlog, err);
- if (lpcb != NULL) {
- conn->state = lpcb;
- tcp_accept(lpcb, altcp_tcp_accept);
- return conn;
- }
- return NULL;
-}
-
-static void
-altcp_tcp_abort(struct altcp_pcb *conn)
-{
- if (conn != NULL) {
- struct tcp_pcb *pcb = (struct tcp_pcb *)conn->state;
- ALTCP_TCP_ASSERT_CONN(conn);
- if (pcb) {
- tcp_abort(pcb);
- }
- }
-}
-
-static err_t
-altcp_tcp_close(struct altcp_pcb *conn)
-{
- struct tcp_pcb *pcb;
- if (conn == NULL) {
- return ERR_VAL;
- }
- ALTCP_TCP_ASSERT_CONN(conn);
- pcb = (struct tcp_pcb *)conn->state;
- if (pcb) {
- err_t err;
- tcp_poll_fn oldpoll = pcb->poll;
- altcp_tcp_remove_callbacks(pcb);
- err = tcp_close(pcb);
- if (err != ERR_OK) {
- /* not closed, set up all callbacks again */
- altcp_tcp_setup_callbacks(conn, pcb);
- /* poll callback is not included in the above */
- tcp_poll(pcb, oldpoll, pcb->pollinterval);
- return err;
- }
- conn->state = NULL; /* unsafe to reference pcb after tcp_close(). */
- }
- altcp_free(conn);
- return ERR_OK;
-}
-
-static err_t
-altcp_tcp_shutdown(struct altcp_pcb *conn, int shut_rx, int shut_tx)
-{
- struct tcp_pcb *pcb;
- if (conn == NULL) {
- return ERR_VAL;
- }
- ALTCP_TCP_ASSERT_CONN(conn);
- pcb = (struct tcp_pcb *)conn->state;
- return tcp_shutdown(pcb, shut_rx, shut_tx);
-}
-
-static err_t
-altcp_tcp_write(struct altcp_pcb *conn, const void *dataptr, u16_t len, u8_t apiflags)
-{
- struct tcp_pcb *pcb;
- if (conn == NULL) {
- return ERR_VAL;
- }
- ALTCP_TCP_ASSERT_CONN(conn);
- pcb = (struct tcp_pcb *)conn->state;
- return tcp_write(pcb, dataptr, len, apiflags);
-}
-
-static err_t
-altcp_tcp_output(struct altcp_pcb *conn)
-{
- struct tcp_pcb *pcb;
- if (conn == NULL) {
- return ERR_VAL;
- }
- ALTCP_TCP_ASSERT_CONN(conn);
- pcb = (struct tcp_pcb *)conn->state;
- return tcp_output(pcb);
-}
-
-static u16_t
-altcp_tcp_mss(struct altcp_pcb *conn)
-{
- struct tcp_pcb *pcb;
- if (conn == NULL) {
- return 0;
- }
- ALTCP_TCP_ASSERT_CONN(conn);
- pcb = (struct tcp_pcb *)conn->state;
- return tcp_mss(pcb);
-}
-
-static u16_t
-altcp_tcp_sndbuf(struct altcp_pcb *conn)
-{
- struct tcp_pcb *pcb;
- if (conn == NULL) {
- return 0;
- }
- ALTCP_TCP_ASSERT_CONN(conn);
- pcb = (struct tcp_pcb *)conn->state;
- return tcp_sndbuf(pcb);
-}
-
-static u16_t
-altcp_tcp_sndqueuelen(struct altcp_pcb *conn)
-{
- struct tcp_pcb *pcb;
- if (conn == NULL) {
- return 0;
- }
- ALTCP_TCP_ASSERT_CONN(conn);
- pcb = (struct tcp_pcb *)conn->state;
- return tcp_sndqueuelen(pcb);
-}
-
-static void
-altcp_tcp_nagle_disable(struct altcp_pcb *conn)
-{
- if (conn && conn->state) {
- struct tcp_pcb *pcb = (struct tcp_pcb *)conn->state;
- ALTCP_TCP_ASSERT_CONN(conn);
- tcp_nagle_disable(pcb);
- }
-}
-
-static void
-altcp_tcp_nagle_enable(struct altcp_pcb *conn)
-{
- if (conn && conn->state) {
- struct tcp_pcb *pcb = (struct tcp_pcb *)conn->state;
- ALTCP_TCP_ASSERT_CONN(conn);
- tcp_nagle_enable(pcb);
- }
-}
-
-static int
-altcp_tcp_nagle_disabled(struct altcp_pcb *conn)
-{
- if (conn && conn->state) {
- struct tcp_pcb *pcb = (struct tcp_pcb *)conn->state;
- ALTCP_TCP_ASSERT_CONN(conn);
- return tcp_nagle_disabled(pcb);
- }
- return 0;
-}
-
-static void
-altcp_tcp_setprio(struct altcp_pcb *conn, u8_t prio)
-{
- if (conn != NULL) {
- struct tcp_pcb *pcb = (struct tcp_pcb *)conn->state;
- ALTCP_TCP_ASSERT_CONN(conn);
- tcp_setprio(pcb, prio);
- }
-}
-
-static void
-altcp_tcp_dealloc(struct altcp_pcb *conn)
-{
- LWIP_UNUSED_ARG(conn);
- ALTCP_TCP_ASSERT_CONN(conn);
- /* no private state to clean up */
-}
-
-static err_t
-altcp_tcp_get_tcp_addrinfo(struct altcp_pcb *conn, int local, ip_addr_t *addr, u16_t *port)
-{
- if (conn) {
- struct tcp_pcb *pcb = (struct tcp_pcb *)conn->state;
- ALTCP_TCP_ASSERT_CONN(conn);
- return tcp_tcp_get_tcp_addrinfo(pcb, local, addr, port);
- }
- return ERR_VAL;
-}
-
-static ip_addr_t *
-altcp_tcp_get_ip(struct altcp_pcb *conn, int local)
-{
- if (conn) {
- struct tcp_pcb *pcb = (struct tcp_pcb *)conn->state;
- ALTCP_TCP_ASSERT_CONN(conn);
- if (pcb) {
- if (local) {
- return &pcb->local_ip;
- } else {
- return &pcb->remote_ip;
- }
- }
- }
- return NULL;
-}
-
-static u16_t
-altcp_tcp_get_port(struct altcp_pcb *conn, int local)
-{
- if (conn) {
- struct tcp_pcb *pcb = (struct tcp_pcb *)conn->state;
- ALTCP_TCP_ASSERT_CONN(conn);
- if (pcb) {
- if (local) {
- return pcb->local_port;
- } else {
- return pcb->remote_port;
- }
- }
- }
- return 0;
-}
-
-#ifdef LWIP_DEBUG
-static enum tcp_state
-altcp_tcp_dbg_get_tcp_state(struct altcp_pcb *conn)
-{
- if (conn) {
- struct tcp_pcb *pcb = (struct tcp_pcb *)conn->state;
- ALTCP_TCP_ASSERT_CONN(conn);
- if (pcb) {
- return pcb->state;
- }
- }
- return CLOSED;
-}
-#endif
-const struct altcp_functions altcp_tcp_functions = {
- altcp_tcp_set_poll,
- altcp_tcp_recved,
- altcp_tcp_bind,
- altcp_tcp_connect,
- altcp_tcp_listen,
- altcp_tcp_abort,
- altcp_tcp_close,
- altcp_tcp_shutdown,
- altcp_tcp_write,
- altcp_tcp_output,
- altcp_tcp_mss,
- altcp_tcp_sndbuf,
- altcp_tcp_sndqueuelen,
- altcp_tcp_nagle_disable,
- altcp_tcp_nagle_enable,
- altcp_tcp_nagle_disabled,
- altcp_tcp_setprio,
- altcp_tcp_dealloc,
- altcp_tcp_get_tcp_addrinfo,
- altcp_tcp_get_ip,
- altcp_tcp_get_port
-#ifdef LWIP_DEBUG
- , altcp_tcp_dbg_get_tcp_state
-#endif
-};
-
-#endif /* LWIP_ALTCP */
diff --git a/third-party/lwip-2.1.2/core/def.c b/third-party/lwip-2.1.2/core/def.c
deleted file mode 100644
index 9da36fee8a146a77485909fd50ed78460ddca182..0000000000000000000000000000000000000000
--- a/third-party/lwip-2.1.2/core/def.c
+++ /dev/null
@@ -1,240 +0,0 @@
-/**
- * @file
- * Common functions used throughout the stack.
- *
- * These are reference implementations of the byte swapping functions.
- * Again with the aim of being simple, correct and fully portable.
- * Byte swapping is the second thing you would want to optimize. You will
- * need to port it to your architecture and in your cc.h:
- *
- * \#define lwip_htons(x) your_htons
- * \#define lwip_htonl(x) your_htonl
- *
- * Note lwip_ntohs() and lwip_ntohl() are merely references to the htonx counterparts.
- *
- * If you \#define them to htons() and htonl(), you should
- * \#define LWIP_DONT_PROVIDE_BYTEORDER_FUNCTIONS to prevent lwIP from
- * defining htonx/ntohx compatibility macros.
-
- * @defgroup sys_nonstandard Non-standard functions
- * @ingroup sys_layer
- * lwIP provides default implementations for non-standard functions.
- * These can be mapped to OS functions to reduce code footprint if desired.
- * All defines related to this section must not be placed in lwipopts.h,
- * but in arch/cc.h!
- * These options cannot be \#defined in lwipopts.h since they are not options
- * of lwIP itself, but options of the lwIP port to your system.
- */
-
-/*
- * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
- * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
- * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
- * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
- * OF SUCH DAMAGE.
- *
- * This file is part of the lwIP TCP/IP stack.
- *
- * Author: Simon Goldschmidt
- *
- */
-
-#include "lwip/opt.h"
-#include "lwip/def.h"
-
-#include
-
-#if BYTE_ORDER == LITTLE_ENDIAN
-
-#if !defined(lwip_htons)
-/**
- * Convert an u16_t from host- to network byte order.
- *
- * @param n u16_t in host byte order
- * @return n in network byte order
- */
-u16_t
-lwip_htons(u16_t n)
-{
- return PP_HTONS(n);
-}
-#endif /* lwip_htons */
-
-#if !defined(lwip_htonl)
-/**
- * Convert an u32_t from host- to network byte order.
- *
- * @param n u32_t in host byte order
- * @return n in network byte order
- */
-u32_t
-lwip_htonl(u32_t n)
-{
- return PP_HTONL(n);
-}
-#endif /* lwip_htonl */
-
-#endif /* BYTE_ORDER == LITTLE_ENDIAN */
-
-#ifndef lwip_strnstr
-/**
- * @ingroup sys_nonstandard
- * lwIP default implementation for strnstr() non-standard function.
- * This can be \#defined to strnstr() depending on your platform port.
- */
-char *
-lwip_strnstr(const char *buffer, const char *token, size_t n)
-{
- const char *p;
- size_t tokenlen = strlen(token);
- if (tokenlen == 0) {
- return LWIP_CONST_CAST(char *, buffer);
- }
- for (p = buffer; *p && (p + tokenlen <= buffer + n); p++) {
- if ((*p == *token) && (strncmp(p, token, tokenlen) == 0)) {
- return LWIP_CONST_CAST(char *, p);
- }
- }
- return NULL;
-}
-#endif
-
-#ifndef lwip_stricmp
-/**
- * @ingroup sys_nonstandard
- * lwIP default implementation for stricmp() non-standard function.
- * This can be \#defined to stricmp() depending on your platform port.
- */
-int
-lwip_stricmp(const char *str1, const char *str2)
-{
- char c1, c2;
-
- do {
- c1 = *str1++;
- c2 = *str2++;
- if (c1 != c2) {
- char c1_upc = c1 | 0x20;
- if ((c1_upc >= 'a') && (c1_upc <= 'z')) {
- /* characters are not equal an one is in the alphabet range:
- downcase both chars and check again */
- char c2_upc = c2 | 0x20;
- if (c1_upc != c2_upc) {
- /* still not equal */
- /* don't care for < or > */
- return 1;
- }
- } else {
- /* characters are not equal but none is in the alphabet range */
- return 1;
- }
- }
- } while (c1 != 0);
- return 0;
-}
-#endif
-
-#ifndef lwip_strnicmp
-/**
- * @ingroup sys_nonstandard
- * lwIP default implementation for strnicmp() non-standard function.
- * This can be \#defined to strnicmp() depending on your platform port.
- */
-int
-lwip_strnicmp(const char *str1, const char *str2, size_t len)
-{
- char c1, c2;
-
- do {
- c1 = *str1++;
- c2 = *str2++;
- if (c1 != c2) {
- char c1_upc = c1 | 0x20;
- if ((c1_upc >= 'a') && (c1_upc <= 'z')) {
- /* characters are not equal an one is in the alphabet range:
- downcase both chars and check again */
- char c2_upc = c2 | 0x20;
- if (c1_upc != c2_upc) {
- /* still not equal */
- /* don't care for < or > */
- return 1;
- }
- } else {
- /* characters are not equal but none is in the alphabet range */
- return 1;
- }
- }
- len--;
- } while ((len != 0) && (c1 != 0));
- return 0;
-}
-#endif
-
-#ifndef lwip_itoa
-/**
- * @ingroup sys_nonstandard
- * lwIP default implementation for itoa() non-standard function.
- * This can be \#defined to itoa() or snprintf(result, bufsize, "%d", number) depending on your platform port.
- */
-void
-lwip_itoa(char *result, size_t bufsize, int number)
-{
- char *res = result;
- char *tmp = result + bufsize - 1;
- int n = (number >= 0) ? number : -number;
-
- /* handle invalid bufsize */
- if (bufsize < 2) {
- if (bufsize == 1) {
- *result = 0;
- }
- return;
- }
-
- /* First, add sign */
- if (number < 0) {
- *res++ = '-';
- }
- /* Then create the string from the end and stop if buffer full,
- and ensure output string is zero terminated */
- *tmp = 0;
- while ((n != 0) && (tmp > res)) {
- char val = (char)('0' + (n % 10));
- tmp--;
- *tmp = val;
- n = n / 10;
- }
- if (n) {
- /* buffer is too small */
- *result = 0;
- return;
- }
- if (*tmp == 0) {
- /* Nothing added? */
- *res++ = '0';
- *res++ = 0;
- return;
- }
- /* move from temporary buffer to output buffer (sign is not moved) */
- memmove(res, tmp, (size_t)((result + bufsize) - tmp));
-}
-#endif
diff --git a/third-party/lwip-2.1.2/core/dns.c b/third-party/lwip-2.1.2/core/dns.c
deleted file mode 100644
index 9d2f61ed86ba71b2b236eb3b6acf2650ac3b3864..0000000000000000000000000000000000000000
--- a/third-party/lwip-2.1.2/core/dns.c
+++ /dev/null
@@ -1,1631 +0,0 @@
-/**
- * @file
- * DNS - host name to IP address resolver.
- *
- * @defgroup dns DNS
- * @ingroup callbackstyle_api
- *
- * Implements a DNS host name to IP address resolver.
- *
- * The lwIP DNS resolver functions are used to lookup a host name and
- * map it to a numerical IP address. It maintains a list of resolved
- * hostnames that can be queried with the dns_lookup() function.
- * New hostnames can be resolved using the dns_query() function.
- *
- * The lwIP version of the resolver also adds a non-blocking version of
- * gethostbyname() that will work with a raw API application. This function
- * checks for an IP address string first and converts it if it is valid.
- * gethostbyname() then does a dns_lookup() to see if the name is
- * already in the table. If so, the IP is returned. If not, a query is
- * issued and the function returns with a ERR_INPROGRESS status. The app
- * using the dns client must then go into a waiting state.
- *
- * Once a hostname has been resolved (or found to be non-existent),
- * the resolver code calls a specified callback function (which
- * must be implemented by the module that uses the resolver).
- *
- * Multicast DNS queries are supported for names ending on ".local".
- * However, only "One-Shot Multicast DNS Queries" are supported (RFC 6762
- * chapter 5.1), this is not a fully compliant implementation of continuous
- * mDNS querying!
- *
- * All functions must be called from TCPIP thread.
- *
- * @see DNS_MAX_SERVERS
- * @see LWIP_DHCP_MAX_DNS_SERVERS
- * @see @ref netconn_common for thread-safe access.
- */
-
-/*
- * Port to lwIP from uIP
- * by Jim Pettinato April 2007
- *
- * security fixes and more by Simon Goldschmidt
- *
- * uIP version Copyright (c) 2002-2003, Adam Dunkels.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote
- * products derived from this software without specific prior
- * written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
- * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
- * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/*-----------------------------------------------------------------------------
- * RFC 1035 - Domain names - implementation and specification
- * RFC 2181 - Clarifications to the DNS Specification
- *----------------------------------------------------------------------------*/
-
-/** @todo: define good default values (rfc compliance) */
-/** @todo: improve answer parsing, more checkings... */
-/** @todo: check RFC1035 - 7.3. Processing responses */
-/** @todo: one-shot mDNS: dual-stack fallback to another IP version */
-
-/*-----------------------------------------------------------------------------
- * Includes
- *----------------------------------------------------------------------------*/
-
-#include "lwip/opt.h"
-
-#if LWIP_DNS /* don't build if not configured for use in lwipopts.h */
-
-#include "lwip/def.h"
-#include "lwip/udp.h"
-#include "lwip/mem.h"
-#include "lwip/memp.h"
-#include "lwip/dns.h"
-#include "lwip/prot/dns.h"
-
-#include
-
-/** Random generator function to create random TXIDs and source ports for queries */
-#ifndef DNS_RAND_TXID
-#if ((LWIP_DNS_SECURE & LWIP_DNS_SECURE_RAND_XID) != 0)
-#define DNS_RAND_TXID LWIP_RAND
-#else
-static u16_t dns_txid;
-#define DNS_RAND_TXID() (++dns_txid)
-#endif
-#endif
-
-/** Limits the source port to be >= 1024 by default */
-#ifndef DNS_PORT_ALLOWED
-#define DNS_PORT_ALLOWED(port) ((port) >= 1024)
-#endif
-
-/** DNS resource record max. TTL (one week as default) */
-#ifndef DNS_MAX_TTL
-#define DNS_MAX_TTL 604800
-#elif DNS_MAX_TTL > 0x7FFFFFFF
-#error DNS_MAX_TTL must be a positive 32-bit value
-#endif
-
-#if DNS_TABLE_SIZE > 255
-#error DNS_TABLE_SIZE must fit into an u8_t
-#endif
-#if DNS_MAX_SERVERS > 255
-#error DNS_MAX_SERVERS must fit into an u8_t
-#endif
-
-/* The number of parallel requests (i.e. calls to dns_gethostbyname
- * that cannot be answered from the DNS table.
- * This is set to the table size by default.
- */
-#if ((LWIP_DNS_SECURE & LWIP_DNS_SECURE_NO_MULTIPLE_OUTSTANDING) != 0)
-#ifndef DNS_MAX_REQUESTS
-#define DNS_MAX_REQUESTS DNS_TABLE_SIZE
-#else
-#if DNS_MAX_REQUESTS > 255
-#error DNS_MAX_REQUESTS must fit into an u8_t
-#endif
-#endif
-#else
-/* In this configuration, both arrays have to have the same size and are used
- * like one entry (used/free) */
-#define DNS_MAX_REQUESTS DNS_TABLE_SIZE
-#endif
-
-/* The number of UDP source ports used in parallel */
-#if ((LWIP_DNS_SECURE & LWIP_DNS_SECURE_RAND_SRC_PORT) != 0)
-#ifndef DNS_MAX_SOURCE_PORTS
-#define DNS_MAX_SOURCE_PORTS DNS_MAX_REQUESTS
-#else
-#if DNS_MAX_SOURCE_PORTS > 255
-#error DNS_MAX_SOURCE_PORTS must fit into an u8_t
-#endif
-#endif
-#else
-#ifdef DNS_MAX_SOURCE_PORTS
-#undef DNS_MAX_SOURCE_PORTS
-#endif
-#define DNS_MAX_SOURCE_PORTS 1
-#endif
-
-#if LWIP_IPV4 && LWIP_IPV6
-#define LWIP_DNS_ADDRTYPE_IS_IPV6(t) (((t) == LWIP_DNS_ADDRTYPE_IPV6_IPV4) || ((t) == LWIP_DNS_ADDRTYPE_IPV6))
-#define LWIP_DNS_ADDRTYPE_MATCH_IP(t, ip) (IP_IS_V6_VAL(ip) ? LWIP_DNS_ADDRTYPE_IS_IPV6(t) : (!LWIP_DNS_ADDRTYPE_IS_IPV6(t)))
-#define LWIP_DNS_ADDRTYPE_ARG(x) , x
-#define LWIP_DNS_ADDRTYPE_ARG_OR_ZERO(x) x
-#define LWIP_DNS_SET_ADDRTYPE(x, y) do { x = y; } while(0)
-#else
-#if LWIP_IPV6
-#define LWIP_DNS_ADDRTYPE_IS_IPV6(t) 1
-#else
-#define LWIP_DNS_ADDRTYPE_IS_IPV6(t) 0
-#endif
-#define LWIP_DNS_ADDRTYPE_MATCH_IP(t, ip) 1
-#define LWIP_DNS_ADDRTYPE_ARG(x)
-#define LWIP_DNS_ADDRTYPE_ARG_OR_ZERO(x) 0
-#define LWIP_DNS_SET_ADDRTYPE(x, y)
-#endif /* LWIP_IPV4 && LWIP_IPV6 */
-
-#if LWIP_DNS_SUPPORT_MDNS_QUERIES
-#define LWIP_DNS_ISMDNS_ARG(x) , x
-#else
-#define LWIP_DNS_ISMDNS_ARG(x)
-#endif
-
-/** DNS query message structure.
- No packing needed: only used locally on the stack. */
-struct dns_query {
- /* DNS query record starts with either a domain name or a pointer
- to a name already present somewhere in the packet. */
- u16_t type;
- u16_t cls;
-};
-#define SIZEOF_DNS_QUERY 4
-
-/** DNS answer message structure.
- No packing needed: only used locally on the stack. */
-struct dns_answer {
- /* DNS answer record starts with either a domain name or a pointer
- to a name already present somewhere in the packet. */
- u16_t type;
- u16_t cls;
- u32_t ttl;
- u16_t len;
-};
-#define SIZEOF_DNS_ANSWER 10
-/* maximum allowed size for the struct due to non-packed */
-#define SIZEOF_DNS_ANSWER_ASSERT 12
-
-/* DNS table entry states */
-typedef enum {
- DNS_STATE_UNUSED = 0,
- DNS_STATE_NEW = 1,
- DNS_STATE_ASKING = 2,
- DNS_STATE_DONE = 3
-} dns_state_enum_t;
-
-/** DNS table entry */
-struct dns_table_entry {
- u32_t ttl;
- ip_addr_t ipaddr;
- u16_t txid;
- u8_t state;
- u8_t server_idx;
- u8_t tmr;
- u8_t retries;
- u8_t seqno;
-#if ((LWIP_DNS_SECURE & LWIP_DNS_SECURE_RAND_SRC_PORT) != 0)
- u8_t pcb_idx;
-#endif
- char name[DNS_MAX_NAME_LENGTH];
-#if LWIP_IPV4 && LWIP_IPV6
- u8_t reqaddrtype;
-#endif /* LWIP_IPV4 && LWIP_IPV6 */
-#if LWIP_DNS_SUPPORT_MDNS_QUERIES
- u8_t is_mdns;
-#endif
-};
-
-/** DNS request table entry: used when dns_gehostbyname cannot answer the
- * request from the DNS table */
-struct dns_req_entry {
- /* pointer to callback on DNS query done */
- dns_found_callback found;
- /* argument passed to the callback function */
- void *arg;
-#if ((LWIP_DNS_SECURE & LWIP_DNS_SECURE_NO_MULTIPLE_OUTSTANDING) != 0)
- u8_t dns_table_idx;
-#endif
-#if LWIP_IPV4 && LWIP_IPV6
- u8_t reqaddrtype;
-#endif /* LWIP_IPV4 && LWIP_IPV6 */
-};
-
-#if DNS_LOCAL_HOSTLIST
-
-#if DNS_LOCAL_HOSTLIST_IS_DYNAMIC
-/** Local host-list. For hostnames in this list, no
- * external name resolution is performed */
-static struct local_hostlist_entry *local_hostlist_dynamic;
-#else /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC */
-
-/** Defining this allows the local_hostlist_static to be placed in a different
- * linker section (e.g. FLASH) */
-#ifndef DNS_LOCAL_HOSTLIST_STORAGE_PRE
-#define DNS_LOCAL_HOSTLIST_STORAGE_PRE static
-#endif /* DNS_LOCAL_HOSTLIST_STORAGE_PRE */
-/** Defining this allows the local_hostlist_static to be placed in a different
- * linker section (e.g. FLASH) */
-#ifndef DNS_LOCAL_HOSTLIST_STORAGE_POST
-#define DNS_LOCAL_HOSTLIST_STORAGE_POST
-#endif /* DNS_LOCAL_HOSTLIST_STORAGE_POST */
-DNS_LOCAL_HOSTLIST_STORAGE_PRE struct local_hostlist_entry local_hostlist_static[]
- DNS_LOCAL_HOSTLIST_STORAGE_POST = DNS_LOCAL_HOSTLIST_INIT;
-
-#endif /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC */
-
-static void dns_init_local(void);
-static err_t dns_lookup_local(const char *hostname, ip_addr_t *addr LWIP_DNS_ADDRTYPE_ARG(u8_t dns_addrtype));
-#endif /* DNS_LOCAL_HOSTLIST */
-
-
-/* forward declarations */
-static void dns_recv(void *s, struct udp_pcb *pcb, struct pbuf *p, const ip_addr_t *addr, u16_t port);
-static void dns_check_entries(void);
-static void dns_call_found(u8_t idx, ip_addr_t *addr);
-
-/*-----------------------------------------------------------------------------
- * Globals
- *----------------------------------------------------------------------------*/
-
-/* DNS variables */
-static struct udp_pcb *dns_pcbs[DNS_MAX_SOURCE_PORTS];
-#if ((LWIP_DNS_SECURE & LWIP_DNS_SECURE_RAND_SRC_PORT) != 0)
-static u8_t dns_last_pcb_idx;
-#endif
-static u8_t dns_seqno;
-static struct dns_table_entry dns_table[DNS_TABLE_SIZE];
-static struct dns_req_entry dns_requests[DNS_MAX_REQUESTS];
-static ip_addr_t dns_servers[DNS_MAX_SERVERS];
-
-#if LWIP_IPV4
-const ip_addr_t dns_mquery_v4group = DNS_MQUERY_IPV4_GROUP_INIT;
-#endif /* LWIP_IPV4 */
-#if LWIP_IPV6
-const ip_addr_t dns_mquery_v6group = DNS_MQUERY_IPV6_GROUP_INIT;
-#endif /* LWIP_IPV6 */
-
-/**
- * Initialize the resolver: set up the UDP pcb and configure the default server
- * (if DNS_SERVER_ADDRESS is set).
- */
-void
-dns_init(void)
-{
-#ifdef DNS_SERVER_ADDRESS
- /* initialize default DNS server address */
- ip_addr_t dnsserver;
- DNS_SERVER_ADDRESS(&dnsserver);
- dns_setserver(0, &dnsserver);
-#endif /* DNS_SERVER_ADDRESS */
-
- LWIP_ASSERT("sanity check SIZEOF_DNS_QUERY",
- sizeof(struct dns_query) == SIZEOF_DNS_QUERY);
- LWIP_ASSERT("sanity check SIZEOF_DNS_ANSWER",
- sizeof(struct dns_answer) <= SIZEOF_DNS_ANSWER_ASSERT);
-
- LWIP_DEBUGF(DNS_DEBUG, ("dns_init: initializing\n"));
-
- /* if dns client not yet initialized... */
-#if ((LWIP_DNS_SECURE & LWIP_DNS_SECURE_RAND_SRC_PORT) == 0)
- if (dns_pcbs[0] == NULL) {
- dns_pcbs[0] = udp_new_ip_type(IPADDR_TYPE_ANY);
- LWIP_ASSERT("dns_pcbs[0] != NULL", dns_pcbs[0] != NULL);
-
- /* initialize DNS table not needed (initialized to zero since it is a
- * global variable) */
- LWIP_ASSERT("For implicit initialization to work, DNS_STATE_UNUSED needs to be 0",
- DNS_STATE_UNUSED == 0);
-
- /* initialize DNS client */
- udp_bind(dns_pcbs[0], IP_ANY_TYPE, 0);
- udp_recv(dns_pcbs[0], dns_recv, NULL);
- }
-#endif
-
-#if DNS_LOCAL_HOSTLIST
- dns_init_local();
-#endif
-}
-
-/**
- * @ingroup dns
- * Initialize one of the DNS servers.
- *
- * @param numdns the index of the DNS server to set must be < DNS_MAX_SERVERS
- * @param dnsserver IP address of the DNS server to set
- */
-void
-dns_setserver(u8_t numdns, const ip_addr_t *dnsserver)
-{
- if (numdns < DNS_MAX_SERVERS) {
- if (dnsserver != NULL) {
- dns_servers[numdns] = (*dnsserver);
- } else {
- dns_servers[numdns] = *IP_ADDR_ANY;
- }
- }
-}
-
-/**
- * @ingroup dns
- * Obtain one of the currently configured DNS server.
- *
- * @param numdns the index of the DNS server
- * @return IP address of the indexed DNS server or "ip_addr_any" if the DNS
- * server has not been configured.
- */
-const ip_addr_t *
-dns_getserver(u8_t numdns)
-{
- if (numdns < DNS_MAX_SERVERS) {
- return &dns_servers[numdns];
- } else {
- return IP_ADDR_ANY;
- }
-}
-
-/**
- * The DNS resolver client timer - handle retries and timeouts and should
- * be called every DNS_TMR_INTERVAL milliseconds (every second by default).
- */
-void
-dns_tmr(void)
-{
- LWIP_DEBUGF(DNS_DEBUG, ("dns_tmr: dns_check_entries\n"));
- dns_check_entries();
-}
-
-#if DNS_LOCAL_HOSTLIST
-static void
-dns_init_local(void)
-{
-#if DNS_LOCAL_HOSTLIST_IS_DYNAMIC && defined(DNS_LOCAL_HOSTLIST_INIT)
- size_t i;
- struct local_hostlist_entry *entry;
- /* Dynamic: copy entries from DNS_LOCAL_HOSTLIST_INIT to list */
- struct local_hostlist_entry local_hostlist_init[] = DNS_LOCAL_HOSTLIST_INIT;
- size_t namelen;
- for (i = 0; i < LWIP_ARRAYSIZE(local_hostlist_init); i++) {
- struct local_hostlist_entry *init_entry = &local_hostlist_init[i];
- LWIP_ASSERT("invalid host name (NULL)", init_entry->name != NULL);
- namelen = strlen(init_entry->name);
- LWIP_ASSERT("namelen <= DNS_LOCAL_HOSTLIST_MAX_NAMELEN", namelen <= DNS_LOCAL_HOSTLIST_MAX_NAMELEN);
- entry = (struct local_hostlist_entry *)memp_malloc(MEMP_LOCALHOSTLIST);
- LWIP_ASSERT("mem-error in dns_init_local", entry != NULL);
- if (entry != NULL) {
- char *entry_name = (char *)entry + sizeof(struct local_hostlist_entry);
- MEMCPY(entry_name, init_entry->name, namelen);
- entry_name[namelen] = 0;
- entry->name = entry_name;
- entry->addr = init_entry->addr;
- entry->next = local_hostlist_dynamic;
- local_hostlist_dynamic = entry;
- }
- }
-#endif /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC && defined(DNS_LOCAL_HOSTLIST_INIT) */
-}
-
-/**
- * @ingroup dns
- * Iterate the local host-list for a hostname.
- *
- * @param iterator_fn a function that is called for every entry in the local host-list
- * @param iterator_arg 3rd argument passed to iterator_fn
- * @return the number of entries in the local host-list
- */
-size_t
-dns_local_iterate(dns_found_callback iterator_fn, void *iterator_arg)
-{
- size_t i;
-#if DNS_LOCAL_HOSTLIST_IS_DYNAMIC
- struct local_hostlist_entry *entry = local_hostlist_dynamic;
- i = 0;
- while (entry != NULL) {
- if (iterator_fn != NULL) {
- iterator_fn(entry->name, &entry->addr, iterator_arg);
- }
- i++;
- entry = entry->next;
- }
-#else /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC */
- for (i = 0; i < LWIP_ARRAYSIZE(local_hostlist_static); i++) {
- if (iterator_fn != NULL) {
- iterator_fn(local_hostlist_static[i].name, &local_hostlist_static[i].addr, iterator_arg);
- }
- }
-#endif /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC */
- return i;
-}
-
-/**
- * @ingroup dns
- * Scans the local host-list for a hostname.
- *
- * @param hostname Hostname to look for in the local host-list
- * @param addr the first IP address for the hostname in the local host-list or
- * IPADDR_NONE if not found.
- * @param dns_addrtype - LWIP_DNS_ADDRTYPE_IPV4_IPV6: try to resolve IPv4 (ATTENTION: no fallback here!)
- * - LWIP_DNS_ADDRTYPE_IPV6_IPV4: try to resolve IPv6 (ATTENTION: no fallback here!)
- * - LWIP_DNS_ADDRTYPE_IPV4: try to resolve IPv4 only
- * - LWIP_DNS_ADDRTYPE_IPV6: try to resolve IPv6 only
- * @return ERR_OK if found, ERR_ARG if not found
- */
-err_t
-dns_local_lookup(const char *hostname, ip_addr_t *addr, u8_t dns_addrtype)
-{
- LWIP_UNUSED_ARG(dns_addrtype);
- return dns_lookup_local(hostname, addr LWIP_DNS_ADDRTYPE_ARG(dns_addrtype));
-}
-
-/* Internal implementation for dns_local_lookup and dns_lookup */
-static err_t
-dns_lookup_local(const char *hostname, ip_addr_t *addr LWIP_DNS_ADDRTYPE_ARG(u8_t dns_addrtype))
-{
-#if DNS_LOCAL_HOSTLIST_IS_DYNAMIC
- struct local_hostlist_entry *entry = local_hostlist_dynamic;
- while (entry != NULL) {
- if ((lwip_stricmp(entry->name, hostname) == 0) &&
- LWIP_DNS_ADDRTYPE_MATCH_IP(dns_addrtype, entry->addr)) {
- if (addr) {
- ip_addr_copy(*addr, entry->addr);
- }
- return ERR_OK;
- }
- entry = entry->next;
- }
-#else /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC */
- size_t i;
- for (i = 0; i < LWIP_ARRAYSIZE(local_hostlist_static); i++) {
- if ((lwip_stricmp(local_hostlist_static[i].name, hostname) == 0) &&
- LWIP_DNS_ADDRTYPE_MATCH_IP(dns_addrtype, local_hostlist_static[i].addr)) {
- if (addr) {
- ip_addr_copy(*addr, local_hostlist_static[i].addr);
- }
- return ERR_OK;
- }
- }
-#endif /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC */
- return ERR_ARG;
-}
-
-#if DNS_LOCAL_HOSTLIST_IS_DYNAMIC
-/**
- * @ingroup dns
- * Remove all entries from the local host-list for a specific hostname
- * and/or IP address
- *
- * @param hostname hostname for which entries shall be removed from the local
- * host-list
- * @param addr address for which entries shall be removed from the local host-list
- * @return the number of removed entries
- */
-int
-dns_local_removehost(const char *hostname, const ip_addr_t *addr)
-{
- int removed = 0;
- struct local_hostlist_entry *entry = local_hostlist_dynamic;
- struct local_hostlist_entry *last_entry = NULL;
- while (entry != NULL) {
- if (((hostname == NULL) || !lwip_stricmp(entry->name, hostname)) &&
- ((addr == NULL) || ip_addr_cmp(&entry->addr, addr))) {
- struct local_hostlist_entry *free_entry;
- if (last_entry != NULL) {
- last_entry->next = entry->next;
- } else {
- local_hostlist_dynamic = entry->next;
- }
- free_entry = entry;
- entry = entry->next;
- memp_free(MEMP_LOCALHOSTLIST, free_entry);
- removed++;
- } else {
- last_entry = entry;
- entry = entry->next;
- }
- }
- return removed;
-}
-
-/**
- * @ingroup dns
- * Add a hostname/IP address pair to the local host-list.
- * Duplicates are not checked.
- *
- * @param hostname hostname of the new entry
- * @param addr IP address of the new entry
- * @return ERR_OK if succeeded or ERR_MEM on memory error
- */
-err_t
-dns_local_addhost(const char *hostname, const ip_addr_t *addr)
-{
- struct local_hostlist_entry *entry;
- size_t namelen;
- char *entry_name;
- LWIP_ASSERT("invalid host name (NULL)", hostname != NULL);
- namelen = strlen(hostname);
- LWIP_ASSERT("namelen <= DNS_LOCAL_HOSTLIST_MAX_NAMELEN", namelen <= DNS_LOCAL_HOSTLIST_MAX_NAMELEN);
- entry = (struct local_hostlist_entry *)memp_malloc(MEMP_LOCALHOSTLIST);
- if (entry == NULL) {
- return ERR_MEM;
- }
- entry_name = (char *)entry + sizeof(struct local_hostlist_entry);
- MEMCPY(entry_name, hostname, namelen);
- entry_name[namelen] = 0;
- entry->name = entry_name;
- ip_addr_copy(entry->addr, *addr);
- entry->next = local_hostlist_dynamic;
- local_hostlist_dynamic = entry;
- return ERR_OK;
-}
-#endif /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC*/
-#endif /* DNS_LOCAL_HOSTLIST */
-
-/**
- * @ingroup dns
- * Look up a hostname in the array of known hostnames.
- *
- * @note This function only looks in the internal array of known
- * hostnames, it does not send out a query for the hostname if none
- * was found. The function dns_enqueue() can be used to send a query
- * for a hostname.
- *
- * @param name the hostname to look up
- * @param addr the hostname's IP address, as u32_t (instead of ip_addr_t to
- * better check for failure: != IPADDR_NONE) or IPADDR_NONE if the hostname
- * was not found in the cached dns_table.
- * @return ERR_OK if found, ERR_ARG if not found
- */
-static err_t
-dns_lookup(const char *name, ip_addr_t *addr LWIP_DNS_ADDRTYPE_ARG(u8_t dns_addrtype))
-{
- u8_t i;
-#if DNS_LOCAL_HOSTLIST
- if (dns_lookup_local(name, addr LWIP_DNS_ADDRTYPE_ARG(dns_addrtype)) == ERR_OK) {
- return ERR_OK;
- }
-#endif /* DNS_LOCAL_HOSTLIST */
-#ifdef DNS_LOOKUP_LOCAL_EXTERN
- if (DNS_LOOKUP_LOCAL_EXTERN(name, addr, LWIP_DNS_ADDRTYPE_ARG_OR_ZERO(dns_addrtype)) == ERR_OK) {
- return ERR_OK;
- }
-#endif /* DNS_LOOKUP_LOCAL_EXTERN */
-
- /* Walk through name list, return entry if found. If not, return NULL. */
- for (i = 0; i < DNS_TABLE_SIZE; ++i) {
- if ((dns_table[i].state == DNS_STATE_DONE) &&
- (lwip_strnicmp(name, dns_table[i].name, sizeof(dns_table[i].name)) == 0) &&
- LWIP_DNS_ADDRTYPE_MATCH_IP(dns_addrtype, dns_table[i].ipaddr)) {
- LWIP_DEBUGF(DNS_DEBUG, ("dns_lookup: \"%s\": found = ", name));
- ip_addr_debug_print_val(DNS_DEBUG, dns_table[i].ipaddr);
- LWIP_DEBUGF(DNS_DEBUG, ("\n"));
- if (addr) {
- ip_addr_copy(*addr, dns_table[i].ipaddr);
- }
- return ERR_OK;
- }
- }
-
- return ERR_ARG;
-}
-
-/**
- * Compare the "dotted" name "query" with the encoded name "response"
- * to make sure an answer from the DNS server matches the current dns_table
- * entry (otherwise, answers might arrive late for hostname not on the list
- * any more).
- *
- * For now, this function compares case-insensitive to cope with all kinds of
- * servers. This also means that "dns 0x20 bit encoding" must be checked
- * externally, if we want to implement it.
- * Currently, the request is sent exactly as passed in by he user request.
- *
- * @param query hostname (not encoded) from the dns_table
- * @param p pbuf containing the encoded hostname in the DNS response
- * @param start_offset offset into p where the name starts
- * @return 0xFFFF: names differ, other: names equal -> offset behind name
- */
-static u16_t
-dns_compare_name(const char *query, struct pbuf *p, u16_t start_offset)
-{
- int n;
- u16_t response_offset = start_offset;
-
- do {
- n = pbuf_try_get_at(p, response_offset);
- if ((n < 0) || (response_offset == 0xFFFF)) {
- /* error or overflow */
- return 0xFFFF;
- }
- response_offset++;
- /** @see RFC 1035 - 4.1.4. Message compression */
- if ((n & 0xc0) == 0xc0) {
- /* Compressed name: cannot be equal since we don't send them */
- return 0xFFFF;
- } else {
- /* Not compressed name */
- while (n > 0) {
- int c = pbuf_try_get_at(p, response_offset);
- if (c < 0) {
- return 0xFFFF;
- }
- if (lwip_tolower((*query)) != lwip_tolower((u8_t)c)) {
- return 0xFFFF;
- }
- if (response_offset == 0xFFFF) {
- /* would overflow */
- return 0xFFFF;
- }
- response_offset++;
- ++query;
- --n;
- }
- ++query;
- }
- n = pbuf_try_get_at(p, response_offset);
- if (n < 0) {
- return 0xFFFF;
- }
- } while (n != 0);
-
- if (response_offset == 0xFFFF) {
- /* would overflow */
- return 0xFFFF;
- }
- return (u16_t)(response_offset + 1);
-}
-
-/**
- * Walk through a compact encoded DNS name and return the end of the name.
- *
- * @param p pbuf containing the name
- * @param query_idx start index into p pointing to encoded DNS name in the DNS server response
- * @return index to end of the name
- */
-static u16_t
-dns_skip_name(struct pbuf *p, u16_t query_idx)
-{
- int n;
- u16_t offset = query_idx;
-
- do {
- n = pbuf_try_get_at(p, offset++);
- if ((n < 0) || (offset == 0)) {
- return 0xFFFF;
- }
- /** @see RFC 1035 - 4.1.4. Message compression */
- if ((n & 0xc0) == 0xc0) {
- /* Compressed name: since we only want to skip it (not check it), stop here */
- break;
- } else {
- /* Not compressed name */
- if (offset + n >= p->tot_len) {
- return 0xFFFF;
- }
- offset = (u16_t)(offset + n);
- }
- n = pbuf_try_get_at(p, offset);
- if (n < 0) {
- return 0xFFFF;
- }
- } while (n != 0);
-
- if (offset == 0xFFFF) {
- return 0xFFFF;
- }
- return (u16_t)(offset + 1);
-}
-
-/**
- * Send a DNS query packet.
- *
- * @param idx the DNS table entry index for which to send a request
- * @return ERR_OK if packet is sent; an err_t indicating the problem otherwise
- */
-static err_t
-dns_send(u8_t idx)
-{
- err_t err;
- struct dns_hdr hdr;
- struct dns_query qry;
- struct pbuf *p;
- u16_t query_idx, copy_len;
- const char *hostname, *hostname_part;
- u8_t n;
- u8_t pcb_idx;
- struct dns_table_entry *entry = &dns_table[idx];
-
- LWIP_DEBUGF(DNS_DEBUG, ("dns_send: dns_servers[%"U16_F"] \"%s\": request\n",
- (u16_t)(entry->server_idx), entry->name));
- LWIP_ASSERT("dns server out of array", entry->server_idx < DNS_MAX_SERVERS);
- if (ip_addr_isany_val(dns_servers[entry->server_idx])
-#if LWIP_DNS_SUPPORT_MDNS_QUERIES
- && !entry->is_mdns
-#endif
- ) {
- /* DNS server not valid anymore, e.g. PPP netif has been shut down */
- /* call specified callback function if provided */
- dns_call_found(idx, NULL);
- /* flush this entry */
- entry->state = DNS_STATE_UNUSED;
- return ERR_OK;
- }
-
- /* if here, we have either a new query or a retry on a previous query to process */
- p = pbuf_alloc(PBUF_TRANSPORT, (u16_t)(SIZEOF_DNS_HDR + strlen(entry->name) + 2 +
- SIZEOF_DNS_QUERY), PBUF_RAM);
- if (p != NULL) {
- const ip_addr_t *dst;
- u16_t dst_port;
- /* fill dns header */
- memset(&hdr, 0, SIZEOF_DNS_HDR);
- hdr.id = lwip_htons(entry->txid);
- hdr.flags1 = DNS_FLAG1_RD;
- hdr.numquestions = PP_HTONS(1);
- pbuf_take(p, &hdr, SIZEOF_DNS_HDR);
- hostname = entry->name;
- --hostname;
-
- /* convert hostname into suitable query format. */
- query_idx = SIZEOF_DNS_HDR;
- do {
- ++hostname;
- hostname_part = hostname;
- for (n = 0; *hostname != '.' && *hostname != 0; ++hostname) {
- ++n;
- }
- copy_len = (u16_t)(hostname - hostname_part);
- if (query_idx + n + 1 > 0xFFFF) {
- /* u16_t overflow */
- goto overflow_return;
- }
- pbuf_put_at(p, query_idx, n);
- pbuf_take_at(p, hostname_part, copy_len, (u16_t)(query_idx + 1));
- query_idx = (u16_t)(query_idx + n + 1);
- } while (*hostname != 0);
- pbuf_put_at(p, query_idx, 0);
- query_idx++;
-
- /* fill dns query */
- if (LWIP_DNS_ADDRTYPE_IS_IPV6(entry->reqaddrtype)) {
- qry.type = PP_HTONS(DNS_RRTYPE_AAAA);
- } else {
- qry.type = PP_HTONS(DNS_RRTYPE_A);
- }
- qry.cls = PP_HTONS(DNS_RRCLASS_IN);
- pbuf_take_at(p, &qry, SIZEOF_DNS_QUERY, query_idx);
-
-#if ((LWIP_DNS_SECURE & LWIP_DNS_SECURE_RAND_SRC_PORT) != 0)
- pcb_idx = entry->pcb_idx;
-#else
- pcb_idx = 0;
-#endif
- /* send dns packet */
- LWIP_DEBUGF(DNS_DEBUG, ("sending DNS request ID %d for name \"%s\" to server %d\r\n",
- entry->txid, entry->name, entry->server_idx));
-#if LWIP_DNS_SUPPORT_MDNS_QUERIES
- if (entry->is_mdns) {
- dst_port = DNS_MQUERY_PORT;
-#if LWIP_IPV6
- if (LWIP_DNS_ADDRTYPE_IS_IPV6(entry->reqaddrtype)) {
- dst = &dns_mquery_v6group;
- }
-#endif
-#if LWIP_IPV4 && LWIP_IPV6
- else
-#endif
-#if LWIP_IPV4
- {
- dst = &dns_mquery_v4group;
- }
-#endif
- } else
-#endif /* LWIP_DNS_SUPPORT_MDNS_QUERIES */
- {
- dst_port = DNS_SERVER_PORT;
- dst = &dns_servers[entry->server_idx];
- }
- err = udp_sendto(dns_pcbs[pcb_idx], p, dst, dst_port);
-
- /* free pbuf */
- pbuf_free(p);
- } else {
- err = ERR_MEM;
- }
-
- return err;
-overflow_return:
- pbuf_free(p);
- return ERR_VAL;
-}
-
-#if ((LWIP_DNS_SECURE & LWIP_DNS_SECURE_RAND_SRC_PORT) != 0)
-static struct udp_pcb *
-dns_alloc_random_port(void)
-{
- err_t err;
- struct udp_pcb *pcb;
-
- pcb = udp_new_ip_type(IPADDR_TYPE_ANY);
- if (pcb == NULL) {
- /* out of memory, have to reuse an existing pcb */
- return NULL;
- }
- do {
- u16_t port = (u16_t)DNS_RAND_TXID();
- if (DNS_PORT_ALLOWED(port)) {
- err = udp_bind(pcb, IP_ANY_TYPE, port);
- } else {
- /* this port is not allowed, try again */
- err = ERR_USE;
- }
- } while (err == ERR_USE);
- if (err != ERR_OK) {
- udp_remove(pcb);
- return NULL;
- }
- udp_recv(pcb, dns_recv, NULL);
- return pcb;
-}
-
-/**
- * dns_alloc_pcb() - allocates a new pcb (or reuses an existing one) to be used
- * for sending a request
- *
- * @return an index into dns_pcbs
- */
-static u8_t
-dns_alloc_pcb(void)
-{
- u8_t i;
- u8_t idx;
-
- for (i = 0; i < DNS_MAX_SOURCE_PORTS; i++) {
- if (dns_pcbs[i] == NULL) {
- break;
- }
- }
- if (i < DNS_MAX_SOURCE_PORTS) {
- dns_pcbs[i] = dns_alloc_random_port();
- if (dns_pcbs[i] != NULL) {
- /* succeeded */
- dns_last_pcb_idx = i;
- return i;
- }
- }
- /* if we come here, creating a new UDP pcb failed, so we have to use
- an already existing one (so overflow is no issue) */
- for (i = 0, idx = (u8_t)(dns_last_pcb_idx + 1); i < DNS_MAX_SOURCE_PORTS; i++, idx++) {
- if (idx >= DNS_MAX_SOURCE_PORTS) {
- idx = 0;
- }
- if (dns_pcbs[idx] != NULL) {
- dns_last_pcb_idx = idx;
- return idx;
- }
- }
- return DNS_MAX_SOURCE_PORTS;
-}
-#endif /* ((LWIP_DNS_SECURE & LWIP_DNS_SECURE_RAND_SRC_PORT) != 0) */
-
-/**
- * dns_call_found() - call the found callback and check if there are duplicate
- * entries for the given hostname. If there are any, their found callback will
- * be called and they will be removed.
- *
- * @param idx dns table index of the entry that is resolved or removed
- * @param addr IP address for the hostname (or NULL on error or memory shortage)
- */
-static void
-dns_call_found(u8_t idx, ip_addr_t *addr)
-{
-#if ((LWIP_DNS_SECURE & (LWIP_DNS_SECURE_NO_MULTIPLE_OUTSTANDING | LWIP_DNS_SECURE_RAND_SRC_PORT)) != 0)
- u8_t i;
-#endif
-
-#if LWIP_IPV4 && LWIP_IPV6
- if (addr != NULL) {
- /* check that address type matches the request and adapt the table entry */
- if (IP_IS_V6_VAL(*addr)) {
- LWIP_ASSERT("invalid response", LWIP_DNS_ADDRTYPE_IS_IPV6(dns_table[idx].reqaddrtype));
- dns_table[idx].reqaddrtype = LWIP_DNS_ADDRTYPE_IPV6;
- } else {
- LWIP_ASSERT("invalid response", !LWIP_DNS_ADDRTYPE_IS_IPV6(dns_table[idx].reqaddrtype));
- dns_table[idx].reqaddrtype = LWIP_DNS_ADDRTYPE_IPV4;
- }
- }
-#endif /* LWIP_IPV4 && LWIP_IPV6 */
-
-#if ((LWIP_DNS_SECURE & LWIP_DNS_SECURE_NO_MULTIPLE_OUTSTANDING) != 0)
- for (i = 0; i < DNS_MAX_REQUESTS; i++) {
- if (dns_requests[i].found && (dns_requests[i].dns_table_idx == idx)) {
- (*dns_requests[i].found)(dns_table[idx].name, addr, dns_requests[i].arg);
- /* flush this entry */
- dns_requests[i].found = NULL;
- }
- }
-#else
- if (dns_requests[idx].found) {
- (*dns_requests[idx].found)(dns_table[idx].name, addr, dns_requests[idx].arg);
- }
- dns_requests[idx].found = NULL;
-#endif
-#if ((LWIP_DNS_SECURE & LWIP_DNS_SECURE_RAND_SRC_PORT) != 0)
- /* close the pcb used unless other request are using it */
- for (i = 0; i < DNS_MAX_REQUESTS; i++) {
- if (i == idx) {
- continue; /* only check other requests */
- }
- if (dns_table[i].state == DNS_STATE_ASKING) {
- if (dns_table[i].pcb_idx == dns_table[idx].pcb_idx) {
- /* another request is still using the same pcb */
- dns_table[idx].pcb_idx = DNS_MAX_SOURCE_PORTS;
- break;
- }
- }
- }
- if (dns_table[idx].pcb_idx < DNS_MAX_SOURCE_PORTS) {
- /* if we come here, the pcb is not used any more and can be removed */
- udp_remove(dns_pcbs[dns_table[idx].pcb_idx]);
- dns_pcbs[dns_table[idx].pcb_idx] = NULL;
- dns_table[idx].pcb_idx = DNS_MAX_SOURCE_PORTS;
- }
-#endif
-}
-
-/* Create a query transmission ID that is unique for all outstanding queries */
-static u16_t
-dns_create_txid(void)
-{
- u16_t txid;
- u8_t i;
-
-again:
- txid = (u16_t)DNS_RAND_TXID();
-
- /* check whether the ID is unique */
- for (i = 0; i < DNS_TABLE_SIZE; i++) {
- if ((dns_table[i].state == DNS_STATE_ASKING) &&
- (dns_table[i].txid == txid)) {
- /* ID already used by another pending query */
- goto again;
- }
- }
-
- return txid;
-}
-
-/**
- * Check whether there are other backup DNS servers available to try
- */
-static u8_t
-dns_backupserver_available(struct dns_table_entry *pentry)
-{
- u8_t ret = 0;
-
- if (pentry) {
- if ((pentry->server_idx + 1 < DNS_MAX_SERVERS) && !ip_addr_isany_val(dns_servers[pentry->server_idx + 1])) {
- ret = 1;
- }
- }
-
- return ret;
-}
-
-/**
- * dns_check_entry() - see if entry has not yet been queried and, if so, sends out a query.
- * Check an entry in the dns_table:
- * - send out query for new entries
- * - retry old pending entries on timeout (also with different servers)
- * - remove completed entries from the table if their TTL has expired
- *
- * @param i index of the dns_table entry to check
- */
-static void
-dns_check_entry(u8_t i)
-{
- err_t err;
- struct dns_table_entry *entry = &dns_table[i];
-
- LWIP_ASSERT("array index out of bounds", i < DNS_TABLE_SIZE);
-
- switch (entry->state) {
- case DNS_STATE_NEW:
- /* initialize new entry */
- entry->txid = dns_create_txid();
- entry->state = DNS_STATE_ASKING;
- entry->server_idx = 0;
- entry->tmr = 1;
- entry->retries = 0;
-
- /* send DNS packet for this entry */
- err = dns_send(i);
- if (err != ERR_OK) {
- LWIP_DEBUGF(DNS_DEBUG | LWIP_DBG_LEVEL_WARNING,
- ("dns_send returned error: %s\n", lwip_strerr(err)));
- }
- break;
- case DNS_STATE_ASKING:
- if (--entry->tmr == 0) {
- if (++entry->retries == DNS_MAX_RETRIES) {
- if (dns_backupserver_available(entry)
-#if LWIP_DNS_SUPPORT_MDNS_QUERIES
- && !entry->is_mdns
-#endif /* LWIP_DNS_SUPPORT_MDNS_QUERIES */
- ) {
- /* change of server */
- entry->server_idx++;
- entry->tmr = 1;
- entry->retries = 0;
- } else {
- LWIP_DEBUGF(DNS_DEBUG, ("dns_check_entry: \"%s\": timeout\n", entry->name));
- /* call specified callback function if provided */
- dns_call_found(i, NULL);
- /* flush this entry */
- entry->state = DNS_STATE_UNUSED;
- break;
- }
- } else {
- /* wait longer for the next retry */
- entry->tmr = entry->retries;
- }
-
- /* send DNS packet for this entry */
- err = dns_send(i);
- if (err != ERR_OK) {
- LWIP_DEBUGF(DNS_DEBUG | LWIP_DBG_LEVEL_WARNING,
- ("dns_send returned error: %s\n", lwip_strerr(err)));
- }
- }
- break;
- case DNS_STATE_DONE:
- /* if the time to live is nul */
- if ((entry->ttl == 0) || (--entry->ttl == 0)) {
- LWIP_DEBUGF(DNS_DEBUG, ("dns_check_entry: \"%s\": flush\n", entry->name));
- /* flush this entry, there cannot be any related pending entries in this state */
- entry->state = DNS_STATE_UNUSED;
- }
- break;
- case DNS_STATE_UNUSED:
- /* nothing to do */
- break;
- default:
- LWIP_ASSERT("unknown dns_table entry state:", 0);
- break;
- }
-}
-
-/**
- * Call dns_check_entry for each entry in dns_table - check all entries.
- */
-static void
-dns_check_entries(void)
-{
- u8_t i;
-
- for (i = 0; i < DNS_TABLE_SIZE; ++i) {
- dns_check_entry(i);
- }
-}
-
-/**
- * Save TTL and call dns_call_found for correct response.
- */
-static void
-dns_correct_response(u8_t idx, u32_t ttl)
-{
- struct dns_table_entry *entry = &dns_table[idx];
-
- entry->state = DNS_STATE_DONE;
-
- LWIP_DEBUGF(DNS_DEBUG, ("dns_recv: \"%s\": response = ", entry->name));
- ip_addr_debug_print_val(DNS_DEBUG, entry->ipaddr);
- LWIP_DEBUGF(DNS_DEBUG, ("\n"));
-
- /* read the answer resource record's TTL, and maximize it if needed */
- entry->ttl = ttl;
- if (entry->ttl > DNS_MAX_TTL) {
- entry->ttl = DNS_MAX_TTL;
- }
- dns_call_found(idx, &entry->ipaddr);
-
- if (entry->ttl == 0) {
- /* RFC 883, page 29: "Zero values are
- interpreted to mean that the RR can only be used for the
- transaction in progress, and should not be cached."
- -> flush this entry now */
- /* entry reused during callback? */
- if (entry->state == DNS_STATE_DONE) {
- entry->state = DNS_STATE_UNUSED;
- }
- }
-}
-
-/**
- * Receive input function for DNS response packets arriving for the dns UDP pcb.
- */
-static void
-dns_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, const ip_addr_t *addr, u16_t port)
-{
- u8_t i;
- u16_t txid;
- u16_t res_idx;
- struct dns_hdr hdr;
- struct dns_answer ans;
- struct dns_query qry;
- u16_t nquestions, nanswers;
-
- LWIP_UNUSED_ARG(arg);
- LWIP_UNUSED_ARG(pcb);
- LWIP_UNUSED_ARG(port);
-
- /* is the dns message big enough ? */
- if (p->tot_len < (SIZEOF_DNS_HDR + SIZEOF_DNS_QUERY)) {
- LWIP_DEBUGF(DNS_DEBUG, ("dns_recv: pbuf too small\n"));
- /* free pbuf and return */
- goto ignore_packet;
- }
-
- /* copy dns payload inside static buffer for processing */
- if (pbuf_copy_partial(p, &hdr, SIZEOF_DNS_HDR, 0) == SIZEOF_DNS_HDR) {
- /* Match the ID in the DNS header with the name table. */
- txid = lwip_htons(hdr.id);
- for (i = 0; i < DNS_TABLE_SIZE; i++) {
- struct dns_table_entry *entry = &dns_table[i];
- if ((entry->state == DNS_STATE_ASKING) &&
- (entry->txid == txid)) {
-
- /* We only care about the question(s) and the answers. The authrr
- and the extrarr are simply discarded. */
- nquestions = lwip_htons(hdr.numquestions);
- nanswers = lwip_htons(hdr.numanswers);
-
- /* Check for correct response. */
- if ((hdr.flags1 & DNS_FLAG1_RESPONSE) == 0) {
- LWIP_DEBUGF(DNS_DEBUG, ("dns_recv: \"%s\": not a response\n", entry->name));
- goto ignore_packet; /* ignore this packet */
- }
- if (nquestions != 1) {
- LWIP_DEBUGF(DNS_DEBUG, ("dns_recv: \"%s\": response not match to query\n", entry->name));
- goto ignore_packet; /* ignore this packet */
- }
-
-#if LWIP_DNS_SUPPORT_MDNS_QUERIES
- if (!entry->is_mdns)
-#endif /* LWIP_DNS_SUPPORT_MDNS_QUERIES */
- {
- /* Check whether response comes from the same network address to which the
- question was sent. (RFC 5452) */
- if (!ip_addr_cmp(addr, &dns_servers[entry->server_idx])) {
- goto ignore_packet; /* ignore this packet */
- }
- }
-
- /* Check if the name in the "question" part match with the name in the entry and
- skip it if equal. */
- res_idx = dns_compare_name(entry->name, p, SIZEOF_DNS_HDR);
- if (res_idx == 0xFFFF) {
- LWIP_DEBUGF(DNS_DEBUG, ("dns_recv: \"%s\": response not match to query\n", entry->name));
- goto ignore_packet; /* ignore this packet */
- }
-
- /* check if "question" part matches the request */
- if (pbuf_copy_partial(p, &qry, SIZEOF_DNS_QUERY, res_idx) != SIZEOF_DNS_QUERY) {
- goto ignore_packet; /* ignore this packet */
- }
- if ((qry.cls != PP_HTONS(DNS_RRCLASS_IN)) ||
- (LWIP_DNS_ADDRTYPE_IS_IPV6(entry->reqaddrtype) && (qry.type != PP_HTONS(DNS_RRTYPE_AAAA))) ||
- (!LWIP_DNS_ADDRTYPE_IS_IPV6(entry->reqaddrtype) && (qry.type != PP_HTONS(DNS_RRTYPE_A)))) {
- LWIP_DEBUGF(DNS_DEBUG, ("dns_recv: \"%s\": response not match to query\n", entry->name));
- goto ignore_packet; /* ignore this packet */
- }
- /* skip the rest of the "question" part */
- if (res_idx + SIZEOF_DNS_QUERY > 0xFFFF) {
- goto ignore_packet;
- }
- res_idx = (u16_t)(res_idx + SIZEOF_DNS_QUERY);
-
- /* Check for error. If so, call callback to inform. */
- if (hdr.flags2 & DNS_FLAG2_ERR_MASK) {
- LWIP_DEBUGF(DNS_DEBUG, ("dns_recv: \"%s\": error in flags\n", entry->name));
-
- /* if there is another backup DNS server to try
- * then don't stop the DNS request
- */
- if (dns_backupserver_available(entry)) {
- /* avoid retrying the same server */
- entry->retries = DNS_MAX_RETRIES-1;
- entry->tmr = 1;
-
- /* contact next available server for this entry */
- dns_check_entry(i);
-
- goto ignore_packet;
- }
- } else {
- while ((nanswers > 0) && (res_idx < p->tot_len)) {
- /* skip answer resource record's host name */
- res_idx = dns_skip_name(p, res_idx);
- if (res_idx == 0xFFFF) {
- goto ignore_packet; /* ignore this packet */
- }
-
- /* Check for IP address type and Internet class. Others are discarded. */
- if (pbuf_copy_partial(p, &ans, SIZEOF_DNS_ANSWER, res_idx) != SIZEOF_DNS_ANSWER) {
- goto ignore_packet; /* ignore this packet */
- }
- if (res_idx + SIZEOF_DNS_ANSWER > 0xFFFF) {
- goto ignore_packet;
- }
- res_idx = (u16_t)(res_idx + SIZEOF_DNS_ANSWER);
-
- if (ans.cls == PP_HTONS(DNS_RRCLASS_IN)) {
-#if LWIP_IPV4
- if ((ans.type == PP_HTONS(DNS_RRTYPE_A)) && (ans.len == PP_HTONS(sizeof(ip4_addr_t)))) {
-#if LWIP_IPV4 && LWIP_IPV6
- if (!LWIP_DNS_ADDRTYPE_IS_IPV6(entry->reqaddrtype))
-#endif /* LWIP_IPV4 && LWIP_IPV6 */
- {
- ip4_addr_t ip4addr;
- /* read the IP address after answer resource record's header */
- if (pbuf_copy_partial(p, &ip4addr, sizeof(ip4_addr_t), res_idx) != sizeof(ip4_addr_t)) {
- goto ignore_packet; /* ignore this packet */
- }
- ip_addr_copy_from_ip4(dns_table[i].ipaddr, ip4addr);
- pbuf_free(p);
- /* handle correct response */
- dns_correct_response(i, lwip_ntohl(ans.ttl));
- return;
- }
- }
-#endif /* LWIP_IPV4 */
-#if LWIP_IPV6
- if ((ans.type == PP_HTONS(DNS_RRTYPE_AAAA)) && (ans.len == PP_HTONS(sizeof(ip6_addr_p_t)))) {
-#if LWIP_IPV4 && LWIP_IPV6
- if (LWIP_DNS_ADDRTYPE_IS_IPV6(entry->reqaddrtype))
-#endif /* LWIP_IPV4 && LWIP_IPV6 */
- {
- ip6_addr_p_t ip6addr;
- /* read the IP address after answer resource record's header */
- if (pbuf_copy_partial(p, &ip6addr, sizeof(ip6_addr_p_t), res_idx) != sizeof(ip6_addr_p_t)) {
- goto ignore_packet; /* ignore this packet */
- }
- /* @todo: scope ip6addr? Might be required for link-local addresses at least? */
- ip_addr_copy_from_ip6_packed(dns_table[i].ipaddr, ip6addr);
- pbuf_free(p);
- /* handle correct response */
- dns_correct_response(i, lwip_ntohl(ans.ttl));
- return;
- }
- }
-#endif /* LWIP_IPV6 */
- }
- /* skip this answer */
- if ((int)(res_idx + lwip_htons(ans.len)) > 0xFFFF) {
- goto ignore_packet; /* ignore this packet */
- }
- res_idx = (u16_t)(res_idx + lwip_htons(ans.len));
- --nanswers;
- }
-#if LWIP_IPV4 && LWIP_IPV6
- if ((entry->reqaddrtype == LWIP_DNS_ADDRTYPE_IPV4_IPV6) ||
- (entry->reqaddrtype == LWIP_DNS_ADDRTYPE_IPV6_IPV4)) {
- if (entry->reqaddrtype == LWIP_DNS_ADDRTYPE_IPV4_IPV6) {
- /* IPv4 failed, try IPv6 */
- dns_table[i].reqaddrtype = LWIP_DNS_ADDRTYPE_IPV6;
- } else {
- /* IPv6 failed, try IPv4 */
- dns_table[i].reqaddrtype = LWIP_DNS_ADDRTYPE_IPV4;
- }
- pbuf_free(p);
- dns_table[i].state = DNS_STATE_NEW;
- dns_check_entry(i);
- return;
- }
-#endif /* LWIP_IPV4 && LWIP_IPV6 */
- LWIP_DEBUGF(DNS_DEBUG, ("dns_recv: \"%s\": error in response\n", entry->name));
- }
- /* call callback to indicate error, clean up memory and return */
- pbuf_free(p);
- dns_call_found(i, NULL);
- dns_table[i].state = DNS_STATE_UNUSED;
- return;
- }
- }
- }
-
-ignore_packet:
- /* deallocate memory and return */
- pbuf_free(p);
- return;
-}
-
-/**
- * Queues a new hostname to resolve and sends out a DNS query for that hostname
- *
- * @param name the hostname that is to be queried
- * @param hostnamelen length of the hostname
- * @param found a callback function to be called on success, failure or timeout
- * @param callback_arg argument to pass to the callback function
- * @return err_t return code.
- */
-static err_t
-dns_enqueue(const char *name, size_t hostnamelen, dns_found_callback found,
- void *callback_arg LWIP_DNS_ADDRTYPE_ARG(u8_t dns_addrtype) LWIP_DNS_ISMDNS_ARG(u8_t is_mdns))
-{
- u8_t i;
- u8_t lseq, lseqi;
- struct dns_table_entry *entry = NULL;
- size_t namelen;
- struct dns_req_entry *req;
-
-#if ((LWIP_DNS_SECURE & LWIP_DNS_SECURE_NO_MULTIPLE_OUTSTANDING) != 0)
- u8_t r;
- /* check for duplicate entries */
- for (i = 0; i < DNS_TABLE_SIZE; i++) {
- if ((dns_table[i].state == DNS_STATE_ASKING) &&
- (lwip_strnicmp(name, dns_table[i].name, sizeof(dns_table[i].name)) == 0)) {
-#if LWIP_IPV4 && LWIP_IPV6
- if (dns_table[i].reqaddrtype != dns_addrtype) {
- /* requested address types don't match
- this can lead to 2 concurrent requests, but mixing the address types
- for the same host should not be that common */
- continue;
- }
-#endif /* LWIP_IPV4 && LWIP_IPV6 */
- /* this is a duplicate entry, find a free request entry */
- for (r = 0; r < DNS_MAX_REQUESTS; r++) {
- if (dns_requests[r].found == 0) {
- dns_requests[r].found = found;
- dns_requests[r].arg = callback_arg;
- dns_requests[r].dns_table_idx = i;
- LWIP_DNS_SET_ADDRTYPE(dns_requests[r].reqaddrtype, dns_addrtype);
- LWIP_DEBUGF(DNS_DEBUG, ("dns_enqueue: \"%s\": duplicate request\n", name));
- return ERR_INPROGRESS;
- }
- }
- }
- }
- /* no duplicate entries found */
-#endif
-
- /* search an unused entry, or the oldest one */
- lseq = 0;
- lseqi = DNS_TABLE_SIZE;
- for (i = 0; i < DNS_TABLE_SIZE; ++i) {
- entry = &dns_table[i];
- /* is it an unused entry ? */
- if (entry->state == DNS_STATE_UNUSED) {
- break;
- }
- /* check if this is the oldest completed entry */
- if (entry->state == DNS_STATE_DONE) {
- u8_t age = (u8_t)(dns_seqno - entry->seqno);
- if (age > lseq) {
- lseq = age;
- lseqi = i;
- }
- }
- }
-
- /* if we don't have found an unused entry, use the oldest completed one */
- if (i == DNS_TABLE_SIZE) {
- if ((lseqi >= DNS_TABLE_SIZE) || (dns_table[lseqi].state != DNS_STATE_DONE)) {
- /* no entry can be used now, table is full */
- LWIP_DEBUGF(DNS_DEBUG, ("dns_enqueue: \"%s\": DNS entries table is full\n", name));
- return ERR_MEM;
- } else {
- /* use the oldest completed one */
- i = lseqi;
- entry = &dns_table[i];
- }
- }
-
-#if ((LWIP_DNS_SECURE & LWIP_DNS_SECURE_NO_MULTIPLE_OUTSTANDING) != 0)
- /* find a free request entry */
- req = NULL;
- for (r = 0; r < DNS_MAX_REQUESTS; r++) {
- if (dns_requests[r].found == NULL) {
- req = &dns_requests[r];
- break;
- }
- }
- if (req == NULL) {
- /* no request entry can be used now, table is full */
- LWIP_DEBUGF(DNS_DEBUG, ("dns_enqueue: \"%s\": DNS request entries table is full\n", name));
- return ERR_MEM;
- }
- req->dns_table_idx = i;
-#else
- /* in this configuration, the entry index is the same as the request index */
- req = &dns_requests[i];
-#endif
-
- /* use this entry */
- LWIP_DEBUGF(DNS_DEBUG, ("dns_enqueue: \"%s\": use DNS entry %"U16_F"\n", name, (u16_t)(i)));
-
- /* fill the entry */
- entry->state = DNS_STATE_NEW;
- entry->seqno = dns_seqno;
- LWIP_DNS_SET_ADDRTYPE(entry->reqaddrtype, dns_addrtype);
- LWIP_DNS_SET_ADDRTYPE(req->reqaddrtype, dns_addrtype);
- req->found = found;
- req->arg = callback_arg;
- namelen = LWIP_MIN(hostnamelen, DNS_MAX_NAME_LENGTH - 1);
- MEMCPY(entry->name, name, namelen);
- entry->name[namelen] = 0;
-
-#if ((LWIP_DNS_SECURE & LWIP_DNS_SECURE_RAND_SRC_PORT) != 0)
- entry->pcb_idx = dns_alloc_pcb();
- if (entry->pcb_idx >= DNS_MAX_SOURCE_PORTS) {
- /* failed to get a UDP pcb */
- LWIP_DEBUGF(DNS_DEBUG, ("dns_enqueue: \"%s\": failed to allocate a pcb\n", name));
- entry->state = DNS_STATE_UNUSED;
- req->found = NULL;
- return ERR_MEM;
- }
- LWIP_DEBUGF(DNS_DEBUG, ("dns_enqueue: \"%s\": use DNS pcb %"U16_F"\n", name, (u16_t)(entry->pcb_idx)));
-#endif
-
-#if LWIP_DNS_SUPPORT_MDNS_QUERIES
- entry->is_mdns = is_mdns;
-#endif
-
- dns_seqno++;
-
- /* force to send query without waiting timer */
- dns_check_entry(i);
-
- /* dns query is enqueued */
- return ERR_INPROGRESS;
-}
-
-/**
- * @ingroup dns
- * Resolve a hostname (string) into an IP address.
- * NON-BLOCKING callback version for use with raw API!!!
- *
- * Returns immediately with one of err_t return codes:
- * - ERR_OK if hostname is a valid IP address string or the host
- * name is already in the local names table.
- * - ERR_INPROGRESS enqueue a request to be sent to the DNS server
- * for resolution if no errors are present.
- * - ERR_ARG: dns client not initialized or invalid hostname
- *
- * @param hostname the hostname that is to be queried
- * @param addr pointer to a ip_addr_t where to store the address if it is already
- * cached in the dns_table (only valid if ERR_OK is returned!)
- * @param found a callback function to be called on success, failure or timeout (only if
- * ERR_INPROGRESS is returned!)
- * @param callback_arg argument to pass to the callback function
- * @return a err_t return code.
- */
-err_t
-dns_gethostbyname(const char *hostname, ip_addr_t *addr, dns_found_callback found,
- void *callback_arg)
-{
- return dns_gethostbyname_addrtype(hostname, addr, found, callback_arg, LWIP_DNS_ADDRTYPE_DEFAULT);
-}
-
-/**
- * @ingroup dns
- * Like dns_gethostbyname, but returned address type can be controlled:
- * @param hostname the hostname that is to be queried
- * @param addr pointer to a ip_addr_t where to store the address if it is already
- * cached in the dns_table (only valid if ERR_OK is returned!)
- * @param found a callback function to be called on success, failure or timeout (only if
- * ERR_INPROGRESS is returned!)
- * @param callback_arg argument to pass to the callback function
- * @param dns_addrtype - LWIP_DNS_ADDRTYPE_IPV4_IPV6: try to resolve IPv4 first, try IPv6 if IPv4 fails only
- * - LWIP_DNS_ADDRTYPE_IPV6_IPV4: try to resolve IPv6 first, try IPv4 if IPv6 fails only
- * - LWIP_DNS_ADDRTYPE_IPV4: try to resolve IPv4 only
- * - LWIP_DNS_ADDRTYPE_IPV6: try to resolve IPv6 only
- */
-err_t
-dns_gethostbyname_addrtype(const char *hostname, ip_addr_t *addr, dns_found_callback found,
- void *callback_arg, u8_t dns_addrtype)
-{
- size_t hostnamelen;
-#if LWIP_DNS_SUPPORT_MDNS_QUERIES
- u8_t is_mdns;
-#endif
- /* not initialized or no valid server yet, or invalid addr pointer
- * or invalid hostname or invalid hostname length */
- if ((addr == NULL) ||
- (!hostname) || (!hostname[0])) {
- return ERR_ARG;
- }
-#if ((LWIP_DNS_SECURE & LWIP_DNS_SECURE_RAND_SRC_PORT) == 0)
- if (dns_pcbs[0] == NULL) {
- return ERR_ARG;
- }
-#endif
- hostnamelen = strlen(hostname);
- if (hostnamelen >= DNS_MAX_NAME_LENGTH) {
- LWIP_DEBUGF(DNS_DEBUG, ("dns_gethostbyname: name too long to resolve"));
- return ERR_ARG;
- }
-
-
-#if LWIP_HAVE_LOOPIF
- if (strcmp(hostname, "localhost") == 0) {
- ip_addr_set_loopback(LWIP_DNS_ADDRTYPE_IS_IPV6(dns_addrtype), addr);
- return ERR_OK;
- }
-#endif /* LWIP_HAVE_LOOPIF */
-
- /* host name already in octet notation? set ip addr and return ERR_OK */
- if (ipaddr_aton(hostname, addr)) {
-#if LWIP_IPV4 && LWIP_IPV6
- if ((IP_IS_V6(addr) && (dns_addrtype != LWIP_DNS_ADDRTYPE_IPV4)) ||
- (IP_IS_V4(addr) && (dns_addrtype != LWIP_DNS_ADDRTYPE_IPV6)))
-#endif /* LWIP_IPV4 && LWIP_IPV6 */
- {
- return ERR_OK;
- }
- }
- /* already have this address cached? */
- if (dns_lookup(hostname, addr LWIP_DNS_ADDRTYPE_ARG(dns_addrtype)) == ERR_OK) {
- return ERR_OK;
- }
-#if LWIP_IPV4 && LWIP_IPV6
- if ((dns_addrtype == LWIP_DNS_ADDRTYPE_IPV4_IPV6) || (dns_addrtype == LWIP_DNS_ADDRTYPE_IPV6_IPV4)) {
- /* fallback to 2nd IP type and try again to lookup */
- u8_t fallback;
- if (dns_addrtype == LWIP_DNS_ADDRTYPE_IPV4_IPV6) {
- fallback = LWIP_DNS_ADDRTYPE_IPV6;
- } else {
- fallback = LWIP_DNS_ADDRTYPE_IPV4;
- }
- if (dns_lookup(hostname, addr LWIP_DNS_ADDRTYPE_ARG(fallback)) == ERR_OK) {
- return ERR_OK;
- }
- }
-#else /* LWIP_IPV4 && LWIP_IPV6 */
- LWIP_UNUSED_ARG(dns_addrtype);
-#endif /* LWIP_IPV4 && LWIP_IPV6 */
-
-#if LWIP_DNS_SUPPORT_MDNS_QUERIES
- if (strstr(hostname, ".local") == &hostname[hostnamelen] - 6) {
- is_mdns = 1;
- } else {
- is_mdns = 0;
- }
-
- if (!is_mdns)
-#endif /* LWIP_DNS_SUPPORT_MDNS_QUERIES */
- {
- /* prevent calling found callback if no server is set, return error instead */
- if (ip_addr_isany_val(dns_servers[0])) {
- return ERR_VAL;
- }
- }
-
- /* queue query with specified callback */
- return dns_enqueue(hostname, hostnamelen, found, callback_arg LWIP_DNS_ADDRTYPE_ARG(dns_addrtype)
- LWIP_DNS_ISMDNS_ARG(is_mdns));
-}
-
-#endif /* LWIP_DNS */
diff --git a/third-party/lwip-2.1.2/core/inet_chksum.c b/third-party/lwip-2.1.2/core/inet_chksum.c
deleted file mode 100644
index 818c68f45055d2eeba0bc9db6b7d8cdd3d85bc36..0000000000000000000000000000000000000000
--- a/third-party/lwip-2.1.2/core/inet_chksum.c
+++ /dev/null
@@ -1,608 +0,0 @@
-/**
- * @file
- * Internet checksum functions.\n
- *
- * These are some reference implementations of the checksum algorithm, with the
- * aim of being simple, correct and fully portable. Checksumming is the
- * first thing you would want to optimize for your platform. If you create
- * your own version, link it in and in your cc.h put:
- *
- * \#define LWIP_CHKSUM your_checksum_routine
- *
- * Or you can select from the implementations below by defining
- * LWIP_CHKSUM_ALGORITHM to 1, 2 or 3.
- */
-
-/*
- * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
- * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
- * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
- * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
- * OF SUCH DAMAGE.
- *
- * This file is part of the lwIP TCP/IP stack.
- *
- * Author: Adam Dunkels
- *
- */
-
-#include "lwip/opt.h"
-
-#include "lwip/inet_chksum.h"
-#include "lwip/def.h"
-#include "lwip/ip_addr.h"
-
-#include
-
-#ifndef LWIP_CHKSUM
-# define LWIP_CHKSUM lwip_standard_chksum
-# ifndef LWIP_CHKSUM_ALGORITHM
-# define LWIP_CHKSUM_ALGORITHM 2
-# endif
-u16_t lwip_standard_chksum(const void *dataptr, int len);
-#endif
-/* If none set: */
-#ifndef LWIP_CHKSUM_ALGORITHM
-# define LWIP_CHKSUM_ALGORITHM 0
-#endif
-
-#if (LWIP_CHKSUM_ALGORITHM == 1) /* Version #1 */
-/**
- * lwip checksum
- *
- * @param dataptr points to start of data to be summed at any boundary
- * @param len length of data to be summed
- * @return host order (!) lwip checksum (non-inverted Internet sum)
- *
- * @note accumulator size limits summable length to 64k
- * @note host endianess is irrelevant (p3 RFC1071)
- */
-u16_t
-lwip_standard_chksum(const void *dataptr, int len)
-{
- u32_t acc;
- u16_t src;
- const u8_t *octetptr;
-
- acc = 0;
- /* dataptr may be at odd or even addresses */
- octetptr = (const u8_t *)dataptr;
- while (len > 1) {
- /* declare first octet as most significant
- thus assume network order, ignoring host order */
- src = (*octetptr) << 8;
- octetptr++;
- /* declare second octet as least significant */
- src |= (*octetptr);
- octetptr++;
- acc += src;
- len -= 2;
- }
- if (len > 0) {
- /* accumulate remaining octet */
- src = (*octetptr) << 8;
- acc += src;
- }
- /* add deferred carry bits */
- acc = (acc >> 16) + (acc & 0x0000ffffUL);
- if ((acc & 0xffff0000UL) != 0) {
- acc = (acc >> 16) + (acc & 0x0000ffffUL);
- }
- /* This maybe a little confusing: reorder sum using lwip_htons()
- instead of lwip_ntohs() since it has a little less call overhead.
- The caller must invert bits for Internet sum ! */
- return lwip_htons((u16_t)acc);
-}
-#endif
-
-#if (LWIP_CHKSUM_ALGORITHM == 2) /* Alternative version #2 */
-/*
- * Curt McDowell
- * Broadcom Corp.
- * csm@broadcom.com
- *
- * IP checksum two bytes at a time with support for
- * unaligned buffer.
- * Works for len up to and including 0x20000.
- * by Curt McDowell, Broadcom Corp. 12/08/2005
- *
- * @param dataptr points to start of data to be summed at any boundary
- * @param len length of data to be summed
- * @return host order (!) lwip checksum (non-inverted Internet sum)
- */
-u16_t
-lwip_standard_chksum(const void *dataptr, int len)
-{
- const u8_t *pb = (const u8_t *)dataptr;
- const u16_t *ps;
- u16_t t = 0;
- u32_t sum = 0;
- int odd = ((mem_ptr_t)pb & 1);
-
- /* Get aligned to u16_t */
- if (odd && len > 0) {
- ((u8_t *)&t)[1] = *pb++;
- len--;
- }
-
- /* Add the bulk of the data */
- ps = (const u16_t *)(const void *)pb;
- while (len > 1) {
- sum += *ps++;
- len -= 2;
- }
-
- /* Consume left-over byte, if any */
- if (len > 0) {
- ((u8_t *)&t)[0] = *(const u8_t *)ps;
- }
-
- /* Add end bytes */
- sum += t;
-
- /* Fold 32-bit sum to 16 bits
- calling this twice is probably faster than if statements... */
- sum = FOLD_U32T(sum);
- sum = FOLD_U32T(sum);
-
- /* Swap if alignment was odd */
- if (odd) {
- sum = SWAP_BYTES_IN_WORD(sum);
- }
-
- return (u16_t)sum;
-}
-#endif
-
-#if (LWIP_CHKSUM_ALGORITHM == 3) /* Alternative version #3 */
-/**
- * An optimized checksum routine. Basically, it uses loop-unrolling on
- * the checksum loop, treating the head and tail bytes specially, whereas
- * the inner loop acts on 8 bytes at a time.
- *
- * @arg start of buffer to be checksummed. May be an odd byte address.
- * @len number of bytes in the buffer to be checksummed.
- * @return host order (!) lwip checksum (non-inverted Internet sum)
- *
- * by Curt McDowell, Broadcom Corp. December 8th, 2005
- */
-u16_t
-lwip_standard_chksum(const void *dataptr, int len)
-{
- const u8_t *pb = (const u8_t *)dataptr;
- const u16_t *ps;
- u16_t t = 0;
- const u32_t *pl;
- u32_t sum = 0, tmp;
- /* starts at odd byte address? */
- int odd = ((mem_ptr_t)pb & 1);
-
- if (odd && len > 0) {
- ((u8_t *)&t)[1] = *pb++;
- len--;
- }
-
- ps = (const u16_t *)(const void *)pb;
-
- if (((mem_ptr_t)ps & 3) && len > 1) {
- sum += *ps++;
- len -= 2;
- }
-
- pl = (const u32_t *)(const void *)ps;
-
- while (len > 7) {
- tmp = sum + *pl++; /* ping */
- if (tmp < sum) {
- tmp++; /* add back carry */
- }
-
- sum = tmp + *pl++; /* pong */
- if (sum < tmp) {
- sum++; /* add back carry */
- }
-
- len -= 8;
- }
-
- /* make room in upper bits */
- sum = FOLD_U32T(sum);
-
- ps = (const u16_t *)pl;
-
- /* 16-bit aligned word remaining? */
- while (len > 1) {
- sum += *ps++;
- len -= 2;
- }
-
- /* dangling tail byte remaining? */
- if (len > 0) { /* include odd byte */
- ((u8_t *)&t)[0] = *(const u8_t *)ps;
- }
-
- sum += t; /* add end bytes */
-
- /* Fold 32-bit sum to 16 bits
- calling this twice is probably faster than if statements... */
- sum = FOLD_U32T(sum);
- sum = FOLD_U32T(sum);
-
- if (odd) {
- sum = SWAP_BYTES_IN_WORD(sum);
- }
-
- return (u16_t)sum;
-}
-#endif
-
-/** Parts of the pseudo checksum which are common to IPv4 and IPv6 */
-static u16_t
-inet_cksum_pseudo_base(struct pbuf *p, u8_t proto, u16_t proto_len, u32_t acc)
-{
- struct pbuf *q;
- int swapped = 0;
-
- /* iterate through all pbuf in chain */
- for (q = p; q != NULL; q = q->next) {
- LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): checksumming pbuf %p (has next %p) \n",
- (void *)q, (void *)q->next));
- acc += LWIP_CHKSUM(q->payload, q->len);
- /*LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): unwrapped lwip_chksum()=%"X32_F" \n", acc));*/
- /* just executing this next line is probably faster that the if statement needed
- to check whether we really need to execute it, and does no harm */
- acc = FOLD_U32T(acc);
- if (q->len % 2 != 0) {
- swapped = !swapped;
- acc = SWAP_BYTES_IN_WORD(acc);
- }
- /*LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): wrapped lwip_chksum()=%"X32_F" \n", acc));*/
- }
-
- if (swapped) {
- acc = SWAP_BYTES_IN_WORD(acc);
- }
-
- acc += (u32_t)lwip_htons((u16_t)proto);
- acc += (u32_t)lwip_htons(proto_len);
-
- /* Fold 32-bit sum to 16 bits
- calling this twice is probably faster than if statements... */
- acc = FOLD_U32T(acc);
- acc = FOLD_U32T(acc);
- LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): pbuf chain lwip_chksum()=%"X32_F"\n", acc));
- return (u16_t)~(acc & 0xffffUL);
-}
-
-#if LWIP_IPV4
-/* inet_chksum_pseudo:
- *
- * Calculates the IPv4 pseudo Internet checksum used by TCP and UDP for a pbuf chain.
- * IP addresses are expected to be in network byte order.
- *
- * @param p chain of pbufs over that a checksum should be calculated (ip data part)
- * @param src source ip address (used for checksum of pseudo header)
- * @param dst destination ip address (used for checksum of pseudo header)
- * @param proto ip protocol (used for checksum of pseudo header)
- * @param proto_len length of the ip data part (used for checksum of pseudo header)
- * @return checksum (as u16_t) to be saved directly in the protocol header
- */
-u16_t
-inet_chksum_pseudo(struct pbuf *p, u8_t proto, u16_t proto_len,
- const ip4_addr_t *src, const ip4_addr_t *dest)
-{
- u32_t acc;
- u32_t addr;
-
- addr = ip4_addr_get_u32(src);
- acc = (addr & 0xffffUL);
- acc = (u32_t)(acc + ((addr >> 16) & 0xffffUL));
- addr = ip4_addr_get_u32(dest);
- acc = (u32_t)(acc + (addr & 0xffffUL));
- acc = (u32_t)(acc + ((addr >> 16) & 0xffffUL));
- /* fold down to 16 bits */
- acc = FOLD_U32T(acc);
- acc = FOLD_U32T(acc);
-
- return inet_cksum_pseudo_base(p, proto, proto_len, acc);
-}
-#endif /* LWIP_IPV4 */
-
-#if LWIP_IPV6
-/**
- * Calculates the checksum with IPv6 pseudo header used by TCP and UDP for a pbuf chain.
- * IPv6 addresses are expected to be in network byte order.
- *
- * @param p chain of pbufs over that a checksum should be calculated (ip data part)
- * @param proto ipv6 protocol/next header (used for checksum of pseudo header)
- * @param proto_len length of the ipv6 payload (used for checksum of pseudo header)
- * @param src source ipv6 address (used for checksum of pseudo header)
- * @param dest destination ipv6 address (used for checksum of pseudo header)
- * @return checksum (as u16_t) to be saved directly in the protocol header
- */
-u16_t
-ip6_chksum_pseudo(struct pbuf *p, u8_t proto, u16_t proto_len,
- const ip6_addr_t *src, const ip6_addr_t *dest)
-{
- u32_t acc = 0;
- u32_t addr;
- u8_t addr_part;
-
- for (addr_part = 0; addr_part < 4; addr_part++) {
- addr = src->addr[addr_part];
- acc = (u32_t)(acc + (addr & 0xffffUL));
- acc = (u32_t)(acc + ((addr >> 16) & 0xffffUL));
- addr = dest->addr[addr_part];
- acc = (u32_t)(acc + (addr & 0xffffUL));
- acc = (u32_t)(acc + ((addr >> 16) & 0xffffUL));
- }
- /* fold down to 16 bits */
- acc = FOLD_U32T(acc);
- acc = FOLD_U32T(acc);
-
- return inet_cksum_pseudo_base(p, proto, proto_len, acc);
-}
-#endif /* LWIP_IPV6 */
-
-/* ip_chksum_pseudo:
- *
- * Calculates the IPv4 or IPv6 pseudo Internet checksum used by TCP and UDP for a pbuf chain.
- * IP addresses are expected to be in network byte order.
- *
- * @param p chain of pbufs over that a checksum should be calculated (ip data part)
- * @param src source ip address (used for checksum of pseudo header)
- * @param dst destination ip address (used for checksum of pseudo header)
- * @param proto ip protocol (used for checksum of pseudo header)
- * @param proto_len length of the ip data part (used for checksum of pseudo header)
- * @return checksum (as u16_t) to be saved directly in the protocol header
- */
-u16_t
-ip_chksum_pseudo(struct pbuf *p, u8_t proto, u16_t proto_len,
- const ip_addr_t *src, const ip_addr_t *dest)
-{
-#if LWIP_IPV6
- if (IP_IS_V6(dest)) {
- return ip6_chksum_pseudo(p, proto, proto_len, ip_2_ip6(src), ip_2_ip6(dest));
- }
-#endif /* LWIP_IPV6 */
-#if LWIP_IPV4 && LWIP_IPV6
- else
-#endif /* LWIP_IPV4 && LWIP_IPV6 */
-#if LWIP_IPV4
- {
- return inet_chksum_pseudo(p, proto, proto_len, ip_2_ip4(src), ip_2_ip4(dest));
- }
-#endif /* LWIP_IPV4 */
-}
-
-/** Parts of the pseudo checksum which are common to IPv4 and IPv6 */
-static u16_t
-inet_cksum_pseudo_partial_base(struct pbuf *p, u8_t proto, u16_t proto_len,
- u16_t chksum_len, u32_t acc)
-{
- struct pbuf *q;
- int swapped = 0;
- u16_t chklen;
-
- /* iterate through all pbuf in chain */
- for (q = p; (q != NULL) && (chksum_len > 0); q = q->next) {
- LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): checksumming pbuf %p (has next %p) \n",
- (void *)q, (void *)q->next));
- chklen = q->len;
- if (chklen > chksum_len) {
- chklen = chksum_len;
- }
- acc += LWIP_CHKSUM(q->payload, chklen);
- chksum_len = (u16_t)(chksum_len - chklen);
- LWIP_ASSERT("delete me", chksum_len < 0x7fff);
- /*LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): unwrapped lwip_chksum()=%"X32_F" \n", acc));*/
- /* fold the upper bit down */
- acc = FOLD_U32T(acc);
- if (q->len % 2 != 0) {
- swapped = !swapped;
- acc = SWAP_BYTES_IN_WORD(acc);
- }
- /*LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): wrapped lwip_chksum()=%"X32_F" \n", acc));*/
- }
-
- if (swapped) {
- acc = SWAP_BYTES_IN_WORD(acc);
- }
-
- acc += (u32_t)lwip_htons((u16_t)proto);
- acc += (u32_t)lwip_htons(proto_len);
-
- /* Fold 32-bit sum to 16 bits
- calling this twice is probably faster than if statements... */
- acc = FOLD_U32T(acc);
- acc = FOLD_U32T(acc);
- LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): pbuf chain lwip_chksum()=%"X32_F"\n", acc));
- return (u16_t)~(acc & 0xffffUL);
-}
-
-#if LWIP_IPV4
-/* inet_chksum_pseudo_partial:
- *
- * Calculates the IPv4 pseudo Internet checksum used by TCP and UDP for a pbuf chain.
- * IP addresses are expected to be in network byte order.
- *
- * @param p chain of pbufs over that a checksum should be calculated (ip data part)
- * @param src source ip address (used for checksum of pseudo header)
- * @param dst destination ip address (used for checksum of pseudo header)
- * @param proto ip protocol (used for checksum of pseudo header)
- * @param proto_len length of the ip data part (used for checksum of pseudo header)
- * @return checksum (as u16_t) to be saved directly in the protocol header
- */
-u16_t
-inet_chksum_pseudo_partial(struct pbuf *p, u8_t proto, u16_t proto_len,
- u16_t chksum_len, const ip4_addr_t *src, const ip4_addr_t *dest)
-{
- u32_t acc;
- u32_t addr;
-
- addr = ip4_addr_get_u32(src);
- acc = (addr & 0xffffUL);
- acc = (u32_t)(acc + ((addr >> 16) & 0xffffUL));
- addr = ip4_addr_get_u32(dest);
- acc = (u32_t)(acc + (addr & 0xffffUL));
- acc = (u32_t)(acc + ((addr >> 16) & 0xffffUL));
- /* fold down to 16 bits */
- acc = FOLD_U32T(acc);
- acc = FOLD_U32T(acc);
-
- return inet_cksum_pseudo_partial_base(p, proto, proto_len, chksum_len, acc);
-}
-#endif /* LWIP_IPV4 */
-
-#if LWIP_IPV6
-/**
- * Calculates the checksum with IPv6 pseudo header used by TCP and UDP for a pbuf chain.
- * IPv6 addresses are expected to be in network byte order. Will only compute for a
- * portion of the payload.
- *
- * @param p chain of pbufs over that a checksum should be calculated (ip data part)
- * @param proto ipv6 protocol/next header (used for checksum of pseudo header)
- * @param proto_len length of the ipv6 payload (used for checksum of pseudo header)
- * @param chksum_len number of payload bytes used to compute chksum
- * @param src source ipv6 address (used for checksum of pseudo header)
- * @param dest destination ipv6 address (used for checksum of pseudo header)
- * @return checksum (as u16_t) to be saved directly in the protocol header
- */
-u16_t
-ip6_chksum_pseudo_partial(struct pbuf *p, u8_t proto, u16_t proto_len,
- u16_t chksum_len, const ip6_addr_t *src, const ip6_addr_t *dest)
-{
- u32_t acc = 0;
- u32_t addr;
- u8_t addr_part;
-
- for (addr_part = 0; addr_part < 4; addr_part++) {
- addr = src->addr[addr_part];
- acc = (u32_t)(acc + (addr & 0xffffUL));
- acc = (u32_t)(acc + ((addr >> 16) & 0xffffUL));
- addr = dest->addr[addr_part];
- acc = (u32_t)(acc + (addr & 0xffffUL));
- acc = (u32_t)(acc + ((addr >> 16) & 0xffffUL));
- }
- /* fold down to 16 bits */
- acc = FOLD_U32T(acc);
- acc = FOLD_U32T(acc);
-
- return inet_cksum_pseudo_partial_base(p, proto, proto_len, chksum_len, acc);
-}
-#endif /* LWIP_IPV6 */
-
-/* ip_chksum_pseudo_partial:
- *
- * Calculates the IPv4 or IPv6 pseudo Internet checksum used by TCP and UDP for a pbuf chain.
- *
- * @param p chain of pbufs over that a checksum should be calculated (ip data part)
- * @param src source ip address (used for checksum of pseudo header)
- * @param dst destination ip address (used for checksum of pseudo header)
- * @param proto ip protocol (used for checksum of pseudo header)
- * @param proto_len length of the ip data part (used for checksum of pseudo header)
- * @return checksum (as u16_t) to be saved directly in the protocol header
- */
-u16_t
-ip_chksum_pseudo_partial(struct pbuf *p, u8_t proto, u16_t proto_len,
- u16_t chksum_len, const ip_addr_t *src, const ip_addr_t *dest)
-{
-#if LWIP_IPV6
- if (IP_IS_V6(dest)) {
- return ip6_chksum_pseudo_partial(p, proto, proto_len, chksum_len, ip_2_ip6(src), ip_2_ip6(dest));
- }
-#endif /* LWIP_IPV6 */
-#if LWIP_IPV4 && LWIP_IPV6
- else
-#endif /* LWIP_IPV4 && LWIP_IPV6 */
-#if LWIP_IPV4
- {
- return inet_chksum_pseudo_partial(p, proto, proto_len, chksum_len, ip_2_ip4(src), ip_2_ip4(dest));
- }
-#endif /* LWIP_IPV4 */
-}
-
-/* inet_chksum:
- *
- * Calculates the Internet checksum over a portion of memory. Used primarily for IP
- * and ICMP.
- *
- * @param dataptr start of the buffer to calculate the checksum (no alignment needed)
- * @param len length of the buffer to calculate the checksum
- * @return checksum (as u16_t) to be saved directly in the protocol header
- */
-
-u16_t
-inet_chksum(const void *dataptr, u16_t len)
-{
- return (u16_t)~(unsigned int)LWIP_CHKSUM(dataptr, len);
-}
-
-/**
- * Calculate a checksum over a chain of pbufs (without pseudo-header, much like
- * inet_chksum only pbufs are used).
- *
- * @param p pbuf chain over that the checksum should be calculated
- * @return checksum (as u16_t) to be saved directly in the protocol header
- */
-u16_t
-inet_chksum_pbuf(struct pbuf *p)
-{
- u32_t acc;
- struct pbuf *q;
- int swapped = 0;
-
- acc = 0;
- for (q = p; q != NULL; q = q->next) {
- acc += LWIP_CHKSUM(q->payload, q->len);
- acc = FOLD_U32T(acc);
- if (q->len % 2 != 0) {
- swapped = !swapped;
- acc = SWAP_BYTES_IN_WORD(acc);
- }
- }
-
- if (swapped) {
- acc = SWAP_BYTES_IN_WORD(acc);
- }
- return (u16_t)~(acc & 0xffffUL);
-}
-
-/* These are some implementations for LWIP_CHKSUM_COPY, which copies data
- * like MEMCPY but generates a checksum at the same time. Since this is a
- * performance-sensitive function, you might want to create your own version
- * in assembly targeted at your hardware by defining it in lwipopts.h:
- * #define LWIP_CHKSUM_COPY(dst, src, len) your_chksum_copy(dst, src, len)
- */
-
-#if (LWIP_CHKSUM_COPY_ALGORITHM == 1) /* Version #1 */
-/** Safe but slow: first call MEMCPY, then call LWIP_CHKSUM.
- * For architectures with big caches, data might still be in cache when
- * generating the checksum after copying.
- */
-u16_t
-lwip_chksum_copy(void *dst, const void *src, u16_t len)
-{
- MEMCPY(dst, src, len);
- return LWIP_CHKSUM(dst, len);
-}
-#endif /* (LWIP_CHKSUM_COPY_ALGORITHM == 1) */
diff --git a/third-party/lwip-2.1.2/core/init.c b/third-party/lwip-2.1.2/core/init.c
deleted file mode 100644
index d4211d398c632c69f38f5957ce27a4e185f147c4..0000000000000000000000000000000000000000
--- a/third-party/lwip-2.1.2/core/init.c
+++ /dev/null
@@ -1,381 +0,0 @@
-/**
- * @file
- * Modules initialization
- *
- */
-
-/*
- * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
- * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
- * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
- * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
- * OF SUCH DAMAGE.
- *
- * This file is part of the lwIP TCP/IP stack.
- *
- * Author: Adam Dunkels
- */
-
-#include "lwip/opt.h"
-
-#include "lwip/init.h"
-#include "lwip/stats.h"
-#include "lwip/sys.h"
-#include "lwip/mem.h"
-#include "lwip/memp.h"
-#include "lwip/pbuf.h"
-#include "lwip/netif.h"
-#include "lwip/sockets.h"
-#include "lwip/ip.h"
-#include "lwip/raw.h"
-#include "lwip/udp.h"
-#include "lwip/priv/tcp_priv.h"
-#include "lwip/igmp.h"
-#include "lwip/dns.h"
-#include "lwip/timeouts.h"
-#include "lwip/etharp.h"
-#include "lwip/ip6.h"
-#include "lwip/nd6.h"
-#include "lwip/mld6.h"
-#include "lwip/api.h"
-
-#include "netif/ppp/ppp_opts.h"
-#include "netif/ppp/ppp_impl.h"
-
-#ifndef LWIP_SKIP_PACKING_CHECK
-
-#ifdef PACK_STRUCT_USE_INCLUDES
-# include "arch/bpstruct.h"
-#endif
-PACK_STRUCT_BEGIN
-struct packed_struct_test {
- PACK_STRUCT_FLD_8(u8_t dummy1);
- PACK_STRUCT_FIELD(u32_t dummy2);
-} PACK_STRUCT_STRUCT;
-PACK_STRUCT_END
-#ifdef PACK_STRUCT_USE_INCLUDES
-# include "arch/epstruct.h"
-#endif
-#define PACKED_STRUCT_TEST_EXPECTED_SIZE 5
-
-#endif
-
-/* Compile-time sanity checks for configuration errors.
- * These can be done independently of LWIP_DEBUG, without penalty.
- */
-#ifndef BYTE_ORDER
-#error "BYTE_ORDER is not defined, you have to define it in your cc.h"
-#endif
-#if (!IP_SOF_BROADCAST && IP_SOF_BROADCAST_RECV)
-#error "If you want to use broadcast filter per pcb on recv operations, you have to define IP_SOF_BROADCAST=1 in your lwipopts.h"
-#endif
-#if (!LWIP_UDP && LWIP_UDPLITE)
-#error "If you want to use UDP Lite, you have to define LWIP_UDP=1 in your lwipopts.h"
-#endif
-#if (!LWIP_UDP && LWIP_DHCP)
-#error "If you want to use DHCP, you have to define LWIP_UDP=1 in your lwipopts.h"
-#endif
-#if (!LWIP_UDP && !LWIP_RAW && LWIP_MULTICAST_TX_OPTIONS)
-#error "If you want to use LWIP_MULTICAST_TX_OPTIONS, you have to define LWIP_UDP=1 and/or LWIP_RAW=1 in your lwipopts.h"
-#endif
-#if (!LWIP_UDP && LWIP_DNS)
-#error "If you want to use DNS, you have to define LWIP_UDP=1 in your lwipopts.h"
-#endif
-#if !MEMP_MEM_MALLOC /* MEMP_NUM_* checks are disabled when not using the pool allocator */
-#if (LWIP_ARP && ARP_QUEUEING && (MEMP_NUM_ARP_QUEUE<=0))
-#error "If you want to use ARP Queueing, you have to define MEMP_NUM_ARP_QUEUE>=1 in your lwipopts.h"
-#endif
-#if (LWIP_RAW && (MEMP_NUM_RAW_PCB<=0))
-#error "If you want to use RAW, you have to define MEMP_NUM_RAW_PCB>=1 in your lwipopts.h"
-#endif
-#if (LWIP_UDP && (MEMP_NUM_UDP_PCB<=0))
-#error "If you want to use UDP, you have to define MEMP_NUM_UDP_PCB>=1 in your lwipopts.h"
-#endif
-#if (LWIP_TCP && (MEMP_NUM_TCP_PCB<=0))
-#error "If you want to use TCP, you have to define MEMP_NUM_TCP_PCB>=1 in your lwipopts.h"
-#endif
-#if (LWIP_IGMP && (MEMP_NUM_IGMP_GROUP<=1))
-#error "If you want to use IGMP, you have to define MEMP_NUM_IGMP_GROUP>1 in your lwipopts.h"
-#endif
-#if (LWIP_IGMP && !LWIP_MULTICAST_TX_OPTIONS)
-#error "If you want to use IGMP, you have to define LWIP_MULTICAST_TX_OPTIONS==1 in your lwipopts.h"
-#endif
-#if (LWIP_IGMP && !LWIP_IPV4)
-#error "IGMP needs LWIP_IPV4 enabled in your lwipopts.h"
-#endif
-#if ((LWIP_NETCONN || LWIP_SOCKET) && (MEMP_NUM_TCPIP_MSG_API<=0))
-#error "If you want to use Sequential API, you have to define MEMP_NUM_TCPIP_MSG_API>=1 in your lwipopts.h"
-#endif
-/* There must be sufficient timeouts, taking into account requirements of the subsystems. */
-#if LWIP_TIMERS && (MEMP_NUM_SYS_TIMEOUT < LWIP_NUM_SYS_TIMEOUT_INTERNAL)
-#error "MEMP_NUM_SYS_TIMEOUT is too low to accomodate all required timeouts"
-#endif
-#if (IP_REASSEMBLY && (MEMP_NUM_REASSDATA > IP_REASS_MAX_PBUFS))
-#error "MEMP_NUM_REASSDATA > IP_REASS_MAX_PBUFS doesn't make sense since each struct ip_reassdata must hold 2 pbufs at least!"
-#endif
-#endif /* !MEMP_MEM_MALLOC */
-#if LWIP_WND_SCALE
-#if (LWIP_TCP && (TCP_WND > 0xffffffff))
-#error "If you want to use TCP, TCP_WND must fit in an u32_t, so, you have to reduce it in your lwipopts.h"
-#endif
-#if (LWIP_TCP && (TCP_RCV_SCALE > 14))
-#error "The maximum valid window scale value is 14!"
-#endif
-#if (LWIP_TCP && (TCP_WND > (0xFFFFU << TCP_RCV_SCALE)))
-#error "TCP_WND is bigger than the configured LWIP_WND_SCALE allows!"
-#endif
-#if (LWIP_TCP && ((TCP_WND >> TCP_RCV_SCALE) == 0))
-#error "TCP_WND is too small for the configured LWIP_WND_SCALE (results in zero window)!"
-#endif
-#else /* LWIP_WND_SCALE */
-#if (LWIP_TCP && (TCP_WND > 0xffff))
-#error "If you want to use TCP, TCP_WND must fit in an u16_t, so, you have to reduce it in your lwipopts.h (or enable window scaling)"
-#endif
-#endif /* LWIP_WND_SCALE */
-#if (LWIP_TCP && (TCP_SND_QUEUELEN > 0xffff))
-#error "If you want to use TCP, TCP_SND_QUEUELEN must fit in an u16_t, so, you have to reduce it in your lwipopts.h"
-#endif
-#if (LWIP_TCP && (TCP_SND_QUEUELEN < 2))
-#error "TCP_SND_QUEUELEN must be at least 2 for no-copy TCP writes to work"
-#endif
-#if (LWIP_TCP && ((TCP_MAXRTX > 12) || (TCP_SYNMAXRTX > 12)))
-#error "If you want to use TCP, TCP_MAXRTX and TCP_SYNMAXRTX must less or equal to 12 (due to tcp_backoff table), so, you have to reduce them in your lwipopts.h"
-#endif
-#if (LWIP_TCP && TCP_LISTEN_BACKLOG && ((TCP_DEFAULT_LISTEN_BACKLOG < 0) || (TCP_DEFAULT_LISTEN_BACKLOG > 0xff)))
-#error "If you want to use TCP backlog, TCP_DEFAULT_LISTEN_BACKLOG must fit into an u8_t"
-#endif
-#if (LWIP_TCP && LWIP_TCP_SACK_OUT && !TCP_QUEUE_OOSEQ)
-#error "To use LWIP_TCP_SACK_OUT, TCP_QUEUE_OOSEQ needs to be enabled"
-#endif
-#if (LWIP_TCP && LWIP_TCP_SACK_OUT && (LWIP_TCP_MAX_SACK_NUM < 1))
-#error "LWIP_TCP_MAX_SACK_NUM must be greater than 0"
-#endif
-#if (LWIP_NETIF_API && (NO_SYS==1))
-#error "If you want to use NETIF API, you have to define NO_SYS=0 in your lwipopts.h"
-#endif
-#if ((LWIP_SOCKET || LWIP_NETCONN) && (NO_SYS==1))
-#error "If you want to use Sequential API, you have to define NO_SYS=0 in your lwipopts.h"
-#endif
-#if (LWIP_PPP_API && (NO_SYS==1))
-#error "If you want to use PPP API, you have to define NO_SYS=0 in your lwipopts.h"
-#endif
-#if (LWIP_PPP_API && (PPP_SUPPORT==0))
-#error "If you want to use PPP API, you have to enable PPP_SUPPORT in your lwipopts.h"
-#endif
-#if (((!LWIP_DHCP) || (!LWIP_AUTOIP)) && LWIP_DHCP_AUTOIP_COOP)
-#error "If you want to use DHCP/AUTOIP cooperation mode, you have to define LWIP_DHCP=1 and LWIP_AUTOIP=1 in your lwipopts.h"
-#endif
-#if (((!LWIP_DHCP) || (!LWIP_ARP)) && DHCP_DOES_ARP_CHECK)
-#error "If you want to use DHCP ARP checking, you have to define LWIP_DHCP=1 and LWIP_ARP=1 in your lwipopts.h"
-#endif
-#if (!LWIP_ARP && LWIP_AUTOIP)
-#error "If you want to use AUTOIP, you have to define LWIP_ARP=1 in your lwipopts.h"
-#endif
-#if (LWIP_TCP && ((LWIP_EVENT_API && LWIP_CALLBACK_API) || (!LWIP_EVENT_API && !LWIP_CALLBACK_API)))
-#error "One and exactly one of LWIP_EVENT_API and LWIP_CALLBACK_API has to be enabled in your lwipopts.h"
-#endif
-#if (LWIP_ALTCP && LWIP_EVENT_API)
-#error "The application layered tcp API does not work with LWIP_EVENT_API"
-#endif
-#if (MEM_LIBC_MALLOC && MEM_USE_POOLS)
-#error "MEM_LIBC_MALLOC and MEM_USE_POOLS may not both be simultaneously enabled in your lwipopts.h"
-#endif
-#if (MEM_USE_POOLS && !MEMP_USE_CUSTOM_POOLS)
-#error "MEM_USE_POOLS requires custom pools (MEMP_USE_CUSTOM_POOLS) to be enabled in your lwipopts.h"
-#endif
-#if (PBUF_POOL_BUFSIZE <= MEM_ALIGNMENT)
-#error "PBUF_POOL_BUFSIZE must be greater than MEM_ALIGNMENT or the offset may take the full first pbuf"
-#endif
-#if (DNS_LOCAL_HOSTLIST && !DNS_LOCAL_HOSTLIST_IS_DYNAMIC && !(defined(DNS_LOCAL_HOSTLIST_INIT)))
-#error "you have to define define DNS_LOCAL_HOSTLIST_INIT {{'host1', 0x123}, {'host2', 0x234}} to initialize DNS_LOCAL_HOSTLIST"
-#endif
-#if PPP_SUPPORT && !PPPOS_SUPPORT && !PPPOE_SUPPORT && !PPPOL2TP_SUPPORT
-#error "PPP_SUPPORT needs at least one of PPPOS_SUPPORT, PPPOE_SUPPORT or PPPOL2TP_SUPPORT turned on"
-#endif
-#if PPP_SUPPORT && !PPP_IPV4_SUPPORT && !PPP_IPV6_SUPPORT
-#error "PPP_SUPPORT needs PPP_IPV4_SUPPORT and/or PPP_IPV6_SUPPORT turned on"
-#endif
-#if PPP_SUPPORT && PPP_IPV4_SUPPORT && !LWIP_IPV4
-#error "PPP_IPV4_SUPPORT needs LWIP_IPV4 turned on"
-#endif
-#if PPP_SUPPORT && PPP_IPV6_SUPPORT && !LWIP_IPV6
-#error "PPP_IPV6_SUPPORT needs LWIP_IPV6 turned on"
-#endif
-#if !LWIP_ETHERNET && (LWIP_ARP || PPPOE_SUPPORT)
-#error "LWIP_ETHERNET needs to be turned on for LWIP_ARP or PPPOE_SUPPORT"
-#endif
-#if LWIP_TCPIP_CORE_LOCKING_INPUT && !LWIP_TCPIP_CORE_LOCKING
-#error "When using LWIP_TCPIP_CORE_LOCKING_INPUT, LWIP_TCPIP_CORE_LOCKING must be enabled, too"
-#endif
-#if LWIP_TCP && LWIP_NETIF_TX_SINGLE_PBUF && !TCP_OVERSIZE
-#error "LWIP_NETIF_TX_SINGLE_PBUF needs TCP_OVERSIZE enabled to create single-pbuf TCP packets"
-#endif
-#if LWIP_NETCONN && LWIP_TCP
-#if NETCONN_COPY != TCP_WRITE_FLAG_COPY
-#error "NETCONN_COPY != TCP_WRITE_FLAG_COPY"
-#endif
-#if NETCONN_MORE != TCP_WRITE_FLAG_MORE
-#error "NETCONN_MORE != TCP_WRITE_FLAG_MORE"
-#endif
-#endif /* LWIP_NETCONN && LWIP_TCP */
-#if LWIP_SOCKET
-#endif /* LWIP_SOCKET */
-
-
-/* Compile-time checks for deprecated options.
- */
-#ifdef MEMP_NUM_TCPIP_MSG
-#error "MEMP_NUM_TCPIP_MSG option is deprecated. Remove it from your lwipopts.h."
-#endif
-#ifdef TCP_REXMIT_DEBUG
-#error "TCP_REXMIT_DEBUG option is deprecated. Remove it from your lwipopts.h."
-#endif
-#ifdef RAW_STATS
-#error "RAW_STATS option is deprecated. Remove it from your lwipopts.h."
-#endif
-#ifdef ETHARP_QUEUE_FIRST
-#error "ETHARP_QUEUE_FIRST option is deprecated. Remove it from your lwipopts.h."
-#endif
-#ifdef ETHARP_ALWAYS_INSERT
-#error "ETHARP_ALWAYS_INSERT option is deprecated. Remove it from your lwipopts.h."
-#endif
-#if !NO_SYS && LWIP_TCPIP_CORE_LOCKING && LWIP_COMPAT_MUTEX && !defined(LWIP_COMPAT_MUTEX_ALLOWED)
-#error "LWIP_COMPAT_MUTEX cannot prevent priority inversion. It is recommended to implement priority-aware mutexes. (Define LWIP_COMPAT_MUTEX_ALLOWED to disable this error.)"
-#endif
-
-#ifndef LWIP_DISABLE_TCP_SANITY_CHECKS
-#define LWIP_DISABLE_TCP_SANITY_CHECKS 0
-#endif
-#ifndef LWIP_DISABLE_MEMP_SANITY_CHECKS
-#define LWIP_DISABLE_MEMP_SANITY_CHECKS 0
-#endif
-
-/* MEMP sanity checks */
-#if MEMP_MEM_MALLOC
-#if !LWIP_DISABLE_MEMP_SANITY_CHECKS
-#if LWIP_NETCONN || LWIP_SOCKET
-#if !MEMP_NUM_NETCONN && LWIP_SOCKET
-#error "lwip_sanity_check: WARNING: MEMP_NUM_NETCONN cannot be 0 when using sockets!"
-#endif
-#else /* MEMP_MEM_MALLOC */
-#if MEMP_NUM_NETCONN > (MEMP_NUM_TCP_PCB+MEMP_NUM_TCP_PCB_LISTEN+MEMP_NUM_UDP_PCB+MEMP_NUM_RAW_PCB)
-#error "lwip_sanity_check: WARNING: MEMP_NUM_NETCONN should be less than the sum of MEMP_NUM_{TCP,RAW,UDP}_PCB+MEMP_NUM_TCP_PCB_LISTEN. If you know what you are doing, define LWIP_DISABLE_MEMP_SANITY_CHECKS to 1 to disable this error."
-#endif
-#endif /* LWIP_NETCONN || LWIP_SOCKET */
-#endif /* !LWIP_DISABLE_MEMP_SANITY_CHECKS */
-#if MEM_USE_POOLS
-#error "MEMP_MEM_MALLOC and MEM_USE_POOLS cannot be enabled at the same time"
-#endif
-#ifdef LWIP_HOOK_MEMP_AVAILABLE
-#error "LWIP_HOOK_MEMP_AVAILABLE doesn't make sense with MEMP_MEM_MALLOC"
-#endif
-#endif /* MEMP_MEM_MALLOC */
-
-/* TCP sanity checks */
-#if !LWIP_DISABLE_TCP_SANITY_CHECKS
-#if LWIP_TCP
-#if !MEMP_MEM_MALLOC && (MEMP_NUM_TCP_SEG < TCP_SND_QUEUELEN)
-#error "lwip_sanity_check: WARNING: MEMP_NUM_TCP_SEG should be at least as big as TCP_SND_QUEUELEN. If you know what you are doing, define LWIP_DISABLE_TCP_SANITY_CHECKS to 1 to disable this error."
-#endif
-#if TCP_SND_BUF < (2 * TCP_MSS)
-#error "lwip_sanity_check: WARNING: TCP_SND_BUF must be at least as much as (2 * TCP_MSS) for things to work smoothly. If you know what you are doing, define LWIP_DISABLE_TCP_SANITY_CHECKS to 1 to disable this error."
-#endif
-#if TCP_SND_QUEUELEN < (2 * (TCP_SND_BUF / TCP_MSS))
-#error "lwip_sanity_check: WARNING: TCP_SND_QUEUELEN must be at least as much as (2 * TCP_SND_BUF/TCP_MSS) for things to work. If you know what you are doing, define LWIP_DISABLE_TCP_SANITY_CHECKS to 1 to disable this error."
-#endif
-#if TCP_SNDLOWAT >= TCP_SND_BUF
-#error "lwip_sanity_check: WARNING: TCP_SNDLOWAT must be less than TCP_SND_BUF. If you know what you are doing, define LWIP_DISABLE_TCP_SANITY_CHECKS to 1 to disable this error."
-#endif
-#if TCP_SNDLOWAT >= (0xFFFF - (4 * TCP_MSS))
-#error "lwip_sanity_check: WARNING: TCP_SNDLOWAT must at least be 4*MSS below u16_t overflow!"
-#endif
-#if TCP_SNDQUEUELOWAT >= TCP_SND_QUEUELEN
-#error "lwip_sanity_check: WARNING: TCP_SNDQUEUELOWAT must be less than TCP_SND_QUEUELEN. If you know what you are doing, define LWIP_DISABLE_TCP_SANITY_CHECKS to 1 to disable this error."
-#endif
-#if !MEMP_MEM_MALLOC && PBUF_POOL_SIZE && (PBUF_POOL_BUFSIZE <= (PBUF_LINK_ENCAPSULATION_HLEN + PBUF_LINK_HLEN + PBUF_IP_HLEN + PBUF_TRANSPORT_HLEN))
-#error "lwip_sanity_check: WARNING: PBUF_POOL_BUFSIZE does not provide enough space for protocol headers. If you know what you are doing, define LWIP_DISABLE_TCP_SANITY_CHECKS to 1 to disable this error."
-#endif
-#if !MEMP_MEM_MALLOC && PBUF_POOL_SIZE && (TCP_WND > (PBUF_POOL_SIZE * (PBUF_POOL_BUFSIZE - (PBUF_LINK_ENCAPSULATION_HLEN + PBUF_LINK_HLEN + PBUF_IP_HLEN + PBUF_TRANSPORT_HLEN))))
-#error "lwip_sanity_check: WARNING: TCP_WND is larger than space provided by PBUF_POOL_SIZE * (PBUF_POOL_BUFSIZE - protocol headers). If you know what you are doing, define LWIP_DISABLE_TCP_SANITY_CHECKS to 1 to disable this error."
-#endif
-#if TCP_WND < TCP_MSS
-#error "lwip_sanity_check: WARNING: TCP_WND is smaller than MSS. If you know what you are doing, define LWIP_DISABLE_TCP_SANITY_CHECKS to 1 to disable this error."
-#endif
-#endif /* LWIP_TCP */
-#endif /* !LWIP_DISABLE_TCP_SANITY_CHECKS */
-
-/**
- * @ingroup lwip_nosys
- * Initialize all modules.
- * Use this in NO_SYS mode. Use tcpip_init() otherwise.
- */
-void
-lwip_init(void)
-{
-#ifndef LWIP_SKIP_CONST_CHECK
- int a = 0;
- LWIP_UNUSED_ARG(a);
- LWIP_ASSERT("LWIP_CONST_CAST not implemented correctly. Check your lwIP port.", LWIP_CONST_CAST(void *, &a) == &a);
-#endif
-#ifndef LWIP_SKIP_PACKING_CHECK
- LWIP_ASSERT("Struct packing not implemented correctly. Check your lwIP port.", sizeof(struct packed_struct_test) == PACKED_STRUCT_TEST_EXPECTED_SIZE);
-#endif
-
- /* Modules initialization */
- stats_init();
-#if !NO_SYS
- sys_init();
-#endif /* !NO_SYS */
- mem_init();
- memp_init();
- pbuf_init();
- netif_init();
-
-#if LWIP_IPV4
- ip_init();
-#if LWIP_ARP
- etharp_init();
-#endif /* LWIP_ARP */
-#endif /* LWIP_IPV4 */
-#if LWIP_RAW
- raw_init();
-#endif /* LWIP_RAW */
-#if LWIP_UDP
- udp_init();
-#endif /* LWIP_UDP */
-#if LWIP_TCP
- tcp_init();
-#endif /* LWIP_TCP */
-#if LWIP_IGMP
- igmp_init();
-#endif /* LWIP_IGMP */
-#if LWIP_DNS
- dns_init();
-#endif /* LWIP_DNS */
-#if PPP_SUPPORT
- ppp_init();
-#endif
-
-#if LWIP_TIMERS
- sys_timeouts_init();
-#endif /* LWIP_TIMERS */
-}
diff --git a/third-party/lwip-2.1.2/core/ip.c b/third-party/lwip-2.1.2/core/ip.c
deleted file mode 100644
index 18514cf32cbaa5df7276cfc54c6c4e090865cec4..0000000000000000000000000000000000000000
--- a/third-party/lwip-2.1.2/core/ip.c
+++ /dev/null
@@ -1,167 +0,0 @@
-/**
- * @file
- * Common IPv4 and IPv6 code
- *
- * @defgroup ip IP
- * @ingroup callbackstyle_api
- *
- * @defgroup ip4 IPv4
- * @ingroup ip
- *
- * @defgroup ip6 IPv6
- * @ingroup ip
- *
- * @defgroup ipaddr IP address handling
- * @ingroup infrastructure
- *
- * @defgroup ip4addr IPv4 only
- * @ingroup ipaddr
- *
- * @defgroup ip6addr IPv6 only
- * @ingroup ipaddr
- */
-
-/*
- * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
- * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
- * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
- * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
- * OF SUCH DAMAGE.
- *
- * This file is part of the lwIP TCP/IP stack.
- *
- * Author: Adam Dunkels
- *
- */
-
-#include "lwip/opt.h"
-
-#if LWIP_IPV4 || LWIP_IPV6
-
-#include "lwip/ip_addr.h"
-#include "lwip/ip.h"
-
-/** Global data for both IPv4 and IPv6 */
-struct ip_globals ip_data;
-
-#if LWIP_IPV4 && LWIP_IPV6
-
-const ip_addr_t ip_addr_any_type = IPADDR_ANY_TYPE_INIT;
-
-/**
- * @ingroup ipaddr
- * Convert numeric IP address (both versions) into ASCII representation.
- * returns ptr to static buffer; not reentrant!
- *
- * @param addr ip address in network order to convert
- * @return pointer to a global static (!) buffer that holds the ASCII
- * representation of addr
- */
-char *ipaddr_ntoa(const ip_addr_t *addr)
-{
- if (addr == NULL) {
- return NULL;
- }
- if (IP_IS_V6(addr)) {
- return ip6addr_ntoa(ip_2_ip6(addr));
- } else {
- return ip4addr_ntoa(ip_2_ip4(addr));
- }
-}
-
-/**
- * @ingroup ipaddr
- * Same as ipaddr_ntoa, but reentrant since a user-supplied buffer is used.
- *
- * @param addr ip address in network order to convert
- * @param buf target buffer where the string is stored
- * @param buflen length of buf
- * @return either pointer to buf which now holds the ASCII
- * representation of addr or NULL if buf was too small
- */
-char *ipaddr_ntoa_r(const ip_addr_t *addr, char *buf, int buflen)
-{
- if (addr == NULL) {
- return NULL;
- }
- if (IP_IS_V6(addr)) {
- return ip6addr_ntoa_r(ip_2_ip6(addr), buf, buflen);
- } else {
- return ip4addr_ntoa_r(ip_2_ip4(addr), buf, buflen);
- }
-}
-
-/**
- * @ingroup ipaddr
- * Convert IP address string (both versions) to numeric.
- * The version is auto-detected from the string.
- *
- * @param cp IP address string to convert
- * @param addr conversion result is stored here
- * @return 1 on success, 0 on error
- */
-int
-ipaddr_aton(const char *cp, ip_addr_t *addr)
-{
- if (cp != NULL) {
- const char *c;
- for (c = cp; *c != 0; c++) {
- if (*c == ':') {
- /* contains a colon: IPv6 address */
- if (addr) {
- IP_SET_TYPE_VAL(*addr, IPADDR_TYPE_V6);
- }
- return ip6addr_aton(cp, ip_2_ip6(addr));
- } else if (*c == '.') {
- /* contains a dot: IPv4 address */
- break;
- }
- }
- /* call ip4addr_aton as fallback or if IPv4 was found */
- if (addr) {
- IP_SET_TYPE_VAL(*addr, IPADDR_TYPE_V4);
- }
- return ip4addr_aton(cp, ip_2_ip4(addr));
- }
- return 0;
-}
-
-/**
- * @ingroup lwip_nosys
- * If both IP versions are enabled, this function can dispatch packets to the correct one.
- * Don't call directly, pass to netif_add() and call netif->input().
- */
-err_t
-ip_input(struct pbuf *p, struct netif *inp)
-{
- if (p != NULL) {
- if (IP_HDR_GET_VERSION(p->payload) == 6) {
- return ip6_input(p, inp);
- }
- return ip4_input(p, inp);
- }
- return ERR_VAL;
-}
-
-#endif /* LWIP_IPV4 && LWIP_IPV6 */
-
-#endif /* LWIP_IPV4 || LWIP_IPV6 */
diff --git a/third-party/lwip-2.1.2/core/ipv4/autoip.c b/third-party/lwip-2.1.2/core/ipv4/autoip.c
deleted file mode 100644
index 9f7139bc6686a9495d4c053912fab407f6410758..0000000000000000000000000000000000000000
--- a/third-party/lwip-2.1.2/core/ipv4/autoip.c
+++ /dev/null
@@ -1,527 +0,0 @@
-/**
- * @file
- * AutoIP Automatic LinkLocal IP Configuration
- *
- * This is a AutoIP implementation for the lwIP TCP/IP stack. It aims to conform
- * with RFC 3927.
- *
- * @defgroup autoip AUTOIP
- * @ingroup ip4
- * AUTOIP related functions
- * USAGE:
- *
- * define @ref LWIP_AUTOIP 1 in your lwipopts.h
- * Options:
- * AUTOIP_TMR_INTERVAL msecs,
- * I recommend a value of 100. The value must divide 1000 with a remainder almost 0.
- * Possible values are 1000, 500, 333, 250, 200, 166, 142, 125, 111, 100 ....
- *
- * Without DHCP:
- * - Call autoip_start() after netif_add().
- *
- * With DHCP:
- * - define @ref LWIP_DHCP_AUTOIP_COOP 1 in your lwipopts.h.
- * - Configure your DHCP Client.
- *
- * @see netifapi_autoip
- */
-
-/*
- *
- * Copyright (c) 2007 Dominik Spies
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
- * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
- * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
- * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
- * OF SUCH DAMAGE.
- *
- * Author: Dominik Spies
- */
-
-#include "lwip/opt.h"
-
-#if LWIP_IPV4 && LWIP_AUTOIP /* don't build if not configured for use in lwipopts.h */
-
-#include "lwip/mem.h"
-/* #include "lwip/udp.h" */
-#include "lwip/ip_addr.h"
-#include "lwip/netif.h"
-#include "lwip/autoip.h"
-#include "lwip/etharp.h"
-#include "lwip/prot/autoip.h"
-
-#include
-
-/** Pseudo random macro based on netif informations.
- * You could use "rand()" from the C Library if you define LWIP_AUTOIP_RAND in lwipopts.h */
-#ifndef LWIP_AUTOIP_RAND
-#define LWIP_AUTOIP_RAND(netif) ( (((u32_t)((netif->hwaddr[5]) & 0xff) << 24) | \
- ((u32_t)((netif->hwaddr[3]) & 0xff) << 16) | \
- ((u32_t)((netif->hwaddr[2]) & 0xff) << 8) | \
- ((u32_t)((netif->hwaddr[4]) & 0xff))) + \
- (netif_autoip_data(netif)? netif_autoip_data(netif)->tried_llipaddr : 0))
-#endif /* LWIP_AUTOIP_RAND */
-
-/**
- * Macro that generates the initial IP address to be tried by AUTOIP.
- * If you want to override this, define it to something else in lwipopts.h.
- */
-#ifndef LWIP_AUTOIP_CREATE_SEED_ADDR
-#define LWIP_AUTOIP_CREATE_SEED_ADDR(netif) \
- lwip_htonl(AUTOIP_RANGE_START + ((u32_t)(((u8_t)(netif->hwaddr[4])) | \
- ((u32_t)((u8_t)(netif->hwaddr[5]))) << 8)))
-#endif /* LWIP_AUTOIP_CREATE_SEED_ADDR */
-
-/* static functions */
-static err_t autoip_arp_announce(struct netif *netif);
-static void autoip_start_probing(struct netif *netif);
-
-/**
- * @ingroup autoip
- * Set a statically allocated struct autoip to work with.
- * Using this prevents autoip_start to allocate it using mem_malloc.
- *
- * @param netif the netif for which to set the struct autoip
- * @param autoip (uninitialised) autoip struct allocated by the application
- */
-void
-autoip_set_struct(struct netif *netif, struct autoip *autoip)
-{
- LWIP_ASSERT_CORE_LOCKED();
- LWIP_ASSERT("netif != NULL", netif != NULL);
- LWIP_ASSERT("autoip != NULL", autoip != NULL);
- LWIP_ASSERT("netif already has a struct autoip set",
- netif_autoip_data(netif) == NULL);
-
- /* clear data structure */
- memset(autoip, 0, sizeof(struct autoip));
- /* autoip->state = AUTOIP_STATE_OFF; */
- netif_set_client_data(netif, LWIP_NETIF_CLIENT_DATA_INDEX_AUTOIP, autoip);
-}
-
-/** Restart AutoIP client and check the next address (conflict detected)
- *
- * @param netif The netif under AutoIP control
- */
-static void
-autoip_restart(struct netif *netif)
-{
- struct autoip *autoip = netif_autoip_data(netif);
- autoip->tried_llipaddr++;
- autoip_start(netif);
-}
-
-/**
- * Handle a IP address conflict after an ARP conflict detection
- */
-static void
-autoip_handle_arp_conflict(struct netif *netif)
-{
- struct autoip *autoip = netif_autoip_data(netif);
-
- /* RFC3927, 2.5 "Conflict Detection and Defense" allows two options where
- a) means retreat on the first conflict and
- b) allows to keep an already configured address when having only one
- conflict in 10 seconds
- We use option b) since it helps to improve the chance that one of the two
- conflicting hosts may be able to retain its address. */
-
- if (autoip->lastconflict > 0) {
- /* retreat, there was a conflicting ARP in the last DEFEND_INTERVAL seconds */
- LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE,
- ("autoip_handle_arp_conflict(): we are defending, but in DEFEND_INTERVAL, retreating\n"));
-
- /* Active TCP sessions are aborted when removing the ip addresss */
- autoip_restart(netif);
- } else {
- LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE,
- ("autoip_handle_arp_conflict(): we are defend, send ARP Announce\n"));
- autoip_arp_announce(netif);
- autoip->lastconflict = DEFEND_INTERVAL * AUTOIP_TICKS_PER_SECOND;
- }
-}
-
-/**
- * Create an IP-Address out of range 169.254.1.0 to 169.254.254.255
- *
- * @param netif network interface on which create the IP-Address
- * @param ipaddr ip address to initialize
- */
-static void
-autoip_create_addr(struct netif *netif, ip4_addr_t *ipaddr)
-{
- struct autoip *autoip = netif_autoip_data(netif);
-
- /* Here we create an IP-Address out of range 169.254.1.0 to 169.254.254.255
- * compliant to RFC 3927 Section 2.1
- * We have 254 * 256 possibilities */
-
- u32_t addr = lwip_ntohl(LWIP_AUTOIP_CREATE_SEED_ADDR(netif));
- addr += autoip->tried_llipaddr;
- addr = AUTOIP_NET | (addr & 0xffff);
- /* Now, 169.254.0.0 <= addr <= 169.254.255.255 */
-
- if (addr < AUTOIP_RANGE_START) {
- addr += AUTOIP_RANGE_END - AUTOIP_RANGE_START + 1;
- }
- if (addr > AUTOIP_RANGE_END) {
- addr -= AUTOIP_RANGE_END - AUTOIP_RANGE_START + 1;
- }
- LWIP_ASSERT("AUTOIP address not in range", (addr >= AUTOIP_RANGE_START) &&
- (addr <= AUTOIP_RANGE_END));
- ip4_addr_set_u32(ipaddr, lwip_htonl(addr));
-
- LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE,
- ("autoip_create_addr(): tried_llipaddr=%"U16_F", %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n",
- (u16_t)(autoip->tried_llipaddr), ip4_addr1_16(ipaddr), ip4_addr2_16(ipaddr),
- ip4_addr3_16(ipaddr), ip4_addr4_16(ipaddr)));
-}
-
-/**
- * Sends an ARP probe from a network interface
- *
- * @param netif network interface used to send the probe
- */
-static err_t
-autoip_arp_probe(struct netif *netif)
-{
- struct autoip *autoip = netif_autoip_data(netif);
- /* this works because netif->ip_addr is ANY */
- return etharp_request(netif, &autoip->llipaddr);
-}
-
-/**
- * Sends an ARP announce from a network interface
- *
- * @param netif network interface used to send the announce
- */
-static err_t
-autoip_arp_announce(struct netif *netif)
-{
- return etharp_gratuitous(netif);
-}
-
-/**
- * Configure interface for use with current LL IP-Address
- *
- * @param netif network interface to configure with current LL IP-Address
- */
-static err_t
-autoip_bind(struct netif *netif)
-{
- struct autoip *autoip = netif_autoip_data(netif);
- ip4_addr_t sn_mask, gw_addr;
-
- LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE,
- ("autoip_bind(netif=%p) %c%c%"U16_F" %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n",
- (void *)netif, netif->name[0], netif->name[1], (u16_t)netif->num,
- ip4_addr1_16(&autoip->llipaddr), ip4_addr2_16(&autoip->llipaddr),
- ip4_addr3_16(&autoip->llipaddr), ip4_addr4_16(&autoip->llipaddr)));
-
- IP4_ADDR(&sn_mask, 255, 255, 0, 0);
- IP4_ADDR(&gw_addr, 0, 0, 0, 0);
-
- netif_set_addr(netif, &autoip->llipaddr, &sn_mask, &gw_addr);
- /* interface is used by routing now that an address is set */
-
- return ERR_OK;
-}
-
-/**
- * @ingroup autoip
- * Start AutoIP client
- *
- * @param netif network interface on which start the AutoIP client
- */
-err_t
-autoip_start(struct netif *netif)
-{
- struct autoip *autoip = netif_autoip_data(netif);
- err_t result = ERR_OK;
-
- LWIP_ASSERT_CORE_LOCKED();
- LWIP_ERROR("netif is not up, old style port?", netif_is_up(netif), return ERR_ARG;);
-
- /* Set IP-Address, Netmask and Gateway to 0 to make sure that
- * ARP Packets are formed correctly
- */
- netif_set_addr(netif, IP4_ADDR_ANY4, IP4_ADDR_ANY4, IP4_ADDR_ANY4);
-
- LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE,
- ("autoip_start(netif=%p) %c%c%"U16_F"\n", (void *)netif, netif->name[0],
- netif->name[1], (u16_t)netif->num));
- if (autoip == NULL) {
- /* no AutoIP client attached yet? */
- LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE,
- ("autoip_start(): starting new AUTOIP client\n"));
- autoip = (struct autoip *)mem_calloc(1, sizeof(struct autoip));
- if (autoip == NULL) {
- LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE,
- ("autoip_start(): could not allocate autoip\n"));
- return ERR_MEM;
- }
- /* store this AutoIP client in the netif */
- netif_set_client_data(netif, LWIP_NETIF_CLIENT_DATA_INDEX_AUTOIP, autoip);
- LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE, ("autoip_start(): allocated autoip"));
- } else {
- autoip->state = AUTOIP_STATE_OFF;
- autoip->ttw = 0;
- autoip->sent_num = 0;
- ip4_addr_set_zero(&autoip->llipaddr);
- autoip->lastconflict = 0;
- }
-
- autoip_create_addr(netif, &(autoip->llipaddr));
- autoip_start_probing(netif);
-
- return result;
-}
-
-static void
-autoip_start_probing(struct netif *netif)
-{
- struct autoip *autoip = netif_autoip_data(netif);
-
- autoip->state = AUTOIP_STATE_PROBING;
- autoip->sent_num = 0;
- LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE,
- ("autoip_start_probing(): changing state to PROBING: %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n",
- ip4_addr1_16(&autoip->llipaddr), ip4_addr2_16(&autoip->llipaddr),
- ip4_addr3_16(&autoip->llipaddr), ip4_addr4_16(&autoip->llipaddr)));
-
- /* time to wait to first probe, this is randomly
- * chosen out of 0 to PROBE_WAIT seconds.
- * compliant to RFC 3927 Section 2.2.1
- */
- autoip->ttw = (u16_t)(LWIP_AUTOIP_RAND(netif) % (PROBE_WAIT * AUTOIP_TICKS_PER_SECOND));
-
- /*
- * if we tried more then MAX_CONFLICTS we must limit our rate for
- * acquiring and probing address
- * compliant to RFC 3927 Section 2.2.1
- */
- if (autoip->tried_llipaddr > MAX_CONFLICTS) {
- autoip->ttw = RATE_LIMIT_INTERVAL * AUTOIP_TICKS_PER_SECOND;
- }
-}
-
-/**
- * Handle a possible change in the network configuration.
- *
- * If there is an AutoIP address configured, take the interface down
- * and begin probing with the same address.
- */
-void
-autoip_network_changed(struct netif *netif)
-{
- struct autoip *autoip = netif_autoip_data(netif);
-
- if (autoip && (autoip->state != AUTOIP_STATE_OFF)) {
- autoip_start_probing(netif);
- }
-}
-
-/**
- * @ingroup autoip
- * Stop AutoIP client
- *
- * @param netif network interface on which stop the AutoIP client
- */
-err_t
-autoip_stop(struct netif *netif)
-{
- struct autoip *autoip = netif_autoip_data(netif);
-
- LWIP_ASSERT_CORE_LOCKED();
- if (autoip != NULL) {
- autoip->state = AUTOIP_STATE_OFF;
- if (ip4_addr_islinklocal(netif_ip4_addr(netif))) {
- netif_set_addr(netif, IP4_ADDR_ANY4, IP4_ADDR_ANY4, IP4_ADDR_ANY4);
- }
- }
- return ERR_OK;
-}
-
-/**
- * Has to be called in loop every AUTOIP_TMR_INTERVAL milliseconds
- */
-void
-autoip_tmr(void)
-{
- struct netif *netif;
- /* loop through netif's */
- NETIF_FOREACH(netif) {
- struct autoip *autoip = netif_autoip_data(netif);
- /* only act on AutoIP configured interfaces */
- if (autoip != NULL) {
- if (autoip->lastconflict > 0) {
- autoip->lastconflict--;
- }
-
- LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE,
- ("autoip_tmr() AutoIP-State: %"U16_F", ttw=%"U16_F"\n",
- (u16_t)(autoip->state), autoip->ttw));
-
- if (autoip->ttw > 0) {
- autoip->ttw--;
- }
-
- switch (autoip->state) {
- case AUTOIP_STATE_PROBING:
- if (autoip->ttw == 0) {
- if (autoip->sent_num >= PROBE_NUM) {
- /* Switch to ANNOUNCING: now we can bind to an IP address and use it */
- autoip->state = AUTOIP_STATE_ANNOUNCING;
- autoip_bind(netif);
- /* autoip_bind() calls netif_set_addr(): this triggers a gratuitous ARP
- which counts as an announcement */
- autoip->sent_num = 1;
- autoip->ttw = ANNOUNCE_WAIT * AUTOIP_TICKS_PER_SECOND;
- LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE,
- ("autoip_tmr(): changing state to ANNOUNCING: %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n",
- ip4_addr1_16(&autoip->llipaddr), ip4_addr2_16(&autoip->llipaddr),
- ip4_addr3_16(&autoip->llipaddr), ip4_addr4_16(&autoip->llipaddr)));
- } else {
- autoip_arp_probe(netif);
- LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE, ("autoip_tmr() PROBING Sent Probe\n"));
- autoip->sent_num++;
- if (autoip->sent_num == PROBE_NUM) {
- /* calculate time to wait to for announce */
- autoip->ttw = ANNOUNCE_WAIT * AUTOIP_TICKS_PER_SECOND;
- } else {
- /* calculate time to wait to next probe */
- autoip->ttw = (u16_t)((LWIP_AUTOIP_RAND(netif) %
- ((PROBE_MAX - PROBE_MIN) * AUTOIP_TICKS_PER_SECOND) ) +
- PROBE_MIN * AUTOIP_TICKS_PER_SECOND);
- }
- }
- }
- break;
-
- case AUTOIP_STATE_ANNOUNCING:
- if (autoip->ttw == 0) {
- autoip_arp_announce(netif);
- LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE, ("autoip_tmr() ANNOUNCING Sent Announce\n"));
- autoip->ttw = ANNOUNCE_INTERVAL * AUTOIP_TICKS_PER_SECOND;
- autoip->sent_num++;
-
- if (autoip->sent_num >= ANNOUNCE_NUM) {
- autoip->state = AUTOIP_STATE_BOUND;
- autoip->sent_num = 0;
- autoip->ttw = 0;
- LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE,
- ("autoip_tmr(): changing state to BOUND: %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n",
- ip4_addr1_16(&autoip->llipaddr), ip4_addr2_16(&autoip->llipaddr),
- ip4_addr3_16(&autoip->llipaddr), ip4_addr4_16(&autoip->llipaddr)));
- }
- }
- break;
-
- default:
- /* nothing to do in other states */
- break;
- }
- }
- }
-}
-
-/**
- * Handles every incoming ARP Packet, called by etharp_input().
- *
- * @param netif network interface to use for autoip processing
- * @param hdr Incoming ARP packet
- */
-void
-autoip_arp_reply(struct netif *netif, struct etharp_hdr *hdr)
-{
- struct autoip *autoip = netif_autoip_data(netif);
-
- LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE, ("autoip_arp_reply()\n"));
- if ((autoip != NULL) && (autoip->state != AUTOIP_STATE_OFF)) {
- /* when ip.src == llipaddr && hw.src != netif->hwaddr
- *
- * when probing ip.dst == llipaddr && hw.src != netif->hwaddr
- * we have a conflict and must solve it
- */
- ip4_addr_t sipaddr, dipaddr;
- struct eth_addr netifaddr;
- SMEMCPY(netifaddr.addr, netif->hwaddr, ETH_HWADDR_LEN);
-
- /* Copy struct ip4_addr_wordaligned to aligned ip4_addr, to support compilers without
- * structure packing (not using structure copy which breaks strict-aliasing rules).
- */
- IPADDR_WORDALIGNED_COPY_TO_IP4_ADDR_T(&sipaddr, &hdr->sipaddr);
- IPADDR_WORDALIGNED_COPY_TO_IP4_ADDR_T(&dipaddr, &hdr->dipaddr);
-
- if (autoip->state == AUTOIP_STATE_PROBING) {
- /* RFC 3927 Section 2.2.1:
- * from beginning to after ANNOUNCE_WAIT
- * seconds we have a conflict if
- * ip.src == llipaddr OR
- * ip.dst == llipaddr && hw.src != own hwaddr
- */
- if ((ip4_addr_cmp(&sipaddr, &autoip->llipaddr)) ||
- (ip4_addr_isany_val(sipaddr) &&
- ip4_addr_cmp(&dipaddr, &autoip->llipaddr) &&
- !eth_addr_cmp(&netifaddr, &hdr->shwaddr))) {
- LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE | LWIP_DBG_LEVEL_WARNING,
- ("autoip_arp_reply(): Probe Conflict detected\n"));
- autoip_restart(netif);
- }
- } else {
- /* RFC 3927 Section 2.5:
- * in any state we have a conflict if
- * ip.src == llipaddr && hw.src != own hwaddr
- */
- if (ip4_addr_cmp(&sipaddr, &autoip->llipaddr) &&
- !eth_addr_cmp(&netifaddr, &hdr->shwaddr)) {
- LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE | LWIP_DBG_LEVEL_WARNING,
- ("autoip_arp_reply(): Conflicting ARP-Packet detected\n"));
- autoip_handle_arp_conflict(netif);
- }
- }
- }
-}
-
-/** check if AutoIP supplied netif->ip_addr
- *
- * @param netif the netif to check
- * @return 1 if AutoIP supplied netif->ip_addr (state BOUND or ANNOUNCING),
- * 0 otherwise
- */
-u8_t
-autoip_supplied_address(const struct netif *netif)
-{
- if ((netif != NULL) && (netif_autoip_data(netif) != NULL)) {
- struct autoip *autoip = netif_autoip_data(netif);
- return (autoip->state == AUTOIP_STATE_BOUND) || (autoip->state == AUTOIP_STATE_ANNOUNCING);
- }
- return 0;
-}
-
-u8_t
-autoip_accept_packet(struct netif *netif, const ip4_addr_t *addr)
-{
- struct autoip *autoip = netif_autoip_data(netif);
- return (autoip != NULL) && ip4_addr_cmp(addr, &(autoip->llipaddr));
-}
-
-#endif /* LWIP_IPV4 && LWIP_AUTOIP */
diff --git a/third-party/lwip-2.1.2/core/ipv4/dhcp.c b/third-party/lwip-2.1.2/core/ipv4/dhcp.c
deleted file mode 100644
index 534574feac865a2ed3197e454e9ceb2b9041156e..0000000000000000000000000000000000000000
--- a/third-party/lwip-2.1.2/core/ipv4/dhcp.c
+++ /dev/null
@@ -1,1990 +0,0 @@
-/**
- * @file
- * Dynamic Host Configuration Protocol client
- *
- * @defgroup dhcp4 DHCPv4
- * @ingroup ip4
- * DHCP (IPv4) related functions
- * This is a DHCP client for the lwIP TCP/IP stack. It aims to conform
- * with RFC 2131 and RFC 2132.
- *
- * @todo:
- * - Support for interfaces other than Ethernet (SLIP, PPP, ...)
- *
- * Options:
- * @ref DHCP_COARSE_TIMER_SECS (recommended 60 which is a minute)
- * @ref DHCP_FINE_TIMER_MSECS (recommended 500 which equals TCP coarse timer)
- *
- * dhcp_start() starts a DHCP client instance which
- * configures the interface by obtaining an IP address lease and maintaining it.
- *
- * Use dhcp_release() to end the lease and use dhcp_stop()
- * to remove the DHCP client.
- *
- * @see LWIP_HOOK_DHCP_APPEND_OPTIONS
- * @see LWIP_HOOK_DHCP_PARSE_OPTION
- *
- * @see netifapi_dhcp4
- */
-
-/*
- * Copyright (c) 2001-2004 Leon Woestenberg
- * Copyright (c) 2001-2004 Axon Digital Design B.V., The Netherlands.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
- * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
- * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
- * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
- * OF SUCH DAMAGE.
- *
- * This file is part of the lwIP TCP/IP stack.
- * The Swedish Institute of Computer Science and Adam Dunkels
- * are specifically granted permission to redistribute this
- * source code.
- *
- * Author: Leon Woestenberg
- *
- */
-
-#include "lwip/opt.h"
-
-#if LWIP_IPV4 && LWIP_DHCP /* don't build if not configured for use in lwipopts.h */
-
-#include "lwip/stats.h"
-#include "lwip/mem.h"
-#include "lwip/udp.h"
-#include "lwip/ip_addr.h"
-#include "lwip/netif.h"
-#include "lwip/def.h"
-#include "lwip/dhcp.h"
-#include "lwip/autoip.h"
-#include "lwip/dns.h"
-#include "lwip/etharp.h"
-#include "lwip/prot/dhcp.h"
-#include "lwip/prot/iana.h"
-
-#include
-
-#ifdef LWIP_HOOK_FILENAME
-#include LWIP_HOOK_FILENAME
-#endif
-#ifndef LWIP_HOOK_DHCP_APPEND_OPTIONS
-#define LWIP_HOOK_DHCP_APPEND_OPTIONS(netif, dhcp, state, msg, msg_type, options_len_ptr)
-#endif
-#ifndef LWIP_HOOK_DHCP_PARSE_OPTION
-#define LWIP_HOOK_DHCP_PARSE_OPTION(netif, dhcp, state, msg, msg_type, option, len, pbuf, offset) do { LWIP_UNUSED_ARG(msg); } while(0)
-#endif
-
-/** DHCP_CREATE_RAND_XID: if this is set to 1, the xid is created using
- * LWIP_RAND() (this overrides DHCP_GLOBAL_XID)
- */
-#ifndef DHCP_CREATE_RAND_XID
-#define DHCP_CREATE_RAND_XID 1
-#endif
-
-/** Default for DHCP_GLOBAL_XID is 0xABCD0000
- * This can be changed by defining DHCP_GLOBAL_XID and DHCP_GLOBAL_XID_HEADER, e.g.
- * \#define DHCP_GLOBAL_XID_HEADER "stdlib.h"
- * \#define DHCP_GLOBAL_XID rand()
- */
-#ifdef DHCP_GLOBAL_XID_HEADER
-#include DHCP_GLOBAL_XID_HEADER /* include optional starting XID generation prototypes */
-#endif
-
-/** DHCP_OPTION_MAX_MSG_SIZE is set to the MTU
- * MTU is checked to be big enough in dhcp_start */
-#define DHCP_MAX_MSG_LEN(netif) (netif->mtu)
-#define DHCP_MAX_MSG_LEN_MIN_REQUIRED 576
-/** Minimum length for reply before packet is parsed */
-#define DHCP_MIN_REPLY_LEN 44
-
-#define REBOOT_TRIES 2
-
-#if LWIP_DNS && LWIP_DHCP_MAX_DNS_SERVERS
-#if DNS_MAX_SERVERS > LWIP_DHCP_MAX_DNS_SERVERS
-#define LWIP_DHCP_PROVIDE_DNS_SERVERS LWIP_DHCP_MAX_DNS_SERVERS
-#else
-#define LWIP_DHCP_PROVIDE_DNS_SERVERS DNS_MAX_SERVERS
-#endif
-#else
-#define LWIP_DHCP_PROVIDE_DNS_SERVERS 0
-#endif
-
-/** Option handling: options are parsed in dhcp_parse_reply
- * and saved in an array where other functions can load them from.
- * This might be moved into the struct dhcp (not necessarily since
- * lwIP is single-threaded and the array is only used while in recv
- * callback). */
-enum dhcp_option_idx {
- DHCP_OPTION_IDX_OVERLOAD = 0,
- DHCP_OPTION_IDX_MSG_TYPE,
- DHCP_OPTION_IDX_SERVER_ID,
- DHCP_OPTION_IDX_LEASE_TIME,
- DHCP_OPTION_IDX_T1,
- DHCP_OPTION_IDX_T2,
- DHCP_OPTION_IDX_SUBNET_MASK,
- DHCP_OPTION_IDX_ROUTER,
-#if LWIP_DHCP_PROVIDE_DNS_SERVERS
- DHCP_OPTION_IDX_DNS_SERVER,
- DHCP_OPTION_IDX_DNS_SERVER_LAST = DHCP_OPTION_IDX_DNS_SERVER + LWIP_DHCP_PROVIDE_DNS_SERVERS - 1,
-#endif /* LWIP_DHCP_PROVIDE_DNS_SERVERS */
-#if LWIP_DHCP_GET_NTP_SRV
- DHCP_OPTION_IDX_NTP_SERVER,
- DHCP_OPTION_IDX_NTP_SERVER_LAST = DHCP_OPTION_IDX_NTP_SERVER + LWIP_DHCP_MAX_NTP_SERVERS - 1,
-#endif /* LWIP_DHCP_GET_NTP_SRV */
- DHCP_OPTION_IDX_MAX
-};
-
-/** Holds the decoded option values, only valid while in dhcp_recv.
- @todo: move this into struct dhcp? */
-u32_t dhcp_rx_options_val[DHCP_OPTION_IDX_MAX];
-/** Holds a flag which option was received and is contained in dhcp_rx_options_val,
- only valid while in dhcp_recv.
- @todo: move this into struct dhcp? */
-u8_t dhcp_rx_options_given[DHCP_OPTION_IDX_MAX];
-
-static u8_t dhcp_discover_request_options[] = {
- DHCP_OPTION_SUBNET_MASK,
- DHCP_OPTION_ROUTER,
- DHCP_OPTION_BROADCAST
-#if LWIP_DHCP_PROVIDE_DNS_SERVERS
- , DHCP_OPTION_DNS_SERVER
-#endif /* LWIP_DHCP_PROVIDE_DNS_SERVERS */
-#if LWIP_DHCP_GET_NTP_SRV
- , DHCP_OPTION_NTP
-#endif /* LWIP_DHCP_GET_NTP_SRV */
-};
-
-#ifdef DHCP_GLOBAL_XID
-static u32_t xid;
-static u8_t xid_initialised;
-#endif /* DHCP_GLOBAL_XID */
-
-#define dhcp_option_given(dhcp, idx) (dhcp_rx_options_given[idx] != 0)
-#define dhcp_got_option(dhcp, idx) (dhcp_rx_options_given[idx] = 1)
-#define dhcp_clear_option(dhcp, idx) (dhcp_rx_options_given[idx] = 0)
-#define dhcp_clear_all_options(dhcp) (memset(dhcp_rx_options_given, 0, sizeof(dhcp_rx_options_given)))
-#define dhcp_get_option_value(dhcp, idx) (dhcp_rx_options_val[idx])
-#define dhcp_set_option_value(dhcp, idx, val) (dhcp_rx_options_val[idx] = (val))
-
-static struct udp_pcb *dhcp_pcb;
-static u8_t dhcp_pcb_refcount;
-
-/* DHCP client state machine functions */
-static err_t dhcp_discover(struct netif *netif);
-static err_t dhcp_select(struct netif *netif);
-static void dhcp_bind(struct netif *netif);
-#if DHCP_DOES_ARP_CHECK
-static err_t dhcp_decline(struct netif *netif);
-#endif /* DHCP_DOES_ARP_CHECK */
-static err_t dhcp_rebind(struct netif *netif);
-static err_t dhcp_reboot(struct netif *netif);
-static void dhcp_set_state(struct dhcp *dhcp, u8_t new_state);
-
-/* receive, unfold, parse and free incoming messages */
-static void dhcp_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, const ip_addr_t *addr, u16_t port);
-
-/* set the DHCP timers */
-static void dhcp_timeout(struct netif *netif);
-static void dhcp_t1_timeout(struct netif *netif);
-static void dhcp_t2_timeout(struct netif *netif);
-
-/* build outgoing messages */
-/* create a DHCP message, fill in common headers */
-static struct pbuf *dhcp_create_msg(struct netif *netif, struct dhcp *dhcp, u8_t message_type, u16_t *options_out_len);
-/* add a DHCP option (type, then length in bytes) */
-static u16_t dhcp_option(u16_t options_out_len, u8_t *options, u8_t option_type, u8_t option_len);
-/* add option values */
-static u16_t dhcp_option_byte(u16_t options_out_len, u8_t *options, u8_t value);
-static u16_t dhcp_option_short(u16_t options_out_len, u8_t *options, u16_t value);
-static u16_t dhcp_option_long(u16_t options_out_len, u8_t *options, u32_t value);
-#if LWIP_NETIF_HOSTNAME
-static u16_t dhcp_option_hostname(u16_t options_out_len, u8_t *options, struct netif *netif);
-#endif /* LWIP_NETIF_HOSTNAME */
-/* always add the DHCP options trailer to end and pad */
-static void dhcp_option_trailer(u16_t options_out_len, u8_t *options, struct pbuf *p_out);
-
-/** Ensure DHCP PCB is allocated and bound */
-static err_t
-dhcp_inc_pcb_refcount(void)
-{
- if (dhcp_pcb_refcount == 0) {
- LWIP_ASSERT("dhcp_inc_pcb_refcount(): memory leak", dhcp_pcb == NULL);
-
- /* allocate UDP PCB */
- dhcp_pcb = udp_new();
-
- if (dhcp_pcb == NULL) {
- return ERR_MEM;
- }
-
- ip_set_option(dhcp_pcb, SOF_BROADCAST);
-
- /* set up local and remote port for the pcb -> listen on all interfaces on all src/dest IPs */
- udp_bind(dhcp_pcb, IP4_ADDR_ANY, LWIP_IANA_PORT_DHCP_CLIENT);
- udp_connect(dhcp_pcb, IP4_ADDR_ANY, LWIP_IANA_PORT_DHCP_SERVER);
- udp_recv(dhcp_pcb, dhcp_recv, NULL);
- }
-
- dhcp_pcb_refcount++;
-
- return ERR_OK;
-}
-
-/** Free DHCP PCB if the last netif stops using it */
-static void
-dhcp_dec_pcb_refcount(void)
-{
- LWIP_ASSERT("dhcp_pcb_refcount(): refcount error", (dhcp_pcb_refcount > 0));
- dhcp_pcb_refcount--;
-
- if (dhcp_pcb_refcount == 0) {
- udp_remove(dhcp_pcb);
- dhcp_pcb = NULL;
- }
-}
-
-/**
- * Back-off the DHCP client (because of a received NAK response).
- *
- * Back-off the DHCP client because of a received NAK. Receiving a
- * NAK means the client asked for something non-sensible, for
- * example when it tries to renew a lease obtained on another network.
- *
- * We clear any existing set IP address and restart DHCP negotiation
- * afresh (as per RFC2131 3.2.3).
- *
- * @param netif the netif under DHCP control
- */
-static void
-dhcp_handle_nak(struct netif *netif)
-{
- struct dhcp *dhcp = netif_dhcp_data(netif);
-
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_handle_nak(netif=%p) %c%c%"U16_F"\n",
- (void *)netif, netif->name[0], netif->name[1], (u16_t)netif->num));
- /* Change to a defined state - set this before assigning the address
- to ensure the callback can use dhcp_supplied_address() */
- dhcp_set_state(dhcp, DHCP_STATE_BACKING_OFF);
- /* remove IP address from interface (must no longer be used, as per RFC2131) */
- netif_set_addr(netif, IP4_ADDR_ANY4, IP4_ADDR_ANY4, IP4_ADDR_ANY4);
- /* We can immediately restart discovery */
- dhcp_discover(netif);
-}
-
-#if DHCP_DOES_ARP_CHECK
-/**
- * Checks if the offered IP address is already in use.
- *
- * It does so by sending an ARP request for the offered address and
- * entering CHECKING state. If no ARP reply is received within a small
- * interval, the address is assumed to be free for use by us.
- *
- * @param netif the netif under DHCP control
- */
-static void
-dhcp_check(struct netif *netif)
-{
- struct dhcp *dhcp = netif_dhcp_data(netif);
- err_t result;
- u16_t msecs;
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_check(netif=%p) %c%c\n", (void *)netif, (s16_t)netif->name[0],
- (s16_t)netif->name[1]));
- dhcp_set_state(dhcp, DHCP_STATE_CHECKING);
- /* create an ARP query for the offered IP address, expecting that no host
- responds, as the IP address should not be in use. */
- result = etharp_query(netif, &dhcp->offered_ip_addr, NULL);
- if (result != ERR_OK) {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("dhcp_check: could not perform ARP query\n"));
- }
- if (dhcp->tries < 255) {
- dhcp->tries++;
- }
- msecs = 500;
- dhcp->request_timeout = (u16_t)((msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS);
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_check(): set request timeout %"U16_F" msecs\n", msecs));
-}
-#endif /* DHCP_DOES_ARP_CHECK */
-
-/**
- * Remember the configuration offered by a DHCP server.
- *
- * @param netif the netif under DHCP control
- */
-static void
-dhcp_handle_offer(struct netif *netif, struct dhcp_msg *msg_in)
-{
- struct dhcp *dhcp = netif_dhcp_data(netif);
-
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_handle_offer(netif=%p) %c%c%"U16_F"\n",
- (void *)netif, netif->name[0], netif->name[1], (u16_t)netif->num));
- /* obtain the server address */
- if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_SERVER_ID)) {
- dhcp->request_timeout = 0; /* stop timer */
-
- ip_addr_set_ip4_u32(&dhcp->server_ip_addr, lwip_htonl(dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_SERVER_ID)));
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_handle_offer(): server 0x%08"X32_F"\n",
- ip4_addr_get_u32(ip_2_ip4(&dhcp->server_ip_addr))));
- /* remember offered address */
- ip4_addr_copy(dhcp->offered_ip_addr, msg_in->yiaddr);
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_handle_offer(): offer for 0x%08"X32_F"\n",
- ip4_addr_get_u32(&dhcp->offered_ip_addr)));
-
- dhcp_select(netif);
- } else {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS,
- ("dhcp_handle_offer(netif=%p) did not get server ID!\n", (void *)netif));
- }
-}
-
-/**
- * Select a DHCP server offer out of all offers.
- *
- * Simply select the first offer received.
- *
- * @param netif the netif under DHCP control
- * @return lwIP specific error (see error.h)
- */
-static err_t
-dhcp_select(struct netif *netif)
-{
- struct dhcp *dhcp;
- err_t result;
- u16_t msecs;
- u8_t i;
- struct pbuf *p_out;
- u16_t options_out_len;
-
- LWIP_ERROR("dhcp_select: netif != NULL", (netif != NULL), return ERR_ARG;);
- dhcp = netif_dhcp_data(netif);
- LWIP_ERROR("dhcp_select: dhcp != NULL", (dhcp != NULL), return ERR_VAL;);
-
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_select(netif=%p) %c%c%"U16_F"\n", (void *)netif, netif->name[0], netif->name[1], (u16_t)netif->num));
- dhcp_set_state(dhcp, DHCP_STATE_REQUESTING);
-
- /* create and initialize the DHCP message header */
- p_out = dhcp_create_msg(netif, dhcp, DHCP_REQUEST, &options_out_len);
- if (p_out != NULL) {
- struct dhcp_msg *msg_out = (struct dhcp_msg *)p_out->payload;
- options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN);
- options_out_len = dhcp_option_short(options_out_len, msg_out->options, DHCP_MAX_MSG_LEN(netif));
-
- /* MUST request the offered IP address */
- options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_REQUESTED_IP, 4);
- options_out_len = dhcp_option_long(options_out_len, msg_out->options, lwip_ntohl(ip4_addr_get_u32(&dhcp->offered_ip_addr)));
-
- options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_SERVER_ID, 4);
- options_out_len = dhcp_option_long(options_out_len, msg_out->options, lwip_ntohl(ip4_addr_get_u32(ip_2_ip4(&dhcp->server_ip_addr))));
-
- options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_PARAMETER_REQUEST_LIST, LWIP_ARRAYSIZE(dhcp_discover_request_options));
- for (i = 0; i < LWIP_ARRAYSIZE(dhcp_discover_request_options); i++) {
- options_out_len = dhcp_option_byte(options_out_len, msg_out->options, dhcp_discover_request_options[i]);
- }
-
-#if LWIP_NETIF_HOSTNAME
- options_out_len = dhcp_option_hostname(options_out_len, msg_out->options, netif);
-#endif /* LWIP_NETIF_HOSTNAME */
-
- LWIP_HOOK_DHCP_APPEND_OPTIONS(netif, dhcp, DHCP_STATE_REQUESTING, msg_out, DHCP_REQUEST, &options_out_len);
- dhcp_option_trailer(options_out_len, msg_out->options, p_out);
-
- /* send broadcast to any DHCP server */
- result = udp_sendto_if_src(dhcp_pcb, p_out, IP_ADDR_BROADCAST, LWIP_IANA_PORT_DHCP_SERVER, netif, IP4_ADDR_ANY);
- pbuf_free(p_out);
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_select: REQUESTING\n"));
- } else {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("dhcp_select: could not allocate DHCP request\n"));
- result = ERR_MEM;
- }
- if (dhcp->tries < 255) {
- dhcp->tries++;
- }
- msecs = (u16_t)((dhcp->tries < 6 ? 1 << dhcp->tries : 60) * 1000);
- dhcp->request_timeout = (u16_t)((msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS);
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_select(): set request timeout %"U16_F" msecs\n", msecs));
- return result;
-}
-
-/**
- * The DHCP timer that checks for lease renewal/rebind timeouts.
- * Must be called once a minute (see @ref DHCP_COARSE_TIMER_SECS).
- */
-void
-dhcp_coarse_tmr(void)
-{
- struct netif *netif;
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_coarse_tmr()\n"));
- /* iterate through all network interfaces */
- NETIF_FOREACH(netif) {
- /* only act on DHCP configured interfaces */
- struct dhcp *dhcp = netif_dhcp_data(netif);
- if ((dhcp != NULL) && (dhcp->state != DHCP_STATE_OFF)) {
- /* compare lease time to expire timeout */
- if (dhcp->t0_timeout && (++dhcp->lease_used == dhcp->t0_timeout)) {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_coarse_tmr(): t0 timeout\n"));
- /* this clients' lease time has expired */
- dhcp_release_and_stop(netif);
- dhcp_start(netif);
- /* timer is active (non zero), and triggers (zeroes) now? */
- } else if (dhcp->t2_rebind_time && (dhcp->t2_rebind_time-- == 1)) {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_coarse_tmr(): t2 timeout\n"));
- /* this clients' rebind timeout triggered */
- dhcp_t2_timeout(netif);
- /* timer is active (non zero), and triggers (zeroes) now */
- } else if (dhcp->t1_renew_time && (dhcp->t1_renew_time-- == 1)) {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_coarse_tmr(): t1 timeout\n"));
- /* this clients' renewal timeout triggered */
- dhcp_t1_timeout(netif);
- }
- }
- }
-}
-
-/**
- * DHCP transaction timeout handling (this function must be called every 500ms,
- * see @ref DHCP_FINE_TIMER_MSECS).
- *
- * A DHCP server is expected to respond within a short period of time.
- * This timer checks whether an outstanding DHCP request is timed out.
- */
-void
-dhcp_fine_tmr(void)
-{
- struct netif *netif;
- /* loop through netif's */
- NETIF_FOREACH(netif) {
- struct dhcp *dhcp = netif_dhcp_data(netif);
- /* only act on DHCP configured interfaces */
- if (dhcp != NULL) {
- /* timer is active (non zero), and is about to trigger now */
- if (dhcp->request_timeout > 1) {
- dhcp->request_timeout--;
- } else if (dhcp->request_timeout == 1) {
- dhcp->request_timeout--;
- /* { dhcp->request_timeout == 0 } */
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_fine_tmr(): request timeout\n"));
- /* this client's request timeout triggered */
- dhcp_timeout(netif);
- }
- }
- }
-}
-
-/**
- * A DHCP negotiation transaction, or ARP request, has timed out.
- *
- * The timer that was started with the DHCP or ARP request has
- * timed out, indicating no response was received in time.
- *
- * @param netif the netif under DHCP control
- */
-static void
-dhcp_timeout(struct netif *netif)
-{
- struct dhcp *dhcp = netif_dhcp_data(netif);
-
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_timeout()\n"));
- /* back-off period has passed, or server selection timed out */
- if ((dhcp->state == DHCP_STATE_BACKING_OFF) || (dhcp->state == DHCP_STATE_SELECTING)) {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_timeout(): restarting discovery\n"));
- dhcp_discover(netif);
- /* receiving the requested lease timed out */
- } else if (dhcp->state == DHCP_STATE_REQUESTING) {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_timeout(): REQUESTING, DHCP request timed out\n"));
- if (dhcp->tries <= 5) {
- dhcp_select(netif);
- } else {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_timeout(): REQUESTING, releasing, restarting\n"));
- dhcp_release_and_stop(netif);
- dhcp_start(netif);
- }
-#if DHCP_DOES_ARP_CHECK
- /* received no ARP reply for the offered address (which is good) */
- } else if (dhcp->state == DHCP_STATE_CHECKING) {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_timeout(): CHECKING, ARP request timed out\n"));
- if (dhcp->tries <= 1) {
- dhcp_check(netif);
- /* no ARP replies on the offered address,
- looks like the IP address is indeed free */
- } else {
- /* bind the interface to the offered address */
- dhcp_bind(netif);
- }
-#endif /* DHCP_DOES_ARP_CHECK */
- } else if (dhcp->state == DHCP_STATE_REBOOTING) {
- if (dhcp->tries < REBOOT_TRIES) {
- dhcp_reboot(netif);
- } else {
- dhcp_discover(netif);
- }
- }
-}
-
-/**
- * The renewal period has timed out.
- *
- * @param netif the netif under DHCP control
- */
-static void
-dhcp_t1_timeout(struct netif *netif)
-{
- struct dhcp *dhcp = netif_dhcp_data(netif);
-
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_t1_timeout()\n"));
- if ((dhcp->state == DHCP_STATE_REQUESTING) || (dhcp->state == DHCP_STATE_BOUND) ||
- (dhcp->state == DHCP_STATE_RENEWING)) {
- /* just retry to renew - note that the rebind timer (t2) will
- * eventually time-out if renew tries fail. */
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE,
- ("dhcp_t1_timeout(): must renew\n"));
- /* This slightly different to RFC2131: DHCPREQUEST will be sent from state
- DHCP_STATE_RENEWING, not DHCP_STATE_BOUND */
- dhcp_renew(netif);
- /* Calculate next timeout */
- if (((dhcp->t2_timeout - dhcp->lease_used) / 2) >= ((60 + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS)) {
- dhcp->t1_renew_time = (u16_t)((dhcp->t2_timeout - dhcp->lease_used) / 2);
- }
- }
-}
-
-/**
- * The rebind period has timed out.
- *
- * @param netif the netif under DHCP control
- */
-static void
-dhcp_t2_timeout(struct netif *netif)
-{
- struct dhcp *dhcp = netif_dhcp_data(netif);
-
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_t2_timeout()\n"));
- if ((dhcp->state == DHCP_STATE_REQUESTING) || (dhcp->state == DHCP_STATE_BOUND) ||
- (dhcp->state == DHCP_STATE_RENEWING) || (dhcp->state == DHCP_STATE_REBINDING)) {
- /* just retry to rebind */
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE,
- ("dhcp_t2_timeout(): must rebind\n"));
- /* This slightly different to RFC2131: DHCPREQUEST will be sent from state
- DHCP_STATE_REBINDING, not DHCP_STATE_BOUND */
- dhcp_rebind(netif);
- /* Calculate next timeout */
- if (((dhcp->t0_timeout - dhcp->lease_used) / 2) >= ((60 + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS)) {
- dhcp->t2_rebind_time = (u16_t)((dhcp->t0_timeout - dhcp->lease_used) / 2);
- }
- }
-}
-
-/**
- * Handle a DHCP ACK packet
- *
- * @param netif the netif under DHCP control
- */
-static void
-dhcp_handle_ack(struct netif *netif, struct dhcp_msg *msg_in)
-{
- struct dhcp *dhcp = netif_dhcp_data(netif);
-
-#if LWIP_DHCP_PROVIDE_DNS_SERVERS || LWIP_DHCP_GET_NTP_SRV
- u8_t n;
-#endif /* LWIP_DHCP_PROVIDE_DNS_SERVERS || LWIP_DHCP_GET_NTP_SRV */
-#if LWIP_DHCP_GET_NTP_SRV
- ip4_addr_t ntp_server_addrs[LWIP_DHCP_MAX_NTP_SERVERS];
-#endif
-
- /* clear options we might not get from the ACK */
- ip4_addr_set_zero(&dhcp->offered_sn_mask);
- ip4_addr_set_zero(&dhcp->offered_gw_addr);
-#if LWIP_DHCP_BOOTP_FILE
- ip4_addr_set_zero(&dhcp->offered_si_addr);
-#endif /* LWIP_DHCP_BOOTP_FILE */
-
- /* lease time given? */
- if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_LEASE_TIME)) {
- /* remember offered lease time */
- dhcp->offered_t0_lease = dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_LEASE_TIME);
- }
- /* renewal period given? */
- if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_T1)) {
- /* remember given renewal period */
- dhcp->offered_t1_renew = dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_T1);
- } else {
- /* calculate safe periods for renewal */
- dhcp->offered_t1_renew = dhcp->offered_t0_lease / 2;
- }
-
- /* renewal period given? */
- if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_T2)) {
- /* remember given rebind period */
- dhcp->offered_t2_rebind = dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_T2);
- } else {
- /* calculate safe periods for rebinding (offered_t0_lease * 0.875 -> 87.5%)*/
- dhcp->offered_t2_rebind = (dhcp->offered_t0_lease * 7U) / 8U;
- }
-
- /* (y)our internet address */
- ip4_addr_copy(dhcp->offered_ip_addr, msg_in->yiaddr);
-
-#if LWIP_DHCP_BOOTP_FILE
- /* copy boot server address,
- boot file name copied in dhcp_parse_reply if not overloaded */
- ip4_addr_copy(dhcp->offered_si_addr, msg_in->siaddr);
-#endif /* LWIP_DHCP_BOOTP_FILE */
-
- /* subnet mask given? */
- if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_SUBNET_MASK)) {
- /* remember given subnet mask */
- ip4_addr_set_u32(&dhcp->offered_sn_mask, lwip_htonl(dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_SUBNET_MASK)));
- dhcp->subnet_mask_given = 1;
- } else {
- dhcp->subnet_mask_given = 0;
- }
-
- /* gateway router */
- if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_ROUTER)) {
- ip4_addr_set_u32(&dhcp->offered_gw_addr, lwip_htonl(dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_ROUTER)));
- }
-
-#if LWIP_DHCP_GET_NTP_SRV
- /* NTP servers */
- for (n = 0; (n < LWIP_DHCP_MAX_NTP_SERVERS) && dhcp_option_given(dhcp, DHCP_OPTION_IDX_NTP_SERVER + n); n++) {
- ip4_addr_set_u32(&ntp_server_addrs[n], lwip_htonl(dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_NTP_SERVER + n)));
- }
- dhcp_set_ntp_servers(n, ntp_server_addrs);
-#endif /* LWIP_DHCP_GET_NTP_SRV */
-
-#if LWIP_DHCP_PROVIDE_DNS_SERVERS
- /* DNS servers */
- for (n = 0; (n < LWIP_DHCP_PROVIDE_DNS_SERVERS) && dhcp_option_given(dhcp, DHCP_OPTION_IDX_DNS_SERVER + n); n++) {
- ip_addr_t dns_addr;
- ip_addr_set_ip4_u32_val(dns_addr, lwip_htonl(dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_DNS_SERVER + n)));
- dns_setserver(n, &dns_addr);
- }
-#endif /* LWIP_DHCP_PROVIDE_DNS_SERVERS */
-}
-
-/**
- * @ingroup dhcp4
- * Set a statically allocated struct dhcp to work with.
- * Using this prevents dhcp_start to allocate it using mem_malloc.
- *
- * @param netif the netif for which to set the struct dhcp
- * @param dhcp (uninitialised) dhcp struct allocated by the application
- */
-void
-dhcp_set_struct(struct netif *netif, struct dhcp *dhcp)
-{
- LWIP_ASSERT_CORE_LOCKED();
- LWIP_ASSERT("netif != NULL", netif != NULL);
- LWIP_ASSERT("dhcp != NULL", dhcp != NULL);
- LWIP_ASSERT("netif already has a struct dhcp set", netif_dhcp_data(netif) == NULL);
-
- /* clear data structure */
- memset(dhcp, 0, sizeof(struct dhcp));
- /* dhcp_set_state(&dhcp, DHCP_STATE_OFF); */
- netif_set_client_data(netif, LWIP_NETIF_CLIENT_DATA_INDEX_DHCP, dhcp);
-}
-
-/**
- * @ingroup dhcp4
- * Removes a struct dhcp from a netif.
- *
- * ATTENTION: Only use this when not using dhcp_set_struct() to allocate the
- * struct dhcp since the memory is passed back to the heap.
- *
- * @param netif the netif from which to remove the struct dhcp
- */
-void dhcp_cleanup(struct netif *netif)
-{
- LWIP_ASSERT_CORE_LOCKED();
- LWIP_ASSERT("netif != NULL", netif != NULL);
-
- if (netif_dhcp_data(netif) != NULL) {
- mem_free(netif_dhcp_data(netif));
- netif_set_client_data(netif, LWIP_NETIF_CLIENT_DATA_INDEX_DHCP, NULL);
- }
-}
-
-/**
- * @ingroup dhcp4
- * Start DHCP negotiation for a network interface.
- *
- * If no DHCP client instance was attached to this interface,
- * a new client is created first. If a DHCP client instance
- * was already present, it restarts negotiation.
- *
- * @param netif The lwIP network interface
- * @return lwIP error code
- * - ERR_OK - No error
- * - ERR_MEM - Out of memory
- */
-err_t
-dhcp_start(struct netif *netif)
-{
- struct dhcp *dhcp;
- err_t result;
-
- LWIP_ASSERT_CORE_LOCKED();
- LWIP_ERROR("netif != NULL", (netif != NULL), return ERR_ARG;);
- LWIP_ERROR("netif is not up, old style port?", netif_is_up(netif), return ERR_ARG;);
- dhcp = netif_dhcp_data(netif);
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_start(netif=%p) %c%c%"U16_F"\n", (void *)netif, netif->name[0], netif->name[1], (u16_t)netif->num));
-
- /* check MTU of the netif */
- if (netif->mtu < DHCP_MAX_MSG_LEN_MIN_REQUIRED) {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): Cannot use this netif with DHCP: MTU is too small\n"));
- return ERR_MEM;
- }
-
- /* no DHCP client attached yet? */
- if (dhcp == NULL) {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): mallocing new DHCP client\n"));
- dhcp = (struct dhcp *)mem_malloc(sizeof(struct dhcp));
- if (dhcp == NULL) {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): could not allocate dhcp\n"));
- return ERR_MEM;
- }
-
- /* store this dhcp client in the netif */
- netif_set_client_data(netif, LWIP_NETIF_CLIENT_DATA_INDEX_DHCP, dhcp);
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): allocated dhcp"));
- /* already has DHCP client attached */
- } else {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_start(): restarting DHCP configuration\n"));
-
- if (dhcp->pcb_allocated != 0) {
- dhcp_dec_pcb_refcount(); /* free DHCP PCB if not needed any more */
- }
- /* dhcp is cleared below, no need to reset flag*/
- }
-
- /* clear data structure */
- memset(dhcp, 0, sizeof(struct dhcp));
- /* dhcp_set_state(&dhcp, DHCP_STATE_OFF); */
-
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): starting DHCP configuration\n"));
-
- if (dhcp_inc_pcb_refcount() != ERR_OK) { /* ensure DHCP PCB is allocated */
- return ERR_MEM;
- }
- dhcp->pcb_allocated = 1;
-
- if (!netif_is_link_up(netif)) {
- /* set state INIT and wait for dhcp_network_changed() to call dhcp_discover() */
- dhcp_set_state(dhcp, DHCP_STATE_INIT);
- return ERR_OK;
- }
-
- /* (re)start the DHCP negotiation */
- result = dhcp_discover(netif);
- if (result != ERR_OK) {
- /* free resources allocated above */
- dhcp_release_and_stop(netif);
- return ERR_MEM;
- }
- return result;
-}
-
-/**
- * @ingroup dhcp4
- * Inform a DHCP server of our manual configuration.
- *
- * This informs DHCP servers of our fixed IP address configuration
- * by sending an INFORM message. It does not involve DHCP address
- * configuration, it is just here to be nice to the network.
- *
- * @param netif The lwIP network interface
- */
-void
-dhcp_inform(struct netif *netif)
-{
- struct dhcp dhcp;
- struct pbuf *p_out;
- u16_t options_out_len;
-
- LWIP_ASSERT_CORE_LOCKED();
- LWIP_ERROR("netif != NULL", (netif != NULL), return;);
-
- if (dhcp_inc_pcb_refcount() != ERR_OK) { /* ensure DHCP PCB is allocated */
- return;
- }
-
- memset(&dhcp, 0, sizeof(struct dhcp));
- dhcp_set_state(&dhcp, DHCP_STATE_INFORMING);
-
- /* create and initialize the DHCP message header */
- p_out = dhcp_create_msg(netif, &dhcp, DHCP_INFORM, &options_out_len);
- if (p_out != NULL) {
- struct dhcp_msg *msg_out = (struct dhcp_msg *)p_out->payload;
- options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN);
- options_out_len = dhcp_option_short(options_out_len, msg_out->options, DHCP_MAX_MSG_LEN(netif));
-
- LWIP_HOOK_DHCP_APPEND_OPTIONS(netif, &dhcp, DHCP_STATE_INFORMING, msg_out, DHCP_INFORM, &options_out_len);
- dhcp_option_trailer(options_out_len, msg_out->options, p_out);
-
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_inform: INFORMING\n"));
-
- udp_sendto_if(dhcp_pcb, p_out, IP_ADDR_BROADCAST, LWIP_IANA_PORT_DHCP_SERVER, netif);
-
- pbuf_free(p_out);
- } else {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_inform: could not allocate DHCP request\n"));
- }
-
- dhcp_dec_pcb_refcount(); /* delete DHCP PCB if not needed any more */
-}
-
-/** Handle a possible change in the network configuration.
- *
- * This enters the REBOOTING state to verify that the currently bound
- * address is still valid.
- */
-void
-dhcp_network_changed(struct netif *netif)
-{
- struct dhcp *dhcp = netif_dhcp_data(netif);
-
- if (!dhcp) {
- return;
- }
- switch (dhcp->state) {
- case DHCP_STATE_REBINDING:
- case DHCP_STATE_RENEWING:
- case DHCP_STATE_BOUND:
- case DHCP_STATE_REBOOTING:
- dhcp->tries = 0;
- dhcp_reboot(netif);
- break;
- case DHCP_STATE_OFF:
- /* stay off */
- break;
- default:
- LWIP_ASSERT("invalid dhcp->state", dhcp->state <= DHCP_STATE_BACKING_OFF);
- /* INIT/REQUESTING/CHECKING/BACKING_OFF restart with new 'rid' because the
- state changes, SELECTING: continue with current 'rid' as we stay in the
- same state */
-#if LWIP_DHCP_AUTOIP_COOP
- if (dhcp->autoip_coop_state == DHCP_AUTOIP_COOP_STATE_ON) {
- autoip_stop(netif);
- dhcp->autoip_coop_state = DHCP_AUTOIP_COOP_STATE_OFF;
- }
-#endif /* LWIP_DHCP_AUTOIP_COOP */
- /* ensure we start with short timeouts, even if already discovering */
- dhcp->tries = 0;
- dhcp_discover(netif);
- break;
- }
-}
-
-#if DHCP_DOES_ARP_CHECK
-/**
- * Match an ARP reply with the offered IP address:
- * check whether the offered IP address is not in use using ARP
- *
- * @param netif the network interface on which the reply was received
- * @param addr The IP address we received a reply from
- */
-void
-dhcp_arp_reply(struct netif *netif, const ip4_addr_t *addr)
-{
- struct dhcp *dhcp;
-
- LWIP_ERROR("netif != NULL", (netif != NULL), return;);
- dhcp = netif_dhcp_data(netif);
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_arp_reply()\n"));
- /* is a DHCP client doing an ARP check? */
- if ((dhcp != NULL) && (dhcp->state == DHCP_STATE_CHECKING)) {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_arp_reply(): CHECKING, arp reply for 0x%08"X32_F"\n",
- ip4_addr_get_u32(addr)));
- /* did a host respond with the address we
- were offered by the DHCP server? */
- if (ip4_addr_cmp(addr, &dhcp->offered_ip_addr)) {
- /* we will not accept the offered address */
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE | LWIP_DBG_LEVEL_WARNING,
- ("dhcp_arp_reply(): arp reply matched with offered address, declining\n"));
- dhcp_decline(netif);
- }
- }
-}
-
-/**
- * Decline an offered lease.
- *
- * Tell the DHCP server we do not accept the offered address.
- * One reason to decline the lease is when we find out the address
- * is already in use by another host (through ARP).
- *
- * @param netif the netif under DHCP control
- */
-static err_t
-dhcp_decline(struct netif *netif)
-{
- struct dhcp *dhcp = netif_dhcp_data(netif);
- err_t result;
- u16_t msecs;
- struct pbuf *p_out;
- u16_t options_out_len;
-
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_decline()\n"));
- dhcp_set_state(dhcp, DHCP_STATE_BACKING_OFF);
- /* create and initialize the DHCP message header */
- p_out = dhcp_create_msg(netif, dhcp, DHCP_DECLINE, &options_out_len);
- if (p_out != NULL) {
- struct dhcp_msg *msg_out = (struct dhcp_msg *)p_out->payload;
- options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_REQUESTED_IP, 4);
- options_out_len = dhcp_option_long(options_out_len, msg_out->options, lwip_ntohl(ip4_addr_get_u32(&dhcp->offered_ip_addr)));
-
- LWIP_HOOK_DHCP_APPEND_OPTIONS(netif, dhcp, DHCP_STATE_BACKING_OFF, msg_out, DHCP_DECLINE, &options_out_len);
- dhcp_option_trailer(options_out_len, msg_out->options, p_out);
-
- /* per section 4.4.4, broadcast DECLINE messages */
- result = udp_sendto_if_src(dhcp_pcb, p_out, IP_ADDR_BROADCAST, LWIP_IANA_PORT_DHCP_SERVER, netif, IP4_ADDR_ANY);
- pbuf_free(p_out);
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_decline: BACKING OFF\n"));
- } else {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS,
- ("dhcp_decline: could not allocate DHCP request\n"));
- result = ERR_MEM;
- }
- if (dhcp->tries < 255) {
- dhcp->tries++;
- }
- msecs = 10 * 1000;
- dhcp->request_timeout = (u16_t)((msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS);
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_decline(): set request timeout %"U16_F" msecs\n", msecs));
- return result;
-}
-#endif /* DHCP_DOES_ARP_CHECK */
-
-
-/**
- * Start the DHCP process, discover a DHCP server.
- *
- * @param netif the netif under DHCP control
- */
-static err_t
-dhcp_discover(struct netif *netif)
-{
- struct dhcp *dhcp = netif_dhcp_data(netif);
- err_t result = ERR_OK;
- u16_t msecs;
- u8_t i;
- struct pbuf *p_out;
- u16_t options_out_len;
-
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_discover()\n"));
-
- ip4_addr_set_any(&dhcp->offered_ip_addr);
- dhcp_set_state(dhcp, DHCP_STATE_SELECTING);
- /* create and initialize the DHCP message header */
- p_out = dhcp_create_msg(netif, dhcp, DHCP_DISCOVER, &options_out_len);
- if (p_out != NULL) {
- struct dhcp_msg *msg_out = (struct dhcp_msg *)p_out->payload;
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_discover: making request\n"));
-
- options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN);
- options_out_len = dhcp_option_short(options_out_len, msg_out->options, DHCP_MAX_MSG_LEN(netif));
-
- options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_PARAMETER_REQUEST_LIST, LWIP_ARRAYSIZE(dhcp_discover_request_options));
- for (i = 0; i < LWIP_ARRAYSIZE(dhcp_discover_request_options); i++) {
- options_out_len = dhcp_option_byte(options_out_len, msg_out->options, dhcp_discover_request_options[i]);
- }
- LWIP_HOOK_DHCP_APPEND_OPTIONS(netif, dhcp, DHCP_STATE_SELECTING, msg_out, DHCP_DISCOVER, &options_out_len);
- dhcp_option_trailer(options_out_len, msg_out->options, p_out);
-
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_discover: sendto(DISCOVER, IP_ADDR_BROADCAST, LWIP_IANA_PORT_DHCP_SERVER)\n"));
- udp_sendto_if_src(dhcp_pcb, p_out, IP_ADDR_BROADCAST, LWIP_IANA_PORT_DHCP_SERVER, netif, IP4_ADDR_ANY);
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_discover: deleting()ing\n"));
- pbuf_free(p_out);
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_discover: SELECTING\n"));
- } else {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_discover: could not allocate DHCP request\n"));
- }
- if (dhcp->tries < 255) {
- dhcp->tries++;
- }
-#if LWIP_DHCP_AUTOIP_COOP
- if (dhcp->tries >= LWIP_DHCP_AUTOIP_COOP_TRIES && dhcp->autoip_coop_state == DHCP_AUTOIP_COOP_STATE_OFF) {
- dhcp->autoip_coop_state = DHCP_AUTOIP_COOP_STATE_ON;
- autoip_start(netif);
- }
-#endif /* LWIP_DHCP_AUTOIP_COOP */
- msecs = (u16_t)((dhcp->tries < 6 ? 1 << dhcp->tries : 60) * 1000);
- dhcp->request_timeout = (u16_t)((msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS);
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_discover(): set request timeout %"U16_F" msecs\n", msecs));
- return result;
-}
-
-
-/**
- * Bind the interface to the offered IP address.
- *
- * @param netif network interface to bind to the offered address
- */
-static void
-dhcp_bind(struct netif *netif)
-{
- u32_t timeout;
- struct dhcp *dhcp;
- ip4_addr_t sn_mask, gw_addr;
- LWIP_ERROR("dhcp_bind: netif != NULL", (netif != NULL), return;);
- dhcp = netif_dhcp_data(netif);
- LWIP_ERROR("dhcp_bind: dhcp != NULL", (dhcp != NULL), return;);
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_bind(netif=%p) %c%c%"U16_F"\n", (void *)netif, netif->name[0], netif->name[1], (u16_t)netif->num));
-
- /* reset time used of lease */
- dhcp->lease_used = 0;
-
- if (dhcp->offered_t0_lease != 0xffffffffUL) {
- /* set renewal period timer */
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_bind(): t0 renewal timer %"U32_F" secs\n", dhcp->offered_t0_lease));
- timeout = (dhcp->offered_t0_lease + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS;
- if (timeout > 0xffff) {
- timeout = 0xffff;
- }
- dhcp->t0_timeout = (u16_t)timeout;
- if (dhcp->t0_timeout == 0) {
- dhcp->t0_timeout = 1;
- }
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_bind(): set request timeout %"U32_F" msecs\n", dhcp->offered_t0_lease * 1000));
- }
-
- /* temporary DHCP lease? */
- if (dhcp->offered_t1_renew != 0xffffffffUL) {
- /* set renewal period timer */
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_bind(): t1 renewal timer %"U32_F" secs\n", dhcp->offered_t1_renew));
- timeout = (dhcp->offered_t1_renew + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS;
- if (timeout > 0xffff) {
- timeout = 0xffff;
- }
- dhcp->t1_timeout = (u16_t)timeout;
- if (dhcp->t1_timeout == 0) {
- dhcp->t1_timeout = 1;
- }
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_bind(): set request timeout %"U32_F" msecs\n", dhcp->offered_t1_renew * 1000));
- dhcp->t1_renew_time = dhcp->t1_timeout;
- }
- /* set renewal period timer */
- if (dhcp->offered_t2_rebind != 0xffffffffUL) {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_bind(): t2 rebind timer %"U32_F" secs\n", dhcp->offered_t2_rebind));
- timeout = (dhcp->offered_t2_rebind + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS;
- if (timeout > 0xffff) {
- timeout = 0xffff;
- }
- dhcp->t2_timeout = (u16_t)timeout;
- if (dhcp->t2_timeout == 0) {
- dhcp->t2_timeout = 1;
- }
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_bind(): set request timeout %"U32_F" msecs\n", dhcp->offered_t2_rebind * 1000));
- dhcp->t2_rebind_time = dhcp->t2_timeout;
- }
-
- /* If we have sub 1 minute lease, t2 and t1 will kick in at the same time. */
- if ((dhcp->t1_timeout >= dhcp->t2_timeout) && (dhcp->t2_timeout > 0)) {
- dhcp->t1_timeout = 0;
- }
-
- if (dhcp->subnet_mask_given) {
- /* copy offered network mask */
- ip4_addr_copy(sn_mask, dhcp->offered_sn_mask);
- } else {
- /* subnet mask not given, choose a safe subnet mask given the network class */
- u8_t first_octet = ip4_addr1(&dhcp->offered_ip_addr);
- if (first_octet <= 127) {
- ip4_addr_set_u32(&sn_mask, PP_HTONL(0xff000000UL));
- } else if (first_octet >= 192) {
- ip4_addr_set_u32(&sn_mask, PP_HTONL(0xffffff00UL));
- } else {
- ip4_addr_set_u32(&sn_mask, PP_HTONL(0xffff0000UL));
- }
- }
-
- ip4_addr_copy(gw_addr, dhcp->offered_gw_addr);
- /* gateway address not given? */
- if (ip4_addr_isany_val(gw_addr)) {
- /* copy network address */
- ip4_addr_get_network(&gw_addr, &dhcp->offered_ip_addr, &sn_mask);
- /* use first host address on network as gateway */
- ip4_addr_set_u32(&gw_addr, ip4_addr_get_u32(&gw_addr) | PP_HTONL(0x00000001UL));
- }
-
-#if LWIP_DHCP_AUTOIP_COOP
- if (dhcp->autoip_coop_state == DHCP_AUTOIP_COOP_STATE_ON) {
- autoip_stop(netif);
- dhcp->autoip_coop_state = DHCP_AUTOIP_COOP_STATE_OFF;
- }
-#endif /* LWIP_DHCP_AUTOIP_COOP */
-
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_bind(): IP: 0x%08"X32_F" SN: 0x%08"X32_F" GW: 0x%08"X32_F"\n",
- ip4_addr_get_u32(&dhcp->offered_ip_addr), ip4_addr_get_u32(&sn_mask), ip4_addr_get_u32(&gw_addr)));
- /* netif is now bound to DHCP leased address - set this before assigning the address
- to ensure the callback can use dhcp_supplied_address() */
- dhcp_set_state(dhcp, DHCP_STATE_BOUND);
-
- netif_set_addr(netif, &dhcp->offered_ip_addr, &sn_mask, &gw_addr);
- /* interface is used by routing now that an address is set */
-}
-
-/**
- * @ingroup dhcp4
- * Renew an existing DHCP lease at the involved DHCP server.
- *
- * @param netif network interface which must renew its lease
- */
-err_t
-dhcp_renew(struct netif *netif)
-{
- struct dhcp *dhcp = netif_dhcp_data(netif);
- err_t result;
- u16_t msecs;
- u8_t i;
- struct pbuf *p_out;
- u16_t options_out_len;
-
- LWIP_ASSERT_CORE_LOCKED();
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_renew()\n"));
- dhcp_set_state(dhcp, DHCP_STATE_RENEWING);
-
- /* create and initialize the DHCP message header */
- p_out = dhcp_create_msg(netif, dhcp, DHCP_REQUEST, &options_out_len);
- if (p_out != NULL) {
- struct dhcp_msg *msg_out = (struct dhcp_msg *)p_out->payload;
- options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN);
- options_out_len = dhcp_option_short(options_out_len, msg_out->options, DHCP_MAX_MSG_LEN(netif));
-
- options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_PARAMETER_REQUEST_LIST, LWIP_ARRAYSIZE(dhcp_discover_request_options));
- for (i = 0; i < LWIP_ARRAYSIZE(dhcp_discover_request_options); i++) {
- options_out_len = dhcp_option_byte(options_out_len, msg_out->options, dhcp_discover_request_options[i]);
- }
-
-#if LWIP_NETIF_HOSTNAME
- options_out_len = dhcp_option_hostname(options_out_len, msg_out->options, netif);
-#endif /* LWIP_NETIF_HOSTNAME */
-
- LWIP_HOOK_DHCP_APPEND_OPTIONS(netif, dhcp, DHCP_STATE_RENEWING, msg_out, DHCP_REQUEST, &options_out_len);
- dhcp_option_trailer(options_out_len, msg_out->options, p_out);
-
- result = udp_sendto_if(dhcp_pcb, p_out, &dhcp->server_ip_addr, LWIP_IANA_PORT_DHCP_SERVER, netif);
- pbuf_free(p_out);
-
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_renew: RENEWING\n"));
- } else {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_renew: could not allocate DHCP request\n"));
- result = ERR_MEM;
- }
- if (dhcp->tries < 255) {
- dhcp->tries++;
- }
- /* back-off on retries, but to a maximum of 20 seconds */
- msecs = (u16_t)(dhcp->tries < 10 ? dhcp->tries * 2000 : 20 * 1000);
- dhcp->request_timeout = (u16_t)((msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS);
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_renew(): set request timeout %"U16_F" msecs\n", msecs));
- return result;
-}
-
-/**
- * Rebind with a DHCP server for an existing DHCP lease.
- *
- * @param netif network interface which must rebind with a DHCP server
- */
-static err_t
-dhcp_rebind(struct netif *netif)
-{
- struct dhcp *dhcp = netif_dhcp_data(netif);
- err_t result;
- u16_t msecs;
- u8_t i;
- struct pbuf *p_out;
- u16_t options_out_len;
-
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_rebind()\n"));
- dhcp_set_state(dhcp, DHCP_STATE_REBINDING);
-
- /* create and initialize the DHCP message header */
- p_out = dhcp_create_msg(netif, dhcp, DHCP_REQUEST, &options_out_len);
- if (p_out != NULL) {
- struct dhcp_msg *msg_out = (struct dhcp_msg *)p_out->payload;
- options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN);
- options_out_len = dhcp_option_short(options_out_len, msg_out->options, DHCP_MAX_MSG_LEN(netif));
-
- options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_PARAMETER_REQUEST_LIST, LWIP_ARRAYSIZE(dhcp_discover_request_options));
- for (i = 0; i < LWIP_ARRAYSIZE(dhcp_discover_request_options); i++) {
- options_out_len = dhcp_option_byte(options_out_len, msg_out->options, dhcp_discover_request_options[i]);
- }
-
-#if LWIP_NETIF_HOSTNAME
- options_out_len = dhcp_option_hostname(options_out_len, msg_out->options, netif);
-#endif /* LWIP_NETIF_HOSTNAME */
-
- LWIP_HOOK_DHCP_APPEND_OPTIONS(netif, dhcp, DHCP_STATE_REBINDING, msg_out, DHCP_DISCOVER, &options_out_len);
- dhcp_option_trailer(options_out_len, msg_out->options, p_out);
-
- /* broadcast to server */
- result = udp_sendto_if(dhcp_pcb, p_out, IP_ADDR_BROADCAST, LWIP_IANA_PORT_DHCP_SERVER, netif);
- pbuf_free(p_out);
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_rebind: REBINDING\n"));
- } else {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_rebind: could not allocate DHCP request\n"));
- result = ERR_MEM;
- }
- if (dhcp->tries < 255) {
- dhcp->tries++;
- }
- msecs = (u16_t)(dhcp->tries < 10 ? dhcp->tries * 1000 : 10 * 1000);
- dhcp->request_timeout = (u16_t)((msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS);
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_rebind(): set request timeout %"U16_F" msecs\n", msecs));
- return result;
-}
-
-/**
- * Enter REBOOTING state to verify an existing lease
- *
- * @param netif network interface which must reboot
- */
-static err_t
-dhcp_reboot(struct netif *netif)
-{
- struct dhcp *dhcp = netif_dhcp_data(netif);
- err_t result;
- u16_t msecs;
- u8_t i;
- struct pbuf *p_out;
- u16_t options_out_len;
-
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_reboot()\n"));
- dhcp_set_state(dhcp, DHCP_STATE_REBOOTING);
-
- /* create and initialize the DHCP message header */
- p_out = dhcp_create_msg(netif, dhcp, DHCP_REQUEST, &options_out_len);
- if (p_out != NULL) {
- struct dhcp_msg *msg_out = (struct dhcp_msg *)p_out->payload;
- options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN);
- options_out_len = dhcp_option_short(options_out_len, msg_out->options, DHCP_MAX_MSG_LEN_MIN_REQUIRED);
-
- options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_REQUESTED_IP, 4);
- options_out_len = dhcp_option_long(options_out_len, msg_out->options, lwip_ntohl(ip4_addr_get_u32(&dhcp->offered_ip_addr)));
-
- options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_PARAMETER_REQUEST_LIST, LWIP_ARRAYSIZE(dhcp_discover_request_options));
- for (i = 0; i < LWIP_ARRAYSIZE(dhcp_discover_request_options); i++) {
- options_out_len = dhcp_option_byte(options_out_len, msg_out->options, dhcp_discover_request_options[i]);
- }
-
-#if LWIP_NETIF_HOSTNAME
- options_out_len = dhcp_option_hostname(options_out_len, msg_out->options, netif);
-#endif /* LWIP_NETIF_HOSTNAME */
-
- LWIP_HOOK_DHCP_APPEND_OPTIONS(netif, dhcp, DHCP_STATE_REBOOTING, msg_out, DHCP_REQUEST, &options_out_len);
- dhcp_option_trailer(options_out_len, msg_out->options, p_out);
-
- /* broadcast to server */
- result = udp_sendto_if(dhcp_pcb, p_out, IP_ADDR_BROADCAST, LWIP_IANA_PORT_DHCP_SERVER, netif);
- pbuf_free(p_out);
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_reboot: REBOOTING\n"));
- } else {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_reboot: could not allocate DHCP request\n"));
- result = ERR_MEM;
- }
- if (dhcp->tries < 255) {
- dhcp->tries++;
- }
- msecs = (u16_t)(dhcp->tries < 10 ? dhcp->tries * 1000 : 10 * 1000);
- dhcp->request_timeout = (u16_t)((msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS);
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_reboot(): set request timeout %"U16_F" msecs\n", msecs));
- return result;
-}
-
-/**
- * @ingroup dhcp4
- * Release a DHCP lease and stop DHCP statemachine (and AUTOIP if LWIP_DHCP_AUTOIP_COOP).
- *
- * @param netif network interface
- */
-void
-dhcp_release_and_stop(struct netif *netif)
-{
- struct dhcp *dhcp = netif_dhcp_data(netif);
- ip_addr_t server_ip_addr;
-
- LWIP_ASSERT_CORE_LOCKED();
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_release_and_stop()\n"));
- if (dhcp == NULL) {
- return;
- }
-
- /* already off? -> nothing to do */
- if (dhcp->state == DHCP_STATE_OFF) {
- return;
- }
-
- ip_addr_copy(server_ip_addr, dhcp->server_ip_addr);
-
- /* clean old DHCP offer */
- ip_addr_set_zero_ip4(&dhcp->server_ip_addr);
- ip4_addr_set_zero(&dhcp->offered_ip_addr);
- ip4_addr_set_zero(&dhcp->offered_sn_mask);
- ip4_addr_set_zero(&dhcp->offered_gw_addr);
-#if LWIP_DHCP_BOOTP_FILE
- ip4_addr_set_zero(&dhcp->offered_si_addr);
-#endif /* LWIP_DHCP_BOOTP_FILE */
- dhcp->offered_t0_lease = dhcp->offered_t1_renew = dhcp->offered_t2_rebind = 0;
- dhcp->t1_renew_time = dhcp->t2_rebind_time = dhcp->lease_used = dhcp->t0_timeout = 0;
-
- /* send release message when current IP was assigned via DHCP */
- if (dhcp_supplied_address(netif)) {
- /* create and initialize the DHCP message header */
- struct pbuf *p_out;
- u16_t options_out_len;
- p_out = dhcp_create_msg(netif, dhcp, DHCP_RELEASE, &options_out_len);
- if (p_out != NULL) {
- struct dhcp_msg *msg_out = (struct dhcp_msg *)p_out->payload;
- options_out_len = dhcp_option(options_out_len, msg_out->options, DHCP_OPTION_SERVER_ID, 4);
- options_out_len = dhcp_option_long(options_out_len, msg_out->options, lwip_ntohl(ip4_addr_get_u32(ip_2_ip4(&server_ip_addr))));
-
- LWIP_HOOK_DHCP_APPEND_OPTIONS(netif, dhcp, dhcp->state, msg_out, DHCP_RELEASE, &options_out_len);
- dhcp_option_trailer(options_out_len, msg_out->options, p_out);
-
- udp_sendto_if(dhcp_pcb, p_out, &server_ip_addr, LWIP_IANA_PORT_DHCP_SERVER, netif);
- pbuf_free(p_out);
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_release: RELEASED, DHCP_STATE_OFF\n"));
- } else {
- /* sending release failed, but that's not a problem since the correct behaviour of dhcp does not rely on release */
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_release: could not allocate DHCP request\n"));
- }
- }
-
- /* remove IP address from interface (prevents routing from selecting this interface) */
- netif_set_addr(netif, IP4_ADDR_ANY4, IP4_ADDR_ANY4, IP4_ADDR_ANY4);
-
-#if LWIP_DHCP_AUTOIP_COOP
- if (dhcp->autoip_coop_state == DHCP_AUTOIP_COOP_STATE_ON) {
- autoip_stop(netif);
- dhcp->autoip_coop_state = DHCP_AUTOIP_COOP_STATE_OFF;
- }
-#endif /* LWIP_DHCP_AUTOIP_COOP */
-
- dhcp_set_state(dhcp, DHCP_STATE_OFF);
-
- if (dhcp->pcb_allocated != 0) {
- dhcp_dec_pcb_refcount(); /* free DHCP PCB if not needed any more */
- dhcp->pcb_allocated = 0;
- }
-}
-
-/**
- * @ingroup dhcp4
- * This function calls dhcp_release_and_stop() internally.
- * @deprecated Use dhcp_release_and_stop() instead.
- */
-err_t
-dhcp_release(struct netif *netif)
-{
- dhcp_release_and_stop(netif);
- return ERR_OK;
-}
-
-/**
- * @ingroup dhcp4
- * This function calls dhcp_release_and_stop() internally.
- * @deprecated Use dhcp_release_and_stop() instead.
- */
-void
-dhcp_stop(struct netif *netif)
-{
- dhcp_release_and_stop(netif);
-}
-
-/*
- * Set the DHCP state of a DHCP client.
- *
- * If the state changed, reset the number of tries.
- */
-static void
-dhcp_set_state(struct dhcp *dhcp, u8_t new_state)
-{
- if (new_state != dhcp->state) {
- dhcp->state = new_state;
- dhcp->tries = 0;
- dhcp->request_timeout = 0;
- }
-}
-
-/*
- * Concatenate an option type and length field to the outgoing
- * DHCP message.
- *
- */
-static u16_t
-dhcp_option(u16_t options_out_len, u8_t *options, u8_t option_type, u8_t option_len)
-{
- LWIP_ASSERT("dhcp_option: options_out_len + 2 + option_len <= DHCP_OPTIONS_LEN", options_out_len + 2U + option_len <= DHCP_OPTIONS_LEN);
- options[options_out_len++] = option_type;
- options[options_out_len++] = option_len;
- return options_out_len;
-}
-/*
- * Concatenate a single byte to the outgoing DHCP message.
- *
- */
-static u16_t
-dhcp_option_byte(u16_t options_out_len, u8_t *options, u8_t value)
-{
- LWIP_ASSERT("dhcp_option_byte: options_out_len < DHCP_OPTIONS_LEN", options_out_len < DHCP_OPTIONS_LEN);
- options[options_out_len++] = value;
- return options_out_len;
-}
-
-static u16_t
-dhcp_option_short(u16_t options_out_len, u8_t *options, u16_t value)
-{
- LWIP_ASSERT("dhcp_option_short: options_out_len + 2 <= DHCP_OPTIONS_LEN", options_out_len + 2U <= DHCP_OPTIONS_LEN);
- options[options_out_len++] = (u8_t)((value & 0xff00U) >> 8);
- options[options_out_len++] = (u8_t) (value & 0x00ffU);
- return options_out_len;
-}
-
-static u16_t
-dhcp_option_long(u16_t options_out_len, u8_t *options, u32_t value)
-{
- LWIP_ASSERT("dhcp_option_long: options_out_len + 4 <= DHCP_OPTIONS_LEN", options_out_len + 4U <= DHCP_OPTIONS_LEN);
- options[options_out_len++] = (u8_t)((value & 0xff000000UL) >> 24);
- options[options_out_len++] = (u8_t)((value & 0x00ff0000UL) >> 16);
- options[options_out_len++] = (u8_t)((value & 0x0000ff00UL) >> 8);
- options[options_out_len++] = (u8_t)((value & 0x000000ffUL));
- return options_out_len;
-}
-
-#if LWIP_NETIF_HOSTNAME
-static u16_t
-dhcp_option_hostname(u16_t options_out_len, u8_t *options, struct netif *netif)
-{
- if (netif->hostname != NULL) {
- size_t namelen = strlen(netif->hostname);
- if (namelen > 0) {
- size_t len;
- const char *p = netif->hostname;
- /* Shrink len to available bytes (need 2 bytes for OPTION_HOSTNAME
- and 1 byte for trailer) */
- size_t available = DHCP_OPTIONS_LEN - options_out_len - 3;
- LWIP_ASSERT("DHCP: hostname is too long!", namelen <= available);
- len = LWIP_MIN(namelen, available);
- LWIP_ASSERT("DHCP: hostname is too long!", len <= 0xFF);
- options_out_len = dhcp_option(options_out_len, options, DHCP_OPTION_HOSTNAME, (u8_t)len);
- while (len--) {
- options_out_len = dhcp_option_byte(options_out_len, options, *p++);
- }
- }
- }
- return options_out_len;
-}
-#endif /* LWIP_NETIF_HOSTNAME */
-
-/**
- * Extract the DHCP message and the DHCP options.
- *
- * Extract the DHCP message and the DHCP options, each into a contiguous
- * piece of memory. As a DHCP message is variable sized by its options,
- * and also allows overriding some fields for options, the easy approach
- * is to first unfold the options into a contiguous piece of memory, and
- * use that further on.
- *
- */
-static err_t
-dhcp_parse_reply(struct pbuf *p, struct dhcp *dhcp)
-{
- u8_t *options;
- u16_t offset;
- u16_t offset_max;
- u16_t options_idx;
- u16_t options_idx_max;
- struct pbuf *q;
- int parse_file_as_options = 0;
- int parse_sname_as_options = 0;
- struct dhcp_msg *msg_in;
-#if LWIP_DHCP_BOOTP_FILE
- int file_overloaded = 0;
-#endif
-
- LWIP_UNUSED_ARG(dhcp);
-
- /* clear received options */
- dhcp_clear_all_options(dhcp);
- /* check that beginning of dhcp_msg (up to and including chaddr) is in first pbuf */
- if (p->len < DHCP_SNAME_OFS) {
- return ERR_BUF;
- }
- msg_in = (struct dhcp_msg *)p->payload;
-#if LWIP_DHCP_BOOTP_FILE
- /* clear boot file name */
- dhcp->boot_file_name[0] = 0;
-#endif /* LWIP_DHCP_BOOTP_FILE */
-
- /* parse options */
-
- /* start with options field */
- options_idx = DHCP_OPTIONS_OFS;
- /* parse options to the end of the received packet */
- options_idx_max = p->tot_len;
-again:
- q = p;
- while ((q != NULL) && (options_idx >= q->len)) {
- options_idx = (u16_t)(options_idx - q->len);
- options_idx_max = (u16_t)(options_idx_max - q->len);
- q = q->next;
- }
- if (q == NULL) {
- return ERR_BUF;
- }
- offset = options_idx;
- offset_max = options_idx_max;
- options = (u8_t *)q->payload;
- /* at least 1 byte to read and no end marker, then at least 3 bytes to read? */
- while ((q != NULL) && (offset < offset_max) && (options[offset] != DHCP_OPTION_END)) {
- u8_t op = options[offset];
- u8_t len;
- u8_t decode_len = 0;
- int decode_idx = -1;
- u16_t val_offset = (u16_t)(offset + 2);
- if (val_offset < offset) {
- /* overflow */
- return ERR_BUF;
- }
- /* len byte might be in the next pbuf */
- if ((offset + 1) < q->len) {
- len = options[offset + 1];
- } else {
- len = (q->next != NULL ? ((u8_t *)q->next->payload)[0] : 0);
- }
- /* LWIP_DEBUGF(DHCP_DEBUG, ("msg_offset=%"U16_F", q->len=%"U16_F, msg_offset, q->len)); */
- decode_len = len;
- switch (op) {
- /* case(DHCP_OPTION_END): handled above */
- case (DHCP_OPTION_PAD):
- /* special option: no len encoded */
- decode_len = len = 0;
- /* will be increased below */
- break;
- case (DHCP_OPTION_SUBNET_MASK):
- LWIP_ERROR("len == 4", len == 4, return ERR_VAL;);
- decode_idx = DHCP_OPTION_IDX_SUBNET_MASK;
- break;
- case (DHCP_OPTION_ROUTER):
- decode_len = 4; /* only copy the first given router */
- LWIP_ERROR("len >= decode_len", len >= decode_len, return ERR_VAL;);
- decode_idx = DHCP_OPTION_IDX_ROUTER;
- break;
-#if LWIP_DHCP_PROVIDE_DNS_SERVERS
- case (DHCP_OPTION_DNS_SERVER):
- /* special case: there might be more than one server */
- LWIP_ERROR("len %% 4 == 0", len % 4 == 0, return ERR_VAL;);
- /* limit number of DNS servers */
- decode_len = LWIP_MIN(len, 4 * DNS_MAX_SERVERS);
- LWIP_ERROR("len >= decode_len", len >= decode_len, return ERR_VAL;);
- decode_idx = DHCP_OPTION_IDX_DNS_SERVER;
- break;
-#endif /* LWIP_DHCP_PROVIDE_DNS_SERVERS */
- case (DHCP_OPTION_LEASE_TIME):
- LWIP_ERROR("len == 4", len == 4, return ERR_VAL;);
- decode_idx = DHCP_OPTION_IDX_LEASE_TIME;
- break;
-#if LWIP_DHCP_GET_NTP_SRV
- case (DHCP_OPTION_NTP):
- /* special case: there might be more than one server */
- LWIP_ERROR("len %% 4 == 0", len % 4 == 0, return ERR_VAL;);
- /* limit number of NTP servers */
- decode_len = LWIP_MIN(len, 4 * LWIP_DHCP_MAX_NTP_SERVERS);
- LWIP_ERROR("len >= decode_len", len >= decode_len, return ERR_VAL;);
- decode_idx = DHCP_OPTION_IDX_NTP_SERVER;
- break;
-#endif /* LWIP_DHCP_GET_NTP_SRV*/
- case (DHCP_OPTION_OVERLOAD):
- LWIP_ERROR("len == 1", len == 1, return ERR_VAL;);
- /* decode overload only in options, not in file/sname: invalid packet */
- LWIP_ERROR("overload in file/sname", options_idx == DHCP_OPTIONS_OFS, return ERR_VAL;);
- decode_idx = DHCP_OPTION_IDX_OVERLOAD;
- break;
- case (DHCP_OPTION_MESSAGE_TYPE):
- LWIP_ERROR("len == 1", len == 1, return ERR_VAL;);
- decode_idx = DHCP_OPTION_IDX_MSG_TYPE;
- break;
- case (DHCP_OPTION_SERVER_ID):
- LWIP_ERROR("len == 4", len == 4, return ERR_VAL;);
- decode_idx = DHCP_OPTION_IDX_SERVER_ID;
- break;
- case (DHCP_OPTION_T1):
- LWIP_ERROR("len == 4", len == 4, return ERR_VAL;);
- decode_idx = DHCP_OPTION_IDX_T1;
- break;
- case (DHCP_OPTION_T2):
- LWIP_ERROR("len == 4", len == 4, return ERR_VAL;);
- decode_idx = DHCP_OPTION_IDX_T2;
- break;
- default:
- decode_len = 0;
- LWIP_DEBUGF(DHCP_DEBUG, ("skipping option %"U16_F" in options\n", (u16_t)op));
- LWIP_HOOK_DHCP_PARSE_OPTION(ip_current_netif(), dhcp, dhcp->state, msg_in,
- dhcp_option_given(dhcp, DHCP_OPTION_IDX_MSG_TYPE) ? (u8_t)dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_MSG_TYPE) : 0,
- op, len, q, val_offset);
- break;
- }
- if (op == DHCP_OPTION_PAD) {
- offset++;
- } else {
- if (offset + len + 2 > 0xFFFF) {
- /* overflow */
- return ERR_BUF;
- }
- offset = (u16_t)(offset + len + 2);
- if (decode_len > 0) {
- u32_t value = 0;
- u16_t copy_len;
-decode_next:
- LWIP_ASSERT("check decode_idx", decode_idx >= 0 && decode_idx < DHCP_OPTION_IDX_MAX);
- if (!dhcp_option_given(dhcp, decode_idx)) {
- copy_len = LWIP_MIN(decode_len, 4);
- if (pbuf_copy_partial(q, &value, copy_len, val_offset) != copy_len) {
- return ERR_BUF;
- }
- if (decode_len > 4) {
- /* decode more than one u32_t */
- u16_t next_val_offset;
- LWIP_ERROR("decode_len %% 4 == 0", decode_len % 4 == 0, return ERR_VAL;);
- dhcp_got_option(dhcp, decode_idx);
- dhcp_set_option_value(dhcp, decode_idx, lwip_htonl(value));
- decode_len = (u8_t)(decode_len - 4);
- next_val_offset = (u16_t)(val_offset + 4);
- if (next_val_offset < val_offset) {
- /* overflow */
- return ERR_BUF;
- }
- val_offset = next_val_offset;
- decode_idx++;
- goto decode_next;
- } else if (decode_len == 4) {
- value = lwip_ntohl(value);
- } else {
- LWIP_ERROR("invalid decode_len", decode_len == 1, return ERR_VAL;);
- value = ((u8_t *)&value)[0];
- }
- dhcp_got_option(dhcp, decode_idx);
- dhcp_set_option_value(dhcp, decode_idx, value);
- }
- }
- }
- if (offset >= q->len) {
- offset = (u16_t)(offset - q->len);
- offset_max = (u16_t)(offset_max - q->len);
- if (offset < offset_max) {
- q = q->next;
- LWIP_ERROR("next pbuf was null", q != NULL, return ERR_VAL;);
- options = (u8_t *)q->payload;
- } else {
- /* We've run out of bytes, probably no end marker. Don't proceed. */
- return ERR_BUF;
- }
- }
- }
- /* is this an overloaded message? */
- if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_OVERLOAD)) {
- u32_t overload = dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_OVERLOAD);
- dhcp_clear_option(dhcp, DHCP_OPTION_IDX_OVERLOAD);
- if (overload == DHCP_OVERLOAD_FILE) {
- parse_file_as_options = 1;
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("overloaded file field\n"));
- } else if (overload == DHCP_OVERLOAD_SNAME) {
- parse_sname_as_options = 1;
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("overloaded sname field\n"));
- } else if (overload == DHCP_OVERLOAD_SNAME_FILE) {
- parse_sname_as_options = 1;
- parse_file_as_options = 1;
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("overloaded sname and file field\n"));
- } else {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("invalid overload option: %d\n", (int)overload));
- }
- }
- if (parse_file_as_options) {
- /* if both are overloaded, parse file first and then sname (RFC 2131 ch. 4.1) */
- parse_file_as_options = 0;
- options_idx = DHCP_FILE_OFS;
- options_idx_max = DHCP_FILE_OFS + DHCP_FILE_LEN;
-#if LWIP_DHCP_BOOTP_FILE
- file_overloaded = 1;
-#endif
- goto again;
- } else if (parse_sname_as_options) {
- parse_sname_as_options = 0;
- options_idx = DHCP_SNAME_OFS;
- options_idx_max = DHCP_SNAME_OFS + DHCP_SNAME_LEN;
- goto again;
- }
-#if LWIP_DHCP_BOOTP_FILE
- if (!file_overloaded) {
- /* only do this for ACK messages */
- if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_MSG_TYPE) &&
- (dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_MSG_TYPE) == DHCP_ACK))
- /* copy bootp file name, don't care for sname (server hostname) */
- if (pbuf_copy_partial(p, dhcp->boot_file_name, DHCP_FILE_LEN-1, DHCP_FILE_OFS) != (DHCP_FILE_LEN-1)) {
- return ERR_BUF;
- }
- /* make sure the string is really NULL-terminated */
- dhcp->boot_file_name[DHCP_FILE_LEN-1] = 0;
- }
-#endif /* LWIP_DHCP_BOOTP_FILE */
- return ERR_OK;
-}
-
-/**
- * If an incoming DHCP message is in response to us, then trigger the state machine
- */
-static void
-dhcp_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, const ip_addr_t *addr, u16_t port)
-{
- struct netif *netif = ip_current_input_netif();
- struct dhcp *dhcp = netif_dhcp_data(netif);
- struct dhcp_msg *reply_msg = (struct dhcp_msg *)p->payload;
- u8_t msg_type;
- u8_t i;
- struct dhcp_msg *msg_in;
-
- LWIP_UNUSED_ARG(arg);
-
- /* Caught DHCP message from netif that does not have DHCP enabled? -> not interested */
- if ((dhcp == NULL) || (dhcp->pcb_allocated == 0)) {
- goto free_pbuf_and_return;
- }
-
- LWIP_ASSERT("invalid server address type", IP_IS_V4(addr));
-
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_recv(pbuf = %p) from DHCP server %"U16_F".%"U16_F".%"U16_F".%"U16_F" port %"U16_F"\n", (void *)p,
- ip4_addr1_16(ip_2_ip4(addr)), ip4_addr2_16(ip_2_ip4(addr)), ip4_addr3_16(ip_2_ip4(addr)), ip4_addr4_16(ip_2_ip4(addr)), port));
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("pbuf->len = %"U16_F"\n", p->len));
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("pbuf->tot_len = %"U16_F"\n", p->tot_len));
- /* prevent warnings about unused arguments */
- LWIP_UNUSED_ARG(pcb);
- LWIP_UNUSED_ARG(addr);
- LWIP_UNUSED_ARG(port);
-
- if (p->len < DHCP_MIN_REPLY_LEN) {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("DHCP reply message or pbuf too short\n"));
- goto free_pbuf_and_return;
- }
-
- if (reply_msg->op != DHCP_BOOTREPLY) {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("not a DHCP reply message, but type %"U16_F"\n", (u16_t)reply_msg->op));
- goto free_pbuf_and_return;
- }
- /* iterate through hardware address and match against DHCP message */
- for (i = 0; i < netif->hwaddr_len && i < LWIP_MIN(DHCP_CHADDR_LEN, NETIF_MAX_HWADDR_LEN); i++) {
- if (netif->hwaddr[i] != reply_msg->chaddr[i]) {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING,
- ("netif->hwaddr[%"U16_F"]==%02"X16_F" != reply_msg->chaddr[%"U16_F"]==%02"X16_F"\n",
- (u16_t)i, (u16_t)netif->hwaddr[i], (u16_t)i, (u16_t)reply_msg->chaddr[i]));
- goto free_pbuf_and_return;
- }
- }
- /* match transaction ID against what we expected */
- if (lwip_ntohl(reply_msg->xid) != dhcp->xid) {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING,
- ("transaction id mismatch reply_msg->xid(%"X32_F")!=dhcp->xid(%"X32_F")\n", lwip_ntohl(reply_msg->xid), dhcp->xid));
- goto free_pbuf_and_return;
- }
- /* option fields could be unfold? */
- if (dhcp_parse_reply(p, dhcp) != ERR_OK) {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS,
- ("problem unfolding DHCP message - too short on memory?\n"));
- goto free_pbuf_and_return;
- }
-
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("searching DHCP_OPTION_MESSAGE_TYPE\n"));
- /* obtain pointer to DHCP message type */
- if (!dhcp_option_given(dhcp, DHCP_OPTION_IDX_MSG_TYPE)) {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("DHCP_OPTION_MESSAGE_TYPE option not found\n"));
- goto free_pbuf_and_return;
- }
-
- msg_in = (struct dhcp_msg *)p->payload;
- /* read DHCP message type */
- msg_type = (u8_t)dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_MSG_TYPE);
- /* message type is DHCP ACK? */
- if (msg_type == DHCP_ACK) {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("DHCP_ACK received\n"));
- /* in requesting state? */
- if (dhcp->state == DHCP_STATE_REQUESTING) {
- dhcp_handle_ack(netif, msg_in);
-#if DHCP_DOES_ARP_CHECK
- if ((netif->flags & NETIF_FLAG_ETHARP) != 0) {
- /* check if the acknowledged lease address is already in use */
- dhcp_check(netif);
- } else {
- /* bind interface to the acknowledged lease address */
- dhcp_bind(netif);
- }
-#else
- /* bind interface to the acknowledged lease address */
- dhcp_bind(netif);
-#endif
- }
- /* already bound to the given lease address? */
- else if ((dhcp->state == DHCP_STATE_REBOOTING) || (dhcp->state == DHCP_STATE_REBINDING) ||
- (dhcp->state == DHCP_STATE_RENEWING)) {
- dhcp_handle_ack(netif, msg_in);
- dhcp_bind(netif);
- }
- }
- /* received a DHCP_NAK in appropriate state? */
- else if ((msg_type == DHCP_NAK) &&
- ((dhcp->state == DHCP_STATE_REBOOTING) || (dhcp->state == DHCP_STATE_REQUESTING) ||
- (dhcp->state == DHCP_STATE_REBINDING) || (dhcp->state == DHCP_STATE_RENEWING ))) {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("DHCP_NAK received\n"));
- dhcp_handle_nak(netif);
- }
- /* received a DHCP_OFFER in DHCP_STATE_SELECTING state? */
- else if ((msg_type == DHCP_OFFER) && (dhcp->state == DHCP_STATE_SELECTING)) {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("DHCP_OFFER received in DHCP_STATE_SELECTING state\n"));
- /* remember offered lease */
- dhcp_handle_offer(netif, msg_in);
- }
-
-free_pbuf_and_return:
- pbuf_free(p);
-}
-
-/**
- * Create a DHCP request, fill in common headers
- *
- * @param netif the netif under DHCP control
- * @param dhcp dhcp control struct
- * @param message_type message type of the request
- */
-static struct pbuf *
-dhcp_create_msg(struct netif *netif, struct dhcp *dhcp, u8_t message_type, u16_t *options_out_len)
-{
- u16_t i;
- struct pbuf *p_out;
- struct dhcp_msg *msg_out;
- u16_t options_out_len_loc;
-
-#ifndef DHCP_GLOBAL_XID
- /** default global transaction identifier starting value (easy to match
- * with a packet analyser). We simply increment for each new request.
- * Predefine DHCP_GLOBAL_XID to a better value or a function call to generate one
- * at runtime, any supporting function prototypes can be defined in DHCP_GLOBAL_XID_HEADER */
-#if DHCP_CREATE_RAND_XID && defined(LWIP_RAND)
- static u32_t xid;
-#else /* DHCP_CREATE_RAND_XID && defined(LWIP_RAND) */
- static u32_t xid = 0xABCD0000;
-#endif /* DHCP_CREATE_RAND_XID && defined(LWIP_RAND) */
-#else
- if (!xid_initialised) {
- xid = DHCP_GLOBAL_XID;
- xid_initialised = !xid_initialised;
- }
-#endif
- LWIP_ERROR("dhcp_create_msg: netif != NULL", (netif != NULL), return NULL;);
- LWIP_ERROR("dhcp_create_msg: dhcp != NULL", (dhcp != NULL), return NULL;);
- p_out = pbuf_alloc(PBUF_TRANSPORT, sizeof(struct dhcp_msg), PBUF_RAM);
- if (p_out == NULL) {
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS,
- ("dhcp_create_msg(): could not allocate pbuf\n"));
- return NULL;
- }
- LWIP_ASSERT("dhcp_create_msg: check that first pbuf can hold struct dhcp_msg",
- (p_out->len >= sizeof(struct dhcp_msg)));
-
- /* DHCP_REQUEST should reuse 'xid' from DHCPOFFER */
- if ((message_type != DHCP_REQUEST) || (dhcp->state == DHCP_STATE_REBOOTING)) {
- /* reuse transaction identifier in retransmissions */
- if (dhcp->tries == 0) {
-#if DHCP_CREATE_RAND_XID && defined(LWIP_RAND)
- xid = LWIP_RAND();
-#else /* DHCP_CREATE_RAND_XID && defined(LWIP_RAND) */
- xid++;
-#endif /* DHCP_CREATE_RAND_XID && defined(LWIP_RAND) */
- }
- dhcp->xid = xid;
- }
- LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE,
- ("transaction id xid(%"X32_F")\n", xid));
-
- msg_out = (struct dhcp_msg *)p_out->payload;
- memset(msg_out, 0, sizeof(struct dhcp_msg));
-
- msg_out->op = DHCP_BOOTREQUEST;
- /* @todo: make link layer independent */
- msg_out->htype = LWIP_IANA_HWTYPE_ETHERNET;
- msg_out->hlen = netif->hwaddr_len;
- msg_out->xid = lwip_htonl(dhcp->xid);
- /* we don't need the broadcast flag since we can receive unicast traffic
- before being fully configured! */
- /* set ciaddr to netif->ip_addr based on message_type and state */
- if ((message_type == DHCP_INFORM) || (message_type == DHCP_DECLINE) || (message_type == DHCP_RELEASE) ||
- ((message_type == DHCP_REQUEST) && /* DHCP_STATE_BOUND not used for sending! */
- ((dhcp->state == DHCP_STATE_RENEWING) || dhcp->state == DHCP_STATE_REBINDING))) {
- ip4_addr_copy(msg_out->ciaddr, *netif_ip4_addr(netif));
- }
- for (i = 0; i < LWIP_MIN(DHCP_CHADDR_LEN, NETIF_MAX_HWADDR_LEN); i++) {
- /* copy netif hardware address (padded with zeroes through memset already) */
- msg_out->chaddr[i] = netif->hwaddr[i];
- }
- msg_out->cookie = PP_HTONL(DHCP_MAGIC_COOKIE);
- /* Add option MESSAGE_TYPE */
- options_out_len_loc = dhcp_option(0, msg_out->options, DHCP_OPTION_MESSAGE_TYPE, DHCP_OPTION_MESSAGE_TYPE_LEN);
- options_out_len_loc = dhcp_option_byte(options_out_len_loc, msg_out->options, message_type);
- if (options_out_len) {
- *options_out_len = options_out_len_loc;
- }
- return p_out;
-}
-
-/**
- * Add a DHCP message trailer
- *
- * Adds the END option to the DHCP message, and if
- * necessary, up to three padding bytes.
- */
-static void
-dhcp_option_trailer(u16_t options_out_len, u8_t *options, struct pbuf *p_out)
-{
- options[options_out_len++] = DHCP_OPTION_END;
- /* packet is too small, or not 4 byte aligned? */
- while (((options_out_len < DHCP_MIN_OPTIONS_LEN) || (options_out_len & 3)) &&
- (options_out_len < DHCP_OPTIONS_LEN)) {
- /* add a fill/padding byte */
- options[options_out_len++] = 0;
- }
- /* shrink the pbuf to the actual content length */
- pbuf_realloc(p_out, (u16_t)(sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + options_out_len));
-}
-
-/** check if DHCP supplied netif->ip_addr
- *
- * @param netif the netif to check
- * @return 1 if DHCP supplied netif->ip_addr (states BOUND or RENEWING),
- * 0 otherwise
- */
-u8_t
-dhcp_supplied_address(const struct netif *netif)
-{
- if ((netif != NULL) && (netif_dhcp_data(netif) != NULL)) {
- struct dhcp *dhcp = netif_dhcp_data(netif);
- return (dhcp->state == DHCP_STATE_BOUND) || (dhcp->state == DHCP_STATE_RENEWING) ||
- (dhcp->state == DHCP_STATE_REBINDING);
- }
- return 0;
-}
-
-#endif /* LWIP_IPV4 && LWIP_DHCP */
diff --git a/third-party/lwip-2.1.2/core/ipv4/etharp.c b/third-party/lwip-2.1.2/core/ipv4/etharp.c
deleted file mode 100644
index 442aac08aac7798995fe3818e8ed422e1496285c..0000000000000000000000000000000000000000
--- a/third-party/lwip-2.1.2/core/ipv4/etharp.c
+++ /dev/null
@@ -1,1204 +0,0 @@
-/**
- * @file
- * Address Resolution Protocol module for IP over Ethernet
- *
- * Functionally, ARP is divided into two parts. The first maps an IP address
- * to a physical address when sending a packet, and the second part answers
- * requests from other machines for our physical address.
- *
- * This implementation complies with RFC 826 (Ethernet ARP). It supports
- * Gratuitious ARP from RFC3220 (IP Mobility Support for IPv4) section 4.6
- * if an interface calls etharp_gratuitous(our_netif) upon address change.
- */
-
-/*
- * Copyright (c) 2001-2003 Swedish Institute of Computer Science.
- * Copyright (c) 2003-2004 Leon Woestenberg
- * Copyright (c) 2003-2004 Axon Digital Design B.V., The Netherlands.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
- * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
- * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
- * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
- * OF SUCH DAMAGE.
- *
- * This file is part of the lwIP TCP/IP stack.
- *
- */
-
-#include "lwip/opt.h"
-
-#if LWIP_IPV4 && LWIP_ARP /* don't build if not configured for use in lwipopts.h */
-
-#include "lwip/etharp.h"
-#include "lwip/stats.h"
-#include "lwip/snmp.h"
-#include "lwip/dhcp.h"
-#include "lwip/autoip.h"
-#include "lwip/prot/iana.h"
-#include "netif/ethernet.h"
-
-#include
-
-#ifdef LWIP_HOOK_FILENAME
-#include LWIP_HOOK_FILENAME
-#endif
-
-/** Re-request a used ARP entry 1 minute before it would expire to prevent
- * breaking a steadily used connection because the ARP entry timed out. */
-#define ARP_AGE_REREQUEST_USED_UNICAST (ARP_MAXAGE - 30)
-#define ARP_AGE_REREQUEST_USED_BROADCAST (ARP_MAXAGE - 15)
-
-/** the time an ARP entry stays pending after first request,
- * for ARP_TMR_INTERVAL = 1000, this is
- * 10 seconds.
- *
- * @internal Keep this number at least 2, otherwise it might
- * run out instantly if the timeout occurs directly after a request.
- */
-#define ARP_MAXPENDING 5
-
-/** ARP states */
-enum etharp_state {
- ETHARP_STATE_EMPTY = 0,
- ETHARP_STATE_PENDING,
- ETHARP_STATE_STABLE,
- ETHARP_STATE_STABLE_REREQUESTING_1,
- ETHARP_STATE_STABLE_REREQUESTING_2
-#if ETHARP_SUPPORT_STATIC_ENTRIES
- , ETHARP_STATE_STATIC
-#endif /* ETHARP_SUPPORT_STATIC_ENTRIES */
-};
-
-struct etharp_entry {
-#if ARP_QUEUEING
- /** Pointer to queue of pending outgoing packets on this ARP entry. */
- struct etharp_q_entry *q;
-#else /* ARP_QUEUEING */
- /** Pointer to a single pending outgoing packet on this ARP entry. */
- struct pbuf *q;
-#endif /* ARP_QUEUEING */
- ip4_addr_t ipaddr;
- struct netif *netif;
- struct eth_addr ethaddr;
- u16_t ctime;
- u8_t state;
-};
-
-static struct etharp_entry arp_table[ARP_TABLE_SIZE];
-
-#if !LWIP_NETIF_HWADDRHINT
-static netif_addr_idx_t etharp_cached_entry;
-#endif /* !LWIP_NETIF_HWADDRHINT */
-
-/** Try hard to create a new entry - we want the IP address to appear in
- the cache (even if this means removing an active entry or so). */
-#define ETHARP_FLAG_TRY_HARD 1
-#define ETHARP_FLAG_FIND_ONLY 2
-#if ETHARP_SUPPORT_STATIC_ENTRIES
-#define ETHARP_FLAG_STATIC_ENTRY 4
-#endif /* ETHARP_SUPPORT_STATIC_ENTRIES */
-
-#if LWIP_NETIF_HWADDRHINT
-#define ETHARP_SET_ADDRHINT(netif, addrhint) do { if (((netif) != NULL) && ((netif)->hints != NULL)) { \
- (netif)->hints->addr_hint = (addrhint); }} while(0)
-#else /* LWIP_NETIF_HWADDRHINT */
-#define ETHARP_SET_ADDRHINT(netif, addrhint) (etharp_cached_entry = (addrhint))
-#endif /* LWIP_NETIF_HWADDRHINT */
-
-
-/* Check for maximum ARP_TABLE_SIZE */
-#if (ARP_TABLE_SIZE > NETIF_ADDR_IDX_MAX)
-#error "ARP_TABLE_SIZE must fit in an s16_t, you have to reduce it in your lwipopts.h"
-#endif
-
-
-static err_t etharp_request_dst(struct netif *netif, const ip4_addr_t *ipaddr, const struct eth_addr *hw_dst_addr);
-static err_t etharp_raw(struct netif *netif,
- const struct eth_addr *ethsrc_addr, const struct eth_addr *ethdst_addr,
- const struct eth_addr *hwsrc_addr, const ip4_addr_t *ipsrc_addr,
- const struct eth_addr *hwdst_addr, const ip4_addr_t *ipdst_addr,
- const u16_t opcode);
-
-#if ARP_QUEUEING
-/**
- * Free a complete queue of etharp entries
- *
- * @param q a qeueue of etharp_q_entry's to free
- */
-static void
-free_etharp_q(struct etharp_q_entry *q)
-{
- struct etharp_q_entry *r;
- LWIP_ASSERT("q != NULL", q != NULL);
- while (q) {
- r = q;
- q = q->next;
- LWIP_ASSERT("r->p != NULL", (r->p != NULL));
- pbuf_free(r->p);
- memp_free(MEMP_ARP_QUEUE, r);
- }
-}
-#else /* ARP_QUEUEING */
-
-/** Compatibility define: free the queued pbuf */
-#define free_etharp_q(q) pbuf_free(q)
-
-#endif /* ARP_QUEUEING */
-
-/** Clean up ARP table entries */
-static void
-etharp_free_entry(int i)
-{
- /* remove from SNMP ARP index tree */
- mib2_remove_arp_entry(arp_table[i].netif, &arp_table[i].ipaddr);
- /* and empty packet queue */
- if (arp_table[i].q != NULL) {
- /* remove all queued packets */
- LWIP_DEBUGF(ETHARP_DEBUG, ("etharp_free_entry: freeing entry %"U16_F", packet queue %p.\n", (u16_t)i, (void *)(arp_table[i].q)));
- free_etharp_q(arp_table[i].q);
- arp_table[i].q = NULL;
- }
- /* recycle entry for re-use */
- arp_table[i].state = ETHARP_STATE_EMPTY;
-#ifdef LWIP_DEBUG
- /* for debugging, clean out the complete entry */
- arp_table[i].ctime = 0;
- arp_table[i].netif = NULL;
- ip4_addr_set_zero(&arp_table[i].ipaddr);
- arp_table[i].ethaddr = ethzero;
-#endif /* LWIP_DEBUG */
-}
-
-/**
- * Clears expired entries in the ARP table.
- *
- * This function should be called every ARP_TMR_INTERVAL milliseconds (1 second),
- * in order to expire entries in the ARP table.
- */
-void
-etharp_tmr(void)
-{
- int i;
-
- LWIP_DEBUGF(ETHARP_DEBUG, ("etharp_timer\n"));
- /* remove expired entries from the ARP table */
- for (i = 0; i < ARP_TABLE_SIZE; ++i) {
- u8_t state = arp_table[i].state;
- if (state != ETHARP_STATE_EMPTY
-#if ETHARP_SUPPORT_STATIC_ENTRIES
- && (state != ETHARP_STATE_STATIC)
-#endif /* ETHARP_SUPPORT_STATIC_ENTRIES */
- ) {
- arp_table[i].ctime++;
- if ((arp_table[i].ctime >= ARP_MAXAGE) ||
- ((arp_table[i].state == ETHARP_STATE_PENDING) &&
- (arp_table[i].ctime >= ARP_MAXPENDING))) {
- /* pending or stable entry has become old! */
- LWIP_DEBUGF(ETHARP_DEBUG, ("etharp_timer: expired %s entry %d.\n",
- arp_table[i].state >= ETHARP_STATE_STABLE ? "stable" : "pending", i));
- /* clean up entries that have just been expired */
- etharp_free_entry(i);
- } else if (arp_table[i].state == ETHARP_STATE_STABLE_REREQUESTING_1) {
- /* Don't send more than one request every 2 seconds. */
- arp_table[i].state = ETHARP_STATE_STABLE_REREQUESTING_2;
- } else if (arp_table[i].state == ETHARP_STATE_STABLE_REREQUESTING_2) {
- /* Reset state to stable, so that the next transmitted packet will
- re-send an ARP request. */
- arp_table[i].state = ETHARP_STATE_STABLE;
- } else if (arp_table[i].state == ETHARP_STATE_PENDING) {
- /* still pending, resend an ARP query */
- etharp_request(arp_table[i].netif, &arp_table[i].ipaddr);
- }
- }
- }
-}
-
-/**
- * Search the ARP table for a matching or new entry.
- *
- * If an IP address is given, return a pending or stable ARP entry that matches
- * the address. If no match is found, create a new entry with this address set,
- * but in state ETHARP_EMPTY. The caller must check and possibly change the
- * state of the returned entry.
- *
- * If ipaddr is NULL, return a initialized new entry in state ETHARP_EMPTY.
- *
- * In all cases, attempt to create new entries from an empty entry. If no
- * empty entries are available and ETHARP_FLAG_TRY_HARD flag is set, recycle
- * old entries. Heuristic choose the least important entry for recycling.
- *
- * @param ipaddr IP address to find in ARP cache, or to add if not found.
- * @param flags See @ref etharp_state
- * @param netif netif related to this address (used for NETIF_HWADDRHINT)
- *
- * @return The ARP entry index that matched or is created, ERR_MEM if no
- * entry is found or could be recycled.
- */
-static s16_t
-etharp_find_entry(const ip4_addr_t *ipaddr, u8_t flags, struct netif *netif)
-{
- s16_t old_pending = ARP_TABLE_SIZE, old_stable = ARP_TABLE_SIZE;
- s16_t empty = ARP_TABLE_SIZE;
- s16_t i = 0;
- /* oldest entry with packets on queue */
- s16_t old_queue = ARP_TABLE_SIZE;
- /* its age */
- u16_t age_queue = 0, age_pending = 0, age_stable = 0;
-
- LWIP_UNUSED_ARG(netif);
-
- /**
- * a) do a search through the cache, remember candidates
- * b) select candidate entry
- * c) create new entry
- */
-
- /* a) in a single search sweep, do all of this
- * 1) remember the first empty entry (if any)
- * 2) remember the oldest stable entry (if any)
- * 3) remember the oldest pending entry without queued packets (if any)
- * 4) remember the oldest pending entry with queued packets (if any)
- * 5) search for a matching IP entry, either pending or stable
- * until 5 matches, or all entries are searched for.
- */
-
- for (i = 0; i < ARP_TABLE_SIZE; ++i) {
- u8_t state = arp_table[i].state;
- /* no empty entry found yet and now we do find one? */
- if ((empty == ARP_TABLE_SIZE) && (state == ETHARP_STATE_EMPTY)) {
- LWIP_DEBUGF(ETHARP_DEBUG, ("etharp_find_entry: found empty entry %d\n", (int)i));
- /* remember first empty entry */
- empty = i;
- } else if (state != ETHARP_STATE_EMPTY) {
- LWIP_ASSERT("state == ETHARP_STATE_PENDING || state >= ETHARP_STATE_STABLE",
- state == ETHARP_STATE_PENDING || state >= ETHARP_STATE_STABLE);
- /* if given, does IP address match IP address in ARP entry? */
- if (ipaddr && ip4_addr_cmp(ipaddr, &arp_table[i].ipaddr)
-#if ETHARP_TABLE_MATCH_NETIF
- && ((netif == NULL) || (netif == arp_table[i].netif))
-#endif /* ETHARP_TABLE_MATCH_NETIF */
- ) {
- LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_find_entry: found matching entry %d\n", (int)i));
- /* found exact IP address match, simply bail out */
- return i;
- }
- /* pending entry? */
- if (state == ETHARP_STATE_PENDING) {
- /* pending with queued packets? */
- if (arp_table[i].q != NULL) {
- if (arp_table[i].ctime >= age_queue) {
- old_queue = i;
- age_queue = arp_table[i].ctime;
- }
- } else
- /* pending without queued packets? */
- {
- if (arp_table[i].ctime >= age_pending) {
- old_pending = i;
- age_pending = arp_table[i].ctime;
- }
- }
- /* stable entry? */
- } else if (state >= ETHARP_STATE_STABLE) {
-#if ETHARP_SUPPORT_STATIC_ENTRIES
- /* don't record old_stable for static entries since they never expire */
- if (state < ETHARP_STATE_STATIC)
-#endif /* ETHARP_SUPPORT_STATIC_ENTRIES */
- {
- /* remember entry with oldest stable entry in oldest, its age in maxtime */
- if (arp_table[i].ctime >= age_stable) {
- old_stable = i;
- age_stable = arp_table[i].ctime;
- }
- }
- }
- }
- }
- /* { we have no match } => try to create a new entry */
-
- /* don't create new entry, only search? */
- if (((flags & ETHARP_FLAG_FIND_ONLY) != 0) ||
- /* or no empty entry found and not allowed to recycle? */
- ((empty == ARP_TABLE_SIZE) && ((flags & ETHARP_FLAG_TRY_HARD) == 0))) {
- LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_find_entry: no empty entry found and not allowed to recycle\n"));
- return (s16_t)ERR_MEM;
- }
-
- /* b) choose the least destructive entry to recycle:
- * 1) empty entry
- * 2) oldest stable entry
- * 3) oldest pending entry without queued packets
- * 4) oldest pending entry with queued packets
- *
- * { ETHARP_FLAG_TRY_HARD is set at this point }
- */
-
- /* 1) empty entry available? */
- if (empty < ARP_TABLE_SIZE) {
- i = empty;
- LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_find_entry: selecting empty entry %d\n", (int)i));
- } else {
- /* 2) found recyclable stable entry? */
- if (old_stable < ARP_TABLE_SIZE) {
- /* recycle oldest stable*/
- i = old_stable;
- LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_find_entry: selecting oldest stable entry %d\n", (int)i));
- /* no queued packets should exist on stable entries */
- LWIP_ASSERT("arp_table[i].q == NULL", arp_table[i].q == NULL);
- /* 3) found recyclable pending entry without queued packets? */
- } else if (old_pending < ARP_TABLE_SIZE) {
- /* recycle oldest pending */
- i = old_pending;
- LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_find_entry: selecting oldest pending entry %d (without queue)\n", (int)i));
- /* 4) found recyclable pending entry with queued packets? */
- } else if (old_queue < ARP_TABLE_SIZE) {
- /* recycle oldest pending (queued packets are free in etharp_free_entry) */
- i = old_queue;
- LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_find_entry: selecting oldest pending entry %d, freeing packet queue %p\n", (int)i, (void *)(arp_table[i].q)));
- /* no empty or recyclable entries found */
- } else {
- LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_find_entry: no empty or recyclable entries found\n"));
- return (s16_t)ERR_MEM;
- }
-
- /* { empty or recyclable entry found } */
- LWIP_ASSERT("i < ARP_TABLE_SIZE", i < ARP_TABLE_SIZE);
- etharp_free_entry(i);
- }
-
- LWIP_ASSERT("i < ARP_TABLE_SIZE", i < ARP_TABLE_SIZE);
- LWIP_ASSERT("arp_table[i].state == ETHARP_STATE_EMPTY",
- arp_table[i].state == ETHARP_STATE_EMPTY);
-
- /* IP address given? */
- if (ipaddr != NULL) {
- /* set IP address */
- ip4_addr_copy(arp_table[i].ipaddr, *ipaddr);
- }
- arp_table[i].ctime = 0;
-#if ETHARP_TABLE_MATCH_NETIF
- arp_table[i].netif = netif;
-#endif /* ETHARP_TABLE_MATCH_NETIF */
- return (s16_t)i;
-}
-
-/**
- * Update (or insert) a IP/MAC address pair in the ARP cache.
- *
- * If a pending entry is resolved, any queued packets will be sent
- * at this point.
- *
- * @param netif netif related to this entry (used for NETIF_ADDRHINT)
- * @param ipaddr IP address of the inserted ARP entry.
- * @param ethaddr Ethernet address of the inserted ARP entry.
- * @param flags See @ref etharp_state
- *
- * @return
- * - ERR_OK Successfully updated ARP cache.
- * - ERR_MEM If we could not add a new ARP entry when ETHARP_FLAG_TRY_HARD was set.
- * - ERR_ARG Non-unicast address given, those will not appear in ARP cache.
- *
- * @see pbuf_free()
- */
-static err_t
-etharp_update_arp_entry(struct netif *netif, const ip4_addr_t *ipaddr, struct eth_addr *ethaddr, u8_t flags)
-{
- s16_t i;
- LWIP_ASSERT("netif->hwaddr_len == ETH_HWADDR_LEN", netif->hwaddr_len == ETH_HWADDR_LEN);
- LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_update_arp_entry: %"U16_F".%"U16_F".%"U16_F".%"U16_F" - %02"X16_F":%02"X16_F":%02"X16_F":%02"X16_F":%02"X16_F":%02"X16_F"\n",
- ip4_addr1_16(ipaddr), ip4_addr2_16(ipaddr), ip4_addr3_16(ipaddr), ip4_addr4_16(ipaddr),
- (u16_t)ethaddr->addr[0], (u16_t)ethaddr->addr[1], (u16_t)ethaddr->addr[2],
- (u16_t)ethaddr->addr[3], (u16_t)ethaddr->addr[4], (u16_t)ethaddr->addr[5]));
- /* non-unicast address? */
- if (ip4_addr_isany(ipaddr) ||
- ip4_addr_isbroadcast(ipaddr, netif) ||
- ip4_addr_ismulticast(ipaddr)) {
- LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_update_arp_entry: will not add non-unicast IP address to ARP cache\n"));
- return ERR_ARG;
- }
- /* find or create ARP entry */
- i = etharp_find_entry(ipaddr, flags, netif);
- /* bail out if no entry could be found */
- if (i < 0) {
- return (err_t)i;
- }
-
-#if ETHARP_SUPPORT_STATIC_ENTRIES
- if (flags & ETHARP_FLAG_STATIC_ENTRY) {
- /* record static type */
- arp_table[i].state = ETHARP_STATE_STATIC;
- } else if (arp_table[i].state == ETHARP_STATE_STATIC) {
- /* found entry is a static type, don't overwrite it */
- return ERR_VAL;
- } else
-#endif /* ETHARP_SUPPORT_STATIC_ENTRIES */
- {
- /* mark it stable */
- arp_table[i].state = ETHARP_STATE_STABLE;
- }
-
- /* record network interface */
- arp_table[i].netif = netif;
- /* insert in SNMP ARP index tree */
- mib2_add_arp_entry(netif, &arp_table[i].ipaddr);
-
- LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_update_arp_entry: updating stable entry %"S16_F"\n", i));
- /* update address */
- SMEMCPY(&arp_table[i].ethaddr, ethaddr, ETH_HWADDR_LEN);
- /* reset time stamp */
- arp_table[i].ctime = 0;
- /* this is where we will send out queued packets! */
-#if ARP_QUEUEING
- while (arp_table[i].q != NULL) {
- struct pbuf *p;
- /* remember remainder of queue */
- struct etharp_q_entry *q = arp_table[i].q;
- /* pop first item off the queue */
- arp_table[i].q = q->next;
- /* get the packet pointer */
- p = q->p;
- /* now queue entry can be freed */
- memp_free(MEMP_ARP_QUEUE, q);
-#else /* ARP_QUEUEING */
- if (arp_table[i].q != NULL) {
- struct pbuf *p = arp_table[i].q;
- arp_table[i].q = NULL;
-#endif /* ARP_QUEUEING */
- /* send the queued IP packet */
- ethernet_output(netif, p, (struct eth_addr *)(netif->hwaddr), ethaddr, ETHTYPE_IP);
- /* free the queued IP packet */
- pbuf_free(p);
- }
- return ERR_OK;
-}
-
-#if ETHARP_SUPPORT_STATIC_ENTRIES
-/** Add a new static entry to the ARP table. If an entry exists for the
- * specified IP address, this entry is overwritten.
- * If packets are queued for the specified IP address, they are sent out.
- *
- * @param ipaddr IP address for the new static entry
- * @param ethaddr ethernet address for the new static entry
- * @return See return values of etharp_add_static_entry
- */
-err_t
-etharp_add_static_entry(const ip4_addr_t *ipaddr, struct eth_addr *ethaddr)
-{
- struct netif *netif;
- LWIP_ASSERT_CORE_LOCKED();
- LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_add_static_entry: %"U16_F".%"U16_F".%"U16_F".%"U16_F" - %02"X16_F":%02"X16_F":%02"X16_F":%02"X16_F":%02"X16_F":%02"X16_F"\n",
- ip4_addr1_16(ipaddr), ip4_addr2_16(ipaddr), ip4_addr3_16(ipaddr), ip4_addr4_16(ipaddr),
- (u16_t)ethaddr->addr[0], (u16_t)ethaddr->addr[1], (u16_t)ethaddr->addr[2],
- (u16_t)ethaddr->addr[3], (u16_t)ethaddr->addr[4], (u16_t)ethaddr->addr[5]));
-
- netif = ip4_route(ipaddr);
- if (netif == NULL) {
- return ERR_RTE;
- }
-
- return etharp_update_arp_entry(netif, ipaddr, ethaddr, ETHARP_FLAG_TRY_HARD | ETHARP_FLAG_STATIC_ENTRY);
-}
-
-/** Remove a static entry from the ARP table previously added with a call to
- * etharp_add_static_entry.
- *
- * @param ipaddr IP address of the static entry to remove
- * @return ERR_OK: entry removed
- * ERR_MEM: entry wasn't found
- * ERR_ARG: entry wasn't a static entry but a dynamic one
- */
-err_t
-etharp_remove_static_entry(const ip4_addr_t *ipaddr)
-{
- s16_t i;
- LWIP_ASSERT_CORE_LOCKED();
- LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_remove_static_entry: %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n",
- ip4_addr1_16(ipaddr), ip4_addr2_16(ipaddr), ip4_addr3_16(ipaddr), ip4_addr4_16(ipaddr)));
-
- /* find or create ARP entry */
- i = etharp_find_entry(ipaddr, ETHARP_FLAG_FIND_ONLY, NULL);
- /* bail out if no entry could be found */
- if (i < 0) {
- return (err_t)i;
- }
-
- if (arp_table[i].state != ETHARP_STATE_STATIC) {
- /* entry wasn't a static entry, cannot remove it */
- return ERR_ARG;
- }
- /* entry found, free it */
- etharp_free_entry(i);
- return ERR_OK;
-}
-#endif /* ETHARP_SUPPORT_STATIC_ENTRIES */
-
-/**
- * Remove all ARP table entries of the specified netif.
- *
- * @param netif points to a network interface
- */
-void
-etharp_cleanup_netif(struct netif *netif)
-{
- int i;
-
- for (i = 0; i < ARP_TABLE_SIZE; ++i) {
- u8_t state = arp_table[i].state;
- if ((state != ETHARP_STATE_EMPTY) && (arp_table[i].netif == netif)) {
- etharp_free_entry(i);
- }
- }
-}
-
-/**
- * Finds (stable) ethernet/IP address pair from ARP table
- * using interface and IP address index.
- * @note the addresses in the ARP table are in network order!
- *
- * @param netif points to interface index
- * @param ipaddr points to the (network order) IP address index
- * @param eth_ret points to return pointer
- * @param ip_ret points to return pointer
- * @return table index if found, -1 otherwise
- */
-ssize_t
-etharp_find_addr(struct netif *netif, const ip4_addr_t *ipaddr,
- struct eth_addr **eth_ret, const ip4_addr_t **ip_ret)
-{
- s16_t i;
-
- LWIP_ASSERT("eth_ret != NULL && ip_ret != NULL",
- eth_ret != NULL && ip_ret != NULL);
-
- LWIP_UNUSED_ARG(netif);
-
- i = etharp_find_entry(ipaddr, ETHARP_FLAG_FIND_ONLY, netif);
- if ((i >= 0) && (arp_table[i].state >= ETHARP_STATE_STABLE)) {
- *eth_ret = &arp_table[i].ethaddr;
- *ip_ret = &arp_table[i].ipaddr;
- return i;
- }
- return -1;
-}
-
-/**
- * Possibility to iterate over stable ARP table entries
- *
- * @param i entry number, 0 to ARP_TABLE_SIZE
- * @param ipaddr return value: IP address
- * @param netif return value: points to interface
- * @param eth_ret return value: ETH address
- * @return 1 on valid index, 0 otherwise
- */
-int
-etharp_get_entry(size_t i, ip4_addr_t **ipaddr, struct netif **netif, struct eth_addr **eth_ret)
-{
- LWIP_ASSERT("ipaddr != NULL", ipaddr != NULL);
- LWIP_ASSERT("netif != NULL", netif != NULL);
- LWIP_ASSERT("eth_ret != NULL", eth_ret != NULL);
-
- if ((i < ARP_TABLE_SIZE) && (arp_table[i].state >= ETHARP_STATE_STABLE)) {
- *ipaddr = &arp_table[i].ipaddr;
- *netif = arp_table[i].netif;
- *eth_ret = &arp_table[i].ethaddr;
- return 1;
- } else {
- return 0;
- }
-}
-
-/**
- * Responds to ARP requests to us. Upon ARP replies to us, add entry to cache
- * send out queued IP packets. Updates cache with snooped address pairs.
- *
- * Should be called for incoming ARP packets. The pbuf in the argument
- * is freed by this function.
- *
- * @param p The ARP packet that arrived on netif. Is freed by this function.
- * @param netif The lwIP network interface on which the ARP packet pbuf arrived.
- *
- * @see pbuf_free()
- */
-void
-etharp_input(struct pbuf *p, struct netif *netif)
-{
- struct etharp_hdr *hdr;
- /* these are aligned properly, whereas the ARP header fields might not be */
- ip4_addr_t sipaddr, dipaddr;
- u8_t for_us;
-
- LWIP_ASSERT_CORE_LOCKED();
-
- LWIP_ERROR("netif != NULL", (netif != NULL), return;);
-
- hdr = (struct etharp_hdr *)p->payload;
-
- /* RFC 826 "Packet Reception": */
- if ((hdr->hwtype != PP_HTONS(LWIP_IANA_HWTYPE_ETHERNET)) ||
- (hdr->hwlen != ETH_HWADDR_LEN) ||
- (hdr->protolen != sizeof(ip4_addr_t)) ||
- (hdr->proto != PP_HTONS(ETHTYPE_IP))) {
- LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING,
- ("etharp_input: packet dropped, wrong hw type, hwlen, proto, protolen or ethernet type (%"U16_F"/%"U16_F"/%"U16_F"/%"U16_F")\n",
- hdr->hwtype, (u16_t)hdr->hwlen, hdr->proto, (u16_t)hdr->protolen));
- ETHARP_STATS_INC(etharp.proterr);
- ETHARP_STATS_INC(etharp.drop);
- pbuf_free(p);
- return;
- }
- ETHARP_STATS_INC(etharp.recv);
-
-#if LWIP_AUTOIP
- /* We have to check if a host already has configured our random
- * created link local address and continuously check if there is
- * a host with this IP-address so we can detect collisions */
- autoip_arp_reply(netif, hdr);
-#endif /* LWIP_AUTOIP */
-
- /* Copy struct ip4_addr_wordaligned to aligned ip4_addr, to support compilers without
- * structure packing (not using structure copy which breaks strict-aliasing rules). */
- IPADDR_WORDALIGNED_COPY_TO_IP4_ADDR_T(&sipaddr, &hdr->sipaddr);
- IPADDR_WORDALIGNED_COPY_TO_IP4_ADDR_T(&dipaddr, &hdr->dipaddr);
-
- /* this interface is not configured? */
- if (ip4_addr_isany_val(*netif_ip4_addr(netif))) {
- for_us = 0;
- } else {
- /* ARP packet directed to us? */
- for_us = (u8_t)ip4_addr_cmp(&dipaddr, netif_ip4_addr(netif));
- }
-
- /* ARP message directed to us?
- -> add IP address in ARP cache; assume requester wants to talk to us,
- can result in directly sending the queued packets for this host.
- ARP message not directed to us?
- -> update the source IP address in the cache, if present */
- etharp_update_arp_entry(netif, &sipaddr, &(hdr->shwaddr),
- for_us ? ETHARP_FLAG_TRY_HARD : ETHARP_FLAG_FIND_ONLY);
-
- /* now act on the message itself */
- switch (hdr->opcode) {
- /* ARP request? */
- case PP_HTONS(ARP_REQUEST):
- /* ARP request. If it asked for our address, we send out a
- * reply. In any case, we time-stamp any existing ARP entry,
- * and possibly send out an IP packet that was queued on it. */
-
- LWIP_DEBUGF (ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_input: incoming ARP request\n"));
- /* ARP request for our address? */
- if (for_us) {
- /* send ARP response */
- etharp_raw(netif,
- (struct eth_addr *)netif->hwaddr, &hdr->shwaddr,
- (struct eth_addr *)netif->hwaddr, netif_ip4_addr(netif),
- &hdr->shwaddr, &sipaddr,
- ARP_REPLY);
- /* we are not configured? */
- } else if (ip4_addr_isany_val(*netif_ip4_addr(netif))) {
- /* { for_us == 0 and netif->ip_addr.addr == 0 } */
- LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_input: we are unconfigured, ARP request ignored.\n"));
- /* request was not directed to us */
- } else {
- /* { for_us == 0 and netif->ip_addr.addr != 0 } */
- LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_input: ARP request was not for us.\n"));
- }
- break;
- case PP_HTONS(ARP_REPLY):
- /* ARP reply. We already updated the ARP cache earlier. */
- LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_input: incoming ARP reply\n"));
-#if (LWIP_DHCP && DHCP_DOES_ARP_CHECK)
- /* DHCP wants to know about ARP replies from any host with an
- * IP address also offered to us by the DHCP server. We do not
- * want to take a duplicate IP address on a single network.
- * @todo How should we handle redundant (fail-over) interfaces? */
- dhcp_arp_reply(netif, &sipaddr);
-#endif /* (LWIP_DHCP && DHCP_DOES_ARP_CHECK) */
- break;
- default:
- LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_input: ARP unknown opcode type %"S16_F"\n", lwip_htons(hdr->opcode)));
- ETHARP_STATS_INC(etharp.err);
- break;
- }
- /* free ARP packet */
- pbuf_free(p);
-}
-
-/** Just a small helper function that sends a pbuf to an ethernet address
- * in the arp_table specified by the index 'arp_idx'.
- */
-static err_t
-etharp_output_to_arp_index(struct netif *netif, struct pbuf *q, netif_addr_idx_t arp_idx)
-{
- LWIP_ASSERT("arp_table[arp_idx].state >= ETHARP_STATE_STABLE",
- arp_table[arp_idx].state >= ETHARP_STATE_STABLE);
- /* if arp table entry is about to expire: re-request it,
- but only if its state is ETHARP_STATE_STABLE to prevent flooding the
- network with ARP requests if this address is used frequently. */
- if (arp_table[arp_idx].state == ETHARP_STATE_STABLE) {
- if (arp_table[arp_idx].ctime >= ARP_AGE_REREQUEST_USED_BROADCAST) {
- /* issue a standard request using broadcast */
- if (etharp_request(netif, &arp_table[arp_idx].ipaddr) == ERR_OK) {
- arp_table[arp_idx].state = ETHARP_STATE_STABLE_REREQUESTING_1;
- }
- } else if (arp_table[arp_idx].ctime >= ARP_AGE_REREQUEST_USED_UNICAST) {
- /* issue a unicast request (for 15 seconds) to prevent unnecessary broadcast */
- if (etharp_request_dst(netif, &arp_table[arp_idx].ipaddr, &arp_table[arp_idx].ethaddr) == ERR_OK) {
- arp_table[arp_idx].state = ETHARP_STATE_STABLE_REREQUESTING_1;
- }
- }
- }
-
- return ethernet_output(netif, q, (struct eth_addr *)(netif->hwaddr), &arp_table[arp_idx].ethaddr, ETHTYPE_IP);
-}
-
-/**
- * Resolve and fill-in Ethernet address header for outgoing IP packet.
- *
- * For IP multicast and broadcast, corresponding Ethernet addresses
- * are selected and the packet is transmitted on the link.
- *
- * For unicast addresses, the packet is submitted to etharp_query(). In
- * case the IP address is outside the local network, the IP address of
- * the gateway is used.
- *
- * @param netif The lwIP network interface which the IP packet will be sent on.
- * @param q The pbuf(s) containing the IP packet to be sent.
- * @param ipaddr The IP address of the packet destination.
- *
- * @return
- * - ERR_RTE No route to destination (no gateway to external networks),
- * or the return type of either etharp_query() or ethernet_output().
- */
-err_t
-etharp_output(struct netif *netif, struct pbuf *q, const ip4_addr_t *ipaddr)
-{
- const struct eth_addr *dest;
- struct eth_addr mcastaddr;
- const ip4_addr_t *dst_addr = ipaddr;
-
- LWIP_ASSERT_CORE_LOCKED();
- LWIP_ASSERT("netif != NULL", netif != NULL);
- LWIP_ASSERT("q != NULL", q != NULL);
- LWIP_ASSERT("ipaddr != NULL", ipaddr != NULL);
-
- /* Determine on destination hardware address. Broadcasts and multicasts
- * are special, other IP addresses are looked up in the ARP table. */
-
- /* broadcast destination IP address? */
- if (ip4_addr_isbroadcast(ipaddr, netif)) {
- /* broadcast on Ethernet also */
- dest = (const struct eth_addr *)ðbroadcast;
- /* multicast destination IP address? */
- } else if (ip4_addr_ismulticast(ipaddr)) {
- /* Hash IP multicast address to MAC address.*/
- mcastaddr.addr[0] = LL_IP4_MULTICAST_ADDR_0;
- mcastaddr.addr[1] = LL_IP4_MULTICAST_ADDR_1;
- mcastaddr.addr[2] = LL_IP4_MULTICAST_ADDR_2;
- mcastaddr.addr[3] = ip4_addr2(ipaddr) & 0x7f;
- mcastaddr.addr[4] = ip4_addr3(ipaddr);
- mcastaddr.addr[5] = ip4_addr4(ipaddr);
- /* destination Ethernet address is multicast */
- dest = &mcastaddr;
- /* unicast destination IP address? */
- } else {
- netif_addr_idx_t i;
- /* outside local network? if so, this can neither be a global broadcast nor
- a subnet broadcast. */
- if (!ip4_addr_netcmp(ipaddr, netif_ip4_addr(netif), netif_ip4_netmask(netif)) &&
- !ip4_addr_islinklocal(ipaddr)) {
-#if LWIP_AUTOIP
- struct ip_hdr *iphdr = LWIP_ALIGNMENT_CAST(struct ip_hdr *, q->payload);
- /* According to RFC 3297, chapter 2.6.2 (Forwarding Rules), a packet with
- a link-local source address must always be "directly to its destination
- on the same physical link. The host MUST NOT send the packet to any
- router for forwarding". */
- if (!ip4_addr_islinklocal(&iphdr->src))
-#endif /* LWIP_AUTOIP */
- {
-#ifdef LWIP_HOOK_ETHARP_GET_GW
- /* For advanced routing, a single default gateway might not be enough, so get
- the IP address of the gateway to handle the current destination address. */
- dst_addr = LWIP_HOOK_ETHARP_GET_GW(netif, ipaddr);
- if (dst_addr == NULL)
-#endif /* LWIP_HOOK_ETHARP_GET_GW */
- {
- /* interface has default gateway? */
- if (!ip4_addr_isany_val(*netif_ip4_gw(netif))) {
- /* send to hardware address of default gateway IP address */
- dst_addr = netif_ip4_gw(netif);
- /* no default gateway available */
- } else {
- /* no route to destination error (default gateway missing) */
- return ERR_RTE;
- }
- }
- }
- }
-#if LWIP_NETIF_HWADDRHINT
- if (netif->hints != NULL) {
- /* per-pcb cached entry was given */
- netif_addr_idx_t etharp_cached_entry = netif->hints->addr_hint;
- if (etharp_cached_entry < ARP_TABLE_SIZE) {
-#endif /* LWIP_NETIF_HWADDRHINT */
- if ((arp_table[etharp_cached_entry].state >= ETHARP_STATE_STABLE) &&
-#if ETHARP_TABLE_MATCH_NETIF
- (arp_table[etharp_cached_entry].netif == netif) &&
-#endif
- (ip4_addr_cmp(dst_addr, &arp_table[etharp_cached_entry].ipaddr))) {
- /* the per-pcb-cached entry is stable and the right one! */
- ETHARP_STATS_INC(etharp.cachehit);
- return etharp_output_to_arp_index(netif, q, etharp_cached_entry);
- }
-#if LWIP_NETIF_HWADDRHINT
- }
- }
-#endif /* LWIP_NETIF_HWADDRHINT */
-
- /* find stable entry: do this here since this is a critical path for
- throughput and etharp_find_entry() is kind of slow */
- for (i = 0; i < ARP_TABLE_SIZE; i++) {
- if ((arp_table[i].state >= ETHARP_STATE_STABLE) &&
-#if ETHARP_TABLE_MATCH_NETIF
- (arp_table[i].netif == netif) &&
-#endif
- (ip4_addr_cmp(dst_addr, &arp_table[i].ipaddr))) {
- /* found an existing, stable entry */
- ETHARP_SET_ADDRHINT(netif, i);
- return etharp_output_to_arp_index(netif, q, i);
- }
- }
- /* no stable entry found, use the (slower) query function:
- queue on destination Ethernet address belonging to ipaddr */
- return etharp_query(netif, dst_addr, q);
- }
-
- /* continuation for multicast/broadcast destinations */
- /* obtain source Ethernet address of the given interface */
- /* send packet directly on the link */
- return ethernet_output(netif, q, (struct eth_addr *)(netif->hwaddr), dest, ETHTYPE_IP);
-}
-
-/**
- * Send an ARP request for the given IP address and/or queue a packet.
- *
- * If the IP address was not yet in the cache, a pending ARP cache entry
- * is added and an ARP request is sent for the given address. The packet
- * is queued on this entry.
- *
- * If the IP address was already pending in the cache, a new ARP request
- * is sent for the given address. The packet is queued on this entry.
- *
- * If the IP address was already stable in the cache, and a packet is
- * given, it is directly sent and no ARP request is sent out.
- *
- * If the IP address was already stable in the cache, and no packet is
- * given, an ARP request is sent out.
- *
- * @param netif The lwIP network interface on which ipaddr
- * must be queried for.
- * @param ipaddr The IP address to be resolved.
- * @param q If non-NULL, a pbuf that must be delivered to the IP address.
- * q is not freed by this function.
- *
- * @note q must only be ONE packet, not a packet queue!
- *
- * @return
- * - ERR_BUF Could not make room for Ethernet header.
- * - ERR_MEM Hardware address unknown, and no more ARP entries available
- * to query for address or queue the packet.
- * - ERR_MEM Could not queue packet due to memory shortage.
- * - ERR_RTE No route to destination (no gateway to external networks).
- * - ERR_ARG Non-unicast address given, those will not appear in ARP cache.
- *
- */
-err_t
-etharp_query(struct netif *netif, const ip4_addr_t *ipaddr, struct pbuf *q)
-{
- struct eth_addr *srcaddr = (struct eth_addr *)netif->hwaddr;
- err_t result = ERR_MEM;
- int is_new_entry = 0;
- s16_t i_err;
- netif_addr_idx_t i;
-
- /* non-unicast address? */
- if (ip4_addr_isbroadcast(ipaddr, netif) ||
- ip4_addr_ismulticast(ipaddr) ||
- ip4_addr_isany(ipaddr)) {
- LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: will not add non-unicast IP address to ARP cache\n"));
- return ERR_ARG;
- }
-
- /* find entry in ARP cache, ask to create entry if queueing packet */
- i_err = etharp_find_entry(ipaddr, ETHARP_FLAG_TRY_HARD, netif);
-
- /* could not find or create entry? */
- if (i_err < 0) {
- LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: could not create ARP entry\n"));
- if (q) {
- LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: packet dropped\n"));
- ETHARP_STATS_INC(etharp.memerr);
- }
- return (err_t)i_err;
- }
- LWIP_ASSERT("type overflow", (size_t)i_err < NETIF_ADDR_IDX_MAX);
- i = (netif_addr_idx_t)i_err;
-
- /* mark a fresh entry as pending (we just sent a request) */
- if (arp_table[i].state == ETHARP_STATE_EMPTY) {
- is_new_entry = 1;
- arp_table[i].state = ETHARP_STATE_PENDING;
- /* record network interface for re-sending arp request in etharp_tmr */
- arp_table[i].netif = netif;
- }
-
- /* { i is either a STABLE or (new or existing) PENDING entry } */
- LWIP_ASSERT("arp_table[i].state == PENDING or STABLE",
- ((arp_table[i].state == ETHARP_STATE_PENDING) ||
- (arp_table[i].state >= ETHARP_STATE_STABLE)));
-
- /* do we have a new entry? or an implicit query request? */
- if (is_new_entry || (q == NULL)) {
- /* try to resolve it; send out ARP request */
- result = etharp_request(netif, ipaddr);
- if (result != ERR_OK) {
- /* ARP request couldn't be sent */
- /* We don't re-send arp request in etharp_tmr, but we still queue packets,
- since this failure could be temporary, and the next packet calling
- etharp_query again could lead to sending the queued packets. */
- }
- if (q == NULL) {
- return result;
- }
- }
-
- /* packet given? */
- LWIP_ASSERT("q != NULL", q != NULL);
- /* stable entry? */
- if (arp_table[i].state >= ETHARP_STATE_STABLE) {
- /* we have a valid IP->Ethernet address mapping */
- ETHARP_SET_ADDRHINT(netif, i);
- /* send the packet */
- result = ethernet_output(netif, q, srcaddr, &(arp_table[i].ethaddr), ETHTYPE_IP);
- /* pending entry? (either just created or already pending */
- } else if (arp_table[i].state == ETHARP_STATE_PENDING) {
- /* entry is still pending, queue the given packet 'q' */
- struct pbuf *p;
- int copy_needed = 0;
- /* IF q includes a pbuf that must be copied, copy the whole chain into a
- * new PBUF_RAM. See the definition of PBUF_NEEDS_COPY for details. */
- p = q;
- while (p) {
- LWIP_ASSERT("no packet queues allowed!", (p->len != p->tot_len) || (p->next == 0));
- if (PBUF_NEEDS_COPY(p)) {
- copy_needed = 1;
- break;
- }
- p = p->next;
- }
- if (copy_needed) {
- /* copy the whole packet into new pbufs */
- p = pbuf_clone(PBUF_LINK, PBUF_RAM, q);
- } else {
- /* referencing the old pbuf is enough */
- p = q;
- pbuf_ref(p);
- }
- /* packet could be taken over? */
- if (p != NULL) {
- /* queue packet ... */
-#if ARP_QUEUEING
- struct etharp_q_entry *new_entry;
- /* allocate a new arp queue entry */
- new_entry = (struct etharp_q_entry *)memp_malloc(MEMP_ARP_QUEUE);
- if (new_entry != NULL) {
- unsigned int qlen = 0;
- new_entry->next = 0;
- new_entry->p = p;
- if (arp_table[i].q != NULL) {
- /* queue was already existent, append the new entry to the end */
- struct etharp_q_entry *r;
- r = arp_table[i].q;
- qlen++;
- while (r->next != NULL) {
- r = r->next;
- qlen++;
- }
- r->next = new_entry;
- } else {
- /* queue did not exist, first item in queue */
- arp_table[i].q = new_entry;
- }
-#if ARP_QUEUE_LEN
- if (qlen >= ARP_QUEUE_LEN) {
- struct etharp_q_entry *old;
- old = arp_table[i].q;
- arp_table[i].q = arp_table[i].q->next;
- pbuf_free(old->p);
- memp_free(MEMP_ARP_QUEUE, old);
- }
-#endif
- LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: queued packet %p on ARP entry %"U16_F"\n", (void *)q, i));
- result = ERR_OK;
- } else {
- /* the pool MEMP_ARP_QUEUE is empty */
- pbuf_free(p);
- LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: could not queue a copy of PBUF_REF packet %p (out of memory)\n", (void *)q));
- result = ERR_MEM;
- }
-#else /* ARP_QUEUEING */
- /* always queue one packet per ARP request only, freeing a previously queued packet */
- if (arp_table[i].q != NULL) {
- LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: dropped previously queued packet %p for ARP entry %"U16_F"\n", (void *)q, (u16_t)i));
- pbuf_free(arp_table[i].q);
- }
- arp_table[i].q = p;
- result = ERR_OK;
- LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: queued packet %p on ARP entry %"U16_F"\n", (void *)q, (u16_t)i));
-#endif /* ARP_QUEUEING */
- } else {
- ETHARP_STATS_INC(etharp.memerr);
- LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: could not queue a copy of PBUF_REF packet %p (out of memory)\n", (void *)q));
- result = ERR_MEM;
- }
- }
- return result;
-}
-
-/**
- * Send a raw ARP packet (opcode and all addresses can be modified)
- *
- * @param netif the lwip network interface on which to send the ARP packet
- * @param ethsrc_addr the source MAC address for the ethernet header
- * @param ethdst_addr the destination MAC address for the ethernet header
- * @param hwsrc_addr the source MAC address for the ARP protocol header
- * @param ipsrc_addr the source IP address for the ARP protocol header
- * @param hwdst_addr the destination MAC address for the ARP protocol header
- * @param ipdst_addr the destination IP address for the ARP protocol header
- * @param opcode the type of the ARP packet
- * @return ERR_OK if the ARP packet has been sent
- * ERR_MEM if the ARP packet couldn't be allocated
- * any other err_t on failure
- */
-static err_t
-etharp_raw(struct netif *netif, const struct eth_addr *ethsrc_addr,
- const struct eth_addr *ethdst_addr,
- const struct eth_addr *hwsrc_addr, const ip4_addr_t *ipsrc_addr,
- const struct eth_addr *hwdst_addr, const ip4_addr_t *ipdst_addr,
- const u16_t opcode)
-{
- struct pbuf *p;
- err_t result = ERR_OK;
- struct etharp_hdr *hdr;
-
- LWIP_ASSERT("netif != NULL", netif != NULL);
-
- /* allocate a pbuf for the outgoing ARP request packet */
- p = pbuf_alloc(PBUF_LINK, SIZEOF_ETHARP_HDR, PBUF_RAM);
- /* could allocate a pbuf for an ARP request? */
- if (p == NULL) {
- LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS,
- ("etharp_raw: could not allocate pbuf for ARP request.\n"));
- ETHARP_STATS_INC(etharp.memerr);
- return ERR_MEM;
- }
- LWIP_ASSERT("check that first pbuf can hold struct etharp_hdr",
- (p->len >= SIZEOF_ETHARP_HDR));
-
- hdr = (struct etharp_hdr *)p->payload;
- LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_raw: sending raw ARP packet.\n"));
- hdr->opcode = lwip_htons(opcode);
-
- LWIP_ASSERT("netif->hwaddr_len must be the same as ETH_HWADDR_LEN for etharp!",
- (netif->hwaddr_len == ETH_HWADDR_LEN));
-
- /* Write the ARP MAC-Addresses */
- SMEMCPY(&hdr->shwaddr, hwsrc_addr, ETH_HWADDR_LEN);
- SMEMCPY(&hdr->dhwaddr, hwdst_addr, ETH_HWADDR_LEN);
- /* Copy struct ip4_addr_wordaligned to aligned ip4_addr, to support compilers without
- * structure packing. */
- IPADDR_WORDALIGNED_COPY_FROM_IP4_ADDR_T(&hdr->sipaddr, ipsrc_addr);
- IPADDR_WORDALIGNED_COPY_FROM_IP4_ADDR_T(&hdr->dipaddr, ipdst_addr);
-
- hdr->hwtype = PP_HTONS(LWIP_IANA_HWTYPE_ETHERNET);
- hdr->proto = PP_HTONS(ETHTYPE_IP);
- /* set hwlen and protolen */
- hdr->hwlen = ETH_HWADDR_LEN;
- hdr->protolen = sizeof(ip4_addr_t);
-
- /* send ARP query */
-#if LWIP_AUTOIP
- /* If we are using Link-Local, all ARP packets that contain a Link-Local
- * 'sender IP address' MUST be sent using link-layer broadcast instead of
- * link-layer unicast. (See RFC3927 Section 2.5, last paragraph) */
- if (ip4_addr_islinklocal(ipsrc_addr)) {
- ethernet_output(netif, p, ethsrc_addr, ðbroadcast, ETHTYPE_ARP);
- } else
-#endif /* LWIP_AUTOIP */
- {
- ethernet_output(netif, p, ethsrc_addr, ethdst_addr, ETHTYPE_ARP);
- }
-
- ETHARP_STATS_INC(etharp.xmit);
- /* free ARP query packet */
- pbuf_free(p);
- p = NULL;
- /* could not allocate pbuf for ARP request */
-
- return result;
-}
-
-/**
- * Send an ARP request packet asking for ipaddr to a specific eth address.
- * Used to send unicast request to refresh the ARP table just before an entry
- * times out
- *
- * @param netif the lwip network interface on which to send the request
- * @param ipaddr the IP address for which to ask
- * @param hw_dst_addr the ethernet address to send this packet to
- * @return ERR_OK if the request has been sent
- * ERR_MEM if the ARP packet couldn't be allocated
- * any other err_t on failure
- */
-static err_t
-etharp_request_dst(struct netif *netif, const ip4_addr_t *ipaddr, const struct eth_addr *hw_dst_addr)
-{
- return etharp_raw(netif, (struct eth_addr *)netif->hwaddr, hw_dst_addr,
- (struct eth_addr *)netif->hwaddr, netif_ip4_addr(netif), ðzero,
- ipaddr, ARP_REQUEST);
-}
-
-/**
- * Send an ARP request packet asking for ipaddr.
- *
- * @param netif the lwip network interface on which to send the request
- * @param ipaddr the IP address for which to ask
- * @return ERR_OK if the request has been sent
- * ERR_MEM if the ARP packet couldn't be allocated
- * any other err_t on failure
- */
-err_t
-etharp_request(struct netif *netif, const ip4_addr_t *ipaddr)
-{
- LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_request: sending ARP request.\n"));
- return etharp_request_dst(netif, ipaddr, ðbroadcast);
-}
-
-#endif /* LWIP_IPV4 && LWIP_ARP */
diff --git a/third-party/lwip-2.1.2/core/ipv4/icmp.c b/third-party/lwip-2.1.2/core/ipv4/icmp.c
deleted file mode 100644
index 9dcdf6c8e4bcb145b45eb1a73cea93023bc470f5..0000000000000000000000000000000000000000
--- a/third-party/lwip-2.1.2/core/ipv4/icmp.c
+++ /dev/null
@@ -1,404 +0,0 @@
-/**
- * @file
- * ICMP - Internet Control Message Protocol
- *
- */
-
-/*
- * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
- * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
- * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
- * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
- * OF SUCH DAMAGE.
- *
- * This file is part of the lwIP TCP/IP stack.
- *
- * Author: Adam Dunkels