/*
 * Copyright (c) 1997-2004 Alexandros Eleftheriadis, Danny Hong and
 * Yuntai Kyong.
 * 
 * This file is part of Flavor, developed at Columbia University
 * (www.ee.columbia.edu/flavor).
 *
 * Flavor is free software; you can redistribute it and/or modify
 * it under the terms of the Flavor Artistic License as described in
 * the file COPYING.txt. 
 *
 */

/* 
 * Authors:
 * Danny Hong <danny@ee.columbia.edu>
 * Chun Hao(Tony) Wang <tony@ee.columbia.edu>
 *
 */

/*
 * MP3 Huffman Tables
 *
 * Huffman codes for Layer III 
 * (ISO/IEC 11172-3 1993(E) Table B.7)
 */

// Huffman code table for quadruples v,w,x,y (Table B.7)
class HuffQuad {
    int(1) v;
    int(1) w;
    int(1) x;
    int(1) y;
    int hlen;
}

// Huffman code table for x and y pair (Table B.7)
class HuffPair {
    int x;
    int y;
    int hlen;
}

map TableA(HuffQuad) {
    0b1,        {0,0,0,0,1},
    0b0101,     {0,0,0,1,4},
    0b0100,     {0,0,1,0,4},
    0b00101,    {0,0,1,1,5},
    0b0110,     {0,1,0,0,4},
    0b000101,   {0,1,0,1,6},
    0b00100,    {0,1,1,0,5},
    0b000100,   {0,1,1,1,6},
    0b0111,     {1,0,0,0,4},
    0b00011,    {1,0,0,1,5},
    0b00110,    {1,0,1,0,5},
    0b000000,   {1,0,1,1,6},
    0b00111,    {1,1,0,0,5},
    0b000010,   {1,1,0,1,6},
    0b000011,   {1,1,1,0,6},
    0b000001,   {1,1,1,1,6}
}

map TableB(HuffQuad) {
    0b1111, {0,0,0,0,4},
    0b1110, {0,0,0,1,4},
    0b1101, {0,0,1,0,4},
    0b1100, {0,0,1,1,4},
    0b1011, {0,1,0,0,4},
    0b1010, {0,1,0,1,4},
    0b1001, {0,1,1,0,4},
    0b1000, {0,1,1,1,4},
    0b0111, {1,0,0,0,4},
    0b0110, {1,0,0,1,4},
    0b0101, {1,0,1,0,4},
    0b0100, {1,0,1,1,4},
    0b0011, {1,1,0,0,4},
    0b0010, {1,1,0,1,4},
    0b0001, {1,1,1,0,4},
    0b0000, {1,1,1,1,4}
}

map Table0(HuffPair) {
    0b0,    {0,0,0}
}

map Table1(HuffPair) {
    0b1,    {0,0,1},
    0b001,  {0,1,3},
    0b01,   {1,0,2},
    0b000,  {1,1,3}
}

map Table2(HuffPair) {
    0b1,        {0,0,1},
    0b010,      {0,1,3},
    0b000001,   {0,2,6},
    0b011,      {1,0,3},
    0b001,      {1,1,3},
    0b00001,    {1,2,5},
    0b00011,    {2,0,5},
    0b00010,    {2,1,5},
    0b000000,   {2,2,6}
}

map Table3(HuffPair) {
    0b11,       {0,0,2},
    0b10,       {0,1,2},
    0b000001,   {0,2,6},
    0b001,      {1,0,3},
    0b01,       {1,1,2},
    0b00001,    {1,2,5},
    0b00011,    {2,0,5},
    0b00010,    {2,1,5},
    0b000000,   {2,2,6}
}

map Table5(HuffPair) {
    0b1,        {0,0,1},
    0b010,      {0,1,3},
    0b000110,   {0,2,6},
    0b0000101,  {0,3,7},
    0b011,      {1,0,3},
    0b001,      {1,1,3},
    0b000100,   {1,2,6},
    0b0000100,  {1,3,7},
    0b000111,   {2,0,6},
    0b000101,   {2,1,6},
    0b0000111,  {2,2,7},
    0b00000001, {2,3,8},
    0b0000110,  {3,0,7},
    0b000001,   {3,1,6},
    0b0000001,  {3,2,7},
    0b00000000, {3,3,8}
}

map Table6(HuffPair) {
    0b111,      {0,0,3},
    0b011,      {0,1,3},
    0b00101,    {0,2,5},
    0b0000001,  {0,3,7},
    0b110,      {1,0,3},
    0b10,       {1,1,2},
    0b0011,     {1,2,4},
    0b00010,    {1,3,5},
    0b0101,     {2,0,4},
    0b0100,     {2,1,4},
    0b00100,    {2,2,5},
    0b000001,   {2,3,6},
    0b000011,   {3,0,6},
    0b00011,    {3,1,5},
    0b000010,   {3,2,6},
    0b0000000,  {3,3,7}
}

map Table7(HuffPair) {
    0b1,            {0,0,1},
    0b010,          {0,1,3},
    0b001010,       {0,2,6},
    0b00010011,     {0,3,8},
    0b00010000,     {0,4,8},
    0b000001010,    {0,5,9},
    0b011,          {1,0,3},
    0b0011,         {1,1,4},
    0b000111,       {1,2,6},
    0b0001010,      {1,3,7},
    0b0000101,      {1,4,7},
    0b00000011,     {1,5,8},
    0b001011,       {2,0,6},
    0b00100,        {2,1,5},
    0b0001101,      {2,2,7},
    0b00010001,     {2,3,8},
    0b00001000,     {2,4,8},
    0b000000100,    {2,5,9},
    0b0001100,      {3,0,7},
    0b0001011,      {3,1,7},
    0b00010010,     {3,2,8},
    0b000001111,    {3,3,9},
    0b000001011,    {3,4,9},
    0b000000010,    {3,5,9},
    0b0000111,      {4,0,7},
    0b0000110,      {4,1,7},
    0b00001001,     {4,2,8},
    0b000001110,    {4,3,9},
    0b000000011,    {4,4,9},
    0b0000000001,   {4,5,10},
    0b00000110,     {5,0,8},
    0b00000100,     {5,1,8},
    0b000000101,    {5,2,9},
    0b0000000011,   {5,3,10},
    0b0000000010,   {5,4,10},
    0b0000000000,   {5,5,10}
}

map Table8(HuffPair) {
    0b11,           {0,0,2},
    0b100,          {0,1,3},
    0b000110,       {0,2,6},
    0b00010010,     {0,3,8},
    0b00001100,     {0,4,8},
    0b000000101,    {0,5,9},
    0b101,          {1,0,3},
    0b01,           {1,1,2},
    0b0010,         {1,2,4},
    0b00010000,     {1,3,8},
    0b00001001,     {1,4,8},
    0b00000011,     {1,5,8},
    0b000111,       {2,0,6},
    0b0011,         {2,1,4},
    0b000101,       {2,2,6},
    0b00001110,     {2,3,8},
    0b00000111,     {2,4,8},
    0b000000011,    {2,5,9},
    0b00010011,     {3,0,8},
    0b00010001,     {3,1,8},
    0b00001111,     {3,2,8},
    0b000001101,    {3,3,9},
    0b000001010,    {3,4,9},
    0b0000000100,   {3,5,10},
    0b00001101,     {4,0,8},
    0b0000101,      {4,1,7},
    0b00001000,     {4,2,8},
    0b000001011,    {4,3,9},
    0b0000000101,   {4,4,10},
    0b0000000001,   {4,5,10},
    0b000001100,    {5,0,9},
    0b00000100,     {5,1,8},
    0b000000100,    {5,2,9},
    0b000000001,    {5,3,9},
    0b00000000001,  {5,4,11},
    0b00000000000,  {5,5,11}
}

map Table9(HuffPair) {
    0b111,          {0,0,3},
    0b101,          {0,1,3},
    0b01001,        {0,2,5},
    0b001110,       {0,3,6},
    0b00001111,     {0,4,8},
    0b000000111,    {0,5,9},
    0b110,          {1,0,3},
    0b100,          {1,1,3},
    0b0101,         {1,2,4},
    0b00101,        {1,3,5},
    0b000110,       {1,4,6},
    0b00000111,     {1,5,8},
    0b0111,         {2,0,4},
    0b0110,         {2,1,4},
    0b01000,        {2,2,5},
    0b001000,       {2,3,6},
    0b0001000,      {2,4,7},
    0b00000101,     {2,5,8},
    0b001111,       {3,0,6},
    0b00110,        {3,1,5},
    0b001001,       {3,2,6},
    0b0001010,      {3,3,7},
    0b0000101,      {3,4,7},
    0b00000001,     {3,5,8},
    0b0001011,      {4,0,7},
    0b000111,       {4,1,6},
    0b0001001,      {4,2,7},
    0b0000110,      {4,3,7},
    0b00000100,     {4,4,8},
    0b000000001,    {4,5,9},
    0b00001110,     {5,0,8},
    0b0000100,      {5,1,7},
    0b00000110,     {5,2,8},
    0b00000010,     {5,3,8},
    0b000000110,    {5,4,9},
    0b000000000,    {5,5,9}
}

map Table10(HuffPair) {
    0b1,            {0,0,1},
    0b010,          {0,1,3},
    0b001010,       {0,2,6},
    0b00010111,     {0,3,8},
    0b000100011,    {0,4,9},
    0b000011110,    {0,5,9},
    0b000001100,    {0,6,9},
    0b0000010001,   {0,7,10},
    0b011,          {1,0,3},
    0b0011,         {1,1,4},
    0b001000,       {1,2,6},
    0b0001100,      {1,3,7},
    0b00010010,     {1,4,8},
    0b000010101,    {1,5,9},
    0b00001100,     {1,6,8},
    0b00000111,     {1,7,8},
    0b001011,       {2,0,6},
    0b001001,       {2,1,6},
    0b0001111,      {2,2,7},
    0b00010101,     {2,3,8},
    0b000100000,    {2,4,9},
    0b0000101000,   {2,5,10},
    0b000010011,    {2,6,9},
    0b000000110,    {2,7,9},
    0b0001110,      {3,0,7},
    0b0001101,      {3,1,7},
    0b00010110,     {3,2,8},
    0b000100010,    {3,3,9},
    0b0000101110,   {3,4,10},
    0b0000010111,   {3,5,10},
    0b000010010,    {3,6,9},
    0b0000000111,   {3,7,10},
    0b00010100,     {4,0,8},
    0b00010011,     {4,1,8},
    0b000100001,    {4,2,9},
    0b0000101111,   {4,3,10},
    0b0000011011,   {4,4,10},
    0b0000010110,   {4,5,10},
    0b0000001001,   {4,6,10},
    0b0000000011,   {4,7,10},
    0b000011111,    {5,0,9},
    0b000010110,    {5,1,9},
    0b0000101001,   {5,2,10},
    0b0000011010,   {5,3,10},
    0b00000010101,  {5,4,11},
    0b00000010100,  {5,5,11},
    0b0000000101,   {5,6,10},
    0b00000000011,  {5,7,11},
    0b00001110,     {6,0,8},
    0b00001101,     {6,1,8},
    0b000001010,    {6,2,9},
    0b0000001011,   {6,3,10},
    0b0000010000,   {6,4,10},
    0b0000000110,   {6,5,10},
    0b00000000101,  {6,6,11},
    0b00000000001,  {6,7,11},
    0b000001001,    {7,0,9},
    0b00001000,     {7,1,8},
    0b000000111,    {7,2,9},
    0b0000001000,   {7,3,10},
    0b0000000100,   {7,4,10},
    0b00000000100,  {7,5,11},
    0b00000000010,  {7,6,11},
    0b00000000000,  {7,7,11}
}

map Table11(HuffPair) {
    0b11,           {0,0,2},
    0b100,          {0,1,3},
    0b01010,        {0,2,5},
    0b0011000,      {0,3,7},
    0b00100010,     {0,4,8},
    0b000100001,    {0,5,9},
    0b00010101,     {0,6,8},
    0b000001111,    {0,7,9},
    0b101,          {1,0,3},
    0b011,          {1,1,3},
    0b0100,         {1,2,4},
    0b001010,       {1,3,6},
    0b00100000,     {1,4,8},
    0b00010001,     {1,5,8},
    0b0001011,      {1,6,7},
    0b00001010,     {1,7,8},
    0b01011,        {2,0,5},
    0b00111,        {2,1,5},
    0b001101,       {2,2,6},
    0b0010010,      {2,3,7},
    0b00011110,     {2,4,8},
    0b000011111,    {2,5,9},
    0b00010100,     {2,6,8},
    0b00000101,     {2,7,8},
    0b0011001,      {3,0,7},
    0b001011,       {3,1,6},
    0b0010011,      {3,2,7},
    0b000111011,    {3,3,9},
    0b00011011,     {3,4,8},
    0b0000010010,   {3,5,10},
    0b00001100,     {3,6,8},
    0b000000101,    {3,7,9},
    0b00100011,     {4,0,8},
    0b00100001,     {4,1,8},
    0b00011111,     {4,2,8},
    0b000111010,    {4,3,9},
    0b000011110,    {4,4,9},
    0b0000010000,   {4,5,10},
    0b000000111,    {4,6,9},
    0b0000000101,   {4,7,10},
    0b00011100,     {5,0,8},
    0b00011010,     {5,1,8},
    0b000100000,    {5,2,9},
    0b0000010011,   {5,3,10},
    0b0000010001,   {5,4,10},
    0b00000001111,  {5,5,11},
    0b0000001000,   {5,6,10},
    0b00000001110,  {5,7,11},
    0b00001110,     {6,0,8},
    0b0001100,      {6,1,7},
    0b0001001,      {6,2,7},
    0b00001101,     {6,3,8},
    0b000001110,    {6,4,9},
    0b0000001001,   {6,5,10},
    0b0000000100,   {6,6,10},
    0b0000000001,   {6,7,10},
    0b00001011,     {7,0,8},
    0b0000100,      {7,1,7},
    0b00000110,     {7,2,8},
    0b000000110,    {7,3,9},
    0b0000000110,   {7,4,10},
    0b0000000011,   {7,5,10},
    0b0000000010,   {7,6,10},
    0b0000000000,   {7,7,10}
}

map Table12(HuffPair) {
    0b1001,         {0,0,4},
    0b110,          {0,1,3},
    0b10000,        {0,2,5},
    0b0100001,      {0,3,7},
    0b00101001,     {0,4,8},
    0b000100111,    {0,5,9},
    0b000100110,    {0,6,9},
    0b000011010,    {0,7,9},
    0b111,          {1,0,3},
    0b101,          {1,1,3},
    0b0110,         {1,2,4},
    0b01001,        {1,3,5},
    0b0010111,      {1,4,7},
    0b0010000,      {1,5,7},
    0b00011010,     {1,6,8},
    0b00001011,     {1,7,8},
    0b10001,        {2,0,5},
    0b0111,         {2,1,4},
    0b01011,        {2,2,5},
    0b001110,       {2,3,6},
    0b0010101,      {2,4,7},
    0b00011110,     {2,5,8},
    0b0001010,      {2,6,7},
    0b00000111,     {2,7,8},
    0b010001,       {3,0,6},
    0b01010,        {3,1,5},
    0b001111,       {3,2,6},
    0b001100,       {3,3,6},
    0b0010010,      {3,4,7},
    0b00011100,     {3,5,8},
    0b00001110,     {3,6,8},
    0b00000101,     {3,7,8},
    0b0100000,      {4,0,7},
    0b001101,       {4,1,6},
    0b0010110,      {4,2,7},
    0b0010011,      {4,3,7},
    0b00010010,     {4,4,8},
    0b00010000,     {4,5,8},
    0b00001001,     {4,6,8},
    0b000000101,    {4,7,9},
    0b00101000,     {5,0,8},
    0b0010001,      {5,1,7},
    0b00011111,     {5,2,8},
    0b00011101,     {5,3,8},
    0b00010001,     {5,4,8},
    0b000001101,    {5,5,9},
    0b00000100,     {5,6,8},
    0b000000010,    {5,7,9},
    0b00011011,     {6,0,8},
    0b0001100,      {6,1,7},
    0b0001011,      {6,2,7},
    0b00001111,     {6,3,8},
    0b00001010,     {6,4,8},
    0b000000111,    {6,5,9},
    0b000000100,    {6,6,9},
    0b0000000001,   {6,7,10},
    0b000011011,    {7,0,9},
    0b00001100,     {7,1,8},
    0b00001000,     {7,2,8},
    0b000001100,    {7,3,9},
    0b000000110,    {7,4,9},
    0b000000011,    {7,5,9},
    0b000000001,    {7,6,9},
    0b0000000000,   {7,7,10}
}

map Table13(HuffPair) {
    0b1,                    {0,0,1},
    0b0101,                 {0,1,4},
    0b001110,               {0,2,6},
    0b0010101,              {0,3,7},
    0b00100010,             {0,4,8},
    0b000110011,            {0,5,9},
    0b000101110,            {0,6,9},
    0b0001000111,           {0,7,10},
    0b000101010,            {0,8,9},
    0b0000110100,           {0,9,10},
    0b00001000100,          {0,10,11},
    0b00000110100,          {0,11,11},
    0b000001000011,         {0,12,12},
    0b000000101100,         {0,13,12},
    0b0000000101011,        {0,14,13},
    0b0000000010011,        {0,15,13},
    0b011,                  {1,0,3},
    0b0100,                 {1,1,4},
    0b001100,               {1,2,6},
    0b0010011,              {1,3,7},
    0b00011111,             {1,4,8},
    0b00011010,             {1,5,8},
    0b000101100,            {1,6,9},
    0b000100001,            {1,7,9},
    0b000011111,            {1,8,9},
    0b000011000,            {1,9,9},
    0b0000100000,           {1,10,10},
    0b0000011000,           {1,11,10},
    0b00000011111,          {1,12,11},
    0b000000100011,         {1,13,12},
    0b000000010110,         {1,14,12},
    0b000000001110,         {1,15,12},
    0b001111,               {2,0,6},
    0b001101,               {2,1,6},
    0b0010111,              {2,2,7},
    0b00100100,             {2,3,8},
    0b000111011,            {2,4,9},
    0b000110001,            {2,5,9},
    0b0001001101,           {2,6,10},
    0b0001000001,           {2,7,10},
    0b000011101,            {2,8,9},
    0b0000101000,           {2,9,10},
    0b0000011110,           {2,10,10},
    0b00000101000,          {2,11,11},
    0b00000011011,          {2,12,11},
    0b000000100001,         {2,13,12},
    0b0000000101010,        {2,14,13},
    0b0000000010000,        {2,15,13},
    0b0010110,              {3,0,7},
    0b0010100,              {3,1,7},
    0b00100101,             {3,2,8},
    0b000111101,            {3,3,9},
    0b000111000,            {3,4,9},
    0b0001001111,           {3,5,10},
    0b0001001001,           {3,6,10},
    0b0001000000,           {3,7,10},
    0b0000101011,           {3,8,10},
    0b00001001100,          {3,9,11},
    0b00000111000,          {3,10,11},
    0b00000100101,          {3,11,11},
    0b00000011010,          {3,12,11},
    0b000000011111,         {3,13,12},
    0b0000000011001,        {3,14,13},
    0b0000000001110,        {3,15,13},
    0b00100011,             {4,0,8},
    0b0010000,              {4,1,7},
    0b000111100,            {4,2,9},
    0b000111001,            {4,3,9},
    0b0001100001,           {4,4,10},
    0b0001001011,           {4,5,10},
    0b00001110010,          {4,6,11},
    0b00001011011,          {4,7,11},
    0b0000110110,           {4,8,10},
    0b00001001001,          {4,9,11},
    0b00000110111,          {4,10,11},
    0b000000101001,         {4,11,12},
    0b000000110000,         {4,12,12},
    0b0000000110101,        {4,13,13},
    0b0000000010111,        {4,14,13},
    0b00000000011000,       {4,15,14},
    0b000111010,            {5,0,9},
    0b00011011,             {5,1,8},
    0b000110010,            {5,2,9},
    0b0001100000,           {5,3,10},
    0b0001001100,           {5,4,10},
    0b0001000110,           {5,5,10},
    0b00001011101,          {5,6,11},
    0b00001010100,          {5,7,11},
    0b00001001101,          {5,8,11},
    0b00000111010,          {5,9,11},
    0b000001001111,         {5,10,12},
    0b00000011101,          {5,11,11},
    0b0000001001010,        {5,12,13},
    0b0000000110001,        {5,13,13},
    0b00000000101001,       {5,14,14},
    0b00000000010001,       {5,15,14},
    0b000101111,            {6,0,9},
    0b000101101,            {6,1,9},
    0b0001001110,           {6,2,10},
    0b0001001010,           {6,3,10},
    0b00001110011,          {6,4,11},
    0b00001011110,          {6,5,11},
    0b00001011010,          {6,6,11},
    0b00001001111,          {6,7,11},
    0b00001000101,          {6,8,11},
    0b000001010011,         {6,9,12},
    0b000001000111,         {6,10,12},
    0b000000110010,         {6,11,12},
    0b0000000111011,        {6,12,13},
    0b0000000100110,        {6,13,13},
    0b00000000100100,       {6,14,14},
    0b00000000001111,       {6,15,14},
    0b0001001000,           {7,0,10},
    0b000100010,            {7,1,9},
    0b0000111000,           {7,2,10},
    0b00001011111,          {7,3,11},
    0b00001011100,          {7,4,11},
    0b00001010101,          {7,5,11},
    0b000001011011,         {7,6,12},
    0b000001011010,         {7,7,12},
    0b000001010110,         {7,8,12},
    0b000001001001,         {7,9,12},
    0b0000001001101,        {7,10,13},
    0b0000001000001,        {7,11,13},
    0b0000000110011,        {7,12,13},
    0b00000000101100,       {7,13,14},
    0b0000000000101011,     {7,14,16},
    0b0000000000101010,     {7,15,16},
    0b000101011,            {8,0,9},
    0b00010100,             {8,1,8},
    0b000011110,            {8,2,9},
    0b0000101100,           {8,3,10},
    0b0000110111,           {8,4,10},
    0b00001001110,          {8,5,11},
    0b00001001000,          {8,6,11},
    0b000001010111,         {8,7,12},
    0b000001001110,         {8,8,12},
    0b000000111101,         {8,9,12},
    0b000000101110,         {8,10,12},
    0b0000000110110,        {8,11,13},
    0b0000000100101,        {8,12,13},
    0b00000000011110,       {8,13,14},
    0b000000000010100,      {8,14,15},
    0b000000000010000,      {8,15,15},
    0b0000110101,           {9,0,10},
    0b000011001,            {9,1,9},
    0b0000101001,           {9,2,10},
    0b0000100101,           {9,3,10},
    0b00000101100,          {9,4,11},
    0b00000111011,          {9,5,11},
    0b00000110110,          {9,6,11},
    0b0000001010001,        {9,7,13},
    0b000001000010,         {9,8,12},
    0b0000001001100,        {9,9,13},
    0b0000000111001,        {9,10,13},
    0b00000000110110,       {9,11,14},
    0b00000000100101,       {9,12,14},
    0b00000000010010,       {9,13,14},
    0b0000000000100111,     {9,14,16},
    0b000000000001011,      {9,15,15},
    0b0000100011,           {10,0,10},
    0b0000100001,           {10,1,10},
    0b0000011111,           {10,2,10},
    0b00000111001,          {10,3,11},
    0b00000101010,          {10,4,11},
    0b000001010010,         {10,5,12},
    0b000001001000,         {10,6,12},
    0b0000001010000,        {10,7,13},
    0b000000101111,         {10,8,12},
    0b0000000111010,        {10,9,13},
    0b00000000110111,       {10,10,14},
    0b0000000010101,        {10,11,13},
    0b00000000010110,       {10,12,14},
    0b000000000011010,      {10,13,15},
    0b0000000000100110,     {10,14,16},
    0b00000000000010110,    {10,15,17},
    0b00000110101,          {11,0,11},
    0b0000011001,           {11,1,10},
    0b0000010111,           {11,2,10},
    0b00000100110,          {11,3,11},
    0b000001000110,         {11,4,12},
    0b000000111100,         {11,5,12},
    0b000000110011,         {11,6,12},
    0b000000100100,         {11,7,12},
    0b0000000110111,        {11,8,13},
    0b0000000011010,        {11,9,13},
    0b0000000100010,        {11,10,13},
    0b00000000010111,       {11,11,14},
    0b000000000011011,      {11,12,15},
    0b000000000001110,      {11,13,15},
    0b000000000001001,      {11,14,15},
    0b0000000000000111,     {11,15,16},
    0b00000100010,          {12,0,11},
    0b00000100000,          {12,1,11},
    0b00000011100,          {12,2,11},
    0b000000100111,         {12,3,12},
    0b000000110001,         {12,4,12},
    0b0000001001011,        {12,5,13},
    0b000000011110,         {12,6,12},
    0b0000000110100,        {12,7,13},
    0b00000000110000,       {12,8,14},
    0b00000000101000,       {12,9,14},
    0b000000000110100,      {12,10,15},
    0b000000000011100,      {12,11,15},
    0b000000000010010,      {12,12,15},
    0b0000000000010001,     {12,13,16},
    0b0000000000001001,     {12,14,16},
    0b0000000000000101,     {12,15,16},
    0b000000101101,         {13,0,12},
    0b00000010101,          {13,1,11},
    0b000000100010,         {13,2,12},
    0b0000001000000,        {13,3,13},
    0b0000000111000,        {13,4,13},
    0b0000000110010,        {13,5,13},
    0b00000000110001,       {13,6,14},
    0b00000000101101,       {13,7,14},
    0b00000000011111,       {13,8,14},
    0b00000000010011,       {13,9,14},
    0b00000000001100,       {13,10,14},
    0b000000000001111,      {13,11,15},
    0b0000000000001010,     {13,12,16},
    0b000000000000111,      {13,13,15},
    0b0000000000000110,     {13,14,16},
    0b0000000000000011,     {13,15,16},
    0b0000000110000,        {14,0,13},
    0b000000010111,         {14,1,12},
    0b000000010100,         {14,2,12},
    0b0000000100111,        {14,3,13},
    0b0000000100100,        {14,4,13},
    0b0000000100011,        {14,5,13},
    0b000000000110101,      {14,6,15},
    0b00000000010101,       {14,7,14},
    0b00000000010000,       {14,8,14},
    0b00000000000010111,    {14,9,17},
    0b000000000001101,      {14,10,15},
    0b000000000001010,      {14,11,15},
    0b000000000000110,      {14,12,15},
    0b00000000000000001,    {14,13,17},
    0b0000000000000100,     {14,14,16},
    0b0000000000000010,     {14,15,16},
    0b000000010000,         {15,0,12},
    0b000000001111,         {15,1,12},
    0b0000000010001,        {15,2,13},
    0b00000000011011,       {15,3,14},
    0b00000000011001,       {15,4,14},
    0b00000000010100,       {15,5,14},
    0b000000000011101,      {15,6,15},
    0b00000000001011,       {15,7,14},
    0b000000000010001,      {15,8,15},
    0b000000000001100,      {15,9,15},
    0b0000000000010000,     {15,10,16},
    0b0000000000001000,     {15,11,16},
    0b0000000000000000001,  {15,12,19},
    0b000000000000000001,   {15,13,18},
    0b0000000000000000000,  {15,14,19},
    0b0000000000000001,     {15,15,16}
}

map Table15(HuffPair) {
    0b111,              {0,0,3},
    0b1100,             {0,1,4},
    0b10010,            {0,2,5},
    0b0110101,          {0,3,7},
    0b0101111,          {0,4,7},
    0b01001100,         {0,5,8},
    0b001111100,        {0,6,9},
    0b001101100,        {0,7,9},
    0b001011001,        {0,8,9},
    0b0001111011,       {0,9,10},
    0b0001101100,       {0,10,10},
    0b00001110111,      {0,11,11},
    0b00001101011,      {0,12,11},
    0b00001010001,      {0,13,11},
    0b000001111010,     {0,14,12},
    0b0000000111111,    {0,15,13},
    0b1101,             {1,0,4},
    0b101,              {1,1,3},
    0b10000,            {1,2,5},
    0b011011,           {1,3,6},
    0b0101110,          {1,4,7},
    0b0100100,          {1,5,7},
    0b00111101,         {1,6,8},
    0b00110011,         {1,7,8},
    0b00101010,         {1,8,8},
    0b001000110,        {1,9,9},
    0b000110100,        {1,10,9},
    0b0001010011,       {1,11,10},
    0b0001000001,       {1,12,10},
    0b0000101001,       {1,13,10},
    0b00000111011,      {1,14,11},
    0b00000100100,      {1,15,11},
    0b10011,            {2,0,5},
    0b10001,            {2,1,5},
    0b01111,            {2,2,5},
    0b011000,           {2,3,6},
    0b0101001,          {2,4,7},
    0b0100010,          {2,5,7},
    0b00111011,         {2,6,8},
    0b00110000,         {2,7,8},
    0b00101000,         {2,8,8},
    0b001000000,        {2,9,9},
    0b000110010,        {2,10,9},
    0b0001001110,       {2,11,10},
    0b0000111110,       {2,12,10},
    0b00001010000,      {2,13,11},
    0b00000111000,      {2,14,11},
    0b00000100001,      {2,15,11},
    0b011101,           {3,0,6},
    0b011100,           {3,1,6},
    0b011001,           {3,2,6},
    0b0101011,          {3,3,7},
    0b0100111,          {3,4,7},
    0b00111111,         {3,5,8},
    0b00110111,         {3,6,8},
    0b001011101,        {3,7,9},
    0b001001100,        {3,8,9},
    0b000111011,        {3,9,9},
    0b0001011101,       {3,10,10},
    0b0001001000,       {3,11,10},
    0b0000110110,       {3,12,10},
    0b00001001011,      {3,13,11},
    0b00000110010,      {3,14,11},
    0b00000011101,      {3,15,11},
    0b0110100,          {4,0,7},
    0b010110,           {4,1,6},
    0b0101010,          {4,2,7},
    0b0101000,          {4,3,7},
    0b01000011,         {4,4,8},
    0b00111001,         {4,5,8},
    0b001011111,        {4,6,9},
    0b001001111,        {4,7,9},
    0b001001000,        {4,8,9},
    0b000111001,        {4,9,9},
    0b0001011001,       {4,10,10},
    0b0001000101,       {4,11,10},
    0b0000110001,       {4,12,10},
    0b00001000010,      {4,13,11},
    0b00000101110,      {4,14,11},
    0b00000011011,      {4,15,11},
    0b01001101,         {5,0,8},
    0b0100101,          {5,1,7},
    0b0100011,          {5,2,7},
    0b01000010,         {5,3,8},
    0b00111010,         {5,4,8},
    0b00110100,         {5,5,8},
    0b001011011,        {5,6,9},
    0b001001010,        {5,7,9},
    0b000111110,        {5,8,9},
    0b000110000,        {5,9,9},
    0b0001001111,       {5,10,10},
    0b0000111111,       {5,11,10},
    0b00001011010,      {5,12,11},
    0b00000111110,      {5,13,11},
    0b00000101000,      {5,14,11},
    0b000000100110,     {5,15,12},
    0b001111101,        {6,0,9},
    0b0100000,          {6,1,7},
    0b00111100,         {6,2,8},
    0b00111000,         {6,3,8},
    0b00110010,         {6,4,8},
    0b001011100,        {6,5,9},
    0b001001110,        {6,6,9},
    0b001000001,        {6,7,9},
    0b000110111,        {6,8,9},
    0b0001010111,       {6,9,10},
    0b0001000111,       {6,10,10},
    0b0000110011,       {6,11,10},
    0b00001001001,      {6,12,11},
    0b00000110011,      {6,13,11},
    0b000001000110,     {6,14,12},
    0b000000011110,     {6,15,12},
    0b001101101,        {7,0,9},
    0b00110101,         {7,1,8},
    0b00110001,         {7,2,8},
    0b001011110,        {7,3,9},
    0b001011000,        {7,4,9},
    0b001001011,        {7,5,9},
    0b001000010,        {7,6,9},
    0b0001111010,       {7,7,10},
    0b0001011011,       {7,8,10},
    0b0001001001,       {7,9,10},
    0b0000111000,       {7,10,10},
    0b0000101010,       {7,11,10},
    0b00001000000,      {7,12,11},
    0b00000101100,      {7,13,11},
    0b00000010101,      {7,14,11},
    0b001011010,        {8,0,9},
    0b00101011,         {8,1,8},
    0b00101001,         {8,2,8},
    0b001001101,        {8,3,9},
    0b001001001,        {8,4,9},
    0b000111111,        {8,5,9},
    0b000111000,        {8,6,9},
    0b0001011100,       {8,7,10},
    0b0001001101,       {8,8,10},
    0b0001000010,       {8,9,10},
    0b0000101111,       {8,10,10},
    0b00001000011,      {8,11,11},
    0b00000110000,      {8,12,11},
    0b000000110101,     {8,13,12},
    0b000000100100,     {8,14,12},
    0b000000010100,     {8,15,12},
    0b001000111,        {9,0,9},
    0b00100010,         {9,1,8},
    0b001000011,        {9,2,9},
    0b000111100,        {9,3,9},
    0b000111010,        {9,4,9},
    0b000110001,        {9,5,9},
    0b0001011000,       {9,6,10},
    0b0001001100,       {9,7,10},
    0b0001000011,       {9,8,10},
    0b00001101010,      {9,9,11},
    0b00001000111,      {9,10,11},
    0b00000110110,      {9,11,11},
    0b00000100110,      {9,12,11},
    0b000000100111,     {9,13,12},
    0b000000010111,     {9,14,12},
    0b000000001111,     {9,15,12},
    0b0001101101,       {10,0,10},
    0b000110101,        {10,1,9},
    0b000110011,        {10,2,9},
    0b000101111,        {10,3,9},
    0b0001011010,       {10,4,10},
    0b0001010010,       {10,5,10},
    0b0000111010,       {10,6,10},
    0b0000111001,       {10,7,10},
    0b0000110000,       {10,8,10},
    0b00001001000,      {10,9,11},
    0b00000111001,      {10,10,11},
    0b00000101001,      {10,11,11},
    0b00000010111,      {10,12,11},
    0b000000011011,     {10,13,12},
    0b0000000111110,    {10,14,13},
    0b000000001001,     {10,15,12},
    0b0001010110,       {11,0,10},
    0b000101010,        {11,1,9},
    0b000101000,        {11,2,9},
    0b000100101,        {11,3,9},
    0b0001000110,       {11,4,10},
    0b0001000000,       {11,5,10},
    0b0000110100,       {11,6,10},
    0b0000101011,       {11,7,10},
    0b00001000110,      {11,8,11},
    0b00000110111,      {11,9,11},
    0b00000101010,      {11,10,11},
    0b00000011001,      {11,11,11},
    0b000000011101,     {11,12,12},
    0b000000010010,     {11,13,12},
    0b000000001011,     {11,14,12},
    0b0000000001011,    {11,15,13},
    0b00001110110,      {12,0,11},
    0b0001000100,       {12,1,10},
    0b000011110,        {12,2,9},
    0b0000110111,       {12,3,10},
    0b0000110010,       {12,4,10},
    0b0000101110,       {12,5,10},
    0b00001001010,      {12,6,11},
    0b00001000001,      {12,7,11},
    0b00000110001,      {12,8,11},
    0b00000100111,      {12,9,11},
    0b00000011000,      {12,10,11},
    0b00000010000,      {12,11,11},
    0b000000010110,     {12,12,12},
    0b000000001101,     {12,13,12},
    0b0000000001110,    {12,14,13},
    0b0000000000111,    {12,15,13},
    0b00001011011,      {13,0,11},
    0b0000101100,       {13,1,10},
    0b0000100111,       {13,2,10},
    0b0000100110,       {13,3,10},
    0b0000100010,       {13,4,10},
    0b00000111111,      {13,5,11},
    0b00000110100,      {13,6,11},
    0b00000101101,      {13,7,11},
    0b00000011111,      {13,8,11},
    0b000000110100,     {13,9,12},
    0b000000011100,     {13,10,12},
    0b000000010011,     {13,11,12},
    0b000000001110,     {13,12,12},
    0b000000001000,     {13,13,12},
    0b0000000001001,    {13,14,13},
    0b0000000000011,    {13,15,13},
    0b000001111011,     {14,0,12},
    0b00000111100,      {14,1,11},
    0b00000111010,      {14,2,11},
    0b00000110101,      {14,3,11},
    0b00000101111,      {14,4,11},
    0b00000101011,      {14,5,11},
    0b00000100000,      {14,6,11},
    0b00000010110,      {14,7,11},
    0b000000100101,     {14,8,12},
    0b000000011000,     {14,9,12},
    0b000000010001,     {14,10,12},
    0b000000001100,     {14,11,12},
    0b0000000001111,    {14,12,13},
    0b0000000001010,    {14,13,13},
    0b000000000010,     {14,14,12},
    0b0000000000001,    {14,15,13},
    0b000001000111,     {15,0,12},
    0b00000100101,      {15,1,11},
    0b00000100010,      {15,2,11},
    0b00000011110,      {15,3,11},
    0b00000011100,      {15,4,11},
    0b00000010100,      {15,5,11},
    0b00000010001,      {15,6,11},
    0b000000011010,     {15,7,12},
    0b000000010101,     {15,8,12},
    0b000000010000,     {15,9,12},
    0b000000001010,     {15,10,12},
    0b000000000110,     {15,11,12},
    0b0000000001000,    {15,12,13},
    0b0000000000110,    {15,13,13},
    0b0000000000010,    {15,14,13},
    0b0000000000000,    {15,15,13}
}

map Table16(HuffPair) {
    0b1,                    {0,0,1},
    0b0101,                 {0,1,4},
    0b001110,               {0,2,6},
    0b00101100,             {0,3,8},
    0b001001010,            {0,4,9},
    0b000111111,            {0,5,9},
    0b0001101110,           {0,6,10},
    0b0001011101,           {0,7,10},
    0b00010101100,          {0,8,11},
    0b00010010101,          {0,9,11},
    0b00010001010,          {0,10,11},
    0b000011110010,         {0,11,12},
    0b000011100001,         {0,12,12},
    0b000011000011,         {0,13,12},
    0b0000101111000,        {0,14,13},
    0b000010001,            {0,15,9},
    0b011,                  {1,0,3},
    0b0100,                 {1,1,4},
    0b001100,               {1,2,6},
    0b0010100,              {1,3,7},
    0b00100011,             {1,4,8},
    0b000111110,            {1,5,9},
    0b000110101,            {1,6,9},
    0b000101111,            {1,7,9},
    0b0001010011,           {1,8,10},
    0b0001001011,           {1,9,10},
    0b0001000100,           {1,10,10},
    0b00001110111,          {1,11,11},
    0b000011001001,         {1,12,12},
    0b00001101011,          {1,13,11},
    0b000011001111,         {1,14,12},
    0b00001001,             {1,15,8},
    0b001111,               {2,0,6},
    0b001101,               {2,1,6},
    0b0010111,              {2,2,7},
    0b00100110,             {2,3,8},
    0b001000011,            {2,4,9},
    0b000111010,            {2,5,9},
    0b0001100111,           {2,6,10},
    0b0001011010,           {2,7,10},
    0b00010100001,          {2,8,11},
    0b0001001000,           {2,9,10},
    0b00001111111,          {2,10,11},
    0b00001110101,          {2,11,11},
    0b00001101110,          {2,12,11},
    0b000011010001,         {2,13,12},
    0b000011001110,         {2,14,12},
    0b000010000,            {2,15,9},
    0b00101101,             {3,0,8},
    0b0010101,              {3,1,7},
    0b00100111,             {3,2,8},
    0b001000101,            {3,3,9},
    0b001000000,            {3,4,9},
    0b0001110010,           {3,5,10},
    0b0001100011,           {3,6,10},
    0b0001010111,           {3,7,10},
    0b00010011110,          {3,8,11},
    0b00010001100,          {3,9,11},
    0b000011111100,         {3,10,12},
    0b000011010100,         {3,11,12},
    0b000011000111,         {3,12,12},
    0b0000110000011,        {3,13,13},
    0b0000101101101,        {3,14,13},
    0b0000011010,           {3,15,10},
    0b001001011,            {4,0,9},
    0b00100100,             {4,1,8},
    0b001000100,            {4,2,9},
    0b001000001,            {4,3,9},
    0b0001110011,           {4,4,10},
    0b0001100101,           {4,5,10},
    0b00010110011,          {4,6,11},
    0b00010100100,          {4,7,11},
    0b00010011011,          {4,8,11},
    0b000100001000,         {4,9,12},
    0b000011110110,         {4,10,12},
    0b000011100010,         {4,11,12},
    0b0000110001011,        {4,12,13},
    0b0000101111110,        {4,13,13},
    0b0000101101010,        {4,14,13},
    0b000001001,            {4,15,9},
    0b001000010,            {5,0,9},
    0b00011110,             {5,1,8},
    0b000111011,            {5,2,9},
    0b000111000,            {5,3,9},
    0b0001100110,           {5,4,10},
    0b00010111001,          {5,5,11},
    0b00010101101,          {5,6,11},
    0b000100001001,         {5,7,12},
    0b00010001110,          {5,8,11},
    0b000011111101,         {5,9,12},
    0b000011101000,         {5,10,12},
    0b0000110010000,        {5,11,13},
    0b0000110000100,        {5,12,13},
    0b0000101111010,        {5,13,13},
    0b00000110111101,       {5,14,14},
    0b0000010000,           {5,15,10},
    0b0001101111,           {6,0,10},
    0b000110110,            {6,1,9},
    0b000110100,            {6,2,9},
    0b0001100100,           {6,3,10},
    0b00010111000,          {6,4,11},
    0b00010110010,          {6,5,11},
    0b00010100000,          {6,6,11},
    0b00010000101,          {6,7,11},
    0b000100000001,         {6,8,12},
    0b000011110100,         {6,9,12},
    0b000011100100,         {6,10,12},
    0b000011011001,         {6,11,12},
    0b0000110000001,        {6,12,13},
    0b0000101101110,        {6,13,13},
    0b00001011001011,       {6,14,14},
    0b0000001010,           {6,15,10},
    0b0001100010,           {7,0,10},
    0b000110000,            {7,1,9},
    0b0001011011,           {7,2,10},
    0b0001011000,           {7,3,10},
    0b00010100101,          {7,4,11},
    0b00010011101,          {7,5,11},
    0b00010010100,          {7,6,11},
    0b000100000101,         {7,7,12},
    0b000011111000,         {7,8,12},
    0b0000110010111,        {7,9,13},
    0b0000110001101,        {7,10,13},
    0b0000101110100,        {7,11,13},
    0b0000101111100,        {7,12,13},
    0b000001101111001,      {7,13,15},
    0b000001101110100,      {7,14,15},
    0b0000001000,           {7,15,10},
    0b0001010101,           {8,0,10},
    0b0001010100,           {8,1,10},
    0b0001010001,           {8,2,10},
    0b00010011111,          {8,3,11},
    0b00010011100,          {8,4,11},
    0b00010001111,          {8,5,11},
    0b000100000100,         {8,6,12},
    0b000011111001,         {8,7,12},
    0b0000110101011,        {8,8,13},
    0b0000110010001,        {8,9,13},
    0b0000110001000,        {8,10,13},
    0b0000101111111,        {8,11,13},
    0b00001011010111,       {8,12,14},
    0b00001011001001,       {8,13,14},
    0b00001011000100,       {8,14,14},
    0b0000000111,           {8,15,10},
    0b00010011010,          {9,0,11},
    0b0001001100,           {9,1,10},
    0b0001001001,           {9,2,10},
    0b00010001101,          {9,3,11},
    0b00010000011,          {9,4,11},
    0b000100000000,         {9,5,12},
    0b000011110101,         {9,6,12},
    0b0000110101010,        {9,7,13},
    0b0000110010110,        {9,8,13},
    0b0000110001010,        {9,9,13},
    0b0000110000000,        {9,10,13},
    0b00001011011111,       {9,11,14},
    0b0000101100111,        {9,12,13},
    0b00001011000110,       {9,13,14},
    0b0000101100000,        {9,14,13},
    0b00000001011,          {9,15,11},
    0b00010001011,          {10,0,11},
    0b00010000001,          {10,1,11},
    0b0001000011,           {10,2,10},
    0b00001111101,          {10,3,11},
    0b000011110111,         {10,4,12},
    0b000011101001,         {10,5,12},
    0b000011100101,         {10,6,12},
    0b000011011011,         {10,7,12},
    0b0000110001001,        {10,8,13},
    0b00001011100111,       {10,9,14},
    0b00001011100001,       {10,10,14},
    0b00001011010000,       {10,11,14},
    0b000001101110101,      {10,12,15},
    0b000001101110010,      {10,13,15},
    0b00000110110111,       {10,14,14},
    0b0000000100,           {10,15,10},
    0b000011110011,         {11,0,12},
    0b00001111000,          {11,1,11},
    0b00001110110,          {11,2,11},
    0b00001110011,          {11,3,11},
    0b000011100011,         {11,4,12},
    0b000011011111,         {11,5,12},
    0b0000110001100,        {11,6,13},
    0b00001011101010,       {11,7,14},
    0b00001011100110,       {11,8,14},
    0b00001011100000,       {11,9,14},
    0b00001011010001,       {11,10,14},
    0b00001011001000,       {11,11,14},
    0b00001011000010,       {11,12,14},
    0b0000011011111,        {11,13,13},
    0b00000110110100,       {11,14,14},
    0b00000000110,          {11,15,11},
    0b000011001010,         {12,0,12},
    0b000011100000,         {12,1,12},
    0b000011011110,         {12,2,12},
    0b000011011010,         {12,3,12},
    0b000011011000,         {12,4,12},
    0b0000110000101,        {12,5,13},
    0b0000110000010,        {12,6,13},
    0b0000101111101,        {12,7,13},
    0b0000101101100,        {12,8,13},
    0b000001101111000,      {12,9,15},
    0b00000110111011,       {12,10,14},
    0b00001011000011,       {12,11,14},
    0b00000110111000,       {12,12,14},
    0b00000110110101,       {12,13,14},
    0b0000011011000000,     {12,14,16},
    0b00000000100,          {12,15,11},
    0b00001011101011,       {13,0,14},
    0b000011010011,         {13,1,12},
    0b000011010010,         {13,2,12},
    0b000011010000,         {13,3,12},
    0b0000101110010,        {13,4,13},
    0b0000101111011,        {13,5,13},
    0b00001011011110,       {13,6,14},
    0b00001011010011,       {13,7,14},
    0b00001011001010,       {13,8,14},
    0b0000011011000111,     {13,9,16},
    0b000001101110011,      {13,10,15},
    0b000001101101101,      {13,11,15},
    0b000001101101100,      {13,12,15},
    0b00000110110000011,    {13,13,17},
    0b000001101100001,      {13,14,15},
    0b00000000010,          {13,15,11},
    0b0000101111001,        {14,0,13},
    0b0000101110001,        {14,1,13},
    0b00001100110,          {14,2,11},
    0b000010111011,         {14,3,12},
    0b00001011010110,       {14,4,14},
    0b00001011010010,       {14,5,14},
    0b0000101100110,        {14,6,13},
    0b00001011000111,       {14,7,14},
    0b00001011000101,       {14,8,14},
    0b000001101100010,      {14,9,15},
    0b0000011011000110,     {14,10,16},
    0b000001101100111,      {14,11,15},
    0b00000110110000010,    {14,12,17},
    0b000001101100110,      {14,13,15},
    0b00000110110010,       {14,14,14},
    0b00000000000,          {14,15,11},
    0b000001100,            {15,0,9},
    0b00001010,             {15,1,8},
    0b00000111,             {15,2,8},
    0b000001011,            {15,3,9},
    0b000001010,            {15,4,9},
    0b0000010001,           {15,5,10},
    0b0000001011,           {15,6,10},
    0b0000001001,           {15,7,10},
    0b00000001101,          {15,8,11},
    0b00000001100,          {15,9,11},
    0b00000001010,          {15,10,11},
    0b00000000111,          {15,11,11},
    0b00000000101,          {15,12,11},
    0b00000000011,          {15,13,11},
    0b00000000001,          {15,14,11},
    0b00000011,             {15,15,8}
}

map Table24(HuffPair) {
    0b1111,         {0,0,4},
    0b1101,         {0,1,4},
    0b101110,       {0,2,6},
    0b1010000,      {0,3,7},
    0b10010010,     {0,4,8},
    0b100000110,    {0,5,9},
    0b011111000,    {0,6,9},
    0b0110110010,   {0,7,10},
    0b0110101010,   {0,8,10},
    0b01010011101,  {0,9,11},
    0b01010001101,  {0,10,11},
    0b01010001001,  {0,11,11},
    0b01001101101,  {0,12,11},
    0b01000000101,  {0,13,11},
    0b010000001000, {0,14,12},
    0b001011000,    {0,15,9},
    0b1110,         {1,0,4},
    0b1100,         {1,1,4},
    0b10101,        {1,2,5},
    0b100110,       {1,3,6},
    0b1000111,      {1,4,7},
    0b10000010,     {1,5,8},
    0b01111010,     {1,6,8},
    0b011011000,    {1,7,9},
    0b011010001,    {1,8,9},
    0b011000110,    {1,9,9},
    0b0101000111,   {1,10,10},
    0b0101011001,   {1,11,10},
    0b0100111111,   {1,12,10},
    0b0100101001,   {1,13,10},
    0b0100010111,   {1,14,10},
    0b00101010,     {1,15,8},
    0b101111,       {2,0,6},
    0b10110,        {2,1,5},
    0b101001,       {2,2,6},
    0b1001010,      {2,3,7},
    0b1000100,      {2,4,7},
    0b10000000,     {2,5,8},
    0b01111000,     {2,6,8},
    0b011011101,    {2,7,9},
    0b011001111,    {2,8,9},
    0b011000010,    {2,9,9},
    0b010110110,    {2,10,9},
    0b0101010100,   {2,11,10},
    0b0100111011,   {2,12,10},
    0b0100100111,   {2,13,10},
    0b01000011101,  {2,14,11},
    0b0010010,      {2,15,7},
    0b1010001,      {3,0,7},
    0b100111,       {3,1,6},
    0b1001011,      {3,2,7},
    0b1000110,      {3,3,7},
    0b10000110,     {3,4,8},
    0b01111101,     {3,5,8},
    0b01110100,     {3,6,8},
    0b011011100,    {3,7,9},
    0b011001100,    {3,8,9},
    0b010111110,    {3,9,9},
    0b010110010,    {3,10,9},
    0b0101000101,   {3,11,10},
    0b0100110111,   {3,12,10},
    0b0100100101,   {3,13,10},
    0b0100001111,   {3,14,10},
    0b0010000,      {3,15,7},
    0b10010011,     {4,0,8},
    0b1001000,      {4,1,7},
    0b1000101,      {4,2,7},
    0b10000111,     {4,3,8},
    0b01111111,     {4,4,8},
    0b01110110,     {4,5,8},
    0b01110000,     {4,6,8},
    0b011010010,    {4,7,9},
    0b011001000,    {4,8,9},
    0b010111100,    {4,9,9},
    0b0101100000,   {4,10,10},
    0b0101000011,   {4,11,10},
    0b0100110010,   {4,12,10},
    0b0100011101,   {4,13,10},
    0b01000011100,  {4,14,11},
    0b0001110,      {4,15,7},
    0b100000111,    {5,0,9},
    0b1000010,      {5,1,7},
    0b10000001,     {5,2,8},
    0b01111110,     {5,3,8},
    0b01110111,     {5,4,8},
    0b01110010,     {5,5,8},
    0b011010110,    {5,6,9},
    0b011001010,    {5,7,9},
    0b011000000,    {5,8,9},
    0b010110100,    {5,9,9},
    0b0101010101,   {5,10,10},
    0b0100111101,   {5,11,10},
    0b0100101101,   {5,12,10},
    0b0100011001,   {5,13,10},
    0b0100000110,   {5,14,10},
    0b0001100,      {5,15,7},
    0b011111001,    {6,0,9},
    0b01111011,     {6,1,8},
    0b01111001,     {6,2,8},
    0b01110101,     {6,3,8},
    0b01110001,     {6,4,8},
    0b011010111,    {6,5,9},
    0b011001110,    {6,6,9},
    0b011000011,    {6,7,9},
    0b010111001,    {6,8,9},
    0b0101011011,   {6,9,10},
    0b0101001010,   {6,10,10},
    0b0100110100,   {6,11,10},
    0b0100100011,   {6,12,10},
    0b0100010000,   {6,13,10},
    0b01000001000,  {6,14,11},
    0b0001010,      {6,15,7},
    0b0110110011,   {7,0,10},
    0b01110011,     {7,1,8},
    0b01101111,     {7,2,8},
    0b01101101,     {7,3,8},
    0b011010011,    {7,4,9},
    0b011001011,    {7,5,9},
    0b011000100,    {7,6,9},
    0b010111011,    {7,7,9},
    0b0101100001,   {7,8,10},
    0b0101001100,   {7,9,10},
    0b0100111001,   {7,10,10},
    0b0100101010,   {7,11,10},
    0b0100011011,   {7,12,10},
    0b01000010011,  {7,13,11},
    0b00101111101,  {7,14,11},
    0b00010001,     {7,15,8},
    0b0110101011,   {8,0,10},
    0b011010100,    {8,1,9},
    0b011010000,    {8,2,9},
    0b011001101,    {8,3,9},
    0b011001001,    {8,4,9},
    0b011000001,    {8,5,9},
    0b010111010,    {8,6,9},
    0b010110001,    {8,7,9},
    0b010101001,    {8,8,9},
    0b0101000000,   {8,9,10},
    0b0100101111,   {8,10,10},
    0b0100011110,   {8,11,10},
    0b0100001100,   {8,12,10},
    0b01000000010,  {8,13,11},
    0b00101111001,  {8,14,11},
    0b00010000,     {8,15,8},
    0b0101001111,   {9,0,10},
    0b011000111,    {9,1,9},
    0b011000101,    {9,2,9},
    0b010111111,    {9,3,9},
    0b010111101,    {9,4,9},
    0b010110101,    {9,5,9},
    0b010101110,    {9,6,9},
    0b0101001101,   {9,7,10},
    0b0101000001,   {9,8,10},
    0b0100110001,   {9,9,10},
    0b0100100001,   {9,10,10},
    0b0100010011,   {9,11,10},
    0b01000001001,  {9,12,11},
    0b00101111011,  {9,13,11},
    0b00101110011,  {9,14,11},
    0b00001011,     {9,15,8},
    0b01010011100,  {10,0,11},
    0b010111000,    {10,1,9},
    0b010110111,    {10,2,9},
    0b010110011,    {10,3,9},
    0b010101111,    {10,4,9},
    0b0101011000,   {10,5,10},
    0b0101001011,   {10,6,10},
    0b0100111010,   {10,7,10},
    0b0100110000,   {10,8,10},
    0b0100100010,   {10,9,10},
    0b0100010101,   {10,10,10},
    0b01000010010,  {10,11,11},
    0b00101111111,  {10,12,11},
    0b00101110101,  {10,13,11},
    0b00101101110,  {10,14,11},
    0b00001010,     {10,15,8},
    0b01010001100,  {11,0,11},
    0b0101011010,   {11,1,10},
    0b010101011,    {11,2,9},
    0b010101000,    {11,3,9},
    0b010100100,    {11,4,9},
    0b0100111110,   {11,5,10},
    0b0100110101,   {11,6,10},
    0b0100101011,   {11,7,10},
    0b0100011111,   {11,8,10},
    0b0100010100,   {11,9,10},
    0b0100000111,   {11,10,10},
    0b01000000001,  {11,11,11},
    0b00101110111,  {11,12,11},
    0b00101110000,  {11,13,11},
    0b00101101010,  {11,14,11},
    0b00000110,     {11,15,8},
    0b01010001000,  {12,0,11},
    0b0101000010,   {12,1,10},
    0b0100111100,   {12,2,10},
    0b0100111000,   {12,3,10},
    0b0100110011,   {12,4,10},
    0b0100101110,   {12,5,10},
    0b0100100100,   {12,6,10},
    0b0100011100,   {12,7,10},
    0b0100001101,   {12,8,10},
    0b0100000101,   {12,9,10},
    0b01000000000,  {12,10,11},
    0b00101111000,  {12,11,11},
    0b00101110010,  {12,12,11},
    0b00101101100,  {12,13,11},
    0b00101100111,  {12,14,11},
    0b00000100,     {12,15,8},
    0b01001101100,  {13,0,11},
    0b0100101100,   {13,1,10},
    0b0100101000,   {13,2,10},
    0b0100100110,   {13,3,10},
    0b0100100000,   {13,4,10},
    0b0100011010,   {13,5,10},
    0b0100010001,   {13,6,10},
    0b0100001010,   {13,7,10},
    0b01000000011,  {13,8,11},
    0b00101111100,  {13,9,11},
    0b00101110110,  {13,10,11},
    0b00101110001,  {13,11,11},
    0b00101101101,  {13,12,11},
    0b00101101001,  {13,13,11},
    0b00101100101,  {13,14,11},
    0b00000010,     {13,15,8},
    0b010000001001, {14,0,12},
    0b0100011000,   {14,1,10},
    0b0100010110,   {14,2,10},
    0b0100010010,   {14,3,10},
    0b0100001011,   {14,4,10},
    0b0100001000,   {14,5,10},
    0b0100000011,   {14,6,10},
    0b00101111110,  {14,7,11},
    0b00101111010,  {14,8,11},
    0b00101110100,  {14,9,11},
    0b00101101111,  {14,10,11},
    0b00101101011,  {14,11,11},
    0b00101101000,  {14,12,11},
    0b00101100110,  {14,13,11},
    0b00101100100,  {14,14,11},
    0b00000000,     {14,15,8},
    0b00101011,     {15,0,8},
    0b0010100,      {15,1,7},
    0b0010011,      {15,2,7},
    0b0010001,      {15,3,7},
    0b0001111,      {15,4,7},
    0b0001101,      {15,5,7},
    0b0001011,      {15,6,7},
    0b0001001,      {15,7,7},
    0b0000111,      {15,8,7},
    0b0000110,      {15,9,7},
    0b0000100,      {15,10,7},
    0b00000111,     {15,11,8},
    0b00000101,     {15,12,8},
    0b00000011,     {15,13,8},
    0b00000001,     {15,14,8},
    0b0011,         {15,15,4}
}