From 34de878e3dc5fe3ed75a1253c5bdd1aae1e658a0 Mon Sep 17 00:00:00 2001
From: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Date: Thu, 13 Mar 2025 10:57:56 +0100
Subject: [PATCH 04/17] avcodec/hqxvlc: Avoid hardcoded RL VLC table

hqxvlc.c contains sort-of run-length VLCs in hardcoded form;
they amount to 26688 elements, taking 104KiB. These tables contain
many duplicated entries (they are partially created via a RPT_1024
macro). There are actually only 3039 different codes in all tables
combined, making this very wasteful.

This commit changes this by extracting the underlying entries
and creating a (static) RL-VLC. This only costs 3*3039 bytes
of .rodata. The resulting table needs only 15630 entries,
because our VLC init code uses smaller subtables when possible
(for an incomplete code, the negative of the length stored in
the VLC code is the number of bits the subtable uses; the hardcoded
tables uses a worst-case per table value).

Using GET_RL_VLC also gets rid of an unnecessary reload in case
a code is too long to be parsed in the first stage.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
 libavcodec/hqx.c    |   21 +-
 libavcodec/hqx.h    |   12 +-
 libavcodec/hqxvlc.c | 2226 ++++++++++++++++---------------------------
 3 files changed, 829 insertions(+), 1430 deletions(-)

diff --git a/libavcodec/hqx.c b/libavcodec/hqx.c
index ee6c5a6622..b31c35bbcc 100644
--- a/libavcodec/hqx.c
+++ b/libavcodec/hqx.c
@@ -97,19 +97,16 @@ static inline void put_blocks(HQXContext *ctx, int plane,
 }
 
 static inline void hqx_get_ac(GetBitContext *gb, const HQXAC *ac,
-                              int *run, int *lev)
+                              int *runp, int *lev)
 {
-    int val;
-
-    val = show_bits(gb, ac->lut_bits);
-    if (ac->lut[val].bits == -1) {
-        GetBitContext gb2 = *gb;
-        skip_bits(&gb2, ac->lut_bits);
-        val = ac->lut[val].lev + show_bits(&gb2, ac->extra_bits);
-    }
-    *run = ac->lut[val].run;
-    *lev = ac->lut[val].lev;
-    skip_bits(gb, ac->lut[val].bits);
+    int level, run;
+    OPEN_READER(re, gb);
+
+    UPDATE_CACHE(re, gb);
+    GET_RL_VLC(level, run, re, gb, ac->lut, ac->bits, 2, 0);
+    CLOSE_READER(re, gb);
+    *runp = run;
+    *lev  = level;
 }
 
 static int decode_block(GetBitContext *gb, VLC *vlc,
diff --git a/libavcodec/hqx.h b/libavcodec/hqx.h
index 155ec7f84f..4f313a1dc3 100644
--- a/libavcodec/hqx.h
+++ b/libavcodec/hqx.h
@@ -39,15 +39,9 @@ enum HQXACMode {
     NUM_HQX_AC
 };
 
-typedef struct HQXLUT {
-    int16_t lev;
-    uint8_t run;
-    int8_t  bits;
-} HQXLUT;
-
 typedef struct HQXAC {
-    int lut_bits, extra_bits;
-    const HQXLUT *lut;
+    int bits;
+    const RL_VLC_ELEM *lut;
 } HQXAC;
 
 struct HQXContext;
@@ -81,7 +75,7 @@ typedef struct HQXContext {
 #define HQX_CBP_VLC_BITS 5
 #define HQX_DC_VLC_BITS 9
 
-extern const HQXAC ff_hqx_ac[NUM_HQX_AC];
+extern HQXAC ff_hqx_ac[NUM_HQX_AC];
 
 int ff_hqx_init_vlcs(HQXContext *ctx);
 
diff --git a/libavcodec/hqxvlc.c b/libavcodec/hqxvlc.c
index 1eeda4fcce..94ab21724c 100644
--- a/libavcodec/hqxvlc.c
+++ b/libavcodec/hqxvlc.c
@@ -19,6 +19,7 @@
  */
 
 #include "hqx.h"
+#include "libavutil/thread.h"
 
 static const uint8_t cbp_vlc_bits[16] = {
     0x04, 0x1C, 0x1D, 0x09, 0x1E, 0x0B, 0x1B, 0x08,
@@ -719,1424 +720,790 @@ static const uint8_t dc11_vlc_lens[2048] = {
      8,  8,  8,  8,  8,  8,  8,  8,  7,  7,  7,  7,  7,  7,  7,  7,
 };
 
-#define RPT_2(a, b, c)    { a, b, c }, { a, b, c }
-#define RPT_4(a, b, c)    RPT_2(  a, b, c), RPT_2(  a, b, c)
-#define RPT_8(a, b, c)    RPT_4(  a, b, c), RPT_4(  a, b, c)
-#define RPT_16(a, b, c)   RPT_8(  a, b, c), RPT_8(  a, b, c)
-#define RPT_32(a, b, c)   RPT_16( a, b, c), RPT_16( a, b, c)
-#define RPT_64(a, b, c)   RPT_32( a, b, c), RPT_32( a, b, c)
-#define RPT_128(a, b, c)  RPT_64( a, b, c), RPT_64( a, b, c)
-#define RPT_256(a, b, c)  RPT_128(a, b, c), RPT_128(a, b, c)
-#define RPT_512(a, b, c)  RPT_256(a, b, c), RPT_256(a, b, c)
-#define RPT_1024(a, b, c) RPT_512(a, b, c), RPT_512(a, b, c)
 
-static const HQXLUT ac0_lut[] = {
-    RPT_64  (   1,  0,  4 ), RPT_64  (  -1,  0,  4 ),
-    RPT_64  (   2,  0,  4 ), RPT_64  (  -2,  0,  4 ),
-    RPT_32  (   3,  0,  5 ), RPT_32  (  -3,  0,  5 ),
-    RPT_32  (   4,  0,  5 ), RPT_32  (  -4,  0,  5 ),
-    RPT_32  (   1,  1,  5 ), RPT_32  (  -1,  1,  5 ),
-    RPT_16  (   5,  0,  6 ), RPT_16  (  -5,  0,  6 ),
-    RPT_16  (   6,  0,  6 ), RPT_16  (  -6,  0,  6 ),
-    RPT_16  (   7,  0,  6 ), RPT_16  (  -7,  0,  6 ),
-    RPT_16  (   8,  0,  6 ), RPT_16  (  -8,  0,  6 ),
-    { 1024,  0, -1 }, { 1056,  0, -1 }, { 1088,  0, -1 }, { 1120,  0, -1 },
-    { 1152,  0, -1 }, { 1184,  0, -1 }, { 1216,  0, -1 }, { 1248,  0, -1 },
-    { 1280,  0, -1 }, { 1312,  0, -1 }, { 1344,  0, -1 }, { 1376,  0, -1 },
-    { 1408,  0, -1 }, { 1440,  0, -1 }, { 1472,  0, -1 }, { 1504,  0, -1 },
-    { 1536,  0, -1 }, { 1568,  0, -1 }, { 1600,  0, -1 }, { 1632,  0, -1 },
-    { 1664,  0, -1 }, { 1696,  0, -1 }, { 1728,  0, -1 }, { 1760,  0, -1 },
-    { 1792,  0, -1 }, { 1824,  0, -1 }, { 1856,  0, -1 }, { 1888,  0, -1 },
-    { 1920,  0, -1 }, { 1952,  0, -1 }, { 1984,  0, -1 }, { 2016,  0, -1 },
-    RPT_32  (   0, 64,  5 ), RPT_8   (   9,  0,  7 ),
-    RPT_8   (  -9,  0,  7 ), RPT_8   (  10,  0,  7 ),
-    RPT_8   ( -10,  0,  7 ), RPT_8   (  11,  0,  7 ),
-    RPT_8   ( -11,  0,  7 ), RPT_8   (  12,  0,  7 ),
-    RPT_8   ( -12,  0,  7 ), RPT_8   (  13,  0,  7 ),
-    RPT_8   ( -13,  0,  7 ), RPT_8   (  14,  0,  7 ),
-    RPT_8   ( -14,  0,  7 ), RPT_8   (   2,  1,  7 ),
-    RPT_8   (  -2,  1,  7 ), RPT_8   (   1,  2,  7 ),
-    RPT_8   (  -1,  2,  7 ), RPT_4   (  15,  0,  8 ),
-    RPT_4   ( -15,  0,  8 ), RPT_4   (  16,  0,  8 ),
-    RPT_4   ( -16,  0,  8 ), RPT_4   (  17,  0,  8 ),
-    RPT_4   ( -17,  0,  8 ), RPT_4   (  18,  0,  8 ),
-    RPT_4   ( -18,  0,  8 ), RPT_4   (  19,  0,  8 ),
-    RPT_4   ( -19,  0,  8 ), RPT_4   (  20,  0,  8 ),
-    RPT_4   ( -20,  0,  8 ), RPT_4   (  21,  0,  8 ),
-    RPT_4   ( -21,  0,  8 ), RPT_4   (   3,  1,  8 ),
-    RPT_4   (  -3,  1,  8 ), RPT_4   (   4,  1,  8 ),
-    RPT_4   (  -4,  1,  8 ), RPT_4   (   1,  3,  8 ),
-    RPT_4   (  -1,  3,  8 ), RPT_4   (   1,  4,  8 ),
-    RPT_4   (  -1,  4,  8 ), RPT_4   (   0,  0,  8 ),
-    RPT_2   (  22,  0,  9 ), RPT_2   ( -22,  0,  9 ),
-    RPT_2   (  23,  0,  9 ), RPT_2   ( -23,  0,  9 ),
-    RPT_2   (  24,  0,  9 ), RPT_2   ( -24,  0,  9 ),
-    RPT_2   (  25,  0,  9 ), RPT_2   ( -25,  0,  9 ),
-    RPT_2   (  26,  0,  9 ), RPT_2   ( -26,  0,  9 ),
-    RPT_2   (  27,  0,  9 ), RPT_2   ( -27,  0,  9 ),
-    RPT_2   (  28,  0,  9 ), RPT_2   ( -28,  0,  9 ),
-    RPT_2   (  29,  0,  9 ), RPT_2   ( -29,  0,  9 ),
-    RPT_2   (  30,  0,  9 ), RPT_2   ( -30,  0,  9 ),
-    RPT_2   (  31,  0,  9 ), RPT_2   ( -31,  0,  9 ),
-    RPT_2   (  32,  0,  9 ), RPT_2   ( -32,  0,  9 ),
-    RPT_2   (  33,  0,  9 ), RPT_2   ( -33,  0,  9 ),
-    RPT_2   (   5,  1,  9 ), RPT_2   (  -5,  1,  9 ),
-    RPT_2   (   6,  1,  9 ), RPT_2   (  -6,  1,  9 ),
-    RPT_2   (   2,  2,  9 ), RPT_2   (  -2,  2,  9 ),
-    RPT_2   (   1,  5,  9 ), RPT_2   (  -1,  5,  9 ),
-    RPT_2   (   1,  6,  9 ), RPT_2   (  -1,  6,  9 ),
-    {   34,  0, 10 }, {  -34,  0, 10 }, {   35,  0, 10 }, {  -35,  0, 10 },
-    {   36,  0, 10 }, {  -36,  0, 10 }, {   37,  0, 10 }, {  -37,  0, 10 },
-    {   38,  0, 10 }, {  -38,  0, 10 }, {   39,  0, 10 }, {  -39,  0, 10 },
-    {   40,  0, 10 }, {  -40,  0, 10 }, {   41,  0, 10 }, {  -41,  0, 10 },
-    {   42,  0, 10 }, {  -42,  0, 10 }, {   43,  0, 10 }, {  -43,  0, 10 },
-    {   44,  0, 10 }, {  -44,  0, 10 }, {   45,  0, 10 }, {  -45,  0, 10 },
-    {   46,  0, 10 }, {  -46,  0, 10 }, {   47,  0, 10 }, {  -47,  0, 10 },
-    {   48,  0, 10 }, {  -48,  0, 10 }, {   49,  0, 10 }, {  -49,  0, 10 },
-    {   50,  0, 10 }, {  -50,  0, 10 }, RPT_2   (   0,  1,  9 ),
-    {    7,  1, 10 }, {   -7,  1, 10 }, {    8,  1, 10 }, {   -8,  1, 10 },
-    {    9,  1, 10 }, {   -9,  1, 10 }, {   10,  1, 10 }, {  -10,  1, 10 },
-    RPT_2   (   0,  2,  9 ), {    3,  2, 10 }, {   -3,  2, 10 },
-    RPT_2   (   0,  3,  9 ), {    2,  3, 10 }, {   -2,  3, 10 },
-    {    1,  7, 10 }, {   -1,  7, 10 }, {    1,  8, 10 }, {   -1,  8, 10 },
-    { 2048,  0, -1 }, { 2080,  0, -1 }, { 2112,  0, -1 }, { 2144,  0, -1 },
-    { 2176,  0, -1 }, { 2208,  0, -1 }, { 2240,  0, -1 }, { 2272,  0, -1 },
-    { 2304,  0, -1 }, { 2336,  0, -1 }, { 2368,  0, -1 }, { 2400,  0, -1 },
-    { 2432,  0, -1 }, { 2464,  0, -1 }, { 2496,  0, -1 }, { 2528,  0, -1 },
-    { 2560,  0, -1 }, { 2592,  0, -1 }, { 2624,  0, -1 }, { 2656,  0, -1 },
-    { 2688,  0, -1 }, { 2720,  0, -1 }, { 2752,  0, -1 }, {    0,  4, 10 },
-    { 2784,  0, -1 }, {    0,  5, 10 }, {    0,  6, 10 }, { 2816,  0, -1 },
-    { 2848,  0, -1 }, { 2880,  0, -1 }, { 2912,  0, -1 }, { 2944,  0, -1 },
-    { 2976,  0, -1 }, { 3008,  0, -1 }, { 3040,  0, -1 }, { 3072,  0, -1 },
-    { 3104,  0, -1 }, { 3136,  0, -1 }, { 3168,  0, -1 }, { 3200,  0, -1 },
-    RPT_4   (   0,  0, 13 ), RPT_2   (   1,  0, 14 ),
-    RPT_2   (  -1,  0, 14 ), RPT_2   (   2,  0, 14 ),
-    RPT_2   (  -2,  0, 14 ), RPT_2   (   3,  0, 14 ),
-    RPT_2   (  -3,  0, 14 ), RPT_2   (   4,  0, 14 ),
-    RPT_2   (  -4,  0, 14 ), RPT_2   (   5,  0, 14 ),
-    RPT_2   (  -5,  0, 14 ), RPT_2   (   6,  0, 14 ),
-    RPT_2   (  -6,  0, 14 ), RPT_2   (   7,  0, 14 ),
-    RPT_2   (  -7,  0, 14 ), RPT_2   (   8,  0, 14 ),
-    RPT_2   (  -8,  0, 14 ), RPT_2   (   9,  0, 14 ),
-    RPT_2   (  -9,  0, 14 ), RPT_2   (  10,  0, 14 ),
-    RPT_2   ( -10,  0, 14 ), RPT_2   (  11,  0, 14 ),
-    RPT_2   ( -11,  0, 14 ), RPT_2   (  12,  0, 14 ),
-    RPT_2   ( -12,  0, 14 ), RPT_2   (  13,  0, 14 ),
-    RPT_2   ( -13,  0, 14 ), RPT_2   (  14,  0, 14 ),
-    RPT_2   ( -14,  0, 14 ), RPT_2   (  15,  0, 14 ),
-    RPT_2   ( -15,  0, 14 ), RPT_2   (  16,  0, 14 ),
-    RPT_2   ( -16,  0, 14 ), RPT_2   (  17,  0, 14 ),
-    RPT_2   ( -17,  0, 14 ), RPT_2   (  18,  0, 14 ),
-    RPT_2   ( -18,  0, 14 ), RPT_2   (  19,  0, 14 ),
-    RPT_2   ( -19,  0, 14 ), RPT_2   (  20,  0, 14 ),
-    RPT_2   ( -20,  0, 14 ), RPT_2   (  21,  0, 14 ),
-    RPT_2   ( -21,  0, 14 ), RPT_2   (  22,  0, 14 ),
-    RPT_2   ( -22,  0, 14 ), RPT_2   (  23,  0, 14 ),
-    RPT_2   ( -23,  0, 14 ), RPT_2   (  24,  0, 14 ),
-    RPT_2   ( -24,  0, 14 ), RPT_2   (  25,  0, 14 ),
-    RPT_2   ( -25,  0, 14 ), RPT_2   (  26,  0, 14 ),
-    RPT_2   ( -26,  0, 14 ), RPT_2   (  27,  0, 14 ),
-    RPT_2   ( -27,  0, 14 ), RPT_2   (  28,  0, 14 ),
-    RPT_2   ( -28,  0, 14 ), RPT_2   (  29,  0, 14 ),
-    RPT_2   ( -29,  0, 14 ), RPT_2   (  30,  0, 14 ),
-    RPT_2   ( -30,  0, 14 ), RPT_2   (  31,  0, 14 ),
-    RPT_2   ( -31,  0, 14 ), RPT_2   (  32,  0, 14 ),
-    RPT_2   ( -32,  0, 14 ), RPT_2   (  33,  0, 14 ),
-    RPT_2   ( -33,  0, 14 ), RPT_2   (  34,  0, 14 ),
-    RPT_2   ( -34,  0, 14 ), RPT_2   (  35,  0, 14 ),
-    RPT_2   ( -35,  0, 14 ), RPT_2   (  36,  0, 14 ),
-    RPT_2   ( -36,  0, 14 ), RPT_2   (  37,  0, 14 ),
-    RPT_2   ( -37,  0, 14 ), RPT_2   (  38,  0, 14 ),
-    RPT_2   ( -38,  0, 14 ), RPT_2   (  39,  0, 14 ),
-    RPT_2   ( -39,  0, 14 ), RPT_2   (  40,  0, 14 ),
-    RPT_2   ( -40,  0, 14 ), RPT_2   (  41,  0, 14 ),
-    RPT_2   ( -41,  0, 14 ), RPT_2   (  42,  0, 14 ),
-    RPT_2   ( -42,  0, 14 ), RPT_2   (  43,  0, 14 ),
-    RPT_2   ( -43,  0, 14 ), RPT_2   (  44,  0, 14 ),
-    RPT_2   ( -44,  0, 14 ), RPT_2   (  45,  0, 14 ),
-    RPT_2   ( -45,  0, 14 ), RPT_2   (  46,  0, 14 ),
-    RPT_2   ( -46,  0, 14 ), RPT_2   (  47,  0, 14 ),
-    RPT_2   ( -47,  0, 14 ), RPT_2   (  48,  0, 14 ),
-    RPT_2   ( -48,  0, 14 ), RPT_2   (  49,  0, 14 ),
-    RPT_2   ( -49,  0, 14 ), RPT_2   (  50,  0, 14 ),
-    RPT_2   ( -50,  0, 14 ), RPT_2   (  51,  0, 14 ),
-    RPT_2   ( -51,  0, 14 ), RPT_2   (  52,  0, 14 ),
-    RPT_2   ( -52,  0, 14 ), RPT_2   (  53,  0, 14 ),
-    RPT_2   ( -53,  0, 14 ), RPT_2   (  54,  0, 14 ),
-    RPT_2   ( -54,  0, 14 ), RPT_2   (  55,  0, 14 ),
-    RPT_2   ( -55,  0, 14 ), RPT_2   (  56,  0, 14 ),
-    RPT_2   ( -56,  0, 14 ), RPT_2   (  57,  0, 14 ),
-    RPT_2   ( -57,  0, 14 ), RPT_2   (  58,  0, 14 ),
-    RPT_2   ( -58,  0, 14 ), RPT_2   (  59,  0, 14 ),
-    RPT_2   ( -59,  0, 14 ), RPT_2   (  60,  0, 14 ),
-    RPT_2   ( -60,  0, 14 ), RPT_2   (  61,  0, 14 ),
-    RPT_2   ( -61,  0, 14 ), RPT_2   (  62,  0, 14 ),
-    RPT_2   ( -62,  0, 14 ), RPT_2   (  63,  0, 14 ),
-    RPT_2   ( -63,  0, 14 ), RPT_2   (  64,  0, 14 ),
-    RPT_2   ( -64,  0, 14 ), RPT_2   (  65,  0, 14 ),
-    RPT_2   ( -65,  0, 14 ), RPT_2   (  66,  0, 14 ),
-    RPT_2   ( -66,  0, 14 ), RPT_2   (  67,  0, 14 ),
-    RPT_2   ( -67,  0, 14 ), RPT_2   (  68,  0, 14 ),
-    RPT_2   ( -68,  0, 14 ), RPT_2   (  69,  0, 14 ),
-    RPT_2   ( -69,  0, 14 ), RPT_2   (  70,  0, 14 ),
-    RPT_2   ( -70,  0, 14 ), RPT_2   (  71,  0, 14 ),
-    RPT_2   ( -71,  0, 14 ), RPT_2   (  72,  0, 14 ),
-    RPT_2   ( -72,  0, 14 ), RPT_2   (  73,  0, 14 ),
-    RPT_2   ( -73,  0, 14 ), RPT_2   (  74,  0, 14 ),
-    RPT_2   ( -74,  0, 14 ), RPT_2   (  75,  0, 14 ),
-    RPT_2   ( -75,  0, 14 ), RPT_2   (  76,  0, 14 ),
-    RPT_2   ( -76,  0, 14 ), RPT_2   (  77,  0, 14 ),
-    RPT_2   ( -77,  0, 14 ), RPT_2   (  78,  0, 14 ),
-    RPT_2   ( -78,  0, 14 ), RPT_2   (  79,  0, 14 ),
-    RPT_2   ( -79,  0, 14 ), RPT_2   (  80,  0, 14 ),
-    RPT_2   ( -80,  0, 14 ), RPT_2   (  81,  0, 14 ),
-    RPT_2   ( -81,  0, 14 ), RPT_2   (  82,  0, 14 ),
-    RPT_2   ( -82,  0, 14 ), RPT_2   (  83,  0, 14 ),
-    RPT_2   ( -83,  0, 14 ), RPT_2   (  84,  0, 14 ),
-    RPT_2   ( -84,  0, 14 ), RPT_2   (  85,  0, 14 ),
-    RPT_2   ( -85,  0, 14 ), RPT_2   (  86,  0, 14 ),
-    RPT_2   ( -86,  0, 14 ), RPT_2   (  87,  0, 14 ),
-    RPT_2   ( -87,  0, 14 ), RPT_2   (  88,  0, 14 ),
-    RPT_2   ( -88,  0, 14 ), RPT_2   (  89,  0, 14 ),
-    RPT_2   ( -89,  0, 14 ), RPT_2   (  90,  0, 14 ),
-    RPT_2   ( -90,  0, 14 ), RPT_2   (  91,  0, 14 ),
-    RPT_2   ( -91,  0, 14 ), RPT_2   (  92,  0, 14 ),
-    RPT_2   ( -92,  0, 14 ), RPT_2   (  93,  0, 14 ),
-    RPT_2   ( -93,  0, 14 ), RPT_2   (  94,  0, 14 ),
-    RPT_2   ( -94,  0, 14 ), RPT_2   (  95,  0, 14 ),
-    RPT_2   ( -95,  0, 14 ), RPT_2   (  96,  0, 14 ),
-    RPT_2   ( -96,  0, 14 ), RPT_2   (  97,  0, 14 ),
-    RPT_2   ( -97,  0, 14 ), RPT_2   (  98,  0, 14 ),
-    RPT_2   ( -98,  0, 14 ), RPT_2   (  99,  0, 14 ),
-    RPT_2   ( -99,  0, 14 ), RPT_2   ( 100,  0, 14 ),
-    RPT_2   (-100,  0, 14 ), RPT_2   ( 101,  0, 14 ),
-    RPT_2   (-101,  0, 14 ), RPT_2   ( 102,  0, 14 ),
-    RPT_2   (-102,  0, 14 ), RPT_2   ( 103,  0, 14 ),
-    RPT_2   (-103,  0, 14 ), RPT_2   ( 104,  0, 14 ),
-    RPT_2   (-104,  0, 14 ), RPT_2   ( 105,  0, 14 ),
-    RPT_2   (-105,  0, 14 ), RPT_2   ( 106,  0, 14 ),
-    RPT_2   (-106,  0, 14 ), RPT_2   ( 107,  0, 14 ),
-    RPT_2   (-107,  0, 14 ), RPT_2   ( 108,  0, 14 ),
-    RPT_2   (-108,  0, 14 ), RPT_2   ( 109,  0, 14 ),
-    RPT_2   (-109,  0, 14 ), RPT_2   ( 110,  0, 14 ),
-    RPT_2   (-110,  0, 14 ), RPT_2   ( 111,  0, 14 ),
-    RPT_2   (-111,  0, 14 ), RPT_2   ( 112,  0, 14 ),
-    RPT_2   (-112,  0, 14 ), RPT_2   ( 113,  0, 14 ),
-    RPT_2   (-113,  0, 14 ), RPT_2   ( 114,  0, 14 ),
-    RPT_2   (-114,  0, 14 ), RPT_2   ( 115,  0, 14 ),
-    RPT_2   (-115,  0, 14 ), RPT_2   ( 116,  0, 14 ),
-    RPT_2   (-116,  0, 14 ), RPT_2   ( 117,  0, 14 ),
-    RPT_2   (-117,  0, 14 ), RPT_2   ( 118,  0, 14 ),
-    RPT_2   (-118,  0, 14 ), RPT_2   ( 119,  0, 14 ),
-    RPT_2   (-119,  0, 14 ), RPT_2   ( 120,  0, 14 ),
-    RPT_2   (-120,  0, 14 ), RPT_2   ( 121,  0, 14 ),
-    RPT_2   (-121,  0, 14 ), RPT_2   ( 122,  0, 14 ),
-    RPT_2   (-122,  0, 14 ), RPT_2   ( 123,  0, 14 ),
-    RPT_2   (-123,  0, 14 ), RPT_2   ( 124,  0, 14 ),
-    RPT_2   (-124,  0, 14 ), RPT_2   ( 125,  0, 14 ),
-    RPT_2   (-125,  0, 14 ), RPT_2   ( 126,  0, 14 ),
-    RPT_2   (-126,  0, 14 ), RPT_2   ( 127,  0, 14 ),
-    RPT_2   (-127,  0, 14 ), RPT_2   ( 128,  0, 14 ),
-    RPT_2   (-128,  0, 14 ), RPT_2   ( 129,  0, 14 ),
-    RPT_2   (-129,  0, 14 ), RPT_2   ( 130,  0, 14 ),
-    RPT_2   (-130,  0, 14 ), RPT_2   ( 131,  0, 14 ),
-    RPT_2   (-131,  0, 14 ), RPT_2   ( 132,  0, 14 ),
-    RPT_2   (-132,  0, 14 ), RPT_2   ( 133,  0, 14 ),
-    RPT_2   (-133,  0, 14 ), RPT_2   ( 134,  0, 14 ),
-    RPT_2   (-134,  0, 14 ), RPT_2   ( 135,  0, 14 ),
-    RPT_2   (-135,  0, 14 ), RPT_2   ( 136,  0, 14 ),
-    RPT_2   (-136,  0, 14 ), RPT_2   ( 137,  0, 14 ),
-    RPT_2   (-137,  0, 14 ), RPT_2   ( 138,  0, 14 ),
-    RPT_2   (-138,  0, 14 ), RPT_2   ( 139,  0, 14 ),
-    RPT_2   (-139,  0, 14 ), RPT_2   ( 140,  0, 14 ),
-    RPT_2   (-140,  0, 14 ), RPT_2   ( 141,  0, 14 ),
-    RPT_2   (-141,  0, 14 ), RPT_2   ( 142,  0, 14 ),
-    RPT_2   (-142,  0, 14 ), RPT_2   ( 143,  0, 14 ),
-    RPT_2   (-143,  0, 14 ), RPT_2   ( 144,  0, 14 ),
-    RPT_2   (-144,  0, 14 ), RPT_2   ( 145,  0, 14 ),
-    RPT_2   (-145,  0, 14 ), RPT_2   ( 146,  0, 14 ),
-    RPT_2   (-146,  0, 14 ), RPT_2   ( 147,  0, 14 ),
-    RPT_2   (-147,  0, 14 ), RPT_2   ( 148,  0, 14 ),
-    RPT_2   (-148,  0, 14 ), RPT_2   ( 149,  0, 14 ),
-    RPT_2   (-149,  0, 14 ), RPT_2   ( 150,  0, 14 ),
-    RPT_2   (-150,  0, 14 ), RPT_2   ( 151,  0, 14 ),
-    RPT_2   (-151,  0, 14 ), RPT_2   ( 152,  0, 14 ),
-    RPT_2   (-152,  0, 14 ), RPT_2   ( 153,  0, 14 ),
-    RPT_2   (-153,  0, 14 ), RPT_2   ( 154,  0, 14 ),
-    RPT_2   (-154,  0, 14 ), RPT_2   ( 155,  0, 14 ),
-    RPT_2   (-155,  0, 14 ), RPT_2   ( 156,  0, 14 ),
-    RPT_2   (-156,  0, 14 ), RPT_2   ( 157,  0, 14 ),
-    RPT_2   (-157,  0, 14 ), RPT_2   ( 158,  0, 14 ),
-    RPT_2   (-158,  0, 14 ), RPT_2   ( 159,  0, 14 ),
-    RPT_2   (-159,  0, 14 ), RPT_2   ( 160,  0, 14 ),
-    RPT_2   (-160,  0, 14 ), RPT_2   ( 161,  0, 14 ),
-    RPT_2   (-161,  0, 14 ), RPT_2   ( 162,  0, 14 ),
-    RPT_2   (-162,  0, 14 ), RPT_2   ( 163,  0, 14 ),
-    RPT_2   (-163,  0, 14 ), RPT_2   ( 164,  0, 14 ),
-    RPT_2   (-164,  0, 14 ), RPT_2   ( 165,  0, 14 ),
-    RPT_2   (-165,  0, 14 ), RPT_2   ( 166,  0, 14 ),
-    RPT_2   (-166,  0, 14 ), RPT_2   ( 167,  0, 14 ),
-    RPT_2   (-167,  0, 14 ), RPT_2   ( 168,  0, 14 ),
-    RPT_2   (-168,  0, 14 ), RPT_2   ( 169,  0, 14 ),
-    RPT_2   (-169,  0, 14 ), RPT_2   ( 170,  0, 14 ),
-    RPT_2   (-170,  0, 14 ), RPT_2   ( 171,  0, 14 ),
-    RPT_2   (-171,  0, 14 ), RPT_2   ( 172,  0, 14 ),
-    RPT_2   (-172,  0, 14 ), RPT_2   ( 173,  0, 14 ),
-    RPT_2   (-173,  0, 14 ), RPT_2   ( 174,  0, 14 ),
-    RPT_2   (-174,  0, 14 ), RPT_2   ( 175,  0, 14 ),
-    RPT_2   (-175,  0, 14 ), RPT_2   ( 176,  0, 14 ),
-    RPT_2   (-176,  0, 14 ), RPT_2   ( 177,  0, 14 ),
-    RPT_2   (-177,  0, 14 ), RPT_2   ( 178,  0, 14 ),
-    RPT_2   (-178,  0, 14 ), RPT_2   ( 179,  0, 14 ),
-    RPT_2   (-179,  0, 14 ), RPT_2   ( 180,  0, 14 ),
-    RPT_2   (-180,  0, 14 ), RPT_2   ( 181,  0, 14 ),
-    RPT_2   (-181,  0, 14 ), RPT_2   ( 182,  0, 14 ),
-    RPT_2   (-182,  0, 14 ), RPT_2   ( 183,  0, 14 ),
-    RPT_2   (-183,  0, 14 ), RPT_2   ( 184,  0, 14 ),
-    RPT_2   (-184,  0, 14 ), RPT_2   ( 185,  0, 14 ),
-    RPT_2   (-185,  0, 14 ), RPT_2   ( 186,  0, 14 ),
-    RPT_2   (-186,  0, 14 ), RPT_2   ( 187,  0, 14 ),
-    RPT_2   (-187,  0, 14 ), RPT_2   ( 188,  0, 14 ),
-    RPT_2   (-188,  0, 14 ), RPT_2   ( 189,  0, 14 ),
-    RPT_2   (-189,  0, 14 ), RPT_2   ( 190,  0, 14 ),
-    RPT_2   (-190,  0, 14 ), RPT_2   ( 191,  0, 14 ),
-    RPT_2   (-191,  0, 14 ), RPT_2   ( 192,  0, 14 ),
-    RPT_2   (-192,  0, 14 ), RPT_2   ( 193,  0, 14 ),
-    RPT_2   (-193,  0, 14 ), RPT_2   ( 194,  0, 14 ),
-    RPT_2   (-194,  0, 14 ), RPT_2   ( 195,  0, 14 ),
-    RPT_2   (-195,  0, 14 ), RPT_2   ( 196,  0, 14 ),
-    RPT_2   (-196,  0, 14 ), RPT_2   ( 197,  0, 14 ),
-    RPT_2   (-197,  0, 14 ), RPT_2   ( 198,  0, 14 ),
-    RPT_2   (-198,  0, 14 ), RPT_2   ( 199,  0, 14 ),
-    RPT_2   (-199,  0, 14 ), RPT_2   ( 200,  0, 14 ),
-    RPT_2   (-200,  0, 14 ), RPT_2   ( 201,  0, 14 ),
-    RPT_2   (-201,  0, 14 ), RPT_2   ( 202,  0, 14 ),
-    RPT_2   (-202,  0, 14 ), RPT_2   ( 203,  0, 14 ),
-    RPT_2   (-203,  0, 14 ), RPT_2   ( 204,  0, 14 ),
-    RPT_2   (-204,  0, 14 ), RPT_2   ( 205,  0, 14 ),
-    RPT_2   (-205,  0, 14 ), RPT_2   ( 206,  0, 14 ),
-    RPT_2   (-206,  0, 14 ), RPT_2   ( 207,  0, 14 ),
-    RPT_2   (-207,  0, 14 ), RPT_2   ( 208,  0, 14 ),
-    RPT_2   (-208,  0, 14 ), RPT_2   ( 209,  0, 14 ),
-    RPT_2   (-209,  0, 14 ), RPT_2   ( 210,  0, 14 ),
-    RPT_2   (-210,  0, 14 ), RPT_2   ( 211,  0, 14 ),
-    RPT_2   (-211,  0, 14 ), RPT_2   ( 212,  0, 14 ),
-    RPT_2   (-212,  0, 14 ), RPT_2   ( 213,  0, 14 ),
-    RPT_2   (-213,  0, 14 ), RPT_2   ( 214,  0, 14 ),
-    RPT_2   (-214,  0, 14 ), RPT_2   ( 215,  0, 14 ),
-    RPT_2   (-215,  0, 14 ), RPT_2   ( 216,  0, 14 ),
-    RPT_2   (-216,  0, 14 ), RPT_2   ( 217,  0, 14 ),
-    RPT_2   (-217,  0, 14 ), RPT_2   ( 218,  0, 14 ),
-    RPT_2   (-218,  0, 14 ), RPT_2   ( 219,  0, 14 ),
-    RPT_2   (-219,  0, 14 ), RPT_2   ( 220,  0, 14 ),
-    RPT_2   (-220,  0, 14 ), RPT_2   ( 221,  0, 14 ),
-    RPT_2   (-221,  0, 14 ), RPT_2   ( 222,  0, 14 ),
-    RPT_2   (-222,  0, 14 ), RPT_2   ( 223,  0, 14 ),
-    RPT_2   (-223,  0, 14 ), RPT_2   ( 224,  0, 14 ),
-    RPT_2   (-224,  0, 14 ), RPT_2   ( 225,  0, 14 ),
-    RPT_2   (-225,  0, 14 ), RPT_2   ( 226,  0, 14 ),
-    RPT_2   (-226,  0, 14 ), RPT_2   ( 227,  0, 14 ),
-    RPT_2   (-227,  0, 14 ), RPT_2   ( 228,  0, 14 ),
-    RPT_2   (-228,  0, 14 ), RPT_2   ( 229,  0, 14 ),
-    RPT_2   (-229,  0, 14 ), RPT_2   ( 230,  0, 14 ),
-    RPT_2   (-230,  0, 14 ), RPT_2   ( 231,  0, 14 ),
-    RPT_2   (-231,  0, 14 ), RPT_2   ( 232,  0, 14 ),
-    RPT_2   (-232,  0, 14 ), RPT_2   ( 233,  0, 14 ),
-    RPT_2   (-233,  0, 14 ), RPT_2   ( 234,  0, 14 ),
-    RPT_2   (-234,  0, 14 ), RPT_2   ( 235,  0, 14 ),
-    RPT_2   (-235,  0, 14 ), RPT_2   ( 236,  0, 14 ),
-    RPT_2   (-236,  0, 14 ), RPT_2   ( 237,  0, 14 ),
-    RPT_2   (-237,  0, 14 ), RPT_2   ( 238,  0, 14 ),
-    RPT_2   (-238,  0, 14 ), RPT_2   ( 239,  0, 14 ),
-    RPT_2   (-239,  0, 14 ), RPT_2   ( 240,  0, 14 ),
-    RPT_2   (-240,  0, 14 ), RPT_2   ( 241,  0, 14 ),
-    RPT_2   (-241,  0, 14 ), RPT_2   ( 242,  0, 14 ),
-    RPT_2   (-242,  0, 14 ), RPT_2   ( 243,  0, 14 ),
-    RPT_2   (-243,  0, 14 ), RPT_2   ( 244,  0, 14 ),
-    RPT_2   (-244,  0, 14 ), RPT_2   ( 245,  0, 14 ),
-    RPT_2   (-245,  0, 14 ), RPT_2   ( 246,  0, 14 ),
-    RPT_2   (-246,  0, 14 ), RPT_2   ( 247,  0, 14 ),
-    RPT_2   (-247,  0, 14 ), RPT_2   ( 248,  0, 14 ),
-    RPT_2   (-248,  0, 14 ), RPT_2   ( 249,  0, 14 ),
-    RPT_2   (-249,  0, 14 ), RPT_2   ( 250,  0, 14 ),
-    RPT_2   (-250,  0, 14 ), RPT_2   ( 251,  0, 14 ),
-    RPT_2   (-251,  0, 14 ), RPT_2   ( 252,  0, 14 ),
-    RPT_2   (-252,  0, 14 ), RPT_2   ( 253,  0, 14 ),
-    RPT_2   (-253,  0, 14 ), RPT_2   ( 254,  0, 14 ),
-    RPT_2   (-254,  0, 14 ), RPT_2   ( 255,  0, 14 ),
-    RPT_2   (-255,  0, 14 ), {    0,  0, 15 }, {    0,  1, 15 },
-    {    0,  2, 15 }, {    0,  3, 15 }, {    0,  4, 15 }, {    0,  5, 15 },
-    {    0,  6, 15 }, {    0,  7, 15 }, {    0,  8, 15 }, {    0,  9, 15 },
-    {    0, 10, 15 }, {    0, 11, 15 }, {    0, 12, 15 }, {    0, 13, 15 },
-    {    0, 14, 15 }, {    0, 15, 15 }, {    0, 16, 15 }, {    0, 17, 15 },
-    {    0, 18, 15 }, {    0, 19, 15 }, {    0, 20, 15 }, {    0, 21, 15 },
-    {    0, 22, 15 }, {    0, 23, 15 }, {    0, 24, 15 }, {    0, 25, 15 },
-    {    0, 26, 15 }, {    0, 27, 15 }, {    0, 28, 15 }, {    0, 29, 15 },
-    {    0, 30, 15 }, {    0, 31, 15 }, {    0, 32, 15 }, {    0, 33, 15 },
-    {    0, 34, 15 }, {    0, 35, 15 }, {    0, 36, 15 }, {    0, 37, 15 },
-    {    0, 38, 15 }, {    0, 39, 15 }, {    0, 40, 15 }, {    0, 41, 15 },
-    {    0, 42, 15 }, {    0, 43, 15 }, {    0, 44, 15 }, {    0, 45, 15 },
-    {    0, 46, 15 }, {    0, 47, 15 }, {    0, 48, 15 }, {    0, 49, 15 },
-    {    0, 50, 15 }, {    0, 51, 15 }, {    0, 52, 15 }, {    0, 53, 15 },
-    {    0, 54, 15 }, {    0, 55, 15 }, {    0, 56, 15 }, {    0, 57, 15 },
-    {    0, 58, 15 }, {    0, 59, 15 }, {    0, 60, 15 }, {    0, 61, 15 },
-    {    0, 62, 15 }, {    0, 63, 15 }, RPT_16  (  51,  0, 11 ),
-    RPT_16  ( -51,  0, 11 ), RPT_16  (  52,  0, 11 ),
-    RPT_16  ( -52,  0, 11 ), RPT_16  (  53,  0, 11 ),
-    RPT_16  ( -53,  0, 11 ), RPT_16  (  54,  0, 11 ),
-    RPT_16  ( -54,  0, 11 ), RPT_16  (  55,  0, 11 ),
-    RPT_16  ( -55,  0, 11 ), RPT_16  (  56,  0, 11 ),
-    RPT_16  ( -56,  0, 11 ), RPT_16  (  57,  0, 11 ),
-    RPT_16  ( -57,  0, 11 ), RPT_16  (  58,  0, 11 ),
-    RPT_16  ( -58,  0, 11 ), RPT_16  (  59,  0, 11 ),
-    RPT_16  ( -59,  0, 11 ), RPT_16  (  60,  0, 11 ),
-    RPT_16  ( -60,  0, 11 ), RPT_16  (  61,  0, 11 ),
-    RPT_16  ( -61,  0, 11 ), RPT_16  (  62,  0, 11 ),
-    RPT_16  ( -62,  0, 11 ), RPT_16  (  63,  0, 11 ),
-    RPT_16  ( -63,  0, 11 ), RPT_16  (  11,  1, 11 ),
-    RPT_16  ( -11,  1, 11 ), RPT_16  (  12,  1, 11 ),
-    RPT_16  ( -12,  1, 11 ), RPT_16  (  13,  1, 11 ),
-    RPT_16  ( -13,  1, 11 ), RPT_16  (  14,  1, 11 ),
-    RPT_16  ( -14,  1, 11 ), RPT_16  (   4,  2, 11 ),
-    RPT_16  (  -4,  2, 11 ), RPT_16  (   5,  2, 11 ),
-    RPT_16  (  -5,  2, 11 ), RPT_16  (   6,  2, 11 ),
-    RPT_16  (  -6,  2, 11 ), RPT_16  (   3,  3, 11 ),
-    RPT_16  (  -3,  3, 11 ), RPT_16  (   2,  4, 11 ),
-    RPT_16  (  -2,  4, 11 ), RPT_16  (   1,  9, 11 ),
-    RPT_16  (  -1,  9, 11 ), RPT_16  (   1, 10, 11 ),
-    RPT_16  (  -1, 10, 11 ), RPT_8   (  15,  1, 12 ),
-    RPT_8   ( -15,  1, 12 ), RPT_8   (  16,  1, 12 ),
-    RPT_8   ( -16,  1, 12 ), RPT_8   (  17,  1, 12 ),
-    RPT_8   ( -17,  1, 12 ), RPT_8   (  18,  1, 12 ),
-    RPT_8   ( -18,  1, 12 ), RPT_8   (   7,  2, 12 ),
-    RPT_8   (  -7,  2, 12 ), RPT_8   (   8,  2, 12 ),
-    RPT_8   (  -8,  2, 12 ), RPT_8   (   9,  2, 12 ),
-    RPT_8   (  -9,  2, 12 ), RPT_8   (  10,  2, 12 ),
-    RPT_8   ( -10,  2, 12 ), RPT_8   (   4,  3, 12 ),
-    RPT_8   (  -4,  3, 12 ), RPT_8   (   5,  3, 12 ),
-    RPT_8   (  -5,  3, 12 ), RPT_8   (   6,  3, 12 ),
-    RPT_8   (  -6,  3, 12 ), RPT_8   (   2,  5, 12 ),
-    RPT_8   (  -2,  5, 12 ), RPT_16  (   0,  7, 11 ),
-    RPT_16  (   0,  8, 11 ), RPT_16  (   0,  9, 11 ),
-    RPT_16  (   0, 10, 11 ), RPT_8   (   1, 11, 12 ),
-    RPT_8   (  -1, 11, 12 ), RPT_8   (   1, 12, 12 ),
-    RPT_8   (  -1, 12, 12 ), RPT_8   (   1, 13, 12 ),
-    RPT_8   (  -1, 13, 12 ), RPT_8   (   1, 14, 12 ),
-    RPT_8   (  -1, 14, 12 ), RPT_4   (  19,  1, 13 ),
-    RPT_4   ( -19,  1, 13 ), RPT_4   (  20,  1, 13 ),
-    RPT_4   ( -20,  1, 13 ), RPT_4   (   3,  4, 13 ),
-    RPT_4   (  -3,  4, 13 ), RPT_4   (   2,  6, 13 ),
-    RPT_4   (  -2,  6, 13 ),
+HQXAC ff_hqx_ac[NUM_HQX_AC] = {
+    { 10 }, { 11 }, { 11 }, { 11 }, { 12 }, { 11 },
 };
 
-static const HQXLUT ac8_lut[] = {
-    RPT_128 (   1,  0,  4 ), RPT_128 (  -1,  0,  4 ),
-    RPT_128 (   2,  0,  4 ), RPT_128 (  -2,  0,  4 ),
-    RPT_64  (   3,  0,  5 ), RPT_64  (  -3,  0,  5 ),
-    RPT_64  (   4,  0,  5 ), RPT_64  (  -4,  0,  5 ),
-    RPT_128 (   0, 64,  4 ), RPT_32  (   5,  0,  6 ),
-    RPT_32  (  -5,  0,  6 ), RPT_32  (   6,  0,  6 ),
-    RPT_32  (  -6,  0,  6 ), RPT_32  (   7,  0,  6 ),
-    RPT_32  (  -7,  0,  6 ), RPT_32  (   8,  0,  6 ),
-    RPT_32  (  -8,  0,  6 ), RPT_32  (   1,  1,  6 ),
-    RPT_32  (  -1,  1,  6 ), RPT_32  (   2,  1,  6 ),
-    RPT_32  (  -2,  1,  6 ), RPT_16  (   9,  0,  7 ),
-    RPT_16  (  -9,  0,  7 ), RPT_16  (  10,  0,  7 ),
-    RPT_16  ( -10,  0,  7 ), RPT_16  (  11,  0,  7 ),
-    RPT_16  ( -11,  0,  7 ), RPT_16  (  12,  0,  7 ),
-    RPT_16  ( -12,  0,  7 ), RPT_16  (   3,  1,  7 ),
-    RPT_16  (  -3,  1,  7 ), RPT_16  (   4,  1,  7 ),
-    RPT_16  (  -4,  1,  7 ), RPT_16  (   1,  2,  7 ),
-    RPT_16  (  -1,  2,  7 ), { 2048,  0, -1 }, { 2112,  0, -1 },
-    { 2176,  0, -1 }, { 2240,  0, -1 }, { 2304,  0, -1 }, { 2368,  0, -1 },
-    { 2432,  0, -1 }, { 2496,  0, -1 }, { 2560,  0, -1 }, { 2624,  0, -1 },
-    { 2688,  0, -1 }, { 2752,  0, -1 }, { 2816,  0, -1 }, { 2880,  0, -1 },
-    { 2944,  0, -1 }, { 3008,  0, -1 }, { 3072,  0, -1 }, { 3136,  0, -1 },
-    { 3200,  0, -1 }, { 3264,  0, -1 }, { 3328,  0, -1 }, { 3392,  0, -1 },
-    { 3456,  0, -1 }, { 3520,  0, -1 }, { 3584,  0, -1 }, { 3648,  0, -1 },
-    { 3712,  0, -1 }, { 3776,  0, -1 }, { 3840,  0, -1 }, { 3904,  0, -1 },
-    { 3968,  0, -1 }, { 4032,  0, -1 }, RPT_8   (  13,  0,  8 ),
-    RPT_8   ( -13,  0,  8 ), RPT_8   (  14,  0,  8 ),
-    RPT_8   ( -14,  0,  8 ), RPT_8   (  15,  0,  8 ),
-    RPT_8   ( -15,  0,  8 ), RPT_8   (  16,  0,  8 ),
-    RPT_8   ( -16,  0,  8 ), RPT_8   (  17,  0,  8 ),
-    RPT_8   ( -17,  0,  8 ), RPT_8   (  18,  0,  8 ),
-    RPT_8   ( -18,  0,  8 ), RPT_8   (   5,  1,  8 ),
-    RPT_8   (  -5,  1,  8 ), RPT_8   (   6,  1,  8 ),
-    RPT_8   (  -6,  1,  8 ), RPT_8   (   2,  2,  8 ),
-    RPT_8   (  -2,  2,  8 ), RPT_8   (   1,  3,  8 ),
-    RPT_8   (  -1,  3,  8 ), RPT_8   (   0,  0,  8 ),
-    RPT_4   (  19,  0,  9 ), RPT_4   ( -19,  0,  9 ),
-    RPT_4   (  20,  0,  9 ), RPT_4   ( -20,  0,  9 ),
-    RPT_4   (  21,  0,  9 ), RPT_4   ( -21,  0,  9 ),
-    RPT_4   (  22,  0,  9 ), RPT_4   ( -22,  0,  9 ),
-    RPT_4   (  23,  0,  9 ), RPT_4   ( -23,  0,  9 ),
-    RPT_4   (  24,  0,  9 ), RPT_4   ( -24,  0,  9 ),
-    RPT_4   (  25,  0,  9 ), RPT_4   ( -25,  0,  9 ),
-    RPT_4   (   7,  1,  9 ), RPT_4   (  -7,  1,  9 ),
-    RPT_4   (   8,  1,  9 ), RPT_4   (  -8,  1,  9 ),
-    RPT_4   (   3,  2,  9 ), RPT_4   (  -3,  2,  9 ),
-    RPT_4   (   2,  3,  9 ), RPT_4   (  -2,  3,  9 ),
-    RPT_4   (   1,  4,  9 ), RPT_4   (  -1,  4,  9 ),
-    RPT_4   (   1,  5,  9 ), RPT_4   (  -1,  5,  9 ),
-    RPT_2   (  26,  0, 10 ), RPT_2   ( -26,  0, 10 ),
-    RPT_2   (  27,  0, 10 ), RPT_2   ( -27,  0, 10 ),
-    RPT_2   (  28,  0, 10 ), RPT_2   ( -28,  0, 10 ),
-    RPT_2   (  29,  0, 10 ), RPT_2   ( -29,  0, 10 ),
-    RPT_2   (  30,  0, 10 ), RPT_2   ( -30,  0, 10 ),
-    RPT_2   (  31,  0, 10 ), RPT_2   ( -31,  0, 10 ),
-    RPT_2   (  32,  0, 10 ), RPT_2   ( -32,  0, 10 ),
-    RPT_2   (  33,  0, 10 ), RPT_2   ( -33,  0, 10 ),
-    RPT_2   (  34,  0, 10 ), RPT_2   ( -34,  0, 10 ),
-    RPT_2   (  35,  0, 10 ), RPT_2   ( -35,  0, 10 ),
-    RPT_2   (  36,  0, 10 ), RPT_2   ( -36,  0, 10 ),
-    RPT_4   (   0,  1,  9 ), RPT_2   (   9,  1, 10 ),
-    RPT_2   (  -9,  1, 10 ), RPT_2   (  10,  1, 10 ),
-    RPT_2   ( -10,  1, 10 ), RPT_2   (  11,  1, 10 ),
-    RPT_2   ( -11,  1, 10 ), RPT_2   (  12,  1, 10 ),
-    RPT_2   ( -12,  1, 10 ), RPT_4   (   0,  2,  9 ),
-    RPT_2   (   4,  2, 10 ), RPT_2   (  -4,  2, 10 ),
-    RPT_2   (   5,  2, 10 ), RPT_2   (  -5,  2, 10 ),
-    RPT_2   (   6,  2, 10 ), RPT_2   (  -6,  2, 10 ),
-    RPT_4   (   0,  3,  9 ), RPT_2   (   3,  3, 10 ),
-    RPT_2   (  -3,  3, 10 ), RPT_2   (   4,  3, 10 ),
-    RPT_2   (  -4,  3, 10 ), RPT_4   (   0,  4,  9 ),
-    RPT_2   (   2,  4, 10 ), RPT_2   (  -2,  4, 10 ),
-    RPT_4   (   0,  5,  9 ), RPT_2   (   1,  6, 10 ),
-    RPT_2   (  -1,  6, 10 ), RPT_2   (   1,  7, 10 ),
-    RPT_2   (  -1,  7, 10 ), RPT_2   (   1,  8, 10 ),
-    RPT_2   (  -1,  8, 10 ), {   37,  0, 11 }, {  -37,  0, 11 },
-    {   38,  0, 11 }, {  -38,  0, 11 }, {   39,  0, 11 }, {  -39,  0, 11 },
-    {   40,  0, 11 }, {  -40,  0, 11 }, {   41,  0, 11 }, {  -41,  0, 11 },
-    {   42,  0, 11 }, {  -42,  0, 11 }, {   43,  0, 11 }, {  -43,  0, 11 },
-    {   44,  0, 11 }, {  -44,  0, 11 }, {   45,  0, 11 }, {  -45,  0, 11 },
-    {   46,  0, 11 }, {  -46,  0, 11 }, {   47,  0, 11 }, {  -47,  0, 11 },
-    {   48,  0, 11 }, {  -48,  0, 11 }, {   13,  1, 11 }, {  -13,  1, 11 },
-    {   14,  1, 11 }, {  -14,  1, 11 }, {   15,  1, 11 }, {  -15,  1, 11 },
-    {   16,  1, 11 }, {  -16,  1, 11 }, {    7,  2, 11 }, {   -7,  2, 11 },
-    {    8,  2, 11 }, {   -8,  2, 11 }, {    5,  3, 11 }, {   -5,  3, 11 },
-    {    6,  3, 11 }, {   -6,  3, 11 }, {    3,  4, 11 }, {   -3,  4, 11 },
-    {    4,  4, 11 }, {   -4,  4, 11 }, {    2,  5, 11 }, {   -2,  5, 11 },
-    RPT_2   (   0,  6, 10 ), {    2,  6, 11 }, {   -2,  6, 11 },
-    RPT_2   (   0,  7, 10 ), RPT_2   (   0,  8, 10 ),
-    RPT_2   (   0,  9, 10 ), {    1,  9, 11 }, {   -1,  9, 11 },
-    {    1, 10, 11 }, {   -1, 10, 11 }, {    1, 11, 11 }, {   -1, 11, 11 },
-    {    1, 12, 11 }, {   -1, 12, 11 }, { 4096,  0, -1 }, { 4160,  0, -1 },
-    { 4224,  0, -1 }, { 4288,  0, -1 }, { 4352,  0, -1 }, { 4416,  0, -1 },
-    { 4480,  0, -1 }, { 4544,  0, -1 }, { 4608,  0, -1 }, { 4672,  0, -1 },
-    { 4736,  0, -1 }, { 4800,  0, -1 }, { 4864,  0, -1 }, { 4928,  0, -1 },
-    { 4992,  0, -1 }, { 5056,  0, -1 }, { 5120,  0, -1 }, { 5184,  0, -1 },
-    { 5248,  0, -1 }, { 5312,  0, -1 }, { 5376,  0, -1 }, { 5440,  0, -1 },
-    { 5504,  0, -1 }, { 5568,  0, -1 }, { 5632,  0, -1 }, { 5696,  0, -1 },
-    { 5760,  0, -1 }, { 5824,  0, -1 }, { 5888,  0, -1 }, { 5952,  0, -1 },
-    { 6016,  0, -1 }, { 6080,  0, -1 }, { 6144,  0, -1 }, { 6208,  0, -1 },
-    { 6272,  0, -1 }, { 6336,  0, -1 }, { 6400,  0, -1 }, { 6464,  0, -1 },
-    { 6528,  0, -1 }, { 6592,  0, -1 }, {    0, 10, 11 }, { 6656,  0, -1 },
-    {    0, 11, 11 }, {    0, 12, 11 }, {    0, 13, 11 }, { 6720,  0, -1 },
-    { 6784,  0, -1 }, { 6848,  0, -1 }, { 6912,  0, -1 }, { 6976,  0, -1 },
-    { 7040,  0, -1 }, { 7104,  0, -1 }, { 7168,  0, -1 }, { 7232,  0, -1 },
-    { 7296,  0, -1 }, { 7360,  0, -1 }, { 7424,  0, -1 }, { 7488,  0, -1 },
-    { 7552,  0, -1 }, { 7616,  0, -1 }, RPT_8   (   0,  0, 14 ),
-    RPT_4   (   1,  0, 15 ), RPT_4   (  -1,  0, 15 ),
-    RPT_4   (   2,  0, 15 ), RPT_4   (  -2,  0, 15 ),
-    RPT_4   (   3,  0, 15 ), RPT_4   (  -3,  0, 15 ),
-    RPT_4   (   4,  0, 15 ), RPT_4   (  -4,  0, 15 ),
-    RPT_4   (   5,  0, 15 ), RPT_4   (  -5,  0, 15 ),
-    RPT_4   (   6,  0, 15 ), RPT_4   (  -6,  0, 15 ),
-    RPT_4   (   7,  0, 15 ), RPT_4   (  -7,  0, 15 ),
-    RPT_4   (   8,  0, 15 ), RPT_4   (  -8,  0, 15 ),
-    RPT_4   (   9,  0, 15 ), RPT_4   (  -9,  0, 15 ),
-    RPT_4   (  10,  0, 15 ), RPT_4   ( -10,  0, 15 ),
-    RPT_4   (  11,  0, 15 ), RPT_4   ( -11,  0, 15 ),
-    RPT_4   (  12,  0, 15 ), RPT_4   ( -12,  0, 15 ),
-    RPT_4   (  13,  0, 15 ), RPT_4   ( -13,  0, 15 ),
-    RPT_4   (  14,  0, 15 ), RPT_4   ( -14,  0, 15 ),
-    RPT_4   (  15,  0, 15 ), RPT_4   ( -15,  0, 15 ),
-    RPT_4   (  16,  0, 15 ), RPT_4   ( -16,  0, 15 ),
-    RPT_4   (  17,  0, 15 ), RPT_4   ( -17,  0, 15 ),
-    RPT_4   (  18,  0, 15 ), RPT_4   ( -18,  0, 15 ),
-    RPT_4   (  19,  0, 15 ), RPT_4   ( -19,  0, 15 ),
-    RPT_4   (  20,  0, 15 ), RPT_4   ( -20,  0, 15 ),
-    RPT_4   (  21,  0, 15 ), RPT_4   ( -21,  0, 15 ),
-    RPT_4   (  22,  0, 15 ), RPT_4   ( -22,  0, 15 ),
-    RPT_4   (  23,  0, 15 ), RPT_4   ( -23,  0, 15 ),
-    RPT_4   (  24,  0, 15 ), RPT_4   ( -24,  0, 15 ),
-    RPT_4   (  25,  0, 15 ), RPT_4   ( -25,  0, 15 ),
-    RPT_4   (  26,  0, 15 ), RPT_4   ( -26,  0, 15 ),
-    RPT_4   (  27,  0, 15 ), RPT_4   ( -27,  0, 15 ),
-    RPT_4   (  28,  0, 15 ), RPT_4   ( -28,  0, 15 ),
-    RPT_4   (  29,  0, 15 ), RPT_4   ( -29,  0, 15 ),
-    RPT_4   (  30,  0, 15 ), RPT_4   ( -30,  0, 15 ),
-    RPT_4   (  31,  0, 15 ), RPT_4   ( -31,  0, 15 ),
-    RPT_4   (  32,  0, 15 ), RPT_4   ( -32,  0, 15 ),
-    RPT_4   (  33,  0, 15 ), RPT_4   ( -33,  0, 15 ),
-    RPT_4   (  34,  0, 15 ), RPT_4   ( -34,  0, 15 ),
-    RPT_4   (  35,  0, 15 ), RPT_4   ( -35,  0, 15 ),
-    RPT_4   (  36,  0, 15 ), RPT_4   ( -36,  0, 15 ),
-    RPT_4   (  37,  0, 15 ), RPT_4   ( -37,  0, 15 ),
-    RPT_4   (  38,  0, 15 ), RPT_4   ( -38,  0, 15 ),
-    RPT_4   (  39,  0, 15 ), RPT_4   ( -39,  0, 15 ),
-    RPT_4   (  40,  0, 15 ), RPT_4   ( -40,  0, 15 ),
-    RPT_4   (  41,  0, 15 ), RPT_4   ( -41,  0, 15 ),
-    RPT_4   (  42,  0, 15 ), RPT_4   ( -42,  0, 15 ),
-    RPT_4   (  43,  0, 15 ), RPT_4   ( -43,  0, 15 ),
-    RPT_4   (  44,  0, 15 ), RPT_4   ( -44,  0, 15 ),
-    RPT_4   (  45,  0, 15 ), RPT_4   ( -45,  0, 15 ),
-    RPT_4   (  46,  0, 15 ), RPT_4   ( -46,  0, 15 ),
-    RPT_4   (  47,  0, 15 ), RPT_4   ( -47,  0, 15 ),
-    RPT_4   (  48,  0, 15 ), RPT_4   ( -48,  0, 15 ),
-    RPT_4   (  49,  0, 15 ), RPT_4   ( -49,  0, 15 ),
-    RPT_4   (  50,  0, 15 ), RPT_4   ( -50,  0, 15 ),
-    RPT_4   (  51,  0, 15 ), RPT_4   ( -51,  0, 15 ),
-    RPT_4   (  52,  0, 15 ), RPT_4   ( -52,  0, 15 ),
-    RPT_4   (  53,  0, 15 ), RPT_4   ( -53,  0, 15 ),
-    RPT_4   (  54,  0, 15 ), RPT_4   ( -54,  0, 15 ),
-    RPT_4   (  55,  0, 15 ), RPT_4   ( -55,  0, 15 ),
-    RPT_4   (  56,  0, 15 ), RPT_4   ( -56,  0, 15 ),
-    RPT_4   (  57,  0, 15 ), RPT_4   ( -57,  0, 15 ),
-    RPT_4   (  58,  0, 15 ), RPT_4   ( -58,  0, 15 ),
-    RPT_4   (  59,  0, 15 ), RPT_4   ( -59,  0, 15 ),
-    RPT_4   (  60,  0, 15 ), RPT_4   ( -60,  0, 15 ),
-    RPT_4   (  61,  0, 15 ), RPT_4   ( -61,  0, 15 ),
-    RPT_4   (  62,  0, 15 ), RPT_4   ( -62,  0, 15 ),
-    RPT_4   (  63,  0, 15 ), RPT_4   ( -63,  0, 15 ),
-    RPT_4   (  64,  0, 15 ), RPT_4   ( -64,  0, 15 ),
-    RPT_4   (  65,  0, 15 ), RPT_4   ( -65,  0, 15 ),
-    RPT_4   (  66,  0, 15 ), RPT_4   ( -66,  0, 15 ),
-    RPT_4   (  67,  0, 15 ), RPT_4   ( -67,  0, 15 ),
-    RPT_4   (  68,  0, 15 ), RPT_4   ( -68,  0, 15 ),
-    RPT_4   (  69,  0, 15 ), RPT_4   ( -69,  0, 15 ),
-    RPT_4   (  70,  0, 15 ), RPT_4   ( -70,  0, 15 ),
-    RPT_4   (  71,  0, 15 ), RPT_4   ( -71,  0, 15 ),
-    RPT_4   (  72,  0, 15 ), RPT_4   ( -72,  0, 15 ),
-    RPT_4   (  73,  0, 15 ), RPT_4   ( -73,  0, 15 ),
-    RPT_4   (  74,  0, 15 ), RPT_4   ( -74,  0, 15 ),
-    RPT_4   (  75,  0, 15 ), RPT_4   ( -75,  0, 15 ),
-    RPT_4   (  76,  0, 15 ), RPT_4   ( -76,  0, 15 ),
-    RPT_4   (  77,  0, 15 ), RPT_4   ( -77,  0, 15 ),
-    RPT_4   (  78,  0, 15 ), RPT_4   ( -78,  0, 15 ),
-    RPT_4   (  79,  0, 15 ), RPT_4   ( -79,  0, 15 ),
-    RPT_4   (  80,  0, 15 ), RPT_4   ( -80,  0, 15 ),
-    RPT_4   (  81,  0, 15 ), RPT_4   ( -81,  0, 15 ),
-    RPT_4   (  82,  0, 15 ), RPT_4   ( -82,  0, 15 ),
-    RPT_4   (  83,  0, 15 ), RPT_4   ( -83,  0, 15 ),
-    RPT_4   (  84,  0, 15 ), RPT_4   ( -84,  0, 15 ),
-    RPT_4   (  85,  0, 15 ), RPT_4   ( -85,  0, 15 ),
-    RPT_4   (  86,  0, 15 ), RPT_4   ( -86,  0, 15 ),
-    RPT_4   (  87,  0, 15 ), RPT_4   ( -87,  0, 15 ),
-    RPT_4   (  88,  0, 15 ), RPT_4   ( -88,  0, 15 ),
-    RPT_4   (  89,  0, 15 ), RPT_4   ( -89,  0, 15 ),
-    RPT_4   (  90,  0, 15 ), RPT_4   ( -90,  0, 15 ),
-    RPT_4   (  91,  0, 15 ), RPT_4   ( -91,  0, 15 ),
-    RPT_4   (  92,  0, 15 ), RPT_4   ( -92,  0, 15 ),
-    RPT_4   (  93,  0, 15 ), RPT_4   ( -93,  0, 15 ),
-    RPT_4   (  94,  0, 15 ), RPT_4   ( -94,  0, 15 ),
-    RPT_4   (  95,  0, 15 ), RPT_4   ( -95,  0, 15 ),
-    RPT_4   (  96,  0, 15 ), RPT_4   ( -96,  0, 15 ),
-    RPT_4   (  97,  0, 15 ), RPT_4   ( -97,  0, 15 ),
-    RPT_4   (  98,  0, 15 ), RPT_4   ( -98,  0, 15 ),
-    RPT_4   (  99,  0, 15 ), RPT_4   ( -99,  0, 15 ),
-    RPT_4   ( 100,  0, 15 ), RPT_4   (-100,  0, 15 ),
-    RPT_4   ( 101,  0, 15 ), RPT_4   (-101,  0, 15 ),
-    RPT_4   ( 102,  0, 15 ), RPT_4   (-102,  0, 15 ),
-    RPT_4   ( 103,  0, 15 ), RPT_4   (-103,  0, 15 ),
-    RPT_4   ( 104,  0, 15 ), RPT_4   (-104,  0, 15 ),
-    RPT_4   ( 105,  0, 15 ), RPT_4   (-105,  0, 15 ),
-    RPT_4   ( 106,  0, 15 ), RPT_4   (-106,  0, 15 ),
-    RPT_4   ( 107,  0, 15 ), RPT_4   (-107,  0, 15 ),
-    RPT_4   ( 108,  0, 15 ), RPT_4   (-108,  0, 15 ),
-    RPT_4   ( 109,  0, 15 ), RPT_4   (-109,  0, 15 ),
-    RPT_4   ( 110,  0, 15 ), RPT_4   (-110,  0, 15 ),
-    RPT_4   ( 111,  0, 15 ), RPT_4   (-111,  0, 15 ),
-    RPT_4   ( 112,  0, 15 ), RPT_4   (-112,  0, 15 ),
-    RPT_4   ( 113,  0, 15 ), RPT_4   (-113,  0, 15 ),
-    RPT_4   ( 114,  0, 15 ), RPT_4   (-114,  0, 15 ),
-    RPT_4   ( 115,  0, 15 ), RPT_4   (-115,  0, 15 ),
-    RPT_4   ( 116,  0, 15 ), RPT_4   (-116,  0, 15 ),
-    RPT_4   ( 117,  0, 15 ), RPT_4   (-117,  0, 15 ),
-    RPT_4   ( 118,  0, 15 ), RPT_4   (-118,  0, 15 ),
-    RPT_4   ( 119,  0, 15 ), RPT_4   (-119,  0, 15 ),
-    RPT_4   ( 120,  0, 15 ), RPT_4   (-120,  0, 15 ),
-    RPT_4   ( 121,  0, 15 ), RPT_4   (-121,  0, 15 ),
-    RPT_4   ( 122,  0, 15 ), RPT_4   (-122,  0, 15 ),
-    RPT_4   ( 123,  0, 15 ), RPT_4   (-123,  0, 15 ),
-    RPT_4   ( 124,  0, 15 ), RPT_4   (-124,  0, 15 ),
-    RPT_4   ( 125,  0, 15 ), RPT_4   (-125,  0, 15 ),
-    RPT_4   ( 126,  0, 15 ), RPT_4   (-126,  0, 15 ),
-    RPT_4   ( 127,  0, 15 ), RPT_4   (-127,  0, 15 ),
-    RPT_4   ( 128,  0, 15 ), RPT_4   (-128,  0, 15 ),
-    RPT_4   ( 129,  0, 15 ), RPT_4   (-129,  0, 15 ),
-    RPT_4   ( 130,  0, 15 ), RPT_4   (-130,  0, 15 ),
-    RPT_4   ( 131,  0, 15 ), RPT_4   (-131,  0, 15 ),
-    RPT_4   ( 132,  0, 15 ), RPT_4   (-132,  0, 15 ),
-    RPT_4   ( 133,  0, 15 ), RPT_4   (-133,  0, 15 ),
-    RPT_4   ( 134,  0, 15 ), RPT_4   (-134,  0, 15 ),
-    RPT_4   ( 135,  0, 15 ), RPT_4   (-135,  0, 15 ),
-    RPT_4   ( 136,  0, 15 ), RPT_4   (-136,  0, 15 ),
-    RPT_4   ( 137,  0, 15 ), RPT_4   (-137,  0, 15 ),
-    RPT_4   ( 138,  0, 15 ), RPT_4   (-138,  0, 15 ),
-    RPT_4   ( 139,  0, 15 ), RPT_4   (-139,  0, 15 ),
-    RPT_4   ( 140,  0, 15 ), RPT_4   (-140,  0, 15 ),
-    RPT_4   ( 141,  0, 15 ), RPT_4   (-141,  0, 15 ),
-    RPT_4   ( 142,  0, 15 ), RPT_4   (-142,  0, 15 ),
-    RPT_4   ( 143,  0, 15 ), RPT_4   (-143,  0, 15 ),
-    RPT_4   ( 144,  0, 15 ), RPT_4   (-144,  0, 15 ),
-    RPT_4   ( 145,  0, 15 ), RPT_4   (-145,  0, 15 ),
-    RPT_4   ( 146,  0, 15 ), RPT_4   (-146,  0, 15 ),
-    RPT_4   ( 147,  0, 15 ), RPT_4   (-147,  0, 15 ),
-    RPT_4   ( 148,  0, 15 ), RPT_4   (-148,  0, 15 ),
-    RPT_4   ( 149,  0, 15 ), RPT_4   (-149,  0, 15 ),
-    RPT_4   ( 150,  0, 15 ), RPT_4   (-150,  0, 15 ),
-    RPT_4   ( 151,  0, 15 ), RPT_4   (-151,  0, 15 ),
-    RPT_4   ( 152,  0, 15 ), RPT_4   (-152,  0, 15 ),
-    RPT_4   ( 153,  0, 15 ), RPT_4   (-153,  0, 15 ),
-    RPT_4   ( 154,  0, 15 ), RPT_4   (-154,  0, 15 ),
-    RPT_4   ( 155,  0, 15 ), RPT_4   (-155,  0, 15 ),
-    RPT_4   ( 156,  0, 15 ), RPT_4   (-156,  0, 15 ),
-    RPT_4   ( 157,  0, 15 ), RPT_4   (-157,  0, 15 ),
-    RPT_4   ( 158,  0, 15 ), RPT_4   (-158,  0, 15 ),
-    RPT_4   ( 159,  0, 15 ), RPT_4   (-159,  0, 15 ),
-    RPT_4   ( 160,  0, 15 ), RPT_4   (-160,  0, 15 ),
-    RPT_4   ( 161,  0, 15 ), RPT_4   (-161,  0, 15 ),
-    RPT_4   ( 162,  0, 15 ), RPT_4   (-162,  0, 15 ),
-    RPT_4   ( 163,  0, 15 ), RPT_4   (-163,  0, 15 ),
-    RPT_4   ( 164,  0, 15 ), RPT_4   (-164,  0, 15 ),
-    RPT_4   ( 165,  0, 15 ), RPT_4   (-165,  0, 15 ),
-    RPT_4   ( 166,  0, 15 ), RPT_4   (-166,  0, 15 ),
-    RPT_4   ( 167,  0, 15 ), RPT_4   (-167,  0, 15 ),
-    RPT_4   ( 168,  0, 15 ), RPT_4   (-168,  0, 15 ),
-    RPT_4   ( 169,  0, 15 ), RPT_4   (-169,  0, 15 ),
-    RPT_4   ( 170,  0, 15 ), RPT_4   (-170,  0, 15 ),
-    RPT_4   ( 171,  0, 15 ), RPT_4   (-171,  0, 15 ),
-    RPT_4   ( 172,  0, 15 ), RPT_4   (-172,  0, 15 ),
-    RPT_4   ( 173,  0, 15 ), RPT_4   (-173,  0, 15 ),
-    RPT_4   ( 174,  0, 15 ), RPT_4   (-174,  0, 15 ),
-    RPT_4   ( 175,  0, 15 ), RPT_4   (-175,  0, 15 ),
-    RPT_4   ( 176,  0, 15 ), RPT_4   (-176,  0, 15 ),
-    RPT_4   ( 177,  0, 15 ), RPT_4   (-177,  0, 15 ),
-    RPT_4   ( 178,  0, 15 ), RPT_4   (-178,  0, 15 ),
-    RPT_4   ( 179,  0, 15 ), RPT_4   (-179,  0, 15 ),
-    RPT_4   ( 180,  0, 15 ), RPT_4   (-180,  0, 15 ),
-    RPT_4   ( 181,  0, 15 ), RPT_4   (-181,  0, 15 ),
-    RPT_4   ( 182,  0, 15 ), RPT_4   (-182,  0, 15 ),
-    RPT_4   ( 183,  0, 15 ), RPT_4   (-183,  0, 15 ),
-    RPT_4   ( 184,  0, 15 ), RPT_4   (-184,  0, 15 ),
-    RPT_4   ( 185,  0, 15 ), RPT_4   (-185,  0, 15 ),
-    RPT_4   ( 186,  0, 15 ), RPT_4   (-186,  0, 15 ),
-    RPT_4   ( 187,  0, 15 ), RPT_4   (-187,  0, 15 ),
-    RPT_4   ( 188,  0, 15 ), RPT_4   (-188,  0, 15 ),
-    RPT_4   ( 189,  0, 15 ), RPT_4   (-189,  0, 15 ),
-    RPT_4   ( 190,  0, 15 ), RPT_4   (-190,  0, 15 ),
-    RPT_4   ( 191,  0, 15 ), RPT_4   (-191,  0, 15 ),
-    RPT_4   ( 192,  0, 15 ), RPT_4   (-192,  0, 15 ),
-    RPT_4   ( 193,  0, 15 ), RPT_4   (-193,  0, 15 ),
-    RPT_4   ( 194,  0, 15 ), RPT_4   (-194,  0, 15 ),
-    RPT_4   ( 195,  0, 15 ), RPT_4   (-195,  0, 15 ),
-    RPT_4   ( 196,  0, 15 ), RPT_4   (-196,  0, 15 ),
-    RPT_4   ( 197,  0, 15 ), RPT_4   (-197,  0, 15 ),
-    RPT_4   ( 198,  0, 15 ), RPT_4   (-198,  0, 15 ),
-    RPT_4   ( 199,  0, 15 ), RPT_4   (-199,  0, 15 ),
-    RPT_4   ( 200,  0, 15 ), RPT_4   (-200,  0, 15 ),
-    RPT_4   ( 201,  0, 15 ), RPT_4   (-201,  0, 15 ),
-    RPT_4   ( 202,  0, 15 ), RPT_4   (-202,  0, 15 ),
-    RPT_4   ( 203,  0, 15 ), RPT_4   (-203,  0, 15 ),
-    RPT_4   ( 204,  0, 15 ), RPT_4   (-204,  0, 15 ),
-    RPT_4   ( 205,  0, 15 ), RPT_4   (-205,  0, 15 ),
-    RPT_4   ( 206,  0, 15 ), RPT_4   (-206,  0, 15 ),
-    RPT_4   ( 207,  0, 15 ), RPT_4   (-207,  0, 15 ),
-    RPT_4   ( 208,  0, 15 ), RPT_4   (-208,  0, 15 ),
-    RPT_4   ( 209,  0, 15 ), RPT_4   (-209,  0, 15 ),
-    RPT_4   ( 210,  0, 15 ), RPT_4   (-210,  0, 15 ),
-    RPT_4   ( 211,  0, 15 ), RPT_4   (-211,  0, 15 ),
-    RPT_4   ( 212,  0, 15 ), RPT_4   (-212,  0, 15 ),
-    RPT_4   ( 213,  0, 15 ), RPT_4   (-213,  0, 15 ),
-    RPT_4   ( 214,  0, 15 ), RPT_4   (-214,  0, 15 ),
-    RPT_4   ( 215,  0, 15 ), RPT_4   (-215,  0, 15 ),
-    RPT_4   ( 216,  0, 15 ), RPT_4   (-216,  0, 15 ),
-    RPT_4   ( 217,  0, 15 ), RPT_4   (-217,  0, 15 ),
-    RPT_4   ( 218,  0, 15 ), RPT_4   (-218,  0, 15 ),
-    RPT_4   ( 219,  0, 15 ), RPT_4   (-219,  0, 15 ),
-    RPT_4   ( 220,  0, 15 ), RPT_4   (-220,  0, 15 ),
-    RPT_4   ( 221,  0, 15 ), RPT_4   (-221,  0, 15 ),
-    RPT_4   ( 222,  0, 15 ), RPT_4   (-222,  0, 15 ),
-    RPT_4   ( 223,  0, 15 ), RPT_4   (-223,  0, 15 ),
-    RPT_4   ( 224,  0, 15 ), RPT_4   (-224,  0, 15 ),
-    RPT_4   ( 225,  0, 15 ), RPT_4   (-225,  0, 15 ),
-    RPT_4   ( 226,  0, 15 ), RPT_4   (-226,  0, 15 ),
-    RPT_4   ( 227,  0, 15 ), RPT_4   (-227,  0, 15 ),
-    RPT_4   ( 228,  0, 15 ), RPT_4   (-228,  0, 15 ),
-    RPT_4   ( 229,  0, 15 ), RPT_4   (-229,  0, 15 ),
-    RPT_4   ( 230,  0, 15 ), RPT_4   (-230,  0, 15 ),
-    RPT_4   ( 231,  0, 15 ), RPT_4   (-231,  0, 15 ),
-    RPT_4   ( 232,  0, 15 ), RPT_4   (-232,  0, 15 ),
-    RPT_4   ( 233,  0, 15 ), RPT_4   (-233,  0, 15 ),
-    RPT_4   ( 234,  0, 15 ), RPT_4   (-234,  0, 15 ),
-    RPT_4   ( 235,  0, 15 ), RPT_4   (-235,  0, 15 ),
-    RPT_4   ( 236,  0, 15 ), RPT_4   (-236,  0, 15 ),
-    RPT_4   ( 237,  0, 15 ), RPT_4   (-237,  0, 15 ),
-    RPT_4   ( 238,  0, 15 ), RPT_4   (-238,  0, 15 ),
-    RPT_4   ( 239,  0, 15 ), RPT_4   (-239,  0, 15 ),
-    RPT_4   ( 240,  0, 15 ), RPT_4   (-240,  0, 15 ),
-    RPT_4   ( 241,  0, 15 ), RPT_4   (-241,  0, 15 ),
-    RPT_4   ( 242,  0, 15 ), RPT_4   (-242,  0, 15 ),
-    RPT_4   ( 243,  0, 15 ), RPT_4   (-243,  0, 15 ),
-    RPT_4   ( 244,  0, 15 ), RPT_4   (-244,  0, 15 ),
-    RPT_4   ( 245,  0, 15 ), RPT_4   (-245,  0, 15 ),
-    RPT_4   ( 246,  0, 15 ), RPT_4   (-246,  0, 15 ),
-    RPT_4   ( 247,  0, 15 ), RPT_4   (-247,  0, 15 ),
-    RPT_4   ( 248,  0, 15 ), RPT_4   (-248,  0, 15 ),
-    RPT_4   ( 249,  0, 15 ), RPT_4   (-249,  0, 15 ),
-    RPT_4   ( 250,  0, 15 ), RPT_4   (-250,  0, 15 ),
-    RPT_4   ( 251,  0, 15 ), RPT_4   (-251,  0, 15 ),
-    RPT_4   ( 252,  0, 15 ), RPT_4   (-252,  0, 15 ),
-    RPT_4   ( 253,  0, 15 ), RPT_4   (-253,  0, 15 ),
-    RPT_4   ( 254,  0, 15 ), RPT_4   (-254,  0, 15 ),
-    RPT_4   ( 255,  0, 15 ), RPT_4   (-255,  0, 15 ),
-    RPT_32  (  49,  0, 12 ), RPT_32  ( -49,  0, 12 ),
-    RPT_32  (  50,  0, 12 ), RPT_32  ( -50,  0, 12 ),
-    RPT_32  (  51,  0, 12 ), RPT_32  ( -51,  0, 12 ),
-    RPT_32  (  52,  0, 12 ), RPT_32  ( -52,  0, 12 ),
-    RPT_32  (  53,  0, 12 ), RPT_32  ( -53,  0, 12 ),
-    RPT_32  (  54,  0, 12 ), RPT_32  ( -54,  0, 12 ),
-    RPT_32  (  55,  0, 12 ), RPT_32  ( -55,  0, 12 ),
-    RPT_32  (  56,  0, 12 ), RPT_32  ( -56,  0, 12 ),
-    RPT_32  (  57,  0, 12 ), RPT_32  ( -57,  0, 12 ),
-    RPT_32  (  58,  0, 12 ), RPT_32  ( -58,  0, 12 ),
-    RPT_32  (  59,  0, 12 ), RPT_32  ( -59,  0, 12 ),
-    RPT_32  (  60,  0, 12 ), RPT_32  ( -60,  0, 12 ),
-    RPT_32  (  61,  0, 12 ), RPT_32  ( -61,  0, 12 ),
-    RPT_32  (  62,  0, 12 ), RPT_32  ( -62,  0, 12 ),
-    RPT_32  (  63,  0, 12 ), RPT_32  ( -63,  0, 12 ),
-    RPT_32  (  17,  1, 12 ), RPT_32  ( -17,  1, 12 ),
-    RPT_32  (  18,  1, 12 ), RPT_32  ( -18,  1, 12 ),
-    RPT_32  (  19,  1, 12 ), RPT_32  ( -19,  1, 12 ),
-    RPT_32  (  20,  1, 12 ), RPT_32  ( -20,  1, 12 ),
-    RPT_32  (  21,  1, 12 ), RPT_32  ( -21,  1, 12 ),
-    RPT_32  (  22,  1, 12 ), RPT_32  ( -22,  1, 12 ),
-    RPT_32  (  23,  1, 12 ), RPT_32  ( -23,  1, 12 ),
-    RPT_32  (  24,  1, 12 ), RPT_32  ( -24,  1, 12 ),
-    RPT_32  (   9,  2, 12 ), RPT_32  (  -9,  2, 12 ),
-    RPT_32  (  10,  2, 12 ), RPT_32  ( -10,  2, 12 ),
-    RPT_32  (  11,  2, 12 ), RPT_32  ( -11,  2, 12 ),
-    RPT_32  (  12,  2, 12 ), RPT_32  ( -12,  2, 12 ),
-    RPT_32  (   7,  3, 12 ), RPT_32  (  -7,  3, 12 ),
-    RPT_32  (   8,  3, 12 ), RPT_32  (  -8,  3, 12 ),
-    RPT_32  (   5,  4, 12 ), RPT_32  (  -5,  4, 12 ),
-    RPT_32  (   6,  4, 12 ), RPT_32  (  -6,  4, 12 ),
-    RPT_32  (   3,  5, 12 ), RPT_32  (  -3,  5, 12 ),
-    RPT_32  (   4,  5, 12 ), RPT_32  (  -4,  5, 12 ),
-    RPT_32  (   5,  5, 12 ), RPT_32  (  -5,  5, 12 ),
-    RPT_32  (   6,  5, 12 ), RPT_32  (  -6,  5, 12 ),
-    RPT_32  (   3,  6, 12 ), RPT_32  (  -3,  6, 12 ),
-    RPT_32  (   4,  6, 12 ), RPT_32  (  -4,  6, 12 ),
-    RPT_32  (   2,  7, 12 ), RPT_32  (  -2,  7, 12 ),
-    RPT_32  (   2,  8, 12 ), RPT_32  (  -2,  8, 12 ),
-    RPT_32  (   2,  9, 12 ), RPT_32  (  -2,  9, 12 ),
-    RPT_32  (   2, 10, 12 ), RPT_32  (  -2, 10, 12 ),
-    RPT_32  (   1, 13, 12 ), RPT_32  (  -1, 13, 12 ),
-    RPT_32  (   1, 14, 12 ), RPT_32  (  -1, 14, 12 ),
-    {    0,  0, 17 }, {    0,  1, 17 }, {    0,  2, 17 }, {    0,  3, 17 },
-    {    0,  4, 17 }, {    0,  5, 17 }, {    0,  6, 17 }, {    0,  7, 17 },
-    {    0,  8, 17 }, {    0,  9, 17 }, {    0, 10, 17 }, {    0, 11, 17 },
-    {    0, 12, 17 }, {    0, 13, 17 }, {    0, 14, 17 }, {    0, 15, 17 },
-    {    0, 16, 17 }, {    0, 17, 17 }, {    0, 18, 17 }, {    0, 19, 17 },
-    {    0, 20, 17 }, {    0, 21, 17 }, {    0, 22, 17 }, {    0, 23, 17 },
-    {    0, 24, 17 }, {    0, 25, 17 }, {    0, 26, 17 }, {    0, 27, 17 },
-    {    0, 28, 17 }, {    0, 29, 17 }, {    0, 30, 17 }, {    0, 31, 17 },
-    {    0, 32, 17 }, {    0, 33, 17 }, {    0, 34, 17 }, {    0, 35, 17 },
-    {    0, 36, 17 }, {    0, 37, 17 }, {    0, 38, 17 }, {    0, 39, 17 },
-    {    0, 40, 17 }, {    0, 41, 17 }, {    0, 42, 17 }, {    0, 43, 17 },
-    {    0, 44, 17 }, {    0, 45, 17 }, {    0, 46, 17 }, {    0, 47, 17 },
-    {    0, 48, 17 }, {    0, 49, 17 }, {    0, 50, 17 }, {    0, 51, 17 },
-    {    0, 52, 17 }, {    0, 53, 17 }, {    0, 54, 17 }, {    0, 55, 17 },
-    {    0, 56, 17 }, {    0, 57, 17 }, {    0, 58, 17 }, {    0, 59, 17 },
-    {    0, 60, 17 }, {    0, 61, 17 }, {    0, 62, 17 }, {    0, 63, 17 },
-    RPT_16  (  25,  1, 13 ), RPT_16  ( -25,  1, 13 ),
-    RPT_16  (  26,  1, 13 ), RPT_16  ( -26,  1, 13 ),
-    RPT_16  (  27,  1, 13 ), RPT_16  ( -27,  1, 13 ),
-    RPT_16  (  28,  1, 13 ), RPT_16  ( -28,  1, 13 ),
-    RPT_16  (  29,  1, 13 ), RPT_16  ( -29,  1, 13 ),
-    RPT_16  (  30,  1, 13 ), RPT_16  ( -30,  1, 13 ),
-    RPT_16  (  31,  1, 13 ), RPT_16  ( -31,  1, 13 ),
-    RPT_16  (  32,  1, 13 ), RPT_16  ( -32,  1, 13 ),
-    RPT_16  (  13,  2, 13 ), RPT_16  ( -13,  2, 13 ),
-    RPT_16  (  14,  2, 13 ), RPT_16  ( -14,  2, 13 ),
-    RPT_16  (  15,  2, 13 ), RPT_16  ( -15,  2, 13 ),
-    RPT_16  (  16,  2, 13 ), RPT_16  ( -16,  2, 13 ),
-    RPT_16  (   9,  3, 13 ), RPT_16  (  -9,  3, 13 ),
-    RPT_16  (  10,  3, 13 ), RPT_16  ( -10,  3, 13 ),
-    RPT_16  (  11,  3, 13 ), RPT_16  ( -11,  3, 13 ),
-    RPT_16  (   7,  4, 13 ), RPT_16  (  -7,  4, 13 ),
-    RPT_16  (   3,  7, 13 ), RPT_16  (  -3,  7, 13 ),
-    RPT_16  (   4,  7, 13 ), RPT_16  (  -4,  7, 13 ),
-    RPT_16  (   3,  8, 13 ), RPT_16  (  -3,  8, 13 ),
-    RPT_16  (   4,  8, 13 ), RPT_16  (  -4,  8, 13 ),
-    RPT_16  (   3,  9, 13 ), RPT_16  (  -3,  9, 13 ),
-    RPT_16  (   2, 11, 13 ), RPT_16  (  -2, 11, 13 ),
-    RPT_16  (   2, 12, 13 ), RPT_16  (  -2, 12, 13 ),
-    RPT_32  (   0, 14, 12 ),
-};
+// level is in -255..255 range, run 0..64, so it fits into 16 bits.
+#define E(level, run) ((level * 128) | run)
 
-static const HQXLUT ac16_lut[] = {
-    RPT_256 (   1,  0,  3 ), RPT_256 (  -1,  0,  3 ),
-    RPT_128 (   2,  0,  4 ), RPT_128 (  -2,  0,  4 ),
-    RPT_64  (   3,  0,  5 ), RPT_64  (  -3,  0,  5 ),
-    RPT_64  (   4,  0,  5 ), RPT_64  (  -4,  0,  5 ),
-    RPT_64  (   1,  1,  5 ), RPT_64  (  -1,  1,  5 ),
-    RPT_128 (   0, 64,  4 ), RPT_32  (   5,  0,  6 ),
-    RPT_32  (  -5,  0,  6 ), RPT_32  (   6,  0,  6 ),
-    RPT_32  (  -6,  0,  6 ), RPT_32  (   2,  1,  6 ),
-    RPT_32  (  -2,  1,  6 ), RPT_32  (   1,  2,  6 ),
-    RPT_32  (  -1,  2,  6 ), RPT_16  (   7,  0,  7 ),
-    RPT_16  (  -7,  0,  7 ), RPT_16  (   8,  0,  7 ),
-    RPT_16  (  -8,  0,  7 ), RPT_16  (   9,  0,  7 ),
-    RPT_16  (  -9,  0,  7 ), RPT_16  (   3,  1,  7 ),
-    RPT_16  (  -3,  1,  7 ), RPT_16  (   1,  3,  7 ),
-    RPT_16  (  -1,  3,  7 ), RPT_16  (   1,  4,  7 ),
-    RPT_16  (  -1,  4,  7 ), RPT_8   (  10,  0,  8 ),
-    RPT_8   ( -10,  0,  8 ), RPT_8   (  11,  0,  8 ),
-    RPT_8   ( -11,  0,  8 ), RPT_8   (  12,  0,  8 ),
-    RPT_8   ( -12,  0,  8 ), RPT_8   (   4,  1,  8 ),
-    RPT_8   (  -4,  1,  8 ), RPT_8   (   2,  2,  8 ),
-    RPT_8   (  -2,  2,  8 ), RPT_8   (   1,  5,  8 ),
-    RPT_8   (  -1,  5,  8 ), RPT_8   (   1,  6,  8 ),
-    RPT_8   (  -1,  6,  8 ), RPT_4   (  13,  0,  9 ),
-    RPT_4   ( -13,  0,  9 ), RPT_4   (  14,  0,  9 ),
-    RPT_4   ( -14,  0,  9 ), RPT_4   (  15,  0,  9 ),
-    RPT_4   ( -15,  0,  9 ), RPT_4   (  16,  0,  9 ),
-    RPT_4   ( -16,  0,  9 ), RPT_4   (  17,  0,  9 ),
-    RPT_4   ( -17,  0,  9 ), RPT_4   (   5,  1,  9 ),
-    RPT_4   (  -5,  1,  9 ), RPT_4   (   2,  3,  9 ),
-    RPT_4   (  -2,  3,  9 ), RPT_4   (   1,  7,  9 ),
-    RPT_4   (  -1,  7,  9 ), RPT_4   (   1,  8,  9 ),
-    RPT_4   (  -1,  8,  9 ), RPT_4   (   1,  9,  9 ),
-    RPT_4   (  -1,  9,  9 ), RPT_4   (   1, 10,  9 ),
-    RPT_4   (  -1, 10,  9 ), RPT_4   (   0,  0,  9 ),
-    RPT_2   (  18,  0, 10 ), RPT_2   ( -18,  0, 10 ),
-    RPT_2   (  19,  0, 10 ), RPT_2   ( -19,  0, 10 ),
-    RPT_2   (  20,  0, 10 ), RPT_2   ( -20,  0, 10 ),
-    RPT_2   (  21,  0, 10 ), RPT_2   ( -21,  0, 10 ),
-    RPT_2   (  22,  0, 10 ), RPT_2   ( -22,  0, 10 ),
-    RPT_2   (   6,  1, 10 ), RPT_2   (  -6,  1, 10 ),
-    RPT_2   (   7,  1, 10 ), RPT_2   (  -7,  1, 10 ),
-    RPT_2   (   3,  2, 10 ), RPT_2   (  -3,  2, 10 ),
-    RPT_2   (   2,  4, 10 ), RPT_2   (  -2,  4, 10 ),
-    RPT_2   (   2,  5, 10 ), RPT_2   (  -2,  5, 10 ),
-    RPT_2   (   1, 11, 10 ), RPT_2   (  -1, 11, 10 ),
-    RPT_2   (   1, 12, 10 ), RPT_2   (  -1, 12, 10 ),
-    RPT_2   (   1, 13, 10 ), RPT_2   (  -1, 13, 10 ),
-    { 2048,  0, -1 }, { 2112,  0, -1 }, { 2176,  0, -1 }, { 2240,  0, -1 },
-    { 2304,  0, -1 }, { 2368,  0, -1 }, { 2432,  0, -1 }, { 2496,  0, -1 },
-    {   23,  0, 11 }, {  -23,  0, 11 }, {   24,  0, 11 }, {  -24,  0, 11 },
-    {   25,  0, 11 }, {  -25,  0, 11 }, {   26,  0, 11 }, {  -26,  0, 11 },
-    {   27,  0, 11 }, {  -27,  0, 11 }, {   28,  0, 11 }, {  -28,  0, 11 },
-    {    8,  1, 11 }, {   -8,  1, 11 }, {    9,  1, 11 }, {   -9,  1, 11 },
-    {    4,  2, 11 }, {   -4,  2, 11 }, {    3,  3, 11 }, {   -3,  3, 11 },
-    {    3,  4, 11 }, {   -3,  4, 11 }, {    2,  6, 11 }, {   -2,  6, 11 },
-    {    2,  7, 11 }, {   -2,  7, 11 }, { 2560,  0, -1 }, { 2624,  0, -1 },
-    { 2688,  0, -1 }, { 2752,  0, -1 }, { 2816,  0, -1 }, { 2880,  0, -1 },
-    { 2944,  0, -1 }, {    0,  1, 11 }, { 3008,  0, -1 }, { 3072,  0, -1 },
-    { 3136,  0, -1 }, {    0,  2, 11 }, { 3200,  0, -1 }, {    0,  3, 11 },
-    { 3264,  0, -1 }, { 3328,  0, -1 }, { 3392,  0, -1 }, { 3456,  0, -1 },
-    { 3520,  0, -1 }, { 3584,  0, -1 }, { 3648,  0, -1 }, { 3712,  0, -1 },
-    { 3776,  0, -1 }, { 3840,  0, -1 }, { 3904,  0, -1 }, { 3968,  0, -1 },
-    { 4032,  0, -1 }, { 4096,  0, -1 }, { 4160,  0, -1 }, { 4224,  0, -1 },
-    RPT_4   (   0,  0, 15 ), RPT_4   (   0,  1, 15 ),
-    RPT_4   (   0,  2, 15 ), RPT_4   (   0,  3, 15 ),
-    RPT_4   (   0,  4, 15 ), RPT_4   (   0,  5, 15 ),
-    RPT_4   (   0,  6, 15 ), RPT_4   (   0,  7, 15 ),
-    RPT_4   (   0,  8, 15 ), RPT_4   (   0,  9, 15 ),
-    RPT_4   (   0, 10, 15 ), RPT_4   (   0, 11, 15 ),
-    RPT_4   (   0, 12, 15 ), RPT_4   (   0, 13, 15 ),
-    RPT_4   (   0, 14, 15 ), RPT_4   (   0, 15, 15 ),
-    RPT_4   (   0, 16, 15 ), RPT_4   (   0, 17, 15 ),
-    RPT_4   (   0, 18, 15 ), RPT_4   (   0, 19, 15 ),
-    RPT_4   (   0, 20, 15 ), RPT_4   (   0, 21, 15 ),
-    RPT_4   (   0, 22, 15 ), RPT_4   (   0, 23, 15 ),
-    RPT_4   (   0, 24, 15 ), RPT_4   (   0, 25, 15 ),
-    RPT_4   (   0, 26, 15 ), RPT_4   (   0, 27, 15 ),
-    RPT_4   (   0, 28, 15 ), RPT_4   (   0, 29, 15 ),
-    RPT_4   (   0, 30, 15 ), RPT_4   (   0, 31, 15 ),
-    RPT_4   (   0, 32, 15 ), RPT_4   (   0, 33, 15 ),
-    RPT_4   (   0, 34, 15 ), RPT_4   (   0, 35, 15 ),
-    RPT_4   (   0, 36, 15 ), RPT_4   (   0, 37, 15 ),
-    RPT_4   (   0, 38, 15 ), RPT_4   (   0, 39, 15 ),
-    RPT_4   (   0, 40, 15 ), RPT_4   (   0, 41, 15 ),
-    RPT_4   (   0, 42, 15 ), RPT_4   (   0, 43, 15 ),
-    RPT_4   (   0, 44, 15 ), RPT_4   (   0, 45, 15 ),
-    RPT_4   (   0, 46, 15 ), RPT_4   (   0, 47, 15 ),
-    RPT_4   (   0, 48, 15 ), RPT_4   (   0, 49, 15 ),
-    RPT_4   (   0, 50, 15 ), RPT_4   (   0, 51, 15 ),
-    RPT_4   (   0, 52, 15 ), RPT_4   (   0, 53, 15 ),
-    RPT_4   (   0, 54, 15 ), RPT_4   (   0, 55, 15 ),
-    RPT_4   (   0, 56, 15 ), RPT_4   (   0, 57, 15 ),
-    RPT_4   (   0, 58, 15 ), RPT_4   (   0, 59, 15 ),
-    RPT_4   (   0, 60, 15 ), RPT_4   (   0, 61, 15 ),
-    RPT_4   (   0, 62, 15 ), RPT_4   (   0, 63, 15 ),
-    RPT_2   (   0,  0, 16 ), {    1,  0, 17 }, {   -1,  0, 17 },
-    {    2,  0, 17 }, {   -2,  0, 17 }, {    3,  0, 17 }, {   -3,  0, 17 },
-    {    4,  0, 17 }, {   -4,  0, 17 }, {    5,  0, 17 }, {   -5,  0, 17 },
-    {    6,  0, 17 }, {   -6,  0, 17 }, {    7,  0, 17 }, {   -7,  0, 17 },
-    {    8,  0, 17 }, {   -8,  0, 17 }, {    9,  0, 17 }, {   -9,  0, 17 },
-    {   10,  0, 17 }, {  -10,  0, 17 }, {   11,  0, 17 }, {  -11,  0, 17 },
-    {   12,  0, 17 }, {  -12,  0, 17 }, {   13,  0, 17 }, {  -13,  0, 17 },
-    {   14,  0, 17 }, {  -14,  0, 17 }, {   15,  0, 17 }, {  -15,  0, 17 },
-    {   16,  0, 17 }, {  -16,  0, 17 }, {   17,  0, 17 }, {  -17,  0, 17 },
-    {   18,  0, 17 }, {  -18,  0, 17 }, {   19,  0, 17 }, {  -19,  0, 17 },
-    {   20,  0, 17 }, {  -20,  0, 17 }, {   21,  0, 17 }, {  -21,  0, 17 },
-    {   22,  0, 17 }, {  -22,  0, 17 }, {   23,  0, 17 }, {  -23,  0, 17 },
-    {   24,  0, 17 }, {  -24,  0, 17 }, {   25,  0, 17 }, {  -25,  0, 17 },
-    {   26,  0, 17 }, {  -26,  0, 17 }, {   27,  0, 17 }, {  -27,  0, 17 },
-    {   28,  0, 17 }, {  -28,  0, 17 }, {   29,  0, 17 }, {  -29,  0, 17 },
-    {   30,  0, 17 }, {  -30,  0, 17 }, {   31,  0, 17 }, {  -31,  0, 17 },
-    {   32,  0, 17 }, {  -32,  0, 17 }, {   33,  0, 17 }, {  -33,  0, 17 },
-    {   34,  0, 17 }, {  -34,  0, 17 }, {   35,  0, 17 }, {  -35,  0, 17 },
-    {   36,  0, 17 }, {  -36,  0, 17 }, {   37,  0, 17 }, {  -37,  0, 17 },
-    {   38,  0, 17 }, {  -38,  0, 17 }, {   39,  0, 17 }, {  -39,  0, 17 },
-    {   40,  0, 17 }, {  -40,  0, 17 }, {   41,  0, 17 }, {  -41,  0, 17 },
-    {   42,  0, 17 }, {  -42,  0, 17 }, {   43,  0, 17 }, {  -43,  0, 17 },
-    {   44,  0, 17 }, {  -44,  0, 17 }, {   45,  0, 17 }, {  -45,  0, 17 },
-    {   46,  0, 17 }, {  -46,  0, 17 }, {   47,  0, 17 }, {  -47,  0, 17 },
-    {   48,  0, 17 }, {  -48,  0, 17 }, {   49,  0, 17 }, {  -49,  0, 17 },
-    {   50,  0, 17 }, {  -50,  0, 17 }, {   51,  0, 17 }, {  -51,  0, 17 },
-    {   52,  0, 17 }, {  -52,  0, 17 }, {   53,  0, 17 }, {  -53,  0, 17 },
-    {   54,  0, 17 }, {  -54,  0, 17 }, {   55,  0, 17 }, {  -55,  0, 17 },
-    {   56,  0, 17 }, {  -56,  0, 17 }, {   57,  0, 17 }, {  -57,  0, 17 },
-    {   58,  0, 17 }, {  -58,  0, 17 }, {   59,  0, 17 }, {  -59,  0, 17 },
-    {   60,  0, 17 }, {  -60,  0, 17 }, {   61,  0, 17 }, {  -61,  0, 17 },
-    {   62,  0, 17 }, {  -62,  0, 17 }, {   63,  0, 17 }, {  -63,  0, 17 },
-    {   64,  0, 17 }, {  -64,  0, 17 }, {   65,  0, 17 }, {  -65,  0, 17 },
-    {   66,  0, 17 }, {  -66,  0, 17 }, {   67,  0, 17 }, {  -67,  0, 17 },
-    {   68,  0, 17 }, {  -68,  0, 17 }, {   69,  0, 17 }, {  -69,  0, 17 },
-    {   70,  0, 17 }, {  -70,  0, 17 }, {   71,  0, 17 }, {  -71,  0, 17 },
-    {   72,  0, 17 }, {  -72,  0, 17 }, {   73,  0, 17 }, {  -73,  0, 17 },
-    {   74,  0, 17 }, {  -74,  0, 17 }, {   75,  0, 17 }, {  -75,  0, 17 },
-    {   76,  0, 17 }, {  -76,  0, 17 }, {   77,  0, 17 }, {  -77,  0, 17 },
-    {   78,  0, 17 }, {  -78,  0, 17 }, {   79,  0, 17 }, {  -79,  0, 17 },
-    {   80,  0, 17 }, {  -80,  0, 17 }, {   81,  0, 17 }, {  -81,  0, 17 },
-    {   82,  0, 17 }, {  -82,  0, 17 }, {   83,  0, 17 }, {  -83,  0, 17 },
-    {   84,  0, 17 }, {  -84,  0, 17 }, {   85,  0, 17 }, {  -85,  0, 17 },
-    {   86,  0, 17 }, {  -86,  0, 17 }, {   87,  0, 17 }, {  -87,  0, 17 },
-    {   88,  0, 17 }, {  -88,  0, 17 }, {   89,  0, 17 }, {  -89,  0, 17 },
-    {   90,  0, 17 }, {  -90,  0, 17 }, {   91,  0, 17 }, {  -91,  0, 17 },
-    {   92,  0, 17 }, {  -92,  0, 17 }, {   93,  0, 17 }, {  -93,  0, 17 },
-    {   94,  0, 17 }, {  -94,  0, 17 }, {   95,  0, 17 }, {  -95,  0, 17 },
-    {   96,  0, 17 }, {  -96,  0, 17 }, {   97,  0, 17 }, {  -97,  0, 17 },
-    {   98,  0, 17 }, {  -98,  0, 17 }, {   99,  0, 17 }, {  -99,  0, 17 },
-    {  100,  0, 17 }, { -100,  0, 17 }, {  101,  0, 17 }, { -101,  0, 17 },
-    {  102,  0, 17 }, { -102,  0, 17 }, {  103,  0, 17 }, { -103,  0, 17 },
-    {  104,  0, 17 }, { -104,  0, 17 }, {  105,  0, 17 }, { -105,  0, 17 },
-    {  106,  0, 17 }, { -106,  0, 17 }, {  107,  0, 17 }, { -107,  0, 17 },
-    {  108,  0, 17 }, { -108,  0, 17 }, {  109,  0, 17 }, { -109,  0, 17 },
-    {  110,  0, 17 }, { -110,  0, 17 }, {  111,  0, 17 }, { -111,  0, 17 },
-    {  112,  0, 17 }, { -112,  0, 17 }, {  113,  0, 17 }, { -113,  0, 17 },
-    {  114,  0, 17 }, { -114,  0, 17 }, {  115,  0, 17 }, { -115,  0, 17 },
-    {  116,  0, 17 }, { -116,  0, 17 }, {  117,  0, 17 }, { -117,  0, 17 },
-    {  118,  0, 17 }, { -118,  0, 17 }, {  119,  0, 17 }, { -119,  0, 17 },
-    {  120,  0, 17 }, { -120,  0, 17 }, {  121,  0, 17 }, { -121,  0, 17 },
-    {  122,  0, 17 }, { -122,  0, 17 }, {  123,  0, 17 }, { -123,  0, 17 },
-    {  124,  0, 17 }, { -124,  0, 17 }, {  125,  0, 17 }, { -125,  0, 17 },
-    {  126,  0, 17 }, { -126,  0, 17 }, {  127,  0, 17 }, { -127,  0, 17 },
-    RPT_32  (  29,  0, 12 ), RPT_32  ( -29,  0, 12 ),
-    RPT_32  (  30,  0, 12 ), RPT_32  ( -30,  0, 12 ),
-    RPT_32  (  31,  0, 12 ), RPT_32  ( -31,  0, 12 ),
-    RPT_32  (  32,  0, 12 ), RPT_32  ( -32,  0, 12 ),
-    RPT_32  (  33,  0, 12 ), RPT_32  ( -33,  0, 12 ),
-    RPT_32  (  34,  0, 12 ), RPT_32  ( -34,  0, 12 ),
-    RPT_32  (  35,  0, 12 ), RPT_32  ( -35,  0, 12 ),
-    RPT_32  (  10,  1, 12 ), RPT_32  ( -10,  1, 12 ),
-    RPT_32  (  11,  1, 12 ), RPT_32  ( -11,  1, 12 ),
-    RPT_32  (  12,  1, 12 ), RPT_32  ( -12,  1, 12 ),
-    RPT_32  (   5,  2, 12 ), RPT_32  (  -5,  2, 12 ),
-    RPT_32  (   4,  3, 12 ), RPT_32  (  -4,  3, 12 ),
-    RPT_32  (   3,  5, 12 ), RPT_32  (  -3,  5, 12 ),
-    RPT_32  (   2,  8, 12 ), RPT_32  (  -2,  8, 12 ),
-    RPT_32  (   2,  9, 12 ), RPT_32  (  -2,  9, 12 ),
-    RPT_32  (   1, 14, 12 ), RPT_32  (  -1, 14, 12 ),
-    RPT_32  (   1, 15, 12 ), RPT_32  (  -1, 15, 12 ),
-    RPT_16  (  36,  0, 13 ), RPT_16  ( -36,  0, 13 ),
-    RPT_16  (  37,  0, 13 ), RPT_16  ( -37,  0, 13 ),
-    RPT_16  (  38,  0, 13 ), RPT_16  ( -38,  0, 13 ),
-    RPT_16  (  39,  0, 13 ), RPT_16  ( -39,  0, 13 ),
-    RPT_16  (  40,  0, 13 ), RPT_16  ( -40,  0, 13 ),
-    RPT_16  (  13,  1, 13 ), RPT_16  ( -13,  1, 13 ),
-    RPT_16  (  14,  1, 13 ), RPT_16  ( -14,  1, 13 ),
-    RPT_16  (  15,  1, 13 ), RPT_16  ( -15,  1, 13 ),
-    RPT_16  (   6,  2, 13 ), RPT_16  (  -6,  2, 13 ),
-    RPT_16  (   7,  2, 13 ), RPT_16  (  -7,  2, 13 ),
-    RPT_16  (   5,  3, 13 ), RPT_16  (  -5,  3, 13 ),
-    RPT_32  (   0,  4, 12 ), RPT_16  (   4,  4, 13 ),
-    RPT_16  (  -4,  4, 13 ), RPT_32  (   0,  5, 12 ),
-    RPT_32  (   0,  6, 12 ), RPT_16  (   3,  6, 13 ),
-    RPT_16  (  -3,  6, 13 ), RPT_32  (   0,  7, 12 ),
-    RPT_16  (   3,  7, 13 ), RPT_16  (  -3,  7, 13 ),
-    RPT_16  (   2, 10, 13 ), RPT_16  (  -2, 10, 13 ),
-    RPT_16  (   1, 16, 13 ), RPT_16  (  -1, 16, 13 ),
+static const int16_t hqx_ac_run_level[] = {
+    // AC table Q0 - 815 elements
+    E(   1,  0), E(  -1,  0), E(   2,  0), E(  -2,  0), E(   3,  0),
+    E(  -3,  0), E(   4,  0), E(  -4,  0), E(   1,  1), E(  -1,  1),
+    E(   5,  0), E(  -5,  0), E(   6,  0), E(  -6,  0), E(   7,  0),
+    E(  -7,  0), E(   8,  0), E(  -8,  0), E(   0,  0), E(   1,  0),
+    E(  -1,  0), E(   2,  0), E(  -2,  0), E(   3,  0), E(  -3,  0),
+    E(   4,  0), E(  -4,  0), E(   5,  0), E(  -5,  0), E(   6,  0),
+    E(  -6,  0), E(   7,  0), E(  -7,  0), E(   8,  0), E(  -8,  0),
+    E(   9,  0), E(  -9,  0), E(  10,  0), E( -10,  0), E(  11,  0),
+    E( -11,  0), E(  12,  0), E( -12,  0), E(  13,  0), E( -13,  0),
+    E(  14,  0), E( -14,  0), E(  15,  0), E( -15,  0), E(  16,  0),
+    E( -16,  0), E(  17,  0), E( -17,  0), E(  18,  0), E( -18,  0),
+    E(  19,  0), E( -19,  0), E(  20,  0), E( -20,  0), E(  21,  0),
+    E( -21,  0), E(  22,  0), E( -22,  0), E(  23,  0), E( -23,  0),
+    E(  24,  0), E( -24,  0), E(  25,  0), E( -25,  0), E(  26,  0),
+    E( -26,  0), E(  27,  0), E( -27,  0), E(  28,  0), E( -28,  0),
+    E(  29,  0), E( -29,  0), E(  30,  0), E( -30,  0), E(  31,  0),
+    E( -31,  0), E(  32,  0), E( -32,  0), E(  33,  0), E( -33,  0),
+    E(  34,  0), E( -34,  0), E(  35,  0), E( -35,  0), E(  36,  0),
+    E( -36,  0), E(  37,  0), E( -37,  0), E(  38,  0), E( -38,  0),
+    E(  39,  0), E( -39,  0), E(  40,  0), E( -40,  0), E(  41,  0),
+    E( -41,  0), E(  42,  0), E( -42,  0), E(  43,  0), E( -43,  0),
+    E(  44,  0), E( -44,  0), E(  45,  0), E( -45,  0), E(  46,  0),
+    E( -46,  0), E(  47,  0), E( -47,  0), E(  48,  0), E( -48,  0),
+    E(  49,  0), E( -49,  0), E(  50,  0), E( -50,  0), E(  51,  0),
+    E( -51,  0), E(  52,  0), E( -52,  0), E(  53,  0), E( -53,  0),
+    E(  54,  0), E( -54,  0), E(  55,  0), E( -55,  0), E(  56,  0),
+    E( -56,  0), E(  57,  0), E( -57,  0), E(  58,  0), E( -58,  0),
+    E(  59,  0), E( -59,  0), E(  60,  0), E( -60,  0), E(  61,  0),
+    E( -61,  0), E(  62,  0), E( -62,  0), E(  63,  0), E( -63,  0),
+    E(  64,  0), E( -64,  0), E(  65,  0), E( -65,  0), E(  66,  0),
+    E( -66,  0), E(  67,  0), E( -67,  0), E(  68,  0), E( -68,  0),
+    E(  69,  0), E( -69,  0), E(  70,  0), E( -70,  0), E(  71,  0),
+    E( -71,  0), E(  72,  0), E( -72,  0), E(  73,  0), E( -73,  0),
+    E(  74,  0), E( -74,  0), E(  75,  0), E( -75,  0), E(  76,  0),
+    E( -76,  0), E(  77,  0), E( -77,  0), E(  78,  0), E( -78,  0),
+    E(  79,  0), E( -79,  0), E(  80,  0), E( -80,  0), E(  81,  0),
+    E( -81,  0), E(  82,  0), E( -82,  0), E(  83,  0), E( -83,  0),
+    E(  84,  0), E( -84,  0), E(  85,  0), E( -85,  0), E(  86,  0),
+    E( -86,  0), E(  87,  0), E( -87,  0), E(  88,  0), E( -88,  0),
+    E(  89,  0), E( -89,  0), E(  90,  0), E( -90,  0), E(  91,  0),
+    E( -91,  0), E(  92,  0), E( -92,  0), E(  93,  0), E( -93,  0),
+    E(  94,  0), E( -94,  0), E(  95,  0), E( -95,  0), E(  96,  0),
+    E( -96,  0), E(  97,  0), E( -97,  0), E(  98,  0), E( -98,  0),
+    E(  99,  0), E( -99,  0), E( 100,  0), E(-100,  0), E( 101,  0),
+    E(-101,  0), E( 102,  0), E(-102,  0), E( 103,  0), E(-103,  0),
+    E( 104,  0), E(-104,  0), E( 105,  0), E(-105,  0), E( 106,  0),
+    E(-106,  0), E( 107,  0), E(-107,  0), E( 108,  0), E(-108,  0),
+    E( 109,  0), E(-109,  0), E( 110,  0), E(-110,  0), E( 111,  0),
+    E(-111,  0), E( 112,  0), E(-112,  0), E( 113,  0), E(-113,  0),
+    E( 114,  0), E(-114,  0), E( 115,  0), E(-115,  0), E( 116,  0),
+    E(-116,  0), E( 117,  0), E(-117,  0), E( 118,  0), E(-118,  0),
+    E( 119,  0), E(-119,  0), E( 120,  0), E(-120,  0), E( 121,  0),
+    E(-121,  0), E( 122,  0), E(-122,  0), E( 123,  0), E(-123,  0),
+    E( 124,  0), E(-124,  0), E( 125,  0), E(-125,  0), E( 126,  0),
+    E(-126,  0), E( 127,  0), E(-127,  0), E( 128,  0), E(-128,  0),
+    E( 129,  0), E(-129,  0), E( 130,  0), E(-130,  0), E( 131,  0),
+    E(-131,  0), E( 132,  0), E(-132,  0), E( 133,  0), E(-133,  0),
+    E( 134,  0), E(-134,  0), E( 135,  0), E(-135,  0), E( 136,  0),
+    E(-136,  0), E( 137,  0), E(-137,  0), E( 138,  0), E(-138,  0),
+    E( 139,  0), E(-139,  0), E( 140,  0), E(-140,  0), E( 141,  0),
+    E(-141,  0), E( 142,  0), E(-142,  0), E( 143,  0), E(-143,  0),
+    E( 144,  0), E(-144,  0), E( 145,  0), E(-145,  0), E( 146,  0),
+    E(-146,  0), E( 147,  0), E(-147,  0), E( 148,  0), E(-148,  0),
+    E( 149,  0), E(-149,  0), E( 150,  0), E(-150,  0), E( 151,  0),
+    E(-151,  0), E( 152,  0), E(-152,  0), E( 153,  0), E(-153,  0),
+    E( 154,  0), E(-154,  0), E( 155,  0), E(-155,  0), E( 156,  0),
+    E(-156,  0), E( 157,  0), E(-157,  0), E( 158,  0), E(-158,  0),
+    E( 159,  0), E(-159,  0), E( 160,  0), E(-160,  0), E( 161,  0),
+    E(-161,  0), E( 162,  0), E(-162,  0), E( 163,  0), E(-163,  0),
+    E( 164,  0), E(-164,  0), E( 165,  0), E(-165,  0), E( 166,  0),
+    E(-166,  0), E( 167,  0), E(-167,  0), E( 168,  0), E(-168,  0),
+    E( 169,  0), E(-169,  0), E( 170,  0), E(-170,  0), E( 171,  0),
+    E(-171,  0), E( 172,  0), E(-172,  0), E( 173,  0), E(-173,  0),
+    E( 174,  0), E(-174,  0), E( 175,  0), E(-175,  0), E( 176,  0),
+    E(-176,  0), E( 177,  0), E(-177,  0), E( 178,  0), E(-178,  0),
+    E( 179,  0), E(-179,  0), E( 180,  0), E(-180,  0), E( 181,  0),
+    E(-181,  0), E( 182,  0), E(-182,  0), E( 183,  0), E(-183,  0),
+    E( 184,  0), E(-184,  0), E( 185,  0), E(-185,  0), E( 186,  0),
+    E(-186,  0), E( 187,  0), E(-187,  0), E( 188,  0), E(-188,  0),
+    E( 189,  0), E(-189,  0), E( 190,  0), E(-190,  0), E( 191,  0),
+    E(-191,  0), E( 192,  0), E(-192,  0), E( 193,  0), E(-193,  0),
+    E( 194,  0), E(-194,  0), E( 195,  0), E(-195,  0), E( 196,  0),
+    E(-196,  0), E( 197,  0), E(-197,  0), E( 198,  0), E(-198,  0),
+    E( 199,  0), E(-199,  0), E( 200,  0), E(-200,  0), E( 201,  0),
+    E(-201,  0), E( 202,  0), E(-202,  0), E( 203,  0), E(-203,  0),
+    E( 204,  0), E(-204,  0), E( 205,  0), E(-205,  0), E( 206,  0),
+    E(-206,  0), E( 207,  0), E(-207,  0), E( 208,  0), E(-208,  0),
+    E( 209,  0), E(-209,  0), E( 210,  0), E(-210,  0), E( 211,  0),
+    E(-211,  0), E( 212,  0), E(-212,  0), E( 213,  0), E(-213,  0),
+    E( 214,  0), E(-214,  0), E( 215,  0), E(-215,  0), E( 216,  0),
+    E(-216,  0), E( 217,  0), E(-217,  0), E( 218,  0), E(-218,  0),
+    E( 219,  0), E(-219,  0), E( 220,  0), E(-220,  0), E( 221,  0),
+    E(-221,  0), E( 222,  0), E(-222,  0), E( 223,  0), E(-223,  0),
+    E( 224,  0), E(-224,  0), E( 225,  0), E(-225,  0), E( 226,  0),
+    E(-226,  0), E( 227,  0), E(-227,  0), E( 228,  0), E(-228,  0),
+    E( 229,  0), E(-229,  0), E( 230,  0), E(-230,  0), E( 231,  0),
+    E(-231,  0), E( 232,  0), E(-232,  0), E( 233,  0), E(-233,  0),
+    E( 234,  0), E(-234,  0), E( 235,  0), E(-235,  0), E( 236,  0),
+    E(-236,  0), E( 237,  0), E(-237,  0), E( 238,  0), E(-238,  0),
+    E( 239,  0), E(-239,  0), E( 240,  0), E(-240,  0), E( 241,  0),
+    E(-241,  0), E( 242,  0), E(-242,  0), E( 243,  0), E(-243,  0),
+    E( 244,  0), E(-244,  0), E( 245,  0), E(-245,  0), E( 246,  0),
+    E(-246,  0), E( 247,  0), E(-247,  0), E( 248,  0), E(-248,  0),
+    E( 249,  0), E(-249,  0), E( 250,  0), E(-250,  0), E( 251,  0),
+    E(-251,  0), E( 252,  0), E(-252,  0), E( 253,  0), E(-253,  0),
+    E( 254,  0), E(-254,  0), E( 255,  0), E(-255,  0), E(   0, 64),
+    E(   9,  0), E(  -9,  0), E(  10,  0), E( -10,  0), E(  11,  0),
+    E( -11,  0), E(  12,  0), E( -12,  0), E(  13,  0), E( -13,  0),
+    E(  14,  0), E( -14,  0), E(   2,  1), E(  -2,  1), E(   1,  2),
+    E(  -1,  2), E(  15,  0), E( -15,  0), E(  16,  0), E( -16,  0),
+    E(  17,  0), E( -17,  0), E(  18,  0), E( -18,  0), E(  19,  0),
+    E( -19,  0), E(  20,  0), E( -20,  0), E(  21,  0), E( -21,  0),
+    E(   3,  1), E(  -3,  1), E(   4,  1), E(  -4,  1), E(   1,  3),
+    E(  -1,  3), E(   1,  4), E(  -1,  4), E(   0,  0), E(  22,  0),
+    E( -22,  0), E(  23,  0), E( -23,  0), E(  24,  0), E( -24,  0),
+    E(  25,  0), E( -25,  0), E(  26,  0), E( -26,  0), E(  27,  0),
+    E( -27,  0), E(  28,  0), E( -28,  0), E(  29,  0), E( -29,  0),
+    E(  30,  0), E( -30,  0), E(  31,  0), E( -31,  0), E(  32,  0),
+    E( -32,  0), E(  33,  0), E( -33,  0), E(   5,  1), E(  -5,  1),
+    E(   6,  1), E(  -6,  1), E(   2,  2), E(  -2,  2), E(   1,  5),
+    E(  -1,  5), E(   1,  6), E(  -1,  6), E(  34,  0), E( -34,  0),
+    E(  35,  0), E( -35,  0), E(  36,  0), E( -36,  0), E(  37,  0),
+    E( -37,  0), E(  38,  0), E( -38,  0), E(  39,  0), E( -39,  0),
+    E(  40,  0), E( -40,  0), E(  41,  0), E( -41,  0), E(  42,  0),
+    E( -42,  0), E(  43,  0), E( -43,  0), E(  44,  0), E( -44,  0),
+    E(  45,  0), E( -45,  0), E(  46,  0), E( -46,  0), E(  47,  0),
+    E( -47,  0), E(  48,  0), E( -48,  0), E(  49,  0), E( -49,  0),
+    E(  50,  0), E( -50,  0), E(   0,  1), E(   7,  1), E(  -7,  1),
+    E(   8,  1), E(  -8,  1), E(   9,  1), E(  -9,  1), E(  10,  1),
+    E( -10,  1), E(   0,  2), E(   3,  2), E(  -3,  2), E(   0,  3),
+    E(   2,  3), E(  -2,  3), E(   1,  7), E(  -1,  7), E(   1,  8),
+    E(  -1,  8), E(   0,  0), E(   0,  1), E(   0,  2), E(   0,  3),
+    E(   0,  4), E(   0,  5), E(   0,  6), E(   0,  7), E(   0,  8),
+    E(   0,  9), E(   0, 10), E(   0, 11), E(   0, 12), E(   0, 13),
+    E(   0, 14), E(   0, 15), E(   0, 16), E(   0, 17), E(   0, 18),
+    E(   0, 19), E(   0, 20), E(   0, 21), E(   0, 22), E(   0, 23),
+    E(   0, 24), E(   0, 25), E(   0, 26), E(   0, 27), E(   0, 28),
+    E(   0, 29), E(   0, 30), E(   0, 31), E(   0, 32), E(   0, 33),
+    E(   0, 34), E(   0, 35), E(   0, 36), E(   0, 37), E(   0, 38),
+    E(   0, 39), E(   0, 40), E(   0, 41), E(   0, 42), E(   0, 43),
+    E(   0, 44), E(   0, 45), E(   0, 46), E(   0, 47), E(   0, 48),
+    E(   0, 49), E(   0, 50), E(   0, 51), E(   0, 52), E(   0, 53),
+    E(   0, 54), E(   0, 55), E(   0, 56), E(   0, 57), E(   0, 58),
+    E(   0, 59), E(   0, 60), E(   0, 61), E(   0, 62), E(   0, 63),
+    E(  51,  0), E( -51,  0), E(  52,  0), E( -52,  0), E(  53,  0),
+    E( -53,  0), E(  54,  0), E( -54,  0), E(  55,  0), E( -55,  0),
+    E(  56,  0), E( -56,  0), E(  57,  0), E( -57,  0), E(  58,  0),
+    E( -58,  0), E(  59,  0), E( -59,  0), E(  60,  0), E( -60,  0),
+    E(  61,  0), E( -61,  0), E(  62,  0), E( -62,  0), E(  63,  0),
+    E( -63,  0), E(  11,  1), E( -11,  1), E(  12,  1), E( -12,  1),
+    E(  13,  1), E( -13,  1), E(  14,  1), E( -14,  1), E(   4,  2),
+    E(  -4,  2), E(   5,  2), E(  -5,  2), E(   6,  2), E(  -6,  2),
+    E(   3,  3), E(  -3,  3), E(   0,  4), E(   2,  4), E(  -2,  4),
+    E(   0,  5), E(   0,  6), E(   1,  9), E(  -1,  9), E(   1, 10),
+    E(  -1, 10), E(  15,  1), E( -15,  1), E(  16,  1), E( -16,  1),
+    E(  17,  1), E( -17,  1), E(  18,  1), E( -18,  1), E(   7,  2),
+    E(  -7,  2), E(   8,  2), E(  -8,  2), E(   9,  2), E(  -9,  2),
+    E(  10,  2), E( -10,  2), E(   4,  3), E(  -4,  3), E(   5,  3),
+    E(  -5,  3), E(   6,  3), E(  -6,  3), E(   2,  5), E(  -2,  5),
+    E(   0,  7), E(   0,  8), E(   0,  9), E(   0, 10), E(   1, 11),
+    E(  -1, 11), E(   1, 12), E(  -1, 12), E(   1, 13), E(  -1, 13),
+    E(   1, 14), E(  -1, 14), E(  19,  1), E( -19,  1), E(  20,  1),
+    E( -20,  1), E(   3,  4), E(  -3,  4), E(   2,  6), E(  -2,  6),
+    // AC table Q8 - 907 elements
+    E(   1,  0), E(  -1,  0), E(   2,  0), E(  -2,  0), E(   3,  0),
+    E(  -3,  0), E(   4,  0), E(  -4,  0), E(   0, 64), E(   5,  0),
+    E(  -5,  0), E(   6,  0), E(  -6,  0), E(   7,  0), E(  -7,  0),
+    E(   8,  0), E(  -8,  0), E(   1,  1), E(  -1,  1), E(   2,  1),
+    E(  -2,  1), E(   9,  0), E(  -9,  0), E(  10,  0), E( -10,  0),
+    E(  11,  0), E( -11,  0), E(  12,  0), E( -12,  0), E(   3,  1),
+    E(  -3,  1), E(   4,  1), E(  -4,  1), E(   1,  2), E(  -1,  2),
+    E(   0,  0), E(   1,  0), E(  -1,  0), E(   2,  0), E(  -2,  0),
+    E(   3,  0), E(  -3,  0), E(   4,  0), E(  -4,  0), E(   5,  0),
+    E(  -5,  0), E(   6,  0), E(  -6,  0), E(   7,  0), E(  -7,  0),
+    E(   8,  0), E(  -8,  0), E(   9,  0), E(  -9,  0), E(  10,  0),
+    E( -10,  0), E(  11,  0), E( -11,  0), E(  12,  0), E( -12,  0),
+    E(  13,  0), E( -13,  0), E(  14,  0), E( -14,  0), E(  15,  0),
+    E( -15,  0), E(  16,  0), E( -16,  0), E(  17,  0), E( -17,  0),
+    E(  18,  0), E( -18,  0), E(  19,  0), E( -19,  0), E(  20,  0),
+    E( -20,  0), E(  21,  0), E( -21,  0), E(  22,  0), E( -22,  0),
+    E(  23,  0), E( -23,  0), E(  24,  0), E( -24,  0), E(  25,  0),
+    E( -25,  0), E(  26,  0), E( -26,  0), E(  27,  0), E( -27,  0),
+    E(  28,  0), E( -28,  0), E(  29,  0), E( -29,  0), E(  30,  0),
+    E( -30,  0), E(  31,  0), E( -31,  0), E(  32,  0), E( -32,  0),
+    E(  33,  0), E( -33,  0), E(  34,  0), E( -34,  0), E(  35,  0),
+    E( -35,  0), E(  36,  0), E( -36,  0), E(  37,  0), E( -37,  0),
+    E(  38,  0), E( -38,  0), E(  39,  0), E( -39,  0), E(  40,  0),
+    E( -40,  0), E(  41,  0), E( -41,  0), E(  42,  0), E( -42,  0),
+    E(  43,  0), E( -43,  0), E(  44,  0), E( -44,  0), E(  45,  0),
+    E( -45,  0), E(  46,  0), E( -46,  0), E(  47,  0), E( -47,  0),
+    E(  48,  0), E( -48,  0), E(  49,  0), E( -49,  0), E(  50,  0),
+    E( -50,  0), E(  51,  0), E( -51,  0), E(  52,  0), E( -52,  0),
+    E(  53,  0), E( -53,  0), E(  54,  0), E( -54,  0), E(  55,  0),
+    E( -55,  0), E(  56,  0), E( -56,  0), E(  57,  0), E( -57,  0),
+    E(  58,  0), E( -58,  0), E(  59,  0), E( -59,  0), E(  60,  0),
+    E( -60,  0), E(  61,  0), E( -61,  0), E(  62,  0), E( -62,  0),
+    E(  63,  0), E( -63,  0), E(  64,  0), E( -64,  0), E(  65,  0),
+    E( -65,  0), E(  66,  0), E( -66,  0), E(  67,  0), E( -67,  0),
+    E(  68,  0), E( -68,  0), E(  69,  0), E( -69,  0), E(  70,  0),
+    E( -70,  0), E(  71,  0), E( -71,  0), E(  72,  0), E( -72,  0),
+    E(  73,  0), E( -73,  0), E(  74,  0), E( -74,  0), E(  75,  0),
+    E( -75,  0), E(  76,  0), E( -76,  0), E(  77,  0), E( -77,  0),
+    E(  78,  0), E( -78,  0), E(  79,  0), E( -79,  0), E(  80,  0),
+    E( -80,  0), E(  81,  0), E( -81,  0), E(  82,  0), E( -82,  0),
+    E(  83,  0), E( -83,  0), E(  84,  0), E( -84,  0), E(  85,  0),
+    E( -85,  0), E(  86,  0), E( -86,  0), E(  87,  0), E( -87,  0),
+    E(  88,  0), E( -88,  0), E(  89,  0), E( -89,  0), E(  90,  0),
+    E( -90,  0), E(  91,  0), E( -91,  0), E(  92,  0), E( -92,  0),
+    E(  93,  0), E( -93,  0), E(  94,  0), E( -94,  0), E(  95,  0),
+    E( -95,  0), E(  96,  0), E( -96,  0), E(  97,  0), E( -97,  0),
+    E(  98,  0), E( -98,  0), E(  99,  0), E( -99,  0), E( 100,  0),
+    E(-100,  0), E( 101,  0), E(-101,  0), E( 102,  0), E(-102,  0),
+    E( 103,  0), E(-103,  0), E( 104,  0), E(-104,  0), E( 105,  0),
+    E(-105,  0), E( 106,  0), E(-106,  0), E( 107,  0), E(-107,  0),
+    E( 108,  0), E(-108,  0), E( 109,  0), E(-109,  0), E( 110,  0),
+    E(-110,  0), E( 111,  0), E(-111,  0), E( 112,  0), E(-112,  0),
+    E( 113,  0), E(-113,  0), E( 114,  0), E(-114,  0), E( 115,  0),
+    E(-115,  0), E( 116,  0), E(-116,  0), E( 117,  0), E(-117,  0),
+    E( 118,  0), E(-118,  0), E( 119,  0), E(-119,  0), E( 120,  0),
+    E(-120,  0), E( 121,  0), E(-121,  0), E( 122,  0), E(-122,  0),
+    E( 123,  0), E(-123,  0), E( 124,  0), E(-124,  0), E( 125,  0),
+    E(-125,  0), E( 126,  0), E(-126,  0), E( 127,  0), E(-127,  0),
+    E( 128,  0), E(-128,  0), E( 129,  0), E(-129,  0), E( 130,  0),
+    E(-130,  0), E( 131,  0), E(-131,  0), E( 132,  0), E(-132,  0),
+    E( 133,  0), E(-133,  0), E( 134,  0), E(-134,  0), E( 135,  0),
+    E(-135,  0), E( 136,  0), E(-136,  0), E( 137,  0), E(-137,  0),
+    E( 138,  0), E(-138,  0), E( 139,  0), E(-139,  0), E( 140,  0),
+    E(-140,  0), E( 141,  0), E(-141,  0), E( 142,  0), E(-142,  0),
+    E( 143,  0), E(-143,  0), E( 144,  0), E(-144,  0), E( 145,  0),
+    E(-145,  0), E( 146,  0), E(-146,  0), E( 147,  0), E(-147,  0),
+    E( 148,  0), E(-148,  0), E( 149,  0), E(-149,  0), E( 150,  0),
+    E(-150,  0), E( 151,  0), E(-151,  0), E( 152,  0), E(-152,  0),
+    E( 153,  0), E(-153,  0), E( 154,  0), E(-154,  0), E( 155,  0),
+    E(-155,  0), E( 156,  0), E(-156,  0), E( 157,  0), E(-157,  0),
+    E( 158,  0), E(-158,  0), E( 159,  0), E(-159,  0), E( 160,  0),
+    E(-160,  0), E( 161,  0), E(-161,  0), E( 162,  0), E(-162,  0),
+    E( 163,  0), E(-163,  0), E( 164,  0), E(-164,  0), E( 165,  0),
+    E(-165,  0), E( 166,  0), E(-166,  0), E( 167,  0), E(-167,  0),
+    E( 168,  0), E(-168,  0), E( 169,  0), E(-169,  0), E( 170,  0),
+    E(-170,  0), E( 171,  0), E(-171,  0), E( 172,  0), E(-172,  0),
+    E( 173,  0), E(-173,  0), E( 174,  0), E(-174,  0), E( 175,  0),
+    E(-175,  0), E( 176,  0), E(-176,  0), E( 177,  0), E(-177,  0),
+    E( 178,  0), E(-178,  0), E( 179,  0), E(-179,  0), E( 180,  0),
+    E(-180,  0), E( 181,  0), E(-181,  0), E( 182,  0), E(-182,  0),
+    E( 183,  0), E(-183,  0), E( 184,  0), E(-184,  0), E( 185,  0),
+    E(-185,  0), E( 186,  0), E(-186,  0), E( 187,  0), E(-187,  0),
+    E( 188,  0), E(-188,  0), E( 189,  0), E(-189,  0), E( 190,  0),
+    E(-190,  0), E( 191,  0), E(-191,  0), E( 192,  0), E(-192,  0),
+    E( 193,  0), E(-193,  0), E( 194,  0), E(-194,  0), E( 195,  0),
+    E(-195,  0), E( 196,  0), E(-196,  0), E( 197,  0), E(-197,  0),
+    E( 198,  0), E(-198,  0), E( 199,  0), E(-199,  0), E( 200,  0),
+    E(-200,  0), E( 201,  0), E(-201,  0), E( 202,  0), E(-202,  0),
+    E( 203,  0), E(-203,  0), E( 204,  0), E(-204,  0), E( 205,  0),
+    E(-205,  0), E( 206,  0), E(-206,  0), E( 207,  0), E(-207,  0),
+    E( 208,  0), E(-208,  0), E( 209,  0), E(-209,  0), E( 210,  0),
+    E(-210,  0), E( 211,  0), E(-211,  0), E( 212,  0), E(-212,  0),
+    E( 213,  0), E(-213,  0), E( 214,  0), E(-214,  0), E( 215,  0),
+    E(-215,  0), E( 216,  0), E(-216,  0), E( 217,  0), E(-217,  0),
+    E( 218,  0), E(-218,  0), E( 219,  0), E(-219,  0), E( 220,  0),
+    E(-220,  0), E( 221,  0), E(-221,  0), E( 222,  0), E(-222,  0),
+    E( 223,  0), E(-223,  0), E( 224,  0), E(-224,  0), E( 225,  0),
+    E(-225,  0), E( 226,  0), E(-226,  0), E( 227,  0), E(-227,  0),
+    E( 228,  0), E(-228,  0), E( 229,  0), E(-229,  0), E( 230,  0),
+    E(-230,  0), E( 231,  0), E(-231,  0), E( 232,  0), E(-232,  0),
+    E( 233,  0), E(-233,  0), E( 234,  0), E(-234,  0), E( 235,  0),
+    E(-235,  0), E( 236,  0), E(-236,  0), E( 237,  0), E(-237,  0),
+    E( 238,  0), E(-238,  0), E( 239,  0), E(-239,  0), E( 240,  0),
+    E(-240,  0), E( 241,  0), E(-241,  0), E( 242,  0), E(-242,  0),
+    E( 243,  0), E(-243,  0), E( 244,  0), E(-244,  0), E( 245,  0),
+    E(-245,  0), E( 246,  0), E(-246,  0), E( 247,  0), E(-247,  0),
+    E( 248,  0), E(-248,  0), E( 249,  0), E(-249,  0), E( 250,  0),
+    E(-250,  0), E( 251,  0), E(-251,  0), E( 252,  0), E(-252,  0),
+    E( 253,  0), E(-253,  0), E( 254,  0), E(-254,  0), E( 255,  0),
+    E(-255,  0), E(  13,  0), E( -13,  0), E(  14,  0), E( -14,  0),
+    E(  15,  0), E( -15,  0), E(  16,  0), E( -16,  0), E(  17,  0),
+    E( -17,  0), E(  18,  0), E( -18,  0), E(   5,  1), E(  -5,  1),
+    E(   6,  1), E(  -6,  1), E(   2,  2), E(  -2,  2), E(   1,  3),
+    E(  -1,  3), E(   0,  0), E(  19,  0), E( -19,  0), E(  20,  0),
+    E( -20,  0), E(  21,  0), E( -21,  0), E(  22,  0), E( -22,  0),
+    E(  23,  0), E( -23,  0), E(  24,  0), E( -24,  0), E(  25,  0),
+    E( -25,  0), E(   7,  1), E(  -7,  1), E(   8,  1), E(  -8,  1),
+    E(   3,  2), E(  -3,  2), E(   2,  3), E(  -2,  3), E(   1,  4),
+    E(  -1,  4), E(   1,  5), E(  -1,  5), E(  26,  0), E( -26,  0),
+    E(  27,  0), E( -27,  0), E(  28,  0), E( -28,  0), E(  29,  0),
+    E( -29,  0), E(  30,  0), E( -30,  0), E(  31,  0), E( -31,  0),
+    E(  32,  0), E( -32,  0), E(  33,  0), E( -33,  0), E(  34,  0),
+    E( -34,  0), E(  35,  0), E( -35,  0), E(  36,  0), E( -36,  0),
+    E(   0,  1), E(   9,  1), E(  -9,  1), E(  10,  1), E( -10,  1),
+    E(  11,  1), E( -11,  1), E(  12,  1), E( -12,  1), E(   0,  2),
+    E(   4,  2), E(  -4,  2), E(   5,  2), E(  -5,  2), E(   6,  2),
+    E(  -6,  2), E(   0,  3), E(   3,  3), E(  -3,  3), E(   4,  3),
+    E(  -4,  3), E(   0,  4), E(   2,  4), E(  -2,  4), E(   0,  5),
+    E(   1,  6), E(  -1,  6), E(   1,  7), E(  -1,  7), E(   1,  8),
+    E(  -1,  8), E(  37,  0), E( -37,  0), E(  38,  0), E( -38,  0),
+    E(  39,  0), E( -39,  0), E(  40,  0), E( -40,  0), E(  41,  0),
+    E( -41,  0), E(  42,  0), E( -42,  0), E(  43,  0), E( -43,  0),
+    E(  44,  0), E( -44,  0), E(  45,  0), E( -45,  0), E(  46,  0),
+    E( -46,  0), E(  47,  0), E( -47,  0), E(  48,  0), E( -48,  0),
+    E(  13,  1), E( -13,  1), E(  14,  1), E( -14,  1), E(  15,  1),
+    E( -15,  1), E(  16,  1), E( -16,  1), E(   7,  2), E(  -7,  2),
+    E(   8,  2), E(  -8,  2), E(   5,  3), E(  -5,  3), E(   6,  3),
+    E(  -6,  3), E(   3,  4), E(  -3,  4), E(   4,  4), E(  -4,  4),
+    E(   2,  5), E(  -2,  5), E(   0,  6), E(   2,  6), E(  -2,  6),
+    E(   0,  7), E(   0,  8), E(   0,  9), E(   1,  9), E(  -1,  9),
+    E(   1, 10), E(  -1, 10), E(   1, 11), E(  -1, 11), E(   1, 12),
+    E(  -1, 12), E(  49,  0), E( -49,  0), E(  50,  0), E( -50,  0),
+    E(  51,  0), E( -51,  0), E(  52,  0), E( -52,  0), E(  53,  0),
+    E( -53,  0), E(  54,  0), E( -54,  0), E(  55,  0), E( -55,  0),
+    E(  56,  0), E( -56,  0), E(  57,  0), E( -57,  0), E(  58,  0),
+    E( -58,  0), E(  59,  0), E( -59,  0), E(  60,  0), E( -60,  0),
+    E(  61,  0), E( -61,  0), E(  62,  0), E( -62,  0), E(  63,  0),
+    E( -63,  0), E(  17,  1), E( -17,  1), E(  18,  1), E( -18,  1),
+    E(  19,  1), E( -19,  1), E(  20,  1), E( -20,  1), E(  21,  1),
+    E( -21,  1), E(  22,  1), E( -22,  1), E(  23,  1), E( -23,  1),
+    E(  24,  1), E( -24,  1), E(   9,  2), E(  -9,  2), E(  10,  2),
+    E( -10,  2), E(  11,  2), E( -11,  2), E(  12,  2), E( -12,  2),
+    E(   7,  3), E(  -7,  3), E(   8,  3), E(  -8,  3), E(   5,  4),
+    E(  -5,  4), E(   6,  4), E(  -6,  4), E(   3,  5), E(  -3,  5),
+    E(   4,  5), E(  -4,  5), E(   5,  5), E(  -5,  5), E(   6,  5),
+    E(  -6,  5), E(   3,  6), E(  -3,  6), E(   4,  6), E(  -4,  6),
+    E(   2,  7), E(  -2,  7), E(   2,  8), E(  -2,  8), E(   2,  9),
+    E(  -2,  9), E(   0, 10), E(   2, 10), E(  -2, 10), E(   0, 11),
+    E(   0, 12), E(   0, 13), E(   1, 13), E(  -1, 13), E(   1, 14),
+    E(  -1, 14), E(   0,  0), E(   0,  1), E(   0,  2), E(   0,  3),
+    E(   0,  4), E(   0,  5), E(   0,  6), E(   0,  7), E(   0,  8),
+    E(   0,  9), E(   0, 10), E(   0, 11), E(   0, 12), E(   0, 13),
+    E(   0, 14), E(   0, 15), E(   0, 16), E(   0, 17), E(   0, 18),
+    E(   0, 19), E(   0, 20), E(   0, 21), E(   0, 22), E(   0, 23),
+    E(   0, 24), E(   0, 25), E(   0, 26), E(   0, 27), E(   0, 28),
+    E(   0, 29), E(   0, 30), E(   0, 31), E(   0, 32), E(   0, 33),
+    E(   0, 34), E(   0, 35), E(   0, 36), E(   0, 37), E(   0, 38),
+    E(   0, 39), E(   0, 40), E(   0, 41), E(   0, 42), E(   0, 43),
+    E(   0, 44), E(   0, 45), E(   0, 46), E(   0, 47), E(   0, 48),
+    E(   0, 49), E(   0, 50), E(   0, 51), E(   0, 52), E(   0, 53),
+    E(   0, 54), E(   0, 55), E(   0, 56), E(   0, 57), E(   0, 58),
+    E(   0, 59), E(   0, 60), E(   0, 61), E(   0, 62), E(   0, 63),
+    E(  25,  1), E( -25,  1), E(  26,  1), E( -26,  1), E(  27,  1),
+    E( -27,  1), E(  28,  1), E( -28,  1), E(  29,  1), E( -29,  1),
+    E(  30,  1), E( -30,  1), E(  31,  1), E( -31,  1), E(  32,  1),
+    E( -32,  1), E(  13,  2), E( -13,  2), E(  14,  2), E( -14,  2),
+    E(  15,  2), E( -15,  2), E(  16,  2), E( -16,  2), E(   9,  3),
+    E(  -9,  3), E(  10,  3), E( -10,  3), E(  11,  3), E( -11,  3),
+    E(   7,  4), E(  -7,  4), E(   3,  7), E(  -3,  7), E(   4,  7),
+    E(  -4,  7), E(   3,  8), E(  -3,  8), E(   4,  8), E(  -4,  8),
+    E(   3,  9), E(  -3,  9), E(   2, 11), E(  -2, 11), E(   2, 12),
+    E(  -2, 12), E(   0, 14),
+    // AC table Q16 - 512 elements
+    E(   1,  0), E(  -1,  0), E(   2,  0), E(  -2,  0), E(   3,  0),
+    E(  -3,  0), E(   4,  0), E(  -4,  0), E(   1,  1), E(  -1,  1),
+    E(   0, 64), E(   5,  0), E(  -5,  0), E(   6,  0), E(  -6,  0),
+    E(   2,  1), E(  -2,  1), E(   1,  2), E(  -1,  2), E(   7,  0),
+    E(  -7,  0), E(   8,  0), E(  -8,  0), E(   9,  0), E(  -9,  0),
+    E(   3,  1), E(  -3,  1), E(   1,  3), E(  -1,  3), E(   1,  4),
+    E(  -1,  4), E(  10,  0), E( -10,  0), E(  11,  0), E( -11,  0),
+    E(  12,  0), E( -12,  0), E(   4,  1), E(  -4,  1), E(   2,  2),
+    E(  -2,  2), E(   1,  5), E(  -1,  5), E(   1,  6), E(  -1,  6),
+    E(  13,  0), E( -13,  0), E(  14,  0), E( -14,  0), E(  15,  0),
+    E( -15,  0), E(  16,  0), E( -16,  0), E(  17,  0), E( -17,  0),
+    E(   5,  1), E(  -5,  1), E(   2,  3), E(  -2,  3), E(   1,  7),
+    E(  -1,  7), E(   1,  8), E(  -1,  8), E(   1,  9), E(  -1,  9),
+    E(   1, 10), E(  -1, 10), E(   0,  0), E(  18,  0), E( -18,  0),
+    E(  19,  0), E( -19,  0), E(  20,  0), E( -20,  0), E(  21,  0),
+    E( -21,  0), E(  22,  0), E( -22,  0), E(   6,  1), E(  -6,  1),
+    E(   7,  1), E(  -7,  1), E(   3,  2), E(  -3,  2), E(   2,  4),
+    E(  -2,  4), E(   2,  5), E(  -2,  5), E(   1, 11), E(  -1, 11),
+    E(   1, 12), E(  -1, 12), E(   1, 13), E(  -1, 13), E(   0,  0),
+    E(   0,  1), E(   0,  2), E(   0,  3), E(   0,  4), E(   0,  5),
+    E(   0,  6), E(   0,  7), E(   0,  8), E(   0,  9), E(   0, 10),
+    E(   0, 11), E(   0, 12), E(   0, 13), E(   0, 14), E(   0, 15),
+    E(   0, 16), E(   0, 17), E(   0, 18), E(   0, 19), E(   0, 20),
+    E(   0, 21), E(   0, 22), E(   0, 23), E(   0, 24), E(   0, 25),
+    E(   0, 26), E(   0, 27), E(   0, 28), E(   0, 29), E(   0, 30),
+    E(   0, 31), E(   0, 32), E(   0, 33), E(   0, 34), E(   0, 35),
+    E(   0, 36), E(   0, 37), E(   0, 38), E(   0, 39), E(   0, 40),
+    E(   0, 41), E(   0, 42), E(   0, 43), E(   0, 44), E(   0, 45),
+    E(   0, 46), E(   0, 47), E(   0, 48), E(   0, 49), E(   0, 50),
+    E(   0, 51), E(   0, 52), E(   0, 53), E(   0, 54), E(   0, 55),
+    E(   0, 56), E(   0, 57), E(   0, 58), E(   0, 59), E(   0, 60),
+    E(   0, 61), E(   0, 62), E(   0, 63), E(   0,  0), E(   1,  0),
+    E(  -1,  0), E(   2,  0), E(  -2,  0), E(   3,  0), E(  -3,  0),
+    E(   4,  0), E(  -4,  0), E(   5,  0), E(  -5,  0), E(   6,  0),
+    E(  -6,  0), E(   7,  0), E(  -7,  0), E(   8,  0), E(  -8,  0),
+    E(   9,  0), E(  -9,  0), E(  10,  0), E( -10,  0), E(  11,  0),
+    E( -11,  0), E(  12,  0), E( -12,  0), E(  13,  0), E( -13,  0),
+    E(  14,  0), E( -14,  0), E(  15,  0), E( -15,  0), E(  16,  0),
+    E( -16,  0), E(  17,  0), E( -17,  0), E(  18,  0), E( -18,  0),
+    E(  19,  0), E( -19,  0), E(  20,  0), E( -20,  0), E(  21,  0),
+    E( -21,  0), E(  22,  0), E( -22,  0), E(  23,  0), E( -23,  0),
+    E(  24,  0), E( -24,  0), E(  25,  0), E( -25,  0), E(  26,  0),
+    E( -26,  0), E(  27,  0), E( -27,  0), E(  28,  0), E( -28,  0),
+    E(  29,  0), E( -29,  0), E(  30,  0), E( -30,  0), E(  31,  0),
+    E( -31,  0), E(  32,  0), E( -32,  0), E(  33,  0), E( -33,  0),
+    E(  34,  0), E( -34,  0), E(  35,  0), E( -35,  0), E(  36,  0),
+    E( -36,  0), E(  37,  0), E( -37,  0), E(  38,  0), E( -38,  0),
+    E(  39,  0), E( -39,  0), E(  40,  0), E( -40,  0), E(  41,  0),
+    E( -41,  0), E(  42,  0), E( -42,  0), E(  43,  0), E( -43,  0),
+    E(  44,  0), E( -44,  0), E(  45,  0), E( -45,  0), E(  46,  0),
+    E( -46,  0), E(  47,  0), E( -47,  0), E(  48,  0), E( -48,  0),
+    E(  49,  0), E( -49,  0), E(  50,  0), E( -50,  0), E(  51,  0),
+    E( -51,  0), E(  52,  0), E( -52,  0), E(  53,  0), E( -53,  0),
+    E(  54,  0), E( -54,  0), E(  55,  0), E( -55,  0), E(  56,  0),
+    E( -56,  0), E(  57,  0), E( -57,  0), E(  58,  0), E( -58,  0),
+    E(  59,  0), E( -59,  0), E(  60,  0), E( -60,  0), E(  61,  0),
+    E( -61,  0), E(  62,  0), E( -62,  0), E(  63,  0), E( -63,  0),
+    E(  64,  0), E( -64,  0), E(  65,  0), E( -65,  0), E(  66,  0),
+    E( -66,  0), E(  67,  0), E( -67,  0), E(  68,  0), E( -68,  0),
+    E(  69,  0), E( -69,  0), E(  70,  0), E( -70,  0), E(  71,  0),
+    E( -71,  0), E(  72,  0), E( -72,  0), E(  73,  0), E( -73,  0),
+    E(  74,  0), E( -74,  0), E(  75,  0), E( -75,  0), E(  76,  0),
+    E( -76,  0), E(  77,  0), E( -77,  0), E(  78,  0), E( -78,  0),
+    E(  79,  0), E( -79,  0), E(  80,  0), E( -80,  0), E(  81,  0),
+    E( -81,  0), E(  82,  0), E( -82,  0), E(  83,  0), E( -83,  0),
+    E(  84,  0), E( -84,  0), E(  85,  0), E( -85,  0), E(  86,  0),
+    E( -86,  0), E(  87,  0), E( -87,  0), E(  88,  0), E( -88,  0),
+    E(  89,  0), E( -89,  0), E(  90,  0), E( -90,  0), E(  91,  0),
+    E( -91,  0), E(  92,  0), E( -92,  0), E(  93,  0), E( -93,  0),
+    E(  94,  0), E( -94,  0), E(  95,  0), E( -95,  0), E(  96,  0),
+    E( -96,  0), E(  97,  0), E( -97,  0), E(  98,  0), E( -98,  0),
+    E(  99,  0), E( -99,  0), E( 100,  0), E(-100,  0), E( 101,  0),
+    E(-101,  0), E( 102,  0), E(-102,  0), E( 103,  0), E(-103,  0),
+    E( 104,  0), E(-104,  0), E( 105,  0), E(-105,  0), E( 106,  0),
+    E(-106,  0), E( 107,  0), E(-107,  0), E( 108,  0), E(-108,  0),
+    E( 109,  0), E(-109,  0), E( 110,  0), E(-110,  0), E( 111,  0),
+    E(-111,  0), E( 112,  0), E(-112,  0), E( 113,  0), E(-113,  0),
+    E( 114,  0), E(-114,  0), E( 115,  0), E(-115,  0), E( 116,  0),
+    E(-116,  0), E( 117,  0), E(-117,  0), E( 118,  0), E(-118,  0),
+    E( 119,  0), E(-119,  0), E( 120,  0), E(-120,  0), E( 121,  0),
+    E(-121,  0), E( 122,  0), E(-122,  0), E( 123,  0), E(-123,  0),
+    E( 124,  0), E(-124,  0), E( 125,  0), E(-125,  0), E( 126,  0),
+    E(-126,  0), E( 127,  0), E(-127,  0), E(  23,  0), E( -23,  0),
+    E(  24,  0), E( -24,  0), E(  25,  0), E( -25,  0), E(  26,  0),
+    E( -26,  0), E(  27,  0), E( -27,  0), E(  28,  0), E( -28,  0),
+    E(   8,  1), E(  -8,  1), E(   9,  1), E(  -9,  1), E(   4,  2),
+    E(  -4,  2), E(   3,  3), E(  -3,  3), E(   3,  4), E(  -3,  4),
+    E(   2,  6), E(  -2,  6), E(   2,  7), E(  -2,  7), E(  29,  0),
+    E( -29,  0), E(  30,  0), E( -30,  0), E(  31,  0), E( -31,  0),
+    E(  32,  0), E( -32,  0), E(  33,  0), E( -33,  0), E(  34,  0),
+    E( -34,  0), E(  35,  0), E( -35,  0), E(   0,  1), E(  10,  1),
+    E( -10,  1), E(  11,  1), E( -11,  1), E(  12,  1), E( -12,  1),
+    E(   0,  2), E(   5,  2), E(  -5,  2), E(   0,  3), E(   4,  3),
+    E(  -4,  3), E(   3,  5), E(  -3,  5), E(   2,  8), E(  -2,  8),
+    E(   2,  9), E(  -2,  9), E(   1, 14), E(  -1, 14), E(   1, 15),
+    E(  -1, 15), E(  36,  0), E( -36,  0), E(  37,  0), E( -37,  0),
+    E(  38,  0), E( -38,  0), E(  39,  0), E( -39,  0), E(  40,  0),
+    E( -40,  0), E(  13,  1), E( -13,  1), E(  14,  1), E( -14,  1),
+    E(  15,  1), E( -15,  1), E(   6,  2), E(  -6,  2), E(   7,  2),
+    E(  -7,  2), E(   5,  3), E(  -5,  3), E(   0,  4), E(   4,  4),
+    E(  -4,  4), E(   0,  5), E(   0,  6), E(   3,  6), E(  -3,  6),
+    E(   0,  7), E(   3,  7), E(  -3,  7), E(   2, 10), E(  -2, 10),
+    E(   1, 16), E(  -1, 16),
+    // AC table Q32 - 354 elements
+    E(  1,  0), E( -1,  0), E(  2,  0), E( -2,  0), E(  0, 64), E(  3,  0),
+    E( -3,  0), E(  1,  1), E( -1,  1), E(  4,  0), E( -4,  0), E(  5,  0),
+    E( -5,  0), E(  2,  1), E( -2,  1), E(  1,  2), E( -1,  2), E(  1,  3),
+    E( -1,  3), E(  6,  0), E( -6,  0), E(  7,  0), E( -7,  0), E(  3,  1),
+    E( -3,  1), E(  1,  4), E( -1,  4), E(  1,  5), E( -1,  5), E(  8,  0),
+    E( -8,  0), E(  9,  0), E( -9,  0), E( 10,  0), E(-10,  0), E(  4,  1),
+    E( -4,  1), E(  2,  2), E( -2,  2), E(  1,  6), E( -1,  6), E(  1,  7),
+    E( -1,  7), E(  1,  8), E( -1,  8), E( 11,  0), E(-11,  0), E( 12,  0),
+    E(-12,  0), E( 13,  0), E(-13,  0), E(  5,  1), E( -5,  1), E(  2,  3),
+    E( -2,  3), E(  1,  9), E( -1,  9), E(  1, 10), E( -1, 10), E( 14,  0),
+    E(-14,  0), E( 15,  0), E(-15,  0), E( 16,  0), E(-16,  0), E(  6,  1),
+    E( -6,  1), E(  7,  1), E( -7,  1), E(  3,  2), E( -3,  2), E(  3,  3),
+    E( -3,  3), E(  2,  4), E( -2,  4), E(  2,  5), E( -2,  5), E(  1, 11),
+    E( -1, 11), E(  1, 12), E( -1, 12), E(  1, 13), E( -1, 13), E(  0,  0),
+    E(  0,  1), E(  0,  2), E(  0,  3), E(  0,  4), E(  0,  5), E(  0,  6),
+    E(  0,  7), E(  0,  8), E(  0,  9), E(  0, 10), E(  0, 11), E(  0, 12),
+    E(  0, 13), E(  0, 14), E(  0, 15), E(  0, 16), E(  0, 17), E(  0, 18),
+    E(  0, 19), E(  0, 20), E(  0, 21), E(  0, 22), E(  0, 23), E(  0, 24),
+    E(  0, 25), E(  0, 26), E(  0, 27), E(  0, 28), E(  0, 29), E(  0, 30),
+    E(  0, 31), E(  0, 32), E(  0, 33), E(  0, 34), E(  0, 35), E(  0, 36),
+    E(  0, 37), E(  0, 38), E(  0, 39), E(  0, 40), E(  0, 41), E(  0, 42),
+    E(  0, 43), E(  0, 44), E(  0, 45), E(  0, 46), E(  0, 47), E(  0, 48),
+    E(  0, 49), E(  0, 50), E(  0, 51), E(  0, 52), E(  0, 53), E(  0, 54),
+    E(  0, 55), E(  0, 56), E(  0, 57), E(  0, 58), E(  0, 59), E(  0, 60),
+    E(  0, 61), E(  0, 62), E(  0, 63), E(  0,  0), E( 17,  0), E(-17,  0),
+    E( 18,  0), E(-18,  0), E( 19,  0), E(-19,  0), E( 20,  0), E(-20,  0),
+    E(  8,  1), E( -8,  1), E(  9,  1), E( -9,  1), E(  4,  2), E( -4,  2),
+    E(  3,  4), E( -3,  4), E(  2,  6), E( -2,  6), E(  2,  7), E( -2,  7),
+    E(  2,  8), E( -2,  8), E(  1, 14), E( -1, 14), E(  0,  0), E(  1,  0),
+    E( -1,  0), E(  2,  0), E( -2,  0), E(  3,  0), E( -3,  0), E(  4,  0),
+    E( -4,  0), E(  5,  0), E( -5,  0), E(  6,  0), E( -6,  0), E(  7,  0),
+    E( -7,  0), E(  8,  0), E( -8,  0), E(  9,  0), E( -9,  0), E( 10,  0),
+    E(-10,  0), E( 11,  0), E(-11,  0), E( 12,  0), E(-12,  0), E( 13,  0),
+    E(-13,  0), E( 14,  0), E(-14,  0), E( 15,  0), E(-15,  0), E( 16,  0),
+    E(-16,  0), E( 17,  0), E(-17,  0), E( 18,  0), E(-18,  0), E( 19,  0),
+    E(-19,  0), E( 20,  0), E(-20,  0), E( 21,  0), E(-21,  0), E( 22,  0),
+    E(-22,  0), E( 23,  0), E(-23,  0), E( 24,  0), E(-24,  0), E( 25,  0),
+    E(-25,  0), E( 26,  0), E(-26,  0), E( 27,  0), E(-27,  0), E( 28,  0),
+    E(-28,  0), E( 29,  0), E(-29,  0), E( 30,  0), E(-30,  0), E( 31,  0),
+    E(-31,  0), E( 32,  0), E(-32,  0), E( 33,  0), E(-33,  0), E( 34,  0),
+    E(-34,  0), E( 35,  0), E(-35,  0), E( 36,  0), E(-36,  0), E( 37,  0),
+    E(-37,  0), E( 38,  0), E(-38,  0), E( 39,  0), E(-39,  0), E( 40,  0),
+    E(-40,  0), E( 41,  0), E(-41,  0), E( 42,  0), E(-42,  0), E( 43,  0),
+    E(-43,  0), E( 44,  0), E(-44,  0), E( 45,  0), E(-45,  0), E( 46,  0),
+    E(-46,  0), E( 47,  0), E(-47,  0), E( 48,  0), E(-48,  0), E( 49,  0),
+    E(-49,  0), E( 50,  0), E(-50,  0), E( 51,  0), E(-51,  0), E( 52,  0),
+    E(-52,  0), E( 53,  0), E(-53,  0), E( 54,  0), E(-54,  0), E( 55,  0),
+    E(-55,  0), E( 56,  0), E(-56,  0), E( 57,  0), E(-57,  0), E( 58,  0),
+    E(-58,  0), E( 59,  0), E(-59,  0), E( 60,  0), E(-60,  0), E( 61,  0),
+    E(-61,  0), E( 62,  0), E(-62,  0), E( 63,  0), E(-63,  0), E( 21,  0),
+    E(-21,  0), E( 22,  0), E(-22,  0), E( 23,  0), E(-23,  0), E(  0,  1),
+    E( 10,  1), E(-10,  1), E( 11,  1), E(-11,  1), E(  0,  2), E(  5,  2),
+    E( -5,  2), E(  6,  2), E( -6,  2), E(  0,  3), E(  4,  3), E( -4,  3),
+    E(  0,  4), E(  3,  5), E( -3,  5), E(  3,  6), E( -3,  6), E(  2,  9),
+    E( -2,  9), E(  1, 15), E( -1, 15), E( 24,  0), E(-24,  0), E( 25,  0),
+    E(-25,  0), E( 26,  0), E(-26,  0), E( 12,  1), E(-12,  1), E( 13,  1),
+    E(-13,  1), E(  5,  3), E( -5,  3), E(  4,  4), E( -4,  4), E(  0,  5),
+    E(  4,  5), E( -4,  5), E(  0,  6), E(  0,  7), E(  3,  7), E( -3,  7),
+    E(  0,  8), E(  3,  8), E( -3,  8), E(  0,  9), E(  1, 16), E( -1, 16),
+    // AC table Q64 - 257 elements
+    E(  1,  0), E( -1,  0), E(  0, 64), E(  2,  0), E( -2,  0), E(  3,  0),
+    E( -3,  0), E(  1,  1), E( -1,  1), E(  4,  0), E( -4,  0), E(  2,  1),
+    E( -2,  1), E(  1,  2), E( -1,  2), E(  5,  0), E( -5,  0), E(  1,  3),
+    E( -1,  3), E(  1,  4), E( -1,  4), E(  6,  0), E( -6,  0), E(  3,  1),
+    E( -3,  1), E(  2,  2), E( -2,  2), E(  1,  5), E( -1,  5), E(  1,  6),
+    E( -1,  6), E(  1,  7), E( -1,  7), E(  7,  0), E( -7,  0), E(  8,  0),
+    E( -8,  0), E(  4,  1), E( -4,  1), E(  2,  3), E( -2,  3), E(  1,  8),
+    E( -1,  8), E(  1,  9), E( -1,  9), E(  9,  0), E( -9,  0), E( 10,  0),
+    E(-10,  0), E(  5,  1), E( -5,  1), E(  3,  2), E( -3,  2), E(  2,  4),
+    E( -2,  4), E(  2,  5), E( -2,  5), E(  1, 10), E( -1, 10), E(  1, 11),
+    E( -1, 11), E(  0,  0), E(  0,  1), E(  0,  2), E(  0,  3), E(  0,  4),
+    E(  0,  5), E(  0,  6), E(  0,  7), E(  0,  8), E(  0,  9), E(  0, 10),
+    E(  0, 11), E(  0, 12), E(  0, 13), E(  0, 14), E(  0, 15), E(  0, 16),
+    E(  0, 17), E(  0, 18), E(  0, 19), E(  0, 20), E(  0, 21), E(  0, 22),
+    E(  0, 23), E(  0, 24), E(  0, 25), E(  0, 26), E(  0, 27), E(  0, 28),
+    E(  0, 29), E(  0, 30), E(  0, 31), E(  0, 32), E(  0, 33), E(  0, 34),
+    E(  0, 35), E(  0, 36), E(  0, 37), E(  0, 38), E(  0, 39), E(  0, 40),
+    E(  0, 41), E(  0, 42), E(  0, 43), E(  0, 44), E(  0, 45), E(  0, 46),
+    E(  0, 47), E(  0, 48), E(  0, 49), E(  0, 50), E(  0, 51), E(  0, 52),
+    E(  0, 53), E(  0, 54), E(  0, 55), E(  0, 56), E(  0, 57), E(  0, 58),
+    E(  0, 59), E(  0, 60), E(  0, 61), E(  0, 62), E(  0, 63), E(  0,  0),
+    E( 11,  0), E(-11,  0), E( 12,  0), E(-12,  0), E(  6,  1), E( -6,  1),
+    E(  7,  1), E( -7,  1), E(  3,  3), E( -3,  3), E(  3,  4), E( -3,  4),
+    E(  3,  5), E( -3,  5), E(  2,  6), E( -2,  6), E(  2,  7), E( -2,  7),
+    E(  1, 12), E( -1, 12), E(  1, 13), E( -1, 13), E(  1, 14), E( -1, 14),
+    E( 13,  0), E(-13,  0), E( 14,  0), E(-14,  0), E(  0,  1), E(  8,  1),
+    E( -8,  1), E(  4,  2), E( -4,  2), E(  4,  3), E( -4,  3), E(  2,  8),
+    E( -2,  8), E(  2,  9), E( -2,  9), E(  1, 15), E( -1, 15), E(  0,  0),
+    E(  1,  0), E( -1,  0), E(  2,  0), E( -2,  0), E(  3,  0), E( -3,  0),
+    E(  4,  0), E( -4,  0), E(  5,  0), E( -5,  0), E(  6,  0), E( -6,  0),
+    E(  7,  0), E( -7,  0), E(  8,  0), E( -8,  0), E(  9,  0), E( -9,  0),
+    E( 10,  0), E(-10,  0), E( 11,  0), E(-11,  0), E( 12,  0), E(-12,  0),
+    E( 13,  0), E(-13,  0), E( 14,  0), E(-14,  0), E( 15,  0), E(-15,  0),
+    E( 16,  0), E(-16,  0), E( 17,  0), E(-17,  0), E( 18,  0), E(-18,  0),
+    E( 19,  0), E(-19,  0), E( 20,  0), E(-20,  0), E( 21,  0), E(-21,  0),
+    E( 22,  0), E(-22,  0), E( 23,  0), E(-23,  0), E( 24,  0), E(-24,  0),
+    E( 25,  0), E(-25,  0), E( 26,  0), E(-26,  0), E( 27,  0), E(-27,  0),
+    E( 28,  0), E(-28,  0), E( 29,  0), E(-29,  0), E( 30,  0), E(-30,  0),
+    E( 31,  0), E(-31,  0), E( 15,  0), E(-15,  0), E(  9,  1), E( -9,  1),
+    E( 10,  1), E(-10,  1), E(  0,  2), E(  5,  2), E( -5,  2), E(  0,  3),
+    E(  5,  3), E( -5,  3), E(  0,  4), E(  4,  4), E( -4,  4), E(  0,  5),
+    E(  4,  5), E( -4,  5), E(  0,  6), E(  3,  6), E( -3,  6), E(  3,  7),
+    E( -3,  7), E(  1, 16), E( -1, 16), E(  1, 17), E( -1, 17),
+    // AC table Q128 - 194 elements
+    E(  1,  0), E( -1,  0), E(  0, 64), E(  1,  1), E( -1,  1), E(  2,  0),
+    E( -2,  0), E(  3,  0), E( -3,  0), E(  2,  1), E( -2,  1), E(  1,  2),
+    E( -1,  2), E(  1,  3), E( -1,  3), E(  1,  4), E( -1,  4), E(  4,  0),
+    E( -4,  0), E(  1,  5), E( -1,  5), E(  1,  6), E( -1,  6), E(  1,  7),
+    E( -1,  7), E(  5,  0), E( -5,  0), E(  3,  1), E( -3,  1), E(  2,  2),
+    E( -2,  2), E(  2,  3), E( -2,  3), E(  1,  8), E( -1,  8), E(  1,  9),
+    E( -1,  9), E(  6,  0), E( -6,  0), E(  4,  1), E( -4,  1), E(  2,  4),
+    E( -2,  4), E(  2,  5), E( -2,  5), E(  1, 10), E( -1, 10), E(  7,  0),
+    E( -7,  0), E(  5,  1), E( -5,  1), E(  3,  2), E( -3,  2), E(  3,  3),
+    E( -3,  3), E(  2,  6), E( -2,  6), E(  0,  0), E(  0,  1), E(  0,  2),
+    E(  0,  3), E(  0,  4), E(  0,  5), E(  0,  6), E(  0,  7), E(  0,  8),
+    E(  0,  9), E(  0, 10), E(  0, 11), E(  0, 12), E(  0, 13), E(  0, 14),
+    E(  0, 15), E(  0, 16), E(  0, 17), E(  0, 18), E(  0, 19), E(  0, 20),
+    E(  0, 21), E(  0, 22), E(  0, 23), E(  0, 24), E(  0, 25), E(  0, 26),
+    E(  0, 27), E(  0, 28), E(  0, 29), E(  0, 30), E(  0, 31), E(  0, 32),
+    E(  0, 33), E(  0, 34), E(  0, 35), E(  0, 36), E(  0, 37), E(  0, 38),
+    E(  0, 39), E(  0, 40), E(  0, 41), E(  0, 42), E(  0, 43), E(  0, 44),
+    E(  0, 45), E(  0, 46), E(  0, 47), E(  0, 48), E(  0, 49), E(  0, 50),
+    E(  0, 51), E(  0, 52), E(  0, 53), E(  0, 54), E(  0, 55), E(  0, 56),
+    E(  0, 57), E(  0, 58), E(  0, 59), E(  0, 60), E(  0, 61), E(  0, 62),
+    E(  0, 63), E(  6,  1), E( -6,  1), E(  7,  1), E( -7,  1), E(  3,  4),
+    E( -3,  4), E(  3,  5), E( -3,  5), E(  2,  7), E( -2,  7), E(  2,  8),
+    E( -2,  8), E(  2,  9), E( -2,  9), E(  1, 11), E( -1, 11), E(  1, 12),
+    E( -1, 12), E(  1, 13), E( -1, 13), E(  0,  0), E(  8,  0), E( -8,  0),
+    E(  9,  0), E( -9,  0), E(  8,  1), E( -8,  1), E(  4,  2), E( -4,  2),
+    E(  4,  3), E( -4,  3), E(  3,  6), E( -3,  6), E(  1, 14), E( -1, 14),
+    E(  1, 15), E( -1, 15), E(  1, 16), E( -1, 16), E(  0,  1), E(  0,  2),
+    E(  0,  3), E(  0,  0), E(  1,  0), E( -1,  0), E(  2,  0), E( -2,  0),
+    E(  3,  0), E( -3,  0), E(  4,  0), E( -4,  0), E(  5,  0), E( -5,  0),
+    E(  6,  0), E( -6,  0), E(  7,  0), E( -7,  0), E(  8,  0), E( -8,  0),
+    E(  9,  0), E( -9,  0), E( 10,  0), E(-10,  0), E( 11,  0), E(-11,  0),
+    E( 12,  0), E(-12,  0), E( 13,  0), E(-13,  0), E( 14,  0), E(-14,  0),
+    E( 15,  0), E(-15,  0),
 };
 
-static const HQXLUT ac32_lut[] = {
-    RPT_256 (   1,  0,  3 ), RPT_256 (  -1,  0,  3 ),
-    RPT_128 (   2,  0,  4 ), RPT_128 (  -2,  0,  4 ),
-    RPT_256 (   0, 64,  3 ), RPT_64  (   3,  0,  5 ),
-    RPT_64  (  -3,  0,  5 ), RPT_64  (   1,  1,  5 ),
-    RPT_64  (  -1,  1,  5 ), RPT_32  (   4,  0,  6 ),
-    RPT_32  (  -4,  0,  6 ), RPT_32  (   5,  0,  6 ),
-    RPT_32  (  -5,  0,  6 ), RPT_32  (   2,  1,  6 ),
-    RPT_32  (  -2,  1,  6 ), RPT_32  (   1,  2,  6 ),
-    RPT_32  (  -1,  2,  6 ), RPT_32  (   1,  3,  6 ),
-    RPT_32  (  -1,  3,  6 ), RPT_16  (   6,  0,  7 ),
-    RPT_16  (  -6,  0,  7 ), RPT_16  (   7,  0,  7 ),
-    RPT_16  (  -7,  0,  7 ), RPT_16  (   3,  1,  7 ),
-    RPT_16  (  -3,  1,  7 ), RPT_16  (   1,  4,  7 ),
-    RPT_16  (  -1,  4,  7 ), RPT_16  (   1,  5,  7 ),
-    RPT_16  (  -1,  5,  7 ), RPT_8   (   8,  0,  8 ),
-    RPT_8   (  -8,  0,  8 ), RPT_8   (   9,  0,  8 ),
-    RPT_8   (  -9,  0,  8 ), RPT_8   (  10,  0,  8 ),
-    RPT_8   ( -10,  0,  8 ), RPT_8   (   4,  1,  8 ),
-    RPT_8   (  -4,  1,  8 ), RPT_8   (   2,  2,  8 ),
-    RPT_8   (  -2,  2,  8 ), RPT_8   (   1,  6,  8 ),
-    RPT_8   (  -1,  6,  8 ), RPT_8   (   1,  7,  8 ),
-    RPT_8   (  -1,  7,  8 ), RPT_8   (   1,  8,  8 ),
-    RPT_8   (  -1,  8,  8 ), RPT_4   (  11,  0,  9 ),
-    RPT_4   ( -11,  0,  9 ), RPT_4   (  12,  0,  9 ),
-    RPT_4   ( -12,  0,  9 ), RPT_4   (  13,  0,  9 ),
-    RPT_4   ( -13,  0,  9 ), RPT_4   (   5,  1,  9 ),
-    RPT_4   (  -5,  1,  9 ), RPT_4   (   2,  3,  9 ),
-    RPT_4   (  -2,  3,  9 ), RPT_4   (   1,  9,  9 ),
-    RPT_4   (  -1,  9,  9 ), RPT_4   (   1, 10,  9 ),
-    RPT_4   (  -1, 10,  9 ), RPT_2   (  14,  0, 10 ),
-    RPT_2   ( -14,  0, 10 ), RPT_2   (  15,  0, 10 ),
-    RPT_2   ( -15,  0, 10 ), RPT_2   (  16,  0, 10 ),
-    RPT_2   ( -16,  0, 10 ), RPT_2   (   6,  1, 10 ),
-    RPT_2   (  -6,  1, 10 ), RPT_2   (   7,  1, 10 ),
-    RPT_2   (  -7,  1, 10 ), RPT_2   (   3,  2, 10 ),
-    RPT_2   (  -3,  2, 10 ), RPT_2   (   3,  3, 10 ),
-    RPT_2   (  -3,  3, 10 ), RPT_2   (   2,  4, 10 ),
-    RPT_2   (  -2,  4, 10 ), RPT_2   (   2,  5, 10 ),
-    RPT_2   (  -2,  5, 10 ), RPT_2   (   1, 11, 10 ),
-    RPT_2   (  -1, 11, 10 ), RPT_2   (   1, 12, 10 ),
-    RPT_2   (  -1, 12, 10 ), RPT_2   (   1, 13, 10 ),
-    RPT_2   (  -1, 13, 10 ), { 2048,  0, -1 }, { 2112,  0, -1 },
-    { 2176,  0, -1 }, { 2240,  0, -1 }, RPT_2   (   0,  0, 10 ),
-    {   17,  0, 11 }, {  -17,  0, 11 }, {   18,  0, 11 }, {  -18,  0, 11 },
-    {   19,  0, 11 }, {  -19,  0, 11 }, {   20,  0, 11 }, {  -20,  0, 11 },
-    {    8,  1, 11 }, {   -8,  1, 11 }, {    9,  1, 11 }, {   -9,  1, 11 },
-    {    4,  2, 11 }, {   -4,  2, 11 }, {    3,  4, 11 }, {   -3,  4, 11 },
-    {    2,  6, 11 }, {   -2,  6, 11 }, {    2,  7, 11 }, {   -2,  7, 11 },
-    {    2,  8, 11 }, {   -2,  8, 11 }, {    1, 14, 11 }, {   -1, 14, 11 },
-    { 2304,  0, -1 }, { 2368,  0, -1 }, { 2432,  0, -1 }, { 2496,  0, -1 },
-    { 2560,  0, -1 }, {    0,  1, 11 }, { 2624,  0, -1 }, { 2688,  0, -1 },
-    {    0,  2, 11 }, { 2752,  0, -1 }, { 2816,  0, -1 }, {    0,  3, 11 },
-    { 2880,  0, -1 }, {    0,  4, 11 }, { 2944,  0, -1 }, { 3008,  0, -1 },
-    { 3072,  0, -1 }, { 3136,  0, -1 }, { 3200,  0, -1 }, { 3264,  0, -1 },
-    { 3328,  0, -1 }, { 3392,  0, -1 }, { 3456,  0, -1 }, { 3520,  0, -1 },
-    { 3584,  0, -1 }, { 3648,  0, -1 }, RPT_4   (   0,  0, 15 ),
-    RPT_4   (   0,  1, 15 ), RPT_4   (   0,  2, 15 ),
-    RPT_4   (   0,  3, 15 ), RPT_4   (   0,  4, 15 ),
-    RPT_4   (   0,  5, 15 ), RPT_4   (   0,  6, 15 ),
-    RPT_4   (   0,  7, 15 ), RPT_4   (   0,  8, 15 ),
-    RPT_4   (   0,  9, 15 ), RPT_4   (   0, 10, 15 ),
-    RPT_4   (   0, 11, 15 ), RPT_4   (   0, 12, 15 ),
-    RPT_4   (   0, 13, 15 ), RPT_4   (   0, 14, 15 ),
-    RPT_4   (   0, 15, 15 ), RPT_4   (   0, 16, 15 ),
-    RPT_4   (   0, 17, 15 ), RPT_4   (   0, 18, 15 ),
-    RPT_4   (   0, 19, 15 ), RPT_4   (   0, 20, 15 ),
-    RPT_4   (   0, 21, 15 ), RPT_4   (   0, 22, 15 ),
-    RPT_4   (   0, 23, 15 ), RPT_4   (   0, 24, 15 ),
-    RPT_4   (   0, 25, 15 ), RPT_4   (   0, 26, 15 ),
-    RPT_4   (   0, 27, 15 ), RPT_4   (   0, 28, 15 ),
-    RPT_4   (   0, 29, 15 ), RPT_4   (   0, 30, 15 ),
-    RPT_4   (   0, 31, 15 ), RPT_4   (   0, 32, 15 ),
-    RPT_4   (   0, 33, 15 ), RPT_4   (   0, 34, 15 ),
-    RPT_4   (   0, 35, 15 ), RPT_4   (   0, 36, 15 ),
-    RPT_4   (   0, 37, 15 ), RPT_4   (   0, 38, 15 ),
-    RPT_4   (   0, 39, 15 ), RPT_4   (   0, 40, 15 ),
-    RPT_4   (   0, 41, 15 ), RPT_4   (   0, 42, 15 ),
-    RPT_4   (   0, 43, 15 ), RPT_4   (   0, 44, 15 ),
-    RPT_4   (   0, 45, 15 ), RPT_4   (   0, 46, 15 ),
-    RPT_4   (   0, 47, 15 ), RPT_4   (   0, 48, 15 ),
-    RPT_4   (   0, 49, 15 ), RPT_4   (   0, 50, 15 ),
-    RPT_4   (   0, 51, 15 ), RPT_4   (   0, 52, 15 ),
-    RPT_4   (   0, 53, 15 ), RPT_4   (   0, 54, 15 ),
-    RPT_4   (   0, 55, 15 ), RPT_4   (   0, 56, 15 ),
-    RPT_4   (   0, 57, 15 ), RPT_4   (   0, 58, 15 ),
-    RPT_4   (   0, 59, 15 ), RPT_4   (   0, 60, 15 ),
-    RPT_4   (   0, 61, 15 ), RPT_4   (   0, 62, 15 ),
-    RPT_4   (   0, 63, 15 ), RPT_2   (   0,  0, 16 ),
-    {    1,  0, 17 }, {   -1,  0, 17 }, {    2,  0, 17 }, {   -2,  0, 17 },
-    {    3,  0, 17 }, {   -3,  0, 17 }, {    4,  0, 17 }, {   -4,  0, 17 },
-    {    5,  0, 17 }, {   -5,  0, 17 }, {    6,  0, 17 }, {   -6,  0, 17 },
-    {    7,  0, 17 }, {   -7,  0, 17 }, {    8,  0, 17 }, {   -8,  0, 17 },
-    {    9,  0, 17 }, {   -9,  0, 17 }, {   10,  0, 17 }, {  -10,  0, 17 },
-    {   11,  0, 17 }, {  -11,  0, 17 }, {   12,  0, 17 }, {  -12,  0, 17 },
-    {   13,  0, 17 }, {  -13,  0, 17 }, {   14,  0, 17 }, {  -14,  0, 17 },
-    {   15,  0, 17 }, {  -15,  0, 17 }, {   16,  0, 17 }, {  -16,  0, 17 },
-    {   17,  0, 17 }, {  -17,  0, 17 }, {   18,  0, 17 }, {  -18,  0, 17 },
-    {   19,  0, 17 }, {  -19,  0, 17 }, {   20,  0, 17 }, {  -20,  0, 17 },
-    {   21,  0, 17 }, {  -21,  0, 17 }, {   22,  0, 17 }, {  -22,  0, 17 },
-    {   23,  0, 17 }, {  -23,  0, 17 }, {   24,  0, 17 }, {  -24,  0, 17 },
-    {   25,  0, 17 }, {  -25,  0, 17 }, {   26,  0, 17 }, {  -26,  0, 17 },
-    {   27,  0, 17 }, {  -27,  0, 17 }, {   28,  0, 17 }, {  -28,  0, 17 },
-    {   29,  0, 17 }, {  -29,  0, 17 }, {   30,  0, 17 }, {  -30,  0, 17 },
-    {   31,  0, 17 }, {  -31,  0, 17 }, {   32,  0, 17 }, {  -32,  0, 17 },
-    {   33,  0, 17 }, {  -33,  0, 17 }, {   34,  0, 17 }, {  -34,  0, 17 },
-    {   35,  0, 17 }, {  -35,  0, 17 }, {   36,  0, 17 }, {  -36,  0, 17 },
-    {   37,  0, 17 }, {  -37,  0, 17 }, {   38,  0, 17 }, {  -38,  0, 17 },
-    {   39,  0, 17 }, {  -39,  0, 17 }, {   40,  0, 17 }, {  -40,  0, 17 },
-    {   41,  0, 17 }, {  -41,  0, 17 }, {   42,  0, 17 }, {  -42,  0, 17 },
-    {   43,  0, 17 }, {  -43,  0, 17 }, {   44,  0, 17 }, {  -44,  0, 17 },
-    {   45,  0, 17 }, {  -45,  0, 17 }, {   46,  0, 17 }, {  -46,  0, 17 },
-    {   47,  0, 17 }, {  -47,  0, 17 }, {   48,  0, 17 }, {  -48,  0, 17 },
-    {   49,  0, 17 }, {  -49,  0, 17 }, {   50,  0, 17 }, {  -50,  0, 17 },
-    {   51,  0, 17 }, {  -51,  0, 17 }, {   52,  0, 17 }, {  -52,  0, 17 },
-    {   53,  0, 17 }, {  -53,  0, 17 }, {   54,  0, 17 }, {  -54,  0, 17 },
-    {   55,  0, 17 }, {  -55,  0, 17 }, {   56,  0, 17 }, {  -56,  0, 17 },
-    {   57,  0, 17 }, {  -57,  0, 17 }, {   58,  0, 17 }, {  -58,  0, 17 },
-    {   59,  0, 17 }, {  -59,  0, 17 }, {   60,  0, 17 }, {  -60,  0, 17 },
-    {   61,  0, 17 }, {  -61,  0, 17 }, {   62,  0, 17 }, {  -62,  0, 17 },
-    {   63,  0, 17 }, {  -63,  0, 17 }, RPT_32  (  21,  0, 12 ),
-    RPT_32  ( -21,  0, 12 ), RPT_32  (  22,  0, 12 ),
-    RPT_32  ( -22,  0, 12 ), RPT_32  (  23,  0, 12 ),
-    RPT_32  ( -23,  0, 12 ), RPT_32  (  10,  1, 12 ),
-    RPT_32  ( -10,  1, 12 ), RPT_32  (  11,  1, 12 ),
-    RPT_32  ( -11,  1, 12 ), RPT_32  (   5,  2, 12 ),
-    RPT_32  (  -5,  2, 12 ), RPT_32  (   6,  2, 12 ),
-    RPT_32  (  -6,  2, 12 ), RPT_32  (   4,  3, 12 ),
-    RPT_32  (  -4,  3, 12 ), RPT_32  (   3,  5, 12 ),
-    RPT_32  (  -3,  5, 12 ), RPT_32  (   3,  6, 12 ),
-    RPT_32  (  -3,  6, 12 ), RPT_32  (   2,  9, 12 ),
-    RPT_32  (  -2,  9, 12 ), RPT_32  (   1, 15, 12 ),
-    RPT_32  (  -1, 15, 12 ), RPT_16  (  24,  0, 13 ),
-    RPT_16  ( -24,  0, 13 ), RPT_16  (  25,  0, 13 ),
-    RPT_16  ( -25,  0, 13 ), RPT_16  (  26,  0, 13 ),
-    RPT_16  ( -26,  0, 13 ), RPT_16  (  12,  1, 13 ),
-    RPT_16  ( -12,  1, 13 ), RPT_16  (  13,  1, 13 ),
-    RPT_16  ( -13,  1, 13 ), RPT_16  (   5,  3, 13 ),
-    RPT_16  (  -5,  3, 13 ), RPT_16  (   4,  4, 13 ),
-    RPT_16  (  -4,  4, 13 ), RPT_32  (   0,  5, 12 ),
-    RPT_16  (   4,  5, 13 ), RPT_16  (  -4,  5, 13 ),
-    RPT_32  (   0,  6, 12 ), RPT_32  (   0,  7, 12 ),
-    RPT_16  (   3,  7, 13 ), RPT_16  (  -3,  7, 13 ),
-    RPT_32  (   0,  8, 12 ), RPT_16  (   3,  8, 13 ),
-    RPT_16  (  -3,  8, 13 ), RPT_32  (   0,  9, 12 ),
-    RPT_16  (   1, 16, 13 ), RPT_16  (  -1, 16, 13 ),
+static const uint8_t hqx_ac_lens[] = {
+    // AC table Q0 - 815 elements
+     4,  4,  4,  4,  5,  5,  5,  5,  5,  5,  6,  6,  6,  6,  6,  6,  6,  6,
+    13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+    14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+    14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+    14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+    14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+    14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+    14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+    14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+    14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+    14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+    14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+    14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+    14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+    14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+    14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+    14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+    14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+    14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+    14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+    14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+    14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+    14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+    14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+    14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+    14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+    14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+    14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+    14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+    14, 14, 14, 14, 14, 14, 14,  5,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,
+     7,  7,  7,  7,  7,  7,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,
+     8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  9,  9,  9,  9,  9,  9,  9,
+     9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,
+     9,  9,  9,  9,  9,  9,  9,  9,  9, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+    10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+    10, 10, 10, 10, 10, 10, 10,  9, 10, 10, 10, 10, 10, 10, 10, 10,  9, 10,
+    10,  9, 10, 10, 10, 10, 10, 10, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+    11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+    11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+    11, 11, 11, 11, 11, 11, 10, 11, 11, 10, 10, 11, 11, 11, 11, 12, 12, 12,
+    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+    12, 12, 12, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13,
+    13, 13, 13, 13, 13,
+    // AC table Q8 - 907 elements
+     4,  4,  4,  4,  5,  5,  5,  5,  4,  6,  6,  6,  6,  6,  6,  6,  6,  6,
+     6,  6,  6,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7, 14,
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+    15, 15, 15, 15, 15, 15,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,
+     8,  8,  8,  8,  8,  8,  8,  8,  8,  9,  9,  9,  9,  9,  9,  9,  9,  9,
+     9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9, 10,
+    10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+    10, 10, 10,  9, 10, 10, 10, 10, 10, 10, 10, 10,  9, 10, 10, 10, 10, 10,
+    10,  9, 10, 10, 10, 10,  9, 10, 10,  9, 10, 10, 10, 10, 10, 10, 11, 11,
+    11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+    11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+    11, 11, 11, 11, 11, 11, 11, 11, 10, 11, 11, 10, 10, 10, 11, 11, 11, 11,
+    11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 11, 12, 12, 11, 11, 11,
+    12, 12, 12, 12, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+    17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+    17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+    17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 13, 13, 13, 13,
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+    13, 13, 13, 13, 13, 13, 12,
+    // AC table Q16 - 512 elements
+     3,  3,  4,  4,  5,  5,  5,  5,  5,  5,  4,  6,  6,  6,  6,  6,  6,  6,
+     6,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  8,  8,  8,  8,  8,
+     8,  8,  8,  8,  8,  8,  8,  8,  8,  9,  9,  9,  9,  9,  9,  9,  9,  9,
+     9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9, 10, 10, 10, 10,
+    10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+    10, 10, 10, 10, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 17, 17, 17,
+    17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+    17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+    17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+    17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+    17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+    17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+    17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+    17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+    17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+    17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+    17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+    17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+    17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+    17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 11,
+    11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+    11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+    12, 12, 12, 11, 12, 12, 12, 12, 12, 12, 11, 12, 12, 11, 12, 12, 12, 12,
+    12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12, 13, 13, 12, 12, 13,
+    13, 12, 13, 13, 13, 13, 13, 13,
+    // AC table Q32 - 354 elements
+     3,  3,  4,  4,  3,  5,  5,  5,  5,  6,  6,  6,  6,  6,  6,  6,  6,  6,
+     6,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  8,  8,  8,  8,  8,  8,  8,
+     8,  8,  8,  8,  8,  8,  8,  8,  8,  9,  9,  9,  9,  9,  9,  9,  9,  9,
+     9,  9,  9,  9,  9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+    10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 15, 15, 15, 15, 15, 15, 15,
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+    15, 15, 15, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+    11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 16, 17, 17, 17, 17, 17, 17, 17,
+    17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+    17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+    17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+    17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+    17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+    17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+    17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 12, 12, 12, 12, 12, 12, 11,
+    12, 12, 12, 12, 11, 12, 12, 12, 12, 11, 12, 12, 11, 12, 12, 12, 12, 12,
+    12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12,
+    13, 13, 12, 12, 13, 13, 12, 13, 13, 12, 13, 13,
+    // AC table Q64 - 257 elements
+     3,  3,  2,  4,  4,  5,  5,  5,  5,  6,  6,  6,  6,  6,  6,  7,  7,  7,
+     7,  7,  7,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  9,  9,  9,
+     9,  9,  9,  9,  9,  9,  9,  9,  9, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+    10, 10, 10, 10, 10, 10, 10, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 10,
+    11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+    11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 11, 12, 12, 12, 12, 12, 12, 12,
+    12, 12, 12, 12, 12, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+    17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+    17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+    17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 13, 13, 13, 13,
+    13, 13, 12, 13, 13, 12, 13, 13, 12, 13, 13, 12, 13, 13, 12, 13, 13, 13,
+    13, 13, 13, 13, 13,
+    // AC table Q128 - 194 elements
+     3,  3,  2,  4,  4,  5,  5,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  7,
+     7,  7,  7,  7,  7,  7,  7,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,
+     8,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9, 10, 10, 10, 10, 10, 10, 10,
+    10, 10, 10, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 11, 11, 11, 11, 11,
+    11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12,
+    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+    12, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+    17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
 };
 
-static const HQXLUT ac64_lut[] = {
-    RPT_512 (   1,  0,  3 ), RPT_512 (  -1,  0,  3 ),
-    RPT_1024(   0, 64,  2 ), RPT_256 (   2,  0,  4 ),
-    RPT_256 (  -2,  0,  4 ), RPT_128 (   3,  0,  5 ),
-    RPT_128 (  -3,  0,  5 ), RPT_128 (   1,  1,  5 ),
-    RPT_128 (  -1,  1,  5 ), RPT_64  (   4,  0,  6 ),
-    RPT_64  (  -4,  0,  6 ), RPT_64  (   2,  1,  6 ),
-    RPT_64  (  -2,  1,  6 ), RPT_64  (   1,  2,  6 ),
-    RPT_64  (  -1,  2,  6 ), RPT_32  (   5,  0,  7 ),
-    RPT_32  (  -5,  0,  7 ), RPT_32  (   1,  3,  7 ),
-    RPT_32  (  -1,  3,  7 ), RPT_32  (   1,  4,  7 ),
-    RPT_32  (  -1,  4,  7 ), RPT_16  (   6,  0,  8 ),
-    RPT_16  (  -6,  0,  8 ), RPT_16  (   3,  1,  8 ),
-    RPT_16  (  -3,  1,  8 ), RPT_16  (   2,  2,  8 ),
-    RPT_16  (  -2,  2,  8 ), RPT_16  (   1,  5,  8 ),
-    RPT_16  (  -1,  5,  8 ), RPT_16  (   1,  6,  8 ),
-    RPT_16  (  -1,  6,  8 ), RPT_16  (   1,  7,  8 ),
-    RPT_16  (  -1,  7,  8 ), RPT_8   (   7,  0,  9 ),
-    RPT_8   (  -7,  0,  9 ), RPT_8   (   8,  0,  9 ),
-    RPT_8   (  -8,  0,  9 ), RPT_8   (   4,  1,  9 ),
-    RPT_8   (  -4,  1,  9 ), RPT_8   (   2,  3,  9 ),
-    RPT_8   (  -2,  3,  9 ), RPT_8   (   1,  8,  9 ),
-    RPT_8   (  -1,  8,  9 ), RPT_8   (   1,  9,  9 ),
-    RPT_8   (  -1,  9,  9 ), RPT_4   (   9,  0, 10 ),
-    RPT_4   (  -9,  0, 10 ), RPT_4   (  10,  0, 10 ),
-    RPT_4   ( -10,  0, 10 ), RPT_4   (   5,  1, 10 ),
-    RPT_4   (  -5,  1, 10 ), RPT_4   (   3,  2, 10 ),
-    RPT_4   (  -3,  2, 10 ), RPT_4   (   2,  4, 10 ),
-    RPT_4   (  -2,  4, 10 ), RPT_4   (   2,  5, 10 ),
-    RPT_4   (  -2,  5, 10 ), RPT_4   (   1, 10, 10 ),
-    RPT_4   (  -1, 10, 10 ), RPT_4   (   1, 11, 10 ),
-    RPT_4   (  -1, 11, 10 ), { 4096,  0, -1 }, { 4128,  0, -1 },
-    { 4160,  0, -1 }, { 4192,  0, -1 }, { 4224,  0, -1 }, { 4256,  0, -1 },
-    { 4288,  0, -1 }, { 4320,  0, -1 }, RPT_4   (   0,  0, 10 ),
-    RPT_2   (  11,  0, 11 ), RPT_2   ( -11,  0, 11 ),
-    RPT_2   (  12,  0, 11 ), RPT_2   ( -12,  0, 11 ),
-    RPT_2   (   6,  1, 11 ), RPT_2   (  -6,  1, 11 ),
-    RPT_2   (   7,  1, 11 ), RPT_2   (  -7,  1, 11 ),
-    RPT_2   (   3,  3, 11 ), RPT_2   (  -3,  3, 11 ),
-    RPT_2   (   3,  4, 11 ), RPT_2   (  -3,  4, 11 ),
-    RPT_2   (   3,  5, 11 ), RPT_2   (  -3,  5, 11 ),
-    RPT_2   (   2,  6, 11 ), RPT_2   (  -2,  6, 11 ),
-    RPT_2   (   2,  7, 11 ), RPT_2   (  -2,  7, 11 ),
-    RPT_2   (   1, 12, 11 ), RPT_2   (  -1, 12, 11 ),
-    RPT_2   (   1, 13, 11 ), RPT_2   (  -1, 13, 11 ),
-    RPT_2   (   1, 14, 11 ), RPT_2   (  -1, 14, 11 ),
-    {   13,  0, 12 }, {  -13,  0, 12 }, {   14,  0, 12 }, {  -14,  0, 12 },
-    RPT_2   (   0,  1, 11 ), {    8,  1, 12 }, {   -8,  1, 12 },
-    {    4,  2, 12 }, {   -4,  2, 12 }, {    4,  3, 12 }, {   -4,  3, 12 },
-    {    2,  8, 12 }, {   -2,  8, 12 }, {    2,  9, 12 }, {   -2,  9, 12 },
-    {    1, 15, 12 }, {   -1, 15, 12 }, { 4352,  0, -1 }, { 4384,  0, -1 },
-    { 4416,  0, -1 }, { 4448,  0, -1 }, { 4480,  0, -1 }, {    0,  2, 12 },
-    { 4512,  0, -1 }, {    0,  3, 12 }, { 4544,  0, -1 }, {    0,  4, 12 },
-    { 4576,  0, -1 }, {    0,  5, 12 }, { 4608,  0, -1 }, {    0,  6, 12 },
-    { 4640,  0, -1 }, { 4672,  0, -1 }, { 4704,  0, -1 }, { 4736,  0, -1 },
-    RPT_4   (   0,  0, 15 ), RPT_4   (   0,  1, 15 ),
-    RPT_4   (   0,  2, 15 ), RPT_4   (   0,  3, 15 ),
-    RPT_4   (   0,  4, 15 ), RPT_4   (   0,  5, 15 ),
-    RPT_4   (   0,  6, 15 ), RPT_4   (   0,  7, 15 ),
-    RPT_4   (   0,  8, 15 ), RPT_4   (   0,  9, 15 ),
-    RPT_4   (   0, 10, 15 ), RPT_4   (   0, 11, 15 ),
-    RPT_4   (   0, 12, 15 ), RPT_4   (   0, 13, 15 ),
-    RPT_4   (   0, 14, 15 ), RPT_4   (   0, 15, 15 ),
-    RPT_4   (   0, 16, 15 ), RPT_4   (   0, 17, 15 ),
-    RPT_4   (   0, 18, 15 ), RPT_4   (   0, 19, 15 ),
-    RPT_4   (   0, 20, 15 ), RPT_4   (   0, 21, 15 ),
-    RPT_4   (   0, 22, 15 ), RPT_4   (   0, 23, 15 ),
-    RPT_4   (   0, 24, 15 ), RPT_4   (   0, 25, 15 ),
-    RPT_4   (   0, 26, 15 ), RPT_4   (   0, 27, 15 ),
-    RPT_4   (   0, 28, 15 ), RPT_4   (   0, 29, 15 ),
-    RPT_4   (   0, 30, 15 ), RPT_4   (   0, 31, 15 ),
-    RPT_4   (   0, 32, 15 ), RPT_4   (   0, 33, 15 ),
-    RPT_4   (   0, 34, 15 ), RPT_4   (   0, 35, 15 ),
-    RPT_4   (   0, 36, 15 ), RPT_4   (   0, 37, 15 ),
-    RPT_4   (   0, 38, 15 ), RPT_4   (   0, 39, 15 ),
-    RPT_4   (   0, 40, 15 ), RPT_4   (   0, 41, 15 ),
-    RPT_4   (   0, 42, 15 ), RPT_4   (   0, 43, 15 ),
-    RPT_4   (   0, 44, 15 ), RPT_4   (   0, 45, 15 ),
-    RPT_4   (   0, 46, 15 ), RPT_4   (   0, 47, 15 ),
-    RPT_4   (   0, 48, 15 ), RPT_4   (   0, 49, 15 ),
-    RPT_4   (   0, 50, 15 ), RPT_4   (   0, 51, 15 ),
-    RPT_4   (   0, 52, 15 ), RPT_4   (   0, 53, 15 ),
-    RPT_4   (   0, 54, 15 ), RPT_4   (   0, 55, 15 ),
-    RPT_4   (   0, 56, 15 ), RPT_4   (   0, 57, 15 ),
-    RPT_4   (   0, 58, 15 ), RPT_4   (   0, 59, 15 ),
-    RPT_4   (   0, 60, 15 ), RPT_4   (   0, 61, 15 ),
-    RPT_4   (   0, 62, 15 ), RPT_4   (   0, 63, 15 ),
-    RPT_2   (   0,  0, 16 ), {    1,  0, 17 }, {   -1,  0, 17 },
-    {    2,  0, 17 }, {   -2,  0, 17 }, {    3,  0, 17 }, {   -3,  0, 17 },
-    {    4,  0, 17 }, {   -4,  0, 17 }, {    5,  0, 17 }, {   -5,  0, 17 },
-    {    6,  0, 17 }, {   -6,  0, 17 }, {    7,  0, 17 }, {   -7,  0, 17 },
-    {    8,  0, 17 }, {   -8,  0, 17 }, {    9,  0, 17 }, {   -9,  0, 17 },
-    {   10,  0, 17 }, {  -10,  0, 17 }, {   11,  0, 17 }, {  -11,  0, 17 },
-    {   12,  0, 17 }, {  -12,  0, 17 }, {   13,  0, 17 }, {  -13,  0, 17 },
-    {   14,  0, 17 }, {  -14,  0, 17 }, {   15,  0, 17 }, {  -15,  0, 17 },
-    {   16,  0, 17 }, {  -16,  0, 17 }, {   17,  0, 17 }, {  -17,  0, 17 },
-    {   18,  0, 17 }, {  -18,  0, 17 }, {   19,  0, 17 }, {  -19,  0, 17 },
-    {   20,  0, 17 }, {  -20,  0, 17 }, {   21,  0, 17 }, {  -21,  0, 17 },
-    {   22,  0, 17 }, {  -22,  0, 17 }, {   23,  0, 17 }, {  -23,  0, 17 },
-    {   24,  0, 17 }, {  -24,  0, 17 }, {   25,  0, 17 }, {  -25,  0, 17 },
-    {   26,  0, 17 }, {  -26,  0, 17 }, {   27,  0, 17 }, {  -27,  0, 17 },
-    {   28,  0, 17 }, {  -28,  0, 17 }, {   29,  0, 17 }, {  -29,  0, 17 },
-    {   30,  0, 17 }, {  -30,  0, 17 }, {   31,  0, 17 }, {  -31,  0, 17 },
-    RPT_16  (  15,  0, 13 ), RPT_16  ( -15,  0, 13 ),
-    RPT_16  (   9,  1, 13 ), RPT_16  (  -9,  1, 13 ),
-    RPT_16  (  10,  1, 13 ), RPT_16  ( -10,  1, 13 ),
-    RPT_16  (   5,  2, 13 ), RPT_16  (  -5,  2, 13 ),
-    RPT_16  (   5,  3, 13 ), RPT_16  (  -5,  3, 13 ),
-    RPT_16  (   4,  4, 13 ), RPT_16  (  -4,  4, 13 ),
-    RPT_16  (   4,  5, 13 ), RPT_16  (  -4,  5, 13 ),
-    RPT_16  (   3,  6, 13 ), RPT_16  (  -3,  6, 13 ),
-    RPT_16  (   3,  7, 13 ), RPT_16  (  -3,  7, 13 ),
-    RPT_16  (   1, 16, 13 ), RPT_16  (  -1, 16, 13 ),
-    RPT_16  (   1, 17, 13 ), RPT_16  (  -1, 17, 13 ),
-};
+static const uint16_t hqx_ac_nb_elems[] = { 815, 907, 512, 354, 257, 194 };
 
-static const HQXLUT ac128_lut[] = {
-    RPT_256 (   1,  0,  3 ), RPT_256 (  -1,  0,  3 ),
-    RPT_512 (   0, 64,  2 ), RPT_128 (   1,  1,  4 ),
-    RPT_128 (  -1,  1,  4 ), RPT_64  (   2,  0,  5 ),
-    RPT_64  (  -2,  0,  5 ), RPT_32  (   3,  0,  6 ),
-    RPT_32  (  -3,  0,  6 ), RPT_32  (   2,  1,  6 ),
-    RPT_32  (  -2,  1,  6 ), RPT_32  (   1,  2,  6 ),
-    RPT_32  (  -1,  2,  6 ), RPT_32  (   1,  3,  6 ),
-    RPT_32  (  -1,  3,  6 ), RPT_32  (   1,  4,  6 ),
-    RPT_32  (  -1,  4,  6 ), RPT_16  (   4,  0,  7 ),
-    RPT_16  (  -4,  0,  7 ), RPT_16  (   1,  5,  7 ),
-    RPT_16  (  -1,  5,  7 ), RPT_16  (   1,  6,  7 ),
-    RPT_16  (  -1,  6,  7 ), RPT_16  (   1,  7,  7 ),
-    RPT_16  (  -1,  7,  7 ), RPT_8   (   5,  0,  8 ),
-    RPT_8   (  -5,  0,  8 ), RPT_8   (   3,  1,  8 ),
-    RPT_8   (  -3,  1,  8 ), RPT_8   (   2,  2,  8 ),
-    RPT_8   (  -2,  2,  8 ), RPT_8   (   2,  3,  8 ),
-    RPT_8   (  -2,  3,  8 ), RPT_8   (   1,  8,  8 ),
-    RPT_8   (  -1,  8,  8 ), RPT_8   (   1,  9,  8 ),
-    RPT_8   (  -1,  9,  8 ), RPT_4   (   6,  0,  9 ),
-    RPT_4   (  -6,  0,  9 ), RPT_4   (   4,  1,  9 ),
-    RPT_4   (  -4,  1,  9 ), RPT_4   (   2,  4,  9 ),
-    RPT_4   (  -2,  4,  9 ), RPT_4   (   2,  5,  9 ),
-    RPT_4   (  -2,  5,  9 ), RPT_4   (   1, 10,  9 ),
-    RPT_4   (  -1, 10,  9 ), RPT_2   (   7,  0, 10 ),
-    RPT_2   (  -7,  0, 10 ), RPT_2   (   5,  1, 10 ),
-    RPT_2   (  -5,  1, 10 ), RPT_2   (   3,  2, 10 ),
-    RPT_2   (  -3,  2, 10 ), RPT_2   (   3,  3, 10 ),
-    RPT_2   (  -3,  3, 10 ), RPT_2   (   2,  6, 10 ),
-    RPT_2   (  -2,  6, 10 ), { 2048,  0, -1 }, { 2112,  0, -1 },
-    { 2176,  0, -1 }, { 2240,  0, -1 }, {    6,  1, 11 }, {   -6,  1, 11 },
-    {    7,  1, 11 }, {   -7,  1, 11 }, {    3,  4, 11 }, {   -3,  4, 11 },
-    {    3,  5, 11 }, {   -3,  5, 11 }, {    2,  7, 11 }, {   -2,  7, 11 },
-    {    2,  8, 11 }, {   -2,  8, 11 }, {    2,  9, 11 }, {   -2,  9, 11 },
-    {    1, 11, 11 }, {   -1, 11, 11 }, {    1, 12, 11 }, {   -1, 12, 11 },
-    {    1, 13, 11 }, {   -1, 13, 11 }, {    0,  0, 11 }, { 2304,  0, -1 },
-    { 2368,  0, -1 }, { 2432,  0, -1 }, { 2496,  0, -1 }, { 2560,  0, -1 },
-    { 2624,  0, -1 }, { 2688,  0, -1 }, { 2752,  0, -1 }, { 2816,  0, -1 },
-    { 2880,  0, -1 }, { 2944,  0, -1 }, RPT_4   (   0,  0, 15 ),
-    RPT_4   (   0,  1, 15 ), RPT_4   (   0,  2, 15 ),
-    RPT_4   (   0,  3, 15 ), RPT_4   (   0,  4, 15 ),
-    RPT_4   (   0,  5, 15 ), RPT_4   (   0,  6, 15 ),
-    RPT_4   (   0,  7, 15 ), RPT_4   (   0,  8, 15 ),
-    RPT_4   (   0,  9, 15 ), RPT_4   (   0, 10, 15 ),
-    RPT_4   (   0, 11, 15 ), RPT_4   (   0, 12, 15 ),
-    RPT_4   (   0, 13, 15 ), RPT_4   (   0, 14, 15 ),
-    RPT_4   (   0, 15, 15 ), RPT_4   (   0, 16, 15 ),
-    RPT_4   (   0, 17, 15 ), RPT_4   (   0, 18, 15 ),
-    RPT_4   (   0, 19, 15 ), RPT_4   (   0, 20, 15 ),
-    RPT_4   (   0, 21, 15 ), RPT_4   (   0, 22, 15 ),
-    RPT_4   (   0, 23, 15 ), RPT_4   (   0, 24, 15 ),
-    RPT_4   (   0, 25, 15 ), RPT_4   (   0, 26, 15 ),
-    RPT_4   (   0, 27, 15 ), RPT_4   (   0, 28, 15 ),
-    RPT_4   (   0, 29, 15 ), RPT_4   (   0, 30, 15 ),
-    RPT_4   (   0, 31, 15 ), RPT_4   (   0, 32, 15 ),
-    RPT_4   (   0, 33, 15 ), RPT_4   (   0, 34, 15 ),
-    RPT_4   (   0, 35, 15 ), RPT_4   (   0, 36, 15 ),
-    RPT_4   (   0, 37, 15 ), RPT_4   (   0, 38, 15 ),
-    RPT_4   (   0, 39, 15 ), RPT_4   (   0, 40, 15 ),
-    RPT_4   (   0, 41, 15 ), RPT_4   (   0, 42, 15 ),
-    RPT_4   (   0, 43, 15 ), RPT_4   (   0, 44, 15 ),
-    RPT_4   (   0, 45, 15 ), RPT_4   (   0, 46, 15 ),
-    RPT_4   (   0, 47, 15 ), RPT_4   (   0, 48, 15 ),
-    RPT_4   (   0, 49, 15 ), RPT_4   (   0, 50, 15 ),
-    RPT_4   (   0, 51, 15 ), RPT_4   (   0, 52, 15 ),
-    RPT_4   (   0, 53, 15 ), RPT_4   (   0, 54, 15 ),
-    RPT_4   (   0, 55, 15 ), RPT_4   (   0, 56, 15 ),
-    RPT_4   (   0, 57, 15 ), RPT_4   (   0, 58, 15 ),
-    RPT_4   (   0, 59, 15 ), RPT_4   (   0, 60, 15 ),
-    RPT_4   (   0, 61, 15 ), RPT_4   (   0, 62, 15 ),
-    RPT_4   (   0, 63, 15 ), RPT_32  (   8,  0, 12 ),
-    RPT_32  (  -8,  0, 12 ), RPT_32  (   9,  0, 12 ),
-    RPT_32  (  -9,  0, 12 ), RPT_32  (   8,  1, 12 ),
-    RPT_32  (  -8,  1, 12 ), RPT_32  (   4,  2, 12 ),
-    RPT_32  (  -4,  2, 12 ), RPT_32  (   4,  3, 12 ),
-    RPT_32  (  -4,  3, 12 ), RPT_32  (   3,  6, 12 ),
-    RPT_32  (  -3,  6, 12 ), RPT_32  (   1, 14, 12 ),
-    RPT_32  (  -1, 14, 12 ), RPT_32  (   1, 15, 12 ),
-    RPT_32  (  -1, 15, 12 ), RPT_32  (   1, 16, 12 ),
-    RPT_32  (  -1, 16, 12 ), RPT_32  (   0,  1, 12 ),
-    RPT_32  (   0,  2, 12 ), RPT_32  (   0,  3, 12 ),
-    RPT_2   (   0,  0, 16 ), {    1,  0, 17 }, {   -1,  0, 17 },
-    {    2,  0, 17 }, {   -2,  0, 17 }, {    3,  0, 17 }, {   -3,  0, 17 },
-    {    4,  0, 17 }, {   -4,  0, 17 }, {    5,  0, 17 }, {   -5,  0, 17 },
-    {    6,  0, 17 }, {   -6,  0, 17 }, {    7,  0, 17 }, {   -7,  0, 17 },
-    {    8,  0, 17 }, {   -8,  0, 17 }, {    9,  0, 17 }, {   -9,  0, 17 },
-    {   10,  0, 17 }, {  -10,  0, 17 }, {   11,  0, 17 }, {  -11,  0, 17 },
-    {   12,  0, 17 }, {  -12,  0, 17 }, {   13,  0, 17 }, {  -13,  0, 17 },
-    {   14,  0, 17 }, {  -14,  0, 17 }, {   15,  0, 17 }, {  -15,  0, 17 },
-};
-
-const HQXAC ff_hqx_ac[NUM_HQX_AC] = {
-    { 10, 5, ac0_lut   },
-    { 11, 6, ac8_lut   },
-    { 11, 6, ac16_lut  },
-    { 11, 6, ac32_lut  },
-    { 12, 5, ac64_lut  },
-    { 11, 6, ac128_lut },
-};
+static RL_VLC_ELEM hqx_ac_rl_vlc[15630];
 
 #define INIT_DC_TABLE(idx, name)                                              \
     do {                                                                      \
@@ -2148,8 +1515,47 @@ const HQXAC ff_hqx_ac[NUM_HQX_AC] = {
             return ret;                                                       \
     } while (0)
 
+static av_cold void hqx_init_static(void)
+{
+    VLCInitState state = VLC_INIT_STATE(hqx_ac_rl_vlc);
+    const uint8_t *lens = hqx_ac_lens;
+    const int16_t *run_level = hqx_ac_run_level;
+
+    for (int i = 0; i < NUM_HQX_AC; ++i) {
+        RL_VLC_ELEM *lut = state.table;
+        unsigned nb_codes = state.size;
+
+        ff_hqx_ac[i].lut =
+            ff_vlc_init_tables_from_lengths(&state, ff_hqx_ac[i].bits,
+                                            hqx_ac_nb_elems[i], lens, 1,
+                                            run_level, 2, 2, 0, 0);
+
+        nb_codes -= state.size;
+
+        for (unsigned j = 0; j < nb_codes; ++j) {
+            // lut[j] is in VLC (not RL_VLC) state
+            int sym = lut[j].sym;
+            int len = lut[j].len;
+            int level;
+
+            if (len < 0) {
+                level = sym;
+            } else {
+                level      = sym >> 7;
+                lut[j].run = sym & 0x7f;
+            }
+            // lut[j] is now in RL_VLC state
+            lut[j].len8  = len;
+            lut[j].level = level;
+        }
+        lens      += hqx_ac_nb_elems[i];
+        run_level += hqx_ac_nb_elems[i];
+    }
+}
+
 av_cold int ff_hqx_init_vlcs(HQXContext *ctx)
 {
+    static AVOnce init_static_once = AV_ONCE_INIT;
     int ret = vlc_init(&ctx->cbp_vlc, HQX_CBP_VLC_BITS, FF_ARRAY_ELEMS(cbp_vlc_lens),
                        cbp_vlc_lens, 1, 1, cbp_vlc_bits, 1, 1, 0);
     if (ret < 0)
@@ -2159,5 +1565,7 @@ av_cold int ff_hqx_init_vlcs(HQXContext *ctx)
     INIT_DC_TABLE(1, dc10);
     INIT_DC_TABLE(2, dc11);
 
+    ff_thread_once(&init_static_once, hqx_init_static);
+
     return 0;
 }
-- 
2.45.2