use core::ops::{Index, IndexMut};

pub struct ByteMap<T>([T; 256]);

impl<T> ByteMap<T> {
    #[inline(always)]
    pub fn get(&self, byte: u8) -> &T {
        // SAFETY: 0 <= byte <= 255
        unsafe { self.0.get_unchecked(byte as usize) }
    }

    #[inline(always)]
    pub fn get_mut(&mut self, byte: u8) -> &mut T {
        // SAFETY: 0 <= byte <= 255
        unsafe { self.0.get_unchecked_mut(byte as usize) }
    }
}

impl<T> Index<u8> for ByteMap<T> {
    type Output = T;

    #[inline(always)]
    fn index(&self, byte: u8) -> &Self::Output {
        self.get(byte)
    }
}

impl<T> IndexMut<u8> for ByteMap<T> {
    #[inline(always)]
    fn index_mut(&mut self, byte: u8) -> &mut Self::Output {
        self.get_mut(byte)
    }
}

pub static ENCODE_LUT: ByteMap<u8> = ByteMap([
    b'a', b'b', b'c', b'd', b'e', b'f', b'g', b'h', b'i', b'j', b'k', b'l', b'm', b'n', b'o', b'p', b'q', b'r', b's',
    b't', b'u', b'v', b'w', b'x', b'y', b'z', b'A', b'B', b'C', b'D', b'E', b'F', b'G', b'H', b'I', b'J', b'K', b'L',
    b'M', b'N', b'O', b'P', b'Q', b'R', b'S', b'T', b'U', b'V', b'W', b'X', b'Y', b'Z', b'0', b'1', b'2', b'3', b'4',
    b'5', b'6', b'7', b'8', b'9', b'(', b')', b'a', b'b', b'c', b'd', b'e', b'f', b'g', b'h', b'i', b'j', b'k', b'l',
    b'm', b'n', b'o', b'p', b'q', b'r', b's', b't', b'u', b'v', b'w', b'x', b'y', b'z', b'A', b'B', b'C', b'D', b'E',
    b'F', b'G', b'H', b'I', b'J', b'K', b'L', b'M', b'N', b'O', b'P', b'Q', b'R', b'S', b'T', b'U', b'V', b'W', b'X',
    b'Y', b'Z', b'0', b'1', b'2', b'3', b'4', b'5', b'6', b'7', b'8', b'9', b'(', b')', b'a', b'b', b'c', b'd', b'e',
    b'f', b'g', b'h', b'i', b'j', b'k', b'l', b'm', b'n', b'o', b'p', b'q', b'r', b's', b't', b'u', b'v', b'w', b'x',
    b'y', b'z', b'A', b'B', b'C', b'D', b'E', b'F', b'G', b'H', b'I', b'J', b'K', b'L', b'M', b'N', b'O', b'P', b'Q',
    b'R', b'S', b'T', b'U', b'V', b'W', b'X', b'Y', b'Z', b'0', b'1', b'2', b'3', b'4', b'5', b'6', b'7', b'8', b'9',
    b'(', b')', b'a', b'b', b'c', b'd', b'e', b'f', b'g', b'h', b'i', b'j', b'k', b'l', b'm', b'n', b'o', b'p', b'q',
    b'r', b's', b't', b'u', b'v', b'w', b'x', b'y', b'z', b'A', b'B', b'C', b'D', b'E', b'F', b'G', b'H', b'I', b'J',
    b'K', b'L', b'M', b'N', b'O', b'P', b'Q', b'R', b'S', b'T', b'U', b'V', b'W', b'X', b'Y', b'Z', b'0', b'1', b'2',
    b'3', b'4', b'5', b'6', b'7', b'8', b'9', b'(', b')',
]);

#[cfg_attr(feature = "cargo-clippy", allow(clippy::unreadable_literal))]
pub const BAD_SYMBOL: u32 = 0xffffffff;

#[cfg_attr(feature = "cargo-clippy", allow(clippy::unreadable_literal))]
pub static DECODE_LUT0: ByteMap<u32> = ByteMap([
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, 0x0000003e, 0x0000003f, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, 0x00000034, 0x00000035, 0x00000036, 0x00000037, 0x00000038, 0x00000039,
    0x0000003a, 0x0000003b, 0x0000003c, 0x0000003d, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, 0x0000001a, 0x0000001b, 0x0000001c, 0x0000001d, 0x0000001e, 0x0000001f, 0x00000020,
    0x00000021, 0x00000022, 0x00000023, 0x00000024, 0x00000025, 0x00000026, 0x00000027, 0x00000028, 0x00000029,
    0x0000002a, 0x0000002b, 0x0000002c, 0x0000002d, 0x0000002e, 0x0000002f, 0x00000030, 0x00000031, 0x00000032,
    0x00000033, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, 0x00000000, 0x00000001,
    0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00000007, 0x00000008, 0x00000009, 0x0000000a,
    0x0000000b, 0x0000000c, 0x0000000d, 0x0000000e, 0x0000000f, 0x00000010, 0x00000011, 0x00000012, 0x00000013,
    0x00000014, 0x00000015, 0x00000016, 0x00000017, 0x00000018, 0x00000019, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
]);

#[cfg_attr(feature = "cargo-clippy", allow(clippy::unreadable_literal))]
pub static DECODE_LUT1: ByteMap<u32> = ByteMap([
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, 0x00000f80, 0x00000fc0, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, 0x00000d00, 0x00000d40, 0x00000d80, 0x00000dc0, 0x00000e00, 0x00000e40,
    0x00000e80, 0x00000ec0, 0x00000f00, 0x00000f40, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, 0x00000680, 0x000006c0, 0x00000700, 0x00000740, 0x00000780, 0x000007c0, 0x00000800,
    0x00000840, 0x00000880, 0x000008c0, 0x00000900, 0x00000940, 0x00000980, 0x000009c0, 0x00000a00, 0x00000a40,
    0x00000a80, 0x00000ac0, 0x00000b00, 0x00000b40, 0x00000b80, 0x00000bc0, 0x00000c00, 0x00000c40, 0x00000c80,
    0x00000cc0, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, 0x00000000, 0x00000040,
    0x00000080, 0x000000c0, 0x00000100, 0x00000140, 0x00000180, 0x000001c0, 0x00000200, 0x00000240, 0x00000280,
    0x000002c0, 0x00000300, 0x00000340, 0x00000380, 0x000003c0, 0x00000400, 0x00000440, 0x00000480, 0x000004c0,
    0x00000500, 0x00000540, 0x00000580, 0x000005c0, 0x00000600, 0x00000640, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
]);

#[cfg_attr(feature = "cargo-clippy", allow(clippy::unreadable_literal))]
pub static DECODE_LUT2: ByteMap<u32> = ByteMap([
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, 0x0003e000, 0x0003f000, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, 0x00034000, 0x00035000, 0x00036000, 0x00037000, 0x00038000, 0x00039000,
    0x0003a000, 0x0003b000, 0x0003c000, 0x0003d000, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, 0x0001a000, 0x0001b000, 0x0001c000, 0x0001d000, 0x0001e000, 0x0001f000, 0x00020000,
    0x00021000, 0x00022000, 0x00023000, 0x00024000, 0x00025000, 0x00026000, 0x00027000, 0x00028000, 0x00029000,
    0x0002a000, 0x0002b000, 0x0002c000, 0x0002d000, 0x0002e000, 0x0002f000, 0x00030000, 0x00031000, 0x00032000,
    0x00033000, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, 0x00000000, 0x00001000,
    0x00002000, 0x00003000, 0x00004000, 0x00005000, 0x00006000, 0x00007000, 0x00008000, 0x00009000, 0x0000a000,
    0x0000b000, 0x0000c000, 0x0000d000, 0x0000e000, 0x0000f000, 0x00010000, 0x00011000, 0x00012000, 0x00013000,
    0x00014000, 0x00015000, 0x00016000, 0x00017000, 0x00018000, 0x00019000, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
]);

#[cfg_attr(feature = "cargo-clippy", allow(clippy::unreadable_literal))]
pub static DECODE_LUT3: ByteMap<u32> = ByteMap([
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, 0x00f80000, 0x00fc0000, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, 0x00d00000, 0x00d40000, 0x00d80000, 0x00dc0000, 0x00e00000, 0x00e40000,
    0x00e80000, 0x00ec0000, 0x00f00000, 0x00f40000, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, 0x00680000, 0x006c0000, 0x00700000, 0x00740000, 0x00780000, 0x007c0000, 0x00800000,
    0x00840000, 0x00880000, 0x008c0000, 0x00900000, 0x00940000, 0x00980000, 0x009c0000, 0x00a00000, 0x00a40000,
    0x00a80000, 0x00ac0000, 0x00b00000, 0x00b40000, 0x00b80000, 0x00bc0000, 0x00c00000, 0x00c40000, 0x00c80000,
    0x00cc0000, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, 0x00000000, 0x00040000,
    0x00080000, 0x000c0000, 0x00100000, 0x00140000, 0x00180000, 0x001c0000, 0x00200000, 0x00240000, 0x00280000,
    0x002c0000, 0x00300000, 0x00340000, 0x00380000, 0x003c0000, 0x00400000, 0x00440000, 0x00480000, 0x004c0000,
    0x00500000, 0x00540000, 0x00580000, 0x005c0000, 0x00600000, 0x00640000, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
    BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL, BAD_SYMBOL,
]);
