FreeRDP
Loading...
Searching...
No Matches
ncrush.c
1
22#include <freerdp/config.h>
23
24#include <winpr/assert.h>
25#include <winpr/cast.h>
26#include <winpr/crt.h>
27#include <winpr/print.h>
28#include <winpr/bitstream.h>
29
30#include <freerdp/log.h>
31#include <freerdp/types.h>
32
33#include "ncrush.h"
34
35#define TAG FREERDP_TAG("codec")
36
37struct s_NCRUSH_CONTEXT
38{
39 ALIGN64 BOOL Compressor;
40 ALIGN64 BYTE* HistoryPtr;
41 ALIGN64 UINT32 HistoryOffset;
42 ALIGN64 UINT32 HistoryEndOffset;
43 ALIGN64 UINT32 HistoryBufferSize;
44 ALIGN64 BYTE HistoryBuffer[65536];
45 ALIGN64 UINT32 HistoryBufferFence;
46 ALIGN64 UINT32 OffsetCache[4];
47 ALIGN64 UINT16 HashTable[65536];
48 ALIGN64 UINT16 MatchTable[65536];
49 ALIGN64 BYTE HuffTableCopyOffset[1024];
50 ALIGN64 BYTE HuffTableLOM[4096];
51};
52
53static const UINT16 HuffTableLEC[8192] = {
54 0x510B, 0x611F, 0x610D, 0x9027, 0x6000, 0x7105, 0x6117, 0xA068, 0x5111, 0x7007, 0x6113, 0x90C0,
55 0x6108, 0x8018, 0x611B, 0xA0B3, 0x510F, 0x7003, 0x6110, 0x9042, 0x6002, 0x800B, 0x6119, 0xA091,
56 0x5121, 0x7080, 0x6115, 0xA03A, 0x610A, 0x9012, 0x611D, 0xA0D7, 0x510B, 0x6122, 0x610E, 0x9035,
57 0x6001, 0x7123, 0x6118, 0xA07A, 0x5111, 0x7009, 0x6114, 0x90F4, 0x6109, 0x8060, 0x611C, 0xA0C4,
58 0x510F, 0x7005, 0x6112, 0x9070, 0x6107, 0x800F, 0x611A, 0xA0A1, 0x5121, 0x7102, 0x6116, 0xA056,
59 0x610C, 0x901D, 0x611E, 0xA0E8, 0x510B, 0x611F, 0x610D, 0x902C, 0x6000, 0x7106, 0x6117, 0xA071,
60 0x5111, 0x7008, 0x6113, 0x90E0, 0x6108, 0x8020, 0x611B, 0xA0BB, 0x510F, 0x7004, 0x6110, 0x9049,
61 0x6002, 0x800D, 0x6119, 0xA099, 0x5121, 0x70FF, 0x6115, 0xA04C, 0x610A, 0x9017, 0x611D, 0xA0DF,
62 0x510B, 0x6122, 0x610E, 0x903C, 0x6001, 0x7124, 0x6118, 0xA087, 0x5111, 0x700A, 0x6114, 0xA023,
63 0x6109, 0x80FE, 0x611C, 0xA0CE, 0x510F, 0x7006, 0x6112, 0x9082, 0x6107, 0x8011, 0x611A, 0xA0A9,
64 0x5121, 0x7103, 0x6116, 0xA05F, 0x610C, 0x9022, 0x611E, 0xA0F5, 0x510B, 0x611F, 0x610D, 0x9029,
65 0x6000, 0x7105, 0x6117, 0xA06C, 0x5111, 0x7007, 0x6113, 0x90CC, 0x6108, 0x8019, 0x611B, 0xA0B7,
66 0x510F, 0x7003, 0x6110, 0x9044, 0x6002, 0x800C, 0x6119, 0xA095, 0x5121, 0x7080, 0x6115, 0xA046,
67 0x610A, 0x9015, 0x611D, 0xA0DB, 0x510B, 0x6122, 0x610E, 0x9038, 0x6001, 0x7123, 0x6118, 0xA07E,
68 0x5111, 0x7009, 0x6114, 0x90FC, 0x6109, 0x80F0, 0x611C, 0xA0C9, 0x510F, 0x7005, 0x6112, 0x907F,
69 0x6107, 0x8010, 0x611A, 0xA0A5, 0x5121, 0x7102, 0x6116, 0xA05B, 0x610C, 0x901F, 0x611E, 0xA0EC,
70 0x510B, 0x611F, 0x610D, 0x9031, 0x6000, 0x7106, 0x6117, 0xA075, 0x5111, 0x7008, 0x6113, 0x90F1,
71 0x6108, 0x8040, 0x611B, 0xA0BF, 0x510F, 0x7004, 0x6110, 0x9051, 0x6002, 0x800E, 0x6119, 0xA09D,
72 0x5121, 0x70FF, 0x6115, 0xA052, 0x610A, 0x901B, 0x611D, 0xA0E4, 0x510B, 0x6122, 0x610E, 0x903F,
73 0x6001, 0x7124, 0x6118, 0xA08C, 0x5111, 0x700A, 0x6114, 0xA02F, 0x6109, 0x8120, 0x611C, 0xA0D3,
74 0x510F, 0x7006, 0x6112, 0x9088, 0x6107, 0x8013, 0x611A, 0xA0AE, 0x5121, 0x7103, 0x6116, 0xA064,
75 0x610C, 0x9025, 0x611E, 0xA0FA, 0x510B, 0x611F, 0x610D, 0x9028, 0x6000, 0x7105, 0x6117, 0xA06A,
76 0x5111, 0x7007, 0x6113, 0x90C6, 0x6108, 0x8018, 0x611B, 0xA0B5, 0x510F, 0x7003, 0x6110, 0x9043,
77 0x6002, 0x800B, 0x6119, 0xA093, 0x5121, 0x7080, 0x6115, 0xA03D, 0x610A, 0x9014, 0x611D, 0xA0D9,
78 0x510B, 0x6122, 0x610E, 0x9037, 0x6001, 0x7123, 0x6118, 0xA07C, 0x5111, 0x7009, 0x6114, 0x90F8,
79 0x6109, 0x8060, 0x611C, 0xA0C7, 0x510F, 0x7005, 0x6112, 0x9078, 0x6107, 0x800F, 0x611A, 0xA0A3,
80 0x5121, 0x7102, 0x6116, 0xA058, 0x610C, 0x901E, 0x611E, 0xA0EA, 0x510B, 0x611F, 0x610D, 0x9030,
81 0x6000, 0x7106, 0x6117, 0xA073, 0x5111, 0x7008, 0x6113, 0x90EE, 0x6108, 0x8020, 0x611B, 0xA0BD,
82 0x510F, 0x7004, 0x6110, 0x9050, 0x6002, 0x800D, 0x6119, 0xA09B, 0x5121, 0x70FF, 0x6115, 0xA04E,
83 0x610A, 0x901A, 0x611D, 0xA0E2, 0x510B, 0x6122, 0x610E, 0x903E, 0x6001, 0x7124, 0x6118, 0xA08A,
84 0x5111, 0x700A, 0x6114, 0xA02D, 0x6109, 0x80FE, 0x611C, 0xA0D1, 0x510F, 0x7006, 0x6112, 0x9084,
85 0x6107, 0x8011, 0x611A, 0xA0AC, 0x5121, 0x7103, 0x6116, 0xA062, 0x610C, 0x9024, 0x611E, 0xA0F7,
86 0x510B, 0x611F, 0x610D, 0x902A, 0x6000, 0x7105, 0x6117, 0xA06E, 0x5111, 0x7007, 0x6113, 0x90D0,
87 0x6108, 0x8019, 0x611B, 0xA0B9, 0x510F, 0x7003, 0x6110, 0x9048, 0x6002, 0x800C, 0x6119, 0xA097,
88 0x5121, 0x7080, 0x6115, 0xA04A, 0x610A, 0x9016, 0x611D, 0xA0DD, 0x510B, 0x6122, 0x610E, 0x9039,
89 0x6001, 0x7123, 0x6118, 0xA085, 0x5111, 0x7009, 0x6114, 0x90FD, 0x6109, 0x80F0, 0x611C, 0xA0CB,
90 0x510F, 0x7005, 0x6112, 0x9081, 0x6107, 0x8010, 0x611A, 0xA0A7, 0x5121, 0x7102, 0x6116, 0xA05D,
91 0x610C, 0x9021, 0x611E, 0xA0EF, 0x510B, 0x611F, 0x610D, 0x9033, 0x6000, 0x7106, 0x6117, 0xA077,
92 0x5111, 0x7008, 0x6113, 0x90F2, 0x6108, 0x8040, 0x611B, 0xA0C2, 0x510F, 0x7004, 0x6110, 0x9059,
93 0x6002, 0x800E, 0x6119, 0xA09F, 0x5121, 0x70FF, 0x6115, 0xA054, 0x610A, 0x901C, 0x611D, 0xA0E6,
94 0x510B, 0x6122, 0x610E, 0x9041, 0x6001, 0x7124, 0x6118, 0xA08E, 0x5111, 0x700A, 0x6114, 0xA034,
95 0x6109, 0x8120, 0x611C, 0xA0D5, 0x510F, 0x7006, 0x6112, 0x9090, 0x6107, 0x8013, 0x611A, 0xA0B0,
96 0x5121, 0x7103, 0x6116, 0xA066, 0x610C, 0x9026, 0x611E, 0xA104, 0x510B, 0x611F, 0x610D, 0x9027,
97 0x6000, 0x7105, 0x6117, 0xA069, 0x5111, 0x7007, 0x6113, 0x90C0, 0x6108, 0x8018, 0x611B, 0xA0B4,
98 0x510F, 0x7003, 0x6110, 0x9042, 0x6002, 0x800B, 0x6119, 0xA092, 0x5121, 0x7080, 0x6115, 0xA03B,
99 0x610A, 0x9012, 0x611D, 0xA0D8, 0x510B, 0x6122, 0x610E, 0x9035, 0x6001, 0x7123, 0x6118, 0xA07B,
100 0x5111, 0x7009, 0x6114, 0x90F4, 0x6109, 0x8060, 0x611C, 0xA0C5, 0x510F, 0x7005, 0x6112, 0x9070,
101 0x6107, 0x800F, 0x611A, 0xA0A2, 0x5121, 0x7102, 0x6116, 0xA057, 0x610C, 0x901D, 0x611E, 0xA0E9,
102 0x510B, 0x611F, 0x610D, 0x902C, 0x6000, 0x7106, 0x6117, 0xA072, 0x5111, 0x7008, 0x6113, 0x90E0,
103 0x6108, 0x8020, 0x611B, 0xA0BC, 0x510F, 0x7004, 0x6110, 0x9049, 0x6002, 0x800D, 0x6119, 0xA09A,
104 0x5121, 0x70FF, 0x6115, 0xA04D, 0x610A, 0x9017, 0x611D, 0xA0E1, 0x510B, 0x6122, 0x610E, 0x903C,
105 0x6001, 0x7124, 0x6118, 0xA089, 0x5111, 0x700A, 0x6114, 0xA02B, 0x6109, 0x80FE, 0x611C, 0xA0CF,
106 0x510F, 0x7006, 0x6112, 0x9082, 0x6107, 0x8011, 0x611A, 0xA0AA, 0x5121, 0x7103, 0x6116, 0xA061,
107 0x610C, 0x9022, 0x611E, 0xA0F6, 0x510B, 0x611F, 0x610D, 0x9029, 0x6000, 0x7105, 0x6117, 0xA06D,
108 0x5111, 0x7007, 0x6113, 0x90CC, 0x6108, 0x8019, 0x611B, 0xA0B8, 0x510F, 0x7003, 0x6110, 0x9044,
109 0x6002, 0x800C, 0x6119, 0xA096, 0x5121, 0x7080, 0x6115, 0xA047, 0x610A, 0x9015, 0x611D, 0xA0DC,
110 0x510B, 0x6122, 0x610E, 0x9038, 0x6001, 0x7123, 0x6118, 0xA083, 0x5111, 0x7009, 0x6114, 0x90FC,
111 0x6109, 0x80F0, 0x611C, 0xA0CA, 0x510F, 0x7005, 0x6112, 0x907F, 0x6107, 0x8010, 0x611A, 0xA0A6,
112 0x5121, 0x7102, 0x6116, 0xA05C, 0x610C, 0x901F, 0x611E, 0xA0ED, 0x510B, 0x611F, 0x610D, 0x9031,
113 0x6000, 0x7106, 0x6117, 0xA076, 0x5111, 0x7008, 0x6113, 0x90F1, 0x6108, 0x8040, 0x611B, 0xA0C1,
114 0x510F, 0x7004, 0x6110, 0x9051, 0x6002, 0x800E, 0x6119, 0xA09E, 0x5121, 0x70FF, 0x6115, 0xA053,
115 0x610A, 0x901B, 0x611D, 0xA0E5, 0x510B, 0x6122, 0x610E, 0x903F, 0x6001, 0x7124, 0x6118, 0xA08D,
116 0x5111, 0x700A, 0x6114, 0xA032, 0x6109, 0x8120, 0x611C, 0xA0D4, 0x510F, 0x7006, 0x6112, 0x9088,
117 0x6107, 0x8013, 0x611A, 0xA0AF, 0x5121, 0x7103, 0x6116, 0xA065, 0x610C, 0x9025, 0x611E, 0xA0FB,
118 0x510B, 0x611F, 0x610D, 0x9028, 0x6000, 0x7105, 0x6117, 0xA06B, 0x5111, 0x7007, 0x6113, 0x90C6,
119 0x6108, 0x8018, 0x611B, 0xA0B6, 0x510F, 0x7003, 0x6110, 0x9043, 0x6002, 0x800B, 0x6119, 0xA094,
120 0x5121, 0x7080, 0x6115, 0xA045, 0x610A, 0x9014, 0x611D, 0xA0DA, 0x510B, 0x6122, 0x610E, 0x9037,
121 0x6001, 0x7123, 0x6118, 0xA07D, 0x5111, 0x7009, 0x6114, 0x90F8, 0x6109, 0x8060, 0x611C, 0xA0C8,
122 0x510F, 0x7005, 0x6112, 0x9078, 0x6107, 0x800F, 0x611A, 0xA0A4, 0x5121, 0x7102, 0x6116, 0xA05A,
123 0x610C, 0x901E, 0x611E, 0xA0EB, 0x510B, 0x611F, 0x610D, 0x9030, 0x6000, 0x7106, 0x6117, 0xA074,
124 0x5111, 0x7008, 0x6113, 0x90EE, 0x6108, 0x8020, 0x611B, 0xA0BE, 0x510F, 0x7004, 0x6110, 0x9050,
125 0x6002, 0x800D, 0x6119, 0xA09C, 0x5121, 0x70FF, 0x6115, 0xA04F, 0x610A, 0x901A, 0x611D, 0xA0E3,
126 0x510B, 0x6122, 0x610E, 0x903E, 0x6001, 0x7124, 0x6118, 0xA08B, 0x5111, 0x700A, 0x6114, 0xA02E,
127 0x6109, 0x80FE, 0x611C, 0xA0D2, 0x510F, 0x7006, 0x6112, 0x9084, 0x6107, 0x8011, 0x611A, 0xA0AD,
128 0x5121, 0x7103, 0x6116, 0xA063, 0x610C, 0x9024, 0x611E, 0xA0F9, 0x510B, 0x611F, 0x610D, 0x902A,
129 0x6000, 0x7105, 0x6117, 0xA06F, 0x5111, 0x7007, 0x6113, 0x90D0, 0x6108, 0x8019, 0x611B, 0xA0BA,
130 0x510F, 0x7003, 0x6110, 0x9048, 0x6002, 0x800C, 0x6119, 0xA098, 0x5121, 0x7080, 0x6115, 0xA04B,
131 0x610A, 0x9016, 0x611D, 0xA0DE, 0x510B, 0x6122, 0x610E, 0x9039, 0x6001, 0x7123, 0x6118, 0xA086,
132 0x5111, 0x7009, 0x6114, 0x90FD, 0x6109, 0x80F0, 0x611C, 0xA0CD, 0x510F, 0x7005, 0x6112, 0x9081,
133 0x6107, 0x8010, 0x611A, 0xA0A8, 0x5121, 0x7102, 0x6116, 0xA05E, 0x610C, 0x9021, 0x611E, 0xA0F3,
134 0x510B, 0x611F, 0x610D, 0x9033, 0x6000, 0x7106, 0x6117, 0xA079, 0x5111, 0x7008, 0x6113, 0x90F2,
135 0x6108, 0x8040, 0x611B, 0xA0C3, 0x510F, 0x7004, 0x6110, 0x9059, 0x6002, 0x800E, 0x6119, 0xA0A0,
136 0x5121, 0x70FF, 0x6115, 0xA055, 0x610A, 0x901C, 0x611D, 0xA0E7, 0x510B, 0x6122, 0x610E, 0x9041,
137 0x6001, 0x7124, 0x6118, 0xA08F, 0x5111, 0x700A, 0x6114, 0xA036, 0x6109, 0x8120, 0x611C, 0xA0D6,
138 0x510F, 0x7006, 0x6112, 0x9090, 0x6107, 0x8013, 0x611A, 0xA0B1, 0x5121, 0x7103, 0x6116, 0xA067,
139 0x610C, 0x9026, 0x611E, 0xB0B2, 0x510B, 0x611F, 0x610D, 0x9027, 0x6000, 0x7105, 0x6117, 0xA068,
140 0x5111, 0x7007, 0x6113, 0x90C0, 0x6108, 0x8018, 0x611B, 0xA0B3, 0x510F, 0x7003, 0x6110, 0x9042,
141 0x6002, 0x800B, 0x6119, 0xA091, 0x5121, 0x7080, 0x6115, 0xA03A, 0x610A, 0x9012, 0x611D, 0xA0D7,
142 0x510B, 0x6122, 0x610E, 0x9035, 0x6001, 0x7123, 0x6118, 0xA07A, 0x5111, 0x7009, 0x6114, 0x90F4,
143 0x6109, 0x8060, 0x611C, 0xA0C4, 0x510F, 0x7005, 0x6112, 0x9070, 0x6107, 0x800F, 0x611A, 0xA0A1,
144 0x5121, 0x7102, 0x6116, 0xA056, 0x610C, 0x901D, 0x611E, 0xA0E8, 0x510B, 0x611F, 0x610D, 0x902C,
145 0x6000, 0x7106, 0x6117, 0xA071, 0x5111, 0x7008, 0x6113, 0x90E0, 0x6108, 0x8020, 0x611B, 0xA0BB,
146 0x510F, 0x7004, 0x6110, 0x9049, 0x6002, 0x800D, 0x6119, 0xA099, 0x5121, 0x70FF, 0x6115, 0xA04C,
147 0x610A, 0x9017, 0x611D, 0xA0DF, 0x510B, 0x6122, 0x610E, 0x903C, 0x6001, 0x7124, 0x6118, 0xA087,
148 0x5111, 0x700A, 0x6114, 0xA023, 0x6109, 0x80FE, 0x611C, 0xA0CE, 0x510F, 0x7006, 0x6112, 0x9082,
149 0x6107, 0x8011, 0x611A, 0xA0A9, 0x5121, 0x7103, 0x6116, 0xA05F, 0x610C, 0x9022, 0x611E, 0xA0F5,
150 0x510B, 0x611F, 0x610D, 0x9029, 0x6000, 0x7105, 0x6117, 0xA06C, 0x5111, 0x7007, 0x6113, 0x90CC,
151 0x6108, 0x8019, 0x611B, 0xA0B7, 0x510F, 0x7003, 0x6110, 0x9044, 0x6002, 0x800C, 0x6119, 0xA095,
152 0x5121, 0x7080, 0x6115, 0xA046, 0x610A, 0x9015, 0x611D, 0xA0DB, 0x510B, 0x6122, 0x610E, 0x9038,
153 0x6001, 0x7123, 0x6118, 0xA07E, 0x5111, 0x7009, 0x6114, 0x90FC, 0x6109, 0x80F0, 0x611C, 0xA0C9,
154 0x510F, 0x7005, 0x6112, 0x907F, 0x6107, 0x8010, 0x611A, 0xA0A5, 0x5121, 0x7102, 0x6116, 0xA05B,
155 0x610C, 0x901F, 0x611E, 0xA0EC, 0x510B, 0x611F, 0x610D, 0x9031, 0x6000, 0x7106, 0x6117, 0xA075,
156 0x5111, 0x7008, 0x6113, 0x90F1, 0x6108, 0x8040, 0x611B, 0xA0BF, 0x510F, 0x7004, 0x6110, 0x9051,
157 0x6002, 0x800E, 0x6119, 0xA09D, 0x5121, 0x70FF, 0x6115, 0xA052, 0x610A, 0x901B, 0x611D, 0xA0E4,
158 0x510B, 0x6122, 0x610E, 0x903F, 0x6001, 0x7124, 0x6118, 0xA08C, 0x5111, 0x700A, 0x6114, 0xA02F,
159 0x6109, 0x8120, 0x611C, 0xA0D3, 0x510F, 0x7006, 0x6112, 0x9088, 0x6107, 0x8013, 0x611A, 0xA0AE,
160 0x5121, 0x7103, 0x6116, 0xA064, 0x610C, 0x9025, 0x611E, 0xA0FA, 0x510B, 0x611F, 0x610D, 0x9028,
161 0x6000, 0x7105, 0x6117, 0xA06A, 0x5111, 0x7007, 0x6113, 0x90C6, 0x6108, 0x8018, 0x611B, 0xA0B5,
162 0x510F, 0x7003, 0x6110, 0x9043, 0x6002, 0x800B, 0x6119, 0xA093, 0x5121, 0x7080, 0x6115, 0xA03D,
163 0x610A, 0x9014, 0x611D, 0xA0D9, 0x510B, 0x6122, 0x610E, 0x9037, 0x6001, 0x7123, 0x6118, 0xA07C,
164 0x5111, 0x7009, 0x6114, 0x90F8, 0x6109, 0x8060, 0x611C, 0xA0C7, 0x510F, 0x7005, 0x6112, 0x9078,
165 0x6107, 0x800F, 0x611A, 0xA0A3, 0x5121, 0x7102, 0x6116, 0xA058, 0x610C, 0x901E, 0x611E, 0xA0EA,
166 0x510B, 0x611F, 0x610D, 0x9030, 0x6000, 0x7106, 0x6117, 0xA073, 0x5111, 0x7008, 0x6113, 0x90EE,
167 0x6108, 0x8020, 0x611B, 0xA0BD, 0x510F, 0x7004, 0x6110, 0x9050, 0x6002, 0x800D, 0x6119, 0xA09B,
168 0x5121, 0x70FF, 0x6115, 0xA04E, 0x610A, 0x901A, 0x611D, 0xA0E2, 0x510B, 0x6122, 0x610E, 0x903E,
169 0x6001, 0x7124, 0x6118, 0xA08A, 0x5111, 0x700A, 0x6114, 0xA02D, 0x6109, 0x80FE, 0x611C, 0xA0D1,
170 0x510F, 0x7006, 0x6112, 0x9084, 0x6107, 0x8011, 0x611A, 0xA0AC, 0x5121, 0x7103, 0x6116, 0xA062,
171 0x610C, 0x9024, 0x611E, 0xA0F7, 0x510B, 0x611F, 0x610D, 0x902A, 0x6000, 0x7105, 0x6117, 0xA06E,
172 0x5111, 0x7007, 0x6113, 0x90D0, 0x6108, 0x8019, 0x611B, 0xA0B9, 0x510F, 0x7003, 0x6110, 0x9048,
173 0x6002, 0x800C, 0x6119, 0xA097, 0x5121, 0x7080, 0x6115, 0xA04A, 0x610A, 0x9016, 0x611D, 0xA0DD,
174 0x510B, 0x6122, 0x610E, 0x9039, 0x6001, 0x7123, 0x6118, 0xA085, 0x5111, 0x7009, 0x6114, 0x90FD,
175 0x6109, 0x80F0, 0x611C, 0xA0CB, 0x510F, 0x7005, 0x6112, 0x9081, 0x6107, 0x8010, 0x611A, 0xA0A7,
176 0x5121, 0x7102, 0x6116, 0xA05D, 0x610C, 0x9021, 0x611E, 0xA0EF, 0x510B, 0x611F, 0x610D, 0x9033,
177 0x6000, 0x7106, 0x6117, 0xA077, 0x5111, 0x7008, 0x6113, 0x90F2, 0x6108, 0x8040, 0x611B, 0xA0C2,
178 0x510F, 0x7004, 0x6110, 0x9059, 0x6002, 0x800E, 0x6119, 0xA09F, 0x5121, 0x70FF, 0x6115, 0xA054,
179 0x610A, 0x901C, 0x611D, 0xA0E6, 0x510B, 0x6122, 0x610E, 0x9041, 0x6001, 0x7124, 0x6118, 0xA08E,
180 0x5111, 0x700A, 0x6114, 0xA034, 0x6109, 0x8120, 0x611C, 0xA0D5, 0x510F, 0x7006, 0x6112, 0x9090,
181 0x6107, 0x8013, 0x611A, 0xA0B0, 0x5121, 0x7103, 0x6116, 0xA066, 0x610C, 0x9026, 0x611E, 0xA104,
182 0x510B, 0x611F, 0x610D, 0x9027, 0x6000, 0x7105, 0x6117, 0xA069, 0x5111, 0x7007, 0x6113, 0x90C0,
183 0x6108, 0x8018, 0x611B, 0xA0B4, 0x510F, 0x7003, 0x6110, 0x9042, 0x6002, 0x800B, 0x6119, 0xA092,
184 0x5121, 0x7080, 0x6115, 0xA03B, 0x610A, 0x9012, 0x611D, 0xA0D8, 0x510B, 0x6122, 0x610E, 0x9035,
185 0x6001, 0x7123, 0x6118, 0xA07B, 0x5111, 0x7009, 0x6114, 0x90F4, 0x6109, 0x8060, 0x611C, 0xA0C5,
186 0x510F, 0x7005, 0x6112, 0x9070, 0x6107, 0x800F, 0x611A, 0xA0A2, 0x5121, 0x7102, 0x6116, 0xA057,
187 0x610C, 0x901D, 0x611E, 0xA0E9, 0x510B, 0x611F, 0x610D, 0x902C, 0x6000, 0x7106, 0x6117, 0xA072,
188 0x5111, 0x7008, 0x6113, 0x90E0, 0x6108, 0x8020, 0x611B, 0xA0BC, 0x510F, 0x7004, 0x6110, 0x9049,
189 0x6002, 0x800D, 0x6119, 0xA09A, 0x5121, 0x70FF, 0x6115, 0xA04D, 0x610A, 0x9017, 0x611D, 0xA0E1,
190 0x510B, 0x6122, 0x610E, 0x903C, 0x6001, 0x7124, 0x6118, 0xA089, 0x5111, 0x700A, 0x6114, 0xA02B,
191 0x6109, 0x80FE, 0x611C, 0xA0CF, 0x510F, 0x7006, 0x6112, 0x9082, 0x6107, 0x8011, 0x611A, 0xA0AA,
192 0x5121, 0x7103, 0x6116, 0xA061, 0x610C, 0x9022, 0x611E, 0xA0F6, 0x510B, 0x611F, 0x610D, 0x9029,
193 0x6000, 0x7105, 0x6117, 0xA06D, 0x5111, 0x7007, 0x6113, 0x90CC, 0x6108, 0x8019, 0x611B, 0xA0B8,
194 0x510F, 0x7003, 0x6110, 0x9044, 0x6002, 0x800C, 0x6119, 0xA096, 0x5121, 0x7080, 0x6115, 0xA047,
195 0x610A, 0x9015, 0x611D, 0xA0DC, 0x510B, 0x6122, 0x610E, 0x9038, 0x6001, 0x7123, 0x6118, 0xA083,
196 0x5111, 0x7009, 0x6114, 0x90FC, 0x6109, 0x80F0, 0x611C, 0xA0CA, 0x510F, 0x7005, 0x6112, 0x907F,
197 0x6107, 0x8010, 0x611A, 0xA0A6, 0x5121, 0x7102, 0x6116, 0xA05C, 0x610C, 0x901F, 0x611E, 0xA0ED,
198 0x510B, 0x611F, 0x610D, 0x9031, 0x6000, 0x7106, 0x6117, 0xA076, 0x5111, 0x7008, 0x6113, 0x90F1,
199 0x6108, 0x8040, 0x611B, 0xA0C1, 0x510F, 0x7004, 0x6110, 0x9051, 0x6002, 0x800E, 0x6119, 0xA09E,
200 0x5121, 0x70FF, 0x6115, 0xA053, 0x610A, 0x901B, 0x611D, 0xA0E5, 0x510B, 0x6122, 0x610E, 0x903F,
201 0x6001, 0x7124, 0x6118, 0xA08D, 0x5111, 0x700A, 0x6114, 0xA032, 0x6109, 0x8120, 0x611C, 0xA0D4,
202 0x510F, 0x7006, 0x6112, 0x9088, 0x6107, 0x8013, 0x611A, 0xA0AF, 0x5121, 0x7103, 0x6116, 0xA065,
203 0x610C, 0x9025, 0x611E, 0xA0FB, 0x510B, 0x611F, 0x610D, 0x9028, 0x6000, 0x7105, 0x6117, 0xA06B,
204 0x5111, 0x7007, 0x6113, 0x90C6, 0x6108, 0x8018, 0x611B, 0xA0B6, 0x510F, 0x7003, 0x6110, 0x9043,
205 0x6002, 0x800B, 0x6119, 0xA094, 0x5121, 0x7080, 0x6115, 0xA045, 0x610A, 0x9014, 0x611D, 0xA0DA,
206 0x510B, 0x6122, 0x610E, 0x9037, 0x6001, 0x7123, 0x6118, 0xA07D, 0x5111, 0x7009, 0x6114, 0x90F8,
207 0x6109, 0x8060, 0x611C, 0xA0C8, 0x510F, 0x7005, 0x6112, 0x9078, 0x6107, 0x800F, 0x611A, 0xA0A4,
208 0x5121, 0x7102, 0x6116, 0xA05A, 0x610C, 0x901E, 0x611E, 0xA0EB, 0x510B, 0x611F, 0x610D, 0x9030,
209 0x6000, 0x7106, 0x6117, 0xA074, 0x5111, 0x7008, 0x6113, 0x90EE, 0x6108, 0x8020, 0x611B, 0xA0BE,
210 0x510F, 0x7004, 0x6110, 0x9050, 0x6002, 0x800D, 0x6119, 0xA09C, 0x5121, 0x70FF, 0x6115, 0xA04F,
211 0x610A, 0x901A, 0x611D, 0xA0E3, 0x510B, 0x6122, 0x610E, 0x903E, 0x6001, 0x7124, 0x6118, 0xA08B,
212 0x5111, 0x700A, 0x6114, 0xA02E, 0x6109, 0x80FE, 0x611C, 0xA0D2, 0x510F, 0x7006, 0x6112, 0x9084,
213 0x6107, 0x8011, 0x611A, 0xA0AD, 0x5121, 0x7103, 0x6116, 0xA063, 0x610C, 0x9024, 0x611E, 0xA0F9,
214 0x510B, 0x611F, 0x610D, 0x902A, 0x6000, 0x7105, 0x6117, 0xA06F, 0x5111, 0x7007, 0x6113, 0x90D0,
215 0x6108, 0x8019, 0x611B, 0xA0BA, 0x510F, 0x7003, 0x6110, 0x9048, 0x6002, 0x800C, 0x6119, 0xA098,
216 0x5121, 0x7080, 0x6115, 0xA04B, 0x610A, 0x9016, 0x611D, 0xA0DE, 0x510B, 0x6122, 0x610E, 0x9039,
217 0x6001, 0x7123, 0x6118, 0xA086, 0x5111, 0x7009, 0x6114, 0x90FD, 0x6109, 0x80F0, 0x611C, 0xA0CD,
218 0x510F, 0x7005, 0x6112, 0x9081, 0x6107, 0x8010, 0x611A, 0xA0A8, 0x5121, 0x7102, 0x6116, 0xA05E,
219 0x610C, 0x9021, 0x611E, 0xA0F3, 0x510B, 0x611F, 0x610D, 0x9033, 0x6000, 0x7106, 0x6117, 0xA079,
220 0x5111, 0x7008, 0x6113, 0x90F2, 0x6108, 0x8040, 0x611B, 0xA0C3, 0x510F, 0x7004, 0x6110, 0x9059,
221 0x6002, 0x800E, 0x6119, 0xA0A0, 0x5121, 0x70FF, 0x6115, 0xA055, 0x610A, 0x901C, 0x611D, 0xA0E7,
222 0x510B, 0x6122, 0x610E, 0x9041, 0x6001, 0x7124, 0x6118, 0xA08F, 0x5111, 0x700A, 0x6114, 0xA036,
223 0x6109, 0x8120, 0x611C, 0xA0D6, 0x510F, 0x7006, 0x6112, 0x9090, 0x6107, 0x8013, 0x611A, 0xA0B1,
224 0x5121, 0x7103, 0x6116, 0xA067, 0x610C, 0x9026, 0x611E, 0xD0AB, 0x510B, 0x611F, 0x610D, 0x9027,
225 0x6000, 0x7105, 0x6117, 0xA068, 0x5111, 0x7007, 0x6113, 0x90C0, 0x6108, 0x8018, 0x611B, 0xA0B3,
226 0x510F, 0x7003, 0x6110, 0x9042, 0x6002, 0x800B, 0x6119, 0xA091, 0x5121, 0x7080, 0x6115, 0xA03A,
227 0x610A, 0x9012, 0x611D, 0xA0D7, 0x510B, 0x6122, 0x610E, 0x9035, 0x6001, 0x7123, 0x6118, 0xA07A,
228 0x5111, 0x7009, 0x6114, 0x90F4, 0x6109, 0x8060, 0x611C, 0xA0C4, 0x510F, 0x7005, 0x6112, 0x9070,
229 0x6107, 0x800F, 0x611A, 0xA0A1, 0x5121, 0x7102, 0x6116, 0xA056, 0x610C, 0x901D, 0x611E, 0xA0E8,
230 0x510B, 0x611F, 0x610D, 0x902C, 0x6000, 0x7106, 0x6117, 0xA071, 0x5111, 0x7008, 0x6113, 0x90E0,
231 0x6108, 0x8020, 0x611B, 0xA0BB, 0x510F, 0x7004, 0x6110, 0x9049, 0x6002, 0x800D, 0x6119, 0xA099,
232 0x5121, 0x70FF, 0x6115, 0xA04C, 0x610A, 0x9017, 0x611D, 0xA0DF, 0x510B, 0x6122, 0x610E, 0x903C,
233 0x6001, 0x7124, 0x6118, 0xA087, 0x5111, 0x700A, 0x6114, 0xA023, 0x6109, 0x80FE, 0x611C, 0xA0CE,
234 0x510F, 0x7006, 0x6112, 0x9082, 0x6107, 0x8011, 0x611A, 0xA0A9, 0x5121, 0x7103, 0x6116, 0xA05F,
235 0x610C, 0x9022, 0x611E, 0xA0F5, 0x510B, 0x611F, 0x610D, 0x9029, 0x6000, 0x7105, 0x6117, 0xA06C,
236 0x5111, 0x7007, 0x6113, 0x90CC, 0x6108, 0x8019, 0x611B, 0xA0B7, 0x510F, 0x7003, 0x6110, 0x9044,
237 0x6002, 0x800C, 0x6119, 0xA095, 0x5121, 0x7080, 0x6115, 0xA046, 0x610A, 0x9015, 0x611D, 0xA0DB,
238 0x510B, 0x6122, 0x610E, 0x9038, 0x6001, 0x7123, 0x6118, 0xA07E, 0x5111, 0x7009, 0x6114, 0x90FC,
239 0x6109, 0x80F0, 0x611C, 0xA0C9, 0x510F, 0x7005, 0x6112, 0x907F, 0x6107, 0x8010, 0x611A, 0xA0A5,
240 0x5121, 0x7102, 0x6116, 0xA05B, 0x610C, 0x901F, 0x611E, 0xA0EC, 0x510B, 0x611F, 0x610D, 0x9031,
241 0x6000, 0x7106, 0x6117, 0xA075, 0x5111, 0x7008, 0x6113, 0x90F1, 0x6108, 0x8040, 0x611B, 0xA0BF,
242 0x510F, 0x7004, 0x6110, 0x9051, 0x6002, 0x800E, 0x6119, 0xA09D, 0x5121, 0x70FF, 0x6115, 0xA052,
243 0x610A, 0x901B, 0x611D, 0xA0E4, 0x510B, 0x6122, 0x610E, 0x903F, 0x6001, 0x7124, 0x6118, 0xA08C,
244 0x5111, 0x700A, 0x6114, 0xA02F, 0x6109, 0x8120, 0x611C, 0xA0D3, 0x510F, 0x7006, 0x6112, 0x9088,
245 0x6107, 0x8013, 0x611A, 0xA0AE, 0x5121, 0x7103, 0x6116, 0xA064, 0x610C, 0x9025, 0x611E, 0xA0FA,
246 0x510B, 0x611F, 0x610D, 0x9028, 0x6000, 0x7105, 0x6117, 0xA06A, 0x5111, 0x7007, 0x6113, 0x90C6,
247 0x6108, 0x8018, 0x611B, 0xA0B5, 0x510F, 0x7003, 0x6110, 0x9043, 0x6002, 0x800B, 0x6119, 0xA093,
248 0x5121, 0x7080, 0x6115, 0xA03D, 0x610A, 0x9014, 0x611D, 0xA0D9, 0x510B, 0x6122, 0x610E, 0x9037,
249 0x6001, 0x7123, 0x6118, 0xA07C, 0x5111, 0x7009, 0x6114, 0x90F8, 0x6109, 0x8060, 0x611C, 0xA0C7,
250 0x510F, 0x7005, 0x6112, 0x9078, 0x6107, 0x800F, 0x611A, 0xA0A3, 0x5121, 0x7102, 0x6116, 0xA058,
251 0x610C, 0x901E, 0x611E, 0xA0EA, 0x510B, 0x611F, 0x610D, 0x9030, 0x6000, 0x7106, 0x6117, 0xA073,
252 0x5111, 0x7008, 0x6113, 0x90EE, 0x6108, 0x8020, 0x611B, 0xA0BD, 0x510F, 0x7004, 0x6110, 0x9050,
253 0x6002, 0x800D, 0x6119, 0xA09B, 0x5121, 0x70FF, 0x6115, 0xA04E, 0x610A, 0x901A, 0x611D, 0xA0E2,
254 0x510B, 0x6122, 0x610E, 0x903E, 0x6001, 0x7124, 0x6118, 0xA08A, 0x5111, 0x700A, 0x6114, 0xA02D,
255 0x6109, 0x80FE, 0x611C, 0xA0D1, 0x510F, 0x7006, 0x6112, 0x9084, 0x6107, 0x8011, 0x611A, 0xA0AC,
256 0x5121, 0x7103, 0x6116, 0xA062, 0x610C, 0x9024, 0x611E, 0xA0F7, 0x510B, 0x611F, 0x610D, 0x902A,
257 0x6000, 0x7105, 0x6117, 0xA06E, 0x5111, 0x7007, 0x6113, 0x90D0, 0x6108, 0x8019, 0x611B, 0xA0B9,
258 0x510F, 0x7003, 0x6110, 0x9048, 0x6002, 0x800C, 0x6119, 0xA097, 0x5121, 0x7080, 0x6115, 0xA04A,
259 0x610A, 0x9016, 0x611D, 0xA0DD, 0x510B, 0x6122, 0x610E, 0x9039, 0x6001, 0x7123, 0x6118, 0xA085,
260 0x5111, 0x7009, 0x6114, 0x90FD, 0x6109, 0x80F0, 0x611C, 0xA0CB, 0x510F, 0x7005, 0x6112, 0x9081,
261 0x6107, 0x8010, 0x611A, 0xA0A7, 0x5121, 0x7102, 0x6116, 0xA05D, 0x610C, 0x9021, 0x611E, 0xA0EF,
262 0x510B, 0x611F, 0x610D, 0x9033, 0x6000, 0x7106, 0x6117, 0xA077, 0x5111, 0x7008, 0x6113, 0x90F2,
263 0x6108, 0x8040, 0x611B, 0xA0C2, 0x510F, 0x7004, 0x6110, 0x9059, 0x6002, 0x800E, 0x6119, 0xA09F,
264 0x5121, 0x70FF, 0x6115, 0xA054, 0x610A, 0x901C, 0x611D, 0xA0E6, 0x510B, 0x6122, 0x610E, 0x9041,
265 0x6001, 0x7124, 0x6118, 0xA08E, 0x5111, 0x700A, 0x6114, 0xA034, 0x6109, 0x8120, 0x611C, 0xA0D5,
266 0x510F, 0x7006, 0x6112, 0x9090, 0x6107, 0x8013, 0x611A, 0xA0B0, 0x5121, 0x7103, 0x6116, 0xA066,
267 0x610C, 0x9026, 0x611E, 0xA104, 0x510B, 0x611F, 0x610D, 0x9027, 0x6000, 0x7105, 0x6117, 0xA069,
268 0x5111, 0x7007, 0x6113, 0x90C0, 0x6108, 0x8018, 0x611B, 0xA0B4, 0x510F, 0x7003, 0x6110, 0x9042,
269 0x6002, 0x800B, 0x6119, 0xA092, 0x5121, 0x7080, 0x6115, 0xA03B, 0x610A, 0x9012, 0x611D, 0xA0D8,
270 0x510B, 0x6122, 0x610E, 0x9035, 0x6001, 0x7123, 0x6118, 0xA07B, 0x5111, 0x7009, 0x6114, 0x90F4,
271 0x6109, 0x8060, 0x611C, 0xA0C5, 0x510F, 0x7005, 0x6112, 0x9070, 0x6107, 0x800F, 0x611A, 0xA0A2,
272 0x5121, 0x7102, 0x6116, 0xA057, 0x610C, 0x901D, 0x611E, 0xA0E9, 0x510B, 0x611F, 0x610D, 0x902C,
273 0x6000, 0x7106, 0x6117, 0xA072, 0x5111, 0x7008, 0x6113, 0x90E0, 0x6108, 0x8020, 0x611B, 0xA0BC,
274 0x510F, 0x7004, 0x6110, 0x9049, 0x6002, 0x800D, 0x6119, 0xA09A, 0x5121, 0x70FF, 0x6115, 0xA04D,
275 0x610A, 0x9017, 0x611D, 0xA0E1, 0x510B, 0x6122, 0x610E, 0x903C, 0x6001, 0x7124, 0x6118, 0xA089,
276 0x5111, 0x700A, 0x6114, 0xA02B, 0x6109, 0x80FE, 0x611C, 0xA0CF, 0x510F, 0x7006, 0x6112, 0x9082,
277 0x6107, 0x8011, 0x611A, 0xA0AA, 0x5121, 0x7103, 0x6116, 0xA061, 0x610C, 0x9022, 0x611E, 0xA0F6,
278 0x510B, 0x611F, 0x610D, 0x9029, 0x6000, 0x7105, 0x6117, 0xA06D, 0x5111, 0x7007, 0x6113, 0x90CC,
279 0x6108, 0x8019, 0x611B, 0xA0B8, 0x510F, 0x7003, 0x6110, 0x9044, 0x6002, 0x800C, 0x6119, 0xA096,
280 0x5121, 0x7080, 0x6115, 0xA047, 0x610A, 0x9015, 0x611D, 0xA0DC, 0x510B, 0x6122, 0x610E, 0x9038,
281 0x6001, 0x7123, 0x6118, 0xA083, 0x5111, 0x7009, 0x6114, 0x90FC, 0x6109, 0x80F0, 0x611C, 0xA0CA,
282 0x510F, 0x7005, 0x6112, 0x907F, 0x6107, 0x8010, 0x611A, 0xA0A6, 0x5121, 0x7102, 0x6116, 0xA05C,
283 0x610C, 0x901F, 0x611E, 0xA0ED, 0x510B, 0x611F, 0x610D, 0x9031, 0x6000, 0x7106, 0x6117, 0xA076,
284 0x5111, 0x7008, 0x6113, 0x90F1, 0x6108, 0x8040, 0x611B, 0xA0C1, 0x510F, 0x7004, 0x6110, 0x9051,
285 0x6002, 0x800E, 0x6119, 0xA09E, 0x5121, 0x70FF, 0x6115, 0xA053, 0x610A, 0x901B, 0x611D, 0xA0E5,
286 0x510B, 0x6122, 0x610E, 0x903F, 0x6001, 0x7124, 0x6118, 0xA08D, 0x5111, 0x700A, 0x6114, 0xA032,
287 0x6109, 0x8120, 0x611C, 0xA0D4, 0x510F, 0x7006, 0x6112, 0x9088, 0x6107, 0x8013, 0x611A, 0xA0AF,
288 0x5121, 0x7103, 0x6116, 0xA065, 0x610C, 0x9025, 0x611E, 0xA0FB, 0x510B, 0x611F, 0x610D, 0x9028,
289 0x6000, 0x7105, 0x6117, 0xA06B, 0x5111, 0x7007, 0x6113, 0x90C6, 0x6108, 0x8018, 0x611B, 0xA0B6,
290 0x510F, 0x7003, 0x6110, 0x9043, 0x6002, 0x800B, 0x6119, 0xA094, 0x5121, 0x7080, 0x6115, 0xA045,
291 0x610A, 0x9014, 0x611D, 0xA0DA, 0x510B, 0x6122, 0x610E, 0x9037, 0x6001, 0x7123, 0x6118, 0xA07D,
292 0x5111, 0x7009, 0x6114, 0x90F8, 0x6109, 0x8060, 0x611C, 0xA0C8, 0x510F, 0x7005, 0x6112, 0x9078,
293 0x6107, 0x800F, 0x611A, 0xA0A4, 0x5121, 0x7102, 0x6116, 0xA05A, 0x610C, 0x901E, 0x611E, 0xA0EB,
294 0x510B, 0x611F, 0x610D, 0x9030, 0x6000, 0x7106, 0x6117, 0xA074, 0x5111, 0x7008, 0x6113, 0x90EE,
295 0x6108, 0x8020, 0x611B, 0xA0BE, 0x510F, 0x7004, 0x6110, 0x9050, 0x6002, 0x800D, 0x6119, 0xA09C,
296 0x5121, 0x70FF, 0x6115, 0xA04F, 0x610A, 0x901A, 0x611D, 0xA0E3, 0x510B, 0x6122, 0x610E, 0x903E,
297 0x6001, 0x7124, 0x6118, 0xA08B, 0x5111, 0x700A, 0x6114, 0xA02E, 0x6109, 0x80FE, 0x611C, 0xA0D2,
298 0x510F, 0x7006, 0x6112, 0x9084, 0x6107, 0x8011, 0x611A, 0xA0AD, 0x5121, 0x7103, 0x6116, 0xA063,
299 0x610C, 0x9024, 0x611E, 0xA0F9, 0x510B, 0x611F, 0x610D, 0x902A, 0x6000, 0x7105, 0x6117, 0xA06F,
300 0x5111, 0x7007, 0x6113, 0x90D0, 0x6108, 0x8019, 0x611B, 0xA0BA, 0x510F, 0x7003, 0x6110, 0x9048,
301 0x6002, 0x800C, 0x6119, 0xA098, 0x5121, 0x7080, 0x6115, 0xA04B, 0x610A, 0x9016, 0x611D, 0xA0DE,
302 0x510B, 0x6122, 0x610E, 0x9039, 0x6001, 0x7123, 0x6118, 0xA086, 0x5111, 0x7009, 0x6114, 0x90FD,
303 0x6109, 0x80F0, 0x611C, 0xA0CD, 0x510F, 0x7005, 0x6112, 0x9081, 0x6107, 0x8010, 0x611A, 0xA0A8,
304 0x5121, 0x7102, 0x6116, 0xA05E, 0x610C, 0x9021, 0x611E, 0xA0F3, 0x510B, 0x611F, 0x610D, 0x9033,
305 0x6000, 0x7106, 0x6117, 0xA079, 0x5111, 0x7008, 0x6113, 0x90F2, 0x6108, 0x8040, 0x611B, 0xA0C3,
306 0x510F, 0x7004, 0x6110, 0x9059, 0x6002, 0x800E, 0x6119, 0xA0A0, 0x5121, 0x70FF, 0x6115, 0xA055,
307 0x610A, 0x901C, 0x611D, 0xA0E7, 0x510B, 0x6122, 0x610E, 0x9041, 0x6001, 0x7124, 0x6118, 0xA08F,
308 0x5111, 0x700A, 0x6114, 0xA036, 0x6109, 0x8120, 0x611C, 0xA0D6, 0x510F, 0x7006, 0x6112, 0x9090,
309 0x6107, 0x8013, 0x611A, 0xA0B1, 0x5121, 0x7103, 0x6116, 0xA067, 0x610C, 0x9026, 0x611E, 0xB0B2,
310 0x510B, 0x611F, 0x610D, 0x9027, 0x6000, 0x7105, 0x6117, 0xA068, 0x5111, 0x7007, 0x6113, 0x90C0,
311 0x6108, 0x8018, 0x611B, 0xA0B3, 0x510F, 0x7003, 0x6110, 0x9042, 0x6002, 0x800B, 0x6119, 0xA091,
312 0x5121, 0x7080, 0x6115, 0xA03A, 0x610A, 0x9012, 0x611D, 0xA0D7, 0x510B, 0x6122, 0x610E, 0x9035,
313 0x6001, 0x7123, 0x6118, 0xA07A, 0x5111, 0x7009, 0x6114, 0x90F4, 0x6109, 0x8060, 0x611C, 0xA0C4,
314 0x510F, 0x7005, 0x6112, 0x9070, 0x6107, 0x800F, 0x611A, 0xA0A1, 0x5121, 0x7102, 0x6116, 0xA056,
315 0x610C, 0x901D, 0x611E, 0xA0E8, 0x510B, 0x611F, 0x610D, 0x902C, 0x6000, 0x7106, 0x6117, 0xA071,
316 0x5111, 0x7008, 0x6113, 0x90E0, 0x6108, 0x8020, 0x611B, 0xA0BB, 0x510F, 0x7004, 0x6110, 0x9049,
317 0x6002, 0x800D, 0x6119, 0xA099, 0x5121, 0x70FF, 0x6115, 0xA04C, 0x610A, 0x9017, 0x611D, 0xA0DF,
318 0x510B, 0x6122, 0x610E, 0x903C, 0x6001, 0x7124, 0x6118, 0xA087, 0x5111, 0x700A, 0x6114, 0xA023,
319 0x6109, 0x80FE, 0x611C, 0xA0CE, 0x510F, 0x7006, 0x6112, 0x9082, 0x6107, 0x8011, 0x611A, 0xA0A9,
320 0x5121, 0x7103, 0x6116, 0xA05F, 0x610C, 0x9022, 0x611E, 0xA0F5, 0x510B, 0x611F, 0x610D, 0x9029,
321 0x6000, 0x7105, 0x6117, 0xA06C, 0x5111, 0x7007, 0x6113, 0x90CC, 0x6108, 0x8019, 0x611B, 0xA0B7,
322 0x510F, 0x7003, 0x6110, 0x9044, 0x6002, 0x800C, 0x6119, 0xA095, 0x5121, 0x7080, 0x6115, 0xA046,
323 0x610A, 0x9015, 0x611D, 0xA0DB, 0x510B, 0x6122, 0x610E, 0x9038, 0x6001, 0x7123, 0x6118, 0xA07E,
324 0x5111, 0x7009, 0x6114, 0x90FC, 0x6109, 0x80F0, 0x611C, 0xA0C9, 0x510F, 0x7005, 0x6112, 0x907F,
325 0x6107, 0x8010, 0x611A, 0xA0A5, 0x5121, 0x7102, 0x6116, 0xA05B, 0x610C, 0x901F, 0x611E, 0xA0EC,
326 0x510B, 0x611F, 0x610D, 0x9031, 0x6000, 0x7106, 0x6117, 0xA075, 0x5111, 0x7008, 0x6113, 0x90F1,
327 0x6108, 0x8040, 0x611B, 0xA0BF, 0x510F, 0x7004, 0x6110, 0x9051, 0x6002, 0x800E, 0x6119, 0xA09D,
328 0x5121, 0x70FF, 0x6115, 0xA052, 0x610A, 0x901B, 0x611D, 0xA0E4, 0x510B, 0x6122, 0x610E, 0x903F,
329 0x6001, 0x7124, 0x6118, 0xA08C, 0x5111, 0x700A, 0x6114, 0xA02F, 0x6109, 0x8120, 0x611C, 0xA0D3,
330 0x510F, 0x7006, 0x6112, 0x9088, 0x6107, 0x8013, 0x611A, 0xA0AE, 0x5121, 0x7103, 0x6116, 0xA064,
331 0x610C, 0x9025, 0x611E, 0xA0FA, 0x510B, 0x611F, 0x610D, 0x9028, 0x6000, 0x7105, 0x6117, 0xA06A,
332 0x5111, 0x7007, 0x6113, 0x90C6, 0x6108, 0x8018, 0x611B, 0xA0B5, 0x510F, 0x7003, 0x6110, 0x9043,
333 0x6002, 0x800B, 0x6119, 0xA093, 0x5121, 0x7080, 0x6115, 0xA03D, 0x610A, 0x9014, 0x611D, 0xA0D9,
334 0x510B, 0x6122, 0x610E, 0x9037, 0x6001, 0x7123, 0x6118, 0xA07C, 0x5111, 0x7009, 0x6114, 0x90F8,
335 0x6109, 0x8060, 0x611C, 0xA0C7, 0x510F, 0x7005, 0x6112, 0x9078, 0x6107, 0x800F, 0x611A, 0xA0A3,
336 0x5121, 0x7102, 0x6116, 0xA058, 0x610C, 0x901E, 0x611E, 0xA0EA, 0x510B, 0x611F, 0x610D, 0x9030,
337 0x6000, 0x7106, 0x6117, 0xA073, 0x5111, 0x7008, 0x6113, 0x90EE, 0x6108, 0x8020, 0x611B, 0xA0BD,
338 0x510F, 0x7004, 0x6110, 0x9050, 0x6002, 0x800D, 0x6119, 0xA09B, 0x5121, 0x70FF, 0x6115, 0xA04E,
339 0x610A, 0x901A, 0x611D, 0xA0E2, 0x510B, 0x6122, 0x610E, 0x903E, 0x6001, 0x7124, 0x6118, 0xA08A,
340 0x5111, 0x700A, 0x6114, 0xA02D, 0x6109, 0x80FE, 0x611C, 0xA0D1, 0x510F, 0x7006, 0x6112, 0x9084,
341 0x6107, 0x8011, 0x611A, 0xA0AC, 0x5121, 0x7103, 0x6116, 0xA062, 0x610C, 0x9024, 0x611E, 0xA0F7,
342 0x510B, 0x611F, 0x610D, 0x902A, 0x6000, 0x7105, 0x6117, 0xA06E, 0x5111, 0x7007, 0x6113, 0x90D0,
343 0x6108, 0x8019, 0x611B, 0xA0B9, 0x510F, 0x7003, 0x6110, 0x9048, 0x6002, 0x800C, 0x6119, 0xA097,
344 0x5121, 0x7080, 0x6115, 0xA04A, 0x610A, 0x9016, 0x611D, 0xA0DD, 0x510B, 0x6122, 0x610E, 0x9039,
345 0x6001, 0x7123, 0x6118, 0xA085, 0x5111, 0x7009, 0x6114, 0x90FD, 0x6109, 0x80F0, 0x611C, 0xA0CB,
346 0x510F, 0x7005, 0x6112, 0x9081, 0x6107, 0x8010, 0x611A, 0xA0A7, 0x5121, 0x7102, 0x6116, 0xA05D,
347 0x610C, 0x9021, 0x611E, 0xA0EF, 0x510B, 0x611F, 0x610D, 0x9033, 0x6000, 0x7106, 0x6117, 0xA077,
348 0x5111, 0x7008, 0x6113, 0x90F2, 0x6108, 0x8040, 0x611B, 0xA0C2, 0x510F, 0x7004, 0x6110, 0x9059,
349 0x6002, 0x800E, 0x6119, 0xA09F, 0x5121, 0x70FF, 0x6115, 0xA054, 0x610A, 0x901C, 0x611D, 0xA0E6,
350 0x510B, 0x6122, 0x610E, 0x9041, 0x6001, 0x7124, 0x6118, 0xA08E, 0x5111, 0x700A, 0x6114, 0xA034,
351 0x6109, 0x8120, 0x611C, 0xA0D5, 0x510F, 0x7006, 0x6112, 0x9090, 0x6107, 0x8013, 0x611A, 0xA0B0,
352 0x5121, 0x7103, 0x6116, 0xA066, 0x610C, 0x9026, 0x611E, 0xA104, 0x510B, 0x611F, 0x610D, 0x9027,
353 0x6000, 0x7105, 0x6117, 0xA069, 0x5111, 0x7007, 0x6113, 0x90C0, 0x6108, 0x8018, 0x611B, 0xA0B4,
354 0x510F, 0x7003, 0x6110, 0x9042, 0x6002, 0x800B, 0x6119, 0xA092, 0x5121, 0x7080, 0x6115, 0xA03B,
355 0x610A, 0x9012, 0x611D, 0xA0D8, 0x510B, 0x6122, 0x610E, 0x9035, 0x6001, 0x7123, 0x6118, 0xA07B,
356 0x5111, 0x7009, 0x6114, 0x90F4, 0x6109, 0x8060, 0x611C, 0xA0C5, 0x510F, 0x7005, 0x6112, 0x9070,
357 0x6107, 0x800F, 0x611A, 0xA0A2, 0x5121, 0x7102, 0x6116, 0xA057, 0x610C, 0x901D, 0x611E, 0xA0E9,
358 0x510B, 0x611F, 0x610D, 0x902C, 0x6000, 0x7106, 0x6117, 0xA072, 0x5111, 0x7008, 0x6113, 0x90E0,
359 0x6108, 0x8020, 0x611B, 0xA0BC, 0x510F, 0x7004, 0x6110, 0x9049, 0x6002, 0x800D, 0x6119, 0xA09A,
360 0x5121, 0x70FF, 0x6115, 0xA04D, 0x610A, 0x9017, 0x611D, 0xA0E1, 0x510B, 0x6122, 0x610E, 0x903C,
361 0x6001, 0x7124, 0x6118, 0xA089, 0x5111, 0x700A, 0x6114, 0xA02B, 0x6109, 0x80FE, 0x611C, 0xA0CF,
362 0x510F, 0x7006, 0x6112, 0x9082, 0x6107, 0x8011, 0x611A, 0xA0AA, 0x5121, 0x7103, 0x6116, 0xA061,
363 0x610C, 0x9022, 0x611E, 0xA0F6, 0x510B, 0x611F, 0x610D, 0x9029, 0x6000, 0x7105, 0x6117, 0xA06D,
364 0x5111, 0x7007, 0x6113, 0x90CC, 0x6108, 0x8019, 0x611B, 0xA0B8, 0x510F, 0x7003, 0x6110, 0x9044,
365 0x6002, 0x800C, 0x6119, 0xA096, 0x5121, 0x7080, 0x6115, 0xA047, 0x610A, 0x9015, 0x611D, 0xA0DC,
366 0x510B, 0x6122, 0x610E, 0x9038, 0x6001, 0x7123, 0x6118, 0xA083, 0x5111, 0x7009, 0x6114, 0x90FC,
367 0x6109, 0x80F0, 0x611C, 0xA0CA, 0x510F, 0x7005, 0x6112, 0x907F, 0x6107, 0x8010, 0x611A, 0xA0A6,
368 0x5121, 0x7102, 0x6116, 0xA05C, 0x610C, 0x901F, 0x611E, 0xA0ED, 0x510B, 0x611F, 0x610D, 0x9031,
369 0x6000, 0x7106, 0x6117, 0xA076, 0x5111, 0x7008, 0x6113, 0x90F1, 0x6108, 0x8040, 0x611B, 0xA0C1,
370 0x510F, 0x7004, 0x6110, 0x9051, 0x6002, 0x800E, 0x6119, 0xA09E, 0x5121, 0x70FF, 0x6115, 0xA053,
371 0x610A, 0x901B, 0x611D, 0xA0E5, 0x510B, 0x6122, 0x610E, 0x903F, 0x6001, 0x7124, 0x6118, 0xA08D,
372 0x5111, 0x700A, 0x6114, 0xA032, 0x6109, 0x8120, 0x611C, 0xA0D4, 0x510F, 0x7006, 0x6112, 0x9088,
373 0x6107, 0x8013, 0x611A, 0xA0AF, 0x5121, 0x7103, 0x6116, 0xA065, 0x610C, 0x9025, 0x611E, 0xA0FB,
374 0x510B, 0x611F, 0x610D, 0x9028, 0x6000, 0x7105, 0x6117, 0xA06B, 0x5111, 0x7007, 0x6113, 0x90C6,
375 0x6108, 0x8018, 0x611B, 0xA0B6, 0x510F, 0x7003, 0x6110, 0x9043, 0x6002, 0x800B, 0x6119, 0xA094,
376 0x5121, 0x7080, 0x6115, 0xA045, 0x610A, 0x9014, 0x611D, 0xA0DA, 0x510B, 0x6122, 0x610E, 0x9037,
377 0x6001, 0x7123, 0x6118, 0xA07D, 0x5111, 0x7009, 0x6114, 0x90F8, 0x6109, 0x8060, 0x611C, 0xA0C8,
378 0x510F, 0x7005, 0x6112, 0x9078, 0x6107, 0x800F, 0x611A, 0xA0A4, 0x5121, 0x7102, 0x6116, 0xA05A,
379 0x610C, 0x901E, 0x611E, 0xA0EB, 0x510B, 0x611F, 0x610D, 0x9030, 0x6000, 0x7106, 0x6117, 0xA074,
380 0x5111, 0x7008, 0x6113, 0x90EE, 0x6108, 0x8020, 0x611B, 0xA0BE, 0x510F, 0x7004, 0x6110, 0x9050,
381 0x6002, 0x800D, 0x6119, 0xA09C, 0x5121, 0x70FF, 0x6115, 0xA04F, 0x610A, 0x901A, 0x611D, 0xA0E3,
382 0x510B, 0x6122, 0x610E, 0x903E, 0x6001, 0x7124, 0x6118, 0xA08B, 0x5111, 0x700A, 0x6114, 0xA02E,
383 0x6109, 0x80FE, 0x611C, 0xA0D2, 0x510F, 0x7006, 0x6112, 0x9084, 0x6107, 0x8011, 0x611A, 0xA0AD,
384 0x5121, 0x7103, 0x6116, 0xA063, 0x610C, 0x9024, 0x611E, 0xA0F9, 0x510B, 0x611F, 0x610D, 0x902A,
385 0x6000, 0x7105, 0x6117, 0xA06F, 0x5111, 0x7007, 0x6113, 0x90D0, 0x6108, 0x8019, 0x611B, 0xA0BA,
386 0x510F, 0x7003, 0x6110, 0x9048, 0x6002, 0x800C, 0x6119, 0xA098, 0x5121, 0x7080, 0x6115, 0xA04B,
387 0x610A, 0x9016, 0x611D, 0xA0DE, 0x510B, 0x6122, 0x610E, 0x9039, 0x6001, 0x7123, 0x6118, 0xA086,
388 0x5111, 0x7009, 0x6114, 0x90FD, 0x6109, 0x80F0, 0x611C, 0xA0CD, 0x510F, 0x7005, 0x6112, 0x9081,
389 0x6107, 0x8010, 0x611A, 0xA0A8, 0x5121, 0x7102, 0x6116, 0xA05E, 0x610C, 0x9021, 0x611E, 0xA0F3,
390 0x510B, 0x611F, 0x610D, 0x9033, 0x6000, 0x7106, 0x6117, 0xA079, 0x5111, 0x7008, 0x6113, 0x90F2,
391 0x6108, 0x8040, 0x611B, 0xA0C3, 0x510F, 0x7004, 0x6110, 0x9059, 0x6002, 0x800E, 0x6119, 0xA0A0,
392 0x5121, 0x70FF, 0x6115, 0xA055, 0x610A, 0x901C, 0x611D, 0xA0E7, 0x510B, 0x6122, 0x610E, 0x9041,
393 0x6001, 0x7124, 0x6118, 0xA08F, 0x5111, 0x700A, 0x6114, 0xA036, 0x6109, 0x8120, 0x611C, 0xA0D6,
394 0x510F, 0x7006, 0x6112, 0x9090, 0x6107, 0x8013, 0x611A, 0xA0B1, 0x5121, 0x7103, 0x6116, 0xA067,
395 0x610C, 0x9026, 0x611E, 0xD101, 0x510B, 0x611F, 0x610D, 0x9027, 0x6000, 0x7105, 0x6117, 0xA068,
396 0x5111, 0x7007, 0x6113, 0x90C0, 0x6108, 0x8018, 0x611B, 0xA0B3, 0x510F, 0x7003, 0x6110, 0x9042,
397 0x6002, 0x800B, 0x6119, 0xA091, 0x5121, 0x7080, 0x6115, 0xA03A, 0x610A, 0x9012, 0x611D, 0xA0D7,
398 0x510B, 0x6122, 0x610E, 0x9035, 0x6001, 0x7123, 0x6118, 0xA07A, 0x5111, 0x7009, 0x6114, 0x90F4,
399 0x6109, 0x8060, 0x611C, 0xA0C4, 0x510F, 0x7005, 0x6112, 0x9070, 0x6107, 0x800F, 0x611A, 0xA0A1,
400 0x5121, 0x7102, 0x6116, 0xA056, 0x610C, 0x901D, 0x611E, 0xA0E8, 0x510B, 0x611F, 0x610D, 0x902C,
401 0x6000, 0x7106, 0x6117, 0xA071, 0x5111, 0x7008, 0x6113, 0x90E0, 0x6108, 0x8020, 0x611B, 0xA0BB,
402 0x510F, 0x7004, 0x6110, 0x9049, 0x6002, 0x800D, 0x6119, 0xA099, 0x5121, 0x70FF, 0x6115, 0xA04C,
403 0x610A, 0x9017, 0x611D, 0xA0DF, 0x510B, 0x6122, 0x610E, 0x903C, 0x6001, 0x7124, 0x6118, 0xA087,
404 0x5111, 0x700A, 0x6114, 0xA023, 0x6109, 0x80FE, 0x611C, 0xA0CE, 0x510F, 0x7006, 0x6112, 0x9082,
405 0x6107, 0x8011, 0x611A, 0xA0A9, 0x5121, 0x7103, 0x6116, 0xA05F, 0x610C, 0x9022, 0x611E, 0xA0F5,
406 0x510B, 0x611F, 0x610D, 0x9029, 0x6000, 0x7105, 0x6117, 0xA06C, 0x5111, 0x7007, 0x6113, 0x90CC,
407 0x6108, 0x8019, 0x611B, 0xA0B7, 0x510F, 0x7003, 0x6110, 0x9044, 0x6002, 0x800C, 0x6119, 0xA095,
408 0x5121, 0x7080, 0x6115, 0xA046, 0x610A, 0x9015, 0x611D, 0xA0DB, 0x510B, 0x6122, 0x610E, 0x9038,
409 0x6001, 0x7123, 0x6118, 0xA07E, 0x5111, 0x7009, 0x6114, 0x90FC, 0x6109, 0x80F0, 0x611C, 0xA0C9,
410 0x510F, 0x7005, 0x6112, 0x907F, 0x6107, 0x8010, 0x611A, 0xA0A5, 0x5121, 0x7102, 0x6116, 0xA05B,
411 0x610C, 0x901F, 0x611E, 0xA0EC, 0x510B, 0x611F, 0x610D, 0x9031, 0x6000, 0x7106, 0x6117, 0xA075,
412 0x5111, 0x7008, 0x6113, 0x90F1, 0x6108, 0x8040, 0x611B, 0xA0BF, 0x510F, 0x7004, 0x6110, 0x9051,
413 0x6002, 0x800E, 0x6119, 0xA09D, 0x5121, 0x70FF, 0x6115, 0xA052, 0x610A, 0x901B, 0x611D, 0xA0E4,
414 0x510B, 0x6122, 0x610E, 0x903F, 0x6001, 0x7124, 0x6118, 0xA08C, 0x5111, 0x700A, 0x6114, 0xA02F,
415 0x6109, 0x8120, 0x611C, 0xA0D3, 0x510F, 0x7006, 0x6112, 0x9088, 0x6107, 0x8013, 0x611A, 0xA0AE,
416 0x5121, 0x7103, 0x6116, 0xA064, 0x610C, 0x9025, 0x611E, 0xA0FA, 0x510B, 0x611F, 0x610D, 0x9028,
417 0x6000, 0x7105, 0x6117, 0xA06A, 0x5111, 0x7007, 0x6113, 0x90C6, 0x6108, 0x8018, 0x611B, 0xA0B5,
418 0x510F, 0x7003, 0x6110, 0x9043, 0x6002, 0x800B, 0x6119, 0xA093, 0x5121, 0x7080, 0x6115, 0xA03D,
419 0x610A, 0x9014, 0x611D, 0xA0D9, 0x510B, 0x6122, 0x610E, 0x9037, 0x6001, 0x7123, 0x6118, 0xA07C,
420 0x5111, 0x7009, 0x6114, 0x90F8, 0x6109, 0x8060, 0x611C, 0xA0C7, 0x510F, 0x7005, 0x6112, 0x9078,
421 0x6107, 0x800F, 0x611A, 0xA0A3, 0x5121, 0x7102, 0x6116, 0xA058, 0x610C, 0x901E, 0x611E, 0xA0EA,
422 0x510B, 0x611F, 0x610D, 0x9030, 0x6000, 0x7106, 0x6117, 0xA073, 0x5111, 0x7008, 0x6113, 0x90EE,
423 0x6108, 0x8020, 0x611B, 0xA0BD, 0x510F, 0x7004, 0x6110, 0x9050, 0x6002, 0x800D, 0x6119, 0xA09B,
424 0x5121, 0x70FF, 0x6115, 0xA04E, 0x610A, 0x901A, 0x611D, 0xA0E2, 0x510B, 0x6122, 0x610E, 0x903E,
425 0x6001, 0x7124, 0x6118, 0xA08A, 0x5111, 0x700A, 0x6114, 0xA02D, 0x6109, 0x80FE, 0x611C, 0xA0D1,
426 0x510F, 0x7006, 0x6112, 0x9084, 0x6107, 0x8011, 0x611A, 0xA0AC, 0x5121, 0x7103, 0x6116, 0xA062,
427 0x610C, 0x9024, 0x611E, 0xA0F7, 0x510B, 0x611F, 0x610D, 0x902A, 0x6000, 0x7105, 0x6117, 0xA06E,
428 0x5111, 0x7007, 0x6113, 0x90D0, 0x6108, 0x8019, 0x611B, 0xA0B9, 0x510F, 0x7003, 0x6110, 0x9048,
429 0x6002, 0x800C, 0x6119, 0xA097, 0x5121, 0x7080, 0x6115, 0xA04A, 0x610A, 0x9016, 0x611D, 0xA0DD,
430 0x510B, 0x6122, 0x610E, 0x9039, 0x6001, 0x7123, 0x6118, 0xA085, 0x5111, 0x7009, 0x6114, 0x90FD,
431 0x6109, 0x80F0, 0x611C, 0xA0CB, 0x510F, 0x7005, 0x6112, 0x9081, 0x6107, 0x8010, 0x611A, 0xA0A7,
432 0x5121, 0x7102, 0x6116, 0xA05D, 0x610C, 0x9021, 0x611E, 0xA0EF, 0x510B, 0x611F, 0x610D, 0x9033,
433 0x6000, 0x7106, 0x6117, 0xA077, 0x5111, 0x7008, 0x6113, 0x90F2, 0x6108, 0x8040, 0x611B, 0xA0C2,
434 0x510F, 0x7004, 0x6110, 0x9059, 0x6002, 0x800E, 0x6119, 0xA09F, 0x5121, 0x70FF, 0x6115, 0xA054,
435 0x610A, 0x901C, 0x611D, 0xA0E6, 0x510B, 0x6122, 0x610E, 0x9041, 0x6001, 0x7124, 0x6118, 0xA08E,
436 0x5111, 0x700A, 0x6114, 0xA034, 0x6109, 0x8120, 0x611C, 0xA0D5, 0x510F, 0x7006, 0x6112, 0x9090,
437 0x6107, 0x8013, 0x611A, 0xA0B0, 0x5121, 0x7103, 0x6116, 0xA066, 0x610C, 0x9026, 0x611E, 0xA104,
438 0x510B, 0x611F, 0x610D, 0x9027, 0x6000, 0x7105, 0x6117, 0xA069, 0x5111, 0x7007, 0x6113, 0x90C0,
439 0x6108, 0x8018, 0x611B, 0xA0B4, 0x510F, 0x7003, 0x6110, 0x9042, 0x6002, 0x800B, 0x6119, 0xA092,
440 0x5121, 0x7080, 0x6115, 0xA03B, 0x610A, 0x9012, 0x611D, 0xA0D8, 0x510B, 0x6122, 0x610E, 0x9035,
441 0x6001, 0x7123, 0x6118, 0xA07B, 0x5111, 0x7009, 0x6114, 0x90F4, 0x6109, 0x8060, 0x611C, 0xA0C5,
442 0x510F, 0x7005, 0x6112, 0x9070, 0x6107, 0x800F, 0x611A, 0xA0A2, 0x5121, 0x7102, 0x6116, 0xA057,
443 0x610C, 0x901D, 0x611E, 0xA0E9, 0x510B, 0x611F, 0x610D, 0x902C, 0x6000, 0x7106, 0x6117, 0xA072,
444 0x5111, 0x7008, 0x6113, 0x90E0, 0x6108, 0x8020, 0x611B, 0xA0BC, 0x510F, 0x7004, 0x6110, 0x9049,
445 0x6002, 0x800D, 0x6119, 0xA09A, 0x5121, 0x70FF, 0x6115, 0xA04D, 0x610A, 0x9017, 0x611D, 0xA0E1,
446 0x510B, 0x6122, 0x610E, 0x903C, 0x6001, 0x7124, 0x6118, 0xA089, 0x5111, 0x700A, 0x6114, 0xA02B,
447 0x6109, 0x80FE, 0x611C, 0xA0CF, 0x510F, 0x7006, 0x6112, 0x9082, 0x6107, 0x8011, 0x611A, 0xA0AA,
448 0x5121, 0x7103, 0x6116, 0xA061, 0x610C, 0x9022, 0x611E, 0xA0F6, 0x510B, 0x611F, 0x610D, 0x9029,
449 0x6000, 0x7105, 0x6117, 0xA06D, 0x5111, 0x7007, 0x6113, 0x90CC, 0x6108, 0x8019, 0x611B, 0xA0B8,
450 0x510F, 0x7003, 0x6110, 0x9044, 0x6002, 0x800C, 0x6119, 0xA096, 0x5121, 0x7080, 0x6115, 0xA047,
451 0x610A, 0x9015, 0x611D, 0xA0DC, 0x510B, 0x6122, 0x610E, 0x9038, 0x6001, 0x7123, 0x6118, 0xA083,
452 0x5111, 0x7009, 0x6114, 0x90FC, 0x6109, 0x80F0, 0x611C, 0xA0CA, 0x510F, 0x7005, 0x6112, 0x907F,
453 0x6107, 0x8010, 0x611A, 0xA0A6, 0x5121, 0x7102, 0x6116, 0xA05C, 0x610C, 0x901F, 0x611E, 0xA0ED,
454 0x510B, 0x611F, 0x610D, 0x9031, 0x6000, 0x7106, 0x6117, 0xA076, 0x5111, 0x7008, 0x6113, 0x90F1,
455 0x6108, 0x8040, 0x611B, 0xA0C1, 0x510F, 0x7004, 0x6110, 0x9051, 0x6002, 0x800E, 0x6119, 0xA09E,
456 0x5121, 0x70FF, 0x6115, 0xA053, 0x610A, 0x901B, 0x611D, 0xA0E5, 0x510B, 0x6122, 0x610E, 0x903F,
457 0x6001, 0x7124, 0x6118, 0xA08D, 0x5111, 0x700A, 0x6114, 0xA032, 0x6109, 0x8120, 0x611C, 0xA0D4,
458 0x510F, 0x7006, 0x6112, 0x9088, 0x6107, 0x8013, 0x611A, 0xA0AF, 0x5121, 0x7103, 0x6116, 0xA065,
459 0x610C, 0x9025, 0x611E, 0xA0FB, 0x510B, 0x611F, 0x610D, 0x9028, 0x6000, 0x7105, 0x6117, 0xA06B,
460 0x5111, 0x7007, 0x6113, 0x90C6, 0x6108, 0x8018, 0x611B, 0xA0B6, 0x510F, 0x7003, 0x6110, 0x9043,
461 0x6002, 0x800B, 0x6119, 0xA094, 0x5121, 0x7080, 0x6115, 0xA045, 0x610A, 0x9014, 0x611D, 0xA0DA,
462 0x510B, 0x6122, 0x610E, 0x9037, 0x6001, 0x7123, 0x6118, 0xA07D, 0x5111, 0x7009, 0x6114, 0x90F8,
463 0x6109, 0x8060, 0x611C, 0xA0C8, 0x510F, 0x7005, 0x6112, 0x9078, 0x6107, 0x800F, 0x611A, 0xA0A4,
464 0x5121, 0x7102, 0x6116, 0xA05A, 0x610C, 0x901E, 0x611E, 0xA0EB, 0x510B, 0x611F, 0x610D, 0x9030,
465 0x6000, 0x7106, 0x6117, 0xA074, 0x5111, 0x7008, 0x6113, 0x90EE, 0x6108, 0x8020, 0x611B, 0xA0BE,
466 0x510F, 0x7004, 0x6110, 0x9050, 0x6002, 0x800D, 0x6119, 0xA09C, 0x5121, 0x70FF, 0x6115, 0xA04F,
467 0x610A, 0x901A, 0x611D, 0xA0E3, 0x510B, 0x6122, 0x610E, 0x903E, 0x6001, 0x7124, 0x6118, 0xA08B,
468 0x5111, 0x700A, 0x6114, 0xA02E, 0x6109, 0x80FE, 0x611C, 0xA0D2, 0x510F, 0x7006, 0x6112, 0x9084,
469 0x6107, 0x8011, 0x611A, 0xA0AD, 0x5121, 0x7103, 0x6116, 0xA063, 0x610C, 0x9024, 0x611E, 0xA0F9,
470 0x510B, 0x611F, 0x610D, 0x902A, 0x6000, 0x7105, 0x6117, 0xA06F, 0x5111, 0x7007, 0x6113, 0x90D0,
471 0x6108, 0x8019, 0x611B, 0xA0BA, 0x510F, 0x7003, 0x6110, 0x9048, 0x6002, 0x800C, 0x6119, 0xA098,
472 0x5121, 0x7080, 0x6115, 0xA04B, 0x610A, 0x9016, 0x611D, 0xA0DE, 0x510B, 0x6122, 0x610E, 0x9039,
473 0x6001, 0x7123, 0x6118, 0xA086, 0x5111, 0x7009, 0x6114, 0x90FD, 0x6109, 0x80F0, 0x611C, 0xA0CD,
474 0x510F, 0x7005, 0x6112, 0x9081, 0x6107, 0x8010, 0x611A, 0xA0A8, 0x5121, 0x7102, 0x6116, 0xA05E,
475 0x610C, 0x9021, 0x611E, 0xA0F3, 0x510B, 0x611F, 0x610D, 0x9033, 0x6000, 0x7106, 0x6117, 0xA079,
476 0x5111, 0x7008, 0x6113, 0x90F2, 0x6108, 0x8040, 0x611B, 0xA0C3, 0x510F, 0x7004, 0x6110, 0x9059,
477 0x6002, 0x800E, 0x6119, 0xA0A0, 0x5121, 0x70FF, 0x6115, 0xA055, 0x610A, 0x901C, 0x611D, 0xA0E7,
478 0x510B, 0x6122, 0x610E, 0x9041, 0x6001, 0x7124, 0x6118, 0xA08F, 0x5111, 0x700A, 0x6114, 0xA036,
479 0x6109, 0x8120, 0x611C, 0xA0D6, 0x510F, 0x7006, 0x6112, 0x9090, 0x6107, 0x8013, 0x611A, 0xA0B1,
480 0x5121, 0x7103, 0x6116, 0xA067, 0x610C, 0x9026, 0x611E, 0xB0B2, 0x510B, 0x611F, 0x610D, 0x9027,
481 0x6000, 0x7105, 0x6117, 0xA068, 0x5111, 0x7007, 0x6113, 0x90C0, 0x6108, 0x8018, 0x611B, 0xA0B3,
482 0x510F, 0x7003, 0x6110, 0x9042, 0x6002, 0x800B, 0x6119, 0xA091, 0x5121, 0x7080, 0x6115, 0xA03A,
483 0x610A, 0x9012, 0x611D, 0xA0D7, 0x510B, 0x6122, 0x610E, 0x9035, 0x6001, 0x7123, 0x6118, 0xA07A,
484 0x5111, 0x7009, 0x6114, 0x90F4, 0x6109, 0x8060, 0x611C, 0xA0C4, 0x510F, 0x7005, 0x6112, 0x9070,
485 0x6107, 0x800F, 0x611A, 0xA0A1, 0x5121, 0x7102, 0x6116, 0xA056, 0x610C, 0x901D, 0x611E, 0xA0E8,
486 0x510B, 0x611F, 0x610D, 0x902C, 0x6000, 0x7106, 0x6117, 0xA071, 0x5111, 0x7008, 0x6113, 0x90E0,
487 0x6108, 0x8020, 0x611B, 0xA0BB, 0x510F, 0x7004, 0x6110, 0x9049, 0x6002, 0x800D, 0x6119, 0xA099,
488 0x5121, 0x70FF, 0x6115, 0xA04C, 0x610A, 0x9017, 0x611D, 0xA0DF, 0x510B, 0x6122, 0x610E, 0x903C,
489 0x6001, 0x7124, 0x6118, 0xA087, 0x5111, 0x700A, 0x6114, 0xA023, 0x6109, 0x80FE, 0x611C, 0xA0CE,
490 0x510F, 0x7006, 0x6112, 0x9082, 0x6107, 0x8011, 0x611A, 0xA0A9, 0x5121, 0x7103, 0x6116, 0xA05F,
491 0x610C, 0x9022, 0x611E, 0xA0F5, 0x510B, 0x611F, 0x610D, 0x9029, 0x6000, 0x7105, 0x6117, 0xA06C,
492 0x5111, 0x7007, 0x6113, 0x90CC, 0x6108, 0x8019, 0x611B, 0xA0B7, 0x510F, 0x7003, 0x6110, 0x9044,
493 0x6002, 0x800C, 0x6119, 0xA095, 0x5121, 0x7080, 0x6115, 0xA046, 0x610A, 0x9015, 0x611D, 0xA0DB,
494 0x510B, 0x6122, 0x610E, 0x9038, 0x6001, 0x7123, 0x6118, 0xA07E, 0x5111, 0x7009, 0x6114, 0x90FC,
495 0x6109, 0x80F0, 0x611C, 0xA0C9, 0x510F, 0x7005, 0x6112, 0x907F, 0x6107, 0x8010, 0x611A, 0xA0A5,
496 0x5121, 0x7102, 0x6116, 0xA05B, 0x610C, 0x901F, 0x611E, 0xA0EC, 0x510B, 0x611F, 0x610D, 0x9031,
497 0x6000, 0x7106, 0x6117, 0xA075, 0x5111, 0x7008, 0x6113, 0x90F1, 0x6108, 0x8040, 0x611B, 0xA0BF,
498 0x510F, 0x7004, 0x6110, 0x9051, 0x6002, 0x800E, 0x6119, 0xA09D, 0x5121, 0x70FF, 0x6115, 0xA052,
499 0x610A, 0x901B, 0x611D, 0xA0E4, 0x510B, 0x6122, 0x610E, 0x903F, 0x6001, 0x7124, 0x6118, 0xA08C,
500 0x5111, 0x700A, 0x6114, 0xA02F, 0x6109, 0x8120, 0x611C, 0xA0D3, 0x510F, 0x7006, 0x6112, 0x9088,
501 0x6107, 0x8013, 0x611A, 0xA0AE, 0x5121, 0x7103, 0x6116, 0xA064, 0x610C, 0x9025, 0x611E, 0xA0FA,
502 0x510B, 0x611F, 0x610D, 0x9028, 0x6000, 0x7105, 0x6117, 0xA06A, 0x5111, 0x7007, 0x6113, 0x90C6,
503 0x6108, 0x8018, 0x611B, 0xA0B5, 0x510F, 0x7003, 0x6110, 0x9043, 0x6002, 0x800B, 0x6119, 0xA093,
504 0x5121, 0x7080, 0x6115, 0xA03D, 0x610A, 0x9014, 0x611D, 0xA0D9, 0x510B, 0x6122, 0x610E, 0x9037,
505 0x6001, 0x7123, 0x6118, 0xA07C, 0x5111, 0x7009, 0x6114, 0x90F8, 0x6109, 0x8060, 0x611C, 0xA0C7,
506 0x510F, 0x7005, 0x6112, 0x9078, 0x6107, 0x800F, 0x611A, 0xA0A3, 0x5121, 0x7102, 0x6116, 0xA058,
507 0x610C, 0x901E, 0x611E, 0xA0EA, 0x510B, 0x611F, 0x610D, 0x9030, 0x6000, 0x7106, 0x6117, 0xA073,
508 0x5111, 0x7008, 0x6113, 0x90EE, 0x6108, 0x8020, 0x611B, 0xA0BD, 0x510F, 0x7004, 0x6110, 0x9050,
509 0x6002, 0x800D, 0x6119, 0xA09B, 0x5121, 0x70FF, 0x6115, 0xA04E, 0x610A, 0x901A, 0x611D, 0xA0E2,
510 0x510B, 0x6122, 0x610E, 0x903E, 0x6001, 0x7124, 0x6118, 0xA08A, 0x5111, 0x700A, 0x6114, 0xA02D,
511 0x6109, 0x80FE, 0x611C, 0xA0D1, 0x510F, 0x7006, 0x6112, 0x9084, 0x6107, 0x8011, 0x611A, 0xA0AC,
512 0x5121, 0x7103, 0x6116, 0xA062, 0x610C, 0x9024, 0x611E, 0xA0F7, 0x510B, 0x611F, 0x610D, 0x902A,
513 0x6000, 0x7105, 0x6117, 0xA06E, 0x5111, 0x7007, 0x6113, 0x90D0, 0x6108, 0x8019, 0x611B, 0xA0B9,
514 0x510F, 0x7003, 0x6110, 0x9048, 0x6002, 0x800C, 0x6119, 0xA097, 0x5121, 0x7080, 0x6115, 0xA04A,
515 0x610A, 0x9016, 0x611D, 0xA0DD, 0x510B, 0x6122, 0x610E, 0x9039, 0x6001, 0x7123, 0x6118, 0xA085,
516 0x5111, 0x7009, 0x6114, 0x90FD, 0x6109, 0x80F0, 0x611C, 0xA0CB, 0x510F, 0x7005, 0x6112, 0x9081,
517 0x6107, 0x8010, 0x611A, 0xA0A7, 0x5121, 0x7102, 0x6116, 0xA05D, 0x610C, 0x9021, 0x611E, 0xA0EF,
518 0x510B, 0x611F, 0x610D, 0x9033, 0x6000, 0x7106, 0x6117, 0xA077, 0x5111, 0x7008, 0x6113, 0x90F2,
519 0x6108, 0x8040, 0x611B, 0xA0C2, 0x510F, 0x7004, 0x6110, 0x9059, 0x6002, 0x800E, 0x6119, 0xA09F,
520 0x5121, 0x70FF, 0x6115, 0xA054, 0x610A, 0x901C, 0x611D, 0xA0E6, 0x510B, 0x6122, 0x610E, 0x9041,
521 0x6001, 0x7124, 0x6118, 0xA08E, 0x5111, 0x700A, 0x6114, 0xA034, 0x6109, 0x8120, 0x611C, 0xA0D5,
522 0x510F, 0x7006, 0x6112, 0x9090, 0x6107, 0x8013, 0x611A, 0xA0B0, 0x5121, 0x7103, 0x6116, 0xA066,
523 0x610C, 0x9026, 0x611E, 0xA104, 0x510B, 0x611F, 0x610D, 0x9027, 0x6000, 0x7105, 0x6117, 0xA069,
524 0x5111, 0x7007, 0x6113, 0x90C0, 0x6108, 0x8018, 0x611B, 0xA0B4, 0x510F, 0x7003, 0x6110, 0x9042,
525 0x6002, 0x800B, 0x6119, 0xA092, 0x5121, 0x7080, 0x6115, 0xA03B, 0x610A, 0x9012, 0x611D, 0xA0D8,
526 0x510B, 0x6122, 0x610E, 0x9035, 0x6001, 0x7123, 0x6118, 0xA07B, 0x5111, 0x7009, 0x6114, 0x90F4,
527 0x6109, 0x8060, 0x611C, 0xA0C5, 0x510F, 0x7005, 0x6112, 0x9070, 0x6107, 0x800F, 0x611A, 0xA0A2,
528 0x5121, 0x7102, 0x6116, 0xA057, 0x610C, 0x901D, 0x611E, 0xA0E9, 0x510B, 0x611F, 0x610D, 0x902C,
529 0x6000, 0x7106, 0x6117, 0xA072, 0x5111, 0x7008, 0x6113, 0x90E0, 0x6108, 0x8020, 0x611B, 0xA0BC,
530 0x510F, 0x7004, 0x6110, 0x9049, 0x6002, 0x800D, 0x6119, 0xA09A, 0x5121, 0x70FF, 0x6115, 0xA04D,
531 0x610A, 0x9017, 0x611D, 0xA0E1, 0x510B, 0x6122, 0x610E, 0x903C, 0x6001, 0x7124, 0x6118, 0xA089,
532 0x5111, 0x700A, 0x6114, 0xA02B, 0x6109, 0x80FE, 0x611C, 0xA0CF, 0x510F, 0x7006, 0x6112, 0x9082,
533 0x6107, 0x8011, 0x611A, 0xA0AA, 0x5121, 0x7103, 0x6116, 0xA061, 0x610C, 0x9022, 0x611E, 0xA0F6,
534 0x510B, 0x611F, 0x610D, 0x9029, 0x6000, 0x7105, 0x6117, 0xA06D, 0x5111, 0x7007, 0x6113, 0x90CC,
535 0x6108, 0x8019, 0x611B, 0xA0B8, 0x510F, 0x7003, 0x6110, 0x9044, 0x6002, 0x800C, 0x6119, 0xA096,
536 0x5121, 0x7080, 0x6115, 0xA047, 0x610A, 0x9015, 0x611D, 0xA0DC, 0x510B, 0x6122, 0x610E, 0x9038,
537 0x6001, 0x7123, 0x6118, 0xA083, 0x5111, 0x7009, 0x6114, 0x90FC, 0x6109, 0x80F0, 0x611C, 0xA0CA,
538 0x510F, 0x7005, 0x6112, 0x907F, 0x6107, 0x8010, 0x611A, 0xA0A6, 0x5121, 0x7102, 0x6116, 0xA05C,
539 0x610C, 0x901F, 0x611E, 0xA0ED, 0x510B, 0x611F, 0x610D, 0x9031, 0x6000, 0x7106, 0x6117, 0xA076,
540 0x5111, 0x7008, 0x6113, 0x90F1, 0x6108, 0x8040, 0x611B, 0xA0C1, 0x510F, 0x7004, 0x6110, 0x9051,
541 0x6002, 0x800E, 0x6119, 0xA09E, 0x5121, 0x70FF, 0x6115, 0xA053, 0x610A, 0x901B, 0x611D, 0xA0E5,
542 0x510B, 0x6122, 0x610E, 0x903F, 0x6001, 0x7124, 0x6118, 0xA08D, 0x5111, 0x700A, 0x6114, 0xA032,
543 0x6109, 0x8120, 0x611C, 0xA0D4, 0x510F, 0x7006, 0x6112, 0x9088, 0x6107, 0x8013, 0x611A, 0xA0AF,
544 0x5121, 0x7103, 0x6116, 0xA065, 0x610C, 0x9025, 0x611E, 0xA0FB, 0x510B, 0x611F, 0x610D, 0x9028,
545 0x6000, 0x7105, 0x6117, 0xA06B, 0x5111, 0x7007, 0x6113, 0x90C6, 0x6108, 0x8018, 0x611B, 0xA0B6,
546 0x510F, 0x7003, 0x6110, 0x9043, 0x6002, 0x800B, 0x6119, 0xA094, 0x5121, 0x7080, 0x6115, 0xA045,
547 0x610A, 0x9014, 0x611D, 0xA0DA, 0x510B, 0x6122, 0x610E, 0x9037, 0x6001, 0x7123, 0x6118, 0xA07D,
548 0x5111, 0x7009, 0x6114, 0x90F8, 0x6109, 0x8060, 0x611C, 0xA0C8, 0x510F, 0x7005, 0x6112, 0x9078,
549 0x6107, 0x800F, 0x611A, 0xA0A4, 0x5121, 0x7102, 0x6116, 0xA05A, 0x610C, 0x901E, 0x611E, 0xA0EB,
550 0x510B, 0x611F, 0x610D, 0x9030, 0x6000, 0x7106, 0x6117, 0xA074, 0x5111, 0x7008, 0x6113, 0x90EE,
551 0x6108, 0x8020, 0x611B, 0xA0BE, 0x510F, 0x7004, 0x6110, 0x9050, 0x6002, 0x800D, 0x6119, 0xA09C,
552 0x5121, 0x70FF, 0x6115, 0xA04F, 0x610A, 0x901A, 0x611D, 0xA0E3, 0x510B, 0x6122, 0x610E, 0x903E,
553 0x6001, 0x7124, 0x6118, 0xA08B, 0x5111, 0x700A, 0x6114, 0xA02E, 0x6109, 0x80FE, 0x611C, 0xA0D2,
554 0x510F, 0x7006, 0x6112, 0x9084, 0x6107, 0x8011, 0x611A, 0xA0AD, 0x5121, 0x7103, 0x6116, 0xA063,
555 0x610C, 0x9024, 0x611E, 0xA0F9, 0x510B, 0x611F, 0x610D, 0x902A, 0x6000, 0x7105, 0x6117, 0xA06F,
556 0x5111, 0x7007, 0x6113, 0x90D0, 0x6108, 0x8019, 0x611B, 0xA0BA, 0x510F, 0x7003, 0x6110, 0x9048,
557 0x6002, 0x800C, 0x6119, 0xA098, 0x5121, 0x7080, 0x6115, 0xA04B, 0x610A, 0x9016, 0x611D, 0xA0DE,
558 0x510B, 0x6122, 0x610E, 0x9039, 0x6001, 0x7123, 0x6118, 0xA086, 0x5111, 0x7009, 0x6114, 0x90FD,
559 0x6109, 0x80F0, 0x611C, 0xA0CD, 0x510F, 0x7005, 0x6112, 0x9081, 0x6107, 0x8010, 0x611A, 0xA0A8,
560 0x5121, 0x7102, 0x6116, 0xA05E, 0x610C, 0x9021, 0x611E, 0xA0F3, 0x510B, 0x611F, 0x610D, 0x9033,
561 0x6000, 0x7106, 0x6117, 0xA079, 0x5111, 0x7008, 0x6113, 0x90F2, 0x6108, 0x8040, 0x611B, 0xA0C3,
562 0x510F, 0x7004, 0x6110, 0x9059, 0x6002, 0x800E, 0x6119, 0xA0A0, 0x5121, 0x70FF, 0x6115, 0xA055,
563 0x610A, 0x901C, 0x611D, 0xA0E7, 0x510B, 0x6122, 0x610E, 0x9041, 0x6001, 0x7124, 0x6118, 0xA08F,
564 0x5111, 0x700A, 0x6114, 0xA036, 0x6109, 0x8120, 0x611C, 0xA0D6, 0x510F, 0x7006, 0x6112, 0x9090,
565 0x6107, 0x8013, 0x611A, 0xA0B1, 0x5121, 0x7103, 0x6116, 0xA067, 0x610C, 0x9026, 0x611E, 0xD100,
566 0x510B, 0x611F, 0x610D, 0x9027, 0x6000, 0x7105, 0x6117, 0xA068, 0x5111, 0x7007, 0x6113, 0x90C0,
567 0x6108, 0x8018, 0x611B, 0xA0B3, 0x510F, 0x7003, 0x6110, 0x9042, 0x6002, 0x800B, 0x6119, 0xA091,
568 0x5121, 0x7080, 0x6115, 0xA03A, 0x610A, 0x9012, 0x611D, 0xA0D7, 0x510B, 0x6122, 0x610E, 0x9035,
569 0x6001, 0x7123, 0x6118, 0xA07A, 0x5111, 0x7009, 0x6114, 0x90F4, 0x6109, 0x8060, 0x611C, 0xA0C4,
570 0x510F, 0x7005, 0x6112, 0x9070, 0x6107, 0x800F, 0x611A, 0xA0A1, 0x5121, 0x7102, 0x6116, 0xA056,
571 0x610C, 0x901D, 0x611E, 0xA0E8, 0x510B, 0x611F, 0x610D, 0x902C, 0x6000, 0x7106, 0x6117, 0xA071,
572 0x5111, 0x7008, 0x6113, 0x90E0, 0x6108, 0x8020, 0x611B, 0xA0BB, 0x510F, 0x7004, 0x6110, 0x9049,
573 0x6002, 0x800D, 0x6119, 0xA099, 0x5121, 0x70FF, 0x6115, 0xA04C, 0x610A, 0x9017, 0x611D, 0xA0DF,
574 0x510B, 0x6122, 0x610E, 0x903C, 0x6001, 0x7124, 0x6118, 0xA087, 0x5111, 0x700A, 0x6114, 0xA023,
575 0x6109, 0x80FE, 0x611C, 0xA0CE, 0x510F, 0x7006, 0x6112, 0x9082, 0x6107, 0x8011, 0x611A, 0xA0A9,
576 0x5121, 0x7103, 0x6116, 0xA05F, 0x610C, 0x9022, 0x611E, 0xA0F5, 0x510B, 0x611F, 0x610D, 0x9029,
577 0x6000, 0x7105, 0x6117, 0xA06C, 0x5111, 0x7007, 0x6113, 0x90CC, 0x6108, 0x8019, 0x611B, 0xA0B7,
578 0x510F, 0x7003, 0x6110, 0x9044, 0x6002, 0x800C, 0x6119, 0xA095, 0x5121, 0x7080, 0x6115, 0xA046,
579 0x610A, 0x9015, 0x611D, 0xA0DB, 0x510B, 0x6122, 0x610E, 0x9038, 0x6001, 0x7123, 0x6118, 0xA07E,
580 0x5111, 0x7009, 0x6114, 0x90FC, 0x6109, 0x80F0, 0x611C, 0xA0C9, 0x510F, 0x7005, 0x6112, 0x907F,
581 0x6107, 0x8010, 0x611A, 0xA0A5, 0x5121, 0x7102, 0x6116, 0xA05B, 0x610C, 0x901F, 0x611E, 0xA0EC,
582 0x510B, 0x611F, 0x610D, 0x9031, 0x6000, 0x7106, 0x6117, 0xA075, 0x5111, 0x7008, 0x6113, 0x90F1,
583 0x6108, 0x8040, 0x611B, 0xA0BF, 0x510F, 0x7004, 0x6110, 0x9051, 0x6002, 0x800E, 0x6119, 0xA09D,
584 0x5121, 0x70FF, 0x6115, 0xA052, 0x610A, 0x901B, 0x611D, 0xA0E4, 0x510B, 0x6122, 0x610E, 0x903F,
585 0x6001, 0x7124, 0x6118, 0xA08C, 0x5111, 0x700A, 0x6114, 0xA02F, 0x6109, 0x8120, 0x611C, 0xA0D3,
586 0x510F, 0x7006, 0x6112, 0x9088, 0x6107, 0x8013, 0x611A, 0xA0AE, 0x5121, 0x7103, 0x6116, 0xA064,
587 0x610C, 0x9025, 0x611E, 0xA0FA, 0x510B, 0x611F, 0x610D, 0x9028, 0x6000, 0x7105, 0x6117, 0xA06A,
588 0x5111, 0x7007, 0x6113, 0x90C6, 0x6108, 0x8018, 0x611B, 0xA0B5, 0x510F, 0x7003, 0x6110, 0x9043,
589 0x6002, 0x800B, 0x6119, 0xA093, 0x5121, 0x7080, 0x6115, 0xA03D, 0x610A, 0x9014, 0x611D, 0xA0D9,
590 0x510B, 0x6122, 0x610E, 0x9037, 0x6001, 0x7123, 0x6118, 0xA07C, 0x5111, 0x7009, 0x6114, 0x90F8,
591 0x6109, 0x8060, 0x611C, 0xA0C7, 0x510F, 0x7005, 0x6112, 0x9078, 0x6107, 0x800F, 0x611A, 0xA0A3,
592 0x5121, 0x7102, 0x6116, 0xA058, 0x610C, 0x901E, 0x611E, 0xA0EA, 0x510B, 0x611F, 0x610D, 0x9030,
593 0x6000, 0x7106, 0x6117, 0xA073, 0x5111, 0x7008, 0x6113, 0x90EE, 0x6108, 0x8020, 0x611B, 0xA0BD,
594 0x510F, 0x7004, 0x6110, 0x9050, 0x6002, 0x800D, 0x6119, 0xA09B, 0x5121, 0x70FF, 0x6115, 0xA04E,
595 0x610A, 0x901A, 0x611D, 0xA0E2, 0x510B, 0x6122, 0x610E, 0x903E, 0x6001, 0x7124, 0x6118, 0xA08A,
596 0x5111, 0x700A, 0x6114, 0xA02D, 0x6109, 0x80FE, 0x611C, 0xA0D1, 0x510F, 0x7006, 0x6112, 0x9084,
597 0x6107, 0x8011, 0x611A, 0xA0AC, 0x5121, 0x7103, 0x6116, 0xA062, 0x610C, 0x9024, 0x611E, 0xA0F7,
598 0x510B, 0x611F, 0x610D, 0x902A, 0x6000, 0x7105, 0x6117, 0xA06E, 0x5111, 0x7007, 0x6113, 0x90D0,
599 0x6108, 0x8019, 0x611B, 0xA0B9, 0x510F, 0x7003, 0x6110, 0x9048, 0x6002, 0x800C, 0x6119, 0xA097,
600 0x5121, 0x7080, 0x6115, 0xA04A, 0x610A, 0x9016, 0x611D, 0xA0DD, 0x510B, 0x6122, 0x610E, 0x9039,
601 0x6001, 0x7123, 0x6118, 0xA085, 0x5111, 0x7009, 0x6114, 0x90FD, 0x6109, 0x80F0, 0x611C, 0xA0CB,
602 0x510F, 0x7005, 0x6112, 0x9081, 0x6107, 0x8010, 0x611A, 0xA0A7, 0x5121, 0x7102, 0x6116, 0xA05D,
603 0x610C, 0x9021, 0x611E, 0xA0EF, 0x510B, 0x611F, 0x610D, 0x9033, 0x6000, 0x7106, 0x6117, 0xA077,
604 0x5111, 0x7008, 0x6113, 0x90F2, 0x6108, 0x8040, 0x611B, 0xA0C2, 0x510F, 0x7004, 0x6110, 0x9059,
605 0x6002, 0x800E, 0x6119, 0xA09F, 0x5121, 0x70FF, 0x6115, 0xA054, 0x610A, 0x901C, 0x611D, 0xA0E6,
606 0x510B, 0x6122, 0x610E, 0x9041, 0x6001, 0x7124, 0x6118, 0xA08E, 0x5111, 0x700A, 0x6114, 0xA034,
607 0x6109, 0x8120, 0x611C, 0xA0D5, 0x510F, 0x7006, 0x6112, 0x9090, 0x6107, 0x8013, 0x611A, 0xA0B0,
608 0x5121, 0x7103, 0x6116, 0xA066, 0x610C, 0x9026, 0x611E, 0xA104, 0x510B, 0x611F, 0x610D, 0x9027,
609 0x6000, 0x7105, 0x6117, 0xA069, 0x5111, 0x7007, 0x6113, 0x90C0, 0x6108, 0x8018, 0x611B, 0xA0B4,
610 0x510F, 0x7003, 0x6110, 0x9042, 0x6002, 0x800B, 0x6119, 0xA092, 0x5121, 0x7080, 0x6115, 0xA03B,
611 0x610A, 0x9012, 0x611D, 0xA0D8, 0x510B, 0x6122, 0x610E, 0x9035, 0x6001, 0x7123, 0x6118, 0xA07B,
612 0x5111, 0x7009, 0x6114, 0x90F4, 0x6109, 0x8060, 0x611C, 0xA0C5, 0x510F, 0x7005, 0x6112, 0x9070,
613 0x6107, 0x800F, 0x611A, 0xA0A2, 0x5121, 0x7102, 0x6116, 0xA057, 0x610C, 0x901D, 0x611E, 0xA0E9,
614 0x510B, 0x611F, 0x610D, 0x902C, 0x6000, 0x7106, 0x6117, 0xA072, 0x5111, 0x7008, 0x6113, 0x90E0,
615 0x6108, 0x8020, 0x611B, 0xA0BC, 0x510F, 0x7004, 0x6110, 0x9049, 0x6002, 0x800D, 0x6119, 0xA09A,
616 0x5121, 0x70FF, 0x6115, 0xA04D, 0x610A, 0x9017, 0x611D, 0xA0E1, 0x510B, 0x6122, 0x610E, 0x903C,
617 0x6001, 0x7124, 0x6118, 0xA089, 0x5111, 0x700A, 0x6114, 0xA02B, 0x6109, 0x80FE, 0x611C, 0xA0CF,
618 0x510F, 0x7006, 0x6112, 0x9082, 0x6107, 0x8011, 0x611A, 0xA0AA, 0x5121, 0x7103, 0x6116, 0xA061,
619 0x610C, 0x9022, 0x611E, 0xA0F6, 0x510B, 0x611F, 0x610D, 0x9029, 0x6000, 0x7105, 0x6117, 0xA06D,
620 0x5111, 0x7007, 0x6113, 0x90CC, 0x6108, 0x8019, 0x611B, 0xA0B8, 0x510F, 0x7003, 0x6110, 0x9044,
621 0x6002, 0x800C, 0x6119, 0xA096, 0x5121, 0x7080, 0x6115, 0xA047, 0x610A, 0x9015, 0x611D, 0xA0DC,
622 0x510B, 0x6122, 0x610E, 0x9038, 0x6001, 0x7123, 0x6118, 0xA083, 0x5111, 0x7009, 0x6114, 0x90FC,
623 0x6109, 0x80F0, 0x611C, 0xA0CA, 0x510F, 0x7005, 0x6112, 0x907F, 0x6107, 0x8010, 0x611A, 0xA0A6,
624 0x5121, 0x7102, 0x6116, 0xA05C, 0x610C, 0x901F, 0x611E, 0xA0ED, 0x510B, 0x611F, 0x610D, 0x9031,
625 0x6000, 0x7106, 0x6117, 0xA076, 0x5111, 0x7008, 0x6113, 0x90F1, 0x6108, 0x8040, 0x611B, 0xA0C1,
626 0x510F, 0x7004, 0x6110, 0x9051, 0x6002, 0x800E, 0x6119, 0xA09E, 0x5121, 0x70FF, 0x6115, 0xA053,
627 0x610A, 0x901B, 0x611D, 0xA0E5, 0x510B, 0x6122, 0x610E, 0x903F, 0x6001, 0x7124, 0x6118, 0xA08D,
628 0x5111, 0x700A, 0x6114, 0xA032, 0x6109, 0x8120, 0x611C, 0xA0D4, 0x510F, 0x7006, 0x6112, 0x9088,
629 0x6107, 0x8013, 0x611A, 0xA0AF, 0x5121, 0x7103, 0x6116, 0xA065, 0x610C, 0x9025, 0x611E, 0xA0FB,
630 0x510B, 0x611F, 0x610D, 0x9028, 0x6000, 0x7105, 0x6117, 0xA06B, 0x5111, 0x7007, 0x6113, 0x90C6,
631 0x6108, 0x8018, 0x611B, 0xA0B6, 0x510F, 0x7003, 0x6110, 0x9043, 0x6002, 0x800B, 0x6119, 0xA094,
632 0x5121, 0x7080, 0x6115, 0xA045, 0x610A, 0x9014, 0x611D, 0xA0DA, 0x510B, 0x6122, 0x610E, 0x9037,
633 0x6001, 0x7123, 0x6118, 0xA07D, 0x5111, 0x7009, 0x6114, 0x90F8, 0x6109, 0x8060, 0x611C, 0xA0C8,
634 0x510F, 0x7005, 0x6112, 0x9078, 0x6107, 0x800F, 0x611A, 0xA0A4, 0x5121, 0x7102, 0x6116, 0xA05A,
635 0x610C, 0x901E, 0x611E, 0xA0EB, 0x510B, 0x611F, 0x610D, 0x9030, 0x6000, 0x7106, 0x6117, 0xA074,
636 0x5111, 0x7008, 0x6113, 0x90EE, 0x6108, 0x8020, 0x611B, 0xA0BE, 0x510F, 0x7004, 0x6110, 0x9050,
637 0x6002, 0x800D, 0x6119, 0xA09C, 0x5121, 0x70FF, 0x6115, 0xA04F, 0x610A, 0x901A, 0x611D, 0xA0E3,
638 0x510B, 0x6122, 0x610E, 0x903E, 0x6001, 0x7124, 0x6118, 0xA08B, 0x5111, 0x700A, 0x6114, 0xA02E,
639 0x6109, 0x80FE, 0x611C, 0xA0D2, 0x510F, 0x7006, 0x6112, 0x9084, 0x6107, 0x8011, 0x611A, 0xA0AD,
640 0x5121, 0x7103, 0x6116, 0xA063, 0x610C, 0x9024, 0x611E, 0xA0F9, 0x510B, 0x611F, 0x610D, 0x902A,
641 0x6000, 0x7105, 0x6117, 0xA06F, 0x5111, 0x7007, 0x6113, 0x90D0, 0x6108, 0x8019, 0x611B, 0xA0BA,
642 0x510F, 0x7003, 0x6110, 0x9048, 0x6002, 0x800C, 0x6119, 0xA098, 0x5121, 0x7080, 0x6115, 0xA04B,
643 0x610A, 0x9016, 0x611D, 0xA0DE, 0x510B, 0x6122, 0x610E, 0x9039, 0x6001, 0x7123, 0x6118, 0xA086,
644 0x5111, 0x7009, 0x6114, 0x90FD, 0x6109, 0x80F0, 0x611C, 0xA0CD, 0x510F, 0x7005, 0x6112, 0x9081,
645 0x6107, 0x8010, 0x611A, 0xA0A8, 0x5121, 0x7102, 0x6116, 0xA05E, 0x610C, 0x9021, 0x611E, 0xA0F3,
646 0x510B, 0x611F, 0x610D, 0x9033, 0x6000, 0x7106, 0x6117, 0xA079, 0x5111, 0x7008, 0x6113, 0x90F2,
647 0x6108, 0x8040, 0x611B, 0xA0C3, 0x510F, 0x7004, 0x6110, 0x9059, 0x6002, 0x800E, 0x6119, 0xA0A0,
648 0x5121, 0x70FF, 0x6115, 0xA055, 0x610A, 0x901C, 0x611D, 0xA0E7, 0x510B, 0x6122, 0x610E, 0x9041,
649 0x6001, 0x7124, 0x6118, 0xA08F, 0x5111, 0x700A, 0x6114, 0xA036, 0x6109, 0x8120, 0x611C, 0xA0D6,
650 0x510F, 0x7006, 0x6112, 0x9090, 0x6107, 0x8013, 0x611A, 0xA0B1, 0x5121, 0x7103, 0x6116, 0xA067,
651 0x610C, 0x9026, 0x611E, 0xB0B2, 0x510B, 0x611F, 0x610D, 0x9027, 0x6000, 0x7105, 0x6117, 0xA068,
652 0x5111, 0x7007, 0x6113, 0x90C0, 0x6108, 0x8018, 0x611B, 0xA0B3, 0x510F, 0x7003, 0x6110, 0x9042,
653 0x6002, 0x800B, 0x6119, 0xA091, 0x5121, 0x7080, 0x6115, 0xA03A, 0x610A, 0x9012, 0x611D, 0xA0D7,
654 0x510B, 0x6122, 0x610E, 0x9035, 0x6001, 0x7123, 0x6118, 0xA07A, 0x5111, 0x7009, 0x6114, 0x90F4,
655 0x6109, 0x8060, 0x611C, 0xA0C4, 0x510F, 0x7005, 0x6112, 0x9070, 0x6107, 0x800F, 0x611A, 0xA0A1,
656 0x5121, 0x7102, 0x6116, 0xA056, 0x610C, 0x901D, 0x611E, 0xA0E8, 0x510B, 0x611F, 0x610D, 0x902C,
657 0x6000, 0x7106, 0x6117, 0xA071, 0x5111, 0x7008, 0x6113, 0x90E0, 0x6108, 0x8020, 0x611B, 0xA0BB,
658 0x510F, 0x7004, 0x6110, 0x9049, 0x6002, 0x800D, 0x6119, 0xA099, 0x5121, 0x70FF, 0x6115, 0xA04C,
659 0x610A, 0x9017, 0x611D, 0xA0DF, 0x510B, 0x6122, 0x610E, 0x903C, 0x6001, 0x7124, 0x6118, 0xA087,
660 0x5111, 0x700A, 0x6114, 0xA023, 0x6109, 0x80FE, 0x611C, 0xA0CE, 0x510F, 0x7006, 0x6112, 0x9082,
661 0x6107, 0x8011, 0x611A, 0xA0A9, 0x5121, 0x7103, 0x6116, 0xA05F, 0x610C, 0x9022, 0x611E, 0xA0F5,
662 0x510B, 0x611F, 0x610D, 0x9029, 0x6000, 0x7105, 0x6117, 0xA06C, 0x5111, 0x7007, 0x6113, 0x90CC,
663 0x6108, 0x8019, 0x611B, 0xA0B7, 0x510F, 0x7003, 0x6110, 0x9044, 0x6002, 0x800C, 0x6119, 0xA095,
664 0x5121, 0x7080, 0x6115, 0xA046, 0x610A, 0x9015, 0x611D, 0xA0DB, 0x510B, 0x6122, 0x610E, 0x9038,
665 0x6001, 0x7123, 0x6118, 0xA07E, 0x5111, 0x7009, 0x6114, 0x90FC, 0x6109, 0x80F0, 0x611C, 0xA0C9,
666 0x510F, 0x7005, 0x6112, 0x907F, 0x6107, 0x8010, 0x611A, 0xA0A5, 0x5121, 0x7102, 0x6116, 0xA05B,
667 0x610C, 0x901F, 0x611E, 0xA0EC, 0x510B, 0x611F, 0x610D, 0x9031, 0x6000, 0x7106, 0x6117, 0xA075,
668 0x5111, 0x7008, 0x6113, 0x90F1, 0x6108, 0x8040, 0x611B, 0xA0BF, 0x510F, 0x7004, 0x6110, 0x9051,
669 0x6002, 0x800E, 0x6119, 0xA09D, 0x5121, 0x70FF, 0x6115, 0xA052, 0x610A, 0x901B, 0x611D, 0xA0E4,
670 0x510B, 0x6122, 0x610E, 0x903F, 0x6001, 0x7124, 0x6118, 0xA08C, 0x5111, 0x700A, 0x6114, 0xA02F,
671 0x6109, 0x8120, 0x611C, 0xA0D3, 0x510F, 0x7006, 0x6112, 0x9088, 0x6107, 0x8013, 0x611A, 0xA0AE,
672 0x5121, 0x7103, 0x6116, 0xA064, 0x610C, 0x9025, 0x611E, 0xA0FA, 0x510B, 0x611F, 0x610D, 0x9028,
673 0x6000, 0x7105, 0x6117, 0xA06A, 0x5111, 0x7007, 0x6113, 0x90C6, 0x6108, 0x8018, 0x611B, 0xA0B5,
674 0x510F, 0x7003, 0x6110, 0x9043, 0x6002, 0x800B, 0x6119, 0xA093, 0x5121, 0x7080, 0x6115, 0xA03D,
675 0x610A, 0x9014, 0x611D, 0xA0D9, 0x510B, 0x6122, 0x610E, 0x9037, 0x6001, 0x7123, 0x6118, 0xA07C,
676 0x5111, 0x7009, 0x6114, 0x90F8, 0x6109, 0x8060, 0x611C, 0xA0C7, 0x510F, 0x7005, 0x6112, 0x9078,
677 0x6107, 0x800F, 0x611A, 0xA0A3, 0x5121, 0x7102, 0x6116, 0xA058, 0x610C, 0x901E, 0x611E, 0xA0EA,
678 0x510B, 0x611F, 0x610D, 0x9030, 0x6000, 0x7106, 0x6117, 0xA073, 0x5111, 0x7008, 0x6113, 0x90EE,
679 0x6108, 0x8020, 0x611B, 0xA0BD, 0x510F, 0x7004, 0x6110, 0x9050, 0x6002, 0x800D, 0x6119, 0xA09B,
680 0x5121, 0x70FF, 0x6115, 0xA04E, 0x610A, 0x901A, 0x611D, 0xA0E2, 0x510B, 0x6122, 0x610E, 0x903E,
681 0x6001, 0x7124, 0x6118, 0xA08A, 0x5111, 0x700A, 0x6114, 0xA02D, 0x6109, 0x80FE, 0x611C, 0xA0D1,
682 0x510F, 0x7006, 0x6112, 0x9084, 0x6107, 0x8011, 0x611A, 0xA0AC, 0x5121, 0x7103, 0x6116, 0xA062,
683 0x610C, 0x9024, 0x611E, 0xA0F7, 0x510B, 0x611F, 0x610D, 0x902A, 0x6000, 0x7105, 0x6117, 0xA06E,
684 0x5111, 0x7007, 0x6113, 0x90D0, 0x6108, 0x8019, 0x611B, 0xA0B9, 0x510F, 0x7003, 0x6110, 0x9048,
685 0x6002, 0x800C, 0x6119, 0xA097, 0x5121, 0x7080, 0x6115, 0xA04A, 0x610A, 0x9016, 0x611D, 0xA0DD,
686 0x510B, 0x6122, 0x610E, 0x9039, 0x6001, 0x7123, 0x6118, 0xA085, 0x5111, 0x7009, 0x6114, 0x90FD,
687 0x6109, 0x80F0, 0x611C, 0xA0CB, 0x510F, 0x7005, 0x6112, 0x9081, 0x6107, 0x8010, 0x611A, 0xA0A7,
688 0x5121, 0x7102, 0x6116, 0xA05D, 0x610C, 0x9021, 0x611E, 0xA0EF, 0x510B, 0x611F, 0x610D, 0x9033,
689 0x6000, 0x7106, 0x6117, 0xA077, 0x5111, 0x7008, 0x6113, 0x90F2, 0x6108, 0x8040, 0x611B, 0xA0C2,
690 0x510F, 0x7004, 0x6110, 0x9059, 0x6002, 0x800E, 0x6119, 0xA09F, 0x5121, 0x70FF, 0x6115, 0xA054,
691 0x610A, 0x901C, 0x611D, 0xA0E6, 0x510B, 0x6122, 0x610E, 0x9041, 0x6001, 0x7124, 0x6118, 0xA08E,
692 0x5111, 0x700A, 0x6114, 0xA034, 0x6109, 0x8120, 0x611C, 0xA0D5, 0x510F, 0x7006, 0x6112, 0x9090,
693 0x6107, 0x8013, 0x611A, 0xA0B0, 0x5121, 0x7103, 0x6116, 0xA066, 0x610C, 0x9026, 0x611E, 0xA104,
694 0x510B, 0x611F, 0x610D, 0x9027, 0x6000, 0x7105, 0x6117, 0xA069, 0x5111, 0x7007, 0x6113, 0x90C0,
695 0x6108, 0x8018, 0x611B, 0xA0B4, 0x510F, 0x7003, 0x6110, 0x9042, 0x6002, 0x800B, 0x6119, 0xA092,
696 0x5121, 0x7080, 0x6115, 0xA03B, 0x610A, 0x9012, 0x611D, 0xA0D8, 0x510B, 0x6122, 0x610E, 0x9035,
697 0x6001, 0x7123, 0x6118, 0xA07B, 0x5111, 0x7009, 0x6114, 0x90F4, 0x6109, 0x8060, 0x611C, 0xA0C5,
698 0x510F, 0x7005, 0x6112, 0x9070, 0x6107, 0x800F, 0x611A, 0xA0A2, 0x5121, 0x7102, 0x6116, 0xA057,
699 0x610C, 0x901D, 0x611E, 0xA0E9, 0x510B, 0x611F, 0x610D, 0x902C, 0x6000, 0x7106, 0x6117, 0xA072,
700 0x5111, 0x7008, 0x6113, 0x90E0, 0x6108, 0x8020, 0x611B, 0xA0BC, 0x510F, 0x7004, 0x6110, 0x9049,
701 0x6002, 0x800D, 0x6119, 0xA09A, 0x5121, 0x70FF, 0x6115, 0xA04D, 0x610A, 0x9017, 0x611D, 0xA0E1,
702 0x510B, 0x6122, 0x610E, 0x903C, 0x6001, 0x7124, 0x6118, 0xA089, 0x5111, 0x700A, 0x6114, 0xA02B,
703 0x6109, 0x80FE, 0x611C, 0xA0CF, 0x510F, 0x7006, 0x6112, 0x9082, 0x6107, 0x8011, 0x611A, 0xA0AA,
704 0x5121, 0x7103, 0x6116, 0xA061, 0x610C, 0x9022, 0x611E, 0xA0F6, 0x510B, 0x611F, 0x610D, 0x9029,
705 0x6000, 0x7105, 0x6117, 0xA06D, 0x5111, 0x7007, 0x6113, 0x90CC, 0x6108, 0x8019, 0x611B, 0xA0B8,
706 0x510F, 0x7003, 0x6110, 0x9044, 0x6002, 0x800C, 0x6119, 0xA096, 0x5121, 0x7080, 0x6115, 0xA047,
707 0x610A, 0x9015, 0x611D, 0xA0DC, 0x510B, 0x6122, 0x610E, 0x9038, 0x6001, 0x7123, 0x6118, 0xA083,
708 0x5111, 0x7009, 0x6114, 0x90FC, 0x6109, 0x80F0, 0x611C, 0xA0CA, 0x510F, 0x7005, 0x6112, 0x907F,
709 0x6107, 0x8010, 0x611A, 0xA0A6, 0x5121, 0x7102, 0x6116, 0xA05C, 0x610C, 0x901F, 0x611E, 0xA0ED,
710 0x510B, 0x611F, 0x610D, 0x9031, 0x6000, 0x7106, 0x6117, 0xA076, 0x5111, 0x7008, 0x6113, 0x90F1,
711 0x6108, 0x8040, 0x611B, 0xA0C1, 0x510F, 0x7004, 0x6110, 0x9051, 0x6002, 0x800E, 0x6119, 0xA09E,
712 0x5121, 0x70FF, 0x6115, 0xA053, 0x610A, 0x901B, 0x611D, 0xA0E5, 0x510B, 0x6122, 0x610E, 0x903F,
713 0x6001, 0x7124, 0x6118, 0xA08D, 0x5111, 0x700A, 0x6114, 0xA032, 0x6109, 0x8120, 0x611C, 0xA0D4,
714 0x510F, 0x7006, 0x6112, 0x9088, 0x6107, 0x8013, 0x611A, 0xA0AF, 0x5121, 0x7103, 0x6116, 0xA065,
715 0x610C, 0x9025, 0x611E, 0xA0FB, 0x510B, 0x611F, 0x610D, 0x9028, 0x6000, 0x7105, 0x6117, 0xA06B,
716 0x5111, 0x7007, 0x6113, 0x90C6, 0x6108, 0x8018, 0x611B, 0xA0B6, 0x510F, 0x7003, 0x6110, 0x9043,
717 0x6002, 0x800B, 0x6119, 0xA094, 0x5121, 0x7080, 0x6115, 0xA045, 0x610A, 0x9014, 0x611D, 0xA0DA,
718 0x510B, 0x6122, 0x610E, 0x9037, 0x6001, 0x7123, 0x6118, 0xA07D, 0x5111, 0x7009, 0x6114, 0x90F8,
719 0x6109, 0x8060, 0x611C, 0xA0C8, 0x510F, 0x7005, 0x6112, 0x9078, 0x6107, 0x800F, 0x611A, 0xA0A4,
720 0x5121, 0x7102, 0x6116, 0xA05A, 0x610C, 0x901E, 0x611E, 0xA0EB, 0x510B, 0x611F, 0x610D, 0x9030,
721 0x6000, 0x7106, 0x6117, 0xA074, 0x5111, 0x7008, 0x6113, 0x90EE, 0x6108, 0x8020, 0x611B, 0xA0BE,
722 0x510F, 0x7004, 0x6110, 0x9050, 0x6002, 0x800D, 0x6119, 0xA09C, 0x5121, 0x70FF, 0x6115, 0xA04F,
723 0x610A, 0x901A, 0x611D, 0xA0E3, 0x510B, 0x6122, 0x610E, 0x903E, 0x6001, 0x7124, 0x6118, 0xA08B,
724 0x5111, 0x700A, 0x6114, 0xA02E, 0x6109, 0x80FE, 0x611C, 0xA0D2, 0x510F, 0x7006, 0x6112, 0x9084,
725 0x6107, 0x8011, 0x611A, 0xA0AD, 0x5121, 0x7103, 0x6116, 0xA063, 0x610C, 0x9024, 0x611E, 0xA0F9,
726 0x510B, 0x611F, 0x610D, 0x902A, 0x6000, 0x7105, 0x6117, 0xA06F, 0x5111, 0x7007, 0x6113, 0x90D0,
727 0x6108, 0x8019, 0x611B, 0xA0BA, 0x510F, 0x7003, 0x6110, 0x9048, 0x6002, 0x800C, 0x6119, 0xA098,
728 0x5121, 0x7080, 0x6115, 0xA04B, 0x610A, 0x9016, 0x611D, 0xA0DE, 0x510B, 0x6122, 0x610E, 0x9039,
729 0x6001, 0x7123, 0x6118, 0xA086, 0x5111, 0x7009, 0x6114, 0x90FD, 0x6109, 0x80F0, 0x611C, 0xA0CD,
730 0x510F, 0x7005, 0x6112, 0x9081, 0x6107, 0x8010, 0x611A, 0xA0A8, 0x5121, 0x7102, 0x6116, 0xA05E,
731 0x610C, 0x9021, 0x611E, 0xA0F3, 0x510B, 0x611F, 0x610D, 0x9033, 0x6000, 0x7106, 0x6117, 0xA079,
732 0x5111, 0x7008, 0x6113, 0x90F2, 0x6108, 0x8040, 0x611B, 0xA0C3, 0x510F, 0x7004, 0x6110, 0x9059,
733 0x6002, 0x800E, 0x6119, 0xA0A0, 0x5121, 0x70FF, 0x6115, 0xA055, 0x610A, 0x901C, 0x611D, 0xA0E7,
734 0x510B, 0x6122, 0x610E, 0x9041, 0x6001, 0x7124, 0x6118, 0xA08F, 0x5111, 0x700A, 0x6114, 0xA036,
735 0x6109, 0x8120, 0x611C, 0xA0D6, 0x510F, 0x7006, 0x6112, 0x9090, 0x6107, 0x8013, 0x611A, 0xA0B1,
736 0x5121, 0x7103, 0x6116, 0xA067, 0x610C, 0x9026, 0x611E, 0xD125
737};
738
739static const UINT16 HuffTableLOM[512] = {
740 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x500A, 0x2001, 0x4003, 0x3002, 0x5007,
741 0x2001, 0x4006, 0x3004, 0x700D, 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x600B,
742 0x2001, 0x4003, 0x3002, 0x5009, 0x2001, 0x4006, 0x3004, 0x8012, 0x2001, 0x4000, 0x3002, 0x4008,
743 0x2001, 0x4005, 0x3004, 0x500A, 0x2001, 0x4003, 0x3002, 0x5007, 0x2001, 0x4006, 0x3004, 0x7010,
744 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x600C, 0x2001, 0x4003, 0x3002, 0x5009,
745 0x2001, 0x4006, 0x3004, 0x9018, 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x500A,
746 0x2001, 0x4003, 0x3002, 0x5007, 0x2001, 0x4006, 0x3004, 0x700E, 0x2001, 0x4000, 0x3002, 0x4008,
747 0x2001, 0x4005, 0x3004, 0x600B, 0x2001, 0x4003, 0x3002, 0x5009, 0x2001, 0x4006, 0x3004, 0x9013,
748 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x500A, 0x2001, 0x4003, 0x3002, 0x5007,
749 0x2001, 0x4006, 0x3004, 0x800F, 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x600C,
750 0x2001, 0x4003, 0x3002, 0x5009, 0x2001, 0x4006, 0x3004, 0x901C, 0x2001, 0x4000, 0x3002, 0x4008,
751 0x2001, 0x4005, 0x3004, 0x500A, 0x2001, 0x4003, 0x3002, 0x5007, 0x2001, 0x4006, 0x3004, 0x700D,
752 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x600B, 0x2001, 0x4003, 0x3002, 0x5009,
753 0x2001, 0x4006, 0x3004, 0x8015, 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x500A,
754 0x2001, 0x4003, 0x3002, 0x5007, 0x2001, 0x4006, 0x3004, 0x7010, 0x2001, 0x4000, 0x3002, 0x4008,
755 0x2001, 0x4005, 0x3004, 0x600C, 0x2001, 0x4003, 0x3002, 0x5009, 0x2001, 0x4006, 0x3004, 0x901A,
756 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x500A, 0x2001, 0x4003, 0x3002, 0x5007,
757 0x2001, 0x4006, 0x3004, 0x700E, 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x600B,
758 0x2001, 0x4003, 0x3002, 0x5009, 0x2001, 0x4006, 0x3004, 0x9016, 0x2001, 0x4000, 0x3002, 0x4008,
759 0x2001, 0x4005, 0x3004, 0x500A, 0x2001, 0x4003, 0x3002, 0x5007, 0x2001, 0x4006, 0x3004, 0x8011,
760 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x600C, 0x2001, 0x4003, 0x3002, 0x5009,
761 0x2001, 0x4006, 0x3004, 0x901E, 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x500A,
762 0x2001, 0x4003, 0x3002, 0x5007, 0x2001, 0x4006, 0x3004, 0x700D, 0x2001, 0x4000, 0x3002, 0x4008,
763 0x2001, 0x4005, 0x3004, 0x600B, 0x2001, 0x4003, 0x3002, 0x5009, 0x2001, 0x4006, 0x3004, 0x8012,
764 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x500A, 0x2001, 0x4003, 0x3002, 0x5007,
765 0x2001, 0x4006, 0x3004, 0x7010, 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x600C,
766 0x2001, 0x4003, 0x3002, 0x5009, 0x2001, 0x4006, 0x3004, 0x9019, 0x2001, 0x4000, 0x3002, 0x4008,
767 0x2001, 0x4005, 0x3004, 0x500A, 0x2001, 0x4003, 0x3002, 0x5007, 0x2001, 0x4006, 0x3004, 0x700E,
768 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x600B, 0x2001, 0x4003, 0x3002, 0x5009,
769 0x2001, 0x4006, 0x3004, 0x9014, 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x500A,
770 0x2001, 0x4003, 0x3002, 0x5007, 0x2001, 0x4006, 0x3004, 0x800F, 0x2001, 0x4000, 0x3002, 0x4008,
771 0x2001, 0x4005, 0x3004, 0x600C, 0x2001, 0x4003, 0x3002, 0x5009, 0x2001, 0x4006, 0x3004, 0x901D,
772 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x500A, 0x2001, 0x4003, 0x3002, 0x5007,
773 0x2001, 0x4006, 0x3004, 0x700D, 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x600B,
774 0x2001, 0x4003, 0x3002, 0x5009, 0x2001, 0x4006, 0x3004, 0x8015, 0x2001, 0x4000, 0x3002, 0x4008,
775 0x2001, 0x4005, 0x3004, 0x500A, 0x2001, 0x4003, 0x3002, 0x5007, 0x2001, 0x4006, 0x3004, 0x7010,
776 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x600C, 0x2001, 0x4003, 0x3002, 0x5009,
777 0x2001, 0x4006, 0x3004, 0x901B, 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x500A,
778 0x2001, 0x4003, 0x3002, 0x5007, 0x2001, 0x4006, 0x3004, 0x700E, 0x2001, 0x4000, 0x3002, 0x4008,
779 0x2001, 0x4005, 0x3004, 0x600B, 0x2001, 0x4003, 0x3002, 0x5009, 0x2001, 0x4006, 0x3004, 0x9017,
780 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x500A, 0x2001, 0x4003, 0x3002, 0x5007,
781 0x2001, 0x4006, 0x3004, 0x8011, 0x2001, 0x4000, 0x3002, 0x4008, 0x2001, 0x4005, 0x3004, 0x600C,
782 0x2001, 0x4003, 0x3002, 0x5009, 0x2001, 0x4006, 0x3004, 0x901F
783};
784
785static const BYTE HuffTableMask[39] = {
786 0x11, /* 0 */
787 0x9E, /* 1 */
788 0xA1, /* 2 */
789 0x00, /* 3 */
790 0x00, /* 4 */
791 0x01, /* 5 */
792 0x00, /* 6 */
793 0x03, /* 7 */
794 0x00, /* 8 */
795 0x07, /* 9 */
796 0x00, /* 10 */
797 0x0F, /* 11 */
798 0x00, /* 12 */
799 0x1F, /* 13 */
800 0x00, /* 14 */
801 0x3F, /* 15 */
802 0x00, /* 16 */
803 0x7F, /* 17 */
804 0x00, /* 18 */
805 0xFF, /* 19 */
806 0x00, /* 20 */
807 0xFF, /* 21 */
808 0x01, /* 22 */
809 0xFF, /* 23 */
810 0x03, /* 24 */
811 0xFF, /* 25 */
812 0x07, /* 26 */
813 0xFF, /* 27 */
814 0x0F, /* 28 */
815 0xFF, /* 29 */
816 0x1F, /* 30 */
817 0xFF, /* 31 */
818 0x3F, /* 32 */
819 0xFF, /* 33 */
820 0x7F, /* 34 */
821 0xFF, /* 35 */
822 0xFF, /* 36 */
823 0x00, /* 37 */
824 0x00 /* 38 */
825};
826
827static const BYTE HuffLengthLEC[294] = {
828 6, /* 0 */
829 6, /* 1 */
830 6, /* 2 */
831 7, /* 3 */
832 7, /* 4 */
833 7, /* 5 */
834 7, /* 6 */
835 7, /* 7 */
836 7, /* 8 */
837 7, /* 9 */
838 7, /* 10 */
839 8, /* 11 */
840 8, /* 12 */
841 8, /* 13 */
842 8, /* 14 */
843 8, /* 15 */
844 8, /* 16 */
845 8, /* 17 */
846 9, /* 18 */
847 8, /* 19 */
848 9, /* 20 */
849 9, /* 21 */
850 9, /* 22 */
851 9, /* 23 */
852 8, /* 24 */
853 8, /* 25 */
854 9, /* 26 */
855 9, /* 27 */
856 9, /* 28 */
857 9, /* 29 */
858 9, /* 30 */
859 9, /* 31 */
860 8, /* 32 */
861 9, /* 33 */
862 9, /* 34 */
863 10, /* 35 */
864 9, /* 36 */
865 9, /* 37 */
866 9, /* 38 */
867 9, /* 39 */
868 9, /* 40 */
869 9, /* 41 */
870 9, /* 42 */
871 10, /* 43 */
872 9, /* 44 */
873 10, /* 45 */
874 10, /* 46 */
875 10, /* 47 */
876 9, /* 48 */
877 9, /* 49 */
878 10, /* 50 */
879 9, /* 51 */
880 10, /* 52 */
881 9, /* 53 */
882 10, /* 54 */
883 9, /* 55 */
884 9, /* 56 */
885 9, /* 57 */
886 10, /* 58 */
887 10, /* 59 */
888 9, /* 60 */
889 10, /* 61 */
890 9, /* 62 */
891 9, /* 63 */
892 8, /* 64 */
893 9, /* 65 */
894 9, /* 66 */
895 9, /* 67 */
896 9, /* 68 */
897 10, /* 69 */
898 10, /* 70 */
899 10, /* 71 */
900 9, /* 72 */
901 9, /* 73 */
902 10, /* 74 */
903 10, /* 75 */
904 10, /* 76 */
905 10, /* 77 */
906 10, /* 78 */
907 10, /* 79 */
908 9, /* 80 */
909 9, /* 81 */
910 10, /* 82 */
911 10, /* 83 */
912 10, /* 84 */
913 10, /* 85 */
914 10, /* 86 */
915 10, /* 87 */
916 10, /* 88 */
917 9, /* 89 */
918 10, /* 90 */
919 10, /* 91 */
920 10, /* 92 */
921 10, /* 93 */
922 10, /* 94 */
923 10, /* 95 */
924 8, /* 96 */
925 10, /* 97 */
926 10, /* 98 */
927 10, /* 99 */
928 10, /* 100 */
929 10, /* 101 */
930 10, /* 102 */
931 10, /* 103 */
932 10, /* 104 */
933 10, /* 105 */
934 10, /* 106 */
935 10, /* 107 */
936 10, /* 108 */
937 10, /* 109 */
938 10, /* 110 */
939 10, /* 111 */
940 9, /* 112 */
941 10, /* 113 */
942 10, /* 114 */
943 10, /* 115 */
944 10, /* 116 */
945 10, /* 117 */
946 10, /* 118 */
947 10, /* 119 */
948 9, /* 120 */
949 10, /* 121 */
950 10, /* 122 */
951 10, /* 123 */
952 10, /* 124 */
953 10, /* 125 */
954 10, /* 126 */
955 9, /* 127 */
956 7, /* 128 */
957 9, /* 129 */
958 9, /* 130 */
959 10, /* 131 */
960 9, /* 132 */
961 10, /* 133 */
962 10, /* 134 */
963 10, /* 135 */
964 9, /* 136 */
965 10, /* 137 */
966 10, /* 138 */
967 10, /* 139 */
968 10, /* 140 */
969 10, /* 141 */
970 10, /* 142 */
971 10, /* 143 */
972 9, /* 144 */
973 10, /* 145 */
974 10, /* 146 */
975 10, /* 147 */
976 10, /* 148 */
977 10, /* 149 */
978 10, /* 150 */
979 10, /* 151 */
980 10, /* 152 */
981 10, /* 153 */
982 10, /* 154 */
983 10, /* 155 */
984 10, /* 156 */
985 10, /* 157 */
986 10, /* 158 */
987 10, /* 159 */
988 10, /* 160 */
989 10, /* 161 */
990 10, /* 162 */
991 10, /* 163 */
992 10, /* 164 */
993 10, /* 165 */
994 10, /* 166 */
995 10, /* 167 */
996 10, /* 168 */
997 10, /* 169 */
998 10, /* 170 */
999 13, /* 171 */
1000 10, /* 172 */
1001 10, /* 173 */
1002 10, /* 174 */
1003 10, /* 175 */
1004 10, /* 176 */
1005 10, /* 177 */
1006 11, /* 178 */
1007 10, /* 179 */
1008 10, /* 180 */
1009 10, /* 181 */
1010 10, /* 182 */
1011 10, /* 183 */
1012 10, /* 184 */
1013 10, /* 185 */
1014 10, /* 186 */
1015 10, /* 187 */
1016 10, /* 188 */
1017 10, /* 189 */
1018 10, /* 190 */
1019 10, /* 191 */
1020 9, /* 192 */
1021 10, /* 193 */
1022 10, /* 194 */
1023 10, /* 195 */
1024 10, /* 196 */
1025 10, /* 197 */
1026 9, /* 198 */
1027 10, /* 199 */
1028 10, /* 200 */
1029 10, /* 201 */
1030 10, /* 202 */
1031 10, /* 203 */
1032 9, /* 204 */
1033 10, /* 205 */
1034 10, /* 206 */
1035 10, /* 207 */
1036 9, /* 208 */
1037 10, /* 209 */
1038 10, /* 210 */
1039 10, /* 211 */
1040 10, /* 212 */
1041 10, /* 213 */
1042 10, /* 214 */
1043 10, /* 215 */
1044 10, /* 216 */
1045 10, /* 217 */
1046 10, /* 218 */
1047 10, /* 219 */
1048 10, /* 220 */
1049 10, /* 221 */
1050 10, /* 222 */
1051 10, /* 223 */
1052 9, /* 224 */
1053 10, /* 225 */
1054 10, /* 226 */
1055 10, /* 227 */
1056 10, /* 228 */
1057 10, /* 229 */
1058 10, /* 230 */
1059 10, /* 231 */
1060 10, /* 232 */
1061 10, /* 233 */
1062 10, /* 234 */
1063 10, /* 235 */
1064 10, /* 236 */
1065 10, /* 237 */
1066 9, /* 238 */
1067 10, /* 239 */
1068 8, /* 240 */
1069 9, /* 241 */
1070 9, /* 242 */
1071 10, /* 243 */
1072 9, /* 244 */
1073 10, /* 245 */
1074 10, /* 246 */
1075 10, /* 247 */
1076 9, /* 248 */
1077 10, /* 249 */
1078 10, /* 250 */
1079 10, /* 251 */
1080 9, /* 252 */
1081 9, /* 253 */
1082 8, /* 254 */
1083 7, /* 255 */
1084 13, /* 256 */
1085 13, /* 257 */
1086 7, /* 258 */
1087 7, /* 259 */
1088 10, /* 260 */
1089 7, /* 261 */
1090 7, /* 262 */
1091 6, /* 263 */
1092 6, /* 264 */
1093 6, /* 265 */
1094 6, /* 266 */
1095 5, /* 267 */
1096 6, /* 268 */
1097 6, /* 269 */
1098 6, /* 270 */
1099 5, /* 271 */
1100 6, /* 272 */
1101 5, /* 273 */
1102 6, /* 274 */
1103 6, /* 275 */
1104 6, /* 276 */
1105 6, /* 277 */
1106 6, /* 278 */
1107 6, /* 279 */
1108 6, /* 280 */
1109 6, /* 281 */
1110 6, /* 282 */
1111 6, /* 283 */
1112 6, /* 284 */
1113 6, /* 285 */
1114 6, /* 286 */
1115 6, /* 287 */
1116 8, /* 288 */
1117 5, /* 289 */
1118 6, /* 290 */
1119 7, /* 291 */
1120 7, /* 292 */
1121 13 /* 293 */
1122};
1123
1124static const BYTE HuffCodeLEC[588] = {
1125 0x04, /* 0 */
1126 0x00, /* 1 */
1127 0x24, /* 2 */
1128 0x00, /* 3 */
1129 0x14, /* 4 */
1130 0x00, /* 5 */
1131 0x11, /* 6 */
1132 0x00, /* 7 */
1133 0x51, /* 8 */
1134 0x00, /* 9 */
1135 0x31, /* 10 */
1136 0x00, /* 11 */
1137 0x71, /* 12 */
1138 0x00, /* 13 */
1139 0x09, /* 14 */
1140 0x00, /* 15 */
1141 0x49, /* 16 */
1142 0x00, /* 17 */
1143 0x29, /* 18 */
1144 0x00, /* 19 */
1145 0x69, /* 20 */
1146 0x00, /* 21 */
1147 0x15, /* 22 */
1148 0x00, /* 23 */
1149 0x95, /* 24 */
1150 0x00, /* 25 */
1151 0x55, /* 26 */
1152 0x00, /* 27 */
1153 0xD5, /* 28 */
1154 0x00, /* 29 */
1155 0x35, /* 30 */
1156 0x00, /* 31 */
1157 0xB5, /* 32 */
1158 0x00, /* 33 */
1159 0x75, /* 34 */
1160 0x00, /* 35 */
1161 0x1D, /* 36 */
1162 0x00, /* 37 */
1163 0xF5, /* 38 */
1164 0x00, /* 39 */
1165 0x1D, /* 40 */
1166 0x01, /* 41 */
1167 0x9D, /* 42 */
1168 0x00, /* 43 */
1169 0x9D, /* 44 */
1170 0x01, /* 45 */
1171 0x5D, /* 46 */
1172 0x00, /* 47 */
1173 0x0D, /* 48 */
1174 0x00, /* 49 */
1175 0x8D, /* 50 */
1176 0x00, /* 51 */
1177 0x5D, /* 52 */
1178 0x01, /* 53 */
1179 0xDD, /* 54 */
1180 0x00, /* 55 */
1181 0xDD, /* 56 */
1182 0x01, /* 57 */
1183 0x3D, /* 58 */
1184 0x00, /* 59 */
1185 0x3D, /* 60 */
1186 0x01, /* 61 */
1187 0xBD, /* 62 */
1188 0x00, /* 63 */
1189 0x4D, /* 64 */
1190 0x00, /* 65 */
1191 0xBD, /* 66 */
1192 0x01, /* 67 */
1193 0x7D, /* 68 */
1194 0x00, /* 69 */
1195 0x6B, /* 70 */
1196 0x00, /* 71 */
1197 0x7D, /* 72 */
1198 0x01, /* 73 */
1199 0xFD, /* 74 */
1200 0x00, /* 75 */
1201 0xFD, /* 76 */
1202 0x01, /* 77 */
1203 0x03, /* 78 */
1204 0x00, /* 79 */
1205 0x03, /* 80 */
1206 0x01, /* 81 */
1207 0x83, /* 82 */
1208 0x00, /* 83 */
1209 0x83, /* 84 */
1210 0x01, /* 85 */
1211 0x6B, /* 86 */
1212 0x02, /* 87 */
1213 0x43, /* 88 */
1214 0x00, /* 89 */
1215 0x6B, /* 90 */
1216 0x01, /* 91 */
1217 0x6B, /* 92 */
1218 0x03, /* 93 */
1219 0xEB, /* 94 */
1220 0x00, /* 95 */
1221 0x43, /* 96 */
1222 0x01, /* 97 */
1223 0xC3, /* 98 */
1224 0x00, /* 99 */
1225 0xEB, /* 100 */
1226 0x02, /* 101 */
1227 0xC3, /* 102 */
1228 0x01, /* 103 */
1229 0xEB, /* 104 */
1230 0x01, /* 105 */
1231 0x23, /* 106 */
1232 0x00, /* 107 */
1233 0xEB, /* 108 */
1234 0x03, /* 109 */
1235 0x23, /* 110 */
1236 0x01, /* 111 */
1237 0xA3, /* 112 */
1238 0x00, /* 113 */
1239 0xA3, /* 114 */
1240 0x01, /* 115 */
1241 0x1B, /* 116 */
1242 0x00, /* 117 */
1243 0x1B, /* 118 */
1244 0x02, /* 119 */
1245 0x63, /* 120 */
1246 0x00, /* 121 */
1247 0x1B, /* 122 */
1248 0x01, /* 123 */
1249 0x63, /* 124 */
1250 0x01, /* 125 */
1251 0xE3, /* 126 */
1252 0x00, /* 127 */
1253 0xCD, /* 128 */
1254 0x00, /* 129 */
1255 0xE3, /* 130 */
1256 0x01, /* 131 */
1257 0x13, /* 132 */
1258 0x00, /* 133 */
1259 0x13, /* 134 */
1260 0x01, /* 135 */
1261 0x93, /* 136 */
1262 0x00, /* 137 */
1263 0x1B, /* 138 */
1264 0x03, /* 139 */
1265 0x9B, /* 140 */
1266 0x00, /* 141 */
1267 0x9B, /* 142 */
1268 0x02, /* 143 */
1269 0x93, /* 144 */
1270 0x01, /* 145 */
1271 0x53, /* 146 */
1272 0x00, /* 147 */
1273 0x9B, /* 148 */
1274 0x01, /* 149 */
1275 0x9B, /* 150 */
1276 0x03, /* 151 */
1277 0x5B, /* 152 */
1278 0x00, /* 153 */
1279 0x5B, /* 154 */
1280 0x02, /* 155 */
1281 0x5B, /* 156 */
1282 0x01, /* 157 */
1283 0x5B, /* 158 */
1284 0x03, /* 159 */
1285 0x53, /* 160 */
1286 0x01, /* 161 */
1287 0xD3, /* 162 */
1288 0x00, /* 163 */
1289 0xDB, /* 164 */
1290 0x00, /* 165 */
1291 0xDB, /* 166 */
1292 0x02, /* 167 */
1293 0xDB, /* 168 */
1294 0x01, /* 169 */
1295 0xDB, /* 170 */
1296 0x03, /* 171 */
1297 0x3B, /* 172 */
1298 0x00, /* 173 */
1299 0x3B, /* 174 */
1300 0x02, /* 175 */
1301 0x3B, /* 176 */
1302 0x01, /* 177 */
1303 0xD3, /* 178 */
1304 0x01, /* 179 */
1305 0x3B, /* 180 */
1306 0x03, /* 181 */
1307 0xBB, /* 182 */
1308 0x00, /* 183 */
1309 0xBB, /* 184 */
1310 0x02, /* 185 */
1311 0xBB, /* 186 */
1312 0x01, /* 187 */
1313 0xBB, /* 188 */
1314 0x03, /* 189 */
1315 0x7B, /* 190 */
1316 0x00, /* 191 */
1317 0x2D, /* 192 */
1318 0x00, /* 193 */
1319 0x7B, /* 194 */
1320 0x02, /* 195 */
1321 0x7B, /* 196 */
1322 0x01, /* 197 */
1323 0x7B, /* 198 */
1324 0x03, /* 199 */
1325 0xFB, /* 200 */
1326 0x00, /* 201 */
1327 0xFB, /* 202 */
1328 0x02, /* 203 */
1329 0xFB, /* 204 */
1330 0x01, /* 205 */
1331 0xFB, /* 206 */
1332 0x03, /* 207 */
1333 0x07, /* 208 */
1334 0x00, /* 209 */
1335 0x07, /* 210 */
1336 0x02, /* 211 */
1337 0x07, /* 212 */
1338 0x01, /* 213 */
1339 0x07, /* 214 */
1340 0x03, /* 215 */
1341 0x87, /* 216 */
1342 0x00, /* 217 */
1343 0x87, /* 218 */
1344 0x02, /* 219 */
1345 0x87, /* 220 */
1346 0x01, /* 221 */
1347 0x87, /* 222 */
1348 0x03, /* 223 */
1349 0x33, /* 224 */
1350 0x00, /* 225 */
1351 0x47, /* 226 */
1352 0x00, /* 227 */
1353 0x47, /* 228 */
1354 0x02, /* 229 */
1355 0x47, /* 230 */
1356 0x01, /* 231 */
1357 0x47, /* 232 */
1358 0x03, /* 233 */
1359 0xC7, /* 234 */
1360 0x00, /* 235 */
1361 0xC7, /* 236 */
1362 0x02, /* 237 */
1363 0xC7, /* 238 */
1364 0x01, /* 239 */
1365 0x33, /* 240 */
1366 0x01, /* 241 */
1367 0xC7, /* 242 */
1368 0x03, /* 243 */
1369 0x27, /* 244 */
1370 0x00, /* 245 */
1371 0x27, /* 246 */
1372 0x02, /* 247 */
1373 0x27, /* 248 */
1374 0x01, /* 249 */
1375 0x27, /* 250 */
1376 0x03, /* 251 */
1377 0xA7, /* 252 */
1378 0x00, /* 253 */
1379 0xB3, /* 254 */
1380 0x00, /* 255 */
1381 0x19, /* 256 */
1382 0x00, /* 257 */
1383 0xB3, /* 258 */
1384 0x01, /* 259 */
1385 0x73, /* 260 */
1386 0x00, /* 261 */
1387 0xA7, /* 262 */
1388 0x02, /* 263 */
1389 0x73, /* 264 */
1390 0x01, /* 265 */
1391 0xA7, /* 266 */
1392 0x01, /* 267 */
1393 0xA7, /* 268 */
1394 0x03, /* 269 */
1395 0x67, /* 270 */
1396 0x00, /* 271 */
1397 0xF3, /* 272 */
1398 0x00, /* 273 */
1399 0x67, /* 274 */
1400 0x02, /* 275 */
1401 0x67, /* 276 */
1402 0x01, /* 277 */
1403 0x67, /* 278 */
1404 0x03, /* 279 */
1405 0xE7, /* 280 */
1406 0x00, /* 281 */
1407 0xE7, /* 282 */
1408 0x02, /* 283 */
1409 0xE7, /* 284 */
1410 0x01, /* 285 */
1411 0xE7, /* 286 */
1412 0x03, /* 287 */
1413 0xF3, /* 288 */
1414 0x01, /* 289 */
1415 0x17, /* 290 */
1416 0x00, /* 291 */
1417 0x17, /* 292 */
1418 0x02, /* 293 */
1419 0x17, /* 294 */
1420 0x01, /* 295 */
1421 0x17, /* 296 */
1422 0x03, /* 297 */
1423 0x97, /* 298 */
1424 0x00, /* 299 */
1425 0x97, /* 300 */
1426 0x02, /* 301 */
1427 0x97, /* 302 */
1428 0x01, /* 303 */
1429 0x97, /* 304 */
1430 0x03, /* 305 */
1431 0x57, /* 306 */
1432 0x00, /* 307 */
1433 0x57, /* 308 */
1434 0x02, /* 309 */
1435 0x57, /* 310 */
1436 0x01, /* 311 */
1437 0x57, /* 312 */
1438 0x03, /* 313 */
1439 0xD7, /* 314 */
1440 0x00, /* 315 */
1441 0xD7, /* 316 */
1442 0x02, /* 317 */
1443 0xD7, /* 318 */
1444 0x01, /* 319 */
1445 0xD7, /* 320 */
1446 0x03, /* 321 */
1447 0x37, /* 322 */
1448 0x00, /* 323 */
1449 0x37, /* 324 */
1450 0x02, /* 325 */
1451 0x37, /* 326 */
1452 0x01, /* 327 */
1453 0x37, /* 328 */
1454 0x03, /* 329 */
1455 0xB7, /* 330 */
1456 0x00, /* 331 */
1457 0xB7, /* 332 */
1458 0x02, /* 333 */
1459 0xB7, /* 334 */
1460 0x01, /* 335 */
1461 0xB7, /* 336 */
1462 0x03, /* 337 */
1463 0x77, /* 338 */
1464 0x00, /* 339 */
1465 0x77, /* 340 */
1466 0x02, /* 341 */
1467 0xFF, /* 342 */
1468 0x07, /* 343 */
1469 0x77, /* 344 */
1470 0x01, /* 345 */
1471 0x77, /* 346 */
1472 0x03, /* 347 */
1473 0xF7, /* 348 */
1474 0x00, /* 349 */
1475 0xF7, /* 350 */
1476 0x02, /* 351 */
1477 0xF7, /* 352 */
1478 0x01, /* 353 */
1479 0xF7, /* 354 */
1480 0x03, /* 355 */
1481 0xFF, /* 356 */
1482 0x03, /* 357 */
1483 0x0F, /* 358 */
1484 0x00, /* 359 */
1485 0x0F, /* 360 */
1486 0x02, /* 361 */
1487 0x0F, /* 362 */
1488 0x01, /* 363 */
1489 0x0F, /* 364 */
1490 0x03, /* 365 */
1491 0x8F, /* 366 */
1492 0x00, /* 367 */
1493 0x8F, /* 368 */
1494 0x02, /* 369 */
1495 0x8F, /* 370 */
1496 0x01, /* 371 */
1497 0x8F, /* 372 */
1498 0x03, /* 373 */
1499 0x4F, /* 374 */
1500 0x00, /* 375 */
1501 0x4F, /* 376 */
1502 0x02, /* 377 */
1503 0x4F, /* 378 */
1504 0x01, /* 379 */
1505 0x4F, /* 380 */
1506 0x03, /* 381 */
1507 0xCF, /* 382 */
1508 0x00, /* 383 */
1509 0x0B, /* 384 */
1510 0x00, /* 385 */
1511 0xCF, /* 386 */
1512 0x02, /* 387 */
1513 0xCF, /* 388 */
1514 0x01, /* 389 */
1515 0xCF, /* 390 */
1516 0x03, /* 391 */
1517 0x2F, /* 392 */
1518 0x00, /* 393 */
1519 0x2F, /* 394 */
1520 0x02, /* 395 */
1521 0x0B, /* 396 */
1522 0x01, /* 397 */
1523 0x2F, /* 398 */
1524 0x01, /* 399 */
1525 0x2F, /* 400 */
1526 0x03, /* 401 */
1527 0xAF, /* 402 */
1528 0x00, /* 403 */
1529 0xAF, /* 404 */
1530 0x02, /* 405 */
1531 0xAF, /* 406 */
1532 0x01, /* 407 */
1533 0x8B, /* 408 */
1534 0x00, /* 409 */
1535 0xAF, /* 410 */
1536 0x03, /* 411 */
1537 0x6F, /* 412 */
1538 0x00, /* 413 */
1539 0x6F, /* 414 */
1540 0x02, /* 415 */
1541 0x8B, /* 416 */
1542 0x01, /* 417 */
1543 0x6F, /* 418 */
1544 0x01, /* 419 */
1545 0x6F, /* 420 */
1546 0x03, /* 421 */
1547 0xEF, /* 422 */
1548 0x00, /* 423 */
1549 0xEF, /* 424 */
1550 0x02, /* 425 */
1551 0xEF, /* 426 */
1552 0x01, /* 427 */
1553 0xEF, /* 428 */
1554 0x03, /* 429 */
1555 0x1F, /* 430 */
1556 0x00, /* 431 */
1557 0x1F, /* 432 */
1558 0x02, /* 433 */
1559 0x1F, /* 434 */
1560 0x01, /* 435 */
1561 0x1F, /* 436 */
1562 0x03, /* 437 */
1563 0x9F, /* 438 */
1564 0x00, /* 439 */
1565 0x9F, /* 440 */
1566 0x02, /* 441 */
1567 0x9F, /* 442 */
1568 0x01, /* 443 */
1569 0x9F, /* 444 */
1570 0x03, /* 445 */
1571 0x5F, /* 446 */
1572 0x00, /* 447 */
1573 0x4B, /* 448 */
1574 0x00, /* 449 */
1575 0x5F, /* 450 */
1576 0x02, /* 451 */
1577 0x5F, /* 452 */
1578 0x01, /* 453 */
1579 0x5F, /* 454 */
1580 0x03, /* 455 */
1581 0xDF, /* 456 */
1582 0x00, /* 457 */
1583 0xDF, /* 458 */
1584 0x02, /* 459 */
1585 0xDF, /* 460 */
1586 0x01, /* 461 */
1587 0xDF, /* 462 */
1588 0x03, /* 463 */
1589 0x3F, /* 464 */
1590 0x00, /* 465 */
1591 0x3F, /* 466 */
1592 0x02, /* 467 */
1593 0x3F, /* 468 */
1594 0x01, /* 469 */
1595 0x3F, /* 470 */
1596 0x03, /* 471 */
1597 0xBF, /* 472 */
1598 0x00, /* 473 */
1599 0xBF, /* 474 */
1600 0x02, /* 475 */
1601 0x4B, /* 476 */
1602 0x01, /* 477 */
1603 0xBF, /* 478 */
1604 0x01, /* 479 */
1605 0xAD, /* 480 */
1606 0x00, /* 481 */
1607 0xCB, /* 482 */
1608 0x00, /* 483 */
1609 0xCB, /* 484 */
1610 0x01, /* 485 */
1611 0xBF, /* 486 */
1612 0x03, /* 487 */
1613 0x2B, /* 488 */
1614 0x00, /* 489 */
1615 0x7F, /* 490 */
1616 0x00, /* 491 */
1617 0x7F, /* 492 */
1618 0x02, /* 493 */
1619 0x7F, /* 494 */
1620 0x01, /* 495 */
1621 0x2B, /* 496 */
1622 0x01, /* 497 */
1623 0x7F, /* 498 */
1624 0x03, /* 499 */
1625 0xFF, /* 500 */
1626 0x00, /* 501 */
1627 0xFF, /* 502 */
1628 0x02, /* 503 */
1629 0xAB, /* 504 */
1630 0x00, /* 505 */
1631 0xAB, /* 506 */
1632 0x01, /* 507 */
1633 0x6D, /* 508 */
1634 0x00, /* 509 */
1635 0x59, /* 510 */
1636 0x00, /* 511 */
1637 0xFF, /* 512 */
1638 0x17, /* 513 */
1639 0xFF, /* 514 */
1640 0x0F, /* 515 */
1641 0x39, /* 516 */
1642 0x00, /* 517 */
1643 0x79, /* 518 */
1644 0x00, /* 519 */
1645 0xFF, /* 520 */
1646 0x01, /* 521 */
1647 0x05, /* 522 */
1648 0x00, /* 523 */
1649 0x45, /* 524 */
1650 0x00, /* 525 */
1651 0x34, /* 526 */
1652 0x00, /* 527 */
1653 0x0C, /* 528 */
1654 0x00, /* 529 */
1655 0x2C, /* 530 */
1656 0x00, /* 531 */
1657 0x1C, /* 532 */
1658 0x00, /* 533 */
1659 0x00, /* 534 */
1660 0x00, /* 535 */
1661 0x3C, /* 536 */
1662 0x00, /* 537 */
1663 0x02, /* 538 */
1664 0x00, /* 539 */
1665 0x22, /* 540 */
1666 0x00, /* 541 */
1667 0x10, /* 542 */
1668 0x00, /* 543 */
1669 0x12, /* 544 */
1670 0x00, /* 545 */
1671 0x08, /* 546 */
1672 0x00, /* 547 */
1673 0x32, /* 548 */
1674 0x00, /* 549 */
1675 0x0A, /* 550 */
1676 0x00, /* 551 */
1677 0x2A, /* 552 */
1678 0x00, /* 553 */
1679 0x1A, /* 554 */
1680 0x00, /* 555 */
1681 0x3A, /* 556 */
1682 0x00, /* 557 */
1683 0x06, /* 558 */
1684 0x00, /* 559 */
1685 0x26, /* 560 */
1686 0x00, /* 561 */
1687 0x16, /* 562 */
1688 0x00, /* 563 */
1689 0x36, /* 564 */
1690 0x00, /* 565 */
1691 0x0E, /* 566 */
1692 0x00, /* 567 */
1693 0x2E, /* 568 */
1694 0x00, /* 569 */
1695 0x1E, /* 570 */
1696 0x00, /* 571 */
1697 0x3E, /* 572 */
1698 0x00, /* 573 */
1699 0x01, /* 574 */
1700 0x00, /* 575 */
1701 0xED, /* 576 */
1702 0x00, /* 577 */
1703 0x18, /* 578 */
1704 0x00, /* 579 */
1705 0x21, /* 580 */
1706 0x00, /* 581 */
1707 0x25, /* 582 */
1708 0x00, /* 583 */
1709 0x65, /* 584 */
1710 0x00, /* 585 */
1711 0xFF, /* 586 */
1712 0x1F /* 587 */
1713};
1714
1715static const BYTE HuffLengthLOM[32] = {
1716 4, /* 0 */
1717 2, /* 1 */
1718 3, /* 2 */
1719 4, /* 3 */
1720 3, /* 4 */
1721 4, /* 5 */
1722 4, /* 6 */
1723 5, /* 7 */
1724 4, /* 8 */
1725 5, /* 9 */
1726 5, /* 10 */
1727 6, /* 11 */
1728 6, /* 12 */
1729 7, /* 13 */
1730 7, /* 14 */
1731 8, /* 15 */
1732 7, /* 16 */
1733 8, /* 17 */
1734 8, /* 18 */
1735 9, /* 19 */
1736 9, /* 20 */
1737 8, /* 21 */
1738 9, /* 22 */
1739 9, /* 23 */
1740 9, /* 24 */
1741 9, /* 25 */
1742 9, /* 26 */
1743 9, /* 27 */
1744 9, /* 28 */
1745 9, /* 29 */
1746 9, /* 30 */
1747 9 /* 31 */
1748};
1749
1750static const UINT16 HuffCodeLOM[32] = {
1751 0x0001, /* 0 */
1752 0x0000, /* 1 */
1753 0x0002, /* 2 */
1754 0x0009, /* 3 */
1755 0x0006, /* 4 */
1756 0x0005, /* 5 */
1757 0x000D, /* 6 */
1758 0x000B, /* 7 */
1759 0x0003, /* 8 */
1760 0x001B, /* 9 */
1761 0x0007, /* 10 */
1762 0x0017, /* 11 */
1763 0x0037, /* 12 */
1764 0x000F, /* 13 */
1765 0x004F, /* 14 */
1766 0x006F, /* 15 */
1767 0x002F, /* 16 */
1768 0x00EF, /* 17 */
1769 0x001F, /* 18 */
1770 0x005F, /* 19 */
1771 0x015F, /* 20 */
1772 0x009F, /* 21 */
1773 0x00DF, /* 22 */
1774 0x01DF, /* 23 */
1775 0x003F, /* 24 */
1776 0x013F, /* 25 */
1777 0x00BF, /* 26 */
1778 0x01BF, /* 27 */
1779 0x007F, /* 28 */
1780 0x017F, /* 29 */
1781 0x00FF, /* 30 */
1782 0x01FF /* 31 */
1783};
1784
1785static const UINT32 CopyOffsetBitsLUT[32] = {
1786 0x0, /* 0 */
1787 0x0, /* 1 */
1788 0x0, /* 2 */
1789 0x0, /* 3 */
1790 0x1, /* 4 */
1791 0x1, /* 5 */
1792 0x2, /* 6 */
1793 0x2, /* 7 */
1794 0x3, /* 8 */
1795 0x3, /* 9 */
1796 0x4, /* 10 */
1797 0x4, /* 11 */
1798 0x5, /* 12 */
1799 0x5, /* 13 */
1800 0x6, /* 14 */
1801 0x6, /* 15 */
1802 0x7, /* 16 */
1803 0x7, /* 17 */
1804 0x8, /* 18 */
1805 0x8, /* 19 */
1806 0x9, /* 20 */
1807 0x9, /* 21 */
1808 0xA, /* 22 */
1809 0xA, /* 23 */
1810 0xB, /* 24 */
1811 0xB, /* 25 */
1812 0xC, /* 26 */
1813 0xC, /* 27 */
1814 0xD, /* 28 */
1815 0xD, /* 29 */
1816 0xE, /* 30 */
1817 0xE /* 31 */
1818};
1819
1820static const UINT32 CopyOffsetBaseLUT[32] = {
1821 0x1, /* 0 */
1822 0x2, /* 1 */
1823 0x3, /* 2 */
1824 0x4, /* 3 */
1825 0x5, /* 4 */
1826 0x7, /* 5 */
1827 0x9, /* 6 */
1828 0xD, /* 7 */
1829 0x11, /* 8 */
1830 0x19, /* 9 */
1831 0x21, /* 10 */
1832 0x31, /* 11 */
1833 0x41, /* 12 */
1834 0x61, /* 13 */
1835 0x81, /* 14 */
1836 0xC1, /* 15 */
1837 0x101, /* 16 */
1838 0x181, /* 17 */
1839 0x201, /* 18 */
1840 0x301, /* 19 */
1841 0x401, /* 20 */
1842 0x601, /* 21 */
1843 0x801, /* 22 */
1844 0xC01, /* 23 */
1845 0x1001, /* 24 */
1846 0x1801, /* 25 */
1847 0x2001, /* 26 */
1848 0x3001, /* 27 */
1849 0x4001, /* 28 */
1850 0x6001, /* 29 */
1851 0x8001, /* 30 */
1852 0xC001 /* 31 */
1853};
1854
1855static const UINT32 LOMBitsLUT[30] = {
1856 0x0, /* 0 */
1857 0x0, /* 1 */
1858 0x0, /* 2 */
1859 0x0, /* 3 */
1860 0x0, /* 4 */
1861 0x0, /* 5 */
1862 0x0, /* 6 */
1863 0x0, /* 7 */
1864 0x1, /* 8 */
1865 0x1, /* 9 */
1866 0x1, /* 10 */
1867 0x1, /* 11 */
1868 0x2, /* 12 */
1869 0x2, /* 13 */
1870 0x2, /* 14 */
1871 0x2, /* 15 */
1872 0x3, /* 16 */
1873 0x3, /* 17 */
1874 0x3, /* 18 */
1875 0x3, /* 19 */
1876 0x4, /* 20 */
1877 0x4, /* 21 */
1878 0x4, /* 22 */
1879 0x4, /* 23 */
1880 0x6, /* 24 */
1881 0x6, /* 25 */
1882 0x8, /* 26 */
1883 0x8, /* 27 */
1884 0xE, /* 28 */
1885 0xE /* 29 */
1886};
1887
1888static const UINT32 LOMBaseLUT[30] = {
1889 0x2, /* 0 */
1890 0x3, /* 1 */
1891 0x4, /* 2 */
1892 0x5, /* 3 */
1893 0x6, /* 4 */
1894 0x7, /* 5 */
1895 0x8, /* 6 */
1896 0x9, /* 7 */
1897 0xA, /* 8 */
1898 0xC, /* 9 */
1899 0xE, /* 10 */
1900 0x10, /* 11 */
1901 0x12, /* 12 */
1902 0x16, /* 13 */
1903 0x1A, /* 14 */
1904 0x1E, /* 15 */
1905 0x22, /* 16 */
1906 0x2A, /* 17 */
1907 0x32, /* 18 */
1908 0x3A, /* 19 */
1909 0x42, /* 20 */
1910 0x52, /* 21 */
1911 0x62, /* 22 */
1912 0x72, /* 23 */
1913 0x82, /* 24 */
1914 0xC2, /* 25 */
1915 0x102, /* 26 */
1916 0x202, /* 27 */
1917 0x2, /* 28 */
1918 0x2 /* 29 */
1919};
1920
1921static INLINE UINT16 get_word(const BYTE* data)
1922{
1923 UINT16 tmp = 0;
1924
1925 WINPR_ASSERT(data);
1926 tmp = *data++;
1927 tmp |= *data << 8;
1928 return tmp;
1929}
1930
1931static INLINE UINT32 get_dword(const BYTE* data)
1932{
1933 UINT32 tmp = 0;
1934 WINPR_ASSERT(data);
1935 tmp = *data++;
1936 tmp |= (UINT32)*data++ << 8U;
1937 tmp |= (UINT32)*data++ << 16U;
1938 tmp |= (UINT32)*data++ << 24U;
1939 return tmp;
1940}
1941
1942static INLINE BOOL NCrushFetchBits(const BYTE** SrcPtr, const BYTE** SrcEnd, INT32* nbits,
1943 UINT32* bits)
1944{
1945 WINPR_ASSERT(SrcPtr);
1946 WINPR_ASSERT(SrcEnd);
1947 WINPR_ASSERT(nbits);
1948 WINPR_ASSERT(bits);
1949
1950 if (*nbits < 16)
1951 {
1952 if ((*SrcPtr + 1) >= *SrcEnd)
1953 {
1954 if (*SrcPtr >= *SrcEnd)
1955 {
1956 if (*nbits < 0)
1957 return FALSE;
1958 }
1959 else
1960 {
1961 const UINT32 src = *(*SrcPtr)++;
1962 const UINT32 val = (src << *nbits);
1963 *bits += val;
1964 *nbits += 8;
1965 }
1966 }
1967 else
1968 {
1969 UINT32 tmp = *(*SrcPtr)++;
1970 tmp |= ((*(*SrcPtr)++) << 8) & 0xFF00;
1971 *bits += (tmp << *nbits) & UINT32_MAX;
1972 *nbits += 16;
1973 }
1974 }
1975
1976 return TRUE;
1977}
1978
1979static INLINE void NCrushWriteStart(UINT32* bits, UINT32* offset, UINT32* accumulator)
1980{
1981 WINPR_ASSERT(bits);
1982 WINPR_ASSERT(offset);
1983 WINPR_ASSERT(accumulator);
1984
1985 *bits = 0;
1986 *offset = 0;
1987 *accumulator = 0;
1988}
1989
1990static INLINE void NCrushWriteBits(BYTE** DstPtr, UINT32* accumulator, UINT32* offset, UINT32 _bits,
1991 UINT32 _nbits)
1992{
1993 WINPR_ASSERT(DstPtr);
1994 WINPR_ASSERT(accumulator);
1995 WINPR_ASSERT(offset);
1996
1997 *accumulator |= _bits << *offset;
1998 *offset += _nbits;
1999
2000 if (*offset >= 16)
2001 {
2002 *(*DstPtr)++ = (*accumulator & 0xFF);
2003 *(*DstPtr)++ = ((*accumulator >> 8) & 0xFF);
2004 *accumulator >>= 16;
2005 *offset -= 16;
2006 }
2007}
2008
2009static INLINE void NCrushWriteFinish(BYTE** DstPtr, UINT32 accumulator)
2010{
2011 WINPR_ASSERT(DstPtr);
2012
2013 *(*DstPtr)++ = accumulator & 0xFF;
2014 *(*DstPtr)++ = (accumulator >> 8) & 0xFF;
2015}
2016
2017int ncrush_decompress(NCRUSH_CONTEXT* ncrush, const BYTE* pSrcData, UINT32 SrcSize,
2018 const BYTE** ppDstData, UINT32* pDstSize, UINT32 flags)
2019{
2020 UINT32 index = 0;
2021 BYTE Literal = 0;
2022 UINT32 IndexLEC = 0;
2023 UINT32 BitLength = 0;
2024 UINT32 CopyOffset = 0;
2025 UINT32 CopyLength = 0;
2026 UINT32 OldCopyOffset = 0;
2027 const BYTE* CopyOffsetPtr = NULL;
2028 UINT32 LengthOfMatch = 0;
2029 UINT32 CopyOffsetIndex = 0;
2030 UINT32 OffsetCacheIndex = 0;
2031 UINT32 CopyOffsetBits = 0;
2032 UINT32 CopyOffsetBase = 0;
2033 UINT32 LengthOfMatchBits = 0;
2034 UINT32 LengthOfMatchBase = 0;
2035
2036 WINPR_ASSERT(ncrush);
2037 WINPR_ASSERT(pSrcData);
2038 WINPR_ASSERT(ppDstData);
2039 WINPR_ASSERT(pDstSize);
2040
2041 if (ncrush->HistoryEndOffset != 65535)
2042 return -1001;
2043
2044 BYTE* HistoryBuffer = ncrush->HistoryBuffer;
2045 const BYTE* HistoryBufferEnd = &HistoryBuffer[ncrush->HistoryEndOffset];
2046
2047 if (flags & PACKET_AT_FRONT)
2048 {
2049 if ((ncrush->HistoryPtr - 32768) <= HistoryBuffer)
2050 return -1002;
2051
2052 MoveMemory(HistoryBuffer, (ncrush->HistoryPtr - 32768), 32768);
2053 ncrush->HistoryPtr = &(HistoryBuffer[32768]);
2054 ZeroMemory(&HistoryBuffer[32768], 32768);
2055 }
2056
2057 if (flags & PACKET_FLUSHED)
2058 {
2059 ncrush->HistoryPtr = HistoryBuffer;
2060 ZeroMemory(HistoryBuffer, sizeof(ncrush->HistoryBuffer));
2061 ZeroMemory(&(ncrush->OffsetCache), sizeof(ncrush->OffsetCache));
2062 }
2063
2064 BYTE* HistoryPtr = ncrush->HistoryPtr;
2065
2066 if (!(flags & PACKET_COMPRESSED))
2067 {
2068 *ppDstData = pSrcData;
2069 *pDstSize = SrcSize;
2070 return 1;
2071 }
2072
2073 if (SrcSize < 4)
2074 {
2075 WLog_ERR(TAG, "Input size short: SrcSize %" PRIu32 " < 4", SrcSize);
2076 return -1;
2077 }
2078
2079 const BYTE* SrcEnd = &pSrcData[SrcSize];
2080 const BYTE* SrcPtr = pSrcData + 4;
2081
2082 INT32 nbits = 32;
2083 UINT32 bits = get_dword(pSrcData);
2084 while (1)
2085 {
2086 while (1)
2087 {
2088 const UINT16 Mask = get_word(&HuffTableMask[29]);
2089 const UINT32 MaskedBits = bits & Mask;
2090 if (MaskedBits >= ARRAYSIZE(HuffTableLEC))
2091 return -1;
2092 IndexLEC = HuffTableLEC[MaskedBits] & 0xFFF;
2093 BitLength = HuffTableLEC[MaskedBits] >> 12;
2094 bits >>= BitLength;
2095 nbits -= WINPR_ASSERTING_INT_CAST(int32_t, BitLength);
2096
2097 if (!NCrushFetchBits(&SrcPtr, &SrcEnd, &nbits, &bits))
2098 return -1;
2099
2100 if (IndexLEC >= 256)
2101 break;
2102
2103 if (HistoryPtr >= HistoryBufferEnd)
2104 {
2105 WLog_ERR(TAG, "ncrush_decompress error: HistoryPtr (%p) >= HistoryBufferEnd (%p)",
2106 (const void*)HistoryPtr, (const void*)HistoryBufferEnd);
2107 return -1003;
2108 }
2109
2110 Literal = (HuffTableLEC[MaskedBits] & 0xFF);
2111 *HistoryPtr++ = Literal;
2112 }
2113
2114 if (IndexLEC == 256)
2115 break; /* EOS */
2116
2117 CopyOffsetIndex = IndexLEC - 257;
2118
2119 if (CopyOffsetIndex >= 32)
2120 {
2121 OffsetCacheIndex = IndexLEC - 289;
2122
2123 if (OffsetCacheIndex >= 4)
2124 return -1004;
2125
2126 {
2127 CopyOffset = ncrush->OffsetCache[OffsetCacheIndex];
2128 const UINT16 Mask = get_word(&HuffTableMask[21]);
2129 const UINT32 MaskedBits = bits & Mask;
2130 if (MaskedBits >= ARRAYSIZE(HuffTableLOM))
2131 return -1;
2132 LengthOfMatch = HuffTableLOM[MaskedBits] & 0xFFF;
2133 BitLength = HuffTableLOM[MaskedBits] >> 12;
2134 bits >>= BitLength;
2135 nbits -= WINPR_ASSERTING_INT_CAST(int32_t, BitLength);
2136 }
2137
2138 if (!NCrushFetchBits(&SrcPtr, &SrcEnd, &nbits, &bits))
2139 return -1;
2140
2141 if (LengthOfMatch >= ARRAYSIZE(LOMBitsLUT))
2142 return -1;
2143
2144 LengthOfMatchBits = LOMBitsLUT[LengthOfMatch];
2145
2146 if (LengthOfMatch >= ARRAYSIZE(LOMBaseLUT))
2147 return -1;
2148 LengthOfMatchBase = LOMBaseLUT[LengthOfMatch];
2149
2150 if (LengthOfMatchBits)
2151 {
2152 const size_t idx = (2ull * LengthOfMatchBits) + 3ull;
2153 if (idx >= ARRAYSIZE(HuffTableMask))
2154 return -1;
2155
2156 const UINT16 Mask = get_word(&HuffTableMask[idx]);
2157 const UINT32 MaskedBits = bits & Mask;
2158 bits >>= LengthOfMatchBits;
2159 nbits -= WINPR_ASSERTING_INT_CAST(int32_t, LengthOfMatchBits);
2160 LengthOfMatchBase += MaskedBits;
2161
2162 if (!NCrushFetchBits(&SrcPtr, &SrcEnd, &nbits, &bits))
2163 return -1;
2164 }
2165
2166 OldCopyOffset = ncrush->OffsetCache[OffsetCacheIndex];
2167 ncrush->OffsetCache[OffsetCacheIndex] = ncrush->OffsetCache[0];
2168 ncrush->OffsetCache[0] = OldCopyOffset;
2169 }
2170 else
2171 {
2172 if (CopyOffsetIndex >= ARRAYSIZE(CopyOffsetBitsLUT))
2173 return -1;
2174
2175 CopyOffsetBits = CopyOffsetBitsLUT[CopyOffsetIndex];
2176
2177 if (CopyOffsetIndex >= ARRAYSIZE(CopyOffsetBaseLUT))
2178 return -1;
2179 CopyOffsetBase = CopyOffsetBaseLUT[CopyOffsetIndex];
2180 CopyOffset = CopyOffsetBase - 1;
2181
2182 if (CopyOffsetBits)
2183 {
2184 const size_t idx = (2ull * CopyOffsetBits) + 3ull;
2185 if (idx >= ARRAYSIZE(HuffTableMask))
2186 return -1;
2187
2188 {
2189 const UINT16 Mask = get_word(&HuffTableMask[idx]);
2190 const UINT32 MaskedBits = bits & Mask;
2191 const UINT32 tmp = CopyOffsetBase + MaskedBits;
2192 if (tmp < 1)
2193 return -1;
2194 CopyOffset = tmp - 1;
2195 }
2196 bits >>= CopyOffsetBits;
2197 nbits -= WINPR_ASSERTING_INT_CAST(int32_t, CopyOffsetBits);
2198
2199 if (!NCrushFetchBits(&SrcPtr, &SrcEnd, &nbits, &bits))
2200 return -1;
2201 }
2202 {
2203 const UINT16 Mask = get_word(&HuffTableMask[21]);
2204 const UINT32 MaskedBits = bits & Mask;
2205 if (MaskedBits >= ARRAYSIZE(HuffTableLOM))
2206 return -1;
2207
2208 LengthOfMatch = HuffTableLOM[MaskedBits] & 0xFFF;
2209 BitLength = HuffTableLOM[MaskedBits] >> 12;
2210 bits >>= BitLength;
2211 nbits -= WINPR_ASSERTING_INT_CAST(int32_t, BitLength);
2212 }
2213 if (!NCrushFetchBits(&SrcPtr, &SrcEnd, &nbits, &bits))
2214 return -1;
2215
2216 if (LengthOfMatch >= ARRAYSIZE(LOMBitsLUT))
2217 return -1;
2218
2219 LengthOfMatchBits = LOMBitsLUT[LengthOfMatch];
2220
2221 if (LengthOfMatch >= ARRAYSIZE(LOMBaseLUT))
2222 return -1;
2223 LengthOfMatchBase = LOMBaseLUT[LengthOfMatch];
2224
2225 if (LengthOfMatchBits)
2226 {
2227 const size_t idx = (2ull * LengthOfMatchBits) + 3ull;
2228 if (idx >= ARRAYSIZE(HuffTableMask))
2229 return -1;
2230
2231 const UINT16 Mask = get_word(&HuffTableMask[idx]);
2232 const UINT32 MaskedBits = bits & Mask;
2233 bits >>= LengthOfMatchBits;
2234 nbits -= WINPR_ASSERTING_INT_CAST(int32_t, LengthOfMatchBits);
2235 LengthOfMatchBase += MaskedBits;
2236
2237 if (!NCrushFetchBits(&SrcPtr, &SrcEnd, &nbits, &bits))
2238 return -1;
2239 }
2240
2241 ncrush->OffsetCache[3] = ncrush->OffsetCache[2];
2242 ncrush->OffsetCache[2] = ncrush->OffsetCache[1];
2243 ncrush->OffsetCache[1] = ncrush->OffsetCache[0];
2244 ncrush->OffsetCache[0] = CopyOffset;
2245 }
2246
2247 CopyOffsetPtr = &HistoryBuffer[(HistoryPtr - HistoryBuffer - CopyOffset) & 0xFFFF];
2248 LengthOfMatch = LengthOfMatchBase;
2249
2250 if (LengthOfMatch < 2)
2251 return -1005;
2252
2253 if ((CopyOffsetPtr >= (HistoryBufferEnd - LengthOfMatch)) ||
2254 (HistoryPtr >= (HistoryBufferEnd - LengthOfMatch)))
2255 return -1006;
2256
2257 CopyOffsetPtr = HistoryPtr - CopyOffset;
2258 index = 0;
2259 CopyLength = (LengthOfMatch > CopyOffset) ? CopyOffset : LengthOfMatch;
2260
2261 if (CopyOffsetPtr >= HistoryBuffer)
2262 {
2263 while (CopyLength > 0)
2264 {
2265 *HistoryPtr++ = *CopyOffsetPtr++;
2266 CopyLength--;
2267 }
2268
2269 while (LengthOfMatch > CopyOffset)
2270 {
2271 index = ((index >= CopyOffset)) ? 0 : index;
2272 *HistoryPtr++ = *(CopyOffsetPtr + index++);
2273 LengthOfMatch--;
2274 }
2275 }
2276 else
2277 {
2278 CopyOffsetPtr = HistoryBufferEnd - (CopyOffset - (HistoryPtr - HistoryBuffer));
2279 CopyOffsetPtr++;
2280
2281 while (CopyLength && (CopyOffsetPtr <= HistoryBufferEnd))
2282 {
2283 *HistoryPtr++ = *CopyOffsetPtr++;
2284 CopyLength--;
2285 }
2286
2287 CopyOffsetPtr = HistoryBuffer;
2288
2289 while (LengthOfMatch > CopyOffset)
2290 {
2291 index = ((index >= CopyOffset)) ? 0 : index;
2292 *HistoryPtr++ = *(CopyOffsetPtr + index++);
2293 LengthOfMatch--;
2294 }
2295 }
2296
2297 LengthOfMatch = LengthOfMatchBase;
2298
2299 if (LengthOfMatch == 2)
2300 continue;
2301 }
2302
2303 if (IndexLEC != 256)
2304 return -1;
2305
2306 if (ncrush->HistoryBufferFence != 0xABABABAB)
2307 {
2308 WLog_ERR(TAG, "NCrushDecompress: history buffer fence was overwritten, potential buffer "
2309 "overflow detected!");
2310 return -1007;
2311 }
2312
2313 const intptr_t hsize = HistoryPtr - ncrush->HistoryPtr;
2314 WINPR_ASSERT(hsize >= 0);
2315 WINPR_ASSERT(hsize <= UINT32_MAX);
2316 *pDstSize = (UINT32)hsize;
2317 *ppDstData = ncrush->HistoryPtr;
2318 ncrush->HistoryPtr = HistoryPtr;
2319 return 1;
2320}
2321
2322static int ncrush_hash_table_add(NCRUSH_CONTEXT* ncrush, const BYTE* pSrcData, UINT32 SrcSize,
2323 UINT32 HistoryOffset)
2324{
2325 const BYTE* SrcPtr = pSrcData;
2326 UINT32 Offset = HistoryOffset;
2327 UINT32 EndOffset = Offset + SrcSize - 8;
2328
2329 WINPR_ASSERT(ncrush);
2330 WINPR_ASSERT(pSrcData);
2331 WINPR_ASSERT(Offset + SrcSize >= 8);
2332
2333 while (Offset < EndOffset)
2334 {
2335 const UINT16 Hash = ncrush->HashTable[get_word(SrcPtr)];
2336 ncrush->HashTable[get_word(SrcPtr)] = WINPR_ASSERTING_INT_CAST(UINT16, Offset);
2337 ncrush->MatchTable[Offset] = Hash;
2338 SrcPtr++;
2339 Offset++;
2340 }
2341
2342 return 1;
2343}
2344
2345static intptr_t ncrush_find_match_length(const BYTE* Ptr1, const BYTE* Ptr2, const BYTE* HistoryPtr)
2346{
2347 BYTE val1 = 0;
2348 BYTE val2 = 0;
2349 const BYTE* Ptr = Ptr1;
2350
2351 WINPR_ASSERT(Ptr1);
2352 WINPR_ASSERT(Ptr2);
2353 WINPR_ASSERT(HistoryPtr);
2354
2355 do
2356 {
2357 if (Ptr1 > HistoryPtr)
2358 break;
2359
2360 val1 = *Ptr1++;
2361 val2 = *Ptr2++;
2362 } while (val1 == val2);
2363
2364 return Ptr1 - (Ptr + 1);
2365}
2366
2367static int ncrush_find_best_match(NCRUSH_CONTEXT* ncrush, UINT16 HistoryOffset,
2368 UINT32* pMatchOffset)
2369{
2370 int Length = 0;
2371
2372 WINPR_ASSERT(ncrush);
2373 WINPR_ASSERT(pMatchOffset);
2374
2375 if (!ncrush->MatchTable[HistoryOffset])
2376 return -1;
2377
2378 int MatchLength = 2;
2379 UINT16 Offset = HistoryOffset;
2380 BYTE* HistoryBuffer = (BYTE*)ncrush->HistoryBuffer;
2381
2382 ncrush->MatchTable[0] = HistoryOffset;
2383 UINT16 MatchOffset = ncrush->MatchTable[HistoryOffset];
2384 UINT16 NextOffset = ncrush->MatchTable[Offset];
2385 BYTE* MatchPtr = &HistoryBuffer[MatchLength];
2386
2387 for (int i = 0; i < 4; i++)
2388 {
2389 int j = -1;
2390
2391 if (j < 0)
2392 {
2393 Offset = ncrush->MatchTable[NextOffset];
2394
2395 if (MatchPtr[NextOffset] == HistoryBuffer[HistoryOffset + MatchLength])
2396 j = 0;
2397 }
2398
2399 if (j < 0)
2400 {
2401 NextOffset = ncrush->MatchTable[Offset];
2402
2403 if (MatchPtr[Offset] == HistoryBuffer[HistoryOffset + MatchLength])
2404 j = 1;
2405 }
2406
2407 if (j < 0)
2408 {
2409 Offset = ncrush->MatchTable[NextOffset];
2410
2411 if (MatchPtr[NextOffset] == HistoryBuffer[HistoryOffset + MatchLength])
2412 j = 2;
2413 }
2414
2415 if (j < 0)
2416 {
2417 NextOffset = ncrush->MatchTable[Offset];
2418
2419 if (MatchPtr[Offset] == HistoryBuffer[HistoryOffset + MatchLength])
2420 j = 3;
2421 }
2422
2423 if (j < 0)
2424 {
2425 Offset = ncrush->MatchTable[NextOffset];
2426
2427 if (MatchPtr[NextOffset] == HistoryBuffer[HistoryOffset + MatchLength])
2428 j = 4;
2429 }
2430
2431 if (j < 0)
2432 {
2433 NextOffset = ncrush->MatchTable[Offset];
2434
2435 if (MatchPtr[Offset] == HistoryBuffer[HistoryOffset + MatchLength])
2436 j = 5;
2437 }
2438
2439 if (j >= 0)
2440 {
2441 if ((j % 2) == 0)
2442 Offset = NextOffset;
2443
2444 if ((Offset != HistoryOffset) && Offset)
2445 {
2446 const intptr_t len =
2447 ncrush_find_match_length(&HistoryBuffer[HistoryOffset + 2],
2448 &HistoryBuffer[Offset + 2], ncrush->HistoryPtr);
2449 WINPR_ASSERT(len < INT_MAX - 2);
2450 WINPR_ASSERT(len > INT_MIN + 2);
2451
2452 Length = (int)len + 2;
2453
2454 if (Length < 2)
2455 return -1;
2456
2457 if (Length > 16)
2458 break;
2459
2460 if (Length > MatchLength)
2461 {
2462 MatchLength = Length;
2463 MatchOffset = Offset;
2464 }
2465
2466 if ((Length <= MatchLength) ||
2467 (&HistoryBuffer[HistoryOffset + 2] < ncrush->HistoryPtr))
2468 {
2469 NextOffset = ncrush->MatchTable[Offset];
2470 MatchPtr = &HistoryBuffer[MatchLength];
2471 continue;
2472 }
2473 }
2474
2475 break;
2476 }
2477 }
2478
2479 ncrush->MatchTable[0] = 0;
2480 *pMatchOffset = MatchOffset;
2481 return MatchLength;
2482}
2483
2484static int ncrush_move_encoder_windows(NCRUSH_CONTEXT* ncrush, BYTE* HistoryPtr)
2485{
2486 WINPR_ASSERT(ncrush);
2487 WINPR_ASSERT(HistoryPtr);
2488
2489 const size_t history_half = ARRAYSIZE(ncrush->HistoryBuffer) / 2;
2490 if (HistoryPtr < &ncrush->HistoryBuffer[history_half])
2491 return -1;
2492
2493 if (HistoryPtr > &ncrush->HistoryBuffer[ARRAYSIZE(ncrush->HistoryBuffer)])
2494 return -1;
2495
2496 MoveMemory(ncrush->HistoryBuffer, HistoryPtr - history_half, history_half * sizeof(BYTE));
2497 const intptr_t hsize = HistoryPtr - history_half - ncrush->HistoryBuffer;
2498 WINPR_ASSERT(hsize <= UINT16_MAX);
2499 WINPR_ASSERT(hsize >= 0);
2500 INT32 HistoryOffset = (INT32)hsize;
2501
2502 for (size_t i = 0; i < ARRAYSIZE(ncrush->HashTable); i++)
2503 {
2504 const INT32 NewHash = ncrush->HashTable[i] - HistoryOffset;
2505 ncrush->HashTable[i] = (NewHash <= 0) ? 0 : WINPR_ASSERTING_INT_CAST(UINT16, NewHash);
2506 }
2507
2508 const size_t match_half = ARRAYSIZE(ncrush->MatchTable) / 2;
2509 for (size_t j = 0; j < match_half; j++)
2510 {
2511 if ((size_t)HistoryOffset + j >= ARRAYSIZE(ncrush->MatchTable))
2512 continue;
2513
2514 const INT32 NewMatch = ncrush->MatchTable[(size_t)HistoryOffset + j] - HistoryOffset;
2515 ncrush->MatchTable[j] = (NewMatch <= 0) ? 0 : WINPR_ASSERTING_INT_CAST(UINT16, NewMatch);
2516 }
2517
2518 ZeroMemory(&ncrush->MatchTable[match_half], match_half * sizeof(UINT16));
2519 return 1;
2520}
2521
2522int ncrush_compress(NCRUSH_CONTEXT* ncrush, const BYTE* pSrcData, UINT32 SrcSize, BYTE* pDstBuffer,
2523 const BYTE** ppDstData, UINT32* pDstSize, UINT32* pFlags)
2524{
2525 BYTE Literal = 0;
2526 const BYTE* SrcPtr = NULL;
2527 BYTE* DstPtr = NULL;
2528 UINT32 bits = 0;
2529 UINT32 offset = 0;
2530 UINT32 MaskedBits = 0;
2531 UINT32 accumulator = 0;
2532 const BYTE* SrcEndPtr = NULL;
2533 BYTE* DstEndPtr = NULL;
2534 BYTE* HistoryPtr = NULL;
2535 BYTE* pDstData = NULL;
2536 UINT32 DstSize = 0;
2537 BOOL PacketAtFront = FALSE;
2538 BOOL PacketFlushed = FALSE;
2539 UINT32 MatchLength = 0;
2540 UINT32 IndexLEC = 0;
2541 UINT32 IndexLOM = 0;
2542 UINT32 IndexCO = 0;
2543 UINT32 CodeLEC = 0;
2544 UINT32 BitLength = 0;
2545 UINT32 CopyOffset = 0;
2546 UINT32 MatchOffset = 0;
2547 UINT32 OldCopyOffset = 0;
2548 UINT32* OffsetCache = NULL;
2549 UINT32 OffsetCacheIndex = 0;
2550 UINT32 HistoryOffset = 0;
2551 BYTE* HistoryBuffer = NULL;
2552 UINT32 HistoryBufferSize = 0;
2553 BYTE* HistoryBufferEndPtr = NULL;
2554 UINT32 CopyOffsetIndex = 0;
2555 UINT32 CopyOffsetBits = 0;
2556 UINT32 CompressionLevel = 2;
2557
2558 WINPR_ASSERT(ncrush);
2559
2560 WINPR_ASSERT(ncrush);
2561 WINPR_ASSERT(pSrcData);
2562 WINPR_ASSERT(pDstBuffer);
2563 WINPR_ASSERT(ppDstData);
2564 WINPR_ASSERT(pDstSize);
2565 WINPR_ASSERT(pFlags);
2566
2567 HistoryBuffer = ncrush->HistoryBuffer;
2568 *pFlags = 0;
2569
2570 if ((SrcSize + ncrush->HistoryOffset) >= 65529)
2571 {
2572 if (ncrush->HistoryOffset == (ncrush->HistoryBufferSize + 1))
2573 {
2574 ncrush->HistoryOffset = 0;
2575 ncrush->HistoryPtr = HistoryBuffer;
2576 PacketFlushed = TRUE;
2577 }
2578 else
2579 {
2580 if (ncrush_move_encoder_windows(ncrush, &(HistoryBuffer[ncrush->HistoryOffset])) < 0)
2581 return -1001;
2582
2583 ncrush->HistoryPtr = &HistoryBuffer[32768];
2584 ncrush->HistoryOffset = 32768;
2585 PacketAtFront = TRUE;
2586 }
2587 }
2588 else
2589 {
2590 *pFlags = 0;
2591 }
2592
2593 pDstData = pDstBuffer;
2594 *ppDstData = pDstBuffer;
2595
2596 if (!pDstData)
2597 return -1002;
2598
2599 DstSize = *pDstSize;
2600
2601 if (DstSize < SrcSize)
2602 return -1003;
2603
2604 DstSize = SrcSize;
2605 NCrushWriteStart(&bits, &offset, &accumulator);
2606 DstPtr = pDstData;
2607 SrcPtr = pSrcData;
2608 SrcEndPtr = &pSrcData[SrcSize];
2609 DstEndPtr = &pDstData[DstSize - 1];
2610 OffsetCache = ncrush->OffsetCache;
2611 HistoryPtr = &HistoryBuffer[ncrush->HistoryOffset];
2612 HistoryBufferEndPtr = &HistoryBuffer[65536];
2613 HistoryBufferSize = ncrush->HistoryBufferSize;
2614 CopyOffset = 0;
2615 MatchOffset = 0;
2616 const intptr_t thsize = HistoryPtr - HistoryBuffer;
2617
2618 ncrush_hash_table_add(ncrush, pSrcData, SrcSize, WINPR_ASSERTING_INT_CAST(UINT32, thsize));
2619 CopyMemory(HistoryPtr, pSrcData, SrcSize);
2620 ncrush->HistoryPtr = &HistoryPtr[SrcSize];
2621
2622 while (SrcPtr < (SrcEndPtr - 2))
2623 {
2624 MatchLength = 0;
2625 const intptr_t hsize = HistoryPtr - HistoryBuffer;
2626 WINPR_ASSERT(hsize <= UINT32_MAX);
2627 WINPR_ASSERT(hsize >= 0);
2628 HistoryOffset = (UINT32)hsize;
2629
2630 if (ncrush->HistoryPtr && (HistoryPtr > ncrush->HistoryPtr))
2631 return -1;
2632
2633 if (HistoryOffset >= 65536)
2634 return -1004;
2635
2636 if (ncrush->MatchTable[HistoryOffset])
2637 {
2638 int rc = 0;
2639
2640 MatchOffset = 0;
2641 rc = ncrush_find_best_match(ncrush, WINPR_ASSERTING_INT_CAST(UINT16, HistoryOffset),
2642 &MatchOffset);
2643
2644 if (rc < 0)
2645 return -1005;
2646 MatchLength = (UINT32)rc;
2647 }
2648
2649 if (MatchLength)
2650 CopyOffset = (HistoryBufferSize - 1) & (HistoryPtr - &HistoryBuffer[MatchOffset]);
2651
2652 if ((MatchLength == 2) && (CopyOffset >= 64))
2653 MatchLength = 0;
2654
2655 if (MatchLength == 0)
2656 {
2657 /* Literal */
2658 Literal = *SrcPtr++;
2659 HistoryPtr++;
2660
2661 if ((DstPtr + 2) > DstEndPtr) /* PACKET_FLUSH #1 */
2662 {
2663 ncrush_context_reset(ncrush, TRUE);
2664 *pFlags = PACKET_FLUSHED;
2665 *pFlags |= CompressionLevel;
2666 *ppDstData = pSrcData;
2667 *pDstSize = SrcSize;
2668 return 1;
2669 }
2670
2671 IndexLEC = Literal;
2672 if (IndexLEC >= ARRAYSIZE(HuffLengthLEC))
2673 return -1;
2674 BitLength = HuffLengthLEC[IndexLEC];
2675
2676 if (IndexLEC * 2ull >= ARRAYSIZE(HuffCodeLEC))
2677 return -1;
2678 CodeLEC = get_word(&HuffCodeLEC[2ULL * IndexLEC]);
2679
2680 if (BitLength > 15)
2681 return -1006;
2682
2683 NCrushWriteBits(&DstPtr, &accumulator, &offset, CodeLEC, BitLength);
2684 }
2685 else
2686 {
2687 HistoryPtr += MatchLength;
2688 SrcPtr += MatchLength;
2689
2690 if (!MatchLength)
2691 return -1007;
2692
2693 if ((DstPtr + 8) > DstEndPtr) /* PACKET_FLUSH #2 */
2694 {
2695 ncrush_context_reset(ncrush, TRUE);
2696 *pFlags = PACKET_FLUSHED;
2697 *pFlags |= CompressionLevel;
2698 *ppDstData = pSrcData;
2699 *pDstSize = SrcSize;
2700 return 1;
2701 }
2702
2703 OffsetCacheIndex = 5;
2704
2705 if ((CopyOffset == OffsetCache[0]) || (CopyOffset == OffsetCache[1]) ||
2706 (CopyOffset == OffsetCache[2]) || (CopyOffset == OffsetCache[3]))
2707 {
2708 if (CopyOffset == OffsetCache[3])
2709 {
2710 OldCopyOffset = OffsetCache[3];
2711 OffsetCache[3] = OffsetCache[0];
2712 OffsetCache[0] = OldCopyOffset;
2713 OffsetCacheIndex = 3;
2714 }
2715 else
2716 {
2717 if (CopyOffset == OffsetCache[2])
2718 {
2719 OldCopyOffset = OffsetCache[2];
2720 OffsetCache[2] = OffsetCache[0];
2721 OffsetCache[0] = OldCopyOffset;
2722 OffsetCacheIndex = 2;
2723 }
2724 else
2725 {
2726 if (CopyOffset == OffsetCache[1])
2727 {
2728 OldCopyOffset = OffsetCache[1];
2729 OffsetCache[1] = OffsetCache[0];
2730 OffsetCache[0] = OldCopyOffset;
2731 OffsetCacheIndex = 1;
2732 }
2733 else
2734 {
2735 if (CopyOffset == OffsetCache[0])
2736 {
2737 OffsetCacheIndex = 0;
2738 }
2739 }
2740 }
2741 }
2742 }
2743 else
2744 {
2745 OffsetCache[3] = OffsetCache[2];
2746 OffsetCache[2] = OffsetCache[1];
2747 OffsetCache[1] = OffsetCache[0];
2748 OffsetCache[0] = CopyOffset;
2749 }
2750
2751 if (OffsetCacheIndex >= 4)
2752 {
2753 /* CopyOffset not in OffsetCache */
2754 if (CopyOffset >= 256)
2755 bits = (CopyOffset >> 7) + 256;
2756 else
2757 bits = CopyOffset;
2758
2759 CopyOffsetIndex = ncrush->HuffTableCopyOffset[bits + 2];
2760
2761 if (CopyOffsetIndex >= ARRAYSIZE(CopyOffsetBitsLUT))
2762 return -1;
2763
2764 CopyOffsetBits = CopyOffsetBitsLUT[CopyOffsetIndex];
2765 IndexLEC = 257 + CopyOffsetIndex;
2766 if (IndexLEC >= ARRAYSIZE(HuffLengthLEC))
2767 return -1;
2768 BitLength = HuffLengthLEC[IndexLEC];
2769
2770 if (IndexLEC * 2ull >= ARRAYSIZE(HuffCodeLEC))
2771 return -1;
2772 CodeLEC = get_word(&HuffCodeLEC[2ULL * IndexLEC]);
2773
2774 if (BitLength > 15)
2775 return -1008;
2776
2777 if (CopyOffsetBits > 18)
2778 return -1009;
2779
2780 NCrushWriteBits(&DstPtr, &accumulator, &offset, CodeLEC, BitLength);
2781 UINT16 Mask = WINPR_ASSERTING_INT_CAST(UINT16, (1 << CopyOffsetBits) - 1);
2782 MaskedBits = CopyOffset & Mask;
2783 NCrushWriteBits(&DstPtr, &accumulator, &offset, MaskedBits, CopyOffsetBits);
2784
2785 if ((MatchLength - 2) >= 768)
2786 IndexCO = 28;
2787 else
2788 IndexCO = ncrush->HuffTableLOM[MatchLength];
2789
2790 if (IndexCO >= ARRAYSIZE(HuffLengthLOM))
2791 return -1;
2792 BitLength = HuffLengthLOM[IndexCO];
2793
2794 if (IndexCO >= ARRAYSIZE(LOMBitsLUT))
2795 return -1;
2796 IndexLOM = LOMBitsLUT[IndexCO];
2797
2798 if (IndexCO >= ARRAYSIZE(HuffCodeLOM))
2799 return -1;
2800 NCrushWriteBits(&DstPtr, &accumulator, &offset, HuffCodeLOM[IndexCO], BitLength);
2801 Mask = WINPR_ASSERTING_INT_CAST(UINT16, (1 << IndexLOM) - 1);
2802 MaskedBits = (MatchLength - 2) & Mask;
2803 NCrushWriteBits(&DstPtr, &accumulator, &offset, MaskedBits, IndexLOM);
2804
2805 if (IndexCO >= ARRAYSIZE(LOMBaseLUT))
2806 return -1;
2807 if ((MaskedBits + LOMBaseLUT[IndexCO]) != MatchLength)
2808 return -1010;
2809 }
2810 else
2811 {
2812 /* CopyOffset in OffsetCache */
2813 IndexLEC = 289 + OffsetCacheIndex;
2814 if (IndexLEC >= ARRAYSIZE(HuffLengthLEC))
2815 return -1;
2816 BitLength = HuffLengthLEC[IndexLEC];
2817 if (IndexLEC * 2ull >= ARRAYSIZE(HuffCodeLEC))
2818 return -1;
2819 CodeLEC = get_word(&HuffCodeLEC[2ULL * IndexLEC]);
2820
2821 if (BitLength >= 15)
2822 return -1011;
2823
2824 NCrushWriteBits(&DstPtr, &accumulator, &offset, CodeLEC, BitLength);
2825
2826 if ((MatchLength - 2) >= 768)
2827 IndexCO = 28;
2828 else
2829 IndexCO = ncrush->HuffTableLOM[MatchLength];
2830
2831 if (IndexCO >= ARRAYSIZE(HuffLengthLOM))
2832 return -1;
2833
2834 BitLength = HuffLengthLOM[IndexCO];
2835
2836 if (IndexCO >= ARRAYSIZE(LOMBitsLUT))
2837 return -1;
2838 IndexLOM = LOMBitsLUT[IndexCO];
2839
2840 if (IndexCO >= ARRAYSIZE(HuffCodeLOM))
2841 return -1;
2842 NCrushWriteBits(&DstPtr, &accumulator, &offset, HuffCodeLOM[IndexCO], BitLength);
2843 const UINT16 Mask = WINPR_ASSERTING_INT_CAST(UINT16, (1 << IndexLOM) - 1);
2844 MaskedBits = (MatchLength - 2) & Mask;
2845 NCrushWriteBits(&DstPtr, &accumulator, &offset, MaskedBits, IndexLOM);
2846
2847 if (IndexCO >= ARRAYSIZE(LOMBaseLUT))
2848 return -1;
2849 if ((MaskedBits + LOMBaseLUT[IndexCO]) != MatchLength)
2850 return -1012;
2851 }
2852 }
2853
2854 if (HistoryPtr >= HistoryBufferEndPtr)
2855 return -1013;
2856 }
2857
2858 while (SrcPtr < SrcEndPtr)
2859 {
2860 if ((DstPtr + 2) > DstEndPtr) /* PACKET_FLUSH #3 */
2861 {
2862 ncrush_context_reset(ncrush, TRUE);
2863 *pFlags = PACKET_FLUSHED;
2864 *pFlags |= CompressionLevel;
2865 *ppDstData = pSrcData;
2866 *pDstSize = SrcSize;
2867 return 1;
2868 }
2869
2870 Literal = *SrcPtr++;
2871 HistoryPtr++;
2872 IndexLEC = Literal;
2873 if (IndexLEC >= ARRAYSIZE(HuffLengthLEC))
2874 return -1;
2875 if (IndexLEC * 2ull >= ARRAYSIZE(HuffCodeLEC))
2876 return -1;
2877 BitLength = HuffLengthLEC[IndexLEC];
2878 CodeLEC = get_word(&HuffCodeLEC[2ULL * IndexLEC]);
2879
2880 if (BitLength > 15)
2881 return -1014;
2882
2883 NCrushWriteBits(&DstPtr, &accumulator, &offset, CodeLEC, BitLength);
2884 }
2885
2886 if ((DstPtr + 4) >= DstEndPtr) /* PACKET_FLUSH #4 */
2887 {
2888 ncrush_context_reset(ncrush, TRUE);
2889 *pFlags = PACKET_FLUSHED;
2890 *pFlags |= CompressionLevel;
2891 *ppDstData = pSrcData;
2892 *pDstSize = SrcSize;
2893 return 1;
2894 }
2895
2896 IndexLEC = 256;
2897 BitLength = HuffLengthLEC[IndexLEC];
2898
2899 if (BitLength > 15)
2900 return -1015;
2901
2902 bits = get_word(&HuffCodeLEC[2ULL * IndexLEC]);
2903 NCrushWriteBits(&DstPtr, &accumulator, &offset, bits, BitLength);
2904 NCrushWriteFinish(&DstPtr, accumulator);
2905 const intptr_t dsize = DstPtr - pDstData;
2906 WINPR_ASSERT(dsize <= UINT32_MAX);
2907 WINPR_ASSERT(dsize >= 0);
2908 *pDstSize = (UINT32)dsize;
2909
2910 if (*pDstSize > SrcSize)
2911 return -1016;
2912
2913 *pFlags |= PACKET_COMPRESSED;
2914 *pFlags |= CompressionLevel;
2915
2916 if (PacketAtFront)
2917 *pFlags |= PACKET_AT_FRONT;
2918
2919 if (PacketFlushed)
2920 *pFlags |= PACKET_FLUSHED;
2921
2922 const intptr_t diff = HistoryPtr - HistoryBuffer;
2923 if (diff > UINT32_MAX)
2924 return -1;
2925
2926 ncrush->HistoryOffset = (UINT32)diff;
2927
2928 if (ncrush->HistoryOffset >= ncrush->HistoryBufferSize)
2929 return -1;
2930
2931 return 1;
2932}
2933
2934static int ncrush_generate_tables(NCRUSH_CONTEXT* context)
2935{
2936 WINPR_ASSERT(context);
2937 WINPR_ASSERT(28 < ARRAYSIZE(LOMBitsLUT));
2938
2939 UINT32 cnt = 0;
2940 for (BYTE i = 0; i < 28; i++)
2941 {
2942 for (UINT32 j = 0; j < 1UL << LOMBitsLUT[i]; j++)
2943 {
2944 size_t l = (cnt++) + 2ull;
2945 context->HuffTableLOM[l] = i;
2946 }
2947 }
2948
2949 for (UINT32 k = 2; k < 4096; k++)
2950 {
2951 size_t i = 28;
2952 if ((k - 2) < 768)
2953 i = context->HuffTableLOM[k];
2954
2955 if (i >= ARRAYSIZE(LOMBitsLUT))
2956 return -1;
2957 if (i >= ARRAYSIZE(LOMBaseLUT))
2958 return -1;
2959
2960 if (((((1 << LOMBitsLUT[i]) - 1) & (k - 2)) + LOMBaseLUT[i]) != k)
2961 return -1;
2962 }
2963
2964 size_t k = 0;
2965 for (BYTE i = 0; i < 16; i++)
2966 {
2967 for (size_t j = 0; j < (1ULL << CopyOffsetBitsLUT[i]); j++)
2968 {
2969 size_t l = k++ + 2ull;
2970 context->HuffTableCopyOffset[l] = i;
2971 }
2972 }
2973
2974 k /= 128;
2975
2976 for (BYTE i = 16; i < 32; i++)
2977 {
2978 const UINT32 lut = CopyOffsetBitsLUT[i];
2979 WINPR_ASSERT(lut >= 7);
2980 for (size_t j = 0; j < 1ULL << (lut - 7ULL); j++)
2981 {
2982 size_t l = k++ + 2 + 256ull;
2983 context->HuffTableCopyOffset[l] = i;
2984 }
2985 }
2986
2987 if ((k + 256) > 1024)
2988 return -1;
2989
2990 return 1;
2991}
2992
2993void ncrush_context_reset(NCRUSH_CONTEXT* ncrush, BOOL flush)
2994{
2995 WINPR_ASSERT(ncrush);
2996
2997 ZeroMemory(&(ncrush->HistoryBuffer), sizeof(ncrush->HistoryBuffer));
2998 ZeroMemory(&(ncrush->OffsetCache), sizeof(ncrush->OffsetCache));
2999 ZeroMemory(&(ncrush->MatchTable), sizeof(ncrush->MatchTable));
3000 ZeroMemory(&(ncrush->HashTable), sizeof(ncrush->HashTable));
3001
3002 if (flush)
3003 ncrush->HistoryOffset = ncrush->HistoryBufferSize + 1;
3004 else
3005 ncrush->HistoryOffset = 0;
3006
3007 ncrush->HistoryPtr = &(ncrush->HistoryBuffer[ncrush->HistoryOffset]);
3008}
3009
3010NCRUSH_CONTEXT* ncrush_context_new(BOOL Compressor)
3011{
3012 NCRUSH_CONTEXT* ncrush = (NCRUSH_CONTEXT*)calloc(1, sizeof(NCRUSH_CONTEXT));
3013
3014 if (!ncrush)
3015 goto fail;
3016
3017 ncrush->Compressor = Compressor;
3018 ncrush->HistoryBufferSize = 65536;
3019 ncrush->HistoryEndOffset = ncrush->HistoryBufferSize - 1;
3020 ncrush->HistoryBufferFence = 0xABABABAB;
3021 ncrush->HistoryOffset = 0;
3022 ncrush->HistoryPtr = &(ncrush->HistoryBuffer[ncrush->HistoryOffset]);
3023
3024 if (ncrush_generate_tables(ncrush) < 0)
3025 {
3026 WLog_DBG(TAG, "ncrush_context_new: failed to initialize tables");
3027 goto fail;
3028 }
3029
3030 ncrush_context_reset(ncrush, FALSE);
3031
3032 return ncrush;
3033fail:
3034 ncrush_context_free(ncrush);
3035 return NULL;
3036}
3037
3038void ncrush_context_free(NCRUSH_CONTEXT* ncrush)
3039{
3040 free(ncrush);
3041}