summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Chapman <dave@dchapman.com>2002-05-12 11:23:25 +0000
committerDave Chapman <dave@dchapman.com>2002-05-12 11:23:25 +0000
commit43bc6e62e410adfe4238012becca7a0522cf9435 (patch)
tree0b626b9035eeb635274b7ffd15dcb508228f6e5a
parentd2d5ac3e46af867166cdb98f1370b43e11c999b4 (diff)
downloadrockbox-43bc6e62e410adfe4238012becca7a0522cf9435.tar.gz
rockbox-43bc6e62e410adfe4238012becca7a0522cf9435.zip
libmad version 0.14.2b
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@550 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--uisimulator/common/libmad/D.dat607
-rw-r--r--uisimulator/common/libmad/bit.c237
-rw-r--r--uisimulator/common/libmad/bit.h47
-rw-r--r--uisimulator/common/libmad/decoder.c570
-rw-r--r--uisimulator/common/libmad/decoder.h91
-rw-r--r--uisimulator/common/libmad/fixed.c37
-rw-r--r--uisimulator/common/libmad/fixed.h476
-rw-r--r--uisimulator/common/libmad/frame.c499
-rw-r--r--uisimulator/common/libmad/frame.h117
-rw-r--r--uisimulator/common/libmad/global.h58
-rw-r--r--uisimulator/common/libmad/huffman.c3098
-rw-r--r--uisimulator/common/libmad/huffman.h66
-rw-r--r--uisimulator/common/libmad/imdct_s.dat62
-rw-r--r--uisimulator/common/libmad/layer12.c496
-rw-r--r--uisimulator/common/libmad/layer12.h31
-rw-r--r--uisimulator/common/libmad/layer3.c2502
-rw-r--r--uisimulator/common/libmad/layer3.h30
-rw-r--r--uisimulator/common/libmad/mad.h932
-rw-r--r--uisimulator/common/libmad/madconfig.h121
-rw-r--r--uisimulator/common/libmad/qc_table.dat77
-rw-r--r--uisimulator/common/libmad/rq_table.dat8747
-rw-r--r--uisimulator/common/libmad/sf_table.dat100
-rw-r--r--uisimulator/common/libmad/stream.c160
-rw-r--r--uisimulator/common/libmad/stream.h107
-rw-r--r--uisimulator/common/libmad/synth.c857
-rw-r--r--uisimulator/common/libmad/synth.h69
-rw-r--r--uisimulator/common/libmad/timer.c484
-rw-r--r--uisimulator/common/libmad/timer.h100
-rw-r--r--uisimulator/common/libmad/version.c91
-rw-r--r--uisimulator/common/libmad/version.h47
30 files changed, 20916 insertions, 0 deletions
diff --git a/uisimulator/common/libmad/D.dat b/uisimulator/common/libmad/D.dat
new file mode 100644
index 0000000000..c3ee74c135
--- /dev/null
+++ b/uisimulator/common/libmad/D.dat
@@ -0,0 +1,607 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22/*
23 * These are the coefficients for the subband synthesis window. This is a
24 * reordered version of Table B.3 from ISO/IEC 11172-3.
25 *
26 * Every value is parameterized so that shift optimizations can be made at
27 * compile-time. For example, every value can be right-shifted 12 bits to
28 * minimize multiply instruction times without any loss of accuracy.
29 */
30
31 { PRESHIFT(0x00000000) /* 0.000000000 */, /* 0 */
32 -PRESHIFT(0x0001d000) /* -0.000442505 */,
33 PRESHIFT(0x000d5000) /* 0.003250122 */,
34 -PRESHIFT(0x001cb000) /* -0.007003784 */,
35 PRESHIFT(0x007f5000) /* 0.031082153 */,
36 -PRESHIFT(0x01421000) /* -0.078628540 */,
37 PRESHIFT(0x019ae000) /* 0.100311279 */,
38 -PRESHIFT(0x09271000) /* -0.572036743 */,
39 PRESHIFT(0x1251e000) /* 1.144989014 */,
40 PRESHIFT(0x09271000) /* 0.572036743 */,
41 PRESHIFT(0x019ae000) /* 0.100311279 */,
42 PRESHIFT(0x01421000) /* 0.078628540 */,
43 PRESHIFT(0x007f5000) /* 0.031082153 */,
44 PRESHIFT(0x001cb000) /* 0.007003784 */,
45 PRESHIFT(0x000d5000) /* 0.003250122 */,
46 PRESHIFT(0x0001d000) /* 0.000442505 */,
47
48 PRESHIFT(0x00000000) /* 0.000000000 */,
49 -PRESHIFT(0x0001d000) /* -0.000442505 */,
50 PRESHIFT(0x000d5000) /* 0.003250122 */,
51 -PRESHIFT(0x001cb000) /* -0.007003784 */,
52 PRESHIFT(0x007f5000) /* 0.031082153 */,
53 -PRESHIFT(0x01421000) /* -0.078628540 */,
54 PRESHIFT(0x019ae000) /* 0.100311279 */,
55 -PRESHIFT(0x09271000) /* -0.572036743 */,
56 PRESHIFT(0x1251e000) /* 1.144989014 */,
57 PRESHIFT(0x09271000) /* 0.572036743 */,
58 PRESHIFT(0x019ae000) /* 0.100311279 */,
59 PRESHIFT(0x01421000) /* 0.078628540 */,
60 PRESHIFT(0x007f5000) /* 0.031082153 */,
61 PRESHIFT(0x001cb000) /* 0.007003784 */,
62 PRESHIFT(0x000d5000) /* 0.003250122 */,
63 PRESHIFT(0x0001d000) /* 0.000442505 */ },
64
65 { -PRESHIFT(0x00001000) /* -0.000015259 */, /* 1 */
66 -PRESHIFT(0x0001f000) /* -0.000473022 */,
67 PRESHIFT(0x000da000) /* 0.003326416 */,
68 -PRESHIFT(0x00207000) /* -0.007919312 */,
69 PRESHIFT(0x007d0000) /* 0.030517578 */,
70 -PRESHIFT(0x0158d000) /* -0.084182739 */,
71 PRESHIFT(0x01747000) /* 0.090927124 */,
72 -PRESHIFT(0x099a8000) /* -0.600219727 */,
73 PRESHIFT(0x124f0000) /* 1.144287109 */,
74 PRESHIFT(0x08b38000) /* 0.543823242 */,
75 PRESHIFT(0x01bde000) /* 0.108856201 */,
76 PRESHIFT(0x012b4000) /* 0.073059082 */,
77 PRESHIFT(0x0080f000) /* 0.031478882 */,
78 PRESHIFT(0x00191000) /* 0.006118774 */,
79 PRESHIFT(0x000d0000) /* 0.003173828 */,
80 PRESHIFT(0x0001a000) /* 0.000396729 */,
81
82 -PRESHIFT(0x00001000) /* -0.000015259 */,
83 -PRESHIFT(0x0001f000) /* -0.000473022 */,
84 PRESHIFT(0x000da000) /* 0.003326416 */,
85 -PRESHIFT(0x00207000) /* -0.007919312 */,
86 PRESHIFT(0x007d0000) /* 0.030517578 */,
87 -PRESHIFT(0x0158d000) /* -0.084182739 */,
88 PRESHIFT(0x01747000) /* 0.090927124 */,
89 -PRESHIFT(0x099a8000) /* -0.600219727 */,
90 PRESHIFT(0x124f0000) /* 1.144287109 */,
91 PRESHIFT(0x08b38000) /* 0.543823242 */,
92 PRESHIFT(0x01bde000) /* 0.108856201 */,
93 PRESHIFT(0x012b4000) /* 0.073059082 */,
94 PRESHIFT(0x0080f000) /* 0.031478882 */,
95 PRESHIFT(0x00191000) /* 0.006118774 */,
96 PRESHIFT(0x000d0000) /* 0.003173828 */,
97 PRESHIFT(0x0001a000) /* 0.000396729 */ },
98
99 { -PRESHIFT(0x00001000) /* -0.000015259 */, /* 2 */
100 -PRESHIFT(0x00023000) /* -0.000534058 */,
101 PRESHIFT(0x000de000) /* 0.003387451 */,
102 -PRESHIFT(0x00245000) /* -0.008865356 */,
103 PRESHIFT(0x007a0000) /* 0.029785156 */,
104 -PRESHIFT(0x016f7000) /* -0.089706421 */,
105 PRESHIFT(0x014a8000) /* 0.080688477 */,
106 -PRESHIFT(0x0a0d8000) /* -0.628295898 */,
107 PRESHIFT(0x12468000) /* 1.142211914 */,
108 PRESHIFT(0x083ff000) /* 0.515609741 */,
109 PRESHIFT(0x01dd8000) /* 0.116577148 */,
110 PRESHIFT(0x01149000) /* 0.067520142 */,
111 PRESHIFT(0x00820000) /* 0.031738281 */,
112 PRESHIFT(0x0015b000) /* 0.005294800 */,
113 PRESHIFT(0x000ca000) /* 0.003082275 */,
114 PRESHIFT(0x00018000) /* 0.000366211 */,
115
116 -PRESHIFT(0x00001000) /* -0.000015259 */,
117 -PRESHIFT(0x00023000) /* -0.000534058 */,
118 PRESHIFT(0x000de000) /* 0.003387451 */,
119 -PRESHIFT(0x00245000) /* -0.008865356 */,
120 PRESHIFT(0x007a0000) /* 0.029785156 */,
121 -PRESHIFT(0x016f7000) /* -0.089706421 */,
122 PRESHIFT(0x014a8000) /* 0.080688477 */,
123 -PRESHIFT(0x0a0d8000) /* -0.628295898 */,
124 PRESHIFT(0x12468000) /* 1.142211914 */,
125 PRESHIFT(0x083ff000) /* 0.515609741 */,
126 PRESHIFT(0x01dd8000) /* 0.116577148 */,
127 PRESHIFT(0x01149000) /* 0.067520142 */,
128 PRESHIFT(0x00820000) /* 0.031738281 */,
129 PRESHIFT(0x0015b000) /* 0.005294800 */,
130 PRESHIFT(0x000ca000) /* 0.003082275 */,
131 PRESHIFT(0x00018000) /* 0.000366211 */ },
132
133 { -PRESHIFT(0x00001000) /* -0.000015259 */, /* 3 */
134 -PRESHIFT(0x00026000) /* -0.000579834 */,
135 PRESHIFT(0x000e1000) /* 0.003433228 */,
136 -PRESHIFT(0x00285000) /* -0.009841919 */,
137 PRESHIFT(0x00765000) /* 0.028884888 */,
138 -PRESHIFT(0x0185d000) /* -0.095169067 */,
139 PRESHIFT(0x011d1000) /* 0.069595337 */,
140 -PRESHIFT(0x0a7fe000) /* -0.656219482 */,
141 PRESHIFT(0x12386000) /* 1.138763428 */,
142 PRESHIFT(0x07ccb000) /* 0.487472534 */,
143 PRESHIFT(0x01f9c000) /* 0.123474121 */,
144 PRESHIFT(0x00fdf000) /* 0.061996460 */,
145 PRESHIFT(0x00827000) /* 0.031845093 */,
146 PRESHIFT(0x00126000) /* 0.004486084 */,
147 PRESHIFT(0x000c4000) /* 0.002990723 */,
148 PRESHIFT(0x00015000) /* 0.000320435 */,
149
150 -PRESHIFT(0x00001000) /* -0.000015259 */,
151 -PRESHIFT(0x00026000) /* -0.000579834 */,
152 PRESHIFT(0x000e1000) /* 0.003433228 */,
153 -PRESHIFT(0x00285000) /* -0.009841919 */,
154 PRESHIFT(0x00765000) /* 0.028884888 */,
155 -PRESHIFT(0x0185d000) /* -0.095169067 */,
156 PRESHIFT(0x011d1000) /* 0.069595337 */,
157 -PRESHIFT(0x0a7fe000) /* -0.656219482 */,
158 PRESHIFT(0x12386000) /* 1.138763428 */,
159 PRESHIFT(0x07ccb000) /* 0.487472534 */,
160 PRESHIFT(0x01f9c000) /* 0.123474121 */,
161 PRESHIFT(0x00fdf000) /* 0.061996460 */,
162 PRESHIFT(0x00827000) /* 0.031845093 */,
163 PRESHIFT(0x00126000) /* 0.004486084 */,
164 PRESHIFT(0x000c4000) /* 0.002990723 */,
165 PRESHIFT(0x00015000) /* 0.000320435 */ },
166
167 { -PRESHIFT(0x00001000) /* -0.000015259 */, /* 4 */
168 -PRESHIFT(0x00029000) /* -0.000625610 */,
169 PRESHIFT(0x000e3000) /* 0.003463745 */,
170 -PRESHIFT(0x002c7000) /* -0.010848999 */,
171 PRESHIFT(0x0071e000) /* 0.027801514 */,
172 -PRESHIFT(0x019bd000) /* -0.100540161 */,
173 PRESHIFT(0x00ec0000) /* 0.057617187 */,
174 -PRESHIFT(0x0af15000) /* -0.683914185 */,
175 PRESHIFT(0x12249000) /* 1.133926392 */,
176 PRESHIFT(0x075a0000) /* 0.459472656 */,
177 PRESHIFT(0x0212c000) /* 0.129577637 */,
178 PRESHIFT(0x00e79000) /* 0.056533813 */,
179 PRESHIFT(0x00825000) /* 0.031814575 */,
180 PRESHIFT(0x000f4000) /* 0.003723145 */,
181 PRESHIFT(0x000be000) /* 0.002899170 */,
182 PRESHIFT(0x00013000) /* 0.000289917 */,
183
184 -PRESHIFT(0x00001000) /* -0.000015259 */,
185 -PRESHIFT(0x00029000) /* -0.000625610 */,
186 PRESHIFT(0x000e3000) /* 0.003463745 */,
187 -PRESHIFT(0x002c7000) /* -0.010848999 */,
188 PRESHIFT(0x0071e000) /* 0.027801514 */,
189 -PRESHIFT(0x019bd000) /* -0.100540161 */,
190 PRESHIFT(0x00ec0000) /* 0.057617187 */,
191 -PRESHIFT(0x0af15000) /* -0.683914185 */,
192 PRESHIFT(0x12249000) /* 1.133926392 */,
193 PRESHIFT(0x075a0000) /* 0.459472656 */,
194 PRESHIFT(0x0212c000) /* 0.129577637 */,
195 PRESHIFT(0x00e79000) /* 0.056533813 */,
196 PRESHIFT(0x00825000) /* 0.031814575 */,
197 PRESHIFT(0x000f4000) /* 0.003723145 */,
198 PRESHIFT(0x000be000) /* 0.002899170 */,
199 PRESHIFT(0x00013000) /* 0.000289917 */ },
200
201 { -PRESHIFT(0x00001000) /* -0.000015259 */, /* 5 */
202 -PRESHIFT(0x0002d000) /* -0.000686646 */,
203 PRESHIFT(0x000e4000) /* 0.003479004 */,
204 -PRESHIFT(0x0030b000) /* -0.011886597 */,
205 PRESHIFT(0x006cb000) /* 0.026535034 */,
206 -PRESHIFT(0x01b17000) /* -0.105819702 */,
207 PRESHIFT(0x00b77000) /* 0.044784546 */,
208 -PRESHIFT(0x0b619000) /* -0.711318970 */,
209 PRESHIFT(0x120b4000) /* 1.127746582 */,
210 PRESHIFT(0x06e81000) /* 0.431655884 */,
211 PRESHIFT(0x02288000) /* 0.134887695 */,
212 PRESHIFT(0x00d17000) /* 0.051132202 */,
213 PRESHIFT(0x0081b000) /* 0.031661987 */,
214 PRESHIFT(0x000c5000) /* 0.003005981 */,
215 PRESHIFT(0x000b7000) /* 0.002792358 */,
216 PRESHIFT(0x00011000) /* 0.000259399 */,
217
218 -PRESHIFT(0x00001000) /* -0.000015259 */,
219 -PRESHIFT(0x0002d000) /* -0.000686646 */,
220 PRESHIFT(0x000e4000) /* 0.003479004 */,
221 -PRESHIFT(0x0030b000) /* -0.011886597 */,
222 PRESHIFT(0x006cb000) /* 0.026535034 */,
223 -PRESHIFT(0x01b17000) /* -0.105819702 */,
224 PRESHIFT(0x00b77000) /* 0.044784546 */,
225 -PRESHIFT(0x0b619000) /* -0.711318970 */,
226 PRESHIFT(0x120b4000) /* 1.127746582 */,
227 PRESHIFT(0x06e81000) /* 0.431655884 */,
228 PRESHIFT(0x02288000) /* 0.134887695 */,
229 PRESHIFT(0x00d17000) /* 0.051132202 */,
230 PRESHIFT(0x0081b000) /* 0.031661987 */,
231 PRESHIFT(0x000c5000) /* 0.003005981 */,
232 PRESHIFT(0x000b7000) /* 0.002792358 */,
233 PRESHIFT(0x00011000) /* 0.000259399 */ },
234
235 { -PRESHIFT(0x00001000) /* -0.000015259 */, /* 6 */
236 -PRESHIFT(0x00031000) /* -0.000747681 */,
237 PRESHIFT(0x000e4000) /* 0.003479004 */,
238 -PRESHIFT(0x00350000) /* -0.012939453 */,
239 PRESHIFT(0x0066c000) /* 0.025085449 */,
240 -PRESHIFT(0x01c67000) /* -0.110946655 */,
241 PRESHIFT(0x007f5000) /* 0.031082153 */,
242 -PRESHIFT(0x0bd06000) /* -0.738372803 */,
243 PRESHIFT(0x11ec7000) /* 1.120223999 */,
244 PRESHIFT(0x06772000) /* 0.404083252 */,
245 PRESHIFT(0x023b3000) /* 0.139450073 */,
246 PRESHIFT(0x00bbc000) /* 0.045837402 */,
247 PRESHIFT(0x00809000) /* 0.031387329 */,
248 PRESHIFT(0x00099000) /* 0.002334595 */,
249 PRESHIFT(0x000b0000) /* 0.002685547 */,
250 PRESHIFT(0x00010000) /* 0.000244141 */,
251
252 -PRESHIFT(0x00001000) /* -0.000015259 */,
253 -PRESHIFT(0x00031000) /* -0.000747681 */,
254 PRESHIFT(0x000e4000) /* 0.003479004 */,
255 -PRESHIFT(0x00350000) /* -0.012939453 */,
256 PRESHIFT(0x0066c000) /* 0.025085449 */,
257 -PRESHIFT(0x01c67000) /* -0.110946655 */,
258 PRESHIFT(0x007f5000) /* 0.031082153 */,
259 -PRESHIFT(0x0bd06000) /* -0.738372803 */,
260 PRESHIFT(0x11ec7000) /* 1.120223999 */,
261 PRESHIFT(0x06772000) /* 0.404083252 */,
262 PRESHIFT(0x023b3000) /* 0.139450073 */,
263 PRESHIFT(0x00bbc000) /* 0.045837402 */,
264 PRESHIFT(0x00809000) /* 0.031387329 */,
265 PRESHIFT(0x00099000) /* 0.002334595 */,
266 PRESHIFT(0x000b0000) /* 0.002685547 */,
267 PRESHIFT(0x00010000) /* 0.000244141 */ },
268
269 { -PRESHIFT(0x00002000) /* -0.000030518 */, /* 7 */
270 -PRESHIFT(0x00035000) /* -0.000808716 */,
271 PRESHIFT(0x000e3000) /* 0.003463745 */,
272 -PRESHIFT(0x00397000) /* -0.014022827 */,
273 PRESHIFT(0x005ff000) /* 0.023422241 */,
274 -PRESHIFT(0x01dad000) /* -0.115921021 */,
275 PRESHIFT(0x0043a000) /* 0.016510010 */,
276 -PRESHIFT(0x0c3d9000) /* -0.765029907 */,
277 PRESHIFT(0x11c83000) /* 1.111373901 */,
278 PRESHIFT(0x06076000) /* 0.376800537 */,
279 PRESHIFT(0x024ad000) /* 0.143264771 */,
280 PRESHIFT(0x00a67000) /* 0.040634155 */,
281 PRESHIFT(0x007f0000) /* 0.031005859 */,
282 PRESHIFT(0x0006f000) /* 0.001693726 */,
283 PRESHIFT(0x000a9000) /* 0.002578735 */,
284 PRESHIFT(0x0000e000) /* 0.000213623 */,
285
286 -PRESHIFT(0x00002000) /* -0.000030518 */,
287 -PRESHIFT(0x00035000) /* -0.000808716 */,
288 PRESHIFT(0x000e3000) /* 0.003463745 */,
289 -PRESHIFT(0x00397000) /* -0.014022827 */,
290 PRESHIFT(0x005ff000) /* 0.023422241 */,
291 -PRESHIFT(0x01dad000) /* -0.115921021 */,
292 PRESHIFT(0x0043a000) /* 0.016510010 */,
293 -PRESHIFT(0x0c3d9000) /* -0.765029907 */,
294 PRESHIFT(0x11c83000) /* 1.111373901 */,
295 PRESHIFT(0x06076000) /* 0.376800537 */,
296 PRESHIFT(0x024ad000) /* 0.143264771 */,
297 PRESHIFT(0x00a67000) /* 0.040634155 */,
298 PRESHIFT(0x007f0000) /* 0.031005859 */,
299 PRESHIFT(0x0006f000) /* 0.001693726 */,
300 PRESHIFT(0x000a9000) /* 0.002578735 */,
301 PRESHIFT(0x0000e000) /* 0.000213623 */ },
302
303 { -PRESHIFT(0x00002000) /* -0.000030518 */, /* 8 */
304 -PRESHIFT(0x0003a000) /* -0.000885010 */,
305 PRESHIFT(0x000e0000) /* 0.003417969 */,
306 -PRESHIFT(0x003df000) /* -0.015121460 */,
307 PRESHIFT(0x00586000) /* 0.021575928 */,
308 -PRESHIFT(0x01ee6000) /* -0.120697021 */,
309 PRESHIFT(0x00046000) /* 0.001068115 */,
310 -PRESHIFT(0x0ca8d000) /* -0.791213989 */,
311 PRESHIFT(0x119e9000) /* 1.101211548 */,
312 PRESHIFT(0x05991000) /* 0.349868774 */,
313 PRESHIFT(0x02578000) /* 0.146362305 */,
314 PRESHIFT(0x0091a000) /* 0.035552979 */,
315 PRESHIFT(0x007d1000) /* 0.030532837 */,
316 PRESHIFT(0x00048000) /* 0.001098633 */,
317 PRESHIFT(0x000a1000) /* 0.002456665 */,
318 PRESHIFT(0x0000d000) /* 0.000198364 */,
319
320 -PRESHIFT(0x00002000) /* -0.000030518 */,
321 -PRESHIFT(0x0003a000) /* -0.000885010 */,
322 PRESHIFT(0x000e0000) /* 0.003417969 */,
323 -PRESHIFT(0x003df000) /* -0.015121460 */,
324 PRESHIFT(0x00586000) /* 0.021575928 */,
325 -PRESHIFT(0x01ee6000) /* -0.120697021 */,
326 PRESHIFT(0x00046000) /* 0.001068115 */,
327 -PRESHIFT(0x0ca8d000) /* -0.791213989 */,
328 PRESHIFT(0x119e9000) /* 1.101211548 */,
329 PRESHIFT(0x05991000) /* 0.349868774 */,
330 PRESHIFT(0x02578000) /* 0.146362305 */,
331 PRESHIFT(0x0091a000) /* 0.035552979 */,
332 PRESHIFT(0x007d1000) /* 0.030532837 */,
333 PRESHIFT(0x00048000) /* 0.001098633 */,
334 PRESHIFT(0x000a1000) /* 0.002456665 */,
335 PRESHIFT(0x0000d000) /* 0.000198364 */ },
336
337 { -PRESHIFT(0x00002000) /* -0.000030518 */, /* 9 */
338 -PRESHIFT(0x0003f000) /* -0.000961304 */,
339 PRESHIFT(0x000dd000) /* 0.003372192 */,
340 -PRESHIFT(0x00428000) /* -0.016235352 */,
341 PRESHIFT(0x00500000) /* 0.019531250 */,
342 -PRESHIFT(0x02011000) /* -0.125259399 */,
343 -PRESHIFT(0x003e6000) /* -0.015228271 */,
344 -PRESHIFT(0x0d11e000) /* -0.816864014 */,
345 PRESHIFT(0x116fc000) /* 1.089782715 */,
346 PRESHIFT(0x052c5000) /* 0.323318481 */,
347 PRESHIFT(0x02616000) /* 0.148773193 */,
348 PRESHIFT(0x007d6000) /* 0.030609131 */,
349 PRESHIFT(0x007aa000) /* 0.029937744 */,
350 PRESHIFT(0x00024000) /* 0.000549316 */,
351 PRESHIFT(0x0009a000) /* 0.002349854 */,
352 PRESHIFT(0x0000b000) /* 0.000167847 */,
353
354 -PRESHIFT(0x00002000) /* -0.000030518 */,
355 -PRESHIFT(0x0003f000) /* -0.000961304 */,
356 PRESHIFT(0x000dd000) /* 0.003372192 */,
357 -PRESHIFT(0x00428000) /* -0.016235352 */,
358 PRESHIFT(0x00500000) /* 0.019531250 */,
359 -PRESHIFT(0x02011000) /* -0.125259399 */,
360 -PRESHIFT(0x003e6000) /* -0.015228271 */,
361 -PRESHIFT(0x0d11e000) /* -0.816864014 */,
362 PRESHIFT(0x116fc000) /* 1.089782715 */,
363 PRESHIFT(0x052c5000) /* 0.323318481 */,
364 PRESHIFT(0x02616000) /* 0.148773193 */,
365 PRESHIFT(0x007d6000) /* 0.030609131 */,
366 PRESHIFT(0x007aa000) /* 0.029937744 */,
367 PRESHIFT(0x00024000) /* 0.000549316 */,
368 PRESHIFT(0x0009a000) /* 0.002349854 */,
369 PRESHIFT(0x0000b000) /* 0.000167847 */ },
370
371 { -PRESHIFT(0x00002000) /* -0.000030518 */, /* 10 */
372 -PRESHIFT(0x00044000) /* -0.001037598 */,
373 PRESHIFT(0x000d7000) /* 0.003280640 */,
374 -PRESHIFT(0x00471000) /* -0.017349243 */,
375 PRESHIFT(0x0046b000) /* 0.017257690 */,
376 -PRESHIFT(0x0212b000) /* -0.129562378 */,
377 -PRESHIFT(0x0084a000) /* -0.032379150 */,
378 -PRESHIFT(0x0d78a000) /* -0.841949463 */,
379 PRESHIFT(0x113be000) /* 1.077117920 */,
380 PRESHIFT(0x04c16000) /* 0.297210693 */,
381 PRESHIFT(0x02687000) /* 0.150497437 */,
382 PRESHIFT(0x0069c000) /* 0.025817871 */,
383 PRESHIFT(0x0077f000) /* 0.029281616 */,
384 PRESHIFT(0x00002000) /* 0.000030518 */,
385 PRESHIFT(0x00093000) /* 0.002243042 */,
386 PRESHIFT(0x0000a000) /* 0.000152588 */,
387
388 -PRESHIFT(0x00002000) /* -0.000030518 */,
389 -PRESHIFT(0x00044000) /* -0.001037598 */,
390 PRESHIFT(0x000d7000) /* 0.003280640 */,
391 -PRESHIFT(0x00471000) /* -0.017349243 */,
392 PRESHIFT(0x0046b000) /* 0.017257690 */,
393 -PRESHIFT(0x0212b000) /* -0.129562378 */,
394 -PRESHIFT(0x0084a000) /* -0.032379150 */,
395 -PRESHIFT(0x0d78a000) /* -0.841949463 */,
396 PRESHIFT(0x113be000) /* 1.077117920 */,
397 PRESHIFT(0x04c16000) /* 0.297210693 */,
398 PRESHIFT(0x02687000) /* 0.150497437 */,
399 PRESHIFT(0x0069c000) /* 0.025817871 */,
400 PRESHIFT(0x0077f000) /* 0.029281616 */,
401 PRESHIFT(0x00002000) /* 0.000030518 */,
402 PRESHIFT(0x00093000) /* 0.002243042 */,
403 PRESHIFT(0x0000a000) /* 0.000152588 */ },
404
405 { -PRESHIFT(0x00003000) /* -0.000045776 */, /* 11 */
406 -PRESHIFT(0x00049000) /* -0.001113892 */,
407 PRESHIFT(0x000d0000) /* 0.003173828 */,
408 -PRESHIFT(0x004ba000) /* -0.018463135 */,
409 PRESHIFT(0x003ca000) /* 0.014801025 */,
410 -PRESHIFT(0x02233000) /* -0.133590698 */,
411 -PRESHIFT(0x00ce4000) /* -0.050354004 */,
412 -PRESHIFT(0x0ddca000) /* -0.866363525 */,
413 PRESHIFT(0x1102f000) /* 1.063217163 */,
414 PRESHIFT(0x04587000) /* 0.271591187 */,
415 PRESHIFT(0x026cf000) /* 0.151596069 */,
416 PRESHIFT(0x0056c000) /* 0.021179199 */,
417 PRESHIFT(0x0074e000) /* 0.028533936 */,
418 -PRESHIFT(0x0001d000) /* -0.000442505 */,
419 PRESHIFT(0x0008b000) /* 0.002120972 */,
420 PRESHIFT(0x00009000) /* 0.000137329 */,
421
422 -PRESHIFT(0x00003000) /* -0.000045776 */,
423 -PRESHIFT(0x00049000) /* -0.001113892 */,
424 PRESHIFT(0x000d0000) /* 0.003173828 */,
425 -PRESHIFT(0x004ba000) /* -0.018463135 */,
426 PRESHIFT(0x003ca000) /* 0.014801025 */,
427 -PRESHIFT(0x02233000) /* -0.133590698 */,
428 -PRESHIFT(0x00ce4000) /* -0.050354004 */,
429 -PRESHIFT(0x0ddca000) /* -0.866363525 */,
430 PRESHIFT(0x1102f000) /* 1.063217163 */,
431 PRESHIFT(0x04587000) /* 0.271591187 */,
432 PRESHIFT(0x026cf000) /* 0.151596069 */,
433 PRESHIFT(0x0056c000) /* 0.021179199 */,
434 PRESHIFT(0x0074e000) /* 0.028533936 */,
435 -PRESHIFT(0x0001d000) /* -0.000442505 */,
436 PRESHIFT(0x0008b000) /* 0.002120972 */,
437 PRESHIFT(0x00009000) /* 0.000137329 */ },
438
439 { -PRESHIFT(0x00003000) /* -0.000045776 */, /* 12 */
440 -PRESHIFT(0x0004f000) /* -0.001205444 */,
441 PRESHIFT(0x000c8000) /* 0.003051758 */,
442 -PRESHIFT(0x00503000) /* -0.019577026 */,
443 PRESHIFT(0x0031a000) /* 0.012115479 */,
444 -PRESHIFT(0x02326000) /* -0.137298584 */,
445 -PRESHIFT(0x011b5000) /* -0.069168091 */,
446 -PRESHIFT(0x0e3dd000) /* -0.890090942 */,
447 PRESHIFT(0x10c54000) /* 1.048156738 */,
448 PRESHIFT(0x03f1b000) /* 0.246505737 */,
449 PRESHIFT(0x026ee000) /* 0.152069092 */,
450 PRESHIFT(0x00447000) /* 0.016708374 */,
451 PRESHIFT(0x00719000) /* 0.027725220 */,
452 -PRESHIFT(0x00039000) /* -0.000869751 */,
453 PRESHIFT(0x00084000) /* 0.002014160 */,
454 PRESHIFT(0x00008000) /* 0.000122070 */,
455
456 -PRESHIFT(0x00003000) /* -0.000045776 */,
457 -PRESHIFT(0x0004f000) /* -0.001205444 */,
458 PRESHIFT(0x000c8000) /* 0.003051758 */,
459 -PRESHIFT(0x00503000) /* -0.019577026 */,
460 PRESHIFT(0x0031a000) /* 0.012115479 */,
461 -PRESHIFT(0x02326000) /* -0.137298584 */,
462 -PRESHIFT(0x011b5000) /* -0.069168091 */,
463 -PRESHIFT(0x0e3dd000) /* -0.890090942 */,
464 PRESHIFT(0x10c54000) /* 1.048156738 */,
465 PRESHIFT(0x03f1b000) /* 0.246505737 */,
466 PRESHIFT(0x026ee000) /* 0.152069092 */,
467 PRESHIFT(0x00447000) /* 0.016708374 */,
468 PRESHIFT(0x00719000) /* 0.027725220 */,
469 -PRESHIFT(0x00039000) /* -0.000869751 */,
470 PRESHIFT(0x00084000) /* 0.002014160 */,
471 PRESHIFT(0x00008000) /* 0.000122070 */ },
472
473 { -PRESHIFT(0x00004000) /* -0.000061035 */, /* 13 */
474 -PRESHIFT(0x00055000) /* -0.001296997 */,
475 PRESHIFT(0x000bd000) /* 0.002883911 */,
476 -PRESHIFT(0x0054c000) /* -0.020690918 */,
477 PRESHIFT(0x0025d000) /* 0.009231567 */,
478 -PRESHIFT(0x02403000) /* -0.140670776 */,
479 -PRESHIFT(0x016ba000) /* -0.088775635 */,
480 -PRESHIFT(0x0e9be000) /* -0.913055420 */,
481 PRESHIFT(0x1082d000) /* 1.031936646 */,
482 PRESHIFT(0x038d4000) /* 0.221984863 */,
483 PRESHIFT(0x026e7000) /* 0.151962280 */,
484 PRESHIFT(0x0032e000) /* 0.012420654 */,
485 PRESHIFT(0x006df000) /* 0.026840210 */,
486 -PRESHIFT(0x00053000) /* -0.001266479 */,
487 PRESHIFT(0x0007d000) /* 0.001907349 */,
488 PRESHIFT(0x00007000) /* 0.000106812 */,
489
490 -PRESHIFT(0x00004000) /* -0.000061035 */,
491 -PRESHIFT(0x00055000) /* -0.001296997 */,
492 PRESHIFT(0x000bd000) /* 0.002883911 */,
493 -PRESHIFT(0x0054c000) /* -0.020690918 */,
494 PRESHIFT(0x0025d000) /* 0.009231567 */,
495 -PRESHIFT(0x02403000) /* -0.140670776 */,
496 -PRESHIFT(0x016ba000) /* -0.088775635 */,
497 -PRESHIFT(0x0e9be000) /* -0.913055420 */,
498 PRESHIFT(0x1082d000) /* 1.031936646 */,
499 PRESHIFT(0x038d4000) /* 0.221984863 */,
500 PRESHIFT(0x026e7000) /* 0.151962280 */,
501 PRESHIFT(0x0032e000) /* 0.012420654 */,
502 PRESHIFT(0x006df000) /* 0.026840210 */,
503 -PRESHIFT(0x00053000) /* -0.001266479 */,
504 PRESHIFT(0x0007d000) /* 0.001907349 */,
505 PRESHIFT(0x00007000) /* 0.000106812 */ },
506
507 { -PRESHIFT(0x00004000) /* -0.000061035 */, /* 14 */
508 -PRESHIFT(0x0005b000) /* -0.001388550 */,
509 PRESHIFT(0x000b1000) /* 0.002700806 */,
510 -PRESHIFT(0x00594000) /* -0.021789551 */,
511 PRESHIFT(0x00192000) /* 0.006134033 */,
512 -PRESHIFT(0x024c8000) /* -0.143676758 */,
513 -PRESHIFT(0x01bf2000) /* -0.109161377 */,
514 -PRESHIFT(0x0ef69000) /* -0.935195923 */,
515 PRESHIFT(0x103be000) /* 1.014617920 */,
516 PRESHIFT(0x032b4000) /* 0.198059082 */,
517 PRESHIFT(0x026bc000) /* 0.151306152 */,
518 PRESHIFT(0x00221000) /* 0.008316040 */,
519 PRESHIFT(0x006a2000) /* 0.025909424 */,
520 -PRESHIFT(0x0006a000) /* -0.001617432 */,
521 PRESHIFT(0x00075000) /* 0.001785278 */,
522 PRESHIFT(0x00007000) /* 0.000106812 */,
523
524 -PRESHIFT(0x00004000) /* -0.000061035 */,
525 -PRESHIFT(0x0005b000) /* -0.001388550 */,
526 PRESHIFT(0x000b1000) /* 0.002700806 */,
527 -PRESHIFT(0x00594000) /* -0.021789551 */,
528 PRESHIFT(0x00192000) /* 0.006134033 */,
529 -PRESHIFT(0x024c8000) /* -0.143676758 */,
530 -PRESHIFT(0x01bf2000) /* -0.109161377 */,
531 -PRESHIFT(0x0ef69000) /* -0.935195923 */,
532 PRESHIFT(0x103be000) /* 1.014617920 */,
533 PRESHIFT(0x032b4000) /* 0.198059082 */,
534 PRESHIFT(0x026bc000) /* 0.151306152 */,
535 PRESHIFT(0x00221000) /* 0.008316040 */,
536 PRESHIFT(0x006a2000) /* 0.025909424 */,
537 -PRESHIFT(0x0006a000) /* -0.001617432 */,
538 PRESHIFT(0x00075000) /* 0.001785278 */,
539 PRESHIFT(0x00007000) /* 0.000106812 */ },
540
541 { -PRESHIFT(0x00005000) /* -0.000076294 */, /* 15 */
542 -PRESHIFT(0x00061000) /* -0.001480103 */,
543 PRESHIFT(0x000a3000) /* 0.002487183 */,
544 -PRESHIFT(0x005da000) /* -0.022857666 */,
545 PRESHIFT(0x000b9000) /* 0.002822876 */,
546 -PRESHIFT(0x02571000) /* -0.146255493 */,
547 -PRESHIFT(0x0215c000) /* -0.130310059 */,
548 -PRESHIFT(0x0f4dc000) /* -0.956481934 */,
549 PRESHIFT(0x0ff0a000) /* 0.996246338 */,
550 PRESHIFT(0x02cbf000) /* 0.174789429 */,
551 PRESHIFT(0x0266e000) /* 0.150115967 */,
552 PRESHIFT(0x00120000) /* 0.004394531 */,
553 PRESHIFT(0x00662000) /* 0.024932861 */,
554 -PRESHIFT(0x0007f000) /* -0.001937866 */,
555 PRESHIFT(0x0006f000) /* 0.001693726 */,
556 PRESHIFT(0x00006000) /* 0.000091553 */,
557
558 -PRESHIFT(0x00005000) /* -0.000076294 */,
559 -PRESHIFT(0x00061000) /* -0.001480103 */,
560 PRESHIFT(0x000a3000) /* 0.002487183 */,
561 -PRESHIFT(0x005da000) /* -0.022857666 */,
562 PRESHIFT(0x000b9000) /* 0.002822876 */,
563 -PRESHIFT(0x02571000) /* -0.146255493 */,
564 -PRESHIFT(0x0215c000) /* -0.130310059 */,
565 -PRESHIFT(0x0f4dc000) /* -0.956481934 */,
566 PRESHIFT(0x0ff0a000) /* 0.996246338 */,
567 PRESHIFT(0x02cbf000) /* 0.174789429 */,
568 PRESHIFT(0x0266e000) /* 0.150115967 */,
569 PRESHIFT(0x00120000) /* 0.004394531 */,
570 PRESHIFT(0x00662000) /* 0.024932861 */,
571 -PRESHIFT(0x0007f000) /* -0.001937866 */,
572 PRESHIFT(0x0006f000) /* 0.001693726 */,
573 PRESHIFT(0x00006000) /* 0.000091553 */ },
574
575 { -PRESHIFT(0x00005000) /* -0.000076294 */, /* 16 */
576 -PRESHIFT(0x00068000) /* -0.001586914 */,
577 PRESHIFT(0x00092000) /* 0.002227783 */,
578 -PRESHIFT(0x0061f000) /* -0.023910522 */,
579 -PRESHIFT(0x0002d000) /* -0.000686646 */,
580 -PRESHIFT(0x025ff000) /* -0.148422241 */,
581 -PRESHIFT(0x026f7000) /* -0.152206421 */,
582 -PRESHIFT(0x0fa13000) /* -0.976852417 */,
583 PRESHIFT(0x0fa13000) /* 0.976852417 */,
584 PRESHIFT(0x026f7000) /* 0.152206421 */,
585 PRESHIFT(0x025ff000) /* 0.148422241 */,
586 PRESHIFT(0x0002d000) /* 0.000686646 */,
587 PRESHIFT(0x0061f000) /* 0.023910522 */,
588 -PRESHIFT(0x00092000) /* -0.002227783 */,
589 PRESHIFT(0x00068000) /* 0.001586914 */,
590 PRESHIFT(0x00005000) /* 0.000076294 */,
591
592 -PRESHIFT(0x00005000) /* -0.000076294 */,
593 -PRESHIFT(0x00068000) /* -0.001586914 */,
594 PRESHIFT(0x00092000) /* 0.002227783 */,
595 -PRESHIFT(0x0061f000) /* -0.023910522 */,
596 -PRESHIFT(0x0002d000) /* -0.000686646 */,
597 -PRESHIFT(0x025ff000) /* -0.148422241 */,
598 -PRESHIFT(0x026f7000) /* -0.152206421 */,
599 -PRESHIFT(0x0fa13000) /* -0.976852417 */,
600 PRESHIFT(0x0fa13000) /* 0.976852417 */,
601 PRESHIFT(0x026f7000) /* 0.152206421 */,
602 PRESHIFT(0x025ff000) /* 0.148422241 */,
603 PRESHIFT(0x0002d000) /* 0.000686646 */,
604 PRESHIFT(0x0061f000) /* 0.023910522 */,
605 -PRESHIFT(0x00092000) /* -0.002227783 */,
606 PRESHIFT(0x00068000) /* 0.001586914 */,
607 PRESHIFT(0x00005000) /* 0.000076294 */ }
diff --git a/uisimulator/common/libmad/bit.c b/uisimulator/common/libmad/bit.c
new file mode 100644
index 0000000000..c5d4aabb17
--- /dev/null
+++ b/uisimulator/common/libmad/bit.c
@@ -0,0 +1,237 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22# ifdef HAVE_CONFIG_H
23# include "madconfig.h"
24# endif
25
26# include "global.h"
27
28# ifdef HAVE_LIMITS_H
29# include <limits.h>
30# else
31# define CHAR_BIT 8
32# endif
33
34# include "bit.h"
35
36/*
37 * This is the lookup table for computing the CRC-check word.
38 * As described in section 2.4.3.1 and depicted in Figure A.9
39 * of ISO/IEC 11172-3, the generator polynomial is:
40 *
41 * G(X) = X^16 + X^15 + X^2 + 1
42 */
43static
44unsigned short const crc_table[256] = {
45 0x0000, 0x8005, 0x800f, 0x000a, 0x801b, 0x001e, 0x0014, 0x8011,
46 0x8033, 0x0036, 0x003c, 0x8039, 0x0028, 0x802d, 0x8027, 0x0022,
47 0x8063, 0x0066, 0x006c, 0x8069, 0x0078, 0x807d, 0x8077, 0x0072,
48 0x0050, 0x8055, 0x805f, 0x005a, 0x804b, 0x004e, 0x0044, 0x8041,
49 0x80c3, 0x00c6, 0x00cc, 0x80c9, 0x00d8, 0x80dd, 0x80d7, 0x00d2,
50 0x00f0, 0x80f5, 0x80ff, 0x00fa, 0x80eb, 0x00ee, 0x00e4, 0x80e1,
51 0x00a0, 0x80a5, 0x80af, 0x00aa, 0x80bb, 0x00be, 0x00b4, 0x80b1,
52 0x8093, 0x0096, 0x009c, 0x8099, 0x0088, 0x808d, 0x8087, 0x0082,
53
54 0x8183, 0x0186, 0x018c, 0x8189, 0x0198, 0x819d, 0x8197, 0x0192,
55 0x01b0, 0x81b5, 0x81bf, 0x01ba, 0x81ab, 0x01ae, 0x01a4, 0x81a1,
56 0x01e0, 0x81e5, 0x81ef, 0x01ea, 0x81fb, 0x01fe, 0x01f4, 0x81f1,
57 0x81d3, 0x01d6, 0x01dc, 0x81d9, 0x01c8, 0x81cd, 0x81c7, 0x01c2,
58 0x0140, 0x8145, 0x814f, 0x014a, 0x815b, 0x015e, 0x0154, 0x8151,
59 0x8173, 0x0176, 0x017c, 0x8179, 0x0168, 0x816d, 0x8167, 0x0162,
60 0x8123, 0x0126, 0x012c, 0x8129, 0x0138, 0x813d, 0x8137, 0x0132,
61 0x0110, 0x8115, 0x811f, 0x011a, 0x810b, 0x010e, 0x0104, 0x8101,
62
63 0x8303, 0x0306, 0x030c, 0x8309, 0x0318, 0x831d, 0x8317, 0x0312,
64 0x0330, 0x8335, 0x833f, 0x033a, 0x832b, 0x032e, 0x0324, 0x8321,
65 0x0360, 0x8365, 0x836f, 0x036a, 0x837b, 0x037e, 0x0374, 0x8371,
66 0x8353, 0x0356, 0x035c, 0x8359, 0x0348, 0x834d, 0x8347, 0x0342,
67 0x03c0, 0x83c5, 0x83cf, 0x03ca, 0x83db, 0x03de, 0x03d4, 0x83d1,
68 0x83f3, 0x03f6, 0x03fc, 0x83f9, 0x03e8, 0x83ed, 0x83e7, 0x03e2,
69 0x83a3, 0x03a6, 0x03ac, 0x83a9, 0x03b8, 0x83bd, 0x83b7, 0x03b2,
70 0x0390, 0x8395, 0x839f, 0x039a, 0x838b, 0x038e, 0x0384, 0x8381,
71
72 0x0280, 0x8285, 0x828f, 0x028a, 0x829b, 0x029e, 0x0294, 0x8291,
73 0x82b3, 0x02b6, 0x02bc, 0x82b9, 0x02a8, 0x82ad, 0x82a7, 0x02a2,
74 0x82e3, 0x02e6, 0x02ec, 0x82e9, 0x02f8, 0x82fd, 0x82f7, 0x02f2,
75 0x02d0, 0x82d5, 0x82df, 0x02da, 0x82cb, 0x02ce, 0x02c4, 0x82c1,
76 0x8243, 0x0246, 0x024c, 0x8249, 0x0258, 0x825d, 0x8257, 0x0252,
77 0x0270, 0x8275, 0x827f, 0x027a, 0x826b, 0x026e, 0x0264, 0x8261,
78 0x0220, 0x8225, 0x822f, 0x022a, 0x823b, 0x023e, 0x0234, 0x8231,
79 0x8213, 0x0216, 0x021c, 0x8219, 0x0208, 0x820d, 0x8207, 0x0202
80};
81
82# define CRC_POLY 0x8005
83
84/*
85 * NAME: bit->init()
86 * DESCRIPTION: initialize bit pointer struct
87 */
88void mad_bit_init(struct mad_bitptr *bitptr, unsigned char const *byte)
89{
90 bitptr->byte = byte;
91 bitptr->cache = 0;
92 bitptr->left = CHAR_BIT;
93}
94
95/*
96 * NAME: bit->length()
97 * DESCRIPTION: return number of bits between start and end points
98 */
99unsigned int mad_bit_length(struct mad_bitptr const *begin,
100 struct mad_bitptr const *end)
101{
102 return begin->left +
103 CHAR_BIT * (end->byte - (begin->byte + 1)) + (CHAR_BIT - end->left);
104}
105
106/*
107 * NAME: bit->nextbyte()
108 * DESCRIPTION: return pointer to next unprocessed byte
109 */
110unsigned char const *mad_bit_nextbyte(struct mad_bitptr const *bitptr)
111{
112 return bitptr->left == CHAR_BIT ? bitptr->byte : bitptr->byte + 1;
113}
114
115/*
116 * NAME: bit->skip()
117 * DESCRIPTION: advance bit pointer
118 */
119void mad_bit_skip(struct mad_bitptr *bitptr, unsigned int len)
120{
121 bitptr->byte += len / CHAR_BIT;
122 bitptr->left -= len % CHAR_BIT;
123
124 if (bitptr->left > CHAR_BIT) {
125 bitptr->byte++;
126 bitptr->left += CHAR_BIT;
127 }
128
129 if (bitptr->left < CHAR_BIT)
130 bitptr->cache = *bitptr->byte;
131}
132
133/*
134 * NAME: bit->read()
135 * DESCRIPTION: read an arbitrary number of bits and return their UIMSBF value
136 */
137unsigned long mad_bit_read(struct mad_bitptr *bitptr, unsigned int len)
138{
139 register unsigned long value;
140
141 if (bitptr->left == CHAR_BIT)
142 bitptr->cache = *bitptr->byte;
143
144 if (len < bitptr->left) {
145 value = (bitptr->cache & ((1 << bitptr->left) - 1)) >>
146 (bitptr->left - len);
147 bitptr->left -= len;
148
149 return value;
150 }
151
152 /* remaining bits in current byte */
153
154 value = bitptr->cache & ((1 << bitptr->left) - 1);
155 len -= bitptr->left;
156
157 bitptr->byte++;
158 bitptr->left = CHAR_BIT;
159
160 /* more bytes */
161
162 while (len >= CHAR_BIT) {
163 value = (value << CHAR_BIT) | *bitptr->byte++;
164 len -= CHAR_BIT;
165 }
166
167 if (len > 0) {
168 bitptr->cache = *bitptr->byte;
169
170 value = (value << len) | (bitptr->cache >> (CHAR_BIT - len));
171 bitptr->left -= len;
172 }
173
174 return value;
175}
176
177# if 0
178/*
179 * NAME: bit->write()
180 * DESCRIPTION: write an arbitrary number of bits
181 */
182void mad_bit_write(struct mad_bitptr *bitptr, unsigned int len,
183 unsigned long value)
184{
185 unsigned char *ptr;
186
187 ptr = (unsigned char *) bitptr->byte;
188
189 /* ... */
190}
191# endif
192
193/*
194 * NAME: bit->crc()
195 * DESCRIPTION: compute CRC-check word
196 */
197unsigned short mad_bit_crc(struct mad_bitptr bitptr, unsigned int len,
198 unsigned short init)
199{
200 register unsigned int crc;
201
202 for (crc = init; len >= 32; len -= 32) {
203 register unsigned long data;
204
205 data = mad_bit_read(&bitptr, 32);
206
207 crc = (crc << 8) ^ crc_table[((crc >> 8) ^ (data >> 24)) & 0xff];
208 crc = (crc << 8) ^ crc_table[((crc >> 8) ^ (data >> 16)) & 0xff];
209 crc = (crc << 8) ^ crc_table[((crc >> 8) ^ (data >> 8)) & 0xff];
210 crc = (crc << 8) ^ crc_table[((crc >> 8) ^ (data >> 0)) & 0xff];
211 }
212
213 switch (len / 8) {
214 case 3: crc = (crc << 8) ^
215 crc_table[((crc >> 8) ^ mad_bit_read(&bitptr, 8)) & 0xff];
216 case 2: crc = (crc << 8) ^
217 crc_table[((crc >> 8) ^ mad_bit_read(&bitptr, 8)) & 0xff];
218 case 1: crc = (crc << 8) ^
219 crc_table[((crc >> 8) ^ mad_bit_read(&bitptr, 8)) & 0xff];
220
221 len %= 8;
222
223 case 0: break;
224 }
225
226 while (len--) {
227 register unsigned int msb;
228
229 msb = mad_bit_read(&bitptr, 1) ^ (crc >> 15);
230
231 crc <<= 1;
232 if (msb & 1)
233 crc ^= CRC_POLY;
234 }
235
236 return crc & 0xffff;
237}
diff --git a/uisimulator/common/libmad/bit.h b/uisimulator/common/libmad/bit.h
new file mode 100644
index 0000000000..3448d40091
--- /dev/null
+++ b/uisimulator/common/libmad/bit.h
@@ -0,0 +1,47 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22# ifndef LIBMAD_BIT_H
23# define LIBMAD_BIT_H
24
25struct mad_bitptr {
26 unsigned char const *byte;
27 unsigned short cache;
28 unsigned short left;
29};
30
31void mad_bit_init(struct mad_bitptr *, unsigned char const *);
32
33# define mad_bit_finish(bitptr) /* nothing */
34
35unsigned int mad_bit_length(struct mad_bitptr const *,
36 struct mad_bitptr const *);
37
38# define mad_bit_bitsleft(bitptr) ((bitptr)->left)
39unsigned char const *mad_bit_nextbyte(struct mad_bitptr const *);
40
41void mad_bit_skip(struct mad_bitptr *, unsigned int);
42unsigned long mad_bit_read(struct mad_bitptr *, unsigned int);
43void mad_bit_write(struct mad_bitptr *, unsigned int, unsigned long);
44
45unsigned short mad_bit_crc(struct mad_bitptr, unsigned int, unsigned short);
46
47# endif
diff --git a/uisimulator/common/libmad/decoder.c b/uisimulator/common/libmad/decoder.c
new file mode 100644
index 0000000000..3b00179d28
--- /dev/null
+++ b/uisimulator/common/libmad/decoder.c
@@ -0,0 +1,570 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22# ifdef HAVE_CONFIG_H
23# include "madconfig.h"
24# endif
25
26# include "global.h"
27
28# ifdef HAVE_SYS_TYPES_H
29# include <sys/types.h>
30# endif
31
32# ifdef HAVE_SYS_WAIT_H
33# include <sys/wait.h>
34# endif
35
36# ifdef HAVE_UNISTD_H
37# include <unistd.h>
38# endif
39
40# ifdef HAVE_FCNTL_H
41# include <fcntl.h>
42# endif
43
44# include <stdlib.h>
45
46# ifdef HAVE_ERRNO_H
47# include <errno.h>
48# endif
49
50# include "stream.h"
51# include "frame.h"
52# include "synth.h"
53# include "decoder.h"
54
55void mad_decoder_init(struct mad_decoder *decoder, void *data,
56 enum mad_flow (*input_func)(void *,
57 struct mad_stream *),
58 enum mad_flow (*header_func)(void *,
59 struct mad_header const *),
60 enum mad_flow (*filter_func)(void *,
61 struct mad_stream const *,
62 struct mad_frame *),
63 enum mad_flow (*output_func)(void *,
64 struct mad_header const *,
65 struct mad_pcm *),
66 enum mad_flow (*error_func)(void *,
67 struct mad_stream *,
68 struct mad_frame *),
69 enum mad_flow (*message_func)(void *,
70 void *, unsigned int *))
71{
72 decoder->mode = -1;
73
74 decoder->options = 0;
75
76 decoder->async.pid = 0;
77 decoder->async.in = -1;
78 decoder->async.out = -1;
79
80 decoder->sync = 0;
81
82 decoder->cb_data = data;
83
84 decoder->input_func = input_func;
85 decoder->header_func = header_func;
86 decoder->filter_func = filter_func;
87 decoder->output_func = output_func;
88 decoder->error_func = error_func;
89 decoder->message_func = message_func;
90}
91
92int mad_decoder_finish(struct mad_decoder *decoder)
93{
94# if defined(USE_ASYNC)
95 if (decoder->mode == MAD_DECODER_MODE_ASYNC && decoder->async.pid) {
96 pid_t pid;
97 int status;
98
99 close(decoder->async.in);
100
101 do
102 pid = waitpid(decoder->async.pid, &status, 0);
103 while (pid == -1 && errno == EINTR);
104
105 decoder->mode = -1;
106
107 close(decoder->async.out);
108
109 decoder->async.pid = 0;
110 decoder->async.in = -1;
111 decoder->async.out = -1;
112
113 if (pid == -1)
114 return -1;
115
116 return (!WIFEXITED(status) || WEXITSTATUS(status)) ? -1 : 0;
117 }
118# endif
119
120 return 0;
121}
122
123# if defined(USE_ASYNC)
124static
125enum mad_flow send_io(int fd, void const *data, size_t len)
126{
127 char const *ptr = data;
128 ssize_t count;
129
130 while (len) {
131 do
132 count = write(fd, ptr, len);
133 while (count == -1 && errno == EINTR);
134
135 if (count == -1)
136 return MAD_FLOW_BREAK;
137
138 len -= count;
139 ptr += count;
140 }
141
142 return MAD_FLOW_CONTINUE;
143}
144
145static
146enum mad_flow receive_io(int fd, void *buffer, size_t len)
147{
148 char *ptr = buffer;
149 ssize_t count;
150
151 while (len) {
152 do
153 count = read(fd, ptr, len);
154 while (count == -1 && errno == EINTR);
155
156 if (count == -1)
157 return (errno == EAGAIN) ? MAD_FLOW_IGNORE : MAD_FLOW_BREAK;
158 else if (count == 0)
159 return MAD_FLOW_STOP;
160
161 len -= count;
162 ptr += count;
163 }
164
165 return MAD_FLOW_CONTINUE;
166}
167
168static
169enum mad_flow receive_io_blocking(int fd, void *buffer, size_t len)
170{
171 int flags, blocking;
172 enum mad_flow result;
173
174 flags = fcntl(fd, F_GETFL);
175 if (flags == -1)
176 return MAD_FLOW_BREAK;
177
178 blocking = flags & ~O_NONBLOCK;
179
180 if (blocking != flags &&
181 fcntl(fd, F_SETFL, blocking) == -1)
182 return MAD_FLOW_BREAK;
183
184 result = receive_io(fd, buffer, len);
185
186 if (flags != blocking &&
187 fcntl(fd, F_SETFL, flags) == -1)
188 return MAD_FLOW_BREAK;
189
190 return result;
191}
192
193static
194enum mad_flow send(int fd, void const *message, unsigned int size)
195{
196 enum mad_flow result;
197
198 /* send size */
199
200 result = send_io(fd, &size, sizeof(size));
201
202 /* send message */
203
204 if (result == MAD_FLOW_CONTINUE)
205 result = send_io(fd, message, size);
206
207 return result;
208}
209
210static
211enum mad_flow receive(int fd, void **message, unsigned int *size)
212{
213 enum mad_flow result;
214 unsigned int actual;
215
216 if (*message == 0)
217 *size = 0;
218
219 /* receive size */
220
221 result = receive_io(fd, &actual, sizeof(actual));
222
223 /* receive message */
224
225 if (result == MAD_FLOW_CONTINUE) {
226 if (actual > *size)
227 actual -= *size;
228 else {
229 *size = actual;
230 actual = 0;
231 }
232
233 if (*size > 0) {
234 if (*message == 0) {
235 *message = malloc(*size);
236 if (*message == 0)
237 return MAD_FLOW_BREAK;
238 }
239
240 result = receive_io_blocking(fd, *message, *size);
241 }
242
243 /* throw away remainder of message */
244
245 while (actual && result == MAD_FLOW_CONTINUE) {
246 char sink[256];
247 unsigned int len;
248
249 len = actual > sizeof(sink) ? sizeof(sink) : actual;
250
251 result = receive_io_blocking(fd, sink, len);
252
253 actual -= len;
254 }
255 }
256
257 return result;
258}
259
260static
261enum mad_flow check_message(struct mad_decoder *decoder)
262{
263 enum mad_flow result;
264 void *message = 0;
265 unsigned int size;
266
267 result = receive(decoder->async.in, &message, &size);
268
269 if (result == MAD_FLOW_CONTINUE) {
270 if (decoder->message_func == 0)
271 size = 0;
272 else {
273 result = decoder->message_func(decoder->cb_data, message, &size);
274
275 if (result == MAD_FLOW_IGNORE ||
276 result == MAD_FLOW_BREAK)
277 size = 0;
278 }
279
280 if (send(decoder->async.out, message, size) != MAD_FLOW_CONTINUE)
281 result = MAD_FLOW_BREAK;
282 }
283
284 if (message)
285 free(message);
286
287 return result;
288}
289# endif
290
291static
292enum mad_flow error_default(void *data, struct mad_stream *stream,
293 struct mad_frame *frame)
294{
295 int *bad_last_frame = data;
296
297 switch (stream->error) {
298 case MAD_ERROR_BADCRC:
299 if (*bad_last_frame)
300 mad_frame_mute(frame);
301 else
302 *bad_last_frame = 1;
303
304 return MAD_FLOW_IGNORE;
305
306 default:
307 return MAD_FLOW_CONTINUE;
308 }
309}
310
311static
312int run_sync(struct mad_decoder *decoder)
313{
314 enum mad_flow (*error_func)(void *, struct mad_stream *, struct mad_frame *);
315 void *error_data;
316 int bad_last_frame = 0;
317 struct mad_stream *stream;
318 struct mad_frame *frame;
319 struct mad_synth *synth;
320 int result = 0;
321
322 if (decoder->input_func == 0)
323 return 0;
324
325 if (decoder->error_func) {
326 error_func = decoder->error_func;
327 error_data = decoder->cb_data;
328 }
329 else {
330 error_func = error_default;
331 error_data = &bad_last_frame;
332 }
333
334 stream = &decoder->sync->stream;
335 frame = &decoder->sync->frame;
336 synth = &decoder->sync->synth;
337
338 mad_stream_init(stream);
339 mad_frame_init(frame);
340 mad_synth_init(synth);
341
342 mad_stream_options(stream, decoder->options);
343
344 do {
345 switch (decoder->input_func(decoder->cb_data, stream)) {
346 case MAD_FLOW_STOP:
347 goto done;
348 case MAD_FLOW_BREAK:
349 goto fail;
350 case MAD_FLOW_IGNORE:
351 continue;
352 case MAD_FLOW_CONTINUE:
353 break;
354 }
355
356 while (1) {
357# if defined(USE_ASYNC)
358 if (decoder->mode == MAD_DECODER_MODE_ASYNC) {
359 switch (check_message(decoder)) {
360 case MAD_FLOW_IGNORE:
361 case MAD_FLOW_CONTINUE:
362 break;
363 case MAD_FLOW_BREAK:
364 goto fail;
365 case MAD_FLOW_STOP:
366 goto done;
367 }
368 }
369# endif
370
371 if (decoder->header_func) {
372 if (mad_header_decode(&frame->header, stream) == -1) {
373 if (!MAD_RECOVERABLE(stream->error))
374 break;
375
376 switch (error_func(error_data, stream, frame)) {
377 case MAD_FLOW_STOP:
378 goto done;
379 case MAD_FLOW_BREAK:
380 goto fail;
381 case MAD_FLOW_IGNORE:
382 case MAD_FLOW_CONTINUE:
383 default:
384 continue;
385 }
386 }
387
388 switch (decoder->header_func(decoder->cb_data, &frame->header)) {
389 case MAD_FLOW_STOP:
390 goto done;
391 case MAD_FLOW_BREAK:
392 goto fail;
393 case MAD_FLOW_IGNORE:
394 continue;
395 case MAD_FLOW_CONTINUE:
396 break;
397 }
398 }
399
400 if (mad_frame_decode(frame, stream) == -1) {
401 if (!MAD_RECOVERABLE(stream->error))
402 break;
403
404 switch (error_func(error_data, stream, frame)) {
405 case MAD_FLOW_STOP:
406 goto done;
407 case MAD_FLOW_BREAK:
408 goto fail;
409 case MAD_FLOW_IGNORE:
410 break;
411 case MAD_FLOW_CONTINUE:
412 default:
413 continue;
414 }
415 }
416 else
417 bad_last_frame = 0;
418
419 if (decoder->filter_func) {
420 switch (decoder->filter_func(decoder->cb_data, stream, frame)) {
421 case MAD_FLOW_STOP:
422 goto done;
423 case MAD_FLOW_BREAK:
424 goto fail;
425 case MAD_FLOW_IGNORE:
426 continue;
427 case MAD_FLOW_CONTINUE:
428 break;
429 }
430 }
431
432 mad_synth_frame(synth, frame);
433
434 if (decoder->output_func) {
435 switch (decoder->output_func(decoder->cb_data,
436 &frame->header, &synth->pcm)) {
437 case MAD_FLOW_STOP:
438 goto done;
439 case MAD_FLOW_BREAK:
440 goto fail;
441 case MAD_FLOW_IGNORE:
442 case MAD_FLOW_CONTINUE:
443 break;
444 }
445 }
446 }
447 }
448 while (stream->error == MAD_ERROR_BUFLEN);
449
450 fail:
451 result = -1;
452
453 done:
454 mad_synth_finish(synth);
455 mad_frame_finish(frame);
456 mad_stream_finish(stream);
457
458 return result;
459}
460
461# if defined(USE_ASYNC)
462static
463int run_async(struct mad_decoder *decoder)
464{
465 pid_t pid;
466 int ptoc[2], ctop[2], flags;
467
468 if (pipe(ptoc) == -1)
469 return -1;
470
471 if (pipe(ctop) == -1) {
472 close(ptoc[0]);
473 close(ptoc[1]);
474 return -1;
475 }
476
477 flags = fcntl(ptoc[0], F_GETFL);
478 if (flags == -1 ||
479 fcntl(ptoc[0], F_SETFL, flags | O_NONBLOCK) == -1) {
480 close(ctop[0]);
481 close(ctop[1]);
482 close(ptoc[0]);
483 close(ptoc[1]);
484 return -1;
485 }
486
487 pid = fork();
488 if (pid == -1) {
489 close(ctop[0]);
490 close(ctop[1]);
491 close(ptoc[0]);
492 close(ptoc[1]);
493 return -1;
494 }
495
496 decoder->async.pid = pid;
497
498 if (pid) {
499 /* parent */
500
501 close(ptoc[0]);
502 close(ctop[1]);
503
504 decoder->async.in = ctop[0];
505 decoder->async.out = ptoc[1];
506
507 return 0;
508 }
509
510 /* child */
511
512 close(ptoc[1]);
513 close(ctop[0]);
514
515 decoder->async.in = ptoc[0];
516 decoder->async.out = ctop[1];
517
518 _exit(run_sync(decoder));
519
520 /* not reached */
521 return -1;
522}
523# endif
524
525int mad_decoder_run(struct mad_decoder *decoder, enum mad_decoder_mode mode)
526{
527 int result;
528 int (*run)(struct mad_decoder *) = 0;
529
530 switch (decoder->mode = mode) {
531 case MAD_DECODER_MODE_SYNC:
532 run = run_sync;
533 break;
534
535 case MAD_DECODER_MODE_ASYNC:
536# if defined(USE_ASYNC)
537 run = run_async;
538# endif
539 break;
540 }
541
542 if (run == 0)
543 return -1;
544
545 decoder->sync = malloc(sizeof(*decoder->sync));
546 if (decoder->sync == 0)
547 return -1;
548
549 result = run(decoder);
550
551 free(decoder->sync);
552 decoder->sync = 0;
553
554 return result;
555}
556
557int mad_decoder_message(struct mad_decoder *decoder,
558 void *message, unsigned int *len)
559{
560# if defined(USE_ASYNC)
561 if (decoder->mode != MAD_DECODER_MODE_ASYNC ||
562 send(decoder->async.out, message, *len) != MAD_FLOW_CONTINUE ||
563 receive(decoder->async.in, &message, len) != MAD_FLOW_CONTINUE)
564 return -1;
565
566 return 0;
567# else
568 return -1;
569# endif
570}
diff --git a/uisimulator/common/libmad/decoder.h b/uisimulator/common/libmad/decoder.h
new file mode 100644
index 0000000000..f34150ded8
--- /dev/null
+++ b/uisimulator/common/libmad/decoder.h
@@ -0,0 +1,91 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22# ifndef LIBMAD_DECODER_H
23# define LIBMAD_DECODER_H
24
25# include "stream.h"
26# include "frame.h"
27# include "synth.h"
28
29enum mad_decoder_mode {
30 MAD_DECODER_MODE_SYNC = 0,
31 MAD_DECODER_MODE_ASYNC
32};
33
34enum mad_flow {
35 MAD_FLOW_CONTINUE = 0x0000, /* continue normally */
36 MAD_FLOW_STOP = 0x0010, /* stop decoding normally */
37 MAD_FLOW_BREAK = 0x0011, /* stop decoding and signal an error */
38 MAD_FLOW_IGNORE = 0x0020 /* ignore the current frame */
39};
40
41struct mad_decoder {
42 enum mad_decoder_mode mode;
43
44 int options;
45
46 struct {
47 long pid;
48 int in;
49 int out;
50 } async;
51
52 struct {
53 struct mad_stream stream;
54 struct mad_frame frame;
55 struct mad_synth synth;
56 } *sync;
57
58 void *cb_data;
59
60 enum mad_flow (*input_func)(void *, struct mad_stream *);
61 enum mad_flow (*header_func)(void *, struct mad_header const *);
62 enum mad_flow (*filter_func)(void *,
63 struct mad_stream const *, struct mad_frame *);
64 enum mad_flow (*output_func)(void *,
65 struct mad_header const *, struct mad_pcm *);
66 enum mad_flow (*error_func)(void *, struct mad_stream *, struct mad_frame *);
67 enum mad_flow (*message_func)(void *, void *, unsigned int *);
68};
69
70void mad_decoder_init(struct mad_decoder *, void *,
71 enum mad_flow (*)(void *, struct mad_stream *),
72 enum mad_flow (*)(void *, struct mad_header const *),
73 enum mad_flow (*)(void *,
74 struct mad_stream const *,
75 struct mad_frame *),
76 enum mad_flow (*)(void *,
77 struct mad_header const *,
78 struct mad_pcm *),
79 enum mad_flow (*)(void *,
80 struct mad_stream *,
81 struct mad_frame *),
82 enum mad_flow (*)(void *, void *, unsigned int *));
83int mad_decoder_finish(struct mad_decoder *);
84
85# define mad_decoder_options(decoder, opts) \
86 ((void) ((decoder)->options = (opts)))
87
88int mad_decoder_run(struct mad_decoder *, enum mad_decoder_mode);
89int mad_decoder_message(struct mad_decoder *, void *, unsigned int *);
90
91# endif
diff --git a/uisimulator/common/libmad/fixed.c b/uisimulator/common/libmad/fixed.c
new file mode 100644
index 0000000000..26ec6b98b0
--- /dev/null
+++ b/uisimulator/common/libmad/fixed.c
@@ -0,0 +1,37 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22# ifdef HAVE_CONFIG_H
23# include "madconfig.h"
24# endif
25
26# include "global.h"
27
28# include "fixed.h"
29
30/*
31 * NAME: fixed->abs()
32 * DESCRIPTION: return absolute value of a fixed-point number
33 */
34mad_fixed_t mad_f_abs(mad_fixed_t x)
35{
36 return x < 0 ? -x : x;
37}
diff --git a/uisimulator/common/libmad/fixed.h b/uisimulator/common/libmad/fixed.h
new file mode 100644
index 0000000000..17db8789ee
--- /dev/null
+++ b/uisimulator/common/libmad/fixed.h
@@ -0,0 +1,476 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22# ifndef LIBMAD_FIXED_H
23# define LIBMAD_FIXED_H
24
25# if SIZEOF_INT >= 4
26typedef signed int mad_fixed_t;
27
28typedef signed int mad_fixed64hi_t;
29typedef unsigned int mad_fixed64lo_t;
30# else
31typedef signed long mad_fixed_t;
32
33typedef signed long mad_fixed64hi_t;
34typedef unsigned long mad_fixed64lo_t;
35# endif
36
37# if defined(_MSC_VER)
38# define mad_fixed64_t signed __int64
39# elif 1 || defined(__GNUC__)
40# define mad_fixed64_t signed long long
41# endif
42
43# if defined(FPM_FLOAT)
44typedef double mad_sample_t;
45# else
46typedef mad_fixed_t mad_sample_t;
47# endif
48
49/*
50 * Fixed-point format: 0xABBBBBBB
51 * A == whole part (sign + 3 bits)
52 * B == fractional part (28 bits)
53 *
54 * Values are signed two's complement, so the effective range is:
55 * 0x80000000 to 0x7fffffff
56 * -8.0 to +7.9999999962747097015380859375
57 *
58 * The smallest representable value is:
59 * 0x00000001 == 0.0000000037252902984619140625 (i.e. about 3.725e-9)
60 *
61 * 28 bits of fractional accuracy represent about
62 * 8.6 digits of decimal accuracy.
63 *
64 * Fixed-point numbers can be added or subtracted as normal
65 * integers, but multiplication requires shifting the 64-bit result
66 * from 56 fractional bits back to 28 (and rounding.)
67 *
68 * Changing the definition of MAD_F_FRACBITS is only partially
69 * supported, and must be done with care.
70 */
71
72# define MAD_F_FRACBITS 28
73
74# if MAD_F_FRACBITS == 28
75# define MAD_F(x) ((mad_fixed_t) (x##L))
76# else
77# if MAD_F_FRACBITS < 28
78# warning "MAD_F_FRACBITS < 28"
79# define MAD_F(x) ((mad_fixed_t) \
80 (((x##L) + \
81 (1L << (28 - MAD_F_FRACBITS - 1))) >> \
82 (28 - MAD_F_FRACBITS)))
83# elif MAD_F_FRACBITS > 28
84# error "MAD_F_FRACBITS > 28 not currently supported"
85# define MAD_F(x) ((mad_fixed_t) \
86 ((x##L) << (MAD_F_FRACBITS - 28)))
87# endif
88# endif
89
90# define MAD_F_MIN ((mad_fixed_t) -0x80000000L)
91# define MAD_F_MAX ((mad_fixed_t) +0x7fffffffL)
92
93# define MAD_F_ONE MAD_F(0x10000000)
94
95# define mad_f_tofixed(x) ((mad_fixed_t) \
96 ((x) * (double) (1L << MAD_F_FRACBITS) + 0.5))
97# define mad_f_todouble(x) ((double) \
98 ((x) / (double) (1L << MAD_F_FRACBITS)))
99
100# define mad_f_intpart(x) ((x) >> MAD_F_FRACBITS)
101# define mad_f_fracpart(x) ((x) & ((1L << MAD_F_FRACBITS) - 1))
102 /* (x should be positive) */
103
104# define mad_f_fromint(x) ((x) << MAD_F_FRACBITS)
105
106# define mad_f_add(x, y) ((x) + (y))
107# define mad_f_sub(x, y) ((x) - (y))
108
109# if defined(FPM_FLOAT)
110# error "FPM_FLOAT not yet supported"
111
112# undef MAD_F
113# define MAD_F(x) mad_f_todouble(x)
114
115# define mad_f_mul(x, y) ((x) * (y))
116# define mad_f_scale64
117
118# undef ASO_ZEROCHECK
119
120# elif defined(FPM_64BIT)
121
122/*
123 * This version should be the most accurate if 64-bit types are supported by
124 * the compiler, although it may not be the most efficient.
125 */
126# if defined(OPT_ACCURACY)
127# define mad_f_mul(x, y) \
128 ((mad_fixed_t) \
129 ((((mad_fixed64_t) (x) * (y)) + \
130 (1L << (MAD_F_SCALEBITS - 1))) >> MAD_F_SCALEBITS))
131# else
132# define mad_f_mul(x, y) \
133 ((mad_fixed_t) (((mad_fixed64_t) (x) * (y)) >> MAD_F_SCALEBITS))
134# endif
135
136# define MAD_F_SCALEBITS MAD_F_FRACBITS
137
138/* --- Intel --------------------------------------------------------------- */
139
140# elif defined(FPM_INTEL)
141
142# if defined(_MSC_VER)
143# pragma warning(push)
144# pragma warning(disable: 4035) /* no return value */
145static __forceinline
146mad_fixed_t mad_f_mul_inline(mad_fixed_t x, mad_fixed_t y)
147{
148 enum {
149 fracbits = MAD_F_FRACBITS
150 };
151
152 __asm {
153 mov eax, x
154 imul y
155 shrd eax, edx, fracbits
156 }
157
158 /* implicit return of eax */
159}
160# pragma warning(pop)
161
162# define mad_f_mul mad_f_mul_inline
163# define mad_f_scale64
164# else
165/*
166 * This Intel version is fast and accurate; the disposition of the least
167 * significant bit depends on OPT_ACCURACY via mad_f_scale64().
168 */
169# define MAD_F_MLX(hi, lo, x, y) \
170 asm ("imull %3" \
171 : "=a" (lo), "=d" (hi) \
172 : "%a" (x), "rm" (y) \
173 : "cc")
174
175# if defined(OPT_ACCURACY)
176/*
177 * This gives best accuracy but is not very fast.
178 */
179# define MAD_F_MLA(hi, lo, x, y) \
180 ({ mad_fixed64hi_t __hi; \
181 mad_fixed64lo_t __lo; \
182 MAD_F_MLX(__hi, __lo, (x), (y)); \
183 asm ("addl %2,%0\n\t" \
184 "adcl %3,%1" \
185 : "=rm" (lo), "=rm" (hi) \
186 : "r" (__lo), "r" (__hi), "0" (lo), "1" (hi) \
187 : "cc"); \
188 })
189# endif /* OPT_ACCURACY */
190
191# if defined(OPT_ACCURACY)
192/*
193 * Surprisingly, this is faster than SHRD followed by ADC.
194 */
195# define mad_f_scale64(hi, lo) \
196 ({ mad_fixed64hi_t __hi_; \
197 mad_fixed64lo_t __lo_; \
198 mad_fixed_t __result; \
199 asm ("addl %4,%2\n\t" \
200 "adcl %5,%3" \
201 : "=rm" (__lo_), "=rm" (__hi_) \
202 : "0" (lo), "1" (hi), \
203 "ir" (1L << (MAD_F_SCALEBITS - 1)), "ir" (0) \
204 : "cc"); \
205 asm ("shrdl %3,%2,%1" \
206 : "=rm" (__result) \
207 : "0" (__lo_), "r" (__hi_), "I" (MAD_F_SCALEBITS) \
208 : "cc"); \
209 __result; \
210 })
211# else
212# define mad_f_scale64(hi, lo) \
213 ({ mad_fixed_t __result; \
214 asm ("shrdl %3,%2,%1" \
215 : "=rm" (__result) \
216 : "0" (lo), "r" (hi), "I" (MAD_F_SCALEBITS) \
217 : "cc"); \
218 __result; \
219 })
220# endif /* OPT_ACCURACY */
221
222# define MAD_F_SCALEBITS MAD_F_FRACBITS
223# endif
224
225/* --- ARM ----------------------------------------------------------------- */
226
227# elif defined(FPM_ARM)
228
229/*
230 * This ARM V4 version is as accurate as FPM_64BIT but much faster. The
231 * least significant bit is properly rounded at no CPU cycle cost!
232 */
233# if 1
234/*
235 * There's a bug somewhere, possibly in the compiler, that sometimes makes
236 * this necessary instead of the default implementation via MAD_F_MLX and
237 * mad_f_scale64. It may be related to the use (or lack) of
238 * -finline-functions and/or -fstrength-reduce.
239 *
240 * This is also apparently faster than MAD_F_MLX/mad_f_scale64.
241 */
242# define mad_f_mul(x, y) \
243 ({ mad_fixed64hi_t __hi; \
244 mad_fixed64lo_t __lo; \
245 mad_fixed_t __result; \
246 asm ("smull %0, %1, %3, %4\n\t" \
247 "movs %0, %0, lsr %5\n\t" \
248 "adc %2, %0, %1, lsl %6" \
249 : "=&r" (__lo), "=&r" (__hi), "=r" (__result) \
250 : "%r" (x), "r" (y), \
251 "M" (MAD_F_SCALEBITS), "M" (32 - MAD_F_SCALEBITS) \
252 : "cc"); \
253 __result; \
254 })
255# endif
256
257# define MAD_F_MLX(hi, lo, x, y) \
258 asm ("smull %0, %1, %2, %3" \
259 : "=&r" (lo), "=&r" (hi) \
260 : "%r" (x), "r" (y))
261
262# define MAD_F_MLA(hi, lo, x, y) \
263 asm ("smlal %0, %1, %2, %3" \
264 : "+r" (lo), "+r" (hi) \
265 : "%r" (x), "r" (y))
266
267# define MAD_F_MLN(hi, lo) \
268 asm ("rsbs %0, %2, #0\n\t" \
269 "rsc %1, %3, #0" \
270 : "=r" (lo), "=r" (hi) \
271 : "0" (lo), "1" (hi) \
272 : "cc")
273
274# define mad_f_scale64(hi, lo) \
275 ({ mad_fixed_t __result; \
276 asm ("movs %0, %1, lsr %3\n\t" \
277 "adc %0, %0, %2, lsl %4" \
278 : "=r" (__result) \
279 : "r" (lo), "r" (hi), \
280 "M" (MAD_F_SCALEBITS), "M" (32 - MAD_F_SCALEBITS) \
281 : "cc"); \
282 __result; \
283 })
284
285# define MAD_F_SCALEBITS MAD_F_FRACBITS
286
287/* --- MIPS ---------------------------------------------------------------- */
288
289# elif defined(FPM_MIPS)
290
291/*
292 * This MIPS version is fast and accurate; the disposition of the least
293 * significant bit depends on OPT_ACCURACY via mad_f_scale64().
294 */
295# define MAD_F_MLX(hi, lo, x, y) \
296 asm ("mult %2,%3" \
297 : "=l" (lo), "=h" (hi) \
298 : "%r" (x), "r" (y))
299
300# if defined(HAVE_MADD_ASM)
301# define MAD_F_MLA(hi, lo, x, y) \
302 asm ("madd %2,%3" \
303 : "+l" (lo), "+h" (hi) \
304 : "%r" (x), "r" (y))
305# elif defined(HAVE_MADD16_ASM)
306/*
307 * This loses significant accuracy due to the 16-bit integer limit in the
308 * multiply/accumulate instruction.
309 */
310# define MAD_F_ML0(hi, lo, x, y) \
311 asm ("mult %2,%3" \
312 : "=l" (lo), "=h" (hi) \
313 : "%r" ((x) >> 12), "r" ((y) >> 16))
314# define MAD_F_MLA(hi, lo, x, y) \
315 asm ("madd16 %2,%3" \
316 : "+l" (lo), "+h" (hi) \
317 : "%r" ((x) >> 12), "r" ((y) >> 16))
318# define MAD_F_MLZ(hi, lo) ((mad_fixed_t) (lo))
319# endif
320
321# if defined(OPT_SPEED)
322# define mad_f_scale64(hi, lo) \
323 ((mad_fixed_t) ((hi) << (32 - MAD_F_SCALEBITS)))
324# define MAD_F_SCALEBITS MAD_F_FRACBITS
325# endif
326
327/* --- SPARC --------------------------------------------------------------- */
328
329# elif defined(FPM_SPARC)
330
331/*
332 * This SPARC V8 version is fast and accurate; the disposition of the least
333 * significant bit depends on OPT_ACCURACY via mad_f_scale64().
334 */
335# define MAD_F_MLX(hi, lo, x, y) \
336 asm ("smul %2, %3, %0\n\t" \
337 "rd %%y, %1" \
338 : "=r" (lo), "=r" (hi) \
339 : "%r" (x), "rI" (y))
340
341/* --- PowerPC ------------------------------------------------------------- */
342
343# elif defined(FPM_PPC)
344
345/*
346 * This PowerPC version is tuned for the 4xx embedded processors. It is
347 * effectively a tuned version of FPM_64BIT. It is a little faster and just
348 * as accurate. The disposition of the least significant bit depends on
349 * OPT_ACCURACY via mad_f_scale64().
350 */
351# define MAD_F_MLX(hi, lo, x, y) \
352 asm ("mulhw %1, %2, %3\n\t" \
353 "mullw %0, %2, %3" \
354 : "=&r" (lo), "=&r" (hi) \
355 : "%r" (x), "r" (y))
356
357# define MAD_F_MLA(hi, lo, x, y) \
358 ({ mad_fixed64hi_t __hi; \
359 mad_fixed64lo_t __lo; \
360 MAD_F_MLX(__hi, __lo, (x), (y)); \
361 asm ("addc %0, %2, %3\n\t" \
362 "adde %1, %4, %5" \
363 : "=r" (lo), "=r" (hi) \
364 : "%r" (__lo), "0" (lo), "%r" (__hi), "1" (hi)); \
365 })
366
367# if defined(OPT_ACCURACY)
368/*
369 * This is accurate and ~2 - 2.5 times slower than the unrounded version.
370 *
371 * The __volatile__ improves the generated code by another 5% (fewer spills
372 * to memory); eventually they should be removed.
373 */
374# define mad_f_scale64(hi, lo) \
375 ({ mad_fixed_t __result; \
376 mad_fixed64hi_t __hi_; \
377 mad_fixed64lo_t __lo_; \
378 asm __volatile__ ("addc %0, %2, %4\n\t" \
379 "addze %1, %3" \
380 : "=r" (__lo_), "=r" (__hi_) \
381 : "r" (lo), "r" (hi), "r" (1 << (MAD_F_SCALEBITS - 1))); \
382 asm __volatile__ ("rlwinm %0, %2,32-%3,0,%3-1\n\t" \
383 "rlwimi %0, %1,32-%3,%3,31" \
384 : "=&r" (__result) \
385 : "r" (__lo_), "r" (__hi_), "I" (MAD_F_SCALEBITS)); \
386 __result; \
387 })
388# else
389# define mad_f_scale64(hi, lo) \
390 ({ mad_fixed_t __result; \
391 asm ("rlwinm %0, %2,32-%3,0,%3-1\n\t" \
392 "rlwimi %0, %1,32-%3,%3,31" \
393 : "=r" (__result) \
394 : "r" (lo), "r" (hi), "I" (MAD_F_SCALEBITS)); \
395 __result; \
396 })
397# endif /* OPT_ACCURACY */
398
399# define MAD_F_SCALEBITS MAD_F_FRACBITS
400
401/* --- Default ------------------------------------------------------------- */
402
403# elif defined(FPM_DEFAULT)
404
405/*
406 * This version is the most portable but it loses significant accuracy.
407 * Furthermore, accuracy is biased against the second argument, so care
408 * should be taken when ordering operands.
409 *
410 * The scale factors are constant as this is not used with SSO.
411 *
412 * Pre-rounding is required to stay within the limits of compliance.
413 */
414# if defined(OPT_SPEED)
415# define mad_f_mul(x, y) (((x) >> 12) * ((y) >> 16))
416# else
417# define mad_f_mul(x, y) ((((x) + (1L << 11)) >> 12) * \
418 (((y) + (1L << 15)) >> 16))
419# endif
420
421/* ------------------------------------------------------------------------- */
422
423# else
424# error "no FPM selected"
425# endif
426
427/* default implementations */
428
429# if !defined(mad_f_mul)
430# define mad_f_mul(x, y) \
431 ({ mad_fixed64hi_t __hi; \
432 mad_fixed64lo_t __lo; \
433 MAD_F_MLX(__hi, __lo, (x), (y)); \
434 mad_f_scale64(__hi, __lo); \
435 })
436# endif
437
438# if !defined(MAD_F_MLA)
439# define MAD_F_ML0(hi, lo, x, y) ((lo) = mad_f_mul((x), (y)))
440# define MAD_F_MLA(hi, lo, x, y) ((lo) += mad_f_mul((x), (y)))
441# define MAD_F_MLN(hi, lo) ((lo) = -(lo))
442# define MAD_F_MLZ(hi, lo) ((void) (hi), (mad_fixed_t) (lo))
443# endif
444
445# if !defined(MAD_F_ML0)
446# define MAD_F_ML0(hi, lo, x, y) MAD_F_MLX((hi), (lo), (x), (y))
447# endif
448
449# if !defined(MAD_F_MLN)
450# define MAD_F_MLN(hi, lo) ((hi) = ((lo) = -(lo)) ? ~(hi) : -(hi))
451# endif
452
453# if !defined(MAD_F_MLZ)
454# define MAD_F_MLZ(hi, lo) mad_f_scale64((hi), (lo))
455# endif
456
457# if !defined(mad_f_scale64)
458# if defined(OPT_ACCURACY)
459# define mad_f_scale64(hi, lo) \
460 ((((mad_fixed_t) \
461 (((hi) << (32 - (MAD_F_SCALEBITS - 1))) | \
462 ((lo) >> (MAD_F_SCALEBITS - 1)))) + 1) >> 1)
463# else
464# define mad_f_scale64(hi, lo) \
465 ((mad_fixed_t) \
466 (((hi) << (32 - MAD_F_SCALEBITS)) | \
467 ((lo) >> MAD_F_SCALEBITS)))
468# endif
469# define MAD_F_SCALEBITS MAD_F_FRACBITS
470# endif
471
472/* miscellaneous C routines */
473
474mad_fixed_t mad_f_abs(mad_fixed_t);
475
476# endif
diff --git a/uisimulator/common/libmad/frame.c b/uisimulator/common/libmad/frame.c
new file mode 100644
index 0000000000..2f513c61c4
--- /dev/null
+++ b/uisimulator/common/libmad/frame.c
@@ -0,0 +1,499 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22# ifdef HAVE_CONFIG_H
23# include "madconfig.h"
24# endif
25
26# include "global.h"
27
28# include <stdlib.h>
29
30# include "bit.h"
31# include "stream.h"
32# include "frame.h"
33# include "timer.h"
34# include "layer12.h"
35# include "layer3.h"
36
37static
38unsigned long const bitrate_table[5][15] = {
39 /* MPEG-1 */
40 { 0, 32000, 64000, 96000, 128000, 160000, 192000, 224000, /* Layer I */
41 256000, 288000, 320000, 352000, 384000, 416000, 448000 },
42 { 0, 32000, 48000, 56000, 64000, 80000, 96000, 112000, /* Layer II */
43 128000, 160000, 192000, 224000, 256000, 320000, 384000 },
44 { 0, 32000, 40000, 48000, 56000, 64000, 80000, 96000, /* Layer III */
45 112000, 128000, 160000, 192000, 224000, 256000, 320000 },
46
47 /* MPEG-2 LSF */
48 { 0, 32000, 48000, 56000, 64000, 80000, 96000, 112000, /* Layer I */
49 128000, 144000, 160000, 176000, 192000, 224000, 256000 },
50 { 0, 8000, 16000, 24000, 32000, 40000, 48000, 56000, /* Layers */
51 64000, 80000, 96000, 112000, 128000, 144000, 160000 } /* II & III */
52};
53
54static
55unsigned int const samplerate_table[3] = { 44100, 48000, 32000 };
56
57static
58int (*const decoder_table[3])(struct mad_stream *, struct mad_frame *) = {
59 mad_layer_I,
60 mad_layer_II,
61 mad_layer_III
62};
63
64/*
65 * NAME: header->init()
66 * DESCRIPTION: initialize header struct
67 */
68void mad_header_init(struct mad_header *header)
69{
70 header->layer = 0;
71 header->mode = 0;
72 header->mode_extension = 0;
73 header->emphasis = 0;
74
75 header->bitrate = 0;
76 header->samplerate = 0;
77
78 header->crc_check = 0;
79 header->crc_target = 0;
80
81 header->flags = 0;
82 header->private_bits = 0;
83
84 header->duration = mad_timer_zero;
85}
86
87/*
88 * NAME: frame->init()
89 * DESCRIPTION: initialize frame struct
90 */
91void mad_frame_init(struct mad_frame *frame)
92{
93 mad_header_init(&frame->header);
94
95 frame->options = 0;
96
97 frame->overlap = 0;
98 mad_frame_mute(frame);
99}
100
101/*
102 * NAME: frame->finish()
103 * DESCRIPTION: deallocate any dynamic memory associated with frame
104 */
105void mad_frame_finish(struct mad_frame *frame)
106{
107 mad_header_finish(&frame->header);
108
109 if (frame->overlap) {
110 free(frame->overlap);
111 frame->overlap = 0;
112 }
113}
114
115/*
116 * NAME: decode_header()
117 * DESCRIPTION: read header data and following CRC word
118 */
119static
120int decode_header(struct mad_header *header, struct mad_stream *stream)
121{
122 unsigned int index;
123
124 header->flags = 0;
125 header->private_bits = 0;
126
127 /* header() */
128
129 /* syncword */
130 mad_bit_skip(&stream->ptr, 11);
131
132 /* MPEG 2.5 indicator (really part of syncword) */
133 if (mad_bit_read(&stream->ptr, 1) == 0)
134 header->flags |= MAD_FLAG_MPEG_2_5_EXT;
135
136 /* ID */
137 if (mad_bit_read(&stream->ptr, 1) == 0)
138 header->flags |= MAD_FLAG_LSF_EXT;
139 else if (header->flags & MAD_FLAG_MPEG_2_5_EXT) {
140 stream->error = MAD_ERROR_LOSTSYNC;
141 return -1;
142 }
143
144 /* layer */
145 header->layer = 4 - mad_bit_read(&stream->ptr, 2);
146
147 if (header->layer == 4) {
148 stream->error = MAD_ERROR_BADLAYER;
149 return -1;
150 }
151
152 /* protection_bit */
153 if (mad_bit_read(&stream->ptr, 1) == 0) {
154 header->flags |= MAD_FLAG_PROTECTION;
155 header->crc_check = mad_bit_crc(stream->ptr, 16, 0xffff);
156 }
157
158 /* bitrate_index */
159 index = mad_bit_read(&stream->ptr, 4);
160
161 if (index == 15) {
162 stream->error = MAD_ERROR_BADBITRATE;
163 return -1;
164 }
165
166 if (header->flags & MAD_FLAG_LSF_EXT)
167 header->bitrate = bitrate_table[3 + (header->layer >> 1)][index];
168 else
169 header->bitrate = bitrate_table[header->layer - 1][index];
170
171 /* sampling_frequency */
172 index = mad_bit_read(&stream->ptr, 2);
173
174 if (index == 3) {
175 stream->error = MAD_ERROR_BADSAMPLERATE;
176 return -1;
177 }
178
179 header->samplerate = samplerate_table[index];
180
181 if (header->flags & MAD_FLAG_LSF_EXT) {
182 header->samplerate /= 2;
183
184 if (header->flags & MAD_FLAG_MPEG_2_5_EXT)
185 header->samplerate /= 2;
186 }
187
188 /* padding_bit */
189 if (mad_bit_read(&stream->ptr, 1))
190 header->flags |= MAD_FLAG_PADDING;
191
192 /* private_bit */
193 if (mad_bit_read(&stream->ptr, 1))
194 header->private_bits |= MAD_PRIVATE_HEADER;
195
196 /* mode */
197 header->mode = 3 - mad_bit_read(&stream->ptr, 2);
198
199 /* mode_extension */
200 header->mode_extension = mad_bit_read(&stream->ptr, 2);
201
202 /* copyright */
203 if (mad_bit_read(&stream->ptr, 1))
204 header->flags |= MAD_FLAG_COPYRIGHT;
205
206 /* original/copy */
207 if (mad_bit_read(&stream->ptr, 1))
208 header->flags |= MAD_FLAG_ORIGINAL;
209
210 /* emphasis */
211 header->emphasis = mad_bit_read(&stream->ptr, 2);
212
213 if (header->emphasis == 2) {
214 stream->error = MAD_ERROR_BADEMPHASIS;
215 return -1;
216 }
217
218 /* error_check() */
219
220 /* crc_check */
221 if (header->flags & MAD_FLAG_PROTECTION)
222 header->crc_target = mad_bit_read(&stream->ptr, 16);
223
224 return 0;
225}
226
227/*
228 * NAME: free_bitrate()
229 * DESCRIPTION: attempt to discover the bitstream's free bitrate
230 */
231static
232int free_bitrate(struct mad_stream *stream, struct mad_header const *header)
233{
234 struct mad_bitptr keep_ptr;
235 unsigned long rate = 0;
236 unsigned int pad_slot, slots_per_frame;
237 unsigned char const *ptr = 0;
238
239 keep_ptr = stream->ptr;
240
241 pad_slot = (header->flags & MAD_FLAG_PADDING) ? 1 : 0;
242 slots_per_frame = (header->layer == MAD_LAYER_III &&
243 (header->flags & MAD_FLAG_LSF_EXT)) ? 72 : 144;
244
245 while (mad_stream_sync(stream) == 0) {
246 struct mad_stream peek_stream;
247 struct mad_header peek_header;
248
249 peek_stream = *stream;
250 peek_header = *header;
251
252 if (decode_header(&peek_header, &peek_stream) == 0 &&
253 peek_header.layer == header->layer &&
254 peek_header.samplerate == header->samplerate) {
255 unsigned int N;
256
257 ptr = mad_bit_nextbyte(&stream->ptr);
258
259 N = ptr - stream->this_frame;
260
261 if (header->layer == MAD_LAYER_I) {
262 rate = (unsigned long) header->samplerate *
263 (N - 4 * pad_slot + 4) / 48 / 1000;
264 }
265 else {
266 rate = (unsigned long) header->samplerate *
267 (N - pad_slot + 1) / slots_per_frame / 1000;
268 }
269
270 if (rate >= 8)
271 break;
272 }
273
274 mad_bit_skip(&stream->ptr, 8);
275 }
276
277 stream->ptr = keep_ptr;
278
279 if (rate < 8 || (header->layer == MAD_LAYER_III && rate > 640)) {
280 stream->error = MAD_ERROR_LOSTSYNC;
281 return -1;
282 }
283
284 stream->freerate = rate * 1000;
285
286# if 0 && defined(DEBUG)
287 fprintf(stderr, "free bitrate == %lu\n", stream->freerate);
288# endif
289
290 return 0;
291}
292
293/*
294 * NAME: header->decode()
295 * DESCRIPTION: read the next frame header from the stream
296 */
297int mad_header_decode(struct mad_header *header, struct mad_stream *stream)
298{
299 register unsigned char const *ptr, *end;
300 unsigned int pad_slot, N;
301
302 ptr = stream->next_frame;
303 end = stream->bufend;
304
305 if (ptr == 0) {
306 stream->error = MAD_ERROR_BUFPTR;
307 goto fail;
308 }
309
310 /* stream skip */
311 if (stream->skiplen) {
312 if (!stream->sync)
313 ptr = stream->this_frame;
314
315 if (end - ptr < stream->skiplen) {
316 stream->skiplen -= end - ptr;
317 stream->next_frame = end;
318
319 stream->error = MAD_ERROR_BUFLEN;
320 goto fail;
321 }
322
323 ptr += stream->skiplen;
324 stream->skiplen = 0;
325
326 stream->sync = 1;
327 }
328
329 sync:
330 /* synchronize */
331 if (stream->sync) {
332 if (end - ptr < MAD_BUFFER_GUARD) {
333 stream->next_frame = ptr;
334
335 stream->error = MAD_ERROR_BUFLEN;
336 goto fail;
337 }
338 else if (!(ptr[0] == 0xff && (ptr[1] & 0xe0) == 0xe0)) {
339 /* mark point where frame sync word was expected */
340 stream->this_frame = ptr;
341 stream->next_frame = ptr + 1;
342
343 stream->error = MAD_ERROR_LOSTSYNC;
344 goto fail;
345 }
346 }
347 else {
348 mad_bit_init(&stream->ptr, ptr);
349
350 if (mad_stream_sync(stream) == -1) {
351 if (end - stream->next_frame >= MAD_BUFFER_GUARD)
352 stream->next_frame = end - MAD_BUFFER_GUARD;
353
354 stream->error = MAD_ERROR_BUFLEN;
355 goto fail;
356 }
357
358 ptr = mad_bit_nextbyte(&stream->ptr);
359 }
360
361 /* begin processing */
362 stream->this_frame = ptr;
363 stream->next_frame = ptr + 1; /* possibly bogus sync word */
364
365 mad_bit_init(&stream->ptr, stream->this_frame);
366
367 if (decode_header(header, stream) == -1)
368 goto fail;
369
370 /* calculate frame duration */
371 mad_timer_set(&header->duration, 0,
372 32 * MAD_NSBSAMPLES(header), header->samplerate);
373
374 /* calculate free bit rate */
375 if (header->bitrate == 0) {
376 if ((stream->freerate == 0 || !stream->sync) &&
377 free_bitrate(stream, header) == -1)
378 goto fail;
379
380 header->bitrate = stream->freerate;
381 header->flags |= MAD_FLAG_FREEFORMAT;
382 }
383
384 /* calculate beginning of next frame */
385 pad_slot = (header->flags & MAD_FLAG_PADDING) ? 1 : 0;
386
387 if (header->layer == MAD_LAYER_I)
388 N = ((12 * header->bitrate / header->samplerate) + pad_slot) * 4;
389 else {
390 unsigned int slots_per_frame;
391
392 slots_per_frame = (header->layer == MAD_LAYER_III &&
393 (header->flags & MAD_FLAG_LSF_EXT)) ? 72 : 144;
394
395 N = (slots_per_frame * header->bitrate / header->samplerate) + pad_slot;
396 }
397
398 /* verify there is enough data left in buffer to decode this frame */
399 if (N + MAD_BUFFER_GUARD > end - stream->this_frame) {
400 stream->next_frame = stream->this_frame;
401
402 stream->error = MAD_ERROR_BUFLEN;
403 goto fail;
404 }
405
406 stream->next_frame = stream->this_frame + N;
407
408 if (!stream->sync) {
409 /* check that a valid frame header follows this frame */
410
411 ptr = stream->next_frame;
412 if (!(ptr[0] == 0xff && (ptr[1] & 0xe0) == 0xe0)) {
413 ptr = stream->next_frame = stream->this_frame + 1;
414 goto sync;
415 }
416
417 stream->sync = 1;
418 }
419
420 header->flags |= MAD_FLAG_INCOMPLETE;
421
422 return 0;
423
424 fail:
425 stream->sync = 0;
426
427 return -1;
428}
429
430/*
431 * NAME: frame->decode()
432 * DESCRIPTION: decode a single frame from a bitstream
433 */
434int mad_frame_decode(struct mad_frame *frame, struct mad_stream *stream)
435{
436 frame->options = stream->options;
437
438 /* header() */
439 /* error_check() */
440
441 if (!(frame->header.flags & MAD_FLAG_INCOMPLETE) &&
442 mad_header_decode(&frame->header, stream) == -1)
443 goto fail;
444
445 /* audio_data() */
446
447 frame->header.flags &= ~MAD_FLAG_INCOMPLETE;
448
449 if (decoder_table[frame->header.layer - 1](stream, frame) == -1) {
450 if (!MAD_RECOVERABLE(stream->error))
451 stream->next_frame = stream->this_frame;
452
453 goto fail;
454 }
455
456 /* ancillary_data() */
457
458 if (frame->header.layer != MAD_LAYER_III) {
459 struct mad_bitptr next_frame;
460
461 mad_bit_init(&next_frame, stream->next_frame);
462
463 stream->anc_ptr = stream->ptr;
464 stream->anc_bitlen = mad_bit_length(&stream->ptr, &next_frame);
465
466 mad_bit_finish(&next_frame);
467 }
468
469 return 0;
470
471 fail:
472 stream->anc_bitlen = 0;
473 return -1;
474}
475
476/*
477 * NAME: frame->mute()
478 * DESCRIPTION: zero all subband values so the frame becomes silent
479 */
480void mad_frame_mute(struct mad_frame *frame)
481{
482 unsigned int s, sb;
483
484 for (s = 0; s < 36; ++s) {
485 for (sb = 0; sb < 32; ++sb) {
486 frame->sbsample[0][s][sb] =
487 frame->sbsample[1][s][sb] = 0;
488 }
489 }
490
491 if (frame->overlap) {
492 for (s = 0; s < 18; ++s) {
493 for (sb = 0; sb < 32; ++sb) {
494 (*frame->overlap)[0][sb][s] =
495 (*frame->overlap)[1][sb][s] = 0;
496 }
497 }
498 }
499}
diff --git a/uisimulator/common/libmad/frame.h b/uisimulator/common/libmad/frame.h
new file mode 100644
index 0000000000..3b8e454126
--- /dev/null
+++ b/uisimulator/common/libmad/frame.h
@@ -0,0 +1,117 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22# ifndef LIBMAD_FRAME_H
23# define LIBMAD_FRAME_H
24
25# include "fixed.h"
26# include "timer.h"
27# include "stream.h"
28
29enum mad_layer {
30 MAD_LAYER_I = 1, /* Layer I */
31 MAD_LAYER_II = 2, /* Layer II */
32 MAD_LAYER_III = 3 /* Layer III */
33};
34
35enum mad_mode {
36 MAD_MODE_SINGLE_CHANNEL = 0, /* single channel */
37 MAD_MODE_DUAL_CHANNEL = 1, /* dual channel */
38 MAD_MODE_JOINT_STEREO = 2, /* joint (MS/intensity) stereo */
39 MAD_MODE_STEREO = 3 /* normal LR stereo */
40};
41
42enum mad_emphasis {
43 MAD_EMPHASIS_NONE = 0, /* no emphasis */
44 MAD_EMPHASIS_50_15_US = 1, /* 50/15 microseconds emphasis */
45 MAD_EMPHASIS_CCITT_J_17 = 3 /* CCITT J.17 emphasis */
46};
47
48struct mad_header {
49 enum mad_layer layer; /* audio layer (1, 2, or 3) */
50 enum mad_mode mode; /* channel mode (see above) */
51 int mode_extension; /* additional mode info */
52 enum mad_emphasis emphasis; /* de-emphasis to use (see above) */
53
54 unsigned long bitrate; /* stream bitrate (bps) */
55 unsigned int samplerate; /* sampling frequency (Hz) */
56
57 unsigned short crc_check; /* frame CRC accumulator */
58 unsigned short crc_target; /* final target CRC checksum */
59
60 int flags; /* flags (see below) */
61 int private_bits; /* private bits (see below) */
62
63 mad_timer_t duration; /* audio playing time of frame */
64};
65
66struct mad_frame {
67 struct mad_header header; /* MPEG audio header */
68
69 int options; /* decoding options (from stream) */
70
71 mad_fixed_t sbsample[2][36][32]; /* synthesis subband filter samples */
72 mad_fixed_t (*overlap)[2][32][18]; /* Layer III block overlap data */
73};
74
75# define MAD_NCHANNELS(header) ((header)->mode ? 2 : 1)
76# define MAD_NSBSAMPLES(header) \
77 ((header)->layer == MAD_LAYER_I ? 12 : \
78 (((header)->layer == MAD_LAYER_III && \
79 ((header)->flags & MAD_FLAG_LSF_EXT)) ? 18 : 36))
80
81enum {
82 MAD_FLAG_NPRIVATE_III = 0x0007, /* number of Layer III private bits */
83 MAD_FLAG_INCOMPLETE = 0x0008, /* header but not data is decoded */
84
85 MAD_FLAG_PROTECTION = 0x0010, /* frame has CRC protection */
86 MAD_FLAG_COPYRIGHT = 0x0020, /* frame is copyright */
87 MAD_FLAG_ORIGINAL = 0x0040, /* frame is original (else copy) */
88 MAD_FLAG_PADDING = 0x0080, /* frame has additional slot */
89
90 MAD_FLAG_I_STEREO = 0x0100, /* uses intensity joint stereo */
91 MAD_FLAG_MS_STEREO = 0x0200, /* uses middle/side joint stereo */
92 MAD_FLAG_FREEFORMAT = 0x0400, /* uses free format bitrate */
93
94 MAD_FLAG_LSF_EXT = 0x1000, /* lower sampling freq. extension */
95 MAD_FLAG_MC_EXT = 0x2000, /* multichannel audio extension */
96 MAD_FLAG_MPEG_2_5_EXT = 0x4000 /* MPEG 2.5 (unofficial) extension */
97};
98
99enum {
100 MAD_PRIVATE_HEADER = 0x0100, /* header private bit */
101 MAD_PRIVATE_III = 0x001f /* Layer III private bits (up to 5) */
102};
103
104void mad_header_init(struct mad_header *);
105
106# define mad_header_finish(header) /* nothing */
107
108int mad_header_decode(struct mad_header *, struct mad_stream *);
109
110void mad_frame_init(struct mad_frame *);
111void mad_frame_finish(struct mad_frame *);
112
113int mad_frame_decode(struct mad_frame *, struct mad_stream *);
114
115void mad_frame_mute(struct mad_frame *);
116
117# endif
diff --git a/uisimulator/common/libmad/global.h b/uisimulator/common/libmad/global.h
new file mode 100644
index 0000000000..2c9c71301d
--- /dev/null
+++ b/uisimulator/common/libmad/global.h
@@ -0,0 +1,58 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22# ifndef LIBMAD_GLOBAL_H
23# define LIBMAD_GLOBAL_H
24
25/* conditional debugging */
26
27# if defined(DEBUG) && defined(NDEBUG)
28# error "cannot define both DEBUG and NDEBUG"
29# endif
30
31# if defined(DEBUG)
32# include <stdio.h>
33# endif
34
35/* conditional features */
36
37# if defined(OPT_SPEED) && defined(OPT_ACCURACY)
38# error "cannot optimize for both speed and accuracy"
39# endif
40
41# if defined(OPT_SPEED) && !defined(OPT_SSO)
42# define OPT_SSO 1
43# endif
44
45# if defined(HAVE_UNISTD_H) && defined(HAVE_WAITPID) && \
46 defined(HAVE_FCNTL) && defined(HAVE_PIPE) && defined(HAVE_FORK)
47# define USE_ASYNC
48# endif
49
50# if !defined(HAVE_ASSERT_H)
51# if defined(NDEBUG)
52# define assert(x) /* nothing */
53# else
54# define assert(x) do { if (!(x)) abort(); } while (0)
55# endif
56# endif
57
58# endif
diff --git a/uisimulator/common/libmad/huffman.c b/uisimulator/common/libmad/huffman.c
new file mode 100644
index 0000000000..72e4b82677
--- /dev/null
+++ b/uisimulator/common/libmad/huffman.c
@@ -0,0 +1,3098 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22# ifdef HAVE_CONFIG_H
23# include "madconfig.h"
24# endif
25
26# include "global.h"
27
28# include "huffman.h"
29
30/*
31 * These are the Huffman code words for Layer III.
32 * The data for these tables are derived from Table B.7 of ISO/IEC 11172-3.
33 *
34 * These tables support decoding up to 4 Huffman code bits at a time.
35 */
36
37# if defined(__GNUC__)
38# define PTR(offs, bits) { ptr: { 0, bits, offs } }
39# define V(v, w, x, y, hlen) { value: { 1, hlen, v, w, x, y } }
40# else
41# define PTR(offs, bits) { { 0, bits, offs } }
42# define V(v, w, x, y, hlen) { { 1, hlen, (v << 0) | (w << 1) | \
43 (x << 2) | (y << 3) } }
44# endif
45
46static
47union huffquad const hufftabA[] = {
48 /* 0000 */ PTR(16, 2),
49 /* 0001 */ PTR(20, 2),
50 /* 0010 */ PTR(24, 1),
51 /* 0011 */ PTR(26, 1),
52 /* 0100 */ V(0, 0, 1, 0, 4),
53 /* 0101 */ V(0, 0, 0, 1, 4),
54 /* 0110 */ V(0, 1, 0, 0, 4),
55 /* 0111 */ V(1, 0, 0, 0, 4),
56 /* 1000 */ V(0, 0, 0, 0, 1),
57 /* 1001 */ V(0, 0, 0, 0, 1),
58 /* 1010 */ V(0, 0, 0, 0, 1),
59 /* 1011 */ V(0, 0, 0, 0, 1),
60 /* 1100 */ V(0, 0, 0, 0, 1),
61 /* 1101 */ V(0, 0, 0, 0, 1),
62 /* 1110 */ V(0, 0, 0, 0, 1),
63 /* 1111 */ V(0, 0, 0, 0, 1),
64
65 /* 0000 ... */
66 /* 00 */ V(1, 0, 1, 1, 2), /* 16 */
67 /* 01 */ V(1, 1, 1, 1, 2),
68 /* 10 */ V(1, 1, 0, 1, 2),
69 /* 11 */ V(1, 1, 1, 0, 2),
70
71 /* 0001 ... */
72 /* 00 */ V(0, 1, 1, 1, 2), /* 20 */
73 /* 01 */ V(0, 1, 0, 1, 2),
74 /* 10 */ V(1, 0, 0, 1, 1),
75 /* 11 */ V(1, 0, 0, 1, 1),
76
77 /* 0010 ... */
78 /* 0 */ V(0, 1, 1, 0, 1), /* 24 */
79 /* 1 */ V(0, 0, 1, 1, 1),
80
81 /* 0011 ... */
82 /* 0 */ V(1, 0, 1, 0, 1), /* 26 */
83 /* 1 */ V(1, 1, 0, 0, 1)
84};
85
86static
87union huffquad const hufftabB[] = {
88 /* 0000 */ V(1, 1, 1, 1, 4),
89 /* 0001 */ V(1, 1, 1, 0, 4),
90 /* 0010 */ V(1, 1, 0, 1, 4),
91 /* 0011 */ V(1, 1, 0, 0, 4),
92 /* 0100 */ V(1, 0, 1, 1, 4),
93 /* 0101 */ V(1, 0, 1, 0, 4),
94 /* 0110 */ V(1, 0, 0, 1, 4),
95 /* 0111 */ V(1, 0, 0, 0, 4),
96 /* 1000 */ V(0, 1, 1, 1, 4),
97 /* 1001 */ V(0, 1, 1, 0, 4),
98 /* 1010 */ V(0, 1, 0, 1, 4),
99 /* 1011 */ V(0, 1, 0, 0, 4),
100 /* 1100 */ V(0, 0, 1, 1, 4),
101 /* 1101 */ V(0, 0, 1, 0, 4),
102 /* 1110 */ V(0, 0, 0, 1, 4),
103 /* 1111 */ V(0, 0, 0, 0, 4)
104};
105
106# undef V
107# undef PTR
108
109# if defined(__GNUC__)
110# define PTR(offs, bits) { ptr: { 0, bits, offs } }
111# define V(x, y, hlen) { value: { 1, hlen, x, y } }
112# else
113# define PTR(offs, bits) { { 0, bits, offs } }
114# define V(x, y, hlen) { { 1, hlen, (x << 0) | (y << 4) } }
115# endif
116
117static
118union huffpair const hufftab0[] = {
119 /* */ V(0, 0, 0)
120};
121
122static
123union huffpair const hufftab1[] = {
124 /* 000 */ V(1, 1, 3),
125 /* 001 */ V(0, 1, 3),
126 /* 010 */ V(1, 0, 2),
127 /* 011 */ V(1, 0, 2),
128 /* 100 */ V(0, 0, 1),
129 /* 101 */ V(0, 0, 1),
130 /* 110 */ V(0, 0, 1),
131 /* 111 */ V(0, 0, 1)
132};
133
134static
135union huffpair const hufftab2[] = {
136 /* 000 */ PTR(8, 3),
137 /* 001 */ V(1, 1, 3),
138 /* 010 */ V(0, 1, 3),
139 /* 011 */ V(1, 0, 3),
140 /* 100 */ V(0, 0, 1),
141 /* 101 */ V(0, 0, 1),
142 /* 110 */ V(0, 0, 1),
143 /* 111 */ V(0, 0, 1),
144
145 /* 000 ... */
146 /* 000 */ V(2, 2, 3), /* 8 */
147 /* 001 */ V(0, 2, 3),
148 /* 010 */ V(1, 2, 2),
149 /* 011 */ V(1, 2, 2),
150 /* 100 */ V(2, 1, 2),
151 /* 101 */ V(2, 1, 2),
152 /* 110 */ V(2, 0, 2),
153 /* 111 */ V(2, 0, 2)
154};
155
156static
157union huffpair const hufftab3[] = {
158 /* 000 */ PTR(8, 3),
159 /* 001 */ V(1, 0, 3),
160 /* 010 */ V(1, 1, 2),
161 /* 011 */ V(1, 1, 2),
162 /* 100 */ V(0, 1, 2),
163 /* 101 */ V(0, 1, 2),
164 /* 110 */ V(0, 0, 2),
165 /* 111 */ V(0, 0, 2),
166
167 /* 000 ... */
168 /* 000 */ V(2, 2, 3), /* 8 */
169 /* 001 */ V(0, 2, 3),
170 /* 010 */ V(1, 2, 2),
171 /* 011 */ V(1, 2, 2),
172 /* 100 */ V(2, 1, 2),
173 /* 101 */ V(2, 1, 2),
174 /* 110 */ V(2, 0, 2),
175 /* 111 */ V(2, 0, 2)
176};
177
178static
179union huffpair const hufftab5[] = {
180 /* 000 */ PTR(8, 4),
181 /* 001 */ V(1, 1, 3),
182 /* 010 */ V(0, 1, 3),
183 /* 011 */ V(1, 0, 3),
184 /* 100 */ V(0, 0, 1),
185 /* 101 */ V(0, 0, 1),
186 /* 110 */ V(0, 0, 1),
187 /* 111 */ V(0, 0, 1),
188
189 /* 000 ... */
190 /* 0000 */ PTR(24, 1), /* 8 */
191 /* 0001 */ V(3, 2, 4),
192 /* 0010 */ V(3, 1, 3),
193 /* 0011 */ V(3, 1, 3),
194 /* 0100 */ V(1, 3, 4),
195 /* 0101 */ V(0, 3, 4),
196 /* 0110 */ V(3, 0, 4),
197 /* 0111 */ V(2, 2, 4),
198 /* 1000 */ V(1, 2, 3),
199 /* 1001 */ V(1, 2, 3),
200 /* 1010 */ V(2, 1, 3),
201 /* 1011 */ V(2, 1, 3),
202 /* 1100 */ V(0, 2, 3),
203 /* 1101 */ V(0, 2, 3),
204 /* 1110 */ V(2, 0, 3),
205 /* 1111 */ V(2, 0, 3),
206
207 /* 000 0000 ... */
208 /* 0 */ V(3, 3, 1), /* 24 */
209 /* 1 */ V(2, 3, 1)
210};
211
212static
213union huffpair const hufftab6[] = {
214 /* 0000 */ PTR(16, 3),
215 /* 0001 */ PTR(24, 1),
216 /* 0010 */ PTR(26, 1),
217 /* 0011 */ V(1, 2, 4),
218 /* 0100 */ V(2, 1, 4),
219 /* 0101 */ V(2, 0, 4),
220 /* 0110 */ V(0, 1, 3),
221 /* 0111 */ V(0, 1, 3),
222 /* 1000 */ V(1, 1, 2),
223 /* 1001 */ V(1, 1, 2),
224 /* 1010 */ V(1, 1, 2),
225 /* 1011 */ V(1, 1, 2),
226 /* 1100 */ V(1, 0, 3),
227 /* 1101 */ V(1, 0, 3),
228 /* 1110 */ V(0, 0, 3),
229 /* 1111 */ V(0, 0, 3),
230
231 /* 0000 ... */
232 /* 000 */ V(3, 3, 3), /* 16 */
233 /* 001 */ V(0, 3, 3),
234 /* 010 */ V(2, 3, 2),
235 /* 011 */ V(2, 3, 2),
236 /* 100 */ V(3, 2, 2),
237 /* 101 */ V(3, 2, 2),
238 /* 110 */ V(3, 0, 2),
239 /* 111 */ V(3, 0, 2),
240
241 /* 0001 ... */
242 /* 0 */ V(1, 3, 1), /* 24 */
243 /* 1 */ V(3, 1, 1),
244
245 /* 0010 ... */
246 /* 0 */ V(2, 2, 1), /* 26 */
247 /* 1 */ V(0, 2, 1)
248};
249
250static
251union huffpair const hufftab7[] = {
252 /* 0000 */ PTR(16, 4),
253 /* 0001 */ PTR(32, 4),
254 /* 0010 */ PTR(48, 2),
255 /* 0011 */ V(1, 1, 4),
256 /* 0100 */ V(0, 1, 3),
257 /* 0101 */ V(0, 1, 3),
258 /* 0110 */ V(1, 0, 3),
259 /* 0111 */ V(1, 0, 3),
260 /* 1000 */ V(0, 0, 1),
261 /* 1001 */ V(0, 0, 1),
262 /* 1010 */ V(0, 0, 1),
263 /* 1011 */ V(0, 0, 1),
264 /* 1100 */ V(0, 0, 1),
265 /* 1101 */ V(0, 0, 1),
266 /* 1110 */ V(0, 0, 1),
267 /* 1111 */ V(0, 0, 1),
268
269 /* 0000 ... */
270 /* 0000 */ PTR(52, 2), /* 16 */
271 /* 0001 */ PTR(56, 1),
272 /* 0010 */ PTR(58, 1),
273 /* 0011 */ V(1, 5, 4),
274 /* 0100 */ V(5, 1, 4),
275 /* 0101 */ PTR(60, 1),
276 /* 0110 */ V(5, 0, 4),
277 /* 0111 */ PTR(62, 1),
278 /* 1000 */ V(2, 4, 4),
279 /* 1001 */ V(4, 2, 4),
280 /* 1010 */ V(1, 4, 3),
281 /* 1011 */ V(1, 4, 3),
282 /* 1100 */ V(4, 1, 3),
283 /* 1101 */ V(4, 1, 3),
284 /* 1110 */ V(4, 0, 3),
285 /* 1111 */ V(4, 0, 3),
286
287 /* 0001 ... */
288 /* 0000 */ V(0, 4, 4), /* 32 */
289 /* 0001 */ V(2, 3, 4),
290 /* 0010 */ V(3, 2, 4),
291 /* 0011 */ V(0, 3, 4),
292 /* 0100 */ V(1, 3, 3),
293 /* 0101 */ V(1, 3, 3),
294 /* 0110 */ V(3, 1, 3),
295 /* 0111 */ V(3, 1, 3),
296 /* 1000 */ V(3, 0, 3),
297 /* 1001 */ V(3, 0, 3),
298 /* 1010 */ V(2, 2, 3),
299 /* 1011 */ V(2, 2, 3),
300 /* 1100 */ V(1, 2, 2),
301 /* 1101 */ V(1, 2, 2),
302 /* 1110 */ V(1, 2, 2),
303 /* 1111 */ V(1, 2, 2),
304
305 /* 0010 ... */
306 /* 00 */ V(2, 1, 1), /* 48 */
307 /* 01 */ V(2, 1, 1),
308 /* 10 */ V(0, 2, 2),
309 /* 11 */ V(2, 0, 2),
310
311 /* 0000 0000 ... */
312 /* 00 */ V(5, 5, 2), /* 52 */
313 /* 01 */ V(4, 5, 2),
314 /* 10 */ V(5, 4, 2),
315 /* 11 */ V(5, 3, 2),
316
317 /* 0000 0001 ... */
318 /* 0 */ V(3, 5, 1), /* 56 */
319 /* 1 */ V(4, 4, 1),
320
321 /* 0000 0010 ... */
322 /* 0 */ V(2, 5, 1), /* 58 */
323 /* 1 */ V(5, 2, 1),
324
325 /* 0000 0101 ... */
326 /* 0 */ V(0, 5, 1), /* 60 */
327 /* 1 */ V(3, 4, 1),
328
329 /* 0000 0111 ... */
330 /* 0 */ V(4, 3, 1), /* 62 */
331 /* 1 */ V(3, 3, 1)
332};
333
334# if 0
335/* this version saves 8 entries (16 bytes) at the expense of
336 an extra lookup in 4 out of 36 cases */
337static
338union huffpair const hufftab8[] = {
339 /* 0000 */ PTR(16, 4),
340 /* 0001 */ PTR(32, 2),
341 /* 0010 */ V(1, 2, 4),
342 /* 0011 */ V(2, 1, 4),
343 /* 0100 */ V(1, 1, 2),
344 /* 0101 */ V(1, 1, 2),
345 /* 0110 */ V(1, 1, 2),
346 /* 0111 */ V(1, 1, 2),
347 /* 1000 */ V(0, 1, 3),
348 /* 1001 */ V(0, 1, 3),
349 /* 1010 */ V(1, 0, 3),
350 /* 1011 */ V(1, 0, 3),
351 /* 1100 */ V(0, 0, 2),
352 /* 1101 */ V(0, 0, 2),
353 /* 1110 */ V(0, 0, 2),
354 /* 1111 */ V(0, 0, 2),
355
356 /* 0000 ... */
357 /* 0000 */ PTR(36, 3), /* 16 */
358 /* 0001 */ PTR(44, 2),
359 /* 0010 */ PTR(48, 1),
360 /* 0011 */ V(1, 5, 4),
361 /* 0100 */ V(5, 1, 4),
362 /* 0101 */ PTR(50, 1),
363 /* 0110 */ PTR(52, 1),
364 /* 0111 */ V(2, 4, 4),
365 /* 1000 */ V(4, 2, 4),
366 /* 1001 */ V(1, 4, 4),
367 /* 1010 */ V(4, 1, 3),
368 /* 1011 */ V(4, 1, 3),
369 /* 1100 */ V(0, 4, 4),
370 /* 1101 */ V(4, 0, 4),
371 /* 1110 */ V(2, 3, 4),
372 /* 1111 */ V(3, 2, 4),
373
374 /* 0001 ... */
375 /* 00 */ PTR(54, 2), /* 32 */
376 /* 01 */ V(2, 2, 2),
377 /* 10 */ V(0, 2, 2),
378 /* 11 */ V(2, 0, 2),
379
380 /* 0000 0000 ... */
381 /* 000 */ V(5, 5, 3), /* 36 */
382 /* 001 */ V(5, 4, 3),
383 /* 010 */ V(4, 5, 2),
384 /* 011 */ V(4, 5, 2),
385 /* 100 */ V(5, 3, 1),
386 /* 101 */ V(5, 3, 1),
387 /* 110 */ V(5, 3, 1),
388 /* 111 */ V(5, 3, 1),
389
390 /* 0000 0001 ... */
391 /* 00 */ V(3, 5, 2), /* 44 */
392 /* 01 */ V(4, 4, 2),
393 /* 10 */ V(2, 5, 1),
394 /* 11 */ V(2, 5, 1),
395
396 /* 0000 0010 ... */
397 /* 0 */ V(5, 2, 1), /* 48 */
398 /* 1 */ V(0, 5, 1),
399
400 /* 0000 0101 ... */
401 /* 0 */ V(3, 4, 1), /* 50 */
402 /* 1 */ V(4, 3, 1),
403
404 /* 0000 0110 ... */
405 /* 0 */ V(5, 0, 1), /* 52 */
406 /* 1 */ V(3, 3, 1),
407
408 /* 0001 00 ... */
409 /* 00 */ V(1, 3, 2), /* 54 */
410 /* 01 */ V(3, 1, 2),
411 /* 10 */ V(0, 3, 2),
412 /* 11 */ V(3, 0, 2),
413};
414# else
415static
416union huffpair const hufftab8[] = {
417 /* 0000 */ PTR(16, 4),
418 /* 0001 */ PTR(32, 4),
419 /* 0010 */ V(1, 2, 4),
420 /* 0011 */ V(2, 1, 4),
421 /* 0100 */ V(1, 1, 2),
422 /* 0101 */ V(1, 1, 2),
423 /* 0110 */ V(1, 1, 2),
424 /* 0111 */ V(1, 1, 2),
425 /* 1000 */ V(0, 1, 3),
426 /* 1001 */ V(0, 1, 3),
427 /* 1010 */ V(1, 0, 3),
428 /* 1011 */ V(1, 0, 3),
429 /* 1100 */ V(0, 0, 2),
430 /* 1101 */ V(0, 0, 2),
431 /* 1110 */ V(0, 0, 2),
432 /* 1111 */ V(0, 0, 2),
433
434 /* 0000 ... */
435 /* 0000 */ PTR(48, 3), /* 16 */
436 /* 0001 */ PTR(56, 2),
437 /* 0010 */ PTR(60, 1),
438 /* 0011 */ V(1, 5, 4),
439 /* 0100 */ V(5, 1, 4),
440 /* 0101 */ PTR(62, 1),
441 /* 0110 */ PTR(64, 1),
442 /* 0111 */ V(2, 4, 4),
443 /* 1000 */ V(4, 2, 4),
444 /* 1001 */ V(1, 4, 4),
445 /* 1010 */ V(4, 1, 3),
446 /* 1011 */ V(4, 1, 3),
447 /* 1100 */ V(0, 4, 4),
448 /* 1101 */ V(4, 0, 4),
449 /* 1110 */ V(2, 3, 4),
450 /* 1111 */ V(3, 2, 4),
451
452 /* 0001 ... */
453 /* 0000 */ V(1, 3, 4), /* 32 */
454 /* 0001 */ V(3, 1, 4),
455 /* 0010 */ V(0, 3, 4),
456 /* 0011 */ V(3, 0, 4),
457 /* 0100 */ V(2, 2, 2),
458 /* 0101 */ V(2, 2, 2),
459 /* 0110 */ V(2, 2, 2),
460 /* 0111 */ V(2, 2, 2),
461 /* 1000 */ V(0, 2, 2),
462 /* 1001 */ V(0, 2, 2),
463 /* 1010 */ V(0, 2, 2),
464 /* 1011 */ V(0, 2, 2),
465 /* 1100 */ V(2, 0, 2),
466 /* 1101 */ V(2, 0, 2),
467 /* 1110 */ V(2, 0, 2),
468 /* 1111 */ V(2, 0, 2),
469
470 /* 0000 0000 ... */
471 /* 000 */ V(5, 5, 3), /* 48 */
472 /* 001 */ V(5, 4, 3),
473 /* 010 */ V(4, 5, 2),
474 /* 011 */ V(4, 5, 2),
475 /* 100 */ V(5, 3, 1),
476 /* 101 */ V(5, 3, 1),
477 /* 110 */ V(5, 3, 1),
478 /* 111 */ V(5, 3, 1),
479
480 /* 0000 0001 ... */
481 /* 00 */ V(3, 5, 2), /* 56 */
482 /* 01 */ V(4, 4, 2),
483 /* 10 */ V(2, 5, 1),
484 /* 11 */ V(2, 5, 1),
485
486 /* 0000 0010 ... */
487 /* 0 */ V(5, 2, 1), /* 60 */
488 /* 1 */ V(0, 5, 1),
489
490 /* 0000 0101 ... */
491 /* 0 */ V(3, 4, 1), /* 62 */
492 /* 1 */ V(4, 3, 1),
493
494 /* 0000 0110 ... */
495 /* 0 */ V(5, 0, 1), /* 64 */
496 /* 1 */ V(3, 3, 1)
497};
498# endif
499
500static
501union huffpair const hufftab9[] = {
502 /* 0000 */ PTR(16, 4),
503 /* 0001 */ PTR(32, 3),
504 /* 0010 */ PTR(40, 2),
505 /* 0011 */ PTR(44, 2),
506 /* 0100 */ PTR(48, 1),
507 /* 0101 */ V(1, 2, 4),
508 /* 0110 */ V(2, 1, 4),
509 /* 0111 */ V(2, 0, 4),
510 /* 1000 */ V(1, 1, 3),
511 /* 1001 */ V(1, 1, 3),
512 /* 1010 */ V(0, 1, 3),
513 /* 1011 */ V(0, 1, 3),
514 /* 1100 */ V(1, 0, 3),
515 /* 1101 */ V(1, 0, 3),
516 /* 1110 */ V(0, 0, 3),
517 /* 1111 */ V(0, 0, 3),
518
519 /* 0000 ... */
520 /* 0000 */ PTR(50, 1), /* 16 */
521 /* 0001 */ V(3, 5, 4),
522 /* 0010 */ V(5, 3, 4),
523 /* 0011 */ PTR(52, 1),
524 /* 0100 */ V(4, 4, 4),
525 /* 0101 */ V(2, 5, 4),
526 /* 0110 */ V(5, 2, 4),
527 /* 0111 */ V(1, 5, 4),
528 /* 1000 */ V(5, 1, 3),
529 /* 1001 */ V(5, 1, 3),
530 /* 1010 */ V(3, 4, 3),
531 /* 1011 */ V(3, 4, 3),
532 /* 1100 */ V(4, 3, 3),
533 /* 1101 */ V(4, 3, 3),
534 /* 1110 */ V(5, 0, 4),
535 /* 1111 */ V(0, 4, 4),
536
537 /* 0001 ... */
538 /* 000 */ V(2, 4, 3), /* 32 */
539 /* 001 */ V(4, 2, 3),
540 /* 010 */ V(3, 3, 3),
541 /* 011 */ V(4, 0, 3),
542 /* 100 */ V(1, 4, 2),
543 /* 101 */ V(1, 4, 2),
544 /* 110 */ V(4, 1, 2),
545 /* 111 */ V(4, 1, 2),
546
547 /* 0010 ... */
548 /* 00 */ V(2, 3, 2), /* 40 */
549 /* 01 */ V(3, 2, 2),
550 /* 10 */ V(1, 3, 1),
551 /* 11 */ V(1, 3, 1),
552
553 /* 0011 ... */
554 /* 00 */ V(3, 1, 1), /* 44 */
555 /* 01 */ V(3, 1, 1),
556 /* 10 */ V(0, 3, 2),
557 /* 11 */ V(3, 0, 2),
558
559 /* 0100 ... */
560 /* 0 */ V(2, 2, 1), /* 48 */
561 /* 1 */ V(0, 2, 1),
562
563 /* 0000 0000 ... */
564 /* 0 */ V(5, 5, 1), /* 50 */
565 /* 1 */ V(4, 5, 1),
566
567 /* 0000 0011 ... */
568 /* 0 */ V(5, 4, 1), /* 52 */
569 /* 1 */ V(0, 5, 1)
570};
571
572static
573union huffpair const hufftab10[] = {
574 /* 0000 */ PTR(16, 4),
575 /* 0001 */ PTR(32, 4),
576 /* 0010 */ PTR(48, 2),
577 /* 0011 */ V(1, 1, 4),
578 /* 0100 */ V(0, 1, 3),
579 /* 0101 */ V(0, 1, 3),
580 /* 0110 */ V(1, 0, 3),
581 /* 0111 */ V(1, 0, 3),
582 /* 1000 */ V(0, 0, 1),
583 /* 1001 */ V(0, 0, 1),
584 /* 1010 */ V(0, 0, 1),
585 /* 1011 */ V(0, 0, 1),
586 /* 1100 */ V(0, 0, 1),
587 /* 1101 */ V(0, 0, 1),
588 /* 1110 */ V(0, 0, 1),
589 /* 1111 */ V(0, 0, 1),
590
591 /* 0000 ... */
592 /* 0000 */ PTR(52, 3), /* 16 */
593 /* 0001 */ PTR(60, 2),
594 /* 0010 */ PTR(64, 3),
595 /* 0011 */ PTR(72, 1),
596 /* 0100 */ PTR(74, 2),
597 /* 0101 */ PTR(78, 2),
598 /* 0110 */ PTR(82, 2),
599 /* 0111 */ V(1, 7, 4),
600 /* 1000 */ V(7, 1, 4),
601 /* 1001 */ PTR(86, 1),
602 /* 1010 */ PTR(88, 2),
603 /* 1011 */ PTR(92, 2),
604 /* 1100 */ V(1, 6, 4),
605 /* 1101 */ V(6, 1, 4),
606 /* 1110 */ V(6, 0, 4),
607 /* 1111 */ PTR(96, 1),
608
609 /* 0001 ... */
610 /* 0000 */ PTR(98, 1), /* 32 */
611 /* 0001 */ PTR(100, 1),
612 /* 0010 */ V(1, 4, 4),
613 /* 0011 */ V(4, 1, 4),
614 /* 0100 */ V(4, 0, 4),
615 /* 0101 */ V(2, 3, 4),
616 /* 0110 */ V(3, 2, 4),
617 /* 0111 */ V(0, 3, 4),
618 /* 1000 */ V(1, 3, 3),
619 /* 1001 */ V(1, 3, 3),
620 /* 1010 */ V(3, 1, 3),
621 /* 1011 */ V(3, 1, 3),
622 /* 1100 */ V(3, 0, 3),
623 /* 1101 */ V(3, 0, 3),
624 /* 1110 */ V(2, 2, 3),
625 /* 1111 */ V(2, 2, 3),
626
627 /* 0010 ... */
628 /* 00 */ V(1, 2, 2), /* 48 */
629 /* 01 */ V(2, 1, 2),
630 /* 10 */ V(0, 2, 2),
631 /* 11 */ V(2, 0, 2),
632
633 /* 0000 0000 ... */
634 /* 000 */ V(7, 7, 3), /* 52 */
635 /* 001 */ V(6, 7, 3),
636 /* 010 */ V(7, 6, 3),
637 /* 011 */ V(5, 7, 3),
638 /* 100 */ V(7, 5, 3),
639 /* 101 */ V(6, 6, 3),
640 /* 110 */ V(4, 7, 2),
641 /* 111 */ V(4, 7, 2),
642
643 /* 0000 0001 ... */
644 /* 00 */ V(7, 4, 2), /* 60 */
645 /* 01 */ V(5, 6, 2),
646 /* 10 */ V(6, 5, 2),
647 /* 11 */ V(3, 7, 2),
648
649 /* 0000 0010 ... */
650 /* 000 */ V(7, 3, 2), /* 64 */
651 /* 001 */ V(7, 3, 2),
652 /* 010 */ V(4, 6, 2),
653 /* 011 */ V(4, 6, 2),
654 /* 100 */ V(5, 5, 3),
655 /* 101 */ V(5, 4, 3),
656 /* 110 */ V(6, 3, 2),
657 /* 111 */ V(6, 3, 2),
658
659 /* 0000 0011 ... */
660 /* 0 */ V(2, 7, 1), /* 72 */
661 /* 1 */ V(7, 2, 1),
662
663 /* 0000 0100 ... */
664 /* 00 */ V(6, 4, 2), /* 74 */
665 /* 01 */ V(0, 7, 2),
666 /* 10 */ V(7, 0, 1),
667 /* 11 */ V(7, 0, 1),
668
669 /* 0000 0101 ... */
670 /* 00 */ V(6, 2, 1), /* 78 */
671 /* 01 */ V(6, 2, 1),
672 /* 10 */ V(4, 5, 2),
673 /* 11 */ V(3, 5, 2),
674
675 /* 0000 0110 ... */
676 /* 00 */ V(0, 6, 1), /* 82 */
677 /* 01 */ V(0, 6, 1),
678 /* 10 */ V(5, 3, 2),
679 /* 11 */ V(4, 4, 2),
680
681 /* 0000 1001 ... */
682 /* 0 */ V(3, 6, 1), /* 86 */
683 /* 1 */ V(2, 6, 1),
684
685 /* 0000 1010 ... */
686 /* 00 */ V(2, 5, 2), /* 88 */
687 /* 01 */ V(5, 2, 2),
688 /* 10 */ V(1, 5, 1),
689 /* 11 */ V(1, 5, 1),
690
691 /* 0000 1011 ... */
692 /* 00 */ V(5, 1, 1), /* 92 */
693 /* 01 */ V(5, 1, 1),
694 /* 10 */ V(3, 4, 2),
695 /* 11 */ V(4, 3, 2),
696
697 /* 0000 1111 ... */
698 /* 0 */ V(0, 5, 1), /* 96 */
699 /* 1 */ V(5, 0, 1),
700
701 /* 0001 0000 ... */
702 /* 0 */ V(2, 4, 1), /* 98 */
703 /* 1 */ V(4, 2, 1),
704
705 /* 0001 0001 ... */
706 /* 0 */ V(3, 3, 1), /* 100 */
707 /* 1 */ V(0, 4, 1)
708};
709
710static
711union huffpair const hufftab11[] = {
712 /* 0000 */ PTR(16, 4),
713 /* 0001 */ PTR(32, 4),
714 /* 0010 */ PTR(48, 4),
715 /* 0011 */ PTR(64, 3),
716 /* 0100 */ V(1, 2, 4),
717 /* 0101 */ PTR(72, 1),
718 /* 0110 */ V(1, 1, 3),
719 /* 0111 */ V(1, 1, 3),
720 /* 1000 */ V(0, 1, 3),
721 /* 1001 */ V(0, 1, 3),
722 /* 1010 */ V(1, 0, 3),
723 /* 1011 */ V(1, 0, 3),
724 /* 1100 */ V(0, 0, 2),
725 /* 1101 */ V(0, 0, 2),
726 /* 1110 */ V(0, 0, 2),
727 /* 1111 */ V(0, 0, 2),
728
729 /* 0000 ... */
730 /* 0000 */ PTR(74, 2), /* 16 */
731 /* 0001 */ PTR(78, 3),
732 /* 0010 */ PTR(86, 2),
733 /* 0011 */ PTR(90, 1),
734 /* 0100 */ PTR(92, 2),
735 /* 0101 */ V(2, 7, 4),
736 /* 0110 */ V(7, 2, 4),
737 /* 0111 */ PTR(96, 1),
738 /* 1000 */ V(7, 1, 3),
739 /* 1001 */ V(7, 1, 3),
740 /* 1010 */ V(1, 7, 4),
741 /* 1011 */ V(7, 0, 4),
742 /* 1100 */ V(3, 6, 4),
743 /* 1101 */ V(6, 3, 4),
744 /* 1110 */ V(6, 0, 4),
745 /* 1111 */ PTR(98, 1),
746
747 /* 0001 ... */
748 /* 0000 */ PTR(100, 1), /* 32 */
749 /* 0001 */ V(1, 5, 4),
750 /* 0010 */ V(6, 2, 3),
751 /* 0011 */ V(6, 2, 3),
752 /* 0100 */ V(2, 6, 4),
753 /* 0101 */ V(0, 6, 4),
754 /* 0110 */ V(1, 6, 3),
755 /* 0111 */ V(1, 6, 3),
756 /* 1000 */ V(6, 1, 3),
757 /* 1001 */ V(6, 1, 3),
758 /* 1010 */ V(5, 1, 4),
759 /* 1011 */ V(3, 4, 4),
760 /* 1100 */ V(5, 0, 4),
761 /* 1101 */ PTR(102, 1),
762 /* 1110 */ V(2, 4, 4),
763 /* 1111 */ V(4, 2, 4),
764
765 /* 0010 ... */
766 /* 0000 */ V(1, 4, 4), /* 48 */
767 /* 0001 */ V(4, 1, 4),
768 /* 0010 */ V(0, 4, 4),
769 /* 0011 */ V(4, 0, 4),
770 /* 0100 */ V(2, 3, 3),
771 /* 0101 */ V(2, 3, 3),
772 /* 0110 */ V(3, 2, 3),
773 /* 0111 */ V(3, 2, 3),
774 /* 1000 */ V(1, 3, 2),
775 /* 1001 */ V(1, 3, 2),
776 /* 1010 */ V(1, 3, 2),
777 /* 1011 */ V(1, 3, 2),
778 /* 1100 */ V(3, 1, 2),
779 /* 1101 */ V(3, 1, 2),
780 /* 1110 */ V(3, 1, 2),
781 /* 1111 */ V(3, 1, 2),
782
783 /* 0011 ... */
784 /* 000 */ V(0, 3, 3), /* 64 */
785 /* 001 */ V(3, 0, 3),
786 /* 010 */ V(2, 2, 2),
787 /* 011 */ V(2, 2, 2),
788 /* 100 */ V(2, 1, 1),
789 /* 101 */ V(2, 1, 1),
790 /* 110 */ V(2, 1, 1),
791 /* 111 */ V(2, 1, 1),
792
793 /* 0101 ... */
794 /* 0 */ V(0, 2, 1), /* 72 */
795 /* 1 */ V(2, 0, 1),
796
797 /* 0000 0000 ... */
798 /* 00 */ V(7, 7, 2), /* 74 */
799 /* 01 */ V(6, 7, 2),
800 /* 10 */ V(7, 6, 2),
801 /* 11 */ V(7, 5, 2),
802
803 /* 0000 0001 ... */
804 /* 000 */ V(6, 6, 2), /* 78 */
805 /* 001 */ V(6, 6, 2),
806 /* 010 */ V(4, 7, 2),
807 /* 011 */ V(4, 7, 2),
808 /* 100 */ V(7, 4, 2),
809 /* 101 */ V(7, 4, 2),
810 /* 110 */ V(5, 7, 3),
811 /* 111 */ V(5, 5, 3),
812
813 /* 0000 0010 ... */
814 /* 00 */ V(5, 6, 2), /* 86 */
815 /* 01 */ V(6, 5, 2),
816 /* 10 */ V(3, 7, 1),
817 /* 11 */ V(3, 7, 1),
818
819 /* 0000 0011 ... */
820 /* 0 */ V(7, 3, 1), /* 90 */
821 /* 1 */ V(4, 6, 1),
822
823 /* 0000 0100 ... */
824 /* 00 */ V(4, 5, 2), /* 92 */
825 /* 01 */ V(5, 4, 2),
826 /* 10 */ V(3, 5, 2),
827 /* 11 */ V(5, 3, 2),
828
829 /* 0000 0111 ... */
830 /* 0 */ V(6, 4, 1), /* 96 */
831 /* 1 */ V(0, 7, 1),
832
833 /* 0000 1111 ... */
834 /* 0 */ V(4, 4, 1), /* 98 */
835 /* 1 */ V(2, 5, 1),
836
837 /* 0001 0000 ... */
838 /* 0 */ V(5, 2, 1), /* 100 */
839 /* 1 */ V(0, 5, 1),
840
841 /* 0001 1101 ... */
842 /* 0 */ V(4, 3, 1), /* 102 */
843 /* 1 */ V(3, 3, 1)
844};
845
846static
847union huffpair const hufftab12[] = {
848 /* 0000 */ PTR(16, 4),
849 /* 0001 */ PTR(32, 4),
850 /* 0010 */ PTR(48, 4),
851 /* 0011 */ PTR(64, 2),
852 /* 0100 */ PTR(68, 3),
853 /* 0101 */ PTR(76, 1),
854 /* 0110 */ V(1, 2, 4),
855 /* 0111 */ V(2, 1, 4),
856 /* 1000 */ PTR(78, 1),
857 /* 1001 */ V(0, 0, 4),
858 /* 1010 */ V(1, 1, 3),
859 /* 1011 */ V(1, 1, 3),
860 /* 1100 */ V(0, 1, 3),
861 /* 1101 */ V(0, 1, 3),
862 /* 1110 */ V(1, 0, 3),
863 /* 1111 */ V(1, 0, 3),
864
865 /* 0000 ... */
866 /* 0000 */ PTR(80, 2), /* 16 */
867 /* 0001 */ PTR(84, 1),
868 /* 0010 */ PTR(86, 1),
869 /* 0011 */ PTR(88, 1),
870 /* 0100 */ V(5, 6, 4),
871 /* 0101 */ V(3, 7, 4),
872 /* 0110 */ PTR(90, 1),
873 /* 0111 */ V(2, 7, 4),
874 /* 1000 */ V(7, 2, 4),
875 /* 1001 */ V(4, 6, 4),
876 /* 1010 */ V(6, 4, 4),
877 /* 1011 */ V(1, 7, 4),
878 /* 1100 */ V(7, 1, 4),
879 /* 1101 */ PTR(92, 1),
880 /* 1110 */ V(3, 6, 4),
881 /* 1111 */ V(6, 3, 4),
882
883 /* 0001 ... */
884 /* 0000 */ V(4, 5, 4), /* 32 */
885 /* 0001 */ V(5, 4, 4),
886 /* 0010 */ V(4, 4, 4),
887 /* 0011 */ PTR(94, 1),
888 /* 0100 */ V(2, 6, 3),
889 /* 0101 */ V(2, 6, 3),
890 /* 0110 */ V(6, 2, 3),
891 /* 0111 */ V(6, 2, 3),
892 /* 1000 */ V(6, 1, 3),
893 /* 1001 */ V(6, 1, 3),
894 /* 1010 */ V(1, 6, 4),
895 /* 1011 */ V(6, 0, 4),
896 /* 1100 */ V(3, 5, 4),
897 /* 1101 */ V(5, 3, 4),
898 /* 1110 */ V(2, 5, 4),
899 /* 1111 */ V(5, 2, 4),
900
901 /* 0010 ... */
902 /* 0000 */ V(1, 5, 3), /* 48 */
903 /* 0001 */ V(1, 5, 3),
904 /* 0010 */ V(5, 1, 3),
905 /* 0011 */ V(5, 1, 3),
906 /* 0100 */ V(3, 4, 3),
907 /* 0101 */ V(3, 4, 3),
908 /* 0110 */ V(4, 3, 3),
909 /* 0111 */ V(4, 3, 3),
910 /* 1000 */ V(5, 0, 4),
911 /* 1001 */ V(0, 4, 4),
912 /* 1010 */ V(2, 4, 3),
913 /* 1011 */ V(2, 4, 3),
914 /* 1100 */ V(4, 2, 3),
915 /* 1101 */ V(4, 2, 3),
916 /* 1110 */ V(1, 4, 3),
917 /* 1111 */ V(1, 4, 3),
918
919 /* 0011 ... */
920 /* 00 */ V(3, 3, 2), /* 64 */
921 /* 01 */ V(4, 1, 2),
922 /* 10 */ V(2, 3, 2),
923 /* 11 */ V(3, 2, 2),
924
925 /* 0100 ... */
926 /* 000 */ V(4, 0, 3), /* 68 */
927 /* 001 */ V(0, 3, 3),
928 /* 010 */ V(3, 0, 2),
929 /* 011 */ V(3, 0, 2),
930 /* 100 */ V(1, 3, 1),
931 /* 101 */ V(1, 3, 1),
932 /* 110 */ V(1, 3, 1),
933 /* 111 */ V(1, 3, 1),
934
935 /* 0101 ... */
936 /* 0 */ V(3, 1, 1), /* 76 */
937 /* 1 */ V(2, 2, 1),
938
939 /* 1000 ... */
940 /* 0 */ V(0, 2, 1), /* 78 */
941 /* 1 */ V(2, 0, 1),
942
943 /* 0000 0000 ... */
944 /* 00 */ V(7, 7, 2), /* 80 */
945 /* 01 */ V(6, 7, 2),
946 /* 10 */ V(7, 6, 1),
947 /* 11 */ V(7, 6, 1),
948
949 /* 0000 0001 ... */
950 /* 0 */ V(5, 7, 1), /* 84 */
951 /* 1 */ V(7, 5, 1),
952
953 /* 0000 0010 ... */
954 /* 0 */ V(6, 6, 1), /* 86 */
955 /* 1 */ V(4, 7, 1),
956
957 /* 0000 0011 ... */
958 /* 0 */ V(7, 4, 1), /* 88 */
959 /* 1 */ V(6, 5, 1),
960
961 /* 0000 0110 ... */
962 /* 0 */ V(7, 3, 1), /* 90 */
963 /* 1 */ V(5, 5, 1),
964
965 /* 0000 1101 ... */
966 /* 0 */ V(0, 7, 1), /* 92 */
967 /* 1 */ V(7, 0, 1),
968
969 /* 0001 0011 ... */
970 /* 0 */ V(0, 6, 1), /* 94 */
971 /* 1 */ V(0, 5, 1)
972};
973
974static
975union huffpair const hufftab13[] = {
976 /* 0000 */ PTR(16, 4),
977 /* 0001 */ PTR(32, 4),
978 /* 0010 */ PTR(48, 4),
979 /* 0011 */ PTR(64, 2),
980 /* 0100 */ V(1, 1, 4),
981 /* 0101 */ V(0, 1, 4),
982 /* 0110 */ V(1, 0, 3),
983 /* 0111 */ V(1, 0, 3),
984 /* 1000 */ V(0, 0, 1),
985 /* 1001 */ V(0, 0, 1),
986 /* 1010 */ V(0, 0, 1),
987 /* 1011 */ V(0, 0, 1),
988 /* 1100 */ V(0, 0, 1),
989 /* 1101 */ V(0, 0, 1),
990 /* 1110 */ V(0, 0, 1),
991 /* 1111 */ V(0, 0, 1),
992
993 /* 0000 ... */
994 /* 0000 */ PTR(68, 4), /* 16 */
995 /* 0001 */ PTR(84, 4),
996 /* 0010 */ PTR(100, 4),
997 /* 0011 */ PTR(116, 4),
998 /* 0100 */ PTR(132, 4),
999 /* 0101 */ PTR(148, 4),
1000 /* 0110 */ PTR(164, 3),
1001 /* 0111 */ PTR(172, 3),
1002 /* 1000 */ PTR(180, 3),
1003 /* 1001 */ PTR(188, 3),
1004 /* 1010 */ PTR(196, 3),
1005 /* 1011 */ PTR(204, 3),
1006 /* 1100 */ PTR(212, 1),
1007 /* 1101 */ PTR(214, 2),
1008 /* 1110 */ PTR(218, 3),
1009 /* 1111 */ PTR(226, 1),
1010
1011 /* 0001 ... */
1012 /* 0000 */ PTR(228, 2), /* 32 */
1013 /* 0001 */ PTR(232, 2),
1014 /* 0010 */ PTR(236, 2),
1015 /* 0011 */ PTR(240, 2),
1016 /* 0100 */ V(8, 1, 4),
1017 /* 0101 */ PTR(244, 1),
1018 /* 0110 */ PTR(246, 1),
1019 /* 0111 */ PTR(248, 1),
1020 /* 1000 */ PTR(250, 2),
1021 /* 1001 */ PTR(254, 1),
1022 /* 1010 */ V(1, 5, 4),
1023 /* 1011 */ V(5, 1, 4),
1024 /* 1100 */ PTR(256, 1),
1025 /* 1101 */ PTR(258, 1),
1026 /* 1110 */ PTR(260, 1),
1027 /* 1111 */ V(1, 4, 4),
1028
1029 /* 0010 ... */
1030 /* 0000 */ V(4, 1, 3), /* 48 */
1031 /* 0001 */ V(4, 1, 3),
1032 /* 0010 */ V(0, 4, 4),
1033 /* 0011 */ V(4, 0, 4),
1034 /* 0100 */ V(2, 3, 4),
1035 /* 0101 */ V(3, 2, 4),
1036 /* 0110 */ V(1, 3, 3),
1037 /* 0111 */ V(1, 3, 3),
1038 /* 1000 */ V(3, 1, 3),
1039 /* 1001 */ V(3, 1, 3),
1040 /* 1010 */ V(0, 3, 3),
1041 /* 1011 */ V(0, 3, 3),
1042 /* 1100 */ V(3, 0, 3),
1043 /* 1101 */ V(3, 0, 3),
1044 /* 1110 */ V(2, 2, 3),
1045 /* 1111 */ V(2, 2, 3),
1046
1047 /* 0011 ... */
1048 /* 00 */ V(1, 2, 2), /* 64 */
1049 /* 01 */ V(2, 1, 2),
1050 /* 10 */ V(0, 2, 2),
1051 /* 11 */ V(2, 0, 2),
1052
1053 /* 0000 0000 ... */
1054 /* 0000 */ PTR(262, 4), /* 68 */
1055 /* 0001 */ PTR(278, 4),
1056 /* 0010 */ PTR(294, 4),
1057 /* 0011 */ PTR(310, 3),
1058 /* 0100 */ PTR(318, 2),
1059 /* 0101 */ PTR(322, 2),
1060 /* 0110 */ PTR(326, 3),
1061 /* 0111 */ PTR(334, 2),
1062 /* 1000 */ PTR(338, 1),
1063 /* 1001 */ PTR(340, 2),
1064 /* 1010 */ PTR(344, 2),
1065 /* 1011 */ PTR(348, 2),
1066 /* 1100 */ PTR(352, 2),
1067 /* 1101 */ PTR(356, 2),
1068 /* 1110 */ V(1, 15, 4),
1069 /* 1111 */ V(15, 1, 4),
1070
1071 /* 0000 0001 ... */
1072 /* 0000 */ V(15, 0, 4), /* 84 */
1073 /* 0001 */ PTR(360, 1),
1074 /* 0010 */ PTR(362, 1),
1075 /* 0011 */ PTR(364, 1),
1076 /* 0100 */ V(14, 2, 4),
1077 /* 0101 */ PTR(366, 1),
1078 /* 0110 */ V(1, 14, 4),
1079 /* 0111 */ V(14, 1, 4),
1080 /* 1000 */ PTR(368, 1),
1081 /* 1001 */ PTR(370, 1),
1082 /* 1010 */ PTR(372, 1),
1083 /* 1011 */ PTR(374, 1),
1084 /* 1100 */ PTR(376, 1),
1085 /* 1101 */ PTR(378, 1),
1086 /* 1110 */ V(12, 6, 4),
1087 /* 1111 */ V(3, 13, 4),
1088
1089 /* 0000 0010 ... */
1090 /* 0000 */ PTR(380, 1), /* 100 */
1091 /* 0001 */ V(2, 13, 4),
1092 /* 0010 */ V(13, 2, 4),
1093 /* 0011 */ V(1, 13, 4),
1094 /* 0100 */ V(11, 7, 4),
1095 /* 0101 */ PTR(382, 1),
1096 /* 0110 */ PTR(384, 1),
1097 /* 0111 */ V(12, 3, 4),
1098 /* 1000 */ PTR(386, 1),
1099 /* 1001 */ V(4, 11, 4),
1100 /* 1010 */ V(13, 1, 3),
1101 /* 1011 */ V(13, 1, 3),
1102 /* 1100 */ V(0, 13, 4),
1103 /* 1101 */ V(13, 0, 4),
1104 /* 1110 */ V(8, 10, 4),
1105 /* 1111 */ V(10, 8, 4),
1106
1107 /* 0000 0011 ... */
1108 /* 0000 */ V(4, 12, 4), /* 116 */
1109 /* 0001 */ V(12, 4, 4),
1110 /* 0010 */ V(6, 11, 4),
1111 /* 0011 */ V(11, 6, 4),
1112 /* 0100 */ V(3, 12, 3),
1113 /* 0101 */ V(3, 12, 3),
1114 /* 0110 */ V(2, 12, 3),
1115 /* 0111 */ V(2, 12, 3),
1116 /* 1000 */ V(12, 2, 3),
1117 /* 1001 */ V(12, 2, 3),
1118 /* 1010 */ V(5, 11, 3),
1119 /* 1011 */ V(5, 11, 3),
1120 /* 1100 */ V(11, 5, 4),
1121 /* 1101 */ V(8, 9, 4),
1122 /* 1110 */ V(1, 12, 3),
1123 /* 1111 */ V(1, 12, 3),
1124
1125 /* 0000 0100 ... */
1126 /* 0000 */ V(12, 1, 3), /* 132 */
1127 /* 0001 */ V(12, 1, 3),
1128 /* 0010 */ V(9, 8, 4),
1129 /* 0011 */ V(0, 12, 4),
1130 /* 0100 */ V(12, 0, 3),
1131 /* 0101 */ V(12, 0, 3),
1132 /* 0110 */ V(11, 4, 4),
1133 /* 0111 */ V(6, 10, 4),
1134 /* 1000 */ V(10, 6, 4),
1135 /* 1001 */ V(7, 9, 4),
1136 /* 1010 */ V(3, 11, 3),
1137 /* 1011 */ V(3, 11, 3),
1138 /* 1100 */ V(11, 3, 3),
1139 /* 1101 */ V(11, 3, 3),
1140 /* 1110 */ V(8, 8, 4),
1141 /* 1111 */ V(5, 10, 4),
1142
1143 /* 0000 0101 ... */
1144 /* 0000 */ V(2, 11, 3), /* 148 */
1145 /* 0001 */ V(2, 11, 3),
1146 /* 0010 */ V(10, 5, 4),
1147 /* 0011 */ V(6, 9, 4),
1148 /* 0100 */ V(10, 4, 3),
1149 /* 0101 */ V(10, 4, 3),
1150 /* 0110 */ V(7, 8, 4),
1151 /* 0111 */ V(8, 7, 4),
1152 /* 1000 */ V(9, 4, 3),
1153 /* 1001 */ V(9, 4, 3),
1154 /* 1010 */ V(7, 7, 4),
1155 /* 1011 */ V(7, 6, 4),
1156 /* 1100 */ V(11, 2, 2),
1157 /* 1101 */ V(11, 2, 2),
1158 /* 1110 */ V(11, 2, 2),
1159 /* 1111 */ V(11, 2, 2),
1160
1161 /* 0000 0110 ... */
1162 /* 000 */ V(1, 11, 2), /* 164 */
1163 /* 001 */ V(1, 11, 2),
1164 /* 010 */ V(11, 1, 2),
1165 /* 011 */ V(11, 1, 2),
1166 /* 100 */ V(0, 11, 3),
1167 /* 101 */ V(11, 0, 3),
1168 /* 110 */ V(9, 6, 3),
1169 /* 111 */ V(4, 10, 3),
1170
1171 /* 0000 0111 ... */
1172 /* 000 */ V(3, 10, 3), /* 172 */
1173 /* 001 */ V(10, 3, 3),
1174 /* 010 */ V(5, 9, 3),
1175 /* 011 */ V(9, 5, 3),
1176 /* 100 */ V(2, 10, 2),
1177 /* 101 */ V(2, 10, 2),
1178 /* 110 */ V(10, 2, 2),
1179 /* 111 */ V(10, 2, 2),
1180
1181 /* 0000 1000 ... */
1182 /* 000 */ V(1, 10, 2), /* 180 */
1183 /* 001 */ V(1, 10, 2),
1184 /* 010 */ V(10, 1, 2),
1185 /* 011 */ V(10, 1, 2),
1186 /* 100 */ V(0, 10, 3),
1187 /* 101 */ V(6, 8, 3),
1188 /* 110 */ V(10, 0, 2),
1189 /* 111 */ V(10, 0, 2),
1190
1191 /* 0000 1001 ... */
1192 /* 000 */ V(8, 6, 3), /* 188 */
1193 /* 001 */ V(4, 9, 3),
1194 /* 010 */ V(9, 3, 2),
1195 /* 011 */ V(9, 3, 2),
1196 /* 100 */ V(3, 9, 3),
1197 /* 101 */ V(5, 8, 3),
1198 /* 110 */ V(8, 5, 3),
1199 /* 111 */ V(6, 7, 3),
1200
1201 /* 0000 1010 ... */
1202 /* 000 */ V(2, 9, 2), /* 196 */
1203 /* 001 */ V(2, 9, 2),
1204 /* 010 */ V(9, 2, 2),
1205 /* 011 */ V(9, 2, 2),
1206 /* 100 */ V(5, 7, 3),
1207 /* 101 */ V(7, 5, 3),
1208 /* 110 */ V(3, 8, 2),
1209 /* 111 */ V(3, 8, 2),
1210
1211 /* 0000 1011 ... */
1212 /* 000 */ V(8, 3, 2), /* 204 */
1213 /* 001 */ V(8, 3, 2),
1214 /* 010 */ V(6, 6, 3),
1215 /* 011 */ V(4, 7, 3),
1216 /* 100 */ V(7, 4, 3),
1217 /* 101 */ V(5, 6, 3),
1218 /* 110 */ V(6, 5, 3),
1219 /* 111 */ V(7, 3, 3),
1220
1221 /* 0000 1100 ... */
1222 /* 0 */ V(1, 9, 1), /* 212 */
1223 /* 1 */ V(9, 1, 1),
1224
1225 /* 0000 1101 ... */
1226 /* 00 */ V(0, 9, 2), /* 214 */
1227 /* 01 */ V(9, 0, 2),
1228 /* 10 */ V(4, 8, 2),
1229 /* 11 */ V(8, 4, 2),
1230
1231 /* 0000 1110 ... */
1232 /* 000 */ V(7, 2, 2), /* 218 */
1233 /* 001 */ V(7, 2, 2),
1234 /* 010 */ V(4, 6, 3),
1235 /* 011 */ V(6, 4, 3),
1236 /* 100 */ V(2, 8, 1),
1237 /* 101 */ V(2, 8, 1),
1238 /* 110 */ V(2, 8, 1),
1239 /* 111 */ V(2, 8, 1),
1240
1241 /* 0000 1111 ... */
1242 /* 0 */ V(8, 2, 1), /* 226 */
1243 /* 1 */ V(1, 8, 1),
1244
1245 /* 0001 0000 ... */
1246 /* 00 */ V(3, 7, 2), /* 228 */
1247 /* 01 */ V(2, 7, 2),
1248 /* 10 */ V(1, 7, 1),
1249 /* 11 */ V(1, 7, 1),
1250
1251 /* 0001 0001 ... */
1252 /* 00 */ V(7, 1, 1), /* 232 */
1253 /* 01 */ V(7, 1, 1),
1254 /* 10 */ V(5, 5, 2),
1255 /* 11 */ V(0, 7, 2),
1256
1257 /* 0001 0010 ... */
1258 /* 00 */ V(7, 0, 2), /* 236 */
1259 /* 01 */ V(3, 6, 2),
1260 /* 10 */ V(6, 3, 2),
1261 /* 11 */ V(4, 5, 2),
1262
1263 /* 0001 0011 ... */
1264 /* 00 */ V(5, 4, 2), /* 240 */
1265 /* 01 */ V(2, 6, 2),
1266 /* 10 */ V(6, 2, 2),
1267 /* 11 */ V(3, 5, 2),
1268
1269 /* 0001 0101 ... */
1270 /* 0 */ V(0, 8, 1), /* 244 */
1271 /* 1 */ V(8, 0, 1),
1272
1273 /* 0001 0110 ... */
1274 /* 0 */ V(1, 6, 1), /* 246 */
1275 /* 1 */ V(6, 1, 1),
1276
1277 /* 0001 0111 ... */
1278 /* 0 */ V(0, 6, 1), /* 248 */
1279 /* 1 */ V(6, 0, 1),
1280
1281 /* 0001 1000 ... */
1282 /* 00 */ V(5, 3, 2), /* 250 */
1283 /* 01 */ V(4, 4, 2),
1284 /* 10 */ V(2, 5, 1),
1285 /* 11 */ V(2, 5, 1),
1286
1287 /* 0001 1001 ... */
1288 /* 0 */ V(5, 2, 1), /* 254 */
1289 /* 1 */ V(0, 5, 1),
1290
1291 /* 0001 1100 ... */
1292 /* 0 */ V(3, 4, 1), /* 256 */
1293 /* 1 */ V(4, 3, 1),
1294
1295 /* 0001 1101 ... */
1296 /* 0 */ V(5, 0, 1), /* 258 */
1297 /* 1 */ V(2, 4, 1),
1298
1299 /* 0001 1110 ... */
1300 /* 0 */ V(4, 2, 1), /* 260 */
1301 /* 1 */ V(3, 3, 1),
1302
1303 /* 0000 0000 0000 ... */
1304 /* 0000 */ PTR(388, 3), /* 262 */
1305 /* 0001 */ V(15, 15, 4),
1306 /* 0010 */ V(14, 15, 4),
1307 /* 0011 */ V(13, 15, 4),
1308 /* 0100 */ V(14, 14, 4),
1309 /* 0101 */ V(12, 15, 4),
1310 /* 0110 */ V(13, 14, 4),
1311 /* 0111 */ V(11, 15, 4),
1312 /* 1000 */ V(15, 11, 4),
1313 /* 1001 */ V(12, 14, 4),
1314 /* 1010 */ V(13, 12, 4),
1315 /* 1011 */ PTR(396, 1),
1316 /* 1100 */ V(14, 12, 3),
1317 /* 1101 */ V(14, 12, 3),
1318 /* 1110 */ V(13, 13, 3),
1319 /* 1111 */ V(13, 13, 3),
1320
1321 /* 0000 0000 0001 ... */
1322 /* 0000 */ V(15, 10, 4), /* 278 */
1323 /* 0001 */ V(12, 13, 4),
1324 /* 0010 */ V(11, 14, 3),
1325 /* 0011 */ V(11, 14, 3),
1326 /* 0100 */ V(14, 11, 3),
1327 /* 0101 */ V(14, 11, 3),
1328 /* 0110 */ V(9, 15, 3),
1329 /* 0111 */ V(9, 15, 3),
1330 /* 1000 */ V(15, 9, 3),
1331 /* 1001 */ V(15, 9, 3),
1332 /* 1010 */ V(14, 10, 3),
1333 /* 1011 */ V(14, 10, 3),
1334 /* 1100 */ V(11, 13, 3),
1335 /* 1101 */ V(11, 13, 3),
1336 /* 1110 */ V(13, 11, 3),
1337 /* 1111 */ V(13, 11, 3),
1338
1339 /* 0000 0000 0010 ... */
1340 /* 0000 */ V(8, 15, 3), /* 294 */
1341 /* 0001 */ V(8, 15, 3),
1342 /* 0010 */ V(15, 8, 3),
1343 /* 0011 */ V(15, 8, 3),
1344 /* 0100 */ V(12, 12, 3),
1345 /* 0101 */ V(12, 12, 3),
1346 /* 0110 */ V(10, 14, 4),
1347 /* 0111 */ V(9, 14, 4),
1348 /* 1000 */ V(8, 14, 3),
1349 /* 1001 */ V(8, 14, 3),
1350 /* 1010 */ V(7, 15, 4),
1351 /* 1011 */ V(7, 14, 4),
1352 /* 1100 */ V(15, 7, 2),
1353 /* 1101 */ V(15, 7, 2),
1354 /* 1110 */ V(15, 7, 2),
1355 /* 1111 */ V(15, 7, 2),
1356
1357 /* 0000 0000 0011 ... */
1358 /* 000 */ V(13, 10, 2), /* 310 */
1359 /* 001 */ V(13, 10, 2),
1360 /* 010 */ V(10, 13, 3),
1361 /* 011 */ V(11, 12, 3),
1362 /* 100 */ V(12, 11, 3),
1363 /* 101 */ V(15, 6, 3),
1364 /* 110 */ V(6, 15, 2),
1365 /* 111 */ V(6, 15, 2),
1366
1367 /* 0000 0000 0100 ... */
1368 /* 00 */ V(14, 8, 2), /* 318 */
1369 /* 01 */ V(5, 15, 2),
1370 /* 10 */ V(9, 13, 2),
1371 /* 11 */ V(13, 9, 2),
1372
1373 /* 0000 0000 0101 ... */
1374 /* 00 */ V(15, 5, 2), /* 322 */
1375 /* 01 */ V(14, 7, 2),
1376 /* 10 */ V(10, 12, 2),
1377 /* 11 */ V(11, 11, 2),
1378
1379 /* 0000 0000 0110 ... */
1380 /* 000 */ V(4, 15, 2), /* 326 */
1381 /* 001 */ V(4, 15, 2),
1382 /* 010 */ V(15, 4, 2),
1383 /* 011 */ V(15, 4, 2),
1384 /* 100 */ V(12, 10, 3),
1385 /* 101 */ V(14, 6, 3),
1386 /* 110 */ V(15, 3, 2),
1387 /* 111 */ V(15, 3, 2),
1388
1389 /* 0000 0000 0111 ... */
1390 /* 00 */ V(3, 15, 1), /* 334 */
1391 /* 01 */ V(3, 15, 1),
1392 /* 10 */ V(8, 13, 2),
1393 /* 11 */ V(13, 8, 2),
1394
1395 /* 0000 0000 1000 ... */
1396 /* 0 */ V(2, 15, 1), /* 338 */
1397 /* 1 */ V(15, 2, 1),
1398
1399 /* 0000 0000 1001 ... */
1400 /* 00 */ V(6, 14, 2), /* 340 */
1401 /* 01 */ V(9, 12, 2),
1402 /* 10 */ V(0, 15, 1),
1403 /* 11 */ V(0, 15, 1),
1404
1405 /* 0000 0000 1010 ... */
1406 /* 00 */ V(12, 9, 2), /* 344 */
1407 /* 01 */ V(5, 14, 2),
1408 /* 10 */ V(10, 11, 1),
1409 /* 11 */ V(10, 11, 1),
1410
1411 /* 0000 0000 1011 ... */
1412 /* 00 */ V(7, 13, 2), /* 348 */
1413 /* 01 */ V(13, 7, 2),
1414 /* 10 */ V(4, 14, 1),
1415 /* 11 */ V(4, 14, 1),
1416
1417 /* 0000 0000 1100 ... */
1418 /* 00 */ V(12, 8, 2), /* 352 */
1419 /* 01 */ V(13, 6, 2),
1420 /* 10 */ V(3, 14, 1),
1421 /* 11 */ V(3, 14, 1),
1422
1423 /* 0000 0000 1101 ... */
1424 /* 00 */ V(11, 9, 1), /* 356 */
1425 /* 01 */ V(11, 9, 1),
1426 /* 10 */ V(9, 11, 2),
1427 /* 11 */ V(10, 10, 2),
1428
1429 /* 0000 0001 0001 ... */
1430 /* 0 */ V(11, 10, 1), /* 360 */
1431 /* 1 */ V(14, 5, 1),
1432
1433 /* 0000 0001 0010 ... */
1434 /* 0 */ V(14, 4, 1), /* 362 */
1435 /* 1 */ V(8, 12, 1),
1436
1437 /* 0000 0001 0011 ... */
1438 /* 0 */ V(6, 13, 1), /* 364 */
1439 /* 1 */ V(14, 3, 1),
1440
1441 /* 0000 0001 0101 ... */
1442 /* 0 */ V(2, 14, 1), /* 366 */
1443 /* 1 */ V(0, 14, 1),
1444
1445 /* 0000 0001 1000 ... */
1446 /* 0 */ V(14, 0, 1), /* 368 */
1447 /* 1 */ V(5, 13, 1),
1448
1449 /* 0000 0001 1001 ... */
1450 /* 0 */ V(13, 5, 1), /* 370 */
1451 /* 1 */ V(7, 12, 1),
1452
1453 /* 0000 0001 1010 ... */
1454 /* 0 */ V(12, 7, 1), /* 372 */
1455 /* 1 */ V(4, 13, 1),
1456
1457 /* 0000 0001 1011 ... */
1458 /* 0 */ V(8, 11, 1), /* 374 */
1459 /* 1 */ V(11, 8, 1),
1460
1461 /* 0000 0001 1100 ... */
1462 /* 0 */ V(13, 4, 1), /* 376 */
1463 /* 1 */ V(9, 10, 1),
1464
1465 /* 0000 0001 1101 ... */
1466 /* 0 */ V(10, 9, 1), /* 378 */
1467 /* 1 */ V(6, 12, 1),
1468
1469 /* 0000 0010 0000 ... */
1470 /* 0 */ V(13, 3, 1), /* 380 */
1471 /* 1 */ V(7, 11, 1),
1472
1473 /* 0000 0010 0101 ... */
1474 /* 0 */ V(5, 12, 1), /* 382 */
1475 /* 1 */ V(12, 5, 1),
1476
1477 /* 0000 0010 0110 ... */
1478 /* 0 */ V(9, 9, 1), /* 384 */
1479 /* 1 */ V(7, 10, 1),
1480
1481 /* 0000 0010 1000 ... */
1482 /* 0 */ V(10, 7, 1), /* 386 */
1483 /* 1 */ V(9, 7, 1),
1484
1485 /* 0000 0000 0000 0000 ... */
1486 /* 000 */ V(15, 14, 3), /* 388 */
1487 /* 001 */ V(15, 12, 3),
1488 /* 010 */ V(15, 13, 2),
1489 /* 011 */ V(15, 13, 2),
1490 /* 100 */ V(14, 13, 1),
1491 /* 101 */ V(14, 13, 1),
1492 /* 110 */ V(14, 13, 1),
1493 /* 111 */ V(14, 13, 1),
1494
1495 /* 0000 0000 0000 1011 ... */
1496 /* 0 */ V(10, 15, 1), /* 396 */
1497 /* 1 */ V(14, 9, 1)
1498};
1499
1500static
1501union huffpair const hufftab15[] = {
1502 /* 0000 */ PTR(16, 4),
1503 /* 0001 */ PTR(32, 4),
1504 /* 0010 */ PTR(48, 4),
1505 /* 0011 */ PTR(64, 4),
1506 /* 0100 */ PTR(80, 4),
1507 /* 0101 */ PTR(96, 3),
1508 /* 0110 */ PTR(104, 3),
1509 /* 0111 */ PTR(112, 2),
1510 /* 1000 */ PTR(116, 1),
1511 /* 1001 */ PTR(118, 1),
1512 /* 1010 */ V(1, 1, 3),
1513 /* 1011 */ V(1, 1, 3),
1514 /* 1100 */ V(0, 1, 4),
1515 /* 1101 */ V(1, 0, 4),
1516 /* 1110 */ V(0, 0, 3),
1517 /* 1111 */ V(0, 0, 3),
1518
1519 /* 0000 ... */
1520 /* 0000 */ PTR(120, 4), /* 16 */
1521 /* 0001 */ PTR(136, 4),
1522 /* 0010 */ PTR(152, 4),
1523 /* 0011 */ PTR(168, 4),
1524 /* 0100 */ PTR(184, 4),
1525 /* 0101 */ PTR(200, 3),
1526 /* 0110 */ PTR(208, 3),
1527 /* 0111 */ PTR(216, 4),
1528 /* 1000 */ PTR(232, 3),
1529 /* 1001 */ PTR(240, 3),
1530 /* 1010 */ PTR(248, 3),
1531 /* 1011 */ PTR(256, 3),
1532 /* 1100 */ PTR(264, 2),
1533 /* 1101 */ PTR(268, 3),
1534 /* 1110 */ PTR(276, 3),
1535 /* 1111 */ PTR(284, 2),
1536
1537 /* 0001 ... */
1538 /* 0000 */ PTR(288, 2), /* 32 */
1539 /* 0001 */ PTR(292, 2),
1540 /* 0010 */ PTR(296, 2),
1541 /* 0011 */ PTR(300, 2),
1542 /* 0100 */ PTR(304, 2),
1543 /* 0101 */ PTR(308, 2),
1544 /* 0110 */ PTR(312, 2),
1545 /* 0111 */ PTR(316, 2),
1546 /* 1000 */ PTR(320, 1),
1547 /* 1001 */ PTR(322, 1),
1548 /* 1010 */ PTR(324, 1),
1549 /* 1011 */ PTR(326, 2),
1550 /* 1100 */ PTR(330, 1),
1551 /* 1101 */ PTR(332, 1),
1552 /* 1110 */ PTR(334, 2),
1553 /* 1111 */ PTR(338, 1),
1554
1555 /* 0010 ... */
1556 /* 0000 */ PTR(340, 1), /* 48 */
1557 /* 0001 */ PTR(342, 1),
1558 /* 0010 */ V(9, 1, 4),
1559 /* 0011 */ PTR(344, 1),
1560 /* 0100 */ PTR(346, 1),
1561 /* 0101 */ PTR(348, 1),
1562 /* 0110 */ PTR(350, 1),
1563 /* 0111 */ PTR(352, 1),
1564 /* 1000 */ V(2, 8, 4),
1565 /* 1001 */ V(8, 2, 4),
1566 /* 1010 */ V(1, 8, 4),
1567 /* 1011 */ V(8, 1, 4),
1568 /* 1100 */ PTR(354, 1),
1569 /* 1101 */ PTR(356, 1),
1570 /* 1110 */ PTR(358, 1),
1571 /* 1111 */ PTR(360, 1),
1572
1573 /* 0011 ... */
1574 /* 0000 */ V(2, 7, 4), /* 64 */
1575 /* 0001 */ V(7, 2, 4),
1576 /* 0010 */ V(6, 4, 4),
1577 /* 0011 */ V(1, 7, 4),
1578 /* 0100 */ V(5, 5, 4),
1579 /* 0101 */ V(7, 1, 4),
1580 /* 0110 */ PTR(362, 1),
1581 /* 0111 */ V(3, 6, 4),
1582 /* 1000 */ V(6, 3, 4),
1583 /* 1001 */ V(4, 5, 4),
1584 /* 1010 */ V(5, 4, 4),
1585 /* 1011 */ V(2, 6, 4),
1586 /* 1100 */ V(6, 2, 4),
1587 /* 1101 */ V(1, 6, 4),
1588 /* 1110 */ PTR(364, 1),
1589 /* 1111 */ V(3, 5, 4),
1590
1591 /* 0100 ... */
1592 /* 0000 */ V(6, 1, 3), /* 80 */
1593 /* 0001 */ V(6, 1, 3),
1594 /* 0010 */ V(5, 3, 4),
1595 /* 0011 */ V(4, 4, 4),
1596 /* 0100 */ V(2, 5, 3),
1597 /* 0101 */ V(2, 5, 3),
1598 /* 0110 */ V(5, 2, 3),
1599 /* 0111 */ V(5, 2, 3),
1600 /* 1000 */ V(1, 5, 3),
1601 /* 1001 */ V(1, 5, 3),
1602 /* 1010 */ V(5, 1, 3),
1603 /* 1011 */ V(5, 1, 3),
1604 /* 1100 */ V(0, 5, 4),
1605 /* 1101 */ V(5, 0, 4),
1606 /* 1110 */ V(3, 4, 3),
1607 /* 1111 */ V(3, 4, 3),
1608
1609 /* 0101 ... */
1610 /* 000 */ V(4, 3, 3), /* 96 */
1611 /* 001 */ V(2, 4, 3),
1612 /* 010 */ V(4, 2, 3),
1613 /* 011 */ V(3, 3, 3),
1614 /* 100 */ V(4, 1, 2),
1615 /* 101 */ V(4, 1, 2),
1616 /* 110 */ V(1, 4, 3),
1617 /* 111 */ V(0, 4, 3),
1618
1619 /* 0110 ... */
1620 /* 000 */ V(2, 3, 2), /* 104 */
1621 /* 001 */ V(2, 3, 2),
1622 /* 010 */ V(3, 2, 2),
1623 /* 011 */ V(3, 2, 2),
1624 /* 100 */ V(4, 0, 3),
1625 /* 101 */ V(0, 3, 3),
1626 /* 110 */ V(1, 3, 2),
1627 /* 111 */ V(1, 3, 2),
1628
1629 /* 0111 ... */
1630 /* 00 */ V(3, 1, 2), /* 112 */
1631 /* 01 */ V(3, 0, 2),
1632 /* 10 */ V(2, 2, 1),
1633 /* 11 */ V(2, 2, 1),
1634
1635 /* 1000 ... */
1636 /* 0 */ V(1, 2, 1), /* 116 */
1637 /* 1 */ V(2, 1, 1),
1638
1639 /* 1001 ... */
1640 /* 0 */ V(0, 2, 1), /* 118 */
1641 /* 1 */ V(2, 0, 1),
1642
1643 /* 0000 0000 ... */
1644 /* 0000 */ PTR(366, 1), /* 120 */
1645 /* 0001 */ PTR(368, 1),
1646 /* 0010 */ V(14, 14, 4),
1647 /* 0011 */ PTR(370, 1),
1648 /* 0100 */ PTR(372, 1),
1649 /* 0101 */ PTR(374, 1),
1650 /* 0110 */ V(15, 11, 4),
1651 /* 0111 */ PTR(376, 1),
1652 /* 1000 */ V(13, 13, 4),
1653 /* 1001 */ V(10, 15, 4),
1654 /* 1010 */ V(15, 10, 4),
1655 /* 1011 */ V(11, 14, 4),
1656 /* 1100 */ V(14, 11, 4),
1657 /* 1101 */ V(12, 13, 4),
1658 /* 1110 */ V(13, 12, 4),
1659 /* 1111 */ V(9, 15, 4),
1660
1661 /* 0000 0001 ... */
1662 /* 0000 */ V(15, 9, 4), /* 136 */
1663 /* 0001 */ V(14, 10, 4),
1664 /* 0010 */ V(11, 13, 4),
1665 /* 0011 */ V(13, 11, 4),
1666 /* 0100 */ V(8, 15, 4),
1667 /* 0101 */ V(15, 8, 4),
1668 /* 0110 */ V(12, 12, 4),
1669 /* 0111 */ V(9, 14, 4),
1670 /* 1000 */ V(14, 9, 4),
1671 /* 1001 */ V(7, 15, 4),
1672 /* 1010 */ V(15, 7, 4),
1673 /* 1011 */ V(10, 13, 4),
1674 /* 1100 */ V(13, 10, 4),
1675 /* 1101 */ V(11, 12, 4),
1676 /* 1110 */ V(6, 15, 4),
1677 /* 1111 */ PTR(378, 1),
1678
1679 /* 0000 0010 ... */
1680 /* 0000 */ V(12, 11, 3), /* 152 */
1681 /* 0001 */ V(12, 11, 3),
1682 /* 0010 */ V(15, 6, 3),
1683 /* 0011 */ V(15, 6, 3),
1684 /* 0100 */ V(8, 14, 4),
1685 /* 0101 */ V(14, 8, 4),
1686 /* 0110 */ V(5, 15, 4),
1687 /* 0111 */ V(9, 13, 4),
1688 /* 1000 */ V(15, 5, 3),
1689 /* 1001 */ V(15, 5, 3),
1690 /* 1010 */ V(7, 14, 3),
1691 /* 1011 */ V(7, 14, 3),
1692 /* 1100 */ V(14, 7, 3),
1693 /* 1101 */ V(14, 7, 3),
1694 /* 1110 */ V(10, 12, 3),
1695 /* 1111 */ V(10, 12, 3),
1696
1697 /* 0000 0011 ... */
1698 /* 0000 */ V(12, 10, 3), /* 168 */
1699 /* 0001 */ V(12, 10, 3),
1700 /* 0010 */ V(11, 11, 3),
1701 /* 0011 */ V(11, 11, 3),
1702 /* 0100 */ V(13, 9, 4),
1703 /* 0101 */ V(8, 13, 4),
1704 /* 0110 */ V(4, 15, 3),
1705 /* 0111 */ V(4, 15, 3),
1706 /* 1000 */ V(15, 4, 3),
1707 /* 1001 */ V(15, 4, 3),
1708 /* 1010 */ V(3, 15, 3),
1709 /* 1011 */ V(3, 15, 3),
1710 /* 1100 */ V(15, 3, 3),
1711 /* 1101 */ V(15, 3, 3),
1712 /* 1110 */ V(13, 8, 3),
1713 /* 1111 */ V(13, 8, 3),
1714
1715 /* 0000 0100 ... */
1716 /* 0000 */ V(14, 6, 3), /* 184 */
1717 /* 0001 */ V(14, 6, 3),
1718 /* 0010 */ V(2, 15, 3),
1719 /* 0011 */ V(2, 15, 3),
1720 /* 0100 */ V(15, 2, 3),
1721 /* 0101 */ V(15, 2, 3),
1722 /* 0110 */ V(6, 14, 4),
1723 /* 0111 */ V(15, 0, 4),
1724 /* 1000 */ V(1, 15, 3),
1725 /* 1001 */ V(1, 15, 3),
1726 /* 1010 */ V(15, 1, 3),
1727 /* 1011 */ V(15, 1, 3),
1728 /* 1100 */ V(9, 12, 3),
1729 /* 1101 */ V(9, 12, 3),
1730 /* 1110 */ V(12, 9, 3),
1731 /* 1111 */ V(12, 9, 3),
1732
1733 /* 0000 0101 ... */
1734 /* 000 */ V(5, 14, 3), /* 200 */
1735 /* 001 */ V(10, 11, 3),
1736 /* 010 */ V(11, 10, 3),
1737 /* 011 */ V(14, 5, 3),
1738 /* 100 */ V(7, 13, 3),
1739 /* 101 */ V(13, 7, 3),
1740 /* 110 */ V(4, 14, 3),
1741 /* 111 */ V(14, 4, 3),
1742
1743 /* 0000 0110 ... */
1744 /* 000 */ V(8, 12, 3), /* 208 */
1745 /* 001 */ V(12, 8, 3),
1746 /* 010 */ V(3, 14, 3),
1747 /* 011 */ V(6, 13, 3),
1748 /* 100 */ V(13, 6, 3),
1749 /* 101 */ V(14, 3, 3),
1750 /* 110 */ V(9, 11, 3),
1751 /* 111 */ V(11, 9, 3),
1752
1753 /* 0000 0111 ... */
1754 /* 0000 */ V(2, 14, 3), /* 216 */
1755 /* 0001 */ V(2, 14, 3),
1756 /* 0010 */ V(10, 10, 3),
1757 /* 0011 */ V(10, 10, 3),
1758 /* 0100 */ V(14, 2, 3),
1759 /* 0101 */ V(14, 2, 3),
1760 /* 0110 */ V(1, 14, 3),
1761 /* 0111 */ V(1, 14, 3),
1762 /* 1000 */ V(14, 1, 3),
1763 /* 1001 */ V(14, 1, 3),
1764 /* 1010 */ V(0, 14, 4),
1765 /* 1011 */ V(14, 0, 4),
1766 /* 1100 */ V(5, 13, 3),
1767 /* 1101 */ V(5, 13, 3),
1768 /* 1110 */ V(13, 5, 3),
1769 /* 1111 */ V(13, 5, 3),
1770
1771 /* 0000 1000 ... */
1772 /* 000 */ V(7, 12, 3), /* 232 */
1773 /* 001 */ V(12, 7, 3),
1774 /* 010 */ V(4, 13, 3),
1775 /* 011 */ V(8, 11, 3),
1776 /* 100 */ V(13, 4, 2),
1777 /* 101 */ V(13, 4, 2),
1778 /* 110 */ V(11, 8, 3),
1779 /* 111 */ V(9, 10, 3),
1780
1781 /* 0000 1001 ... */
1782 /* 000 */ V(10, 9, 3), /* 240 */
1783 /* 001 */ V(6, 12, 3),
1784 /* 010 */ V(12, 6, 3),
1785 /* 011 */ V(3, 13, 3),
1786 /* 100 */ V(13, 3, 2),
1787 /* 101 */ V(13, 3, 2),
1788 /* 110 */ V(13, 2, 2),
1789 /* 111 */ V(13, 2, 2),
1790
1791 /* 0000 1010 ... */
1792 /* 000 */ V(2, 13, 3), /* 248 */
1793 /* 001 */ V(0, 13, 3),
1794 /* 010 */ V(1, 13, 2),
1795 /* 011 */ V(1, 13, 2),
1796 /* 100 */ V(7, 11, 2),
1797 /* 101 */ V(7, 11, 2),
1798 /* 110 */ V(11, 7, 2),
1799 /* 111 */ V(11, 7, 2),
1800
1801 /* 0000 1011 ... */
1802 /* 000 */ V(13, 1, 2), /* 256 */
1803 /* 001 */ V(13, 1, 2),
1804 /* 010 */ V(5, 12, 3),
1805 /* 011 */ V(13, 0, 3),
1806 /* 100 */ V(12, 5, 2),
1807 /* 101 */ V(12, 5, 2),
1808 /* 110 */ V(8, 10, 2),
1809 /* 111 */ V(8, 10, 2),
1810
1811 /* 0000 1100 ... */
1812 /* 00 */ V(10, 8, 2), /* 264 */
1813 /* 01 */ V(4, 12, 2),
1814 /* 10 */ V(12, 4, 2),
1815 /* 11 */ V(6, 11, 2),
1816
1817 /* 0000 1101 ... */
1818 /* 000 */ V(11, 6, 2), /* 268 */
1819 /* 001 */ V(11, 6, 2),
1820 /* 010 */ V(9, 9, 3),
1821 /* 011 */ V(0, 12, 3),
1822 /* 100 */ V(3, 12, 2),
1823 /* 101 */ V(3, 12, 2),
1824 /* 110 */ V(12, 3, 2),
1825 /* 111 */ V(12, 3, 2),
1826
1827 /* 0000 1110 ... */
1828 /* 000 */ V(7, 10, 2), /* 276 */
1829 /* 001 */ V(7, 10, 2),
1830 /* 010 */ V(10, 7, 2),
1831 /* 011 */ V(10, 7, 2),
1832 /* 100 */ V(10, 6, 2),
1833 /* 101 */ V(10, 6, 2),
1834 /* 110 */ V(12, 0, 3),
1835 /* 111 */ V(0, 11, 3),
1836
1837 /* 0000 1111 ... */
1838 /* 00 */ V(12, 2, 1), /* 284 */
1839 /* 01 */ V(12, 2, 1),
1840 /* 10 */ V(2, 12, 2),
1841 /* 11 */ V(5, 11, 2),
1842
1843 /* 0001 0000 ... */
1844 /* 00 */ V(11, 5, 2), /* 288 */
1845 /* 01 */ V(1, 12, 2),
1846 /* 10 */ V(8, 9, 2),
1847 /* 11 */ V(9, 8, 2),
1848
1849 /* 0001 0001 ... */
1850 /* 00 */ V(12, 1, 2), /* 292 */
1851 /* 01 */ V(4, 11, 2),
1852 /* 10 */ V(11, 4, 2),
1853 /* 11 */ V(6, 10, 2),
1854
1855 /* 0001 0010 ... */
1856 /* 00 */ V(3, 11, 2), /* 296 */
1857 /* 01 */ V(7, 9, 2),
1858 /* 10 */ V(11, 3, 1),
1859 /* 11 */ V(11, 3, 1),
1860
1861 /* 0001 0011 ... */
1862 /* 00 */ V(9, 7, 2), /* 300 */
1863 /* 01 */ V(8, 8, 2),
1864 /* 10 */ V(2, 11, 2),
1865 /* 11 */ V(5, 10, 2),
1866
1867 /* 0001 0100 ... */
1868 /* 00 */ V(11, 2, 1), /* 304 */
1869 /* 01 */ V(11, 2, 1),
1870 /* 10 */ V(10, 5, 2),
1871 /* 11 */ V(1, 11, 2),
1872
1873 /* 0001 0101 ... */
1874 /* 00 */ V(11, 1, 1), /* 308 */
1875 /* 01 */ V(11, 1, 1),
1876 /* 10 */ V(11, 0, 2),
1877 /* 11 */ V(6, 9, 2),
1878
1879 /* 0001 0110 ... */
1880 /* 00 */ V(9, 6, 2), /* 312 */
1881 /* 01 */ V(4, 10, 2),
1882 /* 10 */ V(10, 4, 2),
1883 /* 11 */ V(7, 8, 2),
1884
1885 /* 0001 0111 ... */
1886 /* 00 */ V(8, 7, 2), /* 316 */
1887 /* 01 */ V(3, 10, 2),
1888 /* 10 */ V(10, 3, 1),
1889 /* 11 */ V(10, 3, 1),
1890
1891 /* 0001 1000 ... */
1892 /* 0 */ V(5, 9, 1), /* 320 */
1893 /* 1 */ V(9, 5, 1),
1894
1895 /* 0001 1001 ... */
1896 /* 0 */ V(2, 10, 1), /* 322 */
1897 /* 1 */ V(10, 2, 1),
1898
1899 /* 0001 1010 ... */
1900 /* 0 */ V(1, 10, 1), /* 324 */
1901 /* 1 */ V(10, 1, 1),
1902
1903 /* 0001 1011 ... */
1904 /* 00 */ V(0, 10, 2), /* 326 */
1905 /* 01 */ V(10, 0, 2),
1906 /* 10 */ V(6, 8, 1),
1907 /* 11 */ V(6, 8, 1),
1908
1909 /* 0001 1100 ... */
1910 /* 0 */ V(8, 6, 1), /* 330 */
1911 /* 1 */ V(4, 9, 1),
1912
1913 /* 0001 1101 ... */
1914 /* 0 */ V(9, 4, 1), /* 332 */
1915 /* 1 */ V(3, 9, 1),
1916
1917 /* 0001 1110 ... */
1918 /* 00 */ V(9, 3, 1), /* 334 */
1919 /* 01 */ V(9, 3, 1),
1920 /* 10 */ V(7, 7, 2),
1921 /* 11 */ V(0, 9, 2),
1922
1923 /* 0001 1111 ... */
1924 /* 0 */ V(5, 8, 1), /* 338 */
1925 /* 1 */ V(8, 5, 1),
1926
1927 /* 0010 0000 ... */
1928 /* 0 */ V(2, 9, 1), /* 340 */
1929 /* 1 */ V(6, 7, 1),
1930
1931 /* 0010 0001 ... */
1932 /* 0 */ V(7, 6, 1), /* 342 */
1933 /* 1 */ V(9, 2, 1),
1934
1935 /* 0010 0011 ... */
1936 /* 0 */ V(1, 9, 1), /* 344 */
1937 /* 1 */ V(9, 0, 1),
1938
1939 /* 0010 0100 ... */
1940 /* 0 */ V(4, 8, 1), /* 346 */
1941 /* 1 */ V(8, 4, 1),
1942
1943 /* 0010 0101 ... */
1944 /* 0 */ V(5, 7, 1), /* 348 */
1945 /* 1 */ V(7, 5, 1),
1946
1947 /* 0010 0110 ... */
1948 /* 0 */ V(3, 8, 1), /* 350 */
1949 /* 1 */ V(8, 3, 1),
1950
1951 /* 0010 0111 ... */
1952 /* 0 */ V(6, 6, 1), /* 352 */
1953 /* 1 */ V(4, 7, 1),
1954
1955 /* 0010 1100 ... */
1956 /* 0 */ V(7, 4, 1), /* 354 */
1957 /* 1 */ V(0, 8, 1),
1958
1959 /* 0010 1101 ... */
1960 /* 0 */ V(8, 0, 1), /* 356 */
1961 /* 1 */ V(5, 6, 1),
1962
1963 /* 0010 1110 ... */
1964 /* 0 */ V(6, 5, 1), /* 358 */
1965 /* 1 */ V(3, 7, 1),
1966
1967 /* 0010 1111 ... */
1968 /* 0 */ V(7, 3, 1), /* 360 */
1969 /* 1 */ V(4, 6, 1),
1970
1971 /* 0011 0110 ... */
1972 /* 0 */ V(0, 7, 1), /* 362 */
1973 /* 1 */ V(7, 0, 1),
1974
1975 /* 0011 1110 ... */
1976 /* 0 */ V(0, 6, 1), /* 364 */
1977 /* 1 */ V(6, 0, 1),
1978
1979 /* 0000 0000 0000 ... */
1980 /* 0 */ V(15, 15, 1), /* 366 */
1981 /* 1 */ V(14, 15, 1),
1982
1983 /* 0000 0000 0001 ... */
1984 /* 0 */ V(15, 14, 1), /* 368 */
1985 /* 1 */ V(13, 15, 1),
1986
1987 /* 0000 0000 0011 ... */
1988 /* 0 */ V(15, 13, 1), /* 370 */
1989 /* 1 */ V(12, 15, 1),
1990
1991 /* 0000 0000 0100 ... */
1992 /* 0 */ V(15, 12, 1), /* 372 */
1993 /* 1 */ V(13, 14, 1),
1994
1995 /* 0000 0000 0101 ... */
1996 /* 0 */ V(14, 13, 1), /* 374 */
1997 /* 1 */ V(11, 15, 1),
1998
1999 /* 0000 0000 0111 ... */
2000 /* 0 */ V(12, 14, 1), /* 376 */
2001 /* 1 */ V(14, 12, 1),
2002
2003 /* 0000 0001 1111 ... */
2004 /* 0 */ V(10, 14, 1), /* 378 */
2005 /* 1 */ V(0, 15, 1)
2006};
2007
2008static
2009union huffpair const hufftab16[] = {
2010 /* 0000 */ PTR(16, 4),
2011 /* 0001 */ PTR(32, 4),
2012 /* 0010 */ PTR(48, 4),
2013 /* 0011 */ PTR(64, 2),
2014 /* 0100 */ V(1, 1, 4),
2015 /* 0101 */ V(0, 1, 4),
2016 /* 0110 */ V(1, 0, 3),
2017 /* 0111 */ V(1, 0, 3),
2018 /* 1000 */ V(0, 0, 1),
2019 /* 1001 */ V(0, 0, 1),
2020 /* 1010 */ V(0, 0, 1),
2021 /* 1011 */ V(0, 0, 1),
2022 /* 1100 */ V(0, 0, 1),
2023 /* 1101 */ V(0, 0, 1),
2024 /* 1110 */ V(0, 0, 1),
2025 /* 1111 */ V(0, 0, 1),
2026
2027 /* 0000 ... */
2028 /* 0000 */ PTR(68, 3), /* 16 */
2029 /* 0001 */ PTR(76, 3),
2030 /* 0010 */ PTR(84, 2),
2031 /* 0011 */ V(15, 15, 4),
2032 /* 0100 */ PTR(88, 2),
2033 /* 0101 */ PTR(92, 1),
2034 /* 0110 */ PTR(94, 4),
2035 /* 0111 */ V(15, 2, 4),
2036 /* 1000 */ PTR(110, 1),
2037 /* 1001 */ V(1, 15, 4),
2038 /* 1010 */ V(15, 1, 4),
2039 /* 1011 */ PTR(112, 4),
2040 /* 1100 */ PTR(128, 4),
2041 /* 1101 */ PTR(144, 4),
2042 /* 1110 */ PTR(160, 4),
2043 /* 1111 */ PTR(176, 4),
2044
2045 /* 0001 ... */
2046 /* 0000 */ PTR(192, 4), /* 32 */
2047 /* 0001 */ PTR(208, 3),
2048 /* 0010 */ PTR(216, 3),
2049 /* 0011 */ PTR(224, 3),
2050 /* 0100 */ PTR(232, 3),
2051 /* 0101 */ PTR(240, 3),
2052 /* 0110 */ PTR(248, 3),
2053 /* 0111 */ PTR(256, 3),
2054 /* 1000 */ PTR(264, 2),
2055 /* 1001 */ PTR(268, 2),
2056 /* 1010 */ PTR(272, 1),
2057 /* 1011 */ PTR(274, 2),
2058 /* 1100 */ PTR(278, 2),
2059 /* 1101 */ PTR(282, 1),
2060 /* 1110 */ V(5, 1, 4),
2061 /* 1111 */ PTR(284, 1),
2062
2063 /* 0010 ... */
2064 /* 0000 */ PTR(286, 1), /* 48 */
2065 /* 0001 */ PTR(288, 1),
2066 /* 0010 */ PTR(290, 1),
2067 /* 0011 */ V(1, 4, 4),
2068 /* 0100 */ V(4, 1, 4),
2069 /* 0101 */ PTR(292, 1),
2070 /* 0110 */ V(2, 3, 4),
2071 /* 0111 */ V(3, 2, 4),
2072 /* 1000 */ V(1, 3, 3),
2073 /* 1001 */ V(1, 3, 3),
2074 /* 1010 */ V(3, 1, 3),
2075 /* 1011 */ V(3, 1, 3),
2076 /* 1100 */ V(0, 3, 4),
2077 /* 1101 */ V(3, 0, 4),
2078 /* 1110 */ V(2, 2, 3),
2079 /* 1111 */ V(2, 2, 3),
2080
2081 /* 0011 ... */
2082 /* 00 */ V(1, 2, 2), /* 64 */
2083 /* 01 */ V(2, 1, 2),
2084 /* 10 */ V(0, 2, 2),
2085 /* 11 */ V(2, 0, 2),
2086
2087 /* 0000 0000 ... */
2088 /* 000 */ V(14, 15, 3), /* 68 */
2089 /* 001 */ V(15, 14, 3),
2090 /* 010 */ V(13, 15, 3),
2091 /* 011 */ V(15, 13, 3),
2092 /* 100 */ V(12, 15, 3),
2093 /* 101 */ V(15, 12, 3),
2094 /* 110 */ V(11, 15, 3),
2095 /* 111 */ V(15, 11, 3),
2096
2097 /* 0000 0001 ... */
2098 /* 000 */ V(10, 15, 2), /* 76 */
2099 /* 001 */ V(10, 15, 2),
2100 /* 010 */ V(15, 10, 3),
2101 /* 011 */ V(9, 15, 3),
2102 /* 100 */ V(15, 9, 3),
2103 /* 101 */ V(15, 8, 3),
2104 /* 110 */ V(8, 15, 2),
2105 /* 111 */ V(8, 15, 2),
2106
2107 /* 0000 0010 ... */
2108 /* 00 */ V(7, 15, 2), /* 84 */
2109 /* 01 */ V(15, 7, 2),
2110 /* 10 */ V(6, 15, 2),
2111 /* 11 */ V(15, 6, 2),
2112
2113 /* 0000 0100 ... */
2114 /* 00 */ V(5, 15, 2), /* 88 */
2115 /* 01 */ V(15, 5, 2),
2116 /* 10 */ V(4, 15, 1),
2117 /* 11 */ V(4, 15, 1),
2118
2119 /* 0000 0101 ... */
2120 /* 0 */ V(15, 4, 1), /* 92 */
2121 /* 1 */ V(15, 3, 1),
2122
2123 /* 0000 0110 ... */
2124 /* 0000 */ V(15, 0, 1), /* 94 */
2125 /* 0001 */ V(15, 0, 1),
2126 /* 0010 */ V(15, 0, 1),
2127 /* 0011 */ V(15, 0, 1),
2128 /* 0100 */ V(15, 0, 1),
2129 /* 0101 */ V(15, 0, 1),
2130 /* 0110 */ V(15, 0, 1),
2131 /* 0111 */ V(15, 0, 1),
2132 /* 1000 */ V(3, 15, 2),
2133 /* 1001 */ V(3, 15, 2),
2134 /* 1010 */ V(3, 15, 2),
2135 /* 1011 */ V(3, 15, 2),
2136 /* 1100 */ PTR(294, 4),
2137 /* 1101 */ PTR(310, 3),
2138 /* 1110 */ PTR(318, 3),
2139 /* 1111 */ PTR(326, 3),
2140
2141 /* 0000 1000 ... */
2142 /* 0 */ V(2, 15, 1), /* 110 */
2143 /* 1 */ V(0, 15, 1),
2144
2145 /* 0000 1011 ... */
2146 /* 0000 */ PTR(334, 2), /* 112 */
2147 /* 0001 */ PTR(338, 2),
2148 /* 0010 */ PTR(342, 2),
2149 /* 0011 */ PTR(346, 1),
2150 /* 0100 */ PTR(348, 2),
2151 /* 0101 */ PTR(352, 2),
2152 /* 0110 */ PTR(356, 1),
2153 /* 0111 */ PTR(358, 2),
2154 /* 1000 */ PTR(362, 2),
2155 /* 1001 */ PTR(366, 2),
2156 /* 1010 */ PTR(370, 2),
2157 /* 1011 */ V(14, 3, 4),
2158 /* 1100 */ PTR(374, 1),
2159 /* 1101 */ PTR(376, 1),
2160 /* 1110 */ PTR(378, 1),
2161 /* 1111 */ PTR(380, 1),
2162
2163 /* 0000 1100 ... */
2164 /* 0000 */ PTR(382, 1), /* 128 */
2165 /* 0001 */ PTR(384, 1),
2166 /* 0010 */ PTR(386, 1),
2167 /* 0011 */ V(0, 13, 4),
2168 /* 0100 */ PTR(388, 1),
2169 /* 0101 */ PTR(390, 1),
2170 /* 0110 */ PTR(392, 1),
2171 /* 0111 */ V(3, 12, 4),
2172 /* 1000 */ PTR(394, 1),
2173 /* 1001 */ V(1, 12, 4),
2174 /* 1010 */ V(12, 0, 4),
2175 /* 1011 */ PTR(396, 1),
2176 /* 1100 */ V(14, 2, 3),
2177 /* 1101 */ V(14, 2, 3),
2178 /* 1110 */ V(2, 14, 4),
2179 /* 1111 */ V(1, 14, 4),
2180
2181 /* 0000 1101 ... */
2182 /* 0000 */ V(13, 3, 4), /* 144 */
2183 /* 0001 */ V(2, 13, 4),
2184 /* 0010 */ V(13, 2, 4),
2185 /* 0011 */ V(13, 1, 4),
2186 /* 0100 */ V(3, 11, 4),
2187 /* 0101 */ PTR(398, 1),
2188 /* 0110 */ V(1, 13, 3),
2189 /* 0111 */ V(1, 13, 3),
2190 /* 1000 */ V(12, 4, 4),
2191 /* 1001 */ V(6, 11, 4),
2192 /* 1010 */ V(12, 3, 4),
2193 /* 1011 */ V(10, 7, 4),
2194 /* 1100 */ V(2, 12, 3),
2195 /* 1101 */ V(2, 12, 3),
2196 /* 1110 */ V(12, 2, 4),
2197 /* 1111 */ V(11, 5, 4),
2198
2199 /* 0000 1110 ... */
2200 /* 0000 */ V(12, 1, 4), /* 160 */
2201 /* 0001 */ V(0, 12, 4),
2202 /* 0010 */ V(4, 11, 4),
2203 /* 0011 */ V(11, 4, 4),
2204 /* 0100 */ V(6, 10, 4),
2205 /* 0101 */ V(10, 6, 4),
2206 /* 0110 */ V(11, 3, 3),
2207 /* 0111 */ V(11, 3, 3),
2208 /* 1000 */ V(5, 10, 4),
2209 /* 1001 */ V(10, 5, 4),
2210 /* 1010 */ V(2, 11, 3),
2211 /* 1011 */ V(2, 11, 3),
2212 /* 1100 */ V(11, 2, 3),
2213 /* 1101 */ V(11, 2, 3),
2214 /* 1110 */ V(1, 11, 3),
2215 /* 1111 */ V(1, 11, 3),
2216
2217 /* 0000 1111 ... */
2218 /* 0000 */ V(11, 1, 3), /* 176 */
2219 /* 0001 */ V(11, 1, 3),
2220 /* 0010 */ V(0, 11, 4),
2221 /* 0011 */ V(11, 0, 4),
2222 /* 0100 */ V(6, 9, 4),
2223 /* 0101 */ V(9, 6, 4),
2224 /* 0110 */ V(4, 10, 4),
2225 /* 0111 */ V(10, 4, 4),
2226 /* 1000 */ V(7, 8, 4),
2227 /* 1001 */ V(8, 7, 4),
2228 /* 1010 */ V(10, 3, 3),
2229 /* 1011 */ V(10, 3, 3),
2230 /* 1100 */ V(3, 10, 4),
2231 /* 1101 */ V(5, 9, 4),
2232 /* 1110 */ V(2, 10, 3),
2233 /* 1111 */ V(2, 10, 3),
2234
2235 /* 0001 0000 ... */
2236 /* 0000 */ V(9, 5, 4), /* 192 */
2237 /* 0001 */ V(6, 8, 4),
2238 /* 0010 */ V(10, 1, 3),
2239 /* 0011 */ V(10, 1, 3),
2240 /* 0100 */ V(8, 6, 4),
2241 /* 0101 */ V(7, 7, 4),
2242 /* 0110 */ V(9, 4, 3),
2243 /* 0111 */ V(9, 4, 3),
2244 /* 1000 */ V(4, 9, 4),
2245 /* 1001 */ V(5, 7, 4),
2246 /* 1010 */ V(6, 7, 3),
2247 /* 1011 */ V(6, 7, 3),
2248 /* 1100 */ V(10, 2, 2),
2249 /* 1101 */ V(10, 2, 2),
2250 /* 1110 */ V(10, 2, 2),
2251 /* 1111 */ V(10, 2, 2),
2252
2253 /* 0001 0001 ... */
2254 /* 000 */ V(1, 10, 2), /* 208 */
2255 /* 001 */ V(1, 10, 2),
2256 /* 010 */ V(0, 10, 3),
2257 /* 011 */ V(10, 0, 3),
2258 /* 100 */ V(3, 9, 3),
2259 /* 101 */ V(9, 3, 3),
2260 /* 110 */ V(5, 8, 3),
2261 /* 111 */ V(8, 5, 3),
2262
2263 /* 0001 0010 ... */
2264 /* 000 */ V(2, 9, 2), /* 216 */
2265 /* 001 */ V(2, 9, 2),
2266 /* 010 */ V(9, 2, 2),
2267 /* 011 */ V(9, 2, 2),
2268 /* 100 */ V(7, 6, 3),
2269 /* 101 */ V(0, 9, 3),
2270 /* 110 */ V(1, 9, 2),
2271 /* 111 */ V(1, 9, 2),
2272
2273 /* 0001 0011 ... */
2274 /* 000 */ V(9, 1, 2), /* 224 */
2275 /* 001 */ V(9, 1, 2),
2276 /* 010 */ V(9, 0, 3),
2277 /* 011 */ V(4, 8, 3),
2278 /* 100 */ V(8, 4, 3),
2279 /* 101 */ V(7, 5, 3),
2280 /* 110 */ V(3, 8, 3),
2281 /* 111 */ V(8, 3, 3),
2282
2283 /* 0001 0100 ... */
2284 /* 000 */ V(6, 6, 3), /* 232 */
2285 /* 001 */ V(2, 8, 3),
2286 /* 010 */ V(8, 2, 2),
2287 /* 011 */ V(8, 2, 2),
2288 /* 100 */ V(4, 7, 3),
2289 /* 101 */ V(7, 4, 3),
2290 /* 110 */ V(1, 8, 2),
2291 /* 111 */ V(1, 8, 2),
2292
2293 /* 0001 0101 ... */
2294 /* 000 */ V(8, 1, 2), /* 240 */
2295 /* 001 */ V(8, 1, 2),
2296 /* 010 */ V(8, 0, 2),
2297 /* 011 */ V(8, 0, 2),
2298 /* 100 */ V(0, 8, 3),
2299 /* 101 */ V(5, 6, 3),
2300 /* 110 */ V(3, 7, 2),
2301 /* 111 */ V(3, 7, 2),
2302
2303 /* 0001 0110 ... */
2304 /* 000 */ V(7, 3, 2), /* 248 */
2305 /* 001 */ V(7, 3, 2),
2306 /* 010 */ V(6, 5, 3),
2307 /* 011 */ V(4, 6, 3),
2308 /* 100 */ V(2, 7, 2),
2309 /* 101 */ V(2, 7, 2),
2310 /* 110 */ V(7, 2, 2),
2311 /* 111 */ V(7, 2, 2),
2312
2313 /* 0001 0111 ... */
2314 /* 000 */ V(6, 4, 3), /* 256 */
2315 /* 001 */ V(5, 5, 3),
2316 /* 010 */ V(0, 7, 2),
2317 /* 011 */ V(0, 7, 2),
2318 /* 100 */ V(1, 7, 1),
2319 /* 101 */ V(1, 7, 1),
2320 /* 110 */ V(1, 7, 1),
2321 /* 111 */ V(1, 7, 1),
2322
2323 /* 0001 1000 ... */
2324 /* 00 */ V(7, 1, 1), /* 264 */
2325 /* 01 */ V(7, 1, 1),
2326 /* 10 */ V(7, 0, 2),
2327 /* 11 */ V(3, 6, 2),
2328
2329 /* 0001 1001 ... */
2330 /* 00 */ V(6, 3, 2), /* 268 */
2331 /* 01 */ V(4, 5, 2),
2332 /* 10 */ V(5, 4, 2),
2333 /* 11 */ V(2, 6, 2),
2334
2335 /* 0001 1010 ... */
2336 /* 0 */ V(6, 2, 1), /* 272 */
2337 /* 1 */ V(1, 6, 1),
2338
2339 /* 0001 1011 ... */
2340 /* 00 */ V(6, 1, 1), /* 274 */
2341 /* 01 */ V(6, 1, 1),
2342 /* 10 */ V(0, 6, 2),
2343 /* 11 */ V(6, 0, 2),
2344
2345 /* 0001 1100 ... */
2346 /* 00 */ V(5, 3, 1), /* 278 */
2347 /* 01 */ V(5, 3, 1),
2348 /* 10 */ V(3, 5, 2),
2349 /* 11 */ V(4, 4, 2),
2350
2351 /* 0001 1101 ... */
2352 /* 0 */ V(2, 5, 1), /* 282 */
2353 /* 1 */ V(5, 2, 1),
2354
2355 /* 0001 1111 ... */
2356 /* 0 */ V(1, 5, 1), /* 284 */
2357 /* 1 */ V(0, 5, 1),
2358
2359 /* 0010 0000 ... */
2360 /* 0 */ V(3, 4, 1), /* 286 */
2361 /* 1 */ V(4, 3, 1),
2362
2363 /* 0010 0001 ... */
2364 /* 0 */ V(5, 0, 1), /* 288 */
2365 /* 1 */ V(2, 4, 1),
2366
2367 /* 0010 0010 ... */
2368 /* 0 */ V(4, 2, 1), /* 290 */
2369 /* 1 */ V(3, 3, 1),
2370
2371 /* 0010 0101 ... */
2372 /* 0 */ V(0, 4, 1), /* 292 */
2373 /* 1 */ V(4, 0, 1),
2374
2375 /* 0000 0110 1100 ... */
2376 /* 0000 */ V(12, 14, 4), /* 294 */
2377 /* 0001 */ PTR(400, 1),
2378 /* 0010 */ V(13, 14, 3),
2379 /* 0011 */ V(13, 14, 3),
2380 /* 0100 */ V(14, 9, 3),
2381 /* 0101 */ V(14, 9, 3),
2382 /* 0110 */ V(14, 10, 4),
2383 /* 0111 */ V(13, 9, 4),
2384 /* 1000 */ V(14, 14, 2),
2385 /* 1001 */ V(14, 14, 2),
2386 /* 1010 */ V(14, 14, 2),
2387 /* 1011 */ V(14, 14, 2),
2388 /* 1100 */ V(14, 13, 3),
2389 /* 1101 */ V(14, 13, 3),
2390 /* 1110 */ V(14, 11, 3),
2391 /* 1111 */ V(14, 11, 3),
2392
2393 /* 0000 0110 1101 ... */
2394 /* 000 */ V(11, 14, 2), /* 310 */
2395 /* 001 */ V(11, 14, 2),
2396 /* 010 */ V(12, 13, 2),
2397 /* 011 */ V(12, 13, 2),
2398 /* 100 */ V(13, 12, 3),
2399 /* 101 */ V(13, 11, 3),
2400 /* 110 */ V(10, 14, 2),
2401 /* 111 */ V(10, 14, 2),
2402
2403 /* 0000 0110 1110 ... */
2404 /* 000 */ V(12, 12, 2), /* 318 */
2405 /* 001 */ V(12, 12, 2),
2406 /* 010 */ V(10, 13, 3),
2407 /* 011 */ V(13, 10, 3),
2408 /* 100 */ V(7, 14, 3),
2409 /* 101 */ V(10, 12, 3),
2410 /* 110 */ V(12, 10, 2),
2411 /* 111 */ V(12, 10, 2),
2412
2413 /* 0000 0110 1111 ... */
2414 /* 000 */ V(12, 9, 3), /* 326 */
2415 /* 001 */ V(7, 13, 3),
2416 /* 010 */ V(5, 14, 2),
2417 /* 011 */ V(5, 14, 2),
2418 /* 100 */ V(11, 13, 1),
2419 /* 101 */ V(11, 13, 1),
2420 /* 110 */ V(11, 13, 1),
2421 /* 111 */ V(11, 13, 1),
2422
2423 /* 0000 1011 0000 ... */
2424 /* 00 */ V(9, 14, 1), /* 334 */
2425 /* 01 */ V(9, 14, 1),
2426 /* 10 */ V(11, 12, 2),
2427 /* 11 */ V(12, 11, 2),
2428
2429 /* 0000 1011 0001 ... */
2430 /* 00 */ V(8, 14, 2), /* 338 */
2431 /* 01 */ V(14, 8, 2),
2432 /* 10 */ V(9, 13, 2),
2433 /* 11 */ V(14, 7, 2),
2434
2435 /* 0000 1011 0010 ... */
2436 /* 00 */ V(11, 11, 2), /* 342 */
2437 /* 01 */ V(8, 13, 2),
2438 /* 10 */ V(13, 8, 2),
2439 /* 11 */ V(6, 14, 2),
2440
2441 /* 0000 1011 0011 ... */
2442 /* 0 */ V(14, 6, 1), /* 346 */
2443 /* 1 */ V(9, 12, 1),
2444
2445 /* 0000 1011 0100 ... */
2446 /* 00 */ V(10, 11, 2), /* 348 */
2447 /* 01 */ V(11, 10, 2),
2448 /* 10 */ V(14, 5, 2),
2449 /* 11 */ V(13, 7, 2),
2450
2451 /* 0000 1011 0101 ... */
2452 /* 00 */ V(4, 14, 1), /* 352 */
2453 /* 01 */ V(4, 14, 1),
2454 /* 10 */ V(14, 4, 2),
2455 /* 11 */ V(8, 12, 2),
2456
2457 /* 0000 1011 0110 ... */
2458 /* 0 */ V(12, 8, 1), /* 356 */
2459 /* 1 */ V(3, 14, 1),
2460
2461 /* 0000 1011 0111 ... */
2462 /* 00 */ V(6, 13, 1), /* 358 */
2463 /* 01 */ V(6, 13, 1),
2464 /* 10 */ V(13, 6, 2),
2465 /* 11 */ V(9, 11, 2),
2466
2467 /* 0000 1011 1000 ... */
2468 /* 00 */ V(11, 9, 2), /* 362 */
2469 /* 01 */ V(10, 10, 2),
2470 /* 10 */ V(14, 1, 1),
2471 /* 11 */ V(14, 1, 1),
2472
2473 /* 0000 1011 1001 ... */
2474 /* 00 */ V(13, 4, 1), /* 366 */
2475 /* 01 */ V(13, 4, 1),
2476 /* 10 */ V(11, 8, 2),
2477 /* 11 */ V(10, 9, 2),
2478
2479 /* 0000 1011 1010 ... */
2480 /* 00 */ V(7, 11, 1), /* 370 */
2481 /* 01 */ V(7, 11, 1),
2482 /* 10 */ V(11, 7, 2),
2483 /* 11 */ V(13, 0, 2),
2484
2485 /* 0000 1011 1100 ... */
2486 /* 0 */ V(0, 14, 1), /* 374 */
2487 /* 1 */ V(14, 0, 1),
2488
2489 /* 0000 1011 1101 ... */
2490 /* 0 */ V(5, 13, 1), /* 376 */
2491 /* 1 */ V(13, 5, 1),
2492
2493 /* 0000 1011 1110 ... */
2494 /* 0 */ V(7, 12, 1), /* 378 */
2495 /* 1 */ V(12, 7, 1),
2496
2497 /* 0000 1011 1111 ... */
2498 /* 0 */ V(4, 13, 1), /* 380 */
2499 /* 1 */ V(8, 11, 1),
2500
2501 /* 0000 1100 0000 ... */
2502 /* 0 */ V(9, 10, 1), /* 382 */
2503 /* 1 */ V(6, 12, 1),
2504
2505 /* 0000 1100 0001 ... */
2506 /* 0 */ V(12, 6, 1), /* 384 */
2507 /* 1 */ V(3, 13, 1),
2508
2509 /* 0000 1100 0010 ... */
2510 /* 0 */ V(5, 12, 1), /* 386 */
2511 /* 1 */ V(12, 5, 1),
2512
2513 /* 0000 1100 0100 ... */
2514 /* 0 */ V(8, 10, 1), /* 388 */
2515 /* 1 */ V(10, 8, 1),
2516
2517 /* 0000 1100 0101 ... */
2518 /* 0 */ V(9, 9, 1), /* 390 */
2519 /* 1 */ V(4, 12, 1),
2520
2521 /* 0000 1100 0110 ... */
2522 /* 0 */ V(11, 6, 1), /* 392 */
2523 /* 1 */ V(7, 10, 1),
2524
2525 /* 0000 1100 1000 ... */
2526 /* 0 */ V(5, 11, 1), /* 394 */
2527 /* 1 */ V(8, 9, 1),
2528
2529 /* 0000 1100 1011 ... */
2530 /* 0 */ V(9, 8, 1), /* 396 */
2531 /* 1 */ V(7, 9, 1),
2532
2533 /* 0000 1101 0101 ... */
2534 /* 0 */ V(9, 7, 1), /* 398 */
2535 /* 1 */ V(8, 8, 1),
2536
2537 /* 0000 0110 1100 0001 ... */
2538 /* 0 */ V(14, 12, 1), /* 400 */
2539 /* 1 */ V(13, 13, 1)
2540};
2541
2542static
2543union huffpair const hufftab24[] = {
2544 /* 0000 */ PTR(16, 4),
2545 /* 0001 */ PTR(32, 4),
2546 /* 0010 */ PTR(48, 4),
2547 /* 0011 */ V(15, 15, 4),
2548 /* 0100 */ PTR(64, 4),
2549 /* 0101 */ PTR(80, 4),
2550 /* 0110 */ PTR(96, 4),
2551 /* 0111 */ PTR(112, 4),
2552 /* 1000 */ PTR(128, 4),
2553 /* 1001 */ PTR(144, 4),
2554 /* 1010 */ PTR(160, 3),
2555 /* 1011 */ PTR(168, 2),
2556 /* 1100 */ V(1, 1, 4),
2557 /* 1101 */ V(0, 1, 4),
2558 /* 1110 */ V(1, 0, 4),
2559 /* 1111 */ V(0, 0, 4),
2560
2561 /* 0000 ... */
2562 /* 0000 */ V(14, 15, 4), /* 16 */
2563 /* 0001 */ V(15, 14, 4),
2564 /* 0010 */ V(13, 15, 4),
2565 /* 0011 */ V(15, 13, 4),
2566 /* 0100 */ V(12, 15, 4),
2567 /* 0101 */ V(15, 12, 4),
2568 /* 0110 */ V(11, 15, 4),
2569 /* 0111 */ V(15, 11, 4),
2570 /* 1000 */ V(15, 10, 3),
2571 /* 1001 */ V(15, 10, 3),
2572 /* 1010 */ V(10, 15, 4),
2573 /* 1011 */ V(9, 15, 4),
2574 /* 1100 */ V(15, 9, 3),
2575 /* 1101 */ V(15, 9, 3),
2576 /* 1110 */ V(15, 8, 3),
2577 /* 1111 */ V(15, 8, 3),
2578
2579 /* 0001 ... */
2580 /* 0000 */ V(8, 15, 4), /* 32 */
2581 /* 0001 */ V(7, 15, 4),
2582 /* 0010 */ V(15, 7, 3),
2583 /* 0011 */ V(15, 7, 3),
2584 /* 0100 */ V(6, 15, 3),
2585 /* 0101 */ V(6, 15, 3),
2586 /* 0110 */ V(15, 6, 3),
2587 /* 0111 */ V(15, 6, 3),
2588 /* 1000 */ V(5, 15, 3),
2589 /* 1001 */ V(5, 15, 3),
2590 /* 1010 */ V(15, 5, 3),
2591 /* 1011 */ V(15, 5, 3),
2592 /* 1100 */ V(4, 15, 3),
2593 /* 1101 */ V(4, 15, 3),
2594 /* 1110 */ V(15, 4, 3),
2595 /* 1111 */ V(15, 4, 3),
2596
2597 /* 0010 ... */
2598 /* 0000 */ V(3, 15, 3), /* 48 */
2599 /* 0001 */ V(3, 15, 3),
2600 /* 0010 */ V(15, 3, 3),
2601 /* 0011 */ V(15, 3, 3),
2602 /* 0100 */ V(2, 15, 3),
2603 /* 0101 */ V(2, 15, 3),
2604 /* 0110 */ V(15, 2, 3),
2605 /* 0111 */ V(15, 2, 3),
2606 /* 1000 */ V(15, 1, 3),
2607 /* 1001 */ V(15, 1, 3),
2608 /* 1010 */ V(1, 15, 4),
2609 /* 1011 */ V(15, 0, 4),
2610 /* 1100 */ PTR(172, 3),
2611 /* 1101 */ PTR(180, 3),
2612 /* 1110 */ PTR(188, 3),
2613 /* 1111 */ PTR(196, 3),
2614
2615 /* 0100 ... */
2616 /* 0000 */ PTR(204, 4), /* 64 */
2617 /* 0001 */ PTR(220, 3),
2618 /* 0010 */ PTR(228, 3),
2619 /* 0011 */ PTR(236, 3),
2620 /* 0100 */ PTR(244, 2),
2621 /* 0101 */ PTR(248, 2),
2622 /* 0110 */ PTR(252, 2),
2623 /* 0111 */ PTR(256, 2),
2624 /* 1000 */ PTR(260, 2),
2625 /* 1001 */ PTR(264, 2),
2626 /* 1010 */ PTR(268, 2),
2627 /* 1011 */ PTR(272, 2),
2628 /* 1100 */ PTR(276, 2),
2629 /* 1101 */ PTR(280, 3),
2630 /* 1110 */ PTR(288, 2),
2631 /* 1111 */ PTR(292, 2),
2632
2633 /* 0101 ... */
2634 /* 0000 */ PTR(296, 2), /* 80 */
2635 /* 0001 */ PTR(300, 3),
2636 /* 0010 */ PTR(308, 2),
2637 /* 0011 */ PTR(312, 3),
2638 /* 0100 */ PTR(320, 1),
2639 /* 0101 */ PTR(322, 2),
2640 /* 0110 */ PTR(326, 2),
2641 /* 0111 */ PTR(330, 1),
2642 /* 1000 */ PTR(332, 2),
2643 /* 1001 */ PTR(336, 1),
2644 /* 1010 */ PTR(338, 1),
2645 /* 1011 */ PTR(340, 1),
2646 /* 1100 */ PTR(342, 1),
2647 /* 1101 */ PTR(344, 1),
2648 /* 1110 */ PTR(346, 1),
2649 /* 1111 */ PTR(348, 1),
2650
2651 /* 0110 ... */
2652 /* 0000 */ PTR(350, 1), /* 96 */
2653 /* 0001 */ PTR(352, 1),
2654 /* 0010 */ PTR(354, 1),
2655 /* 0011 */ PTR(356, 1),
2656 /* 0100 */ PTR(358, 1),
2657 /* 0101 */ PTR(360, 1),
2658 /* 0110 */ PTR(362, 1),
2659 /* 0111 */ PTR(364, 1),
2660 /* 1000 */ PTR(366, 1),
2661 /* 1001 */ PTR(368, 1),
2662 /* 1010 */ PTR(370, 2),
2663 /* 1011 */ PTR(374, 1),
2664 /* 1100 */ PTR(376, 2),
2665 /* 1101 */ V(7, 3, 4),
2666 /* 1110 */ PTR(380, 1),
2667 /* 1111 */ V(7, 2, 4),
2668
2669 /* 0111 ... */
2670 /* 0000 */ V(4, 6, 4), /* 112 */
2671 /* 0001 */ V(6, 4, 4),
2672 /* 0010 */ V(5, 5, 4),
2673 /* 0011 */ V(7, 1, 4),
2674 /* 0100 */ V(3, 6, 4),
2675 /* 0101 */ V(6, 3, 4),
2676 /* 0110 */ V(4, 5, 4),
2677 /* 0111 */ V(5, 4, 4),
2678 /* 1000 */ V(2, 6, 4),
2679 /* 1001 */ V(6, 2, 4),
2680 /* 1010 */ V(1, 6, 4),
2681 /* 1011 */ V(6, 1, 4),
2682 /* 1100 */ PTR(382, 1),
2683 /* 1101 */ V(3, 5, 4),
2684 /* 1110 */ V(5, 3, 4),
2685 /* 1111 */ V(4, 4, 4),
2686
2687 /* 1000 ... */
2688 /* 0000 */ V(2, 5, 4), /* 128 */
2689 /* 0001 */ V(5, 2, 4),
2690 /* 0010 */ V(1, 5, 4),
2691 /* 0011 */ PTR(384, 1),
2692 /* 0100 */ V(5, 1, 3),
2693 /* 0101 */ V(5, 1, 3),
2694 /* 0110 */ V(3, 4, 4),
2695 /* 0111 */ V(4, 3, 4),
2696 /* 1000 */ V(2, 4, 3),
2697 /* 1001 */ V(2, 4, 3),
2698 /* 1010 */ V(4, 2, 3),
2699 /* 1011 */ V(4, 2, 3),
2700 /* 1100 */ V(3, 3, 3),
2701 /* 1101 */ V(3, 3, 3),
2702 /* 1110 */ V(1, 4, 3),
2703 /* 1111 */ V(1, 4, 3),
2704
2705 /* 1001 ... */
2706 /* 0000 */ V(4, 1, 3), /* 144 */
2707 /* 0001 */ V(4, 1, 3),
2708 /* 0010 */ V(0, 4, 4),
2709 /* 0011 */ V(4, 0, 4),
2710 /* 0100 */ V(2, 3, 3),
2711 /* 0101 */ V(2, 3, 3),
2712 /* 0110 */ V(3, 2, 3),
2713 /* 0111 */ V(3, 2, 3),
2714 /* 1000 */ V(1, 3, 2),
2715 /* 1001 */ V(1, 3, 2),
2716 /* 1010 */ V(1, 3, 2),
2717 /* 1011 */ V(1, 3, 2),
2718 /* 1100 */ V(3, 1, 2),
2719 /* 1101 */ V(3, 1, 2),
2720 /* 1110 */ V(3, 1, 2),
2721 /* 1111 */ V(3, 1, 2),
2722
2723 /* 1010 ... */
2724 /* 000 */ V(0, 3, 3), /* 160 */
2725 /* 001 */ V(3, 0, 3),
2726 /* 010 */ V(2, 2, 2),
2727 /* 011 */ V(2, 2, 2),
2728 /* 100 */ V(1, 2, 1),
2729 /* 101 */ V(1, 2, 1),
2730 /* 110 */ V(1, 2, 1),
2731 /* 111 */ V(1, 2, 1),
2732
2733 /* 1011 ... */
2734 /* 00 */ V(2, 1, 1), /* 168 */
2735 /* 01 */ V(2, 1, 1),
2736 /* 10 */ V(0, 2, 2),
2737 /* 11 */ V(2, 0, 2),
2738
2739 /* 0010 1100 ... */
2740 /* 000 */ V(0, 15, 1), /* 172 */
2741 /* 001 */ V(0, 15, 1),
2742 /* 010 */ V(0, 15, 1),
2743 /* 011 */ V(0, 15, 1),
2744 /* 100 */ V(14, 14, 3),
2745 /* 101 */ V(13, 14, 3),
2746 /* 110 */ V(14, 13, 3),
2747 /* 111 */ V(12, 14, 3),
2748
2749 /* 0010 1101 ... */
2750 /* 000 */ V(14, 12, 3), /* 180 */
2751 /* 001 */ V(13, 13, 3),
2752 /* 010 */ V(11, 14, 3),
2753 /* 011 */ V(14, 11, 3),
2754 /* 100 */ V(12, 13, 3),
2755 /* 101 */ V(13, 12, 3),
2756 /* 110 */ V(10, 14, 3),
2757 /* 111 */ V(14, 10, 3),
2758
2759 /* 0010 1110 ... */
2760 /* 000 */ V(11, 13, 3), /* 188 */
2761 /* 001 */ V(13, 11, 3),
2762 /* 010 */ V(12, 12, 3),
2763 /* 011 */ V(9, 14, 3),
2764 /* 100 */ V(14, 9, 3),
2765 /* 101 */ V(10, 13, 3),
2766 /* 110 */ V(13, 10, 3),
2767 /* 111 */ V(11, 12, 3),
2768
2769 /* 0010 1111 ... */
2770 /* 000 */ V(12, 11, 3), /* 196 */
2771 /* 001 */ V(8, 14, 3),
2772 /* 010 */ V(14, 8, 3),
2773 /* 011 */ V(9, 13, 3),
2774 /* 100 */ V(13, 9, 3),
2775 /* 101 */ V(7, 14, 3),
2776 /* 110 */ V(14, 7, 3),
2777 /* 111 */ V(10, 12, 3),
2778
2779 /* 0100 0000 ... */
2780 /* 0000 */ V(12, 10, 3), /* 204 */
2781 /* 0001 */ V(12, 10, 3),
2782 /* 0010 */ V(11, 11, 3),
2783 /* 0011 */ V(11, 11, 3),
2784 /* 0100 */ V(8, 13, 3),
2785 /* 0101 */ V(8, 13, 3),
2786 /* 0110 */ V(13, 8, 3),
2787 /* 0111 */ V(13, 8, 3),
2788 /* 1000 */ V(0, 14, 4),
2789 /* 1001 */ V(14, 0, 4),
2790 /* 1010 */ V(0, 13, 3),
2791 /* 1011 */ V(0, 13, 3),
2792 /* 1100 */ V(14, 6, 2),
2793 /* 1101 */ V(14, 6, 2),
2794 /* 1110 */ V(14, 6, 2),
2795 /* 1111 */ V(14, 6, 2),
2796
2797 /* 0100 0001 ... */
2798 /* 000 */ V(6, 14, 3), /* 220 */
2799 /* 001 */ V(9, 12, 3),
2800 /* 010 */ V(12, 9, 2),
2801 /* 011 */ V(12, 9, 2),
2802 /* 100 */ V(5, 14, 2),
2803 /* 101 */ V(5, 14, 2),
2804 /* 110 */ V(11, 10, 2),
2805 /* 111 */ V(11, 10, 2),
2806
2807 /* 0100 0010 ... */
2808 /* 000 */ V(14, 5, 2), /* 228 */
2809 /* 001 */ V(14, 5, 2),
2810 /* 010 */ V(10, 11, 3),
2811 /* 011 */ V(7, 13, 3),
2812 /* 100 */ V(13, 7, 2),
2813 /* 101 */ V(13, 7, 2),
2814 /* 110 */ V(14, 4, 2),
2815 /* 111 */ V(14, 4, 2),
2816
2817 /* 0100 0011 ... */
2818 /* 000 */ V(8, 12, 2), /* 236 */
2819 /* 001 */ V(8, 12, 2),
2820 /* 010 */ V(12, 8, 2),
2821 /* 011 */ V(12, 8, 2),
2822 /* 100 */ V(4, 14, 3),
2823 /* 101 */ V(2, 14, 3),
2824 /* 110 */ V(3, 14, 2),
2825 /* 111 */ V(3, 14, 2),
2826
2827 /* 0100 0100 ... */
2828 /* 00 */ V(6, 13, 2), /* 244 */
2829 /* 01 */ V(13, 6, 2),
2830 /* 10 */ V(14, 3, 2),
2831 /* 11 */ V(9, 11, 2),
2832
2833 /* 0100 0101 ... */
2834 /* 00 */ V(11, 9, 2), /* 248 */
2835 /* 01 */ V(10, 10, 2),
2836 /* 10 */ V(14, 2, 2),
2837 /* 11 */ V(1, 14, 2),
2838
2839 /* 0100 0110 ... */
2840 /* 00 */ V(14, 1, 2), /* 252 */
2841 /* 01 */ V(5, 13, 2),
2842 /* 10 */ V(13, 5, 2),
2843 /* 11 */ V(7, 12, 2),
2844
2845 /* 0100 0111 ... */
2846 /* 00 */ V(12, 7, 2), /* 256 */
2847 /* 01 */ V(4, 13, 2),
2848 /* 10 */ V(8, 11, 2),
2849 /* 11 */ V(11, 8, 2),
2850
2851 /* 0100 1000 ... */
2852 /* 00 */ V(13, 4, 2), /* 260 */
2853 /* 01 */ V(9, 10, 2),
2854 /* 10 */ V(10, 9, 2),
2855 /* 11 */ V(6, 12, 2),
2856
2857 /* 0100 1001 ... */
2858 /* 00 */ V(12, 6, 2), /* 264 */
2859 /* 01 */ V(3, 13, 2),
2860 /* 10 */ V(13, 3, 2),
2861 /* 11 */ V(2, 13, 2),
2862
2863 /* 0100 1010 ... */
2864 /* 00 */ V(13, 2, 2), /* 268 */
2865 /* 01 */ V(1, 13, 2),
2866 /* 10 */ V(7, 11, 2),
2867 /* 11 */ V(11, 7, 2),
2868
2869 /* 0100 1011 ... */
2870 /* 00 */ V(13, 1, 2), /* 272 */
2871 /* 01 */ V(5, 12, 2),
2872 /* 10 */ V(12, 5, 2),
2873 /* 11 */ V(8, 10, 2),
2874
2875 /* 0100 1100 ... */
2876 /* 00 */ V(10, 8, 2), /* 276 */
2877 /* 01 */ V(9, 9, 2),
2878 /* 10 */ V(4, 12, 2),
2879 /* 11 */ V(12, 4, 2),
2880
2881 /* 0100 1101 ... */
2882 /* 000 */ V(6, 11, 2), /* 280 */
2883 /* 001 */ V(6, 11, 2),
2884 /* 010 */ V(11, 6, 2),
2885 /* 011 */ V(11, 6, 2),
2886 /* 100 */ V(13, 0, 3),
2887 /* 101 */ V(0, 12, 3),
2888 /* 110 */ V(3, 12, 2),
2889 /* 111 */ V(3, 12, 2),
2890
2891 /* 0100 1110 ... */
2892 /* 00 */ V(12, 3, 2), /* 288 */
2893 /* 01 */ V(7, 10, 2),
2894 /* 10 */ V(10, 7, 2),
2895 /* 11 */ V(2, 12, 2),
2896
2897 /* 0100 1111 ... */
2898 /* 00 */ V(12, 2, 2), /* 292 */
2899 /* 01 */ V(5, 11, 2),
2900 /* 10 */ V(11, 5, 2),
2901 /* 11 */ V(1, 12, 2),
2902
2903 /* 0101 0000 ... */
2904 /* 00 */ V(8, 9, 2), /* 296 */
2905 /* 01 */ V(9, 8, 2),
2906 /* 10 */ V(12, 1, 2),
2907 /* 11 */ V(4, 11, 2),
2908
2909 /* 0101 0001 ... */
2910 /* 000 */ V(12, 0, 3), /* 300 */
2911 /* 001 */ V(0, 11, 3),
2912 /* 010 */ V(3, 11, 2),
2913 /* 011 */ V(3, 11, 2),
2914 /* 100 */ V(11, 0, 3),
2915 /* 101 */ V(0, 10, 3),
2916 /* 110 */ V(1, 10, 2),
2917 /* 111 */ V(1, 10, 2),
2918
2919 /* 0101 0010 ... */
2920 /* 00 */ V(11, 4, 1), /* 308 */
2921 /* 01 */ V(11, 4, 1),
2922 /* 10 */ V(6, 10, 2),
2923 /* 11 */ V(10, 6, 2),
2924
2925 /* 0101 0011 ... */
2926 /* 000 */ V(7, 9, 2), /* 312 */
2927 /* 001 */ V(7, 9, 2),
2928 /* 010 */ V(9, 7, 2),
2929 /* 011 */ V(9, 7, 2),
2930 /* 100 */ V(10, 0, 3),
2931 /* 101 */ V(0, 9, 3),
2932 /* 110 */ V(9, 0, 2),
2933 /* 111 */ V(9, 0, 2),
2934
2935 /* 0101 0100 ... */
2936 /* 0 */ V(11, 3, 1), /* 320 */
2937 /* 1 */ V(8, 8, 1),
2938
2939 /* 0101 0101 ... */
2940 /* 00 */ V(2, 11, 2), /* 322 */
2941 /* 01 */ V(5, 10, 2),
2942 /* 10 */ V(11, 2, 1),
2943 /* 11 */ V(11, 2, 1),
2944
2945 /* 0101 0110 ... */
2946 /* 00 */ V(10, 5, 2), /* 326 */
2947 /* 01 */ V(1, 11, 2),
2948 /* 10 */ V(11, 1, 2),
2949 /* 11 */ V(6, 9, 2),
2950
2951 /* 0101 0111 ... */
2952 /* 0 */ V(9, 6, 1), /* 330 */
2953 /* 1 */ V(10, 4, 1),
2954
2955 /* 0101 1000 ... */
2956 /* 00 */ V(4, 10, 2), /* 332 */
2957 /* 01 */ V(7, 8, 2),
2958 /* 10 */ V(8, 7, 1),
2959 /* 11 */ V(8, 7, 1),
2960
2961 /* 0101 1001 ... */
2962 /* 0 */ V(3, 10, 1), /* 336 */
2963 /* 1 */ V(10, 3, 1),
2964
2965 /* 0101 1010 ... */
2966 /* 0 */ V(5, 9, 1), /* 338 */
2967 /* 1 */ V(9, 5, 1),
2968
2969 /* 0101 1011 ... */
2970 /* 0 */ V(2, 10, 1), /* 340 */
2971 /* 1 */ V(10, 2, 1),
2972
2973 /* 0101 1100 ... */
2974 /* 0 */ V(10, 1, 1), /* 342 */
2975 /* 1 */ V(6, 8, 1),
2976
2977 /* 0101 1101 ... */
2978 /* 0 */ V(8, 6, 1), /* 344 */
2979 /* 1 */ V(7, 7, 1),
2980
2981 /* 0101 1110 ... */
2982 /* 0 */ V(4, 9, 1), /* 346 */
2983 /* 1 */ V(9, 4, 1),
2984
2985 /* 0101 1111 ... */
2986 /* 0 */ V(3, 9, 1), /* 348 */
2987 /* 1 */ V(9, 3, 1),
2988
2989 /* 0110 0000 ... */
2990 /* 0 */ V(5, 8, 1), /* 350 */
2991 /* 1 */ V(8, 5, 1),
2992
2993 /* 0110 0001 ... */
2994 /* 0 */ V(2, 9, 1), /* 352 */
2995 /* 1 */ V(6, 7, 1),
2996
2997 /* 0110 0010 ... */
2998 /* 0 */ V(7, 6, 1), /* 354 */
2999 /* 1 */ V(9, 2, 1),
3000
3001 /* 0110 0011 ... */
3002 /* 0 */ V(1, 9, 1), /* 356 */
3003 /* 1 */ V(9, 1, 1),
3004
3005 /* 0110 0100 ... */
3006 /* 0 */ V(4, 8, 1), /* 358 */
3007 /* 1 */ V(8, 4, 1),
3008
3009 /* 0110 0101 ... */
3010 /* 0 */ V(5, 7, 1), /* 360 */
3011 /* 1 */ V(7, 5, 1),
3012
3013 /* 0110 0110 ... */
3014 /* 0 */ V(3, 8, 1), /* 362 */
3015 /* 1 */ V(8, 3, 1),
3016
3017 /* 0110 0111 ... */
3018 /* 0 */ V(6, 6, 1), /* 364 */
3019 /* 1 */ V(2, 8, 1),
3020
3021 /* 0110 1000 ... */
3022 /* 0 */ V(8, 2, 1), /* 366 */
3023 /* 1 */ V(1, 8, 1),
3024
3025 /* 0110 1001 ... */
3026 /* 0 */ V(4, 7, 1), /* 368 */
3027 /* 1 */ V(7, 4, 1),
3028
3029 /* 0110 1010 ... */
3030 /* 00 */ V(8, 1, 1), /* 370 */
3031 /* 01 */ V(8, 1, 1),
3032 /* 10 */ V(0, 8, 2),
3033 /* 11 */ V(8, 0, 2),
3034
3035 /* 0110 1011 ... */
3036 /* 0 */ V(5, 6, 1), /* 374 */
3037 /* 1 */ V(6, 5, 1),
3038
3039 /* 0110 1100 ... */
3040 /* 00 */ V(1, 7, 1), /* 376 */
3041 /* 01 */ V(1, 7, 1),
3042 /* 10 */ V(0, 7, 2),
3043 /* 11 */ V(7, 0, 2),
3044
3045 /* 0110 1110 ... */
3046 /* 0 */ V(3, 7, 1), /* 380 */
3047 /* 1 */ V(2, 7, 1),
3048
3049 /* 0111 1100 ... */
3050 /* 0 */ V(0, 6, 1), /* 382 */
3051 /* 1 */ V(6, 0, 1),
3052
3053 /* 1000 0011 ... */
3054 /* 0 */ V(0, 5, 1), /* 384 */
3055 /* 1 */ V(5, 0, 1)
3056};
3057
3058# undef V
3059# undef PTR
3060
3061/* external tables */
3062
3063union huffquad const *const mad_huff_quad_table[2] = { hufftabA, hufftabB };
3064
3065struct hufftable const mad_huff_pair_table[32] = {
3066 /* 0 */ { hufftab0, 0, 0 },
3067 /* 1 */ { hufftab1, 0, 3 },
3068 /* 2 */ { hufftab2, 0, 3 },
3069 /* 3 */ { hufftab3, 0, 3 },
3070 /* 4 */ { 0 /* not used */ },
3071 /* 5 */ { hufftab5, 0, 3 },
3072 /* 6 */ { hufftab6, 0, 4 },
3073 /* 7 */ { hufftab7, 0, 4 },
3074 /* 8 */ { hufftab8, 0, 4 },
3075 /* 9 */ { hufftab9, 0, 4 },
3076 /* 10 */ { hufftab10, 0, 4 },
3077 /* 11 */ { hufftab11, 0, 4 },
3078 /* 12 */ { hufftab12, 0, 4 },
3079 /* 13 */ { hufftab13, 0, 4 },
3080 /* 14 */ { 0 /* not used */ },
3081 /* 15 */ { hufftab15, 0, 4 },
3082 /* 16 */ { hufftab16, 1, 4 },
3083 /* 17 */ { hufftab16, 2, 4 },
3084 /* 18 */ { hufftab16, 3, 4 },
3085 /* 19 */ { hufftab16, 4, 4 },
3086 /* 20 */ { hufftab16, 6, 4 },
3087 /* 21 */ { hufftab16, 8, 4 },
3088 /* 22 */ { hufftab16, 10, 4 },
3089 /* 23 */ { hufftab16, 13, 4 },
3090 /* 24 */ { hufftab24, 4, 4 },
3091 /* 25 */ { hufftab24, 5, 4 },
3092 /* 26 */ { hufftab24, 6, 4 },
3093 /* 27 */ { hufftab24, 7, 4 },
3094 /* 28 */ { hufftab24, 8, 4 },
3095 /* 29 */ { hufftab24, 9, 4 },
3096 /* 30 */ { hufftab24, 11, 4 },
3097 /* 31 */ { hufftab24, 13, 4 }
3098};
diff --git a/uisimulator/common/libmad/huffman.h b/uisimulator/common/libmad/huffman.h
new file mode 100644
index 0000000000..d051949bf3
--- /dev/null
+++ b/uisimulator/common/libmad/huffman.h
@@ -0,0 +1,66 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22# ifndef LIBMAD_HUFFMAN_H
23# define LIBMAD_HUFFMAN_H
24
25union huffquad {
26 struct {
27 unsigned short final : 1;
28 unsigned short bits : 3;
29 unsigned short offset : 12;
30 } ptr;
31 struct {
32 unsigned short final : 1;
33 unsigned short hlen : 3;
34 unsigned short v : 1;
35 unsigned short w : 1;
36 unsigned short x : 1;
37 unsigned short y : 1;
38 } value;
39 unsigned short final : 1;
40};
41
42union huffpair {
43 struct {
44 unsigned short final : 1;
45 unsigned short bits : 3;
46 unsigned short offset : 12;
47 } ptr;
48 struct {
49 unsigned short final : 1;
50 unsigned short hlen : 3;
51 unsigned short x : 4;
52 unsigned short y : 4;
53 } value;
54 unsigned short final : 1;
55};
56
57struct hufftable {
58 union huffpair const *table;
59 unsigned short linbits;
60 unsigned short startbits;
61};
62
63extern union huffquad const *const mad_huff_quad_table[2];
64extern struct hufftable const mad_huff_pair_table[32];
65
66# endif
diff --git a/uisimulator/common/libmad/imdct_s.dat b/uisimulator/common/libmad/imdct_s.dat
new file mode 100644
index 0000000000..ed70446795
--- /dev/null
+++ b/uisimulator/common/libmad/imdct_s.dat
@@ -0,0 +1,62 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22 /* 0 */ { MAD_F(0x09bd7ca0) /* 0.608761429 */,
23 -MAD_F(0x0ec835e8) /* -0.923879533 */,
24 -MAD_F(0x0216a2a2) /* -0.130526192 */,
25 MAD_F(0x0fdcf549) /* 0.991444861 */,
26 -MAD_F(0x061f78aa) /* -0.382683432 */,
27 -MAD_F(0x0cb19346) /* -0.793353340 */ },
28
29 /* 6 */ { -MAD_F(0x0cb19346) /* -0.793353340 */,
30 MAD_F(0x061f78aa) /* 0.382683432 */,
31 MAD_F(0x0fdcf549) /* 0.991444861 */,
32 MAD_F(0x0216a2a2) /* 0.130526192 */,
33 -MAD_F(0x0ec835e8) /* -0.923879533 */,
34 -MAD_F(0x09bd7ca0) /* -0.608761429 */ },
35
36 /* 1 */ { MAD_F(0x061f78aa) /* 0.382683432 */,
37 -MAD_F(0x0ec835e8) /* -0.923879533 */,
38 MAD_F(0x0ec835e8) /* 0.923879533 */,
39 -MAD_F(0x061f78aa) /* -0.382683432 */,
40 -MAD_F(0x061f78aa) /* -0.382683432 */,
41 MAD_F(0x0ec835e8) /* 0.923879533 */ },
42
43 /* 7 */ { -MAD_F(0x0ec835e8) /* -0.923879533 */,
44 -MAD_F(0x061f78aa) /* -0.382683432 */,
45 MAD_F(0x061f78aa) /* 0.382683432 */,
46 MAD_F(0x0ec835e8) /* 0.923879533 */,
47 MAD_F(0x0ec835e8) /* 0.923879533 */,
48 MAD_F(0x061f78aa) /* 0.382683432 */ },
49
50 /* 2 */ { MAD_F(0x0216a2a2) /* 0.130526192 */,
51 -MAD_F(0x061f78aa) /* -0.382683432 */,
52 MAD_F(0x09bd7ca0) /* 0.608761429 */,
53 -MAD_F(0x0cb19346) /* -0.793353340 */,
54 MAD_F(0x0ec835e8) /* 0.923879533 */,
55 -MAD_F(0x0fdcf549) /* -0.991444861 */ },
56
57 /* 8 */ { -MAD_F(0x0fdcf549) /* -0.991444861 */,
58 -MAD_F(0x0ec835e8) /* -0.923879533 */,
59 -MAD_F(0x0cb19346) /* -0.793353340 */,
60 -MAD_F(0x09bd7ca0) /* -0.608761429 */,
61 -MAD_F(0x061f78aa) /* -0.382683432 */,
62 -MAD_F(0x0216a2a2) /* -0.130526192 */ }
diff --git a/uisimulator/common/libmad/layer12.c b/uisimulator/common/libmad/layer12.c
new file mode 100644
index 0000000000..4e0870c8dc
--- /dev/null
+++ b/uisimulator/common/libmad/layer12.c
@@ -0,0 +1,496 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22# ifdef HAVE_CONFIG_H
23# include "madconfig.h"
24# endif
25
26# include "global.h"
27
28# ifdef HAVE_LIMITS_H
29# include <limits.h>
30# else
31# define CHAR_BIT 8
32# endif
33
34# include "fixed.h"
35# include "bit.h"
36# include "stream.h"
37# include "frame.h"
38# include "layer12.h"
39
40/*
41 * scalefactor table
42 * used in both Layer I and Layer II decoding
43 */
44static
45mad_fixed_t const sf_table[63] = {
46# include "sf_table.dat"
47};
48
49/* --- Layer I ------------------------------------------------------------- */
50
51/* linear scaling table */
52static
53mad_fixed_t const linear_table[14] = {
54 MAD_F(0x15555555), /* 2^2 / (2^2 - 1) == 1.33333333333333 */
55 MAD_F(0x12492492), /* 2^3 / (2^3 - 1) == 1.14285714285714 */
56 MAD_F(0x11111111), /* 2^4 / (2^4 - 1) == 1.06666666666667 */
57 MAD_F(0x10842108), /* 2^5 / (2^5 - 1) == 1.03225806451613 */
58 MAD_F(0x10410410), /* 2^6 / (2^6 - 1) == 1.01587301587302 */
59 MAD_F(0x10204081), /* 2^7 / (2^7 - 1) == 1.00787401574803 */
60 MAD_F(0x10101010), /* 2^8 / (2^8 - 1) == 1.00392156862745 */
61 MAD_F(0x10080402), /* 2^9 / (2^9 - 1) == 1.00195694716243 */
62 MAD_F(0x10040100), /* 2^10 / (2^10 - 1) == 1.00097751710655 */
63 MAD_F(0x10020040), /* 2^11 / (2^11 - 1) == 1.00048851978505 */
64 MAD_F(0x10010010), /* 2^12 / (2^12 - 1) == 1.00024420024420 */
65 MAD_F(0x10008004), /* 2^13 / (2^13 - 1) == 1.00012208521548 */
66 MAD_F(0x10004001), /* 2^14 / (2^14 - 1) == 1.00006103888177 */
67 MAD_F(0x10002000) /* 2^15 / (2^15 - 1) == 1.00003051850948 */
68};
69
70/*
71 * NAME: I_sample()
72 * DESCRIPTION: decode one requantized Layer I sample from a bitstream
73 */
74static
75mad_fixed_t I_sample(struct mad_bitptr *ptr, unsigned int nb)
76{
77 mad_fixed_t sample;
78
79 sample = mad_bit_read(ptr, nb);
80
81 /* invert most significant bit, extend sign, then scale to fixed format */
82
83 sample ^= 1 << (nb - 1);
84 sample |= -(sample & (1 << (nb - 1)));
85
86 sample <<= MAD_F_FRACBITS - (nb - 1);
87
88 /* requantize the sample */
89
90 /* s'' = (2^nb / (2^nb - 1)) * (s''' + 2^(-nb + 1)) */
91
92 sample += MAD_F_ONE >> (nb - 1);
93
94 return mad_f_mul(sample, linear_table[nb - 2]);
95
96 /* s' = factor * s'' */
97 /* (to be performed by caller) */
98}
99
100/*
101 * NAME: layer->I()
102 * DESCRIPTION: decode a single Layer I frame
103 */
104int mad_layer_I(struct mad_stream *stream, struct mad_frame *frame)
105{
106 struct mad_header *header = &frame->header;
107 unsigned int nch, bound, ch, s, sb, nb;
108 unsigned char allocation[2][32], scalefactor[2][32];
109
110 nch = MAD_NCHANNELS(header);
111
112 bound = 32;
113 if (header->mode == MAD_MODE_JOINT_STEREO) {
114 header->flags |= MAD_FLAG_I_STEREO;
115 bound = 4 + header->mode_extension * 4;
116 }
117
118 /* check CRC word */
119
120 if (header->flags & MAD_FLAG_PROTECTION) {
121 header->crc_check =
122 mad_bit_crc(stream->ptr, 4 * (bound * nch + (32 - bound)),
123 header->crc_check);
124
125 if (header->crc_check != header->crc_target &&
126 !(frame->options & MAD_OPTION_IGNORECRC)) {
127 stream->error = MAD_ERROR_BADCRC;
128 return -1;
129 }
130 }
131
132 /* decode bit allocations */
133
134 for (sb = 0; sb < bound; ++sb) {
135 for (ch = 0; ch < nch; ++ch) {
136 nb = mad_bit_read(&stream->ptr, 4);
137
138 if (nb == 15) {
139 stream->error = MAD_ERROR_BADBITALLOC;
140 return -1;
141 }
142
143 allocation[ch][sb] = nb ? nb + 1 : 0;
144 }
145 }
146
147 for (sb = bound; sb < 32; ++sb) {
148 nb = mad_bit_read(&stream->ptr, 4);
149
150 if (nb == 15) {
151 stream->error = MAD_ERROR_BADBITALLOC;
152 return -1;
153 }
154
155 allocation[0][sb] =
156 allocation[1][sb] = nb ? nb + 1 : 0;
157 }
158
159 /* decode scalefactors */
160
161 for (sb = 0; sb < 32; ++sb) {
162 for (ch = 0; ch < nch; ++ch) {
163 if (allocation[ch][sb]) {
164 scalefactor[ch][sb] = mad_bit_read(&stream->ptr, 6);
165
166 if (scalefactor[ch][sb] == 63) {
167 stream->error = MAD_ERROR_BADSCALEFACTOR;
168 return -1;
169 }
170 }
171 }
172 }
173
174 /* decode samples */
175
176 for (s = 0; s < 12; ++s) {
177 for (sb = 0; sb < bound; ++sb) {
178 for (ch = 0; ch < nch; ++ch) {
179 nb = allocation[ch][sb];
180 frame->sbsample[ch][s][sb] = nb ?
181 mad_f_mul(I_sample(&stream->ptr, nb),
182 sf_table[scalefactor[ch][sb]]) : 0;
183 }
184 }
185
186 for (sb = bound; sb < 32; ++sb) {
187 if ((nb = allocation[0][sb])) {
188 mad_fixed_t sample;
189
190 sample = I_sample(&stream->ptr, nb);
191
192 for (ch = 0; ch < nch; ++ch) {
193 frame->sbsample[ch][s][sb] =
194 mad_f_mul(sample, sf_table[scalefactor[ch][sb]]);
195 }
196 }
197 else {
198 for (ch = 0; ch < nch; ++ch)
199 frame->sbsample[ch][s][sb] = 0;
200 }
201 }
202 }
203
204 return 0;
205}
206
207/* --- Layer II ------------------------------------------------------------ */
208
209/* possible quantization per subband table */
210static
211struct {
212 unsigned int sblimit;
213 unsigned char const offsets[30];
214} const sbquant_table[5] = {
215 /* ISO/IEC 11172-3 Table B.2a */
216 { 27, { 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, /* 0 */
217 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0 } },
218 /* ISO/IEC 11172-3 Table B.2b */
219 { 30, { 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, /* 1 */
220 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0 } },
221 /* ISO/IEC 11172-3 Table B.2c */
222 { 8, { 5, 5, 2, 2, 2, 2, 2, 2 } }, /* 2 */
223 /* ISO/IEC 11172-3 Table B.2d */
224 { 12, { 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 } }, /* 3 */
225 /* ISO/IEC 13818-3 Table B.1 */
226 { 30, { 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, /* 4 */
227 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } }
228};
229
230/* bit allocation table */
231static
232struct {
233 unsigned short nbal;
234 unsigned short offset;
235} const bitalloc_table[8] = {
236 { 2, 0 }, /* 0 */
237 { 2, 3 }, /* 1 */
238 { 3, 3 }, /* 2 */
239 { 3, 1 }, /* 3 */
240 { 4, 2 }, /* 4 */
241 { 4, 3 }, /* 5 */
242 { 4, 4 }, /* 6 */
243 { 4, 5 } /* 7 */
244};
245
246/* offsets into quantization class table */
247static
248unsigned char const offset_table[6][15] = {
249 { 0, 1, 16 }, /* 0 */
250 { 0, 1, 2, 3, 4, 5, 16 }, /* 1 */
251 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }, /* 2 */
252 { 0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }, /* 3 */
253 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16 }, /* 4 */
254 { 0, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 } /* 5 */
255};
256
257/* quantization class table */
258static
259struct quantclass {
260 unsigned short nlevels;
261 unsigned char group;
262 unsigned char bits;
263 mad_fixed_t C;
264 mad_fixed_t D;
265} const qc_table[17] = {
266# include "qc_table.dat"
267};
268
269/*
270 * NAME: II_samples()
271 * DESCRIPTION: decode three requantized Layer II samples from a bitstream
272 */
273static
274void II_samples(struct mad_bitptr *ptr,
275 struct quantclass const *quantclass,
276 mad_fixed_t output[3])
277{
278 unsigned int nb, s, sample[3];
279
280 if ((nb = quantclass->group)) {
281 unsigned int c, nlevels;
282
283 /* degrouping */
284 c = mad_bit_read(ptr, quantclass->bits);
285 nlevels = quantclass->nlevels;
286
287 for (s = 0; s < 3; ++s) {
288 sample[s] = c % nlevels;
289 c /= nlevels;
290 }
291 }
292 else {
293 nb = quantclass->bits;
294
295 for (s = 0; s < 3; ++s)
296 sample[s] = mad_bit_read(ptr, nb);
297 }
298
299 for (s = 0; s < 3; ++s) {
300 mad_fixed_t requantized;
301
302 /* invert most significant bit, extend sign, then scale to fixed format */
303
304 requantized = sample[s] ^ (1 << (nb - 1));
305 requantized |= -(requantized & (1 << (nb - 1)));
306
307 requantized <<= MAD_F_FRACBITS - (nb - 1);
308
309 /* requantize the sample */
310
311 /* s'' = C * (s''' + D) */
312
313 output[s] = mad_f_mul(requantized + quantclass->D, quantclass->C);
314
315 /* s' = factor * s'' */
316 /* (to be performed by caller) */
317 }
318}
319
320/*
321 * NAME: layer->II()
322 * DESCRIPTION: decode a single Layer II frame
323 */
324int mad_layer_II(struct mad_stream *stream, struct mad_frame *frame)
325{
326 struct mad_header *header = &frame->header;
327 struct mad_bitptr start;
328 unsigned int index, sblimit, nbal, nch, bound, gr, ch, s, sb;
329 unsigned char const *offsets;
330 unsigned char allocation[2][32], scfsi[2][32], scalefactor[2][32][3];
331 mad_fixed_t samples[3];
332
333 nch = MAD_NCHANNELS(header);
334
335 if (header->flags & MAD_FLAG_LSF_EXT)
336 index = 4;
337 else {
338 switch (nch == 2 ? header->bitrate / 2 : header->bitrate) {
339 case 32000:
340 case 48000:
341 index = (header->samplerate == 32000) ? 3 : 2;
342 break;
343
344 case 56000:
345 case 64000:
346 case 80000:
347 index = 0;
348 break;
349
350 default:
351 index = (header->samplerate == 48000) ? 0 : 1;
352 }
353 }
354
355 sblimit = sbquant_table[index].sblimit;
356 offsets = sbquant_table[index].offsets;
357
358 bound = 32;
359 if (header->mode == MAD_MODE_JOINT_STEREO) {
360 header->flags |= MAD_FLAG_I_STEREO;
361 bound = 4 + header->mode_extension * 4;
362 }
363
364 if (bound > sblimit)
365 bound = sblimit;
366
367 start = stream->ptr;
368
369 /* decode bit allocations */
370
371 for (sb = 0; sb < bound; ++sb) {
372 nbal = bitalloc_table[offsets[sb]].nbal;
373
374 for (ch = 0; ch < nch; ++ch)
375 allocation[ch][sb] = mad_bit_read(&stream->ptr, nbal);
376 }
377
378 for (sb = bound; sb < sblimit; ++sb) {
379 nbal = bitalloc_table[offsets[sb]].nbal;
380
381 allocation[0][sb] =
382 allocation[1][sb] = mad_bit_read(&stream->ptr, nbal);
383 }
384
385 /* decode scalefactor selection info */
386
387 for (sb = 0; sb < sblimit; ++sb) {
388 for (ch = 0; ch < nch; ++ch) {
389 if (allocation[ch][sb])
390 scfsi[ch][sb] = mad_bit_read(&stream->ptr, 2);
391 }
392 }
393
394 /* check CRC word */
395
396 if (header->flags & MAD_FLAG_PROTECTION) {
397 header->crc_check =
398 mad_bit_crc(start, mad_bit_length(&start, &stream->ptr),
399 header->crc_check);
400
401 if (header->crc_check != header->crc_target &&
402 !(frame->options & MAD_OPTION_IGNORECRC)) {
403 stream->error = MAD_ERROR_BADCRC;
404 return -1;
405 }
406 }
407
408 /* decode scalefactors */
409
410 for (sb = 0; sb < sblimit; ++sb) {
411 for (ch = 0; ch < nch; ++ch) {
412 if (allocation[ch][sb]) {
413 scalefactor[ch][sb][0] = mad_bit_read(&stream->ptr, 6);
414
415 switch (scfsi[ch][sb]) {
416 case 2:
417 scalefactor[ch][sb][2] =
418 scalefactor[ch][sb][1] =
419 scalefactor[ch][sb][0];
420 break;
421
422 case 0:
423 scalefactor[ch][sb][1] = mad_bit_read(&stream->ptr, 6);
424 /* fall through */
425
426 case 1:
427 case 3:
428 scalefactor[ch][sb][2] = mad_bit_read(&stream->ptr, 6);
429 }
430
431 if (scfsi[ch][sb] & 1)
432 scalefactor[ch][sb][1] = scalefactor[ch][sb][scfsi[ch][sb] - 1];
433
434 if (scalefactor[ch][sb][0] == 63 ||
435 scalefactor[ch][sb][1] == 63 ||
436 scalefactor[ch][sb][2] == 63) {
437 stream->error = MAD_ERROR_BADSCALEFACTOR;
438 return -1;
439 }
440 }
441 }
442 }
443
444 /* decode samples */
445
446 for (gr = 0; gr < 12; ++gr) {
447 for (sb = 0; sb < bound; ++sb) {
448 for (ch = 0; ch < nch; ++ch) {
449 if ((index = allocation[ch][sb])) {
450 index = offset_table[bitalloc_table[offsets[sb]].offset][index - 1];
451
452 II_samples(&stream->ptr, &qc_table[index], samples);
453
454 for (s = 0; s < 3; ++s) {
455 frame->sbsample[ch][3 * gr + s][sb] =
456 mad_f_mul(samples[s], sf_table[scalefactor[ch][sb][gr / 4]]);
457 }
458 }
459 else {
460 for (s = 0; s < 3; ++s)
461 frame->sbsample[ch][3 * gr + s][sb] = 0;
462 }
463 }
464 }
465
466 for (sb = bound; sb < sblimit; ++sb) {
467 if ((index = allocation[0][sb])) {
468 index = offset_table[bitalloc_table[offsets[sb]].offset][index - 1];
469
470 II_samples(&stream->ptr, &qc_table[index], samples);
471
472 for (ch = 0; ch < nch; ++ch) {
473 for (s = 0; s < 3; ++s) {
474 frame->sbsample[ch][3 * gr + s][sb] =
475 mad_f_mul(samples[s], sf_table[scalefactor[ch][sb][gr / 4]]);
476 }
477 }
478 }
479 else {
480 for (ch = 0; ch < nch; ++ch) {
481 for (s = 0; s < 3; ++s)
482 frame->sbsample[ch][3 * gr + s][sb] = 0;
483 }
484 }
485 }
486
487 for (ch = 0; ch < nch; ++ch) {
488 for (s = 0; s < 3; ++s) {
489 for (sb = sblimit; sb < 32; ++sb)
490 frame->sbsample[ch][3 * gr + s][sb] = 0;
491 }
492 }
493 }
494
495 return 0;
496}
diff --git a/uisimulator/common/libmad/layer12.h b/uisimulator/common/libmad/layer12.h
new file mode 100644
index 0000000000..c67372628b
--- /dev/null
+++ b/uisimulator/common/libmad/layer12.h
@@ -0,0 +1,31 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22# ifndef LIBMAD_LAYER12_H
23# define LIBMAD_LAYER12_H
24
25# include "stream.h"
26# include "frame.h"
27
28int mad_layer_I(struct mad_stream *, struct mad_frame *);
29int mad_layer_II(struct mad_stream *, struct mad_frame *);
30
31# endif
diff --git a/uisimulator/common/libmad/layer3.c b/uisimulator/common/libmad/layer3.c
new file mode 100644
index 0000000000..da728b7af2
--- /dev/null
+++ b/uisimulator/common/libmad/layer3.c
@@ -0,0 +1,2502 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22# ifdef HAVE_CONFIG_H
23# include "madconfig.h"
24# endif
25
26# include "global.h"
27
28# include <stdlib.h>
29# include <string.h>
30
31# ifdef HAVE_ASSERT_H
32# include <assert.h>
33# endif
34
35# ifdef HAVE_LIMITS_H
36# include <limits.h>
37# else
38# define CHAR_BIT 8
39# endif
40
41# include "fixed.h"
42# include "bit.h"
43# include "stream.h"
44# include "frame.h"
45# include "huffman.h"
46# include "layer3.h"
47
48/* --- Layer III ----------------------------------------------------------- */
49
50enum {
51 count1table_select = 0x01,
52 scalefac_scale = 0x02,
53 preflag = 0x04,
54 mixed_block_flag = 0x08
55};
56
57enum {
58 I_STEREO = 0x1,
59 MS_STEREO = 0x2
60};
61
62struct sideinfo {
63 unsigned int main_data_begin;
64 unsigned int private_bits;
65
66 unsigned char scfsi[2];
67
68 struct granule {
69 struct channel {
70 /* from side info */
71 unsigned short part2_3_length;
72 unsigned short big_values;
73 unsigned short global_gain;
74 unsigned short scalefac_compress;
75
76 unsigned char flags;
77 unsigned char block_type;
78 unsigned char table_select[3];
79 unsigned char subblock_gain[3];
80 unsigned char region0_count;
81 unsigned char region1_count;
82
83 /* from main_data */
84 unsigned char scalefac[39]; /* scalefac_l and/or scalefac_s */
85 } ch[2];
86 } gr[2];
87};
88
89/*
90 * scalefactor bit lengths
91 * derived from section 2.4.2.7 of ISO/IEC 11172-3
92 */
93static
94struct {
95 unsigned char slen1;
96 unsigned char slen2;
97} const sflen_table[16] = {
98 { 0, 0 }, { 0, 1 }, { 0, 2 }, { 0, 3 },
99 { 3, 0 }, { 1, 1 }, { 1, 2 }, { 1, 3 },
100 { 2, 1 }, { 2, 2 }, { 2, 3 }, { 3, 1 },
101 { 3, 2 }, { 3, 3 }, { 4, 2 }, { 4, 3 }
102};
103
104/*
105 * number of LSF scalefactor band values
106 * derived from section 2.4.3.2 of ISO/IEC 13818-3
107 */
108static
109unsigned char const nsfb_table[6][3][4] = {
110 { { 6, 5, 5, 5 },
111 { 9, 9, 9, 9 },
112 { 6, 9, 9, 9 } },
113
114 { { 6, 5, 7, 3 },
115 { 9, 9, 12, 6 },
116 { 6, 9, 12, 6 } },
117
118 { { 11, 10, 0, 0 },
119 { 18, 18, 0, 0 },
120 { 15, 18, 0, 0 } },
121
122 { { 7, 7, 7, 0 },
123 { 12, 12, 12, 0 },
124 { 6, 15, 12, 0 } },
125
126 { { 6, 6, 6, 3 },
127 { 12, 9, 9, 6 },
128 { 6, 12, 9, 6 } },
129
130 { { 8, 8, 5, 0 },
131 { 15, 12, 9, 0 },
132 { 6, 18, 9, 0 } }
133};
134
135/*
136 * MPEG-1 scalefactor band widths
137 * derived from Table B.8 of ISO/IEC 11172-3
138 */
139static
140unsigned char const sfb_48000_long[] = {
141 4, 4, 4, 4, 4, 4, 6, 6, 6, 8, 10,
142 12, 16, 18, 22, 28, 34, 40, 46, 54, 54, 192
143};
144
145static
146unsigned char const sfb_44100_long[] = {
147 4, 4, 4, 4, 4, 4, 6, 6, 8, 8, 10,
148 12, 16, 20, 24, 28, 34, 42, 50, 54, 76, 158
149};
150
151static
152unsigned char const sfb_32000_long[] = {
153 4, 4, 4, 4, 4, 4, 6, 6, 8, 10, 12,
154 16, 20, 24, 30, 38, 46, 56, 68, 84, 102, 26
155};
156
157static
158unsigned char const sfb_48000_short[] = {
159 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6,
160 6, 6, 6, 6, 6, 10, 10, 10, 12, 12, 12, 14, 14,
161 14, 16, 16, 16, 20, 20, 20, 26, 26, 26, 66, 66, 66
162};
163
164static
165unsigned char const sfb_44100_short[] = {
166 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6,
167 6, 6, 8, 8, 8, 10, 10, 10, 12, 12, 12, 14, 14,
168 14, 18, 18, 18, 22, 22, 22, 30, 30, 30, 56, 56, 56
169};
170
171static
172unsigned char const sfb_32000_short[] = {
173 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6,
174 6, 6, 8, 8, 8, 12, 12, 12, 16, 16, 16, 20, 20,
175 20, 26, 26, 26, 34, 34, 34, 42, 42, 42, 12, 12, 12
176};
177
178static
179unsigned char const sfb_48000_mixed[] = {
180 /* long */ 4, 4, 4, 4, 4, 4, 6, 6,
181 /* short */ 4, 4, 4, 6, 6, 6, 6, 6, 6, 10,
182 10, 10, 12, 12, 12, 14, 14, 14, 16, 16,
183 16, 20, 20, 20, 26, 26, 26, 66, 66, 66
184};
185
186static
187unsigned char const sfb_44100_mixed[] = {
188 /* long */ 4, 4, 4, 4, 4, 4, 6, 6,
189 /* short */ 4, 4, 4, 6, 6, 6, 8, 8, 8, 10,
190 10, 10, 12, 12, 12, 14, 14, 14, 18, 18,
191 18, 22, 22, 22, 30, 30, 30, 56, 56, 56
192};
193
194static
195unsigned char const sfb_32000_mixed[] = {
196 /* long */ 4, 4, 4, 4, 4, 4, 6, 6,
197 /* short */ 4, 4, 4, 6, 6, 6, 8, 8, 8, 12,
198 12, 12, 16, 16, 16, 20, 20, 20, 26, 26,
199 26, 34, 34, 34, 42, 42, 42, 12, 12, 12
200};
201
202/*
203 * MPEG-2 scalefactor band widths
204 * derived from Table B.2 of ISO/IEC 13818-3
205 */
206static
207unsigned char const sfb_24000_long[] = {
208 6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16,
209 18, 22, 26, 32, 38, 46, 54, 62, 70, 76, 36
210};
211
212static
213unsigned char const sfb_22050_long[] = {
214 6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16,
215 20, 24, 28, 32, 38, 46, 52, 60, 68, 58, 54
216};
217
218# define sfb_16000_long sfb_22050_long
219
220static
221unsigned char const sfb_24000_short[] = {
222 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, 6, 6, 8,
223 8, 8, 10, 10, 10, 12, 12, 12, 14, 14, 14, 18, 18,
224 18, 24, 24, 24, 32, 32, 32, 44, 44, 44, 12, 12, 12
225};
226
227static
228unsigned char const sfb_22050_short[] = {
229 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, 6, 6, 6,
230 6, 6, 8, 8, 8, 10, 10, 10, 14, 14, 14, 18, 18,
231 18, 26, 26, 26, 32, 32, 32, 42, 42, 42, 18, 18, 18
232};
233
234static
235unsigned char const sfb_16000_short[] = {
236 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, 6, 6, 8,
237 8, 8, 10, 10, 10, 12, 12, 12, 14, 14, 14, 18, 18,
238 18, 24, 24, 24, 30, 30, 30, 40, 40, 40, 18, 18, 18
239};
240
241static
242unsigned char const sfb_24000_mixed[] = {
243 /* long */ 6, 6, 6, 6, 6, 6,
244 /* short */ 6, 6, 6, 8, 8, 8, 10, 10, 10, 12,
245 12, 12, 14, 14, 14, 18, 18, 18, 24, 24,
246 24, 32, 32, 32, 44, 44, 44, 12, 12, 12
247};
248
249static
250unsigned char const sfb_22050_mixed[] = {
251 /* long */ 6, 6, 6, 6, 6, 6,
252 /* short */ 6, 6, 6, 6, 6, 6, 8, 8, 8, 10,
253 10, 10, 14, 14, 14, 18, 18, 18, 26, 26,
254 26, 32, 32, 32, 42, 42, 42, 18, 18, 18
255};
256
257static
258unsigned char const sfb_16000_mixed[] = {
259 /* long */ 6, 6, 6, 6, 6, 6,
260 /* short */ 6, 6, 6, 8, 8, 8, 10, 10, 10, 12,
261 12, 12, 14, 14, 14, 18, 18, 18, 24, 24,
262 24, 30, 30, 30, 40, 40, 40, 18, 18, 18
263};
264
265/*
266 * MPEG 2.5 scalefactor band widths
267 * derived from public sources
268 */
269# define sfb_12000_long sfb_16000_long
270# define sfb_11025_long sfb_12000_long
271
272static
273unsigned char const sfb_8000_long[] = {
274 12, 12, 12, 12, 12, 12, 16, 20, 24, 28, 32,
275 40, 48, 56, 64, 76, 90, 2, 2, 2, 2, 2
276};
277
278# define sfb_12000_short sfb_16000_short
279# define sfb_11025_short sfb_12000_short
280
281static
282unsigned char const sfb_8000_short[] = {
283 8, 8, 8, 8, 8, 8, 8, 8, 8, 12, 12, 12, 16,
284 16, 16, 20, 20, 20, 24, 24, 24, 28, 28, 28, 36, 36,
285 36, 2, 2, 2, 2, 2, 2, 2, 2, 2, 26, 26, 26
286};
287
288# define sfb_12000_mixed sfb_16000_mixed
289# define sfb_11025_mixed sfb_12000_mixed
290
291/* the 8000 Hz short block scalefactor bands do not break after the first 36
292 frequency lines, so this is probably wrong */
293static
294unsigned char const sfb_8000_mixed[] = {
295 /* long */ 12, 12, 12,
296 /* short */ 4, 4, 4, 8, 8, 8, 12, 12, 12, 16, 16, 16,
297 20, 20, 20, 24, 24, 24, 28, 28, 28, 36, 36, 36,
298 2, 2, 2, 2, 2, 2, 2, 2, 2, 26, 26, 26
299};
300
301static
302struct {
303 unsigned char const *l;
304 unsigned char const *s;
305 unsigned char const *m;
306} const sfbwidth_table[9] = {
307 { sfb_48000_long, sfb_48000_short, sfb_48000_mixed },
308 { sfb_44100_long, sfb_44100_short, sfb_44100_mixed },
309 { sfb_32000_long, sfb_32000_short, sfb_32000_mixed },
310 { sfb_24000_long, sfb_24000_short, sfb_24000_mixed },
311 { sfb_22050_long, sfb_22050_short, sfb_22050_mixed },
312 { sfb_16000_long, sfb_16000_short, sfb_16000_mixed },
313 { sfb_12000_long, sfb_12000_short, sfb_12000_mixed },
314 { sfb_11025_long, sfb_11025_short, sfb_11025_mixed },
315 { sfb_8000_long, sfb_8000_short, sfb_8000_mixed }
316};
317
318/*
319 * scalefactor band preemphasis (used only when preflag is set)
320 * derived from Table B.6 of ISO/IEC 11172-3
321 */
322static
323unsigned char const pretab[22] = {
324 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 3, 3, 3, 2, 0
325};
326
327/*
328 * table for requantization
329 *
330 * rq_table[x].mantissa * 2^(rq_table[x].exponent) = x^(4/3)
331 */
332static
333struct fixedfloat {
334 unsigned long mantissa : 27;
335 unsigned short exponent : 5;
336} const rq_table[8207] = {
337# include "rq_table.dat"
338};
339
340/*
341 * fractional powers of two
342 * used for requantization and joint stereo decoding
343 *
344 * root_table[3 + x] = 2^(x/4)
345 */
346static
347mad_fixed_t const root_table[7] = {
348 MAD_F(0x09837f05) /* 2^(-3/4) == 0.59460355750136 */,
349 MAD_F(0x0b504f33) /* 2^(-2/4) == 0.70710678118655 */,
350 MAD_F(0x0d744fcd) /* 2^(-1/4) == 0.84089641525371 */,
351 MAD_F(0x10000000) /* 2^( 0/4) == 1.00000000000000 */,
352 MAD_F(0x1306fe0a) /* 2^(+1/4) == 1.18920711500272 */,
353 MAD_F(0x16a09e66) /* 2^(+2/4) == 1.41421356237310 */,
354 MAD_F(0x1ae89f99) /* 2^(+3/4) == 1.68179283050743 */
355};
356
357/*
358 * coefficients for aliasing reduction
359 * derived from Table B.9 of ISO/IEC 11172-3
360 *
361 * c[] = { -0.6, -0.535, -0.33, -0.185, -0.095, -0.041, -0.0142, -0.0037 }
362 * cs[i] = 1 / sqrt(1 + c[i]^2)
363 * ca[i] = c[i] / sqrt(1 + c[i]^2)
364 */
365static
366mad_fixed_t const cs[8] = {
367 +MAD_F(0x0db84a81) /* +0.857492926 */, +MAD_F(0x0e1b9d7f) /* +0.881741997 */,
368 +MAD_F(0x0f31adcf) /* +0.949628649 */, +MAD_F(0x0fbba815) /* +0.983314592 */,
369 +MAD_F(0x0feda417) /* +0.995517816 */, +MAD_F(0x0ffc8fc8) /* +0.999160558 */,
370 +MAD_F(0x0fff964c) /* +0.999899195 */, +MAD_F(0x0ffff8d3) /* +0.999993155 */
371};
372
373static
374mad_fixed_t const ca[8] = {
375 -MAD_F(0x083b5fe7) /* -0.514495755 */, -MAD_F(0x078c36d2) /* -0.471731969 */,
376 -MAD_F(0x05039814) /* -0.313377454 */, -MAD_F(0x02e91dd1) /* -0.181913200 */,
377 -MAD_F(0x0183603a) /* -0.094574193 */, -MAD_F(0x00a7cb87) /* -0.040965583 */,
378 -MAD_F(0x003a2847) /* -0.014198569 */, -MAD_F(0x000f27b4) /* -0.003699975 */
379};
380
381/*
382 * IMDCT coefficients for short blocks
383 * derived from section 2.4.3.4.10.2 of ISO/IEC 11172-3
384 *
385 * imdct_s[i/even][k] = cos((PI / 24) * (2 * (i / 2) + 7) * (2 * k + 1))
386 * imdct_s[i /odd][k] = cos((PI / 24) * (2 * (6 + (i-1)/2) + 7) * (2 * k + 1))
387 */
388static
389mad_fixed_t const imdct_s[6][6] = {
390# include "imdct_s.dat"
391};
392
393# if !defined(ASO_IMDCT)
394/*
395 * windowing coefficients for long blocks
396 * derived from section 2.4.3.4.10.3 of ISO/IEC 11172-3
397 *
398 * window_l[i] = sin((PI / 36) * (i + 1/2))
399 */
400static
401mad_fixed_t const window_l[36] = {
402 MAD_F(0x00b2aa3e) /* 0.043619387 */, MAD_F(0x0216a2a2) /* 0.130526192 */,
403 MAD_F(0x03768962) /* 0.216439614 */, MAD_F(0x04cfb0e2) /* 0.300705800 */,
404 MAD_F(0x061f78aa) /* 0.382683432 */, MAD_F(0x07635284) /* 0.461748613 */,
405 MAD_F(0x0898c779) /* 0.537299608 */, MAD_F(0x09bd7ca0) /* 0.608761429 */,
406 MAD_F(0x0acf37ad) /* 0.675590208 */, MAD_F(0x0bcbe352) /* 0.737277337 */,
407 MAD_F(0x0cb19346) /* 0.793353340 */, MAD_F(0x0d7e8807) /* 0.843391446 */,
408
409 MAD_F(0x0e313245) /* 0.887010833 */, MAD_F(0x0ec835e8) /* 0.923879533 */,
410 MAD_F(0x0f426cb5) /* 0.953716951 */, MAD_F(0x0f9ee890) /* 0.976296007 */,
411 MAD_F(0x0fdcf549) /* 0.991444861 */, MAD_F(0x0ffc19fd) /* 0.999048222 */,
412 MAD_F(0x0ffc19fd) /* 0.999048222 */, MAD_F(0x0fdcf549) /* 0.991444861 */,
413 MAD_F(0x0f9ee890) /* 0.976296007 */, MAD_F(0x0f426cb5) /* 0.953716951 */,
414 MAD_F(0x0ec835e8) /* 0.923879533 */, MAD_F(0x0e313245) /* 0.887010833 */,
415
416 MAD_F(0x0d7e8807) /* 0.843391446 */, MAD_F(0x0cb19346) /* 0.793353340 */,
417 MAD_F(0x0bcbe352) /* 0.737277337 */, MAD_F(0x0acf37ad) /* 0.675590208 */,
418 MAD_F(0x09bd7ca0) /* 0.608761429 */, MAD_F(0x0898c779) /* 0.537299608 */,
419 MAD_F(0x07635284) /* 0.461748613 */, MAD_F(0x061f78aa) /* 0.382683432 */,
420 MAD_F(0x04cfb0e2) /* 0.300705800 */, MAD_F(0x03768962) /* 0.216439614 */,
421 MAD_F(0x0216a2a2) /* 0.130526192 */, MAD_F(0x00b2aa3e) /* 0.043619387 */,
422};
423# endif /* ASO_IMDCT */
424
425/*
426 * windowing coefficients for short blocks
427 * derived from section 2.4.3.4.10.3 of ISO/IEC 11172-3
428 *
429 * window_s[i] = sin((PI / 12) * (i + 1/2))
430 */
431static
432mad_fixed_t const window_s[12] = {
433 MAD_F(0x0216a2a2) /* 0.130526192 */, MAD_F(0x061f78aa) /* 0.382683432 */,
434 MAD_F(0x09bd7ca0) /* 0.608761429 */, MAD_F(0x0cb19346) /* 0.793353340 */,
435 MAD_F(0x0ec835e8) /* 0.923879533 */, MAD_F(0x0fdcf549) /* 0.991444861 */,
436 MAD_F(0x0fdcf549) /* 0.991444861 */, MAD_F(0x0ec835e8) /* 0.923879533 */,
437 MAD_F(0x0cb19346) /* 0.793353340 */, MAD_F(0x09bd7ca0) /* 0.608761429 */,
438 MAD_F(0x061f78aa) /* 0.382683432 */, MAD_F(0x0216a2a2) /* 0.130526192 */,
439};
440
441/*
442 * coefficients for intensity stereo processing
443 * derived from section 2.4.3.4.9.3 of ISO/IEC 11172-3
444 *
445 * is_ratio[i] = tan(i * (PI / 12))
446 * is_table[i] = is_ratio[i] / (1 + is_ratio[i])
447 */
448static
449mad_fixed_t const is_table[7] = {
450 MAD_F(0x00000000) /* 0.000000000 */,
451 MAD_F(0x0361962f) /* 0.211324865 */,
452 MAD_F(0x05db3d74) /* 0.366025404 */,
453 MAD_F(0x08000000) /* 0.500000000 */,
454 MAD_F(0x0a24c28c) /* 0.633974596 */,
455 MAD_F(0x0c9e69d1) /* 0.788675135 */,
456 MAD_F(0x10000000) /* 1.000000000 */
457};
458
459/*
460 * coefficients for LSF intensity stereo processing
461 * derived from section 2.4.3.2 of ISO/IEC 13818-3
462 *
463 * is_lsf_table[0][i] = (1 / sqrt(sqrt(2)))^(i + 1)
464 * is_lsf_table[1][i] = (1 / sqrt(2))^(i + 1)
465 */
466static
467mad_fixed_t const is_lsf_table[2][15] = {
468 {
469 MAD_F(0x0d744fcd) /* 0.840896415 */,
470 MAD_F(0x0b504f33) /* 0.707106781 */,
471 MAD_F(0x09837f05) /* 0.594603558 */,
472 MAD_F(0x08000000) /* 0.500000000 */,
473 MAD_F(0x06ba27e6) /* 0.420448208 */,
474 MAD_F(0x05a8279a) /* 0.353553391 */,
475 MAD_F(0x04c1bf83) /* 0.297301779 */,
476 MAD_F(0x04000000) /* 0.250000000 */,
477 MAD_F(0x035d13f3) /* 0.210224104 */,
478 MAD_F(0x02d413cd) /* 0.176776695 */,
479 MAD_F(0x0260dfc1) /* 0.148650889 */,
480 MAD_F(0x02000000) /* 0.125000000 */,
481 MAD_F(0x01ae89fa) /* 0.105112052 */,
482 MAD_F(0x016a09e6) /* 0.088388348 */,
483 MAD_F(0x01306fe1) /* 0.074325445 */
484 }, {
485 MAD_F(0x0b504f33) /* 0.707106781 */,
486 MAD_F(0x08000000) /* 0.500000000 */,
487 MAD_F(0x05a8279a) /* 0.353553391 */,
488 MAD_F(0x04000000) /* 0.250000000 */,
489 MAD_F(0x02d413cd) /* 0.176776695 */,
490 MAD_F(0x02000000) /* 0.125000000 */,
491 MAD_F(0x016a09e6) /* 0.088388348 */,
492 MAD_F(0x01000000) /* 0.062500000 */,
493 MAD_F(0x00b504f3) /* 0.044194174 */,
494 MAD_F(0x00800000) /* 0.031250000 */,
495 MAD_F(0x005a827a) /* 0.022097087 */,
496 MAD_F(0x00400000) /* 0.015625000 */,
497 MAD_F(0x002d413d) /* 0.011048543 */,
498 MAD_F(0x00200000) /* 0.007812500 */,
499 MAD_F(0x0016a09e) /* 0.005524272 */
500 }
501};
502
503/*
504 * NAME: III_sideinfo()
505 * DESCRIPTION: decode frame side information from a bitstream
506 */
507static
508enum mad_error III_sideinfo(struct mad_bitptr *ptr, unsigned int nch,
509 int lsf, struct sideinfo *si,
510 unsigned int *data_bitlen,
511 unsigned int *priv_bitlen)
512{
513 unsigned int ngr, gr, ch, i;
514 enum mad_error result = MAD_ERROR_NONE;
515
516 *data_bitlen = 0;
517 *priv_bitlen = lsf ? ((nch == 1) ? 1 : 2) : ((nch == 1) ? 5 : 3);
518
519 si->main_data_begin = mad_bit_read(ptr, lsf ? 8 : 9);
520 si->private_bits = mad_bit_read(ptr, *priv_bitlen);
521
522 ngr = 1;
523 if (!lsf) {
524 ngr = 2;
525
526 for (ch = 0; ch < nch; ++ch)
527 si->scfsi[ch] = mad_bit_read(ptr, 4);
528 }
529
530 for (gr = 0; gr < ngr; ++gr) {
531 struct granule *granule = &si->gr[gr];
532
533 for (ch = 0; ch < nch; ++ch) {
534 struct channel *channel = &granule->ch[ch];
535
536 channel->part2_3_length = mad_bit_read(ptr, 12);
537 channel->big_values = mad_bit_read(ptr, 9);
538 channel->global_gain = mad_bit_read(ptr, 8);
539 channel->scalefac_compress = mad_bit_read(ptr, lsf ? 9 : 4);
540
541 *data_bitlen += channel->part2_3_length;
542
543 if (channel->big_values > 288 && result == 0)
544 result = MAD_ERROR_BADBIGVALUES;
545
546 channel->flags = 0;
547
548 /* window_switching_flag */
549 if (mad_bit_read(ptr, 1)) {
550 channel->block_type = mad_bit_read(ptr, 2);
551
552 if (channel->block_type == 0 && result == 0)
553 result = MAD_ERROR_BADBLOCKTYPE;
554
555 if (!lsf && channel->block_type == 2 && si->scfsi[ch] && result == 0)
556 result = MAD_ERROR_BADSCFSI;
557
558 channel->region0_count = 7;
559 channel->region1_count = 36;
560
561 if (mad_bit_read(ptr, 1))
562 channel->flags |= mixed_block_flag;
563 else if (channel->block_type == 2)
564 channel->region0_count = 8;
565
566 for (i = 0; i < 2; ++i)
567 channel->table_select[i] = mad_bit_read(ptr, 5);
568
569# if defined(DEBUG)
570 channel->table_select[2] = 4; /* not used */
571# endif
572
573 for (i = 0; i < 3; ++i)
574 channel->subblock_gain[i] = mad_bit_read(ptr, 3);
575 }
576 else {
577 channel->block_type = 0;
578
579 for (i = 0; i < 3; ++i)
580 channel->table_select[i] = mad_bit_read(ptr, 5);
581
582 channel->region0_count = mad_bit_read(ptr, 4);
583 channel->region1_count = mad_bit_read(ptr, 3);
584 }
585
586 /* [preflag,] scalefac_scale, count1table_select */
587 channel->flags |= mad_bit_read(ptr, lsf ? 2 : 3);
588 }
589 }
590
591 return result;
592}
593
594/*
595 * NAME: III_scalefactors_lsf()
596 * DESCRIPTION: decode channel scalefactors for LSF from a bitstream
597 */
598static
599unsigned int III_scalefactors_lsf(struct mad_bitptr *ptr,
600 struct channel *channel,
601 struct channel *gr1ch, int mode_extension)
602{
603 struct mad_bitptr start;
604 unsigned int scalefac_compress, index, slen[4], part, n, i;
605 unsigned char const *nsfb;
606
607 start = *ptr;
608
609 scalefac_compress = channel->scalefac_compress;
610 index = (channel->block_type == 2) ?
611 ((channel->flags & mixed_block_flag) ? 2 : 1) : 0;
612
613 if (!((mode_extension & I_STEREO) && gr1ch)) {
614 if (scalefac_compress < 400) {
615 slen[0] = (scalefac_compress >> 4) / 5;
616 slen[1] = (scalefac_compress >> 4) % 5;
617 slen[2] = (scalefac_compress % 16) >> 2;
618 slen[3] = scalefac_compress % 4;
619
620 nsfb = nsfb_table[0][index];
621 }
622 else if (scalefac_compress < 500) {
623 scalefac_compress -= 400;
624
625 slen[0] = (scalefac_compress >> 2) / 5;
626 slen[1] = (scalefac_compress >> 2) % 5;
627 slen[2] = scalefac_compress % 4;
628 slen[3] = 0;
629
630 nsfb = nsfb_table[1][index];
631 }
632 else {
633 scalefac_compress -= 500;
634
635 slen[0] = scalefac_compress / 3;
636 slen[1] = scalefac_compress % 3;
637 slen[2] = 0;
638 slen[3] = 0;
639
640 channel->flags |= preflag;
641
642 nsfb = nsfb_table[2][index];
643 }
644
645 n = 0;
646 for (part = 0; part < 4; ++part) {
647 for (i = 0; i < nsfb[part]; ++i)
648 channel->scalefac[n++] = mad_bit_read(ptr, slen[part]);
649 }
650
651 while (n < 39)
652 channel->scalefac[n++] = 0;
653 }
654 else { /* (mode_extension & I_STEREO) && gr1ch (i.e. ch == 1) */
655 scalefac_compress >>= 1;
656
657 if (scalefac_compress < 180) {
658 slen[0] = scalefac_compress / 36;
659 slen[1] = (scalefac_compress % 36) / 6;
660 slen[2] = (scalefac_compress % 36) % 6;
661 slen[3] = 0;
662
663 nsfb = nsfb_table[3][index];
664 }
665 else if (scalefac_compress < 244) {
666 scalefac_compress -= 180;
667
668 slen[0] = (scalefac_compress % 64) >> 4;
669 slen[1] = (scalefac_compress % 16) >> 2;
670 slen[2] = scalefac_compress % 4;
671 slen[3] = 0;
672
673 nsfb = nsfb_table[4][index];
674 }
675 else {
676 scalefac_compress -= 244;
677
678 slen[0] = scalefac_compress / 3;
679 slen[1] = scalefac_compress % 3;
680 slen[2] = 0;
681 slen[3] = 0;
682
683 nsfb = nsfb_table[5][index];
684 }
685
686 n = 0;
687 for (part = 0; part < 4; ++part) {
688 unsigned int max, is_pos;
689
690 max = (1 << slen[part]) - 1;
691
692 for (i = 0; i < nsfb[part]; ++i) {
693 is_pos = mad_bit_read(ptr, slen[part]);
694
695 channel->scalefac[n] = is_pos;
696 gr1ch->scalefac[n++] = (is_pos == max);
697 }
698 }
699
700 while (n < 39) {
701 channel->scalefac[n] = 0;
702 gr1ch->scalefac[n++] = 0; /* apparently not illegal */
703 }
704 }
705
706 return mad_bit_length(&start, ptr);
707}
708
709/*
710 * NAME: III_scalefactors()
711 * DESCRIPTION: decode channel scalefactors of one granule from a bitstream
712 */
713static
714unsigned int III_scalefactors(struct mad_bitptr *ptr, struct channel *channel,
715 struct channel const *gr0ch, unsigned int scfsi)
716{
717 struct mad_bitptr start;
718 unsigned int slen1, slen2, sfbi;
719
720 start = *ptr;
721
722 slen1 = sflen_table[channel->scalefac_compress].slen1;
723 slen2 = sflen_table[channel->scalefac_compress].slen2;
724
725 if (channel->block_type == 2) {
726 unsigned int nsfb;
727
728 sfbi = 0;
729
730 nsfb = (channel->flags & mixed_block_flag) ? 8 + 3 * 3 : 6 * 3;
731 while (nsfb--)
732 channel->scalefac[sfbi++] = mad_bit_read(ptr, slen1);
733
734 nsfb = 6 * 3;
735 while (nsfb--)
736 channel->scalefac[sfbi++] = mad_bit_read(ptr, slen2);
737
738 nsfb = 1 * 3;
739 while (nsfb--)
740 channel->scalefac[sfbi++] = 0;
741 }
742 else { /* channel->block_type != 2 */
743 if (scfsi & 0x8) {
744 for (sfbi = 0; sfbi < 6; ++sfbi)
745 channel->scalefac[sfbi] = gr0ch->scalefac[sfbi];
746 }
747 else {
748 for (sfbi = 0; sfbi < 6; ++sfbi)
749 channel->scalefac[sfbi] = mad_bit_read(ptr, slen1);
750 }
751
752 if (scfsi & 0x4) {
753 for (sfbi = 6; sfbi < 11; ++sfbi)
754 channel->scalefac[sfbi] = gr0ch->scalefac[sfbi];
755 }
756 else {
757 for (sfbi = 6; sfbi < 11; ++sfbi)
758 channel->scalefac[sfbi] = mad_bit_read(ptr, slen1);
759 }
760
761 if (scfsi & 0x2) {
762 for (sfbi = 11; sfbi < 16; ++sfbi)
763 channel->scalefac[sfbi] = gr0ch->scalefac[sfbi];
764 }
765 else {
766 for (sfbi = 11; sfbi < 16; ++sfbi)
767 channel->scalefac[sfbi] = mad_bit_read(ptr, slen2);
768 }
769
770 if (scfsi & 0x1) {
771 for (sfbi = 16; sfbi < 21; ++sfbi)
772 channel->scalefac[sfbi] = gr0ch->scalefac[sfbi];
773 }
774 else {
775 for (sfbi = 16; sfbi < 21; ++sfbi)
776 channel->scalefac[sfbi] = mad_bit_read(ptr, slen2);
777 }
778
779 channel->scalefac[21] = 0;
780 }
781
782 return mad_bit_length(&start, ptr);
783}
784
785/*
786 * The Layer III formula for requantization and scaling is defined by
787 * section 2.4.3.4.7.1 of ISO/IEC 11172-3, as follows:
788 *
789 * long blocks:
790 * xr[i] = sign(is[i]) * abs(is[i])^(4/3) *
791 * 2^((1/4) * (global_gain - 210)) *
792 * 2^-(scalefac_multiplier *
793 * (scalefac_l[sfb] + preflag * pretab[sfb]))
794 *
795 * short blocks:
796 * xr[i] = sign(is[i]) * abs(is[i])^(4/3) *
797 * 2^((1/4) * (global_gain - 210 - 8 * subblock_gain[w])) *
798 * 2^-(scalefac_multiplier * scalefac_s[sfb][w])
799 *
800 * where:
801 * scalefac_multiplier = (scalefac_scale + 1) / 2
802 *
803 * The routines III_exponents() and III_requantize() facilitate this
804 * calculation.
805 */
806
807/*
808 * NAME: III_exponents()
809 * DESCRIPTION: calculate scalefactor exponents
810 */
811static
812void III_exponents(struct channel const *channel,
813 unsigned char const *sfbwidth, signed int exponents[39])
814{
815 signed int gain;
816 unsigned int scalefac_multiplier, sfbi;
817
818 gain = (signed int) channel->global_gain - 210;
819 scalefac_multiplier = (channel->flags & scalefac_scale) ? 2 : 1;
820
821 if (channel->block_type == 2) {
822 unsigned int l;
823 signed int gain0, gain1, gain2;
824
825 sfbi = l = 0;
826
827 if (channel->flags & mixed_block_flag) {
828 unsigned int premask;
829
830 premask = (channel->flags & preflag) ? ~0 : 0;
831
832 /* long block subbands 0-1 */
833
834 while (l < 36) {
835 exponents[sfbi] = gain -
836 (signed int) ((channel->scalefac[sfbi] + (pretab[sfbi] & premask)) <<
837 scalefac_multiplier);
838
839 l += sfbwidth[sfbi++];
840 }
841 }
842
843 /* this is probably wrong for 8000 Hz short/mixed blocks */
844
845 gain0 = gain - 8 * (signed int) channel->subblock_gain[0];
846 gain1 = gain - 8 * (signed int) channel->subblock_gain[1];
847 gain2 = gain - 8 * (signed int) channel->subblock_gain[2];
848
849 while (l < 576) {
850 exponents[sfbi + 0] = gain0 -
851 (signed int) (channel->scalefac[sfbi + 0] << scalefac_multiplier);
852 exponents[sfbi + 1] = gain1 -
853 (signed int) (channel->scalefac[sfbi + 1] << scalefac_multiplier);
854 exponents[sfbi + 2] = gain2 -
855 (signed int) (channel->scalefac[sfbi + 2] << scalefac_multiplier);
856
857 l += 3 * sfbwidth[sfbi];
858 sfbi += 3;
859 }
860 }
861 else { /* channel->block_type != 2 */
862 if (channel->flags & preflag) {
863 for (sfbi = 0; sfbi < 22; ++sfbi) {
864 exponents[sfbi] = gain -
865 (signed int) ((channel->scalefac[sfbi] + pretab[sfbi]) <<
866 scalefac_multiplier);
867 }
868 }
869 else {
870 for (sfbi = 0; sfbi < 22; ++sfbi) {
871 exponents[sfbi] = gain -
872 (signed int) (channel->scalefac[sfbi] << scalefac_multiplier);
873 }
874 }
875 }
876}
877
878/*
879 * NAME: III_requantize()
880 * DESCRIPTION: requantize one (positive) value
881 */
882static
883mad_fixed_t III_requantize(unsigned int value, signed int exp)
884{
885 mad_fixed_t requantized;
886 signed int frac;
887 struct fixedfloat const *power;
888
889 frac = exp % 4; /* assumes sign(frac) == sign(exp) */
890 exp /= 4;
891
892 power = &rq_table[value];
893 requantized = power->mantissa;
894 exp += power->exponent;
895
896 if (exp < 0) {
897 if (-exp >= sizeof(mad_fixed_t) * CHAR_BIT) {
898 /* underflow */
899 requantized = 0;
900 }
901 else {
902 requantized += 1L << (-exp - 1);
903 requantized >>= -exp;
904 }
905 }
906 else {
907 if (exp >= 5) {
908 /* overflow */
909# if defined(DEBUG)
910 fprintf(stderr, "requantize overflow (%f * 2^%d)\n",
911 mad_f_todouble(requantized), exp);
912# endif
913 requantized = MAD_F_MAX;
914 }
915 else
916 requantized <<= exp;
917 }
918
919 return frac ? mad_f_mul(requantized, root_table[3 + frac]) : requantized;
920}
921
922/* we must take care that sz >= bits and sz < sizeof(long) lest bits == 0 */
923# define MASK(cache, sz, bits) \
924 (((cache) >> ((sz) - (bits))) & ((1 << (bits)) - 1))
925# define MASK1BIT(cache, sz) \
926 ((cache) & (1 << ((sz) - 1)))
927
928/*
929 * NAME: III_huffdecode()
930 * DESCRIPTION: decode Huffman code words of one channel of one granule
931 */
932static
933enum mad_error III_huffdecode(struct mad_bitptr *ptr, mad_fixed_t xr[576],
934 struct channel *channel,
935 unsigned char const *sfbwidth,
936 unsigned int part2_length)
937{
938 signed int exponents[39], exp;
939 signed int const *expptr;
940 struct mad_bitptr peek;
941 signed int bits_left, cachesz;
942 register mad_fixed_t *xrptr;
943 mad_fixed_t const *sfbound;
944 register unsigned long bitcache;
945
946 bits_left = (signed) channel->part2_3_length - (signed) part2_length;
947 if (bits_left < 0)
948 return MAD_ERROR_BADPART3LEN;
949
950 III_exponents(channel, sfbwidth, exponents);
951
952 peek = *ptr;
953 mad_bit_skip(ptr, bits_left);
954
955 /* align bit reads to byte boundaries */
956 cachesz = mad_bit_bitsleft(&peek);
957 cachesz += ((32 - 1 - 24) + (24 - cachesz)) & ~7;
958
959 bitcache = mad_bit_read(&peek, cachesz);
960 bits_left -= cachesz;
961
962 xrptr = &xr[0];
963
964 /* big_values */
965 {
966 unsigned int region, rcount;
967 struct hufftable const *entry;
968 union huffpair const *table;
969 unsigned int linbits, startbits, big_values, reqhits;
970 mad_fixed_t reqcache[16];
971
972 sfbound = xrptr + *sfbwidth++;
973 rcount = channel->region0_count + 1;
974
975 entry = &mad_huff_pair_table[channel->table_select[region = 0]];
976 table = entry->table;
977 linbits = entry->linbits;
978 startbits = entry->startbits;
979
980 if (table == 0)
981 return MAD_ERROR_BADHUFFTABLE;
982
983 expptr = &exponents[0];
984 exp = *expptr++;
985 reqhits = 0;
986
987 big_values = channel->big_values;
988
989 while (big_values-- && cachesz + bits_left > 0) {
990 union huffpair const *pair;
991 unsigned int clumpsz, value;
992 register mad_fixed_t requantized;
993
994 if (xrptr == sfbound) {
995 sfbound += *sfbwidth++;
996
997 /* change table if region boundary */
998
999 if (--rcount == 0) {
1000 if (region == 0)
1001 rcount = channel->region1_count + 1;
1002 else
1003 rcount = 0; /* all remaining */
1004
1005 entry = &mad_huff_pair_table[channel->table_select[++region]];
1006 table = entry->table;
1007 linbits = entry->linbits;
1008 startbits = entry->startbits;
1009
1010 if (table == 0)
1011 return MAD_ERROR_BADHUFFTABLE;
1012 }
1013
1014 if (exp != *expptr) {
1015 exp = *expptr;
1016 reqhits = 0;
1017 }
1018
1019 ++expptr;
1020 }
1021
1022 if (cachesz < 21) {
1023 unsigned int bits;
1024
1025 bits = ((32 - 1 - 21) + (21 - cachesz)) & ~7;
1026 bitcache = (bitcache << bits) | mad_bit_read(&peek, bits);
1027 cachesz += bits;
1028 bits_left -= bits;
1029 }
1030
1031 /* hcod (0..19) */
1032
1033 clumpsz = startbits;
1034 pair = &table[MASK(bitcache, cachesz, clumpsz)];
1035
1036 while (!pair->final) {
1037 cachesz -= clumpsz;
1038
1039 clumpsz = pair->ptr.bits;
1040 pair = &table[pair->ptr.offset + MASK(bitcache, cachesz, clumpsz)];
1041 }
1042
1043 cachesz -= pair->value.hlen;
1044
1045 if (linbits) {
1046 /* x (0..14) */
1047
1048 value = pair->value.x;
1049
1050 switch (value) {
1051 case 0:
1052 xrptr[0] = 0;
1053 break;
1054
1055 case 15:
1056 if (cachesz < linbits + 2) {
1057 bitcache = (bitcache << 16) | mad_bit_read(&peek, 16);
1058 cachesz += 16;
1059 bits_left -= 16;
1060 }
1061
1062 value += MASK(bitcache, cachesz, linbits);
1063 cachesz -= linbits;
1064
1065 requantized = III_requantize(value, exp);
1066 goto x_final;
1067
1068 default:
1069 if (reqhits & (1 << value))
1070 requantized = reqcache[value];
1071 else {
1072 reqhits |= (1 << value);
1073 requantized = reqcache[value] = III_requantize(value, exp);
1074 }
1075
1076 x_final:
1077 xrptr[0] = MASK1BIT(bitcache, cachesz--) ?
1078 -requantized : requantized;
1079 }
1080
1081 /* y (0..14) */
1082
1083 value = pair->value.y;
1084
1085 switch (value) {
1086 case 0:
1087 xrptr[1] = 0;
1088 break;
1089
1090 case 15:
1091 if (cachesz < linbits + 1) {
1092 bitcache = (bitcache << 16) | mad_bit_read(&peek, 16);
1093 cachesz += 16;
1094 bits_left -= 16;
1095 }
1096
1097 value += MASK(bitcache, cachesz, linbits);
1098 cachesz -= linbits;
1099
1100 requantized = III_requantize(value, exp);
1101 goto y_final;
1102
1103 default:
1104 if (reqhits & (1 << value))
1105 requantized = reqcache[value];
1106 else {
1107 reqhits |= (1 << value);
1108 requantized = reqcache[value] = III_requantize(value, exp);
1109 }
1110
1111 y_final:
1112 xrptr[1] = MASK1BIT(bitcache, cachesz--) ?
1113 -requantized : requantized;
1114 }
1115 }
1116 else {
1117 /* x (0..1) */
1118
1119 value = pair->value.x;
1120
1121 if (value == 0)
1122 xrptr[0] = 0;
1123 else {
1124 if (reqhits & (1 << value))
1125 requantized = reqcache[value];
1126 else {
1127 reqhits |= (1 << value);
1128 requantized = reqcache[value] = III_requantize(value, exp);
1129 }
1130
1131 xrptr[0] = MASK1BIT(bitcache, cachesz--) ?
1132 -requantized : requantized;
1133 }
1134
1135 /* y (0..1) */
1136
1137 value = pair->value.y;
1138
1139 if (value == 0)
1140 xrptr[1] = 0;
1141 else {
1142 if (reqhits & (1 << value))
1143 requantized = reqcache[value];
1144 else {
1145 reqhits |= (1 << value);
1146 requantized = reqcache[value] = III_requantize(value, exp);
1147 }
1148
1149 xrptr[1] = MASK1BIT(bitcache, cachesz--) ?
1150 -requantized : requantized;
1151 }
1152 }
1153
1154 xrptr += 2;
1155 }
1156 }
1157
1158 if (cachesz + bits_left < 0)
1159 return MAD_ERROR_BADHUFFDATA; /* big_values overrun */
1160
1161 /* count1 */
1162 {
1163 union huffquad const *table;
1164 register mad_fixed_t requantized;
1165
1166 table = mad_huff_quad_table[channel->flags & count1table_select];
1167
1168 requantized = III_requantize(1, exp);
1169
1170 while (cachesz + bits_left > 0 && xrptr <= &xr[572]) {
1171 union huffquad const *quad;
1172
1173 /* hcod (1..6) */
1174
1175 if (cachesz < 10) {
1176 bitcache = (bitcache << 16) | mad_bit_read(&peek, 16);
1177 cachesz += 16;
1178 bits_left -= 16;
1179 }
1180
1181 quad = &table[MASK(bitcache, cachesz, 4)];
1182
1183 /* quad tables guaranteed to have at most one extra lookup */
1184 if (!quad->final) {
1185 cachesz -= 4;
1186
1187 quad = &table[quad->ptr.offset +
1188 MASK(bitcache, cachesz, quad->ptr.bits)];
1189 }
1190
1191 cachesz -= quad->value.hlen;
1192
1193 if (xrptr == sfbound) {
1194 sfbound += *sfbwidth++;
1195
1196 if (exp != *expptr) {
1197 exp = *expptr;
1198 requantized = III_requantize(1, exp);
1199 }
1200
1201 ++expptr;
1202 }
1203
1204 /* v (0..1) */
1205
1206 xrptr[0] = quad->value.v ?
1207 (MASK1BIT(bitcache, cachesz--) ? -requantized : requantized) : 0;
1208
1209 /* w (0..1) */
1210
1211 xrptr[1] = quad->value.w ?
1212 (MASK1BIT(bitcache, cachesz--) ? -requantized : requantized) : 0;
1213
1214 xrptr += 2;
1215
1216 if (xrptr == sfbound) {
1217 sfbound += *sfbwidth++;
1218
1219 if (exp != *expptr) {
1220 exp = *expptr;
1221 requantized = III_requantize(1, exp);
1222 }
1223
1224 ++expptr;
1225 }
1226
1227 /* x (0..1) */
1228
1229 xrptr[0] = quad->value.x ?
1230 (MASK1BIT(bitcache, cachesz--) ? -requantized : requantized) : 0;
1231
1232 /* y (0..1) */
1233
1234 xrptr[1] = quad->value.y ?
1235 (MASK1BIT(bitcache, cachesz--) ? -requantized : requantized) : 0;
1236
1237 xrptr += 2;
1238 }
1239
1240 if (cachesz + bits_left < 0) {
1241# if 0 && defined(DEBUG)
1242 fprintf(stderr, "huffman count1 overrun (%d bits)\n",
1243 -(cachesz + bits_left));
1244# endif
1245
1246 /* technically the bitstream is misformatted, but apparently
1247 some encoders are just a bit sloppy with stuffing bits */
1248
1249 xrptr -= 4;
1250 }
1251 }
1252
1253 assert(-bits_left <= MAD_BUFFER_GUARD * CHAR_BIT);
1254
1255# if 0 && defined(DEBUG)
1256 if (bits_left < 0)
1257 fprintf(stderr, "read %d bits too many\n", -bits_left);
1258 else if (cachesz + bits_left > 0)
1259 fprintf(stderr, "%d stuffing bits\n", cachesz + bits_left);
1260# endif
1261
1262 /* rzero */
1263 while (xrptr < &xr[576]) {
1264 xrptr[0] = 0;
1265 xrptr[1] = 0;
1266
1267 xrptr += 2;
1268 }
1269
1270 return MAD_ERROR_NONE;
1271}
1272
1273# undef MASK
1274# undef MASK1BIT
1275
1276/*
1277 * NAME: III_reorder()
1278 * DESCRIPTION: reorder frequency lines of a short block into subband order
1279 */
1280static
1281void III_reorder(mad_fixed_t xr[576], struct channel const *channel,
1282 unsigned char const sfbwidth[39])
1283{
1284 mad_fixed_t tmp[32][3][6];
1285 unsigned int sb, l, f, w, sbw[3], sw[3];
1286
1287 /* this is probably wrong for 8000 Hz mixed blocks */
1288
1289 sb = 0;
1290 if (channel->flags & mixed_block_flag) {
1291 sb = 2;
1292
1293 l = 0;
1294 while (l < 36)
1295 l += *sfbwidth++;
1296 }
1297
1298 for (w = 0; w < 3; ++w) {
1299 sbw[w] = sb;
1300 sw[w] = 0;
1301 }
1302
1303 f = *sfbwidth++;
1304 w = 0;
1305
1306 for (l = 18 * sb; l < 576; ++l) {
1307 if (f-- == 0) {
1308 f = *sfbwidth++ - 1;
1309 w = (w + 1) % 3;
1310 }
1311
1312 tmp[sbw[w]][w][sw[w]++] = xr[l];
1313
1314 if (sw[w] == 6) {
1315 sw[w] = 0;
1316 ++sbw[w];
1317 }
1318 }
1319
1320 memcpy(&xr[18 * sb], &tmp[sb], (576 - 18 * sb) * sizeof(mad_fixed_t));
1321}
1322
1323/*
1324 * NAME: III_stereo()
1325 * DESCRIPTION: perform joint stereo processing on a granule
1326 */
1327static
1328enum mad_error III_stereo(mad_fixed_t xr[2][576],
1329 struct granule const *granule,
1330 struct mad_header *header,
1331 unsigned char const *sfbwidth)
1332{
1333 short modes[39];
1334 unsigned int sfbi, l, n, i;
1335
1336 if (granule->ch[0].block_type !=
1337 granule->ch[1].block_type ||
1338 (granule->ch[0].flags & mixed_block_flag) !=
1339 (granule->ch[1].flags & mixed_block_flag))
1340 return MAD_ERROR_BADSTEREO;
1341
1342 for (i = 0; i < 39; ++i)
1343 modes[i] = header->mode_extension;
1344
1345 /* intensity stereo */
1346
1347 if (header->mode_extension & I_STEREO) {
1348 struct channel const *right_ch = &granule->ch[1];
1349 mad_fixed_t const *right_xr = xr[1];
1350 unsigned int is_pos;
1351
1352 header->flags |= MAD_FLAG_I_STEREO;
1353
1354 /* first determine which scalefactor bands are to be processed */
1355
1356 if (right_ch->block_type == 2) {
1357 unsigned int lower, start, max, bound[3], w;
1358
1359 lower = start = max = bound[0] = bound[1] = bound[2] = 0;
1360
1361 sfbi = l = 0;
1362
1363 if (right_ch->flags & mixed_block_flag) {
1364 while (l < 36) {
1365 n = sfbwidth[sfbi++];
1366
1367 for (i = 0; i < n; ++i) {
1368 if (right_xr[i]) {
1369 lower = sfbi;
1370 break;
1371 }
1372 }
1373
1374 right_xr += n;
1375 l += n;
1376 }
1377
1378 start = sfbi;
1379 }
1380
1381 w = 0;
1382 while (l < 576) {
1383 n = sfbwidth[sfbi++];
1384
1385 for (i = 0; i < n; ++i) {
1386 if (right_xr[i]) {
1387 max = bound[w] = sfbi;
1388 break;
1389 }
1390 }
1391
1392 right_xr += n;
1393 l += n;
1394 w = (w + 1) % 3;
1395 }
1396
1397 if (max)
1398 lower = start;
1399
1400 /* long blocks */
1401
1402 for (i = 0; i < lower; ++i)
1403 modes[i] = header->mode_extension & ~I_STEREO;
1404
1405 /* short blocks */
1406
1407 w = 0;
1408 for (i = start; i < max; ++i) {
1409 if (i < bound[w])
1410 modes[i] = header->mode_extension & ~I_STEREO;
1411
1412 w = (w + 1) % 3;
1413 }
1414 }
1415 else { /* right_ch->block_type != 2 */
1416 unsigned int bound;
1417
1418 bound = 0;
1419 for (sfbi = l = 0; l < 576; l += n) {
1420 n = sfbwidth[sfbi++];
1421
1422 for (i = 0; i < n; ++i) {
1423 if (right_xr[i]) {
1424 bound = sfbi;
1425 break;
1426 }
1427 }
1428
1429 right_xr += n;
1430 }
1431
1432 for (i = 0; i < bound; ++i)
1433 modes[i] = header->mode_extension & ~I_STEREO;
1434 }
1435
1436 /* now do the actual processing */
1437
1438 if (header->flags & MAD_FLAG_LSF_EXT) {
1439 unsigned char const *illegal_pos = granule[1].ch[1].scalefac;
1440 mad_fixed_t const *lsf_scale;
1441
1442 /* intensity_scale */
1443 lsf_scale = is_lsf_table[right_ch->scalefac_compress & 0x1];
1444
1445 for (sfbi = l = 0; l < 576; ++sfbi, l += n) {
1446 n = sfbwidth[sfbi];
1447
1448 if (!(modes[sfbi] & I_STEREO))
1449 continue;
1450
1451 if (illegal_pos[sfbi]) {
1452 modes[sfbi] &= ~I_STEREO;
1453 continue;
1454 }
1455
1456 is_pos = right_ch->scalefac[sfbi];
1457
1458 for (i = 0; i < n; ++i) {
1459 register mad_fixed_t left;
1460
1461 left = xr[0][l + i];
1462
1463 if (is_pos == 0)
1464 xr[1][l + i] = left;
1465 else {
1466 register mad_fixed_t opposite;
1467
1468 opposite = mad_f_mul(left, lsf_scale[(is_pos - 1) / 2]);
1469
1470 if (is_pos & 1) {
1471 xr[0][l + i] = opposite;
1472 xr[1][l + i] = left;
1473 }
1474 else
1475 xr[1][l + i] = opposite;
1476 }
1477 }
1478 }
1479 }
1480 else { /* !(header->flags & MAD_FLAG_LSF_EXT) */
1481 for (sfbi = l = 0; l < 576; ++sfbi, l += n) {
1482 n = sfbwidth[sfbi];
1483
1484 if (!(modes[sfbi] & I_STEREO))
1485 continue;
1486
1487 is_pos = right_ch->scalefac[sfbi];
1488
1489 if (is_pos >= 7) { /* illegal intensity position */
1490 modes[sfbi] &= ~I_STEREO;
1491 continue;
1492 }
1493
1494 for (i = 0; i < n; ++i) {
1495 register mad_fixed_t left;
1496
1497 left = xr[0][l + i];
1498
1499 xr[0][l + i] = mad_f_mul(left, is_table[ is_pos]);
1500 xr[1][l + i] = mad_f_mul(left, is_table[6 - is_pos]);
1501 }
1502 }
1503 }
1504 }
1505
1506 /* middle/side stereo */
1507
1508 if (header->mode_extension & MS_STEREO) {
1509 register mad_fixed_t invsqrt2;
1510
1511 header->flags |= MAD_FLAG_MS_STEREO;
1512
1513 invsqrt2 = root_table[3 + -2];
1514
1515 for (sfbi = l = 0; l < 576; ++sfbi, l += n) {
1516 n = sfbwidth[sfbi];
1517
1518 if (modes[sfbi] != MS_STEREO)
1519 continue;
1520
1521 for (i = 0; i < n; ++i) {
1522 register mad_fixed_t m, s;
1523
1524 m = xr[0][l + i];
1525 s = xr[1][l + i];
1526
1527 xr[0][l + i] = mad_f_mul(m + s, invsqrt2); /* l = (m + s) / sqrt(2) */
1528 xr[1][l + i] = mad_f_mul(m - s, invsqrt2); /* r = (m - s) / sqrt(2) */
1529 }
1530 }
1531 }
1532
1533 return MAD_ERROR_NONE;
1534}
1535
1536/*
1537 * NAME: III_aliasreduce()
1538 * DESCRIPTION: perform frequency line alias reduction
1539 */
1540static
1541void III_aliasreduce(mad_fixed_t xr[576], int lines)
1542{
1543 mad_fixed_t const *bound;
1544 int i;
1545
1546 bound = &xr[lines];
1547 for (xr += 18; xr < bound; xr += 18) {
1548 for (i = 0; i < 8; ++i) {
1549 register mad_fixed_t a, b;
1550 register mad_fixed64hi_t hi;
1551 register mad_fixed64lo_t lo;
1552
1553 a = xr[-1 - i];
1554 b = xr[ i];
1555
1556# if defined(ASO_ZEROCHECK)
1557 if (a | b) {
1558# endif
1559 MAD_F_ML0(hi, lo, a, cs[i]);
1560 MAD_F_MLA(hi, lo, -b, ca[i]);
1561
1562 xr[-1 - i] = MAD_F_MLZ(hi, lo);
1563
1564 MAD_F_ML0(hi, lo, b, cs[i]);
1565 MAD_F_MLA(hi, lo, a, ca[i]);
1566
1567 xr[ i] = MAD_F_MLZ(hi, lo);
1568# if defined(ASO_ZEROCHECK)
1569 }
1570# endif
1571 }
1572 }
1573}
1574
1575# if defined(ASO_IMDCT)
1576void III_imdct_l(mad_fixed_t const [18], mad_fixed_t [36], unsigned int);
1577# else
1578/*
1579 * NAME: imdct36
1580 * DESCRIPTION: perform X[18]->x[36] IMDCT
1581 */
1582static inline
1583void imdct36(mad_fixed_t const X[18], mad_fixed_t x[36])
1584{
1585 mad_fixed_t t0, t1, t2, t3, t4, t5, t6, t7;
1586 mad_fixed_t t8, t9, t10, t11, t12, t13, t14, t15;
1587 register mad_fixed64hi_t hi;
1588 register mad_fixed64lo_t lo;
1589
1590 MAD_F_ML0(hi, lo, X[4], MAD_F(0x0ec835e8));
1591 MAD_F_MLA(hi, lo, X[13], MAD_F(0x061f78aa));
1592
1593 t6 = MAD_F_MLZ(hi, lo);
1594
1595 MAD_F_MLA(hi, lo, (t14 = X[1] - X[10]), -MAD_F(0x061f78aa));
1596 MAD_F_MLA(hi, lo, (t15 = X[7] + X[16]), -MAD_F(0x0ec835e8));
1597
1598 t0 = MAD_F_MLZ(hi, lo);
1599
1600 MAD_F_MLA(hi, lo, (t8 = X[0] - X[11] - X[12]), MAD_F(0x0216a2a2));
1601 MAD_F_MLA(hi, lo, (t9 = X[2] - X[9] - X[14]), MAD_F(0x09bd7ca0));
1602 MAD_F_MLA(hi, lo, (t10 = X[3] - X[8] - X[15]), -MAD_F(0x0cb19346));
1603 MAD_F_MLA(hi, lo, (t11 = X[5] - X[6] - X[17]), -MAD_F(0x0fdcf549));
1604
1605 x[7] = MAD_F_MLZ(hi, lo);
1606 x[10] = -x[7];
1607
1608 MAD_F_ML0(hi, lo, t8, -MAD_F(0x0cb19346));
1609 MAD_F_MLA(hi, lo, t9, MAD_F(0x0fdcf549));
1610 MAD_F_MLA(hi, lo, t10, MAD_F(0x0216a2a2));
1611 MAD_F_MLA(hi, lo, t11, -MAD_F(0x09bd7ca0));
1612
1613 x[19] = x[34] = MAD_F_MLZ(hi, lo) - t0;
1614
1615 t12 = X[0] - X[3] + X[8] - X[11] - X[12] + X[15];
1616 t13 = X[2] + X[5] - X[6] - X[9] - X[14] - X[17];
1617
1618 MAD_F_ML0(hi, lo, t12, -MAD_F(0x0ec835e8));
1619 MAD_F_MLA(hi, lo, t13, MAD_F(0x061f78aa));
1620
1621 x[22] = x[31] = MAD_F_MLZ(hi, lo) + t0;
1622
1623 MAD_F_ML0(hi, lo, X[1], -MAD_F(0x09bd7ca0));
1624 MAD_F_MLA(hi, lo, X[7], MAD_F(0x0216a2a2));
1625 MAD_F_MLA(hi, lo, X[10], -MAD_F(0x0fdcf549));
1626 MAD_F_MLA(hi, lo, X[16], MAD_F(0x0cb19346));
1627
1628 t1 = MAD_F_MLZ(hi, lo) + t6;
1629
1630 MAD_F_ML0(hi, lo, X[0], MAD_F(0x03768962));
1631 MAD_F_MLA(hi, lo, X[2], MAD_F(0x0e313245));
1632 MAD_F_MLA(hi, lo, X[3], -MAD_F(0x0ffc19fd));
1633 MAD_F_MLA(hi, lo, X[5], -MAD_F(0x0acf37ad));
1634 MAD_F_MLA(hi, lo, X[6], MAD_F(0x04cfb0e2));
1635 MAD_F_MLA(hi, lo, X[8], -MAD_F(0x0898c779));
1636 MAD_F_MLA(hi, lo, X[9], MAD_F(0x0d7e8807));
1637 MAD_F_MLA(hi, lo, X[11], MAD_F(0x0f426cb5));
1638 MAD_F_MLA(hi, lo, X[12], -MAD_F(0x0bcbe352));
1639 MAD_F_MLA(hi, lo, X[14], MAD_F(0x00b2aa3e));
1640 MAD_F_MLA(hi, lo, X[15], -MAD_F(0x07635284));
1641 MAD_F_MLA(hi, lo, X[17], -MAD_F(0x0f9ee890));
1642
1643 x[6] = MAD_F_MLZ(hi, lo) + t1;
1644 x[11] = -x[6];
1645
1646 MAD_F_ML0(hi, lo, X[0], -MAD_F(0x0f426cb5));
1647 MAD_F_MLA(hi, lo, X[2], -MAD_F(0x00b2aa3e));
1648 MAD_F_MLA(hi, lo, X[3], MAD_F(0x0898c779));
1649 MAD_F_MLA(hi, lo, X[5], MAD_F(0x0f9ee890));
1650 MAD_F_MLA(hi, lo, X[6], MAD_F(0x0acf37ad));
1651 MAD_F_MLA(hi, lo, X[8], -MAD_F(0x07635284));
1652 MAD_F_MLA(hi, lo, X[9], -MAD_F(0x0e313245));
1653 MAD_F_MLA(hi, lo, X[11], -MAD_F(0x0bcbe352));
1654 MAD_F_MLA(hi, lo, X[12], -MAD_F(0x03768962));
1655 MAD_F_MLA(hi, lo, X[14], MAD_F(0x0d7e8807));
1656 MAD_F_MLA(hi, lo, X[15], MAD_F(0x0ffc19fd));
1657 MAD_F_MLA(hi, lo, X[17], MAD_F(0x04cfb0e2));
1658
1659 x[23] = x[30] = MAD_F_MLZ(hi, lo) + t1;
1660
1661 MAD_F_ML0(hi, lo, X[0], -MAD_F(0x0bcbe352));
1662 MAD_F_MLA(hi, lo, X[2], MAD_F(0x0d7e8807));
1663 MAD_F_MLA(hi, lo, X[3], -MAD_F(0x07635284));
1664 MAD_F_MLA(hi, lo, X[5], MAD_F(0x04cfb0e2));
1665 MAD_F_MLA(hi, lo, X[6], MAD_F(0x0f9ee890));
1666 MAD_F_MLA(hi, lo, X[8], -MAD_F(0x0ffc19fd));
1667 MAD_F_MLA(hi, lo, X[9], -MAD_F(0x00b2aa3e));
1668 MAD_F_MLA(hi, lo, X[11], MAD_F(0x03768962));
1669 MAD_F_MLA(hi, lo, X[12], -MAD_F(0x0f426cb5));
1670 MAD_F_MLA(hi, lo, X[14], MAD_F(0x0e313245));
1671 MAD_F_MLA(hi, lo, X[15], MAD_F(0x0898c779));
1672 MAD_F_MLA(hi, lo, X[17], -MAD_F(0x0acf37ad));
1673
1674 x[18] = x[35] = MAD_F_MLZ(hi, lo) - t1;
1675
1676 MAD_F_ML0(hi, lo, X[4], MAD_F(0x061f78aa));
1677 MAD_F_MLA(hi, lo, X[13], -MAD_F(0x0ec835e8));
1678
1679 t7 = MAD_F_MLZ(hi, lo);
1680
1681 MAD_F_MLA(hi, lo, X[1], -MAD_F(0x0cb19346));
1682 MAD_F_MLA(hi, lo, X[7], MAD_F(0x0fdcf549));
1683 MAD_F_MLA(hi, lo, X[10], MAD_F(0x0216a2a2));
1684 MAD_F_MLA(hi, lo, X[16], -MAD_F(0x09bd7ca0));
1685
1686 t2 = MAD_F_MLZ(hi, lo);
1687
1688 MAD_F_MLA(hi, lo, X[0], MAD_F(0x04cfb0e2));
1689 MAD_F_MLA(hi, lo, X[2], MAD_F(0x0ffc19fd));
1690 MAD_F_MLA(hi, lo, X[3], -MAD_F(0x0d7e8807));
1691 MAD_F_MLA(hi, lo, X[5], MAD_F(0x03768962));
1692 MAD_F_MLA(hi, lo, X[6], -MAD_F(0x0bcbe352));
1693 MAD_F_MLA(hi, lo, X[8], -MAD_F(0x0e313245));
1694 MAD_F_MLA(hi, lo, X[9], MAD_F(0x07635284));
1695 MAD_F_MLA(hi, lo, X[11], -MAD_F(0x0acf37ad));
1696 MAD_F_MLA(hi, lo, X[12], MAD_F(0x0f9ee890));
1697 MAD_F_MLA(hi, lo, X[14], MAD_F(0x0898c779));
1698 MAD_F_MLA(hi, lo, X[15], MAD_F(0x00b2aa3e));
1699 MAD_F_MLA(hi, lo, X[17], MAD_F(0x0f426cb5));
1700
1701 x[5] = MAD_F_MLZ(hi, lo);
1702 x[12] = -x[5];
1703
1704 MAD_F_ML0(hi, lo, X[0], MAD_F(0x0acf37ad));
1705 MAD_F_MLA(hi, lo, X[2], -MAD_F(0x0898c779));
1706 MAD_F_MLA(hi, lo, X[3], MAD_F(0x0e313245));
1707 MAD_F_MLA(hi, lo, X[5], -MAD_F(0x0f426cb5));
1708 MAD_F_MLA(hi, lo, X[6], -MAD_F(0x03768962));
1709 MAD_F_MLA(hi, lo, X[8], MAD_F(0x00b2aa3e));
1710 MAD_F_MLA(hi, lo, X[9], -MAD_F(0x0ffc19fd));
1711 MAD_F_MLA(hi, lo, X[11], MAD_F(0x0f9ee890));
1712 MAD_F_MLA(hi, lo, X[12], -MAD_F(0x04cfb0e2));
1713 MAD_F_MLA(hi, lo, X[14], MAD_F(0x07635284));
1714 MAD_F_MLA(hi, lo, X[15], MAD_F(0x0d7e8807));
1715 MAD_F_MLA(hi, lo, X[17], -MAD_F(0x0bcbe352));
1716
1717 x[0] = MAD_F_MLZ(hi, lo) + t2;
1718 x[17] = -x[0];
1719
1720 MAD_F_ML0(hi, lo, X[0], -MAD_F(0x0f9ee890));
1721 MAD_F_MLA(hi, lo, X[2], -MAD_F(0x07635284));
1722 MAD_F_MLA(hi, lo, X[3], -MAD_F(0x00b2aa3e));
1723 MAD_F_MLA(hi, lo, X[5], MAD_F(0x0bcbe352));
1724 MAD_F_MLA(hi, lo, X[6], MAD_F(0x0f426cb5));
1725 MAD_F_MLA(hi, lo, X[8], MAD_F(0x0d7e8807));
1726 MAD_F_MLA(hi, lo, X[9], MAD_F(0x0898c779));
1727 MAD_F_MLA(hi, lo, X[11], -MAD_F(0x04cfb0e2));
1728 MAD_F_MLA(hi, lo, X[12], -MAD_F(0x0acf37ad));
1729 MAD_F_MLA(hi, lo, X[14], -MAD_F(0x0ffc19fd));
1730 MAD_F_MLA(hi, lo, X[15], -MAD_F(0x0e313245));
1731 MAD_F_MLA(hi, lo, X[17], -MAD_F(0x03768962));
1732
1733 x[24] = x[29] = MAD_F_MLZ(hi, lo) + t2;
1734
1735 MAD_F_ML0(hi, lo, X[1], -MAD_F(0x0216a2a2));
1736 MAD_F_MLA(hi, lo, X[7], -MAD_F(0x09bd7ca0));
1737 MAD_F_MLA(hi, lo, X[10], MAD_F(0x0cb19346));
1738 MAD_F_MLA(hi, lo, X[16], MAD_F(0x0fdcf549));
1739
1740 t3 = MAD_F_MLZ(hi, lo) + t7;
1741
1742 MAD_F_ML0(hi, lo, X[0], MAD_F(0x00b2aa3e));
1743 MAD_F_MLA(hi, lo, X[2], MAD_F(0x03768962));
1744 MAD_F_MLA(hi, lo, X[3], -MAD_F(0x04cfb0e2));
1745 MAD_F_MLA(hi, lo, X[5], -MAD_F(0x07635284));
1746 MAD_F_MLA(hi, lo, X[6], MAD_F(0x0898c779));
1747 MAD_F_MLA(hi, lo, X[8], MAD_F(0x0acf37ad));
1748 MAD_F_MLA(hi, lo, X[9], -MAD_F(0x0bcbe352));
1749 MAD_F_MLA(hi, lo, X[11], -MAD_F(0x0d7e8807));
1750 MAD_F_MLA(hi, lo, X[12], MAD_F(0x0e313245));
1751 MAD_F_MLA(hi, lo, X[14], MAD_F(0x0f426cb5));
1752 MAD_F_MLA(hi, lo, X[15], -MAD_F(0x0f9ee890));
1753 MAD_F_MLA(hi, lo, X[17], -MAD_F(0x0ffc19fd));
1754
1755 x[8] = MAD_F_MLZ(hi, lo) + t3;
1756 x[9] = -x[8];
1757
1758 MAD_F_ML0(hi, lo, X[0], -MAD_F(0x0e313245));
1759 MAD_F_MLA(hi, lo, X[2], MAD_F(0x0bcbe352));
1760 MAD_F_MLA(hi, lo, X[3], MAD_F(0x0f9ee890));
1761 MAD_F_MLA(hi, lo, X[5], -MAD_F(0x0898c779));
1762 MAD_F_MLA(hi, lo, X[6], -MAD_F(0x0ffc19fd));
1763 MAD_F_MLA(hi, lo, X[8], MAD_F(0x04cfb0e2));
1764 MAD_F_MLA(hi, lo, X[9], MAD_F(0x0f426cb5));
1765 MAD_F_MLA(hi, lo, X[11], -MAD_F(0x00b2aa3e));
1766 MAD_F_MLA(hi, lo, X[12], -MAD_F(0x0d7e8807));
1767 MAD_F_MLA(hi, lo, X[14], -MAD_F(0x03768962));
1768 MAD_F_MLA(hi, lo, X[15], MAD_F(0x0acf37ad));
1769 MAD_F_MLA(hi, lo, X[17], MAD_F(0x07635284));
1770
1771 x[21] = x[32] = MAD_F_MLZ(hi, lo) + t3;
1772
1773 MAD_F_ML0(hi, lo, X[0], -MAD_F(0x0d7e8807));
1774 MAD_F_MLA(hi, lo, X[2], MAD_F(0x0f426cb5));
1775 MAD_F_MLA(hi, lo, X[3], MAD_F(0x0acf37ad));
1776 MAD_F_MLA(hi, lo, X[5], -MAD_F(0x0ffc19fd));
1777 MAD_F_MLA(hi, lo, X[6], -MAD_F(0x07635284));
1778 MAD_F_MLA(hi, lo, X[8], MAD_F(0x0f9ee890));
1779 MAD_F_MLA(hi, lo, X[9], MAD_F(0x03768962));
1780 MAD_F_MLA(hi, lo, X[11], -MAD_F(0x0e313245));
1781 MAD_F_MLA(hi, lo, X[12], MAD_F(0x00b2aa3e));
1782 MAD_F_MLA(hi, lo, X[14], MAD_F(0x0bcbe352));
1783 MAD_F_MLA(hi, lo, X[15], -MAD_F(0x04cfb0e2));
1784 MAD_F_MLA(hi, lo, X[17], -MAD_F(0x0898c779));
1785
1786 x[20] = x[33] = MAD_F_MLZ(hi, lo) - t3;
1787
1788 MAD_F_ML0(hi, lo, t14, -MAD_F(0x0ec835e8));
1789 MAD_F_MLA(hi, lo, t15, MAD_F(0x061f78aa));
1790
1791 t4 = MAD_F_MLZ(hi, lo) - t7;
1792
1793 MAD_F_ML0(hi, lo, t12, MAD_F(0x061f78aa));
1794 MAD_F_MLA(hi, lo, t13, MAD_F(0x0ec835e8));
1795
1796 x[4] = MAD_F_MLZ(hi, lo) + t4;
1797 x[13] = -x[4];
1798
1799 MAD_F_ML0(hi, lo, t8, MAD_F(0x09bd7ca0));
1800 MAD_F_MLA(hi, lo, t9, -MAD_F(0x0216a2a2));
1801 MAD_F_MLA(hi, lo, t10, MAD_F(0x0fdcf549));
1802 MAD_F_MLA(hi, lo, t11, -MAD_F(0x0cb19346));
1803
1804 x[1] = MAD_F_MLZ(hi, lo) + t4;
1805 x[16] = -x[1];
1806
1807 MAD_F_ML0(hi, lo, t8, -MAD_F(0x0fdcf549));
1808 MAD_F_MLA(hi, lo, t9, -MAD_F(0x0cb19346));
1809 MAD_F_MLA(hi, lo, t10, -MAD_F(0x09bd7ca0));
1810 MAD_F_MLA(hi, lo, t11, -MAD_F(0x0216a2a2));
1811
1812 x[25] = x[28] = MAD_F_MLZ(hi, lo) + t4;
1813
1814 MAD_F_ML0(hi, lo, X[1], -MAD_F(0x0fdcf549));
1815 MAD_F_MLA(hi, lo, X[7], -MAD_F(0x0cb19346));
1816 MAD_F_MLA(hi, lo, X[10], -MAD_F(0x09bd7ca0));
1817 MAD_F_MLA(hi, lo, X[16], -MAD_F(0x0216a2a2));
1818
1819 t5 = MAD_F_MLZ(hi, lo) - t6;
1820
1821 MAD_F_ML0(hi, lo, X[0], MAD_F(0x0898c779));
1822 MAD_F_MLA(hi, lo, X[2], MAD_F(0x04cfb0e2));
1823 MAD_F_MLA(hi, lo, X[3], MAD_F(0x0bcbe352));
1824 MAD_F_MLA(hi, lo, X[5], MAD_F(0x00b2aa3e));
1825 MAD_F_MLA(hi, lo, X[6], MAD_F(0x0e313245));
1826 MAD_F_MLA(hi, lo, X[8], -MAD_F(0x03768962));
1827 MAD_F_MLA(hi, lo, X[9], MAD_F(0x0f9ee890));
1828 MAD_F_MLA(hi, lo, X[11], -MAD_F(0x07635284));
1829 MAD_F_MLA(hi, lo, X[12], MAD_F(0x0ffc19fd));
1830 MAD_F_MLA(hi, lo, X[14], -MAD_F(0x0acf37ad));
1831 MAD_F_MLA(hi, lo, X[15], MAD_F(0x0f426cb5));
1832 MAD_F_MLA(hi, lo, X[17], -MAD_F(0x0d7e8807));
1833
1834 x[2] = MAD_F_MLZ(hi, lo) + t5;
1835 x[15] = -x[2];
1836
1837 MAD_F_ML0(hi, lo, X[0], MAD_F(0x07635284));
1838 MAD_F_MLA(hi, lo, X[2], MAD_F(0x0acf37ad));
1839 MAD_F_MLA(hi, lo, X[3], MAD_F(0x03768962));
1840 MAD_F_MLA(hi, lo, X[5], MAD_F(0x0d7e8807));
1841 MAD_F_MLA(hi, lo, X[6], -MAD_F(0x00b2aa3e));
1842 MAD_F_MLA(hi, lo, X[8], MAD_F(0x0f426cb5));
1843 MAD_F_MLA(hi, lo, X[9], -MAD_F(0x04cfb0e2));
1844 MAD_F_MLA(hi, lo, X[11], MAD_F(0x0ffc19fd));
1845 MAD_F_MLA(hi, lo, X[12], -MAD_F(0x0898c779));
1846 MAD_F_MLA(hi, lo, X[14], MAD_F(0x0f9ee890));
1847 MAD_F_MLA(hi, lo, X[15], -MAD_F(0x0bcbe352));
1848 MAD_F_MLA(hi, lo, X[17], MAD_F(0x0e313245));
1849
1850 x[3] = MAD_F_MLZ(hi, lo) + t5;
1851 x[14] = -x[3];
1852
1853 MAD_F_ML0(hi, lo, X[0], -MAD_F(0x0ffc19fd));
1854 MAD_F_MLA(hi, lo, X[2], -MAD_F(0x0f9ee890));
1855 MAD_F_MLA(hi, lo, X[3], -MAD_F(0x0f426cb5));
1856 MAD_F_MLA(hi, lo, X[5], -MAD_F(0x0e313245));
1857 MAD_F_MLA(hi, lo, X[6], -MAD_F(0x0d7e8807));
1858 MAD_F_MLA(hi, lo, X[8], -MAD_F(0x0bcbe352));
1859 MAD_F_MLA(hi, lo, X[9], -MAD_F(0x0acf37ad));
1860 MAD_F_MLA(hi, lo, X[11], -MAD_F(0x0898c779));
1861 MAD_F_MLA(hi, lo, X[12], -MAD_F(0x07635284));
1862 MAD_F_MLA(hi, lo, X[14], -MAD_F(0x04cfb0e2));
1863 MAD_F_MLA(hi, lo, X[15], -MAD_F(0x03768962));
1864 MAD_F_MLA(hi, lo, X[17], -MAD_F(0x00b2aa3e));
1865
1866 x[26] = x[27] = MAD_F_MLZ(hi, lo) + t5;
1867}
1868
1869/*
1870 * NAME: III_imdct_l()
1871 * DESCRIPTION: perform IMDCT and windowing for long blocks
1872 */
1873static
1874void III_imdct_l(mad_fixed_t const X[18], mad_fixed_t z[36],
1875 unsigned int block_type)
1876{
1877 unsigned int i;
1878
1879 /* IMDCT */
1880
1881 imdct36(X, z);
1882
1883 /* windowing */
1884
1885 switch (block_type) {
1886 case 0: /* normal window */
1887# if defined(ASO_INTERLEAVE1)
1888 {
1889 register mad_fixed_t tmp1, tmp2;
1890
1891 tmp1 = window_l[0];
1892 tmp2 = window_l[1];
1893
1894 for (i = 0; i < 34; i += 2) {
1895 z[i + 0] = mad_f_mul(z[i + 0], tmp1);
1896 tmp1 = window_l[i + 2];
1897 z[i + 1] = mad_f_mul(z[i + 1], tmp2);
1898 tmp2 = window_l[i + 3];
1899 }
1900
1901 z[34] = mad_f_mul(z[34], tmp1);
1902 z[35] = mad_f_mul(z[35], tmp2);
1903 }
1904# elif defined(ASO_INTERLEAVE2)
1905 {
1906 register mad_fixed_t tmp1, tmp2;
1907
1908 tmp1 = z[0];
1909 tmp2 = window_l[0];
1910
1911 for (i = 0; i < 35; ++i) {
1912 z[i] = mad_f_mul(tmp1, tmp2);
1913 tmp1 = z[i + 1];
1914 tmp2 = window_l[i + 1];
1915 }
1916
1917 z[35] = mad_f_mul(tmp1, tmp2);
1918 }
1919# elif 1
1920 for (i = 0; i < 36; i += 4) {
1921 z[i + 0] = mad_f_mul(z[i + 0], window_l[i + 0]);
1922 z[i + 1] = mad_f_mul(z[i + 1], window_l[i + 1]);
1923 z[i + 2] = mad_f_mul(z[i + 2], window_l[i + 2]);
1924 z[i + 3] = mad_f_mul(z[i + 3], window_l[i + 3]);
1925 }
1926# else
1927 for (i = 0; i < 36; ++i) z[i] = mad_f_mul(z[i], window_l[i]);
1928# endif
1929 break;
1930
1931 case 1: /* start block */
1932 for (i = 0; i < 18; ++i) z[i] = mad_f_mul(z[i], window_l[i]);
1933 /* (i = 18; i < 24; ++i) z[i] unchanged */
1934 for (i = 24; i < 30; ++i) z[i] = mad_f_mul(z[i], window_s[i - 18]);
1935 for (i = 30; i < 36; ++i) z[i] = 0;
1936 break;
1937
1938 case 3: /* stop block */
1939 for (i = 0; i < 6; ++i) z[i] = 0;
1940 for (i = 6; i < 12; ++i) z[i] = mad_f_mul(z[i], window_s[i - 6]);
1941 /* (i = 12; i < 18; ++i) z[i] unchanged */
1942 for (i = 18; i < 36; ++i) z[i] = mad_f_mul(z[i], window_l[i]);
1943 break;
1944 }
1945}
1946# endif /* ASO_IMDCT */
1947
1948/*
1949 * NAME: III_imdct_s()
1950 * DESCRIPTION: perform IMDCT and windowing for short blocks
1951 */
1952static
1953void III_imdct_s(mad_fixed_t const X[18], mad_fixed_t z[36])
1954{
1955 mad_fixed_t y[36], *yptr;
1956 mad_fixed_t const *wptr;
1957 int w, i;
1958 register mad_fixed64hi_t hi;
1959 register mad_fixed64lo_t lo;
1960
1961 /* IMDCT */
1962
1963 yptr = &y[0];
1964
1965 for (w = 0; w < 3; ++w) {
1966 register mad_fixed_t const (*s)[6];
1967
1968 s = imdct_s;
1969
1970 for (i = 0; i < 3; ++i) {
1971 MAD_F_ML0(hi, lo, X[0], (*s)[0]);
1972 MAD_F_MLA(hi, lo, X[1], (*s)[1]);
1973 MAD_F_MLA(hi, lo, X[2], (*s)[2]);
1974 MAD_F_MLA(hi, lo, X[3], (*s)[3]);
1975 MAD_F_MLA(hi, lo, X[4], (*s)[4]);
1976 MAD_F_MLA(hi, lo, X[5], (*s)[5]);
1977
1978 yptr[i + 0] = MAD_F_MLZ(hi, lo);
1979 yptr[5 - i] = -yptr[i + 0];
1980
1981 ++s;
1982
1983 MAD_F_ML0(hi, lo, X[0], (*s)[0]);
1984 MAD_F_MLA(hi, lo, X[1], (*s)[1]);
1985 MAD_F_MLA(hi, lo, X[2], (*s)[2]);
1986 MAD_F_MLA(hi, lo, X[3], (*s)[3]);
1987 MAD_F_MLA(hi, lo, X[4], (*s)[4]);
1988 MAD_F_MLA(hi, lo, X[5], (*s)[5]);
1989
1990 yptr[ i + 6] = MAD_F_MLZ(hi, lo);
1991 yptr[11 - i] = yptr[i + 6];
1992
1993 ++s;
1994 }
1995
1996 yptr += 12;
1997 X += 6;
1998 }
1999
2000 /* windowing, overlapping and concatenation */
2001
2002 yptr = &y[0];
2003 wptr = &window_s[0];
2004
2005 for (i = 0; i < 6; ++i) {
2006 z[i + 0] = 0;
2007 z[i + 6] = mad_f_mul(yptr[ 0 + 0], wptr[0]);
2008
2009 MAD_F_ML0(hi, lo, yptr[ 0 + 6], wptr[6]);
2010 MAD_F_MLA(hi, lo, yptr[12 + 0], wptr[0]);
2011
2012 z[i + 12] = MAD_F_MLZ(hi, lo);
2013
2014 MAD_F_ML0(hi, lo, yptr[12 + 6], wptr[6]);
2015 MAD_F_MLA(hi, lo, yptr[24 + 0], wptr[0]);
2016
2017 z[i + 18] = MAD_F_MLZ(hi, lo);
2018
2019 z[i + 24] = mad_f_mul(yptr[24 + 6], wptr[6]);
2020 z[i + 30] = 0;
2021
2022 ++yptr;
2023 ++wptr;
2024 }
2025}
2026
2027/*
2028 * NAME: III_overlap()
2029 * DESCRIPTION: perform overlap-add of windowed IMDCT outputs
2030 */
2031static
2032void III_overlap(mad_fixed_t const output[36], mad_fixed_t overlap[18],
2033 mad_fixed_t sample[18][32], unsigned int sb)
2034{
2035 unsigned int i;
2036
2037# if defined(ASO_INTERLEAVE2)
2038 {
2039 register mad_fixed_t tmp1, tmp2;
2040
2041 tmp1 = overlap[0];
2042 tmp2 = overlap[1];
2043
2044 for (i = 0; i < 16; i += 2) {
2045 sample[i + 0][sb] = output[i + 0] + tmp1;
2046 overlap[i + 0] = output[i + 0 + 18];
2047 tmp1 = overlap[i + 2];
2048
2049 sample[i + 1][sb] = output[i + 1] + tmp2;
2050 overlap[i + 1] = output[i + 1 + 18];
2051 tmp2 = overlap[i + 3];
2052 }
2053
2054 sample[16][sb] = output[16] + tmp1;
2055 overlap[16] = output[16 + 18];
2056 sample[17][sb] = output[17] + tmp2;
2057 overlap[17] = output[17 + 18];
2058 }
2059# elif 0
2060 for (i = 0; i < 18; i += 2) {
2061 sample[i + 0][sb] = output[i + 0] + overlap[i + 0];
2062 overlap[i + 0] = output[i + 0 + 18];
2063
2064 sample[i + 1][sb] = output[i + 1] + overlap[i + 1];
2065 overlap[i + 1] = output[i + 1 + 18];
2066 }
2067# else
2068 for (i = 0; i < 18; ++i) {
2069 sample[i][sb] = output[i] + overlap[i];
2070 overlap[i] = output[i + 18];
2071 }
2072# endif
2073}
2074
2075/*
2076 * NAME: III_overlap_z()
2077 * DESCRIPTION: perform "overlap-add" of zero IMDCT outputs
2078 */
2079static inline
2080void III_overlap_z(mad_fixed_t overlap[18],
2081 mad_fixed_t sample[18][32], unsigned int sb)
2082{
2083 unsigned int i;
2084
2085# if defined(ASO_INTERLEAVE2)
2086 {
2087 register mad_fixed_t tmp1, tmp2;
2088
2089 tmp1 = overlap[0];
2090 tmp2 = overlap[1];
2091
2092 for (i = 0; i < 16; i += 2) {
2093 sample[i + 0][sb] = tmp1;
2094 overlap[i + 0] = 0;
2095 tmp1 = overlap[i + 2];
2096
2097 sample[i + 1][sb] = tmp2;
2098 overlap[i + 1] = 0;
2099 tmp2 = overlap[i + 3];
2100 }
2101
2102 sample[16][sb] = tmp1;
2103 overlap[16] = 0;
2104 sample[17][sb] = tmp2;
2105 overlap[17] = 0;
2106 }
2107# else
2108 for (i = 0; i < 18; ++i) {
2109 sample[i][sb] = overlap[i];
2110 overlap[i] = 0;
2111 }
2112# endif
2113}
2114
2115/*
2116 * NAME: III_freqinver()
2117 * DESCRIPTION: perform subband frequency inversion for odd sample lines
2118 */
2119static
2120void III_freqinver(mad_fixed_t sample[18][32], unsigned int sb)
2121{
2122 unsigned int i;
2123
2124# if 1 || defined(ASO_INTERLEAVE1) || defined(ASO_INTERLEAVE2)
2125 {
2126 register mad_fixed_t tmp1, tmp2;
2127
2128 tmp1 = sample[1][sb];
2129 tmp2 = sample[3][sb];
2130
2131 for (i = 1; i < 13; i += 4) {
2132 sample[i + 0][sb] = -tmp1;
2133 tmp1 = sample[i + 4][sb];
2134 sample[i + 2][sb] = -tmp2;
2135 tmp2 = sample[i + 6][sb];
2136 }
2137
2138 sample[13][sb] = -tmp1;
2139 tmp1 = sample[17][sb];
2140 sample[15][sb] = -tmp2;
2141 sample[17][sb] = -tmp1;
2142 }
2143# else
2144 for (i = 1; i < 18; i += 2)
2145 sample[i][sb] = -sample[i][sb];
2146# endif
2147}
2148
2149/*
2150 * NAME: III_decode()
2151 * DESCRIPTION: decode frame main_data
2152 */
2153static
2154enum mad_error III_decode(struct mad_bitptr *ptr, struct mad_frame *frame,
2155 struct sideinfo *si, unsigned int nch)
2156{
2157 struct mad_header *header = &frame->header;
2158 unsigned int sfreqi, ngr, gr;
2159
2160 {
2161 unsigned int sfreq;
2162
2163 sfreq = header->samplerate;
2164 if (header->flags & MAD_FLAG_MPEG_2_5_EXT)
2165 sfreq *= 2;
2166
2167 /* 48000 => 0, 44100 => 1, 32000 => 2,
2168 24000 => 3, 22050 => 4, 16000 => 5 */
2169 sfreqi = ((sfreq >> 7) & 0x000f) +
2170 ((sfreq >> 15) & 0x0001) - 8;
2171
2172 if (header->flags & MAD_FLAG_MPEG_2_5_EXT)
2173 sfreqi += 3;
2174 }
2175
2176 /* scalefactors, Huffman decoding, requantization */
2177
2178 ngr = (header->flags & MAD_FLAG_LSF_EXT) ? 1 : 2;
2179
2180 for (gr = 0; gr < ngr; ++gr) {
2181 struct granule *granule = &si->gr[gr];
2182 unsigned char const *sfbwidth[2];
2183 mad_fixed_t xr[2][576];
2184 unsigned int ch;
2185 enum mad_error error;
2186
2187 for (ch = 0; ch < nch; ++ch) {
2188 struct channel *channel = &granule->ch[ch];
2189 unsigned int part2_length;
2190
2191 sfbwidth[ch] = sfbwidth_table[sfreqi].l;
2192 if (channel->block_type == 2) {
2193 sfbwidth[ch] = (channel->flags & mixed_block_flag) ?
2194 sfbwidth_table[sfreqi].m : sfbwidth_table[sfreqi].s;
2195 }
2196
2197 if (header->flags & MAD_FLAG_LSF_EXT) {
2198 part2_length = III_scalefactors_lsf(ptr, channel,
2199 ch == 0 ? 0 : &si->gr[1].ch[1],
2200 header->mode_extension);
2201 }
2202 else {
2203 part2_length = III_scalefactors(ptr, channel, &si->gr[0].ch[ch],
2204 gr == 0 ? 0 : si->scfsi[ch]);
2205 }
2206
2207 error = III_huffdecode(ptr, xr[ch], channel, sfbwidth[ch], part2_length);
2208 if (error)
2209 return error;
2210 }
2211
2212 /* joint stereo processing */
2213
2214 if (header->mode == MAD_MODE_JOINT_STEREO && header->mode_extension) {
2215 error = III_stereo(xr, granule, header, sfbwidth[0]);
2216 if (error)
2217 return error;
2218 }
2219
2220 /* reordering, alias reduction, IMDCT, overlap-add, frequency inversion */
2221
2222 for (ch = 0; ch < nch; ++ch) {
2223 struct channel const *channel = &granule->ch[ch];
2224 mad_fixed_t (*sample)[32] = &frame->sbsample[ch][18 * gr];
2225 unsigned int sb, l, i, sblimit;
2226 mad_fixed_t output[36];
2227
2228 if (channel->block_type == 2) {
2229 III_reorder(xr[ch], channel, sfbwidth[ch]);
2230
2231# if !defined(OPT_STRICT)
2232 /*
2233 * According to ISO/IEC 11172-3, "Alias reduction is not applied for
2234 * granules with block_type == 2 (short block)." However, other
2235 * sources suggest alias reduction should indeed be performed on the
2236 * lower two subbands of mixed blocks. Most other implementations do
2237 * this, so by default we will too.
2238 */
2239 if (channel->flags & mixed_block_flag)
2240 III_aliasreduce(xr[ch], 36);
2241# endif
2242 }
2243 else
2244 III_aliasreduce(xr[ch], 576);
2245
2246 l = 0;
2247
2248 /* subbands 0-1 */
2249
2250 if (channel->block_type != 2 || (channel->flags & mixed_block_flag)) {
2251 unsigned int block_type;
2252
2253 block_type = channel->block_type;
2254 if (channel->flags & mixed_block_flag)
2255 block_type = 0;
2256
2257 /* long blocks */
2258 for (sb = 0; sb < 2; ++sb, l += 18) {
2259 III_imdct_l(&xr[ch][l], output, block_type);
2260 III_overlap(output, (*frame->overlap)[ch][sb], sample, sb);
2261 }
2262 }
2263 else {
2264 /* short blocks */
2265 for (sb = 0; sb < 2; ++sb, l += 18) {
2266 III_imdct_s(&xr[ch][l], output);
2267 III_overlap(output, (*frame->overlap)[ch][sb], sample, sb);
2268 }
2269 }
2270
2271 III_freqinver(sample, 1);
2272
2273 /* (nonzero) subbands 2-31 */
2274
2275 i = 576;
2276 while (i > 36 && xr[ch][i - 1] == 0)
2277 --i;
2278
2279 sblimit = 32 - (576 - i) / 18;
2280
2281 if (channel->block_type != 2) {
2282 /* long blocks */
2283 for (sb = 2; sb < sblimit; ++sb, l += 18) {
2284 III_imdct_l(&xr[ch][l], output, channel->block_type);
2285 III_overlap(output, (*frame->overlap)[ch][sb], sample, sb);
2286
2287 if (sb & 1)
2288 III_freqinver(sample, sb);
2289 }
2290 }
2291 else {
2292 /* short blocks */
2293 for (sb = 2; sb < sblimit; ++sb, l += 18) {
2294 III_imdct_s(&xr[ch][l], output);
2295 III_overlap(output, (*frame->overlap)[ch][sb], sample, sb);
2296
2297 if (sb & 1)
2298 III_freqinver(sample, sb);
2299 }
2300 }
2301
2302 /* remaining (zero) subbands */
2303
2304 for (sb = sblimit; sb < 32; ++sb) {
2305 III_overlap_z((*frame->overlap)[ch][sb], sample, sb);
2306
2307 if (sb & 1)
2308 III_freqinver(sample, sb);
2309 }
2310 }
2311 }
2312
2313 return MAD_ERROR_NONE;
2314}
2315
2316/*
2317 * NAME: layer->III()
2318 * DESCRIPTION: decode a single Layer III frame
2319 */
2320int mad_layer_III(struct mad_stream *stream, struct mad_frame *frame)
2321{
2322 struct mad_header *header = &frame->header;
2323 unsigned int nch, priv_bitlen, next_md_begin = 0;
2324 unsigned int si_len, data_bitlen, md_len;
2325 unsigned int frame_space, frame_used, frame_free;
2326 struct mad_bitptr ptr;
2327 struct sideinfo si;
2328 enum mad_error error;
2329 int result = 0;
2330
2331 /* allocate Layer III dynamic structures */
2332
2333 if (stream->main_data == 0) {
2334 stream->main_data = malloc(MAD_BUFFER_MDLEN);
2335 if (stream->main_data == 0) {
2336 stream->error = MAD_ERROR_NOMEM;
2337 return -1;
2338 }
2339 }
2340
2341 if (frame->overlap == 0) {
2342 frame->overlap = calloc(2 * 32 * 18, sizeof(mad_fixed_t));
2343 if (frame->overlap == 0) {
2344 stream->error = MAD_ERROR_NOMEM;
2345 return -1;
2346 }
2347 }
2348
2349 nch = MAD_NCHANNELS(header);
2350 si_len = (header->flags & MAD_FLAG_LSF_EXT) ?
2351 (nch == 1 ? 9 : 17) : (nch == 1 ? 17 : 32);
2352
2353 /* check frame sanity */
2354
2355 if (stream->next_frame - mad_bit_nextbyte(&stream->ptr) <
2356 (signed int) si_len) {
2357 stream->error = MAD_ERROR_BADFRAMELEN;
2358 stream->md_len = 0;
2359 return -1;
2360 }
2361
2362 /* check CRC word */
2363
2364 if (header->flags & MAD_FLAG_PROTECTION) {
2365 header->crc_check =
2366 mad_bit_crc(stream->ptr, si_len * CHAR_BIT, header->crc_check);
2367
2368 if (header->crc_check != header->crc_target &&
2369 !(frame->options & MAD_OPTION_IGNORECRC)) {
2370 stream->error = MAD_ERROR_BADCRC;
2371 result = -1;
2372 }
2373 }
2374
2375 /* decode frame side information */
2376
2377 error = III_sideinfo(&stream->ptr, nch, header->flags & MAD_FLAG_LSF_EXT,
2378 &si, &data_bitlen, &priv_bitlen);
2379 if (error && result == 0) {
2380 stream->error = error;
2381 result = -1;
2382 }
2383
2384 header->flags |= priv_bitlen;
2385 header->private_bits |= si.private_bits;
2386
2387 /* find main_data of next frame */
2388
2389 {
2390 struct mad_bitptr peek;
2391 unsigned long header;
2392
2393 mad_bit_init(&peek, stream->next_frame);
2394
2395 header = mad_bit_read(&peek, 32);
2396 if ((header & 0xffe60000L) /* syncword | layer */ == 0xffe20000L) {
2397 if (!(header & 0x00010000L)) /* protection_bit */
2398 mad_bit_skip(&peek, 16); /* crc_check */
2399
2400 next_md_begin =
2401 mad_bit_read(&peek, (header & 0x00080000L) /* ID */ ? 9 : 8);
2402 }
2403
2404 mad_bit_finish(&peek);
2405 }
2406
2407 /* find main_data of this frame */
2408
2409 frame_space = stream->next_frame - mad_bit_nextbyte(&stream->ptr);
2410
2411 if (next_md_begin > si.main_data_begin + frame_space)
2412 next_md_begin = 0;
2413
2414 md_len = si.main_data_begin + frame_space - next_md_begin;
2415
2416 frame_used = 0;
2417
2418 if (si.main_data_begin == 0) {
2419 ptr = stream->ptr;
2420 stream->md_len = 0;
2421
2422 frame_used = md_len;
2423 }
2424 else {
2425 if (si.main_data_begin > stream->md_len) {
2426 if (result == 0) {
2427 stream->error = MAD_ERROR_BADDATAPTR;
2428 result = -1;
2429 }
2430 }
2431 else {
2432 mad_bit_init(&ptr,
2433 *stream->main_data + stream->md_len - si.main_data_begin);
2434
2435 if (md_len > si.main_data_begin) {
2436 assert(stream->md_len + md_len -
2437 si.main_data_begin <= MAD_BUFFER_MDLEN);
2438
2439 memcpy(*stream->main_data + stream->md_len,
2440 mad_bit_nextbyte(&stream->ptr),
2441 frame_used = md_len - si.main_data_begin);
2442 stream->md_len += frame_used;
2443 }
2444 }
2445 }
2446
2447 frame_free = frame_space - frame_used;
2448
2449 /* decode main_data */
2450
2451 if (result == 0) {
2452 error = III_decode(&ptr, frame, &si, nch);
2453 if (error) {
2454 stream->error = error;
2455 result = -1;
2456 }
2457 }
2458
2459 /* designate ancillary bits */
2460
2461 stream->anc_ptr = ptr;
2462 stream->anc_bitlen = md_len * CHAR_BIT - data_bitlen;
2463
2464# if 0 && defined(DEBUG)
2465 fprintf(stderr,
2466 "main_data_begin:%u, md_len:%u, frame_free:%u, "
2467 "data_bitlen:%u, anc_bitlen: %u\n",
2468 si.main_data_begin, md_len, frame_free,
2469 data_bitlen, stream->anc_bitlen);
2470# endif
2471
2472 /* preload main_data buffer with up to 511 bytes for next frame(s) */
2473
2474 if (frame_free >= next_md_begin) {
2475 memcpy(*stream->main_data,
2476 stream->next_frame - next_md_begin, next_md_begin);
2477 stream->md_len = next_md_begin;
2478 }
2479 else {
2480 if (md_len < si.main_data_begin) {
2481 unsigned int extra;
2482
2483 extra = si.main_data_begin - md_len;
2484 if (extra + frame_free > next_md_begin)
2485 extra = next_md_begin - frame_free;
2486
2487 if (extra < stream->md_len) {
2488 memmove(*stream->main_data,
2489 *stream->main_data + stream->md_len - extra, extra);
2490 stream->md_len = extra;
2491 }
2492 }
2493 else
2494 stream->md_len = 0;
2495
2496 memcpy(*stream->main_data + stream->md_len,
2497 stream->next_frame - frame_free, frame_free);
2498 stream->md_len += frame_free;
2499 }
2500
2501 return result;
2502}
diff --git a/uisimulator/common/libmad/layer3.h b/uisimulator/common/libmad/layer3.h
new file mode 100644
index 0000000000..c1a5c695c3
--- /dev/null
+++ b/uisimulator/common/libmad/layer3.h
@@ -0,0 +1,30 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22# ifndef LIBMAD_LAYER3_H
23# define LIBMAD_LAYER3_H
24
25# include "stream.h"
26# include "frame.h"
27
28int mad_layer_III(struct mad_stream *, struct mad_frame *);
29
30# endif
diff --git a/uisimulator/common/libmad/mad.h b/uisimulator/common/libmad/mad.h
new file mode 100644
index 0000000000..7e5a5062e9
--- /dev/null
+++ b/uisimulator/common/libmad/mad.h
@@ -0,0 +1,932 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * If you would like to negotiate alternate licensing terms, you may do
20 * so by contacting the author: Robert Leslie <rob@mars.org>
21 */
22
23# ifdef __cplusplus
24extern "C" {
25# endif
26
27# define FPM_INTEL
28
29# define SIZEOF_INT 4
30# define SIZEOF_LONG 4
31# define SIZEOF_LONG_LONG 8
32
33/* Id: version.h,v 1.20 2001/10/27 22:47:32 rob Exp */
34
35# ifndef LIBMAD_VERSION_H
36# define LIBMAD_VERSION_H
37
38# define MAD_VERSION_MAJOR 0
39# define MAD_VERSION_MINOR 14
40# define MAD_VERSION_PATCH 2
41# define MAD_VERSION_EXTRA " (beta)"
42
43# define MAD_VERSION_STRINGIZE(str) #str
44# define MAD_VERSION_STRING(num) MAD_VERSION_STRINGIZE(num)
45
46# define MAD_VERSION MAD_VERSION_STRING(MAD_VERSION_MAJOR) "." \
47 MAD_VERSION_STRING(MAD_VERSION_MINOR) "." \
48 MAD_VERSION_STRING(MAD_VERSION_PATCH) \
49 MAD_VERSION_EXTRA
50
51# define MAD_PUBLISHYEAR "2000-2001"
52# define MAD_AUTHOR "Robert Leslie"
53# define MAD_EMAIL "rob@mars.org"
54
55extern char const mad_version[];
56extern char const mad_copyright[];
57extern char const mad_author[];
58extern char const mad_build[];
59
60# endif
61
62/* Id: fixed.h,v 1.30 2001/11/02 09:51:06 rob Exp */
63
64# ifndef LIBMAD_FIXED_H
65# define LIBMAD_FIXED_H
66
67# if SIZEOF_INT >= 4
68typedef signed int mad_fixed_t;
69
70typedef signed int mad_fixed64hi_t;
71typedef unsigned int mad_fixed64lo_t;
72# else
73typedef signed long mad_fixed_t;
74
75typedef signed long mad_fixed64hi_t;
76typedef unsigned long mad_fixed64lo_t;
77# endif
78
79# if defined(_MSC_VER)
80# define mad_fixed64_t signed __int64
81# elif 1 || defined(__GNUC__)
82# define mad_fixed64_t signed long long
83# endif
84
85# if defined(FPM_FLOAT)
86typedef double mad_sample_t;
87# else
88typedef mad_fixed_t mad_sample_t;
89# endif
90
91/*
92 * Fixed-point format: 0xABBBBBBB
93 * A == whole part (sign + 3 bits)
94 * B == fractional part (28 bits)
95 *
96 * Values are signed two's complement, so the effective range is:
97 * 0x80000000 to 0x7fffffff
98 * -8.0 to +7.9999999962747097015380859375
99 *
100 * The smallest representable value is:
101 * 0x00000001 == 0.0000000037252902984619140625 (i.e. about 3.725e-9)
102 *
103 * 28 bits of fractional accuracy represent about
104 * 8.6 digits of decimal accuracy.
105 *
106 * Fixed-point numbers can be added or subtracted as normal
107 * integers, but multiplication requires shifting the 64-bit result
108 * from 56 fractional bits back to 28 (and rounding.)
109 *
110 * Changing the definition of MAD_F_FRACBITS is only partially
111 * supported, and must be done with care.
112 */
113
114# define MAD_F_FRACBITS 28
115
116# if MAD_F_FRACBITS == 28
117# define MAD_F(x) ((mad_fixed_t) (x##L))
118# else
119# if MAD_F_FRACBITS < 28
120# warning "MAD_F_FRACBITS < 28"
121# define MAD_F(x) ((mad_fixed_t) \
122 (((x##L) + \
123 (1L << (28 - MAD_F_FRACBITS - 1))) >> \
124 (28 - MAD_F_FRACBITS)))
125# elif MAD_F_FRACBITS > 28
126# error "MAD_F_FRACBITS > 28 not currently supported"
127# define MAD_F(x) ((mad_fixed_t) \
128 ((x##L) << (MAD_F_FRACBITS - 28)))
129# endif
130# endif
131
132# define MAD_F_MIN ((mad_fixed_t) -0x80000000L)
133# define MAD_F_MAX ((mad_fixed_t) +0x7fffffffL)
134
135# define MAD_F_ONE MAD_F(0x10000000)
136
137# define mad_f_tofixed(x) ((mad_fixed_t) \
138 ((x) * (double) (1L << MAD_F_FRACBITS) + 0.5))
139# define mad_f_todouble(x) ((double) \
140 ((x) / (double) (1L << MAD_F_FRACBITS)))
141
142# define mad_f_intpart(x) ((x) >> MAD_F_FRACBITS)
143# define mad_f_fracpart(x) ((x) & ((1L << MAD_F_FRACBITS) - 1))
144 /* (x should be positive) */
145
146# define mad_f_fromint(x) ((x) << MAD_F_FRACBITS)
147
148# define mad_f_add(x, y) ((x) + (y))
149# define mad_f_sub(x, y) ((x) - (y))
150
151# if defined(FPM_FLOAT)
152# error "FPM_FLOAT not yet supported"
153
154# undef MAD_F
155# define MAD_F(x) mad_f_todouble(x)
156
157# define mad_f_mul(x, y) ((x) * (y))
158# define mad_f_scale64
159
160# undef ASO_ZEROCHECK
161
162# elif defined(FPM_64BIT)
163
164/*
165 * This version should be the most accurate if 64-bit types are supported by
166 * the compiler, although it may not be the most efficient.
167 */
168# if defined(OPT_ACCURACY)
169# define mad_f_mul(x, y) \
170 ((mad_fixed_t) \
171 ((((mad_fixed64_t) (x) * (y)) + \
172 (1L << (MAD_F_SCALEBITS - 1))) >> MAD_F_SCALEBITS))
173# else
174# define mad_f_mul(x, y) \
175 ((mad_fixed_t) (((mad_fixed64_t) (x) * (y)) >> MAD_F_SCALEBITS))
176# endif
177
178# define MAD_F_SCALEBITS MAD_F_FRACBITS
179
180/* --- Intel --------------------------------------------------------------- */
181
182# elif defined(FPM_INTEL)
183
184# if defined(_MSC_VER)
185# pragma warning(push)
186# pragma warning(disable: 4035) /* no return value */
187static __forceinline
188mad_fixed_t mad_f_mul_inline(mad_fixed_t x, mad_fixed_t y)
189{
190 enum {
191 fracbits = MAD_F_FRACBITS
192 };
193
194 __asm {
195 mov eax, x
196 imul y
197 shrd eax, edx, fracbits
198 }
199
200 /* implicit return of eax */
201}
202# pragma warning(pop)
203
204# define mad_f_mul mad_f_mul_inline
205# define mad_f_scale64
206# else
207/*
208 * This Intel version is fast and accurate; the disposition of the least
209 * significant bit depends on OPT_ACCURACY via mad_f_scale64().
210 */
211# define MAD_F_MLX(hi, lo, x, y) \
212 asm ("imull %3" \
213 : "=a" (lo), "=d" (hi) \
214 : "%a" (x), "rm" (y) \
215 : "cc")
216
217# if defined(OPT_ACCURACY)
218/*
219 * This gives best accuracy but is not very fast.
220 */
221# define MAD_F_MLA(hi, lo, x, y) \
222 ({ mad_fixed64hi_t __hi; \
223 mad_fixed64lo_t __lo; \
224 MAD_F_MLX(__hi, __lo, (x), (y)); \
225 asm ("addl %2,%0\n\t" \
226 "adcl %3,%1" \
227 : "=rm" (lo), "=rm" (hi) \
228 : "r" (__lo), "r" (__hi), "0" (lo), "1" (hi) \
229 : "cc"); \
230 })
231# endif /* OPT_ACCURACY */
232
233# if defined(OPT_ACCURACY)
234/*
235 * Surprisingly, this is faster than SHRD followed by ADC.
236 */
237# define mad_f_scale64(hi, lo) \
238 ({ mad_fixed64hi_t __hi_; \
239 mad_fixed64lo_t __lo_; \
240 mad_fixed_t __result; \
241 asm ("addl %4,%2\n\t" \
242 "adcl %5,%3" \
243 : "=rm" (__lo_), "=rm" (__hi_) \
244 : "0" (lo), "1" (hi), \
245 "ir" (1L << (MAD_F_SCALEBITS - 1)), "ir" (0) \
246 : "cc"); \
247 asm ("shrdl %3,%2,%1" \
248 : "=rm" (__result) \
249 : "0" (__lo_), "r" (__hi_), "I" (MAD_F_SCALEBITS) \
250 : "cc"); \
251 __result; \
252 })
253# else
254# define mad_f_scale64(hi, lo) \
255 ({ mad_fixed_t __result; \
256 asm ("shrdl %3,%2,%1" \
257 : "=rm" (__result) \
258 : "0" (lo), "r" (hi), "I" (MAD_F_SCALEBITS) \
259 : "cc"); \
260 __result; \
261 })
262# endif /* OPT_ACCURACY */
263
264# define MAD_F_SCALEBITS MAD_F_FRACBITS
265# endif
266
267/* --- ARM ----------------------------------------------------------------- */
268
269# elif defined(FPM_ARM)
270
271/*
272 * This ARM V4 version is as accurate as FPM_64BIT but much faster. The
273 * least significant bit is properly rounded at no CPU cycle cost!
274 */
275# if 1
276/*
277 * There's a bug somewhere, possibly in the compiler, that sometimes makes
278 * this necessary instead of the default implementation via MAD_F_MLX and
279 * mad_f_scale64. It may be related to the use (or lack) of
280 * -finline-functions and/or -fstrength-reduce.
281 *
282 * This is also apparently faster than MAD_F_MLX/mad_f_scale64.
283 */
284# define mad_f_mul(x, y) \
285 ({ mad_fixed64hi_t __hi; \
286 mad_fixed64lo_t __lo; \
287 mad_fixed_t __result; \
288 asm ("smull %0, %1, %3, %4\n\t" \
289 "movs %0, %0, lsr %5\n\t" \
290 "adc %2, %0, %1, lsl %6" \
291 : "=&r" (__lo), "=&r" (__hi), "=r" (__result) \
292 : "%r" (x), "r" (y), \
293 "M" (MAD_F_SCALEBITS), "M" (32 - MAD_F_SCALEBITS) \
294 : "cc"); \
295 __result; \
296 })
297# endif
298
299# define MAD_F_MLX(hi, lo, x, y) \
300 asm ("smull %0, %1, %2, %3" \
301 : "=&r" (lo), "=&r" (hi) \
302 : "%r" (x), "r" (y))
303
304# define MAD_F_MLA(hi, lo, x, y) \
305 asm ("smlal %0, %1, %2, %3" \
306 : "+r" (lo), "+r" (hi) \
307 : "%r" (x), "r" (y))
308
309# define MAD_F_MLN(hi, lo) \
310 asm ("rsbs %0, %2, #0\n\t" \
311 "rsc %1, %3, #0" \
312 : "=r" (lo), "=r" (hi) \
313 : "0" (lo), "1" (hi) \
314 : "cc")
315
316# define mad_f_scale64(hi, lo) \
317 ({ mad_fixed_t __result; \
318 asm ("movs %0, %1, lsr %3\n\t" \
319 "adc %0, %0, %2, lsl %4" \
320 : "=r" (__result) \
321 : "r" (lo), "r" (hi), \
322 "M" (MAD_F_SCALEBITS), "M" (32 - MAD_F_SCALEBITS) \
323 : "cc"); \
324 __result; \
325 })
326
327# define MAD_F_SCALEBITS MAD_F_FRACBITS
328
329/* --- MIPS ---------------------------------------------------------------- */
330
331# elif defined(FPM_MIPS)
332
333/*
334 * This MIPS version is fast and accurate; the disposition of the least
335 * significant bit depends on OPT_ACCURACY via mad_f_scale64().
336 */
337# define MAD_F_MLX(hi, lo, x, y) \
338 asm ("mult %2,%3" \
339 : "=l" (lo), "=h" (hi) \
340 : "%r" (x), "r" (y))
341
342# if defined(HAVE_MADD_ASM)
343# define MAD_F_MLA(hi, lo, x, y) \
344 asm ("madd %2,%3" \
345 : "+l" (lo), "+h" (hi) \
346 : "%r" (x), "r" (y))
347# elif defined(HAVE_MADD16_ASM)
348/*
349 * This loses significant accuracy due to the 16-bit integer limit in the
350 * multiply/accumulate instruction.
351 */
352# define MAD_F_ML0(hi, lo, x, y) \
353 asm ("mult %2,%3" \
354 : "=l" (lo), "=h" (hi) \
355 : "%r" ((x) >> 12), "r" ((y) >> 16))
356# define MAD_F_MLA(hi, lo, x, y) \
357 asm ("madd16 %2,%3" \
358 : "+l" (lo), "+h" (hi) \
359 : "%r" ((x) >> 12), "r" ((y) >> 16))
360# define MAD_F_MLZ(hi, lo) ((mad_fixed_t) (lo))
361# endif
362
363# if defined(OPT_SPEED)
364# define mad_f_scale64(hi, lo) \
365 ((mad_fixed_t) ((hi) << (32 - MAD_F_SCALEBITS)))
366# define MAD_F_SCALEBITS MAD_F_FRACBITS
367# endif
368
369/* --- SPARC --------------------------------------------------------------- */
370
371# elif defined(FPM_SPARC)
372
373/*
374 * This SPARC V8 version is fast and accurate; the disposition of the least
375 * significant bit depends on OPT_ACCURACY via mad_f_scale64().
376 */
377# define MAD_F_MLX(hi, lo, x, y) \
378 asm ("smul %2, %3, %0\n\t" \
379 "rd %%y, %1" \
380 : "=r" (lo), "=r" (hi) \
381 : "%r" (x), "rI" (y))
382
383/* --- PowerPC ------------------------------------------------------------- */
384
385# elif defined(FPM_PPC)
386
387/*
388 * This PowerPC version is tuned for the 4xx embedded processors. It is
389 * effectively a tuned version of FPM_64BIT. It is a little faster and just
390 * as accurate. The disposition of the least significant bit depends on
391 * OPT_ACCURACY via mad_f_scale64().
392 */
393# define MAD_F_MLX(hi, lo, x, y) \
394 asm ("mulhw %1, %2, %3\n\t" \
395 "mullw %0, %2, %3" \
396 : "=&r" (lo), "=&r" (hi) \
397 : "%r" (x), "r" (y))
398
399# define MAD_F_MLA(hi, lo, x, y) \
400 ({ mad_fixed64hi_t __hi; \
401 mad_fixed64lo_t __lo; \
402 MAD_F_MLX(__hi, __lo, (x), (y)); \
403 asm ("addc %0, %2, %3\n\t" \
404 "adde %1, %4, %5" \
405 : "=r" (lo), "=r" (hi) \
406 : "%r" (__lo), "0" (lo), "%r" (__hi), "1" (hi)); \
407 })
408
409# if defined(OPT_ACCURACY)
410/*
411 * This is accurate and ~2 - 2.5 times slower than the unrounded version.
412 *
413 * The __volatile__ improves the generated code by another 5% (fewer spills
414 * to memory); eventually they should be removed.
415 */
416# define mad_f_scale64(hi, lo) \
417 ({ mad_fixed_t __result; \
418 mad_fixed64hi_t __hi_; \
419 mad_fixed64lo_t __lo_; \
420 asm __volatile__ ("addc %0, %2, %4\n\t" \
421 "addze %1, %3" \
422 : "=r" (__lo_), "=r" (__hi_) \
423 : "r" (lo), "r" (hi), "r" (1 << (MAD_F_SCALEBITS - 1))); \
424 asm __volatile__ ("rlwinm %0, %2,32-%3,0,%3-1\n\t" \
425 "rlwimi %0, %1,32-%3,%3,31" \
426 : "=&r" (__result) \
427 : "r" (__lo_), "r" (__hi_), "I" (MAD_F_SCALEBITS)); \
428 __result; \
429 })
430# else
431# define mad_f_scale64(hi, lo) \
432 ({ mad_fixed_t __result; \
433 asm ("rlwinm %0, %2,32-%3,0,%3-1\n\t" \
434 "rlwimi %0, %1,32-%3,%3,31" \
435 : "=r" (__result) \
436 : "r" (lo), "r" (hi), "I" (MAD_F_SCALEBITS)); \
437 __result; \
438 })
439# endif /* OPT_ACCURACY */
440
441# define MAD_F_SCALEBITS MAD_F_FRACBITS
442
443/* --- Default ------------------------------------------------------------- */
444
445# elif defined(FPM_DEFAULT)
446
447/*
448 * This version is the most portable but it loses significant accuracy.
449 * Furthermore, accuracy is biased against the second argument, so care
450 * should be taken when ordering operands.
451 *
452 * The scale factors are constant as this is not used with SSO.
453 *
454 * Pre-rounding is required to stay within the limits of compliance.
455 */
456# if defined(OPT_SPEED)
457# define mad_f_mul(x, y) (((x) >> 12) * ((y) >> 16))
458# else
459# define mad_f_mul(x, y) ((((x) + (1L << 11)) >> 12) * \
460 (((y) + (1L << 15)) >> 16))
461# endif
462
463/* ------------------------------------------------------------------------- */
464
465# else
466# error "no FPM selected"
467# endif
468
469/* default implementations */
470
471# if !defined(mad_f_mul)
472# define mad_f_mul(x, y) \
473 ({ mad_fixed64hi_t __hi; \
474 mad_fixed64lo_t __lo; \
475 MAD_F_MLX(__hi, __lo, (x), (y)); \
476 mad_f_scale64(__hi, __lo); \
477 })
478# endif
479
480# if !defined(MAD_F_MLA)
481# define MAD_F_ML0(hi, lo, x, y) ((lo) = mad_f_mul((x), (y)))
482# define MAD_F_MLA(hi, lo, x, y) ((lo) += mad_f_mul((x), (y)))
483# define MAD_F_MLN(hi, lo) ((lo) = -(lo))
484# define MAD_F_MLZ(hi, lo) ((void) (hi), (mad_fixed_t) (lo))
485# endif
486
487# if !defined(MAD_F_ML0)
488# define MAD_F_ML0(hi, lo, x, y) MAD_F_MLX((hi), (lo), (x), (y))
489# endif
490
491# if !defined(MAD_F_MLN)
492# define MAD_F_MLN(hi, lo) ((hi) = ((lo) = -(lo)) ? ~(hi) : -(hi))
493# endif
494
495# if !defined(MAD_F_MLZ)
496# define MAD_F_MLZ(hi, lo) mad_f_scale64((hi), (lo))
497# endif
498
499# if !defined(mad_f_scale64)
500# if defined(OPT_ACCURACY)
501# define mad_f_scale64(hi, lo) \
502 ((((mad_fixed_t) \
503 (((hi) << (32 - (MAD_F_SCALEBITS - 1))) | \
504 ((lo) >> (MAD_F_SCALEBITS - 1)))) + 1) >> 1)
505# else
506# define mad_f_scale64(hi, lo) \
507 ((mad_fixed_t) \
508 (((hi) << (32 - MAD_F_SCALEBITS)) | \
509 ((lo) >> MAD_F_SCALEBITS)))
510# endif
511# define MAD_F_SCALEBITS MAD_F_FRACBITS
512# endif
513
514/* miscellaneous C routines */
515
516mad_fixed_t mad_f_abs(mad_fixed_t);
517
518# endif
519
520/* Id: bit.h,v 1.8 2001/10/17 19:14:47 rob Exp */
521
522# ifndef LIBMAD_BIT_H
523# define LIBMAD_BIT_H
524
525struct mad_bitptr {
526 unsigned char const *byte;
527 unsigned short cache;
528 unsigned short left;
529};
530
531void mad_bit_init(struct mad_bitptr *, unsigned char const *);
532
533# define mad_bit_finish(bitptr) /* nothing */
534
535unsigned int mad_bit_length(struct mad_bitptr const *,
536 struct mad_bitptr const *);
537
538# define mad_bit_bitsleft(bitptr) ((bitptr)->left)
539unsigned char const *mad_bit_nextbyte(struct mad_bitptr const *);
540
541void mad_bit_skip(struct mad_bitptr *, unsigned int);
542unsigned long mad_bit_read(struct mad_bitptr *, unsigned int);
543void mad_bit_write(struct mad_bitptr *, unsigned int, unsigned long);
544
545unsigned short mad_bit_crc(struct mad_bitptr, unsigned int, unsigned short);
546
547# endif
548
549/* Id: timer.h,v 1.12 2001/11/03 03:57:11 rob Exp */
550
551# ifndef LIBMAD_TIMER_H
552# define LIBMAD_TIMER_H
553
554typedef struct {
555 signed long seconds; /* whole seconds */
556 unsigned long fraction; /* 1/MAD_TIMER_RESOLUTION seconds */
557} mad_timer_t;
558
559extern mad_timer_t const mad_timer_zero;
560
561# define MAD_TIMER_RESOLUTION 352800000UL
562
563enum mad_units {
564 MAD_UNITS_HOURS = -2,
565 MAD_UNITS_MINUTES = -1,
566 MAD_UNITS_SECONDS = 0,
567
568 /* metric units */
569
570 MAD_UNITS_DECISECONDS = 10,
571 MAD_UNITS_CENTISECONDS = 100,
572 MAD_UNITS_MILLISECONDS = 1000,
573
574 /* audio sample units */
575
576 MAD_UNITS_8000_HZ = 8000,
577 MAD_UNITS_11025_HZ = 11025,
578 MAD_UNITS_12000_HZ = 12000,
579
580 MAD_UNITS_16000_HZ = 16000,
581 MAD_UNITS_22050_HZ = 22050,
582 MAD_UNITS_24000_HZ = 24000,
583
584 MAD_UNITS_32000_HZ = 32000,
585 MAD_UNITS_44100_HZ = 44100,
586 MAD_UNITS_48000_HZ = 48000,
587
588 /* video frame/field units */
589
590 MAD_UNITS_24_FPS = 24,
591 MAD_UNITS_25_FPS = 25,
592 MAD_UNITS_30_FPS = 30,
593 MAD_UNITS_48_FPS = 48,
594 MAD_UNITS_50_FPS = 50,
595 MAD_UNITS_60_FPS = 60,
596
597 /* CD audio frames */
598
599 MAD_UNITS_75_FPS = 75,
600
601 /* video drop-frame units */
602
603 MAD_UNITS_23_976_FPS = -24,
604 MAD_UNITS_24_975_FPS = -25,
605 MAD_UNITS_29_97_FPS = -30,
606 MAD_UNITS_47_952_FPS = -48,
607 MAD_UNITS_49_95_FPS = -50,
608 MAD_UNITS_59_94_FPS = -60
609};
610
611# define mad_timer_reset(timer) ((void) (*(timer) = mad_timer_zero))
612
613int mad_timer_compare(mad_timer_t, mad_timer_t);
614
615# define mad_timer_sign(timer) mad_timer_compare((timer), mad_timer_zero)
616
617void mad_timer_negate(mad_timer_t *);
618mad_timer_t mad_timer_abs(mad_timer_t);
619
620void mad_timer_set(mad_timer_t *, unsigned long, unsigned long, unsigned long);
621void mad_timer_add(mad_timer_t *, mad_timer_t);
622void mad_timer_multiply(mad_timer_t *, signed long);
623
624signed long mad_timer_count(mad_timer_t, enum mad_units);
625unsigned long mad_timer_fraction(mad_timer_t, unsigned long);
626void mad_timer_string(mad_timer_t, char *, char const *,
627 enum mad_units, enum mad_units, unsigned long);
628
629# endif
630
631/* Id: stream.h,v 1.15 2001/11/08 23:28:03 rob Exp */
632
633# ifndef LIBMAD_STREAM_H
634# define LIBMAD_STREAM_H
635
636# define MAD_BUFFER_GUARD 8
637# define MAD_BUFFER_MDLEN (511 + 2048 + MAD_BUFFER_GUARD)
638
639enum mad_error {
640 MAD_ERROR_NONE = 0x0000, /* no error */
641
642 MAD_ERROR_BUFLEN = 0x0001, /* input buffer too small (or EOF) */
643 MAD_ERROR_BUFPTR = 0x0002, /* invalid (null) buffer pointer */
644
645 MAD_ERROR_NOMEM = 0x0031, /* not enough memory */
646
647 MAD_ERROR_LOSTSYNC = 0x0101, /* lost synchronization */
648 MAD_ERROR_BADLAYER = 0x0102, /* reserved header layer value */
649 MAD_ERROR_BADBITRATE = 0x0103, /* forbidden bitrate value */
650 MAD_ERROR_BADSAMPLERATE = 0x0104, /* reserved sample frequency value */
651 MAD_ERROR_BADEMPHASIS = 0x0105, /* reserved emphasis value */
652
653 MAD_ERROR_BADCRC = 0x0201, /* CRC check failed */
654 MAD_ERROR_BADBITALLOC = 0x0211, /* forbidden bit allocation value */
655 MAD_ERROR_BADSCALEFACTOR = 0x0221, /* bad scalefactor index */
656 MAD_ERROR_BADFRAMELEN = 0x0231, /* bad frame length */
657 MAD_ERROR_BADBIGVALUES = 0x0232, /* bad big_values count */
658 MAD_ERROR_BADBLOCKTYPE = 0x0233, /* reserved block_type */
659 MAD_ERROR_BADSCFSI = 0x0234, /* bad scalefactor selection info */
660 MAD_ERROR_BADDATAPTR = 0x0235, /* bad main_data_begin pointer */
661 MAD_ERROR_BADPART3LEN = 0x0236, /* bad audio data length */
662 MAD_ERROR_BADHUFFTABLE = 0x0237, /* bad Huffman table select */
663 MAD_ERROR_BADHUFFDATA = 0x0238, /* Huffman data overrun */
664 MAD_ERROR_BADSTEREO = 0x0239 /* incompatible block_type for JS */
665};
666
667# define MAD_RECOVERABLE(error) ((error) & 0xff00)
668
669struct mad_stream {
670 unsigned char const *buffer; /* input bitstream buffer */
671 unsigned char const *bufend; /* end of buffer */
672 unsigned long skiplen; /* bytes to skip before next frame */
673
674 int sync; /* stream sync found */
675 unsigned long freerate; /* free bitrate (fixed) */
676
677 unsigned char const *this_frame; /* start of current frame */
678 unsigned char const *next_frame; /* start of next frame */
679 struct mad_bitptr ptr; /* current processing bit pointer */
680
681 struct mad_bitptr anc_ptr; /* ancillary bits pointer */
682 unsigned int anc_bitlen; /* number of ancillary bits */
683
684 unsigned char (*main_data)[MAD_BUFFER_MDLEN];
685 /* Layer III main_data() */
686 unsigned int md_len; /* bytes in main_data */
687
688 int options; /* decoding options (see below) */
689 enum mad_error error; /* error code (see above) */
690};
691
692enum {
693 MAD_OPTION_IGNORECRC = 0x0001, /* ignore CRC errors */
694 MAD_OPTION_HALFSAMPLERATE = 0x0002 /* generate PCM at 1/2 sample rate */
695# if 0 /* not yet implemented */
696 MAD_OPTION_LEFTCHANNEL = 0x0010, /* decode left channel only */
697 MAD_OPTION_RIGHTCHANNEL = 0x0020, /* decode right channel only */
698 MAD_OPTION_SINGLECHANNEL = 0x0030 /* combine channels */
699# endif
700};
701
702void mad_stream_init(struct mad_stream *);
703void mad_stream_finish(struct mad_stream *);
704
705# define mad_stream_options(stream, opts) \
706 ((void) ((stream)->options = (opts)))
707
708void mad_stream_buffer(struct mad_stream *,
709 unsigned char const *, unsigned long);
710void mad_stream_skip(struct mad_stream *, unsigned long);
711
712int mad_stream_sync(struct mad_stream *);
713
714char const *mad_stream_errorstr(struct mad_stream const *);
715
716# endif
717
718/* Id: frame.h,v 1.16 2001/10/17 19:13:41 rob Exp */
719
720# ifndef LIBMAD_FRAME_H
721# define LIBMAD_FRAME_H
722
723enum mad_layer {
724 MAD_LAYER_I = 1, /* Layer I */
725 MAD_LAYER_II = 2, /* Layer II */
726 MAD_LAYER_III = 3 /* Layer III */
727};
728
729enum mad_mode {
730 MAD_MODE_SINGLE_CHANNEL = 0, /* single channel */
731 MAD_MODE_DUAL_CHANNEL = 1, /* dual channel */
732 MAD_MODE_JOINT_STEREO = 2, /* joint (MS/intensity) stereo */
733 MAD_MODE_STEREO = 3 /* normal LR stereo */
734};
735
736enum mad_emphasis {
737 MAD_EMPHASIS_NONE = 0, /* no emphasis */
738 MAD_EMPHASIS_50_15_US = 1, /* 50/15 microseconds emphasis */
739 MAD_EMPHASIS_CCITT_J_17 = 3 /* CCITT J.17 emphasis */
740};
741
742struct mad_header {
743 enum mad_layer layer; /* audio layer (1, 2, or 3) */
744 enum mad_mode mode; /* channel mode (see above) */
745 int mode_extension; /* additional mode info */
746 enum mad_emphasis emphasis; /* de-emphasis to use (see above) */
747
748 unsigned long bitrate; /* stream bitrate (bps) */
749 unsigned int samplerate; /* sampling frequency (Hz) */
750
751 unsigned short crc_check; /* frame CRC accumulator */
752 unsigned short crc_target; /* final target CRC checksum */
753
754 int flags; /* flags (see below) */
755 int private_bits; /* private bits (see below) */
756
757 mad_timer_t duration; /* audio playing time of frame */
758};
759
760struct mad_frame {
761 struct mad_header header; /* MPEG audio header */
762
763 int options; /* decoding options (from stream) */
764
765 mad_fixed_t sbsample[2][36][32]; /* synthesis subband filter samples */
766 mad_fixed_t (*overlap)[2][32][18]; /* Layer III block overlap data */
767};
768
769# define MAD_NCHANNELS(header) ((header)->mode ? 2 : 1)
770# define MAD_NSBSAMPLES(header) \
771 ((header)->layer == MAD_LAYER_I ? 12 : \
772 (((header)->layer == MAD_LAYER_III && \
773 ((header)->flags & MAD_FLAG_LSF_EXT)) ? 18 : 36))
774
775enum {
776 MAD_FLAG_NPRIVATE_III = 0x0007, /* number of Layer III private bits */
777 MAD_FLAG_INCOMPLETE = 0x0008, /* header but not data is decoded */
778
779 MAD_FLAG_PROTECTION = 0x0010, /* frame has CRC protection */
780 MAD_FLAG_COPYRIGHT = 0x0020, /* frame is copyright */
781 MAD_FLAG_ORIGINAL = 0x0040, /* frame is original (else copy) */
782 MAD_FLAG_PADDING = 0x0080, /* frame has additional slot */
783
784 MAD_FLAG_I_STEREO = 0x0100, /* uses intensity joint stereo */
785 MAD_FLAG_MS_STEREO = 0x0200, /* uses middle/side joint stereo */
786 MAD_FLAG_FREEFORMAT = 0x0400, /* uses free format bitrate */
787
788 MAD_FLAG_LSF_EXT = 0x1000, /* lower sampling freq. extension */
789 MAD_FLAG_MC_EXT = 0x2000, /* multichannel audio extension */
790 MAD_FLAG_MPEG_2_5_EXT = 0x4000 /* MPEG 2.5 (unofficial) extension */
791};
792
793enum {
794 MAD_PRIVATE_HEADER = 0x0100, /* header private bit */
795 MAD_PRIVATE_III = 0x001f /* Layer III private bits (up to 5) */
796};
797
798void mad_header_init(struct mad_header *);
799
800# define mad_header_finish(header) /* nothing */
801
802int mad_header_decode(struct mad_header *, struct mad_stream *);
803
804void mad_frame_init(struct mad_frame *);
805void mad_frame_finish(struct mad_frame *);
806
807int mad_frame_decode(struct mad_frame *, struct mad_stream *);
808
809void mad_frame_mute(struct mad_frame *);
810
811# endif
812
813/* Id: synth.h,v 1.11 2001/11/08 23:28:03 rob Exp */
814
815# ifndef LIBMAD_SYNTH_H
816# define LIBMAD_SYNTH_H
817
818struct mad_pcm {
819 unsigned int samplerate; /* sampling frequency (Hz) */
820 unsigned short channels; /* number of channels */
821 unsigned short length; /* number of samples per channel */
822 mad_fixed_t samples[2][1152]; /* PCM output samples [ch][sample] */
823};
824
825struct mad_synth {
826 mad_fixed_t filter[2][2][2][16][8]; /* polyphase filterbank outputs */
827 /* [ch][eo][peo][s][v] */
828
829 unsigned int phase; /* current processing phase */
830
831 struct mad_pcm pcm; /* PCM output */
832};
833
834/* single channel PCM selector */
835enum {
836 MAD_PCM_CHANNEL_SINGLE = 0
837};
838
839/* dual channel PCM selector */
840enum {
841 MAD_PCM_CHANNEL_DUAL_1 = 0,
842 MAD_PCM_CHANNEL_DUAL_2 = 1
843};
844
845/* stereo PCM selector */
846enum {
847 MAD_PCM_CHANNEL_STEREO_LEFT = 0,
848 MAD_PCM_CHANNEL_STEREO_RIGHT = 1
849};
850
851void mad_synth_init(struct mad_synth *);
852
853# define mad_synth_finish(synth) /* nothing */
854
855void mad_synth_mute(struct mad_synth *);
856
857void mad_synth_frame(struct mad_synth *, struct mad_frame const *);
858
859# endif
860
861/* Id: decoder.h,v 1.13 2001/11/03 03:57:11 rob Exp */
862
863# ifndef LIBMAD_DECODER_H
864# define LIBMAD_DECODER_H
865
866enum mad_decoder_mode {
867 MAD_DECODER_MODE_SYNC = 0,
868 MAD_DECODER_MODE_ASYNC
869};
870
871enum mad_flow {
872 MAD_FLOW_CONTINUE = 0x0000, /* continue normally */
873 MAD_FLOW_STOP = 0x0010, /* stop decoding normally */
874 MAD_FLOW_BREAK = 0x0011, /* stop decoding and signal an error */
875 MAD_FLOW_IGNORE = 0x0020 /* ignore the current frame */
876};
877
878struct mad_decoder {
879 enum mad_decoder_mode mode;
880
881 int options;
882
883 struct {
884 long pid;
885 int in;
886 int out;
887 } async;
888
889 struct {
890 struct mad_stream stream;
891 struct mad_frame frame;
892 struct mad_synth synth;
893 } *sync;
894
895 void *cb_data;
896
897 enum mad_flow (*input_func)(void *, struct mad_stream *);
898 enum mad_flow (*header_func)(void *, struct mad_header const *);
899 enum mad_flow (*filter_func)(void *,
900 struct mad_stream const *, struct mad_frame *);
901 enum mad_flow (*output_func)(void *,
902 struct mad_header const *, struct mad_pcm *);
903 enum mad_flow (*error_func)(void *, struct mad_stream *, struct mad_frame *);
904 enum mad_flow (*message_func)(void *, void *, unsigned int *);
905};
906
907void mad_decoder_init(struct mad_decoder *, void *,
908 enum mad_flow (*)(void *, struct mad_stream *),
909 enum mad_flow (*)(void *, struct mad_header const *),
910 enum mad_flow (*)(void *,
911 struct mad_stream const *,
912 struct mad_frame *),
913 enum mad_flow (*)(void *,
914 struct mad_header const *,
915 struct mad_pcm *),
916 enum mad_flow (*)(void *,
917 struct mad_stream *,
918 struct mad_frame *),
919 enum mad_flow (*)(void *, void *, unsigned int *));
920int mad_decoder_finish(struct mad_decoder *);
921
922# define mad_decoder_options(decoder, opts) \
923 ((void) ((decoder)->options = (opts)))
924
925int mad_decoder_run(struct mad_decoder *, enum mad_decoder_mode);
926int mad_decoder_message(struct mad_decoder *, void *, unsigned int *);
927
928# endif
929
930# ifdef __cplusplus
931}
932# endif
diff --git a/uisimulator/common/libmad/madconfig.h b/uisimulator/common/libmad/madconfig.h
new file mode 100644
index 0000000000..7cd8e1aa1c
--- /dev/null
+++ b/uisimulator/common/libmad/madconfig.h
@@ -0,0 +1,121 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22# ifndef LIBMAD_CONFIG_H
23# define LIBMAD_CONFIG_H
24
25/*****************************************************************************
26 * Definitions selected automatically by `configure' *
27 *****************************************************************************/
28
29/* Define to empty if the keyword does not work. */
30/* #undef const */
31
32/* Define if you have <sys/wait.h> that is POSIX.1 compatible. */
33/* #undef HAVE_SYS_WAIT_H */
34
35/* Define as __inline if that's what the C compiler calls it. */
36#define inline __inline
37
38/* Define to `int' if <sys/types.h> doesn't define. */
39/* #undef pid_t */
40
41/* Define if you have the ANSI C header files. */
42#define STDC_HEADERS 1
43
44/* Define to optimize for speed over accuracy. */
45/* #undef OPT_SPEED */
46
47/* Define to optimize for accuracy over speed. */
48/* #undef OPT_ACCURACY */
49
50/* Define to enable a fast subband synthesis approximation optimization. */
51/* #undef OPT_SSO */
52
53/* Define to influence a strict interpretation of the ISO/IEC standards,
54 even if this is in opposition with best accepted practices. */
55/* #undef OPT_STRICT */
56
57/* Define if your MIPS CPU supports a 2-operand MADD instruction. */
58/* #undef HAVE_MADD_ASM */
59
60/* Define if your MIPS CPU supports a 2-operand MADD16 instruction. */
61/* #undef HAVE_MADD16_ASM */
62
63/* Define to enable diagnostic debugging support. */
64/* #undef DEBUG */
65
66/* Define to disable debugging assertions. */
67/* #undef NDEBUG */
68
69/* Define to enable experimental code. */
70/* #undef EXPERIMENTAL */
71
72/* The number of bytes in a int. */
73#define SIZEOF_INT 4
74
75/* The number of bytes in a long. */
76#define SIZEOF_LONG 4
77
78/* The number of bytes in a long long. */
79#define SIZEOF_LONG_LONG 8
80
81/* Define if you have the fcntl function. */
82/* #undef HAVE_FCNTL */
83
84/* Define if you have the fork function. */
85/* #undef HAVE_FORK */
86
87/* Define if you have the pipe function. */
88/* #undef HAVE_PIPE */
89
90/* Define if you have the waitpid function. */
91/* #undef HAVE_WAITPID */
92
93/* Define if you have the <assert.h> header file. */
94#define HAVE_ASSERT_H 1
95
96/* Define if you have the <errno.h> header file. */
97#define HAVE_ERRNO_H 1
98
99/* Define if you have the <fcntl.h> header file. */
100#define HAVE_FCNTL_H 1
101
102/* Define if you have the <limits.h> header file. */
103#define HAVE_LIMITS_H 1
104
105/* Define if you have the <sys/types.h> header file. */
106#define HAVE_SYS_TYPES_H 1
107
108/* Define if you have the <unistd.h> header file. */
109/* #undef HAVE_UNISTD_H */
110
111/* Name of package */
112#define PACKAGE "libmad"
113
114/* Version number of package */
115#define VERSION "0.14.2b"
116
117/*****************************************************************************
118 * End of automatically configured definitions *
119 *****************************************************************************/
120
121# endif
diff --git a/uisimulator/common/libmad/qc_table.dat b/uisimulator/common/libmad/qc_table.dat
new file mode 100644
index 0000000000..5d9ca963ec
--- /dev/null
+++ b/uisimulator/common/libmad/qc_table.dat
@@ -0,0 +1,77 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22/*
23 * These are the Layer II classes of quantization.
24 * The table is derived from Table B.4 of ISO/IEC 11172-3.
25 */
26
27 { 3, 2, 5,
28 MAD_F(0x15555555) /* 1.33333333333 => 1.33333333209, e 0.00000000124 */,
29 MAD_F(0x08000000) /* 0.50000000000 => 0.50000000000, e 0.00000000000 */ },
30 { 5, 3, 7,
31 MAD_F(0x1999999a) /* 1.60000000000 => 1.60000000149, e -0.00000000149 */,
32 MAD_F(0x08000000) /* 0.50000000000 => 0.50000000000, e 0.00000000000 */ },
33 { 7, 0, 3,
34 MAD_F(0x12492492) /* 1.14285714286 => 1.14285714179, e 0.00000000107 */,
35 MAD_F(0x04000000) /* 0.25000000000 => 0.25000000000, e 0.00000000000 */ },
36 { 9, 4, 10,
37 MAD_F(0x1c71c71c) /* 1.77777777777 => 1.77777777612, e 0.00000000165 */,
38 MAD_F(0x08000000) /* 0.50000000000 => 0.50000000000, e 0.00000000000 */ },
39 { 15, 0, 4,
40 MAD_F(0x11111111) /* 1.06666666666 => 1.06666666642, e 0.00000000024 */,
41 MAD_F(0x02000000) /* 0.12500000000 => 0.12500000000, e 0.00000000000 */ },
42 { 31, 0, 5,
43 MAD_F(0x10842108) /* 1.03225806452 => 1.03225806355, e 0.00000000097 */,
44 MAD_F(0x01000000) /* 0.06250000000 => 0.06250000000, e 0.00000000000 */ },
45 { 63, 0, 6,
46 MAD_F(0x10410410) /* 1.01587301587 => 1.01587301493, e 0.00000000094 */,
47 MAD_F(0x00800000) /* 0.03125000000 => 0.03125000000, e 0.00000000000 */ },
48 { 127, 0, 7,
49 MAD_F(0x10204081) /* 1.00787401575 => 1.00787401572, e 0.00000000003 */,
50 MAD_F(0x00400000) /* 0.01562500000 => 0.01562500000, e 0.00000000000 */ },
51 { 255, 0, 8,
52 MAD_F(0x10101010) /* 1.00392156863 => 1.00392156839, e 0.00000000024 */,
53 MAD_F(0x00200000) /* 0.00781250000 => 0.00781250000, e 0.00000000000 */ },
54 { 511, 0, 9,
55 MAD_F(0x10080402) /* 1.00195694716 => 1.00195694715, e 0.00000000001 */,
56 MAD_F(0x00100000) /* 0.00390625000 => 0.00390625000, e 0.00000000000 */ },
57 { 1023, 0, 10,
58 MAD_F(0x10040100) /* 1.00097751711 => 1.00097751617, e 0.00000000094 */,
59 MAD_F(0x00080000) /* 0.00195312500 => 0.00195312500, e 0.00000000000 */ },
60 { 2047, 0, 11,
61 MAD_F(0x10020040) /* 1.00048851979 => 1.00048851967, e 0.00000000012 */,
62 MAD_F(0x00040000) /* 0.00097656250 => 0.00097656250, e 0.00000000000 */ },
63 { 4095, 0, 12,
64 MAD_F(0x10010010) /* 1.00024420024 => 1.00024420023, e 0.00000000001 */,
65 MAD_F(0x00020000) /* 0.00048828125 => 0.00048828125, e 0.00000000000 */ },
66 { 8191, 0, 13,
67 MAD_F(0x10008004) /* 1.00012208522 => 1.00012208521, e 0.00000000001 */,
68 MAD_F(0x00010000) /* 0.00024414063 => 0.00024414062, e 0.00000000000 */ },
69 { 16383, 0, 14,
70 MAD_F(0x10004001) /* 1.00006103888 => 1.00006103888, e -0.00000000000 */,
71 MAD_F(0x00008000) /* 0.00012207031 => 0.00012207031, e -0.00000000000 */ },
72 { 32767, 0, 15,
73 MAD_F(0x10002000) /* 1.00003051851 => 1.00003051758, e 0.00000000093 */,
74 MAD_F(0x00004000) /* 0.00006103516 => 0.00006103516, e 0.00000000000 */ },
75 { 65535, 0, 16,
76 MAD_F(0x10001000) /* 1.00001525902 => 1.00001525879, e 0.00000000023 */,
77 MAD_F(0x00002000) /* 0.00003051758 => 0.00003051758, e 0.00000000000 */ }
diff --git a/uisimulator/common/libmad/rq_table.dat b/uisimulator/common/libmad/rq_table.dat
new file mode 100644
index 0000000000..803cf04743
--- /dev/null
+++ b/uisimulator/common/libmad/rq_table.dat
@@ -0,0 +1,8747 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22/*
23 * This is the lookup table used to compute x^(4/3) for Layer III
24 * requantization. To maintain the best possible accuracy, the value is
25 * stored as a normalized mantissa with exponent. The requantization
26 * algorithm recombines these parts with appropriate scaling.
27 */
28
29 /* 0 */ { MAD_F(0x00000000) /* 0.000000000 */, 0 },
30 /* 1 */ { MAD_F(0x04000000) /* 0.250000000 */, 2 },
31 /* 2 */ { MAD_F(0x050a28be) /* 0.314980262 */, 3 },
32 /* 3 */ { MAD_F(0x0453a5cd) /* 0.270421794 */, 4 },
33 /* 4 */ { MAD_F(0x06597fa9) /* 0.396850263 */, 4 },
34 /* 5 */ { MAD_F(0x04466275) /* 0.267183742 */, 5 },
35 /* 6 */ { MAD_F(0x05738c72) /* 0.340710111 */, 5 },
36 /* 7 */ { MAD_F(0x06b1fc81) /* 0.418453696 */, 5 },
37 /* 8 */ { MAD_F(0x04000000) /* 0.250000000 */, 6 },
38 /* 9 */ { MAD_F(0x04ae20d7) /* 0.292511788 */, 6 },
39 /* 10 */ { MAD_F(0x0562d694) /* 0.336630420 */, 6 },
40 /* 11 */ { MAD_F(0x061dae96) /* 0.382246578 */, 6 },
41 /* 12 */ { MAD_F(0x06de47f4) /* 0.429267841 */, 6 },
42 /* 13 */ { MAD_F(0x07a44f7a) /* 0.477614858 */, 6 },
43 /* 14 */ { MAD_F(0x0437be65) /* 0.263609310 */, 7 },
44 /* 15 */ { MAD_F(0x049fc824) /* 0.289009227 */, 7 },
45
46 /* 16 */ { MAD_F(0x050a28be) /* 0.314980262 */, 7 },
47 /* 17 */ { MAD_F(0x0576c6f5) /* 0.341498336 */, 7 },
48 /* 18 */ { MAD_F(0x05e58c0b) /* 0.368541759 */, 7 },
49 /* 19 */ { MAD_F(0x06566361) /* 0.396090870 */, 7 },
50 /* 20 */ { MAD_F(0x06c93a2e) /* 0.424127753 */, 7 },
51 /* 21 */ { MAD_F(0x073dff3e) /* 0.452635998 */, 7 },
52 /* 22 */ { MAD_F(0x07b4a2bc) /* 0.481600510 */, 7 },
53 /* 23 */ { MAD_F(0x04168b05) /* 0.255503674 */, 8 },
54 /* 24 */ { MAD_F(0x0453a5cd) /* 0.270421794 */, 8 },
55 /* 25 */ { MAD_F(0x04919b6a) /* 0.285548607 */, 8 },
56 /* 26 */ { MAD_F(0x04d065fb) /* 0.300878507 */, 8 },
57 /* 27 */ { MAD_F(0x05100000) /* 0.316406250 */, 8 },
58 /* 28 */ { MAD_F(0x05506451) /* 0.332126919 */, 8 },
59 /* 29 */ { MAD_F(0x05918e15) /* 0.348035890 */, 8 },
60 /* 30 */ { MAD_F(0x05d378bb) /* 0.364128809 */, 8 },
61 /* 31 */ { MAD_F(0x06161ff3) /* 0.380401563 */, 8 },
62
63 /* 32 */ { MAD_F(0x06597fa9) /* 0.396850263 */, 8 },
64 /* 33 */ { MAD_F(0x069d9400) /* 0.413471222 */, 8 },
65 /* 34 */ { MAD_F(0x06e2594c) /* 0.430260942 */, 8 },
66 /* 35 */ { MAD_F(0x0727cc11) /* 0.447216097 */, 8 },
67 /* 36 */ { MAD_F(0x076de8fc) /* 0.464333519 */, 8 },
68 /* 37 */ { MAD_F(0x07b4ace3) /* 0.481610189 */, 8 },
69 /* 38 */ { MAD_F(0x07fc14bf) /* 0.499043224 */, 8 },
70 /* 39 */ { MAD_F(0x04220ed7) /* 0.258314934 */, 9 },
71 /* 40 */ { MAD_F(0x04466275) /* 0.267183742 */, 9 },
72 /* 41 */ { MAD_F(0x046b03e7) /* 0.276126771 */, 9 },
73 /* 42 */ { MAD_F(0x048ff1e8) /* 0.285142811 */, 9 },
74 /* 43 */ { MAD_F(0x04b52b3f) /* 0.294230696 */, 9 },
75 /* 44 */ { MAD_F(0x04daaec0) /* 0.303389310 */, 9 },
76 /* 45 */ { MAD_F(0x05007b49) /* 0.312617576 */, 9 },
77 /* 46 */ { MAD_F(0x05268fc6) /* 0.321914457 */, 9 },
78 /* 47 */ { MAD_F(0x054ceb2a) /* 0.331278957 */, 9 },
79
80 /* 48 */ { MAD_F(0x05738c72) /* 0.340710111 */, 9 },
81 /* 49 */ { MAD_F(0x059a72a5) /* 0.350206992 */, 9 },
82 /* 50 */ { MAD_F(0x05c19cd3) /* 0.359768701 */, 9 },
83 /* 51 */ { MAD_F(0x05e90a12) /* 0.369394372 */, 9 },
84 /* 52 */ { MAD_F(0x0610b982) /* 0.379083164 */, 9 },
85 /* 53 */ { MAD_F(0x0638aa48) /* 0.388834268 */, 9 },
86 /* 54 */ { MAD_F(0x0660db91) /* 0.398646895 */, 9 },
87 /* 55 */ { MAD_F(0x06894c90) /* 0.408520284 */, 9 },
88 /* 56 */ { MAD_F(0x06b1fc81) /* 0.418453696 */, 9 },
89 /* 57 */ { MAD_F(0x06daeaa1) /* 0.428446415 */, 9 },
90 /* 58 */ { MAD_F(0x07041636) /* 0.438497744 */, 9 },
91 /* 59 */ { MAD_F(0x072d7e8b) /* 0.448607009 */, 9 },
92 /* 60 */ { MAD_F(0x075722ef) /* 0.458773552 */, 9 },
93 /* 61 */ { MAD_F(0x078102b8) /* 0.468996735 */, 9 },
94 /* 62 */ { MAD_F(0x07ab1d3e) /* 0.479275937 */, 9 },
95 /* 63 */ { MAD_F(0x07d571e0) /* 0.489610555 */, 9 },
96
97 /* 64 */ { MAD_F(0x04000000) /* 0.250000000 */, 10 },
98 /* 65 */ { MAD_F(0x04156381) /* 0.255221850 */, 10 },
99 /* 66 */ { MAD_F(0x042ae32a) /* 0.260470548 */, 10 },
100 /* 67 */ { MAD_F(0x04407eb1) /* 0.265745823 */, 10 },
101 /* 68 */ { MAD_F(0x045635cf) /* 0.271047409 */, 10 },
102 /* 69 */ { MAD_F(0x046c083e) /* 0.276375048 */, 10 },
103 /* 70 */ { MAD_F(0x0481f5bb) /* 0.281728487 */, 10 },
104 /* 71 */ { MAD_F(0x0497fe03) /* 0.287107481 */, 10 },
105 /* 72 */ { MAD_F(0x04ae20d7) /* 0.292511788 */, 10 },
106 /* 73 */ { MAD_F(0x04c45df6) /* 0.297941173 */, 10 },
107 /* 74 */ { MAD_F(0x04dab524) /* 0.303395408 */, 10 },
108 /* 75 */ { MAD_F(0x04f12624) /* 0.308874267 */, 10 },
109 /* 76 */ { MAD_F(0x0507b0bc) /* 0.314377532 */, 10 },
110 /* 77 */ { MAD_F(0x051e54b1) /* 0.319904987 */, 10 },
111 /* 78 */ { MAD_F(0x053511cb) /* 0.325456423 */, 10 },
112 /* 79 */ { MAD_F(0x054be7d4) /* 0.331031635 */, 10 },
113
114 /* 80 */ { MAD_F(0x0562d694) /* 0.336630420 */, 10 },
115 /* 81 */ { MAD_F(0x0579ddd8) /* 0.342252584 */, 10 },
116 /* 82 */ { MAD_F(0x0590fd6c) /* 0.347897931 */, 10 },
117 /* 83 */ { MAD_F(0x05a8351c) /* 0.353566275 */, 10 },
118 /* 84 */ { MAD_F(0x05bf84b8) /* 0.359257429 */, 10 },
119 /* 85 */ { MAD_F(0x05d6ec0e) /* 0.364971213 */, 10 },
120 /* 86 */ { MAD_F(0x05ee6aef) /* 0.370707448 */, 10 },
121 /* 87 */ { MAD_F(0x0606012b) /* 0.376465960 */, 10 },
122 /* 88 */ { MAD_F(0x061dae96) /* 0.382246578 */, 10 },
123 /* 89 */ { MAD_F(0x06357302) /* 0.388049134 */, 10 },
124 /* 90 */ { MAD_F(0x064d4e43) /* 0.393873464 */, 10 },
125 /* 91 */ { MAD_F(0x0665402d) /* 0.399719406 */, 10 },
126 /* 92 */ { MAD_F(0x067d4896) /* 0.405586801 */, 10 },
127 /* 93 */ { MAD_F(0x06956753) /* 0.411475493 */, 10 },
128 /* 94 */ { MAD_F(0x06ad9c3d) /* 0.417385331 */, 10 },
129 /* 95 */ { MAD_F(0x06c5e72b) /* 0.423316162 */, 10 },
130
131 /* 96 */ { MAD_F(0x06de47f4) /* 0.429267841 */, 10 },
132 /* 97 */ { MAD_F(0x06f6be73) /* 0.435240221 */, 10 },
133 /* 98 */ { MAD_F(0x070f4a80) /* 0.441233161 */, 10 },
134 /* 99 */ { MAD_F(0x0727ebf7) /* 0.447246519 */, 10 },
135 /* 100 */ { MAD_F(0x0740a2b2) /* 0.453280160 */, 10 },
136 /* 101 */ { MAD_F(0x07596e8d) /* 0.459333946 */, 10 },
137 /* 102 */ { MAD_F(0x07724f64) /* 0.465407744 */, 10 },
138 /* 103 */ { MAD_F(0x078b4514) /* 0.471501425 */, 10 },
139 /* 104 */ { MAD_F(0x07a44f7a) /* 0.477614858 */, 10 },
140 /* 105 */ { MAD_F(0x07bd6e75) /* 0.483747918 */, 10 },
141 /* 106 */ { MAD_F(0x07d6a1e2) /* 0.489900479 */, 10 },
142 /* 107 */ { MAD_F(0x07efe9a1) /* 0.496072418 */, 10 },
143 /* 108 */ { MAD_F(0x0404a2c9) /* 0.251131807 */, 11 },
144 /* 109 */ { MAD_F(0x04115aca) /* 0.254236974 */, 11 },
145 /* 110 */ { MAD_F(0x041e1cc4) /* 0.257351652 */, 11 },
146 /* 111 */ { MAD_F(0x042ae8a7) /* 0.260475783 */, 11 },
147
148 /* 112 */ { MAD_F(0x0437be65) /* 0.263609310 */, 11 },
149 /* 113 */ { MAD_F(0x04449dee) /* 0.266752177 */, 11 },
150 /* 114 */ { MAD_F(0x04518733) /* 0.269904329 */, 11 },
151 /* 115 */ { MAD_F(0x045e7a26) /* 0.273065710 */, 11 },
152 /* 116 */ { MAD_F(0x046b76b9) /* 0.276236269 */, 11 },
153 /* 117 */ { MAD_F(0x04787cdc) /* 0.279415952 */, 11 },
154 /* 118 */ { MAD_F(0x04858c83) /* 0.282604707 */, 11 },
155 /* 119 */ { MAD_F(0x0492a59f) /* 0.285802482 */, 11 },
156 /* 120 */ { MAD_F(0x049fc824) /* 0.289009227 */, 11 },
157 /* 121 */ { MAD_F(0x04acf402) /* 0.292224893 */, 11 },
158 /* 122 */ { MAD_F(0x04ba292e) /* 0.295449429 */, 11 },
159 /* 123 */ { MAD_F(0x04c7679a) /* 0.298682788 */, 11 },
160 /* 124 */ { MAD_F(0x04d4af3a) /* 0.301924921 */, 11 },
161 /* 125 */ { MAD_F(0x04e20000) /* 0.305175781 */, 11 },
162 /* 126 */ { MAD_F(0x04ef59e0) /* 0.308435322 */, 11 },
163 /* 127 */ { MAD_F(0x04fcbcce) /* 0.311703498 */, 11 },
164
165 /* 128 */ { MAD_F(0x050a28be) /* 0.314980262 */, 11 },
166 /* 129 */ { MAD_F(0x05179da4) /* 0.318265572 */, 11 },
167 /* 130 */ { MAD_F(0x05251b73) /* 0.321559381 */, 11 },
168 /* 131 */ { MAD_F(0x0532a220) /* 0.324861647 */, 11 },
169 /* 132 */ { MAD_F(0x054031a0) /* 0.328172327 */, 11 },
170 /* 133 */ { MAD_F(0x054dc9e7) /* 0.331491377 */, 11 },
171 /* 134 */ { MAD_F(0x055b6ae9) /* 0.334818756 */, 11 },
172 /* 135 */ { MAD_F(0x0569149c) /* 0.338154423 */, 11 },
173 /* 136 */ { MAD_F(0x0576c6f5) /* 0.341498336 */, 11 },
174 /* 137 */ { MAD_F(0x058481e9) /* 0.344850455 */, 11 },
175 /* 138 */ { MAD_F(0x0592456d) /* 0.348210741 */, 11 },
176 /* 139 */ { MAD_F(0x05a01176) /* 0.351579152 */, 11 },
177 /* 140 */ { MAD_F(0x05ade5fa) /* 0.354955651 */, 11 },
178 /* 141 */ { MAD_F(0x05bbc2ef) /* 0.358340200 */, 11 },
179 /* 142 */ { MAD_F(0x05c9a84a) /* 0.361732758 */, 11 },
180 /* 143 */ { MAD_F(0x05d79601) /* 0.365133291 */, 11 },
181
182 /* 144 */ { MAD_F(0x05e58c0b) /* 0.368541759 */, 11 },
183 /* 145 */ { MAD_F(0x05f38a5d) /* 0.371958126 */, 11 },
184 /* 146 */ { MAD_F(0x060190ee) /* 0.375382356 */, 11 },
185 /* 147 */ { MAD_F(0x060f9fb3) /* 0.378814413 */, 11 },
186 /* 148 */ { MAD_F(0x061db6a5) /* 0.382254261 */, 11 },
187 /* 149 */ { MAD_F(0x062bd5b8) /* 0.385701865 */, 11 },
188 /* 150 */ { MAD_F(0x0639fce4) /* 0.389157191 */, 11 },
189 /* 151 */ { MAD_F(0x06482c1f) /* 0.392620204 */, 11 },
190 /* 152 */ { MAD_F(0x06566361) /* 0.396090870 */, 11 },
191 /* 153 */ { MAD_F(0x0664a2a0) /* 0.399569155 */, 11 },
192 /* 154 */ { MAD_F(0x0672e9d4) /* 0.403055027 */, 11 },
193 /* 155 */ { MAD_F(0x068138f3) /* 0.406548452 */, 11 },
194 /* 156 */ { MAD_F(0x068f8ff5) /* 0.410049398 */, 11 },
195 /* 157 */ { MAD_F(0x069deed1) /* 0.413557833 */, 11 },
196 /* 158 */ { MAD_F(0x06ac557f) /* 0.417073724 */, 11 },
197 /* 159 */ { MAD_F(0x06bac3f6) /* 0.420597041 */, 11 },
198
199 /* 160 */ { MAD_F(0x06c93a2e) /* 0.424127753 */, 11 },
200 /* 161 */ { MAD_F(0x06d7b81f) /* 0.427665827 */, 11 },
201 /* 162 */ { MAD_F(0x06e63dc0) /* 0.431211234 */, 11 },
202 /* 163 */ { MAD_F(0x06f4cb09) /* 0.434763944 */, 11 },
203 /* 164 */ { MAD_F(0x07035ff3) /* 0.438323927 */, 11 },
204 /* 165 */ { MAD_F(0x0711fc75) /* 0.441891153 */, 11 },
205 /* 166 */ { MAD_F(0x0720a087) /* 0.445465593 */, 11 },
206 /* 167 */ { MAD_F(0x072f4c22) /* 0.449047217 */, 11 },
207 /* 168 */ { MAD_F(0x073dff3e) /* 0.452635998 */, 11 },
208 /* 169 */ { MAD_F(0x074cb9d3) /* 0.456231906 */, 11 },
209 /* 170 */ { MAD_F(0x075b7bdb) /* 0.459834914 */, 11 },
210 /* 171 */ { MAD_F(0x076a454c) /* 0.463444993 */, 11 },
211 /* 172 */ { MAD_F(0x07791620) /* 0.467062117 */, 11 },
212 /* 173 */ { MAD_F(0x0787ee50) /* 0.470686258 */, 11 },
213 /* 174 */ { MAD_F(0x0796cdd4) /* 0.474317388 */, 11 },
214 /* 175 */ { MAD_F(0x07a5b4a5) /* 0.477955481 */, 11 },
215
216 /* 176 */ { MAD_F(0x07b4a2bc) /* 0.481600510 */, 11 },
217 /* 177 */ { MAD_F(0x07c39812) /* 0.485252449 */, 11 },
218 /* 178 */ { MAD_F(0x07d294a0) /* 0.488911273 */, 11 },
219 /* 179 */ { MAD_F(0x07e1985f) /* 0.492576954 */, 11 },
220 /* 180 */ { MAD_F(0x07f0a348) /* 0.496249468 */, 11 },
221 /* 181 */ { MAD_F(0x07ffb554) /* 0.499928790 */, 11 },
222 /* 182 */ { MAD_F(0x0407673f) /* 0.251807447 */, 12 },
223 /* 183 */ { MAD_F(0x040ef75e) /* 0.253653877 */, 12 },
224 /* 184 */ { MAD_F(0x04168b05) /* 0.255503674 */, 12 },
225 /* 185 */ { MAD_F(0x041e2230) /* 0.257356825 */, 12 },
226 /* 186 */ { MAD_F(0x0425bcdd) /* 0.259213318 */, 12 },
227 /* 187 */ { MAD_F(0x042d5b07) /* 0.261073141 */, 12 },
228 /* 188 */ { MAD_F(0x0434fcad) /* 0.262936282 */, 12 },
229 /* 189 */ { MAD_F(0x043ca1c9) /* 0.264802730 */, 12 },
230 /* 190 */ { MAD_F(0x04444a5a) /* 0.266672472 */, 12 },
231 /* 191 */ { MAD_F(0x044bf65d) /* 0.268545497 */, 12 },
232
233 /* 192 */ { MAD_F(0x0453a5cd) /* 0.270421794 */, 12 },
234 /* 193 */ { MAD_F(0x045b58a9) /* 0.272301352 */, 12 },
235 /* 194 */ { MAD_F(0x04630eed) /* 0.274184158 */, 12 },
236 /* 195 */ { MAD_F(0x046ac896) /* 0.276070203 */, 12 },
237 /* 196 */ { MAD_F(0x047285a2) /* 0.277959474 */, 12 },
238 /* 197 */ { MAD_F(0x047a460c) /* 0.279851960 */, 12 },
239 /* 198 */ { MAD_F(0x048209d3) /* 0.281747652 */, 12 },
240 /* 199 */ { MAD_F(0x0489d0f4) /* 0.283646538 */, 12 },
241 /* 200 */ { MAD_F(0x04919b6a) /* 0.285548607 */, 12 },
242 /* 201 */ { MAD_F(0x04996935) /* 0.287453849 */, 12 },
243 /* 202 */ { MAD_F(0x04a13a50) /* 0.289362253 */, 12 },
244 /* 203 */ { MAD_F(0x04a90eba) /* 0.291273810 */, 12 },
245 /* 204 */ { MAD_F(0x04b0e66e) /* 0.293188507 */, 12 },
246 /* 205 */ { MAD_F(0x04b8c16c) /* 0.295106336 */, 12 },
247 /* 206 */ { MAD_F(0x04c09faf) /* 0.297027285 */, 12 },
248 /* 207 */ { MAD_F(0x04c88135) /* 0.298951346 */, 12 },
249
250 /* 208 */ { MAD_F(0x04d065fb) /* 0.300878507 */, 12 },
251 /* 209 */ { MAD_F(0x04d84dff) /* 0.302808759 */, 12 },
252 /* 210 */ { MAD_F(0x04e0393e) /* 0.304742092 */, 12 },
253 /* 211 */ { MAD_F(0x04e827b6) /* 0.306678497 */, 12 },
254 /* 212 */ { MAD_F(0x04f01963) /* 0.308617963 */, 12 },
255 /* 213 */ { MAD_F(0x04f80e44) /* 0.310560480 */, 12 },
256 /* 214 */ { MAD_F(0x05000655) /* 0.312506041 */, 12 },
257 /* 215 */ { MAD_F(0x05080195) /* 0.314454634 */, 12 },
258 /* 216 */ { MAD_F(0x05100000) /* 0.316406250 */, 12 },
259 /* 217 */ { MAD_F(0x05180194) /* 0.318360880 */, 12 },
260 /* 218 */ { MAD_F(0x0520064f) /* 0.320318516 */, 12 },
261 /* 219 */ { MAD_F(0x05280e2d) /* 0.322279147 */, 12 },
262 /* 220 */ { MAD_F(0x0530192e) /* 0.324242764 */, 12 },
263 /* 221 */ { MAD_F(0x0538274e) /* 0.326209359 */, 12 },
264 /* 222 */ { MAD_F(0x0540388a) /* 0.328178922 */, 12 },
265 /* 223 */ { MAD_F(0x05484ce2) /* 0.330151445 */, 12 },
266
267 /* 224 */ { MAD_F(0x05506451) /* 0.332126919 */, 12 },
268 /* 225 */ { MAD_F(0x05587ed5) /* 0.334105334 */, 12 },
269 /* 226 */ { MAD_F(0x05609c6e) /* 0.336086683 */, 12 },
270 /* 227 */ { MAD_F(0x0568bd17) /* 0.338070956 */, 12 },
271 /* 228 */ { MAD_F(0x0570e0cf) /* 0.340058145 */, 12 },
272 /* 229 */ { MAD_F(0x05790793) /* 0.342048241 */, 12 },
273 /* 230 */ { MAD_F(0x05813162) /* 0.344041237 */, 12 },
274 /* 231 */ { MAD_F(0x05895e39) /* 0.346037122 */, 12 },
275 /* 232 */ { MAD_F(0x05918e15) /* 0.348035890 */, 12 },
276 /* 233 */ { MAD_F(0x0599c0f4) /* 0.350037532 */, 12 },
277 /* 234 */ { MAD_F(0x05a1f6d5) /* 0.352042040 */, 12 },
278 /* 235 */ { MAD_F(0x05aa2fb5) /* 0.354049405 */, 12 },
279 /* 236 */ { MAD_F(0x05b26b92) /* 0.356059619 */, 12 },
280 /* 237 */ { MAD_F(0x05baaa69) /* 0.358072674 */, 12 },
281 /* 238 */ { MAD_F(0x05c2ec39) /* 0.360088563 */, 12 },
282 /* 239 */ { MAD_F(0x05cb3100) /* 0.362107278 */, 12 },
283
284 /* 240 */ { MAD_F(0x05d378bb) /* 0.364128809 */, 12 },
285 /* 241 */ { MAD_F(0x05dbc368) /* 0.366153151 */, 12 },
286 /* 242 */ { MAD_F(0x05e41105) /* 0.368180294 */, 12 },
287 /* 243 */ { MAD_F(0x05ec6190) /* 0.370210231 */, 12 },
288 /* 244 */ { MAD_F(0x05f4b507) /* 0.372242955 */, 12 },
289 /* 245 */ { MAD_F(0x05fd0b68) /* 0.374278458 */, 12 },
290 /* 246 */ { MAD_F(0x060564b1) /* 0.376316732 */, 12 },
291 /* 247 */ { MAD_F(0x060dc0e0) /* 0.378357769 */, 12 },
292 /* 248 */ { MAD_F(0x06161ff3) /* 0.380401563 */, 12 },
293 /* 249 */ { MAD_F(0x061e81e8) /* 0.382448106 */, 12 },
294 /* 250 */ { MAD_F(0x0626e6bc) /* 0.384497391 */, 12 },
295 /* 251 */ { MAD_F(0x062f4e6f) /* 0.386549409 */, 12 },
296 /* 252 */ { MAD_F(0x0637b8fd) /* 0.388604155 */, 12 },
297 /* 253 */ { MAD_F(0x06402666) /* 0.390661620 */, 12 },
298 /* 254 */ { MAD_F(0x064896a7) /* 0.392721798 */, 12 },
299 /* 255 */ { MAD_F(0x065109be) /* 0.394784681 */, 12 },
300
301 /* 256 */ { MAD_F(0x06597fa9) /* 0.396850263 */, 12 },
302 /* 257 */ { MAD_F(0x0661f867) /* 0.398918536 */, 12 },
303 /* 258 */ { MAD_F(0x066a73f5) /* 0.400989493 */, 12 },
304 /* 259 */ { MAD_F(0x0672f252) /* 0.403063128 */, 12 },
305 /* 260 */ { MAD_F(0x067b737c) /* 0.405139433 */, 12 },
306 /* 261 */ { MAD_F(0x0683f771) /* 0.407218402 */, 12 },
307 /* 262 */ { MAD_F(0x068c7e2f) /* 0.409300027 */, 12 },
308 /* 263 */ { MAD_F(0x069507b5) /* 0.411384303 */, 12 },
309 /* 264 */ { MAD_F(0x069d9400) /* 0.413471222 */, 12 },
310 /* 265 */ { MAD_F(0x06a6230f) /* 0.415560778 */, 12 },
311 /* 266 */ { MAD_F(0x06aeb4e0) /* 0.417652964 */, 12 },
312 /* 267 */ { MAD_F(0x06b74971) /* 0.419747773 */, 12 },
313 /* 268 */ { MAD_F(0x06bfe0c0) /* 0.421845199 */, 12 },
314 /* 269 */ { MAD_F(0x06c87acc) /* 0.423945235 */, 12 },
315 /* 270 */ { MAD_F(0x06d11794) /* 0.426047876 */, 12 },
316 /* 271 */ { MAD_F(0x06d9b714) /* 0.428153114 */, 12 },
317
318 /* 272 */ { MAD_F(0x06e2594c) /* 0.430260942 */, 12 },
319 /* 273 */ { MAD_F(0x06eafe3a) /* 0.432371356 */, 12 },
320 /* 274 */ { MAD_F(0x06f3a5dc) /* 0.434484348 */, 12 },
321 /* 275 */ { MAD_F(0x06fc5030) /* 0.436599912 */, 12 },
322 /* 276 */ { MAD_F(0x0704fd35) /* 0.438718042 */, 12 },
323 /* 277 */ { MAD_F(0x070dacea) /* 0.440838732 */, 12 },
324 /* 278 */ { MAD_F(0x07165f4b) /* 0.442961975 */, 12 },
325 /* 279 */ { MAD_F(0x071f1459) /* 0.445087765 */, 12 },
326 /* 280 */ { MAD_F(0x0727cc11) /* 0.447216097 */, 12 },
327 /* 281 */ { MAD_F(0x07308671) /* 0.449346964 */, 12 },
328 /* 282 */ { MAD_F(0x07394378) /* 0.451480360 */, 12 },
329 /* 283 */ { MAD_F(0x07420325) /* 0.453616280 */, 12 },
330 /* 284 */ { MAD_F(0x074ac575) /* 0.455754717 */, 12 },
331 /* 285 */ { MAD_F(0x07538a67) /* 0.457895665 */, 12 },
332 /* 286 */ { MAD_F(0x075c51fa) /* 0.460039119 */, 12 },
333 /* 287 */ { MAD_F(0x07651c2c) /* 0.462185072 */, 12 },
334
335 /* 288 */ { MAD_F(0x076de8fc) /* 0.464333519 */, 12 },
336 /* 289 */ { MAD_F(0x0776b867) /* 0.466484455 */, 12 },
337 /* 290 */ { MAD_F(0x077f8a6d) /* 0.468637872 */, 12 },
338 /* 291 */ { MAD_F(0x07885f0b) /* 0.470793767 */, 12 },
339 /* 292 */ { MAD_F(0x07913641) /* 0.472952132 */, 12 },
340 /* 293 */ { MAD_F(0x079a100c) /* 0.475112962 */, 12 },
341 /* 294 */ { MAD_F(0x07a2ec6c) /* 0.477276252 */, 12 },
342 /* 295 */ { MAD_F(0x07abcb5f) /* 0.479441997 */, 12 },
343 /* 296 */ { MAD_F(0x07b4ace3) /* 0.481610189 */, 12 },
344 /* 297 */ { MAD_F(0x07bd90f6) /* 0.483780825 */, 12 },
345 /* 298 */ { MAD_F(0x07c67798) /* 0.485953899 */, 12 },
346 /* 299 */ { MAD_F(0x07cf60c7) /* 0.488129404 */, 12 },
347 /* 300 */ { MAD_F(0x07d84c81) /* 0.490307336 */, 12 },
348 /* 301 */ { MAD_F(0x07e13ac5) /* 0.492487690 */, 12 },
349 /* 302 */ { MAD_F(0x07ea2b92) /* 0.494670459 */, 12 },
350 /* 303 */ { MAD_F(0x07f31ee6) /* 0.496855639 */, 12 },
351
352 /* 304 */ { MAD_F(0x07fc14bf) /* 0.499043224 */, 12 },
353 /* 305 */ { MAD_F(0x0402868e) /* 0.250616605 */, 13 },
354 /* 306 */ { MAD_F(0x040703ff) /* 0.251712795 */, 13 },
355 /* 307 */ { MAD_F(0x040b82b0) /* 0.252810180 */, 13 },
356 /* 308 */ { MAD_F(0x041002a1) /* 0.253908756 */, 13 },
357 /* 309 */ { MAD_F(0x041483d1) /* 0.255008523 */, 13 },
358 /* 310 */ { MAD_F(0x04190640) /* 0.256109476 */, 13 },
359 /* 311 */ { MAD_F(0x041d89ed) /* 0.257211614 */, 13 },
360 /* 312 */ { MAD_F(0x04220ed7) /* 0.258314934 */, 13 },
361 /* 313 */ { MAD_F(0x042694fe) /* 0.259419433 */, 13 },
362 /* 314 */ { MAD_F(0x042b1c60) /* 0.260525110 */, 13 },
363 /* 315 */ { MAD_F(0x042fa4fe) /* 0.261631960 */, 13 },
364 /* 316 */ { MAD_F(0x04342ed7) /* 0.262739982 */, 13 },
365 /* 317 */ { MAD_F(0x0438b9e9) /* 0.263849174 */, 13 },
366 /* 318 */ { MAD_F(0x043d4635) /* 0.264959533 */, 13 },
367 /* 319 */ { MAD_F(0x0441d3b9) /* 0.266071056 */, 13 },
368
369 /* 320 */ { MAD_F(0x04466275) /* 0.267183742 */, 13 },
370 /* 321 */ { MAD_F(0x044af269) /* 0.268297587 */, 13 },
371 /* 322 */ { MAD_F(0x044f8393) /* 0.269412589 */, 13 },
372 /* 323 */ { MAD_F(0x045415f3) /* 0.270528746 */, 13 },
373 /* 324 */ { MAD_F(0x0458a989) /* 0.271646056 */, 13 },
374 /* 325 */ { MAD_F(0x045d3e53) /* 0.272764515 */, 13 },
375 /* 326 */ { MAD_F(0x0461d451) /* 0.273884123 */, 13 },
376 /* 327 */ { MAD_F(0x04666b83) /* 0.275004875 */, 13 },
377 /* 328 */ { MAD_F(0x046b03e7) /* 0.276126771 */, 13 },
378 /* 329 */ { MAD_F(0x046f9d7e) /* 0.277249808 */, 13 },
379 /* 330 */ { MAD_F(0x04743847) /* 0.278373983 */, 13 },
380 /* 331 */ { MAD_F(0x0478d440) /* 0.279499294 */, 13 },
381 /* 332 */ { MAD_F(0x047d716a) /* 0.280625739 */, 13 },
382 /* 333 */ { MAD_F(0x04820fc3) /* 0.281753315 */, 13 },
383 /* 334 */ { MAD_F(0x0486af4c) /* 0.282882021 */, 13 },
384 /* 335 */ { MAD_F(0x048b5003) /* 0.284011853 */, 13 },
385
386 /* 336 */ { MAD_F(0x048ff1e8) /* 0.285142811 */, 13 },
387 /* 337 */ { MAD_F(0x049494fb) /* 0.286274891 */, 13 },
388 /* 338 */ { MAD_F(0x0499393a) /* 0.287408091 */, 13 },
389 /* 339 */ { MAD_F(0x049ddea5) /* 0.288542409 */, 13 },
390 /* 340 */ { MAD_F(0x04a2853c) /* 0.289677844 */, 13 },
391 /* 341 */ { MAD_F(0x04a72cfe) /* 0.290814392 */, 13 },
392 /* 342 */ { MAD_F(0x04abd5ea) /* 0.291952051 */, 13 },
393 /* 343 */ { MAD_F(0x04b08000) /* 0.293090820 */, 13 },
394 /* 344 */ { MAD_F(0x04b52b3f) /* 0.294230696 */, 13 },
395 /* 345 */ { MAD_F(0x04b9d7a7) /* 0.295371678 */, 13 },
396 /* 346 */ { MAD_F(0x04be8537) /* 0.296513762 */, 13 },
397 /* 347 */ { MAD_F(0x04c333ee) /* 0.297656947 */, 13 },
398 /* 348 */ { MAD_F(0x04c7e3cc) /* 0.298801231 */, 13 },
399 /* 349 */ { MAD_F(0x04cc94d1) /* 0.299946611 */, 13 },
400 /* 350 */ { MAD_F(0x04d146fb) /* 0.301093085 */, 13 },
401 /* 351 */ { MAD_F(0x04d5fa4b) /* 0.302240653 */, 13 },
402
403 /* 352 */ { MAD_F(0x04daaec0) /* 0.303389310 */, 13 },
404 /* 353 */ { MAD_F(0x04df6458) /* 0.304539056 */, 13 },
405 /* 354 */ { MAD_F(0x04e41b14) /* 0.305689888 */, 13 },
406 /* 355 */ { MAD_F(0x04e8d2f3) /* 0.306841804 */, 13 },
407 /* 356 */ { MAD_F(0x04ed8bf5) /* 0.307994802 */, 13 },
408 /* 357 */ { MAD_F(0x04f24618) /* 0.309148880 */, 13 },
409 /* 358 */ { MAD_F(0x04f7015d) /* 0.310304037 */, 13 },
410 /* 359 */ { MAD_F(0x04fbbdc3) /* 0.311460269 */, 13 },
411 /* 360 */ { MAD_F(0x05007b49) /* 0.312617576 */, 13 },
412 /* 361 */ { MAD_F(0x050539ef) /* 0.313775954 */, 13 },
413 /* 362 */ { MAD_F(0x0509f9b4) /* 0.314935403 */, 13 },
414 /* 363 */ { MAD_F(0x050eba98) /* 0.316095920 */, 13 },
415 /* 364 */ { MAD_F(0x05137c9a) /* 0.317257503 */, 13 },
416 /* 365 */ { MAD_F(0x05183fba) /* 0.318420150 */, 13 },
417 /* 366 */ { MAD_F(0x051d03f7) /* 0.319583859 */, 13 },
418 /* 367 */ { MAD_F(0x0521c950) /* 0.320748629 */, 13 },
419
420 /* 368 */ { MAD_F(0x05268fc6) /* 0.321914457 */, 13 },
421 /* 369 */ { MAD_F(0x052b5757) /* 0.323081342 */, 13 },
422 /* 370 */ { MAD_F(0x05302003) /* 0.324249281 */, 13 },
423 /* 371 */ { MAD_F(0x0534e9ca) /* 0.325418273 */, 13 },
424 /* 372 */ { MAD_F(0x0539b4ab) /* 0.326588316 */, 13 },
425 /* 373 */ { MAD_F(0x053e80a6) /* 0.327759407 */, 13 },
426 /* 374 */ { MAD_F(0x05434db9) /* 0.328931546 */, 13 },
427 /* 375 */ { MAD_F(0x05481be5) /* 0.330104730 */, 13 },
428 /* 376 */ { MAD_F(0x054ceb2a) /* 0.331278957 */, 13 },
429 /* 377 */ { MAD_F(0x0551bb85) /* 0.332454225 */, 13 },
430 /* 378 */ { MAD_F(0x05568cf8) /* 0.333630533 */, 13 },
431 /* 379 */ { MAD_F(0x055b5f81) /* 0.334807879 */, 13 },
432 /* 380 */ { MAD_F(0x05603321) /* 0.335986261 */, 13 },
433 /* 381 */ { MAD_F(0x056507d6) /* 0.337165677 */, 13 },
434 /* 382 */ { MAD_F(0x0569dda0) /* 0.338346125 */, 13 },
435 /* 383 */ { MAD_F(0x056eb47f) /* 0.339527604 */, 13 },
436
437 /* 384 */ { MAD_F(0x05738c72) /* 0.340710111 */, 13 },
438 /* 385 */ { MAD_F(0x05786578) /* 0.341893646 */, 13 },
439 /* 386 */ { MAD_F(0x057d3f92) /* 0.343078205 */, 13 },
440 /* 387 */ { MAD_F(0x05821abf) /* 0.344263788 */, 13 },
441 /* 388 */ { MAD_F(0x0586f6fd) /* 0.345450393 */, 13 },
442 /* 389 */ { MAD_F(0x058bd44e) /* 0.346638017 */, 13 },
443 /* 390 */ { MAD_F(0x0590b2b0) /* 0.347826659 */, 13 },
444 /* 391 */ { MAD_F(0x05959222) /* 0.349016318 */, 13 },
445 /* 392 */ { MAD_F(0x059a72a5) /* 0.350206992 */, 13 },
446 /* 393 */ { MAD_F(0x059f5438) /* 0.351398678 */, 13 },
447 /* 394 */ { MAD_F(0x05a436da) /* 0.352591376 */, 13 },
448 /* 395 */ { MAD_F(0x05a91a8c) /* 0.353785083 */, 13 },
449 /* 396 */ { MAD_F(0x05adff4c) /* 0.354979798 */, 13 },
450 /* 397 */ { MAD_F(0x05b2e51a) /* 0.356175519 */, 13 },
451 /* 398 */ { MAD_F(0x05b7cbf5) /* 0.357372244 */, 13 },
452 /* 399 */ { MAD_F(0x05bcb3de) /* 0.358569972 */, 13 },
453
454 /* 400 */ { MAD_F(0x05c19cd3) /* 0.359768701 */, 13 },
455 /* 401 */ { MAD_F(0x05c686d5) /* 0.360968429 */, 13 },
456 /* 402 */ { MAD_F(0x05cb71e2) /* 0.362169156 */, 13 },
457 /* 403 */ { MAD_F(0x05d05dfb) /* 0.363370878 */, 13 },
458 /* 404 */ { MAD_F(0x05d54b1f) /* 0.364573594 */, 13 },
459 /* 405 */ { MAD_F(0x05da394d) /* 0.365777304 */, 13 },
460 /* 406 */ { MAD_F(0x05df2885) /* 0.366982004 */, 13 },
461 /* 407 */ { MAD_F(0x05e418c7) /* 0.368187694 */, 13 },
462 /* 408 */ { MAD_F(0x05e90a12) /* 0.369394372 */, 13 },
463 /* 409 */ { MAD_F(0x05edfc66) /* 0.370602036 */, 13 },
464 /* 410 */ { MAD_F(0x05f2efc2) /* 0.371810684 */, 13 },
465 /* 411 */ { MAD_F(0x05f7e426) /* 0.373020316 */, 13 },
466 /* 412 */ { MAD_F(0x05fcd992) /* 0.374230929 */, 13 },
467 /* 413 */ { MAD_F(0x0601d004) /* 0.375442522 */, 13 },
468 /* 414 */ { MAD_F(0x0606c77d) /* 0.376655093 */, 13 },
469 /* 415 */ { MAD_F(0x060bbffd) /* 0.377868641 */, 13 },
470
471 /* 416 */ { MAD_F(0x0610b982) /* 0.379083164 */, 13 },
472 /* 417 */ { MAD_F(0x0615b40c) /* 0.380298661 */, 13 },
473 /* 418 */ { MAD_F(0x061aaf9c) /* 0.381515130 */, 13 },
474 /* 419 */ { MAD_F(0x061fac2f) /* 0.382732569 */, 13 },
475 /* 420 */ { MAD_F(0x0624a9c7) /* 0.383950977 */, 13 },
476 /* 421 */ { MAD_F(0x0629a863) /* 0.385170352 */, 13 },
477 /* 422 */ { MAD_F(0x062ea802) /* 0.386390694 */, 13 },
478 /* 423 */ { MAD_F(0x0633a8a3) /* 0.387611999 */, 13 },
479 /* 424 */ { MAD_F(0x0638aa48) /* 0.388834268 */, 13 },
480 /* 425 */ { MAD_F(0x063dacee) /* 0.390057497 */, 13 },
481 /* 426 */ { MAD_F(0x0642b096) /* 0.391281687 */, 13 },
482 /* 427 */ { MAD_F(0x0647b53f) /* 0.392506834 */, 13 },
483 /* 428 */ { MAD_F(0x064cbae9) /* 0.393732939 */, 13 },
484 /* 429 */ { MAD_F(0x0651c193) /* 0.394959999 */, 13 },
485 /* 430 */ { MAD_F(0x0656c93d) /* 0.396188012 */, 13 },
486 /* 431 */ { MAD_F(0x065bd1e7) /* 0.397416978 */, 13 },
487
488 /* 432 */ { MAD_F(0x0660db91) /* 0.398646895 */, 13 },
489 /* 433 */ { MAD_F(0x0665e639) /* 0.399877761 */, 13 },
490 /* 434 */ { MAD_F(0x066af1df) /* 0.401109575 */, 13 },
491 /* 435 */ { MAD_F(0x066ffe84) /* 0.402342335 */, 13 },
492 /* 436 */ { MAD_F(0x06750c26) /* 0.403576041 */, 13 },
493 /* 437 */ { MAD_F(0x067a1ac6) /* 0.404810690 */, 13 },
494 /* 438 */ { MAD_F(0x067f2a62) /* 0.406046281 */, 13 },
495 /* 439 */ { MAD_F(0x06843afb) /* 0.407282813 */, 13 },
496 /* 440 */ { MAD_F(0x06894c90) /* 0.408520284 */, 13 },
497 /* 441 */ { MAD_F(0x068e5f21) /* 0.409758693 */, 13 },
498 /* 442 */ { MAD_F(0x069372ae) /* 0.410998038 */, 13 },
499 /* 443 */ { MAD_F(0x06988735) /* 0.412238319 */, 13 },
500 /* 444 */ { MAD_F(0x069d9cb7) /* 0.413479532 */, 13 },
501 /* 445 */ { MAD_F(0x06a2b333) /* 0.414721679 */, 13 },
502 /* 446 */ { MAD_F(0x06a7caa9) /* 0.415964756 */, 13 },
503 /* 447 */ { MAD_F(0x06ace318) /* 0.417208762 */, 13 },
504
505 /* 448 */ { MAD_F(0x06b1fc81) /* 0.418453696 */, 13 },
506 /* 449 */ { MAD_F(0x06b716e2) /* 0.419699557 */, 13 },
507 /* 450 */ { MAD_F(0x06bc323b) /* 0.420946343 */, 13 },
508 /* 451 */ { MAD_F(0x06c14e8d) /* 0.422194054 */, 13 },
509 /* 452 */ { MAD_F(0x06c66bd6) /* 0.423442686 */, 13 },
510 /* 453 */ { MAD_F(0x06cb8a17) /* 0.424692240 */, 13 },
511 /* 454 */ { MAD_F(0x06d0a94e) /* 0.425942714 */, 13 },
512 /* 455 */ { MAD_F(0x06d5c97c) /* 0.427194106 */, 13 },
513 /* 456 */ { MAD_F(0x06daeaa1) /* 0.428446415 */, 13 },
514 /* 457 */ { MAD_F(0x06e00cbb) /* 0.429699640 */, 13 },
515 /* 458 */ { MAD_F(0x06e52fca) /* 0.430953779 */, 13 },
516 /* 459 */ { MAD_F(0x06ea53cf) /* 0.432208832 */, 13 },
517 /* 460 */ { MAD_F(0x06ef78c8) /* 0.433464796 */, 13 },
518 /* 461 */ { MAD_F(0x06f49eb6) /* 0.434721671 */, 13 },
519 /* 462 */ { MAD_F(0x06f9c597) /* 0.435979455 */, 13 },
520 /* 463 */ { MAD_F(0x06feed6d) /* 0.437238146 */, 13 },
521
522 /* 464 */ { MAD_F(0x07041636) /* 0.438497744 */, 13 },
523 /* 465 */ { MAD_F(0x07093ff2) /* 0.439758248 */, 13 },
524 /* 466 */ { MAD_F(0x070e6aa0) /* 0.441019655 */, 13 },
525 /* 467 */ { MAD_F(0x07139641) /* 0.442281965 */, 13 },
526 /* 468 */ { MAD_F(0x0718c2d3) /* 0.443545176 */, 13 },
527 /* 469 */ { MAD_F(0x071df058) /* 0.444809288 */, 13 },
528 /* 470 */ { MAD_F(0x07231ecd) /* 0.446074298 */, 13 },
529 /* 471 */ { MAD_F(0x07284e34) /* 0.447340205 */, 13 },
530 /* 472 */ { MAD_F(0x072d7e8b) /* 0.448607009 */, 13 },
531 /* 473 */ { MAD_F(0x0732afd2) /* 0.449874708 */, 13 },
532 /* 474 */ { MAD_F(0x0737e209) /* 0.451143300 */, 13 },
533 /* 475 */ { MAD_F(0x073d1530) /* 0.452412785 */, 13 },
534 /* 476 */ { MAD_F(0x07424946) /* 0.453683161 */, 13 },
535 /* 477 */ { MAD_F(0x07477e4b) /* 0.454954427 */, 13 },
536 /* 478 */ { MAD_F(0x074cb43e) /* 0.456226581 */, 13 },
537 /* 479 */ { MAD_F(0x0751eb20) /* 0.457499623 */, 13 },
538
539 /* 480 */ { MAD_F(0x075722ef) /* 0.458773552 */, 13 },
540 /* 481 */ { MAD_F(0x075c5bac) /* 0.460048365 */, 13 },
541 /* 482 */ { MAD_F(0x07619557) /* 0.461324062 */, 13 },
542 /* 483 */ { MAD_F(0x0766cfee) /* 0.462600642 */, 13 },
543 /* 484 */ { MAD_F(0x076c0b72) /* 0.463878102 */, 13 },
544 /* 485 */ { MAD_F(0x077147e2) /* 0.465156443 */, 13 },
545 /* 486 */ { MAD_F(0x0776853e) /* 0.466435663 */, 13 },
546 /* 487 */ { MAD_F(0x077bc385) /* 0.467715761 */, 13 },
547 /* 488 */ { MAD_F(0x078102b8) /* 0.468996735 */, 13 },
548 /* 489 */ { MAD_F(0x078642d6) /* 0.470278584 */, 13 },
549 /* 490 */ { MAD_F(0x078b83de) /* 0.471561307 */, 13 },
550 /* 491 */ { MAD_F(0x0790c5d1) /* 0.472844904 */, 13 },
551 /* 492 */ { MAD_F(0x079608ae) /* 0.474129372 */, 13 },
552 /* 493 */ { MAD_F(0x079b4c74) /* 0.475414710 */, 13 },
553 /* 494 */ { MAD_F(0x07a09124) /* 0.476700918 */, 13 },
554 /* 495 */ { MAD_F(0x07a5d6bd) /* 0.477987994 */, 13 },
555
556 /* 496 */ { MAD_F(0x07ab1d3e) /* 0.479275937 */, 13 },
557 /* 497 */ { MAD_F(0x07b064a8) /* 0.480564746 */, 13 },
558 /* 498 */ { MAD_F(0x07b5acfb) /* 0.481854420 */, 13 },
559 /* 499 */ { MAD_F(0x07baf635) /* 0.483144957 */, 13 },
560 /* 500 */ { MAD_F(0x07c04056) /* 0.484436356 */, 13 },
561 /* 501 */ { MAD_F(0x07c58b5f) /* 0.485728617 */, 13 },
562 /* 502 */ { MAD_F(0x07cad74e) /* 0.487021738 */, 13 },
563 /* 503 */ { MAD_F(0x07d02424) /* 0.488315717 */, 13 },
564 /* 504 */ { MAD_F(0x07d571e0) /* 0.489610555 */, 13 },
565 /* 505 */ { MAD_F(0x07dac083) /* 0.490906249 */, 13 },
566 /* 506 */ { MAD_F(0x07e0100a) /* 0.492202799 */, 13 },
567 /* 507 */ { MAD_F(0x07e56078) /* 0.493500203 */, 13 },
568 /* 508 */ { MAD_F(0x07eab1ca) /* 0.494798460 */, 13 },
569 /* 509 */ { MAD_F(0x07f00401) /* 0.496097570 */, 13 },
570 /* 510 */ { MAD_F(0x07f5571d) /* 0.497397530 */, 13 },
571 /* 511 */ { MAD_F(0x07faab1c) /* 0.498698341 */, 13 },
572
573 /* 512 */ { MAD_F(0x04000000) /* 0.250000000 */, 14 },
574 /* 513 */ { MAD_F(0x0402aae3) /* 0.250651254 */, 14 },
575 /* 514 */ { MAD_F(0x04055638) /* 0.251302930 */, 14 },
576 /* 515 */ { MAD_F(0x040801ff) /* 0.251955030 */, 14 },
577 /* 516 */ { MAD_F(0x040aae37) /* 0.252607552 */, 14 },
578 /* 517 */ { MAD_F(0x040d5ae0) /* 0.253260495 */, 14 },
579 /* 518 */ { MAD_F(0x041007fa) /* 0.253913860 */, 14 },
580 /* 519 */ { MAD_F(0x0412b586) /* 0.254567645 */, 14 },
581 /* 520 */ { MAD_F(0x04156381) /* 0.255221850 */, 14 },
582 /* 521 */ { MAD_F(0x041811ee) /* 0.255876475 */, 14 },
583 /* 522 */ { MAD_F(0x041ac0cb) /* 0.256531518 */, 14 },
584 /* 523 */ { MAD_F(0x041d7018) /* 0.257186980 */, 14 },
585 /* 524 */ { MAD_F(0x04201fd5) /* 0.257842860 */, 14 },
586 /* 525 */ { MAD_F(0x0422d003) /* 0.258499157 */, 14 },
587 /* 526 */ { MAD_F(0x042580a0) /* 0.259155872 */, 14 },
588 /* 527 */ { MAD_F(0x042831ad) /* 0.259813002 */, 14 },
589
590 /* 528 */ { MAD_F(0x042ae32a) /* 0.260470548 */, 14 },
591 /* 529 */ { MAD_F(0x042d9516) /* 0.261128510 */, 14 },
592 /* 530 */ { MAD_F(0x04304772) /* 0.261786886 */, 14 },
593 /* 531 */ { MAD_F(0x0432fa3d) /* 0.262445676 */, 14 },
594 /* 532 */ { MAD_F(0x0435ad76) /* 0.263104880 */, 14 },
595 /* 533 */ { MAD_F(0x0438611f) /* 0.263764497 */, 14 },
596 /* 534 */ { MAD_F(0x043b1536) /* 0.264424527 */, 14 },
597 /* 535 */ { MAD_F(0x043dc9bc) /* 0.265084969 */, 14 },
598 /* 536 */ { MAD_F(0x04407eb1) /* 0.265745823 */, 14 },
599 /* 537 */ { MAD_F(0x04433414) /* 0.266407088 */, 14 },
600 /* 538 */ { MAD_F(0x0445e9e5) /* 0.267068763 */, 14 },
601 /* 539 */ { MAD_F(0x0448a024) /* 0.267730848 */, 14 },
602 /* 540 */ { MAD_F(0x044b56d1) /* 0.268393343 */, 14 },
603 /* 541 */ { MAD_F(0x044e0dec) /* 0.269056248 */, 14 },
604 /* 542 */ { MAD_F(0x0450c575) /* 0.269719560 */, 14 },
605 /* 543 */ { MAD_F(0x04537d6b) /* 0.270383281 */, 14 },
606
607 /* 544 */ { MAD_F(0x045635cf) /* 0.271047409 */, 14 },
608 /* 545 */ { MAD_F(0x0458ee9f) /* 0.271711944 */, 14 },
609 /* 546 */ { MAD_F(0x045ba7dd) /* 0.272376886 */, 14 },
610 /* 547 */ { MAD_F(0x045e6188) /* 0.273042234 */, 14 },
611 /* 548 */ { MAD_F(0x04611ba0) /* 0.273707988 */, 14 },
612 /* 549 */ { MAD_F(0x0463d625) /* 0.274374147 */, 14 },
613 /* 550 */ { MAD_F(0x04669116) /* 0.275040710 */, 14 },
614 /* 551 */ { MAD_F(0x04694c74) /* 0.275707677 */, 14 },
615 /* 552 */ { MAD_F(0x046c083e) /* 0.276375048 */, 14 },
616 /* 553 */ { MAD_F(0x046ec474) /* 0.277042822 */, 14 },
617 /* 554 */ { MAD_F(0x04718116) /* 0.277710999 */, 14 },
618 /* 555 */ { MAD_F(0x04743e25) /* 0.278379578 */, 14 },
619 /* 556 */ { MAD_F(0x0476fb9f) /* 0.279048558 */, 14 },
620 /* 557 */ { MAD_F(0x0479b984) /* 0.279717940 */, 14 },
621 /* 558 */ { MAD_F(0x047c77d6) /* 0.280387722 */, 14 },
622 /* 559 */ { MAD_F(0x047f3693) /* 0.281057905 */, 14 },
623
624 /* 560 */ { MAD_F(0x0481f5bb) /* 0.281728487 */, 14 },
625 /* 561 */ { MAD_F(0x0484b54e) /* 0.282399469 */, 14 },
626 /* 562 */ { MAD_F(0x0487754c) /* 0.283070849 */, 14 },
627 /* 563 */ { MAD_F(0x048a35b6) /* 0.283742628 */, 14 },
628 /* 564 */ { MAD_F(0x048cf68a) /* 0.284414805 */, 14 },
629 /* 565 */ { MAD_F(0x048fb7c8) /* 0.285087379 */, 14 },
630 /* 566 */ { MAD_F(0x04927972) /* 0.285760350 */, 14 },
631 /* 567 */ { MAD_F(0x04953b85) /* 0.286433717 */, 14 },
632 /* 568 */ { MAD_F(0x0497fe03) /* 0.287107481 */, 14 },
633 /* 569 */ { MAD_F(0x049ac0eb) /* 0.287781640 */, 14 },
634 /* 570 */ { MAD_F(0x049d843e) /* 0.288456194 */, 14 },
635 /* 571 */ { MAD_F(0x04a047fa) /* 0.289131142 */, 14 },
636 /* 572 */ { MAD_F(0x04a30c20) /* 0.289806485 */, 14 },
637 /* 573 */ { MAD_F(0x04a5d0af) /* 0.290482221 */, 14 },
638 /* 574 */ { MAD_F(0x04a895a8) /* 0.291158351 */, 14 },
639 /* 575 */ { MAD_F(0x04ab5b0b) /* 0.291834873 */, 14 },
640
641 /* 576 */ { MAD_F(0x04ae20d7) /* 0.292511788 */, 14 },
642 /* 577 */ { MAD_F(0x04b0e70c) /* 0.293189094 */, 14 },
643 /* 578 */ { MAD_F(0x04b3adaa) /* 0.293866792 */, 14 },
644 /* 579 */ { MAD_F(0x04b674b1) /* 0.294544881 */, 14 },
645 /* 580 */ { MAD_F(0x04b93c21) /* 0.295223360 */, 14 },
646 /* 581 */ { MAD_F(0x04bc03fa) /* 0.295902229 */, 14 },
647 /* 582 */ { MAD_F(0x04becc3b) /* 0.296581488 */, 14 },
648 /* 583 */ { MAD_F(0x04c194e4) /* 0.297261136 */, 14 },
649 /* 584 */ { MAD_F(0x04c45df6) /* 0.297941173 */, 14 },
650 /* 585 */ { MAD_F(0x04c72771) /* 0.298621598 */, 14 },
651 /* 586 */ { MAD_F(0x04c9f153) /* 0.299302411 */, 14 },
652 /* 587 */ { MAD_F(0x04ccbb9d) /* 0.299983611 */, 14 },
653 /* 588 */ { MAD_F(0x04cf864f) /* 0.300665198 */, 14 },
654 /* 589 */ { MAD_F(0x04d25169) /* 0.301347172 */, 14 },
655 /* 590 */ { MAD_F(0x04d51ceb) /* 0.302029532 */, 14 },
656 /* 591 */ { MAD_F(0x04d7e8d4) /* 0.302712277 */, 14 },
657
658 /* 592 */ { MAD_F(0x04dab524) /* 0.303395408 */, 14 },
659 /* 593 */ { MAD_F(0x04dd81dc) /* 0.304078923 */, 14 },
660 /* 594 */ { MAD_F(0x04e04efb) /* 0.304762823 */, 14 },
661 /* 595 */ { MAD_F(0x04e31c81) /* 0.305447106 */, 14 },
662 /* 596 */ { MAD_F(0x04e5ea6e) /* 0.306131773 */, 14 },
663 /* 597 */ { MAD_F(0x04e8b8c2) /* 0.306816823 */, 14 },
664 /* 598 */ { MAD_F(0x04eb877c) /* 0.307502256 */, 14 },
665 /* 599 */ { MAD_F(0x04ee569d) /* 0.308188071 */, 14 },
666 /* 600 */ { MAD_F(0x04f12624) /* 0.308874267 */, 14 },
667 /* 601 */ { MAD_F(0x04f3f612) /* 0.309560845 */, 14 },
668 /* 602 */ { MAD_F(0x04f6c666) /* 0.310247804 */, 14 },
669 /* 603 */ { MAD_F(0x04f99721) /* 0.310935143 */, 14 },
670 /* 604 */ { MAD_F(0x04fc6841) /* 0.311622862 */, 14 },
671 /* 605 */ { MAD_F(0x04ff39c7) /* 0.312310961 */, 14 },
672 /* 606 */ { MAD_F(0x05020bb3) /* 0.312999439 */, 14 },
673 /* 607 */ { MAD_F(0x0504de05) /* 0.313688296 */, 14 },
674
675 /* 608 */ { MAD_F(0x0507b0bc) /* 0.314377532 */, 14 },
676 /* 609 */ { MAD_F(0x050a83d8) /* 0.315067145 */, 14 },
677 /* 610 */ { MAD_F(0x050d575b) /* 0.315757136 */, 14 },
678 /* 611 */ { MAD_F(0x05102b42) /* 0.316447504 */, 14 },
679 /* 612 */ { MAD_F(0x0512ff8e) /* 0.317138249 */, 14 },
680 /* 613 */ { MAD_F(0x0515d440) /* 0.317829370 */, 14 },
681 /* 614 */ { MAD_F(0x0518a956) /* 0.318520867 */, 14 },
682 /* 615 */ { MAD_F(0x051b7ed1) /* 0.319212739 */, 14 },
683 /* 616 */ { MAD_F(0x051e54b1) /* 0.319904987 */, 14 },
684 /* 617 */ { MAD_F(0x05212af5) /* 0.320597609 */, 14 },
685 /* 618 */ { MAD_F(0x0524019e) /* 0.321290606 */, 14 },
686 /* 619 */ { MAD_F(0x0526d8ab) /* 0.321983976 */, 14 },
687 /* 620 */ { MAD_F(0x0529b01d) /* 0.322677720 */, 14 },
688 /* 621 */ { MAD_F(0x052c87f2) /* 0.323371837 */, 14 },
689 /* 622 */ { MAD_F(0x052f602c) /* 0.324066327 */, 14 },
690 /* 623 */ { MAD_F(0x053238ca) /* 0.324761189 */, 14 },
691
692 /* 624 */ { MAD_F(0x053511cb) /* 0.325456423 */, 14 },
693 /* 625 */ { MAD_F(0x0537eb30) /* 0.326152028 */, 14 },
694 /* 626 */ { MAD_F(0x053ac4f9) /* 0.326848005 */, 14 },
695 /* 627 */ { MAD_F(0x053d9f25) /* 0.327544352 */, 14 },
696 /* 628 */ { MAD_F(0x054079b5) /* 0.328241070 */, 14 },
697 /* 629 */ { MAD_F(0x054354a8) /* 0.328938157 */, 14 },
698 /* 630 */ { MAD_F(0x05462ffe) /* 0.329635614 */, 14 },
699 /* 631 */ { MAD_F(0x05490bb7) /* 0.330333440 */, 14 },
700 /* 632 */ { MAD_F(0x054be7d4) /* 0.331031635 */, 14 },
701 /* 633 */ { MAD_F(0x054ec453) /* 0.331730198 */, 14 },
702 /* 634 */ { MAD_F(0x0551a134) /* 0.332429129 */, 14 },
703 /* 635 */ { MAD_F(0x05547e79) /* 0.333128427 */, 14 },
704 /* 636 */ { MAD_F(0x05575c20) /* 0.333828093 */, 14 },
705 /* 637 */ { MAD_F(0x055a3a2a) /* 0.334528126 */, 14 },
706 /* 638 */ { MAD_F(0x055d1896) /* 0.335228525 */, 14 },
707 /* 639 */ { MAD_F(0x055ff764) /* 0.335929290 */, 14 },
708
709 /* 640 */ { MAD_F(0x0562d694) /* 0.336630420 */, 14 },
710 /* 641 */ { MAD_F(0x0565b627) /* 0.337331916 */, 14 },
711 /* 642 */ { MAD_F(0x0568961b) /* 0.338033777 */, 14 },
712 /* 643 */ { MAD_F(0x056b7671) /* 0.338736002 */, 14 },
713 /* 644 */ { MAD_F(0x056e5729) /* 0.339438592 */, 14 },
714 /* 645 */ { MAD_F(0x05713843) /* 0.340141545 */, 14 },
715 /* 646 */ { MAD_F(0x057419be) /* 0.340844862 */, 14 },
716 /* 647 */ { MAD_F(0x0576fb9a) /* 0.341548541 */, 14 },
717 /* 648 */ { MAD_F(0x0579ddd8) /* 0.342252584 */, 14 },
718 /* 649 */ { MAD_F(0x057cc077) /* 0.342956988 */, 14 },
719 /* 650 */ { MAD_F(0x057fa378) /* 0.343661754 */, 14 },
720 /* 651 */ { MAD_F(0x058286d9) /* 0.344366882 */, 14 },
721 /* 652 */ { MAD_F(0x05856a9b) /* 0.345072371 */, 14 },
722 /* 653 */ { MAD_F(0x05884ebe) /* 0.345778221 */, 14 },
723 /* 654 */ { MAD_F(0x058b3342) /* 0.346484431 */, 14 },
724 /* 655 */ { MAD_F(0x058e1827) /* 0.347191002 */, 14 },
725
726 /* 656 */ { MAD_F(0x0590fd6c) /* 0.347897931 */, 14 },
727 /* 657 */ { MAD_F(0x0593e311) /* 0.348605221 */, 14 },
728 /* 658 */ { MAD_F(0x0596c917) /* 0.349312869 */, 14 },
729 /* 659 */ { MAD_F(0x0599af7d) /* 0.350020876 */, 14 },
730 /* 660 */ { MAD_F(0x059c9643) /* 0.350729240 */, 14 },
731 /* 661 */ { MAD_F(0x059f7d6a) /* 0.351437963 */, 14 },
732 /* 662 */ { MAD_F(0x05a264f0) /* 0.352147044 */, 14 },
733 /* 663 */ { MAD_F(0x05a54cd6) /* 0.352856481 */, 14 },
734 /* 664 */ { MAD_F(0x05a8351c) /* 0.353566275 */, 14 },
735 /* 665 */ { MAD_F(0x05ab1dc2) /* 0.354276426 */, 14 },
736 /* 666 */ { MAD_F(0x05ae06c7) /* 0.354986932 */, 14 },
737 /* 667 */ { MAD_F(0x05b0f02b) /* 0.355697795 */, 14 },
738 /* 668 */ { MAD_F(0x05b3d9f0) /* 0.356409012 */, 14 },
739 /* 669 */ { MAD_F(0x05b6c413) /* 0.357120585 */, 14 },
740 /* 670 */ { MAD_F(0x05b9ae95) /* 0.357832512 */, 14 },
741 /* 671 */ { MAD_F(0x05bc9977) /* 0.358544794 */, 14 },
742
743 /* 672 */ { MAD_F(0x05bf84b8) /* 0.359257429 */, 14 },
744 /* 673 */ { MAD_F(0x05c27057) /* 0.359970419 */, 14 },
745 /* 674 */ { MAD_F(0x05c55c56) /* 0.360683761 */, 14 },
746 /* 675 */ { MAD_F(0x05c848b3) /* 0.361397456 */, 14 },
747 /* 676 */ { MAD_F(0x05cb356e) /* 0.362111504 */, 14 },
748 /* 677 */ { MAD_F(0x05ce2289) /* 0.362825904 */, 14 },
749 /* 678 */ { MAD_F(0x05d11001) /* 0.363540655 */, 14 },
750 /* 679 */ { MAD_F(0x05d3fdd8) /* 0.364255759 */, 14 },
751 /* 680 */ { MAD_F(0x05d6ec0e) /* 0.364971213 */, 14 },
752 /* 681 */ { MAD_F(0x05d9daa1) /* 0.365687018 */, 14 },
753 /* 682 */ { MAD_F(0x05dcc993) /* 0.366403174 */, 14 },
754 /* 683 */ { MAD_F(0x05dfb8e2) /* 0.367119680 */, 14 },
755 /* 684 */ { MAD_F(0x05e2a890) /* 0.367836535 */, 14 },
756 /* 685 */ { MAD_F(0x05e5989b) /* 0.368553740 */, 14 },
757 /* 686 */ { MAD_F(0x05e88904) /* 0.369271294 */, 14 },
758 /* 687 */ { MAD_F(0x05eb79cb) /* 0.369989197 */, 14 },
759
760 /* 688 */ { MAD_F(0x05ee6aef) /* 0.370707448 */, 14 },
761 /* 689 */ { MAD_F(0x05f15c70) /* 0.371426047 */, 14 },
762 /* 690 */ { MAD_F(0x05f44e4f) /* 0.372144994 */, 14 },
763 /* 691 */ { MAD_F(0x05f7408b) /* 0.372864289 */, 14 },
764 /* 692 */ { MAD_F(0x05fa3324) /* 0.373583930 */, 14 },
765 /* 693 */ { MAD_F(0x05fd261b) /* 0.374303918 */, 14 },
766 /* 694 */ { MAD_F(0x0600196e) /* 0.375024253 */, 14 },
767 /* 695 */ { MAD_F(0x06030d1e) /* 0.375744934 */, 14 },
768 /* 696 */ { MAD_F(0x0606012b) /* 0.376465960 */, 14 },
769 /* 697 */ { MAD_F(0x0608f595) /* 0.377187332 */, 14 },
770 /* 698 */ { MAD_F(0x060bea5c) /* 0.377909049 */, 14 },
771 /* 699 */ { MAD_F(0x060edf7f) /* 0.378631110 */, 14 },
772 /* 700 */ { MAD_F(0x0611d4fe) /* 0.379353516 */, 14 },
773 /* 701 */ { MAD_F(0x0614cada) /* 0.380076266 */, 14 },
774 /* 702 */ { MAD_F(0x0617c112) /* 0.380799360 */, 14 },
775 /* 703 */ { MAD_F(0x061ab7a6) /* 0.381522798 */, 14 },
776
777 /* 704 */ { MAD_F(0x061dae96) /* 0.382246578 */, 14 },
778 /* 705 */ { MAD_F(0x0620a5e3) /* 0.382970701 */, 14 },
779 /* 706 */ { MAD_F(0x06239d8b) /* 0.383695167 */, 14 },
780 /* 707 */ { MAD_F(0x0626958f) /* 0.384419975 */, 14 },
781 /* 708 */ { MAD_F(0x06298def) /* 0.385145124 */, 14 },
782 /* 709 */ { MAD_F(0x062c86aa) /* 0.385870615 */, 14 },
783 /* 710 */ { MAD_F(0x062f7fc1) /* 0.386596448 */, 14 },
784 /* 711 */ { MAD_F(0x06327934) /* 0.387322621 */, 14 },
785 /* 712 */ { MAD_F(0x06357302) /* 0.388049134 */, 14 },
786 /* 713 */ { MAD_F(0x06386d2b) /* 0.388775988 */, 14 },
787 /* 714 */ { MAD_F(0x063b67b0) /* 0.389503182 */, 14 },
788 /* 715 */ { MAD_F(0x063e6290) /* 0.390230715 */, 14 },
789 /* 716 */ { MAD_F(0x06415dcb) /* 0.390958588 */, 14 },
790 /* 717 */ { MAD_F(0x06445960) /* 0.391686799 */, 14 },
791 /* 718 */ { MAD_F(0x06475551) /* 0.392415349 */, 14 },
792 /* 719 */ { MAD_F(0x064a519c) /* 0.393144238 */, 14 },
793
794 /* 720 */ { MAD_F(0x064d4e43) /* 0.393873464 */, 14 },
795 /* 721 */ { MAD_F(0x06504b44) /* 0.394603028 */, 14 },
796 /* 722 */ { MAD_F(0x0653489f) /* 0.395332930 */, 14 },
797 /* 723 */ { MAD_F(0x06564655) /* 0.396063168 */, 14 },
798 /* 724 */ { MAD_F(0x06594465) /* 0.396793743 */, 14 },
799 /* 725 */ { MAD_F(0x065c42d0) /* 0.397524655 */, 14 },
800 /* 726 */ { MAD_F(0x065f4195) /* 0.398255903 */, 14 },
801 /* 727 */ { MAD_F(0x066240b4) /* 0.398987487 */, 14 },
802 /* 728 */ { MAD_F(0x0665402d) /* 0.399719406 */, 14 },
803 /* 729 */ { MAD_F(0x06684000) /* 0.400451660 */, 14 },
804 /* 730 */ { MAD_F(0x066b402d) /* 0.401184249 */, 14 },
805 /* 731 */ { MAD_F(0x066e40b3) /* 0.401917173 */, 14 },
806 /* 732 */ { MAD_F(0x06714194) /* 0.402650431 */, 14 },
807 /* 733 */ { MAD_F(0x067442ce) /* 0.403384024 */, 14 },
808 /* 734 */ { MAD_F(0x06774462) /* 0.404117949 */, 14 },
809 /* 735 */ { MAD_F(0x067a464f) /* 0.404852209 */, 14 },
810
811 /* 736 */ { MAD_F(0x067d4896) /* 0.405586801 */, 14 },
812 /* 737 */ { MAD_F(0x06804b36) /* 0.406321726 */, 14 },
813 /* 738 */ { MAD_F(0x06834e2f) /* 0.407056983 */, 14 },
814 /* 739 */ { MAD_F(0x06865181) /* 0.407792573 */, 14 },
815 /* 740 */ { MAD_F(0x0689552c) /* 0.408528495 */, 14 },
816 /* 741 */ { MAD_F(0x068c5931) /* 0.409264748 */, 14 },
817 /* 742 */ { MAD_F(0x068f5d8e) /* 0.410001332 */, 14 },
818 /* 743 */ { MAD_F(0x06926245) /* 0.410738247 */, 14 },
819 /* 744 */ { MAD_F(0x06956753) /* 0.411475493 */, 14 },
820 /* 745 */ { MAD_F(0x06986cbb) /* 0.412213070 */, 14 },
821 /* 746 */ { MAD_F(0x069b727b) /* 0.412950976 */, 14 },
822 /* 747 */ { MAD_F(0x069e7894) /* 0.413689213 */, 14 },
823 /* 748 */ { MAD_F(0x06a17f05) /* 0.414427779 */, 14 },
824 /* 749 */ { MAD_F(0x06a485cf) /* 0.415166674 */, 14 },
825 /* 750 */ { MAD_F(0x06a78cf1) /* 0.415905897 */, 14 },
826 /* 751 */ { MAD_F(0x06aa946b) /* 0.416645450 */, 14 },
827
828 /* 752 */ { MAD_F(0x06ad9c3d) /* 0.417385331 */, 14 },
829 /* 753 */ { MAD_F(0x06b0a468) /* 0.418125540 */, 14 },
830 /* 754 */ { MAD_F(0x06b3acea) /* 0.418866076 */, 14 },
831 /* 755 */ { MAD_F(0x06b6b5c4) /* 0.419606940 */, 14 },
832 /* 756 */ { MAD_F(0x06b9bef6) /* 0.420348132 */, 14 },
833 /* 757 */ { MAD_F(0x06bcc880) /* 0.421089650 */, 14 },
834 /* 758 */ { MAD_F(0x06bfd261) /* 0.421831494 */, 14 },
835 /* 759 */ { MAD_F(0x06c2dc9a) /* 0.422573665 */, 14 },
836 /* 760 */ { MAD_F(0x06c5e72b) /* 0.423316162 */, 14 },
837 /* 761 */ { MAD_F(0x06c8f213) /* 0.424058985 */, 14 },
838 /* 762 */ { MAD_F(0x06cbfd52) /* 0.424802133 */, 14 },
839 /* 763 */ { MAD_F(0x06cf08e9) /* 0.425545607 */, 14 },
840 /* 764 */ { MAD_F(0x06d214d7) /* 0.426289405 */, 14 },
841 /* 765 */ { MAD_F(0x06d5211c) /* 0.427033528 */, 14 },
842 /* 766 */ { MAD_F(0x06d82db8) /* 0.427777975 */, 14 },
843 /* 767 */ { MAD_F(0x06db3aaa) /* 0.428522746 */, 14 },
844
845 /* 768 */ { MAD_F(0x06de47f4) /* 0.429267841 */, 14 },
846 /* 769 */ { MAD_F(0x06e15595) /* 0.430013259 */, 14 },
847 /* 770 */ { MAD_F(0x06e4638d) /* 0.430759001 */, 14 },
848 /* 771 */ { MAD_F(0x06e771db) /* 0.431505065 */, 14 },
849 /* 772 */ { MAD_F(0x06ea807f) /* 0.432251452 */, 14 },
850 /* 773 */ { MAD_F(0x06ed8f7b) /* 0.432998162 */, 14 },
851 /* 774 */ { MAD_F(0x06f09ecc) /* 0.433745193 */, 14 },
852 /* 775 */ { MAD_F(0x06f3ae75) /* 0.434492546 */, 14 },
853 /* 776 */ { MAD_F(0x06f6be73) /* 0.435240221 */, 14 },
854 /* 777 */ { MAD_F(0x06f9cec8) /* 0.435988217 */, 14 },
855 /* 778 */ { MAD_F(0x06fcdf72) /* 0.436736534 */, 14 },
856 /* 779 */ { MAD_F(0x06fff073) /* 0.437485172 */, 14 },
857 /* 780 */ { MAD_F(0x070301ca) /* 0.438234130 */, 14 },
858 /* 781 */ { MAD_F(0x07061377) /* 0.438983408 */, 14 },
859 /* 782 */ { MAD_F(0x0709257a) /* 0.439733006 */, 14 },
860 /* 783 */ { MAD_F(0x070c37d2) /* 0.440482924 */, 14 },
861
862 /* 784 */ { MAD_F(0x070f4a80) /* 0.441233161 */, 14 },
863 /* 785 */ { MAD_F(0x07125d84) /* 0.441983717 */, 14 },
864 /* 786 */ { MAD_F(0x071570de) /* 0.442734592 */, 14 },
865 /* 787 */ { MAD_F(0x0718848d) /* 0.443485785 */, 14 },
866 /* 788 */ { MAD_F(0x071b9891) /* 0.444237296 */, 14 },
867 /* 789 */ { MAD_F(0x071eaceb) /* 0.444989126 */, 14 },
868 /* 790 */ { MAD_F(0x0721c19a) /* 0.445741273 */, 14 },
869 /* 791 */ { MAD_F(0x0724d69e) /* 0.446493738 */, 14 },
870 /* 792 */ { MAD_F(0x0727ebf7) /* 0.447246519 */, 14 },
871 /* 793 */ { MAD_F(0x072b01a6) /* 0.447999618 */, 14 },
872 /* 794 */ { MAD_F(0x072e17a9) /* 0.448753033 */, 14 },
873 /* 795 */ { MAD_F(0x07312e01) /* 0.449506765 */, 14 },
874 /* 796 */ { MAD_F(0x073444ae) /* 0.450260813 */, 14 },
875 /* 797 */ { MAD_F(0x07375bb0) /* 0.451015176 */, 14 },
876 /* 798 */ { MAD_F(0x073a7307) /* 0.451769856 */, 14 },
877 /* 799 */ { MAD_F(0x073d8ab2) /* 0.452524850 */, 14 },
878
879 /* 800 */ { MAD_F(0x0740a2b2) /* 0.453280160 */, 14 },
880 /* 801 */ { MAD_F(0x0743bb06) /* 0.454035784 */, 14 },
881 /* 802 */ { MAD_F(0x0746d3af) /* 0.454791723 */, 14 },
882 /* 803 */ { MAD_F(0x0749ecac) /* 0.455547976 */, 14 },
883 /* 804 */ { MAD_F(0x074d05fe) /* 0.456304543 */, 14 },
884 /* 805 */ { MAD_F(0x07501fa3) /* 0.457061423 */, 14 },
885 /* 806 */ { MAD_F(0x0753399d) /* 0.457818618 */, 14 },
886 /* 807 */ { MAD_F(0x075653eb) /* 0.458576125 */, 14 },
887 /* 808 */ { MAD_F(0x07596e8d) /* 0.459333946 */, 14 },
888 /* 809 */ { MAD_F(0x075c8983) /* 0.460092079 */, 14 },
889 /* 810 */ { MAD_F(0x075fa4cc) /* 0.460850524 */, 14 },
890 /* 811 */ { MAD_F(0x0762c06a) /* 0.461609282 */, 14 },
891 /* 812 */ { MAD_F(0x0765dc5b) /* 0.462368352 */, 14 },
892 /* 813 */ { MAD_F(0x0768f8a0) /* 0.463127733 */, 14 },
893 /* 814 */ { MAD_F(0x076c1538) /* 0.463887426 */, 14 },
894 /* 815 */ { MAD_F(0x076f3224) /* 0.464647430 */, 14 },
895
896 /* 816 */ { MAD_F(0x07724f64) /* 0.465407744 */, 14 },
897 /* 817 */ { MAD_F(0x07756cf7) /* 0.466168370 */, 14 },
898 /* 818 */ { MAD_F(0x07788add) /* 0.466929306 */, 14 },
899 /* 819 */ { MAD_F(0x077ba916) /* 0.467690552 */, 14 },
900 /* 820 */ { MAD_F(0x077ec7a3) /* 0.468452108 */, 14 },
901 /* 821 */ { MAD_F(0x0781e683) /* 0.469213973 */, 14 },
902 /* 822 */ { MAD_F(0x078505b5) /* 0.469976148 */, 14 },
903 /* 823 */ { MAD_F(0x0788253b) /* 0.470738632 */, 14 },
904 /* 824 */ { MAD_F(0x078b4514) /* 0.471501425 */, 14 },
905 /* 825 */ { MAD_F(0x078e653f) /* 0.472264527 */, 14 },
906 /* 826 */ { MAD_F(0x079185be) /* 0.473027937 */, 14 },
907 /* 827 */ { MAD_F(0x0794a68f) /* 0.473791655 */, 14 },
908 /* 828 */ { MAD_F(0x0797c7b2) /* 0.474555681 */, 14 },
909 /* 829 */ { MAD_F(0x079ae929) /* 0.475320014 */, 14 },
910 /* 830 */ { MAD_F(0x079e0af1) /* 0.476084655 */, 14 },
911 /* 831 */ { MAD_F(0x07a12d0c) /* 0.476849603 */, 14 },
912
913 /* 832 */ { MAD_F(0x07a44f7a) /* 0.477614858 */, 14 },
914 /* 833 */ { MAD_F(0x07a7723a) /* 0.478380420 */, 14 },
915 /* 834 */ { MAD_F(0x07aa954c) /* 0.479146288 */, 14 },
916 /* 835 */ { MAD_F(0x07adb8b0) /* 0.479912463 */, 14 },
917 /* 836 */ { MAD_F(0x07b0dc67) /* 0.480678943 */, 14 },
918 /* 837 */ { MAD_F(0x07b4006f) /* 0.481445729 */, 14 },
919 /* 838 */ { MAD_F(0x07b724ca) /* 0.482212820 */, 14 },
920 /* 839 */ { MAD_F(0x07ba4976) /* 0.482980216 */, 14 },
921 /* 840 */ { MAD_F(0x07bd6e75) /* 0.483747918 */, 14 },
922 /* 841 */ { MAD_F(0x07c093c5) /* 0.484515924 */, 14 },
923 /* 842 */ { MAD_F(0x07c3b967) /* 0.485284235 */, 14 },
924 /* 843 */ { MAD_F(0x07c6df5a) /* 0.486052849 */, 14 },
925 /* 844 */ { MAD_F(0x07ca059f) /* 0.486821768 */, 14 },
926 /* 845 */ { MAD_F(0x07cd2c36) /* 0.487590991 */, 14 },
927 /* 846 */ { MAD_F(0x07d0531e) /* 0.488360517 */, 14 },
928 /* 847 */ { MAD_F(0x07d37a57) /* 0.489130346 */, 14 },
929
930 /* 848 */ { MAD_F(0x07d6a1e2) /* 0.489900479 */, 14 },
931 /* 849 */ { MAD_F(0x07d9c9be) /* 0.490670914 */, 14 },
932 /* 850 */ { MAD_F(0x07dcf1ec) /* 0.491441651 */, 14 },
933 /* 851 */ { MAD_F(0x07e01a6a) /* 0.492212691 */, 14 },
934 /* 852 */ { MAD_F(0x07e3433a) /* 0.492984033 */, 14 },
935 /* 853 */ { MAD_F(0x07e66c5a) /* 0.493755677 */, 14 },
936 /* 854 */ { MAD_F(0x07e995cc) /* 0.494527623 */, 14 },
937 /* 855 */ { MAD_F(0x07ecbf8e) /* 0.495299870 */, 14 },
938 /* 856 */ { MAD_F(0x07efe9a1) /* 0.496072418 */, 14 },
939 /* 857 */ { MAD_F(0x07f31405) /* 0.496845266 */, 14 },
940 /* 858 */ { MAD_F(0x07f63eba) /* 0.497618416 */, 14 },
941 /* 859 */ { MAD_F(0x07f969c0) /* 0.498391866 */, 14 },
942 /* 860 */ { MAD_F(0x07fc9516) /* 0.499165616 */, 14 },
943 /* 861 */ { MAD_F(0x07ffc0bc) /* 0.499939666 */, 14 },
944 /* 862 */ { MAD_F(0x04017659) /* 0.250357008 */, 15 },
945 /* 863 */ { MAD_F(0x04030c7d) /* 0.250744333 */, 15 },
946
947 /* 864 */ { MAD_F(0x0404a2c9) /* 0.251131807 */, 15 },
948 /* 865 */ { MAD_F(0x0406393d) /* 0.251519431 */, 15 },
949 /* 866 */ { MAD_F(0x0407cfd9) /* 0.251907204 */, 15 },
950 /* 867 */ { MAD_F(0x0409669d) /* 0.252295127 */, 15 },
951 /* 868 */ { MAD_F(0x040afd89) /* 0.252683198 */, 15 },
952 /* 869 */ { MAD_F(0x040c949e) /* 0.253071419 */, 15 },
953 /* 870 */ { MAD_F(0x040e2bda) /* 0.253459789 */, 15 },
954 /* 871 */ { MAD_F(0x040fc33e) /* 0.253848307 */, 15 },
955 /* 872 */ { MAD_F(0x04115aca) /* 0.254236974 */, 15 },
956 /* 873 */ { MAD_F(0x0412f27e) /* 0.254625790 */, 15 },
957 /* 874 */ { MAD_F(0x04148a5a) /* 0.255014755 */, 15 },
958 /* 875 */ { MAD_F(0x0416225d) /* 0.255403867 */, 15 },
959 /* 876 */ { MAD_F(0x0417ba89) /* 0.255793128 */, 15 },
960 /* 877 */ { MAD_F(0x041952dc) /* 0.256182537 */, 15 },
961 /* 878 */ { MAD_F(0x041aeb57) /* 0.256572095 */, 15 },
962 /* 879 */ { MAD_F(0x041c83fa) /* 0.256961800 */, 15 },
963
964 /* 880 */ { MAD_F(0x041e1cc4) /* 0.257351652 */, 15 },
965 /* 881 */ { MAD_F(0x041fb5b6) /* 0.257741653 */, 15 },
966 /* 882 */ { MAD_F(0x04214ed0) /* 0.258131801 */, 15 },
967 /* 883 */ { MAD_F(0x0422e811) /* 0.258522097 */, 15 },
968 /* 884 */ { MAD_F(0x04248179) /* 0.258912540 */, 15 },
969 /* 885 */ { MAD_F(0x04261b0a) /* 0.259303130 */, 15 },
970 /* 886 */ { MAD_F(0x0427b4c2) /* 0.259693868 */, 15 },
971 /* 887 */ { MAD_F(0x04294ea1) /* 0.260084752 */, 15 },
972 /* 888 */ { MAD_F(0x042ae8a7) /* 0.260475783 */, 15 },
973 /* 889 */ { MAD_F(0x042c82d6) /* 0.260866961 */, 15 },
974 /* 890 */ { MAD_F(0x042e1d2b) /* 0.261258286 */, 15 },
975 /* 891 */ { MAD_F(0x042fb7a8) /* 0.261649758 */, 15 },
976 /* 892 */ { MAD_F(0x0431524c) /* 0.262041376 */, 15 },
977 /* 893 */ { MAD_F(0x0432ed17) /* 0.262433140 */, 15 },
978 /* 894 */ { MAD_F(0x0434880a) /* 0.262825051 */, 15 },
979 /* 895 */ { MAD_F(0x04362324) /* 0.263217107 */, 15 },
980
981 /* 896 */ { MAD_F(0x0437be65) /* 0.263609310 */, 15 },
982 /* 897 */ { MAD_F(0x043959cd) /* 0.264001659 */, 15 },
983 /* 898 */ { MAD_F(0x043af55d) /* 0.264394153 */, 15 },
984 /* 899 */ { MAD_F(0x043c9113) /* 0.264786794 */, 15 },
985 /* 900 */ { MAD_F(0x043e2cf1) /* 0.265179580 */, 15 },
986 /* 901 */ { MAD_F(0x043fc8f6) /* 0.265572511 */, 15 },
987 /* 902 */ { MAD_F(0x04416522) /* 0.265965588 */, 15 },
988 /* 903 */ { MAD_F(0x04430174) /* 0.266358810 */, 15 },
989 /* 904 */ { MAD_F(0x04449dee) /* 0.266752177 */, 15 },
990 /* 905 */ { MAD_F(0x04463a8f) /* 0.267145689 */, 15 },
991 /* 906 */ { MAD_F(0x0447d756) /* 0.267539347 */, 15 },
992 /* 907 */ { MAD_F(0x04497445) /* 0.267933149 */, 15 },
993 /* 908 */ { MAD_F(0x044b115a) /* 0.268327096 */, 15 },
994 /* 909 */ { MAD_F(0x044cae96) /* 0.268721187 */, 15 },
995 /* 910 */ { MAD_F(0x044e4bf9) /* 0.269115423 */, 15 },
996 /* 911 */ { MAD_F(0x044fe983) /* 0.269509804 */, 15 },
997
998 /* 912 */ { MAD_F(0x04518733) /* 0.269904329 */, 15 },
999 /* 913 */ { MAD_F(0x0453250a) /* 0.270298998 */, 15 },
1000 /* 914 */ { MAD_F(0x0454c308) /* 0.270693811 */, 15 },
1001 /* 915 */ { MAD_F(0x0456612d) /* 0.271088768 */, 15 },
1002 /* 916 */ { MAD_F(0x0457ff78) /* 0.271483869 */, 15 },
1003 /* 917 */ { MAD_F(0x04599dea) /* 0.271879114 */, 15 },
1004 /* 918 */ { MAD_F(0x045b3c82) /* 0.272274503 */, 15 },
1005 /* 919 */ { MAD_F(0x045cdb41) /* 0.272670035 */, 15 },
1006 /* 920 */ { MAD_F(0x045e7a26) /* 0.273065710 */, 15 },
1007 /* 921 */ { MAD_F(0x04601932) /* 0.273461530 */, 15 },
1008 /* 922 */ { MAD_F(0x0461b864) /* 0.273857492 */, 15 },
1009 /* 923 */ { MAD_F(0x046357bd) /* 0.274253597 */, 15 },
1010 /* 924 */ { MAD_F(0x0464f73c) /* 0.274649846 */, 15 },
1011 /* 925 */ { MAD_F(0x046696e2) /* 0.275046238 */, 15 },
1012 /* 926 */ { MAD_F(0x046836ae) /* 0.275442772 */, 15 },
1013 /* 927 */ { MAD_F(0x0469d6a0) /* 0.275839449 */, 15 },
1014
1015 /* 928 */ { MAD_F(0x046b76b9) /* 0.276236269 */, 15 },
1016 /* 929 */ { MAD_F(0x046d16f7) /* 0.276633232 */, 15 },
1017 /* 930 */ { MAD_F(0x046eb75c) /* 0.277030337 */, 15 },
1018 /* 931 */ { MAD_F(0x047057e8) /* 0.277427584 */, 15 },
1019 /* 932 */ { MAD_F(0x0471f899) /* 0.277824973 */, 15 },
1020 /* 933 */ { MAD_F(0x04739971) /* 0.278222505 */, 15 },
1021 /* 934 */ { MAD_F(0x04753a6f) /* 0.278620179 */, 15 },
1022 /* 935 */ { MAD_F(0x0476db92) /* 0.279017995 */, 15 },
1023 /* 936 */ { MAD_F(0x04787cdc) /* 0.279415952 */, 15 },
1024 /* 937 */ { MAD_F(0x047a1e4c) /* 0.279814051 */, 15 },
1025 /* 938 */ { MAD_F(0x047bbfe2) /* 0.280212292 */, 15 },
1026 /* 939 */ { MAD_F(0x047d619e) /* 0.280610675 */, 15 },
1027 /* 940 */ { MAD_F(0x047f0380) /* 0.281009199 */, 15 },
1028 /* 941 */ { MAD_F(0x0480a588) /* 0.281407864 */, 15 },
1029 /* 942 */ { MAD_F(0x048247b6) /* 0.281806670 */, 15 },
1030 /* 943 */ { MAD_F(0x0483ea0a) /* 0.282205618 */, 15 },
1031
1032 /* 944 */ { MAD_F(0x04858c83) /* 0.282604707 */, 15 },
1033 /* 945 */ { MAD_F(0x04872f22) /* 0.283003936 */, 15 },
1034 /* 946 */ { MAD_F(0x0488d1e8) /* 0.283403307 */, 15 },
1035 /* 947 */ { MAD_F(0x048a74d3) /* 0.283802818 */, 15 },
1036 /* 948 */ { MAD_F(0x048c17e3) /* 0.284202470 */, 15 },
1037 /* 949 */ { MAD_F(0x048dbb1a) /* 0.284602263 */, 15 },
1038 /* 950 */ { MAD_F(0x048f5e76) /* 0.285002195 */, 15 },
1039 /* 951 */ { MAD_F(0x049101f8) /* 0.285402269 */, 15 },
1040 /* 952 */ { MAD_F(0x0492a59f) /* 0.285802482 */, 15 },
1041 /* 953 */ { MAD_F(0x0494496c) /* 0.286202836 */, 15 },
1042 /* 954 */ { MAD_F(0x0495ed5f) /* 0.286603329 */, 15 },
1043 /* 955 */ { MAD_F(0x04979177) /* 0.287003963 */, 15 },
1044 /* 956 */ { MAD_F(0x049935b5) /* 0.287404737 */, 15 },
1045 /* 957 */ { MAD_F(0x049ada19) /* 0.287805650 */, 15 },
1046 /* 958 */ { MAD_F(0x049c7ea1) /* 0.288206703 */, 15 },
1047 /* 959 */ { MAD_F(0x049e2350) /* 0.288607895 */, 15 },
1048
1049 /* 960 */ { MAD_F(0x049fc824) /* 0.289009227 */, 15 },
1050 /* 961 */ { MAD_F(0x04a16d1d) /* 0.289410699 */, 15 },
1051 /* 962 */ { MAD_F(0x04a3123b) /* 0.289812309 */, 15 },
1052 /* 963 */ { MAD_F(0x04a4b77f) /* 0.290214059 */, 15 },
1053 /* 964 */ { MAD_F(0x04a65ce8) /* 0.290615948 */, 15 },
1054 /* 965 */ { MAD_F(0x04a80277) /* 0.291017976 */, 15 },
1055 /* 966 */ { MAD_F(0x04a9a82b) /* 0.291420143 */, 15 },
1056 /* 967 */ { MAD_F(0x04ab4e04) /* 0.291822449 */, 15 },
1057 /* 968 */ { MAD_F(0x04acf402) /* 0.292224893 */, 15 },
1058 /* 969 */ { MAD_F(0x04ae9a26) /* 0.292627476 */, 15 },
1059 /* 970 */ { MAD_F(0x04b0406e) /* 0.293030197 */, 15 },
1060 /* 971 */ { MAD_F(0x04b1e6dc) /* 0.293433057 */, 15 },
1061 /* 972 */ { MAD_F(0x04b38d6f) /* 0.293836055 */, 15 },
1062 /* 973 */ { MAD_F(0x04b53427) /* 0.294239192 */, 15 },
1063 /* 974 */ { MAD_F(0x04b6db05) /* 0.294642466 */, 15 },
1064 /* 975 */ { MAD_F(0x04b88207) /* 0.295045879 */, 15 },
1065
1066 /* 976 */ { MAD_F(0x04ba292e) /* 0.295449429 */, 15 },
1067 /* 977 */ { MAD_F(0x04bbd07a) /* 0.295853118 */, 15 },
1068 /* 978 */ { MAD_F(0x04bd77ec) /* 0.296256944 */, 15 },
1069 /* 979 */ { MAD_F(0x04bf1f82) /* 0.296660907 */, 15 },
1070 /* 980 */ { MAD_F(0x04c0c73d) /* 0.297065009 */, 15 },
1071 /* 981 */ { MAD_F(0x04c26f1d) /* 0.297469248 */, 15 },
1072 /* 982 */ { MAD_F(0x04c41722) /* 0.297873624 */, 15 },
1073 /* 983 */ { MAD_F(0x04c5bf4c) /* 0.298278137 */, 15 },
1074 /* 984 */ { MAD_F(0x04c7679a) /* 0.298682788 */, 15 },
1075 /* 985 */ { MAD_F(0x04c9100d) /* 0.299087576 */, 15 },
1076 /* 986 */ { MAD_F(0x04cab8a6) /* 0.299492500 */, 15 },
1077 /* 987 */ { MAD_F(0x04cc6163) /* 0.299897562 */, 15 },
1078 /* 988 */ { MAD_F(0x04ce0a44) /* 0.300302761 */, 15 },
1079 /* 989 */ { MAD_F(0x04cfb34b) /* 0.300708096 */, 15 },
1080 /* 990 */ { MAD_F(0x04d15c76) /* 0.301113568 */, 15 },
1081 /* 991 */ { MAD_F(0x04d305c5) /* 0.301519176 */, 15 },
1082
1083 /* 992 */ { MAD_F(0x04d4af3a) /* 0.301924921 */, 15 },
1084 /* 993 */ { MAD_F(0x04d658d2) /* 0.302330802 */, 15 },
1085 /* 994 */ { MAD_F(0x04d80290) /* 0.302736820 */, 15 },
1086 /* 995 */ { MAD_F(0x04d9ac72) /* 0.303142973 */, 15 },
1087 /* 996 */ { MAD_F(0x04db5679) /* 0.303549263 */, 15 },
1088 /* 997 */ { MAD_F(0x04dd00a4) /* 0.303955689 */, 15 },
1089 /* 998 */ { MAD_F(0x04deaaf3) /* 0.304362251 */, 15 },
1090 /* 999 */ { MAD_F(0x04e05567) /* 0.304768948 */, 15 },
1091 /* 1000 */ { MAD_F(0x04e20000) /* 0.305175781 */, 15 },
1092 /* 1001 */ { MAD_F(0x04e3aabd) /* 0.305582750 */, 15 },
1093 /* 1002 */ { MAD_F(0x04e5559e) /* 0.305989854 */, 15 },
1094 /* 1003 */ { MAD_F(0x04e700a3) /* 0.306397094 */, 15 },
1095 /* 1004 */ { MAD_F(0x04e8abcd) /* 0.306804470 */, 15 },
1096 /* 1005 */ { MAD_F(0x04ea571c) /* 0.307211980 */, 15 },
1097 /* 1006 */ { MAD_F(0x04ec028e) /* 0.307619626 */, 15 },
1098 /* 1007 */ { MAD_F(0x04edae25) /* 0.308027406 */, 15 },
1099
1100 /* 1008 */ { MAD_F(0x04ef59e0) /* 0.308435322 */, 15 },
1101 /* 1009 */ { MAD_F(0x04f105bf) /* 0.308843373 */, 15 },
1102 /* 1010 */ { MAD_F(0x04f2b1c3) /* 0.309251558 */, 15 },
1103 /* 1011 */ { MAD_F(0x04f45dea) /* 0.309659879 */, 15 },
1104 /* 1012 */ { MAD_F(0x04f60a36) /* 0.310068333 */, 15 },
1105 /* 1013 */ { MAD_F(0x04f7b6a6) /* 0.310476923 */, 15 },
1106 /* 1014 */ { MAD_F(0x04f9633a) /* 0.310885647 */, 15 },
1107 /* 1015 */ { MAD_F(0x04fb0ff2) /* 0.311294505 */, 15 },
1108 /* 1016 */ { MAD_F(0x04fcbcce) /* 0.311703498 */, 15 },
1109 /* 1017 */ { MAD_F(0x04fe69ce) /* 0.312112625 */, 15 },
1110 /* 1018 */ { MAD_F(0x050016f3) /* 0.312521885 */, 15 },
1111 /* 1019 */ { MAD_F(0x0501c43b) /* 0.312931280 */, 15 },
1112 /* 1020 */ { MAD_F(0x050371a7) /* 0.313340809 */, 15 },
1113 /* 1021 */ { MAD_F(0x05051f37) /* 0.313750472 */, 15 },
1114 /* 1022 */ { MAD_F(0x0506cceb) /* 0.314160269 */, 15 },
1115 /* 1023 */ { MAD_F(0x05087ac2) /* 0.314570199 */, 15 },
1116
1117 /* 1024 */ { MAD_F(0x050a28be) /* 0.314980262 */, 15 },
1118 /* 1025 */ { MAD_F(0x050bd6de) /* 0.315390460 */, 15 },
1119 /* 1026 */ { MAD_F(0x050d8521) /* 0.315800790 */, 15 },
1120 /* 1027 */ { MAD_F(0x050f3388) /* 0.316211255 */, 15 },
1121 /* 1028 */ { MAD_F(0x0510e213) /* 0.316621852 */, 15 },
1122 /* 1029 */ { MAD_F(0x051290c2) /* 0.317032582 */, 15 },
1123 /* 1030 */ { MAD_F(0x05143f94) /* 0.317443446 */, 15 },
1124 /* 1031 */ { MAD_F(0x0515ee8a) /* 0.317854442 */, 15 },
1125 /* 1032 */ { MAD_F(0x05179da4) /* 0.318265572 */, 15 },
1126 /* 1033 */ { MAD_F(0x05194ce1) /* 0.318676834 */, 15 },
1127 /* 1034 */ { MAD_F(0x051afc42) /* 0.319088229 */, 15 },
1128 /* 1035 */ { MAD_F(0x051cabc7) /* 0.319499756 */, 15 },
1129 /* 1036 */ { MAD_F(0x051e5b6f) /* 0.319911417 */, 15 },
1130 /* 1037 */ { MAD_F(0x05200b3a) /* 0.320323209 */, 15 },
1131 /* 1038 */ { MAD_F(0x0521bb2a) /* 0.320735134 */, 15 },
1132 /* 1039 */ { MAD_F(0x05236b3d) /* 0.321147192 */, 15 },
1133
1134 /* 1040 */ { MAD_F(0x05251b73) /* 0.321559381 */, 15 },
1135 /* 1041 */ { MAD_F(0x0526cbcd) /* 0.321971703 */, 15 },
1136 /* 1042 */ { MAD_F(0x05287c4a) /* 0.322384156 */, 15 },
1137 /* 1043 */ { MAD_F(0x052a2cea) /* 0.322796742 */, 15 },
1138 /* 1044 */ { MAD_F(0x052bddae) /* 0.323209460 */, 15 },
1139 /* 1045 */ { MAD_F(0x052d8e96) /* 0.323622309 */, 15 },
1140 /* 1046 */ { MAD_F(0x052f3fa1) /* 0.324035290 */, 15 },
1141 /* 1047 */ { MAD_F(0x0530f0cf) /* 0.324448403 */, 15 },
1142 /* 1048 */ { MAD_F(0x0532a220) /* 0.324861647 */, 15 },
1143 /* 1049 */ { MAD_F(0x05345395) /* 0.325275023 */, 15 },
1144 /* 1050 */ { MAD_F(0x0536052d) /* 0.325688530 */, 15 },
1145 /* 1051 */ { MAD_F(0x0537b6e8) /* 0.326102168 */, 15 },
1146 /* 1052 */ { MAD_F(0x053968c6) /* 0.326515938 */, 15 },
1147 /* 1053 */ { MAD_F(0x053b1ac8) /* 0.326929839 */, 15 },
1148 /* 1054 */ { MAD_F(0x053ccced) /* 0.327343870 */, 15 },
1149 /* 1055 */ { MAD_F(0x053e7f35) /* 0.327758033 */, 15 },
1150
1151 /* 1056 */ { MAD_F(0x054031a0) /* 0.328172327 */, 15 },
1152 /* 1057 */ { MAD_F(0x0541e42e) /* 0.328586751 */, 15 },
1153 /* 1058 */ { MAD_F(0x054396df) /* 0.329001306 */, 15 },
1154 /* 1059 */ { MAD_F(0x054549b4) /* 0.329415992 */, 15 },
1155 /* 1060 */ { MAD_F(0x0546fcab) /* 0.329830808 */, 15 },
1156 /* 1061 */ { MAD_F(0x0548afc6) /* 0.330245755 */, 15 },
1157 /* 1062 */ { MAD_F(0x054a6303) /* 0.330660832 */, 15 },
1158 /* 1063 */ { MAD_F(0x054c1663) /* 0.331076039 */, 15 },
1159 /* 1064 */ { MAD_F(0x054dc9e7) /* 0.331491377 */, 15 },
1160 /* 1065 */ { MAD_F(0x054f7d8d) /* 0.331906845 */, 15 },
1161 /* 1066 */ { MAD_F(0x05513156) /* 0.332322443 */, 15 },
1162 /* 1067 */ { MAD_F(0x0552e542) /* 0.332738170 */, 15 },
1163 /* 1068 */ { MAD_F(0x05549951) /* 0.333154028 */, 15 },
1164 /* 1069 */ { MAD_F(0x05564d83) /* 0.333570016 */, 15 },
1165 /* 1070 */ { MAD_F(0x055801d8) /* 0.333986133 */, 15 },
1166 /* 1071 */ { MAD_F(0x0559b64f) /* 0.334402380 */, 15 },
1167
1168 /* 1072 */ { MAD_F(0x055b6ae9) /* 0.334818756 */, 15 },
1169 /* 1073 */ { MAD_F(0x055d1fa6) /* 0.335235262 */, 15 },
1170 /* 1074 */ { MAD_F(0x055ed486) /* 0.335651898 */, 15 },
1171 /* 1075 */ { MAD_F(0x05608988) /* 0.336068662 */, 15 },
1172 /* 1076 */ { MAD_F(0x05623ead) /* 0.336485556 */, 15 },
1173 /* 1077 */ { MAD_F(0x0563f3f5) /* 0.336902579 */, 15 },
1174 /* 1078 */ { MAD_F(0x0565a960) /* 0.337319732 */, 15 },
1175 /* 1079 */ { MAD_F(0x05675eed) /* 0.337737013 */, 15 },
1176 /* 1080 */ { MAD_F(0x0569149c) /* 0.338154423 */, 15 },
1177 /* 1081 */ { MAD_F(0x056aca6f) /* 0.338571962 */, 15 },
1178 /* 1082 */ { MAD_F(0x056c8064) /* 0.338989630 */, 15 },
1179 /* 1083 */ { MAD_F(0x056e367b) /* 0.339407426 */, 15 },
1180 /* 1084 */ { MAD_F(0x056fecb5) /* 0.339825351 */, 15 },
1181 /* 1085 */ { MAD_F(0x0571a311) /* 0.340243405 */, 15 },
1182 /* 1086 */ { MAD_F(0x05735990) /* 0.340661587 */, 15 },
1183 /* 1087 */ { MAD_F(0x05751032) /* 0.341079898 */, 15 },
1184
1185 /* 1088 */ { MAD_F(0x0576c6f5) /* 0.341498336 */, 15 },
1186 /* 1089 */ { MAD_F(0x05787ddc) /* 0.341916903 */, 15 },
1187 /* 1090 */ { MAD_F(0x057a34e4) /* 0.342335598 */, 15 },
1188 /* 1091 */ { MAD_F(0x057bec0f) /* 0.342754421 */, 15 },
1189 /* 1092 */ { MAD_F(0x057da35d) /* 0.343173373 */, 15 },
1190 /* 1093 */ { MAD_F(0x057f5acc) /* 0.343592452 */, 15 },
1191 /* 1094 */ { MAD_F(0x0581125e) /* 0.344011659 */, 15 },
1192 /* 1095 */ { MAD_F(0x0582ca12) /* 0.344430993 */, 15 },
1193 /* 1096 */ { MAD_F(0x058481e9) /* 0.344850455 */, 15 },
1194 /* 1097 */ { MAD_F(0x058639e2) /* 0.345270045 */, 15 },
1195 /* 1098 */ { MAD_F(0x0587f1fd) /* 0.345689763 */, 15 },
1196 /* 1099 */ { MAD_F(0x0589aa3a) /* 0.346109608 */, 15 },
1197 /* 1100 */ { MAD_F(0x058b629a) /* 0.346529580 */, 15 },
1198 /* 1101 */ { MAD_F(0x058d1b1b) /* 0.346949679 */, 15 },
1199 /* 1102 */ { MAD_F(0x058ed3bf) /* 0.347369906 */, 15 },
1200 /* 1103 */ { MAD_F(0x05908c85) /* 0.347790260 */, 15 },
1201
1202 /* 1104 */ { MAD_F(0x0592456d) /* 0.348210741 */, 15 },
1203 /* 1105 */ { MAD_F(0x0593fe77) /* 0.348631348 */, 15 },
1204 /* 1106 */ { MAD_F(0x0595b7a3) /* 0.349052083 */, 15 },
1205 /* 1107 */ { MAD_F(0x059770f1) /* 0.349472945 */, 15 },
1206 /* 1108 */ { MAD_F(0x05992a61) /* 0.349893933 */, 15 },
1207 /* 1109 */ { MAD_F(0x059ae3f3) /* 0.350315048 */, 15 },
1208 /* 1110 */ { MAD_F(0x059c9da8) /* 0.350736290 */, 15 },
1209 /* 1111 */ { MAD_F(0x059e577e) /* 0.351157658 */, 15 },
1210 /* 1112 */ { MAD_F(0x05a01176) /* 0.351579152 */, 15 },
1211 /* 1113 */ { MAD_F(0x05a1cb90) /* 0.352000773 */, 15 },
1212 /* 1114 */ { MAD_F(0x05a385cc) /* 0.352422520 */, 15 },
1213 /* 1115 */ { MAD_F(0x05a5402a) /* 0.352844394 */, 15 },
1214 /* 1116 */ { MAD_F(0x05a6faa9) /* 0.353266393 */, 15 },
1215 /* 1117 */ { MAD_F(0x05a8b54b) /* 0.353688519 */, 15 },
1216 /* 1118 */ { MAD_F(0x05aa700e) /* 0.354110771 */, 15 },
1217 /* 1119 */ { MAD_F(0x05ac2af3) /* 0.354533148 */, 15 },
1218
1219 /* 1120 */ { MAD_F(0x05ade5fa) /* 0.354955651 */, 15 },
1220 /* 1121 */ { MAD_F(0x05afa123) /* 0.355378281 */, 15 },
1221 /* 1122 */ { MAD_F(0x05b15c6d) /* 0.355801035 */, 15 },
1222 /* 1123 */ { MAD_F(0x05b317d9) /* 0.356223916 */, 15 },
1223 /* 1124 */ { MAD_F(0x05b4d367) /* 0.356646922 */, 15 },
1224 /* 1125 */ { MAD_F(0x05b68f16) /* 0.357070053 */, 15 },
1225 /* 1126 */ { MAD_F(0x05b84ae7) /* 0.357493310 */, 15 },
1226 /* 1127 */ { MAD_F(0x05ba06da) /* 0.357916692 */, 15 },
1227 /* 1128 */ { MAD_F(0x05bbc2ef) /* 0.358340200 */, 15 },
1228 /* 1129 */ { MAD_F(0x05bd7f25) /* 0.358763832 */, 15 },
1229 /* 1130 */ { MAD_F(0x05bf3b7c) /* 0.359187590 */, 15 },
1230 /* 1131 */ { MAD_F(0x05c0f7f5) /* 0.359611472 */, 15 },
1231 /* 1132 */ { MAD_F(0x05c2b490) /* 0.360035480 */, 15 },
1232 /* 1133 */ { MAD_F(0x05c4714c) /* 0.360459613 */, 15 },
1233 /* 1134 */ { MAD_F(0x05c62e2a) /* 0.360883870 */, 15 },
1234 /* 1135 */ { MAD_F(0x05c7eb29) /* 0.361308252 */, 15 },
1235
1236 /* 1136 */ { MAD_F(0x05c9a84a) /* 0.361732758 */, 15 },
1237 /* 1137 */ { MAD_F(0x05cb658c) /* 0.362157390 */, 15 },
1238 /* 1138 */ { MAD_F(0x05cd22ef) /* 0.362582145 */, 15 },
1239 /* 1139 */ { MAD_F(0x05cee074) /* 0.363007026 */, 15 },
1240 /* 1140 */ { MAD_F(0x05d09e1b) /* 0.363432030 */, 15 },
1241 /* 1141 */ { MAD_F(0x05d25be2) /* 0.363857159 */, 15 },
1242 /* 1142 */ { MAD_F(0x05d419cb) /* 0.364282412 */, 15 },
1243 /* 1143 */ { MAD_F(0x05d5d7d5) /* 0.364707789 */, 15 },
1244 /* 1144 */ { MAD_F(0x05d79601) /* 0.365133291 */, 15 },
1245 /* 1145 */ { MAD_F(0x05d9544e) /* 0.365558916 */, 15 },
1246 /* 1146 */ { MAD_F(0x05db12bc) /* 0.365984665 */, 15 },
1247 /* 1147 */ { MAD_F(0x05dcd14c) /* 0.366410538 */, 15 },
1248 /* 1148 */ { MAD_F(0x05de8ffc) /* 0.366836535 */, 15 },
1249 /* 1149 */ { MAD_F(0x05e04ece) /* 0.367262655 */, 15 },
1250 /* 1150 */ { MAD_F(0x05e20dc1) /* 0.367688900 */, 15 },
1251 /* 1151 */ { MAD_F(0x05e3ccd5) /* 0.368115267 */, 15 },
1252
1253 /* 1152 */ { MAD_F(0x05e58c0b) /* 0.368541759 */, 15 },
1254 /* 1153 */ { MAD_F(0x05e74b61) /* 0.368968373 */, 15 },
1255 /* 1154 */ { MAD_F(0x05e90ad9) /* 0.369395111 */, 15 },
1256 /* 1155 */ { MAD_F(0x05eaca72) /* 0.369821973 */, 15 },
1257 /* 1156 */ { MAD_F(0x05ec8a2b) /* 0.370248957 */, 15 },
1258 /* 1157 */ { MAD_F(0x05ee4a06) /* 0.370676065 */, 15 },
1259 /* 1158 */ { MAD_F(0x05f00a02) /* 0.371103295 */, 15 },
1260 /* 1159 */ { MAD_F(0x05f1ca1f) /* 0.371530649 */, 15 },
1261 /* 1160 */ { MAD_F(0x05f38a5d) /* 0.371958126 */, 15 },
1262 /* 1161 */ { MAD_F(0x05f54abc) /* 0.372385725 */, 15 },
1263 /* 1162 */ { MAD_F(0x05f70b3c) /* 0.372813448 */, 15 },
1264 /* 1163 */ { MAD_F(0x05f8cbdc) /* 0.373241292 */, 15 },
1265 /* 1164 */ { MAD_F(0x05fa8c9e) /* 0.373669260 */, 15 },
1266 /* 1165 */ { MAD_F(0x05fc4d81) /* 0.374097350 */, 15 },
1267 /* 1166 */ { MAD_F(0x05fe0e84) /* 0.374525563 */, 15 },
1268 /* 1167 */ { MAD_F(0x05ffcfa8) /* 0.374953898 */, 15 },
1269
1270 /* 1168 */ { MAD_F(0x060190ee) /* 0.375382356 */, 15 },
1271 /* 1169 */ { MAD_F(0x06035254) /* 0.375810936 */, 15 },
1272 /* 1170 */ { MAD_F(0x060513da) /* 0.376239638 */, 15 },
1273 /* 1171 */ { MAD_F(0x0606d582) /* 0.376668462 */, 15 },
1274 /* 1172 */ { MAD_F(0x0608974a) /* 0.377097408 */, 15 },
1275 /* 1173 */ { MAD_F(0x060a5934) /* 0.377526476 */, 15 },
1276 /* 1174 */ { MAD_F(0x060c1b3d) /* 0.377955667 */, 15 },
1277 /* 1175 */ { MAD_F(0x060ddd68) /* 0.378384979 */, 15 },
1278 /* 1176 */ { MAD_F(0x060f9fb3) /* 0.378814413 */, 15 },
1279 /* 1177 */ { MAD_F(0x0611621f) /* 0.379243968 */, 15 },
1280 /* 1178 */ { MAD_F(0x061324ac) /* 0.379673646 */, 15 },
1281 /* 1179 */ { MAD_F(0x0614e759) /* 0.380103444 */, 15 },
1282 /* 1180 */ { MAD_F(0x0616aa27) /* 0.380533365 */, 15 },
1283 /* 1181 */ { MAD_F(0x06186d16) /* 0.380963407 */, 15 },
1284 /* 1182 */ { MAD_F(0x061a3025) /* 0.381393570 */, 15 },
1285 /* 1183 */ { MAD_F(0x061bf354) /* 0.381823855 */, 15 },
1286
1287 /* 1184 */ { MAD_F(0x061db6a5) /* 0.382254261 */, 15 },
1288 /* 1185 */ { MAD_F(0x061f7a15) /* 0.382684788 */, 15 },
1289 /* 1186 */ { MAD_F(0x06213da7) /* 0.383115436 */, 15 },
1290 /* 1187 */ { MAD_F(0x06230158) /* 0.383546205 */, 15 },
1291 /* 1188 */ { MAD_F(0x0624c52a) /* 0.383977096 */, 15 },
1292 /* 1189 */ { MAD_F(0x0626891d) /* 0.384408107 */, 15 },
1293 /* 1190 */ { MAD_F(0x06284d30) /* 0.384839239 */, 15 },
1294 /* 1191 */ { MAD_F(0x062a1164) /* 0.385270492 */, 15 },
1295 /* 1192 */ { MAD_F(0x062bd5b8) /* 0.385701865 */, 15 },
1296 /* 1193 */ { MAD_F(0x062d9a2c) /* 0.386133359 */, 15 },
1297 /* 1194 */ { MAD_F(0x062f5ec1) /* 0.386564974 */, 15 },
1298 /* 1195 */ { MAD_F(0x06312376) /* 0.386996709 */, 15 },
1299 /* 1196 */ { MAD_F(0x0632e84b) /* 0.387428565 */, 15 },
1300 /* 1197 */ { MAD_F(0x0634ad41) /* 0.387860541 */, 15 },
1301 /* 1198 */ { MAD_F(0x06367257) /* 0.388292637 */, 15 },
1302 /* 1199 */ { MAD_F(0x0638378d) /* 0.388724854 */, 15 },
1303
1304 /* 1200 */ { MAD_F(0x0639fce4) /* 0.389157191 */, 15 },
1305 /* 1201 */ { MAD_F(0x063bc25b) /* 0.389589648 */, 15 },
1306 /* 1202 */ { MAD_F(0x063d87f2) /* 0.390022225 */, 15 },
1307 /* 1203 */ { MAD_F(0x063f4da9) /* 0.390454922 */, 15 },
1308 /* 1204 */ { MAD_F(0x06411380) /* 0.390887739 */, 15 },
1309 /* 1205 */ { MAD_F(0x0642d978) /* 0.391320675 */, 15 },
1310 /* 1206 */ { MAD_F(0x06449f8f) /* 0.391753732 */, 15 },
1311 /* 1207 */ { MAD_F(0x064665c7) /* 0.392186908 */, 15 },
1312 /* 1208 */ { MAD_F(0x06482c1f) /* 0.392620204 */, 15 },
1313 /* 1209 */ { MAD_F(0x0649f297) /* 0.393053619 */, 15 },
1314 /* 1210 */ { MAD_F(0x064bb92f) /* 0.393487154 */, 15 },
1315 /* 1211 */ { MAD_F(0x064d7fe8) /* 0.393920808 */, 15 },
1316 /* 1212 */ { MAD_F(0x064f46c0) /* 0.394354582 */, 15 },
1317 /* 1213 */ { MAD_F(0x06510db8) /* 0.394788475 */, 15 },
1318 /* 1214 */ { MAD_F(0x0652d4d0) /* 0.395222488 */, 15 },
1319 /* 1215 */ { MAD_F(0x06549c09) /* 0.395656619 */, 15 },
1320
1321 /* 1216 */ { MAD_F(0x06566361) /* 0.396090870 */, 15 },
1322 /* 1217 */ { MAD_F(0x06582ad9) /* 0.396525239 */, 15 },
1323 /* 1218 */ { MAD_F(0x0659f271) /* 0.396959728 */, 15 },
1324 /* 1219 */ { MAD_F(0x065bba29) /* 0.397394336 */, 15 },
1325 /* 1220 */ { MAD_F(0x065d8201) /* 0.397829062 */, 15 },
1326 /* 1221 */ { MAD_F(0x065f49f9) /* 0.398263907 */, 15 },
1327 /* 1222 */ { MAD_F(0x06611211) /* 0.398698871 */, 15 },
1328 /* 1223 */ { MAD_F(0x0662da49) /* 0.399133954 */, 15 },
1329 /* 1224 */ { MAD_F(0x0664a2a0) /* 0.399569155 */, 15 },
1330 /* 1225 */ { MAD_F(0x06666b17) /* 0.400004475 */, 15 },
1331 /* 1226 */ { MAD_F(0x066833ae) /* 0.400439913 */, 15 },
1332 /* 1227 */ { MAD_F(0x0669fc65) /* 0.400875470 */, 15 },
1333 /* 1228 */ { MAD_F(0x066bc53c) /* 0.401311145 */, 15 },
1334 /* 1229 */ { MAD_F(0x066d8e32) /* 0.401746938 */, 15 },
1335 /* 1230 */ { MAD_F(0x066f5748) /* 0.402182850 */, 15 },
1336 /* 1231 */ { MAD_F(0x0671207e) /* 0.402618879 */, 15 },
1337
1338 /* 1232 */ { MAD_F(0x0672e9d4) /* 0.403055027 */, 15 },
1339 /* 1233 */ { MAD_F(0x0674b349) /* 0.403491293 */, 15 },
1340 /* 1234 */ { MAD_F(0x06767cde) /* 0.403927676 */, 15 },
1341 /* 1235 */ { MAD_F(0x06784692) /* 0.404364178 */, 15 },
1342 /* 1236 */ { MAD_F(0x067a1066) /* 0.404800797 */, 15 },
1343 /* 1237 */ { MAD_F(0x067bda5a) /* 0.405237535 */, 15 },
1344 /* 1238 */ { MAD_F(0x067da46d) /* 0.405674390 */, 15 },
1345 /* 1239 */ { MAD_F(0x067f6ea0) /* 0.406111362 */, 15 },
1346 /* 1240 */ { MAD_F(0x068138f3) /* 0.406548452 */, 15 },
1347 /* 1241 */ { MAD_F(0x06830365) /* 0.406985660 */, 15 },
1348 /* 1242 */ { MAD_F(0x0684cdf6) /* 0.407422985 */, 15 },
1349 /* 1243 */ { MAD_F(0x068698a8) /* 0.407860427 */, 15 },
1350 /* 1244 */ { MAD_F(0x06886378) /* 0.408297987 */, 15 },
1351 /* 1245 */ { MAD_F(0x068a2e68) /* 0.408735664 */, 15 },
1352 /* 1246 */ { MAD_F(0x068bf978) /* 0.409173458 */, 15 },
1353 /* 1247 */ { MAD_F(0x068dc4a7) /* 0.409611370 */, 15 },
1354
1355 /* 1248 */ { MAD_F(0x068f8ff5) /* 0.410049398 */, 15 },
1356 /* 1249 */ { MAD_F(0x06915b63) /* 0.410487544 */, 15 },
1357 /* 1250 */ { MAD_F(0x069326f0) /* 0.410925806 */, 15 },
1358 /* 1251 */ { MAD_F(0x0694f29c) /* 0.411364185 */, 15 },
1359 /* 1252 */ { MAD_F(0x0696be68) /* 0.411802681 */, 15 },
1360 /* 1253 */ { MAD_F(0x06988a54) /* 0.412241294 */, 15 },
1361 /* 1254 */ { MAD_F(0x069a565e) /* 0.412680024 */, 15 },
1362 /* 1255 */ { MAD_F(0x069c2288) /* 0.413118870 */, 15 },
1363 /* 1256 */ { MAD_F(0x069deed1) /* 0.413557833 */, 15 },
1364 /* 1257 */ { MAD_F(0x069fbb3a) /* 0.413996912 */, 15 },
1365 /* 1258 */ { MAD_F(0x06a187c1) /* 0.414436108 */, 15 },
1366 /* 1259 */ { MAD_F(0x06a35468) /* 0.414875420 */, 15 },
1367 /* 1260 */ { MAD_F(0x06a5212f) /* 0.415314849 */, 15 },
1368 /* 1261 */ { MAD_F(0x06a6ee14) /* 0.415754393 */, 15 },
1369 /* 1262 */ { MAD_F(0x06a8bb18) /* 0.416194054 */, 15 },
1370 /* 1263 */ { MAD_F(0x06aa883c) /* 0.416633831 */, 15 },
1371
1372 /* 1264 */ { MAD_F(0x06ac557f) /* 0.417073724 */, 15 },
1373 /* 1265 */ { MAD_F(0x06ae22e1) /* 0.417513734 */, 15 },
1374 /* 1266 */ { MAD_F(0x06aff062) /* 0.417953859 */, 15 },
1375 /* 1267 */ { MAD_F(0x06b1be03) /* 0.418394100 */, 15 },
1376 /* 1268 */ { MAD_F(0x06b38bc2) /* 0.418834457 */, 15 },
1377 /* 1269 */ { MAD_F(0x06b559a1) /* 0.419274929 */, 15 },
1378 /* 1270 */ { MAD_F(0x06b7279e) /* 0.419715518 */, 15 },
1379 /* 1271 */ { MAD_F(0x06b8f5bb) /* 0.420156222 */, 15 },
1380 /* 1272 */ { MAD_F(0x06bac3f6) /* 0.420597041 */, 15 },
1381 /* 1273 */ { MAD_F(0x06bc9251) /* 0.421037977 */, 15 },
1382 /* 1274 */ { MAD_F(0x06be60cb) /* 0.421479027 */, 15 },
1383 /* 1275 */ { MAD_F(0x06c02f63) /* 0.421920193 */, 15 },
1384 /* 1276 */ { MAD_F(0x06c1fe1b) /* 0.422361475 */, 15 },
1385 /* 1277 */ { MAD_F(0x06c3ccf1) /* 0.422802871 */, 15 },
1386 /* 1278 */ { MAD_F(0x06c59be7) /* 0.423244383 */, 15 },
1387 /* 1279 */ { MAD_F(0x06c76afb) /* 0.423686010 */, 15 },
1388
1389 /* 1280 */ { MAD_F(0x06c93a2e) /* 0.424127753 */, 15 },
1390 /* 1281 */ { MAD_F(0x06cb0981) /* 0.424569610 */, 15 },
1391 /* 1282 */ { MAD_F(0x06ccd8f2) /* 0.425011582 */, 15 },
1392 /* 1283 */ { MAD_F(0x06cea881) /* 0.425453669 */, 15 },
1393 /* 1284 */ { MAD_F(0x06d07830) /* 0.425895871 */, 15 },
1394 /* 1285 */ { MAD_F(0x06d247fe) /* 0.426338188 */, 15 },
1395 /* 1286 */ { MAD_F(0x06d417ea) /* 0.426780620 */, 15 },
1396 /* 1287 */ { MAD_F(0x06d5e7f5) /* 0.427223166 */, 15 },
1397 /* 1288 */ { MAD_F(0x06d7b81f) /* 0.427665827 */, 15 },
1398 /* 1289 */ { MAD_F(0x06d98868) /* 0.428108603 */, 15 },
1399 /* 1290 */ { MAD_F(0x06db58cf) /* 0.428551493 */, 15 },
1400 /* 1291 */ { MAD_F(0x06dd2955) /* 0.428994497 */, 15 },
1401 /* 1292 */ { MAD_F(0x06def9fa) /* 0.429437616 */, 15 },
1402 /* 1293 */ { MAD_F(0x06e0cabe) /* 0.429880849 */, 15 },
1403 /* 1294 */ { MAD_F(0x06e29ba0) /* 0.430324197 */, 15 },
1404 /* 1295 */ { MAD_F(0x06e46ca1) /* 0.430767659 */, 15 },
1405
1406 /* 1296 */ { MAD_F(0x06e63dc0) /* 0.431211234 */, 15 },
1407 /* 1297 */ { MAD_F(0x06e80efe) /* 0.431654924 */, 15 },
1408 /* 1298 */ { MAD_F(0x06e9e05b) /* 0.432098728 */, 15 },
1409 /* 1299 */ { MAD_F(0x06ebb1d6) /* 0.432542647 */, 15 },
1410 /* 1300 */ { MAD_F(0x06ed8370) /* 0.432986678 */, 15 },
1411 /* 1301 */ { MAD_F(0x06ef5529) /* 0.433430824 */, 15 },
1412 /* 1302 */ { MAD_F(0x06f12700) /* 0.433875084 */, 15 },
1413 /* 1303 */ { MAD_F(0x06f2f8f5) /* 0.434319457 */, 15 },
1414 /* 1304 */ { MAD_F(0x06f4cb09) /* 0.434763944 */, 15 },
1415 /* 1305 */ { MAD_F(0x06f69d3c) /* 0.435208545 */, 15 },
1416 /* 1306 */ { MAD_F(0x06f86f8d) /* 0.435653259 */, 15 },
1417 /* 1307 */ { MAD_F(0x06fa41fd) /* 0.436098087 */, 15 },
1418 /* 1308 */ { MAD_F(0x06fc148b) /* 0.436543029 */, 15 },
1419 /* 1309 */ { MAD_F(0x06fde737) /* 0.436988083 */, 15 },
1420 /* 1310 */ { MAD_F(0x06ffba02) /* 0.437433251 */, 15 },
1421 /* 1311 */ { MAD_F(0x07018ceb) /* 0.437878533 */, 15 },
1422
1423 /* 1312 */ { MAD_F(0x07035ff3) /* 0.438323927 */, 15 },
1424 /* 1313 */ { MAD_F(0x07053319) /* 0.438769435 */, 15 },
1425 /* 1314 */ { MAD_F(0x0707065d) /* 0.439215056 */, 15 },
1426 /* 1315 */ { MAD_F(0x0708d9c0) /* 0.439660790 */, 15 },
1427 /* 1316 */ { MAD_F(0x070aad41) /* 0.440106636 */, 15 },
1428 /* 1317 */ { MAD_F(0x070c80e1) /* 0.440552596 */, 15 },
1429 /* 1318 */ { MAD_F(0x070e549f) /* 0.440998669 */, 15 },
1430 /* 1319 */ { MAD_F(0x0710287b) /* 0.441444855 */, 15 },
1431 /* 1320 */ { MAD_F(0x0711fc75) /* 0.441891153 */, 15 },
1432 /* 1321 */ { MAD_F(0x0713d08d) /* 0.442337564 */, 15 },
1433 /* 1322 */ { MAD_F(0x0715a4c4) /* 0.442784088 */, 15 },
1434 /* 1323 */ { MAD_F(0x07177919) /* 0.443230724 */, 15 },
1435 /* 1324 */ { MAD_F(0x07194d8c) /* 0.443677473 */, 15 },
1436 /* 1325 */ { MAD_F(0x071b221e) /* 0.444124334 */, 15 },
1437 /* 1326 */ { MAD_F(0x071cf6ce) /* 0.444571308 */, 15 },
1438 /* 1327 */ { MAD_F(0x071ecb9b) /* 0.445018394 */, 15 },
1439
1440 /* 1328 */ { MAD_F(0x0720a087) /* 0.445465593 */, 15 },
1441 /* 1329 */ { MAD_F(0x07227591) /* 0.445912903 */, 15 },
1442 /* 1330 */ { MAD_F(0x07244ab9) /* 0.446360326 */, 15 },
1443 /* 1331 */ { MAD_F(0x07262000) /* 0.446807861 */, 15 },
1444 /* 1332 */ { MAD_F(0x0727f564) /* 0.447255509 */, 15 },
1445 /* 1333 */ { MAD_F(0x0729cae7) /* 0.447703268 */, 15 },
1446 /* 1334 */ { MAD_F(0x072ba087) /* 0.448151139 */, 15 },
1447 /* 1335 */ { MAD_F(0x072d7646) /* 0.448599122 */, 15 },
1448 /* 1336 */ { MAD_F(0x072f4c22) /* 0.449047217 */, 15 },
1449 /* 1337 */ { MAD_F(0x0731221d) /* 0.449495424 */, 15 },
1450 /* 1338 */ { MAD_F(0x0732f835) /* 0.449943742 */, 15 },
1451 /* 1339 */ { MAD_F(0x0734ce6c) /* 0.450392173 */, 15 },
1452 /* 1340 */ { MAD_F(0x0736a4c1) /* 0.450840715 */, 15 },
1453 /* 1341 */ { MAD_F(0x07387b33) /* 0.451289368 */, 15 },
1454 /* 1342 */ { MAD_F(0x073a51c4) /* 0.451738133 */, 15 },
1455 /* 1343 */ { MAD_F(0x073c2872) /* 0.452187010 */, 15 },
1456
1457 /* 1344 */ { MAD_F(0x073dff3e) /* 0.452635998 */, 15 },
1458 /* 1345 */ { MAD_F(0x073fd628) /* 0.453085097 */, 15 },
1459 /* 1346 */ { MAD_F(0x0741ad30) /* 0.453534308 */, 15 },
1460 /* 1347 */ { MAD_F(0x07438456) /* 0.453983630 */, 15 },
1461 /* 1348 */ { MAD_F(0x07455b9a) /* 0.454433063 */, 15 },
1462 /* 1349 */ { MAD_F(0x074732fc) /* 0.454882607 */, 15 },
1463 /* 1350 */ { MAD_F(0x07490a7b) /* 0.455332262 */, 15 },
1464 /* 1351 */ { MAD_F(0x074ae218) /* 0.455782029 */, 15 },
1465 /* 1352 */ { MAD_F(0x074cb9d3) /* 0.456231906 */, 15 },
1466 /* 1353 */ { MAD_F(0x074e91ac) /* 0.456681894 */, 15 },
1467 /* 1354 */ { MAD_F(0x075069a3) /* 0.457131993 */, 15 },
1468 /* 1355 */ { MAD_F(0x075241b7) /* 0.457582203 */, 15 },
1469 /* 1356 */ { MAD_F(0x075419e9) /* 0.458032524 */, 15 },
1470 /* 1357 */ { MAD_F(0x0755f239) /* 0.458482956 */, 15 },
1471 /* 1358 */ { MAD_F(0x0757caa7) /* 0.458933498 */, 15 },
1472 /* 1359 */ { MAD_F(0x0759a332) /* 0.459384151 */, 15 },
1473
1474 /* 1360 */ { MAD_F(0x075b7bdb) /* 0.459834914 */, 15 },
1475 /* 1361 */ { MAD_F(0x075d54a1) /* 0.460285788 */, 15 },
1476 /* 1362 */ { MAD_F(0x075f2d85) /* 0.460736772 */, 15 },
1477 /* 1363 */ { MAD_F(0x07610687) /* 0.461187867 */, 15 },
1478 /* 1364 */ { MAD_F(0x0762dfa6) /* 0.461639071 */, 15 },
1479 /* 1365 */ { MAD_F(0x0764b8e3) /* 0.462090387 */, 15 },
1480 /* 1366 */ { MAD_F(0x0766923e) /* 0.462541812 */, 15 },
1481 /* 1367 */ { MAD_F(0x07686bb6) /* 0.462993348 */, 15 },
1482 /* 1368 */ { MAD_F(0x076a454c) /* 0.463444993 */, 15 },
1483 /* 1369 */ { MAD_F(0x076c1eff) /* 0.463896749 */, 15 },
1484 /* 1370 */ { MAD_F(0x076df8d0) /* 0.464348615 */, 15 },
1485 /* 1371 */ { MAD_F(0x076fd2be) /* 0.464800591 */, 15 },
1486 /* 1372 */ { MAD_F(0x0771acca) /* 0.465252676 */, 15 },
1487 /* 1373 */ { MAD_F(0x077386f3) /* 0.465704872 */, 15 },
1488 /* 1374 */ { MAD_F(0x0775613a) /* 0.466157177 */, 15 },
1489 /* 1375 */ { MAD_F(0x07773b9e) /* 0.466609592 */, 15 },
1490
1491 /* 1376 */ { MAD_F(0x07791620) /* 0.467062117 */, 15 },
1492 /* 1377 */ { MAD_F(0x077af0bf) /* 0.467514751 */, 15 },
1493 /* 1378 */ { MAD_F(0x077ccb7c) /* 0.467967495 */, 15 },
1494 /* 1379 */ { MAD_F(0x077ea656) /* 0.468420349 */, 15 },
1495 /* 1380 */ { MAD_F(0x0780814d) /* 0.468873312 */, 15 },
1496 /* 1381 */ { MAD_F(0x07825c62) /* 0.469326384 */, 15 },
1497 /* 1382 */ { MAD_F(0x07843794) /* 0.469779566 */, 15 },
1498 /* 1383 */ { MAD_F(0x078612e3) /* 0.470232857 */, 15 },
1499 /* 1384 */ { MAD_F(0x0787ee50) /* 0.470686258 */, 15 },
1500 /* 1385 */ { MAD_F(0x0789c9da) /* 0.471139767 */, 15 },
1501 /* 1386 */ { MAD_F(0x078ba581) /* 0.471593386 */, 15 },
1502 /* 1387 */ { MAD_F(0x078d8146) /* 0.472047114 */, 15 },
1503 /* 1388 */ { MAD_F(0x078f5d28) /* 0.472500951 */, 15 },
1504 /* 1389 */ { MAD_F(0x07913927) /* 0.472954896 */, 15 },
1505 /* 1390 */ { MAD_F(0x07931543) /* 0.473408951 */, 15 },
1506 /* 1391 */ { MAD_F(0x0794f17d) /* 0.473863115 */, 15 },
1507
1508 /* 1392 */ { MAD_F(0x0796cdd4) /* 0.474317388 */, 15 },
1509 /* 1393 */ { MAD_F(0x0798aa48) /* 0.474771769 */, 15 },
1510 /* 1394 */ { MAD_F(0x079a86d9) /* 0.475226259 */, 15 },
1511 /* 1395 */ { MAD_F(0x079c6388) /* 0.475680858 */, 15 },
1512 /* 1396 */ { MAD_F(0x079e4053) /* 0.476135565 */, 15 },
1513 /* 1397 */ { MAD_F(0x07a01d3c) /* 0.476590381 */, 15 },
1514 /* 1398 */ { MAD_F(0x07a1fa42) /* 0.477045306 */, 15 },
1515 /* 1399 */ { MAD_F(0x07a3d765) /* 0.477500339 */, 15 },
1516 /* 1400 */ { MAD_F(0x07a5b4a5) /* 0.477955481 */, 15 },
1517 /* 1401 */ { MAD_F(0x07a79202) /* 0.478410731 */, 15 },
1518 /* 1402 */ { MAD_F(0x07a96f7d) /* 0.478866089 */, 15 },
1519 /* 1403 */ { MAD_F(0x07ab4d14) /* 0.479321555 */, 15 },
1520 /* 1404 */ { MAD_F(0x07ad2ac8) /* 0.479777130 */, 15 },
1521 /* 1405 */ { MAD_F(0x07af089a) /* 0.480232813 */, 15 },
1522 /* 1406 */ { MAD_F(0x07b0e688) /* 0.480688604 */, 15 },
1523 /* 1407 */ { MAD_F(0x07b2c494) /* 0.481144503 */, 15 },
1524
1525 /* 1408 */ { MAD_F(0x07b4a2bc) /* 0.481600510 */, 15 },
1526 /* 1409 */ { MAD_F(0x07b68102) /* 0.482056625 */, 15 },
1527 /* 1410 */ { MAD_F(0x07b85f64) /* 0.482512848 */, 15 },
1528 /* 1411 */ { MAD_F(0x07ba3de4) /* 0.482969179 */, 15 },
1529 /* 1412 */ { MAD_F(0x07bc1c80) /* 0.483425618 */, 15 },
1530 /* 1413 */ { MAD_F(0x07bdfb39) /* 0.483882164 */, 15 },
1531 /* 1414 */ { MAD_F(0x07bfda0f) /* 0.484338818 */, 15 },
1532 /* 1415 */ { MAD_F(0x07c1b902) /* 0.484795580 */, 15 },
1533 /* 1416 */ { MAD_F(0x07c39812) /* 0.485252449 */, 15 },
1534 /* 1417 */ { MAD_F(0x07c5773f) /* 0.485709426 */, 15 },
1535 /* 1418 */ { MAD_F(0x07c75689) /* 0.486166511 */, 15 },
1536 /* 1419 */ { MAD_F(0x07c935ef) /* 0.486623703 */, 15 },
1537 /* 1420 */ { MAD_F(0x07cb1573) /* 0.487081002 */, 15 },
1538 /* 1421 */ { MAD_F(0x07ccf513) /* 0.487538409 */, 15 },
1539 /* 1422 */ { MAD_F(0x07ced4d0) /* 0.487995923 */, 15 },
1540 /* 1423 */ { MAD_F(0x07d0b4aa) /* 0.488453544 */, 15 },
1541
1542 /* 1424 */ { MAD_F(0x07d294a0) /* 0.488911273 */, 15 },
1543 /* 1425 */ { MAD_F(0x07d474b3) /* 0.489369108 */, 15 },
1544 /* 1426 */ { MAD_F(0x07d654e4) /* 0.489827051 */, 15 },
1545 /* 1427 */ { MAD_F(0x07d83530) /* 0.490285101 */, 15 },
1546 /* 1428 */ { MAD_F(0x07da159a) /* 0.490743258 */, 15 },
1547 /* 1429 */ { MAD_F(0x07dbf620) /* 0.491201522 */, 15 },
1548 /* 1430 */ { MAD_F(0x07ddd6c3) /* 0.491659892 */, 15 },
1549 /* 1431 */ { MAD_F(0x07dfb783) /* 0.492118370 */, 15 },
1550 /* 1432 */ { MAD_F(0x07e1985f) /* 0.492576954 */, 15 },
1551 /* 1433 */ { MAD_F(0x07e37958) /* 0.493035645 */, 15 },
1552 /* 1434 */ { MAD_F(0x07e55a6e) /* 0.493494443 */, 15 },
1553 /* 1435 */ { MAD_F(0x07e73ba0) /* 0.493953348 */, 15 },
1554 /* 1436 */ { MAD_F(0x07e91cef) /* 0.494412359 */, 15 },
1555 /* 1437 */ { MAD_F(0x07eafe5a) /* 0.494871476 */, 15 },
1556 /* 1438 */ { MAD_F(0x07ecdfe2) /* 0.495330701 */, 15 },
1557 /* 1439 */ { MAD_F(0x07eec187) /* 0.495790031 */, 15 },
1558
1559 /* 1440 */ { MAD_F(0x07f0a348) /* 0.496249468 */, 15 },
1560 /* 1441 */ { MAD_F(0x07f28526) /* 0.496709012 */, 15 },
1561 /* 1442 */ { MAD_F(0x07f46720) /* 0.497168662 */, 15 },
1562 /* 1443 */ { MAD_F(0x07f64937) /* 0.497628418 */, 15 },
1563 /* 1444 */ { MAD_F(0x07f82b6a) /* 0.498088280 */, 15 },
1564 /* 1445 */ { MAD_F(0x07fa0dba) /* 0.498548248 */, 15 },
1565 /* 1446 */ { MAD_F(0x07fbf026) /* 0.499008323 */, 15 },
1566 /* 1447 */ { MAD_F(0x07fdd2af) /* 0.499468503 */, 15 },
1567 /* 1448 */ { MAD_F(0x07ffb554) /* 0.499928790 */, 15 },
1568 /* 1449 */ { MAD_F(0x0400cc0b) /* 0.250194591 */, 16 },
1569 /* 1450 */ { MAD_F(0x0401bd7a) /* 0.250424840 */, 16 },
1570 /* 1451 */ { MAD_F(0x0402aef7) /* 0.250655143 */, 16 },
1571 /* 1452 */ { MAD_F(0x0403a083) /* 0.250885498 */, 16 },
1572 /* 1453 */ { MAD_F(0x0404921c) /* 0.251115906 */, 16 },
1573 /* 1454 */ { MAD_F(0x040583c4) /* 0.251346367 */, 16 },
1574 /* 1455 */ { MAD_F(0x0406757a) /* 0.251576880 */, 16 },
1575
1576 /* 1456 */ { MAD_F(0x0407673f) /* 0.251807447 */, 16 },
1577 /* 1457 */ { MAD_F(0x04085911) /* 0.252038066 */, 16 },
1578 /* 1458 */ { MAD_F(0x04094af1) /* 0.252268738 */, 16 },
1579 /* 1459 */ { MAD_F(0x040a3ce0) /* 0.252499463 */, 16 },
1580 /* 1460 */ { MAD_F(0x040b2edd) /* 0.252730240 */, 16 },
1581 /* 1461 */ { MAD_F(0x040c20e8) /* 0.252961071 */, 16 },
1582 /* 1462 */ { MAD_F(0x040d1301) /* 0.253191953 */, 16 },
1583 /* 1463 */ { MAD_F(0x040e0529) /* 0.253422889 */, 16 },
1584 /* 1464 */ { MAD_F(0x040ef75e) /* 0.253653877 */, 16 },
1585 /* 1465 */ { MAD_F(0x040fe9a1) /* 0.253884918 */, 16 },
1586 /* 1466 */ { MAD_F(0x0410dbf3) /* 0.254116011 */, 16 },
1587 /* 1467 */ { MAD_F(0x0411ce53) /* 0.254347157 */, 16 },
1588 /* 1468 */ { MAD_F(0x0412c0c1) /* 0.254578356 */, 16 },
1589 /* 1469 */ { MAD_F(0x0413b33d) /* 0.254809606 */, 16 },
1590 /* 1470 */ { MAD_F(0x0414a5c7) /* 0.255040910 */, 16 },
1591 /* 1471 */ { MAD_F(0x0415985f) /* 0.255272266 */, 16 },
1592
1593 /* 1472 */ { MAD_F(0x04168b05) /* 0.255503674 */, 16 },
1594 /* 1473 */ { MAD_F(0x04177db9) /* 0.255735135 */, 16 },
1595 /* 1474 */ { MAD_F(0x0418707c) /* 0.255966648 */, 16 },
1596 /* 1475 */ { MAD_F(0x0419634c) /* 0.256198213 */, 16 },
1597 /* 1476 */ { MAD_F(0x041a562a) /* 0.256429831 */, 16 },
1598 /* 1477 */ { MAD_F(0x041b4917) /* 0.256661501 */, 16 },
1599 /* 1478 */ { MAD_F(0x041c3c11) /* 0.256893223 */, 16 },
1600 /* 1479 */ { MAD_F(0x041d2f1a) /* 0.257124998 */, 16 },
1601 /* 1480 */ { MAD_F(0x041e2230) /* 0.257356825 */, 16 },
1602 /* 1481 */ { MAD_F(0x041f1555) /* 0.257588704 */, 16 },
1603 /* 1482 */ { MAD_F(0x04200888) /* 0.257820635 */, 16 },
1604 /* 1483 */ { MAD_F(0x0420fbc8) /* 0.258052619 */, 16 },
1605 /* 1484 */ { MAD_F(0x0421ef17) /* 0.258284654 */, 16 },
1606 /* 1485 */ { MAD_F(0x0422e273) /* 0.258516742 */, 16 },
1607 /* 1486 */ { MAD_F(0x0423d5de) /* 0.258748882 */, 16 },
1608 /* 1487 */ { MAD_F(0x0424c956) /* 0.258981074 */, 16 },
1609
1610 /* 1488 */ { MAD_F(0x0425bcdd) /* 0.259213318 */, 16 },
1611 /* 1489 */ { MAD_F(0x0426b071) /* 0.259445614 */, 16 },
1612 /* 1490 */ { MAD_F(0x0427a414) /* 0.259677962 */, 16 },
1613 /* 1491 */ { MAD_F(0x042897c4) /* 0.259910362 */, 16 },
1614 /* 1492 */ { MAD_F(0x04298b83) /* 0.260142814 */, 16 },
1615 /* 1493 */ { MAD_F(0x042a7f4f) /* 0.260375318 */, 16 },
1616 /* 1494 */ { MAD_F(0x042b7329) /* 0.260607874 */, 16 },
1617 /* 1495 */ { MAD_F(0x042c6711) /* 0.260840481 */, 16 },
1618 /* 1496 */ { MAD_F(0x042d5b07) /* 0.261073141 */, 16 },
1619 /* 1497 */ { MAD_F(0x042e4f0b) /* 0.261305852 */, 16 },
1620 /* 1498 */ { MAD_F(0x042f431d) /* 0.261538616 */, 16 },
1621 /* 1499 */ { MAD_F(0x0430373d) /* 0.261771431 */, 16 },
1622 /* 1500 */ { MAD_F(0x04312b6b) /* 0.262004297 */, 16 },
1623 /* 1501 */ { MAD_F(0x04321fa6) /* 0.262237216 */, 16 },
1624 /* 1502 */ { MAD_F(0x043313f0) /* 0.262470186 */, 16 },
1625 /* 1503 */ { MAD_F(0x04340847) /* 0.262703208 */, 16 },
1626
1627 /* 1504 */ { MAD_F(0x0434fcad) /* 0.262936282 */, 16 },
1628 /* 1505 */ { MAD_F(0x0435f120) /* 0.263169407 */, 16 },
1629 /* 1506 */ { MAD_F(0x0436e5a1) /* 0.263402584 */, 16 },
1630 /* 1507 */ { MAD_F(0x0437da2f) /* 0.263635813 */, 16 },
1631 /* 1508 */ { MAD_F(0x0438cecc) /* 0.263869093 */, 16 },
1632 /* 1509 */ { MAD_F(0x0439c377) /* 0.264102425 */, 16 },
1633 /* 1510 */ { MAD_F(0x043ab82f) /* 0.264335808 */, 16 },
1634 /* 1511 */ { MAD_F(0x043bacf5) /* 0.264569243 */, 16 },
1635 /* 1512 */ { MAD_F(0x043ca1c9) /* 0.264802730 */, 16 },
1636 /* 1513 */ { MAD_F(0x043d96ab) /* 0.265036267 */, 16 },
1637 /* 1514 */ { MAD_F(0x043e8b9b) /* 0.265269857 */, 16 },
1638 /* 1515 */ { MAD_F(0x043f8098) /* 0.265503498 */, 16 },
1639 /* 1516 */ { MAD_F(0x044075a3) /* 0.265737190 */, 16 },
1640 /* 1517 */ { MAD_F(0x04416abc) /* 0.265970933 */, 16 },
1641 /* 1518 */ { MAD_F(0x04425fe3) /* 0.266204728 */, 16 },
1642 /* 1519 */ { MAD_F(0x04435518) /* 0.266438574 */, 16 },
1643
1644 /* 1520 */ { MAD_F(0x04444a5a) /* 0.266672472 */, 16 },
1645 /* 1521 */ { MAD_F(0x04453fab) /* 0.266906421 */, 16 },
1646 /* 1522 */ { MAD_F(0x04463508) /* 0.267140421 */, 16 },
1647 /* 1523 */ { MAD_F(0x04472a74) /* 0.267374472 */, 16 },
1648 /* 1524 */ { MAD_F(0x04481fee) /* 0.267608575 */, 16 },
1649 /* 1525 */ { MAD_F(0x04491575) /* 0.267842729 */, 16 },
1650 /* 1526 */ { MAD_F(0x044a0b0a) /* 0.268076934 */, 16 },
1651 /* 1527 */ { MAD_F(0x044b00ac) /* 0.268311190 */, 16 },
1652 /* 1528 */ { MAD_F(0x044bf65d) /* 0.268545497 */, 16 },
1653 /* 1529 */ { MAD_F(0x044cec1b) /* 0.268779856 */, 16 },
1654 /* 1530 */ { MAD_F(0x044de1e7) /* 0.269014265 */, 16 },
1655 /* 1531 */ { MAD_F(0x044ed7c0) /* 0.269248726 */, 16 },
1656 /* 1532 */ { MAD_F(0x044fcda8) /* 0.269483238 */, 16 },
1657 /* 1533 */ { MAD_F(0x0450c39c) /* 0.269717800 */, 16 },
1658 /* 1534 */ { MAD_F(0x0451b99f) /* 0.269952414 */, 16 },
1659 /* 1535 */ { MAD_F(0x0452afaf) /* 0.270187079 */, 16 },
1660
1661 /* 1536 */ { MAD_F(0x0453a5cd) /* 0.270421794 */, 16 },
1662 /* 1537 */ { MAD_F(0x04549bf9) /* 0.270656561 */, 16 },
1663 /* 1538 */ { MAD_F(0x04559232) /* 0.270891379 */, 16 },
1664 /* 1539 */ { MAD_F(0x04568879) /* 0.271126247 */, 16 },
1665 /* 1540 */ { MAD_F(0x04577ece) /* 0.271361166 */, 16 },
1666 /* 1541 */ { MAD_F(0x04587530) /* 0.271596136 */, 16 },
1667 /* 1542 */ { MAD_F(0x04596ba0) /* 0.271831157 */, 16 },
1668 /* 1543 */ { MAD_F(0x045a621e) /* 0.272066229 */, 16 },
1669 /* 1544 */ { MAD_F(0x045b58a9) /* 0.272301352 */, 16 },
1670 /* 1545 */ { MAD_F(0x045c4f42) /* 0.272536525 */, 16 },
1671 /* 1546 */ { MAD_F(0x045d45e9) /* 0.272771749 */, 16 },
1672 /* 1547 */ { MAD_F(0x045e3c9d) /* 0.273007024 */, 16 },
1673 /* 1548 */ { MAD_F(0x045f335e) /* 0.273242350 */, 16 },
1674 /* 1549 */ { MAD_F(0x04602a2e) /* 0.273477726 */, 16 },
1675 /* 1550 */ { MAD_F(0x0461210b) /* 0.273713153 */, 16 },
1676 /* 1551 */ { MAD_F(0x046217f5) /* 0.273948630 */, 16 },
1677
1678 /* 1552 */ { MAD_F(0x04630eed) /* 0.274184158 */, 16 },
1679 /* 1553 */ { MAD_F(0x046405f3) /* 0.274419737 */, 16 },
1680 /* 1554 */ { MAD_F(0x0464fd06) /* 0.274655366 */, 16 },
1681 /* 1555 */ { MAD_F(0x0465f427) /* 0.274891046 */, 16 },
1682 /* 1556 */ { MAD_F(0x0466eb55) /* 0.275126776 */, 16 },
1683 /* 1557 */ { MAD_F(0x0467e291) /* 0.275362557 */, 16 },
1684 /* 1558 */ { MAD_F(0x0468d9db) /* 0.275598389 */, 16 },
1685 /* 1559 */ { MAD_F(0x0469d132) /* 0.275834270 */, 16 },
1686 /* 1560 */ { MAD_F(0x046ac896) /* 0.276070203 */, 16 },
1687 /* 1561 */ { MAD_F(0x046bc009) /* 0.276306185 */, 16 },
1688 /* 1562 */ { MAD_F(0x046cb788) /* 0.276542218 */, 16 },
1689 /* 1563 */ { MAD_F(0x046daf15) /* 0.276778302 */, 16 },
1690 /* 1564 */ { MAD_F(0x046ea6b0) /* 0.277014435 */, 16 },
1691 /* 1565 */ { MAD_F(0x046f9e58) /* 0.277250619 */, 16 },
1692 /* 1566 */ { MAD_F(0x0470960e) /* 0.277486854 */, 16 },
1693 /* 1567 */ { MAD_F(0x04718dd1) /* 0.277723139 */, 16 },
1694
1695 /* 1568 */ { MAD_F(0x047285a2) /* 0.277959474 */, 16 },
1696 /* 1569 */ { MAD_F(0x04737d80) /* 0.278195859 */, 16 },
1697 /* 1570 */ { MAD_F(0x0474756c) /* 0.278432294 */, 16 },
1698 /* 1571 */ { MAD_F(0x04756d65) /* 0.278668780 */, 16 },
1699 /* 1572 */ { MAD_F(0x0476656b) /* 0.278905316 */, 16 },
1700 /* 1573 */ { MAD_F(0x04775d7f) /* 0.279141902 */, 16 },
1701 /* 1574 */ { MAD_F(0x047855a1) /* 0.279378538 */, 16 },
1702 /* 1575 */ { MAD_F(0x04794dd0) /* 0.279615224 */, 16 },
1703 /* 1576 */ { MAD_F(0x047a460c) /* 0.279851960 */, 16 },
1704 /* 1577 */ { MAD_F(0x047b3e56) /* 0.280088747 */, 16 },
1705 /* 1578 */ { MAD_F(0x047c36ae) /* 0.280325583 */, 16 },
1706 /* 1579 */ { MAD_F(0x047d2f12) /* 0.280562470 */, 16 },
1707 /* 1580 */ { MAD_F(0x047e2784) /* 0.280799406 */, 16 },
1708 /* 1581 */ { MAD_F(0x047f2004) /* 0.281036393 */, 16 },
1709 /* 1582 */ { MAD_F(0x04801891) /* 0.281273429 */, 16 },
1710 /* 1583 */ { MAD_F(0x0481112b) /* 0.281510516 */, 16 },
1711
1712 /* 1584 */ { MAD_F(0x048209d3) /* 0.281747652 */, 16 },
1713 /* 1585 */ { MAD_F(0x04830288) /* 0.281984838 */, 16 },
1714 /* 1586 */ { MAD_F(0x0483fb4b) /* 0.282222075 */, 16 },
1715 /* 1587 */ { MAD_F(0x0484f41b) /* 0.282459361 */, 16 },
1716 /* 1588 */ { MAD_F(0x0485ecf8) /* 0.282696697 */, 16 },
1717 /* 1589 */ { MAD_F(0x0486e5e3) /* 0.282934082 */, 16 },
1718 /* 1590 */ { MAD_F(0x0487dedb) /* 0.283171518 */, 16 },
1719 /* 1591 */ { MAD_F(0x0488d7e1) /* 0.283409003 */, 16 },
1720 /* 1592 */ { MAD_F(0x0489d0f4) /* 0.283646538 */, 16 },
1721 /* 1593 */ { MAD_F(0x048aca14) /* 0.283884123 */, 16 },
1722 /* 1594 */ { MAD_F(0x048bc341) /* 0.284121757 */, 16 },
1723 /* 1595 */ { MAD_F(0x048cbc7c) /* 0.284359441 */, 16 },
1724 /* 1596 */ { MAD_F(0x048db5c4) /* 0.284597175 */, 16 },
1725 /* 1597 */ { MAD_F(0x048eaf1a) /* 0.284834959 */, 16 },
1726 /* 1598 */ { MAD_F(0x048fa87d) /* 0.285072792 */, 16 },
1727 /* 1599 */ { MAD_F(0x0490a1ed) /* 0.285310675 */, 16 },
1728
1729 /* 1600 */ { MAD_F(0x04919b6a) /* 0.285548607 */, 16 },
1730 /* 1601 */ { MAD_F(0x049294f5) /* 0.285786589 */, 16 },
1731 /* 1602 */ { MAD_F(0x04938e8d) /* 0.286024621 */, 16 },
1732 /* 1603 */ { MAD_F(0x04948833) /* 0.286262702 */, 16 },
1733 /* 1604 */ { MAD_F(0x049581e5) /* 0.286500832 */, 16 },
1734 /* 1605 */ { MAD_F(0x04967ba5) /* 0.286739012 */, 16 },
1735 /* 1606 */ { MAD_F(0x04977573) /* 0.286977242 */, 16 },
1736 /* 1607 */ { MAD_F(0x04986f4d) /* 0.287215521 */, 16 },
1737 /* 1608 */ { MAD_F(0x04996935) /* 0.287453849 */, 16 },
1738 /* 1609 */ { MAD_F(0x049a632a) /* 0.287692227 */, 16 },
1739 /* 1610 */ { MAD_F(0x049b5d2c) /* 0.287930654 */, 16 },
1740 /* 1611 */ { MAD_F(0x049c573c) /* 0.288169131 */, 16 },
1741 /* 1612 */ { MAD_F(0x049d5159) /* 0.288407657 */, 16 },
1742 /* 1613 */ { MAD_F(0x049e4b83) /* 0.288646232 */, 16 },
1743 /* 1614 */ { MAD_F(0x049f45ba) /* 0.288884857 */, 16 },
1744 /* 1615 */ { MAD_F(0x04a03ffe) /* 0.289123530 */, 16 },
1745
1746 /* 1616 */ { MAD_F(0x04a13a50) /* 0.289362253 */, 16 },
1747 /* 1617 */ { MAD_F(0x04a234af) /* 0.289601026 */, 16 },
1748 /* 1618 */ { MAD_F(0x04a32f1b) /* 0.289839847 */, 16 },
1749 /* 1619 */ { MAD_F(0x04a42995) /* 0.290078718 */, 16 },
1750 /* 1620 */ { MAD_F(0x04a5241b) /* 0.290317638 */, 16 },
1751 /* 1621 */ { MAD_F(0x04a61eaf) /* 0.290556607 */, 16 },
1752 /* 1622 */ { MAD_F(0x04a71950) /* 0.290795626 */, 16 },
1753 /* 1623 */ { MAD_F(0x04a813fe) /* 0.291034693 */, 16 },
1754 /* 1624 */ { MAD_F(0x04a90eba) /* 0.291273810 */, 16 },
1755 /* 1625 */ { MAD_F(0x04aa0982) /* 0.291512975 */, 16 },
1756 /* 1626 */ { MAD_F(0x04ab0458) /* 0.291752190 */, 16 },
1757 /* 1627 */ { MAD_F(0x04abff3b) /* 0.291991453 */, 16 },
1758 /* 1628 */ { MAD_F(0x04acfa2b) /* 0.292230766 */, 16 },
1759 /* 1629 */ { MAD_F(0x04adf528) /* 0.292470128 */, 16 },
1760 /* 1630 */ { MAD_F(0x04aef032) /* 0.292709539 */, 16 },
1761 /* 1631 */ { MAD_F(0x04afeb4a) /* 0.292948998 */, 16 },
1762
1763 /* 1632 */ { MAD_F(0x04b0e66e) /* 0.293188507 */, 16 },
1764 /* 1633 */ { MAD_F(0x04b1e1a0) /* 0.293428065 */, 16 },
1765 /* 1634 */ { MAD_F(0x04b2dcdf) /* 0.293667671 */, 16 },
1766 /* 1635 */ { MAD_F(0x04b3d82b) /* 0.293907326 */, 16 },
1767 /* 1636 */ { MAD_F(0x04b4d384) /* 0.294147031 */, 16 },
1768 /* 1637 */ { MAD_F(0x04b5ceea) /* 0.294386784 */, 16 },
1769 /* 1638 */ { MAD_F(0x04b6ca5e) /* 0.294626585 */, 16 },
1770 /* 1639 */ { MAD_F(0x04b7c5de) /* 0.294866436 */, 16 },
1771 /* 1640 */ { MAD_F(0x04b8c16c) /* 0.295106336 */, 16 },
1772 /* 1641 */ { MAD_F(0x04b9bd06) /* 0.295346284 */, 16 },
1773 /* 1642 */ { MAD_F(0x04bab8ae) /* 0.295586281 */, 16 },
1774 /* 1643 */ { MAD_F(0x04bbb463) /* 0.295826327 */, 16 },
1775 /* 1644 */ { MAD_F(0x04bcb024) /* 0.296066421 */, 16 },
1776 /* 1645 */ { MAD_F(0x04bdabf3) /* 0.296306564 */, 16 },
1777 /* 1646 */ { MAD_F(0x04bea7cf) /* 0.296546756 */, 16 },
1778 /* 1647 */ { MAD_F(0x04bfa3b8) /* 0.296786996 */, 16 },
1779
1780 /* 1648 */ { MAD_F(0x04c09faf) /* 0.297027285 */, 16 },
1781 /* 1649 */ { MAD_F(0x04c19bb2) /* 0.297267623 */, 16 },
1782 /* 1650 */ { MAD_F(0x04c297c2) /* 0.297508009 */, 16 },
1783 /* 1651 */ { MAD_F(0x04c393df) /* 0.297748444 */, 16 },
1784 /* 1652 */ { MAD_F(0x04c49009) /* 0.297988927 */, 16 },
1785 /* 1653 */ { MAD_F(0x04c58c41) /* 0.298229459 */, 16 },
1786 /* 1654 */ { MAD_F(0x04c68885) /* 0.298470039 */, 16 },
1787 /* 1655 */ { MAD_F(0x04c784d6) /* 0.298710668 */, 16 },
1788 /* 1656 */ { MAD_F(0x04c88135) /* 0.298951346 */, 16 },
1789 /* 1657 */ { MAD_F(0x04c97da0) /* 0.299192071 */, 16 },
1790 /* 1658 */ { MAD_F(0x04ca7a18) /* 0.299432846 */, 16 },
1791 /* 1659 */ { MAD_F(0x04cb769e) /* 0.299673668 */, 16 },
1792 /* 1660 */ { MAD_F(0x04cc7330) /* 0.299914539 */, 16 },
1793 /* 1661 */ { MAD_F(0x04cd6fcf) /* 0.300155459 */, 16 },
1794 /* 1662 */ { MAD_F(0x04ce6c7b) /* 0.300396426 */, 16 },
1795 /* 1663 */ { MAD_F(0x04cf6935) /* 0.300637443 */, 16 },
1796
1797 /* 1664 */ { MAD_F(0x04d065fb) /* 0.300878507 */, 16 },
1798 /* 1665 */ { MAD_F(0x04d162ce) /* 0.301119620 */, 16 },
1799 /* 1666 */ { MAD_F(0x04d25fae) /* 0.301360781 */, 16 },
1800 /* 1667 */ { MAD_F(0x04d35c9b) /* 0.301601990 */, 16 },
1801 /* 1668 */ { MAD_F(0x04d45995) /* 0.301843247 */, 16 },
1802 /* 1669 */ { MAD_F(0x04d5569c) /* 0.302084553 */, 16 },
1803 /* 1670 */ { MAD_F(0x04d653b0) /* 0.302325907 */, 16 },
1804 /* 1671 */ { MAD_F(0x04d750d1) /* 0.302567309 */, 16 },
1805 /* 1672 */ { MAD_F(0x04d84dff) /* 0.302808759 */, 16 },
1806 /* 1673 */ { MAD_F(0x04d94b3a) /* 0.303050257 */, 16 },
1807 /* 1674 */ { MAD_F(0x04da4881) /* 0.303291804 */, 16 },
1808 /* 1675 */ { MAD_F(0x04db45d6) /* 0.303533399 */, 16 },
1809 /* 1676 */ { MAD_F(0x04dc4337) /* 0.303775041 */, 16 },
1810 /* 1677 */ { MAD_F(0x04dd40a6) /* 0.304016732 */, 16 },
1811 /* 1678 */ { MAD_F(0x04de3e21) /* 0.304258471 */, 16 },
1812 /* 1679 */ { MAD_F(0x04df3ba9) /* 0.304500257 */, 16 },
1813
1814 /* 1680 */ { MAD_F(0x04e0393e) /* 0.304742092 */, 16 },
1815 /* 1681 */ { MAD_F(0x04e136e0) /* 0.304983975 */, 16 },
1816 /* 1682 */ { MAD_F(0x04e2348f) /* 0.305225906 */, 16 },
1817 /* 1683 */ { MAD_F(0x04e3324b) /* 0.305467885 */, 16 },
1818 /* 1684 */ { MAD_F(0x04e43013) /* 0.305709911 */, 16 },
1819 /* 1685 */ { MAD_F(0x04e52de9) /* 0.305951986 */, 16 },
1820 /* 1686 */ { MAD_F(0x04e62bcb) /* 0.306194108 */, 16 },
1821 /* 1687 */ { MAD_F(0x04e729ba) /* 0.306436279 */, 16 },
1822 /* 1688 */ { MAD_F(0x04e827b6) /* 0.306678497 */, 16 },
1823 /* 1689 */ { MAD_F(0x04e925bf) /* 0.306920763 */, 16 },
1824 /* 1690 */ { MAD_F(0x04ea23d4) /* 0.307163077 */, 16 },
1825 /* 1691 */ { MAD_F(0x04eb21f7) /* 0.307405438 */, 16 },
1826 /* 1692 */ { MAD_F(0x04ec2026) /* 0.307647848 */, 16 },
1827 /* 1693 */ { MAD_F(0x04ed1e62) /* 0.307890305 */, 16 },
1828 /* 1694 */ { MAD_F(0x04ee1cab) /* 0.308132810 */, 16 },
1829 /* 1695 */ { MAD_F(0x04ef1b01) /* 0.308375362 */, 16 },
1830
1831 /* 1696 */ { MAD_F(0x04f01963) /* 0.308617963 */, 16 },
1832 /* 1697 */ { MAD_F(0x04f117d3) /* 0.308860611 */, 16 },
1833 /* 1698 */ { MAD_F(0x04f2164f) /* 0.309103306 */, 16 },
1834 /* 1699 */ { MAD_F(0x04f314d8) /* 0.309346050 */, 16 },
1835 /* 1700 */ { MAD_F(0x04f4136d) /* 0.309588841 */, 16 },
1836 /* 1701 */ { MAD_F(0x04f51210) /* 0.309831679 */, 16 },
1837 /* 1702 */ { MAD_F(0x04f610bf) /* 0.310074565 */, 16 },
1838 /* 1703 */ { MAD_F(0x04f70f7b) /* 0.310317499 */, 16 },
1839 /* 1704 */ { MAD_F(0x04f80e44) /* 0.310560480 */, 16 },
1840 /* 1705 */ { MAD_F(0x04f90d19) /* 0.310803509 */, 16 },
1841 /* 1706 */ { MAD_F(0x04fa0bfc) /* 0.311046586 */, 16 },
1842 /* 1707 */ { MAD_F(0x04fb0aeb) /* 0.311289710 */, 16 },
1843 /* 1708 */ { MAD_F(0x04fc09e7) /* 0.311532881 */, 16 },
1844 /* 1709 */ { MAD_F(0x04fd08ef) /* 0.311776100 */, 16 },
1845 /* 1710 */ { MAD_F(0x04fe0805) /* 0.312019366 */, 16 },
1846 /* 1711 */ { MAD_F(0x04ff0727) /* 0.312262680 */, 16 },
1847
1848 /* 1712 */ { MAD_F(0x05000655) /* 0.312506041 */, 16 },
1849 /* 1713 */ { MAD_F(0x05010591) /* 0.312749449 */, 16 },
1850 /* 1714 */ { MAD_F(0x050204d9) /* 0.312992905 */, 16 },
1851 /* 1715 */ { MAD_F(0x0503042e) /* 0.313236408 */, 16 },
1852 /* 1716 */ { MAD_F(0x0504038f) /* 0.313479959 */, 16 },
1853 /* 1717 */ { MAD_F(0x050502fe) /* 0.313723556 */, 16 },
1854 /* 1718 */ { MAD_F(0x05060279) /* 0.313967202 */, 16 },
1855 /* 1719 */ { MAD_F(0x05070200) /* 0.314210894 */, 16 },
1856 /* 1720 */ { MAD_F(0x05080195) /* 0.314454634 */, 16 },
1857 /* 1721 */ { MAD_F(0x05090136) /* 0.314698420 */, 16 },
1858 /* 1722 */ { MAD_F(0x050a00e3) /* 0.314942255 */, 16 },
1859 /* 1723 */ { MAD_F(0x050b009e) /* 0.315186136 */, 16 },
1860 /* 1724 */ { MAD_F(0x050c0065) /* 0.315430064 */, 16 },
1861 /* 1725 */ { MAD_F(0x050d0039) /* 0.315674040 */, 16 },
1862 /* 1726 */ { MAD_F(0x050e0019) /* 0.315918063 */, 16 },
1863 /* 1727 */ { MAD_F(0x050f0006) /* 0.316162133 */, 16 },
1864
1865 /* 1728 */ { MAD_F(0x05100000) /* 0.316406250 */, 16 },
1866 /* 1729 */ { MAD_F(0x05110006) /* 0.316650414 */, 16 },
1867 /* 1730 */ { MAD_F(0x05120019) /* 0.316894625 */, 16 },
1868 /* 1731 */ { MAD_F(0x05130039) /* 0.317138884 */, 16 },
1869 /* 1732 */ { MAD_F(0x05140065) /* 0.317383189 */, 16 },
1870 /* 1733 */ { MAD_F(0x0515009e) /* 0.317627541 */, 16 },
1871 /* 1734 */ { MAD_F(0x051600e3) /* 0.317871941 */, 16 },
1872 /* 1735 */ { MAD_F(0x05170135) /* 0.318116387 */, 16 },
1873 /* 1736 */ { MAD_F(0x05180194) /* 0.318360880 */, 16 },
1874 /* 1737 */ { MAD_F(0x051901ff) /* 0.318605421 */, 16 },
1875 /* 1738 */ { MAD_F(0x051a0277) /* 0.318850008 */, 16 },
1876 /* 1739 */ { MAD_F(0x051b02fc) /* 0.319094642 */, 16 },
1877 /* 1740 */ { MAD_F(0x051c038d) /* 0.319339323 */, 16 },
1878 /* 1741 */ { MAD_F(0x051d042a) /* 0.319584051 */, 16 },
1879 /* 1742 */ { MAD_F(0x051e04d4) /* 0.319828826 */, 16 },
1880 /* 1743 */ { MAD_F(0x051f058b) /* 0.320073647 */, 16 },
1881
1882 /* 1744 */ { MAD_F(0x0520064f) /* 0.320318516 */, 16 },
1883 /* 1745 */ { MAD_F(0x0521071f) /* 0.320563431 */, 16 },
1884 /* 1746 */ { MAD_F(0x052207fb) /* 0.320808393 */, 16 },
1885 /* 1747 */ { MAD_F(0x052308e4) /* 0.321053402 */, 16 },
1886 /* 1748 */ { MAD_F(0x052409da) /* 0.321298457 */, 16 },
1887 /* 1749 */ { MAD_F(0x05250adc) /* 0.321543560 */, 16 },
1888 /* 1750 */ { MAD_F(0x05260bea) /* 0.321788709 */, 16 },
1889 /* 1751 */ { MAD_F(0x05270d06) /* 0.322033904 */, 16 },
1890 /* 1752 */ { MAD_F(0x05280e2d) /* 0.322279147 */, 16 },
1891 /* 1753 */ { MAD_F(0x05290f62) /* 0.322524436 */, 16 },
1892 /* 1754 */ { MAD_F(0x052a10a3) /* 0.322769771 */, 16 },
1893 /* 1755 */ { MAD_F(0x052b11f0) /* 0.323015154 */, 16 },
1894 /* 1756 */ { MAD_F(0x052c134a) /* 0.323260583 */, 16 },
1895 /* 1757 */ { MAD_F(0x052d14b0) /* 0.323506058 */, 16 },
1896 /* 1758 */ { MAD_F(0x052e1623) /* 0.323751580 */, 16 },
1897 /* 1759 */ { MAD_F(0x052f17a2) /* 0.323997149 */, 16 },
1898
1899 /* 1760 */ { MAD_F(0x0530192e) /* 0.324242764 */, 16 },
1900 /* 1761 */ { MAD_F(0x05311ac6) /* 0.324488426 */, 16 },
1901 /* 1762 */ { MAD_F(0x05321c6b) /* 0.324734134 */, 16 },
1902 /* 1763 */ { MAD_F(0x05331e1c) /* 0.324979889 */, 16 },
1903 /* 1764 */ { MAD_F(0x05341fda) /* 0.325225690 */, 16 },
1904 /* 1765 */ { MAD_F(0x053521a4) /* 0.325471538 */, 16 },
1905 /* 1766 */ { MAD_F(0x0536237b) /* 0.325717432 */, 16 },
1906 /* 1767 */ { MAD_F(0x0537255e) /* 0.325963372 */, 16 },
1907 /* 1768 */ { MAD_F(0x0538274e) /* 0.326209359 */, 16 },
1908 /* 1769 */ { MAD_F(0x0539294a) /* 0.326455392 */, 16 },
1909 /* 1770 */ { MAD_F(0x053a2b52) /* 0.326701472 */, 16 },
1910 /* 1771 */ { MAD_F(0x053b2d67) /* 0.326947598 */, 16 },
1911 /* 1772 */ { MAD_F(0x053c2f89) /* 0.327193770 */, 16 },
1912 /* 1773 */ { MAD_F(0x053d31b6) /* 0.327439989 */, 16 },
1913 /* 1774 */ { MAD_F(0x053e33f1) /* 0.327686254 */, 16 },
1914 /* 1775 */ { MAD_F(0x053f3637) /* 0.327932565 */, 16 },
1915
1916 /* 1776 */ { MAD_F(0x0540388a) /* 0.328178922 */, 16 },
1917 /* 1777 */ { MAD_F(0x05413aea) /* 0.328425326 */, 16 },
1918 /* 1778 */ { MAD_F(0x05423d56) /* 0.328671776 */, 16 },
1919 /* 1779 */ { MAD_F(0x05433fce) /* 0.328918272 */, 16 },
1920 /* 1780 */ { MAD_F(0x05444253) /* 0.329164814 */, 16 },
1921 /* 1781 */ { MAD_F(0x054544e4) /* 0.329411403 */, 16 },
1922 /* 1782 */ { MAD_F(0x05464781) /* 0.329658038 */, 16 },
1923 /* 1783 */ { MAD_F(0x05474a2b) /* 0.329904718 */, 16 },
1924 /* 1784 */ { MAD_F(0x05484ce2) /* 0.330151445 */, 16 },
1925 /* 1785 */ { MAD_F(0x05494fa4) /* 0.330398218 */, 16 },
1926 /* 1786 */ { MAD_F(0x054a5273) /* 0.330645037 */, 16 },
1927 /* 1787 */ { MAD_F(0x054b554e) /* 0.330891903 */, 16 },
1928 /* 1788 */ { MAD_F(0x054c5836) /* 0.331138814 */, 16 },
1929 /* 1789 */ { MAD_F(0x054d5b2a) /* 0.331385771 */, 16 },
1930 /* 1790 */ { MAD_F(0x054e5e2b) /* 0.331632774 */, 16 },
1931 /* 1791 */ { MAD_F(0x054f6138) /* 0.331879824 */, 16 },
1932
1933 /* 1792 */ { MAD_F(0x05506451) /* 0.332126919 */, 16 },
1934 /* 1793 */ { MAD_F(0x05516776) /* 0.332374060 */, 16 },
1935 /* 1794 */ { MAD_F(0x05526aa8) /* 0.332621247 */, 16 },
1936 /* 1795 */ { MAD_F(0x05536de6) /* 0.332868480 */, 16 },
1937 /* 1796 */ { MAD_F(0x05547131) /* 0.333115759 */, 16 },
1938 /* 1797 */ { MAD_F(0x05557487) /* 0.333363084 */, 16 },
1939 /* 1798 */ { MAD_F(0x055677ea) /* 0.333610455 */, 16 },
1940 /* 1799 */ { MAD_F(0x05577b5a) /* 0.333857872 */, 16 },
1941 /* 1800 */ { MAD_F(0x05587ed5) /* 0.334105334 */, 16 },
1942 /* 1801 */ { MAD_F(0x0559825e) /* 0.334352843 */, 16 },
1943 /* 1802 */ { MAD_F(0x055a85f2) /* 0.334600397 */, 16 },
1944 /* 1803 */ { MAD_F(0x055b8992) /* 0.334847997 */, 16 },
1945 /* 1804 */ { MAD_F(0x055c8d3f) /* 0.335095642 */, 16 },
1946 /* 1805 */ { MAD_F(0x055d90f9) /* 0.335343334 */, 16 },
1947 /* 1806 */ { MAD_F(0x055e94be) /* 0.335591071 */, 16 },
1948 /* 1807 */ { MAD_F(0x055f9890) /* 0.335838854 */, 16 },
1949
1950 /* 1808 */ { MAD_F(0x05609c6e) /* 0.336086683 */, 16 },
1951 /* 1809 */ { MAD_F(0x0561a058) /* 0.336334557 */, 16 },
1952 /* 1810 */ { MAD_F(0x0562a44f) /* 0.336582477 */, 16 },
1953 /* 1811 */ { MAD_F(0x0563a851) /* 0.336830443 */, 16 },
1954 /* 1812 */ { MAD_F(0x0564ac60) /* 0.337078454 */, 16 },
1955 /* 1813 */ { MAD_F(0x0565b07c) /* 0.337326511 */, 16 },
1956 /* 1814 */ { MAD_F(0x0566b4a3) /* 0.337574614 */, 16 },
1957 /* 1815 */ { MAD_F(0x0567b8d7) /* 0.337822762 */, 16 },
1958 /* 1816 */ { MAD_F(0x0568bd17) /* 0.338070956 */, 16 },
1959 /* 1817 */ { MAD_F(0x0569c163) /* 0.338319195 */, 16 },
1960 /* 1818 */ { MAD_F(0x056ac5bc) /* 0.338567480 */, 16 },
1961 /* 1819 */ { MAD_F(0x056bca20) /* 0.338815811 */, 16 },
1962 /* 1820 */ { MAD_F(0x056cce91) /* 0.339064186 */, 16 },
1963 /* 1821 */ { MAD_F(0x056dd30e) /* 0.339312608 */, 16 },
1964 /* 1822 */ { MAD_F(0x056ed798) /* 0.339561075 */, 16 },
1965 /* 1823 */ { MAD_F(0x056fdc2d) /* 0.339809587 */, 16 },
1966
1967 /* 1824 */ { MAD_F(0x0570e0cf) /* 0.340058145 */, 16 },
1968 /* 1825 */ { MAD_F(0x0571e57d) /* 0.340306748 */, 16 },
1969 /* 1826 */ { MAD_F(0x0572ea37) /* 0.340555397 */, 16 },
1970 /* 1827 */ { MAD_F(0x0573eefd) /* 0.340804091 */, 16 },
1971 /* 1828 */ { MAD_F(0x0574f3d0) /* 0.341052830 */, 16 },
1972 /* 1829 */ { MAD_F(0x0575f8ae) /* 0.341301615 */, 16 },
1973 /* 1830 */ { MAD_F(0x0576fd99) /* 0.341550445 */, 16 },
1974 /* 1831 */ { MAD_F(0x05780290) /* 0.341799321 */, 16 },
1975 /* 1832 */ { MAD_F(0x05790793) /* 0.342048241 */, 16 },
1976 /* 1833 */ { MAD_F(0x057a0ca3) /* 0.342297207 */, 16 },
1977 /* 1834 */ { MAD_F(0x057b11be) /* 0.342546219 */, 16 },
1978 /* 1835 */ { MAD_F(0x057c16e6) /* 0.342795275 */, 16 },
1979 /* 1836 */ { MAD_F(0x057d1c1a) /* 0.343044377 */, 16 },
1980 /* 1837 */ { MAD_F(0x057e2159) /* 0.343293524 */, 16 },
1981 /* 1838 */ { MAD_F(0x057f26a6) /* 0.343542717 */, 16 },
1982 /* 1839 */ { MAD_F(0x05802bfe) /* 0.343791954 */, 16 },
1983
1984 /* 1840 */ { MAD_F(0x05813162) /* 0.344041237 */, 16 },
1985 /* 1841 */ { MAD_F(0x058236d2) /* 0.344290564 */, 16 },
1986 /* 1842 */ { MAD_F(0x05833c4f) /* 0.344539937 */, 16 },
1987 /* 1843 */ { MAD_F(0x058441d8) /* 0.344789356 */, 16 },
1988 /* 1844 */ { MAD_F(0x0585476c) /* 0.345038819 */, 16 },
1989 /* 1845 */ { MAD_F(0x05864d0d) /* 0.345288327 */, 16 },
1990 /* 1846 */ { MAD_F(0x058752ba) /* 0.345537880 */, 16 },
1991 /* 1847 */ { MAD_F(0x05885873) /* 0.345787479 */, 16 },
1992 /* 1848 */ { MAD_F(0x05895e39) /* 0.346037122 */, 16 },
1993 /* 1849 */ { MAD_F(0x058a640a) /* 0.346286811 */, 16 },
1994 /* 1850 */ { MAD_F(0x058b69e7) /* 0.346536545 */, 16 },
1995 /* 1851 */ { MAD_F(0x058c6fd1) /* 0.346786323 */, 16 },
1996 /* 1852 */ { MAD_F(0x058d75c6) /* 0.347036147 */, 16 },
1997 /* 1853 */ { MAD_F(0x058e7bc8) /* 0.347286015 */, 16 },
1998 /* 1854 */ { MAD_F(0x058f81d5) /* 0.347535929 */, 16 },
1999 /* 1855 */ { MAD_F(0x059087ef) /* 0.347785887 */, 16 },
2000
2001 /* 1856 */ { MAD_F(0x05918e15) /* 0.348035890 */, 16 },
2002 /* 1857 */ { MAD_F(0x05929447) /* 0.348285939 */, 16 },
2003 /* 1858 */ { MAD_F(0x05939a84) /* 0.348536032 */, 16 },
2004 /* 1859 */ { MAD_F(0x0594a0ce) /* 0.348786170 */, 16 },
2005 /* 1860 */ { MAD_F(0x0595a724) /* 0.349036353 */, 16 },
2006 /* 1861 */ { MAD_F(0x0596ad86) /* 0.349286580 */, 16 },
2007 /* 1862 */ { MAD_F(0x0597b3f4) /* 0.349536853 */, 16 },
2008 /* 1863 */ { MAD_F(0x0598ba6e) /* 0.349787170 */, 16 },
2009 /* 1864 */ { MAD_F(0x0599c0f4) /* 0.350037532 */, 16 },
2010 /* 1865 */ { MAD_F(0x059ac786) /* 0.350287939 */, 16 },
2011 /* 1866 */ { MAD_F(0x059bce25) /* 0.350538391 */, 16 },
2012 /* 1867 */ { MAD_F(0x059cd4cf) /* 0.350788887 */, 16 },
2013 /* 1868 */ { MAD_F(0x059ddb85) /* 0.351039428 */, 16 },
2014 /* 1869 */ { MAD_F(0x059ee247) /* 0.351290014 */, 16 },
2015 /* 1870 */ { MAD_F(0x059fe915) /* 0.351540645 */, 16 },
2016 /* 1871 */ { MAD_F(0x05a0efef) /* 0.351791320 */, 16 },
2017
2018 /* 1872 */ { MAD_F(0x05a1f6d5) /* 0.352042040 */, 16 },
2019 /* 1873 */ { MAD_F(0x05a2fdc7) /* 0.352292804 */, 16 },
2020 /* 1874 */ { MAD_F(0x05a404c5) /* 0.352543613 */, 16 },
2021 /* 1875 */ { MAD_F(0x05a50bcf) /* 0.352794467 */, 16 },
2022 /* 1876 */ { MAD_F(0x05a612e5) /* 0.353045365 */, 16 },
2023 /* 1877 */ { MAD_F(0x05a71a07) /* 0.353296308 */, 16 },
2024 /* 1878 */ { MAD_F(0x05a82135) /* 0.353547296 */, 16 },
2025 /* 1879 */ { MAD_F(0x05a9286f) /* 0.353798328 */, 16 },
2026 /* 1880 */ { MAD_F(0x05aa2fb5) /* 0.354049405 */, 16 },
2027 /* 1881 */ { MAD_F(0x05ab3707) /* 0.354300526 */, 16 },
2028 /* 1882 */ { MAD_F(0x05ac3e65) /* 0.354551691 */, 16 },
2029 /* 1883 */ { MAD_F(0x05ad45ce) /* 0.354802901 */, 16 },
2030 /* 1884 */ { MAD_F(0x05ae4d44) /* 0.355054156 */, 16 },
2031 /* 1885 */ { MAD_F(0x05af54c6) /* 0.355305455 */, 16 },
2032 /* 1886 */ { MAD_F(0x05b05c53) /* 0.355556799 */, 16 },
2033 /* 1887 */ { MAD_F(0x05b163ed) /* 0.355808187 */, 16 },
2034
2035 /* 1888 */ { MAD_F(0x05b26b92) /* 0.356059619 */, 16 },
2036 /* 1889 */ { MAD_F(0x05b37343) /* 0.356311096 */, 16 },
2037 /* 1890 */ { MAD_F(0x05b47b00) /* 0.356562617 */, 16 },
2038 /* 1891 */ { MAD_F(0x05b582c9) /* 0.356814182 */, 16 },
2039 /* 1892 */ { MAD_F(0x05b68a9e) /* 0.357065792 */, 16 },
2040 /* 1893 */ { MAD_F(0x05b7927f) /* 0.357317446 */, 16 },
2041 /* 1894 */ { MAD_F(0x05b89a6c) /* 0.357569145 */, 16 },
2042 /* 1895 */ { MAD_F(0x05b9a265) /* 0.357820887 */, 16 },
2043 /* 1896 */ { MAD_F(0x05baaa69) /* 0.358072674 */, 16 },
2044 /* 1897 */ { MAD_F(0x05bbb27a) /* 0.358324506 */, 16 },
2045 /* 1898 */ { MAD_F(0x05bcba96) /* 0.358576381 */, 16 },
2046 /* 1899 */ { MAD_F(0x05bdc2be) /* 0.358828301 */, 16 },
2047 /* 1900 */ { MAD_F(0x05becaf2) /* 0.359080265 */, 16 },
2048 /* 1901 */ { MAD_F(0x05bfd332) /* 0.359332273 */, 16 },
2049 /* 1902 */ { MAD_F(0x05c0db7e) /* 0.359584326 */, 16 },
2050 /* 1903 */ { MAD_F(0x05c1e3d6) /* 0.359836423 */, 16 },
2051
2052 /* 1904 */ { MAD_F(0x05c2ec39) /* 0.360088563 */, 16 },
2053 /* 1905 */ { MAD_F(0x05c3f4a9) /* 0.360340748 */, 16 },
2054 /* 1906 */ { MAD_F(0x05c4fd24) /* 0.360592977 */, 16 },
2055 /* 1907 */ { MAD_F(0x05c605ab) /* 0.360845251 */, 16 },
2056 /* 1908 */ { MAD_F(0x05c70e3e) /* 0.361097568 */, 16 },
2057 /* 1909 */ { MAD_F(0x05c816dd) /* 0.361349929 */, 16 },
2058 /* 1910 */ { MAD_F(0x05c91f87) /* 0.361602335 */, 16 },
2059 /* 1911 */ { MAD_F(0x05ca283e) /* 0.361854784 */, 16 },
2060 /* 1912 */ { MAD_F(0x05cb3100) /* 0.362107278 */, 16 },
2061 /* 1913 */ { MAD_F(0x05cc39ce) /* 0.362359815 */, 16 },
2062 /* 1914 */ { MAD_F(0x05cd42a8) /* 0.362612397 */, 16 },
2063 /* 1915 */ { MAD_F(0x05ce4b8d) /* 0.362865022 */, 16 },
2064 /* 1916 */ { MAD_F(0x05cf547f) /* 0.363117692 */, 16 },
2065 /* 1917 */ { MAD_F(0x05d05d7c) /* 0.363370405 */, 16 },
2066 /* 1918 */ { MAD_F(0x05d16685) /* 0.363623163 */, 16 },
2067 /* 1919 */ { MAD_F(0x05d26f9a) /* 0.363875964 */, 16 },
2068
2069 /* 1920 */ { MAD_F(0x05d378bb) /* 0.364128809 */, 16 },
2070 /* 1921 */ { MAD_F(0x05d481e7) /* 0.364381698 */, 16 },
2071 /* 1922 */ { MAD_F(0x05d58b1f) /* 0.364634632 */, 16 },
2072 /* 1923 */ { MAD_F(0x05d69463) /* 0.364887608 */, 16 },
2073 /* 1924 */ { MAD_F(0x05d79db3) /* 0.365140629 */, 16 },
2074 /* 1925 */ { MAD_F(0x05d8a70f) /* 0.365393694 */, 16 },
2075 /* 1926 */ { MAD_F(0x05d9b076) /* 0.365646802 */, 16 },
2076 /* 1927 */ { MAD_F(0x05dab9e9) /* 0.365899955 */, 16 },
2077 /* 1928 */ { MAD_F(0x05dbc368) /* 0.366153151 */, 16 },
2078 /* 1929 */ { MAD_F(0x05dcccf2) /* 0.366406390 */, 16 },
2079 /* 1930 */ { MAD_F(0x05ddd689) /* 0.366659674 */, 16 },
2080 /* 1931 */ { MAD_F(0x05dee02b) /* 0.366913001 */, 16 },
2081 /* 1932 */ { MAD_F(0x05dfe9d8) /* 0.367166372 */, 16 },
2082 /* 1933 */ { MAD_F(0x05e0f392) /* 0.367419787 */, 16 },
2083 /* 1934 */ { MAD_F(0x05e1fd57) /* 0.367673246 */, 16 },
2084 /* 1935 */ { MAD_F(0x05e30728) /* 0.367926748 */, 16 },
2085
2086 /* 1936 */ { MAD_F(0x05e41105) /* 0.368180294 */, 16 },
2087 /* 1937 */ { MAD_F(0x05e51aed) /* 0.368433883 */, 16 },
2088 /* 1938 */ { MAD_F(0x05e624e1) /* 0.368687517 */, 16 },
2089 /* 1939 */ { MAD_F(0x05e72ee1) /* 0.368941193 */, 16 },
2090 /* 1940 */ { MAD_F(0x05e838ed) /* 0.369194914 */, 16 },
2091 /* 1941 */ { MAD_F(0x05e94304) /* 0.369448678 */, 16 },
2092 /* 1942 */ { MAD_F(0x05ea4d27) /* 0.369702485 */, 16 },
2093 /* 1943 */ { MAD_F(0x05eb5756) /* 0.369956336 */, 16 },
2094 /* 1944 */ { MAD_F(0x05ec6190) /* 0.370210231 */, 16 },
2095 /* 1945 */ { MAD_F(0x05ed6bd6) /* 0.370464169 */, 16 },
2096 /* 1946 */ { MAD_F(0x05ee7628) /* 0.370718151 */, 16 },
2097 /* 1947 */ { MAD_F(0x05ef8085) /* 0.370972177 */, 16 },
2098 /* 1948 */ { MAD_F(0x05f08aee) /* 0.371226245 */, 16 },
2099 /* 1949 */ { MAD_F(0x05f19563) /* 0.371480358 */, 16 },
2100 /* 1950 */ { MAD_F(0x05f29fe3) /* 0.371734513 */, 16 },
2101 /* 1951 */ { MAD_F(0x05f3aa6f) /* 0.371988712 */, 16 },
2102
2103 /* 1952 */ { MAD_F(0x05f4b507) /* 0.372242955 */, 16 },
2104 /* 1953 */ { MAD_F(0x05f5bfab) /* 0.372497241 */, 16 },
2105 /* 1954 */ { MAD_F(0x05f6ca5a) /* 0.372751570 */, 16 },
2106 /* 1955 */ { MAD_F(0x05f7d514) /* 0.373005943 */, 16 },
2107 /* 1956 */ { MAD_F(0x05f8dfdb) /* 0.373260359 */, 16 },
2108 /* 1957 */ { MAD_F(0x05f9eaad) /* 0.373514819 */, 16 },
2109 /* 1958 */ { MAD_F(0x05faf58a) /* 0.373769322 */, 16 },
2110 /* 1959 */ { MAD_F(0x05fc0073) /* 0.374023868 */, 16 },
2111 /* 1960 */ { MAD_F(0x05fd0b68) /* 0.374278458 */, 16 },
2112 /* 1961 */ { MAD_F(0x05fe1669) /* 0.374533091 */, 16 },
2113 /* 1962 */ { MAD_F(0x05ff2175) /* 0.374787767 */, 16 },
2114 /* 1963 */ { MAD_F(0x06002c8d) /* 0.375042486 */, 16 },
2115 /* 1964 */ { MAD_F(0x060137b0) /* 0.375297249 */, 16 },
2116 /* 1965 */ { MAD_F(0x060242df) /* 0.375552055 */, 16 },
2117 /* 1966 */ { MAD_F(0x06034e19) /* 0.375806904 */, 16 },
2118 /* 1967 */ { MAD_F(0x0604595f) /* 0.376061796 */, 16 },
2119
2120 /* 1968 */ { MAD_F(0x060564b1) /* 0.376316732 */, 16 },
2121 /* 1969 */ { MAD_F(0x0606700f) /* 0.376571710 */, 16 },
2122 /* 1970 */ { MAD_F(0x06077b77) /* 0.376826732 */, 16 },
2123 /* 1971 */ { MAD_F(0x060886ec) /* 0.377081797 */, 16 },
2124 /* 1972 */ { MAD_F(0x0609926c) /* 0.377336905 */, 16 },
2125 /* 1973 */ { MAD_F(0x060a9df8) /* 0.377592057 */, 16 },
2126 /* 1974 */ { MAD_F(0x060ba98f) /* 0.377847251 */, 16 },
2127 /* 1975 */ { MAD_F(0x060cb532) /* 0.378102489 */, 16 },
2128 /* 1976 */ { MAD_F(0x060dc0e0) /* 0.378357769 */, 16 },
2129 /* 1977 */ { MAD_F(0x060ecc9a) /* 0.378613093 */, 16 },
2130 /* 1978 */ { MAD_F(0x060fd860) /* 0.378868460 */, 16 },
2131 /* 1979 */ { MAD_F(0x0610e431) /* 0.379123870 */, 16 },
2132 /* 1980 */ { MAD_F(0x0611f00d) /* 0.379379322 */, 16 },
2133 /* 1981 */ { MAD_F(0x0612fbf5) /* 0.379634818 */, 16 },
2134 /* 1982 */ { MAD_F(0x061407e9) /* 0.379890357 */, 16 },
2135 /* 1983 */ { MAD_F(0x061513e8) /* 0.380145939 */, 16 },
2136
2137 /* 1984 */ { MAD_F(0x06161ff3) /* 0.380401563 */, 16 },
2138 /* 1985 */ { MAD_F(0x06172c09) /* 0.380657231 */, 16 },
2139 /* 1986 */ { MAD_F(0x0618382b) /* 0.380912942 */, 16 },
2140 /* 1987 */ { MAD_F(0x06194458) /* 0.381168695 */, 16 },
2141 /* 1988 */ { MAD_F(0x061a5091) /* 0.381424492 */, 16 },
2142 /* 1989 */ { MAD_F(0x061b5cd5) /* 0.381680331 */, 16 },
2143 /* 1990 */ { MAD_F(0x061c6925) /* 0.381936213 */, 16 },
2144 /* 1991 */ { MAD_F(0x061d7581) /* 0.382192138 */, 16 },
2145 /* 1992 */ { MAD_F(0x061e81e8) /* 0.382448106 */, 16 },
2146 /* 1993 */ { MAD_F(0x061f8e5a) /* 0.382704117 */, 16 },
2147 /* 1994 */ { MAD_F(0x06209ad8) /* 0.382960171 */, 16 },
2148 /* 1995 */ { MAD_F(0x0621a761) /* 0.383216267 */, 16 },
2149 /* 1996 */ { MAD_F(0x0622b3f6) /* 0.383472406 */, 16 },
2150 /* 1997 */ { MAD_F(0x0623c096) /* 0.383728588 */, 16 },
2151 /* 1998 */ { MAD_F(0x0624cd42) /* 0.383984813 */, 16 },
2152 /* 1999 */ { MAD_F(0x0625d9f9) /* 0.384241080 */, 16 },
2153
2154 /* 2000 */ { MAD_F(0x0626e6bc) /* 0.384497391 */, 16 },
2155 /* 2001 */ { MAD_F(0x0627f38a) /* 0.384753744 */, 16 },
2156 /* 2002 */ { MAD_F(0x06290064) /* 0.385010139 */, 16 },
2157 /* 2003 */ { MAD_F(0x062a0d49) /* 0.385266578 */, 16 },
2158 /* 2004 */ { MAD_F(0x062b1a3a) /* 0.385523059 */, 16 },
2159 /* 2005 */ { MAD_F(0x062c2736) /* 0.385779582 */, 16 },
2160 /* 2006 */ { MAD_F(0x062d343d) /* 0.386036149 */, 16 },
2161 /* 2007 */ { MAD_F(0x062e4150) /* 0.386292758 */, 16 },
2162 /* 2008 */ { MAD_F(0x062f4e6f) /* 0.386549409 */, 16 },
2163 /* 2009 */ { MAD_F(0x06305b99) /* 0.386806104 */, 16 },
2164 /* 2010 */ { MAD_F(0x063168ce) /* 0.387062840 */, 16 },
2165 /* 2011 */ { MAD_F(0x0632760f) /* 0.387319620 */, 16 },
2166 /* 2012 */ { MAD_F(0x0633835b) /* 0.387576442 */, 16 },
2167 /* 2013 */ { MAD_F(0x063490b2) /* 0.387833306 */, 16 },
2168 /* 2014 */ { MAD_F(0x06359e15) /* 0.388090213 */, 16 },
2169 /* 2015 */ { MAD_F(0x0636ab83) /* 0.388347163 */, 16 },
2170
2171 /* 2016 */ { MAD_F(0x0637b8fd) /* 0.388604155 */, 16 },
2172 /* 2017 */ { MAD_F(0x0638c682) /* 0.388861190 */, 16 },
2173 /* 2018 */ { MAD_F(0x0639d413) /* 0.389118267 */, 16 },
2174 /* 2019 */ { MAD_F(0x063ae1af) /* 0.389375386 */, 16 },
2175 /* 2020 */ { MAD_F(0x063bef56) /* 0.389632548 */, 16 },
2176 /* 2021 */ { MAD_F(0x063cfd09) /* 0.389889752 */, 16 },
2177 /* 2022 */ { MAD_F(0x063e0ac7) /* 0.390146999 */, 16 },
2178 /* 2023 */ { MAD_F(0x063f1891) /* 0.390404289 */, 16 },
2179 /* 2024 */ { MAD_F(0x06402666) /* 0.390661620 */, 16 },
2180 /* 2025 */ { MAD_F(0x06413446) /* 0.390918994 */, 16 },
2181 /* 2026 */ { MAD_F(0x06424232) /* 0.391176411 */, 16 },
2182 /* 2027 */ { MAD_F(0x06435029) /* 0.391433869 */, 16 },
2183 /* 2028 */ { MAD_F(0x06445e2b) /* 0.391691371 */, 16 },
2184 /* 2029 */ { MAD_F(0x06456c39) /* 0.391948914 */, 16 },
2185 /* 2030 */ { MAD_F(0x06467a52) /* 0.392206500 */, 16 },
2186 /* 2031 */ { MAD_F(0x06478877) /* 0.392464128 */, 16 },
2187
2188 /* 2032 */ { MAD_F(0x064896a7) /* 0.392721798 */, 16 },
2189 /* 2033 */ { MAD_F(0x0649a4e2) /* 0.392979511 */, 16 },
2190 /* 2034 */ { MAD_F(0x064ab328) /* 0.393237266 */, 16 },
2191 /* 2035 */ { MAD_F(0x064bc17a) /* 0.393495063 */, 16 },
2192 /* 2036 */ { MAD_F(0x064ccfd8) /* 0.393752902 */, 16 },
2193 /* 2037 */ { MAD_F(0x064dde40) /* 0.394010784 */, 16 },
2194 /* 2038 */ { MAD_F(0x064eecb4) /* 0.394268707 */, 16 },
2195 /* 2039 */ { MAD_F(0x064ffb33) /* 0.394526673 */, 16 },
2196 /* 2040 */ { MAD_F(0x065109be) /* 0.394784681 */, 16 },
2197 /* 2041 */ { MAD_F(0x06521854) /* 0.395042732 */, 16 },
2198 /* 2042 */ { MAD_F(0x065326f5) /* 0.395300824 */, 16 },
2199 /* 2043 */ { MAD_F(0x065435a1) /* 0.395558959 */, 16 },
2200 /* 2044 */ { MAD_F(0x06554459) /* 0.395817135 */, 16 },
2201 /* 2045 */ { MAD_F(0x0656531c) /* 0.396075354 */, 16 },
2202 /* 2046 */ { MAD_F(0x065761ea) /* 0.396333615 */, 16 },
2203 /* 2047 */ { MAD_F(0x065870c4) /* 0.396591918 */, 16 },
2204
2205 /* 2048 */ { MAD_F(0x06597fa9) /* 0.396850263 */, 16 },
2206 /* 2049 */ { MAD_F(0x065a8e99) /* 0.397108650 */, 16 },
2207 /* 2050 */ { MAD_F(0x065b9d95) /* 0.397367079 */, 16 },
2208 /* 2051 */ { MAD_F(0x065cac9c) /* 0.397625550 */, 16 },
2209 /* 2052 */ { MAD_F(0x065dbbae) /* 0.397884063 */, 16 },
2210 /* 2053 */ { MAD_F(0x065ecacb) /* 0.398142619 */, 16 },
2211 /* 2054 */ { MAD_F(0x065fd9f4) /* 0.398401216 */, 16 },
2212 /* 2055 */ { MAD_F(0x0660e928) /* 0.398659855 */, 16 },
2213 /* 2056 */ { MAD_F(0x0661f867) /* 0.398918536 */, 16 },
2214 /* 2057 */ { MAD_F(0x066307b1) /* 0.399177259 */, 16 },
2215 /* 2058 */ { MAD_F(0x06641707) /* 0.399436024 */, 16 },
2216 /* 2059 */ { MAD_F(0x06652668) /* 0.399694831 */, 16 },
2217 /* 2060 */ { MAD_F(0x066635d4) /* 0.399953679 */, 16 },
2218 /* 2061 */ { MAD_F(0x0667454c) /* 0.400212570 */, 16 },
2219 /* 2062 */ { MAD_F(0x066854ce) /* 0.400471503 */, 16 },
2220 /* 2063 */ { MAD_F(0x0669645c) /* 0.400730477 */, 16 },
2221
2222 /* 2064 */ { MAD_F(0x066a73f5) /* 0.400989493 */, 16 },
2223 /* 2065 */ { MAD_F(0x066b839a) /* 0.401248551 */, 16 },
2224 /* 2066 */ { MAD_F(0x066c9349) /* 0.401507651 */, 16 },
2225 /* 2067 */ { MAD_F(0x066da304) /* 0.401766793 */, 16 },
2226 /* 2068 */ { MAD_F(0x066eb2ca) /* 0.402025976 */, 16 },
2227 /* 2069 */ { MAD_F(0x066fc29b) /* 0.402285202 */, 16 },
2228 /* 2070 */ { MAD_F(0x0670d278) /* 0.402544469 */, 16 },
2229 /* 2071 */ { MAD_F(0x0671e25f) /* 0.402803777 */, 16 },
2230 /* 2072 */ { MAD_F(0x0672f252) /* 0.403063128 */, 16 },
2231 /* 2073 */ { MAD_F(0x06740250) /* 0.403322520 */, 16 },
2232 /* 2074 */ { MAD_F(0x0675125a) /* 0.403581954 */, 16 },
2233 /* 2075 */ { MAD_F(0x0676226e) /* 0.403841430 */, 16 },
2234 /* 2076 */ { MAD_F(0x0677328e) /* 0.404100947 */, 16 },
2235 /* 2077 */ { MAD_F(0x067842b9) /* 0.404360506 */, 16 },
2236 /* 2078 */ { MAD_F(0x067952ef) /* 0.404620107 */, 16 },
2237 /* 2079 */ { MAD_F(0x067a6330) /* 0.404879749 */, 16 },
2238
2239 /* 2080 */ { MAD_F(0x067b737c) /* 0.405139433 */, 16 },
2240 /* 2081 */ { MAD_F(0x067c83d4) /* 0.405399159 */, 16 },
2241 /* 2082 */ { MAD_F(0x067d9436) /* 0.405658926 */, 16 },
2242 /* 2083 */ { MAD_F(0x067ea4a4) /* 0.405918735 */, 16 },
2243 /* 2084 */ { MAD_F(0x067fb51d) /* 0.406178585 */, 16 },
2244 /* 2085 */ { MAD_F(0x0680c5a2) /* 0.406438477 */, 16 },
2245 /* 2086 */ { MAD_F(0x0681d631) /* 0.406698410 */, 16 },
2246 /* 2087 */ { MAD_F(0x0682e6cb) /* 0.406958385 */, 16 },
2247 /* 2088 */ { MAD_F(0x0683f771) /* 0.407218402 */, 16 },
2248 /* 2089 */ { MAD_F(0x06850822) /* 0.407478460 */, 16 },
2249 /* 2090 */ { MAD_F(0x068618de) /* 0.407738559 */, 16 },
2250 /* 2091 */ { MAD_F(0x068729a5) /* 0.407998700 */, 16 },
2251 /* 2092 */ { MAD_F(0x06883a77) /* 0.408258883 */, 16 },
2252 /* 2093 */ { MAD_F(0x06894b55) /* 0.408519107 */, 16 },
2253 /* 2094 */ { MAD_F(0x068a5c3d) /* 0.408779372 */, 16 },
2254 /* 2095 */ { MAD_F(0x068b6d31) /* 0.409039679 */, 16 },
2255
2256 /* 2096 */ { MAD_F(0x068c7e2f) /* 0.409300027 */, 16 },
2257 /* 2097 */ { MAD_F(0x068d8f39) /* 0.409560417 */, 16 },
2258 /* 2098 */ { MAD_F(0x068ea04e) /* 0.409820848 */, 16 },
2259 /* 2099 */ { MAD_F(0x068fb16e) /* 0.410081321 */, 16 },
2260 /* 2100 */ { MAD_F(0x0690c299) /* 0.410341834 */, 16 },
2261 /* 2101 */ { MAD_F(0x0691d3cf) /* 0.410602390 */, 16 },
2262 /* 2102 */ { MAD_F(0x0692e511) /* 0.410862986 */, 16 },
2263 /* 2103 */ { MAD_F(0x0693f65d) /* 0.411123624 */, 16 },
2264 /* 2104 */ { MAD_F(0x069507b5) /* 0.411384303 */, 16 },
2265 /* 2105 */ { MAD_F(0x06961917) /* 0.411645024 */, 16 },
2266 /* 2106 */ { MAD_F(0x06972a85) /* 0.411905785 */, 16 },
2267 /* 2107 */ { MAD_F(0x06983bfe) /* 0.412166588 */, 16 },
2268 /* 2108 */ { MAD_F(0x06994d82) /* 0.412427433 */, 16 },
2269 /* 2109 */ { MAD_F(0x069a5f11) /* 0.412688318 */, 16 },
2270 /* 2110 */ { MAD_F(0x069b70ab) /* 0.412949245 */, 16 },
2271 /* 2111 */ { MAD_F(0x069c8250) /* 0.413210213 */, 16 },
2272
2273 /* 2112 */ { MAD_F(0x069d9400) /* 0.413471222 */, 16 },
2274 /* 2113 */ { MAD_F(0x069ea5bb) /* 0.413732273 */, 16 },
2275 /* 2114 */ { MAD_F(0x069fb781) /* 0.413993364 */, 16 },
2276 /* 2115 */ { MAD_F(0x06a0c953) /* 0.414254497 */, 16 },
2277 /* 2116 */ { MAD_F(0x06a1db2f) /* 0.414515671 */, 16 },
2278 /* 2117 */ { MAD_F(0x06a2ed16) /* 0.414776886 */, 16 },
2279 /* 2118 */ { MAD_F(0x06a3ff09) /* 0.415038142 */, 16 },
2280 /* 2119 */ { MAD_F(0x06a51106) /* 0.415299440 */, 16 },
2281 /* 2120 */ { MAD_F(0x06a6230f) /* 0.415560778 */, 16 },
2282 /* 2121 */ { MAD_F(0x06a73522) /* 0.415822157 */, 16 },
2283 /* 2122 */ { MAD_F(0x06a84741) /* 0.416083578 */, 16 },
2284 /* 2123 */ { MAD_F(0x06a9596a) /* 0.416345040 */, 16 },
2285 /* 2124 */ { MAD_F(0x06aa6b9f) /* 0.416606542 */, 16 },
2286 /* 2125 */ { MAD_F(0x06ab7ddf) /* 0.416868086 */, 16 },
2287 /* 2126 */ { MAD_F(0x06ac9029) /* 0.417129671 */, 16 },
2288 /* 2127 */ { MAD_F(0x06ada27f) /* 0.417391297 */, 16 },
2289
2290 /* 2128 */ { MAD_F(0x06aeb4e0) /* 0.417652964 */, 16 },
2291 /* 2129 */ { MAD_F(0x06afc74b) /* 0.417914672 */, 16 },
2292 /* 2130 */ { MAD_F(0x06b0d9c2) /* 0.418176420 */, 16 },
2293 /* 2131 */ { MAD_F(0x06b1ec43) /* 0.418438210 */, 16 },
2294 /* 2132 */ { MAD_F(0x06b2fed0) /* 0.418700041 */, 16 },
2295 /* 2133 */ { MAD_F(0x06b41168) /* 0.418961912 */, 16 },
2296 /* 2134 */ { MAD_F(0x06b5240a) /* 0.419223825 */, 16 },
2297 /* 2135 */ { MAD_F(0x06b636b8) /* 0.419485778 */, 16 },
2298 /* 2136 */ { MAD_F(0x06b74971) /* 0.419747773 */, 16 },
2299 /* 2137 */ { MAD_F(0x06b85c34) /* 0.420009808 */, 16 },
2300 /* 2138 */ { MAD_F(0x06b96f03) /* 0.420271884 */, 16 },
2301 /* 2139 */ { MAD_F(0x06ba81dc) /* 0.420534001 */, 16 },
2302 /* 2140 */ { MAD_F(0x06bb94c1) /* 0.420796159 */, 16 },
2303 /* 2141 */ { MAD_F(0x06bca7b0) /* 0.421058358 */, 16 },
2304 /* 2142 */ { MAD_F(0x06bdbaaa) /* 0.421320597 */, 16 },
2305 /* 2143 */ { MAD_F(0x06becdb0) /* 0.421582878 */, 16 },
2306
2307 /* 2144 */ { MAD_F(0x06bfe0c0) /* 0.421845199 */, 16 },
2308 /* 2145 */ { MAD_F(0x06c0f3db) /* 0.422107561 */, 16 },
2309 /* 2146 */ { MAD_F(0x06c20702) /* 0.422369964 */, 16 },
2310 /* 2147 */ { MAD_F(0x06c31a33) /* 0.422632407 */, 16 },
2311 /* 2148 */ { MAD_F(0x06c42d6f) /* 0.422894891 */, 16 },
2312 /* 2149 */ { MAD_F(0x06c540b6) /* 0.423157416 */, 16 },
2313 /* 2150 */ { MAD_F(0x06c65408) /* 0.423419982 */, 16 },
2314 /* 2151 */ { MAD_F(0x06c76765) /* 0.423682588 */, 16 },
2315 /* 2152 */ { MAD_F(0x06c87acc) /* 0.423945235 */, 16 },
2316 /* 2153 */ { MAD_F(0x06c98e3f) /* 0.424207923 */, 16 },
2317 /* 2154 */ { MAD_F(0x06caa1bd) /* 0.424470652 */, 16 },
2318 /* 2155 */ { MAD_F(0x06cbb545) /* 0.424733421 */, 16 },
2319 /* 2156 */ { MAD_F(0x06ccc8d9) /* 0.424996230 */, 16 },
2320 /* 2157 */ { MAD_F(0x06cddc77) /* 0.425259081 */, 16 },
2321 /* 2158 */ { MAD_F(0x06cef020) /* 0.425521972 */, 16 },
2322 /* 2159 */ { MAD_F(0x06d003d4) /* 0.425784903 */, 16 },
2323
2324 /* 2160 */ { MAD_F(0x06d11794) /* 0.426047876 */, 16 },
2325 /* 2161 */ { MAD_F(0x06d22b5e) /* 0.426310889 */, 16 },
2326 /* 2162 */ { MAD_F(0x06d33f32) /* 0.426573942 */, 16 },
2327 /* 2163 */ { MAD_F(0x06d45312) /* 0.426837036 */, 16 },
2328 /* 2164 */ { MAD_F(0x06d566fd) /* 0.427100170 */, 16 },
2329 /* 2165 */ { MAD_F(0x06d67af2) /* 0.427363345 */, 16 },
2330 /* 2166 */ { MAD_F(0x06d78ef3) /* 0.427626561 */, 16 },
2331 /* 2167 */ { MAD_F(0x06d8a2fe) /* 0.427889817 */, 16 },
2332 /* 2168 */ { MAD_F(0x06d9b714) /* 0.428153114 */, 16 },
2333 /* 2169 */ { MAD_F(0x06dacb35) /* 0.428416451 */, 16 },
2334 /* 2170 */ { MAD_F(0x06dbdf61) /* 0.428679828 */, 16 },
2335 /* 2171 */ { MAD_F(0x06dcf398) /* 0.428943246 */, 16 },
2336 /* 2172 */ { MAD_F(0x06de07d9) /* 0.429206704 */, 16 },
2337 /* 2173 */ { MAD_F(0x06df1c26) /* 0.429470203 */, 16 },
2338 /* 2174 */ { MAD_F(0x06e0307d) /* 0.429733743 */, 16 },
2339 /* 2175 */ { MAD_F(0x06e144df) /* 0.429997322 */, 16 },
2340
2341 /* 2176 */ { MAD_F(0x06e2594c) /* 0.430260942 */, 16 },
2342 /* 2177 */ { MAD_F(0x06e36dc4) /* 0.430524603 */, 16 },
2343 /* 2178 */ { MAD_F(0x06e48246) /* 0.430788304 */, 16 },
2344 /* 2179 */ { MAD_F(0x06e596d4) /* 0.431052045 */, 16 },
2345 /* 2180 */ { MAD_F(0x06e6ab6c) /* 0.431315826 */, 16 },
2346 /* 2181 */ { MAD_F(0x06e7c00f) /* 0.431579648 */, 16 },
2347 /* 2182 */ { MAD_F(0x06e8d4bd) /* 0.431843511 */, 16 },
2348 /* 2183 */ { MAD_F(0x06e9e976) /* 0.432107413 */, 16 },
2349 /* 2184 */ { MAD_F(0x06eafe3a) /* 0.432371356 */, 16 },
2350 /* 2185 */ { MAD_F(0x06ec1308) /* 0.432635339 */, 16 },
2351 /* 2186 */ { MAD_F(0x06ed27e2) /* 0.432899362 */, 16 },
2352 /* 2187 */ { MAD_F(0x06ee3cc6) /* 0.433163426 */, 16 },
2353 /* 2188 */ { MAD_F(0x06ef51b4) /* 0.433427530 */, 16 },
2354 /* 2189 */ { MAD_F(0x06f066ae) /* 0.433691674 */, 16 },
2355 /* 2190 */ { MAD_F(0x06f17bb3) /* 0.433955859 */, 16 },
2356 /* 2191 */ { MAD_F(0x06f290c2) /* 0.434220083 */, 16 },
2357
2358 /* 2192 */ { MAD_F(0x06f3a5dc) /* 0.434484348 */, 16 },
2359 /* 2193 */ { MAD_F(0x06f4bb01) /* 0.434748653 */, 16 },
2360 /* 2194 */ { MAD_F(0x06f5d030) /* 0.435012998 */, 16 },
2361 /* 2195 */ { MAD_F(0x06f6e56b) /* 0.435277383 */, 16 },
2362 /* 2196 */ { MAD_F(0x06f7fab0) /* 0.435541809 */, 16 },
2363 /* 2197 */ { MAD_F(0x06f91000) /* 0.435806274 */, 16 },
2364 /* 2198 */ { MAD_F(0x06fa255a) /* 0.436070780 */, 16 },
2365 /* 2199 */ { MAD_F(0x06fb3ac0) /* 0.436335326 */, 16 },
2366 /* 2200 */ { MAD_F(0x06fc5030) /* 0.436599912 */, 16 },
2367 /* 2201 */ { MAD_F(0x06fd65ab) /* 0.436864538 */, 16 },
2368 /* 2202 */ { MAD_F(0x06fe7b31) /* 0.437129204 */, 16 },
2369 /* 2203 */ { MAD_F(0x06ff90c2) /* 0.437393910 */, 16 },
2370 /* 2204 */ { MAD_F(0x0700a65d) /* 0.437658657 */, 16 },
2371 /* 2205 */ { MAD_F(0x0701bc03) /* 0.437923443 */, 16 },
2372 /* 2206 */ { MAD_F(0x0702d1b4) /* 0.438188269 */, 16 },
2373 /* 2207 */ { MAD_F(0x0703e76f) /* 0.438453136 */, 16 },
2374
2375 /* 2208 */ { MAD_F(0x0704fd35) /* 0.438718042 */, 16 },
2376 /* 2209 */ { MAD_F(0x07061306) /* 0.438982988 */, 16 },
2377 /* 2210 */ { MAD_F(0x070728e2) /* 0.439247975 */, 16 },
2378 /* 2211 */ { MAD_F(0x07083ec9) /* 0.439513001 */, 16 },
2379 /* 2212 */ { MAD_F(0x070954ba) /* 0.439778067 */, 16 },
2380 /* 2213 */ { MAD_F(0x070a6ab6) /* 0.440043173 */, 16 },
2381 /* 2214 */ { MAD_F(0x070b80bc) /* 0.440308320 */, 16 },
2382 /* 2215 */ { MAD_F(0x070c96ce) /* 0.440573506 */, 16 },
2383 /* 2216 */ { MAD_F(0x070dacea) /* 0.440838732 */, 16 },
2384 /* 2217 */ { MAD_F(0x070ec310) /* 0.441103997 */, 16 },
2385 /* 2218 */ { MAD_F(0x070fd942) /* 0.441369303 */, 16 },
2386 /* 2219 */ { MAD_F(0x0710ef7e) /* 0.441634649 */, 16 },
2387 /* 2220 */ { MAD_F(0x071205c5) /* 0.441900034 */, 16 },
2388 /* 2221 */ { MAD_F(0x07131c17) /* 0.442165460 */, 16 },
2389 /* 2222 */ { MAD_F(0x07143273) /* 0.442430925 */, 16 },
2390 /* 2223 */ { MAD_F(0x071548da) /* 0.442696430 */, 16 },
2391
2392 /* 2224 */ { MAD_F(0x07165f4b) /* 0.442961975 */, 16 },
2393 /* 2225 */ { MAD_F(0x071775c8) /* 0.443227559 */, 16 },
2394 /* 2226 */ { MAD_F(0x07188c4f) /* 0.443493184 */, 16 },
2395 /* 2227 */ { MAD_F(0x0719a2e0) /* 0.443758848 */, 16 },
2396 /* 2228 */ { MAD_F(0x071ab97d) /* 0.444024552 */, 16 },
2397 /* 2229 */ { MAD_F(0x071bd024) /* 0.444290296 */, 16 },
2398 /* 2230 */ { MAD_F(0x071ce6d6) /* 0.444556079 */, 16 },
2399 /* 2231 */ { MAD_F(0x071dfd92) /* 0.444821902 */, 16 },
2400 /* 2232 */ { MAD_F(0x071f1459) /* 0.445087765 */, 16 },
2401 /* 2233 */ { MAD_F(0x07202b2b) /* 0.445353668 */, 16 },
2402 /* 2234 */ { MAD_F(0x07214207) /* 0.445619610 */, 16 },
2403 /* 2235 */ { MAD_F(0x072258ee) /* 0.445885592 */, 16 },
2404 /* 2236 */ { MAD_F(0x07236fe0) /* 0.446151614 */, 16 },
2405 /* 2237 */ { MAD_F(0x072486dc) /* 0.446417675 */, 16 },
2406 /* 2238 */ { MAD_F(0x07259de3) /* 0.446683776 */, 16 },
2407 /* 2239 */ { MAD_F(0x0726b4f4) /* 0.446949917 */, 16 },
2408
2409 /* 2240 */ { MAD_F(0x0727cc11) /* 0.447216097 */, 16 },
2410 /* 2241 */ { MAD_F(0x0728e338) /* 0.447482317 */, 16 },
2411 /* 2242 */ { MAD_F(0x0729fa69) /* 0.447748576 */, 16 },
2412 /* 2243 */ { MAD_F(0x072b11a5) /* 0.448014875 */, 16 },
2413 /* 2244 */ { MAD_F(0x072c28ec) /* 0.448281214 */, 16 },
2414 /* 2245 */ { MAD_F(0x072d403d) /* 0.448547592 */, 16 },
2415 /* 2246 */ { MAD_F(0x072e5799) /* 0.448814010 */, 16 },
2416 /* 2247 */ { MAD_F(0x072f6f00) /* 0.449080467 */, 16 },
2417 /* 2248 */ { MAD_F(0x07308671) /* 0.449346964 */, 16 },
2418 /* 2249 */ { MAD_F(0x07319ded) /* 0.449613501 */, 16 },
2419 /* 2250 */ { MAD_F(0x0732b573) /* 0.449880076 */, 16 },
2420 /* 2251 */ { MAD_F(0x0733cd04) /* 0.450146692 */, 16 },
2421 /* 2252 */ { MAD_F(0x0734e4a0) /* 0.450413347 */, 16 },
2422 /* 2253 */ { MAD_F(0x0735fc46) /* 0.450680041 */, 16 },
2423 /* 2254 */ { MAD_F(0x073713f7) /* 0.450946775 */, 16 },
2424 /* 2255 */ { MAD_F(0x07382bb2) /* 0.451213548 */, 16 },
2425
2426 /* 2256 */ { MAD_F(0x07394378) /* 0.451480360 */, 16 },
2427 /* 2257 */ { MAD_F(0x073a5b49) /* 0.451747213 */, 16 },
2428 /* 2258 */ { MAD_F(0x073b7324) /* 0.452014104 */, 16 },
2429 /* 2259 */ { MAD_F(0x073c8b0a) /* 0.452281035 */, 16 },
2430 /* 2260 */ { MAD_F(0x073da2fa) /* 0.452548005 */, 16 },
2431 /* 2261 */ { MAD_F(0x073ebaf5) /* 0.452815015 */, 16 },
2432 /* 2262 */ { MAD_F(0x073fd2fa) /* 0.453082064 */, 16 },
2433 /* 2263 */ { MAD_F(0x0740eb0a) /* 0.453349152 */, 16 },
2434 /* 2264 */ { MAD_F(0x07420325) /* 0.453616280 */, 16 },
2435 /* 2265 */ { MAD_F(0x07431b4a) /* 0.453883447 */, 16 },
2436 /* 2266 */ { MAD_F(0x0744337a) /* 0.454150653 */, 16 },
2437 /* 2267 */ { MAD_F(0x07454bb4) /* 0.454417899 */, 16 },
2438 /* 2268 */ { MAD_F(0x074663f8) /* 0.454685184 */, 16 },
2439 /* 2269 */ { MAD_F(0x07477c48) /* 0.454952508 */, 16 },
2440 /* 2270 */ { MAD_F(0x074894a2) /* 0.455219872 */, 16 },
2441 /* 2271 */ { MAD_F(0x0749ad06) /* 0.455487275 */, 16 },
2442
2443 /* 2272 */ { MAD_F(0x074ac575) /* 0.455754717 */, 16 },
2444 /* 2273 */ { MAD_F(0x074bddee) /* 0.456022198 */, 16 },
2445 /* 2274 */ { MAD_F(0x074cf672) /* 0.456289719 */, 16 },
2446 /* 2275 */ { MAD_F(0x074e0f01) /* 0.456557278 */, 16 },
2447 /* 2276 */ { MAD_F(0x074f279a) /* 0.456824877 */, 16 },
2448 /* 2277 */ { MAD_F(0x0750403e) /* 0.457092516 */, 16 },
2449 /* 2278 */ { MAD_F(0x075158ec) /* 0.457360193 */, 16 },
2450 /* 2279 */ { MAD_F(0x075271a4) /* 0.457627909 */, 16 },
2451 /* 2280 */ { MAD_F(0x07538a67) /* 0.457895665 */, 16 },
2452 /* 2281 */ { MAD_F(0x0754a335) /* 0.458163460 */, 16 },
2453 /* 2282 */ { MAD_F(0x0755bc0d) /* 0.458431294 */, 16 },
2454 /* 2283 */ { MAD_F(0x0756d4f0) /* 0.458699167 */, 16 },
2455 /* 2284 */ { MAD_F(0x0757eddd) /* 0.458967079 */, 16 },
2456 /* 2285 */ { MAD_F(0x075906d5) /* 0.459235030 */, 16 },
2457 /* 2286 */ { MAD_F(0x075a1fd7) /* 0.459503021 */, 16 },
2458 /* 2287 */ { MAD_F(0x075b38e3) /* 0.459771050 */, 16 },
2459
2460 /* 2288 */ { MAD_F(0x075c51fa) /* 0.460039119 */, 16 },
2461 /* 2289 */ { MAD_F(0x075d6b1c) /* 0.460307226 */, 16 },
2462 /* 2290 */ { MAD_F(0x075e8448) /* 0.460575373 */, 16 },
2463 /* 2291 */ { MAD_F(0x075f9d7f) /* 0.460843559 */, 16 },
2464 /* 2292 */ { MAD_F(0x0760b6c0) /* 0.461111783 */, 16 },
2465 /* 2293 */ { MAD_F(0x0761d00b) /* 0.461380047 */, 16 },
2466 /* 2294 */ { MAD_F(0x0762e961) /* 0.461648350 */, 16 },
2467 /* 2295 */ { MAD_F(0x076402c1) /* 0.461916691 */, 16 },
2468 /* 2296 */ { MAD_F(0x07651c2c) /* 0.462185072 */, 16 },
2469 /* 2297 */ { MAD_F(0x076635a2) /* 0.462453492 */, 16 },
2470 /* 2298 */ { MAD_F(0x07674f22) /* 0.462721950 */, 16 },
2471 /* 2299 */ { MAD_F(0x076868ac) /* 0.462990448 */, 16 },
2472 /* 2300 */ { MAD_F(0x07698240) /* 0.463258984 */, 16 },
2473 /* 2301 */ { MAD_F(0x076a9be0) /* 0.463527560 */, 16 },
2474 /* 2302 */ { MAD_F(0x076bb589) /* 0.463796174 */, 16 },
2475 /* 2303 */ { MAD_F(0x076ccf3d) /* 0.464064827 */, 16 },
2476
2477 /* 2304 */ { MAD_F(0x076de8fc) /* 0.464333519 */, 16 },
2478 /* 2305 */ { MAD_F(0x076f02c5) /* 0.464602250 */, 16 },
2479 /* 2306 */ { MAD_F(0x07701c98) /* 0.464871020 */, 16 },
2480 /* 2307 */ { MAD_F(0x07713676) /* 0.465139829 */, 16 },
2481 /* 2308 */ { MAD_F(0x0772505e) /* 0.465408676 */, 16 },
2482 /* 2309 */ { MAD_F(0x07736a51) /* 0.465677563 */, 16 },
2483 /* 2310 */ { MAD_F(0x0774844e) /* 0.465946488 */, 16 },
2484 /* 2311 */ { MAD_F(0x07759e55) /* 0.466215452 */, 16 },
2485 /* 2312 */ { MAD_F(0x0776b867) /* 0.466484455 */, 16 },
2486 /* 2313 */ { MAD_F(0x0777d283) /* 0.466753496 */, 16 },
2487 /* 2314 */ { MAD_F(0x0778ecaa) /* 0.467022577 */, 16 },
2488 /* 2315 */ { MAD_F(0x077a06db) /* 0.467291696 */, 16 },
2489 /* 2316 */ { MAD_F(0x077b2117) /* 0.467560854 */, 16 },
2490 /* 2317 */ { MAD_F(0x077c3b5d) /* 0.467830050 */, 16 },
2491 /* 2318 */ { MAD_F(0x077d55ad) /* 0.468099285 */, 16 },
2492 /* 2319 */ { MAD_F(0x077e7008) /* 0.468368560 */, 16 },
2493
2494 /* 2320 */ { MAD_F(0x077f8a6d) /* 0.468637872 */, 16 },
2495 /* 2321 */ { MAD_F(0x0780a4dc) /* 0.468907224 */, 16 },
2496 /* 2322 */ { MAD_F(0x0781bf56) /* 0.469176614 */, 16 },
2497 /* 2323 */ { MAD_F(0x0782d9da) /* 0.469446043 */, 16 },
2498 /* 2324 */ { MAD_F(0x0783f469) /* 0.469715510 */, 16 },
2499 /* 2325 */ { MAD_F(0x07850f02) /* 0.469985016 */, 16 },
2500 /* 2326 */ { MAD_F(0x078629a5) /* 0.470254561 */, 16 },
2501 /* 2327 */ { MAD_F(0x07874453) /* 0.470524145 */, 16 },
2502 /* 2328 */ { MAD_F(0x07885f0b) /* 0.470793767 */, 16 },
2503 /* 2329 */ { MAD_F(0x078979ce) /* 0.471063427 */, 16 },
2504 /* 2330 */ { MAD_F(0x078a949a) /* 0.471333126 */, 16 },
2505 /* 2331 */ { MAD_F(0x078baf72) /* 0.471602864 */, 16 },
2506 /* 2332 */ { MAD_F(0x078cca53) /* 0.471872641 */, 16 },
2507 /* 2333 */ { MAD_F(0x078de53f) /* 0.472142456 */, 16 },
2508 /* 2334 */ { MAD_F(0x078f0035) /* 0.472412309 */, 16 },
2509 /* 2335 */ { MAD_F(0x07901b36) /* 0.472682201 */, 16 },
2510
2511 /* 2336 */ { MAD_F(0x07913641) /* 0.472952132 */, 16 },
2512 /* 2337 */ { MAD_F(0x07925156) /* 0.473222101 */, 16 },
2513 /* 2338 */ { MAD_F(0x07936c76) /* 0.473492108 */, 16 },
2514 /* 2339 */ { MAD_F(0x079487a0) /* 0.473762155 */, 16 },
2515 /* 2340 */ { MAD_F(0x0795a2d4) /* 0.474032239 */, 16 },
2516 /* 2341 */ { MAD_F(0x0796be13) /* 0.474302362 */, 16 },
2517 /* 2342 */ { MAD_F(0x0797d95c) /* 0.474572524 */, 16 },
2518 /* 2343 */ { MAD_F(0x0798f4af) /* 0.474842724 */, 16 },
2519 /* 2344 */ { MAD_F(0x079a100c) /* 0.475112962 */, 16 },
2520 /* 2345 */ { MAD_F(0x079b2b74) /* 0.475383239 */, 16 },
2521 /* 2346 */ { MAD_F(0x079c46e7) /* 0.475653554 */, 16 },
2522 /* 2347 */ { MAD_F(0x079d6263) /* 0.475923908 */, 16 },
2523 /* 2348 */ { MAD_F(0x079e7dea) /* 0.476194300 */, 16 },
2524 /* 2349 */ { MAD_F(0x079f997b) /* 0.476464731 */, 16 },
2525 /* 2350 */ { MAD_F(0x07a0b516) /* 0.476735200 */, 16 },
2526 /* 2351 */ { MAD_F(0x07a1d0bc) /* 0.477005707 */, 16 },
2527
2528 /* 2352 */ { MAD_F(0x07a2ec6c) /* 0.477276252 */, 16 },
2529 /* 2353 */ { MAD_F(0x07a40827) /* 0.477546836 */, 16 },
2530 /* 2354 */ { MAD_F(0x07a523eb) /* 0.477817459 */, 16 },
2531 /* 2355 */ { MAD_F(0x07a63fba) /* 0.478088119 */, 16 },
2532 /* 2356 */ { MAD_F(0x07a75b93) /* 0.478358818 */, 16 },
2533 /* 2357 */ { MAD_F(0x07a87777) /* 0.478629555 */, 16 },
2534 /* 2358 */ { MAD_F(0x07a99364) /* 0.478900331 */, 16 },
2535 /* 2359 */ { MAD_F(0x07aaaf5c) /* 0.479171145 */, 16 },
2536 /* 2360 */ { MAD_F(0x07abcb5f) /* 0.479441997 */, 16 },
2537 /* 2361 */ { MAD_F(0x07ace76b) /* 0.479712887 */, 16 },
2538 /* 2362 */ { MAD_F(0x07ae0382) /* 0.479983816 */, 16 },
2539 /* 2363 */ { MAD_F(0x07af1fa3) /* 0.480254782 */, 16 },
2540 /* 2364 */ { MAD_F(0x07b03bcf) /* 0.480525787 */, 16 },
2541 /* 2365 */ { MAD_F(0x07b15804) /* 0.480796831 */, 16 },
2542 /* 2366 */ { MAD_F(0x07b27444) /* 0.481067912 */, 16 },
2543 /* 2367 */ { MAD_F(0x07b3908e) /* 0.481339032 */, 16 },
2544
2545 /* 2368 */ { MAD_F(0x07b4ace3) /* 0.481610189 */, 16 },
2546 /* 2369 */ { MAD_F(0x07b5c941) /* 0.481881385 */, 16 },
2547 /* 2370 */ { MAD_F(0x07b6e5aa) /* 0.482152620 */, 16 },
2548 /* 2371 */ { MAD_F(0x07b8021d) /* 0.482423892 */, 16 },
2549 /* 2372 */ { MAD_F(0x07b91e9b) /* 0.482695202 */, 16 },
2550 /* 2373 */ { MAD_F(0x07ba3b22) /* 0.482966551 */, 16 },
2551 /* 2374 */ { MAD_F(0x07bb57b4) /* 0.483237938 */, 16 },
2552 /* 2375 */ { MAD_F(0x07bc7450) /* 0.483509362 */, 16 },
2553 /* 2376 */ { MAD_F(0x07bd90f6) /* 0.483780825 */, 16 },
2554 /* 2377 */ { MAD_F(0x07beada7) /* 0.484052326 */, 16 },
2555 /* 2378 */ { MAD_F(0x07bfca61) /* 0.484323865 */, 16 },
2556 /* 2379 */ { MAD_F(0x07c0e726) /* 0.484595443 */, 16 },
2557 /* 2380 */ { MAD_F(0x07c203f5) /* 0.484867058 */, 16 },
2558 /* 2381 */ { MAD_F(0x07c320cf) /* 0.485138711 */, 16 },
2559 /* 2382 */ { MAD_F(0x07c43db2) /* 0.485410402 */, 16 },
2560 /* 2383 */ { MAD_F(0x07c55aa0) /* 0.485682131 */, 16 },
2561
2562 /* 2384 */ { MAD_F(0x07c67798) /* 0.485953899 */, 16 },
2563 /* 2385 */ { MAD_F(0x07c7949a) /* 0.486225704 */, 16 },
2564 /* 2386 */ { MAD_F(0x07c8b1a7) /* 0.486497547 */, 16 },
2565 /* 2387 */ { MAD_F(0x07c9cebd) /* 0.486769429 */, 16 },
2566 /* 2388 */ { MAD_F(0x07caebde) /* 0.487041348 */, 16 },
2567 /* 2389 */ { MAD_F(0x07cc0909) /* 0.487313305 */, 16 },
2568 /* 2390 */ { MAD_F(0x07cd263e) /* 0.487585300 */, 16 },
2569 /* 2391 */ { MAD_F(0x07ce437d) /* 0.487857333 */, 16 },
2570 /* 2392 */ { MAD_F(0x07cf60c7) /* 0.488129404 */, 16 },
2571 /* 2393 */ { MAD_F(0x07d07e1b) /* 0.488401513 */, 16 },
2572 /* 2394 */ { MAD_F(0x07d19b79) /* 0.488673660 */, 16 },
2573 /* 2395 */ { MAD_F(0x07d2b8e1) /* 0.488945845 */, 16 },
2574 /* 2396 */ { MAD_F(0x07d3d653) /* 0.489218067 */, 16 },
2575 /* 2397 */ { MAD_F(0x07d4f3cf) /* 0.489490328 */, 16 },
2576 /* 2398 */ { MAD_F(0x07d61156) /* 0.489762626 */, 16 },
2577 /* 2399 */ { MAD_F(0x07d72ee6) /* 0.490034962 */, 16 },
2578
2579 /* 2400 */ { MAD_F(0x07d84c81) /* 0.490307336 */, 16 },
2580 /* 2401 */ { MAD_F(0x07d96a26) /* 0.490579748 */, 16 },
2581 /* 2402 */ { MAD_F(0x07da87d5) /* 0.490852198 */, 16 },
2582 /* 2403 */ { MAD_F(0x07dba58f) /* 0.491124686 */, 16 },
2583 /* 2404 */ { MAD_F(0x07dcc352) /* 0.491397211 */, 16 },
2584 /* 2405 */ { MAD_F(0x07dde120) /* 0.491669774 */, 16 },
2585 /* 2406 */ { MAD_F(0x07defef7) /* 0.491942375 */, 16 },
2586 /* 2407 */ { MAD_F(0x07e01cd9) /* 0.492215014 */, 16 },
2587 /* 2408 */ { MAD_F(0x07e13ac5) /* 0.492487690 */, 16 },
2588 /* 2409 */ { MAD_F(0x07e258bc) /* 0.492760404 */, 16 },
2589 /* 2410 */ { MAD_F(0x07e376bc) /* 0.493033156 */, 16 },
2590 /* 2411 */ { MAD_F(0x07e494c6) /* 0.493305946 */, 16 },
2591 /* 2412 */ { MAD_F(0x07e5b2db) /* 0.493578773 */, 16 },
2592 /* 2413 */ { MAD_F(0x07e6d0f9) /* 0.493851638 */, 16 },
2593 /* 2414 */ { MAD_F(0x07e7ef22) /* 0.494124541 */, 16 },
2594 /* 2415 */ { MAD_F(0x07e90d55) /* 0.494397481 */, 16 },
2595
2596 /* 2416 */ { MAD_F(0x07ea2b92) /* 0.494670459 */, 16 },
2597 /* 2417 */ { MAD_F(0x07eb49d9) /* 0.494943475 */, 16 },
2598 /* 2418 */ { MAD_F(0x07ec682a) /* 0.495216529 */, 16 },
2599 /* 2419 */ { MAD_F(0x07ed8686) /* 0.495489620 */, 16 },
2600 /* 2420 */ { MAD_F(0x07eea4eb) /* 0.495762748 */, 16 },
2601 /* 2421 */ { MAD_F(0x07efc35b) /* 0.496035915 */, 16 },
2602 /* 2422 */ { MAD_F(0x07f0e1d4) /* 0.496309119 */, 16 },
2603 /* 2423 */ { MAD_F(0x07f20058) /* 0.496582360 */, 16 },
2604 /* 2424 */ { MAD_F(0x07f31ee6) /* 0.496855639 */, 16 },
2605 /* 2425 */ { MAD_F(0x07f43d7e) /* 0.497128956 */, 16 },
2606 /* 2426 */ { MAD_F(0x07f55c20) /* 0.497402310 */, 16 },
2607 /* 2427 */ { MAD_F(0x07f67acc) /* 0.497675702 */, 16 },
2608 /* 2428 */ { MAD_F(0x07f79982) /* 0.497949132 */, 16 },
2609 /* 2429 */ { MAD_F(0x07f8b842) /* 0.498222598 */, 16 },
2610 /* 2430 */ { MAD_F(0x07f9d70c) /* 0.498496103 */, 16 },
2611 /* 2431 */ { MAD_F(0x07faf5e1) /* 0.498769645 */, 16 },
2612
2613 /* 2432 */ { MAD_F(0x07fc14bf) /* 0.499043224 */, 16 },
2614 /* 2433 */ { MAD_F(0x07fd33a8) /* 0.499316841 */, 16 },
2615 /* 2434 */ { MAD_F(0x07fe529a) /* 0.499590496 */, 16 },
2616 /* 2435 */ { MAD_F(0x07ff7197) /* 0.499864188 */, 16 },
2617 /* 2436 */ { MAD_F(0x0400484f) /* 0.250068959 */, 17 },
2618 /* 2437 */ { MAD_F(0x0400d7d7) /* 0.250205842 */, 17 },
2619 /* 2438 */ { MAD_F(0x04016764) /* 0.250342744 */, 17 },
2620 /* 2439 */ { MAD_F(0x0401f6f7) /* 0.250479665 */, 17 },
2621 /* 2440 */ { MAD_F(0x0402868e) /* 0.250616605 */, 17 },
2622 /* 2441 */ { MAD_F(0x0403162b) /* 0.250753563 */, 17 },
2623 /* 2442 */ { MAD_F(0x0403a5cc) /* 0.250890540 */, 17 },
2624 /* 2443 */ { MAD_F(0x04043573) /* 0.251027536 */, 17 },
2625 /* 2444 */ { MAD_F(0x0404c51e) /* 0.251164550 */, 17 },
2626 /* 2445 */ { MAD_F(0x040554cf) /* 0.251301583 */, 17 },
2627 /* 2446 */ { MAD_F(0x0405e484) /* 0.251438635 */, 17 },
2628 /* 2447 */ { MAD_F(0x0406743f) /* 0.251575706 */, 17 },
2629
2630 /* 2448 */ { MAD_F(0x040703ff) /* 0.251712795 */, 17 },
2631 /* 2449 */ { MAD_F(0x040793c3) /* 0.251849903 */, 17 },
2632 /* 2450 */ { MAD_F(0x0408238d) /* 0.251987029 */, 17 },
2633 /* 2451 */ { MAD_F(0x0408b35b) /* 0.252124174 */, 17 },
2634 /* 2452 */ { MAD_F(0x0409432f) /* 0.252261338 */, 17 },
2635 /* 2453 */ { MAD_F(0x0409d308) /* 0.252398520 */, 17 },
2636 /* 2454 */ { MAD_F(0x040a62e5) /* 0.252535721 */, 17 },
2637 /* 2455 */ { MAD_F(0x040af2c8) /* 0.252672941 */, 17 },
2638 /* 2456 */ { MAD_F(0x040b82b0) /* 0.252810180 */, 17 },
2639 /* 2457 */ { MAD_F(0x040c129c) /* 0.252947436 */, 17 },
2640 /* 2458 */ { MAD_F(0x040ca28e) /* 0.253084712 */, 17 },
2641 /* 2459 */ { MAD_F(0x040d3284) /* 0.253222006 */, 17 },
2642 /* 2460 */ { MAD_F(0x040dc280) /* 0.253359319 */, 17 },
2643 /* 2461 */ { MAD_F(0x040e5281) /* 0.253496651 */, 17 },
2644 /* 2462 */ { MAD_F(0x040ee286) /* 0.253634001 */, 17 },
2645 /* 2463 */ { MAD_F(0x040f7291) /* 0.253771369 */, 17 },
2646
2647 /* 2464 */ { MAD_F(0x041002a1) /* 0.253908756 */, 17 },
2648 /* 2465 */ { MAD_F(0x041092b5) /* 0.254046162 */, 17 },
2649 /* 2466 */ { MAD_F(0x041122cf) /* 0.254183587 */, 17 },
2650 /* 2467 */ { MAD_F(0x0411b2ed) /* 0.254321030 */, 17 },
2651 /* 2468 */ { MAD_F(0x04124311) /* 0.254458491 */, 17 },
2652 /* 2469 */ { MAD_F(0x0412d339) /* 0.254595971 */, 17 },
2653 /* 2470 */ { MAD_F(0x04136367) /* 0.254733470 */, 17 },
2654 /* 2471 */ { MAD_F(0x0413f399) /* 0.254870987 */, 17 },
2655 /* 2472 */ { MAD_F(0x041483d1) /* 0.255008523 */, 17 },
2656 /* 2473 */ { MAD_F(0x0415140d) /* 0.255146077 */, 17 },
2657 /* 2474 */ { MAD_F(0x0415a44f) /* 0.255283650 */, 17 },
2658 /* 2475 */ { MAD_F(0x04163495) /* 0.255421241 */, 17 },
2659 /* 2476 */ { MAD_F(0x0416c4e1) /* 0.255558851 */, 17 },
2660 /* 2477 */ { MAD_F(0x04175531) /* 0.255696480 */, 17 },
2661 /* 2478 */ { MAD_F(0x0417e586) /* 0.255834127 */, 17 },
2662 /* 2479 */ { MAD_F(0x041875e1) /* 0.255971792 */, 17 },
2663
2664 /* 2480 */ { MAD_F(0x04190640) /* 0.256109476 */, 17 },
2665 /* 2481 */ { MAD_F(0x041996a4) /* 0.256247179 */, 17 },
2666 /* 2482 */ { MAD_F(0x041a270d) /* 0.256384900 */, 17 },
2667 /* 2483 */ { MAD_F(0x041ab77b) /* 0.256522639 */, 17 },
2668 /* 2484 */ { MAD_F(0x041b47ef) /* 0.256660397 */, 17 },
2669 /* 2485 */ { MAD_F(0x041bd867) /* 0.256798174 */, 17 },
2670 /* 2486 */ { MAD_F(0x041c68e4) /* 0.256935969 */, 17 },
2671 /* 2487 */ { MAD_F(0x041cf966) /* 0.257073782 */, 17 },
2672 /* 2488 */ { MAD_F(0x041d89ed) /* 0.257211614 */, 17 },
2673 /* 2489 */ { MAD_F(0x041e1a79) /* 0.257349465 */, 17 },
2674 /* 2490 */ { MAD_F(0x041eab0a) /* 0.257487334 */, 17 },
2675 /* 2491 */ { MAD_F(0x041f3b9f) /* 0.257625221 */, 17 },
2676 /* 2492 */ { MAD_F(0x041fcc3a) /* 0.257763127 */, 17 },
2677 /* 2493 */ { MAD_F(0x04205cda) /* 0.257901051 */, 17 },
2678 /* 2494 */ { MAD_F(0x0420ed7f) /* 0.258038994 */, 17 },
2679 /* 2495 */ { MAD_F(0x04217e28) /* 0.258176955 */, 17 },
2680
2681 /* 2496 */ { MAD_F(0x04220ed7) /* 0.258314934 */, 17 },
2682 /* 2497 */ { MAD_F(0x04229f8a) /* 0.258452932 */, 17 },
2683 /* 2498 */ { MAD_F(0x04233043) /* 0.258590948 */, 17 },
2684 /* 2499 */ { MAD_F(0x0423c100) /* 0.258728983 */, 17 },
2685 /* 2500 */ { MAD_F(0x042451c3) /* 0.258867036 */, 17 },
2686 /* 2501 */ { MAD_F(0x0424e28a) /* 0.259005108 */, 17 },
2687 /* 2502 */ { MAD_F(0x04257356) /* 0.259143198 */, 17 },
2688 /* 2503 */ { MAD_F(0x04260428) /* 0.259281307 */, 17 },
2689 /* 2504 */ { MAD_F(0x042694fe) /* 0.259419433 */, 17 },
2690 /* 2505 */ { MAD_F(0x042725d9) /* 0.259557579 */, 17 },
2691 /* 2506 */ { MAD_F(0x0427b6b9) /* 0.259695742 */, 17 },
2692 /* 2507 */ { MAD_F(0x0428479e) /* 0.259833924 */, 17 },
2693 /* 2508 */ { MAD_F(0x0428d888) /* 0.259972124 */, 17 },
2694 /* 2509 */ { MAD_F(0x04296976) /* 0.260110343 */, 17 },
2695 /* 2510 */ { MAD_F(0x0429fa6a) /* 0.260248580 */, 17 },
2696 /* 2511 */ { MAD_F(0x042a8b63) /* 0.260386836 */, 17 },
2697
2698 /* 2512 */ { MAD_F(0x042b1c60) /* 0.260525110 */, 17 },
2699 /* 2513 */ { MAD_F(0x042bad63) /* 0.260663402 */, 17 },
2700 /* 2514 */ { MAD_F(0x042c3e6a) /* 0.260801712 */, 17 },
2701 /* 2515 */ { MAD_F(0x042ccf77) /* 0.260940041 */, 17 },
2702 /* 2516 */ { MAD_F(0x042d6088) /* 0.261078388 */, 17 },
2703 /* 2517 */ { MAD_F(0x042df19e) /* 0.261216754 */, 17 },
2704 /* 2518 */ { MAD_F(0x042e82b9) /* 0.261355137 */, 17 },
2705 /* 2519 */ { MAD_F(0x042f13d9) /* 0.261493540 */, 17 },
2706 /* 2520 */ { MAD_F(0x042fa4fe) /* 0.261631960 */, 17 },
2707 /* 2521 */ { MAD_F(0x04303628) /* 0.261770399 */, 17 },
2708 /* 2522 */ { MAD_F(0x0430c757) /* 0.261908856 */, 17 },
2709 /* 2523 */ { MAD_F(0x0431588b) /* 0.262047331 */, 17 },
2710 /* 2524 */ { MAD_F(0x0431e9c3) /* 0.262185825 */, 17 },
2711 /* 2525 */ { MAD_F(0x04327b01) /* 0.262324337 */, 17 },
2712 /* 2526 */ { MAD_F(0x04330c43) /* 0.262462867 */, 17 },
2713 /* 2527 */ { MAD_F(0x04339d8a) /* 0.262601416 */, 17 },
2714
2715 /* 2528 */ { MAD_F(0x04342ed7) /* 0.262739982 */, 17 },
2716 /* 2529 */ { MAD_F(0x0434c028) /* 0.262878568 */, 17 },
2717 /* 2530 */ { MAD_F(0x0435517e) /* 0.263017171 */, 17 },
2718 /* 2531 */ { MAD_F(0x0435e2d9) /* 0.263155792 */, 17 },
2719 /* 2532 */ { MAD_F(0x04367439) /* 0.263294432 */, 17 },
2720 /* 2533 */ { MAD_F(0x0437059e) /* 0.263433090 */, 17 },
2721 /* 2534 */ { MAD_F(0x04379707) /* 0.263571767 */, 17 },
2722 /* 2535 */ { MAD_F(0x04382876) /* 0.263710461 */, 17 },
2723 /* 2536 */ { MAD_F(0x0438b9e9) /* 0.263849174 */, 17 },
2724 /* 2537 */ { MAD_F(0x04394b61) /* 0.263987905 */, 17 },
2725 /* 2538 */ { MAD_F(0x0439dcdf) /* 0.264126655 */, 17 },
2726 /* 2539 */ { MAD_F(0x043a6e61) /* 0.264265422 */, 17 },
2727 /* 2540 */ { MAD_F(0x043affe8) /* 0.264404208 */, 17 },
2728 /* 2541 */ { MAD_F(0x043b9174) /* 0.264543012 */, 17 },
2729 /* 2542 */ { MAD_F(0x043c2305) /* 0.264681834 */, 17 },
2730 /* 2543 */ { MAD_F(0x043cb49a) /* 0.264820674 */, 17 },
2731
2732 /* 2544 */ { MAD_F(0x043d4635) /* 0.264959533 */, 17 },
2733 /* 2545 */ { MAD_F(0x043dd7d4) /* 0.265098410 */, 17 },
2734 /* 2546 */ { MAD_F(0x043e6979) /* 0.265237305 */, 17 },
2735 /* 2547 */ { MAD_F(0x043efb22) /* 0.265376218 */, 17 },
2736 /* 2548 */ { MAD_F(0x043f8cd0) /* 0.265515149 */, 17 },
2737 /* 2549 */ { MAD_F(0x04401e83) /* 0.265654099 */, 17 },
2738 /* 2550 */ { MAD_F(0x0440b03b) /* 0.265793066 */, 17 },
2739 /* 2551 */ { MAD_F(0x044141f7) /* 0.265932052 */, 17 },
2740 /* 2552 */ { MAD_F(0x0441d3b9) /* 0.266071056 */, 17 },
2741 /* 2553 */ { MAD_F(0x04426580) /* 0.266210078 */, 17 },
2742 /* 2554 */ { MAD_F(0x0442f74b) /* 0.266349119 */, 17 },
2743 /* 2555 */ { MAD_F(0x0443891b) /* 0.266488177 */, 17 },
2744 /* 2556 */ { MAD_F(0x04441af0) /* 0.266627254 */, 17 },
2745 /* 2557 */ { MAD_F(0x0444acca) /* 0.266766349 */, 17 },
2746 /* 2558 */ { MAD_F(0x04453ea9) /* 0.266905462 */, 17 },
2747 /* 2559 */ { MAD_F(0x0445d08d) /* 0.267044593 */, 17 },
2748
2749 /* 2560 */ { MAD_F(0x04466275) /* 0.267183742 */, 17 },
2750 /* 2561 */ { MAD_F(0x0446f463) /* 0.267322909 */, 17 },
2751 /* 2562 */ { MAD_F(0x04478655) /* 0.267462094 */, 17 },
2752 /* 2563 */ { MAD_F(0x0448184c) /* 0.267601298 */, 17 },
2753 /* 2564 */ { MAD_F(0x0448aa48) /* 0.267740519 */, 17 },
2754 /* 2565 */ { MAD_F(0x04493c49) /* 0.267879759 */, 17 },
2755 /* 2566 */ { MAD_F(0x0449ce4f) /* 0.268019017 */, 17 },
2756 /* 2567 */ { MAD_F(0x044a6059) /* 0.268158293 */, 17 },
2757 /* 2568 */ { MAD_F(0x044af269) /* 0.268297587 */, 17 },
2758 /* 2569 */ { MAD_F(0x044b847d) /* 0.268436899 */, 17 },
2759 /* 2570 */ { MAD_F(0x044c1696) /* 0.268576229 */, 17 },
2760 /* 2571 */ { MAD_F(0x044ca8b4) /* 0.268715577 */, 17 },
2761 /* 2572 */ { MAD_F(0x044d3ad7) /* 0.268854943 */, 17 },
2762 /* 2573 */ { MAD_F(0x044dccff) /* 0.268994328 */, 17 },
2763 /* 2574 */ { MAD_F(0x044e5f2b) /* 0.269133730 */, 17 },
2764 /* 2575 */ { MAD_F(0x044ef15d) /* 0.269273150 */, 17 },
2765
2766 /* 2576 */ { MAD_F(0x044f8393) /* 0.269412589 */, 17 },
2767 /* 2577 */ { MAD_F(0x045015ce) /* 0.269552045 */, 17 },
2768 /* 2578 */ { MAD_F(0x0450a80e) /* 0.269691520 */, 17 },
2769 /* 2579 */ { MAD_F(0x04513a53) /* 0.269831013 */, 17 },
2770 /* 2580 */ { MAD_F(0x0451cc9c) /* 0.269970523 */, 17 },
2771 /* 2581 */ { MAD_F(0x04525eeb) /* 0.270110052 */, 17 },
2772 /* 2582 */ { MAD_F(0x0452f13e) /* 0.270249599 */, 17 },
2773 /* 2583 */ { MAD_F(0x04538396) /* 0.270389163 */, 17 },
2774 /* 2584 */ { MAD_F(0x045415f3) /* 0.270528746 */, 17 },
2775 /* 2585 */ { MAD_F(0x0454a855) /* 0.270668347 */, 17 },
2776 /* 2586 */ { MAD_F(0x04553abb) /* 0.270807965 */, 17 },
2777 /* 2587 */ { MAD_F(0x0455cd27) /* 0.270947602 */, 17 },
2778 /* 2588 */ { MAD_F(0x04565f97) /* 0.271087257 */, 17 },
2779 /* 2589 */ { MAD_F(0x0456f20c) /* 0.271226930 */, 17 },
2780 /* 2590 */ { MAD_F(0x04578486) /* 0.271366620 */, 17 },
2781 /* 2591 */ { MAD_F(0x04581705) /* 0.271506329 */, 17 },
2782
2783 /* 2592 */ { MAD_F(0x0458a989) /* 0.271646056 */, 17 },
2784 /* 2593 */ { MAD_F(0x04593c11) /* 0.271785800 */, 17 },
2785 /* 2594 */ { MAD_F(0x0459ce9e) /* 0.271925563 */, 17 },
2786 /* 2595 */ { MAD_F(0x045a6130) /* 0.272065343 */, 17 },
2787 /* 2596 */ { MAD_F(0x045af3c7) /* 0.272205142 */, 17 },
2788 /* 2597 */ { MAD_F(0x045b8663) /* 0.272344958 */, 17 },
2789 /* 2598 */ { MAD_F(0x045c1903) /* 0.272484793 */, 17 },
2790 /* 2599 */ { MAD_F(0x045caba9) /* 0.272624645 */, 17 },
2791 /* 2600 */ { MAD_F(0x045d3e53) /* 0.272764515 */, 17 },
2792 /* 2601 */ { MAD_F(0x045dd102) /* 0.272904403 */, 17 },
2793 /* 2602 */ { MAD_F(0x045e63b6) /* 0.273044310 */, 17 },
2794 /* 2603 */ { MAD_F(0x045ef66e) /* 0.273184234 */, 17 },
2795 /* 2604 */ { MAD_F(0x045f892b) /* 0.273324176 */, 17 },
2796 /* 2605 */ { MAD_F(0x04601bee) /* 0.273464136 */, 17 },
2797 /* 2606 */ { MAD_F(0x0460aeb5) /* 0.273604113 */, 17 },
2798 /* 2607 */ { MAD_F(0x04614180) /* 0.273744109 */, 17 },
2799
2800 /* 2608 */ { MAD_F(0x0461d451) /* 0.273884123 */, 17 },
2801 /* 2609 */ { MAD_F(0x04626727) /* 0.274024154 */, 17 },
2802 /* 2610 */ { MAD_F(0x0462fa01) /* 0.274164204 */, 17 },
2803 /* 2611 */ { MAD_F(0x04638ce0) /* 0.274304271 */, 17 },
2804 /* 2612 */ { MAD_F(0x04641fc4) /* 0.274444356 */, 17 },
2805 /* 2613 */ { MAD_F(0x0464b2ac) /* 0.274584459 */, 17 },
2806 /* 2614 */ { MAD_F(0x0465459a) /* 0.274724580 */, 17 },
2807 /* 2615 */ { MAD_F(0x0465d88c) /* 0.274864719 */, 17 },
2808 /* 2616 */ { MAD_F(0x04666b83) /* 0.275004875 */, 17 },
2809 /* 2617 */ { MAD_F(0x0466fe7f) /* 0.275145050 */, 17 },
2810 /* 2618 */ { MAD_F(0x0467917f) /* 0.275285242 */, 17 },
2811 /* 2619 */ { MAD_F(0x04682485) /* 0.275425452 */, 17 },
2812 /* 2620 */ { MAD_F(0x0468b78f) /* 0.275565681 */, 17 },
2813 /* 2621 */ { MAD_F(0x04694a9e) /* 0.275705926 */, 17 },
2814 /* 2622 */ { MAD_F(0x0469ddb2) /* 0.275846190 */, 17 },
2815 /* 2623 */ { MAD_F(0x046a70ca) /* 0.275986472 */, 17 },
2816
2817 /* 2624 */ { MAD_F(0x046b03e7) /* 0.276126771 */, 17 },
2818 /* 2625 */ { MAD_F(0x046b970a) /* 0.276267088 */, 17 },
2819 /* 2626 */ { MAD_F(0x046c2a31) /* 0.276407423 */, 17 },
2820 /* 2627 */ { MAD_F(0x046cbd5c) /* 0.276547776 */, 17 },
2821 /* 2628 */ { MAD_F(0x046d508d) /* 0.276688147 */, 17 },
2822 /* 2629 */ { MAD_F(0x046de3c2) /* 0.276828535 */, 17 },
2823 /* 2630 */ { MAD_F(0x046e76fc) /* 0.276968942 */, 17 },
2824 /* 2631 */ { MAD_F(0x046f0a3b) /* 0.277109366 */, 17 },
2825 /* 2632 */ { MAD_F(0x046f9d7e) /* 0.277249808 */, 17 },
2826 /* 2633 */ { MAD_F(0x047030c7) /* 0.277390267 */, 17 },
2827 /* 2634 */ { MAD_F(0x0470c414) /* 0.277530745 */, 17 },
2828 /* 2635 */ { MAD_F(0x04715766) /* 0.277671240 */, 17 },
2829 /* 2636 */ { MAD_F(0x0471eabc) /* 0.277811753 */, 17 },
2830 /* 2637 */ { MAD_F(0x04727e18) /* 0.277952284 */, 17 },
2831 /* 2638 */ { MAD_F(0x04731178) /* 0.278092832 */, 17 },
2832 /* 2639 */ { MAD_F(0x0473a4dd) /* 0.278233399 */, 17 },
2833
2834 /* 2640 */ { MAD_F(0x04743847) /* 0.278373983 */, 17 },
2835 /* 2641 */ { MAD_F(0x0474cbb5) /* 0.278514584 */, 17 },
2836 /* 2642 */ { MAD_F(0x04755f29) /* 0.278655204 */, 17 },
2837 /* 2643 */ { MAD_F(0x0475f2a1) /* 0.278795841 */, 17 },
2838 /* 2644 */ { MAD_F(0x0476861d) /* 0.278936496 */, 17 },
2839 /* 2645 */ { MAD_F(0x0477199f) /* 0.279077169 */, 17 },
2840 /* 2646 */ { MAD_F(0x0477ad25) /* 0.279217860 */, 17 },
2841 /* 2647 */ { MAD_F(0x047840b0) /* 0.279358568 */, 17 },
2842 /* 2648 */ { MAD_F(0x0478d440) /* 0.279499294 */, 17 },
2843 /* 2649 */ { MAD_F(0x047967d5) /* 0.279640037 */, 17 },
2844 /* 2650 */ { MAD_F(0x0479fb6e) /* 0.279780799 */, 17 },
2845 /* 2651 */ { MAD_F(0x047a8f0c) /* 0.279921578 */, 17 },
2846 /* 2652 */ { MAD_F(0x047b22af) /* 0.280062375 */, 17 },
2847 /* 2653 */ { MAD_F(0x047bb657) /* 0.280203189 */, 17 },
2848 /* 2654 */ { MAD_F(0x047c4a03) /* 0.280344021 */, 17 },
2849 /* 2655 */ { MAD_F(0x047cddb4) /* 0.280484871 */, 17 },
2850
2851 /* 2656 */ { MAD_F(0x047d716a) /* 0.280625739 */, 17 },
2852 /* 2657 */ { MAD_F(0x047e0524) /* 0.280766624 */, 17 },
2853 /* 2658 */ { MAD_F(0x047e98e4) /* 0.280907527 */, 17 },
2854 /* 2659 */ { MAD_F(0x047f2ca8) /* 0.281048447 */, 17 },
2855 /* 2660 */ { MAD_F(0x047fc071) /* 0.281189385 */, 17 },
2856 /* 2661 */ { MAD_F(0x0480543e) /* 0.281330341 */, 17 },
2857 /* 2662 */ { MAD_F(0x0480e811) /* 0.281471315 */, 17 },
2858 /* 2663 */ { MAD_F(0x04817be8) /* 0.281612306 */, 17 },
2859 /* 2664 */ { MAD_F(0x04820fc3) /* 0.281753315 */, 17 },
2860 /* 2665 */ { MAD_F(0x0482a3a4) /* 0.281894341 */, 17 },
2861 /* 2666 */ { MAD_F(0x04833789) /* 0.282035386 */, 17 },
2862 /* 2667 */ { MAD_F(0x0483cb73) /* 0.282176447 */, 17 },
2863 /* 2668 */ { MAD_F(0x04845f62) /* 0.282317527 */, 17 },
2864 /* 2669 */ { MAD_F(0x0484f355) /* 0.282458624 */, 17 },
2865 /* 2670 */ { MAD_F(0x0485874d) /* 0.282599738 */, 17 },
2866 /* 2671 */ { MAD_F(0x04861b4a) /* 0.282740871 */, 17 },
2867
2868 /* 2672 */ { MAD_F(0x0486af4c) /* 0.282882021 */, 17 },
2869 /* 2673 */ { MAD_F(0x04874352) /* 0.283023188 */, 17 },
2870 /* 2674 */ { MAD_F(0x0487d75d) /* 0.283164373 */, 17 },
2871 /* 2675 */ { MAD_F(0x04886b6d) /* 0.283305576 */, 17 },
2872 /* 2676 */ { MAD_F(0x0488ff82) /* 0.283446796 */, 17 },
2873 /* 2677 */ { MAD_F(0x0489939b) /* 0.283588034 */, 17 },
2874 /* 2678 */ { MAD_F(0x048a27b9) /* 0.283729290 */, 17 },
2875 /* 2679 */ { MAD_F(0x048abbdc) /* 0.283870563 */, 17 },
2876 /* 2680 */ { MAD_F(0x048b5003) /* 0.284011853 */, 17 },
2877 /* 2681 */ { MAD_F(0x048be42f) /* 0.284153161 */, 17 },
2878 /* 2682 */ { MAD_F(0x048c7860) /* 0.284294487 */, 17 },
2879 /* 2683 */ { MAD_F(0x048d0c96) /* 0.284435831 */, 17 },
2880 /* 2684 */ { MAD_F(0x048da0d0) /* 0.284577192 */, 17 },
2881 /* 2685 */ { MAD_F(0x048e350f) /* 0.284718570 */, 17 },
2882 /* 2686 */ { MAD_F(0x048ec953) /* 0.284859966 */, 17 },
2883 /* 2687 */ { MAD_F(0x048f5d9b) /* 0.285001380 */, 17 },
2884
2885 /* 2688 */ { MAD_F(0x048ff1e8) /* 0.285142811 */, 17 },
2886 /* 2689 */ { MAD_F(0x0490863a) /* 0.285284259 */, 17 },
2887 /* 2690 */ { MAD_F(0x04911a91) /* 0.285425726 */, 17 },
2888 /* 2691 */ { MAD_F(0x0491aeec) /* 0.285567209 */, 17 },
2889 /* 2692 */ { MAD_F(0x0492434c) /* 0.285708711 */, 17 },
2890 /* 2693 */ { MAD_F(0x0492d7b0) /* 0.285850229 */, 17 },
2891 /* 2694 */ { MAD_F(0x04936c1a) /* 0.285991766 */, 17 },
2892 /* 2695 */ { MAD_F(0x04940088) /* 0.286133319 */, 17 },
2893 /* 2696 */ { MAD_F(0x049494fb) /* 0.286274891 */, 17 },
2894 /* 2697 */ { MAD_F(0x04952972) /* 0.286416480 */, 17 },
2895 /* 2698 */ { MAD_F(0x0495bdee) /* 0.286558086 */, 17 },
2896 /* 2699 */ { MAD_F(0x0496526f) /* 0.286699710 */, 17 },
2897 /* 2700 */ { MAD_F(0x0496e6f5) /* 0.286841351 */, 17 },
2898 /* 2701 */ { MAD_F(0x04977b7f) /* 0.286983010 */, 17 },
2899 /* 2702 */ { MAD_F(0x0498100e) /* 0.287124686 */, 17 },
2900 /* 2703 */ { MAD_F(0x0498a4a1) /* 0.287266380 */, 17 },
2901
2902 /* 2704 */ { MAD_F(0x0499393a) /* 0.287408091 */, 17 },
2903 /* 2705 */ { MAD_F(0x0499cdd7) /* 0.287549820 */, 17 },
2904 /* 2706 */ { MAD_F(0x049a6278) /* 0.287691566 */, 17 },
2905 /* 2707 */ { MAD_F(0x049af71f) /* 0.287833330 */, 17 },
2906 /* 2708 */ { MAD_F(0x049b8bca) /* 0.287975111 */, 17 },
2907 /* 2709 */ { MAD_F(0x049c207a) /* 0.288116909 */, 17 },
2908 /* 2710 */ { MAD_F(0x049cb52e) /* 0.288258725 */, 17 },
2909 /* 2711 */ { MAD_F(0x049d49e7) /* 0.288400559 */, 17 },
2910 /* 2712 */ { MAD_F(0x049ddea5) /* 0.288542409 */, 17 },
2911 /* 2713 */ { MAD_F(0x049e7367) /* 0.288684278 */, 17 },
2912 /* 2714 */ { MAD_F(0x049f082f) /* 0.288826163 */, 17 },
2913 /* 2715 */ { MAD_F(0x049f9cfa) /* 0.288968067 */, 17 },
2914 /* 2716 */ { MAD_F(0x04a031cb) /* 0.289109987 */, 17 },
2915 /* 2717 */ { MAD_F(0x04a0c6a0) /* 0.289251925 */, 17 },
2916 /* 2718 */ { MAD_F(0x04a15b7a) /* 0.289393881 */, 17 },
2917 /* 2719 */ { MAD_F(0x04a1f059) /* 0.289535854 */, 17 },
2918
2919 /* 2720 */ { MAD_F(0x04a2853c) /* 0.289677844 */, 17 },
2920 /* 2721 */ { MAD_F(0x04a31a24) /* 0.289819851 */, 17 },
2921 /* 2722 */ { MAD_F(0x04a3af10) /* 0.289961876 */, 17 },
2922 /* 2723 */ { MAD_F(0x04a44401) /* 0.290103919 */, 17 },
2923 /* 2724 */ { MAD_F(0x04a4d8f7) /* 0.290245979 */, 17 },
2924 /* 2725 */ { MAD_F(0x04a56df2) /* 0.290388056 */, 17 },
2925 /* 2726 */ { MAD_F(0x04a602f1) /* 0.290530150 */, 17 },
2926 /* 2727 */ { MAD_F(0x04a697f5) /* 0.290672262 */, 17 },
2927 /* 2728 */ { MAD_F(0x04a72cfe) /* 0.290814392 */, 17 },
2928 /* 2729 */ { MAD_F(0x04a7c20b) /* 0.290956538 */, 17 },
2929 /* 2730 */ { MAD_F(0x04a8571d) /* 0.291098703 */, 17 },
2930 /* 2731 */ { MAD_F(0x04a8ec33) /* 0.291240884 */, 17 },
2931 /* 2732 */ { MAD_F(0x04a9814e) /* 0.291383083 */, 17 },
2932 /* 2733 */ { MAD_F(0x04aa166e) /* 0.291525299 */, 17 },
2933 /* 2734 */ { MAD_F(0x04aaab93) /* 0.291667532 */, 17 },
2934 /* 2735 */ { MAD_F(0x04ab40bc) /* 0.291809783 */, 17 },
2935
2936 /* 2736 */ { MAD_F(0x04abd5ea) /* 0.291952051 */, 17 },
2937 /* 2737 */ { MAD_F(0x04ac6b1c) /* 0.292094337 */, 17 },
2938 /* 2738 */ { MAD_F(0x04ad0053) /* 0.292236640 */, 17 },
2939 /* 2739 */ { MAD_F(0x04ad958f) /* 0.292378960 */, 17 },
2940 /* 2740 */ { MAD_F(0x04ae2ad0) /* 0.292521297 */, 17 },
2941 /* 2741 */ { MAD_F(0x04aec015) /* 0.292663652 */, 17 },
2942 /* 2742 */ { MAD_F(0x04af555e) /* 0.292806024 */, 17 },
2943 /* 2743 */ { MAD_F(0x04afeaad) /* 0.292948414 */, 17 },
2944 /* 2744 */ { MAD_F(0x04b08000) /* 0.293090820 */, 17 },
2945 /* 2745 */ { MAD_F(0x04b11557) /* 0.293233244 */, 17 },
2946 /* 2746 */ { MAD_F(0x04b1aab4) /* 0.293375686 */, 17 },
2947 /* 2747 */ { MAD_F(0x04b24015) /* 0.293518144 */, 17 },
2948 /* 2748 */ { MAD_F(0x04b2d57a) /* 0.293660620 */, 17 },
2949 /* 2749 */ { MAD_F(0x04b36ae4) /* 0.293803113 */, 17 },
2950 /* 2750 */ { MAD_F(0x04b40053) /* 0.293945624 */, 17 },
2951 /* 2751 */ { MAD_F(0x04b495c7) /* 0.294088151 */, 17 },
2952
2953 /* 2752 */ { MAD_F(0x04b52b3f) /* 0.294230696 */, 17 },
2954 /* 2753 */ { MAD_F(0x04b5c0bc) /* 0.294373259 */, 17 },
2955 /* 2754 */ { MAD_F(0x04b6563d) /* 0.294515838 */, 17 },
2956 /* 2755 */ { MAD_F(0x04b6ebc3) /* 0.294658435 */, 17 },
2957 /* 2756 */ { MAD_F(0x04b7814e) /* 0.294801049 */, 17 },
2958 /* 2757 */ { MAD_F(0x04b816dd) /* 0.294943680 */, 17 },
2959 /* 2758 */ { MAD_F(0x04b8ac71) /* 0.295086329 */, 17 },
2960 /* 2759 */ { MAD_F(0x04b9420a) /* 0.295228995 */, 17 },
2961 /* 2760 */ { MAD_F(0x04b9d7a7) /* 0.295371678 */, 17 },
2962 /* 2761 */ { MAD_F(0x04ba6d49) /* 0.295514378 */, 17 },
2963 /* 2762 */ { MAD_F(0x04bb02ef) /* 0.295657095 */, 17 },
2964 /* 2763 */ { MAD_F(0x04bb989a) /* 0.295799830 */, 17 },
2965 /* 2764 */ { MAD_F(0x04bc2e4a) /* 0.295942582 */, 17 },
2966 /* 2765 */ { MAD_F(0x04bcc3fe) /* 0.296085351 */, 17 },
2967 /* 2766 */ { MAD_F(0x04bd59b7) /* 0.296228138 */, 17 },
2968 /* 2767 */ { MAD_F(0x04bdef74) /* 0.296370941 */, 17 },
2969
2970 /* 2768 */ { MAD_F(0x04be8537) /* 0.296513762 */, 17 },
2971 /* 2769 */ { MAD_F(0x04bf1afd) /* 0.296656600 */, 17 },
2972 /* 2770 */ { MAD_F(0x04bfb0c9) /* 0.296799455 */, 17 },
2973 /* 2771 */ { MAD_F(0x04c04699) /* 0.296942327 */, 17 },
2974 /* 2772 */ { MAD_F(0x04c0dc6d) /* 0.297085217 */, 17 },
2975 /* 2773 */ { MAD_F(0x04c17247) /* 0.297228124 */, 17 },
2976 /* 2774 */ { MAD_F(0x04c20824) /* 0.297371048 */, 17 },
2977 /* 2775 */ { MAD_F(0x04c29e07) /* 0.297513989 */, 17 },
2978 /* 2776 */ { MAD_F(0x04c333ee) /* 0.297656947 */, 17 },
2979 /* 2777 */ { MAD_F(0x04c3c9da) /* 0.297799922 */, 17 },
2980 /* 2778 */ { MAD_F(0x04c45fca) /* 0.297942915 */, 17 },
2981 /* 2779 */ { MAD_F(0x04c4f5bf) /* 0.298085925 */, 17 },
2982 /* 2780 */ { MAD_F(0x04c58bb8) /* 0.298228951 */, 17 },
2983 /* 2781 */ { MAD_F(0x04c621b6) /* 0.298371996 */, 17 },
2984 /* 2782 */ { MAD_F(0x04c6b7b9) /* 0.298515057 */, 17 },
2985 /* 2783 */ { MAD_F(0x04c74dc0) /* 0.298658135 */, 17 },
2986
2987 /* 2784 */ { MAD_F(0x04c7e3cc) /* 0.298801231 */, 17 },
2988 /* 2785 */ { MAD_F(0x04c879dd) /* 0.298944343 */, 17 },
2989 /* 2786 */ { MAD_F(0x04c90ff2) /* 0.299087473 */, 17 },
2990 /* 2787 */ { MAD_F(0x04c9a60c) /* 0.299230620 */, 17 },
2991 /* 2788 */ { MAD_F(0x04ca3c2a) /* 0.299373784 */, 17 },
2992 /* 2789 */ { MAD_F(0x04cad24d) /* 0.299516965 */, 17 },
2993 /* 2790 */ { MAD_F(0x04cb6874) /* 0.299660163 */, 17 },
2994 /* 2791 */ { MAD_F(0x04cbfea0) /* 0.299803378 */, 17 },
2995 /* 2792 */ { MAD_F(0x04cc94d1) /* 0.299946611 */, 17 },
2996 /* 2793 */ { MAD_F(0x04cd2b06) /* 0.300089860 */, 17 },
2997 /* 2794 */ { MAD_F(0x04cdc140) /* 0.300233127 */, 17 },
2998 /* 2795 */ { MAD_F(0x04ce577f) /* 0.300376411 */, 17 },
2999 /* 2796 */ { MAD_F(0x04ceedc2) /* 0.300519711 */, 17 },
3000 /* 2797 */ { MAD_F(0x04cf8409) /* 0.300663029 */, 17 },
3001 /* 2798 */ { MAD_F(0x04d01a55) /* 0.300806364 */, 17 },
3002 /* 2799 */ { MAD_F(0x04d0b0a6) /* 0.300949716 */, 17 },
3003
3004 /* 2800 */ { MAD_F(0x04d146fb) /* 0.301093085 */, 17 },
3005 /* 2801 */ { MAD_F(0x04d1dd55) /* 0.301236472 */, 17 },
3006 /* 2802 */ { MAD_F(0x04d273b4) /* 0.301379875 */, 17 },
3007 /* 2803 */ { MAD_F(0x04d30a17) /* 0.301523295 */, 17 },
3008 /* 2804 */ { MAD_F(0x04d3a07f) /* 0.301666733 */, 17 },
3009 /* 2805 */ { MAD_F(0x04d436eb) /* 0.301810187 */, 17 },
3010 /* 2806 */ { MAD_F(0x04d4cd5c) /* 0.301953659 */, 17 },
3011 /* 2807 */ { MAD_F(0x04d563d1) /* 0.302097147 */, 17 },
3012 /* 2808 */ { MAD_F(0x04d5fa4b) /* 0.302240653 */, 17 },
3013 /* 2809 */ { MAD_F(0x04d690ca) /* 0.302384175 */, 17 },
3014 /* 2810 */ { MAD_F(0x04d7274d) /* 0.302527715 */, 17 },
3015 /* 2811 */ { MAD_F(0x04d7bdd5) /* 0.302671271 */, 17 },
3016 /* 2812 */ { MAD_F(0x04d85461) /* 0.302814845 */, 17 },
3017 /* 2813 */ { MAD_F(0x04d8eaf2) /* 0.302958436 */, 17 },
3018 /* 2814 */ { MAD_F(0x04d98187) /* 0.303102044 */, 17 },
3019 /* 2815 */ { MAD_F(0x04da1821) /* 0.303245668 */, 17 },
3020
3021 /* 2816 */ { MAD_F(0x04daaec0) /* 0.303389310 */, 17 },
3022 /* 2817 */ { MAD_F(0x04db4563) /* 0.303532969 */, 17 },
3023 /* 2818 */ { MAD_F(0x04dbdc0a) /* 0.303676645 */, 17 },
3024 /* 2819 */ { MAD_F(0x04dc72b7) /* 0.303820337 */, 17 },
3025 /* 2820 */ { MAD_F(0x04dd0967) /* 0.303964047 */, 17 },
3026 /* 2821 */ { MAD_F(0x04dda01d) /* 0.304107774 */, 17 },
3027 /* 2822 */ { MAD_F(0x04de36d7) /* 0.304251517 */, 17 },
3028 /* 2823 */ { MAD_F(0x04decd95) /* 0.304395278 */, 17 },
3029 /* 2824 */ { MAD_F(0x04df6458) /* 0.304539056 */, 17 },
3030 /* 2825 */ { MAD_F(0x04dffb20) /* 0.304682850 */, 17 },
3031 /* 2826 */ { MAD_F(0x04e091ec) /* 0.304826662 */, 17 },
3032 /* 2827 */ { MAD_F(0x04e128bc) /* 0.304970491 */, 17 },
3033 /* 2828 */ { MAD_F(0x04e1bf92) /* 0.305114336 */, 17 },
3034 /* 2829 */ { MAD_F(0x04e2566b) /* 0.305258199 */, 17 },
3035 /* 2830 */ { MAD_F(0x04e2ed4a) /* 0.305402078 */, 17 },
3036 /* 2831 */ { MAD_F(0x04e3842d) /* 0.305545974 */, 17 },
3037
3038 /* 2832 */ { MAD_F(0x04e41b14) /* 0.305689888 */, 17 },
3039 /* 2833 */ { MAD_F(0x04e4b200) /* 0.305833818 */, 17 },
3040 /* 2834 */ { MAD_F(0x04e548f1) /* 0.305977765 */, 17 },
3041 /* 2835 */ { MAD_F(0x04e5dfe6) /* 0.306121729 */, 17 },
3042 /* 2836 */ { MAD_F(0x04e676df) /* 0.306265710 */, 17 },
3043 /* 2837 */ { MAD_F(0x04e70dde) /* 0.306409708 */, 17 },
3044 /* 2838 */ { MAD_F(0x04e7a4e0) /* 0.306553723 */, 17 },
3045 /* 2839 */ { MAD_F(0x04e83be7) /* 0.306697755 */, 17 },
3046 /* 2840 */ { MAD_F(0x04e8d2f3) /* 0.306841804 */, 17 },
3047 /* 2841 */ { MAD_F(0x04e96a04) /* 0.306985869 */, 17 },
3048 /* 2842 */ { MAD_F(0x04ea0118) /* 0.307129952 */, 17 },
3049 /* 2843 */ { MAD_F(0x04ea9832) /* 0.307274051 */, 17 },
3050 /* 2844 */ { MAD_F(0x04eb2f50) /* 0.307418168 */, 17 },
3051 /* 2845 */ { MAD_F(0x04ebc672) /* 0.307562301 */, 17 },
3052 /* 2846 */ { MAD_F(0x04ec5d99) /* 0.307706451 */, 17 },
3053 /* 2847 */ { MAD_F(0x04ecf4c5) /* 0.307850618 */, 17 },
3054
3055 /* 2848 */ { MAD_F(0x04ed8bf5) /* 0.307994802 */, 17 },
3056 /* 2849 */ { MAD_F(0x04ee2329) /* 0.308139003 */, 17 },
3057 /* 2850 */ { MAD_F(0x04eeba63) /* 0.308283220 */, 17 },
3058 /* 2851 */ { MAD_F(0x04ef51a0) /* 0.308427455 */, 17 },
3059 /* 2852 */ { MAD_F(0x04efe8e2) /* 0.308571706 */, 17 },
3060 /* 2853 */ { MAD_F(0x04f08029) /* 0.308715974 */, 17 },
3061 /* 2854 */ { MAD_F(0x04f11774) /* 0.308860260 */, 17 },
3062 /* 2855 */ { MAD_F(0x04f1aec4) /* 0.309004561 */, 17 },
3063 /* 2856 */ { MAD_F(0x04f24618) /* 0.309148880 */, 17 },
3064 /* 2857 */ { MAD_F(0x04f2dd71) /* 0.309293216 */, 17 },
3065 /* 2858 */ { MAD_F(0x04f374cf) /* 0.309437568 */, 17 },
3066 /* 2859 */ { MAD_F(0x04f40c30) /* 0.309581938 */, 17 },
3067 /* 2860 */ { MAD_F(0x04f4a397) /* 0.309726324 */, 17 },
3068 /* 2861 */ { MAD_F(0x04f53b02) /* 0.309870727 */, 17 },
3069 /* 2862 */ { MAD_F(0x04f5d271) /* 0.310015147 */, 17 },
3070 /* 2863 */ { MAD_F(0x04f669e5) /* 0.310159583 */, 17 },
3071
3072 /* 2864 */ { MAD_F(0x04f7015d) /* 0.310304037 */, 17 },
3073 /* 2865 */ { MAD_F(0x04f798da) /* 0.310448507 */, 17 },
3074 /* 2866 */ { MAD_F(0x04f8305c) /* 0.310592994 */, 17 },
3075 /* 2867 */ { MAD_F(0x04f8c7e2) /* 0.310737498 */, 17 },
3076 /* 2868 */ { MAD_F(0x04f95f6c) /* 0.310882018 */, 17 },
3077 /* 2869 */ { MAD_F(0x04f9f6fb) /* 0.311026556 */, 17 },
3078 /* 2870 */ { MAD_F(0x04fa8e8f) /* 0.311171110 */, 17 },
3079 /* 2871 */ { MAD_F(0x04fb2627) /* 0.311315681 */, 17 },
3080 /* 2872 */ { MAD_F(0x04fbbdc3) /* 0.311460269 */, 17 },
3081 /* 2873 */ { MAD_F(0x04fc5564) /* 0.311604874 */, 17 },
3082 /* 2874 */ { MAD_F(0x04fced0a) /* 0.311749495 */, 17 },
3083 /* 2875 */ { MAD_F(0x04fd84b4) /* 0.311894133 */, 17 },
3084 /* 2876 */ { MAD_F(0x04fe1c62) /* 0.312038788 */, 17 },
3085 /* 2877 */ { MAD_F(0x04feb415) /* 0.312183460 */, 17 },
3086 /* 2878 */ { MAD_F(0x04ff4bcd) /* 0.312328148 */, 17 },
3087 /* 2879 */ { MAD_F(0x04ffe389) /* 0.312472854 */, 17 },
3088
3089 /* 2880 */ { MAD_F(0x05007b49) /* 0.312617576 */, 17 },
3090 /* 2881 */ { MAD_F(0x0501130e) /* 0.312762314 */, 17 },
3091 /* 2882 */ { MAD_F(0x0501aad8) /* 0.312907070 */, 17 },
3092 /* 2883 */ { MAD_F(0x050242a6) /* 0.313051842 */, 17 },
3093 /* 2884 */ { MAD_F(0x0502da78) /* 0.313196631 */, 17 },
3094 /* 2885 */ { MAD_F(0x0503724f) /* 0.313341437 */, 17 },
3095 /* 2886 */ { MAD_F(0x05040a2b) /* 0.313486259 */, 17 },
3096 /* 2887 */ { MAD_F(0x0504a20b) /* 0.313631098 */, 17 },
3097 /* 2888 */ { MAD_F(0x050539ef) /* 0.313775954 */, 17 },
3098 /* 2889 */ { MAD_F(0x0505d1d8) /* 0.313920827 */, 17 },
3099 /* 2890 */ { MAD_F(0x050669c5) /* 0.314065716 */, 17 },
3100 /* 2891 */ { MAD_F(0x050701b7) /* 0.314210622 */, 17 },
3101 /* 2892 */ { MAD_F(0x050799ae) /* 0.314355545 */, 17 },
3102 /* 2893 */ { MAD_F(0x050831a9) /* 0.314500484 */, 17 },
3103 /* 2894 */ { MAD_F(0x0508c9a8) /* 0.314645440 */, 17 },
3104 /* 2895 */ { MAD_F(0x050961ac) /* 0.314790413 */, 17 },
3105
3106 /* 2896 */ { MAD_F(0x0509f9b4) /* 0.314935403 */, 17 },
3107 /* 2897 */ { MAD_F(0x050a91c1) /* 0.315080409 */, 17 },
3108 /* 2898 */ { MAD_F(0x050b29d2) /* 0.315225432 */, 17 },
3109 /* 2899 */ { MAD_F(0x050bc1e8) /* 0.315370472 */, 17 },
3110 /* 2900 */ { MAD_F(0x050c5a02) /* 0.315515528 */, 17 },
3111 /* 2901 */ { MAD_F(0x050cf221) /* 0.315660601 */, 17 },
3112 /* 2902 */ { MAD_F(0x050d8a44) /* 0.315805690 */, 17 },
3113 /* 2903 */ { MAD_F(0x050e226c) /* 0.315950797 */, 17 },
3114 /* 2904 */ { MAD_F(0x050eba98) /* 0.316095920 */, 17 },
3115 /* 2905 */ { MAD_F(0x050f52c9) /* 0.316241059 */, 17 },
3116 /* 2906 */ { MAD_F(0x050feafe) /* 0.316386216 */, 17 },
3117 /* 2907 */ { MAD_F(0x05108337) /* 0.316531388 */, 17 },
3118 /* 2908 */ { MAD_F(0x05111b75) /* 0.316676578 */, 17 },
3119 /* 2909 */ { MAD_F(0x0511b3b8) /* 0.316821784 */, 17 },
3120 /* 2910 */ { MAD_F(0x05124bff) /* 0.316967007 */, 17 },
3121 /* 2911 */ { MAD_F(0x0512e44a) /* 0.317112247 */, 17 },
3122
3123 /* 2912 */ { MAD_F(0x05137c9a) /* 0.317257503 */, 17 },
3124 /* 2913 */ { MAD_F(0x051414ee) /* 0.317402775 */, 17 },
3125 /* 2914 */ { MAD_F(0x0514ad47) /* 0.317548065 */, 17 },
3126 /* 2915 */ { MAD_F(0x051545a5) /* 0.317693371 */, 17 },
3127 /* 2916 */ { MAD_F(0x0515de06) /* 0.317838693 */, 17 },
3128 /* 2917 */ { MAD_F(0x0516766d) /* 0.317984033 */, 17 },
3129 /* 2918 */ { MAD_F(0x05170ed7) /* 0.318129388 */, 17 },
3130 /* 2919 */ { MAD_F(0x0517a746) /* 0.318274761 */, 17 },
3131 /* 2920 */ { MAD_F(0x05183fba) /* 0.318420150 */, 17 },
3132 /* 2921 */ { MAD_F(0x0518d832) /* 0.318565555 */, 17 },
3133 /* 2922 */ { MAD_F(0x051970ae) /* 0.318710978 */, 17 },
3134 /* 2923 */ { MAD_F(0x051a092f) /* 0.318856416 */, 17 },
3135 /* 2924 */ { MAD_F(0x051aa1b5) /* 0.319001872 */, 17 },
3136 /* 2925 */ { MAD_F(0x051b3a3f) /* 0.319147344 */, 17 },
3137 /* 2926 */ { MAD_F(0x051bd2cd) /* 0.319292832 */, 17 },
3138 /* 2927 */ { MAD_F(0x051c6b60) /* 0.319438338 */, 17 },
3139
3140 /* 2928 */ { MAD_F(0x051d03f7) /* 0.319583859 */, 17 },
3141 /* 2929 */ { MAD_F(0x051d9c92) /* 0.319729398 */, 17 },
3142 /* 2930 */ { MAD_F(0x051e3532) /* 0.319874952 */, 17 },
3143 /* 2931 */ { MAD_F(0x051ecdd7) /* 0.320020524 */, 17 },
3144 /* 2932 */ { MAD_F(0x051f6680) /* 0.320166112 */, 17 },
3145 /* 2933 */ { MAD_F(0x051fff2d) /* 0.320311716 */, 17 },
3146 /* 2934 */ { MAD_F(0x052097df) /* 0.320457337 */, 17 },
3147 /* 2935 */ { MAD_F(0x05213095) /* 0.320602975 */, 17 },
3148 /* 2936 */ { MAD_F(0x0521c950) /* 0.320748629 */, 17 },
3149 /* 2937 */ { MAD_F(0x0522620f) /* 0.320894300 */, 17 },
3150 /* 2938 */ { MAD_F(0x0522fad3) /* 0.321039987 */, 17 },
3151 /* 2939 */ { MAD_F(0x0523939b) /* 0.321185691 */, 17 },
3152 /* 2940 */ { MAD_F(0x05242c68) /* 0.321331411 */, 17 },
3153 /* 2941 */ { MAD_F(0x0524c538) /* 0.321477148 */, 17 },
3154 /* 2942 */ { MAD_F(0x05255e0e) /* 0.321622901 */, 17 },
3155 /* 2943 */ { MAD_F(0x0525f6e8) /* 0.321768671 */, 17 },
3156
3157 /* 2944 */ { MAD_F(0x05268fc6) /* 0.321914457 */, 17 },
3158 /* 2945 */ { MAD_F(0x052728a9) /* 0.322060260 */, 17 },
3159 /* 2946 */ { MAD_F(0x0527c190) /* 0.322206079 */, 17 },
3160 /* 2947 */ { MAD_F(0x05285a7b) /* 0.322351915 */, 17 },
3161 /* 2948 */ { MAD_F(0x0528f36b) /* 0.322497768 */, 17 },
3162 /* 2949 */ { MAD_F(0x05298c5f) /* 0.322643636 */, 17 },
3163 /* 2950 */ { MAD_F(0x052a2558) /* 0.322789522 */, 17 },
3164 /* 2951 */ { MAD_F(0x052abe55) /* 0.322935424 */, 17 },
3165 /* 2952 */ { MAD_F(0x052b5757) /* 0.323081342 */, 17 },
3166 /* 2953 */ { MAD_F(0x052bf05d) /* 0.323227277 */, 17 },
3167 /* 2954 */ { MAD_F(0x052c8968) /* 0.323373228 */, 17 },
3168 /* 2955 */ { MAD_F(0x052d2277) /* 0.323519196 */, 17 },
3169 /* 2956 */ { MAD_F(0x052dbb8a) /* 0.323665180 */, 17 },
3170 /* 2957 */ { MAD_F(0x052e54a2) /* 0.323811180 */, 17 },
3171 /* 2958 */ { MAD_F(0x052eedbe) /* 0.323957197 */, 17 },
3172 /* 2959 */ { MAD_F(0x052f86de) /* 0.324103231 */, 17 },
3173
3174 /* 2960 */ { MAD_F(0x05302003) /* 0.324249281 */, 17 },
3175 /* 2961 */ { MAD_F(0x0530b92d) /* 0.324395347 */, 17 },
3176 /* 2962 */ { MAD_F(0x0531525b) /* 0.324541430 */, 17 },
3177 /* 2963 */ { MAD_F(0x0531eb8d) /* 0.324687530 */, 17 },
3178 /* 2964 */ { MAD_F(0x053284c4) /* 0.324833646 */, 17 },
3179 /* 2965 */ { MAD_F(0x05331dff) /* 0.324979778 */, 17 },
3180 /* 2966 */ { MAD_F(0x0533b73e) /* 0.325125926 */, 17 },
3181 /* 2967 */ { MAD_F(0x05345082) /* 0.325272091 */, 17 },
3182 /* 2968 */ { MAD_F(0x0534e9ca) /* 0.325418273 */, 17 },
3183 /* 2969 */ { MAD_F(0x05358317) /* 0.325564471 */, 17 },
3184 /* 2970 */ { MAD_F(0x05361c68) /* 0.325710685 */, 17 },
3185 /* 2971 */ { MAD_F(0x0536b5be) /* 0.325856916 */, 17 },
3186 /* 2972 */ { MAD_F(0x05374f17) /* 0.326003163 */, 17 },
3187 /* 2973 */ { MAD_F(0x0537e876) /* 0.326149427 */, 17 },
3188 /* 2974 */ { MAD_F(0x053881d9) /* 0.326295707 */, 17 },
3189 /* 2975 */ { MAD_F(0x05391b40) /* 0.326442003 */, 17 },
3190
3191 /* 2976 */ { MAD_F(0x0539b4ab) /* 0.326588316 */, 17 },
3192 /* 2977 */ { MAD_F(0x053a4e1b) /* 0.326734645 */, 17 },
3193 /* 2978 */ { MAD_F(0x053ae78f) /* 0.326880990 */, 17 },
3194 /* 2979 */ { MAD_F(0x053b8108) /* 0.327027352 */, 17 },
3195 /* 2980 */ { MAD_F(0x053c1a85) /* 0.327173730 */, 17 },
3196 /* 2981 */ { MAD_F(0x053cb407) /* 0.327320125 */, 17 },
3197 /* 2982 */ { MAD_F(0x053d4d8d) /* 0.327466536 */, 17 },
3198 /* 2983 */ { MAD_F(0x053de717) /* 0.327612963 */, 17 },
3199 /* 2984 */ { MAD_F(0x053e80a6) /* 0.327759407 */, 17 },
3200 /* 2985 */ { MAD_F(0x053f1a39) /* 0.327905867 */, 17 },
3201 /* 2986 */ { MAD_F(0x053fb3d0) /* 0.328052344 */, 17 },
3202 /* 2987 */ { MAD_F(0x05404d6c) /* 0.328198837 */, 17 },
3203 /* 2988 */ { MAD_F(0x0540e70c) /* 0.328345346 */, 17 },
3204 /* 2989 */ { MAD_F(0x054180b1) /* 0.328491871 */, 17 },
3205 /* 2990 */ { MAD_F(0x05421a5a) /* 0.328638413 */, 17 },
3206 /* 2991 */ { MAD_F(0x0542b407) /* 0.328784971 */, 17 },
3207
3208 /* 2992 */ { MAD_F(0x05434db9) /* 0.328931546 */, 17 },
3209 /* 2993 */ { MAD_F(0x0543e76f) /* 0.329078137 */, 17 },
3210 /* 2994 */ { MAD_F(0x0544812a) /* 0.329224744 */, 17 },
3211 /* 2995 */ { MAD_F(0x05451ae9) /* 0.329371367 */, 17 },
3212 /* 2996 */ { MAD_F(0x0545b4ac) /* 0.329518007 */, 17 },
3213 /* 2997 */ { MAD_F(0x05464e74) /* 0.329664663 */, 17 },
3214 /* 2998 */ { MAD_F(0x0546e840) /* 0.329811336 */, 17 },
3215 /* 2999 */ { MAD_F(0x05478211) /* 0.329958024 */, 17 },
3216 /* 3000 */ { MAD_F(0x05481be5) /* 0.330104730 */, 17 },
3217 /* 3001 */ { MAD_F(0x0548b5bf) /* 0.330251451 */, 17 },
3218 /* 3002 */ { MAD_F(0x05494f9c) /* 0.330398189 */, 17 },
3219 /* 3003 */ { MAD_F(0x0549e97e) /* 0.330544943 */, 17 },
3220 /* 3004 */ { MAD_F(0x054a8364) /* 0.330691713 */, 17 },
3221 /* 3005 */ { MAD_F(0x054b1d4f) /* 0.330838499 */, 17 },
3222 /* 3006 */ { MAD_F(0x054bb73e) /* 0.330985302 */, 17 },
3223 /* 3007 */ { MAD_F(0x054c5132) /* 0.331132121 */, 17 },
3224
3225 /* 3008 */ { MAD_F(0x054ceb2a) /* 0.331278957 */, 17 },
3226 /* 3009 */ { MAD_F(0x054d8526) /* 0.331425808 */, 17 },
3227 /* 3010 */ { MAD_F(0x054e1f26) /* 0.331572676 */, 17 },
3228 /* 3011 */ { MAD_F(0x054eb92b) /* 0.331719560 */, 17 },
3229 /* 3012 */ { MAD_F(0x054f5334) /* 0.331866461 */, 17 },
3230 /* 3013 */ { MAD_F(0x054fed42) /* 0.332013377 */, 17 },
3231 /* 3014 */ { MAD_F(0x05508754) /* 0.332160310 */, 17 },
3232 /* 3015 */ { MAD_F(0x0551216b) /* 0.332307260 */, 17 },
3233 /* 3016 */ { MAD_F(0x0551bb85) /* 0.332454225 */, 17 },
3234 /* 3017 */ { MAD_F(0x055255a4) /* 0.332601207 */, 17 },
3235 /* 3018 */ { MAD_F(0x0552efc8) /* 0.332748205 */, 17 },
3236 /* 3019 */ { MAD_F(0x055389f0) /* 0.332895219 */, 17 },
3237 /* 3020 */ { MAD_F(0x0554241c) /* 0.333042249 */, 17 },
3238 /* 3021 */ { MAD_F(0x0554be4c) /* 0.333189296 */, 17 },
3239 /* 3022 */ { MAD_F(0x05555881) /* 0.333336359 */, 17 },
3240 /* 3023 */ { MAD_F(0x0555f2ba) /* 0.333483438 */, 17 },
3241
3242 /* 3024 */ { MAD_F(0x05568cf8) /* 0.333630533 */, 17 },
3243 /* 3025 */ { MAD_F(0x0557273a) /* 0.333777645 */, 17 },
3244 /* 3026 */ { MAD_F(0x0557c180) /* 0.333924772 */, 17 },
3245 /* 3027 */ { MAD_F(0x05585bcb) /* 0.334071916 */, 17 },
3246 /* 3028 */ { MAD_F(0x0558f61a) /* 0.334219076 */, 17 },
3247 /* 3029 */ { MAD_F(0x0559906d) /* 0.334366253 */, 17 },
3248 /* 3030 */ { MAD_F(0x055a2ac5) /* 0.334513445 */, 17 },
3249 /* 3031 */ { MAD_F(0x055ac521) /* 0.334660654 */, 17 },
3250 /* 3032 */ { MAD_F(0x055b5f81) /* 0.334807879 */, 17 },
3251 /* 3033 */ { MAD_F(0x055bf9e6) /* 0.334955120 */, 17 },
3252 /* 3034 */ { MAD_F(0x055c944f) /* 0.335102377 */, 17 },
3253 /* 3035 */ { MAD_F(0x055d2ebd) /* 0.335249651 */, 17 },
3254 /* 3036 */ { MAD_F(0x055dc92e) /* 0.335396941 */, 17 },
3255 /* 3037 */ { MAD_F(0x055e63a5) /* 0.335544246 */, 17 },
3256 /* 3038 */ { MAD_F(0x055efe1f) /* 0.335691568 */, 17 },
3257 /* 3039 */ { MAD_F(0x055f989e) /* 0.335838906 */, 17 },
3258
3259 /* 3040 */ { MAD_F(0x05603321) /* 0.335986261 */, 17 },
3260 /* 3041 */ { MAD_F(0x0560cda8) /* 0.336133631 */, 17 },
3261 /* 3042 */ { MAD_F(0x05616834) /* 0.336281018 */, 17 },
3262 /* 3043 */ { MAD_F(0x056202c4) /* 0.336428421 */, 17 },
3263 /* 3044 */ { MAD_F(0x05629d59) /* 0.336575840 */, 17 },
3264 /* 3045 */ { MAD_F(0x056337f2) /* 0.336723275 */, 17 },
3265 /* 3046 */ { MAD_F(0x0563d28f) /* 0.336870726 */, 17 },
3266 /* 3047 */ { MAD_F(0x05646d30) /* 0.337018193 */, 17 },
3267 /* 3048 */ { MAD_F(0x056507d6) /* 0.337165677 */, 17 },
3268 /* 3049 */ { MAD_F(0x0565a280) /* 0.337313176 */, 17 },
3269 /* 3050 */ { MAD_F(0x05663d2f) /* 0.337460692 */, 17 },
3270 /* 3051 */ { MAD_F(0x0566d7e1) /* 0.337608224 */, 17 },
3271 /* 3052 */ { MAD_F(0x05677298) /* 0.337755772 */, 17 },
3272 /* 3053 */ { MAD_F(0x05680d54) /* 0.337903336 */, 17 },
3273 /* 3054 */ { MAD_F(0x0568a814) /* 0.338050916 */, 17 },
3274 /* 3055 */ { MAD_F(0x056942d8) /* 0.338198513 */, 17 },
3275
3276 /* 3056 */ { MAD_F(0x0569dda0) /* 0.338346125 */, 17 },
3277 /* 3057 */ { MAD_F(0x056a786d) /* 0.338493753 */, 17 },
3278 /* 3058 */ { MAD_F(0x056b133e) /* 0.338641398 */, 17 },
3279 /* 3059 */ { MAD_F(0x056bae13) /* 0.338789059 */, 17 },
3280 /* 3060 */ { MAD_F(0x056c48ed) /* 0.338936736 */, 17 },
3281 /* 3061 */ { MAD_F(0x056ce3cb) /* 0.339084429 */, 17 },
3282 /* 3062 */ { MAD_F(0x056d7ead) /* 0.339232138 */, 17 },
3283 /* 3063 */ { MAD_F(0x056e1994) /* 0.339379863 */, 17 },
3284 /* 3064 */ { MAD_F(0x056eb47f) /* 0.339527604 */, 17 },
3285 /* 3065 */ { MAD_F(0x056f4f6e) /* 0.339675361 */, 17 },
3286 /* 3066 */ { MAD_F(0x056fea62) /* 0.339823134 */, 17 },
3287 /* 3067 */ { MAD_F(0x0570855a) /* 0.339970924 */, 17 },
3288 /* 3068 */ { MAD_F(0x05712056) /* 0.340118729 */, 17 },
3289 /* 3069 */ { MAD_F(0x0571bb56) /* 0.340266550 */, 17 },
3290 /* 3070 */ { MAD_F(0x0572565b) /* 0.340414388 */, 17 },
3291 /* 3071 */ { MAD_F(0x0572f164) /* 0.340562242 */, 17 },
3292
3293 /* 3072 */ { MAD_F(0x05738c72) /* 0.340710111 */, 17 },
3294 /* 3073 */ { MAD_F(0x05742784) /* 0.340857997 */, 17 },
3295 /* 3074 */ { MAD_F(0x0574c29a) /* 0.341005899 */, 17 },
3296 /* 3075 */ { MAD_F(0x05755db4) /* 0.341153816 */, 17 },
3297 /* 3076 */ { MAD_F(0x0575f8d3) /* 0.341301750 */, 17 },
3298 /* 3077 */ { MAD_F(0x057693f6) /* 0.341449700 */, 17 },
3299 /* 3078 */ { MAD_F(0x05772f1d) /* 0.341597666 */, 17 },
3300 /* 3079 */ { MAD_F(0x0577ca49) /* 0.341745648 */, 17 },
3301 /* 3080 */ { MAD_F(0x05786578) /* 0.341893646 */, 17 },
3302 /* 3081 */ { MAD_F(0x057900ad) /* 0.342041659 */, 17 },
3303 /* 3082 */ { MAD_F(0x05799be5) /* 0.342189689 */, 17 },
3304 /* 3083 */ { MAD_F(0x057a3722) /* 0.342337735 */, 17 },
3305 /* 3084 */ { MAD_F(0x057ad263) /* 0.342485797 */, 17 },
3306 /* 3085 */ { MAD_F(0x057b6da8) /* 0.342633875 */, 17 },
3307 /* 3086 */ { MAD_F(0x057c08f2) /* 0.342781969 */, 17 },
3308 /* 3087 */ { MAD_F(0x057ca440) /* 0.342930079 */, 17 },
3309
3310 /* 3088 */ { MAD_F(0x057d3f92) /* 0.343078205 */, 17 },
3311 /* 3089 */ { MAD_F(0x057ddae9) /* 0.343226347 */, 17 },
3312 /* 3090 */ { MAD_F(0x057e7644) /* 0.343374505 */, 17 },
3313 /* 3091 */ { MAD_F(0x057f11a3) /* 0.343522679 */, 17 },
3314 /* 3092 */ { MAD_F(0x057fad06) /* 0.343670869 */, 17 },
3315 /* 3093 */ { MAD_F(0x0580486e) /* 0.343819075 */, 17 },
3316 /* 3094 */ { MAD_F(0x0580e3da) /* 0.343967296 */, 17 },
3317 /* 3095 */ { MAD_F(0x05817f4a) /* 0.344115534 */, 17 },
3318 /* 3096 */ { MAD_F(0x05821abf) /* 0.344263788 */, 17 },
3319 /* 3097 */ { MAD_F(0x0582b638) /* 0.344412058 */, 17 },
3320 /* 3098 */ { MAD_F(0x058351b5) /* 0.344560343 */, 17 },
3321 /* 3099 */ { MAD_F(0x0583ed36) /* 0.344708645 */, 17 },
3322 /* 3100 */ { MAD_F(0x058488bc) /* 0.344856963 */, 17 },
3323 /* 3101 */ { MAD_F(0x05852446) /* 0.345005296 */, 17 },
3324 /* 3102 */ { MAD_F(0x0585bfd4) /* 0.345153646 */, 17 },
3325 /* 3103 */ { MAD_F(0x05865b67) /* 0.345302011 */, 17 },
3326
3327 /* 3104 */ { MAD_F(0x0586f6fd) /* 0.345450393 */, 17 },
3328 /* 3105 */ { MAD_F(0x05879298) /* 0.345598790 */, 17 },
3329 /* 3106 */ { MAD_F(0x05882e38) /* 0.345747203 */, 17 },
3330 /* 3107 */ { MAD_F(0x0588c9dc) /* 0.345895632 */, 17 },
3331 /* 3108 */ { MAD_F(0x05896583) /* 0.346044077 */, 17 },
3332 /* 3109 */ { MAD_F(0x058a0130) /* 0.346192538 */, 17 },
3333 /* 3110 */ { MAD_F(0x058a9ce0) /* 0.346341015 */, 17 },
3334 /* 3111 */ { MAD_F(0x058b3895) /* 0.346489508 */, 17 },
3335 /* 3112 */ { MAD_F(0x058bd44e) /* 0.346638017 */, 17 },
3336 /* 3113 */ { MAD_F(0x058c700b) /* 0.346786542 */, 17 },
3337 /* 3114 */ { MAD_F(0x058d0bcd) /* 0.346935082 */, 17 },
3338 /* 3115 */ { MAD_F(0x058da793) /* 0.347083639 */, 17 },
3339 /* 3116 */ { MAD_F(0x058e435d) /* 0.347232211 */, 17 },
3340 /* 3117 */ { MAD_F(0x058edf2b) /* 0.347380799 */, 17 },
3341 /* 3118 */ { MAD_F(0x058f7afe) /* 0.347529403 */, 17 },
3342 /* 3119 */ { MAD_F(0x059016d5) /* 0.347678023 */, 17 },
3343
3344 /* 3120 */ { MAD_F(0x0590b2b0) /* 0.347826659 */, 17 },
3345 /* 3121 */ { MAD_F(0x05914e8f) /* 0.347975311 */, 17 },
3346 /* 3122 */ { MAD_F(0x0591ea73) /* 0.348123979 */, 17 },
3347 /* 3123 */ { MAD_F(0x0592865b) /* 0.348272662 */, 17 },
3348 /* 3124 */ { MAD_F(0x05932247) /* 0.348421362 */, 17 },
3349 /* 3125 */ { MAD_F(0x0593be37) /* 0.348570077 */, 17 },
3350 /* 3126 */ { MAD_F(0x05945a2c) /* 0.348718808 */, 17 },
3351 /* 3127 */ { MAD_F(0x0594f625) /* 0.348867555 */, 17 },
3352 /* 3128 */ { MAD_F(0x05959222) /* 0.349016318 */, 17 },
3353 /* 3129 */ { MAD_F(0x05962e24) /* 0.349165097 */, 17 },
3354 /* 3130 */ { MAD_F(0x0596ca2a) /* 0.349313892 */, 17 },
3355 /* 3131 */ { MAD_F(0x05976634) /* 0.349462702 */, 17 },
3356 /* 3132 */ { MAD_F(0x05980242) /* 0.349611528 */, 17 },
3357 /* 3133 */ { MAD_F(0x05989e54) /* 0.349760370 */, 17 },
3358 /* 3134 */ { MAD_F(0x05993a6b) /* 0.349909228 */, 17 },
3359 /* 3135 */ { MAD_F(0x0599d686) /* 0.350058102 */, 17 },
3360
3361 /* 3136 */ { MAD_F(0x059a72a5) /* 0.350206992 */, 17 },
3362 /* 3137 */ { MAD_F(0x059b0ec9) /* 0.350355897 */, 17 },
3363 /* 3138 */ { MAD_F(0x059baaf1) /* 0.350504818 */, 17 },
3364 /* 3139 */ { MAD_F(0x059c471d) /* 0.350653756 */, 17 },
3365 /* 3140 */ { MAD_F(0x059ce34d) /* 0.350802708 */, 17 },
3366 /* 3141 */ { MAD_F(0x059d7f81) /* 0.350951677 */, 17 },
3367 /* 3142 */ { MAD_F(0x059e1bba) /* 0.351100662 */, 17 },
3368 /* 3143 */ { MAD_F(0x059eb7f7) /* 0.351249662 */, 17 },
3369 /* 3144 */ { MAD_F(0x059f5438) /* 0.351398678 */, 17 },
3370 /* 3145 */ { MAD_F(0x059ff07e) /* 0.351547710 */, 17 },
3371 /* 3146 */ { MAD_F(0x05a08cc7) /* 0.351696758 */, 17 },
3372 /* 3147 */ { MAD_F(0x05a12915) /* 0.351845821 */, 17 },
3373 /* 3148 */ { MAD_F(0x05a1c567) /* 0.351994901 */, 17 },
3374 /* 3149 */ { MAD_F(0x05a261be) /* 0.352143996 */, 17 },
3375 /* 3150 */ { MAD_F(0x05a2fe18) /* 0.352293107 */, 17 },
3376 /* 3151 */ { MAD_F(0x05a39a77) /* 0.352442233 */, 17 },
3377
3378 /* 3152 */ { MAD_F(0x05a436da) /* 0.352591376 */, 17 },
3379 /* 3153 */ { MAD_F(0x05a4d342) /* 0.352740534 */, 17 },
3380 /* 3154 */ { MAD_F(0x05a56fad) /* 0.352889708 */, 17 },
3381 /* 3155 */ { MAD_F(0x05a60c1d) /* 0.353038898 */, 17 },
3382 /* 3156 */ { MAD_F(0x05a6a891) /* 0.353188103 */, 17 },
3383 /* 3157 */ { MAD_F(0x05a7450a) /* 0.353337325 */, 17 },
3384 /* 3158 */ { MAD_F(0x05a7e186) /* 0.353486562 */, 17 },
3385 /* 3159 */ { MAD_F(0x05a87e07) /* 0.353635814 */, 17 },
3386 /* 3160 */ { MAD_F(0x05a91a8c) /* 0.353785083 */, 17 },
3387 /* 3161 */ { MAD_F(0x05a9b715) /* 0.353934367 */, 17 },
3388 /* 3162 */ { MAD_F(0x05aa53a2) /* 0.354083667 */, 17 },
3389 /* 3163 */ { MAD_F(0x05aaf034) /* 0.354232983 */, 17 },
3390 /* 3164 */ { MAD_F(0x05ab8cca) /* 0.354382314 */, 17 },
3391 /* 3165 */ { MAD_F(0x05ac2964) /* 0.354531662 */, 17 },
3392 /* 3166 */ { MAD_F(0x05acc602) /* 0.354681025 */, 17 },
3393 /* 3167 */ { MAD_F(0x05ad62a5) /* 0.354830403 */, 17 },
3394
3395 /* 3168 */ { MAD_F(0x05adff4c) /* 0.354979798 */, 17 },
3396 /* 3169 */ { MAD_F(0x05ae9bf7) /* 0.355129208 */, 17 },
3397 /* 3170 */ { MAD_F(0x05af38a6) /* 0.355278634 */, 17 },
3398 /* 3171 */ { MAD_F(0x05afd559) /* 0.355428075 */, 17 },
3399 /* 3172 */ { MAD_F(0x05b07211) /* 0.355577533 */, 17 },
3400 /* 3173 */ { MAD_F(0x05b10ecd) /* 0.355727006 */, 17 },
3401 /* 3174 */ { MAD_F(0x05b1ab8d) /* 0.355876494 */, 17 },
3402 /* 3175 */ { MAD_F(0x05b24851) /* 0.356025999 */, 17 },
3403 /* 3176 */ { MAD_F(0x05b2e51a) /* 0.356175519 */, 17 },
3404 /* 3177 */ { MAD_F(0x05b381e6) /* 0.356325054 */, 17 },
3405 /* 3178 */ { MAD_F(0x05b41eb7) /* 0.356474606 */, 17 },
3406 /* 3179 */ { MAD_F(0x05b4bb8c) /* 0.356624173 */, 17 },
3407 /* 3180 */ { MAD_F(0x05b55866) /* 0.356773756 */, 17 },
3408 /* 3181 */ { MAD_F(0x05b5f543) /* 0.356923354 */, 17 },
3409 /* 3182 */ { MAD_F(0x05b69225) /* 0.357072969 */, 17 },
3410 /* 3183 */ { MAD_F(0x05b72f0b) /* 0.357222598 */, 17 },
3411
3412 /* 3184 */ { MAD_F(0x05b7cbf5) /* 0.357372244 */, 17 },
3413 /* 3185 */ { MAD_F(0x05b868e3) /* 0.357521905 */, 17 },
3414 /* 3186 */ { MAD_F(0x05b905d6) /* 0.357671582 */, 17 },
3415 /* 3187 */ { MAD_F(0x05b9a2cd) /* 0.357821275 */, 17 },
3416 /* 3188 */ { MAD_F(0x05ba3fc8) /* 0.357970983 */, 17 },
3417 /* 3189 */ { MAD_F(0x05badcc7) /* 0.358120707 */, 17 },
3418 /* 3190 */ { MAD_F(0x05bb79ca) /* 0.358270446 */, 17 },
3419 /* 3191 */ { MAD_F(0x05bc16d2) /* 0.358420201 */, 17 },
3420 /* 3192 */ { MAD_F(0x05bcb3de) /* 0.358569972 */, 17 },
3421 /* 3193 */ { MAD_F(0x05bd50ee) /* 0.358719758 */, 17 },
3422 /* 3194 */ { MAD_F(0x05bdee02) /* 0.358869560 */, 17 },
3423 /* 3195 */ { MAD_F(0x05be8b1a) /* 0.359019378 */, 17 },
3424 /* 3196 */ { MAD_F(0x05bf2837) /* 0.359169211 */, 17 },
3425 /* 3197 */ { MAD_F(0x05bfc558) /* 0.359319060 */, 17 },
3426 /* 3198 */ { MAD_F(0x05c0627d) /* 0.359468925 */, 17 },
3427 /* 3199 */ { MAD_F(0x05c0ffa6) /* 0.359618805 */, 17 },
3428
3429 /* 3200 */ { MAD_F(0x05c19cd3) /* 0.359768701 */, 17 },
3430 /* 3201 */ { MAD_F(0x05c23a05) /* 0.359918612 */, 17 },
3431 /* 3202 */ { MAD_F(0x05c2d73a) /* 0.360068540 */, 17 },
3432 /* 3203 */ { MAD_F(0x05c37474) /* 0.360218482 */, 17 },
3433 /* 3204 */ { MAD_F(0x05c411b2) /* 0.360368440 */, 17 },
3434 /* 3205 */ { MAD_F(0x05c4aef5) /* 0.360518414 */, 17 },
3435 /* 3206 */ { MAD_F(0x05c54c3b) /* 0.360668404 */, 17 },
3436 /* 3207 */ { MAD_F(0x05c5e986) /* 0.360818409 */, 17 },
3437 /* 3208 */ { MAD_F(0x05c686d5) /* 0.360968429 */, 17 },
3438 /* 3209 */ { MAD_F(0x05c72428) /* 0.361118466 */, 17 },
3439 /* 3210 */ { MAD_F(0x05c7c17f) /* 0.361268517 */, 17 },
3440 /* 3211 */ { MAD_F(0x05c85eda) /* 0.361418585 */, 17 },
3441 /* 3212 */ { MAD_F(0x05c8fc3a) /* 0.361568668 */, 17 },
3442 /* 3213 */ { MAD_F(0x05c9999e) /* 0.361718766 */, 17 },
3443 /* 3214 */ { MAD_F(0x05ca3706) /* 0.361868881 */, 17 },
3444 /* 3215 */ { MAD_F(0x05cad472) /* 0.362019010 */, 17 },
3445
3446 /* 3216 */ { MAD_F(0x05cb71e2) /* 0.362169156 */, 17 },
3447 /* 3217 */ { MAD_F(0x05cc0f57) /* 0.362319316 */, 17 },
3448 /* 3218 */ { MAD_F(0x05ccaccf) /* 0.362469493 */, 17 },
3449 /* 3219 */ { MAD_F(0x05cd4a4c) /* 0.362619685 */, 17 },
3450 /* 3220 */ { MAD_F(0x05cde7cd) /* 0.362769892 */, 17 },
3451 /* 3221 */ { MAD_F(0x05ce8552) /* 0.362920115 */, 17 },
3452 /* 3222 */ { MAD_F(0x05cf22dc) /* 0.363070354 */, 17 },
3453 /* 3223 */ { MAD_F(0x05cfc069) /* 0.363220608 */, 17 },
3454 /* 3224 */ { MAD_F(0x05d05dfb) /* 0.363370878 */, 17 },
3455 /* 3225 */ { MAD_F(0x05d0fb91) /* 0.363521163 */, 17 },
3456 /* 3226 */ { MAD_F(0x05d1992b) /* 0.363671464 */, 17 },
3457 /* 3227 */ { MAD_F(0x05d236c9) /* 0.363821780 */, 17 },
3458 /* 3228 */ { MAD_F(0x05d2d46c) /* 0.363972112 */, 17 },
3459 /* 3229 */ { MAD_F(0x05d37212) /* 0.364122459 */, 17 },
3460 /* 3230 */ { MAD_F(0x05d40fbd) /* 0.364272822 */, 17 },
3461 /* 3231 */ { MAD_F(0x05d4ad6c) /* 0.364423200 */, 17 },
3462
3463 /* 3232 */ { MAD_F(0x05d54b1f) /* 0.364573594 */, 17 },
3464 /* 3233 */ { MAD_F(0x05d5e8d6) /* 0.364724004 */, 17 },
3465 /* 3234 */ { MAD_F(0x05d68691) /* 0.364874429 */, 17 },
3466 /* 3235 */ { MAD_F(0x05d72451) /* 0.365024869 */, 17 },
3467 /* 3236 */ { MAD_F(0x05d7c215) /* 0.365175325 */, 17 },
3468 /* 3237 */ { MAD_F(0x05d85fdc) /* 0.365325796 */, 17 },
3469 /* 3238 */ { MAD_F(0x05d8fda8) /* 0.365476283 */, 17 },
3470 /* 3239 */ { MAD_F(0x05d99b79) /* 0.365626786 */, 17 },
3471 /* 3240 */ { MAD_F(0x05da394d) /* 0.365777304 */, 17 },
3472 /* 3241 */ { MAD_F(0x05dad726) /* 0.365927837 */, 17 },
3473 /* 3242 */ { MAD_F(0x05db7502) /* 0.366078386 */, 17 },
3474 /* 3243 */ { MAD_F(0x05dc12e3) /* 0.366228950 */, 17 },
3475 /* 3244 */ { MAD_F(0x05dcb0c8) /* 0.366379530 */, 17 },
3476 /* 3245 */ { MAD_F(0x05dd4eb1) /* 0.366530125 */, 17 },
3477 /* 3246 */ { MAD_F(0x05ddec9e) /* 0.366680736 */, 17 },
3478 /* 3247 */ { MAD_F(0x05de8a90) /* 0.366831362 */, 17 },
3479
3480 /* 3248 */ { MAD_F(0x05df2885) /* 0.366982004 */, 17 },
3481 /* 3249 */ { MAD_F(0x05dfc67f) /* 0.367132661 */, 17 },
3482 /* 3250 */ { MAD_F(0x05e0647d) /* 0.367283334 */, 17 },
3483 /* 3251 */ { MAD_F(0x05e1027f) /* 0.367434022 */, 17 },
3484 /* 3252 */ { MAD_F(0x05e1a085) /* 0.367584725 */, 17 },
3485 /* 3253 */ { MAD_F(0x05e23e8f) /* 0.367735444 */, 17 },
3486 /* 3254 */ { MAD_F(0x05e2dc9e) /* 0.367886179 */, 17 },
3487 /* 3255 */ { MAD_F(0x05e37ab0) /* 0.368036929 */, 17 },
3488 /* 3256 */ { MAD_F(0x05e418c7) /* 0.368187694 */, 17 },
3489 /* 3257 */ { MAD_F(0x05e4b6e2) /* 0.368338475 */, 17 },
3490 /* 3258 */ { MAD_F(0x05e55501) /* 0.368489271 */, 17 },
3491 /* 3259 */ { MAD_F(0x05e5f324) /* 0.368640082 */, 17 },
3492 /* 3260 */ { MAD_F(0x05e6914c) /* 0.368790909 */, 17 },
3493 /* 3261 */ { MAD_F(0x05e72f77) /* 0.368941752 */, 17 },
3494 /* 3262 */ { MAD_F(0x05e7cda7) /* 0.369092610 */, 17 },
3495 /* 3263 */ { MAD_F(0x05e86bda) /* 0.369243483 */, 17 },
3496
3497 /* 3264 */ { MAD_F(0x05e90a12) /* 0.369394372 */, 17 },
3498 /* 3265 */ { MAD_F(0x05e9a84e) /* 0.369545276 */, 17 },
3499 /* 3266 */ { MAD_F(0x05ea468e) /* 0.369696195 */, 17 },
3500 /* 3267 */ { MAD_F(0x05eae4d3) /* 0.369847130 */, 17 },
3501 /* 3268 */ { MAD_F(0x05eb831b) /* 0.369998080 */, 17 },
3502 /* 3269 */ { MAD_F(0x05ec2168) /* 0.370149046 */, 17 },
3503 /* 3270 */ { MAD_F(0x05ecbfb8) /* 0.370300027 */, 17 },
3504 /* 3271 */ { MAD_F(0x05ed5e0d) /* 0.370451024 */, 17 },
3505 /* 3272 */ { MAD_F(0x05edfc66) /* 0.370602036 */, 17 },
3506 /* 3273 */ { MAD_F(0x05ee9ac3) /* 0.370753063 */, 17 },
3507 /* 3274 */ { MAD_F(0x05ef3924) /* 0.370904105 */, 17 },
3508 /* 3275 */ { MAD_F(0x05efd78a) /* 0.371055163 */, 17 },
3509 /* 3276 */ { MAD_F(0x05f075f3) /* 0.371206237 */, 17 },
3510 /* 3277 */ { MAD_F(0x05f11461) /* 0.371357326 */, 17 },
3511 /* 3278 */ { MAD_F(0x05f1b2d3) /* 0.371508430 */, 17 },
3512 /* 3279 */ { MAD_F(0x05f25148) /* 0.371659549 */, 17 },
3513
3514 /* 3280 */ { MAD_F(0x05f2efc2) /* 0.371810684 */, 17 },
3515 /* 3281 */ { MAD_F(0x05f38e40) /* 0.371961834 */, 17 },
3516 /* 3282 */ { MAD_F(0x05f42cc3) /* 0.372113000 */, 17 },
3517 /* 3283 */ { MAD_F(0x05f4cb49) /* 0.372264181 */, 17 },
3518 /* 3284 */ { MAD_F(0x05f569d3) /* 0.372415377 */, 17 },
3519 /* 3285 */ { MAD_F(0x05f60862) /* 0.372566589 */, 17 },
3520 /* 3286 */ { MAD_F(0x05f6a6f5) /* 0.372717816 */, 17 },
3521 /* 3287 */ { MAD_F(0x05f7458b) /* 0.372869058 */, 17 },
3522 /* 3288 */ { MAD_F(0x05f7e426) /* 0.373020316 */, 17 },
3523 /* 3289 */ { MAD_F(0x05f882c5) /* 0.373171589 */, 17 },
3524 /* 3290 */ { MAD_F(0x05f92169) /* 0.373322877 */, 17 },
3525 /* 3291 */ { MAD_F(0x05f9c010) /* 0.373474181 */, 17 },
3526 /* 3292 */ { MAD_F(0x05fa5ebb) /* 0.373625500 */, 17 },
3527 /* 3293 */ { MAD_F(0x05fafd6b) /* 0.373776834 */, 17 },
3528 /* 3294 */ { MAD_F(0x05fb9c1e) /* 0.373928184 */, 17 },
3529 /* 3295 */ { MAD_F(0x05fc3ad6) /* 0.374079549 */, 17 },
3530
3531 /* 3296 */ { MAD_F(0x05fcd992) /* 0.374230929 */, 17 },
3532 /* 3297 */ { MAD_F(0x05fd7852) /* 0.374382325 */, 17 },
3533 /* 3298 */ { MAD_F(0x05fe1716) /* 0.374533735 */, 17 },
3534 /* 3299 */ { MAD_F(0x05feb5de) /* 0.374685162 */, 17 },
3535 /* 3300 */ { MAD_F(0x05ff54aa) /* 0.374836603 */, 17 },
3536 /* 3301 */ { MAD_F(0x05fff37b) /* 0.374988060 */, 17 },
3537 /* 3302 */ { MAD_F(0x0600924f) /* 0.375139532 */, 17 },
3538 /* 3303 */ { MAD_F(0x06013128) /* 0.375291019 */, 17 },
3539 /* 3304 */ { MAD_F(0x0601d004) /* 0.375442522 */, 17 },
3540 /* 3305 */ { MAD_F(0x06026ee5) /* 0.375594040 */, 17 },
3541 /* 3306 */ { MAD_F(0x06030dca) /* 0.375745573 */, 17 },
3542 /* 3307 */ { MAD_F(0x0603acb3) /* 0.375897122 */, 17 },
3543 /* 3308 */ { MAD_F(0x06044ba0) /* 0.376048685 */, 17 },
3544 /* 3309 */ { MAD_F(0x0604ea91) /* 0.376200265 */, 17 },
3545 /* 3310 */ { MAD_F(0x06058987) /* 0.376351859 */, 17 },
3546 /* 3311 */ { MAD_F(0x06062880) /* 0.376503468 */, 17 },
3547
3548 /* 3312 */ { MAD_F(0x0606c77d) /* 0.376655093 */, 17 },
3549 /* 3313 */ { MAD_F(0x0607667f) /* 0.376806733 */, 17 },
3550 /* 3314 */ { MAD_F(0x06080585) /* 0.376958389 */, 17 },
3551 /* 3315 */ { MAD_F(0x0608a48f) /* 0.377110059 */, 17 },
3552 /* 3316 */ { MAD_F(0x0609439c) /* 0.377261745 */, 17 },
3553 /* 3317 */ { MAD_F(0x0609e2ae) /* 0.377413446 */, 17 },
3554 /* 3318 */ { MAD_F(0x060a81c4) /* 0.377565163 */, 17 },
3555 /* 3319 */ { MAD_F(0x060b20df) /* 0.377716894 */, 17 },
3556 /* 3320 */ { MAD_F(0x060bbffd) /* 0.377868641 */, 17 },
3557 /* 3321 */ { MAD_F(0x060c5f1f) /* 0.378020403 */, 17 },
3558 /* 3322 */ { MAD_F(0x060cfe46) /* 0.378172181 */, 17 },
3559 /* 3323 */ { MAD_F(0x060d9d70) /* 0.378323973 */, 17 },
3560 /* 3324 */ { MAD_F(0x060e3c9f) /* 0.378475781 */, 17 },
3561 /* 3325 */ { MAD_F(0x060edbd1) /* 0.378627604 */, 17 },
3562 /* 3326 */ { MAD_F(0x060f7b08) /* 0.378779442 */, 17 },
3563 /* 3327 */ { MAD_F(0x06101a43) /* 0.378931296 */, 17 },
3564
3565 /* 3328 */ { MAD_F(0x0610b982) /* 0.379083164 */, 17 },
3566 /* 3329 */ { MAD_F(0x061158c5) /* 0.379235048 */, 17 },
3567 /* 3330 */ { MAD_F(0x0611f80c) /* 0.379386947 */, 17 },
3568 /* 3331 */ { MAD_F(0x06129757) /* 0.379538862 */, 17 },
3569 /* 3332 */ { MAD_F(0x061336a6) /* 0.379690791 */, 17 },
3570 /* 3333 */ { MAD_F(0x0613d5fa) /* 0.379842736 */, 17 },
3571 /* 3334 */ { MAD_F(0x06147551) /* 0.379994696 */, 17 },
3572 /* 3335 */ { MAD_F(0x061514ad) /* 0.380146671 */, 17 },
3573 /* 3336 */ { MAD_F(0x0615b40c) /* 0.380298661 */, 17 },
3574 /* 3337 */ { MAD_F(0x06165370) /* 0.380450666 */, 17 },
3575 /* 3338 */ { MAD_F(0x0616f2d8) /* 0.380602687 */, 17 },
3576 /* 3339 */ { MAD_F(0x06179243) /* 0.380754723 */, 17 },
3577 /* 3340 */ { MAD_F(0x061831b3) /* 0.380906774 */, 17 },
3578 /* 3341 */ { MAD_F(0x0618d127) /* 0.381058840 */, 17 },
3579 /* 3342 */ { MAD_F(0x0619709f) /* 0.381210921 */, 17 },
3580 /* 3343 */ { MAD_F(0x061a101b) /* 0.381363018 */, 17 },
3581
3582 /* 3344 */ { MAD_F(0x061aaf9c) /* 0.381515130 */, 17 },
3583 /* 3345 */ { MAD_F(0x061b4f20) /* 0.381667257 */, 17 },
3584 /* 3346 */ { MAD_F(0x061beea8) /* 0.381819399 */, 17 },
3585 /* 3347 */ { MAD_F(0x061c8e34) /* 0.381971556 */, 17 },
3586 /* 3348 */ { MAD_F(0x061d2dc5) /* 0.382123728 */, 17 },
3587 /* 3349 */ { MAD_F(0x061dcd59) /* 0.382275916 */, 17 },
3588 /* 3350 */ { MAD_F(0x061e6cf2) /* 0.382428118 */, 17 },
3589 /* 3351 */ { MAD_F(0x061f0c8f) /* 0.382580336 */, 17 },
3590 /* 3352 */ { MAD_F(0x061fac2f) /* 0.382732569 */, 17 },
3591 /* 3353 */ { MAD_F(0x06204bd4) /* 0.382884817 */, 17 },
3592 /* 3354 */ { MAD_F(0x0620eb7d) /* 0.383037080 */, 17 },
3593 /* 3355 */ { MAD_F(0x06218b2a) /* 0.383189358 */, 17 },
3594 /* 3356 */ { MAD_F(0x06222adb) /* 0.383341652 */, 17 },
3595 /* 3357 */ { MAD_F(0x0622ca90) /* 0.383493960 */, 17 },
3596 /* 3358 */ { MAD_F(0x06236a49) /* 0.383646284 */, 17 },
3597 /* 3359 */ { MAD_F(0x06240a06) /* 0.383798623 */, 17 },
3598
3599 /* 3360 */ { MAD_F(0x0624a9c7) /* 0.383950977 */, 17 },
3600 /* 3361 */ { MAD_F(0x0625498d) /* 0.384103346 */, 17 },
3601 /* 3362 */ { MAD_F(0x0625e956) /* 0.384255730 */, 17 },
3602 /* 3363 */ { MAD_F(0x06268923) /* 0.384408129 */, 17 },
3603 /* 3364 */ { MAD_F(0x062728f5) /* 0.384560544 */, 17 },
3604 /* 3365 */ { MAD_F(0x0627c8ca) /* 0.384712973 */, 17 },
3605 /* 3366 */ { MAD_F(0x062868a4) /* 0.384865418 */, 17 },
3606 /* 3367 */ { MAD_F(0x06290881) /* 0.385017878 */, 17 },
3607 /* 3368 */ { MAD_F(0x0629a863) /* 0.385170352 */, 17 },
3608 /* 3369 */ { MAD_F(0x062a4849) /* 0.385322842 */, 17 },
3609 /* 3370 */ { MAD_F(0x062ae832) /* 0.385475347 */, 17 },
3610 /* 3371 */ { MAD_F(0x062b8820) /* 0.385627867 */, 17 },
3611 /* 3372 */ { MAD_F(0x062c2812) /* 0.385780402 */, 17 },
3612 /* 3373 */ { MAD_F(0x062cc808) /* 0.385932953 */, 17 },
3613 /* 3374 */ { MAD_F(0x062d6802) /* 0.386085518 */, 17 },
3614 /* 3375 */ { MAD_F(0x062e0800) /* 0.386238098 */, 17 },
3615
3616 /* 3376 */ { MAD_F(0x062ea802) /* 0.386390694 */, 17 },
3617 /* 3377 */ { MAD_F(0x062f4808) /* 0.386543304 */, 17 },
3618 /* 3378 */ { MAD_F(0x062fe812) /* 0.386695930 */, 17 },
3619 /* 3379 */ { MAD_F(0x06308820) /* 0.386848570 */, 17 },
3620 /* 3380 */ { MAD_F(0x06312832) /* 0.387001226 */, 17 },
3621 /* 3381 */ { MAD_F(0x0631c849) /* 0.387153897 */, 17 },
3622 /* 3382 */ { MAD_F(0x06326863) /* 0.387306582 */, 17 },
3623 /* 3383 */ { MAD_F(0x06330881) /* 0.387459283 */, 17 },
3624 /* 3384 */ { MAD_F(0x0633a8a3) /* 0.387611999 */, 17 },
3625 /* 3385 */ { MAD_F(0x063448ca) /* 0.387764730 */, 17 },
3626 /* 3386 */ { MAD_F(0x0634e8f4) /* 0.387917476 */, 17 },
3627 /* 3387 */ { MAD_F(0x06358923) /* 0.388070237 */, 17 },
3628 /* 3388 */ { MAD_F(0x06362955) /* 0.388223013 */, 17 },
3629 /* 3389 */ { MAD_F(0x0636c98c) /* 0.388375804 */, 17 },
3630 /* 3390 */ { MAD_F(0x063769c6) /* 0.388528610 */, 17 },
3631 /* 3391 */ { MAD_F(0x06380a05) /* 0.388681431 */, 17 },
3632
3633 /* 3392 */ { MAD_F(0x0638aa48) /* 0.388834268 */, 17 },
3634 /* 3393 */ { MAD_F(0x06394a8e) /* 0.388987119 */, 17 },
3635 /* 3394 */ { MAD_F(0x0639ead9) /* 0.389139985 */, 17 },
3636 /* 3395 */ { MAD_F(0x063a8b28) /* 0.389292866 */, 17 },
3637 /* 3396 */ { MAD_F(0x063b2b7b) /* 0.389445762 */, 17 },
3638 /* 3397 */ { MAD_F(0x063bcbd1) /* 0.389598674 */, 17 },
3639 /* 3398 */ { MAD_F(0x063c6c2c) /* 0.389751600 */, 17 },
3640 /* 3399 */ { MAD_F(0x063d0c8b) /* 0.389904541 */, 17 },
3641 /* 3400 */ { MAD_F(0x063dacee) /* 0.390057497 */, 17 },
3642 /* 3401 */ { MAD_F(0x063e4d55) /* 0.390210468 */, 17 },
3643 /* 3402 */ { MAD_F(0x063eedc0) /* 0.390363455 */, 17 },
3644 /* 3403 */ { MAD_F(0x063f8e2f) /* 0.390516456 */, 17 },
3645 /* 3404 */ { MAD_F(0x06402ea2) /* 0.390669472 */, 17 },
3646 /* 3405 */ { MAD_F(0x0640cf19) /* 0.390822503 */, 17 },
3647 /* 3406 */ { MAD_F(0x06416f94) /* 0.390975549 */, 17 },
3648 /* 3407 */ { MAD_F(0x06421013) /* 0.391128611 */, 17 },
3649
3650 /* 3408 */ { MAD_F(0x0642b096) /* 0.391281687 */, 17 },
3651 /* 3409 */ { MAD_F(0x0643511d) /* 0.391434778 */, 17 },
3652 /* 3410 */ { MAD_F(0x0643f1a8) /* 0.391587884 */, 17 },
3653 /* 3411 */ { MAD_F(0x06449237) /* 0.391741005 */, 17 },
3654 /* 3412 */ { MAD_F(0x064532ca) /* 0.391894141 */, 17 },
3655 /* 3413 */ { MAD_F(0x0645d361) /* 0.392047292 */, 17 },
3656 /* 3414 */ { MAD_F(0x064673fc) /* 0.392200458 */, 17 },
3657 /* 3415 */ { MAD_F(0x0647149c) /* 0.392353638 */, 17 },
3658 /* 3416 */ { MAD_F(0x0647b53f) /* 0.392506834 */, 17 },
3659 /* 3417 */ { MAD_F(0x064855e6) /* 0.392660045 */, 17 },
3660 /* 3418 */ { MAD_F(0x0648f691) /* 0.392813271 */, 17 },
3661 /* 3419 */ { MAD_F(0x06499740) /* 0.392966511 */, 17 },
3662 /* 3420 */ { MAD_F(0x064a37f4) /* 0.393119767 */, 17 },
3663 /* 3421 */ { MAD_F(0x064ad8ab) /* 0.393273038 */, 17 },
3664 /* 3422 */ { MAD_F(0x064b7966) /* 0.393426323 */, 17 },
3665 /* 3423 */ { MAD_F(0x064c1a25) /* 0.393579623 */, 17 },
3666
3667 /* 3424 */ { MAD_F(0x064cbae9) /* 0.393732939 */, 17 },
3668 /* 3425 */ { MAD_F(0x064d5bb0) /* 0.393886269 */, 17 },
3669 /* 3426 */ { MAD_F(0x064dfc7b) /* 0.394039614 */, 17 },
3670 /* 3427 */ { MAD_F(0x064e9d4b) /* 0.394192974 */, 17 },
3671 /* 3428 */ { MAD_F(0x064f3e1e) /* 0.394346349 */, 17 },
3672 /* 3429 */ { MAD_F(0x064fdef5) /* 0.394499739 */, 17 },
3673 /* 3430 */ { MAD_F(0x06507fd0) /* 0.394653144 */, 17 },
3674 /* 3431 */ { MAD_F(0x065120b0) /* 0.394806564 */, 17 },
3675 /* 3432 */ { MAD_F(0x0651c193) /* 0.394959999 */, 17 },
3676 /* 3433 */ { MAD_F(0x0652627a) /* 0.395113448 */, 17 },
3677 /* 3434 */ { MAD_F(0x06530366) /* 0.395266913 */, 17 },
3678 /* 3435 */ { MAD_F(0x0653a455) /* 0.395420392 */, 17 },
3679 /* 3436 */ { MAD_F(0x06544548) /* 0.395573886 */, 17 },
3680 /* 3437 */ { MAD_F(0x0654e640) /* 0.395727395 */, 17 },
3681 /* 3438 */ { MAD_F(0x0655873b) /* 0.395880919 */, 17 },
3682 /* 3439 */ { MAD_F(0x0656283a) /* 0.396034458 */, 17 },
3683
3684 /* 3440 */ { MAD_F(0x0656c93d) /* 0.396188012 */, 17 },
3685 /* 3441 */ { MAD_F(0x06576a45) /* 0.396341581 */, 17 },
3686 /* 3442 */ { MAD_F(0x06580b50) /* 0.396495164 */, 17 },
3687 /* 3443 */ { MAD_F(0x0658ac5f) /* 0.396648763 */, 17 },
3688 /* 3444 */ { MAD_F(0x06594d73) /* 0.396802376 */, 17 },
3689 /* 3445 */ { MAD_F(0x0659ee8a) /* 0.396956004 */, 17 },
3690 /* 3446 */ { MAD_F(0x065a8fa5) /* 0.397109647 */, 17 },
3691 /* 3447 */ { MAD_F(0x065b30c4) /* 0.397263305 */, 17 },
3692 /* 3448 */ { MAD_F(0x065bd1e7) /* 0.397416978 */, 17 },
3693 /* 3449 */ { MAD_F(0x065c730f) /* 0.397570666 */, 17 },
3694 /* 3450 */ { MAD_F(0x065d143a) /* 0.397724368 */, 17 },
3695 /* 3451 */ { MAD_F(0x065db569) /* 0.397878085 */, 17 },
3696 /* 3452 */ { MAD_F(0x065e569c) /* 0.398031818 */, 17 },
3697 /* 3453 */ { MAD_F(0x065ef7d3) /* 0.398185565 */, 17 },
3698 /* 3454 */ { MAD_F(0x065f990e) /* 0.398339326 */, 17 },
3699 /* 3455 */ { MAD_F(0x06603a4e) /* 0.398493103 */, 17 },
3700
3701 /* 3456 */ { MAD_F(0x0660db91) /* 0.398646895 */, 17 },
3702 /* 3457 */ { MAD_F(0x06617cd8) /* 0.398800701 */, 17 },
3703 /* 3458 */ { MAD_F(0x06621e23) /* 0.398954522 */, 17 },
3704 /* 3459 */ { MAD_F(0x0662bf72) /* 0.399108358 */, 17 },
3705 /* 3460 */ { MAD_F(0x066360c5) /* 0.399262209 */, 17 },
3706 /* 3461 */ { MAD_F(0x0664021c) /* 0.399416075 */, 17 },
3707 /* 3462 */ { MAD_F(0x0664a377) /* 0.399569955 */, 17 },
3708 /* 3463 */ { MAD_F(0x066544d6) /* 0.399723851 */, 17 },
3709 /* 3464 */ { MAD_F(0x0665e639) /* 0.399877761 */, 17 },
3710 /* 3465 */ { MAD_F(0x066687a0) /* 0.400031686 */, 17 },
3711 /* 3466 */ { MAD_F(0x0667290b) /* 0.400185625 */, 17 },
3712 /* 3467 */ { MAD_F(0x0667ca79) /* 0.400339580 */, 17 },
3713 /* 3468 */ { MAD_F(0x06686bec) /* 0.400493549 */, 17 },
3714 /* 3469 */ { MAD_F(0x06690d63) /* 0.400647534 */, 17 },
3715 /* 3470 */ { MAD_F(0x0669aede) /* 0.400801533 */, 17 },
3716 /* 3471 */ { MAD_F(0x066a505d) /* 0.400955546 */, 17 },
3717
3718 /* 3472 */ { MAD_F(0x066af1df) /* 0.401109575 */, 17 },
3719 /* 3473 */ { MAD_F(0x066b9366) /* 0.401263618 */, 17 },
3720 /* 3474 */ { MAD_F(0x066c34f1) /* 0.401417676 */, 17 },
3721 /* 3475 */ { MAD_F(0x066cd67f) /* 0.401571749 */, 17 },
3722 /* 3476 */ { MAD_F(0x066d7812) /* 0.401725837 */, 17 },
3723 /* 3477 */ { MAD_F(0x066e19a9) /* 0.401879939 */, 17 },
3724 /* 3478 */ { MAD_F(0x066ebb43) /* 0.402034056 */, 17 },
3725 /* 3479 */ { MAD_F(0x066f5ce2) /* 0.402188188 */, 17 },
3726 /* 3480 */ { MAD_F(0x066ffe84) /* 0.402342335 */, 17 },
3727 /* 3481 */ { MAD_F(0x0670a02a) /* 0.402496497 */, 17 },
3728 /* 3482 */ { MAD_F(0x067141d5) /* 0.402650673 */, 17 },
3729 /* 3483 */ { MAD_F(0x0671e383) /* 0.402804864 */, 17 },
3730 /* 3484 */ { MAD_F(0x06728535) /* 0.402959070 */, 17 },
3731 /* 3485 */ { MAD_F(0x067326ec) /* 0.403113291 */, 17 },
3732 /* 3486 */ { MAD_F(0x0673c8a6) /* 0.403267526 */, 17 },
3733 /* 3487 */ { MAD_F(0x06746a64) /* 0.403421776 */, 17 },
3734
3735 /* 3488 */ { MAD_F(0x06750c26) /* 0.403576041 */, 17 },
3736 /* 3489 */ { MAD_F(0x0675adec) /* 0.403730320 */, 17 },
3737 /* 3490 */ { MAD_F(0x06764fb6) /* 0.403884615 */, 17 },
3738 /* 3491 */ { MAD_F(0x0676f184) /* 0.404038924 */, 17 },
3739 /* 3492 */ { MAD_F(0x06779356) /* 0.404193247 */, 17 },
3740 /* 3493 */ { MAD_F(0x0678352c) /* 0.404347586 */, 17 },
3741 /* 3494 */ { MAD_F(0x0678d706) /* 0.404501939 */, 17 },
3742 /* 3495 */ { MAD_F(0x067978e4) /* 0.404656307 */, 17 },
3743 /* 3496 */ { MAD_F(0x067a1ac6) /* 0.404810690 */, 17 },
3744 /* 3497 */ { MAD_F(0x067abcac) /* 0.404965087 */, 17 },
3745 /* 3498 */ { MAD_F(0x067b5e95) /* 0.405119499 */, 17 },
3746 /* 3499 */ { MAD_F(0x067c0083) /* 0.405273926 */, 17 },
3747 /* 3500 */ { MAD_F(0x067ca275) /* 0.405428368 */, 17 },
3748 /* 3501 */ { MAD_F(0x067d446a) /* 0.405582824 */, 17 },
3749 /* 3502 */ { MAD_F(0x067de664) /* 0.405737295 */, 17 },
3750 /* 3503 */ { MAD_F(0x067e8861) /* 0.405891781 */, 17 },
3751
3752 /* 3504 */ { MAD_F(0x067f2a62) /* 0.406046281 */, 17 },
3753 /* 3505 */ { MAD_F(0x067fcc68) /* 0.406200796 */, 17 },
3754 /* 3506 */ { MAD_F(0x06806e71) /* 0.406355326 */, 17 },
3755 /* 3507 */ { MAD_F(0x0681107e) /* 0.406509870 */, 17 },
3756 /* 3508 */ { MAD_F(0x0681b28f) /* 0.406664429 */, 17 },
3757 /* 3509 */ { MAD_F(0x068254a4) /* 0.406819003 */, 17 },
3758 /* 3510 */ { MAD_F(0x0682f6bd) /* 0.406973592 */, 17 },
3759 /* 3511 */ { MAD_F(0x068398da) /* 0.407128195 */, 17 },
3760 /* 3512 */ { MAD_F(0x06843afb) /* 0.407282813 */, 17 },
3761 /* 3513 */ { MAD_F(0x0684dd20) /* 0.407437445 */, 17 },
3762 /* 3514 */ { MAD_F(0x06857f49) /* 0.407592093 */, 17 },
3763 /* 3515 */ { MAD_F(0x06862176) /* 0.407746754 */, 17 },
3764 /* 3516 */ { MAD_F(0x0686c3a6) /* 0.407901431 */, 17 },
3765 /* 3517 */ { MAD_F(0x068765db) /* 0.408056122 */, 17 },
3766 /* 3518 */ { MAD_F(0x06880814) /* 0.408210828 */, 17 },
3767 /* 3519 */ { MAD_F(0x0688aa50) /* 0.408365549 */, 17 },
3768
3769 /* 3520 */ { MAD_F(0x06894c90) /* 0.408520284 */, 17 },
3770 /* 3521 */ { MAD_F(0x0689eed5) /* 0.408675034 */, 17 },
3771 /* 3522 */ { MAD_F(0x068a911d) /* 0.408829798 */, 17 },
3772 /* 3523 */ { MAD_F(0x068b3369) /* 0.408984577 */, 17 },
3773 /* 3524 */ { MAD_F(0x068bd5b9) /* 0.409139371 */, 17 },
3774 /* 3525 */ { MAD_F(0x068c780e) /* 0.409294180 */, 17 },
3775 /* 3526 */ { MAD_F(0x068d1a66) /* 0.409449003 */, 17 },
3776 /* 3527 */ { MAD_F(0x068dbcc1) /* 0.409603840 */, 17 },
3777 /* 3528 */ { MAD_F(0x068e5f21) /* 0.409758693 */, 17 },
3778 /* 3529 */ { MAD_F(0x068f0185) /* 0.409913560 */, 17 },
3779 /* 3530 */ { MAD_F(0x068fa3ed) /* 0.410068441 */, 17 },
3780 /* 3531 */ { MAD_F(0x06904658) /* 0.410223338 */, 17 },
3781 /* 3532 */ { MAD_F(0x0690e8c8) /* 0.410378249 */, 17 },
3782 /* 3533 */ { MAD_F(0x06918b3c) /* 0.410533174 */, 17 },
3783 /* 3534 */ { MAD_F(0x06922db3) /* 0.410688114 */, 17 },
3784 /* 3535 */ { MAD_F(0x0692d02e) /* 0.410843069 */, 17 },
3785
3786 /* 3536 */ { MAD_F(0x069372ae) /* 0.410998038 */, 17 },
3787 /* 3537 */ { MAD_F(0x06941531) /* 0.411153022 */, 17 },
3788 /* 3538 */ { MAD_F(0x0694b7b8) /* 0.411308021 */, 17 },
3789 /* 3539 */ { MAD_F(0x06955a43) /* 0.411463034 */, 17 },
3790 /* 3540 */ { MAD_F(0x0695fcd2) /* 0.411618062 */, 17 },
3791 /* 3541 */ { MAD_F(0x06969f65) /* 0.411773104 */, 17 },
3792 /* 3542 */ { MAD_F(0x069741fb) /* 0.411928161 */, 17 },
3793 /* 3543 */ { MAD_F(0x0697e496) /* 0.412083232 */, 17 },
3794 /* 3544 */ { MAD_F(0x06988735) /* 0.412238319 */, 17 },
3795 /* 3545 */ { MAD_F(0x069929d7) /* 0.412393419 */, 17 },
3796 /* 3546 */ { MAD_F(0x0699cc7e) /* 0.412548535 */, 17 },
3797 /* 3547 */ { MAD_F(0x069a6f28) /* 0.412703664 */, 17 },
3798 /* 3548 */ { MAD_F(0x069b11d6) /* 0.412858809 */, 17 },
3799 /* 3549 */ { MAD_F(0x069bb489) /* 0.413013968 */, 17 },
3800 /* 3550 */ { MAD_F(0x069c573f) /* 0.413169142 */, 17 },
3801 /* 3551 */ { MAD_F(0x069cf9f9) /* 0.413324330 */, 17 },
3802
3803 /* 3552 */ { MAD_F(0x069d9cb7) /* 0.413479532 */, 17 },
3804 /* 3553 */ { MAD_F(0x069e3f78) /* 0.413634750 */, 17 },
3805 /* 3554 */ { MAD_F(0x069ee23e) /* 0.413789982 */, 17 },
3806 /* 3555 */ { MAD_F(0x069f8508) /* 0.413945228 */, 17 },
3807 /* 3556 */ { MAD_F(0x06a027d5) /* 0.414100489 */, 17 },
3808 /* 3557 */ { MAD_F(0x06a0caa7) /* 0.414255765 */, 17 },
3809 /* 3558 */ { MAD_F(0x06a16d7c) /* 0.414411055 */, 17 },
3810 /* 3559 */ { MAD_F(0x06a21055) /* 0.414566359 */, 17 },
3811 /* 3560 */ { MAD_F(0x06a2b333) /* 0.414721679 */, 17 },
3812 /* 3561 */ { MAD_F(0x06a35614) /* 0.414877012 */, 17 },
3813 /* 3562 */ { MAD_F(0x06a3f8f9) /* 0.415032361 */, 17 },
3814 /* 3563 */ { MAD_F(0x06a49be2) /* 0.415187723 */, 17 },
3815 /* 3564 */ { MAD_F(0x06a53ece) /* 0.415343101 */, 17 },
3816 /* 3565 */ { MAD_F(0x06a5e1bf) /* 0.415498493 */, 17 },
3817 /* 3566 */ { MAD_F(0x06a684b4) /* 0.415653899 */, 17 },
3818 /* 3567 */ { MAD_F(0x06a727ac) /* 0.415809320 */, 17 },
3819
3820 /* 3568 */ { MAD_F(0x06a7caa9) /* 0.415964756 */, 17 },
3821 /* 3569 */ { MAD_F(0x06a86da9) /* 0.416120206 */, 17 },
3822 /* 3570 */ { MAD_F(0x06a910ad) /* 0.416275670 */, 17 },
3823 /* 3571 */ { MAD_F(0x06a9b3b5) /* 0.416431149 */, 17 },
3824 /* 3572 */ { MAD_F(0x06aa56c1) /* 0.416586643 */, 17 },
3825 /* 3573 */ { MAD_F(0x06aaf9d1) /* 0.416742151 */, 17 },
3826 /* 3574 */ { MAD_F(0x06ab9ce5) /* 0.416897673 */, 17 },
3827 /* 3575 */ { MAD_F(0x06ac3ffc) /* 0.417053210 */, 17 },
3828 /* 3576 */ { MAD_F(0x06ace318) /* 0.417208762 */, 17 },
3829 /* 3577 */ { MAD_F(0x06ad8637) /* 0.417364328 */, 17 },
3830 /* 3578 */ { MAD_F(0x06ae295b) /* 0.417519909 */, 17 },
3831 /* 3579 */ { MAD_F(0x06aecc82) /* 0.417675504 */, 17 },
3832 /* 3580 */ { MAD_F(0x06af6fad) /* 0.417831113 */, 17 },
3833 /* 3581 */ { MAD_F(0x06b012dc) /* 0.417986737 */, 17 },
3834 /* 3582 */ { MAD_F(0x06b0b60f) /* 0.418142376 */, 17 },
3835 /* 3583 */ { MAD_F(0x06b15946) /* 0.418298029 */, 17 },
3836
3837 /* 3584 */ { MAD_F(0x06b1fc81) /* 0.418453696 */, 17 },
3838 /* 3585 */ { MAD_F(0x06b29fbf) /* 0.418609378 */, 17 },
3839 /* 3586 */ { MAD_F(0x06b34302) /* 0.418765075 */, 17 },
3840 /* 3587 */ { MAD_F(0x06b3e648) /* 0.418920786 */, 17 },
3841 /* 3588 */ { MAD_F(0x06b48992) /* 0.419076511 */, 17 },
3842 /* 3589 */ { MAD_F(0x06b52ce0) /* 0.419232251 */, 17 },
3843 /* 3590 */ { MAD_F(0x06b5d032) /* 0.419388005 */, 17 },
3844 /* 3591 */ { MAD_F(0x06b67388) /* 0.419543774 */, 17 },
3845 /* 3592 */ { MAD_F(0x06b716e2) /* 0.419699557 */, 17 },
3846 /* 3593 */ { MAD_F(0x06b7ba3f) /* 0.419855355 */, 17 },
3847 /* 3594 */ { MAD_F(0x06b85da1) /* 0.420011167 */, 17 },
3848 /* 3595 */ { MAD_F(0x06b90106) /* 0.420166994 */, 17 },
3849 /* 3596 */ { MAD_F(0x06b9a470) /* 0.420322835 */, 17 },
3850 /* 3597 */ { MAD_F(0x06ba47dd) /* 0.420478690 */, 17 },
3851 /* 3598 */ { MAD_F(0x06baeb4e) /* 0.420634560 */, 17 },
3852 /* 3599 */ { MAD_F(0x06bb8ec3) /* 0.420790445 */, 17 },
3853
3854 /* 3600 */ { MAD_F(0x06bc323b) /* 0.420946343 */, 17 },
3855 /* 3601 */ { MAD_F(0x06bcd5b8) /* 0.421102257 */, 17 },
3856 /* 3602 */ { MAD_F(0x06bd7939) /* 0.421258184 */, 17 },
3857 /* 3603 */ { MAD_F(0x06be1cbd) /* 0.421414127 */, 17 },
3858 /* 3604 */ { MAD_F(0x06bec045) /* 0.421570083 */, 17 },
3859 /* 3605 */ { MAD_F(0x06bf63d1) /* 0.421726054 */, 17 },
3860 /* 3606 */ { MAD_F(0x06c00761) /* 0.421882040 */, 17 },
3861 /* 3607 */ { MAD_F(0x06c0aaf5) /* 0.422038039 */, 17 },
3862 /* 3608 */ { MAD_F(0x06c14e8d) /* 0.422194054 */, 17 },
3863 /* 3609 */ { MAD_F(0x06c1f229) /* 0.422350082 */, 17 },
3864 /* 3610 */ { MAD_F(0x06c295c8) /* 0.422506125 */, 17 },
3865 /* 3611 */ { MAD_F(0x06c3396c) /* 0.422662183 */, 17 },
3866 /* 3612 */ { MAD_F(0x06c3dd13) /* 0.422818255 */, 17 },
3867 /* 3613 */ { MAD_F(0x06c480be) /* 0.422974341 */, 17 },
3868 /* 3614 */ { MAD_F(0x06c5246d) /* 0.423130442 */, 17 },
3869 /* 3615 */ { MAD_F(0x06c5c820) /* 0.423286557 */, 17 },
3870
3871 /* 3616 */ { MAD_F(0x06c66bd6) /* 0.423442686 */, 17 },
3872 /* 3617 */ { MAD_F(0x06c70f91) /* 0.423598830 */, 17 },
3873 /* 3618 */ { MAD_F(0x06c7b34f) /* 0.423754988 */, 17 },
3874 /* 3619 */ { MAD_F(0x06c85712) /* 0.423911161 */, 17 },
3875 /* 3620 */ { MAD_F(0x06c8fad8) /* 0.424067348 */, 17 },
3876 /* 3621 */ { MAD_F(0x06c99ea2) /* 0.424223550 */, 17 },
3877 /* 3622 */ { MAD_F(0x06ca4270) /* 0.424379765 */, 17 },
3878 /* 3623 */ { MAD_F(0x06cae641) /* 0.424535996 */, 17 },
3879 /* 3624 */ { MAD_F(0x06cb8a17) /* 0.424692240 */, 17 },
3880 /* 3625 */ { MAD_F(0x06cc2df0) /* 0.424848499 */, 17 },
3881 /* 3626 */ { MAD_F(0x06ccd1ce) /* 0.425004772 */, 17 },
3882 /* 3627 */ { MAD_F(0x06cd75af) /* 0.425161060 */, 17 },
3883 /* 3628 */ { MAD_F(0x06ce1994) /* 0.425317362 */, 17 },
3884 /* 3629 */ { MAD_F(0x06cebd7d) /* 0.425473678 */, 17 },
3885 /* 3630 */ { MAD_F(0x06cf6169) /* 0.425630009 */, 17 },
3886 /* 3631 */ { MAD_F(0x06d0055a) /* 0.425786354 */, 17 },
3887
3888 /* 3632 */ { MAD_F(0x06d0a94e) /* 0.425942714 */, 17 },
3889 /* 3633 */ { MAD_F(0x06d14d47) /* 0.426099088 */, 17 },
3890 /* 3634 */ { MAD_F(0x06d1f143) /* 0.426255476 */, 17 },
3891 /* 3635 */ { MAD_F(0x06d29543) /* 0.426411878 */, 17 },
3892 /* 3636 */ { MAD_F(0x06d33947) /* 0.426568295 */, 17 },
3893 /* 3637 */ { MAD_F(0x06d3dd4e) /* 0.426724726 */, 17 },
3894 /* 3638 */ { MAD_F(0x06d4815a) /* 0.426881172 */, 17 },
3895 /* 3639 */ { MAD_F(0x06d52569) /* 0.427037632 */, 17 },
3896 /* 3640 */ { MAD_F(0x06d5c97c) /* 0.427194106 */, 17 },
3897 /* 3641 */ { MAD_F(0x06d66d93) /* 0.427350594 */, 17 },
3898 /* 3642 */ { MAD_F(0x06d711ae) /* 0.427507097 */, 17 },
3899 /* 3643 */ { MAD_F(0x06d7b5cd) /* 0.427663614 */, 17 },
3900 /* 3644 */ { MAD_F(0x06d859f0) /* 0.427820146 */, 17 },
3901 /* 3645 */ { MAD_F(0x06d8fe16) /* 0.427976692 */, 17 },
3902 /* 3646 */ { MAD_F(0x06d9a240) /* 0.428133252 */, 17 },
3903 /* 3647 */ { MAD_F(0x06da466f) /* 0.428289826 */, 17 },
3904
3905 /* 3648 */ { MAD_F(0x06daeaa1) /* 0.428446415 */, 17 },
3906 /* 3649 */ { MAD_F(0x06db8ed6) /* 0.428603018 */, 17 },
3907 /* 3650 */ { MAD_F(0x06dc3310) /* 0.428759635 */, 17 },
3908 /* 3651 */ { MAD_F(0x06dcd74d) /* 0.428916267 */, 17 },
3909 /* 3652 */ { MAD_F(0x06dd7b8f) /* 0.429072913 */, 17 },
3910 /* 3653 */ { MAD_F(0x06de1fd4) /* 0.429229573 */, 17 },
3911 /* 3654 */ { MAD_F(0x06dec41d) /* 0.429386248 */, 17 },
3912 /* 3655 */ { MAD_F(0x06df686a) /* 0.429542937 */, 17 },
3913 /* 3656 */ { MAD_F(0x06e00cbb) /* 0.429699640 */, 17 },
3914 /* 3657 */ { MAD_F(0x06e0b10f) /* 0.429856357 */, 17 },
3915 /* 3658 */ { MAD_F(0x06e15567) /* 0.430013089 */, 17 },
3916 /* 3659 */ { MAD_F(0x06e1f9c4) /* 0.430169835 */, 17 },
3917 /* 3660 */ { MAD_F(0x06e29e24) /* 0.430326595 */, 17 },
3918 /* 3661 */ { MAD_F(0x06e34287) /* 0.430483370 */, 17 },
3919 /* 3662 */ { MAD_F(0x06e3e6ef) /* 0.430640159 */, 17 },
3920 /* 3663 */ { MAD_F(0x06e48b5b) /* 0.430796962 */, 17 },
3921
3922 /* 3664 */ { MAD_F(0x06e52fca) /* 0.430953779 */, 17 },
3923 /* 3665 */ { MAD_F(0x06e5d43d) /* 0.431110611 */, 17 },
3924 /* 3666 */ { MAD_F(0x06e678b4) /* 0.431267457 */, 17 },
3925 /* 3667 */ { MAD_F(0x06e71d2f) /* 0.431424317 */, 17 },
3926 /* 3668 */ { MAD_F(0x06e7c1ae) /* 0.431581192 */, 17 },
3927 /* 3669 */ { MAD_F(0x06e86630) /* 0.431738080 */, 17 },
3928 /* 3670 */ { MAD_F(0x06e90ab7) /* 0.431894983 */, 17 },
3929 /* 3671 */ { MAD_F(0x06e9af41) /* 0.432051900 */, 17 },
3930 /* 3672 */ { MAD_F(0x06ea53cf) /* 0.432208832 */, 17 },
3931 /* 3673 */ { MAD_F(0x06eaf860) /* 0.432365778 */, 17 },
3932 /* 3674 */ { MAD_F(0x06eb9cf6) /* 0.432522737 */, 17 },
3933 /* 3675 */ { MAD_F(0x06ec418f) /* 0.432679712 */, 17 },
3934 /* 3676 */ { MAD_F(0x06ece62d) /* 0.432836700 */, 17 },
3935 /* 3677 */ { MAD_F(0x06ed8ace) /* 0.432993703 */, 17 },
3936 /* 3678 */ { MAD_F(0x06ee2f73) /* 0.433150720 */, 17 },
3937 /* 3679 */ { MAD_F(0x06eed41b) /* 0.433307751 */, 17 },
3938
3939 /* 3680 */ { MAD_F(0x06ef78c8) /* 0.433464796 */, 17 },
3940 /* 3681 */ { MAD_F(0x06f01d78) /* 0.433621856 */, 17 },
3941 /* 3682 */ { MAD_F(0x06f0c22c) /* 0.433778929 */, 17 },
3942 /* 3683 */ { MAD_F(0x06f166e4) /* 0.433936017 */, 17 },
3943 /* 3684 */ { MAD_F(0x06f20ba0) /* 0.434093120 */, 17 },
3944 /* 3685 */ { MAD_F(0x06f2b060) /* 0.434250236 */, 17 },
3945 /* 3686 */ { MAD_F(0x06f35523) /* 0.434407367 */, 17 },
3946 /* 3687 */ { MAD_F(0x06f3f9eb) /* 0.434564512 */, 17 },
3947 /* 3688 */ { MAD_F(0x06f49eb6) /* 0.434721671 */, 17 },
3948 /* 3689 */ { MAD_F(0x06f54385) /* 0.434878844 */, 17 },
3949 /* 3690 */ { MAD_F(0x06f5e857) /* 0.435036032 */, 17 },
3950 /* 3691 */ { MAD_F(0x06f68d2e) /* 0.435193233 */, 17 },
3951 /* 3692 */ { MAD_F(0x06f73208) /* 0.435350449 */, 17 },
3952 /* 3693 */ { MAD_F(0x06f7d6e6) /* 0.435507679 */, 17 },
3953 /* 3694 */ { MAD_F(0x06f87bc8) /* 0.435664924 */, 17 },
3954 /* 3695 */ { MAD_F(0x06f920ae) /* 0.435822182 */, 17 },
3955
3956 /* 3696 */ { MAD_F(0x06f9c597) /* 0.435979455 */, 17 },
3957 /* 3697 */ { MAD_F(0x06fa6a85) /* 0.436136741 */, 17 },
3958 /* 3698 */ { MAD_F(0x06fb0f76) /* 0.436294042 */, 17 },
3959 /* 3699 */ { MAD_F(0x06fbb46b) /* 0.436451358 */, 17 },
3960 /* 3700 */ { MAD_F(0x06fc5964) /* 0.436608687 */, 17 },
3961 /* 3701 */ { MAD_F(0x06fcfe60) /* 0.436766031 */, 17 },
3962 /* 3702 */ { MAD_F(0x06fda361) /* 0.436923388 */, 17 },
3963 /* 3703 */ { MAD_F(0x06fe4865) /* 0.437080760 */, 17 },
3964 /* 3704 */ { MAD_F(0x06feed6d) /* 0.437238146 */, 17 },
3965 /* 3705 */ { MAD_F(0x06ff9279) /* 0.437395547 */, 17 },
3966 /* 3706 */ { MAD_F(0x07003788) /* 0.437552961 */, 17 },
3967 /* 3707 */ { MAD_F(0x0700dc9c) /* 0.437710389 */, 17 },
3968 /* 3708 */ { MAD_F(0x070181b3) /* 0.437867832 */, 17 },
3969 /* 3709 */ { MAD_F(0x070226ce) /* 0.438025289 */, 17 },
3970 /* 3710 */ { MAD_F(0x0702cbed) /* 0.438182760 */, 17 },
3971 /* 3711 */ { MAD_F(0x0703710f) /* 0.438340245 */, 17 },
3972
3973 /* 3712 */ { MAD_F(0x07041636) /* 0.438497744 */, 17 },
3974 /* 3713 */ { MAD_F(0x0704bb60) /* 0.438655258 */, 17 },
3975 /* 3714 */ { MAD_F(0x0705608e) /* 0.438812785 */, 17 },
3976 /* 3715 */ { MAD_F(0x070605c0) /* 0.438970327 */, 17 },
3977 /* 3716 */ { MAD_F(0x0706aaf5) /* 0.439127883 */, 17 },
3978 /* 3717 */ { MAD_F(0x0707502f) /* 0.439285453 */, 17 },
3979 /* 3718 */ { MAD_F(0x0707f56c) /* 0.439443037 */, 17 },
3980 /* 3719 */ { MAD_F(0x07089aad) /* 0.439600635 */, 17 },
3981 /* 3720 */ { MAD_F(0x07093ff2) /* 0.439758248 */, 17 },
3982 /* 3721 */ { MAD_F(0x0709e53a) /* 0.439915874 */, 17 },
3983 /* 3722 */ { MAD_F(0x070a8a86) /* 0.440073515 */, 17 },
3984 /* 3723 */ { MAD_F(0x070b2fd7) /* 0.440231170 */, 17 },
3985 /* 3724 */ { MAD_F(0x070bd52a) /* 0.440388839 */, 17 },
3986 /* 3725 */ { MAD_F(0x070c7a82) /* 0.440546522 */, 17 },
3987 /* 3726 */ { MAD_F(0x070d1fde) /* 0.440704219 */, 17 },
3988 /* 3727 */ { MAD_F(0x070dc53d) /* 0.440861930 */, 17 },
3989
3990 /* 3728 */ { MAD_F(0x070e6aa0) /* 0.441019655 */, 17 },
3991 /* 3729 */ { MAD_F(0x070f1007) /* 0.441177395 */, 17 },
3992 /* 3730 */ { MAD_F(0x070fb571) /* 0.441335148 */, 17 },
3993 /* 3731 */ { MAD_F(0x07105ae0) /* 0.441492916 */, 17 },
3994 /* 3732 */ { MAD_F(0x07110052) /* 0.441650697 */, 17 },
3995 /* 3733 */ { MAD_F(0x0711a5c8) /* 0.441808493 */, 17 },
3996 /* 3734 */ { MAD_F(0x07124b42) /* 0.441966303 */, 17 },
3997 /* 3735 */ { MAD_F(0x0712f0bf) /* 0.442124127 */, 17 },
3998 /* 3736 */ { MAD_F(0x07139641) /* 0.442281965 */, 17 },
3999 /* 3737 */ { MAD_F(0x07143bc6) /* 0.442439817 */, 17 },
4000 /* 3738 */ { MAD_F(0x0714e14f) /* 0.442597683 */, 17 },
4001 /* 3739 */ { MAD_F(0x071586db) /* 0.442755564 */, 17 },
4002 /* 3740 */ { MAD_F(0x07162c6c) /* 0.442913458 */, 17 },
4003 /* 3741 */ { MAD_F(0x0716d200) /* 0.443071366 */, 17 },
4004 /* 3742 */ { MAD_F(0x07177798) /* 0.443229289 */, 17 },
4005 /* 3743 */ { MAD_F(0x07181d34) /* 0.443387226 */, 17 },
4006
4007 /* 3744 */ { MAD_F(0x0718c2d3) /* 0.443545176 */, 17 },
4008 /* 3745 */ { MAD_F(0x07196877) /* 0.443703141 */, 17 },
4009 /* 3746 */ { MAD_F(0x071a0e1e) /* 0.443861120 */, 17 },
4010 /* 3747 */ { MAD_F(0x071ab3c9) /* 0.444019113 */, 17 },
4011 /* 3748 */ { MAD_F(0x071b5977) /* 0.444177119 */, 17 },
4012 /* 3749 */ { MAD_F(0x071bff2a) /* 0.444335140 */, 17 },
4013 /* 3750 */ { MAD_F(0x071ca4e0) /* 0.444493175 */, 17 },
4014 /* 3751 */ { MAD_F(0x071d4a9a) /* 0.444651224 */, 17 },
4015 /* 3752 */ { MAD_F(0x071df058) /* 0.444809288 */, 17 },
4016 /* 3753 */ { MAD_F(0x071e9619) /* 0.444967365 */, 17 },
4017 /* 3754 */ { MAD_F(0x071f3bde) /* 0.445125456 */, 17 },
4018 /* 3755 */ { MAD_F(0x071fe1a8) /* 0.445283561 */, 17 },
4019 /* 3756 */ { MAD_F(0x07208774) /* 0.445441680 */, 17 },
4020 /* 3757 */ { MAD_F(0x07212d45) /* 0.445599814 */, 17 },
4021 /* 3758 */ { MAD_F(0x0721d319) /* 0.445757961 */, 17 },
4022 /* 3759 */ { MAD_F(0x072278f1) /* 0.445916122 */, 17 },
4023
4024 /* 3760 */ { MAD_F(0x07231ecd) /* 0.446074298 */, 17 },
4025 /* 3761 */ { MAD_F(0x0723c4ad) /* 0.446232487 */, 17 },
4026 /* 3762 */ { MAD_F(0x07246a90) /* 0.446390690 */, 17 },
4027 /* 3763 */ { MAD_F(0x07251077) /* 0.446548908 */, 17 },
4028 /* 3764 */ { MAD_F(0x0725b662) /* 0.446707139 */, 17 },
4029 /* 3765 */ { MAD_F(0x07265c51) /* 0.446865385 */, 17 },
4030 /* 3766 */ { MAD_F(0x07270244) /* 0.447023644 */, 17 },
4031 /* 3767 */ { MAD_F(0x0727a83a) /* 0.447181918 */, 17 },
4032 /* 3768 */ { MAD_F(0x07284e34) /* 0.447340205 */, 17 },
4033 /* 3769 */ { MAD_F(0x0728f431) /* 0.447498507 */, 17 },
4034 /* 3770 */ { MAD_F(0x07299a33) /* 0.447656822 */, 17 },
4035 /* 3771 */ { MAD_F(0x072a4038) /* 0.447815152 */, 17 },
4036 /* 3772 */ { MAD_F(0x072ae641) /* 0.447973495 */, 17 },
4037 /* 3773 */ { MAD_F(0x072b8c4e) /* 0.448131853 */, 17 },
4038 /* 3774 */ { MAD_F(0x072c325e) /* 0.448290224 */, 17 },
4039 /* 3775 */ { MAD_F(0x072cd873) /* 0.448448609 */, 17 },
4040
4041 /* 3776 */ { MAD_F(0x072d7e8b) /* 0.448607009 */, 17 },
4042 /* 3777 */ { MAD_F(0x072e24a7) /* 0.448765422 */, 17 },
4043 /* 3778 */ { MAD_F(0x072ecac6) /* 0.448923850 */, 17 },
4044 /* 3779 */ { MAD_F(0x072f70e9) /* 0.449082291 */, 17 },
4045 /* 3780 */ { MAD_F(0x07301710) /* 0.449240746 */, 17 },
4046 /* 3781 */ { MAD_F(0x0730bd3b) /* 0.449399216 */, 17 },
4047 /* 3782 */ { MAD_F(0x0731636a) /* 0.449557699 */, 17 },
4048 /* 3783 */ { MAD_F(0x0732099c) /* 0.449716196 */, 17 },
4049 /* 3784 */ { MAD_F(0x0732afd2) /* 0.449874708 */, 17 },
4050 /* 3785 */ { MAD_F(0x0733560c) /* 0.450033233 */, 17 },
4051 /* 3786 */ { MAD_F(0x0733fc49) /* 0.450191772 */, 17 },
4052 /* 3787 */ { MAD_F(0x0734a28b) /* 0.450350325 */, 17 },
4053 /* 3788 */ { MAD_F(0x073548d0) /* 0.450508892 */, 17 },
4054 /* 3789 */ { MAD_F(0x0735ef18) /* 0.450667473 */, 17 },
4055 /* 3790 */ { MAD_F(0x07369565) /* 0.450826068 */, 17 },
4056 /* 3791 */ { MAD_F(0x07373bb5) /* 0.450984677 */, 17 },
4057
4058 /* 3792 */ { MAD_F(0x0737e209) /* 0.451143300 */, 17 },
4059 /* 3793 */ { MAD_F(0x07388861) /* 0.451301937 */, 17 },
4060 /* 3794 */ { MAD_F(0x07392ebc) /* 0.451460588 */, 17 },
4061 /* 3795 */ { MAD_F(0x0739d51c) /* 0.451619252 */, 17 },
4062 /* 3796 */ { MAD_F(0x073a7b7f) /* 0.451777931 */, 17 },
4063 /* 3797 */ { MAD_F(0x073b21e5) /* 0.451936623 */, 17 },
4064 /* 3798 */ { MAD_F(0x073bc850) /* 0.452095330 */, 17 },
4065 /* 3799 */ { MAD_F(0x073c6ebe) /* 0.452254050 */, 17 },
4066 /* 3800 */ { MAD_F(0x073d1530) /* 0.452412785 */, 17 },
4067 /* 3801 */ { MAD_F(0x073dbba6) /* 0.452571533 */, 17 },
4068 /* 3802 */ { MAD_F(0x073e621f) /* 0.452730295 */, 17 },
4069 /* 3803 */ { MAD_F(0x073f089c) /* 0.452889071 */, 17 },
4070 /* 3804 */ { MAD_F(0x073faf1d) /* 0.453047861 */, 17 },
4071 /* 3805 */ { MAD_F(0x074055a2) /* 0.453206665 */, 17 },
4072 /* 3806 */ { MAD_F(0x0740fc2a) /* 0.453365483 */, 17 },
4073 /* 3807 */ { MAD_F(0x0741a2b6) /* 0.453524315 */, 17 },
4074
4075 /* 3808 */ { MAD_F(0x07424946) /* 0.453683161 */, 17 },
4076 /* 3809 */ { MAD_F(0x0742efd9) /* 0.453842020 */, 17 },
4077 /* 3810 */ { MAD_F(0x07439671) /* 0.454000894 */, 17 },
4078 /* 3811 */ { MAD_F(0x07443d0c) /* 0.454159781 */, 17 },
4079 /* 3812 */ { MAD_F(0x0744e3aa) /* 0.454318683 */, 17 },
4080 /* 3813 */ { MAD_F(0x07458a4d) /* 0.454477598 */, 17 },
4081 /* 3814 */ { MAD_F(0x074630f3) /* 0.454636527 */, 17 },
4082 /* 3815 */ { MAD_F(0x0746d79d) /* 0.454795470 */, 17 },
4083 /* 3816 */ { MAD_F(0x07477e4b) /* 0.454954427 */, 17 },
4084 /* 3817 */ { MAD_F(0x074824fc) /* 0.455113397 */, 17 },
4085 /* 3818 */ { MAD_F(0x0748cbb1) /* 0.455272382 */, 17 },
4086 /* 3819 */ { MAD_F(0x0749726a) /* 0.455431381 */, 17 },
4087 /* 3820 */ { MAD_F(0x074a1927) /* 0.455590393 */, 17 },
4088 /* 3821 */ { MAD_F(0x074abfe7) /* 0.455749419 */, 17 },
4089 /* 3822 */ { MAD_F(0x074b66ab) /* 0.455908459 */, 17 },
4090 /* 3823 */ { MAD_F(0x074c0d73) /* 0.456067513 */, 17 },
4091
4092 /* 3824 */ { MAD_F(0x074cb43e) /* 0.456226581 */, 17 },
4093 /* 3825 */ { MAD_F(0x074d5b0d) /* 0.456385663 */, 17 },
4094 /* 3826 */ { MAD_F(0x074e01e0) /* 0.456544759 */, 17 },
4095 /* 3827 */ { MAD_F(0x074ea8b7) /* 0.456703868 */, 17 },
4096 /* 3828 */ { MAD_F(0x074f4f91) /* 0.456862992 */, 17 },
4097 /* 3829 */ { MAD_F(0x074ff66f) /* 0.457022129 */, 17 },
4098 /* 3830 */ { MAD_F(0x07509d51) /* 0.457181280 */, 17 },
4099 /* 3831 */ { MAD_F(0x07514437) /* 0.457340445 */, 17 },
4100 /* 3832 */ { MAD_F(0x0751eb20) /* 0.457499623 */, 17 },
4101 /* 3833 */ { MAD_F(0x0752920d) /* 0.457658816 */, 17 },
4102 /* 3834 */ { MAD_F(0x075338fd) /* 0.457818022 */, 17 },
4103 /* 3835 */ { MAD_F(0x0753dff2) /* 0.457977243 */, 17 },
4104 /* 3836 */ { MAD_F(0x075486ea) /* 0.458136477 */, 17 },
4105 /* 3837 */ { MAD_F(0x07552de6) /* 0.458295725 */, 17 },
4106 /* 3838 */ { MAD_F(0x0755d4e5) /* 0.458454987 */, 17 },
4107 /* 3839 */ { MAD_F(0x07567be8) /* 0.458614262 */, 17 },
4108
4109 /* 3840 */ { MAD_F(0x075722ef) /* 0.458773552 */, 17 },
4110 /* 3841 */ { MAD_F(0x0757c9fa) /* 0.458932855 */, 17 },
4111 /* 3842 */ { MAD_F(0x07587108) /* 0.459092172 */, 17 },
4112 /* 3843 */ { MAD_F(0x0759181a) /* 0.459251503 */, 17 },
4113 /* 3844 */ { MAD_F(0x0759bf30) /* 0.459410848 */, 17 },
4114 /* 3845 */ { MAD_F(0x075a664a) /* 0.459570206 */, 17 },
4115 /* 3846 */ { MAD_F(0x075b0d67) /* 0.459729579 */, 17 },
4116 /* 3847 */ { MAD_F(0x075bb488) /* 0.459888965 */, 17 },
4117 /* 3848 */ { MAD_F(0x075c5bac) /* 0.460048365 */, 17 },
4118 /* 3849 */ { MAD_F(0x075d02d5) /* 0.460207779 */, 17 },
4119 /* 3850 */ { MAD_F(0x075daa01) /* 0.460367206 */, 17 },
4120 /* 3851 */ { MAD_F(0x075e5130) /* 0.460526648 */, 17 },
4121 /* 3852 */ { MAD_F(0x075ef864) /* 0.460686103 */, 17 },
4122 /* 3853 */ { MAD_F(0x075f9f9b) /* 0.460845572 */, 17 },
4123 /* 3854 */ { MAD_F(0x076046d6) /* 0.461005055 */, 17 },
4124 /* 3855 */ { MAD_F(0x0760ee14) /* 0.461164552 */, 17 },
4125
4126 /* 3856 */ { MAD_F(0x07619557) /* 0.461324062 */, 17 },
4127 /* 3857 */ { MAD_F(0x07623c9d) /* 0.461483586 */, 17 },
4128 /* 3858 */ { MAD_F(0x0762e3e6) /* 0.461643124 */, 17 },
4129 /* 3859 */ { MAD_F(0x07638b34) /* 0.461802676 */, 17 },
4130 /* 3860 */ { MAD_F(0x07643285) /* 0.461962242 */, 17 },
4131 /* 3861 */ { MAD_F(0x0764d9d9) /* 0.462121821 */, 17 },
4132 /* 3862 */ { MAD_F(0x07658132) /* 0.462281414 */, 17 },
4133 /* 3863 */ { MAD_F(0x0766288e) /* 0.462441021 */, 17 },
4134 /* 3864 */ { MAD_F(0x0766cfee) /* 0.462600642 */, 17 },
4135 /* 3865 */ { MAD_F(0x07677751) /* 0.462760276 */, 17 },
4136 /* 3866 */ { MAD_F(0x07681eb9) /* 0.462919924 */, 17 },
4137 /* 3867 */ { MAD_F(0x0768c624) /* 0.463079586 */, 17 },
4138 /* 3868 */ { MAD_F(0x07696d92) /* 0.463239262 */, 17 },
4139 /* 3869 */ { MAD_F(0x076a1505) /* 0.463398951 */, 17 },
4140 /* 3870 */ { MAD_F(0x076abc7b) /* 0.463558655 */, 17 },
4141 /* 3871 */ { MAD_F(0x076b63f4) /* 0.463718372 */, 17 },
4142
4143 /* 3872 */ { MAD_F(0x076c0b72) /* 0.463878102 */, 17 },
4144 /* 3873 */ { MAD_F(0x076cb2f3) /* 0.464037847 */, 17 },
4145 /* 3874 */ { MAD_F(0x076d5a78) /* 0.464197605 */, 17 },
4146 /* 3875 */ { MAD_F(0x076e0200) /* 0.464357377 */, 17 },
4147 /* 3876 */ { MAD_F(0x076ea98c) /* 0.464517163 */, 17 },
4148 /* 3877 */ { MAD_F(0x076f511c) /* 0.464676962 */, 17 },
4149 /* 3878 */ { MAD_F(0x076ff8b0) /* 0.464836776 */, 17 },
4150 /* 3879 */ { MAD_F(0x0770a047) /* 0.464996603 */, 17 },
4151 /* 3880 */ { MAD_F(0x077147e2) /* 0.465156443 */, 17 },
4152 /* 3881 */ { MAD_F(0x0771ef80) /* 0.465316298 */, 17 },
4153 /* 3882 */ { MAD_F(0x07729723) /* 0.465476166 */, 17 },
4154 /* 3883 */ { MAD_F(0x07733ec9) /* 0.465636048 */, 17 },
4155 /* 3884 */ { MAD_F(0x0773e672) /* 0.465795943 */, 17 },
4156 /* 3885 */ { MAD_F(0x07748e20) /* 0.465955853 */, 17 },
4157 /* 3886 */ { MAD_F(0x077535d1) /* 0.466115776 */, 17 },
4158 /* 3887 */ { MAD_F(0x0775dd85) /* 0.466275713 */, 17 },
4159
4160 /* 3888 */ { MAD_F(0x0776853e) /* 0.466435663 */, 17 },
4161 /* 3889 */ { MAD_F(0x07772cfa) /* 0.466595627 */, 17 },
4162 /* 3890 */ { MAD_F(0x0777d4ba) /* 0.466755605 */, 17 },
4163 /* 3891 */ { MAD_F(0x07787c7d) /* 0.466915597 */, 17 },
4164 /* 3892 */ { MAD_F(0x07792444) /* 0.467075602 */, 17 },
4165 /* 3893 */ { MAD_F(0x0779cc0f) /* 0.467235621 */, 17 },
4166 /* 3894 */ { MAD_F(0x077a73dd) /* 0.467395654 */, 17 },
4167 /* 3895 */ { MAD_F(0x077b1baf) /* 0.467555701 */, 17 },
4168 /* 3896 */ { MAD_F(0x077bc385) /* 0.467715761 */, 17 },
4169 /* 3897 */ { MAD_F(0x077c6b5f) /* 0.467875835 */, 17 },
4170 /* 3898 */ { MAD_F(0x077d133c) /* 0.468035922 */, 17 },
4171 /* 3899 */ { MAD_F(0x077dbb1d) /* 0.468196023 */, 17 },
4172 /* 3900 */ { MAD_F(0x077e6301) /* 0.468356138 */, 17 },
4173 /* 3901 */ { MAD_F(0x077f0ae9) /* 0.468516267 */, 17 },
4174 /* 3902 */ { MAD_F(0x077fb2d5) /* 0.468676409 */, 17 },
4175 /* 3903 */ { MAD_F(0x07805ac5) /* 0.468836565 */, 17 },
4176
4177 /* 3904 */ { MAD_F(0x078102b8) /* 0.468996735 */, 17 },
4178 /* 3905 */ { MAD_F(0x0781aaaf) /* 0.469156918 */, 17 },
4179 /* 3906 */ { MAD_F(0x078252aa) /* 0.469317115 */, 17 },
4180 /* 3907 */ { MAD_F(0x0782faa8) /* 0.469477326 */, 17 },
4181 /* 3908 */ { MAD_F(0x0783a2aa) /* 0.469637550 */, 17 },
4182 /* 3909 */ { MAD_F(0x07844aaf) /* 0.469797788 */, 17 },
4183 /* 3910 */ { MAD_F(0x0784f2b8) /* 0.469958040 */, 17 },
4184 /* 3911 */ { MAD_F(0x07859ac5) /* 0.470118305 */, 17 },
4185 /* 3912 */ { MAD_F(0x078642d6) /* 0.470278584 */, 17 },
4186 /* 3913 */ { MAD_F(0x0786eaea) /* 0.470438877 */, 17 },
4187 /* 3914 */ { MAD_F(0x07879302) /* 0.470599183 */, 17 },
4188 /* 3915 */ { MAD_F(0x07883b1e) /* 0.470759503 */, 17 },
4189 /* 3916 */ { MAD_F(0x0788e33d) /* 0.470919836 */, 17 },
4190 /* 3917 */ { MAD_F(0x07898b60) /* 0.471080184 */, 17 },
4191 /* 3918 */ { MAD_F(0x078a3386) /* 0.471240545 */, 17 },
4192 /* 3919 */ { MAD_F(0x078adbb0) /* 0.471400919 */, 17 },
4193
4194 /* 3920 */ { MAD_F(0x078b83de) /* 0.471561307 */, 17 },
4195 /* 3921 */ { MAD_F(0x078c2c10) /* 0.471721709 */, 17 },
4196 /* 3922 */ { MAD_F(0x078cd445) /* 0.471882125 */, 17 },
4197 /* 3923 */ { MAD_F(0x078d7c7e) /* 0.472042554 */, 17 },
4198 /* 3924 */ { MAD_F(0x078e24ba) /* 0.472202996 */, 17 },
4199 /* 3925 */ { MAD_F(0x078eccfb) /* 0.472363453 */, 17 },
4200 /* 3926 */ { MAD_F(0x078f753e) /* 0.472523923 */, 17 },
4201 /* 3927 */ { MAD_F(0x07901d86) /* 0.472684406 */, 17 },
4202 /* 3928 */ { MAD_F(0x0790c5d1) /* 0.472844904 */, 17 },
4203 /* 3929 */ { MAD_F(0x07916e20) /* 0.473005414 */, 17 },
4204 /* 3930 */ { MAD_F(0x07921672) /* 0.473165939 */, 17 },
4205 /* 3931 */ { MAD_F(0x0792bec8) /* 0.473326477 */, 17 },
4206 /* 3932 */ { MAD_F(0x07936722) /* 0.473487029 */, 17 },
4207 /* 3933 */ { MAD_F(0x07940f80) /* 0.473647594 */, 17 },
4208 /* 3934 */ { MAD_F(0x0794b7e1) /* 0.473808173 */, 17 },
4209 /* 3935 */ { MAD_F(0x07956045) /* 0.473968765 */, 17 },
4210
4211 /* 3936 */ { MAD_F(0x079608ae) /* 0.474129372 */, 17 },
4212 /* 3937 */ { MAD_F(0x0796b11a) /* 0.474289991 */, 17 },
4213 /* 3938 */ { MAD_F(0x0797598a) /* 0.474450625 */, 17 },
4214 /* 3939 */ { MAD_F(0x079801fd) /* 0.474611272 */, 17 },
4215 /* 3940 */ { MAD_F(0x0798aa74) /* 0.474771932 */, 17 },
4216 /* 3941 */ { MAD_F(0x079952ee) /* 0.474932606 */, 17 },
4217 /* 3942 */ { MAD_F(0x0799fb6d) /* 0.475093294 */, 17 },
4218 /* 3943 */ { MAD_F(0x079aa3ef) /* 0.475253995 */, 17 },
4219 /* 3944 */ { MAD_F(0x079b4c74) /* 0.475414710 */, 17 },
4220 /* 3945 */ { MAD_F(0x079bf4fd) /* 0.475575439 */, 17 },
4221 /* 3946 */ { MAD_F(0x079c9d8a) /* 0.475736181 */, 17 },
4222 /* 3947 */ { MAD_F(0x079d461b) /* 0.475896936 */, 17 },
4223 /* 3948 */ { MAD_F(0x079deeaf) /* 0.476057705 */, 17 },
4224 /* 3949 */ { MAD_F(0x079e9747) /* 0.476218488 */, 17 },
4225 /* 3950 */ { MAD_F(0x079f3fe2) /* 0.476379285 */, 17 },
4226 /* 3951 */ { MAD_F(0x079fe881) /* 0.476540095 */, 17 },
4227
4228 /* 3952 */ { MAD_F(0x07a09124) /* 0.476700918 */, 17 },
4229 /* 3953 */ { MAD_F(0x07a139ca) /* 0.476861755 */, 17 },
4230 /* 3954 */ { MAD_F(0x07a1e274) /* 0.477022606 */, 17 },
4231 /* 3955 */ { MAD_F(0x07a28b22) /* 0.477183470 */, 17 },
4232 /* 3956 */ { MAD_F(0x07a333d3) /* 0.477344348 */, 17 },
4233 /* 3957 */ { MAD_F(0x07a3dc88) /* 0.477505239 */, 17 },
4234 /* 3958 */ { MAD_F(0x07a48541) /* 0.477666144 */, 17 },
4235 /* 3959 */ { MAD_F(0x07a52dfd) /* 0.477827062 */, 17 },
4236 /* 3960 */ { MAD_F(0x07a5d6bd) /* 0.477987994 */, 17 },
4237 /* 3961 */ { MAD_F(0x07a67f80) /* 0.478148940 */, 17 },
4238 /* 3962 */ { MAD_F(0x07a72847) /* 0.478309899 */, 17 },
4239 /* 3963 */ { MAD_F(0x07a7d112) /* 0.478470871 */, 17 },
4240 /* 3964 */ { MAD_F(0x07a879e1) /* 0.478631857 */, 17 },
4241 /* 3965 */ { MAD_F(0x07a922b3) /* 0.478792857 */, 17 },
4242 /* 3966 */ { MAD_F(0x07a9cb88) /* 0.478953870 */, 17 },
4243 /* 3967 */ { MAD_F(0x07aa7462) /* 0.479114897 */, 17 },
4244
4245 /* 3968 */ { MAD_F(0x07ab1d3e) /* 0.479275937 */, 17 },
4246 /* 3969 */ { MAD_F(0x07abc61f) /* 0.479436991 */, 17 },
4247 /* 3970 */ { MAD_F(0x07ac6f03) /* 0.479598058 */, 17 },
4248 /* 3971 */ { MAD_F(0x07ad17eb) /* 0.479759139 */, 17 },
4249 /* 3972 */ { MAD_F(0x07adc0d6) /* 0.479920233 */, 17 },
4250 /* 3973 */ { MAD_F(0x07ae69c6) /* 0.480081341 */, 17 },
4251 /* 3974 */ { MAD_F(0x07af12b8) /* 0.480242463 */, 17 },
4252 /* 3975 */ { MAD_F(0x07afbbaf) /* 0.480403598 */, 17 },
4253 /* 3976 */ { MAD_F(0x07b064a8) /* 0.480564746 */, 17 },
4254 /* 3977 */ { MAD_F(0x07b10da6) /* 0.480725908 */, 17 },
4255 /* 3978 */ { MAD_F(0x07b1b6a7) /* 0.480887083 */, 17 },
4256 /* 3979 */ { MAD_F(0x07b25fac) /* 0.481048272 */, 17 },
4257 /* 3980 */ { MAD_F(0x07b308b5) /* 0.481209475 */, 17 },
4258 /* 3981 */ { MAD_F(0x07b3b1c1) /* 0.481370691 */, 17 },
4259 /* 3982 */ { MAD_F(0x07b45ad0) /* 0.481531920 */, 17 },
4260 /* 3983 */ { MAD_F(0x07b503e4) /* 0.481693163 */, 17 },
4261
4262 /* 3984 */ { MAD_F(0x07b5acfb) /* 0.481854420 */, 17 },
4263 /* 3985 */ { MAD_F(0x07b65615) /* 0.482015690 */, 17 },
4264 /* 3986 */ { MAD_F(0x07b6ff33) /* 0.482176973 */, 17 },
4265 /* 3987 */ { MAD_F(0x07b7a855) /* 0.482338270 */, 17 },
4266 /* 3988 */ { MAD_F(0x07b8517b) /* 0.482499580 */, 17 },
4267 /* 3989 */ { MAD_F(0x07b8faa4) /* 0.482660904 */, 17 },
4268 /* 3990 */ { MAD_F(0x07b9a3d0) /* 0.482822242 */, 17 },
4269 /* 3991 */ { MAD_F(0x07ba4d01) /* 0.482983592 */, 17 },
4270 /* 3992 */ { MAD_F(0x07baf635) /* 0.483144957 */, 17 },
4271 /* 3993 */ { MAD_F(0x07bb9f6c) /* 0.483306335 */, 17 },
4272 /* 3994 */ { MAD_F(0x07bc48a7) /* 0.483467726 */, 17 },
4273 /* 3995 */ { MAD_F(0x07bcf1e6) /* 0.483629131 */, 17 },
4274 /* 3996 */ { MAD_F(0x07bd9b28) /* 0.483790549 */, 17 },
4275 /* 3997 */ { MAD_F(0x07be446e) /* 0.483951980 */, 17 },
4276 /* 3998 */ { MAD_F(0x07beedb8) /* 0.484113426 */, 17 },
4277 /* 3999 */ { MAD_F(0x07bf9705) /* 0.484274884 */, 17 },
4278
4279 /* 4000 */ { MAD_F(0x07c04056) /* 0.484436356 */, 17 },
4280 /* 4001 */ { MAD_F(0x07c0e9aa) /* 0.484597842 */, 17 },
4281 /* 4002 */ { MAD_F(0x07c19302) /* 0.484759341 */, 17 },
4282 /* 4003 */ { MAD_F(0x07c23c5e) /* 0.484920853 */, 17 },
4283 /* 4004 */ { MAD_F(0x07c2e5bd) /* 0.485082379 */, 17 },
4284 /* 4005 */ { MAD_F(0x07c38f20) /* 0.485243918 */, 17 },
4285 /* 4006 */ { MAD_F(0x07c43887) /* 0.485405471 */, 17 },
4286 /* 4007 */ { MAD_F(0x07c4e1f1) /* 0.485567037 */, 17 },
4287 /* 4008 */ { MAD_F(0x07c58b5f) /* 0.485728617 */, 17 },
4288 /* 4009 */ { MAD_F(0x07c634d0) /* 0.485890210 */, 17 },
4289 /* 4010 */ { MAD_F(0x07c6de45) /* 0.486051817 */, 17 },
4290 /* 4011 */ { MAD_F(0x07c787bd) /* 0.486213436 */, 17 },
4291 /* 4012 */ { MAD_F(0x07c83139) /* 0.486375070 */, 17 },
4292 /* 4013 */ { MAD_F(0x07c8dab9) /* 0.486536717 */, 17 },
4293 /* 4014 */ { MAD_F(0x07c9843c) /* 0.486698377 */, 17 },
4294 /* 4015 */ { MAD_F(0x07ca2dc3) /* 0.486860051 */, 17 },
4295
4296 /* 4016 */ { MAD_F(0x07cad74e) /* 0.487021738 */, 17 },
4297 /* 4017 */ { MAD_F(0x07cb80dc) /* 0.487183438 */, 17 },
4298 /* 4018 */ { MAD_F(0x07cc2a6e) /* 0.487345152 */, 17 },
4299 /* 4019 */ { MAD_F(0x07ccd403) /* 0.487506879 */, 17 },
4300 /* 4020 */ { MAD_F(0x07cd7d9c) /* 0.487668620 */, 17 },
4301 /* 4021 */ { MAD_F(0x07ce2739) /* 0.487830374 */, 17 },
4302 /* 4022 */ { MAD_F(0x07ced0d9) /* 0.487992142 */, 17 },
4303 /* 4023 */ { MAD_F(0x07cf7a7d) /* 0.488153923 */, 17 },
4304 /* 4024 */ { MAD_F(0x07d02424) /* 0.488315717 */, 17 },
4305 /* 4025 */ { MAD_F(0x07d0cdcf) /* 0.488477525 */, 17 },
4306 /* 4026 */ { MAD_F(0x07d1777e) /* 0.488639346 */, 17 },
4307 /* 4027 */ { MAD_F(0x07d22130) /* 0.488801181 */, 17 },
4308 /* 4028 */ { MAD_F(0x07d2cae5) /* 0.488963029 */, 17 },
4309 /* 4029 */ { MAD_F(0x07d3749f) /* 0.489124890 */, 17 },
4310 /* 4030 */ { MAD_F(0x07d41e5c) /* 0.489286765 */, 17 },
4311 /* 4031 */ { MAD_F(0x07d4c81c) /* 0.489448653 */, 17 },
4312
4313 /* 4032 */ { MAD_F(0x07d571e0) /* 0.489610555 */, 17 },
4314 /* 4033 */ { MAD_F(0x07d61ba8) /* 0.489772470 */, 17 },
4315 /* 4034 */ { MAD_F(0x07d6c573) /* 0.489934398 */, 17 },
4316 /* 4035 */ { MAD_F(0x07d76f42) /* 0.490096340 */, 17 },
4317 /* 4036 */ { MAD_F(0x07d81915) /* 0.490258295 */, 17 },
4318 /* 4037 */ { MAD_F(0x07d8c2eb) /* 0.490420263 */, 17 },
4319 /* 4038 */ { MAD_F(0x07d96cc4) /* 0.490582245 */, 17 },
4320 /* 4039 */ { MAD_F(0x07da16a2) /* 0.490744240 */, 17 },
4321 /* 4040 */ { MAD_F(0x07dac083) /* 0.490906249 */, 17 },
4322 /* 4041 */ { MAD_F(0x07db6a67) /* 0.491068271 */, 17 },
4323 /* 4042 */ { MAD_F(0x07dc144f) /* 0.491230306 */, 17 },
4324 /* 4043 */ { MAD_F(0x07dcbe3b) /* 0.491392355 */, 17 },
4325 /* 4044 */ { MAD_F(0x07dd682a) /* 0.491554417 */, 17 },
4326 /* 4045 */ { MAD_F(0x07de121d) /* 0.491716492 */, 17 },
4327 /* 4046 */ { MAD_F(0x07debc13) /* 0.491878581 */, 17 },
4328 /* 4047 */ { MAD_F(0x07df660d) /* 0.492040683 */, 17 },
4329
4330 /* 4048 */ { MAD_F(0x07e0100a) /* 0.492202799 */, 17 },
4331 /* 4049 */ { MAD_F(0x07e0ba0c) /* 0.492364928 */, 17 },
4332 /* 4050 */ { MAD_F(0x07e16410) /* 0.492527070 */, 17 },
4333 /* 4051 */ { MAD_F(0x07e20e19) /* 0.492689225 */, 17 },
4334 /* 4052 */ { MAD_F(0x07e2b824) /* 0.492851394 */, 17 },
4335 /* 4053 */ { MAD_F(0x07e36234) /* 0.493013576 */, 17 },
4336 /* 4054 */ { MAD_F(0x07e40c47) /* 0.493175772 */, 17 },
4337 /* 4055 */ { MAD_F(0x07e4b65e) /* 0.493337981 */, 17 },
4338 /* 4056 */ { MAD_F(0x07e56078) /* 0.493500203 */, 17 },
4339 /* 4057 */ { MAD_F(0x07e60a95) /* 0.493662438 */, 17 },
4340 /* 4058 */ { MAD_F(0x07e6b4b7) /* 0.493824687 */, 17 },
4341 /* 4059 */ { MAD_F(0x07e75edc) /* 0.493986949 */, 17 },
4342 /* 4060 */ { MAD_F(0x07e80904) /* 0.494149225 */, 17 },
4343 /* 4061 */ { MAD_F(0x07e8b330) /* 0.494311514 */, 17 },
4344 /* 4062 */ { MAD_F(0x07e95d60) /* 0.494473816 */, 17 },
4345 /* 4063 */ { MAD_F(0x07ea0793) /* 0.494636131 */, 17 },
4346
4347 /* 4064 */ { MAD_F(0x07eab1ca) /* 0.494798460 */, 17 },
4348 /* 4065 */ { MAD_F(0x07eb5c04) /* 0.494960802 */, 17 },
4349 /* 4066 */ { MAD_F(0x07ec0642) /* 0.495123158 */, 17 },
4350 /* 4067 */ { MAD_F(0x07ecb084) /* 0.495285526 */, 17 },
4351 /* 4068 */ { MAD_F(0x07ed5ac9) /* 0.495447908 */, 17 },
4352 /* 4069 */ { MAD_F(0x07ee0512) /* 0.495610304 */, 17 },
4353 /* 4070 */ { MAD_F(0x07eeaf5e) /* 0.495772712 */, 17 },
4354 /* 4071 */ { MAD_F(0x07ef59ae) /* 0.495935134 */, 17 },
4355 /* 4072 */ { MAD_F(0x07f00401) /* 0.496097570 */, 17 },
4356 /* 4073 */ { MAD_F(0x07f0ae58) /* 0.496260018 */, 17 },
4357 /* 4074 */ { MAD_F(0x07f158b3) /* 0.496422480 */, 17 },
4358 /* 4075 */ { MAD_F(0x07f20311) /* 0.496584955 */, 17 },
4359 /* 4076 */ { MAD_F(0x07f2ad72) /* 0.496747444 */, 17 },
4360 /* 4077 */ { MAD_F(0x07f357d8) /* 0.496909945 */, 17 },
4361 /* 4078 */ { MAD_F(0x07f40240) /* 0.497072460 */, 17 },
4362 /* 4079 */ { MAD_F(0x07f4acad) /* 0.497234989 */, 17 },
4363
4364 /* 4080 */ { MAD_F(0x07f5571d) /* 0.497397530 */, 17 },
4365 /* 4081 */ { MAD_F(0x07f60190) /* 0.497560085 */, 17 },
4366 /* 4082 */ { MAD_F(0x07f6ac07) /* 0.497722653 */, 17 },
4367 /* 4083 */ { MAD_F(0x07f75682) /* 0.497885235 */, 17 },
4368 /* 4084 */ { MAD_F(0x07f80100) /* 0.498047829 */, 17 },
4369 /* 4085 */ { MAD_F(0x07f8ab82) /* 0.498210437 */, 17 },
4370 /* 4086 */ { MAD_F(0x07f95607) /* 0.498373058 */, 17 },
4371 /* 4087 */ { MAD_F(0x07fa0090) /* 0.498535693 */, 17 },
4372 /* 4088 */ { MAD_F(0x07faab1c) /* 0.498698341 */, 17 },
4373 /* 4089 */ { MAD_F(0x07fb55ac) /* 0.498861002 */, 17 },
4374 /* 4090 */ { MAD_F(0x07fc0040) /* 0.499023676 */, 17 },
4375 /* 4091 */ { MAD_F(0x07fcaad7) /* 0.499186364 */, 17 },
4376 /* 4092 */ { MAD_F(0x07fd5572) /* 0.499349064 */, 17 },
4377 /* 4093 */ { MAD_F(0x07fe0010) /* 0.499511778 */, 17 },
4378 /* 4094 */ { MAD_F(0x07feaab2) /* 0.499674506 */, 17 },
4379 /* 4095 */ { MAD_F(0x07ff5557) /* 0.499837246 */, 17 },
4380
4381 /* 4096 */ { MAD_F(0x04000000) /* 0.250000000 */, 18 },
4382 /* 4097 */ { MAD_F(0x04005556) /* 0.250081384 */, 18 },
4383 /* 4098 */ { MAD_F(0x0400aaae) /* 0.250162774 */, 18 },
4384 /* 4099 */ { MAD_F(0x04010008) /* 0.250244170 */, 18 },
4385 /* 4100 */ { MAD_F(0x04015563) /* 0.250325574 */, 18 },
4386 /* 4101 */ { MAD_F(0x0401aac1) /* 0.250406984 */, 18 },
4387 /* 4102 */ { MAD_F(0x04020020) /* 0.250488400 */, 18 },
4388 /* 4103 */ { MAD_F(0x04025581) /* 0.250569824 */, 18 },
4389 /* 4104 */ { MAD_F(0x0402aae3) /* 0.250651254 */, 18 },
4390 /* 4105 */ { MAD_F(0x04030048) /* 0.250732690 */, 18 },
4391 /* 4106 */ { MAD_F(0x040355ae) /* 0.250814133 */, 18 },
4392 /* 4107 */ { MAD_F(0x0403ab16) /* 0.250895583 */, 18 },
4393 /* 4108 */ { MAD_F(0x04040080) /* 0.250977039 */, 18 },
4394 /* 4109 */ { MAD_F(0x040455eb) /* 0.251058502 */, 18 },
4395 /* 4110 */ { MAD_F(0x0404ab59) /* 0.251139971 */, 18 },
4396 /* 4111 */ { MAD_F(0x040500c8) /* 0.251221448 */, 18 },
4397
4398 /* 4112 */ { MAD_F(0x04055638) /* 0.251302930 */, 18 },
4399 /* 4113 */ { MAD_F(0x0405abab) /* 0.251384420 */, 18 },
4400 /* 4114 */ { MAD_F(0x0406011f) /* 0.251465916 */, 18 },
4401 /* 4115 */ { MAD_F(0x04065696) /* 0.251547418 */, 18 },
4402 /* 4116 */ { MAD_F(0x0406ac0e) /* 0.251628927 */, 18 },
4403 /* 4117 */ { MAD_F(0x04070187) /* 0.251710443 */, 18 },
4404 /* 4118 */ { MAD_F(0x04075703) /* 0.251791965 */, 18 },
4405 /* 4119 */ { MAD_F(0x0407ac80) /* 0.251873494 */, 18 },
4406 /* 4120 */ { MAD_F(0x040801ff) /* 0.251955030 */, 18 },
4407 /* 4121 */ { MAD_F(0x04085780) /* 0.252036572 */, 18 },
4408 /* 4122 */ { MAD_F(0x0408ad02) /* 0.252118121 */, 18 },
4409 /* 4123 */ { MAD_F(0x04090287) /* 0.252199676 */, 18 },
4410 /* 4124 */ { MAD_F(0x0409580d) /* 0.252281238 */, 18 },
4411 /* 4125 */ { MAD_F(0x0409ad95) /* 0.252362807 */, 18 },
4412 /* 4126 */ { MAD_F(0x040a031e) /* 0.252444382 */, 18 },
4413 /* 4127 */ { MAD_F(0x040a58aa) /* 0.252525963 */, 18 },
4414
4415 /* 4128 */ { MAD_F(0x040aae37) /* 0.252607552 */, 18 },
4416 /* 4129 */ { MAD_F(0x040b03c6) /* 0.252689147 */, 18 },
4417 /* 4130 */ { MAD_F(0x040b5957) /* 0.252770748 */, 18 },
4418 /* 4131 */ { MAD_F(0x040baee9) /* 0.252852356 */, 18 },
4419 /* 4132 */ { MAD_F(0x040c047e) /* 0.252933971 */, 18 },
4420 /* 4133 */ { MAD_F(0x040c5a14) /* 0.253015592 */, 18 },
4421 /* 4134 */ { MAD_F(0x040cafab) /* 0.253097220 */, 18 },
4422 /* 4135 */ { MAD_F(0x040d0545) /* 0.253178854 */, 18 },
4423 /* 4136 */ { MAD_F(0x040d5ae0) /* 0.253260495 */, 18 },
4424 /* 4137 */ { MAD_F(0x040db07d) /* 0.253342143 */, 18 },
4425 /* 4138 */ { MAD_F(0x040e061c) /* 0.253423797 */, 18 },
4426 /* 4139 */ { MAD_F(0x040e5bbd) /* 0.253505457 */, 18 },
4427 /* 4140 */ { MAD_F(0x040eb15f) /* 0.253587125 */, 18 },
4428 /* 4141 */ { MAD_F(0x040f0703) /* 0.253668799 */, 18 },
4429 /* 4142 */ { MAD_F(0x040f5ca9) /* 0.253750479 */, 18 },
4430 /* 4143 */ { MAD_F(0x040fb251) /* 0.253832166 */, 18 },
4431
4432 /* 4144 */ { MAD_F(0x041007fa) /* 0.253913860 */, 18 },
4433 /* 4145 */ { MAD_F(0x04105da6) /* 0.253995560 */, 18 },
4434 /* 4146 */ { MAD_F(0x0410b353) /* 0.254077266 */, 18 },
4435 /* 4147 */ { MAD_F(0x04110901) /* 0.254158980 */, 18 },
4436 /* 4148 */ { MAD_F(0x04115eb2) /* 0.254240700 */, 18 },
4437 /* 4149 */ { MAD_F(0x0411b464) /* 0.254322426 */, 18 },
4438 /* 4150 */ { MAD_F(0x04120a18) /* 0.254404159 */, 18 },
4439 /* 4151 */ { MAD_F(0x04125fce) /* 0.254485899 */, 18 },
4440 /* 4152 */ { MAD_F(0x0412b586) /* 0.254567645 */, 18 },
4441 /* 4153 */ { MAD_F(0x04130b3f) /* 0.254649397 */, 18 },
4442 /* 4154 */ { MAD_F(0x041360fa) /* 0.254731157 */, 18 },
4443 /* 4155 */ { MAD_F(0x0413b6b7) /* 0.254812922 */, 18 },
4444 /* 4156 */ { MAD_F(0x04140c75) /* 0.254894695 */, 18 },
4445 /* 4157 */ { MAD_F(0x04146236) /* 0.254976474 */, 18 },
4446 /* 4158 */ { MAD_F(0x0414b7f8) /* 0.255058259 */, 18 },
4447 /* 4159 */ { MAD_F(0x04150dbc) /* 0.255140051 */, 18 },
4448
4449 /* 4160 */ { MAD_F(0x04156381) /* 0.255221850 */, 18 },
4450 /* 4161 */ { MAD_F(0x0415b949) /* 0.255303655 */, 18 },
4451 /* 4162 */ { MAD_F(0x04160f12) /* 0.255385467 */, 18 },
4452 /* 4163 */ { MAD_F(0x041664dd) /* 0.255467285 */, 18 },
4453 /* 4164 */ { MAD_F(0x0416baaa) /* 0.255549110 */, 18 },
4454 /* 4165 */ { MAD_F(0x04171078) /* 0.255630941 */, 18 },
4455 /* 4166 */ { MAD_F(0x04176648) /* 0.255712779 */, 18 },
4456 /* 4167 */ { MAD_F(0x0417bc1a) /* 0.255794624 */, 18 },
4457 /* 4168 */ { MAD_F(0x041811ee) /* 0.255876475 */, 18 },
4458 /* 4169 */ { MAD_F(0x041867c3) /* 0.255958332 */, 18 },
4459 /* 4170 */ { MAD_F(0x0418bd9b) /* 0.256040196 */, 18 },
4460 /* 4171 */ { MAD_F(0x04191374) /* 0.256122067 */, 18 },
4461 /* 4172 */ { MAD_F(0x0419694e) /* 0.256203944 */, 18 },
4462 /* 4173 */ { MAD_F(0x0419bf2b) /* 0.256285828 */, 18 },
4463 /* 4174 */ { MAD_F(0x041a1509) /* 0.256367718 */, 18 },
4464 /* 4175 */ { MAD_F(0x041a6ae9) /* 0.256449615 */, 18 },
4465
4466 /* 4176 */ { MAD_F(0x041ac0cb) /* 0.256531518 */, 18 },
4467 /* 4177 */ { MAD_F(0x041b16ae) /* 0.256613428 */, 18 },
4468 /* 4178 */ { MAD_F(0x041b6c94) /* 0.256695344 */, 18 },
4469 /* 4179 */ { MAD_F(0x041bc27b) /* 0.256777267 */, 18 },
4470 /* 4180 */ { MAD_F(0x041c1863) /* 0.256859197 */, 18 },
4471 /* 4181 */ { MAD_F(0x041c6e4e) /* 0.256941133 */, 18 },
4472 /* 4182 */ { MAD_F(0x041cc43a) /* 0.257023076 */, 18 },
4473 /* 4183 */ { MAD_F(0x041d1a28) /* 0.257105025 */, 18 },
4474 /* 4184 */ { MAD_F(0x041d7018) /* 0.257186980 */, 18 },
4475 /* 4185 */ { MAD_F(0x041dc60a) /* 0.257268942 */, 18 },
4476 /* 4186 */ { MAD_F(0x041e1bfd) /* 0.257350911 */, 18 },
4477 /* 4187 */ { MAD_F(0x041e71f2) /* 0.257432886 */, 18 },
4478 /* 4188 */ { MAD_F(0x041ec7e9) /* 0.257514868 */, 18 },
4479 /* 4189 */ { MAD_F(0x041f1de1) /* 0.257596856 */, 18 },
4480 /* 4190 */ { MAD_F(0x041f73dc) /* 0.257678851 */, 18 },
4481 /* 4191 */ { MAD_F(0x041fc9d8) /* 0.257760852 */, 18 },
4482
4483 /* 4192 */ { MAD_F(0x04201fd5) /* 0.257842860 */, 18 },
4484 /* 4193 */ { MAD_F(0x042075d5) /* 0.257924875 */, 18 },
4485 /* 4194 */ { MAD_F(0x0420cbd6) /* 0.258006895 */, 18 },
4486 /* 4195 */ { MAD_F(0x042121d9) /* 0.258088923 */, 18 },
4487 /* 4196 */ { MAD_F(0x042177de) /* 0.258170957 */, 18 },
4488 /* 4197 */ { MAD_F(0x0421cde5) /* 0.258252997 */, 18 },
4489 /* 4198 */ { MAD_F(0x042223ed) /* 0.258335044 */, 18 },
4490 /* 4199 */ { MAD_F(0x042279f7) /* 0.258417097 */, 18 },
4491 /* 4200 */ { MAD_F(0x0422d003) /* 0.258499157 */, 18 },
4492 /* 4201 */ { MAD_F(0x04232611) /* 0.258581224 */, 18 },
4493 /* 4202 */ { MAD_F(0x04237c20) /* 0.258663297 */, 18 },
4494 /* 4203 */ { MAD_F(0x0423d231) /* 0.258745376 */, 18 },
4495 /* 4204 */ { MAD_F(0x04242844) /* 0.258827462 */, 18 },
4496 /* 4205 */ { MAD_F(0x04247e58) /* 0.258909555 */, 18 },
4497 /* 4206 */ { MAD_F(0x0424d46e) /* 0.258991654 */, 18 },
4498 /* 4207 */ { MAD_F(0x04252a87) /* 0.259073760 */, 18 },
4499
4500 /* 4208 */ { MAD_F(0x042580a0) /* 0.259155872 */, 18 },
4501 /* 4209 */ { MAD_F(0x0425d6bc) /* 0.259237990 */, 18 },
4502 /* 4210 */ { MAD_F(0x04262cd9) /* 0.259320115 */, 18 },
4503 /* 4211 */ { MAD_F(0x042682f8) /* 0.259402247 */, 18 },
4504 /* 4212 */ { MAD_F(0x0426d919) /* 0.259484385 */, 18 },
4505 /* 4213 */ { MAD_F(0x04272f3b) /* 0.259566529 */, 18 },
4506 /* 4214 */ { MAD_F(0x04278560) /* 0.259648680 */, 18 },
4507 /* 4215 */ { MAD_F(0x0427db86) /* 0.259730838 */, 18 },
4508 /* 4216 */ { MAD_F(0x042831ad) /* 0.259813002 */, 18 },
4509 /* 4217 */ { MAD_F(0x042887d7) /* 0.259895173 */, 18 },
4510 /* 4218 */ { MAD_F(0x0428de02) /* 0.259977350 */, 18 },
4511 /* 4219 */ { MAD_F(0x0429342f) /* 0.260059533 */, 18 },
4512 /* 4220 */ { MAD_F(0x04298a5e) /* 0.260141723 */, 18 },
4513 /* 4221 */ { MAD_F(0x0429e08e) /* 0.260223920 */, 18 },
4514 /* 4222 */ { MAD_F(0x042a36c0) /* 0.260306123 */, 18 },
4515 /* 4223 */ { MAD_F(0x042a8cf4) /* 0.260388332 */, 18 },
4516
4517 /* 4224 */ { MAD_F(0x042ae32a) /* 0.260470548 */, 18 },
4518 /* 4225 */ { MAD_F(0x042b3962) /* 0.260552771 */, 18 },
4519 /* 4226 */ { MAD_F(0x042b8f9b) /* 0.260635000 */, 18 },
4520 /* 4227 */ { MAD_F(0x042be5d6) /* 0.260717235 */, 18 },
4521 /* 4228 */ { MAD_F(0x042c3c12) /* 0.260799477 */, 18 },
4522 /* 4229 */ { MAD_F(0x042c9251) /* 0.260881725 */, 18 },
4523 /* 4230 */ { MAD_F(0x042ce891) /* 0.260963980 */, 18 },
4524 /* 4231 */ { MAD_F(0x042d3ed3) /* 0.261046242 */, 18 },
4525 /* 4232 */ { MAD_F(0x042d9516) /* 0.261128510 */, 18 },
4526 /* 4233 */ { MAD_F(0x042deb5c) /* 0.261210784 */, 18 },
4527 /* 4234 */ { MAD_F(0x042e41a3) /* 0.261293065 */, 18 },
4528 /* 4235 */ { MAD_F(0x042e97ec) /* 0.261375352 */, 18 },
4529 /* 4236 */ { MAD_F(0x042eee36) /* 0.261457646 */, 18 },
4530 /* 4237 */ { MAD_F(0x042f4482) /* 0.261539946 */, 18 },
4531 /* 4238 */ { MAD_F(0x042f9ad1) /* 0.261622253 */, 18 },
4532 /* 4239 */ { MAD_F(0x042ff120) /* 0.261704566 */, 18 },
4533
4534 /* 4240 */ { MAD_F(0x04304772) /* 0.261786886 */, 18 },
4535 /* 4241 */ { MAD_F(0x04309dc5) /* 0.261869212 */, 18 },
4536 /* 4242 */ { MAD_F(0x0430f41a) /* 0.261951545 */, 18 },
4537 /* 4243 */ { MAD_F(0x04314a71) /* 0.262033884 */, 18 },
4538 /* 4244 */ { MAD_F(0x0431a0c9) /* 0.262116229 */, 18 },
4539 /* 4245 */ { MAD_F(0x0431f723) /* 0.262198581 */, 18 },
4540 /* 4246 */ { MAD_F(0x04324d7f) /* 0.262280940 */, 18 },
4541 /* 4247 */ { MAD_F(0x0432a3dd) /* 0.262363305 */, 18 },
4542 /* 4248 */ { MAD_F(0x0432fa3d) /* 0.262445676 */, 18 },
4543 /* 4249 */ { MAD_F(0x0433509e) /* 0.262528054 */, 18 },
4544 /* 4250 */ { MAD_F(0x0433a701) /* 0.262610438 */, 18 },
4545 /* 4251 */ { MAD_F(0x0433fd65) /* 0.262692829 */, 18 },
4546 /* 4252 */ { MAD_F(0x043453cc) /* 0.262775227 */, 18 },
4547 /* 4253 */ { MAD_F(0x0434aa34) /* 0.262857630 */, 18 },
4548 /* 4254 */ { MAD_F(0x0435009d) /* 0.262940040 */, 18 },
4549 /* 4255 */ { MAD_F(0x04355709) /* 0.263022457 */, 18 },
4550
4551 /* 4256 */ { MAD_F(0x0435ad76) /* 0.263104880 */, 18 },
4552 /* 4257 */ { MAD_F(0x043603e5) /* 0.263187310 */, 18 },
4553 /* 4258 */ { MAD_F(0x04365a56) /* 0.263269746 */, 18 },
4554 /* 4259 */ { MAD_F(0x0436b0c9) /* 0.263352188 */, 18 },
4555 /* 4260 */ { MAD_F(0x0437073d) /* 0.263434637 */, 18 },
4556 /* 4261 */ { MAD_F(0x04375db3) /* 0.263517093 */, 18 },
4557 /* 4262 */ { MAD_F(0x0437b42a) /* 0.263599554 */, 18 },
4558 /* 4263 */ { MAD_F(0x04380aa4) /* 0.263682023 */, 18 },
4559 /* 4264 */ { MAD_F(0x0438611f) /* 0.263764497 */, 18 },
4560 /* 4265 */ { MAD_F(0x0438b79c) /* 0.263846979 */, 18 },
4561 /* 4266 */ { MAD_F(0x04390e1a) /* 0.263929466 */, 18 },
4562 /* 4267 */ { MAD_F(0x0439649b) /* 0.264011960 */, 18 },
4563 /* 4268 */ { MAD_F(0x0439bb1d) /* 0.264094461 */, 18 },
4564 /* 4269 */ { MAD_F(0x043a11a1) /* 0.264176968 */, 18 },
4565 /* 4270 */ { MAD_F(0x043a6826) /* 0.264259481 */, 18 },
4566 /* 4271 */ { MAD_F(0x043abead) /* 0.264342001 */, 18 },
4567
4568 /* 4272 */ { MAD_F(0x043b1536) /* 0.264424527 */, 18 },
4569 /* 4273 */ { MAD_F(0x043b6bc1) /* 0.264507060 */, 18 },
4570 /* 4274 */ { MAD_F(0x043bc24d) /* 0.264589599 */, 18 },
4571 /* 4275 */ { MAD_F(0x043c18dc) /* 0.264672145 */, 18 },
4572 /* 4276 */ { MAD_F(0x043c6f6c) /* 0.264754697 */, 18 },
4573 /* 4277 */ { MAD_F(0x043cc5fd) /* 0.264837255 */, 18 },
4574 /* 4278 */ { MAD_F(0x043d1c91) /* 0.264919820 */, 18 },
4575 /* 4279 */ { MAD_F(0x043d7326) /* 0.265002392 */, 18 },
4576 /* 4280 */ { MAD_F(0x043dc9bc) /* 0.265084969 */, 18 },
4577 /* 4281 */ { MAD_F(0x043e2055) /* 0.265167554 */, 18 },
4578 /* 4282 */ { MAD_F(0x043e76ef) /* 0.265250144 */, 18 },
4579 /* 4283 */ { MAD_F(0x043ecd8b) /* 0.265332741 */, 18 },
4580 /* 4284 */ { MAD_F(0x043f2429) /* 0.265415345 */, 18 },
4581 /* 4285 */ { MAD_F(0x043f7ac8) /* 0.265497955 */, 18 },
4582 /* 4286 */ { MAD_F(0x043fd169) /* 0.265580571 */, 18 },
4583 /* 4287 */ { MAD_F(0x0440280c) /* 0.265663194 */, 18 },
4584
4585 /* 4288 */ { MAD_F(0x04407eb1) /* 0.265745823 */, 18 },
4586 /* 4289 */ { MAD_F(0x0440d557) /* 0.265828459 */, 18 },
4587 /* 4290 */ { MAD_F(0x04412bff) /* 0.265911101 */, 18 },
4588 /* 4291 */ { MAD_F(0x044182a9) /* 0.265993749 */, 18 },
4589 /* 4292 */ { MAD_F(0x0441d955) /* 0.266076404 */, 18 },
4590 /* 4293 */ { MAD_F(0x04423002) /* 0.266159065 */, 18 },
4591 /* 4294 */ { MAD_F(0x044286b1) /* 0.266241733 */, 18 },
4592 /* 4295 */ { MAD_F(0x0442dd61) /* 0.266324407 */, 18 },
4593 /* 4296 */ { MAD_F(0x04433414) /* 0.266407088 */, 18 },
4594 /* 4297 */ { MAD_F(0x04438ac8) /* 0.266489775 */, 18 },
4595 /* 4298 */ { MAD_F(0x0443e17e) /* 0.266572468 */, 18 },
4596 /* 4299 */ { MAD_F(0x04443835) /* 0.266655168 */, 18 },
4597 /* 4300 */ { MAD_F(0x04448eef) /* 0.266737874 */, 18 },
4598 /* 4301 */ { MAD_F(0x0444e5aa) /* 0.266820587 */, 18 },
4599 /* 4302 */ { MAD_F(0x04453c66) /* 0.266903306 */, 18 },
4600 /* 4303 */ { MAD_F(0x04459325) /* 0.266986031 */, 18 },
4601
4602 /* 4304 */ { MAD_F(0x0445e9e5) /* 0.267068763 */, 18 },
4603 /* 4305 */ { MAD_F(0x044640a7) /* 0.267151501 */, 18 },
4604 /* 4306 */ { MAD_F(0x0446976a) /* 0.267234246 */, 18 },
4605 /* 4307 */ { MAD_F(0x0446ee30) /* 0.267316997 */, 18 },
4606 /* 4308 */ { MAD_F(0x044744f7) /* 0.267399755 */, 18 },
4607 /* 4309 */ { MAD_F(0x04479bc0) /* 0.267482518 */, 18 },
4608 /* 4310 */ { MAD_F(0x0447f28a) /* 0.267565289 */, 18 },
4609 /* 4311 */ { MAD_F(0x04484956) /* 0.267648065 */, 18 },
4610 /* 4312 */ { MAD_F(0x0448a024) /* 0.267730848 */, 18 },
4611 /* 4313 */ { MAD_F(0x0448f6f4) /* 0.267813638 */, 18 },
4612 /* 4314 */ { MAD_F(0x04494dc5) /* 0.267896434 */, 18 },
4613 /* 4315 */ { MAD_F(0x0449a498) /* 0.267979236 */, 18 },
4614 /* 4316 */ { MAD_F(0x0449fb6d) /* 0.268062045 */, 18 },
4615 /* 4317 */ { MAD_F(0x044a5243) /* 0.268144860 */, 18 },
4616 /* 4318 */ { MAD_F(0x044aa91c) /* 0.268227681 */, 18 },
4617 /* 4319 */ { MAD_F(0x044afff6) /* 0.268310509 */, 18 },
4618
4619 /* 4320 */ { MAD_F(0x044b56d1) /* 0.268393343 */, 18 },
4620 /* 4321 */ { MAD_F(0x044badaf) /* 0.268476184 */, 18 },
4621 /* 4322 */ { MAD_F(0x044c048e) /* 0.268559031 */, 18 },
4622 /* 4323 */ { MAD_F(0x044c5b6f) /* 0.268641885 */, 18 },
4623 /* 4324 */ { MAD_F(0x044cb251) /* 0.268724744 */, 18 },
4624 /* 4325 */ { MAD_F(0x044d0935) /* 0.268807611 */, 18 },
4625 /* 4326 */ { MAD_F(0x044d601b) /* 0.268890483 */, 18 },
4626 /* 4327 */ { MAD_F(0x044db703) /* 0.268973362 */, 18 },
4627 /* 4328 */ { MAD_F(0x044e0dec) /* 0.269056248 */, 18 },
4628 /* 4329 */ { MAD_F(0x044e64d7) /* 0.269139139 */, 18 },
4629 /* 4330 */ { MAD_F(0x044ebbc4) /* 0.269222037 */, 18 },
4630 /* 4331 */ { MAD_F(0x044f12b3) /* 0.269304942 */, 18 },
4631 /* 4332 */ { MAD_F(0x044f69a3) /* 0.269387853 */, 18 },
4632 /* 4333 */ { MAD_F(0x044fc095) /* 0.269470770 */, 18 },
4633 /* 4334 */ { MAD_F(0x04501788) /* 0.269553694 */, 18 },
4634 /* 4335 */ { MAD_F(0x04506e7e) /* 0.269636624 */, 18 },
4635
4636 /* 4336 */ { MAD_F(0x0450c575) /* 0.269719560 */, 18 },
4637 /* 4337 */ { MAD_F(0x04511c6e) /* 0.269802503 */, 18 },
4638 /* 4338 */ { MAD_F(0x04517368) /* 0.269885452 */, 18 },
4639 /* 4339 */ { MAD_F(0x0451ca64) /* 0.269968408 */, 18 },
4640 /* 4340 */ { MAD_F(0x04522162) /* 0.270051370 */, 18 },
4641 /* 4341 */ { MAD_F(0x04527862) /* 0.270134338 */, 18 },
4642 /* 4342 */ { MAD_F(0x0452cf63) /* 0.270217312 */, 18 },
4643 /* 4343 */ { MAD_F(0x04532666) /* 0.270300293 */, 18 },
4644 /* 4344 */ { MAD_F(0x04537d6b) /* 0.270383281 */, 18 },
4645 /* 4345 */ { MAD_F(0x0453d472) /* 0.270466275 */, 18 },
4646 /* 4346 */ { MAD_F(0x04542b7a) /* 0.270549275 */, 18 },
4647 /* 4347 */ { MAD_F(0x04548284) /* 0.270632281 */, 18 },
4648 /* 4348 */ { MAD_F(0x0454d98f) /* 0.270715294 */, 18 },
4649 /* 4349 */ { MAD_F(0x0455309c) /* 0.270798313 */, 18 },
4650 /* 4350 */ { MAD_F(0x045587ab) /* 0.270881339 */, 18 },
4651 /* 4351 */ { MAD_F(0x0455debc) /* 0.270964371 */, 18 },
4652
4653 /* 4352 */ { MAD_F(0x045635cf) /* 0.271047409 */, 18 },
4654 /* 4353 */ { MAD_F(0x04568ce3) /* 0.271130454 */, 18 },
4655 /* 4354 */ { MAD_F(0x0456e3f9) /* 0.271213505 */, 18 },
4656 /* 4355 */ { MAD_F(0x04573b10) /* 0.271296562 */, 18 },
4657 /* 4356 */ { MAD_F(0x04579229) /* 0.271379626 */, 18 },
4658 /* 4357 */ { MAD_F(0x0457e944) /* 0.271462696 */, 18 },
4659 /* 4358 */ { MAD_F(0x04584061) /* 0.271545772 */, 18 },
4660 /* 4359 */ { MAD_F(0x0458977f) /* 0.271628855 */, 18 },
4661 /* 4360 */ { MAD_F(0x0458ee9f) /* 0.271711944 */, 18 },
4662 /* 4361 */ { MAD_F(0x045945c1) /* 0.271795040 */, 18 },
4663 /* 4362 */ { MAD_F(0x04599ce5) /* 0.271878142 */, 18 },
4664 /* 4363 */ { MAD_F(0x0459f40a) /* 0.271961250 */, 18 },
4665 /* 4364 */ { MAD_F(0x045a4b31) /* 0.272044365 */, 18 },
4666 /* 4365 */ { MAD_F(0x045aa259) /* 0.272127486 */, 18 },
4667 /* 4366 */ { MAD_F(0x045af984) /* 0.272210613 */, 18 },
4668 /* 4367 */ { MAD_F(0x045b50b0) /* 0.272293746 */, 18 },
4669
4670 /* 4368 */ { MAD_F(0x045ba7dd) /* 0.272376886 */, 18 },
4671 /* 4369 */ { MAD_F(0x045bff0d) /* 0.272460033 */, 18 },
4672 /* 4370 */ { MAD_F(0x045c563e) /* 0.272543185 */, 18 },
4673 /* 4371 */ { MAD_F(0x045cad71) /* 0.272626344 */, 18 },
4674 /* 4372 */ { MAD_F(0x045d04a5) /* 0.272709510 */, 18 },
4675 /* 4373 */ { MAD_F(0x045d5bdc) /* 0.272792681 */, 18 },
4676 /* 4374 */ { MAD_F(0x045db313) /* 0.272875859 */, 18 },
4677 /* 4375 */ { MAD_F(0x045e0a4d) /* 0.272959044 */, 18 },
4678 /* 4376 */ { MAD_F(0x045e6188) /* 0.273042234 */, 18 },
4679 /* 4377 */ { MAD_F(0x045eb8c5) /* 0.273125431 */, 18 },
4680 /* 4378 */ { MAD_F(0x045f1004) /* 0.273208635 */, 18 },
4681 /* 4379 */ { MAD_F(0x045f6745) /* 0.273291844 */, 18 },
4682 /* 4380 */ { MAD_F(0x045fbe87) /* 0.273375060 */, 18 },
4683 /* 4381 */ { MAD_F(0x046015cb) /* 0.273458283 */, 18 },
4684 /* 4382 */ { MAD_F(0x04606d10) /* 0.273541511 */, 18 },
4685 /* 4383 */ { MAD_F(0x0460c457) /* 0.273624747 */, 18 },
4686
4687 /* 4384 */ { MAD_F(0x04611ba0) /* 0.273707988 */, 18 },
4688 /* 4385 */ { MAD_F(0x046172eb) /* 0.273791236 */, 18 },
4689 /* 4386 */ { MAD_F(0x0461ca37) /* 0.273874490 */, 18 },
4690 /* 4387 */ { MAD_F(0x04622185) /* 0.273957750 */, 18 },
4691 /* 4388 */ { MAD_F(0x046278d5) /* 0.274041017 */, 18 },
4692 /* 4389 */ { MAD_F(0x0462d026) /* 0.274124290 */, 18 },
4693 /* 4390 */ { MAD_F(0x0463277a) /* 0.274207569 */, 18 },
4694 /* 4391 */ { MAD_F(0x04637ece) /* 0.274290855 */, 18 },
4695 /* 4392 */ { MAD_F(0x0463d625) /* 0.274374147 */, 18 },
4696 /* 4393 */ { MAD_F(0x04642d7d) /* 0.274457445 */, 18 },
4697 /* 4394 */ { MAD_F(0x046484d7) /* 0.274540749 */, 18 },
4698 /* 4395 */ { MAD_F(0x0464dc33) /* 0.274624060 */, 18 },
4699 /* 4396 */ { MAD_F(0x04653390) /* 0.274707378 */, 18 },
4700 /* 4397 */ { MAD_F(0x04658aef) /* 0.274790701 */, 18 },
4701 /* 4398 */ { MAD_F(0x0465e250) /* 0.274874031 */, 18 },
4702 /* 4399 */ { MAD_F(0x046639b2) /* 0.274957367 */, 18 },
4703
4704 /* 4400 */ { MAD_F(0x04669116) /* 0.275040710 */, 18 },
4705 /* 4401 */ { MAD_F(0x0466e87c) /* 0.275124059 */, 18 },
4706 /* 4402 */ { MAD_F(0x04673fe3) /* 0.275207414 */, 18 },
4707 /* 4403 */ { MAD_F(0x0467974d) /* 0.275290775 */, 18 },
4708 /* 4404 */ { MAD_F(0x0467eeb7) /* 0.275374143 */, 18 },
4709 /* 4405 */ { MAD_F(0x04684624) /* 0.275457517 */, 18 },
4710 /* 4406 */ { MAD_F(0x04689d92) /* 0.275540897 */, 18 },
4711 /* 4407 */ { MAD_F(0x0468f502) /* 0.275624284 */, 18 },
4712 /* 4408 */ { MAD_F(0x04694c74) /* 0.275707677 */, 18 },
4713 /* 4409 */ { MAD_F(0x0469a3e7) /* 0.275791076 */, 18 },
4714 /* 4410 */ { MAD_F(0x0469fb5c) /* 0.275874482 */, 18 },
4715 /* 4411 */ { MAD_F(0x046a52d3) /* 0.275957894 */, 18 },
4716 /* 4412 */ { MAD_F(0x046aaa4b) /* 0.276041312 */, 18 },
4717 /* 4413 */ { MAD_F(0x046b01c5) /* 0.276124737 */, 18 },
4718 /* 4414 */ { MAD_F(0x046b5941) /* 0.276208167 */, 18 },
4719 /* 4415 */ { MAD_F(0x046bb0bf) /* 0.276291605 */, 18 },
4720
4721 /* 4416 */ { MAD_F(0x046c083e) /* 0.276375048 */, 18 },
4722 /* 4417 */ { MAD_F(0x046c5fbf) /* 0.276458498 */, 18 },
4723 /* 4418 */ { MAD_F(0x046cb741) /* 0.276541954 */, 18 },
4724 /* 4419 */ { MAD_F(0x046d0ec5) /* 0.276625416 */, 18 },
4725 /* 4420 */ { MAD_F(0x046d664b) /* 0.276708885 */, 18 },
4726 /* 4421 */ { MAD_F(0x046dbdd3) /* 0.276792360 */, 18 },
4727 /* 4422 */ { MAD_F(0x046e155c) /* 0.276875841 */, 18 },
4728 /* 4423 */ { MAD_F(0x046e6ce7) /* 0.276959328 */, 18 },
4729 /* 4424 */ { MAD_F(0x046ec474) /* 0.277042822 */, 18 },
4730 /* 4425 */ { MAD_F(0x046f1c02) /* 0.277126322 */, 18 },
4731 /* 4426 */ { MAD_F(0x046f7392) /* 0.277209829 */, 18 },
4732 /* 4427 */ { MAD_F(0x046fcb24) /* 0.277293341 */, 18 },
4733 /* 4428 */ { MAD_F(0x047022b8) /* 0.277376860 */, 18 },
4734 /* 4429 */ { MAD_F(0x04707a4d) /* 0.277460385 */, 18 },
4735 /* 4430 */ { MAD_F(0x0470d1e4) /* 0.277543917 */, 18 },
4736 /* 4431 */ { MAD_F(0x0471297c) /* 0.277627455 */, 18 },
4737
4738 /* 4432 */ { MAD_F(0x04718116) /* 0.277710999 */, 18 },
4739 /* 4433 */ { MAD_F(0x0471d8b2) /* 0.277794549 */, 18 },
4740 /* 4434 */ { MAD_F(0x04723050) /* 0.277878106 */, 18 },
4741 /* 4435 */ { MAD_F(0x047287ef) /* 0.277961669 */, 18 },
4742 /* 4436 */ { MAD_F(0x0472df90) /* 0.278045238 */, 18 },
4743 /* 4437 */ { MAD_F(0x04733733) /* 0.278128813 */, 18 },
4744 /* 4438 */ { MAD_F(0x04738ed7) /* 0.278212395 */, 18 },
4745 /* 4439 */ { MAD_F(0x0473e67d) /* 0.278295983 */, 18 },
4746 /* 4440 */ { MAD_F(0x04743e25) /* 0.278379578 */, 18 },
4747 /* 4441 */ { MAD_F(0x047495ce) /* 0.278463178 */, 18 },
4748 /* 4442 */ { MAD_F(0x0474ed79) /* 0.278546785 */, 18 },
4749 /* 4443 */ { MAD_F(0x04754526) /* 0.278630398 */, 18 },
4750 /* 4444 */ { MAD_F(0x04759cd4) /* 0.278714018 */, 18 },
4751 /* 4445 */ { MAD_F(0x0475f484) /* 0.278797643 */, 18 },
4752 /* 4446 */ { MAD_F(0x04764c36) /* 0.278881275 */, 18 },
4753 /* 4447 */ { MAD_F(0x0476a3ea) /* 0.278964914 */, 18 },
4754
4755 /* 4448 */ { MAD_F(0x0476fb9f) /* 0.279048558 */, 18 },
4756 /* 4449 */ { MAD_F(0x04775356) /* 0.279132209 */, 18 },
4757 /* 4450 */ { MAD_F(0x0477ab0e) /* 0.279215866 */, 18 },
4758 /* 4451 */ { MAD_F(0x047802c8) /* 0.279299529 */, 18 },
4759 /* 4452 */ { MAD_F(0x04785a84) /* 0.279383199 */, 18 },
4760 /* 4453 */ { MAD_F(0x0478b242) /* 0.279466875 */, 18 },
4761 /* 4454 */ { MAD_F(0x04790a01) /* 0.279550557 */, 18 },
4762 /* 4455 */ { MAD_F(0x047961c2) /* 0.279634245 */, 18 },
4763 /* 4456 */ { MAD_F(0x0479b984) /* 0.279717940 */, 18 },
4764 /* 4457 */ { MAD_F(0x047a1149) /* 0.279801641 */, 18 },
4765 /* 4458 */ { MAD_F(0x047a690f) /* 0.279885348 */, 18 },
4766 /* 4459 */ { MAD_F(0x047ac0d6) /* 0.279969061 */, 18 },
4767 /* 4460 */ { MAD_F(0x047b18a0) /* 0.280052781 */, 18 },
4768 /* 4461 */ { MAD_F(0x047b706b) /* 0.280136507 */, 18 },
4769 /* 4462 */ { MAD_F(0x047bc837) /* 0.280220239 */, 18 },
4770 /* 4463 */ { MAD_F(0x047c2006) /* 0.280303978 */, 18 },
4771
4772 /* 4464 */ { MAD_F(0x047c77d6) /* 0.280387722 */, 18 },
4773 /* 4465 */ { MAD_F(0x047ccfa8) /* 0.280471473 */, 18 },
4774 /* 4466 */ { MAD_F(0x047d277b) /* 0.280555230 */, 18 },
4775 /* 4467 */ { MAD_F(0x047d7f50) /* 0.280638994 */, 18 },
4776 /* 4468 */ { MAD_F(0x047dd727) /* 0.280722764 */, 18 },
4777 /* 4469 */ { MAD_F(0x047e2eff) /* 0.280806540 */, 18 },
4778 /* 4470 */ { MAD_F(0x047e86d9) /* 0.280890322 */, 18 },
4779 /* 4471 */ { MAD_F(0x047edeb5) /* 0.280974110 */, 18 },
4780 /* 4472 */ { MAD_F(0x047f3693) /* 0.281057905 */, 18 },
4781 /* 4473 */ { MAD_F(0x047f8e72) /* 0.281141706 */, 18 },
4782 /* 4474 */ { MAD_F(0x047fe653) /* 0.281225513 */, 18 },
4783 /* 4475 */ { MAD_F(0x04803e35) /* 0.281309326 */, 18 },
4784 /* 4476 */ { MAD_F(0x04809619) /* 0.281393146 */, 18 },
4785 /* 4477 */ { MAD_F(0x0480edff) /* 0.281476972 */, 18 },
4786 /* 4478 */ { MAD_F(0x048145e7) /* 0.281560804 */, 18 },
4787 /* 4479 */ { MAD_F(0x04819dd0) /* 0.281644643 */, 18 },
4788
4789 /* 4480 */ { MAD_F(0x0481f5bb) /* 0.281728487 */, 18 },
4790 /* 4481 */ { MAD_F(0x04824da7) /* 0.281812338 */, 18 },
4791 /* 4482 */ { MAD_F(0x0482a595) /* 0.281896195 */, 18 },
4792 /* 4483 */ { MAD_F(0x0482fd85) /* 0.281980059 */, 18 },
4793 /* 4484 */ { MAD_F(0x04835577) /* 0.282063928 */, 18 },
4794 /* 4485 */ { MAD_F(0x0483ad6a) /* 0.282147804 */, 18 },
4795 /* 4486 */ { MAD_F(0x0484055f) /* 0.282231686 */, 18 },
4796 /* 4487 */ { MAD_F(0x04845d56) /* 0.282315574 */, 18 },
4797 /* 4488 */ { MAD_F(0x0484b54e) /* 0.282399469 */, 18 },
4798 /* 4489 */ { MAD_F(0x04850d48) /* 0.282483370 */, 18 },
4799 /* 4490 */ { MAD_F(0x04856544) /* 0.282567277 */, 18 },
4800 /* 4491 */ { MAD_F(0x0485bd41) /* 0.282651190 */, 18 },
4801 /* 4492 */ { MAD_F(0x04861540) /* 0.282735109 */, 18 },
4802 /* 4493 */ { MAD_F(0x04866d40) /* 0.282819035 */, 18 },
4803 /* 4494 */ { MAD_F(0x0486c543) /* 0.282902967 */, 18 },
4804 /* 4495 */ { MAD_F(0x04871d47) /* 0.282986905 */, 18 },
4805
4806 /* 4496 */ { MAD_F(0x0487754c) /* 0.283070849 */, 18 },
4807 /* 4497 */ { MAD_F(0x0487cd54) /* 0.283154800 */, 18 },
4808 /* 4498 */ { MAD_F(0x0488255d) /* 0.283238757 */, 18 },
4809 /* 4499 */ { MAD_F(0x04887d67) /* 0.283322720 */, 18 },
4810 /* 4500 */ { MAD_F(0x0488d574) /* 0.283406689 */, 18 },
4811 /* 4501 */ { MAD_F(0x04892d82) /* 0.283490665 */, 18 },
4812 /* 4502 */ { MAD_F(0x04898591) /* 0.283574646 */, 18 },
4813 /* 4503 */ { MAD_F(0x0489dda3) /* 0.283658634 */, 18 },
4814 /* 4504 */ { MAD_F(0x048a35b6) /* 0.283742628 */, 18 },
4815 /* 4505 */ { MAD_F(0x048a8dca) /* 0.283826629 */, 18 },
4816 /* 4506 */ { MAD_F(0x048ae5e1) /* 0.283910635 */, 18 },
4817 /* 4507 */ { MAD_F(0x048b3df9) /* 0.283994648 */, 18 },
4818 /* 4508 */ { MAD_F(0x048b9612) /* 0.284078667 */, 18 },
4819 /* 4509 */ { MAD_F(0x048bee2e) /* 0.284162692 */, 18 },
4820 /* 4510 */ { MAD_F(0x048c464b) /* 0.284246723 */, 18 },
4821 /* 4511 */ { MAD_F(0x048c9e69) /* 0.284330761 */, 18 },
4822
4823 /* 4512 */ { MAD_F(0x048cf68a) /* 0.284414805 */, 18 },
4824 /* 4513 */ { MAD_F(0x048d4eac) /* 0.284498855 */, 18 },
4825 /* 4514 */ { MAD_F(0x048da6cf) /* 0.284582911 */, 18 },
4826 /* 4515 */ { MAD_F(0x048dfef5) /* 0.284666974 */, 18 },
4827 /* 4516 */ { MAD_F(0x048e571c) /* 0.284751042 */, 18 },
4828 /* 4517 */ { MAD_F(0x048eaf44) /* 0.284835117 */, 18 },
4829 /* 4518 */ { MAD_F(0x048f076f) /* 0.284919198 */, 18 },
4830 /* 4519 */ { MAD_F(0x048f5f9b) /* 0.285003285 */, 18 },
4831 /* 4520 */ { MAD_F(0x048fb7c8) /* 0.285087379 */, 18 },
4832 /* 4521 */ { MAD_F(0x04900ff8) /* 0.285171479 */, 18 },
4833 /* 4522 */ { MAD_F(0x04906829) /* 0.285255584 */, 18 },
4834 /* 4523 */ { MAD_F(0x0490c05b) /* 0.285339697 */, 18 },
4835 /* 4524 */ { MAD_F(0x04911890) /* 0.285423815 */, 18 },
4836 /* 4525 */ { MAD_F(0x049170c6) /* 0.285507939 */, 18 },
4837 /* 4526 */ { MAD_F(0x0491c8fd) /* 0.285592070 */, 18 },
4838 /* 4527 */ { MAD_F(0x04922137) /* 0.285676207 */, 18 },
4839
4840 /* 4528 */ { MAD_F(0x04927972) /* 0.285760350 */, 18 },
4841 /* 4529 */ { MAD_F(0x0492d1ae) /* 0.285844499 */, 18 },
4842 /* 4530 */ { MAD_F(0x049329ed) /* 0.285928655 */, 18 },
4843 /* 4531 */ { MAD_F(0x0493822c) /* 0.286012816 */, 18 },
4844 /* 4532 */ { MAD_F(0x0493da6e) /* 0.286096984 */, 18 },
4845 /* 4533 */ { MAD_F(0x049432b1) /* 0.286181158 */, 18 },
4846 /* 4534 */ { MAD_F(0x04948af6) /* 0.286265338 */, 18 },
4847 /* 4535 */ { MAD_F(0x0494e33d) /* 0.286349525 */, 18 },
4848 /* 4536 */ { MAD_F(0x04953b85) /* 0.286433717 */, 18 },
4849 /* 4537 */ { MAD_F(0x049593cf) /* 0.286517916 */, 18 },
4850 /* 4538 */ { MAD_F(0x0495ec1b) /* 0.286602121 */, 18 },
4851 /* 4539 */ { MAD_F(0x04964468) /* 0.286686332 */, 18 },
4852 /* 4540 */ { MAD_F(0x04969cb7) /* 0.286770550 */, 18 },
4853 /* 4541 */ { MAD_F(0x0496f508) /* 0.286854773 */, 18 },
4854 /* 4542 */ { MAD_F(0x04974d5a) /* 0.286939003 */, 18 },
4855 /* 4543 */ { MAD_F(0x0497a5ae) /* 0.287023239 */, 18 },
4856
4857 /* 4544 */ { MAD_F(0x0497fe03) /* 0.287107481 */, 18 },
4858 /* 4545 */ { MAD_F(0x0498565a) /* 0.287191729 */, 18 },
4859 /* 4546 */ { MAD_F(0x0498aeb3) /* 0.287275983 */, 18 },
4860 /* 4547 */ { MAD_F(0x0499070e) /* 0.287360244 */, 18 },
4861 /* 4548 */ { MAD_F(0x04995f6a) /* 0.287444511 */, 18 },
4862 /* 4549 */ { MAD_F(0x0499b7c8) /* 0.287528784 */, 18 },
4863 /* 4550 */ { MAD_F(0x049a1027) /* 0.287613063 */, 18 },
4864 /* 4551 */ { MAD_F(0x049a6889) /* 0.287697348 */, 18 },
4865 /* 4552 */ { MAD_F(0x049ac0eb) /* 0.287781640 */, 18 },
4866 /* 4553 */ { MAD_F(0x049b1950) /* 0.287865937 */, 18 },
4867 /* 4554 */ { MAD_F(0x049b71b6) /* 0.287950241 */, 18 },
4868 /* 4555 */ { MAD_F(0x049bca1e) /* 0.288034551 */, 18 },
4869 /* 4556 */ { MAD_F(0x049c2287) /* 0.288118867 */, 18 },
4870 /* 4557 */ { MAD_F(0x049c7af2) /* 0.288203190 */, 18 },
4871 /* 4558 */ { MAD_F(0x049cd35f) /* 0.288287518 */, 18 },
4872 /* 4559 */ { MAD_F(0x049d2bce) /* 0.288371853 */, 18 },
4873
4874 /* 4560 */ { MAD_F(0x049d843e) /* 0.288456194 */, 18 },
4875 /* 4561 */ { MAD_F(0x049ddcaf) /* 0.288540541 */, 18 },
4876 /* 4562 */ { MAD_F(0x049e3523) /* 0.288624894 */, 18 },
4877 /* 4563 */ { MAD_F(0x049e8d98) /* 0.288709253 */, 18 },
4878 /* 4564 */ { MAD_F(0x049ee60e) /* 0.288793619 */, 18 },
4879 /* 4565 */ { MAD_F(0x049f3e87) /* 0.288877990 */, 18 },
4880 /* 4566 */ { MAD_F(0x049f9701) /* 0.288962368 */, 18 },
4881 /* 4567 */ { MAD_F(0x049fef7c) /* 0.289046752 */, 18 },
4882 /* 4568 */ { MAD_F(0x04a047fa) /* 0.289131142 */, 18 },
4883 /* 4569 */ { MAD_F(0x04a0a079) /* 0.289215538 */, 18 },
4884 /* 4570 */ { MAD_F(0x04a0f8f9) /* 0.289299941 */, 18 },
4885 /* 4571 */ { MAD_F(0x04a1517c) /* 0.289384349 */, 18 },
4886 /* 4572 */ { MAD_F(0x04a1a9ff) /* 0.289468764 */, 18 },
4887 /* 4573 */ { MAD_F(0x04a20285) /* 0.289553185 */, 18 },
4888 /* 4574 */ { MAD_F(0x04a25b0c) /* 0.289637612 */, 18 },
4889 /* 4575 */ { MAD_F(0x04a2b395) /* 0.289722045 */, 18 },
4890
4891 /* 4576 */ { MAD_F(0x04a30c20) /* 0.289806485 */, 18 },
4892 /* 4577 */ { MAD_F(0x04a364ac) /* 0.289890930 */, 18 },
4893 /* 4578 */ { MAD_F(0x04a3bd3a) /* 0.289975382 */, 18 },
4894 /* 4579 */ { MAD_F(0x04a415c9) /* 0.290059840 */, 18 },
4895 /* 4580 */ { MAD_F(0x04a46e5a) /* 0.290144304 */, 18 },
4896 /* 4581 */ { MAD_F(0x04a4c6ed) /* 0.290228774 */, 18 },
4897 /* 4582 */ { MAD_F(0x04a51f81) /* 0.290313250 */, 18 },
4898 /* 4583 */ { MAD_F(0x04a57818) /* 0.290397733 */, 18 },
4899 /* 4584 */ { MAD_F(0x04a5d0af) /* 0.290482221 */, 18 },
4900 /* 4585 */ { MAD_F(0x04a62949) /* 0.290566716 */, 18 },
4901 /* 4586 */ { MAD_F(0x04a681e4) /* 0.290651217 */, 18 },
4902 /* 4587 */ { MAD_F(0x04a6da80) /* 0.290735724 */, 18 },
4903 /* 4588 */ { MAD_F(0x04a7331f) /* 0.290820237 */, 18 },
4904 /* 4589 */ { MAD_F(0x04a78bbf) /* 0.290904756 */, 18 },
4905 /* 4590 */ { MAD_F(0x04a7e460) /* 0.290989281 */, 18 },
4906 /* 4591 */ { MAD_F(0x04a83d03) /* 0.291073813 */, 18 },
4907
4908 /* 4592 */ { MAD_F(0x04a895a8) /* 0.291158351 */, 18 },
4909 /* 4593 */ { MAD_F(0x04a8ee4f) /* 0.291242894 */, 18 },
4910 /* 4594 */ { MAD_F(0x04a946f7) /* 0.291327444 */, 18 },
4911 /* 4595 */ { MAD_F(0x04a99fa1) /* 0.291412001 */, 18 },
4912 /* 4596 */ { MAD_F(0x04a9f84c) /* 0.291496563 */, 18 },
4913 /* 4597 */ { MAD_F(0x04aa50fa) /* 0.291581131 */, 18 },
4914 /* 4598 */ { MAD_F(0x04aaa9a8) /* 0.291665706 */, 18 },
4915 /* 4599 */ { MAD_F(0x04ab0259) /* 0.291750286 */, 18 },
4916 /* 4600 */ { MAD_F(0x04ab5b0b) /* 0.291834873 */, 18 },
4917 /* 4601 */ { MAD_F(0x04abb3bf) /* 0.291919466 */, 18 },
4918 /* 4602 */ { MAD_F(0x04ac0c74) /* 0.292004065 */, 18 },
4919 /* 4603 */ { MAD_F(0x04ac652b) /* 0.292088670 */, 18 },
4920 /* 4604 */ { MAD_F(0x04acbde4) /* 0.292173281 */, 18 },
4921 /* 4605 */ { MAD_F(0x04ad169e) /* 0.292257899 */, 18 },
4922 /* 4606 */ { MAD_F(0x04ad6f5a) /* 0.292342522 */, 18 },
4923 /* 4607 */ { MAD_F(0x04adc818) /* 0.292427152 */, 18 },
4924
4925 /* 4608 */ { MAD_F(0x04ae20d7) /* 0.292511788 */, 18 },
4926 /* 4609 */ { MAD_F(0x04ae7998) /* 0.292596430 */, 18 },
4927 /* 4610 */ { MAD_F(0x04aed25a) /* 0.292681078 */, 18 },
4928 /* 4611 */ { MAD_F(0x04af2b1e) /* 0.292765732 */, 18 },
4929 /* 4612 */ { MAD_F(0x04af83e4) /* 0.292850392 */, 18 },
4930 /* 4613 */ { MAD_F(0x04afdcac) /* 0.292935058 */, 18 },
4931 /* 4614 */ { MAD_F(0x04b03575) /* 0.293019731 */, 18 },
4932 /* 4615 */ { MAD_F(0x04b08e40) /* 0.293104409 */, 18 },
4933 /* 4616 */ { MAD_F(0x04b0e70c) /* 0.293189094 */, 18 },
4934 /* 4617 */ { MAD_F(0x04b13fda) /* 0.293273785 */, 18 },
4935 /* 4618 */ { MAD_F(0x04b198aa) /* 0.293358482 */, 18 },
4936 /* 4619 */ { MAD_F(0x04b1f17b) /* 0.293443185 */, 18 },
4937 /* 4620 */ { MAD_F(0x04b24a4e) /* 0.293527894 */, 18 },
4938 /* 4621 */ { MAD_F(0x04b2a322) /* 0.293612609 */, 18 },
4939 /* 4622 */ { MAD_F(0x04b2fbf9) /* 0.293697331 */, 18 },
4940 /* 4623 */ { MAD_F(0x04b354d1) /* 0.293782058 */, 18 },
4941
4942 /* 4624 */ { MAD_F(0x04b3adaa) /* 0.293866792 */, 18 },
4943 /* 4625 */ { MAD_F(0x04b40685) /* 0.293951532 */, 18 },
4944 /* 4626 */ { MAD_F(0x04b45f62) /* 0.294036278 */, 18 },
4945 /* 4627 */ { MAD_F(0x04b4b840) /* 0.294121029 */, 18 },
4946 /* 4628 */ { MAD_F(0x04b51120) /* 0.294205788 */, 18 },
4947 /* 4629 */ { MAD_F(0x04b56a02) /* 0.294290552 */, 18 },
4948 /* 4630 */ { MAD_F(0x04b5c2e6) /* 0.294375322 */, 18 },
4949 /* 4631 */ { MAD_F(0x04b61bcb) /* 0.294460098 */, 18 },
4950 /* 4632 */ { MAD_F(0x04b674b1) /* 0.294544881 */, 18 },
4951 /* 4633 */ { MAD_F(0x04b6cd99) /* 0.294629669 */, 18 },
4952 /* 4634 */ { MAD_F(0x04b72683) /* 0.294714464 */, 18 },
4953 /* 4635 */ { MAD_F(0x04b77f6f) /* 0.294799265 */, 18 },
4954 /* 4636 */ { MAD_F(0x04b7d85c) /* 0.294884072 */, 18 },
4955 /* 4637 */ { MAD_F(0x04b8314b) /* 0.294968885 */, 18 },
4956 /* 4638 */ { MAD_F(0x04b88a3b) /* 0.295053704 */, 18 },
4957 /* 4639 */ { MAD_F(0x04b8e32d) /* 0.295138529 */, 18 },
4958
4959 /* 4640 */ { MAD_F(0x04b93c21) /* 0.295223360 */, 18 },
4960 /* 4641 */ { MAD_F(0x04b99516) /* 0.295308197 */, 18 },
4961 /* 4642 */ { MAD_F(0x04b9ee0d) /* 0.295393041 */, 18 },
4962 /* 4643 */ { MAD_F(0x04ba4706) /* 0.295477890 */, 18 },
4963 /* 4644 */ { MAD_F(0x04baa000) /* 0.295562746 */, 18 },
4964 /* 4645 */ { MAD_F(0x04baf8fc) /* 0.295647608 */, 18 },
4965 /* 4646 */ { MAD_F(0x04bb51fa) /* 0.295732476 */, 18 },
4966 /* 4647 */ { MAD_F(0x04bbaaf9) /* 0.295817349 */, 18 },
4967 /* 4648 */ { MAD_F(0x04bc03fa) /* 0.295902229 */, 18 },
4968 /* 4649 */ { MAD_F(0x04bc5cfc) /* 0.295987115 */, 18 },
4969 /* 4650 */ { MAD_F(0x04bcb600) /* 0.296072008 */, 18 },
4970 /* 4651 */ { MAD_F(0x04bd0f06) /* 0.296156906 */, 18 },
4971 /* 4652 */ { MAD_F(0x04bd680d) /* 0.296241810 */, 18 },
4972 /* 4653 */ { MAD_F(0x04bdc116) /* 0.296326721 */, 18 },
4973 /* 4654 */ { MAD_F(0x04be1a21) /* 0.296411637 */, 18 },
4974 /* 4655 */ { MAD_F(0x04be732d) /* 0.296496560 */, 18 },
4975
4976 /* 4656 */ { MAD_F(0x04becc3b) /* 0.296581488 */, 18 },
4977 /* 4657 */ { MAD_F(0x04bf254a) /* 0.296666423 */, 18 },
4978 /* 4658 */ { MAD_F(0x04bf7e5b) /* 0.296751364 */, 18 },
4979 /* 4659 */ { MAD_F(0x04bfd76e) /* 0.296836311 */, 18 },
4980 /* 4660 */ { MAD_F(0x04c03083) /* 0.296921264 */, 18 },
4981 /* 4661 */ { MAD_F(0x04c08999) /* 0.297006223 */, 18 },
4982 /* 4662 */ { MAD_F(0x04c0e2b0) /* 0.297091188 */, 18 },
4983 /* 4663 */ { MAD_F(0x04c13bca) /* 0.297176159 */, 18 },
4984 /* 4664 */ { MAD_F(0x04c194e4) /* 0.297261136 */, 18 },
4985 /* 4665 */ { MAD_F(0x04c1ee01) /* 0.297346120 */, 18 },
4986 /* 4666 */ { MAD_F(0x04c2471f) /* 0.297431109 */, 18 },
4987 /* 4667 */ { MAD_F(0x04c2a03f) /* 0.297516105 */, 18 },
4988 /* 4668 */ { MAD_F(0x04c2f960) /* 0.297601106 */, 18 },
4989 /* 4669 */ { MAD_F(0x04c35283) /* 0.297686114 */, 18 },
4990 /* 4670 */ { MAD_F(0x04c3aba8) /* 0.297771128 */, 18 },
4991 /* 4671 */ { MAD_F(0x04c404ce) /* 0.297856147 */, 18 },
4992
4993 /* 4672 */ { MAD_F(0x04c45df6) /* 0.297941173 */, 18 },
4994 /* 4673 */ { MAD_F(0x04c4b720) /* 0.298026205 */, 18 },
4995 /* 4674 */ { MAD_F(0x04c5104b) /* 0.298111243 */, 18 },
4996 /* 4675 */ { MAD_F(0x04c56978) /* 0.298196287 */, 18 },
4997 /* 4676 */ { MAD_F(0x04c5c2a7) /* 0.298281337 */, 18 },
4998 /* 4677 */ { MAD_F(0x04c61bd7) /* 0.298366393 */, 18 },
4999 /* 4678 */ { MAD_F(0x04c67508) /* 0.298451456 */, 18 },
5000 /* 4679 */ { MAD_F(0x04c6ce3c) /* 0.298536524 */, 18 },
5001 /* 4680 */ { MAD_F(0x04c72771) /* 0.298621598 */, 18 },
5002 /* 4681 */ { MAD_F(0x04c780a7) /* 0.298706679 */, 18 },
5003 /* 4682 */ { MAD_F(0x04c7d9df) /* 0.298791765 */, 18 },
5004 /* 4683 */ { MAD_F(0x04c83319) /* 0.298876858 */, 18 },
5005 /* 4684 */ { MAD_F(0x04c88c55) /* 0.298961956 */, 18 },
5006 /* 4685 */ { MAD_F(0x04c8e592) /* 0.299047061 */, 18 },
5007 /* 4686 */ { MAD_F(0x04c93ed1) /* 0.299132172 */, 18 },
5008 /* 4687 */ { MAD_F(0x04c99811) /* 0.299217288 */, 18 },
5009
5010 /* 4688 */ { MAD_F(0x04c9f153) /* 0.299302411 */, 18 },
5011 /* 4689 */ { MAD_F(0x04ca4a97) /* 0.299387540 */, 18 },
5012 /* 4690 */ { MAD_F(0x04caa3dc) /* 0.299472675 */, 18 },
5013 /* 4691 */ { MAD_F(0x04cafd23) /* 0.299557816 */, 18 },
5014 /* 4692 */ { MAD_F(0x04cb566b) /* 0.299642963 */, 18 },
5015 /* 4693 */ { MAD_F(0x04cbafb5) /* 0.299728116 */, 18 },
5016 /* 4694 */ { MAD_F(0x04cc0901) /* 0.299813275 */, 18 },
5017 /* 4695 */ { MAD_F(0x04cc624e) /* 0.299898440 */, 18 },
5018 /* 4696 */ { MAD_F(0x04ccbb9d) /* 0.299983611 */, 18 },
5019 /* 4697 */ { MAD_F(0x04cd14ee) /* 0.300068789 */, 18 },
5020 /* 4698 */ { MAD_F(0x04cd6e40) /* 0.300153972 */, 18 },
5021 /* 4699 */ { MAD_F(0x04cdc794) /* 0.300239161 */, 18 },
5022 /* 4700 */ { MAD_F(0x04ce20e9) /* 0.300324357 */, 18 },
5023 /* 4701 */ { MAD_F(0x04ce7a40) /* 0.300409558 */, 18 },
5024 /* 4702 */ { MAD_F(0x04ced399) /* 0.300494765 */, 18 },
5025 /* 4703 */ { MAD_F(0x04cf2cf3) /* 0.300579979 */, 18 },
5026
5027 /* 4704 */ { MAD_F(0x04cf864f) /* 0.300665198 */, 18 },
5028 /* 4705 */ { MAD_F(0x04cfdfad) /* 0.300750424 */, 18 },
5029 /* 4706 */ { MAD_F(0x04d0390c) /* 0.300835656 */, 18 },
5030 /* 4707 */ { MAD_F(0x04d0926d) /* 0.300920893 */, 18 },
5031 /* 4708 */ { MAD_F(0x04d0ebcf) /* 0.301006137 */, 18 },
5032 /* 4709 */ { MAD_F(0x04d14533) /* 0.301091387 */, 18 },
5033 /* 4710 */ { MAD_F(0x04d19e99) /* 0.301176643 */, 18 },
5034 /* 4711 */ { MAD_F(0x04d1f800) /* 0.301261904 */, 18 },
5035 /* 4712 */ { MAD_F(0x04d25169) /* 0.301347172 */, 18 },
5036 /* 4713 */ { MAD_F(0x04d2aad4) /* 0.301432446 */, 18 },
5037 /* 4714 */ { MAD_F(0x04d30440) /* 0.301517726 */, 18 },
5038 /* 4715 */ { MAD_F(0x04d35dae) /* 0.301603012 */, 18 },
5039 /* 4716 */ { MAD_F(0x04d3b71d) /* 0.301688304 */, 18 },
5040 /* 4717 */ { MAD_F(0x04d4108e) /* 0.301773602 */, 18 },
5041 /* 4718 */ { MAD_F(0x04d46a01) /* 0.301858906 */, 18 },
5042 /* 4719 */ { MAD_F(0x04d4c375) /* 0.301944216 */, 18 },
5043
5044 /* 4720 */ { MAD_F(0x04d51ceb) /* 0.302029532 */, 18 },
5045 /* 4721 */ { MAD_F(0x04d57662) /* 0.302114854 */, 18 },
5046 /* 4722 */ { MAD_F(0x04d5cfdb) /* 0.302200182 */, 18 },
5047 /* 4723 */ { MAD_F(0x04d62956) /* 0.302285516 */, 18 },
5048 /* 4724 */ { MAD_F(0x04d682d2) /* 0.302370856 */, 18 },
5049 /* 4725 */ { MAD_F(0x04d6dc50) /* 0.302456203 */, 18 },
5050 /* 4726 */ { MAD_F(0x04d735d0) /* 0.302541555 */, 18 },
5051 /* 4727 */ { MAD_F(0x04d78f51) /* 0.302626913 */, 18 },
5052 /* 4728 */ { MAD_F(0x04d7e8d4) /* 0.302712277 */, 18 },
5053 /* 4729 */ { MAD_F(0x04d84258) /* 0.302797648 */, 18 },
5054 /* 4730 */ { MAD_F(0x04d89bde) /* 0.302883024 */, 18 },
5055 /* 4731 */ { MAD_F(0x04d8f566) /* 0.302968406 */, 18 },
5056 /* 4732 */ { MAD_F(0x04d94eef) /* 0.303053794 */, 18 },
5057 /* 4733 */ { MAD_F(0x04d9a87a) /* 0.303139189 */, 18 },
5058 /* 4734 */ { MAD_F(0x04da0207) /* 0.303224589 */, 18 },
5059 /* 4735 */ { MAD_F(0x04da5b95) /* 0.303309995 */, 18 },
5060
5061 /* 4736 */ { MAD_F(0x04dab524) /* 0.303395408 */, 18 },
5062 /* 4737 */ { MAD_F(0x04db0eb6) /* 0.303480826 */, 18 },
5063 /* 4738 */ { MAD_F(0x04db6849) /* 0.303566251 */, 18 },
5064 /* 4739 */ { MAD_F(0x04dbc1dd) /* 0.303651681 */, 18 },
5065 /* 4740 */ { MAD_F(0x04dc1b73) /* 0.303737117 */, 18 },
5066 /* 4741 */ { MAD_F(0x04dc750b) /* 0.303822560 */, 18 },
5067 /* 4742 */ { MAD_F(0x04dccea5) /* 0.303908008 */, 18 },
5068 /* 4743 */ { MAD_F(0x04dd2840) /* 0.303993463 */, 18 },
5069 /* 4744 */ { MAD_F(0x04dd81dc) /* 0.304078923 */, 18 },
5070 /* 4745 */ { MAD_F(0x04dddb7a) /* 0.304164390 */, 18 },
5071 /* 4746 */ { MAD_F(0x04de351a) /* 0.304249862 */, 18 },
5072 /* 4747 */ { MAD_F(0x04de8ebc) /* 0.304335340 */, 18 },
5073 /* 4748 */ { MAD_F(0x04dee85f) /* 0.304420825 */, 18 },
5074 /* 4749 */ { MAD_F(0x04df4203) /* 0.304506315 */, 18 },
5075 /* 4750 */ { MAD_F(0x04df9baa) /* 0.304591812 */, 18 },
5076 /* 4751 */ { MAD_F(0x04dff552) /* 0.304677314 */, 18 },
5077
5078 /* 4752 */ { MAD_F(0x04e04efb) /* 0.304762823 */, 18 },
5079 /* 4753 */ { MAD_F(0x04e0a8a6) /* 0.304848337 */, 18 },
5080 /* 4754 */ { MAD_F(0x04e10253) /* 0.304933858 */, 18 },
5081 /* 4755 */ { MAD_F(0x04e15c01) /* 0.305019384 */, 18 },
5082 /* 4756 */ { MAD_F(0x04e1b5b1) /* 0.305104917 */, 18 },
5083 /* 4757 */ { MAD_F(0x04e20f63) /* 0.305190455 */, 18 },
5084 /* 4758 */ { MAD_F(0x04e26916) /* 0.305275999 */, 18 },
5085 /* 4759 */ { MAD_F(0x04e2c2cb) /* 0.305361550 */, 18 },
5086 /* 4760 */ { MAD_F(0x04e31c81) /* 0.305447106 */, 18 },
5087 /* 4761 */ { MAD_F(0x04e37639) /* 0.305532669 */, 18 },
5088 /* 4762 */ { MAD_F(0x04e3cff3) /* 0.305618237 */, 18 },
5089 /* 4763 */ { MAD_F(0x04e429ae) /* 0.305703811 */, 18 },
5090 /* 4764 */ { MAD_F(0x04e4836b) /* 0.305789392 */, 18 },
5091 /* 4765 */ { MAD_F(0x04e4dd29) /* 0.305874978 */, 18 },
5092 /* 4766 */ { MAD_F(0x04e536e9) /* 0.305960571 */, 18 },
5093 /* 4767 */ { MAD_F(0x04e590ab) /* 0.306046169 */, 18 },
5094
5095 /* 4768 */ { MAD_F(0x04e5ea6e) /* 0.306131773 */, 18 },
5096 /* 4769 */ { MAD_F(0x04e64433) /* 0.306217383 */, 18 },
5097 /* 4770 */ { MAD_F(0x04e69df9) /* 0.306303000 */, 18 },
5098 /* 4771 */ { MAD_F(0x04e6f7c1) /* 0.306388622 */, 18 },
5099 /* 4772 */ { MAD_F(0x04e7518b) /* 0.306474250 */, 18 },
5100 /* 4773 */ { MAD_F(0x04e7ab56) /* 0.306559885 */, 18 },
5101 /* 4774 */ { MAD_F(0x04e80523) /* 0.306645525 */, 18 },
5102 /* 4775 */ { MAD_F(0x04e85ef2) /* 0.306731171 */, 18 },
5103 /* 4776 */ { MAD_F(0x04e8b8c2) /* 0.306816823 */, 18 },
5104 /* 4777 */ { MAD_F(0x04e91293) /* 0.306902481 */, 18 },
5105 /* 4778 */ { MAD_F(0x04e96c67) /* 0.306988145 */, 18 },
5106 /* 4779 */ { MAD_F(0x04e9c63b) /* 0.307073816 */, 18 },
5107 /* 4780 */ { MAD_F(0x04ea2012) /* 0.307159492 */, 18 },
5108 /* 4781 */ { MAD_F(0x04ea79ea) /* 0.307245174 */, 18 },
5109 /* 4782 */ { MAD_F(0x04ead3c4) /* 0.307330862 */, 18 },
5110 /* 4783 */ { MAD_F(0x04eb2d9f) /* 0.307416556 */, 18 },
5111
5112 /* 4784 */ { MAD_F(0x04eb877c) /* 0.307502256 */, 18 },
5113 /* 4785 */ { MAD_F(0x04ebe15b) /* 0.307587962 */, 18 },
5114 /* 4786 */ { MAD_F(0x04ec3b3b) /* 0.307673674 */, 18 },
5115 /* 4787 */ { MAD_F(0x04ec951c) /* 0.307759392 */, 18 },
5116 /* 4788 */ { MAD_F(0x04ecef00) /* 0.307845115 */, 18 },
5117 /* 4789 */ { MAD_F(0x04ed48e5) /* 0.307930845 */, 18 },
5118 /* 4790 */ { MAD_F(0x04eda2cb) /* 0.308016581 */, 18 },
5119 /* 4791 */ { MAD_F(0x04edfcb3) /* 0.308102323 */, 18 },
5120 /* 4792 */ { MAD_F(0x04ee569d) /* 0.308188071 */, 18 },
5121 /* 4793 */ { MAD_F(0x04eeb088) /* 0.308273824 */, 18 },
5122 /* 4794 */ { MAD_F(0x04ef0a75) /* 0.308359584 */, 18 },
5123 /* 4795 */ { MAD_F(0x04ef6464) /* 0.308445350 */, 18 },
5124 /* 4796 */ { MAD_F(0x04efbe54) /* 0.308531121 */, 18 },
5125 /* 4797 */ { MAD_F(0x04f01846) /* 0.308616899 */, 18 },
5126 /* 4798 */ { MAD_F(0x04f07239) /* 0.308702682 */, 18 },
5127 /* 4799 */ { MAD_F(0x04f0cc2e) /* 0.308788472 */, 18 },
5128
5129 /* 4800 */ { MAD_F(0x04f12624) /* 0.308874267 */, 18 },
5130 /* 4801 */ { MAD_F(0x04f1801d) /* 0.308960068 */, 18 },
5131 /* 4802 */ { MAD_F(0x04f1da16) /* 0.309045876 */, 18 },
5132 /* 4803 */ { MAD_F(0x04f23412) /* 0.309131689 */, 18 },
5133 /* 4804 */ { MAD_F(0x04f28e0f) /* 0.309217508 */, 18 },
5134 /* 4805 */ { MAD_F(0x04f2e80d) /* 0.309303334 */, 18 },
5135 /* 4806 */ { MAD_F(0x04f3420d) /* 0.309389165 */, 18 },
5136 /* 4807 */ { MAD_F(0x04f39c0f) /* 0.309475002 */, 18 },
5137 /* 4808 */ { MAD_F(0x04f3f612) /* 0.309560845 */, 18 },
5138 /* 4809 */ { MAD_F(0x04f45017) /* 0.309646694 */, 18 },
5139 /* 4810 */ { MAD_F(0x04f4aa1e) /* 0.309732549 */, 18 },
5140 /* 4811 */ { MAD_F(0x04f50426) /* 0.309818410 */, 18 },
5141 /* 4812 */ { MAD_F(0x04f55e30) /* 0.309904277 */, 18 },
5142 /* 4813 */ { MAD_F(0x04f5b83b) /* 0.309990150 */, 18 },
5143 /* 4814 */ { MAD_F(0x04f61248) /* 0.310076028 */, 18 },
5144 /* 4815 */ { MAD_F(0x04f66c56) /* 0.310161913 */, 18 },
5145
5146 /* 4816 */ { MAD_F(0x04f6c666) /* 0.310247804 */, 18 },
5147 /* 4817 */ { MAD_F(0x04f72078) /* 0.310333700 */, 18 },
5148 /* 4818 */ { MAD_F(0x04f77a8b) /* 0.310419603 */, 18 },
5149 /* 4819 */ { MAD_F(0x04f7d4a0) /* 0.310505511 */, 18 },
5150 /* 4820 */ { MAD_F(0x04f82eb7) /* 0.310591426 */, 18 },
5151 /* 4821 */ { MAD_F(0x04f888cf) /* 0.310677346 */, 18 },
5152 /* 4822 */ { MAD_F(0x04f8e2e9) /* 0.310763272 */, 18 },
5153 /* 4823 */ { MAD_F(0x04f93d04) /* 0.310849205 */, 18 },
5154 /* 4824 */ { MAD_F(0x04f99721) /* 0.310935143 */, 18 },
5155 /* 4825 */ { MAD_F(0x04f9f13f) /* 0.311021087 */, 18 },
5156 /* 4826 */ { MAD_F(0x04fa4b5f) /* 0.311107037 */, 18 },
5157 /* 4827 */ { MAD_F(0x04faa581) /* 0.311192993 */, 18 },
5158 /* 4828 */ { MAD_F(0x04faffa4) /* 0.311278955 */, 18 },
5159 /* 4829 */ { MAD_F(0x04fb59c9) /* 0.311364923 */, 18 },
5160 /* 4830 */ { MAD_F(0x04fbb3ef) /* 0.311450897 */, 18 },
5161 /* 4831 */ { MAD_F(0x04fc0e17) /* 0.311536877 */, 18 },
5162
5163 /* 4832 */ { MAD_F(0x04fc6841) /* 0.311622862 */, 18 },
5164 /* 4833 */ { MAD_F(0x04fcc26c) /* 0.311708854 */, 18 },
5165 /* 4834 */ { MAD_F(0x04fd1c99) /* 0.311794851 */, 18 },
5166 /* 4835 */ { MAD_F(0x04fd76c7) /* 0.311880855 */, 18 },
5167 /* 4836 */ { MAD_F(0x04fdd0f7) /* 0.311966864 */, 18 },
5168 /* 4837 */ { MAD_F(0x04fe2b29) /* 0.312052880 */, 18 },
5169 /* 4838 */ { MAD_F(0x04fe855c) /* 0.312138901 */, 18 },
5170 /* 4839 */ { MAD_F(0x04fedf91) /* 0.312224928 */, 18 },
5171 /* 4840 */ { MAD_F(0x04ff39c7) /* 0.312310961 */, 18 },
5172 /* 4841 */ { MAD_F(0x04ff93ff) /* 0.312397000 */, 18 },
5173 /* 4842 */ { MAD_F(0x04ffee38) /* 0.312483045 */, 18 },
5174 /* 4843 */ { MAD_F(0x05004874) /* 0.312569096 */, 18 },
5175 /* 4844 */ { MAD_F(0x0500a2b0) /* 0.312655153 */, 18 },
5176 /* 4845 */ { MAD_F(0x0500fcef) /* 0.312741216 */, 18 },
5177 /* 4846 */ { MAD_F(0x0501572e) /* 0.312827284 */, 18 },
5178 /* 4847 */ { MAD_F(0x0501b170) /* 0.312913359 */, 18 },
5179
5180 /* 4848 */ { MAD_F(0x05020bb3) /* 0.312999439 */, 18 },
5181 /* 4849 */ { MAD_F(0x050265f8) /* 0.313085526 */, 18 },
5182 /* 4850 */ { MAD_F(0x0502c03e) /* 0.313171618 */, 18 },
5183 /* 4851 */ { MAD_F(0x05031a86) /* 0.313257716 */, 18 },
5184 /* 4852 */ { MAD_F(0x050374cf) /* 0.313343820 */, 18 },
5185 /* 4853 */ { MAD_F(0x0503cf1a) /* 0.313429931 */, 18 },
5186 /* 4854 */ { MAD_F(0x05042967) /* 0.313516047 */, 18 },
5187 /* 4855 */ { MAD_F(0x050483b5) /* 0.313602168 */, 18 },
5188 /* 4856 */ { MAD_F(0x0504de05) /* 0.313688296 */, 18 },
5189 /* 4857 */ { MAD_F(0x05053856) /* 0.313774430 */, 18 },
5190 /* 4858 */ { MAD_F(0x050592a9) /* 0.313860570 */, 18 },
5191 /* 4859 */ { MAD_F(0x0505ecfd) /* 0.313946715 */, 18 },
5192 /* 4860 */ { MAD_F(0x05064754) /* 0.314032867 */, 18 },
5193 /* 4861 */ { MAD_F(0x0506a1ab) /* 0.314119024 */, 18 },
5194 /* 4862 */ { MAD_F(0x0506fc04) /* 0.314205187 */, 18 },
5195 /* 4863 */ { MAD_F(0x0507565f) /* 0.314291357 */, 18 },
5196
5197 /* 4864 */ { MAD_F(0x0507b0bc) /* 0.314377532 */, 18 },
5198 /* 4865 */ { MAD_F(0x05080b1a) /* 0.314463713 */, 18 },
5199 /* 4866 */ { MAD_F(0x05086579) /* 0.314549900 */, 18 },
5200 /* 4867 */ { MAD_F(0x0508bfdb) /* 0.314636092 */, 18 },
5201 /* 4868 */ { MAD_F(0x05091a3d) /* 0.314722291 */, 18 },
5202 /* 4869 */ { MAD_F(0x050974a2) /* 0.314808496 */, 18 },
5203 /* 4870 */ { MAD_F(0x0509cf08) /* 0.314894706 */, 18 },
5204 /* 4871 */ { MAD_F(0x050a296f) /* 0.314980923 */, 18 },
5205 /* 4872 */ { MAD_F(0x050a83d8) /* 0.315067145 */, 18 },
5206 /* 4873 */ { MAD_F(0x050ade43) /* 0.315153373 */, 18 },
5207 /* 4874 */ { MAD_F(0x050b38af) /* 0.315239607 */, 18 },
5208 /* 4875 */ { MAD_F(0x050b931d) /* 0.315325847 */, 18 },
5209 /* 4876 */ { MAD_F(0x050bed8d) /* 0.315412093 */, 18 },
5210 /* 4877 */ { MAD_F(0x050c47fe) /* 0.315498345 */, 18 },
5211 /* 4878 */ { MAD_F(0x050ca271) /* 0.315584603 */, 18 },
5212 /* 4879 */ { MAD_F(0x050cfce5) /* 0.315670866 */, 18 },
5213
5214 /* 4880 */ { MAD_F(0x050d575b) /* 0.315757136 */, 18 },
5215 /* 4881 */ { MAD_F(0x050db1d2) /* 0.315843411 */, 18 },
5216 /* 4882 */ { MAD_F(0x050e0c4b) /* 0.315929693 */, 18 },
5217 /* 4883 */ { MAD_F(0x050e66c5) /* 0.316015980 */, 18 },
5218 /* 4884 */ { MAD_F(0x050ec141) /* 0.316102273 */, 18 },
5219 /* 4885 */ { MAD_F(0x050f1bbf) /* 0.316188572 */, 18 },
5220 /* 4886 */ { MAD_F(0x050f763e) /* 0.316274877 */, 18 },
5221 /* 4887 */ { MAD_F(0x050fd0bf) /* 0.316361187 */, 18 },
5222 /* 4888 */ { MAD_F(0x05102b42) /* 0.316447504 */, 18 },
5223 /* 4889 */ { MAD_F(0x051085c6) /* 0.316533826 */, 18 },
5224 /* 4890 */ { MAD_F(0x0510e04b) /* 0.316620155 */, 18 },
5225 /* 4891 */ { MAD_F(0x05113ad3) /* 0.316706489 */, 18 },
5226 /* 4892 */ { MAD_F(0x0511955b) /* 0.316792829 */, 18 },
5227 /* 4893 */ { MAD_F(0x0511efe6) /* 0.316879175 */, 18 },
5228 /* 4894 */ { MAD_F(0x05124a72) /* 0.316965527 */, 18 },
5229 /* 4895 */ { MAD_F(0x0512a4ff) /* 0.317051885 */, 18 },
5230
5231 /* 4896 */ { MAD_F(0x0512ff8e) /* 0.317138249 */, 18 },
5232 /* 4897 */ { MAD_F(0x05135a1f) /* 0.317224618 */, 18 },
5233 /* 4898 */ { MAD_F(0x0513b4b1) /* 0.317310994 */, 18 },
5234 /* 4899 */ { MAD_F(0x05140f45) /* 0.317397375 */, 18 },
5235 /* 4900 */ { MAD_F(0x051469da) /* 0.317483762 */, 18 },
5236 /* 4901 */ { MAD_F(0x0514c471) /* 0.317570155 */, 18 },
5237 /* 4902 */ { MAD_F(0x05151f0a) /* 0.317656554 */, 18 },
5238 /* 4903 */ { MAD_F(0x051579a4) /* 0.317742959 */, 18 },
5239 /* 4904 */ { MAD_F(0x0515d440) /* 0.317829370 */, 18 },
5240 /* 4905 */ { MAD_F(0x05162edd) /* 0.317915786 */, 18 },
5241 /* 4906 */ { MAD_F(0x0516897c) /* 0.318002209 */, 18 },
5242 /* 4907 */ { MAD_F(0x0516e41c) /* 0.318088637 */, 18 },
5243 /* 4908 */ { MAD_F(0x05173ebe) /* 0.318175071 */, 18 },
5244 /* 4909 */ { MAD_F(0x05179962) /* 0.318261511 */, 18 },
5245 /* 4910 */ { MAD_F(0x0517f407) /* 0.318347957 */, 18 },
5246 /* 4911 */ { MAD_F(0x05184eae) /* 0.318434409 */, 18 },
5247
5248 /* 4912 */ { MAD_F(0x0518a956) /* 0.318520867 */, 18 },
5249 /* 4913 */ { MAD_F(0x05190400) /* 0.318607330 */, 18 },
5250 /* 4914 */ { MAD_F(0x05195eab) /* 0.318693800 */, 18 },
5251 /* 4915 */ { MAD_F(0x0519b958) /* 0.318780275 */, 18 },
5252 /* 4916 */ { MAD_F(0x051a1407) /* 0.318866756 */, 18 },
5253 /* 4917 */ { MAD_F(0x051a6eb7) /* 0.318953243 */, 18 },
5254 /* 4918 */ { MAD_F(0x051ac969) /* 0.319039736 */, 18 },
5255 /* 4919 */ { MAD_F(0x051b241c) /* 0.319126235 */, 18 },
5256 /* 4920 */ { MAD_F(0x051b7ed1) /* 0.319212739 */, 18 },
5257 /* 4921 */ { MAD_F(0x051bd987) /* 0.319299250 */, 18 },
5258 /* 4922 */ { MAD_F(0x051c3440) /* 0.319385766 */, 18 },
5259 /* 4923 */ { MAD_F(0x051c8ef9) /* 0.319472288 */, 18 },
5260 /* 4924 */ { MAD_F(0x051ce9b4) /* 0.319558816 */, 18 },
5261 /* 4925 */ { MAD_F(0x051d4471) /* 0.319645350 */, 18 },
5262 /* 4926 */ { MAD_F(0x051d9f2f) /* 0.319731890 */, 18 },
5263 /* 4927 */ { MAD_F(0x051df9ef) /* 0.319818435 */, 18 },
5264
5265 /* 4928 */ { MAD_F(0x051e54b1) /* 0.319904987 */, 18 },
5266 /* 4929 */ { MAD_F(0x051eaf74) /* 0.319991544 */, 18 },
5267 /* 4930 */ { MAD_F(0x051f0a38) /* 0.320078107 */, 18 },
5268 /* 4931 */ { MAD_F(0x051f64ff) /* 0.320164676 */, 18 },
5269 /* 4932 */ { MAD_F(0x051fbfc6) /* 0.320251251 */, 18 },
5270 /* 4933 */ { MAD_F(0x05201a90) /* 0.320337832 */, 18 },
5271 /* 4934 */ { MAD_F(0x0520755b) /* 0.320424419 */, 18 },
5272 /* 4935 */ { MAD_F(0x0520d027) /* 0.320511011 */, 18 },
5273 /* 4936 */ { MAD_F(0x05212af5) /* 0.320597609 */, 18 },
5274 /* 4937 */ { MAD_F(0x052185c5) /* 0.320684213 */, 18 },
5275 /* 4938 */ { MAD_F(0x0521e096) /* 0.320770823 */, 18 },
5276 /* 4939 */ { MAD_F(0x05223b69) /* 0.320857439 */, 18 },
5277 /* 4940 */ { MAD_F(0x0522963d) /* 0.320944061 */, 18 },
5278 /* 4941 */ { MAD_F(0x0522f113) /* 0.321030688 */, 18 },
5279 /* 4942 */ { MAD_F(0x05234bea) /* 0.321117322 */, 18 },
5280 /* 4943 */ { MAD_F(0x0523a6c3) /* 0.321203961 */, 18 },
5281
5282 /* 4944 */ { MAD_F(0x0524019e) /* 0.321290606 */, 18 },
5283 /* 4945 */ { MAD_F(0x05245c7a) /* 0.321377257 */, 18 },
5284 /* 4946 */ { MAD_F(0x0524b758) /* 0.321463913 */, 18 },
5285 /* 4947 */ { MAD_F(0x05251237) /* 0.321550576 */, 18 },
5286 /* 4948 */ { MAD_F(0x05256d18) /* 0.321637244 */, 18 },
5287 /* 4949 */ { MAD_F(0x0525c7fb) /* 0.321723919 */, 18 },
5288 /* 4950 */ { MAD_F(0x052622df) /* 0.321810599 */, 18 },
5289 /* 4951 */ { MAD_F(0x05267dc4) /* 0.321897285 */, 18 },
5290 /* 4952 */ { MAD_F(0x0526d8ab) /* 0.321983976 */, 18 },
5291 /* 4953 */ { MAD_F(0x05273394) /* 0.322070674 */, 18 },
5292 /* 4954 */ { MAD_F(0x05278e7e) /* 0.322157377 */, 18 },
5293 /* 4955 */ { MAD_F(0x0527e96a) /* 0.322244087 */, 18 },
5294 /* 4956 */ { MAD_F(0x05284457) /* 0.322330802 */, 18 },
5295 /* 4957 */ { MAD_F(0x05289f46) /* 0.322417523 */, 18 },
5296 /* 4958 */ { MAD_F(0x0528fa37) /* 0.322504249 */, 18 },
5297 /* 4959 */ { MAD_F(0x05295529) /* 0.322590982 */, 18 },
5298
5299 /* 4960 */ { MAD_F(0x0529b01d) /* 0.322677720 */, 18 },
5300 /* 4961 */ { MAD_F(0x052a0b12) /* 0.322764465 */, 18 },
5301 /* 4962 */ { MAD_F(0x052a6609) /* 0.322851215 */, 18 },
5302 /* 4963 */ { MAD_F(0x052ac101) /* 0.322937971 */, 18 },
5303 /* 4964 */ { MAD_F(0x052b1bfb) /* 0.323024732 */, 18 },
5304 /* 4965 */ { MAD_F(0x052b76f7) /* 0.323111500 */, 18 },
5305 /* 4966 */ { MAD_F(0x052bd1f4) /* 0.323198273 */, 18 },
5306 /* 4967 */ { MAD_F(0x052c2cf2) /* 0.323285052 */, 18 },
5307 /* 4968 */ { MAD_F(0x052c87f2) /* 0.323371837 */, 18 },
5308 /* 4969 */ { MAD_F(0x052ce2f4) /* 0.323458628 */, 18 },
5309 /* 4970 */ { MAD_F(0x052d3df7) /* 0.323545425 */, 18 },
5310 /* 4971 */ { MAD_F(0x052d98fc) /* 0.323632227 */, 18 },
5311 /* 4972 */ { MAD_F(0x052df403) /* 0.323719036 */, 18 },
5312 /* 4973 */ { MAD_F(0x052e4f0b) /* 0.323805850 */, 18 },
5313 /* 4974 */ { MAD_F(0x052eaa14) /* 0.323892670 */, 18 },
5314 /* 4975 */ { MAD_F(0x052f051f) /* 0.323979496 */, 18 },
5315
5316 /* 4976 */ { MAD_F(0x052f602c) /* 0.324066327 */, 18 },
5317 /* 4977 */ { MAD_F(0x052fbb3a) /* 0.324153165 */, 18 },
5318 /* 4978 */ { MAD_F(0x0530164a) /* 0.324240008 */, 18 },
5319 /* 4979 */ { MAD_F(0x0530715b) /* 0.324326857 */, 18 },
5320 /* 4980 */ { MAD_F(0x0530cc6e) /* 0.324413712 */, 18 },
5321 /* 4981 */ { MAD_F(0x05312783) /* 0.324500572 */, 18 },
5322 /* 4982 */ { MAD_F(0x05318299) /* 0.324587439 */, 18 },
5323 /* 4983 */ { MAD_F(0x0531ddb0) /* 0.324674311 */, 18 },
5324 /* 4984 */ { MAD_F(0x053238ca) /* 0.324761189 */, 18 },
5325 /* 4985 */ { MAD_F(0x053293e4) /* 0.324848073 */, 18 },
5326 /* 4986 */ { MAD_F(0x0532ef01) /* 0.324934963 */, 18 },
5327 /* 4987 */ { MAD_F(0x05334a1e) /* 0.325021858 */, 18 },
5328 /* 4988 */ { MAD_F(0x0533a53e) /* 0.325108760 */, 18 },
5329 /* 4989 */ { MAD_F(0x0534005f) /* 0.325195667 */, 18 },
5330 /* 4990 */ { MAD_F(0x05345b81) /* 0.325282580 */, 18 },
5331 /* 4991 */ { MAD_F(0x0534b6a5) /* 0.325369498 */, 18 },
5332
5333 /* 4992 */ { MAD_F(0x053511cb) /* 0.325456423 */, 18 },
5334 /* 4993 */ { MAD_F(0x05356cf2) /* 0.325543353 */, 18 },
5335 /* 4994 */ { MAD_F(0x0535c81b) /* 0.325630290 */, 18 },
5336 /* 4995 */ { MAD_F(0x05362345) /* 0.325717232 */, 18 },
5337 /* 4996 */ { MAD_F(0x05367e71) /* 0.325804179 */, 18 },
5338 /* 4997 */ { MAD_F(0x0536d99f) /* 0.325891133 */, 18 },
5339 /* 4998 */ { MAD_F(0x053734ce) /* 0.325978092 */, 18 },
5340 /* 4999 */ { MAD_F(0x05378ffe) /* 0.326065057 */, 18 },
5341 /* 5000 */ { MAD_F(0x0537eb30) /* 0.326152028 */, 18 },
5342 /* 5001 */ { MAD_F(0x05384664) /* 0.326239005 */, 18 },
5343 /* 5002 */ { MAD_F(0x0538a199) /* 0.326325988 */, 18 },
5344 /* 5003 */ { MAD_F(0x0538fcd0) /* 0.326412976 */, 18 },
5345 /* 5004 */ { MAD_F(0x05395808) /* 0.326499970 */, 18 },
5346 /* 5005 */ { MAD_F(0x0539b342) /* 0.326586970 */, 18 },
5347 /* 5006 */ { MAD_F(0x053a0e7d) /* 0.326673976 */, 18 },
5348 /* 5007 */ { MAD_F(0x053a69ba) /* 0.326760988 */, 18 },
5349
5350 /* 5008 */ { MAD_F(0x053ac4f9) /* 0.326848005 */, 18 },
5351 /* 5009 */ { MAD_F(0x053b2039) /* 0.326935028 */, 18 },
5352 /* 5010 */ { MAD_F(0x053b7b7b) /* 0.327022057 */, 18 },
5353 /* 5011 */ { MAD_F(0x053bd6be) /* 0.327109092 */, 18 },
5354 /* 5012 */ { MAD_F(0x053c3203) /* 0.327196132 */, 18 },
5355 /* 5013 */ { MAD_F(0x053c8d49) /* 0.327283178 */, 18 },
5356 /* 5014 */ { MAD_F(0x053ce891) /* 0.327370231 */, 18 },
5357 /* 5015 */ { MAD_F(0x053d43da) /* 0.327457288 */, 18 },
5358 /* 5016 */ { MAD_F(0x053d9f25) /* 0.327544352 */, 18 },
5359 /* 5017 */ { MAD_F(0x053dfa72) /* 0.327631421 */, 18 },
5360 /* 5018 */ { MAD_F(0x053e55c0) /* 0.327718497 */, 18 },
5361 /* 5019 */ { MAD_F(0x053eb10f) /* 0.327805578 */, 18 },
5362 /* 5020 */ { MAD_F(0x053f0c61) /* 0.327892665 */, 18 },
5363 /* 5021 */ { MAD_F(0x053f67b3) /* 0.327979757 */, 18 },
5364 /* 5022 */ { MAD_F(0x053fc308) /* 0.328066855 */, 18 },
5365 /* 5023 */ { MAD_F(0x05401e5e) /* 0.328153960 */, 18 },
5366
5367 /* 5024 */ { MAD_F(0x054079b5) /* 0.328241070 */, 18 },
5368 /* 5025 */ { MAD_F(0x0540d50e) /* 0.328328185 */, 18 },
5369 /* 5026 */ { MAD_F(0x05413068) /* 0.328415307 */, 18 },
5370 /* 5027 */ { MAD_F(0x05418bc4) /* 0.328502434 */, 18 },
5371 /* 5028 */ { MAD_F(0x0541e722) /* 0.328589567 */, 18 },
5372 /* 5029 */ { MAD_F(0x05424281) /* 0.328676706 */, 18 },
5373 /* 5030 */ { MAD_F(0x05429de2) /* 0.328763850 */, 18 },
5374 /* 5031 */ { MAD_F(0x0542f944) /* 0.328851001 */, 18 },
5375 /* 5032 */ { MAD_F(0x054354a8) /* 0.328938157 */, 18 },
5376 /* 5033 */ { MAD_F(0x0543b00d) /* 0.329025319 */, 18 },
5377 /* 5034 */ { MAD_F(0x05440b74) /* 0.329112486 */, 18 },
5378 /* 5035 */ { MAD_F(0x054466dd) /* 0.329199660 */, 18 },
5379 /* 5036 */ { MAD_F(0x0544c247) /* 0.329286839 */, 18 },
5380 /* 5037 */ { MAD_F(0x05451db2) /* 0.329374024 */, 18 },
5381 /* 5038 */ { MAD_F(0x0545791f) /* 0.329461215 */, 18 },
5382 /* 5039 */ { MAD_F(0x0545d48e) /* 0.329548411 */, 18 },
5383
5384 /* 5040 */ { MAD_F(0x05462ffe) /* 0.329635614 */, 18 },
5385 /* 5041 */ { MAD_F(0x05468b70) /* 0.329722822 */, 18 },
5386 /* 5042 */ { MAD_F(0x0546e6e3) /* 0.329810036 */, 18 },
5387 /* 5043 */ { MAD_F(0x05474258) /* 0.329897255 */, 18 },
5388 /* 5044 */ { MAD_F(0x05479dce) /* 0.329984481 */, 18 },
5389 /* 5045 */ { MAD_F(0x0547f946) /* 0.330071712 */, 18 },
5390 /* 5046 */ { MAD_F(0x054854c0) /* 0.330158949 */, 18 },
5391 /* 5047 */ { MAD_F(0x0548b03b) /* 0.330246191 */, 18 },
5392 /* 5048 */ { MAD_F(0x05490bb7) /* 0.330333440 */, 18 },
5393 /* 5049 */ { MAD_F(0x05496735) /* 0.330420694 */, 18 },
5394 /* 5050 */ { MAD_F(0x0549c2b5) /* 0.330507954 */, 18 },
5395 /* 5051 */ { MAD_F(0x054a1e36) /* 0.330595220 */, 18 },
5396 /* 5052 */ { MAD_F(0x054a79b9) /* 0.330682491 */, 18 },
5397 /* 5053 */ { MAD_F(0x054ad53d) /* 0.330769768 */, 18 },
5398 /* 5054 */ { MAD_F(0x054b30c3) /* 0.330857051 */, 18 },
5399 /* 5055 */ { MAD_F(0x054b8c4b) /* 0.330944340 */, 18 },
5400
5401 /* 5056 */ { MAD_F(0x054be7d4) /* 0.331031635 */, 18 },
5402 /* 5057 */ { MAD_F(0x054c435e) /* 0.331118935 */, 18 },
5403 /* 5058 */ { MAD_F(0x054c9eea) /* 0.331206241 */, 18 },
5404 /* 5059 */ { MAD_F(0x054cfa78) /* 0.331293553 */, 18 },
5405 /* 5060 */ { MAD_F(0x054d5607) /* 0.331380870 */, 18 },
5406 /* 5061 */ { MAD_F(0x054db197) /* 0.331468193 */, 18 },
5407 /* 5062 */ { MAD_F(0x054e0d2a) /* 0.331555522 */, 18 },
5408 /* 5063 */ { MAD_F(0x054e68bd) /* 0.331642857 */, 18 },
5409 /* 5064 */ { MAD_F(0x054ec453) /* 0.331730198 */, 18 },
5410 /* 5065 */ { MAD_F(0x054f1fe9) /* 0.331817544 */, 18 },
5411 /* 5066 */ { MAD_F(0x054f7b82) /* 0.331904896 */, 18 },
5412 /* 5067 */ { MAD_F(0x054fd71c) /* 0.331992254 */, 18 },
5413 /* 5068 */ { MAD_F(0x055032b7) /* 0.332079617 */, 18 },
5414 /* 5069 */ { MAD_F(0x05508e54) /* 0.332166986 */, 18 },
5415 /* 5070 */ { MAD_F(0x0550e9f3) /* 0.332254361 */, 18 },
5416 /* 5071 */ { MAD_F(0x05514593) /* 0.332341742 */, 18 },
5417
5418 /* 5072 */ { MAD_F(0x0551a134) /* 0.332429129 */, 18 },
5419 /* 5073 */ { MAD_F(0x0551fcd8) /* 0.332516521 */, 18 },
5420 /* 5074 */ { MAD_F(0x0552587c) /* 0.332603919 */, 18 },
5421 /* 5075 */ { MAD_F(0x0552b423) /* 0.332691323 */, 18 },
5422 /* 5076 */ { MAD_F(0x05530fca) /* 0.332778732 */, 18 },
5423 /* 5077 */ { MAD_F(0x05536b74) /* 0.332866147 */, 18 },
5424 /* 5078 */ { MAD_F(0x0553c71f) /* 0.332953568 */, 18 },
5425 /* 5079 */ { MAD_F(0x055422cb) /* 0.333040995 */, 18 },
5426 /* 5080 */ { MAD_F(0x05547e79) /* 0.333128427 */, 18 },
5427 /* 5081 */ { MAD_F(0x0554da29) /* 0.333215865 */, 18 },
5428 /* 5082 */ { MAD_F(0x055535da) /* 0.333303309 */, 18 },
5429 /* 5083 */ { MAD_F(0x0555918c) /* 0.333390759 */, 18 },
5430 /* 5084 */ { MAD_F(0x0555ed40) /* 0.333478214 */, 18 },
5431 /* 5085 */ { MAD_F(0x055648f6) /* 0.333565675 */, 18 },
5432 /* 5086 */ { MAD_F(0x0556a4ad) /* 0.333653142 */, 18 },
5433 /* 5087 */ { MAD_F(0x05570066) /* 0.333740615 */, 18 },
5434
5435 /* 5088 */ { MAD_F(0x05575c20) /* 0.333828093 */, 18 },
5436 /* 5089 */ { MAD_F(0x0557b7dc) /* 0.333915577 */, 18 },
5437 /* 5090 */ { MAD_F(0x05581399) /* 0.334003067 */, 18 },
5438 /* 5091 */ { MAD_F(0x05586f58) /* 0.334090562 */, 18 },
5439 /* 5092 */ { MAD_F(0x0558cb19) /* 0.334178063 */, 18 },
5440 /* 5093 */ { MAD_F(0x055926db) /* 0.334265570 */, 18 },
5441 /* 5094 */ { MAD_F(0x0559829e) /* 0.334353083 */, 18 },
5442 /* 5095 */ { MAD_F(0x0559de63) /* 0.334440601 */, 18 },
5443 /* 5096 */ { MAD_F(0x055a3a2a) /* 0.334528126 */, 18 },
5444 /* 5097 */ { MAD_F(0x055a95f2) /* 0.334615655 */, 18 },
5445 /* 5098 */ { MAD_F(0x055af1bb) /* 0.334703191 */, 18 },
5446 /* 5099 */ { MAD_F(0x055b4d87) /* 0.334790732 */, 18 },
5447 /* 5100 */ { MAD_F(0x055ba953) /* 0.334878279 */, 18 },
5448 /* 5101 */ { MAD_F(0x055c0522) /* 0.334965832 */, 18 },
5449 /* 5102 */ { MAD_F(0x055c60f1) /* 0.335053391 */, 18 },
5450 /* 5103 */ { MAD_F(0x055cbcc3) /* 0.335140955 */, 18 },
5451
5452 /* 5104 */ { MAD_F(0x055d1896) /* 0.335228525 */, 18 },
5453 /* 5105 */ { MAD_F(0x055d746a) /* 0.335316100 */, 18 },
5454 /* 5106 */ { MAD_F(0x055dd040) /* 0.335403682 */, 18 },
5455 /* 5107 */ { MAD_F(0x055e2c17) /* 0.335491269 */, 18 },
5456 /* 5108 */ { MAD_F(0x055e87f0) /* 0.335578861 */, 18 },
5457 /* 5109 */ { MAD_F(0x055ee3cb) /* 0.335666460 */, 18 },
5458 /* 5110 */ { MAD_F(0x055f3fa7) /* 0.335754064 */, 18 },
5459 /* 5111 */ { MAD_F(0x055f9b85) /* 0.335841674 */, 18 },
5460 /* 5112 */ { MAD_F(0x055ff764) /* 0.335929290 */, 18 },
5461 /* 5113 */ { MAD_F(0x05605344) /* 0.336016911 */, 18 },
5462 /* 5114 */ { MAD_F(0x0560af27) /* 0.336104538 */, 18 },
5463 /* 5115 */ { MAD_F(0x05610b0a) /* 0.336192171 */, 18 },
5464 /* 5116 */ { MAD_F(0x056166f0) /* 0.336279809 */, 18 },
5465 /* 5117 */ { MAD_F(0x0561c2d7) /* 0.336367453 */, 18 },
5466 /* 5118 */ { MAD_F(0x05621ebf) /* 0.336455103 */, 18 },
5467 /* 5119 */ { MAD_F(0x05627aa9) /* 0.336542759 */, 18 },
5468
5469 /* 5120 */ { MAD_F(0x0562d694) /* 0.336630420 */, 18 },
5470 /* 5121 */ { MAD_F(0x05633281) /* 0.336718087 */, 18 },
5471 /* 5122 */ { MAD_F(0x05638e70) /* 0.336805760 */, 18 },
5472 /* 5123 */ { MAD_F(0x0563ea60) /* 0.336893439 */, 18 },
5473 /* 5124 */ { MAD_F(0x05644651) /* 0.336981123 */, 18 },
5474 /* 5125 */ { MAD_F(0x0564a244) /* 0.337068813 */, 18 },
5475 /* 5126 */ { MAD_F(0x0564fe39) /* 0.337156508 */, 18 },
5476 /* 5127 */ { MAD_F(0x05655a2f) /* 0.337244209 */, 18 },
5477 /* 5128 */ { MAD_F(0x0565b627) /* 0.337331916 */, 18 },
5478 /* 5129 */ { MAD_F(0x05661220) /* 0.337419629 */, 18 },
5479 /* 5130 */ { MAD_F(0x05666e1a) /* 0.337507347 */, 18 },
5480 /* 5131 */ { MAD_F(0x0566ca17) /* 0.337595071 */, 18 },
5481 /* 5132 */ { MAD_F(0x05672614) /* 0.337682801 */, 18 },
5482 /* 5133 */ { MAD_F(0x05678214) /* 0.337770537 */, 18 },
5483 /* 5134 */ { MAD_F(0x0567de15) /* 0.337858278 */, 18 },
5484 /* 5135 */ { MAD_F(0x05683a17) /* 0.337946025 */, 18 },
5485
5486 /* 5136 */ { MAD_F(0x0568961b) /* 0.338033777 */, 18 },
5487 /* 5137 */ { MAD_F(0x0568f220) /* 0.338121535 */, 18 },
5488 /* 5138 */ { MAD_F(0x05694e27) /* 0.338209299 */, 18 },
5489 /* 5139 */ { MAD_F(0x0569aa30) /* 0.338297069 */, 18 },
5490 /* 5140 */ { MAD_F(0x056a063a) /* 0.338384844 */, 18 },
5491 /* 5141 */ { MAD_F(0x056a6245) /* 0.338472625 */, 18 },
5492 /* 5142 */ { MAD_F(0x056abe52) /* 0.338560412 */, 18 },
5493 /* 5143 */ { MAD_F(0x056b1a61) /* 0.338648204 */, 18 },
5494 /* 5144 */ { MAD_F(0x056b7671) /* 0.338736002 */, 18 },
5495 /* 5145 */ { MAD_F(0x056bd283) /* 0.338823806 */, 18 },
5496 /* 5146 */ { MAD_F(0x056c2e96) /* 0.338911616 */, 18 },
5497 /* 5147 */ { MAD_F(0x056c8aab) /* 0.338999431 */, 18 },
5498 /* 5148 */ { MAD_F(0x056ce6c1) /* 0.339087252 */, 18 },
5499 /* 5149 */ { MAD_F(0x056d42d9) /* 0.339175078 */, 18 },
5500 /* 5150 */ { MAD_F(0x056d9ef2) /* 0.339262910 */, 18 },
5501 /* 5151 */ { MAD_F(0x056dfb0d) /* 0.339350748 */, 18 },
5502
5503 /* 5152 */ { MAD_F(0x056e5729) /* 0.339438592 */, 18 },
5504 /* 5153 */ { MAD_F(0x056eb347) /* 0.339526441 */, 18 },
5505 /* 5154 */ { MAD_F(0x056f0f66) /* 0.339614296 */, 18 },
5506 /* 5155 */ { MAD_F(0x056f6b87) /* 0.339702157 */, 18 },
5507 /* 5156 */ { MAD_F(0x056fc7aa) /* 0.339790023 */, 18 },
5508 /* 5157 */ { MAD_F(0x057023cd) /* 0.339877895 */, 18 },
5509 /* 5158 */ { MAD_F(0x05707ff3) /* 0.339965773 */, 18 },
5510 /* 5159 */ { MAD_F(0x0570dc1a) /* 0.340053656 */, 18 },
5511 /* 5160 */ { MAD_F(0x05713843) /* 0.340141545 */, 18 },
5512 /* 5161 */ { MAD_F(0x0571946d) /* 0.340229440 */, 18 },
5513 /* 5162 */ { MAD_F(0x0571f098) /* 0.340317340 */, 18 },
5514 /* 5163 */ { MAD_F(0x05724cc5) /* 0.340405246 */, 18 },
5515 /* 5164 */ { MAD_F(0x0572a8f4) /* 0.340493158 */, 18 },
5516 /* 5165 */ { MAD_F(0x05730524) /* 0.340581075 */, 18 },
5517 /* 5166 */ { MAD_F(0x05736156) /* 0.340668999 */, 18 },
5518 /* 5167 */ { MAD_F(0x0573bd89) /* 0.340756927 */, 18 },
5519
5520 /* 5168 */ { MAD_F(0x057419be) /* 0.340844862 */, 18 },
5521 /* 5169 */ { MAD_F(0x057475f4) /* 0.340932802 */, 18 },
5522 /* 5170 */ { MAD_F(0x0574d22c) /* 0.341020748 */, 18 },
5523 /* 5171 */ { MAD_F(0x05752e65) /* 0.341108699 */, 18 },
5524 /* 5172 */ { MAD_F(0x05758aa0) /* 0.341196656 */, 18 },
5525 /* 5173 */ { MAD_F(0x0575e6dc) /* 0.341284619 */, 18 },
5526 /* 5174 */ { MAD_F(0x0576431a) /* 0.341372587 */, 18 },
5527 /* 5175 */ { MAD_F(0x05769f59) /* 0.341460562 */, 18 },
5528 /* 5176 */ { MAD_F(0x0576fb9a) /* 0.341548541 */, 18 },
5529 /* 5177 */ { MAD_F(0x057757dd) /* 0.341636527 */, 18 },
5530 /* 5178 */ { MAD_F(0x0577b421) /* 0.341724518 */, 18 },
5531 /* 5179 */ { MAD_F(0x05781066) /* 0.341812515 */, 18 },
5532 /* 5180 */ { MAD_F(0x05786cad) /* 0.341900517 */, 18 },
5533 /* 5181 */ { MAD_F(0x0578c8f5) /* 0.341988525 */, 18 },
5534 /* 5182 */ { MAD_F(0x0579253f) /* 0.342076539 */, 18 },
5535 /* 5183 */ { MAD_F(0x0579818b) /* 0.342164558 */, 18 },
5536
5537 /* 5184 */ { MAD_F(0x0579ddd8) /* 0.342252584 */, 18 },
5538 /* 5185 */ { MAD_F(0x057a3a27) /* 0.342340614 */, 18 },
5539 /* 5186 */ { MAD_F(0x057a9677) /* 0.342428651 */, 18 },
5540 /* 5187 */ { MAD_F(0x057af2c8) /* 0.342516693 */, 18 },
5541 /* 5188 */ { MAD_F(0x057b4f1c) /* 0.342604741 */, 18 },
5542 /* 5189 */ { MAD_F(0x057bab70) /* 0.342692794 */, 18 },
5543 /* 5190 */ { MAD_F(0x057c07c6) /* 0.342780853 */, 18 },
5544 /* 5191 */ { MAD_F(0x057c641e) /* 0.342868918 */, 18 },
5545 /* 5192 */ { MAD_F(0x057cc077) /* 0.342956988 */, 18 },
5546 /* 5193 */ { MAD_F(0x057d1cd2) /* 0.343045064 */, 18 },
5547 /* 5194 */ { MAD_F(0x057d792e) /* 0.343133146 */, 18 },
5548 /* 5195 */ { MAD_F(0x057dd58c) /* 0.343221233 */, 18 },
5549 /* 5196 */ { MAD_F(0x057e31eb) /* 0.343309326 */, 18 },
5550 /* 5197 */ { MAD_F(0x057e8e4c) /* 0.343397425 */, 18 },
5551 /* 5198 */ { MAD_F(0x057eeaae) /* 0.343485529 */, 18 },
5552 /* 5199 */ { MAD_F(0x057f4712) /* 0.343573639 */, 18 },
5553
5554 /* 5200 */ { MAD_F(0x057fa378) /* 0.343661754 */, 18 },
5555 /* 5201 */ { MAD_F(0x057fffde) /* 0.343749876 */, 18 },
5556 /* 5202 */ { MAD_F(0x05805c47) /* 0.343838003 */, 18 },
5557 /* 5203 */ { MAD_F(0x0580b8b1) /* 0.343926135 */, 18 },
5558 /* 5204 */ { MAD_F(0x0581151c) /* 0.344014273 */, 18 },
5559 /* 5205 */ { MAD_F(0x05817189) /* 0.344102417 */, 18 },
5560 /* 5206 */ { MAD_F(0x0581cdf7) /* 0.344190566 */, 18 },
5561 /* 5207 */ { MAD_F(0x05822a67) /* 0.344278722 */, 18 },
5562 /* 5208 */ { MAD_F(0x058286d9) /* 0.344366882 */, 18 },
5563 /* 5209 */ { MAD_F(0x0582e34c) /* 0.344455049 */, 18 },
5564 /* 5210 */ { MAD_F(0x05833fc0) /* 0.344543221 */, 18 },
5565 /* 5211 */ { MAD_F(0x05839c36) /* 0.344631398 */, 18 },
5566 /* 5212 */ { MAD_F(0x0583f8ae) /* 0.344719582 */, 18 },
5567 /* 5213 */ { MAD_F(0x05845527) /* 0.344807771 */, 18 },
5568 /* 5214 */ { MAD_F(0x0584b1a1) /* 0.344895965 */, 18 },
5569 /* 5215 */ { MAD_F(0x05850e1e) /* 0.344984165 */, 18 },
5570
5571 /* 5216 */ { MAD_F(0x05856a9b) /* 0.345072371 */, 18 },
5572 /* 5217 */ { MAD_F(0x0585c71a) /* 0.345160583 */, 18 },
5573 /* 5218 */ { MAD_F(0x0586239b) /* 0.345248800 */, 18 },
5574 /* 5219 */ { MAD_F(0x0586801d) /* 0.345337023 */, 18 },
5575 /* 5220 */ { MAD_F(0x0586dca1) /* 0.345425251 */, 18 },
5576 /* 5221 */ { MAD_F(0x05873926) /* 0.345513485 */, 18 },
5577 /* 5222 */ { MAD_F(0x058795ac) /* 0.345601725 */, 18 },
5578 /* 5223 */ { MAD_F(0x0587f235) /* 0.345689970 */, 18 },
5579 /* 5224 */ { MAD_F(0x05884ebe) /* 0.345778221 */, 18 },
5580 /* 5225 */ { MAD_F(0x0588ab49) /* 0.345866478 */, 18 },
5581 /* 5226 */ { MAD_F(0x058907d6) /* 0.345954740 */, 18 },
5582 /* 5227 */ { MAD_F(0x05896464) /* 0.346043008 */, 18 },
5583 /* 5228 */ { MAD_F(0x0589c0f4) /* 0.346131281 */, 18 },
5584 /* 5229 */ { MAD_F(0x058a1d85) /* 0.346219560 */, 18 },
5585 /* 5230 */ { MAD_F(0x058a7a18) /* 0.346307845 */, 18 },
5586 /* 5231 */ { MAD_F(0x058ad6ac) /* 0.346396135 */, 18 },
5587
5588 /* 5232 */ { MAD_F(0x058b3342) /* 0.346484431 */, 18 },
5589 /* 5233 */ { MAD_F(0x058b8fd9) /* 0.346572733 */, 18 },
5590 /* 5234 */ { MAD_F(0x058bec72) /* 0.346661040 */, 18 },
5591 /* 5235 */ { MAD_F(0x058c490c) /* 0.346749353 */, 18 },
5592 /* 5236 */ { MAD_F(0x058ca5a8) /* 0.346837671 */, 18 },
5593 /* 5237 */ { MAD_F(0x058d0246) /* 0.346925996 */, 18 },
5594 /* 5238 */ { MAD_F(0x058d5ee4) /* 0.347014325 */, 18 },
5595 /* 5239 */ { MAD_F(0x058dbb85) /* 0.347102661 */, 18 },
5596 /* 5240 */ { MAD_F(0x058e1827) /* 0.347191002 */, 18 },
5597 /* 5241 */ { MAD_F(0x058e74ca) /* 0.347279348 */, 18 },
5598 /* 5242 */ { MAD_F(0x058ed16f) /* 0.347367700 */, 18 },
5599 /* 5243 */ { MAD_F(0x058f2e15) /* 0.347456058 */, 18 },
5600 /* 5244 */ { MAD_F(0x058f8abd) /* 0.347544422 */, 18 },
5601 /* 5245 */ { MAD_F(0x058fe766) /* 0.347632791 */, 18 },
5602 /* 5246 */ { MAD_F(0x05904411) /* 0.347721165 */, 18 },
5603 /* 5247 */ { MAD_F(0x0590a0be) /* 0.347809546 */, 18 },
5604
5605 /* 5248 */ { MAD_F(0x0590fd6c) /* 0.347897931 */, 18 },
5606 /* 5249 */ { MAD_F(0x05915a1b) /* 0.347986323 */, 18 },
5607 /* 5250 */ { MAD_F(0x0591b6cc) /* 0.348074720 */, 18 },
5608 /* 5251 */ { MAD_F(0x0592137e) /* 0.348163123 */, 18 },
5609 /* 5252 */ { MAD_F(0x05927032) /* 0.348251531 */, 18 },
5610 /* 5253 */ { MAD_F(0x0592cce8) /* 0.348339945 */, 18 },
5611 /* 5254 */ { MAD_F(0x0593299f) /* 0.348428365 */, 18 },
5612 /* 5255 */ { MAD_F(0x05938657) /* 0.348516790 */, 18 },
5613 /* 5256 */ { MAD_F(0x0593e311) /* 0.348605221 */, 18 },
5614 /* 5257 */ { MAD_F(0x05943fcd) /* 0.348693657 */, 18 },
5615 /* 5258 */ { MAD_F(0x05949c8a) /* 0.348782099 */, 18 },
5616 /* 5259 */ { MAD_F(0x0594f948) /* 0.348870547 */, 18 },
5617 /* 5260 */ { MAD_F(0x05955608) /* 0.348959000 */, 18 },
5618 /* 5261 */ { MAD_F(0x0595b2ca) /* 0.349047459 */, 18 },
5619 /* 5262 */ { MAD_F(0x05960f8c) /* 0.349135923 */, 18 },
5620 /* 5263 */ { MAD_F(0x05966c51) /* 0.349224393 */, 18 },
5621
5622 /* 5264 */ { MAD_F(0x0596c917) /* 0.349312869 */, 18 },
5623 /* 5265 */ { MAD_F(0x059725de) /* 0.349401350 */, 18 },
5624 /* 5266 */ { MAD_F(0x059782a7) /* 0.349489837 */, 18 },
5625 /* 5267 */ { MAD_F(0x0597df72) /* 0.349578329 */, 18 },
5626 /* 5268 */ { MAD_F(0x05983c3e) /* 0.349666827 */, 18 },
5627 /* 5269 */ { MAD_F(0x0598990c) /* 0.349755331 */, 18 },
5628 /* 5270 */ { MAD_F(0x0598f5db) /* 0.349843840 */, 18 },
5629 /* 5271 */ { MAD_F(0x059952ab) /* 0.349932355 */, 18 },
5630 /* 5272 */ { MAD_F(0x0599af7d) /* 0.350020876 */, 18 },
5631 /* 5273 */ { MAD_F(0x059a0c51) /* 0.350109402 */, 18 },
5632 /* 5274 */ { MAD_F(0x059a6926) /* 0.350197933 */, 18 },
5633 /* 5275 */ { MAD_F(0x059ac5fc) /* 0.350286470 */, 18 },
5634 /* 5276 */ { MAD_F(0x059b22d4) /* 0.350375013 */, 18 },
5635 /* 5277 */ { MAD_F(0x059b7fae) /* 0.350463562 */, 18 },
5636 /* 5278 */ { MAD_F(0x059bdc89) /* 0.350552116 */, 18 },
5637 /* 5279 */ { MAD_F(0x059c3965) /* 0.350640675 */, 18 },
5638
5639 /* 5280 */ { MAD_F(0x059c9643) /* 0.350729240 */, 18 },
5640 /* 5281 */ { MAD_F(0x059cf323) /* 0.350817811 */, 18 },
5641 /* 5282 */ { MAD_F(0x059d5004) /* 0.350906388 */, 18 },
5642 /* 5283 */ { MAD_F(0x059dace6) /* 0.350994970 */, 18 },
5643 /* 5284 */ { MAD_F(0x059e09cb) /* 0.351083557 */, 18 },
5644 /* 5285 */ { MAD_F(0x059e66b0) /* 0.351172150 */, 18 },
5645 /* 5286 */ { MAD_F(0x059ec397) /* 0.351260749 */, 18 },
5646 /* 5287 */ { MAD_F(0x059f2080) /* 0.351349353 */, 18 },
5647 /* 5288 */ { MAD_F(0x059f7d6a) /* 0.351437963 */, 18 },
5648 /* 5289 */ { MAD_F(0x059fda55) /* 0.351526579 */, 18 },
5649 /* 5290 */ { MAD_F(0x05a03742) /* 0.351615200 */, 18 },
5650 /* 5291 */ { MAD_F(0x05a09431) /* 0.351703827 */, 18 },
5651 /* 5292 */ { MAD_F(0x05a0f121) /* 0.351792459 */, 18 },
5652 /* 5293 */ { MAD_F(0x05a14e12) /* 0.351881097 */, 18 },
5653 /* 5294 */ { MAD_F(0x05a1ab05) /* 0.351969740 */, 18 },
5654 /* 5295 */ { MAD_F(0x05a207fa) /* 0.352058389 */, 18 },
5655
5656 /* 5296 */ { MAD_F(0x05a264f0) /* 0.352147044 */, 18 },
5657 /* 5297 */ { MAD_F(0x05a2c1e7) /* 0.352235704 */, 18 },
5658 /* 5298 */ { MAD_F(0x05a31ee1) /* 0.352324369 */, 18 },
5659 /* 5299 */ { MAD_F(0x05a37bdb) /* 0.352413041 */, 18 },
5660 /* 5300 */ { MAD_F(0x05a3d8d7) /* 0.352501718 */, 18 },
5661 /* 5301 */ { MAD_F(0x05a435d5) /* 0.352590400 */, 18 },
5662 /* 5302 */ { MAD_F(0x05a492d4) /* 0.352679088 */, 18 },
5663 /* 5303 */ { MAD_F(0x05a4efd4) /* 0.352767782 */, 18 },
5664 /* 5304 */ { MAD_F(0x05a54cd6) /* 0.352856481 */, 18 },
5665 /* 5305 */ { MAD_F(0x05a5a9da) /* 0.352945186 */, 18 },
5666 /* 5306 */ { MAD_F(0x05a606df) /* 0.353033896 */, 18 },
5667 /* 5307 */ { MAD_F(0x05a663e5) /* 0.353122612 */, 18 },
5668 /* 5308 */ { MAD_F(0x05a6c0ed) /* 0.353211333 */, 18 },
5669 /* 5309 */ { MAD_F(0x05a71df7) /* 0.353300061 */, 18 },
5670 /* 5310 */ { MAD_F(0x05a77b02) /* 0.353388793 */, 18 },
5671 /* 5311 */ { MAD_F(0x05a7d80e) /* 0.353477531 */, 18 },
5672
5673 /* 5312 */ { MAD_F(0x05a8351c) /* 0.353566275 */, 18 },
5674 /* 5313 */ { MAD_F(0x05a8922c) /* 0.353655024 */, 18 },
5675 /* 5314 */ { MAD_F(0x05a8ef3c) /* 0.353743779 */, 18 },
5676 /* 5315 */ { MAD_F(0x05a94c4f) /* 0.353832540 */, 18 },
5677 /* 5316 */ { MAD_F(0x05a9a963) /* 0.353921306 */, 18 },
5678 /* 5317 */ { MAD_F(0x05aa0678) /* 0.354010077 */, 18 },
5679 /* 5318 */ { MAD_F(0x05aa638f) /* 0.354098855 */, 18 },
5680 /* 5319 */ { MAD_F(0x05aac0a8) /* 0.354187637 */, 18 },
5681 /* 5320 */ { MAD_F(0x05ab1dc2) /* 0.354276426 */, 18 },
5682 /* 5321 */ { MAD_F(0x05ab7add) /* 0.354365220 */, 18 },
5683 /* 5322 */ { MAD_F(0x05abd7fa) /* 0.354454019 */, 18 },
5684 /* 5323 */ { MAD_F(0x05ac3518) /* 0.354542824 */, 18 },
5685 /* 5324 */ { MAD_F(0x05ac9238) /* 0.354631635 */, 18 },
5686 /* 5325 */ { MAD_F(0x05acef5a) /* 0.354720451 */, 18 },
5687 /* 5326 */ { MAD_F(0x05ad4c7d) /* 0.354809272 */, 18 },
5688 /* 5327 */ { MAD_F(0x05ada9a1) /* 0.354898100 */, 18 },
5689
5690 /* 5328 */ { MAD_F(0x05ae06c7) /* 0.354986932 */, 18 },
5691 /* 5329 */ { MAD_F(0x05ae63ee) /* 0.355075771 */, 18 },
5692 /* 5330 */ { MAD_F(0x05aec117) /* 0.355164615 */, 18 },
5693 /* 5331 */ { MAD_F(0x05af1e41) /* 0.355253464 */, 18 },
5694 /* 5332 */ { MAD_F(0x05af7b6d) /* 0.355342319 */, 18 },
5695 /* 5333 */ { MAD_F(0x05afd89b) /* 0.355431180 */, 18 },
5696 /* 5334 */ { MAD_F(0x05b035c9) /* 0.355520046 */, 18 },
5697 /* 5335 */ { MAD_F(0x05b092fa) /* 0.355608917 */, 18 },
5698 /* 5336 */ { MAD_F(0x05b0f02b) /* 0.355697795 */, 18 },
5699 /* 5337 */ { MAD_F(0x05b14d5f) /* 0.355786677 */, 18 },
5700 /* 5338 */ { MAD_F(0x05b1aa94) /* 0.355875566 */, 18 },
5701 /* 5339 */ { MAD_F(0x05b207ca) /* 0.355964460 */, 18 },
5702 /* 5340 */ { MAD_F(0x05b26502) /* 0.356053359 */, 18 },
5703 /* 5341 */ { MAD_F(0x05b2c23b) /* 0.356142264 */, 18 },
5704 /* 5342 */ { MAD_F(0x05b31f76) /* 0.356231175 */, 18 },
5705 /* 5343 */ { MAD_F(0x05b37cb2) /* 0.356320091 */, 18 },
5706
5707 /* 5344 */ { MAD_F(0x05b3d9f0) /* 0.356409012 */, 18 },
5708 /* 5345 */ { MAD_F(0x05b4372f) /* 0.356497940 */, 18 },
5709 /* 5346 */ { MAD_F(0x05b4946f) /* 0.356586872 */, 18 },
5710 /* 5347 */ { MAD_F(0x05b4f1b2) /* 0.356675811 */, 18 },
5711 /* 5348 */ { MAD_F(0x05b54ef5) /* 0.356764754 */, 18 },
5712 /* 5349 */ { MAD_F(0x05b5ac3a) /* 0.356853704 */, 18 },
5713 /* 5350 */ { MAD_F(0x05b60981) /* 0.356942659 */, 18 },
5714 /* 5351 */ { MAD_F(0x05b666c9) /* 0.357031619 */, 18 },
5715 /* 5352 */ { MAD_F(0x05b6c413) /* 0.357120585 */, 18 },
5716 /* 5353 */ { MAD_F(0x05b7215e) /* 0.357209557 */, 18 },
5717 /* 5354 */ { MAD_F(0x05b77eab) /* 0.357298534 */, 18 },
5718 /* 5355 */ { MAD_F(0x05b7dbf9) /* 0.357387516 */, 18 },
5719 /* 5356 */ { MAD_F(0x05b83948) /* 0.357476504 */, 18 },
5720 /* 5357 */ { MAD_F(0x05b89699) /* 0.357565498 */, 18 },
5721 /* 5358 */ { MAD_F(0x05b8f3ec) /* 0.357654497 */, 18 },
5722 /* 5359 */ { MAD_F(0x05b95140) /* 0.357743502 */, 18 },
5723
5724 /* 5360 */ { MAD_F(0x05b9ae95) /* 0.357832512 */, 18 },
5725 /* 5361 */ { MAD_F(0x05ba0bec) /* 0.357921528 */, 18 },
5726 /* 5362 */ { MAD_F(0x05ba6945) /* 0.358010550 */, 18 },
5727 /* 5363 */ { MAD_F(0x05bac69f) /* 0.358099576 */, 18 },
5728 /* 5364 */ { MAD_F(0x05bb23fa) /* 0.358188609 */, 18 },
5729 /* 5365 */ { MAD_F(0x05bb8157) /* 0.358277647 */, 18 },
5730 /* 5366 */ { MAD_F(0x05bbdeb6) /* 0.358366690 */, 18 },
5731 /* 5367 */ { MAD_F(0x05bc3c16) /* 0.358455739 */, 18 },
5732 /* 5368 */ { MAD_F(0x05bc9977) /* 0.358544794 */, 18 },
5733 /* 5369 */ { MAD_F(0x05bcf6da) /* 0.358633854 */, 18 },
5734 /* 5370 */ { MAD_F(0x05bd543e) /* 0.358722920 */, 18 },
5735 /* 5371 */ { MAD_F(0x05bdb1a4) /* 0.358811991 */, 18 },
5736 /* 5372 */ { MAD_F(0x05be0f0b) /* 0.358901067 */, 18 },
5737 /* 5373 */ { MAD_F(0x05be6c74) /* 0.358990150 */, 18 },
5738 /* 5374 */ { MAD_F(0x05bec9df) /* 0.359079237 */, 18 },
5739 /* 5375 */ { MAD_F(0x05bf274a) /* 0.359168331 */, 18 },
5740
5741 /* 5376 */ { MAD_F(0x05bf84b8) /* 0.359257429 */, 18 },
5742 /* 5377 */ { MAD_F(0x05bfe226) /* 0.359346534 */, 18 },
5743 /* 5378 */ { MAD_F(0x05c03f97) /* 0.359435644 */, 18 },
5744 /* 5379 */ { MAD_F(0x05c09d08) /* 0.359524759 */, 18 },
5745 /* 5380 */ { MAD_F(0x05c0fa7c) /* 0.359613880 */, 18 },
5746 /* 5381 */ { MAD_F(0x05c157f0) /* 0.359703006 */, 18 },
5747 /* 5382 */ { MAD_F(0x05c1b566) /* 0.359792138 */, 18 },
5748 /* 5383 */ { MAD_F(0x05c212de) /* 0.359881276 */, 18 },
5749 /* 5384 */ { MAD_F(0x05c27057) /* 0.359970419 */, 18 },
5750 /* 5385 */ { MAD_F(0x05c2cdd2) /* 0.360059567 */, 18 },
5751 /* 5386 */ { MAD_F(0x05c32b4e) /* 0.360148721 */, 18 },
5752 /* 5387 */ { MAD_F(0x05c388cb) /* 0.360237881 */, 18 },
5753 /* 5388 */ { MAD_F(0x05c3e64b) /* 0.360327046 */, 18 },
5754 /* 5389 */ { MAD_F(0x05c443cb) /* 0.360416216 */, 18 },
5755 /* 5390 */ { MAD_F(0x05c4a14d) /* 0.360505392 */, 18 },
5756 /* 5391 */ { MAD_F(0x05c4fed1) /* 0.360594574 */, 18 },
5757
5758 /* 5392 */ { MAD_F(0x05c55c56) /* 0.360683761 */, 18 },
5759 /* 5393 */ { MAD_F(0x05c5b9dc) /* 0.360772953 */, 18 },
5760 /* 5394 */ { MAD_F(0x05c61764) /* 0.360862152 */, 18 },
5761 /* 5395 */ { MAD_F(0x05c674ed) /* 0.360951355 */, 18 },
5762 /* 5396 */ { MAD_F(0x05c6d278) /* 0.361040564 */, 18 },
5763 /* 5397 */ { MAD_F(0x05c73005) /* 0.361129779 */, 18 },
5764 /* 5398 */ { MAD_F(0x05c78d93) /* 0.361218999 */, 18 },
5765 /* 5399 */ { MAD_F(0x05c7eb22) /* 0.361308225 */, 18 },
5766 /* 5400 */ { MAD_F(0x05c848b3) /* 0.361397456 */, 18 },
5767 /* 5401 */ { MAD_F(0x05c8a645) /* 0.361486693 */, 18 },
5768 /* 5402 */ { MAD_F(0x05c903d9) /* 0.361575935 */, 18 },
5769 /* 5403 */ { MAD_F(0x05c9616e) /* 0.361665183 */, 18 },
5770 /* 5404 */ { MAD_F(0x05c9bf05) /* 0.361754436 */, 18 },
5771 /* 5405 */ { MAD_F(0x05ca1c9d) /* 0.361843695 */, 18 },
5772 /* 5406 */ { MAD_F(0x05ca7a37) /* 0.361932959 */, 18 },
5773 /* 5407 */ { MAD_F(0x05cad7d2) /* 0.362022229 */, 18 },
5774
5775 /* 5408 */ { MAD_F(0x05cb356e) /* 0.362111504 */, 18 },
5776 /* 5409 */ { MAD_F(0x05cb930d) /* 0.362200785 */, 18 },
5777 /* 5410 */ { MAD_F(0x05cbf0ac) /* 0.362290071 */, 18 },
5778 /* 5411 */ { MAD_F(0x05cc4e4d) /* 0.362379362 */, 18 },
5779 /* 5412 */ { MAD_F(0x05ccabf0) /* 0.362468660 */, 18 },
5780 /* 5413 */ { MAD_F(0x05cd0994) /* 0.362557962 */, 18 },
5781 /* 5414 */ { MAD_F(0x05cd6739) /* 0.362647271 */, 18 },
5782 /* 5415 */ { MAD_F(0x05cdc4e0) /* 0.362736584 */, 18 },
5783 /* 5416 */ { MAD_F(0x05ce2289) /* 0.362825904 */, 18 },
5784 /* 5417 */ { MAD_F(0x05ce8033) /* 0.362915228 */, 18 },
5785 /* 5418 */ { MAD_F(0x05ceddde) /* 0.363004559 */, 18 },
5786 /* 5419 */ { MAD_F(0x05cf3b8b) /* 0.363093894 */, 18 },
5787 /* 5420 */ { MAD_F(0x05cf9939) /* 0.363183236 */, 18 },
5788 /* 5421 */ { MAD_F(0x05cff6e9) /* 0.363272582 */, 18 },
5789 /* 5422 */ { MAD_F(0x05d0549a) /* 0.363361935 */, 18 },
5790 /* 5423 */ { MAD_F(0x05d0b24d) /* 0.363451292 */, 18 },
5791
5792 /* 5424 */ { MAD_F(0x05d11001) /* 0.363540655 */, 18 },
5793 /* 5425 */ { MAD_F(0x05d16db7) /* 0.363630024 */, 18 },
5794 /* 5426 */ { MAD_F(0x05d1cb6e) /* 0.363719398 */, 18 },
5795 /* 5427 */ { MAD_F(0x05d22927) /* 0.363808778 */, 18 },
5796 /* 5428 */ { MAD_F(0x05d286e1) /* 0.363898163 */, 18 },
5797 /* 5429 */ { MAD_F(0x05d2e49d) /* 0.363987554 */, 18 },
5798 /* 5430 */ { MAD_F(0x05d3425a) /* 0.364076950 */, 18 },
5799 /* 5431 */ { MAD_F(0x05d3a018) /* 0.364166352 */, 18 },
5800 /* 5432 */ { MAD_F(0x05d3fdd8) /* 0.364255759 */, 18 },
5801 /* 5433 */ { MAD_F(0x05d45b9a) /* 0.364345171 */, 18 },
5802 /* 5434 */ { MAD_F(0x05d4b95d) /* 0.364434589 */, 18 },
5803 /* 5435 */ { MAD_F(0x05d51721) /* 0.364524013 */, 18 },
5804 /* 5436 */ { MAD_F(0x05d574e7) /* 0.364613442 */, 18 },
5805 /* 5437 */ { MAD_F(0x05d5d2af) /* 0.364702877 */, 18 },
5806 /* 5438 */ { MAD_F(0x05d63078) /* 0.364792317 */, 18 },
5807 /* 5439 */ { MAD_F(0x05d68e42) /* 0.364881762 */, 18 },
5808
5809 /* 5440 */ { MAD_F(0x05d6ec0e) /* 0.364971213 */, 18 },
5810 /* 5441 */ { MAD_F(0x05d749db) /* 0.365060669 */, 18 },
5811 /* 5442 */ { MAD_F(0x05d7a7aa) /* 0.365150131 */, 18 },
5812 /* 5443 */ { MAD_F(0x05d8057a) /* 0.365239599 */, 18 },
5813 /* 5444 */ { MAD_F(0x05d8634c) /* 0.365329072 */, 18 },
5814 /* 5445 */ { MAD_F(0x05d8c11f) /* 0.365418550 */, 18 },
5815 /* 5446 */ { MAD_F(0x05d91ef4) /* 0.365508034 */, 18 },
5816 /* 5447 */ { MAD_F(0x05d97cca) /* 0.365597523 */, 18 },
5817 /* 5448 */ { MAD_F(0x05d9daa1) /* 0.365687018 */, 18 },
5818 /* 5449 */ { MAD_F(0x05da387a) /* 0.365776518 */, 18 },
5819 /* 5450 */ { MAD_F(0x05da9655) /* 0.365866024 */, 18 },
5820 /* 5451 */ { MAD_F(0x05daf431) /* 0.365955536 */, 18 },
5821 /* 5452 */ { MAD_F(0x05db520e) /* 0.366045052 */, 18 },
5822 /* 5453 */ { MAD_F(0x05dbafed) /* 0.366134574 */, 18 },
5823 /* 5454 */ { MAD_F(0x05dc0dce) /* 0.366224102 */, 18 },
5824 /* 5455 */ { MAD_F(0x05dc6baf) /* 0.366313635 */, 18 },
5825
5826 /* 5456 */ { MAD_F(0x05dcc993) /* 0.366403174 */, 18 },
5827 /* 5457 */ { MAD_F(0x05dd2778) /* 0.366492718 */, 18 },
5828 /* 5458 */ { MAD_F(0x05dd855e) /* 0.366582267 */, 18 },
5829 /* 5459 */ { MAD_F(0x05dde346) /* 0.366671822 */, 18 },
5830 /* 5460 */ { MAD_F(0x05de412f) /* 0.366761383 */, 18 },
5831 /* 5461 */ { MAD_F(0x05de9f1a) /* 0.366850949 */, 18 },
5832 /* 5462 */ { MAD_F(0x05defd06) /* 0.366940520 */, 18 },
5833 /* 5463 */ { MAD_F(0x05df5af3) /* 0.367030097 */, 18 },
5834 /* 5464 */ { MAD_F(0x05dfb8e2) /* 0.367119680 */, 18 },
5835 /* 5465 */ { MAD_F(0x05e016d3) /* 0.367209267 */, 18 },
5836 /* 5466 */ { MAD_F(0x05e074c5) /* 0.367298861 */, 18 },
5837 /* 5467 */ { MAD_F(0x05e0d2b8) /* 0.367388459 */, 18 },
5838 /* 5468 */ { MAD_F(0x05e130ad) /* 0.367478064 */, 18 },
5839 /* 5469 */ { MAD_F(0x05e18ea4) /* 0.367567673 */, 18 },
5840 /* 5470 */ { MAD_F(0x05e1ec9c) /* 0.367657288 */, 18 },
5841 /* 5471 */ { MAD_F(0x05e24a95) /* 0.367746909 */, 18 },
5842
5843 /* 5472 */ { MAD_F(0x05e2a890) /* 0.367836535 */, 18 },
5844 /* 5473 */ { MAD_F(0x05e3068c) /* 0.367926167 */, 18 },
5845 /* 5474 */ { MAD_F(0x05e3648a) /* 0.368015804 */, 18 },
5846 /* 5475 */ { MAD_F(0x05e3c289) /* 0.368105446 */, 18 },
5847 /* 5476 */ { MAD_F(0x05e4208a) /* 0.368195094 */, 18 },
5848 /* 5477 */ { MAD_F(0x05e47e8c) /* 0.368284747 */, 18 },
5849 /* 5478 */ { MAD_F(0x05e4dc8f) /* 0.368374406 */, 18 },
5850 /* 5479 */ { MAD_F(0x05e53a94) /* 0.368464070 */, 18 },
5851 /* 5480 */ { MAD_F(0x05e5989b) /* 0.368553740 */, 18 },
5852 /* 5481 */ { MAD_F(0x05e5f6a3) /* 0.368643415 */, 18 },
5853 /* 5482 */ { MAD_F(0x05e654ac) /* 0.368733096 */, 18 },
5854 /* 5483 */ { MAD_F(0x05e6b2b7) /* 0.368822782 */, 18 },
5855 /* 5484 */ { MAD_F(0x05e710c4) /* 0.368912473 */, 18 },
5856 /* 5485 */ { MAD_F(0x05e76ed2) /* 0.369002170 */, 18 },
5857 /* 5486 */ { MAD_F(0x05e7cce1) /* 0.369091873 */, 18 },
5858 /* 5487 */ { MAD_F(0x05e82af2) /* 0.369181581 */, 18 },
5859
5860 /* 5488 */ { MAD_F(0x05e88904) /* 0.369271294 */, 18 },
5861 /* 5489 */ { MAD_F(0x05e8e718) /* 0.369361013 */, 18 },
5862 /* 5490 */ { MAD_F(0x05e9452d) /* 0.369450737 */, 18 },
5863 /* 5491 */ { MAD_F(0x05e9a343) /* 0.369540467 */, 18 },
5864 /* 5492 */ { MAD_F(0x05ea015c) /* 0.369630202 */, 18 },
5865 /* 5493 */ { MAD_F(0x05ea5f75) /* 0.369719942 */, 18 },
5866 /* 5494 */ { MAD_F(0x05eabd90) /* 0.369809688 */, 18 },
5867 /* 5495 */ { MAD_F(0x05eb1bad) /* 0.369899440 */, 18 },
5868 /* 5496 */ { MAD_F(0x05eb79cb) /* 0.369989197 */, 18 },
5869 /* 5497 */ { MAD_F(0x05ebd7ea) /* 0.370078959 */, 18 },
5870 /* 5498 */ { MAD_F(0x05ec360b) /* 0.370168727 */, 18 },
5871 /* 5499 */ { MAD_F(0x05ec942d) /* 0.370258500 */, 18 },
5872 /* 5500 */ { MAD_F(0x05ecf251) /* 0.370348279 */, 18 },
5873 /* 5501 */ { MAD_F(0x05ed5076) /* 0.370438063 */, 18 },
5874 /* 5502 */ { MAD_F(0x05edae9d) /* 0.370527853 */, 18 },
5875 /* 5503 */ { MAD_F(0x05ee0cc5) /* 0.370617648 */, 18 },
5876
5877 /* 5504 */ { MAD_F(0x05ee6aef) /* 0.370707448 */, 18 },
5878 /* 5505 */ { MAD_F(0x05eec91a) /* 0.370797254 */, 18 },
5879 /* 5506 */ { MAD_F(0x05ef2746) /* 0.370887065 */, 18 },
5880 /* 5507 */ { MAD_F(0x05ef8574) /* 0.370976882 */, 18 },
5881 /* 5508 */ { MAD_F(0x05efe3a4) /* 0.371066704 */, 18 },
5882 /* 5509 */ { MAD_F(0x05f041d5) /* 0.371156532 */, 18 },
5883 /* 5510 */ { MAD_F(0x05f0a007) /* 0.371246365 */, 18 },
5884 /* 5511 */ { MAD_F(0x05f0fe3b) /* 0.371336203 */, 18 },
5885 /* 5512 */ { MAD_F(0x05f15c70) /* 0.371426047 */, 18 },
5886 /* 5513 */ { MAD_F(0x05f1baa7) /* 0.371515897 */, 18 },
5887 /* 5514 */ { MAD_F(0x05f218df) /* 0.371605751 */, 18 },
5888 /* 5515 */ { MAD_F(0x05f27719) /* 0.371695612 */, 18 },
5889 /* 5516 */ { MAD_F(0x05f2d554) /* 0.371785477 */, 18 },
5890 /* 5517 */ { MAD_F(0x05f33390) /* 0.371875348 */, 18 },
5891 /* 5518 */ { MAD_F(0x05f391cf) /* 0.371965225 */, 18 },
5892 /* 5519 */ { MAD_F(0x05f3f00e) /* 0.372055107 */, 18 },
5893
5894 /* 5520 */ { MAD_F(0x05f44e4f) /* 0.372144994 */, 18 },
5895 /* 5521 */ { MAD_F(0x05f4ac91) /* 0.372234887 */, 18 },
5896 /* 5522 */ { MAD_F(0x05f50ad5) /* 0.372324785 */, 18 },
5897 /* 5523 */ { MAD_F(0x05f5691b) /* 0.372414689 */, 18 },
5898 /* 5524 */ { MAD_F(0x05f5c761) /* 0.372504598 */, 18 },
5899 /* 5525 */ { MAD_F(0x05f625aa) /* 0.372594513 */, 18 },
5900 /* 5526 */ { MAD_F(0x05f683f3) /* 0.372684433 */, 18 },
5901 /* 5527 */ { MAD_F(0x05f6e23f) /* 0.372774358 */, 18 },
5902 /* 5528 */ { MAD_F(0x05f7408b) /* 0.372864289 */, 18 },
5903 /* 5529 */ { MAD_F(0x05f79ed9) /* 0.372954225 */, 18 },
5904 /* 5530 */ { MAD_F(0x05f7fd29) /* 0.373044167 */, 18 },
5905 /* 5531 */ { MAD_F(0x05f85b7a) /* 0.373134114 */, 18 },
5906 /* 5532 */ { MAD_F(0x05f8b9cc) /* 0.373224066 */, 18 },
5907 /* 5533 */ { MAD_F(0x05f91820) /* 0.373314024 */, 18 },
5908 /* 5534 */ { MAD_F(0x05f97675) /* 0.373403987 */, 18 },
5909 /* 5535 */ { MAD_F(0x05f9d4cc) /* 0.373493956 */, 18 },
5910
5911 /* 5536 */ { MAD_F(0x05fa3324) /* 0.373583930 */, 18 },
5912 /* 5537 */ { MAD_F(0x05fa917e) /* 0.373673910 */, 18 },
5913 /* 5538 */ { MAD_F(0x05faefd9) /* 0.373763895 */, 18 },
5914 /* 5539 */ { MAD_F(0x05fb4e36) /* 0.373853885 */, 18 },
5915 /* 5540 */ { MAD_F(0x05fbac94) /* 0.373943881 */, 18 },
5916 /* 5541 */ { MAD_F(0x05fc0af3) /* 0.374033882 */, 18 },
5917 /* 5542 */ { MAD_F(0x05fc6954) /* 0.374123889 */, 18 },
5918 /* 5543 */ { MAD_F(0x05fcc7b7) /* 0.374213901 */, 18 },
5919 /* 5544 */ { MAD_F(0x05fd261b) /* 0.374303918 */, 18 },
5920 /* 5545 */ { MAD_F(0x05fd8480) /* 0.374393941 */, 18 },
5921 /* 5546 */ { MAD_F(0x05fde2e7) /* 0.374483970 */, 18 },
5922 /* 5547 */ { MAD_F(0x05fe414f) /* 0.374574003 */, 18 },
5923 /* 5548 */ { MAD_F(0x05fe9fb9) /* 0.374664042 */, 18 },
5924 /* 5549 */ { MAD_F(0x05fefe24) /* 0.374754087 */, 18 },
5925 /* 5550 */ { MAD_F(0x05ff5c91) /* 0.374844137 */, 18 },
5926 /* 5551 */ { MAD_F(0x05ffbaff) /* 0.374934192 */, 18 },
5927
5928 /* 5552 */ { MAD_F(0x0600196e) /* 0.375024253 */, 18 },
5929 /* 5553 */ { MAD_F(0x060077df) /* 0.375114319 */, 18 },
5930 /* 5554 */ { MAD_F(0x0600d651) /* 0.375204391 */, 18 },
5931 /* 5555 */ { MAD_F(0x060134c5) /* 0.375294468 */, 18 },
5932 /* 5556 */ { MAD_F(0x0601933b) /* 0.375384550 */, 18 },
5933 /* 5557 */ { MAD_F(0x0601f1b1) /* 0.375474638 */, 18 },
5934 /* 5558 */ { MAD_F(0x0602502a) /* 0.375564731 */, 18 },
5935 /* 5559 */ { MAD_F(0x0602aea3) /* 0.375654830 */, 18 },
5936 /* 5560 */ { MAD_F(0x06030d1e) /* 0.375744934 */, 18 },
5937 /* 5561 */ { MAD_F(0x06036b9b) /* 0.375835043 */, 18 },
5938 /* 5562 */ { MAD_F(0x0603ca19) /* 0.375925158 */, 18 },
5939 /* 5563 */ { MAD_F(0x06042898) /* 0.376015278 */, 18 },
5940 /* 5564 */ { MAD_F(0x06048719) /* 0.376105404 */, 18 },
5941 /* 5565 */ { MAD_F(0x0604e59c) /* 0.376195535 */, 18 },
5942 /* 5566 */ { MAD_F(0x0605441f) /* 0.376285671 */, 18 },
5943 /* 5567 */ { MAD_F(0x0605a2a5) /* 0.376375813 */, 18 },
5944
5945 /* 5568 */ { MAD_F(0x0606012b) /* 0.376465960 */, 18 },
5946 /* 5569 */ { MAD_F(0x06065fb4) /* 0.376556113 */, 18 },
5947 /* 5570 */ { MAD_F(0x0606be3d) /* 0.376646271 */, 18 },
5948 /* 5571 */ { MAD_F(0x06071cc8) /* 0.376736434 */, 18 },
5949 /* 5572 */ { MAD_F(0x06077b55) /* 0.376826603 */, 18 },
5950 /* 5573 */ { MAD_F(0x0607d9e3) /* 0.376916777 */, 18 },
5951 /* 5574 */ { MAD_F(0x06083872) /* 0.377006957 */, 18 },
5952 /* 5575 */ { MAD_F(0x06089703) /* 0.377097141 */, 18 },
5953 /* 5576 */ { MAD_F(0x0608f595) /* 0.377187332 */, 18 },
5954 /* 5577 */ { MAD_F(0x06095429) /* 0.377277528 */, 18 },
5955 /* 5578 */ { MAD_F(0x0609b2be) /* 0.377367729 */, 18 },
5956 /* 5579 */ { MAD_F(0x060a1155) /* 0.377457935 */, 18 },
5957 /* 5580 */ { MAD_F(0x060a6fed) /* 0.377548147 */, 18 },
5958 /* 5581 */ { MAD_F(0x060ace86) /* 0.377638364 */, 18 },
5959 /* 5582 */ { MAD_F(0x060b2d21) /* 0.377728587 */, 18 },
5960 /* 5583 */ { MAD_F(0x060b8bbe) /* 0.377818815 */, 18 },
5961
5962 /* 5584 */ { MAD_F(0x060bea5c) /* 0.377909049 */, 18 },
5963 /* 5585 */ { MAD_F(0x060c48fb) /* 0.377999288 */, 18 },
5964 /* 5586 */ { MAD_F(0x060ca79c) /* 0.378089532 */, 18 },
5965 /* 5587 */ { MAD_F(0x060d063e) /* 0.378179781 */, 18 },
5966 /* 5588 */ { MAD_F(0x060d64e1) /* 0.378270036 */, 18 },
5967 /* 5589 */ { MAD_F(0x060dc387) /* 0.378360297 */, 18 },
5968 /* 5590 */ { MAD_F(0x060e222d) /* 0.378450563 */, 18 },
5969 /* 5591 */ { MAD_F(0x060e80d5) /* 0.378540834 */, 18 },
5970 /* 5592 */ { MAD_F(0x060edf7f) /* 0.378631110 */, 18 },
5971 /* 5593 */ { MAD_F(0x060f3e29) /* 0.378721392 */, 18 },
5972 /* 5594 */ { MAD_F(0x060f9cd6) /* 0.378811680 */, 18 },
5973 /* 5595 */ { MAD_F(0x060ffb83) /* 0.378901972 */, 18 },
5974 /* 5596 */ { MAD_F(0x06105a33) /* 0.378992270 */, 18 },
5975 /* 5597 */ { MAD_F(0x0610b8e3) /* 0.379082574 */, 18 },
5976 /* 5598 */ { MAD_F(0x06111795) /* 0.379172883 */, 18 },
5977 /* 5599 */ { MAD_F(0x06117649) /* 0.379263197 */, 18 },
5978
5979 /* 5600 */ { MAD_F(0x0611d4fe) /* 0.379353516 */, 18 },
5980 /* 5601 */ { MAD_F(0x061233b4) /* 0.379443841 */, 18 },
5981 /* 5602 */ { MAD_F(0x0612926c) /* 0.379534172 */, 18 },
5982 /* 5603 */ { MAD_F(0x0612f125) /* 0.379624507 */, 18 },
5983 /* 5604 */ { MAD_F(0x06134fe0) /* 0.379714848 */, 18 },
5984 /* 5605 */ { MAD_F(0x0613ae9c) /* 0.379805195 */, 18 },
5985 /* 5606 */ { MAD_F(0x06140d5a) /* 0.379895547 */, 18 },
5986 /* 5607 */ { MAD_F(0x06146c19) /* 0.379985904 */, 18 },
5987 /* 5608 */ { MAD_F(0x0614cada) /* 0.380076266 */, 18 },
5988 /* 5609 */ { MAD_F(0x0615299c) /* 0.380166634 */, 18 },
5989 /* 5610 */ { MAD_F(0x0615885f) /* 0.380257008 */, 18 },
5990 /* 5611 */ { MAD_F(0x0615e724) /* 0.380347386 */, 18 },
5991 /* 5612 */ { MAD_F(0x061645ea) /* 0.380437770 */, 18 },
5992 /* 5613 */ { MAD_F(0x0616a4b2) /* 0.380528160 */, 18 },
5993 /* 5614 */ { MAD_F(0x0617037b) /* 0.380618555 */, 18 },
5994 /* 5615 */ { MAD_F(0x06176246) /* 0.380708955 */, 18 },
5995
5996 /* 5616 */ { MAD_F(0x0617c112) /* 0.380799360 */, 18 },
5997 /* 5617 */ { MAD_F(0x06181fdf) /* 0.380889771 */, 18 },
5998 /* 5618 */ { MAD_F(0x06187eae) /* 0.380980187 */, 18 },
5999 /* 5619 */ { MAD_F(0x0618dd7e) /* 0.381070609 */, 18 },
6000 /* 5620 */ { MAD_F(0x06193c50) /* 0.381161036 */, 18 },
6001 /* 5621 */ { MAD_F(0x06199b24) /* 0.381251468 */, 18 },
6002 /* 5622 */ { MAD_F(0x0619f9f8) /* 0.381341906 */, 18 },
6003 /* 5623 */ { MAD_F(0x061a58ce) /* 0.381432349 */, 18 },
6004 /* 5624 */ { MAD_F(0x061ab7a6) /* 0.381522798 */, 18 },
6005 /* 5625 */ { MAD_F(0x061b167f) /* 0.381613251 */, 18 },
6006 /* 5626 */ { MAD_F(0x061b7559) /* 0.381703711 */, 18 },
6007 /* 5627 */ { MAD_F(0x061bd435) /* 0.381794175 */, 18 },
6008 /* 5628 */ { MAD_F(0x061c3313) /* 0.381884645 */, 18 },
6009 /* 5629 */ { MAD_F(0x061c91f1) /* 0.381975120 */, 18 },
6010 /* 5630 */ { MAD_F(0x061cf0d2) /* 0.382065601 */, 18 },
6011 /* 5631 */ { MAD_F(0x061d4fb3) /* 0.382156087 */, 18 },
6012
6013 /* 5632 */ { MAD_F(0x061dae96) /* 0.382246578 */, 18 },
6014 /* 5633 */ { MAD_F(0x061e0d7b) /* 0.382337075 */, 18 },
6015 /* 5634 */ { MAD_F(0x061e6c61) /* 0.382427577 */, 18 },
6016 /* 5635 */ { MAD_F(0x061ecb48) /* 0.382518084 */, 18 },
6017 /* 5636 */ { MAD_F(0x061f2a31) /* 0.382608597 */, 18 },
6018 /* 5637 */ { MAD_F(0x061f891b) /* 0.382699115 */, 18 },
6019 /* 5638 */ { MAD_F(0x061fe807) /* 0.382789638 */, 18 },
6020 /* 5639 */ { MAD_F(0x062046f4) /* 0.382880167 */, 18 },
6021 /* 5640 */ { MAD_F(0x0620a5e3) /* 0.382970701 */, 18 },
6022 /* 5641 */ { MAD_F(0x062104d3) /* 0.383061241 */, 18 },
6023 /* 5642 */ { MAD_F(0x062163c4) /* 0.383151786 */, 18 },
6024 /* 5643 */ { MAD_F(0x0621c2b7) /* 0.383242336 */, 18 },
6025 /* 5644 */ { MAD_F(0x062221ab) /* 0.383332891 */, 18 },
6026 /* 5645 */ { MAD_F(0x062280a1) /* 0.383423452 */, 18 },
6027 /* 5646 */ { MAD_F(0x0622df98) /* 0.383514018 */, 18 },
6028 /* 5647 */ { MAD_F(0x06233e91) /* 0.383604590 */, 18 },
6029
6030 /* 5648 */ { MAD_F(0x06239d8b) /* 0.383695167 */, 18 },
6031 /* 5649 */ { MAD_F(0x0623fc86) /* 0.383785749 */, 18 },
6032 /* 5650 */ { MAD_F(0x06245b83) /* 0.383876337 */, 18 },
6033 /* 5651 */ { MAD_F(0x0624ba82) /* 0.383966930 */, 18 },
6034 /* 5652 */ { MAD_F(0x06251981) /* 0.384057528 */, 18 },
6035 /* 5653 */ { MAD_F(0x06257883) /* 0.384148132 */, 18 },
6036 /* 5654 */ { MAD_F(0x0625d785) /* 0.384238741 */, 18 },
6037 /* 5655 */ { MAD_F(0x06263689) /* 0.384329355 */, 18 },
6038 /* 5656 */ { MAD_F(0x0626958f) /* 0.384419975 */, 18 },
6039 /* 5657 */ { MAD_F(0x0626f496) /* 0.384510600 */, 18 },
6040 /* 5658 */ { MAD_F(0x0627539e) /* 0.384601230 */, 18 },
6041 /* 5659 */ { MAD_F(0x0627b2a8) /* 0.384691866 */, 18 },
6042 /* 5660 */ { MAD_F(0x062811b3) /* 0.384782507 */, 18 },
6043 /* 5661 */ { MAD_F(0x062870c0) /* 0.384873153 */, 18 },
6044 /* 5662 */ { MAD_F(0x0628cfce) /* 0.384963805 */, 18 },
6045 /* 5663 */ { MAD_F(0x06292ede) /* 0.385054462 */, 18 },
6046
6047 /* 5664 */ { MAD_F(0x06298def) /* 0.385145124 */, 18 },
6048 /* 5665 */ { MAD_F(0x0629ed01) /* 0.385235792 */, 18 },
6049 /* 5666 */ { MAD_F(0x062a4c15) /* 0.385326465 */, 18 },
6050 /* 5667 */ { MAD_F(0x062aab2a) /* 0.385417143 */, 18 },
6051 /* 5668 */ { MAD_F(0x062b0a41) /* 0.385507827 */, 18 },
6052 /* 5669 */ { MAD_F(0x062b6959) /* 0.385598516 */, 18 },
6053 /* 5670 */ { MAD_F(0x062bc873) /* 0.385689211 */, 18 },
6054 /* 5671 */ { MAD_F(0x062c278e) /* 0.385779910 */, 18 },
6055 /* 5672 */ { MAD_F(0x062c86aa) /* 0.385870615 */, 18 },
6056 /* 5673 */ { MAD_F(0x062ce5c8) /* 0.385961326 */, 18 },
6057 /* 5674 */ { MAD_F(0x062d44e8) /* 0.386052041 */, 18 },
6058 /* 5675 */ { MAD_F(0x062da408) /* 0.386142762 */, 18 },
6059 /* 5676 */ { MAD_F(0x062e032a) /* 0.386233489 */, 18 },
6060 /* 5677 */ { MAD_F(0x062e624e) /* 0.386324221 */, 18 },
6061 /* 5678 */ { MAD_F(0x062ec173) /* 0.386414958 */, 18 },
6062 /* 5679 */ { MAD_F(0x062f209a) /* 0.386505700 */, 18 },
6063
6064 /* 5680 */ { MAD_F(0x062f7fc1) /* 0.386596448 */, 18 },
6065 /* 5681 */ { MAD_F(0x062fdeeb) /* 0.386687201 */, 18 },
6066 /* 5682 */ { MAD_F(0x06303e16) /* 0.386777959 */, 18 },
6067 /* 5683 */ { MAD_F(0x06309d42) /* 0.386868723 */, 18 },
6068 /* 5684 */ { MAD_F(0x0630fc6f) /* 0.386959492 */, 18 },
6069 /* 5685 */ { MAD_F(0x06315b9e) /* 0.387050266 */, 18 },
6070 /* 5686 */ { MAD_F(0x0631bacf) /* 0.387141045 */, 18 },
6071 /* 5687 */ { MAD_F(0x06321a01) /* 0.387231830 */, 18 },
6072 /* 5688 */ { MAD_F(0x06327934) /* 0.387322621 */, 18 },
6073 /* 5689 */ { MAD_F(0x0632d869) /* 0.387413416 */, 18 },
6074 /* 5690 */ { MAD_F(0x0633379f) /* 0.387504217 */, 18 },
6075 /* 5691 */ { MAD_F(0x063396d7) /* 0.387595023 */, 18 },
6076 /* 5692 */ { MAD_F(0x0633f610) /* 0.387685835 */, 18 },
6077 /* 5693 */ { MAD_F(0x0634554a) /* 0.387776652 */, 18 },
6078 /* 5694 */ { MAD_F(0x0634b486) /* 0.387867474 */, 18 },
6079 /* 5695 */ { MAD_F(0x063513c3) /* 0.387958301 */, 18 },
6080
6081 /* 5696 */ { MAD_F(0x06357302) /* 0.388049134 */, 18 },
6082 /* 5697 */ { MAD_F(0x0635d242) /* 0.388139972 */, 18 },
6083 /* 5698 */ { MAD_F(0x06363184) /* 0.388230816 */, 18 },
6084 /* 5699 */ { MAD_F(0x063690c7) /* 0.388321665 */, 18 },
6085 /* 5700 */ { MAD_F(0x0636f00b) /* 0.388412519 */, 18 },
6086 /* 5701 */ { MAD_F(0x06374f51) /* 0.388503378 */, 18 },
6087 /* 5702 */ { MAD_F(0x0637ae99) /* 0.388594243 */, 18 },
6088 /* 5703 */ { MAD_F(0x06380de1) /* 0.388685113 */, 18 },
6089 /* 5704 */ { MAD_F(0x06386d2b) /* 0.388775988 */, 18 },
6090 /* 5705 */ { MAD_F(0x0638cc77) /* 0.388866869 */, 18 },
6091 /* 5706 */ { MAD_F(0x06392bc4) /* 0.388957755 */, 18 },
6092 /* 5707 */ { MAD_F(0x06398b12) /* 0.389048646 */, 18 },
6093 /* 5708 */ { MAD_F(0x0639ea62) /* 0.389139542 */, 18 },
6094 /* 5709 */ { MAD_F(0x063a49b4) /* 0.389230444 */, 18 },
6095 /* 5710 */ { MAD_F(0x063aa906) /* 0.389321352 */, 18 },
6096 /* 5711 */ { MAD_F(0x063b085a) /* 0.389412264 */, 18 },
6097
6098 /* 5712 */ { MAD_F(0x063b67b0) /* 0.389503182 */, 18 },
6099 /* 5713 */ { MAD_F(0x063bc707) /* 0.389594105 */, 18 },
6100 /* 5714 */ { MAD_F(0x063c265f) /* 0.389685033 */, 18 },
6101 /* 5715 */ { MAD_F(0x063c85b9) /* 0.389775967 */, 18 },
6102 /* 5716 */ { MAD_F(0x063ce514) /* 0.389866906 */, 18 },
6103 /* 5717 */ { MAD_F(0x063d4471) /* 0.389957850 */, 18 },
6104 /* 5718 */ { MAD_F(0x063da3cf) /* 0.390048800 */, 18 },
6105 /* 5719 */ { MAD_F(0x063e032f) /* 0.390139755 */, 18 },
6106 /* 5720 */ { MAD_F(0x063e6290) /* 0.390230715 */, 18 },
6107 /* 5721 */ { MAD_F(0x063ec1f2) /* 0.390321681 */, 18 },
6108 /* 5722 */ { MAD_F(0x063f2156) /* 0.390412651 */, 18 },
6109 /* 5723 */ { MAD_F(0x063f80bb) /* 0.390503628 */, 18 },
6110 /* 5724 */ { MAD_F(0x063fe022) /* 0.390594609 */, 18 },
6111 /* 5725 */ { MAD_F(0x06403f8a) /* 0.390685596 */, 18 },
6112 /* 5726 */ { MAD_F(0x06409ef3) /* 0.390776588 */, 18 },
6113 /* 5727 */ { MAD_F(0x0640fe5e) /* 0.390867585 */, 18 },
6114
6115 /* 5728 */ { MAD_F(0x06415dcb) /* 0.390958588 */, 18 },
6116 /* 5729 */ { MAD_F(0x0641bd38) /* 0.391049596 */, 18 },
6117 /* 5730 */ { MAD_F(0x06421ca7) /* 0.391140609 */, 18 },
6118 /* 5731 */ { MAD_F(0x06427c18) /* 0.391231627 */, 18 },
6119 /* 5732 */ { MAD_F(0x0642db8a) /* 0.391322651 */, 18 },
6120 /* 5733 */ { MAD_F(0x06433afd) /* 0.391413680 */, 18 },
6121 /* 5734 */ { MAD_F(0x06439a72) /* 0.391504714 */, 18 },
6122 /* 5735 */ { MAD_F(0x0643f9e9) /* 0.391595754 */, 18 },
6123 /* 5736 */ { MAD_F(0x06445960) /* 0.391686799 */, 18 },
6124 /* 5737 */ { MAD_F(0x0644b8d9) /* 0.391777849 */, 18 },
6125 /* 5738 */ { MAD_F(0x06451854) /* 0.391868905 */, 18 },
6126 /* 5739 */ { MAD_F(0x064577d0) /* 0.391959966 */, 18 },
6127 /* 5740 */ { MAD_F(0x0645d74d) /* 0.392051032 */, 18 },
6128 /* 5741 */ { MAD_F(0x064636cc) /* 0.392142103 */, 18 },
6129 /* 5742 */ { MAD_F(0x0646964c) /* 0.392233180 */, 18 },
6130 /* 5743 */ { MAD_F(0x0646f5ce) /* 0.392324262 */, 18 },
6131
6132 /* 5744 */ { MAD_F(0x06475551) /* 0.392415349 */, 18 },
6133 /* 5745 */ { MAD_F(0x0647b4d5) /* 0.392506442 */, 18 },
6134 /* 5746 */ { MAD_F(0x0648145b) /* 0.392597540 */, 18 },
6135 /* 5747 */ { MAD_F(0x064873e3) /* 0.392688643 */, 18 },
6136 /* 5748 */ { MAD_F(0x0648d36b) /* 0.392779751 */, 18 },
6137 /* 5749 */ { MAD_F(0x064932f6) /* 0.392870865 */, 18 },
6138 /* 5750 */ { MAD_F(0x06499281) /* 0.392961984 */, 18 },
6139 /* 5751 */ { MAD_F(0x0649f20e) /* 0.393053108 */, 18 },
6140 /* 5752 */ { MAD_F(0x064a519c) /* 0.393144238 */, 18 },
6141 /* 5753 */ { MAD_F(0x064ab12c) /* 0.393235372 */, 18 },
6142 /* 5754 */ { MAD_F(0x064b10be) /* 0.393326513 */, 18 },
6143 /* 5755 */ { MAD_F(0x064b7050) /* 0.393417658 */, 18 },
6144 /* 5756 */ { MAD_F(0x064bcfe4) /* 0.393508809 */, 18 },
6145 /* 5757 */ { MAD_F(0x064c2f7a) /* 0.393599965 */, 18 },
6146 /* 5758 */ { MAD_F(0x064c8f11) /* 0.393691126 */, 18 },
6147 /* 5759 */ { MAD_F(0x064ceea9) /* 0.393782292 */, 18 },
6148
6149 /* 5760 */ { MAD_F(0x064d4e43) /* 0.393873464 */, 18 },
6150 /* 5761 */ { MAD_F(0x064dadde) /* 0.393964641 */, 18 },
6151 /* 5762 */ { MAD_F(0x064e0d7a) /* 0.394055823 */, 18 },
6152 /* 5763 */ { MAD_F(0x064e6d18) /* 0.394147011 */, 18 },
6153 /* 5764 */ { MAD_F(0x064eccb8) /* 0.394238204 */, 18 },
6154 /* 5765 */ { MAD_F(0x064f2c59) /* 0.394329402 */, 18 },
6155 /* 5766 */ { MAD_F(0x064f8bfb) /* 0.394420605 */, 18 },
6156 /* 5767 */ { MAD_F(0x064feb9e) /* 0.394511814 */, 18 },
6157 /* 5768 */ { MAD_F(0x06504b44) /* 0.394603028 */, 18 },
6158 /* 5769 */ { MAD_F(0x0650aaea) /* 0.394694247 */, 18 },
6159 /* 5770 */ { MAD_F(0x06510a92) /* 0.394785472 */, 18 },
6160 /* 5771 */ { MAD_F(0x06516a3b) /* 0.394876702 */, 18 },
6161 /* 5772 */ { MAD_F(0x0651c9e6) /* 0.394967937 */, 18 },
6162 /* 5773 */ { MAD_F(0x06522992) /* 0.395059177 */, 18 },
6163 /* 5774 */ { MAD_F(0x06528940) /* 0.395150423 */, 18 },
6164 /* 5775 */ { MAD_F(0x0652e8ef) /* 0.395241673 */, 18 },
6165
6166 /* 5776 */ { MAD_F(0x0653489f) /* 0.395332930 */, 18 },
6167 /* 5777 */ { MAD_F(0x0653a851) /* 0.395424191 */, 18 },
6168 /* 5778 */ { MAD_F(0x06540804) /* 0.395515458 */, 18 },
6169 /* 5779 */ { MAD_F(0x065467b9) /* 0.395606730 */, 18 },
6170 /* 5780 */ { MAD_F(0x0654c76f) /* 0.395698007 */, 18 },
6171 /* 5781 */ { MAD_F(0x06552726) /* 0.395789289 */, 18 },
6172 /* 5782 */ { MAD_F(0x065586df) /* 0.395880577 */, 18 },
6173 /* 5783 */ { MAD_F(0x0655e699) /* 0.395971870 */, 18 },
6174 /* 5784 */ { MAD_F(0x06564655) /* 0.396063168 */, 18 },
6175 /* 5785 */ { MAD_F(0x0656a612) /* 0.396154472 */, 18 },
6176 /* 5786 */ { MAD_F(0x065705d0) /* 0.396245780 */, 18 },
6177 /* 5787 */ { MAD_F(0x06576590) /* 0.396337094 */, 18 },
6178 /* 5788 */ { MAD_F(0x0657c552) /* 0.396428414 */, 18 },
6179 /* 5789 */ { MAD_F(0x06582514) /* 0.396519738 */, 18 },
6180 /* 5790 */ { MAD_F(0x065884d9) /* 0.396611068 */, 18 },
6181 /* 5791 */ { MAD_F(0x0658e49e) /* 0.396702403 */, 18 },
6182
6183 /* 5792 */ { MAD_F(0x06594465) /* 0.396793743 */, 18 },
6184 /* 5793 */ { MAD_F(0x0659a42e) /* 0.396885089 */, 18 },
6185 /* 5794 */ { MAD_F(0x065a03f7) /* 0.396976440 */, 18 },
6186 /* 5795 */ { MAD_F(0x065a63c3) /* 0.397067796 */, 18 },
6187 /* 5796 */ { MAD_F(0x065ac38f) /* 0.397159157 */, 18 },
6188 /* 5797 */ { MAD_F(0x065b235d) /* 0.397250524 */, 18 },
6189 /* 5798 */ { MAD_F(0x065b832d) /* 0.397341896 */, 18 },
6190 /* 5799 */ { MAD_F(0x065be2fe) /* 0.397433273 */, 18 },
6191 /* 5800 */ { MAD_F(0x065c42d0) /* 0.397524655 */, 18 },
6192 /* 5801 */ { MAD_F(0x065ca2a3) /* 0.397616043 */, 18 },
6193 /* 5802 */ { MAD_F(0x065d0279) /* 0.397707436 */, 18 },
6194 /* 5803 */ { MAD_F(0x065d624f) /* 0.397798834 */, 18 },
6195 /* 5804 */ { MAD_F(0x065dc227) /* 0.397890237 */, 18 },
6196 /* 5805 */ { MAD_F(0x065e2200) /* 0.397981646 */, 18 },
6197 /* 5806 */ { MAD_F(0x065e81db) /* 0.398073059 */, 18 },
6198 /* 5807 */ { MAD_F(0x065ee1b7) /* 0.398164479 */, 18 },
6199
6200 /* 5808 */ { MAD_F(0x065f4195) /* 0.398255903 */, 18 },
6201 /* 5809 */ { MAD_F(0x065fa174) /* 0.398347333 */, 18 },
6202 /* 5810 */ { MAD_F(0x06600154) /* 0.398438767 */, 18 },
6203 /* 5811 */ { MAD_F(0x06606136) /* 0.398530207 */, 18 },
6204 /* 5812 */ { MAD_F(0x0660c119) /* 0.398621653 */, 18 },
6205 /* 5813 */ { MAD_F(0x066120fd) /* 0.398713103 */, 18 },
6206 /* 5814 */ { MAD_F(0x066180e3) /* 0.398804559 */, 18 },
6207 /* 5815 */ { MAD_F(0x0661e0cb) /* 0.398896020 */, 18 },
6208 /* 5816 */ { MAD_F(0x066240b4) /* 0.398987487 */, 18 },
6209 /* 5817 */ { MAD_F(0x0662a09e) /* 0.399078958 */, 18 },
6210 /* 5818 */ { MAD_F(0x06630089) /* 0.399170435 */, 18 },
6211 /* 5819 */ { MAD_F(0x06636077) /* 0.399261917 */, 18 },
6212 /* 5820 */ { MAD_F(0x0663c065) /* 0.399353404 */, 18 },
6213 /* 5821 */ { MAD_F(0x06642055) /* 0.399444897 */, 18 },
6214 /* 5822 */ { MAD_F(0x06648046) /* 0.399536395 */, 18 },
6215 /* 5823 */ { MAD_F(0x0664e039) /* 0.399627898 */, 18 },
6216
6217 /* 5824 */ { MAD_F(0x0665402d) /* 0.399719406 */, 18 },
6218 /* 5825 */ { MAD_F(0x0665a022) /* 0.399810919 */, 18 },
6219 /* 5826 */ { MAD_F(0x06660019) /* 0.399902438 */, 18 },
6220 /* 5827 */ { MAD_F(0x06666011) /* 0.399993962 */, 18 },
6221 /* 5828 */ { MAD_F(0x0666c00b) /* 0.400085491 */, 18 },
6222 /* 5829 */ { MAD_F(0x06672006) /* 0.400177026 */, 18 },
6223 /* 5830 */ { MAD_F(0x06678003) /* 0.400268565 */, 18 },
6224 /* 5831 */ { MAD_F(0x0667e000) /* 0.400360110 */, 18 },
6225 /* 5832 */ { MAD_F(0x06684000) /* 0.400451660 */, 18 },
6226 /* 5833 */ { MAD_F(0x0668a000) /* 0.400543216 */, 18 },
6227 /* 5834 */ { MAD_F(0x06690003) /* 0.400634776 */, 18 },
6228 /* 5835 */ { MAD_F(0x06696006) /* 0.400726342 */, 18 },
6229 /* 5836 */ { MAD_F(0x0669c00b) /* 0.400817913 */, 18 },
6230 /* 5837 */ { MAD_F(0x066a2011) /* 0.400909489 */, 18 },
6231 /* 5838 */ { MAD_F(0x066a8019) /* 0.401001071 */, 18 },
6232 /* 5839 */ { MAD_F(0x066ae022) /* 0.401092657 */, 18 },
6233
6234 /* 5840 */ { MAD_F(0x066b402d) /* 0.401184249 */, 18 },
6235 /* 5841 */ { MAD_F(0x066ba039) /* 0.401275847 */, 18 },
6236 /* 5842 */ { MAD_F(0x066c0046) /* 0.401367449 */, 18 },
6237 /* 5843 */ { MAD_F(0x066c6055) /* 0.401459057 */, 18 },
6238 /* 5844 */ { MAD_F(0x066cc065) /* 0.401550670 */, 18 },
6239 /* 5845 */ { MAD_F(0x066d2076) /* 0.401642288 */, 18 },
6240 /* 5846 */ { MAD_F(0x066d8089) /* 0.401733911 */, 18 },
6241 /* 5847 */ { MAD_F(0x066de09e) /* 0.401825540 */, 18 },
6242 /* 5848 */ { MAD_F(0x066e40b3) /* 0.401917173 */, 18 },
6243 /* 5849 */ { MAD_F(0x066ea0cb) /* 0.402008812 */, 18 },
6244 /* 5850 */ { MAD_F(0x066f00e3) /* 0.402100457 */, 18 },
6245 /* 5851 */ { MAD_F(0x066f60fd) /* 0.402192106 */, 18 },
6246 /* 5852 */ { MAD_F(0x066fc118) /* 0.402283761 */, 18 },
6247 /* 5853 */ { MAD_F(0x06702135) /* 0.402375420 */, 18 },
6248 /* 5854 */ { MAD_F(0x06708153) /* 0.402467086 */, 18 },
6249 /* 5855 */ { MAD_F(0x0670e173) /* 0.402558756 */, 18 },
6250
6251 /* 5856 */ { MAD_F(0x06714194) /* 0.402650431 */, 18 },
6252 /* 5857 */ { MAD_F(0x0671a1b6) /* 0.402742112 */, 18 },
6253 /* 5858 */ { MAD_F(0x067201da) /* 0.402833798 */, 18 },
6254 /* 5859 */ { MAD_F(0x067261ff) /* 0.402925489 */, 18 },
6255 /* 5860 */ { MAD_F(0x0672c226) /* 0.403017186 */, 18 },
6256 /* 5861 */ { MAD_F(0x0673224e) /* 0.403108887 */, 18 },
6257 /* 5862 */ { MAD_F(0x06738277) /* 0.403200594 */, 18 },
6258 /* 5863 */ { MAD_F(0x0673e2a2) /* 0.403292306 */, 18 },
6259 /* 5864 */ { MAD_F(0x067442ce) /* 0.403384024 */, 18 },
6260 /* 5865 */ { MAD_F(0x0674a2fc) /* 0.403475746 */, 18 },
6261 /* 5866 */ { MAD_F(0x0675032b) /* 0.403567474 */, 18 },
6262 /* 5867 */ { MAD_F(0x0675635b) /* 0.403659207 */, 18 },
6263 /* 5868 */ { MAD_F(0x0675c38d) /* 0.403750945 */, 18 },
6264 /* 5869 */ { MAD_F(0x067623c0) /* 0.403842688 */, 18 },
6265 /* 5870 */ { MAD_F(0x067683f4) /* 0.403934437 */, 18 },
6266 /* 5871 */ { MAD_F(0x0676e42a) /* 0.404026190 */, 18 },
6267
6268 /* 5872 */ { MAD_F(0x06774462) /* 0.404117949 */, 18 },
6269 /* 5873 */ { MAD_F(0x0677a49b) /* 0.404209714 */, 18 },
6270 /* 5874 */ { MAD_F(0x067804d5) /* 0.404301483 */, 18 },
6271 /* 5875 */ { MAD_F(0x06786510) /* 0.404393258 */, 18 },
6272 /* 5876 */ { MAD_F(0x0678c54d) /* 0.404485037 */, 18 },
6273 /* 5877 */ { MAD_F(0x0679258c) /* 0.404576822 */, 18 },
6274 /* 5878 */ { MAD_F(0x067985cb) /* 0.404668613 */, 18 },
6275 /* 5879 */ { MAD_F(0x0679e60c) /* 0.404760408 */, 18 },
6276 /* 5880 */ { MAD_F(0x067a464f) /* 0.404852209 */, 18 },
6277 /* 5881 */ { MAD_F(0x067aa693) /* 0.404944014 */, 18 },
6278 /* 5882 */ { MAD_F(0x067b06d8) /* 0.405035825 */, 18 },
6279 /* 5883 */ { MAD_F(0x067b671f) /* 0.405127642 */, 18 },
6280 /* 5884 */ { MAD_F(0x067bc767) /* 0.405219463 */, 18 },
6281 /* 5885 */ { MAD_F(0x067c27b1) /* 0.405311290 */, 18 },
6282 /* 5886 */ { MAD_F(0x067c87fc) /* 0.405403122 */, 18 },
6283 /* 5887 */ { MAD_F(0x067ce848) /* 0.405494959 */, 18 },
6284
6285 /* 5888 */ { MAD_F(0x067d4896) /* 0.405586801 */, 18 },
6286 /* 5889 */ { MAD_F(0x067da8e5) /* 0.405678648 */, 18 },
6287 /* 5890 */ { MAD_F(0x067e0935) /* 0.405770501 */, 18 },
6288 /* 5891 */ { MAD_F(0x067e6987) /* 0.405862359 */, 18 },
6289 /* 5892 */ { MAD_F(0x067ec9da) /* 0.405954222 */, 18 },
6290 /* 5893 */ { MAD_F(0x067f2a2f) /* 0.406046090 */, 18 },
6291 /* 5894 */ { MAD_F(0x067f8a85) /* 0.406137963 */, 18 },
6292 /* 5895 */ { MAD_F(0x067feadd) /* 0.406229842 */, 18 },
6293 /* 5896 */ { MAD_F(0x06804b36) /* 0.406321726 */, 18 },
6294 /* 5897 */ { MAD_F(0x0680ab90) /* 0.406413615 */, 18 },
6295 /* 5898 */ { MAD_F(0x06810beb) /* 0.406505509 */, 18 },
6296 /* 5899 */ { MAD_F(0x06816c49) /* 0.406597408 */, 18 },
6297 /* 5900 */ { MAD_F(0x0681cca7) /* 0.406689313 */, 18 },
6298 /* 5901 */ { MAD_F(0x06822d07) /* 0.406781223 */, 18 },
6299 /* 5902 */ { MAD_F(0x06828d68) /* 0.406873138 */, 18 },
6300 /* 5903 */ { MAD_F(0x0682edcb) /* 0.406965058 */, 18 },
6301
6302 /* 5904 */ { MAD_F(0x06834e2f) /* 0.407056983 */, 18 },
6303 /* 5905 */ { MAD_F(0x0683ae94) /* 0.407148914 */, 18 },
6304 /* 5906 */ { MAD_F(0x06840efb) /* 0.407240850 */, 18 },
6305 /* 5907 */ { MAD_F(0x06846f63) /* 0.407332791 */, 18 },
6306 /* 5908 */ { MAD_F(0x0684cfcd) /* 0.407424737 */, 18 },
6307 /* 5909 */ { MAD_F(0x06853038) /* 0.407516688 */, 18 },
6308 /* 5910 */ { MAD_F(0x068590a4) /* 0.407608645 */, 18 },
6309 /* 5911 */ { MAD_F(0x0685f112) /* 0.407700606 */, 18 },
6310 /* 5912 */ { MAD_F(0x06865181) /* 0.407792573 */, 18 },
6311 /* 5913 */ { MAD_F(0x0686b1f2) /* 0.407884545 */, 18 },
6312 /* 5914 */ { MAD_F(0x06871264) /* 0.407976522 */, 18 },
6313 /* 5915 */ { MAD_F(0x068772d7) /* 0.408068505 */, 18 },
6314 /* 5916 */ { MAD_F(0x0687d34c) /* 0.408160492 */, 18 },
6315 /* 5917 */ { MAD_F(0x068833c2) /* 0.408252485 */, 18 },
6316 /* 5918 */ { MAD_F(0x06889439) /* 0.408344483 */, 18 },
6317 /* 5919 */ { MAD_F(0x0688f4b2) /* 0.408436486 */, 18 },
6318
6319 /* 5920 */ { MAD_F(0x0689552c) /* 0.408528495 */, 18 },
6320 /* 5921 */ { MAD_F(0x0689b5a8) /* 0.408620508 */, 18 },
6321 /* 5922 */ { MAD_F(0x068a1625) /* 0.408712527 */, 18 },
6322 /* 5923 */ { MAD_F(0x068a76a4) /* 0.408804551 */, 18 },
6323 /* 5924 */ { MAD_F(0x068ad724) /* 0.408896580 */, 18 },
6324 /* 5925 */ { MAD_F(0x068b37a5) /* 0.408988614 */, 18 },
6325 /* 5926 */ { MAD_F(0x068b9827) /* 0.409080653 */, 18 },
6326 /* 5927 */ { MAD_F(0x068bf8ac) /* 0.409172698 */, 18 },
6327 /* 5928 */ { MAD_F(0x068c5931) /* 0.409264748 */, 18 },
6328 /* 5929 */ { MAD_F(0x068cb9b8) /* 0.409356803 */, 18 },
6329 /* 5930 */ { MAD_F(0x068d1a40) /* 0.409448863 */, 18 },
6330 /* 5931 */ { MAD_F(0x068d7aca) /* 0.409540928 */, 18 },
6331 /* 5932 */ { MAD_F(0x068ddb54) /* 0.409632999 */, 18 },
6332 /* 5933 */ { MAD_F(0x068e3be1) /* 0.409725074 */, 18 },
6333 /* 5934 */ { MAD_F(0x068e9c6f) /* 0.409817155 */, 18 },
6334 /* 5935 */ { MAD_F(0x068efcfe) /* 0.409909241 */, 18 },
6335
6336 /* 5936 */ { MAD_F(0x068f5d8e) /* 0.410001332 */, 18 },
6337 /* 5937 */ { MAD_F(0x068fbe20) /* 0.410093428 */, 18 },
6338 /* 5938 */ { MAD_F(0x06901eb4) /* 0.410185530 */, 18 },
6339 /* 5939 */ { MAD_F(0x06907f48) /* 0.410277637 */, 18 },
6340 /* 5940 */ { MAD_F(0x0690dfde) /* 0.410369748 */, 18 },
6341 /* 5941 */ { MAD_F(0x06914076) /* 0.410461865 */, 18 },
6342 /* 5942 */ { MAD_F(0x0691a10f) /* 0.410553988 */, 18 },
6343 /* 5943 */ { MAD_F(0x069201a9) /* 0.410646115 */, 18 },
6344 /* 5944 */ { MAD_F(0x06926245) /* 0.410738247 */, 18 },
6345 /* 5945 */ { MAD_F(0x0692c2e2) /* 0.410830385 */, 18 },
6346 /* 5946 */ { MAD_F(0x06932380) /* 0.410922528 */, 18 },
6347 /* 5947 */ { MAD_F(0x06938420) /* 0.411014676 */, 18 },
6348 /* 5948 */ { MAD_F(0x0693e4c1) /* 0.411106829 */, 18 },
6349 /* 5949 */ { MAD_F(0x06944563) /* 0.411198987 */, 18 },
6350 /* 5950 */ { MAD_F(0x0694a607) /* 0.411291151 */, 18 },
6351 /* 5951 */ { MAD_F(0x069506ad) /* 0.411383320 */, 18 },
6352
6353 /* 5952 */ { MAD_F(0x06956753) /* 0.411475493 */, 18 },
6354 /* 5953 */ { MAD_F(0x0695c7fc) /* 0.411567672 */, 18 },
6355 /* 5954 */ { MAD_F(0x069628a5) /* 0.411659857 */, 18 },
6356 /* 5955 */ { MAD_F(0x06968950) /* 0.411752046 */, 18 },
6357 /* 5956 */ { MAD_F(0x0696e9fc) /* 0.411844240 */, 18 },
6358 /* 5957 */ { MAD_F(0x06974aaa) /* 0.411936440 */, 18 },
6359 /* 5958 */ { MAD_F(0x0697ab59) /* 0.412028645 */, 18 },
6360 /* 5959 */ { MAD_F(0x06980c09) /* 0.412120855 */, 18 },
6361 /* 5960 */ { MAD_F(0x06986cbb) /* 0.412213070 */, 18 },
6362 /* 5961 */ { MAD_F(0x0698cd6e) /* 0.412305290 */, 18 },
6363 /* 5962 */ { MAD_F(0x06992e23) /* 0.412397516 */, 18 },
6364 /* 5963 */ { MAD_F(0x06998ed9) /* 0.412489746 */, 18 },
6365 /* 5964 */ { MAD_F(0x0699ef90) /* 0.412581982 */, 18 },
6366 /* 5965 */ { MAD_F(0x069a5049) /* 0.412674223 */, 18 },
6367 /* 5966 */ { MAD_F(0x069ab103) /* 0.412766469 */, 18 },
6368 /* 5967 */ { MAD_F(0x069b11bf) /* 0.412858720 */, 18 },
6369
6370 /* 5968 */ { MAD_F(0x069b727b) /* 0.412950976 */, 18 },
6371 /* 5969 */ { MAD_F(0x069bd33a) /* 0.413043238 */, 18 },
6372 /* 5970 */ { MAD_F(0x069c33f9) /* 0.413135505 */, 18 },
6373 /* 5971 */ { MAD_F(0x069c94ba) /* 0.413227776 */, 18 },
6374 /* 5972 */ { MAD_F(0x069cf57d) /* 0.413320053 */, 18 },
6375 /* 5973 */ { MAD_F(0x069d5641) /* 0.413412335 */, 18 },
6376 /* 5974 */ { MAD_F(0x069db706) /* 0.413504623 */, 18 },
6377 /* 5975 */ { MAD_F(0x069e17cc) /* 0.413596915 */, 18 },
6378 /* 5976 */ { MAD_F(0x069e7894) /* 0.413689213 */, 18 },
6379 /* 5977 */ { MAD_F(0x069ed95e) /* 0.413781515 */, 18 },
6380 /* 5978 */ { MAD_F(0x069f3a28) /* 0.413873823 */, 18 },
6381 /* 5979 */ { MAD_F(0x069f9af4) /* 0.413966136 */, 18 },
6382 /* 5980 */ { MAD_F(0x069ffbc2) /* 0.414058454 */, 18 },
6383 /* 5981 */ { MAD_F(0x06a05c91) /* 0.414150778 */, 18 },
6384 /* 5982 */ { MAD_F(0x06a0bd61) /* 0.414243106 */, 18 },
6385 /* 5983 */ { MAD_F(0x06a11e32) /* 0.414335440 */, 18 },
6386
6387 /* 5984 */ { MAD_F(0x06a17f05) /* 0.414427779 */, 18 },
6388 /* 5985 */ { MAD_F(0x06a1dfda) /* 0.414520122 */, 18 },
6389 /* 5986 */ { MAD_F(0x06a240b0) /* 0.414612471 */, 18 },
6390 /* 5987 */ { MAD_F(0x06a2a187) /* 0.414704826 */, 18 },
6391 /* 5988 */ { MAD_F(0x06a3025f) /* 0.414797185 */, 18 },
6392 /* 5989 */ { MAD_F(0x06a36339) /* 0.414889549 */, 18 },
6393 /* 5990 */ { MAD_F(0x06a3c414) /* 0.414981919 */, 18 },
6394 /* 5991 */ { MAD_F(0x06a424f1) /* 0.415074294 */, 18 },
6395 /* 5992 */ { MAD_F(0x06a485cf) /* 0.415166674 */, 18 },
6396 /* 5993 */ { MAD_F(0x06a4e6ae) /* 0.415259059 */, 18 },
6397 /* 5994 */ { MAD_F(0x06a5478f) /* 0.415351449 */, 18 },
6398 /* 5995 */ { MAD_F(0x06a5a871) /* 0.415443844 */, 18 },
6399 /* 5996 */ { MAD_F(0x06a60955) /* 0.415536244 */, 18 },
6400 /* 5997 */ { MAD_F(0x06a66a3a) /* 0.415628650 */, 18 },
6401 /* 5998 */ { MAD_F(0x06a6cb20) /* 0.415721061 */, 18 },
6402 /* 5999 */ { MAD_F(0x06a72c08) /* 0.415813476 */, 18 },
6403
6404 /* 6000 */ { MAD_F(0x06a78cf1) /* 0.415905897 */, 18 },
6405 /* 6001 */ { MAD_F(0x06a7eddb) /* 0.415998324 */, 18 },
6406 /* 6002 */ { MAD_F(0x06a84ec7) /* 0.416090755 */, 18 },
6407 /* 6003 */ { MAD_F(0x06a8afb4) /* 0.416183191 */, 18 },
6408 /* 6004 */ { MAD_F(0x06a910a3) /* 0.416275633 */, 18 },
6409 /* 6005 */ { MAD_F(0x06a97193) /* 0.416368079 */, 18 },
6410 /* 6006 */ { MAD_F(0x06a9d284) /* 0.416460531 */, 18 },
6411 /* 6007 */ { MAD_F(0x06aa3377) /* 0.416552988 */, 18 },
6412 /* 6008 */ { MAD_F(0x06aa946b) /* 0.416645450 */, 18 },
6413 /* 6009 */ { MAD_F(0x06aaf561) /* 0.416737917 */, 18 },
6414 /* 6010 */ { MAD_F(0x06ab5657) /* 0.416830389 */, 18 },
6415 /* 6011 */ { MAD_F(0x06abb750) /* 0.416922867 */, 18 },
6416 /* 6012 */ { MAD_F(0x06ac1849) /* 0.417015349 */, 18 },
6417 /* 6013 */ { MAD_F(0x06ac7944) /* 0.417107837 */, 18 },
6418 /* 6014 */ { MAD_F(0x06acda41) /* 0.417200330 */, 18 },
6419 /* 6015 */ { MAD_F(0x06ad3b3e) /* 0.417292828 */, 18 },
6420
6421 /* 6016 */ { MAD_F(0x06ad9c3d) /* 0.417385331 */, 18 },
6422 /* 6017 */ { MAD_F(0x06adfd3e) /* 0.417477839 */, 18 },
6423 /* 6018 */ { MAD_F(0x06ae5e40) /* 0.417570352 */, 18 },
6424 /* 6019 */ { MAD_F(0x06aebf43) /* 0.417662871 */, 18 },
6425 /* 6020 */ { MAD_F(0x06af2047) /* 0.417755394 */, 18 },
6426 /* 6021 */ { MAD_F(0x06af814d) /* 0.417847923 */, 18 },
6427 /* 6022 */ { MAD_F(0x06afe255) /* 0.417940457 */, 18 },
6428 /* 6023 */ { MAD_F(0x06b0435e) /* 0.418032996 */, 18 },
6429 /* 6024 */ { MAD_F(0x06b0a468) /* 0.418125540 */, 18 },
6430 /* 6025 */ { MAD_F(0x06b10573) /* 0.418218089 */, 18 },
6431 /* 6026 */ { MAD_F(0x06b16680) /* 0.418310643 */, 18 },
6432 /* 6027 */ { MAD_F(0x06b1c78e) /* 0.418403203 */, 18 },
6433 /* 6028 */ { MAD_F(0x06b2289e) /* 0.418495767 */, 18 },
6434 /* 6029 */ { MAD_F(0x06b289af) /* 0.418588337 */, 18 },
6435 /* 6030 */ { MAD_F(0x06b2eac1) /* 0.418680911 */, 18 },
6436 /* 6031 */ { MAD_F(0x06b34bd5) /* 0.418773491 */, 18 },
6437
6438 /* 6032 */ { MAD_F(0x06b3acea) /* 0.418866076 */, 18 },
6439 /* 6033 */ { MAD_F(0x06b40e00) /* 0.418958666 */, 18 },
6440 /* 6034 */ { MAD_F(0x06b46f18) /* 0.419051262 */, 18 },
6441 /* 6035 */ { MAD_F(0x06b4d031) /* 0.419143862 */, 18 },
6442 /* 6036 */ { MAD_F(0x06b5314c) /* 0.419236467 */, 18 },
6443 /* 6037 */ { MAD_F(0x06b59268) /* 0.419329078 */, 18 },
6444 /* 6038 */ { MAD_F(0x06b5f385) /* 0.419421694 */, 18 },
6445 /* 6039 */ { MAD_F(0x06b654a4) /* 0.419514314 */, 18 },
6446 /* 6040 */ { MAD_F(0x06b6b5c4) /* 0.419606940 */, 18 },
6447 /* 6041 */ { MAD_F(0x06b716e6) /* 0.419699571 */, 18 },
6448 /* 6042 */ { MAD_F(0x06b77808) /* 0.419792208 */, 18 },
6449 /* 6043 */ { MAD_F(0x06b7d92d) /* 0.419884849 */, 18 },
6450 /* 6044 */ { MAD_F(0x06b83a52) /* 0.419977495 */, 18 },
6451 /* 6045 */ { MAD_F(0x06b89b79) /* 0.420070147 */, 18 },
6452 /* 6046 */ { MAD_F(0x06b8fca1) /* 0.420162803 */, 18 },
6453 /* 6047 */ { MAD_F(0x06b95dcb) /* 0.420255465 */, 18 },
6454
6455 /* 6048 */ { MAD_F(0x06b9bef6) /* 0.420348132 */, 18 },
6456 /* 6049 */ { MAD_F(0x06ba2023) /* 0.420440803 */, 18 },
6457 /* 6050 */ { MAD_F(0x06ba8150) /* 0.420533481 */, 18 },
6458 /* 6051 */ { MAD_F(0x06bae280) /* 0.420626163 */, 18 },
6459 /* 6052 */ { MAD_F(0x06bb43b0) /* 0.420718850 */, 18 },
6460 /* 6053 */ { MAD_F(0x06bba4e2) /* 0.420811542 */, 18 },
6461 /* 6054 */ { MAD_F(0x06bc0615) /* 0.420904240 */, 18 },
6462 /* 6055 */ { MAD_F(0x06bc674a) /* 0.420996942 */, 18 },
6463 /* 6056 */ { MAD_F(0x06bcc880) /* 0.421089650 */, 18 },
6464 /* 6057 */ { MAD_F(0x06bd29b7) /* 0.421182362 */, 18 },
6465 /* 6058 */ { MAD_F(0x06bd8af0) /* 0.421275080 */, 18 },
6466 /* 6059 */ { MAD_F(0x06bdec2a) /* 0.421367803 */, 18 },
6467 /* 6060 */ { MAD_F(0x06be4d66) /* 0.421460531 */, 18 },
6468 /* 6061 */ { MAD_F(0x06beaea3) /* 0.421553264 */, 18 },
6469 /* 6062 */ { MAD_F(0x06bf0fe1) /* 0.421646003 */, 18 },
6470 /* 6063 */ { MAD_F(0x06bf7120) /* 0.421738746 */, 18 },
6471
6472 /* 6064 */ { MAD_F(0x06bfd261) /* 0.421831494 */, 18 },
6473 /* 6065 */ { MAD_F(0x06c033a4) /* 0.421924248 */, 18 },
6474 /* 6066 */ { MAD_F(0x06c094e7) /* 0.422017007 */, 18 },
6475 /* 6067 */ { MAD_F(0x06c0f62c) /* 0.422109770 */, 18 },
6476 /* 6068 */ { MAD_F(0x06c15773) /* 0.422202539 */, 18 },
6477 /* 6069 */ { MAD_F(0x06c1b8bb) /* 0.422295313 */, 18 },
6478 /* 6070 */ { MAD_F(0x06c21a04) /* 0.422388092 */, 18 },
6479 /* 6071 */ { MAD_F(0x06c27b4e) /* 0.422480876 */, 18 },
6480 /* 6072 */ { MAD_F(0x06c2dc9a) /* 0.422573665 */, 18 },
6481 /* 6073 */ { MAD_F(0x06c33de8) /* 0.422666460 */, 18 },
6482 /* 6074 */ { MAD_F(0x06c39f36) /* 0.422759259 */, 18 },
6483 /* 6075 */ { MAD_F(0x06c40086) /* 0.422852064 */, 18 },
6484 /* 6076 */ { MAD_F(0x06c461d8) /* 0.422944873 */, 18 },
6485 /* 6077 */ { MAD_F(0x06c4c32a) /* 0.423037688 */, 18 },
6486 /* 6078 */ { MAD_F(0x06c5247f) /* 0.423130508 */, 18 },
6487 /* 6079 */ { MAD_F(0x06c585d4) /* 0.423223333 */, 18 },
6488
6489 /* 6080 */ { MAD_F(0x06c5e72b) /* 0.423316162 */, 18 },
6490 /* 6081 */ { MAD_F(0x06c64883) /* 0.423408997 */, 18 },
6491 /* 6082 */ { MAD_F(0x06c6a9dd) /* 0.423501838 */, 18 },
6492 /* 6083 */ { MAD_F(0x06c70b38) /* 0.423594683 */, 18 },
6493 /* 6084 */ { MAD_F(0x06c76c94) /* 0.423687533 */, 18 },
6494 /* 6085 */ { MAD_F(0x06c7cdf2) /* 0.423780389 */, 18 },
6495 /* 6086 */ { MAD_F(0x06c82f51) /* 0.423873249 */, 18 },
6496 /* 6087 */ { MAD_F(0x06c890b1) /* 0.423966115 */, 18 },
6497 /* 6088 */ { MAD_F(0x06c8f213) /* 0.424058985 */, 18 },
6498 /* 6089 */ { MAD_F(0x06c95376) /* 0.424151861 */, 18 },
6499 /* 6090 */ { MAD_F(0x06c9b4da) /* 0.424244742 */, 18 },
6500 /* 6091 */ { MAD_F(0x06ca1640) /* 0.424337628 */, 18 },
6501 /* 6092 */ { MAD_F(0x06ca77a8) /* 0.424430519 */, 18 },
6502 /* 6093 */ { MAD_F(0x06cad910) /* 0.424523415 */, 18 },
6503 /* 6094 */ { MAD_F(0x06cb3a7a) /* 0.424616316 */, 18 },
6504 /* 6095 */ { MAD_F(0x06cb9be5) /* 0.424709222 */, 18 },
6505
6506 /* 6096 */ { MAD_F(0x06cbfd52) /* 0.424802133 */, 18 },
6507 /* 6097 */ { MAD_F(0x06cc5ec0) /* 0.424895050 */, 18 },
6508 /* 6098 */ { MAD_F(0x06ccc030) /* 0.424987971 */, 18 },
6509 /* 6099 */ { MAD_F(0x06cd21a0) /* 0.425080898 */, 18 },
6510 /* 6100 */ { MAD_F(0x06cd8313) /* 0.425173829 */, 18 },
6511 /* 6101 */ { MAD_F(0x06cde486) /* 0.425266766 */, 18 },
6512 /* 6102 */ { MAD_F(0x06ce45fb) /* 0.425359708 */, 18 },
6513 /* 6103 */ { MAD_F(0x06cea771) /* 0.425452655 */, 18 },
6514 /* 6104 */ { MAD_F(0x06cf08e9) /* 0.425545607 */, 18 },
6515 /* 6105 */ { MAD_F(0x06cf6a62) /* 0.425638564 */, 18 },
6516 /* 6106 */ { MAD_F(0x06cfcbdc) /* 0.425731526 */, 18 },
6517 /* 6107 */ { MAD_F(0x06d02d58) /* 0.425824493 */, 18 },
6518 /* 6108 */ { MAD_F(0x06d08ed5) /* 0.425917465 */, 18 },
6519 /* 6109 */ { MAD_F(0x06d0f053) /* 0.426010443 */, 18 },
6520 /* 6110 */ { MAD_F(0x06d151d3) /* 0.426103425 */, 18 },
6521 /* 6111 */ { MAD_F(0x06d1b354) /* 0.426196412 */, 18 },
6522
6523 /* 6112 */ { MAD_F(0x06d214d7) /* 0.426289405 */, 18 },
6524 /* 6113 */ { MAD_F(0x06d2765a) /* 0.426382403 */, 18 },
6525 /* 6114 */ { MAD_F(0x06d2d7e0) /* 0.426475405 */, 18 },
6526 /* 6115 */ { MAD_F(0x06d33966) /* 0.426568413 */, 18 },
6527 /* 6116 */ { MAD_F(0x06d39aee) /* 0.426661426 */, 18 },
6528 /* 6117 */ { MAD_F(0x06d3fc77) /* 0.426754444 */, 18 },
6529 /* 6118 */ { MAD_F(0x06d45e02) /* 0.426847467 */, 18 },
6530 /* 6119 */ { MAD_F(0x06d4bf8e) /* 0.426940495 */, 18 },
6531 /* 6120 */ { MAD_F(0x06d5211c) /* 0.427033528 */, 18 },
6532 /* 6121 */ { MAD_F(0x06d582aa) /* 0.427126566 */, 18 },
6533 /* 6122 */ { MAD_F(0x06d5e43a) /* 0.427219609 */, 18 },
6534 /* 6123 */ { MAD_F(0x06d645cc) /* 0.427312657 */, 18 },
6535 /* 6124 */ { MAD_F(0x06d6a75f) /* 0.427405711 */, 18 },
6536 /* 6125 */ { MAD_F(0x06d708f3) /* 0.427498769 */, 18 },
6537 /* 6126 */ { MAD_F(0x06d76a88) /* 0.427591833 */, 18 },
6538 /* 6127 */ { MAD_F(0x06d7cc1f) /* 0.427684901 */, 18 },
6539
6540 /* 6128 */ { MAD_F(0x06d82db8) /* 0.427777975 */, 18 },
6541 /* 6129 */ { MAD_F(0x06d88f51) /* 0.427871054 */, 18 },
6542 /* 6130 */ { MAD_F(0x06d8f0ec) /* 0.427964137 */, 18 },
6543 /* 6131 */ { MAD_F(0x06d95288) /* 0.428057226 */, 18 },
6544 /* 6132 */ { MAD_F(0x06d9b426) /* 0.428150320 */, 18 },
6545 /* 6133 */ { MAD_F(0x06da15c5) /* 0.428243419 */, 18 },
6546 /* 6134 */ { MAD_F(0x06da7766) /* 0.428336523 */, 18 },
6547 /* 6135 */ { MAD_F(0x06dad907) /* 0.428429632 */, 18 },
6548 /* 6136 */ { MAD_F(0x06db3aaa) /* 0.428522746 */, 18 },
6549 /* 6137 */ { MAD_F(0x06db9c4f) /* 0.428615865 */, 18 },
6550 /* 6138 */ { MAD_F(0x06dbfdf5) /* 0.428708989 */, 18 },
6551 /* 6139 */ { MAD_F(0x06dc5f9c) /* 0.428802119 */, 18 },
6552 /* 6140 */ { MAD_F(0x06dcc145) /* 0.428895253 */, 18 },
6553 /* 6141 */ { MAD_F(0x06dd22ee) /* 0.428988392 */, 18 },
6554 /* 6142 */ { MAD_F(0x06dd849a) /* 0.429081537 */, 18 },
6555 /* 6143 */ { MAD_F(0x06dde646) /* 0.429174686 */, 18 },
6556
6557 /* 6144 */ { MAD_F(0x06de47f4) /* 0.429267841 */, 18 },
6558 /* 6145 */ { MAD_F(0x06dea9a4) /* 0.429361001 */, 18 },
6559 /* 6146 */ { MAD_F(0x06df0b54) /* 0.429454165 */, 18 },
6560 /* 6147 */ { MAD_F(0x06df6d06) /* 0.429547335 */, 18 },
6561 /* 6148 */ { MAD_F(0x06dfceba) /* 0.429640510 */, 18 },
6562 /* 6149 */ { MAD_F(0x06e0306f) /* 0.429733690 */, 18 },
6563 /* 6150 */ { MAD_F(0x06e09225) /* 0.429826874 */, 18 },
6564 /* 6151 */ { MAD_F(0x06e0f3dc) /* 0.429920064 */, 18 },
6565 /* 6152 */ { MAD_F(0x06e15595) /* 0.430013259 */, 18 },
6566 /* 6153 */ { MAD_F(0x06e1b74f) /* 0.430106459 */, 18 },
6567 /* 6154 */ { MAD_F(0x06e2190b) /* 0.430199664 */, 18 },
6568 /* 6155 */ { MAD_F(0x06e27ac8) /* 0.430292875 */, 18 },
6569 /* 6156 */ { MAD_F(0x06e2dc86) /* 0.430386090 */, 18 },
6570 /* 6157 */ { MAD_F(0x06e33e46) /* 0.430479310 */, 18 },
6571 /* 6158 */ { MAD_F(0x06e3a007) /* 0.430572535 */, 18 },
6572 /* 6159 */ { MAD_F(0x06e401c9) /* 0.430665765 */, 18 },
6573
6574 /* 6160 */ { MAD_F(0x06e4638d) /* 0.430759001 */, 18 },
6575 /* 6161 */ { MAD_F(0x06e4c552) /* 0.430852241 */, 18 },
6576 /* 6162 */ { MAD_F(0x06e52718) /* 0.430945487 */, 18 },
6577 /* 6163 */ { MAD_F(0x06e588e0) /* 0.431038737 */, 18 },
6578 /* 6164 */ { MAD_F(0x06e5eaa9) /* 0.431131993 */, 18 },
6579 /* 6165 */ { MAD_F(0x06e64c73) /* 0.431225253 */, 18 },
6580 /* 6166 */ { MAD_F(0x06e6ae3f) /* 0.431318519 */, 18 },
6581 /* 6167 */ { MAD_F(0x06e7100c) /* 0.431411790 */, 18 },
6582 /* 6168 */ { MAD_F(0x06e771db) /* 0.431505065 */, 18 },
6583 /* 6169 */ { MAD_F(0x06e7d3ab) /* 0.431598346 */, 18 },
6584 /* 6170 */ { MAD_F(0x06e8357c) /* 0.431691632 */, 18 },
6585 /* 6171 */ { MAD_F(0x06e8974e) /* 0.431784923 */, 18 },
6586 /* 6172 */ { MAD_F(0x06e8f922) /* 0.431878218 */, 18 },
6587 /* 6173 */ { MAD_F(0x06e95af8) /* 0.431971519 */, 18 },
6588 /* 6174 */ { MAD_F(0x06e9bcce) /* 0.432064825 */, 18 },
6589 /* 6175 */ { MAD_F(0x06ea1ea6) /* 0.432158136 */, 18 },
6590
6591 /* 6176 */ { MAD_F(0x06ea807f) /* 0.432251452 */, 18 },
6592 /* 6177 */ { MAD_F(0x06eae25a) /* 0.432344773 */, 18 },
6593 /* 6178 */ { MAD_F(0x06eb4436) /* 0.432438099 */, 18 },
6594 /* 6179 */ { MAD_F(0x06eba614) /* 0.432531431 */, 18 },
6595 /* 6180 */ { MAD_F(0x06ec07f2) /* 0.432624767 */, 18 },
6596 /* 6181 */ { MAD_F(0x06ec69d2) /* 0.432718108 */, 18 },
6597 /* 6182 */ { MAD_F(0x06eccbb4) /* 0.432811454 */, 18 },
6598 /* 6183 */ { MAD_F(0x06ed2d97) /* 0.432904805 */, 18 },
6599 /* 6184 */ { MAD_F(0x06ed8f7b) /* 0.432998162 */, 18 },
6600 /* 6185 */ { MAD_F(0x06edf160) /* 0.433091523 */, 18 },
6601 /* 6186 */ { MAD_F(0x06ee5347) /* 0.433184889 */, 18 },
6602 /* 6187 */ { MAD_F(0x06eeb52f) /* 0.433278261 */, 18 },
6603 /* 6188 */ { MAD_F(0x06ef1719) /* 0.433371637 */, 18 },
6604 /* 6189 */ { MAD_F(0x06ef7904) /* 0.433465019 */, 18 },
6605 /* 6190 */ { MAD_F(0x06efdaf0) /* 0.433558405 */, 18 },
6606 /* 6191 */ { MAD_F(0x06f03cde) /* 0.433651797 */, 18 },
6607
6608 /* 6192 */ { MAD_F(0x06f09ecc) /* 0.433745193 */, 18 },
6609 /* 6193 */ { MAD_F(0x06f100bd) /* 0.433838595 */, 18 },
6610 /* 6194 */ { MAD_F(0x06f162ae) /* 0.433932001 */, 18 },
6611 /* 6195 */ { MAD_F(0x06f1c4a1) /* 0.434025413 */, 18 },
6612 /* 6196 */ { MAD_F(0x06f22696) /* 0.434118830 */, 18 },
6613 /* 6197 */ { MAD_F(0x06f2888b) /* 0.434212251 */, 18 },
6614 /* 6198 */ { MAD_F(0x06f2ea82) /* 0.434305678 */, 18 },
6615 /* 6199 */ { MAD_F(0x06f34c7b) /* 0.434399110 */, 18 },
6616 /* 6200 */ { MAD_F(0x06f3ae75) /* 0.434492546 */, 18 },
6617 /* 6201 */ { MAD_F(0x06f41070) /* 0.434585988 */, 18 },
6618 /* 6202 */ { MAD_F(0x06f4726c) /* 0.434679435 */, 18 },
6619 /* 6203 */ { MAD_F(0x06f4d46a) /* 0.434772887 */, 18 },
6620 /* 6204 */ { MAD_F(0x06f53669) /* 0.434866344 */, 18 },
6621 /* 6205 */ { MAD_F(0x06f59869) /* 0.434959806 */, 18 },
6622 /* 6206 */ { MAD_F(0x06f5fa6b) /* 0.435053272 */, 18 },
6623 /* 6207 */ { MAD_F(0x06f65c6e) /* 0.435146744 */, 18 },
6624
6625 /* 6208 */ { MAD_F(0x06f6be73) /* 0.435240221 */, 18 },
6626 /* 6209 */ { MAD_F(0x06f72079) /* 0.435333703 */, 18 },
6627 /* 6210 */ { MAD_F(0x06f78280) /* 0.435427190 */, 18 },
6628 /* 6211 */ { MAD_F(0x06f7e489) /* 0.435520682 */, 18 },
6629 /* 6212 */ { MAD_F(0x06f84693) /* 0.435614179 */, 18 },
6630 /* 6213 */ { MAD_F(0x06f8a89e) /* 0.435707681 */, 18 },
6631 /* 6214 */ { MAD_F(0x06f90aaa) /* 0.435801188 */, 18 },
6632 /* 6215 */ { MAD_F(0x06f96cb8) /* 0.435894700 */, 18 },
6633 /* 6216 */ { MAD_F(0x06f9cec8) /* 0.435988217 */, 18 },
6634 /* 6217 */ { MAD_F(0x06fa30d8) /* 0.436081739 */, 18 },
6635 /* 6218 */ { MAD_F(0x06fa92ea) /* 0.436175266 */, 18 },
6636 /* 6219 */ { MAD_F(0x06faf4fe) /* 0.436268799 */, 18 },
6637 /* 6220 */ { MAD_F(0x06fb5712) /* 0.436362336 */, 18 },
6638 /* 6221 */ { MAD_F(0x06fbb928) /* 0.436455878 */, 18 },
6639 /* 6222 */ { MAD_F(0x06fc1b40) /* 0.436549425 */, 18 },
6640 /* 6223 */ { MAD_F(0x06fc7d58) /* 0.436642977 */, 18 },
6641
6642 /* 6224 */ { MAD_F(0x06fcdf72) /* 0.436736534 */, 18 },
6643 /* 6225 */ { MAD_F(0x06fd418e) /* 0.436830096 */, 18 },
6644 /* 6226 */ { MAD_F(0x06fda3ab) /* 0.436923664 */, 18 },
6645 /* 6227 */ { MAD_F(0x06fe05c9) /* 0.437017236 */, 18 },
6646 /* 6228 */ { MAD_F(0x06fe67e8) /* 0.437110813 */, 18 },
6647 /* 6229 */ { MAD_F(0x06feca09) /* 0.437204395 */, 18 },
6648 /* 6230 */ { MAD_F(0x06ff2c2b) /* 0.437297982 */, 18 },
6649 /* 6231 */ { MAD_F(0x06ff8e4f) /* 0.437391575 */, 18 },
6650 /* 6232 */ { MAD_F(0x06fff073) /* 0.437485172 */, 18 },
6651 /* 6233 */ { MAD_F(0x0700529a) /* 0.437578774 */, 18 },
6652 /* 6234 */ { MAD_F(0x0700b4c1) /* 0.437672381 */, 18 },
6653 /* 6235 */ { MAD_F(0x070116ea) /* 0.437765994 */, 18 },
6654 /* 6236 */ { MAD_F(0x07017914) /* 0.437859611 */, 18 },
6655 /* 6237 */ { MAD_F(0x0701db40) /* 0.437953233 */, 18 },
6656 /* 6238 */ { MAD_F(0x07023d6c) /* 0.438046860 */, 18 },
6657 /* 6239 */ { MAD_F(0x07029f9b) /* 0.438140493 */, 18 },
6658
6659 /* 6240 */ { MAD_F(0x070301ca) /* 0.438234130 */, 18 },
6660 /* 6241 */ { MAD_F(0x070363fb) /* 0.438327772 */, 18 },
6661 /* 6242 */ { MAD_F(0x0703c62d) /* 0.438421419 */, 18 },
6662 /* 6243 */ { MAD_F(0x07042861) /* 0.438515072 */, 18 },
6663 /* 6244 */ { MAD_F(0x07048a96) /* 0.438608729 */, 18 },
6664 /* 6245 */ { MAD_F(0x0704eccc) /* 0.438702391 */, 18 },
6665 /* 6246 */ { MAD_F(0x07054f04) /* 0.438796059 */, 18 },
6666 /* 6247 */ { MAD_F(0x0705b13d) /* 0.438889731 */, 18 },
6667 /* 6248 */ { MAD_F(0x07061377) /* 0.438983408 */, 18 },
6668 /* 6249 */ { MAD_F(0x070675b3) /* 0.439077090 */, 18 },
6669 /* 6250 */ { MAD_F(0x0706d7f0) /* 0.439170778 */, 18 },
6670 /* 6251 */ { MAD_F(0x07073a2e) /* 0.439264470 */, 18 },
6671 /* 6252 */ { MAD_F(0x07079c6e) /* 0.439358167 */, 18 },
6672 /* 6253 */ { MAD_F(0x0707feaf) /* 0.439451869 */, 18 },
6673 /* 6254 */ { MAD_F(0x070860f1) /* 0.439545577 */, 18 },
6674 /* 6255 */ { MAD_F(0x0708c335) /* 0.439639289 */, 18 },
6675
6676 /* 6256 */ { MAD_F(0x0709257a) /* 0.439733006 */, 18 },
6677 /* 6257 */ { MAD_F(0x070987c0) /* 0.439826728 */, 18 },
6678 /* 6258 */ { MAD_F(0x0709ea08) /* 0.439920456 */, 18 },
6679 /* 6259 */ { MAD_F(0x070a4c51) /* 0.440014188 */, 18 },
6680 /* 6260 */ { MAD_F(0x070aae9b) /* 0.440107925 */, 18 },
6681 /* 6261 */ { MAD_F(0x070b10e7) /* 0.440201667 */, 18 },
6682 /* 6262 */ { MAD_F(0x070b7334) /* 0.440295414 */, 18 },
6683 /* 6263 */ { MAD_F(0x070bd583) /* 0.440389167 */, 18 },
6684 /* 6264 */ { MAD_F(0x070c37d2) /* 0.440482924 */, 18 },
6685 /* 6265 */ { MAD_F(0x070c9a23) /* 0.440576686 */, 18 },
6686 /* 6266 */ { MAD_F(0x070cfc76) /* 0.440670453 */, 18 },
6687 /* 6267 */ { MAD_F(0x070d5eca) /* 0.440764225 */, 18 },
6688 /* 6268 */ { MAD_F(0x070dc11f) /* 0.440858002 */, 18 },
6689 /* 6269 */ { MAD_F(0x070e2375) /* 0.440951784 */, 18 },
6690 /* 6270 */ { MAD_F(0x070e85cd) /* 0.441045572 */, 18 },
6691 /* 6271 */ { MAD_F(0x070ee826) /* 0.441139364 */, 18 },
6692
6693 /* 6272 */ { MAD_F(0x070f4a80) /* 0.441233161 */, 18 },
6694 /* 6273 */ { MAD_F(0x070facdc) /* 0.441326963 */, 18 },
6695 /* 6274 */ { MAD_F(0x07100f39) /* 0.441420770 */, 18 },
6696 /* 6275 */ { MAD_F(0x07107198) /* 0.441514582 */, 18 },
6697 /* 6276 */ { MAD_F(0x0710d3f8) /* 0.441608399 */, 18 },
6698 /* 6277 */ { MAD_F(0x07113659) /* 0.441702221 */, 18 },
6699 /* 6278 */ { MAD_F(0x071198bb) /* 0.441796048 */, 18 },
6700 /* 6279 */ { MAD_F(0x0711fb1f) /* 0.441889880 */, 18 },
6701 /* 6280 */ { MAD_F(0x07125d84) /* 0.441983717 */, 18 },
6702 /* 6281 */ { MAD_F(0x0712bfeb) /* 0.442077559 */, 18 },
6703 /* 6282 */ { MAD_F(0x07132253) /* 0.442171406 */, 18 },
6704 /* 6283 */ { MAD_F(0x071384bc) /* 0.442265257 */, 18 },
6705 /* 6284 */ { MAD_F(0x0713e726) /* 0.442359114 */, 18 },
6706 /* 6285 */ { MAD_F(0x07144992) /* 0.442452976 */, 18 },
6707 /* 6286 */ { MAD_F(0x0714abff) /* 0.442546843 */, 18 },
6708 /* 6287 */ { MAD_F(0x07150e6e) /* 0.442640715 */, 18 },
6709
6710 /* 6288 */ { MAD_F(0x071570de) /* 0.442734592 */, 18 },
6711 /* 6289 */ { MAD_F(0x0715d34f) /* 0.442828473 */, 18 },
6712 /* 6290 */ { MAD_F(0x071635c1) /* 0.442922360 */, 18 },
6713 /* 6291 */ { MAD_F(0x07169835) /* 0.443016252 */, 18 },
6714 /* 6292 */ { MAD_F(0x0716faaa) /* 0.443110148 */, 18 },
6715 /* 6293 */ { MAD_F(0x07175d21) /* 0.443204050 */, 18 },
6716 /* 6294 */ { MAD_F(0x0717bf99) /* 0.443297957 */, 18 },
6717 /* 6295 */ { MAD_F(0x07182212) /* 0.443391868 */, 18 },
6718 /* 6296 */ { MAD_F(0x0718848d) /* 0.443485785 */, 18 },
6719 /* 6297 */ { MAD_F(0x0718e709) /* 0.443579706 */, 18 },
6720 /* 6298 */ { MAD_F(0x07194986) /* 0.443673633 */, 18 },
6721 /* 6299 */ { MAD_F(0x0719ac04) /* 0.443767564 */, 18 },
6722 /* 6300 */ { MAD_F(0x071a0e84) /* 0.443861501 */, 18 },
6723 /* 6301 */ { MAD_F(0x071a7105) /* 0.443955442 */, 18 },
6724 /* 6302 */ { MAD_F(0x071ad388) /* 0.444049389 */, 18 },
6725 /* 6303 */ { MAD_F(0x071b360c) /* 0.444143340 */, 18 },
6726
6727 /* 6304 */ { MAD_F(0x071b9891) /* 0.444237296 */, 18 },
6728 /* 6305 */ { MAD_F(0x071bfb18) /* 0.444331258 */, 18 },
6729 /* 6306 */ { MAD_F(0x071c5d9f) /* 0.444425224 */, 18 },
6730 /* 6307 */ { MAD_F(0x071cc029) /* 0.444519195 */, 18 },
6731 /* 6308 */ { MAD_F(0x071d22b3) /* 0.444613171 */, 18 },
6732 /* 6309 */ { MAD_F(0x071d853f) /* 0.444707153 */, 18 },
6733 /* 6310 */ { MAD_F(0x071de7cc) /* 0.444801139 */, 18 },
6734 /* 6311 */ { MAD_F(0x071e4a5b) /* 0.444895130 */, 18 },
6735 /* 6312 */ { MAD_F(0x071eaceb) /* 0.444989126 */, 18 },
6736 /* 6313 */ { MAD_F(0x071f0f7c) /* 0.445083127 */, 18 },
6737 /* 6314 */ { MAD_F(0x071f720e) /* 0.445177133 */, 18 },
6738 /* 6315 */ { MAD_F(0x071fd4a2) /* 0.445271144 */, 18 },
6739 /* 6316 */ { MAD_F(0x07203737) /* 0.445365160 */, 18 },
6740 /* 6317 */ { MAD_F(0x072099ce) /* 0.445459181 */, 18 },
6741 /* 6318 */ { MAD_F(0x0720fc66) /* 0.445553206 */, 18 },
6742 /* 6319 */ { MAD_F(0x07215eff) /* 0.445647237 */, 18 },
6743
6744 /* 6320 */ { MAD_F(0x0721c19a) /* 0.445741273 */, 18 },
6745 /* 6321 */ { MAD_F(0x07222436) /* 0.445835314 */, 18 },
6746 /* 6322 */ { MAD_F(0x072286d3) /* 0.445929359 */, 18 },
6747 /* 6323 */ { MAD_F(0x0722e971) /* 0.446023410 */, 18 },
6748 /* 6324 */ { MAD_F(0x07234c11) /* 0.446117466 */, 18 },
6749 /* 6325 */ { MAD_F(0x0723aeb2) /* 0.446211526 */, 18 },
6750 /* 6326 */ { MAD_F(0x07241155) /* 0.446305592 */, 18 },
6751 /* 6327 */ { MAD_F(0x072473f9) /* 0.446399662 */, 18 },
6752 /* 6328 */ { MAD_F(0x0724d69e) /* 0.446493738 */, 18 },
6753 /* 6329 */ { MAD_F(0x07253944) /* 0.446587818 */, 18 },
6754 /* 6330 */ { MAD_F(0x07259bec) /* 0.446681903 */, 18 },
6755 /* 6331 */ { MAD_F(0x0725fe95) /* 0.446775994 */, 18 },
6756 /* 6332 */ { MAD_F(0x07266140) /* 0.446870089 */, 18 },
6757 /* 6333 */ { MAD_F(0x0726c3ec) /* 0.446964189 */, 18 },
6758 /* 6334 */ { MAD_F(0x07272699) /* 0.447058294 */, 18 },
6759 /* 6335 */ { MAD_F(0x07278947) /* 0.447152404 */, 18 },
6760
6761 /* 6336 */ { MAD_F(0x0727ebf7) /* 0.447246519 */, 18 },
6762 /* 6337 */ { MAD_F(0x07284ea8) /* 0.447340639 */, 18 },
6763 /* 6338 */ { MAD_F(0x0728b15b) /* 0.447434764 */, 18 },
6764 /* 6339 */ { MAD_F(0x0729140f) /* 0.447528894 */, 18 },
6765 /* 6340 */ { MAD_F(0x072976c4) /* 0.447623029 */, 18 },
6766 /* 6341 */ { MAD_F(0x0729d97a) /* 0.447717169 */, 18 },
6767 /* 6342 */ { MAD_F(0x072a3c32) /* 0.447811314 */, 18 },
6768 /* 6343 */ { MAD_F(0x072a9eeb) /* 0.447905463 */, 18 },
6769 /* 6344 */ { MAD_F(0x072b01a6) /* 0.447999618 */, 18 },
6770 /* 6345 */ { MAD_F(0x072b6461) /* 0.448093778 */, 18 },
6771 /* 6346 */ { MAD_F(0x072bc71e) /* 0.448187942 */, 18 },
6772 /* 6347 */ { MAD_F(0x072c29dd) /* 0.448282112 */, 18 },
6773 /* 6348 */ { MAD_F(0x072c8c9d) /* 0.448376286 */, 18 },
6774 /* 6349 */ { MAD_F(0x072cef5e) /* 0.448470466 */, 18 },
6775 /* 6350 */ { MAD_F(0x072d5220) /* 0.448564650 */, 18 },
6776 /* 6351 */ { MAD_F(0x072db4e4) /* 0.448658839 */, 18 },
6777
6778 /* 6352 */ { MAD_F(0x072e17a9) /* 0.448753033 */, 18 },
6779 /* 6353 */ { MAD_F(0x072e7a6f) /* 0.448847233 */, 18 },
6780 /* 6354 */ { MAD_F(0x072edd37) /* 0.448941437 */, 18 },
6781 /* 6355 */ { MAD_F(0x072f4000) /* 0.449035646 */, 18 },
6782 /* 6356 */ { MAD_F(0x072fa2ca) /* 0.449129860 */, 18 },
6783 /* 6357 */ { MAD_F(0x07300596) /* 0.449224079 */, 18 },
6784 /* 6358 */ { MAD_F(0x07306863) /* 0.449318303 */, 18 },
6785 /* 6359 */ { MAD_F(0x0730cb32) /* 0.449412531 */, 18 },
6786 /* 6360 */ { MAD_F(0x07312e01) /* 0.449506765 */, 18 },
6787 /* 6361 */ { MAD_F(0x073190d2) /* 0.449601004 */, 18 },
6788 /* 6362 */ { MAD_F(0x0731f3a5) /* 0.449695247 */, 18 },
6789 /* 6363 */ { MAD_F(0x07325678) /* 0.449789496 */, 18 },
6790 /* 6364 */ { MAD_F(0x0732b94d) /* 0.449883749 */, 18 },
6791 /* 6365 */ { MAD_F(0x07331c23) /* 0.449978008 */, 18 },
6792 /* 6366 */ { MAD_F(0x07337efb) /* 0.450072271 */, 18 },
6793 /* 6367 */ { MAD_F(0x0733e1d4) /* 0.450166540 */, 18 },
6794
6795 /* 6368 */ { MAD_F(0x073444ae) /* 0.450260813 */, 18 },
6796 /* 6369 */ { MAD_F(0x0734a78a) /* 0.450355091 */, 18 },
6797 /* 6370 */ { MAD_F(0x07350a67) /* 0.450449374 */, 18 },
6798 /* 6371 */ { MAD_F(0x07356d45) /* 0.450543662 */, 18 },
6799 /* 6372 */ { MAD_F(0x0735d025) /* 0.450637955 */, 18 },
6800 /* 6373 */ { MAD_F(0x07363306) /* 0.450732253 */, 18 },
6801 /* 6374 */ { MAD_F(0x073695e8) /* 0.450826556 */, 18 },
6802 /* 6375 */ { MAD_F(0x0736f8cb) /* 0.450920864 */, 18 },
6803 /* 6376 */ { MAD_F(0x07375bb0) /* 0.451015176 */, 18 },
6804 /* 6377 */ { MAD_F(0x0737be96) /* 0.451109494 */, 18 },
6805 /* 6378 */ { MAD_F(0x0738217e) /* 0.451203817 */, 18 },
6806 /* 6379 */ { MAD_F(0x07388467) /* 0.451298144 */, 18 },
6807 /* 6380 */ { MAD_F(0x0738e751) /* 0.451392477 */, 18 },
6808 /* 6381 */ { MAD_F(0x07394a3d) /* 0.451486814 */, 18 },
6809 /* 6382 */ { MAD_F(0x0739ad29) /* 0.451581156 */, 18 },
6810 /* 6383 */ { MAD_F(0x073a1017) /* 0.451675503 */, 18 },
6811
6812 /* 6384 */ { MAD_F(0x073a7307) /* 0.451769856 */, 18 },
6813 /* 6385 */ { MAD_F(0x073ad5f8) /* 0.451864213 */, 18 },
6814 /* 6386 */ { MAD_F(0x073b38ea) /* 0.451958575 */, 18 },
6815 /* 6387 */ { MAD_F(0x073b9bdd) /* 0.452052942 */, 18 },
6816 /* 6388 */ { MAD_F(0x073bfed2) /* 0.452147313 */, 18 },
6817 /* 6389 */ { MAD_F(0x073c61c8) /* 0.452241690 */, 18 },
6818 /* 6390 */ { MAD_F(0x073cc4bf) /* 0.452336072 */, 18 },
6819 /* 6391 */ { MAD_F(0x073d27b8) /* 0.452430458 */, 18 },
6820 /* 6392 */ { MAD_F(0x073d8ab2) /* 0.452524850 */, 18 },
6821 /* 6393 */ { MAD_F(0x073dedae) /* 0.452619246 */, 18 },
6822 /* 6394 */ { MAD_F(0x073e50aa) /* 0.452713648 */, 18 },
6823 /* 6395 */ { MAD_F(0x073eb3a8) /* 0.452808054 */, 18 },
6824 /* 6396 */ { MAD_F(0x073f16a8) /* 0.452902465 */, 18 },
6825 /* 6397 */ { MAD_F(0x073f79a8) /* 0.452996882 */, 18 },
6826 /* 6398 */ { MAD_F(0x073fdcaa) /* 0.453091303 */, 18 },
6827 /* 6399 */ { MAD_F(0x07403fad) /* 0.453185729 */, 18 },
6828
6829 /* 6400 */ { MAD_F(0x0740a2b2) /* 0.453280160 */, 18 },
6830 /* 6401 */ { MAD_F(0x074105b8) /* 0.453374595 */, 18 },
6831 /* 6402 */ { MAD_F(0x074168bf) /* 0.453469036 */, 18 },
6832 /* 6403 */ { MAD_F(0x0741cbc8) /* 0.453563482 */, 18 },
6833 /* 6404 */ { MAD_F(0x07422ed2) /* 0.453657932 */, 18 },
6834 /* 6405 */ { MAD_F(0x074291dd) /* 0.453752388 */, 18 },
6835 /* 6406 */ { MAD_F(0x0742f4e9) /* 0.453846848 */, 18 },
6836 /* 6407 */ { MAD_F(0x074357f7) /* 0.453941314 */, 18 },
6837 /* 6408 */ { MAD_F(0x0743bb06) /* 0.454035784 */, 18 },
6838 /* 6409 */ { MAD_F(0x07441e17) /* 0.454130259 */, 18 },
6839 /* 6410 */ { MAD_F(0x07448129) /* 0.454224739 */, 18 },
6840 /* 6411 */ { MAD_F(0x0744e43c) /* 0.454319224 */, 18 },
6841 /* 6412 */ { MAD_F(0x07454750) /* 0.454413714 */, 18 },
6842 /* 6413 */ { MAD_F(0x0745aa66) /* 0.454508209 */, 18 },
6843 /* 6414 */ { MAD_F(0x07460d7d) /* 0.454602708 */, 18 },
6844 /* 6415 */ { MAD_F(0x07467095) /* 0.454697213 */, 18 },
6845
6846 /* 6416 */ { MAD_F(0x0746d3af) /* 0.454791723 */, 18 },
6847 /* 6417 */ { MAD_F(0x074736ca) /* 0.454886237 */, 18 },
6848 /* 6418 */ { MAD_F(0x074799e7) /* 0.454980756 */, 18 },
6849 /* 6419 */ { MAD_F(0x0747fd04) /* 0.455075281 */, 18 },
6850 /* 6420 */ { MAD_F(0x07486023) /* 0.455169810 */, 18 },
6851 /* 6421 */ { MAD_F(0x0748c344) /* 0.455264344 */, 18 },
6852 /* 6422 */ { MAD_F(0x07492665) /* 0.455358883 */, 18 },
6853 /* 6423 */ { MAD_F(0x07498988) /* 0.455453427 */, 18 },
6854 /* 6424 */ { MAD_F(0x0749ecac) /* 0.455547976 */, 18 },
6855 /* 6425 */ { MAD_F(0x074a4fd2) /* 0.455642529 */, 18 },
6856 /* 6426 */ { MAD_F(0x074ab2f9) /* 0.455737088 */, 18 },
6857 /* 6427 */ { MAD_F(0x074b1621) /* 0.455831652 */, 18 },
6858 /* 6428 */ { MAD_F(0x074b794b) /* 0.455926220 */, 18 },
6859 /* 6429 */ { MAD_F(0x074bdc75) /* 0.456020793 */, 18 },
6860 /* 6430 */ { MAD_F(0x074c3fa1) /* 0.456115372 */, 18 },
6861 /* 6431 */ { MAD_F(0x074ca2cf) /* 0.456209955 */, 18 },
6862
6863 /* 6432 */ { MAD_F(0x074d05fe) /* 0.456304543 */, 18 },
6864 /* 6433 */ { MAD_F(0x074d692e) /* 0.456399136 */, 18 },
6865 /* 6434 */ { MAD_F(0x074dcc5f) /* 0.456493733 */, 18 },
6866 /* 6435 */ { MAD_F(0x074e2f92) /* 0.456588336 */, 18 },
6867 /* 6436 */ { MAD_F(0x074e92c6) /* 0.456682944 */, 18 },
6868 /* 6437 */ { MAD_F(0x074ef5fb) /* 0.456777556 */, 18 },
6869 /* 6438 */ { MAD_F(0x074f5932) /* 0.456872174 */, 18 },
6870 /* 6439 */ { MAD_F(0x074fbc6a) /* 0.456966796 */, 18 },
6871 /* 6440 */ { MAD_F(0x07501fa3) /* 0.457061423 */, 18 },
6872 /* 6441 */ { MAD_F(0x075082de) /* 0.457156056 */, 18 },
6873 /* 6442 */ { MAD_F(0x0750e61a) /* 0.457250693 */, 18 },
6874 /* 6443 */ { MAD_F(0x07514957) /* 0.457345335 */, 18 },
6875 /* 6444 */ { MAD_F(0x0751ac96) /* 0.457439981 */, 18 },
6876 /* 6445 */ { MAD_F(0x07520fd6) /* 0.457534633 */, 18 },
6877 /* 6446 */ { MAD_F(0x07527317) /* 0.457629290 */, 18 },
6878 /* 6447 */ { MAD_F(0x0752d659) /* 0.457723951 */, 18 },
6879
6880 /* 6448 */ { MAD_F(0x0753399d) /* 0.457818618 */, 18 },
6881 /* 6449 */ { MAD_F(0x07539ce2) /* 0.457913289 */, 18 },
6882 /* 6450 */ { MAD_F(0x07540029) /* 0.458007965 */, 18 },
6883 /* 6451 */ { MAD_F(0x07546371) /* 0.458102646 */, 18 },
6884 /* 6452 */ { MAD_F(0x0754c6ba) /* 0.458197332 */, 18 },
6885 /* 6453 */ { MAD_F(0x07552a04) /* 0.458292023 */, 18 },
6886 /* 6454 */ { MAD_F(0x07558d50) /* 0.458386719 */, 18 },
6887 /* 6455 */ { MAD_F(0x0755f09d) /* 0.458481420 */, 18 },
6888 /* 6456 */ { MAD_F(0x075653eb) /* 0.458576125 */, 18 },
6889 /* 6457 */ { MAD_F(0x0756b73b) /* 0.458670836 */, 18 },
6890 /* 6458 */ { MAD_F(0x07571a8c) /* 0.458765551 */, 18 },
6891 /* 6459 */ { MAD_F(0x07577dde) /* 0.458860271 */, 18 },
6892 /* 6460 */ { MAD_F(0x0757e131) /* 0.458954996 */, 18 },
6893 /* 6461 */ { MAD_F(0x07584486) /* 0.459049726 */, 18 },
6894 /* 6462 */ { MAD_F(0x0758a7dd) /* 0.459144461 */, 18 },
6895 /* 6463 */ { MAD_F(0x07590b34) /* 0.459239201 */, 18 },
6896
6897 /* 6464 */ { MAD_F(0x07596e8d) /* 0.459333946 */, 18 },
6898 /* 6465 */ { MAD_F(0x0759d1e7) /* 0.459428695 */, 18 },
6899 /* 6466 */ { MAD_F(0x075a3542) /* 0.459523450 */, 18 },
6900 /* 6467 */ { MAD_F(0x075a989f) /* 0.459618209 */, 18 },
6901 /* 6468 */ { MAD_F(0x075afbfd) /* 0.459712973 */, 18 },
6902 /* 6469 */ { MAD_F(0x075b5f5d) /* 0.459807742 */, 18 },
6903 /* 6470 */ { MAD_F(0x075bc2bd) /* 0.459902516 */, 18 },
6904 /* 6471 */ { MAD_F(0x075c261f) /* 0.459997295 */, 18 },
6905 /* 6472 */ { MAD_F(0x075c8983) /* 0.460092079 */, 18 },
6906 /* 6473 */ { MAD_F(0x075cece7) /* 0.460186867 */, 18 },
6907 /* 6474 */ { MAD_F(0x075d504d) /* 0.460281661 */, 18 },
6908 /* 6475 */ { MAD_F(0x075db3b5) /* 0.460376459 */, 18 },
6909 /* 6476 */ { MAD_F(0x075e171d) /* 0.460471262 */, 18 },
6910 /* 6477 */ { MAD_F(0x075e7a87) /* 0.460566071 */, 18 },
6911 /* 6478 */ { MAD_F(0x075eddf2) /* 0.460660884 */, 18 },
6912 /* 6479 */ { MAD_F(0x075f415f) /* 0.460755701 */, 18 },
6913
6914 /* 6480 */ { MAD_F(0x075fa4cc) /* 0.460850524 */, 18 },
6915 /* 6481 */ { MAD_F(0x0760083b) /* 0.460945352 */, 18 },
6916 /* 6482 */ { MAD_F(0x07606bac) /* 0.461040184 */, 18 },
6917 /* 6483 */ { MAD_F(0x0760cf1e) /* 0.461135022 */, 18 },
6918 /* 6484 */ { MAD_F(0x07613291) /* 0.461229864 */, 18 },
6919 /* 6485 */ { MAD_F(0x07619605) /* 0.461324711 */, 18 },
6920 /* 6486 */ { MAD_F(0x0761f97b) /* 0.461419563 */, 18 },
6921 /* 6487 */ { MAD_F(0x07625cf2) /* 0.461514420 */, 18 },
6922 /* 6488 */ { MAD_F(0x0762c06a) /* 0.461609282 */, 18 },
6923 /* 6489 */ { MAD_F(0x076323e3) /* 0.461704149 */, 18 },
6924 /* 6490 */ { MAD_F(0x0763875e) /* 0.461799020 */, 18 },
6925 /* 6491 */ { MAD_F(0x0763eadb) /* 0.461893897 */, 18 },
6926 /* 6492 */ { MAD_F(0x07644e58) /* 0.461988778 */, 18 },
6927 /* 6493 */ { MAD_F(0x0764b1d7) /* 0.462083664 */, 18 },
6928 /* 6494 */ { MAD_F(0x07651557) /* 0.462178555 */, 18 },
6929 /* 6495 */ { MAD_F(0x076578d8) /* 0.462273451 */, 18 },
6930
6931 /* 6496 */ { MAD_F(0x0765dc5b) /* 0.462368352 */, 18 },
6932 /* 6497 */ { MAD_F(0x07663fdf) /* 0.462463257 */, 18 },
6933 /* 6498 */ { MAD_F(0x0766a364) /* 0.462558168 */, 18 },
6934 /* 6499 */ { MAD_F(0x076706eb) /* 0.462653083 */, 18 },
6935 /* 6500 */ { MAD_F(0x07676a73) /* 0.462748003 */, 18 },
6936 /* 6501 */ { MAD_F(0x0767cdfc) /* 0.462842928 */, 18 },
6937 /* 6502 */ { MAD_F(0x07683187) /* 0.462937858 */, 18 },
6938 /* 6503 */ { MAD_F(0x07689513) /* 0.463032793 */, 18 },
6939 /* 6504 */ { MAD_F(0x0768f8a0) /* 0.463127733 */, 18 },
6940 /* 6505 */ { MAD_F(0x07695c2e) /* 0.463222678 */, 18 },
6941 /* 6506 */ { MAD_F(0x0769bfbe) /* 0.463317627 */, 18 },
6942 /* 6507 */ { MAD_F(0x076a234f) /* 0.463412581 */, 18 },
6943 /* 6508 */ { MAD_F(0x076a86e2) /* 0.463507540 */, 18 },
6944 /* 6509 */ { MAD_F(0x076aea75) /* 0.463602504 */, 18 },
6945 /* 6510 */ { MAD_F(0x076b4e0a) /* 0.463697473 */, 18 },
6946 /* 6511 */ { MAD_F(0x076bb1a1) /* 0.463792447 */, 18 },
6947
6948 /* 6512 */ { MAD_F(0x076c1538) /* 0.463887426 */, 18 },
6949 /* 6513 */ { MAD_F(0x076c78d1) /* 0.463982409 */, 18 },
6950 /* 6514 */ { MAD_F(0x076cdc6c) /* 0.464077398 */, 18 },
6951 /* 6515 */ { MAD_F(0x076d4007) /* 0.464172391 */, 18 },
6952 /* 6516 */ { MAD_F(0x076da3a4) /* 0.464267389 */, 18 },
6953 /* 6517 */ { MAD_F(0x076e0742) /* 0.464362392 */, 18 },
6954 /* 6518 */ { MAD_F(0x076e6ae2) /* 0.464457399 */, 18 },
6955 /* 6519 */ { MAD_F(0x076ece82) /* 0.464552412 */, 18 },
6956 /* 6520 */ { MAD_F(0x076f3224) /* 0.464647430 */, 18 },
6957 /* 6521 */ { MAD_F(0x076f95c8) /* 0.464742452 */, 18 },
6958 /* 6522 */ { MAD_F(0x076ff96c) /* 0.464837479 */, 18 },
6959 /* 6523 */ { MAD_F(0x07705d12) /* 0.464932511 */, 18 },
6960 /* 6524 */ { MAD_F(0x0770c0ba) /* 0.465027548 */, 18 },
6961 /* 6525 */ { MAD_F(0x07712462) /* 0.465122590 */, 18 },
6962 /* 6526 */ { MAD_F(0x0771880c) /* 0.465217637 */, 18 },
6963 /* 6527 */ { MAD_F(0x0771ebb7) /* 0.465312688 */, 18 },
6964
6965 /* 6528 */ { MAD_F(0x07724f64) /* 0.465407744 */, 18 },
6966 /* 6529 */ { MAD_F(0x0772b312) /* 0.465502806 */, 18 },
6967 /* 6530 */ { MAD_F(0x077316c1) /* 0.465597872 */, 18 },
6968 /* 6531 */ { MAD_F(0x07737a71) /* 0.465692943 */, 18 },
6969 /* 6532 */ { MAD_F(0x0773de23) /* 0.465788018 */, 18 },
6970 /* 6533 */ { MAD_F(0x077441d6) /* 0.465883099 */, 18 },
6971 /* 6534 */ { MAD_F(0x0774a58a) /* 0.465978184 */, 18 },
6972 /* 6535 */ { MAD_F(0x07750940) /* 0.466073275 */, 18 },
6973 /* 6536 */ { MAD_F(0x07756cf7) /* 0.466168370 */, 18 },
6974 /* 6537 */ { MAD_F(0x0775d0af) /* 0.466263470 */, 18 },
6975 /* 6538 */ { MAD_F(0x07763468) /* 0.466358575 */, 18 },
6976 /* 6539 */ { MAD_F(0x07769823) /* 0.466453684 */, 18 },
6977 /* 6540 */ { MAD_F(0x0776fbdf) /* 0.466548799 */, 18 },
6978 /* 6541 */ { MAD_F(0x07775f9d) /* 0.466643918 */, 18 },
6979 /* 6542 */ { MAD_F(0x0777c35c) /* 0.466739043 */, 18 },
6980 /* 6543 */ { MAD_F(0x0778271c) /* 0.466834172 */, 18 },
6981
6982 /* 6544 */ { MAD_F(0x07788add) /* 0.466929306 */, 18 },
6983 /* 6545 */ { MAD_F(0x0778ee9f) /* 0.467024445 */, 18 },
6984 /* 6546 */ { MAD_F(0x07795263) /* 0.467119588 */, 18 },
6985 /* 6547 */ { MAD_F(0x0779b629) /* 0.467214737 */, 18 },
6986 /* 6548 */ { MAD_F(0x077a19ef) /* 0.467309890 */, 18 },
6987 /* 6549 */ { MAD_F(0x077a7db7) /* 0.467405048 */, 18 },
6988 /* 6550 */ { MAD_F(0x077ae180) /* 0.467500211 */, 18 },
6989 /* 6551 */ { MAD_F(0x077b454b) /* 0.467595379 */, 18 },
6990 /* 6552 */ { MAD_F(0x077ba916) /* 0.467690552 */, 18 },
6991 /* 6553 */ { MAD_F(0x077c0ce3) /* 0.467785729 */, 18 },
6992 /* 6554 */ { MAD_F(0x077c70b2) /* 0.467880912 */, 18 },
6993 /* 6555 */ { MAD_F(0x077cd481) /* 0.467976099 */, 18 },
6994 /* 6556 */ { MAD_F(0x077d3852) /* 0.468071291 */, 18 },
6995 /* 6557 */ { MAD_F(0x077d9c24) /* 0.468166488 */, 18 },
6996 /* 6558 */ { MAD_F(0x077dfff8) /* 0.468261690 */, 18 },
6997 /* 6559 */ { MAD_F(0x077e63cd) /* 0.468356896 */, 18 },
6998
6999 /* 6560 */ { MAD_F(0x077ec7a3) /* 0.468452108 */, 18 },
7000 /* 6561 */ { MAD_F(0x077f2b7a) /* 0.468547324 */, 18 },
7001 /* 6562 */ { MAD_F(0x077f8f53) /* 0.468642545 */, 18 },
7002 /* 6563 */ { MAD_F(0x077ff32d) /* 0.468737771 */, 18 },
7003 /* 6564 */ { MAD_F(0x07805708) /* 0.468833002 */, 18 },
7004 /* 6565 */ { MAD_F(0x0780bae5) /* 0.468928237 */, 18 },
7005 /* 6566 */ { MAD_F(0x07811ec3) /* 0.469023478 */, 18 },
7006 /* 6567 */ { MAD_F(0x078182a2) /* 0.469118723 */, 18 },
7007 /* 6568 */ { MAD_F(0x0781e683) /* 0.469213973 */, 18 },
7008 /* 6569 */ { MAD_F(0x07824a64) /* 0.469309228 */, 18 },
7009 /* 6570 */ { MAD_F(0x0782ae47) /* 0.469404488 */, 18 },
7010 /* 6571 */ { MAD_F(0x0783122c) /* 0.469499752 */, 18 },
7011 /* 6572 */ { MAD_F(0x07837612) /* 0.469595022 */, 18 },
7012 /* 6573 */ { MAD_F(0x0783d9f9) /* 0.469690296 */, 18 },
7013 /* 6574 */ { MAD_F(0x07843de1) /* 0.469785575 */, 18 },
7014 /* 6575 */ { MAD_F(0x0784a1ca) /* 0.469880859 */, 18 },
7015
7016 /* 6576 */ { MAD_F(0x078505b5) /* 0.469976148 */, 18 },
7017 /* 6577 */ { MAD_F(0x078569a2) /* 0.470071442 */, 18 },
7018 /* 6578 */ { MAD_F(0x0785cd8f) /* 0.470166740 */, 18 },
7019 /* 6579 */ { MAD_F(0x0786317e) /* 0.470262043 */, 18 },
7020 /* 6580 */ { MAD_F(0x0786956e) /* 0.470357351 */, 18 },
7021 /* 6581 */ { MAD_F(0x0786f95f) /* 0.470452664 */, 18 },
7022 /* 6582 */ { MAD_F(0x07875d52) /* 0.470547982 */, 18 },
7023 /* 6583 */ { MAD_F(0x0787c146) /* 0.470643305 */, 18 },
7024 /* 6584 */ { MAD_F(0x0788253b) /* 0.470738632 */, 18 },
7025 /* 6585 */ { MAD_F(0x07888932) /* 0.470833964 */, 18 },
7026 /* 6586 */ { MAD_F(0x0788ed2a) /* 0.470929301 */, 18 },
7027 /* 6587 */ { MAD_F(0x07895123) /* 0.471024643 */, 18 },
7028 /* 6588 */ { MAD_F(0x0789b51d) /* 0.471119990 */, 18 },
7029 /* 6589 */ { MAD_F(0x078a1919) /* 0.471215341 */, 18 },
7030 /* 6590 */ { MAD_F(0x078a7d16) /* 0.471310698 */, 18 },
7031 /* 6591 */ { MAD_F(0x078ae114) /* 0.471406059 */, 18 },
7032
7033 /* 6592 */ { MAD_F(0x078b4514) /* 0.471501425 */, 18 },
7034 /* 6593 */ { MAD_F(0x078ba915) /* 0.471596796 */, 18 },
7035 /* 6594 */ { MAD_F(0x078c0d17) /* 0.471692171 */, 18 },
7036 /* 6595 */ { MAD_F(0x078c711a) /* 0.471787552 */, 18 },
7037 /* 6596 */ { MAD_F(0x078cd51f) /* 0.471882937 */, 18 },
7038 /* 6597 */ { MAD_F(0x078d3925) /* 0.471978327 */, 18 },
7039 /* 6598 */ { MAD_F(0x078d9d2d) /* 0.472073722 */, 18 },
7040 /* 6599 */ { MAD_F(0x078e0135) /* 0.472169122 */, 18 },
7041 /* 6600 */ { MAD_F(0x078e653f) /* 0.472264527 */, 18 },
7042 /* 6601 */ { MAD_F(0x078ec94b) /* 0.472359936 */, 18 },
7043 /* 6602 */ { MAD_F(0x078f2d57) /* 0.472455350 */, 18 },
7044 /* 6603 */ { MAD_F(0x078f9165) /* 0.472550769 */, 18 },
7045 /* 6604 */ { MAD_F(0x078ff574) /* 0.472646193 */, 18 },
7046 /* 6605 */ { MAD_F(0x07905985) /* 0.472741622 */, 18 },
7047 /* 6606 */ { MAD_F(0x0790bd96) /* 0.472837055 */, 18 },
7048 /* 6607 */ { MAD_F(0x079121a9) /* 0.472932493 */, 18 },
7049
7050 /* 6608 */ { MAD_F(0x079185be) /* 0.473027937 */, 18 },
7051 /* 6609 */ { MAD_F(0x0791e9d3) /* 0.473123384 */, 18 },
7052 /* 6610 */ { MAD_F(0x07924dea) /* 0.473218837 */, 18 },
7053 /* 6611 */ { MAD_F(0x0792b202) /* 0.473314295 */, 18 },
7054 /* 6612 */ { MAD_F(0x0793161c) /* 0.473409757 */, 18 },
7055 /* 6613 */ { MAD_F(0x07937a37) /* 0.473505224 */, 18 },
7056 /* 6614 */ { MAD_F(0x0793de53) /* 0.473600696 */, 18 },
7057 /* 6615 */ { MAD_F(0x07944270) /* 0.473696173 */, 18 },
7058 /* 6616 */ { MAD_F(0x0794a68f) /* 0.473791655 */, 18 },
7059 /* 6617 */ { MAD_F(0x07950aaf) /* 0.473887141 */, 18 },
7060 /* 6618 */ { MAD_F(0x07956ed0) /* 0.473982632 */, 18 },
7061 /* 6619 */ { MAD_F(0x0795d2f2) /* 0.474078128 */, 18 },
7062 /* 6620 */ { MAD_F(0x07963716) /* 0.474173629 */, 18 },
7063 /* 6621 */ { MAD_F(0x07969b3b) /* 0.474269135 */, 18 },
7064 /* 6622 */ { MAD_F(0x0796ff62) /* 0.474364645 */, 18 },
7065 /* 6623 */ { MAD_F(0x07976389) /* 0.474460161 */, 18 },
7066
7067 /* 6624 */ { MAD_F(0x0797c7b2) /* 0.474555681 */, 18 },
7068 /* 6625 */ { MAD_F(0x07982bdd) /* 0.474651205 */, 18 },
7069 /* 6626 */ { MAD_F(0x07989008) /* 0.474746735 */, 18 },
7070 /* 6627 */ { MAD_F(0x0798f435) /* 0.474842270 */, 18 },
7071 /* 6628 */ { MAD_F(0x07995863) /* 0.474937809 */, 18 },
7072 /* 6629 */ { MAD_F(0x0799bc92) /* 0.475033353 */, 18 },
7073 /* 6630 */ { MAD_F(0x079a20c3) /* 0.475128902 */, 18 },
7074 /* 6631 */ { MAD_F(0x079a84f5) /* 0.475224456 */, 18 },
7075 /* 6632 */ { MAD_F(0x079ae929) /* 0.475320014 */, 18 },
7076 /* 6633 */ { MAD_F(0x079b4d5d) /* 0.475415578 */, 18 },
7077 /* 6634 */ { MAD_F(0x079bb193) /* 0.475511146 */, 18 },
7078 /* 6635 */ { MAD_F(0x079c15ca) /* 0.475606719 */, 18 },
7079 /* 6636 */ { MAD_F(0x079c7a03) /* 0.475702296 */, 18 },
7080 /* 6637 */ { MAD_F(0x079cde3c) /* 0.475797879 */, 18 },
7081 /* 6638 */ { MAD_F(0x079d4277) /* 0.475893466 */, 18 },
7082 /* 6639 */ { MAD_F(0x079da6b4) /* 0.475989058 */, 18 },
7083
7084 /* 6640 */ { MAD_F(0x079e0af1) /* 0.476084655 */, 18 },
7085 /* 6641 */ { MAD_F(0x079e6f30) /* 0.476180257 */, 18 },
7086 /* 6642 */ { MAD_F(0x079ed370) /* 0.476275863 */, 18 },
7087 /* 6643 */ { MAD_F(0x079f37b2) /* 0.476371475 */, 18 },
7088 /* 6644 */ { MAD_F(0x079f9bf5) /* 0.476467091 */, 18 },
7089 /* 6645 */ { MAD_F(0x07a00039) /* 0.476562712 */, 18 },
7090 /* 6646 */ { MAD_F(0x07a0647e) /* 0.476658338 */, 18 },
7091 /* 6647 */ { MAD_F(0x07a0c8c5) /* 0.476753968 */, 18 },
7092 /* 6648 */ { MAD_F(0x07a12d0c) /* 0.476849603 */, 18 },
7093 /* 6649 */ { MAD_F(0x07a19156) /* 0.476945243 */, 18 },
7094 /* 6650 */ { MAD_F(0x07a1f5a0) /* 0.477040888 */, 18 },
7095 /* 6651 */ { MAD_F(0x07a259ec) /* 0.477136538 */, 18 },
7096 /* 6652 */ { MAD_F(0x07a2be39) /* 0.477232193 */, 18 },
7097 /* 6653 */ { MAD_F(0x07a32287) /* 0.477327852 */, 18 },
7098 /* 6654 */ { MAD_F(0x07a386d7) /* 0.477423516 */, 18 },
7099 /* 6655 */ { MAD_F(0x07a3eb28) /* 0.477519185 */, 18 },
7100
7101 /* 6656 */ { MAD_F(0x07a44f7a) /* 0.477614858 */, 18 },
7102 /* 6657 */ { MAD_F(0x07a4b3ce) /* 0.477710537 */, 18 },
7103 /* 6658 */ { MAD_F(0x07a51822) /* 0.477806220 */, 18 },
7104 /* 6659 */ { MAD_F(0x07a57c78) /* 0.477901908 */, 18 },
7105 /* 6660 */ { MAD_F(0x07a5e0d0) /* 0.477997601 */, 18 },
7106 /* 6661 */ { MAD_F(0x07a64528) /* 0.478093299 */, 18 },
7107 /* 6662 */ { MAD_F(0x07a6a982) /* 0.478189001 */, 18 },
7108 /* 6663 */ { MAD_F(0x07a70ddd) /* 0.478284708 */, 18 },
7109 /* 6664 */ { MAD_F(0x07a7723a) /* 0.478380420 */, 18 },
7110 /* 6665 */ { MAD_F(0x07a7d698) /* 0.478476137 */, 18 },
7111 /* 6666 */ { MAD_F(0x07a83af7) /* 0.478571858 */, 18 },
7112 /* 6667 */ { MAD_F(0x07a89f57) /* 0.478667585 */, 18 },
7113 /* 6668 */ { MAD_F(0x07a903b9) /* 0.478763316 */, 18 },
7114 /* 6669 */ { MAD_F(0x07a9681c) /* 0.478859052 */, 18 },
7115 /* 6670 */ { MAD_F(0x07a9cc80) /* 0.478954793 */, 18 },
7116 /* 6671 */ { MAD_F(0x07aa30e5) /* 0.479050538 */, 18 },
7117
7118 /* 6672 */ { MAD_F(0x07aa954c) /* 0.479146288 */, 18 },
7119 /* 6673 */ { MAD_F(0x07aaf9b4) /* 0.479242043 */, 18 },
7120 /* 6674 */ { MAD_F(0x07ab5e1e) /* 0.479337803 */, 18 },
7121 /* 6675 */ { MAD_F(0x07abc288) /* 0.479433568 */, 18 },
7122 /* 6676 */ { MAD_F(0x07ac26f4) /* 0.479529337 */, 18 },
7123 /* 6677 */ { MAD_F(0x07ac8b61) /* 0.479625111 */, 18 },
7124 /* 6678 */ { MAD_F(0x07acefd0) /* 0.479720890 */, 18 },
7125 /* 6679 */ { MAD_F(0x07ad543f) /* 0.479816674 */, 18 },
7126 /* 6680 */ { MAD_F(0x07adb8b0) /* 0.479912463 */, 18 },
7127 /* 6681 */ { MAD_F(0x07ae1d23) /* 0.480008256 */, 18 },
7128 /* 6682 */ { MAD_F(0x07ae8196) /* 0.480104054 */, 18 },
7129 /* 6683 */ { MAD_F(0x07aee60b) /* 0.480199857 */, 18 },
7130 /* 6684 */ { MAD_F(0x07af4a81) /* 0.480295664 */, 18 },
7131 /* 6685 */ { MAD_F(0x07afaef9) /* 0.480391477 */, 18 },
7132 /* 6686 */ { MAD_F(0x07b01372) /* 0.480487294 */, 18 },
7133 /* 6687 */ { MAD_F(0x07b077ec) /* 0.480583116 */, 18 },
7134
7135 /* 6688 */ { MAD_F(0x07b0dc67) /* 0.480678943 */, 18 },
7136 /* 6689 */ { MAD_F(0x07b140e4) /* 0.480774774 */, 18 },
7137 /* 6690 */ { MAD_F(0x07b1a561) /* 0.480870611 */, 18 },
7138 /* 6691 */ { MAD_F(0x07b209e1) /* 0.480966452 */, 18 },
7139 /* 6692 */ { MAD_F(0x07b26e61) /* 0.481062298 */, 18 },
7140 /* 6693 */ { MAD_F(0x07b2d2e3) /* 0.481158148 */, 18 },
7141 /* 6694 */ { MAD_F(0x07b33766) /* 0.481254004 */, 18 },
7142 /* 6695 */ { MAD_F(0x07b39bea) /* 0.481349864 */, 18 },
7143 /* 6696 */ { MAD_F(0x07b4006f) /* 0.481445729 */, 18 },
7144 /* 6697 */ { MAD_F(0x07b464f6) /* 0.481541598 */, 18 },
7145 /* 6698 */ { MAD_F(0x07b4c97e) /* 0.481637473 */, 18 },
7146 /* 6699 */ { MAD_F(0x07b52e08) /* 0.481733352 */, 18 },
7147 /* 6700 */ { MAD_F(0x07b59292) /* 0.481829236 */, 18 },
7148 /* 6701 */ { MAD_F(0x07b5f71e) /* 0.481925125 */, 18 },
7149 /* 6702 */ { MAD_F(0x07b65bac) /* 0.482021019 */, 18 },
7150 /* 6703 */ { MAD_F(0x07b6c03a) /* 0.482116917 */, 18 },
7151
7152 /* 6704 */ { MAD_F(0x07b724ca) /* 0.482212820 */, 18 },
7153 /* 6705 */ { MAD_F(0x07b7895b) /* 0.482308728 */, 18 },
7154 /* 6706 */ { MAD_F(0x07b7eded) /* 0.482404640 */, 18 },
7155 /* 6707 */ { MAD_F(0x07b85281) /* 0.482500558 */, 18 },
7156 /* 6708 */ { MAD_F(0x07b8b716) /* 0.482596480 */, 18 },
7157 /* 6709 */ { MAD_F(0x07b91bac) /* 0.482692407 */, 18 },
7158 /* 6710 */ { MAD_F(0x07b98044) /* 0.482788339 */, 18 },
7159 /* 6711 */ { MAD_F(0x07b9e4dc) /* 0.482884275 */, 18 },
7160 /* 6712 */ { MAD_F(0x07ba4976) /* 0.482980216 */, 18 },
7161 /* 6713 */ { MAD_F(0x07baae12) /* 0.483076162 */, 18 },
7162 /* 6714 */ { MAD_F(0x07bb12ae) /* 0.483172113 */, 18 },
7163 /* 6715 */ { MAD_F(0x07bb774c) /* 0.483268069 */, 18 },
7164 /* 6716 */ { MAD_F(0x07bbdbeb) /* 0.483364029 */, 18 },
7165 /* 6717 */ { MAD_F(0x07bc408c) /* 0.483459994 */, 18 },
7166 /* 6718 */ { MAD_F(0x07bca52d) /* 0.483555964 */, 18 },
7167 /* 6719 */ { MAD_F(0x07bd09d0) /* 0.483651939 */, 18 },
7168
7169 /* 6720 */ { MAD_F(0x07bd6e75) /* 0.483747918 */, 18 },
7170 /* 6721 */ { MAD_F(0x07bdd31a) /* 0.483843902 */, 18 },
7171 /* 6722 */ { MAD_F(0x07be37c1) /* 0.483939891 */, 18 },
7172 /* 6723 */ { MAD_F(0x07be9c69) /* 0.484035885 */, 18 },
7173 /* 6724 */ { MAD_F(0x07bf0113) /* 0.484131883 */, 18 },
7174 /* 6725 */ { MAD_F(0x07bf65bd) /* 0.484227886 */, 18 },
7175 /* 6726 */ { MAD_F(0x07bfca69) /* 0.484323894 */, 18 },
7176 /* 6727 */ { MAD_F(0x07c02f16) /* 0.484419907 */, 18 },
7177 /* 6728 */ { MAD_F(0x07c093c5) /* 0.484515924 */, 18 },
7178 /* 6729 */ { MAD_F(0x07c0f875) /* 0.484611946 */, 18 },
7179 /* 6730 */ { MAD_F(0x07c15d26) /* 0.484707973 */, 18 },
7180 /* 6731 */ { MAD_F(0x07c1c1d8) /* 0.484804005 */, 18 },
7181 /* 6732 */ { MAD_F(0x07c2268b) /* 0.484900041 */, 18 },
7182 /* 6733 */ { MAD_F(0x07c28b40) /* 0.484996083 */, 18 },
7183 /* 6734 */ { MAD_F(0x07c2eff6) /* 0.485092128 */, 18 },
7184 /* 6735 */ { MAD_F(0x07c354ae) /* 0.485188179 */, 18 },
7185
7186 /* 6736 */ { MAD_F(0x07c3b967) /* 0.485284235 */, 18 },
7187 /* 6737 */ { MAD_F(0x07c41e21) /* 0.485380295 */, 18 },
7188 /* 6738 */ { MAD_F(0x07c482dc) /* 0.485476360 */, 18 },
7189 /* 6739 */ { MAD_F(0x07c4e798) /* 0.485572430 */, 18 },
7190 /* 6740 */ { MAD_F(0x07c54c56) /* 0.485668504 */, 18 },
7191 /* 6741 */ { MAD_F(0x07c5b115) /* 0.485764583 */, 18 },
7192 /* 6742 */ { MAD_F(0x07c615d6) /* 0.485860667 */, 18 },
7193 /* 6743 */ { MAD_F(0x07c67a97) /* 0.485956756 */, 18 },
7194 /* 6744 */ { MAD_F(0x07c6df5a) /* 0.486052849 */, 18 },
7195 /* 6745 */ { MAD_F(0x07c7441e) /* 0.486148948 */, 18 },
7196 /* 6746 */ { MAD_F(0x07c7a8e4) /* 0.486245051 */, 18 },
7197 /* 6747 */ { MAD_F(0x07c80daa) /* 0.486341158 */, 18 },
7198 /* 6748 */ { MAD_F(0x07c87272) /* 0.486437271 */, 18 },
7199 /* 6749 */ { MAD_F(0x07c8d73c) /* 0.486533388 */, 18 },
7200 /* 6750 */ { MAD_F(0x07c93c06) /* 0.486629510 */, 18 },
7201 /* 6751 */ { MAD_F(0x07c9a0d2) /* 0.486725637 */, 18 },
7202
7203 /* 6752 */ { MAD_F(0x07ca059f) /* 0.486821768 */, 18 },
7204 /* 6753 */ { MAD_F(0x07ca6a6d) /* 0.486917905 */, 18 },
7205 /* 6754 */ { MAD_F(0x07cacf3d) /* 0.487014045 */, 18 },
7206 /* 6755 */ { MAD_F(0x07cb340e) /* 0.487110191 */, 18 },
7207 /* 6756 */ { MAD_F(0x07cb98e0) /* 0.487206342 */, 18 },
7208 /* 6757 */ { MAD_F(0x07cbfdb4) /* 0.487302497 */, 18 },
7209 /* 6758 */ { MAD_F(0x07cc6288) /* 0.487398657 */, 18 },
7210 /* 6759 */ { MAD_F(0x07ccc75e) /* 0.487494821 */, 18 },
7211 /* 6760 */ { MAD_F(0x07cd2c36) /* 0.487590991 */, 18 },
7212 /* 6761 */ { MAD_F(0x07cd910e) /* 0.487687165 */, 18 },
7213 /* 6762 */ { MAD_F(0x07cdf5e8) /* 0.487783344 */, 18 },
7214 /* 6763 */ { MAD_F(0x07ce5ac3) /* 0.487879528 */, 18 },
7215 /* 6764 */ { MAD_F(0x07cebfa0) /* 0.487975716 */, 18 },
7216 /* 6765 */ { MAD_F(0x07cf247d) /* 0.488071909 */, 18 },
7217 /* 6766 */ { MAD_F(0x07cf895c) /* 0.488168107 */, 18 },
7218 /* 6767 */ { MAD_F(0x07cfee3c) /* 0.488264310 */, 18 },
7219
7220 /* 6768 */ { MAD_F(0x07d0531e) /* 0.488360517 */, 18 },
7221 /* 6769 */ { MAD_F(0x07d0b801) /* 0.488456729 */, 18 },
7222 /* 6770 */ { MAD_F(0x07d11ce5) /* 0.488552946 */, 18 },
7223 /* 6771 */ { MAD_F(0x07d181ca) /* 0.488649167 */, 18 },
7224 /* 6772 */ { MAD_F(0x07d1e6b0) /* 0.488745394 */, 18 },
7225 /* 6773 */ { MAD_F(0x07d24b98) /* 0.488841625 */, 18 },
7226 /* 6774 */ { MAD_F(0x07d2b081) /* 0.488937860 */, 18 },
7227 /* 6775 */ { MAD_F(0x07d3156c) /* 0.489034101 */, 18 },
7228 /* 6776 */ { MAD_F(0x07d37a57) /* 0.489130346 */, 18 },
7229 /* 6777 */ { MAD_F(0x07d3df44) /* 0.489226596 */, 18 },
7230 /* 6778 */ { MAD_F(0x07d44432) /* 0.489322851 */, 18 },
7231 /* 6779 */ { MAD_F(0x07d4a922) /* 0.489419110 */, 18 },
7232 /* 6780 */ { MAD_F(0x07d50e13) /* 0.489515375 */, 18 },
7233 /* 6781 */ { MAD_F(0x07d57305) /* 0.489611643 */, 18 },
7234 /* 6782 */ { MAD_F(0x07d5d7f8) /* 0.489707917 */, 18 },
7235 /* 6783 */ { MAD_F(0x07d63cec) /* 0.489804195 */, 18 },
7236
7237 /* 6784 */ { MAD_F(0x07d6a1e2) /* 0.489900479 */, 18 },
7238 /* 6785 */ { MAD_F(0x07d706d9) /* 0.489996766 */, 18 },
7239 /* 6786 */ { MAD_F(0x07d76bd2) /* 0.490093059 */, 18 },
7240 /* 6787 */ { MAD_F(0x07d7d0cb) /* 0.490189356 */, 18 },
7241 /* 6788 */ { MAD_F(0x07d835c6) /* 0.490285658 */, 18 },
7242 /* 6789 */ { MAD_F(0x07d89ac2) /* 0.490381965 */, 18 },
7243 /* 6790 */ { MAD_F(0x07d8ffc0) /* 0.490478277 */, 18 },
7244 /* 6791 */ { MAD_F(0x07d964be) /* 0.490574593 */, 18 },
7245 /* 6792 */ { MAD_F(0x07d9c9be) /* 0.490670914 */, 18 },
7246 /* 6793 */ { MAD_F(0x07da2ebf) /* 0.490767239 */, 18 },
7247 /* 6794 */ { MAD_F(0x07da93c2) /* 0.490863570 */, 18 },
7248 /* 6795 */ { MAD_F(0x07daf8c6) /* 0.490959905 */, 18 },
7249 /* 6796 */ { MAD_F(0x07db5dcb) /* 0.491056245 */, 18 },
7250 /* 6797 */ { MAD_F(0x07dbc2d1) /* 0.491152589 */, 18 },
7251 /* 6798 */ { MAD_F(0x07dc27d9) /* 0.491248939 */, 18 },
7252 /* 6799 */ { MAD_F(0x07dc8ce1) /* 0.491345293 */, 18 },
7253
7254 /* 6800 */ { MAD_F(0x07dcf1ec) /* 0.491441651 */, 18 },
7255 /* 6801 */ { MAD_F(0x07dd56f7) /* 0.491538015 */, 18 },
7256 /* 6802 */ { MAD_F(0x07ddbc04) /* 0.491634383 */, 18 },
7257 /* 6803 */ { MAD_F(0x07de2111) /* 0.491730756 */, 18 },
7258 /* 6804 */ { MAD_F(0x07de8621) /* 0.491827134 */, 18 },
7259 /* 6805 */ { MAD_F(0x07deeb31) /* 0.491923516 */, 18 },
7260 /* 6806 */ { MAD_F(0x07df5043) /* 0.492019903 */, 18 },
7261 /* 6807 */ { MAD_F(0x07dfb556) /* 0.492116295 */, 18 },
7262 /* 6808 */ { MAD_F(0x07e01a6a) /* 0.492212691 */, 18 },
7263 /* 6809 */ { MAD_F(0x07e07f80) /* 0.492309093 */, 18 },
7264 /* 6810 */ { MAD_F(0x07e0e496) /* 0.492405499 */, 18 },
7265 /* 6811 */ { MAD_F(0x07e149ae) /* 0.492501909 */, 18 },
7266 /* 6812 */ { MAD_F(0x07e1aec8) /* 0.492598325 */, 18 },
7267 /* 6813 */ { MAD_F(0x07e213e2) /* 0.492694745 */, 18 },
7268 /* 6814 */ { MAD_F(0x07e278fe) /* 0.492791170 */, 18 },
7269 /* 6815 */ { MAD_F(0x07e2de1b) /* 0.492887599 */, 18 },
7270
7271 /* 6816 */ { MAD_F(0x07e3433a) /* 0.492984033 */, 18 },
7272 /* 6817 */ { MAD_F(0x07e3a859) /* 0.493080472 */, 18 },
7273 /* 6818 */ { MAD_F(0x07e40d7a) /* 0.493176916 */, 18 },
7274 /* 6819 */ { MAD_F(0x07e4729c) /* 0.493273365 */, 18 },
7275 /* 6820 */ { MAD_F(0x07e4d7c0) /* 0.493369818 */, 18 },
7276 /* 6821 */ { MAD_F(0x07e53ce4) /* 0.493466275 */, 18 },
7277 /* 6822 */ { MAD_F(0x07e5a20a) /* 0.493562738 */, 18 },
7278 /* 6823 */ { MAD_F(0x07e60732) /* 0.493659205 */, 18 },
7279 /* 6824 */ { MAD_F(0x07e66c5a) /* 0.493755677 */, 18 },
7280 /* 6825 */ { MAD_F(0x07e6d184) /* 0.493852154 */, 18 },
7281 /* 6826 */ { MAD_F(0x07e736af) /* 0.493948635 */, 18 },
7282 /* 6827 */ { MAD_F(0x07e79bdb) /* 0.494045122 */, 18 },
7283 /* 6828 */ { MAD_F(0x07e80109) /* 0.494141612 */, 18 },
7284 /* 6829 */ { MAD_F(0x07e86638) /* 0.494238108 */, 18 },
7285 /* 6830 */ { MAD_F(0x07e8cb68) /* 0.494334608 */, 18 },
7286 /* 6831 */ { MAD_F(0x07e93099) /* 0.494431113 */, 18 },
7287
7288 /* 6832 */ { MAD_F(0x07e995cc) /* 0.494527623 */, 18 },
7289 /* 6833 */ { MAD_F(0x07e9fb00) /* 0.494624137 */, 18 },
7290 /* 6834 */ { MAD_F(0x07ea6035) /* 0.494720656 */, 18 },
7291 /* 6835 */ { MAD_F(0x07eac56b) /* 0.494817180 */, 18 },
7292 /* 6836 */ { MAD_F(0x07eb2aa3) /* 0.494913709 */, 18 },
7293 /* 6837 */ { MAD_F(0x07eb8fdc) /* 0.495010242 */, 18 },
7294 /* 6838 */ { MAD_F(0x07ebf516) /* 0.495106780 */, 18 },
7295 /* 6839 */ { MAD_F(0x07ec5a51) /* 0.495203322 */, 18 },
7296 /* 6840 */ { MAD_F(0x07ecbf8e) /* 0.495299870 */, 18 },
7297 /* 6841 */ { MAD_F(0x07ed24cc) /* 0.495396422 */, 18 },
7298 /* 6842 */ { MAD_F(0x07ed8a0b) /* 0.495492978 */, 18 },
7299 /* 6843 */ { MAD_F(0x07edef4c) /* 0.495589540 */, 18 },
7300 /* 6844 */ { MAD_F(0x07ee548e) /* 0.495686106 */, 18 },
7301 /* 6845 */ { MAD_F(0x07eeb9d1) /* 0.495782677 */, 18 },
7302 /* 6846 */ { MAD_F(0x07ef1f15) /* 0.495879252 */, 18 },
7303 /* 6847 */ { MAD_F(0x07ef845b) /* 0.495975833 */, 18 },
7304
7305 /* 6848 */ { MAD_F(0x07efe9a1) /* 0.496072418 */, 18 },
7306 /* 6849 */ { MAD_F(0x07f04ee9) /* 0.496169007 */, 18 },
7307 /* 6850 */ { MAD_F(0x07f0b433) /* 0.496265602 */, 18 },
7308 /* 6851 */ { MAD_F(0x07f1197d) /* 0.496362201 */, 18 },
7309 /* 6852 */ { MAD_F(0x07f17ec9) /* 0.496458804 */, 18 },
7310 /* 6853 */ { MAD_F(0x07f1e416) /* 0.496555413 */, 18 },
7311 /* 6854 */ { MAD_F(0x07f24965) /* 0.496652026 */, 18 },
7312 /* 6855 */ { MAD_F(0x07f2aeb5) /* 0.496748644 */, 18 },
7313 /* 6856 */ { MAD_F(0x07f31405) /* 0.496845266 */, 18 },
7314 /* 6857 */ { MAD_F(0x07f37958) /* 0.496941894 */, 18 },
7315 /* 6858 */ { MAD_F(0x07f3deab) /* 0.497038526 */, 18 },
7316 /* 6859 */ { MAD_F(0x07f44400) /* 0.497135162 */, 18 },
7317 /* 6860 */ { MAD_F(0x07f4a956) /* 0.497231804 */, 18 },
7318 /* 6861 */ { MAD_F(0x07f50ead) /* 0.497328450 */, 18 },
7319 /* 6862 */ { MAD_F(0x07f57405) /* 0.497425100 */, 18 },
7320 /* 6863 */ { MAD_F(0x07f5d95f) /* 0.497521756 */, 18 },
7321
7322 /* 6864 */ { MAD_F(0x07f63eba) /* 0.497618416 */, 18 },
7323 /* 6865 */ { MAD_F(0x07f6a416) /* 0.497715081 */, 18 },
7324 /* 6866 */ { MAD_F(0x07f70974) /* 0.497811750 */, 18 },
7325 /* 6867 */ { MAD_F(0x07f76ed3) /* 0.497908425 */, 18 },
7326 /* 6868 */ { MAD_F(0x07f7d433) /* 0.498005103 */, 18 },
7327 /* 6869 */ { MAD_F(0x07f83994) /* 0.498101787 */, 18 },
7328 /* 6870 */ { MAD_F(0x07f89ef7) /* 0.498198475 */, 18 },
7329 /* 6871 */ { MAD_F(0x07f9045a) /* 0.498295168 */, 18 },
7330 /* 6872 */ { MAD_F(0x07f969c0) /* 0.498391866 */, 18 },
7331 /* 6873 */ { MAD_F(0x07f9cf26) /* 0.498488568 */, 18 },
7332 /* 6874 */ { MAD_F(0x07fa348e) /* 0.498585275 */, 18 },
7333 /* 6875 */ { MAD_F(0x07fa99f6) /* 0.498681987 */, 18 },
7334 /* 6876 */ { MAD_F(0x07faff60) /* 0.498778704 */, 18 },
7335 /* 6877 */ { MAD_F(0x07fb64cc) /* 0.498875425 */, 18 },
7336 /* 6878 */ { MAD_F(0x07fbca38) /* 0.498972150 */, 18 },
7337 /* 6879 */ { MAD_F(0x07fc2fa6) /* 0.499068881 */, 18 },
7338
7339 /* 6880 */ { MAD_F(0x07fc9516) /* 0.499165616 */, 18 },
7340 /* 6881 */ { MAD_F(0x07fcfa86) /* 0.499262356 */, 18 },
7341 /* 6882 */ { MAD_F(0x07fd5ff8) /* 0.499359101 */, 18 },
7342 /* 6883 */ { MAD_F(0x07fdc56b) /* 0.499455850 */, 18 },
7343 /* 6884 */ { MAD_F(0x07fe2adf) /* 0.499552604 */, 18 },
7344 /* 6885 */ { MAD_F(0x07fe9054) /* 0.499649362 */, 18 },
7345 /* 6886 */ { MAD_F(0x07fef5cb) /* 0.499746126 */, 18 },
7346 /* 6887 */ { MAD_F(0x07ff5b43) /* 0.499842894 */, 18 },
7347 /* 6888 */ { MAD_F(0x07ffc0bc) /* 0.499939666 */, 18 },
7348 /* 6889 */ { MAD_F(0x0400131b) /* 0.250018222 */, 19 },
7349 /* 6890 */ { MAD_F(0x040045d9) /* 0.250066613 */, 19 },
7350 /* 6891 */ { MAD_F(0x04007897) /* 0.250115006 */, 19 },
7351 /* 6892 */ { MAD_F(0x0400ab57) /* 0.250163402 */, 19 },
7352 /* 6893 */ { MAD_F(0x0400de16) /* 0.250211800 */, 19 },
7353 /* 6894 */ { MAD_F(0x040110d7) /* 0.250260200 */, 19 },
7354 /* 6895 */ { MAD_F(0x04014398) /* 0.250308603 */, 19 },
7355
7356 /* 6896 */ { MAD_F(0x04017659) /* 0.250357008 */, 19 },
7357 /* 6897 */ { MAD_F(0x0401a91c) /* 0.250405415 */, 19 },
7358 /* 6898 */ { MAD_F(0x0401dbdf) /* 0.250453825 */, 19 },
7359 /* 6899 */ { MAD_F(0x04020ea2) /* 0.250502237 */, 19 },
7360 /* 6900 */ { MAD_F(0x04024166) /* 0.250550652 */, 19 },
7361 /* 6901 */ { MAD_F(0x0402742b) /* 0.250599068 */, 19 },
7362 /* 6902 */ { MAD_F(0x0402a6f0) /* 0.250647488 */, 19 },
7363 /* 6903 */ { MAD_F(0x0402d9b6) /* 0.250695909 */, 19 },
7364 /* 6904 */ { MAD_F(0x04030c7d) /* 0.250744333 */, 19 },
7365 /* 6905 */ { MAD_F(0x04033f44) /* 0.250792759 */, 19 },
7366 /* 6906 */ { MAD_F(0x0403720c) /* 0.250841187 */, 19 },
7367 /* 6907 */ { MAD_F(0x0403a4d5) /* 0.250889618 */, 19 },
7368 /* 6908 */ { MAD_F(0x0403d79e) /* 0.250938051 */, 19 },
7369 /* 6909 */ { MAD_F(0x04040a68) /* 0.250986487 */, 19 },
7370 /* 6910 */ { MAD_F(0x04043d32) /* 0.251034924 */, 19 },
7371 /* 6911 */ { MAD_F(0x04046ffd) /* 0.251083365 */, 19 },
7372
7373 /* 6912 */ { MAD_F(0x0404a2c9) /* 0.251131807 */, 19 },
7374 /* 6913 */ { MAD_F(0x0404d595) /* 0.251180252 */, 19 },
7375 /* 6914 */ { MAD_F(0x04050862) /* 0.251228699 */, 19 },
7376 /* 6915 */ { MAD_F(0x04053b30) /* 0.251277148 */, 19 },
7377 /* 6916 */ { MAD_F(0x04056dfe) /* 0.251325600 */, 19 },
7378 /* 6917 */ { MAD_F(0x0405a0cd) /* 0.251374054 */, 19 },
7379 /* 6918 */ { MAD_F(0x0405d39c) /* 0.251422511 */, 19 },
7380 /* 6919 */ { MAD_F(0x0406066c) /* 0.251470970 */, 19 },
7381 /* 6920 */ { MAD_F(0x0406393d) /* 0.251519431 */, 19 },
7382 /* 6921 */ { MAD_F(0x04066c0e) /* 0.251567894 */, 19 },
7383 /* 6922 */ { MAD_F(0x04069ee0) /* 0.251616360 */, 19 },
7384 /* 6923 */ { MAD_F(0x0406d1b3) /* 0.251664828 */, 19 },
7385 /* 6924 */ { MAD_F(0x04070486) /* 0.251713299 */, 19 },
7386 /* 6925 */ { MAD_F(0x0407375a) /* 0.251761772 */, 19 },
7387 /* 6926 */ { MAD_F(0x04076a2e) /* 0.251810247 */, 19 },
7388 /* 6927 */ { MAD_F(0x04079d03) /* 0.251858724 */, 19 },
7389
7390 /* 6928 */ { MAD_F(0x0407cfd9) /* 0.251907204 */, 19 },
7391 /* 6929 */ { MAD_F(0x040802af) /* 0.251955686 */, 19 },
7392 /* 6930 */ { MAD_F(0x04083586) /* 0.252004171 */, 19 },
7393 /* 6931 */ { MAD_F(0x0408685e) /* 0.252052658 */, 19 },
7394 /* 6932 */ { MAD_F(0x04089b36) /* 0.252101147 */, 19 },
7395 /* 6933 */ { MAD_F(0x0408ce0f) /* 0.252149638 */, 19 },
7396 /* 6934 */ { MAD_F(0x040900e8) /* 0.252198132 */, 19 },
7397 /* 6935 */ { MAD_F(0x040933c2) /* 0.252246628 */, 19 },
7398 /* 6936 */ { MAD_F(0x0409669d) /* 0.252295127 */, 19 },
7399 /* 6937 */ { MAD_F(0x04099978) /* 0.252343627 */, 19 },
7400 /* 6938 */ { MAD_F(0x0409cc54) /* 0.252392131 */, 19 },
7401 /* 6939 */ { MAD_F(0x0409ff31) /* 0.252440636 */, 19 },
7402 /* 6940 */ { MAD_F(0x040a320e) /* 0.252489144 */, 19 },
7403 /* 6941 */ { MAD_F(0x040a64ec) /* 0.252537654 */, 19 },
7404 /* 6942 */ { MAD_F(0x040a97cb) /* 0.252586166 */, 19 },
7405 /* 6943 */ { MAD_F(0x040acaaa) /* 0.252634681 */, 19 },
7406
7407 /* 6944 */ { MAD_F(0x040afd89) /* 0.252683198 */, 19 },
7408 /* 6945 */ { MAD_F(0x040b306a) /* 0.252731718 */, 19 },
7409 /* 6946 */ { MAD_F(0x040b634b) /* 0.252780240 */, 19 },
7410 /* 6947 */ { MAD_F(0x040b962c) /* 0.252828764 */, 19 },
7411 /* 6948 */ { MAD_F(0x040bc90e) /* 0.252877290 */, 19 },
7412 /* 6949 */ { MAD_F(0x040bfbf1) /* 0.252925819 */, 19 },
7413 /* 6950 */ { MAD_F(0x040c2ed5) /* 0.252974350 */, 19 },
7414 /* 6951 */ { MAD_F(0x040c61b9) /* 0.253022883 */, 19 },
7415 /* 6952 */ { MAD_F(0x040c949e) /* 0.253071419 */, 19 },
7416 /* 6953 */ { MAD_F(0x040cc783) /* 0.253119957 */, 19 },
7417 /* 6954 */ { MAD_F(0x040cfa69) /* 0.253168498 */, 19 },
7418 /* 6955 */ { MAD_F(0x040d2d4f) /* 0.253217040 */, 19 },
7419 /* 6956 */ { MAD_F(0x040d6037) /* 0.253265585 */, 19 },
7420 /* 6957 */ { MAD_F(0x040d931e) /* 0.253314133 */, 19 },
7421 /* 6958 */ { MAD_F(0x040dc607) /* 0.253362682 */, 19 },
7422 /* 6959 */ { MAD_F(0x040df8f0) /* 0.253411234 */, 19 },
7423
7424 /* 6960 */ { MAD_F(0x040e2bda) /* 0.253459789 */, 19 },
7425 /* 6961 */ { MAD_F(0x040e5ec4) /* 0.253508345 */, 19 },
7426 /* 6962 */ { MAD_F(0x040e91af) /* 0.253556904 */, 19 },
7427 /* 6963 */ { MAD_F(0x040ec49b) /* 0.253605466 */, 19 },
7428 /* 6964 */ { MAD_F(0x040ef787) /* 0.253654029 */, 19 },
7429 /* 6965 */ { MAD_F(0x040f2a74) /* 0.253702595 */, 19 },
7430 /* 6966 */ { MAD_F(0x040f5d61) /* 0.253751164 */, 19 },
7431 /* 6967 */ { MAD_F(0x040f904f) /* 0.253799734 */, 19 },
7432 /* 6968 */ { MAD_F(0x040fc33e) /* 0.253848307 */, 19 },
7433 /* 6969 */ { MAD_F(0x040ff62d) /* 0.253896883 */, 19 },
7434 /* 6970 */ { MAD_F(0x0410291d) /* 0.253945460 */, 19 },
7435 /* 6971 */ { MAD_F(0x04105c0e) /* 0.253994040 */, 19 },
7436 /* 6972 */ { MAD_F(0x04108eff) /* 0.254042622 */, 19 },
7437 /* 6973 */ { MAD_F(0x0410c1f1) /* 0.254091207 */, 19 },
7438 /* 6974 */ { MAD_F(0x0410f4e3) /* 0.254139794 */, 19 },
7439 /* 6975 */ { MAD_F(0x041127d6) /* 0.254188383 */, 19 },
7440
7441 /* 6976 */ { MAD_F(0x04115aca) /* 0.254236974 */, 19 },
7442 /* 6977 */ { MAD_F(0x04118dbe) /* 0.254285568 */, 19 },
7443 /* 6978 */ { MAD_F(0x0411c0b3) /* 0.254334165 */, 19 },
7444 /* 6979 */ { MAD_F(0x0411f3a9) /* 0.254382763 */, 19 },
7445 /* 6980 */ { MAD_F(0x0412269f) /* 0.254431364 */, 19 },
7446 /* 6981 */ { MAD_F(0x04125996) /* 0.254479967 */, 19 },
7447 /* 6982 */ { MAD_F(0x04128c8d) /* 0.254528572 */, 19 },
7448 /* 6983 */ { MAD_F(0x0412bf85) /* 0.254577180 */, 19 },
7449 /* 6984 */ { MAD_F(0x0412f27e) /* 0.254625790 */, 19 },
7450 /* 6985 */ { MAD_F(0x04132577) /* 0.254674403 */, 19 },
7451 /* 6986 */ { MAD_F(0x04135871) /* 0.254723017 */, 19 },
7452 /* 6987 */ { MAD_F(0x04138b6c) /* 0.254771635 */, 19 },
7453 /* 6988 */ { MAD_F(0x0413be67) /* 0.254820254 */, 19 },
7454 /* 6989 */ { MAD_F(0x0413f163) /* 0.254868876 */, 19 },
7455 /* 6990 */ { MAD_F(0x0414245f) /* 0.254917500 */, 19 },
7456 /* 6991 */ { MAD_F(0x0414575c) /* 0.254966126 */, 19 },
7457
7458 /* 6992 */ { MAD_F(0x04148a5a) /* 0.255014755 */, 19 },
7459 /* 6993 */ { MAD_F(0x0414bd58) /* 0.255063386 */, 19 },
7460 /* 6994 */ { MAD_F(0x0414f057) /* 0.255112019 */, 19 },
7461 /* 6995 */ { MAD_F(0x04152356) /* 0.255160655 */, 19 },
7462 /* 6996 */ { MAD_F(0x04155657) /* 0.255209292 */, 19 },
7463 /* 6997 */ { MAD_F(0x04158957) /* 0.255257933 */, 19 },
7464 /* 6998 */ { MAD_F(0x0415bc59) /* 0.255306575 */, 19 },
7465 /* 6999 */ { MAD_F(0x0415ef5b) /* 0.255355220 */, 19 },
7466 /* 7000 */ { MAD_F(0x0416225d) /* 0.255403867 */, 19 },
7467 /* 7001 */ { MAD_F(0x04165561) /* 0.255452517 */, 19 },
7468 /* 7002 */ { MAD_F(0x04168864) /* 0.255501169 */, 19 },
7469 /* 7003 */ { MAD_F(0x0416bb69) /* 0.255549823 */, 19 },
7470 /* 7004 */ { MAD_F(0x0416ee6e) /* 0.255598479 */, 19 },
7471 /* 7005 */ { MAD_F(0x04172174) /* 0.255647138 */, 19 },
7472 /* 7006 */ { MAD_F(0x0417547a) /* 0.255695799 */, 19 },
7473 /* 7007 */ { MAD_F(0x04178781) /* 0.255744463 */, 19 },
7474
7475 /* 7008 */ { MAD_F(0x0417ba89) /* 0.255793128 */, 19 },
7476 /* 7009 */ { MAD_F(0x0417ed91) /* 0.255841796 */, 19 },
7477 /* 7010 */ { MAD_F(0x0418209a) /* 0.255890467 */, 19 },
7478 /* 7011 */ { MAD_F(0x041853a3) /* 0.255939139 */, 19 },
7479 /* 7012 */ { MAD_F(0x041886ad) /* 0.255987814 */, 19 },
7480 /* 7013 */ { MAD_F(0x0418b9b8) /* 0.256036492 */, 19 },
7481 /* 7014 */ { MAD_F(0x0418ecc3) /* 0.256085171 */, 19 },
7482 /* 7015 */ { MAD_F(0x04191fcf) /* 0.256133853 */, 19 },
7483 /* 7016 */ { MAD_F(0x041952dc) /* 0.256182537 */, 19 },
7484 /* 7017 */ { MAD_F(0x041985e9) /* 0.256231224 */, 19 },
7485 /* 7018 */ { MAD_F(0x0419b8f7) /* 0.256279913 */, 19 },
7486 /* 7019 */ { MAD_F(0x0419ec05) /* 0.256328604 */, 19 },
7487 /* 7020 */ { MAD_F(0x041a1f15) /* 0.256377297 */, 19 },
7488 /* 7021 */ { MAD_F(0x041a5224) /* 0.256425993 */, 19 },
7489 /* 7022 */ { MAD_F(0x041a8534) /* 0.256474691 */, 19 },
7490 /* 7023 */ { MAD_F(0x041ab845) /* 0.256523392 */, 19 },
7491
7492 /* 7024 */ { MAD_F(0x041aeb57) /* 0.256572095 */, 19 },
7493 /* 7025 */ { MAD_F(0x041b1e69) /* 0.256620800 */, 19 },
7494 /* 7026 */ { MAD_F(0x041b517c) /* 0.256669507 */, 19 },
7495 /* 7027 */ { MAD_F(0x041b848f) /* 0.256718217 */, 19 },
7496 /* 7028 */ { MAD_F(0x041bb7a3) /* 0.256766929 */, 19 },
7497 /* 7029 */ { MAD_F(0x041beab8) /* 0.256815643 */, 19 },
7498 /* 7030 */ { MAD_F(0x041c1dcd) /* 0.256864359 */, 19 },
7499 /* 7031 */ { MAD_F(0x041c50e3) /* 0.256913078 */, 19 },
7500 /* 7032 */ { MAD_F(0x041c83fa) /* 0.256961800 */, 19 },
7501 /* 7033 */ { MAD_F(0x041cb711) /* 0.257010523 */, 19 },
7502 /* 7034 */ { MAD_F(0x041cea28) /* 0.257059249 */, 19 },
7503 /* 7035 */ { MAD_F(0x041d1d41) /* 0.257107977 */, 19 },
7504 /* 7036 */ { MAD_F(0x041d505a) /* 0.257156708 */, 19 },
7505 /* 7037 */ { MAD_F(0x041d8373) /* 0.257205440 */, 19 },
7506 /* 7038 */ { MAD_F(0x041db68e) /* 0.257254175 */, 19 },
7507 /* 7039 */ { MAD_F(0x041de9a8) /* 0.257302913 */, 19 },
7508
7509 /* 7040 */ { MAD_F(0x041e1cc4) /* 0.257351652 */, 19 },
7510 /* 7041 */ { MAD_F(0x041e4fe0) /* 0.257400394 */, 19 },
7511 /* 7042 */ { MAD_F(0x041e82fd) /* 0.257449139 */, 19 },
7512 /* 7043 */ { MAD_F(0x041eb61a) /* 0.257497885 */, 19 },
7513 /* 7044 */ { MAD_F(0x041ee938) /* 0.257546634 */, 19 },
7514 /* 7045 */ { MAD_F(0x041f1c57) /* 0.257595386 */, 19 },
7515 /* 7046 */ { MAD_F(0x041f4f76) /* 0.257644139 */, 19 },
7516 /* 7047 */ { MAD_F(0x041f8296) /* 0.257692895 */, 19 },
7517 /* 7048 */ { MAD_F(0x041fb5b6) /* 0.257741653 */, 19 },
7518 /* 7049 */ { MAD_F(0x041fe8d7) /* 0.257790414 */, 19 },
7519 /* 7050 */ { MAD_F(0x04201bf9) /* 0.257839176 */, 19 },
7520 /* 7051 */ { MAD_F(0x04204f1b) /* 0.257887941 */, 19 },
7521 /* 7052 */ { MAD_F(0x0420823e) /* 0.257936709 */, 19 },
7522 /* 7053 */ { MAD_F(0x0420b561) /* 0.257985478 */, 19 },
7523 /* 7054 */ { MAD_F(0x0420e885) /* 0.258034250 */, 19 },
7524 /* 7055 */ { MAD_F(0x04211baa) /* 0.258083025 */, 19 },
7525
7526 /* 7056 */ { MAD_F(0x04214ed0) /* 0.258131801 */, 19 },
7527 /* 7057 */ { MAD_F(0x042181f6) /* 0.258180580 */, 19 },
7528 /* 7058 */ { MAD_F(0x0421b51c) /* 0.258229361 */, 19 },
7529 /* 7059 */ { MAD_F(0x0421e843) /* 0.258278145 */, 19 },
7530 /* 7060 */ { MAD_F(0x04221b6b) /* 0.258326931 */, 19 },
7531 /* 7061 */ { MAD_F(0x04224e94) /* 0.258375719 */, 19 },
7532 /* 7062 */ { MAD_F(0x042281bd) /* 0.258424509 */, 19 },
7533 /* 7063 */ { MAD_F(0x0422b4e6) /* 0.258473302 */, 19 },
7534 /* 7064 */ { MAD_F(0x0422e811) /* 0.258522097 */, 19 },
7535 /* 7065 */ { MAD_F(0x04231b3c) /* 0.258570894 */, 19 },
7536 /* 7066 */ { MAD_F(0x04234e67) /* 0.258619694 */, 19 },
7537 /* 7067 */ { MAD_F(0x04238193) /* 0.258668496 */, 19 },
7538 /* 7068 */ { MAD_F(0x0423b4c0) /* 0.258717300 */, 19 },
7539 /* 7069 */ { MAD_F(0x0423e7ee) /* 0.258766106 */, 19 },
7540 /* 7070 */ { MAD_F(0x04241b1c) /* 0.258814915 */, 19 },
7541 /* 7071 */ { MAD_F(0x04244e4a) /* 0.258863726 */, 19 },
7542
7543 /* 7072 */ { MAD_F(0x04248179) /* 0.258912540 */, 19 },
7544 /* 7073 */ { MAD_F(0x0424b4a9) /* 0.258961356 */, 19 },
7545 /* 7074 */ { MAD_F(0x0424e7da) /* 0.259010174 */, 19 },
7546 /* 7075 */ { MAD_F(0x04251b0b) /* 0.259058994 */, 19 },
7547 /* 7076 */ { MAD_F(0x04254e3d) /* 0.259107817 */, 19 },
7548 /* 7077 */ { MAD_F(0x0425816f) /* 0.259156642 */, 19 },
7549 /* 7078 */ { MAD_F(0x0425b4a2) /* 0.259205469 */, 19 },
7550 /* 7079 */ { MAD_F(0x0425e7d6) /* 0.259254298 */, 19 },
7551 /* 7080 */ { MAD_F(0x04261b0a) /* 0.259303130 */, 19 },
7552 /* 7081 */ { MAD_F(0x04264e3f) /* 0.259351964 */, 19 },
7553 /* 7082 */ { MAD_F(0x04268174) /* 0.259400801 */, 19 },
7554 /* 7083 */ { MAD_F(0x0426b4aa) /* 0.259449639 */, 19 },
7555 /* 7084 */ { MAD_F(0x0426e7e1) /* 0.259498480 */, 19 },
7556 /* 7085 */ { MAD_F(0x04271b18) /* 0.259547324 */, 19 },
7557 /* 7086 */ { MAD_F(0x04274e50) /* 0.259596169 */, 19 },
7558 /* 7087 */ { MAD_F(0x04278188) /* 0.259645017 */, 19 },
7559
7560 /* 7088 */ { MAD_F(0x0427b4c2) /* 0.259693868 */, 19 },
7561 /* 7089 */ { MAD_F(0x0427e7fb) /* 0.259742720 */, 19 },
7562 /* 7090 */ { MAD_F(0x04281b36) /* 0.259791575 */, 19 },
7563 /* 7091 */ { MAD_F(0x04284e71) /* 0.259840432 */, 19 },
7564 /* 7092 */ { MAD_F(0x042881ac) /* 0.259889291 */, 19 },
7565 /* 7093 */ { MAD_F(0x0428b4e8) /* 0.259938153 */, 19 },
7566 /* 7094 */ { MAD_F(0x0428e825) /* 0.259987017 */, 19 },
7567 /* 7095 */ { MAD_F(0x04291b63) /* 0.260035883 */, 19 },
7568 /* 7096 */ { MAD_F(0x04294ea1) /* 0.260084752 */, 19 },
7569 /* 7097 */ { MAD_F(0x042981df) /* 0.260133623 */, 19 },
7570 /* 7098 */ { MAD_F(0x0429b51f) /* 0.260182496 */, 19 },
7571 /* 7099 */ { MAD_F(0x0429e85f) /* 0.260231372 */, 19 },
7572 /* 7100 */ { MAD_F(0x042a1b9f) /* 0.260280249 */, 19 },
7573 /* 7101 */ { MAD_F(0x042a4ee0) /* 0.260329129 */, 19 },
7574 /* 7102 */ { MAD_F(0x042a8222) /* 0.260378012 */, 19 },
7575 /* 7103 */ { MAD_F(0x042ab564) /* 0.260426896 */, 19 },
7576
7577 /* 7104 */ { MAD_F(0x042ae8a7) /* 0.260475783 */, 19 },
7578 /* 7105 */ { MAD_F(0x042b1beb) /* 0.260524673 */, 19 },
7579 /* 7106 */ { MAD_F(0x042b4f2f) /* 0.260573564 */, 19 },
7580 /* 7107 */ { MAD_F(0x042b8274) /* 0.260622458 */, 19 },
7581 /* 7108 */ { MAD_F(0x042bb5ba) /* 0.260671354 */, 19 },
7582 /* 7109 */ { MAD_F(0x042be900) /* 0.260720252 */, 19 },
7583 /* 7110 */ { MAD_F(0x042c1c46) /* 0.260769153 */, 19 },
7584 /* 7111 */ { MAD_F(0x042c4f8e) /* 0.260818056 */, 19 },
7585 /* 7112 */ { MAD_F(0x042c82d6) /* 0.260866961 */, 19 },
7586 /* 7113 */ { MAD_F(0x042cb61e) /* 0.260915869 */, 19 },
7587 /* 7114 */ { MAD_F(0x042ce967) /* 0.260964779 */, 19 },
7588 /* 7115 */ { MAD_F(0x042d1cb1) /* 0.261013691 */, 19 },
7589 /* 7116 */ { MAD_F(0x042d4ffb) /* 0.261062606 */, 19 },
7590 /* 7117 */ { MAD_F(0x042d8346) /* 0.261111522 */, 19 },
7591 /* 7118 */ { MAD_F(0x042db692) /* 0.261160441 */, 19 },
7592 /* 7119 */ { MAD_F(0x042de9de) /* 0.261209363 */, 19 },
7593
7594 /* 7120 */ { MAD_F(0x042e1d2b) /* 0.261258286 */, 19 },
7595 /* 7121 */ { MAD_F(0x042e5078) /* 0.261307212 */, 19 },
7596 /* 7122 */ { MAD_F(0x042e83c6) /* 0.261356140 */, 19 },
7597 /* 7123 */ { MAD_F(0x042eb715) /* 0.261405071 */, 19 },
7598 /* 7124 */ { MAD_F(0x042eea64) /* 0.261454004 */, 19 },
7599 /* 7125 */ { MAD_F(0x042f1db4) /* 0.261502939 */, 19 },
7600 /* 7126 */ { MAD_F(0x042f5105) /* 0.261551876 */, 19 },
7601 /* 7127 */ { MAD_F(0x042f8456) /* 0.261600816 */, 19 },
7602 /* 7128 */ { MAD_F(0x042fb7a8) /* 0.261649758 */, 19 },
7603 /* 7129 */ { MAD_F(0x042feafa) /* 0.261698702 */, 19 },
7604 /* 7130 */ { MAD_F(0x04301e4d) /* 0.261747649 */, 19 },
7605 /* 7131 */ { MAD_F(0x043051a1) /* 0.261796597 */, 19 },
7606 /* 7132 */ { MAD_F(0x043084f5) /* 0.261845548 */, 19 },
7607 /* 7133 */ { MAD_F(0x0430b84a) /* 0.261894502 */, 19 },
7608 /* 7134 */ { MAD_F(0x0430eb9f) /* 0.261943458 */, 19 },
7609 /* 7135 */ { MAD_F(0x04311ef5) /* 0.261992416 */, 19 },
7610
7611 /* 7136 */ { MAD_F(0x0431524c) /* 0.262041376 */, 19 },
7612 /* 7137 */ { MAD_F(0x043185a3) /* 0.262090338 */, 19 },
7613 /* 7138 */ { MAD_F(0x0431b8fb) /* 0.262139303 */, 19 },
7614 /* 7139 */ { MAD_F(0x0431ec54) /* 0.262188270 */, 19 },
7615 /* 7140 */ { MAD_F(0x04321fad) /* 0.262237240 */, 19 },
7616 /* 7141 */ { MAD_F(0x04325306) /* 0.262286211 */, 19 },
7617 /* 7142 */ { MAD_F(0x04328661) /* 0.262335185 */, 19 },
7618 /* 7143 */ { MAD_F(0x0432b9bc) /* 0.262384162 */, 19 },
7619 /* 7144 */ { MAD_F(0x0432ed17) /* 0.262433140 */, 19 },
7620 /* 7145 */ { MAD_F(0x04332074) /* 0.262482121 */, 19 },
7621 /* 7146 */ { MAD_F(0x043353d0) /* 0.262531104 */, 19 },
7622 /* 7147 */ { MAD_F(0x0433872e) /* 0.262580089 */, 19 },
7623 /* 7148 */ { MAD_F(0x0433ba8c) /* 0.262629077 */, 19 },
7624 /* 7149 */ { MAD_F(0x0433edea) /* 0.262678067 */, 19 },
7625 /* 7150 */ { MAD_F(0x0434214a) /* 0.262727059 */, 19 },
7626 /* 7151 */ { MAD_F(0x043454aa) /* 0.262776054 */, 19 },
7627
7628 /* 7152 */ { MAD_F(0x0434880a) /* 0.262825051 */, 19 },
7629 /* 7153 */ { MAD_F(0x0434bb6b) /* 0.262874050 */, 19 },
7630 /* 7154 */ { MAD_F(0x0434eecd) /* 0.262923051 */, 19 },
7631 /* 7155 */ { MAD_F(0x0435222f) /* 0.262972055 */, 19 },
7632 /* 7156 */ { MAD_F(0x04355592) /* 0.263021061 */, 19 },
7633 /* 7157 */ { MAD_F(0x043588f6) /* 0.263070069 */, 19 },
7634 /* 7158 */ { MAD_F(0x0435bc5a) /* 0.263119079 */, 19 },
7635 /* 7159 */ { MAD_F(0x0435efbf) /* 0.263168092 */, 19 },
7636 /* 7160 */ { MAD_F(0x04362324) /* 0.263217107 */, 19 },
7637 /* 7161 */ { MAD_F(0x0436568a) /* 0.263266125 */, 19 },
7638 /* 7162 */ { MAD_F(0x043689f1) /* 0.263315144 */, 19 },
7639 /* 7163 */ { MAD_F(0x0436bd58) /* 0.263364166 */, 19 },
7640 /* 7164 */ { MAD_F(0x0436f0c0) /* 0.263413191 */, 19 },
7641 /* 7165 */ { MAD_F(0x04372428) /* 0.263462217 */, 19 },
7642 /* 7166 */ { MAD_F(0x04375791) /* 0.263511246 */, 19 },
7643 /* 7167 */ { MAD_F(0x04378afb) /* 0.263560277 */, 19 },
7644
7645 /* 7168 */ { MAD_F(0x0437be65) /* 0.263609310 */, 19 },
7646 /* 7169 */ { MAD_F(0x0437f1d0) /* 0.263658346 */, 19 },
7647 /* 7170 */ { MAD_F(0x0438253c) /* 0.263707384 */, 19 },
7648 /* 7171 */ { MAD_F(0x043858a8) /* 0.263756424 */, 19 },
7649 /* 7172 */ { MAD_F(0x04388c14) /* 0.263805466 */, 19 },
7650 /* 7173 */ { MAD_F(0x0438bf82) /* 0.263854511 */, 19 },
7651 /* 7174 */ { MAD_F(0x0438f2f0) /* 0.263903558 */, 19 },
7652 /* 7175 */ { MAD_F(0x0439265e) /* 0.263952607 */, 19 },
7653 /* 7176 */ { MAD_F(0x043959cd) /* 0.264001659 */, 19 },
7654 /* 7177 */ { MAD_F(0x04398d3d) /* 0.264050713 */, 19 },
7655 /* 7178 */ { MAD_F(0x0439c0ae) /* 0.264099769 */, 19 },
7656 /* 7179 */ { MAD_F(0x0439f41f) /* 0.264148827 */, 19 },
7657 /* 7180 */ { MAD_F(0x043a2790) /* 0.264197888 */, 19 },
7658 /* 7181 */ { MAD_F(0x043a5b02) /* 0.264246951 */, 19 },
7659 /* 7182 */ { MAD_F(0x043a8e75) /* 0.264296016 */, 19 },
7660 /* 7183 */ { MAD_F(0x043ac1e9) /* 0.264345084 */, 19 },
7661
7662 /* 7184 */ { MAD_F(0x043af55d) /* 0.264394153 */, 19 },
7663 /* 7185 */ { MAD_F(0x043b28d2) /* 0.264443225 */, 19 },
7664 /* 7186 */ { MAD_F(0x043b5c47) /* 0.264492300 */, 19 },
7665 /* 7187 */ { MAD_F(0x043b8fbd) /* 0.264541376 */, 19 },
7666 /* 7188 */ { MAD_F(0x043bc333) /* 0.264590455 */, 19 },
7667 /* 7189 */ { MAD_F(0x043bf6aa) /* 0.264639536 */, 19 },
7668 /* 7190 */ { MAD_F(0x043c2a22) /* 0.264688620 */, 19 },
7669 /* 7191 */ { MAD_F(0x043c5d9a) /* 0.264737706 */, 19 },
7670 /* 7192 */ { MAD_F(0x043c9113) /* 0.264786794 */, 19 },
7671 /* 7193 */ { MAD_F(0x043cc48d) /* 0.264835884 */, 19 },
7672 /* 7194 */ { MAD_F(0x043cf807) /* 0.264884976 */, 19 },
7673 /* 7195 */ { MAD_F(0x043d2b82) /* 0.264934071 */, 19 },
7674 /* 7196 */ { MAD_F(0x043d5efd) /* 0.264983168 */, 19 },
7675 /* 7197 */ { MAD_F(0x043d9279) /* 0.265032268 */, 19 },
7676 /* 7198 */ { MAD_F(0x043dc5f6) /* 0.265081369 */, 19 },
7677 /* 7199 */ { MAD_F(0x043df973) /* 0.265130473 */, 19 },
7678
7679 /* 7200 */ { MAD_F(0x043e2cf1) /* 0.265179580 */, 19 },
7680 /* 7201 */ { MAD_F(0x043e6070) /* 0.265228688 */, 19 },
7681 /* 7202 */ { MAD_F(0x043e93ef) /* 0.265277799 */, 19 },
7682 /* 7203 */ { MAD_F(0x043ec76e) /* 0.265326912 */, 19 },
7683 /* 7204 */ { MAD_F(0x043efaef) /* 0.265376027 */, 19 },
7684 /* 7205 */ { MAD_F(0x043f2e6f) /* 0.265425145 */, 19 },
7685 /* 7206 */ { MAD_F(0x043f61f1) /* 0.265474264 */, 19 },
7686 /* 7207 */ { MAD_F(0x043f9573) /* 0.265523387 */, 19 },
7687 /* 7208 */ { MAD_F(0x043fc8f6) /* 0.265572511 */, 19 },
7688 /* 7209 */ { MAD_F(0x043ffc79) /* 0.265621638 */, 19 },
7689 /* 7210 */ { MAD_F(0x04402ffd) /* 0.265670766 */, 19 },
7690 /* 7211 */ { MAD_F(0x04406382) /* 0.265719898 */, 19 },
7691 /* 7212 */ { MAD_F(0x04409707) /* 0.265769031 */, 19 },
7692 /* 7213 */ { MAD_F(0x0440ca8d) /* 0.265818167 */, 19 },
7693 /* 7214 */ { MAD_F(0x0440fe13) /* 0.265867305 */, 19 },
7694 /* 7215 */ { MAD_F(0x0441319a) /* 0.265916445 */, 19 },
7695
7696 /* 7216 */ { MAD_F(0x04416522) /* 0.265965588 */, 19 },
7697 /* 7217 */ { MAD_F(0x044198aa) /* 0.266014732 */, 19 },
7698 /* 7218 */ { MAD_F(0x0441cc33) /* 0.266063880 */, 19 },
7699 /* 7219 */ { MAD_F(0x0441ffbc) /* 0.266113029 */, 19 },
7700 /* 7220 */ { MAD_F(0x04423346) /* 0.266162181 */, 19 },
7701 /* 7221 */ { MAD_F(0x044266d1) /* 0.266211334 */, 19 },
7702 /* 7222 */ { MAD_F(0x04429a5c) /* 0.266260491 */, 19 },
7703 /* 7223 */ { MAD_F(0x0442cde8) /* 0.266309649 */, 19 },
7704 /* 7224 */ { MAD_F(0x04430174) /* 0.266358810 */, 19 },
7705 /* 7225 */ { MAD_F(0x04433501) /* 0.266407973 */, 19 },
7706 /* 7226 */ { MAD_F(0x0443688f) /* 0.266457138 */, 19 },
7707 /* 7227 */ { MAD_F(0x04439c1d) /* 0.266506305 */, 19 },
7708 /* 7228 */ { MAD_F(0x0443cfac) /* 0.266555475 */, 19 },
7709 /* 7229 */ { MAD_F(0x0444033c) /* 0.266604647 */, 19 },
7710 /* 7230 */ { MAD_F(0x044436cc) /* 0.266653822 */, 19 },
7711 /* 7231 */ { MAD_F(0x04446a5d) /* 0.266702998 */, 19 },
7712
7713 /* 7232 */ { MAD_F(0x04449dee) /* 0.266752177 */, 19 },
7714 /* 7233 */ { MAD_F(0x0444d180) /* 0.266801358 */, 19 },
7715 /* 7234 */ { MAD_F(0x04450513) /* 0.266850541 */, 19 },
7716 /* 7235 */ { MAD_F(0x044538a6) /* 0.266899727 */, 19 },
7717 /* 7236 */ { MAD_F(0x04456c39) /* 0.266948915 */, 19 },
7718 /* 7237 */ { MAD_F(0x04459fce) /* 0.266998105 */, 19 },
7719 /* 7238 */ { MAD_F(0x0445d363) /* 0.267047298 */, 19 },
7720 /* 7239 */ { MAD_F(0x044606f8) /* 0.267096492 */, 19 },
7721 /* 7240 */ { MAD_F(0x04463a8f) /* 0.267145689 */, 19 },
7722 /* 7241 */ { MAD_F(0x04466e25) /* 0.267194888 */, 19 },
7723 /* 7242 */ { MAD_F(0x0446a1bd) /* 0.267244090 */, 19 },
7724 /* 7243 */ { MAD_F(0x0446d555) /* 0.267293294 */, 19 },
7725 /* 7244 */ { MAD_F(0x044708ee) /* 0.267342500 */, 19 },
7726 /* 7245 */ { MAD_F(0x04473c87) /* 0.267391708 */, 19 },
7727 /* 7246 */ { MAD_F(0x04477021) /* 0.267440919 */, 19 },
7728 /* 7247 */ { MAD_F(0x0447a3bb) /* 0.267490131 */, 19 },
7729
7730 /* 7248 */ { MAD_F(0x0447d756) /* 0.267539347 */, 19 },
7731 /* 7249 */ { MAD_F(0x04480af2) /* 0.267588564 */, 19 },
7732 /* 7250 */ { MAD_F(0x04483e8e) /* 0.267637783 */, 19 },
7733 /* 7251 */ { MAD_F(0x0448722b) /* 0.267687005 */, 19 },
7734 /* 7252 */ { MAD_F(0x0448a5c9) /* 0.267736229 */, 19 },
7735 /* 7253 */ { MAD_F(0x0448d967) /* 0.267785456 */, 19 },
7736 /* 7254 */ { MAD_F(0x04490d05) /* 0.267834685 */, 19 },
7737 /* 7255 */ { MAD_F(0x044940a5) /* 0.267883915 */, 19 },
7738 /* 7256 */ { MAD_F(0x04497445) /* 0.267933149 */, 19 },
7739 /* 7257 */ { MAD_F(0x0449a7e5) /* 0.267982384 */, 19 },
7740 /* 7258 */ { MAD_F(0x0449db86) /* 0.268031622 */, 19 },
7741 /* 7259 */ { MAD_F(0x044a0f28) /* 0.268080862 */, 19 },
7742 /* 7260 */ { MAD_F(0x044a42ca) /* 0.268130104 */, 19 },
7743 /* 7261 */ { MAD_F(0x044a766d) /* 0.268179349 */, 19 },
7744 /* 7262 */ { MAD_F(0x044aaa11) /* 0.268228595 */, 19 },
7745 /* 7263 */ { MAD_F(0x044addb5) /* 0.268277844 */, 19 },
7746
7747 /* 7264 */ { MAD_F(0x044b115a) /* 0.268327096 */, 19 },
7748 /* 7265 */ { MAD_F(0x044b44ff) /* 0.268376349 */, 19 },
7749 /* 7266 */ { MAD_F(0x044b78a5) /* 0.268425605 */, 19 },
7750 /* 7267 */ { MAD_F(0x044bac4c) /* 0.268474863 */, 19 },
7751 /* 7268 */ { MAD_F(0x044bdff3) /* 0.268524123 */, 19 },
7752 /* 7269 */ { MAD_F(0x044c139b) /* 0.268573386 */, 19 },
7753 /* 7270 */ { MAD_F(0x044c4743) /* 0.268622651 */, 19 },
7754 /* 7271 */ { MAD_F(0x044c7aec) /* 0.268671918 */, 19 },
7755 /* 7272 */ { MAD_F(0x044cae96) /* 0.268721187 */, 19 },
7756 /* 7273 */ { MAD_F(0x044ce240) /* 0.268770459 */, 19 },
7757 /* 7274 */ { MAD_F(0x044d15eb) /* 0.268819733 */, 19 },
7758 /* 7275 */ { MAD_F(0x044d4997) /* 0.268869009 */, 19 },
7759 /* 7276 */ { MAD_F(0x044d7d43) /* 0.268918287 */, 19 },
7760 /* 7277 */ { MAD_F(0x044db0ef) /* 0.268967568 */, 19 },
7761 /* 7278 */ { MAD_F(0x044de49d) /* 0.269016851 */, 19 },
7762 /* 7279 */ { MAD_F(0x044e184b) /* 0.269066136 */, 19 },
7763
7764 /* 7280 */ { MAD_F(0x044e4bf9) /* 0.269115423 */, 19 },
7765 /* 7281 */ { MAD_F(0x044e7fa8) /* 0.269164713 */, 19 },
7766 /* 7282 */ { MAD_F(0x044eb358) /* 0.269214005 */, 19 },
7767 /* 7283 */ { MAD_F(0x044ee708) /* 0.269263299 */, 19 },
7768 /* 7284 */ { MAD_F(0x044f1ab9) /* 0.269312595 */, 19 },
7769 /* 7285 */ { MAD_F(0x044f4e6b) /* 0.269361894 */, 19 },
7770 /* 7286 */ { MAD_F(0x044f821d) /* 0.269411195 */, 19 },
7771 /* 7287 */ { MAD_F(0x044fb5cf) /* 0.269460498 */, 19 },
7772 /* 7288 */ { MAD_F(0x044fe983) /* 0.269509804 */, 19 },
7773 /* 7289 */ { MAD_F(0x04501d37) /* 0.269559111 */, 19 },
7774 /* 7290 */ { MAD_F(0x045050eb) /* 0.269608421 */, 19 },
7775 /* 7291 */ { MAD_F(0x045084a0) /* 0.269657734 */, 19 },
7776 /* 7292 */ { MAD_F(0x0450b856) /* 0.269707048 */, 19 },
7777 /* 7293 */ { MAD_F(0x0450ec0d) /* 0.269756365 */, 19 },
7778 /* 7294 */ { MAD_F(0x04511fc4) /* 0.269805684 */, 19 },
7779 /* 7295 */ { MAD_F(0x0451537b) /* 0.269855005 */, 19 },
7780
7781 /* 7296 */ { MAD_F(0x04518733) /* 0.269904329 */, 19 },
7782 /* 7297 */ { MAD_F(0x0451baec) /* 0.269953654 */, 19 },
7783 /* 7298 */ { MAD_F(0x0451eea5) /* 0.270002982 */, 19 },
7784 /* 7299 */ { MAD_F(0x0452225f) /* 0.270052313 */, 19 },
7785 /* 7300 */ { MAD_F(0x0452561a) /* 0.270101645 */, 19 },
7786 /* 7301 */ { MAD_F(0x045289d5) /* 0.270150980 */, 19 },
7787 /* 7302 */ { MAD_F(0x0452bd91) /* 0.270200317 */, 19 },
7788 /* 7303 */ { MAD_F(0x0452f14d) /* 0.270249656 */, 19 },
7789 /* 7304 */ { MAD_F(0x0453250a) /* 0.270298998 */, 19 },
7790 /* 7305 */ { MAD_F(0x045358c8) /* 0.270348341 */, 19 },
7791 /* 7306 */ { MAD_F(0x04538c86) /* 0.270397687 */, 19 },
7792 /* 7307 */ { MAD_F(0x0453c045) /* 0.270447036 */, 19 },
7793 /* 7308 */ { MAD_F(0x0453f405) /* 0.270496386 */, 19 },
7794 /* 7309 */ { MAD_F(0x045427c5) /* 0.270545739 */, 19 },
7795 /* 7310 */ { MAD_F(0x04545b85) /* 0.270595094 */, 19 },
7796 /* 7311 */ { MAD_F(0x04548f46) /* 0.270644451 */, 19 },
7797
7798 /* 7312 */ { MAD_F(0x0454c308) /* 0.270693811 */, 19 },
7799 /* 7313 */ { MAD_F(0x0454f6cb) /* 0.270743173 */, 19 },
7800 /* 7314 */ { MAD_F(0x04552a8e) /* 0.270792537 */, 19 },
7801 /* 7315 */ { MAD_F(0x04555e51) /* 0.270841903 */, 19 },
7802 /* 7316 */ { MAD_F(0x04559216) /* 0.270891271 */, 19 },
7803 /* 7317 */ { MAD_F(0x0455c5db) /* 0.270940642 */, 19 },
7804 /* 7318 */ { MAD_F(0x0455f9a0) /* 0.270990015 */, 19 },
7805 /* 7319 */ { MAD_F(0x04562d66) /* 0.271039390 */, 19 },
7806 /* 7320 */ { MAD_F(0x0456612d) /* 0.271088768 */, 19 },
7807 /* 7321 */ { MAD_F(0x045694f4) /* 0.271138148 */, 19 },
7808 /* 7322 */ { MAD_F(0x0456c8bc) /* 0.271187530 */, 19 },
7809 /* 7323 */ { MAD_F(0x0456fc84) /* 0.271236914 */, 19 },
7810 /* 7324 */ { MAD_F(0x0457304e) /* 0.271286301 */, 19 },
7811 /* 7325 */ { MAD_F(0x04576417) /* 0.271335689 */, 19 },
7812 /* 7326 */ { MAD_F(0x045797e2) /* 0.271385080 */, 19 },
7813 /* 7327 */ { MAD_F(0x0457cbac) /* 0.271434474 */, 19 },
7814
7815 /* 7328 */ { MAD_F(0x0457ff78) /* 0.271483869 */, 19 },
7816 /* 7329 */ { MAD_F(0x04583344) /* 0.271533267 */, 19 },
7817 /* 7330 */ { MAD_F(0x04586711) /* 0.271582667 */, 19 },
7818 /* 7331 */ { MAD_F(0x04589ade) /* 0.271632069 */, 19 },
7819 /* 7332 */ { MAD_F(0x0458ceac) /* 0.271681474 */, 19 },
7820 /* 7333 */ { MAD_F(0x0459027b) /* 0.271730880 */, 19 },
7821 /* 7334 */ { MAD_F(0x0459364a) /* 0.271780289 */, 19 },
7822 /* 7335 */ { MAD_F(0x04596a19) /* 0.271829701 */, 19 },
7823 /* 7336 */ { MAD_F(0x04599dea) /* 0.271879114 */, 19 },
7824 /* 7337 */ { MAD_F(0x0459d1bb) /* 0.271928530 */, 19 },
7825 /* 7338 */ { MAD_F(0x045a058c) /* 0.271977948 */, 19 },
7826 /* 7339 */ { MAD_F(0x045a395e) /* 0.272027368 */, 19 },
7827 /* 7340 */ { MAD_F(0x045a6d31) /* 0.272076790 */, 19 },
7828 /* 7341 */ { MAD_F(0x045aa104) /* 0.272126215 */, 19 },
7829 /* 7342 */ { MAD_F(0x045ad4d8) /* 0.272175642 */, 19 },
7830 /* 7343 */ { MAD_F(0x045b08ad) /* 0.272225071 */, 19 },
7831
7832 /* 7344 */ { MAD_F(0x045b3c82) /* 0.272274503 */, 19 },
7833 /* 7345 */ { MAD_F(0x045b7058) /* 0.272323936 */, 19 },
7834 /* 7346 */ { MAD_F(0x045ba42e) /* 0.272373372 */, 19 },
7835 /* 7347 */ { MAD_F(0x045bd805) /* 0.272422810 */, 19 },
7836 /* 7348 */ { MAD_F(0x045c0bdd) /* 0.272472251 */, 19 },
7837 /* 7349 */ { MAD_F(0x045c3fb5) /* 0.272521693 */, 19 },
7838 /* 7350 */ { MAD_F(0x045c738e) /* 0.272571138 */, 19 },
7839 /* 7351 */ { MAD_F(0x045ca767) /* 0.272620585 */, 19 },
7840 /* 7352 */ { MAD_F(0x045cdb41) /* 0.272670035 */, 19 },
7841 /* 7353 */ { MAD_F(0x045d0f1b) /* 0.272719486 */, 19 },
7842 /* 7354 */ { MAD_F(0x045d42f7) /* 0.272768940 */, 19 },
7843 /* 7355 */ { MAD_F(0x045d76d2) /* 0.272818396 */, 19 },
7844 /* 7356 */ { MAD_F(0x045daaaf) /* 0.272867855 */, 19 },
7845 /* 7357 */ { MAD_F(0x045dde8c) /* 0.272917315 */, 19 },
7846 /* 7358 */ { MAD_F(0x045e1269) /* 0.272966778 */, 19 },
7847 /* 7359 */ { MAD_F(0x045e4647) /* 0.273016243 */, 19 },
7848
7849 /* 7360 */ { MAD_F(0x045e7a26) /* 0.273065710 */, 19 },
7850 /* 7361 */ { MAD_F(0x045eae06) /* 0.273115180 */, 19 },
7851 /* 7362 */ { MAD_F(0x045ee1e6) /* 0.273164652 */, 19 },
7852 /* 7363 */ { MAD_F(0x045f15c6) /* 0.273214126 */, 19 },
7853 /* 7364 */ { MAD_F(0x045f49a7) /* 0.273263602 */, 19 },
7854 /* 7365 */ { MAD_F(0x045f7d89) /* 0.273313081 */, 19 },
7855 /* 7366 */ { MAD_F(0x045fb16c) /* 0.273362561 */, 19 },
7856 /* 7367 */ { MAD_F(0x045fe54f) /* 0.273412044 */, 19 },
7857 /* 7368 */ { MAD_F(0x04601932) /* 0.273461530 */, 19 },
7858 /* 7369 */ { MAD_F(0x04604d16) /* 0.273511017 */, 19 },
7859 /* 7370 */ { MAD_F(0x046080fb) /* 0.273560507 */, 19 },
7860 /* 7371 */ { MAD_F(0x0460b4e1) /* 0.273609999 */, 19 },
7861 /* 7372 */ { MAD_F(0x0460e8c7) /* 0.273659493 */, 19 },
7862 /* 7373 */ { MAD_F(0x04611cad) /* 0.273708989 */, 19 },
7863 /* 7374 */ { MAD_F(0x04615094) /* 0.273758488 */, 19 },
7864 /* 7375 */ { MAD_F(0x0461847c) /* 0.273807989 */, 19 },
7865
7866 /* 7376 */ { MAD_F(0x0461b864) /* 0.273857492 */, 19 },
7867 /* 7377 */ { MAD_F(0x0461ec4d) /* 0.273906997 */, 19 },
7868 /* 7378 */ { MAD_F(0x04622037) /* 0.273956505 */, 19 },
7869 /* 7379 */ { MAD_F(0x04625421) /* 0.274006015 */, 19 },
7870 /* 7380 */ { MAD_F(0x0462880c) /* 0.274055527 */, 19 },
7871 /* 7381 */ { MAD_F(0x0462bbf7) /* 0.274105041 */, 19 },
7872 /* 7382 */ { MAD_F(0x0462efe3) /* 0.274154558 */, 19 },
7873 /* 7383 */ { MAD_F(0x046323d0) /* 0.274204076 */, 19 },
7874 /* 7384 */ { MAD_F(0x046357bd) /* 0.274253597 */, 19 },
7875 /* 7385 */ { MAD_F(0x04638bab) /* 0.274303121 */, 19 },
7876 /* 7386 */ { MAD_F(0x0463bf99) /* 0.274352646 */, 19 },
7877 /* 7387 */ { MAD_F(0x0463f388) /* 0.274402174 */, 19 },
7878 /* 7388 */ { MAD_F(0x04642778) /* 0.274451704 */, 19 },
7879 /* 7389 */ { MAD_F(0x04645b68) /* 0.274501236 */, 19 },
7880 /* 7390 */ { MAD_F(0x04648f59) /* 0.274550771 */, 19 },
7881 /* 7391 */ { MAD_F(0x0464c34a) /* 0.274600307 */, 19 },
7882
7883 /* 7392 */ { MAD_F(0x0464f73c) /* 0.274649846 */, 19 },
7884 /* 7393 */ { MAD_F(0x04652b2f) /* 0.274699387 */, 19 },
7885 /* 7394 */ { MAD_F(0x04655f22) /* 0.274748931 */, 19 },
7886 /* 7395 */ { MAD_F(0x04659316) /* 0.274798476 */, 19 },
7887 /* 7396 */ { MAD_F(0x0465c70a) /* 0.274848024 */, 19 },
7888 /* 7397 */ { MAD_F(0x0465faff) /* 0.274897574 */, 19 },
7889 /* 7398 */ { MAD_F(0x04662ef5) /* 0.274947126 */, 19 },
7890 /* 7399 */ { MAD_F(0x046662eb) /* 0.274996681 */, 19 },
7891 /* 7400 */ { MAD_F(0x046696e2) /* 0.275046238 */, 19 },
7892 /* 7401 */ { MAD_F(0x0466cad9) /* 0.275095797 */, 19 },
7893 /* 7402 */ { MAD_F(0x0466fed1) /* 0.275145358 */, 19 },
7894 /* 7403 */ { MAD_F(0x046732ca) /* 0.275194921 */, 19 },
7895 /* 7404 */ { MAD_F(0x046766c3) /* 0.275244487 */, 19 },
7896 /* 7405 */ { MAD_F(0x04679abd) /* 0.275294055 */, 19 },
7897 /* 7406 */ { MAD_F(0x0467ceb7) /* 0.275343625 */, 19 },
7898 /* 7407 */ { MAD_F(0x046802b2) /* 0.275393198 */, 19 },
7899
7900 /* 7408 */ { MAD_F(0x046836ae) /* 0.275442772 */, 19 },
7901 /* 7409 */ { MAD_F(0x04686aaa) /* 0.275492349 */, 19 },
7902 /* 7410 */ { MAD_F(0x04689ea7) /* 0.275541928 */, 19 },
7903 /* 7411 */ { MAD_F(0x0468d2a4) /* 0.275591509 */, 19 },
7904 /* 7412 */ { MAD_F(0x046906a2) /* 0.275641093 */, 19 },
7905 /* 7413 */ { MAD_F(0x04693aa1) /* 0.275690679 */, 19 },
7906 /* 7414 */ { MAD_F(0x04696ea0) /* 0.275740267 */, 19 },
7907 /* 7415 */ { MAD_F(0x0469a2a0) /* 0.275789857 */, 19 },
7908 /* 7416 */ { MAD_F(0x0469d6a0) /* 0.275839449 */, 19 },
7909 /* 7417 */ { MAD_F(0x046a0aa1) /* 0.275889044 */, 19 },
7910 /* 7418 */ { MAD_F(0x046a3ea3) /* 0.275938641 */, 19 },
7911 /* 7419 */ { MAD_F(0x046a72a5) /* 0.275988240 */, 19 },
7912 /* 7420 */ { MAD_F(0x046aa6a8) /* 0.276037842 */, 19 },
7913 /* 7421 */ { MAD_F(0x046adaab) /* 0.276087445 */, 19 },
7914 /* 7422 */ { MAD_F(0x046b0eaf) /* 0.276137051 */, 19 },
7915 /* 7423 */ { MAD_F(0x046b42b3) /* 0.276186659 */, 19 },
7916
7917 /* 7424 */ { MAD_F(0x046b76b9) /* 0.276236269 */, 19 },
7918 /* 7425 */ { MAD_F(0x046baabe) /* 0.276285882 */, 19 },
7919 /* 7426 */ { MAD_F(0x046bdec5) /* 0.276335497 */, 19 },
7920 /* 7427 */ { MAD_F(0x046c12cc) /* 0.276385113 */, 19 },
7921 /* 7428 */ { MAD_F(0x046c46d3) /* 0.276434733 */, 19 },
7922 /* 7429 */ { MAD_F(0x046c7adb) /* 0.276484354 */, 19 },
7923 /* 7430 */ { MAD_F(0x046caee4) /* 0.276533978 */, 19 },
7924 /* 7431 */ { MAD_F(0x046ce2ee) /* 0.276583604 */, 19 },
7925 /* 7432 */ { MAD_F(0x046d16f7) /* 0.276633232 */, 19 },
7926 /* 7433 */ { MAD_F(0x046d4b02) /* 0.276682862 */, 19 },
7927 /* 7434 */ { MAD_F(0x046d7f0d) /* 0.276732495 */, 19 },
7928 /* 7435 */ { MAD_F(0x046db319) /* 0.276782129 */, 19 },
7929 /* 7436 */ { MAD_F(0x046de725) /* 0.276831766 */, 19 },
7930 /* 7437 */ { MAD_F(0x046e1b32) /* 0.276881406 */, 19 },
7931 /* 7438 */ { MAD_F(0x046e4f40) /* 0.276931047 */, 19 },
7932 /* 7439 */ { MAD_F(0x046e834e) /* 0.276980691 */, 19 },
7933
7934 /* 7440 */ { MAD_F(0x046eb75c) /* 0.277030337 */, 19 },
7935 /* 7441 */ { MAD_F(0x046eeb6c) /* 0.277079985 */, 19 },
7936 /* 7442 */ { MAD_F(0x046f1f7c) /* 0.277129635 */, 19 },
7937 /* 7443 */ { MAD_F(0x046f538c) /* 0.277179288 */, 19 },
7938 /* 7444 */ { MAD_F(0x046f879d) /* 0.277228942 */, 19 },
7939 /* 7445 */ { MAD_F(0x046fbbaf) /* 0.277278600 */, 19 },
7940 /* 7446 */ { MAD_F(0x046fefc1) /* 0.277328259 */, 19 },
7941 /* 7447 */ { MAD_F(0x047023d4) /* 0.277377920 */, 19 },
7942 /* 7448 */ { MAD_F(0x047057e8) /* 0.277427584 */, 19 },
7943 /* 7449 */ { MAD_F(0x04708bfc) /* 0.277477250 */, 19 },
7944 /* 7450 */ { MAD_F(0x0470c011) /* 0.277526918 */, 19 },
7945 /* 7451 */ { MAD_F(0x0470f426) /* 0.277576588 */, 19 },
7946 /* 7452 */ { MAD_F(0x0471283c) /* 0.277626261 */, 19 },
7947 /* 7453 */ { MAD_F(0x04715c52) /* 0.277675936 */, 19 },
7948 /* 7454 */ { MAD_F(0x04719069) /* 0.277725613 */, 19 },
7949 /* 7455 */ { MAD_F(0x0471c481) /* 0.277775292 */, 19 },
7950
7951 /* 7456 */ { MAD_F(0x0471f899) /* 0.277824973 */, 19 },
7952 /* 7457 */ { MAD_F(0x04722cb2) /* 0.277874657 */, 19 },
7953 /* 7458 */ { MAD_F(0x047260cc) /* 0.277924343 */, 19 },
7954 /* 7459 */ { MAD_F(0x047294e6) /* 0.277974031 */, 19 },
7955 /* 7460 */ { MAD_F(0x0472c900) /* 0.278023722 */, 19 },
7956 /* 7461 */ { MAD_F(0x0472fd1b) /* 0.278073414 */, 19 },
7957 /* 7462 */ { MAD_F(0x04733137) /* 0.278123109 */, 19 },
7958 /* 7463 */ { MAD_F(0x04736554) /* 0.278172806 */, 19 },
7959 /* 7464 */ { MAD_F(0x04739971) /* 0.278222505 */, 19 },
7960 /* 7465 */ { MAD_F(0x0473cd8e) /* 0.278272207 */, 19 },
7961 /* 7466 */ { MAD_F(0x047401ad) /* 0.278321910 */, 19 },
7962 /* 7467 */ { MAD_F(0x047435cb) /* 0.278371616 */, 19 },
7963 /* 7468 */ { MAD_F(0x047469eb) /* 0.278421324 */, 19 },
7964 /* 7469 */ { MAD_F(0x04749e0b) /* 0.278471035 */, 19 },
7965 /* 7470 */ { MAD_F(0x0474d22c) /* 0.278520747 */, 19 },
7966 /* 7471 */ { MAD_F(0x0475064d) /* 0.278570462 */, 19 },
7967
7968 /* 7472 */ { MAD_F(0x04753a6f) /* 0.278620179 */, 19 },
7969 /* 7473 */ { MAD_F(0x04756e91) /* 0.278669898 */, 19 },
7970 /* 7474 */ { MAD_F(0x0475a2b4) /* 0.278719619 */, 19 },
7971 /* 7475 */ { MAD_F(0x0475d6d7) /* 0.278769343 */, 19 },
7972 /* 7476 */ { MAD_F(0x04760afc) /* 0.278819069 */, 19 },
7973 /* 7477 */ { MAD_F(0x04763f20) /* 0.278868797 */, 19 },
7974 /* 7478 */ { MAD_F(0x04767346) /* 0.278918527 */, 19 },
7975 /* 7479 */ { MAD_F(0x0476a76c) /* 0.278968260 */, 19 },
7976 /* 7480 */ { MAD_F(0x0476db92) /* 0.279017995 */, 19 },
7977 /* 7481 */ { MAD_F(0x04770fba) /* 0.279067731 */, 19 },
7978 /* 7482 */ { MAD_F(0x047743e1) /* 0.279117471 */, 19 },
7979 /* 7483 */ { MAD_F(0x0477780a) /* 0.279167212 */, 19 },
7980 /* 7484 */ { MAD_F(0x0477ac33) /* 0.279216956 */, 19 },
7981 /* 7485 */ { MAD_F(0x0477e05c) /* 0.279266701 */, 19 },
7982 /* 7486 */ { MAD_F(0x04781486) /* 0.279316449 */, 19 },
7983 /* 7487 */ { MAD_F(0x047848b1) /* 0.279366200 */, 19 },
7984
7985 /* 7488 */ { MAD_F(0x04787cdc) /* 0.279415952 */, 19 },
7986 /* 7489 */ { MAD_F(0x0478b108) /* 0.279465707 */, 19 },
7987 /* 7490 */ { MAD_F(0x0478e535) /* 0.279515464 */, 19 },
7988 /* 7491 */ { MAD_F(0x04791962) /* 0.279565223 */, 19 },
7989 /* 7492 */ { MAD_F(0x04794d8f) /* 0.279614984 */, 19 },
7990 /* 7493 */ { MAD_F(0x047981be) /* 0.279664748 */, 19 },
7991 /* 7494 */ { MAD_F(0x0479b5ed) /* 0.279714513 */, 19 },
7992 /* 7495 */ { MAD_F(0x0479ea1c) /* 0.279764281 */, 19 },
7993 /* 7496 */ { MAD_F(0x047a1e4c) /* 0.279814051 */, 19 },
7994 /* 7497 */ { MAD_F(0x047a527d) /* 0.279863824 */, 19 },
7995 /* 7498 */ { MAD_F(0x047a86ae) /* 0.279913598 */, 19 },
7996 /* 7499 */ { MAD_F(0x047abae0) /* 0.279963375 */, 19 },
7997 /* 7500 */ { MAD_F(0x047aef12) /* 0.280013154 */, 19 },
7998 /* 7501 */ { MAD_F(0x047b2346) /* 0.280062935 */, 19 },
7999 /* 7502 */ { MAD_F(0x047b5779) /* 0.280112719 */, 19 },
8000 /* 7503 */ { MAD_F(0x047b8bad) /* 0.280162504 */, 19 },
8001
8002 /* 7504 */ { MAD_F(0x047bbfe2) /* 0.280212292 */, 19 },
8003 /* 7505 */ { MAD_F(0x047bf418) /* 0.280262082 */, 19 },
8004 /* 7506 */ { MAD_F(0x047c284e) /* 0.280311875 */, 19 },
8005 /* 7507 */ { MAD_F(0x047c5c84) /* 0.280361669 */, 19 },
8006 /* 7508 */ { MAD_F(0x047c90bb) /* 0.280411466 */, 19 },
8007 /* 7509 */ { MAD_F(0x047cc4f3) /* 0.280461265 */, 19 },
8008 /* 7510 */ { MAD_F(0x047cf92c) /* 0.280511066 */, 19 },
8009 /* 7511 */ { MAD_F(0x047d2d65) /* 0.280560869 */, 19 },
8010 /* 7512 */ { MAD_F(0x047d619e) /* 0.280610675 */, 19 },
8011 /* 7513 */ { MAD_F(0x047d95d8) /* 0.280660483 */, 19 },
8012 /* 7514 */ { MAD_F(0x047dca13) /* 0.280710292 */, 19 },
8013 /* 7515 */ { MAD_F(0x047dfe4e) /* 0.280760105 */, 19 },
8014 /* 7516 */ { MAD_F(0x047e328a) /* 0.280809919 */, 19 },
8015 /* 7517 */ { MAD_F(0x047e66c7) /* 0.280859736 */, 19 },
8016 /* 7518 */ { MAD_F(0x047e9b04) /* 0.280909554 */, 19 },
8017 /* 7519 */ { MAD_F(0x047ecf42) /* 0.280959375 */, 19 },
8018
8019 /* 7520 */ { MAD_F(0x047f0380) /* 0.281009199 */, 19 },
8020 /* 7521 */ { MAD_F(0x047f37bf) /* 0.281059024 */, 19 },
8021 /* 7522 */ { MAD_F(0x047f6bff) /* 0.281108852 */, 19 },
8022 /* 7523 */ { MAD_F(0x047fa03f) /* 0.281158682 */, 19 },
8023 /* 7524 */ { MAD_F(0x047fd47f) /* 0.281208514 */, 19 },
8024 /* 7525 */ { MAD_F(0x048008c1) /* 0.281258348 */, 19 },
8025 /* 7526 */ { MAD_F(0x04803d02) /* 0.281308184 */, 19 },
8026 /* 7527 */ { MAD_F(0x04807145) /* 0.281358023 */, 19 },
8027 /* 7528 */ { MAD_F(0x0480a588) /* 0.281407864 */, 19 },
8028 /* 7529 */ { MAD_F(0x0480d9cc) /* 0.281457707 */, 19 },
8029 /* 7530 */ { MAD_F(0x04810e10) /* 0.281507552 */, 19 },
8030 /* 7531 */ { MAD_F(0x04814255) /* 0.281557400 */, 19 },
8031 /* 7532 */ { MAD_F(0x0481769a) /* 0.281607250 */, 19 },
8032 /* 7533 */ { MAD_F(0x0481aae0) /* 0.281657101 */, 19 },
8033 /* 7534 */ { MAD_F(0x0481df27) /* 0.281706956 */, 19 },
8034 /* 7535 */ { MAD_F(0x0482136e) /* 0.281756812 */, 19 },
8035
8036 /* 7536 */ { MAD_F(0x048247b6) /* 0.281806670 */, 19 },
8037 /* 7537 */ { MAD_F(0x04827bfe) /* 0.281856531 */, 19 },
8038 /* 7538 */ { MAD_F(0x0482b047) /* 0.281906394 */, 19 },
8039 /* 7539 */ { MAD_F(0x0482e491) /* 0.281956259 */, 19 },
8040 /* 7540 */ { MAD_F(0x048318db) /* 0.282006127 */, 19 },
8041 /* 7541 */ { MAD_F(0x04834d26) /* 0.282055996 */, 19 },
8042 /* 7542 */ { MAD_F(0x04838171) /* 0.282105868 */, 19 },
8043 /* 7543 */ { MAD_F(0x0483b5bd) /* 0.282155742 */, 19 },
8044 /* 7544 */ { MAD_F(0x0483ea0a) /* 0.282205618 */, 19 },
8045 /* 7545 */ { MAD_F(0x04841e57) /* 0.282255496 */, 19 },
8046 /* 7546 */ { MAD_F(0x048452a4) /* 0.282305377 */, 19 },
8047 /* 7547 */ { MAD_F(0x048486f3) /* 0.282355260 */, 19 },
8048 /* 7548 */ { MAD_F(0x0484bb42) /* 0.282405145 */, 19 },
8049 /* 7549 */ { MAD_F(0x0484ef91) /* 0.282455032 */, 19 },
8050 /* 7550 */ { MAD_F(0x048523e1) /* 0.282504921 */, 19 },
8051 /* 7551 */ { MAD_F(0x04855832) /* 0.282554813 */, 19 },
8052
8053 /* 7552 */ { MAD_F(0x04858c83) /* 0.282604707 */, 19 },
8054 /* 7553 */ { MAD_F(0x0485c0d5) /* 0.282654603 */, 19 },
8055 /* 7554 */ { MAD_F(0x0485f527) /* 0.282704501 */, 19 },
8056 /* 7555 */ { MAD_F(0x0486297a) /* 0.282754401 */, 19 },
8057 /* 7556 */ { MAD_F(0x04865dce) /* 0.282804304 */, 19 },
8058 /* 7557 */ { MAD_F(0x04869222) /* 0.282854209 */, 19 },
8059 /* 7558 */ { MAD_F(0x0486c677) /* 0.282904116 */, 19 },
8060 /* 7559 */ { MAD_F(0x0486facc) /* 0.282954025 */, 19 },
8061 /* 7560 */ { MAD_F(0x04872f22) /* 0.283003936 */, 19 },
8062 /* 7561 */ { MAD_F(0x04876379) /* 0.283053850 */, 19 },
8063 /* 7562 */ { MAD_F(0x048797d0) /* 0.283103766 */, 19 },
8064 /* 7563 */ { MAD_F(0x0487cc28) /* 0.283153684 */, 19 },
8065 /* 7564 */ { MAD_F(0x04880080) /* 0.283203604 */, 19 },
8066 /* 7565 */ { MAD_F(0x048834d9) /* 0.283253527 */, 19 },
8067 /* 7566 */ { MAD_F(0x04886933) /* 0.283303451 */, 19 },
8068 /* 7567 */ { MAD_F(0x04889d8d) /* 0.283353378 */, 19 },
8069
8070 /* 7568 */ { MAD_F(0x0488d1e8) /* 0.283403307 */, 19 },
8071 /* 7569 */ { MAD_F(0x04890643) /* 0.283453238 */, 19 },
8072 /* 7570 */ { MAD_F(0x04893a9f) /* 0.283503172 */, 19 },
8073 /* 7571 */ { MAD_F(0x04896efb) /* 0.283553107 */, 19 },
8074 /* 7572 */ { MAD_F(0x0489a358) /* 0.283603045 */, 19 },
8075 /* 7573 */ { MAD_F(0x0489d7b6) /* 0.283652985 */, 19 },
8076 /* 7574 */ { MAD_F(0x048a0c14) /* 0.283702927 */, 19 },
8077 /* 7575 */ { MAD_F(0x048a4073) /* 0.283752872 */, 19 },
8078 /* 7576 */ { MAD_F(0x048a74d3) /* 0.283802818 */, 19 },
8079 /* 7577 */ { MAD_F(0x048aa933) /* 0.283852767 */, 19 },
8080 /* 7578 */ { MAD_F(0x048add93) /* 0.283902718 */, 19 },
8081 /* 7579 */ { MAD_F(0x048b11f5) /* 0.283952671 */, 19 },
8082 /* 7580 */ { MAD_F(0x048b4656) /* 0.284002627 */, 19 },
8083 /* 7581 */ { MAD_F(0x048b7ab9) /* 0.284052584 */, 19 },
8084 /* 7582 */ { MAD_F(0x048baf1c) /* 0.284102544 */, 19 },
8085 /* 7583 */ { MAD_F(0x048be37f) /* 0.284152506 */, 19 },
8086
8087 /* 7584 */ { MAD_F(0x048c17e3) /* 0.284202470 */, 19 },
8088 /* 7585 */ { MAD_F(0x048c4c48) /* 0.284252436 */, 19 },
8089 /* 7586 */ { MAD_F(0x048c80ad) /* 0.284302405 */, 19 },
8090 /* 7587 */ { MAD_F(0x048cb513) /* 0.284352376 */, 19 },
8091 /* 7588 */ { MAD_F(0x048ce97a) /* 0.284402349 */, 19 },
8092 /* 7589 */ { MAD_F(0x048d1de1) /* 0.284452324 */, 19 },
8093 /* 7590 */ { MAD_F(0x048d5249) /* 0.284502301 */, 19 },
8094 /* 7591 */ { MAD_F(0x048d86b1) /* 0.284552281 */, 19 },
8095 /* 7592 */ { MAD_F(0x048dbb1a) /* 0.284602263 */, 19 },
8096 /* 7593 */ { MAD_F(0x048def83) /* 0.284652246 */, 19 },
8097 /* 7594 */ { MAD_F(0x048e23ed) /* 0.284702233 */, 19 },
8098 /* 7595 */ { MAD_F(0x048e5858) /* 0.284752221 */, 19 },
8099 /* 7596 */ { MAD_F(0x048e8cc3) /* 0.284802211 */, 19 },
8100 /* 7597 */ { MAD_F(0x048ec12f) /* 0.284852204 */, 19 },
8101 /* 7598 */ { MAD_F(0x048ef59b) /* 0.284902199 */, 19 },
8102 /* 7599 */ { MAD_F(0x048f2a08) /* 0.284952196 */, 19 },
8103
8104 /* 7600 */ { MAD_F(0x048f5e76) /* 0.285002195 */, 19 },
8105 /* 7601 */ { MAD_F(0x048f92e4) /* 0.285052197 */, 19 },
8106 /* 7602 */ { MAD_F(0x048fc753) /* 0.285102201 */, 19 },
8107 /* 7603 */ { MAD_F(0x048ffbc2) /* 0.285152206 */, 19 },
8108 /* 7604 */ { MAD_F(0x04903032) /* 0.285202214 */, 19 },
8109 /* 7605 */ { MAD_F(0x049064a3) /* 0.285252225 */, 19 },
8110 /* 7606 */ { MAD_F(0x04909914) /* 0.285302237 */, 19 },
8111 /* 7607 */ { MAD_F(0x0490cd86) /* 0.285352252 */, 19 },
8112 /* 7608 */ { MAD_F(0x049101f8) /* 0.285402269 */, 19 },
8113 /* 7609 */ { MAD_F(0x0491366b) /* 0.285452288 */, 19 },
8114 /* 7610 */ { MAD_F(0x04916ade) /* 0.285502309 */, 19 },
8115 /* 7611 */ { MAD_F(0x04919f52) /* 0.285552332 */, 19 },
8116 /* 7612 */ { MAD_F(0x0491d3c7) /* 0.285602358 */, 19 },
8117 /* 7613 */ { MAD_F(0x0492083c) /* 0.285652386 */, 19 },
8118 /* 7614 */ { MAD_F(0x04923cb2) /* 0.285702416 */, 19 },
8119 /* 7615 */ { MAD_F(0x04927128) /* 0.285752448 */, 19 },
8120
8121 /* 7616 */ { MAD_F(0x0492a59f) /* 0.285802482 */, 19 },
8122 /* 7617 */ { MAD_F(0x0492da17) /* 0.285852519 */, 19 },
8123 /* 7618 */ { MAD_F(0x04930e8f) /* 0.285902557 */, 19 },
8124 /* 7619 */ { MAD_F(0x04934308) /* 0.285952598 */, 19 },
8125 /* 7620 */ { MAD_F(0x04937781) /* 0.286002641 */, 19 },
8126 /* 7621 */ { MAD_F(0x0493abfb) /* 0.286052687 */, 19 },
8127 /* 7622 */ { MAD_F(0x0493e076) /* 0.286102734 */, 19 },
8128 /* 7623 */ { MAD_F(0x049414f1) /* 0.286152784 */, 19 },
8129 /* 7624 */ { MAD_F(0x0494496c) /* 0.286202836 */, 19 },
8130 /* 7625 */ { MAD_F(0x04947de9) /* 0.286252890 */, 19 },
8131 /* 7626 */ { MAD_F(0x0494b266) /* 0.286302946 */, 19 },
8132 /* 7627 */ { MAD_F(0x0494e6e3) /* 0.286353005 */, 19 },
8133 /* 7628 */ { MAD_F(0x04951b61) /* 0.286403065 */, 19 },
8134 /* 7629 */ { MAD_F(0x04954fe0) /* 0.286453128 */, 19 },
8135 /* 7630 */ { MAD_F(0x0495845f) /* 0.286503193 */, 19 },
8136 /* 7631 */ { MAD_F(0x0495b8df) /* 0.286553260 */, 19 },
8137
8138 /* 7632 */ { MAD_F(0x0495ed5f) /* 0.286603329 */, 19 },
8139 /* 7633 */ { MAD_F(0x049621e0) /* 0.286653401 */, 19 },
8140 /* 7634 */ { MAD_F(0x04965662) /* 0.286703475 */, 19 },
8141 /* 7635 */ { MAD_F(0x04968ae4) /* 0.286753551 */, 19 },
8142 /* 7636 */ { MAD_F(0x0496bf67) /* 0.286803629 */, 19 },
8143 /* 7637 */ { MAD_F(0x0496f3ea) /* 0.286853709 */, 19 },
8144 /* 7638 */ { MAD_F(0x0497286e) /* 0.286903792 */, 19 },
8145 /* 7639 */ { MAD_F(0x04975cf2) /* 0.286953876 */, 19 },
8146 /* 7640 */ { MAD_F(0x04979177) /* 0.287003963 */, 19 },
8147 /* 7641 */ { MAD_F(0x0497c5fd) /* 0.287054052 */, 19 },
8148 /* 7642 */ { MAD_F(0x0497fa83) /* 0.287104143 */, 19 },
8149 /* 7643 */ { MAD_F(0x04982f0a) /* 0.287154237 */, 19 },
8150 /* 7644 */ { MAD_F(0x04986392) /* 0.287204332 */, 19 },
8151 /* 7645 */ { MAD_F(0x0498981a) /* 0.287254430 */, 19 },
8152 /* 7646 */ { MAD_F(0x0498cca2) /* 0.287304530 */, 19 },
8153 /* 7647 */ { MAD_F(0x0499012c) /* 0.287354632 */, 19 },
8154
8155 /* 7648 */ { MAD_F(0x049935b5) /* 0.287404737 */, 19 },
8156 /* 7649 */ { MAD_F(0x04996a40) /* 0.287454843 */, 19 },
8157 /* 7650 */ { MAD_F(0x04999ecb) /* 0.287504952 */, 19 },
8158 /* 7651 */ { MAD_F(0x0499d356) /* 0.287555063 */, 19 },
8159 /* 7652 */ { MAD_F(0x049a07e2) /* 0.287605176 */, 19 },
8160 /* 7653 */ { MAD_F(0x049a3c6f) /* 0.287655291 */, 19 },
8161 /* 7654 */ { MAD_F(0x049a70fc) /* 0.287705409 */, 19 },
8162 /* 7655 */ { MAD_F(0x049aa58a) /* 0.287755528 */, 19 },
8163 /* 7656 */ { MAD_F(0x049ada19) /* 0.287805650 */, 19 },
8164 /* 7657 */ { MAD_F(0x049b0ea8) /* 0.287855774 */, 19 },
8165 /* 7658 */ { MAD_F(0x049b4337) /* 0.287905900 */, 19 },
8166 /* 7659 */ { MAD_F(0x049b77c8) /* 0.287956028 */, 19 },
8167 /* 7660 */ { MAD_F(0x049bac58) /* 0.288006159 */, 19 },
8168 /* 7661 */ { MAD_F(0x049be0ea) /* 0.288056292 */, 19 },
8169 /* 7662 */ { MAD_F(0x049c157c) /* 0.288106427 */, 19 },
8170 /* 7663 */ { MAD_F(0x049c4a0e) /* 0.288156564 */, 19 },
8171
8172 /* 7664 */ { MAD_F(0x049c7ea1) /* 0.288206703 */, 19 },
8173 /* 7665 */ { MAD_F(0x049cb335) /* 0.288256844 */, 19 },
8174 /* 7666 */ { MAD_F(0x049ce7ca) /* 0.288306988 */, 19 },
8175 /* 7667 */ { MAD_F(0x049d1c5e) /* 0.288357134 */, 19 },
8176 /* 7668 */ { MAD_F(0x049d50f4) /* 0.288407282 */, 19 },
8177 /* 7669 */ { MAD_F(0x049d858a) /* 0.288457432 */, 19 },
8178 /* 7670 */ { MAD_F(0x049dba21) /* 0.288507584 */, 19 },
8179 /* 7671 */ { MAD_F(0x049deeb8) /* 0.288557739 */, 19 },
8180 /* 7672 */ { MAD_F(0x049e2350) /* 0.288607895 */, 19 },
8181 /* 7673 */ { MAD_F(0x049e57e8) /* 0.288658054 */, 19 },
8182 /* 7674 */ { MAD_F(0x049e8c81) /* 0.288708215 */, 19 },
8183 /* 7675 */ { MAD_F(0x049ec11b) /* 0.288758379 */, 19 },
8184 /* 7676 */ { MAD_F(0x049ef5b5) /* 0.288808544 */, 19 },
8185 /* 7677 */ { MAD_F(0x049f2a50) /* 0.288858712 */, 19 },
8186 /* 7678 */ { MAD_F(0x049f5eeb) /* 0.288908881 */, 19 },
8187 /* 7679 */ { MAD_F(0x049f9387) /* 0.288959053 */, 19 },
8188
8189 /* 7680 */ { MAD_F(0x049fc824) /* 0.289009227 */, 19 },
8190 /* 7681 */ { MAD_F(0x049ffcc1) /* 0.289059404 */, 19 },
8191 /* 7682 */ { MAD_F(0x04a0315e) /* 0.289109582 */, 19 },
8192 /* 7683 */ { MAD_F(0x04a065fd) /* 0.289159763 */, 19 },
8193 /* 7684 */ { MAD_F(0x04a09a9b) /* 0.289209946 */, 19 },
8194 /* 7685 */ { MAD_F(0x04a0cf3b) /* 0.289260131 */, 19 },
8195 /* 7686 */ { MAD_F(0x04a103db) /* 0.289310318 */, 19 },
8196 /* 7687 */ { MAD_F(0x04a1387b) /* 0.289360507 */, 19 },
8197 /* 7688 */ { MAD_F(0x04a16d1d) /* 0.289410699 */, 19 },
8198 /* 7689 */ { MAD_F(0x04a1a1be) /* 0.289460893 */, 19 },
8199 /* 7690 */ { MAD_F(0x04a1d661) /* 0.289511088 */, 19 },
8200 /* 7691 */ { MAD_F(0x04a20b04) /* 0.289561287 */, 19 },
8201 /* 7692 */ { MAD_F(0x04a23fa7) /* 0.289611487 */, 19 },
8202 /* 7693 */ { MAD_F(0x04a2744b) /* 0.289661689 */, 19 },
8203 /* 7694 */ { MAD_F(0x04a2a8f0) /* 0.289711894 */, 19 },
8204 /* 7695 */ { MAD_F(0x04a2dd95) /* 0.289762101 */, 19 },
8205
8206 /* 7696 */ { MAD_F(0x04a3123b) /* 0.289812309 */, 19 },
8207 /* 7697 */ { MAD_F(0x04a346e2) /* 0.289862521 */, 19 },
8208 /* 7698 */ { MAD_F(0x04a37b89) /* 0.289912734 */, 19 },
8209 /* 7699 */ { MAD_F(0x04a3b030) /* 0.289962949 */, 19 },
8210 /* 7700 */ { MAD_F(0x04a3e4d8) /* 0.290013167 */, 19 },
8211 /* 7701 */ { MAD_F(0x04a41981) /* 0.290063387 */, 19 },
8212 /* 7702 */ { MAD_F(0x04a44e2b) /* 0.290113609 */, 19 },
8213 /* 7703 */ { MAD_F(0x04a482d5) /* 0.290163833 */, 19 },
8214 /* 7704 */ { MAD_F(0x04a4b77f) /* 0.290214059 */, 19 },
8215 /* 7705 */ { MAD_F(0x04a4ec2a) /* 0.290264288 */, 19 },
8216 /* 7706 */ { MAD_F(0x04a520d6) /* 0.290314519 */, 19 },
8217 /* 7707 */ { MAD_F(0x04a55582) /* 0.290364751 */, 19 },
8218 /* 7708 */ { MAD_F(0x04a58a2f) /* 0.290414986 */, 19 },
8219 /* 7709 */ { MAD_F(0x04a5bedd) /* 0.290465224 */, 19 },
8220 /* 7710 */ { MAD_F(0x04a5f38b) /* 0.290515463 */, 19 },
8221 /* 7711 */ { MAD_F(0x04a62839) /* 0.290565705 */, 19 },
8222
8223 /* 7712 */ { MAD_F(0x04a65ce8) /* 0.290615948 */, 19 },
8224 /* 7713 */ { MAD_F(0x04a69198) /* 0.290666194 */, 19 },
8225 /* 7714 */ { MAD_F(0x04a6c648) /* 0.290716442 */, 19 },
8226 /* 7715 */ { MAD_F(0x04a6faf9) /* 0.290766692 */, 19 },
8227 /* 7716 */ { MAD_F(0x04a72fab) /* 0.290816945 */, 19 },
8228 /* 7717 */ { MAD_F(0x04a7645d) /* 0.290867199 */, 19 },
8229 /* 7718 */ { MAD_F(0x04a79910) /* 0.290917456 */, 19 },
8230 /* 7719 */ { MAD_F(0x04a7cdc3) /* 0.290967715 */, 19 },
8231 /* 7720 */ { MAD_F(0x04a80277) /* 0.291017976 */, 19 },
8232 /* 7721 */ { MAD_F(0x04a8372b) /* 0.291068239 */, 19 },
8233 /* 7722 */ { MAD_F(0x04a86be0) /* 0.291118505 */, 19 },
8234 /* 7723 */ { MAD_F(0x04a8a096) /* 0.291168772 */, 19 },
8235 /* 7724 */ { MAD_F(0x04a8d54c) /* 0.291219042 */, 19 },
8236 /* 7725 */ { MAD_F(0x04a90a03) /* 0.291269314 */, 19 },
8237 /* 7726 */ { MAD_F(0x04a93eba) /* 0.291319588 */, 19 },
8238 /* 7727 */ { MAD_F(0x04a97372) /* 0.291369865 */, 19 },
8239
8240 /* 7728 */ { MAD_F(0x04a9a82b) /* 0.291420143 */, 19 },
8241 /* 7729 */ { MAD_F(0x04a9dce4) /* 0.291470424 */, 19 },
8242 /* 7730 */ { MAD_F(0x04aa119d) /* 0.291520706 */, 19 },
8243 /* 7731 */ { MAD_F(0x04aa4658) /* 0.291570991 */, 19 },
8244 /* 7732 */ { MAD_F(0x04aa7b13) /* 0.291621278 */, 19 },
8245 /* 7733 */ { MAD_F(0x04aaafce) /* 0.291671568 */, 19 },
8246 /* 7734 */ { MAD_F(0x04aae48a) /* 0.291721859 */, 19 },
8247 /* 7735 */ { MAD_F(0x04ab1947) /* 0.291772153 */, 19 },
8248 /* 7736 */ { MAD_F(0x04ab4e04) /* 0.291822449 */, 19 },
8249 /* 7737 */ { MAD_F(0x04ab82c2) /* 0.291872747 */, 19 },
8250 /* 7738 */ { MAD_F(0x04abb780) /* 0.291923047 */, 19 },
8251 /* 7739 */ { MAD_F(0x04abec3f) /* 0.291973349 */, 19 },
8252 /* 7740 */ { MAD_F(0x04ac20fe) /* 0.292023653 */, 19 },
8253 /* 7741 */ { MAD_F(0x04ac55be) /* 0.292073960 */, 19 },
8254 /* 7742 */ { MAD_F(0x04ac8a7f) /* 0.292124269 */, 19 },
8255 /* 7743 */ { MAD_F(0x04acbf40) /* 0.292174580 */, 19 },
8256
8257 /* 7744 */ { MAD_F(0x04acf402) /* 0.292224893 */, 19 },
8258 /* 7745 */ { MAD_F(0x04ad28c5) /* 0.292275208 */, 19 },
8259 /* 7746 */ { MAD_F(0x04ad5d88) /* 0.292325526 */, 19 },
8260 /* 7747 */ { MAD_F(0x04ad924b) /* 0.292375845 */, 19 },
8261 /* 7748 */ { MAD_F(0x04adc70f) /* 0.292426167 */, 19 },
8262 /* 7749 */ { MAD_F(0x04adfbd4) /* 0.292476491 */, 19 },
8263 /* 7750 */ { MAD_F(0x04ae3099) /* 0.292526817 */, 19 },
8264 /* 7751 */ { MAD_F(0x04ae655f) /* 0.292577145 */, 19 },
8265 /* 7752 */ { MAD_F(0x04ae9a26) /* 0.292627476 */, 19 },
8266 /* 7753 */ { MAD_F(0x04aeceed) /* 0.292677808 */, 19 },
8267 /* 7754 */ { MAD_F(0x04af03b4) /* 0.292728143 */, 19 },
8268 /* 7755 */ { MAD_F(0x04af387d) /* 0.292778480 */, 19 },
8269 /* 7756 */ { MAD_F(0x04af6d45) /* 0.292828819 */, 19 },
8270 /* 7757 */ { MAD_F(0x04afa20f) /* 0.292879160 */, 19 },
8271 /* 7758 */ { MAD_F(0x04afd6d9) /* 0.292929504 */, 19 },
8272 /* 7759 */ { MAD_F(0x04b00ba3) /* 0.292979849 */, 19 },
8273
8274 /* 7760 */ { MAD_F(0x04b0406e) /* 0.293030197 */, 19 },
8275 /* 7761 */ { MAD_F(0x04b0753a) /* 0.293080547 */, 19 },
8276 /* 7762 */ { MAD_F(0x04b0aa06) /* 0.293130899 */, 19 },
8277 /* 7763 */ { MAD_F(0x04b0ded3) /* 0.293181253 */, 19 },
8278 /* 7764 */ { MAD_F(0x04b113a1) /* 0.293231610 */, 19 },
8279 /* 7765 */ { MAD_F(0x04b1486f) /* 0.293281968 */, 19 },
8280 /* 7766 */ { MAD_F(0x04b17d3d) /* 0.293332329 */, 19 },
8281 /* 7767 */ { MAD_F(0x04b1b20c) /* 0.293382692 */, 19 },
8282 /* 7768 */ { MAD_F(0x04b1e6dc) /* 0.293433057 */, 19 },
8283 /* 7769 */ { MAD_F(0x04b21bad) /* 0.293483424 */, 19 },
8284 /* 7770 */ { MAD_F(0x04b2507d) /* 0.293533794 */, 19 },
8285 /* 7771 */ { MAD_F(0x04b2854f) /* 0.293584165 */, 19 },
8286 /* 7772 */ { MAD_F(0x04b2ba21) /* 0.293634539 */, 19 },
8287 /* 7773 */ { MAD_F(0x04b2eef4) /* 0.293684915 */, 19 },
8288 /* 7774 */ { MAD_F(0x04b323c7) /* 0.293735293 */, 19 },
8289 /* 7775 */ { MAD_F(0x04b3589b) /* 0.293785673 */, 19 },
8290
8291 /* 7776 */ { MAD_F(0x04b38d6f) /* 0.293836055 */, 19 },
8292 /* 7777 */ { MAD_F(0x04b3c244) /* 0.293886440 */, 19 },
8293 /* 7778 */ { MAD_F(0x04b3f71a) /* 0.293936826 */, 19 },
8294 /* 7779 */ { MAD_F(0x04b42bf0) /* 0.293987215 */, 19 },
8295 /* 7780 */ { MAD_F(0x04b460c7) /* 0.294037606 */, 19 },
8296 /* 7781 */ { MAD_F(0x04b4959e) /* 0.294087999 */, 19 },
8297 /* 7782 */ { MAD_F(0x04b4ca76) /* 0.294138395 */, 19 },
8298 /* 7783 */ { MAD_F(0x04b4ff4e) /* 0.294188792 */, 19 },
8299 /* 7784 */ { MAD_F(0x04b53427) /* 0.294239192 */, 19 },
8300 /* 7785 */ { MAD_F(0x04b56901) /* 0.294289593 */, 19 },
8301 /* 7786 */ { MAD_F(0x04b59ddb) /* 0.294339997 */, 19 },
8302 /* 7787 */ { MAD_F(0x04b5d2b6) /* 0.294390403 */, 19 },
8303 /* 7788 */ { MAD_F(0x04b60791) /* 0.294440812 */, 19 },
8304 /* 7789 */ { MAD_F(0x04b63c6d) /* 0.294491222 */, 19 },
8305 /* 7790 */ { MAD_F(0x04b6714a) /* 0.294541635 */, 19 },
8306 /* 7791 */ { MAD_F(0x04b6a627) /* 0.294592049 */, 19 },
8307
8308 /* 7792 */ { MAD_F(0x04b6db05) /* 0.294642466 */, 19 },
8309 /* 7793 */ { MAD_F(0x04b70fe3) /* 0.294692885 */, 19 },
8310 /* 7794 */ { MAD_F(0x04b744c2) /* 0.294743306 */, 19 },
8311 /* 7795 */ { MAD_F(0x04b779a1) /* 0.294793730 */, 19 },
8312 /* 7796 */ { MAD_F(0x04b7ae81) /* 0.294844155 */, 19 },
8313 /* 7797 */ { MAD_F(0x04b7e362) /* 0.294894583 */, 19 },
8314 /* 7798 */ { MAD_F(0x04b81843) /* 0.294945013 */, 19 },
8315 /* 7799 */ { MAD_F(0x04b84d24) /* 0.294995445 */, 19 },
8316 /* 7800 */ { MAD_F(0x04b88207) /* 0.295045879 */, 19 },
8317 /* 7801 */ { MAD_F(0x04b8b6ea) /* 0.295096315 */, 19 },
8318 /* 7802 */ { MAD_F(0x04b8ebcd) /* 0.295146753 */, 19 },
8319 /* 7803 */ { MAD_F(0x04b920b1) /* 0.295197194 */, 19 },
8320 /* 7804 */ { MAD_F(0x04b95596) /* 0.295247637 */, 19 },
8321 /* 7805 */ { MAD_F(0x04b98a7b) /* 0.295298082 */, 19 },
8322 /* 7806 */ { MAD_F(0x04b9bf61) /* 0.295348529 */, 19 },
8323 /* 7807 */ { MAD_F(0x04b9f447) /* 0.295398978 */, 19 },
8324
8325 /* 7808 */ { MAD_F(0x04ba292e) /* 0.295449429 */, 19 },
8326 /* 7809 */ { MAD_F(0x04ba5e16) /* 0.295499883 */, 19 },
8327 /* 7810 */ { MAD_F(0x04ba92fe) /* 0.295550338 */, 19 },
8328 /* 7811 */ { MAD_F(0x04bac7e6) /* 0.295600796 */, 19 },
8329 /* 7812 */ { MAD_F(0x04bafcd0) /* 0.295651256 */, 19 },
8330 /* 7813 */ { MAD_F(0x04bb31b9) /* 0.295701718 */, 19 },
8331 /* 7814 */ { MAD_F(0x04bb66a4) /* 0.295752183 */, 19 },
8332 /* 7815 */ { MAD_F(0x04bb9b8f) /* 0.295802649 */, 19 },
8333 /* 7816 */ { MAD_F(0x04bbd07a) /* 0.295853118 */, 19 },
8334 /* 7817 */ { MAD_F(0x04bc0566) /* 0.295903588 */, 19 },
8335 /* 7818 */ { MAD_F(0x04bc3a53) /* 0.295954061 */, 19 },
8336 /* 7819 */ { MAD_F(0x04bc6f40) /* 0.296004536 */, 19 },
8337 /* 7820 */ { MAD_F(0x04bca42e) /* 0.296055013 */, 19 },
8338 /* 7821 */ { MAD_F(0x04bcd91d) /* 0.296105493 */, 19 },
8339 /* 7822 */ { MAD_F(0x04bd0e0c) /* 0.296155974 */, 19 },
8340 /* 7823 */ { MAD_F(0x04bd42fb) /* 0.296206458 */, 19 },
8341
8342 /* 7824 */ { MAD_F(0x04bd77ec) /* 0.296256944 */, 19 },
8343 /* 7825 */ { MAD_F(0x04bdacdc) /* 0.296307432 */, 19 },
8344 /* 7826 */ { MAD_F(0x04bde1ce) /* 0.296357922 */, 19 },
8345 /* 7827 */ { MAD_F(0x04be16c0) /* 0.296408414 */, 19 },
8346 /* 7828 */ { MAD_F(0x04be4bb2) /* 0.296458908 */, 19 },
8347 /* 7829 */ { MAD_F(0x04be80a5) /* 0.296509405 */, 19 },
8348 /* 7830 */ { MAD_F(0x04beb599) /* 0.296559904 */, 19 },
8349 /* 7831 */ { MAD_F(0x04beea8d) /* 0.296610404 */, 19 },
8350 /* 7832 */ { MAD_F(0x04bf1f82) /* 0.296660907 */, 19 },
8351 /* 7833 */ { MAD_F(0x04bf5477) /* 0.296711413 */, 19 },
8352 /* 7834 */ { MAD_F(0x04bf896d) /* 0.296761920 */, 19 },
8353 /* 7835 */ { MAD_F(0x04bfbe64) /* 0.296812429 */, 19 },
8354 /* 7836 */ { MAD_F(0x04bff35b) /* 0.296862941 */, 19 },
8355 /* 7837 */ { MAD_F(0x04c02852) /* 0.296913455 */, 19 },
8356 /* 7838 */ { MAD_F(0x04c05d4b) /* 0.296963971 */, 19 },
8357 /* 7839 */ { MAD_F(0x04c09243) /* 0.297014489 */, 19 },
8358
8359 /* 7840 */ { MAD_F(0x04c0c73d) /* 0.297065009 */, 19 },
8360 /* 7841 */ { MAD_F(0x04c0fc37) /* 0.297115531 */, 19 },
8361 /* 7842 */ { MAD_F(0x04c13131) /* 0.297166056 */, 19 },
8362 /* 7843 */ { MAD_F(0x04c1662d) /* 0.297216582 */, 19 },
8363 /* 7844 */ { MAD_F(0x04c19b28) /* 0.297267111 */, 19 },
8364 /* 7845 */ { MAD_F(0x04c1d025) /* 0.297317642 */, 19 },
8365 /* 7846 */ { MAD_F(0x04c20521) /* 0.297368175 */, 19 },
8366 /* 7847 */ { MAD_F(0x04c23a1f) /* 0.297418710 */, 19 },
8367 /* 7848 */ { MAD_F(0x04c26f1d) /* 0.297469248 */, 19 },
8368 /* 7849 */ { MAD_F(0x04c2a41b) /* 0.297519787 */, 19 },
8369 /* 7850 */ { MAD_F(0x04c2d91b) /* 0.297570329 */, 19 },
8370 /* 7851 */ { MAD_F(0x04c30e1a) /* 0.297620873 */, 19 },
8371 /* 7852 */ { MAD_F(0x04c3431b) /* 0.297671418 */, 19 },
8372 /* 7853 */ { MAD_F(0x04c3781c) /* 0.297721967 */, 19 },
8373 /* 7854 */ { MAD_F(0x04c3ad1d) /* 0.297772517 */, 19 },
8374 /* 7855 */ { MAD_F(0x04c3e21f) /* 0.297823069 */, 19 },
8375
8376 /* 7856 */ { MAD_F(0x04c41722) /* 0.297873624 */, 19 },
8377 /* 7857 */ { MAD_F(0x04c44c25) /* 0.297924180 */, 19 },
8378 /* 7858 */ { MAD_F(0x04c48129) /* 0.297974739 */, 19 },
8379 /* 7859 */ { MAD_F(0x04c4b62d) /* 0.298025300 */, 19 },
8380 /* 7860 */ { MAD_F(0x04c4eb32) /* 0.298075863 */, 19 },
8381 /* 7861 */ { MAD_F(0x04c52038) /* 0.298126429 */, 19 },
8382 /* 7862 */ { MAD_F(0x04c5553e) /* 0.298176996 */, 19 },
8383 /* 7863 */ { MAD_F(0x04c58a44) /* 0.298227565 */, 19 },
8384 /* 7864 */ { MAD_F(0x04c5bf4c) /* 0.298278137 */, 19 },
8385 /* 7865 */ { MAD_F(0x04c5f453) /* 0.298328711 */, 19 },
8386 /* 7866 */ { MAD_F(0x04c6295c) /* 0.298379287 */, 19 },
8387 /* 7867 */ { MAD_F(0x04c65e65) /* 0.298429865 */, 19 },
8388 /* 7868 */ { MAD_F(0x04c6936e) /* 0.298480445 */, 19 },
8389 /* 7869 */ { MAD_F(0x04c6c878) /* 0.298531028 */, 19 },
8390 /* 7870 */ { MAD_F(0x04c6fd83) /* 0.298581612 */, 19 },
8391 /* 7871 */ { MAD_F(0x04c7328e) /* 0.298632199 */, 19 },
8392
8393 /* 7872 */ { MAD_F(0x04c7679a) /* 0.298682788 */, 19 },
8394 /* 7873 */ { MAD_F(0x04c79ca7) /* 0.298733379 */, 19 },
8395 /* 7874 */ { MAD_F(0x04c7d1b4) /* 0.298783972 */, 19 },
8396 /* 7875 */ { MAD_F(0x04c806c1) /* 0.298834567 */, 19 },
8397 /* 7876 */ { MAD_F(0x04c83bcf) /* 0.298885165 */, 19 },
8398 /* 7877 */ { MAD_F(0x04c870de) /* 0.298935764 */, 19 },
8399 /* 7878 */ { MAD_F(0x04c8a5ed) /* 0.298986366 */, 19 },
8400 /* 7879 */ { MAD_F(0x04c8dafd) /* 0.299036970 */, 19 },
8401 /* 7880 */ { MAD_F(0x04c9100d) /* 0.299087576 */, 19 },
8402 /* 7881 */ { MAD_F(0x04c9451e) /* 0.299138184 */, 19 },
8403 /* 7882 */ { MAD_F(0x04c97a30) /* 0.299188794 */, 19 },
8404 /* 7883 */ { MAD_F(0x04c9af42) /* 0.299239406 */, 19 },
8405 /* 7884 */ { MAD_F(0x04c9e455) /* 0.299290021 */, 19 },
8406 /* 7885 */ { MAD_F(0x04ca1968) /* 0.299340638 */, 19 },
8407 /* 7886 */ { MAD_F(0x04ca4e7c) /* 0.299391256 */, 19 },
8408 /* 7887 */ { MAD_F(0x04ca8391) /* 0.299441877 */, 19 },
8409
8410 /* 7888 */ { MAD_F(0x04cab8a6) /* 0.299492500 */, 19 },
8411 /* 7889 */ { MAD_F(0x04caedbb) /* 0.299543126 */, 19 },
8412 /* 7890 */ { MAD_F(0x04cb22d1) /* 0.299593753 */, 19 },
8413 /* 7891 */ { MAD_F(0x04cb57e8) /* 0.299644382 */, 19 },
8414 /* 7892 */ { MAD_F(0x04cb8d00) /* 0.299695014 */, 19 },
8415 /* 7893 */ { MAD_F(0x04cbc217) /* 0.299745648 */, 19 },
8416 /* 7894 */ { MAD_F(0x04cbf730) /* 0.299796284 */, 19 },
8417 /* 7895 */ { MAD_F(0x04cc2c49) /* 0.299846922 */, 19 },
8418 /* 7896 */ { MAD_F(0x04cc6163) /* 0.299897562 */, 19 },
8419 /* 7897 */ { MAD_F(0x04cc967d) /* 0.299948204 */, 19 },
8420 /* 7898 */ { MAD_F(0x04cccb98) /* 0.299998849 */, 19 },
8421 /* 7899 */ { MAD_F(0x04cd00b3) /* 0.300049495 */, 19 },
8422 /* 7900 */ { MAD_F(0x04cd35cf) /* 0.300100144 */, 19 },
8423 /* 7901 */ { MAD_F(0x04cd6aeb) /* 0.300150795 */, 19 },
8424 /* 7902 */ { MAD_F(0x04cda008) /* 0.300201448 */, 19 },
8425 /* 7903 */ { MAD_F(0x04cdd526) /* 0.300252103 */, 19 },
8426
8427 /* 7904 */ { MAD_F(0x04ce0a44) /* 0.300302761 */, 19 },
8428 /* 7905 */ { MAD_F(0x04ce3f63) /* 0.300353420 */, 19 },
8429 /* 7906 */ { MAD_F(0x04ce7482) /* 0.300404082 */, 19 },
8430 /* 7907 */ { MAD_F(0x04cea9a2) /* 0.300454745 */, 19 },
8431 /* 7908 */ { MAD_F(0x04cedec3) /* 0.300505411 */, 19 },
8432 /* 7909 */ { MAD_F(0x04cf13e4) /* 0.300556079 */, 19 },
8433 /* 7910 */ { MAD_F(0x04cf4906) /* 0.300606749 */, 19 },
8434 /* 7911 */ { MAD_F(0x04cf7e28) /* 0.300657421 */, 19 },
8435 /* 7912 */ { MAD_F(0x04cfb34b) /* 0.300708096 */, 19 },
8436 /* 7913 */ { MAD_F(0x04cfe86e) /* 0.300758772 */, 19 },
8437 /* 7914 */ { MAD_F(0x04d01d92) /* 0.300809451 */, 19 },
8438 /* 7915 */ { MAD_F(0x04d052b6) /* 0.300860132 */, 19 },
8439 /* 7916 */ { MAD_F(0x04d087db) /* 0.300910815 */, 19 },
8440 /* 7917 */ { MAD_F(0x04d0bd01) /* 0.300961500 */, 19 },
8441 /* 7918 */ { MAD_F(0x04d0f227) /* 0.301012187 */, 19 },
8442 /* 7919 */ { MAD_F(0x04d1274e) /* 0.301062876 */, 19 },
8443
8444 /* 7920 */ { MAD_F(0x04d15c76) /* 0.301113568 */, 19 },
8445 /* 7921 */ { MAD_F(0x04d1919e) /* 0.301164261 */, 19 },
8446 /* 7922 */ { MAD_F(0x04d1c6c6) /* 0.301214957 */, 19 },
8447 /* 7923 */ { MAD_F(0x04d1fbef) /* 0.301265655 */, 19 },
8448 /* 7924 */ { MAD_F(0x04d23119) /* 0.301316355 */, 19 },
8449 /* 7925 */ { MAD_F(0x04d26643) /* 0.301367057 */, 19 },
8450 /* 7926 */ { MAD_F(0x04d29b6e) /* 0.301417761 */, 19 },
8451 /* 7927 */ { MAD_F(0x04d2d099) /* 0.301468468 */, 19 },
8452 /* 7928 */ { MAD_F(0x04d305c5) /* 0.301519176 */, 19 },
8453 /* 7929 */ { MAD_F(0x04d33af2) /* 0.301569887 */, 19 },
8454 /* 7930 */ { MAD_F(0x04d3701f) /* 0.301620599 */, 19 },
8455 /* 7931 */ { MAD_F(0x04d3a54d) /* 0.301671314 */, 19 },
8456 /* 7932 */ { MAD_F(0x04d3da7b) /* 0.301722031 */, 19 },
8457 /* 7933 */ { MAD_F(0x04d40faa) /* 0.301772751 */, 19 },
8458 /* 7934 */ { MAD_F(0x04d444d9) /* 0.301823472 */, 19 },
8459 /* 7935 */ { MAD_F(0x04d47a09) /* 0.301874195 */, 19 },
8460
8461 /* 7936 */ { MAD_F(0x04d4af3a) /* 0.301924921 */, 19 },
8462 /* 7937 */ { MAD_F(0x04d4e46b) /* 0.301975649 */, 19 },
8463 /* 7938 */ { MAD_F(0x04d5199c) /* 0.302026378 */, 19 },
8464 /* 7939 */ { MAD_F(0x04d54ecf) /* 0.302077110 */, 19 },
8465 /* 7940 */ { MAD_F(0x04d58401) /* 0.302127845 */, 19 },
8466 /* 7941 */ { MAD_F(0x04d5b935) /* 0.302178581 */, 19 },
8467 /* 7942 */ { MAD_F(0x04d5ee69) /* 0.302229319 */, 19 },
8468 /* 7943 */ { MAD_F(0x04d6239d) /* 0.302280060 */, 19 },
8469 /* 7944 */ { MAD_F(0x04d658d2) /* 0.302330802 */, 19 },
8470 /* 7945 */ { MAD_F(0x04d68e08) /* 0.302381547 */, 19 },
8471 /* 7946 */ { MAD_F(0x04d6c33e) /* 0.302432294 */, 19 },
8472 /* 7947 */ { MAD_F(0x04d6f875) /* 0.302483043 */, 19 },
8473 /* 7948 */ { MAD_F(0x04d72dad) /* 0.302533794 */, 19 },
8474 /* 7949 */ { MAD_F(0x04d762e5) /* 0.302584547 */, 19 },
8475 /* 7950 */ { MAD_F(0x04d7981d) /* 0.302635303 */, 19 },
8476 /* 7951 */ { MAD_F(0x04d7cd56) /* 0.302686060 */, 19 },
8477
8478 /* 7952 */ { MAD_F(0x04d80290) /* 0.302736820 */, 19 },
8479 /* 7953 */ { MAD_F(0x04d837ca) /* 0.302787581 */, 19 },
8480 /* 7954 */ { MAD_F(0x04d86d05) /* 0.302838345 */, 19 },
8481 /* 7955 */ { MAD_F(0x04d8a240) /* 0.302889111 */, 19 },
8482 /* 7956 */ { MAD_F(0x04d8d77c) /* 0.302939879 */, 19 },
8483 /* 7957 */ { MAD_F(0x04d90cb9) /* 0.302990650 */, 19 },
8484 /* 7958 */ { MAD_F(0x04d941f6) /* 0.303041422 */, 19 },
8485 /* 7959 */ { MAD_F(0x04d97734) /* 0.303092197 */, 19 },
8486 /* 7960 */ { MAD_F(0x04d9ac72) /* 0.303142973 */, 19 },
8487 /* 7961 */ { MAD_F(0x04d9e1b1) /* 0.303193752 */, 19 },
8488 /* 7962 */ { MAD_F(0x04da16f0) /* 0.303244533 */, 19 },
8489 /* 7963 */ { MAD_F(0x04da4c30) /* 0.303295316 */, 19 },
8490 /* 7964 */ { MAD_F(0x04da8171) /* 0.303346101 */, 19 },
8491 /* 7965 */ { MAD_F(0x04dab6b2) /* 0.303396889 */, 19 },
8492 /* 7966 */ { MAD_F(0x04daebf4) /* 0.303447678 */, 19 },
8493 /* 7967 */ { MAD_F(0x04db2136) /* 0.303498469 */, 19 },
8494
8495 /* 7968 */ { MAD_F(0x04db5679) /* 0.303549263 */, 19 },
8496 /* 7969 */ { MAD_F(0x04db8bbc) /* 0.303600059 */, 19 },
8497 /* 7970 */ { MAD_F(0x04dbc100) /* 0.303650857 */, 19 },
8498 /* 7971 */ { MAD_F(0x04dbf644) /* 0.303701657 */, 19 },
8499 /* 7972 */ { MAD_F(0x04dc2b8a) /* 0.303752459 */, 19 },
8500 /* 7973 */ { MAD_F(0x04dc60cf) /* 0.303803263 */, 19 },
8501 /* 7974 */ { MAD_F(0x04dc9616) /* 0.303854070 */, 19 },
8502 /* 7975 */ { MAD_F(0x04dccb5c) /* 0.303904878 */, 19 },
8503 /* 7976 */ { MAD_F(0x04dd00a4) /* 0.303955689 */, 19 },
8504 /* 7977 */ { MAD_F(0x04dd35ec) /* 0.304006502 */, 19 },
8505 /* 7978 */ { MAD_F(0x04dd6b34) /* 0.304057317 */, 19 },
8506 /* 7979 */ { MAD_F(0x04dda07d) /* 0.304108134 */, 19 },
8507 /* 7980 */ { MAD_F(0x04ddd5c7) /* 0.304158953 */, 19 },
8508 /* 7981 */ { MAD_F(0x04de0b11) /* 0.304209774 */, 19 },
8509 /* 7982 */ { MAD_F(0x04de405c) /* 0.304260597 */, 19 },
8510 /* 7983 */ { MAD_F(0x04de75a7) /* 0.304311423 */, 19 },
8511
8512 /* 7984 */ { MAD_F(0x04deaaf3) /* 0.304362251 */, 19 },
8513 /* 7985 */ { MAD_F(0x04dee040) /* 0.304413080 */, 19 },
8514 /* 7986 */ { MAD_F(0x04df158d) /* 0.304463912 */, 19 },
8515 /* 7987 */ { MAD_F(0x04df4adb) /* 0.304514746 */, 19 },
8516 /* 7988 */ { MAD_F(0x04df8029) /* 0.304565582 */, 19 },
8517 /* 7989 */ { MAD_F(0x04dfb578) /* 0.304616421 */, 19 },
8518 /* 7990 */ { MAD_F(0x04dfeac7) /* 0.304667261 */, 19 },
8519 /* 7991 */ { MAD_F(0x04e02017) /* 0.304718103 */, 19 },
8520 /* 7992 */ { MAD_F(0x04e05567) /* 0.304768948 */, 19 },
8521 /* 7993 */ { MAD_F(0x04e08ab8) /* 0.304819795 */, 19 },
8522 /* 7994 */ { MAD_F(0x04e0c00a) /* 0.304870644 */, 19 },
8523 /* 7995 */ { MAD_F(0x04e0f55c) /* 0.304921495 */, 19 },
8524 /* 7996 */ { MAD_F(0x04e12aaf) /* 0.304972348 */, 19 },
8525 /* 7997 */ { MAD_F(0x04e16002) /* 0.305023203 */, 19 },
8526 /* 7998 */ { MAD_F(0x04e19556) /* 0.305074060 */, 19 },
8527 /* 7999 */ { MAD_F(0x04e1caab) /* 0.305124920 */, 19 },
8528
8529 /* 8000 */ { MAD_F(0x04e20000) /* 0.305175781 */, 19 },
8530 /* 8001 */ { MAD_F(0x04e23555) /* 0.305226645 */, 19 },
8531 /* 8002 */ { MAD_F(0x04e26aac) /* 0.305277511 */, 19 },
8532 /* 8003 */ { MAD_F(0x04e2a002) /* 0.305328379 */, 19 },
8533 /* 8004 */ { MAD_F(0x04e2d55a) /* 0.305379249 */, 19 },
8534 /* 8005 */ { MAD_F(0x04e30ab2) /* 0.305430121 */, 19 },
8535 /* 8006 */ { MAD_F(0x04e3400a) /* 0.305480995 */, 19 },
8536 /* 8007 */ { MAD_F(0x04e37563) /* 0.305531872 */, 19 },
8537 /* 8008 */ { MAD_F(0x04e3aabd) /* 0.305582750 */, 19 },
8538 /* 8009 */ { MAD_F(0x04e3e017) /* 0.305633631 */, 19 },
8539 /* 8010 */ { MAD_F(0x04e41572) /* 0.305684513 */, 19 },
8540 /* 8011 */ { MAD_F(0x04e44acd) /* 0.305735398 */, 19 },
8541 /* 8012 */ { MAD_F(0x04e48029) /* 0.305786285 */, 19 },
8542 /* 8013 */ { MAD_F(0x04e4b585) /* 0.305837174 */, 19 },
8543 /* 8014 */ { MAD_F(0x04e4eae2) /* 0.305888066 */, 19 },
8544 /* 8015 */ { MAD_F(0x04e52040) /* 0.305938959 */, 19 },
8545
8546 /* 8016 */ { MAD_F(0x04e5559e) /* 0.305989854 */, 19 },
8547 /* 8017 */ { MAD_F(0x04e58afd) /* 0.306040752 */, 19 },
8548 /* 8018 */ { MAD_F(0x04e5c05c) /* 0.306091652 */, 19 },
8549 /* 8019 */ { MAD_F(0x04e5f5bc) /* 0.306142554 */, 19 },
8550 /* 8020 */ { MAD_F(0x04e62b1c) /* 0.306193457 */, 19 },
8551 /* 8021 */ { MAD_F(0x04e6607d) /* 0.306244364 */, 19 },
8552 /* 8022 */ { MAD_F(0x04e695df) /* 0.306295272 */, 19 },
8553 /* 8023 */ { MAD_F(0x04e6cb41) /* 0.306346182 */, 19 },
8554 /* 8024 */ { MAD_F(0x04e700a3) /* 0.306397094 */, 19 },
8555 /* 8025 */ { MAD_F(0x04e73607) /* 0.306448009 */, 19 },
8556 /* 8026 */ { MAD_F(0x04e76b6b) /* 0.306498925 */, 19 },
8557 /* 8027 */ { MAD_F(0x04e7a0cf) /* 0.306549844 */, 19 },
8558 /* 8028 */ { MAD_F(0x04e7d634) /* 0.306600765 */, 19 },
8559 /* 8029 */ { MAD_F(0x04e80b99) /* 0.306651688 */, 19 },
8560 /* 8030 */ { MAD_F(0x04e84100) /* 0.306702613 */, 19 },
8561 /* 8031 */ { MAD_F(0x04e87666) /* 0.306753540 */, 19 },
8562
8563 /* 8032 */ { MAD_F(0x04e8abcd) /* 0.306804470 */, 19 },
8564 /* 8033 */ { MAD_F(0x04e8e135) /* 0.306855401 */, 19 },
8565 /* 8034 */ { MAD_F(0x04e9169e) /* 0.306906334 */, 19 },
8566 /* 8035 */ { MAD_F(0x04e94c07) /* 0.306957270 */, 19 },
8567 /* 8036 */ { MAD_F(0x04e98170) /* 0.307008208 */, 19 },
8568 /* 8037 */ { MAD_F(0x04e9b6da) /* 0.307059148 */, 19 },
8569 /* 8038 */ { MAD_F(0x04e9ec45) /* 0.307110090 */, 19 },
8570 /* 8039 */ { MAD_F(0x04ea21b0) /* 0.307161034 */, 19 },
8571 /* 8040 */ { MAD_F(0x04ea571c) /* 0.307211980 */, 19 },
8572 /* 8041 */ { MAD_F(0x04ea8c88) /* 0.307262928 */, 19 },
8573 /* 8042 */ { MAD_F(0x04eac1f5) /* 0.307313879 */, 19 },
8574 /* 8043 */ { MAD_F(0x04eaf762) /* 0.307364831 */, 19 },
8575 /* 8044 */ { MAD_F(0x04eb2cd0) /* 0.307415786 */, 19 },
8576 /* 8045 */ { MAD_F(0x04eb623f) /* 0.307466743 */, 19 },
8577 /* 8046 */ { MAD_F(0x04eb97ae) /* 0.307517702 */, 19 },
8578 /* 8047 */ { MAD_F(0x04ebcd1e) /* 0.307568663 */, 19 },
8579
8580 /* 8048 */ { MAD_F(0x04ec028e) /* 0.307619626 */, 19 },
8581 /* 8049 */ { MAD_F(0x04ec37ff) /* 0.307670591 */, 19 },
8582 /* 8050 */ { MAD_F(0x04ec6d71) /* 0.307721558 */, 19 },
8583 /* 8051 */ { MAD_F(0x04eca2e3) /* 0.307772528 */, 19 },
8584 /* 8052 */ { MAD_F(0x04ecd855) /* 0.307823499 */, 19 },
8585 /* 8053 */ { MAD_F(0x04ed0dc8) /* 0.307874473 */, 19 },
8586 /* 8054 */ { MAD_F(0x04ed433c) /* 0.307925449 */, 19 },
8587 /* 8055 */ { MAD_F(0x04ed78b0) /* 0.307976426 */, 19 },
8588 /* 8056 */ { MAD_F(0x04edae25) /* 0.308027406 */, 19 },
8589 /* 8057 */ { MAD_F(0x04ede39a) /* 0.308078389 */, 19 },
8590 /* 8058 */ { MAD_F(0x04ee1910) /* 0.308129373 */, 19 },
8591 /* 8059 */ { MAD_F(0x04ee4e87) /* 0.308180359 */, 19 },
8592 /* 8060 */ { MAD_F(0x04ee83fe) /* 0.308231347 */, 19 },
8593 /* 8061 */ { MAD_F(0x04eeb976) /* 0.308282338 */, 19 },
8594 /* 8062 */ { MAD_F(0x04eeeeee) /* 0.308333331 */, 19 },
8595 /* 8063 */ { MAD_F(0x04ef2467) /* 0.308384325 */, 19 },
8596
8597 /* 8064 */ { MAD_F(0x04ef59e0) /* 0.308435322 */, 19 },
8598 /* 8065 */ { MAD_F(0x04ef8f5a) /* 0.308486321 */, 19 },
8599 /* 8066 */ { MAD_F(0x04efc4d5) /* 0.308537322 */, 19 },
8600 /* 8067 */ { MAD_F(0x04effa50) /* 0.308588325 */, 19 },
8601 /* 8068 */ { MAD_F(0x04f02fcb) /* 0.308639331 */, 19 },
8602 /* 8069 */ { MAD_F(0x04f06547) /* 0.308690338 */, 19 },
8603 /* 8070 */ { MAD_F(0x04f09ac4) /* 0.308741348 */, 19 },
8604 /* 8071 */ { MAD_F(0x04f0d041) /* 0.308792359 */, 19 },
8605 /* 8072 */ { MAD_F(0x04f105bf) /* 0.308843373 */, 19 },
8606 /* 8073 */ { MAD_F(0x04f13b3e) /* 0.308894389 */, 19 },
8607 /* 8074 */ { MAD_F(0x04f170bd) /* 0.308945407 */, 19 },
8608 /* 8075 */ { MAD_F(0x04f1a63c) /* 0.308996427 */, 19 },
8609 /* 8076 */ { MAD_F(0x04f1dbbd) /* 0.309047449 */, 19 },
8610 /* 8077 */ { MAD_F(0x04f2113d) /* 0.309098473 */, 19 },
8611 /* 8078 */ { MAD_F(0x04f246bf) /* 0.309149499 */, 19 },
8612 /* 8079 */ { MAD_F(0x04f27c40) /* 0.309200528 */, 19 },
8613
8614 /* 8080 */ { MAD_F(0x04f2b1c3) /* 0.309251558 */, 19 },
8615 /* 8081 */ { MAD_F(0x04f2e746) /* 0.309302591 */, 19 },
8616 /* 8082 */ { MAD_F(0x04f31cc9) /* 0.309353626 */, 19 },
8617 /* 8083 */ { MAD_F(0x04f3524d) /* 0.309404663 */, 19 },
8618 /* 8084 */ { MAD_F(0x04f387d2) /* 0.309455702 */, 19 },
8619 /* 8085 */ { MAD_F(0x04f3bd57) /* 0.309506743 */, 19 },
8620 /* 8086 */ { MAD_F(0x04f3f2dd) /* 0.309557786 */, 19 },
8621 /* 8087 */ { MAD_F(0x04f42864) /* 0.309608831 */, 19 },
8622 /* 8088 */ { MAD_F(0x04f45dea) /* 0.309659879 */, 19 },
8623 /* 8089 */ { MAD_F(0x04f49372) /* 0.309710928 */, 19 },
8624 /* 8090 */ { MAD_F(0x04f4c8fa) /* 0.309761980 */, 19 },
8625 /* 8091 */ { MAD_F(0x04f4fe83) /* 0.309813033 */, 19 },
8626 /* 8092 */ { MAD_F(0x04f5340c) /* 0.309864089 */, 19 },
8627 /* 8093 */ { MAD_F(0x04f56996) /* 0.309915147 */, 19 },
8628 /* 8094 */ { MAD_F(0x04f59f20) /* 0.309966207 */, 19 },
8629 /* 8095 */ { MAD_F(0x04f5d4ab) /* 0.310017269 */, 19 },
8630
8631 /* 8096 */ { MAD_F(0x04f60a36) /* 0.310068333 */, 19 },
8632 /* 8097 */ { MAD_F(0x04f63fc2) /* 0.310119400 */, 19 },
8633 /* 8098 */ { MAD_F(0x04f6754f) /* 0.310170468 */, 19 },
8634 /* 8099 */ { MAD_F(0x04f6aadc) /* 0.310221539 */, 19 },
8635 /* 8100 */ { MAD_F(0x04f6e06a) /* 0.310272611 */, 19 },
8636 /* 8101 */ { MAD_F(0x04f715f8) /* 0.310323686 */, 19 },
8637 /* 8102 */ { MAD_F(0x04f74b87) /* 0.310374763 */, 19 },
8638 /* 8103 */ { MAD_F(0x04f78116) /* 0.310425842 */, 19 },
8639 /* 8104 */ { MAD_F(0x04f7b6a6) /* 0.310476923 */, 19 },
8640 /* 8105 */ { MAD_F(0x04f7ec37) /* 0.310528006 */, 19 },
8641 /* 8106 */ { MAD_F(0x04f821c8) /* 0.310579091 */, 19 },
8642 /* 8107 */ { MAD_F(0x04f85759) /* 0.310630179 */, 19 },
8643 /* 8108 */ { MAD_F(0x04f88cec) /* 0.310681268 */, 19 },
8644 /* 8109 */ { MAD_F(0x04f8c27e) /* 0.310732360 */, 19 },
8645 /* 8110 */ { MAD_F(0x04f8f812) /* 0.310783453 */, 19 },
8646 /* 8111 */ { MAD_F(0x04f92da6) /* 0.310834549 */, 19 },
8647
8648 /* 8112 */ { MAD_F(0x04f9633a) /* 0.310885647 */, 19 },
8649 /* 8113 */ { MAD_F(0x04f998cf) /* 0.310936747 */, 19 },
8650 /* 8114 */ { MAD_F(0x04f9ce65) /* 0.310987849 */, 19 },
8651 /* 8115 */ { MAD_F(0x04fa03fb) /* 0.311038953 */, 19 },
8652 /* 8116 */ { MAD_F(0x04fa3992) /* 0.311090059 */, 19 },
8653 /* 8117 */ { MAD_F(0x04fa6f29) /* 0.311141168 */, 19 },
8654 /* 8118 */ { MAD_F(0x04faa4c1) /* 0.311192278 */, 19 },
8655 /* 8119 */ { MAD_F(0x04fada59) /* 0.311243390 */, 19 },
8656 /* 8120 */ { MAD_F(0x04fb0ff2) /* 0.311294505 */, 19 },
8657 /* 8121 */ { MAD_F(0x04fb458c) /* 0.311345622 */, 19 },
8658 /* 8122 */ { MAD_F(0x04fb7b26) /* 0.311396741 */, 19 },
8659 /* 8123 */ { MAD_F(0x04fbb0c1) /* 0.311447862 */, 19 },
8660 /* 8124 */ { MAD_F(0x04fbe65c) /* 0.311498985 */, 19 },
8661 /* 8125 */ { MAD_F(0x04fc1bf8) /* 0.311550110 */, 19 },
8662 /* 8126 */ { MAD_F(0x04fc5194) /* 0.311601237 */, 19 },
8663 /* 8127 */ { MAD_F(0x04fc8731) /* 0.311652366 */, 19 },
8664
8665 /* 8128 */ { MAD_F(0x04fcbcce) /* 0.311703498 */, 19 },
8666 /* 8129 */ { MAD_F(0x04fcf26c) /* 0.311754631 */, 19 },
8667 /* 8130 */ { MAD_F(0x04fd280b) /* 0.311805767 */, 19 },
8668 /* 8131 */ { MAD_F(0x04fd5daa) /* 0.311856905 */, 19 },
8669 /* 8132 */ { MAD_F(0x04fd934a) /* 0.311908044 */, 19 },
8670 /* 8133 */ { MAD_F(0x04fdc8ea) /* 0.311959186 */, 19 },
8671 /* 8134 */ { MAD_F(0x04fdfe8b) /* 0.312010330 */, 19 },
8672 /* 8135 */ { MAD_F(0x04fe342c) /* 0.312061476 */, 19 },
8673 /* 8136 */ { MAD_F(0x04fe69ce) /* 0.312112625 */, 19 },
8674 /* 8137 */ { MAD_F(0x04fe9f71) /* 0.312163775 */, 19 },
8675 /* 8138 */ { MAD_F(0x04fed514) /* 0.312214927 */, 19 },
8676 /* 8139 */ { MAD_F(0x04ff0ab8) /* 0.312266082 */, 19 },
8677 /* 8140 */ { MAD_F(0x04ff405c) /* 0.312317238 */, 19 },
8678 /* 8141 */ { MAD_F(0x04ff7601) /* 0.312368397 */, 19 },
8679 /* 8142 */ { MAD_F(0x04ffaba6) /* 0.312419558 */, 19 },
8680 /* 8143 */ { MAD_F(0x04ffe14c) /* 0.312470720 */, 19 },
8681
8682 /* 8144 */ { MAD_F(0x050016f3) /* 0.312521885 */, 19 },
8683 /* 8145 */ { MAD_F(0x05004c9a) /* 0.312573052 */, 19 },
8684 /* 8146 */ { MAD_F(0x05008241) /* 0.312624222 */, 19 },
8685 /* 8147 */ { MAD_F(0x0500b7e9) /* 0.312675393 */, 19 },
8686 /* 8148 */ { MAD_F(0x0500ed92) /* 0.312726566 */, 19 },
8687 /* 8149 */ { MAD_F(0x0501233b) /* 0.312777742 */, 19 },
8688 /* 8150 */ { MAD_F(0x050158e5) /* 0.312828919 */, 19 },
8689 /* 8151 */ { MAD_F(0x05018e90) /* 0.312880099 */, 19 },
8690 /* 8152 */ { MAD_F(0x0501c43b) /* 0.312931280 */, 19 },
8691 /* 8153 */ { MAD_F(0x0501f9e6) /* 0.312982464 */, 19 },
8692 /* 8154 */ { MAD_F(0x05022f92) /* 0.313033650 */, 19 },
8693 /* 8155 */ { MAD_F(0x0502653f) /* 0.313084838 */, 19 },
8694 /* 8156 */ { MAD_F(0x05029aec) /* 0.313136028 */, 19 },
8695 /* 8157 */ { MAD_F(0x0502d09a) /* 0.313187220 */, 19 },
8696 /* 8158 */ { MAD_F(0x05030648) /* 0.313238414 */, 19 },
8697 /* 8159 */ { MAD_F(0x05033bf7) /* 0.313289611 */, 19 },
8698
8699 /* 8160 */ { MAD_F(0x050371a7) /* 0.313340809 */, 19 },
8700 /* 8161 */ { MAD_F(0x0503a757) /* 0.313392010 */, 19 },
8701 /* 8162 */ { MAD_F(0x0503dd07) /* 0.313443212 */, 19 },
8702 /* 8163 */ { MAD_F(0x050412b9) /* 0.313494417 */, 19 },
8703 /* 8164 */ { MAD_F(0x0504486a) /* 0.313545624 */, 19 },
8704 /* 8165 */ { MAD_F(0x05047e1d) /* 0.313596833 */, 19 },
8705 /* 8166 */ { MAD_F(0x0504b3cf) /* 0.313648044 */, 19 },
8706 /* 8167 */ { MAD_F(0x0504e983) /* 0.313699257 */, 19 },
8707 /* 8168 */ { MAD_F(0x05051f37) /* 0.313750472 */, 19 },
8708 /* 8169 */ { MAD_F(0x050554eb) /* 0.313801689 */, 19 },
8709 /* 8170 */ { MAD_F(0x05058aa0) /* 0.313852909 */, 19 },
8710 /* 8171 */ { MAD_F(0x0505c056) /* 0.313904130 */, 19 },
8711 /* 8172 */ { MAD_F(0x0505f60c) /* 0.313955354 */, 19 },
8712 /* 8173 */ { MAD_F(0x05062bc3) /* 0.314006579 */, 19 },
8713 /* 8174 */ { MAD_F(0x0506617a) /* 0.314057807 */, 19 },
8714 /* 8175 */ { MAD_F(0x05069732) /* 0.314109037 */, 19 },
8715
8716 /* 8176 */ { MAD_F(0x0506cceb) /* 0.314160269 */, 19 },
8717 /* 8177 */ { MAD_F(0x050702a4) /* 0.314211502 */, 19 },
8718 /* 8178 */ { MAD_F(0x0507385d) /* 0.314262739 */, 19 },
8719 /* 8179 */ { MAD_F(0x05076e17) /* 0.314313977 */, 19 },
8720 /* 8180 */ { MAD_F(0x0507a3d2) /* 0.314365217 */, 19 },
8721 /* 8181 */ { MAD_F(0x0507d98d) /* 0.314416459 */, 19 },
8722 /* 8182 */ { MAD_F(0x05080f49) /* 0.314467704 */, 19 },
8723 /* 8183 */ { MAD_F(0x05084506) /* 0.314518950 */, 19 },
8724 /* 8184 */ { MAD_F(0x05087ac2) /* 0.314570199 */, 19 },
8725 /* 8185 */ { MAD_F(0x0508b080) /* 0.314621449 */, 19 },
8726 /* 8186 */ { MAD_F(0x0508e63e) /* 0.314672702 */, 19 },
8727 /* 8187 */ { MAD_F(0x05091bfd) /* 0.314723957 */, 19 },
8728 /* 8188 */ { MAD_F(0x050951bc) /* 0.314775214 */, 19 },
8729 /* 8189 */ { MAD_F(0x0509877c) /* 0.314826473 */, 19 },
8730 /* 8190 */ { MAD_F(0x0509bd3c) /* 0.314877734 */, 19 },
8731 /* 8191 */ { MAD_F(0x0509f2fd) /* 0.314928997 */, 19 },
8732
8733 /* 8192 */ { MAD_F(0x050a28be) /* 0.314980262 */, 19 },
8734 /* 8193 */ { MAD_F(0x050a5e80) /* 0.315031530 */, 19 },
8735 /* 8194 */ { MAD_F(0x050a9443) /* 0.315082799 */, 19 },
8736 /* 8195 */ { MAD_F(0x050aca06) /* 0.315134071 */, 19 },
8737 /* 8196 */ { MAD_F(0x050affc9) /* 0.315185344 */, 19 },
8738 /* 8197 */ { MAD_F(0x050b358e) /* 0.315236620 */, 19 },
8739 /* 8198 */ { MAD_F(0x050b6b52) /* 0.315287898 */, 19 },
8740 /* 8199 */ { MAD_F(0x050ba118) /* 0.315339178 */, 19 },
8741 /* 8200 */ { MAD_F(0x050bd6de) /* 0.315390460 */, 19 },
8742 /* 8201 */ { MAD_F(0x050c0ca4) /* 0.315441744 */, 19 },
8743 /* 8202 */ { MAD_F(0x050c426b) /* 0.315493030 */, 19 },
8744 /* 8203 */ { MAD_F(0x050c7833) /* 0.315544318 */, 19 },
8745 /* 8204 */ { MAD_F(0x050cadfb) /* 0.315595608 */, 19 },
8746 /* 8205 */ { MAD_F(0x050ce3c4) /* 0.315646901 */, 19 },
8747 /* 8206 */ { MAD_F(0x050d198d) /* 0.315698195 */, 19 }
diff --git a/uisimulator/common/libmad/sf_table.dat b/uisimulator/common/libmad/sf_table.dat
new file mode 100644
index 0000000000..bc368af849
--- /dev/null
+++ b/uisimulator/common/libmad/sf_table.dat
@@ -0,0 +1,100 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22/*
23 * These are the scalefactor values for Layer I and Layer II.
24 * The values are from Table B.1 of ISO/IEC 11172-3.
25 *
26 * There is some error introduced by the 32-bit fixed-point representation;
27 * the amount of error is shown. For 16-bit PCM output, this shouldn't be
28 * too much of a problem.
29 */
30
31 MAD_F(0x20000000), /* 2.000000000000 => 2.000000000000, e 0.000000000000 */
32 MAD_F(0x1965fea5), /* 1.587401051968 => 1.587401051074, e 0.000000000894 */
33 MAD_F(0x1428a2fa), /* 1.259921049895 => 1.259921051562, e -0.000000001667 */
34 MAD_F(0x10000000), /* 1.000000000000 => 1.000000000000, e 0.000000000000 */
35 MAD_F(0x0cb2ff53), /* 0.793700525984 => 0.793700527400, e -0.000000001416 */
36 MAD_F(0x0a14517d), /* 0.629960524947 => 0.629960525781, e -0.000000000833 */
37 MAD_F(0x08000000), /* 0.500000000000 => 0.500000000000, e 0.000000000000 */
38 MAD_F(0x06597fa9), /* 0.396850262992 => 0.396850261837, e 0.000000001155 */
39
40 MAD_F(0x050a28be), /* 0.314980262474 => 0.314980261028, e 0.000000001446 */
41 MAD_F(0x04000000), /* 0.250000000000 => 0.250000000000, e 0.000000000000 */
42 MAD_F(0x032cbfd5), /* 0.198425131496 => 0.198425132781, e -0.000000001285 */
43 MAD_F(0x0285145f), /* 0.157490131237 => 0.157490130514, e 0.000000000723 */
44 MAD_F(0x02000000), /* 0.125000000000 => 0.125000000000, e 0.000000000000 */
45 MAD_F(0x01965fea), /* 0.099212565748 => 0.099212564528, e 0.000000001220 */
46 MAD_F(0x01428a30), /* 0.078745065618 => 0.078745067120, e -0.000000001501 */
47 MAD_F(0x01000000), /* 0.062500000000 => 0.062500000000, e 0.000000000000 */
48
49 MAD_F(0x00cb2ff5), /* 0.049606282874 => 0.049606282264, e 0.000000000610 */
50 MAD_F(0x00a14518), /* 0.039372532809 => 0.039372533560, e -0.000000000751 */
51 MAD_F(0x00800000), /* 0.031250000000 => 0.031250000000, e 0.000000000000 */
52 MAD_F(0x006597fb), /* 0.024803141437 => 0.024803142995, e -0.000000001558 */
53 MAD_F(0x0050a28c), /* 0.019686266405 => 0.019686266780, e -0.000000000375 */
54 MAD_F(0x00400000), /* 0.015625000000 => 0.015625000000, e 0.000000000000 */
55 MAD_F(0x0032cbfd), /* 0.012401570719 => 0.012401569635, e 0.000000001084 */
56 MAD_F(0x00285146), /* 0.009843133202 => 0.009843133390, e -0.000000000188 */
57
58 MAD_F(0x00200000), /* 0.007812500000 => 0.007812500000, e 0.000000000000 */
59 MAD_F(0x001965ff), /* 0.006200785359 => 0.006200786680, e -0.000000001321 */
60 MAD_F(0x001428a3), /* 0.004921566601 => 0.004921566695, e -0.000000000094 */
61 MAD_F(0x00100000), /* 0.003906250000 => 0.003906250000, e 0.000000000000 */
62 MAD_F(0x000cb2ff), /* 0.003100392680 => 0.003100391477, e 0.000000001202 */
63 MAD_F(0x000a1451), /* 0.002460783301 => 0.002460781485, e 0.000000001816 */
64 MAD_F(0x00080000), /* 0.001953125000 => 0.001953125000, e 0.000000000000 */
65 MAD_F(0x00065980), /* 0.001550196340 => 0.001550197601, e -0.000000001262 */
66
67 MAD_F(0x00050a29), /* 0.001230391650 => 0.001230392605, e -0.000000000955 */
68 MAD_F(0x00040000), /* 0.000976562500 => 0.000976562500, e 0.000000000000 */
69 MAD_F(0x00032cc0), /* 0.000775098170 => 0.000775098801, e -0.000000000631 */
70 MAD_F(0x00028514), /* 0.000615195825 => 0.000615194440, e 0.000000001385 */
71 MAD_F(0x00020000), /* 0.000488281250 => 0.000488281250, e 0.000000000000 */
72 MAD_F(0x00019660), /* 0.000387549085 => 0.000387549400, e -0.000000000315 */
73 MAD_F(0x0001428a), /* 0.000307597913 => 0.000307597220, e 0.000000000693 */
74 MAD_F(0x00010000), /* 0.000244140625 => 0.000244140625, e 0.000000000000 */
75
76 MAD_F(0x0000cb30), /* 0.000193774542 => 0.000193774700, e -0.000000000158 */
77 MAD_F(0x0000a145), /* 0.000153798956 => 0.000153798610, e 0.000000000346 */
78 MAD_F(0x00008000), /* 0.000122070313 => 0.000122070313, e 0.000000000000 */
79 MAD_F(0x00006598), /* 0.000096887271 => 0.000096887350, e -0.000000000079 */
80 MAD_F(0x000050a3), /* 0.000076899478 => 0.000076901168, e -0.000000001689 */
81 MAD_F(0x00004000), /* 0.000061035156 => 0.000061035156, e 0.000000000000 */
82 MAD_F(0x000032cc), /* 0.000048443636 => 0.000048443675, e -0.000000000039 */
83 MAD_F(0x00002851), /* 0.000038449739 => 0.000038448721, e 0.000000001018 */
84
85 MAD_F(0x00002000), /* 0.000030517578 => 0.000030517578, e 0.000000000000 */
86 MAD_F(0x00001966), /* 0.000024221818 => 0.000024221838, e -0.000000000020 */
87 MAD_F(0x00001429), /* 0.000019224870 => 0.000019226223, e -0.000000001354 */
88 MAD_F(0x00001000), /* 0.000015258789 => 0.000015258789, e -0.000000000000 */
89 MAD_F(0x00000cb3), /* 0.000012110909 => 0.000012110919, e -0.000000000010 */
90 MAD_F(0x00000a14), /* 0.000009612435 => 0.000009611249, e 0.000000001186 */
91 MAD_F(0x00000800), /* 0.000007629395 => 0.000007629395, e -0.000000000000 */
92 MAD_F(0x00000659), /* 0.000006055454 => 0.000006053597, e 0.000000001858 */
93
94 MAD_F(0x0000050a), /* 0.000004806217 => 0.000004805624, e 0.000000000593 */
95 MAD_F(0x00000400), /* 0.000003814697 => 0.000003814697, e 0.000000000000 */
96 MAD_F(0x0000032d), /* 0.000003027727 => 0.000003028661, e -0.000000000934 */
97 MAD_F(0x00000285), /* 0.000002403109 => 0.000002402812, e 0.000000000296 */
98 MAD_F(0x00000200), /* 0.000001907349 => 0.000001907349, e -0.000000000000 */
99 MAD_F(0x00000196), /* 0.000001513864 => 0.000001512468, e 0.000000001396 */
100 MAD_F(0x00000143) /* 0.000001201554 => 0.000001203269, e -0.000000001714 */
diff --git a/uisimulator/common/libmad/stream.c b/uisimulator/common/libmad/stream.c
new file mode 100644
index 0000000000..50317845ff
--- /dev/null
+++ b/uisimulator/common/libmad/stream.c
@@ -0,0 +1,160 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22# ifdef HAVE_CONFIG_H
23# include "madconfig.h"
24# endif
25
26# include "global.h"
27
28# include <stdlib.h>
29
30# include "bit.h"
31# include "stream.h"
32
33/*
34 * NAME: stream->init()
35 * DESCRIPTION: initialize stream struct
36 */
37void mad_stream_init(struct mad_stream *stream)
38{
39 stream->buffer = 0;
40 stream->bufend = 0;
41 stream->skiplen = 0;
42
43 stream->sync = 0;
44 stream->freerate = 0;
45
46 stream->this_frame = 0;
47 stream->next_frame = 0;
48 mad_bit_init(&stream->ptr, 0);
49
50 mad_bit_init(&stream->anc_ptr, 0);
51 stream->anc_bitlen = 0;
52
53 stream->main_data = 0;
54 stream->md_len = 0;
55
56 stream->options = 0;
57 stream->error = MAD_ERROR_NONE;
58}
59
60/*
61 * NAME: stream->finish()
62 * DESCRIPTION: deallocate any dynamic memory associated with stream
63 */
64void mad_stream_finish(struct mad_stream *stream)
65{
66 if (stream->main_data) {
67 free(stream->main_data);
68 stream->main_data = 0;
69 }
70
71 mad_bit_finish(&stream->anc_ptr);
72 mad_bit_finish(&stream->ptr);
73}
74
75/*
76 * NAME: stream->buffer()
77 * DESCRIPTION: set stream buffer pointers
78 */
79void mad_stream_buffer(struct mad_stream *stream,
80 unsigned char const *buffer, unsigned long length)
81{
82 stream->buffer = buffer;
83 stream->bufend = buffer + length;
84
85 stream->this_frame = buffer;
86 stream->next_frame = buffer;
87
88 stream->sync = 1;
89
90 mad_bit_init(&stream->ptr, buffer);
91}
92
93/*
94 * NAME: stream->skip()
95 * DESCRIPTION: arrange to skip bytes before the next frame
96 */
97void mad_stream_skip(struct mad_stream *stream, unsigned long length)
98{
99 stream->skiplen += length;
100}
101
102/*
103 * NAME: stream->sync()
104 * DESCRIPTION: locate the next stream sync word
105 */
106int mad_stream_sync(struct mad_stream *stream)
107{
108 register unsigned char const *ptr, *end;
109
110 ptr = mad_bit_nextbyte(&stream->ptr);
111 end = stream->bufend;
112
113 while (ptr < end - 1 &&
114 !(ptr[0] == 0xff && (ptr[1] & 0xe0) == 0xe0))
115 ++ptr;
116
117 if (end - ptr < MAD_BUFFER_GUARD)
118 return -1;
119
120 mad_bit_init(&stream->ptr, ptr);
121
122 return 0;
123}
124
125/*
126 * NAME: stream->errorstr()
127 * DESCRIPTION: return a string description of the current error condition
128 */
129char const *mad_stream_errorstr(struct mad_stream const *stream)
130{
131 switch (stream->error) {
132 case MAD_ERROR_NONE: return "no error";
133
134 case MAD_ERROR_BUFLEN: return "input buffer too small (or EOF)";
135 case MAD_ERROR_BUFPTR: return "invalid (null) buffer pointer";
136
137 case MAD_ERROR_NOMEM: return "not enough memory";
138
139 case MAD_ERROR_LOSTSYNC: return "lost synchronization";
140 case MAD_ERROR_BADLAYER: return "reserved header layer value";
141 case MAD_ERROR_BADBITRATE: return "forbidden bitrate value";
142 case MAD_ERROR_BADSAMPLERATE: return "reserved sample frequency value";
143 case MAD_ERROR_BADEMPHASIS: return "reserved emphasis value";
144
145 case MAD_ERROR_BADCRC: return "CRC check failed";
146 case MAD_ERROR_BADBITALLOC: return "forbidden bit allocation value";
147 case MAD_ERROR_BADSCALEFACTOR: return "bad scalefactor index";
148 case MAD_ERROR_BADFRAMELEN: return "bad frame length";
149 case MAD_ERROR_BADBIGVALUES: return "bad big_values count";
150 case MAD_ERROR_BADBLOCKTYPE: return "reserved block_type";
151 case MAD_ERROR_BADSCFSI: return "bad scalefactor selection info";
152 case MAD_ERROR_BADDATAPTR: return "bad main_data_begin pointer";
153 case MAD_ERROR_BADPART3LEN: return "bad audio data length";
154 case MAD_ERROR_BADHUFFTABLE: return "bad Huffman table select";
155 case MAD_ERROR_BADHUFFDATA: return "Huffman data overrun";
156 case MAD_ERROR_BADSTEREO: return "incompatible block_type for JS";
157 }
158
159 return 0;
160}
diff --git a/uisimulator/common/libmad/stream.h b/uisimulator/common/libmad/stream.h
new file mode 100644
index 0000000000..08e6dc5193
--- /dev/null
+++ b/uisimulator/common/libmad/stream.h
@@ -0,0 +1,107 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22# ifndef LIBMAD_STREAM_H
23# define LIBMAD_STREAM_H
24
25# include "bit.h"
26
27# define MAD_BUFFER_GUARD 8
28# define MAD_BUFFER_MDLEN (511 + 2048 + MAD_BUFFER_GUARD)
29
30enum mad_error {
31 MAD_ERROR_NONE = 0x0000, /* no error */
32
33 MAD_ERROR_BUFLEN = 0x0001, /* input buffer too small (or EOF) */
34 MAD_ERROR_BUFPTR = 0x0002, /* invalid (null) buffer pointer */
35
36 MAD_ERROR_NOMEM = 0x0031, /* not enough memory */
37
38 MAD_ERROR_LOSTSYNC = 0x0101, /* lost synchronization */
39 MAD_ERROR_BADLAYER = 0x0102, /* reserved header layer value */
40 MAD_ERROR_BADBITRATE = 0x0103, /* forbidden bitrate value */
41 MAD_ERROR_BADSAMPLERATE = 0x0104, /* reserved sample frequency value */
42 MAD_ERROR_BADEMPHASIS = 0x0105, /* reserved emphasis value */
43
44 MAD_ERROR_BADCRC = 0x0201, /* CRC check failed */
45 MAD_ERROR_BADBITALLOC = 0x0211, /* forbidden bit allocation value */
46 MAD_ERROR_BADSCALEFACTOR = 0x0221, /* bad scalefactor index */
47 MAD_ERROR_BADFRAMELEN = 0x0231, /* bad frame length */
48 MAD_ERROR_BADBIGVALUES = 0x0232, /* bad big_values count */
49 MAD_ERROR_BADBLOCKTYPE = 0x0233, /* reserved block_type */
50 MAD_ERROR_BADSCFSI = 0x0234, /* bad scalefactor selection info */
51 MAD_ERROR_BADDATAPTR = 0x0235, /* bad main_data_begin pointer */
52 MAD_ERROR_BADPART3LEN = 0x0236, /* bad audio data length */
53 MAD_ERROR_BADHUFFTABLE = 0x0237, /* bad Huffman table select */
54 MAD_ERROR_BADHUFFDATA = 0x0238, /* Huffman data overrun */
55 MAD_ERROR_BADSTEREO = 0x0239 /* incompatible block_type for JS */
56};
57
58# define MAD_RECOVERABLE(error) ((error) & 0xff00)
59
60struct mad_stream {
61 unsigned char const *buffer; /* input bitstream buffer */
62 unsigned char const *bufend; /* end of buffer */
63 unsigned long skiplen; /* bytes to skip before next frame */
64
65 int sync; /* stream sync found */
66 unsigned long freerate; /* free bitrate (fixed) */
67
68 unsigned char const *this_frame; /* start of current frame */
69 unsigned char const *next_frame; /* start of next frame */
70 struct mad_bitptr ptr; /* current processing bit pointer */
71
72 struct mad_bitptr anc_ptr; /* ancillary bits pointer */
73 unsigned int anc_bitlen; /* number of ancillary bits */
74
75 unsigned char (*main_data)[MAD_BUFFER_MDLEN];
76 /* Layer III main_data() */
77 unsigned int md_len; /* bytes in main_data */
78
79 int options; /* decoding options (see below) */
80 enum mad_error error; /* error code (see above) */
81};
82
83enum {
84 MAD_OPTION_IGNORECRC = 0x0001, /* ignore CRC errors */
85 MAD_OPTION_HALFSAMPLERATE = 0x0002 /* generate PCM at 1/2 sample rate */
86# if 0 /* not yet implemented */
87 MAD_OPTION_LEFTCHANNEL = 0x0010, /* decode left channel only */
88 MAD_OPTION_RIGHTCHANNEL = 0x0020, /* decode right channel only */
89 MAD_OPTION_SINGLECHANNEL = 0x0030 /* combine channels */
90# endif
91};
92
93void mad_stream_init(struct mad_stream *);
94void mad_stream_finish(struct mad_stream *);
95
96# define mad_stream_options(stream, opts) \
97 ((void) ((stream)->options = (opts)))
98
99void mad_stream_buffer(struct mad_stream *,
100 unsigned char const *, unsigned long);
101void mad_stream_skip(struct mad_stream *, unsigned long);
102
103int mad_stream_sync(struct mad_stream *);
104
105char const *mad_stream_errorstr(struct mad_stream const *);
106
107# endif
diff --git a/uisimulator/common/libmad/synth.c b/uisimulator/common/libmad/synth.c
new file mode 100644
index 0000000000..6fec9068fa
--- /dev/null
+++ b/uisimulator/common/libmad/synth.c
@@ -0,0 +1,857 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22# ifdef HAVE_CONFIG_H
23# include "madconfig.h"
24# endif
25
26# include "global.h"
27
28# include "fixed.h"
29# include "frame.h"
30# include "synth.h"
31
32/*
33 * NAME: synth->init()
34 * DESCRIPTION: initialize synth struct
35 */
36void mad_synth_init(struct mad_synth *synth)
37{
38 mad_synth_mute(synth);
39
40 synth->phase = 0;
41
42 synth->pcm.samplerate = 0;
43 synth->pcm.channels = 0;
44 synth->pcm.length = 0;
45}
46
47/*
48 * NAME: synth->mute()
49 * DESCRIPTION: zero all polyphase filterbank values, resetting synthesis
50 */
51void mad_synth_mute(struct mad_synth *synth)
52{
53 unsigned int ch, s, v;
54
55 for (ch = 0; ch < 2; ++ch) {
56 for (s = 0; s < 16; ++s) {
57 for (v = 0; v < 8; ++v) {
58 synth->filter[ch][0][0][s][v] = synth->filter[ch][0][1][s][v] =
59 synth->filter[ch][1][0][s][v] = synth->filter[ch][1][1][s][v] = 0;
60 }
61 }
62 }
63}
64
65/*
66 * An optional optimization called here the Subband Synthesis Optimization
67 * (SSO) improves the performance of subband synthesis at the expense of
68 * accuracy.
69 *
70 * The idea is to simplify 32x32->64-bit multiplication to 32x32->32 such
71 * that extra scaling and rounding are not necessary. This often allows the
72 * compiler to use faster 32-bit multiply-accumulate instructions instead of
73 * explicit 64-bit multiply, shift, and add instructions.
74 *
75 * SSO works like this: a full 32x32->64-bit multiply of two mad_fixed_t
76 * values requires the result to be right-shifted 28 bits to be properly
77 * scaled to the same fixed-point format. Right shifts can be applied at any
78 * time to either operand or to the result, so the optimization involves
79 * careful placement of these shifts to minimize the loss of accuracy.
80 *
81 * First, a 14-bit shift is applied with rounding at compile-time to the D[]
82 * table of coefficients for the subband synthesis window. This only loses 2
83 * bits of accuracy because the lower 12 bits are always zero. A second
84 * 12-bit shift occurs after the DCT calculation. This loses 12 bits of
85 * accuracy. Finally, a third 2-bit shift occurs just before the sample is
86 * saved in the PCM buffer. 14 + 12 + 2 == 28 bits.
87 */
88
89/* FPM_DEFAULT without OPT_SSO will actually lose accuracy and performance */
90
91# if defined(FPM_DEFAULT) && !defined(OPT_SSO)
92# define OPT_SSO
93# endif
94
95/* second SSO shift, with rounding */
96
97# if defined(OPT_SSO)
98# define SHIFT(x) (((x) + (1L << 11)) >> 12)
99# else
100# define SHIFT(x) (x)
101# endif
102
103/* possible DCT speed optimization */
104
105# if defined(OPT_SPEED) && defined(MAD_F_MLX)
106# define OPT_DCTO
107# define MUL(x, y) \
108 ({ mad_fixed64hi_t hi; \
109 mad_fixed64lo_t lo; \
110 MAD_F_MLX(hi, lo, (x), (y)); \
111 hi << (32 - MAD_F_SCALEBITS - 3); \
112 })
113# else
114# undef OPT_DCTO
115# define MUL(x, y) mad_f_mul((x), (y))
116# endif
117
118/*
119 * NAME: dct32()
120 * DESCRIPTION: perform fast in[32]->out[32] DCT
121 */
122static
123void dct32(mad_fixed_t const in[32], unsigned int slot,
124 mad_fixed_t lo[16][8], mad_fixed_t hi[16][8])
125{
126 mad_fixed_t t0, t1, t2, t3, t4, t5, t6, t7;
127 mad_fixed_t t8, t9, t10, t11, t12, t13, t14, t15;
128 mad_fixed_t t16, t17, t18, t19, t20, t21, t22, t23;
129 mad_fixed_t t24, t25, t26, t27, t28, t29, t30, t31;
130 mad_fixed_t t32, t33, t34, t35, t36, t37, t38, t39;
131 mad_fixed_t t40, t41, t42, t43, t44, t45, t46, t47;
132 mad_fixed_t t48, t49, t50, t51, t52, t53, t54, t55;
133 mad_fixed_t t56, t57, t58, t59, t60, t61, t62, t63;
134 mad_fixed_t t64, t65, t66, t67, t68, t69, t70, t71;
135 mad_fixed_t t72, t73, t74, t75, t76, t77, t78, t79;
136 mad_fixed_t t80, t81, t82, t83, t84, t85, t86, t87;
137 mad_fixed_t t88, t89, t90, t91, t92, t93, t94, t95;
138 mad_fixed_t t96, t97, t98, t99, t100, t101, t102, t103;
139 mad_fixed_t t104, t105, t106, t107, t108, t109, t110, t111;
140 mad_fixed_t t112, t113, t114, t115, t116, t117, t118, t119;
141 mad_fixed_t t120, t121, t122, t123, t124, t125, t126, t127;
142 mad_fixed_t t128, t129, t130, t131, t132, t133, t134, t135;
143 mad_fixed_t t136, t137, t138, t139, t140, t141, t142, t143;
144 mad_fixed_t t144, t145, t146, t147, t148, t149, t150, t151;
145 mad_fixed_t t152, t153, t154, t155, t156, t157, t158, t159;
146 mad_fixed_t t160, t161, t162, t163, t164, t165, t166, t167;
147 mad_fixed_t t168, t169, t170, t171, t172, t173, t174, t175;
148 mad_fixed_t t176;
149
150 /* costab[i] = cos(PI / (2 * 32) * i) */
151
152# if defined(OPT_DCTO)
153# define costab1 MAD_F(0x7fd8878e)
154# define costab2 MAD_F(0x7f62368f)
155# define costab3 MAD_F(0x7e9d55fc)
156# define costab4 MAD_F(0x7d8a5f40)
157# define costab5 MAD_F(0x7c29fbee)
158# define costab6 MAD_F(0x7a7d055b)
159# define costab7 MAD_F(0x78848414)
160# define costab8 MAD_F(0x7641af3d)
161# define costab9 MAD_F(0x73b5ebd1)
162# define costab10 MAD_F(0x70e2cbc6)
163# define costab11 MAD_F(0x6dca0d14)
164# define costab12 MAD_F(0x6a6d98a4)
165# define costab13 MAD_F(0x66cf8120)
166# define costab14 MAD_F(0x62f201ac)
167# define costab15 MAD_F(0x5ed77c8a)
168# define costab16 MAD_F(0x5a82799a)
169# define costab17 MAD_F(0x55f5a4d2)
170# define costab18 MAD_F(0x5133cc94)
171# define costab19 MAD_F(0x4c3fdff4)
172# define costab20 MAD_F(0x471cece7)
173# define costab21 MAD_F(0x41ce1e65)
174# define costab22 MAD_F(0x3c56ba70)
175# define costab23 MAD_F(0x36ba2014)
176# define costab24 MAD_F(0x30fbc54d)
177# define costab25 MAD_F(0x2b1f34eb)
178# define costab26 MAD_F(0x25280c5e)
179# define costab27 MAD_F(0x1f19f97b)
180# define costab28 MAD_F(0x18f8b83c)
181# define costab29 MAD_F(0x12c8106f)
182# define costab30 MAD_F(0x0c8bd35e)
183# define costab31 MAD_F(0x0647d97c)
184# else
185# define costab1 MAD_F(0x0ffb10f2) /* 0.998795456 */
186# define costab2 MAD_F(0x0fec46d2) /* 0.995184727 */
187# define costab3 MAD_F(0x0fd3aac0) /* 0.989176510 */
188# define costab4 MAD_F(0x0fb14be8) /* 0.980785280 */
189# define costab5 MAD_F(0x0f853f7e) /* 0.970031253 */
190# define costab6 MAD_F(0x0f4fa0ab) /* 0.956940336 */
191# define costab7 MAD_F(0x0f109082) /* 0.941544065 */
192# define costab8 MAD_F(0x0ec835e8) /* 0.923879533 */
193# define costab9 MAD_F(0x0e76bd7a) /* 0.903989293 */
194# define costab10 MAD_F(0x0e1c5979) /* 0.881921264 */
195# define costab11 MAD_F(0x0db941a3) /* 0.857728610 */
196# define costab12 MAD_F(0x0d4db315) /* 0.831469612 */
197# define costab13 MAD_F(0x0cd9f024) /* 0.803207531 */
198# define costab14 MAD_F(0x0c5e4036) /* 0.773010453 */
199# define costab15 MAD_F(0x0bdaef91) /* 0.740951125 */
200# define costab16 MAD_F(0x0b504f33) /* 0.707106781 */
201# define costab17 MAD_F(0x0abeb49a) /* 0.671558955 */
202# define costab18 MAD_F(0x0a267993) /* 0.634393284 */
203# define costab19 MAD_F(0x0987fbfe) /* 0.595699304 */
204# define costab20 MAD_F(0x08e39d9d) /* 0.555570233 */
205# define costab21 MAD_F(0x0839c3cd) /* 0.514102744 */
206# define costab22 MAD_F(0x078ad74e) /* 0.471396737 */
207# define costab23 MAD_F(0x06d74402) /* 0.427555093 */
208# define costab24 MAD_F(0x061f78aa) /* 0.382683432 */
209# define costab25 MAD_F(0x0563e69d) /* 0.336889853 */
210# define costab26 MAD_F(0x04a5018c) /* 0.290284677 */
211# define costab27 MAD_F(0x03e33f2f) /* 0.242980180 */
212# define costab28 MAD_F(0x031f1708) /* 0.195090322 */
213# define costab29 MAD_F(0x0259020e) /* 0.146730474 */
214# define costab30 MAD_F(0x01917a6c) /* 0.098017140 */
215# define costab31 MAD_F(0x00c8fb30) /* 0.049067674 */
216# endif
217
218 t0 = in[0] + in[31]; t16 = MUL(in[0] - in[31], costab1);
219 t1 = in[15] + in[16]; t17 = MUL(in[15] - in[16], costab31);
220
221 t41 = t16 + t17;
222 t59 = MUL(t16 - t17, costab2);
223 t33 = t0 + t1;
224 t50 = MUL(t0 - t1, costab2);
225
226 t2 = in[7] + in[24]; t18 = MUL(in[7] - in[24], costab15);
227 t3 = in[8] + in[23]; t19 = MUL(in[8] - in[23], costab17);
228
229 t42 = t18 + t19;
230 t60 = MUL(t18 - t19, costab30);
231 t34 = t2 + t3;
232 t51 = MUL(t2 - t3, costab30);
233
234 t4 = in[3] + in[28]; t20 = MUL(in[3] - in[28], costab7);
235 t5 = in[12] + in[19]; t21 = MUL(in[12] - in[19], costab25);
236
237 t43 = t20 + t21;
238 t61 = MUL(t20 - t21, costab14);
239 t35 = t4 + t5;
240 t52 = MUL(t4 - t5, costab14);
241
242 t6 = in[4] + in[27]; t22 = MUL(in[4] - in[27], costab9);
243 t7 = in[11] + in[20]; t23 = MUL(in[11] - in[20], costab23);
244
245 t44 = t22 + t23;
246 t62 = MUL(t22 - t23, costab18);
247 t36 = t6 + t7;
248 t53 = MUL(t6 - t7, costab18);
249
250 t8 = in[1] + in[30]; t24 = MUL(in[1] - in[30], costab3);
251 t9 = in[14] + in[17]; t25 = MUL(in[14] - in[17], costab29);
252
253 t45 = t24 + t25;
254 t63 = MUL(t24 - t25, costab6);
255 t37 = t8 + t9;
256 t54 = MUL(t8 - t9, costab6);
257
258 t10 = in[6] + in[25]; t26 = MUL(in[6] - in[25], costab13);
259 t11 = in[9] + in[22]; t27 = MUL(in[9] - in[22], costab19);
260
261 t46 = t26 + t27;
262 t64 = MUL(t26 - t27, costab26);
263 t38 = t10 + t11;
264 t55 = MUL(t10 - t11, costab26);
265
266 t12 = in[2] + in[29]; t28 = MUL(in[2] - in[29], costab5);
267 t13 = in[13] + in[18]; t29 = MUL(in[13] - in[18], costab27);
268
269 t47 = t28 + t29;
270 t65 = MUL(t28 - t29, costab10);
271 t39 = t12 + t13;
272 t56 = MUL(t12 - t13, costab10);
273
274 t14 = in[5] + in[26]; t30 = MUL(in[5] - in[26], costab11);
275 t15 = in[10] + in[21]; t31 = MUL(in[10] - in[21], costab21);
276
277 t48 = t30 + t31;
278 t66 = MUL(t30 - t31, costab22);
279 t40 = t14 + t15;
280 t57 = MUL(t14 - t15, costab22);
281
282 t69 = t33 + t34; t89 = MUL(t33 - t34, costab4);
283 t70 = t35 + t36; t90 = MUL(t35 - t36, costab28);
284 t71 = t37 + t38; t91 = MUL(t37 - t38, costab12);
285 t72 = t39 + t40; t92 = MUL(t39 - t40, costab20);
286 t73 = t41 + t42; t94 = MUL(t41 - t42, costab4);
287 t74 = t43 + t44; t95 = MUL(t43 - t44, costab28);
288 t75 = t45 + t46; t96 = MUL(t45 - t46, costab12);
289 t76 = t47 + t48; t97 = MUL(t47 - t48, costab20);
290
291 t78 = t50 + t51; t100 = MUL(t50 - t51, costab4);
292 t79 = t52 + t53; t101 = MUL(t52 - t53, costab28);
293 t80 = t54 + t55; t102 = MUL(t54 - t55, costab12);
294 t81 = t56 + t57; t103 = MUL(t56 - t57, costab20);
295
296 t83 = t59 + t60; t106 = MUL(t59 - t60, costab4);
297 t84 = t61 + t62; t107 = MUL(t61 - t62, costab28);
298 t85 = t63 + t64; t108 = MUL(t63 - t64, costab12);
299 t86 = t65 + t66; t109 = MUL(t65 - t66, costab20);
300
301 t113 = t69 + t70;
302 t114 = t71 + t72;
303
304 /* 0 */ hi[15][slot] = SHIFT(t113 + t114);
305 /* 16 */ lo[ 0][slot] = SHIFT(MUL(t113 - t114, costab16));
306
307 t115 = t73 + t74;
308 t116 = t75 + t76;
309
310 t32 = t115 + t116;
311
312 /* 1 */ hi[14][slot] = SHIFT(t32);
313
314 t118 = t78 + t79;
315 t119 = t80 + t81;
316
317 t58 = t118 + t119;
318
319 /* 2 */ hi[13][slot] = SHIFT(t58);
320
321 t121 = t83 + t84;
322 t122 = t85 + t86;
323
324 t67 = t121 + t122;
325
326 t49 = (t67 * 2) - t32;
327
328 /* 3 */ hi[12][slot] = SHIFT(t49);
329
330 t125 = t89 + t90;
331 t126 = t91 + t92;
332
333 t93 = t125 + t126;
334
335 /* 4 */ hi[11][slot] = SHIFT(t93);
336
337 t128 = t94 + t95;
338 t129 = t96 + t97;
339
340 t98 = t128 + t129;
341
342 t68 = (t98 * 2) - t49;
343
344 /* 5 */ hi[10][slot] = SHIFT(t68);
345
346 t132 = t100 + t101;
347 t133 = t102 + t103;
348
349 t104 = t132 + t133;
350
351 t82 = (t104 * 2) - t58;
352
353 /* 6 */ hi[ 9][slot] = SHIFT(t82);
354
355 t136 = t106 + t107;
356 t137 = t108 + t109;
357
358 t110 = t136 + t137;
359
360 t87 = (t110 * 2) - t67;
361
362 t77 = (t87 * 2) - t68;
363
364 /* 7 */ hi[ 8][slot] = SHIFT(t77);
365
366 t141 = MUL(t69 - t70, costab8);
367 t142 = MUL(t71 - t72, costab24);
368 t143 = t141 + t142;
369
370 /* 8 */ hi[ 7][slot] = SHIFT(t143);
371 /* 24 */ lo[ 8][slot] =
372 SHIFT((MUL(t141 - t142, costab16) * 2) - t143);
373
374 t144 = MUL(t73 - t74, costab8);
375 t145 = MUL(t75 - t76, costab24);
376 t146 = t144 + t145;
377
378 t88 = (t146 * 2) - t77;
379
380 /* 9 */ hi[ 6][slot] = SHIFT(t88);
381
382 t148 = MUL(t78 - t79, costab8);
383 t149 = MUL(t80 - t81, costab24);
384 t150 = t148 + t149;
385
386 t105 = (t150 * 2) - t82;
387
388 /* 10 */ hi[ 5][slot] = SHIFT(t105);
389
390 t152 = MUL(t83 - t84, costab8);
391 t153 = MUL(t85 - t86, costab24);
392 t154 = t152 + t153;
393
394 t111 = (t154 * 2) - t87;
395
396 t99 = (t111 * 2) - t88;
397
398 /* 11 */ hi[ 4][slot] = SHIFT(t99);
399
400 t157 = MUL(t89 - t90, costab8);
401 t158 = MUL(t91 - t92, costab24);
402 t159 = t157 + t158;
403
404 t127 = (t159 * 2) - t93;
405
406 /* 12 */ hi[ 3][slot] = SHIFT(t127);
407
408 t160 = (MUL(t125 - t126, costab16) * 2) - t127;
409
410 /* 20 */ lo[ 4][slot] = SHIFT(t160);
411 /* 28 */ lo[12][slot] =
412 SHIFT((((MUL(t157 - t158, costab16) * 2) - t159) * 2) - t160);
413
414 t161 = MUL(t94 - t95, costab8);
415 t162 = MUL(t96 - t97, costab24);
416 t163 = t161 + t162;
417
418 t130 = (t163 * 2) - t98;
419
420 t112 = (t130 * 2) - t99;
421
422 /* 13 */ hi[ 2][slot] = SHIFT(t112);
423
424 t164 = (MUL(t128 - t129, costab16) * 2) - t130;
425
426 t166 = MUL(t100 - t101, costab8);
427 t167 = MUL(t102 - t103, costab24);
428 t168 = t166 + t167;
429
430 t134 = (t168 * 2) - t104;
431
432 t120 = (t134 * 2) - t105;
433
434 /* 14 */ hi[ 1][slot] = SHIFT(t120);
435
436 t135 = (MUL(t118 - t119, costab16) * 2) - t120;
437
438 /* 18 */ lo[ 2][slot] = SHIFT(t135);
439
440 t169 = (MUL(t132 - t133, costab16) * 2) - t134;
441
442 t151 = (t169 * 2) - t135;
443
444 /* 22 */ lo[ 6][slot] = SHIFT(t151);
445
446 t170 = (((MUL(t148 - t149, costab16) * 2) - t150) * 2) - t151;
447
448 /* 26 */ lo[10][slot] = SHIFT(t170);
449 /* 30 */ lo[14][slot] =
450 SHIFT((((((MUL(t166 - t167, costab16) * 2) -
451 t168) * 2) - t169) * 2) - t170);
452
453 t171 = MUL(t106 - t107, costab8);
454 t172 = MUL(t108 - t109, costab24);
455 t173 = t171 + t172;
456
457 t138 = (t173 * 2) - t110;
458
459 t123 = (t138 * 2) - t111;
460
461 t139 = (MUL(t121 - t122, costab16) * 2) - t123;
462
463 t117 = (t123 * 2) - t112;
464
465 /* 15 */ hi[ 0][slot] = SHIFT(t117);
466
467 t124 = (MUL(t115 - t116, costab16) * 2) - t117;
468
469 /* 17 */ lo[ 1][slot] = SHIFT(t124);
470
471 t131 = (t139 * 2) - t124;
472
473 /* 19 */ lo[ 3][slot] = SHIFT(t131);
474
475 t140 = (t164 * 2) - t131;
476
477 /* 21 */ lo[ 5][slot] = SHIFT(t140);
478
479 t174 = (MUL(t136 - t137, costab16) * 2) - t138;
480
481 t155 = (t174 * 2) - t139;
482
483 t147 = (t155 * 2) - t140;
484
485 /* 23 */ lo[ 7][slot] = SHIFT(t147);
486
487 t156 = (((MUL(t144 - t145, costab16) * 2) - t146) * 2) - t147;
488
489 /* 25 */ lo[ 9][slot] = SHIFT(t156);
490
491 t175 = (((MUL(t152 - t153, costab16) * 2) - t154) * 2) - t155;
492
493 t165 = (t175 * 2) - t156;
494
495 /* 27 */ lo[11][slot] = SHIFT(t165);
496
497 t176 = (((((MUL(t161 - t162, costab16) * 2) -
498 t163) * 2) - t164) * 2) - t165;
499
500 /* 29 */ lo[13][slot] = SHIFT(t176);
501 /* 31 */ lo[15][slot] =
502 SHIFT((((((((MUL(t171 - t172, costab16) * 2) -
503 t173) * 2) - t174) * 2) - t175) * 2) - t176);
504
505 /*
506 * Totals:
507 * 80 multiplies
508 * 80 additions
509 * 119 subtractions
510 * 49 shifts (not counting SSO)
511 */
512}
513
514# undef MUL
515# undef SHIFT
516
517/* third SSO shift and/or D[] optimization preshift */
518
519# if defined(OPT_SSO)
520# if MAD_F_FRACBITS != 28
521# error "MAD_F_FRACBITS must be 28 to use OPT_SSO"
522# endif
523# define ML0(hi, lo, x, y) ((lo) = (x) * (y))
524# define MLA(hi, lo, x, y) ((lo) += (x) * (y))
525# define MLN(hi, lo) ((lo) = -(lo))
526# define MLZ(hi, lo) ((void) (hi), (mad_fixed_t) (lo))
527# define SHIFT(x) ((x) >> 2)
528# define PRESHIFT(x) ((MAD_F(x) + (1L << 13)) >> 14)
529# else
530# define ML0(hi, lo, x, y) MAD_F_ML0((hi), (lo), (x), (y))
531# define MLA(hi, lo, x, y) MAD_F_MLA((hi), (lo), (x), (y))
532# define MLN(hi, lo) MAD_F_MLN((hi), (lo))
533# define MLZ(hi, lo) MAD_F_MLZ((hi), (lo))
534# define SHIFT(x) (x)
535# if defined(MAD_F_SCALEBITS)
536# undef MAD_F_SCALEBITS
537# define MAD_F_SCALEBITS (MAD_F_FRACBITS - 12)
538# define PRESHIFT(x) (MAD_F(x) >> 12)
539# else
540# define PRESHIFT(x) MAD_F(x)
541# endif
542# endif
543
544static
545mad_fixed_t const D[17][32] = {
546# include "D.dat"
547};
548
549# if defined(ASO_SYNTH)
550void synth_full(struct mad_synth *, struct mad_frame const *,
551 unsigned int, unsigned int);
552# else
553/*
554 * NAME: synth->full()
555 * DESCRIPTION: perform full frequency PCM synthesis
556 */
557static
558void synth_full(struct mad_synth *synth, struct mad_frame const *frame,
559 unsigned int nch, unsigned int ns)
560{
561 unsigned int phase, ch, s, sb, pe, po;
562 mad_fixed_t *pcm1, *pcm2, (*filter)[2][2][16][8];
563 mad_fixed_t const (*sbsample)[36][32];
564 register mad_fixed_t (*fe)[8], (*fx)[8], (*fo)[8];
565 register mad_fixed_t const (*Dptr)[32], *ptr;
566 register mad_fixed64hi_t hi;
567 register mad_fixed64lo_t lo;
568
569 for (ch = 0; ch < nch; ++ch) {
570 sbsample = &frame->sbsample[ch];
571 filter = &synth->filter[ch];
572 phase = synth->phase;
573 pcm1 = synth->pcm.samples[ch];
574
575 for (s = 0; s < ns; ++s) {
576 dct32((*sbsample)[s], phase >> 1,
577 (*filter)[0][phase & 1], (*filter)[1][phase & 1]);
578
579 pe = phase & ~1;
580 po = ((phase - 1) & 0xf) | 1;
581
582 /* calculate 32 samples */
583
584 fe = &(*filter)[0][ phase & 1][0];
585 fx = &(*filter)[0][~phase & 1][0];
586 fo = &(*filter)[1][~phase & 1][0];
587
588 Dptr = &D[0];
589
590 ptr = *Dptr + po;
591 ML0(hi, lo, (*fx)[0], ptr[ 0]);
592 MLA(hi, lo, (*fx)[1], ptr[14]);
593 MLA(hi, lo, (*fx)[2], ptr[12]);
594 MLA(hi, lo, (*fx)[3], ptr[10]);
595 MLA(hi, lo, (*fx)[4], ptr[ 8]);
596 MLA(hi, lo, (*fx)[5], ptr[ 6]);
597 MLA(hi, lo, (*fx)[6], ptr[ 4]);
598 MLA(hi, lo, (*fx)[7], ptr[ 2]);
599 MLN(hi, lo);
600
601 ptr = *Dptr + pe;
602 MLA(hi, lo, (*fe)[0], ptr[ 0]);
603 MLA(hi, lo, (*fe)[1], ptr[14]);
604 MLA(hi, lo, (*fe)[2], ptr[12]);
605 MLA(hi, lo, (*fe)[3], ptr[10]);
606 MLA(hi, lo, (*fe)[4], ptr[ 8]);
607 MLA(hi, lo, (*fe)[5], ptr[ 6]);
608 MLA(hi, lo, (*fe)[6], ptr[ 4]);
609 MLA(hi, lo, (*fe)[7], ptr[ 2]);
610
611 *pcm1++ = SHIFT(MLZ(hi, lo));
612
613 pcm2 = pcm1 + 30;
614
615 for (sb = 1; sb < 16; ++sb) {
616 ++fe;
617 ++Dptr;
618
619 /* D[32 - sb][i] == -D[sb][31 - i] */
620
621 ptr = *Dptr + po;
622 ML0(hi, lo, (*fo)[0], ptr[ 0]);
623 MLA(hi, lo, (*fo)[1], ptr[14]);
624 MLA(hi, lo, (*fo)[2], ptr[12]);
625 MLA(hi, lo, (*fo)[3], ptr[10]);
626 MLA(hi, lo, (*fo)[4], ptr[ 8]);
627 MLA(hi, lo, (*fo)[5], ptr[ 6]);
628 MLA(hi, lo, (*fo)[6], ptr[ 4]);
629 MLA(hi, lo, (*fo)[7], ptr[ 2]);
630 MLN(hi, lo);
631
632 ptr = *Dptr + pe;
633 MLA(hi, lo, (*fe)[7], ptr[ 2]);
634 MLA(hi, lo, (*fe)[6], ptr[ 4]);
635 MLA(hi, lo, (*fe)[5], ptr[ 6]);
636 MLA(hi, lo, (*fe)[4], ptr[ 8]);
637 MLA(hi, lo, (*fe)[3], ptr[10]);
638 MLA(hi, lo, (*fe)[2], ptr[12]);
639 MLA(hi, lo, (*fe)[1], ptr[14]);
640 MLA(hi, lo, (*fe)[0], ptr[ 0]);
641
642 *pcm1++ = SHIFT(MLZ(hi, lo));
643
644 ptr = *Dptr - pe;
645 ML0(hi, lo, (*fe)[0], ptr[31 - 16]);
646 MLA(hi, lo, (*fe)[1], ptr[31 - 14]);
647 MLA(hi, lo, (*fe)[2], ptr[31 - 12]);
648 MLA(hi, lo, (*fe)[3], ptr[31 - 10]);
649 MLA(hi, lo, (*fe)[4], ptr[31 - 8]);
650 MLA(hi, lo, (*fe)[5], ptr[31 - 6]);
651 MLA(hi, lo, (*fe)[6], ptr[31 - 4]);
652 MLA(hi, lo, (*fe)[7], ptr[31 - 2]);
653
654 ptr = *Dptr - po;
655 MLA(hi, lo, (*fo)[7], ptr[31 - 2]);
656 MLA(hi, lo, (*fo)[6], ptr[31 - 4]);
657 MLA(hi, lo, (*fo)[5], ptr[31 - 6]);
658 MLA(hi, lo, (*fo)[4], ptr[31 - 8]);
659 MLA(hi, lo, (*fo)[3], ptr[31 - 10]);
660 MLA(hi, lo, (*fo)[2], ptr[31 - 12]);
661 MLA(hi, lo, (*fo)[1], ptr[31 - 14]);
662 MLA(hi, lo, (*fo)[0], ptr[31 - 16]);
663
664 *pcm2-- = SHIFT(MLZ(hi, lo));
665
666 ++fo;
667 }
668
669 ++Dptr;
670
671 ptr = *Dptr + po;
672 ML0(hi, lo, (*fo)[0], ptr[ 0]);
673 MLA(hi, lo, (*fo)[1], ptr[14]);
674 MLA(hi, lo, (*fo)[2], ptr[12]);
675 MLA(hi, lo, (*fo)[3], ptr[10]);
676 MLA(hi, lo, (*fo)[4], ptr[ 8]);
677 MLA(hi, lo, (*fo)[5], ptr[ 6]);
678 MLA(hi, lo, (*fo)[6], ptr[ 4]);
679 MLA(hi, lo, (*fo)[7], ptr[ 2]);
680
681 *pcm1 = SHIFT(-MLZ(hi, lo));
682 pcm1 += 16;
683
684 phase = (phase + 1) % 16;
685 }
686 }
687}
688# endif
689
690/*
691 * NAME: synth->half()
692 * DESCRIPTION: perform half frequency PCM synthesis
693 */
694static
695void synth_half(struct mad_synth *synth, struct mad_frame const *frame,
696 unsigned int nch, unsigned int ns)
697{
698 unsigned int phase, ch, s, sb, pe, po;
699 mad_fixed_t *pcm1, *pcm2, (*filter)[2][2][16][8];
700 mad_fixed_t const (*sbsample)[36][32];
701 register mad_fixed_t (*fe)[8], (*fx)[8], (*fo)[8];
702 register mad_fixed_t const (*Dptr)[32], *ptr;
703 register mad_fixed64hi_t hi;
704 register mad_fixed64lo_t lo;
705
706 for (ch = 0; ch < nch; ++ch) {
707 sbsample = &frame->sbsample[ch];
708 filter = &synth->filter[ch];
709 phase = synth->phase;
710 pcm1 = synth->pcm.samples[ch];
711
712 for (s = 0; s < ns; ++s) {
713 dct32((*sbsample)[s], phase >> 1,
714 (*filter)[0][phase & 1], (*filter)[1][phase & 1]);
715
716 pe = phase & ~1;
717 po = ((phase - 1) & 0xf) | 1;
718
719 /* calculate 16 samples */
720
721 fe = &(*filter)[0][ phase & 1][0];
722 fx = &(*filter)[0][~phase & 1][0];
723 fo = &(*filter)[1][~phase & 1][0];
724
725 Dptr = &D[0];
726
727 ptr = *Dptr + po;
728 ML0(hi, lo, (*fx)[0], ptr[ 0]);
729 MLA(hi, lo, (*fx)[1], ptr[14]);
730 MLA(hi, lo, (*fx)[2], ptr[12]);
731 MLA(hi, lo, (*fx)[3], ptr[10]);
732 MLA(hi, lo, (*fx)[4], ptr[ 8]);
733 MLA(hi, lo, (*fx)[5], ptr[ 6]);
734 MLA(hi, lo, (*fx)[6], ptr[ 4]);
735 MLA(hi, lo, (*fx)[7], ptr[ 2]);
736 MLN(hi, lo);
737
738 ptr = *Dptr + pe;
739 MLA(hi, lo, (*fe)[0], ptr[ 0]);
740 MLA(hi, lo, (*fe)[1], ptr[14]);
741 MLA(hi, lo, (*fe)[2], ptr[12]);
742 MLA(hi, lo, (*fe)[3], ptr[10]);
743 MLA(hi, lo, (*fe)[4], ptr[ 8]);
744 MLA(hi, lo, (*fe)[5], ptr[ 6]);
745 MLA(hi, lo, (*fe)[6], ptr[ 4]);
746 MLA(hi, lo, (*fe)[7], ptr[ 2]);
747
748 *pcm1++ = SHIFT(MLZ(hi, lo));
749
750 pcm2 = pcm1 + 14;
751
752 for (sb = 1; sb < 16; ++sb) {
753 ++fe;
754 ++Dptr;
755
756 /* D[32 - sb][i] == -D[sb][31 - i] */
757
758 if (!(sb & 1)) {
759 ptr = *Dptr + po;
760 ML0(hi, lo, (*fo)[0], ptr[ 0]);
761 MLA(hi, lo, (*fo)[1], ptr[14]);
762 MLA(hi, lo, (*fo)[2], ptr[12]);
763 MLA(hi, lo, (*fo)[3], ptr[10]);
764 MLA(hi, lo, (*fo)[4], ptr[ 8]);
765 MLA(hi, lo, (*fo)[5], ptr[ 6]);
766 MLA(hi, lo, (*fo)[6], ptr[ 4]);
767 MLA(hi, lo, (*fo)[7], ptr[ 2]);
768 MLN(hi, lo);
769
770 ptr = *Dptr + pe;
771 MLA(hi, lo, (*fe)[7], ptr[ 2]);
772 MLA(hi, lo, (*fe)[6], ptr[ 4]);
773 MLA(hi, lo, (*fe)[5], ptr[ 6]);
774 MLA(hi, lo, (*fe)[4], ptr[ 8]);
775 MLA(hi, lo, (*fe)[3], ptr[10]);
776 MLA(hi, lo, (*fe)[2], ptr[12]);
777 MLA(hi, lo, (*fe)[1], ptr[14]);
778 MLA(hi, lo, (*fe)[0], ptr[ 0]);
779
780 *pcm1++ = SHIFT(MLZ(hi, lo));
781
782 ptr = *Dptr - po;
783 ML0(hi, lo, (*fo)[7], ptr[31 - 2]);
784 MLA(hi, lo, (*fo)[6], ptr[31 - 4]);
785 MLA(hi, lo, (*fo)[5], ptr[31 - 6]);
786 MLA(hi, lo, (*fo)[4], ptr[31 - 8]);
787 MLA(hi, lo, (*fo)[3], ptr[31 - 10]);
788 MLA(hi, lo, (*fo)[2], ptr[31 - 12]);
789 MLA(hi, lo, (*fo)[1], ptr[31 - 14]);
790 MLA(hi, lo, (*fo)[0], ptr[31 - 16]);
791
792 ptr = *Dptr - pe;
793 MLA(hi, lo, (*fe)[0], ptr[31 - 16]);
794 MLA(hi, lo, (*fe)[1], ptr[31 - 14]);
795 MLA(hi, lo, (*fe)[2], ptr[31 - 12]);
796 MLA(hi, lo, (*fe)[3], ptr[31 - 10]);
797 MLA(hi, lo, (*fe)[4], ptr[31 - 8]);
798 MLA(hi, lo, (*fe)[5], ptr[31 - 6]);
799 MLA(hi, lo, (*fe)[6], ptr[31 - 4]);
800 MLA(hi, lo, (*fe)[7], ptr[31 - 2]);
801
802 *pcm2-- = SHIFT(MLZ(hi, lo));
803 }
804
805 ++fo;
806 }
807
808 ++Dptr;
809
810 ptr = *Dptr + po;
811 ML0(hi, lo, (*fo)[0], ptr[ 0]);
812 MLA(hi, lo, (*fo)[1], ptr[14]);
813 MLA(hi, lo, (*fo)[2], ptr[12]);
814 MLA(hi, lo, (*fo)[3], ptr[10]);
815 MLA(hi, lo, (*fo)[4], ptr[ 8]);
816 MLA(hi, lo, (*fo)[5], ptr[ 6]);
817 MLA(hi, lo, (*fo)[6], ptr[ 4]);
818 MLA(hi, lo, (*fo)[7], ptr[ 2]);
819
820 *pcm1 = SHIFT(-MLZ(hi, lo));
821 pcm1 += 8;
822
823 phase = (phase + 1) % 16;
824 }
825 }
826}
827
828/*
829 * NAME: synth->frame()
830 * DESCRIPTION: perform PCM synthesis of frame subband samples
831 */
832void mad_synth_frame(struct mad_synth *synth, struct mad_frame const *frame)
833{
834 unsigned int nch, ns;
835 void (*synth_frame)(struct mad_synth *, struct mad_frame const *,
836 unsigned int, unsigned int);
837
838 nch = MAD_NCHANNELS(&frame->header);
839 ns = MAD_NSBSAMPLES(&frame->header);
840
841 synth->pcm.samplerate = frame->header.samplerate;
842 synth->pcm.channels = nch;
843 synth->pcm.length = 32 * ns;
844
845 synth_frame = synth_full;
846
847 if (frame->options & MAD_OPTION_HALFSAMPLERATE) {
848 synth->pcm.samplerate /= 2;
849 synth->pcm.length /= 2;
850
851 synth_frame = synth_half;
852 }
853
854 synth_frame(synth, frame, nch, ns);
855
856 synth->phase = (synth->phase + ns) % 16;
857}
diff --git a/uisimulator/common/libmad/synth.h b/uisimulator/common/libmad/synth.h
new file mode 100644
index 0000000000..2c9d5c886c
--- /dev/null
+++ b/uisimulator/common/libmad/synth.h
@@ -0,0 +1,69 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22# ifndef LIBMAD_SYNTH_H
23# define LIBMAD_SYNTH_H
24
25# include "fixed.h"
26# include "frame.h"
27
28struct mad_pcm {
29 unsigned int samplerate; /* sampling frequency (Hz) */
30 unsigned short channels; /* number of channels */
31 unsigned short length; /* number of samples per channel */
32 mad_fixed_t samples[2][1152]; /* PCM output samples [ch][sample] */
33};
34
35struct mad_synth {
36 mad_fixed_t filter[2][2][2][16][8]; /* polyphase filterbank outputs */
37 /* [ch][eo][peo][s][v] */
38
39 unsigned int phase; /* current processing phase */
40
41 struct mad_pcm pcm; /* PCM output */
42};
43
44/* single channel PCM selector */
45enum {
46 MAD_PCM_CHANNEL_SINGLE = 0
47};
48
49/* dual channel PCM selector */
50enum {
51 MAD_PCM_CHANNEL_DUAL_1 = 0,
52 MAD_PCM_CHANNEL_DUAL_2 = 1
53};
54
55/* stereo PCM selector */
56enum {
57 MAD_PCM_CHANNEL_STEREO_LEFT = 0,
58 MAD_PCM_CHANNEL_STEREO_RIGHT = 1
59};
60
61void mad_synth_init(struct mad_synth *);
62
63# define mad_synth_finish(synth) /* nothing */
64
65void mad_synth_mute(struct mad_synth *);
66
67void mad_synth_frame(struct mad_synth *, struct mad_frame const *);
68
69# endif
diff --git a/uisimulator/common/libmad/timer.c b/uisimulator/common/libmad/timer.c
new file mode 100644
index 0000000000..57fe090fe8
--- /dev/null
+++ b/uisimulator/common/libmad/timer.c
@@ -0,0 +1,484 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22# ifdef HAVE_CONFIG_H
23# include "madconfig.h"
24# endif
25
26# include "global.h"
27
28# include <stdio.h>
29
30# ifdef HAVE_ASSERT_H
31# include <assert.h>
32# endif
33
34# include "timer.h"
35
36mad_timer_t const mad_timer_zero = { 0, 0 };
37
38/*
39 * NAME: timer->compare()
40 * DESCRIPTION: indicate relative order of two timers
41 */
42int mad_timer_compare(mad_timer_t timer1, mad_timer_t timer2)
43{
44 signed long diff;
45
46 diff = timer1.seconds - timer2.seconds;
47 if (diff < 0)
48 return -1;
49 else if (diff > 0)
50 return +1;
51
52 diff = timer1.fraction - timer2.fraction;
53 if (diff < 0)
54 return -1;
55 else if (diff > 0)
56 return +1;
57
58 return 0;
59}
60
61/*
62 * NAME: timer->negate()
63 * DESCRIPTION: invert the sign of a timer
64 */
65void mad_timer_negate(mad_timer_t *timer)
66{
67 timer->seconds = -timer->seconds;
68
69 if (timer->fraction) {
70 timer->seconds -= 1;
71 timer->fraction = MAD_TIMER_RESOLUTION - timer->fraction;
72 }
73}
74
75/*
76 * NAME: timer->abs()
77 * DESCRIPTION: return the absolute value of a timer
78 */
79mad_timer_t mad_timer_abs(mad_timer_t timer)
80{
81 if (mad_timer_sign(timer) < 0)
82 mad_timer_negate(&timer);
83
84 return timer;
85}
86
87/*
88 * NAME: reduce_timer()
89 * DESCRIPTION: carry timer fraction into seconds
90 */
91static
92void reduce_timer(mad_timer_t *timer)
93{
94 timer->seconds += timer->fraction / MAD_TIMER_RESOLUTION;
95 timer->fraction %= MAD_TIMER_RESOLUTION;
96}
97
98/*
99 * NAME: gcd()
100 * DESCRIPTION: compute greatest common denominator
101 */
102static
103unsigned long gcd(unsigned long num1, unsigned long num2)
104{
105 unsigned long tmp;
106
107 while (num2) {
108 tmp = num2;
109 num2 = num1 % num2;
110 num1 = tmp;
111 }
112
113 return num1;
114}
115
116/*
117 * NAME: reduce_rational()
118 * DESCRIPTION: convert rational expression to lowest terms
119 */
120static
121void reduce_rational(unsigned long *numer, unsigned long *denom)
122{
123 unsigned long factor;
124
125 factor = gcd(*numer, *denom);
126
127 assert(factor != 0);
128
129 *numer /= factor;
130 *denom /= factor;
131}
132
133/*
134 * NAME: scale_rational()
135 * DESCRIPTION: solve numer/denom == ?/scale avoiding overflowing
136 */
137static
138unsigned long scale_rational(unsigned long numer, unsigned long denom,
139 unsigned long scale)
140{
141 reduce_rational(&numer, &denom);
142 reduce_rational(&scale, &denom);
143
144 assert(denom != 0);
145
146 if (denom < scale)
147 return numer * (scale / denom) + numer * (scale % denom) / denom;
148 if (denom < numer)
149 return scale * (numer / denom) + scale * (numer % denom) / denom;
150
151 return numer * scale / denom;
152}
153
154/*
155 * NAME: timer->set()
156 * DESCRIPTION: set timer to specific (positive) value
157 */
158void mad_timer_set(mad_timer_t *timer, unsigned long seconds,
159 unsigned long numer, unsigned long denom)
160{
161 timer->seconds = seconds;
162 if (numer >= denom && denom > 0) {
163 timer->seconds += numer / denom;
164 numer %= denom;
165 }
166
167 switch (denom) {
168 case 0:
169 case 1:
170 timer->fraction = 0;
171 break;
172
173 case MAD_TIMER_RESOLUTION:
174 timer->fraction = numer;
175 break;
176
177 case 1000:
178 timer->fraction = numer * (MAD_TIMER_RESOLUTION / 1000);
179 break;
180
181 case 8000:
182 timer->fraction = numer * (MAD_TIMER_RESOLUTION / 8000);
183 break;
184
185 case 11025:
186 timer->fraction = numer * (MAD_TIMER_RESOLUTION / 11025);
187 break;
188
189 case 12000:
190 timer->fraction = numer * (MAD_TIMER_RESOLUTION / 12000);
191 break;
192
193 case 16000:
194 timer->fraction = numer * (MAD_TIMER_RESOLUTION / 16000);
195 break;
196
197 case 22050:
198 timer->fraction = numer * (MAD_TIMER_RESOLUTION / 22050);
199 break;
200
201 case 24000:
202 timer->fraction = numer * (MAD_TIMER_RESOLUTION / 24000);
203 break;
204
205 case 32000:
206 timer->fraction = numer * (MAD_TIMER_RESOLUTION / 32000);
207 break;
208
209 case 44100:
210 timer->fraction = numer * (MAD_TIMER_RESOLUTION / 44100);
211 break;
212
213 case 48000:
214 timer->fraction = numer * (MAD_TIMER_RESOLUTION / 48000);
215 break;
216
217 default:
218 timer->fraction = scale_rational(numer, denom, MAD_TIMER_RESOLUTION);
219 break;
220 }
221
222 if (timer->fraction >= MAD_TIMER_RESOLUTION)
223 reduce_timer(timer);
224}
225
226/*
227 * NAME: timer->add()
228 * DESCRIPTION: add one timer to another
229 */
230void mad_timer_add(mad_timer_t *timer, mad_timer_t incr)
231{
232 timer->seconds += incr.seconds;
233 timer->fraction += incr.fraction;
234
235 if (timer->fraction >= MAD_TIMER_RESOLUTION)
236 reduce_timer(timer);
237}
238
239/*
240 * NAME: timer->multiply()
241 * DESCRIPTION: multiply a timer by a scalar value
242 */
243void mad_timer_multiply(mad_timer_t *timer, signed long scalar)
244{
245 mad_timer_t addend;
246 unsigned long factor;
247
248 factor = scalar;
249 if (scalar < 0) {
250 factor = -scalar;
251 mad_timer_negate(timer);
252 }
253
254 addend = *timer;
255 *timer = mad_timer_zero;
256
257 while (factor) {
258 if (factor & 1)
259 mad_timer_add(timer, addend);
260
261 mad_timer_add(&addend, addend);
262 factor >>= 1;
263 }
264}
265
266/*
267 * NAME: timer->count()
268 * DESCRIPTION: return timer value in selected units
269 */
270signed long mad_timer_count(mad_timer_t timer, enum mad_units units)
271{
272 switch (units) {
273 case MAD_UNITS_HOURS:
274 return timer.seconds / 60 / 60;
275
276 case MAD_UNITS_MINUTES:
277 return timer.seconds / 60;
278
279 case MAD_UNITS_SECONDS:
280 return timer.seconds;
281
282 case MAD_UNITS_DECISECONDS:
283 case MAD_UNITS_CENTISECONDS:
284 case MAD_UNITS_MILLISECONDS:
285
286 case MAD_UNITS_8000_HZ:
287 case MAD_UNITS_11025_HZ:
288 case MAD_UNITS_12000_HZ:
289 case MAD_UNITS_16000_HZ:
290 case MAD_UNITS_22050_HZ:
291 case MAD_UNITS_24000_HZ:
292 case MAD_UNITS_32000_HZ:
293 case MAD_UNITS_44100_HZ:
294 case MAD_UNITS_48000_HZ:
295
296 case MAD_UNITS_24_FPS:
297 case MAD_UNITS_25_FPS:
298 case MAD_UNITS_30_FPS:
299 case MAD_UNITS_48_FPS:
300 case MAD_UNITS_50_FPS:
301 case MAD_UNITS_60_FPS:
302 case MAD_UNITS_75_FPS:
303 return timer.seconds * (signed long) units +
304 (signed long) scale_rational(timer.fraction, MAD_TIMER_RESOLUTION,
305 units);
306
307 case MAD_UNITS_23_976_FPS:
308 case MAD_UNITS_24_975_FPS:
309 case MAD_UNITS_29_97_FPS:
310 case MAD_UNITS_47_952_FPS:
311 case MAD_UNITS_49_95_FPS:
312 case MAD_UNITS_59_94_FPS:
313 return (mad_timer_count(timer, -units) + 1) * 1000 / 1001;
314 }
315
316 /* unsupported units */
317 return 0;
318}
319
320/*
321 * NAME: timer->fraction()
322 * DESCRIPTION: return fractional part of timer in arbitrary terms
323 */
324unsigned long mad_timer_fraction(mad_timer_t timer, unsigned long denom)
325{
326 timer = mad_timer_abs(timer);
327
328 switch (denom) {
329 case 0:
330 return MAD_TIMER_RESOLUTION / timer.fraction;
331
332 case MAD_TIMER_RESOLUTION:
333 return timer.fraction;
334
335 default:
336 return scale_rational(timer.fraction, MAD_TIMER_RESOLUTION, denom);
337 }
338}
339
340/*
341 * NAME: timer->string()
342 * DESCRIPTION: write a string representation of a timer using a template
343 */
344void mad_timer_string(mad_timer_t timer,
345 char *dest, char const *format, enum mad_units units,
346 enum mad_units fracunits, unsigned long subparts)
347{
348 unsigned long hours, minutes, seconds, sub;
349 unsigned int frac;
350
351 timer = mad_timer_abs(timer);
352
353 seconds = timer.seconds;
354 frac = sub = 0;
355
356 switch (fracunits) {
357 case MAD_UNITS_HOURS:
358 case MAD_UNITS_MINUTES:
359 case MAD_UNITS_SECONDS:
360 break;
361
362 case MAD_UNITS_DECISECONDS:
363 case MAD_UNITS_CENTISECONDS:
364 case MAD_UNITS_MILLISECONDS:
365
366 case MAD_UNITS_8000_HZ:
367 case MAD_UNITS_11025_HZ:
368 case MAD_UNITS_12000_HZ:
369 case MAD_UNITS_16000_HZ:
370 case MAD_UNITS_22050_HZ:
371 case MAD_UNITS_24000_HZ:
372 case MAD_UNITS_32000_HZ:
373 case MAD_UNITS_44100_HZ:
374 case MAD_UNITS_48000_HZ:
375
376 case MAD_UNITS_24_FPS:
377 case MAD_UNITS_25_FPS:
378 case MAD_UNITS_30_FPS:
379 case MAD_UNITS_48_FPS:
380 case MAD_UNITS_50_FPS:
381 case MAD_UNITS_60_FPS:
382 case MAD_UNITS_75_FPS:
383 {
384 unsigned long denom;
385
386 denom = MAD_TIMER_RESOLUTION / fracunits;
387
388 frac = timer.fraction / denom;
389 sub = scale_rational(timer.fraction % denom, denom, subparts);
390 }
391 break;
392
393 case MAD_UNITS_23_976_FPS:
394 case MAD_UNITS_24_975_FPS:
395 case MAD_UNITS_29_97_FPS:
396 case MAD_UNITS_47_952_FPS:
397 case MAD_UNITS_49_95_FPS:
398 case MAD_UNITS_59_94_FPS:
399 /* drop-frame encoding */
400 /* N.B. this is only well-defined for MAD_UNITS_29_97_FPS */
401 {
402 unsigned long frame, cycle, d, m;
403
404 frame = mad_timer_count(timer, fracunits);
405
406 cycle = -fracunits * 60 * 10 - (10 - 1) * 2;
407
408 d = frame / cycle;
409 m = frame % cycle;
410 frame += (10 - 1) * 2 * d;
411 if (m > 2)
412 frame += 2 * ((m - 2) / (cycle / 10));
413
414 frac = frame % -fracunits;
415 seconds = frame / -fracunits;
416 }
417 break;
418 }
419
420 switch (units) {
421 case MAD_UNITS_HOURS:
422 minutes = seconds / 60;
423 hours = minutes / 60;
424
425 sprintf(dest, format,
426 hours,
427 (unsigned int) (minutes % 60),
428 (unsigned int) (seconds % 60),
429 frac, sub);
430 break;
431
432 case MAD_UNITS_MINUTES:
433 minutes = seconds / 60;
434
435 sprintf(dest, format,
436 minutes,
437 (unsigned int) (seconds % 60),
438 frac, sub);
439 break;
440
441 case MAD_UNITS_SECONDS:
442 sprintf(dest, format,
443 seconds,
444 frac, sub);
445 break;
446
447 case MAD_UNITS_23_976_FPS:
448 case MAD_UNITS_24_975_FPS:
449 case MAD_UNITS_29_97_FPS:
450 case MAD_UNITS_47_952_FPS:
451 case MAD_UNITS_49_95_FPS:
452 case MAD_UNITS_59_94_FPS:
453 if (fracunits < 0) {
454 /* not yet implemented */
455 sub = 0;
456 }
457
458 /* fall through */
459
460 case MAD_UNITS_DECISECONDS:
461 case MAD_UNITS_CENTISECONDS:
462 case MAD_UNITS_MILLISECONDS:
463
464 case MAD_UNITS_8000_HZ:
465 case MAD_UNITS_11025_HZ:
466 case MAD_UNITS_12000_HZ:
467 case MAD_UNITS_16000_HZ:
468 case MAD_UNITS_22050_HZ:
469 case MAD_UNITS_24000_HZ:
470 case MAD_UNITS_32000_HZ:
471 case MAD_UNITS_44100_HZ:
472 case MAD_UNITS_48000_HZ:
473
474 case MAD_UNITS_24_FPS:
475 case MAD_UNITS_25_FPS:
476 case MAD_UNITS_30_FPS:
477 case MAD_UNITS_48_FPS:
478 case MAD_UNITS_50_FPS:
479 case MAD_UNITS_60_FPS:
480 case MAD_UNITS_75_FPS:
481 sprintf(dest, format, mad_timer_count(timer, units), sub);
482 break;
483 }
484}
diff --git a/uisimulator/common/libmad/timer.h b/uisimulator/common/libmad/timer.h
new file mode 100644
index 0000000000..f8afb8edd9
--- /dev/null
+++ b/uisimulator/common/libmad/timer.h
@@ -0,0 +1,100 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22# ifndef LIBMAD_TIMER_H
23# define LIBMAD_TIMER_H
24
25typedef struct {
26 signed long seconds; /* whole seconds */
27 unsigned long fraction; /* 1/MAD_TIMER_RESOLUTION seconds */
28} mad_timer_t;
29
30extern mad_timer_t const mad_timer_zero;
31
32# define MAD_TIMER_RESOLUTION 352800000UL
33
34enum mad_units {
35 MAD_UNITS_HOURS = -2,
36 MAD_UNITS_MINUTES = -1,
37 MAD_UNITS_SECONDS = 0,
38
39 /* metric units */
40
41 MAD_UNITS_DECISECONDS = 10,
42 MAD_UNITS_CENTISECONDS = 100,
43 MAD_UNITS_MILLISECONDS = 1000,
44
45 /* audio sample units */
46
47 MAD_UNITS_8000_HZ = 8000,
48 MAD_UNITS_11025_HZ = 11025,
49 MAD_UNITS_12000_HZ = 12000,
50
51 MAD_UNITS_16000_HZ = 16000,
52 MAD_UNITS_22050_HZ = 22050,
53 MAD_UNITS_24000_HZ = 24000,
54
55 MAD_UNITS_32000_HZ = 32000,
56 MAD_UNITS_44100_HZ = 44100,
57 MAD_UNITS_48000_HZ = 48000,
58
59 /* video frame/field units */
60
61 MAD_UNITS_24_FPS = 24,
62 MAD_UNITS_25_FPS = 25,
63 MAD_UNITS_30_FPS = 30,
64 MAD_UNITS_48_FPS = 48,
65 MAD_UNITS_50_FPS = 50,
66 MAD_UNITS_60_FPS = 60,
67
68 /* CD audio frames */
69
70 MAD_UNITS_75_FPS = 75,
71
72 /* video drop-frame units */
73
74 MAD_UNITS_23_976_FPS = -24,
75 MAD_UNITS_24_975_FPS = -25,
76 MAD_UNITS_29_97_FPS = -30,
77 MAD_UNITS_47_952_FPS = -48,
78 MAD_UNITS_49_95_FPS = -50,
79 MAD_UNITS_59_94_FPS = -60
80};
81
82# define mad_timer_reset(timer) ((void) (*(timer) = mad_timer_zero))
83
84int mad_timer_compare(mad_timer_t, mad_timer_t);
85
86# define mad_timer_sign(timer) mad_timer_compare((timer), mad_timer_zero)
87
88void mad_timer_negate(mad_timer_t *);
89mad_timer_t mad_timer_abs(mad_timer_t);
90
91void mad_timer_set(mad_timer_t *, unsigned long, unsigned long, unsigned long);
92void mad_timer_add(mad_timer_t *, mad_timer_t);
93void mad_timer_multiply(mad_timer_t *, signed long);
94
95signed long mad_timer_count(mad_timer_t, enum mad_units);
96unsigned long mad_timer_fraction(mad_timer_t, unsigned long);
97void mad_timer_string(mad_timer_t, char *, char const *,
98 enum mad_units, enum mad_units, unsigned long);
99
100# endif
diff --git a/uisimulator/common/libmad/version.c b/uisimulator/common/libmad/version.c
new file mode 100644
index 0000000000..41e4c33518
--- /dev/null
+++ b/uisimulator/common/libmad/version.c
@@ -0,0 +1,91 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22# ifdef HAVE_CONFIG_H
23# include "madconfig.h"
24# endif
25
26# include "global.h"
27
28# include "version.h"
29
30char const mad_version[] = "MPEG Audio Decoder " MAD_VERSION;
31char const mad_copyright[] = "Copyright (C) " MAD_PUBLISHYEAR " " MAD_AUTHOR;
32char const mad_author[] = MAD_AUTHOR " <" MAD_EMAIL ">";
33
34char const mad_build[] = ""
35# if defined(FPM_64BIT)
36 "FPM_64BIT "
37# elif defined(FPM_INTEL)
38 "FPM_INTEL "
39# elif defined(FPM_ARM)
40 "FPM_ARM "
41# elif defined(FPM_MIPS)
42 "FPM_MIPS "
43# elif defined(FPM_SPARC)
44 "FPM_SPARC "
45# elif defined(FPM_PPC)
46 "FPM_PPC "
47# elif defined(FPM_DEFAULT)
48 "FPM_DEFAULT "
49# endif
50
51# if defined(ASO_IMDCT)
52 "ASO_IMDCT "
53# endif
54# if defined(ASO_INTERLEAVE1)
55 "ASO_INTERLEAVE1 "
56# endif
57# if defined(ASO_INTERLEAVE2)
58 "ASO_INTERLEAVE2 "
59# endif
60# if defined(ASO_ZEROCHECK)
61 "ASO_ZEROCHECK "
62# endif
63
64# if defined(OPT_SPEED)
65 "OPT_SPEED "
66# elif defined(OPT_ACCURACY)
67 "OPT_ACCURACY "
68# endif
69
70# if defined(OPT_SSO)
71 "OPT_SSO "
72# endif
73
74# if defined(OPT_DCTO) /* never defined here */
75 "OPT_DCTO "
76# endif
77
78# if defined(OPT_STRICT)
79 "OPT_STRICT "
80# endif
81
82# if defined(EXPERIMENTAL)
83 "EXPERIMENTAL "
84# endif
85
86# if defined(DEBUG)
87 "DEBUG "
88# elif defined(NDEBUG)
89 "NDEBUG "
90# endif
91;
diff --git a/uisimulator/common/libmad/version.h b/uisimulator/common/libmad/version.h
new file mode 100644
index 0000000000..9e684a70ed
--- /dev/null
+++ b/uisimulator/common/libmad/version.h
@@ -0,0 +1,47 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22# ifndef LIBMAD_VERSION_H
23# define LIBMAD_VERSION_H
24
25# define MAD_VERSION_MAJOR 0
26# define MAD_VERSION_MINOR 14
27# define MAD_VERSION_PATCH 2
28# define MAD_VERSION_EXTRA " (beta)"
29
30# define MAD_VERSION_STRINGIZE(str) #str
31# define MAD_VERSION_STRING(num) MAD_VERSION_STRINGIZE(num)
32
33# define MAD_VERSION MAD_VERSION_STRING(MAD_VERSION_MAJOR) "." \
34 MAD_VERSION_STRING(MAD_VERSION_MINOR) "." \
35 MAD_VERSION_STRING(MAD_VERSION_PATCH) \
36 MAD_VERSION_EXTRA
37
38# define MAD_PUBLISHYEAR "2000-2001"
39# define MAD_AUTHOR "Robert Leslie"
40# define MAD_EMAIL "rob@mars.org"
41
42extern char const mad_version[];
43extern char const mad_copyright[];
44extern char const mad_author[];
45extern char const mad_build[];
46
47# endif