summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Chapman <dave@dchapman.com>2005-02-15 18:29:42 +0000
committerDave Chapman <dave@dchapman.com>2005-02-15 18:29:42 +0000
commit98c4f65f3a6c0de9a0bc24db38757939cb851115 (patch)
tree605bc7b4c01e9b3ed689b0edf871a543a06166bc
parent6416099f3fb486f21caea3673a362b63e26dd314 (diff)
downloadrockbox-98c4f65f3a6c0de9a0bc24db38757939cb851115.tar.gz
rockbox-98c4f65f3a6c0de9a0bc24db38757939cb851115.zip
Initial check-in of unmodified libmad code (libmad-0.15.1b)
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@5955 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/codecs/libmad/CHANGES338
-rw-r--r--apps/codecs/libmad/COPYING340
-rw-r--r--apps/codecs/libmad/COPYRIGHT21
-rw-r--r--apps/codecs/libmad/CREDITS116
-rw-r--r--apps/codecs/libmad/D.dat607
-rw-r--r--apps/codecs/libmad/INSTALL183
-rw-r--r--apps/codecs/libmad/README241
-rw-r--r--apps/codecs/libmad/README.rockbox23
-rw-r--r--apps/codecs/libmad/TODO69
-rw-r--r--apps/codecs/libmad/VERSION7
-rw-r--r--apps/codecs/libmad/bit.c237
-rw-r--r--apps/codecs/libmad/bit.h47
-rw-r--r--apps/codecs/libmad/decoder.c582
-rw-r--r--apps/codecs/libmad/decoder.h91
-rw-r--r--apps/codecs/libmad/fixed.c81
-rw-r--r--apps/codecs/libmad/fixed.h499
-rw-r--r--apps/codecs/libmad/frame.c503
-rw-r--r--apps/codecs/libmad/frame.h118
-rw-r--r--apps/codecs/libmad/global.h58
-rw-r--r--apps/codecs/libmad/huffman.c3109
-rw-r--r--apps/codecs/libmad/huffman.h66
-rw-r--r--apps/codecs/libmad/imdct_l_arm.S1000
-rw-r--r--apps/codecs/libmad/imdct_s.dat62
-rw-r--r--apps/codecs/libmad/layer12.c534
-rw-r--r--apps/codecs/libmad/layer12.h31
-rw-r--r--apps/codecs/libmad/layer3.c2698
-rw-r--r--apps/codecs/libmad/layer3.h30
-rw-r--r--apps/codecs/libmad/mad.h964
-rw-r--r--apps/codecs/libmad/mad.h.sed36
-rw-r--r--apps/codecs/libmad/minimad.c222
-rw-r--r--apps/codecs/libmad/qc_table.dat77
-rw-r--r--apps/codecs/libmad/rq_table.dat8747
-rw-r--r--apps/codecs/libmad/sf_table.dat106
-rw-r--r--apps/codecs/libmad/stream.c161
-rw-r--r--apps/codecs/libmad/stream.h108
-rw-r--r--apps/codecs/libmad/synth.c857
-rw-r--r--apps/codecs/libmad/synth.h69
-rw-r--r--apps/codecs/libmad/timer.c485
-rw-r--r--apps/codecs/libmad/timer.h100
-rw-r--r--apps/codecs/libmad/version.c91
-rw-r--r--apps/codecs/libmad/version.h47
41 files changed, 23761 insertions, 0 deletions
diff --git a/apps/codecs/libmad/CHANGES b/apps/codecs/libmad/CHANGES
new file mode 100644
index 0000000000..3fa57ef0cf
--- /dev/null
+++ b/apps/codecs/libmad/CHANGES
@@ -0,0 +1,338 @@
1
2 libmad - MPEG audio decoder library
3 Copyright (C) 2000-2004 Underbit Technologies, Inc.
4
5 $Id$
6
7===============================================================================
8
9Version 0.15.1 (beta)
10
11 * Updated to autoconf 2.59, automake 1.8.2, libtool 1.5.2.
12
13 * Replaced Layer III IMDCT routine with one based on a faster algorithm,
14 improving both speed and accuracy.
15
16 * Improved portability of the Huffman table initialization.
17
18 * Fixed a problem that could result in an assertion failure in layer3.c
19 due to an invalid Layer III free format bitrate.
20
21 * Improved the robustness of Layer II bitrate/mode combinations, and added
22 a new MAD_ERROR_BADMODE error enum. The allowability of low-bitrate
23 stereo streams is influenced by the --enable-strict-iso option to
24 `configure'.
25
26Version 0.15.0 (beta)
27
28 * Updated to autoconf 2.57, automake 1.7.5, libtool 1.4.3.
29
30 * Added new mad_f_div() API routine.
31
32 * Added a 64th entry to the Layer I/Layer II scalefactor table, for better
33 compatibility with existing streams. The --enable-strict-iso option to
34 `configure' can be used to disable use of this entry.
35
36 * Modified the header decoding routine to allow the reserved emphasis
37 value, for better compatibility with existing streams. The
38 --enable-strict-iso option to `configure' can be used to restore the
39 previous behavior of reporting this value as an error.
40
41 * Added new MAD_EMPHASIS_RESERVED enumeration constant.
42
43 * Fixed a bug in the ARM version of mad_f_scale64() discovered by Andre
44 McCurdy.
45
46 * Rewrote PowerPC assembly for minor gains.
47
48 * Modified mad_timer_fraction() to avoid the possibility of division by
49 zero when 0 is passed as the second argument.
50
51 * Fixed a non-fatal problem caused by attempting to designate ancillary
52 bits in Layer III after a decoding error.
53
54 * Changed to build a shared library by default.
55
56 * Changed to use native Cygwin build by default; give --host=mingw32 to
57 `configure' to use MinGW (and avoid a dependency on the Cygwin DLL).
58
59Version 0.14.2 (beta)
60
61 * Changed Cygwin builds to use MinGW; resulting Win32 executables no
62 longer have a dependency on Cygwin DLLs.
63
64 * Added a new mad_stream_errorstr() API function to libmad for retrieving
65 a string description of the current error condition.
66
67Version 0.14.1 (beta)
68
69 * Updated config.guess and config.sub to latest upstream versions.
70
71 * Enabled libtool versioning rather than release numbering.
72
73 * Improved the documentation in minimad.c.
74
75 * Several other small fixes.
76
77Version 0.14.0 (beta)
78
79 * Added a 64-bit FPM negation operation to improve performance of subband
80 synthesis on some platforms.
81
82 * Improved MSVC++ portability and added MSVC++ project files.
83
84 * Added rounding to Layer III requantization for slightly better accuracy.
85
86Version 0.13.0 (beta)
87
88 * Ancillary data is now properly extracted from Layer III streams.
89
90 * Rewrote the Layer III joint stereo decoding routine to correct a major
91 MPEG-2 problem and a minor MPEG-1 problem decoding intensity stereo.
92
93 * Eliminated the dependency on sign-extending right shifts for Layer I and
94 Layer II.
95
96 * Renamed `private' field to `private_bits' for better C++ compatibility.
97
98 * Gratuitously renamed `sfreq' field to `samplerate' and
99 MAD_ERROR_BADSAMPLEFREQ constant to MAD_ERROR_BADSAMPLERATE.
100
101 * Added `samplerate' and `channels' fields to synth.pcm struct to allow
102 these to be different from the decoded frame, and for simpler access.
103
104 * Added new mad_stream_options() and mad_decoder_options() API entries for
105 special runtime decoding options.
106
107 * Added new MAD_OPTION_IGNORECRC and MAD_OPTION_HALFSAMPLERATE options.
108
109 * Added new MAD_FLAG_FREEFORMAT indicator flag.
110
111 * Fixed some bugs in the async decoder.
112
113 * Added a new mad_timer_multiply() API routine.
114
115 * Eliminated `+' from asm constraints under Intel for better compatibility
116 with some compilers.
117
118 * Fixed a PIC-related problem in imdct_l_arm.S.
119
120 * Eliminated a static variable to make libmad thread-safe.
121
122Version 0.12.5 (beta)
123
124 * Modified Layer III requantization to occur during Huffman decoding for
125 significant performance gains.
126
127 * Optimized short block IMDCT by eliminating redundant calculations.
128
129 * Made several other Layer III performance improvements; added
130 ASO_INTERLEAVE1, ASO_INTERLEAVE2, and ASO_ZEROCHECK
131 architecture-specific options for best performance on various
132 architectures.
133
134 * Optimized synthesis DCT to store result values as soon as they are
135 calculated.
136
137Version 0.12.4 (beta)
138
139 * New PowerPC fixed-point assembly courtesy of David Blythe.
140
141 * Reorganized fixed-point assembly routines for easier maintenance and
142 better performance.
143
144 * Improved performance of subband synthesis through better indexing and
145 fewer local variables.
146
147 * Added alias reduction for the lower two subbands of mixed short blocks,
148 per a report of ambiguity with ISO/IEC 11172-3 and for uniformity with
149 most other implementations. Also improved alias reduction performance
150 using multiply/accumulate.
151
152 * Added --enable-strict-iso option to `configure' to override best
153 accepted practices such as the alias reduction for mixed short blocks.
154
155 * Improved performance of Layer III IMDCT by using longer
156 multiply/accumulate runs where possible.
157
158Version 0.12.3 (beta)
159
160 * Added MPEG 2.5 support.
161
162 * Added preliminary support for parameterizing the binary point position
163 in the fixed-point representation.
164
165 * Added multiply/accumulate optimization to the Layer III IMDCT for long
166 blocks.
167
168 * Fixed a bug in the handling of Layer III mixed_block_flag.
169
170 * Fixed a configure problem when multiple -O CFLAGS are present.
171
172Version 0.12.2 (beta)
173
174 * Rearranged the synthesis polyphase filterbank memory vector for better
175 locality of reference, and rewrote mad_synth_frame() to accommodate,
176 resulting in improved performance.
177
178 * Discovered a combination of compiler optimization flags that further
179 improve performance.
180
181 * Changed some array references in layer3.c to pointer derefs.
182
183Version 0.12.1 (beta)
184
185 * Resolved the intensity + MS joint stereo issue (a simple bug).
186 OPT_ISKLUGE is no longer considered to be a kluge.
187
188 * Fixed another, hopefully last main_data memory bug.
189
190 * Split part of struct mad_frame into struct mad_header for convenience
191 and size.
192
193Version 0.12.0 (alpha)
194
195 * Changed the build environment to use automake and libtool. A libmad
196 shared library can now be built using the --enable-shared option to
197 `configure'.
198
199 * Added another callback to MAD's high-level decoder API after the frame
200 header has been read but before the frame's audio data is decoded.
201
202 * Streamlined header processing so that mad_frame_decode() can be called
203 with or without having already called mad_frame_header().
204
205 * Fixed some other header reading miscellany, including CRC handling and
206 free bitrate detection, and frame length verification with free
207 bitrates.
208
209 * Fixed a problem with Layer III free bitrates > 320 kbps. The main_data
210 buffer size should now be large enough to handle any size frame, by
211 virtue of the maximum possible part2_3_length.
212
213 * Further developed the async API; arbitrary messages can now be passed to
214 the subsidiary decoding process.
215
216 * Streamlined timer.c and extended its interface. It now has support for
217 video frame/field lengths, including output support for drop-frame
218 encoding.
219
220 * Replaced many constant integer preprocessor defines with enums.
221
222Version 0.11.4 (beta)
223
224 * Fixed free format bitrate discovery.
225
226 * Changed the timer implementation and extended its interface.
227
228 * Integrated Nicolas Pitre's patch for pre-shifting at compile-time and
229 for better multiply/accumulate code output.
230
231 * Applied Simon Burge's patch to imdct_l_arm.S for a.out compatibility.
232
233 * Added -mtune=strongarm for all ARM targets.
234
235Version 0.11.3 (beta)
236
237 * Added new --enable-speed and --enable-accuracy options for `configure'
238 to automatically select appropriate SSO/ASO options, et al.
239
240 * Modified subband synthesis to use multiply/accumulate optimization (if
241 available) for better speed and/or accuracy.
242
243 * Incorporated Andre McCurdy's changes for further rounding optimizations
244 in the rest of his code.
245
246Version 0.11.2 (beta)
247
248 * Incorporated Nicolas Pitre's ARM assembly and parameterized scaling
249 changes.
250
251 * Incorporated Andre McCurdy's ARM assembly optimization (used only if
252 --enable-aso is given to `configure' to enable architecture-specific
253 optimizations.)
254
255 * Reduced FPM_INTEL assembly to two instructions.
256
257 * Fixed accuracy problems with certain FPM modes in synth.c.
258
259 * Improved the accuracy of FPM_APPROX.
260
261 * Improved the accuracy of SSO.
262
263 * Improved sync discovery by checking for a sync word in the following
264 frame.
265
266 * Minor code clean-up.
267
268 * Added experimental rules for generating a libmad.so shared library.
269
270Version 0.11.1 (beta)
271
272 * Moved libmad code into a separate directory.
273
274 * Changed SSO to be disabled by default, as output accuracy is deemed to
275 be more important than speed in the general case.
276
277 * Fixed a bug in Layer III sanity checking that could cause a crash on
278 certain random data input.
279
280 * Extended the Layer III requantization table from 8191 to 8206 as some
281 encoders are known to use these values, even though ISO/IEC 11172-3
282 suggests the maximum should be 8191.
283
284Version 0.11.0 (beta)
285
286 * Implemented MPEG-2 extension to Lower Sampling Frequencies.
287
288 * Improved Layer III performance by avoiding IMDCT calculation when all
289 input samples are zero.
290
291 * Significantly reduced size of Layer II tables.
292
293Version 0.10.3 (beta)
294
295 * Improved SSO output quality.
296
297 * Made portable to cygwin.
298
299 * Localized memory references in III_huffdecode() for better performance.
300
301Version 0.10.2 (beta)
302
303 * Rewrote Layer III long block 36-point IMDCT routine for better
304 performance.
305
306 * Improved subband synthesis fixed-point games somewhat.
307
308Version 0.10.1 (beta)
309
310 * Added a subband synthesis optimization (SSO) which involves modifying
311 the fixed-point multiplication method during windowing. This produces
312 subtle differences in the output but improves performance greatly.
313
314 * Added I_STEREO and MS_STEREO flags to frame struct.
315
316 * Eliminated privately-used CRCFAILED flag.
317
318 * Fixed a bug where Layer III decoding could crash on some badly-formatted
319 (e.g. non-MPEG) bitstreams.
320
321 * Miscellaneous code clean-up.
322
323Version 0.10.0 (beta)
324
325 * Added SPARC fixed-point math support.
326
327 * Revamped libmad API for better high- and low-level support.
328
329 * Documented more of the code.
330
331 * Changed sync semantics such that new stream buffers are assumed to be
332 sync-aligned.
333
334 * Changed Layer III to dynamically allocate static memory so as not to
335 waste it (about 6.4K) when only decoding Layer I or Layer II.
336
337===============================================================================
338
diff --git a/apps/codecs/libmad/COPYING b/apps/codecs/libmad/COPYING
new file mode 100644
index 0000000000..d60c31a97a
--- /dev/null
+++ b/apps/codecs/libmad/COPYING
@@ -0,0 +1,340 @@
1 GNU GENERAL PUBLIC LICENSE
2 Version 2, June 1991
3
4 Copyright (C) 1989, 1991 Free Software Foundation, Inc.
5 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
6 Everyone is permitted to copy and distribute verbatim copies
7 of this license document, but changing it is not allowed.
8
9 Preamble
10
11 The licenses for most software are designed to take away your
12freedom to share and change it. By contrast, the GNU General Public
13License is intended to guarantee your freedom to share and change free
14software--to make sure the software is free for all its users. This
15General Public License applies to most of the Free Software
16Foundation's software and to any other program whose authors commit to
17using it. (Some other Free Software Foundation software is covered by
18the GNU Library General Public License instead.) You can apply it to
19your programs, too.
20
21 When we speak of free software, we are referring to freedom, not
22price. Our General Public Licenses are designed to make sure that you
23have the freedom to distribute copies of free software (and charge for
24this service if you wish), that you receive source code or can get it
25if you want it, that you can change the software or use pieces of it
26in new free programs; and that you know you can do these things.
27
28 To protect your rights, we need to make restrictions that forbid
29anyone to deny you these rights or to ask you to surrender the rights.
30These restrictions translate to certain responsibilities for you if you
31distribute copies of the software, or if you modify it.
32
33 For example, if you distribute copies of such a program, whether
34gratis or for a fee, you must give the recipients all the rights that
35you have. You must make sure that they, too, receive or can get the
36source code. And you must show them these terms so they know their
37rights.
38
39 We protect your rights with two steps: (1) copyright the software, and
40(2) offer you this license which gives you legal permission to copy,
41distribute and/or modify the software.
42
43 Also, for each author's protection and ours, we want to make certain
44that everyone understands that there is no warranty for this free
45software. If the software is modified by someone else and passed on, we
46want its recipients to know that what they have is not the original, so
47that any problems introduced by others will not reflect on the original
48authors' reputations.
49
50 Finally, any free program is threatened constantly by software
51patents. We wish to avoid the danger that redistributors of a free
52program will individually obtain patent licenses, in effect making the
53program proprietary. To prevent this, we have made it clear that any
54patent must be licensed for everyone's free use or not licensed at all.
55
56 The precise terms and conditions for copying, distribution and
57modification follow.
58
59 GNU GENERAL PUBLIC LICENSE
60 TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
61
62 0. This License applies to any program or other work which contains
63a notice placed by the copyright holder saying it may be distributed
64under the terms of this General Public License. The "Program", below,
65refers to any such program or work, and a "work based on the Program"
66means either the Program or any derivative work under copyright law:
67that is to say, a work containing the Program or a portion of it,
68either verbatim or with modifications and/or translated into another
69language. (Hereinafter, translation is included without limitation in
70the term "modification".) Each licensee is addressed as "you".
71
72Activities other than copying, distribution and modification are not
73covered by this License; they are outside its scope. The act of
74running the Program is not restricted, and the output from the Program
75is covered only if its contents constitute a work based on the
76Program (independent of having been made by running the Program).
77Whether that is true depends on what the Program does.
78
79 1. You may copy and distribute verbatim copies of the Program's
80source code as you receive it, in any medium, provided that you
81conspicuously and appropriately publish on each copy an appropriate
82copyright notice and disclaimer of warranty; keep intact all the
83notices that refer to this License and to the absence of any warranty;
84and give any other recipients of the Program a copy of this License
85along with the Program.
86
87You may charge a fee for the physical act of transferring a copy, and
88you may at your option offer warranty protection in exchange for a fee.
89
90 2. You may modify your copy or copies of the Program or any portion
91of it, thus forming a work based on the Program, and copy and
92distribute such modifications or work under the terms of Section 1
93above, provided that you also meet all of these conditions:
94
95 a) You must cause the modified files to carry prominent notices
96 stating that you changed the files and the date of any change.
97
98 b) You must cause any work that you distribute or publish, that in
99 whole or in part contains or is derived from the Program or any
100 part thereof, to be licensed as a whole at no charge to all third
101 parties under the terms of this License.
102
103 c) If the modified program normally reads commands interactively
104 when run, you must cause it, when started running for such
105 interactive use in the most ordinary way, to print or display an
106 announcement including an appropriate copyright notice and a
107 notice that there is no warranty (or else, saying that you provide
108 a warranty) and that users may redistribute the program under
109 these conditions, and telling the user how to view a copy of this
110 License. (Exception: if the Program itself is interactive but
111 does not normally print such an announcement, your work based on
112 the Program is not required to print an announcement.)
113
114These requirements apply to the modified work as a whole. If
115identifiable sections of that work are not derived from the Program,
116and can be reasonably considered independent and separate works in
117themselves, then this License, and its terms, do not apply to those
118sections when you distribute them as separate works. But when you
119distribute the same sections as part of a whole which is a work based
120on the Program, the distribution of the whole must be on the terms of
121this License, whose permissions for other licensees extend to the
122entire whole, and thus to each and every part regardless of who wrote it.
123
124Thus, it is not the intent of this section to claim rights or contest
125your rights to work written entirely by you; rather, the intent is to
126exercise the right to control the distribution of derivative or
127collective works based on the Program.
128
129In addition, mere aggregation of another work not based on the Program
130with the Program (or with a work based on the Program) on a volume of
131a storage or distribution medium does not bring the other work under
132the scope of this License.
133
134 3. You may copy and distribute the Program (or a work based on it,
135under Section 2) in object code or executable form under the terms of
136Sections 1 and 2 above provided that you also do one of the following:
137
138 a) Accompany it with the complete corresponding machine-readable
139 source code, which must be distributed under the terms of Sections
140 1 and 2 above on a medium customarily used for software interchange; or,
141
142 b) Accompany it with a written offer, valid for at least three
143 years, to give any third party, for a charge no more than your
144 cost of physically performing source distribution, a complete
145 machine-readable copy of the corresponding source code, to be
146 distributed under the terms of Sections 1 and 2 above on a medium
147 customarily used for software interchange; or,
148
149 c) Accompany it with the information you received as to the offer
150 to distribute corresponding source code. (This alternative is
151 allowed only for noncommercial distribution and only if you
152 received the program in object code or executable form with such
153 an offer, in accord with Subsection b above.)
154
155The source code for a work means the preferred form of the work for
156making modifications to it. For an executable work, complete source
157code means all the source code for all modules it contains, plus any
158associated interface definition files, plus the scripts used to
159control compilation and installation of the executable. However, as a
160special exception, the source code distributed need not include
161anything that is normally distributed (in either source or binary
162form) with the major components (compiler, kernel, and so on) of the
163operating system on which the executable runs, unless that component
164itself accompanies the executable.
165
166If distribution of executable or object code is made by offering
167access to copy from a designated place, then offering equivalent
168access to copy the source code from the same place counts as
169distribution of the source code, even though third parties are not
170compelled to copy the source along with the object code.
171
172 4. You may not copy, modify, sublicense, or distribute the Program
173except as expressly provided under this License. Any attempt
174otherwise to copy, modify, sublicense or distribute the Program is
175void, and will automatically terminate your rights under this License.
176However, parties who have received copies, or rights, from you under
177this License will not have their licenses terminated so long as such
178parties remain in full compliance.
179
180 5. You are not required to accept this License, since you have not
181signed it. However, nothing else grants you permission to modify or
182distribute the Program or its derivative works. These actions are
183prohibited by law if you do not accept this License. Therefore, by
184modifying or distributing the Program (or any work based on the
185Program), you indicate your acceptance of this License to do so, and
186all its terms and conditions for copying, distributing or modifying
187the Program or works based on it.
188
189 6. Each time you redistribute the Program (or any work based on the
190Program), the recipient automatically receives a license from the
191original licensor to copy, distribute or modify the Program subject to
192these terms and conditions. You may not impose any further
193restrictions on the recipients' exercise of the rights granted herein.
194You are not responsible for enforcing compliance by third parties to
195this License.
196
197 7. If, as a consequence of a court judgment or allegation of patent
198infringement or for any other reason (not limited to patent issues),
199conditions are imposed on you (whether by court order, agreement or
200otherwise) that contradict the conditions of this License, they do not
201excuse you from the conditions of this License. If you cannot
202distribute so as to satisfy simultaneously your obligations under this
203License and any other pertinent obligations, then as a consequence you
204may not distribute the Program at all. For example, if a patent
205license would not permit royalty-free redistribution of the Program by
206all those who receive copies directly or indirectly through you, then
207the only way you could satisfy both it and this License would be to
208refrain entirely from distribution of the Program.
209
210If any portion of this section is held invalid or unenforceable under
211any particular circumstance, the balance of the section is intended to
212apply and the section as a whole is intended to apply in other
213circumstances.
214
215It is not the purpose of this section to induce you to infringe any
216patents or other property right claims or to contest validity of any
217such claims; this section has the sole purpose of protecting the
218integrity of the free software distribution system, which is
219implemented by public license practices. Many people have made
220generous contributions to the wide range of software distributed
221through that system in reliance on consistent application of that
222system; it is up to the author/donor to decide if he or she is willing
223to distribute software through any other system and a licensee cannot
224impose that choice.
225
226This section is intended to make thoroughly clear what is believed to
227be a consequence of the rest of this License.
228
229 8. If the distribution and/or use of the Program is restricted in
230certain countries either by patents or by copyrighted interfaces, the
231original copyright holder who places the Program under this License
232may add an explicit geographical distribution limitation excluding
233those countries, so that distribution is permitted only in or among
234countries not thus excluded. In such case, this License incorporates
235the limitation as if written in the body of this License.
236
237 9. The Free Software Foundation may publish revised and/or new versions
238of the General Public License from time to time. Such new versions will
239be similar in spirit to the present version, but may differ in detail to
240address new problems or concerns.
241
242Each version is given a distinguishing version number. If the Program
243specifies a version number of this License which applies to it and "any
244later version", you have the option of following the terms and conditions
245either of that version or of any later version published by the Free
246Software Foundation. If the Program does not specify a version number of
247this License, you may choose any version ever published by the Free Software
248Foundation.
249
250 10. If you wish to incorporate parts of the Program into other free
251programs whose distribution conditions are different, write to the author
252to ask for permission. For software which is copyrighted by the Free
253Software Foundation, write to the Free Software Foundation; we sometimes
254make exceptions for this. Our decision will be guided by the two goals
255of preserving the free status of all derivatives of our free software and
256of promoting the sharing and reuse of software generally.
257
258 NO WARRANTY
259
260 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
261FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
262OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
263PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
264OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
265MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
266TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
267PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
268REPAIR OR CORRECTION.
269
270 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
271WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
272REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
273INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
274OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
275TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
276YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
277PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
278POSSIBILITY OF SUCH DAMAGES.
279
280 END OF TERMS AND CONDITIONS
281
282 How to Apply These Terms to Your New Programs
283
284 If you develop a new program, and you want it to be of the greatest
285possible use to the public, the best way to achieve this is to make it
286free software which everyone can redistribute and change under these terms.
287
288 To do so, attach the following notices to the program. It is safest
289to attach them to the start of each source file to most effectively
290convey the exclusion of warranty; and each file should have at least
291the "copyright" line and a pointer to where the full notice is found.
292
293 <one line to give the program's name and a brief idea of what it does.>
294 Copyright (C) <year> <name of author>
295
296 This program is free software; you can redistribute it and/or modify
297 it under the terms of the GNU General Public License as published by
298 the Free Software Foundation; either version 2 of the License, or
299 (at your option) any later version.
300
301 This program is distributed in the hope that it will be useful,
302 but WITHOUT ANY WARRANTY; without even the implied warranty of
303 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
304 GNU General Public License for more details.
305
306 You should have received a copy of the GNU General Public License
307 along with this program; if not, write to the Free Software
308 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
309
310
311Also add information on how to contact you by electronic and paper mail.
312
313If the program is interactive, make it output a short notice like this
314when it starts in an interactive mode:
315
316 Gnomovision version 69, Copyright (C) year name of author
317 Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
318 This is free software, and you are welcome to redistribute it
319 under certain conditions; type `show c' for details.
320
321The hypothetical commands `show w' and `show c' should show the appropriate
322parts of the General Public License. Of course, the commands you use may
323be called something other than `show w' and `show c'; they could even be
324mouse-clicks or menu items--whatever suits your program.
325
326You should also get your employer (if you work as a programmer) or your
327school, if any, to sign a "copyright disclaimer" for the program, if
328necessary. Here is a sample; alter the names:
329
330 Yoyodyne, Inc., hereby disclaims all copyright interest in the program
331 `Gnomovision' (which makes passes at compilers) written by James Hacker.
332
333 <signature of Ty Coon>, 1 April 1989
334 Ty Coon, President of Vice
335
336This General Public License does not permit incorporating your program into
337proprietary programs. If your program is a subroutine library, you may
338consider it more useful to permit linking proprietary applications with the
339library. If this is what you want to do, use the GNU Library General
340Public License instead of this License.
diff --git a/apps/codecs/libmad/COPYRIGHT b/apps/codecs/libmad/COPYRIGHT
new file mode 100644
index 0000000000..ed91d2bac1
--- /dev/null
+++ b/apps/codecs/libmad/COPYRIGHT
@@ -0,0 +1,21 @@
1
2 libmad - MPEG audio decoder library
3 Copyright (C) 2000-2004 Underbit Technologies, Inc.
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: Underbit Technologies, Inc. <info@underbit.com>
21
diff --git a/apps/codecs/libmad/CREDITS b/apps/codecs/libmad/CREDITS
new file mode 100644
index 0000000000..69016c201d
--- /dev/null
+++ b/apps/codecs/libmad/CREDITS
@@ -0,0 +1,116 @@
1
2 libmad - MPEG audio decoder library
3 Copyright (C) 2000-2004 Underbit Technologies, Inc.
4
5 $Id$
6
7===============================================================================
8
9AUTHOR
10
11 Except where otherwise noted, all code was authored by:
12
13 Robert Leslie <rob@underbit.com>
14
15CONTRIBUTORS
16
17 Significant contributions have been incorporated with thanks to:
18
19 Anonymous
20 2002/03/15: frame.c
21 - Reported problem with use of reserved emphasis value.
22 2003/08/31: layer12.c
23 - Suggested support for certain disallowed bitrate/mode
24 combinations.
25
26 Niek Albers <info@daansystems.com>
27 2003/04/21: layer3.c
28 - Reported runtime uninitialized use of `ptr' in designating
29 ancillary bits after a decoding error.
30
31 Christian Biere <cbiere@users.sourceforge.net>
32 2003/02/01: frame.c
33 - Reported assertion failure in layer3.c due to an
34 invalid/unsupported Layer III free format bitrate.
35
36 David Blythe <blythe@routefree.com>
37 2001/01/30: fixed.h
38 - Provided initial PowerPC fixed-point assembly.
39
40 Simon Burge <simonb@wasabisystems.com>
41 2000/09/20: imdct_l_arm.S
42 - Suggested patch for a.out compatibility.
43
44 Brian Cameron <Brian.Cameron@sun.com>
45 2003/07/02: huffman.c
46 - Suggested changes for improved portability.
47
48 Joshua Haberman <joshua@haberman.com>
49 2001/08/10: decoder.c, huffman.c
50 - Suggested portability fixes.
51
52 Timothy King <lordzork@lordzork.com>
53 2002/05/04: sf_table.dat, layer12.c
54 - Reported problem with use of (missing) scalefactor index 63.
55
56 Felix von Leitner <felix-mad@fefe.de>
57 2003/01/21: fixed.h
58 - Suggested Intel scaling alternative for possible speedup.
59
60 Andre McCurdy <armccurdy@yahoo.co.uk>
61 2000/08/10: imdct_l_arm.S
62 - ARM optimized assembly replacement for III_imdct_l().
63 2000/09/15: imdct_l_arm.S
64 - Applied Nicolas Pitre's rounding optimisation in all remaining
65 places.
66 2001/02/10: layer3.c
67 - Inspiration for Huffman decoding and requantization rewrite, and
68 other miscellany.
69 2001/03/24: imdct_l_arm.S
70 - Corrected PIC unsafe code.
71 2002/02/16: fixed.h
72 - Discovered bug in ARM version of mad_f_scale64().
73
74 Haruhiko OGASAWARA <theta@m1.interq.or.jp>
75 2001/01/28: layer3.c
76 - Reported discrepancy in alias reduction for mixed short blocks.
77
78 Brett Paterson <brett@fmod.org>
79 2001/10/28: global.h
80 - Reported missing <assert.h> et al. under MS Embedded Visual C.
81
82 Sean 'Shaleh' Perry <shaleh@via.net>
83 2000/04/04: fixed.h
84 - Suggested use of size-dependent typedefs.
85 2001/10/22: config.guess, config.sub
86 - Keep up to date for proper Debian packaging.
87
88 Bertrand Petit <eemad@phoe.frmug.org>
89 2001/11/05: synth.h
90 - Suggested PCM channel enumeration constants.
91 2001/11/05: stream.h
92 - Suggested MAD_ERROR_NONE enumeration constant.
93 2001/11/05: stream.c
94 - Suggested mad_stream_errorstr() function.
95
96 Nicolas Pitre <nico@cam.org>
97 2000/09/09: fixed.h
98 - Parameterized all scaling for correct use of all multiplication
99 methods within mad_synth_frame().
100 - Rewrote the FPM_ARM version of mad_f_mul() so we have 64-bit
101 multiplication result, rounding and scaling with 3 instructions.
102 2000/09/09: imdct_l_arm.S
103 - Optimized rounding + scaling operations.
104 2000/09/17: synth.c
105 - Changed D[] run-time shifts to compile-time.
106 - Modified synthesis for better multiply/accumulate code output.
107 2001/08/11: fixed.h, synth.c
108 - Suggested 64-bit FPM negation and negative term factorization
109 during synthesis.
110 2001/08/11: fixed.h
111 - Suggested unrounded behavior for FPM_DEFAULT when OPT_SPEED.
112 2001/11/19: fixed.c
113 - Suggested computation of any resampling ratio.
114
115===============================================================================
116
diff --git a/apps/codecs/libmad/D.dat b/apps/codecs/libmad/D.dat
new file mode 100644
index 0000000000..89b01da88f
--- /dev/null
+++ b/apps/codecs/libmad/D.dat
@@ -0,0 +1,607 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2004 Underbit Technologies, Inc.
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/apps/codecs/libmad/INSTALL b/apps/codecs/libmad/INSTALL
new file mode 100644
index 0000000000..50dbe439d0
--- /dev/null
+++ b/apps/codecs/libmad/INSTALL
@@ -0,0 +1,183 @@
1Basic Installation
2==================
3
4 These are generic installation instructions.
5
6 The `configure' shell script attempts to guess correct values for
7various system-dependent variables used during compilation. It uses
8those values to create a `Makefile' in each directory of the package.
9It may also create one or more `.h' files containing system-dependent
10definitions. Finally, it creates a shell script `config.status' that
11you can run in the future to recreate the current configuration, a file
12`config.cache' that saves the results of its tests to speed up
13reconfiguring, and a file `config.log' containing compiler output
14(useful mainly for debugging `configure').
15
16 If you need to do unusual things to compile the package, please try
17to figure out how `configure' could check whether to do them, and mail
18diffs or instructions to the address given in the `README' so they can
19be considered for the next release. If at some point `config.cache'
20contains results you don't want to keep, you may remove or edit it.
21
22 The file `configure.in' is used to create `configure' by a program
23called `autoconf'. You only need `configure.in' if you want to change
24it or regenerate `configure' using a newer version of `autoconf'.
25
26The simplest way to compile this package is:
27
28 1. `cd' to the directory containing the package's source code and type
29 `./configure' to configure the package for your system. If you're
30 using `csh' on an old version of System V, you might need to type
31 `sh ./configure' instead to prevent `csh' from trying to execute
32 `configure' itself.
33
34 Running `configure' takes awhile. While running, it prints some
35 messages telling which features it is checking for.
36
37 2. Type `make' to compile the package.
38
39 3. Optionally, type `make check' to run any self-tests that come with
40 the package.
41
42 4. Type `make install' to install the programs and any data files and
43 documentation.
44
45 5. You can remove the program binaries and object files from the
46 source code directory by typing `make clean'. To also remove the
47 files that `configure' created (so you can compile the package for
48 a different kind of computer), type `make distclean'. There is
49 also a `make maintainer-clean' target, but that is intended mainly
50 for the package's developers. If you use it, you may have to get
51 all sorts of other programs in order to regenerate files that came
52 with the distribution.
53
54Compilers and Options
55=====================
56
57 Some systems require unusual options for compilation or linking that
58the `configure' script does not know about. You can give `configure'
59initial values for variables by setting them in the environment. Using
60a Bourne-compatible shell, you can do that on the command line like
61this:
62 CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
63
64Or on systems that have the `env' program, you can do it like this:
65 env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
66
67Compiling For Multiple Architectures
68====================================
69
70 You can compile the package for more than one kind of computer at the
71same time, by placing the object files for each architecture in their
72own directory. To do this, you must use a version of `make' that
73supports the `VPATH' variable, such as GNU `make'. `cd' to the
74directory where you want the object files and executables to go and run
75the `configure' script. `configure' automatically checks for the
76source code in the directory that `configure' is in and in `..'.
77
78 If you have to use a `make' that does not supports the `VPATH'
79variable, you have to compile the package for one architecture at a time
80in the source code directory. After you have installed the package for
81one architecture, use `make distclean' before reconfiguring for another
82architecture.
83
84Installation Names
85==================
86
87 By default, `make install' will install the package's files in
88`/usr/local/bin', `/usr/local/man', etc. You can specify an
89installation prefix other than `/usr/local' by giving `configure' the
90option `--prefix=PATH'.
91
92 You can specify separate installation prefixes for
93architecture-specific files and architecture-independent files. If you
94give `configure' the option `--exec-prefix=PATH', the package will use
95PATH as the prefix for installing programs and libraries.
96Documentation and other data files will still use the regular prefix.
97
98 In addition, if you use an unusual directory layout you can give
99options like `--bindir=PATH' to specify different values for particular
100kinds of files. Run `configure --help' for a list of the directories
101you can set and what kinds of files go in them.
102
103 If the package supports it, you can cause programs to be installed
104with an extra prefix or suffix on their names by giving `configure' the
105option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
106
107Optional Features
108=================
109
110 Some packages pay attention to `--enable-FEATURE' options to
111`configure', where FEATURE indicates an optional part of the package.
112They may also pay attention to `--with-PACKAGE' options, where PACKAGE
113is something like `gnu-as' or `x' (for the X Window System). The
114`README' should mention any `--enable-' and `--with-' options that the
115package recognizes.
116
117 For packages that use the X Window System, `configure' can usually
118find the X include and library files automatically, but if it doesn't,
119you can use the `configure' options `--x-includes=DIR' and
120`--x-libraries=DIR' to specify their locations.
121
122Specifying the System Type
123==========================
124
125 There may be some features `configure' can not figure out
126automatically, but needs to determine by the type of host the package
127will run on. Usually `configure' can figure that out, but if it prints
128a message saying it can not guess the host type, give it the
129`--host=TYPE' option. TYPE can either be a short name for the system
130type, such as `sun4', or a canonical name with three fields:
131 CPU-COMPANY-SYSTEM
132
133See the file `config.sub' for the possible values of each field. If
134`config.sub' isn't included in this package, then this package doesn't
135need to know the host type.
136
137 If you are building compiler tools for cross-compiling, you can also
138use the `--target=TYPE' option to select the type of system they will
139produce code for and the `--build=TYPE' option to select the type of
140system on which you are compiling the package.
141
142Sharing Defaults
143================
144
145 If you want to set default values for `configure' scripts to share,
146you can create a site shell script called `config.site' that gives
147default values for variables like `CC', `cache_file', and `prefix'.
148`configure' looks for `PREFIX/share/config.site' if it exists, then
149`PREFIX/etc/config.site' if it exists. Or, you can set the
150`CONFIG_SITE' environment variable to the location of the site script.
151A warning: not all `configure' scripts look for a site script.
152
153Operation Controls
154==================
155
156 `configure' recognizes the following options to control how it
157operates.
158
159`--cache-file=FILE'
160 Use and save the results of the tests in FILE instead of
161 `./config.cache'. Set FILE to `/dev/null' to disable caching, for
162 debugging `configure'.
163
164`--help'
165 Print a summary of the options to `configure', and exit.
166
167`--quiet'
168`--silent'
169`-q'
170 Do not print messages saying which checks are being made. To
171 suppress all normal output, redirect it to `/dev/null' (any error
172 messages will still be shown).
173
174`--srcdir=DIR'
175 Look for the package's source code in directory DIR. Usually
176 `configure' can determine that directory automatically.
177
178`--version'
179 Print the version of Autoconf used to generate the `configure'
180 script, and exit.
181
182`configure' also accepts some other, not widely useful, options.
183
diff --git a/apps/codecs/libmad/README b/apps/codecs/libmad/README
new file mode 100644
index 0000000000..524a94b29d
--- /dev/null
+++ b/apps/codecs/libmad/README
@@ -0,0 +1,241 @@
1
2 libmad - MPEG audio decoder library
3 Copyright (C) 2000-2004 Underbit Technologies, Inc.
4
5 $Id$
6
7===============================================================================
8
9INTRODUCTION
10
11 MAD (libmad) is a high-quality MPEG audio decoder. It currently supports
12 MPEG-1 and the MPEG-2 extension to Lower Sampling Frequencies, as well as
13 the so-called MPEG 2.5 format. All three audio layers (Layer I, Layer II,
14 and Layer III a.k.a. MP3) are fully implemented.
15
16 MAD does not yet support MPEG-2 multichannel audio (although it should be
17 backward compatible with such streams) nor does it currently support AAC.
18
19 MAD has the following special features:
20
21 - 24-bit PCM output
22 - 100% fixed-point (integer) computation
23 - completely new implementation based on the ISO/IEC standards
24 - distributed under the terms of the GNU General Public License (GPL)
25
26 Because MAD provides full 24-bit PCM output, applications using MAD are
27 able to produce high quality audio. Even when the output device supports
28 only 16-bit PCM, applications can use the extra resolution to increase the
29 audible dynamic range through the use of dithering or noise shaping.
30
31 Because MAD uses integer computation rather than floating point, it is
32 well suited for architectures without a floating point unit. All
33 calculations are performed with a 32-bit fixed-point integer
34 representation.
35
36 Because MAD is a new implementation of the ISO/IEC standards, it is
37 unencumbered by the errors of other implementations. MAD is NOT a
38 derivation of the ISO reference source or any other code. Considerable
39 effort has been expended to ensure a correct implementation, even in cases
40 where the standards are ambiguous or misleading.
41
42 Because MAD is distributed under the terms of the GPL, its redistribution
43 is not generally restricted, so long as the terms of the GPL are followed.
44 This means MAD can be incorporated into other software as long as that
45 software is also distributed under the GPL. (Should this be undesirable,
46 alternate arrangements may be possible by contacting Underbit.)
47
48===============================================================================
49
50ABOUT THE CODE
51
52 The code is optimized and performs very well, although specific
53 improvements can still be made. The output from the decoder library
54 consists of 32-bit signed linear fixed-point values that can be easily
55 scaled for any size PCM output, up to 24 bits per sample.
56
57 The API for libmad can be found in the `mad.h' header file. Note that this
58 file is automatically generated, and will not exist until after you have
59 built the library.
60
61 There are two APIs available, one high-level, and the other low-level.
62 With the low-level API, each step of the decoding process must be handled
63 explicitly, offering the greatest amount of control. With the high-level
64 API, after callbacks are configured, a single routine will decode an
65 entire bitstream.
66
67 The high-level API may either be used synchronously or asynchronously. If
68 used asynchronously, decoding will occur in a separate process.
69 Communication is possible with the decoding process by passing control
70 messages.
71
72 The file `minimad.c' contains an example usage of the libmad API that
73 shows only the bare minimum required to implement a useful decoder. It
74 expects a regular file to be redirected to standard input, and it sends
75 decoded 16-bit signed little-endian PCM samples to standard output. If a
76 decoding error occurs, it is reported to standard error and decoding
77 continues. Note that the scale() routine in this code is only provided as
78 an example; it rounds MAD's high-resolution samples down to 16 bits, but
79 does not perform any dithering or noise shaping. It is therefore not
80 recommended to use this routine as-is in your own code if sound quality is
81 important.
82
83Integer Performance
84
85 To get the best possible performance, it is recommended that an assembly
86 version of the fixed-point multiply and related routines be selected.
87 Several such assembly routines have been written for various CPUs.
88
89 If an assembly version is not available, a fast approximation version will
90 be used. This will result in reduced accuracy of the decoder.
91
92 Alternatively, if 64-bit integers are supported as a datatype by the
93 compiler, another version can be used that is much more accurate.
94 However, using an assembly version is generally much faster and just as
95 accurate.
96
97 More information can be gathered from the `fixed.h' header file.
98
99 MAD's CPU-intensive subband synthesis routine can be further optimized at
100 the expense of a slight loss in output accuracy due to a modified method
101 for fixed-point multiplication with a small windowing constant. While this
102 is helpful for performance and the output accuracy loss is generally
103 undetectable, it is disabled by default and must be explicitly enabled.
104
105 Under some architectures, other special optimizations may also be
106 available.
107
108Audio Quality
109
110 The output from MAD has been found to satisfy the ISO/IEC 11172-4
111 computational accuracy requirements for compliance. In most
112 configurations, MAD is a Full Layer III ISO/IEC 11172-3 audio decoder as
113 defined by the standard.
114
115 When the approximation version of the fixed-point multiply is used, MAD is
116 a limited accuracy ISO/IEC 11172-3 audio decoder as defined by the
117 standard.
118
119 MAD can alternatively be configured to produce output with less or more
120 accuracy than the default, as a tradeoff with performance.
121
122 MAD produces output samples with a precision greater than 24 bits. Because
123 most output formats use fewer bits, typically 16, it is recommended that a
124 dithering algorithm be used (rather than rounding or truncating) to obtain
125 the highest quality audio. However, dithering may unfavorably affect an
126 analytic examination of the output (such as compliance testing); you may
127 therefore wish to use rounding in this case instead.
128
129Portability Issues
130
131 GCC is preferred to compile the code, but other compilers may also work.
132 The assembly code in `fixed.h' depends on the inline assembly features of
133 your compiler. If you're not using GCC or MSVC++, you can either write
134 your own assembly macros or use the default (low quality output) version.
135
136 The union initialization of `huffman.c' may not be portable to all
137 platforms when GCC is not used.
138
139 The code should not be sensitive to word sizes or byte ordering, however
140 it does assume A % B has the same sign as A.
141
142===============================================================================
143
144BUILDING AND INSTALLING
145
146Windows Platforms
147
148 MAD can be built under Windows using either MSVC++ or Cygwin. A MSVC++
149 project file can be found under the `msvc++' subdirectory.
150
151 To build libmad using Cygwin, you will first need to install the Cygwin
152 tools:
153
154 http://www.cygwin.com/
155
156 You may then proceed with the following POSIX instructions within the
157 Cygwin shell.
158
159 Note that by default Cygwin will build a library that depends on the
160 Cygwin DLL. You can use MinGW to build a library that does not depend on
161 the Cygwin DLL. To do so, give the option --host=mingw32 to `configure'.
162
163POSIX Platforms (including Cygwin)
164
165 The code is distributed with a `configure' script that will generate for
166 you a `Makefile' and a `config.h' for your platform. See the file
167 `INSTALL' for generic instructions.
168
169 The specific options you may want to give `configure' are:
170
171 --enable-speed optimize for speed over accuracy
172
173 --enable-accuracy optimize for accuracy over speed
174
175 --disable-debugging do not compile with debugging support, and
176 use more optimizations
177
178 --disable-shared do not build a shared library
179
180 Note that you need not specify one of --enable-speed or --enable-accuracy;
181 in its default configuration, MAD is optimized for both. You should only
182 use one of these options if you wish to compromise speed or accuracy for
183 the other.
184
185 By default the package will build a shared library if possible for your
186 platform. If you want only a static library, use --disable-shared.
187
188 It is not normally necessary to use the following options, but you may
189 fine-tune the configuration with them if desired:
190
191 --enable-fpm=ARCH use the ARCH-specific version of the
192 fixed-point math assembly routines
193 (current options are: intel, arm, mips,
194 sparc, ppc; also allowed are: 64bit, approx)
195
196 --enable-sso use the subband synthesis optimization,
197 with reduced accuracy
198
199 --disable-aso do not use certain architecture-specific
200 optimizations
201
202 By default an appropriate fixed-point assembly routine will be selected
203 for the configured host type, if it can be determined. Thus if you are
204 cross-compiling for another architecture, you should be sure either to
205 give `configure' a host type argument (--host) or to use an explicit
206 --enable-fpm option.
207
208 If an appropriate assembly routine cannot be determined, the default
209 approximation version will be used. In this case, use of an alternate
210 --enable-fpm is highly recommended.
211
212Experimenting and Developing
213
214 Further options for `configure' that may be useful to developers and
215 experimenters are:
216
217 --enable-debugging enable diagnostic debugging support and
218 debugging symbols
219
220 --enable-profiling generate `gprof' profiling code
221
222 --enable-experimental enable code using the EXPERIMENTAL
223 preprocessor define
224
225===============================================================================
226
227COPYRIGHT
228
229 Please read the `COPYRIGHT' file for copyright and warranty information.
230 Also, the file `COPYING' contains the full text of the GNU GPL.
231
232 Send inquiries, comments, bug reports, suggestions, patches, etc. to:
233
234 Underbit Technologies, Inc. <support@underbit.com>
235
236 See also the MAD home page on the Web:
237
238 http://www.underbit.com/products/mad/
239
240===============================================================================
241
diff --git a/apps/codecs/libmad/README.rockbox b/apps/codecs/libmad/README.rockbox
new file mode 100644
index 0000000000..faddc0d391
--- /dev/null
+++ b/apps/codecs/libmad/README.rockbox
@@ -0,0 +1,23 @@
1Library: libmad-0.15.1b (2004-02-17)
2Imported: 2005-02-15 by Dave Chapman
3
4
5This directory contains a local version of libmad for use by Rockbox
6targets needing software MPEG audio decoding.
7
8
9LICENSING INFORMATION
10
11libmad is (C) 2000-2004 Unibit Technologies, Inc. and licensed under
12the terms of the GNU General Public License. See file "COPYRIGHT" in
13this directory for more information.
14
15
16IMPORT DETAILS
17
18The base version first imported into Rockbox was libmad-0.15.1b
19(released on 2004-02-17), downloaded on 2005-02-15 from the files
20section at http://sourceforge.net/projects/mad/
21
22The autoconf/automake files were removed from the official source
23tarball, as well as the "msvc++" subdirectory.
diff --git a/apps/codecs/libmad/TODO b/apps/codecs/libmad/TODO
new file mode 100644
index 0000000000..a397655c6c
--- /dev/null
+++ b/apps/codecs/libmad/TODO
@@ -0,0 +1,69 @@
1
2 libmad - MPEG audio decoder library
3 Copyright (C) 2000-2004 Underbit Technologies, Inc.
4
5 $Id$
6
7===============================================================================
8
9libmad:
10 - more API layers (buffering, PCM samples, dithering, etc.)
11 - x86 performance optimization compiler flags
12 - function documentation, general docs
13 - finish async API
14 - parse system streams?
15 - MPEG-2 MC, AAC?
16 - logarithmic multiplication?
17 - multiple frame decoding for better locality of reference?
18 - frame serial numbers, Layer III frame continuity checks
19
20fixed.h:
21 - experiment with FPM_INTEL:
22
23# if 1
24# define mad_f_scale64(hi, lo) \
25 ({ mad_fixed_t __result; \
26 asm ("shrl %3,%1\n\t" \
27 "shll %4,%2\n\t" \
28 "orl %2,%1" \
29 : "=rm" (__result) \
30 : "0" (lo), "r" (hi), \
31 "I" (MAD_F_SCALEBITS), "I" (32 - MAD_F_SCALEBITS) \
32 : "cc"); \
33 __result; \
34 })
35# else
36# define mad_f_scale64(hi, lo) \
37 ({ mad_fixed64hi_t __hi_; \
38 mad_fixed64lo_t __lo_; \
39 mad_fixed_t __result; \
40 asm ("sall %2,%1" \
41 : "=r" (__hi_) \
42 : "0" (hi), "I" (32 - MAD_F_SCALEBITS) \
43 : "cc"); \
44 asm ("shrl %2,%1" \
45 : "=r" (__lo_) \
46 : "0" (lo), "I" (MAD_F_SCALEBITS) \
47 : "cc"); \
48 asm ("orl %1,%2" \
49 : "=rm" (__result) \
50 : "r" (__hi_), "0" (__lo_) \
51 : "cc"); \
52 __result; \
53 })
54# endif
55
56libmad Layer I:
57 - check frame length sanity
58
59libmad Layer II:
60 - check frame length sanity
61
62libmad Layer III:
63 - circular buffer
64 - optimize zero_part from Huffman decoding throughout
65 - MPEG 2.5 8000 Hz sf bands? mixed blocks?
66 - stereo->mono conversion optimization?
67 - enable frame-at-a-time decoding
68 - improve portability of huffman.c
69
diff --git a/apps/codecs/libmad/VERSION b/apps/codecs/libmad/VERSION
new file mode 100644
index 0000000000..d4e8f64aa2
--- /dev/null
+++ b/apps/codecs/libmad/VERSION
@@ -0,0 +1,7 @@
10.15.1b
2configure.ac:24
3version.h:25-28
4msvc++/config.h:99,105,120
5msvc++/mad.h:41-44
6
7Makefile.am:98-100
diff --git a/apps/codecs/libmad/bit.c b/apps/codecs/libmad/bit.c
new file mode 100644
index 0000000000..ec1b64541e
--- /dev/null
+++ b/apps/codecs/libmad/bit.c
@@ -0,0 +1,237 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2004 Underbit Technologies, Inc.
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 "config.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/apps/codecs/libmad/bit.h b/apps/codecs/libmad/bit.h
new file mode 100644
index 0000000000..22ae66cb1d
--- /dev/null
+++ b/apps/codecs/libmad/bit.h
@@ -0,0 +1,47 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2004 Underbit Technologies, Inc.
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/apps/codecs/libmad/decoder.c b/apps/codecs/libmad/decoder.c
new file mode 100644
index 0000000000..efa95e31c8
--- /dev/null
+++ b/apps/codecs/libmad/decoder.c
@@ -0,0 +1,582 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2004 Underbit Technologies, Inc.
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 "config.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
55/*
56 * NAME: decoder->init()
57 * DESCRIPTION: initialize a decoder object with callback routines
58 */
59void mad_decoder_init(struct mad_decoder *decoder, void *data,
60 enum mad_flow (*input_func)(void *,
61 struct mad_stream *),
62 enum mad_flow (*header_func)(void *,
63 struct mad_header const *),
64 enum mad_flow (*filter_func)(void *,
65 struct mad_stream const *,
66 struct mad_frame *),
67 enum mad_flow (*output_func)(void *,
68 struct mad_header const *,
69 struct mad_pcm *),
70 enum mad_flow (*error_func)(void *,
71 struct mad_stream *,
72 struct mad_frame *),
73 enum mad_flow (*message_func)(void *,
74 void *, unsigned int *))
75{
76 decoder->mode = -1;
77
78 decoder->options = 0;
79
80 decoder->async.pid = 0;
81 decoder->async.in = -1;
82 decoder->async.out = -1;
83
84 decoder->sync = 0;
85
86 decoder->cb_data = data;
87
88 decoder->input_func = input_func;
89 decoder->header_func = header_func;
90 decoder->filter_func = filter_func;
91 decoder->output_func = output_func;
92 decoder->error_func = error_func;
93 decoder->message_func = message_func;
94}
95
96int mad_decoder_finish(struct mad_decoder *decoder)
97{
98# if defined(USE_ASYNC)
99 if (decoder->mode == MAD_DECODER_MODE_ASYNC && decoder->async.pid) {
100 pid_t pid;
101 int status;
102
103 close(decoder->async.in);
104
105 do
106 pid = waitpid(decoder->async.pid, &status, 0);
107 while (pid == -1 && errno == EINTR);
108
109 decoder->mode = -1;
110
111 close(decoder->async.out);
112
113 decoder->async.pid = 0;
114 decoder->async.in = -1;
115 decoder->async.out = -1;
116
117 if (pid == -1)
118 return -1;
119
120 return (!WIFEXITED(status) || WEXITSTATUS(status)) ? -1 : 0;
121 }
122# endif
123
124 return 0;
125}
126
127# if defined(USE_ASYNC)
128static
129enum mad_flow send_io(int fd, void const *data, size_t len)
130{
131 char const *ptr = data;
132 ssize_t count;
133
134 while (len) {
135 do
136 count = write(fd, ptr, len);
137 while (count == -1 && errno == EINTR);
138
139 if (count == -1)
140 return MAD_FLOW_BREAK;
141
142 len -= count;
143 ptr += count;
144 }
145
146 return MAD_FLOW_CONTINUE;
147}
148
149static
150enum mad_flow receive_io(int fd, void *buffer, size_t len)
151{
152 char *ptr = buffer;
153 ssize_t count;
154
155 while (len) {
156 do
157 count = read(fd, ptr, len);
158 while (count == -1 && errno == EINTR);
159
160 if (count == -1)
161 return (errno == EAGAIN) ? MAD_FLOW_IGNORE : MAD_FLOW_BREAK;
162 else if (count == 0)
163 return MAD_FLOW_STOP;
164
165 len -= count;
166 ptr += count;
167 }
168
169 return MAD_FLOW_CONTINUE;
170}
171
172static
173enum mad_flow receive_io_blocking(int fd, void *buffer, size_t len)
174{
175 int flags, blocking;
176 enum mad_flow result;
177
178 flags = fcntl(fd, F_GETFL);
179 if (flags == -1)
180 return MAD_FLOW_BREAK;
181
182 blocking = flags & ~O_NONBLOCK;
183
184 if (blocking != flags &&
185 fcntl(fd, F_SETFL, blocking) == -1)
186 return MAD_FLOW_BREAK;
187
188 result = receive_io(fd, buffer, len);
189
190 if (flags != blocking &&
191 fcntl(fd, F_SETFL, flags) == -1)
192 return MAD_FLOW_BREAK;
193
194 return result;
195}
196
197static
198enum mad_flow send(int fd, void const *message, unsigned int size)
199{
200 enum mad_flow result;
201
202 /* send size */
203
204 result = send_io(fd, &size, sizeof(size));
205
206 /* send message */
207
208 if (result == MAD_FLOW_CONTINUE)
209 result = send_io(fd, message, size);
210
211 return result;
212}
213
214static
215enum mad_flow receive(int fd, void **message, unsigned int *size)
216{
217 enum mad_flow result;
218 unsigned int actual;
219
220 if (*message == 0)
221 *size = 0;
222
223 /* receive size */
224
225 result = receive_io(fd, &actual, sizeof(actual));
226
227 /* receive message */
228
229 if (result == MAD_FLOW_CONTINUE) {
230 if (actual > *size)
231 actual -= *size;
232 else {
233 *size = actual;
234 actual = 0;
235 }
236
237 if (*size > 0) {
238 if (*message == 0) {
239 *message = malloc(*size);
240 if (*message == 0)
241 return MAD_FLOW_BREAK;
242 }
243
244 result = receive_io_blocking(fd, *message, *size);
245 }
246
247 /* throw away remainder of message */
248
249 while (actual && result == MAD_FLOW_CONTINUE) {
250 char sink[256];
251 unsigned int len;
252
253 len = actual > sizeof(sink) ? sizeof(sink) : actual;
254
255 result = receive_io_blocking(fd, sink, len);
256
257 actual -= len;
258 }
259 }
260
261 return result;
262}
263
264static
265enum mad_flow check_message(struct mad_decoder *decoder)
266{
267 enum mad_flow result;
268 void *message = 0;
269 unsigned int size;
270
271 result = receive(decoder->async.in, &message, &size);
272
273 if (result == MAD_FLOW_CONTINUE) {
274 if (decoder->message_func == 0)
275 size = 0;
276 else {
277 result = decoder->message_func(decoder->cb_data, message, &size);
278
279 if (result == MAD_FLOW_IGNORE ||
280 result == MAD_FLOW_BREAK)
281 size = 0;
282 }
283
284 if (send(decoder->async.out, message, size) != MAD_FLOW_CONTINUE)
285 result = MAD_FLOW_BREAK;
286 }
287
288 if (message)
289 free(message);
290
291 return result;
292}
293# endif
294
295static
296enum mad_flow error_default(void *data, struct mad_stream *stream,
297 struct mad_frame *frame)
298{
299 int *bad_last_frame = data;
300
301 switch (stream->error) {
302 case MAD_ERROR_BADCRC:
303 if (*bad_last_frame)
304 mad_frame_mute(frame);
305 else
306 *bad_last_frame = 1;
307
308 return MAD_FLOW_IGNORE;
309
310 default:
311 return MAD_FLOW_CONTINUE;
312 }
313}
314
315static
316int run_sync(struct mad_decoder *decoder)
317{
318 enum mad_flow (*error_func)(void *, struct mad_stream *, struct mad_frame *);
319 void *error_data;
320 int bad_last_frame = 0;
321 struct mad_stream *stream;
322 struct mad_frame *frame;
323 struct mad_synth *synth;
324 int result = 0;
325
326 if (decoder->input_func == 0)
327 return 0;
328
329 if (decoder->error_func) {
330 error_func = decoder->error_func;
331 error_data = decoder->cb_data;
332 }
333 else {
334 error_func = error_default;
335 error_data = &bad_last_frame;
336 }
337
338 stream = &decoder->sync->stream;
339 frame = &decoder->sync->frame;
340 synth = &decoder->sync->synth;
341
342 mad_stream_init(stream);
343 mad_frame_init(frame);
344 mad_synth_init(synth);
345
346 mad_stream_options(stream, decoder->options);
347
348 do {
349 switch (decoder->input_func(decoder->cb_data, stream)) {
350 case MAD_FLOW_STOP:
351 goto done;
352 case MAD_FLOW_BREAK:
353 goto fail;
354 case MAD_FLOW_IGNORE:
355 continue;
356 case MAD_FLOW_CONTINUE:
357 break;
358 }
359
360 while (1) {
361# if defined(USE_ASYNC)
362 if (decoder->mode == MAD_DECODER_MODE_ASYNC) {
363 switch (check_message(decoder)) {
364 case MAD_FLOW_IGNORE:
365 case MAD_FLOW_CONTINUE:
366 break;
367 case MAD_FLOW_BREAK:
368 goto fail;
369 case MAD_FLOW_STOP:
370 goto done;
371 }
372 }
373# endif
374
375 if (decoder->header_func) {
376 if (mad_header_decode(&frame->header, stream) == -1) {
377 if (!MAD_RECOVERABLE(stream->error))
378 break;
379
380 switch (error_func(error_data, stream, frame)) {
381 case MAD_FLOW_STOP:
382 goto done;
383 case MAD_FLOW_BREAK:
384 goto fail;
385 case MAD_FLOW_IGNORE:
386 case MAD_FLOW_CONTINUE:
387 default:
388 continue;
389 }
390 }
391
392 switch (decoder->header_func(decoder->cb_data, &frame->header)) {
393 case MAD_FLOW_STOP:
394 goto done;
395 case MAD_FLOW_BREAK:
396 goto fail;
397 case MAD_FLOW_IGNORE:
398 continue;
399 case MAD_FLOW_CONTINUE:
400 break;
401 }
402 }
403
404 if (mad_frame_decode(frame, stream) == -1) {
405 if (!MAD_RECOVERABLE(stream->error))
406 break;
407
408 switch (error_func(error_data, stream, frame)) {
409 case MAD_FLOW_STOP:
410 goto done;
411 case MAD_FLOW_BREAK:
412 goto fail;
413 case MAD_FLOW_IGNORE:
414 break;
415 case MAD_FLOW_CONTINUE:
416 default:
417 continue;
418 }
419 }
420 else
421 bad_last_frame = 0;
422
423 if (decoder->filter_func) {
424 switch (decoder->filter_func(decoder->cb_data, stream, frame)) {
425 case MAD_FLOW_STOP:
426 goto done;
427 case MAD_FLOW_BREAK:
428 goto fail;
429 case MAD_FLOW_IGNORE:
430 continue;
431 case MAD_FLOW_CONTINUE:
432 break;
433 }
434 }
435
436 mad_synth_frame(synth, frame);
437
438 if (decoder->output_func) {
439 switch (decoder->output_func(decoder->cb_data,
440 &frame->header, &synth->pcm)) {
441 case MAD_FLOW_STOP:
442 goto done;
443 case MAD_FLOW_BREAK:
444 goto fail;
445 case MAD_FLOW_IGNORE:
446 case MAD_FLOW_CONTINUE:
447 break;
448 }
449 }
450 }
451 }
452 while (stream->error == MAD_ERROR_BUFLEN);
453
454 fail:
455 result = -1;
456
457 done:
458 mad_synth_finish(synth);
459 mad_frame_finish(frame);
460 mad_stream_finish(stream);
461
462 return result;
463}
464
465# if defined(USE_ASYNC)
466static
467int run_async(struct mad_decoder *decoder)
468{
469 pid_t pid;
470 int ptoc[2], ctop[2], flags;
471
472 if (pipe(ptoc) == -1)
473 return -1;
474
475 if (pipe(ctop) == -1) {
476 close(ptoc[0]);
477 close(ptoc[1]);
478 return -1;
479 }
480
481 flags = fcntl(ptoc[0], F_GETFL);
482 if (flags == -1 ||
483 fcntl(ptoc[0], F_SETFL, flags | O_NONBLOCK) == -1) {
484 close(ctop[0]);
485 close(ctop[1]);
486 close(ptoc[0]);
487 close(ptoc[1]);
488 return -1;
489 }
490
491 pid = fork();
492 if (pid == -1) {
493 close(ctop[0]);
494 close(ctop[1]);
495 close(ptoc[0]);
496 close(ptoc[1]);
497 return -1;
498 }
499
500 decoder->async.pid = pid;
501
502 if (pid) {
503 /* parent */
504
505 close(ptoc[0]);
506 close(ctop[1]);
507
508 decoder->async.in = ctop[0];
509 decoder->async.out = ptoc[1];
510
511 return 0;
512 }
513
514 /* child */
515
516 close(ptoc[1]);
517 close(ctop[0]);
518
519 decoder->async.in = ptoc[0];
520 decoder->async.out = ctop[1];
521
522 _exit(run_sync(decoder));
523
524 /* not reached */
525 return -1;
526}
527# endif
528
529/*
530 * NAME: decoder->run()
531 * DESCRIPTION: run the decoder thread either synchronously or asynchronously
532 */
533int mad_decoder_run(struct mad_decoder *decoder, enum mad_decoder_mode mode)
534{
535 int result;
536 int (*run)(struct mad_decoder *) = 0;
537
538 switch (decoder->mode = mode) {
539 case MAD_DECODER_MODE_SYNC:
540 run = run_sync;
541 break;
542
543 case MAD_DECODER_MODE_ASYNC:
544# if defined(USE_ASYNC)
545 run = run_async;
546# endif
547 break;
548 }
549
550 if (run == 0)
551 return -1;
552
553 decoder->sync = malloc(sizeof(*decoder->sync));
554 if (decoder->sync == 0)
555 return -1;
556
557 result = run(decoder);
558
559 free(decoder->sync);
560 decoder->sync = 0;
561
562 return result;
563}
564
565/*
566 * NAME: decoder->message()
567 * DESCRIPTION: send a message to and receive a reply from the decoder process
568 */
569int mad_decoder_message(struct mad_decoder *decoder,
570 void *message, unsigned int *len)
571{
572# if defined(USE_ASYNC)
573 if (decoder->mode != MAD_DECODER_MODE_ASYNC ||
574 send(decoder->async.out, message, *len) != MAD_FLOW_CONTINUE ||
575 receive(decoder->async.in, &message, len) != MAD_FLOW_CONTINUE)
576 return -1;
577
578 return 0;
579# else
580 return -1;
581# endif
582}
diff --git a/apps/codecs/libmad/decoder.h b/apps/codecs/libmad/decoder.h
new file mode 100644
index 0000000000..714e72c602
--- /dev/null
+++ b/apps/codecs/libmad/decoder.h
@@ -0,0 +1,91 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2004 Underbit Technologies, Inc.
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/apps/codecs/libmad/fixed.c b/apps/codecs/libmad/fixed.c
new file mode 100644
index 0000000000..d30f7a1219
--- /dev/null
+++ b/apps/codecs/libmad/fixed.c
@@ -0,0 +1,81 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2004 Underbit Technologies, Inc.
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 "config.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}
38
39/*
40 * NAME: fixed->div()
41 * DESCRIPTION: perform division using fixed-point math
42 */
43mad_fixed_t mad_f_div(mad_fixed_t x, mad_fixed_t y)
44{
45 mad_fixed_t q, r;
46 unsigned int bits;
47
48 q = mad_f_abs(x / y);
49
50 if (x < 0) {
51 x = -x;
52 y = -y;
53 }
54
55 r = x % y;
56
57 if (y < 0) {
58 x = -x;
59 y = -y;
60 }
61
62 if (q > mad_f_intpart(MAD_F_MAX) &&
63 !(q == -mad_f_intpart(MAD_F_MIN) && r == 0 && (x < 0) != (y < 0)))
64 return 0;
65
66 for (bits = MAD_F_FRACBITS; bits && r; --bits) {
67 q <<= 1, r <<= 1;
68 if (r >= y)
69 r -= y, ++q;
70 }
71
72 /* round */
73 if (2 * r >= y)
74 ++q;
75
76 /* fix sign */
77 if ((x < 0) != (y < 0))
78 q = -q;
79
80 return q << bits;
81}
diff --git a/apps/codecs/libmad/fixed.h b/apps/codecs/libmad/fixed.h
new file mode 100644
index 0000000000..baa7dc59c8
--- /dev/null
+++ b/apps/codecs/libmad/fixed.h
@@ -0,0 +1,499 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2004 Underbit Technologies, Inc.
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# elif defined(OPT_INTEL)
212/*
213 * Alternate Intel scaling that may or may not perform better.
214 */
215# define mad_f_scale64(hi, lo) \
216 ({ mad_fixed_t __result; \
217 asm ("shrl %3,%1\n\t" \
218 "shll %4,%2\n\t" \
219 "orl %2,%1" \
220 : "=rm" (__result) \
221 : "0" (lo), "r" (hi), \
222 "I" (MAD_F_SCALEBITS), "I" (32 - MAD_F_SCALEBITS) \
223 : "cc"); \
224 __result; \
225 })
226# else
227# define mad_f_scale64(hi, lo) \
228 ({ mad_fixed_t __result; \
229 asm ("shrdl %3,%2,%1" \
230 : "=rm" (__result) \
231 : "0" (lo), "r" (hi), "I" (MAD_F_SCALEBITS) \
232 : "cc"); \
233 __result; \
234 })
235# endif /* OPT_ACCURACY */
236
237# define MAD_F_SCALEBITS MAD_F_FRACBITS
238# endif
239
240/* --- ARM ----------------------------------------------------------------- */
241
242# elif defined(FPM_ARM)
243
244/*
245 * This ARM V4 version is as accurate as FPM_64BIT but much faster. The
246 * least significant bit is properly rounded at no CPU cycle cost!
247 */
248# if 1
249/*
250 * This is faster than the default implementation via MAD_F_MLX() and
251 * mad_f_scale64().
252 */
253# define mad_f_mul(x, y) \
254 ({ mad_fixed64hi_t __hi; \
255 mad_fixed64lo_t __lo; \
256 mad_fixed_t __result; \
257 asm ("smull %0, %1, %3, %4\n\t" \
258 "movs %0, %0, lsr %5\n\t" \
259 "adc %2, %0, %1, lsl %6" \
260 : "=&r" (__lo), "=&r" (__hi), "=r" (__result) \
261 : "%r" (x), "r" (y), \
262 "M" (MAD_F_SCALEBITS), "M" (32 - MAD_F_SCALEBITS) \
263 : "cc"); \
264 __result; \
265 })
266# endif
267
268# define MAD_F_MLX(hi, lo, x, y) \
269 asm ("smull %0, %1, %2, %3" \
270 : "=&r" (lo), "=&r" (hi) \
271 : "%r" (x), "r" (y))
272
273# define MAD_F_MLA(hi, lo, x, y) \
274 asm ("smlal %0, %1, %2, %3" \
275 : "+r" (lo), "+r" (hi) \
276 : "%r" (x), "r" (y))
277
278# define MAD_F_MLN(hi, lo) \
279 asm ("rsbs %0, %2, #0\n\t" \
280 "rsc %1, %3, #0" \
281 : "=r" (lo), "=r" (hi) \
282 : "0" (lo), "1" (hi) \
283 : "cc")
284
285# define mad_f_scale64(hi, lo) \
286 ({ mad_fixed_t __result; \
287 asm ("movs %0, %1, lsr %3\n\t" \
288 "adc %0, %0, %2, lsl %4" \
289 : "=&r" (__result) \
290 : "r" (lo), "r" (hi), \
291 "M" (MAD_F_SCALEBITS), "M" (32 - MAD_F_SCALEBITS) \
292 : "cc"); \
293 __result; \
294 })
295
296# define MAD_F_SCALEBITS MAD_F_FRACBITS
297
298/* --- MIPS ---------------------------------------------------------------- */
299
300# elif defined(FPM_MIPS)
301
302/*
303 * This MIPS version is fast and accurate; the disposition of the least
304 * significant bit depends on OPT_ACCURACY via mad_f_scale64().
305 */
306# define MAD_F_MLX(hi, lo, x, y) \
307 asm ("mult %2,%3" \
308 : "=l" (lo), "=h" (hi) \
309 : "%r" (x), "r" (y))
310
311# if defined(HAVE_MADD_ASM)
312# define MAD_F_MLA(hi, lo, x, y) \
313 asm ("madd %2,%3" \
314 : "+l" (lo), "+h" (hi) \
315 : "%r" (x), "r" (y))
316# elif defined(HAVE_MADD16_ASM)
317/*
318 * This loses significant accuracy due to the 16-bit integer limit in the
319 * multiply/accumulate instruction.
320 */
321# define MAD_F_ML0(hi, lo, x, y) \
322 asm ("mult %2,%3" \
323 : "=l" (lo), "=h" (hi) \
324 : "%r" ((x) >> 12), "r" ((y) >> 16))
325# define MAD_F_MLA(hi, lo, x, y) \
326 asm ("madd16 %2,%3" \
327 : "+l" (lo), "+h" (hi) \
328 : "%r" ((x) >> 12), "r" ((y) >> 16))
329# define MAD_F_MLZ(hi, lo) ((mad_fixed_t) (lo))
330# endif
331
332# if defined(OPT_SPEED)
333# define mad_f_scale64(hi, lo) \
334 ((mad_fixed_t) ((hi) << (32 - MAD_F_SCALEBITS)))
335# define MAD_F_SCALEBITS MAD_F_FRACBITS
336# endif
337
338/* --- SPARC --------------------------------------------------------------- */
339
340# elif defined(FPM_SPARC)
341
342/*
343 * This SPARC V8 version is fast and accurate; the disposition of the least
344 * significant bit depends on OPT_ACCURACY via mad_f_scale64().
345 */
346# define MAD_F_MLX(hi, lo, x, y) \
347 asm ("smul %2, %3, %0\n\t" \
348 "rd %%y, %1" \
349 : "=r" (lo), "=r" (hi) \
350 : "%r" (x), "rI" (y))
351
352/* --- PowerPC ------------------------------------------------------------- */
353
354# elif defined(FPM_PPC)
355
356/*
357 * This PowerPC version is fast and accurate; the disposition of the least
358 * significant bit depends on OPT_ACCURACY via mad_f_scale64().
359 */
360# define MAD_F_MLX(hi, lo, x, y) \
361 do { \
362 asm ("mullw %0,%1,%2" \
363 : "=r" (lo) \
364 : "%r" (x), "r" (y)); \
365 asm ("mulhw %0,%1,%2" \
366 : "=r" (hi) \
367 : "%r" (x), "r" (y)); \
368 } \
369 while (0)
370
371# if defined(OPT_ACCURACY)
372/*
373 * This gives best accuracy but is not very fast.
374 */
375# define MAD_F_MLA(hi, lo, x, y) \
376 ({ mad_fixed64hi_t __hi; \
377 mad_fixed64lo_t __lo; \
378 MAD_F_MLX(__hi, __lo, (x), (y)); \
379 asm ("addc %0,%2,%3\n\t" \
380 "adde %1,%4,%5" \
381 : "=r" (lo), "=r" (hi) \
382 : "%r" (lo), "r" (__lo), \
383 "%r" (hi), "r" (__hi) \
384 : "xer"); \
385 })
386# endif
387
388# if defined(OPT_ACCURACY)
389/*
390 * This is slower than the truncating version below it.
391 */
392# define mad_f_scale64(hi, lo) \
393 ({ mad_fixed_t __result, __round; \
394 asm ("rotrwi %0,%1,%2" \
395 : "=r" (__result) \
396 : "r" (lo), "i" (MAD_F_SCALEBITS)); \
397 asm ("extrwi %0,%1,1,0" \
398 : "=r" (__round) \
399 : "r" (__result)); \
400 asm ("insrwi %0,%1,%2,0" \
401 : "+r" (__result) \
402 : "r" (hi), "i" (MAD_F_SCALEBITS)); \
403 asm ("add %0,%1,%2" \
404 : "=r" (__result) \
405 : "%r" (__result), "r" (__round)); \
406 __result; \
407 })
408# else
409# define mad_f_scale64(hi, lo) \
410 ({ mad_fixed_t __result; \
411 asm ("rotrwi %0,%1,%2" \
412 : "=r" (__result) \
413 : "r" (lo), "i" (MAD_F_SCALEBITS)); \
414 asm ("insrwi %0,%1,%2,0" \
415 : "+r" (__result) \
416 : "r" (hi), "i" (MAD_F_SCALEBITS)); \
417 __result; \
418 })
419# endif
420
421# define MAD_F_SCALEBITS MAD_F_FRACBITS
422
423/* --- Default ------------------------------------------------------------- */
424
425# elif defined(FPM_DEFAULT)
426
427/*
428 * This version is the most portable but it loses significant accuracy.
429 * Furthermore, accuracy is biased against the second argument, so care
430 * should be taken when ordering operands.
431 *
432 * The scale factors are constant as this is not used with SSO.
433 *
434 * Pre-rounding is required to stay within the limits of compliance.
435 */
436# if defined(OPT_SPEED)
437# define mad_f_mul(x, y) (((x) >> 12) * ((y) >> 16))
438# else
439# define mad_f_mul(x, y) ((((x) + (1L << 11)) >> 12) * \
440 (((y) + (1L << 15)) >> 16))
441# endif
442
443/* ------------------------------------------------------------------------- */
444
445# else
446# error "no FPM selected"
447# endif
448
449/* default implementations */
450
451# if !defined(mad_f_mul)
452# define mad_f_mul(x, y) \
453 ({ register mad_fixed64hi_t __hi; \
454 register mad_fixed64lo_t __lo; \
455 MAD_F_MLX(__hi, __lo, (x), (y)); \
456 mad_f_scale64(__hi, __lo); \
457 })
458# endif
459
460# if !defined(MAD_F_MLA)
461# define MAD_F_ML0(hi, lo, x, y) ((lo) = mad_f_mul((x), (y)))
462# define MAD_F_MLA(hi, lo, x, y) ((lo) += mad_f_mul((x), (y)))
463# define MAD_F_MLN(hi, lo) ((lo) = -(lo))
464# define MAD_F_MLZ(hi, lo) ((void) (hi), (mad_fixed_t) (lo))
465# endif
466
467# if !defined(MAD_F_ML0)
468# define MAD_F_ML0(hi, lo, x, y) MAD_F_MLX((hi), (lo), (x), (y))
469# endif
470
471# if !defined(MAD_F_MLN)
472# define MAD_F_MLN(hi, lo) ((hi) = ((lo) = -(lo)) ? ~(hi) : -(hi))
473# endif
474
475# if !defined(MAD_F_MLZ)
476# define MAD_F_MLZ(hi, lo) mad_f_scale64((hi), (lo))
477# endif
478
479# if !defined(mad_f_scale64)
480# if defined(OPT_ACCURACY)
481# define mad_f_scale64(hi, lo) \
482 ((((mad_fixed_t) \
483 (((hi) << (32 - (MAD_F_SCALEBITS - 1))) | \
484 ((lo) >> (MAD_F_SCALEBITS - 1)))) + 1) >> 1)
485# else
486# define mad_f_scale64(hi, lo) \
487 ((mad_fixed_t) \
488 (((hi) << (32 - MAD_F_SCALEBITS)) | \
489 ((lo) >> MAD_F_SCALEBITS)))
490# endif
491# define MAD_F_SCALEBITS MAD_F_FRACBITS
492# endif
493
494/* C routines */
495
496mad_fixed_t mad_f_abs(mad_fixed_t);
497mad_fixed_t mad_f_div(mad_fixed_t, mad_fixed_t);
498
499# endif
diff --git a/apps/codecs/libmad/frame.c b/apps/codecs/libmad/frame.c
new file mode 100644
index 0000000000..4b592d02ef
--- /dev/null
+++ b/apps/codecs/libmad/frame.c
@@ -0,0 +1,503 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2004 Underbit Technologies, Inc.
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 "config.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 defined(OPT_STRICT)
214 /*
215 * ISO/IEC 11172-3 says this is a reserved emphasis value, but
216 * streams exist which use it anyway. Since the value is not important
217 * to the decoder proper, we allow it unless OPT_STRICT is defined.
218 */
219 if (header->emphasis == MAD_EMPHASIS_RESERVED) {
220 stream->error = MAD_ERROR_BADEMPHASIS;
221 return -1;
222 }
223# endif
224
225 /* error_check() */
226
227 /* crc_check */
228 if (header->flags & MAD_FLAG_PROTECTION)
229 header->crc_target = mad_bit_read(&stream->ptr, 16);
230
231 return 0;
232}
233
234/*
235 * NAME: free_bitrate()
236 * DESCRIPTION: attempt to discover the bitstream's free bitrate
237 */
238static
239int free_bitrate(struct mad_stream *stream, struct mad_header const *header)
240{
241 struct mad_bitptr keep_ptr;
242 unsigned long rate = 0;
243 unsigned int pad_slot, slots_per_frame;
244 unsigned char const *ptr = 0;
245
246 keep_ptr = stream->ptr;
247
248 pad_slot = (header->flags & MAD_FLAG_PADDING) ? 1 : 0;
249 slots_per_frame = (header->layer == MAD_LAYER_III &&
250 (header->flags & MAD_FLAG_LSF_EXT)) ? 72 : 144;
251
252 while (mad_stream_sync(stream) == 0) {
253 struct mad_stream peek_stream;
254 struct mad_header peek_header;
255
256 peek_stream = *stream;
257 peek_header = *header;
258
259 if (decode_header(&peek_header, &peek_stream) == 0 &&
260 peek_header.layer == header->layer &&
261 peek_header.samplerate == header->samplerate) {
262 unsigned int N;
263
264 ptr = mad_bit_nextbyte(&stream->ptr);
265
266 N = ptr - stream->this_frame;
267
268 if (header->layer == MAD_LAYER_I) {
269 rate = (unsigned long) header->samplerate *
270 (N - 4 * pad_slot + 4) / 48 / 1000;
271 }
272 else {
273 rate = (unsigned long) header->samplerate *
274 (N - pad_slot + 1) / slots_per_frame / 1000;
275 }
276
277 if (rate >= 8)
278 break;
279 }
280
281 mad_bit_skip(&stream->ptr, 8);
282 }
283
284 stream->ptr = keep_ptr;
285
286 if (rate < 8 || (header->layer == MAD_LAYER_III && rate > 640)) {
287 stream->error = MAD_ERROR_LOSTSYNC;
288 return -1;
289 }
290
291 stream->freerate = rate * 1000;
292
293 return 0;
294}
295
296/*
297 * NAME: header->decode()
298 * DESCRIPTION: read the next frame header from the stream
299 */
300int mad_header_decode(struct mad_header *header, struct mad_stream *stream)
301{
302 register unsigned char const *ptr, *end;
303 unsigned int pad_slot, N;
304
305 ptr = stream->next_frame;
306 end = stream->bufend;
307
308 if (ptr == 0) {
309 stream->error = MAD_ERROR_BUFPTR;
310 goto fail;
311 }
312
313 /* stream skip */
314 if (stream->skiplen) {
315 if (!stream->sync)
316 ptr = stream->this_frame;
317
318 if (end - ptr < stream->skiplen) {
319 stream->skiplen -= end - ptr;
320 stream->next_frame = end;
321
322 stream->error = MAD_ERROR_BUFLEN;
323 goto fail;
324 }
325
326 ptr += stream->skiplen;
327 stream->skiplen = 0;
328
329 stream->sync = 1;
330 }
331
332 sync:
333 /* synchronize */
334 if (stream->sync) {
335 if (end - ptr < MAD_BUFFER_GUARD) {
336 stream->next_frame = ptr;
337
338 stream->error = MAD_ERROR_BUFLEN;
339 goto fail;
340 }
341 else if (!(ptr[0] == 0xff && (ptr[1] & 0xe0) == 0xe0)) {
342 /* mark point where frame sync word was expected */
343 stream->this_frame = ptr;
344 stream->next_frame = ptr + 1;
345
346 stream->error = MAD_ERROR_LOSTSYNC;
347 goto fail;
348 }
349 }
350 else {
351 mad_bit_init(&stream->ptr, ptr);
352
353 if (mad_stream_sync(stream) == -1) {
354 if (end - stream->next_frame >= MAD_BUFFER_GUARD)
355 stream->next_frame = end - MAD_BUFFER_GUARD;
356
357 stream->error = MAD_ERROR_BUFLEN;
358 goto fail;
359 }
360
361 ptr = mad_bit_nextbyte(&stream->ptr);
362 }
363
364 /* begin processing */
365 stream->this_frame = ptr;
366 stream->next_frame = ptr + 1; /* possibly bogus sync word */
367
368 mad_bit_init(&stream->ptr, stream->this_frame);
369
370 if (decode_header(header, stream) == -1)
371 goto fail;
372
373 /* calculate frame duration */
374 mad_timer_set(&header->duration, 0,
375 32 * MAD_NSBSAMPLES(header), header->samplerate);
376
377 /* calculate free bit rate */
378 if (header->bitrate == 0) {
379 if ((stream->freerate == 0 || !stream->sync ||
380 (header->layer == MAD_LAYER_III && stream->freerate > 640000)) &&
381 free_bitrate(stream, header) == -1)
382 goto fail;
383
384 header->bitrate = stream->freerate;
385 header->flags |= MAD_FLAG_FREEFORMAT;
386 }
387
388 /* calculate beginning of next frame */
389 pad_slot = (header->flags & MAD_FLAG_PADDING) ? 1 : 0;
390
391 if (header->layer == MAD_LAYER_I)
392 N = ((12 * header->bitrate / header->samplerate) + pad_slot) * 4;
393 else {
394 unsigned int slots_per_frame;
395
396 slots_per_frame = (header->layer == MAD_LAYER_III &&
397 (header->flags & MAD_FLAG_LSF_EXT)) ? 72 : 144;
398
399 N = (slots_per_frame * header->bitrate / header->samplerate) + pad_slot;
400 }
401
402 /* verify there is enough data left in buffer to decode this frame */
403 if (N + MAD_BUFFER_GUARD > end - stream->this_frame) {
404 stream->next_frame = stream->this_frame;
405
406 stream->error = MAD_ERROR_BUFLEN;
407 goto fail;
408 }
409
410 stream->next_frame = stream->this_frame + N;
411
412 if (!stream->sync) {
413 /* check that a valid frame header follows this frame */
414
415 ptr = stream->next_frame;
416 if (!(ptr[0] == 0xff && (ptr[1] & 0xe0) == 0xe0)) {
417 ptr = stream->next_frame = stream->this_frame + 1;
418 goto sync;
419 }
420
421 stream->sync = 1;
422 }
423
424 header->flags |= MAD_FLAG_INCOMPLETE;
425
426 return 0;
427
428 fail:
429 stream->sync = 0;
430
431 return -1;
432}
433
434/*
435 * NAME: frame->decode()
436 * DESCRIPTION: decode a single frame from a bitstream
437 */
438int mad_frame_decode(struct mad_frame *frame, struct mad_stream *stream)
439{
440 frame->options = stream->options;
441
442 /* header() */
443 /* error_check() */
444
445 if (!(frame->header.flags & MAD_FLAG_INCOMPLETE) &&
446 mad_header_decode(&frame->header, stream) == -1)
447 goto fail;
448
449 /* audio_data() */
450
451 frame->header.flags &= ~MAD_FLAG_INCOMPLETE;
452
453 if (decoder_table[frame->header.layer - 1](stream, frame) == -1) {
454 if (!MAD_RECOVERABLE(stream->error))
455 stream->next_frame = stream->this_frame;
456
457 goto fail;
458 }
459
460 /* ancillary_data() */
461
462 if (frame->header.layer != MAD_LAYER_III) {
463 struct mad_bitptr next_frame;
464
465 mad_bit_init(&next_frame, stream->next_frame);
466
467 stream->anc_ptr = stream->ptr;
468 stream->anc_bitlen = mad_bit_length(&stream->ptr, &next_frame);
469
470 mad_bit_finish(&next_frame);
471 }
472
473 return 0;
474
475 fail:
476 stream->anc_bitlen = 0;
477 return -1;
478}
479
480/*
481 * NAME: frame->mute()
482 * DESCRIPTION: zero all subband values so the frame becomes silent
483 */
484void mad_frame_mute(struct mad_frame *frame)
485{
486 unsigned int s, sb;
487
488 for (s = 0; s < 36; ++s) {
489 for (sb = 0; sb < 32; ++sb) {
490 frame->sbsample[0][s][sb] =
491 frame->sbsample[1][s][sb] = 0;
492 }
493 }
494
495 if (frame->overlap) {
496 for (s = 0; s < 18; ++s) {
497 for (sb = 0; sb < 32; ++sb) {
498 (*frame->overlap)[0][sb][s] =
499 (*frame->overlap)[1][sb][s] = 0;
500 }
501 }
502 }
503}
diff --git a/apps/codecs/libmad/frame.h b/apps/codecs/libmad/frame.h
new file mode 100644
index 0000000000..dce573d021
--- /dev/null
+++ b/apps/codecs/libmad/frame.h
@@ -0,0 +1,118 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2004 Underbit Technologies, Inc.
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 MAD_EMPHASIS_RESERVED = 2 /* unknown emphasis */
47};
48
49struct mad_header {
50 enum mad_layer layer; /* audio layer (1, 2, or 3) */
51 enum mad_mode mode; /* channel mode (see above) */
52 int mode_extension; /* additional mode info */
53 enum mad_emphasis emphasis; /* de-emphasis to use (see above) */
54
55 unsigned long bitrate; /* stream bitrate (bps) */
56 unsigned int samplerate; /* sampling frequency (Hz) */
57
58 unsigned short crc_check; /* frame CRC accumulator */
59 unsigned short crc_target; /* final target CRC checksum */
60
61 int flags; /* flags (see below) */
62 int private_bits; /* private bits (see below) */
63
64 mad_timer_t duration; /* audio playing time of frame */
65};
66
67struct mad_frame {
68 struct mad_header header; /* MPEG audio header */
69
70 int options; /* decoding options (from stream) */
71
72 mad_fixed_t sbsample[2][36][32]; /* synthesis subband filter samples */
73 mad_fixed_t (*overlap)[2][32][18]; /* Layer III block overlap data */
74};
75
76# define MAD_NCHANNELS(header) ((header)->mode ? 2 : 1)
77# define MAD_NSBSAMPLES(header) \
78 ((header)->layer == MAD_LAYER_I ? 12 : \
79 (((header)->layer == MAD_LAYER_III && \
80 ((header)->flags & MAD_FLAG_LSF_EXT)) ? 18 : 36))
81
82enum {
83 MAD_FLAG_NPRIVATE_III = 0x0007, /* number of Layer III private bits */
84 MAD_FLAG_INCOMPLETE = 0x0008, /* header but not data is decoded */
85
86 MAD_FLAG_PROTECTION = 0x0010, /* frame has CRC protection */
87 MAD_FLAG_COPYRIGHT = 0x0020, /* frame is copyright */
88 MAD_FLAG_ORIGINAL = 0x0040, /* frame is original (else copy) */
89 MAD_FLAG_PADDING = 0x0080, /* frame has additional slot */
90
91 MAD_FLAG_I_STEREO = 0x0100, /* uses intensity joint stereo */
92 MAD_FLAG_MS_STEREO = 0x0200, /* uses middle/side joint stereo */
93 MAD_FLAG_FREEFORMAT = 0x0400, /* uses free format bitrate */
94
95 MAD_FLAG_LSF_EXT = 0x1000, /* lower sampling freq. extension */
96 MAD_FLAG_MC_EXT = 0x2000, /* multichannel audio extension */
97 MAD_FLAG_MPEG_2_5_EXT = 0x4000 /* MPEG 2.5 (unofficial) extension */
98};
99
100enum {
101 MAD_PRIVATE_HEADER = 0x0100, /* header private bit */
102 MAD_PRIVATE_III = 0x001f /* Layer III private bits (up to 5) */
103};
104
105void mad_header_init(struct mad_header *);
106
107# define mad_header_finish(header) /* nothing */
108
109int mad_header_decode(struct mad_header *, struct mad_stream *);
110
111void mad_frame_init(struct mad_frame *);
112void mad_frame_finish(struct mad_frame *);
113
114int mad_frame_decode(struct mad_frame *, struct mad_stream *);
115
116void mad_frame_mute(struct mad_frame *);
117
118# endif
diff --git a/apps/codecs/libmad/global.h b/apps/codecs/libmad/global.h
new file mode 100644
index 0000000000..a3417b461a
--- /dev/null
+++ b/apps/codecs/libmad/global.h
@@ -0,0 +1,58 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2004 Underbit Technologies, Inc.
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
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/apps/codecs/libmad/huffman.c b/apps/codecs/libmad/huffman.c
new file mode 100644
index 0000000000..f4fe61bd04
--- /dev/null
+++ b/apps/codecs/libmad/huffman.c
@@ -0,0 +1,3109 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2004 Underbit Technologies, Inc.
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 "config.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 (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901)
39# define PTR(offs, bits) { .ptr = { 0, bits, offs } }
40# define V(v, w, x, y, hlen) { .value = { 1, hlen, v, w, x, y } }
41# else
42# define PTR(offs, bits) { { 0, bits, offs } }
43# if defined(WORDS_BIGENDIAN)
44# define V(v, w, x, y, hlen) { { 1, hlen, (v << 11) | (w << 10) | \
45 (x << 9) | (y << 8) } }
46# else
47# define V(v, w, x, y, hlen) { { 1, hlen, (v << 0) | (w << 1) | \
48 (x << 2) | (y << 3) } }
49# endif
50# endif
51
52static
53union huffquad const hufftabA[] = {
54 /* 0000 */ PTR(16, 2),
55 /* 0001 */ PTR(20, 2),
56 /* 0010 */ PTR(24, 1),
57 /* 0011 */ PTR(26, 1),
58 /* 0100 */ V(0, 0, 1, 0, 4),
59 /* 0101 */ V(0, 0, 0, 1, 4),
60 /* 0110 */ V(0, 1, 0, 0, 4),
61 /* 0111 */ V(1, 0, 0, 0, 4),
62 /* 1000 */ V(0, 0, 0, 0, 1),
63 /* 1001 */ V(0, 0, 0, 0, 1),
64 /* 1010 */ V(0, 0, 0, 0, 1),
65 /* 1011 */ V(0, 0, 0, 0, 1),
66 /* 1100 */ V(0, 0, 0, 0, 1),
67 /* 1101 */ V(0, 0, 0, 0, 1),
68 /* 1110 */ V(0, 0, 0, 0, 1),
69 /* 1111 */ V(0, 0, 0, 0, 1),
70
71 /* 0000 ... */
72 /* 00 */ V(1, 0, 1, 1, 2), /* 16 */
73 /* 01 */ V(1, 1, 1, 1, 2),
74 /* 10 */ V(1, 1, 0, 1, 2),
75 /* 11 */ V(1, 1, 1, 0, 2),
76
77 /* 0001 ... */
78 /* 00 */ V(0, 1, 1, 1, 2), /* 20 */
79 /* 01 */ V(0, 1, 0, 1, 2),
80 /* 10 */ V(1, 0, 0, 1, 1),
81 /* 11 */ V(1, 0, 0, 1, 1),
82
83 /* 0010 ... */
84 /* 0 */ V(0, 1, 1, 0, 1), /* 24 */
85 /* 1 */ V(0, 0, 1, 1, 1),
86
87 /* 0011 ... */
88 /* 0 */ V(1, 0, 1, 0, 1), /* 26 */
89 /* 1 */ V(1, 1, 0, 0, 1)
90};
91
92static
93union huffquad const hufftabB[] = {
94 /* 0000 */ V(1, 1, 1, 1, 4),
95 /* 0001 */ V(1, 1, 1, 0, 4),
96 /* 0010 */ V(1, 1, 0, 1, 4),
97 /* 0011 */ V(1, 1, 0, 0, 4),
98 /* 0100 */ V(1, 0, 1, 1, 4),
99 /* 0101 */ V(1, 0, 1, 0, 4),
100 /* 0110 */ V(1, 0, 0, 1, 4),
101 /* 0111 */ V(1, 0, 0, 0, 4),
102 /* 1000 */ V(0, 1, 1, 1, 4),
103 /* 1001 */ V(0, 1, 1, 0, 4),
104 /* 1010 */ V(0, 1, 0, 1, 4),
105 /* 1011 */ V(0, 1, 0, 0, 4),
106 /* 1100 */ V(0, 0, 1, 1, 4),
107 /* 1101 */ V(0, 0, 1, 0, 4),
108 /* 1110 */ V(0, 0, 0, 1, 4),
109 /* 1111 */ V(0, 0, 0, 0, 4)
110};
111
112# undef V
113# undef PTR
114
115# if defined(__GNUC__) || \
116 (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901)
117# define PTR(offs, bits) { .ptr = { 0, bits, offs } }
118# define V(x, y, hlen) { .value = { 1, hlen, x, y } }
119# else
120# define PTR(offs, bits) { { 0, bits, offs } }
121# if defined(WORDS_BIGENDIAN)
122# define V(x, y, hlen) { { 1, hlen, (x << 8) | (y << 4) } }
123# else
124# define V(x, y, hlen) { { 1, hlen, (x << 0) | (y << 4) } }
125# endif
126# endif
127
128static
129union huffpair const hufftab0[] = {
130 /* */ V(0, 0, 0)
131};
132
133static
134union huffpair const hufftab1[] = {
135 /* 000 */ V(1, 1, 3),
136 /* 001 */ V(0, 1, 3),
137 /* 010 */ V(1, 0, 2),
138 /* 011 */ V(1, 0, 2),
139 /* 100 */ V(0, 0, 1),
140 /* 101 */ V(0, 0, 1),
141 /* 110 */ V(0, 0, 1),
142 /* 111 */ V(0, 0, 1)
143};
144
145static
146union huffpair const hufftab2[] = {
147 /* 000 */ PTR(8, 3),
148 /* 001 */ V(1, 1, 3),
149 /* 010 */ V(0, 1, 3),
150 /* 011 */ V(1, 0, 3),
151 /* 100 */ V(0, 0, 1),
152 /* 101 */ V(0, 0, 1),
153 /* 110 */ V(0, 0, 1),
154 /* 111 */ V(0, 0, 1),
155
156 /* 000 ... */
157 /* 000 */ V(2, 2, 3), /* 8 */
158 /* 001 */ V(0, 2, 3),
159 /* 010 */ V(1, 2, 2),
160 /* 011 */ V(1, 2, 2),
161 /* 100 */ V(2, 1, 2),
162 /* 101 */ V(2, 1, 2),
163 /* 110 */ V(2, 0, 2),
164 /* 111 */ V(2, 0, 2)
165};
166
167static
168union huffpair const hufftab3[] = {
169 /* 000 */ PTR(8, 3),
170 /* 001 */ V(1, 0, 3),
171 /* 010 */ V(1, 1, 2),
172 /* 011 */ V(1, 1, 2),
173 /* 100 */ V(0, 1, 2),
174 /* 101 */ V(0, 1, 2),
175 /* 110 */ V(0, 0, 2),
176 /* 111 */ V(0, 0, 2),
177
178 /* 000 ... */
179 /* 000 */ V(2, 2, 3), /* 8 */
180 /* 001 */ V(0, 2, 3),
181 /* 010 */ V(1, 2, 2),
182 /* 011 */ V(1, 2, 2),
183 /* 100 */ V(2, 1, 2),
184 /* 101 */ V(2, 1, 2),
185 /* 110 */ V(2, 0, 2),
186 /* 111 */ V(2, 0, 2)
187};
188
189static
190union huffpair const hufftab5[] = {
191 /* 000 */ PTR(8, 4),
192 /* 001 */ V(1, 1, 3),
193 /* 010 */ V(0, 1, 3),
194 /* 011 */ V(1, 0, 3),
195 /* 100 */ V(0, 0, 1),
196 /* 101 */ V(0, 0, 1),
197 /* 110 */ V(0, 0, 1),
198 /* 111 */ V(0, 0, 1),
199
200 /* 000 ... */
201 /* 0000 */ PTR(24, 1), /* 8 */
202 /* 0001 */ V(3, 2, 4),
203 /* 0010 */ V(3, 1, 3),
204 /* 0011 */ V(3, 1, 3),
205 /* 0100 */ V(1, 3, 4),
206 /* 0101 */ V(0, 3, 4),
207 /* 0110 */ V(3, 0, 4),
208 /* 0111 */ V(2, 2, 4),
209 /* 1000 */ V(1, 2, 3),
210 /* 1001 */ V(1, 2, 3),
211 /* 1010 */ V(2, 1, 3),
212 /* 1011 */ V(2, 1, 3),
213 /* 1100 */ V(0, 2, 3),
214 /* 1101 */ V(0, 2, 3),
215 /* 1110 */ V(2, 0, 3),
216 /* 1111 */ V(2, 0, 3),
217
218 /* 000 0000 ... */
219 /* 0 */ V(3, 3, 1), /* 24 */
220 /* 1 */ V(2, 3, 1)
221};
222
223static
224union huffpair const hufftab6[] = {
225 /* 0000 */ PTR(16, 3),
226 /* 0001 */ PTR(24, 1),
227 /* 0010 */ PTR(26, 1),
228 /* 0011 */ V(1, 2, 4),
229 /* 0100 */ V(2, 1, 4),
230 /* 0101 */ V(2, 0, 4),
231 /* 0110 */ V(0, 1, 3),
232 /* 0111 */ V(0, 1, 3),
233 /* 1000 */ V(1, 1, 2),
234 /* 1001 */ V(1, 1, 2),
235 /* 1010 */ V(1, 1, 2),
236 /* 1011 */ V(1, 1, 2),
237 /* 1100 */ V(1, 0, 3),
238 /* 1101 */ V(1, 0, 3),
239 /* 1110 */ V(0, 0, 3),
240 /* 1111 */ V(0, 0, 3),
241
242 /* 0000 ... */
243 /* 000 */ V(3, 3, 3), /* 16 */
244 /* 001 */ V(0, 3, 3),
245 /* 010 */ V(2, 3, 2),
246 /* 011 */ V(2, 3, 2),
247 /* 100 */ V(3, 2, 2),
248 /* 101 */ V(3, 2, 2),
249 /* 110 */ V(3, 0, 2),
250 /* 111 */ V(3, 0, 2),
251
252 /* 0001 ... */
253 /* 0 */ V(1, 3, 1), /* 24 */
254 /* 1 */ V(3, 1, 1),
255
256 /* 0010 ... */
257 /* 0 */ V(2, 2, 1), /* 26 */
258 /* 1 */ V(0, 2, 1)
259};
260
261static
262union huffpair const hufftab7[] = {
263 /* 0000 */ PTR(16, 4),
264 /* 0001 */ PTR(32, 4),
265 /* 0010 */ PTR(48, 2),
266 /* 0011 */ V(1, 1, 4),
267 /* 0100 */ V(0, 1, 3),
268 /* 0101 */ V(0, 1, 3),
269 /* 0110 */ V(1, 0, 3),
270 /* 0111 */ V(1, 0, 3),
271 /* 1000 */ V(0, 0, 1),
272 /* 1001 */ V(0, 0, 1),
273 /* 1010 */ V(0, 0, 1),
274 /* 1011 */ V(0, 0, 1),
275 /* 1100 */ V(0, 0, 1),
276 /* 1101 */ V(0, 0, 1),
277 /* 1110 */ V(0, 0, 1),
278 /* 1111 */ V(0, 0, 1),
279
280 /* 0000 ... */
281 /* 0000 */ PTR(52, 2), /* 16 */
282 /* 0001 */ PTR(56, 1),
283 /* 0010 */ PTR(58, 1),
284 /* 0011 */ V(1, 5, 4),
285 /* 0100 */ V(5, 1, 4),
286 /* 0101 */ PTR(60, 1),
287 /* 0110 */ V(5, 0, 4),
288 /* 0111 */ PTR(62, 1),
289 /* 1000 */ V(2, 4, 4),
290 /* 1001 */ V(4, 2, 4),
291 /* 1010 */ V(1, 4, 3),
292 /* 1011 */ V(1, 4, 3),
293 /* 1100 */ V(4, 1, 3),
294 /* 1101 */ V(4, 1, 3),
295 /* 1110 */ V(4, 0, 3),
296 /* 1111 */ V(4, 0, 3),
297
298 /* 0001 ... */
299 /* 0000 */ V(0, 4, 4), /* 32 */
300 /* 0001 */ V(2, 3, 4),
301 /* 0010 */ V(3, 2, 4),
302 /* 0011 */ V(0, 3, 4),
303 /* 0100 */ V(1, 3, 3),
304 /* 0101 */ V(1, 3, 3),
305 /* 0110 */ V(3, 1, 3),
306 /* 0111 */ V(3, 1, 3),
307 /* 1000 */ V(3, 0, 3),
308 /* 1001 */ V(3, 0, 3),
309 /* 1010 */ V(2, 2, 3),
310 /* 1011 */ V(2, 2, 3),
311 /* 1100 */ V(1, 2, 2),
312 /* 1101 */ V(1, 2, 2),
313 /* 1110 */ V(1, 2, 2),
314 /* 1111 */ V(1, 2, 2),
315
316 /* 0010 ... */
317 /* 00 */ V(2, 1, 1), /* 48 */
318 /* 01 */ V(2, 1, 1),
319 /* 10 */ V(0, 2, 2),
320 /* 11 */ V(2, 0, 2),
321
322 /* 0000 0000 ... */
323 /* 00 */ V(5, 5, 2), /* 52 */
324 /* 01 */ V(4, 5, 2),
325 /* 10 */ V(5, 4, 2),
326 /* 11 */ V(5, 3, 2),
327
328 /* 0000 0001 ... */
329 /* 0 */ V(3, 5, 1), /* 56 */
330 /* 1 */ V(4, 4, 1),
331
332 /* 0000 0010 ... */
333 /* 0 */ V(2, 5, 1), /* 58 */
334 /* 1 */ V(5, 2, 1),
335
336 /* 0000 0101 ... */
337 /* 0 */ V(0, 5, 1), /* 60 */
338 /* 1 */ V(3, 4, 1),
339
340 /* 0000 0111 ... */
341 /* 0 */ V(4, 3, 1), /* 62 */
342 /* 1 */ V(3, 3, 1)
343};
344
345# if 0
346/* this version saves 8 entries (16 bytes) at the expense of
347 an extra lookup in 4 out of 36 cases */
348static
349union huffpair const hufftab8[] = {
350 /* 0000 */ PTR(16, 4),
351 /* 0001 */ PTR(32, 2),
352 /* 0010 */ V(1, 2, 4),
353 /* 0011 */ V(2, 1, 4),
354 /* 0100 */ V(1, 1, 2),
355 /* 0101 */ V(1, 1, 2),
356 /* 0110 */ V(1, 1, 2),
357 /* 0111 */ V(1, 1, 2),
358 /* 1000 */ V(0, 1, 3),
359 /* 1001 */ V(0, 1, 3),
360 /* 1010 */ V(1, 0, 3),
361 /* 1011 */ V(1, 0, 3),
362 /* 1100 */ V(0, 0, 2),
363 /* 1101 */ V(0, 0, 2),
364 /* 1110 */ V(0, 0, 2),
365 /* 1111 */ V(0, 0, 2),
366
367 /* 0000 ... */
368 /* 0000 */ PTR(36, 3), /* 16 */
369 /* 0001 */ PTR(44, 2),
370 /* 0010 */ PTR(48, 1),
371 /* 0011 */ V(1, 5, 4),
372 /* 0100 */ V(5, 1, 4),
373 /* 0101 */ PTR(50, 1),
374 /* 0110 */ PTR(52, 1),
375 /* 0111 */ V(2, 4, 4),
376 /* 1000 */ V(4, 2, 4),
377 /* 1001 */ V(1, 4, 4),
378 /* 1010 */ V(4, 1, 3),
379 /* 1011 */ V(4, 1, 3),
380 /* 1100 */ V(0, 4, 4),
381 /* 1101 */ V(4, 0, 4),
382 /* 1110 */ V(2, 3, 4),
383 /* 1111 */ V(3, 2, 4),
384
385 /* 0001 ... */
386 /* 00 */ PTR(54, 2), /* 32 */
387 /* 01 */ V(2, 2, 2),
388 /* 10 */ V(0, 2, 2),
389 /* 11 */ V(2, 0, 2),
390
391 /* 0000 0000 ... */
392 /* 000 */ V(5, 5, 3), /* 36 */
393 /* 001 */ V(5, 4, 3),
394 /* 010 */ V(4, 5, 2),
395 /* 011 */ V(4, 5, 2),
396 /* 100 */ V(5, 3, 1),
397 /* 101 */ V(5, 3, 1),
398 /* 110 */ V(5, 3, 1),
399 /* 111 */ V(5, 3, 1),
400
401 /* 0000 0001 ... */
402 /* 00 */ V(3, 5, 2), /* 44 */
403 /* 01 */ V(4, 4, 2),
404 /* 10 */ V(2, 5, 1),
405 /* 11 */ V(2, 5, 1),
406
407 /* 0000 0010 ... */
408 /* 0 */ V(5, 2, 1), /* 48 */
409 /* 1 */ V(0, 5, 1),
410
411 /* 0000 0101 ... */
412 /* 0 */ V(3, 4, 1), /* 50 */
413 /* 1 */ V(4, 3, 1),
414
415 /* 0000 0110 ... */
416 /* 0 */ V(5, 0, 1), /* 52 */
417 /* 1 */ V(3, 3, 1),
418
419 /* 0001 00 ... */
420 /* 00 */ V(1, 3, 2), /* 54 */
421 /* 01 */ V(3, 1, 2),
422 /* 10 */ V(0, 3, 2),
423 /* 11 */ V(3, 0, 2),
424};
425# else
426static
427union huffpair const hufftab8[] = {
428 /* 0000 */ PTR(16, 4),
429 /* 0001 */ PTR(32, 4),
430 /* 0010 */ V(1, 2, 4),
431 /* 0011 */ V(2, 1, 4),
432 /* 0100 */ V(1, 1, 2),
433 /* 0101 */ V(1, 1, 2),
434 /* 0110 */ V(1, 1, 2),
435 /* 0111 */ V(1, 1, 2),
436 /* 1000 */ V(0, 1, 3),
437 /* 1001 */ V(0, 1, 3),
438 /* 1010 */ V(1, 0, 3),
439 /* 1011 */ V(1, 0, 3),
440 /* 1100 */ V(0, 0, 2),
441 /* 1101 */ V(0, 0, 2),
442 /* 1110 */ V(0, 0, 2),
443 /* 1111 */ V(0, 0, 2),
444
445 /* 0000 ... */
446 /* 0000 */ PTR(48, 3), /* 16 */
447 /* 0001 */ PTR(56, 2),
448 /* 0010 */ PTR(60, 1),
449 /* 0011 */ V(1, 5, 4),
450 /* 0100 */ V(5, 1, 4),
451 /* 0101 */ PTR(62, 1),
452 /* 0110 */ PTR(64, 1),
453 /* 0111 */ V(2, 4, 4),
454 /* 1000 */ V(4, 2, 4),
455 /* 1001 */ V(1, 4, 4),
456 /* 1010 */ V(4, 1, 3),
457 /* 1011 */ V(4, 1, 3),
458 /* 1100 */ V(0, 4, 4),
459 /* 1101 */ V(4, 0, 4),
460 /* 1110 */ V(2, 3, 4),
461 /* 1111 */ V(3, 2, 4),
462
463 /* 0001 ... */
464 /* 0000 */ V(1, 3, 4), /* 32 */
465 /* 0001 */ V(3, 1, 4),
466 /* 0010 */ V(0, 3, 4),
467 /* 0011 */ V(3, 0, 4),
468 /* 0100 */ V(2, 2, 2),
469 /* 0101 */ V(2, 2, 2),
470 /* 0110 */ V(2, 2, 2),
471 /* 0111 */ V(2, 2, 2),
472 /* 1000 */ V(0, 2, 2),
473 /* 1001 */ V(0, 2, 2),
474 /* 1010 */ V(0, 2, 2),
475 /* 1011 */ V(0, 2, 2),
476 /* 1100 */ V(2, 0, 2),
477 /* 1101 */ V(2, 0, 2),
478 /* 1110 */ V(2, 0, 2),
479 /* 1111 */ V(2, 0, 2),
480
481 /* 0000 0000 ... */
482 /* 000 */ V(5, 5, 3), /* 48 */
483 /* 001 */ V(5, 4, 3),
484 /* 010 */ V(4, 5, 2),
485 /* 011 */ V(4, 5, 2),
486 /* 100 */ V(5, 3, 1),
487 /* 101 */ V(5, 3, 1),
488 /* 110 */ V(5, 3, 1),
489 /* 111 */ V(5, 3, 1),
490
491 /* 0000 0001 ... */
492 /* 00 */ V(3, 5, 2), /* 56 */
493 /* 01 */ V(4, 4, 2),
494 /* 10 */ V(2, 5, 1),
495 /* 11 */ V(2, 5, 1),
496
497 /* 0000 0010 ... */
498 /* 0 */ V(5, 2, 1), /* 60 */
499 /* 1 */ V(0, 5, 1),
500
501 /* 0000 0101 ... */
502 /* 0 */ V(3, 4, 1), /* 62 */
503 /* 1 */ V(4, 3, 1),
504
505 /* 0000 0110 ... */
506 /* 0 */ V(5, 0, 1), /* 64 */
507 /* 1 */ V(3, 3, 1)
508};
509# endif
510
511static
512union huffpair const hufftab9[] = {
513 /* 0000 */ PTR(16, 4),
514 /* 0001 */ PTR(32, 3),
515 /* 0010 */ PTR(40, 2),
516 /* 0011 */ PTR(44, 2),
517 /* 0100 */ PTR(48, 1),
518 /* 0101 */ V(1, 2, 4),
519 /* 0110 */ V(2, 1, 4),
520 /* 0111 */ V(2, 0, 4),
521 /* 1000 */ V(1, 1, 3),
522 /* 1001 */ V(1, 1, 3),
523 /* 1010 */ V(0, 1, 3),
524 /* 1011 */ V(0, 1, 3),
525 /* 1100 */ V(1, 0, 3),
526 /* 1101 */ V(1, 0, 3),
527 /* 1110 */ V(0, 0, 3),
528 /* 1111 */ V(0, 0, 3),
529
530 /* 0000 ... */
531 /* 0000 */ PTR(50, 1), /* 16 */
532 /* 0001 */ V(3, 5, 4),
533 /* 0010 */ V(5, 3, 4),
534 /* 0011 */ PTR(52, 1),
535 /* 0100 */ V(4, 4, 4),
536 /* 0101 */ V(2, 5, 4),
537 /* 0110 */ V(5, 2, 4),
538 /* 0111 */ V(1, 5, 4),
539 /* 1000 */ V(5, 1, 3),
540 /* 1001 */ V(5, 1, 3),
541 /* 1010 */ V(3, 4, 3),
542 /* 1011 */ V(3, 4, 3),
543 /* 1100 */ V(4, 3, 3),
544 /* 1101 */ V(4, 3, 3),
545 /* 1110 */ V(5, 0, 4),
546 /* 1111 */ V(0, 4, 4),
547
548 /* 0001 ... */
549 /* 000 */ V(2, 4, 3), /* 32 */
550 /* 001 */ V(4, 2, 3),
551 /* 010 */ V(3, 3, 3),
552 /* 011 */ V(4, 0, 3),
553 /* 100 */ V(1, 4, 2),
554 /* 101 */ V(1, 4, 2),
555 /* 110 */ V(4, 1, 2),
556 /* 111 */ V(4, 1, 2),
557
558 /* 0010 ... */
559 /* 00 */ V(2, 3, 2), /* 40 */
560 /* 01 */ V(3, 2, 2),
561 /* 10 */ V(1, 3, 1),
562 /* 11 */ V(1, 3, 1),
563
564 /* 0011 ... */
565 /* 00 */ V(3, 1, 1), /* 44 */
566 /* 01 */ V(3, 1, 1),
567 /* 10 */ V(0, 3, 2),
568 /* 11 */ V(3, 0, 2),
569
570 /* 0100 ... */
571 /* 0 */ V(2, 2, 1), /* 48 */
572 /* 1 */ V(0, 2, 1),
573
574 /* 0000 0000 ... */
575 /* 0 */ V(5, 5, 1), /* 50 */
576 /* 1 */ V(4, 5, 1),
577
578 /* 0000 0011 ... */
579 /* 0 */ V(5, 4, 1), /* 52 */
580 /* 1 */ V(0, 5, 1)
581};
582
583static
584union huffpair const hufftab10[] = {
585 /* 0000 */ PTR(16, 4),
586 /* 0001 */ PTR(32, 4),
587 /* 0010 */ PTR(48, 2),
588 /* 0011 */ V(1, 1, 4),
589 /* 0100 */ V(0, 1, 3),
590 /* 0101 */ V(0, 1, 3),
591 /* 0110 */ V(1, 0, 3),
592 /* 0111 */ V(1, 0, 3),
593 /* 1000 */ V(0, 0, 1),
594 /* 1001 */ V(0, 0, 1),
595 /* 1010 */ V(0, 0, 1),
596 /* 1011 */ V(0, 0, 1),
597 /* 1100 */ V(0, 0, 1),
598 /* 1101 */ V(0, 0, 1),
599 /* 1110 */ V(0, 0, 1),
600 /* 1111 */ V(0, 0, 1),
601
602 /* 0000 ... */
603 /* 0000 */ PTR(52, 3), /* 16 */
604 /* 0001 */ PTR(60, 2),
605 /* 0010 */ PTR(64, 3),
606 /* 0011 */ PTR(72, 1),
607 /* 0100 */ PTR(74, 2),
608 /* 0101 */ PTR(78, 2),
609 /* 0110 */ PTR(82, 2),
610 /* 0111 */ V(1, 7, 4),
611 /* 1000 */ V(7, 1, 4),
612 /* 1001 */ PTR(86, 1),
613 /* 1010 */ PTR(88, 2),
614 /* 1011 */ PTR(92, 2),
615 /* 1100 */ V(1, 6, 4),
616 /* 1101 */ V(6, 1, 4),
617 /* 1110 */ V(6, 0, 4),
618 /* 1111 */ PTR(96, 1),
619
620 /* 0001 ... */
621 /* 0000 */ PTR(98, 1), /* 32 */
622 /* 0001 */ PTR(100, 1),
623 /* 0010 */ V(1, 4, 4),
624 /* 0011 */ V(4, 1, 4),
625 /* 0100 */ V(4, 0, 4),
626 /* 0101 */ V(2, 3, 4),
627 /* 0110 */ V(3, 2, 4),
628 /* 0111 */ V(0, 3, 4),
629 /* 1000 */ V(1, 3, 3),
630 /* 1001 */ V(1, 3, 3),
631 /* 1010 */ V(3, 1, 3),
632 /* 1011 */ V(3, 1, 3),
633 /* 1100 */ V(3, 0, 3),
634 /* 1101 */ V(3, 0, 3),
635 /* 1110 */ V(2, 2, 3),
636 /* 1111 */ V(2, 2, 3),
637
638 /* 0010 ... */
639 /* 00 */ V(1, 2, 2), /* 48 */
640 /* 01 */ V(2, 1, 2),
641 /* 10 */ V(0, 2, 2),
642 /* 11 */ V(2, 0, 2),
643
644 /* 0000 0000 ... */
645 /* 000 */ V(7, 7, 3), /* 52 */
646 /* 001 */ V(6, 7, 3),
647 /* 010 */ V(7, 6, 3),
648 /* 011 */ V(5, 7, 3),
649 /* 100 */ V(7, 5, 3),
650 /* 101 */ V(6, 6, 3),
651 /* 110 */ V(4, 7, 2),
652 /* 111 */ V(4, 7, 2),
653
654 /* 0000 0001 ... */
655 /* 00 */ V(7, 4, 2), /* 60 */
656 /* 01 */ V(5, 6, 2),
657 /* 10 */ V(6, 5, 2),
658 /* 11 */ V(3, 7, 2),
659
660 /* 0000 0010 ... */
661 /* 000 */ V(7, 3, 2), /* 64 */
662 /* 001 */ V(7, 3, 2),
663 /* 010 */ V(4, 6, 2),
664 /* 011 */ V(4, 6, 2),
665 /* 100 */ V(5, 5, 3),
666 /* 101 */ V(5, 4, 3),
667 /* 110 */ V(6, 3, 2),
668 /* 111 */ V(6, 3, 2),
669
670 /* 0000 0011 ... */
671 /* 0 */ V(2, 7, 1), /* 72 */
672 /* 1 */ V(7, 2, 1),
673
674 /* 0000 0100 ... */
675 /* 00 */ V(6, 4, 2), /* 74 */
676 /* 01 */ V(0, 7, 2),
677 /* 10 */ V(7, 0, 1),
678 /* 11 */ V(7, 0, 1),
679
680 /* 0000 0101 ... */
681 /* 00 */ V(6, 2, 1), /* 78 */
682 /* 01 */ V(6, 2, 1),
683 /* 10 */ V(4, 5, 2),
684 /* 11 */ V(3, 5, 2),
685
686 /* 0000 0110 ... */
687 /* 00 */ V(0, 6, 1), /* 82 */
688 /* 01 */ V(0, 6, 1),
689 /* 10 */ V(5, 3, 2),
690 /* 11 */ V(4, 4, 2),
691
692 /* 0000 1001 ... */
693 /* 0 */ V(3, 6, 1), /* 86 */
694 /* 1 */ V(2, 6, 1),
695
696 /* 0000 1010 ... */
697 /* 00 */ V(2, 5, 2), /* 88 */
698 /* 01 */ V(5, 2, 2),
699 /* 10 */ V(1, 5, 1),
700 /* 11 */ V(1, 5, 1),
701
702 /* 0000 1011 ... */
703 /* 00 */ V(5, 1, 1), /* 92 */
704 /* 01 */ V(5, 1, 1),
705 /* 10 */ V(3, 4, 2),
706 /* 11 */ V(4, 3, 2),
707
708 /* 0000 1111 ... */
709 /* 0 */ V(0, 5, 1), /* 96 */
710 /* 1 */ V(5, 0, 1),
711
712 /* 0001 0000 ... */
713 /* 0 */ V(2, 4, 1), /* 98 */
714 /* 1 */ V(4, 2, 1),
715
716 /* 0001 0001 ... */
717 /* 0 */ V(3, 3, 1), /* 100 */
718 /* 1 */ V(0, 4, 1)
719};
720
721static
722union huffpair const hufftab11[] = {
723 /* 0000 */ PTR(16, 4),
724 /* 0001 */ PTR(32, 4),
725 /* 0010 */ PTR(48, 4),
726 /* 0011 */ PTR(64, 3),
727 /* 0100 */ V(1, 2, 4),
728 /* 0101 */ PTR(72, 1),
729 /* 0110 */ V(1, 1, 3),
730 /* 0111 */ V(1, 1, 3),
731 /* 1000 */ V(0, 1, 3),
732 /* 1001 */ V(0, 1, 3),
733 /* 1010 */ V(1, 0, 3),
734 /* 1011 */ V(1, 0, 3),
735 /* 1100 */ V(0, 0, 2),
736 /* 1101 */ V(0, 0, 2),
737 /* 1110 */ V(0, 0, 2),
738 /* 1111 */ V(0, 0, 2),
739
740 /* 0000 ... */
741 /* 0000 */ PTR(74, 2), /* 16 */
742 /* 0001 */ PTR(78, 3),
743 /* 0010 */ PTR(86, 2),
744 /* 0011 */ PTR(90, 1),
745 /* 0100 */ PTR(92, 2),
746 /* 0101 */ V(2, 7, 4),
747 /* 0110 */ V(7, 2, 4),
748 /* 0111 */ PTR(96, 1),
749 /* 1000 */ V(7, 1, 3),
750 /* 1001 */ V(7, 1, 3),
751 /* 1010 */ V(1, 7, 4),
752 /* 1011 */ V(7, 0, 4),
753 /* 1100 */ V(3, 6, 4),
754 /* 1101 */ V(6, 3, 4),
755 /* 1110 */ V(6, 0, 4),
756 /* 1111 */ PTR(98, 1),
757
758 /* 0001 ... */
759 /* 0000 */ PTR(100, 1), /* 32 */
760 /* 0001 */ V(1, 5, 4),
761 /* 0010 */ V(6, 2, 3),
762 /* 0011 */ V(6, 2, 3),
763 /* 0100 */ V(2, 6, 4),
764 /* 0101 */ V(0, 6, 4),
765 /* 0110 */ V(1, 6, 3),
766 /* 0111 */ V(1, 6, 3),
767 /* 1000 */ V(6, 1, 3),
768 /* 1001 */ V(6, 1, 3),
769 /* 1010 */ V(5, 1, 4),
770 /* 1011 */ V(3, 4, 4),
771 /* 1100 */ V(5, 0, 4),
772 /* 1101 */ PTR(102, 1),
773 /* 1110 */ V(2, 4, 4),
774 /* 1111 */ V(4, 2, 4),
775
776 /* 0010 ... */
777 /* 0000 */ V(1, 4, 4), /* 48 */
778 /* 0001 */ V(4, 1, 4),
779 /* 0010 */ V(0, 4, 4),
780 /* 0011 */ V(4, 0, 4),
781 /* 0100 */ V(2, 3, 3),
782 /* 0101 */ V(2, 3, 3),
783 /* 0110 */ V(3, 2, 3),
784 /* 0111 */ V(3, 2, 3),
785 /* 1000 */ V(1, 3, 2),
786 /* 1001 */ V(1, 3, 2),
787 /* 1010 */ V(1, 3, 2),
788 /* 1011 */ V(1, 3, 2),
789 /* 1100 */ V(3, 1, 2),
790 /* 1101 */ V(3, 1, 2),
791 /* 1110 */ V(3, 1, 2),
792 /* 1111 */ V(3, 1, 2),
793
794 /* 0011 ... */
795 /* 000 */ V(0, 3, 3), /* 64 */
796 /* 001 */ V(3, 0, 3),
797 /* 010 */ V(2, 2, 2),
798 /* 011 */ V(2, 2, 2),
799 /* 100 */ V(2, 1, 1),
800 /* 101 */ V(2, 1, 1),
801 /* 110 */ V(2, 1, 1),
802 /* 111 */ V(2, 1, 1),
803
804 /* 0101 ... */
805 /* 0 */ V(0, 2, 1), /* 72 */
806 /* 1 */ V(2, 0, 1),
807
808 /* 0000 0000 ... */
809 /* 00 */ V(7, 7, 2), /* 74 */
810 /* 01 */ V(6, 7, 2),
811 /* 10 */ V(7, 6, 2),
812 /* 11 */ V(7, 5, 2),
813
814 /* 0000 0001 ... */
815 /* 000 */ V(6, 6, 2), /* 78 */
816 /* 001 */ V(6, 6, 2),
817 /* 010 */ V(4, 7, 2),
818 /* 011 */ V(4, 7, 2),
819 /* 100 */ V(7, 4, 2),
820 /* 101 */ V(7, 4, 2),
821 /* 110 */ V(5, 7, 3),
822 /* 111 */ V(5, 5, 3),
823
824 /* 0000 0010 ... */
825 /* 00 */ V(5, 6, 2), /* 86 */
826 /* 01 */ V(6, 5, 2),
827 /* 10 */ V(3, 7, 1),
828 /* 11 */ V(3, 7, 1),
829
830 /* 0000 0011 ... */
831 /* 0 */ V(7, 3, 1), /* 90 */
832 /* 1 */ V(4, 6, 1),
833
834 /* 0000 0100 ... */
835 /* 00 */ V(4, 5, 2), /* 92 */
836 /* 01 */ V(5, 4, 2),
837 /* 10 */ V(3, 5, 2),
838 /* 11 */ V(5, 3, 2),
839
840 /* 0000 0111 ... */
841 /* 0 */ V(6, 4, 1), /* 96 */
842 /* 1 */ V(0, 7, 1),
843
844 /* 0000 1111 ... */
845 /* 0 */ V(4, 4, 1), /* 98 */
846 /* 1 */ V(2, 5, 1),
847
848 /* 0001 0000 ... */
849 /* 0 */ V(5, 2, 1), /* 100 */
850 /* 1 */ V(0, 5, 1),
851
852 /* 0001 1101 ... */
853 /* 0 */ V(4, 3, 1), /* 102 */
854 /* 1 */ V(3, 3, 1)
855};
856
857static
858union huffpair const hufftab12[] = {
859 /* 0000 */ PTR(16, 4),
860 /* 0001 */ PTR(32, 4),
861 /* 0010 */ PTR(48, 4),
862 /* 0011 */ PTR(64, 2),
863 /* 0100 */ PTR(68, 3),
864 /* 0101 */ PTR(76, 1),
865 /* 0110 */ V(1, 2, 4),
866 /* 0111 */ V(2, 1, 4),
867 /* 1000 */ PTR(78, 1),
868 /* 1001 */ V(0, 0, 4),
869 /* 1010 */ V(1, 1, 3),
870 /* 1011 */ V(1, 1, 3),
871 /* 1100 */ V(0, 1, 3),
872 /* 1101 */ V(0, 1, 3),
873 /* 1110 */ V(1, 0, 3),
874 /* 1111 */ V(1, 0, 3),
875
876 /* 0000 ... */
877 /* 0000 */ PTR(80, 2), /* 16 */
878 /* 0001 */ PTR(84, 1),
879 /* 0010 */ PTR(86, 1),
880 /* 0011 */ PTR(88, 1),
881 /* 0100 */ V(5, 6, 4),
882 /* 0101 */ V(3, 7, 4),
883 /* 0110 */ PTR(90, 1),
884 /* 0111 */ V(2, 7, 4),
885 /* 1000 */ V(7, 2, 4),
886 /* 1001 */ V(4, 6, 4),
887 /* 1010 */ V(6, 4, 4),
888 /* 1011 */ V(1, 7, 4),
889 /* 1100 */ V(7, 1, 4),
890 /* 1101 */ PTR(92, 1),
891 /* 1110 */ V(3, 6, 4),
892 /* 1111 */ V(6, 3, 4),
893
894 /* 0001 ... */
895 /* 0000 */ V(4, 5, 4), /* 32 */
896 /* 0001 */ V(5, 4, 4),
897 /* 0010 */ V(4, 4, 4),
898 /* 0011 */ PTR(94, 1),
899 /* 0100 */ V(2, 6, 3),
900 /* 0101 */ V(2, 6, 3),
901 /* 0110 */ V(6, 2, 3),
902 /* 0111 */ V(6, 2, 3),
903 /* 1000 */ V(6, 1, 3),
904 /* 1001 */ V(6, 1, 3),
905 /* 1010 */ V(1, 6, 4),
906 /* 1011 */ V(6, 0, 4),
907 /* 1100 */ V(3, 5, 4),
908 /* 1101 */ V(5, 3, 4),
909 /* 1110 */ V(2, 5, 4),
910 /* 1111 */ V(5, 2, 4),
911
912 /* 0010 ... */
913 /* 0000 */ V(1, 5, 3), /* 48 */
914 /* 0001 */ V(1, 5, 3),
915 /* 0010 */ V(5, 1, 3),
916 /* 0011 */ V(5, 1, 3),
917 /* 0100 */ V(3, 4, 3),
918 /* 0101 */ V(3, 4, 3),
919 /* 0110 */ V(4, 3, 3),
920 /* 0111 */ V(4, 3, 3),
921 /* 1000 */ V(5, 0, 4),
922 /* 1001 */ V(0, 4, 4),
923 /* 1010 */ V(2, 4, 3),
924 /* 1011 */ V(2, 4, 3),
925 /* 1100 */ V(4, 2, 3),
926 /* 1101 */ V(4, 2, 3),
927 /* 1110 */ V(1, 4, 3),
928 /* 1111 */ V(1, 4, 3),
929
930 /* 0011 ... */
931 /* 00 */ V(3, 3, 2), /* 64 */
932 /* 01 */ V(4, 1, 2),
933 /* 10 */ V(2, 3, 2),
934 /* 11 */ V(3, 2, 2),
935
936 /* 0100 ... */
937 /* 000 */ V(4, 0, 3), /* 68 */
938 /* 001 */ V(0, 3, 3),
939 /* 010 */ V(3, 0, 2),
940 /* 011 */ V(3, 0, 2),
941 /* 100 */ V(1, 3, 1),
942 /* 101 */ V(1, 3, 1),
943 /* 110 */ V(1, 3, 1),
944 /* 111 */ V(1, 3, 1),
945
946 /* 0101 ... */
947 /* 0 */ V(3, 1, 1), /* 76 */
948 /* 1 */ V(2, 2, 1),
949
950 /* 1000 ... */
951 /* 0 */ V(0, 2, 1), /* 78 */
952 /* 1 */ V(2, 0, 1),
953
954 /* 0000 0000 ... */
955 /* 00 */ V(7, 7, 2), /* 80 */
956 /* 01 */ V(6, 7, 2),
957 /* 10 */ V(7, 6, 1),
958 /* 11 */ V(7, 6, 1),
959
960 /* 0000 0001 ... */
961 /* 0 */ V(5, 7, 1), /* 84 */
962 /* 1 */ V(7, 5, 1),
963
964 /* 0000 0010 ... */
965 /* 0 */ V(6, 6, 1), /* 86 */
966 /* 1 */ V(4, 7, 1),
967
968 /* 0000 0011 ... */
969 /* 0 */ V(7, 4, 1), /* 88 */
970 /* 1 */ V(6, 5, 1),
971
972 /* 0000 0110 ... */
973 /* 0 */ V(7, 3, 1), /* 90 */
974 /* 1 */ V(5, 5, 1),
975
976 /* 0000 1101 ... */
977 /* 0 */ V(0, 7, 1), /* 92 */
978 /* 1 */ V(7, 0, 1),
979
980 /* 0001 0011 ... */
981 /* 0 */ V(0, 6, 1), /* 94 */
982 /* 1 */ V(0, 5, 1)
983};
984
985static
986union huffpair const hufftab13[] = {
987 /* 0000 */ PTR(16, 4),
988 /* 0001 */ PTR(32, 4),
989 /* 0010 */ PTR(48, 4),
990 /* 0011 */ PTR(64, 2),
991 /* 0100 */ V(1, 1, 4),
992 /* 0101 */ V(0, 1, 4),
993 /* 0110 */ V(1, 0, 3),
994 /* 0111 */ V(1, 0, 3),
995 /* 1000 */ V(0, 0, 1),
996 /* 1001 */ V(0, 0, 1),
997 /* 1010 */ V(0, 0, 1),
998 /* 1011 */ V(0, 0, 1),
999 /* 1100 */ V(0, 0, 1),
1000 /* 1101 */ V(0, 0, 1),
1001 /* 1110 */ V(0, 0, 1),
1002 /* 1111 */ V(0, 0, 1),
1003
1004 /* 0000 ... */
1005 /* 0000 */ PTR(68, 4), /* 16 */
1006 /* 0001 */ PTR(84, 4),
1007 /* 0010 */ PTR(100, 4),
1008 /* 0011 */ PTR(116, 4),
1009 /* 0100 */ PTR(132, 4),
1010 /* 0101 */ PTR(148, 4),
1011 /* 0110 */ PTR(164, 3),
1012 /* 0111 */ PTR(172, 3),
1013 /* 1000 */ PTR(180, 3),
1014 /* 1001 */ PTR(188, 3),
1015 /* 1010 */ PTR(196, 3),
1016 /* 1011 */ PTR(204, 3),
1017 /* 1100 */ PTR(212, 1),
1018 /* 1101 */ PTR(214, 2),
1019 /* 1110 */ PTR(218, 3),
1020 /* 1111 */ PTR(226, 1),
1021
1022 /* 0001 ... */
1023 /* 0000 */ PTR(228, 2), /* 32 */
1024 /* 0001 */ PTR(232, 2),
1025 /* 0010 */ PTR(236, 2),
1026 /* 0011 */ PTR(240, 2),
1027 /* 0100 */ V(8, 1, 4),
1028 /* 0101 */ PTR(244, 1),
1029 /* 0110 */ PTR(246, 1),
1030 /* 0111 */ PTR(248, 1),
1031 /* 1000 */ PTR(250, 2),
1032 /* 1001 */ PTR(254, 1),
1033 /* 1010 */ V(1, 5, 4),
1034 /* 1011 */ V(5, 1, 4),
1035 /* 1100 */ PTR(256, 1),
1036 /* 1101 */ PTR(258, 1),
1037 /* 1110 */ PTR(260, 1),
1038 /* 1111 */ V(1, 4, 4),
1039
1040 /* 0010 ... */
1041 /* 0000 */ V(4, 1, 3), /* 48 */
1042 /* 0001 */ V(4, 1, 3),
1043 /* 0010 */ V(0, 4, 4),
1044 /* 0011 */ V(4, 0, 4),
1045 /* 0100 */ V(2, 3, 4),
1046 /* 0101 */ V(3, 2, 4),
1047 /* 0110 */ V(1, 3, 3),
1048 /* 0111 */ V(1, 3, 3),
1049 /* 1000 */ V(3, 1, 3),
1050 /* 1001 */ V(3, 1, 3),
1051 /* 1010 */ V(0, 3, 3),
1052 /* 1011 */ V(0, 3, 3),
1053 /* 1100 */ V(3, 0, 3),
1054 /* 1101 */ V(3, 0, 3),
1055 /* 1110 */ V(2, 2, 3),
1056 /* 1111 */ V(2, 2, 3),
1057
1058 /* 0011 ... */
1059 /* 00 */ V(1, 2, 2), /* 64 */
1060 /* 01 */ V(2, 1, 2),
1061 /* 10 */ V(0, 2, 2),
1062 /* 11 */ V(2, 0, 2),
1063
1064 /* 0000 0000 ... */
1065 /* 0000 */ PTR(262, 4), /* 68 */
1066 /* 0001 */ PTR(278, 4),
1067 /* 0010 */ PTR(294, 4),
1068 /* 0011 */ PTR(310, 3),
1069 /* 0100 */ PTR(318, 2),
1070 /* 0101 */ PTR(322, 2),
1071 /* 0110 */ PTR(326, 3),
1072 /* 0111 */ PTR(334, 2),
1073 /* 1000 */ PTR(338, 1),
1074 /* 1001 */ PTR(340, 2),
1075 /* 1010 */ PTR(344, 2),
1076 /* 1011 */ PTR(348, 2),
1077 /* 1100 */ PTR(352, 2),
1078 /* 1101 */ PTR(356, 2),
1079 /* 1110 */ V(1, 15, 4),
1080 /* 1111 */ V(15, 1, 4),
1081
1082 /* 0000 0001 ... */
1083 /* 0000 */ V(15, 0, 4), /* 84 */
1084 /* 0001 */ PTR(360, 1),
1085 /* 0010 */ PTR(362, 1),
1086 /* 0011 */ PTR(364, 1),
1087 /* 0100 */ V(14, 2, 4),
1088 /* 0101 */ PTR(366, 1),
1089 /* 0110 */ V(1, 14, 4),
1090 /* 0111 */ V(14, 1, 4),
1091 /* 1000 */ PTR(368, 1),
1092 /* 1001 */ PTR(370, 1),
1093 /* 1010 */ PTR(372, 1),
1094 /* 1011 */ PTR(374, 1),
1095 /* 1100 */ PTR(376, 1),
1096 /* 1101 */ PTR(378, 1),
1097 /* 1110 */ V(12, 6, 4),
1098 /* 1111 */ V(3, 13, 4),
1099
1100 /* 0000 0010 ... */
1101 /* 0000 */ PTR(380, 1), /* 100 */
1102 /* 0001 */ V(2, 13, 4),
1103 /* 0010 */ V(13, 2, 4),
1104 /* 0011 */ V(1, 13, 4),
1105 /* 0100 */ V(11, 7, 4),
1106 /* 0101 */ PTR(382, 1),
1107 /* 0110 */ PTR(384, 1),
1108 /* 0111 */ V(12, 3, 4),
1109 /* 1000 */ PTR(386, 1),
1110 /* 1001 */ V(4, 11, 4),
1111 /* 1010 */ V(13, 1, 3),
1112 /* 1011 */ V(13, 1, 3),
1113 /* 1100 */ V(0, 13, 4),
1114 /* 1101 */ V(13, 0, 4),
1115 /* 1110 */ V(8, 10, 4),
1116 /* 1111 */ V(10, 8, 4),
1117
1118 /* 0000 0011 ... */
1119 /* 0000 */ V(4, 12, 4), /* 116 */
1120 /* 0001 */ V(12, 4, 4),
1121 /* 0010 */ V(6, 11, 4),
1122 /* 0011 */ V(11, 6, 4),
1123 /* 0100 */ V(3, 12, 3),
1124 /* 0101 */ V(3, 12, 3),
1125 /* 0110 */ V(2, 12, 3),
1126 /* 0111 */ V(2, 12, 3),
1127 /* 1000 */ V(12, 2, 3),
1128 /* 1001 */ V(12, 2, 3),
1129 /* 1010 */ V(5, 11, 3),
1130 /* 1011 */ V(5, 11, 3),
1131 /* 1100 */ V(11, 5, 4),
1132 /* 1101 */ V(8, 9, 4),
1133 /* 1110 */ V(1, 12, 3),
1134 /* 1111 */ V(1, 12, 3),
1135
1136 /* 0000 0100 ... */
1137 /* 0000 */ V(12, 1, 3), /* 132 */
1138 /* 0001 */ V(12, 1, 3),
1139 /* 0010 */ V(9, 8, 4),
1140 /* 0011 */ V(0, 12, 4),
1141 /* 0100 */ V(12, 0, 3),
1142 /* 0101 */ V(12, 0, 3),
1143 /* 0110 */ V(11, 4, 4),
1144 /* 0111 */ V(6, 10, 4),
1145 /* 1000 */ V(10, 6, 4),
1146 /* 1001 */ V(7, 9, 4),
1147 /* 1010 */ V(3, 11, 3),
1148 /* 1011 */ V(3, 11, 3),
1149 /* 1100 */ V(11, 3, 3),
1150 /* 1101 */ V(11, 3, 3),
1151 /* 1110 */ V(8, 8, 4),
1152 /* 1111 */ V(5, 10, 4),
1153
1154 /* 0000 0101 ... */
1155 /* 0000 */ V(2, 11, 3), /* 148 */
1156 /* 0001 */ V(2, 11, 3),
1157 /* 0010 */ V(10, 5, 4),
1158 /* 0011 */ V(6, 9, 4),
1159 /* 0100 */ V(10, 4, 3),
1160 /* 0101 */ V(10, 4, 3),
1161 /* 0110 */ V(7, 8, 4),
1162 /* 0111 */ V(8, 7, 4),
1163 /* 1000 */ V(9, 4, 3),
1164 /* 1001 */ V(9, 4, 3),
1165 /* 1010 */ V(7, 7, 4),
1166 /* 1011 */ V(7, 6, 4),
1167 /* 1100 */ V(11, 2, 2),
1168 /* 1101 */ V(11, 2, 2),
1169 /* 1110 */ V(11, 2, 2),
1170 /* 1111 */ V(11, 2, 2),
1171
1172 /* 0000 0110 ... */
1173 /* 000 */ V(1, 11, 2), /* 164 */
1174 /* 001 */ V(1, 11, 2),
1175 /* 010 */ V(11, 1, 2),
1176 /* 011 */ V(11, 1, 2),
1177 /* 100 */ V(0, 11, 3),
1178 /* 101 */ V(11, 0, 3),
1179 /* 110 */ V(9, 6, 3),
1180 /* 111 */ V(4, 10, 3),
1181
1182 /* 0000 0111 ... */
1183 /* 000 */ V(3, 10, 3), /* 172 */
1184 /* 001 */ V(10, 3, 3),
1185 /* 010 */ V(5, 9, 3),
1186 /* 011 */ V(9, 5, 3),
1187 /* 100 */ V(2, 10, 2),
1188 /* 101 */ V(2, 10, 2),
1189 /* 110 */ V(10, 2, 2),
1190 /* 111 */ V(10, 2, 2),
1191
1192 /* 0000 1000 ... */
1193 /* 000 */ V(1, 10, 2), /* 180 */
1194 /* 001 */ V(1, 10, 2),
1195 /* 010 */ V(10, 1, 2),
1196 /* 011 */ V(10, 1, 2),
1197 /* 100 */ V(0, 10, 3),
1198 /* 101 */ V(6, 8, 3),
1199 /* 110 */ V(10, 0, 2),
1200 /* 111 */ V(10, 0, 2),
1201
1202 /* 0000 1001 ... */
1203 /* 000 */ V(8, 6, 3), /* 188 */
1204 /* 001 */ V(4, 9, 3),
1205 /* 010 */ V(9, 3, 2),
1206 /* 011 */ V(9, 3, 2),
1207 /* 100 */ V(3, 9, 3),
1208 /* 101 */ V(5, 8, 3),
1209 /* 110 */ V(8, 5, 3),
1210 /* 111 */ V(6, 7, 3),
1211
1212 /* 0000 1010 ... */
1213 /* 000 */ V(2, 9, 2), /* 196 */
1214 /* 001 */ V(2, 9, 2),
1215 /* 010 */ V(9, 2, 2),
1216 /* 011 */ V(9, 2, 2),
1217 /* 100 */ V(5, 7, 3),
1218 /* 101 */ V(7, 5, 3),
1219 /* 110 */ V(3, 8, 2),
1220 /* 111 */ V(3, 8, 2),
1221
1222 /* 0000 1011 ... */
1223 /* 000 */ V(8, 3, 2), /* 204 */
1224 /* 001 */ V(8, 3, 2),
1225 /* 010 */ V(6, 6, 3),
1226 /* 011 */ V(4, 7, 3),
1227 /* 100 */ V(7, 4, 3),
1228 /* 101 */ V(5, 6, 3),
1229 /* 110 */ V(6, 5, 3),
1230 /* 111 */ V(7, 3, 3),
1231
1232 /* 0000 1100 ... */
1233 /* 0 */ V(1, 9, 1), /* 212 */
1234 /* 1 */ V(9, 1, 1),
1235
1236 /* 0000 1101 ... */
1237 /* 00 */ V(0, 9, 2), /* 214 */
1238 /* 01 */ V(9, 0, 2),
1239 /* 10 */ V(4, 8, 2),
1240 /* 11 */ V(8, 4, 2),
1241
1242 /* 0000 1110 ... */
1243 /* 000 */ V(7, 2, 2), /* 218 */
1244 /* 001 */ V(7, 2, 2),
1245 /* 010 */ V(4, 6, 3),
1246 /* 011 */ V(6, 4, 3),
1247 /* 100 */ V(2, 8, 1),
1248 /* 101 */ V(2, 8, 1),
1249 /* 110 */ V(2, 8, 1),
1250 /* 111 */ V(2, 8, 1),
1251
1252 /* 0000 1111 ... */
1253 /* 0 */ V(8, 2, 1), /* 226 */
1254 /* 1 */ V(1, 8, 1),
1255
1256 /* 0001 0000 ... */
1257 /* 00 */ V(3, 7, 2), /* 228 */
1258 /* 01 */ V(2, 7, 2),
1259 /* 10 */ V(1, 7, 1),
1260 /* 11 */ V(1, 7, 1),
1261
1262 /* 0001 0001 ... */
1263 /* 00 */ V(7, 1, 1), /* 232 */
1264 /* 01 */ V(7, 1, 1),
1265 /* 10 */ V(5, 5, 2),
1266 /* 11 */ V(0, 7, 2),
1267
1268 /* 0001 0010 ... */
1269 /* 00 */ V(7, 0, 2), /* 236 */
1270 /* 01 */ V(3, 6, 2),
1271 /* 10 */ V(6, 3, 2),
1272 /* 11 */ V(4, 5, 2),
1273
1274 /* 0001 0011 ... */
1275 /* 00 */ V(5, 4, 2), /* 240 */
1276 /* 01 */ V(2, 6, 2),
1277 /* 10 */ V(6, 2, 2),
1278 /* 11 */ V(3, 5, 2),
1279
1280 /* 0001 0101 ... */
1281 /* 0 */ V(0, 8, 1), /* 244 */
1282 /* 1 */ V(8, 0, 1),
1283
1284 /* 0001 0110 ... */
1285 /* 0 */ V(1, 6, 1), /* 246 */
1286 /* 1 */ V(6, 1, 1),
1287
1288 /* 0001 0111 ... */
1289 /* 0 */ V(0, 6, 1), /* 248 */
1290 /* 1 */ V(6, 0, 1),
1291
1292 /* 0001 1000 ... */
1293 /* 00 */ V(5, 3, 2), /* 250 */
1294 /* 01 */ V(4, 4, 2),
1295 /* 10 */ V(2, 5, 1),
1296 /* 11 */ V(2, 5, 1),
1297
1298 /* 0001 1001 ... */
1299 /* 0 */ V(5, 2, 1), /* 254 */
1300 /* 1 */ V(0, 5, 1),
1301
1302 /* 0001 1100 ... */
1303 /* 0 */ V(3, 4, 1), /* 256 */
1304 /* 1 */ V(4, 3, 1),
1305
1306 /* 0001 1101 ... */
1307 /* 0 */ V(5, 0, 1), /* 258 */
1308 /* 1 */ V(2, 4, 1),
1309
1310 /* 0001 1110 ... */
1311 /* 0 */ V(4, 2, 1), /* 260 */
1312 /* 1 */ V(3, 3, 1),
1313
1314 /* 0000 0000 0000 ... */
1315 /* 0000 */ PTR(388, 3), /* 262 */
1316 /* 0001 */ V(15, 15, 4),
1317 /* 0010 */ V(14, 15, 4),
1318 /* 0011 */ V(13, 15, 4),
1319 /* 0100 */ V(14, 14, 4),
1320 /* 0101 */ V(12, 15, 4),
1321 /* 0110 */ V(13, 14, 4),
1322 /* 0111 */ V(11, 15, 4),
1323 /* 1000 */ V(15, 11, 4),
1324 /* 1001 */ V(12, 14, 4),
1325 /* 1010 */ V(13, 12, 4),
1326 /* 1011 */ PTR(396, 1),
1327 /* 1100 */ V(14, 12, 3),
1328 /* 1101 */ V(14, 12, 3),
1329 /* 1110 */ V(13, 13, 3),
1330 /* 1111 */ V(13, 13, 3),
1331
1332 /* 0000 0000 0001 ... */
1333 /* 0000 */ V(15, 10, 4), /* 278 */
1334 /* 0001 */ V(12, 13, 4),
1335 /* 0010 */ V(11, 14, 3),
1336 /* 0011 */ V(11, 14, 3),
1337 /* 0100 */ V(14, 11, 3),
1338 /* 0101 */ V(14, 11, 3),
1339 /* 0110 */ V(9, 15, 3),
1340 /* 0111 */ V(9, 15, 3),
1341 /* 1000 */ V(15, 9, 3),
1342 /* 1001 */ V(15, 9, 3),
1343 /* 1010 */ V(14, 10, 3),
1344 /* 1011 */ V(14, 10, 3),
1345 /* 1100 */ V(11, 13, 3),
1346 /* 1101 */ V(11, 13, 3),
1347 /* 1110 */ V(13, 11, 3),
1348 /* 1111 */ V(13, 11, 3),
1349
1350 /* 0000 0000 0010 ... */
1351 /* 0000 */ V(8, 15, 3), /* 294 */
1352 /* 0001 */ V(8, 15, 3),
1353 /* 0010 */ V(15, 8, 3),
1354 /* 0011 */ V(15, 8, 3),
1355 /* 0100 */ V(12, 12, 3),
1356 /* 0101 */ V(12, 12, 3),
1357 /* 0110 */ V(10, 14, 4),
1358 /* 0111 */ V(9, 14, 4),
1359 /* 1000 */ V(8, 14, 3),
1360 /* 1001 */ V(8, 14, 3),
1361 /* 1010 */ V(7, 15, 4),
1362 /* 1011 */ V(7, 14, 4),
1363 /* 1100 */ V(15, 7, 2),
1364 /* 1101 */ V(15, 7, 2),
1365 /* 1110 */ V(15, 7, 2),
1366 /* 1111 */ V(15, 7, 2),
1367
1368 /* 0000 0000 0011 ... */
1369 /* 000 */ V(13, 10, 2), /* 310 */
1370 /* 001 */ V(13, 10, 2),
1371 /* 010 */ V(10, 13, 3),
1372 /* 011 */ V(11, 12, 3),
1373 /* 100 */ V(12, 11, 3),
1374 /* 101 */ V(15, 6, 3),
1375 /* 110 */ V(6, 15, 2),
1376 /* 111 */ V(6, 15, 2),
1377
1378 /* 0000 0000 0100 ... */
1379 /* 00 */ V(14, 8, 2), /* 318 */
1380 /* 01 */ V(5, 15, 2),
1381 /* 10 */ V(9, 13, 2),
1382 /* 11 */ V(13, 9, 2),
1383
1384 /* 0000 0000 0101 ... */
1385 /* 00 */ V(15, 5, 2), /* 322 */
1386 /* 01 */ V(14, 7, 2),
1387 /* 10 */ V(10, 12, 2),
1388 /* 11 */ V(11, 11, 2),
1389
1390 /* 0000 0000 0110 ... */
1391 /* 000 */ V(4, 15, 2), /* 326 */
1392 /* 001 */ V(4, 15, 2),
1393 /* 010 */ V(15, 4, 2),
1394 /* 011 */ V(15, 4, 2),
1395 /* 100 */ V(12, 10, 3),
1396 /* 101 */ V(14, 6, 3),
1397 /* 110 */ V(15, 3, 2),
1398 /* 111 */ V(15, 3, 2),
1399
1400 /* 0000 0000 0111 ... */
1401 /* 00 */ V(3, 15, 1), /* 334 */
1402 /* 01 */ V(3, 15, 1),
1403 /* 10 */ V(8, 13, 2),
1404 /* 11 */ V(13, 8, 2),
1405
1406 /* 0000 0000 1000 ... */
1407 /* 0 */ V(2, 15, 1), /* 338 */
1408 /* 1 */ V(15, 2, 1),
1409
1410 /* 0000 0000 1001 ... */
1411 /* 00 */ V(6, 14, 2), /* 340 */
1412 /* 01 */ V(9, 12, 2),
1413 /* 10 */ V(0, 15, 1),
1414 /* 11 */ V(0, 15, 1),
1415
1416 /* 0000 0000 1010 ... */
1417 /* 00 */ V(12, 9, 2), /* 344 */
1418 /* 01 */ V(5, 14, 2),
1419 /* 10 */ V(10, 11, 1),
1420 /* 11 */ V(10, 11, 1),
1421
1422 /* 0000 0000 1011 ... */
1423 /* 00 */ V(7, 13, 2), /* 348 */
1424 /* 01 */ V(13, 7, 2),
1425 /* 10 */ V(4, 14, 1),
1426 /* 11 */ V(4, 14, 1),
1427
1428 /* 0000 0000 1100 ... */
1429 /* 00 */ V(12, 8, 2), /* 352 */
1430 /* 01 */ V(13, 6, 2),
1431 /* 10 */ V(3, 14, 1),
1432 /* 11 */ V(3, 14, 1),
1433
1434 /* 0000 0000 1101 ... */
1435 /* 00 */ V(11, 9, 1), /* 356 */
1436 /* 01 */ V(11, 9, 1),
1437 /* 10 */ V(9, 11, 2),
1438 /* 11 */ V(10, 10, 2),
1439
1440 /* 0000 0001 0001 ... */
1441 /* 0 */ V(11, 10, 1), /* 360 */
1442 /* 1 */ V(14, 5, 1),
1443
1444 /* 0000 0001 0010 ... */
1445 /* 0 */ V(14, 4, 1), /* 362 */
1446 /* 1 */ V(8, 12, 1),
1447
1448 /* 0000 0001 0011 ... */
1449 /* 0 */ V(6, 13, 1), /* 364 */
1450 /* 1 */ V(14, 3, 1),
1451
1452 /* 0000 0001 0101 ... */
1453 /* 0 */ V(2, 14, 1), /* 366 */
1454 /* 1 */ V(0, 14, 1),
1455
1456 /* 0000 0001 1000 ... */
1457 /* 0 */ V(14, 0, 1), /* 368 */
1458 /* 1 */ V(5, 13, 1),
1459
1460 /* 0000 0001 1001 ... */
1461 /* 0 */ V(13, 5, 1), /* 370 */
1462 /* 1 */ V(7, 12, 1),
1463
1464 /* 0000 0001 1010 ... */
1465 /* 0 */ V(12, 7, 1), /* 372 */
1466 /* 1 */ V(4, 13, 1),
1467
1468 /* 0000 0001 1011 ... */
1469 /* 0 */ V(8, 11, 1), /* 374 */
1470 /* 1 */ V(11, 8, 1),
1471
1472 /* 0000 0001 1100 ... */
1473 /* 0 */ V(13, 4, 1), /* 376 */
1474 /* 1 */ V(9, 10, 1),
1475
1476 /* 0000 0001 1101 ... */
1477 /* 0 */ V(10, 9, 1), /* 378 */
1478 /* 1 */ V(6, 12, 1),
1479
1480 /* 0000 0010 0000 ... */
1481 /* 0 */ V(13, 3, 1), /* 380 */
1482 /* 1 */ V(7, 11, 1),
1483
1484 /* 0000 0010 0101 ... */
1485 /* 0 */ V(5, 12, 1), /* 382 */
1486 /* 1 */ V(12, 5, 1),
1487
1488 /* 0000 0010 0110 ... */
1489 /* 0 */ V(9, 9, 1), /* 384 */
1490 /* 1 */ V(7, 10, 1),
1491
1492 /* 0000 0010 1000 ... */
1493 /* 0 */ V(10, 7, 1), /* 386 */
1494 /* 1 */ V(9, 7, 1),
1495
1496 /* 0000 0000 0000 0000 ... */
1497 /* 000 */ V(15, 14, 3), /* 388 */
1498 /* 001 */ V(15, 12, 3),
1499 /* 010 */ V(15, 13, 2),
1500 /* 011 */ V(15, 13, 2),
1501 /* 100 */ V(14, 13, 1),
1502 /* 101 */ V(14, 13, 1),
1503 /* 110 */ V(14, 13, 1),
1504 /* 111 */ V(14, 13, 1),
1505
1506 /* 0000 0000 0000 1011 ... */
1507 /* 0 */ V(10, 15, 1), /* 396 */
1508 /* 1 */ V(14, 9, 1)
1509};
1510
1511static
1512union huffpair const hufftab15[] = {
1513 /* 0000 */ PTR(16, 4),
1514 /* 0001 */ PTR(32, 4),
1515 /* 0010 */ PTR(48, 4),
1516 /* 0011 */ PTR(64, 4),
1517 /* 0100 */ PTR(80, 4),
1518 /* 0101 */ PTR(96, 3),
1519 /* 0110 */ PTR(104, 3),
1520 /* 0111 */ PTR(112, 2),
1521 /* 1000 */ PTR(116, 1),
1522 /* 1001 */ PTR(118, 1),
1523 /* 1010 */ V(1, 1, 3),
1524 /* 1011 */ V(1, 1, 3),
1525 /* 1100 */ V(0, 1, 4),
1526 /* 1101 */ V(1, 0, 4),
1527 /* 1110 */ V(0, 0, 3),
1528 /* 1111 */ V(0, 0, 3),
1529
1530 /* 0000 ... */
1531 /* 0000 */ PTR(120, 4), /* 16 */
1532 /* 0001 */ PTR(136, 4),
1533 /* 0010 */ PTR(152, 4),
1534 /* 0011 */ PTR(168, 4),
1535 /* 0100 */ PTR(184, 4),
1536 /* 0101 */ PTR(200, 3),
1537 /* 0110 */ PTR(208, 3),
1538 /* 0111 */ PTR(216, 4),
1539 /* 1000 */ PTR(232, 3),
1540 /* 1001 */ PTR(240, 3),
1541 /* 1010 */ PTR(248, 3),
1542 /* 1011 */ PTR(256, 3),
1543 /* 1100 */ PTR(264, 2),
1544 /* 1101 */ PTR(268, 3),
1545 /* 1110 */ PTR(276, 3),
1546 /* 1111 */ PTR(284, 2),
1547
1548 /* 0001 ... */
1549 /* 0000 */ PTR(288, 2), /* 32 */
1550 /* 0001 */ PTR(292, 2),
1551 /* 0010 */ PTR(296, 2),
1552 /* 0011 */ PTR(300, 2),
1553 /* 0100 */ PTR(304, 2),
1554 /* 0101 */ PTR(308, 2),
1555 /* 0110 */ PTR(312, 2),
1556 /* 0111 */ PTR(316, 2),
1557 /* 1000 */ PTR(320, 1),
1558 /* 1001 */ PTR(322, 1),
1559 /* 1010 */ PTR(324, 1),
1560 /* 1011 */ PTR(326, 2),
1561 /* 1100 */ PTR(330, 1),
1562 /* 1101 */ PTR(332, 1),
1563 /* 1110 */ PTR(334, 2),
1564 /* 1111 */ PTR(338, 1),
1565
1566 /* 0010 ... */
1567 /* 0000 */ PTR(340, 1), /* 48 */
1568 /* 0001 */ PTR(342, 1),
1569 /* 0010 */ V(9, 1, 4),
1570 /* 0011 */ PTR(344, 1),
1571 /* 0100 */ PTR(346, 1),
1572 /* 0101 */ PTR(348, 1),
1573 /* 0110 */ PTR(350, 1),
1574 /* 0111 */ PTR(352, 1),
1575 /* 1000 */ V(2, 8, 4),
1576 /* 1001 */ V(8, 2, 4),
1577 /* 1010 */ V(1, 8, 4),
1578 /* 1011 */ V(8, 1, 4),
1579 /* 1100 */ PTR(354, 1),
1580 /* 1101 */ PTR(356, 1),
1581 /* 1110 */ PTR(358, 1),
1582 /* 1111 */ PTR(360, 1),
1583
1584 /* 0011 ... */
1585 /* 0000 */ V(2, 7, 4), /* 64 */
1586 /* 0001 */ V(7, 2, 4),
1587 /* 0010 */ V(6, 4, 4),
1588 /* 0011 */ V(1, 7, 4),
1589 /* 0100 */ V(5, 5, 4),
1590 /* 0101 */ V(7, 1, 4),
1591 /* 0110 */ PTR(362, 1),
1592 /* 0111 */ V(3, 6, 4),
1593 /* 1000 */ V(6, 3, 4),
1594 /* 1001 */ V(4, 5, 4),
1595 /* 1010 */ V(5, 4, 4),
1596 /* 1011 */ V(2, 6, 4),
1597 /* 1100 */ V(6, 2, 4),
1598 /* 1101 */ V(1, 6, 4),
1599 /* 1110 */ PTR(364, 1),
1600 /* 1111 */ V(3, 5, 4),
1601
1602 /* 0100 ... */
1603 /* 0000 */ V(6, 1, 3), /* 80 */
1604 /* 0001 */ V(6, 1, 3),
1605 /* 0010 */ V(5, 3, 4),
1606 /* 0011 */ V(4, 4, 4),
1607 /* 0100 */ V(2, 5, 3),
1608 /* 0101 */ V(2, 5, 3),
1609 /* 0110 */ V(5, 2, 3),
1610 /* 0111 */ V(5, 2, 3),
1611 /* 1000 */ V(1, 5, 3),
1612 /* 1001 */ V(1, 5, 3),
1613 /* 1010 */ V(5, 1, 3),
1614 /* 1011 */ V(5, 1, 3),
1615 /* 1100 */ V(0, 5, 4),
1616 /* 1101 */ V(5, 0, 4),
1617 /* 1110 */ V(3, 4, 3),
1618 /* 1111 */ V(3, 4, 3),
1619
1620 /* 0101 ... */
1621 /* 000 */ V(4, 3, 3), /* 96 */
1622 /* 001 */ V(2, 4, 3),
1623 /* 010 */ V(4, 2, 3),
1624 /* 011 */ V(3, 3, 3),
1625 /* 100 */ V(4, 1, 2),
1626 /* 101 */ V(4, 1, 2),
1627 /* 110 */ V(1, 4, 3),
1628 /* 111 */ V(0, 4, 3),
1629
1630 /* 0110 ... */
1631 /* 000 */ V(2, 3, 2), /* 104 */
1632 /* 001 */ V(2, 3, 2),
1633 /* 010 */ V(3, 2, 2),
1634 /* 011 */ V(3, 2, 2),
1635 /* 100 */ V(4, 0, 3),
1636 /* 101 */ V(0, 3, 3),
1637 /* 110 */ V(1, 3, 2),
1638 /* 111 */ V(1, 3, 2),
1639
1640 /* 0111 ... */
1641 /* 00 */ V(3, 1, 2), /* 112 */
1642 /* 01 */ V(3, 0, 2),
1643 /* 10 */ V(2, 2, 1),
1644 /* 11 */ V(2, 2, 1),
1645
1646 /* 1000 ... */
1647 /* 0 */ V(1, 2, 1), /* 116 */
1648 /* 1 */ V(2, 1, 1),
1649
1650 /* 1001 ... */
1651 /* 0 */ V(0, 2, 1), /* 118 */
1652 /* 1 */ V(2, 0, 1),
1653
1654 /* 0000 0000 ... */
1655 /* 0000 */ PTR(366, 1), /* 120 */
1656 /* 0001 */ PTR(368, 1),
1657 /* 0010 */ V(14, 14, 4),
1658 /* 0011 */ PTR(370, 1),
1659 /* 0100 */ PTR(372, 1),
1660 /* 0101 */ PTR(374, 1),
1661 /* 0110 */ V(15, 11, 4),
1662 /* 0111 */ PTR(376, 1),
1663 /* 1000 */ V(13, 13, 4),
1664 /* 1001 */ V(10, 15, 4),
1665 /* 1010 */ V(15, 10, 4),
1666 /* 1011 */ V(11, 14, 4),
1667 /* 1100 */ V(14, 11, 4),
1668 /* 1101 */ V(12, 13, 4),
1669 /* 1110 */ V(13, 12, 4),
1670 /* 1111 */ V(9, 15, 4),
1671
1672 /* 0000 0001 ... */
1673 /* 0000 */ V(15, 9, 4), /* 136 */
1674 /* 0001 */ V(14, 10, 4),
1675 /* 0010 */ V(11, 13, 4),
1676 /* 0011 */ V(13, 11, 4),
1677 /* 0100 */ V(8, 15, 4),
1678 /* 0101 */ V(15, 8, 4),
1679 /* 0110 */ V(12, 12, 4),
1680 /* 0111 */ V(9, 14, 4),
1681 /* 1000 */ V(14, 9, 4),
1682 /* 1001 */ V(7, 15, 4),
1683 /* 1010 */ V(15, 7, 4),
1684 /* 1011 */ V(10, 13, 4),
1685 /* 1100 */ V(13, 10, 4),
1686 /* 1101 */ V(11, 12, 4),
1687 /* 1110 */ V(6, 15, 4),
1688 /* 1111 */ PTR(378, 1),
1689
1690 /* 0000 0010 ... */
1691 /* 0000 */ V(12, 11, 3), /* 152 */
1692 /* 0001 */ V(12, 11, 3),
1693 /* 0010 */ V(15, 6, 3),
1694 /* 0011 */ V(15, 6, 3),
1695 /* 0100 */ V(8, 14, 4),
1696 /* 0101 */ V(14, 8, 4),
1697 /* 0110 */ V(5, 15, 4),
1698 /* 0111 */ V(9, 13, 4),
1699 /* 1000 */ V(15, 5, 3),
1700 /* 1001 */ V(15, 5, 3),
1701 /* 1010 */ V(7, 14, 3),
1702 /* 1011 */ V(7, 14, 3),
1703 /* 1100 */ V(14, 7, 3),
1704 /* 1101 */ V(14, 7, 3),
1705 /* 1110 */ V(10, 12, 3),
1706 /* 1111 */ V(10, 12, 3),
1707
1708 /* 0000 0011 ... */
1709 /* 0000 */ V(12, 10, 3), /* 168 */
1710 /* 0001 */ V(12, 10, 3),
1711 /* 0010 */ V(11, 11, 3),
1712 /* 0011 */ V(11, 11, 3),
1713 /* 0100 */ V(13, 9, 4),
1714 /* 0101 */ V(8, 13, 4),
1715 /* 0110 */ V(4, 15, 3),
1716 /* 0111 */ V(4, 15, 3),
1717 /* 1000 */ V(15, 4, 3),
1718 /* 1001 */ V(15, 4, 3),
1719 /* 1010 */ V(3, 15, 3),
1720 /* 1011 */ V(3, 15, 3),
1721 /* 1100 */ V(15, 3, 3),
1722 /* 1101 */ V(15, 3, 3),
1723 /* 1110 */ V(13, 8, 3),
1724 /* 1111 */ V(13, 8, 3),
1725
1726 /* 0000 0100 ... */
1727 /* 0000 */ V(14, 6, 3), /* 184 */
1728 /* 0001 */ V(14, 6, 3),
1729 /* 0010 */ V(2, 15, 3),
1730 /* 0011 */ V(2, 15, 3),
1731 /* 0100 */ V(15, 2, 3),
1732 /* 0101 */ V(15, 2, 3),
1733 /* 0110 */ V(6, 14, 4),
1734 /* 0111 */ V(15, 0, 4),
1735 /* 1000 */ V(1, 15, 3),
1736 /* 1001 */ V(1, 15, 3),
1737 /* 1010 */ V(15, 1, 3),
1738 /* 1011 */ V(15, 1, 3),
1739 /* 1100 */ V(9, 12, 3),
1740 /* 1101 */ V(9, 12, 3),
1741 /* 1110 */ V(12, 9, 3),
1742 /* 1111 */ V(12, 9, 3),
1743
1744 /* 0000 0101 ... */
1745 /* 000 */ V(5, 14, 3), /* 200 */
1746 /* 001 */ V(10, 11, 3),
1747 /* 010 */ V(11, 10, 3),
1748 /* 011 */ V(14, 5, 3),
1749 /* 100 */ V(7, 13, 3),
1750 /* 101 */ V(13, 7, 3),
1751 /* 110 */ V(4, 14, 3),
1752 /* 111 */ V(14, 4, 3),
1753
1754 /* 0000 0110 ... */
1755 /* 000 */ V(8, 12, 3), /* 208 */
1756 /* 001 */ V(12, 8, 3),
1757 /* 010 */ V(3, 14, 3),
1758 /* 011 */ V(6, 13, 3),
1759 /* 100 */ V(13, 6, 3),
1760 /* 101 */ V(14, 3, 3),
1761 /* 110 */ V(9, 11, 3),
1762 /* 111 */ V(11, 9, 3),
1763
1764 /* 0000 0111 ... */
1765 /* 0000 */ V(2, 14, 3), /* 216 */
1766 /* 0001 */ V(2, 14, 3),
1767 /* 0010 */ V(10, 10, 3),
1768 /* 0011 */ V(10, 10, 3),
1769 /* 0100 */ V(14, 2, 3),
1770 /* 0101 */ V(14, 2, 3),
1771 /* 0110 */ V(1, 14, 3),
1772 /* 0111 */ V(1, 14, 3),
1773 /* 1000 */ V(14, 1, 3),
1774 /* 1001 */ V(14, 1, 3),
1775 /* 1010 */ V(0, 14, 4),
1776 /* 1011 */ V(14, 0, 4),
1777 /* 1100 */ V(5, 13, 3),
1778 /* 1101 */ V(5, 13, 3),
1779 /* 1110 */ V(13, 5, 3),
1780 /* 1111 */ V(13, 5, 3),
1781
1782 /* 0000 1000 ... */
1783 /* 000 */ V(7, 12, 3), /* 232 */
1784 /* 001 */ V(12, 7, 3),
1785 /* 010 */ V(4, 13, 3),
1786 /* 011 */ V(8, 11, 3),
1787 /* 100 */ V(13, 4, 2),
1788 /* 101 */ V(13, 4, 2),
1789 /* 110 */ V(11, 8, 3),
1790 /* 111 */ V(9, 10, 3),
1791
1792 /* 0000 1001 ... */
1793 /* 000 */ V(10, 9, 3), /* 240 */
1794 /* 001 */ V(6, 12, 3),
1795 /* 010 */ V(12, 6, 3),
1796 /* 011 */ V(3, 13, 3),
1797 /* 100 */ V(13, 3, 2),
1798 /* 101 */ V(13, 3, 2),
1799 /* 110 */ V(13, 2, 2),
1800 /* 111 */ V(13, 2, 2),
1801
1802 /* 0000 1010 ... */
1803 /* 000 */ V(2, 13, 3), /* 248 */
1804 /* 001 */ V(0, 13, 3),
1805 /* 010 */ V(1, 13, 2),
1806 /* 011 */ V(1, 13, 2),
1807 /* 100 */ V(7, 11, 2),
1808 /* 101 */ V(7, 11, 2),
1809 /* 110 */ V(11, 7, 2),
1810 /* 111 */ V(11, 7, 2),
1811
1812 /* 0000 1011 ... */
1813 /* 000 */ V(13, 1, 2), /* 256 */
1814 /* 001 */ V(13, 1, 2),
1815 /* 010 */ V(5, 12, 3),
1816 /* 011 */ V(13, 0, 3),
1817 /* 100 */ V(12, 5, 2),
1818 /* 101 */ V(12, 5, 2),
1819 /* 110 */ V(8, 10, 2),
1820 /* 111 */ V(8, 10, 2),
1821
1822 /* 0000 1100 ... */
1823 /* 00 */ V(10, 8, 2), /* 264 */
1824 /* 01 */ V(4, 12, 2),
1825 /* 10 */ V(12, 4, 2),
1826 /* 11 */ V(6, 11, 2),
1827
1828 /* 0000 1101 ... */
1829 /* 000 */ V(11, 6, 2), /* 268 */
1830 /* 001 */ V(11, 6, 2),
1831 /* 010 */ V(9, 9, 3),
1832 /* 011 */ V(0, 12, 3),
1833 /* 100 */ V(3, 12, 2),
1834 /* 101 */ V(3, 12, 2),
1835 /* 110 */ V(12, 3, 2),
1836 /* 111 */ V(12, 3, 2),
1837
1838 /* 0000 1110 ... */
1839 /* 000 */ V(7, 10, 2), /* 276 */
1840 /* 001 */ V(7, 10, 2),
1841 /* 010 */ V(10, 7, 2),
1842 /* 011 */ V(10, 7, 2),
1843 /* 100 */ V(10, 6, 2),
1844 /* 101 */ V(10, 6, 2),
1845 /* 110 */ V(12, 0, 3),
1846 /* 111 */ V(0, 11, 3),
1847
1848 /* 0000 1111 ... */
1849 /* 00 */ V(12, 2, 1), /* 284 */
1850 /* 01 */ V(12, 2, 1),
1851 /* 10 */ V(2, 12, 2),
1852 /* 11 */ V(5, 11, 2),
1853
1854 /* 0001 0000 ... */
1855 /* 00 */ V(11, 5, 2), /* 288 */
1856 /* 01 */ V(1, 12, 2),
1857 /* 10 */ V(8, 9, 2),
1858 /* 11 */ V(9, 8, 2),
1859
1860 /* 0001 0001 ... */
1861 /* 00 */ V(12, 1, 2), /* 292 */
1862 /* 01 */ V(4, 11, 2),
1863 /* 10 */ V(11, 4, 2),
1864 /* 11 */ V(6, 10, 2),
1865
1866 /* 0001 0010 ... */
1867 /* 00 */ V(3, 11, 2), /* 296 */
1868 /* 01 */ V(7, 9, 2),
1869 /* 10 */ V(11, 3, 1),
1870 /* 11 */ V(11, 3, 1),
1871
1872 /* 0001 0011 ... */
1873 /* 00 */ V(9, 7, 2), /* 300 */
1874 /* 01 */ V(8, 8, 2),
1875 /* 10 */ V(2, 11, 2),
1876 /* 11 */ V(5, 10, 2),
1877
1878 /* 0001 0100 ... */
1879 /* 00 */ V(11, 2, 1), /* 304 */
1880 /* 01 */ V(11, 2, 1),
1881 /* 10 */ V(10, 5, 2),
1882 /* 11 */ V(1, 11, 2),
1883
1884 /* 0001 0101 ... */
1885 /* 00 */ V(11, 1, 1), /* 308 */
1886 /* 01 */ V(11, 1, 1),
1887 /* 10 */ V(11, 0, 2),
1888 /* 11 */ V(6, 9, 2),
1889
1890 /* 0001 0110 ... */
1891 /* 00 */ V(9, 6, 2), /* 312 */
1892 /* 01 */ V(4, 10, 2),
1893 /* 10 */ V(10, 4, 2),
1894 /* 11 */ V(7, 8, 2),
1895
1896 /* 0001 0111 ... */
1897 /* 00 */ V(8, 7, 2), /* 316 */
1898 /* 01 */ V(3, 10, 2),
1899 /* 10 */ V(10, 3, 1),
1900 /* 11 */ V(10, 3, 1),
1901
1902 /* 0001 1000 ... */
1903 /* 0 */ V(5, 9, 1), /* 320 */
1904 /* 1 */ V(9, 5, 1),
1905
1906 /* 0001 1001 ... */
1907 /* 0 */ V(2, 10, 1), /* 322 */
1908 /* 1 */ V(10, 2, 1),
1909
1910 /* 0001 1010 ... */
1911 /* 0 */ V(1, 10, 1), /* 324 */
1912 /* 1 */ V(10, 1, 1),
1913
1914 /* 0001 1011 ... */
1915 /* 00 */ V(0, 10, 2), /* 326 */
1916 /* 01 */ V(10, 0, 2),
1917 /* 10 */ V(6, 8, 1),
1918 /* 11 */ V(6, 8, 1),
1919
1920 /* 0001 1100 ... */
1921 /* 0 */ V(8, 6, 1), /* 330 */
1922 /* 1 */ V(4, 9, 1),
1923
1924 /* 0001 1101 ... */
1925 /* 0 */ V(9, 4, 1), /* 332 */
1926 /* 1 */ V(3, 9, 1),
1927
1928 /* 0001 1110 ... */
1929 /* 00 */ V(9, 3, 1), /* 334 */
1930 /* 01 */ V(9, 3, 1),
1931 /* 10 */ V(7, 7, 2),
1932 /* 11 */ V(0, 9, 2),
1933
1934 /* 0001 1111 ... */
1935 /* 0 */ V(5, 8, 1), /* 338 */
1936 /* 1 */ V(8, 5, 1),
1937
1938 /* 0010 0000 ... */
1939 /* 0 */ V(2, 9, 1), /* 340 */
1940 /* 1 */ V(6, 7, 1),
1941
1942 /* 0010 0001 ... */
1943 /* 0 */ V(7, 6, 1), /* 342 */
1944 /* 1 */ V(9, 2, 1),
1945
1946 /* 0010 0011 ... */
1947 /* 0 */ V(1, 9, 1), /* 344 */
1948 /* 1 */ V(9, 0, 1),
1949
1950 /* 0010 0100 ... */
1951 /* 0 */ V(4, 8, 1), /* 346 */
1952 /* 1 */ V(8, 4, 1),
1953
1954 /* 0010 0101 ... */
1955 /* 0 */ V(5, 7, 1), /* 348 */
1956 /* 1 */ V(7, 5, 1),
1957
1958 /* 0010 0110 ... */
1959 /* 0 */ V(3, 8, 1), /* 350 */
1960 /* 1 */ V(8, 3, 1),
1961
1962 /* 0010 0111 ... */
1963 /* 0 */ V(6, 6, 1), /* 352 */
1964 /* 1 */ V(4, 7, 1),
1965
1966 /* 0010 1100 ... */
1967 /* 0 */ V(7, 4, 1), /* 354 */
1968 /* 1 */ V(0, 8, 1),
1969
1970 /* 0010 1101 ... */
1971 /* 0 */ V(8, 0, 1), /* 356 */
1972 /* 1 */ V(5, 6, 1),
1973
1974 /* 0010 1110 ... */
1975 /* 0 */ V(6, 5, 1), /* 358 */
1976 /* 1 */ V(3, 7, 1),
1977
1978 /* 0010 1111 ... */
1979 /* 0 */ V(7, 3, 1), /* 360 */
1980 /* 1 */ V(4, 6, 1),
1981
1982 /* 0011 0110 ... */
1983 /* 0 */ V(0, 7, 1), /* 362 */
1984 /* 1 */ V(7, 0, 1),
1985
1986 /* 0011 1110 ... */
1987 /* 0 */ V(0, 6, 1), /* 364 */
1988 /* 1 */ V(6, 0, 1),
1989
1990 /* 0000 0000 0000 ... */
1991 /* 0 */ V(15, 15, 1), /* 366 */
1992 /* 1 */ V(14, 15, 1),
1993
1994 /* 0000 0000 0001 ... */
1995 /* 0 */ V(15, 14, 1), /* 368 */
1996 /* 1 */ V(13, 15, 1),
1997
1998 /* 0000 0000 0011 ... */
1999 /* 0 */ V(15, 13, 1), /* 370 */
2000 /* 1 */ V(12, 15, 1),
2001
2002 /* 0000 0000 0100 ... */
2003 /* 0 */ V(15, 12, 1), /* 372 */
2004 /* 1 */ V(13, 14, 1),
2005
2006 /* 0000 0000 0101 ... */
2007 /* 0 */ V(14, 13, 1), /* 374 */
2008 /* 1 */ V(11, 15, 1),
2009
2010 /* 0000 0000 0111 ... */
2011 /* 0 */ V(12, 14, 1), /* 376 */
2012 /* 1 */ V(14, 12, 1),
2013
2014 /* 0000 0001 1111 ... */
2015 /* 0 */ V(10, 14, 1), /* 378 */
2016 /* 1 */ V(0, 15, 1)
2017};
2018
2019static
2020union huffpair const hufftab16[] = {
2021 /* 0000 */ PTR(16, 4),
2022 /* 0001 */ PTR(32, 4),
2023 /* 0010 */ PTR(48, 4),
2024 /* 0011 */ PTR(64, 2),
2025 /* 0100 */ V(1, 1, 4),
2026 /* 0101 */ V(0, 1, 4),
2027 /* 0110 */ V(1, 0, 3),
2028 /* 0111 */ V(1, 0, 3),
2029 /* 1000 */ V(0, 0, 1),
2030 /* 1001 */ V(0, 0, 1),
2031 /* 1010 */ V(0, 0, 1),
2032 /* 1011 */ V(0, 0, 1),
2033 /* 1100 */ V(0, 0, 1),
2034 /* 1101 */ V(0, 0, 1),
2035 /* 1110 */ V(0, 0, 1),
2036 /* 1111 */ V(0, 0, 1),
2037
2038 /* 0000 ... */
2039 /* 0000 */ PTR(68, 3), /* 16 */
2040 /* 0001 */ PTR(76, 3),
2041 /* 0010 */ PTR(84, 2),
2042 /* 0011 */ V(15, 15, 4),
2043 /* 0100 */ PTR(88, 2),
2044 /* 0101 */ PTR(92, 1),
2045 /* 0110 */ PTR(94, 4),
2046 /* 0111 */ V(15, 2, 4),
2047 /* 1000 */ PTR(110, 1),
2048 /* 1001 */ V(1, 15, 4),
2049 /* 1010 */ V(15, 1, 4),
2050 /* 1011 */ PTR(112, 4),
2051 /* 1100 */ PTR(128, 4),
2052 /* 1101 */ PTR(144, 4),
2053 /* 1110 */ PTR(160, 4),
2054 /* 1111 */ PTR(176, 4),
2055
2056 /* 0001 ... */
2057 /* 0000 */ PTR(192, 4), /* 32 */
2058 /* 0001 */ PTR(208, 3),
2059 /* 0010 */ PTR(216, 3),
2060 /* 0011 */ PTR(224, 3),
2061 /* 0100 */ PTR(232, 3),
2062 /* 0101 */ PTR(240, 3),
2063 /* 0110 */ PTR(248, 3),
2064 /* 0111 */ PTR(256, 3),
2065 /* 1000 */ PTR(264, 2),
2066 /* 1001 */ PTR(268, 2),
2067 /* 1010 */ PTR(272, 1),
2068 /* 1011 */ PTR(274, 2),
2069 /* 1100 */ PTR(278, 2),
2070 /* 1101 */ PTR(282, 1),
2071 /* 1110 */ V(5, 1, 4),
2072 /* 1111 */ PTR(284, 1),
2073
2074 /* 0010 ... */
2075 /* 0000 */ PTR(286, 1), /* 48 */
2076 /* 0001 */ PTR(288, 1),
2077 /* 0010 */ PTR(290, 1),
2078 /* 0011 */ V(1, 4, 4),
2079 /* 0100 */ V(4, 1, 4),
2080 /* 0101 */ PTR(292, 1),
2081 /* 0110 */ V(2, 3, 4),
2082 /* 0111 */ V(3, 2, 4),
2083 /* 1000 */ V(1, 3, 3),
2084 /* 1001 */ V(1, 3, 3),
2085 /* 1010 */ V(3, 1, 3),
2086 /* 1011 */ V(3, 1, 3),
2087 /* 1100 */ V(0, 3, 4),
2088 /* 1101 */ V(3, 0, 4),
2089 /* 1110 */ V(2, 2, 3),
2090 /* 1111 */ V(2, 2, 3),
2091
2092 /* 0011 ... */
2093 /* 00 */ V(1, 2, 2), /* 64 */
2094 /* 01 */ V(2, 1, 2),
2095 /* 10 */ V(0, 2, 2),
2096 /* 11 */ V(2, 0, 2),
2097
2098 /* 0000 0000 ... */
2099 /* 000 */ V(14, 15, 3), /* 68 */
2100 /* 001 */ V(15, 14, 3),
2101 /* 010 */ V(13, 15, 3),
2102 /* 011 */ V(15, 13, 3),
2103 /* 100 */ V(12, 15, 3),
2104 /* 101 */ V(15, 12, 3),
2105 /* 110 */ V(11, 15, 3),
2106 /* 111 */ V(15, 11, 3),
2107
2108 /* 0000 0001 ... */
2109 /* 000 */ V(10, 15, 2), /* 76 */
2110 /* 001 */ V(10, 15, 2),
2111 /* 010 */ V(15, 10, 3),
2112 /* 011 */ V(9, 15, 3),
2113 /* 100 */ V(15, 9, 3),
2114 /* 101 */ V(15, 8, 3),
2115 /* 110 */ V(8, 15, 2),
2116 /* 111 */ V(8, 15, 2),
2117
2118 /* 0000 0010 ... */
2119 /* 00 */ V(7, 15, 2), /* 84 */
2120 /* 01 */ V(15, 7, 2),
2121 /* 10 */ V(6, 15, 2),
2122 /* 11 */ V(15, 6, 2),
2123
2124 /* 0000 0100 ... */
2125 /* 00 */ V(5, 15, 2), /* 88 */
2126 /* 01 */ V(15, 5, 2),
2127 /* 10 */ V(4, 15, 1),
2128 /* 11 */ V(4, 15, 1),
2129
2130 /* 0000 0101 ... */
2131 /* 0 */ V(15, 4, 1), /* 92 */
2132 /* 1 */ V(15, 3, 1),
2133
2134 /* 0000 0110 ... */
2135 /* 0000 */ V(15, 0, 1), /* 94 */
2136 /* 0001 */ V(15, 0, 1),
2137 /* 0010 */ V(15, 0, 1),
2138 /* 0011 */ V(15, 0, 1),
2139 /* 0100 */ V(15, 0, 1),
2140 /* 0101 */ V(15, 0, 1),
2141 /* 0110 */ V(15, 0, 1),
2142 /* 0111 */ V(15, 0, 1),
2143 /* 1000 */ V(3, 15, 2),
2144 /* 1001 */ V(3, 15, 2),
2145 /* 1010 */ V(3, 15, 2),
2146 /* 1011 */ V(3, 15, 2),
2147 /* 1100 */ PTR(294, 4),
2148 /* 1101 */ PTR(310, 3),
2149 /* 1110 */ PTR(318, 3),
2150 /* 1111 */ PTR(326, 3),
2151
2152 /* 0000 1000 ... */
2153 /* 0 */ V(2, 15, 1), /* 110 */
2154 /* 1 */ V(0, 15, 1),
2155
2156 /* 0000 1011 ... */
2157 /* 0000 */ PTR(334, 2), /* 112 */
2158 /* 0001 */ PTR(338, 2),
2159 /* 0010 */ PTR(342, 2),
2160 /* 0011 */ PTR(346, 1),
2161 /* 0100 */ PTR(348, 2),
2162 /* 0101 */ PTR(352, 2),
2163 /* 0110 */ PTR(356, 1),
2164 /* 0111 */ PTR(358, 2),
2165 /* 1000 */ PTR(362, 2),
2166 /* 1001 */ PTR(366, 2),
2167 /* 1010 */ PTR(370, 2),
2168 /* 1011 */ V(14, 3, 4),
2169 /* 1100 */ PTR(374, 1),
2170 /* 1101 */ PTR(376, 1),
2171 /* 1110 */ PTR(378, 1),
2172 /* 1111 */ PTR(380, 1),
2173
2174 /* 0000 1100 ... */
2175 /* 0000 */ PTR(382, 1), /* 128 */
2176 /* 0001 */ PTR(384, 1),
2177 /* 0010 */ PTR(386, 1),
2178 /* 0011 */ V(0, 13, 4),
2179 /* 0100 */ PTR(388, 1),
2180 /* 0101 */ PTR(390, 1),
2181 /* 0110 */ PTR(392, 1),
2182 /* 0111 */ V(3, 12, 4),
2183 /* 1000 */ PTR(394, 1),
2184 /* 1001 */ V(1, 12, 4),
2185 /* 1010 */ V(12, 0, 4),
2186 /* 1011 */ PTR(396, 1),
2187 /* 1100 */ V(14, 2, 3),
2188 /* 1101 */ V(14, 2, 3),
2189 /* 1110 */ V(2, 14, 4),
2190 /* 1111 */ V(1, 14, 4),
2191
2192 /* 0000 1101 ... */
2193 /* 0000 */ V(13, 3, 4), /* 144 */
2194 /* 0001 */ V(2, 13, 4),
2195 /* 0010 */ V(13, 2, 4),
2196 /* 0011 */ V(13, 1, 4),
2197 /* 0100 */ V(3, 11, 4),
2198 /* 0101 */ PTR(398, 1),
2199 /* 0110 */ V(1, 13, 3),
2200 /* 0111 */ V(1, 13, 3),
2201 /* 1000 */ V(12, 4, 4),
2202 /* 1001 */ V(6, 11, 4),
2203 /* 1010 */ V(12, 3, 4),
2204 /* 1011 */ V(10, 7, 4),
2205 /* 1100 */ V(2, 12, 3),
2206 /* 1101 */ V(2, 12, 3),
2207 /* 1110 */ V(12, 2, 4),
2208 /* 1111 */ V(11, 5, 4),
2209
2210 /* 0000 1110 ... */
2211 /* 0000 */ V(12, 1, 4), /* 160 */
2212 /* 0001 */ V(0, 12, 4),
2213 /* 0010 */ V(4, 11, 4),
2214 /* 0011 */ V(11, 4, 4),
2215 /* 0100 */ V(6, 10, 4),
2216 /* 0101 */ V(10, 6, 4),
2217 /* 0110 */ V(11, 3, 3),
2218 /* 0111 */ V(11, 3, 3),
2219 /* 1000 */ V(5, 10, 4),
2220 /* 1001 */ V(10, 5, 4),
2221 /* 1010 */ V(2, 11, 3),
2222 /* 1011 */ V(2, 11, 3),
2223 /* 1100 */ V(11, 2, 3),
2224 /* 1101 */ V(11, 2, 3),
2225 /* 1110 */ V(1, 11, 3),
2226 /* 1111 */ V(1, 11, 3),
2227
2228 /* 0000 1111 ... */
2229 /* 0000 */ V(11, 1, 3), /* 176 */
2230 /* 0001 */ V(11, 1, 3),
2231 /* 0010 */ V(0, 11, 4),
2232 /* 0011 */ V(11, 0, 4),
2233 /* 0100 */ V(6, 9, 4),
2234 /* 0101 */ V(9, 6, 4),
2235 /* 0110 */ V(4, 10, 4),
2236 /* 0111 */ V(10, 4, 4),
2237 /* 1000 */ V(7, 8, 4),
2238 /* 1001 */ V(8, 7, 4),
2239 /* 1010 */ V(10, 3, 3),
2240 /* 1011 */ V(10, 3, 3),
2241 /* 1100 */ V(3, 10, 4),
2242 /* 1101 */ V(5, 9, 4),
2243 /* 1110 */ V(2, 10, 3),
2244 /* 1111 */ V(2, 10, 3),
2245
2246 /* 0001 0000 ... */
2247 /* 0000 */ V(9, 5, 4), /* 192 */
2248 /* 0001 */ V(6, 8, 4),
2249 /* 0010 */ V(10, 1, 3),
2250 /* 0011 */ V(10, 1, 3),
2251 /* 0100 */ V(8, 6, 4),
2252 /* 0101 */ V(7, 7, 4),
2253 /* 0110 */ V(9, 4, 3),
2254 /* 0111 */ V(9, 4, 3),
2255 /* 1000 */ V(4, 9, 4),
2256 /* 1001 */ V(5, 7, 4),
2257 /* 1010 */ V(6, 7, 3),
2258 /* 1011 */ V(6, 7, 3),
2259 /* 1100 */ V(10, 2, 2),
2260 /* 1101 */ V(10, 2, 2),
2261 /* 1110 */ V(10, 2, 2),
2262 /* 1111 */ V(10, 2, 2),
2263
2264 /* 0001 0001 ... */
2265 /* 000 */ V(1, 10, 2), /* 208 */
2266 /* 001 */ V(1, 10, 2),
2267 /* 010 */ V(0, 10, 3),
2268 /* 011 */ V(10, 0, 3),
2269 /* 100 */ V(3, 9, 3),
2270 /* 101 */ V(9, 3, 3),
2271 /* 110 */ V(5, 8, 3),
2272 /* 111 */ V(8, 5, 3),
2273
2274 /* 0001 0010 ... */
2275 /* 000 */ V(2, 9, 2), /* 216 */
2276 /* 001 */ V(2, 9, 2),
2277 /* 010 */ V(9, 2, 2),
2278 /* 011 */ V(9, 2, 2),
2279 /* 100 */ V(7, 6, 3),
2280 /* 101 */ V(0, 9, 3),
2281 /* 110 */ V(1, 9, 2),
2282 /* 111 */ V(1, 9, 2),
2283
2284 /* 0001 0011 ... */
2285 /* 000 */ V(9, 1, 2), /* 224 */
2286 /* 001 */ V(9, 1, 2),
2287 /* 010 */ V(9, 0, 3),
2288 /* 011 */ V(4, 8, 3),
2289 /* 100 */ V(8, 4, 3),
2290 /* 101 */ V(7, 5, 3),
2291 /* 110 */ V(3, 8, 3),
2292 /* 111 */ V(8, 3, 3),
2293
2294 /* 0001 0100 ... */
2295 /* 000 */ V(6, 6, 3), /* 232 */
2296 /* 001 */ V(2, 8, 3),
2297 /* 010 */ V(8, 2, 2),
2298 /* 011 */ V(8, 2, 2),
2299 /* 100 */ V(4, 7, 3),
2300 /* 101 */ V(7, 4, 3),
2301 /* 110 */ V(1, 8, 2),
2302 /* 111 */ V(1, 8, 2),
2303
2304 /* 0001 0101 ... */
2305 /* 000 */ V(8, 1, 2), /* 240 */
2306 /* 001 */ V(8, 1, 2),
2307 /* 010 */ V(8, 0, 2),
2308 /* 011 */ V(8, 0, 2),
2309 /* 100 */ V(0, 8, 3),
2310 /* 101 */ V(5, 6, 3),
2311 /* 110 */ V(3, 7, 2),
2312 /* 111 */ V(3, 7, 2),
2313
2314 /* 0001 0110 ... */
2315 /* 000 */ V(7, 3, 2), /* 248 */
2316 /* 001 */ V(7, 3, 2),
2317 /* 010 */ V(6, 5, 3),
2318 /* 011 */ V(4, 6, 3),
2319 /* 100 */ V(2, 7, 2),
2320 /* 101 */ V(2, 7, 2),
2321 /* 110 */ V(7, 2, 2),
2322 /* 111 */ V(7, 2, 2),
2323
2324 /* 0001 0111 ... */
2325 /* 000 */ V(6, 4, 3), /* 256 */
2326 /* 001 */ V(5, 5, 3),
2327 /* 010 */ V(0, 7, 2),
2328 /* 011 */ V(0, 7, 2),
2329 /* 100 */ V(1, 7, 1),
2330 /* 101 */ V(1, 7, 1),
2331 /* 110 */ V(1, 7, 1),
2332 /* 111 */ V(1, 7, 1),
2333
2334 /* 0001 1000 ... */
2335 /* 00 */ V(7, 1, 1), /* 264 */
2336 /* 01 */ V(7, 1, 1),
2337 /* 10 */ V(7, 0, 2),
2338 /* 11 */ V(3, 6, 2),
2339
2340 /* 0001 1001 ... */
2341 /* 00 */ V(6, 3, 2), /* 268 */
2342 /* 01 */ V(4, 5, 2),
2343 /* 10 */ V(5, 4, 2),
2344 /* 11 */ V(2, 6, 2),
2345
2346 /* 0001 1010 ... */
2347 /* 0 */ V(6, 2, 1), /* 272 */
2348 /* 1 */ V(1, 6, 1),
2349
2350 /* 0001 1011 ... */
2351 /* 00 */ V(6, 1, 1), /* 274 */
2352 /* 01 */ V(6, 1, 1),
2353 /* 10 */ V(0, 6, 2),
2354 /* 11 */ V(6, 0, 2),
2355
2356 /* 0001 1100 ... */
2357 /* 00 */ V(5, 3, 1), /* 278 */
2358 /* 01 */ V(5, 3, 1),
2359 /* 10 */ V(3, 5, 2),
2360 /* 11 */ V(4, 4, 2),
2361
2362 /* 0001 1101 ... */
2363 /* 0 */ V(2, 5, 1), /* 282 */
2364 /* 1 */ V(5, 2, 1),
2365
2366 /* 0001 1111 ... */
2367 /* 0 */ V(1, 5, 1), /* 284 */
2368 /* 1 */ V(0, 5, 1),
2369
2370 /* 0010 0000 ... */
2371 /* 0 */ V(3, 4, 1), /* 286 */
2372 /* 1 */ V(4, 3, 1),
2373
2374 /* 0010 0001 ... */
2375 /* 0 */ V(5, 0, 1), /* 288 */
2376 /* 1 */ V(2, 4, 1),
2377
2378 /* 0010 0010 ... */
2379 /* 0 */ V(4, 2, 1), /* 290 */
2380 /* 1 */ V(3, 3, 1),
2381
2382 /* 0010 0101 ... */
2383 /* 0 */ V(0, 4, 1), /* 292 */
2384 /* 1 */ V(4, 0, 1),
2385
2386 /* 0000 0110 1100 ... */
2387 /* 0000 */ V(12, 14, 4), /* 294 */
2388 /* 0001 */ PTR(400, 1),
2389 /* 0010 */ V(13, 14, 3),
2390 /* 0011 */ V(13, 14, 3),
2391 /* 0100 */ V(14, 9, 3),
2392 /* 0101 */ V(14, 9, 3),
2393 /* 0110 */ V(14, 10, 4),
2394 /* 0111 */ V(13, 9, 4),
2395 /* 1000 */ V(14, 14, 2),
2396 /* 1001 */ V(14, 14, 2),
2397 /* 1010 */ V(14, 14, 2),
2398 /* 1011 */ V(14, 14, 2),
2399 /* 1100 */ V(14, 13, 3),
2400 /* 1101 */ V(14, 13, 3),
2401 /* 1110 */ V(14, 11, 3),
2402 /* 1111 */ V(14, 11, 3),
2403
2404 /* 0000 0110 1101 ... */
2405 /* 000 */ V(11, 14, 2), /* 310 */
2406 /* 001 */ V(11, 14, 2),
2407 /* 010 */ V(12, 13, 2),
2408 /* 011 */ V(12, 13, 2),
2409 /* 100 */ V(13, 12, 3),
2410 /* 101 */ V(13, 11, 3),
2411 /* 110 */ V(10, 14, 2),
2412 /* 111 */ V(10, 14, 2),
2413
2414 /* 0000 0110 1110 ... */
2415 /* 000 */ V(12, 12, 2), /* 318 */
2416 /* 001 */ V(12, 12, 2),
2417 /* 010 */ V(10, 13, 3),
2418 /* 011 */ V(13, 10, 3),
2419 /* 100 */ V(7, 14, 3),
2420 /* 101 */ V(10, 12, 3),
2421 /* 110 */ V(12, 10, 2),
2422 /* 111 */ V(12, 10, 2),
2423
2424 /* 0000 0110 1111 ... */
2425 /* 000 */ V(12, 9, 3), /* 326 */
2426 /* 001 */ V(7, 13, 3),
2427 /* 010 */ V(5, 14, 2),
2428 /* 011 */ V(5, 14, 2),
2429 /* 100 */ V(11, 13, 1),
2430 /* 101 */ V(11, 13, 1),
2431 /* 110 */ V(11, 13, 1),
2432 /* 111 */ V(11, 13, 1),
2433
2434 /* 0000 1011 0000 ... */
2435 /* 00 */ V(9, 14, 1), /* 334 */
2436 /* 01 */ V(9, 14, 1),
2437 /* 10 */ V(11, 12, 2),
2438 /* 11 */ V(12, 11, 2),
2439
2440 /* 0000 1011 0001 ... */
2441 /* 00 */ V(8, 14, 2), /* 338 */
2442 /* 01 */ V(14, 8, 2),
2443 /* 10 */ V(9, 13, 2),
2444 /* 11 */ V(14, 7, 2),
2445
2446 /* 0000 1011 0010 ... */
2447 /* 00 */ V(11, 11, 2), /* 342 */
2448 /* 01 */ V(8, 13, 2),
2449 /* 10 */ V(13, 8, 2),
2450 /* 11 */ V(6, 14, 2),
2451
2452 /* 0000 1011 0011 ... */
2453 /* 0 */ V(14, 6, 1), /* 346 */
2454 /* 1 */ V(9, 12, 1),
2455
2456 /* 0000 1011 0100 ... */
2457 /* 00 */ V(10, 11, 2), /* 348 */
2458 /* 01 */ V(11, 10, 2),
2459 /* 10 */ V(14, 5, 2),
2460 /* 11 */ V(13, 7, 2),
2461
2462 /* 0000 1011 0101 ... */
2463 /* 00 */ V(4, 14, 1), /* 352 */
2464 /* 01 */ V(4, 14, 1),
2465 /* 10 */ V(14, 4, 2),
2466 /* 11 */ V(8, 12, 2),
2467
2468 /* 0000 1011 0110 ... */
2469 /* 0 */ V(12, 8, 1), /* 356 */
2470 /* 1 */ V(3, 14, 1),
2471
2472 /* 0000 1011 0111 ... */
2473 /* 00 */ V(6, 13, 1), /* 358 */
2474 /* 01 */ V(6, 13, 1),
2475 /* 10 */ V(13, 6, 2),
2476 /* 11 */ V(9, 11, 2),
2477
2478 /* 0000 1011 1000 ... */
2479 /* 00 */ V(11, 9, 2), /* 362 */
2480 /* 01 */ V(10, 10, 2),
2481 /* 10 */ V(14, 1, 1),
2482 /* 11 */ V(14, 1, 1),
2483
2484 /* 0000 1011 1001 ... */
2485 /* 00 */ V(13, 4, 1), /* 366 */
2486 /* 01 */ V(13, 4, 1),
2487 /* 10 */ V(11, 8, 2),
2488 /* 11 */ V(10, 9, 2),
2489
2490 /* 0000 1011 1010 ... */
2491 /* 00 */ V(7, 11, 1), /* 370 */
2492 /* 01 */ V(7, 11, 1),
2493 /* 10 */ V(11, 7, 2),
2494 /* 11 */ V(13, 0, 2),
2495
2496 /* 0000 1011 1100 ... */
2497 /* 0 */ V(0, 14, 1), /* 374 */
2498 /* 1 */ V(14, 0, 1),
2499
2500 /* 0000 1011 1101 ... */
2501 /* 0 */ V(5, 13, 1), /* 376 */
2502 /* 1 */ V(13, 5, 1),
2503
2504 /* 0000 1011 1110 ... */
2505 /* 0 */ V(7, 12, 1), /* 378 */
2506 /* 1 */ V(12, 7, 1),
2507
2508 /* 0000 1011 1111 ... */
2509 /* 0 */ V(4, 13, 1), /* 380 */
2510 /* 1 */ V(8, 11, 1),
2511
2512 /* 0000 1100 0000 ... */
2513 /* 0 */ V(9, 10, 1), /* 382 */
2514 /* 1 */ V(6, 12, 1),
2515
2516 /* 0000 1100 0001 ... */
2517 /* 0 */ V(12, 6, 1), /* 384 */
2518 /* 1 */ V(3, 13, 1),
2519
2520 /* 0000 1100 0010 ... */
2521 /* 0 */ V(5, 12, 1), /* 386 */
2522 /* 1 */ V(12, 5, 1),
2523
2524 /* 0000 1100 0100 ... */
2525 /* 0 */ V(8, 10, 1), /* 388 */
2526 /* 1 */ V(10, 8, 1),
2527
2528 /* 0000 1100 0101 ... */
2529 /* 0 */ V(9, 9, 1), /* 390 */
2530 /* 1 */ V(4, 12, 1),
2531
2532 /* 0000 1100 0110 ... */
2533 /* 0 */ V(11, 6, 1), /* 392 */
2534 /* 1 */ V(7, 10, 1),
2535
2536 /* 0000 1100 1000 ... */
2537 /* 0 */ V(5, 11, 1), /* 394 */
2538 /* 1 */ V(8, 9, 1),
2539
2540 /* 0000 1100 1011 ... */
2541 /* 0 */ V(9, 8, 1), /* 396 */
2542 /* 1 */ V(7, 9, 1),
2543
2544 /* 0000 1101 0101 ... */
2545 /* 0 */ V(9, 7, 1), /* 398 */
2546 /* 1 */ V(8, 8, 1),
2547
2548 /* 0000 0110 1100 0001 ... */
2549 /* 0 */ V(14, 12, 1), /* 400 */
2550 /* 1 */ V(13, 13, 1)
2551};
2552
2553static
2554union huffpair const hufftab24[] = {
2555 /* 0000 */ PTR(16, 4),
2556 /* 0001 */ PTR(32, 4),
2557 /* 0010 */ PTR(48, 4),
2558 /* 0011 */ V(15, 15, 4),
2559 /* 0100 */ PTR(64, 4),
2560 /* 0101 */ PTR(80, 4),
2561 /* 0110 */ PTR(96, 4),
2562 /* 0111 */ PTR(112, 4),
2563 /* 1000 */ PTR(128, 4),
2564 /* 1001 */ PTR(144, 4),
2565 /* 1010 */ PTR(160, 3),
2566 /* 1011 */ PTR(168, 2),
2567 /* 1100 */ V(1, 1, 4),
2568 /* 1101 */ V(0, 1, 4),
2569 /* 1110 */ V(1, 0, 4),
2570 /* 1111 */ V(0, 0, 4),
2571
2572 /* 0000 ... */
2573 /* 0000 */ V(14, 15, 4), /* 16 */
2574 /* 0001 */ V(15, 14, 4),
2575 /* 0010 */ V(13, 15, 4),
2576 /* 0011 */ V(15, 13, 4),
2577 /* 0100 */ V(12, 15, 4),
2578 /* 0101 */ V(15, 12, 4),
2579 /* 0110 */ V(11, 15, 4),
2580 /* 0111 */ V(15, 11, 4),
2581 /* 1000 */ V(15, 10, 3),
2582 /* 1001 */ V(15, 10, 3),
2583 /* 1010 */ V(10, 15, 4),
2584 /* 1011 */ V(9, 15, 4),
2585 /* 1100 */ V(15, 9, 3),
2586 /* 1101 */ V(15, 9, 3),
2587 /* 1110 */ V(15, 8, 3),
2588 /* 1111 */ V(15, 8, 3),
2589
2590 /* 0001 ... */
2591 /* 0000 */ V(8, 15, 4), /* 32 */
2592 /* 0001 */ V(7, 15, 4),
2593 /* 0010 */ V(15, 7, 3),
2594 /* 0011 */ V(15, 7, 3),
2595 /* 0100 */ V(6, 15, 3),
2596 /* 0101 */ V(6, 15, 3),
2597 /* 0110 */ V(15, 6, 3),
2598 /* 0111 */ V(15, 6, 3),
2599 /* 1000 */ V(5, 15, 3),
2600 /* 1001 */ V(5, 15, 3),
2601 /* 1010 */ V(15, 5, 3),
2602 /* 1011 */ V(15, 5, 3),
2603 /* 1100 */ V(4, 15, 3),
2604 /* 1101 */ V(4, 15, 3),
2605 /* 1110 */ V(15, 4, 3),
2606 /* 1111 */ V(15, 4, 3),
2607
2608 /* 0010 ... */
2609 /* 0000 */ V(3, 15, 3), /* 48 */
2610 /* 0001 */ V(3, 15, 3),
2611 /* 0010 */ V(15, 3, 3),
2612 /* 0011 */ V(15, 3, 3),
2613 /* 0100 */ V(2, 15, 3),
2614 /* 0101 */ V(2, 15, 3),
2615 /* 0110 */ V(15, 2, 3),
2616 /* 0111 */ V(15, 2, 3),
2617 /* 1000 */ V(15, 1, 3),
2618 /* 1001 */ V(15, 1, 3),
2619 /* 1010 */ V(1, 15, 4),
2620 /* 1011 */ V(15, 0, 4),
2621 /* 1100 */ PTR(172, 3),
2622 /* 1101 */ PTR(180, 3),
2623 /* 1110 */ PTR(188, 3),
2624 /* 1111 */ PTR(196, 3),
2625
2626 /* 0100 ... */
2627 /* 0000 */ PTR(204, 4), /* 64 */
2628 /* 0001 */ PTR(220, 3),
2629 /* 0010 */ PTR(228, 3),
2630 /* 0011 */ PTR(236, 3),
2631 /* 0100 */ PTR(244, 2),
2632 /* 0101 */ PTR(248, 2),
2633 /* 0110 */ PTR(252, 2),
2634 /* 0111 */ PTR(256, 2),
2635 /* 1000 */ PTR(260, 2),
2636 /* 1001 */ PTR(264, 2),
2637 /* 1010 */ PTR(268, 2),
2638 /* 1011 */ PTR(272, 2),
2639 /* 1100 */ PTR(276, 2),
2640 /* 1101 */ PTR(280, 3),
2641 /* 1110 */ PTR(288, 2),
2642 /* 1111 */ PTR(292, 2),
2643
2644 /* 0101 ... */
2645 /* 0000 */ PTR(296, 2), /* 80 */
2646 /* 0001 */ PTR(300, 3),
2647 /* 0010 */ PTR(308, 2),
2648 /* 0011 */ PTR(312, 3),
2649 /* 0100 */ PTR(320, 1),
2650 /* 0101 */ PTR(322, 2),
2651 /* 0110 */ PTR(326, 2),
2652 /* 0111 */ PTR(330, 1),
2653 /* 1000 */ PTR(332, 2),
2654 /* 1001 */ PTR(336, 1),
2655 /* 1010 */ PTR(338, 1),
2656 /* 1011 */ PTR(340, 1),
2657 /* 1100 */ PTR(342, 1),
2658 /* 1101 */ PTR(344, 1),
2659 /* 1110 */ PTR(346, 1),
2660 /* 1111 */ PTR(348, 1),
2661
2662 /* 0110 ... */
2663 /* 0000 */ PTR(350, 1), /* 96 */
2664 /* 0001 */ PTR(352, 1),
2665 /* 0010 */ PTR(354, 1),
2666 /* 0011 */ PTR(356, 1),
2667 /* 0100 */ PTR(358, 1),
2668 /* 0101 */ PTR(360, 1),
2669 /* 0110 */ PTR(362, 1),
2670 /* 0111 */ PTR(364, 1),
2671 /* 1000 */ PTR(366, 1),
2672 /* 1001 */ PTR(368, 1),
2673 /* 1010 */ PTR(370, 2),
2674 /* 1011 */ PTR(374, 1),
2675 /* 1100 */ PTR(376, 2),
2676 /* 1101 */ V(7, 3, 4),
2677 /* 1110 */ PTR(380, 1),
2678 /* 1111 */ V(7, 2, 4),
2679
2680 /* 0111 ... */
2681 /* 0000 */ V(4, 6, 4), /* 112 */
2682 /* 0001 */ V(6, 4, 4),
2683 /* 0010 */ V(5, 5, 4),
2684 /* 0011 */ V(7, 1, 4),
2685 /* 0100 */ V(3, 6, 4),
2686 /* 0101 */ V(6, 3, 4),
2687 /* 0110 */ V(4, 5, 4),
2688 /* 0111 */ V(5, 4, 4),
2689 /* 1000 */ V(2, 6, 4),
2690 /* 1001 */ V(6, 2, 4),
2691 /* 1010 */ V(1, 6, 4),
2692 /* 1011 */ V(6, 1, 4),
2693 /* 1100 */ PTR(382, 1),
2694 /* 1101 */ V(3, 5, 4),
2695 /* 1110 */ V(5, 3, 4),
2696 /* 1111 */ V(4, 4, 4),
2697
2698 /* 1000 ... */
2699 /* 0000 */ V(2, 5, 4), /* 128 */
2700 /* 0001 */ V(5, 2, 4),
2701 /* 0010 */ V(1, 5, 4),
2702 /* 0011 */ PTR(384, 1),
2703 /* 0100 */ V(5, 1, 3),
2704 /* 0101 */ V(5, 1, 3),
2705 /* 0110 */ V(3, 4, 4),
2706 /* 0111 */ V(4, 3, 4),
2707 /* 1000 */ V(2, 4, 3),
2708 /* 1001 */ V(2, 4, 3),
2709 /* 1010 */ V(4, 2, 3),
2710 /* 1011 */ V(4, 2, 3),
2711 /* 1100 */ V(3, 3, 3),
2712 /* 1101 */ V(3, 3, 3),
2713 /* 1110 */ V(1, 4, 3),
2714 /* 1111 */ V(1, 4, 3),
2715
2716 /* 1001 ... */
2717 /* 0000 */ V(4, 1, 3), /* 144 */
2718 /* 0001 */ V(4, 1, 3),
2719 /* 0010 */ V(0, 4, 4),
2720 /* 0011 */ V(4, 0, 4),
2721 /* 0100 */ V(2, 3, 3),
2722 /* 0101 */ V(2, 3, 3),
2723 /* 0110 */ V(3, 2, 3),
2724 /* 0111 */ V(3, 2, 3),
2725 /* 1000 */ V(1, 3, 2),
2726 /* 1001 */ V(1, 3, 2),
2727 /* 1010 */ V(1, 3, 2),
2728 /* 1011 */ V(1, 3, 2),
2729 /* 1100 */ V(3, 1, 2),
2730 /* 1101 */ V(3, 1, 2),
2731 /* 1110 */ V(3, 1, 2),
2732 /* 1111 */ V(3, 1, 2),
2733
2734 /* 1010 ... */
2735 /* 000 */ V(0, 3, 3), /* 160 */
2736 /* 001 */ V(3, 0, 3),
2737 /* 010 */ V(2, 2, 2),
2738 /* 011 */ V(2, 2, 2),
2739 /* 100 */ V(1, 2, 1),
2740 /* 101 */ V(1, 2, 1),
2741 /* 110 */ V(1, 2, 1),
2742 /* 111 */ V(1, 2, 1),
2743
2744 /* 1011 ... */
2745 /* 00 */ V(2, 1, 1), /* 168 */
2746 /* 01 */ V(2, 1, 1),
2747 /* 10 */ V(0, 2, 2),
2748 /* 11 */ V(2, 0, 2),
2749
2750 /* 0010 1100 ... */
2751 /* 000 */ V(0, 15, 1), /* 172 */
2752 /* 001 */ V(0, 15, 1),
2753 /* 010 */ V(0, 15, 1),
2754 /* 011 */ V(0, 15, 1),
2755 /* 100 */ V(14, 14, 3),
2756 /* 101 */ V(13, 14, 3),
2757 /* 110 */ V(14, 13, 3),
2758 /* 111 */ V(12, 14, 3),
2759
2760 /* 0010 1101 ... */
2761 /* 000 */ V(14, 12, 3), /* 180 */
2762 /* 001 */ V(13, 13, 3),
2763 /* 010 */ V(11, 14, 3),
2764 /* 011 */ V(14, 11, 3),
2765 /* 100 */ V(12, 13, 3),
2766 /* 101 */ V(13, 12, 3),
2767 /* 110 */ V(10, 14, 3),
2768 /* 111 */ V(14, 10, 3),
2769
2770 /* 0010 1110 ... */
2771 /* 000 */ V(11, 13, 3), /* 188 */
2772 /* 001 */ V(13, 11, 3),
2773 /* 010 */ V(12, 12, 3),
2774 /* 011 */ V(9, 14, 3),
2775 /* 100 */ V(14, 9, 3),
2776 /* 101 */ V(10, 13, 3),
2777 /* 110 */ V(13, 10, 3),
2778 /* 111 */ V(11, 12, 3),
2779
2780 /* 0010 1111 ... */
2781 /* 000 */ V(12, 11, 3), /* 196 */
2782 /* 001 */ V(8, 14, 3),
2783 /* 010 */ V(14, 8, 3),
2784 /* 011 */ V(9, 13, 3),
2785 /* 100 */ V(13, 9, 3),
2786 /* 101 */ V(7, 14, 3),
2787 /* 110 */ V(14, 7, 3),
2788 /* 111 */ V(10, 12, 3),
2789
2790 /* 0100 0000 ... */
2791 /* 0000 */ V(12, 10, 3), /* 204 */
2792 /* 0001 */ V(12, 10, 3),
2793 /* 0010 */ V(11, 11, 3),
2794 /* 0011 */ V(11, 11, 3),
2795 /* 0100 */ V(8, 13, 3),
2796 /* 0101 */ V(8, 13, 3),
2797 /* 0110 */ V(13, 8, 3),
2798 /* 0111 */ V(13, 8, 3),
2799 /* 1000 */ V(0, 14, 4),
2800 /* 1001 */ V(14, 0, 4),
2801 /* 1010 */ V(0, 13, 3),
2802 /* 1011 */ V(0, 13, 3),
2803 /* 1100 */ V(14, 6, 2),
2804 /* 1101 */ V(14, 6, 2),
2805 /* 1110 */ V(14, 6, 2),
2806 /* 1111 */ V(14, 6, 2),
2807
2808 /* 0100 0001 ... */
2809 /* 000 */ V(6, 14, 3), /* 220 */
2810 /* 001 */ V(9, 12, 3),
2811 /* 010 */ V(12, 9, 2),
2812 /* 011 */ V(12, 9, 2),
2813 /* 100 */ V(5, 14, 2),
2814 /* 101 */ V(5, 14, 2),
2815 /* 110 */ V(11, 10, 2),
2816 /* 111 */ V(11, 10, 2),
2817
2818 /* 0100 0010 ... */
2819 /* 000 */ V(14, 5, 2), /* 228 */
2820 /* 001 */ V(14, 5, 2),
2821 /* 010 */ V(10, 11, 3),
2822 /* 011 */ V(7, 13, 3),
2823 /* 100 */ V(13, 7, 2),
2824 /* 101 */ V(13, 7, 2),
2825 /* 110 */ V(14, 4, 2),
2826 /* 111 */ V(14, 4, 2),
2827
2828 /* 0100 0011 ... */
2829 /* 000 */ V(8, 12, 2), /* 236 */
2830 /* 001 */ V(8, 12, 2),
2831 /* 010 */ V(12, 8, 2),
2832 /* 011 */ V(12, 8, 2),
2833 /* 100 */ V(4, 14, 3),
2834 /* 101 */ V(2, 14, 3),
2835 /* 110 */ V(3, 14, 2),
2836 /* 111 */ V(3, 14, 2),
2837
2838 /* 0100 0100 ... */
2839 /* 00 */ V(6, 13, 2), /* 244 */
2840 /* 01 */ V(13, 6, 2),
2841 /* 10 */ V(14, 3, 2),
2842 /* 11 */ V(9, 11, 2),
2843
2844 /* 0100 0101 ... */
2845 /* 00 */ V(11, 9, 2), /* 248 */
2846 /* 01 */ V(10, 10, 2),
2847 /* 10 */ V(14, 2, 2),
2848 /* 11 */ V(1, 14, 2),
2849
2850 /* 0100 0110 ... */
2851 /* 00 */ V(14, 1, 2), /* 252 */
2852 /* 01 */ V(5, 13, 2),
2853 /* 10 */ V(13, 5, 2),
2854 /* 11 */ V(7, 12, 2),
2855
2856 /* 0100 0111 ... */
2857 /* 00 */ V(12, 7, 2), /* 256 */
2858 /* 01 */ V(4, 13, 2),
2859 /* 10 */ V(8, 11, 2),
2860 /* 11 */ V(11, 8, 2),
2861
2862 /* 0100 1000 ... */
2863 /* 00 */ V(13, 4, 2), /* 260 */
2864 /* 01 */ V(9, 10, 2),
2865 /* 10 */ V(10, 9, 2),
2866 /* 11 */ V(6, 12, 2),
2867
2868 /* 0100 1001 ... */
2869 /* 00 */ V(12, 6, 2), /* 264 */
2870 /* 01 */ V(3, 13, 2),
2871 /* 10 */ V(13, 3, 2),
2872 /* 11 */ V(2, 13, 2),
2873
2874 /* 0100 1010 ... */
2875 /* 00 */ V(13, 2, 2), /* 268 */
2876 /* 01 */ V(1, 13, 2),
2877 /* 10 */ V(7, 11, 2),
2878 /* 11 */ V(11, 7, 2),
2879
2880 /* 0100 1011 ... */
2881 /* 00 */ V(13, 1, 2), /* 272 */
2882 /* 01 */ V(5, 12, 2),
2883 /* 10 */ V(12, 5, 2),
2884 /* 11 */ V(8, 10, 2),
2885
2886 /* 0100 1100 ... */
2887 /* 00 */ V(10, 8, 2), /* 276 */
2888 /* 01 */ V(9, 9, 2),
2889 /* 10 */ V(4, 12, 2),
2890 /* 11 */ V(12, 4, 2),
2891
2892 /* 0100 1101 ... */
2893 /* 000 */ V(6, 11, 2), /* 280 */
2894 /* 001 */ V(6, 11, 2),
2895 /* 010 */ V(11, 6, 2),
2896 /* 011 */ V(11, 6, 2),
2897 /* 100 */ V(13, 0, 3),
2898 /* 101 */ V(0, 12, 3),
2899 /* 110 */ V(3, 12, 2),
2900 /* 111 */ V(3, 12, 2),
2901
2902 /* 0100 1110 ... */
2903 /* 00 */ V(12, 3, 2), /* 288 */
2904 /* 01 */ V(7, 10, 2),
2905 /* 10 */ V(10, 7, 2),
2906 /* 11 */ V(2, 12, 2),
2907
2908 /* 0100 1111 ... */
2909 /* 00 */ V(12, 2, 2), /* 292 */
2910 /* 01 */ V(5, 11, 2),
2911 /* 10 */ V(11, 5, 2),
2912 /* 11 */ V(1, 12, 2),
2913
2914 /* 0101 0000 ... */
2915 /* 00 */ V(8, 9, 2), /* 296 */
2916 /* 01 */ V(9, 8, 2),
2917 /* 10 */ V(12, 1, 2),
2918 /* 11 */ V(4, 11, 2),
2919
2920 /* 0101 0001 ... */
2921 /* 000 */ V(12, 0, 3), /* 300 */
2922 /* 001 */ V(0, 11, 3),
2923 /* 010 */ V(3, 11, 2),
2924 /* 011 */ V(3, 11, 2),
2925 /* 100 */ V(11, 0, 3),
2926 /* 101 */ V(0, 10, 3),
2927 /* 110 */ V(1, 10, 2),
2928 /* 111 */ V(1, 10, 2),
2929
2930 /* 0101 0010 ... */
2931 /* 00 */ V(11, 4, 1), /* 308 */
2932 /* 01 */ V(11, 4, 1),
2933 /* 10 */ V(6, 10, 2),
2934 /* 11 */ V(10, 6, 2),
2935
2936 /* 0101 0011 ... */
2937 /* 000 */ V(7, 9, 2), /* 312 */
2938 /* 001 */ V(7, 9, 2),
2939 /* 010 */ V(9, 7, 2),
2940 /* 011 */ V(9, 7, 2),
2941 /* 100 */ V(10, 0, 3),
2942 /* 101 */ V(0, 9, 3),
2943 /* 110 */ V(9, 0, 2),
2944 /* 111 */ V(9, 0, 2),
2945
2946 /* 0101 0100 ... */
2947 /* 0 */ V(11, 3, 1), /* 320 */
2948 /* 1 */ V(8, 8, 1),
2949
2950 /* 0101 0101 ... */
2951 /* 00 */ V(2, 11, 2), /* 322 */
2952 /* 01 */ V(5, 10, 2),
2953 /* 10 */ V(11, 2, 1),
2954 /* 11 */ V(11, 2, 1),
2955
2956 /* 0101 0110 ... */
2957 /* 00 */ V(10, 5, 2), /* 326 */
2958 /* 01 */ V(1, 11, 2),
2959 /* 10 */ V(11, 1, 2),
2960 /* 11 */ V(6, 9, 2),
2961
2962 /* 0101 0111 ... */
2963 /* 0 */ V(9, 6, 1), /* 330 */
2964 /* 1 */ V(10, 4, 1),
2965
2966 /* 0101 1000 ... */
2967 /* 00 */ V(4, 10, 2), /* 332 */
2968 /* 01 */ V(7, 8, 2),
2969 /* 10 */ V(8, 7, 1),
2970 /* 11 */ V(8, 7, 1),
2971
2972 /* 0101 1001 ... */
2973 /* 0 */ V(3, 10, 1), /* 336 */
2974 /* 1 */ V(10, 3, 1),
2975
2976 /* 0101 1010 ... */
2977 /* 0 */ V(5, 9, 1), /* 338 */
2978 /* 1 */ V(9, 5, 1),
2979
2980 /* 0101 1011 ... */
2981 /* 0 */ V(2, 10, 1), /* 340 */
2982 /* 1 */ V(10, 2, 1),
2983
2984 /* 0101 1100 ... */
2985 /* 0 */ V(10, 1, 1), /* 342 */
2986 /* 1 */ V(6, 8, 1),
2987
2988 /* 0101 1101 ... */
2989 /* 0 */ V(8, 6, 1), /* 344 */
2990 /* 1 */ V(7, 7, 1),
2991
2992 /* 0101 1110 ... */
2993 /* 0 */ V(4, 9, 1), /* 346 */
2994 /* 1 */ V(9, 4, 1),
2995
2996 /* 0101 1111 ... */
2997 /* 0 */ V(3, 9, 1), /* 348 */
2998 /* 1 */ V(9, 3, 1),
2999
3000 /* 0110 0000 ... */
3001 /* 0 */ V(5, 8, 1), /* 350 */
3002 /* 1 */ V(8, 5, 1),
3003
3004 /* 0110 0001 ... */
3005 /* 0 */ V(2, 9, 1), /* 352 */
3006 /* 1 */ V(6, 7, 1),
3007
3008 /* 0110 0010 ... */
3009 /* 0 */ V(7, 6, 1), /* 354 */
3010 /* 1 */ V(9, 2, 1),
3011
3012 /* 0110 0011 ... */
3013 /* 0 */ V(1, 9, 1), /* 356 */
3014 /* 1 */ V(9, 1, 1),
3015
3016 /* 0110 0100 ... */
3017 /* 0 */ V(4, 8, 1), /* 358 */
3018 /* 1 */ V(8, 4, 1),
3019
3020 /* 0110 0101 ... */
3021 /* 0 */ V(5, 7, 1), /* 360 */
3022 /* 1 */ V(7, 5, 1),
3023
3024 /* 0110 0110 ... */
3025 /* 0 */ V(3, 8, 1), /* 362 */
3026 /* 1 */ V(8, 3, 1),
3027
3028 /* 0110 0111 ... */
3029 /* 0 */ V(6, 6, 1), /* 364 */
3030 /* 1 */ V(2, 8, 1),
3031
3032 /* 0110 1000 ... */
3033 /* 0 */ V(8, 2, 1), /* 366 */
3034 /* 1 */ V(1, 8, 1),
3035
3036 /* 0110 1001 ... */
3037 /* 0 */ V(4, 7, 1), /* 368 */
3038 /* 1 */ V(7, 4, 1),
3039
3040 /* 0110 1010 ... */
3041 /* 00 */ V(8, 1, 1), /* 370 */
3042 /* 01 */ V(8, 1, 1),
3043 /* 10 */ V(0, 8, 2),
3044 /* 11 */ V(8, 0, 2),
3045
3046 /* 0110 1011 ... */
3047 /* 0 */ V(5, 6, 1), /* 374 */
3048 /* 1 */ V(6, 5, 1),
3049
3050 /* 0110 1100 ... */
3051 /* 00 */ V(1, 7, 1), /* 376 */
3052 /* 01 */ V(1, 7, 1),
3053 /* 10 */ V(0, 7, 2),
3054 /* 11 */ V(7, 0, 2),
3055
3056 /* 0110 1110 ... */
3057 /* 0 */ V(3, 7, 1), /* 380 */
3058 /* 1 */ V(2, 7, 1),
3059
3060 /* 0111 1100 ... */
3061 /* 0 */ V(0, 6, 1), /* 382 */
3062 /* 1 */ V(6, 0, 1),
3063
3064 /* 1000 0011 ... */
3065 /* 0 */ V(0, 5, 1), /* 384 */
3066 /* 1 */ V(5, 0, 1)
3067};
3068
3069# undef V
3070# undef PTR
3071
3072/* external tables */
3073
3074union huffquad const *const mad_huff_quad_table[2] = { hufftabA, hufftabB };
3075
3076struct hufftable const mad_huff_pair_table[32] = {
3077 /* 0 */ { hufftab0, 0, 0 },
3078 /* 1 */ { hufftab1, 0, 3 },
3079 /* 2 */ { hufftab2, 0, 3 },
3080 /* 3 */ { hufftab3, 0, 3 },
3081 /* 4 */ { 0 /* not used */ },
3082 /* 5 */ { hufftab5, 0, 3 },
3083 /* 6 */ { hufftab6, 0, 4 },
3084 /* 7 */ { hufftab7, 0, 4 },
3085 /* 8 */ { hufftab8, 0, 4 },
3086 /* 9 */ { hufftab9, 0, 4 },
3087 /* 10 */ { hufftab10, 0, 4 },
3088 /* 11 */ { hufftab11, 0, 4 },
3089 /* 12 */ { hufftab12, 0, 4 },
3090 /* 13 */ { hufftab13, 0, 4 },
3091 /* 14 */ { 0 /* not used */ },
3092 /* 15 */ { hufftab15, 0, 4 },
3093 /* 16 */ { hufftab16, 1, 4 },
3094 /* 17 */ { hufftab16, 2, 4 },
3095 /* 18 */ { hufftab16, 3, 4 },
3096 /* 19 */ { hufftab16, 4, 4 },
3097 /* 20 */ { hufftab16, 6, 4 },
3098 /* 21 */ { hufftab16, 8, 4 },
3099 /* 22 */ { hufftab16, 10, 4 },
3100 /* 23 */ { hufftab16, 13, 4 },
3101 /* 24 */ { hufftab24, 4, 4 },
3102 /* 25 */ { hufftab24, 5, 4 },
3103 /* 26 */ { hufftab24, 6, 4 },
3104 /* 27 */ { hufftab24, 7, 4 },
3105 /* 28 */ { hufftab24, 8, 4 },
3106 /* 29 */ { hufftab24, 9, 4 },
3107 /* 30 */ { hufftab24, 11, 4 },
3108 /* 31 */ { hufftab24, 13, 4 }
3109};
diff --git a/apps/codecs/libmad/huffman.h b/apps/codecs/libmad/huffman.h
new file mode 100644
index 0000000000..e4c1b35d93
--- /dev/null
+++ b/apps/codecs/libmad/huffman.h
@@ -0,0 +1,66 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2004 Underbit Technologies, Inc.
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/apps/codecs/libmad/imdct_l_arm.S b/apps/codecs/libmad/imdct_l_arm.S
new file mode 100644
index 0000000000..b86ba1120d
--- /dev/null
+++ b/apps/codecs/libmad/imdct_l_arm.S
@@ -0,0 +1,1000 @@
1/*****************************************************************************
2* Copyright (C) 2000-2001 Andre McCurdy <armccurdy@yahoo.co.uk>
3*
4* This program is free software. you can redistribute it and/or modify
5* it under the terms of the GNU General Public License as published by
6* the Free Software Foundation@ either version 2 of the License, or
7* (at your option) any later version.
8*
9* This program is distributed in the hope that it will be useful,
10* but WITHOUT ANY WARRANTY, without even the implied warranty of
11* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12* GNU General Public License for more details.
13*
14* You should have received a copy of the GNU General Public License
15* along with this program@ if not, write to the Free Software
16* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17*
18*****************************************************************************
19*
20* Notes:
21*
22*
23*****************************************************************************
24*
25* $Id$
26*
27* 2001/03/24: Andre McCurdy <armccurdy@yahoo.co.uk>
28* - Corrected PIC unsafe loading of address of 'imdct36_long_karray'
29*
30* 2000/09/20: Robert Leslie <rob@mars.org>
31* - Added a global symbol with leading underscore per suggestion of
32* Simon Burge to support linking with the a.out format.
33*
34* 2000/09/15: Robert Leslie <rob@mars.org>
35* - Fixed a small bug where flags were changed before a conditional branch.
36*
37* 2000/09/15: Andre McCurdy <armccurdy@yahoo.co.uk>
38* - Applied Nicolas Pitre's rounding optimisation in all remaining places.
39*
40* 2000/09/09: Nicolas Pitre <nico@cam.org>
41* - Optimized rounding + scaling operations.
42*
43* 2000/08/09: Andre McCurdy <armccurdy@yahoo.co.uk>
44* - Original created.
45*
46****************************************************************************/
47
48
49/*
50 On entry:
51
52 r0 = pointer to 18 element input array
53 r1 = pointer to 36 element output array
54 r2 = windowing block type
55
56
57 Stack frame created during execution of the function:
58
59 Initial Holds:
60 Stack
61 pointer
62 minus:
63
64 0
65 4 lr
66 8 r11
67 12 r10
68 16 r9
69 20 r8
70 24 r7
71 28 r6
72 32 r5
73 36 r4
74
75 40 r2 : windowing block type
76
77 44 ct00 high
78 48 ct00 low
79 52 ct01 high
80 56 ct01 low
81 60 ct04 high
82 64 ct04 low
83 68 ct06 high
84 72 ct06 low
85 76 ct05 high
86 80 ct05 low
87 84 ct03 high
88 88 ct03 low
89 92 -ct05 high
90 96 -ct05 low
91 100 -ct07 high
92 104 -ct07 low
93 108 ct07 high
94 112 ct07 low
95 116 ct02 high
96 120 ct02 low
97*/
98
99#define BLOCK_MODE_NORMAL 0
100#define BLOCK_MODE_START 1
101#define BLOCK_MODE_STOP 3
102
103
104#define X0 0x00
105#define X1 0x04
106#define X2 0x08
107#define X3 0x0C
108#define X4 0x10
109#define X5 0x14
110#define X6 0x18
111#define X7 0x1c
112#define X8 0x20
113#define X9 0x24
114#define X10 0x28
115#define X11 0x2c
116#define X12 0x30
117#define X13 0x34
118#define X14 0x38
119#define X15 0x3c
120#define X16 0x40
121#define X17 0x44
122
123#define x0 0x00
124#define x1 0x04
125#define x2 0x08
126#define x3 0x0C
127#define x4 0x10
128#define x5 0x14
129#define x6 0x18
130#define x7 0x1c
131#define x8 0x20
132#define x9 0x24
133#define x10 0x28
134#define x11 0x2c
135#define x12 0x30
136#define x13 0x34
137#define x14 0x38
138#define x15 0x3c
139#define x16 0x40
140#define x17 0x44
141#define x18 0x48
142#define x19 0x4c
143#define x20 0x50
144#define x21 0x54
145#define x22 0x58
146#define x23 0x5c
147#define x24 0x60
148#define x25 0x64
149#define x26 0x68
150#define x27 0x6c
151#define x28 0x70
152#define x29 0x74
153#define x30 0x78
154#define x31 0x7c
155#define x32 0x80
156#define x33 0x84
157#define x34 0x88
158#define x35 0x8c
159
160#define K00 0x0ffc19fd
161#define K01 0x00b2aa3e
162#define K02 0x0fdcf549
163#define K03 0x0216a2a2
164#define K04 0x0f9ee890
165#define K05 0x03768962
166#define K06 0x0f426cb5
167#define K07 0x04cfb0e2
168#define K08 0x0ec835e8
169#define K09 0x061f78aa
170#define K10 0x0e313245
171#define K11 0x07635284
172#define K12 0x0d7e8807
173#define K13 0x0898c779
174#define K14 0x0cb19346
175#define K15 0x09bd7ca0
176#define K16 0x0bcbe352
177#define K17 0x0acf37ad
178
179#define minus_K02 0xf0230ab7
180
181#define WL0 0x00b2aa3e
182#define WL1 0x0216a2a2
183#define WL2 0x03768962
184#define WL3 0x04cfb0e2
185#define WL4 0x061f78aa
186#define WL5 0x07635284
187#define WL6 0x0898c779
188#define WL7 0x09bd7ca0
189#define WL8 0x0acf37ad
190#define WL9 0x0bcbe352
191#define WL10 0x0cb19346
192#define WL11 0x0d7e8807
193#define WL12 0x0e313245
194#define WL13 0x0ec835e8
195#define WL14 0x0f426cb5
196#define WL15 0x0f9ee890
197#define WL16 0x0fdcf549
198#define WL17 0x0ffc19fd
199
200
201@*****************************************************************************
202
203
204 .text
205 .align
206
207 .global III_imdct_l
208 .global _III_imdct_l
209
210III_imdct_l:
211_III_imdct_l:
212
213 stmdb sp!, { r2, r4 - r11, lr } @ all callee saved regs, plus arg3
214
215 ldr r4, =K08 @ r4 = K08
216 ldr r5, =K09 @ r5 = K09
217 ldr r8, [r0, #X4] @ r8 = X4
218 ldr r9, [r0, #X13] @ r9 = X13
219 rsb r6, r4, #0 @ r6 = -K08
220 rsb r7, r5, #0 @ r7 = -K09
221
222 smull r2, r3, r4, r8 @ r2..r3 = (X4 * K08)
223 smlal r2, r3, r5, r9 @ r2..r3 = (X4 * K08) + (X13 * K09) = ct01
224
225 smull r10, lr, r8, r5 @ r10..lr = (X4 * K09)
226 smlal r10, lr, r9, r6 @ r10..lr = (X4 * K09) + (X13 * -K08) = ct00
227
228 ldr r8, [r0, #X7] @ r8 = X7
229 ldr r9, [r0, #X16] @ r9 = X16
230
231 stmdb sp!, { r2, r3, r10, lr } @ stack ct00_h, ct00_l, ct01_h, ct01_l
232
233 add r8, r8, r9 @ r8 = (X7 + X16)
234 ldr r9, [r0, #X1] @ r9 = X1
235
236 smlal r2, r3, r6, r8 @ r2..r3 = ct01 + ((X7 + X16) * -K08)
237 smlal r2, r3, r7, r9 @ r2..r3 += (X1 * -K09)
238
239 ldr r7, [r0, #X10] @ r7 = X10
240
241 rsbs r10, r10, #0
242 rsc lr, lr, #0 @ r10..lr = -ct00
243
244 smlal r2, r3, r5, r7 @ r2..r3 += (X10 * K09) = ct06
245
246 smlal r10, lr, r9, r6 @ r10..lr = -ct00 + ( X1 * -K08)
247 smlal r10, lr, r8, r5 @ r10..lr += ((X7 + X16) * K09)
248 smlal r10, lr, r7, r4 @ r10..lr += ( X10 * K08) = ct04
249
250 stmdb sp!, { r2, r3, r10, lr } @ stack ct04_h, ct04_l, ct06_h, ct06_l
251
252 @----
253
254 ldr r7, [r0, #X0]
255 ldr r8, [r0, #X11]
256 ldr r9, [r0, #X12]
257 sub r7, r7, r8
258 sub r7, r7, r9 @ r7 = (X0 - X11 -X12) = ct14
259
260 ldr r9, [r0, #X3]
261 ldr r8, [r0, #X8]
262 ldr r11, [r0, #X15]
263 sub r8, r8, r9
264 add r8, r8, r11 @ r8 = (X8 - X3 + X15) = ct16
265
266 add r11, r7, r8 @ r11 = ct14 + ct16 = ct18
267
268 smlal r2, r3, r6, r11 @ r2..r3 = ct06 + ((X0 - X11 - X3 + X15 + X8 - X12) * -K08)
269
270 ldr r6, [r0, #X2]
271 ldr r9, [r0, #X9]
272 ldr r12, [r0, #X14]
273 sub r6, r6, r9
274 sub r6, r6, r12 @ r6 = (X2 - X9 - X14) = ct15
275
276 ldr r9, [r0, #X5]
277 ldr r12, [r0, #X6]
278 sub r9, r9, r12
279 ldr r12, [r0, #X17]
280 sub r9, r9, r12 @ r9 = (X5 - X6 - X17) = ct17
281
282 add r12, r9, r6 @ r12 = ct15 + ct17 = ct19
283
284 smlal r2, r3, r5, r12 @ r2..r3 += ((X2 - X9 + X5 - X6 - X17 - X14) * K09)
285
286 smlal r10, lr, r11, r5 @ r10..lr = ct04 + (ct18 * K09)
287 smlal r10, lr, r12, r4 @ r10..lr = ct04 + (ct18 * K09) + (ct19 * K08)
288
289 movs r2, r2, lsr #28
290 adc r2, r2, r3, lsl #4 @ r2 = bits[59..28] of r2..r3
291 str r2, [r1, #x22] @ store result x22
292
293 movs r10, r10, lsr #28
294 adc r10, r10, lr, lsl #4 @ r10 = bits[59..28] of r10..lr
295 str r10, [r1, #x4] @ store result x4
296
297 @----
298
299 ldmia sp, { r2, r3, r4, r5 } @ r2..r3 = ct06, r4..r5 = ct04 (dont update sp)
300
301 @ r2..r3 = ct06
302 @ r4..r5 = ct04
303 @ r6 = ct15
304 @ r7 = ct14
305 @ r8 = ct16
306 @ r9 = ct17
307 @ r10 = .
308 @ r11 = .
309 @ r12 = .
310 @ lr = .
311
312 ldr r10, =K03 @ r10 = K03
313 ldr lr, =K15 @ lr = K15
314
315 smlal r2, r3, r10, r7 @ r2..r3 = ct06 + (ct14 * K03)
316 smlal r4, r5, lr, r7 @ r4..r5 = ct04 + (ct14 * K15)
317
318 ldr r12, =K14 @ r12 = K14
319 rsb r10, r10, #0 @ r10 = -K03
320
321 smlal r2, r3, lr, r6 @ r2..r3 += (ct15 * K15)
322 smlal r4, r5, r10, r6 @ r4..r5 += (ct15 * -K03)
323 smlal r2, r3, r12, r8 @ r2..r3 += (ct16 * K14)
324
325 ldr r11, =minus_K02 @ r11 = -K02
326 rsb r12, r12, #0 @ r12 = -K14
327
328 smlal r4, r5, r12, r9 @ r4..r5 += (ct17 * -K14)
329 smlal r2, r3, r11, r9 @ r2..r3 += (ct17 * -K02)
330 smlal r4, r5, r11, r8 @ r4..r5 += (ct16 * -K02)
331
332 movs r2, r2, lsr #28
333 adc r2, r2, r3, lsl #4 @ r2 = bits[59..28] of r2..r3
334 str r2, [r1, #x7] @ store result x7
335
336 movs r4, r4, lsr #28
337 adc r4, r4, r5, lsl #4 @ r4 = bits[59..28] of r4..r5
338 str r4, [r1, #x1] @ store result x1
339
340 @----
341
342 ldmia sp, { r2, r3, r4, r5 } @ r2..r3 = ct06, r4..r5 = ct04 (dont update sp)
343
344 @ r2..r3 = ct06
345 @ r4..r5 = ct04
346 @ r6 = ct15
347 @ r7 = ct14
348 @ r8 = ct16
349 @ r9 = ct17
350 @ r10 = -K03
351 @ r11 = -K02
352 @ r12 = -K14
353 @ lr = K15
354
355 rsbs r2, r2, #0
356 rsc r3, r3, #0 @ r2..r3 = -ct06
357
358 smlal r2, r3, r12, r7 @ r2..r3 = -ct06 + (ct14 * -K14)
359 smlal r2, r3, r10, r8 @ r2..r3 += (ct16 * -K03)
360
361 smlal r4, r5, r12, r6 @ r4..r5 = ct04 + (ct15 * -K14)
362 smlal r4, r5, r10, r9 @ r4..r5 += (ct17 * -K03)
363 smlal r4, r5, lr, r8 @ r4..r5 += (ct16 * K15)
364 smlal r4, r5, r11, r7 @ r4..r5 += (ct14 * -K02)
365
366 rsb lr, lr, #0 @ lr = -K15
367 rsb r11, r11, #0 @ r11 = K02
368
369 smlal r2, r3, lr, r9 @ r2..r3 += (ct17 * -K15)
370 smlal r2, r3, r11, r6 @ r2..r3 += (ct15 * K02)
371
372 movs r4, r4, lsr #28
373 adc r4, r4, r5, lsl #4 @ r4 = bits[59..28] of r4..r5
374 str r4, [r1, #x25] @ store result x25
375
376 movs r2, r2, lsr #28
377 adc r2, r2, r3, lsl #4 @ r2 = bits[59..28] of r2..r3
378 str r2, [r1, #x19] @ store result x19
379
380 @----
381
382 ldr r2, [sp, #16] @ r2 = ct01_l
383 ldr r3, [sp, #20] @ r3 = ct01_h
384
385 ldr r6, [r0, #X1]
386 ldr r8, [r0, #X7]
387 ldr r9, [r0, #X10]
388 ldr r7, [r0, #X16]
389
390 rsbs r2, r2, #0
391 rsc r3, r3, #0 @ r2..r3 = -ct01
392
393 mov r4, r2
394 mov r5, r3 @ r4..r5 = -ct01
395
396 @ r2..r3 = -ct01
397 @ r4..r5 = -ct01
398 @ r6 = X1
399 @ r7 = X16
400 @ r8 = X7
401 @ r9 = X10
402 @ r10 = -K03
403 @ r11 = K02
404 @ r12 = -K14
405 @ lr = -K15
406
407 smlal r4, r5, r12, r7 @ r4..r5 = -ct01 + (X16 * -K14)
408 smlal r2, r3, lr, r9 @ r2..r3 = -ct01 + (X10 * -K15)
409
410 smlal r4, r5, r10, r8 @ r4..r5 += (X7 * -K03)
411 smlal r2, r3, r10, r7 @ r2..r3 += (X16 * -K03)
412
413 smlal r4, r5, r11, r9 @ r4..r5 += (X10 * K02)
414 smlal r2, r3, r12, r8 @ r2..r3 += (X7 * -K14)
415
416 rsb lr, lr, #0 @ lr = K15
417 rsb r11, r11, #0 @ r11 = -K02
418
419 smlal r4, r5, lr, r6 @ r4..r5 += (X1 * K15) = ct05
420 smlal r2, r3, r11, r6 @ r2..r3 += (X1 * -K02) = ct03
421
422 stmdb sp!, { r2, r3, r4, r5 } @ stack ct05_h, ct05_l, ct03_h, ct03_l
423
424 rsbs r4, r4, #0
425 rsc r5, r5, #0 @ r4..r5 = -ct05
426
427 stmdb sp!, { r4, r5 } @ stack -ct05_h, -ct05_l
428
429 ldr r2, [sp, #48] @ r2 = ct00_l
430 ldr r3, [sp, #52] @ r3 = ct00_h
431
432 rsb r10, r10, #0 @ r10 = K03
433
434 rsbs r4, r2, #0
435 rsc r5, r3, #0 @ r4..r5 = -ct00
436
437 @ r2..r3 = ct00
438 @ r4..r5 = -ct00
439 @ r6 = X1
440 @ r7 = X16
441 @ r8 = X7
442 @ r9 = X10
443 @ r10 = K03
444 @ r11 = -K02
445 @ r12 = -K14
446 @ lr = K15
447
448 smlal r4, r5, r10, r6 @ r4..r5 = -ct00 + (X1 * K03)
449 smlal r2, r3, r10, r9 @ r2..r3 = ct00 + (X10 * K03)
450
451 smlal r4, r5, r12, r9 @ r4..r5 += (X10 * -K14)
452 smlal r2, r3, r12, r6 @ r2..r3 += (X1 * -K14)
453
454 smlal r4, r5, r11, r7 @ r4..r5 += (X16 * -K02)
455 smlal r4, r5, lr, r8 @ r4..r5 += (X7 * K15) = ct07
456
457 rsb lr, lr, #0 @ lr = -K15
458 rsb r11, r11, #0 @ r11 = K02
459
460 smlal r2, r3, r11, r8 @ r2..r3 += (X7 * K02)
461 smlal r2, r3, lr, r7 @ r2..r3 += (X16 * -K15) = ct02
462
463 rsbs r6, r4, #0
464 rsc r7, r5, #0 @ r6..r7 = -ct07
465
466 stmdb sp!, { r2 - r7 } @ stack -ct07_h, -ct07_l, ct07_h, ct07_l, ct02_h, ct02_l
467
468
469 @----
470
471 add r2, pc, #(imdct36_long_karray-.-8) @ r2 = base address of Knn array (PIC safe ?)
472
473
474loop:
475 ldr r12, [r0, #X0]
476
477 ldmia r2!, { r5 - r11 } @ first 7 words from Karray element
478
479 smull r3, r4, r5, r12 @ sum = (Kxx * X0)
480 ldr r12, [r0, #X2]
481 ldr r5, [r0, #X3]
482 smlal r3, r4, r6, r12 @ sum += (Kxx * X2)
483 ldr r12, [r0, #X5]
484 ldr r6, [r0, #X6]
485 smlal r3, r4, r7, r5 @ sum += (Kxx * X3)
486 smlal r3, r4, r8, r12 @ sum += (Kxx * X5)
487 ldr r12, [r0, #X8]
488 ldr r5, [r0, #X9]
489 smlal r3, r4, r9, r6 @ sum += (Kxx * X6)
490 smlal r3, r4, r10, r12 @ sum += (Kxx * X8)
491 smlal r3, r4, r11, r5 @ sum += (Kxx * X9)
492
493 ldmia r2!, { r5 - r10 } @ final 6 words from Karray element
494
495 ldr r11, [r0, #X11]
496 ldr r12, [r0, #X12]
497 smlal r3, r4, r5, r11 @ sum += (Kxx * X11)
498 ldr r11, [r0, #X14]
499 ldr r5, [r0, #X15]
500 smlal r3, r4, r6, r12 @ sum += (Kxx * X12)
501 smlal r3, r4, r7, r11 @ sum += (Kxx * X14)
502 ldr r11, [r0, #X17]
503 smlal r3, r4, r8, r5 @ sum += (Kxx * X15)
504 smlal r3, r4, r9, r11 @ sum += (Kxx * X17)
505
506 add r5, sp, r10, lsr #16 @ create index back into stack for required ctxx
507
508 ldmia r5, { r6, r7 } @ r6..r7 = ctxx
509
510 mov r8, r10, lsl #16 @ push ctxx index off the top end
511
512 adds r3, r3, r6 @ add low words
513 adc r4, r4, r7 @ add high words, with carry
514 movs r3, r3, lsr #28
515 adc r3, r3, r4, lsl #4 @ r3 = bits[59..28] of r3..r4
516
517 str r3, [r1, r8, lsr #24] @ push completion flag off the bottom end
518
519 movs r8, r8, lsl #8 @ push result location index off the top end
520 beq loop @ loop back if completion flag not set
521 b imdct_l_windowing @ branch to windowing stage if looping finished
522
523imdct36_long_karray:
524
525 .word K17, -K13, K10, -K06, -K05, K01, -K00, K04, -K07, K11, K12, -K16, 0x00000000
526 .word K13, K07, K16, K01, K10, -K05, K04, -K11, K00, -K17, K06, -K12, 0x00200800
527 .word K11, K17, K05, K12, -K01, K06, -K07, K00, -K13, K04, -K16, K10, 0x00200c00
528 .word K07, K00, -K12, K05, -K16, -K10, K11, -K17, K04, K13, K01, K06, 0x00001400
529 .word K05, K10, -K00, -K17, K07, -K13, K12, K06, -K16, K01, -K11, -K04, 0x00181800
530 .word K01, K05, -K07, -K11, K13, K17, -K16, -K12, K10, K06, -K04, -K00, 0x00102000
531 .word -K16, K12, -K11, K07, K04, -K00, -K01, K05, -K06, K10, K13, -K17, 0x00284800
532 .word -K12, K06, K17, -K00, -K11, K04, K05, -K10, K01, K16, -K07, -K13, 0x00085000
533 .word -K10, K16, K04, -K13, -K00, K07, K06, -K01, -K12, -K05, K17, K11, 0x00105400
534 .word -K06, -K01, K13, K04, K17, -K11, -K10, -K16, -K05, K12, K00, K07, 0x00185c00
535 .word -K04, -K11, -K01, K16, K06, K12, K13, -K07, -K17, -K00, -K10, -K05, 0x00006000
536 .word -K00, -K04, -K06, -K10, -K12, -K16, -K17, -K13, -K11, -K07, -K05, -K01, 0x00206801
537
538
539 @----
540 @-------------------------------------------------------------------------
541 @----
542
543imdct_l_windowing:
544
545 ldr r11, [sp, #80] @ fetch function parameter 3 from out of the stack
546 ldmia r1!, { r0, r2 - r9 } @ load 9 words from x0, update pointer
547
548 @ r0 = x0
549 @ r1 = &x[9]
550 @ r2 = x1
551 @ r3 = x2
552 @ r4 = x3
553 @ r5 = x4
554 @ r6 = x5
555 @ r7 = x6
556 @ r8 = x7
557 @ r9 = x8
558 @ r10 = .
559 @ r11 = window mode: (0 == normal), (1 == start block), (3 == stop block)
560 @ r12 = .
561 @ lr = .
562
563 cmp r11, #BLOCK_MODE_STOP @ setup flags
564 rsb r10, r0, #0 @ r10 = -x0 (DONT change flags !!)
565 beq stop_block_x0_to_x17
566
567
568 @ start and normal blocks are treated the same for x[0]..x[17]
569
570normal_block_x0_to_x17:
571
572 ldr r12, =WL9 @ r12 = window_l[9]
573
574 rsb r0, r9, #0 @ r0 = -x8
575 rsb r9, r2, #0 @ r9 = -x1
576 rsb r2, r8, #0 @ r2 = -x7
577 rsb r8, r3, #0 @ r8 = -x2
578 rsb r3, r7, #0 @ r3 = -x6
579 rsb r7, r4, #0 @ r7 = -x3
580 rsb r4, r6, #0 @ r4 = -x5
581 rsb r6, r5, #0 @ r6 = -x4
582
583 @ r0 = -x8
584 @ r1 = &x[9]
585 @ r2 = -x7
586 @ r3 = -x6
587 @ r4 = -x5
588 @ r5 = .
589 @ r6 = -x4
590 @ r7 = -x3
591 @ r8 = -x2
592 @ r9 = -x1
593 @ r10 = -x0
594 @ r11 = window mode: (0 == normal), (1 == start block), (3 == stop block)
595 @ r12 = window_l[9]
596 @ lr = .
597
598 smull r5, lr, r12, r0 @ r5..lr = (window_l[9] * (x[9] == -x[8]))
599 ldr r12, =WL10 @ r12 = window_l[10]
600 movs r5, r5, lsr #28
601 adc r0, r5, lr, lsl #4 @ r0 = bits[59..28] of windowed x9
602
603 smull r5, lr, r12, r2 @ r5..lr = (window_l[10] * (x[10] == -x[7]))
604 ldr r12, =WL11 @ r12 = window_l[11]
605 movs r5, r5, lsr #28
606 adc r2, r5, lr, lsl #4 @ r2 = bits[59..28] of windowed x10
607
608 smull r5, lr, r12, r3 @ r5..lr = (window_l[11] * (x[11] == -x[6]))
609 ldr r12, =WL12 @ r12 = window_l[12]
610 movs r5, r5, lsr #28
611 adc r3, r5, lr, lsl #4 @ r3 = bits[59..28] of windowed x11
612
613 smull r5, lr, r12, r4 @ r5..lr = (window_l[12] * (x[12] == -x[5]))
614 ldr r12, =WL13 @ r12 = window_l[13]
615 movs r5, r5, lsr #28
616 adc r4, r5, lr, lsl #4 @ r4 = bits[59..28] of windowed x12
617
618 smull r5, lr, r12, r6 @ r5..lr = (window_l[13] * (x[13] == -x[4]))
619 ldr r12, =WL14 @ r12 = window_l[14]
620 movs r5, r5, lsr #28
621 adc r6, r5, lr, lsl #4 @ r6 = bits[59..28] of windowed x13
622
623 smull r5, lr, r12, r7 @ r5..lr = (window_l[14] * (x[14] == -x[3]))
624 ldr r12, =WL15 @ r12 = window_l[15]
625 movs r5, r5, lsr #28
626 adc r7, r5, lr, lsl #4 @ r7 = bits[59..28] of windowed x14
627
628 smull r5, lr, r12, r8 @ r5..lr = (window_l[15] * (x[15] == -x[2]))
629 ldr r12, =WL16 @ r12 = window_l[16]
630 movs r5, r5, lsr #28
631 adc r8, r5, lr, lsl #4 @ r8 = bits[59..28] of windowed x15
632
633 smull r5, lr, r12, r9 @ r5..lr = (window_l[16] * (x[16] == -x[1]))
634 ldr r12, =WL17 @ r12 = window_l[17]
635 movs r5, r5, lsr #28
636 adc r9, r5, lr, lsl #4 @ r9 = bits[59..28] of windowed x16
637
638 smull r5, lr, r12, r10 @ r5..lr = (window_l[17] * (x[17] == -x[0]))
639 ldr r12, =WL0 @ r12 = window_l[0]
640 movs r5, r5, lsr #28
641 adc r10, r5, lr, lsl #4 @ r10 = bits[59..28] of windowed x17
642
643
644 stmia r1, { r0, r2 - r4, r6 - r10 } @ store windowed x[9] .. x[17]
645 ldmdb r1!, { r0, r2 - r9 } @ load 9 words downto (and including) x0
646
647
648 smull r10, lr, r12, r0 @ r10..lr = (window_l[0] * x[0])
649 ldr r12, =WL1 @ r12 = window_l[1]
650 movs r10, r10, lsr #28
651 adc r0, r10, lr, lsl #4 @ r0 = bits[59..28] of windowed x0
652
653 smull r10, lr, r12, r2 @ r10..lr = (window_l[1] * x[1])
654 ldr r12, =WL2 @ r12 = window_l[2]
655 movs r10, r10, lsr #28
656 adc r2, r10, lr, lsl #4 @ r2 = bits[59..28] of windowed x1
657
658 smull r10, lr, r12, r3 @ r10..lr = (window_l[2] * x[2])
659 ldr r12, =WL3 @ r12 = window_l[3]
660 movs r10, r10, lsr #28
661 adc r3, r10, lr, lsl #4 @ r3 = bits[59..28] of windowed x2
662
663 smull r10, lr, r12, r4 @ r10..lr = (window_l[3] * x[3])
664 ldr r12, =WL4 @ r12 = window_l[4]
665 movs r10, r10, lsr #28
666 adc r4, r10, lr, lsl #4 @ r4 = bits[59..28] of windowed x3
667
668 smull r10, lr, r12, r5 @ r10..lr = (window_l[4] * x[4])
669 ldr r12, =WL5 @ r12 = window_l[5]
670 movs r10, r10, lsr #28
671 adc r5, r10, lr, lsl #4 @ r5 = bits[59..28] of windowed x4
672
673 smull r10, lr, r12, r6 @ r10..lr = (window_l[5] * x[5])
674 ldr r12, =WL6 @ r12 = window_l[6]
675 movs r10, r10, lsr #28
676 adc r6, r10, lr, lsl #4 @ r6 = bits[59..28] of windowed x5
677
678 smull r10, lr, r12, r7 @ r10..lr = (window_l[6] * x[6])
679 ldr r12, =WL7 @ r12 = window_l[7]
680 movs r10, r10, lsr #28
681 adc r7, r10, lr, lsl #4 @ r7 = bits[59..28] of windowed x6
682
683 smull r10, lr, r12, r8 @ r10..lr = (window_l[7] * x[7])
684 ldr r12, =WL8 @ r12 = window_l[8]
685 movs r10, r10, lsr #28
686 adc r8, r10, lr, lsl #4 @ r8 = bits[59..28] of windowed x7
687
688 smull r10, lr, r12, r9 @ r10..lr = (window_l[8] * x[8])
689 movs r10, r10, lsr #28
690 adc r9, r10, lr, lsl #4 @ r9 = bits[59..28] of windowed x8
691
692 stmia r1, { r0, r2 - r9 } @ store windowed x[0] .. x[8]
693
694 cmp r11, #BLOCK_MODE_START
695 beq start_block_x18_to_x35
696
697
698 @----
699
700
701normal_block_x18_to_x35:
702
703 ldr r11, =WL3 @ r11 = window_l[3]
704 ldr r12, =WL4 @ r12 = window_l[4]
705
706 add r1, r1, #(18*4) @ r1 = &x[18]
707
708 ldmia r1!, { r0, r2 - r4, r6 - r10 } @ load 9 words from x18, update pointer
709
710 @ r0 = x18
711 @ r1 = &x[27]
712 @ r2 = x19
713 @ r3 = x20
714 @ r4 = x21
715 @ r5 = .
716 @ r6 = x22
717 @ r7 = x23
718 @ r8 = x24
719 @ r9 = x25
720 @ r10 = x26
721 @ r11 = window_l[3]
722 @ r12 = window_l[4]
723 @ lr = .
724
725 smull r5, lr, r12, r6 @ r5..lr = (window_l[4] * (x[22] == x[31]))
726 movs r5, r5, lsr #28
727 adc r5, r5, lr, lsl #4 @ r5 = bits[59..28] of windowed x31
728
729 smull r6, lr, r11, r4 @ r5..lr = (window_l[3] * (x[21] == x[32]))
730 ldr r12, =WL5 @ r12 = window_l[5]
731 movs r6, r6, lsr #28
732 adc r6, r6, lr, lsl #4 @ r6 = bits[59..28] of windowed x32
733
734 smull r4, lr, r12, r7 @ r4..lr = (window_l[5] * (x[23] == x[30]))
735 ldr r11, =WL1 @ r11 = window_l[1]
736 ldr r12, =WL2 @ r12 = window_l[2]
737 movs r4, r4, lsr #28
738 adc r4, r4, lr, lsl #4 @ r4 = bits[59..28] of windowed x30
739
740 smull r7, lr, r12, r3 @ r7..lr = (window_l[2] * (x[20] == x[33]))
741 ldr r12, =WL6 @ r12 = window_l[6]
742 movs r7, r7, lsr #28
743 adc r7, r7, lr, lsl #4 @ r7 = bits[59..28] of windowed x33
744
745 smull r3, lr, r12, r8 @ r3..lr = (window_l[6] * (x[24] == x[29]))
746 movs r3, r3, lsr #28
747 adc r3, r3, lr, lsl #4 @ r3 = bits[59..28] of windowed x29
748
749 smull r8, lr, r11, r2 @ r7..lr = (window_l[1] * (x[19] == x[34]))
750 ldr r12, =WL7 @ r12 = window_l[7]
751 ldr r11, =WL8 @ r11 = window_l[8]
752 movs r8, r8, lsr #28
753 adc r8, r8, lr, lsl #4 @ r8 = bits[59..28] of windowed x34
754
755 smull r2, lr, r12, r9 @ r7..lr = (window_l[7] * (x[25] == x[28]))
756 ldr r12, =WL0 @ r12 = window_l[0]
757 movs r2, r2, lsr #28
758 adc r2, r2, lr, lsl #4 @ r2 = bits[59..28] of windowed x28
759
760 smull r9, lr, r12, r0 @ r3..lr = (window_l[0] * (x[18] == x[35]))
761 movs r9, r9, lsr #28
762 adc r9, r9, lr, lsl #4 @ r9 = bits[59..28] of windowed x35
763
764 smull r0, lr, r11, r10 @ r7..lr = (window_l[8] * (x[26] == x[27]))
765 ldr r11, =WL16 @ r11 = window_l[16]
766 ldr r12, =WL17 @ r12 = window_l[17]
767 movs r0, r0, lsr #28
768 adc r0, r0, lr, lsl #4 @ r0 = bits[59..28] of windowed x27
769
770
771 stmia r1, { r0, r2 - r9 } @ store windowed x[27] .. x[35]
772 ldmdb r1!, { r0, r2 - r9 } @ load 9 words downto (and including) x18
773
774
775 smull r10, lr, r12, r0 @ r10..lr = (window_l[17] * x[18])
776 movs r10, r10, lsr #28
777 adc r0, r10, lr, lsl #4 @ r0 = bits[59..28] of windowed x0
778
779 smull r10, lr, r11, r2 @ r10..lr = (window_l[16] * x[19])
780 ldr r11, =WL14 @ r11 = window_l[14]
781 ldr r12, =WL15 @ r12 = window_l[15]
782 movs r10, r10, lsr #28
783 adc r2, r10, lr, lsl #4 @ r2 = bits[59..28] of windowed x1
784
785 smull r10, lr, r12, r3 @ r10..lr = (window_l[15] * x[20])
786 movs r10, r10, lsr #28
787 adc r3, r10, lr, lsl #4 @ r3 = bits[59..28] of windowed x2
788
789 smull r10, lr, r11, r4 @ r10..lr = (window_l[14] * x[21])
790 ldr r11, =WL12 @ r11 = window_l[12]
791 ldr r12, =WL13 @ r12 = window_l[13]
792 movs r10, r10, lsr #28
793 adc r4, r10, lr, lsl #4 @ r4 = bits[59..28] of windowed x3
794
795 smull r10, lr, r12, r5 @ r10..lr = (window_l[13] * x[22])
796 movs r10, r10, lsr #28
797 adc r5, r10, lr, lsl #4 @ r5 = bits[59..28] of windowed x4
798
799 smull r10, lr, r11, r6 @ r10..lr = (window_l[12] * x[23])
800 ldr r11, =WL10 @ r12 = window_l[10]
801 ldr r12, =WL11 @ r12 = window_l[11]
802 movs r10, r10, lsr #28
803 adc r6, r10, lr, lsl #4 @ r6 = bits[59..28] of windowed x5
804
805 smull r10, lr, r12, r7 @ r10..lr = (window_l[11] * x[24])
806 movs r10, r10, lsr #28
807 adc r7, r10, lr, lsl #4 @ r7 = bits[59..28] of windowed x6
808
809 smull r10, lr, r11, r8 @ r10..lr = (window_l[10] * x[25])
810 ldr r12, =WL9 @ r12 = window_l[9]
811 movs r10, r10, lsr #28
812 adc r8, r10, lr, lsl #4 @ r8 = bits[59..28] of windowed x7
813
814 smull r10, lr, r12, r9 @ r10..lr = (window_l[9] * x[26])
815
816 movs r10, r10, lsr #28
817 adc r9, r10, lr, lsl #4 @ r9 = bits[59..28] of windowed x8
818
819 stmia r1, { r0, r2 - r9 } @ store windowed x[18] .. x[26]
820
821 @----
822 @ NB there are 2 possible exits from this function - this is only one of them
823 @----
824
825 add sp, sp, #(21*4) @ return stack frame
826 ldmia sp!, { r4 - r11, pc } @ restore callee saved regs, and return
827
828 @----
829
830
831stop_block_x0_to_x17:
832
833 @ r0 = x0
834 @ r1 = &x[9]
835 @ r2 = x1
836 @ r3 = x2
837 @ r4 = x3
838 @ r5 = x4
839 @ r6 = x5
840 @ r7 = x6
841 @ r8 = x7
842 @ r9 = x8
843 @ r10 = -x0
844 @ r11 = window mode: (0 == normal), (1 == start block), (3 == stop block)
845 @ r12 = .
846 @ lr = .
847
848 rsb r0, r6, #0 @ r0 = -x5
849 rsb r6, r2, #0 @ r6 = -x1
850 rsb r2, r5, #0 @ r2 = -x4
851 rsb r5, r3, #0 @ r5 = -x2
852 rsb r3, r4, #0 @ r3 = -x3
853
854 add r1, r1, #(3*4) @ r1 = &x[12]
855 stmia r1, { r0, r2, r3, r5, r6, r10 } @ store unchanged x[12] .. x[17]
856
857 ldr r0, =WL1 @ r0 = window_l[1] == window_s[0]
858
859 rsb r10, r9, #0 @ r10 = -x8
860 rsb r12, r8, #0 @ r12 = -x7
861 rsb lr, r7, #0 @ lr = -x6
862
863 @ r0 = WL1
864 @ r1 = &x[12]
865 @ r2 = .
866 @ r3 = .
867 @ r4 = .
868 @ r5 = .
869 @ r6 = .
870 @ r7 = x6
871 @ r8 = x7
872 @ r9 = x8
873 @ r10 = -x8
874 @ r11 = window mode: (0 == normal), (1 == start block), (3 == stop block)
875 @ r12 = -x7
876 @ lr = -x6
877
878 smull r5, r6, r0, r7 @ r5..r6 = (window_l[1] * x[6])
879 ldr r2, =WL4 @ r2 = window_l[4] == window_s[1]
880 movs r5, r5, lsr #28
881 adc r7, r5, r6, lsl #4 @ r7 = bits[59..28] of windowed x6
882
883 smull r5, r6, r2, r8 @ r5..r6 = (window_l[4] * x[7])
884 ldr r3, =WL7 @ r3 = window_l[7] == window_s[2]
885 movs r5, r5, lsr #28
886 adc r8, r5, r6, lsl #4 @ r8 = bits[59..28] of windowed x7
887
888 smull r5, r6, r3, r9 @ r5..r6 = (window_l[7] * x[8])
889 ldr r4, =WL10 @ r4 = window_l[10] == window_s[3]
890 movs r5, r5, lsr #28
891 adc r9, r5, r6, lsl #4 @ r9 = bits[59..28] of windowed x8
892
893 smull r5, r6, r4, r10 @ r5..r6 = (window_l[10] * (x[9] == -x[8]))
894 ldr r0, =WL13 @ r0 = window_l[13] == window_s[4]
895 movs r5, r5, lsr #28
896 adc r10, r5, r6, lsl #4 @ r10 = bits[59..28] of windowed x9
897
898 smull r5, r6, r0, r12 @ r5..r6 = (window_l[13] * (x[10] == -x[7]))
899 ldr r2, =WL16 @ r2 = window_l[16] == window_s[5]
900 movs r5, r5, lsr #28
901 adc r12, r5, r6, lsl #4 @ r10 = bits[59..28] of windowed x9
902
903 smull r5, r6, r2, lr @ r5..r6 = (window_l[16] * (x[11] == -x[6]))
904
905 ldr r0, =0x00
906
907 movs r5, r5, lsr #28
908 adc lr, r5, r6, lsl #4 @ r10 = bits[59..28] of windowed x9
909
910 stmdb r1!, { r7 - r10, r12, lr } @ store windowed x[6] .. x[11]
911
912 ldr r5, =0x00
913 ldr r6, =0x00
914 ldr r2, =0x00
915 ldr r3, =0x00
916 ldr r4, =0x00
917
918 stmdb r1!, { r0, r2 - r6 } @ store windowed x[0] .. x[5]
919
920 b normal_block_x18_to_x35
921
922
923 @----
924
925
926start_block_x18_to_x35:
927
928 ldr r4, =WL1 @ r0 = window_l[1] == window_s[0]
929
930 add r1, r1, #(24*4) @ r1 = &x[24]
931
932 ldmia r1, { r0, r2, r3 } @ load 3 words from x24, dont update pointer
933
934 @ r0 = x24
935 @ r1 = &x[24]
936 @ r2 = x25
937 @ r3 = x26
938 @ r4 = WL1
939 @ r5 = WL4
940 @ r6 = WL7
941 @ r7 = WL10
942 @ r8 = WL13
943 @ r9 = WL16
944 @ r10 = .
945 @ r11 = .
946 @ r12 = .
947 @ lr = .
948
949 ldr r5, =WL4 @ r5 = window_l[4] == window_s[1]
950
951 smull r10, r11, r4, r0 @ r10..r11 = (window_l[1] * (x[24] == x[29]))
952 ldr r6, =WL7 @ r6 = window_l[7] == window_s[2]
953 movs r10, r10, lsr #28
954 adc lr, r10, r11, lsl #4 @ lr = bits[59..28] of windowed x29
955
956 smull r10, r11, r5, r2 @ r10..r11 = (window_l[4] * (x[25] == x[28]))
957 ldr r7, =WL10 @ r7 = window_l[10] == window_s[3]
958 movs r10, r10, lsr #28
959 adc r12, r10, r11, lsl #4 @ r12 = bits[59..28] of windowed x28
960
961 smull r10, r11, r6, r3 @ r10..r11 = (window_l[7] * (x[26] == x[27]))
962 ldr r8, =WL13 @ r8 = window_l[13] == window_s[4]
963 movs r10, r10, lsr #28
964 adc r4, r10, r11, lsl #4 @ r4 = bits[59..28] of windowed x27
965
966 smull r10, r11, r7, r3 @ r10..r11 = (window_l[10] * x[26])
967 ldr r9, =WL16 @ r9 = window_l[16] == window_s[5]
968 movs r10, r10, lsr #28
969 adc r3, r10, r11, lsl #4 @ r3 = bits[59..28] of windowed x26
970
971 smull r10, r11, r8, r2 @ r10..r11 = (window_l[13] * x[25])
972 ldr r5, =0x00
973 movs r10, r10, lsr #28
974 adc r2, r10, r11, lsl #4 @ r2 = bits[59..28] of windowed x25
975
976 smull r10, r11, r9, r0 @ r10..r11 = (window_l[16] * x[24])
977 ldr r6, =0x00
978 movs r10, r10, lsr #28
979 adc r0, r10, r11, lsl #4 @ r0 = bits[59..28] of windowed x24
980
981 stmia r1!, { r0, r2, r3, r4, r12, lr } @ store windowed x[24] .. x[29]
982
983 ldr r7, =0x00
984 ldr r8, =0x00
985 ldr r9, =0x00
986 ldr r10, =0x00
987
988 stmia r1!, { r5 - r10 } @ store windowed x[30] .. x[35]
989
990 @----
991 @ NB there are 2 possible exits from this function - this is only one of them
992 @----
993
994 add sp, sp, #(21*4) @ return stack frame
995 ldmia sp!, { r4 - r11, pc } @ restore callee saved regs, and return
996
997 @----
998 @END
999 @----
1000
diff --git a/apps/codecs/libmad/imdct_s.dat b/apps/codecs/libmad/imdct_s.dat
new file mode 100644
index 0000000000..e2d91a07ce
--- /dev/null
+++ b/apps/codecs/libmad/imdct_s.dat
@@ -0,0 +1,62 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2004 Underbit Technologies, Inc.
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/apps/codecs/libmad/layer12.c b/apps/codecs/libmad/layer12.c
new file mode 100644
index 0000000000..3c5d0ce613
--- /dev/null
+++ b/apps/codecs/libmad/layer12.c
@@ -0,0 +1,534 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2004 Underbit Technologies, Inc.
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 "config.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[64] = {
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 defined(OPT_STRICT)
167 /*
168 * Scalefactor index 63 does not appear in Table B.1 of
169 * ISO/IEC 11172-3. Nonetheless, other implementations accept it,
170 * so we only reject it if OPT_STRICT is defined.
171 */
172 if (scalefactor[ch][sb] == 63) {
173 stream->error = MAD_ERROR_BADSCALEFACTOR;
174 return -1;
175 }
176# endif
177 }
178 }
179 }
180
181 /* decode samples */
182
183 for (s = 0; s < 12; ++s) {
184 for (sb = 0; sb < bound; ++sb) {
185 for (ch = 0; ch < nch; ++ch) {
186 nb = allocation[ch][sb];
187 frame->sbsample[ch][s][sb] = nb ?
188 mad_f_mul(I_sample(&stream->ptr, nb),
189 sf_table[scalefactor[ch][sb]]) : 0;
190 }
191 }
192
193 for (sb = bound; sb < 32; ++sb) {
194 if ((nb = allocation[0][sb])) {
195 mad_fixed_t sample;
196
197 sample = I_sample(&stream->ptr, nb);
198
199 for (ch = 0; ch < nch; ++ch) {
200 frame->sbsample[ch][s][sb] =
201 mad_f_mul(sample, sf_table[scalefactor[ch][sb]]);
202 }
203 }
204 else {
205 for (ch = 0; ch < nch; ++ch)
206 frame->sbsample[ch][s][sb] = 0;
207 }
208 }
209 }
210
211 return 0;
212}
213
214/* --- Layer II ------------------------------------------------------------ */
215
216/* possible quantization per subband table */
217static
218struct {
219 unsigned int sblimit;
220 unsigned char const offsets[30];
221} const sbquant_table[5] = {
222 /* ISO/IEC 11172-3 Table B.2a */
223 { 27, { 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, /* 0 */
224 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0 } },
225 /* ISO/IEC 11172-3 Table B.2b */
226 { 30, { 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, /* 1 */
227 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0 } },
228 /* ISO/IEC 11172-3 Table B.2c */
229 { 8, { 5, 5, 2, 2, 2, 2, 2, 2 } }, /* 2 */
230 /* ISO/IEC 11172-3 Table B.2d */
231 { 12, { 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 } }, /* 3 */
232 /* ISO/IEC 13818-3 Table B.1 */
233 { 30, { 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, /* 4 */
234 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } }
235};
236
237/* bit allocation table */
238static
239struct {
240 unsigned short nbal;
241 unsigned short offset;
242} const bitalloc_table[8] = {
243 { 2, 0 }, /* 0 */
244 { 2, 3 }, /* 1 */
245 { 3, 3 }, /* 2 */
246 { 3, 1 }, /* 3 */
247 { 4, 2 }, /* 4 */
248 { 4, 3 }, /* 5 */
249 { 4, 4 }, /* 6 */
250 { 4, 5 } /* 7 */
251};
252
253/* offsets into quantization class table */
254static
255unsigned char const offset_table[6][15] = {
256 { 0, 1, 16 }, /* 0 */
257 { 0, 1, 2, 3, 4, 5, 16 }, /* 1 */
258 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }, /* 2 */
259 { 0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }, /* 3 */
260 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16 }, /* 4 */
261 { 0, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 } /* 5 */
262};
263
264/* quantization class table */
265static
266struct quantclass {
267 unsigned short nlevels;
268 unsigned char group;
269 unsigned char bits;
270 mad_fixed_t C;
271 mad_fixed_t D;
272} const qc_table[17] = {
273# include "qc_table.dat"
274};
275
276/*
277 * NAME: II_samples()
278 * DESCRIPTION: decode three requantized Layer II samples from a bitstream
279 */
280static
281void II_samples(struct mad_bitptr *ptr,
282 struct quantclass const *quantclass,
283 mad_fixed_t output[3])
284{
285 unsigned int nb, s, sample[3];
286
287 if ((nb = quantclass->group)) {
288 unsigned int c, nlevels;
289
290 /* degrouping */
291 c = mad_bit_read(ptr, quantclass->bits);
292 nlevels = quantclass->nlevels;
293
294 for (s = 0; s < 3; ++s) {
295 sample[s] = c % nlevels;
296 c /= nlevels;
297 }
298 }
299 else {
300 nb = quantclass->bits;
301
302 for (s = 0; s < 3; ++s)
303 sample[s] = mad_bit_read(ptr, nb);
304 }
305
306 for (s = 0; s < 3; ++s) {
307 mad_fixed_t requantized;
308
309 /* invert most significant bit, extend sign, then scale to fixed format */
310
311 requantized = sample[s] ^ (1 << (nb - 1));
312 requantized |= -(requantized & (1 << (nb - 1)));
313
314 requantized <<= MAD_F_FRACBITS - (nb - 1);
315
316 /* requantize the sample */
317
318 /* s'' = C * (s''' + D) */
319
320 output[s] = mad_f_mul(requantized + quantclass->D, quantclass->C);
321
322 /* s' = factor * s'' */
323 /* (to be performed by caller) */
324 }
325}
326
327/*
328 * NAME: layer->II()
329 * DESCRIPTION: decode a single Layer II frame
330 */
331int mad_layer_II(struct mad_stream *stream, struct mad_frame *frame)
332{
333 struct mad_header *header = &frame->header;
334 struct mad_bitptr start;
335 unsigned int index, sblimit, nbal, nch, bound, gr, ch, s, sb;
336 unsigned char const *offsets;
337 unsigned char allocation[2][32], scfsi[2][32], scalefactor[2][32][3];
338 mad_fixed_t samples[3];
339
340 nch = MAD_NCHANNELS(header);
341
342 if (header->flags & MAD_FLAG_LSF_EXT)
343 index = 4;
344 else if (header->flags & MAD_FLAG_FREEFORMAT)
345 goto freeformat;
346 else {
347 unsigned long bitrate_per_channel;
348
349 bitrate_per_channel = header->bitrate;
350 if (nch == 2) {
351 bitrate_per_channel /= 2;
352
353# if defined(OPT_STRICT)
354 /*
355 * ISO/IEC 11172-3 allows only single channel mode for 32, 48, 56, and
356 * 80 kbps bitrates in Layer II, but some encoders ignore this
357 * restriction. We enforce it if OPT_STRICT is defined.
358 */
359 if (bitrate_per_channel <= 28000 || bitrate_per_channel == 40000) {
360 stream->error = MAD_ERROR_BADMODE;
361 return -1;
362 }
363# endif
364 }
365 else { /* nch == 1 */
366 if (bitrate_per_channel > 192000) {
367 /*
368 * ISO/IEC 11172-3 does not allow single channel mode for 224, 256,
369 * 320, or 384 kbps bitrates in Layer II.
370 */
371 stream->error = MAD_ERROR_BADMODE;
372 return -1;
373 }
374 }
375
376 if (bitrate_per_channel <= 48000)
377 index = (header->samplerate == 32000) ? 3 : 2;
378 else if (bitrate_per_channel <= 80000)
379 index = 0;
380 else {
381 freeformat:
382 index = (header->samplerate == 48000) ? 0 : 1;
383 }
384 }
385
386 sblimit = sbquant_table[index].sblimit;
387 offsets = sbquant_table[index].offsets;
388
389 bound = 32;
390 if (header->mode == MAD_MODE_JOINT_STEREO) {
391 header->flags |= MAD_FLAG_I_STEREO;
392 bound = 4 + header->mode_extension * 4;
393 }
394
395 if (bound > sblimit)
396 bound = sblimit;
397
398 start = stream->ptr;
399
400 /* decode bit allocations */
401
402 for (sb = 0; sb < bound; ++sb) {
403 nbal = bitalloc_table[offsets[sb]].nbal;
404
405 for (ch = 0; ch < nch; ++ch)
406 allocation[ch][sb] = mad_bit_read(&stream->ptr, nbal);
407 }
408
409 for (sb = bound; sb < sblimit; ++sb) {
410 nbal = bitalloc_table[offsets[sb]].nbal;
411
412 allocation[0][sb] =
413 allocation[1][sb] = mad_bit_read(&stream->ptr, nbal);
414 }
415
416 /* decode scalefactor selection info */
417
418 for (sb = 0; sb < sblimit; ++sb) {
419 for (ch = 0; ch < nch; ++ch) {
420 if (allocation[ch][sb])
421 scfsi[ch][sb] = mad_bit_read(&stream->ptr, 2);
422 }
423 }
424
425 /* check CRC word */
426
427 if (header->flags & MAD_FLAG_PROTECTION) {
428 header->crc_check =
429 mad_bit_crc(start, mad_bit_length(&start, &stream->ptr),
430 header->crc_check);
431
432 if (header->crc_check != header->crc_target &&
433 !(frame->options & MAD_OPTION_IGNORECRC)) {
434 stream->error = MAD_ERROR_BADCRC;
435 return -1;
436 }
437 }
438
439 /* decode scalefactors */
440
441 for (sb = 0; sb < sblimit; ++sb) {
442 for (ch = 0; ch < nch; ++ch) {
443 if (allocation[ch][sb]) {
444 scalefactor[ch][sb][0] = mad_bit_read(&stream->ptr, 6);
445
446 switch (scfsi[ch][sb]) {
447 case 2:
448 scalefactor[ch][sb][2] =
449 scalefactor[ch][sb][1] =
450 scalefactor[ch][sb][0];
451 break;
452
453 case 0:
454 scalefactor[ch][sb][1] = mad_bit_read(&stream->ptr, 6);
455 /* fall through */
456
457 case 1:
458 case 3:
459 scalefactor[ch][sb][2] = mad_bit_read(&stream->ptr, 6);
460 }
461
462 if (scfsi[ch][sb] & 1)
463 scalefactor[ch][sb][1] = scalefactor[ch][sb][scfsi[ch][sb] - 1];
464
465# if defined(OPT_STRICT)
466 /*
467 * Scalefactor index 63 does not appear in Table B.1 of
468 * ISO/IEC 11172-3. Nonetheless, other implementations accept it,
469 * so we only reject it if OPT_STRICT is defined.
470 */
471 if (scalefactor[ch][sb][0] == 63 ||
472 scalefactor[ch][sb][1] == 63 ||
473 scalefactor[ch][sb][2] == 63) {
474 stream->error = MAD_ERROR_BADSCALEFACTOR;
475 return -1;
476 }
477# endif
478 }
479 }
480 }
481
482 /* decode samples */
483
484 for (gr = 0; gr < 12; ++gr) {
485 for (sb = 0; sb < bound; ++sb) {
486 for (ch = 0; ch < nch; ++ch) {
487 if ((index = allocation[ch][sb])) {
488 index = offset_table[bitalloc_table[offsets[sb]].offset][index - 1];
489
490 II_samples(&stream->ptr, &qc_table[index], samples);
491
492 for (s = 0; s < 3; ++s) {
493 frame->sbsample[ch][3 * gr + s][sb] =
494 mad_f_mul(samples[s], sf_table[scalefactor[ch][sb][gr / 4]]);
495 }
496 }
497 else {
498 for (s = 0; s < 3; ++s)
499 frame->sbsample[ch][3 * gr + s][sb] = 0;
500 }
501 }
502 }
503
504 for (sb = bound; sb < sblimit; ++sb) {
505 if ((index = allocation[0][sb])) {
506 index = offset_table[bitalloc_table[offsets[sb]].offset][index - 1];
507
508 II_samples(&stream->ptr, &qc_table[index], samples);
509
510 for (ch = 0; ch < nch; ++ch) {
511 for (s = 0; s < 3; ++s) {
512 frame->sbsample[ch][3 * gr + s][sb] =
513 mad_f_mul(samples[s], sf_table[scalefactor[ch][sb][gr / 4]]);
514 }
515 }
516 }
517 else {
518 for (ch = 0; ch < nch; ++ch) {
519 for (s = 0; s < 3; ++s)
520 frame->sbsample[ch][3 * gr + s][sb] = 0;
521 }
522 }
523 }
524
525 for (ch = 0; ch < nch; ++ch) {
526 for (s = 0; s < 3; ++s) {
527 for (sb = sblimit; sb < 32; ++sb)
528 frame->sbsample[ch][3 * gr + s][sb] = 0;
529 }
530 }
531 }
532
533 return 0;
534}
diff --git a/apps/codecs/libmad/layer12.h b/apps/codecs/libmad/layer12.h
new file mode 100644
index 0000000000..3fe6bd8b0f
--- /dev/null
+++ b/apps/codecs/libmad/layer12.h
@@ -0,0 +1,31 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2004 Underbit Technologies, Inc.
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/apps/codecs/libmad/layer3.c b/apps/codecs/libmad/layer3.c
new file mode 100644
index 0000000000..7a59e70241
--- /dev/null
+++ b/apps/codecs/libmad/layer3.c
@@ -0,0 +1,2698 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2004 Underbit Technologies, Inc.
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 "config.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
292 the first 36 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# if 1
1579static
1580void fastsdct(mad_fixed_t const x[9], mad_fixed_t y[18])
1581{
1582 mad_fixed_t a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12;
1583 mad_fixed_t a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25;
1584 mad_fixed_t m0, m1, m2, m3, m4, m5, m6, m7;
1585
1586 enum {
1587 c0 = MAD_F(0x1f838b8d), /* 2 * cos( 1 * PI / 18) */
1588 c1 = MAD_F(0x1bb67ae8), /* 2 * cos( 3 * PI / 18) */
1589 c2 = MAD_F(0x18836fa3), /* 2 * cos( 4 * PI / 18) */
1590 c3 = MAD_F(0x1491b752), /* 2 * cos( 5 * PI / 18) */
1591 c4 = MAD_F(0x0af1d43a), /* 2 * cos( 7 * PI / 18) */
1592 c5 = MAD_F(0x058e86a0), /* 2 * cos( 8 * PI / 18) */
1593 c6 = -MAD_F(0x1e11f642) /* 2 * cos(16 * PI / 18) */
1594 };
1595
1596 a0 = x[3] + x[5];
1597 a1 = x[3] - x[5];
1598 a2 = x[6] + x[2];
1599 a3 = x[6] - x[2];
1600 a4 = x[1] + x[7];
1601 a5 = x[1] - x[7];
1602 a6 = x[8] + x[0];
1603 a7 = x[8] - x[0];
1604
1605 a8 = a0 + a2;
1606 a9 = a0 - a2;
1607 a10 = a0 - a6;
1608 a11 = a2 - a6;
1609 a12 = a8 + a6;
1610 a13 = a1 - a3;
1611 a14 = a13 + a7;
1612 a15 = a3 + a7;
1613 a16 = a1 - a7;
1614 a17 = a1 + a3;
1615
1616 m0 = mad_f_mul(a17, -c3);
1617 m1 = mad_f_mul(a16, -c0);
1618 m2 = mad_f_mul(a15, -c4);
1619 m3 = mad_f_mul(a14, -c1);
1620 m4 = mad_f_mul(a5, -c1);
1621 m5 = mad_f_mul(a11, -c6);
1622 m6 = mad_f_mul(a10, -c5);
1623 m7 = mad_f_mul(a9, -c2);
1624
1625 a18 = x[4] + a4;
1626 a19 = 2 * x[4] - a4;
1627 a20 = a19 + m5;
1628 a21 = a19 - m5;
1629 a22 = a19 + m6;
1630 a23 = m4 + m2;
1631 a24 = m4 - m2;
1632 a25 = m4 + m1;
1633
1634 /* output to every other slot for convenience */
1635
1636 y[ 0] = a18 + a12;
1637 y[ 2] = m0 - a25;
1638 y[ 4] = m7 - a20;
1639 y[ 6] = m3;
1640 y[ 8] = a21 - m6;
1641 y[10] = a24 - m1;
1642 y[12] = a12 - 2 * a18;
1643 y[14] = a23 + m0;
1644 y[16] = a22 + m7;
1645}
1646
1647static inline
1648void sdctII(mad_fixed_t const x[18], mad_fixed_t X[18])
1649{
1650 mad_fixed_t tmp[9];
1651 int i;
1652
1653 /* scale[i] = 2 * cos(PI * (2 * i + 1) / (2 * 18)) */
1654 static mad_fixed_t const scale[9] = {
1655 MAD_F(0x1fe0d3b4), MAD_F(0x1ee8dd47), MAD_F(0x1d007930),
1656 MAD_F(0x1a367e59), MAD_F(0x16a09e66), MAD_F(0x125abcf8),
1657 MAD_F(0x0d8616bc), MAD_F(0x08483ee1), MAD_F(0x02c9fad7)
1658 };
1659
1660 /* divide the 18-point SDCT-II into two 9-point SDCT-IIs */
1661
1662 /* even input butterfly */
1663
1664 for (i = 0; i < 9; i += 3) {
1665 tmp[i + 0] = x[i + 0] + x[18 - (i + 0) - 1];
1666 tmp[i + 1] = x[i + 1] + x[18 - (i + 1) - 1];
1667 tmp[i + 2] = x[i + 2] + x[18 - (i + 2) - 1];
1668 }
1669
1670 fastsdct(tmp, &X[0]);
1671
1672 /* odd input butterfly and scaling */
1673
1674 for (i = 0; i < 9; i += 3) {
1675 tmp[i + 0] = mad_f_mul(x[i + 0] - x[18 - (i + 0) - 1], scale[i + 0]);
1676 tmp[i + 1] = mad_f_mul(x[i + 1] - x[18 - (i + 1) - 1], scale[i + 1]);
1677 tmp[i + 2] = mad_f_mul(x[i + 2] - x[18 - (i + 2) - 1], scale[i + 2]);
1678 }
1679
1680 fastsdct(tmp, &X[1]);
1681
1682 /* output accumulation */
1683
1684 for (i = 3; i < 18; i += 8) {
1685 X[i + 0] -= X[(i + 0) - 2];
1686 X[i + 2] -= X[(i + 2) - 2];
1687 X[i + 4] -= X[(i + 4) - 2];
1688 X[i + 6] -= X[(i + 6) - 2];
1689 }
1690}
1691
1692static inline
1693void dctIV(mad_fixed_t const y[18], mad_fixed_t X[18])
1694{
1695 mad_fixed_t tmp[18];
1696 int i;
1697
1698 /* scale[i] = 2 * cos(PI * (2 * i + 1) / (4 * 18)) */
1699 static mad_fixed_t const scale[18] = {
1700 MAD_F(0x1ff833fa), MAD_F(0x1fb9ea93), MAD_F(0x1f3dd120),
1701 MAD_F(0x1e84d969), MAD_F(0x1d906bcf), MAD_F(0x1c62648b),
1702 MAD_F(0x1afd100f), MAD_F(0x1963268b), MAD_F(0x1797c6a4),
1703 MAD_F(0x159e6f5b), MAD_F(0x137af940), MAD_F(0x11318ef3),
1704 MAD_F(0x0ec6a507), MAD_F(0x0c3ef153), MAD_F(0x099f61c5),
1705 MAD_F(0x06ed12c5), MAD_F(0x042d4544), MAD_F(0x0165547c)
1706 };
1707
1708 /* scaling */
1709
1710 for (i = 0; i < 18; i += 3) {
1711 tmp[i + 0] = mad_f_mul(y[i + 0], scale[i + 0]);
1712 tmp[i + 1] = mad_f_mul(y[i + 1], scale[i + 1]);
1713 tmp[i + 2] = mad_f_mul(y[i + 2], scale[i + 2]);
1714 }
1715
1716 /* SDCT-II */
1717
1718 sdctII(tmp, X);
1719
1720 /* scale reduction and output accumulation */
1721
1722 X[0] /= 2;
1723 for (i = 1; i < 17; i += 4) {
1724 X[i + 0] = X[i + 0] / 2 - X[(i + 0) - 1];
1725 X[i + 1] = X[i + 1] / 2 - X[(i + 1) - 1];
1726 X[i + 2] = X[i + 2] / 2 - X[(i + 2) - 1];
1727 X[i + 3] = X[i + 3] / 2 - X[(i + 3) - 1];
1728 }
1729 X[17] = X[17] / 2 - X[16];
1730}
1731
1732/*
1733 * NAME: imdct36
1734 * DESCRIPTION: perform X[18]->x[36] IMDCT using Szu-Wei Lee's fast algorithm
1735 */
1736static inline
1737void imdct36(mad_fixed_t const x[18], mad_fixed_t y[36])
1738{
1739 mad_fixed_t tmp[18];
1740 int i;
1741
1742 /* DCT-IV */
1743
1744 dctIV(x, tmp);
1745
1746 /* convert 18-point DCT-IV to 36-point IMDCT */
1747
1748 for (i = 0; i < 9; i += 3) {
1749 y[i + 0] = tmp[9 + (i + 0)];
1750 y[i + 1] = tmp[9 + (i + 1)];
1751 y[i + 2] = tmp[9 + (i + 2)];
1752 }
1753 for (i = 9; i < 27; i += 3) {
1754 y[i + 0] = -tmp[36 - (9 + (i + 0)) - 1];
1755 y[i + 1] = -tmp[36 - (9 + (i + 1)) - 1];
1756 y[i + 2] = -tmp[36 - (9 + (i + 2)) - 1];
1757 }
1758 for (i = 27; i < 36; i += 3) {
1759 y[i + 0] = -tmp[(i + 0) - 27];
1760 y[i + 1] = -tmp[(i + 1) - 27];
1761 y[i + 2] = -tmp[(i + 2) - 27];
1762 }
1763}
1764# else
1765/*
1766 * NAME: imdct36
1767 * DESCRIPTION: perform X[18]->x[36] IMDCT
1768 */
1769static inline
1770void imdct36(mad_fixed_t const X[18], mad_fixed_t x[36])
1771{
1772 mad_fixed_t t0, t1, t2, t3, t4, t5, t6, t7;
1773 mad_fixed_t t8, t9, t10, t11, t12, t13, t14, t15;
1774 register mad_fixed64hi_t hi;
1775 register mad_fixed64lo_t lo;
1776
1777 MAD_F_ML0(hi, lo, X[4], MAD_F(0x0ec835e8));
1778 MAD_F_MLA(hi, lo, X[13], MAD_F(0x061f78aa));
1779
1780 t6 = MAD_F_MLZ(hi, lo);
1781
1782 MAD_F_MLA(hi, lo, (t14 = X[1] - X[10]), -MAD_F(0x061f78aa));
1783 MAD_F_MLA(hi, lo, (t15 = X[7] + X[16]), -MAD_F(0x0ec835e8));
1784
1785 t0 = MAD_F_MLZ(hi, lo);
1786
1787 MAD_F_MLA(hi, lo, (t8 = X[0] - X[11] - X[12]), MAD_F(0x0216a2a2));
1788 MAD_F_MLA(hi, lo, (t9 = X[2] - X[9] - X[14]), MAD_F(0x09bd7ca0));
1789 MAD_F_MLA(hi, lo, (t10 = X[3] - X[8] - X[15]), -MAD_F(0x0cb19346));
1790 MAD_F_MLA(hi, lo, (t11 = X[5] - X[6] - X[17]), -MAD_F(0x0fdcf549));
1791
1792 x[7] = MAD_F_MLZ(hi, lo);
1793 x[10] = -x[7];
1794
1795 MAD_F_ML0(hi, lo, t8, -MAD_F(0x0cb19346));
1796 MAD_F_MLA(hi, lo, t9, MAD_F(0x0fdcf549));
1797 MAD_F_MLA(hi, lo, t10, MAD_F(0x0216a2a2));
1798 MAD_F_MLA(hi, lo, t11, -MAD_F(0x09bd7ca0));
1799
1800 x[19] = x[34] = MAD_F_MLZ(hi, lo) - t0;
1801
1802 t12 = X[0] - X[3] + X[8] - X[11] - X[12] + X[15];
1803 t13 = X[2] + X[5] - X[6] - X[9] - X[14] - X[17];
1804
1805 MAD_F_ML0(hi, lo, t12, -MAD_F(0x0ec835e8));
1806 MAD_F_MLA(hi, lo, t13, MAD_F(0x061f78aa));
1807
1808 x[22] = x[31] = MAD_F_MLZ(hi, lo) + t0;
1809
1810 MAD_F_ML0(hi, lo, X[1], -MAD_F(0x09bd7ca0));
1811 MAD_F_MLA(hi, lo, X[7], MAD_F(0x0216a2a2));
1812 MAD_F_MLA(hi, lo, X[10], -MAD_F(0x0fdcf549));
1813 MAD_F_MLA(hi, lo, X[16], MAD_F(0x0cb19346));
1814
1815 t1 = MAD_F_MLZ(hi, lo) + t6;
1816
1817 MAD_F_ML0(hi, lo, X[0], MAD_F(0x03768962));
1818 MAD_F_MLA(hi, lo, X[2], MAD_F(0x0e313245));
1819 MAD_F_MLA(hi, lo, X[3], -MAD_F(0x0ffc19fd));
1820 MAD_F_MLA(hi, lo, X[5], -MAD_F(0x0acf37ad));
1821 MAD_F_MLA(hi, lo, X[6], MAD_F(0x04cfb0e2));
1822 MAD_F_MLA(hi, lo, X[8], -MAD_F(0x0898c779));
1823 MAD_F_MLA(hi, lo, X[9], MAD_F(0x0d7e8807));
1824 MAD_F_MLA(hi, lo, X[11], MAD_F(0x0f426cb5));
1825 MAD_F_MLA(hi, lo, X[12], -MAD_F(0x0bcbe352));
1826 MAD_F_MLA(hi, lo, X[14], MAD_F(0x00b2aa3e));
1827 MAD_F_MLA(hi, lo, X[15], -MAD_F(0x07635284));
1828 MAD_F_MLA(hi, lo, X[17], -MAD_F(0x0f9ee890));
1829
1830 x[6] = MAD_F_MLZ(hi, lo) + t1;
1831 x[11] = -x[6];
1832
1833 MAD_F_ML0(hi, lo, X[0], -MAD_F(0x0f426cb5));
1834 MAD_F_MLA(hi, lo, X[2], -MAD_F(0x00b2aa3e));
1835 MAD_F_MLA(hi, lo, X[3], MAD_F(0x0898c779));
1836 MAD_F_MLA(hi, lo, X[5], MAD_F(0x0f9ee890));
1837 MAD_F_MLA(hi, lo, X[6], MAD_F(0x0acf37ad));
1838 MAD_F_MLA(hi, lo, X[8], -MAD_F(0x07635284));
1839 MAD_F_MLA(hi, lo, X[9], -MAD_F(0x0e313245));
1840 MAD_F_MLA(hi, lo, X[11], -MAD_F(0x0bcbe352));
1841 MAD_F_MLA(hi, lo, X[12], -MAD_F(0x03768962));
1842 MAD_F_MLA(hi, lo, X[14], MAD_F(0x0d7e8807));
1843 MAD_F_MLA(hi, lo, X[15], MAD_F(0x0ffc19fd));
1844 MAD_F_MLA(hi, lo, X[17], MAD_F(0x04cfb0e2));
1845
1846 x[23] = x[30] = MAD_F_MLZ(hi, lo) + t1;
1847
1848 MAD_F_ML0(hi, lo, X[0], -MAD_F(0x0bcbe352));
1849 MAD_F_MLA(hi, lo, X[2], MAD_F(0x0d7e8807));
1850 MAD_F_MLA(hi, lo, X[3], -MAD_F(0x07635284));
1851 MAD_F_MLA(hi, lo, X[5], MAD_F(0x04cfb0e2));
1852 MAD_F_MLA(hi, lo, X[6], MAD_F(0x0f9ee890));
1853 MAD_F_MLA(hi, lo, X[8], -MAD_F(0x0ffc19fd));
1854 MAD_F_MLA(hi, lo, X[9], -MAD_F(0x00b2aa3e));
1855 MAD_F_MLA(hi, lo, X[11], MAD_F(0x03768962));
1856 MAD_F_MLA(hi, lo, X[12], -MAD_F(0x0f426cb5));
1857 MAD_F_MLA(hi, lo, X[14], MAD_F(0x0e313245));
1858 MAD_F_MLA(hi, lo, X[15], MAD_F(0x0898c779));
1859 MAD_F_MLA(hi, lo, X[17], -MAD_F(0x0acf37ad));
1860
1861 x[18] = x[35] = MAD_F_MLZ(hi, lo) - t1;
1862
1863 MAD_F_ML0(hi, lo, X[4], MAD_F(0x061f78aa));
1864 MAD_F_MLA(hi, lo, X[13], -MAD_F(0x0ec835e8));
1865
1866 t7 = MAD_F_MLZ(hi, lo);
1867
1868 MAD_F_MLA(hi, lo, X[1], -MAD_F(0x0cb19346));
1869 MAD_F_MLA(hi, lo, X[7], MAD_F(0x0fdcf549));
1870 MAD_F_MLA(hi, lo, X[10], MAD_F(0x0216a2a2));
1871 MAD_F_MLA(hi, lo, X[16], -MAD_F(0x09bd7ca0));
1872
1873 t2 = MAD_F_MLZ(hi, lo);
1874
1875 MAD_F_MLA(hi, lo, X[0], MAD_F(0x04cfb0e2));
1876 MAD_F_MLA(hi, lo, X[2], MAD_F(0x0ffc19fd));
1877 MAD_F_MLA(hi, lo, X[3], -MAD_F(0x0d7e8807));
1878 MAD_F_MLA(hi, lo, X[5], MAD_F(0x03768962));
1879 MAD_F_MLA(hi, lo, X[6], -MAD_F(0x0bcbe352));
1880 MAD_F_MLA(hi, lo, X[8], -MAD_F(0x0e313245));
1881 MAD_F_MLA(hi, lo, X[9], MAD_F(0x07635284));
1882 MAD_F_MLA(hi, lo, X[11], -MAD_F(0x0acf37ad));
1883 MAD_F_MLA(hi, lo, X[12], MAD_F(0x0f9ee890));
1884 MAD_F_MLA(hi, lo, X[14], MAD_F(0x0898c779));
1885 MAD_F_MLA(hi, lo, X[15], MAD_F(0x00b2aa3e));
1886 MAD_F_MLA(hi, lo, X[17], MAD_F(0x0f426cb5));
1887
1888 x[5] = MAD_F_MLZ(hi, lo);
1889 x[12] = -x[5];
1890
1891 MAD_F_ML0(hi, lo, X[0], MAD_F(0x0acf37ad));
1892 MAD_F_MLA(hi, lo, X[2], -MAD_F(0x0898c779));
1893 MAD_F_MLA(hi, lo, X[3], MAD_F(0x0e313245));
1894 MAD_F_MLA(hi, lo, X[5], -MAD_F(0x0f426cb5));
1895 MAD_F_MLA(hi, lo, X[6], -MAD_F(0x03768962));
1896 MAD_F_MLA(hi, lo, X[8], MAD_F(0x00b2aa3e));
1897 MAD_F_MLA(hi, lo, X[9], -MAD_F(0x0ffc19fd));
1898 MAD_F_MLA(hi, lo, X[11], MAD_F(0x0f9ee890));
1899 MAD_F_MLA(hi, lo, X[12], -MAD_F(0x04cfb0e2));
1900 MAD_F_MLA(hi, lo, X[14], MAD_F(0x07635284));
1901 MAD_F_MLA(hi, lo, X[15], MAD_F(0x0d7e8807));
1902 MAD_F_MLA(hi, lo, X[17], -MAD_F(0x0bcbe352));
1903
1904 x[0] = MAD_F_MLZ(hi, lo) + t2;
1905 x[17] = -x[0];
1906
1907 MAD_F_ML0(hi, lo, X[0], -MAD_F(0x0f9ee890));
1908 MAD_F_MLA(hi, lo, X[2], -MAD_F(0x07635284));
1909 MAD_F_MLA(hi, lo, X[3], -MAD_F(0x00b2aa3e));
1910 MAD_F_MLA(hi, lo, X[5], MAD_F(0x0bcbe352));
1911 MAD_F_MLA(hi, lo, X[6], MAD_F(0x0f426cb5));
1912 MAD_F_MLA(hi, lo, X[8], MAD_F(0x0d7e8807));
1913 MAD_F_MLA(hi, lo, X[9], MAD_F(0x0898c779));
1914 MAD_F_MLA(hi, lo, X[11], -MAD_F(0x04cfb0e2));
1915 MAD_F_MLA(hi, lo, X[12], -MAD_F(0x0acf37ad));
1916 MAD_F_MLA(hi, lo, X[14], -MAD_F(0x0ffc19fd));
1917 MAD_F_MLA(hi, lo, X[15], -MAD_F(0x0e313245));
1918 MAD_F_MLA(hi, lo, X[17], -MAD_F(0x03768962));
1919
1920 x[24] = x[29] = MAD_F_MLZ(hi, lo) + t2;
1921
1922 MAD_F_ML0(hi, lo, X[1], -MAD_F(0x0216a2a2));
1923 MAD_F_MLA(hi, lo, X[7], -MAD_F(0x09bd7ca0));
1924 MAD_F_MLA(hi, lo, X[10], MAD_F(0x0cb19346));
1925 MAD_F_MLA(hi, lo, X[16], MAD_F(0x0fdcf549));
1926
1927 t3 = MAD_F_MLZ(hi, lo) + t7;
1928
1929 MAD_F_ML0(hi, lo, X[0], MAD_F(0x00b2aa3e));
1930 MAD_F_MLA(hi, lo, X[2], MAD_F(0x03768962));
1931 MAD_F_MLA(hi, lo, X[3], -MAD_F(0x04cfb0e2));
1932 MAD_F_MLA(hi, lo, X[5], -MAD_F(0x07635284));
1933 MAD_F_MLA(hi, lo, X[6], MAD_F(0x0898c779));
1934 MAD_F_MLA(hi, lo, X[8], MAD_F(0x0acf37ad));
1935 MAD_F_MLA(hi, lo, X[9], -MAD_F(0x0bcbe352));
1936 MAD_F_MLA(hi, lo, X[11], -MAD_F(0x0d7e8807));
1937 MAD_F_MLA(hi, lo, X[12], MAD_F(0x0e313245));
1938 MAD_F_MLA(hi, lo, X[14], MAD_F(0x0f426cb5));
1939 MAD_F_MLA(hi, lo, X[15], -MAD_F(0x0f9ee890));
1940 MAD_F_MLA(hi, lo, X[17], -MAD_F(0x0ffc19fd));
1941
1942 x[8] = MAD_F_MLZ(hi, lo) + t3;
1943 x[9] = -x[8];
1944
1945 MAD_F_ML0(hi, lo, X[0], -MAD_F(0x0e313245));
1946 MAD_F_MLA(hi, lo, X[2], MAD_F(0x0bcbe352));
1947 MAD_F_MLA(hi, lo, X[3], MAD_F(0x0f9ee890));
1948 MAD_F_MLA(hi, lo, X[5], -MAD_F(0x0898c779));
1949 MAD_F_MLA(hi, lo, X[6], -MAD_F(0x0ffc19fd));
1950 MAD_F_MLA(hi, lo, X[8], MAD_F(0x04cfb0e2));
1951 MAD_F_MLA(hi, lo, X[9], MAD_F(0x0f426cb5));
1952 MAD_F_MLA(hi, lo, X[11], -MAD_F(0x00b2aa3e));
1953 MAD_F_MLA(hi, lo, X[12], -MAD_F(0x0d7e8807));
1954 MAD_F_MLA(hi, lo, X[14], -MAD_F(0x03768962));
1955 MAD_F_MLA(hi, lo, X[15], MAD_F(0x0acf37ad));
1956 MAD_F_MLA(hi, lo, X[17], MAD_F(0x07635284));
1957
1958 x[21] = x[32] = MAD_F_MLZ(hi, lo) + t3;
1959
1960 MAD_F_ML0(hi, lo, X[0], -MAD_F(0x0d7e8807));
1961 MAD_F_MLA(hi, lo, X[2], MAD_F(0x0f426cb5));
1962 MAD_F_MLA(hi, lo, X[3], MAD_F(0x0acf37ad));
1963 MAD_F_MLA(hi, lo, X[5], -MAD_F(0x0ffc19fd));
1964 MAD_F_MLA(hi, lo, X[6], -MAD_F(0x07635284));
1965 MAD_F_MLA(hi, lo, X[8], MAD_F(0x0f9ee890));
1966 MAD_F_MLA(hi, lo, X[9], MAD_F(0x03768962));
1967 MAD_F_MLA(hi, lo, X[11], -MAD_F(0x0e313245));
1968 MAD_F_MLA(hi, lo, X[12], MAD_F(0x00b2aa3e));
1969 MAD_F_MLA(hi, lo, X[14], MAD_F(0x0bcbe352));
1970 MAD_F_MLA(hi, lo, X[15], -MAD_F(0x04cfb0e2));
1971 MAD_F_MLA(hi, lo, X[17], -MAD_F(0x0898c779));
1972
1973 x[20] = x[33] = MAD_F_MLZ(hi, lo) - t3;
1974
1975 MAD_F_ML0(hi, lo, t14, -MAD_F(0x0ec835e8));
1976 MAD_F_MLA(hi, lo, t15, MAD_F(0x061f78aa));
1977
1978 t4 = MAD_F_MLZ(hi, lo) - t7;
1979
1980 MAD_F_ML0(hi, lo, t12, MAD_F(0x061f78aa));
1981 MAD_F_MLA(hi, lo, t13, MAD_F(0x0ec835e8));
1982
1983 x[4] = MAD_F_MLZ(hi, lo) + t4;
1984 x[13] = -x[4];
1985
1986 MAD_F_ML0(hi, lo, t8, MAD_F(0x09bd7ca0));
1987 MAD_F_MLA(hi, lo, t9, -MAD_F(0x0216a2a2));
1988 MAD_F_MLA(hi, lo, t10, MAD_F(0x0fdcf549));
1989 MAD_F_MLA(hi, lo, t11, -MAD_F(0x0cb19346));
1990
1991 x[1] = MAD_F_MLZ(hi, lo) + t4;
1992 x[16] = -x[1];
1993
1994 MAD_F_ML0(hi, lo, t8, -MAD_F(0x0fdcf549));
1995 MAD_F_MLA(hi, lo, t9, -MAD_F(0x0cb19346));
1996 MAD_F_MLA(hi, lo, t10, -MAD_F(0x09bd7ca0));
1997 MAD_F_MLA(hi, lo, t11, -MAD_F(0x0216a2a2));
1998
1999 x[25] = x[28] = MAD_F_MLZ(hi, lo) + t4;
2000
2001 MAD_F_ML0(hi, lo, X[1], -MAD_F(0x0fdcf549));
2002 MAD_F_MLA(hi, lo, X[7], -MAD_F(0x0cb19346));
2003 MAD_F_MLA(hi, lo, X[10], -MAD_F(0x09bd7ca0));
2004 MAD_F_MLA(hi, lo, X[16], -MAD_F(0x0216a2a2));
2005
2006 t5 = MAD_F_MLZ(hi, lo) - t6;
2007
2008 MAD_F_ML0(hi, lo, X[0], MAD_F(0x0898c779));
2009 MAD_F_MLA(hi, lo, X[2], MAD_F(0x04cfb0e2));
2010 MAD_F_MLA(hi, lo, X[3], MAD_F(0x0bcbe352));
2011 MAD_F_MLA(hi, lo, X[5], MAD_F(0x00b2aa3e));
2012 MAD_F_MLA(hi, lo, X[6], MAD_F(0x0e313245));
2013 MAD_F_MLA(hi, lo, X[8], -MAD_F(0x03768962));
2014 MAD_F_MLA(hi, lo, X[9], MAD_F(0x0f9ee890));
2015 MAD_F_MLA(hi, lo, X[11], -MAD_F(0x07635284));
2016 MAD_F_MLA(hi, lo, X[12], MAD_F(0x0ffc19fd));
2017 MAD_F_MLA(hi, lo, X[14], -MAD_F(0x0acf37ad));
2018 MAD_F_MLA(hi, lo, X[15], MAD_F(0x0f426cb5));
2019 MAD_F_MLA(hi, lo, X[17], -MAD_F(0x0d7e8807));
2020
2021 x[2] = MAD_F_MLZ(hi, lo) + t5;
2022 x[15] = -x[2];
2023
2024 MAD_F_ML0(hi, lo, X[0], MAD_F(0x07635284));
2025 MAD_F_MLA(hi, lo, X[2], MAD_F(0x0acf37ad));
2026 MAD_F_MLA(hi, lo, X[3], MAD_F(0x03768962));
2027 MAD_F_MLA(hi, lo, X[5], MAD_F(0x0d7e8807));
2028 MAD_F_MLA(hi, lo, X[6], -MAD_F(0x00b2aa3e));
2029 MAD_F_MLA(hi, lo, X[8], MAD_F(0x0f426cb5));
2030 MAD_F_MLA(hi, lo, X[9], -MAD_F(0x04cfb0e2));
2031 MAD_F_MLA(hi, lo, X[11], MAD_F(0x0ffc19fd));
2032 MAD_F_MLA(hi, lo, X[12], -MAD_F(0x0898c779));
2033 MAD_F_MLA(hi, lo, X[14], MAD_F(0x0f9ee890));
2034 MAD_F_MLA(hi, lo, X[15], -MAD_F(0x0bcbe352));
2035 MAD_F_MLA(hi, lo, X[17], MAD_F(0x0e313245));
2036
2037 x[3] = MAD_F_MLZ(hi, lo) + t5;
2038 x[14] = -x[3];
2039
2040 MAD_F_ML0(hi, lo, X[0], -MAD_F(0x0ffc19fd));
2041 MAD_F_MLA(hi, lo, X[2], -MAD_F(0x0f9ee890));
2042 MAD_F_MLA(hi, lo, X[3], -MAD_F(0x0f426cb5));
2043 MAD_F_MLA(hi, lo, X[5], -MAD_F(0x0e313245));
2044 MAD_F_MLA(hi, lo, X[6], -MAD_F(0x0d7e8807));
2045 MAD_F_MLA(hi, lo, X[8], -MAD_F(0x0bcbe352));
2046 MAD_F_MLA(hi, lo, X[9], -MAD_F(0x0acf37ad));
2047 MAD_F_MLA(hi, lo, X[11], -MAD_F(0x0898c779));
2048 MAD_F_MLA(hi, lo, X[12], -MAD_F(0x07635284));
2049 MAD_F_MLA(hi, lo, X[14], -MAD_F(0x04cfb0e2));
2050 MAD_F_MLA(hi, lo, X[15], -MAD_F(0x03768962));
2051 MAD_F_MLA(hi, lo, X[17], -MAD_F(0x00b2aa3e));
2052
2053 x[26] = x[27] = MAD_F_MLZ(hi, lo) + t5;
2054}
2055# endif
2056
2057/*
2058 * NAME: III_imdct_l()
2059 * DESCRIPTION: perform IMDCT and windowing for long blocks
2060 */
2061static
2062void III_imdct_l(mad_fixed_t const X[18], mad_fixed_t z[36],
2063 unsigned int block_type)
2064{
2065 unsigned int i;
2066
2067 /* IMDCT */
2068
2069 imdct36(X, z);
2070
2071 /* windowing */
2072
2073 switch (block_type) {
2074 case 0: /* normal window */
2075# if defined(ASO_INTERLEAVE1)
2076 {
2077 register mad_fixed_t tmp1, tmp2;
2078
2079 tmp1 = window_l[0];
2080 tmp2 = window_l[1];
2081
2082 for (i = 0; i < 34; i += 2) {
2083 z[i + 0] = mad_f_mul(z[i + 0], tmp1);
2084 tmp1 = window_l[i + 2];
2085 z[i + 1] = mad_f_mul(z[i + 1], tmp2);
2086 tmp2 = window_l[i + 3];
2087 }
2088
2089 z[34] = mad_f_mul(z[34], tmp1);
2090 z[35] = mad_f_mul(z[35], tmp2);
2091 }
2092# elif defined(ASO_INTERLEAVE2)
2093 {
2094 register mad_fixed_t tmp1, tmp2;
2095
2096 tmp1 = z[0];
2097 tmp2 = window_l[0];
2098
2099 for (i = 0; i < 35; ++i) {
2100 z[i] = mad_f_mul(tmp1, tmp2);
2101 tmp1 = z[i + 1];
2102 tmp2 = window_l[i + 1];
2103 }
2104
2105 z[35] = mad_f_mul(tmp1, tmp2);
2106 }
2107# elif 1
2108 for (i = 0; i < 36; i += 4) {
2109 z[i + 0] = mad_f_mul(z[i + 0], window_l[i + 0]);
2110 z[i + 1] = mad_f_mul(z[i + 1], window_l[i + 1]);
2111 z[i + 2] = mad_f_mul(z[i + 2], window_l[i + 2]);
2112 z[i + 3] = mad_f_mul(z[i + 3], window_l[i + 3]);
2113 }
2114# else
2115 for (i = 0; i < 36; ++i) z[i] = mad_f_mul(z[i], window_l[i]);
2116# endif
2117 break;
2118
2119 case 1: /* start block */
2120 for (i = 0; i < 18; i += 3) {
2121 z[i + 0] = mad_f_mul(z[i + 0], window_l[i + 0]);
2122 z[i + 1] = mad_f_mul(z[i + 1], window_l[i + 1]);
2123 z[i + 2] = mad_f_mul(z[i + 2], window_l[i + 2]);
2124 }
2125 /* (i = 18; i < 24; ++i) z[i] unchanged */
2126 for (i = 24; i < 30; ++i) z[i] = mad_f_mul(z[i], window_s[i - 18]);
2127 for (i = 30; i < 36; ++i) z[i] = 0;
2128 break;
2129
2130 case 3: /* stop block */
2131 for (i = 0; i < 6; ++i) z[i] = 0;
2132 for (i = 6; i < 12; ++i) z[i] = mad_f_mul(z[i], window_s[i - 6]);
2133 /* (i = 12; i < 18; ++i) z[i] unchanged */
2134 for (i = 18; i < 36; i += 3) {
2135 z[i + 0] = mad_f_mul(z[i + 0], window_l[i + 0]);
2136 z[i + 1] = mad_f_mul(z[i + 1], window_l[i + 1]);
2137 z[i + 2] = mad_f_mul(z[i + 2], window_l[i + 2]);
2138 }
2139 break;
2140 }
2141}
2142# endif /* ASO_IMDCT */
2143
2144/*
2145 * NAME: III_imdct_s()
2146 * DESCRIPTION: perform IMDCT and windowing for short blocks
2147 */
2148static
2149void III_imdct_s(mad_fixed_t const X[18], mad_fixed_t z[36])
2150{
2151 mad_fixed_t y[36], *yptr;
2152 mad_fixed_t const *wptr;
2153 int w, i;
2154 register mad_fixed64hi_t hi;
2155 register mad_fixed64lo_t lo;
2156
2157 /* IMDCT */
2158
2159 yptr = &y[0];
2160
2161 for (w = 0; w < 3; ++w) {
2162 register mad_fixed_t const (*s)[6];
2163
2164 s = imdct_s;
2165
2166 for (i = 0; i < 3; ++i) {
2167 MAD_F_ML0(hi, lo, X[0], (*s)[0]);
2168 MAD_F_MLA(hi, lo, X[1], (*s)[1]);
2169 MAD_F_MLA(hi, lo, X[2], (*s)[2]);
2170 MAD_F_MLA(hi, lo, X[3], (*s)[3]);
2171 MAD_F_MLA(hi, lo, X[4], (*s)[4]);
2172 MAD_F_MLA(hi, lo, X[5], (*s)[5]);
2173
2174 yptr[i + 0] = MAD_F_MLZ(hi, lo);
2175 yptr[5 - i] = -yptr[i + 0];
2176
2177 ++s;
2178
2179 MAD_F_ML0(hi, lo, X[0], (*s)[0]);
2180 MAD_F_MLA(hi, lo, X[1], (*s)[1]);
2181 MAD_F_MLA(hi, lo, X[2], (*s)[2]);
2182 MAD_F_MLA(hi, lo, X[3], (*s)[3]);
2183 MAD_F_MLA(hi, lo, X[4], (*s)[4]);
2184 MAD_F_MLA(hi, lo, X[5], (*s)[5]);
2185
2186 yptr[ i + 6] = MAD_F_MLZ(hi, lo);
2187 yptr[11 - i] = yptr[i + 6];
2188
2189 ++s;
2190 }
2191
2192 yptr += 12;
2193 X += 6;
2194 }
2195
2196 /* windowing, overlapping and concatenation */
2197
2198 yptr = &y[0];
2199 wptr = &window_s[0];
2200
2201 for (i = 0; i < 6; ++i) {
2202 z[i + 0] = 0;
2203 z[i + 6] = mad_f_mul(yptr[ 0 + 0], wptr[0]);
2204
2205 MAD_F_ML0(hi, lo, yptr[ 0 + 6], wptr[6]);
2206 MAD_F_MLA(hi, lo, yptr[12 + 0], wptr[0]);
2207
2208 z[i + 12] = MAD_F_MLZ(hi, lo);
2209
2210 MAD_F_ML0(hi, lo, yptr[12 + 6], wptr[6]);
2211 MAD_F_MLA(hi, lo, yptr[24 + 0], wptr[0]);
2212
2213 z[i + 18] = MAD_F_MLZ(hi, lo);
2214
2215 z[i + 24] = mad_f_mul(yptr[24 + 6], wptr[6]);
2216 z[i + 30] = 0;
2217
2218 ++yptr;
2219 ++wptr;
2220 }
2221}
2222
2223/*
2224 * NAME: III_overlap()
2225 * DESCRIPTION: perform overlap-add of windowed IMDCT outputs
2226 */
2227static
2228void III_overlap(mad_fixed_t const output[36], mad_fixed_t overlap[18],
2229 mad_fixed_t sample[18][32], unsigned int sb)
2230{
2231 unsigned int i;
2232
2233# if defined(ASO_INTERLEAVE2)
2234 {
2235 register mad_fixed_t tmp1, tmp2;
2236
2237 tmp1 = overlap[0];
2238 tmp2 = overlap[1];
2239
2240 for (i = 0; i < 16; i += 2) {
2241 sample[i + 0][sb] = output[i + 0 + 0] + tmp1;
2242 overlap[i + 0] = output[i + 0 + 18];
2243 tmp1 = overlap[i + 2];
2244
2245 sample[i + 1][sb] = output[i + 1 + 0] + tmp2;
2246 overlap[i + 1] = output[i + 1 + 18];
2247 tmp2 = overlap[i + 3];
2248 }
2249
2250 sample[16][sb] = output[16 + 0] + tmp1;
2251 overlap[16] = output[16 + 18];
2252 sample[17][sb] = output[17 + 0] + tmp2;
2253 overlap[17] = output[17 + 18];
2254 }
2255# elif 0
2256 for (i = 0; i < 18; i += 2) {
2257 sample[i + 0][sb] = output[i + 0 + 0] + overlap[i + 0];
2258 overlap[i + 0] = output[i + 0 + 18];
2259
2260 sample[i + 1][sb] = output[i + 1 + 0] + overlap[i + 1];
2261 overlap[i + 1] = output[i + 1 + 18];
2262 }
2263# else
2264 for (i = 0; i < 18; ++i) {
2265 sample[i][sb] = output[i + 0] + overlap[i];
2266 overlap[i] = output[i + 18];
2267 }
2268# endif
2269}
2270
2271/*
2272 * NAME: III_overlap_z()
2273 * DESCRIPTION: perform "overlap-add" of zero IMDCT outputs
2274 */
2275static inline
2276void III_overlap_z(mad_fixed_t overlap[18],
2277 mad_fixed_t sample[18][32], unsigned int sb)
2278{
2279 unsigned int i;
2280
2281# if defined(ASO_INTERLEAVE2)
2282 {
2283 register mad_fixed_t tmp1, tmp2;
2284
2285 tmp1 = overlap[0];
2286 tmp2 = overlap[1];
2287
2288 for (i = 0; i < 16; i += 2) {
2289 sample[i + 0][sb] = tmp1;
2290 overlap[i + 0] = 0;
2291 tmp1 = overlap[i + 2];
2292
2293 sample[i + 1][sb] = tmp2;
2294 overlap[i + 1] = 0;
2295 tmp2 = overlap[i + 3];
2296 }
2297
2298 sample[16][sb] = tmp1;
2299 overlap[16] = 0;
2300 sample[17][sb] = tmp2;
2301 overlap[17] = 0;
2302 }
2303# else
2304 for (i = 0; i < 18; ++i) {
2305 sample[i][sb] = overlap[i];
2306 overlap[i] = 0;
2307 }
2308# endif
2309}
2310
2311/*
2312 * NAME: III_freqinver()
2313 * DESCRIPTION: perform subband frequency inversion for odd sample lines
2314 */
2315static
2316void III_freqinver(mad_fixed_t sample[18][32], unsigned int sb)
2317{
2318 unsigned int i;
2319
2320# if 1 || defined(ASO_INTERLEAVE1) || defined(ASO_INTERLEAVE2)
2321 {
2322 register mad_fixed_t tmp1, tmp2;
2323
2324 tmp1 = sample[1][sb];
2325 tmp2 = sample[3][sb];
2326
2327 for (i = 1; i < 13; i += 4) {
2328 sample[i + 0][sb] = -tmp1;
2329 tmp1 = sample[i + 4][sb];
2330 sample[i + 2][sb] = -tmp2;
2331 tmp2 = sample[i + 6][sb];
2332 }
2333
2334 sample[13][sb] = -tmp1;
2335 tmp1 = sample[17][sb];
2336 sample[15][sb] = -tmp2;
2337 sample[17][sb] = -tmp1;
2338 }
2339# else
2340 for (i = 1; i < 18; i += 2)
2341 sample[i][sb] = -sample[i][sb];
2342# endif
2343}
2344
2345/*
2346 * NAME: III_decode()
2347 * DESCRIPTION: decode frame main_data
2348 */
2349static
2350enum mad_error III_decode(struct mad_bitptr *ptr, struct mad_frame *frame,
2351 struct sideinfo *si, unsigned int nch)
2352{
2353 struct mad_header *header = &frame->header;
2354 unsigned int sfreqi, ngr, gr;
2355
2356 {
2357 unsigned int sfreq;
2358
2359 sfreq = header->samplerate;
2360 if (header->flags & MAD_FLAG_MPEG_2_5_EXT)
2361 sfreq *= 2;
2362
2363 /* 48000 => 0, 44100 => 1, 32000 => 2,
2364 24000 => 3, 22050 => 4, 16000 => 5 */
2365 sfreqi = ((sfreq >> 7) & 0x000f) +
2366 ((sfreq >> 15) & 0x0001) - 8;
2367
2368 if (header->flags & MAD_FLAG_MPEG_2_5_EXT)
2369 sfreqi += 3;
2370 }
2371
2372 /* scalefactors, Huffman decoding, requantization */
2373
2374 ngr = (header->flags & MAD_FLAG_LSF_EXT) ? 1 : 2;
2375
2376 for (gr = 0; gr < ngr; ++gr) {
2377 struct granule *granule = &si->gr[gr];
2378 unsigned char const *sfbwidth[2];
2379 mad_fixed_t xr[2][576];
2380 unsigned int ch;
2381 enum mad_error error;
2382
2383 for (ch = 0; ch < nch; ++ch) {
2384 struct channel *channel = &granule->ch[ch];
2385 unsigned int part2_length;
2386
2387 sfbwidth[ch] = sfbwidth_table[sfreqi].l;
2388 if (channel->block_type == 2) {
2389 sfbwidth[ch] = (channel->flags & mixed_block_flag) ?
2390 sfbwidth_table[sfreqi].m : sfbwidth_table[sfreqi].s;
2391 }
2392
2393 if (header->flags & MAD_FLAG_LSF_EXT) {
2394 part2_length = III_scalefactors_lsf(ptr, channel,
2395 ch == 0 ? 0 : &si->gr[1].ch[1],
2396 header->mode_extension);
2397 }
2398 else {
2399 part2_length = III_scalefactors(ptr, channel, &si->gr[0].ch[ch],
2400 gr == 0 ? 0 : si->scfsi[ch]);
2401 }
2402
2403 error = III_huffdecode(ptr, xr[ch], channel, sfbwidth[ch], part2_length);
2404 if (error)
2405 return error;
2406 }
2407
2408 /* joint stereo processing */
2409
2410 if (header->mode == MAD_MODE_JOINT_STEREO && header->mode_extension) {
2411 error = III_stereo(xr, granule, header, sfbwidth[0]);
2412 if (error)
2413 return error;
2414 }
2415
2416 /* reordering, alias reduction, IMDCT, overlap-add, frequency inversion */
2417
2418 for (ch = 0; ch < nch; ++ch) {
2419 struct channel const *channel = &granule->ch[ch];
2420 mad_fixed_t (*sample)[32] = &frame->sbsample[ch][18 * gr];
2421 unsigned int sb, l, i, sblimit;
2422 mad_fixed_t output[36];
2423
2424 if (channel->block_type == 2) {
2425 III_reorder(xr[ch], channel, sfbwidth[ch]);
2426
2427# if !defined(OPT_STRICT)
2428 /*
2429 * According to ISO/IEC 11172-3, "Alias reduction is not applied for
2430 * granules with block_type == 2 (short block)." However, other
2431 * sources suggest alias reduction should indeed be performed on the
2432 * lower two subbands of mixed blocks. Most other implementations do
2433 * this, so by default we will too.
2434 */
2435 if (channel->flags & mixed_block_flag)
2436 III_aliasreduce(xr[ch], 36);
2437# endif
2438 }
2439 else
2440 III_aliasreduce(xr[ch], 576);
2441
2442 l = 0;
2443
2444 /* subbands 0-1 */
2445
2446 if (channel->block_type != 2 || (channel->flags & mixed_block_flag)) {
2447 unsigned int block_type;
2448
2449 block_type = channel->block_type;
2450 if (channel->flags & mixed_block_flag)
2451 block_type = 0;
2452
2453 /* long blocks */
2454 for (sb = 0; sb < 2; ++sb, l += 18) {
2455 III_imdct_l(&xr[ch][l], output, block_type);
2456 III_overlap(output, (*frame->overlap)[ch][sb], sample, sb);
2457 }
2458 }
2459 else {
2460 /* short blocks */
2461 for (sb = 0; sb < 2; ++sb, l += 18) {
2462 III_imdct_s(&xr[ch][l], output);
2463 III_overlap(output, (*frame->overlap)[ch][sb], sample, sb);
2464 }
2465 }
2466
2467 III_freqinver(sample, 1);
2468
2469 /* (nonzero) subbands 2-31 */
2470
2471 i = 576;
2472 while (i > 36 && xr[ch][i - 1] == 0)
2473 --i;
2474
2475 sblimit = 32 - (576 - i) / 18;
2476
2477 if (channel->block_type != 2) {
2478 /* long blocks */
2479 for (sb = 2; sb < sblimit; ++sb, l += 18) {
2480 III_imdct_l(&xr[ch][l], output, channel->block_type);
2481 III_overlap(output, (*frame->overlap)[ch][sb], sample, sb);
2482
2483 if (sb & 1)
2484 III_freqinver(sample, sb);
2485 }
2486 }
2487 else {
2488 /* short blocks */
2489 for (sb = 2; sb < sblimit; ++sb, l += 18) {
2490 III_imdct_s(&xr[ch][l], output);
2491 III_overlap(output, (*frame->overlap)[ch][sb], sample, sb);
2492
2493 if (sb & 1)
2494 III_freqinver(sample, sb);
2495 }
2496 }
2497
2498 /* remaining (zero) subbands */
2499
2500 for (sb = sblimit; sb < 32; ++sb) {
2501 III_overlap_z((*frame->overlap)[ch][sb], sample, sb);
2502
2503 if (sb & 1)
2504 III_freqinver(sample, sb);
2505 }
2506 }
2507 }
2508
2509 return MAD_ERROR_NONE;
2510}
2511
2512/*
2513 * NAME: layer->III()
2514 * DESCRIPTION: decode a single Layer III frame
2515 */
2516int mad_layer_III(struct mad_stream *stream, struct mad_frame *frame)
2517{
2518 struct mad_header *header = &frame->header;
2519 unsigned int nch, priv_bitlen, next_md_begin = 0;
2520 unsigned int si_len, data_bitlen, md_len;
2521 unsigned int frame_space, frame_used, frame_free;
2522 struct mad_bitptr ptr;
2523 struct sideinfo si;
2524 enum mad_error error;
2525 int result = 0;
2526
2527 /* allocate Layer III dynamic structures */
2528
2529 if (stream->main_data == 0) {
2530 stream->main_data = malloc(MAD_BUFFER_MDLEN);
2531 if (stream->main_data == 0) {
2532 stream->error = MAD_ERROR_NOMEM;
2533 return -1;
2534 }
2535 }
2536
2537 if (frame->overlap == 0) {
2538 frame->overlap = calloc(2 * 32 * 18, sizeof(mad_fixed_t));
2539 if (frame->overlap == 0) {
2540 stream->error = MAD_ERROR_NOMEM;
2541 return -1;
2542 }
2543 }
2544
2545 nch = MAD_NCHANNELS(header);
2546 si_len = (header->flags & MAD_FLAG_LSF_EXT) ?
2547 (nch == 1 ? 9 : 17) : (nch == 1 ? 17 : 32);
2548
2549 /* check frame sanity */
2550
2551 if (stream->next_frame - mad_bit_nextbyte(&stream->ptr) <
2552 (signed int) si_len) {
2553 stream->error = MAD_ERROR_BADFRAMELEN;
2554 stream->md_len = 0;
2555 return -1;
2556 }
2557
2558 /* check CRC word */
2559
2560 if (header->flags & MAD_FLAG_PROTECTION) {
2561 header->crc_check =
2562 mad_bit_crc(stream->ptr, si_len * CHAR_BIT, header->crc_check);
2563
2564 if (header->crc_check != header->crc_target &&
2565 !(frame->options & MAD_OPTION_IGNORECRC)) {
2566 stream->error = MAD_ERROR_BADCRC;
2567 result = -1;
2568 }
2569 }
2570
2571 /* decode frame side information */
2572
2573 error = III_sideinfo(&stream->ptr, nch, header->flags & MAD_FLAG_LSF_EXT,
2574 &si, &data_bitlen, &priv_bitlen);
2575 if (error && result == 0) {
2576 stream->error = error;
2577 result = -1;
2578 }
2579
2580 header->flags |= priv_bitlen;
2581 header->private_bits |= si.private_bits;
2582
2583 /* find main_data of next frame */
2584
2585 {
2586 struct mad_bitptr peek;
2587 unsigned long header;
2588
2589 mad_bit_init(&peek, stream->next_frame);
2590
2591 header = mad_bit_read(&peek, 32);
2592 if ((header & 0xffe60000L) /* syncword | layer */ == 0xffe20000L) {
2593 if (!(header & 0x00010000L)) /* protection_bit */
2594 mad_bit_skip(&peek, 16); /* crc_check */
2595
2596 next_md_begin =
2597 mad_bit_read(&peek, (header & 0x00080000L) /* ID */ ? 9 : 8);
2598 }
2599
2600 mad_bit_finish(&peek);
2601 }
2602
2603 /* find main_data of this frame */
2604
2605 frame_space = stream->next_frame - mad_bit_nextbyte(&stream->ptr);
2606
2607 if (next_md_begin > si.main_data_begin + frame_space)
2608 next_md_begin = 0;
2609
2610 md_len = si.main_data_begin + frame_space - next_md_begin;
2611
2612 frame_used = 0;
2613
2614 if (si.main_data_begin == 0) {
2615 ptr = stream->ptr;
2616 stream->md_len = 0;
2617
2618 frame_used = md_len;
2619 }
2620 else {
2621 if (si.main_data_begin > stream->md_len) {
2622 if (result == 0) {
2623 stream->error = MAD_ERROR_BADDATAPTR;
2624 result = -1;
2625 }
2626 }
2627 else {
2628 mad_bit_init(&ptr,
2629 *stream->main_data + stream->md_len - si.main_data_begin);
2630
2631 if (md_len > si.main_data_begin) {
2632 assert(stream->md_len + md_len -
2633 si.main_data_begin <= MAD_BUFFER_MDLEN);
2634
2635 memcpy(*stream->main_data + stream->md_len,
2636 mad_bit_nextbyte(&stream->ptr),
2637 frame_used = md_len - si.main_data_begin);
2638 stream->md_len += frame_used;
2639 }
2640 }
2641 }
2642
2643 frame_free = frame_space - frame_used;
2644
2645 /* decode main_data */
2646
2647 if (result == 0) {
2648 error = III_decode(&ptr, frame, &si, nch);
2649 if (error) {
2650 stream->error = error;
2651 result = -1;
2652 }
2653
2654 /* designate ancillary bits */
2655
2656 stream->anc_ptr = ptr;
2657 stream->anc_bitlen = md_len * CHAR_BIT - data_bitlen;
2658 }
2659
2660# if 0 && defined(DEBUG)
2661 fprintf(stderr,
2662 "main_data_begin:%u, md_len:%u, frame_free:%u, "
2663 "data_bitlen:%u, anc_bitlen: %u\n",
2664 si.main_data_begin, md_len, frame_free,
2665 data_bitlen, stream->anc_bitlen);
2666# endif
2667
2668 /* preload main_data buffer with up to 511 bytes for next frame(s) */
2669
2670 if (frame_free >= next_md_begin) {
2671 memcpy(*stream->main_data,
2672 stream->next_frame - next_md_begin, next_md_begin);
2673 stream->md_len = next_md_begin;
2674 }
2675 else {
2676 if (md_len < si.main_data_begin) {
2677 unsigned int extra;
2678
2679 extra = si.main_data_begin - md_len;
2680 if (extra + frame_free > next_md_begin)
2681 extra = next_md_begin - frame_free;
2682
2683 if (extra < stream->md_len) {
2684 memmove(*stream->main_data,
2685 *stream->main_data + stream->md_len - extra, extra);
2686 stream->md_len = extra;
2687 }
2688 }
2689 else
2690 stream->md_len = 0;
2691
2692 memcpy(*stream->main_data + stream->md_len,
2693 stream->next_frame - frame_free, frame_free);
2694 stream->md_len += frame_free;
2695 }
2696
2697 return result;
2698}
diff --git a/apps/codecs/libmad/layer3.h b/apps/codecs/libmad/layer3.h
new file mode 100644
index 0000000000..15948037e9
--- /dev/null
+++ b/apps/codecs/libmad/layer3.h
@@ -0,0 +1,30 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2004 Underbit Technologies, Inc.
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/apps/codecs/libmad/mad.h b/apps/codecs/libmad/mad.h
new file mode 100644
index 0000000000..9ef6cc8f70
--- /dev/null
+++ b/apps/codecs/libmad/mad.h
@@ -0,0 +1,964 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2004 Underbit Technologies, Inc.
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: Underbit Technologies, Inc. <info@underbit.com>
21 */
22
23# ifdef __cplusplus
24extern "C" {
25# endif
26
27# define FPM_INTEL
28
29
30
31# define SIZEOF_INT 4
32# define SIZEOF_LONG 4
33# define SIZEOF_LONG_LONG 8
34
35
36/* Id: version.h,v 1.26 2004/01/23 09:41:33 rob Exp */
37
38# ifndef LIBMAD_VERSION_H
39# define LIBMAD_VERSION_H
40
41# define MAD_VERSION_MAJOR 0
42# define MAD_VERSION_MINOR 15
43# define MAD_VERSION_PATCH 1
44# define MAD_VERSION_EXTRA " (beta)"
45
46# define MAD_VERSION_STRINGIZE(str) #str
47# define MAD_VERSION_STRING(num) MAD_VERSION_STRINGIZE(num)
48
49# define MAD_VERSION MAD_VERSION_STRING(MAD_VERSION_MAJOR) "." \
50 MAD_VERSION_STRING(MAD_VERSION_MINOR) "." \
51 MAD_VERSION_STRING(MAD_VERSION_PATCH) \
52 MAD_VERSION_EXTRA
53
54# define MAD_PUBLISHYEAR "2000-2004"
55# define MAD_AUTHOR "Underbit Technologies, Inc."
56# define MAD_EMAIL "info@underbit.com"
57
58extern char const mad_version[];
59extern char const mad_copyright[];
60extern char const mad_author[];
61extern char const mad_build[];
62
63# endif
64
65/* Id: fixed.h,v 1.38 2004/02/17 02:02:03 rob Exp */
66
67# ifndef LIBMAD_FIXED_H
68# define LIBMAD_FIXED_H
69
70# if SIZEOF_INT >= 4
71typedef signed int mad_fixed_t;
72
73typedef signed int mad_fixed64hi_t;
74typedef unsigned int mad_fixed64lo_t;
75# else
76typedef signed long mad_fixed_t;
77
78typedef signed long mad_fixed64hi_t;
79typedef unsigned long mad_fixed64lo_t;
80# endif
81
82# if defined(_MSC_VER)
83# define mad_fixed64_t signed __int64
84# elif 1 || defined(__GNUC__)
85# define mad_fixed64_t signed long long
86# endif
87
88# if defined(FPM_FLOAT)
89typedef double mad_sample_t;
90# else
91typedef mad_fixed_t mad_sample_t;
92# endif
93
94/*
95 * Fixed-point format: 0xABBBBBBB
96 * A == whole part (sign + 3 bits)
97 * B == fractional part (28 bits)
98 *
99 * Values are signed two's complement, so the effective range is:
100 * 0x80000000 to 0x7fffffff
101 * -8.0 to +7.9999999962747097015380859375
102 *
103 * The smallest representable value is:
104 * 0x00000001 == 0.0000000037252902984619140625 (i.e. about 3.725e-9)
105 *
106 * 28 bits of fractional accuracy represent about
107 * 8.6 digits of decimal accuracy.
108 *
109 * Fixed-point numbers can be added or subtracted as normal
110 * integers, but multiplication requires shifting the 64-bit result
111 * from 56 fractional bits back to 28 (and rounding.)
112 *
113 * Changing the definition of MAD_F_FRACBITS is only partially
114 * supported, and must be done with care.
115 */
116
117# define MAD_F_FRACBITS 28
118
119# if MAD_F_FRACBITS == 28
120# define MAD_F(x) ((mad_fixed_t) (x##L))
121# else
122# if MAD_F_FRACBITS < 28
123# warning "MAD_F_FRACBITS < 28"
124# define MAD_F(x) ((mad_fixed_t) \
125 (((x##L) + \
126 (1L << (28 - MAD_F_FRACBITS - 1))) >> \
127 (28 - MAD_F_FRACBITS)))
128# elif MAD_F_FRACBITS > 28
129# error "MAD_F_FRACBITS > 28 not currently supported"
130# define MAD_F(x) ((mad_fixed_t) \
131 ((x##L) << (MAD_F_FRACBITS - 28)))
132# endif
133# endif
134
135# define MAD_F_MIN ((mad_fixed_t) -0x80000000L)
136# define MAD_F_MAX ((mad_fixed_t) +0x7fffffffL)
137
138# define MAD_F_ONE MAD_F(0x10000000)
139
140# define mad_f_tofixed(x) ((mad_fixed_t) \
141 ((x) * (double) (1L << MAD_F_FRACBITS) + 0.5))
142# define mad_f_todouble(x) ((double) \
143 ((x) / (double) (1L << MAD_F_FRACBITS)))
144
145# define mad_f_intpart(x) ((x) >> MAD_F_FRACBITS)
146# define mad_f_fracpart(x) ((x) & ((1L << MAD_F_FRACBITS) - 1))
147 /* (x should be positive) */
148
149# define mad_f_fromint(x) ((x) << MAD_F_FRACBITS)
150
151# define mad_f_add(x, y) ((x) + (y))
152# define mad_f_sub(x, y) ((x) - (y))
153
154# if defined(FPM_FLOAT)
155# error "FPM_FLOAT not yet supported"
156
157# undef MAD_F
158# define MAD_F(x) mad_f_todouble(x)
159
160# define mad_f_mul(x, y) ((x) * (y))
161# define mad_f_scale64
162
163# undef ASO_ZEROCHECK
164
165# elif defined(FPM_64BIT)
166
167/*
168 * This version should be the most accurate if 64-bit types are supported by
169 * the compiler, although it may not be the most efficient.
170 */
171# if defined(OPT_ACCURACY)
172# define mad_f_mul(x, y) \
173 ((mad_fixed_t) \
174 ((((mad_fixed64_t) (x) * (y)) + \
175 (1L << (MAD_F_SCALEBITS - 1))) >> MAD_F_SCALEBITS))
176# else
177# define mad_f_mul(x, y) \
178 ((mad_fixed_t) (((mad_fixed64_t) (x) * (y)) >> MAD_F_SCALEBITS))
179# endif
180
181# define MAD_F_SCALEBITS MAD_F_FRACBITS
182
183/* --- Intel --------------------------------------------------------------- */
184
185# elif defined(FPM_INTEL)
186
187# if defined(_MSC_VER)
188# pragma warning(push)
189# pragma warning(disable: 4035) /* no return value */
190static __forceinline
191mad_fixed_t mad_f_mul_inline(mad_fixed_t x, mad_fixed_t y)
192{
193 enum {
194 fracbits = MAD_F_FRACBITS
195 };
196
197 __asm {
198 mov eax, x
199 imul y
200 shrd eax, edx, fracbits
201 }
202
203 /* implicit return of eax */
204}
205# pragma warning(pop)
206
207# define mad_f_mul mad_f_mul_inline
208# define mad_f_scale64
209# else
210/*
211 * This Intel version is fast and accurate; the disposition of the least
212 * significant bit depends on OPT_ACCURACY via mad_f_scale64().
213 */
214# define MAD_F_MLX(hi, lo, x, y) \
215 asm ("imull %3" \
216 : "=a" (lo), "=d" (hi) \
217 : "%a" (x), "rm" (y) \
218 : "cc")
219
220# if defined(OPT_ACCURACY)
221/*
222 * This gives best accuracy but is not very fast.
223 */
224# define MAD_F_MLA(hi, lo, x, y) \
225 ({ mad_fixed64hi_t __hi; \
226 mad_fixed64lo_t __lo; \
227 MAD_F_MLX(__hi, __lo, (x), (y)); \
228 asm ("addl %2,%0\n\t" \
229 "adcl %3,%1" \
230 : "=rm" (lo), "=rm" (hi) \
231 : "r" (__lo), "r" (__hi), "0" (lo), "1" (hi) \
232 : "cc"); \
233 })
234# endif /* OPT_ACCURACY */
235
236# if defined(OPT_ACCURACY)
237/*
238 * Surprisingly, this is faster than SHRD followed by ADC.
239 */
240# define mad_f_scale64(hi, lo) \
241 ({ mad_fixed64hi_t __hi_; \
242 mad_fixed64lo_t __lo_; \
243 mad_fixed_t __result; \
244 asm ("addl %4,%2\n\t" \
245 "adcl %5,%3" \
246 : "=rm" (__lo_), "=rm" (__hi_) \
247 : "0" (lo), "1" (hi), \
248 "ir" (1L << (MAD_F_SCALEBITS - 1)), "ir" (0) \
249 : "cc"); \
250 asm ("shrdl %3,%2,%1" \
251 : "=rm" (__result) \
252 : "0" (__lo_), "r" (__hi_), "I" (MAD_F_SCALEBITS) \
253 : "cc"); \
254 __result; \
255 })
256# elif defined(OPT_INTEL)
257/*
258 * Alternate Intel scaling that may or may not perform better.
259 */
260# define mad_f_scale64(hi, lo) \
261 ({ mad_fixed_t __result; \
262 asm ("shrl %3,%1\n\t" \
263 "shll %4,%2\n\t" \
264 "orl %2,%1" \
265 : "=rm" (__result) \
266 : "0" (lo), "r" (hi), \
267 "I" (MAD_F_SCALEBITS), "I" (32 - MAD_F_SCALEBITS) \
268 : "cc"); \
269 __result; \
270 })
271# else
272# define mad_f_scale64(hi, lo) \
273 ({ mad_fixed_t __result; \
274 asm ("shrdl %3,%2,%1" \
275 : "=rm" (__result) \
276 : "0" (lo), "r" (hi), "I" (MAD_F_SCALEBITS) \
277 : "cc"); \
278 __result; \
279 })
280# endif /* OPT_ACCURACY */
281
282# define MAD_F_SCALEBITS MAD_F_FRACBITS
283# endif
284
285/* --- ARM ----------------------------------------------------------------- */
286
287# elif defined(FPM_ARM)
288
289/*
290 * This ARM V4 version is as accurate as FPM_64BIT but much faster. The
291 * least significant bit is properly rounded at no CPU cycle cost!
292 */
293# if 1
294/*
295 * This is faster than the default implementation via MAD_F_MLX() and
296 * mad_f_scale64().
297 */
298# define mad_f_mul(x, y) \
299 ({ mad_fixed64hi_t __hi; \
300 mad_fixed64lo_t __lo; \
301 mad_fixed_t __result; \
302 asm ("smull %0, %1, %3, %4\n\t" \
303 "movs %0, %0, lsr %5\n\t" \
304 "adc %2, %0, %1, lsl %6" \
305 : "=&r" (__lo), "=&r" (__hi), "=r" (__result) \
306 : "%r" (x), "r" (y), \
307 "M" (MAD_F_SCALEBITS), "M" (32 - MAD_F_SCALEBITS) \
308 : "cc"); \
309 __result; \
310 })
311# endif
312
313# define MAD_F_MLX(hi, lo, x, y) \
314 asm ("smull %0, %1, %2, %3" \
315 : "=&r" (lo), "=&r" (hi) \
316 : "%r" (x), "r" (y))
317
318# define MAD_F_MLA(hi, lo, x, y) \
319 asm ("smlal %0, %1, %2, %3" \
320 : "+r" (lo), "+r" (hi) \
321 : "%r" (x), "r" (y))
322
323# define MAD_F_MLN(hi, lo) \
324 asm ("rsbs %0, %2, #0\n\t" \
325 "rsc %1, %3, #0" \
326 : "=r" (lo), "=r" (hi) \
327 : "0" (lo), "1" (hi) \
328 : "cc")
329
330# define mad_f_scale64(hi, lo) \
331 ({ mad_fixed_t __result; \
332 asm ("movs %0, %1, lsr %3\n\t" \
333 "adc %0, %0, %2, lsl %4" \
334 : "=&r" (__result) \
335 : "r" (lo), "r" (hi), \
336 "M" (MAD_F_SCALEBITS), "M" (32 - MAD_F_SCALEBITS) \
337 : "cc"); \
338 __result; \
339 })
340
341# define MAD_F_SCALEBITS MAD_F_FRACBITS
342
343/* --- MIPS ---------------------------------------------------------------- */
344
345# elif defined(FPM_MIPS)
346
347/*
348 * This MIPS version is fast and accurate; the disposition of the least
349 * significant bit depends on OPT_ACCURACY via mad_f_scale64().
350 */
351# define MAD_F_MLX(hi, lo, x, y) \
352 asm ("mult %2,%3" \
353 : "=l" (lo), "=h" (hi) \
354 : "%r" (x), "r" (y))
355
356# if defined(HAVE_MADD_ASM)
357# define MAD_F_MLA(hi, lo, x, y) \
358 asm ("madd %2,%3" \
359 : "+l" (lo), "+h" (hi) \
360 : "%r" (x), "r" (y))
361# elif defined(HAVE_MADD16_ASM)
362/*
363 * This loses significant accuracy due to the 16-bit integer limit in the
364 * multiply/accumulate instruction.
365 */
366# define MAD_F_ML0(hi, lo, x, y) \
367 asm ("mult %2,%3" \
368 : "=l" (lo), "=h" (hi) \
369 : "%r" ((x) >> 12), "r" ((y) >> 16))
370# define MAD_F_MLA(hi, lo, x, y) \
371 asm ("madd16 %2,%3" \
372 : "+l" (lo), "+h" (hi) \
373 : "%r" ((x) >> 12), "r" ((y) >> 16))
374# define MAD_F_MLZ(hi, lo) ((mad_fixed_t) (lo))
375# endif
376
377# if defined(OPT_SPEED)
378# define mad_f_scale64(hi, lo) \
379 ((mad_fixed_t) ((hi) << (32 - MAD_F_SCALEBITS)))
380# define MAD_F_SCALEBITS MAD_F_FRACBITS
381# endif
382
383/* --- SPARC --------------------------------------------------------------- */
384
385# elif defined(FPM_SPARC)
386
387/*
388 * This SPARC V8 version is fast and accurate; the disposition of the least
389 * significant bit depends on OPT_ACCURACY via mad_f_scale64().
390 */
391# define MAD_F_MLX(hi, lo, x, y) \
392 asm ("smul %2, %3, %0\n\t" \
393 "rd %%y, %1" \
394 : "=r" (lo), "=r" (hi) \
395 : "%r" (x), "rI" (y))
396
397/* --- PowerPC ------------------------------------------------------------- */
398
399# elif defined(FPM_PPC)
400
401/*
402 * This PowerPC version is fast and accurate; the disposition of the least
403 * significant bit depends on OPT_ACCURACY via mad_f_scale64().
404 */
405# define MAD_F_MLX(hi, lo, x, y) \
406 do { \
407 asm ("mullw %0,%1,%2" \
408 : "=r" (lo) \
409 : "%r" (x), "r" (y)); \
410 asm ("mulhw %0,%1,%2" \
411 : "=r" (hi) \
412 : "%r" (x), "r" (y)); \
413 } \
414 while (0)
415
416# if defined(OPT_ACCURACY)
417/*
418 * This gives best accuracy but is not very fast.
419 */
420# define MAD_F_MLA(hi, lo, x, y) \
421 ({ mad_fixed64hi_t __hi; \
422 mad_fixed64lo_t __lo; \
423 MAD_F_MLX(__hi, __lo, (x), (y)); \
424 asm ("addc %0,%2,%3\n\t" \
425 "adde %1,%4,%5" \
426 : "=r" (lo), "=r" (hi) \
427 : "%r" (lo), "r" (__lo), \
428 "%r" (hi), "r" (__hi) \
429 : "xer"); \
430 })
431# endif
432
433# if defined(OPT_ACCURACY)
434/*
435 * This is slower than the truncating version below it.
436 */
437# define mad_f_scale64(hi, lo) \
438 ({ mad_fixed_t __result, __round; \
439 asm ("rotrwi %0,%1,%2" \
440 : "=r" (__result) \
441 : "r" (lo), "i" (MAD_F_SCALEBITS)); \
442 asm ("extrwi %0,%1,1,0" \
443 : "=r" (__round) \
444 : "r" (__result)); \
445 asm ("insrwi %0,%1,%2,0" \
446 : "+r" (__result) \
447 : "r" (hi), "i" (MAD_F_SCALEBITS)); \
448 asm ("add %0,%1,%2" \
449 : "=r" (__result) \
450 : "%r" (__result), "r" (__round)); \
451 __result; \
452 })
453# else
454# define mad_f_scale64(hi, lo) \
455 ({ mad_fixed_t __result; \
456 asm ("rotrwi %0,%1,%2" \
457 : "=r" (__result) \
458 : "r" (lo), "i" (MAD_F_SCALEBITS)); \
459 asm ("insrwi %0,%1,%2,0" \
460 : "+r" (__result) \
461 : "r" (hi), "i" (MAD_F_SCALEBITS)); \
462 __result; \
463 })
464# endif
465
466# define MAD_F_SCALEBITS MAD_F_FRACBITS
467
468/* --- Default ------------------------------------------------------------- */
469
470# elif defined(FPM_DEFAULT)
471
472/*
473 * This version is the most portable but it loses significant accuracy.
474 * Furthermore, accuracy is biased against the second argument, so care
475 * should be taken when ordering operands.
476 *
477 * The scale factors are constant as this is not used with SSO.
478 *
479 * Pre-rounding is required to stay within the limits of compliance.
480 */
481# if defined(OPT_SPEED)
482# define mad_f_mul(x, y) (((x) >> 12) * ((y) >> 16))
483# else
484# define mad_f_mul(x, y) ((((x) + (1L << 11)) >> 12) * \
485 (((y) + (1L << 15)) >> 16))
486# endif
487
488/* ------------------------------------------------------------------------- */
489
490# else
491# error "no FPM selected"
492# endif
493
494/* default implementations */
495
496# if !defined(mad_f_mul)
497# define mad_f_mul(x, y) \
498 ({ register mad_fixed64hi_t __hi; \
499 register mad_fixed64lo_t __lo; \
500 MAD_F_MLX(__hi, __lo, (x), (y)); \
501 mad_f_scale64(__hi, __lo); \
502 })
503# endif
504
505# if !defined(MAD_F_MLA)
506# define MAD_F_ML0(hi, lo, x, y) ((lo) = mad_f_mul((x), (y)))
507# define MAD_F_MLA(hi, lo, x, y) ((lo) += mad_f_mul((x), (y)))
508# define MAD_F_MLN(hi, lo) ((lo) = -(lo))
509# define MAD_F_MLZ(hi, lo) ((void) (hi), (mad_fixed_t) (lo))
510# endif
511
512# if !defined(MAD_F_ML0)
513# define MAD_F_ML0(hi, lo, x, y) MAD_F_MLX((hi), (lo), (x), (y))
514# endif
515
516# if !defined(MAD_F_MLN)
517# define MAD_F_MLN(hi, lo) ((hi) = ((lo) = -(lo)) ? ~(hi) : -(hi))
518# endif
519
520# if !defined(MAD_F_MLZ)
521# define MAD_F_MLZ(hi, lo) mad_f_scale64((hi), (lo))
522# endif
523
524# if !defined(mad_f_scale64)
525# if defined(OPT_ACCURACY)
526# define mad_f_scale64(hi, lo) \
527 ((((mad_fixed_t) \
528 (((hi) << (32 - (MAD_F_SCALEBITS - 1))) | \
529 ((lo) >> (MAD_F_SCALEBITS - 1)))) + 1) >> 1)
530# else
531# define mad_f_scale64(hi, lo) \
532 ((mad_fixed_t) \
533 (((hi) << (32 - MAD_F_SCALEBITS)) | \
534 ((lo) >> MAD_F_SCALEBITS)))
535# endif
536# define MAD_F_SCALEBITS MAD_F_FRACBITS
537# endif
538
539/* C routines */
540
541mad_fixed_t mad_f_abs(mad_fixed_t);
542mad_fixed_t mad_f_div(mad_fixed_t, mad_fixed_t);
543
544# endif
545
546/* Id: bit.h,v 1.12 2004/01/23 09:41:32 rob Exp */
547
548# ifndef LIBMAD_BIT_H
549# define LIBMAD_BIT_H
550
551struct mad_bitptr {
552 unsigned char const *byte;
553 unsigned short cache;
554 unsigned short left;
555};
556
557void mad_bit_init(struct mad_bitptr *, unsigned char const *);
558
559# define mad_bit_finish(bitptr) /* nothing */
560
561unsigned int mad_bit_length(struct mad_bitptr const *,
562 struct mad_bitptr const *);
563
564# define mad_bit_bitsleft(bitptr) ((bitptr)->left)
565unsigned char const *mad_bit_nextbyte(struct mad_bitptr const *);
566
567void mad_bit_skip(struct mad_bitptr *, unsigned int);
568unsigned long mad_bit_read(struct mad_bitptr *, unsigned int);
569void mad_bit_write(struct mad_bitptr *, unsigned int, unsigned long);
570
571unsigned short mad_bit_crc(struct mad_bitptr, unsigned int, unsigned short);
572
573# endif
574
575/* Id: timer.h,v 1.16 2004/01/23 09:41:33 rob Exp */
576
577# ifndef LIBMAD_TIMER_H
578# define LIBMAD_TIMER_H
579
580typedef struct {
581 signed long seconds; /* whole seconds */
582 unsigned long fraction; /* 1/MAD_TIMER_RESOLUTION seconds */
583} mad_timer_t;
584
585extern mad_timer_t const mad_timer_zero;
586
587# define MAD_TIMER_RESOLUTION 352800000UL
588
589enum mad_units {
590 MAD_UNITS_HOURS = -2,
591 MAD_UNITS_MINUTES = -1,
592 MAD_UNITS_SECONDS = 0,
593
594 /* metric units */
595
596 MAD_UNITS_DECISECONDS = 10,
597 MAD_UNITS_CENTISECONDS = 100,
598 MAD_UNITS_MILLISECONDS = 1000,
599
600 /* audio sample units */
601
602 MAD_UNITS_8000_HZ = 8000,
603 MAD_UNITS_11025_HZ = 11025,
604 MAD_UNITS_12000_HZ = 12000,
605
606 MAD_UNITS_16000_HZ = 16000,
607 MAD_UNITS_22050_HZ = 22050,
608 MAD_UNITS_24000_HZ = 24000,
609
610 MAD_UNITS_32000_HZ = 32000,
611 MAD_UNITS_44100_HZ = 44100,
612 MAD_UNITS_48000_HZ = 48000,
613
614 /* video frame/field units */
615
616 MAD_UNITS_24_FPS = 24,
617 MAD_UNITS_25_FPS = 25,
618 MAD_UNITS_30_FPS = 30,
619 MAD_UNITS_48_FPS = 48,
620 MAD_UNITS_50_FPS = 50,
621 MAD_UNITS_60_FPS = 60,
622
623 /* CD audio frames */
624
625 MAD_UNITS_75_FPS = 75,
626
627 /* video drop-frame units */
628
629 MAD_UNITS_23_976_FPS = -24,
630 MAD_UNITS_24_975_FPS = -25,
631 MAD_UNITS_29_97_FPS = -30,
632 MAD_UNITS_47_952_FPS = -48,
633 MAD_UNITS_49_95_FPS = -50,
634 MAD_UNITS_59_94_FPS = -60
635};
636
637# define mad_timer_reset(timer) ((void) (*(timer) = mad_timer_zero))
638
639int mad_timer_compare(mad_timer_t, mad_timer_t);
640
641# define mad_timer_sign(timer) mad_timer_compare((timer), mad_timer_zero)
642
643void mad_timer_negate(mad_timer_t *);
644mad_timer_t mad_timer_abs(mad_timer_t);
645
646void mad_timer_set(mad_timer_t *, unsigned long, unsigned long, unsigned long);
647void mad_timer_add(mad_timer_t *, mad_timer_t);
648void mad_timer_multiply(mad_timer_t *, signed long);
649
650signed long mad_timer_count(mad_timer_t, enum mad_units);
651unsigned long mad_timer_fraction(mad_timer_t, unsigned long);
652void mad_timer_string(mad_timer_t, char *, char const *,
653 enum mad_units, enum mad_units, unsigned long);
654
655# endif
656
657/* Id: stream.h,v 1.20 2004/02/05 09:02:39 rob Exp */
658
659# ifndef LIBMAD_STREAM_H
660# define LIBMAD_STREAM_H
661
662
663# define MAD_BUFFER_GUARD 8
664# define MAD_BUFFER_MDLEN (511 + 2048 + MAD_BUFFER_GUARD)
665
666enum mad_error {
667 MAD_ERROR_NONE = 0x0000, /* no error */
668
669 MAD_ERROR_BUFLEN = 0x0001, /* input buffer too small (or EOF) */
670 MAD_ERROR_BUFPTR = 0x0002, /* invalid (null) buffer pointer */
671
672 MAD_ERROR_NOMEM = 0x0031, /* not enough memory */
673
674 MAD_ERROR_LOSTSYNC = 0x0101, /* lost synchronization */
675 MAD_ERROR_BADLAYER = 0x0102, /* reserved header layer value */
676 MAD_ERROR_BADBITRATE = 0x0103, /* forbidden bitrate value */
677 MAD_ERROR_BADSAMPLERATE = 0x0104, /* reserved sample frequency value */
678 MAD_ERROR_BADEMPHASIS = 0x0105, /* reserved emphasis value */
679
680 MAD_ERROR_BADCRC = 0x0201, /* CRC check failed */
681 MAD_ERROR_BADBITALLOC = 0x0211, /* forbidden bit allocation value */
682 MAD_ERROR_BADSCALEFACTOR = 0x0221, /* bad scalefactor index */
683 MAD_ERROR_BADMODE = 0x0222, /* bad bitrate/mode combination */
684 MAD_ERROR_BADFRAMELEN = 0x0231, /* bad frame length */
685 MAD_ERROR_BADBIGVALUES = 0x0232, /* bad big_values count */
686 MAD_ERROR_BADBLOCKTYPE = 0x0233, /* reserved block_type */
687 MAD_ERROR_BADSCFSI = 0x0234, /* bad scalefactor selection info */
688 MAD_ERROR_BADDATAPTR = 0x0235, /* bad main_data_begin pointer */
689 MAD_ERROR_BADPART3LEN = 0x0236, /* bad audio data length */
690 MAD_ERROR_BADHUFFTABLE = 0x0237, /* bad Huffman table select */
691 MAD_ERROR_BADHUFFDATA = 0x0238, /* Huffman data overrun */
692 MAD_ERROR_BADSTEREO = 0x0239 /* incompatible block_type for JS */
693};
694
695# define MAD_RECOVERABLE(error) ((error) & 0xff00)
696
697struct mad_stream {
698 unsigned char const *buffer; /* input bitstream buffer */
699 unsigned char const *bufend; /* end of buffer */
700 unsigned long skiplen; /* bytes to skip before next frame */
701
702 int sync; /* stream sync found */
703 unsigned long freerate; /* free bitrate (fixed) */
704
705 unsigned char const *this_frame; /* start of current frame */
706 unsigned char const *next_frame; /* start of next frame */
707 struct mad_bitptr ptr; /* current processing bit pointer */
708
709 struct mad_bitptr anc_ptr; /* ancillary bits pointer */
710 unsigned int anc_bitlen; /* number of ancillary bits */
711
712 unsigned char (*main_data)[MAD_BUFFER_MDLEN];
713 /* Layer III main_data() */
714 unsigned int md_len; /* bytes in main_data */
715
716 int options; /* decoding options (see below) */
717 enum mad_error error; /* error code (see above) */
718};
719
720enum {
721 MAD_OPTION_IGNORECRC = 0x0001, /* ignore CRC errors */
722 MAD_OPTION_HALFSAMPLERATE = 0x0002 /* generate PCM at 1/2 sample rate */
723# if 0 /* not yet implemented */
724 MAD_OPTION_LEFTCHANNEL = 0x0010, /* decode left channel only */
725 MAD_OPTION_RIGHTCHANNEL = 0x0020, /* decode right channel only */
726 MAD_OPTION_SINGLECHANNEL = 0x0030 /* combine channels */
727# endif
728};
729
730void mad_stream_init(struct mad_stream *);
731void mad_stream_finish(struct mad_stream *);
732
733# define mad_stream_options(stream, opts) \
734 ((void) ((stream)->options = (opts)))
735
736void mad_stream_buffer(struct mad_stream *,
737 unsigned char const *, unsigned long);
738void mad_stream_skip(struct mad_stream *, unsigned long);
739
740int mad_stream_sync(struct mad_stream *);
741
742char const *mad_stream_errorstr(struct mad_stream const *);
743
744# endif
745
746/* Id: frame.h,v 1.20 2004/01/23 09:41:32 rob Exp */
747
748# ifndef LIBMAD_FRAME_H
749# define LIBMAD_FRAME_H
750
751
752enum mad_layer {
753 MAD_LAYER_I = 1, /* Layer I */
754 MAD_LAYER_II = 2, /* Layer II */
755 MAD_LAYER_III = 3 /* Layer III */
756};
757
758enum mad_mode {
759 MAD_MODE_SINGLE_CHANNEL = 0, /* single channel */
760 MAD_MODE_DUAL_CHANNEL = 1, /* dual channel */
761 MAD_MODE_JOINT_STEREO = 2, /* joint (MS/intensity) stereo */
762 MAD_MODE_STEREO = 3 /* normal LR stereo */
763};
764
765enum mad_emphasis {
766 MAD_EMPHASIS_NONE = 0, /* no emphasis */
767 MAD_EMPHASIS_50_15_US = 1, /* 50/15 microseconds emphasis */
768 MAD_EMPHASIS_CCITT_J_17 = 3, /* CCITT J.17 emphasis */
769 MAD_EMPHASIS_RESERVED = 2 /* unknown emphasis */
770};
771
772struct mad_header {
773 enum mad_layer layer; /* audio layer (1, 2, or 3) */
774 enum mad_mode mode; /* channel mode (see above) */
775 int mode_extension; /* additional mode info */
776 enum mad_emphasis emphasis; /* de-emphasis to use (see above) */
777
778 unsigned long bitrate; /* stream bitrate (bps) */
779 unsigned int samplerate; /* sampling frequency (Hz) */
780
781 unsigned short crc_check; /* frame CRC accumulator */
782 unsigned short crc_target; /* final target CRC checksum */
783
784 int flags; /* flags (see below) */
785 int private_bits; /* private bits (see below) */
786
787 mad_timer_t duration; /* audio playing time of frame */
788};
789
790struct mad_frame {
791 struct mad_header header; /* MPEG audio header */
792
793 int options; /* decoding options (from stream) */
794
795 mad_fixed_t sbsample[2][36][32]; /* synthesis subband filter samples */
796 mad_fixed_t (*overlap)[2][32][18]; /* Layer III block overlap data */
797};
798
799# define MAD_NCHANNELS(header) ((header)->mode ? 2 : 1)
800# define MAD_NSBSAMPLES(header) \
801 ((header)->layer == MAD_LAYER_I ? 12 : \
802 (((header)->layer == MAD_LAYER_III && \
803 ((header)->flags & MAD_FLAG_LSF_EXT)) ? 18 : 36))
804
805enum {
806 MAD_FLAG_NPRIVATE_III = 0x0007, /* number of Layer III private bits */
807 MAD_FLAG_INCOMPLETE = 0x0008, /* header but not data is decoded */
808
809 MAD_FLAG_PROTECTION = 0x0010, /* frame has CRC protection */
810 MAD_FLAG_COPYRIGHT = 0x0020, /* frame is copyright */
811 MAD_FLAG_ORIGINAL = 0x0040, /* frame is original (else copy) */
812 MAD_FLAG_PADDING = 0x0080, /* frame has additional slot */
813
814 MAD_FLAG_I_STEREO = 0x0100, /* uses intensity joint stereo */
815 MAD_FLAG_MS_STEREO = 0x0200, /* uses middle/side joint stereo */
816 MAD_FLAG_FREEFORMAT = 0x0400, /* uses free format bitrate */
817
818 MAD_FLAG_LSF_EXT = 0x1000, /* lower sampling freq. extension */
819 MAD_FLAG_MC_EXT = 0x2000, /* multichannel audio extension */
820 MAD_FLAG_MPEG_2_5_EXT = 0x4000 /* MPEG 2.5 (unofficial) extension */
821};
822
823enum {
824 MAD_PRIVATE_HEADER = 0x0100, /* header private bit */
825 MAD_PRIVATE_III = 0x001f /* Layer III private bits (up to 5) */
826};
827
828void mad_header_init(struct mad_header *);
829
830# define mad_header_finish(header) /* nothing */
831
832int mad_header_decode(struct mad_header *, struct mad_stream *);
833
834void mad_frame_init(struct mad_frame *);
835void mad_frame_finish(struct mad_frame *);
836
837int mad_frame_decode(struct mad_frame *, struct mad_stream *);
838
839void mad_frame_mute(struct mad_frame *);
840
841# endif
842
843/* Id: synth.h,v 1.15 2004/01/23 09:41:33 rob Exp */
844
845# ifndef LIBMAD_SYNTH_H
846# define LIBMAD_SYNTH_H
847
848
849struct mad_pcm {
850 unsigned int samplerate; /* sampling frequency (Hz) */
851 unsigned short channels; /* number of channels */
852 unsigned short length; /* number of samples per channel */
853 mad_fixed_t samples[2][1152]; /* PCM output samples [ch][sample] */
854};
855
856struct mad_synth {
857 mad_fixed_t filter[2][2][2][16][8]; /* polyphase filterbank outputs */
858 /* [ch][eo][peo][s][v] */
859
860 unsigned int phase; /* current processing phase */
861
862 struct mad_pcm pcm; /* PCM output */
863};
864
865/* single channel PCM selector */
866enum {
867 MAD_PCM_CHANNEL_SINGLE = 0
868};
869
870/* dual channel PCM selector */
871enum {
872 MAD_PCM_CHANNEL_DUAL_1 = 0,
873 MAD_PCM_CHANNEL_DUAL_2 = 1
874};
875
876/* stereo PCM selector */
877enum {
878 MAD_PCM_CHANNEL_STEREO_LEFT = 0,
879 MAD_PCM_CHANNEL_STEREO_RIGHT = 1
880};
881
882void mad_synth_init(struct mad_synth *);
883
884# define mad_synth_finish(synth) /* nothing */
885
886void mad_synth_mute(struct mad_synth *);
887
888void mad_synth_frame(struct mad_synth *, struct mad_frame const *);
889
890# endif
891
892/* Id: decoder.h,v 1.17 2004/01/23 09:41:32 rob Exp */
893
894# ifndef LIBMAD_DECODER_H
895# define LIBMAD_DECODER_H
896
897
898enum mad_decoder_mode {
899 MAD_DECODER_MODE_SYNC = 0,
900 MAD_DECODER_MODE_ASYNC
901};
902
903enum mad_flow {
904 MAD_FLOW_CONTINUE = 0x0000, /* continue normally */
905 MAD_FLOW_STOP = 0x0010, /* stop decoding normally */
906 MAD_FLOW_BREAK = 0x0011, /* stop decoding and signal an error */
907 MAD_FLOW_IGNORE = 0x0020 /* ignore the current frame */
908};
909
910struct mad_decoder {
911 enum mad_decoder_mode mode;
912
913 int options;
914
915 struct {
916 long pid;
917 int in;
918 int out;
919 } async;
920
921 struct {
922 struct mad_stream stream;
923 struct mad_frame frame;
924 struct mad_synth synth;
925 } *sync;
926
927 void *cb_data;
928
929 enum mad_flow (*input_func)(void *, struct mad_stream *);
930 enum mad_flow (*header_func)(void *, struct mad_header const *);
931 enum mad_flow (*filter_func)(void *,
932 struct mad_stream const *, struct mad_frame *);
933 enum mad_flow (*output_func)(void *,
934 struct mad_header const *, struct mad_pcm *);
935 enum mad_flow (*error_func)(void *, struct mad_stream *, struct mad_frame *);
936 enum mad_flow (*message_func)(void *, void *, unsigned int *);
937};
938
939void mad_decoder_init(struct mad_decoder *, void *,
940 enum mad_flow (*)(void *, struct mad_stream *),
941 enum mad_flow (*)(void *, struct mad_header const *),
942 enum mad_flow (*)(void *,
943 struct mad_stream const *,
944 struct mad_frame *),
945 enum mad_flow (*)(void *,
946 struct mad_header const *,
947 struct mad_pcm *),
948 enum mad_flow (*)(void *,
949 struct mad_stream *,
950 struct mad_frame *),
951 enum mad_flow (*)(void *, void *, unsigned int *));
952int mad_decoder_finish(struct mad_decoder *);
953
954# define mad_decoder_options(decoder, opts) \
955 ((void) ((decoder)->options = (opts)))
956
957int mad_decoder_run(struct mad_decoder *, enum mad_decoder_mode);
958int mad_decoder_message(struct mad_decoder *, void *, unsigned int *);
959
960# endif
961
962# ifdef __cplusplus
963}
964# endif
diff --git a/apps/codecs/libmad/mad.h.sed b/apps/codecs/libmad/mad.h.sed
new file mode 100644
index 0000000000..56a1d59fa7
--- /dev/null
+++ b/apps/codecs/libmad/mad.h.sed
@@ -0,0 +1,36 @@
1#
2# libmad - MPEG audio decoder library
3# Copyright (C) 2000-2004 Underbit Technologies, Inc.
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/^\/\*$/{
23N
24s/ \* libmad - /&/
25t copy
26b next
27: copy
28g
29n
30s|^ \* \$\(Id: .*\) \$$|/* \1 */|p
31/^ \*\/$/d
32b copy
33}
34/^# *include "/d
35: next
36p
diff --git a/apps/codecs/libmad/minimad.c b/apps/codecs/libmad/minimad.c
new file mode 100644
index 0000000000..e32e0d6a38
--- /dev/null
+++ b/apps/codecs/libmad/minimad.c
@@ -0,0 +1,222 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2004 Underbit Technologies, Inc.
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# include <stdio.h>
23# include <unistd.h>
24# include <sys/stat.h>
25# include <sys/mman.h>
26
27# include "mad.h"
28
29/*
30 * This is perhaps the simplest example use of the MAD high-level API.
31 * Standard input is mapped into memory via mmap(), then the high-level API
32 * is invoked with three callbacks: input, output, and error. The output
33 * callback converts MAD's high-resolution PCM samples to 16 bits, then
34 * writes them to standard output in little-endian, stereo-interleaved
35 * format.
36 */
37
38static int decode(unsigned char const *, unsigned long);
39
40int main(int argc, char *argv[])
41{
42 struct stat stat;
43 void *fdm;
44
45 if (argc != 1)
46 return 1;
47
48 if (fstat(STDIN_FILENO, &stat) == -1 ||
49 stat.st_size == 0)
50 return 2;
51
52 fdm = mmap(0, stat.st_size, PROT_READ, MAP_SHARED, STDIN_FILENO, 0);
53 if (fdm == MAP_FAILED)
54 return 3;
55
56 decode(fdm, stat.st_size);
57
58 if (munmap(fdm, stat.st_size) == -1)
59 return 4;
60
61 return 0;
62}
63
64/*
65 * This is a private message structure. A generic pointer to this structure
66 * is passed to each of the callback functions. Put here any data you need
67 * to access from within the callbacks.
68 */
69
70struct buffer {
71 unsigned char const *start;
72 unsigned long length;
73};
74
75/*
76 * This is the input callback. The purpose of this callback is to (re)fill
77 * the stream buffer which is to be decoded. In this example, an entire file
78 * has been mapped into memory, so we just call mad_stream_buffer() with the
79 * address and length of the mapping. When this callback is called a second
80 * time, we are finished decoding.
81 */
82
83static
84enum mad_flow input(void *data,
85 struct mad_stream *stream)
86{
87 struct buffer *buffer = data;
88
89 if (!buffer->length)
90 return MAD_FLOW_STOP;
91
92 mad_stream_buffer(stream, buffer->start, buffer->length);
93
94 buffer->length = 0;
95
96 return MAD_FLOW_CONTINUE;
97}
98
99/*
100 * The following utility routine performs simple rounding, clipping, and
101 * scaling of MAD's high-resolution samples down to 16 bits. It does not
102 * perform any dithering or noise shaping, which would be recommended to
103 * obtain any exceptional audio quality. It is therefore not recommended to
104 * use this routine if high-quality output is desired.
105 */
106
107static inline
108signed int scale(mad_fixed_t sample)
109{
110 /* round */
111 sample += (1L << (MAD_F_FRACBITS - 16));
112
113 /* clip */
114 if (sample >= MAD_F_ONE)
115 sample = MAD_F_ONE - 1;
116 else if (sample < -MAD_F_ONE)
117 sample = -MAD_F_ONE;
118
119 /* quantize */
120 return sample >> (MAD_F_FRACBITS + 1 - 16);
121}
122
123/*
124 * This is the output callback function. It is called after each frame of
125 * MPEG audio data has been completely decoded. The purpose of this callback
126 * is to output (or play) the decoded PCM audio.
127 */
128
129static
130enum mad_flow output(void *data,
131 struct mad_header const *header,
132 struct mad_pcm *pcm)
133{
134 unsigned int nchannels, nsamples;
135 mad_fixed_t const *left_ch, *right_ch;
136
137 /* pcm->samplerate contains the sampling frequency */
138
139 nchannels = pcm->channels;
140 nsamples = pcm->length;
141 left_ch = pcm->samples[0];
142 right_ch = pcm->samples[1];
143
144 while (nsamples--) {
145 signed int sample;
146
147 /* output sample(s) in 16-bit signed little-endian PCM */
148
149 sample = scale(*left_ch++);
150 putchar((sample >> 0) & 0xff);
151 putchar((sample >> 8) & 0xff);
152
153 if (nchannels == 2) {
154 sample = scale(*right_ch++);
155 putchar((sample >> 0) & 0xff);
156 putchar((sample >> 8) & 0xff);
157 }
158 }
159
160 return MAD_FLOW_CONTINUE;
161}
162
163/*
164 * This is the error callback function. It is called whenever a decoding
165 * error occurs. The error is indicated by stream->error; the list of
166 * possible MAD_ERROR_* errors can be found in the mad.h (or stream.h)
167 * header file.
168 */
169
170static
171enum mad_flow error(void *data,
172 struct mad_stream *stream,
173 struct mad_frame *frame)
174{
175 struct buffer *buffer = data;
176
177 fprintf(stderr, "decoding error 0x%04x (%s) at byte offset %u\n",
178 stream->error, mad_stream_errorstr(stream),
179 stream->this_frame - buffer->start);
180
181 /* return MAD_FLOW_BREAK here to stop decoding (and propagate an error) */
182
183 return MAD_FLOW_CONTINUE;
184}
185
186/*
187 * This is the function called by main() above to perform all the decoding.
188 * It instantiates a decoder object and configures it with the input,
189 * output, and error callback functions above. A single call to
190 * mad_decoder_run() continues until a callback function returns
191 * MAD_FLOW_STOP (to stop decoding) or MAD_FLOW_BREAK (to stop decoding and
192 * signal an error).
193 */
194
195static
196int decode(unsigned char const *start, unsigned long length)
197{
198 struct buffer buffer;
199 struct mad_decoder decoder;
200 int result;
201
202 /* initialize our private message structure */
203
204 buffer.start = start;
205 buffer.length = length;
206
207 /* configure input, output, and error functions */
208
209 mad_decoder_init(&decoder, &buffer,
210 input, 0 /* header */, 0 /* filter */, output,
211 error, 0 /* message */);
212
213 /* start decoding */
214
215 result = mad_decoder_run(&decoder, MAD_DECODER_MODE_SYNC);
216
217 /* release the decoder */
218
219 mad_decoder_finish(&decoder);
220
221 return result;
222}
diff --git a/apps/codecs/libmad/qc_table.dat b/apps/codecs/libmad/qc_table.dat
new file mode 100644
index 0000000000..d28a207049
--- /dev/null
+++ b/apps/codecs/libmad/qc_table.dat
@@ -0,0 +1,77 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2004 Underbit Technologies, Inc.
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/apps/codecs/libmad/rq_table.dat b/apps/codecs/libmad/rq_table.dat
new file mode 100644
index 0000000000..518a3916c9
--- /dev/null
+++ b/apps/codecs/libmad/rq_table.dat
@@ -0,0 +1,8747 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2004 Underbit Technologies, Inc.
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/apps/codecs/libmad/sf_table.dat b/apps/codecs/libmad/sf_table.dat
new file mode 100644
index 0000000000..de084d97da
--- /dev/null
+++ b/apps/codecs/libmad/sf_table.dat
@@ -0,0 +1,106 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2004 Underbit Technologies, Inc.
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 * Strictly speaking, Table B.1 has only 63 entries (0-62), thus a strict
31 * interpretation of ISO/IEC 11172-3 would suggest that a scalefactor index of
32 * 63 is invalid. However, for better compatibility with current practices, we
33 * add a 64th entry.
34 */
35
36 MAD_F(0x20000000), /* 2.000000000000 => 2.000000000000, e 0.000000000000 */
37 MAD_F(0x1965fea5), /* 1.587401051968 => 1.587401051074, e 0.000000000894 */
38 MAD_F(0x1428a2fa), /* 1.259921049895 => 1.259921051562, e -0.000000001667 */
39 MAD_F(0x10000000), /* 1.000000000000 => 1.000000000000, e 0.000000000000 */
40 MAD_F(0x0cb2ff53), /* 0.793700525984 => 0.793700527400, e -0.000000001416 */
41 MAD_F(0x0a14517d), /* 0.629960524947 => 0.629960525781, e -0.000000000833 */
42 MAD_F(0x08000000), /* 0.500000000000 => 0.500000000000, e 0.000000000000 */
43 MAD_F(0x06597fa9), /* 0.396850262992 => 0.396850261837, e 0.000000001155 */
44
45 MAD_F(0x050a28be), /* 0.314980262474 => 0.314980261028, e 0.000000001446 */
46 MAD_F(0x04000000), /* 0.250000000000 => 0.250000000000, e 0.000000000000 */
47 MAD_F(0x032cbfd5), /* 0.198425131496 => 0.198425132781, e -0.000000001285 */
48 MAD_F(0x0285145f), /* 0.157490131237 => 0.157490130514, e 0.000000000723 */
49 MAD_F(0x02000000), /* 0.125000000000 => 0.125000000000, e 0.000000000000 */
50 MAD_F(0x01965fea), /* 0.099212565748 => 0.099212564528, e 0.000000001220 */
51 MAD_F(0x01428a30), /* 0.078745065618 => 0.078745067120, e -0.000000001501 */
52 MAD_F(0x01000000), /* 0.062500000000 => 0.062500000000, e 0.000000000000 */
53
54 MAD_F(0x00cb2ff5), /* 0.049606282874 => 0.049606282264, e 0.000000000610 */
55 MAD_F(0x00a14518), /* 0.039372532809 => 0.039372533560, e -0.000000000751 */
56 MAD_F(0x00800000), /* 0.031250000000 => 0.031250000000, e 0.000000000000 */
57 MAD_F(0x006597fb), /* 0.024803141437 => 0.024803142995, e -0.000000001558 */
58 MAD_F(0x0050a28c), /* 0.019686266405 => 0.019686266780, e -0.000000000375 */
59 MAD_F(0x00400000), /* 0.015625000000 => 0.015625000000, e 0.000000000000 */
60 MAD_F(0x0032cbfd), /* 0.012401570719 => 0.012401569635, e 0.000000001084 */
61 MAD_F(0x00285146), /* 0.009843133202 => 0.009843133390, e -0.000000000188 */
62
63 MAD_F(0x00200000), /* 0.007812500000 => 0.007812500000, e 0.000000000000 */
64 MAD_F(0x001965ff), /* 0.006200785359 => 0.006200786680, e -0.000000001321 */
65 MAD_F(0x001428a3), /* 0.004921566601 => 0.004921566695, e -0.000000000094 */
66 MAD_F(0x00100000), /* 0.003906250000 => 0.003906250000, e 0.000000000000 */
67 MAD_F(0x000cb2ff), /* 0.003100392680 => 0.003100391477, e 0.000000001202 */
68 MAD_F(0x000a1451), /* 0.002460783301 => 0.002460781485, e 0.000000001816 */
69 MAD_F(0x00080000), /* 0.001953125000 => 0.001953125000, e 0.000000000000 */
70 MAD_F(0x00065980), /* 0.001550196340 => 0.001550197601, e -0.000000001262 */
71
72 MAD_F(0x00050a29), /* 0.001230391650 => 0.001230392605, e -0.000000000955 */
73 MAD_F(0x00040000), /* 0.000976562500 => 0.000976562500, e 0.000000000000 */
74 MAD_F(0x00032cc0), /* 0.000775098170 => 0.000775098801, e -0.000000000631 */
75 MAD_F(0x00028514), /* 0.000615195825 => 0.000615194440, e 0.000000001385 */
76 MAD_F(0x00020000), /* 0.000488281250 => 0.000488281250, e 0.000000000000 */
77 MAD_F(0x00019660), /* 0.000387549085 => 0.000387549400, e -0.000000000315 */
78 MAD_F(0x0001428a), /* 0.000307597913 => 0.000307597220, e 0.000000000693 */
79 MAD_F(0x00010000), /* 0.000244140625 => 0.000244140625, e 0.000000000000 */
80
81 MAD_F(0x0000cb30), /* 0.000193774542 => 0.000193774700, e -0.000000000158 */
82 MAD_F(0x0000a145), /* 0.000153798956 => 0.000153798610, e 0.000000000346 */
83 MAD_F(0x00008000), /* 0.000122070313 => 0.000122070313, e 0.000000000000 */
84 MAD_F(0x00006598), /* 0.000096887271 => 0.000096887350, e -0.000000000079 */
85 MAD_F(0x000050a3), /* 0.000076899478 => 0.000076901168, e -0.000000001689 */
86 MAD_F(0x00004000), /* 0.000061035156 => 0.000061035156, e 0.000000000000 */
87 MAD_F(0x000032cc), /* 0.000048443636 => 0.000048443675, e -0.000000000039 */
88 MAD_F(0x00002851), /* 0.000038449739 => 0.000038448721, e 0.000000001018 */
89
90 MAD_F(0x00002000), /* 0.000030517578 => 0.000030517578, e 0.000000000000 */
91 MAD_F(0x00001966), /* 0.000024221818 => 0.000024221838, e -0.000000000020 */
92 MAD_F(0x00001429), /* 0.000019224870 => 0.000019226223, e -0.000000001354 */
93 MAD_F(0x00001000), /* 0.000015258789 => 0.000015258789, e -0.000000000000 */
94 MAD_F(0x00000cb3), /* 0.000012110909 => 0.000012110919, e -0.000000000010 */
95 MAD_F(0x00000a14), /* 0.000009612435 => 0.000009611249, e 0.000000001186 */
96 MAD_F(0x00000800), /* 0.000007629395 => 0.000007629395, e -0.000000000000 */
97 MAD_F(0x00000659), /* 0.000006055454 => 0.000006053597, e 0.000000001858 */
98
99 MAD_F(0x0000050a), /* 0.000004806217 => 0.000004805624, e 0.000000000593 */
100 MAD_F(0x00000400), /* 0.000003814697 => 0.000003814697, e 0.000000000000 */
101 MAD_F(0x0000032d), /* 0.000003027727 => 0.000003028661, e -0.000000000934 */
102 MAD_F(0x00000285), /* 0.000002403109 => 0.000002402812, e 0.000000000296 */
103 MAD_F(0x00000200), /* 0.000001907349 => 0.000001907349, e -0.000000000000 */
104 MAD_F(0x00000196), /* 0.000001513864 => 0.000001512468, e 0.000000001396 */
105 MAD_F(0x00000143), /* 0.000001201554 => 0.000001203269, e -0.000000001714 */
106 MAD_F(0x00000000) /* this compatibility entry is not part of Table B.1 */
diff --git a/apps/codecs/libmad/stream.c b/apps/codecs/libmad/stream.c
new file mode 100644
index 0000000000..040f1cfb8c
--- /dev/null
+++ b/apps/codecs/libmad/stream.c
@@ -0,0 +1,161 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2004 Underbit Technologies, Inc.
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 "config.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_BADMODE: return "bad bitrate/mode combination";
149 case MAD_ERROR_BADFRAMELEN: return "bad frame length";
150 case MAD_ERROR_BADBIGVALUES: return "bad big_values count";
151 case MAD_ERROR_BADBLOCKTYPE: return "reserved block_type";
152 case MAD_ERROR_BADSCFSI: return "bad scalefactor selection info";
153 case MAD_ERROR_BADDATAPTR: return "bad main_data_begin pointer";
154 case MAD_ERROR_BADPART3LEN: return "bad audio data length";
155 case MAD_ERROR_BADHUFFTABLE: return "bad Huffman table select";
156 case MAD_ERROR_BADHUFFDATA: return "Huffman data overrun";
157 case MAD_ERROR_BADSTEREO: return "incompatible block_type for JS";
158 }
159
160 return 0;
161}
diff --git a/apps/codecs/libmad/stream.h b/apps/codecs/libmad/stream.h
new file mode 100644
index 0000000000..5fca48fdb8
--- /dev/null
+++ b/apps/codecs/libmad/stream.h
@@ -0,0 +1,108 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2004 Underbit Technologies, Inc.
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_BADMODE = 0x0222, /* bad bitrate/mode combination */
48 MAD_ERROR_BADFRAMELEN = 0x0231, /* bad frame length */
49 MAD_ERROR_BADBIGVALUES = 0x0232, /* bad big_values count */
50 MAD_ERROR_BADBLOCKTYPE = 0x0233, /* reserved block_type */
51 MAD_ERROR_BADSCFSI = 0x0234, /* bad scalefactor selection info */
52 MAD_ERROR_BADDATAPTR = 0x0235, /* bad main_data_begin pointer */
53 MAD_ERROR_BADPART3LEN = 0x0236, /* bad audio data length */
54 MAD_ERROR_BADHUFFTABLE = 0x0237, /* bad Huffman table select */
55 MAD_ERROR_BADHUFFDATA = 0x0238, /* Huffman data overrun */
56 MAD_ERROR_BADSTEREO = 0x0239 /* incompatible block_type for JS */
57};
58
59# define MAD_RECOVERABLE(error) ((error) & 0xff00)
60
61struct mad_stream {
62 unsigned char const *buffer; /* input bitstream buffer */
63 unsigned char const *bufend; /* end of buffer */
64 unsigned long skiplen; /* bytes to skip before next frame */
65
66 int sync; /* stream sync found */
67 unsigned long freerate; /* free bitrate (fixed) */
68
69 unsigned char const *this_frame; /* start of current frame */
70 unsigned char const *next_frame; /* start of next frame */
71 struct mad_bitptr ptr; /* current processing bit pointer */
72
73 struct mad_bitptr anc_ptr; /* ancillary bits pointer */
74 unsigned int anc_bitlen; /* number of ancillary bits */
75
76 unsigned char (*main_data)[MAD_BUFFER_MDLEN];
77 /* Layer III main_data() */
78 unsigned int md_len; /* bytes in main_data */
79
80 int options; /* decoding options (see below) */
81 enum mad_error error; /* error code (see above) */
82};
83
84enum {
85 MAD_OPTION_IGNORECRC = 0x0001, /* ignore CRC errors */
86 MAD_OPTION_HALFSAMPLERATE = 0x0002 /* generate PCM at 1/2 sample rate */
87# if 0 /* not yet implemented */
88 MAD_OPTION_LEFTCHANNEL = 0x0010, /* decode left channel only */
89 MAD_OPTION_RIGHTCHANNEL = 0x0020, /* decode right channel only */
90 MAD_OPTION_SINGLECHANNEL = 0x0030 /* combine channels */
91# endif
92};
93
94void mad_stream_init(struct mad_stream *);
95void mad_stream_finish(struct mad_stream *);
96
97# define mad_stream_options(stream, opts) \
98 ((void) ((stream)->options = (opts)))
99
100void mad_stream_buffer(struct mad_stream *,
101 unsigned char const *, unsigned long);
102void mad_stream_skip(struct mad_stream *, unsigned long);
103
104int mad_stream_sync(struct mad_stream *);
105
106char const *mad_stream_errorstr(struct mad_stream const *);
107
108# endif
diff --git a/apps/codecs/libmad/synth.c b/apps/codecs/libmad/synth.c
new file mode 100644
index 0000000000..aa9862c3e4
--- /dev/null
+++ b/apps/codecs/libmad/synth.c
@@ -0,0 +1,857 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2004 Underbit Technologies, Inc.
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 "config.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/apps/codecs/libmad/synth.h b/apps/codecs/libmad/synth.h
new file mode 100644
index 0000000000..d284d01556
--- /dev/null
+++ b/apps/codecs/libmad/synth.h
@@ -0,0 +1,69 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2004 Underbit Technologies, Inc.
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/apps/codecs/libmad/timer.c b/apps/codecs/libmad/timer.c
new file mode 100644
index 0000000000..29df492922
--- /dev/null
+++ b/apps/codecs/libmad/timer.c
@@ -0,0 +1,485 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2004 Underbit Technologies, Inc.
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 "config.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 (timer.seconds < 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 timer.fraction ?
331 MAD_TIMER_RESOLUTION / timer.fraction : MAD_TIMER_RESOLUTION + 1;
332
333 case MAD_TIMER_RESOLUTION:
334 return timer.fraction;
335
336 default:
337 return scale_rational(timer.fraction, MAD_TIMER_RESOLUTION, denom);
338 }
339}
340
341/*
342 * NAME: timer->string()
343 * DESCRIPTION: write a string representation of a timer using a template
344 */
345void mad_timer_string(mad_timer_t timer,
346 char *dest, char const *format, enum mad_units units,
347 enum mad_units fracunits, unsigned long subparts)
348{
349 unsigned long hours, minutes, seconds, sub;
350 unsigned int frac;
351
352 timer = mad_timer_abs(timer);
353
354 seconds = timer.seconds;
355 frac = sub = 0;
356
357 switch (fracunits) {
358 case MAD_UNITS_HOURS:
359 case MAD_UNITS_MINUTES:
360 case MAD_UNITS_SECONDS:
361 break;
362
363 case MAD_UNITS_DECISECONDS:
364 case MAD_UNITS_CENTISECONDS:
365 case MAD_UNITS_MILLISECONDS:
366
367 case MAD_UNITS_8000_HZ:
368 case MAD_UNITS_11025_HZ:
369 case MAD_UNITS_12000_HZ:
370 case MAD_UNITS_16000_HZ:
371 case MAD_UNITS_22050_HZ:
372 case MAD_UNITS_24000_HZ:
373 case MAD_UNITS_32000_HZ:
374 case MAD_UNITS_44100_HZ:
375 case MAD_UNITS_48000_HZ:
376
377 case MAD_UNITS_24_FPS:
378 case MAD_UNITS_25_FPS:
379 case MAD_UNITS_30_FPS:
380 case MAD_UNITS_48_FPS:
381 case MAD_UNITS_50_FPS:
382 case MAD_UNITS_60_FPS:
383 case MAD_UNITS_75_FPS:
384 {
385 unsigned long denom;
386
387 denom = MAD_TIMER_RESOLUTION / fracunits;
388
389 frac = timer.fraction / denom;
390 sub = scale_rational(timer.fraction % denom, denom, subparts);
391 }
392 break;
393
394 case MAD_UNITS_23_976_FPS:
395 case MAD_UNITS_24_975_FPS:
396 case MAD_UNITS_29_97_FPS:
397 case MAD_UNITS_47_952_FPS:
398 case MAD_UNITS_49_95_FPS:
399 case MAD_UNITS_59_94_FPS:
400 /* drop-frame encoding */
401 /* N.B. this is only well-defined for MAD_UNITS_29_97_FPS */
402 {
403 unsigned long frame, cycle, d, m;
404
405 frame = mad_timer_count(timer, fracunits);
406
407 cycle = -fracunits * 60 * 10 - (10 - 1) * 2;
408
409 d = frame / cycle;
410 m = frame % cycle;
411 frame += (10 - 1) * 2 * d;
412 if (m > 2)
413 frame += 2 * ((m - 2) / (cycle / 10));
414
415 frac = frame % -fracunits;
416 seconds = frame / -fracunits;
417 }
418 break;
419 }
420
421 switch (units) {
422 case MAD_UNITS_HOURS:
423 minutes = seconds / 60;
424 hours = minutes / 60;
425
426 sprintf(dest, format,
427 hours,
428 (unsigned int) (minutes % 60),
429 (unsigned int) (seconds % 60),
430 frac, sub);
431 break;
432
433 case MAD_UNITS_MINUTES:
434 minutes = seconds / 60;
435
436 sprintf(dest, format,
437 minutes,
438 (unsigned int) (seconds % 60),
439 frac, sub);
440 break;
441
442 case MAD_UNITS_SECONDS:
443 sprintf(dest, format,
444 seconds,
445 frac, sub);
446 break;
447
448 case MAD_UNITS_23_976_FPS:
449 case MAD_UNITS_24_975_FPS:
450 case MAD_UNITS_29_97_FPS:
451 case MAD_UNITS_47_952_FPS:
452 case MAD_UNITS_49_95_FPS:
453 case MAD_UNITS_59_94_FPS:
454 if (fracunits < 0) {
455 /* not yet implemented */
456 sub = 0;
457 }
458
459 /* fall through */
460
461 case MAD_UNITS_DECISECONDS:
462 case MAD_UNITS_CENTISECONDS:
463 case MAD_UNITS_MILLISECONDS:
464
465 case MAD_UNITS_8000_HZ:
466 case MAD_UNITS_11025_HZ:
467 case MAD_UNITS_12000_HZ:
468 case MAD_UNITS_16000_HZ:
469 case MAD_UNITS_22050_HZ:
470 case MAD_UNITS_24000_HZ:
471 case MAD_UNITS_32000_HZ:
472 case MAD_UNITS_44100_HZ:
473 case MAD_UNITS_48000_HZ:
474
475 case MAD_UNITS_24_FPS:
476 case MAD_UNITS_25_FPS:
477 case MAD_UNITS_30_FPS:
478 case MAD_UNITS_48_FPS:
479 case MAD_UNITS_50_FPS:
480 case MAD_UNITS_60_FPS:
481 case MAD_UNITS_75_FPS:
482 sprintf(dest, format, mad_timer_count(timer, units), sub);
483 break;
484 }
485}
diff --git a/apps/codecs/libmad/timer.h b/apps/codecs/libmad/timer.h
new file mode 100644
index 0000000000..4f2be57b46
--- /dev/null
+++ b/apps/codecs/libmad/timer.h
@@ -0,0 +1,100 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2004 Underbit Technologies, Inc.
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/apps/codecs/libmad/version.c b/apps/codecs/libmad/version.c
new file mode 100644
index 0000000000..064a5938cc
--- /dev/null
+++ b/apps/codecs/libmad/version.c
@@ -0,0 +1,91 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2004 Underbit Technologies, Inc.
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 "config.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(DEBUG)
36 "DEBUG "
37# elif defined(NDEBUG)
38 "NDEBUG "
39# endif
40
41# if defined(EXPERIMENTAL)
42 "EXPERIMENTAL "
43# endif
44
45# if defined(FPM_64BIT)
46 "FPM_64BIT "
47# elif defined(FPM_INTEL)
48 "FPM_INTEL "
49# elif defined(FPM_ARM)
50 "FPM_ARM "
51# elif defined(FPM_MIPS)
52 "FPM_MIPS "
53# elif defined(FPM_SPARC)
54 "FPM_SPARC "
55# elif defined(FPM_PPC)
56 "FPM_PPC "
57# elif defined(FPM_DEFAULT)
58 "FPM_DEFAULT "
59# endif
60
61# if defined(ASO_IMDCT)
62 "ASO_IMDCT "
63# endif
64# if defined(ASO_INTERLEAVE1)
65 "ASO_INTERLEAVE1 "
66# endif
67# if defined(ASO_INTERLEAVE2)
68 "ASO_INTERLEAVE2 "
69# endif
70# if defined(ASO_ZEROCHECK)
71 "ASO_ZEROCHECK "
72# endif
73
74# if defined(OPT_SPEED)
75 "OPT_SPEED "
76# elif defined(OPT_ACCURACY)
77 "OPT_ACCURACY "
78# endif
79
80# if defined(OPT_SSO)
81 "OPT_SSO "
82# endif
83
84# if defined(OPT_DCTO) /* never defined here */
85 "OPT_DCTO "
86# endif
87
88# if defined(OPT_STRICT)
89 "OPT_STRICT "
90# endif
91;
diff --git a/apps/codecs/libmad/version.h b/apps/codecs/libmad/version.h
new file mode 100644
index 0000000000..d40e42538a
--- /dev/null
+++ b/apps/codecs/libmad/version.h
@@ -0,0 +1,47 @@
1/*
2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2004 Underbit Technologies, Inc.
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 15
27# define MAD_VERSION_PATCH 1
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-2004"
39# define MAD_AUTHOR "Underbit Technologies, Inc."
40# define MAD_EMAIL "info@underbit.com"
41
42extern char const mad_version[];
43extern char const mad_copyright[];
44extern char const mad_author[];
45extern char const mad_build[];
46
47# endif