1 /*
2 * common functions for Indeo Video Interactive codecs (Indeo4 and Indeo5)
3 *
4 * Copyright (c) 2009 Maxim Poliakovski
5 *
6 * This file is part of FFmpeg.
7 *
8 * FFmpeg is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either
11 * version 2.1 of the License, or (at your option) any later version.
12 *
13 * FFmpeg is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
17 *
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with FFmpeg; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21 */
22
23 /**
24 * @file
25 * This file contains functions and data shared by both Indeo4 and
26 * Indeo5 decoders.
27 */
28
29 #include <inttypes.h>
30
34
35 #define BITSTREAM_READER_LE
41
42 /**
43 * These are 2x8 predefined Huffman codebooks for coding macroblock/block
44 * signals. They are specified using "huffman descriptors" in order to
45 * avoid huge static tables. The decoding tables will be generated at
46 * startup from these descriptors.
47 */
48 /** static macroblock huffman tables */
50 {8, {0, 4, 5, 4, 4, 4, 6, 6}},
51 {12, {0, 2, 2, 3, 3, 3, 3, 5, 3, 2, 2, 2}},
52 {12, {0, 2, 3, 4, 3, 3, 3, 3, 4, 3, 2, 2}},
53 {12, {0, 3, 4, 4, 3, 3, 3, 3, 3, 2, 2, 2}},
54 {13, {0, 4, 4, 3, 3, 3, 3, 2, 3, 3, 2, 1, 1}},
55 {9, {0, 4, 4, 4, 4, 3, 3, 3, 2}},
56 {10, {0, 4, 4, 4, 4, 3, 3, 2, 2, 2}},
57 {12, {0, 4, 4, 4, 3, 3, 2, 3, 2, 2, 2, 2}}
58 };
59
60 /** static block huffman tables */
62 {10, {1, 2, 3, 4, 4, 7, 5, 5, 4, 1}},
63 {11, {2, 3, 4, 4, 4, 7, 5, 4, 3, 3, 2}},
64 {12, {2, 4, 5, 5, 5, 5, 6, 4, 4, 3, 1, 1}},
65 {13, {3, 3, 4, 4, 5, 6, 6, 4, 4, 3, 2, 1, 1}},
66 {11, {3, 4, 4, 5, 5, 5, 6, 5, 4, 2, 2}},
67 {13, {3, 4, 5, 5, 5, 5, 6, 4, 3, 3, 2, 1, 1}},
68 {13, {3, 4, 5, 5, 5, 6, 5, 4, 3, 3, 2, 1, 1}},
69 {9, {3, 4, 4, 5, 5, 5, 6, 5, 5}}
70 };
71
74
75 typedef void (*
ivi_mc_func) (int16_t *buf,
const int16_t *ref_buf,
76 ptrdiff_t pitch, int mc_type);
78 const int16_t *ref_buf2,
79 ptrdiff_t pitch, int mc_type, int mc_type2);
80
82 int offs, int mv_x, int mv_y, int mv_x2, int mv_y2,
83 int mc_type, int mc_type2)
84 {
85 int ref_offs = offs + mv_y * band->
pitch + mv_x;
88 int ref_size = (mc_type > 1) * band->
pitch + (mc_type & 1);
89
90 if (mc_type != -1) {
93 av_assert0(buf_size - min_size - ref_size >= ref_offs);
94 }
95
96 if (mc_type2 == -1) {
98 } else {
99 int ref_offs2 = offs + mv_y2 * band->
pitch + mv_x2;
100 int ref_size2 = (mc_type2 > 1) * band->
pitch + (mc_type2 & 1);
101 if (offs < 0 || ref_offs2 < 0 || !band->b_ref_buf)
103 if (buf_size - min_size - ref_size2 < ref_offs2)
105
106 if (mc_type == -1)
108 band->
pitch, mc_type2);
109 else
110 mc_avg(band->
buf + offs, band->
ref_buf + ref_offs,
112 mc_type, mc_type2);
113 }
114
115 return 0;
116 }
117
118 /*
119 * Generate a huffman codebook from the given descriptor
120 * and convert it into the FFmpeg VLC table.
121 *
122 * @param[in] cb pointer to codebook descriptor
123 * @param[out] vlc where to place the generated VLC table
124 * @param[in] flag flag: 1 - for static or 0 for dynamic tables
125 * @return result code: 0 - OK, -1 = error (invalid codebook descriptor)
126 */
128 {
129 int pos,
i, j, codes_per_row, prefix, not_last_row;
130 uint16_t codewords[256]; /* FIXME: move this temporal storage out? */
132
133 pos = 0;
/* current position = 0 */
134
135 for (
i = 0;
i <
cb->num_rows;
i++) {
136 codes_per_row = 1 <<
cb->xbits[
i];
137 not_last_row = (
i !=
cb->num_rows - 1);
138 prefix = ((1 <<
i) - 1) << (
cb->xbits[
i] + not_last_row);
139
140 for (j = 0; j < codes_per_row; j++) {
141 if (
pos >= 256)
/* Some Indeo5 codebooks can have more than 256 */
142 break; /* elements, but only 256 codes are allowed! */
143
147
148 codewords[
pos] = prefix | j;
151
153 }//for j
154 }//for i
155
156 /* number of codewords = pos */
159 }
160
162 {
165
166 for (
i = 0;
i < 8;
i++) {
175 }
176 }
177
179 {
182 }
183
184 /*
185 * Copy huffman codebook descriptors.
186 *
187 * @param[out] dst ptr to the destination descriptor
188 * @param[in] src ptr to the source descriptor
189 */
191 {
194 }
195
196 /*
197 * Compare two huffman codebook descriptors.
198 *
199 * @param[in] desc1 ptr to the 1st descriptor to compare
200 * @param[in] desc2 ptr to the 2nd descriptor to compare
201 * @return comparison result: 0 - equal, 1 - not equal
202 */
205 {
208 }
209
212 {
215
216 if (!desc_coded) {
217 /* select default table */
220 return 0;
221 }
222
225 /* custom huffman table (explicitly encoded) */
230 }
231
234
235 /* Have we got the same custom table? Rebuild if not. */
238
244 // reset faulty description
247 "Error while initializing custom vlc table!\n");
249 }
250 }
252 } else {
253 /* select one of predefined tables */
256 }
257
258 return 0;
259 }
260
261 /*
262 * Free planes, bands and macroblocks buffers.
263 *
264 * @param[in] planes pointer to the array of the plane descriptors
265 */
267 {
269
270 for (p = 0; p < 3; p++) {
272 for (
b = 0;
b <
planes[p].num_bands;
b++) {
278
284 }
285 }
288 }
289 }
290
292 int is_indeo4)
293 {
295 uint32_t b_width, b_height, align_fac, width_aligned,
296 height_aligned, buf_size;
298
300
304
305 /* fill in the descriptor of the luminance plane */
309
310 /* fill in the descriptors of the chrominance planes */
314
315 for (p = 0; p < 3; p++) {
319
320 /* select band dimensions: if there is only one band then it
321 * has the full size, if there are several bands each of them
322 * has only half size */
324 : (
planes[p].width + 1) >> 1;
326 : (
planes[p].height + 1) >> 1;
327
328 /* luma band buffers will be aligned on 16x16 (max macroblock size) */
329 /* chroma band buffers will be aligned on 8x8 (max macroblock size) */
330 align_fac = p ? 8 : 16;
331 width_aligned =
FFALIGN(b_width , align_fac);
332 height_aligned =
FFALIGN(b_height, align_fac);
333 buf_size = width_aligned * height_aligned * sizeof(int16_t);
334
335 for (
b = 0;
b <
planes[p].num_bands;
b++) {
336 band = &
planes[p].bands[
b];
/* select appropriate plane/band */
339 band->
width = b_width;
341 band->
pitch = width_aligned;
342 band->
aheight = height_aligned;
347
348 /* reset custom vlc */
349 planes[p].bands[0].blk_vlc.cust_desc.num_rows = 0;
350 }
351 }
352
353 return 0;
354 }
355
357 int p,
int b,
int t_height,
int t_width)
358 {
359 int x, y;
361
362 for (y = 0; y < band->
height; y += t_height) {
363 for (x = 0; x < band->
width; x += t_width) {
370 /* calculate number of macroblocks */
373
378
384 }
386 ref_tile++;
387 }
388 tile++;
389 }
390 }
391
392 return 0;
393 }
394
396 int tile_width, int tile_height)
397 {
398 int p,
b, x_tiles, y_tiles, t_width, t_height,
ret;
400
401 for (p = 0; p < 3; p++) {
402 t_width = !p ? tile_width : (tile_width + 3) >> 2;
403 t_height = !p ? tile_height : (tile_height + 3) >> 2;
404
405 if (!p &&
planes[0].num_bands == 4) {
406 if (t_width % 2 || t_height % 2) {
409 }
410 t_width >>= 1;
411 t_height >>= 1;
412 }
413 if(t_width<=0 || t_height<=0)
415
416 for (
b = 0;
b <
planes[p].num_bands;
b++) {
418
420 int t;
423 }
424 }
425
429
435 }
436
437 /* use the first luma band as reference for motion vectors
438 * and quant */
440 p,
b, t_height, t_width);
443 }
444 }
445
446 return 0;
447 }
448
449 /*
450 * Decode size of the tile data.
451 * The size is stored as a variable-length field having the following format:
452 * if (tile_data_size < 255) than this field is only one byte long
453 * if (tile_data_size >= 255) than this field four is byte long: 0xFF X1 X2 X3
454 * where X1-X3 is size of the tile data
455 *
456 * @param[in,out] gb the GetBit context
457 * @return size of the tile data in bytes
458 */
460 {
462
468 }
469
470 /* align the bitstream reader on the byte boundary */
472
474 }
475
477 int blk_size)
478 {
480 band->
pitch, blk_size);
481
482 return 0;
483 }
484
487 int mv_x, int mv_y,
488 int mv_x2, int mv_y2,
489 int *prev_dc, int is_intra,
490 int mc_type, int mc_type2,
491 uint32_t
quant,
int offs,
493 {
496 uint8_t col_flags[8];
498 uint32_t sym = 0, lo, hi, q;
501 int num_coeffs = blk_size * blk_size;
502 int col_mask = blk_size - 1;
503 int scan_pos = -1;
507
508 if (min_size > buf_size)
510
514 }
515
516 /* zero transform vector */
517 memset(trvec, 0, num_coeffs * sizeof(trvec[0]));
518 /* zero column flags */
519 memset(col_flags, 0, sizeof(col_flags));
520 while (scan_pos <= num_coeffs) {
524 break; /* End of block */
525
526 /* Escape - run/val explicitly coded using 3 vlc codes */
531 /* merge them and convert into signed val */
533 } else {
537 }
540 }
541
542 /* de-zigzag and dequantize */
544 if (scan_pos >= num_coeffs || scan_pos < 0)
545 break;
547
549 ff_dlog(avctx,
"Val = 0 encountered!\n");
550
552 if (q > 1)
555 /* track columns containing non-zero coeffs */
556 col_flags[
pos & col_mask] |= !!
val;
557 }
558
559 if (scan_pos < 0 || scan_pos >= num_coeffs && sym != rvmap->
eob_sym)
561
562 /* undoing DC coeff prediction for intra-blocks */
564 *prev_dc += trvec[0];
565 trvec[0] = *prev_dc;
566 col_flags[0] |= !!*prev_dc;
567 }
568
572 }
573
574 /* apply inverse transform */
576 band->
pitch, col_flags);
577
578 /* apply motion compensation */
579 if (!is_intra)
580 return ivi_mc(band,
mc, mc_avg, offs, mv_x, mv_y, mv_x2, mv_y2,
581 mc_type, mc_type2);
582
583 return 0;
584 }
585 /*
586 * Decode block data:
587 * extract huffman-coded transform coefficients from the bitstream,
588 * dequantize them, apply inverse transform and motion compensation
589 * in order to reconstruct the picture.
590 *
591 * @param[in,out] gb the GetBit context
592 * @param[in] band pointer to the band descriptor
593 * @param[in] tile pointer to the tile descriptor
594 * @return result code: 0 - OK, -1 = error (corrupted blocks data)
595 */
598 {
599 int mbn,
blk, num_blocks, blk_size,
ret, is_intra;
600 int mc_type = 0, mc_type2 = -1;
601 int mv_x = 0, mv_y = 0, mv_x2 = 0, mv_y2 = 0;
603 uint32_t cbp,
quant, buf_offs;
607 const uint8_t *scale_tab;
608
609 /* init intra prediction for the DC coefficient */
610 prev_dc = 0;
612 /* number of blocks per mb */
613 num_blocks = (band->
mb_size != blk_size) ? 4 : 1;
614 if (blk_size == 8) {
619 } else {
624 }
625
626 for (mbn = 0,
mb = tile->
mbs; mbn < tile->num_MBs;
mb++, mbn++) {
627 is_intra = !
mb->type;
629 buf_offs =
mb->buf_offs;
630
634 else
636
638 if (scale_tab)
640
641 if (!is_intra) {
647 mc_type = ((mv_y & 1) << 1) | (mv_x & 1);
648 mc_type2 = ((mv_y2 & 1) << 1) | (mv_x2 & 1);
649 mv_x >>= 1;
650 mv_y >>= 1;
651 mv_x2 >>= 1;
652 mv_y2 >>= 1; /* convert halfpel vectors into fullpel ones */
653 }
655 mc_type = -1;
656 if (
mb->type != 2 &&
mb->type != 3)
657 mc_type2 = -1;
659 int dmv_x, dmv_y, cx, cy;
660
665
666 if (
mb->xpos + dmv_x < 0 ||
668 mb->ypos + dmv_y < 0 ||
671 }
672 }
673 if (
mb->type == 2 ||
mb->type == 3) {
674 int dmv_x, dmv_y, cx, cy;
675
680
681 if (
mb->xpos + dmv_x < 0 ||
683 mb->ypos + dmv_y < 0 ||
686 }
687 }
688 }
689
691 /* adjust block position in the buffer according to its number */
693 buf_offs += blk_size;
694 }
else if (
blk == 2) {
695 buf_offs -= blk_size;
696 buf_offs += blk_size * band->
pitch;
697 }
698
699 if (cbp & 1) { /* block coded ? */
701 mc_avg_with_delta_func,
702 mv_x, mv_y, mv_x2, mv_y2,
703 &prev_dc, is_intra,
704 mc_type, mc_type2,
quant,
705 buf_offs, avctx);
708 } else {
710 int min_size = (blk_size - 1) * band->
pitch + blk_size;
711
712 if (min_size > buf_size)
714 /* block not coded */
715 /* for intra blocks apply the dc slant transform */
716 /* for inter - perform the motion compensation without delta */
717 if (is_intra) {
721 } else {
722 ret =
ivi_mc(band, mc_no_delta_func, mc_avg_no_delta_func,
723 buf_offs, mv_x, mv_y, mv_x2, mv_y2,
724 mc_type, mc_type2);
727 }
728 }
729
730 cbp >>= 1;
731 }// for blk
732 }// for mbn
733
735
736 return 0;
737 }
738
739 /**
740 * Handle empty tiles by performing data copying and motion
741 * compensation respectively.
742 *
743 * @param[in] avctx ptr to the AVCodecContext
744 * @param[in] band pointer to the band descriptor
745 * @param[in] tile pointer to the tile descriptor
746 * @param[in] mv_scale scaling factor for motion vectors
747 */
750 {
751 int x, y, need_mc, mbn,
blk, num_blocks, mv_x, mv_y, mc_type;
752 int offs, mb_offset, row_offset,
ret;
755 int16_t *dst;
761 int pitch = band->
pitch;
762
765 "parameters %d in ivi_process_empty_tile()\n",
768 }
769
770 offs = tile->
ypos * pitch + tile->
xpos;
773 row_offset = mb_size * pitch;
774 need_mc = 0; /* reset the mc tracking flag */
775
776 for (y = tile->
ypos; y < (tile->
ypos + tile->
height); y += mb_size) {
777 mb_offset = offs;
778
779 for (x = tile->
xpos; x < xend; x += mb_size) {
782 mb->buf_offs = mb_offset;
783
784 mb->type = 1;
/* set the macroblocks type = INTER */
785 mb->cbp = 0;
/* all blocks are empty */
786
787 if (clear_first) {
791 }
792
793 if (ref_mb) {
796
798 /* motion vector inheritance */
802 } else {
805 }
806 need_mc |=
mb->mv_x ||
mb->mv_y;
/* tracking non-zero motion vectors */
807 {
808 int dmv_x, dmv_y, cx, cy;
809
810 dmv_x =
mb->mv_x >> is_halfpel;
811 dmv_y =
mb->mv_y >> is_halfpel;
812 cx =
mb->mv_x & is_halfpel;
813 cy =
mb->mv_y & is_halfpel;
814
815 if (
mb->xpos + dmv_x < 0
816 ||
mb->xpos + dmv_x + mb_size + cx > pitch
817 ||
mb->ypos + dmv_y < 0
818 ||
mb->ypos + dmv_y + mb_size + cy > band->
aheight) {
821 }
822 }
823 }
824 ref_mb++;
825 }
826
828 mb_offset += mb_size;
829 } // for x
830 offs += row_offset;
831 } // for y
832
833 if (band->
inherit_mv && need_mc) {
/* apply motion compensation if there is at least one non-zero motion vector */
834 num_blocks = (mb_size != band->
blk_size) ? 4 : 1;
/* number of blocks per mb */
837
838 for (mbn = 0,
mb = tile->
mbs; mbn < tile->num_MBs;
mb++, mbn++) {
842 mc_type = 0; /* we have only fullpel vectors */
843 } else {
844 mc_type = ((mv_y & 1) << 1) | (mv_x & 1);
845 mv_x >>= 1;
846 mv_y >>= 1; /* convert halfpel vectors into fullpel ones */
847 }
848
850 /* adjust block position in the buffer according with its number */
852 ret =
ivi_mc(band, mc_no_delta_func, 0, offs,
853 mv_x, mv_y, 0, 0, mc_type, -1);
856 }
857 }
858 } else {
859 /* copy data from the reference tile into the current one */
862 for (y = 0; y < tile->
height; y++) {
863 memcpy(dst,
src, tile->
width*
sizeof(band->
buf[0]));
865 dst += pitch;
866 }
867 }
868
869 return 0;
870 }
871
872
873 #ifdef DEBUG
874 static uint16_t ivi_calc_band_checksum(
const IVIBandDesc *band)
875 {
876 int x, y;
877 int16_t *
src, checksum;
878
880 checksum = 0;
881
883 for (x = 0; x < band->
width; x++)
885
886 return checksum;
887 }
888 #endif
889
890 /*
891 * Convert and output the current plane.
892 * This conversion is done by adding back the bias value of 128
893 * (subtracted in the encoder) and clipping the result.
894 *
895 * @param[in] plane pointer to the descriptor of the plane being processed
896 * @param[out] dst pointer to the buffer receiving converted pixels
897 * @param[in] dst_pitch pitch for moving to the next y line
898 */
900 {
901 int x, y;
904
906 return;
907
908 for (y = 0; y < plane->
height; y++) {
909 int m = 0;
911 for (x = 0; x <
w; x++) {
912 int t =
src[x] + 128;
913 dst[x] = t;
914 m |= t;
915 }
916 if (m & ~255)
917 for (x = 0; x <
w; x++)
920 dst += dst_pitch;
921 }
922 }
923
925 {
926 if (
ctx->pic_conf.luma_bands <= 1 &&
i == 2)
930 return band->
bufs[
i];
931 }
932
933 /**
934 * Decode an Indeo 4 or 5 band.
935 *
936 * @param[in,out] ctx ptr to the decoder context
937 * @param[in,out] band ptr to the band descriptor
938 * @param[in] avctx ptr to the AVCodecContext
939 * @return result code: 0 = OK, -1 = error
940 */
943 {
946
951 }
957 } else {
960 }
964
970 }
971
975 }
976
978
979 /* apply corrections to the selected rvmap table if present */
981 idx1 = band->
corr[
i * 2];
982 idx2 = band->
corr[
i * 2 + 1];
989 }
990
992
994 tile = &band->
tiles[t];
995
1000 }
1004 (
ctx->planes[0].bands[0].mb_size >> 3) - (band->
mb_size >> 3));
1006 break;
1007 ff_dlog(avctx,
"Empty tile encountered!\n");
1008 } else {
1013 break;
1014 }
1015
1018 break;
1019
1023 "Corrupted tile data encountered!\n");
1024 break;
1025 }
1026
1029 "Tile data_size mismatch!\n");
1031 break;
1032 }
1033
1035 }
1036 }
1037
1038 /* restore the selected rvmap table by applying its corrections in
1039 * reverse order */
1041 idx1 = band->
corr[
i*2];
1042 idx2 = band->
corr[
i*2+1];
1049 }
1050
1051 #ifdef DEBUG
1053 uint16_t chksum = ivi_calc_band_checksum(band);
1056 "Band checksum mismatch! Plane %d, band %d, "
1057 "received: %"PRIx32", calculated: %"PRIx16"\n",
1059 }
1060 }
1061 #endif
1062
1064
1066 }
1067
1070 {
1072 const uint8_t *buf = avpkt->
data;
1073 int buf_size = avpkt->
size;
1075
1079 ctx->frame_data = buf;
1080 ctx->frame_size = buf_size;
1081
1085 "Error while decoding picture header: %d\n",
result);
1087 }
1088 if (
ctx->gop_invalid)
1090
1092 if (
ctx->got_p_frame) {
1094 *got_frame = 1;
1095 ctx->got_p_frame = 0;
1096 } else {
1097 *got_frame = 0;
1098 }
1099 return buf_size;
1100 }
1101
1105 }
1106
1107 if (!
ctx->planes[0].bands) {
1110 }
1111
1112 ctx->switch_buffers(
ctx);
1113
1114 if (
ctx->is_nonnull_frame(
ctx)) {
1115 ctx->buf_invalid[
ctx->dst_buf] = 1;
1116 for (p = 0; p < 3; p++) {
1117 for (
b = 0;
b <
ctx->planes[p].num_bands;
b++) {
1121 "Error while decoding band: %d, plane: %d\n",
b, p);
1123 }
1124 }
1125 }
1126 ctx->buf_invalid[
ctx->dst_buf] = 0;
1127 } else {
1128 if (
ctx->is_scalable)
1130
1131 for (p = 0; p < 3; p++) {
1132 if (!
ctx->planes[p].bands[0].buf)
1134 }
1135 }
1136 if (
ctx->buf_invalid[
ctx->dst_buf])
1137 return -1;
1138
1139 if (!
ctx->is_nonnull_frame(
ctx))
1140 return buf_size;
1141
1145
1148
1149 if (
ctx->is_scalable) {
1152 else
1154 } else {
1156 }
1157
1160
1161 *got_frame = 1;
1162
1163 /* If the bidirectional mode is enabled, next I and the following P
1164 * frame will be sent together. Unfortunately the approach below seems
1165 * to be the only way to handle the B-frames mode.
1166 * That's exactly the same Intel decoders do.
1167 */
1170
1171 // skip version string
1175 }
1179 show_bits(&
ctx->gb, 21) == 0xBFFF8) {
// syncheader + inter type
1183 ctx->got_p_frame = 0;
1186 }
1187 }
1188
1189 if (
ctx->show_indeo4_info) {
1190 if (
ctx->is_scalable)
1192 if (
ctx->uses_tiling)
1194 if (
ctx->has_b_frames)
1196 if (
ctx->has_transp)
1200 if (
ctx->uses_fullpel)
1202 ctx->show_indeo4_info = 0;
1203 }
1204
1205 return buf_size;
1206 }
1207
1208 /**
1209 * Close Indeo5 decoder and clean up its context.
1210 */
1212 {
1214
1216
1217 if (
ctx->mb_vlc.cust_tab.table)
1219
1220 if (
ctx->blk_vlc.cust_tab.table)
1222
1224
1225 return 0;
1226 }
1227
1228
1229 /**
1230 * Scan patterns shared between indeo4 and indeo5
1231 */
1233 0, 8, 16, 24, 32, 40, 48, 56,
1234 1, 9, 17, 25, 33, 41, 49, 57,
1235 2, 10, 18, 26, 34, 42, 50, 58,
1236 3, 11, 19, 27, 35, 43, 51, 59,
1237 4, 12, 20, 28, 36, 44, 52, 60,
1238 5, 13, 21, 29, 37, 45, 53, 61,
1239 6, 14, 22, 30, 38, 46, 54, 62,
1240 7, 15, 23, 31, 39, 47, 55, 63
1241 };
1242
1244 0, 1, 2, 3, 4, 5, 6, 7,
1245 8, 9, 10, 11, 12, 13, 14, 15,
1246 16, 17, 18, 19, 20, 21, 22, 23,
1247 24, 25, 26, 27, 28, 29, 30, 31,
1248 32, 33, 34, 35, 36, 37, 38, 39,
1249 40, 41, 42, 43, 44, 45, 46, 47,
1250 48, 49, 50, 51, 52, 53, 54, 55,
1251 56, 57, 58, 59, 60, 61, 62, 63
1252 };
1253
1255 0, 1, 4, 8, 5, 2, 3, 6, 9, 12, 13, 10, 7, 11, 14, 15
1256 };
1257
1258
1259 /**
1260 * Run-value (RLE) tables.
1261 */
1263 { /* MapTab0 */
1264 5, /* eob_sym */
1265 2, /* esc_sym */
1266 /* run table */
1267 {1, 1, 0, 1, 1, 0, 1, 1, 2, 2, 1, 1, 1, 1, 3, 3,
1268 1, 1, 2, 2, 1, 1, 4, 4, 1, 1, 1, 1, 2, 2, 5, 5,
1269 1, 1, 3, 3, 1, 1, 6, 6, 1, 2, 1, 2, 7, 7, 1, 1,
1270 8, 8, 1, 1, 4, 2, 1, 4, 2, 1, 3, 3, 1, 1, 1, 9,
1271 9, 1, 2, 1, 2, 1, 5, 5, 1, 1, 10, 10, 1, 1, 3, 3,
1272 2, 2, 1, 1, 11, 11, 6, 4, 4, 1, 6, 1, 2, 1, 2, 12,
1273 8, 1, 12, 7, 8, 7, 1, 16, 1, 16, 1, 3, 3, 13, 1, 13,
1274 2, 2, 1, 15, 1, 5, 14, 15, 1, 5, 14, 1, 17, 8, 17, 8,
1275 1, 4, 4, 2, 2, 1, 25, 25, 24, 24, 1, 3, 1, 3, 1, 8,
1276 6, 7, 6, 1, 18, 8, 18, 1, 7, 23, 2, 2, 23, 1, 1, 21,
1277 22, 9, 9, 22, 19, 1, 21, 5, 19, 5, 1, 33, 20, 33, 20, 8,
1278 4, 4, 1, 32, 2, 2, 8, 3, 32, 26, 3, 1, 7, 7, 26, 6,
1279 1, 6, 1, 1, 16, 1, 10, 1, 10, 2, 16, 29, 28, 2, 29, 28,
1280 1, 27, 5, 8, 5, 27, 1, 8, 3, 7, 3, 31, 41, 31, 1, 41,
1281 6, 1, 6, 7, 4, 4, 1, 1, 2, 1, 2, 11, 34, 30, 11, 1,
1282 30, 15, 15, 34, 36, 40, 36, 40, 35, 35, 37, 37, 39, 39, 38, 38},
1283
1284 /* value table */
1285 { 1, -1, 0, 2, -2, 0, 3, -3, 1, -1, 4, -4, 5, -5, 1, -1,
1286 6, -6, 2, -2, 7, -7, 1, -1, 8, -8, 9, -9, 3, -3, 1, -1,
1287 10, -10, 2, -2, 11, -11, 1, -1, 12, 4, -12, -4, 1, -1, 13, -13,
1288 1, -1, 14, -14, 2, 5, 15, -2, -5, -15, -3, 3, 16, -16, 17, 1,
1289 -1, -17, 6, 18, -6, -18, 2, -2, 19, -19, 1, -1, 20, -20, 4, -4,
1290 7, -7, 21, -21, 1, -1, 2, 3, -3, 22, -2, -22, 8, 23, -8, 1,
1291 2, -23, -1, 2, -2, -2, 24, 1, -24, -1, 25, 5, -5, 1, -25, -1,
1292 9, -9, 26, 1, -26, 3, 1, -1, 27, -3, -1, -27, 1, 3, -1, -3,
1293 28, -4, 4, 10, -10, -28, 1, -1, 1, -1, 29, 6, -29, -6, 30, -4,
1294 3, 3, -3, -30, 1, 4, -1, 31, -3, 1, 11, -11, -1, -31, 32, -1,
1295 -1, 2, -2, 1, 1, -32, 1, 4, -1, -4, 33, -1, 1, 1, -1, 5,
1296 5, -5, -33, -1, -12, 12, -5, -7, 1, 1, 7, 34, 4, -4, -1, 4,
1297 -34, -4, 35, 36, -2, -35, -2, -36, 2, 13, 2, -1, 1, -13, 1, -1,
1298 37, 1, -5, 6, 5, -1, 38, -6, -8, 5, 8, -1, 1, 1, -37, -1,
1299 5, 39, -5, -5, 6, -6, -38, -39, -14, 40, 14, 2, 1, 1, -2, -40,
1300 -1, -2, 2, -1, -1, -1, 1, 1, 1, -1, 1, -1, 1, -1, 1, -1}
1301 },{
1302 /* MapTab1 */
1303 0, /* eob_sym */
1304 38, /* esc_sym */
1305 /* run table */
1306 {0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 8, 6, 8, 7,
1307 7, 9, 9, 10, 10, 11, 11, 1, 12, 1, 12, 13, 13, 16, 14, 16,
1308 14, 15, 15, 17, 17, 18, 0, 18, 19, 20, 21, 19, 22, 21, 20, 22,
1309 25, 24, 2, 25, 24, 23, 23, 2, 26, 28, 26, 28, 29, 27, 29, 27,
1310 33, 33, 1, 32, 1, 3, 32, 30, 36, 3, 36, 30, 31, 31, 35, 34,
1311 37, 41, 34, 35, 37, 4, 41, 4, 49, 8, 8, 49, 40, 38, 5, 38,
1312 40, 39, 5, 39, 42, 43, 42, 7, 57, 6, 43, 44, 6, 50, 7, 44,
1313 57, 48, 50, 48, 45, 45, 46, 47, 51, 46, 47, 58, 1, 51, 58, 1,
1314 52, 59, 53, 9, 52, 55, 55, 59, 53, 56, 54, 56, 54, 9, 64, 64,
1315 60, 63, 60, 63, 61, 62, 61, 62, 2, 10, 2, 10, 11, 1, 11, 13,
1316 12, 1, 12, 13, 16, 16, 8, 8, 14, 3, 3, 15, 14, 15, 4, 4,
1317 1, 17, 17, 5, 1, 7, 7, 5, 6, 1, 2, 2, 6, 22, 1, 25,
1318 21, 22, 8, 24, 1, 21, 25, 24, 8, 18, 18, 23, 9, 20, 23, 33,
1319 29, 33, 20, 1, 19, 1, 29, 36, 9, 36, 19, 41, 28, 57, 32, 3,
1320 28, 3, 1, 27, 49, 49, 1, 32, 26, 26, 2, 4, 4, 7, 57, 41,
1321 2, 7, 10, 5, 37, 16, 10, 27, 8, 8, 13, 16, 37, 13, 1, 5},
1322
1323 /* value table */
1324 {0, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, 1, -1, -1, 1,
1325 -1, 1, -1, 1, -1, 1, -1, 2, 1, -2, -1, 1, -1, 1, 1, -1,
1326 -1, 1, -1, 1, -1, 1, 0, -1, 1, 1, 1, -1, 1, -1, -1, -1,
1327 1, 1, 2, -1, -1, 1, -1, -2, 1, 1, -1, -1, 1, 1, -1, -1,
1328 1, -1, 3, 1, -3, 2, -1, 1, 1, -2, -1, -1, -1, 1, 1, 1,
1329 1, 1, -1, -1, -1, 2, -1, -2, 1, 2, -2, -1, 1, 1, 2, -1,
1330 -1, 1, -2, -1, 1, 1, -1, 2, 1, 2, -1, 1, -2, -1, -2, -1,
1331 -1, 1, 1, -1, 1, -1, 1, 1, 1, -1, -1, 1, 4, -1, -1, -4,
1332 1, 1, 1, 2, -1, -1, 1, -1, -1, 1, -1, -1, 1, -2, 1, -1,
1333 1, 1, -1, -1, 1, 1, -1, -1, 3, 2, -3, -2, 2, 5, -2, 2,
1334 2, -5, -2, -2, -2, 2, -3, 3, 2, 3, -3, 2, -2, -2, 3, -3,
1335 6, 2, -2, 3, -6, 3, -3, -3, 3, 7, -4, 4, -3, 2, -7, 2,
1336 2, -2, -4, 2, 8, -2, -2, -2, 4, 2, -2, 2, 3, 2, -2, -2,
1337 2, 2, -2, -8, -2, 9, -2, 2, -3, -2, 2, -2, 2, 2, 2, 4,
1338 -2, -4, 10, 2, 2, -2, -9, -2, 2, -2, 5, 4, -4, 4, -2, 2,
1339 -5, -4, -3, 4, 2, -3, 3, -2, -5, 5, 3, 3, -2, -3, -10, -4}
1340 },{
1341 /* MapTab2 */
1342 2, /* eob_sym */
1343 11, /* esc_sym */
1344 /* run table */
1345 {1, 1, 0, 2, 2, 1, 1, 3, 3, 4, 4, 0, 1, 1, 5, 5,
1346 2, 2, 6, 6, 7, 7, 1, 8, 1, 8, 3, 3, 9, 9, 1, 2,
1347 2, 1, 4, 10, 4, 10, 11, 11, 1, 5, 12, 12, 1, 5, 13, 13,
1348 3, 3, 6, 6, 2, 2, 14, 14, 16, 16, 15, 7, 15, 8, 8, 7,
1349 1, 1, 17, 17, 4, 4, 1, 1, 18, 18, 2, 2, 5, 5, 25, 3,
1350 9, 3, 25, 9, 19, 24, 19, 24, 1, 21, 20, 1, 21, 22, 20, 22,
1351 23, 23, 8, 6, 33, 6, 8, 33, 7, 7, 26, 26, 1, 32, 1, 32,
1352 28, 4, 28, 10, 29, 27, 27, 10, 41, 4, 29, 2, 2, 41, 36, 31,
1353 49, 31, 34, 30, 34, 36, 30, 35, 1, 49, 11, 5, 35, 11, 1, 3,
1354 3, 5, 37, 37, 8, 40, 8, 40, 12, 12, 42, 42, 1, 38, 16, 57,
1355 1, 6, 16, 39, 38, 6, 7, 7, 13, 13, 39, 43, 2, 43, 57, 2,
1356 50, 9, 44, 9, 50, 4, 15, 48, 44, 4, 1, 15, 48, 14, 14, 1,
1357 45, 45, 8, 3, 5, 8, 51, 47, 3, 46, 46, 47, 5, 51, 1, 17,
1358 17, 58, 1, 58, 2, 52, 52, 2, 53, 7, 59, 6, 6, 56, 53, 55,
1359 7, 55, 1, 54, 59, 56, 54, 10, 1, 10, 4, 60, 1, 60, 8, 4,
1360 8, 64, 64, 61, 1, 63, 3, 63, 62, 61, 5, 11, 5, 3, 11, 62},
1361
1362 /* value table */
1363 { 1, -1, 0, 1, -1, 2, -2, 1, -1, 1, -1, 0, 3, -3, 1, -1,
1364 2, -2, 1, -1, 1, -1, 4, 1, -4, -1, 2, -2, 1, -1, 5, 3,
1365 -3, -5, 2, 1, -2, -1, 1, -1, 6, 2, 1, -1, -6, -2, 1, -1,
1366 3, -3, 2, -2, 4, -4, 1, -1, 1, -1, 1, 2, -1, 2, -2, -2,
1367 7, -7, 1, -1, 3, -3, 8, -8, 1, -1, 5, -5, 3, -3, 1, 4,
1368 2, -4, -1, -2, 1, 1, -1, -1, 9, 1, 1, -9, -1, 1, -1, -1,
1369 1, -1, 3, -3, 1, 3, -3, -1, 3, -3, 1, -1, 10, 1, -10, -1,
1370 1, 4, -1, 2, 1, -1, 1, -2, 1, -4, -1, 6, -6, -1, 1, 1,
1371 1, -1, 1, 1, -1, -1, -1, 1, 11, -1, -2, 4, -1, 2, -11, 5,
1372 -5, -4, -1, 1, 4, 1, -4, -1, -2, 2, 1, -1, 12, 1, -2, 1,
1373 -12, 4, 2, 1, -1, -4, 4, -4, 2, -2, -1, 1, 7, -1, -1, -7,
1374 -1, -3, 1, 3, 1, 5, 2, 1, -1, -5, 13, -2, -1, 2, -2, -13,
1375 1, -1, 5, 6, 5, -5, 1, 1, -6, 1, -1, -1, -5, -1, 14, 2,
1376 -2, 1, -14, -1, 8, 1, -1, -8, 1, 5, 1, 5, -5, 1, -1, 1,
1377 -5, -1, 15, 1, -1, -1, -1, 3, -15, -3, 6, 1, 16, -1, 6, -6,
1378 -6, 1, -1, 1, -16, 1, 7, -1, 1, -1, -6, -3, 6, -7, 3, -1}
1379 },{
1380 /* MapTab3 */
1381 0, /* eob_sym */
1382 35, /* esc_sym */
1383 /* run table */
1384 {0, 1, 1, 2, 2, 3, 3, 4, 4, 1, 1, 5, 5, 6, 6, 7,
1385 7, 8, 8, 9, 9, 2, 2, 10, 10, 1, 1, 11, 11, 12, 12, 3,
1386 3, 13, 13, 0, 14, 14, 16, 15, 16, 15, 4, 4, 17, 1, 17, 1,
1387 5, 5, 18, 18, 2, 2, 6, 6, 8, 19, 7, 8, 7, 19, 20, 20,
1388 21, 21, 22, 24, 22, 24, 23, 23, 1, 1, 25, 25, 3, 3, 26, 26,
1389 9, 9, 27, 27, 28, 28, 33, 29, 4, 33, 29, 1, 4, 1, 32, 32,
1390 2, 2, 31, 10, 30, 10, 30, 31, 34, 34, 5, 5, 36, 36, 35, 41,
1391 35, 11, 41, 11, 37, 1, 8, 8, 37, 6, 1, 6, 40, 7, 7, 40,
1392 12, 38, 12, 39, 39, 38, 49, 13, 49, 13, 3, 42, 3, 42, 16, 16,
1393 43, 43, 14, 14, 1, 1, 44, 15, 44, 15, 2, 2, 57, 48, 50, 48,
1394 57, 50, 4, 45, 45, 4, 46, 47, 47, 46, 1, 51, 1, 17, 17, 51,
1395 8, 9, 9, 5, 58, 8, 58, 5, 52, 52, 55, 56, 53, 56, 55, 59,
1396 59, 53, 54, 1, 6, 54, 7, 7, 6, 1, 2, 3, 2, 3, 64, 60,
1397 60, 10, 10, 64, 61, 62, 61, 63, 1, 63, 62, 1, 18, 24, 18, 4,
1398 25, 4, 8, 21, 21, 1, 24, 22, 25, 22, 8, 11, 19, 11, 23, 1,
1399 20, 23, 19, 20, 5, 12, 5, 1, 16, 2, 12, 13, 2, 13, 1, 16},
1400
1401 /* value table */
1402 { 0, 1, -1, 1, -1, 1, -1, 1, -1, 2, -2, 1, -1, 1, -1, 1,
1403 -1, 1, -1, 1, -1, 2, -2, 1, -1, 3, -3, 1, -1, 1, -1, 2,
1404 -2, 1, -1, 0, 1, -1, 1, 1, -1, -1, 2, -2, 1, 4, -1, -4,
1405 2, -2, 1, -1, -3, 3, 2, -2, 2, 1, 2, -2, -2, -1, 1, -1,
1406 1, -1, 1, 1, -1, -1, 1, -1, 5, -5, 1, -1, 3, -3, 1, -1,
1407 2, -2, 1, -1, 1, -1, 1, 1, 3, -1, -1, 6, -3, -6, -1, 1,
1408 4, -4, 1, 2, 1, -2, -1, -1, 1, -1, 3, -3, 1, -1, 1, 1,
1409 -1, 2, -1, -2, 1, 7, -3, 3, -1, 3, -7, -3, 1, -3, 3, -1,
1410 2, 1, -2, 1, -1, -1, 1, 2, -1, -2, -4, -1, 4, 1, 2, -2,
1411 1, -1, -2, 2, 8, -8, -1, 2, 1, -2, -5, 5, 1, -1, -1, 1,
1412 -1, 1, 4, -1, 1, -4, -1, -1, 1, 1, 9, 1, -9, 2, -2, -1,
1413 -4, 3, -3, -4, -1, 4, 1, 4, 1, -1, 1, -1, 1, 1, -1, 1,
1414 -1, -1, -1, 10, 4, 1, 4, -4, -4, -10, 6, 5, -6, -5, 1, -1,
1415 1, 3, -3, -1, 1, -1, -1, -1, 11, 1, 1, -11, -2, -2, 2, 5,
1416 -2, -5, -5, 2, -2, 12, 2, -2, 2, 2, 5, -3, -2, 3, -2, -12,
1417 -2, 2, 2, 2, -5, 3, 5, 13, -3, 7, -3, -3, -7, 3, -13, 3}
1418 },{
1419 /* MapTab4 */
1420 0, /* eob_sym */
1421 34, /* esc_sym */
1422 /* run table */
1423 {0, 1, 1, 1, 2, 2, 1, 3, 3, 1, 1, 1, 4, 4, 1, 5,
1424 2, 1, 5, 2, 1, 1, 6, 6, 1, 1, 1, 1, 1, 7, 3, 1,
1425 2, 3, 0, 1, 2, 7, 1, 1, 1, 8, 1, 1, 8, 1, 1, 1,
1426 9, 1, 9, 1, 2, 1, 1, 2, 1, 1, 10, 4, 1, 10, 1, 4,
1427 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 2, 1, 5, 1, 1, 1,
1428 2, 5, 1, 11, 1, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1429 2, 1, 6, 1, 6, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 12,
1430 3, 1, 12, 1, 1, 1, 2, 1, 1, 3, 1, 1, 1, 1, 1, 1,
1431 4, 1, 1, 1, 2, 1, 1, 4, 1, 1, 1, 1, 1, 1, 2, 1,
1432 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 2, 1, 1, 5,
1433 1, 1, 1, 1, 1, 7, 1, 7, 1, 1, 2, 3, 1, 1, 1, 1,
1434 5, 1, 1, 1, 1, 1, 1, 2, 13, 1, 1, 1, 1, 1, 1, 1,
1435 1, 1, 1, 1, 1, 1, 1, 1, 13, 2, 1, 1, 4, 1, 1, 1,
1436 3, 1, 6, 1, 1, 1, 14, 1, 1, 1, 1, 1, 14, 6, 1, 1,
1437 1, 1, 15, 2, 4, 1, 2, 3, 15, 1, 1, 1, 8, 1, 1, 8,
1438 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1},
1439
1440 /* value table */
1441 { 0, 1, -1, 2, 1, -1, -2, 1, -1, 3, -3, 4, 1, -1, -4, 1,
1442 2, 5, -1, -2, -5, 6, 1, -1, -6, 7, -7, 8, -8, 1, 2, 9,
1443 3, -2, 0, -9, -3, -1, 10, -10, 11, 1, -11, 12, -1, -12, 13, -13,
1444 1, 14, -1, -14, 4, 15, -15, -4, 16, -16, 1, 2, 17, -1, -17, -2,
1445 18, -18, 19, -19, 20, 3, -20, 21, -21, -3, 5, 22, 2, -22, -23, 23,
1446 -5, -2, 24, 1, -24, -1, 25, -25, 26, -26, -27, 27, 28, 29, -28, -29,
1447 6, 30, 2, -31, -2, -30, 31, -6, -32, 32, 33, -33, 34, -35, -34, 1,
1448 4, -36, -1, 35, 37, 36, 7, -37, 38, -4, -38, 39, 41, 40, -40, -39,
1449 3, 42, -43, -41, -7, -42, 43, -3, 44, -44, 45, -45, 46, 47, 8, -47,
1450 -48, -46, 50, -50, 48, 49, 51, -49, 52, -52, 5, -51, -8, -53, 53, 3,
1451 -56, 56, 55, 54, -54, 2, 60, -2, -55, 58, 9, -5, 59, 57, -57, -63,
1452 -3, -58, -60, -61, 61, -59, -62, -9, 1, 64, 62, 69, -64, 63, 65, -67,
1453 -68, 66, -65, 68, -66, -69, 67, -70, -1, 10, 71, -71, 4, 73, 72, 70,
1454 6, -76, -3, 74, -78, -74, 1, 78, 80, -72, -75, 76, -1, 3, -73, 79,
1455 75, 77, 1, 11, -4, -79, -10, -6, -1, -77, -83, -80, 2, 81, -84, -2,
1456 83, -81, 82, -82, 84, -87, -86, 85, -11, -85, 86, -89, 87, -88, 88, 89}
1457 },{
1458 /* MapTab5 */
1459 2, /* eob_sym */
1460 33, /* esc_sym */
1461 /* run table */
1462 {1, 1, 0, 2, 1, 2, 1, 3, 3, 1, 1, 4, 4, 2, 2, 1,
1463 1, 5, 5, 6, 1, 6, 1, 7, 7, 3, 3, 2, 8, 2, 8, 1,
1464 1, 0, 9, 9, 1, 1, 10, 4, 10, 4, 11, 11, 2, 1, 2, 1,
1465 12, 12, 3, 3, 1, 1, 13, 5, 5, 13, 14, 1, 1, 14, 2, 2,
1466 6, 6, 15, 1, 1, 15, 16, 4, 7, 16, 4, 7, 1, 1, 3, 3,
1467 8, 8, 2, 2, 1, 1, 17, 17, 1, 1, 18, 18, 5, 5, 2, 2,
1468 1, 1, 9, 19, 9, 19, 20, 3, 3, 20, 1, 10, 21, 1, 10, 4,
1469 4, 21, 22, 6, 6, 22, 1, 1, 23, 24, 2, 2, 23, 24, 11, 1,
1470 1, 11, 7, 25, 7, 1, 1, 25, 8, 8, 3, 26, 3, 1, 12, 2,
1471 2, 26, 1, 12, 5, 5, 27, 4, 1, 4, 1, 27, 28, 1, 28, 13,
1472 1, 13, 2, 29, 2, 1, 32, 6, 1, 30, 14, 29, 14, 6, 3, 31,
1473 3, 1, 30, 1, 32, 31, 33, 9, 33, 1, 1, 7, 9, 7, 2, 2,
1474 1, 1, 4, 36, 34, 4, 5, 10, 10, 5, 34, 1, 1, 35, 8, 8,
1475 36, 3, 35, 1, 15, 3, 2, 1, 16, 15, 16, 2, 37, 1, 37, 1,
1476 1, 1, 6, 6, 38, 1, 38, 11, 1, 39, 39, 40, 11, 2, 41, 4,
1477 40, 1, 2, 4, 1, 1, 1, 41, 3, 1, 3, 1, 5, 7, 5, 7},
1478
1479 /* value table */
1480 { 1, -1, 0, 1, 2, -1, -2, 1, -1, 3, -3, 1, -1, 2, -2, 4,
1481 -4, 1, -1, 1, 5, -1, -5, 1, -1, 2, -2, 3, 1, -3, -1, 6,
1482 -6, 0, 1, -1, 7, -7, 1, 2, -1, -2, 1, -1, 4, 8, -4, -8,
1483 1, -1, 3, -3, 9, -9, 1, 2, -2, -1, 1, 10, -10, -1, 5, -5,
1484 2, -2, 1, 11, -11, -1, 1, 3, 2, -1, -3, -2, 12, -12, 4, -4,
1485 2, -2, -6, 6, 13, -13, 1, -1, 14, -14, 1, -1, 3, -3, 7, -7,
1486 15, -15, 2, 1, -2, -1, 1, 5, -5, -1, -16, 2, 1, 16, -2, 4,
1487 -4, -1, 1, 3, -3, -1, 17, -17, 1, 1, -8, 8, -1, -1, 2, 18,
1488 -18, -2, 3, 1, -3, 19, -19, -1, 3, -3, 6, 1, -6, 20, 2, 9,
1489 -9, -1, -20, -2, 4, -4, 1, -5, 21, 5, -21, -1, 1, -22, -1, 2,
1490 22, -2, 10, 1, -10, 23, 1, 4, -23, 1, 2, -1, -2, -4, -7, 1,
1491 7, -24, -1, 24, -1, -1, 1, 3, -1, -25, 25, 4, -3, -4, 11, -11,
1492 26, -26, 6, 1, 1, -6, -5, -3, 3, 5, -1, -27, 27, 1, 4, -4,
1493 -1, -8, -1, 28, 2, 8, -12, -28, -2, -2, 2, 12, -1, 29, 1, -29,
1494 30, -30, 5, -5, 1, -31, -1, 3, 31, -1, 1, 1, -3, -13, 1, -7,
1495 -1, -32, 13, 7, 32, 33, -33, -1, -9, -34, 9, 34, -6, 5, 6, -5}
1496 },{
1497 /* MapTab6 */
1498 2, /* eob_sym */
1499 13, /* esc_sym */
1500 /* run table */
1501 {1, 1, 0, 1, 1, 2, 2, 1, 1, 3, 3, 1, 1, 0, 2, 2,
1502 4, 1, 4, 1, 1, 1, 5, 5, 1, 1, 6, 6, 2, 2, 1, 1,
1503 3, 3, 7, 7, 1, 1, 8, 8, 1, 1, 2, 2, 1, 9, 1, 9,
1504 4, 4, 10, 1, 1, 10, 1, 1, 11, 11, 3, 3, 1, 2, 1, 2,
1505 1, 1, 12, 12, 5, 5, 1, 1, 13, 1, 1, 13, 2, 2, 1, 1,
1506 6, 6, 1, 1, 4, 14, 4, 14, 3, 1, 3, 1, 1, 1, 15, 7,
1507 15, 2, 2, 7, 1, 1, 1, 8, 1, 8, 16, 16, 1, 1, 1, 1,
1508 2, 1, 1, 2, 1, 1, 3, 5, 5, 3, 4, 1, 1, 4, 1, 1,
1509 17, 17, 9, 1, 1, 9, 2, 2, 1, 1, 10, 10, 1, 6, 1, 1,
1510 6, 18, 1, 1, 18, 1, 1, 1, 2, 2, 3, 1, 3, 1, 1, 1,
1511 4, 1, 19, 1, 19, 7, 1, 1, 20, 1, 4, 20, 1, 7, 11, 2,
1512 1, 11, 21, 2, 8, 5, 1, 8, 1, 5, 21, 1, 1, 1, 22, 1,
1513 1, 22, 1, 1, 3, 3, 1, 23, 2, 12, 24, 1, 1, 2, 1, 1,
1514 12, 23, 1, 1, 24, 1, 1, 1, 4, 1, 1, 1, 2, 1, 6, 6,
1515 4, 2, 1, 1, 1, 1, 1, 1, 1, 14, 13, 3, 1, 25, 9, 25,
1516 14, 1, 9, 3, 13, 1, 1, 1, 1, 1, 10, 1, 1, 2, 10, 2},
1517
1518 /* value table */
1519 {-20, -1, 0, 2, -2, 1, -1, 3, -3, 1, -1, 4, -4, 0, 2, -2,
1520 1, 5, -1, -5, 6, -6, 1, -1, 7, -7, 1, -1, 3, -3, 8, -8,
1521 2, -2, 1, -1, 9, -9, 1, -1, 10, -10, 4, -4, 11, 1, -11, -1,
1522 2, -2, 1, 12, -12, -1, 13, -13, 1, -1, 3, -3, 14, 5, -14, -5,
1523 -15, 15, -1, 1, 2, -2, 16, -16, 1, 17, -17, -1, 6, -6, 18, -18,
1524 2, -2, -19, 19, -3, 1, 3, -1, 4, 20, -4, 1, -21, 21, 1, 2,
1525 -1, -7, 7, -2, 22, -22, 23, 2, -23, -2, 1, -1, -24, 24, -25, 25,
1526 -8, -26, 26, 8, -27, 27, 5, 3, -3, -5, -4, 28, -28, 4, 29, -29,
1527 1, -1, -2, -30, 30, 2, 9, -9, -31, 31, 2, -2, -32, 3, 32, -33,
1528 -3, 1, 33, -34, -1, 34, -35, 35, -10, 10, -6, 36, 6, -36, 37, -37,
1529 -5, 38, 1, -38, -1, 3, 39, -39, -1, 40, 5, 1, -40, -3, 2, -11,
1530 -41, -2, 1, 11, -3, -4, 41, 3, 42, 4, -1, -43, -42, 43, 1, -44,
1531 45, -1, 44, -45, -7, 7, -46, 1, -12, 2, 1, -47, 46, 12, 47, 48,
1532 -2, -1, -48, 49, -1, -50, -49, 50, -6, -51, 51, 52, -13, 53, -4, 4,
1533 6, 13, -53, -52, -54, 55, 54, -55, -56, -2, 2, -8, 56, 1, -3, -1,
1534 2, 58, 3, 8, -2, 57, -58, -60, -59, -57, -3, 60, 59, -14, 3, 14}
1535 },{
1536 /* MapTab7 */
1537 2, /* eob_sym */
1538 38, /* esc_sym */
1539 /* run table */
1540 {1, 1, 0, 2, 2, 1, 1, 3, 3, 4, 4, 5, 5, 1, 1, 6,
1541 6, 2, 2, 7, 7, 8, 8, 1, 1, 3, 3, 9, 9, 10, 10, 1,
1542 1, 2, 2, 4, 4, 11, 0, 11, 12, 12, 13, 13, 1, 1, 5, 5,
1543 14, 14, 15, 16, 15, 16, 3, 3, 1, 6, 1, 6, 2, 2, 7, 7,
1544 8, 8, 17, 17, 1, 1, 4, 4, 18, 18, 2, 2, 1, 19, 1, 20,
1545 19, 20, 21, 21, 3, 3, 22, 22, 5, 5, 24, 1, 1, 23, 9, 23,
1546 24, 9, 2, 2, 10, 1, 1, 10, 6, 6, 25, 4, 4, 25, 7, 7,
1547 26, 8, 1, 8, 3, 1, 26, 3, 11, 11, 27, 27, 2, 28, 1, 2,
1548 28, 1, 12, 12, 5, 5, 29, 13, 13, 29, 32, 1, 1, 33, 31, 30,
1549 32, 4, 30, 33, 4, 31, 3, 14, 1, 1, 3, 34, 34, 2, 2, 14,
1550 6, 6, 35, 36, 35, 36, 1, 15, 1, 16, 16, 15, 7, 9, 7, 9,
1551 37, 8, 8, 37, 1, 1, 39, 2, 38, 39, 2, 40, 5, 38, 40, 5,
1552 3, 3, 4, 4, 10, 10, 1, 1, 1, 1, 41, 2, 41, 2, 6, 6,
1553 1, 1, 11, 42, 11, 43, 3, 42, 3, 17, 4, 43, 1, 17, 7, 1,
1554 8, 44, 4, 7, 44, 5, 8, 2, 5, 1, 2, 48, 45, 1, 12, 45,
1555 12, 48, 13, 13, 1, 9, 9, 46, 1, 46, 47, 47, 49, 18, 18, 49},
1556
1557 /* value table */
1558 { 1, -1, 0, 1, -1, 2, -2, 1, -1, 1, -1, 1, -1, 3, -3, 1,
1559 -1, -2, 2, 1, -1, 1, -1, 4, -4, -2, 2, 1, -1, 1, -1, 5,
1560 -5, -3, 3, 2, -2, 1, 0, -1, 1, -1, 1, -1, 6, -6, 2, -2,
1561 1, -1, 1, 1, -1, -1, -3, 3, 7, 2, -7, -2, -4, 4, 2, -2,
1562 2, -2, 1, -1, 8, -8, 3, -3, 1, -1, -5, 5, 9, 1, -9, 1,
1563 -1, -1, 1, -1, -4, 4, 1, -1, 3, -3, 1, -10, 10, 1, 2, -1,
1564 -1, -2, 6, -6, 2, 11, -11, -2, 3, -3, 1, -4, 4, -1, 3, -3,
1565 1, 3, 12, -3, -5, -12, -1, 5, 2, -2, 1, -1, -7, 1, 13, 7,
1566 -1, -13, 2, -2, 4, -4, 1, 2, -2, -1, 1, 14, -14, 1, 1, 1,
1567 -1, -5, -1, -1, 5, -1, -6, 2, -15, 15, 6, 1, -1, -8, 8, -2,
1568 -4, 4, 1, 1, -1, -1, 16, 2, -16, -2, 2, -2, 4, 3, -4, -3,
1569 -1, -4, 4, 1, -17, 17, -1, -9, 1, 1, 9, 1, -5, -1, -1, 5,
1570 -7, 7, 6, -6, 3, -3, 18, -18, 19, -19, 1, -10, -1, 10, -5, 5,
1571 20, -20, -3, 1, 3, 1, 8, -1, -8, 2, 7, -1, -21, -2, 5, 21,
1572 5, -1, -7, -5, 1, -6, -5, -11, 6, 22, 11, 1, 1, -22, -3, -1,
1573 3, -1, 3, -3, -23, 4, -4, 1, 23, -1, 1, -1, 1, -2, 2, -1}
1574 },{
1575 /* MapTab8 */
1576 4, /* eob_sym */
1577 11, /* esc_sym */
1578 /* run table */
1579 {1, 1, 1, 1, 0, 2, 2, 1, 1, 3, 3, 0, 1, 1, 2, 2,
1580 4, 4, 1, 1, 5, 5, 1, 1, 2, 2, 3, 3, 6, 6, 1, 1,
1581 7, 7, 8, 1, 8, 2, 2, 1, 4, 4, 1, 3, 1, 3, 9, 9,
1582 2, 2, 1, 5, 1, 5, 10, 10, 1, 1, 11, 11, 3, 6, 3, 4,
1583 4, 6, 2, 2, 1, 12, 1, 12, 7, 13, 7, 13, 1, 1, 8, 8,
1584 2, 2, 14, 14, 16, 15, 16, 5, 5, 1, 3, 15, 1, 3, 4, 4,
1585 1, 1, 17, 17, 2, 2, 6, 6, 1, 18, 1, 18, 22, 21, 22, 21,
1586 25, 24, 25, 19, 9, 20, 9, 23, 19, 24, 20, 3, 23, 7, 3, 1,
1587 1, 7, 28, 26, 29, 5, 28, 26, 5, 8, 29, 4, 8, 27, 2, 2,
1588 4, 27, 1, 1, 10, 36, 10, 33, 33, 36, 30, 1, 32, 32, 1, 30,
1589 6, 31, 31, 35, 3, 6, 11, 11, 3, 2, 35, 2, 34, 1, 34, 1,
1590 37, 37, 12, 7, 12, 5, 41, 5, 4, 7, 1, 8, 13, 4, 1, 41,
1591 13, 38, 8, 38, 9, 1, 40, 40, 9, 1, 39, 2, 2, 49, 39, 42,
1592 3, 3, 14, 16, 49, 14, 16, 42, 43, 43, 6, 6, 15, 1, 1, 15,
1593 44, 44, 1, 1, 50, 48, 4, 5, 4, 7, 5, 2, 10, 10, 48, 7,
1594 50, 45, 2, 1, 45, 8, 8, 1, 46, 46, 3, 47, 47, 3, 1, 1},
1595
1596 /* value table */
1597 { 1, -1, 2, -2, 0, 1, -1, 3, -3, 1, -1, 0, 4, -4, 2, -2,
1598 1, -1, 5, -5, 1, -1, 6, -6, 3, -3, 2, -2, 1, -1, 7, -7,
1599 1, -1, 1, 8, -1, 4, -4, -8, 2, -2, 9, 3, -9, -3, 1, -1,
1600 5, -5, 10, 2, -10, -2, 1, -1, 11, -11, 1, -1, -4, 2, 4, 3,
1601 -3, -2, 6, -6, 12, 1, -12, -1, 2, 1, -2, -1, 13, -13, 2, -2,
1602 7, -7, 1, -1, 1, 1, -1, 3, -3, 14, 5, -1, -14, -5, 4, -4,
1603 15, -15, 1, -1, 8, -8, -3, 3, 16, 1, -16, -1, 1, 1, -1, -1,
1604 1, 1, -1, 1, 2, 1, -2, 1, -1, -1, -1, 6, -1, 3, -6, 17,
1605 -17, -3, 1, 1, 1, 4, -1, -1, -4, 3, -1, 5, -3, -1, -9, 9,
1606 -5, 1, 18, -18, 2, 1, -2, 1, -1, -1, 1, 19, -1, 1, -19, -1,
1607 4, 1, -1, 1, 7, -4, -2, 2, -7, 10, -1, -10, 1, 20, -1, -20,
1608 1, -1, 2, 4, -2, 5, 1, -5, 6, -4, 21, 4, 2, -6, -21, -1,
1609 -2, 1, -4, -1, -3, 22, -1, 1, 3, -22, -1, 11, -11, 1, 1, 1,
1610 8, -8, 2, 2, -1, -2, -2, -1, 1, -1, -5, 5, 2, 23, -23, -2,
1611 1, -1, 24, -24, -1, -1, 7, 6, -7, 5, -6, 12, -3, 3, 1, -5,
1612 1, 1, -12, 25, -1, -5, 5, -25, -1, 1, 9, 1, -1, -9, 26, -26}
1613 }
1614 };