First commit

This commit is contained in:
ef3d0c3e 2020-11-16 14:08:41 +01:00
commit 76f465163f
16 changed files with 4916 additions and 0 deletions

19
CMakeLists.txt Normal file
View file

@ -0,0 +1,19 @@
cmake_minimum_required(VERSION 2.8)
project(fb)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -fopenmp")
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
include_directories(include)
include_directories(src/vendor)
file(GLOB_RECURSE SOURCES
"src/*.cpp"
"src/*.hpp"
"src/resources/*.cpp"
"src/resources/*.hpp"
)
add_executable(${PROJECT_NAME} ${SOURCES})
target_link_libraries(${PROJECT_NAME})

3
README.md Normal file
View file

@ -0,0 +1,3 @@
# FB32
Aquarium en framebuffer (24/32 bit seulement)
Si vous voulez la version 16bit, envoyez moi un mail

BIN
build/bitmap1 Normal file

Binary file not shown.

68
src/bitmap.cpp Normal file
View file

@ -0,0 +1,68 @@
#include "bitmap.hpp"
#include <stdio.h>
#include <inttypes.h>
#include <stdlib.h>
#define MIN(a, b) ( (a<b)?a:b )
#include "config.hpp"
u8 LoadBitmap(const char* path, Bitmap& bitmap)
{
FILE* fp;
fp = fopen(path, "r");
if (fp == NULL) return BITMAP_ERR_CANNOT_OPEN;
if (fscanf(fp, "%u%u", &bitmap.size_x, &bitmap.size_y) != 2) return BITMAP_ERR_NOT_BITMAP;
size_t bufflen = bitmap.size_x * bitmap.size_y;
bitmap.pixels = (RGB*)malloc(bufflen * bytes_per_pixel);
if (bitmap.pixels == NULL) return BITMAP_ERR_CANNOT_ALLOCATE;
if (fread(bitmap.pixels, bytes_per_pixel, bufflen, fp) != bufflen)
{
free(bitmap.pixels);
return BITMAP_ERR_CANNOT_READ;
}
if (fclose(fp) != 0) return BITMAP_ERR_CANNOT_CLOSE;
return EXIT_SUCCESS;
}
void UnloadBitmap(Bitmap& bitmap)
{
free(bitmap.pixels);
}
void DrawBitmap(RGB* image, const unsigned int w, const unsigned int& h,
const Bitmap& bitmap, const unsigned int& x, const unsigned int& y)
{
const unsigned int w2 = MIN(MIN(w-x, x+bitmap.size_x), bitmap.size_x)*bytes_per_pixel;
const unsigned int y2 = MIN(h, y+bitmap.size_y);
#pragma omp parallel if(USE_PARALLELIZATION) shared(image)
{
unsigned int i;
#pragma omp for ordered schedule(dynamic) private(i)
for (i = y ; i < y2; i++)
memcpy(&image[i*w], &bitmap.pixels[(i-y)*bitmap.size_x], w2);
}
}
void DrawBitmap(byte* buffer, const fb_var_screeninfo& vinfo,
const Bitmap& bitmap, const unsigned int& x, const unsigned int& y)
{
const unsigned int w2 = MIN(MIN(vinfo.xres-x, x+bitmap.size_x), bitmap.size_x)*bytes_per_pixel;
const unsigned int y2 = MIN(vinfo.yres, y+bitmap.size_y);
#pragma omp parallel if(USE_PARALLELIZATION) shared(buffer)
{
unsigned int i;
#pragma omp for ordered schedule(dynamic) private(i)
for (i = y ; i < y2; i++)
memcpy(&buffer[(i*vinfo.xres+x)*bytes_per_pixel], &bitmap.pixels[(i-y)*bitmap.size_x], w2);
}
}

34
src/bitmap.hpp Normal file
View file

@ -0,0 +1,34 @@
#ifndef FB32_BITMAP_HPP
#define FB32_BITMAP_HPP
#include "fb.hpp"
#define BITMAP_ERR_CANNOT_OPEN 1 //Could not open file at path
#define BITMAP_ERR_NOT_BITMAP 2 //File is not a bitmap
#define BITMAP_ERR_CANNOT_ALLOCATE 3 //Could not allocate bitmap
#define BITMAP_ERR_CANNOT_READ 4 //Could not read the bitmap
#define BITMAP_ERR_CANNOT_CLOSE 5 //Could not close the stream
/* Structure holding informations for a bitmap */
struct Bitmap
{
RGB* pixels;
unsigned int size_x;
unsigned int size_y;
};
/* Create bitmap from a path */
u8 LoadBitmap(const char* path, Bitmap& bitmap);
/* Deallocate resources of the bitmap */
void UnloadBitmap(Bitmap& bitmap);
/* Draw a bitmap in the image */
void DrawBitmap(RGB* image, const unsigned int w, const unsigned int& h,
const Bitmap& bitmap, const unsigned int& x, const unsigned int& y);
/* Draw a bitmap directly in the frame buffer */
void DrawBitmap(byte* buffer, const fb_var_screeninfo& vinfo,
const Bitmap& bitmap, const unsigned int& x, const unsigned int& y);
#endif // FB32_BITMAP_HPP

19
src/config.hpp Normal file
View file

@ -0,0 +1,19 @@
#ifndef FB32_COFIG_HPP
#define FB32_COFIG_HPP
#include "font_7x14.hpp"
/****************\
General settings
\****************/
/* Wether or not to restore the screen as it was when FB32 ends */
#define RESTORE_SCREEN true
/* Force FB32 to have touchscreen input method enabled */
#define REQUIRE_TOUCHSCREEN false
/* Wether or not to use parallelization when possible */
#define USE_PARALLELIZATION false
#endif // FB32_COFIG_HPP

87
src/fb.cpp Normal file
View file

@ -0,0 +1,87 @@
#include "fb.hpp"
#include <sys/types.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "config.hpp"
#define MIN(a, b) ( (a<b)?a:b )
void DrawImage(byte* buffer, const size_t& buflen,
const RGB* image)
{
memcpy(buffer, image, buflen);
}
void GetImage(const byte* buffer, const size_t& buflen,
RGB* image)
{
memcpy(image, buffer, buflen);
}
void DrawText(byte* buffer, const fb_var_screeninfo& vinfo,
const unsigned int& pos_x, const unsigned int& pos_y, const unsigned int& w,
const RGB& fg, const RGB& bg, const char* str, const size_t& size_str, const u8& flags)
{
//Avoid drawing ouutside the screen
const size_t size2 = MIN(size_str, ((size_t)(vinfo.xres-pos_x)/FONT_WIDTH));
if (pos_y+FONT_HEIGHT > vinfo.yres)
return;
for (unsigned int i = 0; i < size2; i++)
{
unsigned int offset = str[i]*FONT_WIDTH_B*FONT_HEIGHT;
for (unsigned int y = 0; y < FONT_HEIGHT; y++)
{
for (unsigned int x = 0; x <= FONT_WIDTH+FONT_SPACING; x++)
{
if ( ! (flags & FB_TEXT_NOFG) && ((fontdata[offset + y*FONT_WIDTH_B] >> (FONT_WIDTH-x)) & 0b1) == 1 && x <= FONT_WIDTH)
buffer[((y+pos_y)*vinfo.xres+i*__FONT_SPACING+x+pos_x)*((int)vinfo.bits_per_pixel/8)] = (fg & 0xFF), buffer[((y+pos_y)*vinfo.xres+i*__FONT_SPACING+x+pos_x)*((int)vinfo.bits_per_pixel/8)+1] = ((fg >> 8) & 0xFF), buffer[((y+pos_y)*vinfo.xres+i*__FONT_SPACING+x+pos_x)*((int)vinfo.bits_per_pixel/8)+2] = ((fg >> 16) & 0xFF);
else if (! (flags & FB_TEXT_NOBG) )
buffer[((y+pos_y)*vinfo.xres+i*__FONT_SPACING+x+pos_x)*((int)vinfo.bits_per_pixel/8)] = (bg & 0xFF), buffer[((y+pos_y)*vinfo.xres+i*__FONT_SPACING+x+pos_x)*((int)vinfo.bits_per_pixel/8)+1] = ((bg >> 8) & 0xFF), buffer[((y+pos_y)*vinfo.xres+i*__FONT_SPACING+x+pos_x)*((int)vinfo.bits_per_pixel/8)+3] = ((bg >> 16) & 0xFF);
}
}
}
}
void OpenFrameBuffer(char* path, int& fd)
{
fd = open(path, O_RDWR);
if (fd < 0) perror("OpenFrameBuffer() : open");
}
void GetBuffer(byte* &buffer, size_t& buflen, const int& fd, fb_var_screeninfo& vinfo, fb_fix_screeninfo& finfo)
{
if ( ioctl(fd, FBIOGET_VSCREENINFO, &vinfo) || ioctl(fd, FBIOGET_FSCREENINFO, &finfo) ) perror("GetBuffer() : ioctl");
buflen = vinfo.yres_virtual * finfo.line_length;
buffer = (byte*)mmap
(
NULL,
buflen,
PROT_READ | PROT_WRITE,
MAP_SHARED,
fd,
0
);
if (buffer == MAP_FAILED) perror("mmap");
if (vinfo.bits_per_pixel != 24 && vinfo.bits_per_pixel != 32) perror("GetBuffer() : FB24 only supports 24bits/32bits display.");
}
void CloseFrameBuffer(byte* buffer, const size_t& buflen, int& fd)
{
if (buffer && buffer != MAP_FAILED)
munmap(buffer, buflen);
if (fd >= 0)
close(fd);
}

55
src/fb.hpp Normal file
View file

@ -0,0 +1,55 @@
#ifndef FB32_FRAMEBUFFER_HPP
#define FB32_FRAMEBUFFER_HPP
#include <linux/fb.h>
#include <cstdint>
#include <cstddef>
#include <cstring>
#include "type.hpp"
/* We are using RGB565:
* -> 5bits depth red
* -> 6bits depth green
* -> 5bits depth blue
*/
typedef uint32_t RGB;
const u8 bytes_per_pixel = 4;
/* COLOR(r, g, b):
* max r -> 255
* max g -> 255
* max b -> 255
(inclusive)
*/
constexpr RGB Color(const byte& r, const byte& g, const byte& b)
{
return RGB((r << 16) | (g << 8) | b);
}
/* Push image on the screen */
void DrawImage(byte* buffer, const size_t& buflen,
const RGB* image);
/* Store the screen's current frame in an image */
void GetImage(const byte* buffer, const size_t& buflen,
RGB* image);
#define FB_TEXT_NOBG 0b01
#define FB_TEXT_NOFG 0b10
/* Basic text drawing */
void DrawText(byte* buffer, const fb_var_screeninfo& vinfo,
const unsigned int& x, const unsigned int& y, const unsigned int& w,
const RGB& fg, const RGB& bg, const char* str, const size_t& size_str, const u8& flags=0);
//void DrawTextLine(const int& fd, const fb_var_screeninfo& vinfo, const fb_fix_screeninfo& finfo, byte* buffer, const size_t& pos_x, const size_t& pos_y,
//const RGB& FG, const RGB& BG, const char* str, const size_t& slen);
/* Open the frame buffer posix char-file */
void OpenFrameBuffer(char* path, int& fd);
/* Initialize the byte buffer */
void GetBuffer(byte* &buffer, size_t& buflen, const int& fd, fb_var_screeninfo& vinfo, fb_fix_screeninfo& finfo);
/* Close the frame buffer file and deallocate resources */
void CloseFrameBuffer(byte* buffer, const size_t& buflen, int& fd);
#endif // FB32_FRAMEBUFFER_HPP

4120
src/font_7x14.hpp Normal file

File diff suppressed because it is too large Load diff

203
src/main.cpp Normal file
View file

@ -0,0 +1,203 @@
#include "fb.hpp"
#include "bitmap.hpp"
#include <inttypes.h>
#include <string.h> //memset
#include <iostream>
#include <bitset>
#include <stdlib.h>
#include <stdio.h>
#include "config.hpp"
#include <unistd.h>
/* Microsecond sleep */
#ifndef mslep
#define msleep(x) usleep(x*1000u)
#endif //msleep
void DirectionChangeX(s8& direction, u16& directionChange, u8& speed,
char* fish, const char *fish_array, const u8& fish_width)
{
directionChange = 20+rand()%150;
speed = 1+rand()%3;
direction *= -1;
if (direction == 1)
memcpy(fish, &fish_array[0], fish_width);
else
memcpy(fish, &fish_array[fish_width], fish_width);
}
void DirectionChangeY(s8& direction, u16& directionChange, u8& speed)
{
directionChange = 20+rand()%100;
speed = 1+rand()%1;
direction *= -1;
}
void MoveFish(byte* buffer, const fb_var_screeninfo& vinfo, const u64& ticks,
s8& direction_x, u16& directionChange_x, u8& speed_x, s16& pos_x,
s8& direction_y, u16& directionChange_y, u8& speed_y, s16& pos_y,
char* fish, const RGB& color, const char *fish_array, const u8& fish_width)
{
//Moving
if (ticks % directionChange_x == 0)
DirectionChangeX(direction_x, directionChange_x, speed_x, fish, fish_array, fish_width);
if (ticks % directionChange_y == 0)
DirectionChangeY(direction_y, directionChange_y, speed_y);
if (direction_x == 1) pos_x+=speed_x;
else pos_x-=speed_x;
if (pos_x < 0)
{
pos_x = 0;
DirectionChangeX(direction_x, directionChange_x, speed_x, fish, fish_array, fish_width);
}
if ((s16)(pos_x+fish_width*FONT_WIDTH) > (s16)vinfo.xres)
{
pos_x = vinfo.xres-fish_width*FONT_WIDTH;
DirectionChangeX(direction_x, directionChange_x, speed_x, fish, fish_array, fish_width);
}
if (direction_y == 1) pos_y+=speed_y;
else pos_y-=speed_y;
if (pos_y < 0)
{
pos_y = 0;
DirectionChangeY(direction_y, directionChange_y, speed_y);
}
if ((s16)(pos_y+FONT_HEIGHT) > (s16)vinfo.yres)
{
pos_y = vinfo.yres-FONT_HEIGHT;
DirectionChangeY(direction_y, directionChange_y, speed_y);
}
//Drawing
DrawText(buffer, vinfo,
pos_x, pos_y, vinfo.xres,
color, 0x0000FF, fish, fish_width);
}
int main(int argc, char* argv[])
{
/* Arguments:
- argv[1] -> framebuffer
- argv[2] -> touchscreen
*/
#if REQUIRE_TOUCHSCREEN == true
if (argc < 3) perror("main() : You need to specify: [1] the framebuffer, [2] the touchscreen");
#else
if (argc < 2) perror("main() : You need to specify: [1] the framebuffer.");
#endif
//* Screen display
struct fb_var_screeninfo vinfo;
struct fb_fix_screeninfo finfo;
byte* buffer = NULL;
size_t buflen = 0;
int fd1 = -1;
OpenFrameBuffer(argv[1], fd1);
GetBuffer(buffer, buflen, fd1, vinfo, finfo);
#if RESTORE_SCREEN == true
RGB* image_t = (RGB*)calloc(vinfo.xres*vinfo.yres, sizeof(RGB));
//GetImage(buffer, buflen, image_t);
#endif
//Bitmaps stuff here
Bitmap bitmap1;
u8 err = LoadBitmap("bitmap1", bitmap1);
if (err != EXIT_SUCCESS)
{
fprintf(stderr, "main() : LoadBitmap failed with error code: %d", err);
exit(EXIT_FAILURE);
#if RESTORE_SCREEN == true
DrawImage(buffer, buflen, image_t);
free(image_t);
#endif
}
static const u8 fish_width = 7;
static const char fish_array[fish_width*2] =
{
'>', '<', '(', '(', '(', '*', '>', //><(((*>
'<', '*', ')', ')', ')', '>', '<' //<*)))><
};
static const u16 fish_num = 256;
char fish[fish_num][fish_width];
s8 direction_x[fish_num];
u16 directionChange_x[fish_num];
u8 speed_x[fish_num];
s16 pos_x[fish_num];
s8 direction_y[fish_num];
u16 directionChange_y[fish_num];
u8 speed_y[fish_num];
s16 pos_y[fish_num];
RGB color[fish_num];
for (u16 i = 0; i < fish_num; i++)
{
direction_x[i] = (rand()%1==0)?-1:1;
directionChange_x[i] = 50+rand()%150;
speed_x[i] = 1+rand()%3;
pos_x[i] = rand()%vinfo.xres;
direction_y[i] = (rand()%1==0)?-1:1;
directionChange_y[i] = 10+rand()%100;
speed_y[i] = 1+rand()%1;
pos_y[i] = rand()%vinfo.yres;
color[i] = rand()%0xFFFFFF;
}
u64 ticks = 0;
char ticks_t[9] = "0";
while (true)
{
//Background (aquarium)
DrawBitmap(buffer, vinfo, bitmap1, 0, 0);
//Fishes
for (u16 i = 0; i < fish_num; i++)
MoveFish(buffer, vinfo, ticks,
direction_x[i], directionChange_x[i], speed_x[i], pos_x[i],
direction_y[i], directionChange_y[i], speed_y[i], pos_y[i],
fish[i], color[i], fish_array, fish_width);
sprintf(ticks_t, "%ld", ticks);
DrawText(buffer, vinfo,
0, 0, vinfo.xres,
Color(31, 63, 0), 0x00FF, ticks_t, 9);
msleep(17);
ticks++;
}
UnloadBitmap(bitmap1);
#if RESTORE_SCREEN == true
DrawImage(buffer, buflen, image_t);
free(image_t);
#endif
CloseFrameBuffer(buffer, buflen, fd1);
return EXIT_SUCCESS;
}

20
src/type.hpp Normal file
View file

@ -0,0 +1,20 @@
#ifndef FB32_TYPE_HPP
#define FB32_TYPE_HPP
#include <cstdint>
#ifndef byte
typedef uint8_t byte;
#endif
typedef uint8_t u8;
typedef uint16_t u16;
typedef uint32_t u32;
typedef uint64_t u64;
typedef int8_t s8;
typedef int16_t s16;
typedef int32_t s32;
typedef int64_t s64;
#endif // FB32_TYPE_HPP

51
tools/mkBitmap.cpp Normal file
View file

@ -0,0 +1,51 @@
#include <iostream>
#include <fstream>
#include <png++/png.hpp>
#define CACHESIZE 4096u //must be lower than 2^13
#define __CACHESIZE (CACHESIZE*4u) //Do not edit
int main(int argc, char *argv[])
{
if (argc < 3)
{
std::cerr << "USAGE: " << argv[0] << " INPUT.PNG OUTPUT" << std::endl;
exit(EXIT_FAILURE);
}
png::image< png::rgb_pixel > input(argv[1]);
std::ofstream bitmap(argv[2]);
uint32_t width, height, x, y;
width = input.get_width();
height = input.get_height();
x = y = 0;
size_t i = 0;
bitmap << width << " " << height << " ";
char* cache = new char[__CACHESIZE];
while (i < width*height*4)
{
x = ((uint32_t) i/4 ) % width;
y = (uint32_t)(i/4/width);
cache[(i+1)%__CACHESIZE] = input[y][x].red;
cache[(i+0)%__CACHESIZE] = input[y][x].green;
cache[(i+3)%__CACHESIZE] = input[y][x].blue;
cache[(i+2)%__CACHESIZE] = 255;
i+=4;
if (i % __CACHESIZE == 0) //Write
bitmap.write(cache, __CACHESIZE);
}
if (i % __CACHESIZE != 0) //Write what has not been written
bitmap.write(cache, width*height*4 % __CACHESIZE);
delete[] cache;
bitmap.close();
return EXIT_SUCCESS;
}

19
tools/mkBitmap.sh Executable file
View file

@ -0,0 +1,19 @@
#!/bin/bash
FLAGS="-Wall -std=c++11"
LIBS=("libpng")
NAME="mkBitmap"
SRCS=("mkBitmap.cpp")
for i in ${LIBS[@]}
do
LIBS_+="$(pkg-config --libs "${i}") "
done
for i in ${SRCS[@]}
do
SRCS_+="$(find "${i}" -maxdepth 1 | grep -E ".cpp|.hpp") "
done
g++ ${SRCS_} ${FLAGS} ${LIBS_[@]} -o ${NAME}

65
tools/mkCharmap.cpp Normal file
View file

@ -0,0 +1,65 @@
#include <iostream>
#include <fstream>
#include <sstream>
#include <iomanip>
#include <png++/png.hpp>
int main(int argc, char *argv[])
{
if (argc < 3)
{
std::cerr << "USAGE: " << argv[0] << " INPUT.PNG OUTPUT" << std::endl;
exit(EXIT_FAILURE);
}
png::image< png::rgba_pixel > input(argv[1]);
std::ofstream bitmap(argv[2]);
uint32_t width, height, x, y;
width = input.get_width();
height = input.get_height();
x = y = 0;
size_t i = 0;
std::stringstream result;
result << std::string("static const unsigned int ") << std::string(argv[2]) << std::string("_width = ") << std::to_string(width) << std::string(";\n");
result << std::string("static const unsigned int ") << std::string(argv[2]) << std::string("_height = ") << std::to_string(height) << std::string(";\n");
result << std::string("static const unsigned char ");
result << std::string(argv[2]);
result << std::string("_rgba[");
result << std::to_string(width*height*4);
result << std::string("] =\n{\n\t");
result << std::setfill('0') << std::setw(2) << std::hex;
while (i < width * height)
{
x = (uint32_t) i % width;
y = (uint32_t)(i / width);
result << std::string("0x") << (int)input[y][x].red;
result << std::string(", ");
result << std::string("0x") << (int)input[y][x].green;
result << std::string(", ");
result << std::string("0x") << (int)input[y][x].blue;
result << std::string(", ");
result << std::string("0x") << (int)input[y][x].alpha;
i++;
if (i == width*height)
result << std::string(",");
else if (i % 5 == 0)
result << std::string(",\n\t");
else
result << std::string(", ");
}
result << std::string("\n};");
bitmap << result.rdbuf();
bitmap.close();
return EXIT_SUCCESS;
}

19
tools/mkCharmap.sh Executable file
View file

@ -0,0 +1,19 @@
#!/bin/bash
FLAGS="-Wall -std=c++11"
LIBS=("libpng")
NAME="mkCharmap"
SRCS=("mkCharmap.cpp")
for i in ${LIBS[@]}
do
LIBS_+="$(pkg-config --libs "${i}") "
done
for i in ${SRCS[@]}
do
SRCS_+="$(find "${i}" -maxdepth 1 | grep -E ".cpp|.hpp") "
done
g++ ${SRCS_} ${FLAGS} ${LIBS_[@]} -o ${NAME}

134
tools/out Normal file
View file

@ -0,0 +1,134 @@
static const unsigned int out_width = 28;
static const unsigned int out_height = 23;
static const unsigned char out_rgba[2576] =
{
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0xad, 0x84, 0x4a, 0xff, 0xad, 0x84, 0x4a, 0xff, 0xad, 0x84, 0x4a, 0xff, 0xad, 0x84, 0x4a, 0xff,
0xad, 0x84, 0x4a, 0xff, 0xad, 0x84, 0x4a, 0xff, 0xad, 0x84, 0x4a, 0xff, 0xad, 0x84, 0x4a, 0xff, 0x3a, 0x2f, 0x20, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0xe1, 0xaa, 0x5d, 0xff,
0x51, 0x40, 0x29, 0xff, 0x45, 0x37, 0x24, 0xff, 0x45, 0x37, 0x24, 0xff, 0x45, 0x37, 0x24, 0xff, 0x45, 0x37, 0x24, 0xff,
0x45, 0x37, 0x24, 0xff, 0x45, 0x37, 0x24, 0xff, 0x1f, 0x1b, 0x16, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0xe1, 0xaa, 0x5d, 0xff, 0x21, 0x1d, 0x17, 0xff, 0x52, 0x41, 0x29, 0xff,
0x5e, 0x4b, 0x2e, 0xff, 0x5e, 0x4b, 0x2e, 0xff, 0x5e, 0x4b, 0x2e, 0xff, 0x5e, 0x4b, 0x2e, 0xff, 0x5e, 0x4b, 0x2e, 0xff,
0x5e, 0x4b, 0x2e, 0xff, 0x5e, 0x4b, 0x2e, 0xff, 0x5f, 0x4b, 0x2e, 0xff, 0x20, 0x1c, 0x17, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0xe1, 0xaa, 0x5d, 0xff, 0x21, 0x1d, 0x17, 0xff, 0x5e, 0x4b, 0x2e, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x27, 0x22, 0x1a, 0xff, 0x15, 0x14, 0x13, 0xff,
0x45, 0x37, 0x24, 0xff, 0x34, 0x2b, 0x1e, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0xe1, 0xaa, 0x5d, 0xff, 0x21, 0x1d, 0x17, 0xff,
0x5e, 0x4b, 0x2e, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x3c, 0x31, 0x21, 0xff, 0xdf, 0xa9, 0x5c, 0xff, 0x92, 0x71, 0x41, 0xff, 0x45, 0x37, 0x24, 0xff, 0x34, 0x2b, 0x1e, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0xe1, 0xaa, 0x5d, 0xff, 0x21, 0x1d, 0x17, 0xff, 0x5e, 0x4b, 0x2e, 0xff, 0x11, 0x11, 0x11, 0xff,
0x20, 0x1c, 0x17, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x2a, 0x24, 0x1b, 0xff, 0xc1, 0x92, 0x52, 0xff,
0x6c, 0x54, 0x32, 0xff, 0x45, 0x37, 0x24, 0xff, 0x34, 0x2b, 0x1e, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x7f, 0x62, 0x3a, 0xff,
0x1a, 0x18, 0x15, 0xff, 0x5e, 0x4b, 0x2e, 0xff, 0x1d, 0x1a, 0x16, 0xff, 0xbd, 0x8f, 0x50, 0xff, 0x85, 0x67, 0x3c, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x1b, 0x18, 0x15, 0xff, 0x11, 0x11, 0x11, 0xff, 0x45, 0x37, 0x24, 0xff,
0x34, 0x2b, 0x1e, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x62, 0x4e, 0x30, 0xff,
0xa7, 0x7f, 0x48, 0xff, 0xe1, 0xaa, 0x5d, 0xff, 0xe1, 0xaa, 0x5d, 0xff, 0x80, 0x63, 0x3a, 0xff, 0x21, 0x1d, 0x17, 0xff,
0xc4, 0x95, 0x53, 0xff, 0x46, 0x38, 0x25, 0xff, 0x45, 0x37, 0x24, 0xff, 0x34, 0x2b, 0x1e, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0xb2, 0x87, 0x4c, 0xff, 0xe1, 0xaa, 0x5d, 0xff, 0xe1, 0xaa, 0x5d, 0xff,
0xe1, 0xaa, 0x5d, 0xff, 0xe1, 0xaa, 0x5d, 0xff, 0xc9, 0x98, 0x54, 0xff, 0xe1, 0xaa, 0x5d, 0xff, 0xd2, 0x9f, 0x57, 0xff,
0x62, 0x4e, 0x30, 0xff, 0x34, 0x2b, 0x1e, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0xaa, 0x82, 0x49, 0xff, 0xcd, 0x9b, 0x56, 0xff, 0xcd, 0x9b, 0x56, 0xff, 0xcd, 0x9b, 0x56, 0xff, 0xcd, 0x9b, 0x56, 0xff,
0xcd, 0x9b, 0x56, 0xff, 0xcd, 0x9b, 0x56, 0xff, 0xcd, 0x9b, 0x56, 0xff, 0xc5, 0x95, 0x52, 0xff, 0x31, 0x28, 0x1e, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11, 0xff,
};