Merge commit 'f023d57d355ff3b917f1aad9b03db5c293ec4244'
[ffmpeg.git] / libavcodec / g723_1.h
1 /*
2  * G.723.1 common header and data tables
3  * Copyright (c) 2006 Benjamin Larsson
4  * Copyright (c) 2010 Mohamed Naufal Basheer
5  *
6  * This file is part of FFmpeg.
7  *
8  * FFmpeg is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2.1 of the License, or (at your option) any later version.
12  *
13  * FFmpeg is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with FFmpeg; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21  */
22
23 /**
24  * @file
25  * G.723.1 types, functions and data tables
26  */
27
28 #ifndef AVCODEC_G723_1_H
29 #define AVCODEC_G723_1_H
30
31 #include <stdint.h>
32
33 #define SUBFRAMES       4
34 #define SUBFRAME_LEN    60
35 #define FRAME_LEN       (SUBFRAME_LEN << 2)
36 #define HALF_FRAME_LEN  (FRAME_LEN / 2)
37 #define LPC_FRAME       (HALF_FRAME_LEN + SUBFRAME_LEN)
38 #define LPC_ORDER       10
39 #define LSP_BANDS       3
40 #define LSP_CB_SIZE     256
41 #define PITCH_MIN       18
42 #define PITCH_MAX       (PITCH_MIN + 127)
43 #define PITCH_ORDER     5
44 #define GRID_SIZE       2
45 #define PULSE_MAX       6
46 #define GAIN_LEVELS     24
47 #define COS_TBL_SIZE    512
48
49 /**
50  * Bitexact implementation of 2ab scaled by 1/2^16.
51  *
52  * @param a 32 bit multiplicand
53  * @param b 16 bit multiplier
54  */
55 #define MULL2(a, b) \
56         ((((a) >> 16) * (b) << 1) + (((a) & 0xffff) * (b) >> 15))
57
58 /**
59  * G723.1 frame types
60  */
61 enum FrameType {
62     ACTIVE_FRAME,        ///< Active speech
63     SID_FRAME,           ///< Silence Insertion Descriptor frame
64     UNTRANSMITTED_FRAME
65 };
66
67 /**
68  * G723.1 rate values
69  */
70 enum Rate {
71     RATE_6300,
72     RATE_5300
73 };
74
75 /**
76  * G723.1 unpacked data subframe
77  */
78 typedef struct G723_1_Subframe {
79     int ad_cb_lag;     ///< adaptive codebook lag
80     int ad_cb_gain;
81     int dirac_train;
82     int pulse_sign;
83     int grid_index;
84     int amp_index;
85     int pulse_pos;
86 } G723_1_Subframe;
87
88 /**
89  * Pitch postfilter parameters
90  */
91 typedef struct PPFParam {
92     int     index;    ///< postfilter backward/forward lag
93     int16_t opt_gain; ///< optimal gain
94     int16_t sc_gain;  ///< scaling gain
95 } PPFParam;
96
97 /**
98  * Harmonic filter parameters
99  */
100 typedef struct HFParam {
101     int index;
102     int gain;
103 } HFParam;
104
105 /**
106  * Optimized fixed codebook excitation parameters
107  */
108 typedef struct FCBParam {
109     int min_err;
110     int amp_index;
111     int grid_index;
112     int dirac_train;
113     int pulse_pos[PULSE_MAX];
114     int pulse_sign[PULSE_MAX];
115 } FCBParam;
116
117 typedef struct g723_1_context {
118     AVClass *class;
119
120     G723_1_Subframe subframe[4];
121     enum FrameType cur_frame_type;
122     enum FrameType past_frame_type;
123     enum Rate cur_rate;
124     uint8_t lsp_index[LSP_BANDS];
125     int pitch_lag[2];
126     int erased_frames;
127
128     int16_t prev_lsp[LPC_ORDER];
129     int16_t sid_lsp[LPC_ORDER];
130     int16_t prev_excitation[PITCH_MAX];
131     int16_t excitation[PITCH_MAX + FRAME_LEN + 4];
132     int16_t synth_mem[LPC_ORDER];
133     int16_t fir_mem[LPC_ORDER];
134     int     iir_mem[LPC_ORDER];
135
136     int random_seed;
137     int cng_random_seed;
138     int interp_index;
139     int interp_gain;
140     int sid_gain;
141     int cur_gain;
142     int reflection_coef;
143     int pf_gain;                 ///< formant postfilter
144                                  ///< gain scaling unit memory
145     int postfilter;
146
147     int16_t audio[FRAME_LEN + LPC_ORDER + PITCH_MAX + 4];
148
149     /* encoder */
150     int16_t prev_data[HALF_FRAME_LEN];
151     int16_t prev_weight_sig[PITCH_MAX];
152
153     int16_t hpf_fir_mem;                   ///< highpass filter fir
154     int     hpf_iir_mem;                   ///< and iir memories
155     int16_t perf_fir_mem[LPC_ORDER];       ///< perceptual filter fir
156     int16_t perf_iir_mem[LPC_ORDER];       ///< and iir memories
157
158     int16_t harmonic_mem[PITCH_MAX];
159 } G723_1_Context;
160
161
162 /**
163  * Scale vector contents based on the largest of their absolutes.
164  */
165 int ff_g723_1_scale_vector(int16_t *dst, const int16_t *vector, int length);
166
167 /**
168  * Calculate the number of left-shifts required for normalizing the input.
169  *
170  * @param num   input number
171  * @param width width of the input, 16 bits(0) / 32 bits(1)
172  */
173 int ff_g723_1_normalize_bits(int num, int width);
174
175 int ff_g723_1_dot_product(const int16_t *a, const int16_t *b, int length);
176
177 /**
178  * Get delayed contribution from the previous excitation vector.
179  */
180 void ff_g723_1_get_residual(int16_t *residual, int16_t *prev_excitation,
181                             int lag);
182
183 /**
184  * Generate a train of dirac functions with period as pitch lag.
185  */
186 void ff_g723_1_gen_dirac_train(int16_t *buf, int pitch_lag);
187
188
189 /**
190  * Generate adaptive codebook excitation.
191  */
192 void ff_g723_1_gen_acb_excitation(int16_t *vector, int16_t *prev_excitation,
193                                   int pitch_lag, G723_1_Subframe *subfrm,
194                                   enum Rate cur_rate);
195 /**
196  * Quantize LSP frequencies by interpolation and convert them to
197  * the corresponding LPC coefficients.
198  *
199  * @param lpc      buffer for LPC coefficients
200  * @param cur_lsp  the current LSP vector
201  * @param prev_lsp the previous LSP vector
202  */
203 void ff_g723_1_lsp_interpolate(int16_t *lpc, int16_t *cur_lsp,
204                                int16_t *prev_lsp);
205
206 /**
207  * Perform inverse quantization of LSP frequencies.
208  *
209  * @param cur_lsp    the current LSP vector
210  * @param prev_lsp   the previous LSP vector
211  * @param lsp_index  VQ indices
212  * @param bad_frame  bad frame flag
213  */
214 void ff_g723_1_inverse_quant(int16_t *cur_lsp, int16_t *prev_lsp,
215                              uint8_t *lsp_index, int bad_frame);
216
217 static const uint8_t frame_size[4] = { 24, 20, 4, 1 };
218
219 /**
220  * Postfilter gain weighting factors scaled by 2^15
221  */
222 static const int16_t ppf_gain_weight[2] = {0x1800, 0x2000};
223
224 /**
225  * LSP DC component
226  */
227 static const int16_t dc_lsp[LPC_ORDER] = {
228     0x0c3b,
229     0x1271,
230     0x1e0a,
231     0x2a36,
232     0x3630,
233     0x406f,
234     0x4d28,
235     0x56f4,
236     0x638c,
237     0x6c46
238 };
239
240 /* Cosine table scaled by 2^14 */
241 static const int16_t cos_tab[COS_TBL_SIZE + 1] = {
242     16384,  16383,  16379,  16373,  16364,  16353,  16340,  16324,
243     16305,  16284,  16261,  16235,  16207,  16176,  16143,  16107,
244     16069,  16029,  15986,  15941,  15893,  15843,  15791,  15736,
245     15679,  15619,  15557,  15493,  15426,  15357,  15286,  15213,
246     15137,  15059,  14978,  14896,  14811,  14724,  14635,  14543,
247     14449,  14354,  14256,  14155,  14053,  13949,  13842,  13733,
248     13623,  13510,  13395,  13279,  13160,  13039,  12916,  12792,
249     12665,  12537,  12406,  12274,  12140,  12004,  11866,  11727,
250     11585,  11442,  11297,  11151,  11003,  10853,  10702,  10549,
251     10394,  10238,  10080,   9921,   9760,   9598,   9434,   9269,
252      9102,   8935,   8765,   8595,   8423,   8250,   8076,   7900,
253      7723,   7545,   7366,   7186,   7005,   6823,   6639,   6455,
254      6270,   6084,   5897,   5708,   5520,   5330,   5139,   4948,
255      4756,   4563,   4370,   4176,   3981,   3786,   3590,   3393,
256      3196,   2999,   2801,   2603,   2404,   2205,   2006,   1806,
257      1606,   1406,   1205,   1005,    804,    603,    402,    201,
258         0,   -201,   -402,   -603,   -804,  -1005,  -1205,  -1406,
259     -1606,  -1806,  -2006,  -2205,  -2404,  -2603,  -2801,  -2999,
260     -3196,  -3393,  -3590,  -3786,  -3981,  -4176,  -4370,  -4563,
261     -4756,  -4948,  -5139,  -5330,  -5520,  -5708,  -5897,  -6084,
262     -6270,  -6455,  -6639,  -6823,  -7005,  -7186,  -7366,  -7545,
263     -7723,  -7900,  -8076,  -8250,  -8423,  -8595,  -8765,  -8935,
264     -9102,  -9269,  -9434,  -9598,  -9760,  -9921, -10080, -10238,
265    -10394, -10549, -10702, -10853, -11003, -11151, -11297, -11442,
266    -11585, -11727, -11866, -12004, -12140, -12274, -12406, -12537,
267    -12665, -12792, -12916, -13039, -13160, -13279, -13395, -13510,
268    -13623, -13733, -13842, -13949, -14053, -14155, -14256, -14354,
269    -14449, -14543, -14635, -14724, -14811, -14896, -14978, -15059,
270    -15137, -15213, -15286, -15357, -15426, -15493, -15557, -15619,
271    -15679, -15736, -15791, -15843, -15893, -15941, -15986, -16029,
272    -16069, -16107, -16143, -16176, -16207, -16235, -16261, -16284,
273    -16305, -16324, -16340, -16353, -16364, -16373, -16379, -16383,
274    -16384, -16383, -16379, -16373, -16364, -16353, -16340, -16324,
275    -16305, -16284, -16261, -16235, -16207, -16176, -16143, -16107,
276    -16069, -16029, -15986, -15941, -15893, -15843, -15791, -15736,
277    -15679, -15619, -15557, -15493, -15426, -15357, -15286, -15213,
278    -15137, -15059, -14978, -14896, -14811, -14724, -14635, -14543,
279    -14449, -14354, -14256, -14155, -14053, -13949, -13842, -13733,
280    -13623, -13510, -13395, -13279, -13160, -13039, -12916, -12792,
281    -12665, -12537, -12406, -12274, -12140, -12004, -11866, -11727,
282    -11585, -11442, -11297, -11151, -11003, -10853, -10702, -10549,
283    -10394, -10238, -10080,  -9921,  -9760,  -9598,  -9434,  -9269,
284     -9102,  -8935,  -8765,  -8595,  -8423,  -8250,  -8076,  -7900,
285     -7723,  -7545,  -7366,  -7186,  -7005,  -6823,  -6639,  -6455,
286     -6270,  -6084,  -5897,  -5708,  -5520,  -5330,  -5139,  -4948,
287     -4756,  -4563,  -4370,  -4176,  -3981,  -3786,  -3590,  -3393,
288     -3196,  -2999,  -2801,  -2603,  -2404,  -2205,  -2006,  -1806,
289     -1606,  -1406,  -1205,  -1005,   -804,   -603,   -402,   -201,
290         0,    201,    402,    603,    804,   1005,   1205,   1406,
291      1606,   1806,   2006,   2205,   2404,   2603,   2801,   2999,
292      3196,   3393,   3590,   3786,   3981,   4176,   4370,   4563,
293      4756,   4948,   5139,   5330,   5520,   5708,   5897,   6084,
294      6270,   6455,   6639,   6823,   7005,   7186,   7366,   7545,
295      7723,   7900,   8076,   8250,   8423,   8595,   8765,   8935,
296      9102,   9269,   9434,   9598,   9760,   9921,  10080,  10238,
297     10394,  10549,  10702,  10853,  11003,  11151,  11297,  11442,
298     11585,  11727,  11866,  12004,  12140,  12274,  12406,  12537,
299     12665,  12792,  12916,  13039,  13160,  13279,  13395,  13510,
300     13623,  13733,  13842,  13949,  14053,  14155,  14256,  14354,
301     14449,  14543,  14635,  14724,  14811,  14896,  14978,  15059,
302     15137,  15213,  15286,  15357,  15426,  15493,  15557,  15619,
303     15679,  15736,  15791,  15843,  15893,  15941,  15986,  16029,
304     16069,  16107,  16143,  16176,  16207,  16235,  16261,  16284,
305     16305,  16324,  16340,  16353,  16364,  16373,  16379,  16383,
306     16384
307 };
308
309 /**
310  *  LSP VQ tables
311  */
312 static const int16_t lsp_band0[LSP_CB_SIZE][3] = {
313     {    0,      0,      0}, { -270,  -1372,  -1032}, { -541,  -1650,  -1382},
314     { -723,  -2011,  -2213}, { -941,  -1122,  -1942}, { -780,  -1145,  -2454},
315     { -884,  -1309,  -1373}, {-1051,  -1523,  -1766}, {-1083,  -1622,  -2300},
316     { -777,  -1377,  -2147}, { -935,  -1467,  -2763}, { -802,  -1327,  -3471},
317     { -935,  -1959,  -3999}, { -240,    -89,    222}, { -661,   -257,   -160},
318     { -994,   -466,   -419}, { -188,   -164,   -278}, { -342,   -512,   -415},
319     { -607,   -511,   -797}, {   16,     19,   -716}, {  374,    425,   -972},
320     { -346,    245,   -282}, { -265,    506,   -754}, { -620,   -147,   1955},
321     { -742,   -860,   2597}, { -150,   -352,   2704}, {  305,    880,   1954},
322     {  123,    731,   2766}, { -348,    765,   3327}, {  618,    221,   3258},
323     { -178,    -47,   4219}, {  393,   1304,   3842}, {  698,   1702,   4801},
324     {   63,   -584,   1229}, { -215,   -732,   1704}, {  172,   -335,   1909},
325     {   -2,    216,   1797}, {  353,    127,   2205}, {-1208,    188,     11},
326     { -513,    -75,   -683}, { -973,    222,   -646}, { -616,   -843,   -388},
327     { -950,  -1113,   -359}, {-1431,   -623,   -705}, {-1398,  -1063,   -178},
328     {  -45,   -461,     35}, {   -9,   -657,   -216}, {  127,  -1078,     95},
329     { -950,  -1156,    584}, {-1480,  -1494,    449}, { -120,   -705,    516},
330     { -368,   -961,    727}, { -378,   -526,    973}, { -793,   -614,    676},
331     { -801,   -755,   1287}, {-1476,   -340,   1636}, { -505,  -1254,   1543},
332     {-1243,  -1622,   1532}, { -776,  -1477,   -655}, {-1151,  -1296,   -823},
333     {-1153,  -1672,  -1124}, {-1291,  -2003,  -1702}, { -622,  -1283,     57},
334     { -471,  -1611,    509}, {-1060,  -1570,   -139}, { -873,  -2156,   -536},
335     {-1716,  -2021,   -364}, {-2150,  -3218,  -1291}, {-1248,  -1945,  -2904},
336     {-1215,  -2633,  -2855}, {  167,   -244,     84}, {  349,   -412,   -217},
337     {  -40,   -352,    632}, {  227,   -529,    405}, {   68,   -383,   -443},
338     {  167,   -558,   -706}, { -275,   -854,    -14}, { -351,  -1089,   -449},
339     {  341,    -72,   -289}, {  603,   -106,   -474}, {  322,   -219,   -649},
340     {  179,   -317,   -998}, {  450,   -291,   -996}, {  555,    195,   -525},
341     {  784,    272,   -831}, { -148,   -384,   -849}, {   82,   -536,  -1357},
342     {  238,   -172,  -1354}, {  422,   -268,  -1841}, {  297,   -737,  -2079},
343     { -111,   -801,   -598}, {    1,   -668,   -984}, { -131,   -818,  -1299},
344     { -329,   -521,  -1310}, { -151,   -778,  -1834}, {  -93,   -352,  -1746},
345     { -568,   -640,  -1821}, { -509,   -941,  -2183}, {  464,   -815,  -1250},
346     {   79,  -1133,  -1597}, { -184,  -1353,  -2123}, { -196,   -410,  -2427},
347     { -192,   -833,  -2810}, { -259,  -1382,  -3045}, { -217,      4,  -1166},
348     { -800,   -325,  -1219}, { -363,   -830,   -898}, { -661,  -1134,   -960},
349     { -386,   -980,  -1501}, { -627,  -1159,  -1722}, { -903,   -829,   -855},
350     { -685,   -829,  -1313}, {-1065,   -959,  -1405}, {  441,     25,   -847},
351     {  655,    -27,  -1181}, { 1159,   -110,   -705}, {  856,    253,  -1671},
352     {  415,    404,     -1}, {  322,    903,   -398}, {  670,    499,   -292},
353     {  803,    591,   -610}, { 1144,    591,   -814}, {  717,    183,    393},
354     {  857,    381,    106}, {  609,     62,    -27}, {  792,    198,   -325},
355     {  735,    805,     88}, { 1142,    812,     78}, { 1028,    366,   -292},
356     { 1309,    743,   -237}, { 1615,    589,    -79}, { 1010,    639,   -243},
357     {  999,    964,   -311}, { 1500,   1137,   -615}, {  988,    357,    646},
358     { 1227,    667,    683}, { 1164,   1565,    894}, { 1392,   2015,    477},
359     { 1138,    533,    250}, { 1437,    896,    391}, { 1765,   1118,     99},
360     { 1112,   1090,    802}, { 1596,    846,   1134}, {  937,   1161,    279},
361     { 1719,   1254,    683}, { 1338,   1086,     35}, { 1419,   1324,    428},
362     { 1428,   1524,     40}, { 2108,   1594,     89}, { 1015,    544,   1222},
363     { 1121,    925,   1263}, { 1030,   1318,   1485}, { 1295,    789,   1817},
364     { 1323,   1272,   1909}, { 1724,   1237,   1803}, { 1797,   1689,    858},
365     { 2149,   1367,   1301}, { 2302,   1867,    761}, { 2863,   2351,   1053},
366     {   52,    163,    -76}, {  230,    309,   -492}, {  -71,    619,     39},
367     { -218,    856,    499}, { -654,    736,   -207}, { -535,   1259,    155},
368     { -480,   1476,    643}, {  262,   1081,    102}, {  309,   1592,   -182},
369     {  627,   1629,    534}, {  337,    643,    456}, {  758,    670,    713},
370     {  202,   1126,    658}, {  612,   1131,    666}, {  686,   1223,   1136},
371     { -131,    377,    525}, {   42,    708,    907}, {   87,   1488,   1035},
372     {  432,   2117,    904}, {  137,    981,   1332}, { -447,   1014,   1136},
373     { -839,   1793,   1246}, { -559,    297,    198}, { -850,    685,    446},
374     {-1273,    632,    826}, { -401,   -544,    173}, { -753,   -793,    144},
375     { -436,     -9,    772}, { -115,   -243,   1310}, { -670,   -269,    374},
376     {-1027,    -13,    639}, { -887,    -81,   1137}, {-1277,   -455,    158},
377     {-1411,   -720,    736}, {  172,     88,    403}, {  386,    255,    756},
378     { -500,    522,    910}, { -958,    659,   1388}, { -395,    301,   1344},
379     { -356,    768,   1813}, { -613,    841,   2419}, {  445,   -122,    252},
380     {  629,    -87,    723}, {  283,   -253,    870}, {  456,   -116,   1381},
381     {  757,    180,   1059}, {  532,    408,   1509}, {  947,    288,   1806},
382     { 1325,    994,   2524}, {  892,   1219,   3023}, { 1397,   1596,   3406},
383     { 1143,   1552,   2546}, { 1850,   1433,   2710}, {  -10,    134,   1002},
384     {  154,    499,   1323}, {  508,    792,   1117}, {  509,   1340,   1616},
385     {  762,    862,   1608}, {  787,    740,   2320}, {  794,   1727,   1283},
386     {  465,   2108,   1660}, { -120,   1451,   1613}, { -386,   2016,   2169},
387     {  891,   1225,   2050}, {  456,   1480,   2185}, { 1493,   1283,   1209},
388     { 1397,   1636,   1518}, { 1776,   1738,   1552}, { 1572,   1698,   2141},
389     { 1389,   2126,   1271}, { 1959,   2413,   1119}, { 1365,   2892,   1505},
390     { 2206,   1971,   1623}, { 2076,   1950,   2280}, { 1717,   2291,   1867},
391     { 2366,   2515,   1953}, { 2865,   2838,   2522}, { 2535,   3465,   2011},
392     { 3381,   4127,   2638}, {  836,   2667,   2289}, { 1761,   2773,   2337},
393     { 1415,   3325,   2911}, { 2354,   3138,   3126}, { 2659,   4192,   4010},
394     { 1048,   1786,   1818}, { 1242,   2111,   2240}, { 1512,   2079,   2780},
395     { 1573,   2491,   3138}, { 2230,   2377,   2782}, {  416,   1773,   2704},
396     {  725,   2336,   3297}, { 1252,   2373,   3978}, { 2094,   2268,   3568},
397     { 2011,   2712,   4528}, { 1341,   3507,   3876}, { 1216,   3919,   4922},
398     { 1693,   4793,   6012}
399 };
400
401 static const int16_t lsp_band1[LSP_CB_SIZE][3] = {
402     {    0,      0,      0}, {-2114,  -1302,     76}, {-2652,  -1278,  -1368},
403     {-2847,   -828,   -349}, {-3812,  -2190,   -349}, {-3946,   -364,   -449},
404     {-2725,  -4492,  -3607}, {-3495,  -4764,  -1744}, {  -51,   -756,     84},
405     { -153,  -1191,    504}, {  108,  -1418,   1167}, { -835,   -896,    390},
406     { -569,  -1702,     87}, {-1151,  -1818,    933}, {-1826,  -2547,    411},
407     {-1842,  -1818,   1451}, {-2438,  -1611,    781}, {-2747,  -2477,   1311},
408     { -940,   1252,    477}, {-1629,   1688,    602}, {-1202,    617,    280},
409     {-1737,    393,    580}, {-1528,   1077,   1199}, {-2165,   -161,   1408},
410     {-2504,  -1087,   2371}, {-3458,   -175,   1395}, {-1397,    -98,   -843},
411     {-2252,   -177,  -1149}, {-1489,   -726,  -1283}, {-1558,   -265,  -1744},
412     {-1867,   -821,  -1897}, {-2062,  -1516,  -2340}, {-2595,  -1142,  -2861},
413     {  170,     46,   -819}, { -193,   -204,  -1151}, {  326,   -196,  -1532},
414     {  780,    329,   -816}, {  201,    369,  -1243}, {  650,   -209,  -1060},
415     { 1144,    -15,  -1216}, { 1203,   -259,  -1867}, { -890,   -564,  -1430},
416     { -638,   -852,  -1921}, {  177,   -739,  -1358}, { -261,   -526,  -1666},
417     {  206,   -407,  -2255}, {  338,   -526,   -822}, {  421,  -1095,  -1009},
418     {  765,   -607,  -1408}, {  825,  -1295,  -2004}, {  357,   -905,  -1815},
419     {  -58,  -1248,  -1588}, { -596,  -1436,  -2046}, {  -73,  -1159,  -2116},
420     { -115,  -1382,  -2581}, { -160,  -1723,  -1952}, {   -6,  -2196,  -2954},
421     { -649,  -1705,  -2603}, { -617,  -1453,  -3282}, { -949,  -2019,  -3102},
422     { -812,   1544,   1937}, {-1854,    574,   2000}, {-1463,   1140,   2649},
423     {-2683,   1748,   1452}, {-2486,   2241,   2523}, {  783,   1910,   1435},
424     {  581,   2682,   1376}, {  236,   2197,   1885}, { -453,   2943,   2057},
425     { -682,   2178,   2565}, {-1342,   3201,   3328}, { -288,   -184,    262},
426     {  121,   -149,   -183}, {  758,   -412,    206}, { 1038,   -204,    853},
427     { 1577,   -457,    700}, {  937,   -640,   -567}, { 1508,   -528,  -1024},
428     { -225,   -527,   -427}, { -564,  -1095,   -332}, { -742,   -353,   -186},
429     {-1288,   -459,     84}, {-1853,   -484,   -274}, {-1554,   -731,    825},
430     {-2425,   -234,    382}, {-1722,    293,   -271}, {-2515,    425,   -564},
431     {-2599,    818,    464}, { -358,    118,   -375}, { -613,    198,   -874},
432     { -690,    683,   -324}, {-1352,   1155,   -168}, {-1093,    129,   -324},
433     {-1184,    611,   -858}, {  433,    386,   -372}, { -120,    486,   -634},
434     {  234,    851,   -631}, {  602,    128,     46}, { 1099,    410,    159},
435     {  715,   -145,   -424}, { 1198,    -85,   -593}, { 1390,    367,   -358},
436     { 1683,    362,   -964}, { 1711,    622,     45}, { 2033,    833,   -383},
437     { 2890,    549,   -506}, {    7,    401,     52}, {   72,    811,    415},
438     {  566,    668,     41}, {  467,   1218,    130}, {   68,    957,   -187},
439     {  -25,   1649,   -103}, { -661,    260,    214}, { -925,    -94,    612},
440     { -321,   -422,    965}, { -788,   -672,   1783}, {  400,   -673,    779},
441     {  741,   -595,   1635}, { -161,    307,    657}, { -382,    836,    871},
442     { -814,    400,   1223}, {  364,    606,   1247}, {   57,     75,   1571},
443     {  151,    471,   2287}, {  -81,   1021,   1502}, {  227,   1470,   1097},
444     {  658,   1275,   1653}, {  664,   1478,   2377}, {  263,   -127,    444},
445     {  264,     89,    969}, {  794,    171,    576}, {  821,    186,   1226},
446     {  404,    462,    517}, {  339,    918,    794}, { 1280,   1423,    196},
447     { 1453,   2019,    365}, { 1615,   1481,    672}, { 2394,   1708,    508},
448     {  806,   1238,    573}, {  713,   1158,   1078}, { 1285,   1436,   1232},
449     { 1790,   1188,   1141}, {  765,    643,    864}, { 1032,    797,   1279},
450     {  900,    563,   1827}, { 1514,    673,   2312}, { 1544,   1129,   3240},
451     { 1469,   1050,   1594}, { 1945,   1318,   1988}, { 2397,   2026,   2060},
452     { 3538,   2057,   2620}, { 1249,   -118,     74}, { 1727,    194,    421},
453     { 2078,    -50,   -463}, {  970,    688,   -432}, { 1149,    952,   -110},
454     { 1254,   1275,   -651}, { 1386,    929,    401}, { 1960,   1167,    232},
455     {  407,   -752,   -243}, {  859,  -1118,    172}, { -227,   -860,   -992},
456     { -796,  -1175,  -1380}, {    8,  -1282,   -388}, {  353,  -1781,  -1037},
457     { -732,   -397,   -807}, { -853,    -28,  -1342}, {-1229,  -1207,  -1959},
458     {-1015,  -1125,  -2543}, {-1452,  -1791,  -2725}, {-1891,  -2416,  -3269},
459     { -918,  -1629,   -783}, { -580,  -2155,   -698}, {-1097,  -2364,    -96},
460     {-1387,  -1513,      7}, {-1588,  -2076,   -664}, {-1473,  -2740,   -784},
461     {-2378,  -3149,    -56}, {-2856,  -2092,   -169}, {-3391,  -3708,    316},
462     {-1176,   -890,   -614}, {-1944,  -1061,   -800}, { -299,  -1517,  -1000},
463     { -640,  -1850,  -1526}, {-1454,  -1536,  -1233}, {-1890,  -1955,  -1756},
464     {-1086,  -1921,  -2122}, { -750,  -2325,  -2260}, {-1325,  -2413,  -2673},
465     {-1114,  -2542,  -3459}, {-1341,  -2901,  -3963}, {-1160,  -2226,  -1393},
466     {-1001,  -2772,  -1573}, {-1594,  -2641,  -1978}, {-1534,  -3046,  -2624},
467     {-2224,  -2196,   -675}, {-2807,  -3054,  -1102}, {-2008,  -2840,  -1186},
468     {-1980,  -3332,  -1695}, {-1715,  -3562,   -505}, {-2527,  -4000,  -1887},
469     {-2333,  -2734,  -2296}, {-3440,  -2401,  -3211}, {-2008,  -3528,  -3337},
470     {-2247,  -3291,  -4510}, { -475,    949,    155}, { -149,   1365,    545},
471     { -757,   1644,   1083}, { -217,   2053,   1353}, {-1433,   2301,   1462},
472     {  495,   1661,    529}, {   10,   2037,    740}, { 2082,   1898,    978},
473     { 2831,   2294,    911}, {  842,    793,    420}, { 1223,   1023,    863},
474     { 1237,    451,    780}, { 1744,    708,    822}, { 1533,    284,   1384},
475     { 2135,    609,   1538}, { 2305,    626,    540}, { 2368,   1187,    955},
476     { 2586,   1255,     -7}, { 3116,   1131,    726}, { 3431,   1730,    428},
477     { 2734,   1648,   1307}, { 2988,   1231,   2010}, { 3523,   2024,   1488},
478     { 1034,   1657,    871}, { 1206,   2163,   1036}, { 1807,   2372,   1233},
479     { 1808,   1769,   1493}, { 1573,   2332,   1779}, { 1216,   1609,   1866},
480     { 1480,   1898,   2513}, {  465,   2708,   2776}, {  771,   3638,   3338},
481     { 1869,   2599,   2623}, { 2825,   2745,   2468}, { 2638,   2439,   1585},
482     { 2094,   2970,   1308}, { 2022,   3057,   1999}, { 3428,   2912,   1816},
483     { 4536,   2974,   2129}, { 1046,   2563,   2086}, { 1363,   3562,   2318},
484     { 2511,   1891,   2984}, { 1866,   2306,   3986}, { 3272,   2924,   3682},
485     { 3146,   3564,   2272}, { 3592,   3968,   2822}, { 2431,   3369,   3069},
486     { 1931,   4709,   3090}, { 2629,   4220,   3986}, { 4639,   4056,   3664},
487     { 4035,   5334,   4912}
488 };
489
490 static const int16_t lsp_band2[LSP_CB_SIZE][4] = {
491     {    0,      0,      0,      0}, {  601,    512,   -542,    334},
492     {  428,   1087,   -484,   -132}, {  652,    622,   -391,   -572},
493     {  378,    799,    141,   -860}, { 1040,    409,    112,   -554},
494     { 1123,    670,    -75,   -847}, { 1421,    494,   -315,  -1095},
495     {  787,   1001,    114,   -460}, {  988,   1672,    216,   -681},
496     { 1007,   1241,   -132,  -1247}, { 1073,    399,    186,     -5},
497     { 1262,    193,   -694,   -129}, {  325,    196,     51,   -641},
498     {  861,    -59,    350,   -458}, { 1261,    567,    586,   -346},
499     { 1532,    885,    210,   -517}, { 2027,    937,    113,   -792},
500     { 1383,   1064,    334,     38}, { 1964,   1468,    459,    133},
501     { 2062,   1186,    -98,   -121}, { 2577,   1445,    506,   -373},
502     { 2310,   1682,     -2,   -960}, { 2876,   1939,    765,    138},
503     { 3581,   2360,    649,   -414}, {  219,    176,   -398,   -309},
504     {  434,    -78,   -435,   -880}, { -344,    301,    265,   -552},
505     { -915,    470,    657,   -380}, {  419,   -432,   -163,   -453},
506     {  351,   -953,      8,   -562}, {  789,    -43,     20,   -958},
507     {  302,   -594,   -352,  -1159}, { 1040,    108,   -668,   -924},
508     { 1333,    210,  -1217,  -1663}, {  483,    589,   -350,  -1140},
509     { 1003,    824,   -802,  -1184}, {  745,     58,   -589,  -1443},
510     {  346,    247,   -915,  -1683}, {  270,    796,   -720,  -2043},
511     { 1208,    722,   -222,   -193}, { 1486,   1180,   -412,   -672},
512     { 1722,    179,    -69,   -521}, { 2047,    860,   -666,  -1410},
513     { -146,    222,   -281,   -805}, { -189,     90,   -114,  -1307},
514     { -152,   1086,   -241,   -764}, { -439,    733,   -601,  -1302},
515     { -833,   -167,   -351,   -601}, { -856,   -422,   -411,  -1059},
516     { -747,   -355,   -582,  -1644}, { -837,    210,   -916,  -1144},
517     {-1800,     32,   -878,  -1687}, {  -48,    -23,  -1146,     52},
518     { -350,   -409,  -1656,   -364}, {  265,   -728,   -858,   -577},
519     {  458,   -247,  -1141,   -997}, {  691,   -407,  -1988,  -1161},
520     {  -66,   -104,   -705,  -1249}, { -431,    -93,  -1191,  -1844},
521     {  203,   -732,  -1000,  -1693}, {   10,   -832,  -1846,  -1819},
522     {  493,   -128,  -1436,  -1768}, {  488,   -311,  -1730,  -2540},
523     { -653,   -532,  -1150,  -1172}, {-1086,   -289,  -1706,  -1533},
524     { -699,  -1205,  -1216,  -1766}, {-1032,  -1481,  -2074,  -1523},
525     { -721,  -1220,  -2277,  -2600}, {   12,   -539,  -1484,  -1131},
526     {  -40,   -911,  -2106,   -441}, { -471,   -484,  -2267,  -1549},
527     { -141,   -988,  -3006,  -1721}, {-1545,  -2102,   -583,    342},
528     {-1383,  -2772,   -386,    -13}, {-2118,  -2589,  -1205,     72},
529     {-2147,  -3231,   -965,    390}, {-2949,  -3300,   -621,    637},
530     {-3907,  -4138,   -865,    803}, {-1287,   -845,   -375,   -548},
531     {-1416,  -1169,   -487,  -1277}, {-1400,  -1690,  -1027,   -418},
532     {-2018,  -1909,  -1188,  -1260}, {-1418,  -2222,  -2029,   -128},
533     {-2067,  -2998,  -2693,   -310}, { -950,  -1028,  -1538,    185},
534     {-1616,   -915,  -2205,   -549}, {   19,   -821,  -1145,    352},
535     {  184,  -1175,  -1356,   -627}, { -547,  -1088,  -1661,   -911},
536     { -216,  -1502,  -2197,   -948}, { -795,  -1306,  -2374,   -451},
537     { -924,  -1889,  -2796,   -680}, { -600,  -1614,  -3609,   -885},
538     {-2392,  -2528,    319,    303}, {-2908,  -2095,   -310,    573},
539     {-3460,  -2141,     49,   -113}, {-2231,   -448,    675,   -146},
540     {-2805,   -532,   1231,    479}, {-2684,   -486,   -200,    611},
541     {-3525,   -971,   -198,    704}, {-3707,    173,    349,    254},
542     {-4734,  -1447,    -34,    880}, {  777,   -512,    114,    -10},
543     { 1250,    -66,    442,     -5}, {  604,    613,    452,   -352},
544     { 1224,    777,    675,  -1014}, {-1372,    -79,  -1208,   -238},
545     {-2389,    -17,  -1157,   -818}, {-1504,   -673,  -1133,  -1060},
546     {-1984,   -799,  -2005,  -1973}, {-2037,   -798,  -1068,   -105},
547     {-3190,   -899,  -1817,   -194}, { -156,   -886,    394,   -318},
548     { -258,  -1283,    551,    202}, { -536,  -1729,    910,    331},
549     { -847,  -1109,    795,   -163}, {-1171,  -1128,    715,    519},
550     {-1080,  -1319,   1685,    668}, {-1000,  -1921,     96,    211},
551     {-1487,  -2148,    831,    174}, {-1139,   -374,    414,     -4},
552     {-1517,  -1383,    396,   -352}, {-1012,    439,    -59,   -967},
553     {-1812,    706,   -440,  -1030}, {-1971,   -329,    -34,   -827},
554     {-2472,  -1588,   -151,   -606}, {-2161,    374,   -281,     76},
555     {-3012,    231,    -15,   -690}, { 1104,    566,    721,    209},
556     { 1685,    564,    383,     98}, { 1898,    750,    792,    -97},
557     {  556,    -64,    561,    -93}, {  876,    162,    913,    -22},
558     {  961,    675,   1296,    140}, {  756,   -396,    851,    544},
559     {  360,   -303,   1341,    396}, {  878,    -22,   1464,    863},
560     { -309,   -273,    642,   -129}, { -686,    -82,    842,    454},
561     {   -5,    -47,   1069,    998}, {  -94,    967,   1277,    298},
562     { -489,    385,   1473,    746}, { -369,   -717,   1333,    242},
563     {  281,   -993,   1726,    924}, {  464,    601,   1575,   1376},
564     { -250,    206,   2339,   1175}, { -438,    377,   -597,   -285},
565     {-1020,    787,   -790,   -287}, { -458,   -410,    215,    295},
566     { -589,   -860,   -121,    797}, {-1175,    122,   -437,    466},
567     {-1480,   -121,    367,    924}, {  234,    323,    770,   -555},
568     {  145,     30,    996,     26}, {   66,    849,     93,   -145},
569     { -117,   1261,    474,   -399}, {-1495,   1051,    218,   -506},
570     {-1390,    694,    994,     88}, {  616,      7,     78,    304},
571     { 1060,     52,    -62,    835}, {  833,    454,    649,   1359},
572     { -770,    464,     47,     93}, { -574,   1199,    -39,    379},
573     {  114,    -98,    488,    485}, {  727,    244,    606,    696},
574     {  -76,    455,    671,    546}, { -565,    -13,    145,    819},
575     { -376,    569,    448,   1128}, {  218,    122,    265,   1167},
576     {  230,    738,    932,   1003}, {  138,    477,     36,    450},
577     {  404,    787,    -73,   1000}, {  497,   1259,    387,   1231},
578     {   17,    207,    195,    -79}, {  562,    358,     53,   -158},
579     {  493,    387,    478,    189}, {  678,    831,    640,    558},
580     { -197,    523,    613,     57}, {  429,    894,    769,    111},
581     {   67,   1174,    568,    511}, { 1242,    824,    251,    840},
582     { 1419,   1074,    864,    481}, {  924,   1474,    669,    724},
583     { 1539,   1879,    654,   1590}, {  445,    337,   1111,    541},
584     {  472,   1421,   1264,   1094}, {  794,    735,   1103,    668},
585     { 1055,    863,   1192,   1020}, {  778,   1105,    806,   1798},
586     { 1052,   1527,   1587,   2151}, {  881,   1552,   1265,    391},
587     {  726,    872,   1812,    601}, { 1469,    280,   1008,    616},
588     { 1403,    577,   1803,   1244}, { 1650,   1314,   1148,   1072},
589     { 1297,   1669,   1911,   1026}, { 2093,   1044,   2115,   1189},
590     { 1644,   1961,   2587,   1512}, {   25,   -315,     -9,   -106},
591     {  290,   -339,    428,   -444}, {  -68,   -783,    735,    772},
592     {  245,   -555,    468,     47}, {  334,   -895,    814,    146},
593     {  235,    368,   -964,   -959}, { -203,    315,  -1566,  -1217},
594     {  801,     17,   -276,   -354}, {  894,   -495,   -789,   -635},
595     {  716,    291,  -1189,   -357}, {  560,   -260,   -733,     -2},
596     {  679,   -508,  -1429,    211}, {  -51,    -62,   -428,    557},
597     {  322,   -638,   -211,    614}, { -878,  -1057,    -84,    -71},
598     { -388,  -1415,   -167,   -318}, { -754,  -1574,    214,   -539},
599     {-1419,  -2004,    -92,   -787}, {  -47,   -856,   -347,   -255},
600     {   23,  -1211,   -173,    320}, { -658,   -487,   -893,    353},
601     { -783,  -1587,   -584,    507}, {-1420,   -859,   -378,    441},
602     {-2095,  -1491,   -137,    439}, { -321,  -1450,  -1288,    -12},
603     { -359,  -2113,   -553,     -8}, { -831,  -1918,  -1561,     32},
604     {-1014,  -2487,  -1359,   -939}, { -475,   -311,   -169,   -236},
605     { -907,   -426,    276,   -611}, {  -96,   -400,     50,   -710},
606     { -426,  -1022,    -10,   -985}, { -197,   -258,   -744,   -575},
607     { -611,   -930,   -771,   -394}, { -267,   -776,   -612,   -939},
608     { -256,  -1346,   -802,  -1122}, { -796,  -1570,   -825,   -754},
609     {  712,    876,    141,    227}, {  981,   1509,     85,    124},
610     { 1462,   1228,    979,    -39}, { 1734,    999,   1481,    440},
611     { 2293,   1116,    769,    440}, { 2504,   1480,   1241,    356},
612     { 2474,   1909,   1558,    810}, {  917,   1134,    607,   -134},
613     {  509,   1809,    781,   -123}, { 1712,   1506,    559,   -423},
614     { 2037,   2317,    726,   -155}, { 3031,   2676,   1203,    331},
615     { 3664,   3274,   1768,    531}, { 1610,   1839,    867,    183},
616     { 1774,   1972,   1538,     97}, { 1822,   2158,   1282,    659},
617     { 2222,   2758,   1818,    900}, { 3251,   2124,   1723,    996},
618     { 3633,   2336,   2408,   1453}, { 2923,   3517,   2567,   1318},
619 };
620
621 /**
622  * Used for the coding/decoding of the pulses positions
623  * for the MP-MLQ codebook
624  */
625 static const int32_t combinatorial_table[PULSE_MAX][SUBFRAME_LEN/GRID_SIZE] = {
626     {118755, 98280, 80730,  65780, 53130,
627       42504, 33649, 26334,  20349, 15504,
628       11628,  8568,  6188,   4368,  3003,
629        2002,  1287,   792,    462,   252,
630         126,    56,    21,      6,     1,
631           0,     0,     0,      0,     0},
632
633     { 23751, 20475, 17550,  14950, 12650,
634       10626,  8855,  7315,   5985,  4845,
635        3876,  3060,  2380,   1820,  1365,
636        1001,   715,   495,    330,   210,
637         126,    70,    35,     15,     5,
638           1,     0,     0,      0,     0},
639
640     {  3654,  3276,  2925,   2600,  2300,
641        2024,  1771,  1540,   1330,  1140,
642         969,   816,   680,    560,   455,
643         364,   286,   220,    165,   120,
644          84,    56,    35,     20,    10,
645           4,     1,     0,      0,     0},
646
647     {   406,   378,   351,    325,   300,
648         276,   253,   231,    210,   190,
649         171,   153,   136,    120,   105,
650          91,    78,    66,     55,    45,
651          36,    28,    21,     15,    10,
652           6,     3,     1,      0,     0},
653
654     {    29,    28,    27,     26,    25,
655          24,    23,    22,     21,    20,
656          19,    18,    17,     16,    15,
657          14,    13,    12,     11,    10,
658           9,     8,     7,      6,     5,
659           4,     3,     2,      1,     0},
660
661     {     1,     1,     1,      1,     1,
662           1,     1,     1,      1,     1,
663           1,     1,     1,      1,     1,
664           1,     1,     1,      1,     1,
665           1,     1,     1,      1,     1,
666           1,     1,     1,      1,     1},
667 };
668
669 static const int16_t pitch_contrib[340] = {
670     60,     0,  0,  2489, 60,     0,  0,  5217,
671      1,  6171,  0,  3953,  0, 10364,  1,  9357,
672     -1,  8843,  1,  9396,  0,  5794, -1, 10816,
673      2, 11606, -2, 12072,  0,  8616,  1, 12170,
674      0, 14440,  0,  7787, -1, 13721,  0, 18205,
675      0, 14471,  0, 15807,  1, 15275,  0, 13480,
676     -1, 18375, -1,     0,  1, 11194, -1, 13010,
677      1, 18836, -2, 20354,  1, 16233, -1,     0,
678     60,     0,  0, 12130,  0, 13385,  1, 17834,
679      1, 20875,  0, 21996,  1,     0,  1, 18277,
680     -1, 21321,  1, 13738, -1, 19094, -1, 20387,
681     -1,     0,  0, 21008, 60,     0, -2, 22807,
682      0, 15900,  1,     0,  0, 17989, -1, 22259,
683      1, 24395,  1, 23138,  0, 23948,  1, 22997,
684      2, 22604, -1, 25942,  0, 26246,  1, 25321,
685      0, 26423,  0, 24061,  0, 27247, 60,     0,
686     -1, 25572,  1, 23918,  1, 25930,  2, 26408,
687     -1, 19049,  1, 27357, -1, 24538, 60,     0,
688     -1, 25093,  0, 28549,  1,     0,  0, 22793,
689     -1, 25659,  0, 29377,  0, 30276,  0, 26198,
690      1, 22521, -1, 28919,  0, 27384,  1, 30162,
691     -1,     0,  0, 24237, -1, 30062,  0, 21763,
692      1, 30917, 60,     0,  0, 31284,  0, 29433,
693      1, 26821,  1, 28655,  0, 31327,  2, 30799,
694      1, 31389,  0, 32322,  1, 31760, -2, 31830,
695      0, 26936, -1, 31180,  1, 30875,  0, 27873,
696     -1, 30429,  1, 31050,  0,     0,  0, 31912,
697      1, 31611,  0, 31565,  0, 25557,  0, 31357,
698     60,     0,  1, 29536,  1, 28985, -1, 26984,
699     -1, 31587,  2, 30836, -2, 31133,  0, 30243,
700     -1, 30742, -1, 32090, 60,     0,  2, 30902,
701     60,     0,  0, 30027,  0, 29042, 60,     0,
702      0, 31756,  0, 24553,  0, 25636, -2, 30501,
703     60,     0, -1, 29617,  0, 30649, 60,     0,
704      0, 29274,  2, 30415,  0, 27480,  0, 31213,
705     -1, 28147,  0, 30600,  1, 31652,  2, 29068,
706     60,     0,  1, 28571,  1, 28730,  1, 31422,
707      0, 28257,  0, 24797, 60,     0,  0,     0,
708     60,     0,  0, 22105,  0, 27852, 60,     0,
709     60,     0, -1, 24214,  0, 24642,  0, 23305,
710     60,     0, 60,     0,  1, 22883,  0, 21601,
711     60,     0,  2, 25650, 60,     0, -2, 31253,
712     -2, 25144,  0, 17998
713 };
714
715 /**
716  * Number of non-zero pulses in the MP-MLQ excitation
717  */
718 static const int8_t pulses[4] = {6, 5, 6, 5};
719
720 /**
721  * Size of the MP-MLQ fixed excitation codebooks
722  */
723 static const int32_t max_pos[4] = {593775, 142506, 593775, 142506};
724
725 static const int16_t fixed_cb_gain[GAIN_LEVELS] = {
726       1,    2,    3,    4,    6,    9,   13,   18,
727      26,   38,   55,   80,  115,  166,  240,  348,
728     502,  726, 1050, 1517, 2193, 3170, 4582, 6623,
729 };
730
731 static const int16_t adaptive_cb_gain85[85 * 20] = {
732         0,      0,      0,      0,      0,      0,      0,      0,
733         0,      0,      0,      0,      0,      0,      0,      0,
734         0,      0,      0,      0,    800,   1496,    167,   -256,
735      -338,    -39,   -136,     -1,     -4,     -6,    -73,     -8,
736       -15,     12,     23,      2,     16,     30,      3,     -5,
737      -462,   -686,    493,   2575,    311,    -13,    -28,    -14,
738      -404,     -5,    -19,     13,     20,     72,    107,    -77,
739         8,     13,     -9,    -48,   1483,    144,    784,    928,
740      1243,   -134,     -1,    -37,    -52,    -94,    -13,    -71,
741        -6,    -84,     -8,    -44,   -112,    -10,    -59,    -70,
742       -77,    275,   3522,   1056,  -1254,      0,     -4,   -757,
743       -68,    -95,      1,     16,    -59,      4,    -17,   -227,
744        -5,     21,    269,     80,   -125,    -40,   -264,    381,
745      5027,      0,      0,     -4,     -8,  -1542,      0,     -2,
746         0,      2,      0,      6,     38,     12,     81,   -117,
747       138,    332,   2215,   2574,   1339,     -1,     -6,   -299,
748      -404,   -109,     -2,    -18,    -44,    -21,    -52,   -348,
749       -11,    -27,   -181,   -210,   3685,   2883,   -887,    866,
750     -1639,   -828,   -507,    -48,    -45,   -164,   -648,    199,
751       156,   -194,   -152,     46,    368,    288,    -88,     86,
752      1396,   2146,   2235,    345,    942,   -118,   -281,   -305,
753        -7,    -54,   -182,   -190,   -292,    -29,    -45,    -47,
754       -80,   -123,   -128,    -19,     13,   4475,   3549,   -804,
755      -655,      0,  -1222,   -768,    -39,    -26,     -3,     -2,
756      -969,      0,    219,    174,      0,    179,    141,    -32,
757      -724,    254,    242,   6049,   2462,    -32,     -3,     -3,
758     -2233,   -370,     11,     10,     -3,    267,    -94,    -89,
759       108,    -38,    -36,   -909,    626,  -1713,   6121,   4561,
760     -1061,    -23,   -179,  -2287,  -1270,    -68,     65,   -233,
761       640,   -174,    477,  -1704,     40,   -111,    396,    295,
762      -350,   1391,   7985,    511,   -405,     -7,   -118,  -3892,
763       -15,    -10,     29,    170,   -678,     10,    -43,   -249,
764        -8,     34,    197,     12,   3144,   -529,    608,   2530,
765      3878,   -603,    -17,    -22,   -390,   -918,    101,   -116,
766        19,   -485,     81,    -93,   -744,    125,   -144,   -599,
767      2589,   -689,   3045,   5603,   -404,   -409,    -29,   -566,
768     -1916,    -10,    108,   -481,    128,   -885,    235,  -1041,
769        63,    -17,     75,    138,   3107,    513,   1374,  -3594,
770     -4922,   -589,    -16,   -115,   -788,  -1478,    -97,   -260,
771       -43,    681,    112,    301,    933,    154,    413,  -1079,
772      2468,   6010,   1107,   -390,   1961,   -372,  -2204,    -74,
773        -9,   -234,   -905,   -166,   -406,     58,    143,     26,
774      -295,   -719,   -132,     46,   4773,   2766,   2368,   4862,
775     -4044,  -1390,   -467,   -342,  -1443,   -998,   -806,   -690,
776      -399,  -1416,   -821,   -702,   1178,    682,    584,   1200,
777      1665,  -1879,   1443,   1701,   8562,   -169,   -215,   -127,
778      -176,  -4475,    190,   -146,    165,   -172,    195,   -149,
779      -870,    982,   -754,   -889,   2716,   9011,  -1007,    755,
780     -1785,   -450,  -4956,    -61,    -34,   -194,  -1493,    167,
781       554,   -125,   -415,     46,    296,    982,   -109,     82,
782     -2727,   7548,   1285,    938,   3420,   -453,  -3478,   -100,
783       -53,   -714,   1256,    213,   -592,    156,   -432,    -73,
784       569,  -1576,   -268,   -196,   3677,    882,   4050,   1202,
785      2323,   -825,    -47,  -1001,    -88,   -329,   -198,   -909,
786      -218,   -269,    -64,   -297,   -521,   -125,   -574,   -170,
787      2046,   -753,    122,  10102,    603,   -255,    -34,      0,
788     -6229,    -22,     94,    -15,      5,  -1261,    464,    -75,
789       -75,     27,     -4,   -372,    449,  -1815,  10690,   3870,
790      -527,    -12,   -201,  -6976,   -914,    -16,     49,   -293,
791      1184,   -106,    428,  -2525,     14,    -58,    344,    124,
792      -941,   2352,   5049,   3650,   2637,    -54,   -337,  -1556,
793      -813,   -424,    135,    290,   -725,    209,   -524,  -1125,
794       151,   -378,   -812,   -587,  -1879,    796,   3117,   9569,
795      -404,   -215,    -38,   -593,  -5589,     -9,     91,    357,
796      -151,   1097,   -464,  -1821,    -46,     19,     76,    236,
797     -1715,   2043,  -2096,   9946,   4001,   -179,   -254,   -268,
798     -6038,   -977,    213,   -219,    261,   1041,  -1240,   1272,
799       418,   -498,    511,  -2429,  -5772,   -618,  -3921,    284,
800     -3155,  -2033,    -23,   -938,     -4,   -607,   -218,  -1381,
801      -148,    100,     10,     68,  -1111,   -119,   -755,     54,
802       382,   4748,   8003,  -2064,   2198,     -8,  -1376,  -3909,
803      -260,   -294,   -110,   -186,  -2319,     48,    598,   1008,
804       -51,   -637,  -1073,    277,   -867,   3015,  11926,  -1675,
805       947,    -45,   -555,  -8681,   -171,    -54,    159,    631,
806     -2195,    -88,    308,   1219,     50,   -174,   -690,     96,
807     -4933,   -432,   6757,   3771,   1352,  -1485,    -11,  -2786,
808      -867,   -111,   -130,   2034,    178,   1135,     99,  -1555,
809       407,     35,   -557,   -311,    152,   9726,   4231,  -1928,
810      1490,     -1,  -5774,  -1092,   -226,   -135,    -90,    -39,
811     -2511,     17,   1144,    498,    -13,   -884,   -384,    175,
812      2512,    193,   9033,   5361,  -3148,   -385,     -2,  -4980,
813     -1754,   -605,    -29,  -1385,   -106,   -822,    -63,  -2956,
814       482,     37,   1735,   1030,   8464,   2844,     12,    549,
815      2132,  -4373,   -493,      0,    -18,   -277,  -1469,     -6,
816        -2,   -284,    -95,      0,  -1101,   -370,     -1,    -71,
817      2141,  -2602,   7166,   9046,  -1350,   -279,   -413,  -3134,
818     -4994,   -111,    340,   -936,   1138,  -1182,   1436,  -3957,
819       176,   -214,    590,    745,   -244,    278,  13307,   1227,
820      -161,     -3,     -4, -10808,    -91,     -1,      4,    198,
821      -226,     18,    -20,   -997,     -2,      2,    131,     12,
822     -1947,   8217,   6269,    917,  -2559,   -231,  -4121,  -2399,
823       -51,   -399,    976,    745,  -3144,    108,   -460,   -350,
824      -304,   1283,    979,    143,  -1810,   2061,  -2781,   6056,
825     10058,   -200,   -259,   -472,  -2238,  -6174,    227,   -307,
826       349,    669,   -761,   1028,   1111,  -1265,   1707,  -3717,
827      7827,   9161,  -3409,   2473,  -1510,  -3739,  -5122,   -709,
828      -373,   -139,  -4376,   1628,   1906,  -1181,  -1382,    514,
829       721,    844,   -314,    228,  -1430,   8313,   9541,  -2955,
830      1626,   -124,  -4218,  -5556,   -533,   -161,    725,    832,
831     -4841,   -257,   1499,   1721,    142,   -825,   -947,    293,
832      2819,  -4247,   5391,   8673,   2756,   -485,  -1101,  -1774,
833     -4591,   -463,    730,   -927,   1397,  -1492,   2248,  -2854,
834      -474,    714,   -907,  -1459,    141,  14552,    690,    257,
835      -112,     -1, -12926,    -29,     -4,      0,   -125,     -5,
836      -613,     -2,   -228,    -10,      0,     99,      4,      1,
837     11938,  -1859,   1806,   -962,   -884,  -8699,   -211,   -199,
838       -56,    -47,   1355,  -1316,    205,    701,   -109,    106,
839       644,   -100,     97,    -51,   3728,   1982,   2264,   4584,
840      3131,   -848,   -239,   -312,  -1282,   -598,   -451,   -515,
841      -273,  -1043,   -554,   -633,   -712,   -378,   -432,   -876,
842     -1181,    766,    720,  14303,   -216,    -85,    -35,    -31,
843    -12486,     -2,     55,     51,    -33,   1031,   -668,   -628,
844       -15,     10,      9,    189,  -4385,   4826,  10112,   1569,
845      3388,  -1173,  -1421,  -6242,   -150,   -700,   1291,   2706,
846     -2979,    420,   -462,   -969,    906,   -998,  -2091,   -324,
847      -448,   1932,  15591,  -1842,    657,    -12,   -227, -14837,
848      -207,    -26,     52,    427,  -1838,    -50,    217,   1753,
849        18,    -77,   -626,     74,  -4141,   1844,   3962,   5517,
850      6220,  -1046,   -207,   -958,  -1858,  -2361,    466,   1001,
851      -446,   1394,   -621,  -1334,   1572,   -700,  -1504,  -2094,
852       729,  -2299,  14755,   3657,   -952,    -32,   -322, -13288,
853      -816,    -55,    102,   -656,   2071,   -162,    513,  -3294,
854        42,   -133,    857,    212,  -1385,   5801,  13339,  -3137,
855      1344,   -117,  -2054, -10861,   -600,   -110,    490,   1127,
856     -4723,   -265,   1111,   2554,    113,   -476,  -1094,    257,
857      4710,   9661,   1073,  -2467,   3274,  -1354,  -5697,    -70,
858      -371,   -654,  -2777,   -308,   -633,    709,   1455,    161,
859      -941,  -1930,   -214,    493,   1843,  -3624,  12422,   6898,
860     -1559,   -207,   -802,  -9419,  -2904,   -148,    407,  -1397,
861      2748,   -775,   1526,  -5230,    175,   -344,   1182,    656,
862      1433,   2394,   2507,   1380,   8780,   -125,   -349,   -383,
863      -116,  -4705,   -209,   -219,   -366,   -120,   -201,   -211,
864      -768,  -1283,  -1343,   -740,  -1712,  12915,   5883,  -2197,
865       991,   -179, -10181,  -2112,   -294,    -60,   1350,    615,
866     -4638,   -229,   1732,    789,    103,   -781,   -356,    133,
867     15072,   2158,  -1245,    910,   -496, -13865,   -284,    -94,
868       -50,    -15,  -1986,   1145,    164,   -837,   -119,     69,
869       456,     65,    -37,     27,   4655,   7319,   4916,    586,
870     -3381,  -1322,  -3270,  -1475,    -20,   -697,  -2079,  -1396,
871     -2196,   -166,   -261,   -175,    960,   1510,   1014,    120,
872      1191,  -2140,   5120,  13498,  -1418,    -86,   -279,  -1600,
873    -11121,   -122,    155,   -372,    669,   -981,   1763,  -4218,
874       103,   -185,    443,   1168,  -1530,   -817,   8191,   9632,
875     -1452,   -143,    -40,  -4095,  -5663,   -128,    -76,    765,
876       408,    900,    480,  -4815,   -135,    -72,    726,    854,
877     -3236,    607,   1696,  -2106,  11485,   -639,    -22,   -175,
878      -270,  -8051,    119,    335,    -62,   -416,     78,    218,
879      2268,   -425,  -1189,   1476,   3203,  -1903,   -837,   9679,
880      7057,   -626,   -221,    -42,  -5718,  -3039,    372,    163,
881       -97,  -1892,   1124,    494,  -1380,    819,    360,  -4169,
882       213,   -655,  17015,    620,   -384,     -2,    -26, -17671,
883       -23,     -9,      8,   -221,    681,     -8,     24,   -644,
884         5,    -15,    399,     14,   5088,     35,  -3339,   3726,
885      8488,  -1580,      0,   -680,   -847,  -4397,    -10,   1037,
886         7,  -1157,     -8,    759,  -2636,    -18,   1730,  -1930,
887      -988,   1454,  -2688,  15039,   2682,    -59,   -129,   -441,
888    -13805,   -439,     87,   -162,    238,    907,  -1335,   2467,
889       161,   -238,    440,  -2462,  -4865,  -2842,    -53,   5495,
890      6523,  -1445,   -493,      0,  -1843,  -2597,   -844,    -16,
891        -9,   1632,    953,     18,   1937,   1131,     21,  -2188,
892      3076,  15069,  -2914,   1810,   -971,   -577, -13860,   -518,
893      -200,    -57,  -2829,    547,   2680,   -339,  -1665,    322,
894       182,    893,   -172,    107,   1311,   5355,  11054,   2299,
895     -3654,   -105,  -1750,  -7458,   -322,   -814,   -428,   -885,
896     -3613,   -184,   -751,  -1551,    292,   1194,   2465,    512,
897      4035,   5619,   4618,   1815,   1912,   -994,  -1927,  -1301,
898      -201,   -223,  -1384,  -1137,  -1583,   -447,   -622,   -511,
899      -471,   -656,   -539,   -211,  -2131,   2754,  -4501,  12879,
900      7432,   -277,   -463,  -1236, -10124,  -3371,    358,   -585,
901       756,   1675,  -2165,   3538,    967,  -1249,   2042,  -5842,
902      5618,   -515,   3219,  -4149,   4857,  -1926,    -16,   -632,
903     -1050,  -1440,    176,  -1104,    101,   1422,   -130,    815,
904     -1666,    152,   -954,   1230,   1838,  -1709,   1139,  16867,
905       716,   -206,   -178,    -79, -17366,    -31,    191,   -127,
906       118,  -1892,   1759,  -1173,    -80,     74,    -49,   -737,
907      1978,  -3845,  10050,  11854,  -2492,   -238,   -902,  -6164,
908     -8576,   -379,    464,  -1213,   2358,  -1431,   2782,  -7271,
909       301,   -585,   1529,   1803,  -2600,  11246,  11289,  -3647,
910      1463,   -412,  -7720,  -7778,   -812,   -130,   1784,   1791,
911     -7749,   -578,   2504,   2513,    232,  -1004,  -1008,    325,
912      3442,    907,   2725,   8970,   3638,   -723,    -50,   -453,
913     -4911,   -808,   -190,   -572,   -150,  -1884,   -496,  -1492,
914      -764,   -201,   -605,  -1992,   -126,  17498,   3481,  -2003,
915      1090,      0, -18689,   -739,   -244,    -72,    135,     26,
916     -3717,    -15,   2139,    425,      8,  -1165,   -231,    133,
917     -1814,   1048,  -2164,   4070,  16272,   -200,    -67,   -285,
918     -1011, -16160,    116,   -239,    138,    450,   -260,    537,
919      1801,  -1041,   2149,  -4042,   9354,  12580,  -1883,    962,
920      -617,  -5341,  -9660,   -216,    -56,    -23,  -7183,   1075,
921      1446,   -549,   -738,    110,    352,    474,    -71,     36,
922      1708,   4199,   7387,   6335,   1003,   -178,  -1076,  -3330,
923     -2449,    -61,   -437,   -770,  -1893,   -660,  -1623,  -2856,
924      -104,   -257,   -452,   -388,  -2624,   5623,  17310,  -2353,
925       592,   -420,  -1930, -18288,   -338,    -21,    900,   2772,
926     -5941,   -376,    807,   2486,     94,   -203,   -625,     85,
927      1211,   -850,   1193,  -1926,  15992,    -89,    -44,    -86,
928      -226, -15609,     62,    -88,     61,    142,   -100,    140,
929     -1182,    830,  -1165,   1880,   3983,  -2054,  11506,    -19,
930      3622,   -968,   -257,  -8080,      0,   -801,    499,  -2797,
931      1442,      4,     -2,     13,   -880,    454,  -2544,      4,
932      -786,  -1354,  16092,   7246,  -1665,    -37,   -111, -15805,
933     -3205,   -169,    -65,    772,   1330,    348,    599,  -7117,
934       -80,   -137,   1636,    736,  -4316,   -511,   6674,  11665,
935      4633,  -1137,    -15,  -2719,  -8305,  -1310,   -134,   1758,
936       208,   3073,    364,  -4752,   1220,    144,  -1887,  -3299,
937      7912,   4557,   1937,   1885,   7037,  -3821,  -1267,   -229,
938      -216,  -3022,  -2200,   -935,   -538,   -910,   -524,   -222,
939     -3398,  -1957,   -832,   -809,   3434,   2967,   5867,   8196,
940      8766,   -720,   -537,  -2101,  -4100,  -4690,   -622,  -1230,
941     -1062,  -1718,  -1484,  -2935,  -1837,  -1588,  -3139,  -4385,
942      5881,   9176,   8119,   3934,   3355,  -2111,  -5139,  -4023,
943      -944,   -687,  -3294,  -2914,  -4547,  -1412,  -2203,  -1949,
944     -1204,  -1879,  -1662,   -805
945 };
946
947 static const int16_t adaptive_cb_gain170[170 * 20] = {
948         0,      0,      0,      0,      0,      0,      0,      0,
949         0,      0,      0,      0,      0,      0,      0,      0,
950         0,      0,      0,      0,    776,    212,    715,    670,
951       809,    -36,     -2,    -31,    -27,    -39,    -10,    -33,
952        -9,    -31,     -8,    -29,    -38,    -10,    -35,    -33,
953      1296,   1316,   -168,   -320,   -815,   -102,   -105,     -1,
954        -6,    -40,   -104,     13,     13,     25,     25,     -3,
955        64,     65,     -8,    -15,   -589,    680,   2478,    308,
956      -596,    -21,    -28,   -375,     -5,    -21,     24,     89,
957      -102,     11,    -12,    -46,    -21,     24,     90,     11,
958      -735,   -487,     -5,   2948,    468,    -33,    -14,      0,
959      -530,    -13,    -21,      0,      0,    132,     87,      0,
960        21,     13,      0,    -84,   1042,   1730,   1068,    333,
961       626,    -66,   -182,    -69,     -6,    -23,   -110,    -67,
962      -112,    -21,    -35,    -21,    -39,    -66,    -40,    -12,
963       486,   -769,   4074,   2825,  -1107,    -14,    -36,  -1013,
964      -487,    -74,     22,   -120,    191,    -83,    132,   -702,
965        32,    -52,    275,    191,   1521,   -767,   -124,   4320,
966      1026,   -141,    -35,      0,  -1139,    -64,     71,     11,
967        -5,   -401,    202,     32,    -95,     48,      7,   -270,
968      2425,   1267,   3439,    -91,  -1166,   -359,    -98,   -722,
969         0,    -83,   -187,   -509,   -266,     13,      7,     19,
970       172,     90,    244,     -6,  -1251,    975,    173,   4039,
971      2005,    -95,    -58,     -1,   -996,   -245,     74,     13,
972       -10,    308,   -240,    -42,    153,   -119,    -21,   -494,
973      1820,    632,   1322,   2062,   1031,   -202,    -24,   -106,
974      -259,    -64,    -70,   -146,    -51,   -229,    -79,   -166,
975      -114,    -39,    -83,   -129,   -447,   4904,    244,   -315,
976     -2038,    -12,  -1467,     -3,     -6,   -253,    134,      6,
977       -73,     -8,     94,      4,    -55,    610,     30,    -39,
978      -208,  -1102,    463,   -448,   5653,     -2,    -74,    -13,
979       -12,  -1950,    -14,      5,     31,     -5,    -30,     12,
980        71,    380,   -159,    154,   4739,   2600,  -1864,    856,
981     -1554,  -1371,   -412,   -212,    -44,   -147,   -752,    539,
982       295,   -247,   -135,     97,    449,    246,   -176,     81,
983      1894,   3533,     35,    -26,   2145,   -219,   -762,      0,
984         0,   -280,   -408,     -4,     -7,      3,      5,      0,
985      -248,   -462,     -4,      3,  -2699,   1841,   4072,   2443,
986      1582,   -444,   -207,  -1012,   -364,   -152,    303,    670,
987      -457,    402,   -274,   -607,    260,   -177,   -393,   -236,
988      -844,   3358,   6106,  -1059,   -537,    -43,   -688,  -2275,
989       -68,    -17,    173,    314,  -1251,    -54,    217,    395,
990       -27,    110,    200,    -34,   1251,   1016,   3020,   2210,
991      1445,    -95,    -63,   -556,   -298,   -127,    -77,   -230,
992      -187,   -168,   -137,   -407,   -110,    -89,   -266,   -194,
993      2099,   2277,   4038,   3533,  -2870,   -269,   -316,   -995,
994      -762,   -503,   -291,   -517,   -561,   -452,   -491,   -871,
995       367,    399,    707,    619,    400,  -1114,   8516,   2422,
996     -1117,     -9,    -75,  -4426,   -358,    -76,     27,   -208,
997       579,    -59,    164,  -1259,     27,    -75,    580,    165,
998     -4398,  -2011,   3912,  -2407,   2258,  -1180,   -247,   -934,
999      -353,   -311,   -540,   1050,    480,   -646,   -295,    575,
1000       606,    277,   -539,    331,   1767,  -1447,   4240,   6160,
1001      -757,   -190,   -127,  -1097,  -2316,    -35,    156,   -457,
1002       374,   -664,    544,  -1594,     81,    -66,    195,    284,
1003      1594,  -1463,   1035,   6938,   1920,   -155,   -130,    -65,
1004     -2938,   -225,    142,   -100,     92,   -675,    619,   -438,
1005      -186,    171,   -121,   -813,   -562,   4716,   4085,   -591,
1006      2421,    -19,  -1357,  -1018,    -21,   -357,    162,    140,
1007     -1175,    -20,    170,    147,     83,   -696,   -603,     87,
1008      1552,   8778,   -935,    354,  -1424,   -147,  -4703,    -53,
1009        -7,   -123,   -831,     88,    501,    -33,   -189,     20,
1010       134,    763,    -81,     30,   4831,  -4431,     41,  -1479,
1011     -2976,  -1424,  -1198,      0,   -133,   -540,   1306,    -12,
1012        11,    436,   -400,      3,    877,   -804,      7,   -268,
1013      2090,   1192,   1006,   1645,   4853,   -266,    -86,    -61,
1014      -165,  -1437,   -152,   -128,    -73,   -210,   -119,   -101,
1015      -619,   -353,   -298,   -487,   2386,   5712,   1426,    -94,
1016      1350,   -347,  -1991,   -124,      0,   -111,   -832,   -207,
1017      -497,     13,     32,      8,   -196,   -470,   -117,      7,
1018     -1349,   1091,   1659,   8891,    313,   -111,    -72,   -168,
1019     -4825,     -5,     89,    136,   -110,    732,   -592,   -900,
1020        25,    -20,    -31,   -170,   9980,    916,   -381,   -808,
1021        88,  -6080,    -51,     -8,    -39,      0,   -558,    232,
1022        21,    492,     45,    -18,    -53,     -4,      2,      4,
1023      2338,  -1031,   -248,   3928,   6484,   -333,    -64,     -3,
1024      -942,  -2566,    147,     35,    -15,   -560,    247,     59,
1025      -925,    408,     98,  -1555,   6166,  -1240,   -337,   3672,
1026     -1277,  -2320,    -93,     -6,   -823,    -99,    466,    126,
1027       -25,  -1382,    278,     75,    480,    -96,    -26,    286,
1028      4377,   -132,  -2588,   1701,   4865,  -1169,     -1,   -409,
1029      -176,  -1444,     35,    691,    -20,   -454,     13,    268,
1030     -1299,     39,    768,   -505,   2594,   3295,   3944,   1481,
1031       682,   -410,   -662,   -949,   -133,    -28,   -521,   -624,
1032      -793,   -234,   -297,   -356,   -108,   -137,   -164,    -61,
1033      4151,    624,    815,   4485,   2229,  -1052,    -23,    -40,
1034     -1228,   -303,   -158,   -206,    -31,  -1136,   -170,   -223,
1035      -565,    -84,   -111,   -610,  -3575,   -361,   4924,   2791,
1036      4698,   -780,     -7,  -1480,   -475,  -1347,    -78,   1074,
1037       108,    609,     61,   -839,   1025,    103,  -1412,   -800,
1038     -2518,   3791,   8623,    315,   2465,   -387,   -877,  -4538,
1039        -6,   -370,    582,   1325,  -1995,     48,    -73,   -166,
1040       378,   -570,  -1297,    -47,   -691,   2989,   9957,   -421,
1041     -1142,    -29,   -545,  -6051,    -10,    -79,    126,    420,
1042     -1817,    -17,     76,    256,    -48,    208,    694,    -29,
1043     -1918,    104,  -3190,  -3410,  -4440,   -224,      0,   -621,
1044      -709,  -1203,     12,   -373,     20,   -399,     21,   -664,
1045      -519,     28,   -864,   -924,  -3359,  -1668,   1854,   6939,
1046      1430,   -688,   -169,   -209,  -2939,   -124,   -341,    380,
1047       188,   1422,    706,   -785,    293,    145,   -161,   -606,
1048        42,   9706,   3164,   -952,    907,      0,  -5750,   -611,
1049       -55,    -50,    -25,     -8,  -1874,      2,    564,    183,
1050        -2,   -537,   -175,     52,   1607,    785,   2862,   4327,
1051      3307,   -157,    -37,   -500,  -1143,   -667,    -77,   -280,
1052      -137,   -424,   -207,   -756,   -324,   -158,   -577,   -873,
1053      6801,   3416,   2227,   1682,  -3217,  -2823,   -712,   -302,
1054      -172,   -631,  -1418,   -924,   -464,   -698,   -350,   -228,
1055      1335,    670,    437,    330,   3459,   3898,    364,   7841,
1056     -2640,   -730,   -927,     -8,  -3753,   -425,   -823,    -76,
1057       -86,  -1655,  -1865,   -174,    557,    628,     58,   1263,
1058     -5902,  -3458,  -2465,  -1886,   4334,  -2126,   -730,   -371,
1059      -217,  -1146,  -1245,   -888,   -520,   -679,   -398,   -283,
1060      1561,    915,    652,    499,  -3710,   1133,   7849,   3443,
1061      -215,   -840,    -78,  -3760,   -723,     -2,    256,   1777,
1062      -543,    779,   -238,  -1649,    -48,     14,    103,     45,
1063      4132,   2828,      2,  -4212,  -4116,  -1042,   -488,      0,
1064     -1083,  -1034,   -713,      0,      0,   1062,    727,      0,
1065      1038,    710,      0,  -1058,   5875,   8496,  -1796,   1376,
1066     -1786,  -2107,  -4406,   -197,   -115,   -194,  -3047,    644,
1067       931,   -493,   -713,    150,    640,    926,   -195,    150,
1068      3143,   3483,   3546,   -793,   4489,   -603,   -740,   -767,
1069       -38,  -1230,   -668,   -680,   -754,    152,    168,    171,
1070      -861,   -954,   -971,    217,   2845,   7965,   3695,  -5432,
1071      3978,   -494,  -3873,   -833,  -1801,   -966,  -1383,   -641,
1072     -1796,    943,   2641,   1225,   -691,  -1934,   -897,   1319,
1073      1538,    150,   7139,   2049,   3097,   -144,     -1,  -3110,
1074      -256,   -585,    -14,   -670,    -65,   -192,    -18,   -892,
1075      -290,    -28,  -1349,   -387,    618,   7520,   4729,   -238,
1076     -3373,    -23,  -3452,  -1365,     -3,   -694,   -283,   -178,
1077     -2170,      8,    109,     68,    127,   1548,    973,    -49,
1078      2965,  -3013,   7912,   7076,  -1997,   -536,   -554,  -3821,
1079     -3056,   -243,    545,  -1431,   1455,  -1280,   1301,  -3417,
1080       361,   -367,    964,    862,   2443,   -929,  -1113,   9677,
1081      4138,   -364,    -52,    -75,  -5716,  -1045,    138,    166,
1082       -63,  -1443,    549,    657,   -617,    234,    281,  -2444,
1083      1966,   3309,  10085,  -3399,   2105,   -236,   -668,  -6207,
1084      -705,   -270,   -397,  -1210,  -2037,    408,    686,   2092,
1085      -252,   -425,  -1295,    436,   -112,  -1368,   8868,   4822,
1086      2048,      0,   -114,  -4800,  -1419,   -256,     -9,     61,
1087       740,     33,    402,  -2610,     14,    171,  -1108,   -602,
1088     -2597,    438,  -1839,   6229,   7266,   -411,    -11,   -206,
1089     -2368,  -3223,     69,   -291,     49,    987,   -166,    699,
1090      1152,   -194,    816,  -2763,   3454,    553,   9127,   4946,
1091     -5596,   -728,    -18,  -5084,  -1493,  -1911,   -116,  -1924,
1092      -308,  -1042,   -166,  -2755,   1179,    188,   3117,   1689,
1093      -532,   -663,  12262,   2495,  -1004,    -17,    -26,  -9177,
1094      -380,    -61,    -21,    398,    496,     81,    101,  -1867,
1095       -32,    -40,    751,    152,  -2100,   1317,  -1509,  11425,
1096      2997,   -269,   -105,   -139,  -7967,   -548,    168,   -193,
1097       121,   1464,   -918,   1052,    384,   -240,    276,  -2090,
1098      1193,  -2697,  11259,   5373,   -763,    -86,   -444,  -7737,
1099     -1762,    -35,    196,   -819,   1853,   -391,    884,  -3692,
1100        55,   -125,    525,    250,   2405,   -471,  11079,    203,
1101       782,   -353,    -13,  -7491,     -2,    -37,     69,  -1626,
1102       318,    -29,      5,   -137,   -114,     22,   -529,     -9,
1103     -1871,   5685,  11290,  -2662,   1353,   -213,  -1972,  -7780,
1104      -432,   -111,    649,   1289,  -3917,   -304,    923,   1834,
1105       154,   -469,   -932,    220,  -3768,   5927,  -3093,   5041,
1106      5212,   -866,  -2144,   -584,  -1551,  -1658,   1363,   -711,
1107      1119,   1159,  -1824,    951,   1198,  -1885,    984,  -1603,
1108     -2546,   9502,   5969,  -2440,   1928,   -395,  -5511,  -2175,
1109      -363,   -226,   1477,    927,  -3462,   -379,   1415,    889,
1110       299,  -1118,   -702,    287,  -4963,   3568,   4592,   5508,
1111      3451,  -1503,   -777,  -1287,  -1851,   -727,   1080,   1391,
1112     -1000,   1668,  -1199,  -1543,   1045,   -751,   -967,  -1160,
1113      1745,  -2586,   3983,  10899,  -1551,   -186,   -408,   -968,
1114     -7250,   -146,    275,   -424,    628,  -1161,   1720,  -2649,
1115       165,   -244,    377,   1032,    867,   -456,   -727,   3369,
1116     11822,    -45,    -12,    -32,   -692,  -8531,     24,     38,
1117       -20,   -178,     93,    149,   -625,    329,    525,  -2431,
1118      7535,   2422,   1926,   1405,   1599,  -3466,   -358,   -226,
1119      -120,   -156,  -1114,   -886,   -284,   -646,   -207,   -165,
1120      -735,   -236,   -188,   -137,   1041,   -735,   -142,  13209,
1121      1515,    -66,    -33,     -1, -10649,   -140,     46,      9,
1122        -6,   -839,    593,    114,    -96,     68,     13,  -1222,
1123      7950,   6745,  -1444,  -1008,   2721,  -3857,  -2777,   -127,
1124       -62,   -452,  -3273,    700,    594,    489,    415,    -88,
1125     -1320,  -1120,    239,    167,  -4754,  -1379,   4522,   -578,
1126     -5733,  -1379,   -116,  -1248,    -20,  -2006,   -400,   1312,
1127       380,   -167,    -48,    159,  -1663,   -482,   1582,   -202,
1128      3220,   5978,   5923,   2430,  -2689,   -633,  -2181,  -2141,
1129      -360,   -441,  -1175,  -1164,  -2161,   -477,   -886,   -878,
1130       528,    981,    972,    398,    377,   1312,  13978,  -1470,
1131       677,     -8,   -105, -11925,   -132,    -28,    -30,   -321,
1132     -1119,     33,    117,   1254,    -15,    -54,   -577,     60,
1133     -3435,   6770,    314,   -885,   5686,   -720,  -2797,     -6,
1134       -47,  -1973,   1419,     65,   -129,   -185,    366,     16,
1135      1192,  -2349,   -109,    307,   3171,   8774,  -2260,   2679,
1136      3069,   -613,  -4699,   -312,   -438,   -575,  -1698,    437,
1137      1210,   -518,  -1435,    369,   -594,  -1643,    423,   -501,
1138      5557,   1509,   5407,   -125,  -7386,  -1884,   -139,  -1784,
1139         0,  -3330,   -511,  -1834,   -498,     42,     11,     41,
1140      2505,    680,   2438,    -56,  -2838,   2595,  13228,    271,
1141      1793,   -491,   -411, -10680,     -4,   -196,    449,   2291,
1142     -2095,     47,    -42,   -219,    310,   -284,  -1447,    -29,
1143       664,   -278,  14966,    951,   -711,    -26,     -4, -13672,
1144       -55,    -30,     11,   -606,    253,    -38,     16,   -869,
1145        28,    -12,    650,     41,    808,   1770,   8658,   5863,
1146     -1486,    -39,   -191,  -4576,  -2098,   -134,    -87,   -427,
1147      -935,   -289,   -633,  -3098,     73,    160,    785,    531,
1148      3063,   1539,   2000,   -542,   9576,   -572,   -144,   -244,
1149       -17,  -5597,   -287,   -374,   -188,    101,     51,     66,
1150     -1790,   -900,  -1169,    317,    514,  14083,   -323,    896,
1151      -891,    -16, -12106,     -6,    -49,    -48,   -442,     10,
1152       277,    -28,   -770,     17,     27,    766,    -17,     48,
1153       892,    158,   5237,  11057,  -1603,    -48,     -1,  -1674,
1154     -7462,   -156,     -8,   -285,    -50,   -602,   -106,  -3534,
1155        87,     15,    512,   1082,  -1612,   2564,  -4296,  12526,
1156      5710,   -158,   -401,  -1126,  -9576,  -1990,    252,   -422,
1157       672,   1232,  -1960,   3284,    561,   -893,   1497,  -4365,
1158      4889,  -6878,    612,   6109,   4753,  -1459,  -2887,    -22,
1159     -2277,  -1379,   2052,   -182,    257,  -1823,   2564,   -228,
1160     -1418,   1995,   -177,  -1772,   3053,   -506,   2403,   9625,
1161      1322,   -569,    -15,   -352,  -5655,   -106,     94,   -448,
1162        74,  -1794,    297,  -1412,   -246,     40,   -194,   -777,
1163      -754,  12904,   4480,  -2113,   1471,    -34, -10163,  -1225,
1164      -272,   -132,    594,    206,  -3529,    -97,   1664,    577,
1165        67,  -1159,   -402,    189,   4255,   1476,   5055,   2393,
1166      2912,  -1105,   -132,  -1559,   -349,   -517,   -383,  -1313,
1167      -455,   -621,   -215,   -738,   -756,   -262,   -898,   -425,
1168     -1371,    535,   1417,  14604,   -997,   -114,    -17,   -122,
1169    -13017,    -60,     44,    118,    -46,   1222,   -477,  -1263,
1170       -83,     32,     86,    888,   5368,  -1744,   4083,  -1236,
1171      3753,  -1758,   -185,  -1017,    -93,   -860,    571,  -1338,
1172       434,    405,   -131,    308,  -1229,    399,   -935,    283,
1173      1588,  -3097,  14415,   3699,  -1171,   -154,   -585, -12683,
1174      -835,    -83,    300,  -1397,   2725,   -358,    699,  -3255,
1175       113,   -221,   1030,    264,    212,   7989,   9471,  -3344,
1176      2009,     -2,  -3895,  -5475,   -682,   -246,   -103,   -123,
1177     -4618,     43,   1630,   1933,    -26,   -979,  -1161,    410,
1178       856,   2294,   -627,   6930,   6929,    -44,   -321,    -24,
1179     -2931,  -2930,   -119,     32,     87,   -362,   -970,    265,
1180      -362,   -970,    265,  -2931,   2357,  -4187,   7162,   7683,
1181      3371,   -339,  -1070,  -3131,  -3603,   -693,    602,  -1030,
1182      1830,  -1105,   1963,  -3359,   -485,    861,  -1474,  -1581,
1183       350,   4585,  14053,  -3819,   1218,     -7,  -1283, -12054,
1184      -890,    -90,    -97,   -300,  -3933,     81,   1068,   3275,
1185       -26,   -341,  -1045,    284,  -3248,   3531,    475,   2137,
1186     11711,   -644,   -761,    -13,   -278,  -8372,    700,     94,
1187      -102,    423,   -460,    -62,   2322,  -2524,   -340,  -1528,
1188     -3017,   3852,   1725,   8440,   5257,   -555,   -905,   -181,
1189     -4348,  -1686,    709,    317,   -405,   1554,  -1984,   -889,
1190       968,  -1236,   -553,  -2708,   -909,   3196,  15512,  -2528,
1191      1066,    -50,   -623, -14686,   -390,    -69,    177,    861,
1192     -3026,   -140,    493,   2393,     59,   -208,  -1009,    164,
1193       959,  -3370,   9617,   9545,  -1761,    -56,   -693,  -5645,
1194     -5561,   -189,    197,   -563,   1978,   -558,   1963,  -5603,
1195       103,   -362,   1034,   1026,   7575,  11796,  -4845,   3252,
1196     -1703,  -3502,  -8493,  -1433,   -645,   -177,  -5454,   2240,
1197      3488,  -1503,  -2341,    961,    787,   1226,   -503,    338,
1198      6409,   1722,   1764,  -4191,   6015,  -2507,   -181,   -189,
1199     -1072,  -2208,   -673,   -690,   -185,   1639,    440,    451,
1200     -2353,   -632,   -647,   1538,  -2420,  12161,   5038,   1286,
1201     -2098,   -357,  -9027,  -1549,   -100,   -268,   1796,    744,
1202     -3740,    190,   -954,   -395,   -310,   1557,    645,    164,
1203     -2232,  -1341,   7246,   9470,  -1977,   -304,   -109,  -3204,
1204     -5474,   -238,   -182,    987,    593,   1290,    775,  -4188,
1205      -269,   -161,    874,   1143,   1030,   7034,   4231,   1551,
1206      3077,    -64,  -3019,  -1093,   -146,   -577,   -442,   -266,
1207     -1816,    -97,   -666,   -400,   -193,  -1321,   -794,   -291,
1208      5121,  11835,   -477,  -1749,   2298,  -1601,  -8549,    -13,
1209      -186,   -322,  -3699,    149,    344,    546,   1264,    -50,
1210      -718,  -1660,     66,    245,  -3328,   3827,   5921,   9976,
1211     -1045,   -676,   -894,  -2140,  -6075,    -66,    777,   1203,
1212     -1383,   2027,  -2330,  -3605,   -212,    244,    377,    636,
1213      3813,   5718,  -4666,  -3412,   5674,   -887,  -1995,  -1329,
1214      -710,  -1965,  -1331,   1086,   1628,    794,   1191,   -972,
1215     -1320,  -1980,   1616,   1181,   1348,  -3672,  13154,   6938,
1216     -1690,   -110,   -823, -10561,  -2938,   -174,    302,  -1082,
1217      2948,   -570,   1555,  -5570,    139,   -379,   1357,    716,
1218      2151,  -3586,   6949,  12131,  -1224,   -282,   -785,  -2947,
1219     -8982,    -91,    470,   -912,   1521,  -1592,   2655,  -5145,
1220       160,   -268,    519,    906,  -2889,   9647,  10276,  -2728,
1221       995,   -509,  -5680,  -6445,   -454,    -60,   1701,   1812,
1222     -6051,   -481,   1606,   1711,    175,   -586,   -624,    165,
1223      6177,   2184,    555,   1985,   6589,  -2329,   -291,    -18,
1224      -240,  -2650,   -823,   -209,    -74,   -748,   -264,    -67,
1225     -2484,   -878,   -223,   -798,   -492,    391,  17166,   -681,
1226       240,    -14,     -9, -17987,    -28,     -3,     11,    515,
1227      -410,    -20,     16,    713,      7,     -5,   -252,     10,
1228     12628,   5448,  -2630,   3011,  -2695,  -9733,  -1811,   -422,
1229      -553,   -443,  -4199,   2027,    874,  -2321,  -1001,    483,
1230      2077,    896,   -432,    495,  -3628,   -534,   3447,   7002,
1231      6751,   -803,    -17,   -725,  -2992,  -2782,   -118,    763,
1232       112,   1550,    228,  -1473,   1495,    220,  -1420,  -2885,
1233     -5239,   5901,   8107,   3650,   4846,  -1675,  -2125,  -4012,
1234      -813,  -1433,   1887,   2592,  -2920,   1167,  -1315,  -1806,
1235      1550,  -1745,  -2398,  -1080,   6157,   6678,   4099,  -1074,
1236      2348,  -2314,  -2722,  -1025,    -70,   -336,  -2509,  -1540,
1237     -1670,    403,    437,    268,   -882,   -957,   -587,    153,
1238      1079,  16099,    242,   -881,   1690,    -71, -15820,     -3,
1239       -47,   -174,  -1060,    -16,   -238,     58,    865,     13,
1240      -111,  -1661,    -25,     90,   -278,    227,  -1039,   1636,
1241     16945,     -4,     -3,    -65,   -163, -17526,      3,    -17,
1242        14,     27,    -22,    103,    287,   -234,   1074,  -1693,
1243     15778,  -1454,    574,   -603,   -107, -15195,   -129,    -20,
1244       -22,      0,   1400,   -553,     51,    581,    -53,     21,
1245       103,     -9,      3,     -3,   2406,   -836,  13224,   7993,
1246     -4266,   -353,    -42, -10673,  -3899,  -1111,    122,  -1942,
1247       674,  -1174,    407,  -6451,    626,   -217,   3443,   2081,
1248      3184,  14368,  -3336,   2255,  -1801,   -619, -12600,   -679,
1249      -310,   -198,  -2793,    648,   2926,   -438,  -1977,    459,
1250       350,   1580,   -366,    247,  -1698,  17076,   2504,   -539,
1251      -646,   -176, -17798,   -382,    -17,    -25,   1770,    259,
1252     -2610,    -55,    561,     82,    -67,    673,     98,    -21,
1253      2375,   -797,  -2696,  14483,   5383,   -344,    -38,   -443,
1254    -12803,  -1769,    115,    391,   -131,  -2100,    705,   2384,
1255      -780,    262,    886,  -4759,  -2691,   2554,  -4520,   9573,
1256     10655,   -442,   -398,  -1247,  -5594,  -6930,    419,   -742,
1257       704,   1572,  -1492,   2641,   1750,  -1661,   2939,  -6226,
1258     -4332,  -4399,  -1657,   4880,   7375,  -1145,  -1181,   -167,
1259     -1453,  -3319,  -1163,   -438,   -444,   1290,   1310,    493,
1260      1950,   1980,    745,  -2196,  -3498,   7405,   9955,   2693,
1261     -2971,   -746,  -3347,  -6049,   -442,   -538,   1581,   2125,
1262     -4499,    575,  -1217,  -1636,   -634,   1342,   1805,    488,
1263      6717,  -3792,   7739,   2798,   3489,  -2754,   -877,  -3655,
1264      -477,   -743,   1554,  -3173,   1791,  -1147,    647,  -1321,
1265     -1430,    807,  -1648,   -595,   5263,   9770,   3463,   1069,
1266     -3971,  -1690,  -5826,   -732,    -69,   -962,  -3138,  -1112,
1267     -2065,   -343,   -637,   -226,   1275,   2368,    839,    259,
1268      1243,  -2634,  16772,   1871,    332,    -94,   -423, -17169,
1269      -213,     -6,    199,  -1273,   2696,   -142,    300,  -1915,
1270       -25,     53,   -339,    -37,   2691,   2836,   3105,   5711,
1271      4817,   -442,   -491,   -588,  -1991,  -1416,   -465,   -510,
1272      -537,   -938,   -988,  -1082,   -791,   -834,   -913,  -1679,
1273      4366,   2944,   7210,   3627,   1161,  -1163,   -529,  -3172,
1274      -803,    -82,   -784,  -1921,  -1295,   -966,   -651,  -1596,
1275      -309,   -208,   -511,   -257,  13888,   3951,   -671,  -2305,
1276      3354, -11773,   -953,    -27,   -324,   -686,  -3349,    569,
1277       161,   1954,    556,    -94,  -2843,   -809,    137,    472,
1278      7053,   5847,   2929,   8378,  -4794,  -3036,  -2086,   -523,
1279     -4284,  -1403,  -2517,  -1261,  -1045,  -3607,  -2990,  -1498,
1280      2064,   1711,    857,   2451,  -2191,  12838,   9182,  -3915,
1281      1617,   -293, -10059,  -5146,   -935,   -159,   1717,   1228,
1282     -7195,   -523,   3068,   2194,    216,  -1267,   -906,    386,
1283     -4881,  13114,   5767,   -435,   4155,  -1454, -10498,  -2030,
1284       -11,  -1054,   3907,   1718,  -4616,   -129,    348,    153,
1285      1238,  -3326,  -1462,    110,   7843,  -1250,    210,   7106,
1286     -5203,  -3754,    -95,     -2,  -3082,  -1652,    598,   -100,
1287        16,  -3402,    542,    -91,   2491,   -397,     66,   2257,
1288     -2463,   8168,  14551,  -3908,   1828,   -370,  -4072, -12923,
1289      -932,   -204,   1228,   2188,  -7254,   -587,   1948,   3471,
1290       274,   -911,  -1623,    436,  -1579,    347,   -272,  -2735,
1291     16031,   -152,     -7,     -4,   -456, -15686,     33,    -26,
1292         5,   -263,     58,    -45,   1545,   -340,    266,   2676,
1293     -6327,   1328,   5093,  -5079,   7617,  -2443,   -107,  -1583,
1294     -1574,  -3541,    513,   1967,   -413,  -1961,    411,   1578,
1295      2941,   -617,  -2367,   2361,   3286,  -4509,  11306,  11025,
1296     -2623,   -659,  -1241,  -7802,  -7419,   -420,    904,  -2267,
1297      3112,  -2211,   3034,  -7608,    526,   -722,   1810,   1765,
1298      5567,  17853,  -3754,   1166,   -519,  -1892, -19455,   -860,
1299       -83,    -16,  -6067,   1275,   4090,   -396,  -1271,    267,
1300       176,    566,   -119,     37,  -2136,   -424,  15292,   5108,
1301     -1648,   -278,    -10, -14273,  -1593,   -165,    -55,   1993,
1302       396,    666,    132,  -4768,   -214,    -42,   1538,    514,
1303      2267,  -3297,   2549,  16563,   -791,   -313,   -663,   -396,
1304    -16745,    -38,    456,   -352,    513,  -2291,   3333,  -2576,
1305       109,   -159,    123,    799,   3655,   1899,  -3364,   6279,
1306     12510,   -815,   -220,   -690,  -2406,  -9552,   -423,    750,
1307       390,  -1400,   -728,   1289,  -2791,  -1450,   2568,  -4794,
1308      8052,   2285,  -6193,   5138,   6003,  -3957,   -318,  -2341,
1309     -1611,  -2199,  -1123,   3044,    864,  -2525,   -716,   1942,
1310     -2950,   -837,   2269,  -1882,   -386,  -2291,   7679,  15387,
1311     -2723,     -9,   -320,  -3599, -14452,   -452,    -54,    181,
1312      1074,    362,   2152,  -7212,    -64,   -380,   1276,   2557,
1313      2777,  -1173,   3984,  13079,   2508,   -470,    -84,   -969,
1314    -10440,   -384,    198,   -675,    285,  -2217,    936,  -3180,
1315      -425,    179,   -610,  -2002,  -1879,   1771,  -2684,  16705,
1316      1833,   -215,   -191,   -439, -17032,   -205,    203,   -308,
1317       290,   1916,  -1805,   2736,    210,   -198,    300,  -1869,
1318      1052,   4495,  15519,   1467,  -4032,    -67,  -1233, -14700,
1319      -131,   -992,   -288,   -997,  -4257,    -94,   -402,  -1389,
1320       259,   1106,   3819,    361,   3010,   2544,   6969,   7559,
1321      1996,   -553,   -395,  -2964,  -3487,   -243,   -467,  -1280,
1322     -1082,  -1388,  -1174,  -3215,   -366,   -310,   -849,   -921,
1323     -5209,  -1867,   8713,  10351,   1549,  -1656,   -212,  -4634,
1324     -6540,   -146,   -593,   2770,    993,   3291,   1180,  -5505,
1325       492,    176,   -824,   -979,  -4314,   8513,    913,   7547,
1326     -2723,  -1135,  -4423,    -50,  -3476,   -452,   2241,    240,
1327      -474,   1987,  -3921,   -420,   -717,   1415,    151,   1254,
1328     12929,  -1219,   2448,   1757,   6303, -10204,    -90,   -365,
1329      -188,  -2425,    962,  -1932,    182,  -1386,    130,   -262,
1330     -4974,    469,   -941,   -676,   6465,   4132,   3167,   3160,
1331      5697,  -2551,  -1042,   -612,   -609,  -1981,  -1630,  -1249,
1332      -798,  -1247,   -797,   -611,  -2248,  -1437,  -1101,  -1099,
1333     -3636,   4859,  18914,  -1335,    810,   -807,  -1441, -21836,
1334      -108,    -40,   1078,   4198,  -5609,   -296,    396,   1541,
1335       179,   -240,   -936,     66,   8844,   7864,    654,  -4063,
1336     -5680,  -4774,  -3774,    -26,  -1007,  -1969,  -4245,   -353,
1337      -314,   2193,   1950,    162,   3066,   2726,    226,  -1408,
1338      1859,   2634,   9228,    996,   9464,   -211,   -423,  -5197,
1339       -60,  -5467,   -299,  -1047,  -1483,   -113,   -160,   -561,
1340     -1074,  -1521,  -5330,   -575,   2949,  12260,  10290,   -497,
1341     -3943,   -530,  -9174,  -6463,    -15,   -949,  -2206,  -1852,
1342     -7700,     89,    372,    312,    709,   2950,   2476,   -119,
1343     -2903,   1552,  14867,   9970,   -496,   -514,   -147, -13491,
1344     -6068,    -15,    275,   2634,  -1408,   1766,   -944,  -9047,
1345       -87,     47,    450,    302,   3243,   8234,   7586,   3373,
1346      2151,   -642,  -4138,  -3512,   -694,   -282,  -1630,  -1501,
1347     -3812,   -667,  -1695,  -1561,   -425,  -1081,   -996,   -442,
1348     -9631,     60,   3501,   5359,  10150,  -5662,      0,   -748,
1349     -1752,  -6288,     35,   2058,    -12,   3150,    -19,  -1145,
1350      5967,    -37,  -2169,  -3320,  -6874,  -2553,  -5446,  -2195,
1351     -7841,  -2884,   -397,  -1810,   -294,  -3753,  -1071,  -2285,
1352      -848,   -921,   -342,   -729,  -3290,  -1221,  -2606,  -1050,
1353     -3413,  -1141,   4630,  13612,   7897,   -711,    -79,  -1308,
1354    -11310,  -3806,   -237,    964,    322,   2836,    948,  -3847,
1355      1645,    550,  -2231,  -6561,   4410,  -5678,   8006,  -3992,
1356      3811,  -1187,  -1968,  -3912,   -973,   -886,   1528,  -2155,
1357      2775,   1074,  -1383,   1951,  -1025,   1321,  -1862,    928,
1358      5659,  11535,   2203,   -452,   7169,  -1954,  -8121,   -296,
1359       -12,  -3137,  -3984,   -761,  -1551,    156,    318,     60,
1360     -2476,  -5048,   -964,    197,   2914,  -2914,   3485,  -3965,
1361     13675,   -518,   -518,   -741,   -959, -11414,    518,   -620,
1362       620,    705,   -705,    843,  -2433,   2432,  -2909,   3310,
1363      7843,   1907,   1022,   8882,   7972,  -3755,   -222,    -63,
1364     -4815,  -3879,   -913,   -489,   -119,  -4252,  -1034,   -554,
1365     -3816,   -928,   -497,  -4322,  13807,   9531,   1436,   1612,
1366      1779, -11636,  -5544,   -125,   -158,   -193,  -8032,  -1210,
1367      -835,  -1358,   -938,   -141,  -1499,  -1035,   -156,   -175,
1368     13620,  -5337,   5450,  -2263,   1723, -11322,  -1738,  -1813,
1369      -312,   -181,   4436,  -4531,   1775,   1881,   -737,    752,
1370     -1432,    561,   -573,    238,   5297,   8374,   8872,   7694,
1371      6538,  -1712,  -4280,  -4804,  -3613,  -2609,  -2707,  -2868,
1372     -4534,  -2487,  -3932,  -4166,  -2113,  -3341,  -3540,  -3070
1373 };
1374
1375 /**
1376  * 0.65^i (Zero part) and 0.75^i (Pole part) scaled by 2^15
1377  */
1378 static const int16_t postfilter_tbl[2][LPC_ORDER] = {
1379     /* Zero */
1380     {21299, 13844,  8999,  5849, 3802, 2471, 1606, 1044,  679,  441},
1381     /* Pole */
1382     {24576, 18432, 13824, 10368, 7776, 5832, 4374, 3281, 2460, 1845}
1383 };
1384
1385 /**
1386  * Hamming window coefficients scaled by 2^15
1387  */
1388 static const int16_t hamming_window[LPC_FRAME] = {
1389      2621,  2631,  2659,  2705,  2770,  2853,  2955,  3074,  3212,  3367,
1390      3541,  3731,  3939,  4164,  4405,  4663,  4937,  5226,  5531,  5851,
1391      6186,  6534,  6897,  7273,  7661,  8062,  8475,  8899,  9334,  9780,
1392     10235, 10699, 11172, 11653, 12141, 12636, 13138, 13645, 14157, 14673,
1393     15193, 15716, 16242, 16769, 17298, 17827, 18356, 18884, 19411, 19935,
1394     20457, 20975, 21489, 21999, 22503, 23002, 23494, 23978, 24455, 24924,
1395     25384, 25834, 26274, 26704, 27122, 27529, 27924, 28306, 28675, 29031,
1396     29373, 29700, 30012, 30310, 30592, 30857, 31107, 31340, 31557, 31756,
1397     31938, 32102, 32249, 32377, 32488, 32580, 32654, 32710, 32747, 32766,
1398     32766, 32747, 32710, 32654, 32580, 32488, 32377, 32249, 32102, 31938,
1399     31756, 31557, 31340, 31107, 30857, 30592, 30310, 30012, 29700, 29373,
1400     29031, 28675, 28306, 27924, 27529, 27122, 26704, 26274, 25834, 25384,
1401     24924, 24455, 23978, 23494, 23002, 22503, 21999, 21489, 20975, 20457,
1402     19935, 19411, 18884, 18356, 17827, 17298, 16769, 16242, 15716, 15193,
1403     14673, 14157, 13645, 13138, 12636, 12141, 11653, 11172, 10699, 10235,
1404      9780, 9334,   8899,  8475,  8062,  7661,  7273,  6897,  6534,  6186,
1405      5851, 5531,   5226,  4937,  4663,  4405,  4164,  3939,  3731,  3541,
1406      3367, 3212,   3074,  2955,  2853,  2770,  2705,  2659,  2631,  2621
1407 };
1408
1409 /**
1410  * Binomial window coefficients scaled by 2^15
1411  */
1412 static const int16_t binomial_window[LPC_ORDER] = {
1413     32749, 32695, 32604, 32477, 32315, 32118, 31887, 31622, 31324, 30995
1414 };
1415
1416 /**
1417  * 0.994^i scaled by 2^15
1418  */
1419 static const int16_t bandwidth_expand[LPC_ORDER] = {
1420     32571, 32376, 32182, 31989, 31797, 31606, 31416, 31228, 31040, 30854
1421 };
1422
1423 /**
1424  * 0.5^i scaled by 2^15
1425  */
1426 static const int16_t percept_flt_tbl[2][LPC_ORDER] = {
1427     /* Zero part */
1428     {29491, 26542, 23888, 21499, 19349, 17414, 15673, 14106, 12695, 11425},
1429     /* Pole part */
1430     {16384,  8192,  4096,  2048,  1024,   512,   256,   128,    64,    32}
1431 };
1432
1433 static const int cng_adaptive_cb_lag[4] = { 1, 0, 1, 3 };
1434
1435 static const int cng_filt[4] = { 273, 998, 499, 333 };
1436
1437 static const int cng_bseg[3] = { 2048, 18432, 231233 };
1438
1439 #endif /* AVCODEC_G723_1_H */