1
0
mirror of https://github.com/lvgl/lvgl.git synced 2025-01-14 06:42:58 +08:00

feat(fs): add support for memory-mapped files (#4462)

Co-authored-by: Zoltan Janosy <zjanosy@fishman.com>
Co-authored-by: Gabor Kiss-Vamosi <kisvegabor@gmail.com>
This commit is contained in:
Zoltan Janosy 2023-08-31 13:00:26 +02:00 committed by GitHub
parent 6d389ce979
commit ca54d127c2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
19 changed files with 1695 additions and 50 deletions

View File

@ -11,6 +11,7 @@ LVG has built in support for:
- STDIO (Linux and Windows using C standard function .e.g fopen, fread) - STDIO (Linux and Windows using C standard function .e.g fopen, fread)
- POSIX (Linux and Windows using POSIX function .e.g open, read) - POSIX (Linux and Windows using POSIX function .e.g open, read)
- WIN32 (Windows using Win32 API function .e.g CreateFileA, ReadFile) - WIN32 (Windows using Win32 API function .e.g CreateFileA, ReadFile)
- MEMFS (read a file from a memory buffer)
You still need to provide the drivers and libraries, this extension You still need to provide the drivers and libraries, this extension
provides only the bridge between FATFS, STDIO, POSIX, WIN32 and LVGL. provides only the bridge between FATFS, STDIO, POSIX, WIN32 and LVGL.
@ -30,6 +31,23 @@ Cached reading is also supported if ``LV_FS_..._CACHE_SIZE`` is set to
not ``0`` value. :c:func:`lv_fs_read` caches this size of data to lower the not ``0`` value. :c:func:`lv_fs_read` caches this size of data to lower the
number of actual reads from the storage. number of actual reads from the storage.
To use the memory-mapped file emulation an ``lv_fs_path_ex_t`` object must be
created and initialized. This object can be passed to :c:func:`lv_fs_open()` as
the file name:
.. code:: c
lv_fs_path_ex_t mempath;
lv_fs_file_t file;
uint8_t *buffer;
uint32_t size;
/*Initialize buffer*/
...
lv_fs_make_path_from_buffer(&mempath, LV_FS_MEMFS_LETTER, (void*)buffer, size);
lv_fs_res_t res = lv_fs_open(&file, (const char *)&mempath, LV_FS_MODE_RD);
API API
*** ***

View File

@ -287,6 +287,35 @@ Example
/*Free the font if not required anymore*/ /*Free the font if not required anymore*/
lv_font_free(my_font); lv_font_free(my_font);
Load a font from a memory buffer at run-time
******************************************
:cpp:func:`lv_font_load_from_buffer` can be used to load a font from a memory buffer.
This function may be useful to load a font from an external file system, which is not
supported by LVGL. The font needs to be in the same format as if it were loaded from a file.
:note: To load a font from a buffer `LVGL's filesystem </overview/file-system>`__
needs to be enabled and the MEMFS driver must be added.
Example
.. code:: c
lv_font_t * my_font;
uint8_t *buf;
uint32_t bufsize;
/*Read font file into the buffer from the external file system*/
...
/*Load font from the buffer*/
my_font = lv_font_load_from_buffer((void *)buf, buf));
/*Use the font*/
/*Free the font if not required anymore*/
lv_font_free(my_font);
Add a new font engine Add a new font engine
********************* *********************

View File

@ -569,6 +569,12 @@
#define LV_FS_FATFS_CACHE_SIZE 0 /*>0 to cache this number of bytes in lv_fs_read()*/ #define LV_FS_FATFS_CACHE_SIZE 0 /*>0 to cache this number of bytes in lv_fs_read()*/
#endif #endif
/*API for memory-mapped file access. */
#define LV_USE_FS_MEMFS 0
#if LV_USE_FS_MEMFS
#define LV_FS_MEMFS_LETTER '\0' /*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/
#endif
/*PNG decoder library*/ /*PNG decoder library*/
#define LV_USE_PNG 0 #define LV_USE_PNG 0

View File

@ -1,4 +1,4 @@
/** /**
* @file lv_obj.c * @file lv_obj.c
* *
*/ */

View File

@ -78,11 +78,7 @@ static unsigned int read_bits(bit_iterator_t * it, int n_bits, lv_fs_res_t * res
* GLOBAL FUNCTIONS * GLOBAL FUNCTIONS
**********************/ **********************/
/**
* Loads a `lv_font_t` object from a binary font file
* @param font_name filename where the font file is located
* @return a pointer to the font or NULL in case of error
*/
lv_font_t * lv_font_load(const char * font_name) lv_font_t * lv_font_load(const char * font_name)
{ {
lv_fs_file_t file; lv_fs_file_t file;
@ -110,10 +106,16 @@ lv_font_t * lv_font_load(const char * font_name)
return font; return font;
} }
/** #if LV_USE_FS_MEMFS
* Frees the memory allocated by the `lv_font_load()` function lv_font_t * lv_font_load_from_buffer(void * buffer, uint32_t size)
* @param font lv_font_t object created by the lv_font_load function {
*/ lv_fs_path_ex_t mempath;
lv_fs_make_path_from_buffer(&mempath, LV_FS_MEMFS_LETTER, buffer, size);
return lv_font_load((const char *)&mempath);
}
#endif
void lv_font_free(lv_font_t * font) void lv_font_free(lv_font_t * font)
{ {
if(NULL != font) { if(NULL != font) {

View File

@ -1,4 +1,4 @@
/** /**
* @file lv_font_loader.h * @file lv_font_loader.h
* *
*/ */
@ -26,7 +26,29 @@ extern "C" {
* GLOBAL PROTOTYPES * GLOBAL PROTOTYPES
**********************/ **********************/
/**
* Loads a `lv_font_t` object from a binary font file
* @param font_name filename where the font file is located
* @return a pointer to the font or NULL in case of error
*/
lv_font_t * lv_font_load(const char * fontName); lv_font_t * lv_font_load(const char * fontName);
#if LV_USE_FS_MEMFS
/**
* Loads a `lv_font_t` object from a memory buffer containing the binary font file.
* Requires LV_USE_FS_MEMFS
* @param buffer address of the font file in the memory
* @param size size of the font file buffer
* @return a pointer to the font or NULL in case of error
*/
lv_font_t * lv_font_load_from_buffer(void * buffer, uint32_t size);
#endif
/**
* Frees the memory allocated by the `lv_font_load()` function
* @param font lv_font_t object created by the lv_font_load function
*/
void lv_font_free(lv_font_t * font); void lv_font_free(lv_font_t * font);
/********************** /**********************

View File

@ -0,0 +1,218 @@
/**
* @file lv_fs_memfs.c
*
* File System Interface driver for memory-mapped files
*
* This driver allows using a memory area as a file that can be read by normal file operations. It can
* be used, e.g., to store font files in slow flash memory, and load them into RAM on demand.
*
* You can enable it in lv_conf.h:
*
* #define LV_USE_FS_MEMFS 1
*
* The actual implementation uses the built-in cache mechanism of the file system interface.
*
* Since this is not an actual file system, file write and directories are not supported.
*
* The default drive letter is 'M', but this can be changed in lv_conf.h:
*
* #define LV_FS_MEMFS_LETTER 'M'
*
* To use it seamlessly with the file system interface a new extended path object has been introduced:
*
* lv_fs_path_ex_t mempath;
*
* This structure can be initialized with the helper function:
*
* lv_fs_make_path_ex(&mempath, (const uint8_t *) & my_mem_buffer, sizeof(my_mem_buffer));
*
* Then the "file" can be opened with:
*
* lv_fs_file_t file;
* lv_fs_res_t res = lv_fs_open(&file, (const char *) & mempath, LV_FS_MODE_RD);
*
* The path object can be used at any place where a file path is required, e.g.:
*
* lv_font_t* my_font = lv_font_load((const char *) & mempath);
*
*/
/*********************
* INCLUDES
*********************/
#include "../../../lvgl.h"
#if LV_USE_FS_MEMFS
/*********************
* DEFINES
*********************/
/**********************
* TYPEDEFS
**********************/
/**********************
* STATIC PROTOTYPES
**********************/
static void * fs_open(lv_fs_drv_t * drv, const char * path, lv_fs_mode_t mode);
static lv_fs_res_t fs_close(lv_fs_drv_t * drv, void * file_p);
static lv_fs_res_t fs_read(lv_fs_drv_t * drv, void * file_p, void * buf, uint32_t btr, uint32_t * br);
static lv_fs_res_t fs_seek(lv_fs_drv_t * drv, void * file_p, uint32_t pos, lv_fs_whence_t whence);
static lv_fs_res_t fs_tell(lv_fs_drv_t * drv, void * file_p, uint32_t * pos_p);
/**********************
* STATIC VARIABLES
**********************/
static lv_fs_drv_t fs_drv; /*A driver descriptor*/
/**********************
* MACROS
**********************/
/**********************
* GLOBAL FUNCTIONS
**********************/
/**
* Register a driver for the File system interface
*/
void lv_fs_memfs_init(void)
{
/*---------------------------------------------------
* Register the file system interface in LVGL
*--------------------------------------------------*/
/*Add a simple drive to open images*/
lv_fs_drv_init(&fs_drv);
/*Set up fields...*/
fs_drv.letter = LV_FS_MEMFS_LETTER;
fs_drv.cache_size = LV_FS_CACHE_FROM_BUFFER;
fs_drv.open_cb = fs_open;
fs_drv.close_cb = fs_close;
fs_drv.read_cb = fs_read;
fs_drv.write_cb = NULL;
fs_drv.seek_cb = fs_seek;
fs_drv.tell_cb = fs_tell;
fs_drv.dir_close_cb = NULL;
fs_drv.dir_open_cb = NULL;
fs_drv.dir_read_cb = NULL;
lv_fs_drv_register(&fs_drv);
}
/**********************
* STATIC FUNCTIONS
**********************/
/**
* Open a file
* @param drv pointer to a driver where this function belongs
* @param path pointer to an extended path object containing the memory buffer address and size
* @param mode read: FS_MODE_RD (currently only reading from the buffer is supported)
* @return pointer to FIL struct or NULL in case of fail
*/
static void * fs_open(lv_fs_drv_t * drv, const char * path, lv_fs_mode_t mode)
{
LV_UNUSED(drv);
LV_UNUSED(mode);
return (void *)path;
}
/**
* Close an opened file
* @param drv pointer to a driver where this function belongs
* @param file_p pointer to a FILE variable. (opened with fs_open)
* @return LV_FS_RES_OK: no error, the file is read
* any error from lv_fs_res_t enum
*/
static lv_fs_res_t fs_close(lv_fs_drv_t * drv, void * file_p)
{
LV_UNUSED(drv);
LV_UNUSED(file_p);
return LV_FS_RES_OK;
}
/**
* Read data from an opened file
* @param drv pointer to a driver where this function belongs
* @param file_p pointer to a FILE variable.
* @param buf pointer to a memory block where to store the read data
* @param btr number of Bytes To Read
* @param br the real number of read bytes (Byte Read)
* @return LV_FS_RES_OK: no error, the file is read
* any error from lv_fs_res_t enum
*/
static lv_fs_res_t fs_read(lv_fs_drv_t * drv, void * file_p, void * buf, uint32_t btr, uint32_t * br)
{
LV_UNUSED(drv);
LV_UNUSED(file_p);
LV_UNUSED(buf);
LV_UNUSED(btr);
*br = 0;
return LV_FS_RES_OK;
}
/**
* Set the read pointer.
* @param drv pointer to a driver where this function belongs
* @param file_p pointer to a FILE variable. (opened with fs_open )
* @param pos the new position of read pointer
* @return LV_FS_RES_OK: no error, the file is read
* any error from lv_fs_res_t enum
*/
static lv_fs_res_t fs_seek(lv_fs_drv_t * drv, void * file_p, uint32_t pos, lv_fs_whence_t whence)
{
/* NOTE: this function is only called to determine the end of the buffer when LV_FS_SEEK_END was given to lv_fs_seek() */
LV_UNUSED(drv);
lv_fs_file_t * fp = (lv_fs_file_t *)file_p;
switch(whence) {
case LV_FS_SEEK_SET: {
fp->cache->file_position = pos;
break;
}
case LV_FS_SEEK_CUR: {
fp->cache->file_position += pos;
break;
}
case LV_FS_SEEK_END: {
fp->cache->file_position = fp->cache->end - pos;
break;
}
}
if(fp->cache->file_position < fp->cache->start)
fp->cache->file_position = fp->cache->start;
else if(fp->cache->file_position > fp->cache->end)
fp->cache->file_position = fp->cache->end;
return LV_FS_RES_OK;
}
/**
* Give the position of the read write pointer
* @param drv pointer to a driver where this function belongs
* @param file_p pointer to a FILE variable.
* @param pos_p pointer to to store the result
* @return LV_FS_RES_OK: no error, the file is read
* any error from lv_fs_res_t enum
*/
static lv_fs_res_t fs_tell(lv_fs_drv_t * drv, void * file_p, uint32_t * pos_p)
{
LV_UNUSED(drv);
*pos_p = ((lv_fs_file_t *)file_p)->cache->file_position;
return LV_FS_RES_OK;
}
#else /*LV_USE_FS_MEMFS == 0*/
#if defined(LV_FS_MEMFS_LETTER) && LV_FS_MEMFS_LETTER != '\0'
#warning "LV_USE_FS_MEMFS is not enabled but LV_FS_MEMFS_LETTER is set"
#endif
#endif /*LV_USE_FS_MEMFS*/

View File

@ -1,4 +1,4 @@
/** /**
* @file lv_fsdrv.h * @file lv_fsdrv.h
* *
*/ */
@ -27,22 +27,26 @@ extern "C" {
* GLOBAL PROTOTYPES * GLOBAL PROTOTYPES
**********************/ **********************/
#if LV_USE_FS_FATFS != '\0' #if LV_USE_FS_FATFS
void lv_fs_fatfs_init(void); void lv_fs_fatfs_init(void);
#endif #endif
#if LV_USE_FS_STDIO != '\0' #if LV_USE_FS_STDIO
void lv_fs_stdio_init(void); void lv_fs_stdio_init(void);
#endif #endif
#if LV_USE_FS_POSIX != '\0' #if LV_USE_FS_POSIX
void lv_fs_posix_init(void); void lv_fs_posix_init(void);
#endif #endif
#if LV_USE_FS_WIN32 != '\0' #if LV_USE_FS_WIN32
void lv_fs_win32_init(void); void lv_fs_win32_init(void);
#endif #endif
#if LV_USE_FS_MEMFS
void lv_fs_memfs_init(void);
#endif
/********************** /**********************
* MACROS * MACROS
**********************/ **********************/

View File

@ -1909,6 +1909,24 @@
#endif #endif
#endif #endif
/*API for memory-mapped file access. */
#ifndef LV_USE_FS_MEMFS
#ifdef CONFIG_LV_USE_FS_MEMFS
#define LV_USE_FS_MEMFS CONFIG_LV_USE_FS_MEMFS
#else
#define LV_USE_FS_MEMFS 0
#endif
#endif
#if LV_USE_FS_MEMFS
#ifndef LV_FS_MEMFS_LETTER
#ifdef CONFIG_LV_FS_MEMFS_LETTER
#define LV_FS_MEMFS_LETTER CONFIG_LV_FS_MEMFS_LETTER
#else
#define LV_FS_MEMFS_LETTER '\0' /*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/
#endif
#endif
#endif
/*PNG decoder library*/ /*PNG decoder library*/
#ifndef LV_USE_PNG #ifndef LV_USE_PNG
#ifdef CONFIG_LV_USE_PNG #ifdef CONFIG_LV_USE_PNG

View File

@ -206,6 +206,10 @@ void lv_init(void)
lv_fs_win32_init(); lv_fs_win32_init();
#endif #endif
#if LV_USE_FS_MEMFS
lv_fs_memfs_init();
#endif
#if LV_USE_PNG #if LV_USE_PNG
lv_png_init(); lv_png_init();
#endif #endif

View File

@ -1,4 +1,4 @@
/** /**
* @file lv_fs.c * @file lv_fs.c
* *
*/ */
@ -83,27 +83,53 @@ lv_fs_res_t lv_fs_open(lv_fs_file_t * file_p, const char * path, lv_fs_mode_t mo
return LV_FS_RES_NOT_IMP; return LV_FS_RES_NOT_IMP;
} }
const char * real_path = lv_fs_get_real_path(path);
void * file_d = drv->open_cb(drv, real_path, mode);
if(file_d == NULL || file_d == (void *)(-1)) {
return LV_FS_RES_UNKNOWN;
}
file_p->drv = drv; file_p->drv = drv;
file_p->file_d = file_d;
/* For memory-mapped files we set the file handle to our file descriptor so that we can access the cache from the file operations */
if(drv->cache_size == LV_FS_CACHE_FROM_BUFFER) {
file_p->file_d = file_p;
}
else {
const char * real_path = lv_fs_get_real_path(path);
void * file_d = drv->open_cb(drv, real_path, mode);
if(file_d == NULL || file_d == (void *)(-1)) {
return LV_FS_RES_UNKNOWN;
}
file_p->file_d = file_d;
}
if(drv->cache_size) { if(drv->cache_size) {
file_p->cache = lv_malloc(sizeof(lv_fs_file_cache_t)); file_p->cache = lv_malloc(sizeof(lv_fs_file_cache_t));
LV_ASSERT_MALLOC(file_p->cache); LV_ASSERT_MALLOC(file_p->cache);
lv_memzero(file_p->cache, sizeof(lv_fs_file_cache_t)); lv_memzero(file_p->cache, sizeof(lv_fs_file_cache_t));
file_p->cache->start = UINT32_MAX; /*Set an invalid range by default*/
file_p->cache->end = UINT32_MAX - 1; /* If this is a memory-mapped file, then set "cache" to the memory buffer */
if(drv->cache_size == LV_FS_CACHE_FROM_BUFFER) {
lv_fs_path_ex_t * path_ex = (lv_fs_path_ex_t *)path;
file_p->cache->buffer = path_ex->buffer;
file_p->cache->start = 0;
file_p->cache->file_position = 0;
file_p->cache->end = path_ex->size;
}
/*Set an invalid range by default*/
else {
file_p->cache->start = UINT32_MAX;
file_p->cache->end = UINT32_MAX - 1;
}
} }
return LV_FS_RES_OK; return LV_FS_RES_OK;
} }
void lv_fs_make_path_from_buffer(lv_fs_path_ex_t * path, char letter, void * buf, uint32_t size)
{
path->path[0] = letter;
path->path[1] = ':';
path->path[2] = 0;
path->buffer = buf;
path->size = size;
}
lv_fs_res_t lv_fs_close(lv_fs_file_t * file_p) lv_fs_res_t lv_fs_close(lv_fs_file_t * file_p)
{ {
if(file_p->drv == NULL) { if(file_p->drv == NULL) {
@ -117,7 +143,8 @@ lv_fs_res_t lv_fs_close(lv_fs_file_t * file_p)
lv_fs_res_t res = file_p->drv->close_cb(file_p->drv, file_p->file_d); lv_fs_res_t res = file_p->drv->close_cb(file_p->drv, file_p->file_d);
if(file_p->drv->cache_size && file_p->cache) { if(file_p->drv->cache_size && file_p->cache) {
if(file_p->cache->buffer) { /* Only free cache if it was pre-allocated (for memory-mapped files it is never allocated) */
if(file_p->drv->cache_size != LV_FS_CACHE_FROM_BUFFER && file_p->cache->buffer) {
lv_free(file_p->cache->buffer); lv_free(file_p->cache->buffer);
} }
@ -138,12 +165,18 @@ static lv_fs_res_t lv_fs_read_cached(lv_fs_file_t * file_p, char * buf, uint32_t
uint32_t start = file_p->cache->start; uint32_t start = file_p->cache->start;
uint32_t end = file_p->cache->end; uint32_t end = file_p->cache->end;
char * buffer = file_p->cache->buffer; char * buffer = file_p->cache->buffer;
uint16_t buffer_size = file_p->drv->cache_size; uint32_t buffer_size = file_p->drv->cache_size;
if(start <= file_position && file_position <= end) { if(start <= file_position && file_position <= end) {
/* Data can be read from cache buffer */ /* Data can be read from cache buffer */
uint32_t buffer_remaining_length = (uint32_t)end - file_position + 1; uint32_t buffer_remaining_length = (uint32_t)end - file_position + 1;
uint16_t buffer_offset = (end - start) - buffer_remaining_length + 1; uint32_t buffer_offset = (end - start) - buffer_remaining_length + 1;
/* Do not allow reading beyond the actual memory block for memory-mapped files */
if(file_p->drv->cache_size == LV_FS_CACHE_FROM_BUFFER) {
if(btr > buffer_remaining_length)
btr = buffer_remaining_length;
}
if(btr <= buffer_remaining_length) { if(btr <= buffer_remaining_length) {
/*Data is in cache buffer, and buffer end not reached, no need to read from FS*/ /*Data is in cache buffer, and buffer end not reached, no need to read from FS*/

View File

@ -1,4 +1,4 @@
/** /**
* @file lv_fs.h * @file lv_fs.h
* *
*/ */
@ -24,6 +24,8 @@ extern "C" {
#define LV_FS_MAX_FN_LENGTH 64 #define LV_FS_MAX_FN_LENGTH 64
#define LV_FS_MAX_PATH_LENGTH 256 #define LV_FS_MAX_PATH_LENGTH 256
#define LV_FS_CACHE_FROM_BUFFER UINT32_MAX
/********************** /**********************
* TYPEDEFS * TYPEDEFS
**********************/ **********************/
@ -80,7 +82,7 @@ typedef enum {
typedef struct _lv_fs_drv_t { typedef struct _lv_fs_drv_t {
char letter; char letter;
uint16_t cache_size; uint32_t cache_size;
bool (*ready_cb)(struct _lv_fs_drv_t * drv); bool (*ready_cb)(struct _lv_fs_drv_t * drv);
void * (*open_cb)(struct _lv_fs_drv_t * drv, const char * path, lv_fs_mode_t mode); void * (*open_cb)(struct _lv_fs_drv_t * drv, const char * path, lv_fs_mode_t mode);
@ -110,6 +112,13 @@ typedef struct {
lv_fs_file_cache_t * cache; lv_fs_file_cache_t * cache;
} lv_fs_file_t; } lv_fs_file_t;
/* Extended path object to specify the buffer for memory-mapped files */
typedef struct {
char path[4]; /* This is needed to make it compatible with a normal path */
void * buffer;
uint32_t size;
} lv_fs_path_ex_t;
typedef struct { typedef struct {
void * dir_d; void * dir_d;
lv_fs_drv_t * drv; lv_fs_drv_t * drv;
@ -164,6 +173,15 @@ bool lv_fs_is_ready(char letter);
*/ */
lv_fs_res_t lv_fs_open(lv_fs_file_t * file_p, const char * path, lv_fs_mode_t mode); lv_fs_res_t lv_fs_open(lv_fs_file_t * file_p, const char * path, lv_fs_mode_t mode);
/**
* Make a path object for the memory-mapped file compatible with the file system interface
* @param path path to a lv_fs_path_ex object
* @param letter the letter of the driver. E.g. `LV_FS_MEMFS_LETTER`
* @param buf address of the memory buffer
* @param size size of the memory buffer in bytes
*/
void lv_fs_make_path_from_buffer(lv_fs_path_ex_t * path, char letter, void * buf, uint32_t size);
/** /**
* Close an already opened file * Close an already opened file
* @param file_p pointer to a lv_fs_file_t variable * @param file_p pointer to a lv_fs_file_t variable

View File

@ -154,6 +154,9 @@ add_library(test_common
src/test_assets/test_font_montserrat_ascii_2bpp.c src/test_assets/test_font_montserrat_ascii_2bpp.c
src/test_assets/test_font_montserrat_ascii_4bpp.c src/test_assets/test_font_montserrat_ascii_4bpp.c
src/test_assets/test_font_montserrat_ascii_4bpp_compressed.c src/test_assets/test_font_montserrat_ascii_4bpp_compressed.c
src/test_assets/font_1_bin.c
src/test_assets/font_2_bin.c
src/test_assets/font_3_bin.c
src/test_assets/test_img_caret_down.c src/test_assets/test_img_caret_down.c
src/test_assets/test_arc_bg.c src/test_assets/test_arc_bg.c
src/test_assets/ubuntu_font.c src/test_assets/ubuntu_font.c

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

View File

@ -58,6 +58,8 @@
#define LV_FS_STDIO_CACHE_SIZE 512 #define LV_FS_STDIO_CACHE_SIZE 512
#define LV_USE_FS_POSIX 1 #define LV_USE_FS_POSIX 1
#define LV_FS_POSIX_LETTER 'B' #define LV_FS_POSIX_LETTER 'B'
#define LV_USE_FS_MEMFS 1
#define LV_FS_MEMFS_LETTER 'M'
#define LV_USE_PNG 1 #define LV_USE_PNG 1
#define LV_USE_BMP 1 #define LV_USE_BMP 1

View File

@ -0,0 +1,438 @@
/* table exported by mirkes.de's tiny hexer
filename: D:\lvgl\test\lv_port_pc_visual_studio\LvglPlatform\lvgl\tests\src\test_assets\font_1.fnt
position 0, 6876 bytes */
unsigned char const font_1_buf[6876] =
{
44, 0, 0, 0, 104, 101, 97, 100, 1, 0, 0, 0, 4, 0, 8, 0,
8, 0, 254, 255, 8, 0, 254, 255, 0, 0, 254, 255, 8, 0, 0, 0,
16, 0, 0, 0, 1, 4, 4, 4, 9, 1, 0, 0, 164, 0, 0, 0,
99, 109, 97, 112, 2, 0, 0, 0, 44, 0, 0, 0, 32, 0, 0, 0,
95, 0, 1, 0, 95, 0, 2, 0, 44, 0, 0, 0, 176, 0, 0, 0,
243, 247, 96, 0, 59, 0, 3, 0, 0, 0, 114, 31, 81, 239, 88, 239,
91, 239, 92, 239, 93, 239, 97, 239, 99, 239, 101, 239, 105, 239, 108, 239,
113, 239, 118, 239, 119, 239, 120, 239, 142, 239, 152, 239, 155, 239, 156, 239,
157, 239, 161, 239, 162, 239, 163, 239, 164, 239, 183, 239, 184, 239, 190, 239,
192, 239, 193, 239, 196, 239, 199, 239, 200, 239, 201, 239, 203, 239, 227, 239,
229, 239, 20, 240, 21, 240, 23, 240, 55, 240, 58, 240, 67, 240, 108, 240,
116, 240, 171, 240, 59, 241, 144, 241, 145, 241, 146, 241, 147, 241, 148, 241,
215, 241, 227, 241, 61, 242, 84, 242, 170, 244, 18, 247, 242, 247, 0, 0,
68, 1, 0, 0, 108, 111, 99, 97, 155, 0, 0, 0, 8, 0, 8, 0,
12, 0, 21, 0, 29, 0, 48, 0, 69, 0, 90, 0, 111, 0, 118, 0,
133, 0, 144, 0, 154, 0, 167, 0, 174, 0, 179, 0, 185, 0, 206, 0,
222, 0, 230, 0, 246, 0, 6, 1, 25, 1, 42, 1, 59, 1, 75, 1,
91, 1, 107, 1, 115, 1, 125, 1, 141, 1, 151, 1, 167, 1, 183, 1,
209, 1, 229, 1, 248, 1, 10, 2, 30, 2, 47, 2, 63, 2, 82, 2,
98, 2, 104, 2, 118, 2, 137, 2, 147, 2, 168, 2, 185, 2, 206, 2,
225, 2, 249, 2, 11, 3, 27, 3, 39, 3, 55, 3, 76, 3, 102, 3,
121, 3, 141, 3, 160, 3, 171, 3, 190, 3, 198, 3, 209, 3, 214, 3,
219, 3, 233, 3, 249, 3, 6, 4, 22, 4, 36, 4, 49, 4, 65, 4,
80, 4, 88, 4, 100, 4, 115, 4, 122, 4, 140, 4, 153, 4, 165, 4,
182, 4, 197, 4, 207, 4, 219, 4, 232, 4, 245, 4, 4, 5, 24, 5,
38, 5, 57, 5, 69, 5, 82, 5, 90, 5, 103, 5, 112, 5, 120, 5,
127, 5, 160, 5, 183, 5, 214, 5, 239, 5, 5, 6, 40, 6, 75, 6,
113, 6, 141, 6, 168, 6, 211, 6, 227, 6, 250, 6, 30, 7, 54, 7,
76, 7, 105, 7, 122, 7, 136, 7, 158, 7, 190, 7, 214, 7, 238, 7,
9, 8, 18, 8, 48, 8, 94, 8, 135, 8, 169, 8, 191, 8, 213, 8,
254, 8, 17, 9, 50, 9, 85, 9, 120, 9, 143, 9, 171, 9, 202, 9,
229, 9, 1, 10, 27, 10, 68, 10, 85, 10, 124, 10, 148, 10, 175, 10,
203, 10, 230, 10, 252, 10, 35, 11, 67, 11, 90, 11, 129, 11, 159, 11,
182, 11, 0, 0, 212, 11, 0, 0, 103, 108, 121, 102, 17, 0, 0, 0,
17, 0, 18, 172, 7, 136, 153, 89, 64, 25, 1, 25, 185, 200, 8, 57,
72, 45, 0, 50, 130, 41, 48, 39, 228, 225, 161, 206, 65, 178, 69, 208,
178, 194, 192, 128, 39, 135, 171, 128, 32, 0, 86, 180, 75, 171, 68, 252,
176, 33, 11, 144, 180, 191, 75, 75, 102, 54, 0, 58, 172, 56, 49, 134,
199, 152, 24, 83, 237, 131, 137, 62, 208, 171, 131, 81, 125, 32, 44, 7,
179, 4, 204, 1, 21, 24, 0, 75, 224, 130, 107, 98, 1, 115, 6, 98,
58, 153, 136, 13, 129, 17, 185, 0, 28, 128, 21, 135, 155, 132, 16, 25,
8, 128, 136, 4, 64, 17, 0, 12, 128, 21, 135, 147, 185, 181, 9, 3,
131, 137, 53, 0, 25, 129, 161, 164, 32, 19, 96, 61, 200, 0, 37, 0,
170, 0, 8, 3, 64, 1, 37, 228, 82, 94, 68, 14, 135, 145, 128, 29,
65, 0, 24, 129, 24, 173, 48, 14, 128, 17, 0, 29, 0, 22, 255, 171,
128, 84, 1, 17, 0, 42, 160, 4, 68, 0, 38, 0, 90, 224, 1, 1,
0, 0, 42, 128, 42, 133, 93, 137, 178, 234, 125, 64, 95, 212, 5, 219,
46, 164, 23, 128, 26, 207, 20, 160, 7, 248, 36, 128, 42, 181, 92, 131,
85, 168, 4, 168, 0, 130, 128, 150, 218, 48, 36, 128, 42, 189, 95, 3,
208, 224, 1, 2, 192, 9, 70, 81, 84, 50, 43, 0, 50, 128, 18, 64,
35, 233, 0, 12, 84, 16, 72, 82, 201, 69, 210, 65, 0, 36, 128, 42,
158, 213, 1, 174, 168, 0, 218, 128, 91, 161, 55, 170, 25, 128, 39, 128,
42, 132, 213, 13, 186, 168, 127, 233, 162, 240, 152, 131, 12, 199, 0, 38,
128, 42, 229, 83, 90, 234, 130, 206, 13, 96, 21, 56, 1, 172, 0, 41,
0, 42, 141, 82, 201, 50, 190, 146, 234, 110, 101, 89, 23, 211, 126, 39,
128, 42, 165, 76, 131, 238, 65, 98, 228, 52, 234, 67, 78, 172, 84, 14,
128, 18, 58, 58, 0, 29, 0, 14, 135, 19, 58, 58, 0, 29, 69, 216,
128, 37, 0, 42, 128, 66, 0, 73, 144, 44, 84, 2, 234, 200, 128, 180,
136, 37, 0, 169, 164, 204, 41, 51, 10, 76, 194, 37, 0, 42, 136, 6,
41, 130, 3, 158, 241, 73, 45, 20, 148, 0, 0, 36, 128, 42, 181, 92,
131, 85, 168, 5, 80, 1, 74, 0, 10, 192, 0, 66, 7, 195, 1, 195,
186, 20, 10, 243, 121, 9, 106, 62, 165, 151, 64, 63, 84, 124, 200, 227,
138, 240, 123, 41, 128, 47, 120, 58, 128, 87, 32, 24, 206, 16, 10, 38,
80, 0, 70, 138, 65, 15, 201, 151, 64, 48, 128, 50, 150, 204, 172, 65,
230, 70, 160, 243, 74, 160, 121, 174, 128, 121, 148, 104, 46, 128, 50, 131,
221, 80, 151, 174, 168, 89, 64, 27, 40, 3, 47, 93, 80, 128, 53, 0,
58, 151, 85, 216, 192, 9, 87, 94, 1, 194, 164, 1, 133, 72, 18, 174,
188, 0, 43, 0, 42, 151, 85, 32, 18, 169, 0, 245, 68, 7, 170, 32,
37, 82, 64, 40, 128, 42, 151, 85, 32, 18, 169, 0, 149, 68, 4, 170,
32, 7, 0, 49, 128, 50, 131, 221, 80, 151, 174, 168, 89, 64, 2, 60,
160, 3, 34, 245, 215, 32, 52, 0, 50, 149, 0, 10, 128, 62, 74, 164,
128, 18, 169, 32, 31, 0, 20, 0, 18, 149, 0, 126, 33, 120, 42, 130,
214, 168, 45, 80, 3, 251, 196, 38, 141, 0, 46, 0, 50, 149, 0, 209,
0, 6, 160, 129, 183, 8, 0, 59, 202, 0, 113, 159, 64, 38, 0, 42,
149, 0, 127, 241, 210, 168, 224, 61, 0, 58, 150, 0, 71, 128, 46, 0,
128, 2, 113, 71, 128, 81, 34, 128, 16, 196, 128, 0, 52, 0, 50, 150,
136, 21, 0, 208, 6, 111, 176, 12, 157, 192, 12, 182, 0, 54, 0, 58,
131, 221, 198, 11, 215, 106, 241, 202, 0, 10, 46, 80, 0, 81, 85, 215,
106, 241, 46, 0, 50, 151, 85, 36, 0, 149, 65, 64, 12, 78, 9, 84,
195, 4, 170, 48, 0, 54, 7, 187, 3, 221, 198, 11, 215, 106, 241, 202,
0, 10, 46, 80, 4, 138, 174, 187, 188, 65, 238, 10, 140, 46, 128, 50,
151, 85, 36, 0, 149, 65, 64, 12, 78, 15, 88, 70, 15, 90, 66, 39,
128, 42, 149, 84, 75, 149, 66, 126, 152, 16, 137, 200, 90, 167, 80, 37,
128, 42, 213, 58, 154, 168, 84, 192, 31, 252, 48, 50, 128, 50, 156, 128,
18, 0, 63, 248, 4, 160, 2, 225, 171, 172, 96, 45, 248, 58, 133, 136,
1, 92, 62, 0, 28, 224, 138, 43, 128, 20, 66, 92, 2, 69, 176, 0,
72, 0, 74, 202, 0, 60, 64, 230, 184, 25, 160, 170, 27, 6, 206, 1,
24, 92, 152, 28, 224, 1, 153, 65, 76, 192, 43, 0, 50, 172, 1, 80,
40, 60, 216, 2, 33, 194, 0, 171, 225, 7, 196, 154, 0, 41, 248, 58,
133, 16, 2, 192, 23, 33, 48, 0, 30, 177, 48, 9, 90, 0, 56, 64,
32, 42, 0, 50, 181, 83, 52, 26, 173, 240, 2, 169, 16, 5, 193, 0,
33, 166, 168, 0, 21, 135, 155, 150, 160, 34, 0, 63, 248, 40, 128, 22,
255, 171, 140, 128, 66, 96, 27, 212, 2, 95, 0, 198, 32, 21, 48, 4,
122, 0, 21, 135, 147, 198, 64, 7, 244, 0, 37, 128, 169, 129, 224, 5,
80, 160, 92, 152, 0, 32, 7, 160, 187, 224, 38, 130, 152, 131, 48, 38,
128, 42, 20, 202, 0, 33, 80, 173, 129, 21, 252, 136, 0, 43, 128, 51,
36, 0, 127, 201, 86, 160, 6, 171, 144, 15, 205, 84, 144, 36, 128, 42,
13, 84, 51, 213, 65, 0, 233, 234, 160, 128, 43, 128, 43, 0, 107, 0,
225, 170, 130, 58, 164, 3, 8, 71, 77, 128, 39, 0, 42, 12, 204, 48,
2, 39, 28, 137, 105, 250, 160, 128, 22, 128, 35, 5, 80, 8, 40, 45,
220, 22, 142, 1, 252, 44, 7, 170, 141, 76, 174, 58, 97, 192, 35, 8,
234, 135, 2, 48, 128, 43, 128, 43, 36, 0, 127, 36, 218, 2, 205, 120,
8, 11, 128, 112, 18, 0, 19, 27, 155, 164, 0, 120, 18, 127, 155, 129,
184, 27, 129, 192, 7, 243, 70, 0, 39, 128, 43, 36, 0, 127, 212, 128,
57, 40, 9, 82, 0, 86, 215, 18, 0, 19, 36, 0, 127, 128, 67, 128,
66, 38, 77, 196, 218, 2, 204, 28, 223, 128, 128, 136, 0, 224, 31, 128,
43, 128, 42, 38, 77, 160, 44, 215, 128, 128, 184, 7, 0, 40, 128, 42,
13, 84, 51, 213, 54, 1, 211, 213, 54, 43, 135, 178, 166, 85, 168, 1,
170, 228, 3, 243, 85, 36, 0, 149, 69, 0, 43, 135, 170, 141, 82, 110,
58, 168, 1, 232, 234, 160, 13, 82, 64, 26, 0, 34, 37, 208, 0, 104,
0, 64, 30, 32, 0, 34, 45, 202, 238, 82, 194, 34, 94, 119, 192, 26,
128, 34, 148, 128, 45, 28, 45, 28, 3, 136, 146, 0, 43, 128, 42, 43,
128, 216, 7, 15, 129, 2, 20, 208, 0, 36, 120, 50, 5, 128, 33, 3,
156, 13, 1, 113, 248, 2, 218, 80, 57, 128, 66, 88, 3, 136, 40, 57,
84, 244, 68, 5, 255, 73, 85, 0, 6, 65, 134, 64, 35, 128, 42, 51,
141, 131, 117, 80, 0, 96, 96, 255, 82, 0, 36, 127, 178, 133, 136, 65,
132, 72, 145, 129, 149, 200, 5, 192, 96, 10, 248, 0, 0, 33, 128, 34,
44, 221, 150, 2, 130, 164, 101, 238, 0, 22, 135, 155, 133, 48, 51, 0,
37, 112, 87, 0, 230, 96, 19, 7, 147, 148, 0, 127, 240, 0, 22, 135,
155, 203, 132, 224, 7, 49, 131, 24, 5, 56, 0, 37, 1, 41, 20, 154,
139, 202, 232, 128, 27, 1, 153, 147, 34, 177, 171, 144, 20, 0, 145, 128,
23, 87, 192, 64, 7, 196, 128, 127, 240, 9, 175, 128, 17, 186, 148, 16,
3, 144, 181, 0, 108, 233, 80, 12, 96, 31, 213, 225, 94, 1, 202, 0,
80, 5, 125, 0, 64, 0, 67, 94, 230, 93, 86, 109, 153, 79, 154, 51,
109, 244, 0, 252, 140, 219, 125, 13, 179, 41, 243, 64, 7, 196, 26, 10,
38, 60, 182, 187, 216, 168, 104, 153, 69, 197, 223, 10, 25, 25, 228, 152,
104, 119, 166, 80, 208, 239, 74, 161, 162, 101, 64, 0, 67, 0, 122, 104,
3, 165, 130, 164, 1, 44, 180, 13, 50, 101, 160, 165, 102, 45, 0, 84,
204, 160, 8, 44, 0, 51, 49, 128, 32, 171, 18, 157, 180, 173, 101, 5,
192, 10, 20, 176, 88, 97, 47, 136, 0, 64, 7, 196, 0, 88, 162, 0,
29, 113, 63, 112, 144, 112, 5, 192, 165, 0, 74, 46, 32, 11, 64, 9,
40, 24, 144, 82, 15, 30, 45, 200, 125, 105, 38, 0, 64, 7, 196, 0,
89, 128, 8, 98, 6, 104, 128, 203, 184, 68, 238, 154, 1, 238, 8, 80,
7, 234, 1, 238, 8, 84, 187, 132, 78, 233, 24, 129, 154, 32, 32, 72,
7, 204, 0, 99, 2, 32, 6, 172, 168, 128, 0, 116, 36, 20, 0, 126,
163, 34, 232, 113, 5, 64, 69, 136, 95, 16, 32, 23, 88, 4, 118, 96,
27, 81, 0, 136, 208, 64, 7, 196, 0, 95, 224, 15, 254, 67, 248, 3,
220, 0, 236, 0, 103, 7, 142, 85, 116, 60, 60, 8, 161, 224, 2, 68,
192, 72, 0, 75, 2, 255, 242, 128, 222, 127, 217, 99, 108, 96, 17, 181,
171, 251, 3, 123, 168, 5, 63, 32, 17, 0, 124, 64, 64, 7, 69, 0,
124, 96, 87, 254, 179, 194, 194, 238, 30, 5, 164, 139, 160, 2, 172, 0,
145, 118, 117, 66, 34, 43, 221, 161, 0, 21, 64, 22, 53, 182, 128, 194,
153, 30, 14, 20, 102, 32, 64, 32, 7, 163, 128, 82, 105, 141, 150, 96,
28, 168, 0, 171, 176, 4, 156, 48, 7, 179, 128, 82, 0, 52, 198, 1,
203, 48, 26, 0, 242, 32, 0, 53, 119, 0, 4, 0, 156, 0, 72, 7,
204, 0, 121, 80, 3, 72, 19, 121, 153, 49, 128, 31, 16, 203, 48, 25,
146, 184, 7, 242, 160, 0, 102, 74, 213, 118, 0, 190, 36, 0, 156, 4,
222, 96, 64, 0, 67, 111, 255, 180, 190, 0, 49, 4, 88, 39, 32, 0,
229, 44, 108, 1, 107, 96, 24, 191, 252, 64, 56, 15, 172, 32, 4, 86,
65, 26, 0, 151, 0, 115, 0, 70, 1, 168, 64, 39, 193, 4, 50, 246,
56, 7, 61, 0, 125, 180, 32, 24, 151, 156, 3, 209, 168, 1, 197, 116,
1, 255, 21, 208, 5, 26, 128, 75, 206, 1, 109, 8, 6, 56, 7, 188,
77, 200, 77, 203, 35, 3, 35, 0, 127, 245, 246, 244, 54, 244, 56, 7,
188, 18, 39, 22, 221, 246, 128, 127, 245, 221, 19, 156, 56, 15, 172, 16,
4, 155, 0, 86, 15, 32, 25, 184, 3, 24, 4, 52, 0, 44, 112, 108,
35, 64, 56, 127, 204, 0, 98, 0, 250, 54, 0, 57, 220, 14, 224, 9,
96, 2, 133, 0, 88, 7, 88, 2, 221, 250, 192, 20, 239, 212, 0, 84,
78, 80, 40, 7, 172, 0, 76, 64, 7, 150, 7, 138, 69, 137, 80, 65,
208, 0, 226, 216, 0, 177, 88, 0, 94, 192, 40, 7, 172, 19, 0, 77,
46, 0, 74, 135, 0, 44, 194, 128, 52, 80, 45, 112, 89, 112, 129, 188,
128, 0, 56, 7, 188, 0, 72, 1, 199, 102, 1, 156, 28, 0, 241, 193,
208, 242, 234, 10, 243, 223, 97, 127, 192, 31, 202, 138, 0, 56, 1, 57,
60, 71, 60, 187, 244, 128, 72, 0, 75, 0, 35, 50, 128, 0, 234, 237,
122, 232, 233, 66, 71, 65, 107, 128, 32, 64, 53, 20, 116, 116, 22, 142,
175, 95, 174, 8, 80, 127, 220, 14, 152, 7, 225, 141, 140, 202, 136, 2,
92, 87, 136, 30, 160, 1, 227, 6, 237, 65, 66, 0, 91, 169, 4, 1,
0, 58, 168, 219, 36, 44, 64, 21, 63, 137, 233, 226, 1, 54, 97, 198,
206, 0, 72, 127, 220, 0, 99, 227, 0, 253, 227, 224, 31, 49, 156, 192,
30, 130, 194, 128, 14, 129, 48, 49, 128, 8, 156, 5, 132, 28, 128, 18,
0, 20, 16, 4, 0, 24, 0, 58, 32, 7, 0, 64, 7, 196, 0, 120,
129, 16, 1, 38, 173, 93, 135, 44, 35, 184, 122, 60, 120, 0, 80, 80,
11, 184, 58, 124, 121, 87, 131, 118, 8, 68, 0, 73, 170, 56, 0, 59,
0, 127, 39, 32, 4, 150, 86, 128, 150, 248, 246, 158, 240, 16, 255, 112,
1, 69, 128, 56, 0, 59, 0, 125, 112, 1, 69, 251, 192, 67, 250, 91,
227, 218, 2, 89, 90, 0, 73, 200, 0, 80, 127, 219, 128, 37, 5, 19,
0, 86, 215, 63, 245, 136, 0, 210, 58, 238, 16, 10, 0, 216, 0, 32,
96, 24, 209, 11, 227, 234, 0, 204, 127, 182, 193, 84, 0, 123, 186, 23,
96, 0, 64, 0, 67, 111, 250, 192, 49, 0, 19, 254, 208, 15, 136, 3,
255, 136, 64, 30, 32, 64, 7, 196, 0, 83, 32, 14, 150, 100, 128, 78,
192, 6, 112, 3, 248, 3, 220, 3, 249, 225, 0, 9, 15, 15, 78, 234,
120, 0, 11, 185, 80, 0, 64, 127, 204, 128, 127, 240, 223, 168, 3, 210,
40, 1, 226, 2, 0, 244, 5, 128, 112, 200, 184, 62, 226, 97, 104, 2,
72, 236, 240, 192, 8, 39, 28, 96, 0, 56, 7, 196, 1, 128, 123, 59,
0, 183, 0, 168, 203, 15, 130, 176, 52, 48, 129, 60, 0, 132, 0, 201,
6, 89, 0, 21, 12, 195, 72, 86, 208, 61, 224, 0, 56, 7, 188, 0,
63, 231, 71, 64, 8, 205, 24, 1, 92, 0, 127, 242, 142, 29, 232, 4,
135, 116, 56, 56, 7, 188, 18, 38, 16, 223, 254, 32, 187, 195, 224, 137,
128, 130, 237, 22, 1, 155, 24, 3, 34, 160, 1, 209, 185, 145, 192, 40,
127, 188, 3, 255, 152, 2, 208, 2, 0, 76, 0, 167, 0, 16, 1, 240,
1, 46, 33, 32, 7, 129, 114, 0, 140, 96, 3, 45, 128, 64, 56, 7,
188, 60, 220, 184, 2, 25, 218, 0, 53, 59, 140, 2, 231, 117, 216, 3,
198, 1, 206, 232, 112, 14, 120, 240, 12, 56, 7, 188, 0, 90, 1, 147,
139, 140, 1, 34, 3, 192, 2, 0, 136, 12, 3, 142, 0, 58, 49, 223,
181, 227, 31, 33, 128, 72, 0, 75, 111, 255, 218, 92, 238, 231, 119, 16,
121, 19, 72, 158, 1, 255, 121, 86, 81, 120, 23, 63, 252, 252, 64, 64,
127, 85, 0, 127, 241, 18, 240, 3, 151, 45, 28, 2, 110, 163, 0, 120,
3, 100, 64, 35, 64, 5, 187, 140, 1, 32, 19, 68, 16, 5, 64, 63,
64, 7, 218, 76, 1, 242, 232, 6, 48, 7, 180, 127, 209, 96, 28, 150,
1, 35, 152, 4, 110, 224, 15, 254, 96, 80, 7, 212, 0, 72, 238, 64,
13, 63, 119, 190, 67, 18, 255, 49, 246, 153, 218, 23, 254, 176, 222, 33,
177, 170, 13, 137, 0, 253, 58, 87, 136, 7, 103, 128, 126, 105, 0, 192,
80, 0, 83, 18, 39, 224, 223, 255, 166, 131, 21, 125, 10, 30, 35, 231,
0, 108, 207, 161, 31, 183, 124, 48, 80, 0, 83, 18, 39, 224, 223, 255,
166, 131, 21, 118, 92, 40, 120, 142, 240, 112, 6, 204, 237, 72, 71, 237,
221, 222, 48, 80, 0, 83, 18, 39, 224, 223, 255, 166, 131, 21, 107, 186,
20, 60, 70, 0, 156, 1, 179, 50, 37, 8, 253, 187, 127, 195, 0, 80,
0, 83, 18, 39, 224, 223, 255, 166, 131, 23, 46, 244, 40, 120, 248, 6,
112, 6, 206, 162, 104, 71, 237, 239, 252, 48, 80, 0, 83, 18, 39, 224,
223, 255, 166, 2, 239, 232, 112, 15, 206, 0, 68, 250, 9, 255, 254, 30,
80, 7, 220, 0, 127, 240, 223, 96, 3, 231, 75, 192, 13, 54, 60, 78,
162, 228, 14, 146, 57, 51, 85, 134, 108, 66, 240, 63, 100, 8, 128, 6,
38, 176, 15, 205, 216, 1, 0, 56, 7, 188, 3, 110, 176, 193, 36, 184,
184, 52, 209, 172, 138, 60, 79, 6, 0, 120, 8, 57, 24, 191, 128, 233,
178, 200, 146, 73, 104, 104, 0, 56, 7, 188, 60, 111, 236, 56, 1, 93,
64, 30, 239, 222, 6, 103, 51, 0, 127, 242, 180, 204, 230, 109, 64, 127,
76, 128, 121, 248, 192, 57, 48, 116, 3, 69, 146, 72, 5, 14, 13, 238,
0, 135, 0, 58, 0, 29, 192, 7, 128, 10, 64, 15, 0, 28, 49, 0,
14, 238, 56, 7, 0, 80, 0, 83, 0, 43, 255, 216, 22, 160, 198, 102,
3, 164, 0, 46, 233, 64, 63, 248, 20, 128, 5, 221, 40, 5, 106, 12,
102, 96, 48, 48, 7, 188, 3, 255, 220, 47, 147, 176, 68, 133, 219, 194,
0, 10, 50, 8, 7, 255, 40, 192, 48, 144, 64, 128, 75, 0, 124, 96,
2, 48, 8, 176, 11, 40, 138, 112, 7, 139, 110, 212, 0, 241, 109, 221,
192, 89, 68, 88, 64, 0, 0, 0, 244, 12, 0, 0, 107, 101, 114, 110,
3, 0, 0, 0, 155, 0, 61, 49, 0, 0, 1, 2, 0, 3, 4, 5,
2, 6, 7, 8, 9, 10, 9, 10, 11, 12, 0, 13, 14, 15, 16, 17,
18, 19, 12, 20, 20, 0, 0, 0, 21, 22, 23, 24, 25, 22, 26, 27,
28, 29, 29, 30, 31, 32, 29, 29, 22, 33, 34, 35, 3, 36, 30, 37,
37, 38, 39, 40, 41, 42, 43, 0, 44, 0, 45, 46, 47, 48, 49, 50,
51, 45, 52, 52, 53, 48, 45, 45, 46, 46, 54, 55, 56, 57, 51, 58,
58, 59, 58, 60, 41, 0, 0, 9, 61, 9, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 2, 0, 3, 4, 5, 2, 6, 7, 8, 9,
10, 9, 10, 11, 12, 13, 14, 15, 16, 17, 12, 18, 19, 20, 21, 21,
0, 0, 0, 22, 23, 24, 25, 23, 25, 25, 25, 23, 25, 25, 26, 25,
25, 25, 25, 23, 25, 23, 25, 3, 27, 28, 29, 29, 30, 31, 32, 33,
34, 35, 0, 36, 0, 37, 38, 39, 39, 39, 0, 39, 38, 40, 41, 38,
38, 42, 42, 39, 42, 39, 42, 43, 44, 45, 46, 46, 47, 46, 48, 0,
0, 35, 9, 49, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
6, 0, 3, 253, 0, 0, 0, 0, 249, 248, 1, 6, 3, 2, 251, 1,
6, 0, 5, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8, 1, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
0, 252, 0, 0, 0, 0, 0, 253, 2, 3, 0, 0, 255, 0, 255, 1,
0, 255, 0, 255, 255, 253, 0, 0, 0, 0, 255, 0, 0, 254, 254, 0,
0, 255, 0, 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 0,
254, 0, 253, 0, 241, 0, 0, 253, 0, 3, 4, 0, 0, 253, 1, 1,
4, 3, 254, 3, 0, 0, 249, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 251, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 253, 254, 250, 0, 251, 255, 0, 0, 0, 0, 0, 5, 0, 252, 255,
0, 0, 0, 254, 0, 0, 255, 247, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 246, 255, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 251, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 1,
0, 0, 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 251, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 3, 1, 4, 255, 0, 0, 3, 255, 252, 238,
1, 3, 3, 0, 254, 0, 5, 0, 4, 0, 4, 0, 244, 0, 254, 4,
0, 4, 255, 3, 1, 0, 0, 0, 255, 0, 0, 254, 10, 0, 10, 0,
4, 0, 5, 2, 2, 4, 0, 0, 0, 251, 0, 0, 0, 0, 0, 255,
0, 1, 254, 254, 253, 1, 0, 255, 0, 0, 0, 251, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 248, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 249, 0, 248, 0, 0, 0, 0, 255,
0, 13, 254, 254, 1, 1, 255, 0, 254, 1, 0, 0, 249, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 244, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 248, 0, 8, 0, 0, 251, 0, 4, 0,
247, 244, 247, 253, 4, 0, 0, 247, 0, 2, 253, 0, 254, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 240, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 1, 0, 0, 0, 0, 0,
1, 1, 254, 253, 0, 0, 0, 255, 0, 0, 255, 0, 0, 0, 253, 0,
255, 0, 253, 253, 0, 253, 252, 252, 254, 0, 253, 0, 253, 0, 0, 0,
0, 255, 0, 0, 1, 0, 1, 255, 0, 0, 0, 0, 0, 1, 255, 0,
0, 0, 255, 1, 1, 0, 0, 0, 0, 254, 0, 0, 0, 0, 0, 0,
0, 0, 0, 2, 255, 0, 254, 0, 254, 0, 0, 255, 0, 4, 0, 0,
255, 0, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 255, 0, 255, 0,
0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 0, 255, 254, 0, 0, 0,
0, 0, 0, 0, 0, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0,
0, 0, 0, 255, 0, 0, 0, 0, 255, 254, 0, 254, 0, 252, 255, 252,
3, 0, 0, 253, 1, 3, 3, 0, 253, 0, 254, 0, 0, 250, 1, 255,
1, 249, 1, 0, 0, 0, 249, 0, 249, 255, 245, 255, 0, 250, 0, 3,
4, 0, 2, 0, 0, 0, 0, 0, 0, 254, 254, 0, 252, 0, 0, 0,
255, 0, 0, 0, 255, 0, 0, 0, 0, 0, 255, 255, 0, 255, 254, 0,
0, 0, 0, 0, 0, 0, 255, 255, 0, 255, 254, 255, 0, 0, 255, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 0, 254, 0, 255,
0, 253, 1, 0, 0, 254, 1, 1, 1, 0, 0, 0, 0, 0, 0, 255,
0, 0, 0, 0, 0, 1, 0, 0, 255, 0, 255, 255, 254, 0, 0, 0,
0, 0, 0, 0, 1, 0, 255, 0, 0, 0, 0, 255, 254, 0, 254, 0,
4, 255, 0, 252, 0, 0, 3, 250, 249, 251, 253, 1, 0, 255, 248, 254,
0, 254, 0, 253, 2, 254, 248, 0, 253, 0, 0, 1, 0, 1, 255, 0,
1, 0, 252, 251, 0, 250, 253, 253, 253, 252, 254, 253, 0, 254, 253, 1,
0, 0, 0, 255, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 255, 0, 255, 0, 0, 255, 0, 254, 253, 253, 0,
0, 252, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 1, 255, 0,
0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 254, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 255, 0, 0, 0, 254, 0, 0, 0, 0, 250, 252, 0, 0, 0,
254, 250, 0, 0, 255, 1, 0, 253, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 254, 0, 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 254, 0, 0, 0, 0, 2, 0, 1, 253, 253, 0, 255,
255, 254, 0, 0, 0, 0, 0, 0, 252, 0, 255, 0, 254, 255, 0, 253,
253, 252, 255, 0, 253, 0, 252, 0, 0, 0, 0, 10, 0, 0, 1, 0,
0, 254, 0, 1, 0, 250, 0, 0, 0, 0, 0, 244, 254, 4, 4, 255,
251, 0, 1, 254, 0, 250, 255, 254, 1, 247, 255, 2, 0, 2, 252, 254,
251, 252, 251, 0, 0, 248, 0, 7, 0, 0, 255, 0, 0, 0, 255, 255,
255, 253, 252, 0, 244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255,
0, 255, 255, 254, 0, 0, 253, 0, 255, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 253, 0, 0, 3, 0, 2,
0, 253, 1, 255, 0, 253, 255, 0, 254, 255, 255, 0, 254, 254, 0, 0,
255, 0, 255, 254, 254, 0, 0, 255, 0, 1, 255, 0, 253, 0, 0, 0,
253, 0, 254, 0, 254, 254, 1, 0, 0, 0, 0, 0, 0, 0, 0, 253,
1, 0, 254, 0, 255, 254, 252, 255, 255, 255, 0, 255, 254, 0, 0, 0,
0, 0, 0, 255, 255, 255, 0, 0, 0, 0, 2, 255, 0, 255, 0, 0,
0, 255, 254, 255, 255, 254, 255, 0, 1, 5, 0, 0, 253, 0, 255, 3,
0, 255, 251, 254, 2, 0, 0, 250, 254, 1, 254, 1, 0, 255, 255, 252,
0, 254, 1, 0, 0, 254, 0, 0, 0, 1, 1, 253, 254, 0, 254, 255,
254, 255, 255, 0, 254, 1, 254, 254, 4, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 254, 0, 0, 254, 0, 0, 255, 255, 0, 0, 0, 0, 255, 0,
0, 0, 0, 255, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 254, 0,
253, 0, 0, 0, 252, 0, 1, 253, 3, 0, 255, 250, 0, 0, 253, 255,
0, 251, 253, 252, 0, 0, 250, 255, 251, 251, 250, 0, 253, 0, 1, 9,
254, 0, 253, 255, 0, 255, 254, 253, 254, 251, 251, 253, 255, 0, 0, 255,
0, 0, 0, 0, 247, 255, 4, 3, 253, 251, 0, 0, 252, 0, 250, 255,
255, 3, 244, 254, 0, 0, 0, 248, 254, 249, 255, 247, 0, 0, 247, 0,
8, 0, 0, 255, 0, 0, 0, 0, 255, 255, 251, 255, 0, 248, 0, 0,
0, 0, 252, 0, 255, 0, 0, 252, 250, 0, 0, 255, 254, 252, 255, 0,
255, 0, 0, 0, 0, 250, 255, 252, 252, 255, 254, 253, 255, 254, 0, 253,
255, 252, 254, 0, 254, 254, 255, 254, 0, 1, 0, 255, 252, 0, 3, 0,
254, 0, 0, 0, 0, 2, 0, 1, 253, 5, 0, 255, 255, 254, 0, 0,
0, 0, 0, 0, 252, 0, 255, 0, 254, 255, 0, 253, 253, 252, 255, 0,
253, 1, 5, 0, 0, 0, 0, 10, 0, 0, 1, 0, 0, 254, 0, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 253,
0, 0, 0, 0, 0, 255, 0, 0, 0, 255, 255, 0, 0, 253, 255, 0,
0, 253, 0, 2, 255, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
2, 3, 1, 255, 0, 252, 254, 0, 4, 252, 252, 253, 253, 5, 2, 1,
245, 255, 3, 255, 0, 255, 1, 255, 252, 0, 255, 1, 254, 255, 252, 255,
0, 0, 4, 3, 0, 252, 0, 249, 254, 4, 254, 251, 0, 254, 252, 252,
255, 5, 1, 0, 254, 0, 253, 0, 1, 4, 253, 251, 251, 253, 4, 0,
0, 247, 255, 1, 254, 255, 253, 0, 253, 251, 254, 254, 255, 0, 0, 253,
253, 255, 0, 4, 3, 255, 249, 0, 249, 254, 0, 252, 249, 0, 252, 254,
252, 252, 3, 0, 0, 254, 0, 253, 255, 0, 255, 254, 0, 2, 252, 1,
0, 0, 249, 0, 255, 253, 254, 255, 252, 253, 252, 253, 0, 252, 255, 253,
254, 252, 255, 0, 0, 0, 6, 254, 0, 252, 255, 0, 255, 253, 253, 253,
252, 251, 254, 253, 3, 0, 254, 0, 250, 254, 1, 3, 252, 251, 253, 252,
4, 255, 1, 244, 254, 3, 253, 254, 251, 0, 252, 251, 254, 255, 255, 255,
253, 252, 0, 0, 0, 4, 4, 255, 248, 0, 248, 253, 3, 251, 247, 253,
252, 251, 250, 252, 3, 0, 0, 0, 0, 254, 0, 0, 1, 254, 3, 1,
254, 3, 0, 0, 252, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0,
0, 0, 255, 0, 0, 0, 0, 1, 4, 0, 0, 254, 0, 0, 0, 0,
255, 255, 254, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 255, 0,
5, 0, 2, 0, 0, 254, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 248, 0, 255, 2, 0, 4, 0, 0,
13, 2, 253, 253, 1, 1, 255, 0, 250, 0, 0, 6, 248, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 247, 5, 18, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 248, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 254, 0, 0, 254, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 253, 0, 0, 0,
0, 0, 1, 17, 253, 255, 4, 3, 253, 1, 0, 0, 1, 1, 254, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 4, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 252, 0, 0,
0, 253, 0, 0, 0, 0, 253, 255, 0, 0, 0, 253, 0, 254, 0, 250,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 254, 0, 254, 0, 253, 0,
0, 0, 254, 1, 254, 0, 0, 253, 255, 253, 0, 0, 253, 0, 255, 0,
250, 0, 255, 0, 0, 246, 254, 251, 255, 251, 0, 0, 247, 0, 253, 255,
0, 0, 0, 0, 0, 0, 0, 0, 254, 254, 255, 254, 0, 0, 0, 0,
253, 0, 253, 2, 255, 3, 0, 255, 253, 255, 254, 254, 0, 254, 255, 255,
1, 253, 0, 0, 0, 0, 245, 255, 254, 0, 253, 0, 255, 250, 255, 0,
0, 255, 255, 0, 0, 0, 0, 1, 0, 255, 254, 255, 2, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 253,
0, 255, 0, 0, 0, 253, 1, 0, 0, 0, 253, 255, 253, 0, 0, 252,
0, 255, 0, 250, 0, 0, 0, 0, 244, 0, 253, 251, 250, 0, 0, 247,
0, 255, 254, 0, 0, 0, 0, 0, 0, 0, 0, 255, 254, 255, 254, 0,
0, 0, 2, 254, 0, 4, 6, 255, 255, 252, 2, 6, 2, 3, 253, 2,
5, 2, 4, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8, 6, 254, 255, 0, 255, 10, 6, 10, 0, 0, 0, 1, 0, 0, 5,
0, 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0,
0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 245, 254, 255, 251, 250, 0,
0, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0,
0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 245, 254, 255, 251, 250,
0, 0, 251, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 253, 1, 0, 255, 1, 2,
1, 252, 0, 0, 255, 1, 0, 1, 0, 0, 0, 0, 253, 0, 255, 255,
253, 0, 255, 251, 0, 8, 255, 0, 253, 255, 0, 255, 254, 0, 255, 252,
253, 254, 0, 0, 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255,
0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 245, 254, 255,
251, 250, 0, 0, 247, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 254, 0, 252, 254, 255, 4, 255, 255, 251, 0,
255, 0, 255, 253, 0, 3, 0, 1, 0, 1, 253, 251, 254, 0, 251, 254,
253, 251, 251, 0, 254, 253, 254, 254, 255, 255, 254, 255, 0, 255, 0, 2,
0, 2, 255, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 255, 255, 255, 0, 0, 253, 0, 255, 0, 254, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 255, 255, 0, 254, 0, 0, 0, 0, 255, 0, 0, 254, 255, 1,
0, 254, 254, 255, 0, 252, 255, 253, 255, 254, 0, 254, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 247, 0, 4, 0, 0, 254, 0, 0, 0,
0, 254, 0, 255, 0, 0, 255, 0, 0, 255, 0, 253, 0, 0, 5, 254,
252, 252, 1, 1, 1, 0, 252, 1, 2, 1, 4, 1, 4, 255, 253, 0,
0, 251, 0, 0, 252, 253, 0, 0, 253, 0, 254, 254, 0, 254, 0, 254,
0, 255, 2, 0, 255, 252, 255, 5, 0, 0, 255, 0, 253, 0, 0, 2,
253, 0, 1, 255, 1, 0, 0, 252, 0, 255, 0, 0, 255, 1, 255, 0,
0, 0, 251, 254, 253, 0, 252, 0, 0, 250, 0, 5, 255, 0, 254, 0,
1, 0, 255, 0, 255, 252, 0, 255, 1, 0, 0, 0, 0, 255, 0, 0,
1, 254, 0, 0, 0, 254, 255, 0, 254, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 0, 3, 0, 0, 255,
0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 3, 0, 3, 0, 0,
0, 0, 0, 248, 249, 0, 6, 4, 2, 251, 1, 5, 0, 5, 0, 3,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};

View File

@ -0,0 +1,462 @@
/* table exported by mirkes.de's tiny hexer
filename: D:\lvgl\test\lv_port_pc_visual_studio\LvglPlatform\lvgl\tests\src\test_assets\font_2.fnt
position 0, 7252 bytes */
unsigned char const font_2_buf[7252] =
{
44, 0, 0, 0, 104, 101, 97, 100, 1, 0, 0, 0, 4, 0, 8, 0,
8, 0, 254, 255, 8, 0, 254, 255, 0, 0, 254, 255, 8, 0, 0, 0,
16, 0, 0, 0, 1, 4, 4, 4, 9, 0, 0, 0, 164, 0, 0, 0,
99, 109, 97, 112, 2, 0, 0, 0, 44, 0, 0, 0, 32, 0, 0, 0,
95, 0, 1, 0, 95, 0, 2, 0, 44, 0, 0, 0, 176, 0, 0, 0,
243, 247, 96, 0, 59, 0, 3, 0, 0, 0, 114, 31, 81, 239, 88, 239,
91, 239, 92, 239, 93, 239, 97, 239, 99, 239, 101, 239, 105, 239, 108, 239,
113, 239, 118, 239, 119, 239, 120, 239, 142, 239, 152, 239, 155, 239, 156, 239,
157, 239, 161, 239, 162, 239, 163, 239, 164, 239, 183, 239, 184, 239, 190, 239,
192, 239, 193, 239, 196, 239, 199, 239, 200, 239, 201, 239, 203, 239, 227, 239,
229, 239, 20, 240, 21, 240, 23, 240, 55, 240, 58, 240, 67, 240, 108, 240,
116, 240, 171, 240, 59, 241, 144, 241, 145, 241, 146, 241, 147, 241, 148, 241,
215, 241, 227, 241, 61, 242, 84, 242, 170, 244, 18, 247, 242, 247, 0, 0,
68, 1, 0, 0, 108, 111, 99, 97, 155, 0, 0, 0, 8, 0, 8, 0,
12, 0, 21, 0, 29, 0, 48, 0, 69, 0, 90, 0, 112, 0, 119, 0,
133, 0, 144, 0, 154, 0, 168, 0, 175, 0, 180, 0, 186, 0, 207, 0,
223, 0, 234, 0, 250, 0, 10, 1, 29, 1, 45, 1, 61, 1, 77, 1,
93, 1, 109, 1, 117, 1, 127, 1, 143, 1, 154, 1, 170, 1, 186, 1,
214, 1, 235, 1, 254, 1, 17, 2, 38, 2, 54, 2, 70, 2, 89, 2,
108, 2, 117, 2, 133, 2, 152, 2, 168, 2, 189, 2, 208, 2, 229, 2,
248, 2, 17, 3, 36, 3, 52, 3, 68, 3, 87, 3, 108, 3, 134, 3,
153, 3, 174, 3, 193, 3, 207, 3, 228, 3, 239, 3, 250, 3, 0, 4,
5, 4, 19, 4, 41, 4, 55, 4, 74, 4, 88, 4, 104, 4, 120, 4,
139, 4, 149, 4, 163, 4, 182, 4, 192, 4, 212, 4, 226, 4, 240, 4,
3, 5, 19, 5, 31, 5, 43, 5, 57, 5, 71, 5, 87, 5, 107, 5,
121, 5, 140, 5, 152, 5, 166, 5, 177, 5, 191, 5, 200, 5, 208, 5,
215, 5, 255, 5, 27, 6, 63, 6, 91, 6, 113, 6, 149, 6, 185, 6,
225, 6, 5, 7, 36, 7, 80, 7, 98, 7, 123, 7, 163, 7, 191, 7,
215, 7, 254, 7, 30, 8, 62, 8, 86, 8, 126, 8, 150, 8, 174, 8,
206, 8, 217, 8, 248, 8, 40, 9, 88, 9, 124, 9, 149, 9, 174, 9,
216, 9, 244, 9, 24, 10, 68, 10, 104, 10, 136, 10, 168, 10, 200, 10,
232, 10, 8, 11, 39, 11, 93, 11, 121, 11, 165, 11, 199, 11, 233, 11,
11, 12, 45, 12, 79, 12, 127, 12, 159, 12, 191, 12, 235, 12, 13, 13,
45, 13, 0, 0, 76, 13, 0, 0, 103, 108, 121, 102, 17, 0, 0, 0,
17, 0, 18, 172, 43, 163, 17, 163, 0, 25, 1, 25, 185, 203, 148, 128,
0, 45, 0, 50, 130, 41, 48, 37, 205, 209, 132, 3, 144, 54, 70, 64,
132, 132, 128, 0, 39, 135, 171, 128, 64, 1, 94, 209, 59, 64, 0, 70,
192, 128, 66, 74, 214, 217, 128, 64, 0, 54, 0, 58, 172, 56, 49, 132,
4, 27, 0, 19, 172, 51, 136, 4, 19, 147, 3, 16, 68, 16, 44, 7,
179, 4, 204, 128, 5, 157, 0, 12, 225, 16, 65, 141, 80, 29, 76, 201,
0, 0, 0, 0, 13, 129, 17, 185, 57, 0, 0, 21, 135, 155, 132, 16,
88, 13, 1, 192, 13, 0, 88, 4, 16, 21, 135, 147, 185, 140, 133, 134,
5, 140, 185, 128, 25, 129, 161, 164, 32, 55, 64, 10, 136, 0, 37, 0,
170, 0, 16, 0, 5, 0, 36, 236, 136, 5, 0, 0, 14, 135, 145, 128,
58, 184, 128, 24, 129, 24, 173, 48, 14, 128, 17, 0, 58, 0, 22, 255,
171, 128, 5, 0, 1, 64, 0, 65, 0, 5, 0, 2, 48, 0, 72, 128,
12, 128, 0, 42, 128, 42, 133, 93, 147, 48, 13, 201, 128, 99, 48, 13,
133, 93, 144, 23, 128, 26, 207, 16, 81, 5, 16, 81, 5, 16, 36, 128,
42, 181, 92, 128, 0, 96, 0, 44, 0, 67, 128, 79, 85, 24, 36, 128,
42, 189, 95, 0, 5, 16, 2, 84, 128, 0, 81, 69, 84, 128, 43, 0,
50, 128, 36, 128, 1, 208, 0, 13, 132, 16, 69, 214, 217, 0, 4, 152,
0, 36, 128, 42, 158, 213, 2, 176, 0, 45, 212, 0, 0, 73, 189, 85,
0, 39, 128, 42, 132, 213, 27, 56, 0, 76, 77, 19, 64, 21, 4, 205,
32, 38, 128, 42, 229, 86, 179, 128, 96, 0, 51, 128, 6, 0, 3, 56,
0, 41, 0, 42, 141, 85, 146, 176, 36, 14, 214, 156, 32, 13, 157, 77,
32, 39, 128, 42, 165, 76, 133, 136, 74, 157, 76, 192, 0, 74, 157, 92,
0, 14, 128, 18, 58, 0, 0, 58, 0, 14, 135, 19, 58, 0, 0, 58,
177, 0, 0, 37, 0, 42, 128, 0, 128, 36, 192, 46, 24, 0, 11, 72,
128, 0, 0, 37, 0, 169, 164, 204, 136, 0, 0, 36, 204, 136, 37, 0,
42, 136, 0, 1, 204, 16, 0, 54, 138, 74, 0, 0, 0, 0, 36, 128,
42, 181, 92, 128, 0, 96, 0, 82, 0, 1, 128, 1, 64, 0, 66, 7,
195, 1, 195, 188, 40, 20, 37, 78, 58, 192, 88, 5, 20, 64, 88, 5,
20, 20, 36, 204, 211, 1, 196, 58, 128, 0, 47, 120, 58, 128, 5, 200,
0, 1, 197, 8, 0, 88, 156, 128, 38, 204, 232, 133, 136, 1, 200, 48,
128, 50, 150, 204, 216, 149, 0, 66, 22, 205, 104, 149, 0, 28, 150, 204,
218, 0, 46, 128, 50, 131, 221, 81, 44, 128, 0, 73, 128, 0, 44, 128,
0, 3, 221, 81, 0, 53, 0, 58, 151, 85, 217, 129, 80, 0, 224, 21,
0, 4, 145, 80, 0, 224, 23, 85, 217, 128, 43, 0, 42, 151, 85, 65,
80, 0, 22, 213, 33, 80, 0, 23, 85, 72, 40, 128, 42, 151, 85, 65,
80, 0, 23, 85, 33, 80, 0, 21, 0, 0, 49, 128, 50, 131, 221, 81,
44, 128, 0, 73, 128, 17, 172, 128, 35, 131, 221, 81, 128, 52, 0, 50,
149, 0, 21, 21, 0, 21, 23, 85, 93, 21, 0, 21, 21, 0, 21, 0,
20, 0, 18, 149, 21, 21, 21, 21, 0, 33, 120, 42, 130, 214, 168, 0,
58, 128, 3, 168, 0, 66, 4, 213, 128, 46, 0, 50, 149, 0, 209, 21,
13, 144, 22, 99, 128, 22, 140, 168, 21, 0, 82, 0, 38, 0, 42, 149,
0, 1, 80, 0, 21, 0, 1, 80, 0, 23, 85, 56, 61, 0, 58, 150,
0, 1, 225, 107, 128, 94, 20, 201, 66, 97, 72, 220, 134, 20, 129, 128,
96, 52, 0, 50, 150, 136, 21, 22, 88, 21, 21, 37, 149, 21, 2, 229,
21, 0, 61, 0, 54, 0, 58, 131, 221, 217, 130, 200, 0, 224, 201, 128,
4, 34, 200, 0, 224, 131, 221, 217, 128, 46, 0, 50, 151, 85, 72, 21,
0, 66, 21, 0, 81, 151, 85, 48, 21, 0, 0, 0, 54, 7, 187, 3,
221, 217, 130, 200, 0, 224, 201, 128, 4, 34, 200, 0, 96, 131, 221, 217,
128, 0, 28, 201, 128, 46, 128, 50, 151, 85, 72, 21, 0, 66, 21, 0,
81, 150, 214, 64, 21, 0, 208, 128, 39, 128, 42, 149, 85, 19, 176, 0,
4, 76, 8, 0, 36, 173, 85, 24, 37, 128, 42, 213, 117, 48, 6, 0,
0, 96, 0, 6, 0, 0, 96, 0, 50, 128, 50, 156, 128, 36, 28, 128,
36, 28, 128, 36, 14, 0, 51, 3, 93, 80, 0, 45, 248, 58, 133, 136,
2, 184, 36, 128, 88, 0, 96, 171, 128, 2, 78, 0, 0, 6, 56, 0,
72, 0, 74, 202, 0, 120, 129, 201, 208, 52, 184, 73, 134, 5, 133, 133,
128, 60, 192, 68, 184, 0, 249, 1, 120, 128, 43, 0, 50, 172, 1, 80,
4, 61, 136, 0, 122, 128, 5, 37, 136, 59, 1, 88, 0, 41, 248, 58,
133, 16, 5, 128, 13, 132, 152, 0, 45, 192, 0, 0, 104, 0, 0, 6,
0, 0, 42, 0, 50, 181, 86, 104, 0, 13, 136, 0, 89, 0, 5, 152,
0, 70, 213, 80, 0, 21, 135, 155, 150, 161, 72, 20, 129, 72, 20, 129,
72, 22, 160, 22, 255, 171, 140, 128, 0, 80, 0, 2, 168, 0, 5, 0,
0, 72, 128, 1, 184, 0, 5, 0, 21, 135, 147, 198, 6, 6, 6, 6,
6, 70, 0, 37, 128, 169, 129, 224, 0, 74, 40, 19, 132, 128, 32, 7,
160, 187, 187, 128, 38, 130, 152, 131, 48, 38, 128, 42, 20, 204, 1, 76,
104, 66, 6, 9, 220, 232, 128, 43, 128, 51, 36, 0, 0, 36, 0, 0,
38, 85, 168, 37, 0, 96, 37, 0, 96, 38, 85, 40, 0, 36, 128, 42,
13, 85, 12, 32, 0, 66, 0, 0, 213, 80, 128, 43, 128, 43, 0, 0,
88, 0, 5, 141, 85, 92, 160, 29, 202, 1, 88, 212, 205, 128, 39, 0,
42, 12, 204, 140, 204, 67, 66, 128, 128, 213, 88, 128, 22, 128, 35, 5,
80, 21, 0, 78, 184, 20, 128, 20, 128, 20, 128, 0, 44, 7, 170, 141,
76, 220, 160, 14, 74, 1, 96, 213, 85, 140, 77, 24, 43, 128, 43, 36,
0, 2, 64, 0, 38, 77, 162, 72, 13, 164, 0, 98, 64, 6, 0, 18,
0, 19, 27, 128, 36, 36, 36, 36, 0, 18, 127, 155, 129, 184, 0, 1,
192, 28, 1, 192, 28, 53, 160, 39, 128, 43, 36, 0, 2, 64, 0, 36,
5, 34, 78, 24, 38, 181, 2, 64, 59, 128, 18, 0, 19, 36, 36, 36,
36, 36, 36, 0, 67, 128, 66, 38, 77, 196, 218, 36, 129, 216, 5, 164,
1, 80, 6, 36, 1, 80, 6, 0, 43, 128, 42, 38, 77, 162, 72, 13,
164, 0, 98, 64, 6, 0, 40, 128, 42, 13, 85, 12, 32, 29, 66, 1,
208, 213, 80, 128, 43, 135, 178, 166, 85, 168, 37, 0, 96, 37, 0, 96,
38, 85, 40, 36, 0, 0, 0, 43, 135, 170, 141, 84, 220, 160, 29, 202,
1, 216, 213, 77, 128, 0, 88, 26, 0, 34, 37, 208, 37, 0, 36, 0,
36, 0, 0, 32, 0, 34, 45, 202, 195, 152, 1, 188, 189, 83, 0, 26,
128, 34, 148, 128, 78, 184, 20, 128, 20, 128, 5, 200, 0, 43, 128, 42,
43, 128, 218, 184, 13, 164, 1, 216, 84, 205, 128, 36, 120, 50, 5, 128,
66, 2, 184, 88, 0, 91, 168, 0, 54, 128, 0, 57, 128, 66, 88, 7,
16, 80, 42, 172, 193, 64, 5, 80, 84, 16, 4, 192, 53, 128, 0, 35,
128, 42, 51, 141, 128, 77, 136, 5, 89, 3, 168, 216, 0, 36, 127, 178,
133, 136, 65, 129, 192, 208, 0, 85, 24, 0, 37, 0, 5, 89, 0, 0,
33, 128, 34, 44, 221, 128, 216, 133, 144, 78, 76, 0, 22, 135, 155, 133,
48, 96, 6, 2, 216, 6, 0, 96, 5, 48, 19, 7, 147, 148, 20, 20,
20, 20, 20, 20, 0, 22, 135, 155, 203, 128, 88, 5, 128, 105, 133, 128,
88, 75, 128, 37, 1, 41, 20, 154, 138, 131, 64, 0, 27, 1, 153, 147,
35, 131, 147, 168, 20, 0, 145, 128, 46, 129, 0, 64, 7, 196, 128, 0,
0, 0, 0, 0, 19, 95, 0, 70, 255, 255, 128, 127, 244, 175, 128, 121,
128, 7, 128, 120, 0, 7, 128, 120, 5, 127, 215, 248, 5, 125, 87, 208,
0, 0, 0, 64, 0, 67, 94, 230, 103, 85, 197, 128, 3, 172, 102, 179,
53, 86, 102, 179, 53, 86, 69, 128, 3, 172, 94, 230, 103, 85, 128, 64,
7, 196, 26, 10, 34, 33, 255, 191, 255, 255, 213, 165, 221, 221, 94, 46,
102, 101, 255, 191, 255, 255, 179, 139, 196, 67, 127, 191, 255, 255, 213, 165,
221, 221, 0, 64, 0, 67, 0, 0, 0, 77, 0, 0, 4, 253, 84, 128,
79, 208, 87, 204, 253, 0, 5, 127, 208, 0, 0, 76, 128, 0, 0, 44,
0, 51, 49, 128, 65, 103, 165, 122, 14, 255, 176, 5, 127, 152, 87, 190,
249, 211, 0, 217, 128, 64, 7, 196, 0, 6, 40, 128, 14, 190, 183, 56,
70, 134, 178, 248, 227, 134, 176, 115, 107, 131, 16, 115, 78, 128, 2, 121,
15, 99, 199, 192, 0, 206, 227, 0, 0, 64, 7, 196, 0, 6, 96, 0,
12, 71, 252, 64, 199, 255, 119, 252, 23, 240, 7, 121, 23, 240, 7, 121,
71, 255, 119, 252, 12, 71, 252, 64, 128, 6, 96, 0, 0, 72, 7, 204,
0, 0, 24, 17, 0, 0, 87, 213, 80, 0, 237, 53, 125, 1, 244, 95,
220, 113, 219, 111, 255, 235, 88, 71, 253, 255, 192, 4, 126, 6, 124, 0,
45, 192, 69, 168, 0, 64, 7, 196, 0, 7, 248, 0, 0, 7, 248, 0,
0, 7, 248, 0, 3, 255, 255, 184, 0, 79, 252, 128, 60, 61, 83, 195,
255, 253, 223, 255, 255, 255, 253, 223, 128, 72, 0, 75, 2, 255, 255, 250,
128, 241, 128, 1, 240, 212, 0, 0, 4, 87, 255, 176, 55, 255, 255, 255,
255, 255, 254, 255, 255, 255, 254, 128, 64, 7, 69, 0, 0, 0, 1, 129,
95, 253, 159, 151, 72, 140, 127, 205, 0, 54, 127, 152, 128, 18, 34, 34,
33, 0, 9, 255, 227, 0, 92, 255, 82, 173, 232, 249, 70, 100, 8, 24,
0, 0, 0, 0, 32, 7, 163, 128, 4, 154, 103, 255, 255, 255, 255, 213,
255, 128, 39, 128, 0, 128, 48, 7, 179, 128, 4, 128, 26, 103, 128, 255,
255, 141, 255, 255, 141, 221, 255, 128, 128, 39, 128, 0, 0, 128, 0, 72,
7, 204, 0, 0, 0, 42, 0, 0, 72, 17, 217, 154, 103, 129, 97, 223,
255, 248, 218, 182, 127, 255, 141, 171, 101, 95, 248, 22, 29, 0, 39, 129,
29, 152, 0, 8, 2, 160, 0, 64, 0, 67, 111, 255, 255, 254, 248, 63,
255, 255, 252, 103, 216, 223, 253, 173, 128, 7, 248, 0, 0, 7, 239, 255,
255, 254, 128, 56, 15, 172, 32, 0, 23, 144, 71, 249, 79, 255, 231, 255,
255, 255, 255, 175, 127, 249, 23, 125, 136, 12, 128, 56, 7, 61, 0, 0,
0, 6, 208, 128, 0, 127, 251, 128, 7, 255, 254, 160, 127, 255, 255, 215,
255, 255, 253, 127, 255, 234, 7, 255, 184, 0, 109, 8, 0, 0, 0, 0,
0, 0, 56, 7, 188, 77, 200, 77, 207, 255, 135, 255, 255, 248, 127, 255,
255, 135, 255, 255, 248, 127, 255, 255, 135, 255, 255, 248, 127, 249, 33, 1,
33, 0, 56, 7, 188, 18, 34, 34, 23, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 252, 93, 221,
220, 0, 56, 15, 172, 16, 0, 39, 192, 23, 255, 201, 127, 255, 231, 255,
255, 255, 255, 47, 254, 145, 124, 136, 13, 128, 56, 127, 204, 0, 0, 16,
0, 0, 0, 71, 192, 0, 0, 63, 255, 184, 0, 47, 255, 255, 168, 7,
127, 255, 255, 0, 44, 68, 68, 40, 7, 255, 255, 255, 128, 85, 221, 221,
208, 0, 40, 7, 172, 0, 3, 16, 3, 250, 3, 250, 130, 251, 0, 15,
88, 0, 23, 88, 0, 23, 48, 0, 8, 0, 40, 7, 172, 19, 0, 2,
123, 128, 2, 251, 128, 3, 122, 128, 95, 8, 95, 16, 55, 16, 0, 8,
0, 0, 56, 7, 188, 0, 2, 0, 0, 1, 249, 128, 0, 39, 160, 3,
197, 125, 67, 247, 255, 255, 240, 2, 122, 0, 0, 39, 160, 0, 0, 216,
128, 0, 56, 1, 57, 60, 68, 68, 63, 127, 255, 255, 0, 72, 0, 75,
0, 70, 102, 64, 0, 238, 139, 30, 232, 231, 170, 246, 175, 229, 250, 239,
234, 254, 14, 233, 185, 238, 136, 4, 110, 100, 8, 0, 80, 127, 220, 14,
152, 0, 0, 0, 0, 47, 70, 102, 81, 0, 0, 22, 218, 36, 250, 0,
61, 13, 127, 159, 240, 131, 253, 3, 123, 255, 136, 5, 121, 129, 247, 160,
0, 3, 102, 56, 221, 136, 0, 0, 0, 0, 68, 128, 72, 127, 220, 0,
0, 31, 24, 0, 0, 0, 6, 126, 0, 0, 0, 3, 126, 123, 0, 0,
0, 118, 134, 240, 0, 0, 71, 240, 119, 192, 0, 23, 255, 183, 255, 144,
5, 255, 241, 119, 253, 0, 111, 255, 255, 255, 232, 0, 64, 7, 196, 0,
0, 0, 16, 34, 0, 2, 122, 247, 216, 231, 254, 128, 198, 104, 224, 128,
238, 64, 224, 247, 224, 223, 254, 162, 0, 2, 122, 128, 0, 0, 16, 0,
56, 0, 59, 0, 0, 0, 0, 2, 114, 0, 2, 126, 122, 2, 124, 4,
122, 92, 0, 4, 88, 0, 0, 0, 0, 56, 0, 59, 0, 0, 0, 5,
192, 0, 69, 167, 192, 71, 160, 39, 231, 160, 0, 39, 32, 0, 0, 0,
0, 0, 80, 127, 219, 128, 74, 10, 34, 32, 0, 95, 252, 93, 223, 136,
4, 91, 176, 0, 112, 128, 5, 160, 0, 15, 16, 0, 91, 162, 47, 126,
168, 3, 221, 220, 47, 192, 0, 0, 0, 0, 16, 0, 64, 0, 67, 111,
253, 128, 0, 127, 255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 239, 255, 255, 254, 128, 64, 7, 196, 0, 4, 200, 0, 0,
79, 252, 128, 3, 255, 255, 184, 0, 7, 248, 0, 0, 7, 248, 0, 60,
39, 250, 67, 255, 244, 71, 127, 255, 255, 253, 223, 128, 64, 127, 204, 128,
0, 0, 0, 0, 0, 0, 3, 245, 0, 0, 0, 119, 240, 0, 0, 6,
126, 0, 0, 0, 39, 184, 0, 0, 14, 240, 3, 238, 38, 249, 128, 119,
255, 241, 128, 5, 118, 56, 0, 0, 56, 7, 196, 1, 128, 0, 0, 102,
224, 22, 224, 115, 249, 119, 16, 37, 255, 241, 0, 2, 127, 208, 0, 102,
252, 252, 128, 115, 240, 63, 200, 37, 32, 2, 40, 0, 56, 7, 188, 0,
127, 251, 163, 167, 255, 163, 252, 127, 255, 255, 199, 255, 255, 252, 127, 255,
255, 199, 255, 255, 253, 188, 68, 63, 255, 255, 128, 0, 56, 7, 188, 18,
34, 32, 135, 221, 221, 241, 120, 0, 7, 239, 162, 34, 127, 255, 254, 127,
255, 252, 132, 255, 255, 234, 239, 252, 93, 221, 220, 0, 40, 127, 188, 3,
255, 176, 0, 87, 249, 0, 6, 127, 195, 128, 119, 255, 216, 3, 199, 121,
0, 0, 124, 0, 0, 31, 0, 0, 3, 40, 0, 0, 56, 7, 188, 60,
220, 184, 7, 254, 127, 128, 127, 180, 65, 135, 252, 127, 197, 255, 199, 252,
71, 252, 127, 255, 188, 71, 255, 248, 3, 255, 255, 128, 56, 7, 188, 0,
6, 128, 0, 39, 127, 24, 6, 255, 254, 128, 127, 255, 248, 31, 255, 255,
157, 255, 255, 253, 188, 68, 68, 48, 2, 122, 0, 0, 72, 0, 75, 111,
255, 255, 255, 239, 140, 64, 196, 15, 255, 85, 101, 87, 127, 245, 86, 85,
119, 248, 192, 0, 64, 254, 255, 255, 255, 254, 128, 64, 127, 85, 0, 0,
0, 0, 0, 0, 0, 0, 37, 224, 0, 0, 46, 127, 216, 0, 55, 127,
255, 160, 6, 255, 255, 254, 0, 3, 68, 103, 250, 128, 0, 0, 71, 240,
0, 0, 0, 71, 176, 0, 0, 0, 46, 128, 0, 0, 0, 0, 0, 0,
0, 48, 7, 180, 127, 252, 88, 127, 252, 125, 255, 254, 68, 127, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 128, 80, 7, 212,
0, 2, 59, 160, 0, 4, 255, 230, 127, 200, 102, 160, 0, 2, 110, 16,
37, 255, 218, 1, 0, 253, 42, 215, 136, 0, 0, 16, 128, 0, 0, 0,
119, 0, 0, 0, 0, 67, 128, 0, 0, 80, 0, 83, 18, 34, 34, 34,
32, 125, 221, 221, 221, 237, 123, 247, 119, 119, 47, 252, 127, 255, 255, 151,
250, 179, 51, 51, 85, 197, 221, 221, 221, 217, 128, 80, 0, 83, 18, 34,
34, 34, 32, 125, 221, 221, 221, 237, 123, 247, 119, 56, 47, 252, 127, 255,
192, 23, 250, 179, 51, 42, 85, 197, 221, 221, 221, 217, 128, 80, 0, 83,
18, 34, 34, 34, 32, 125, 221, 221, 221, 237, 123, 247, 112, 0, 47, 252,
127, 248, 0, 23, 250, 179, 50, 34, 85, 197, 221, 221, 221, 217, 128, 80,
0, 83, 18, 34, 34, 34, 32, 125, 221, 221, 221, 237, 123, 243, 128, 0,
47, 252, 124, 0, 0, 23, 250, 178, 162, 34, 85, 197, 221, 221, 221, 217,
128, 80, 0, 83, 18, 34, 34, 34, 32, 125, 221, 221, 221, 236, 120, 0,
0, 0, 47, 248, 0, 0, 0, 23, 250, 34, 34, 34, 86, 197, 221, 221,
221, 217, 128, 80, 7, 220, 0, 0, 0, 0, 0, 0, 0, 3, 236, 0,
0, 0, 3, 155, 32, 0, 4, 216, 200, 136, 139, 144, 119, 196, 108, 68,
108, 129, 16, 3, 36, 56, 0, 0, 0, 3, 118, 0, 0, 0, 0, 0,
0, 0, 0, 56, 7, 188, 3, 110, 225, 130, 127, 159, 104, 78, 90, 175,
149, 251, 141, 122, 95, 192, 223, 156, 228, 178, 121, 39, 249, 239, 0, 54,
246, 152, 0, 56, 7, 188, 60, 111, 236, 59, 196, 68, 67, 199, 255, 255,
196, 102, 70, 100, 70, 100, 102, 68, 102, 70, 100, 70, 100, 102, 66, 255,
255, 250, 128, 64, 127, 76, 128, 0, 0, 63, 24, 0, 0, 37, 255, 0,
0, 71, 205, 184, 0, 71, 255, 160, 0, 71, 255, 192, 0, 63, 255, 192,
0, 7, 127, 192, 0, 0, 119, 56, 0, 0, 0, 0, 0, 0, 0, 80,
0, 83, 0, 87, 255, 255, 254, 5, 255, 206, 100, 255, 215, 255, 224, 142,
127, 215, 255, 224, 142, 127, 133, 255, 206, 100, 255, 128, 87, 255, 255, 254,
0, 48, 7, 188, 3, 255, 255, 11, 219, 19, 225, 255, 92, 223, 31, 255,
255, 249, 255, 255, 255, 159, 255, 255, 249, 255, 255, 255, 158, 127, 255, 240,
128, 64, 128, 75, 0, 0, 0, 1, 128, 17, 128, 1, 120, 23, 73, 17,
47, 134, 255, 255, 255, 248, 23, 73, 17, 16, 128, 17, 128, 0, 0, 0,
244, 12, 0, 0, 107, 101, 114, 110, 3, 0, 0, 0, 155, 0, 61, 49,
0, 0, 1, 2, 0, 3, 4, 5, 2, 6, 7, 8, 9, 10, 9, 10,
11, 12, 0, 13, 14, 15, 16, 17, 18, 19, 12, 20, 20, 0, 0, 0,
21, 22, 23, 24, 25, 22, 26, 27, 28, 29, 29, 30, 31, 32, 29, 29,
22, 33, 34, 35, 3, 36, 30, 37, 37, 38, 39, 40, 41, 42, 43, 0,
44, 0, 45, 46, 47, 48, 49, 50, 51, 45, 52, 52, 53, 48, 45, 45,
46, 46, 54, 55, 56, 57, 51, 58, 58, 59, 58, 60, 41, 0, 0, 9,
61, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0,
3, 4, 5, 2, 6, 7, 8, 9, 10, 9, 10, 11, 12, 13, 14, 15,
16, 17, 12, 18, 19, 20, 21, 21, 0, 0, 0, 22, 23, 24, 25, 23,
25, 25, 25, 23, 25, 25, 26, 25, 25, 25, 25, 23, 25, 23, 25, 3,
27, 28, 29, 29, 30, 31, 32, 33, 34, 35, 0, 36, 0, 37, 38, 39,
39, 39, 0, 39, 38, 40, 41, 38, 38, 42, 42, 39, 42, 39, 42, 43,
44, 45, 46, 46, 47, 46, 48, 0, 0, 35, 9, 49, 9, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 3, 253, 0, 0, 0, 0,
249, 248, 1, 6, 3, 2, 251, 1, 6, 0, 5, 1, 4, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 8, 1, 255, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 3, 0, 252, 0, 0, 0, 0, 0, 253,
2, 3, 0, 0, 255, 0, 255, 1, 0, 255, 0, 255, 255, 253, 0, 0,
0, 0, 255, 0, 0, 254, 254, 0, 0, 255, 0, 253, 0, 0, 0, 0,
0, 0, 0, 0, 0, 255, 255, 0, 254, 0, 253, 0, 241, 0, 0, 253,
0, 3, 4, 0, 0, 253, 1, 1, 4, 3, 254, 3, 0, 0, 249, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 251, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 253, 254, 250, 0, 251, 255, 0,
0, 0, 0, 0, 5, 0, 252, 255, 0, 0, 0, 254, 0, 0, 255, 247,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 246, 255, 5, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 251, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 4, 0, 1, 0, 0, 253, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 251, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1,
4, 255, 0, 0, 3, 255, 252, 238, 1, 3, 3, 0, 254, 0, 5, 0,
4, 0, 4, 0, 244, 0, 254, 4, 0, 4, 255, 3, 1, 0, 0, 0,
255, 0, 0, 254, 10, 0, 10, 0, 4, 0, 5, 2, 2, 4, 0, 0,
0, 251, 0, 0, 0, 0, 0, 255, 0, 1, 254, 254, 253, 1, 0, 255,
0, 0, 0, 251, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
249, 0, 248, 0, 0, 0, 0, 255, 0, 13, 254, 254, 1, 1, 255, 0,
254, 1, 0, 0, 249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
244, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248,
0, 8, 0, 0, 251, 0, 4, 0, 247, 244, 247, 253, 4, 0, 0, 247,
0, 2, 253, 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 3, 4, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
6, 0, 1, 0, 0, 0, 0, 0, 1, 1, 254, 253, 0, 0, 0, 255,
0, 0, 255, 0, 0, 0, 253, 0, 255, 0, 253, 253, 0, 253, 252, 252,
254, 0, 253, 0, 253, 0, 0, 0, 0, 255, 0, 0, 1, 0, 1, 255,
0, 0, 0, 0, 0, 1, 255, 0, 0, 0, 255, 1, 1, 0, 0, 0,
0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 255, 0, 254, 0,
254, 0, 0, 255, 0, 4, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0,
255, 255, 0, 0, 255, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0,
255, 255, 0, 255, 254, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 255,
255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0,
255, 254, 0, 254, 0, 252, 255, 252, 3, 0, 0, 253, 1, 3, 3, 0,
253, 0, 254, 0, 0, 250, 1, 255, 1, 249, 1, 0, 0, 0, 249, 0,
249, 255, 245, 255, 0, 250, 0, 3, 4, 0, 2, 0, 0, 0, 0, 0,
0, 254, 254, 0, 252, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0,
0, 0, 255, 255, 0, 255, 254, 0, 0, 0, 0, 0, 0, 0, 255, 255,
0, 255, 254, 255, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 255, 255, 0, 254, 0, 255, 0, 253, 1, 0, 0, 254, 1, 1,
1, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 1, 0, 0,
255, 0, 255, 255, 254, 0, 0, 0, 0, 0, 0, 0, 1, 0, 255, 0,
0, 0, 0, 255, 254, 0, 254, 0, 4, 255, 0, 252, 0, 0, 3, 250,
249, 251, 253, 1, 0, 255, 248, 254, 0, 254, 0, 253, 2, 254, 248, 0,
253, 0, 0, 1, 0, 1, 255, 0, 1, 0, 252, 251, 0, 250, 253, 253,
253, 252, 254, 253, 0, 254, 253, 1, 0, 0, 0, 255, 0, 0, 0, 1,
0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 255,
0, 0, 255, 0, 254, 253, 253, 0, 0, 252, 0, 0, 0, 0, 0, 0,
255, 0, 0, 0, 0, 1, 255, 0, 0, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 255, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 254, 0,
0, 0, 0, 250, 252, 0, 0, 0, 254, 250, 0, 0, 255, 1, 0, 253,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 0, 0, 254, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 0, 0, 0,
0, 2, 0, 1, 253, 253, 0, 255, 255, 254, 0, 0, 0, 0, 0, 0,
252, 0, 255, 0, 254, 255, 0, 253, 253, 252, 255, 0, 253, 0, 252, 0,
0, 0, 0, 10, 0, 0, 1, 0, 0, 254, 0, 1, 0, 250, 0, 0,
0, 0, 0, 244, 254, 4, 4, 255, 251, 0, 1, 254, 0, 250, 255, 254,
1, 247, 255, 2, 0, 2, 252, 254, 251, 252, 251, 0, 0, 248, 0, 7,
0, 0, 255, 0, 0, 0, 255, 255, 255, 253, 252, 0, 244, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 255, 0, 255, 255, 254, 0, 0, 253, 0,
255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 253, 0, 0, 3, 0, 2, 0, 253, 1, 255, 0, 253, 255, 0,
254, 255, 255, 0, 254, 254, 0, 0, 255, 0, 255, 254, 254, 0, 0, 255,
0, 1, 255, 0, 253, 0, 0, 0, 253, 0, 254, 0, 254, 254, 1, 0,
0, 0, 0, 0, 0, 0, 0, 253, 1, 0, 254, 0, 255, 254, 252, 255,
255, 255, 0, 255, 254, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 0,
0, 0, 2, 255, 0, 255, 0, 0, 0, 255, 254, 255, 255, 254, 255, 0,
1, 5, 0, 0, 253, 0, 255, 3, 0, 255, 251, 254, 2, 0, 0, 250,
254, 1, 254, 1, 0, 255, 255, 252, 0, 254, 1, 0, 0, 254, 0, 0,
0, 1, 1, 253, 254, 0, 254, 255, 254, 255, 255, 0, 254, 1, 254, 254,
4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 0, 0, 254, 0, 0,
255, 255, 0, 0, 0, 0, 255, 0, 0, 0, 0, 255, 0, 0, 0, 0,
0, 255, 0, 0, 0, 0, 254, 0, 253, 0, 0, 0, 252, 0, 1, 253,
3, 0, 255, 250, 0, 0, 253, 255, 0, 251, 253, 252, 0, 0, 250, 255,
251, 251, 250, 0, 253, 0, 1, 9, 254, 0, 253, 255, 0, 255, 254, 253,
254, 251, 251, 253, 255, 0, 0, 255, 0, 0, 0, 0, 247, 255, 4, 3,
253, 251, 0, 0, 252, 0, 250, 255, 255, 3, 244, 254, 0, 0, 0, 248,
254, 249, 255, 247, 0, 0, 247, 0, 8, 0, 0, 255, 0, 0, 0, 0,
255, 255, 251, 255, 0, 248, 0, 0, 0, 0, 252, 0, 255, 0, 0, 252,
250, 0, 0, 255, 254, 252, 255, 0, 255, 0, 0, 0, 0, 250, 255, 252,
252, 255, 254, 253, 255, 254, 0, 253, 255, 252, 254, 0, 254, 254, 255, 254,
0, 1, 0, 255, 252, 0, 3, 0, 254, 0, 0, 0, 0, 2, 0, 1,
253, 5, 0, 255, 255, 254, 0, 0, 0, 0, 0, 0, 252, 0, 255, 0,
254, 255, 0, 253, 253, 252, 255, 0, 253, 1, 5, 0, 0, 0, 0, 10,
0, 0, 1, 0, 0, 254, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 255, 253, 0, 0, 0, 0, 0, 255, 0, 0,
0, 255, 255, 0, 0, 253, 255, 0, 0, 253, 0, 2, 255, 0, 0, 0,
0, 0, 0, 1, 0, 0, 0, 0, 2, 3, 1, 255, 0, 252, 254, 0,
4, 252, 252, 253, 253, 5, 2, 1, 245, 255, 3, 255, 0, 255, 1, 255,
252, 0, 255, 1, 254, 255, 252, 255, 0, 0, 4, 3, 0, 252, 0, 249,
254, 4, 254, 251, 0, 254, 252, 252, 255, 5, 1, 0, 254, 0, 253, 0,
1, 4, 253, 251, 251, 253, 4, 0, 0, 247, 255, 1, 254, 255, 253, 0,
253, 251, 254, 254, 255, 0, 0, 253, 253, 255, 0, 4, 3, 255, 249, 0,
249, 254, 0, 252, 249, 0, 252, 254, 252, 252, 3, 0, 0, 254, 0, 253,
255, 0, 255, 254, 0, 2, 252, 1, 0, 0, 249, 0, 255, 253, 254, 255,
252, 253, 252, 253, 0, 252, 255, 253, 254, 252, 255, 0, 0, 0, 6, 254,
0, 252, 255, 0, 255, 253, 253, 253, 252, 251, 254, 253, 3, 0, 254, 0,
250, 254, 1, 3, 252, 251, 253, 252, 4, 255, 1, 244, 254, 3, 253, 254,
251, 0, 252, 251, 254, 255, 255, 255, 253, 252, 0, 0, 0, 4, 4, 255,
248, 0, 248, 253, 3, 251, 247, 253, 252, 251, 250, 252, 3, 0, 0, 0,
0, 254, 0, 0, 1, 254, 3, 1, 254, 3, 0, 0, 252, 0, 0, 0,
0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 1,
4, 0, 0, 254, 0, 0, 0, 0, 255, 255, 254, 0, 0, 0, 0, 1,
0, 0, 0, 0, 1, 0, 255, 0, 5, 0, 2, 0, 0, 254, 0, 3,
0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,
0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
248, 0, 255, 2, 0, 4, 0, 0, 13, 2, 253, 253, 1, 1, 255, 0,
250, 0, 0, 6, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
247, 5, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 0, 0, 254, 255, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 255, 0, 253, 0, 0, 0, 0, 0, 1, 17, 253, 255, 4, 3,
253, 1, 0, 0, 1, 1, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 239, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 252, 0, 0, 0, 253, 0, 0, 0, 0, 253, 255,
0, 0, 0, 253, 0, 254, 0, 250, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255,
0, 0, 254, 0, 254, 0, 253, 0, 0, 0, 254, 1, 254, 0, 0, 253,
255, 253, 0, 0, 253, 0, 255, 0, 250, 0, 255, 0, 0, 246, 254, 251,
255, 251, 0, 0, 247, 0, 253, 255, 0, 0, 0, 0, 0, 0, 0, 0,
254, 254, 255, 254, 0, 0, 0, 0, 253, 0, 253, 2, 255, 3, 0, 255,
253, 255, 254, 254, 0, 254, 255, 255, 1, 253, 0, 0, 0, 0, 245, 255,
254, 0, 253, 0, 255, 250, 255, 0, 0, 255, 255, 0, 0, 0, 0, 1,
0, 255, 254, 255, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2, 0, 0, 0, 0, 0, 0, 253, 0, 255, 0, 0, 0, 253, 1, 0,
0, 0, 253, 255, 253, 0, 0, 252, 0, 255, 0, 250, 0, 0, 0, 0,
244, 0, 253, 251, 250, 0, 0, 247, 0, 255, 254, 0, 0, 0, 0, 0,
0, 0, 0, 255, 254, 255, 254, 0, 0, 0, 2, 254, 0, 4, 6, 255,
255, 252, 2, 6, 2, 3, 253, 2, 5, 2, 4, 3, 3, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 8, 6, 254, 255, 0, 255, 10, 6,
10, 0, 0, 0, 1, 0, 0, 5, 0, 0, 254, 0, 0, 0, 0, 0,
0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0,
0, 0, 245, 254, 255, 251, 250, 0, 0, 247, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 0, 0, 0, 0,
0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0,
0, 0, 0, 245, 254, 255, 251, 250, 0, 0, 251, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0,
0, 0, 253, 1, 0, 255, 1, 2, 1, 252, 0, 0, 255, 1, 0, 1,
0, 0, 0, 0, 253, 0, 255, 255, 253, 0, 255, 251, 0, 8, 255, 0,
253, 255, 0, 255, 254, 0, 255, 252, 253, 254, 0, 0, 0, 254, 0, 0,
0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0,
2, 0, 0, 0, 0, 245, 254, 255, 251, 250, 0, 0, 247, 0, 0, 0,
0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 0,
252, 254, 255, 4, 255, 255, 251, 0, 255, 0, 255, 253, 0, 3, 0, 1,
0, 1, 253, 251, 254, 0, 251, 254, 253, 251, 251, 0, 254, 253, 254, 254,
255, 255, 254, 255, 0, 255, 0, 2, 0, 2, 255, 0, 4, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 0, 253, 0,
255, 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 0, 254, 0, 0,
0, 0, 255, 0, 0, 254, 255, 1, 0, 254, 254, 255, 0, 252, 255, 253,
255, 254, 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247,
0, 4, 0, 0, 254, 0, 0, 0, 0, 254, 0, 255, 0, 0, 255, 0,
0, 255, 0, 253, 0, 0, 5, 254, 252, 252, 1, 1, 1, 0, 252, 1,
2, 1, 4, 1, 4, 255, 253, 0, 0, 251, 0, 0, 252, 253, 0, 0,
253, 0, 254, 254, 0, 254, 0, 254, 0, 255, 2, 0, 255, 252, 255, 5,
0, 0, 255, 0, 253, 0, 0, 2, 253, 0, 1, 255, 1, 0, 0, 252,
0, 255, 0, 0, 255, 1, 255, 0, 0, 0, 251, 254, 253, 0, 252, 0,
0, 250, 0, 5, 255, 0, 254, 0, 1, 0, 255, 0, 255, 252, 0, 255,
1, 0, 0, 0, 0, 255, 0, 0, 1, 254, 0, 0, 0, 254, 255, 0,
254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 248, 0, 3, 0, 0, 255, 0, 0, 0, 0, 0, 0, 255, 255,
0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, 248, 249, 0, 6, 4,
2, 251, 1, 5, 0, 5, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0
};

View File

@ -0,0 +1,314 @@
/* table exported by mirkes.de's tiny hexer
filename: D:\lvgl\test\lv_port_pc_visual_studio\LvglPlatform\lvgl\tests\src\test_assets\font_3.fnt
position 0, 4892 bytes */
unsigned char const font_3_buf[4892] =
{
44, 0, 0, 0, 104, 101, 97, 100, 1, 0, 0, 0, 3, 0, 20, 0,
17, 0, 251, 255, 21, 0, 251, 255, 0, 0, 251, 255, 17, 0, 12, 0,
16, 0, 0, 0, 0, 4, 5, 5, 0, 1, 0, 0, 28, 0, 0, 0,
99, 109, 97, 112, 1, 0, 0, 0, 28, 0, 0, 0, 32, 0, 0, 0,
95, 0, 1, 0, 95, 0, 2, 0, 204, 0, 0, 0, 108, 111, 99, 97,
96, 0, 0, 0, 8, 0, 8, 0, 11, 0, 27, 0, 43, 0, 130, 0,
215, 0, 37, 1, 116, 1, 126, 1, 188, 1, 250, 1, 43, 2, 71, 2,
86, 2, 94, 2, 103, 2, 156, 2, 230, 2, 252, 2, 65, 3, 135, 3,
189, 3, 0, 4, 73, 4, 126, 4, 201, 4, 18, 5, 38, 5, 68, 5,
111, 5, 130, 5, 176, 5, 237, 5, 72, 6, 147, 6, 213, 6, 19, 7,
79, 7, 115, 7, 145, 7, 218, 7, 241, 7, 14, 8, 51, 8, 113, 8,
130, 8, 184, 8, 235, 8, 49, 9, 97, 9, 189, 9, 252, 9, 73, 10,
95, 10, 137, 10, 214, 10, 53, 11, 134, 11, 193, 11, 250, 11, 12, 12,
62, 12, 81, 12, 114, 12, 123, 12, 132, 12, 187, 12, 240, 12, 37, 13,
94, 13, 147, 13, 195, 13, 8, 14, 43, 14, 80, 14, 116, 14, 166, 14,
193, 14, 225, 14, 255, 14, 55, 15, 114, 15, 170, 15, 193, 15, 250, 15,
33, 16, 62, 16, 117, 16, 187, 16, 244, 16, 62, 17, 107, 17, 168, 17,
175, 17, 235, 17, 8, 18, 0, 0, 103, 108, 121, 102, 0, 0, 0, 32,
6, 241, 251, 0, 255, 230, 145, 7, 100, 3, 8, 23, 105, 139, 0, 26,
140, 88, 224, 7, 176, 7, 198, 1, 24, 8, 4, 60, 160, 3, 112, 0,
24, 240, 12, 94, 96, 126, 96, 28, 128, 96, 160, 96, 29, 228, 0, 243,
0, 242, 160, 1, 84, 1, 87, 248, 219, 252, 109, 238, 29, 46, 15, 46,
15, 40, 8, 216, 18, 218, 18, 198, 1, 24, 136, 8, 68, 1, 220, 64,
13, 32, 12, 34, 86, 17, 51, 4, 0, 221, 195, 94, 225, 175, 96, 61,
208, 69, 200, 77, 248, 10, 0, 25, 12, 25, 12, 2, 210, 16, 210, 0,
241, 184, 1, 16, 1, 128, 15, 149, 48, 12, 190, 32, 31, 252, 71, 128,
180, 0, 219, 6, 75, 110, 0, 130, 126, 221, 12, 8, 32, 64, 0, 164,
28, 4, 3, 140, 128, 14, 14, 1, 38, 176, 88, 69, 160, 7, 14, 154,
94, 168, 6, 44, 194, 149, 72, 7, 29, 105, 50, 18, 144, 4, 82, 26,
244, 160, 25, 192, 208, 36, 64, 42, 13, 23, 31, 136, 99, 19, 132, 73,
187, 137, 112, 2, 109, 97, 234, 16, 14, 16, 14, 0, 24, 240, 126, 228,
0, 124, 145, 11, 117, 0, 246, 19, 42, 120, 15, 24, 4, 32, 29, 38,
96, 6, 153, 137, 116, 94, 0, 37, 86, 106, 188, 18, 128, 106, 238, 88,
180, 128, 120, 68, 16, 104, 1, 248, 154, 0, 63, 161, 17, 61, 199, 0,
198, 176, 204, 168, 130, 0, 80, 135, 138, 140, 88, 1, 52, 0, 127, 180,
195, 21, 24, 176, 3, 204, 202, 136, 32, 8, 22, 240, 2, 103, 235, 0,
113, 89, 176, 202, 128, 106, 10, 156, 30, 0, 196, 14, 1, 56, 6, 48,
112, 97, 176, 13, 65, 47, 42, 224, 24, 216, 225, 168, 3, 137, 0, 20,
1, 195, 133, 1, 162, 11, 199, 3, 47, 35, 65, 162, 36, 6, 6, 84,
117, 18, 49, 0, 168, 160, 164, 16, 80, 2, 160, 3, 4, 5, 212, 92,
8, 64, 22, 170, 59, 71, 27, 32, 34, 134, 82, 245, 0, 225, 0, 56,
24, 128, 30, 205, 96, 14, 16, 13, 146, 1, 88, 200, 1, 211, 132, 1,
10, 96, 7, 9, 0, 172, 76, 0, 38, 128, 18, 134, 128, 68, 2, 1,
8, 24, 7, 8, 4, 32, 32, 17, 129, 128, 78, 30, 1, 16, 168, 6,
115, 16, 10, 194, 64, 34, 86, 0, 214, 20, 1, 14, 171, 128, 71, 168,
30, 205, 98, 0, 238, 144, 13, 237, 0, 17, 195, 152, 4, 229, 224, 26,
140, 192, 18, 133, 0, 68, 40, 1, 148, 132, 2, 16, 32, 8, 193, 192,
33, 0, 225, 7, 0, 140, 8, 2, 113, 16, 4, 72, 1, 40, 120, 5,
194, 160, 3, 72, 0, 184, 216, 1, 65, 160, 23, 224, 128, 64, 9, 84,
160, 13, 62, 32, 31, 8, 8, 6, 16, 7, 128, 97, 46, 180, 17, 3,
108, 10, 170, 228, 126, 76, 14, 187, 0, 13, 189, 32, 21, 10, 185, 128,
102, 100, 88, 208, 4, 50, 76, 48, 142, 0, 27, 224, 3, 188, 0, 8,
84, 176, 13, 16, 0, 252, 172, 1, 255, 214, 223, 248, 135, 254, 230, 34,
128, 4, 90, 247, 98, 29, 219, 0, 63, 250, 64, 31, 8, 96, 175, 64,
16, 9, 193, 128, 132, 148, 96, 22, 152, 0, 17, 144, 39, 136, 242, 83,
191, 180, 32, 8, 48, 140, 49, 115, 145, 64, 240, 23, 211, 0, 15, 102,
128, 120, 142, 128, 61, 64, 192, 30, 100, 16, 14, 65, 224, 15, 112, 40,
7, 149, 128, 60, 193, 64, 30, 210, 48, 14, 20, 160, 15, 48, 40, 7,
169, 8, 3, 140, 180, 3, 212, 12, 1, 230, 80, 15, 40, 112, 7, 128,
8, 20, 240, 2, 95, 251, 16, 2, 91, 86, 97, 90, 128, 44, 126, 101,
227, 64, 131, 34, 0, 25, 5, 48, 32, 12, 33, 190, 12, 1, 68, 128,
136, 2, 27, 117, 0, 227, 196, 184, 0, 213, 129, 168, 1, 8, 50, 233,
0, 128, 60, 30, 128, 56, 76, 60, 3, 40, 106, 12, 136, 5, 96, 161,
99, 243, 46, 41, 0, 45, 171, 48, 173, 128, 16, 12, 240, 12, 72, 0,
108, 220, 159, 147, 0, 50, 93, 128, 29, 104, 224, 1, 0, 255, 247, 128,
0, 22, 240, 0, 207, 127, 64, 6, 47, 101, 98, 125, 0, 164, 110, 211,
138, 78, 0, 67, 64, 10, 3, 0, 94, 64, 49, 128, 67, 10, 1, 144,
48, 3, 244, 3, 0, 125, 37, 34, 1, 231, 101, 96, 15, 36, 29, 0,
120, 236, 180, 3, 195, 163, 226, 1, 236, 29, 32, 15, 89, 26, 59, 241,
130, 129, 196, 121, 64, 0, 20, 240, 0, 207, 127, 64, 4, 62, 202, 234,
250, 0, 177, 171, 139, 114, 96, 65, 80, 10, 131, 3, 184, 1, 255, 194,
176, 240, 8, 94, 117, 157, 64, 35, 134, 33, 192, 12, 95, 235, 59, 64,
15, 39, 135, 128, 136, 3, 16, 168, 118, 0, 112, 152, 25, 32, 4, 192,
129, 193, 118, 139, 146, 128, 46, 101, 117, 125, 16, 0, 22, 240, 15, 31,
248, 3, 247, 128, 127, 49, 128, 126, 25, 67, 0, 250, 194, 128, 62, 69,
129, 0, 250, 73, 192, 62, 114, 144, 15, 138, 21, 0, 62, 144, 176, 15,
141, 3, 191, 227, 15, 240, 196, 120, 65, 224, 157, 252, 65, 14, 1, 255,
202, 8, 20, 240, 7, 255, 202, 2, 2, 103, 194, 6, 13, 153, 200, 12,
28, 1, 240, 129, 128, 124, 64, 113, 80, 96, 23, 132, 186, 190, 56, 3,
138, 123, 146, 16, 64, 218, 194, 38, 128, 160, 15, 148, 12, 3, 227, 0,
15, 216, 6, 32, 33, 52, 48, 10, 3, 3, 131, 42, 117, 16, 160, 90,
168, 192, 246, 0, 8, 20, 240, 8, 99, 125, 64, 50, 115, 154, 48, 4,
86, 21, 214, 96, 20, 133, 40, 7, 10, 26, 128, 121, 2, 197, 157, 64,
34, 13, 233, 138, 209, 14, 5, 142, 227, 21, 0, 80, 226, 41, 36, 16,
2, 0, 101, 5, 16, 96, 13, 224, 56, 26, 1, 180, 25, 9, 200, 0,
74, 38, 28, 27, 84, 208, 160, 1, 226, 42, 147, 16, 0, 8, 20, 254,
255, 253, 110, 205, 228, 3, 153, 248, 130, 64, 60, 44, 162, 1, 230, 9,
0, 250, 72, 192, 60, 163, 96, 31, 72, 176, 7, 140, 204, 1, 244, 133,
0, 120, 85, 8, 3, 210, 30, 1, 243, 18, 0, 121, 134, 128, 62, 176,
96, 14, 8, 20, 240, 1, 87, 126, 168, 4, 58, 168, 193, 82, 0, 176,
170, 78, 147, 16, 32, 40, 5, 64, 128, 96, 31, 24, 32, 40, 5, 64,
129, 39, 84, 157, 42, 16, 5, 2, 177, 26, 0, 30, 87, 126, 139, 4,
32, 168, 129, 108, 152, 193, 0, 50, 6, 0, 12, 3, 24, 0, 197, 72,
2, 176, 208, 160, 218, 140, 99, 96, 76, 69, 113, 124, 0, 8, 20, 240,
2, 103, 245, 16, 4, 214, 76, 170, 193, 0, 72, 252, 220, 141, 130, 132,
136, 1, 137, 67, 64, 192, 50, 130, 120, 7, 184, 4, 128, 192, 55, 1,
160, 72, 128, 13, 192, 197, 199, 230, 176, 64, 66, 36, 217, 225, 193, 128,
13, 191, 174, 162, 64, 30, 51, 56, 7, 147, 70, 0, 37, 190, 176, 209,
0, 181, 73, 252, 192, 0, 40, 8, 181, 251, 15, 4, 41, 54, 35, 201,
0, 255, 226, 158, 64, 73, 185, 120, 25, 0, 39, 10, 240, 111, 160, 6,
130, 128, 60, 220, 0, 153, 0, 31, 252, 244, 166, 0, 18, 240, 0, 64,
55, 6, 0, 16, 144, 0, 252, 0, 8, 82, 160, 15, 146, 192, 57, 182,
212, 0, 47, 210, 109, 131, 61, 5, 93, 36, 140, 55, 138, 1, 34, 141,
210, 0, 67, 90, 203, 122, 226, 0, 41, 232, 56, 240, 12, 47, 210, 64,
31, 54, 0, 9, 20, 99, 153, 252, 110, 205, 249, 83, 255, 243, 0, 127,
138, 103, 241, 179, 127, 40, 8, 84, 163, 163, 0, 249, 215, 48, 160, 28,
152, 199, 90, 224, 24, 231, 233, 163, 228, 64, 50, 222, 19, 32, 6, 91,
194, 84, 2, 142, 165, 126, 161, 61, 115, 158, 129, 0, 58, 94, 176, 7,
37, 160, 7, 192, 8, 20, 240, 1, 223, 126, 168, 4, 184, 138, 163, 168,
0, 88, 109, 215, 139, 136, 158, 8, 0, 46, 4, 50, 224, 24, 192, 64,
60, 74, 68, 0, 247, 4, 128, 123, 14, 16, 3, 164, 221, 192, 30, 113,
128, 15, 137, 192, 63, 100, 128, 126, 17, 0, 124, 61, 224, 31, 132, 128,
48, 0, 24, 240, 13, 27, 250, 224, 28, 58, 183, 106, 155, 0, 212, 218,
200, 254, 172, 0, 69, 176, 159, 211, 187, 0, 62, 66, 82, 217, 84, 66,
8, 162, 220, 128, 32, 68, 48, 36, 19, 7, 32, 23, 112, 129, 40, 0,
92, 2, 19, 14, 32, 1, 8, 11, 9, 128, 12, 4, 12, 76, 148, 69,
232, 138, 2, 148, 1, 38, 112, 178, 108, 91, 0, 92, 159, 114, 101, 218,
32, 6, 77, 132, 67, 168, 7, 84, 165, 93, 156, 2, 0, 24, 240, 14,
207, 0, 254, 19, 5, 0, 252, 224, 15, 0, 253, 160, 136, 0, 252, 139,
162, 96, 30, 64, 199, 11, 0, 246, 131, 137, 40, 7, 156, 196, 20, 136,
1, 140, 108, 1, 96, 160, 26, 195, 38, 96, 192, 12, 160, 140, 197, 4,
16, 1, 17, 191, 245, 2, 0, 20, 52, 3, 32, 120, 3, 1, 0, 48,
154, 0, 162, 0, 60, 130, 128, 8, 20, 244, 255, 221, 138, 1, 141, 152,
133, 84, 0, 174, 101, 92, 106, 128, 31, 72, 96, 7, 198, 30, 1, 225,
176, 80, 5, 196, 39, 202, 136, 0, 110, 230, 19, 96, 10, 63, 235, 28,
48, 15, 39, 4, 0, 124, 96, 160, 31, 8, 24, 7, 208, 10, 0, 184,
132, 235, 28, 0, 13, 220, 193, 24, 0, 8, 20, 240, 1, 95, 251, 24,
2, 77, 85, 49, 76, 128, 20, 63, 83, 198, 198, 195, 2, 1, 120, 78,
131, 128, 99, 83, 97, 16, 7, 84, 145, 128, 127, 244, 8, 192, 63, 48,
136, 3, 166, 52, 28, 3, 27, 19, 12, 8, 5, 1, 33, 67, 243, 45,
71, 48, 76, 87, 97, 152, 0, 8, 22, 247, 255, 187, 24, 3, 202, 238,
25, 209, 0, 223, 19, 178, 88, 1, 249, 152, 76, 1, 250, 3, 64, 63,
9, 32, 7, 240, 128, 127, 156, 4, 3, 243, 128, 128, 126, 16, 15, 225,
36, 0, 253, 1, 160, 31, 59, 27, 0, 95, 19, 176, 90, 1, 149, 220,
51, 162, 0, 8, 20, 243, 255, 252, 192, 2, 102, 242, 128, 18, 103, 198,
1, 255, 222, 111, 254, 128, 8, 157, 251, 0, 36, 136, 228, 0, 255, 234,
164, 71, 144, 0, 78, 254, 192, 8, 20, 242, 255, 253, 32, 2, 102, 246,
0, 30, 103, 202, 1, 255, 222, 95, 254, 144, 8, 157, 251, 0, 39, 136,
229, 0, 255, 243, 128, 0, 22, 240, 8, 175, 253, 138, 1, 147, 81, 10,
85, 32, 21, 14, 221, 113, 178, 3, 140, 16, 5, 225, 225, 128, 224, 24,
231, 129, 68, 64, 28, 202, 2, 64, 31, 252, 38, 136, 156, 3, 218, 239,
72, 9, 0, 87, 254, 32, 2, 136, 128, 63, 104, 72, 7, 230, 39, 64,
8, 136, 1, 120, 221, 166, 244, 40, 0, 94, 202, 204, 125, 64, 8, 20,
249, 241, 0, 195, 242, 1, 255, 242, 239, 253, 192, 25, 157, 243, 0, 104,
143, 0, 127, 250, 0, 8, 20, 244, 255, 252, 140, 216, 0, 205, 138, 102,
1, 153, 136, 3, 255, 254, 1, 255, 205, 41, 152, 6, 102, 38, 108, 0,
102, 192, 0, 22, 240, 15, 211, 230, 1, 255, 255, 0, 255, 230, 187, 0,
113, 128, 85, 32, 28, 224, 97, 65, 32, 19, 146, 128, 28, 219, 103, 32,
172, 2, 200, 6, 38, 193, 0, 8, 22, 244, 248, 0, 201, 250, 1, 241,
80, 120, 7, 220, 52, 64, 30, 147, 101, 0, 242, 177, 72, 7, 138, 131,
192, 60, 60, 16, 64, 30, 99, 10, 0, 252, 138, 80, 1, 226, 171, 23,
32, 14, 81, 20, 7, 0, 126, 99, 51, 0, 126, 224, 129, 0, 248, 156,
108, 3, 244, 18, 160, 8, 20, 240, 251, 0, 255, 255, 128, 127, 250, 150,
35, 204, 0, 23, 127, 96, 8, 20, 248, 253, 0, 213, 246, 0, 34, 0,
74, 1, 202, 0, 80, 14, 43, 0, 120, 136, 2, 67, 16, 86, 0, 218,
14, 161, 96, 25, 139, 124, 76, 64, 50, 162, 184, 7, 172, 1, 160, 28,
38, 34, 64, 15, 153, 128, 31, 162, 0, 31, 253, 96, 8, 20, 249, 247,
0, 199, 242, 0, 144, 15, 225, 112, 15, 233, 0, 252, 162, 224, 31, 112,
200, 7, 207, 2, 192, 31, 48, 192, 7, 232, 22, 0, 249, 134, 28, 3,
233, 30, 0, 249, 197, 64, 63, 72, 7, 243, 136, 7, 244, 128, 0, 8,
20, 240, 1, 223, 250, 200, 2, 76, 67, 50, 105, 128, 40, 119, 50, 13,
6, 25, 32, 1, 192, 182, 3, 0, 102, 12, 113, 16, 6, 17, 57, 24,
7, 140, 192, 32, 31, 8, 8, 7, 194, 70, 1, 227, 51, 136, 128, 48,
137, 240, 24, 3, 48, 99, 12, 24, 0, 164, 88, 40, 50, 237, 163, 64,
4, 212, 77, 136, 0, 8, 22, 242, 255, 238, 145, 0, 196, 239, 43, 121,
0, 79, 17, 92, 140, 128, 126, 98, 65, 0, 252, 224, 96, 31, 152, 12,
3, 229, 52, 16, 3, 196, 87, 67, 32, 17, 59, 202, 222, 64, 18, 255,
221, 34, 1, 255, 237, 7, 89, 32, 8, 239, 253, 102, 1, 201, 136, 102,
76, 64, 8, 108, 119, 49, 163, 98, 0, 96, 130, 0, 21, 131, 0, 44,
24, 3, 40, 88, 0, 200, 3, 196, 96, 19, 0, 121, 128, 2, 1, 254,
17, 0, 127, 132, 0, 192, 30, 96, 8, 200, 3, 196, 96, 11, 5, 0,
202, 22, 0, 96, 178, 0, 21, 131, 0, 6, 199, 110, 218, 52, 32, 18,
98, 36, 33, 160, 28, 119, 255, 27, 208, 7, 225, 196, 113, 0, 254, 189,
16, 8, 22, 243, 255, 236, 96, 14, 55, 115, 20, 208, 6, 72, 132, 241,
170, 128, 63, 120, 120, 7, 226, 1, 0, 252, 64, 32, 31, 188, 56, 2,
72, 132, 241, 178, 0, 70, 238, 97, 153, 0, 103, 255, 80, 112, 7, 229,
23, 16, 15, 208, 12, 1, 249, 134, 64, 63, 164, 92, 3, 243, 4, 128,
8, 22, 240, 1, 223, 126, 40, 6, 92, 69, 81, 85, 128, 6, 135, 110,
185, 16, 224, 128, 196, 1, 72, 80, 4, 32, 24, 166, 193, 1, 148, 3,
51, 0, 108, 43, 24, 64, 57, 53, 14, 122, 0, 56, 175, 160, 95, 64,
60, 47, 202, 84, 10, 192, 29, 64, 161, 210, 128, 31, 188, 36, 64, 39,
4, 4, 114, 234, 156, 129, 144, 4, 90, 33, 134, 60, 128, 0, 24, 243,
255, 255, 32, 179, 96, 3, 55, 20, 206, 33, 153, 196, 1, 255, 255, 0,
255, 252, 128, 8, 20, 250, 241, 0, 197, 242, 1, 255, 199, 48, 15, 254,
241, 128, 127, 243, 204, 4, 3, 8, 31, 130, 0, 100, 15, 112, 146, 0,
20, 131, 141, 14, 213, 52, 104, 65, 113, 21, 73, 138, 0, 0, 24, 242,
252, 0, 246, 248, 145, 12, 3, 132, 140, 65, 1, 64, 51, 133, 128, 52,
48, 3, 96, 32, 1, 1, 192, 50, 9, 128, 74, 36, 0, 49, 112, 13,
224, 128, 11, 13, 0, 200, 26, 0, 64, 64, 12, 38, 128, 38, 128, 30,
176, 68, 6, 128, 121, 67, 60, 28, 3, 196, 69, 67, 16, 15, 144, 133,
0, 63, 104, 2, 192, 63, 32, 9, 128, 96, 0, 24, 243, 247, 0, 95,
128, 15, 220, 131, 128, 10, 4, 12, 4, 32, 96, 34, 7, 3, 1, 1,
96, 32, 6, 135, 3, 1, 16, 20, 12, 128, 64, 129, 132, 60, 149, 192,
132, 0, 64, 36, 254, 64, 196, 0, 224, 53, 34, 1, 27, 0, 8, 28,
117, 65, 196, 128, 14, 24, 12, 34, 192, 240, 1, 3, 129, 129, 56, 16,
0, 64, 72, 0, 162, 12, 1, 16, 48, 3, 128, 4, 1, 48, 24, 0,
192, 2, 1, 16, 112, 1, 64, 128, 0, 0, 24, 240, 207, 80, 12, 63,
225, 15, 8, 0, 214, 16, 32, 106, 76, 0, 37, 23, 0, 160, 32, 1,
33, 96, 24, 156, 92, 208, 212, 3, 164, 103, 195, 192, 60, 48, 38, 134,
1, 243, 128, 56, 3, 244, 128, 36, 3, 225, 114, 99, 80, 15, 88, 68,
2, 0, 56, 212, 148, 92, 152, 3, 120, 72, 2, 66, 4, 0, 166, 100,
0, 11, 140, 128, 32, 60, 3, 64, 185, 0, 0, 24, 242, 253, 0, 225,
254, 2, 66, 80, 13, 33, 32, 8, 9, 0, 204, 12, 0, 51, 192, 6,
23, 16, 10, 2, 64, 22, 18, 1, 144, 148, 84, 152, 64, 58, 2, 100,
22, 1, 229, 39, 53, 32, 15, 172, 1, 32, 31, 152, 12, 192, 31, 253,
103, 0, 255, 232, 128, 8, 20, 252, 255, 252, 150, 205, 224, 3, 60, 207,
96, 41, 0, 122, 194, 192, 61, 3, 2, 1, 196, 228, 224, 30, 144, 144,
15, 34, 21, 0, 61, 33, 96, 30, 114, 129, 0, 225, 130, 112, 15, 88,
64, 7, 145, 81, 64, 61, 0, 8, 143, 32, 130, 59, 251, 0, 39, 75,
70, 136, 130, 221, 224, 1, 127, 128, 63, 255, 224, 2, 136, 0, 78, 224,
23, 209, 9, 241, 0, 234, 6, 0, 227, 42, 0, 245, 17, 128, 115, 5,
128, 112, 163, 0, 123, 133, 0, 57, 71, 128, 60, 234, 32, 29, 64, 224,
28, 101, 64, 30, 163, 32, 14, 96, 160, 14, 20, 96, 15, 112, 160, 7,
40, 112, 31, 75, 64, 136, 152, 29, 235, 15, 241, 0, 127, 255, 192, 17,
2, 0, 59, 128, 0, 17, 208, 128, 11, 116, 1, 198, 68, 48, 13, 64,
10, 0, 204, 170, 96, 9, 131, 184, 10, 0, 161, 68, 12, 129, 27, 0,
24, 202, 130, 128, 20, 20, 15, 212, 35, 119, 252, 105, 17, 249, 0, 35,
8, 53, 115, 4, 174, 1, 243, 144, 8, 20, 176, 2, 103, 246, 40, 4,
214, 46, 227, 166, 1, 146, 216, 157, 9, 0, 68, 128, 68, 128, 66, 232,
1, 132, 2, 25, 223, 249, 64, 44, 100, 171, 196, 0, 49, 68, 170, 24,
128, 126, 23, 0, 56, 196, 188, 249, 0, 139, 21, 225, 97, 193, 64, 8,
20, 244, 248, 0, 255, 238, 62, 254, 176, 6, 120, 117, 57, 112, 8, 118,
169, 131, 2, 0, 98, 0, 20, 131, 128, 124, 129, 224, 31, 8, 24, 7,
194, 6, 1, 242, 135, 128, 20, 3, 88, 56, 0, 181, 219, 10, 4, 1,
11, 50, 25, 112, 8, 20, 176, 1, 223, 126, 168, 4, 152, 142, 193, 82,
0, 160, 201, 150, 163, 26, 139, 152, 5, 228, 186, 24, 1, 147, 88, 65,
192, 62, 16, 112, 15, 180, 48, 3, 20, 34, 139, 144, 5, 14, 224, 160,
217, 141, 87, 48, 76, 71, 112, 220, 0, 8, 20, 240, 15, 163, 208, 3,
255, 168, 187, 252, 224, 25, 168, 149, 33, 192, 3, 35, 181, 77, 16, 3,
131, 16, 0, 152, 1, 225, 128, 31, 24, 56, 7, 198, 14, 1, 247, 134,
0, 124, 224, 196, 0, 21, 0, 12, 142, 213, 60, 128, 38, 162, 84, 104,
0, 0, 8, 20, 176, 1, 87, 126, 40, 4, 122, 168, 229, 80, 0, 209,
218, 142, 55, 38, 25, 32, 10, 65, 124, 50, 103, 120, 113, 130, 51, 101,
3, 0, 103, 255, 171, 66, 192, 62, 96, 116, 0, 138, 200, 108, 46, 162,
181, 76, 19, 85, 29, 239, 16, 8, 23, 0, 14, 38, 135, 64, 14, 125,
151, 139, 0, 199, 5, 127, 237, 0, 214, 16, 128, 2, 0, 194, 12, 1,
209, 254, 96, 207, 249, 2, 230, 70, 15, 51, 40, 27, 49, 66, 217, 161,
0, 255, 255, 128, 127, 240, 128, 15, 20, 240, 3, 111, 244, 63, 160, 60,
132, 74, 64, 0, 96, 113, 221, 134, 0, 112, 145, 0, 144, 1, 224, 96,
31, 206, 1, 252, 224, 31, 120, 96, 7, 206, 12, 64, 1, 96, 0, 200,
237, 83, 196, 2, 106, 37, 118, 112, 12, 187, 251, 4, 12, 16, 160, 17,
41, 16, 14, 174, 43, 66, 64, 23, 46, 229, 76, 64, 8, 20, 244, 247,
0, 255, 238, 29, 255, 72, 128, 87, 128, 198, 218, 1, 22, 220, 233, 25,
128, 12, 64, 21, 2, 128, 60, 3, 8, 7, 241, 128, 127, 250, 0, 8,
20, 240, 12, 222, 128, 31, 112, 16, 7, 209, 204, 1, 248, 64, 59, 255,
152, 3, 51, 70, 1, 233, 154, 128, 63, 254, 211, 53, 5, 76, 156, 25,
163, 3, 102, 80, 23, 15, 48, 13, 60, 64, 24, 196, 64, 26, 184, 192,
56, 64, 127, 248, 197, 154, 32, 10, 102, 80, 15, 255, 145, 0, 112, 168,
28, 66, 124, 32, 21, 216, 169, 192, 8, 22, 244, 248, 0, 255, 241, 175,
232, 128, 121, 40, 176, 64, 57, 44, 124, 64, 56, 236, 112, 128, 56, 180,
44, 128, 60, 162, 18, 1, 250, 212, 228, 3, 206, 150, 76, 160, 31, 15,
5, 16, 7, 199, 33, 224, 31, 153, 74, 128, 8, 20, 240, 255, 230, 0,
204, 209, 128, 122, 102, 160, 15, 255, 248, 7, 255, 78, 102, 160, 169, 147,
131, 52, 96, 108, 202, 0, 24, 177, 249, 191, 213, 191, 211, 0, 155, 28,
168, 160, 184, 2, 87, 129, 20, 186, 144, 4, 96, 3, 48, 0, 192, 64,
63, 255, 224, 31, 192, 8, 20, 180, 245, 76, 253, 145, 0, 186, 217, 128,
218, 1, 46, 212, 233, 152, 128, 12, 64, 21, 131, 128, 60, 3, 8, 24,
7, 255, 192, 8, 20, 176, 2, 95, 250, 208, 2, 107, 86, 98, 219, 1,
73, 124, 203, 202, 74, 130, 196, 0, 54, 20, 96, 224, 25, 0, 220, 4,
3, 16, 59, 128, 64, 48, 131, 152, 32, 6, 64, 58, 8, 16, 0, 192,
81, 73, 124, 203, 202, 72, 26, 201, 152, 86, 192, 15, 20, 244, 246, 125,
253, 96, 13, 18, 234, 82, 224, 17, 253, 83, 2, 4, 0, 162, 0, 55,
7, 0, 120, 6, 192, 224, 15, 156, 4, 3, 231, 1, 0, 251, 3, 64,
22, 1, 19, 2, 0, 15, 102, 90, 48, 32, 7, 87, 98, 151, 0, 190,
59, 245, 128, 63, 250, 128, 15, 20, 240, 2, 239, 244, 199, 160, 61, 4,
194, 184, 0, 96, 113, 153, 136, 0, 112, 145, 0, 140, 1, 224, 96, 31,
206, 1, 252, 224, 31, 120, 96, 7, 206, 12, 64, 1, 80, 0, 192, 228,
203, 200, 2, 122, 54, 118, 112, 12, 187, 253, 0, 31, 253, 80, 24, 16,
188, 240, 109, 254, 80, 4, 200, 136, 34, 0, 61, 254, 250, 0, 45, 0,
60, 160, 31, 254, 144, 8, 20, 176, 1, 223, 126, 184, 4, 152, 174, 193,
22, 0, 144, 249, 150, 162, 64, 16, 128, 83, 76, 22, 28, 230, 4, 164,
13, 107, 25, 244, 64, 18, 95, 219, 46, 9, 58, 0, 18, 100, 44, 113,
34, 1, 8, 8, 160, 190, 98, 224, 152, 30, 149, 157, 159, 0, 8, 20,
224, 9, 156, 3, 245, 192, 7, 255, 14, 127, 196, 31, 248, 54, 100, 33,
51, 129, 25, 134, 12, 216, 3, 255, 212, 192, 128, 31, 112, 93, 77, 152,
4, 180, 74, 206, 0, 8, 20, 179, 248, 0, 209, 232, 1, 255, 232, 16,
15, 132, 3, 248, 129, 192, 50, 128, 78, 54, 207, 166, 1, 68, 22, 106,
224, 0, 0, 22, 176, 223, 0, 225, 252, 10, 5, 0, 206, 20, 12, 28,
1, 168, 24, 5, 80, 64, 2, 108, 1, 112, 48, 1, 130, 128, 36, 42,
0, 81, 24, 6, 162, 45, 64, 28, 193, 84, 6, 0, 225, 70, 85, 8,
7, 188, 75, 128, 62, 65, 18, 0, 64, 0, 24, 182, 242, 0, 85, 128,
95, 10, 14, 0, 68, 0, 12, 52, 195, 64, 132, 12, 20, 16, 8, 128,
226, 72, 28, 34, 4, 112, 197, 124, 3, 80, 7, 144, 38, 97, 65, 76,
0, 160, 132, 136, 19, 28, 0, 24, 112, 25, 13, 2, 128, 70, 168, 0,
71, 17, 0, 74, 24, 0, 193, 80, 13, 224, 96, 4, 12, 0, 0, 8,
22, 183, 249, 0, 207, 244, 14, 140, 160, 3, 130, 160, 5, 13, 136, 112,
112, 4, 52, 53, 37, 6, 1, 145, 209, 145, 192, 61, 32, 15, 0, 250,
192, 18, 1, 230, 85, 73, 72, 6, 41, 26, 100, 100, 0, 184, 52, 1,
67, 66, 16, 110, 96, 1, 177, 160, 7, 24, 241, 254, 0, 247, 120, 137,
69, 64, 50, 138, 136, 72, 112, 6, 224, 144, 1, 153, 8, 0, 40, 102,
0, 164, 44, 0, 193, 32, 25, 73, 128, 18, 42, 1, 214, 12, 131, 32,
30, 97, 190, 6, 0, 249, 137, 88, 64, 62, 144, 5, 128, 126, 17, 33,
0, 126, 113, 240, 15, 197, 4, 128, 30, 58, 192, 224, 15, 149, 71, 102,
1, 224, 8, 20, 181, 255, 252, 110, 254, 80, 1, 18, 35, 156, 40, 64,
58, 137, 212, 3, 153, 78, 0, 56, 228, 116, 3, 135, 67, 68, 3, 168,
100, 192, 58, 17, 88, 3, 145, 192, 157, 249, 8, 0, 241, 29, 160, 31,
15, 64, 12, 153, 32, 17, 219, 88, 5, 1, 68, 1, 34, 0, 48, 128,
126, 16, 12, 96, 30, 64, 208, 1, 52, 19, 0, 62, 79, 4, 1, 44,
84, 1, 36, 194, 40, 6, 64, 192, 12, 64, 96, 30, 16, 12, 32, 224,
28, 102, 0, 232, 9, 0, 201, 77, 64, 25, 126, 192, 47, 5, 59, 176,
7, 255, 96, 31, 15, 74, 195, 0, 208, 248, 96, 17, 80, 72, 6, 18,
64, 14, 17, 0, 127, 240, 28, 4, 3, 24, 40, 6, 145, 165, 32, 0,
224, 84, 128, 92, 47, 224, 7, 57, 132, 0, 96, 56, 6, 112, 16, 15,
248, 68, 1, 132, 148, 3, 80, 64, 5, 139, 102, 1, 111, 32, 6, 1,
24, 64, 61, 253, 80, 12, 198, 58, 106, 117, 32, 2, 149, 113, 250, 229,
110, 172, 22, 74, 16, 5, 73, 169, 96, 0, 0, 0
};

View File

@ -1,4 +1,4 @@
/** /**
* @file test_font_loader.c * @file test_font_loader.c
* *
*/ */
@ -9,6 +9,7 @@
#if LV_BUILD_TEST #if LV_BUILD_TEST
#include "../../lvgl.h" #include "../../lvgl.h"
//#include "lvgl.h"
#include "unity/unity.h" #include "unity/unity.h"
@ -25,7 +26,9 @@
**********************/ **********************/
static int compare_fonts(lv_font_t * f1, lv_font_t * f2); static int compare_fonts(lv_font_t * f1, lv_font_t * f2);
void test_font_loader(void); void test_font_loader_with_cache(void);
void test_font_loader_no_cache(void);
void test_font_loader_from_buffer(void);
/********************** /**********************
* STATIC VARIABLES * STATIC VARIABLES
@ -39,37 +42,88 @@ void test_font_loader(void);
* GLOBAL FUNCTIONS * GLOBAL FUNCTIONS
**********************/ **********************/
/* fonts converted to C structs using the LVGL Font Converter */
extern lv_font_t font_1; extern lv_font_t font_1;
extern lv_font_t font_2; extern lv_font_t font_2;
extern lv_font_t font_3; extern lv_font_t font_3;
void test_font_loader(void) /* font binaries converted to plain C arrays */
{ extern uint8_t const font_1_buf[6876];
/*Test with cache ('A' has cache)*/ extern uint8_t const font_2_buf[7252];
lv_font_t * font_1_bin = lv_font_load("A:src/test_assets/font_1.fnt"); extern uint8_t const font_3_buf[4892];
lv_font_t * font_2_bin = lv_font_load("A:src/test_assets/font_2.fnt");
lv_font_t * font_3_bin = lv_font_load("A:src/test_assets/font_3.fnt");
compare_fonts(&font_1, font_1_bin); static lv_font_t * font_1_bin;
compare_fonts(&font_2, font_2_bin); static lv_font_t * font_2_bin;
compare_fonts(&font_3, font_3_bin); static lv_font_t * font_3_bin;
void setUp(void)
{
/* Function run before every test */
}
void tearDown(void)
{
/* Function run after every test */
lv_obj_clean(lv_scr_act());
lv_font_free(font_1_bin); lv_font_free(font_1_bin);
lv_font_free(font_2_bin); lv_font_free(font_2_bin);
lv_font_free(font_3_bin); lv_font_free(font_3_bin);
}
/*Test with cache ('B' has NO cache)*/ static void common(void)
{
compare_fonts(&font_1, font_1_bin);
compare_fonts(&font_2, font_2_bin);
compare_fonts(&font_3, font_3_bin);
/* create labels for testing */
lv_obj_t * scr = lv_scr_act();
lv_obj_t * label1 = lv_label_create(scr);
lv_obj_t * label2 = lv_label_create(scr);
lv_obj_t * label3 = lv_label_create(scr);
lv_obj_set_flex_flow(scr, LV_FLEX_FLOW_COLUMN);
lv_obj_set_flex_align(scr, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER);
lv_label_set_text(label1, "The quick brown fox jumped over the lazy dog");
lv_obj_set_style_text_font(label1, font_1_bin, 0);
lv_label_set_text(label2, "The quick brown fox jumped over the lazy dog");
lv_obj_set_style_text_font(label2, font_2_bin, 0);
lv_label_set_text(label3, "The quick brown fox jumped over the lazy dog");
lv_obj_set_style_text_font(label3, font_3_bin, 0);
TEST_ASSERT_EQUAL_SCREENSHOT("font_loader_1.png");
}
void test_font_loader_with_cache(void)
{
/*Test with cache ('A' has cache)*/
font_1_bin = lv_font_load("A:src/test_assets/font_1.fnt");
font_2_bin = lv_font_load("A:src/test_assets/font_2.fnt");
font_3_bin = lv_font_load("A:src/test_assets/font_3.fnt");
common();
}
void test_font_loader_no_cache(void)
{
/*Test without cache ('B' has NO cache)*/
font_1_bin = lv_font_load("B:src/test_assets/font_1.fnt"); font_1_bin = lv_font_load("B:src/test_assets/font_1.fnt");
font_2_bin = lv_font_load("B:src/test_assets/font_2.fnt"); font_2_bin = lv_font_load("B:src/test_assets/font_2.fnt");
font_3_bin = lv_font_load("B:src/test_assets/font_3.fnt"); font_3_bin = lv_font_load("B:src/test_assets/font_3.fnt");
compare_fonts(&font_1, font_1_bin); common();
compare_fonts(&font_2, font_2_bin); }
compare_fonts(&font_3, font_3_bin);
lv_font_free(font_1_bin); void test_font_loader_from_buffer(void)
lv_font_free(font_2_bin); {
lv_font_free(font_3_bin); /*Test with memfs*/
font_1_bin = lv_font_load_from_buffer((void *)&font_1_buf, sizeof(font_1_buf));
font_2_bin = lv_font_load_from_buffer((void *)&font_2_buf, sizeof(font_2_buf));
font_3_bin = lv_font_load_from_buffer((void *)&font_3_buf, sizeof(font_3_buf));
common();
} }
static int compare_fonts(lv_font_t * f1, lv_font_t * f2) static int compare_fonts(lv_font_t * f1, lv_font_t * f2)