xref: /haiku/src/add-ons/media/plugins/ffmpeg/gfx_conv_c_lookup.cpp (revision b6b0567fbd186f8ce8a0c90bdc7a7b5b4c649678)
1 /*
2 ** Copyright 2004, Marcus Overhagen. All rights reserved.
3 ** Distributed under the terms of the MIT license.
4 **
5 ** This file implements a image format conversion from
6 ** planar YCbCr420 format to linear RGB32 format.
7 ** Lookup tables are used to avoid doing multiplications
8 ** or conditial if() checks inside the inner loop.
9 ** These tables have been generated by gen_lookup.cpp
10 */
11 
12 #include <strings.h>
13 #include <stdio.h>
14 #include "gfx_conv_c.h"
15 
16 extern const int32 Cr_Rtab[];
17 extern const int32 Cr_Gtab[];
18 extern const int32 Cb_Gtab[];
19 extern const int32 Cb_Btab[];
20 extern const int32 Ytab[];
21 extern const uint32 *Rtab;
22 extern const uint32 *Gtab;
23 extern const uint32 *Btab;
24 
25 void gfx_conv_YCbCr420p_RGB32_c(AVFrame *in, AVFrame *out, int width, int height)
26 {
27 	uint32 poutInc = 2 * out->linesize[0];
28 	uint32 *poutEven = (uint32 *)out->data[0];
29 	uint32 *poutOdd = (uint32 *)(out->linesize[0] + (uint8 *)poutEven);
30 
31 	uint32 pi1Inc = in->linesize[0];
32 	uint32 pi1Inc2 = 2 * pi1Inc;
33 	uint32 pi2Inc = in->linesize[1];
34 	uint32 pi3Inc = in->linesize[2];
35 
36 	uint8 *pi1Base = (uint8 *)in->data[0];
37 	uint8 *pi2Base = (uint8 *)in->data[1];
38 	uint8 *pi3Base = (uint8 *)in->data[2];
39 
40 	uint32 runs = height / 2;
41 	for (uint32 i = 0; i < runs; i++) {
42 
43 		uint16 *pi1Even = (uint16 *) (i * pi1Inc2 + pi1Base);
44 		uint16 *pi1Odd = (uint16 *) (pi1Inc + (uint8 *)pi1Even);
45 		uint8 *pi2 = i * pi2Inc + pi2Base;
46 		uint8 *pi3 = i *pi3Inc + pi3Base;
47 
48 		for (uint32 j = 0; j < (uint32)width; j+= 2) {
49 
50 			int32 Cr_R, Cr_G, Cb_G, Cb_B;
51 			int32 Y0, Y1, R, G, B;
52 			uint32 temp;
53 
54 			temp = *(pi2++);
55 			Cb_G = Cb_Gtab[temp];
56 			Cb_B = Cb_Btab[temp];
57 			temp = *(pi3++);
58 			Cr_R = Cr_Rtab[temp];
59 			Cr_G = Cr_Gtab[temp];
60 
61 			temp = *(pi1Even++);
62 			Y0 = Ytab[temp & 0xff];
63 			Y1 = Ytab[temp >> 8];
64 
65 			R = (Y0 + Cr_R) >> 15;
66 			G = (Y0 + Cr_G + Cb_G) >> 15;
67 			B = (Y0 + Cb_B) >> 15;
68 			poutEven[j] = Rtab[R] | Gtab[G] | Btab[B];
69 
70 			R = (Y1 + Cr_R) >> 15;
71 			G = (Y1 + Cr_G + Cb_G) >> 15;
72 			B = (Y1 + Cb_B) >> 15;
73 			poutEven[j + 1] = Rtab[R] | Gtab[G] | Btab[B];
74 
75 			temp = *(pi1Odd++);
76 			Y0 = Ytab[temp & 0xff];
77 			Y1 = Ytab[temp >> 8];
78 
79 			R = (Y0 + Cr_R) >> 15;
80 			G = (Y0 + Cr_G + Cb_G) >> 15;
81 			B = (Y0 + Cb_B) >> 15;
82 			poutOdd[j] = Rtab[R] | Gtab[G] | Btab[B];
83 
84 			R = (Y1 + Cr_R) >> 15;
85 			G = (Y1 + Cr_G + Cb_G) >> 15;
86 			B = (Y1 + Cb_B) >> 15;
87 			poutOdd[j + 1] = Rtab[R] | Gtab[G] | Btab[B];
88 
89 		}
90 		poutEven = (uint32 *)(poutInc + (uint8 *)poutEven);
91 		poutOdd = (uint32 *)(poutInc + (uint8 *)poutOdd);
92 	}
93 	if (height & 1) {
94 		// XXX special case for last line if height not multiple of 2 goes here
95 		memset((height - 1) * out->linesize[0] + (uint8 *)out->data[0], 0, width * 4);
96 	}
97 }
98 
99 const int32 Cb_Gtab[256] = {
100 	1644167, 1631322, 1618477, 1605632, 1592787, 1579942, 1567097, 1554252, 1541407, 1528562,
101 	1515717, 1502872, 1490026, 1477181, 1464336, 1451491, 1438646, 1425801, 1412956, 1400111,
102 	1387266, 1374421, 1361576, 1348731, 1335886, 1323041, 1310196, 1297351, 1284506, 1271661,
103 	1258815, 1245970, 1233125, 1220280, 1207435, 1194590, 1181745, 1168900, 1156055, 1143210,
104 	1130365, 1117520, 1104675, 1091830, 1078985, 1066140, 1053295, 1040450, 1027604, 1014759,
105 	1001914, 989069, 976224, 963379, 950534, 937689, 924844, 911999, 899154, 886309,
106 	873464, 860619, 847774, 834929, 822084, 809239, 796393, 783548, 770703, 757858,
107 	745013, 732168, 719323, 706478, 693633, 680788, 667943, 655098, 642253, 629408,
108 	616563, 603718, 590873, 578028, 565182, 552337, 539492, 526647, 513802, 500957,
109 	488112, 475267, 462422, 449577, 436732, 423887, 411042, 398197, 385352, 372507,
110 	359662, 346817, 333971, 321126, 308281, 295436, 282591, 269746, 256901, 244056,
111 	231211, 218366, 205521, 192676, 179831, 166986, 154141, 141296, 128451, 115606,
112 	102760, 89915, 77070, 64225, 51380, 38535, 25690, 12845, 0, -12844,
113 	-25689, -38534, -51379, -64224, -77069, -89914, -102759, -115605, -128450, -141295,
114 	-154140, -166985, -179830, -192675, -205520, -218365, -231210, -244055, -256900, -269745,
115 	-282590, -295435, -308280, -321125, -333970, -346816, -359661, -372506, -385351, -398196,
116 	-411041, -423886, -436731, -449576, -462421, -475266, -488111, -500956, -513801, -526646,
117 	-539491, -552336, -565181, -578027, -590872, -603717, -616562, -629407, -642252, -655097,
118 	-667942, -680787, -693632, -706477, -719322, -732167, -745012, -757857, -770702, -783547,
119 	-796392, -809238, -822083, -834928, -847773, -860618, -873463, -886308, -899153, -911998,
120 	-924843, -937688, -950533, -963378, -976223, -989068, -1001913, -1014758, -1027603, -1040449,
121 	-1053294, -1066139, -1078984, -1091829, -1104674, -1117519, -1130364, -1143209, -1156054, -1168899,
122 	-1181744, -1194589, -1207434, -1220279, -1233124, -1245969, -1258814, -1271660, -1284505, -1297350,
123 	-1310195, -1323040, -1335885, -1348730, -1361575, -1374420, -1387265, -1400110, -1412955, -1425800,
124 	-1438645, -1451490, -1464335, -1477180, -1490025, -1502871, -1515716, -1528561, -1541406, -1554251,
125 	-1567096, -1579941, -1592786, -1605631, -1618476, -1631321,
126 };
127 
128 const int32 Cb_Btab[256] = {
129 	-8459910, -8393817, -8327724, -8261631, -8195538, -8129445, -8063352, -7997259, -7931166, -7865073,
130 	-7798980, -7732887, -7666793, -7600700, -7534607, -7468514, -7402421, -7336328, -7270235, -7204142,
131 	-7138049, -7071956, -7005863, -6939770, -6873677, -6807584, -6741491, -6675398, -6609305, -6543212,
132 	-6477118, -6411025, -6344932, -6278839, -6212746, -6146653, -6080560, -6014467, -5948374, -5882281,
133 	-5816188, -5750095, -5684002, -5617909, -5551816, -5485723, -5419630, -5353537, -5287443, -5221350,
134 	-5155257, -5089164, -5023071, -4956978, -4890885, -4824792, -4758699, -4692606, -4626513, -4560420,
135 	-4494327, -4428234, -4362141, -4296048, -4229955, -4163862, -4097768, -4031675, -3965582, -3899489,
136 	-3833396, -3767303, -3701210, -3635117, -3569024, -3502931, -3436838, -3370745, -3304652, -3238559,
137 	-3172466, -3106373, -3040280, -2974187, -2908093, -2842000, -2775907, -2709814, -2643721, -2577628,
138 	-2511535, -2445442, -2379349, -2313256, -2247163, -2181070, -2114977, -2048884, -1982791, -1916698,
139 	-1850605, -1784512, -1718418, -1652325, -1586232, -1520139, -1454046, -1387953, -1321860, -1255767,
140 	-1189674, -1123581, -1057488, -991395, -925302, -859209, -793116, -727023, -660930, -594837,
141 	-528743, -462650, -396557, -330464, -264371, -198278, -132185, -66092, 0, 66093,
142 	132186, 198279, 264372, 330465, 396558, 462651, 528744, 594838, 660931, 727024,
143 	793117, 859210, 925303, 991396, 1057489, 1123582, 1189675, 1255768, 1321861, 1387954,
144 	1454047, 1520140, 1586233, 1652326, 1718419, 1784513, 1850606, 1916699, 1982792, 2048885,
145 	2114978, 2181071, 2247164, 2313257, 2379350, 2445443, 2511536, 2577629, 2643722, 2709815,
146 	2775908, 2842001, 2908094, 2974188, 3040281, 3106374, 3172467, 3238560, 3304653, 3370746,
147 	3436839, 3502932, 3569025, 3635118, 3701211, 3767304, 3833397, 3899490, 3965583, 4031676,
148 	4097769, 4163863, 4229956, 4296049, 4362142, 4428235, 4494328, 4560421, 4626514, 4692607,
149 	4758700, 4824793, 4890886, 4956979, 5023072, 5089165, 5155258, 5221351, 5287444, 5353538,
150 	5419631, 5485724, 5551817, 5617910, 5684003, 5750096, 5816189, 5882282, 5948375, 6014468,
151 	6080561, 6146654, 6212747, 6278840, 6344933, 6411026, 6477119, 6543213, 6609306, 6675399,
152 	6741492, 6807585, 6873678, 6939771, 7005864, 7071957, 7138050, 7204143, 7270236, 7336329,
153 	7402422, 7468515, 7534608, 7600701, 7666794, 7732888, 7798981, 7865074, 7931167, 7997260,
154 	8063353, 8129446, 8195539, 8261632, 8327725, 8393818,
155 };
156 
157 const int32 Cr_Rtab[256] = {
158 	-6694108, -6641810, -6589513, -6537215, -6484917, -6432620, -6380322, -6328024, -6275726, -6223429,
159 	-6171131, -6118833, -6066535, -6014238, -5961940, -5909642, -5857345, -5805047, -5752749, -5700451,
160 	-5648154, -5595856, -5543558, -5491260, -5438963, -5386665, -5334367, -5282070, -5229772, -5177474,
161 	-5125176, -5072879, -5020581, -4968283, -4915985, -4863688, -4811390, -4759092, -4706795, -4654497,
162 	-4602199, -4549901, -4497604, -4445306, -4393008, -4340710, -4288413, -4236115, -4183817, -4131520,
163 	-4079222, -4026924, -3974626, -3922329, -3870031, -3817733, -3765435, -3713138, -3660840, -3608542,
164 	-3556245, -3503947, -3451649, -3399351, -3347054, -3294756, -3242458, -3190160, -3137863, -3085565,
165 	-3033267, -2980969, -2928672, -2876374, -2824076, -2771779, -2719481, -2667183, -2614885, -2562588,
166 	-2510290, -2457992, -2405694, -2353397, -2301099, -2248801, -2196504, -2144206, -2091908, -2039610,
167 	-1987313, -1935015, -1882717, -1830419, -1778122, -1725824, -1673526, -1621229, -1568931, -1516633,
168 	-1464335, -1412038, -1359740, -1307442, -1255144, -1202847, -1150549, -1098251, -1045954, -993656,
169 	-941358, -889060, -836763, -784465, -732167, -679869, -627572, -575274, -522976, -470679,
170 	-418381, -366083, -313785, -261488, -209190, -156892, -104594, -52297, 0, 52298,
171 	104595, 156893, 209191, 261489, 313786, 366084, 418382, 470680, 522977, 575275,
172 	627573, 679870, 732168, 784466, 836764, 889061, 941359, 993657, 1045955, 1098252,
173 	1150550, 1202848, 1255145, 1307443, 1359741, 1412039, 1464336, 1516634, 1568932, 1621230,
174 	1673527, 1725825, 1778123, 1830420, 1882718, 1935016, 1987314, 2039611, 2091909, 2144207,
175 	2196505, 2248802, 2301100, 2353398, 2405695, 2457993, 2510291, 2562589, 2614886, 2667184,
176 	2719482, 2771780, 2824077, 2876375, 2928673, 2980970, 3033268, 3085566, 3137864, 3190161,
177 	3242459, 3294757, 3347055, 3399352, 3451650, 3503948, 3556246, 3608543, 3660841, 3713139,
178 	3765436, 3817734, 3870032, 3922330, 3974627, 4026925, 4079223, 4131521, 4183818, 4236116,
179 	4288414, 4340711, 4393009, 4445307, 4497605, 4549902, 4602200, 4654498, 4706796, 4759093,
180 	4811391, 4863689, 4915986, 4968284, 5020582, 5072880, 5125177, 5177475, 5229773, 5282071,
181 	5334368, 5386666, 5438964, 5491261, 5543559, 5595857, 5648155, 5700452, 5752750, 5805048,
182 	5857346, 5909643, 5961941, 6014239, 6066536, 6118834, 6171132, 6223430, 6275727, 6328025,
183 	6380323, 6432621, 6484918, 6537216, 6589514, 6641811,
184 };
185 
186 const int32 Cr_Gtab[256] = {
187 	3409969, 3383329, 3356688, 3330048, 3303408, 3276767, 3250127, 3223486, 3196846, 3170206,
188 	3143565, 3116925, 3090285, 3063644, 3037004, 3010363, 2983723, 2957083, 2930442, 2903802,
189 	2877161, 2850521, 2823881, 2797240, 2770600, 2743960, 2717319, 2690679, 2664038, 2637398,
190 	2610758, 2584117, 2557477, 2530836, 2504196, 2477556, 2450915, 2424275, 2397635, 2370994,
191 	2344354, 2317713, 2291073, 2264433, 2237792, 2211152, 2184511, 2157871, 2131231, 2104590,
192 	2077950, 2051310, 2024669, 1998029, 1971388, 1944748, 1918108, 1891467, 1864827, 1838186,
193 	1811546, 1784906, 1758265, 1731625, 1704985, 1678344, 1651704, 1625063, 1598423, 1571783,
194 	1545142, 1518502, 1491862, 1465221, 1438581, 1411940, 1385300, 1358660, 1332019, 1305379,
195 	1278738, 1252098, 1225458, 1198817, 1172177, 1145537, 1118896, 1092256, 1065615, 1038975,
196 	1012335, 985694, 959054, 932413, 905773, 879133, 852492, 825852, 799212, 772571,
197 	745931, 719290, 692650, 666010, 639369, 612729, 586088, 559448, 532808, 506167,
198 	479527, 452887, 426246, 399606, 372965, 346325, 319685, 293044, 266404, 239763,
199 	213123, 186483, 159842, 133202, 106562, 79921, 53281, 26640, 0, -26639,
200 	-53280, -79920, -106561, -133201, -159841, -186482, -213122, -239762, -266403, -293043,
201 	-319684, -346324, -372964, -399605, -426245, -452886, -479526, -506166, -532807, -559447,
202 	-586087, -612728, -639368, -666009, -692649, -719289, -745930, -772570, -799211, -825851,
203 	-852491, -879132, -905772, -932412, -959053, -985693, -1012334, -1038974, -1065614, -1092255,
204 	-1118895, -1145536, -1172176, -1198816, -1225457, -1252097, -1278737, -1305378, -1332018, -1358659,
205 	-1385299, -1411939, -1438580, -1465220, -1491861, -1518501, -1545141, -1571782, -1598422, -1625062,
206 	-1651703, -1678343, -1704984, -1731624, -1758264, -1784905, -1811545, -1838185, -1864826, -1891466,
207 	-1918107, -1944747, -1971387, -1998028, -2024668, -2051309, -2077949, -2104589, -2131230, -2157870,
208 	-2184510, -2211151, -2237791, -2264432, -2291072, -2317712, -2344353, -2370993, -2397634, -2424274,
209 	-2450914, -2477555, -2504195, -2530835, -2557476, -2584116, -2610757, -2637397, -2664037, -2690678,
210 	-2717318, -2743959, -2770599, -2797239, -2823880, -2850520, -2877160, -2903801, -2930441, -2957082,
211 	-2983722, -3010362, -3037003, -3063643, -3090284, -3116924, -3143564, -3170205, -3196845, -3223485,
212 	-3250126, -3276766, -3303407, -3330047, -3356687, -3383328,
213 };
214 
215 const int32 Ytab[256] = {
216 	-610270, -572128, -533986, -495844, -457702, -419560, -381419, -343277, -305135, -266993,
217 	-228851, -190709, -152567, -114425, -76283, -38141, 0, 38142, 76284, 114426,
218 	152568, 190710, 228852, 266994, 305136, 343278, 381420, 419561, 457703, 495845,
219 	533987, 572129, 610271, 648413, 686555, 724697, 762839, 800981, 839123, 877265,
220 	915407, 953549, 991691, 1029833, 1067975, 1106117, 1144259, 1182401, 1220542, 1258684,
221 	1296826, 1334968, 1373110, 1411252, 1449394, 1487536, 1525678, 1563820, 1601962, 1640104,
222 	1678246, 1716388, 1754530, 1792672, 1830814, 1868956, 1907098, 1945240, 1983382, 2021523,
223 	2059665, 2097807, 2135949, 2174091, 2212233, 2250375, 2288517, 2326659, 2364801, 2402943,
224 	2441085, 2479227, 2517369, 2555511, 2593653, 2631795, 2669937, 2708079, 2746221, 2784362,
225 	2822504, 2860646, 2898788, 2936930, 2975072, 3013214, 3051356, 3089498, 3127640, 3165782,
226 	3203924, 3242066, 3280208, 3318350, 3356492, 3394634, 3432776, 3470918, 3509060, 3547202,
227 	3585343, 3623485, 3661627, 3699769, 3737911, 3776053, 3814195, 3852337, 3890479, 3928621,
228 	3966763, 4004905, 4043047, 4081189, 4119331, 4157473, 4195615, 4233757, 4271899, 4310041,
229 	4348183, 4386324, 4424466, 4462608, 4500750, 4538892, 4577034, 4615176, 4653318, 4691460,
230 	4729602, 4767744, 4805886, 4844028, 4882170, 4920312, 4958454, 4996596, 5034738, 5072880,
231 	5111022, 5149164, 5187305, 5225447, 5263589, 5301731, 5339873, 5378015, 5416157, 5454299,
232 	5492441, 5530583, 5568725, 5606867, 5645009, 5683151, 5721293, 5759435, 5797577, 5835719,
233 	5873861, 5912003, 5950145, 5988286, 6026428, 6064570, 6102712, 6140854, 6178996, 6217138,
234 	6255280, 6293422, 6331564, 6369706, 6407848, 6445990, 6484132, 6522274, 6560416, 6598558,
235 	6636700, 6674842, 6712984, 6751126, 6789267, 6827409, 6865551, 6903693, 6941835, 6979977,
236 	7018119, 7056261, 7094403, 7132545, 7170687, 7208829, 7246971, 7285113, 7323255, 7361397,
237 	7399539, 7437681, 7475823, 7513965, 7552106, 7590248, 7628390, 7666532, 7704674, 7742816,
238 	7780958, 7819100, 7857242, 7895384, 7933526, 7971668, 8009810, 8047952, 8086094, 8124236,
239 	8162378, 8200520, 8238662, 8276804, 8314946, 8353087, 8391229, 8429371, 8467513, 8505655,
240 	8543797, 8581939, 8620081, 8658223, 8696365, 8734507, 8772649, 8810791, 8848933, 8887075,
241 	8925217, 8963359, 9001501, 9039643, 9077785, 9115927,
242 };
243 
244 const uint32 Rsat[704] = {
245 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
246 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
247 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
248 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
249 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
250 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
251 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
252 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
253 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
254 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
255 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
256 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
257 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
258 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
259 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
260 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
261 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
262 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
263 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
264 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
265 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
266 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
267 	0x000000, 0x000000, 0x000000,
268 	0x000000, 0x010000, 0x020000, 0x030000, 0x040000, 0x050000, 0x060000, 0x070000, 0x080000, 0x090000,
269 	0x0a0000, 0x0b0000, 0x0c0000, 0x0d0000, 0x0e0000, 0x0f0000, 0x100000, 0x110000, 0x120000, 0x130000,
270 	0x140000, 0x150000, 0x160000, 0x170000, 0x180000, 0x190000, 0x1a0000, 0x1b0000, 0x1c0000, 0x1d0000,
271 	0x1e0000, 0x1f0000, 0x200000, 0x210000, 0x220000, 0x230000, 0x240000, 0x250000, 0x260000, 0x270000,
272 	0x280000, 0x290000, 0x2a0000, 0x2b0000, 0x2c0000, 0x2d0000, 0x2e0000, 0x2f0000, 0x300000, 0x310000,
273 	0x320000, 0x330000, 0x340000, 0x350000, 0x360000, 0x370000, 0x380000, 0x390000, 0x3a0000, 0x3b0000,
274 	0x3c0000, 0x3d0000, 0x3e0000, 0x3f0000, 0x400000, 0x410000, 0x420000, 0x430000, 0x440000, 0x450000,
275 	0x460000, 0x470000, 0x480000, 0x490000, 0x4a0000, 0x4b0000, 0x4c0000, 0x4d0000, 0x4e0000, 0x4f0000,
276 	0x500000, 0x510000, 0x520000, 0x530000, 0x540000, 0x550000, 0x560000, 0x570000, 0x580000, 0x590000,
277 	0x5a0000, 0x5b0000, 0x5c0000, 0x5d0000, 0x5e0000, 0x5f0000, 0x600000, 0x610000, 0x620000, 0x630000,
278 	0x640000, 0x650000, 0x660000, 0x670000, 0x680000, 0x690000, 0x6a0000, 0x6b0000, 0x6c0000, 0x6d0000,
279 	0x6e0000, 0x6f0000, 0x700000, 0x710000, 0x720000, 0x730000, 0x740000, 0x750000, 0x760000, 0x770000,
280 	0x780000, 0x790000, 0x7a0000, 0x7b0000, 0x7c0000, 0x7d0000, 0x7e0000, 0x7f0000, 0x800000, 0x810000,
281 	0x820000, 0x830000, 0x840000, 0x850000, 0x860000, 0x870000, 0x880000, 0x890000, 0x8a0000, 0x8b0000,
282 	0x8c0000, 0x8d0000, 0x8e0000, 0x8f0000, 0x900000, 0x910000, 0x920000, 0x930000, 0x940000, 0x950000,
283 	0x960000, 0x970000, 0x980000, 0x990000, 0x9a0000, 0x9b0000, 0x9c0000, 0x9d0000, 0x9e0000, 0x9f0000,
284 	0xa00000, 0xa10000, 0xa20000, 0xa30000, 0xa40000, 0xa50000, 0xa60000, 0xa70000, 0xa80000, 0xa90000,
285 	0xaa0000, 0xab0000, 0xac0000, 0xad0000, 0xae0000, 0xaf0000, 0xb00000, 0xb10000, 0xb20000, 0xb30000,
286 	0xb40000, 0xb50000, 0xb60000, 0xb70000, 0xb80000, 0xb90000, 0xba0000, 0xbb0000, 0xbc0000, 0xbd0000,
287 	0xbe0000, 0xbf0000, 0xc00000, 0xc10000, 0xc20000, 0xc30000, 0xc40000, 0xc50000, 0xc60000, 0xc70000,
288 	0xc80000, 0xc90000, 0xca0000, 0xcb0000, 0xcc0000, 0xcd0000, 0xce0000, 0xcf0000, 0xd00000, 0xd10000,
289 	0xd20000, 0xd30000, 0xd40000, 0xd50000, 0xd60000, 0xd70000, 0xd80000, 0xd90000, 0xda0000, 0xdb0000,
290 	0xdc0000, 0xdd0000, 0xde0000, 0xdf0000, 0xe00000, 0xe10000, 0xe20000, 0xe30000, 0xe40000, 0xe50000,
291 	0xe60000, 0xe70000, 0xe80000, 0xe90000, 0xea0000, 0xeb0000, 0xec0000, 0xed0000, 0xee0000, 0xef0000,
292 	0xf00000, 0xf10000, 0xf20000, 0xf30000, 0xf40000, 0xf50000, 0xf60000, 0xf70000, 0xf80000, 0xf90000,
293 	0xfa0000, 0xfb0000, 0xfc0000, 0xfd0000, 0xfe0000, 0xff0000,
294 	0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
295 	0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
296 	0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
297 	0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
298 	0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
299 	0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
300 	0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
301 	0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
302 	0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
303 	0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
304 	0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
305 	0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
306 	0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
307 	0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
308 	0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
309 	0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
310 	0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
311 	0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
312 	0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
313 	0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
314 	0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
315 	0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
316 	0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
317 };
318 const uint32 *Rtab = &Rsat[223];
319 
320 const uint32 Gsat[605] = {
321 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
322 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
323 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
324 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
325 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
326 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
327 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
328 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
329 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
330 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
331 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
332 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
333 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
334 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
335 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
336 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
337 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
338 	0x000000, 0x000000,
339 	0x000000, 0x000100, 0x000200, 0x000300, 0x000400, 0x000500, 0x000600, 0x000700, 0x000800, 0x000900,
340 	0x000a00, 0x000b00, 0x000c00, 0x000d00, 0x000e00, 0x000f00, 0x001000, 0x001100, 0x001200, 0x001300,
341 	0x001400, 0x001500, 0x001600, 0x001700, 0x001800, 0x001900, 0x001a00, 0x001b00, 0x001c00, 0x001d00,
342 	0x001e00, 0x001f00, 0x002000, 0x002100, 0x002200, 0x002300, 0x002400, 0x002500, 0x002600, 0x002700,
343 	0x002800, 0x002900, 0x002a00, 0x002b00, 0x002c00, 0x002d00, 0x002e00, 0x002f00, 0x003000, 0x003100,
344 	0x003200, 0x003300, 0x003400, 0x003500, 0x003600, 0x003700, 0x003800, 0x003900, 0x003a00, 0x003b00,
345 	0x003c00, 0x003d00, 0x003e00, 0x003f00, 0x004000, 0x004100, 0x004200, 0x004300, 0x004400, 0x004500,
346 	0x004600, 0x004700, 0x004800, 0x004900, 0x004a00, 0x004b00, 0x004c00, 0x004d00, 0x004e00, 0x004f00,
347 	0x005000, 0x005100, 0x005200, 0x005300, 0x005400, 0x005500, 0x005600, 0x005700, 0x005800, 0x005900,
348 	0x005a00, 0x005b00, 0x005c00, 0x005d00, 0x005e00, 0x005f00, 0x006000, 0x006100, 0x006200, 0x006300,
349 	0x006400, 0x006500, 0x006600, 0x006700, 0x006800, 0x006900, 0x006a00, 0x006b00, 0x006c00, 0x006d00,
350 	0x006e00, 0x006f00, 0x007000, 0x007100, 0x007200, 0x007300, 0x007400, 0x007500, 0x007600, 0x007700,
351 	0x007800, 0x007900, 0x007a00, 0x007b00, 0x007c00, 0x007d00, 0x007e00, 0x007f00, 0x008000, 0x008100,
352 	0x008200, 0x008300, 0x008400, 0x008500, 0x008600, 0x008700, 0x008800, 0x008900, 0x008a00, 0x008b00,
353 	0x008c00, 0x008d00, 0x008e00, 0x008f00, 0x009000, 0x009100, 0x009200, 0x009300, 0x009400, 0x009500,
354 	0x009600, 0x009700, 0x009800, 0x009900, 0x009a00, 0x009b00, 0x009c00, 0x009d00, 0x009e00, 0x009f00,
355 	0x00a000, 0x00a100, 0x00a200, 0x00a300, 0x00a400, 0x00a500, 0x00a600, 0x00a700, 0x00a800, 0x00a900,
356 	0x00aa00, 0x00ab00, 0x00ac00, 0x00ad00, 0x00ae00, 0x00af00, 0x00b000, 0x00b100, 0x00b200, 0x00b300,
357 	0x00b400, 0x00b500, 0x00b600, 0x00b700, 0x00b800, 0x00b900, 0x00ba00, 0x00bb00, 0x00bc00, 0x00bd00,
358 	0x00be00, 0x00bf00, 0x00c000, 0x00c100, 0x00c200, 0x00c300, 0x00c400, 0x00c500, 0x00c600, 0x00c700,
359 	0x00c800, 0x00c900, 0x00ca00, 0x00cb00, 0x00cc00, 0x00cd00, 0x00ce00, 0x00cf00, 0x00d000, 0x00d100,
360 	0x00d200, 0x00d300, 0x00d400, 0x00d500, 0x00d600, 0x00d700, 0x00d800, 0x00d900, 0x00da00, 0x00db00,
361 	0x00dc00, 0x00dd00, 0x00de00, 0x00df00, 0x00e000, 0x00e100, 0x00e200, 0x00e300, 0x00e400, 0x00e500,
362 	0x00e600, 0x00e700, 0x00e800, 0x00e900, 0x00ea00, 0x00eb00, 0x00ec00, 0x00ed00, 0x00ee00, 0x00ef00,
363 	0x00f000, 0x00f100, 0x00f200, 0x00f300, 0x00f400, 0x00f500, 0x00f600, 0x00f700, 0x00f800, 0x00f900,
364 	0x00fa00, 0x00fb00, 0x00fc00, 0x00fd00, 0x00fe00, 0x00ff00,
365 	0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00,
366 	0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00,
367 	0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00,
368 	0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00,
369 	0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00,
370 	0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00,
371 	0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00,
372 	0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00,
373 	0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00,
374 	0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00,
375 	0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00,
376 	0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00,
377 	0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00,
378 	0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00,
379 	0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00,
380 	0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00,
381 	0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00,
382 	0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00,
383 };
384 const uint32 *Gtab = &Gsat[172];
385 
386 const uint32 Bsat[812] = {
387 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
388 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
389 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
390 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
391 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
392 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
393 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
394 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
395 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
396 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
397 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
398 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
399 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
400 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
401 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
402 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
403 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
404 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
405 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
406 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
407 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
408 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
409 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
410 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
411 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
412 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
413 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
414 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
415 	0x000000, 0x000001, 0x000002, 0x000003, 0x000004, 0x000005, 0x000006, 0x000007, 0x000008, 0x000009,
416 	0x00000a, 0x00000b, 0x00000c, 0x00000d, 0x00000e, 0x00000f, 0x000010, 0x000011, 0x000012, 0x000013,
417 	0x000014, 0x000015, 0x000016, 0x000017, 0x000018, 0x000019, 0x00001a, 0x00001b, 0x00001c, 0x00001d,
418 	0x00001e, 0x00001f, 0x000020, 0x000021, 0x000022, 0x000023, 0x000024, 0x000025, 0x000026, 0x000027,
419 	0x000028, 0x000029, 0x00002a, 0x00002b, 0x00002c, 0x00002d, 0x00002e, 0x00002f, 0x000030, 0x000031,
420 	0x000032, 0x000033, 0x000034, 0x000035, 0x000036, 0x000037, 0x000038, 0x000039, 0x00003a, 0x00003b,
421 	0x00003c, 0x00003d, 0x00003e, 0x00003f, 0x000040, 0x000041, 0x000042, 0x000043, 0x000044, 0x000045,
422 	0x000046, 0x000047, 0x000048, 0x000049, 0x00004a, 0x00004b, 0x00004c, 0x00004d, 0x00004e, 0x00004f,
423 	0x000050, 0x000051, 0x000052, 0x000053, 0x000054, 0x000055, 0x000056, 0x000057, 0x000058, 0x000059,
424 	0x00005a, 0x00005b, 0x00005c, 0x00005d, 0x00005e, 0x00005f, 0x000060, 0x000061, 0x000062, 0x000063,
425 	0x000064, 0x000065, 0x000066, 0x000067, 0x000068, 0x000069, 0x00006a, 0x00006b, 0x00006c, 0x00006d,
426 	0x00006e, 0x00006f, 0x000070, 0x000071, 0x000072, 0x000073, 0x000074, 0x000075, 0x000076, 0x000077,
427 	0x000078, 0x000079, 0x00007a, 0x00007b, 0x00007c, 0x00007d, 0x00007e, 0x00007f, 0x000080, 0x000081,
428 	0x000082, 0x000083, 0x000084, 0x000085, 0x000086, 0x000087, 0x000088, 0x000089, 0x00008a, 0x00008b,
429 	0x00008c, 0x00008d, 0x00008e, 0x00008f, 0x000090, 0x000091, 0x000092, 0x000093, 0x000094, 0x000095,
430 	0x000096, 0x000097, 0x000098, 0x000099, 0x00009a, 0x00009b, 0x00009c, 0x00009d, 0x00009e, 0x00009f,
431 	0x0000a0, 0x0000a1, 0x0000a2, 0x0000a3, 0x0000a4, 0x0000a5, 0x0000a6, 0x0000a7, 0x0000a8, 0x0000a9,
432 	0x0000aa, 0x0000ab, 0x0000ac, 0x0000ad, 0x0000ae, 0x0000af, 0x0000b0, 0x0000b1, 0x0000b2, 0x0000b3,
433 	0x0000b4, 0x0000b5, 0x0000b6, 0x0000b7, 0x0000b8, 0x0000b9, 0x0000ba, 0x0000bb, 0x0000bc, 0x0000bd,
434 	0x0000be, 0x0000bf, 0x0000c0, 0x0000c1, 0x0000c2, 0x0000c3, 0x0000c4, 0x0000c5, 0x0000c6, 0x0000c7,
435 	0x0000c8, 0x0000c9, 0x0000ca, 0x0000cb, 0x0000cc, 0x0000cd, 0x0000ce, 0x0000cf, 0x0000d0, 0x0000d1,
436 	0x0000d2, 0x0000d3, 0x0000d4, 0x0000d5, 0x0000d6, 0x0000d7, 0x0000d8, 0x0000d9, 0x0000da, 0x0000db,
437 	0x0000dc, 0x0000dd, 0x0000de, 0x0000df, 0x0000e0, 0x0000e1, 0x0000e2, 0x0000e3, 0x0000e4, 0x0000e5,
438 	0x0000e6, 0x0000e7, 0x0000e8, 0x0000e9, 0x0000ea, 0x0000eb, 0x0000ec, 0x0000ed, 0x0000ee, 0x0000ef,
439 	0x0000f0, 0x0000f1, 0x0000f2, 0x0000f3, 0x0000f4, 0x0000f5, 0x0000f6, 0x0000f7, 0x0000f8, 0x0000f9,
440 	0x0000fa, 0x0000fb, 0x0000fc, 0x0000fd, 0x0000fe, 0x0000ff,
441 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
442 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
443 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
444 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
445 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
446 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
447 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
448 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
449 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
450 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
451 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
452 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
453 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
454 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
455 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
456 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
457 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
458 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
459 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
460 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
461 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
462 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
463 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
464 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
465 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
466 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
467 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
468 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
469 };
470 const uint32 *Btab = &Bsat[277];
471