Coverage Report

Created: 2025-07-01 06:46

/src/FreeRDP/libfreerdp/codec/ncrush.c
Line
Count
Source (jump to first uncovered line)
1
/**
2
 * FreeRDP: A Remote Desktop Protocol Implementation
3
 * NCrush (RDP6) Bulk Data Compression
4
 *
5
 * Copyright 2014 Marc-Andre Moreau <marcandre.moreau@gmail.com>
6
 * Copyright 2017 Armin Novak <armin.novak@thincast.com>
7
 * Copyright 2017 Thincast Technologies GmbH
8
 *
9
 * Licensed under the Apache License, Version 2.0 (the "License");
10
 * you may not use this file except in compliance with the License.
11
 * You may obtain a copy of the License at
12
 *
13
 *     http://www.apache.org/licenses/LICENSE-2.0
14
 *
15
 * Unless required by applicable law or agreed to in writing, software
16
 * distributed under the License is distributed on an "AS IS" BASIS,
17
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18
 * See the License for the specific language governing permissions and
19
 * limitations under the License.
20
 */
21
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
37
struct 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
53
static 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
739
static 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
785
static 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
827
static 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
1124
static 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
1715
static 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
1750
static 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
1785
static 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
1820
static 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
1855
static 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
1888
static 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
1921
static INLINE UINT16 get_word(const BYTE* data)
1922
0
{
1923
0
  UINT16 tmp = 0;
1924
1925
0
  WINPR_ASSERT(data);
1926
0
  tmp = *data++;
1927
0
  tmp |= *data << 8;
1928
0
  return tmp;
1929
0
}
1930
1931
static INLINE UINT32 get_dword(const BYTE* data)
1932
0
{
1933
0
  UINT32 tmp = 0;
1934
0
  WINPR_ASSERT(data);
1935
0
  tmp = *data++;
1936
0
  tmp |= (UINT32)*data++ << 8U;
1937
0
  tmp |= (UINT32)*data++ << 16U;
1938
0
  tmp |= (UINT32)*data++ << 24U;
1939
0
  return tmp;
1940
0
}
1941
1942
static INLINE BOOL NCrushFetchBits(const BYTE** SrcPtr, const BYTE** SrcEnd, INT32* nbits,
1943
                                   UINT32* bits)
1944
0
{
1945
0
  WINPR_ASSERT(SrcPtr);
1946
0
  WINPR_ASSERT(SrcEnd);
1947
0
  WINPR_ASSERT(nbits);
1948
0
  WINPR_ASSERT(bits);
1949
1950
0
  if (*nbits < 16)
1951
0
  {
1952
0
    if ((*SrcPtr + 1) >= *SrcEnd)
1953
0
    {
1954
0
      if (*SrcPtr >= *SrcEnd)
1955
0
      {
1956
0
        if (*nbits < 0)
1957
0
          return FALSE;
1958
0
      }
1959
0
      else
1960
0
      {
1961
0
        const UINT32 src = *(*SrcPtr)++;
1962
0
        const UINT32 val = (src << *nbits);
1963
0
        *bits += val;
1964
0
        *nbits += 8;
1965
0
      }
1966
0
    }
1967
0
    else
1968
0
    {
1969
0
      UINT32 tmp = *(*SrcPtr)++;
1970
0
      tmp |= ((*(*SrcPtr)++) << 8) & 0xFF00;
1971
0
      *bits += (tmp << *nbits) & UINT32_MAX;
1972
0
      *nbits += 16;
1973
0
    }
1974
0
  }
1975
1976
0
  return TRUE;
1977
0
}
1978
1979
static INLINE void NCrushWriteStart(UINT32* bits, UINT32* offset, UINT32* accumulator)
1980
0
{
1981
0
  WINPR_ASSERT(bits);
1982
0
  WINPR_ASSERT(offset);
1983
0
  WINPR_ASSERT(accumulator);
1984
1985
0
  *bits = 0;
1986
0
  *offset = 0;
1987
0
  *accumulator = 0;
1988
0
}
1989
1990
static INLINE void NCrushWriteBits(BYTE** DstPtr, UINT32* accumulator, UINT32* offset, UINT32 _bits,
1991
                                   UINT32 _nbits)
1992
0
{
1993
0
  WINPR_ASSERT(DstPtr);
1994
0
  WINPR_ASSERT(accumulator);
1995
0
  WINPR_ASSERT(offset);
1996
1997
0
  *accumulator |= _bits << *offset;
1998
0
  *offset += _nbits;
1999
2000
0
  if (*offset >= 16)
2001
0
  {
2002
0
    *(*DstPtr)++ = (*accumulator & 0xFF);
2003
0
    *(*DstPtr)++ = ((*accumulator >> 8) & 0xFF);
2004
0
    *accumulator >>= 16;
2005
0
    *offset -= 16;
2006
0
  }
2007
0
}
2008
2009
static INLINE void NCrushWriteFinish(BYTE** DstPtr, UINT32 accumulator)
2010
0
{
2011
0
  WINPR_ASSERT(DstPtr);
2012
2013
0
  *(*DstPtr)++ = accumulator & 0xFF;
2014
0
  *(*DstPtr)++ = (accumulator >> 8) & 0xFF;
2015
0
}
2016
2017
int ncrush_decompress(NCRUSH_CONTEXT* ncrush, const BYTE* pSrcData, UINT32 SrcSize,
2018
                      const BYTE** ppDstData, UINT32* pDstSize, UINT32 flags)
2019
0
{
2020
0
  UINT32 index = 0;
2021
0
  BYTE Literal = 0;
2022
0
  UINT32 IndexLEC = 0;
2023
0
  UINT32 BitLength = 0;
2024
0
  UINT32 CopyOffset = 0;
2025
0
  UINT32 CopyLength = 0;
2026
0
  UINT32 OldCopyOffset = 0;
2027
0
  const BYTE* CopyOffsetPtr = NULL;
2028
0
  UINT32 LengthOfMatch = 0;
2029
0
  UINT32 CopyOffsetIndex = 0;
2030
0
  UINT32 OffsetCacheIndex = 0;
2031
0
  UINT32 CopyOffsetBits = 0;
2032
0
  UINT32 CopyOffsetBase = 0;
2033
0
  UINT32 LengthOfMatchBits = 0;
2034
0
  UINT32 LengthOfMatchBase = 0;
2035
2036
0
  WINPR_ASSERT(ncrush);
2037
0
  WINPR_ASSERT(pSrcData);
2038
0
  WINPR_ASSERT(ppDstData);
2039
0
  WINPR_ASSERT(pDstSize);
2040
2041
0
  if (ncrush->HistoryEndOffset != 65535)
2042
0
    return -1001;
2043
2044
0
  BYTE* HistoryBuffer = ncrush->HistoryBuffer;
2045
0
  const BYTE* HistoryBufferEnd = &HistoryBuffer[ncrush->HistoryEndOffset];
2046
2047
0
  if (flags & PACKET_AT_FRONT)
2048
0
  {
2049
0
    if ((ncrush->HistoryPtr - 32768) <= HistoryBuffer)
2050
0
      return -1002;
2051
2052
0
    MoveMemory(HistoryBuffer, (ncrush->HistoryPtr - 32768), 32768);
2053
0
    ncrush->HistoryPtr = &(HistoryBuffer[32768]);
2054
0
    ZeroMemory(&HistoryBuffer[32768], 32768);
2055
0
  }
2056
2057
0
  if (flags & PACKET_FLUSHED)
2058
0
  {
2059
0
    ncrush->HistoryPtr = HistoryBuffer;
2060
0
    ZeroMemory(HistoryBuffer, sizeof(ncrush->HistoryBuffer));
2061
0
    ZeroMemory(&(ncrush->OffsetCache), sizeof(ncrush->OffsetCache));
2062
0
  }
2063
2064
0
  BYTE* HistoryPtr = ncrush->HistoryPtr;
2065
2066
0
  if (!(flags & PACKET_COMPRESSED))
2067
0
  {
2068
0
    *ppDstData = pSrcData;
2069
0
    *pDstSize = SrcSize;
2070
0
    return 1;
2071
0
  }
2072
2073
0
  if (SrcSize < 4)
2074
0
  {
2075
0
    WLog_ERR(TAG, "Input size short: SrcSize %" PRIu32 " < 4", SrcSize);
2076
0
    return -1;
2077
0
  }
2078
2079
0
  const BYTE* SrcEnd = &pSrcData[SrcSize];
2080
0
  const BYTE* SrcPtr = pSrcData + 4;
2081
2082
0
  INT32 nbits = 32;
2083
0
  UINT32 bits = get_dword(pSrcData);
2084
0
  while (1)
2085
0
  {
2086
0
    while (1)
2087
0
    {
2088
0
      const UINT16 Mask = get_word(&HuffTableMask[29]);
2089
0
      const UINT32 MaskedBits = bits & Mask;
2090
0
      if (MaskedBits >= ARRAYSIZE(HuffTableLEC))
2091
0
        return -1;
2092
0
      IndexLEC = HuffTableLEC[MaskedBits] & 0xFFF;
2093
0
      BitLength = HuffTableLEC[MaskedBits] >> 12;
2094
0
      bits >>= BitLength;
2095
0
      nbits -= WINPR_ASSERTING_INT_CAST(int32_t, BitLength);
2096
2097
0
      if (!NCrushFetchBits(&SrcPtr, &SrcEnd, &nbits, &bits))
2098
0
        return -1;
2099
2100
0
      if (IndexLEC >= 256)
2101
0
        break;
2102
2103
0
      if (HistoryPtr >= HistoryBufferEnd)
2104
0
      {
2105
0
        WLog_ERR(TAG, "ncrush_decompress error: HistoryPtr (%p) >= HistoryBufferEnd (%p)",
2106
0
                 (const void*)HistoryPtr, (const void*)HistoryBufferEnd);
2107
0
        return -1003;
2108
0
      }
2109
2110
0
      Literal = (HuffTableLEC[MaskedBits] & 0xFF);
2111
0
      *HistoryPtr++ = Literal;
2112
0
    }
2113
2114
0
    if (IndexLEC == 256)
2115
0
      break; /* EOS */
2116
2117
0
    CopyOffsetIndex = IndexLEC - 257;
2118
2119
0
    if (CopyOffsetIndex >= 32)
2120
0
    {
2121
0
      OffsetCacheIndex = IndexLEC - 289;
2122
2123
0
      if (OffsetCacheIndex >= 4)
2124
0
        return -1004;
2125
2126
0
      {
2127
0
        CopyOffset = ncrush->OffsetCache[OffsetCacheIndex];
2128
0
        const UINT16 Mask = get_word(&HuffTableMask[21]);
2129
0
        const UINT32 MaskedBits = bits & Mask;
2130
0
        if (MaskedBits >= ARRAYSIZE(HuffTableLOM))
2131
0
          return -1;
2132
0
        LengthOfMatch = HuffTableLOM[MaskedBits] & 0xFFF;
2133
0
        BitLength = HuffTableLOM[MaskedBits] >> 12;
2134
0
        bits >>= BitLength;
2135
0
        nbits -= WINPR_ASSERTING_INT_CAST(int32_t, BitLength);
2136
0
      }
2137
2138
0
      if (!NCrushFetchBits(&SrcPtr, &SrcEnd, &nbits, &bits))
2139
0
        return -1;
2140
2141
0
      if (LengthOfMatch >= ARRAYSIZE(LOMBitsLUT))
2142
0
        return -1;
2143
2144
0
      LengthOfMatchBits = LOMBitsLUT[LengthOfMatch];
2145
2146
0
      if (LengthOfMatch >= ARRAYSIZE(LOMBaseLUT))
2147
0
        return -1;
2148
0
      LengthOfMatchBase = LOMBaseLUT[LengthOfMatch];
2149
2150
0
      if (LengthOfMatchBits)
2151
0
      {
2152
0
        const size_t idx = (2ull * LengthOfMatchBits) + 3ull;
2153
0
        if (idx >= ARRAYSIZE(HuffTableMask))
2154
0
          return -1;
2155
2156
0
        const UINT16 Mask = get_word(&HuffTableMask[idx]);
2157
0
        const UINT32 MaskedBits = bits & Mask;
2158
0
        bits >>= LengthOfMatchBits;
2159
0
        nbits -= WINPR_ASSERTING_INT_CAST(int32_t, LengthOfMatchBits);
2160
0
        LengthOfMatchBase += MaskedBits;
2161
2162
0
        if (!NCrushFetchBits(&SrcPtr, &SrcEnd, &nbits, &bits))
2163
0
          return -1;
2164
0
      }
2165
2166
0
      OldCopyOffset = ncrush->OffsetCache[OffsetCacheIndex];
2167
0
      ncrush->OffsetCache[OffsetCacheIndex] = ncrush->OffsetCache[0];
2168
0
      ncrush->OffsetCache[0] = OldCopyOffset;
2169
0
    }
2170
0
    else
2171
0
    {
2172
0
      if (CopyOffsetIndex >= ARRAYSIZE(CopyOffsetBitsLUT))
2173
0
        return -1;
2174
2175
0
      CopyOffsetBits = CopyOffsetBitsLUT[CopyOffsetIndex];
2176
2177
0
      if (CopyOffsetIndex >= ARRAYSIZE(CopyOffsetBaseLUT))
2178
0
        return -1;
2179
0
      CopyOffsetBase = CopyOffsetBaseLUT[CopyOffsetIndex];
2180
0
      CopyOffset = CopyOffsetBase - 1;
2181
2182
0
      if (CopyOffsetBits)
2183
0
      {
2184
0
        const size_t idx = (2ull * CopyOffsetBits) + 3ull;
2185
0
        if (idx >= ARRAYSIZE(HuffTableMask))
2186
0
          return -1;
2187
2188
0
        {
2189
0
          const UINT16 Mask = get_word(&HuffTableMask[idx]);
2190
0
          const UINT32 MaskedBits = bits & Mask;
2191
0
          const UINT32 tmp = CopyOffsetBase + MaskedBits;
2192
0
          if (tmp < 1)
2193
0
            return -1;
2194
0
          CopyOffset = tmp - 1;
2195
0
        }
2196
0
        bits >>= CopyOffsetBits;
2197
0
        nbits -= WINPR_ASSERTING_INT_CAST(int32_t, CopyOffsetBits);
2198
2199
0
        if (!NCrushFetchBits(&SrcPtr, &SrcEnd, &nbits, &bits))
2200
0
          return -1;
2201
0
      }
2202
0
      {
2203
0
        const UINT16 Mask = get_word(&HuffTableMask[21]);
2204
0
        const UINT32 MaskedBits = bits & Mask;
2205
0
        if (MaskedBits >= ARRAYSIZE(HuffTableLOM))
2206
0
          return -1;
2207
2208
0
        LengthOfMatch = HuffTableLOM[MaskedBits] & 0xFFF;
2209
0
        BitLength = HuffTableLOM[MaskedBits] >> 12;
2210
0
        bits >>= BitLength;
2211
0
        nbits -= WINPR_ASSERTING_INT_CAST(int32_t, BitLength);
2212
0
      }
2213
0
      if (!NCrushFetchBits(&SrcPtr, &SrcEnd, &nbits, &bits))
2214
0
        return -1;
2215
2216
0
      if (LengthOfMatch >= ARRAYSIZE(LOMBitsLUT))
2217
0
        return -1;
2218
2219
0
      LengthOfMatchBits = LOMBitsLUT[LengthOfMatch];
2220
2221
0
      if (LengthOfMatch >= ARRAYSIZE(LOMBaseLUT))
2222
0
        return -1;
2223
0
      LengthOfMatchBase = LOMBaseLUT[LengthOfMatch];
2224
2225
0
      if (LengthOfMatchBits)
2226
0
      {
2227
0
        const size_t idx = (2ull * LengthOfMatchBits) + 3ull;
2228
0
        if (idx >= ARRAYSIZE(HuffTableMask))
2229
0
          return -1;
2230
2231
0
        const UINT16 Mask = get_word(&HuffTableMask[idx]);
2232
0
        const UINT32 MaskedBits = bits & Mask;
2233
0
        bits >>= LengthOfMatchBits;
2234
0
        nbits -= WINPR_ASSERTING_INT_CAST(int32_t, LengthOfMatchBits);
2235
0
        LengthOfMatchBase += MaskedBits;
2236
2237
0
        if (!NCrushFetchBits(&SrcPtr, &SrcEnd, &nbits, &bits))
2238
0
          return -1;
2239
0
      }
2240
2241
0
      ncrush->OffsetCache[3] = ncrush->OffsetCache[2];
2242
0
      ncrush->OffsetCache[2] = ncrush->OffsetCache[1];
2243
0
      ncrush->OffsetCache[1] = ncrush->OffsetCache[0];
2244
0
      ncrush->OffsetCache[0] = CopyOffset;
2245
0
    }
2246
2247
0
    CopyOffsetPtr = &HistoryBuffer[(HistoryPtr - HistoryBuffer - CopyOffset) & 0xFFFF];
2248
0
    LengthOfMatch = LengthOfMatchBase;
2249
2250
0
    if (LengthOfMatch < 2)
2251
0
      return -1005;
2252
2253
0
    if ((CopyOffsetPtr >= (HistoryBufferEnd - LengthOfMatch)) ||
2254
0
        (HistoryPtr >= (HistoryBufferEnd - LengthOfMatch)))
2255
0
      return -1006;
2256
2257
0
    CopyOffsetPtr = HistoryPtr - CopyOffset;
2258
0
    index = 0;
2259
0
    CopyLength = (LengthOfMatch > CopyOffset) ? CopyOffset : LengthOfMatch;
2260
2261
0
    if (CopyOffsetPtr >= HistoryBuffer)
2262
0
    {
2263
0
      while (CopyLength > 0)
2264
0
      {
2265
0
        *HistoryPtr++ = *CopyOffsetPtr++;
2266
0
        CopyLength--;
2267
0
      }
2268
2269
0
      while (LengthOfMatch > CopyOffset)
2270
0
      {
2271
0
        index = ((index >= CopyOffset)) ? 0 : index;
2272
0
        *HistoryPtr++ = *(CopyOffsetPtr + index++);
2273
0
        LengthOfMatch--;
2274
0
      }
2275
0
    }
2276
0
    else
2277
0
    {
2278
0
      CopyOffsetPtr = HistoryBufferEnd - (CopyOffset - (HistoryPtr - HistoryBuffer));
2279
0
      CopyOffsetPtr++;
2280
2281
0
      while (CopyLength && (CopyOffsetPtr <= HistoryBufferEnd))
2282
0
      {
2283
0
        *HistoryPtr++ = *CopyOffsetPtr++;
2284
0
        CopyLength--;
2285
0
      }
2286
2287
0
      CopyOffsetPtr = HistoryBuffer;
2288
2289
0
      while (LengthOfMatch > CopyOffset)
2290
0
      {
2291
0
        index = ((index >= CopyOffset)) ? 0 : index;
2292
0
        *HistoryPtr++ = *(CopyOffsetPtr + index++);
2293
0
        LengthOfMatch--;
2294
0
      }
2295
0
    }
2296
2297
0
    LengthOfMatch = LengthOfMatchBase;
2298
2299
0
    if (LengthOfMatch == 2)
2300
0
      continue;
2301
0
  }
2302
2303
0
  if (IndexLEC != 256)
2304
0
    return -1;
2305
2306
0
  if (ncrush->HistoryBufferFence != 0xABABABAB)
2307
0
  {
2308
0
    WLog_ERR(TAG, "NCrushDecompress: history buffer fence was overwritten, potential buffer "
2309
0
                  "overflow detected!");
2310
0
    return -1007;
2311
0
  }
2312
2313
0
  const intptr_t hsize = HistoryPtr - ncrush->HistoryPtr;
2314
0
  WINPR_ASSERT(hsize >= 0);
2315
0
  WINPR_ASSERT(hsize <= UINT32_MAX);
2316
0
  *pDstSize = (UINT32)hsize;
2317
0
  *ppDstData = ncrush->HistoryPtr;
2318
0
  ncrush->HistoryPtr = HistoryPtr;
2319
0
  return 1;
2320
0
}
2321
2322
static int ncrush_hash_table_add(NCRUSH_CONTEXT* ncrush, const BYTE* pSrcData, UINT32 SrcSize,
2323
                                 UINT32 HistoryOffset)
2324
0
{
2325
0
  const BYTE* SrcPtr = pSrcData;
2326
0
  UINT32 Offset = HistoryOffset;
2327
0
  UINT32 EndOffset = Offset + SrcSize - 8;
2328
2329
0
  WINPR_ASSERT(ncrush);
2330
0
  WINPR_ASSERT(pSrcData);
2331
0
  WINPR_ASSERT(Offset + SrcSize >= 8);
2332
2333
0
  while (Offset < EndOffset)
2334
0
  {
2335
0
    const UINT16 Hash = ncrush->HashTable[get_word(SrcPtr)];
2336
0
    ncrush->HashTable[get_word(SrcPtr)] = WINPR_ASSERTING_INT_CAST(UINT16, Offset);
2337
0
    ncrush->MatchTable[Offset] = Hash;
2338
0
    SrcPtr++;
2339
0
    Offset++;
2340
0
  }
2341
2342
0
  return 1;
2343
0
}
2344
2345
static intptr_t ncrush_find_match_length(const BYTE* Ptr1, const BYTE* Ptr2, const BYTE* HistoryPtr)
2346
0
{
2347
0
  BYTE val1 = 0;
2348
0
  BYTE val2 = 0;
2349
0
  const BYTE* Ptr = Ptr1;
2350
2351
0
  WINPR_ASSERT(Ptr1);
2352
0
  WINPR_ASSERT(Ptr2);
2353
0
  WINPR_ASSERT(HistoryPtr);
2354
2355
0
  do
2356
0
  {
2357
0
    if (Ptr1 > HistoryPtr)
2358
0
      break;
2359
2360
0
    val1 = *Ptr1++;
2361
0
    val2 = *Ptr2++;
2362
0
  } while (val1 == val2);
2363
2364
0
  return Ptr1 - (Ptr + 1);
2365
0
}
2366
2367
static int ncrush_find_best_match(NCRUSH_CONTEXT* ncrush, UINT16 HistoryOffset,
2368
                                  UINT32* pMatchOffset)
2369
0
{
2370
0
  int Length = 0;
2371
2372
0
  WINPR_ASSERT(ncrush);
2373
0
  WINPR_ASSERT(pMatchOffset);
2374
2375
0
  if (!ncrush->MatchTable[HistoryOffset])
2376
0
    return -1;
2377
2378
0
  int MatchLength = 2;
2379
0
  UINT16 Offset = HistoryOffset;
2380
0
  BYTE* HistoryBuffer = (BYTE*)ncrush->HistoryBuffer;
2381
2382
0
  ncrush->MatchTable[0] = HistoryOffset;
2383
0
  UINT16 MatchOffset = ncrush->MatchTable[HistoryOffset];
2384
0
  UINT16 NextOffset = ncrush->MatchTable[Offset];
2385
0
  BYTE* MatchPtr = &HistoryBuffer[MatchLength];
2386
2387
0
  for (int i = 0; i < 4; i++)
2388
0
  {
2389
0
    int j = -1;
2390
2391
0
    if (j < 0)
2392
0
    {
2393
0
      Offset = ncrush->MatchTable[NextOffset];
2394
2395
0
      if (MatchPtr[NextOffset] == HistoryBuffer[HistoryOffset + MatchLength])
2396
0
        j = 0;
2397
0
    }
2398
2399
0
    if (j < 0)
2400
0
    {
2401
0
      NextOffset = ncrush->MatchTable[Offset];
2402
2403
0
      if (MatchPtr[Offset] == HistoryBuffer[HistoryOffset + MatchLength])
2404
0
        j = 1;
2405
0
    }
2406
2407
0
    if (j < 0)
2408
0
    {
2409
0
      Offset = ncrush->MatchTable[NextOffset];
2410
2411
0
      if (MatchPtr[NextOffset] == HistoryBuffer[HistoryOffset + MatchLength])
2412
0
        j = 2;
2413
0
    }
2414
2415
0
    if (j < 0)
2416
0
    {
2417
0
      NextOffset = ncrush->MatchTable[Offset];
2418
2419
0
      if (MatchPtr[Offset] == HistoryBuffer[HistoryOffset + MatchLength])
2420
0
        j = 3;
2421
0
    }
2422
2423
0
    if (j < 0)
2424
0
    {
2425
0
      Offset = ncrush->MatchTable[NextOffset];
2426
2427
0
      if (MatchPtr[NextOffset] == HistoryBuffer[HistoryOffset + MatchLength])
2428
0
        j = 4;
2429
0
    }
2430
2431
0
    if (j < 0)
2432
0
    {
2433
0
      NextOffset = ncrush->MatchTable[Offset];
2434
2435
0
      if (MatchPtr[Offset] == HistoryBuffer[HistoryOffset + MatchLength])
2436
0
        j = 5;
2437
0
    }
2438
2439
0
    if (j >= 0)
2440
0
    {
2441
0
      if ((j % 2) == 0)
2442
0
        Offset = NextOffset;
2443
2444
0
      if ((Offset != HistoryOffset) && Offset)
2445
0
      {
2446
0
        const intptr_t len =
2447
0
            ncrush_find_match_length(&HistoryBuffer[HistoryOffset + 2],
2448
0
                                     &HistoryBuffer[Offset + 2], ncrush->HistoryPtr);
2449
0
        WINPR_ASSERT(len < INT_MAX - 2);
2450
0
        WINPR_ASSERT(len > INT_MIN + 2);
2451
2452
0
        Length = (int)len + 2;
2453
2454
0
        if (Length < 2)
2455
0
          return -1;
2456
2457
0
        if (Length > 16)
2458
0
          break;
2459
2460
0
        if (Length > MatchLength)
2461
0
        {
2462
0
          MatchLength = Length;
2463
0
          MatchOffset = Offset;
2464
0
        }
2465
2466
0
        if ((Length <= MatchLength) ||
2467
0
            (&HistoryBuffer[HistoryOffset + 2] < ncrush->HistoryPtr))
2468
0
        {
2469
0
          NextOffset = ncrush->MatchTable[Offset];
2470
0
          MatchPtr = &HistoryBuffer[MatchLength];
2471
0
          continue;
2472
0
        }
2473
0
      }
2474
2475
0
      break;
2476
0
    }
2477
0
  }
2478
2479
0
  ncrush->MatchTable[0] = 0;
2480
0
  *pMatchOffset = MatchOffset;
2481
0
  return MatchLength;
2482
0
}
2483
2484
static int ncrush_move_encoder_windows(NCRUSH_CONTEXT* ncrush, BYTE* HistoryPtr)
2485
0
{
2486
0
  WINPR_ASSERT(ncrush);
2487
0
  WINPR_ASSERT(HistoryPtr);
2488
2489
0
  const size_t history_half = ARRAYSIZE(ncrush->HistoryBuffer) / 2;
2490
0
  if (HistoryPtr < &ncrush->HistoryBuffer[history_half])
2491
0
    return -1;
2492
2493
0
  if (HistoryPtr > &ncrush->HistoryBuffer[ARRAYSIZE(ncrush->HistoryBuffer)])
2494
0
    return -1;
2495
2496
0
  MoveMemory(ncrush->HistoryBuffer, HistoryPtr - history_half, history_half * sizeof(BYTE));
2497
0
  const intptr_t hsize = HistoryPtr - history_half - ncrush->HistoryBuffer;
2498
0
  WINPR_ASSERT(hsize <= UINT16_MAX);
2499
0
  WINPR_ASSERT(hsize >= 0);
2500
0
  INT32 HistoryOffset = (INT32)hsize;
2501
2502
0
  for (size_t i = 0; i < ARRAYSIZE(ncrush->HashTable); i++)
2503
0
  {
2504
0
    const INT32 NewHash = ncrush->HashTable[i] - HistoryOffset;
2505
0
    ncrush->HashTable[i] = (NewHash <= 0) ? 0 : WINPR_ASSERTING_INT_CAST(UINT16, NewHash);
2506
0
  }
2507
2508
0
  const size_t match_half = ARRAYSIZE(ncrush->MatchTable) / 2;
2509
0
  for (size_t j = 0; j < match_half; j++)
2510
0
  {
2511
0
    if ((size_t)HistoryOffset + j >= ARRAYSIZE(ncrush->MatchTable))
2512
0
      continue;
2513
2514
0
    const INT32 NewMatch = ncrush->MatchTable[(size_t)HistoryOffset + j] - HistoryOffset;
2515
0
    ncrush->MatchTable[j] = (NewMatch <= 0) ? 0 : WINPR_ASSERTING_INT_CAST(UINT16, NewMatch);
2516
0
  }
2517
2518
0
  ZeroMemory(&ncrush->MatchTable[match_half], match_half * sizeof(UINT16));
2519
0
  return 1;
2520
0
}
2521
2522
int ncrush_compress(NCRUSH_CONTEXT* ncrush, const BYTE* pSrcData, UINT32 SrcSize, BYTE* pDstBuffer,
2523
                    const BYTE** ppDstData, UINT32* pDstSize, UINT32* pFlags)
2524
0
{
2525
0
  BYTE Literal = 0;
2526
0
  const BYTE* SrcPtr = NULL;
2527
0
  BYTE* DstPtr = NULL;
2528
0
  UINT32 bits = 0;
2529
0
  UINT32 offset = 0;
2530
0
  UINT32 MaskedBits = 0;
2531
0
  UINT32 accumulator = 0;
2532
0
  const BYTE* SrcEndPtr = NULL;
2533
0
  BYTE* DstEndPtr = NULL;
2534
0
  BYTE* HistoryPtr = NULL;
2535
0
  BYTE* pDstData = NULL;
2536
0
  UINT32 DstSize = 0;
2537
0
  BOOL PacketAtFront = FALSE;
2538
0
  BOOL PacketFlushed = FALSE;
2539
0
  UINT32 MatchLength = 0;
2540
0
  UINT32 IndexLEC = 0;
2541
0
  UINT32 IndexLOM = 0;
2542
0
  UINT32 IndexCO = 0;
2543
0
  UINT32 CodeLEC = 0;
2544
0
  UINT32 BitLength = 0;
2545
0
  UINT32 CopyOffset = 0;
2546
0
  UINT32 MatchOffset = 0;
2547
0
  UINT32 OldCopyOffset = 0;
2548
0
  UINT32* OffsetCache = NULL;
2549
0
  UINT32 OffsetCacheIndex = 0;
2550
0
  UINT32 HistoryOffset = 0;
2551
0
  BYTE* HistoryBuffer = NULL;
2552
0
  UINT32 HistoryBufferSize = 0;
2553
0
  BYTE* HistoryBufferEndPtr = NULL;
2554
0
  UINT32 CopyOffsetIndex = 0;
2555
0
  UINT32 CopyOffsetBits = 0;
2556
0
  UINT32 CompressionLevel = 2;
2557
2558
0
  WINPR_ASSERT(ncrush);
2559
2560
0
  WINPR_ASSERT(ncrush);
2561
0
  WINPR_ASSERT(pSrcData);
2562
0
  WINPR_ASSERT(pDstBuffer);
2563
0
  WINPR_ASSERT(ppDstData);
2564
0
  WINPR_ASSERT(pDstSize);
2565
0
  WINPR_ASSERT(pFlags);
2566
2567
0
  HistoryBuffer = ncrush->HistoryBuffer;
2568
0
  *pFlags = 0;
2569
2570
0
  if ((SrcSize + ncrush->HistoryOffset) >= 65529)
2571
0
  {
2572
0
    if (ncrush->HistoryOffset == (ncrush->HistoryBufferSize + 1))
2573
0
    {
2574
0
      ncrush->HistoryOffset = 0;
2575
0
      ncrush->HistoryPtr = HistoryBuffer;
2576
0
      PacketFlushed = TRUE;
2577
0
    }
2578
0
    else
2579
0
    {
2580
0
      if (ncrush_move_encoder_windows(ncrush, &(HistoryBuffer[ncrush->HistoryOffset])) < 0)
2581
0
        return -1001;
2582
2583
0
      ncrush->HistoryPtr = &HistoryBuffer[32768];
2584
0
      ncrush->HistoryOffset = 32768;
2585
0
      PacketAtFront = TRUE;
2586
0
    }
2587
0
  }
2588
0
  else
2589
0
  {
2590
0
    *pFlags = 0;
2591
0
  }
2592
2593
0
  pDstData = pDstBuffer;
2594
0
  *ppDstData = pDstBuffer;
2595
2596
0
  if (!pDstData)
2597
0
    return -1002;
2598
2599
0
  DstSize = *pDstSize;
2600
2601
0
  if (DstSize < SrcSize)
2602
0
    return -1003;
2603
2604
0
  DstSize = SrcSize;
2605
0
  NCrushWriteStart(&bits, &offset, &accumulator);
2606
0
  DstPtr = pDstData;
2607
0
  SrcPtr = pSrcData;
2608
0
  SrcEndPtr = &pSrcData[SrcSize];
2609
0
  DstEndPtr = &pDstData[DstSize - 1];
2610
0
  OffsetCache = ncrush->OffsetCache;
2611
0
  HistoryPtr = &HistoryBuffer[ncrush->HistoryOffset];
2612
0
  HistoryBufferEndPtr = &HistoryBuffer[65536];
2613
0
  HistoryBufferSize = ncrush->HistoryBufferSize;
2614
0
  CopyOffset = 0;
2615
0
  MatchOffset = 0;
2616
0
  const intptr_t thsize = HistoryPtr - HistoryBuffer;
2617
2618
0
  ncrush_hash_table_add(ncrush, pSrcData, SrcSize, WINPR_ASSERTING_INT_CAST(UINT32, thsize));
2619
0
  CopyMemory(HistoryPtr, pSrcData, SrcSize);
2620
0
  ncrush->HistoryPtr = &HistoryPtr[SrcSize];
2621
2622
0
  while (SrcPtr < (SrcEndPtr - 2))
2623
0
  {
2624
0
    MatchLength = 0;
2625
0
    const intptr_t hsize = HistoryPtr - HistoryBuffer;
2626
0
    WINPR_ASSERT(hsize <= UINT32_MAX);
2627
0
    WINPR_ASSERT(hsize >= 0);
2628
0
    HistoryOffset = (UINT32)hsize;
2629
2630
0
    if (ncrush->HistoryPtr && (HistoryPtr > ncrush->HistoryPtr))
2631
0
      return -1;
2632
2633
0
    if (HistoryOffset >= 65536)
2634
0
      return -1004;
2635
2636
0
    if (ncrush->MatchTable[HistoryOffset])
2637
0
    {
2638
0
      int rc = 0;
2639
2640
0
      MatchOffset = 0;
2641
0
      rc = ncrush_find_best_match(ncrush, WINPR_ASSERTING_INT_CAST(UINT16, HistoryOffset),
2642
0
                                  &MatchOffset);
2643
2644
0
      if (rc < 0)
2645
0
        return -1005;
2646
0
      MatchLength = (UINT32)rc;
2647
0
    }
2648
2649
0
    if (MatchLength)
2650
0
      CopyOffset = (HistoryBufferSize - 1) & (HistoryPtr - &HistoryBuffer[MatchOffset]);
2651
2652
0
    if ((MatchLength == 2) && (CopyOffset >= 64))
2653
0
      MatchLength = 0;
2654
2655
0
    if (MatchLength == 0)
2656
0
    {
2657
      /* Literal */
2658
0
      Literal = *SrcPtr++;
2659
0
      HistoryPtr++;
2660
2661
0
      if ((DstPtr + 2) > DstEndPtr) /* PACKET_FLUSH #1 */
2662
0
      {
2663
0
        ncrush_context_reset(ncrush, TRUE);
2664
0
        *pFlags = PACKET_FLUSHED;
2665
0
        *pFlags |= CompressionLevel;
2666
0
        *ppDstData = pSrcData;
2667
0
        *pDstSize = SrcSize;
2668
0
        return 1;
2669
0
      }
2670
2671
0
      IndexLEC = Literal;
2672
0
      if (IndexLEC >= ARRAYSIZE(HuffLengthLEC))
2673
0
        return -1;
2674
0
      BitLength = HuffLengthLEC[IndexLEC];
2675
2676
0
      if (IndexLEC * 2ull >= ARRAYSIZE(HuffCodeLEC))
2677
0
        return -1;
2678
0
      CodeLEC = get_word(&HuffCodeLEC[2ULL * IndexLEC]);
2679
2680
0
      if (BitLength > 15)
2681
0
        return -1006;
2682
2683
0
      NCrushWriteBits(&DstPtr, &accumulator, &offset, CodeLEC, BitLength);
2684
0
    }
2685
0
    else
2686
0
    {
2687
0
      HistoryPtr += MatchLength;
2688
0
      SrcPtr += MatchLength;
2689
2690
0
      if (!MatchLength)
2691
0
        return -1007;
2692
2693
0
      if ((DstPtr + 8) > DstEndPtr) /* PACKET_FLUSH #2 */
2694
0
      {
2695
0
        ncrush_context_reset(ncrush, TRUE);
2696
0
        *pFlags = PACKET_FLUSHED;
2697
0
        *pFlags |= CompressionLevel;
2698
0
        *ppDstData = pSrcData;
2699
0
        *pDstSize = SrcSize;
2700
0
        return 1;
2701
0
      }
2702
2703
0
      OffsetCacheIndex = 5;
2704
2705
0
      if ((CopyOffset == OffsetCache[0]) || (CopyOffset == OffsetCache[1]) ||
2706
0
          (CopyOffset == OffsetCache[2]) || (CopyOffset == OffsetCache[3]))
2707
0
      {
2708
0
        if (CopyOffset == OffsetCache[3])
2709
0
        {
2710
0
          OldCopyOffset = OffsetCache[3];
2711
0
          OffsetCache[3] = OffsetCache[0];
2712
0
          OffsetCache[0] = OldCopyOffset;
2713
0
          OffsetCacheIndex = 3;
2714
0
        }
2715
0
        else
2716
0
        {
2717
0
          if (CopyOffset == OffsetCache[2])
2718
0
          {
2719
0
            OldCopyOffset = OffsetCache[2];
2720
0
            OffsetCache[2] = OffsetCache[0];
2721
0
            OffsetCache[0] = OldCopyOffset;
2722
0
            OffsetCacheIndex = 2;
2723
0
          }
2724
0
          else
2725
0
          {
2726
0
            if (CopyOffset == OffsetCache[1])
2727
0
            {
2728
0
              OldCopyOffset = OffsetCache[1];
2729
0
              OffsetCache[1] = OffsetCache[0];
2730
0
              OffsetCache[0] = OldCopyOffset;
2731
0
              OffsetCacheIndex = 1;
2732
0
            }
2733
0
            else
2734
0
            {
2735
0
              if (CopyOffset == OffsetCache[0])
2736
0
              {
2737
0
                OffsetCacheIndex = 0;
2738
0
              }
2739
0
            }
2740
0
          }
2741
0
        }
2742
0
      }
2743
0
      else
2744
0
      {
2745
0
        OffsetCache[3] = OffsetCache[2];
2746
0
        OffsetCache[2] = OffsetCache[1];
2747
0
        OffsetCache[1] = OffsetCache[0];
2748
0
        OffsetCache[0] = CopyOffset;
2749
0
      }
2750
2751
0
      if (OffsetCacheIndex >= 4)
2752
0
      {
2753
        /* CopyOffset not in OffsetCache */
2754
0
        if (CopyOffset >= 256)
2755
0
          bits = (CopyOffset >> 7) + 256;
2756
0
        else
2757
0
          bits = CopyOffset;
2758
2759
0
        CopyOffsetIndex = ncrush->HuffTableCopyOffset[bits + 2];
2760
2761
0
        if (CopyOffsetIndex >= ARRAYSIZE(CopyOffsetBitsLUT))
2762
0
          return -1;
2763
2764
0
        CopyOffsetBits = CopyOffsetBitsLUT[CopyOffsetIndex];
2765
0
        IndexLEC = 257 + CopyOffsetIndex;
2766
0
        if (IndexLEC >= ARRAYSIZE(HuffLengthLEC))
2767
0
          return -1;
2768
0
        BitLength = HuffLengthLEC[IndexLEC];
2769
2770
0
        if (IndexLEC * 2ull >= ARRAYSIZE(HuffCodeLEC))
2771
0
          return -1;
2772
0
        CodeLEC = get_word(&HuffCodeLEC[2ULL * IndexLEC]);
2773
2774
0
        if (BitLength > 15)
2775
0
          return -1008;
2776
2777
0
        if (CopyOffsetBits > 18)
2778
0
          return -1009;
2779
2780
0
        NCrushWriteBits(&DstPtr, &accumulator, &offset, CodeLEC, BitLength);
2781
0
        UINT16 Mask = WINPR_ASSERTING_INT_CAST(UINT16, (1 << CopyOffsetBits) - 1);
2782
0
        MaskedBits = CopyOffset & Mask;
2783
0
        NCrushWriteBits(&DstPtr, &accumulator, &offset, MaskedBits, CopyOffsetBits);
2784
2785
0
        if ((MatchLength - 2) >= 768)
2786
0
          IndexCO = 28;
2787
0
        else
2788
0
          IndexCO = ncrush->HuffTableLOM[MatchLength];
2789
2790
0
        if (IndexCO >= ARRAYSIZE(HuffLengthLOM))
2791
0
          return -1;
2792
0
        BitLength = HuffLengthLOM[IndexCO];
2793
2794
0
        if (IndexCO >= ARRAYSIZE(LOMBitsLUT))
2795
0
          return -1;
2796
0
        IndexLOM = LOMBitsLUT[IndexCO];
2797
2798
0
        if (IndexCO >= ARRAYSIZE(HuffCodeLOM))
2799
0
          return -1;
2800
0
        NCrushWriteBits(&DstPtr, &accumulator, &offset, HuffCodeLOM[IndexCO], BitLength);
2801
0
        Mask = WINPR_ASSERTING_INT_CAST(UINT16, (1 << IndexLOM) - 1);
2802
0
        MaskedBits = (MatchLength - 2) & Mask;
2803
0
        NCrushWriteBits(&DstPtr, &accumulator, &offset, MaskedBits, IndexLOM);
2804
2805
0
        if (IndexCO >= ARRAYSIZE(LOMBaseLUT))
2806
0
          return -1;
2807
0
        if ((MaskedBits + LOMBaseLUT[IndexCO]) != MatchLength)
2808
0
          return -1010;
2809
0
      }
2810
0
      else
2811
0
      {
2812
        /* CopyOffset in OffsetCache */
2813
0
        IndexLEC = 289 + OffsetCacheIndex;
2814
0
        if (IndexLEC >= ARRAYSIZE(HuffLengthLEC))
2815
0
          return -1;
2816
0
        BitLength = HuffLengthLEC[IndexLEC];
2817
0
        if (IndexLEC * 2ull >= ARRAYSIZE(HuffCodeLEC))
2818
0
          return -1;
2819
0
        CodeLEC = get_word(&HuffCodeLEC[2ULL * IndexLEC]);
2820
2821
0
        if (BitLength >= 15)
2822
0
          return -1011;
2823
2824
0
        NCrushWriteBits(&DstPtr, &accumulator, &offset, CodeLEC, BitLength);
2825
2826
0
        if ((MatchLength - 2) >= 768)
2827
0
          IndexCO = 28;
2828
0
        else
2829
0
          IndexCO = ncrush->HuffTableLOM[MatchLength];
2830
2831
0
        if (IndexCO >= ARRAYSIZE(HuffLengthLOM))
2832
0
          return -1;
2833
2834
0
        BitLength = HuffLengthLOM[IndexCO];
2835
2836
0
        if (IndexCO >= ARRAYSIZE(LOMBitsLUT))
2837
0
          return -1;
2838
0
        IndexLOM = LOMBitsLUT[IndexCO];
2839
2840
0
        if (IndexCO >= ARRAYSIZE(HuffCodeLOM))
2841
0
          return -1;
2842
0
        NCrushWriteBits(&DstPtr, &accumulator, &offset, HuffCodeLOM[IndexCO], BitLength);
2843
0
        const UINT16 Mask = WINPR_ASSERTING_INT_CAST(UINT16, (1 << IndexLOM) - 1);
2844
0
        MaskedBits = (MatchLength - 2) & Mask;
2845
0
        NCrushWriteBits(&DstPtr, &accumulator, &offset, MaskedBits, IndexLOM);
2846
2847
0
        if (IndexCO >= ARRAYSIZE(LOMBaseLUT))
2848
0
          return -1;
2849
0
        if ((MaskedBits + LOMBaseLUT[IndexCO]) != MatchLength)
2850
0
          return -1012;
2851
0
      }
2852
0
    }
2853
2854
0
    if (HistoryPtr >= HistoryBufferEndPtr)
2855
0
      return -1013;
2856
0
  }
2857
2858
0
  while (SrcPtr < SrcEndPtr)
2859
0
  {
2860
0
    if ((DstPtr + 2) > DstEndPtr) /* PACKET_FLUSH #3 */
2861
0
    {
2862
0
      ncrush_context_reset(ncrush, TRUE);
2863
0
      *pFlags = PACKET_FLUSHED;
2864
0
      *pFlags |= CompressionLevel;
2865
0
      *ppDstData = pSrcData;
2866
0
      *pDstSize = SrcSize;
2867
0
      return 1;
2868
0
    }
2869
2870
0
    Literal = *SrcPtr++;
2871
0
    HistoryPtr++;
2872
0
    IndexLEC = Literal;
2873
0
    if (IndexLEC >= ARRAYSIZE(HuffLengthLEC))
2874
0
      return -1;
2875
0
    if (IndexLEC * 2ull >= ARRAYSIZE(HuffCodeLEC))
2876
0
      return -1;
2877
0
    BitLength = HuffLengthLEC[IndexLEC];
2878
0
    CodeLEC = get_word(&HuffCodeLEC[2ULL * IndexLEC]);
2879
2880
0
    if (BitLength > 15)
2881
0
      return -1014;
2882
2883
0
    NCrushWriteBits(&DstPtr, &accumulator, &offset, CodeLEC, BitLength);
2884
0
  }
2885
2886
0
  if ((DstPtr + 4) >= DstEndPtr) /* PACKET_FLUSH #4 */
2887
0
  {
2888
0
    ncrush_context_reset(ncrush, TRUE);
2889
0
    *pFlags = PACKET_FLUSHED;
2890
0
    *pFlags |= CompressionLevel;
2891
0
    *ppDstData = pSrcData;
2892
0
    *pDstSize = SrcSize;
2893
0
    return 1;
2894
0
  }
2895
2896
0
  IndexLEC = 256;
2897
0
  BitLength = HuffLengthLEC[IndexLEC];
2898
2899
0
  if (BitLength > 15)
2900
0
    return -1015;
2901
2902
0
  bits = get_word(&HuffCodeLEC[2ULL * IndexLEC]);
2903
0
  NCrushWriteBits(&DstPtr, &accumulator, &offset, bits, BitLength);
2904
0
  NCrushWriteFinish(&DstPtr, accumulator);
2905
0
  const intptr_t dsize = DstPtr - pDstData;
2906
0
  WINPR_ASSERT(dsize <= UINT32_MAX);
2907
0
  WINPR_ASSERT(dsize >= 0);
2908
0
  *pDstSize = (UINT32)dsize;
2909
2910
0
  if (*pDstSize > SrcSize)
2911
0
    return -1016;
2912
2913
0
  *pFlags |= PACKET_COMPRESSED;
2914
0
  *pFlags |= CompressionLevel;
2915
2916
0
  if (PacketAtFront)
2917
0
    *pFlags |= PACKET_AT_FRONT;
2918
2919
0
  if (PacketFlushed)
2920
0
    *pFlags |= PACKET_FLUSHED;
2921
2922
0
  const intptr_t diff = HistoryPtr - HistoryBuffer;
2923
0
  if (diff > UINT32_MAX)
2924
0
    return -1;
2925
2926
0
  ncrush->HistoryOffset = (UINT32)diff;
2927
2928
0
  if (ncrush->HistoryOffset >= ncrush->HistoryBufferSize)
2929
0
    return -1;
2930
2931
0
  return 1;
2932
0
}
2933
2934
static int ncrush_generate_tables(NCRUSH_CONTEXT* context)
2935
0
{
2936
0
  WINPR_ASSERT(context);
2937
0
  WINPR_ASSERT(28 < ARRAYSIZE(LOMBitsLUT));
2938
2939
0
  UINT32 cnt = 0;
2940
0
  for (BYTE i = 0; i < 28; i++)
2941
0
  {
2942
0
    for (UINT32 j = 0; j < 1UL << LOMBitsLUT[i]; j++)
2943
0
    {
2944
0
      size_t l = (cnt++) + 2ull;
2945
0
      context->HuffTableLOM[l] = i;
2946
0
    }
2947
0
  }
2948
2949
0
  for (UINT32 k = 2; k < 4096; k++)
2950
0
  {
2951
0
    size_t i = 28;
2952
0
    if ((k - 2) < 768)
2953
0
      i = context->HuffTableLOM[k];
2954
2955
0
    if (i >= ARRAYSIZE(LOMBitsLUT))
2956
0
      return -1;
2957
0
    if (i >= ARRAYSIZE(LOMBaseLUT))
2958
0
      return -1;
2959
2960
0
    if (((((1 << LOMBitsLUT[i]) - 1) & (k - 2)) + LOMBaseLUT[i]) != k)
2961
0
      return -1;
2962
0
  }
2963
2964
0
  size_t k = 0;
2965
0
  for (BYTE i = 0; i < 16; i++)
2966
0
  {
2967
0
    for (size_t j = 0; j < (1ULL << CopyOffsetBitsLUT[i]); j++)
2968
0
    {
2969
0
      size_t l = k++ + 2ull;
2970
0
      context->HuffTableCopyOffset[l] = i;
2971
0
    }
2972
0
  }
2973
2974
0
  k /= 128;
2975
2976
0
  for (BYTE i = 16; i < 32; i++)
2977
0
  {
2978
0
    const UINT32 lut = CopyOffsetBitsLUT[i];
2979
0
    WINPR_ASSERT(lut >= 7);
2980
0
    for (size_t j = 0; j < 1ULL << (lut - 7ULL); j++)
2981
0
    {
2982
0
      size_t l = k++ + 2 + 256ull;
2983
0
      context->HuffTableCopyOffset[l] = i;
2984
0
    }
2985
0
  }
2986
2987
0
  if ((k + 256) > 1024)
2988
0
    return -1;
2989
2990
0
  return 1;
2991
0
}
2992
2993
void ncrush_context_reset(NCRUSH_CONTEXT* ncrush, BOOL flush)
2994
0
{
2995
0
  WINPR_ASSERT(ncrush);
2996
2997
0
  ZeroMemory(&(ncrush->HistoryBuffer), sizeof(ncrush->HistoryBuffer));
2998
0
  ZeroMemory(&(ncrush->OffsetCache), sizeof(ncrush->OffsetCache));
2999
0
  ZeroMemory(&(ncrush->MatchTable), sizeof(ncrush->MatchTable));
3000
0
  ZeroMemory(&(ncrush->HashTable), sizeof(ncrush->HashTable));
3001
3002
0
  if (flush)
3003
0
    ncrush->HistoryOffset = ncrush->HistoryBufferSize + 1;
3004
0
  else
3005
0
    ncrush->HistoryOffset = 0;
3006
3007
0
  ncrush->HistoryPtr = &(ncrush->HistoryBuffer[ncrush->HistoryOffset]);
3008
0
}
3009
3010
NCRUSH_CONTEXT* ncrush_context_new(BOOL Compressor)
3011
0
{
3012
0
  NCRUSH_CONTEXT* ncrush = (NCRUSH_CONTEXT*)calloc(1, sizeof(NCRUSH_CONTEXT));
3013
3014
0
  if (!ncrush)
3015
0
    goto fail;
3016
3017
0
  ncrush->Compressor = Compressor;
3018
0
  ncrush->HistoryBufferSize = 65536;
3019
0
  ncrush->HistoryEndOffset = ncrush->HistoryBufferSize - 1;
3020
0
  ncrush->HistoryBufferFence = 0xABABABAB;
3021
0
  ncrush->HistoryOffset = 0;
3022
0
  ncrush->HistoryPtr = &(ncrush->HistoryBuffer[ncrush->HistoryOffset]);
3023
3024
0
  if (ncrush_generate_tables(ncrush) < 0)
3025
0
  {
3026
0
    WLog_DBG(TAG, "ncrush_context_new: failed to initialize tables");
3027
0
    goto fail;
3028
0
  }
3029
3030
0
  ncrush_context_reset(ncrush, FALSE);
3031
3032
0
  return ncrush;
3033
0
fail:
3034
0
  ncrush_context_free(ncrush);
3035
0
  return NULL;
3036
0
}
3037
3038
void ncrush_context_free(NCRUSH_CONTEXT* ncrush)
3039
0
{
3040
0
  free(ncrush);
3041
0
}