2 * Real Audio 1.0 (14.4K)
3 * Copyright (c) 2003 the ffmpeg project
5 * This file is part of Libav.
7 * Libav is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
12 * Libav is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with Libav; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24 #include "celp_filters.h"
27 const int16_t ff_gain_val_tab[256][3] = {
28 { 541, 956, 768}, { 877, 581, 568}, { 675,1574, 635}, {1248,1464, 668},
29 {1246, 839, 1394}, {2560,1386, 991}, { 925, 687, 608}, {2208, 797, 1144},
30 { 535, 832, 799}, { 762, 605, 1154}, { 832,1122, 1003}, {1180, 687, 1176},
31 {1292, 901, 732}, {1656, 689, 896}, {1750,1248, 848}, {2284, 942, 1022},
32 { 824,1472, 643}, { 517, 765, 512}, { 562,1816, 1522}, { 694,1826, 2700},
33 { 704, 524, 672}, {1442, 757, 2232}, { 884, 551, 1266}, {2232,1007, 1692},
34 { 932, 746, 777}, {1132, 822, 926}, {1226, 771, 611}, {2948,1342, 1008},
35 {1302, 594, 1158}, {1602, 636, 1128}, {3408, 910, 1438}, {1996, 614, 575},
36 { 665, 935, 628}, { 631,1192, 829}, { 644, 926, 1052}, { 879, 988, 1226},
37 { 941,2768, 2772}, { 565,1344, 2304}, { 547, 628, 740}, { 639, 532, 1074},
38 { 955,1208, 598}, {1124,1160, 900}, {1206, 899, 1242}, { 746, 533, 624},
39 {1458,1028, 735}, {1706,1102, 692}, {1898,1018, 1004}, {2176, 988, 735},
40 {1578, 782, 1642}, { 897, 516, 754}, {2068, 702, 1656}, {2344, 818, 1526},
41 { 907, 652, 592}, {1056, 652, 642}, {2124,1416, 780}, {2664,1250, 727},
42 {1894, 727, 1108}, {2196, 657, 981}, {4840, 920, 1704}, {4992,1238, 983},
43 {2420, 909, 1094}, {2760, 935, 1032}, {2800, 612, 853}, {3068, 832, 574},
44 { 523,1796, 923}, { 722,1916, 1382}, {1226,1542, 928}, { 758, 757, 584},
45 { 512,1134, 577}, { 615,1276, 698}, { 574,2568, 2356}, { 993,2728, 3512},
46 { 539, 890, 913}, { 694, 928, 1088}, { 805, 600, 1360}, {2160, 951, 3128},
47 { 816, 950, 590}, { 955, 847, 811}, {1094, 883, 556}, {1304, 888, 604},
48 { 863,1170, 855}, {1023, 997, 1032}, { 932,1228, 1280}, { 627, 564, 573},
49 { 876, 900, 1448}, {1030, 857, 1792}, {1294, 953, 1758}, {1612, 854, 1714},
50 {1090,1166, 631}, {1314,1202, 751}, {1480, 905, 795}, {1682,1016, 568},
51 {1494,1178, 983}, { 878, 613, 526}, {1728,1446, 779}, {2136,1348, 774},
52 { 950, 649, 939}, {1180, 703, 899}, {1236, 527, 1158}, {1450, 647, 972},
53 {1282, 647, 707}, {1460, 663, 644}, {1614, 572, 578}, {3516,1222, 821},
54 {2668, 729, 1682}, {3128, 585, 1502}, {3208, 733, 976}, {6800, 871, 1416},
55 {3480, 743, 1408}, {3764, 899, 1170}, {3772, 632, 875}, {4092, 732, 638},
56 {3112, 753, 2620}, {3372, 945, 1890}, {3768, 969, 2288}, {2016, 559, 854},
57 {1736, 729, 787}, {1940, 686, 547}, {2140, 635, 674}, {4480,1272, 828},
58 {3976, 592, 1666}, {4384, 621, 1388}, {4400, 801, 955}, {4656, 522, 646},
59 {4848, 625, 1636}, {4984, 591, 874}, {5352, 535, 1001}, {11216,938, 1184},
60 { 925,3280, 1476}, { 735,1580, 1088}, {1150,1576, 674}, { 655, 783, 528},
61 { 527,2052, 1354}, { 782,1704, 1880}, { 578, 910, 1026}, { 692, 882, 1468},
62 { 586, 683, 715}, { 739, 609, 717}, { 778, 773, 697}, { 922, 785, 813},
63 { 766, 651, 984}, { 978, 596, 1030}, {1070, 757, 1080}, {1324, 687, 1178},
64 {1108,2144, 979}, { 723, 982, 690}, { 936, 956, 527}, {1180,1002, 547},
65 { 517,1306, 825}, { 832,1184, 974}, {1024, 957, 903}, {1262,1090, 906},
66 {1028, 720, 649}, {1192, 679, 694}, {2468,1480, 979}, {2844,1370, 877},
67 {1310, 835, 848}, {1508, 839, 698}, {1742,1030, 769}, {1910, 852, 573},
68 {1280, 859, 1174}, {1584, 863, 1108}, {1686, 708, 1364}, {1942, 768, 1104},
69 { 891, 536, 690}, {1016, 560, 663}, {2172, 870, 1348}, {2404, 999, 1170},
70 {1890, 966, 889}, {2116, 912, 777}, {2296,1020, 714}, {4872,1844, 932},
71 {2392, 778, 929}, {2604, 772, 744}, {2764, 957, 722}, {5832,1532, 984},
72 {2188, 519, 1264}, {2332, 532, 922}, {5064, 995, 2412}, {2708, 571, 874},
73 {2408, 545, 666}, {5016,1084, 875}, {5376, 983, 1196}, {5536, 979, 730},
74 {5344, 634, 1744}, {5688, 706, 1348}, {5912, 977, 1190}, {6072, 905, 763},
75 {6048, 582, 1526}, {11968,1013,1816}, {12864,937, 1900}, {12560,1086, 998},
76 {1998, 684, 1884}, {2504, 633, 1992}, {1252, 567, 835}, {1478, 571, 973},
77 {2620, 769, 1414}, {2808, 952, 1142}, {2908, 712, 1028}, {2976, 686, 741},
78 {1462, 552, 714}, {3296, 991, 1452}, {1590, 615, 544}, {3480,1150, 824},
79 {3212, 832, 923}, {3276, 839, 531}, {3548, 786, 852}, {3732, 764, 570},
80 {5728, 906, 2616}, {6272, 804, 2252}, {3096, 535, 876}, {3228, 598, 649},
81 {6536, 759, 1436}, {6648, 993, 846}, {6864, 567, 1210},{14016,1012, 1302},
82 {3408, 548, 1098}, {7160,1008, 1742}, {7136,1000, 1182}, {7480,1032, 836},
83 {7448, 612, 1552}, {7744, 614, 816}, {8384, 777, 1438}, {8784, 694, 786},
84 { 882,1508, 1068}, { 597, 837, 766}, {1270, 954, 1408}, { 803, 550, 798},
85 {1398,1308, 798}, {1848,1534, 738}, { 970, 675, 608}, {1264, 706, 684},
86 {1716, 767, 1126}, {2108, 765, 1404}, {2236, 924, 1003}, {2472,1048, 611},
87 { 999, 942, 963}, {1094, 857, 935}, {2936, 926, 1138}, {1934, 746, 551},
88 {3336, 633, 1762}, {3764, 701, 1454}, {1890, 564, 636}, {4096,1126, 793},
89 {3936, 556, 1140}, {3936, 540, 740}, {4216, 764, 874}, {8480,1328, 1014},
90 {2184, 515, 1042}, {4432, 934, 1344}, {4784, 945, 1112}, {5016,1062, 733},
91 {9216,1020, 2028}, {9968, 924, 1188}, {5424, 909, 1206}, {6512, 744, 1086}
94 const uint8_t ff_gain_exp_tab[256] = {
95 15, 15, 15, 15, 15, 16, 14, 15, 14, 14, 14, 14, 14, 14, 14, 14,
96 14, 13, 14, 14, 13, 14, 13, 14, 13, 13, 13, 14, 13, 13, 14, 13,
97 13, 13, 13, 13, 14, 13, 12, 12, 13, 13, 13, 12, 13, 13, 13, 13,
98 13, 12, 13, 13, 12, 12, 13, 13, 13, 13, 14, 14, 13, 13, 13, 13,
99 13, 13, 13, 12, 12, 12, 13, 13, 12, 12, 12, 13, 12, 12, 12, 12,
100 12, 12, 12, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 11, 12, 12,
101 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 14, 13, 13, 13, 13,
102 13, 13, 13, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 14,
103 13, 12, 12, 11, 12, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
104 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 11, 11, 11, 11,
105 12, 12, 12, 12, 11, 11, 12, 12, 12, 12, 12, 13, 12, 12, 12, 13,
106 12, 12, 13, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14,
107 12, 12, 11, 11, 12, 12, 12, 12, 11, 12, 11, 12, 12, 12, 12, 12,
108 13, 13, 12, 12, 13, 13, 13, 14, 12, 13, 13, 13, 13, 13, 13, 13,
109 11, 10, 11, 10, 11, 11, 10, 10, 11, 11, 11, 11, 10, 9, 11, 10,
110 12, 12, 11, 12, 12, 12, 12, 13, 11, 12, 12, 12, 13, 13, 12, 12
113 const int8_t ff_cb1_vects[128][40]={
115 38, -4, 15, -4, 14, -13, 12, -11, -2, -6,
116 -6, -11, -45, -16, -11, -13, -7, 6, -12, 4,
117 -20, 3, -16, 12, -1, 12, 46, 24, 0, 33,
118 -3, 9, -12, -12, -8, -7, 17, -6, 0, -2,
120 60, -16, 3, -22, 10, -32, 0, -28, -17, -18,
121 -3, -25, -37, -23, -10, 3, 2, 3, 0, 3,
122 -14, 0, -14, -1, 0, 2, 32, 9, -1, 25,
123 7, 13, -5, 13, 8, 1, 2, 8, -10, 6,
125 27, -12, 28, -2, 6, -7, 15, 9, -11, 1,
126 -13, -11, -40, 4, -29, -14, -19, -5, -23, -8,
127 -30, -13, -17, 0, -14, 12, 34, 20, -2, 25,
128 2, -16, -4, -12, 15, 16, 29, 7, 24, 10,
130 49, -24, 16, -20, 2, -26, 2, -7, -25, -10,
131 -11, -25, -32, -3, -27, 2, -8, -8, -11, -9,
132 -24, -17, -16, -14, -13, 2, 20, 5, -4, 17,
133 14, -12, 3, 13, 33, 25, 14, 23, 15, 19,
135 46, -6, 21, 8, -2, -16, -5, -8, -11, 4,
136 8, 15, -24, 4, -2, -26, -3, -16, -16, -14,
137 -9, -2, -1, 4, 19, 7, 36, 17, 9, 13,
138 0, 31, -5, -12, 7, -8, 11, -15, -13, -4,
140 68, -18, 9, -9, -6, -35, -18, -25, -26, -7,
141 10, 1, -16, -3, -1, -9, 6, -19, -4, -15,
142 -4, -6, 0, -8, 20, -2, 23, 2, 7, 5,
143 12, 35, 1, 13, 24, 0, -3, 0, -22, 4,
145 35, -14, 34, 10, -10, -10, -1, 12, -20, 12,
146 0, 15, -18, 24, -20, -27, -14, -28, -27, -27,
147 -20, -19, -2, -8, 5, 7, 25, 13, 5, 5,
148 6, 5, 2, -12, 31, 15, 23, -1, 12, 8,
150 57, -26, 22, -7, -14, -28, -14, -3, -35, 0,
151 3, 1, -11, 16, -18, -10, -4, -31, -15, -28,
152 -14, -23, -1, -21, 7, -2, 11, -1, 3, -1,
153 18, 9, 10, 13, 49, 24, 8, 14, 2, 16,
155 25, 15, 22, 11, 18, 4, 15, -22, 8, -2,
156 -17, -9, -48, -20, -30, -17, -16, 11, -1, 16,
157 2, 10, -5, 26, -2, -4, 22, 0, 2, 10,
158 -6, 13, -14, 10, -23, 0, 10, -2, 1, 0,
160 47, 3, 11, -6, 15, -13, 2, -38, -6, -13,
161 -15, -22, -40, -28, -28, 0, -5, 8, 10, 15,
162 7, 7, -4, 13, -1, -14, 9, -14, 0, 2,
163 4, 18, -7, 36, -6, 8, -3, 13, -7, 8,
165 14, 7, 36, 13, 10, 10, 18, 0, 0, 5,
166 -25, -8, -43, 0, -48, -18, -27, 0, -12, 3,
167 -7, -6, -7, 13, -15, -5, 11, -3, 0, 2,
168 0, -12, -6, 10, 0, 23, 22, 11, 26, 12,
170 36, -5, 24, -4, 7, -7, 6, -17, -14, -5,
171 -22, -22, -35, -8, -46, -1, -17, -3, 0, 2,
172 -2, -10, -5, 0, -14, -15, -2, -18, -2, -4,
173 11, -7, 1, 36, 18, 32, 7, 27, 17, 20,
175 33, 13, 29, 24, 1, 1, -2, -18, 0, 9,
176 -3, 17, -27, 0, -21, -30, -12, -11, -5, -2,
177 12, 4, 9, 19, 18, -9, 13, -6, 11, -8,
178 -2, 35, -8, 10, -7, -1, 4, -11, -10, -2,
180 55, 1, 17, 6, -1, -16, -15, -35, -15, -2,
181 0, 4, -19, -8, -20, -13, -1, -14, 7, -3,
182 18, 0, 10, 5, 19, -19, 0, -21, 8, -16,
183 9, 39, 0, 36, 10, 7, -9, 4, -20, 5,
185 22, 5, 42, 26, -6, 8, 1, 2, -9, 17,
186 -10, 18, -21, 19, -39, -31, -23, -23, -16, -15,
187 2, -12, 7, 6, 5, -9, 1, -10, 7, -16,
188 4, 9, 0, 10, 17, 22, 16, 2, 14, 9,
190 44, -6, 30, 8, -9, -10, -11, -14, -23, 5,
191 -8, 4, -14, 12, -37, -14, -12, -26, -4, -16,
192 8, -16, 9, -7, 6, -19, -12, -25, 5, -24,
193 15, 13, 8, 36, 34, 31, 1, 18, 4, 18,
195 -3, -5, -9, -7, 15, -1, 5, 13, 2, 12,
196 5, 2, -21, -23, -2, -16, 0, 5, -6, 13,
197 -23, 3, -32, 10, -15, 8, 44, 28, 9, 37,
198 -2, 13, -9, -15, -12, -27, -7, -12, 0, -11,
200 18, -17, -21, -25, 11, -19, -6, -3, -11, 0,
201 7, -11, -13, -31, -1, 0, 9, 1, 5, 12,
202 -18, 0, -31, -2, -13, -1, 30, 14, 7, 29,
203 9, 18, -1, 10, 4, -18, -22, 3, -10, -2,
205 -13, -13, 3, -5, 7, 4, 9, 34, -5, 20,
206 -2, 3, -16, -3, -20, -17, -11, -7, -17, 0,
207 -34, -13, -33, -2, -28, 8, 32, 24, 5, 29,
208 3, -12, 0, -15, 11, -3, 3, 2, 24, 1,
210 8, -25, -8, -23, 3, -13, -3, 17, -20, 8,
211 0, -10, -8, -11, -18, 0, -1, -10, -5, 0,
212 -28, -17, -32, -15, -26, -1, 19, 9, 3, 21,
213 15, -7, 6, 9, 29, 5, -10, 17, 15, 9,
215 4, -6, -3, 5, -1, -4, -11, 16, -6, 23,
216 19, 29, 0, -3, 6, -30, 3, -17, -10, -5,
217 -13, -2, -17, 3, 5, 3, 35, 21, 17, 17,
218 2, 35, -2, -15, 3, -28, -13, -21, -13, -13,
220 26, -19, -15, -12, -5, -22, -24, 0, -21, 12,
221 21, 15, 8, -11, 7, -12, 14, -20, 2, -6,
222 -7, -6, -16, -9, 6, -5, 21, 7, 15, 10,
223 13, 39, 5, 10, 20, -19, -28, -5, -22, -5,
225 -5, -15, 9, 7, -9, 2, -8, 37, -14, 31,
226 11, 29, 5, 16, -11, -30, -7, -29, -21, -18,
227 -23, -19, -18, -9, -7, 3, 23, 17, 14, 9,
228 8, 9, 6, -15, 27, -4, -2, -6, 12, -1,
230 16, -27, -2, -10, -13, -16, -20, 20, -29, 20,
231 14, 16, 13, 8, -9, -13, 2, -33, -9, -19,
232 -17, -23, -17, -22, -6, -6, 9, 2, 12, 2,
233 20, 13, 13, 10, 45, 4, -16, 8, 2, 7,
235 -16, 14, -2, 8, 20, 17, 9, 2, 14, 16,
236 -6, 5, -24, -28, -21, -20, -8, 9, 4, 25,
237 -1, 11, -22, 24, -15, -8, 21, 5, 11, 14,
238 -5, 18, -11, 7, -27, -20, -14, -7, 1, -9,
240 6, 2, -14, -9, 16, -1, -3, -14, 0, 5,
241 -3, -8, -16, -36, -19, -3, 1, 6, 17, 24,
242 4, 7, -21, 11, -14, -18, 7, -9, 9, 7,
243 6, 22, -3, 33, -10, -11, -28, 7, -7, 0,
245 -26, 6, 11, 10, 12, 23, 12, 23, 5, 24,
246 -13, 5, -19, -8, -38, -21, -20, -2, -6, 12,
247 -11, -5, -23, 11, -29, -9, 9, 0, 7, 6,
248 1, -7, -2, 7, -3, 3, -2, 6, 27, 3,
250 -4, -6, 0, -7, 8, 4, 0, 6, -9, 13,
251 -11, -7, -11, -15, -37, -4, -9, -5, 5, 11,
252 -5, -9, -22, -1, -27, -18, -4, -14, 5, 0,
253 12, -3, 4, 32, 14, 12, -17, 22, 17, 11,
255 -8, 12, 3, 21, 3, 14, -8, 5, 4, 28,
256 7, 32, -2, -8, -12, -34, -4, -12, 1, 6,
257 9, 4, -7, 17, 4, -13, 11, -1, 19, -4,
258 0, 39, -4, 7, -11, -21, -20, -16, -10, -11,
260 13, 0, -8, 3, 0, -4, -21, -11, -9, 16,
261 10, 18, 5, -16, -10, -16, 5, -15, 13, 5,
262 15, 1, -6, 4, 6, -23, -2, -16, 17, -12,
263 10, 44, 3, 33, 6, -12, -34, -1, -20, -3,
265 -18, 4, 17, 23, -4, 20, -4, 26, -3, 36,
266 0, 32, 2, 12, -29, -34, -16, -24, -10, -6,
267 0, -12, -8, 4, -8, -13, 0, -6, 16, -12,
268 5, 13, 3, 7, 13, 3, -8, -2, 14, 0,
270 3, -7, 5, 5, -8, 2, -17, 9, -18, 24,
271 2, 19, 10, 4, -28, -17, -5, -28, 2, -7,
272 4, -15, -7, -8, -6, -23, -13, -21, 14, -20,
273 17, 18, 11, 33, 30, 11, -23, 13, 5, 9,
275 60, 10, 7, -1, 9, -8, 6, -13, 2, -15,
276 -1, -10, -13, -11, 15, 0, 6, 9, -1, 0,
277 -13, 1, -11, -3, -13, 21, 13, 26, -7, 31,
278 -10, -7, -16, -33, -31, -10, 22, -8, 1, -2,
280 82, -1, -4, -19, 6, -27, -6, -29, -12, -26,
281 1, -24, -5, -18, 17, 17, 17, 6, 10, 0,
282 -7, -2, -9, -16, -12, 11, 0, 11, -9, 23,
283 0, -3, -8, -8, -13, -1, 8, 7, -7, 6,
285 49, 2, 21, 0, 1, -2, 9, 8, -6, -6,
286 -8, -10, -8, 9, -2, 0, -4, -2, -13, -12,
287 -23, -15, -12, -16, -26, 21, 2, 21, -11, 23,
288 -4, -33, -7, -33, -6, 13, 34, 5, 27, 10,
290 71, -10, 9, -17, -1, -20, -3, -8, -21, -18,
291 -6, -24, 0, 1, 0, 16, 6, -5, 0, -13,
292 -17, -19, -11, -29, -25, 11, -11, 6, -13, 15,
293 7, -29, 0, -8, 11, 22, 20, 21, 17, 18,
295 67, 8, 14, 11, -7, -11, -11, -9, -7, -3,
296 13, 16, 8, 9, 24, -12, 10, -13, -5, -17,
297 -2, -4, 3, -10, 6, 17, 4, 19, 0, 11,
298 -6, 13, -9, -33, -14, -10, 16, -17, -10, -4,
300 90, -3, 2, -6, -10, -29, -24, -26, -21, -15,
301 15, 2, 16, 1, 25, 4, 21, -16, 6, -18,
302 3, -8, 5, -24, 8, 7, -9, 4, -1, 3,
303 5, 18, -1, -7, 2, -1, 2, -1, -19, 3,
305 57, 0, 27, 13, -14, -5, -7, 11, -15, 4,
306 5, 16, 13, 29, 6, -13, 0, -25, -16, -31,
307 -12, -22, 2, -23, -6, 16, -7, 14, -2, 3,
308 0, -12, 0, -33, 9, 13, 28, -3, 14, 7,
310 79, -11, 15, -4, -18, -23, -20, -5, -30, -7,
311 7, 2, 21, 21, 8, 3, 10, -28, -4, -31,
312 -6, -25, 3, -37, -4, 7, -20, 0, -4, -4,
313 11, -7, 6, -8, 27, 22, 14, 12, 5, 16,
315 47, 30, 15, 14, 14, 9, 9, -23, 13, -10,
316 -12, -7, -16, -15, -3, -3, -1, 14, 9, 12,
317 9, 8, 0, 10, -14, 4, -9, 2, -5, 8,
318 -13, -3, -18, -10, -45, -3, 16, -4, 4, 0,
320 69, 17, 3, -3, 10, -8, -3, -40, -1, -21,
321 -10, -21, -8, -23, -1, 13, 8, 11, 21, 11,
322 15, 4, 0, -2, -13, -5, -23, -12, -7, 0,
323 -1, 0, -10, 14, -28, 5, 1, 11, -5, 7,
325 36, 21, 28, 16, 6, 16, 12, -2, 4, -2,
326 -20, -7, -11, 4, -20, -4, -12, 2, -1, 0,
327 0, -8, -2, -2, -27, 4, -21, -2, -9, 0,
328 -6, -29, -9, -10, -21, 21, 28, 10, 29, 11,
330 58, 9, 16, -1, 2, -2, 0, -19, -10, -13,
331 -17, -21, -3, -3, -19, 12, -2, 0, 10, -1,
332 5, -12, 0, -15, -26, -5, -34, -16, -11, -7,
333 4, -25, -2, 14, -3, 29, 13, 25, 20, 20,
335 55, 28, 21, 27, -2, 7, -8, -20, 4, 1,
336 1, 18, 5, 4, 5, -16, 2, -8, 5, -5,
337 19, 2, 14, 3, 6, 0, -18, -4, 2, -11,
338 -8, 18, -11, -10, -29, -3, 10, -13, -8, -3,
340 77, 16, 9, 9, -6, -11, -21, -37, -10, -10,
341 4, 5, 13, -3, 7, 0, 13, -11, 17, -6,
342 25, -1, 15, -9, 7, -9, -32, -19, 0, -18,
343 2, 22, -3, 15, -12, 5, -4, 2, -17, 5,
345 44, 20, 34, 29, -10, 13, -4, 0, -4, 9,
346 -5, 19, 10, 24, -11, -17, -8, -20, -5, -19,
347 9, -14, 12, -9, -6, 0, -30, -9, 0, -19,
348 -2, -7, -2, -10, -5, 20, 21, 1, 17, 9,
350 66, 8, 23, 11, -14, -5, -17, -16, -19, -2,
351 -3, 5, 18, 17, -10, 0, 1, -23, 6, -20,
352 15, -18, 14, -22, -5, -10, -44, -23, -2, -26,
353 9, -3, 4, 14, 12, 29, 7, 16, 7, 18,
355 18, 9, -17, -4, 11, 3, 0, 11, 7, 4,
356 10, 3, 10, -18, 24, -3, 14, 7, 4, 10,
357 -16, 1, -27, -4, -27, 17, 12, 30, 0, 35,
358 -9, -3, -12, -36, -35, -30, -2, -13, 2, -11,
360 40, -2, -29, -22, 7, -14, -12, -5, -7, -7,
361 12, -9, 18, -26, 26, 14, 24, 4, 16, 9,
362 -10, -2, -26, -18, -26, 7, -1, 15, -1, 27,
363 2, 0, -4, -11, -17, -21, -16, 1, -7, -3,
365 8, 1, -3, -2, 3, 10, 3, 32, -1, 12,
366 2, 4, 15, 1, 7, -3, 2, -4, -6, -3,
367 -26, -15, -29, -17, -40, 17, 0, 26, -2, 27,
368 -2, -29, -4, -36, -10, -6, 9, 0, 27, 0,
370 30, -11, -15, -20, 0, -8, -9, 15, -15, 0,
371 5, -9, 23, -6, 8, 13, 13, -7, 5, -3,
372 -20, -19, -27, -31, -39, 7, -13, 11, -4, 19,
373 8, -25, 3, -11, 7, 2, -4, 16, 18, 9,
375 26, 7, -11, 8, -5, 1, -17, 14, -1, 15,
376 24, 30, 32, 1, 33, -16, 18, -14, 0, -8,
377 -6, -4, -12, -12, -6, 13, 2, 23, 8, 15,
378 -4, 17, -5, -36, -18, -30, -8, -22, -10, -14,
380 48, -4, -23, -9, -9, -17, -30, -2, -16, 3,
381 26, 16, 40, -6, 35, 1, 28, -17, 12, -9,
382 0, -8, -11, -25, -5, 3, -10, 8, 6, 7,
383 6, 22, 1, -11, -1, -21, -22, -7, -19, -5,
385 15, 0, 2, 10, -13, 7, -14, 35, -10, 23,
386 16, 31, 37, 21, 16, -17, 6, -26, -10, -21,
387 -16, -21, -13, -25, -19, 13, -8, 19, 5, 7,
388 1, -8, 2, -36, 5, -6, 3, -8, 15, -1,
390 37, -12, -9, -7, -17, -11, -26, 18, -25, 12,
391 19, 17, 45, 14, 17, 0, 17, -30, 1, -22,
392 -10, -25, -12, -38, -18, 3, -22, 4, 3, 0,
393 13, -3, 10, -11, 23, 2, -10, 7, 5, 7,
395 5, 29, -9, 11, 15, 22, 3, 0, 18, 8,
396 -1, 6, 7, -23, 6, -6, 5, 12, 15, 21,
397 5, 8, -17, 9, -28, 0, -11, 6, 2, 12,
398 -11, 0, -14, -13, -49, -22, -8, -9, 4, -9,
400 27, 16, -21, -6, 12, 3, -9, -16, 3, -2,
401 1, -7, 15, -31, 7, 10, 16, 9, 27, 21,
402 11, 5, -16, -3, -26, -9, -24, -7, 0, 4,
403 0, 4, -6, 11, -32, -14, -23, 6, -5, -1,
405 -4, 20, 3, 13, 8, 28, 6, 21, 10, 16,
406 -8, 7, 12, -3, -11, -7, -5, 0, 4, 8,
407 -4, -8, -18, -3, -41, 0, -22, 2, 0, 4,
408 -5, -25, -6, -14, -25, 1, 2, 4, 29, 2,
410 17, 8, -8, -4, 4, 10, -6, 5, -4, 5,
411 -6, -6, 20, -10, -9, 9, 4, -2, 16, 7,
412 1, -12, -17, -16, -39, -9, -36, -12, -2, -3,
413 6, -21, 1, 11, -7, 10, -11, 20, 20, 11,
415 13, 27, -3, 24, -1, 19, -14, 3, 9, 20,
416 12, 33, 29, -3, 15, -20, 9, -9, 11, 3,
417 16, 2, -2, 2, -7, -3, -20, 0, 10, -7,
418 -7, 22, -7, -13, -33, -23, -14, -18, -7, -12,
420 35, 15, -15, 6, -4, 1, -27, -12, -5, 8,
421 15, 19, 37, -11, 16, -2, 20, -12, 23, 2,
422 22, -1, -1, -11, -5, -13, -34, -14, 8, -14,
423 4, 26, 0, 11, -16, -14, -29, -2, -17, -3,
425 3, 19, 9, 26, -8, 26, -10, 24, 0, 28,
426 5, 33, 34, 17, -2, -20, -1, -22, 0, -10,
427 6, -14, -3, -10, -20, -4, -32, -4, 7, -15,
428 0, -3, 0, -13, -9, 0, -3, -4, 17, 0,
430 25, 7, -2, 8, -12, 7, -23, 8, -13, 16,
431 7, 20, 42, 9, 0, -3, 9, -25, 12, -10,
432 12, -18, -2, -24, -19, -13, -46, -19, 5, -22,
433 10, 0, 8, 11, 8, 9, -17, 11, 7, 8,
435 -25, -7, 2, -8, 12, -7, 23, -8, 13, -16,
436 -7, -20, -42, -9, 0, 3, -9, 25, -12, 10,
437 -12, 18, 2, 24, 19, 13, 46, 19, -5, 22,
438 -10, 0, -8, -11, -8, -9, 17, -11, -7, -8,
440 -3, -19, -9, -26, 8, -26, 10, -24, 0, -28,
441 -5, -33, -34, -17, 2, 20, 1, 22, 0, 10,
442 -6, 14, 3, 10, 20, 4, 32, 4, -7, 15,
443 0, 3, 0, 13, 9, 0, 3, 4, -17, 0,
445 -35, -15, 15, -6, 4, -1, 27, 12, 5, -8,
446 -15, -19, -37, 11, -16, 2, -20, 12, -23, -2,
447 -22, 1, 1, 11, 5, 13, 34, 14, -8, 14,
448 -4, -26, 0, -11, 16, 14, 29, 2, 17, 3,
450 -13, -27, 3, -24, 1, -19, 14, -3, -9, -20,
451 -12, -33, -29, 3, -15, 20, -9, 9, -11, -3,
452 -16, -2, 2, -2, 7, 3, 20, 0, -10, 7,
453 7, -22, 7, 13, 33, 23, 14, 18, 7, 12,
455 -17, -8, 8, 4, -4, -10, 6, -5, 4, -5,
456 6, 6, -20, 10, 9, -9, -4, 2, -16, -7,
457 -1, 12, 17, 16, 39, 9, 36, 12, 2, 3,
458 -6, 21, -1, -11, 7, -10, 11, -20, -20, -11,
460 4, -20, -3, -13, -8, -28, -6, -21, -10, -16,
461 8, -7, -12, 3, 11, 7, 5, 0, -4, -8,
462 4, 8, 18, 3, 41, 0, 22, -2, 0, -4,
463 5, 25, 6, 14, 25, -1, -2, -4, -29, -2,
465 -27, -16, 21, 6, -12, -3, 9, 16, -3, 2,
466 -1, 7, -15, 31, -7, -10, -16, -9, -27, -21,
467 -11, -5, 16, 3, 26, 9, 24, 7, 0, -4,
468 0, -4, 6, -11, 32, 14, 23, -6, 5, 1,
470 -5, -29, 9, -11, -15, -22, -3, 0, -18, -8,
471 1, -6, -7, 23, -6, 6, -5, -12, -15, -21,
472 -5, -8, 17, -9, 28, 0, 11, -6, -2, -12,
473 11, 0, 14, 13, 49, 22, 8, 9, -4, 9,
475 -37, 12, 9, 7, 17, 11, 26, -18, 25, -12,
476 -19, -17, -45, -14, -17, 0, -17, 30, -1, 22,
477 10, 25, 12, 38, 18, -3, 22, -4, -3, 0,
478 -13, 3, -10, 11, -23, -2, 10, -7, -5, -7,
480 -15, 0, -2, -10, 13, -7, 14, -35, 10, -23,
481 -16, -31, -37, -21, -16, 17, -6, 26, 10, 21,
482 16, 21, 13, 25, 19, -13, 8, -19, -5, -7,
483 -1, 8, -2, 36, -5, 6, -3, 8, -15, 1,
485 -48, 4, 23, 9, 9, 17, 30, 2, 16, -3,
486 -26, -16, -40, 6, -35, -1, -28, 17, -12, 9,
487 0, 8, 11, 25, 5, -3, 10, -8, -6, -7,
488 -6, -22, -1, 11, 1, 21, 22, 7, 19, 5,
490 -26, -7, 11, -8, 5, -1, 17, -14, 1, -15,
491 -24, -30, -32, -1, -33, 16, -18, 14, 0, 8,
492 6, 4, 12, 12, 6, -13, -2, -23, -8, -15,
493 4, -17, 5, 36, 18, 30, 8, 22, 10, 14,
495 -30, 11, 15, 20, 0, 8, 9, -15, 15, 0,
496 -5, 9, -23, 6, -8, -13, -13, 7, -5, 3,
497 20, 19, 27, 31, 39, -7, 13, -11, 4, -19,
498 -8, 25, -3, 11, -7, -2, 4, -16, -18, -9,
500 -8, -1, 3, 2, -3, -10, -3, -32, 1, -12,
501 -2, -4, -15, -1, -7, 3, -2, 4, 6, 3,
502 26, 15, 29, 17, 40, -17, 0, -26, 2, -27,
503 2, 29, 4, 36, 10, 6, -9, 0, -27, 0,
505 -40, 2, 29, 22, -7, 14, 12, 5, 7, 7,
506 -12, 9, -18, 26, -26, -14, -24, -4, -16, -9,
507 10, 2, 26, 18, 26, -7, 1, -15, 1, -27,
508 -2, 0, 4, 11, 17, 21, 16, -1, 7, 3,
510 -18, -9, 17, 4, -11, -3, 0, -11, -7, -4,
511 -10, -3, -10, 18, -24, 3, -14, -7, -4, -10,
512 16, -1, 27, 4, 27, -17, -12, -30, 0, -35,
513 9, 3, 12, 36, 35, 30, 2, 13, -2, 11,
515 -66, -8, -23, -11, 14, 5, 17, 16, 19, 2,
516 3, -5, -18, -17, 10, 0, -1, 23, -6, 20,
517 -15, 18, -14, 22, 5, 10, 44, 23, 2, 26,
518 -9, 3, -4, -14, -12, -29, -7, -16, -7, -18,
520 -44, -20, -34, -29, 10, -13, 4, 0, 4, -9,
521 5, -19, -10, -24, 11, 17, 8, 20, 5, 19,
522 -9, 14, -12, 9, 6, 0, 30, 9, 0, 19,
523 2, 7, 2, 10, 5, -20, -21, -1, -17, -9,
525 -77, -16, -9, -9, 6, 11, 21, 37, 10, 10,
526 -4, -5, -13, 3, -7, 0, -13, 11, -17, 6,
527 -25, 1, -15, 9, -7, 9, 32, 19, 0, 18,
528 -2, -22, 3, -15, 12, -5, 4, -2, 17, -5,
530 -55, -28, -21, -27, 2, -7, 8, 20, -4, -1,
531 -1, -18, -5, -4, -5, 16, -2, 8, -5, 5,
532 -19, -2, -14, -3, -6, 0, 18, 4, -2, 11,
533 8, -18, 11, 10, 29, 3, -10, 13, 8, 3,
535 -58, -9, -16, 1, -2, 2, 0, 19, 10, 13,
536 17, 21, 3, 3, 19, -12, 2, 0, -10, 1,
537 -5, 12, 0, 15, 26, 5, 34, 16, 11, 7,
538 -4, 25, 2, -14, 3, -29, -13, -25, -20, -20,
540 -36, -21, -28, -16, -6, -16, -12, 2, -4, 2,
541 20, 7, 11, -4, 20, 4, 12, -2, 1, 0,
542 0, 8, 2, 2, 27, -4, 21, 2, 9, 0,
543 6, 29, 9, 10, 21, -21, -28, -10, -29, -11,
545 -69, -17, -3, 3, -10, 8, 3, 40, 1, 21,
546 10, 21, 8, 23, 1, -13, -8, -11, -21, -11,
547 -15, -4, 0, 2, 13, 5, 23, 12, 7, 0,
548 1, 0, 10, -14, 28, -5, -1, -11, 5, -7,
550 -47, -30, -15, -14, -14, -9, -9, 23, -13, 10,
551 12, 7, 16, 15, 3, 3, 1, -14, -9, -12,
552 -9, -8, 0, -10, 14, -4, 9, -2, 5, -8,
553 13, 3, 18, 10, 45, 3, -16, 4, -4, 0,
555 -79, 11, -15, 4, 18, 23, 20, 5, 30, 7,
556 -7, -2, -21, -21, -8, -3, -10, 28, 4, 31,
557 6, 25, -3, 37, 4, -7, 20, 0, 4, 4,
558 -11, 7, -6, 8, -27, -22, -14, -12, -5, -16,
560 -57, 0, -27, -13, 14, 5, 7, -11, 15, -4,
561 -5, -16, -13, -29, -6, 13, 0, 25, 16, 31,
562 12, 22, -2, 23, 6, -16, 7, -14, 2, -3,
563 0, 12, 0, 33, -9, -13, -28, 3, -14, -7,
565 -90, 3, -2, 6, 10, 29, 24, 26, 21, 15,
566 -15, -2, -16, -1, -25, -4, -21, 16, -6, 18,
567 -3, 8, -5, 24, -8, -7, 9, -4, 1, -3,
568 -5, -18, 1, 7, -2, 1, -2, 1, 19, -3,
570 -67, -8, -14, -11, 7, 11, 11, 9, 7, 3,
571 -13, -16, -8, -9, -24, 12, -10, 13, 5, 17,
572 2, 4, -3, 10, -6, -17, -4, -19, 0, -11,
573 6, -13, 9, 33, 14, 10, -16, 17, 10, 4,
575 -71, 10, -9, 17, 1, 20, 3, 8, 21, 18,
576 6, 24, 0, -1, 0, -16, -6, 5, 0, 13,
577 17, 19, 11, 29, 25, -11, 11, -6, 13, -15,
578 -7, 29, 0, 8, -11, -22, -20, -21, -17, -18,
580 -49, -2, -21, 0, -1, 2, -9, -8, 6, 6,
581 8, 10, 8, -9, 2, 0, 4, 2, 13, 12,
582 23, 15, 12, 16, 26, -21, -2, -21, 11, -23,
583 4, 33, 7, 33, 6, -13, -34, -5, -27, -10,
585 -82, 1, 4, 19, -6, 27, 6, 29, 12, 26,
586 -1, 24, 5, 18, -17, -17, -17, -6, -10, 0,
587 7, 2, 9, 16, 12, -11, 0, -11, 9, -23,
588 0, 3, 8, 8, 13, 1, -8, -7, 7, -6,
590 -60, -10, -7, 1, -9, 8, -6, 13, -2, 15,
591 1, 10, 13, 11, -15, 0, -6, -9, 1, 0,
592 13, -1, 11, 3, 13, -21, -13, -26, 7, -31,
593 10, 7, 16, 33, 31, 10, -22, 8, -1, 2,
595 -3, 7, -5, -5, 8, -2, 17, -9, 18, -24,
596 -2, -19, -10, -4, 28, 17, 5, 28, -2, 7,
597 -4, 15, 7, 8, 6, 23, 13, 21, -14, 20,
598 -17, -18, -11, -33, -30, -11, 23, -13, -5, -9,
600 18, -4, -17, -23, 4, -20, 4, -26, 3, -36,
601 0, -32, -2, -12, 29, 34, 16, 24, 10, 6,
602 0, 12, 8, -4, 8, 13, 0, 6, -16, 12,
603 -5, -13, -3, -7, -13, -3, 8, 2, -14, 0,
605 -13, 0, 8, -3, 0, 4, 21, 11, 9, -16,
606 -10, -18, -5, 16, 10, 16, -5, 15, -13, -5,
607 -15, -1, 6, -4, -6, 23, 2, 16, -17, 12,
608 -10, -44, -3, -33, -6, 12, 34, 1, 20, 3,
610 8, -12, -3, -21, -3, -14, 8, -5, -4, -28,
611 -7, -32, 2, 8, 12, 34, 4, 12, -1, -6,
612 -9, -4, 7, -17, -4, 13, -11, 1, -19, 4,
613 0, -39, 4, -7, 11, 21, 20, 16, 10, 11,
615 4, 6, 0, 7, -8, -4, 0, -6, 9, -13,
616 11, 7, 11, 15, 37, 4, 9, 5, -5, -11,
617 5, 9, 22, 1, 27, 18, 4, 14, -5, 0,
618 -12, 3, -4, -32, -14, -12, 17, -22, -17, -11,
620 26, -6, -11, -10, -12, -23, -12, -23, -5, -24,
621 13, -5, 19, 8, 38, 21, 20, 2, 6, -12,
622 11, 5, 23, -11, 29, 9, -9, 0, -7, -6,
623 -1, 7, 2, -7, 3, -3, 2, -6, -27, -3,
625 -6, -2, 14, 9, -16, 1, 3, 14, 0, -5,
626 3, 8, 16, 36, 19, 3, -1, -6, -17, -24,
627 -4, -7, 21, -11, 14, 18, -7, 9, -9, -7,
628 -6, -22, 3, -33, 10, 11, 28, -7, 7, 0,
630 16, -14, 2, -8, -20, -17, -9, -2, -14, -16,
631 6, -5, 24, 28, 21, 20, 8, -9, -4, -25,
632 1, -11, 22, -24, 15, 8, -21, -5, -11, -14,
633 5, -18, 11, -7, 27, 20, 14, 7, -1, 9,
635 -16, 27, 2, 10, 13, 16, 20, -20, 29, -20,
636 -14, -16, -13, -8, 9, 13, -2, 33, 9, 19,
637 17, 23, 17, 22, 6, 6, -9, -2, -12, -2,
638 -20, -13, -13, -10, -45, -4, 16, -8, -2, -7,
640 5, 15, -9, -7, 9, -2, 8, -37, 14, -31,
641 -11, -29, -5, -16, 11, 30, 7, 29, 21, 18,
642 23, 19, 18, 9, 7, -3, -23, -17, -14, -9,
643 -8, -9, -6, 15, -27, 4, 2, 6, -12, 1,
645 -26, 19, 15, 12, 5, 22, 24, 0, 21, -12,
646 -21, -15, -8, 11, -7, 12, -14, 20, -2, 6,
647 7, 6, 16, 9, -6, 5, -21, -7, -15, -10,
648 -13, -39, -5, -10, -20, 19, 28, 5, 22, 5,
650 -4, 6, 3, -5, 1, 4, 11, -16, 6, -23,
651 -19, -29, 0, 3, -6, 30, -3, 17, 10, 5,
652 13, 2, 17, -3, -5, -3, -35, -21, -17, -17,
653 -2, -35, 2, 15, -3, 28, 13, 21, 13, 13,
655 -8, 25, 8, 23, -3, 13, 3, -17, 20, -8,
656 0, 10, 8, 11, 18, 0, 1, 10, 5, 0,
657 28, 17, 32, 15, 26, 1, -19, -9, -3, -21,
658 -15, 7, -6, -9, -29, -5, 10, -17, -15, -9,
660 13, 13, -3, 5, -7, -4, -9, -34, 5, -20,
661 2, -3, 16, 3, 20, 17, 11, 7, 17, 0,
662 34, 13, 33, 2, 28, -8, -32, -24, -5, -29,
663 -3, 12, 0, 15, -11, 3, -3, -2, -24, -1,
665 -18, 17, 21, 25, -11, 19, 6, 3, 11, 0,
666 -7, 11, 13, 31, 1, 0, -9, -1, -5, -12,
667 18, 0, 31, 2, 13, 1, -30, -14, -7, -29,
668 -9, -18, 1, -10, -4, 18, 22, -3, 10, 2,
670 3, 5, 9, 7, -15, 1, -5, -13, -2, -12,
671 -5, -2, 21, 23, 2, 16, 0, -5, 6, -13,
672 23, -3, 32, -10, 15, -8, -44, -28, -9, -37,
673 2, -13, 9, 15, 12, 27, 7, 12, 0, 11,
675 -44, 6, -30, -8, 9, 10, 11, 14, 23, -5,
676 8, -4, 14, -12, 37, 14, 12, 26, 4, 16,
677 -8, 16, -9, 7, -6, 19, 12, 25, -5, 24,
678 -15, -13, -8, -36, -34, -31, -1, -18, -4, -18,
680 -22, -5, -42, -26, 6, -8, -1, -2, 9, -17,
681 10, -18, 21, -19, 39, 31, 23, 23, 16, 15,
682 -2, 12, -7, -6, -5, 9, -1, 10, -7, 16,
683 -4, -9, 0, -10, -17, -22, -16, -2, -14, -9,
685 -55, -1, -17, -6, 1, 16, 15, 35, 15, 2,
686 0, -4, 19, 8, 20, 13, 1, 14, -7, 3,
687 -18, 0, -10, -5, -19, 19, 0, 21, -8, 16,
688 -9, -39, 0, -36, -10, -7, 9, -4, 20, -5,
690 -33, -13, -29, -24, -1, -1, 2, 18, 0, -9,
691 3, -17, 27, 0, 21, 30, 12, 11, 5, 2,
692 -12, -4, -9, -19, -18, 9, -13, 6, -11, 8,
693 2, -35, 8, -10, 7, 1, -4, 11, 10, 2,
695 -36, 5, -24, 4, -7, 7, -6, 17, 14, 5,
696 22, 22, 35, 8, 46, 1, 17, 3, 0, -2,
697 2, 10, 5, 0, 14, 15, 2, 18, 2, 4,
698 -11, 7, -1, -36, -18, -32, -7, -27, -17, -20,
700 -14, -7, -36, -13, -10, -10, -18, 0, 0, -5,
701 25, 8, 43, 0, 48, 18, 27, 0, 12, -3,
702 7, 6, 7, -13, 15, 5, -11, 3, 0, -2,
703 0, 12, 6, -10, 0, -23, -22, -11, -26, -12,
705 -47, -3, -11, 6, -15, 13, -2, 38, 6, 13,
706 15, 22, 40, 28, 28, 0, 5, -8, -10, -15,
707 -7, -7, 4, -13, 1, 14, -9, 14, 0, -2,
708 -4, -18, 7, -36, 6, -8, 3, -13, 7, -8,
710 -25, -15, -22, -11, -18, -4, -15, 22, -8, 2,
711 17, 9, 48, 20, 30, 17, 16, -11, 1, -16,
712 -2, -10, 5, -26, 2, 4, -22, 0, -2, -10,
713 6, -13, 14, -10, 23, 0, -10, 2, -1, 0,
715 -57, 26, -22, 7, 14, 28, 14, 3, 35, 0,
716 -3, -1, 11, -16, 18, 10, 4, 31, 15, 28,
717 14, 23, 1, 21, -7, 2, -11, 1, -3, 1,
718 -18, -9, -10, -13, -49, -24, -8, -14, -2, -16,
720 -35, 14, -34, -10, 10, 10, 1, -12, 20, -12,
721 0, -15, 18, -24, 20, 27, 14, 28, 27, 27,
722 20, 19, 2, 8, -5, -7, -25, -13, -5, -5,
723 -6, -5, -2, 12, -31, -15, -23, 1, -12, -8,
725 -68, 18, -9, 9, 6, 35, 18, 25, 26, 7,
726 -10, -1, 16, 3, 1, 9, -6, 19, 4, 15,
727 4, 6, 0, 8, -20, 2, -23, -2, -7, -5,
728 -12, -35, -1, -13, -24, 0, 3, 0, 22, -4,
730 -46, 6, -21, -8, 2, 16, 5, 8, 11, -4,
731 -8, -15, 24, -4, 2, 26, 3, 16, 16, 14,
732 9, 2, 1, -4, -19, -7, -36, -17, -9, -13,
733 0, -31, 5, 12, -7, 8, -11, 15, 13, 4,
735 -49, 24, -16, 20, -2, 26, -2, 7, 25, 10,
736 11, 25, 32, 3, 27, -2, 8, 8, 11, 9,
737 24, 17, 16, 14, 13, -2, -20, -5, 4, -17,
738 -14, 12, -3, -13, -33, -25, -14, -23, -15, -19,
740 -27, 12, -28, 2, -6, 7, -15, -9, 11, -1,
741 13, 11, 40, -4, 29, 14, 19, 5, 23, 8,
742 30, 13, 17, 0, 14, -12, -34, -20, 2, -25,
743 -2, 16, 4, 12, -15, -16, -29, -7, -24, -10,
745 -60, 16, -3, 22, -10, 32, 0, 28, 17, 18,
746 3, 25, 37, 23, 10, -3, -2, -3, 0, -3,
747 14, 0, 14, 1, 0, -2, -32, -9, 1, -25,
748 -7, -13, 5, -13, -8, -1, -2, -8, 10, -6,
750 -38, 4, -15, 4, -14, 13, -12, 11, 2, 6,
751 6, 11, 45, 16, 11, 13, 7, -6, 12, -4,
752 20, -3, 16, -12, 1, -12, -46, -24, 0, -33,
753 3, -9, 12, 12, 8, 7, -17, 6, 0, 2
757 const int8_t ff_cb2_vects[128][40]={
759 73, -32, -60, -15, -26, 59, 2, -33, 30, -10,
760 -3, -17, 8, 30, -1, -26, -4, -22, 10, 16,
761 -36, -5, -11, 56, 37, 6, -10, -5, -13, -3,
762 6, -5, 11, 4, -19, -5, -16, 41, 24, 13,
764 4, -11, -37, 23, -5, 46, -2, -29, -5, -39,
765 -21, -9, 0, 49, 12, -9, -16, -26, 22, 15,
766 -45, -20, -5, 40, 22, 17, -26, 31, -14, 2,
767 -14, 10, 30, 20, -27, -9, -39, 39, 18, 5,
769 34, -25, -48, -28, -11, 34, -2, -41, 9, -7,
770 -17, 21, 20, 24, -17, -33, 0, -24, 10, 42,
771 3, -5, 10, 42, 11, 8, -3, 3, 16, 9,
772 22, -2, 0, -33, -10, 18, 7, 58, 10, 28,
774 -34, -4, -25, 10, 9, 21, -7, -36, -26, -36,
775 -35, 28, 12, 42, -3, -16, -12, -28, 21, 42,
776 -5, -21, 16, 26, -4, 19, -19, 39, 15, 15,
777 1, 13, 19, -17, -17, 14, -15, 55, 4, 19,
779 28, -20, -51, -14, -6, 7, 0, -26, 27, -4,
780 18, -40, -6, 16, -1, -15, 0, -55, -5, -16,
781 -19, 14, -3, 49, 14, 1, -22, -30, -12, 0,
782 24, 15, 9, -17, -45, -29, 4, 28, 51, 35,
784 -40, 0, -28, 24, 14, -5, -4, -21, -7, -33,
785 0, -32, -15, 35, 12, 1, -11, -58, 5, -16,
786 -28, 0, 1, 33, 0, 11, -39, 5, -14, 6,
787 3, 31, 28, -1, -53, -33, -19, 25, 46, 26,
789 -11, -14, -39, -27, 9, -17, -4, -33, 6, 0,
790 4, -1, 5, 10, -17, -22, 5, -57, -5, 9,
791 20, 13, 18, 35, -11, 3, -16, -22, 17, 13,
792 40, 19, -1, -55, -35, -5, 27, 44, 37, 49,
794 -80, 6, -16, 11, 30, -30, -9, -28, -28, -29,
795 -13, 6, -2, 28, -3, -5, -7, -60, 5, 9,
796 11, -1, 24, 19, -27, 13, -32, 13, 15, 19,
797 19, 35, 17, -39, -43, -9, 4, 42, 32, 41,
799 78, -21, -43, 4, -38, 17, 17, -5, 55, 24,
800 -15, -36, 14, 4, 24, -24, 12, 5, 17, 31,
801 -54, -5, -2, 27, 43, -12, 2, 9, -9, -15,
802 22, -3, 28, 21, -20, 3, 20, 28, 9, -5,
804 9, -1, -20, 43, -17, 3, 12, 0, 20, -4,
805 -33, -29, 6, 22, 38, -7, 0, 1, 29, 30,
806 -63, -21, 3, 11, 27, -1, -14, 45, -10, -9,
807 1, 12, 47, 37, -28, 0, -2, 26, 4, -13,
809 39, -14, -30, -8, -22, -8, 12, -12, 34, 27,
810 -29, 2, 26, -2, 8, -31, 16, 3, 17, 57,
811 -14, -6, 19, 13, 16, -10, 8, 17, 20, -2,
812 38, 0, 17, -16, -11, 27, 44, 45, -4, 8,
814 -29, 5, -7, 30, -1, -21, 7, -7, 0, 0,
815 -47, 9, 18, 15, 22, -14, 4, 0, 28, 57,
816 -23, -21, 25, -2, 1, 0, -7, 53, 19, 3,
817 17, 15, 36, 0, -19, 24, 21, 43, -9, 0,
819 33, -10, -34, 5, -17, -35, 15, 1, 53, 30,
820 6, -59, 0, -10, 24, -13, 17, -27, 1, -1,
821 -37, 13, 4, 20, 20, -18, -10, -16, -8, -11,
822 39, 18, 26, 0, -46, -20, 41, 15, 37, 15,
824 -35, 10, -11, 44, 3, -48, 10, 6, 17, 2,
825 -11, -51, -8, 8, 38, 3, 4, -31, 12, -2,
826 -46, -1, 10, 4, 5, -7, -26, 19, -10, -5,
827 18, 34, 45, 15, -54, -24, 18, 13, 31, 7,
829 -5, -3, -21, -7, -2, -60, 10, -5, 32, 34,
830 -7, -20, 11, -16, 8, -20, 21, -29, 1, 24,
831 2, 13, 27, 6, -5, -15, -3, -8, 21, 1,
832 55, 21, 15, -38, -37, 3, 65, 32, 23, 30,
834 -74, 17, 0, 31, 18, -73, 5, 0, -3, 5,
835 -25, -12, 3, 1, 22, -3, 9, -33, 12, 24,
836 -6, -2, 33, -9, -21, -5, -20, 27, 19, 7,
837 34, 37, 34, -22, -44, 0, 41, 29, 17, 21,
839 76, -35, -31, -28, -49, 43, -40, 0, 29, -14,
840 8, 5, 10, 18, -26, -46, 0, 7, 6, 3,
841 -25, -7, -2, 40, 28, 14, 18, -3, -27, -28,
842 -8, -45, -13, 34, -13, -27, -15, 31, 12, 3,
844 7, -15, -9, 9, -28, 29, -45, 5, -6, -43,
845 -9, 12, 2, 36, -12, -30, -11, 3, 17, 3,
846 -34, -22, 3, 24, 12, 24, 2, 32, -28, -22,
847 -29, -29, 5, 50, -21, -31, -38, 29, 7, -5,
849 36, -29, -19, -41, -34, 18, -45, -6, 8, -10,
850 -5, 43, 23, 11, -42, -53, 5, 5, 6, 30,
851 14, -8, 20, 26, 1, 16, 25, 4, 3, -15,
852 7, -41, -23, -3, -4, -3, 8, 48, -1, 17,
854 -32, -8, 3, -2, -13, 4, -50, -1, -27, -39,
855 -23, 51, 15, 30, -27, -37, -7, 1, 17, 29,
856 5, -23, 25, 10, -14, 26, 8, 41, 1, -9,
857 -13, -26, -5, 12, -12, -7, -14, 45, -6, 9,
859 31, -24, -23, -27, -29, -9, -43, 8, 26, -7,
860 30, -17, -4, 3, -26, -35, 5, -24, -10, -28,
861 -9, 12, 5, 33, 5, 8, 5, -29, -26, -24,
862 9, -23, -14, 12, -39, -52, 5, 18, 39, 24,
864 -37, -3, 0, 10, -7, -22, -48, 12, -8, -36,
865 12, -9, -12, 22, -12, -19, -6, -28, 0, -29,
866 -18, -3, 11, 17, -10, 18, -10, 7, -27, -18,
867 -11, -7, 3, 28, -47, -55, -18, 15, 34, 16,
869 -8, -17, -10, -40, -13, -34, -47, 0, 5, -4,
870 16, 21, 8, -2, -42, -43, 10, -26, -10, -2,
871 31, 11, 27, 19, -21, 10, 12, -20, 3, -11,
872 25, -20, -25, -25, -29, -28, 28, 34, 25, 38,
874 -77, 2, 11, -1, 7, -47, -52, 5, -29, -33,
875 -1, 28, 0, 15, -28, -26, -2, -30, 0, -2,
876 22, -4, 33, 3, -36, 21, -3, 15, 2, -5,
877 4, -4, -6, -9, -37, -31, 5, 32, 20, 30,
879 81, -25, -14, -8, -61, 0, -25, 28, 54, 20,
880 -3, -14, 17, -8, 0, -44, 16, 35, 13, 18,
881 -43, -7, 6, 11, 33, -4, 30, 11, -22, -40,
882 6, -43, 3, 50, -14, -18, 22, 18, -1, -16,
884 12, -4, 8, 29, -39, -12, -30, 33, 19, -8,
885 -21, -6, 8, 9, 13, -28, 4, 31, 24, 18,
886 -52, -23, 12, -4, 18, 5, 14, 47, -24, -34,
887 -14, -27, 22, 66, -22, -22, -1, 16, -6, -24,
889 41, -18, -2, -21, -45, -24, -30, 21, 33, 24,
890 -17, 24, 29, -15, -16, -51, 21, 33, 13, 45,
891 -3, -8, 28, -2, 7, -2, 37, 19, 7, -27,
892 22, -39, -7, 12, -5, 5, 45, 35, -15, -1,
894 -27, 1, 20, 17, -24, -38, -35, 26, -1, -4,
895 -35, 32, 21, 3, -2, -35, 8, 29, 24, 44,
896 -12, -24, 34, -18, -8, 7, 21, 55, 5, -21,
897 2, -23, 11, 28, -13, 1, 22, 33, -21, -10,
899 36, -13, -5, -7, -40, -51, -28, 36, 52, 27,
900 18, -36, 2, -22, 0, -33, 21, 2, -3, -13,
901 -26, 11, 14, 4, 10, -10, 18, -14, -22, -36,
902 24, -21, 1, 28, -40, -42, 42, 5, 25, 5,
904 -32, 6, 17, 31, -19, -65, -33, 41, 16, -1,
905 0, -29, -6, -4, 13, -17, 9, -1, 8, -14,
906 -35, -3, 19, -11, -4, 0, 1, 21, -23, -30,
907 3, -5, 20, 44, -48, -46, 19, 3, 20, -3,
909 -3, -7, 6, -20, -25, -77, -32, 29, 31, 30,
910 4, 2, 14, -29, -16, -40, 26, 0, -3, 12,
911 13, 10, 36, -9, -15, -8, 24, -6, 7, -22,
912 40, -17, -8, -9, -31, -18, 66, 22, 11, 19,
914 -72, 13, 29, 18, -4, -90, -37, 34, -4, 1,
915 -13, 9, 6, -11, -2, -24, 13, -3, 7, 11,
916 4, -4, 42, -25, -31, 1, 8, 29, 6, -17,
917 19, -2, 10, 6, -38, -22, 42, 19, 6, 11,
919 116, -20, -68, -30, -28, 83, 28, -18, 32, -22,
920 -13, -21, 5, 28, 5, -7, -24, -8, -22, 17,
921 -23, 30, -25, 45, 15, -9, -11, -18, 22, -10,
922 4, -2, 19, -12, 23, 3, -43, 2, 12, -4,
924 47, 0, -45, 7, -7, 69, 23, -13, -2, -51,
925 -32, -14, -3, 47, 19, 8, -37, -11, -10, 16,
926 -32, 15, -19, 29, 0, 1, -28, 18, 20, -4,
927 -16, 13, 38, 3, 15, 0, -66, 0, 7, -13,
929 77, -13, -56, -43, -13, 57, 23, -26, 11, -19,
930 -27, 16, 17, 22, -10, -15, -19, -10, -22, 43,
931 16, 30, -2, 31, -11, -6, -5, -9, 52, 2,
932 20, 0, 8, -50, 33, 27, -19, 19, -1, 9,
934 8, 6, -33, -4, 7, 44, 18, -21, -23, -48,
935 -46, 24, 9, 40, 3, 1, -32, -13, -11, 43,
936 7, 14, 3, 15, -26, 3, -21, 26, 50, 8,
937 0, 16, 27, -34, 25, 23, -43, 17, -6, 1,
939 71, -9, -59, -29, -8, 30, 26, -11, 30, -16,
940 8, -44, -9, 14, 5, 2, -19, -40, -38, -15,
941 -7, 50, -17, 38, -7, -14, -24, -43, 22, -6,
942 22, 19, 17, -34, -2, -20, -23, -10, 39, 16,
944 2, 11, -36, 9, 13, 17, 21, -6, -5, -45,
945 -10, -36, -18, 33, 19, 19, -31, -44, -27, -15,
946 -16, 34, -11, 22, -22, -4, -40, -7, 21, 0,
947 1, 35, 36, -18, -10, -24, -46, -12, 34, 8,
949 32, -2, -47, -42, 7, 5, 21, -18, 9, -12,
950 -5, -5, 2, 8, -10, -4, -14, -42, -38, 10,
951 33, 49, 5, 24, -33, -12, -17, -35, 52, 6,
952 38, 22, 7, -72, 7, 3, 0, 6, 25, 30,
954 -36, 18, -24, -3, 28, -7, 16, -13, -26, -41,
955 -24, 1, -5, 26, 3, 12, -27, -46, -27, 10,
956 24, 34, 10, 8, -49, -2, -34, 0, 51, 12,
957 17, 38, 25, -56, 0, 0, -22, 3, 20, 22,
959 121, -9, -50, -10, -40, 40, 43, 9, 58, 12,
960 -25, -41, 11, 2, 31, -5, -8, 19, -15, 32,
961 -41, 30, -16, 16, 20, -28, 0, -3, 26, -22,
962 19, 0, 36, 4, 22, 12, -6, -9, -1, -24,
964 52, 10, -27, 27, -18, 26, 38, 14, 23, -16,
965 -44, -33, 3, 20, 45, 10, -20, 15, -3, 31,
966 -50, 14, -10, 0, 5, -17, -15, 32, 24, -16,
967 -1, 15, 55, 20, 14, 8, -29, -12, -7, -32,
969 82, -3, -38, -23, -24, 15, 38, 2, 37, 15,
970 -39, -2, 23, -4, 15, -12, -3, 17, -15, 58,
971 -1, 29, 6, 2, -5, -26, 7, 4, 56, -9,
972 35, 3, 25, -33, 32, 36, 17, 7, -15, -9,
974 13, 17, -15, 15, -3, 1, 33, 7, 1, -12,
975 -58, 5, 15, 13, 29, 3, -16, 13, -4, 57,
976 -10, 13, 11, -13, -21, -15, -9, 40, 55, -3,
977 14, 19, 44, -17, 24, 32, -5, 4, -21, -18,
979 76, 1, -41, -9, -19, -12, 41, 17, 55, 18,
980 -3, -63, -3, -12, 30, 5, -3, -12, -31, 0,
981 -24, 49, -8, 9, -1, -33, -12, -29, 27, -18,
982 37, 21, 34, -17, -3, -11, 14, -23, 25, -2,
984 7, 22, -18, 29, 1, -25, 36, 21, 20, -9,
985 -22, -56, -11, 6, 45, 21, -15, -16, -20, -1,
986 -33, 34, -2, -6, -17, -23, -28, 6, 25, -12,
987 16, 37, 53, -1, -11, -15, -8, -25, 20, -11,
989 37, 8, -29, -22, -4, -37, 36, 9, 34, 22,
990 -17, -24, 8, -18, 15, -2, 1, -14, -31, 25,
991 15, 48, 13, -4, -28, -31, -5, -21, 57, -4,
992 53, 24, 23, -55, 6, 12, 37, -6, 11, 11,
994 -31, 28, -6, 16, 16, -50, 31, 14, 0, -6,
995 -36, -17, 0, 0, 29, 14, -11, -18, -20, 25,
996 6, 33, 19, -20, -43, -21, -21, 14, 55, 0,
997 32, 40, 42, -39, -1, 8, 14, -8, 6, 3,
999 119, -24, -39, -44, -51, 66, -14, 15, 31, -26,
1000 -1, 0, 7, 16, -19, -28, -19, 22, -26, 4,
1001 -13, 28, -16, 29, 5, -1, 16, -16, 8, -35,
1002 -10, -42, -4, 17, 29, -19, -42, -7, 0, -15,
1004 50, -3, -16, -5, -30, 53, -19, 20, -3, -55,
1005 -19, 8, 0, 34, -5, -11, -32, 18, -15, 4,
1006 -22, 13, -10, 13, -9, 8, 0, 19, 7, -29,
1007 -31, -26, 13, 33, 21, -22, -65, -9, -4, -23,
1009 79, -17, -27, -56, -36, 41, -19, 8, 10, -22,
1010 -15, 39, 20, 9, -35, -35, -15, 20, -26, 31,
1011 26, 27, 6, 15, -20, 0, 23, -8, 38, -22,
1012 5, -38, -15, -20, 39, 4, -18, 9, -13, -1,
1014 10, 3, -4, -18, -15, 27, -24, 13, -24, -51,
1015 -34, 47, 12, 28, -21, -19, -27, 16, -15, 30,
1016 17, 12, 12, 0, -36, 10, 7, 27, 37, -16,
1017 -15, -22, 3, -4, 31, 1, -42, 7, -18, -9,
1019 74, -12, -30, -42, -30, 14, -16, 23, 29, -19,
1020 20, -21, -7, 1, -19, -17, -14, -10, -43, -27,
1021 3, 48, -8, 22, -16, -7, 4, -42, 9, -31,
1022 6, -20, -6, -4, 3, -43, -22, -20, 28, 5,
1024 5, 7, -7, -4, -9, 0, -21, 28, -6, -48,
1025 2, -14, -15, 20, -5, 0, -27, -14, -32, -28,
1026 -5, 32, -2, 6, -32, 3, -12, -5, 8, -25,
1027 -14, -4, 12, 11, -4, -47, -45, -22, 22, -2,
1029 34, -6, -18, -55, -15, -11, -21, 16, 8, -16,
1030 6, 16, 5, -4, -35, -24, -10, -12, -43, -1,
1031 43, 47, 14, 8, -43, -5, 10, -34, 39, -18,
1032 22, -16, -17, -42, 13, -19, 1, -3, 14, 20,
1034 -34, 14, 4, -17, 5, -24, -26, 20, -27, -45,
1035 -12, 24, -2, 13, -21, -8, -22, -16, -32, -2,
1036 34, 31, 20, -7, -58, 5, -5, 2, 38, -12,
1037 2, -1, 1, -26, 5, -23, -21, -6, 8, 11,
1039 124, -13, -21, -23, -62, 23, 0, 43, 57, 8,
1040 -13, -18, 14, -10, 6, -26, -3, 49, -19, 19,
1041 -31, 27, -7, 0, 11, -20, 29, -1, 12, -47,
1042 4, -39, 11, 34, 28, -9, -5, -19, -13, -34,
1044 55, 6, 1, 14, -41, 10, -4, 48, 22, -20,
1045 -31, -10, 5, 7, 20, -9, -16, 45, -8, 19,
1046 -40, 12, -1, -15, -4, -10, 12, 34, 11, -41,
1047 -16, -24, 30, 49, 20, -13, -28, -22, -18, -43,
1049 84, -6, -9, -36, -47, -1, -4, 36, 36, 12,
1050 -27, 20, 26, -17, -9, -33, 1, 47, -19, 46,
1051 9, 27, 15, -13, -15, -18, 35, 6, 42, -33,
1052 20, -36, 1, -4, 38, 14, 18, -2, -27, -20,
1054 15, 13, 13, 1, -26, -14, -9, 41, 1, -16,
1055 -46, 27, 18, 1, 4, -16, -11, 43, -8, 45,
1056 0, 11, 21, -29, -30, -8, 19, 42, 41, -28,
1057 0, -20, 20, 11, 30, 10, -4, -5, -32, -28,
1059 79, -2, -12, -22, -42, -28, -1, 51, 54, 15,
1060 8, -41, 0, -24, 6, -15, 1, 17, -36, -12,
1061 -14, 47, 0, -6, -11, -26, 16, -27, 13, -43,
1062 22, -18, 10, 12, 2, -34, 15, -33, 13, -13,
1064 10, 18, 10, 15, -21, -41, -6, 56, 19, -13,
1065 -9, -33, -9, -6, 20, 1, -11, 13, -24, -13,
1066 -23, 32, 6, -22, -26, -15, 0, 8, 12, -37,
1067 1, -2, 28, 27, -5, -37, -7, -35, 8, -21,
1069 39, 4, 0, -35, -27, -53, -6, 44, 33, 18,
1070 -5, -2, 11, -31, -9, -22, 6, 15, -36, 13,
1071 25, 46, 23, -20, -37, -24, 23, -19, 43, -29,
1072 38, -14, 0, -26, 12, -10, 38, -16, 0, 0,
1074 -29, 25, 22, 2, -6, -67, -11, 49, -1, -10,
1075 -24, 5, 3, -13, 4, -5, -6, 11, -25, 12,
1076 16, 31, 28, -36, -53, -13, 6, 16, 42, -24,
1077 17, 1, 18, -10, 4, -13, 15, -18, -5, -7,
1079 29, -25, -22, -2, 6, 67, 11, -49, 1, 10,
1080 24, -5, -3, 13, -4, 5, 6, -11, 25, -12,
1081 -16, -31, -28, 36, 53, 13, -6, -16, -42, 24,
1082 -17, -1, -18, 10, -4, 13, -15, 18, 5, 7,
1084 -39, -4, 0, 35, 27, 53, 6, -44, -33, -18,
1085 5, 2, -11, 31, 9, 22, -6, -15, 36, -13,
1086 -25, -46, -23, 20, 37, 24, -23, 19, -43, 29,
1087 -38, 14, 0, 26, -12, 10, -38, 16, 0, 0,
1089 -10, -18, -10, -15, 21, 41, 6, -56, -19, 13,
1090 9, 33, 9, 6, -20, -1, 11, -13, 24, 13,
1091 23, -32, -6, 22, 26, 15, 0, -8, -12, 37,
1092 -1, 2, -28, -27, 5, 37, 7, 35, -8, 21,
1094 -79, 2, 12, 22, 42, 28, 1, -51, -54, -15,
1095 -8, 41, 0, 24, -6, 15, -1, -17, 36, 12,
1096 14, -47, 0, 6, 11, 26, -16, 27, -13, 43,
1097 -22, 18, -10, -12, -2, 34, -15, 33, -13, 13,
1099 -15, -13, -13, -1, 26, 14, 9, -41, -1, 16,
1100 46, -27, -18, -1, -4, 16, 11, -43, 8, -45,
1101 0, -11, -21, 29, 30, 8, -19, -42, -41, 28,
1102 0, 20, -20, -11, -30, -10, 4, 5, 32, 28,
1104 -84, 6, 9, 36, 47, 1, 4, -36, -36, -12,
1105 27, -20, -26, 17, 9, 33, -1, -47, 19, -46,
1106 -9, -27, -15, 13, 15, 18, -35, -6, -42, 33,
1107 -20, 36, -1, 4, -38, -14, -18, 2, 27, 20,
1109 -55, -6, -1, -14, 41, -10, 4, -48, -22, 20,
1110 31, 10, -5, -7, -20, 9, 16, -45, 8, -19,
1111 40, -12, 1, 15, 4, 10, -12, -34, -11, 41,
1112 16, 24, -30, -49, -20, 13, 28, 22, 18, 43,
1114 -124, 13, 21, 23, 62, -23, 0, -43, -57, -8,
1115 13, 18, -14, 10, -6, 26, 3, -49, 19, -19,
1116 31, -27, 7, 0, -11, 20, -29, 1, -12, 47,
1117 -4, 39, -11, -34, -28, 9, 5, 19, 13, 34,
1119 34, -14, -4, 17, -5, 24, 26, -20, 27, 45,
1120 12, -24, 2, -13, 21, 8, 22, 16, 32, 2,
1121 -34, -31, -20, 7, 58, -5, 5, -2, -38, 12,
1122 -2, 1, -1, 26, -5, 23, 21, 6, -8, -11,
1124 -34, 6, 18, 55, 15, 11, 21, -16, -8, 16,
1125 -6, -16, -5, 4, 35, 24, 10, 12, 43, 1,
1126 -43, -47, -14, -8, 43, 5, -10, 34, -39, 18,
1127 -22, 16, 17, 42, -13, 19, -1, 3, -14, -20,
1129 -5, -7, 7, 4, 9, 0, 21, -28, 6, 48,
1130 -2, 14, 15, -20, 5, 0, 27, 14, 32, 28,
1131 5, -32, 2, -6, 32, -3, 12, 5, -8, 25,
1132 14, 4, -12, -11, 4, 47, 45, 22, -22, 2,
1134 -74, 12, 30, 42, 30, -14, 16, -23, -29, 19,
1135 -20, 21, 7, -1, 19, 17, 14, 10, 43, 27,
1136 -3, -48, 8, -22, 16, 7, -4, 42, -9, 31,
1137 -6, 20, 6, 4, -3, 43, 22, 20, -28, -5,
1139 -10, -3, 4, 18, 15, -27, 24, -13, 24, 51,
1140 34, -47, -12, -28, 21, 19, 27, -16, 15, -30,
1141 -17, -12, -12, 0, 36, -10, -7, -27, -37, 16,
1142 15, 22, -3, 4, -31, -1, 42, -7, 18, 9,
1144 -79, 17, 27, 56, 36, -41, 19, -8, -10, 22,
1145 15, -39, -20, -9, 35, 35, 15, -20, 26, -31,
1146 -26, -27, -6, -15, 20, 0, -23, 8, -38, 22,
1147 -5, 38, 15, 20, -39, -4, 18, -9, 13, 1,
1149 -50, 3, 16, 5, 30, -53, 19, -20, 3, 55,
1150 19, -8, 0, -34, 5, 11, 32, -18, 15, -4,
1151 22, -13, 10, -13, 9, -8, 0, -19, -7, 29,
1152 31, 26, -13, -33, -21, 22, 65, 9, 4, 23,
1154 -119, 24, 39, 44, 51, -66, 14, -15, -31, 26,
1155 1, 0, -7, -16, 19, 28, 19, -22, 26, -4,
1156 13, -28, 16, -29, -5, 1, -16, 16, -8, 35,
1157 10, 42, 4, -17, -29, 19, 42, 7, 0, 15,
1159 31, -28, 6, -16, -16, 50, -31, -14, 0, 6,
1160 36, 17, 0, 0, -29, -14, 11, 18, 20, -25,
1161 -6, -33, -19, 20, 43, 21, 21, -14, -55, 0,
1162 -32, -40, -42, 39, 1, -8, -14, 8, -6, -3,
1164 -37, -8, 29, 22, 4, 37, -36, -9, -34, -22,
1165 17, 24, -8, 18, -15, 2, -1, 14, 31, -25,
1166 -15, -48, -13, 4, 28, 31, 5, 21, -57, 4,
1167 -53, -24, -23, 55, -6, -12, -37, 6, -11, -11,
1169 -7, -22, 18, -29, -1, 25, -36, -21, -20, 9,
1170 22, 56, 11, -6, -45, -21, 15, 16, 20, 1,
1171 33, -34, 2, 6, 17, 23, 28, -6, -25, 12,
1172 -16, -37, -53, 1, 11, 15, 8, 25, -20, 11,
1174 -76, -1, 41, 9, 19, 12, -41, -17, -55, -18,
1175 3, 63, 3, 12, -30, -5, 3, 12, 31, 0,
1176 24, -49, 8, -9, 1, 33, 12, 29, -27, 18,
1177 -37, -21, -34, 17, 3, 11, -14, 23, -25, 2,
1179 -13, -17, 15, -15, 3, -1, -33, -7, -1, 12,
1180 58, -5, -15, -13, -29, -3, 16, -13, 4, -57,
1181 10, -13, -11, 13, 21, 15, 9, -40, -55, 3,
1182 -14, -19, -44, 17, -24, -32, 5, -4, 21, 18,
1184 -82, 3, 38, 23, 24, -15, -38, -2, -37, -15,
1185 39, 2, -23, 4, -15, 12, 3, -17, 15, -58,
1186 1, -29, -6, -2, 5, 26, -7, -4, -56, 9,
1187 -35, -3, -25, 33, -32, -36, -17, -7, 15, 9,
1189 -52, -10, 27, -27, 18, -26, -38, -14, -23, 16,
1190 44, 33, -3, -20, -45, -10, 20, -15, 3, -31,
1191 50, -14, 10, 0, -5, 17, 15, -32, -24, 16,
1192 1, -15, -55, -20, -14, -8, 29, 12, 7, 32,
1194 -121, 9, 50, 10, 40, -40, -43, -9, -58, -12,
1195 25, 41, -11, -2, -31, 5, 8, -19, 15, -32,
1196 41, -30, 16, -16, -20, 28, 0, 3, -26, 22,
1197 -19, 0, -36, -4, -22, -12, 6, 9, 1, 24,
1199 36, -18, 24, 3, -28, 7, -16, 13, 26, 41,
1200 24, -1, 5, -26, -3, -12, 27, 46, 27, -10,
1201 -24, -34, -10, -8, 49, 2, 34, 0, -51, -12,
1202 -17, -38, -25, 56, 0, 0, 22, -3, -20, -22,
1204 -32, 2, 47, 42, -7, -5, -21, 18, -9, 12,
1205 5, 5, -2, -8, 10, 4, 14, 42, 38, -10,
1206 -33, -49, -5, -24, 33, 12, 17, 35, -52, -6,
1207 -38, -22, -7, 72, -7, -3, 0, -6, -25, -30,
1209 -2, -11, 36, -9, -13, -17, -21, 6, 5, 45,
1210 10, 36, 18, -33, -19, -19, 31, 44, 27, 15,
1211 16, -34, 11, -22, 22, 4, 40, 7, -21, 0,
1212 -1, -35, -36, 18, 10, 24, 46, 12, -34, -8,
1214 -71, 9, 59, 29, 8, -30, -26, 11, -30, 16,
1215 -8, 44, 9, -14, -5, -2, 19, 40, 38, 15,
1216 7, -50, 17, -38, 7, 14, 24, 43, -22, 6,
1217 -22, -19, -17, 34, 2, 20, 23, 10, -39, -16,
1219 -8, -6, 33, 4, -7, -44, -18, 21, 23, 48,
1220 46, -24, -9, -40, -3, -1, 32, 13, 11, -43,
1221 -7, -14, -3, -15, 26, -3, 21, -26, -50, -8,
1222 0, -16, -27, 34, -25, -23, 43, -17, 6, -1,
1224 -77, 13, 56, 43, 13, -57, -23, 26, -11, 19,
1225 27, -16, -17, -22, 10, 15, 19, 10, 22, -43,
1226 -16, -30, 2, -31, 11, 6, 5, 9, -52, -2,
1227 -20, 0, -8, 50, -33, -27, 19, -19, 1, -9,
1229 -47, 0, 45, -7, 7, -69, -23, 13, 2, 51,
1230 32, 14, 3, -47, -19, -8, 37, 11, 10, -16,
1231 32, -15, 19, -29, 0, -1, 28, -18, -20, 4,
1232 16, -13, -38, -3, -15, 0, 66, 0, -7, 13,
1234 -116, 20, 68, 30, 28, -83, -28, 18, -32, 22,
1235 13, 21, -5, -28, -5, 7, 24, 8, 22, -17,
1236 23, -30, 25, -45, -15, 9, 11, 18, -22, 10,
1237 -4, 2, -19, 12, -23, -3, 43, -2, -12, 4,
1239 72, -13, -29, -18, 4, 90, 37, -34, 4, -1,
1240 13, -9, -6, 11, 2, 24, -13, 3, -7, -11,
1241 -4, 4, -42, 25, 31, -1, -8, -29, -6, 17,
1242 -19, 2, -10, -6, 38, 22, -42, -19, -6, -11,
1244 3, 7, -6, 20, 25, 77, 32, -29, -31, -30,
1245 -4, -2, -14, 29, 16, 40, -26, 0, 3, -12,
1246 -13, -10, -36, 9, 15, 8, -24, 6, -7, 22,
1247 -40, 17, 8, 9, 31, 18, -66, -22, -11, -19,
1249 32, -6, -17, -31, 19, 65, 33, -41, -16, 1,
1250 0, 29, 6, 4, -13, 17, -9, 1, -8, 14,
1251 35, 3, -19, 11, 4, 0, -1, -21, 23, 30,
1252 -3, 5, -20, -44, 48, 46, -19, -3, -20, 3,
1254 -36, 13, 5, 7, 40, 51, 28, -36, -52, -27,
1255 -18, 36, -2, 22, 0, 33, -21, -2, 3, 13,
1256 26, -11, -14, -4, -10, 10, -18, 14, 22, 36,
1257 -24, 21, -1, -28, 40, 42, -42, -5, -25, -5,
1259 27, -1, -20, -17, 24, 38, 35, -26, 1, 4,
1260 35, -32, -21, -3, 2, 35, -8, -29, -24, -44,
1261 12, 24, -34, 18, 8, -7, -21, -55, -5, 21,
1262 -2, 23, -11, -28, 13, -1, -22, -33, 21, 10,
1264 -41, 18, 2, 21, 45, 24, 30, -21, -33, -24,
1265 17, -24, -29, 15, 16, 51, -21, -33, -13, -45,
1266 3, 8, -28, 2, -7, 2, -37, -19, -7, 27,
1267 -22, 39, 7, -12, 5, -5, -45, -35, 15, 1,
1269 -12, 4, -8, -29, 39, 12, 30, -33, -19, 8,
1270 21, 6, -8, -9, -13, 28, -4, -31, -24, -18,
1271 52, 23, -12, 4, -18, -5, -14, -47, 24, 34,
1272 14, 27, -22, -66, 22, 22, 1, -16, 6, 24,
1274 -81, 25, 14, 8, 61, 0, 25, -28, -54, -20,
1275 3, 14, -17, 8, 0, 44, -16, -35, -13, -18,
1276 43, 7, -6, -11, -33, 4, -30, -11, 22, 40,
1277 -6, 43, -3, -50, 14, 18, -22, -18, 1, 16,
1279 77, -2, -11, 1, -7, 47, 52, -5, 29, 33,
1280 1, -28, 0, -15, 28, 26, 2, 30, 0, 2,
1281 -22, 4, -33, -3, 36, -21, 3, -15, -2, 5,
1282 -4, 4, 6, 9, 37, 31, -5, -32, -20, -30,
1284 8, 17, 10, 40, 13, 34, 47, 0, -5, 4,
1285 -16, -21, -8, 2, 42, 43, -10, 26, 10, 2,
1286 -31, -11, -27, -19, 21, -10, -12, 20, -3, 11,
1287 -25, 20, 25, 25, 29, 28, -28, -34, -25, -38,
1289 37, 3, 0, -10, 7, 22, 48, -12, 8, 36,
1290 -12, 9, 12, -22, 12, 19, 6, 28, 0, 29,
1291 18, 3, -11, -17, 10, -18, 10, -7, 27, 18,
1292 11, 7, -3, -28, 47, 55, 18, -15, -34, -16,
1294 -31, 24, 23, 27, 29, 9, 43, -8, -26, 7,
1295 -30, 17, 4, -3, 26, 35, -5, 24, 10, 28,
1296 9, -12, -5, -33, -5, -8, -5, 29, 26, 24,
1297 -9, 23, 14, -12, 39, 52, -5, -18, -39, -24,
1299 32, 8, -3, 2, 13, -4, 50, 1, 27, 39,
1300 23, -51, -15, -30, 27, 37, 7, -1, -17, -29,
1301 -5, 23, -25, -10, 14, -26, -8, -41, -1, 9,
1302 13, 26, 5, -12, 12, 7, 14, -45, 6, -9,
1304 -36, 29, 19, 41, 34, -18, 45, 6, -8, 10,
1305 5, -43, -23, -11, 42, 53, -5, -5, -6, -30,
1306 -14, 8, -20, -26, -1, -16, -25, -4, -3, 15,
1307 -7, 41, 23, 3, 4, 3, -8, -48, 1, -17,
1309 -7, 15, 9, -9, 28, -29, 45, -5, 6, 43,
1310 9, -12, -2, -36, 12, 30, 11, -3, -17, -3,
1311 34, 22, -3, -24, -12, -24, -2, -32, 28, 22,
1312 29, 29, -5, -50, 21, 31, 38, -29, -7, 5,
1314 -76, 35, 31, 28, 49, -43, 40, 0, -29, 14,
1315 -8, -5, -10, -18, 26, 46, 0, -7, -6, -3,
1316 25, 7, 2, -40, -28, -14, -18, 3, 27, 28,
1317 8, 45, 13, -34, 13, 27, 15, -31, -12, -3,
1319 74, -17, 0, -31, -18, 73, -5, 0, 3, -5,
1320 25, 12, -3, -1, -22, 3, -9, 33, -12, -24,
1321 6, 2, -33, 9, 21, 5, 20, -27, -19, -7,
1322 -34, -37, -34, 22, 44, 0, -41, -29, -17, -21,
1324 5, 3, 21, 7, 2, 60, -10, 5, -32, -34,
1325 7, 20, -11, 16, -8, 20, -21, 29, -1, -24,
1326 -2, -13, -27, -6, 5, 15, 3, 8, -21, -1,
1327 -55, -21, -15, 38, 37, -3, -65, -32, -23, -30,
1329 35, -10, 11, -44, -3, 48, -10, -6, -17, -2,
1330 11, 51, 8, -8, -38, -3, -4, 31, -12, 2,
1331 46, 1, -10, -4, -5, 7, 26, -19, 10, 5,
1332 -18, -34, -45, -15, 54, 24, -18, -13, -31, -7,
1334 -33, 10, 34, -5, 17, 35, -15, -1, -53, -30,
1335 -6, 59, 0, 10, -24, 13, -17, 27, -1, 1,
1336 37, -13, -4, -20, -20, 18, 10, 16, 8, 11,
1337 -39, -18, -26, 0, 46, 20, -41, -15, -37, -15,
1339 29, -5, 7, -30, 1, 21, -7, 7, 0, 0,
1340 47, -9, -18, -15, -22, 14, -4, 0, -28, -57,
1341 23, 21, -25, 2, -1, 0, 7, -53, -19, -3,
1342 -17, -15, -36, 0, 19, -24, -21, -43, 9, 0,
1344 -39, 14, 30, 8, 22, 8, -12, 12, -34, -27,
1345 29, -2, -26, 2, -8, 31, -16, -3, -17, -57,
1346 14, 6, -19, -13, -16, 10, -8, -17, -20, 2,
1347 -38, 0, -17, 16, 11, -27, -44, -45, 4, -8,
1349 -9, 1, 20, -43, 17, -3, -12, 0, -20, 4,
1350 33, 29, -6, -22, -38, 7, 0, -1, -29, -30,
1351 63, 21, -3, -11, -27, 1, 14, -45, 10, 9,
1352 -1, -12, -47, -37, 28, 0, 2, -26, -4, 13,
1354 -78, 21, 43, -4, 38, -17, -17, 5, -55, -24,
1355 15, 36, -14, -4, -24, 24, -12, -5, -17, -31,
1356 54, 5, 2, -27, -43, 12, -2, -9, 9, 15,
1357 -22, 3, -28, -21, 20, -3, -20, -28, -9, 5,
1359 80, -6, 16, -11, -30, 30, 9, 28, 28, 29,
1360 13, -6, 2, -28, 3, 5, 7, 60, -5, -9,
1361 -11, 1, -24, -19, 27, -13, 32, -13, -15, -19,
1362 -19, -35, -17, 39, 43, 9, -4, -42, -32, -41,
1364 11, 14, 39, 27, -9, 17, 4, 33, -6, 0,
1365 -4, 1, -5, -10, 17, 22, -5, 57, 5, -9,
1366 -20, -13, -18, -35, 11, -3, 16, 22, -17, -13,
1367 -40, -19, 1, 55, 35, 5, -27, -44, -37, -49,
1369 40, 0, 28, -24, -14, 5, 4, 21, 7, 33,
1370 0, 32, 15, -35, -12, -1, 11, 58, -5, 16,
1371 28, 0, -1, -33, 0, -11, 39, -5, 14, -6,
1372 -3, -31, -28, 1, 53, 33, 19, -25, -46, -26,
1374 -28, 20, 51, 14, 6, -7, 0, 26, -27, 4,
1375 -18, 40, 6, -16, 1, 15, 0, 55, 5, 16,
1376 19, -14, 3, -49, -14, -1, 22, 30, 12, 0,
1377 -24, -15, -9, 17, 45, 29, -4, -28, -51, -35,
1379 34, 4, 25, -10, -9, -21, 7, 36, 26, 36,
1380 35, -28, -12, -42, 3, 16, 12, 28, -21, -42,
1381 5, 21, -16, -26, 4, -19, 19, -39, -15, -15,
1382 -1, -13, -19, 17, 17, -14, 15, -55, -4, -19,
1384 -34, 25, 48, 28, 11, -34, 2, 41, -9, 7,
1385 17, -21, -20, -24, 17, 33, 0, 24, -10, -42,
1386 -3, 5, -10, -42, -11, -8, 3, -3, -16, -9,
1387 -22, 2, 0, 33, 10, -18, -7, -58, -10, -28,
1389 -4, 11, 37, -23, 5, -46, 2, 29, 5, 39,
1390 21, 9, 0, -49, -12, 9, 16, 26, -22, -15,
1391 45, 20, 5, -40, -22, -17, 26, -31, 14, -2,
1392 14, -10, -30, -20, 27, 9, 39, -39, -18, -5,
1394 -73, 32, 60, 15, 26, -59, -2, 33, -30, 10,
1395 3, 17, -8, -30, 1, 26, 4, 22, -10, -16,
1396 36, 5, 11, -56, -37, -6, 10, 5, 13, 3,
1397 -6, 5, -11, -4, 19, 5, 16, -41, -24, -13
1401 const uint16_t ff_cb1_base[128]={
1402 19657, 18474, 18365, 17520, 21048, 18231, 18584, 16671,
1403 20363, 19069, 19409, 18430, 21844, 18753, 19613, 17411,
1404 20389, 21772, 20129, 21702, 20978, 20472, 19627, 19387,
1405 21477, 23134, 21841, 23919, 22089, 21519, 21134, 20852,
1406 19675, 17821, 19044, 17477, 19986, 16955, 18446, 16086,
1407 21138, 18899, 20952, 18929, 21452, 17833, 20104, 17159,
1408 19770, 20056, 20336, 20866, 19329, 18217, 18908, 18004,
1409 21556, 21948, 23079, 23889, 20922, 19544, 20984, 19781,
1410 19781, 20984, 19544, 20922, 23889, 23079, 21948, 21556,
1411 18004, 18908, 18217, 19329, 20866, 20336, 20056, 19770,
1412 17159, 20104, 17833, 21452, 18929, 20952, 18899, 21138,
1413 16086, 18446, 16955, 19986, 17477, 19044, 17821, 19675,
1414 20852, 21134, 21519, 22089, 23919, 21841, 23134, 21477,
1415 19387, 19627, 20472, 20978, 21702, 20129, 21772, 20389,
1416 17411, 19613, 18753, 21844, 18430, 19409, 19069, 20363,
1417 16671, 18584, 18231, 21048, 17520, 18365, 18474, 19657,
1420 const uint16_t ff_cb2_base[128]={
1421 12174, 13380, 13879, 13832, 13170, 13227, 13204, 12053,
1422 12410, 13988, 14348, 14631, 13100, 13415, 13224, 12268,
1423 11982, 13825, 13499, 14210, 13877, 14788, 13811, 13109,
1424 11449, 13275, 12833, 13717, 12728, 13696, 12759, 12405,
1425 10230, 12185, 11628, 13161, 11762, 13458, 12312, 12818,
1426 10443, 12773, 12011, 14020, 11818, 13825, 12453, 13226,
1427 10446, 13162, 11881, 14300, 12859, 16288, 13490, 15053,
1428 10155, 12820, 11519, 13973, 12041, 15081, 12635, 14198,
1429 14198, 12635, 15081, 12041, 13973, 11519, 12820, 10155,
1430 15053, 13490, 16288, 12859, 14300, 11881, 13162, 10446,
1431 13226, 12453, 13825, 11818, 14020, 12011, 12773, 10443,
1432 12818, 12312, 13458, 11762, 13161, 11628, 12185, 10230,
1433 12405, 12759, 13696, 12728, 13717, 12833, 13275, 11449,
1434 13109, 13811, 14788, 13877, 14210, 13499, 13825, 11982,
1435 12268, 13224, 13415, 13100, 14631, 14348, 13988, 12410,
1436 12053, 13204, 13227, 13170, 13832, 13879, 13380, 12174,
1439 const int16_t ff_energy_tab[32]={
1440 0, 16, 20, 25, 32, 41, 51, 65,
1441 81, 103, 129, 163, 205, 259, 326, 410,
1442 516, 650, 819, 1031, 1298, 1634, 2057, 2590,
1443 3261, 4105, 5168, 6507, 8192, 10313, 12983, 16345
1446 static const int16_t lpc_refl_cb1[64]={
1447 -4041, -4018, -3998, -3977, -3954, -3930, -3906, -3879,
1448 -3852, -3825, -3795, -3764, -3731, -3699, -3666, -3631,
1449 -3594, -3555, -3513, -3468, -3420, -3372, -3321, -3268,
1450 -3212, -3153, -3090, -3021, -2944, -2863, -2772, -2676,
1451 -2565, -2445, -2328, -2202, -2072, -1941, -1808, -1660,
1452 -1508, -1348, -1185, -994, -798, -600, -374, -110,
1453 152, 447, 720, 982, 1229, 1456, 1682, 1916,
1454 2130, 2353, 2595, 2853, 3118, 3363, 3588, 3814
1457 static const int16_t lpc_refl_cb2[32]={
1458 -3091, -2386, -1871, -1425, -1021, -649, -316, -20,
1459 267, 544, 810, 1065, 1305, 1534, 1756, 1970,
1460 2171, 2359, 2536, 2700, 2854, 2996, 3133, 3263,
1461 3386, 3499, 3603, 3701, 3789, 3870, 3947, 4020
1464 static const int16_t lpc_refl_cb3[32]={
1465 -3525, -3295, -3081, -2890, -2696, -2511, -2328, -2149,
1466 -1979, -1817, -1658, -1498, -1341, -1188, -1032, -876,
1467 -721, -561, -394, -228, -54, 119, 296, 484,
1468 683, 895, 1123, 1373, 1651, 1965, 2360, 2854
1471 static const int16_t lpc_refl_cb4[16]={
1472 -1845, -1057, -522, -77, 301, 647, 975, 1285,
1473 1582, 1873, 2163, 2452, 2735, 3017, 3299, 3569
1476 static const int16_t lpc_refl_cb5[16]={
1477 -2691, -2187, -1788, -1435, -1118, -837, -571, -316,
1478 -59, 201, 470, 759, 1077, 1457, 1908, 2495
1481 static const int16_t lpc_refl_cb6[8]={
1482 -1372, -474, 133, 632, 1100, 1571, 2075, 2672
1485 static const int16_t lpc_refl_cb7[8]={
1486 -2389, -1787, -1231, -717, -239, 234, 770, 1474
1489 static const int16_t lpc_refl_cb8[8]={
1490 -1569, -864, -296, 200, 670, 1151, 1709, 2385
1493 static const int16_t lpc_refl_cb9[8]={
1494 -2200, -1608, -1062, -569, -120, 338, 863, 1621
1497 static const int16_t lpc_refl_cb10[4]={
1498 -617, 190, 802, 1483
1501 const int16_t * const ff_lpc_refl_cb[10]={
1502 lpc_refl_cb1, lpc_refl_cb2, lpc_refl_cb3, lpc_refl_cb4, lpc_refl_cb5,
1503 lpc_refl_cb6, lpc_refl_cb7, lpc_refl_cb8, lpc_refl_cb9, lpc_refl_cb10
1506 static void ff_add_wav(int16_t *dest, int n, int skip_first, int *m, const int16_t *s1,
1507 const int8_t *s2, const int8_t *s3)
1513 for (i=!skip_first; i<3; i++)
1514 v[i] = (ff_gain_val_tab[n][i] * m[i]) >> ff_gain_exp_tab[n];
1517 for (i=0; i < BLOCKSIZE; i++)
1518 dest[i] = (s1[i]*v[0] + s2[i]*v[1] + s3[i]*v[2]) >> 12;
1520 for (i=0; i < BLOCKSIZE; i++)
1521 dest[i] = ( s2[i]*v[1] + s3[i]*v[2]) >> 12;
1526 * Copy the last offset values of *source to *target. If those values are not
1527 * enough to fill the target buffer, fill it with another copy of those values.
1529 void ff_copy_and_dup(int16_t *target, const int16_t *source, int offset)
1531 source += BUFFERSIZE - offset;
1533 memcpy(target, source, FFMIN(BLOCKSIZE, offset)*sizeof(*target));
1534 if (offset < BLOCKSIZE)
1535 memcpy(target + offset, source, (BLOCKSIZE - offset)*sizeof(*target));
1539 * Evaluate the reflection coefficients from the filter coefficients.
1541 * @return 1 if one of the reflection coefficients is greater than
1544 int ff_eval_refl(int *refl, const int16_t *coefs, AVCodecContext *avctx)
1547 int buffer1[LPC_ORDER];
1548 int buffer2[LPC_ORDER];
1552 for (i=0; i < LPC_ORDER; i++)
1553 buffer2[i] = coefs[i];
1555 refl[LPC_ORDER-1] = bp2[LPC_ORDER-1];
1557 if ((unsigned) bp2[LPC_ORDER-1] + 0x1000 > 0x1fff) {
1558 av_log(avctx, AV_LOG_ERROR, "Overflow. Broken sample?\n");
1562 for (i = LPC_ORDER-2; i >= 0; i--) {
1563 b = 0x1000-((bp2[i+1] * bp2[i+1]) >> 12);
1568 for (j=0; j <= i; j++)
1569 bp1[j] = ((bp2[j] - ((refl[i+1] * bp2[i-j]) >> 12)) * (0x1000000 / b)) >> 12;
1571 if ((unsigned) bp1[i] + 0x1000 > 0x1fff)
1576 FFSWAP(int *, bp1, bp2);
1582 * Evaluate the LPC filter coefficients from the reflection coefficients.
1583 * Does the inverse of the ff_eval_refl() function.
1585 void ff_eval_coefs(int *coefs, const int *refl)
1587 int buffer[LPC_ORDER];
1592 for (i=0; i < LPC_ORDER; i++) {
1593 b1[i] = refl[i] << 4;
1595 for (j=0; j < i; j++)
1596 b1[j] = ((refl[i] * b2[i-j-1]) >> 12) + b2[j];
1598 FFSWAP(int *, b1, b2);
1601 for (i=0; i < LPC_ORDER; i++)
1605 void ff_int_to_int16(int16_t *out, const int *inp)
1609 for (i = 0; i < LPC_ORDER; i++)
1614 * Evaluate sqrt(x << 24). x must fit in 20 bits. This value is evaluated in an
1615 * odd way to make the output identical to the binary decoder.
1617 int ff_t_sqrt(unsigned int x)
1625 return ff_sqrt(x << 20) << s;
1628 unsigned int ff_rms(const int *data)
1631 unsigned int res = 0x10000;
1634 for (i = 0; i < LPC_ORDER; i++) {
1635 res = (((0x1000000 - data[i]*data[i]) >> 12) * res) >> 12;
1640 while (res <= 0x3fff) {
1646 return ff_t_sqrt(res) >> b;
1649 int ff_interp(RA144Context *ractx, int16_t *out, int a, int copyold, int energy)
1651 int work[LPC_ORDER];
1652 int b = NBLOCKS - a;
1655 // Interpolate block coefficients from the this frame's forth block and
1656 // last frame's forth block.
1657 for (i = 0; i < LPC_ORDER; i++)
1658 out[i] = (a * ractx->lpc_coef[0][i] + b * ractx->lpc_coef[1][i])>> 2;
1660 if (ff_eval_refl(work, out, ractx->avctx)) {
1661 // The interpolated coefficients are unstable, copy either new or old
1663 ff_int_to_int16(out, ractx->lpc_coef[copyold]);
1664 return ff_rescale_rms(ractx->lpc_refl_rms[copyold], energy);
1666 return ff_rescale_rms(ff_rms(work), energy);
1670 unsigned int ff_rescale_rms(unsigned int rms, unsigned int energy)
1672 return (rms * energy) >> 10;
1675 /** inverse root mean square */
1676 int ff_irms(const int16_t *data)
1678 unsigned int i, sum = 0;
1680 for (i=0; i < BLOCKSIZE; i++)
1681 sum += data[i] * data[i];
1684 return 0; /* OOPS - division by zero */
1686 return 0x20000000 / (ff_t_sqrt(sum) >> 8);
1689 void ff_subblock_synthesis(RA144Context *ractx, const uint16_t *lpc_coefs,
1690 int cba_idx, int cb1_idx, int cb2_idx,
1693 uint16_t buffer_a[BLOCKSIZE];
1698 cba_idx += BLOCKSIZE/2 - 1;
1699 ff_copy_and_dup(buffer_a, ractx->adapt_cb, cba_idx);
1700 m[0] = (ff_irms(buffer_a) * gval) >> 12;
1704 m[1] = (ff_cb1_base[cb1_idx] * gval) >> 8;
1705 m[2] = (ff_cb2_base[cb2_idx] * gval) >> 8;
1706 memmove(ractx->adapt_cb, ractx->adapt_cb + BLOCKSIZE,
1707 (BUFFERSIZE - BLOCKSIZE) * sizeof(*ractx->adapt_cb));
1709 block = ractx->adapt_cb + BUFFERSIZE - BLOCKSIZE;
1711 ff_add_wav(block, gain, cba_idx, m, cba_idx? buffer_a: NULL,
1712 ff_cb1_vects[cb1_idx], ff_cb2_vects[cb2_idx]);
1714 memcpy(ractx->curr_sblock, ractx->curr_sblock + BLOCKSIZE,
1715 LPC_ORDER*sizeof(*ractx->curr_sblock));
1717 if (ff_celp_lp_synthesis_filter(ractx->curr_sblock + LPC_ORDER, lpc_coefs,
1718 block, BLOCKSIZE, LPC_ORDER, 1, 0xfff))
1719 memset(ractx->curr_sblock, 0, (LPC_ORDER+BLOCKSIZE)*sizeof(*ractx->curr_sblock));