打印
[单片机芯片]

基于CH32F103的DAC播放WAV功能

[复制链接]
2417|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tpgf|  楼主 | 2024-5-7 09:30 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
一、理论
1.1 DAC理论
数字信号转化为电压信号,实现扬声器不同频率的发声。

12位DAC,表达范围0-4095

1.2音频wav理论
1.2.1 wav文件格式解析
wav 文件一般由3个区块组成:RIFF chunk、Format chunk 和 Data chunk。
RIFF chunk:主要说明本文件保存的是什么内容。
Formt chunk:主要说明音频文件的格式
Data chunk:主要记录音频的数据

(1)RIFF chunk

ID 固定死,填入 RIFF ,作为标识。
Size 为文件长度减去 ID 和 Size 的长度,即 fileSize - 8
Type 如果是 WAVE,表示后面有 Format chunk 和 Data chunk。

(2) Format chunk

ID 固定死为 "fmt "(最后有个空格)
Size 表示该区块,后面内容的长度 2+2+4+4+2+2 = 16
AudioFormat 表示音频格式,如果是 PCM,则填入 1
NumChannels 表示声道数
SampleRate 表示采样率
ByteRate 每秒数据字节数 SampleRateNumChannelsBitsPerSample/8
BlockAlign 每次采样产生的字节数 NumChannels*BitPerSample/8
BitsPerSample 一个声道一次采样的位数

(3) Data chunk

ID 固定死为 data
Size 表示数据的长度(字节),N = ByteRate*seconds
Data 音频数据

所谓的大端模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;
所谓的小端模式,是指数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中。

大端符合人阅读常识。比如 1234,其中 1是数据的高位,4是数据的地位。如果用大端存储,则存在内存中为 1234;如果用小段存储,则存在内存中未 4321。

具体怎么解析看下面的内容

二、wav文件解析及数据的播放
2.1 wav头解析
typedef  struct{
    char                chunkID[4];//大端  “RIFF”    4952    4646 0x52494646
    uint32_t        size;//4144    0000 文件大小  +8 是总文件大小  从下个地址开始到文件末尾的总字节数
    char                type[4];//大端  'WAVE'    4157    4556   0x57415645
}HeaderChunk;
typedef struct {
    char                         id[4];//大端     'fmt  '   波形格式  6d66    2074          0x666d7420
    //Size 表示该区块,后面内容的长度 2+2+4+4+2+2 = 16
    uint32_t                size;//小端     格式大小:16     0010    0000  = 0000 0010  
    uint16_t                AudioFormat;//小端    0001    AudioFormat 表示音频格式,如果是 PCM,则填入 1
    uint16_t                NumChannels;//小端           单声道      0001
    uint32_t                SampleRate;//小端               采样率       1f40    0000 = 0x1f40 =8000
    // 3e80    0000 = 16000
    uint32_t                ByteRate;//小端   每秒数据字节数 SampleRateNumChannelsBitsPerSample/8

    uint16_t                BlockAlign;//小端     每次采样产生的字节数     0002 =2
    uint16_t                BitsPerSample;//小端  位深   一个声道一次采样的位数
} FormatChunk;

typedef struct {
    char     id[4];//数据标识符         ID 固定死为 data     494c    5453
    uint32_t size;//data总数据长度     0298    0000   这个结果也不对啊
} DataChunk;

后面跟的数据就是我的wav文件的实际数据。在linux系统下,可以用如下命令将wav文件导入到txt中查看:

hexdump -x my.wav >a.txt

截取部分展示如下:

0000000    4952    4646    4144    0000    4157    4556    6d66    2074
0000010    0010    0000    0001    0001    1f40    0000    3e80    0000
0000020    0002    0010    494c    5453    0298    0000    4e49    4f46
0000030    4149    5452    000a    0000    9ee6    e497    8abf    9de6
0000040    00b0    4349    544d    022f    0000    3631    2033    656b
0000050    2879    6f44    276e    2074    6f6d    6964    7966    3a29
0000060    364c    4634    3355    3457    7859    3358    465a    6d54
0000070    5a62    382b    5a2f    5536    6f44    3137    5167    4336
0000080    446c    4f46    536d    4636    566b    6768    5872    6666
0000090    7530    7562    7854    7870    7943    586b    6973    5463
00000a0    2f4a    4245    5573    4930    7875    594f    5a58    5167
00000b0    3365    326f    3542    2f37    3378    3454    5a4d    4744
00000c0    4b7a    5a47    6232    7a35    5558    6b41    784e    5941
00000d0    574d    4d5a    6d6a    4d70    4c51    326b    3753    6737
00000e0    534b    4145    766b    6531    6179    5047    6c4e    2b49
00000f0    5748    5233    4474    7038    4839    6175    2b79    3764
0000100    4d32    6874    317a    7a35    5433    3465    4e61    7935
0000110    7469    457a    3070    642f    3378    7342    6d45    3056
0000120    7166    5853    5343    3475    7737    505a    702f    7076
0000130    4165    7232    694f    792f    384e    6175    4952    7141
0000140    4950    364d    3162    726a    706f    3541    5277    366b

头的解析

FILE* fp = fopen("my.wav", "rb");
    if (!fp) {
        printf("Failed to open file!\n");
        return -1;
    }
    HeaderChunk header;
    fread(&header, sizeof(header), 1, fp);
    FormatChunk fmt;
    fread(&fmt, sizeof(fmt), 1, fp);
    DataChunk data;
    fread(&data, sizeof(data), 1, fp);
    printf("标识ID:%c%c%c%c\n",header.chunkID[0],header.chunkID[1],header.chunkID[2],header.chunkID[3]);
    printf("文件总长:%d\n",header.size + 8);//文件总长
    printf("Type :%c%c%c%c\n",header.type[0],header.type[1],header.type[2],header.type[3]);
    printf("ID :%c%c%c%c\n",fmt.id[0],fmt.id[1],fmt.id[2],fmt.id[3]);
    printf("Size:%d\n",fmt.size);//Size 表示该区块,后面内容的长度 2+2+4+4+2+2 = 16
    printf("音频格式:%d\n",fmt.AudioFormat);
    printf("声道:%d\n",fmt.NumChannels);
    printf("采样率:%d\n",fmt.SampleRate);
    printf("每秒数据字节数:%d\n",fmt.ByteRate);
    printf("每次采样产生的字节数:%d\n",fmt.BlockAlign);
    printf("一个声道一次采样的位数:%d\n",fmt.BitsPerSample);
    printf("%c%c%c%c\n",data.id[0],data.id[1],data.id[2],data.id[3]);
    printf("%d\n",data.size);

2.2 实际数据的解析并将数组写入文件中
     int32_t length =header.size + 8 - 44;
    //length = fmt.ByteRate;
    FILE* fp1 = fopen("data.txt", "w");
    int16_t* audioData = (int16_t*)malloc(length);
    fread(audioData, length, 1, fp);
    /* for (uint32_t i = 0; i < (header.size/2); ++i) {
       // fprintf(fp1, "0x%04x, ", audioData);
       //printf("0x%02x", audioData);
    }*/
    fprintf(fp1, "const int8_t AUDIO_DATA[] = {\n");
    for (uint32_t i = 0; i <length/2; ++i) {
        fprintf(fp1, "0x%04x, ", audioData);
    }

    fprintf(fp1, "\n};\n\n");
    free(audioData);
    fclose(fp);
    return 0;

注意,这里的数据长度是header.size + 8 - 44;加8是:RIFF chunk块的 ID 和 Size 的长度,header.size + 8 = 文件总大小,44是wav头的大小:4+4+4+4+4+2+2+4+4+2+2+4+4

直接保存到16位数组中,结果如下:



解析的程序:
//https://blog.csdn.net/qq_45893491/article/details/123459678
//WAV文件格式解析及生成
//https://blog.csdn.net/welbell_uplooking/article/details/82835390
// 查看Wav数据:      hexdump -x my.wav >a.txt
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <fcntl.h>

    //         
   //            
typedef  struct{
    char                chunkID[4];//大端  “RIFF”    4952    4646 0x52494646
    uint32_t        size;//4144    0000 文件大小  +8 是总文件大小  从下个地址开始到文件末尾的总字节数
    char                type[4];//大端  'WAVE'    4157    4556   0x57415645
}HeaderChunk;
typedef struct {
    char                         id[4];//大端     'fmt  '   波形格式  6d66    2074          0x666d7420
    //Size 表示该区块,后面内容的长度 2+2+4+4+2+2 = 16
    uint32_t                size;//小端     格式大小:16     0010    0000  = 0000 0010  
    uint16_t                AudioFormat;//小端    0001    AudioFormat 表示音频格式,如果是 PCM,则填入 1
    uint16_t                NumChannels;//小端           单声道      0001
    uint32_t                SampleRate;//小端               采样率       1f40    0000 = 0x1f40 =8000
    // 3e80    0000 = 16000
    uint32_t                ByteRate;//小端   每秒数据字节数 SampleRateNumChannelsBitsPerSample/8

    uint16_t                BlockAlign;//小端     每次采样产生的字节数     0002 =2
    uint16_t                BitsPerSample;//小端  位深   一个声道一次采样的位数
} FormatChunk;

typedef struct {
    char     id[4];//数据标识符         ID 固定死为 data     494c    5453
    uint32_t size;//data总数据长度     0298    0000   这个结果也不对啊
} DataChunk;

int main()
{
    FILE* fp = fopen("my.wav", "rb");
    if (!fp) {
        printf("Failed to open file!\n");
        return -1;
    }
    HeaderChunk header;
    fread(&header, sizeof(header), 1, fp);
    FormatChunk fmt;
    fread(&fmt, sizeof(fmt), 1, fp);
    DataChunk data;
    fread(&data, sizeof(data), 1, fp);
    printf("标识ID:%c%c%c%c\n",header.chunkID[0],header.chunkID[1],header.chunkID[2],header.chunkID[3]);
    printf("文件总长:%d\n",header.size + 8);//文件总长
    printf("Type :%c%c%c%c\n",header.type[0],header.type[1],header.type[2],header.type[3]);
    printf("ID :%c%c%c%c\n",fmt.id[0],fmt.id[1],fmt.id[2],fmt.id[3]);
    printf("Size:%d\n",fmt.size);//Size 表示该区块,后面内容的长度 2+2+4+4+2+2 = 16
    printf("音频格式:%d\n",fmt.AudioFormat);
    printf("声道:%d\n",fmt.NumChannels);
    printf("采样率:%d\n",fmt.SampleRate);
    printf("每秒数据字节数:%d\n",fmt.ByteRate);
    printf("每次采样产生的字节数:%d\n",fmt.BlockAlign);
    printf("一个声道一次采样的位数:%d\n",fmt.BitsPerSample);
    printf("%c%c%c%c\n",data.id[0],data.id[1],data.id[2],data.id[3]);
    printf("%d\n",data.size);
    int32_t length =header.size + 8 - 44;
    //length = fmt.ByteRate;
    FILE* fp1 = fopen("data.txt", "w");
    int16_t* audioData = (int16_t*)malloc(length);
    fread(audioData, length, 1, fp);
    /* for (uint32_t i = 0; i < (header.size/2); ++i) {
       // fprintf(fp1, "0x%04x, ", audioData);
       //printf("0x%02x", audioData);
    }*/
    fprintf(fp1, "const int8_t AUDIO_DATA[] = {\n");
    for (uint32_t i = 0; i <length/2; ++i) {
        fprintf(fp1, "0x%04x, ", audioData);
    }

    fprintf(fp1, "\n};\n\n");
    free(audioData);
    fclose(fp);
    return 0;
}

2.3 播放
        这里要注意算时间,我的音频数据是8000采样率,单声道,有符号S16格式的,故而1s数据量有8000*1*2=16000个字节数据,所以播放也要1s播放16000个数据。因为是12位的DAC,所以我把16位数据进行缩放一下,把他缩放到12位以内,所以一秒播放8000个样本,每个样本还是2字节。DAC播放周期就是:1/8000

注意这一句的转换:

(audio_data+0x8000)>>4&0xfff0

+0x8000是把有符号转化为无符号:-32768+0x8000 = 0,其他存储格式的根据这个转,>>4是把0 -65536缩放到0-4096 ,&0xfff0是高4位补0

/********************************** (C) COPYRIGHT *******************************
* File Name          : main.c
* Author             : WCH
* Version            : V1.0.0
* Date               : 2019/10/15
* Description        : Main program body.
*******************************************************************************/
#include "debug.h"


void Dac_Init(void);
void TIM2_Int_Init(u16 arr, u16 psc);

const u16 audio_data[] ={
0x4e49, 0x4f46, 0x4149, 0x5452, 0x000a, 0x0000, 0x9ee6, 0xe497, 0x8abf, 0x9de6, 0x00b0, 0x4349, 0x544d, 0x022f, 0x0000, 0x3631, 0x2033, 0x656b, 0x2879, 0x6f44, 0x276e, 0x2074, 0x6f6d, 0x6964, 0x7966, 0x3a29, 0x364c, 0x4634, 0x3355, 0x3457, 0x7859, 0x3358, 0x465a, 0x6d54, 0x5a62, 0x382b, 0x5a2f, 0x5536, 0x6f44, 0x3137, 0x5167, 0x4336, 0x446c, 0x4f46, 0x536d, 0x4636, 0x566b, 0x6768, 0x5872, 0x6666, 0x7530, 0x7562, 0x7854, 0x7870, 0x7943, 0x586b, 0x6973, 0x5463, 0x2f4a, 0x4245, 0x5573, 0x4930, 0x7875, 0x594f, 0x5a58, 0x5167, 0x3365, 0x326f, 0x3542, 0x2f37, 0x3378, 0x3454, 0x5a4d, 0x4744, 0x4b7a, 0x5a47, 0x6232, 0x7a35, 0x5558, 0x6b41, 0x784e, 0x5941, 0x574d, 0x4d5a, 0x6d6a, 0x4d70, 0x4c51, 0x326b, 0x3753, 0x6737, 0x534b, 0x4145, 0x766b, 0x6531, 0x6179, 0x5047, 0x6c4e, 0x2b49, 0x5748, 0x5233, 0x4474, 0x7038, 0x4839, 0x6175, 0x2b79, 0x3764, 0x4d32, 0x6874, 0x317a, 0x7a35, 0x5433, 0x3465, 0x4e61, 0x7935, 0x7469, 0x457a, 0x3070, 0x642f, 0x3378, 0x7342, 0x6d45, 0x3056, 0x7166, 0x5853, 0x5343, 0x3475, 0x7737, 0x505a, 0x702f, 0x7076, 0x4165, 0x7232, 0x694f, 0x792f, 0x384e, 0x6175, 0x4952, 0x7141, 0x4950, 0x364d, 0x3162, 0x726a, 0x706f, 0x3541, 0x5277, 0x366b, 0x6855, 0x7850, 0x705a, 0x3868, 0x7343, 0x4a51, 0x4a2f, 0x7138, 0x4567, 0x7965, 0x7079, 0x5363, 0x3064, 0x7248, 0x7951, 0x5131, 0x4a7a, 0x2b44, 0x4179, 0x6157, 0x644c, 0x4367, 0x316f, 0x5158, 0x3979, 0x6c7a, 0x794e, 0x7957, 0x5735, 0x736d, 0x5565, 0x2b4b, 0x6659, 0x3554, 0x394a, 0x6434, 0x4d6e, 0x6a79, 0x4a66, 0x554e, 0x624e, 0x5255, 0x6b57, 0x7932, 0x574b, 0x5256, 0x2f37, 0x494e, 0x524e, 0x6763, 0x575a, 0x4253, 0x3945, 0x4245, 0x395a, 0x7375, 0x5135, 0x4366, 0x3958, 0x6442, 0x6177, 0x6364, 0x6f6a, 0x6179, 0x7778, 0x4b2b, 0x466a, 0x7364, 0x794c, 0x564f, 0x4a75, 0x376d, 0x5231, 0x6b48, 0x6e56, 0x6b66, 0x6b2f, 0x5351, 0x6f66, 0x6539, 0x7649, 0x4569, 0x7444, 0x554a, 0x4c47, 0x784b, 0x5a2b, 0x772f, 0x3167, 0x2f64, 0x3837, 0x5078, 0x7065, 0x5770, 0x3834, 0x725a, 0x3965, 0x6946, 0x6374, 0x582b, 0x784b, 0x4c79, 0x3546, 0x594d, 0x4b6b, 0x4357, 0x476a, 0x6e70, 0x6161, 0x456d, 0x6b44, 0x5651, 0x595a, 0x6e56, 0x2f4a, 0x4b42, 0x747a, 0x6e4d, 0x5231, 0x3244, 0x2f36, 0x4642, 0x4734, 0x6533, 0x4f35, 0x3474, 0x7354, 0x7871, 0x4870, 0x5030, 0x534c, 0x7038, 0x4c61, 0x7939, 0x6d75, 0x304f, 0x5639, 0x6157, 0x6970, 0x7331, 0x4a72, 0x3345, 0x4764, 0x556f, 0x4b5a, 0x6579, 0x6761, 0x3d3d, 0x0000, 0x4e49, 0x4d41, 0x000a, 0x0000, 0xbee7, 0xe48e, 0xbaba, 0xb1e9, 0x00bc, 0x5049, 0x4452, 0x000d, 0x0000, 0xace7, 0xe4ac, 0x8cba, 0xa4e5, 0xe5a9, 0x82a0, 0x0000, 0x5049, 0x5452, 0x0003, 0x0000, 0x3231, 0x0000, 0x5349, 0x5446, 0x000e, 0x0000, 0x614c, 0x6676, 0x3835, 0x322e, 0x2e39, 0x3031, 0x0030, 0x6164, 0x6174, 0x3e80, 0x0000, 0x0299, 0x005a, 0xfef2, 0x0048, 0xff89, 0xffb1, 0x007a, 0x0112, 0xfe00, 0x027b, 0xff93, 0x0056, 0xffc6, 0xfff9, 0xfe1d, 0x0135, 0xfeef, 0xff38, 0x0184, 0xfbe5, 0x0363, 0xff3c, 0x01f2, 0xfe10, 0x0278, 0xfd64, 0x033b, 0xffb9, 0x0127, 0x0045, 0x0006, 0xffd0, 0x0149, 0xfe6d, 0x0030, 0xff45, 0xfed9, 0xfe95, 0x00be, 0xfd50, 0x0360, 0xfda2, 0x030d, 0xfe87, 0x0286, 0xfe86, 0x0099, 0xfe40, 0x00a7, 0x0083, 0xff33, 0x0221, 0xfe0d, 0x0243, 0xfcfd, 0x0218, 0xfd17, 0x0190, 0xfe44, 0x0223, 0xfea7, 0x0086, 0x015d, 0xff75, 0x00b5, 0xfec1, 0x0065, 0x00c3, 0xff5a, 0xff94, 0xff9c, 0xffcd, 0xffd6, 0x01ca, 0xfe61, 0x0150, 0xfdfd, 0xffc4, 0xfebd, 0xff4e, 0x0038, 0x00d2, 0x00d7, 0x0117, 0x00c2, 0xfe84, 0x010c, 0xff6f, 0xfe5d, 0x0169, 0x0043, 0x002f, 0x0101, 0x0098, 0x0059, 0x000e, 0x003b, 0xfdd6, 0x01a9, 0xfcc6, 0x01d7, 0xfd47, 0x01d5, 0xfd67, 0x0368, 0xfd8b, 0x02d0, 0xfd76, 0x037c, 0xfe1f, 0x006a, 0xff2f, 0x003b, 0x009f, 0x01ca, 0xfee2, 0x0161, 0xfd45, 0x0021, 0xff2e, 0xfefa, 0xffe8, 0xfff7, 0x0221, 0x0061, 0x0330, 0xfe38, 0xffa6, 0xfe57, 0x00de, 0xff54, 0x0103, 0xff08, 0x0151, 0xffae, 0x006d, 0x0067, 0xfff2, 0xfe32, 0x00ef, 0xfd9d, 0x00ad, 0xfdae, 0x0110, 0x00f8, 0x0022, 0x034d, 0xff07, 0x0112, 0xff52, 0xff9b, 0xffbf, 0xffa0, 0xff2f, 0x012b, 0x004a, 0x0052, 0xff37, 0x000d, 0xfe50, 0x00d7, 0xff25, 0xff3e, 0x011c, 0x0150, 0xff5c, 0x0208, 0xfd86, 0x003c, 0xfe94, 0xffd7, 0xfe57, 0x0155, 0xfe93, 0x01f0, 0x0181, 0xffe2, 0x0157, 0x0032, 0x0063, 0xfe7e, 0xff82, 0xfe7a, 0xffa5, 0x0040, 0xffb3, 0x010f, 0x01c8, 0xffb7, 0x0231, 0xffdc, 0xffcf, 0xfef5, 0x00de, 0xfe5a, 0x0117, 0x0012, 0xffb4, 0xff80, 0x0018, 0xfd16, 0x00ef, 0xfd51, 0x01f9, 0xfff7, 0x01cc, 0xfff8, 0x0210, 0xfd84, 0x0129, 0xffc8, 0xfff3, 0xff8f, 0xfffc, 0xff8c, 0x0045, 0x00f1, 0xff9c, 0xffbe, 0x018a, 0xff6b, 0xffdf, 0xfee5, 0xfef3, 0x0005, 0x005b, 0xff61, 0x0193, 0x0124, 0x009f, 0xff93, 0xffb3, 0x0047, 0xfe2c, 0x006d, 0xfe60, 0x00c2, 0xfee4, 0x00c7, 0xfec9, 0x01de, 0xfc60, 0x0364, 0xfea1, 0x0142, 0x00bc, 0x0094, 0xffca, 0x00d4, 0xfeab, 0xffd0, 0xfea5, 0xff91, 0x00fb, 0x000e, 0x0087, 0x00e8, 0x0112, 0xfefa, 0x029e, 0xfee0, 0x002f, 0xff1a, 0xff2c, 0xfd71, 0x016a, 0xfbf4, 0x03f7, 0xfdf8, 0x039b, 0x0047, 0x01c9, 0xfdeb, 0x01c4, 0xfdbc, 0x024e, 0xfe52, 0x024e, 0xfeec, 0xff16, 0xffda, 0xff5a, 0xfea8, 0xff4b, 0x00c7, 0x01b3, 0x002d, 0x015c, 0xffcd, 0x016a, 0xff95, 0xff55, 0x00f8, 0xfd97, 0x00a9, 0xfe73, 0xff81, 0x00a3, 0xffc8, 0xff06, 0x02eb, 0xfd80, 0x01ea, 0xfe89, 0xff70, 0xff5b, 0x00cf, 0xff9d, 0x0262, 0xff90, 0x015b, 0xfef1, 0x003d, 0xff4e, 0xff7a, 0xff08, 0xff1c, 0x00e3, 0x0020, 0x0177, 0xfff4, 0xff69, 0x00c0, 0xff8c, 0xfee9, 0xfff5, 0xfee3, 0x026a, 0xfee6, 0x00da, 0x000a, 0x008c, 0xfcd4, 0x02bd, 0xfd24, 0x0226, 0xfe90, 0x003e, 0x00e6, 0x0097, 0x0116, 0x00c9, 0x003d, 0x010e, 0xfcce, 0x003b, 0xfd20, 0x00f1, 0xfd98, 0x03c5, 0x0081, 0x010c, 0x00cf, 0x0142, 0xfe9a, 0x0029, 0xfe8c, 0xffa8, 0x014c, 0xfee4, 0x008c, 0xfe4e, 0x008e, 0xfec8, 0x0012, 0xfd8e, 0x02f2, 0xfd99, 0x0411, 0xfe02, 0x0113, 0x00ea, 0x00c4, 0x0054, 0x00a4, 0xfe08, 0x011b, 0xfc78, 0x014d, 0xfd59, 0x033c, 0xfd1c, 0x036f, 0x0071, 0x00fc, 0xfe00, 0xff34, 0xff06, 0x01e9, 0xff12, 0x004b, 0x0122, 0x0015, 0x0142, 0xfe7f, 0xfff6, 0xfdae, 0x0062, 0xfea6, 0x00f0, 0xff1f, 0x01a4, 0xff12, 0x01db, 0x00c3, 0xfee0, 0x0149, 0xff13, 0x0020, 0x006f, 0xfdff, 0x0193, 0xfd80, 0x023e, 0xffd8, 0x008a, 0xff81, 0x0073, 0x00ff, 0xfdc7, 0x0270, 0xfef6, 0x0279, 0xfec3, 0x01cb, 0xfdb5, 0x0118, 0xfb8e, 0x02e4, 0xfd1c, 0x013b, 0xff5f, 0x02a4, 0xff86, 0x01fe, 0xfd6a, 0x026f, 0xff0e, 0xffc8, 0x00ac, 0xfe52, 0x005d, 0xff9b, 0x0075, 0xfffc, 0xff6e, 0xfff7, 0x0026, 0x0142, 0xff6b, 0xffe6, 0x00ff, 0xffe3, 0x0182, 0xfe5e, 0x01ec, 0xfd53, 0x01c7, 0xfde6, 0x0112, 0xfc8a, 0x03e1, 0xfc2d, 0x0297, 0xff65, 0x020e, 0xfe01, 0x029b, 0xfaed, 0x0462, 0xfd9c, 0x01fc, 0xffb2, 0x00c0, 0xff05, 0x016e, 0xfdc3, 0xff89, 0xff54, 0x0092, 0xfdec, 0x0309, 0xff61, 0x00e5, 0xff92, 0x003c, 0x0104, 0x0012, 0xfe62, 0x0048, 0xff99, 0xfd95, 0x02d8, 0xfca5, 0x02a4, 0xfd06, 0x0474, 0xfe5c, 0x00a8, 0xff5a, 0x0127, 0xfe7c, 0x035b, 0xfe8e, 0x014a, 0xff27, 0x0079, 0xfeb3, 0xff8c, 0xfd30, 0x00ee, 0x000f, 0x00b3, 0x0158, 0x00fb, 0x0003, 0x003a, 0x0247, 0xfc89, 0x0276, 0xfc68, 0x0221, 0xfd70, 0x01a5, 0xfe3e, 0x01c6, 0xfcc2, 0x0357, 0xfe16, 0xffef, 0xffb0, 0x023e, 0xfd5f, 0x036d, 0xfe6c, 0x03aa, 0xfce9, 0x02ad, 0xfd58, 0x0146, 0xfd7a, 0x00c6, 0xfe8f, 0x0042, 0x0026, 0x0156, 0x018d, 0xff42, 0xfffd, 0xfee6, 0xff74, 0xfff2, 0x00ac, 0xfe91, 0x01b7, 0x0025, 0x0060, 0xfed7, 0x0042, 0xfe82, 0xffcf, 0x0064, 0x0058, 0xfff1, 0xfeea, 0x023e, 0xff26, 0x0217, 0xffe6, 0x003c, 0xff43, 0xff24, 0x0020, 0xfe5b, 0x0080, 0xff30, 0x02bf, 0xff27, 0x0116, 0xff71, 0xffba, 0xffcb, 0x0058, 0xff3b, 0x00d8, 0x0045, 0x0076, 0x00eb, 0xfe32, 0xff3d, 0xfe89, 0x00b1, 0xfe98, 0x0174, 0xfdc7, 0x03ce, 0x00ca, 0x014f, 0xffda, 0x0284, 0xfdfb, 0x0247, 0xfd07, 0x00e1, 0xfcf3, 0x010f, 0xfecf, 0x0101, 0x0054, 0x0110, 0xfe85, 0x0248, 0xfe9e, 0x0026, 0xff4c, 0xffe3, 0x0060, 0xffdd, 0x0088, 0xfe38, 0x0204, 0xfd02, 0x0177, 0xfe12, 0x018b, 0xfdc5, 0x04a4, 0xfd6b, 0x02ab, 0xfecd, 0x0056, 0xff90, 0xff1e, 0x002a, 0xff33, 0x0013, 0x00be, 0xffd4, 0x016e, 0xfec8, 0x01dd, 0xff15, 0x013d, 0xfdf9, 0xffea, 0xfe95, 0xff34, 0x012d, 0xff88, 0x00d2, 0x012c, 0xff96, 0xffbe, 0x0010, 0xff11, 0xffcb, 0x00eb, 0xfec7, 0x0094, 0x004a, 0xff75, 0x010f, 0xfec7, 0x015b, 0x0028, 0xff73, 0x0146, 0x00e5, 0xfeab, 0x019a, 0xff89, 0xfe2f, 0x00ae, 0xfe18, 0xfe51, 0x012e, 0x003b, 0xfe7c, 0x0416, 0xfd54, 0x03cb, 0xffa1, 0x01ec, 0xfc59, 0x0398, 0xfaf1, 0x01fa, 0xfe09, 0x000c, 0xff3b, 0x01ab, 0x001a, 0xffba, 0x01cb, 0xfe35, 0x018c, 0xff0a, 0x013f, 0xfee7, 0x0120, 0xfe36, 0x008a, 0x00cc, 0xff19, 0x0086, 0x002a, 0xfebb, 0x0212, 0x0065, 0xff1c, 0x00ca, 0x007a, 0xfcf4, 0x0139, 0xfe97, 0xfd71, 0x0127, 0xffcf, 0x000f, 0x0095, 0x0227, 0xfe67, 0x042b, 0xfdd9, 0xffc3, 0x0039, 0xfe63, 0xfee0, 0xfff9, 0x0044, 0x0050, 0x0269, 0xfedb, 0x013b, 0xfef1, 0x0248, 0xfc91, 0x037c, 0xfb81, 0x028e, 0xfdae, 0x0311, 0xfc5b, 0x0322, 0xfe04, 0x019d, 0x006f, 0xffaa, 0x0136, 0x00bc, 0x0085, 0xff51, 0x0153, 0xfd1e, 0xff62, 0xff57, 0xfd5b, 0x022f, 0xfeb3, 0x0138, 0x0049, 0x02f0, 0xff38, 0x03e4, 0xfd46, 0x0328, 0xfc11, 0x01d6, 0xfce0, 0x00e0, 0xfe5b, 0x001b, 0x01a0, 0x004a, 0xffee, 0xff2d, 0xfffc, 0xfec9, 0x0058, 0xfc9c, 0xff86, 0xffe4, 0x003e, 0x020b, 0xff8e, 0x024f, 0xffc8, 0x0302, 0xfd14, 0x038b, 0xff67, 0x0138, 0x011e, 0xfe9a, 0x01f1, 0x002e, 0x021d, 0xfd9b, 0x01a4, 0xfc7a, 0x0562, 0xfdb7, 0x0320, 0xfd7a, 0xfe63, 0xfc9f, 0xffd4, 0xfd52, 0xfde8, 0xfcc2, 0xfd76, 0xfdf0, 0xff81, 0xffee, 0xfd80, 0xffd4, 0xff80, 0x006a, 0xff3b, 0x0336, 0xfe94, 0x02a9, 0x02a5, 0x0429, 0x02c4, 0x0425, 0xff01, 0x027e, 0x00d3, 0x0182, 0x0403, 0x0153, 0x01bd, 0x00fd, 0xfeb4, 0xff90, 0xfcfe, 0x019f, 0xfe71, 0x02e8, 0xfb47, 0x021e, 0xfedf, 0x0264, 0xfec2, 0xfd26, 0xfd4f, 0xfe96, 0x017a, 0xf9e5, 0xff81, 0xfb8a, 0xffb0, 0xfe1e, 0x02a6, 0xfe2d, 0xfe28, 0xfae2, 0x00c6, 0xfe2e, 0x004e, 0xfe0e, 0x0088, 0x021c, 0x02b2, 0xff72, 0x0070, 0xff49, 0x00d1, 0x02e3, 0x02c8, 0x01ef, 0x012b, 0xff7d, 0x00e8, 0xff31, 0xff4c, 0xff5d, 0x00ba, 0x0092, 0x02d6, 0x016b, 0x01ec, 0x047b, 0x02d7, 0x04f9, 0x0084, 0xfea2, 0x0205, 0x0248, 0xffb1, 0x0340, 0xfddf, 0xfe15, 0xfd0b, 0xfe6a, 0xfdd8, 0xfdeb, 0xfcb9, 0xfb1e, 0xfe34, 0x004b, 0xfcab, 0xfc47, 0xfeba, 0xfe93, 0xff45, 0xfcc8, 0xfe50, 0xff83, 0x0097, 0xffb4, 0x00f4, 0xfea4, 0xff55, 0x0025, 0x042c, 0x00c7, 0x0272, 0x01d9, 0x04ae, 0x0206, 0x03bf, 0xfec8, 0x041c, 0xfee7, 0x0838, 0xff31, 0x02f3, 0xff3a, 0x00d1, 0x013b, 0x038d, 0x0059, 0xfceb, 0xfe4a, 0xfdae, 0x00b9, 0xfce5, 0xffc1, 0xfabb, 0xfec8, 0xfffe, 0xfd3b, 0xfdd6, 0xfd11, 0xfdad, 0xfe35, 0xffaf, 0xff14, 0xff65, 0x017f, 0xff9a, 0x0247, 0xfe55, 0xffc6, 0xfcef, 0x00e8, 0xfed5, 0x0093, 0xfe6c, 0x02b5, 0x0320, 0xfed1, 0x0257, 0xffb3, 0x0274, 0x0388, 0x00c5, 0x00a9, 0x00ec, 0xfe1c, 0x01c8, 0x014a, 0x010e, 0xfdd3, 0xffce, 0xffe1, 0x0502, 0xfe80, 0x04ad, 0xff2f, 0x01be, 0xff3a, 0x0337, 0xffde, 0x03be, 0x00d3, 0xfea9, 0xfe5f, 0xfec7, 0xfd53, 0x0011, 0xff44, 0xfe40, 0x00a7, 0xf9f3, 0xff78, 0xfd02, 0xfd66, 0xfd92, 0xfaad, 0xfedc, 0xfe29, 0x011f, 0xfdd5, 0x019e, 0xff0e, 0xffd5, 0xffb9, 0xfeeb, 0x0141, 0xff4e, 0x0465, 0x0142, 0x06a2, 0xff48, 0x0483, 0xfd6e, 0x05a4, 0xfe59, 0x016e, 0x0192, 0x0143, 0x0271, 0x00fd, 0x0288, 0xfe9f, 0x0267, 0xfd91, 0x0170, 0xff28, 0xfd3f, 0x01d9, 0x0045, 0x0382, 0xfe57, 0x0045, 0xfa7b, 0x018e, 0xfab8, 0x006c, 0xfbbf, 0xfcfb, 0xfcee, 0x006b, 0x01fb, 0x0179, 0x02fe, 0xfefa, 0x0120, 0xfe2f, 0xffd4, 0xfb2b, 0xfee9, 0xfe81, 0x00cc, 0xfd58, 0xfe5d, 0xfc08, 0xfd1c, 0x009d, 0xfccb, 0x03b1, 0xfe39, 0x02eb, 0xffd1, 0x04f7, 0x00d8, 0x030b, 0x00c8, 0xfd06, 0x029c, 0x0013, 0x0431, 0x02b7, 0x08ab, 0x048e, 0x05da, 0x02ba, 0x02c5, 0x00c4, 0x0185, 0x02d9, 0xfd7a, 0xff54, 0xfc32, 0x0438, 0xff39, 0x028c, 0xfd5a, 0xfcac, 0xfcba, 0xfd16, 0xfa03, 0xfcc6, 0xfec1, 0xfb6c, 0xfc2d, 0xfa3e, 0xfa00, 0xfae0, 0xfda2, 0xfb78, 0xfedb, 0xfed0, 0xfeb8, 0x0187, 0x0323, 0x0451, 0x05e1, 0x02fb, 0x0247, 0x0278, 0x03df, 0x02f1, 0x0449, 0x0402, 0x0491, 0x01b0, 0x0560, 0x000f, 0x0025, 0xfe0a, 0x0090, 0xffd4, 0xfece, 0xfc5a, 0xffbc, 0x012a, 0x0105, 0xff9f, 0xfd23, 0xf99d, 0xfbfb, 0xfc2f, 0xfb1b, 0xfda7, 0xf88d, 0x001f, 0xfe10, 0x00a9, 0xfd70, 0x0219, 0xfd6c, 0x02f1, 0x0070, 0xfd49, 0x034b, 0x0040, 0x0672, 0x0559, 0x067a, 0x00f9, 0x026c, 0xff67, 0x0171, 0x018a, 0x04d8, 0x022b, 0x03a6, 0x0351, 0x03ef, 0xffea, 0xfc43, 0xfb61, 0xfd0f, 0xfe32, 0xfb35, 0xfe12, 0x01c5, 0xfdf6, 0x0601, 0xfe58, 0xfca5, 0xfbde, 0xff09, 0xfd6b, 0x03e1, 0xfd10, 0x00e8, 0x014d, 0x022d, 0x0223, 0x0059, 0xfbfc, 0x003e, 0xfec4, 0xfb26, 0x0252, 0xff6d, 0x0354, 0x01d4, 0xfeed, 0xfe02, 0xfcc5, 0xfcb6, 0xfcc3, 0x009f, 0xfa0d, 0xff57, 0xfb50, 0x0194, 0xff76, 0xffcc, 0xff40, 0x0057, 0xfecf, 0xfedd, 0xfe8a, 0x005b, 0x0603, 0xffc3, 0x04fb, 0x0330, 0x0157, 0x0045, 0x032e, 0x00ae, 0x0506, 0xff93, 0x0375, 0x065d, 0x06a4, 0x08e2, 0x02af, 0x0283, 0x0211, 0x0298, 0x0067, 0xff83, 0x0408, 0xffbc, 0x07e5, 0xff81, 0xfef7, 0xf79a, 0xf9dd, 0xf9c4, 0xfd6c, 0xfa41, 0xfeaf, 0xfa03, 0xfac7, 0xfd09, 0xf56f, 0xfaed, 0xf5c6, 0xfce0, 0xf9ca, 0xfdd6, 0xfa1f, 0x049a, 0x04d7, 0x048f, 0x0430, 0x0194, 0x01e0, 0x0101, 0x011e, 0x008b, 0x0028, 0x01fb, 0x0123, 0x071d, 0x007a, 0x01d6, 0x0040, 0x0485, 0x04db, 0x001d, 0x032f, 0x049c, 0x0120, 0x022b, 0xfece, 0xfe2a, 0xfd4a, 0xfda7, 0xffe8, 0xfaff, 0xfe5c, 0xfb16, 0xfe48, 0xfc1d, 0xfd58, 0xf8aa, 0xff82, 0xf778, 0xfd86, 0xfae8, 0xff32, 0x00c0, 0x04bc, 0x0600, 0x066a, 0x0824, 0x02b7, 0x05d3, 0x0748, 0x0532, 0x04a7, 0x05f7, 0x02f8, 0x06a2, 0x0a0f, 0x0706, 0x051d, 0xfcf0, 0x02ef, 0xfda7, 0xfed8, 0xfd17, 0xff26, 0xfc21, 0xff00, 0xfb88, 0xf97f, 0xf5ed, 0xf841, 0xf8b4, 0xfbfe, 0xfbfa, 0xf8b3, 0xfc56, 0x0079, 0x00d2, 0xfd31, 0xfcac, 0xf9a5, 0xfc05, 0xfb6e, 0xfdaa, 0x0174, 0x0084, 0x018f, 0x0656, 0x058c, 0xff4f, 0x01f5, 0x033b, 0xff61, 0x0724, 0x03a6, 0x022e, 0x04a2, 0x005b, 0x0347, 0xfd18, 0xfa70, 0x0181, 0x0012, 0xfbeb, 0x01c7, 0xff46, 0xfe4e, 0x0087, 0xfcb6, 0xf92f, 0xfb34, 0xf862, 0xfe75, 0xfb32, 0x00c2, 0x0169, 0x0577, 0x0335, 0x090a, 0x0446, 0x03a7, 0x088c, 0x023a, 0x075f, 0x04b9, 0x0a6a, 0x08b8, 0x0835, 0x0736, 0x06f3, 0x0048, 0x052f, 0xfd6e, 0x004b, 0xfd87, 0xfc89, 0xfb25, 0xfeda, 0xf786, 0xfaa1, 0xf7ed, 0xf7c5, 0xf5cf, 0xf6ba, 0xf77e, 0xfecb, 0xfa70, 0xfc62, 0xffa1, 0xfd88, 0xfce3, 0x002f, 0xfa1c, 0xfccf, 0xfec0, 0x00bd, 0x016c, 0x025d, 0x04c0, 0x0271, 0x0199, 0xff6b, 0x052f, 0xfd2d, 0x04b1, 0x03ba, 0x093c, 0x0747, 0x0804, 0x031f, 0x038e, 0x0122, 0xff9f, 0xfe42, 0x01fa, 0xfe26, 0xfffd, 0xfcbc, 0x00ea, 0xfcfb, 0xfa40, 0xf850, 0xfb07, 0xfa08, 0xfb33, 0xfce5, 0xfe79, 0x0340, 0xfe4e, 0x0545, 0xfc33, 0x03dd, 0x000d, 0x03de, 0x009f, 0x065d, 0x0112, 0x0611, 0x05ba, 0x0630, 0x0255, 0x05b1, 0xff45, 0x060a, 0xff63, 0x00f5, 0xfb67, 0x0194, 0xfe9f, 0x0045, 0xfacb, 0xfb81, 0xfdff, 0xfd8f, 0xfc71, 0xfc75, 0x005b, 0xfff0, 0x0082, 0xffe1, 0xff83, 0x0190, 0xff08, 0x02d6, 0xff17, 0xfed8, 0xfc52, 0x00a8, 0xffa4, 0x0210, 0x00e2, 0x0047, 0xff76, 0xfc1f, 0xfdfb, 0xfae3, 0xfeb4, 0xf918, 0x050e, 0xfe96, 0x0234, 0xfd9f, 0xfe17, 0xffce, 0xfcf0, 0xfdfd, 0xfdb7, 0x026a, 0x004a, 0xff81, 0x0302, 0x0171, 0x0303, 0x011b, 0x0085, 0xfe71, 0xffb5, 0xfddf, 0xfd67, 0x047f, 0x051e, 0x032b, 0x0127, 0x0489, 0x0265, 0x0907, 0x0522, 0x04de, 0x066f, 0x0c21, 0x073e, 0x094d, 0x01a0, 0x04b4, 0x03d8, 0xff4a, 0xfff8, 0xfd53, 0xff00, 0xfc4e, 0xff5b, 0xfc87, 0xf84d, 0xf2a0, 0xf61d, 0xf320, 0xf2f8, 0xf437, 0xf7cc, 0xf3bb, 0xfb54, 0xfe18, 0xfbb6, 0xfa6d, 0xfed1, 0xfd47, 0x020c, 0xfd15, 0x027c, 0x02b7, 0x0622, 0x04dd, 0x0240, 0xff5a, 0x0215, 0xfb2a, 0x05f4, 0xfe84, 0x0afe, 0x03b7, 0x0a62, 0x083b, 0x0a6b, 0x09eb, 0x064f, 0x07e7, 0x06fa, 0x0308, 0x06f4, 0x050f, 0x0826, 0x0240, 0x0147, 0x0132, 0xfa1e, 0xfde0, 0xfad9, 0xf955, 0xfa84, 0xfb6a, 0xf478, 0xfc46, 0xf2f8, 0xf6dc, 0xf635, 0xfbbc, 0xf5e7, 0xff89, 0xfaa0, 0x0114, 0x0187, 0x019f, 0x0265, 0x0282, 0x00ca, 0x009e, 0x0385, 0xfe48, 0x0d04, 0x01c9, 0x083d, 0x03bd, 0x036c, 0xff1f, 0x0175, 0xfbd8, 0x0142, 0xfe51, 0xffcf, 0xff14, 0xff63, 0x0159, 0xff38, 0xfefc, 0x0117, 0xfa29, 0xffd4, 0xfdca, 0x0435, 0x00a2, 0x0518, 0xfcbd, 0x01ac, 0xff8c, 0xfc14, 0xfe59, 0xfd53, 0xfe86, 0xfe90, 0x009b, 0xfdee, 0x0034, 0xfaba, 0x03fd, 0x0026, 0xfb65, 0x011a, 0x001a, 0x008c, 0x007b, 0xfd60, 0x01f1, 0xff30, 0xfceb, 0xffab, 0x013f, 0x0029, 0xff93, 0xfc57, 0x00e9, 0xfe5c, 0xfc3f, 0xf9fc, 0x0465, 0xfd74, 0x01a5, 0x0059, 0x058a, 0x094e, 0x0abf, 0x04fc, 0x0812, 0x0844, 0x0813, 0x06db, 0xfffa, 0x0b40, 0x0258, 0x08a6, 0xfec8, 0x051a, 0x02d5, 0x03d8, 0xfe83, 0xfd9f, 0xfcf7, 0xfd3e, 0xf966, 0xf47f, 0xf427, 0xf6fe, 0xf006, 0xf893, 0xf2b7, 0xfc89, 0xf623, 0xfadc, 0xf646, 0xfac8, 0xf7c2, 0xfee3, 0xfdc3, 0xfc12, 0x0275, 0xfd39, 0xfbbe, 0x0009, 0xfdf9, 0x01c8, 0x0324, 0xfd8c, 0x08e8, 0x0be2, 0x0409, 0x063e, 0x0fec, 0x06ea, 0x0f56, 0x0685, 0x0ae9, 0x06f2, 0x0d09, 0x02d9, 0x03f5, 0x063f, 0x0496, 0xfe80, 0x01bf, 0xfe42, 0xfead, 0x00ec, 0xfc6e, 0xfdf2, 0xfca4, 0xfd0d, 0xfb73, 0xfa73, 0xfc67, 0xfa15, 0xfe58, 0xf80c, 0xfac6, 0x008e, 0xfc6d, 0x0330, 0xfe9a, 0x0050, 0xff5a, 0x00a7, 0xfad6, 0x0371, 0xfc7a, 0xff23, 0x007b, 0xfe74, 0xfc11, 0x024d, 0xf78c, 0xfdb8, 0xf830, 0xfde2, 0xfc19, 0xf9f6, 0x02d1, 0x015b, 0x04c0, 0xff84, 0x022e, 0xfaed, 0x0782, 0xfcdd, 0xffa3, 0x0183, 0x0240, 0x043f, 0x028f, 0x0341, 0x017d, 0x077d, 0x027e, 0x0415, 0xfd54, 0x0161, 0x05b2, 0xff68, 0x0463, 0xfcab, 0xff47, 0xfa83, 0x00f0, 0xf70a, 0x05fa, 0xffbd, 0x025b, 0xff76, 0xfc89, 0xfef9, 0xfb47, 0xfe2a, 0xfe69, 0xff19, 0xfacd, 0xfb11, 0xfc1b, 0xfef7, 0x0212, 0xfa78, 0xfc12, 0x0128, 0xfe84, 0xfd0a, 0x0407, 0x0234, 0x0b33, 0x08a0, 0x039d, 0x05a8, 0x083e, 0x0820, 0x06a8, 0x06dc, 0x0769, 0x0490, 0x021d, 0x0682, 0xfd29, 0x0610, 0x007e, 0x0234, 0xfa58, 0x0080, 0xfa45, 0xf982, 0xfb1d, 0xfaa5, 0xf90a, 0xf211, 0xf7d4, 0xf47a, 0xf880, 0xf8e0, 0xfa59, 0xf5ab, 0xf96f, 0xf63b, 0xf6e4, 0x006e, 0xfda1, 0xfd7a, 0xfe5a, 0xfbfb, 0xf8ea, 0xff26, 0xfb69, 0xfff4, 0xfb32, 0x0316, 0x06ba, 0x007a, 0x0acb, 0x085c, 0x0d86, 0x0ac0, 0x0b0e, 0x0867, 0x0c29, 0x0761, 0x0e3d, 0x04e9, 0x063c, 0x03ac, 0x02f1, 0x043d, 0x053d, 0x02c4, 0x0515, 0x05f2, 0xfdeb, 0xfee3, 0xfe34, 0xfb78, 0xf9f0, 0xfc74, 0xf3f8, 0xfa55, 0xf6d9, 0xfa15, 0xfe87, 0xfb0d, 0xfd89, 0xff33, 0xfc3c, 0xfab2, 0xfb2a, 0xffaa, 0xfdfd, 0xfe61, 0xfc3d, 0x0077, 0xfc16, 0x0228, 0xfef0, 0x05ea, 0xfe01, 0xfdc6, 0x0118, 0xfaa0, 0xfe95, 0xfc3c, 0x03a3, 0xff13, 0x0037, 0xfbad, 0xff93, 0x0356, 0xfebf, 0xffba, 0x04a9, 0xffe0, 0x0074, 0x0002, 0xfc12, 0x0125, 0x0309, 0xfadc, 0x00c4, 0xf9f3, 0x033f, 0x017a, 0x006c, 0x054c, 0x03e5, 0xff13, 0xfe85, 0x0011, 0xff08, 0x0529, 0x07d2, 0x084a, 0x05e7, 0x0165, 0x01ed, 0x0241, 0x0470, 0x05aa, 0xffb4, 0x03b5, 0xfec1, 0xfabc, 0xf968, 0x033a, 0xf26b, 0xfa0c, 0xf9d7, 0xf7ad, 0xfd6d, 0xfa5b, 0xfe65, 0x056c, 0x0356, 0xffe9, 0xfeeb, 0x0091, 0x034e, 0x00a0, 0x03e1, 0x069c, 0x0229, 0x0506, 0x017a, 0x01c7, 0x079e, 0x04a4, 0x062c, 0x0703, 0x04b3, 0xfd44, 0x0283, 0xfd79, 0xff07, 0x005f, 0xf719, 0xfc79, 0xfd7d, 0xf543, 0x01ae, 0xfb56, 0xf9b9, 0xfaf8, 0xf123, 0xf331, 0xfb85, 0xf690, 0xf722, 0xfe02, 0xf8dd, 0xfcb4, 0xfac2, 0xfd12, 0xfcd5, 0xf8bf, 0xfe6d, 0x01ee, 0x0231, 0xfce4, 0x0576, 0x0421, 0x098b, 0x0b71, 0x0921, 0x10e9, 0x0f2c, 0x0ff5, 0x05ea, 0x0ee5, 0x0923, 0x0849, 0x0151, 0x0988, 0x0317, 0x06ad, 0x099d, 0xff29, 0x08ef, 0x0053, 0xfa72, 0xfffd, 0xf934, 0xf869, 0xf43a, 0xf157, 0xf4a4, 0xfc8c, 0xf655, 0xf90b, 0xf55c, 0xf841, 0xf3cd, 0xfd11, 0xfa50, 0xf9b2, 0xfac8, 0xf483, 0xfe56, 0xf5cf, 0xfb46, 0x01e4, 0x002c, 0xfec7, 0x0379, 0x0131, 0x0786, 0x0446, 0x02e2, 0x08f6, 0x0b61, 0x0e84, 0x0753, 0x0a33, 0x0705, 0x0849, 0x080b, 0xff8d, 0x0887, 0x04e3, 0x0274, 0xfe9e, 0x03b3, 0xfe17, 0x034f, 0xfe4f, 0xf951, 0xf199, 0xf3ad, 0xf8aa, 0xf568, 0xfc74, 0xf225, 0xfd6c, 0xf6b8, 0xf7bb, 0xfe48, 0x048d, 0xfb50, 0x060f, 0xf92d, 0xfc94, 0x01c2, 0x043e, 0x01ed, 0x05fc, 0x0c1b, 0x0606, 0x0436, 0x0914, 0x0878, 0x087d, 0x010e, 0x00bd, 0x0120, 0x06ba, 0x0265, 0x0188, 0x0547, 0x08af, 0x0763, 0x00dc, 0x04e9, 0xfd35, 0xff8a, 0xf9c9, 0x0601, 0xf597, 0xfaeb, 0xf60e, 0xf0b9, 0xfa56, 0xf8b4, 0x0069, 0xfc9f, 0x0124, 0xf4ac, 0x02c5, 0xf5d3, 0xfd17, 0xfc19, 0xf869, 0xfbf9, 0xffb7, 0xfe4d, 0x0614, 0x0769, 0x0566, 0x0794, 0xfd53, 0x0153, 0xfd92, 0x05b8, 0x0157, 0xfea2, 0x02e9, 0xfe64, 0x02e7, 0xfb8a, 0xff99, 0xf5e3, 0xfbed, 0x01d6, 0xfb17, 0x02c9, 0xfa31, 0xfe6a, 0x063f, 0xfab7, 0x0301, 0x05f1, 0x003c, 0x047c, 0x090b, 0xfe0f, 0x0c57, 0xfd88, 0x0426, 0x06a2, 0x0893, 0x02f4, 0x0e75, 0x0782, 0x03ac, 0x08e1, 0xff0c, 0x0023, 0x03fe, 0x001d, 0xff6f, 0xff9f, 0xf747, 0x02e6, 0xfbdb, 0x0745, 0xfdc7, 0xf7fb, 0xf9e6, 0xf999, 0xfe4b, 0xfd5c, 0xf620, 0xff35, 0xfce1, 0xf451, 0xf63c, 0xfeb2, 0xf5e1, 0xfd58, 0xf853, 0xf795, 0xfca8, 0xf8d3, 0xfa61, 0x0096, 0x0561, 0x00ff, 0x0839, 0xff54, 0x05f7, 0x0b88, 0x0210, 0x0141, 0x05aa, 0x040f, 0x05b3, 0xff97, 0x0342, 0x03bc, 0x0707, 0x07db, 0x03d2, 0xfbf3, 0xfe3a, 0xfb30, 0x0463, 0xfc55, 0x00da, 0xf8a7, 0xfd8e, 0xfa0a, 0x00c3, 0x0488, 0x034d, 0xffd1, 0x01a8, 0xfa9e, 0x0143, 0xf662, 0x0066, 0xfcb1, 0x04ca, 0xfca9, 0xff11, 0xfbf2, 0x00f5, 0x048e, 0xfa0b, 0x0133, 0xfa79, 0x0090, 0xff0c, 0x005a, 0x007b, 0x0718, 0x0568, 0x03a8, 0x07b4, 0x02e0, 0x0294, 0x004d, 0x09eb, 0x0088, 0x04ad, 0xfd11, 0xf7ed, 0x0861, 0xfc74, 0x068f, 0x02a3, 0x04a5, 0xfa9f, 0x0281, 0xfc08, 0xfe18, 0xfe8c, 0xf519, 0xface, 0xfca8, 0xfc07, 0xf6fd, 0x0420, 0xf764, 0x0261, 0xfce5, 0xf3c5, 0xff37, 0xff2e, 0x0255, 0xfff9, 0xfc6e, 0xfcb7, 0x00fe, 0xfe71, 0xfdde, 0xfd70, 0xfb9c, 0xfc1c, 0x01d9, 0x02e2, 0x0413, 0x031e, 0x069e, 0x0535, 0x04e6, 0x076e, 0x063a, 0x04dd, 0x0575, 0x0881, 0xfcae, 0x02ce, 0xfc7a, 0x0660, 0x0161, 0x0300, 0x07aa, 0x05d9, 0x0204, 0x04f0, 0xffe3, 0xfa79, 0x049f, 0xf67d, 0x0446, 0xfc99, 0xfa3e, 0xfd54, 0x040d, 0x0513, 0x0674, 0x0202, 0xf641, 0xff40, 0xfea3, 0xff89, 0xfa0f, 0xfe55, 0xf820, 0xf997, 0xf718, 0xf591, 0xfae1, 0xf9ea, 0xfafb, 0xf508, 0xfb15, 0xfa5d, 0xf9bb, 0xfcac, 0x0099, 0x0372, 0x0121, 0x0306, 0x057c, 0x072e, 0x05cc, 0x066a, 0x0287, 0x0484, 0x0bfa, 0xfeed, 0x0da3, 0xffd1, 0x0d29, 0x0669, 0x0dea, 0xfe19, 0xfff0, 0xf8e9, 0x0022, 0x012c, 0xfb14, 0xfadf, 0xfbc5, 0xfefb, 0xf4bc, 0x0641, 0xf951, 0x03da, 0x025c, 0xfbd9, 0xfa93, 0xfbcc, 0xfba7, 0x0229, 0x0243, 0xfb5a, 0xfd5a, 0xff46, 0x01e5, 0xffc6, 0x0d4f, 0xfdbb, 0x039e, 0x069b, 0x0336, 0x0083, 0x0bbe, 0xfeb9, 0x0478, 0x04df, 0x05c6, 0xfef8, 0x0614, 0xfd02, 0xfe3a, 0x09fb, 0xf753, 0xfd6e, 0xf65c, 0xfc34, 0xf820, 0xfcaa, 0xf8a8, 0x03f5, 0xfb14, 0xfb15, 0xf7fd, 0xf1d6, 0xfd06, 0xf86a, 0xfeaa, 0x00ec, 0xfc62, 0x047a, 0x0413, 0x0761, 0x0246, 0x0429, 0xf916, 0xfe77, 0xfd6b, 0x058a, 0xfd8f, 0x0be6, 0xfdb7, 0x0644, 0x02ef, 0x0209, 0xff51, 0xf76c, 0x010b, 0xf9a7, 0xfefb, 0xfdc4, 0x0023, 0x025f, 0xffb1, 0xfba0, 0x021b, 0xfef1, 0x0134, 0x0c1d, 0x0081, 0x040a, 0x04b8, 0x0826, 0x01cf, 0x0745, 0xfc5e, 0x001b, 0x02d6, 0x0ab1, 0x01dc, 0x0181, 0x0381, 0x01b4, 0x0179, 0xfe5b, 0x042a, 0xfe52, 0xfa36, 0x0184, 0xf750, 0x043a, 0x05d6, 0x0214, 0xf4f4, 0xfe7f, 0xf1bc, 0x034e, 0xf6dc, 0x0139, 0x028f, 0xf896, 0xfbe6, 0x0366, 0xfe22, 0x0414, 0x00a6, 0xfd56, 0xf62f, 0xffd8, 0x053f, 0xf40a, 0x0859, 0xfc17, 0xfd9c, 0x12cb, 0xf219, 0x0d02, 0x0727, 0x052c, 0x0494, 0x047b, 0x03ba, 0x025b, 0xfed3, 0x0118, 0x06bf, 0x0bf1, 0x129d, 0x0a27, 0x005a, 0xfba9, 0x22f2, 0xfea5, 0xf46f, 0xfb35, 0xe105, 0xf910, 0xddc5, 0xc983, 0xf905, 0xfe23, 0x0e10, 0x0086, 0xe9e8, 0xe278, 0xe043, 0xf14d, 0xeccd, 0xe08b, 0xe426, 0xf6db, 0x15ae, 0x20f5, 0x2699, 0xe619, 0xd456, 0xc176, 0xd5b1, 0xfab0, 0x0bc1, 0x40d3, 0x6e29, 0x4684, 0xf7fd, 0xe151, 0xcf1c, 0xe24d, 0x0789, 0x0cf4, 0x056c, 0x0f00, 0x15de, 0x02a6, 0xe59c, 0xd8fa, 0x02c4, 0x1c5c, 0x0d9b, 0x1117, 0x1619, 0x23ce, 0x0834, 0xebe5, 0xf4d9, 0x1395, 0x2379, 0x39e8, 0x41e0, 0x4307, 0x4a97, 0x2ca0, 0xfc87, 0xe5d6, 0xfd01, 0x293d, 0x3ba8, 0x2211, 0x1813, 0x008b, 0xe46f, 0xd200, 0xdbd9, 0x028e, 0x1961, 0x0c6a, 0x1a54, 0x1815, 0x201a, 0x172b, 0x012c, 0xebbb, 0xffbc, 0x185e, 0x0f98, 0xf191, 0xe2c8, 0xe50e, 0xbcec, 0xa7ce, 0xa7fd, 0xc113, 0xbf9c, 0xb602, 0xb5d4, 0xd6f9, 0xe0be, 0xdd17, 0xc71b, 0xc26c, 0xd165, 0xf32f, 0xfb08, 0xec4f, 0xe519, 0xec79, 0xe55d, 0xde2a, 0xcd44, 0xd6e9, 0xf495, 0x1e2f, 0x2695, 0x4148, 0x599d, 0x542a, 0x3d40, 0x366a, 0x4cbd, 0x4f38, 0x4f5f, 0x4115, 0x3412, 0x2e38, 0x209a, 0x11e9, 0x11dd, 0x23c8, 0x2ee0, 0x247d, 0x2b04, 0x2929, 0x219b, 0x1c52, 0x01b3, 0xe8a5, 0xe657, 0xe6c2, 0xd520, 0xbcfb, 0xae83, 0xa9e5, 0xa60b, 0x9e15, 0x948d, 0x8ca6, 0x9883, 0xb270, 0xb5dd, 0xbeb9, 0xcf7e, 0xc8e6, 0xc8d5, 0xc888, 0xccb3, 0xdd79, 0xe018, 0xedf5, 0xef88, 0xfd23, 0xfc43, 0x03f4, 0xfb23, 0x0ba2, 0x1599, 0x1418, 0x2168, 0x2a1c, 0x377a, 0x3d5e, 0x31b7, 0x3d56, 0x4a19, 0x5513, 0x6104, 0x689e, 0x639c, 0x6c53, 0x5a2f, 0x63ba, 0x5849, 0x4d2e, 0x4d9c, 0x4718, 0x4c4f, 0x48cf, 0x4a72, 0x4179, 0x4064, 0x3157, 0x2ce1, 0x316a, 0x30c2, 0x240a, 0x165f, 0x1102, 0x0de6, 0x008c, 0xf283, 0xeee4, 0xf88e, 0xf382, 0xf8d6, 0xfbcd, 0xf816, 0xf05e, 0xedbf, 0xe322, 0xd9e0, 0xcdca, 0xdb4e, 0xce92, 0xc440, 0xb207, 0x9a60, 0x99c3, 0x8cb4, 0x9484, 0x9102, 0x9116, 0xad7f, 0xad2f, 0x9a5e, 0xa93e, 0x9805, 0xa05e, 0x9fa0, 0xa5d4, 0xb033, 0xacfc, 0xac65, 0xb6b9, 0xbfaa, 0xc4d2, 0xcd70, 0xd462, 0xd782, 0xef3b, 0xf91d, 0xfe9a, 0x0b08, 0x1266, 0x0cac, 0x0d8b, 0x1cca, 0x2098, 0x3323, 0x2732, 0x2d24, 0x3ce8, 0x3655, 0x43b1, 0x3e24, 0x38f0, 0x3b90, 0x3375, 0x4ed4, 0x5045, 0x5294, 0x4eac, 0x4d1a, 0x3ae1, 0x49fc, 0x520a, 0x585d, 0x5ba2, 0x53a9, 0x5602, 0x59c4, 0x4571, 0x57c6, 0x4611, 0x3b7f, 0x436f, 0x43dc, 0x4300, 0x3e29, 0x3c58, 0x2ed4, 0x2c17, 0x2431, 0x2245, 0x14b2, 0x124a, 0x0374, 0xfed2, 0xef29, 0xf2e0, 0xe2ed, 0xddf6, 0xd276, 0xc21e, 0xbb99, 0xb8e8, 0xc298, 0xbc11, 0xadf1, 0xabe9, 0xb6cd, 0xaf2c, 0xb568, 0xa4dc, 0xa7cb, 0x954d, 0x8e61, 0x91ab, 0x9293, 0x94ac, 0x984a, 0xaae9, 0xa8fd, 0xc8d1, 0xcc2f, 0xe092, 0xd938, 0xe22d, 0xe87a, 0xf711, 0xe90d, 0xf6d4, 0xf3a9, 0xf075, 0xf837, 0xf73a, 0x089f, 0x0f93, 0x0caa, 0x0a84, 0x1642, 0x1d33, 0x2c57, 0x25c0, 0x2148, 0x1f72, 0x2382, 0x1eae, 0x2b55, 0x2414, 0x28d3, 0x268c, 0x1da5, 0x2e0d, 0x327b, 0x2f36, 0x376b, 0x3276, 0x36ff, 0x4505, 0x451f, 0x4a0d, 0x4c7c, 0x4380, 0x3f0b, 0x3b50, 0x3c28, 0x3e45, 0x2b63, 0x2e84, 0x25f5, 0x230b, 0x25ab, 0x2071, 0x1e2e, 0x1b00, 0x0678, 0x0693, 0x0177, 0xfff0, 0x042e, 0xf76d, 0xf5ae, 0x0452, 0x0545, 0x0278, 0x0098, 0xf1a5, 0xe842, 0xe7b0, 0xe3d7, 0xe4e7, 0xdad2, 0xdb75, 0xe263, 0xd717, 0xe1d8, 0xec6c, 0xed80, 0xf11c, 0xeb0e, 0xf024, 0xf86c, 0xf0ce, 0xf3b4, 0xeb0b, 0xe382, 0xdd88, 0xd91b, 0xd7aa, 0xcaf9, 0xd53d, 0xc6e1, 0xc696, 0xd4b6, 0xdecb, 0xe153, 0xddc5, 0xd9e9, 0xdb59, 0xe4e3, 0xe2d3, 0xe3eb, 0xe572, 0xdf98, 0xdb7e, 0xda4a, 0xe53a, 0xe3bb, 0xef53, 0xf1cc, 0x0498, 0x1145, 0x1a69, 0x269a, 0x249d, 0x2949, 0x1b2e, 0x210c, 0x1b09, 0x1c6b, 0x0de8, 0x0e85, 0x066b, 0x0d25, 0x0fb4, 0x142c, 0x1123, 0x08ce, 0xfe9b, 0x00e8, 0x0b53, 0x00d2, 0x0215, 0x016f, 0xf6f0, 0xfa3c, 0xfa4a, 0xf4e4, 0xfe3f, 0xf510, 0xe556, 0xf08b, 0xf31e, 0xfdef, 0xfab3, 0xf000, 0x0388, 0xf748, 0x0255, 0x01ac, 0x09df, 0x0f3c, 0x119d, 0x1796, 0x185e, 0x2863, 0x1c75, 0x1d16, 0x18c2, 0x1262, 0x204e, 0x11db, 0x1435, 0x0e7a, 0x017b, 0x0001, 0x0693, 0x02e8, 0x0c18, 0xfed9, 0x04ad, 0x09a0, 0x0a8a, 0x14dc, 0x0ef4, 0x1343, 0x0af2, 0x070c, 0x01e6, 0x07cb, 0x0515, 0x046e, 0x0c9e, 0x0ef9, 0x2054, 0x2af1, 0x2f36, 0x3b26, 0x31b6, 0x28b6, 0x319e, 0x2e0e, 0x2cab, 0x2277, 0x137c, 0x10e9, 0x0525, 0x0620, 0x0a98, 0x07e3, 0x021f, 0xf795, 0xf57d, 0xfec1, 0xf469, 0xef99, 0xf793, 0xea49, 0xefbe, 0xdac8, 0xd8da, 0xd843, 0xcacd, 0xc5ef, 0xbf7f, 0xcd06, 0xd4a6, 0xd4f7, 0xd545, 0xdce9, 0xd760, 0xe7cd, 0xe351, 0xebf3, 0xe848, 0xeae0, 0xe975, 0xe1aa, 0xec45, 0xecd5, 0xe9d3, 0xe64e, 0xe98a, 0xeebf, 0xecb2, 0xf909, 0xed88, 0xe657, 0xe37b, 0xe2f7, 0xeb75, 0xe65c, 0xe542, 0xec0a, 0xece2, 0xf51f, 0xf501, 0xfee8, 0x0aae, 0xfd3a, 0xff09, 0x01ab, 0x04ef, 0x05ca, 0x0006, 0x08e9, 0x0e93, 0x1169, 0x1d28, 0x22d5, 0x2d99, 0x2629, 0x2341, 0x2491, 0x2bb6, 0x289c, 0x1b36, 0x17da, 0x1100, 0x0caa, 0x0a16, 0x0902, 0x07df, 0x0058, 0x00e3, 0x034d, 0x0637, 0x0ad4, 0x0ab4, 0x045c, 0x0173, 0x00df, 0xfde0, 0xfe3a, 0xf9c5, 0xedaf, 0xea09, 0xe26b, 0xec40, 0xf3e9, 0xefbb, 0xf7d1, 0xf7a3, 0xfda9, 0xff05, 0x0ba1, 0x122d, 0x1537, 0x11ca, 0x0e14, 0x07ea, 0x0adf, 0x041b, 0x099a, 0x0402, 0x0a54, 0x08c7, 0x10f4, 0x126a, 0x0ff7, 0x037c, 0x053e, 0x04f8, 0x0be9, 0x0662, 0x045e, 0x0887, 0x052e, 0x0421, 0x090a, 0x15e3, 0x15a3, 0x0d63, 0x0d0c, 0x0d77, 0x19cf, 0x166a, 0x13d6, 0x141a, 0x1da3, 0x28f5, 0x2406, 0x2f26, 0x3093, 0x2eed, 0x2f18, 0x2cf2, 0x3440, 0x3845, 0x248a, 0x2722, 0x183c, 0x10b2, 0x136d, 0x0e9b, 0x1008, 0x0608, 0xfd55, 0xfacb, 0xf641, 0xf5e1, 0xf676, 0xecf0, 0xed13, 0xec94, 0xe1da, 0xe789, 0xdd59, 0xd1f2, 0xce96, 0xc876, 0xcefb, 0xcddd, 0xc33f, 0xcc63, 0xcb3b, 0xd356, 0xd8c9, 0xe304, 0xe9c7, 0xeff7, 0xeb71, 0xe7e8, 0xeaa5, 0xe714, 0xe82a, 0xddec, 0xdc36, 0xe028, 0xdadd, 0xe347, 0xe254, 0xd934, 0xd97d, 0xd250, 0xde3d, 0xe3ce, 0xe2ca, 0xdb32, 0xe010, 0xe2ee, 0xdf5e, 0xdb30, 0xec02, 0xe320, 0xe6ca, 0xe65e, 0xe8f7, 0xf366, 0xf514, 0xf6f6, 0x018c, 0x04e4, 0x0bfc, 0x1715, 0x1644, 0x1949, 0x1570, 0x0f6f, 0x1003, 0x14e1, 0x1225, 0x124f, 0x0aaf, 0x05a2, 0x0946, 0x03a1, 0x11c7, 0x074e, 0xfe93, 0x0260, 0xfd3a, 0xfd08, 0xfb3f, 0xeeaa, 0xfbd7, 0xf5f9, 0xf8f5, 0x03fa, 0xffb7, 0x04a3, 0xfbdb, 0xfb68, 0xf789, 0x0723, 0x043f, 0x0680, 0x008d, 0x0681, 0x0cd1, 0x0730, 0x1453, 0x1b68, 0x214e, 0x1f51, 0x1b5c, 0x20d9, 0x2a72, 0x20af, 0x217f, 0x1c5d, 0x1ed1, 0x1e55, 0x1f16, 0x17bf, 0x1631, 0x12b1, 0x1993, 0x18c0, 0x1d13, 0x2382, 0x27e5, 0x2312, 0x2d07, 0x2299, 0x2b05, 0x324d, 0x207a, 0x2561, 0x1ff5, 0x252a, 0x29e7, 0x2186, 0x278b, 0x3019, 0x3379, 0x3843, 0x4058, 0x43bd, 0x42cb, 0x3aa3, 0x34f5, 0x34d9, 0x2eaa, 0x2d07, 0x1b3a, 0x1406, 0x13ef, 0x0a08, 0x0c6e, 0x0d08, 0x0a24, 0x058a, 0xfb41, 0xf5ce, 0xf483, 0xea74, 0xe5cb, 0xde16, 0xd96f, 0xd91d, 0xd52a, 0xd3ff, 0xd05e, 0xc71b, 0xc079, 0xc533, 0xc0c3, 0xcac8, 0xc88d, 0xc597, 0xc61c, 0xc476, 0xc8d2, 0xca7b, 0xce19, 0xcea2, 0xcef7, 0xcbaf, 0xd776, 0xda12, 0xd7fe, 0xd672, 0xd773, 0xd66b, 0xd48b, 0xd73e, 0xd097, 0xc617, 0xbfdb, 0xc11c, 0xc894, 0xcb4c, 0xca01, 0xd31f, 0xd155, 0xd34e, 0xd2ca, 0xdc48, 0xe5dc, 0xe3f9, 0xe025, 0xdecb, 0xe1dd, 0xe327, 0xea45, 0xe16e, 0xeefa, 0xf542, 0x018d, 0x0cb5, 0x1db8, 0x1b03, 0x2781, 0x17c9, 0x293c, 0x236e, 0x26f8, 0x2095, 0x134e, 0x1667, 0x0849, 0x1422, 0x1099, 0x1971, 0x12b1, 0x16ff, 0x0f4e, 0x12b5, 0x1124, 0x064e, 0x03c0, 0x04ac, 0xff57, 0xfef0, 0xff99, 0xf550, 0xf0b0, 0xeaae, 0xf460, 0x00da, 0x0356, 0x08e7, 0x0723, 0x0c34, 0x0b6d, 0x109f, 0x1461, 0x1abe, 0x1af0, 0x1275, 0x1759, 0x1826, 0x2378, 0x1de4, 0x1f81, 0x1bee, 0x1d7d, 0x1d5b, 0x227b, 0x1f69, 0x1630, 0x13d5, 0x1252, 0x13b8, 0x183b, 0x147b, 0x0eaa, 0x14a0, 0x121f, 0x1951, 0x1f68, 0x265c, 0x25f5, 0x298a, 0x285f, 0x25b1, 0x2806, 0x29d1, 0x2025, 0x225d, 0x2539, 0x2cc5, 0x302c, 0x35a4, 0x3cb8, 0x3721, 0x2ffb, 0x367c, 0x37c0, 0x32a1, 0x26a4, 0x22fd, 0x14f9, 0x0d66, 0x1032, 0x0eb6, 0x0b9f, 0xffc2, 0xfb60, 0xfacd, 0xf8d2, 0xfd4c, 0xf550, 0xf3f6, 0xf3cd, 0xed2f, 0xe609, 0xe1a4, 0xdacd, 0xced6, 0xcb62, 0xc67f, 0xd235, 0xd2bc, 0xcc8d, 0xd592, 0xd4f1, 0xd3ea, 0xd823, 0xe173, 0xe511, 0xe7b8, 0xda60, 0xe01e, 0xda29, 0xe3ef, 0xd640, 0xd502, 0xd0b2, 0xd2fa, 0xd4c9, 0xd82a, 0xde31, 0xd8b4, 0xd3a8, 0xd578, 0xdab2, 0xdc29, 0xd860, 0xd3e3, 0xd33d, 0xcc93, 0xd276, 0xdc87, 0xe158, 0xe38d, 0xe811, 0xe538, 0xeb51, 0xf203, 0xf52e, 0xf4e6, 0xf8ec, 0xfa97, 0xfd88, 0x0098, 0x06ae, 0x0b99, 0x0437, 0x0a80, 0x0c48, 0x1e07, 0x1bbc, 0x1ef1, 0x15b7, 0x1170, 0x16b1, 0x1b17, 0x18d9, 0x104c, 0x0dcc, 0xffb7, 0xfba4, 0xfa29, 0x0090, 0xf3f2, 0xf8b3, 0xf8fe, 0xf40f, 0xf463, 0xf852, 0xf354, 0xea57, 0xeb45, 0xec05, 0xf524, 0xf1dd, 0xef86, 0xf808, 0xf1dd, 0xf65c, 0x04f4, 0x10e8, 0x1b2a, 0x1eaa, 0x1930, 0x2341, 0x1ef5, 0x25c4, 0x2467, 0x0fe4, 0x1444, 0x09cd, 0x07a5, 0x067f, 0x092e, 0x0910, 0x0566, 0x02ee, 0x0708, 0x104b, 0x0854, 0x0f51, 0x0c6f, 0x070f, 0x0918, 0x0b45, 0x0ea1, 0x0cc9, 0x0c3c, 0x0749, 0x1070, 0x1498, 0x1ada, 0x1a25, 0x2084, 0x2932, 0x28b0, 0x2cee, 0x347d, 0x31b8, 0x2452, 0x23c2, 0x22e2, 0x2b1e, 0x22f2, 0x1ef8, 0x1d2a, 0x124f, 0x1591, 0x1336, 0x1ac5, 0x19cd, 0x12b2, 0x06a7, 0xfb17, 0xf81d, 0xf528, 0xe9cd, 0xe583, 0xda2c, 0xdf37, 0xd834, 0xdfcb, 0xe30b, 0xe084, 0xdd87, 0xe2b3, 0xe3be, 0xee85, 0xe637, 0xe830, 0xe4b6, 0xe2b1, 0xe7ff, 0xed0b, 0xf81e, 0xfcc8, 0xfcd1, 0x008d, 0x0267, 0x0510, 0x0697, 0xfe49, 0xf9f2, 0xf223, 0xf2a7, 0xe598, 0xec7b, 0xde5d, 0xdeab, 0xe009, 0xe7d7, 0xf036, 0xeeae, 0xfb58, 0xfaf1, 0xfa71, 0xfe13, 0x0619, 0x087a, 0x0ab1, 0x018e, 0xfb14, 0xfb70, 0x0136, 0x05fa, 0x029c, 0x0b15, 0x1750, 0x142a, 0x1c85, 0x22fe, 0x2948, 0x2194, 0x1e04, 0x1cf9, 0x1e95, 0x17cc, 0x1288, 0x0dc7, 0x04c7, 0x061f, 0x02fa, 0x0fed, 0x128e, 0x138f, 0x09d0, 0x0667, 0xff84, 0x0263, 0xf87e, 0xec9f, 0xe444, 0xddbc, 0xd624, 0xda9b, 0xd605, 0xd79d, 0xe016, 0xd918, 0xe784, 0xe61e, 0xe653, 0xf138, 0xe9b0, 0xe988, 0xec98, 0xed89, 0xf51e, 0xee02, 0xefba, 0xf120, 0xf7e0, 0xff8a, 0x076f, 0xf923, 0x0001, 0xfc5a, 0xfb04, 0xf5d5, 0xfe17, 0xf18c, 0xefa8, 0xe61e, 0xe663, 0xf129, 0xeae9, 0xfb74, 0xf804, 0xfda8, 0xfe2a, 0x073f, 0x0d4c, 0x0fd7, 0x060e, 0x0a32, 0x0466, 0x0431, 0x0204, 0x049b, 0x01af, 0x07d6, 0x0730, 0x12d4, 0x21df, 0x2b35, 0x289c, 0x2c69, 0x2e67, 0x2b5c, 0x31b2, 0x21fd, 0x1620, 0x0c72, 0x085c, 0x0adf, 0x12d3, 0x0df5, 0x1430, 0x0681, 0x07ad, 0x04dc, 0xffd4, 0xf98e, 0xf71e, 0xeca1, 0xe2eb, 0xd9c7, 0xd687, 0xd9d9, 0xcfb2, 0xd262, 0xd819, 0xe156, 0xe272, 0xf54c, 0xf337, 0x0037, 0xfce6, 0xfb9b, 0x0944, 0x11ca, 0x1027, 0x0a45, 0x032e, 0x0735, 0x0896, 0x0351, 0xffa0, 0x05ec, 0x079d, 0x000c, 0x0106, 0x0940, 0x01d2, 0xf80c, 0xf834, 0xfc7c, 0xfd2c, 0xfa38, 0x003c, 0xf624, 0xfce9, 0xfba1, 0x0568, 0x0d43, 0x177f, 0x1bd5, 0x188c, 0x13eb, 0x1e6a, 0x2205, 0x1b29, 0x18d6, 0x12b5, 0x1972, 0x15bd, 0x2397, 0x2d7d, 0x2850, 0x2a68, 0x30a9, 0x2ea1, 0x3015, 0x29b8, 0x23fb, 0x18d9, 0x18e6, 0x1683, 0x106a, 0x0b27, 0x0669, 0xfa6e, 0xfc23, 0xef10, 0xf336, 0xf613, 0xee87, 0xed6b, 0xe5fa, 0xe227, 0xdddf, 0xe48e, 0xd85b, 0xd499, 0xd480, 0xd48d, 0xd607, 0xdb91, 0xdfb5, 0xe7cd, 0xe971, 0xf0dd, 0x0081, 0x0145, 0x06c0, 0xf950, 0x0015, 0x005b, 0xf6a8, 0xefb4, 0xe5a5, 0x0000, 0x0000, 0x0000, 0x1011, 0x0000, 0x0000, 0x0000, 0x6666, 0x6666, 0x3965, 0x3137, 0x202c, 0x7830, 0x6666, 0x6666, 0x3066, 0x6464, 0x202c, 0x7830, 0x3030, 0x3138, 0x202c, 0x7830, 0x3130, 0x3534, 0x202c, 0x7830, 0x3630, 0x3063, 0x202c, 0x7830, 0x6666, 0x6666, 0x3966, 0x3035, 0x202c, 0x7830, 0x3030, 0x3531, 0x202c, 0x7830, 0x3030, 0x6235, 0x202c, 0x7830, 0x6666, 0x6666, 0x3666, 0x3861, 0x202c, 0x7830, 0x6666, 0x6666, 0x6665, 0x3462, 0x202c, 0x7830, 0x6666, 0x6666, 0x3565, 0x3561, 0x202c, 0x7830, 0x3030, 0x3030, 0x202c, 0x7830, 0x3030, 0x3030, 0x202c, 0x7830, 0x3030, 0x3030, 0x202c, 0x7830, 0x3031, 0x3131, 0x202c, 0x7830, 0x3030, 0x3030, 0x202c, 0x7830, 0x3030, 0x3030, 0x202c, 0x7830, 0x3030, 0x3030, 0x202c, 0x7830, 0x3636, 0x3636, 0x202c, 0x7830, 0x3636, 0x3636, 0x202c, 0x7830, 0x3933, 0x3536, 0x202c, 0x7830, 0x3133, 0x3733, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3636, 0x3636, 0x202c, 0x7830, 0x3636, 0x3636, 0x202c, 0x7830, 0x3033, 0x3636, 0x202c, 0x7830, 0x3436, 0x3436, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3033, 0x3033, 0x202c, 0x7830, 0x3133, 0x3833, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3133, 0x3033, 0x202c, 0x7830, 0x3533, 0x3433, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3633, 0x3033, 0x202c, 0x7830, 0x3033, 0x3336, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3636, 0x3636, 0x202c, 0x7830, 0x3636, 0x3636, 0x202c, 0x7830, 0x3933, 0x3636, 0x202c, 0x7830, 0x3033, 0x3533, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3033, 0x3033, 0x202c, 0x7830, 0x3533, 0x3133, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3033, 0x3033, 0x202c, 0x7830, 0x3236, 0x3533, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3636, 0x3636, 0x202c, 0x7830, 0x3636, 0x3636, 0x202c, 0x7830, 0x3633, 0x3636, 0x202c, 0x7830, 0x3833, 0x3136, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3636, 0x3636, 0x202c, 0x7830, 0x3636, 0x3636, 0x202c, 0x7830, 0x3636, 0x3536, 0x202c, 0x7830, 0x3433, 0x3236, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3636, 0x3636, 0x202c, 0x7830, 0x3636, 0x3636, 0x202c, 0x7830, 0x3533, 0x3536, 0x202c, 0x7830, 0x3533, 0x3136, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3033, 0x3033, 0x202c, 0x7830, 0x3033, 0x3033, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3033, 0x3033, 0x202c, 0x7830, 0x3033, 0x3033, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3033, 0x3033, 0x202c, 0x7830, 0x3033, 0x3033, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3033, 0x3133, 0x202c, 0x7830, 0x3133, 0x3133, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3033, 0x3033, 0x202c, 0x7830, 0x3033, 0x3033, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3033, 0x3033, 0x202c, 0x7830, 0x3033, 0x3033, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3033, 0x3033, 0x202c, 0x7830, 0x3033, 0x3033, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3633, 0x3633, 0x202c, 0x7830, 0x3633, 0x3633, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3633, 0x3633, 0x202c, 0x7830, 0x3633, 0x3633, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3933, 0x3333, 0x202c, 0x7830, 0x3533, 0x3633, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3133, 0x3333, 0x202c, 0x7830, 0x3733, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3033, 0x3233, 0x202c, 0x7830, 0x3336, 0x3233, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3833, 0x3733, 0x202c, 0x7830, 0x3033, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3633, 0x3633, 0x202c, 0x7830, 0x3633, 0x3633, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3633, 0x3633, 0x202c, 0x7830, 0x3633, 0x3633, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3033, 0x3333, 0x202c, 0x7830, 0x3633, 0x3633, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3433, 0x3633, 0x202c, 0x7830, 0x3433, 0x3633, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3033, 0x3233, 0x202c, 0x7830, 0x3336, 0x3233, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3833, 0x3733, 0x202c, 0x7830, 0x3033, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3033, 0x3333, 0x202c, 0x7830, 0x3033, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3133, 0x3333, 0x202c, 0x7830, 0x3833, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3033, 0x3233, 0x202c, 0x7830, 0x3336, 0x3233, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3833, 0x3733, 0x202c, 0x7830, 0x3033, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3833, 0x3333, 0x202c, 0x7830, 0x3733, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3033, 0x3333, 0x202c, 0x7830, 0x3333, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3033, 0x3233, 0x202c, 0x7830, 0x3336, 0x3233, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3833, 0x3733, 0x202c, 0x7830, 0x3033, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3833, 0x3333, 0x202c, 0x7830, 0x3333, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3733, 0x3333, 0x202c, 0x7830, 0x3333, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3033, 0x3233, 0x202c, 0x7830, 0x3336, 0x3233, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3833, 0x3733, 0x202c, 0x7830, 0x3033, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3033, 0x3333, 0x202c, 0x7830, 0x3333, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3333, 0x3333, 0x202c, 0x7830, 0x3333, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3033, 0x3233, 0x202c, 0x7830, 0x3336, 0x3233, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3833, 0x3733, 0x202c, 0x7830, 0x3033, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3033, 0x3333, 0x202c, 0x7830, 0x3233, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3333, 0x3633, 0x202c, 0x7830, 0x3233, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3033, 0x3233, 0x202c, 0x7830, 0x3336, 0x3233, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3833, 0x3733, 0x202c, 0x7830, 0x3033, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3833, 0x3333, 0x202c, 0x7830, 0x3733, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3033, 0x3333, 0x202c, 0x7830, 0x3333, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3033, 0x3233, 0x202c, 0x7830, 0x3336, 0x3233, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3833, 0x3733, 0x202c, 0x7830, 0x3033, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3833, 0x3333, 0x202c, 0x7830, 0x3333, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3333, 0x3333, 0x202c, 0x7830, 0x3333, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3033, 0x3233, 0x202c, 0x7830, 0x3336, 0x3233, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3833, 0x3733, 0x202c, 0x7830, 0x3033, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3733, 0x3333, 0x202c, 0x7830, 0x3333, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3333, 0x3333, 0x202c, 0x7830, 0x3333, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3033, 0x3233, 0x202c, 0x7830, 0x3336, 0x3233, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3833, 0x3733, 0x202c, 0x7830, 0x3033, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3033, 0x3333, 0x202c, 0x7830, 0x3233, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3333, 0x3633, 0x202c, 0x7830, 0x3233, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3033, 0x3233, 0x202c, 0x7830, 0x3336, 0x3233, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3833, 0x3733, 0x202c, 0x7830, 0x3033, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3833, 0x3333, 0x202c, 0x7830, 0x3733, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3033, 0x3333, 0x202c, 0x7830, 0x3333, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3033, 0x3233, 0x202c, 0x7830, 0x3336, 0x3233, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3833, 0x3733, 0x202c, 0x7830, 0x3033, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3033, 0x3333, 0x202c, 0x7830, 0x3333, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3333, 0x3333, 0x202c, 0x7830, 0x3333, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3033, 0x3233, 0x202c, 0x7830, 0x3336, 0x3233, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3833, 0x3733, 0x202c, 0x7830, 0x3033, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3333, 0x3333, 0x202c, 0x7830, 0x3333, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3333, 0x3333, 0x202c, 0x7830, 0x3333, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3033, 0x3233, 0x202c, 0x7830, 0x3336, 0x3233, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3833, 0x3733, 0x202c, 0x7830, 0x3033, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3033, 0x3333, 0x202c, 0x7830, 0x3233, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3333, 0x3633, 0x202c, 0x7830, 0x3233, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3033, 0x3233, 0x202c, 0x7830, 0x3336, 0x3233, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3833, 0x3733, 0x202c, 0x7830, 0x3033, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3833, 0x3333, 0x202c, 0x7830, 0x3733, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3033, 0x3333, 0x202c, 0x7830, 0x3333, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3033, 0x3233, 0x202c, 0x7830, 0x3336, 0x3233, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3833, 0x3733, 0x202c, 0x7830, 0x3033, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3033, 0x3333, 0x202c, 0x7830, 0x3333, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3233, 0x3333, 0x202c, 0x7830, 0x3333, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3033, 0x3233, 0x202c, 0x7830, 0x3336, 0x3233, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3833, 0x3733, 0x202c, 0x7830, 0x3033, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3333, 0x3333, 0x202c, 0x7830, 0x3633, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3233, 0x3333, 0x202c, 0x7830, 0x3333, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3033, 0x3233, 0x202c, 0x7830, 0x3336, 0x3233, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3833, 0x3733, 0x202c, 0x7830, 0x3033, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3033, 0x3333, 0x202c, 0x7830, 0x3233, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3333, 0x3633, 0x202c, 0x7830, 0x3233, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3033, 0x3233, 0x202c, 0x7830, 0x3336, 0x3233, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3833, 0x3733, 0x202c, 0x7830, 0x3033, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3833, 0x3333, 0x202c, 0x7830, 0x3733, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3033, 0x3333, 0x202c, 0x7830, 0x3333, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3033, 0x3233, 0x202c, 0x7830, 0x3336, 0x3233, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3833, 0x3733, 0x202c, 0x7830, 0x3033, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3833, 0x3333, 0x202c, 0x7830, 0x3333, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3733, 0x3333, 0x202c, 0x7830, 0x3333, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3033, 0x3233, 0x202c, 0x7830, 0x3336, 0x3233, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3833, 0x3733, 0x202c, 0x7830, 0x3033, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3033, 0x3333, 0x202c, 0x7830, 0x3333, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3333, 0x3333, 0x202c, 0x7830, 0x3333, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3033, 0x3233, 0x202c, 0x7830, 0x3336, 0x3233, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3833, 0x3733, 0x202c, 0x7830, 0x3033, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3033, 0x3333, 0x202c, 0x7830, 0x3233, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3333, 0x3633, 0x202c, 0x7830, 0x3233, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3033, 0x3233, 0x202c, 0x7830, 0x3336, 0x3233, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3833, 0x3733, 0x202c, 0x7830, 0x3033, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3833, 0x3333, 0x202c, 0x7830, 0x3733, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3033, 0x3333, 0x202c, 0x7830, 0x3333, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3033, 0x3233, 0x202c, 0x7830, 0x3336, 0x3233, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3833, 0x3733, 0x202c, 0x7830, 0x3033, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3033, 0x3333, 0x202c, 0x7830, 0x3333, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x3837, 0x3033, 0x202c, 0x7830, 0x3333, 0x3333, 0x202c, 0x7830, 0x3333, 0x3333, 0x202c, 0x7830, 0x3032, 0x6332, 0x202c, 0x7830, 0x0000, 0x0000, 0x0000, 0x0000, 0xc471, 0x0001,
};


const u32 audio_data_length = sizeof(audio_data)/sizeof(audio_data[0]);
int main(void)
{
  Dac_Init();
        /*
        #if(format == 1)//数组是uint16_t
        //90*100/72M  =9/72000 = 1/8000
        arr = 89;
        psc = 99;
        #elif(format == 2)//数组是uint8_t
        arr = 49;
        psc = 89;
        #endif
        */
  TIM2_Int_Init(89,99);// 124   71
       
  for(;;)
  {

  }
        return 0;
}
void TIM2_IRQHandler(void)
{
    static int i = 0;
    if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
    {
        DAC_SetChannel1Data(DAC_Align_12b_R,(audio_data+0x8000)>>4&0xfff0);//(audio_data>>4)&0xfff
        i++;
        if (i >= audio_data_length)
            i = 0;

        TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
    }
}
void Dac_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    DAC_InitTypeDef DAC_InitType;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
    GPIO_SetBits(GPIOA, GPIO_Pin_4);

    DAC_InitType.DAC_Trigger = DAC_Trigger_None;
    DAC_InitType.DAC_WaveGeneration = DAC_WaveGeneration_None;
    DAC_InitType.DAC_LFSRUnmask_TriangleAmplitude = DAC_LFSRUnmask_Bit0;
    DAC_InitType.DAC_OutputBuffer = DAC_OutputBuffer_Disable ;
    DAC_Init(DAC_Channel_1, &DAC_InitType);
    DAC_Cmd(DAC_Channel_1, ENABLE);

    DAC_SetChannel1Data(DAC_Align_12b_R, 0);
}

void TIM2_Int_Init(u16 arr, u16 psc) //定时器初始化
{
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    NVIC_InitTypeDef NVIC_InitStructure;
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //时钟使能

    //定时器初始化
    TIM_TimeBaseStructure.TIM_Period = arr;
    TIM_TimeBaseStructure.TIM_Prescaler = psc;
    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
    TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);

    //中断优先级设置
    NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
    TIM_Cmd(TIM2, ENABLE);
}



————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/qq_42475191/article/details/131128415

使用特权

评论回复
沙发
呐咯密密| | 2024-5-13 13:25 | 只看该作者
代码好完整啊,好评

使用特权

评论回复
板凳
gouguoccc| | 2024-5-13 19:56 | 只看该作者
没有说采样率能达到多少呢?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2028

主题

15903

帖子

14

粉丝