try to make mp3decoder compile
[IRC.git] / Robust / src / Tests / ssJava / mp3decoder / LayerIIDecoder.java
1 /*
2  * 11/19/04  1.0 moved to LGPL.
3  * 
4  * 29/05/01  Michael Scheerer,  Fixed some C++ to Java porting bugs. 
5  *
6  * 16/07/01  Michael Scheerer, Catched a bug in method
7  *           read_sampledata, which causes an outOfIndexException.
8  * 
9  * 12/12/99  Initial version. Adapted from javalayer.java
10  *                       and Subband*.java. mdm@techie.com
11  *
12  * 02/28/99  Initial version : javalayer.java by E.B
13  *-----------------------------------------------------------------------
14  *   This program is free software; you can redistribute it and/or modify
15  *   it under the terms of the GNU Library General Public License as published
16  *   by the Free Software Foundation; either version 2 of the License, or
17  *   (at your option) any later version.
18  *
19  *   This program is distributed in the hope that it will be useful,
20  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
21  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22  *   GNU Library General Public License for more details.
23  *
24  *   You should have received a copy of the GNU Library General Public
25  *   License along with this program; if not, write to the Free Software
26  *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
27  *----------------------------------------------------------------------
28  */
29
30
31 /**
32  * Implements decoding of MPEG Audio Layer II frames. 
33  */
34 @LATTICE("L<SH,SH<H,SH*")
35 @METHODDEFAULT("OUT<V,V<SH,SH<IN,SH*,THISLOC=V,GLOBALLOC=IN")
36 class LayerIIDecoder extends LayerIDecoder implements FrameDecoder  
37 {
38
39         public LayerIIDecoder()
40         {
41         }
42
43         
44         protected void createSubbands()
45         {               
46                 @LOC("V,LayerIIDecoder.SH") int i;
47                 if (mode == Header.SINGLE_CHANNEL)
48                   for (i = 0; i < num_subbands; ++i)
49                     subbands[i] = new SubbandLayer2(i);
50                 else if (mode == Header.JOINT_STEREO)
51                 {
52                   for (i = 0; i < header.intensity_stereo_bound(); ++i)
53                       subbands[i] = new SubbandLayer2Stereo(i);
54                   for (; i < num_subbands; ++i)
55                       subbands[i] = new SubbandLayer2IntensityStereo(i);
56                 }
57                 else
58                 {
59                   for (i = 0; i < num_subbands; ++i)
60                       subbands[i] = new SubbandLayer2Stereo(i);
61         }
62                 
63         }
64         
65         protected void readScaleFactorSelection()
66         {
67               for (@LOC("V,layerIIDecoder.SH") int i = 0; i < num_subbands; ++i)
68                   ((SubbandLayer2)subbands[i]).read_scalefactor_selection(stream, crc);         
69         }
70         
71         
72
73          /**
74           * Class for layer II subbands in single channel mode.
75           */
76         @LATTICE("L<H,L<ARR,ARR<F,SN<F,GN<F,F<H,SN*,GN*")
77         @METHODDEFAULT("OUT<V,V<SH,SH<THIS,THIS<IN,SH*,THISLOC=THIS,GLOBALLOC=IN")
78         static class SubbandLayer2 extends Subband
79         {
80           // this table contains 3 requantized samples for each legal codeword
81           // when grouped in 5 bits, i.e. 3 quantizationsteps per sample
82         @LOC("H") public static final float grouping_5bits[] = new float[]
83         {
84           -2.0f/3.0f, -2.0f/3.0f, -2.0f/3.0f,
85                          0.0f, -2.0f/3.0f, -2.0f/3.0f,
86                 2.0f/3.0f, -2.0f/3.0f, -2.0f/3.0f,
87           -2.0f/3.0f,      0.0f, -2.0f/3.0f,
88                          0.0f,      0.0f, -2.0f/3.0f,
89                 2.0f/3.0f,      0.0f, -2.0f/3.0f,
90           -2.0f/3.0f,  2.0f/3.0f, -2.0f/3.0f,
91                          0.0f,  2.0f/3.0f, -2.0f/3.0f,
92                 2.0f/3.0f,  2.0f/3.0f, -2.0f/3.0f,
93           -2.0f/3.0f, -2.0f/3.0f,      0.0f,
94                          0.0f, -2.0f/3.0f,      0.0f,
95                 2.0f/3.0f, -2.0f/3.0f,      0.0f,
96           -2.0f/3.0f,      0.0f,      0.0f,
97                          0.0f,      0.0f,      0.0f,
98                 2.0f/3.0f,      0.0f,      0.0f,
99           -2.0f/3.0f,  2.0f/3.0f,      0.0f,
100                          0.0f,  2.0f/3.0f,      0.0f,
101                 2.0f/3.0f,  2.0f/3.0f,      0.0f,
102           -2.0f/3.0f, -2.0f/3.0f,  2.0f/3.0f,
103                0.0f, -2.0f/3.0f,  2.0f/3.0f,
104                 2.0f/3.0f, -2.0f/3.0f,  2.0f/3.0f,
105           -2.0f/3.0f,      0.0f,  2.0f/3.0f,
106                0.0f,      0.0f,  2.0f/3.0f,
107            2.0f/3.0f,      0.0f,  2.0f/3.0f,
108           -2.0f/3.0f,  2.0f/3.0f,  2.0f/3.0f,
109                          0.0f,  2.0f/3.0f,  2.0f/3.0f,
110            2.0f/3.0f,  2.0f/3.0f,  2.0f/3.0f
111         };
112
113         // this table contains 3 requantized samples for each legal codeword
114         // when grouped in 7 bits, i.e. 5 quantizationsteps per sample
115         @LOC("H") public static final float grouping_7bits[] = new float[]
116         {
117           -0.8f, -0.8f, -0.8f,   -0.4f, -0.8f, -0.8f,    0.0f, -0.8f, -0.8f,    0.4f, -0.8f, -0.8f,    0.8f, -0.8f, -0.8f,
118           -0.8f, -0.4f, -0.8f,   -0.4f, -0.4f, -0.8f,    0.0f, -0.4f, -0.8f,    0.4f, -0.4f, -0.8f,    0.8f, -0.4f, -0.8f,
119           -0.8f,  0.0f, -0.8f,   -0.4f,  0.0f, -0.8f,    0.0f,  0.0f, -0.8f,    0.4f,  0.0f, -0.8f,    0.8f,  0.0f, -0.8f,
120           -0.8f,  0.4f, -0.8f,   -0.4f,  0.4f, -0.8f,    0.0f,  0.4f, -0.8f,    0.4f,  0.4f, -0.8f,    0.8f,  0.4f, -0.8f,
121           -0.8f,  0.8f, -0.8f,   -0.4f,  0.8f, -0.8f,    0.0f,  0.8f, -0.8f,    0.4f,  0.8f, -0.8f,    0.8f,  0.8f, -0.8f,
122           -0.8f, -0.8f, -0.4f,   -0.4f, -0.8f, -0.4f,    0.0f, -0.8f, -0.4f,    0.4f, -0.8f, -0.4f,    0.8f, -0.8f, -0.4f,
123           -0.8f, -0.4f, -0.4f,   -0.4f, -0.4f, -0.4f,    0.0f, -0.4f, -0.4f,    0.4f, -0.4f, -0.4f,    0.8f, -0.4f, -0.4f,
124           -0.8f,  0.0f, -0.4f,   -0.4f,  0.0f, -0.4f,    0.0f,  0.0f, -0.4f,    0.4f,  0.0f, -0.4f,    0.8f,  0.0f, -0.4f,
125           -0.8f,  0.4f, -0.4f,   -0.4f,  0.4f, -0.4f,    0.0f,  0.4f, -0.4f,    0.4f,  0.4f, -0.4f,    0.8f,  0.4f, -0.4f,
126           -0.8f,  0.8f, -0.4f,   -0.4f,  0.8f, -0.4f,    0.0f,  0.8f, -0.4f,    0.4f,  0.8f, -0.4f,    0.8f,  0.8f, -0.4f,
127           -0.8f, -0.8f,  0.0f,   -0.4f, -0.8f,  0.0f,    0.0f, -0.8f,  0.0f,    0.4f, -0.8f,  0.0f,    0.8f, -0.8f,  0.0f,
128           -0.8f, -0.4f,  0.0f,   -0.4f, -0.4f,  0.0f,    0.0f, -0.4f,  0.0f,    0.4f, -0.4f,  0.0f,    0.8f, -0.4f,  0.0f,
129           -0.8f,  0.0f,  0.0f,   -0.4f,  0.0f,  0.0f,    0.0f,  0.0f,  0.0f,    0.4f,  0.0f,  0.0f,    0.8f,  0.0f,  0.0f,
130           -0.8f,  0.4f,  0.0f,   -0.4f,  0.4f,  0.0f,    0.0f,  0.4f,  0.0f,    0.4f,  0.4f,  0.0f,    0.8f,  0.4f,  0.0f,
131           -0.8f,  0.8f,  0.0f,   -0.4f,  0.8f,  0.0f,    0.0f,  0.8f,  0.0f,    0.4f,  0.8f,  0.0f,    0.8f,  0.8f,  0.0f,
132           -0.8f, -0.8f,  0.4f,   -0.4f, -0.8f,  0.4f,    0.0f, -0.8f,  0.4f,    0.4f, -0.8f,  0.4f,    0.8f, -0.8f,  0.4f,
133           -0.8f, -0.4f,  0.4f,   -0.4f, -0.4f,  0.4f,    0.0f, -0.4f,  0.4f,    0.4f, -0.4f,  0.4f,    0.8f, -0.4f,  0.4f,
134           -0.8f,  0.0f,  0.4f,   -0.4f,  0.0f,  0.4f,    0.0f,  0.0f,  0.4f,    0.4f,  0.0f,  0.4f,    0.8f,  0.0f,  0.4f,
135           -0.8f,  0.4f,  0.4f,   -0.4f,  0.4f,  0.4f,    0.0f,  0.4f,  0.4f,    0.4f,  0.4f,  0.4f,    0.8f,  0.4f,  0.4f,
136           -0.8f,  0.8f,  0.4f,   -0.4f,  0.8f,  0.4f,    0.0f,  0.8f,  0.4f,    0.4f,  0.8f,  0.4f,    0.8f,  0.8f,  0.4f,
137           -0.8f, -0.8f,  0.8f,   -0.4f, -0.8f,  0.8f,    0.0f, -0.8f,  0.8f,    0.4f, -0.8f,  0.8f,    0.8f, -0.8f,  0.8f,
138           -0.8f, -0.4f,  0.8f,   -0.4f, -0.4f,  0.8f,    0.0f, -0.4f,  0.8f,    0.4f, -0.4f,  0.8f,    0.8f, -0.4f,  0.8f,
139           -0.8f,  0.0f,  0.8f,   -0.4f,  0.0f,  0.8f,    0.0f,  0.0f,  0.8f,    0.4f,  0.0f,  0.8f,    0.8f,  0.0f,  0.8f,
140           -0.8f,  0.4f,  0.8f,   -0.4f,  0.4f,  0.8f,    0.0f,  0.4f,  0.8f,    0.4f,  0.4f,  0.8f,    0.8f,  0.4f,  0.8f,
141           -0.8f,  0.8f,  0.8f,   -0.4f,  0.8f,  0.8f,    0.0f,  0.8f,  0.8f,    0.4f,  0.8f,  0.8f,    0.8f,  0.8f,  0.8f
142         };
143
144         // this table contains 3 requantized samples for each legal codeword
145         // when grouped in 10 bits, i.e. 9 quantizationsteps per sample
146         @LOC("H") public static final float grouping_10bits[] =
147         {
148           -8.0f/9.0f, -8.0f/9.0f, -8.0f/9.0f,   -6.0f/9.0f, -8.0f/9.0f, -8.0f/9.0f,   -4.0f/9.0f, -8.0f/9.0f, -8.0f/9.0f,
149           -2.0f/9.0f, -8.0f/9.0f, -8.0f/9.0f,        0.0f, -8.0f/9.0f, -8.0f/9.0f,    2.0f/9.0f, -8.0f/9.0f, -8.0f/9.0f,
150                 4.0f/9.0f, -8.0f/9.0f, -8.0f/9.0f,    6.0f/9.0f, -8.0f/9.0f, -8.0f/9.0f,    8.0f/9.0f, -8.0f/9.0f, -8.0f/9.0f,
151           -8.0f/9.0f, -6.0f/9.0f, -8.0f/9.0f,   -6.0f/9.0f, -6.0f/9.0f, -8.0f/9.0f,   -4.0f/9.0f, -6.0f/9.0f, -8.0f/9.0f,
152           -2.0f/9.0f, -6.0f/9.0f, -8.0f/9.0f,        0.0f, -6.0f/9.0f, -8.0f/9.0f,    2.0f/9.0f, -6.0f/9.0f, -8.0f/9.0f,
153                 4.0f/9.0f, -6.0f/9.0f, -8.0f/9.0f,    6.0f/9.0f, -6.0f/9.0f, -8.0f/9.0f,    8.0f/9.0f, -6.0f/9.0f, -8.0f/9.0f,
154           -8.0f/9.0f, -4.0f/9.0f, -8.0f/9.0f,   -6.0f/9.0f, -4.0f/9.0f, -8.0f/9.0f,   -4.0f/9.0f, -4.0f/9.0f, -8.0f/9.0f,
155           -2.0f/9.0f, -4.0f/9.0f, -8.0f/9.0f,        0.0f, -4.0f/9.0f, -8.0f/9.0f,    2.0f/9.0f, -4.0f/9.0f, -8.0f/9.0f,
156                 4.0f/9.0f, -4.0f/9.0f, -8.0f/9.0f,    6.0f/9.0f, -4.0f/9.0f, -8.0f/9.0f,    8.0f/9.0f, -4.0f/9.0f, -8.0f/9.0f,
157           -8.0f/9.0f, -2.0f/9.0f, -8.0f/9.0f,   -6.0f/9.0f, -2.0f/9.0f, -8.0f/9.0f,   -4.0f/9.0f, -2.0f/9.0f, -8.0f/9.0f,
158           -2.0f/9.0f, -2.0f/9.0f, -8.0f/9.0f,        0.0f, -2.0f/9.0f, -8.0f/9.0f,    2.0f/9.0f, -2.0f/9.0f, -8.0f/9.0f,
159                 4.0f/9.0f, -2.0f/9.0f, -8.0f/9.0f,    6.0f/9.0f, -2.0f/9.0f, -8.0f/9.0f,    8.0f/9.0f, -2.0f/9.0f, -8.0f/9.0f,
160           -8.0f/9.0f,      0.0f, -8.0f/9.0f,   -6.0f/9.0f,      0.0f, -8.0f/9.0f,   -4.0f/9.0f,      0.0f, -8.0f/9.0f,
161           -2.0f/9.0f,      0.0f, -8.0f/9.0f,        0.0f,      0.0f, -8.0f/9.0f,    2.0f/9.0f,      0.0f, -8.0f/9.0f,
162                 4.0f/9.0f,      0.0f, -8.0f/9.0f,    6.0f/9.0f,      0.0f, -8.0f/9.0f,    8.0f/9.0f,      0.0f, -8.0f/9.0f,
163           -8.0f/9.0f,  2.0f/9.0f, -8.0f/9.0f,   -6.0f/9.0f,  2.0f/9.0f, -8.0f/9.0f,   -4.0f/9.0f,  2.0f/9.0f, -8.0f/9.0f,
164           -2.0f/9.0f,  2.0f/9.0f, -8.0f/9.0f,        0.0f,  2.0f/9.0f, -8.0f/9.0f,    2.0f/9.0f,  2.0f/9.0f, -8.0f/9.0f,
165                 4.0f/9.0f,  2.0f/9.0f, -8.0f/9.0f,    6.0f/9.0f,  2.0f/9.0f, -8.0f/9.0f,    8.0f/9.0f,  2.0f/9.0f, -8.0f/9.0f,
166           -8.0f/9.0f,  4.0f/9.0f, -8.0f/9.0f,   -6.0f/9.0f,  4.0f/9.0f, -8.0f/9.0f,   -4.0f/9.0f,  4.0f/9.0f, -8.0f/9.0f,
167           -2.0f/9.0f,  4.0f/9.0f, -8.0f/9.0f,        0.0f,  4.0f/9.0f, -8.0f/9.0f,    2.0f/9.0f,  4.0f/9.0f, -8.0f/9.0f,
168                 4.0f/9.0f,  4.0f/9.0f, -8.0f/9.0f,    6.0f/9.0f,  4.0f/9.0f, -8.0f/9.0f,    8.0f/9.0f,  4.0f/9.0f, -8.0f/9.0f,
169           -8.0f/9.0f,  6.0f/9.0f, -8.0f/9.0f,   -6.0f/9.0f,  6.0f/9.0f, -8.0f/9.0f,   -4.0f/9.0f,  6.0f/9.0f, -8.0f/9.0f,
170           -2.0f/9.0f,  6.0f/9.0f, -8.0f/9.0f,        0.0f,  6.0f/9.0f, -8.0f/9.0f,    2.0f/9.0f,  6.0f/9.0f, -8.0f/9.0f,
171                 4.0f/9.0f,  6.0f/9.0f, -8.0f/9.0f,    6.0f/9.0f,  6.0f/9.0f, -8.0f/9.0f,    8.0f/9.0f,  6.0f/9.0f, -8.0f/9.0f,
172           -8.0f/9.0f,  8.0f/9.0f, -8.0f/9.0f,   -6.0f/9.0f,  8.0f/9.0f, -8.0f/9.0f,   -4.0f/9.0f,  8.0f/9.0f, -8.0f/9.0f,
173           -2.0f/9.0f,  8.0f/9.0f, -8.0f/9.0f,        0.0f,  8.0f/9.0f, -8.0f/9.0f,    2.0f/9.0f,  8.0f/9.0f, -8.0f/9.0f,
174                 4.0f/9.0f,  8.0f/9.0f, -8.0f/9.0f,    6.0f/9.0f,  8.0f/9.0f, -8.0f/9.0f,    8.0f/9.0f,  8.0f/9.0f, -8.0f/9.0f,
175           -8.0f/9.0f, -8.0f/9.0f, -6.0f/9.0f,   -6.0f/9.0f, -8.0f/9.0f, -6.0f/9.0f,   -4.0f/9.0f, -8.0f/9.0f, -6.0f/9.0f,
176           -2.0f/9.0f, -8.0f/9.0f, -6.0f/9.0f,        0.0f, -8.0f/9.0f, -6.0f/9.0f,    2.0f/9.0f, -8.0f/9.0f, -6.0f/9.0f,
177                 4.0f/9.0f, -8.0f/9.0f, -6.0f/9.0f,    6.0f/9.0f, -8.0f/9.0f, -6.0f/9.0f,    8.0f/9.0f, -8.0f/9.0f, -6.0f/9.0f,
178           -8.0f/9.0f, -6.0f/9.0f, -6.0f/9.0f,   -6.0f/9.0f, -6.0f/9.0f, -6.0f/9.0f,   -4.0f/9.0f, -6.0f/9.0f, -6.0f/9.0f,
179           -2.0f/9.0f, -6.0f/9.0f, -6.0f/9.0f,        0.0f, -6.0f/9.0f, -6.0f/9.0f,    2.0f/9.0f, -6.0f/9.0f, -6.0f/9.0f,
180                 4.0f/9.0f, -6.0f/9.0f, -6.0f/9.0f,    6.0f/9.0f, -6.0f/9.0f, -6.0f/9.0f,    8.0f/9.0f, -6.0f/9.0f, -6.0f/9.0f,
181           -8.0f/9.0f, -4.0f/9.0f, -6.0f/9.0f,   -6.0f/9.0f, -4.0f/9.0f, -6.0f/9.0f,   -4.0f/9.0f, -4.0f/9.0f, -6.0f/9.0f,
182           -2.0f/9.0f, -4.0f/9.0f, -6.0f/9.0f,        0.0f, -4.0f/9.0f, -6.0f/9.0f,    2.0f/9.0f, -4.0f/9.0f, -6.0f/9.0f,
183                 4.0f/9.0f, -4.0f/9.0f, -6.0f/9.0f,    6.0f/9.0f, -4.0f/9.0f, -6.0f/9.0f,    8.0f/9.0f, -4.0f/9.0f, -6.0f/9.0f,
184           -8.0f/9.0f, -2.0f/9.0f, -6.0f/9.0f,   -6.0f/9.0f, -2.0f/9.0f, -6.0f/9.0f,   -4.0f/9.0f, -2.0f/9.0f, -6.0f/9.0f,
185           -2.0f/9.0f, -2.0f/9.0f, -6.0f/9.0f,        0.0f, -2.0f/9.0f, -6.0f/9.0f,    2.0f/9.0f, -2.0f/9.0f, -6.0f/9.0f,
186                 4.0f/9.0f, -2.0f/9.0f, -6.0f/9.0f,    6.0f/9.0f, -2.0f/9.0f, -6.0f/9.0f,    8.0f/9.0f, -2.0f/9.0f, -6.0f/9.0f,
187           -8.0f/9.0f,      0.0f, -6.0f/9.0f,   -6.0f/9.0f,      0.0f, -6.0f/9.0f,   -4.0f/9.0f,      0.0f, -6.0f/9.0f,
188           -2.0f/9.0f,      0.0f, -6.0f/9.0f,        0.0f,      0.0f, -6.0f/9.0f,    2.0f/9.0f,      0.0f, -6.0f/9.0f,
189                 4.0f/9.0f,      0.0f, -6.0f/9.0f,    6.0f/9.0f,      0.0f, -6.0f/9.0f,    8.0f/9.0f,      0.0f, -6.0f/9.0f,
190           -8.0f/9.0f,  2.0f/9.0f, -6.0f/9.0f,   -6.0f/9.0f,  2.0f/9.0f, -6.0f/9.0f,   -4.0f/9.0f,  2.0f/9.0f, -6.0f/9.0f,
191           -2.0f/9.0f,  2.0f/9.0f, -6.0f/9.0f,        0.0f,  2.0f/9.0f, -6.0f/9.0f,    2.0f/9.0f,  2.0f/9.0f, -6.0f/9.0f,
192                 4.0f/9.0f,  2.0f/9.0f, -6.0f/9.0f,    6.0f/9.0f,  2.0f/9.0f, -6.0f/9.0f,    8.0f/9.0f,  2.0f/9.0f, -6.0f/9.0f,
193           -8.0f/9.0f,  4.0f/9.0f, -6.0f/9.0f,   -6.0f/9.0f,  4.0f/9.0f, -6.0f/9.0f,   -4.0f/9.0f,  4.0f/9.0f, -6.0f/9.0f,
194           -2.0f/9.0f,  4.0f/9.0f, -6.0f/9.0f,        0.0f,  4.0f/9.0f, -6.0f/9.0f,    2.0f/9.0f,  4.0f/9.0f, -6.0f/9.0f,
195                 4.0f/9.0f,  4.0f/9.0f, -6.0f/9.0f,    6.0f/9.0f,  4.0f/9.0f, -6.0f/9.0f,    8.0f/9.0f,  4.0f/9.0f, -6.0f/9.0f,
196           -8.0f/9.0f,  6.0f/9.0f, -6.0f/9.0f,   -6.0f/9.0f,  6.0f/9.0f, -6.0f/9.0f,   -4.0f/9.0f,  6.0f/9.0f, -6.0f/9.0f,
197           -2.0f/9.0f,  6.0f/9.0f, -6.0f/9.0f,        0.0f,  6.0f/9.0f, -6.0f/9.0f,    2.0f/9.0f,  6.0f/9.0f, -6.0f/9.0f,
198                 4.0f/9.0f,  6.0f/9.0f, -6.0f/9.0f,    6.0f/9.0f,  6.0f/9.0f, -6.0f/9.0f,    8.0f/9.0f,  6.0f/9.0f, -6.0f/9.0f,
199           -8.0f/9.0f,  8.0f/9.0f, -6.0f/9.0f,   -6.0f/9.0f,  8.0f/9.0f, -6.0f/9.0f,   -4.0f/9.0f,  8.0f/9.0f, -6.0f/9.0f,
200           -2.0f/9.0f,  8.0f/9.0f, -6.0f/9.0f,        0.0f,  8.0f/9.0f, -6.0f/9.0f,    2.0f/9.0f,  8.0f/9.0f, -6.0f/9.0f,
201                 4.0f/9.0f,  8.0f/9.0f, -6.0f/9.0f,    6.0f/9.0f,  8.0f/9.0f, -6.0f/9.0f,    8.0f/9.0f,  8.0f/9.0f, -6.0f/9.0f,
202           -8.0f/9.0f, -8.0f/9.0f, -4.0f/9.0f,   -6.0f/9.0f, -8.0f/9.0f, -4.0f/9.0f,   -4.0f/9.0f, -8.0f/9.0f, -4.0f/9.0f,
203           -2.0f/9.0f, -8.0f/9.0f, -4.0f/9.0f,        0.0f, -8.0f/9.0f, -4.0f/9.0f,    2.0f/9.0f, -8.0f/9.0f, -4.0f/9.0f,
204                 4.0f/9.0f, -8.0f/9.0f, -4.0f/9.0f,    6.0f/9.0f, -8.0f/9.0f, -4.0f/9.0f,    8.0f/9.0f, -8.0f/9.0f, -4.0f/9.0f,
205           -8.0f/9.0f, -6.0f/9.0f, -4.0f/9.0f,   -6.0f/9.0f, -6.0f/9.0f, -4.0f/9.0f,   -4.0f/9.0f, -6.0f/9.0f, -4.0f/9.0f,
206           -2.0f/9.0f, -6.0f/9.0f, -4.0f/9.0f,        0.0f, -6.0f/9.0f, -4.0f/9.0f,    2.0f/9.0f, -6.0f/9.0f, -4.0f/9.0f,
207                 4.0f/9.0f, -6.0f/9.0f, -4.0f/9.0f,    6.0f/9.0f, -6.0f/9.0f, -4.0f/9.0f,    8.0f/9.0f, -6.0f/9.0f, -4.0f/9.0f,
208           -8.0f/9.0f, -4.0f/9.0f, -4.0f/9.0f,   -6.0f/9.0f, -4.0f/9.0f, -4.0f/9.0f,   -4.0f/9.0f, -4.0f/9.0f, -4.0f/9.0f,
209           -2.0f/9.0f, -4.0f/9.0f, -4.0f/9.0f,        0.0f, -4.0f/9.0f, -4.0f/9.0f,    2.0f/9.0f, -4.0f/9.0f, -4.0f/9.0f,
210                 4.0f/9.0f, -4.0f/9.0f, -4.0f/9.0f,    6.0f/9.0f, -4.0f/9.0f, -4.0f/9.0f,    8.0f/9.0f, -4.0f/9.0f, -4.0f/9.0f,
211           -8.0f/9.0f, -2.0f/9.0f, -4.0f/9.0f,   -6.0f/9.0f, -2.0f/9.0f, -4.0f/9.0f,   -4.0f/9.0f, -2.0f/9.0f, -4.0f/9.0f,
212           -2.0f/9.0f, -2.0f/9.0f, -4.0f/9.0f,        0.0f, -2.0f/9.0f, -4.0f/9.0f,    2.0f/9.0f, -2.0f/9.0f, -4.0f/9.0f,
213                 4.0f/9.0f, -2.0f/9.0f, -4.0f/9.0f,    6.0f/9.0f, -2.0f/9.0f, -4.0f/9.0f,    8.0f/9.0f, -2.0f/9.0f, -4.0f/9.0f,
214           -8.0f/9.0f,      0.0f, -4.0f/9.0f,   -6.0f/9.0f,      0.0f, -4.0f/9.0f,   -4.0f/9.0f,      0.0f, -4.0f/9.0f,
215           -2.0f/9.0f,      0.0f, -4.0f/9.0f,        0.0f,      0.0f, -4.0f/9.0f,    2.0f/9.0f,      0.0f, -4.0f/9.0f,
216                 4.0f/9.0f,      0.0f, -4.0f/9.0f,    6.0f/9.0f,      0.0f, -4.0f/9.0f,    8.0f/9.0f,      0.0f, -4.0f/9.0f,
217           -8.0f/9.0f,  2.0f/9.0f, -4.0f/9.0f,   -6.0f/9.0f,  2.0f/9.0f, -4.0f/9.0f,   -4.0f/9.0f,  2.0f/9.0f, -4.0f/9.0f,
218           -2.0f/9.0f,  2.0f/9.0f, -4.0f/9.0f,        0.0f,  2.0f/9.0f, -4.0f/9.0f,    2.0f/9.0f,  2.0f/9.0f, -4.0f/9.0f,
219                 4.0f/9.0f,  2.0f/9.0f, -4.0f/9.0f,    6.0f/9.0f,  2.0f/9.0f, -4.0f/9.0f,    8.0f/9.0f,  2.0f/9.0f, -4.0f/9.0f,
220           -8.0f/9.0f,  4.0f/9.0f, -4.0f/9.0f,   -6.0f/9.0f,  4.0f/9.0f, -4.0f/9.0f,   -4.0f/9.0f,  4.0f/9.0f, -4.0f/9.0f,
221           -2.0f/9.0f,  4.0f/9.0f, -4.0f/9.0f,        0.0f,  4.0f/9.0f, -4.0f/9.0f,    2.0f/9.0f,  4.0f/9.0f, -4.0f/9.0f,
222                 4.0f/9.0f,  4.0f/9.0f, -4.0f/9.0f,    6.0f/9.0f,  4.0f/9.0f, -4.0f/9.0f,    8.0f/9.0f,  4.0f/9.0f, -4.0f/9.0f,
223           -8.0f/9.0f,  6.0f/9.0f, -4.0f/9.0f,   -6.0f/9.0f,  6.0f/9.0f, -4.0f/9.0f,   -4.0f/9.0f,  6.0f/9.0f, -4.0f/9.0f,
224           -2.0f/9.0f,  6.0f/9.0f, -4.0f/9.0f,        0.0f,  6.0f/9.0f, -4.0f/9.0f,    2.0f/9.0f,  6.0f/9.0f, -4.0f/9.0f,
225                 4.0f/9.0f,  6.0f/9.0f, -4.0f/9.0f,    6.0f/9.0f,  6.0f/9.0f, -4.0f/9.0f,    8.0f/9.0f,  6.0f/9.0f, -4.0f/9.0f,
226           -8.0f/9.0f,  8.0f/9.0f, -4.0f/9.0f,   -6.0f/9.0f,  8.0f/9.0f, -4.0f/9.0f,   -4.0f/9.0f,  8.0f/9.0f, -4.0f/9.0f,
227           -2.0f/9.0f,  8.0f/9.0f, -4.0f/9.0f,        0.0f,  8.0f/9.0f, -4.0f/9.0f,    2.0f/9.0f,  8.0f/9.0f, -4.0f/9.0f,
228                 4.0f/9.0f,  8.0f/9.0f, -4.0f/9.0f,    6.0f/9.0f,  8.0f/9.0f, -4.0f/9.0f,    8.0f/9.0f,  8.0f/9.0f, -4.0f/9.0f,
229           -8.0f/9.0f, -8.0f/9.0f, -2.0f/9.0f,   -6.0f/9.0f, -8.0f/9.0f, -2.0f/9.0f,   -4.0f/9.0f, -8.0f/9.0f, -2.0f/9.0f,
230           -2.0f/9.0f, -8.0f/9.0f, -2.0f/9.0f,        0.0f, -8.0f/9.0f, -2.0f/9.0f,    2.0f/9.0f, -8.0f/9.0f, -2.0f/9.0f,
231                 4.0f/9.0f, -8.0f/9.0f, -2.0f/9.0f,    6.0f/9.0f, -8.0f/9.0f, -2.0f/9.0f,    8.0f/9.0f, -8.0f/9.0f, -2.0f/9.0f,
232           -8.0f/9.0f, -6.0f/9.0f, -2.0f/9.0f,   -6.0f/9.0f, -6.0f/9.0f, -2.0f/9.0f,   -4.0f/9.0f, -6.0f/9.0f, -2.0f/9.0f,
233           -2.0f/9.0f, -6.0f/9.0f, -2.0f/9.0f,        0.0f, -6.0f/9.0f, -2.0f/9.0f,    2.0f/9.0f, -6.0f/9.0f, -2.0f/9.0f,
234                 4.0f/9.0f, -6.0f/9.0f, -2.0f/9.0f,    6.0f/9.0f, -6.0f/9.0f, -2.0f/9.0f,    8.0f/9.0f, -6.0f/9.0f, -2.0f/9.0f,
235           -8.0f/9.0f, -4.0f/9.0f, -2.0f/9.0f,   -6.0f/9.0f, -4.0f/9.0f, -2.0f/9.0f,   -4.0f/9.0f, -4.0f/9.0f, -2.0f/9.0f,
236           -2.0f/9.0f, -4.0f/9.0f, -2.0f/9.0f,        0.0f, -4.0f/9.0f, -2.0f/9.0f,    2.0f/9.0f, -4.0f/9.0f, -2.0f/9.0f,
237                 4.0f/9.0f, -4.0f/9.0f, -2.0f/9.0f,    6.0f/9.0f, -4.0f/9.0f, -2.0f/9.0f,    8.0f/9.0f, -4.0f/9.0f, -2.0f/9.0f,
238           -8.0f/9.0f, -2.0f/9.0f, -2.0f/9.0f,   -6.0f/9.0f, -2.0f/9.0f, -2.0f/9.0f,   -4.0f/9.0f, -2.0f/9.0f, -2.0f/9.0f,
239           -2.0f/9.0f, -2.0f/9.0f, -2.0f/9.0f,        0.0f, -2.0f/9.0f, -2.0f/9.0f,    2.0f/9.0f, -2.0f/9.0f, -2.0f/9.0f,
240                 4.0f/9.0f, -2.0f/9.0f, -2.0f/9.0f,    6.0f/9.0f, -2.0f/9.0f, -2.0f/9.0f,    8.0f/9.0f, -2.0f/9.0f, -2.0f/9.0f,
241           -8.0f/9.0f,      0.0f, -2.0f/9.0f,   -6.0f/9.0f,      0.0f, -2.0f/9.0f,   -4.0f/9.0f,      0.0f, -2.0f/9.0f,
242           -2.0f/9.0f,      0.0f, -2.0f/9.0f,        0.0f,      0.0f, -2.0f/9.0f,    2.0f/9.0f,      0.0f, -2.0f/9.0f,
243                 4.0f/9.0f,      0.0f, -2.0f/9.0f,    6.0f/9.0f,      0.0f, -2.0f/9.0f,    8.0f/9.0f,      0.0f, -2.0f/9.0f,
244           -8.0f/9.0f,  2.0f/9.0f, -2.0f/9.0f,   -6.0f/9.0f,  2.0f/9.0f, -2.0f/9.0f,   -4.0f/9.0f,  2.0f/9.0f, -2.0f/9.0f,
245           -2.0f/9.0f,  2.0f/9.0f, -2.0f/9.0f,        0.0f,  2.0f/9.0f, -2.0f/9.0f,    2.0f/9.0f,  2.0f/9.0f, -2.0f/9.0f,
246                 4.0f/9.0f,  2.0f/9.0f, -2.0f/9.0f,    6.0f/9.0f,  2.0f/9.0f, -2.0f/9.0f,    8.0f/9.0f,  2.0f/9.0f, -2.0f/9.0f,
247           -8.0f/9.0f,  4.0f/9.0f, -2.0f/9.0f,   -6.0f/9.0f,  4.0f/9.0f, -2.0f/9.0f,   -4.0f/9.0f,  4.0f/9.0f, -2.0f/9.0f,
248           -2.0f/9.0f,  4.0f/9.0f, -2.0f/9.0f,        0.0f,  4.0f/9.0f, -2.0f/9.0f,    2.0f/9.0f,  4.0f/9.0f, -2.0f/9.0f,
249                 4.0f/9.0f,  4.0f/9.0f, -2.0f/9.0f,    6.0f/9.0f,  4.0f/9.0f, -2.0f/9.0f,    8.0f/9.0f,  4.0f/9.0f, -2.0f/9.0f,
250           -8.0f/9.0f,  6.0f/9.0f, -2.0f/9.0f,   -6.0f/9.0f,  6.0f/9.0f, -2.0f/9.0f,   -4.0f/9.0f,  6.0f/9.0f, -2.0f/9.0f,
251           -2.0f/9.0f,  6.0f/9.0f, -2.0f/9.0f,        0.0f,  6.0f/9.0f, -2.0f/9.0f,    2.0f/9.0f,  6.0f/9.0f, -2.0f/9.0f,
252                 4.0f/9.0f,  6.0f/9.0f, -2.0f/9.0f,    6.0f/9.0f,  6.0f/9.0f, -2.0f/9.0f,    8.0f/9.0f,  6.0f/9.0f, -2.0f/9.0f,
253           -8.0f/9.0f,  8.0f/9.0f, -2.0f/9.0f,   -6.0f/9.0f,  8.0f/9.0f, -2.0f/9.0f,   -4.0f/9.0f,  8.0f/9.0f, -2.0f/9.0f,
254           -2.0f/9.0f,  8.0f/9.0f, -2.0f/9.0f,        0.0f,  8.0f/9.0f, -2.0f/9.0f,    2.0f/9.0f,  8.0f/9.0f, -2.0f/9.0f,
255                 4.0f/9.0f,  8.0f/9.0f, -2.0f/9.0f,    6.0f/9.0f,  8.0f/9.0f, -2.0f/9.0f,    8.0f/9.0f,  8.0f/9.0f, -2.0f/9.0f,
256           -8.0f/9.0f, -8.0f/9.0f,      0.0f,   -6.0f/9.0f, -8.0f/9.0f,      0.0f,   -4.0f/9.0f, -8.0f/9.0f,      0.0f,
257           -2.0f/9.0f, -8.0f/9.0f,      0.0f,        0.0f, -8.0f/9.0f,      0.0f,    2.0f/9.0f, -8.0f/9.0f,      0.0f,
258                 4.0f/9.0f, -8.0f/9.0f,      0.0f,    6.0f/9.0f, -8.0f/9.0f,      0.0f,    8.0f/9.0f, -8.0f/9.0f,      0.0f,
259           -8.0f/9.0f, -6.0f/9.0f,      0.0f,   -6.0f/9.0f, -6.0f/9.0f,      0.0f,   -4.0f/9.0f, -6.0f/9.0f,      0.0f,
260           -2.0f/9.0f, -6.0f/9.0f,      0.0f,        0.0f, -6.0f/9.0f,      0.0f,    2.0f/9.0f, -6.0f/9.0f,      0.0f,
261                 4.0f/9.0f, -6.0f/9.0f,      0.0f,    6.0f/9.0f, -6.0f/9.0f,      0.0f,    8.0f/9.0f, -6.0f/9.0f,      0.0f,
262           -8.0f/9.0f, -4.0f/9.0f,      0.0f,   -6.0f/9.0f, -4.0f/9.0f,      0.0f,   -4.0f/9.0f, -4.0f/9.0f,      0.0f,
263           -2.0f/9.0f, -4.0f/9.0f,      0.0f,        0.0f, -4.0f/9.0f,      0.0f,    2.0f/9.0f, -4.0f/9.0f,      0.0f,
264                 4.0f/9.0f, -4.0f/9.0f,      0.0f,    6.0f/9.0f, -4.0f/9.0f,      0.0f,    8.0f/9.0f, -4.0f/9.0f,      0.0f,
265           -8.0f/9.0f, -2.0f/9.0f,      0.0f,   -6.0f/9.0f, -2.0f/9.0f,      0.0f,   -4.0f/9.0f, -2.0f/9.0f,      0.0f,
266           -2.0f/9.0f, -2.0f/9.0f,      0.0f,        0.0f, -2.0f/9.0f,      0.0f,    2.0f/9.0f, -2.0f/9.0f,      0.0f,
267                 4.0f/9.0f, -2.0f/9.0f,      0.0f,    6.0f/9.0f, -2.0f/9.0f,      0.0f,    8.0f/9.0f, -2.0f/9.0f,      0.0f,
268           -8.0f/9.0f,      0.0f,      0.0f,   -6.0f/9.0f,      0.0f,      0.0f,   -4.0f/9.0f,      0.0f,      0.0f,
269           -2.0f/9.0f,      0.0f,      0.0f,        0.0f,      0.0f,      0.0f,    2.0f/9.0f,      0.0f,      0.0f,
270                 4.0f/9.0f,      0.0f,      0.0f,    6.0f/9.0f,      0.0f,      0.0f,    8.0f/9.0f,      0.0f,      0.0f,
271           -8.0f/9.0f,  2.0f/9.0f,      0.0f,   -6.0f/9.0f,  2.0f/9.0f,      0.0f,   -4.0f/9.0f,  2.0f/9.0f,      0.0f,
272           -2.0f/9.0f,  2.0f/9.0f,      0.0f,        0.0f,  2.0f/9.0f,      0.0f,    2.0f/9.0f,  2.0f/9.0f,      0.0f,
273                 4.0f/9.0f,  2.0f/9.0f,      0.0f,    6.0f/9.0f,  2.0f/9.0f,      0.0f,    8.0f/9.0f,  2.0f/9.0f,      0.0f,
274           -8.0f/9.0f,  4.0f/9.0f,      0.0f,   -6.0f/9.0f,  4.0f/9.0f,      0.0f,   -4.0f/9.0f,  4.0f/9.0f,      0.0f,
275           -2.0f/9.0f,  4.0f/9.0f,      0.0f,        0.0f,  4.0f/9.0f,      0.0f,    2.0f/9.0f,  4.0f/9.0f,      0.0f,
276                 4.0f/9.0f,  4.0f/9.0f,      0.0f,    6.0f/9.0f,  4.0f/9.0f,      0.0f,    8.0f/9.0f,  4.0f/9.0f,      0.0f,
277           -8.0f/9.0f,  6.0f/9.0f,      0.0f,   -6.0f/9.0f,  6.0f/9.0f,      0.0f,   -4.0f/9.0f,  6.0f/9.0f,      0.0f,
278           -2.0f/9.0f,  6.0f/9.0f,      0.0f,        0.0f,  6.0f/9.0f,      0.0f,    2.0f/9.0f,  6.0f/9.0f,      0.0f,
279                 4.0f/9.0f,  6.0f/9.0f,      0.0f,    6.0f/9.0f,  6.0f/9.0f,      0.0f,    8.0f/9.0f,  6.0f/9.0f,      0.0f,
280           -8.0f/9.0f,  8.0f/9.0f,      0.0f,   -6.0f/9.0f,  8.0f/9.0f,      0.0f,   -4.0f/9.0f,  8.0f/9.0f,      0.0f,
281           -2.0f/9.0f,  8.0f/9.0f,      0.0f,        0.0f,  8.0f/9.0f,      0.0f,    2.0f/9.0f,  8.0f/9.0f,      0.0f,
282            4.0f/9.0f,  8.0f/9.0f,      0.0f,    6.0f/9.0f,  8.0f/9.0f,      0.0f,    8.0f/9.0f,  8.0f/9.0f,      0.0f,
283           -8.0f/9.0f, -8.0f/9.0f,  2.0f/9.0f,   -6.0f/9.0f, -8.0f/9.0f,  2.0f/9.0f,   -4.0f/9.0f, -8.0f/9.0f,  2.0f/9.0f,
284           -2.0f/9.0f, -8.0f/9.0f,  2.0f/9.0f,        0.0f, -8.0f/9.0f,  2.0f/9.0f,    2.0f/9.0f, -8.0f/9.0f,  2.0f/9.0f,
285                 4.0f/9.0f, -8.0f/9.0f,  2.0f/9.0f,    6.0f/9.0f, -8.0f/9.0f,  2.0f/9.0f,    8.0f/9.0f, -8.0f/9.0f,  2.0f/9.0f,
286           -8.0f/9.0f, -6.0f/9.0f,  2.0f/9.0f,   -6.0f/9.0f, -6.0f/9.0f,  2.0f/9.0f,   -4.0f/9.0f, -6.0f/9.0f,  2.0f/9.0f,
287           -2.0f/9.0f, -6.0f/9.0f,  2.0f/9.0f,        0.0f, -6.0f/9.0f,  2.0f/9.0f,    2.0f/9.0f, -6.0f/9.0f,  2.0f/9.0f,
288                 4.0f/9.0f, -6.0f/9.0f,  2.0f/9.0f,    6.0f/9.0f, -6.0f/9.0f,  2.0f/9.0f,    8.0f/9.0f, -6.0f/9.0f,  2.0f/9.0f,
289           -8.0f/9.0f, -4.0f/9.0f,  2.0f/9.0f,   -6.0f/9.0f, -4.0f/9.0f,  2.0f/9.0f,   -4.0f/9.0f, -4.0f/9.0f,  2.0f/9.0f,
290           -2.0f/9.0f, -4.0f/9.0f,  2.0f/9.0f,        0.0f, -4.0f/9.0f,  2.0f/9.0f,    2.0f/9.0f, -4.0f/9.0f,  2.0f/9.0f,
291            4.0f/9.0f, -4.0f/9.0f,  2.0f/9.0f,    6.0f/9.0f, -4.0f/9.0f,  2.0f/9.0f,    8.0f/9.0f, -4.0f/9.0f,  2.0f/9.0f,
292           -8.0f/9.0f, -2.0f/9.0f,  2.0f/9.0f,   -6.0f/9.0f, -2.0f/9.0f,  2.0f/9.0f,   -4.0f/9.0f, -2.0f/9.0f,  2.0f/9.0f,
293           -2.0f/9.0f, -2.0f/9.0f,  2.0f/9.0f,        0.0f, -2.0f/9.0f,  2.0f/9.0f,    2.0f/9.0f, -2.0f/9.0f,  2.0f/9.0f,
294            4.0f/9.0f, -2.0f/9.0f,  2.0f/9.0f,    6.0f/9.0f, -2.0f/9.0f,  2.0f/9.0f,    8.0f/9.0f, -2.0f/9.0f,  2.0f/9.0f,
295           -8.0f/9.0f,      0.0f,  2.0f/9.0f,   -6.0f/9.0f,      0.0f,  2.0f/9.0f,   -4.0f/9.0f,      0.0f,  2.0f/9.0f,
296           -2.0f/9.0f,      0.0f,  2.0f/9.0f,        0.0f,      0.0f,  2.0f/9.0f,    2.0f/9.0f,      0.0f,  2.0f/9.0f,
297            4.0f/9.0f,      0.0f,  2.0f/9.0f,    6.0f/9.0f,      0.0f,  2.0f/9.0f,    8.0f/9.0f,      0.0f,  2.0f/9.0f,
298           -8.0f/9.0f,  2.0f/9.0f,  2.0f/9.0f,   -6.0f/9.0f,  2.0f/9.0f,  2.0f/9.0f,   -4.0f/9.0f,  2.0f/9.0f,  2.0f/9.0f,
299           -2.0f/9.0f,  2.0f/9.0f,  2.0f/9.0f,        0.0f,  2.0f/9.0f,  2.0f/9.0f,    2.0f/9.0f,  2.0f/9.0f,  2.0f/9.0f,
300            4.0f/9.0f,  2.0f/9.0f,  2.0f/9.0f,    6.0f/9.0f,  2.0f/9.0f,  2.0f/9.0f,    8.0f/9.0f,  2.0f/9.0f,  2.0f/9.0f,
301           -8.0f/9.0f,  4.0f/9.0f,  2.0f/9.0f,   -6.0f/9.0f,  4.0f/9.0f,  2.0f/9.0f,   -4.0f/9.0f,  4.0f/9.0f,  2.0f/9.0f,
302           -2.0f/9.0f,  4.0f/9.0f,  2.0f/9.0f,        0.0f,  4.0f/9.0f,  2.0f/9.0f,    2.0f/9.0f,  4.0f/9.0f,  2.0f/9.0f,
303                 4.0f/9.0f,  4.0f/9.0f,  2.0f/9.0f,    6.0f/9.0f,  4.0f/9.0f,  2.0f/9.0f,    8.0f/9.0f,  4.0f/9.0f,  2.0f/9.0f,
304           -8.0f/9.0f,  6.0f/9.0f,  2.0f/9.0f,   -6.0f/9.0f,  6.0f/9.0f,  2.0f/9.0f,   -4.0f/9.0f,  6.0f/9.0f,  2.0f/9.0f,
305           -2.0f/9.0f,  6.0f/9.0f,  2.0f/9.0f,        0.0f,  6.0f/9.0f,  2.0f/9.0f,    2.0f/9.0f,  6.0f/9.0f,  2.0f/9.0f,
306            4.0f/9.0f,  6.0f/9.0f,  2.0f/9.0f,    6.0f/9.0f,  6.0f/9.0f,  2.0f/9.0f,    8.0f/9.0f,  6.0f/9.0f,  2.0f/9.0f,
307           -8.0f/9.0f,  8.0f/9.0f,  2.0f/9.0f,   -6.0f/9.0f,  8.0f/9.0f,  2.0f/9.0f,   -4.0f/9.0f,  8.0f/9.0f,  2.0f/9.0f,
308           -2.0f/9.0f,  8.0f/9.0f,  2.0f/9.0f,        0.0f,  8.0f/9.0f,  2.0f/9.0f,    2.0f/9.0f,  8.0f/9.0f,  2.0f/9.0f,
309            4.0f/9.0f,  8.0f/9.0f,  2.0f/9.0f,    6.0f/9.0f,  8.0f/9.0f,  2.0f/9.0f,    8.0f/9.0f,  8.0f/9.0f,  2.0f/9.0f,
310           -8.0f/9.0f, -8.0f/9.0f,  4.0f/9.0f,   -6.0f/9.0f, -8.0f/9.0f,  4.0f/9.0f,   -4.0f/9.0f, -8.0f/9.0f,  4.0f/9.0f,
311           -2.0f/9.0f, -8.0f/9.0f,  4.0f/9.0f,        0.0f, -8.0f/9.0f,  4.0f/9.0f,    2.0f/9.0f, -8.0f/9.0f,  4.0f/9.0f,
312                 4.0f/9.0f, -8.0f/9.0f,  4.0f/9.0f,    6.0f/9.0f, -8.0f/9.0f,  4.0f/9.0f,    8.0f/9.0f, -8.0f/9.0f,  4.0f/9.0f,
313           -8.0f/9.0f, -6.0f/9.0f,  4.0f/9.0f,   -6.0f/9.0f, -6.0f/9.0f,  4.0f/9.0f,   -4.0f/9.0f, -6.0f/9.0f,  4.0f/9.0f,
314           -2.0f/9.0f, -6.0f/9.0f,  4.0f/9.0f,        0.0f, -6.0f/9.0f,  4.0f/9.0f,    2.0f/9.0f, -6.0f/9.0f,  4.0f/9.0f,
315            4.0f/9.0f, -6.0f/9.0f,  4.0f/9.0f,    6.0f/9.0f, -6.0f/9.0f,  4.0f/9.0f,    8.0f/9.0f, -6.0f/9.0f,  4.0f/9.0f,
316           -8.0f/9.0f, -4.0f/9.0f,  4.0f/9.0f,   -6.0f/9.0f, -4.0f/9.0f,  4.0f/9.0f,   -4.0f/9.0f, -4.0f/9.0f,  4.0f/9.0f,
317           -2.0f/9.0f, -4.0f/9.0f,  4.0f/9.0f,        0.0f, -4.0f/9.0f,  4.0f/9.0f,    2.0f/9.0f, -4.0f/9.0f,  4.0f/9.0f,
318            4.0f/9.0f, -4.0f/9.0f,  4.0f/9.0f,    6.0f/9.0f, -4.0f/9.0f,  4.0f/9.0f,    8.0f/9.0f, -4.0f/9.0f,  4.0f/9.0f,
319           -8.0f/9.0f, -2.0f/9.0f,  4.0f/9.0f,   -6.0f/9.0f, -2.0f/9.0f,  4.0f/9.0f,   -4.0f/9.0f, -2.0f/9.0f,  4.0f/9.0f,
320           -2.0f/9.0f, -2.0f/9.0f,  4.0f/9.0f,        0.0f, -2.0f/9.0f,  4.0f/9.0f,    2.0f/9.0f, -2.0f/9.0f,  4.0f/9.0f,
321                 4.0f/9.0f, -2.0f/9.0f,  4.0f/9.0f,    6.0f/9.0f, -2.0f/9.0f,  4.0f/9.0f,    8.0f/9.0f, -2.0f/9.0f,  4.0f/9.0f,
322           -8.0f/9.0f,      0.0f,  4.0f/9.0f,   -6.0f/9.0f,      0.0f,  4.0f/9.0f,   -4.0f/9.0f,      0.0f,  4.0f/9.0f,
323           -2.0f/9.0f,      0.0f,  4.0f/9.0f,        0.0f,      0.0f,  4.0f/9.0f,    2.0f/9.0f,      0.0f,  4.0f/9.0f,
324            4.0f/9.0f,      0.0f,  4.0f/9.0f,    6.0f/9.0f,      0.0f,  4.0f/9.0f,    8.0f/9.0f,      0.0f,  4.0f/9.0f,
325           -8.0f/9.0f,  2.0f/9.0f,  4.0f/9.0f,   -6.0f/9.0f,  2.0f/9.0f,  4.0f/9.0f,   -4.0f/9.0f,  2.0f/9.0f,  4.0f/9.0f,
326           -2.0f/9.0f,  2.0f/9.0f,  4.0f/9.0f,        0.0f,  2.0f/9.0f,  4.0f/9.0f,    2.0f/9.0f,  2.0f/9.0f,  4.0f/9.0f,
327            4.0f/9.0f,  2.0f/9.0f,  4.0f/9.0f,    6.0f/9.0f,  2.0f/9.0f,  4.0f/9.0f,    8.0f/9.0f,  2.0f/9.0f,  4.0f/9.0f,
328           -8.0f/9.0f,  4.0f/9.0f,  4.0f/9.0f,   -6.0f/9.0f,  4.0f/9.0f,  4.0f/9.0f,   -4.0f/9.0f,  4.0f/9.0f,  4.0f/9.0f,
329           -2.0f/9.0f,  4.0f/9.0f,  4.0f/9.0f,        0.0f,  4.0f/9.0f,  4.0f/9.0f,    2.0f/9.0f,  4.0f/9.0f,  4.0f/9.0f,
330            4.0f/9.0f,  4.0f/9.0f,  4.0f/9.0f,    6.0f/9.0f,  4.0f/9.0f,  4.0f/9.0f,    8.0f/9.0f,  4.0f/9.0f,  4.0f/9.0f,
331           -8.0f/9.0f,  6.0f/9.0f,  4.0f/9.0f,   -6.0f/9.0f,  6.0f/9.0f,  4.0f/9.0f,   -4.0f/9.0f,  6.0f/9.0f,  4.0f/9.0f,
332           -2.0f/9.0f,  6.0f/9.0f,  4.0f/9.0f,        0.0f,  6.0f/9.0f,  4.0f/9.0f,    2.0f/9.0f,  6.0f/9.0f,  4.0f/9.0f,
333                 4.0f/9.0f,  6.0f/9.0f,  4.0f/9.0f,    6.0f/9.0f,  6.0f/9.0f,  4.0f/9.0f,    8.0f/9.0f,  6.0f/9.0f,  4.0f/9.0f,
334           -8.0f/9.0f,  8.0f/9.0f,  4.0f/9.0f,   -6.0f/9.0f,  8.0f/9.0f,  4.0f/9.0f,   -4.0f/9.0f,  8.0f/9.0f,  4.0f/9.0f,
335           -2.0f/9.0f,  8.0f/9.0f,  4.0f/9.0f,        0.0f,  8.0f/9.0f,  4.0f/9.0f,    2.0f/9.0f,  8.0f/9.0f,  4.0f/9.0f,
336                 4.0f/9.0f,  8.0f/9.0f,  4.0f/9.0f,    6.0f/9.0f,  8.0f/9.0f,  4.0f/9.0f,    8.0f/9.0f,  8.0f/9.0f,  4.0f/9.0f,
337           -8.0f/9.0f, -8.0f/9.0f,  6.0f/9.0f,   -6.0f/9.0f, -8.0f/9.0f,  6.0f/9.0f,   -4.0f/9.0f, -8.0f/9.0f,  6.0f/9.0f,
338           -2.0f/9.0f, -8.0f/9.0f,  6.0f/9.0f,        0.0f, -8.0f/9.0f,  6.0f/9.0f,    2.0f/9.0f, -8.0f/9.0f,  6.0f/9.0f,
339            4.0f/9.0f, -8.0f/9.0f,  6.0f/9.0f,    6.0f/9.0f, -8.0f/9.0f,  6.0f/9.0f,    8.0f/9.0f, -8.0f/9.0f,  6.0f/9.0f,
340           -8.0f/9.0f, -6.0f/9.0f,  6.0f/9.0f,   -6.0f/9.0f, -6.0f/9.0f,  6.0f/9.0f,   -4.0f/9.0f, -6.0f/9.0f,  6.0f/9.0f,
341           -2.0f/9.0f, -6.0f/9.0f,  6.0f/9.0f,        0.0f, -6.0f/9.0f,  6.0f/9.0f,    2.0f/9.0f, -6.0f/9.0f,  6.0f/9.0f,
342            4.0f/9.0f, -6.0f/9.0f,  6.0f/9.0f,    6.0f/9.0f, -6.0f/9.0f,  6.0f/9.0f,    8.0f/9.0f, -6.0f/9.0f,  6.0f/9.0f,
343           -8.0f/9.0f, -4.0f/9.0f,  6.0f/9.0f,   -6.0f/9.0f, -4.0f/9.0f,  6.0f/9.0f,   -4.0f/9.0f, -4.0f/9.0f,  6.0f/9.0f,
344           -2.0f/9.0f, -4.0f/9.0f,  6.0f/9.0f,        0.0f, -4.0f/9.0f,  6.0f/9.0f,    2.0f/9.0f, -4.0f/9.0f,  6.0f/9.0f,
345                 4.0f/9.0f, -4.0f/9.0f,  6.0f/9.0f,    6.0f/9.0f, -4.0f/9.0f,  6.0f/9.0f,    8.0f/9.0f, -4.0f/9.0f,  6.0f/9.0f,
346           -8.0f/9.0f, -2.0f/9.0f,  6.0f/9.0f,   -6.0f/9.0f, -2.0f/9.0f,  6.0f/9.0f,   -4.0f/9.0f, -2.0f/9.0f,  6.0f/9.0f,
347           -2.0f/9.0f, -2.0f/9.0f,  6.0f/9.0f,        0.0f, -2.0f/9.0f,  6.0f/9.0f,    2.0f/9.0f, -2.0f/9.0f,  6.0f/9.0f,
348            4.0f/9.0f, -2.0f/9.0f,  6.0f/9.0f,    6.0f/9.0f, -2.0f/9.0f,  6.0f/9.0f,    8.0f/9.0f, -2.0f/9.0f,  6.0f/9.0f,
349           -8.0f/9.0f,      0.0f,  6.0f/9.0f,   -6.0f/9.0f,      0.0f,  6.0f/9.0f,   -4.0f/9.0f,      0.0f,  6.0f/9.0f,
350           -2.0f/9.0f,      0.0f,  6.0f/9.0f,        0.0f,      0.0f,  6.0f/9.0f,    2.0f/9.0f,      0.0f,  6.0f/9.0f,
351                 4.0f/9.0f,      0.0f,  6.0f/9.0f,    6.0f/9.0f,      0.0f,  6.0f/9.0f,    8.0f/9.0f,      0.0f,  6.0f/9.0f,
352           -8.0f/9.0f,  2.0f/9.0f,  6.0f/9.0f,   -6.0f/9.0f,  2.0f/9.0f,  6.0f/9.0f,   -4.0f/9.0f,  2.0f/9.0f,  6.0f/9.0f,
353           -2.0f/9.0f,  2.0f/9.0f,  6.0f/9.0f,        0.0f,  2.0f/9.0f,  6.0f/9.0f,    2.0f/9.0f,  2.0f/9.0f,  6.0f/9.0f,
354                 4.0f/9.0f,  2.0f/9.0f,  6.0f/9.0f,    6.0f/9.0f,  2.0f/9.0f,  6.0f/9.0f,    8.0f/9.0f,  2.0f/9.0f,  6.0f/9.0f,
355           -8.0f/9.0f,  4.0f/9.0f,  6.0f/9.0f,   -6.0f/9.0f,  4.0f/9.0f,  6.0f/9.0f,   -4.0f/9.0f,  4.0f/9.0f,  6.0f/9.0f,
356           -2.0f/9.0f,  4.0f/9.0f,  6.0f/9.0f,        0.0f,  4.0f/9.0f,  6.0f/9.0f,    2.0f/9.0f,  4.0f/9.0f,  6.0f/9.0f,
357                 4.0f/9.0f,  4.0f/9.0f,  6.0f/9.0f,    6.0f/9.0f,  4.0f/9.0f,  6.0f/9.0f,    8.0f/9.0f,  4.0f/9.0f,  6.0f/9.0f,
358           -8.0f/9.0f,  6.0f/9.0f,  6.0f/9.0f,   -6.0f/9.0f,  6.0f/9.0f,  6.0f/9.0f,   -4.0f/9.0f,  6.0f/9.0f,  6.0f/9.0f,
359           -2.0f/9.0f,  6.0f/9.0f,  6.0f/9.0f,        0.0f,  6.0f/9.0f,  6.0f/9.0f,    2.0f/9.0f,  6.0f/9.0f,  6.0f/9.0f,
360                 4.0f/9.0f,  6.0f/9.0f,  6.0f/9.0f,    6.0f/9.0f,  6.0f/9.0f,  6.0f/9.0f,    8.0f/9.0f,  6.0f/9.0f,  6.0f/9.0f,
361           -8.0f/9.0f,  8.0f/9.0f,  6.0f/9.0f,   -6.0f/9.0f,  8.0f/9.0f,  6.0f/9.0f,   -4.0f/9.0f,  8.0f/9.0f,  6.0f/9.0f,
362           -2.0f/9.0f,  8.0f/9.0f,  6.0f/9.0f,        0.0f,  8.0f/9.0f,  6.0f/9.0f,    2.0f/9.0f,  8.0f/9.0f,  6.0f/9.0f,
363                 4.0f/9.0f,  8.0f/9.0f,  6.0f/9.0f,    6.0f/9.0f,  8.0f/9.0f,  6.0f/9.0f,    8.0f/9.0f,  8.0f/9.0f,  6.0f/9.0f,
364           -8.0f/9.0f, -8.0f/9.0f,  8.0f/9.0f,   -6.0f/9.0f, -8.0f/9.0f,  8.0f/9.0f,   -4.0f/9.0f, -8.0f/9.0f,  8.0f/9.0f,
365           -2.0f/9.0f, -8.0f/9.0f,  8.0f/9.0f,        0.0f, -8.0f/9.0f,  8.0f/9.0f,    2.0f/9.0f, -8.0f/9.0f,  8.0f/9.0f,
366            4.0f/9.0f, -8.0f/9.0f,  8.0f/9.0f,    6.0f/9.0f, -8.0f/9.0f,  8.0f/9.0f,    8.0f/9.0f, -8.0f/9.0f,  8.0f/9.0f,
367           -8.0f/9.0f, -6.0f/9.0f,  8.0f/9.0f,   -6.0f/9.0f, -6.0f/9.0f,  8.0f/9.0f,   -4.0f/9.0f, -6.0f/9.0f,  8.0f/9.0f,
368           -2.0f/9.0f, -6.0f/9.0f,  8.0f/9.0f,        0.0f, -6.0f/9.0f,  8.0f/9.0f,    2.0f/9.0f, -6.0f/9.0f,  8.0f/9.0f,
369                 4.0f/9.0f, -6.0f/9.0f,  8.0f/9.0f,    6.0f/9.0f, -6.0f/9.0f,  8.0f/9.0f,    8.0f/9.0f, -6.0f/9.0f,  8.0f/9.0f,
370           -8.0f/9.0f, -4.0f/9.0f,  8.0f/9.0f,   -6.0f/9.0f, -4.0f/9.0f,  8.0f/9.0f,   -4.0f/9.0f, -4.0f/9.0f,  8.0f/9.0f,
371           -2.0f/9.0f, -4.0f/9.0f,  8.0f/9.0f,        0.0f, -4.0f/9.0f,  8.0f/9.0f,    2.0f/9.0f, -4.0f/9.0f,  8.0f/9.0f,
372            4.0f/9.0f, -4.0f/9.0f,  8.0f/9.0f,    6.0f/9.0f, -4.0f/9.0f,  8.0f/9.0f,    8.0f/9.0f, -4.0f/9.0f,  8.0f/9.0f,
373           -8.0f/9.0f, -2.0f/9.0f,  8.0f/9.0f,   -6.0f/9.0f, -2.0f/9.0f,  8.0f/9.0f,   -4.0f/9.0f, -2.0f/9.0f,  8.0f/9.0f,
374           -2.0f/9.0f, -2.0f/9.0f,  8.0f/9.0f,        0.0f, -2.0f/9.0f,  8.0f/9.0f,    2.0f/9.0f, -2.0f/9.0f,  8.0f/9.0f,
375            4.0f/9.0f, -2.0f/9.0f,  8.0f/9.0f,    6.0f/9.0f, -2.0f/9.0f,  8.0f/9.0f,    8.0f/9.0f, -2.0f/9.0f,  8.0f/9.0f,
376           -8.0f/9.0f,      0.0f,  8.0f/9.0f,   -6.0f/9.0f,      0.0f,  8.0f/9.0f,   -4.0f/9.0f,      0.0f,  8.0f/9.0f,
377           -2.0f/9.0f,      0.0f,  8.0f/9.0f,        0.0f,      0.0f,  8.0f/9.0f,    2.0f/9.0f,      0.0f,  8.0f/9.0f,
378            4.0f/9.0f,      0.0f,  8.0f/9.0f,    6.0f/9.0f,      0.0f,  8.0f/9.0f,    8.0f/9.0f,      0.0f,  8.0f/9.0f,
379           -8.0f/9.0f,  2.0f/9.0f,  8.0f/9.0f,   -6.0f/9.0f,  2.0f/9.0f,  8.0f/9.0f,   -4.0f/9.0f,  2.0f/9.0f,  8.0f/9.0f,
380           -2.0f/9.0f,  2.0f/9.0f,  8.0f/9.0f,        0.0f,  2.0f/9.0f,  8.0f/9.0f,    2.0f/9.0f,  2.0f/9.0f,  8.0f/9.0f,
381                 4.0f/9.0f,  2.0f/9.0f,  8.0f/9.0f,    6.0f/9.0f,  2.0f/9.0f,  8.0f/9.0f,    8.0f/9.0f,  2.0f/9.0f,  8.0f/9.0f,
382           -8.0f/9.0f,  4.0f/9.0f,  8.0f/9.0f,   -6.0f/9.0f,  4.0f/9.0f,  8.0f/9.0f,   -4.0f/9.0f,  4.0f/9.0f,  8.0f/9.0f,
383           -2.0f/9.0f,  4.0f/9.0f,  8.0f/9.0f,        0.0f,  4.0f/9.0f,  8.0f/9.0f,    2.0f/9.0f,  4.0f/9.0f,  8.0f/9.0f,
384                 4.0f/9.0f,  4.0f/9.0f,  8.0f/9.0f,    6.0f/9.0f,  4.0f/9.0f,  8.0f/9.0f,    8.0f/9.0f,  4.0f/9.0f,  8.0f/9.0f,
385           -8.0f/9.0f,  6.0f/9.0f,  8.0f/9.0f,   -6.0f/9.0f,  6.0f/9.0f,  8.0f/9.0f,   -4.0f/9.0f,  6.0f/9.0f,  8.0f/9.0f,
386           -2.0f/9.0f,  6.0f/9.0f,  8.0f/9.0f,        0.0f,  6.0f/9.0f,  8.0f/9.0f,    2.0f/9.0f,  6.0f/9.0f,  8.0f/9.0f,
387            4.0f/9.0f,  6.0f/9.0f,  8.0f/9.0f,    6.0f/9.0f,  6.0f/9.0f,  8.0f/9.0f,    8.0f/9.0f,  6.0f/9.0f,  8.0f/9.0f,
388           -8.0f/9.0f,  8.0f/9.0f,  8.0f/9.0f,   -6.0f/9.0f,  8.0f/9.0f,  8.0f/9.0f,   -4.0f/9.0f,  8.0f/9.0f,  8.0f/9.0f,
389           -2.0f/9.0f,  8.0f/9.0f,  8.0f/9.0f,        0.0f,  8.0f/9.0f,  8.0f/9.0f,    2.0f/9.0f,  8.0f/9.0f,  8.0f/9.0f,
390            4.0f/9.0f,  8.0f/9.0f,  8.0f/9.0f,    6.0f/9.0f,  8.0f/9.0f,  8.0f/9.0f,    8.0f/9.0f,  8.0f/9.0f,  8.0f/9.0f
391         };
392
393         // data taken from ISO/IEC DIS 11172, Annexes 3-B.2[abcd] and 3-B.4:
394
395         // subbands 0-2 in tables 3-B.2a and 2b: (index is allocation)
396         @LOC("F") public static final int table_ab1_codelength[] =
397           // bits per codeword
398         { 0, 5, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };
399
400         @LOC("F") public static final float table_ab1_groupingtables[][] =
401           // pointer to sample grouping table, or NULL-pointer if ungrouped
402         { null, grouping_5bits, null, null, null, null, null, null, null, null, null, null, null, null, null, null };
403
404         @LOC("F") public static final float table_ab1_factor[] =
405           // factor for requantization: (real)sample * factor - 1.0 gives requantized sample
406         { 0.0f, 1.0f/2.0f, 1.0f/4.0f, 1.0f/8.0f, 1.0f/16.0f, 1.0f/32.0f, 1.0f/64.0f,
407           1.0f/128.0f, 1.0f/256.0f, 1.0f/512.0f, 1.0f/1024.0f, 1.0f/2048.0f,
408           1.0f/4096.0f, 1.0f/8192.0f, 1.0f/16384.0f, 1.0f/32768.0f };
409
410         @LOC("F") public static final float table_ab1_c[] =
411           // factor c for requantization from table 3-B.4
412         { 0.0f,           1.33333333333f, 1.14285714286f, 1.06666666666f, 1.03225806452f,
413           1.01587301587f, 1.00787401575f, 1.00392156863f, 1.00195694716f, 1.00097751711f,
414           1.00048851979f, 1.00024420024f, 1.00012208522f, 1.00006103888f, 1.00003051851f,
415           1.00001525902f };
416
417         @LOC("F") public static final float table_ab1_d[] =
418           // addend d for requantization from table 3-B.4
419         { 0.0f,           0.50000000000f, 0.25000000000f, 0.12500000000f, 0.06250000000f,
420           0.03125000000f, 0.01562500000f, 0.00781250000f, 0.00390625000f, 0.00195312500f,
421           0.00097656250f, 0.00048828125f, 0.00024414063f, 0.00012207031f, 0.00006103516f,
422           0.00003051758f };
423
424         // subbands 3-... tables 3-B.2a and 2b:
425         @LOC("F") public static final float[] table_ab234_groupingtables[] =
426         { null, grouping_5bits, grouping_7bits, null, grouping_10bits, null, null, null, null, null, null, null, null, null, null, null };
427
428         // subbands 3-10 in tables 3-B.2a and 2b:
429         @LOC("F") public static final int table_ab2_codelength[] =
430         { 0, 5, 7, 3, 10, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16 };
431         @LOC("F") public static final float table_ab2_factor[] =
432         { 0.0f, 1.0f/2.0f, 1.0f/4.0f, 1.0f/4.0f, 1.0f/8.0f, 1.0f/8.0f, 1.0f/16.0f,
433           1.0f/32.0f, 1.0f/64.0f, 1.0f/128.0f, 1.0f/256.0f, 1.0f/512.0f,
434           1.0f/1024.0f, 1.0f/2048.0f, 1.0f/4096.0f, 1.0f/32768.0f };
435         @LOC("F") public static final float table_ab2_c[] =
436         { 0.0f,           1.33333333333f, 1.60000000000f, 1.14285714286f, 1.77777777777f,
437           1.06666666666f, 1.03225806452f, 1.01587301587f, 1.00787401575f, 1.00392156863f,
438           1.00195694716f, 1.00097751711f, 1.00048851979f, 1.00024420024f, 1.00012208522f,
439           1.00001525902f };
440         @LOC("F") public static final float table_ab2_d[] =
441         { 0.0f,           0.50000000000f, 0.50000000000f, 0.25000000000f, 0.50000000000f,
442           0.12500000000f, 0.06250000000f, 0.03125000000f, 0.01562500000f, 0.00781250000f,
443           0.00390625000f, 0.00195312500f, 0.00097656250f, 0.00048828125f, 0.00024414063f,
444           0.00003051758f };
445
446         // subbands 11-22 in tables 3-B.2a and 2b:
447         @LOC("F") public static final int table_ab3_codelength[] = { 0, 5, 7, 3, 10, 4, 5, 16 };
448         @LOC("F") public static final float table_ab3_factor[] =
449         { 0.0f, 1.0f/2.0f, 1.0f/4.0f, 1.0f/4.0f, 1.0f/8.0f, 1.0f/8.0f, 1.0f/16.0f, 1.0f/32768.0f };
450         @LOC("F") public static final float table_ab3_c[] =
451         { 0.0f,           1.33333333333f, 1.60000000000f, 1.14285714286f, 1.77777777777f,
452           1.06666666666f, 1.03225806452f, 1.00001525902f };
453         @LOC("F") public static final float table_ab3_d[] =
454         { 0.0f,           0.50000000000f, 0.50000000000f, 0.25000000000f, 0.50000000000f,
455           0.12500000000f, 0.06250000000f, 0.00003051758f };
456
457         // subbands 23-... in tables 3-B.2a and 2b:
458         @LOC("F") public static final int table_ab4_codelength[] = { 0, 5, 7, 16 };
459         @LOC("F") public static final float table_ab4_factor[] = { 0.0f, 1.0f/2.0f, 1.0f/4.0f, 1.0f/32768.0f };
460         @LOC("F") public static final float table_ab4_c[] = { 0.0f, 1.33333333333f, 1.60000000000f, 1.00001525902f };
461         @LOC("F") public static final float table_ab4_d[] = { 0.0f, 0.50000000000f, 0.50000000000f, 0.00003051758f };
462
463         // subbands in tables 3-B.2c and 2d:
464         @LOC("F") public static final int table_cd_codelength[] =
465         { 0, 5, 7, 10, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
466         @LOC("F") public static final float table_cd_groupingtables[][] =
467         { null, grouping_5bits, grouping_7bits, grouping_10bits, null, null, null, null, null, null, null, null, null, null, null, null };
468         @LOC("F") public static final float table_cd_factor[] =
469         { 0.0f, 1.0f/2.0f, 1.0f/4.0f, 1.0f/8.0f, 1.0f/8.0f, 1.0f/16.0f, 1.0f/32.0f, 1.0f/64.0f,
470           1.0f/128.0f, 1.0f/256.0f, 1.0f/512.0f, 1.0f/1024.0f, 1.0f/2048.0f, 1.0f/4096.0f,
471           1.0f/8192.0f, 1.0f/16384.0f };
472         @LOC("F") public static final float table_cd_c[] =
473         { 0.0f,           1.33333333333f, 1.60000000000f, 1.77777777777f, 1.06666666666f,
474           1.03225806452f, 1.01587301587f, 1.00787401575f, 1.00392156863f, 1.00195694716f,
475           1.00097751711f, 1.00048851979f, 1.00024420024f, 1.00012208522f, 1.00006103888f,
476           1.00003051851f };
477         @LOC("F") public static final float table_cd_d[] =
478         { 0.0f,           0.50000000000f, 0.50000000000f, 0.50000000000f, 0.12500000000f,
479           0.06250000000f, 0.03125000000f, 0.01562500000f, 0.00781250000f, 0.00390625000f,
480           0.00195312500f, 0.00097656250f, 0.00048828125f, 0.00024414063f, 0.00012207031f,
481           0.00006103516f };
482
483
484
485           @LOC("F") protected int                       subbandnumber;
486           @LOC("F") protected int                               allocation;
487           @LOC("ARR") protected int                             scfsi;
488           @LOC("L") protected float                     scalefactor1;
489           @LOC("L") protected float                     scalefactor2;
490           @LOC("L") protected float                     scalefactor3;
491           @LOC("ARR") protected int[]                   codelength = {0}; 
492           @LOC("ARR") protected float                       groupingtable[][] = new float[2][]; 
493           //protected float[][]                 groupingtable = {{0},{0}} ;
494           @LOC("ARR") protected float[]                 factor = {0.0f};
495           @LOC("GN") protected int                              groupnumber;
496           @LOC("SN") protected int                      samplenumber;
497           @LOC("L") protected float[]                   samples = new float[3];
498           @LOC("ARR") protected float[]                 c = {0.0f};
499           @LOC("ARR") protected float[]                 d = {0.0f};
500           /**
501            * Constructor
502            */
503           public SubbandLayer2(@LOC("IN") int subbandnumber)
504           {     
505                 this.subbandnumber = subbandnumber;
506             groupnumber = samplenumber = 0;  
507           }
508           
509           
510           /**
511            *
512            */
513           @RETURNLOC("OUT") 
514           protected int get_allocationlength (@LOC("IN") Header header)
515           {
516                 if (header.version() == Header.MPEG1)
517                 {
518                   @LOC("SH") int channel_bitrate = header.bitrate_index();
519
520                   // calculate bitrate per channel:
521                   if (header.mode() != Header.SINGLE_CHANNEL)
522                          if (channel_bitrate == 4)
523                                 channel_bitrate = 1;
524                          else
525                                 channel_bitrate -= 4;
526
527                   if (channel_bitrate == 1 || channel_bitrate == 2)
528                          // table 3-B.2c or 3-B.2d
529                          if (subbandnumber <= 1)
530                                 return 4;
531                          else
532                                 return 3;
533                   else
534                          // tables 3-B.2a or 3-B.2b
535                          if (subbandnumber <= 10)
536                                 return 4;
537                          else if (subbandnumber <= 22)
538                                 return 3;
539                          else
540                                 return 2;
541             }
542                 else
543                 { // MPEG-2 LSF -- Jeff
544
545                  // table B.1 of ISO/IEC 13818-3
546              if (subbandnumber <= 3)
547                         return 4;
548              else if (subbandnumber <= 10)
549                         return 3;
550              else
551                         return 2;
552             }
553           }
554           
555           /**
556            *
557            */
558             protected void prepare_sample_reading(@LOC("IN") Header header, @LOC("IN") int allocation,
559                                                   //float[][] groupingtable,
560                                                   @LOC("IN") int channel,
561                                                   @LOC("V") float[] factor, @LOC("V") int[] codelength,
562                                                   @LOC("V") float[] c, @LOC("V") float[] d)
563            {
564                         @LOC("SH")int channel_bitrate = header.bitrate_index();
565                         // calculate bitrate per channel:
566                         if (header.mode() != Header.SINGLE_CHANNEL)
567                                 if (channel_bitrate == 4)
568                                         channel_bitrate = 1;
569                                 else
570                                         channel_bitrate -= 4;
571                         
572                          if (channel_bitrate == 1 || channel_bitrate == 2)
573                          {
574                                  // table 3-B.2c or 3-B.2d
575                                  groupingtable[channel] = table_cd_groupingtables[allocation];
576                                  factor[0] = table_cd_factor[allocation];
577                                  codelength[0] = table_cd_codelength[allocation];
578                                  c[0] = table_cd_c[allocation];
579                                  d[0] = table_cd_d[allocation];
580                          }
581                          else
582                          {
583                                  // tables 3-B.2a or 3-B.2b
584                                  if (subbandnumber <= 2)
585                                  {
586                                         groupingtable[channel] = table_ab1_groupingtables[allocation];
587                                         factor[0] = table_ab1_factor[allocation];
588                                         codelength[0] = table_ab1_codelength[allocation];
589                                 c[0] = table_ab1_c[allocation];
590                                 d[0] = table_ab1_d[allocation];
591                              }
592                                  else
593                                  {
594                                 groupingtable[channel] = table_ab234_groupingtables[allocation];
595                                         if (subbandnumber <= 10)
596                                         {
597                                                 factor[0] = table_ab2_factor[allocation];
598                                                 codelength[0] = table_ab2_codelength[allocation];
599                                                 c[0] = table_ab2_c[allocation];
600                                                 d[0] = table_ab2_d[allocation];
601                                 }
602                                 else if (subbandnumber <= 22)
603                                 {
604                                                 factor[0] = table_ab3_factor[allocation];
605                                                 codelength[0] = table_ab3_codelength[allocation];
606                                                 c[0] = table_ab3_c[allocation];
607                                                 d[0] = table_ab3_d[allocation];
608                                 }
609                                         else
610                                 {
611                                                 factor[0] = table_ab4_factor[allocation];
612                                                 codelength[0] = table_ab4_codelength[allocation];
613                                                 c[0] = table_ab4_c[allocation];
614                                                 d[0] = table_ab4_d[allocation];
615                                 }
616                                  }
617                          }   
618            }
619                                          
620           
621           /**
622            *
623            */
624           @LATTICE("OUT<V,V<SH,SH<IN,SH*,THISLOC=OUT,GLOBALLOC=IN")
625           public void read_allocation(@LOC("IN") Bitstream stream, @LOC("IN") Header header, @LOC("IN") Crc16 crc)
626           {
627                  @LOC("V") int length = get_allocationlength(header);
628                  allocation = stream.get_bits(length);
629                  if (crc != null) 
630                          crc.add_bits(allocation, length);  
631           }
632           
633           /**
634            *
635            */
636           public void read_scalefactor_selection (@LOC("IN") Bitstream stream, @LOC("IN") Crc16 crc)
637           {
638                 if (allocation != 0)
639                 {
640                 scfsi = stream.get_bits(2);
641                 if (crc != null) crc.add_bits(scfsi, 2);
642             }
643           }
644
645           /**
646            *
647            */
648           public void read_scalefactor (@LOC("IN") Bitstream stream, @LOC("IN") Header header)
649           {
650                 if (allocation != 0)
651                 {
652                    switch (scfsi)
653                    {
654                    case 0:
655                          scalefactor1 = scalefactors[stream.get_bits(6)];
656                          scalefactor2 = scalefactors[stream.get_bits(6)];
657                          scalefactor3 = scalefactors[stream.get_bits(6)];
658                          break;
659                         case 1:
660                          scalefactor1 = scalefactor2 = scalefactors[stream.get_bits(6)];
661                          scalefactor3 = scalefactors[stream.get_bits(6)];
662                          break;
663                    case 2:
664                          scalefactor1 = scalefactor2 = scalefactor3 = scalefactors[stream.get_bits(6)];
665                          break;
666                    case 3:
667                          scalefactor1 = scalefactors[stream.get_bits(6)];
668                          scalefactor2 = scalefactor3 = scalefactors[stream.get_bits(6)];
669                          break;
670                 }
671                 prepare_sample_reading(header, allocation, 0,
672                                     factor, codelength, c, d);
673           }
674           }
675           
676           /**
677            *
678            */
679           @LATTICE("OUT<V,V<SH,SH<TEMP,TEMP<TMP,TMP<THIS,THIS<IN,SH*,TEMP*,TMP*,THISLOC=THIS,GLOBALLOC=IN")
680           @RETURNLOC("V")
681           public boolean read_sampledata (@LOC("IN") Bitstream stream)
682           {
683                 if (allocation != 0)
684                  if (groupingtable[0] != null)
685                  {
686                         @LOC("SH") int samplecode = stream.get_bits(codelength[0]);
687                         // create requantized samples:
688                         samplecode += samplecode << 1;
689                         //float[] target = samples;  //subbed in variable to reduce areas
690                         //float[] source = groupingtable[0];  //subbed in variable to reduce areas
691                   /*
692                   int tmp = 0;
693                         int temp = 0;
694                         target[tmp++] = source[samplecode + temp];
695                         temp++;
696                         target[tmp++] = source[samplecode + temp];
697                         temp++;
698                         target[tmp] = source[samplecode + temp];
699                         */
700                         //Bugfix:
701                         @LOC("TMP") int tmp = 0;
702                         @LOC("TEMP") int temp = samplecode;
703                         
704                         if(temp > source.length - 3) temp = source.length - 3;
705                         
706                         samples[tmp] = groupingtable[0][temp];
707                         temp++;tmp++;
708                         samples[tmp] = groupingtable[0][temp];
709                         temp++;tmp++;
710                         samples[tmp] = groupingtable[0][temp];
711                         
712                         // memcpy (samples, groupingtable + samplecode, 3 * sizeof (real));
713                  }
714                  else
715                  {
716                         samples[0] = (float) ((stream.get_bits(codelength[0])) * factor[0] - 1.0);
717                         samples[1] = (float) ((stream.get_bits(codelength[0])) * factor[0] - 1.0);
718                         samples[2] = (float) ((stream.get_bits(codelength[0])) * factor[0] - 1.0);
719                  }
720
721                 samplenumber = 0;
722                   if (++groupnumber == 12)
723                          return true;
724                   else
725                          return false;
726           }
727
728           /**
729            *
730            */
731           public boolean put_next_sample(@LOC("IN") int channels, @LOC("IN") SynthesisFilter filter1, @LOC("IN") SynthesisFilter filter2)
732           {
733             if ((allocation != 0) && (channels != OutputChannels.RIGHT_CHANNEL))
734             {
735                  @LOC("SH") float sample = samples[samplenumber];
736           
737                  if (groupingtable[0] == null)
738                         sample = (sample + d[0]) * c[0];
739                  if (groupnumber <= 4)
740                         sample *= scalefactor1;
741                  else if (groupnumber <= 8)
742                         sample *= scalefactor2;
743                  else
744                         sample *= scalefactor3;
745                  filter1.input_sample(sample, subbandnumber);
746             }
747           
748             if (++samplenumber == 3)
749                  return true;
750             else
751                  return false;
752           }
753         };
754         
755          /**
756           * Class for layer II subbands in joint stereo mode.
757           */
758         @LATTICE("L<H,L<ARR,ARR<F,SN<F,GN<F,F<H,SN*,GN*")
759         @METHODDEFAULT("OUT<V,V<SH,SH<THIS,THIS<IN,SH*,THISLOC=THIS,GLOBALLOC=IN")
760         static class SubbandLayer2IntensityStereo extends SubbandLayer2
761         {
762           @LOC("ARR") protected int              channel2_scfsi;
763           @LOC("L") protected float      channel2_scalefactor1; 
764           @LOC("L") protected float        channel2_scalefactor2;
765           @LOC("L") protected float        channel2_scalefactor3;
766
767           /**
768            * Constructor
769            */
770           public SubbandLayer2IntensityStereo (@LOC("IN") int subbandnumber)
771           {
772                 super(subbandnumber);
773           }
774
775           /**
776            *
777            */
778           public void read_allocation(@LOC("IN") Bitstream stream, @LOC("IN") Header header, @LOC("IN") Crc16 crc)
779           {
780             super.read_allocation (stream, header, crc);
781           }
782           
783           /**
784            *
785            */
786           public void read_scalefactor_selection(@LOC("IN") Bitstream stream, @LOC("IN") Crc16 crc)
787           {
788             if (allocation != 0)
789             {
790                  scfsi = stream.get_bits(2);
791                  channel2_scfsi = stream.get_bits(2);
792                  if (crc != null)
793                  {
794                         crc.add_bits(scfsi, 2);
795                         crc.add_bits(channel2_scfsi, 2);
796                  }
797             }  
798           }
799           
800           /**
801            *
802            */
803             public void read_scalefactor(@LOC("IN") Bitstream stream, @LOC("IN") Header header)
804           {
805             if (allocation != 0)
806             {
807                  super.read_scalefactor(stream, header);
808                  switch (channel2_scfsi)
809                  {
810                         case 0:
811                         channel2_scalefactor1 = scalefactors[stream.get_bits(6)];
812                         channel2_scalefactor2 = scalefactors[stream.get_bits(6)];
813                         channel2_scalefactor3 = scalefactors[stream.get_bits(6)];
814                         break;
815           
816                         case 1:
817                         channel2_scalefactor1 = channel2_scalefactor2 = scalefactors[stream.get_bits (6)];
818                         channel2_scalefactor3 = scalefactors[stream.get_bits(6)];
819                         break;
820           
821                         case 2:
822                         channel2_scalefactor1 = channel2_scalefactor2 =
823                         channel2_scalefactor3 = scalefactors[stream.get_bits(6)];
824                         break;
825           
826                         case 3:
827                         channel2_scalefactor1 = scalefactors[stream.get_bits(6)];
828                         channel2_scalefactor2 = channel2_scalefactor3 = scalefactors[stream.get_bits (6)];
829                         break;
830                  }
831             }
832           
833           }
834           
835           /**
836            *
837            */
838           @RETURNLOC("V")
839           public boolean read_sampledata(@LOC("IN") Bitstream stream)
840           {
841                  return super.read_sampledata (stream);
842           }
843           
844           /**
845            *
846            */
847           @LATTICE("S2<S1,S1<THIS,THIS<GLOBAL,S1*,THISLOC=THIS,GLOBALLOC=GLOBAL")
848           @RETURNLOC("S2")
849           public boolean put_next_sample(@LOC("IN") int channels, @LOC("IN") SynthesisFilter filter1, @LOC("IN") SynthesisFilter filter2)
850           {
851                   if (allocation != 0)
852                   {
853                         @LOC("S1") float sample = samples[samplenumber];
854                 
855                          if (groupingtable[0] == null)
856                                 sample = (sample + d[0]) * c[0];
857                        if (channels == OutputChannels.BOTH_CHANNELS)
858                            {
859                               @LOC("S2") float sample2 = sample;
860                               if (groupnumber <= 4)
861                               {
862                                         sample *= scalefactor1;
863                                         sample2 *= channel2_scalefactor1;
864                                   }
865                                   else if (groupnumber <= 8)
866                                   {
867                                         sample *= scalefactor2;
868                                         sample2 *= channel2_scalefactor2;
869                                   }
870                                   else
871                                   {
872                                         sample *= scalefactor3;
873                                         sample2 *= channel2_scalefactor3;
874                                   }
875                                   filter1.input_sample(sample, subbandnumber);
876                               filter2.input_sample(sample2, subbandnumber);
877                             }
878                                 else if (channels == OutputChannels.LEFT_CHANNEL)
879                                 {
880                                         if (groupnumber <= 4)
881                                                 sample *= scalefactor1;
882                                 else if (groupnumber <= 8)
883                                                 sample *= scalefactor2;
884                                         else
885                                                 sample *= scalefactor3;
886                                         filter1.input_sample(sample, subbandnumber);
887                                  }
888                                  else
889                                  {
890                                         if (groupnumber <= 4)
891                                         sample *= channel2_scalefactor1;
892                                         else if (groupnumber <= 8)
893                                                 sample *= channel2_scalefactor2;
894                                         else
895                                                 sample *= channel2_scalefactor3;
896                                         filter1.input_sample(sample, subbandnumber);
897                                 }
898                         }
899                 
900                   if (++samplenumber == 3)
901                          return true;
902                   else
903                  return false;
904           }
905         };
906
907          /**
908           * Class for layer II subbands in stereo mode.
909           */
910         @LATTICE("L<H,L<ARR,ARR<F,SN<F,GN<F,F<H,SN*,GN*")
911         @METHODDEFAULT("OUT<V,V<SH,SH<THIS,THIS<IN,SH*,THISLOC=THIS,GLOBALLOC=IN")
912         static class SubbandLayer2Stereo extends SubbandLayer2
913         {
914           @LOC("F")protected int                        channel2_allocation;
915           @LOC("ARR") protected int             channel2_scfsi;
916           @LOC("L") protected float             channel2_scalefactor1;
917           @LOC("L") protected float channel2_scalefactor2;
918           @LOC("L") protected float channel2_scalefactor3;
919           //protected boolean           channel2_grouping;  ???? Never used!
920           @LOC("ARR") protected int[]           channel2_codelength = {0};
921           //protected float[][]         channel2_groupingtable = {{0},{0}};
922           @LOC("ARR") protected float[]         channel2_factor = {0.0f};
923           @LOC("L") protected float[]   channel2_samples;
924           @LOC("ARR") protected float[]         channel2_c = {0.0f};
925           @LOC("ARR") protected float[]         channel2_d = {0.0f};
926           
927           /**
928            * Constructor
929            */
930           public SubbandLayer2Stereo(@LOC("IN") int subbandnumber)
931           {
932                 super(subbandnumber);
933                 channel2_samples = new float[3];
934           }
935           
936           /**
937            *
938            */
939           @LATTICE("OUT<SH,SH<THIS,THIS<V,V<IN,SH*,THISLOC=THIS,GLOBALLOC=IN")
940           public void read_allocation(@LOC("IN") Bitstream stream, @LOC("IN") Header header, @LOC("IN") Crc16 crc)
941           {
942             @LOC("V") int length = get_allocationlength(header);
943             allocation = stream.get_bits(length);
944             channel2_allocation = stream.get_bits(length);
945             if (crc != null)
946             {
947                  crc.add_bits(allocation, length);
948                  crc.add_bits(channel2_allocation, length);
949             }
950           }
951
952           /**
953            *
954            */
955           public void read_scalefactor_selection(@LOC("IN") Bitstream stream, @LOC("IN") Crc16 crc)
956           {
957                   if (allocation != 0)
958                   {
959                          scfsi = stream.get_bits(2);
960                          if (crc != null)
961                                 crc.add_bits(scfsi, 2);
962                   }
963                   if (channel2_allocation != 0)
964                   {
965                          channel2_scfsi = stream.get_bits(2);
966                          if (crc != null)
967                                 crc.add_bits(channel2_scfsi, 2);
968                   }
969           }
970
971           /**
972            *
973            */
974             public void read_scalefactor(@LOC("IN") Bitstream stream, @LOC("IN") Header header)
975           {
976             super.read_scalefactor(stream, header);
977             if (channel2_allocation != 0)
978             {
979                  switch (channel2_scfsi)
980                  {
981                         case 0:
982                    channel2_scalefactor1 = scalefactors[stream.get_bits(6)];
983                            channel2_scalefactor2 = scalefactors[stream.get_bits(6)];
984                        channel2_scalefactor3 = scalefactors[stream.get_bits(6)];
985                        break;
986           
987                         case 1:
988                            channel2_scalefactor1 = channel2_scalefactor2 =
989                                                                       scalefactors[stream.get_bits(6)];
990                        channel2_scalefactor3 = scalefactors[stream.get_bits(6)];
991                        break;
992           
993                         case 2:
994                            channel2_scalefactor1 = channel2_scalefactor2 =
995                        channel2_scalefactor3 = scalefactors[stream.get_bits(6)];
996                        break;
997           
998                         case 3:
999                            channel2_scalefactor1 = scalefactors[stream.get_bits(6)];
1000                        channel2_scalefactor2 = channel2_scalefactor3 =
1001                                                                            scalefactors[stream.get_bits(6)];
1002                    break;
1003                  }
1004                  prepare_sample_reading(header, channel2_allocation, 1,
1005                                      channel2_factor, channel2_codelength, channel2_c,
1006                                      channel2_d);
1007            }
1008           }
1009
1010           /**
1011            *
1012            */
1013           @LATTICE("OUT<V,V<SH,SH<TEMP,TEMP<TMP,TMP<THIS,THIS<IN,SH*,TEMP*,TMP*,THISLOC=THIS,GLOBALLOC=IN")
1014           @RETURNLOC("V")
1015           public boolean read_sampledata (@LOC("IN") Bitstream stream)
1016           {
1017             @LOC("V")boolean returnvalue = super.read_sampledata(stream);
1018           
1019             if (channel2_allocation != 0)
1020                  if (groupingtable[1] != null)
1021                  {
1022                         @LOC("SH") int samplecode = stream.get_bits(channel2_codelength[0]);
1023                         // create requantized samples:
1024                         samplecode += samplecode << 1;
1025                 /*
1026                         float[] target = channel2_samples;
1027                         float[] source = channel2_groupingtable[0];
1028                         int tmp = 0;
1029                         int temp = 0;
1030                         target[tmp++] = source[samplecode + temp];
1031                         temp++;
1032                         target[tmp++] = source[samplecode + temp];
1033                         temp++;
1034                         target[tmp] = source[samplecode + temp];
1035                         // memcpy (channel2_samples, channel2_groupingtable + samplecode, 3 * sizeof (real));
1036                 */
1037                         @LOC("V") float[] target = channel2_samples;
1038                         @LOC("V") float[] source = groupingtable[1];
1039                         @LOC("TMP") int tmp = 0;
1040                         @LOC("TEMP") int temp = samplecode;
1041                 target[tmp] = source[temp];
1042                         temp++;tmp++;
1043                 target[tmp] = source[temp];
1044                         temp++;tmp++;
1045                 target[tmp] = source[temp];
1046                 
1047               } 
1048                   else 
1049                   {
1050                         channel2_samples[0] = (float) ((stream.get_bits(channel2_codelength[0])) *
1051                                                                          channel2_factor[0] - 1.0);
1052                         channel2_samples[1] = (float) ((stream.get_bits(channel2_codelength[0])) *
1053                                                                          channel2_factor[0] - 1.0);
1054                         channel2_samples[2] = (float) ((stream.get_bits(channel2_codelength[0])) *
1055                                       channel2_factor[0] - 1.0);
1056                  }
1057              return returnvalue;
1058           }
1059
1060           /**
1061            *
1062            */
1063           @RETURNLOC("V")
1064           public boolean put_next_sample(@LOC("IN") int channels, @LOC("IN") SynthesisFilter filter1, @LOC("IN") SynthesisFilter filter2)
1065           {
1066             @LOC("V") boolean returnvalue = super.put_next_sample(channels, filter1, filter2);
1067             if ((channel2_allocation != 0) && (channels != OutputChannels.LEFT_CHANNEL))
1068             {
1069                 @LOC("SH") float sample = channel2_samples[samplenumber - 1];
1070           
1071                  if (groupingtable[1] == null)
1072                         sample = (sample + channel2_d[0]) * channel2_c[0];
1073           
1074                  if (groupnumber <= 4)
1075                         sample *= channel2_scalefactor1;
1076                  else if (groupnumber <= 8)
1077                         sample *= channel2_scalefactor2;
1078                  else
1079                         sample *= channel2_scalefactor3;
1080                  if (channels == OutputChannels.BOTH_CHANNELS)
1081                         filter2.input_sample(sample, subbandnumber);
1082                  else
1083                         filter1.input_sample(sample, subbandnumber);
1084             }
1085                 return returnvalue;
1086           }
1087         }
1088 }