]> www.fi.muni.cz Git - evince.git/blob - pdf/xpdf/Stream-CCITT.h
fe337408d25795fb1fc388ed55898965ad264a4e
[evince.git] / pdf / xpdf / Stream-CCITT.h
1 //========================================================================
2 //
3 // Stream-CCITT.h
4 //
5 // Tables for CCITT Fax decoding.
6 //
7 // Copyright 1996 Derek B. Noonburg
8 //
9 //========================================================================
10
11 struct CCITTCode {
12   short bits;
13   short n;
14 };
15
16 #define ccittEOL -2
17
18 //------------------------------------------------------------------------
19 // 2D codes
20 //------------------------------------------------------------------------
21
22 #define twoDimPass   0
23 #define twoDimHoriz  1
24 #define twoDimVert0  2
25 #define twoDimVertR1 3
26 #define twoDimVertL1 4
27 #define twoDimVertR2 5
28 #define twoDimVertL2 6
29 #define twoDimVertR3 7
30 #define twoDimVertL3 8
31
32 // 1-4 bit codes
33 static CCITTCode twoDimTab1[16] = {
34   {-1, -1},                             // 0000
35   {4, twoDimPass},                      // 0001
36   {3, twoDimHoriz}, {3, twoDimHoriz},   // 001x
37   {3, twoDimVertL1}, {3, twoDimVertL1}, // 010x
38   {3, twoDimVertR1}, {3, twoDimVertR1}, // 011x
39   {1, twoDimVert0}, {1, twoDimVert0},   // 1xxx
40     {1, twoDimVert0}, {1, twoDimVert0},
41     {1, twoDimVert0}, {1, twoDimVert0},
42     {1, twoDimVert0}, {1, twoDimVert0}
43 };
44
45 //------------------------------------------------------------------------
46 // white run lengths
47 //------------------------------------------------------------------------
48
49 // 11-12 bit codes (upper 7 bits are 0)
50 static CCITTCode whiteTab1[32] = {
51   {-1, -1},                                     // 00000
52   {12, ccittEOL},                               // 00001
53   {-1, -1}, {-1, -1},                           // 0001x
54   {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1},       // 001xx
55   {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1},       // 010xx
56   {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1},       // 011xx
57   {11, 1792}, {11, 1792},                       // 1000x
58   {12, 1984},                                   // 10010
59   {12, 2048},                                   // 10011
60   {12, 2112},                                   // 10100
61   {12, 2176},                                   // 10101
62   {12, 2240},                                   // 10110
63   {12, 2304},                                   // 10111
64   {11, 1856}, {11, 1856},                       // 1100x
65   {11, 1920}, {11, 1920},                       // 1101x
66   {12, 2368},                                   // 11100
67   {12, 2432},                                   // 11101
68   {12, 2496},                                   // 11110
69   {12, 2560}                                    // 11111
70 };
71
72 // 1-9 bit codes
73 static CCITTCode whiteTab2[512] = {
74   {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1},       // 0000000xx
75   {8, 29}, {8, 29},                             // 00000010x
76   {8, 30}, {8, 30},                             // 00000011x
77   {8, 45}, {8, 45},                             // 00000100x
78   {8, 46}, {8, 46},                             // 00000101x
79   {7, 22}, {7, 22}, {7, 22}, {7, 22},           // 0000011xx
80   {7, 23}, {7, 23}, {7, 23}, {7, 23},           // 0000100xx
81   {8, 47}, {8, 47},                             // 00001010x
82   {8, 48}, {8, 48},                             // 00001011x
83   {6, 13}, {6, 13}, {6, 13}, {6, 13},           // 000011xxx
84     {6, 13}, {6, 13}, {6, 13}, {6, 13},
85   {7, 20}, {7, 20}, {7, 20}, {7, 20},           // 0001000xx
86   {8, 33}, {8, 33},                             // 00010010x
87   {8, 34}, {8, 34},                             // 00010011x
88   {8, 35}, {8, 35},                             // 00010100x
89   {8, 36}, {8, 36},                             // 00010101x
90   {8, 37}, {8, 37},                             // 00010110x
91   {8, 38}, {8, 38},                             // 00010111x
92   {7, 19}, {7, 19}, {7, 19}, {7, 19},           // 0001100xx
93   {8, 31}, {8, 31},                             // 00011010x
94   {8, 32}, {8, 32},                             // 00011011x
95   {6, 1}, {6, 1}, {6, 1}, {6, 1},               // 000111xxx
96     {6, 1}, {6, 1}, {6, 1}, {6, 1},
97   {6, 12}, {6, 12}, {6, 12}, {6, 12},           // 001000xxx
98     {6, 12}, {6, 12}, {6, 12}, {6, 12},
99   {8, 53}, {8, 53},                             // 00100100x
100   {8, 54}, {8, 54},                             // 00100101x
101   {7, 26}, {7, 26}, {7, 26}, {7, 26},           // 0010011xx
102   {8, 39}, {8, 39},                             // 00101000x
103   {8, 40}, {8, 40},                             // 00101001x
104   {8, 41}, {8, 41},                             // 00101010x
105   {8, 42}, {8, 42},                             // 00101011x
106   {8, 43}, {8, 43},                             // 00101100x
107   {8, 44}, {8, 44},                             // 00101101x
108   {7, 21}, {7, 21}, {7, 21}, {7, 21},           // 0010111xx
109   {7, 28}, {7, 28}, {7, 28}, {7, 28},           // 0011000xx
110   {8, 61}, {8, 61},                             // 00110010x
111   {8, 62}, {8, 62},                             // 00110011x
112   {8, 63}, {8, 63},                             // 00110100x
113   {8, 0}, {8, 0},                               // 00110101x
114   {8, 320}, {8, 320},                           // 00110110x
115   {8, 384}, {8, 384},                           // 00110111x
116   {5, 10}, {5, 10}, {5, 10}, {5, 10},           // 00111xxxx
117     {5, 10}, {5, 10}, {5, 10}, {5, 10},
118     {5, 10}, {5, 10}, {5, 10}, {5, 10},
119     {5, 10}, {5, 10}, {5, 10}, {5, 10},
120   {5, 11}, {5, 11}, {5, 11}, {5, 11},           // 01000xxxx
121     {5, 11}, {5, 11}, {5, 11}, {5, 11},
122     {5, 11}, {5, 11}, {5, 11}, {5, 11},
123     {5, 11}, {5, 11}, {5, 11}, {5, 11},
124   {7, 27}, {7, 27}, {7, 27}, {7, 27},           // 0100100xx
125   {8, 59}, {8, 59},                             // 01001010x
126   {8, 60}, {8, 60},                             // 01001011x
127   {9, 1472},                                    // 010011000
128   {9, 1536},                                    // 010011001
129   {9, 1600},                                    // 010011010
130   {9, 1728},                                    // 010011011
131   {7, 18}, {7, 18}, {7, 18}, {7, 18},           // 0100111xx
132   {7, 24}, {7, 24}, {7, 24}, {7, 24},           // 0101000xx
133   {8, 49}, {8, 49},                             // 01010010x
134   {8, 50}, {8, 50},                             // 01010011x
135   {8, 51}, {8, 51},                             // 01010100x
136   {8, 52}, {8, 52},                             // 01010101x
137   {7, 25}, {7, 25}, {7, 25}, {7, 25},           // 0101011xx
138   {8, 55}, {8, 55},                             // 01011000x
139   {8, 56}, {8, 56},                             // 01011001x
140   {8, 57}, {8, 57},                             // 01011010x
141   {8, 58}, {8, 58},                             // 01011011x
142   {6, 192}, {6, 192}, {6, 192}, {6, 192},       // 010111xxx
143     {6, 192}, {6, 192}, {6, 192}, {6, 192},
144   {6, 1664}, {6, 1664}, {6, 1664}, {6, 1664},   // 011000xxx
145     {6, 1664}, {6, 1664}, {6, 1664}, {6, 1664},
146   {8, 448}, {8, 448},                           // 01100100x
147   {8, 512}, {8, 512},                           // 01100101x
148   {9, 704},                                     // 011001100
149   {9, 768},                                     // 011001101
150   {8, 640}, {8, 640},                           // 01100111x
151   {8, 576}, {8, 576},                           // 01101000x
152   {9, 832},                                     // 011010010
153   {9, 896},                                     // 011010011
154   {9, 960},                                     // 011010100
155   {9, 1024},                                    // 011010101
156   {9, 1088},                                    // 011010110
157   {9, 1152},                                    // 011010111
158   {9, 1216},                                    // 011011000
159   {9, 1280},                                    // 011011001
160   {9, 1344},                                    // 011011010
161   {9, 1408},                                    // 011011011
162   {7, 256}, {7, 256}, {7, 256}, {7, 256},       // 0110111xx
163   {4, 2}, {4, 2}, {4, 2}, {4, 2},               // 0111xxxxx
164     {4, 2}, {4, 2}, {4, 2}, {4, 2},
165     {4, 2}, {4, 2}, {4, 2}, {4, 2},
166     {4, 2}, {4, 2}, {4, 2}, {4, 2},
167     {4, 2}, {4, 2}, {4, 2}, {4, 2},
168     {4, 2}, {4, 2}, {4, 2}, {4, 2},
169     {4, 2}, {4, 2}, {4, 2}, {4, 2},
170     {4, 2}, {4, 2}, {4, 2}, {4, 2},
171   {4, 3}, {4, 3}, {4, 3}, {4, 3},               // 1000xxxxx
172     {4, 3}, {4, 3}, {4, 3}, {4, 3},
173     {4, 3}, {4, 3}, {4, 3}, {4, 3},
174     {4, 3}, {4, 3}, {4, 3}, {4, 3},
175     {4, 3}, {4, 3}, {4, 3}, {4, 3},
176     {4, 3}, {4, 3}, {4, 3}, {4, 3},
177     {4, 3}, {4, 3}, {4, 3}, {4, 3},
178     {4, 3}, {4, 3}, {4, 3}, {4, 3},
179   {5, 128}, {5, 128}, {5, 128}, {5, 128},       // 10010xxxx
180     {5, 128}, {5, 128}, {5, 128}, {5, 128},
181     {5, 128}, {5, 128}, {5, 128}, {5, 128},
182     {5, 128}, {5, 128}, {5, 128}, {5, 128},
183   {5, 8}, {5, 8}, {5, 8}, {5, 8},               // 10011xxxx
184     {5, 8}, {5, 8}, {5, 8}, {5, 8},
185     {5, 8}, {5, 8}, {5, 8}, {5, 8},
186     {5, 8}, {5, 8}, {5, 8}, {5, 8},
187   {5, 9}, {5, 9}, {5, 9}, {5, 9},               // 10100xxxx
188     {5, 9}, {5, 9}, {5, 9}, {5, 9},
189     {5, 9}, {5, 9}, {5, 9}, {5, 9},
190     {5, 9}, {5, 9}, {5, 9}, {5, 9},
191   {6, 16}, {6, 16}, {6, 16}, {6, 16},           // 101010xxx
192     {6, 16}, {6, 16}, {6, 16}, {6, 16},
193   {6, 17}, {6, 17}, {6, 17}, {6, 17},           // 101011xxx
194     {6, 17}, {6, 17}, {6, 17}, {6, 17},
195   {4, 4}, {4, 4}, {4, 4}, {4, 4},               // 1011xxxxx
196     {4, 4}, {4, 4}, {4, 4}, {4, 4},
197     {4, 4}, {4, 4}, {4, 4}, {4, 4},
198     {4, 4}, {4, 4}, {4, 4}, {4, 4},
199     {4, 4}, {4, 4}, {4, 4}, {4, 4},
200     {4, 4}, {4, 4}, {4, 4}, {4, 4},
201     {4, 4}, {4, 4}, {4, 4}, {4, 4},
202     {4, 4}, {4, 4}, {4, 4}, {4, 4},
203   {4, 5}, {4, 5}, {4, 5}, {4, 5},               // 1100xxxxx
204     {4, 5}, {4, 5}, {4, 5}, {4, 5},
205     {4, 5}, {4, 5}, {4, 5}, {4, 5},
206     {4, 5}, {4, 5}, {4, 5}, {4, 5},
207     {4, 5}, {4, 5}, {4, 5}, {4, 5},
208     {4, 5}, {4, 5}, {4, 5}, {4, 5},
209     {4, 5}, {4, 5}, {4, 5}, {4, 5},
210     {4, 5}, {4, 5}, {4, 5}, {4, 5},
211   {6, 14}, {6, 14}, {6, 14}, {6, 14},           // 110100xxx
212     {6, 14}, {6, 14}, {6, 14}, {6, 14},
213   {6, 15}, {6, 15}, {6, 15}, {6, 15},           // 110101xxx
214     {6, 15}, {6, 15}, {6, 15}, {6, 15},
215   {5, 64}, {5, 64}, {5, 64}, {5, 64},           // 11011xxxx
216     {5, 64}, {5, 64}, {5, 64}, {5, 64},
217     {5, 64}, {5, 64}, {5, 64}, {5, 64},
218     {5, 64}, {5, 64}, {5, 64}, {5, 64},
219   {4, 6}, {4, 6}, {4, 6}, {4, 6},               // 1110xxxxx
220     {4, 6}, {4, 6}, {4, 6}, {4, 6},
221     {4, 6}, {4, 6}, {4, 6}, {4, 6},
222     {4, 6}, {4, 6}, {4, 6}, {4, 6},
223     {4, 6}, {4, 6}, {4, 6}, {4, 6},
224     {4, 6}, {4, 6}, {4, 6}, {4, 6},
225     {4, 6}, {4, 6}, {4, 6}, {4, 6},
226     {4, 6}, {4, 6}, {4, 6}, {4, 6},
227   {4, 7}, {4, 7}, {4, 7}, {4, 7},               // 1111xxxxx
228     {4, 7}, {4, 7}, {4, 7}, {4, 7},
229     {4, 7}, {4, 7}, {4, 7}, {4, 7},
230     {4, 7}, {4, 7}, {4, 7}, {4, 7},
231     {4, 7}, {4, 7}, {4, 7}, {4, 7},
232     {4, 7}, {4, 7}, {4, 7}, {4, 7},
233     {4, 7}, {4, 7}, {4, 7}, {4, 7},
234     {4, 7}, {4, 7}, {4, 7}, {4, 7}
235 };
236
237 //------------------------------------------------------------------------
238 // black run lengths
239 //------------------------------------------------------------------------
240
241 // 10-13 bit codes (upper 6 bits are 0)
242 static CCITTCode blackTab1[128] = {
243   {-1, -1}, {-1, -1},                                   // 000000000000x
244   {12, ccittEOL}, {12, ccittEOL},                       // 000000000001x
245   {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1},               // 00000000001xx
246   {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1},               // 00000000010xx
247   {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1},               // 00000000011xx
248   {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1},               // 00000000100xx
249   {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1},               // 00000000101xx
250   {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1},               // 00000000110xx
251   {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1},               // 00000000111xx
252   {11, 1792}, {11, 1792}, {11, 1792}, {11, 1792},       // 00000001000xx
253   {12, 1984}, {12, 1984},                               // 000000010010x
254   {12, 2048}, {12, 2048},                               // 000000010011x
255   {12, 2112}, {12, 2112},                               // 000000010100x
256   {12, 2176}, {12, 2176},                               // 000000010101x
257   {12, 2240}, {12, 2240},                               // 000000010110x
258   {12, 2304}, {12, 2304},                               // 000000010111x
259   {11, 1856}, {11, 1856}, {11, 1856}, {11, 1856},       // 00000001100xx
260   {11, 1920}, {11, 1920}, {11, 1920}, {11, 1920},       // 00000001101xx
261   {12, 2368}, {12, 2368},                               // 000000011100x
262   {12, 2432}, {12, 2432},                               // 000000011101x
263   {12, 2496}, {12, 2496},                               // 000000011110x
264   {12, 2560}, {12, 2560},                               // 000000011111x
265   {10, 18}, {10, 18}, {10, 18}, {10, 18},               // 0000001000xxx
266     {10, 18}, {10, 18}, {10, 18}, {10, 18},
267   {12, 52}, {12, 52},                                   // 000000100100x
268   {13, 640},                                            // 0000001001010
269   {13, 704},                                            // 0000001001011
270   {13, 768},                                            // 0000001001100
271   {13, 832},                                            // 0000001001101
272   {12, 55}, {12, 55},                                   // 000000100111x
273   {12, 56}, {12, 56},                                   // 000000101000x
274   {13, 1280},                                           // 0000001010010
275   {13, 1344},                                           // 0000001010011
276   {13, 1408},                                           // 0000001010100
277   {13, 1472},                                           // 0000001010101
278   {12, 59}, {12, 59},                                   // 000000101011x
279   {12, 60}, {12, 60},                                   // 000000101100x
280   {13, 1536},                                           // 0000001011010
281   {13, 1600},                                           // 0000001011011
282   {11, 24}, {11, 24}, {11, 24}, {11, 24},               // 00000010111xx
283   {11, 25}, {11, 25}, {11, 25}, {11, 25},               // 00000011000xx
284   {13, 1664},                                           // 0000001100100
285   {13, 1728},                                           // 0000001100101
286   {12, 320}, {12, 320},                                 // 000000110011x
287   {12, 384}, {12, 384},                                 // 000000110100x
288   {12, 448}, {12, 448},                                 // 000000110101x
289   {13, 512},                                            // 0000001101100
290   {13, 576},                                            // 0000001101101
291   {12, 53}, {12, 53},                                   // 000000110111x
292   {12, 54}, {12, 54},                                   // 000000111000x
293   {13, 896},                                            // 0000001110010
294   {13, 960},                                            // 0000001110011
295   {13, 1024},                                           // 0000001110100
296   {13, 1088},                                           // 0000001110101
297   {13, 1152},                                           // 0000001110110
298   {13, 1216},                                           // 0000001110111
299   {10, 64}, {10, 64}, {10, 64}, {10, 64},               // 0000001111xxx
300     {10, 64}, {10, 64}, {10, 64}, {10, 64}
301 };
302
303 // 7-12 bit codes (upper 4 bits are 0)
304 static CCITTCode blackTab2[192] = {
305   {8, 13}, {8, 13}, {8, 13}, {8, 13},                   // 00000100xxxx
306     {8, 13}, {8, 13}, {8, 13}, {8, 13},
307     {8, 13}, {8, 13}, {8, 13}, {8, 13},
308     {8, 13}, {8, 13}, {8, 13}, {8, 13},
309   {11, 23}, {11, 23},                                   // 00000101000x
310   {12, 50},                                             // 000001010010
311   {12, 51},                                             // 000001010011
312   {12, 44},                                             // 000001010100
313   {12, 45},                                             // 000001010101
314   {12, 46},                                             // 000001010110
315   {12, 47},                                             // 000001010111
316   {12, 57},                                             // 000001011000
317   {12, 58},                                             // 000001011001
318   {12, 61},                                             // 000001011010
319   {12, 256},                                            // 000001011011
320   {10, 16}, {10, 16}, {10, 16}, {10, 16},               // 0000010111xx
321   {10, 17}, {10, 17}, {10, 17}, {10, 17},               // 0000011000xx
322   {12, 48},                                             // 000001100100
323   {12, 49},                                             // 000001100101
324   {12, 62},                                             // 000001100110
325   {12, 63},                                             // 000001100111
326   {12, 30},                                             // 000001101000
327   {12, 31},                                             // 000001101001
328   {12, 32},                                             // 000001101010
329   {12, 33},                                             // 000001101011
330   {12, 40},                                             // 000001101100
331   {12, 41},                                             // 000001101101
332   {11, 22}, {11, 22},                                   // 00000110111x
333   {8, 14}, {8, 14}, {8, 14}, {8, 14},                   // 00000111xxxx
334     {8, 14}, {8, 14}, {8, 14}, {8, 14},
335     {8, 14}, {8, 14}, {8, 14}, {8, 14},
336     {8, 14}, {8, 14}, {8, 14}, {8, 14},
337   {7, 10}, {7, 10}, {7, 10}, {7, 10},                   // 0000100xxxxx
338     {7, 10}, {7, 10}, {7, 10}, {7, 10},
339     {7, 10}, {7, 10}, {7, 10}, {7, 10},
340     {7, 10}, {7, 10}, {7, 10}, {7, 10},
341     {7, 10}, {7, 10}, {7, 10}, {7, 10},
342     {7, 10}, {7, 10}, {7, 10}, {7, 10},
343     {7, 10}, {7, 10}, {7, 10}, {7, 10},
344     {7, 10}, {7, 10}, {7, 10}, {7, 10},
345   {7, 11}, {7, 11}, {7, 11}, {7, 11},                   // 0000101xxxxx
346     {7, 11}, {7, 11}, {7, 11}, {7, 11},
347     {7, 11}, {7, 11}, {7, 11}, {7, 11},
348     {7, 11}, {7, 11}, {7, 11}, {7, 11},
349     {7, 11}, {7, 11}, {7, 11}, {7, 11},
350     {7, 11}, {7, 11}, {7, 11}, {7, 11},
351     {7, 11}, {7, 11}, {7, 11}, {7, 11},
352     {7, 11}, {7, 11}, {7, 11}, {7, 11},
353   {9, 15}, {9, 15}, {9, 15}, {9, 15},                   // 000011000xxx
354     {9, 15}, {9, 15}, {9, 15}, {9, 15},
355   {12, 128},                                            // 000011001000
356   {12, 192},                                            // 000011001001
357   {12, 26},                                             // 000011001010
358   {12, 27},                                             // 000011001011
359   {12, 28},                                             // 000011001100
360   {12, 29},                                             // 000011001101
361   {11, 19}, {11, 19},                                   // 00001100111x
362   {11, 20}, {11, 20},                                   // 00001101000x
363   {12, 34},                                             // 000011010010
364   {12, 35},                                             // 000011010011
365   {12, 36},                                             // 000011010100
366   {12, 37},                                             // 000011010101
367   {12, 38},                                             // 000011010110
368   {12, 39},                                             // 000011010111
369   {11, 21}, {11, 21},                                   // 00001101100x
370   {12, 42},                                             // 000011011010
371   {12, 43},                                             // 000011011011
372   {10, 0}, {10, 0}, {10, 0}, {10, 0},                   // 0000110111xx
373   {7, 12}, {7, 12}, {7, 12}, {7, 12},                   // 0000111xxxxx
374     {7, 12}, {7, 12}, {7, 12}, {7, 12},
375     {7, 12}, {7, 12}, {7, 12}, {7, 12},
376     {7, 12}, {7, 12}, {7, 12}, {7, 12},
377     {7, 12}, {7, 12}, {7, 12}, {7, 12},
378     {7, 12}, {7, 12}, {7, 12}, {7, 12},
379     {7, 12}, {7, 12}, {7, 12}, {7, 12},
380     {7, 12}, {7, 12}, {7, 12}, {7, 12}
381 };
382
383 // 2-6 bit codes
384 static CCITTCode blackTab3[64] = {
385   {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1},               // 0000xx
386   {6, 9},                                               // 000100
387   {6, 8},                                               // 000101
388   {5, 7}, {5, 7},                                       // 00011x
389   {4, 6}, {4, 6}, {4, 6}, {4, 6},                       // 0010xx
390   {4, 5}, {4, 5}, {4, 5}, {4, 5},                       // 0011xx
391   {3, 1}, {3, 1}, {3, 1}, {3, 1},                       // 010xxx
392     {3, 1}, {3, 1}, {3, 1}, {3, 1},
393   {3, 4}, {3, 4}, {3, 4}, {3, 4},                       // 011xxx
394     {3, 4}, {3, 4}, {3, 4}, {3, 4},
395   {2, 3}, {2, 3}, {2, 3}, {2, 3},                       // 10xxxx
396     {2, 3}, {2, 3}, {2, 3}, {2, 3},
397     {2, 3}, {2, 3}, {2, 3}, {2, 3},
398     {2, 3}, {2, 3}, {2, 3}, {2, 3},
399   {2, 2}, {2, 2}, {2, 2}, {2, 2},                       // 11xxxx
400     {2, 2}, {2, 2}, {2, 2}, {2, 2},
401     {2, 2}, {2, 2}, {2, 2}, {2, 2},
402     {2, 2}, {2, 2}, {2, 2}, {2, 2}
403 };