avcodec/vp6: select idct based (loosely) on number of coefficients decoded
authorPeter Ross <pross@xvid.org>
Sun, 13 Jan 2019 04:45:07 +0000 (15:45 +1100)
committerPeter Ross <pross@xvid.org>
Sat, 26 Jan 2019 12:49:09 +0000 (23:49 +1100)
The VP3/4/5/6 reference decoders all use three IDCT versions: one for the
DC-only case, another for blocks with more than 10 coefficients, and an
optimised one for blocks with up to 10 AC coefficents. VP6 relies on the
sparse 10 coefficient version, and without it, IDCT drift occurs.

Fixes: https://trac.ffmpeg.org/ticket/1282

Signed-off-by: Peter Ross <pross@xvid.org>
libavcodec/vp5.c
libavcodec/vp56.c
libavcodec/vp56.h
libavcodec/vp6.c
tests/ref/fate/vp6a
tests/ref/fate/vp6a-skip_alpha

index cb08cec..49988b8 100644 (file)
@@ -252,6 +252,7 @@ static int vp5_parse_coeff(VP56Context *s)
             for (i=coeff_idx; i<=ctx_last; i++)
                 s->coeff_ctx[ff_vp56_b6to4[b]][i] = 5;
         s->above_blocks[s->above_block_idx[b]].not_null_dc = s->coeff_ctx[ff_vp56_b6to4[b]][0];
+        s->idct_selector[b] = 63;
     }
     return 0;
 }
index e9e8d5d..72fea37 100644 (file)
@@ -406,6 +406,24 @@ static void vp56_mc(VP56Context *s, int b, int plane, uint8_t *src,
     }
 }
 
+static void vp56_idct_put(VP56Context *s, uint8_t * dest, ptrdiff_t stride, int16_t *block, int selector)
+{
+    if (selector > 10 || selector == 1)
+        s->vp3dsp.idct_put(dest, stride, block);
+    else
+        ff_vp3dsp_idct10_put(dest, stride, block);
+}
+
+static void vp56_idct_add(VP56Context *s, uint8_t * dest, ptrdiff_t stride, int16_t *block, int selector)
+{
+    if (selector > 10)
+        s->vp3dsp.idct_add(dest, stride, block);
+    else if (selector > 1)
+        ff_vp3dsp_idct10_add(dest, stride, block);
+    else
+        s->vp3dsp.idct_dc_add(dest, stride, block);
+}
+
 static av_always_inline void vp56_render_mb(VP56Context *s, int row, int col, int is_alpha, VP56mb mb_type)
 {
     int b, ab, b_max, plane, off;
@@ -426,8 +444,8 @@ static av_always_inline void vp56_render_mb(VP56Context *s, int row, int col, in
         case VP56_MB_INTRA:
             for (b=0; b<b_max; b++) {
                 plane = ff_vp56_b2p[b+ab];
-                s->vp3dsp.idct_put(frame_current->data[plane] + s->block_offset[b],
-                                s->stride[plane], s->block_coeff[b]);
+                vp56_idct_put(s, frame_current->data[plane] + s->block_offset[b],
+                                s->stride[plane], s->block_coeff[b], s->idct_selector[b]);
             }
             break;
 
@@ -439,8 +457,8 @@ static av_always_inline void vp56_render_mb(VP56Context *s, int row, int col, in
                 s->hdsp.put_pixels_tab[1][0](frame_current->data[plane] + off,
                                              frame_ref->data[plane] + off,
                                              s->stride[plane], 8);
-                s->vp3dsp.idct_add(frame_current->data[plane] + off,
-                                s->stride[plane], s->block_coeff[b]);
+                vp56_idct_add(s, frame_current->data[plane] + off,
+                              s->stride[plane], s->block_coeff[b], s->idct_selector[b]);
             }
             break;
 
@@ -457,8 +475,8 @@ static av_always_inline void vp56_render_mb(VP56Context *s, int row, int col, in
                 plane = ff_vp56_b2p[b+ab];
                 vp56_mc(s, b, plane, frame_ref->data[plane], s->stride[plane],
                         16*col+x_off, 16*row+y_off);
-                s->vp3dsp.idct_add(frame_current->data[plane] + s->block_offset[b],
-                                s->stride[plane], s->block_coeff[b]);
+                vp56_idct_add(s, frame_current->data[plane] + s->block_offset[b],
+                              s->stride[plane], s->block_coeff[b], s->idct_selector[b]);
             }
             break;
     }
index 9b30368..84b2f6c 100644 (file)
@@ -105,6 +105,7 @@ typedef struct VP56Macroblock {
 typedef struct VP56Model {
     uint8_t coeff_reorder[64];       /* used in vp6 only */
     uint8_t coeff_index_to_pos[64];  /* used in vp6 only */
+    uint8_t coeff_index_to_idct_selector[64]; /* used in vp6 only */
     uint8_t vector_sig[2];           /* delta sign */
     uint8_t vector_dct[2];           /* delta coding types */
     uint8_t vector_pdi[2][2];        /* predefined delta init */
@@ -157,6 +158,7 @@ struct vp56_context {
     VP56mb mb_type;
     VP56Macroblock *macroblocks;
     DECLARE_ALIGNED(16, int16_t, block_coeff)[6][64];
+    int idct_selector[6];
 
     /* motion vectors */
     VP56mv mv[6];  /* vectors for each block in MB */
index 645fc5c..977fcb7 100644 (file)
@@ -194,6 +194,18 @@ static void vp6_coeff_order_table_init(VP56Context *s)
         for (pos=1; pos<64; pos++)
             if (s->modelp->coeff_reorder[pos] == i)
                 s->modelp->coeff_index_to_pos[idx++] = pos;
+
+    for (idx = 0; idx < 64; idx++) {
+        int max = 0;
+        for (i = 0; i <= idx; i++) {
+            int v = s->modelp->coeff_index_to_pos[i];
+            if (v > max)
+                max = v;
+        }
+        if (s->sub_version > 6)
+            max++;
+        s->modelp->coeff_index_to_idct_selector[idx] = max;
+    }
 }
 
 static void vp6_default_models_init(VP56Context *s)
@@ -446,6 +458,7 @@ static int vp6_parse_coeff_huffman(VP56Context *s)
             cg = FFMIN(vp6_coeff_groups[coeff_idx], 3);
             vlc_coeff = &s->ract_vlc[pt][ct][cg];
         }
+        s->idct_selector[b] = model->coeff_index_to_idct_selector[FFMIN(coeff_idx, 63)];
     }
     return 0;
 }
@@ -527,6 +540,7 @@ static int vp6_parse_coeff(VP56Context *s)
 
         s->left_block[ff_vp56_b6to4[b]].not_null_dc =
         s->above_blocks[s->above_block_idx[b]].not_null_dc = !!s->block_coeff[b][0];
+        s->idct_selector[b] = model->coeff_index_to_idct_selector[FFMIN(coeff_idx, 63)];
     }
     return 0;
 }
index b4f3363..8fb2630 100644 (file)
@@ -4,95 +4,95 @@
 #dimensions 0: 300x180
 #sar 0: 0/1
 0,          0,          0,        1,   135000, 0x9dceed6d
-0,          1,          1,        1,   135000, 0x47e5778d
-0,          2,          2,        1,   135000, 0x5de36599
-0,          3,          3,        1,   135000, 0x540d8079
-0,          4,          4,        1,   135000, 0xba9ea534
-0,          5,          5,        1,   135000, 0xa75088f8
-0,          6,          6,        1,   135000, 0x7d867559
-0,          7,          7,        1,   135000, 0xcc678fee
-0,          8,          8,        1,   135000, 0x79c590b9
-0,          9,          9,        1,   135000, 0x87789918
-0,         10,         10,        1,   135000, 0xaa939213
-0,         11,         11,        1,   135000, 0x3912916d
-0,         12,         12,        1,   135000, 0x41305d0b
-0,         13,         13,        1,   135000, 0x2686b5dd
-0,         14,         14,        1,   135000, 0xa69ae422
-0,         15,         15,        1,   135000, 0x998a3478
-0,         16,         16,        1,   135000, 0x5842768d
-0,         17,         17,        1,   135000, 0xf6a85b16
-0,         18,         18,        1,   135000, 0x7a5b2708
-0,         19,         19,        1,   135000, 0x8b2abb63
-0,         20,         20,        1,   135000, 0x7dc8468b
-0,         21,         21,        1,   135000, 0x04d85001
-0,         22,         22,        1,   135000, 0x83e3c647
-0,         23,         23,        1,   135000, 0xcddd687e
-0,         24,         24,        1,   135000, 0x818e785e
-0,         25,         25,        1,   135000, 0x3a915080
-0,         26,         26,        1,   135000, 0x953d603d
-0,         27,         27,        1,   135000, 0x79005ebf
-0,         28,         28,        1,   135000, 0x80afec75
-0,         29,         29,        1,   135000, 0xfc8e376b
-0,         30,         30,        1,   135000, 0xf957b7ef
-0,         31,         31,        1,   135000, 0xe878da44
-0,         32,         32,        1,   135000, 0xe68ecca3
-0,         33,         33,        1,   135000, 0x1a2cc7d3
-0,         34,         34,        1,   135000, 0x4f346a69
-0,         35,         35,        1,   135000, 0x7a0cf4ac
-0,         36,         36,        1,   135000, 0x6d4eee7a
-0,         37,         37,        1,   135000, 0xf0688cbd
-0,         38,         38,        1,   135000, 0xca4abbbc
-0,         39,         39,        1,   135000, 0x87669519
-0,         40,         40,        1,   135000, 0xd090e9d7
-0,         41,         41,        1,   135000, 0xd7f536c1
-0,         42,         42,        1,   135000, 0x353ede54
-0,         43,         43,        1,   135000, 0xbc8f5358
-0,         44,         44,        1,   135000, 0xb52cd59a
-0,         45,         45,        1,   135000, 0x0b882eba
-0,         46,         46,        1,   135000, 0xc544cd54
-0,         47,         47,        1,   135000, 0x31ca7e73
+0,          1,          1,        1,   135000, 0x1fc377a4
+0,          2,          2,        1,   135000, 0x0b4465d4
+0,          3,          3,        1,   135000, 0x136b8062
+0,          4,          4,        1,   135000, 0x4691a55c
+0,          5,          5,        1,   135000, 0x55bb8a19
+0,          6,          6,        1,   135000, 0xdbf67651
+0,          7,          7,        1,   135000, 0x6fb19113
+0,          8,          8,        1,   135000, 0x3edc9227
+0,          9,          9,        1,   135000, 0x53b39aff
+0,         10,         10,        1,   135000, 0x699e94b0
+0,         11,         11,        1,   135000, 0xeedd9388
+0,         12,         12,        1,   135000, 0x14055f96
+0,         13,         13,        1,   135000, 0x71fbb5fd
+0,         14,         14,        1,   135000, 0x6fb4e491
+0,         15,         15,        1,   135000, 0x35ca3482
+0,         16,         16,        1,   135000, 0x0c2a7530
+0,         17,         17,        1,   135000, 0x422c5581
+0,         18,         18,        1,   135000, 0x19eb2155
+0,         19,         19,        1,   135000, 0x07e1b114
+0,         20,         20,        1,   135000, 0xa10f3f81
+0,         21,         21,        1,   135000, 0x75684dcd
+0,         22,         22,        1,   135000, 0x1721c337
+0,         23,         23,        1,   135000, 0x3897667d
+0,         24,         24,        1,   135000, 0x1232769e
+0,         25,         25,        1,   135000, 0xec975059
+0,         26,         26,        1,   135000, 0xb2a46123
+0,         27,         27,        1,   135000, 0x052c5f72
+0,         28,         28,        1,   135000, 0x3087eb2f
+0,         29,         29,        1,   135000, 0xd1e0373a
+0,         30,         30,        1,   135000, 0x64dab704
+0,         31,         31,        1,   135000, 0xa44dd89e
+0,         32,         32,        1,   135000, 0x380ecae9
+0,         33,         33,        1,   135000, 0x8c6fc4ab
+0,         34,         34,        1,   135000, 0x02096903
+0,         35,         35,        1,   135000, 0x11edf432
+0,         36,         36,        1,   135000, 0x3585ee5f
+0,         37,         37,        1,   135000, 0xe1338c40
+0,         38,         38,        1,   135000, 0x5edfbd0c
+0,         39,         39,        1,   135000, 0x9420965c
+0,         40,         40,        1,   135000, 0x0caceb17
+0,         41,         41,        1,   135000, 0x3fdc36c3
+0,         42,         42,        1,   135000, 0x8a24df14
+0,         43,         43,        1,   135000, 0x5dc057b0
+0,         44,         44,        1,   135000, 0xdc5eda65
+0,         45,         45,        1,   135000, 0x60433612
+0,         46,         46,        1,   135000, 0x6a91d6c9
+0,         47,         47,        1,   135000, 0x53598734
 0,         48,         48,        1,   135000, 0xb1569ce9
-0,         49,         49,        1,   135000, 0x8bf4394f
-0,         50,         50,        1,   135000, 0xf413812a
-0,         51,         51,        1,   135000, 0xf2fa90ab
-0,         52,         52,        1,   135000, 0xdcd8b265
-0,         53,         53,        1,   135000, 0xa89cdba1
-0,         54,         54,        1,   135000, 0x212b59a5
-0,         55,         55,        1,   135000, 0x10c589c3
-0,         56,         56,        1,   135000, 0x432ab5b4
+0,         49,         49,        1,   135000, 0xf5e83a33
+0,         50,         50,        1,   135000, 0xebe18275
+0,         51,         51,        1,   135000, 0x98af9447
+0,         52,         52,        1,   135000, 0x3f03b765
+0,         53,         53,        1,   135000, 0x7423e0b8
+0,         54,         54,        1,   135000, 0x6c1b5faa
+0,         55,         55,        1,   135000, 0xebf98d52
+0,         56,         56,        1,   135000, 0xf3dfb8b6
 0,         57,         57,        1,   135000, 0x85a9634a
-0,         58,         58,        1,   135000, 0x10db5b87
-0,         59,         59,        1,   135000, 0x583145d9
-0,         60,         60,        1,   135000, 0x7d3a33bd
-0,         61,         61,        1,   135000, 0xcf592423
-0,         62,         62,        1,   135000, 0xb59728e5
-0,         63,         63,        1,   135000, 0x1eeca660
-0,         64,         64,        1,   135000, 0xff7bcc34
-0,         65,         65,        1,   135000, 0x0ef8f271
-0,         66,         66,        1,   135000, 0x8c9ca8ee
-0,         67,         67,        1,   135000, 0x8a7ece34
-0,         68,         68,        1,   135000, 0x7d4c3b5d
-0,         69,         69,        1,   135000, 0x99118f21
-0,         70,         70,        1,   135000, 0xd97fe7e2
-0,         71,         71,        1,   135000, 0xf93842f1
-0,         72,         72,        1,   135000, 0x35c912e8
-0,         73,         73,        1,   135000, 0x14e59e97
+0,         58,         58,        1,   135000, 0x4d425bb5
+0,         59,         59,        1,   135000, 0xfb7945ee
+0,         60,         60,        1,   135000, 0x593534c1
+0,         61,         61,        1,   135000, 0xe3fa2517
+0,         62,         62,        1,   135000, 0x893629e3
+0,         63,         63,        1,   135000, 0xdc3ca6ad
+0,         64,         64,        1,   135000, 0x16b1ce27
+0,         65,         65,        1,   135000, 0x8296f478
+0,         66,         66,        1,   135000, 0x9e9baaa3
+0,         67,         67,        1,   135000, 0x994ecd4a
+0,         68,         68,        1,   135000, 0x40f83b3c
+0,         69,         69,        1,   135000, 0x0de38f90
+0,         70,         70,        1,   135000, 0x5455ea6c
+0,         71,         71,        1,   135000, 0x053e41e8
+0,         72,         72,        1,   135000, 0x0fee1281
+0,         73,         73,        1,   135000, 0xa0c9a434
 0,         74,         74,        1,   135000, 0x8e4c19aa
-0,         75,         75,        1,   135000, 0x4adfbc53
-0,         76,         76,        1,   135000, 0x0613adde
-0,         77,         77,        1,   135000, 0x8db264ab
-0,         78,         78,        1,   135000, 0x3948b619
-0,         79,         79,        1,   135000, 0x843d7c02
-0,         80,         80,        1,   135000, 0x534fea34
+0,         75,         75,        1,   135000, 0x34bebc00
+0,         76,         76,        1,   135000, 0x6670ad6f
+0,         77,         77,        1,   135000, 0xdbba63fc
+0,         78,         78,        1,   135000, 0xe34fb839
+0,         79,         79,        1,   135000, 0xa3ce7eb1
+0,         80,         80,        1,   135000, 0xdec7ed7d
 0,         81,         81,        1,   135000, 0xdb7041bf
-0,         82,         82,        1,   135000, 0xd0ce1cce
-0,         83,         83,        1,   135000, 0x3c008335
-0,         84,         84,        1,   135000, 0xb699208f
-0,         85,         85,        1,   135000, 0xe07da3ca
-0,         86,         86,        1,   135000, 0x26331f41
-0,         87,         87,        1,   135000, 0x4e19fe83
-0,         88,         88,        1,   135000, 0xaa9a9e45
-0,         89,         89,        1,   135000, 0x336b7ed0
-0,         90,         90,        1,   135000, 0xc9bf7611
+0,         82,         82,        1,   135000, 0x2b1d1dc1
+0,         83,         83,        1,   135000, 0xaaa384c1
+0,         84,         84,        1,   135000, 0x37f42217
+0,         85,         85,        1,   135000, 0x928ba4da
+0,         86,         86,        1,   135000, 0x2b681f41
+0,         87,         87,        1,   135000, 0xcbe1ff84
+0,         88,         88,        1,   135000, 0x47949f24
+0,         89,         89,        1,   135000, 0x368b7fe5
+0,         90,         90,        1,   135000, 0x1cf4773b
 0,         91,         91,        1,   135000, 0x14c33a35
 0,         92,         92,        1,   135000, 0xdc08470e
index e2c435f..f092778 100644 (file)
@@ -4,95 +4,95 @@
 #dimensions 0: 300x180
 #sar 0: 0/1
 0,          0,          0,        1,    81000, 0xcb92962d
-0,          1,          1,        1,    81000, 0xae381904
-0,          2,          2,        1,    81000, 0x1fcc0c75
-0,          3,          3,        1,    81000, 0x023f0c21
-0,          4,          4,        1,    81000, 0xad691402
-0,          5,          5,        1,    81000, 0x42390be0
-0,          6,          6,        1,    81000, 0xc1c10a4e
-0,          7,          7,        1,    81000, 0x9c0315ac
-0,          8,          8,        1,    81000, 0xc2a315a7
-0,          9,          9,        1,    81000, 0x3a631392
-0,         10,         10,        1,    81000, 0x11591414
-0,         11,         11,        1,    81000, 0x1a551125
-0,         12,         12,        1,    81000, 0x2e1efa4f
-0,         13,         13,        1,    81000, 0x4aa3f016
-0,         14,         14,        1,    81000, 0x74c029d8
-0,         15,         15,        1,    81000, 0xdee9a98b
-0,         16,         16,        1,    81000, 0xdf3502d5
-0,         17,         17,        1,    81000, 0x4653536b
-0,         18,         18,        1,    81000, 0x7f658c75
-0,         19,         19,        1,    81000, 0xab18ff13
-0,         20,         20,        1,    81000, 0xac2b8f3b
-0,         21,         21,        1,    81000, 0xd61ff094
-0,         22,         22,        1,    81000, 0x425bfc2b
-0,         23,         23,        1,    81000, 0x6be7ecd3
-0,         24,         24,        1,    81000, 0x0b0ee65b
-0,         25,         25,        1,    81000, 0x3c6f146b
-0,         26,         26,        1,    81000, 0x27c4e9c8
-0,         27,         27,        1,    81000, 0x174022c4
-0,         28,         28,        1,    81000, 0x3320fe81
-0,         29,         29,        1,    81000, 0x7a3c342e
-0,         30,         30,        1,    81000, 0x448b4346
-0,         31,         31,        1,    81000, 0xd285b23d
-0,         32,         32,        1,    81000, 0x852ed590
-0,         33,         33,        1,    81000, 0xc9d3df17
-0,         34,         34,        1,    81000, 0x4d23727b
-0,         35,         35,        1,    81000, 0x1fae66cd
-0,         36,         36,        1,    81000, 0x384d54ab
-0,         37,         37,        1,    81000, 0x2fee6ba3
-0,         38,         38,        1,    81000, 0xd7ad6f59
-0,         39,         39,        1,    81000, 0xaf5e3e76
-0,         40,         40,        1,    81000, 0x10fceda4
-0,         41,         41,        1,    81000, 0xb26df92b
-0,         42,         42,        1,    81000, 0xd6676e08
-0,         43,         43,        1,    81000, 0xff6b1b95
-0,         44,         44,        1,    81000, 0x6196d598
-0,         45,         45,        1,    81000, 0x833ebf1b
-0,         46,         46,        1,    81000, 0x7b085af1
-0,         47,         47,        1,    81000, 0xe8f583b4
+0,          1,          1,        1,    81000, 0x8fef1925
+0,          2,          2,        1,    81000, 0xf0350cb6
+0,          3,          3,        1,    81000, 0xa70a0c52
+0,          4,          4,        1,    81000, 0x21ef1490
+0,          5,          5,        1,    81000, 0x98bc0c96
+0,          6,          6,        1,    81000, 0x92380b27
+0,          7,          7,        1,    81000, 0xbba216cd
+0,          8,          8,        1,    81000, 0x92a8172b
+0,          9,          9,        1,    81000, 0xfbc21592
+0,         10,         10,        1,    81000, 0xdad416a1
+0,         11,         11,        1,    81000, 0xec4d13aa
+0,         12,         12,        1,    81000, 0xaf36fcff
+0,         13,         13,        1,    81000, 0xb4fcf056
+0,         14,         14,        1,    81000, 0xe3782a3f
+0,         15,         15,        1,    81000, 0x714daa0b
+0,         16,         16,        1,    81000, 0xe2770382
+0,         17,         17,        1,    81000, 0x553253ff
+0,         18,         18,        1,    81000, 0x928d8c46
+0,         19,         19,        1,    81000, 0x06c8fe82
+0,         20,         20,        1,    81000, 0xb8198f5a
+0,         21,         21,        1,    81000, 0x0029f118
+0,         22,         22,        1,    81000, 0x6fe7fc6f
+0,         23,         23,        1,    81000, 0x9165edde
+0,         24,         24,        1,    81000, 0xe76ae791
+0,         25,         25,        1,    81000, 0xa4dd145a
+0,         26,         26,        1,    81000, 0x2d7de9d8
+0,         27,         27,        1,    81000, 0xe102228b
+0,         28,         28,        1,    81000, 0xc57ffe0e
+0,         29,         29,        1,    81000, 0x324434cb
+0,         30,         30,        1,    81000, 0xedc0433e
+0,         31,         31,        1,    81000, 0xd42bb18a
+0,         32,         32,        1,    81000, 0xedb3d561
+0,         33,         33,        1,    81000, 0x5244de92
+0,         34,         34,        1,    81000, 0x0bb27280
+0,         35,         35,        1,    81000, 0xc6116736
+0,         36,         36,        1,    81000, 0x42f154e2
+0,         37,         37,        1,    81000, 0xffbd6bf9
+0,         38,         38,        1,    81000, 0x813170d0
+0,         39,         39,        1,    81000, 0x430c4040
+0,         40,         40,        1,    81000, 0x56d1eecb
+0,         41,         41,        1,    81000, 0xaa4afa12
+0,         42,         42,        1,    81000, 0x2c3d6fb8
+0,         43,         43,        1,    81000, 0xfedf1e3e
+0,         44,         44,        1,    81000, 0xf538d893
+0,         45,         45,        1,    81000, 0xcc81c3b5
+0,         46,         46,        1,    81000, 0x59b95fbc
+0,         47,         47,        1,    81000, 0xb4da87a0
 0,         48,         48,        1,    81000, 0x3426d5e4
-0,         49,         49,        1,    81000, 0x214069ed
-0,         50,         50,        1,    81000, 0x7dbdfd3f
-0,         51,         51,        1,    81000, 0xf19b3f45
-0,         52,         52,        1,    81000, 0x0f05c7e2
-0,         53,         53,        1,    81000, 0xba94e323
-0,         54,         54,        1,    81000, 0x0de7b0c2
-0,         55,         55,        1,    81000, 0xfcf93c55
-0,         56,         56,        1,    81000, 0x8a8dbd55
+0,         49,         49,        1,    81000, 0x8d066aae
+0,         50,         50,        1,    81000, 0x09effe79
+0,         51,         51,        1,    81000, 0xecc540ae
+0,         52,         52,        1,    81000, 0x845dc90c
+0,         53,         53,        1,    81000, 0x9c2fe4d2
+0,         54,         54,        1,    81000, 0x8887b277
+0,         55,         55,        1,    81000, 0x3bdc3ca9
+0,         56,         56,        1,    81000, 0x094fbe27
 0,         57,         57,        1,    81000, 0xddf22b97
-0,         58,         58,        1,    81000, 0x49a830ff
-0,         59,         59,        1,    81000, 0x82ab2a4b
-0,         60,         60,        1,    81000, 0xd23420e5
-0,         61,         61,        1,    81000, 0x7c1017d1
-0,         62,         62,        1,    81000, 0x9aa61b38
-0,         63,         63,        1,    81000, 0x2a724a18
-0,         64,         64,        1,    81000, 0xc18055f2
-0,         65,         65,        1,    81000, 0xecba3855
-0,         66,         66,        1,    81000, 0x0eed6b0f
-0,         67,         67,        1,    81000, 0x4be73816
-0,         68,         68,        1,    81000, 0xa681214e
-0,         69,         69,        1,    81000, 0x4958f83d
-0,         70,         70,        1,    81000, 0xca0f0d61
-0,         71,         71,        1,    81000, 0x3c453de1
-0,         72,         72,        1,    81000, 0xff60360a
-0,         73,         73,        1,    81000, 0xdcef0949
+0,         58,         58,        1,    81000, 0x31b23156
+0,         59,         59,        1,    81000, 0xf5bf2ad8
+0,         60,         60,        1,    81000, 0x4a9321c4
+0,         61,         61,        1,    81000, 0xdd1b18ca
+0,         62,         62,        1,    81000, 0x4ece1cdd
+0,         63,         63,        1,    81000, 0x6a9a4b53
+0,         64,         64,        1,    81000, 0x6624578b
+0,         65,         65,        1,    81000, 0x89273a0f
+0,         66,         66,        1,    81000, 0x9eb56c4c
+0,         67,         67,        1,    81000, 0xe60238f5
+0,         68,         68,        1,    81000, 0xbc4c228a
+0,         69,         69,        1,    81000, 0x3feefa08
+0,         70,         70,        1,    81000, 0x0d620f37
+0,         71,         71,        1,    81000, 0x93693fc8
+0,         72,         72,        1,    81000, 0xfc4b3848
+0,         73,         73,        1,    81000, 0xd9950bfb
 0,         74,         74,        1,    81000, 0xe5e3732d
-0,         75,         75,        1,    81000, 0x39747fd4
-0,         76,         76,        1,    81000, 0x6bec70e6
-0,         77,         77,        1,    81000, 0x7026a8c0
-0,         78,         78,        1,    81000, 0x92de5b61
-0,         79,         79,        1,    81000, 0x3f00507f
-0,         80,         80,        1,    81000, 0x5620c377
+0,         75,         75,        1,    81000, 0x53517fd2
+0,         76,         76,        1,    81000, 0xb57c70b0
+0,         77,         77,        1,    81000, 0x378ea87c
+0,         78,         78,        1,    81000, 0xfd2b5b58
+0,         79,         79,        1,    81000, 0x66d45077
+0,         80,         80,        1,    81000, 0x6e07c3f8
 0,         81,         81,        1,    81000, 0x39f5ed38
-0,         82,         82,        1,    81000, 0x6ee35d67
-0,         83,         83,        1,    81000, 0x4f99a409
-0,         84,         84,        1,    81000, 0x0a05b6ea
-0,         85,         85,        1,    81000, 0xd6c442d9
-0,         86,         86,        1,    81000, 0x0bb3d2f0
-0,         87,         87,        1,    81000, 0x6891c5b1
-0,         88,         88,        1,    81000, 0xf16ba9be
-0,         89,         89,        1,    81000, 0xba53528e
-0,         90,         90,        1,    81000, 0xc847de49
+0,         82,         82,        1,    81000, 0x55b05da7
+0,         83,         83,        1,    81000, 0x7f78a42c
+0,         84,         84,        1,    81000, 0x5139b79c
+0,         85,         85,        1,    81000, 0x4054437d
+0,         86,         86,        1,    81000, 0x0f9dd327
+0,         87,         87,        1,    81000, 0xa885c60e
+0,         88,         88,        1,    81000, 0x37abaa72
+0,         89,         89,        1,    81000, 0xdab25345
+0,         90,         90,        1,    81000, 0xbdf4df9d
 0,         91,         91,        1,    81000, 0xc5b2e2b0
 0,         92,         92,        1,    81000, 0xb0b497ff